From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 1/2] drm/i915/selftests: Verify the LRC register layout between init and HW Date: Tue, 24 Sep 2019 13:21:38 +0300 Message-ID: <87mueuyoy5.fsf@gaia.fi.intel.com> References: <20190923230209.16480-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id B9E4289E08 for ; Tue, 24 Sep 2019 10:22:05 +0000 (UTC) In-Reply-To: <20190923230209.16480-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gQmVmb3Jl IHdlIHN1Ym1pdCB0aGUgZmlyc3QgY29udGV4dCB0byBIVywgd2UgbmVlZCB0byBjb25zdHJ1Y3Qg YSB2YWxpZAo+IGltYWdlIG9mIHRoZSByZWdpc3RlciBzdGF0ZS4gVGhpcyBsYXlvdXQgaXMgZGVm aW5lZCBieSB0aGUgSFcgYW5kIHNob3VsZAo+IG1hdGNoIHRoZSBsYXlvdXQgZ2VuZXJhdGVkIGJ5 IEhXIHdoZW4gaXQgc2F2ZXMgdGhlIGNvbnRleHQgaW1hZ2UuCj4gQXNzZXJ0aW5nIHRoYXQgdGhp cyBzaG91bGQgYmUgZXF1aXZhbGVudCBzaG91bGQgaGVscCBhdm9pZCBhbnkgdW5kZWZpbmVkCj4g YmVoYXZpb3VyIGFuZCB2ZXJpZnkgdGhhdCB3ZSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBpbXBv cnRhbnQhCj4KPiBPZiBjb3Vyc2UsIGhhdmluZyBpbnNpc3RlZCB0aGF0IHRoZSBpbml0aWFsIHJl Z2lzdGVyIHN0YXRlIHdpdGhpbiB0aGUKPiBMUkMgc2hvdWxkIG1hdGNoIHRoYXQgcmV0dXJuZWQg YnkgSFcsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQgZG9lcy4KPgo+IFNpZ25lZC1vZmYtYnk6 IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENjOiBNaWthIEt1b3Bw YWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4LmludGVsLmNvbT4KPiBDYzogRGFuaWVsZSBDZXJhb2xv IFNwdXJpbyA8ZGFuaWVsZS5jZXJhb2xvc3B1cmlvQGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYyAgIHwgICAyICstCj4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jICAgICAgICAgICB8IDY2OSArKysrKysrKysr KystLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3JlZy5oICAgICAg IHwgIDYyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jICAgICAg ICB8IDE0MiArKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jICAgICAgICAg ICAgICB8ICAzNSArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuaCAgICAgICAg ICAgICAgfCAgIDUgKy0KPiAgLi4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRl c3RzLmggIHwgICAxICsKPiAgNyBmaWxlcyBjaGFuZ2VkLCA2NDkgaW5zZXJ0aW9ucygrKSwgMjY3 IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29u dGV4dC5jCj4gaW5kZXggNGEzNGM0ZjYyMDY1Li5mN2JhMDkzNWVkNjcgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMKPiBAQCAtMTExNSw3ICsxMTE1 LDcgQEAgc3RhdGljIGludCBnZW44X2VtaXRfcnBjc19jb25maWcoc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEsCj4gIAo+ICAJb2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNldChjZS0+c3RhdGUpICsKPiAg CQkgTFJDX1NUQVRFX1BOICogUEFHRV9TSVpFICsKPiAtCQkgKENUWF9SX1BXUl9DTEtfU1RBVEUg KyAxKSAqIDQ7Cj4gKwkJIENUWF9SX1BXUl9DTEtfU1RBVEUgKiA0Owo+ICAKPiAgCSpjcysrID0g TUlfU1RPUkVfRFdPUkRfSU1NX0dFTjQgfCBNSV9VU0VfR0dUVDsKPiAgCSpjcysrID0gbG93ZXJf MzJfYml0cyhvZmZzZXQpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCj4gaW5kZXgg NmNmZGMwZjlmMmI5Li5jMmMzZTU3NGFmM2EgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfbHJjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9scmMuYwo+IEBAIC0yMzAsOSArMjMwLDEwIEBAIHN0YXRpYyBpbnQgX19leGVjbGlzdHNfY29u dGV4dF9hbGxvYyhzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4gIAkJCQkgICAgIHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gIAo+ICBzdGF0aWMgdm9pZCBleGVjbGlzdHNfaW5p dF9yZWdfc3RhdGUodTMyICpyZWdfc3RhdGUsCj4gLQkJCQkgICAgIHN0cnVjdCBpbnRlbF9jb250 ZXh0ICpjZSwKPiAtCQkJCSAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0J CQkJICAgICBzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZyk7Cj4gKwkJCQkgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jb250ZXh0ICpjZSwKPiArCQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAo+ICsJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZywK PiArCQkJCSAgICAgYm9vbCBjbG9zZSk7Cj4gIAo+ICBzdGF0aWMgdm9pZCBtYXJrX2VpbyhzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAgewo+IEBAIC00NzEsNiArNDcyLDQxMSBAQCBscmNfZGVz Y3JpcHRvcihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKPiAgCXJldHVybiBkZXNjOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdTMyICpzZXRfb2Zm c2V0cyh1MzIgKnJlZ3MsCj4gKwkJCWNvbnN0IHU4ICpkYXRhLAo+ICsJCQljb25zdCBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gKyNkZWZpbmUgTk9QKHgpIChCSVQoNykgfCAoeCkp Cj4gKyNkZWZpbmUgTFJJKGNvdW50LCBmbGFncykgKChmbGFncykgPDwgNiB8IChjb3VudCkpCj4g KyNkZWZpbmUgUE9TVEVEIEJJVCgwKQo+ICsjZGVmaW5lIFJFRyh4KSAoKCh4KSA+PiAyKSB8IEJV SUxEX0JVR19PTl9aRVJPKHggPj0gMHgyMDApKQo+ICsjZGVmaW5lIFJFRzE2KHgpIFwKPiArCSgo KHgpID4+IDkpIHwgQklUKDcpIHwgQlVJTERfQlVHX09OX1pFUk8oeCA+PSAweDEwMDAwKSksIFwK PiArCSgoKHgpID4+IDIpICYgMHg3ZikKCkkgYW0gc3RpbGwgbm90IHN1cmUgaWYgdGhlIGFjdHVh bCBzYXZpbmcgYXJlIHdvcnRoIHRoZSBjb21wbGV4aXR5LgoKPiArI2RlZmluZSBFTkQoKSAwCj4g K3sKPiArCWNvbnN0IHUzMiBiYXNlID0gZW5naW5lLT5tbWlvX2Jhc2U7Cj4gKwo+ICsJd2hpbGUg KCpkYXRhKSB7Cj4gKwkJdTggY291bnQsIGZsYWdzOwo+ICsKPiArCQlpZiAoKmRhdGEgJiBCSVQo NykpIHsgLyogc2tpcCAqLwo+ICsJCQlyZWdzICs9ICpkYXRhKysgJiB+QklUKDcpOwo+ICsJCQlj b250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCWNvdW50ID0gKmRhdGEgJiAweDNmOwo+ICsJCWZsYWdz ID0gKmRhdGEgPj4gNjsKPiArCQlkYXRhKys7Cj4gKwo+ICsJCSpyZWdzID0gTUlfTE9BRF9SRUdJ U1RFUl9JTU0oY291bnQpOwo+ICsJCWlmIChmbGFncyAmIFBPU1RFRCkKPiArCQkJKnJlZ3MgfD0g TUlfTFJJX0ZPUkNFX1BPU1RFRDsKPiArCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0g MTEpCj4gKwkJCSpyZWdzIHw9IE1JX0xSSV9DU19NTUlPOwo+ICsJCXJlZ3MrKzsKPiArCj4gKwkJ R0VNX0JVR19PTighY291bnQpOwo+ICsJCWRvIHsKPiArCQkJdTMyIG9mZnNldCA9IDA7Cj4gKwkJ CXU4IHY7Cj4gKwo+ICsJCQlkbyB7Cj4gKwkJCQl2ID0gKmRhdGErKzsKPiArCQkJCW9mZnNldCA8 PD0gNzsKPiArCQkJCW9mZnNldCB8PSB2ICYgfkJJVCg3KTsKPiArCQkJfSB3aGlsZSAodiAmIEJJ VCg3KSk7CgouLi5idXQgcGVyaGFwcyB0aGlzIGFtb3VudCBvZiBleHRyYSBjYW4gYmUgdG9sZXJh dGVkLgoKRGlkIHlvdSBjaGVjayBob3cgdGhpcyB3b3VsZCBwbGF5IG91dCB3aXRoIGp1c3QgUkVH IGJlaW5nIHdpZGUgZW5vdWdoPwoKPiArCj4gKwkJCSpyZWdzID0gYmFzZSArIChvZmZzZXQgPDwg Mik7CgpJbiBoZXJlIHJlYWRlciBpcyB5ZWFybmluZyBmb3IgYW4gYXNzZXJ0cyBvZiBub3QgdHJh bXBsaW5nCm9uIHdyb25nIHRlcnJpdG9yeS4KCkJ1dCBJIHdvdWxkIGd1ZXNzIHRoYXQgeW91IHdh bnQgdGhpcyBwYXJ0IHRvIGJlIGxpa2UKb2lsZWQgbGlnaHRuaW5nIGFuZCB0ZXN0IHRoZSBtYWNo aW5lcnkgd2l0aCBzZWxmdGVzdC4uYXMgdGhlCnN1YmplY3Qgc2VlbXMgdG8gcHJvbWlzZS4KCj4g KwkJCXJlZ3MgKz0gMjsKPiArCQl9IHdoaWxlICgtLWNvdW50KTsKPiArCX0KPiArCj4gKwlyZXR1 cm4gcmVnczsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHU4IGdlbjhfeGNzX29mZnNldHNbXSA9 IHsKPiArCU5PUCgxKSwKPiArCUxSSSgxMSwgMCksCj4gKwlSRUcxNigweDI0NCksCj4gKwlSRUco MHgwMzQpLAo+ICsJUkVHKDB4MDMwKSwKPiArCVJFRygweDAzOCksCj4gKwlSRUcoMHgwM2MpLAo+ ICsJUkVHKDB4MTY4KSwKPiArCVJFRygweDE0MCksCj4gKwlSRUcoMHgxMTApLAo+ICsJUkVHKDB4 MTFjKSwKPiArCVJFRygweDExNCksCj4gKwlSRUcoMHgxMTgpLAo+ICsKPiArCU5PUCg5KSwKPiAr CUxSSSg5LCAwKSwKPiArCVJFRzE2KDB4M2E4KSwKPiArCVJFRzE2KDB4MjhjKSwKPiArCVJFRzE2 KDB4Mjg4KSwKPiArCVJFRzE2KDB4Mjg0KSwKPiArCVJFRzE2KDB4MjgwKSwKPiArCVJFRzE2KDB4 MjdjKSwKPiArCVJFRzE2KDB4Mjc4KSwKPiArCVJFRzE2KDB4Mjc0KSwKPiArCVJFRzE2KDB4Mjcw KSwKPiArCj4gKwlOT1AoMTMpLAo+ICsJTFJJKDIsIDApLAo+ICsJUkVHMTYoMHgyMDApLAo+ICsJ UkVHKDB4MDI4KSwKPiArCj4gKwlFTkQoKSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCB1OCBn ZW45X3hjc19vZmZzZXRzW10gPSB7Cj4gKwlOT1AoMSksCj4gKwlMUkkoMTQsIFBPU1RFRCksCj4g KwlSRUcxNigweDI0NCksCj4gKwlSRUcoMHgwMzQpLAo+ICsJUkVHKDB4MDMwKSwKPiArCVJFRygw eDAzOCksCj4gKwlSRUcoMHgwM2MpLAo+ICsJUkVHKDB4MTY4KSwKPiArCVJFRygweDE0MCksCj4g KwlSRUcoMHgxMTApLAo+ICsJUkVHKDB4MTFjKSwKPiArCVJFRygweDExNCksCj4gKwlSRUcoMHgx MTgpLAo+ICsJUkVHKDB4MWMwKSwKPiArCVJFRygweDFjNCksCj4gKwlSRUcoMHgxYzgpLAo+ICsK PiArCU5PUCgzKSwKPiArCUxSSSg5LCBQT1NURUQpLAo+ICsJUkVHMTYoMHgzYTgpLAo+ICsJUkVH MTYoMHgyOGMpLAo+ICsJUkVHMTYoMHgyODgpLAo+ICsJUkVHMTYoMHgyODQpLAo+ICsJUkVHMTYo MHgyODApLAo+ICsJUkVHMTYoMHgyN2MpLAo+ICsJUkVHMTYoMHgyNzgpLAo+ICsJUkVHMTYoMHgy NzQpLAo+ICsJUkVHMTYoMHgyNzApLAo+ICsKPiArCU5PUCgxMyksCj4gKwlMUkkoMSwgUE9TVEVE KSwKPiArCVJFRzE2KDB4MjAwKSwKPiArCj4gKwlOT1AoMTMpLAo+ICsJTFJJKDQ0LCBQT1NURUQp LAo+ICsJUkVHKDB4MDI4KSwKPiArCVJFRygweDA5YyksCj4gKwlSRUcoMHgwYzApLAo+ICsJUkVH KDB4MTc4KSwKPiArCVJFRygweDE3YyksCj4gKwlSRUcxNigweDM1OCksCj4gKwlSRUcoMHgxNzAp LAo+ICsJUkVHKDB4MTUwKSwKPiArCVJFRygweDE1NCksCj4gKwlSRUcoMHgxNTgpLAo+ICsJUkVH MTYoMHg0MWMpLAo+ICsJUkVHMTYoMHg2MDApLAo+ICsJUkVHMTYoMHg2MDQpLAo+ICsJUkVHMTYo MHg2MDgpLAo+ICsJUkVHMTYoMHg2MGMpLAo+ICsJUkVHMTYoMHg2MTApLAo+ICsJUkVHMTYoMHg2 MTQpLAo+ICsJUkVHMTYoMHg2MTgpLAo+ICsJUkVHMTYoMHg2MWMpLAo+ICsJUkVHMTYoMHg2MjAp LAo+ICsJUkVHMTYoMHg2MjQpLAo+ICsJUkVHMTYoMHg2MjgpLAo+ICsJUkVHMTYoMHg2MmMpLAo+ ICsJUkVHMTYoMHg2MzApLAo+ICsJUkVHMTYoMHg2MzQpLAo+ICsJUkVHMTYoMHg2MzgpLAo+ICsJ UkVHMTYoMHg2M2MpLAo+ICsJUkVHMTYoMHg2NDApLAo+ICsJUkVHMTYoMHg2NDQpLAo+ICsJUkVH MTYoMHg2NDgpLAo+ICsJUkVHMTYoMHg2NGMpLAo+ICsJUkVHMTYoMHg2NTApLAo+ICsJUkVHMTYo MHg2NTQpLAo+ICsJUkVHMTYoMHg2NTgpLAo+ICsJUkVHMTYoMHg2NWMpLAo+ICsJUkVHMTYoMHg2 NjApLAo+ICsJUkVHMTYoMHg2NjQpLAo+ICsJUkVHMTYoMHg2NjgpLAo+ICsJUkVHMTYoMHg2NmMp LAo+ICsJUkVHMTYoMHg2NzApLAo+ICsJUkVHMTYoMHg2NzQpLAo+ICsJUkVHMTYoMHg2NzgpLAo+ ICsJUkVHMTYoMHg2N2MpLAo+ICsJUkVHKDB4MDY4KSwKPiArCj4gKwlFTkQoKSwKPiArfTsKPiAr Cj4gK3N0YXRpYyBjb25zdCB1OCBnZW4xMl94Y3Nfb2Zmc2V0c1tdID0gewo+ICsJTk9QKDEpLAo+ ICsJTFJJKDEzLCBQT1NURUQpLAo+ICsJUkVHMTYoMHgyNDQpLAo+ICsJUkVHKDB4MDM0KSwKPiAr CVJFRygweDAzMCksCj4gKwlSRUcoMHgwMzgpLAo+ICsJUkVHKDB4MDNjKSwKPiArCVJFRygweDE2 OCksCj4gKwlSRUcoMHgxNDApLAo+ICsJUkVHKDB4MTEwKSwKPiArCVJFRygweDFjMCksCj4gKwlS RUcoMHgxYzQpLAo+ICsJUkVHKDB4MWM4KSwKPiArCVJFRygweDE4MCksCj4gKwlSRUcxNigweDJi NCksCj4gKwo+ICsJTk9QKDUpLAo+ICsJTFJJKDksIFBPU1RFRCksCj4gKwlSRUcxNigweDNhOCks Cj4gKwlSRUcxNigweDI4YyksCj4gKwlSRUcxNigweDI4OCksCj4gKwlSRUcxNigweDI4NCksCj4g KwlSRUcxNigweDI4MCksCj4gKwlSRUcxNigweDI3YyksCj4gKwlSRUcxNigweDI3OCksCj4gKwlS RUcxNigweDI3NCksCj4gKwlSRUcxNigweDI3MCksCj4gKwo+ICsJTk9QKDEzKSwKPiArCUxSSSgy LCBQT1NURUQpLAo+ICsJUkVHMTYoMHgyMDApLAo+ICsJUkVHMTYoMHgyMDQpLAo+ICsKPiArCU5P UCgxMSksCj4gKwlMUkkoNTAsIFBPU1RFRCksCj4gKwlSRUcxNigweDU4OCksCj4gKwlSRUcxNigw eDU4OCksCj4gKwlSRUcxNigweDU4OCksCj4gKwlSRUcxNigweDU4OCksCj4gKwlSRUcxNigweDU4 OCksCj4gKwlSRUcxNigweDU4OCksCj4gKwlSRUcoMHgwMjgpLAo+ICsJUkVHKDB4MDljKSwKPiAr CVJFRygweDBjMCksCj4gKwlSRUcoMHgxNzgpLAo+ICsJUkVHKDB4MTdjKSwKPiArCVJFRzE2KDB4 MzU4KSwKPiArCVJFRygweDE3MCksCj4gKwlSRUcoMHgxNTApLAo+ICsJUkVHKDB4MTU0KSwKPiAr CVJFRygweDE1OCksCj4gKwlSRUcxNigweDQxYyksCj4gKwlSRUcxNigweDYwMCksCj4gKwlSRUcx NigweDYwNCksCj4gKwlSRUcxNigweDYwOCksCj4gKwlSRUcxNigweDYwYyksCj4gKwlSRUcxNigw eDYxMCksCj4gKwlSRUcxNigweDYxNCksCj4gKwlSRUcxNigweDYxOCksCj4gKwlSRUcxNigweDYx YyksCj4gKwlSRUcxNigweDYyMCksCj4gKwlSRUcxNigweDYyNCksCj4gKwlSRUcxNigweDYyOCks Cj4gKwlSRUcxNigweDYyYyksCj4gKwlSRUcxNigweDYzMCksCj4gKwlSRUcxNigweDYzNCksCj4g KwlSRUcxNigweDYzOCksCj4gKwlSRUcxNigweDYzYyksCj4gKwlSRUcxNigweDY0MCksCj4gKwlS RUcxNigweDY0NCksCj4gKwlSRUcxNigweDY0OCksCj4gKwlSRUcxNigweDY0YyksCj4gKwlSRUcx NigweDY1MCksCj4gKwlSRUcxNigweDY1NCksCj4gKwlSRUcxNigweDY1OCksCj4gKwlSRUcxNigw eDY1YyksCj4gKwlSRUcxNigweDY2MCksCj4gKwlSRUcxNigweDY2NCksCj4gKwlSRUcxNigweDY2 OCksCj4gKwlSRUcxNigweDY2YyksCj4gKwlSRUcxNigweDY3MCksCj4gKwlSRUcxNigweDY3NCks Cj4gKwlSRUcxNigweDY3OCksCj4gKwlSRUcxNigweDY3YyksCj4gKwlSRUcoMHgwNjgpLAo+ICsK PiArCUVORCgpLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHU4IGdlbjhfcmNzX29mZnNldHNb XSA9IHsKPiArCU5PUCgxKSwKPiArCUxSSSgxNCwgUE9TVEVEKSwKPiArCVJFRzE2KDB4MjQ0KSwK PiArCVJFRygweDAzNCksCj4gKwlSRUcoMHgwMzApLAo+ICsJUkVHKDB4MDM4KSwKPiArCVJFRygw eDAzYyksCj4gKwlSRUcoMHgxNjgpLAo+ICsJUkVHKDB4MTQwKSwKPiArCVJFRygweDExMCksCj4g KwlSRUcoMHgxMWMpLAo+ICsJUkVHKDB4MTE0KSwKPiArCVJFRygweDExOCksCj4gKwlSRUcoMHgx YzApLAo+ICsJUkVHKDB4MWM0KSwKPiArCVJFRygweDFjOCksCj4gKwo+ICsJTk9QKDMpLAo+ICsJ TFJJKDksIFBPU1RFRCksCj4gKwlSRUcxNigweDNhOCksCj4gKwlSRUcxNigweDI4YyksCj4gKwlS RUcxNigweDI4OCksCj4gKwlSRUcxNigweDI4NCksCj4gKwlSRUcxNigweDI4MCksCj4gKwlSRUcx NigweDI3YyksCj4gKwlSRUcxNigweDI3OCksCj4gKwlSRUcxNigweDI3NCksCj4gKwlSRUcxNigw eDI3MCksCj4gKwo+ICsJTk9QKDEzKSwKPiArCUxSSSgxLCAwKSwKPiArCVJFRygweDBjOCksCj4g Kwo+ICsJRU5EKCksCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgdTggZ2VuMTFfcmNzX29mZnNl dHNbXSA9IHsKPiArCU5PUCgxKSwKPiArCUxSSSgxNSwgUE9TVEVEKSwKPiArCVJFRzE2KDB4MjQ0 KSwKPiArCVJFRygweDAzNCksCj4gKwlSRUcoMHgwMzApLAo+ICsJUkVHKDB4MDM4KSwKPiArCVJF RygweDAzYyksCj4gKwlSRUcoMHgxNjgpLAo+ICsJUkVHKDB4MTQwKSwKPiArCVJFRygweDExMCks Cj4gKwlSRUcoMHgxMWMpLAo+ICsJUkVHKDB4MTE0KSwKPiArCVJFRygweDExOCksCj4gKwlSRUco MHgxYzApLAo+ICsJUkVHKDB4MWM0KSwKPiArCVJFRygweDFjOCksCj4gKwlSRUcoMHgxODApLAo+ ICsKPiArCU5PUCgxKSwKPiArCUxSSSg5LCBQT1NURUQpLAo+ICsJUkVHMTYoMHgzYTgpLAo+ICsJ UkVHMTYoMHgyOGMpLAo+ICsJUkVHMTYoMHgyODgpLAo+ICsJUkVHMTYoMHgyODQpLAo+ICsJUkVH MTYoMHgyODApLAo+ICsJUkVHMTYoMHgyN2MpLAo+ICsJUkVHMTYoMHgyNzgpLAo+ICsJUkVHMTYo MHgyNzQpLAo+ICsJUkVHMTYoMHgyNzApLAo+ICsKPiArCUxSSSgxLCBQT1NURUQpLAo+ICsJUkVH KDB4MWIwKSwKPiArCj4gKwlOT1AoMTApLAo+ICsJTFJJKDEsIDApLAo+ICsJUkVHKDB4MGM4KSwK PiArCj4gKwlFTkQoKSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCB1OCBnZW4xMl9yY3Nfb2Zm c2V0c1tdID0gewo+ICsJTk9QKDEpLAo+ICsJTFJJKDEzLCBQT1NURUQpLAo+ICsJUkVHMTYoMHgy NDQpLAo+ICsJUkVHKDB4MDM0KSwKPiArCVJFRygweDAzMCksCj4gKwlSRUcoMHgwMzgpLAo+ICsJ UkVHKDB4MDNjKSwKPiArCVJFRygweDE2OCksCj4gKwlSRUcoMHgxNDApLAo+ICsJUkVHKDB4MTEw KSwKPiArCVJFRygweDFjMCksCj4gKwlSRUcoMHgxYzQpLAo+ICsJUkVHKDB4MWM4KSwKPiArCVJF RygweDE4MCksCj4gKwlSRUcxNigweDJiNCksCj4gKwo+ICsJTk9QKDUpLAo+ICsJTFJJKDksIFBP U1RFRCksCj4gKwlSRUcxNigweDNhOCksCj4gKwlSRUcxNigweDI4YyksCj4gKwlSRUcxNigweDI4 OCksCj4gKwlSRUcxNigweDI4NCksCj4gKwlSRUcxNigweDI4MCksCj4gKwlSRUcxNigweDI3Yyks Cj4gKwlSRUcxNigweDI3OCksCj4gKwlSRUcxNigweDI3NCksCj4gKwlSRUcxNigweDI3MCksCj4g Kwo+ICsJTFJJKDMsIFBPU1RFRCksCj4gKwlSRUcoMHgxYjApLAo+ICsJUkVHMTYoMHg1YTgpLAo+ ICsJUkVHMTYoMHg1YWMpLAo+ICsKPiArCU5PUCg2KSwKPiArCUxSSSgxLCAwKSwKPiArCVJFRygw eDBjOCksCj4gKwo+ICsJRU5EKCksCj4gK307Cj4gKwo+ICsjdW5kZWYgRU5ECj4gKyN1bmRlZiBS RUcxNgo+ICsjdW5kZWYgUkVHCj4gKyN1bmRlZiBMUkkKPiArI3VuZGVmIE5PUAo+ICsKPiArc3Rh dGljIGNvbnN0IHU4ICpyZWdfb2Zmc2V0cyhjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCj4gK3sKPiArCWlmIChlbmdpbmUtPmNsYXNzID09IFJFTkRFUl9DTEFTUykgewo+ICsJ CWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKPiArCQkJcmV0dXJuIGdlbjEyX3Jj c19vZmZzZXRzOwo+ICsJCWVsc2UgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDExKQo+ ICsJCQlyZXR1cm4gZ2VuMTFfcmNzX29mZnNldHM7Cj4gKwkJZWxzZQo+ICsJCQlyZXR1cm4gZ2Vu OF9yY3Nfb2Zmc2V0czsKPiArCX0gZWxzZSB7Cj4gKwkJaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5 MTUpID49IDEyKQo+ICsJCQlyZXR1cm4gZ2VuMTJfeGNzX29mZnNldHM7Cj4gKwkJZWxzZSBpZiAo SU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gOSkKPiArCQkJcmV0dXJuIGdlbjlfeGNzX29mZnNl dHM7Cj4gKwkJZWxzZQo+ICsJCQlyZXR1cm4gZ2VuOF94Y3Nfb2Zmc2V0czsKPiArCX0KPiArfQo+ ICsKPiAgc3RhdGljIHZvaWQgdW53aW5kX3dhX3RhaWwoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEp Cj4gIHsKPiAgCXJxLT50YWlsID0gaW50ZWxfcmluZ193cmFwKHJxLT5yaW5nLCBycS0+d2FfdGFp bCAtIFdBX1RBSUxfQllURVMpOwo+IEBAIC02NTQsNyArMTA2MCw3IEBAIHN0YXRpYyB1NjQgZXhl Y2xpc3RzX3VwZGF0ZV9jb250ZXh0KGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICAJ c3RydWN0IGludGVsX2NvbnRleHQgKmNlID0gcnEtPmh3X2NvbnRleHQ7Cj4gIAl1NjQgZGVzYzsK PiAgCj4gLQljZS0+bHJjX3JlZ19zdGF0ZVtDVFhfUklOR19UQUlMICsgMV0gPQo+ICsJY2UtPmxy Y19yZWdfc3RhdGVbQ1RYX1JJTkdfVEFJTF0gPQo+ICAJCWludGVsX3Jpbmdfc2V0X3RhaWwocnEt PnJpbmcsIHJxLT50YWlsKTsKPiAgCj4gIAkvKgo+IEBAIC04MjYsNTQgKzEyMzIsNyBAQCBzdGF0 aWMgYm9vbCBjYW5fbWVyZ2VfcnEoY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcHJldiwKPiAg c3RhdGljIHZvaWQgdmlydHVhbF91cGRhdGVfcmVnaXN0ZXJfb2Zmc2V0cyh1MzIgKnJlZ3MsCj4g IAkJCQkJICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+IC0JdTMyIGJh c2UgPSBlbmdpbmUtPm1taW9fYmFzZTsKPiAtCj4gLQkvKiBSZWZhY3RvciBzbyB0aGF0IHdlIG9u bHkgaGF2ZSBvbmUgcGxhY2UgdGhhdCBrbm93cyBhbGwgdGhlIG9mZnNldHMhICovCj4gLQlHRU1f V0FSTl9PTihJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMik7Cj4gLQo+IC0JLyogTXVzdCBt YXRjaCBleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUoKSEgKi8KPiAtCj4gLQkvKiBDb21tb24gcGFy dCAqLwo+IC0JcmVnc1tDVFhfQ09OVEVYVF9DT05UUk9MXSA9Cj4gLQkJaTkxNV9tbWlvX3JlZ19v ZmZzZXQoUklOR19DT05URVhUX0NPTlRST0woYmFzZSkpOwo+IC0JcmVnc1tDVFhfUklOR19IRUFE XSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfSEVBRChiYXNlKSk7Cj4gLQlyZWdzW0NUWF9S SU5HX1RBSUxdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19UQUlMKGJhc2UpKTsKPiAtCXJl Z3NbQ1RYX1JJTkdfQlVGRkVSX1NUQVJUXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfU1RB UlQoYmFzZSkpOwo+IC0JcmVnc1tDVFhfUklOR19CVUZGRVJfQ09OVFJPTF0gPSBpOTE1X21taW9f cmVnX29mZnNldChSSU5HX0NUTChiYXNlKSk7Cj4gLQo+IC0JcmVnc1tDVFhfQkJfSEVBRF9VXSA9 IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQkJBRERSX1VEVyhiYXNlKSk7Cj4gLQlyZWdzW0NU WF9CQl9IRUFEX0xdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19CQkFERFIoYmFzZSkpOwo+ IC0JcmVnc1tDVFhfQkJfU1RBVEVdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19CQlNUQVRF KGJhc2UpKTsKPiAtCj4gLQlyZWdzW0NUWF9TRUNPTkRfQkJfSEVBRF9VXSA9Cj4gLQkJaTkxNV9t bWlvX3JlZ19vZmZzZXQoUklOR19TQkJBRERSX1VEVyhiYXNlKSk7Cj4gLQlyZWdzW0NUWF9TRUNP TkRfQkJfSEVBRF9MXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfU0JCQUREUihiYXNlKSk7 Cj4gLQlyZWdzW0NUWF9TRUNPTkRfQkJfU1RBVEVdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklO R19TQkJTVEFURShiYXNlKSk7Cj4gLQo+IC0JLyogUFBHVFQgcGFydCAqLwo+IC0JcmVnc1tDVFhf Q1RYX1RJTUVTVEFNUF0gPQo+IC0JCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ1RYX1RJTUVT VEFNUChiYXNlKSk7Cj4gLQo+IC0JcmVnc1tDVFhfUERQM19VRFddID0gaTkxNV9tbWlvX3JlZ19v ZmZzZXQoR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMykpOwo+IC0JcmVnc1tDVFhfUERQM19MRFdd ID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgMykpOwo+IC0J cmVnc1tDVFhfUERQMl9VRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9V RFcoYmFzZSwgMikpOwo+IC0JcmVnc1tDVFhfUERQMl9MRFddID0gaTkxNV9tbWlvX3JlZ19vZmZz ZXQoR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgMikpOwo+IC0JcmVnc1tDVFhfUERQMV9VRFddID0g aTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMSkpOwo+IC0JcmVn c1tDVFhfUERQMV9MRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9MRFco YmFzZSwgMSkpOwo+IC0JcmVnc1tDVFhfUERQMF9VRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQo R0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMCkpOwo+IC0JcmVnc1tDVFhfUERQMF9MRFddID0gaTkx NV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgMCkpOwo+IC0KPiAtCWlm IChlbmdpbmUtPmNsYXNzID09IFJFTkRFUl9DTEFTUykgewo+IC0JCXJlZ3NbQ1RYX1JDU19JTkRJ UkVDVF9DVFhdID0KPiAtCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19JTkRJUkVDVF9DVFgo YmFzZSkpOwo+IC0JCXJlZ3NbQ1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUXSA9Cj4gLQkJCWk5 MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfSU5ESVJFQ1RfQ1RYX09GRlNFVChiYXNlKSk7Cj4gLQkJ cmVnc1tDVFhfQkJfUEVSX0NUWF9QVFJdID0KPiAtCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklO R19CQl9QRVJfQ1RYX1BUUihiYXNlKSk7Cj4gLQo+IC0JCXJlZ3NbQ1RYX1JfUFdSX0NMS19TVEFU RV0gPQo+IC0JCQlpOTE1X21taW9fcmVnX29mZnNldChHRU44X1JfUFdSX0NMS19TVEFURSk7Cj4g LQl9Cj4gKwlzZXRfb2Zmc2V0cyhyZWdzLCByZWdfb2Zmc2V0cyhlbmdpbmUpLCBlbmdpbmUpOwo+ ICB9Cj4gIAo+ICBzdGF0aWMgYm9vbCB2aXJ0dWFsX21hdGNoZXMoY29uc3Qgc3RydWN0IHZpcnR1 YWxfZW5naW5lICp2ZSwKPiBAQCAtMTczOCw4ICsyMDk3LDggQEAgc3RhdGljIHZvaWQgZXhlY2xp c3RzX2NvbnRleHRfdW5waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+ICB9Cj4gIAo+ICBz dGF0aWMgdm9pZAo+IC1fX2V4ZWNsaXN0c191cGRhdGVfcmVnX3N0YXRlKHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZSwKPiAtCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4g K19fZXhlY2xpc3RzX3VwZGF0ZV9yZWdfc3RhdGUoY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQg KmNlLAo+ICsJCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAg ewo+ICAJc3RydWN0IGludGVsX3JpbmcgKnJpbmcgPSBjZS0+cmluZzsKPiAgCXUzMiAqcmVncyA9 IGNlLT5scmNfcmVnX3N0YXRlOwo+IEBAIC0xNzQ3LDE2ICsyMTA2LDE2IEBAIF9fZXhlY2xpc3Rz X3VwZGF0ZV9yZWdfc3RhdGUoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICAJR0VNX0JVR19P TighaW50ZWxfcmluZ19vZmZzZXRfdmFsaWQocmluZywgcmluZy0+aGVhZCkpOwo+ICAJR0VNX0JV R19PTighaW50ZWxfcmluZ19vZmZzZXRfdmFsaWQocmluZywgcmluZy0+dGFpbCkpOwo+ICAKPiAt CXJlZ3NbQ1RYX1JJTkdfQlVGRkVSX1NUQVJUICsgMV0gPSBpOTE1X2dndHRfb2Zmc2V0KHJpbmct PnZtYSk7Cj4gLQlyZWdzW0NUWF9SSU5HX0hFQUQgKyAxXSA9IHJpbmctPmhlYWQ7Cj4gLQlyZWdz W0NUWF9SSU5HX1RBSUwgKyAxXSA9IHJpbmctPnRhaWw7Cj4gKwlyZWdzW0NUWF9SSU5HX0JVRkZF Ul9TVEFSVF0gPSBpOTE1X2dndHRfb2Zmc2V0KHJpbmctPnZtYSk7Cj4gKwlyZWdzW0NUWF9SSU5H X0hFQURdID0gcmluZy0+aGVhZDsKPiArCXJlZ3NbQ1RYX1JJTkdfVEFJTF0gPSByaW5nLT50YWls Owo+ICAKPiAgCS8qIFJQQ1MgKi8KPiAgCWlmIChlbmdpbmUtPmNsYXNzID09IFJFTkRFUl9DTEFT Uykgewo+IC0JCXJlZ3NbQ1RYX1JfUFdSX0NMS19TVEFURSArIDFdID0KPiArCQlyZWdzW0NUWF9S X1BXUl9DTEtfU1RBVEVdID0KPiAgCQkJaW50ZWxfc3NldV9tYWtlX3JwY3MoZW5naW5lLT5pOTE1 LCAmY2UtPnNzZXUpOwo+ICAKPiAtCQlpOTE1X29hX2luaXRfcmVnX3N0YXRlKGVuZ2luZSwgY2Us IHJlZ3MpOwo+ICsJCWk5MTVfb2FfaW5pdF9yZWdfc3RhdGUoY2UsIGVuZ2luZSk7Cj4gIAl9Cj4g IH0KPiAgCj4gQEAgLTI0NjUsNyArMjgyNCw3IEBAIHN0YXRpYyB2b2lkIF9fZXhlY2xpc3RzX3Jl c2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgYm9vbCBzdGFsbGVkKQo+ICAJCSAg ICAgICBlbmdpbmUtPnBpbm5lZF9kZWZhdWx0X3N0YXRlICsgTFJDX1NUQVRFX1BOICogUEFHRV9T SVpFLAo+ICAJCSAgICAgICBlbmdpbmUtPmNvbnRleHRfc2l6ZSAtIFBBR0VfU0laRSk7Cj4gIAl9 Cj4gLQlleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUocmVncywgY2UsIGVuZ2luZSwgY2UtPnJpbmcp Owo+ICsJZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKHJlZ3MsIGNlLCBlbmdpbmUsIGNlLT5yaW5n LCBmYWxzZSk7Cj4gIAo+ICBvdXRfcmVwbGF5Ogo+ICAJR0VNX1RSQUNFKCIlcyByZXBsYXkge2hl YWQ6JTA0eCwgdGFpbDolMDR4XG4iLAo+IEBAIC0zMDkyLDcgKzM0NTEsNyBAQCB2b2lkIGludGVs X2V4ZWNsaXN0c19zZXRfZGVmYXVsdF9zdWJtaXNzaW9uKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKPiAgCQkJZW5naW5lLT5mbGFncyB8PSBJOTE1X0VOR0lORV9IQVNfUFJFRU1QVElP TjsKPiAgCX0KPiAgCj4gLQlpZiAoZW5naW5lLT5jbGFzcyAhPSBDT1BZX0VOR0lORV9DTEFTUyAm JiBJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKPiArCWlmIChlbmdpbmUtPmNsYXNzICE9 IENPUFlfRU5HSU5FX0NMQVNTICYmIElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDExKQo+ICAJ CWVuZ2luZS0+ZmxhZ3MgfD0gSTkxNV9FTkdJTkVfSEFTX1JFTEFUSVZFX01NSU87CgpPaywgZmly c3QgSSB0aG91Z2h0IHRoaXMgd2FzIHVuaW50ZW50aW9uYWwuIEJ1dCBwcm9sbHkgbm90LgpEbyB5 b3UgbmVlZCBpdCBmb3IgdGhlIHZlcmlmaWVyIHRvIHdvcms/CgpDb3VsZCB3ZSBzdGlsbCByaXAg aXQgb3V0IHRvIGJlIGEgZmlyc3QgaW4gdGhlIHNlcmllcy4KSnVzdCB3b3VsZCB3YW50IHRvIGRp ZmZlcmlhbnRlIHBvc3NpYmxlIGljbCBoaWNrdXBzIGFwYXJ0CmZyb20gdGhpcyBwYXRjaC4KCj4g IH0KPiAgCj4gQEAgLTMyNDMsNyArMzYwMiw3IEBAIGludCBpbnRlbF9leGVjbGlzdHNfc3VibWlz c2lvbl9pbml0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCXJldHVybiAwOwo+ ICB9Cj4gIAo+IC1zdGF0aWMgdTMyIGludGVsX2xyX2luZGlyZWN0X2N0eF9vZmZzZXQoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICtzdGF0aWMgdTMyIGludGVsX2xyX2luZGlyZWN0 X2N0eF9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4g IAl1MzIgaW5kaXJlY3RfY3R4X29mZnNldDsKPiAgCj4gQEAgLTMyNzgsNzUgKzM2MzcsNDggQEAg c3RhdGljIHUzMiBpbnRlbF9scl9pbmRpcmVjdF9jdHhfb2Zmc2V0KHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiAgCj4gIAo+ICBzdGF0aWMgdm9pZCBpbml0X2NvbW1vbl9yZWdfc3Rh dGUodTMyICogY29uc3QgcmVncywKPiAtCQkJCSAgc3RydWN0IGk5MTVfcHBndHQgKiBjb25zdCBw cGd0dCwKPiAtCQkJCSAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkJICBz dHJ1Y3QgaW50ZWxfcmluZyAqcmluZykKPiArCQkJCSAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAo+ICsJCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZykKPiAg ewo+IC0JY29uc3QgdTMyIGJhc2UgPSBlbmdpbmUtPm1taW9fYmFzZTsKPiAtCj4gLQlDVFhfUkVH KHJlZ3MsIENUWF9DT05URVhUX0NPTlRST0wsIFJJTkdfQ09OVEVYVF9DT05UUk9MKGJhc2UpLAo+ ICsJcmVnc1tDVFhfQ09OVEVYVF9DT05UUk9MXSA9Cj4gIAkJX01BU0tFRF9CSVRfRElTQUJMRShD VFhfQ1RSTF9FTkdJTkVfQ1RYX1JFU1RPUkVfSU5ISUJJVCkgfAo+IC0JCV9NQVNLRURfQklUX0VO QUJMRShDVFhfQ1RSTF9JTkhJQklUX1NZTl9DVFhfU1dJVENIKSk7Cj4gLQlpZiAoSU5URUxfR0VO KGVuZ2luZS0+aTkxNSkgPCAxMSkgewo+IC0JCXJlZ3NbQ1RYX0NPTlRFWFRfQ09OVFJPTCArIDFd IHw9Cj4gKwkJX01BU0tFRF9CSVRfRU5BQkxFKENUWF9DVFJMX0lOSElCSVRfU1lOX0NUWF9TV0lU Q0gpOwo+ICsJaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpIDwgMTEpCj4gKwkJcmVnc1tDVFhf Q09OVEVYVF9DT05UUk9MXSB8PQo+ICAJCQlfTUFTS0VEX0JJVF9ESVNBQkxFKENUWF9DVFJMX0VO R0lORV9DVFhfU0FWRV9JTkhJQklUIHwKPiAgCQkJCQkgICAgQ1RYX0NUUkxfUlNfQ1RYX0VOQUJM RSk7Cj4gLQl9Cj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9SSU5HX0hFQUQsIFJJTkdfSEVBRChiYXNl KSwgMCk7Cj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9SSU5HX1RBSUwsIFJJTkdfVEFJTChiYXNlKSwg MCk7Cj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9SSU5HX0JVRkZFUl9TVEFSVCwgUklOR19TVEFSVChi YXNlKSwgMCk7Cj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9SSU5HX0JVRkZFUl9DT05UUk9MLCBSSU5H X0NUTChiYXNlKSwKPiAtCQlSSU5HX0NUTF9TSVpFKHJpbmctPnNpemUpIHwgUklOR19WQUxJRCk7 Cj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9CQl9IRUFEX1UsIFJJTkdfQkJBRERSX1VEVyhiYXNlKSwg MCk7Cj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9CQl9IRUFEX0wsIFJJTkdfQkJBRERSKGJhc2UpLCAw KTsKPiAtCUNUWF9SRUcocmVncywgQ1RYX0JCX1NUQVRFLCBSSU5HX0JCU1RBVEUoYmFzZSksIFJJ TkdfQkJfUFBHVFQpOwo+ICsKPiArCXJlZ3NbQ1RYX1JJTkdfQlVGRkVSX0NPTlRST0xdID0gUklO R19DVExfU0laRShyaW5nLT5zaXplKSB8IFJJTkdfVkFMSUQ7Cj4gKwlyZWdzW0NUWF9CQl9TVEFU RV0gPSBSSU5HX0JCX1BQR1RUOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBpbml0X3dhX2JiX3Jl Z19zdGF0ZSh1MzIgKiBjb25zdCByZWdzLAo+IC0JCQkJIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwKPiArCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4g IAkJCQkgdTMyIHBvc19iYl9wZXJfY3R4KQo+ICB7Cj4gLQlzdHJ1Y3QgaTkxNV9jdHhfd29ya2Fy b3VuZHMgKiBjb25zdCB3YV9jdHggPSAmZW5naW5lLT53YV9jdHg7Cj4gLQljb25zdCB1MzIgYmFz ZSA9IGVuZ2luZS0+bW1pb19iYXNlOwo+IC0JY29uc3QgdTMyIHBvc19pbmRpcmVjdF9jdHggPSBw b3NfYmJfcGVyX2N0eCArIDI7Cj4gLQljb25zdCB1MzIgcG9zX2luZGlyZWN0X2N0eF9vZmZzZXQg PSBwb3NfaW5kaXJlY3RfY3R4ICsgMjsKPiArCWNvbnN0IHN0cnVjdCBpOTE1X2N0eF93b3JrYXJv dW5kcyAqIGNvbnN0IHdhX2N0eCA9ICZlbmdpbmUtPndhX2N0eDsKPiArCj4gKwlpZiAod2FfY3R4 LT5wZXJfY3R4LnNpemUpIHsKPiArCQljb25zdCB1MzIgZ2d0dF9vZmZzZXQgPSBpOTE1X2dndHRf b2Zmc2V0KHdhX2N0eC0+dm1hKTsKPiArCj4gKwkJcmVnc1twb3NfYmJfcGVyX2N0eF0gPQo+ICsJ CQkoZ2d0dF9vZmZzZXQgKyB3YV9jdHgtPnBlcl9jdHgub2Zmc2V0KSB8IDB4MDE7Cj4gKwl9Cj4g IAo+IC0JQ1RYX1JFRyhyZWdzLCBwb3NfaW5kaXJlY3RfY3R4LCBSSU5HX0lORElSRUNUX0NUWChi YXNlKSwgMCk7Cj4gLQlDVFhfUkVHKHJlZ3MsIHBvc19pbmRpcmVjdF9jdHhfb2Zmc2V0LAo+IC0J CVJJTkdfSU5ESVJFQ1RfQ1RYX09GRlNFVChiYXNlKSwgMCk7Cj4gIAlpZiAod2FfY3R4LT5pbmRp cmVjdF9jdHguc2l6ZSkgewo+ICAJCWNvbnN0IHUzMiBnZ3R0X29mZnNldCA9IGk5MTVfZ2d0dF9v ZmZzZXQod2FfY3R4LT52bWEpOwo+ICAKPiAtCQlyZWdzW3Bvc19pbmRpcmVjdF9jdHggKyAxXSA9 Cj4gKwkJcmVnc1twb3NfYmJfcGVyX2N0eCArIDJdID0KPiAgCQkJKGdndHRfb2Zmc2V0ICsgd2Ff Y3R4LT5pbmRpcmVjdF9jdHgub2Zmc2V0KSB8Cj4gIAkJCSh3YV9jdHgtPmluZGlyZWN0X2N0eC5z aXplIC8gQ0FDSEVMSU5FX0JZVEVTKTsKPiAgCj4gLQkJcmVnc1twb3NfaW5kaXJlY3RfY3R4X29m ZnNldCArIDFdID0KPiArCQlyZWdzW3Bvc19iYl9wZXJfY3R4ICsgNF0gPQo+ICAJCQlpbnRlbF9s cl9pbmRpcmVjdF9jdHhfb2Zmc2V0KGVuZ2luZSkgPDwgNjsKPiAgCX0KPiAtCj4gLQlDVFhfUkVH KHJlZ3MsIHBvc19iYl9wZXJfY3R4LCBSSU5HX0JCX1BFUl9DVFhfUFRSKGJhc2UpLCAwKTsKPiAt CWlmICh3YV9jdHgtPnBlcl9jdHguc2l6ZSkgewo+IC0JCWNvbnN0IHUzMiBnZ3R0X29mZnNldCA9 IGk5MTVfZ2d0dF9vZmZzZXQod2FfY3R4LT52bWEpOwo+IC0KPiAtCQlyZWdzW3Bvc19iYl9wZXJf Y3R4ICsgMV0gPQo+IC0JCQkoZ2d0dF9vZmZzZXQgKyB3YV9jdHgtPnBlcl9jdHgub2Zmc2V0KSB8 IDB4MDE7Cj4gLQl9Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGluaXRfcHBndHRfcmVnX3N0YXRl KHUzMiAqcmVncywgdTMyIGJhc2UsCj4gLQkJCQkgc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0KQo+ ICtzdGF0aWMgdm9pZCBpbml0X3BwZ3R0X3JlZ19zdGF0ZSh1MzIgKnJlZ3MsIGNvbnN0IHN0cnVj dCBpOTE1X3BwZ3R0ICpwcGd0dCkKPiAgewo+IC0JLyogUERQIHZhbHVlcyB3ZWxsIGJlIGFzc2ln bmVkIGxhdGVyIGlmIG5lZWRlZCAqLwo+IC0JQ1RYX1JFRyhyZWdzLCBDVFhfUERQM19VRFcsIEdF TjhfUklOR19QRFBfVURXKGJhc2UsIDMpLCAwKTsKPiAtCUNUWF9SRUcocmVncywgQ1RYX1BEUDNf TERXLCBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAzKSwgMCk7Cj4gLQlDVFhfUkVHKHJlZ3MsIENU WF9QRFAyX1VEVywgR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMiksIDApOwo+IC0JQ1RYX1JFRyhy ZWdzLCBDVFhfUERQMl9MRFcsIEdFTjhfUklOR19QRFBfTERXKGJhc2UsIDIpLCAwKTsKPiAtCUNU WF9SRUcocmVncywgQ1RYX1BEUDFfVURXLCBHRU44X1JJTkdfUERQX1VEVyhiYXNlLCAxKSwgMCk7 Cj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9QRFAxX0xEVywgR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwg MSksIDApOwo+IC0JQ1RYX1JFRyhyZWdzLCBDVFhfUERQMF9VRFcsIEdFTjhfUklOR19QRFBfVURX KGJhc2UsIDApLCAwKTsKPiAtCUNUWF9SRUcocmVncywgQ1RYX1BEUDBfTERXLCBHRU44X1JJTkdf UERQX0xEVyhiYXNlLCAwKSwgMCk7Cj4gLQo+ICAJaWYgKGk5MTVfdm1faXNfNGx2bCgmcHBndHQt PnZtKSkgewo+ICAJCS8qIDY0YiBQUEdUVCAoNDhiaXQgY2Fub25pY2FsKQo+ICAJCSAqIFBEUDBf REVTQ1JJUFRPUiBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIHRvIFBNTDQgYW5kCj4gQEAgLTMz NjksOTEgKzM3MDEsMTEgQEAgc3RhdGljIHN0cnVjdCBpOTE1X3BwZ3R0ICp2bV9hbGlhcyhzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgCQlyZXR1cm4gaTkxNV92bV90b19wcGd0dCh2 bSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGdlbjhfaW5pdF9yZWdfc3RhdGUodTMyICogY29u c3QgcmVncywKPiAtCQkJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAtCQkJCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAtCQkJCXN0cnVjdCBpbnRlbF9yaW5nICpyaW5nKQo+ IC17Cj4gLQlzdHJ1Y3QgaTkxNV9wcGd0dCAqIGNvbnN0IHBwZ3R0ID0gdm1fYWxpYXMoY2UtPnZt KTsKPiAtCWNvbnN0IGJvb2wgcmNzID0gZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1M7Cj4g LQljb25zdCB1MzIgYmFzZSA9IGVuZ2luZS0+bW1pb19iYXNlOwo+IC0JY29uc3QgdTMyIGxyaV9i YXNlID0KPiAtCQlpbnRlbF9lbmdpbmVfaGFzX3JlbGF0aXZlX21taW8oZW5naW5lKSA/IE1JX0xS SV9DU19NTUlPIDogMDsKPiAtCj4gLQlyZWdzW0NUWF9MUklfSEVBREVSXzBdID0KPiAtCQlNSV9M T0FEX1JFR0lTVEVSX0lNTShyY3MgPyAxNCA6IDExKSB8Cj4gLQkJTUlfTFJJX0ZPUkNFX1BPU1RF RCB8Cj4gLQkJbHJpX2Jhc2U7Cj4gLQo+IC0JaW5pdF9jb21tb25fcmVnX3N0YXRlKHJlZ3MsIHBw Z3R0LCBlbmdpbmUsIHJpbmcpOwo+IC0JQ1RYX1JFRyhyZWdzLCBDVFhfU0VDT05EX0JCX0hFQURf VSwgUklOR19TQkJBRERSX1VEVyhiYXNlKSwgMCk7Cj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9TRUNP TkRfQkJfSEVBRF9MLCBSSU5HX1NCQkFERFIoYmFzZSksIDApOwo+IC0JQ1RYX1JFRyhyZWdzLCBD VFhfU0VDT05EX0JCX1NUQVRFLCBSSU5HX1NCQlNUQVRFKGJhc2UpLCAwKTsKPiAtCWlmIChyY3Mp Cj4gLQkJaW5pdF93YV9iYl9yZWdfc3RhdGUocmVncywgZW5naW5lLCBDVFhfQkJfUEVSX0NUWF9Q VFIpOwo+IC0KPiAtCXJlZ3NbQ1RYX0xSSV9IRUFERVJfMV0gPQo+IC0JCU1JX0xPQURfUkVHSVNU RVJfSU1NKDkpIHwKPiAtCQlNSV9MUklfRk9SQ0VfUE9TVEVEIHwKPiAtCQlscmlfYmFzZTsKPiAt Cj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9DVFhfVElNRVNUQU1QLCBSSU5HX0NUWF9USU1FU1RBTVAo YmFzZSksIDApOwo+IC0KPiAtCWluaXRfcHBndHRfcmVnX3N0YXRlKHJlZ3MsIGJhc2UsIHBwZ3R0 KTsKPiAtCj4gLQlpZiAocmNzKSB7Cj4gLQkJcmVnc1tDVFhfTFJJX0hFQURFUl8yXSA9IE1JX0xP QURfUkVHSVNURVJfSU1NKDEpIHwgbHJpX2Jhc2U7Cj4gLQkJQ1RYX1JFRyhyZWdzLCBDVFhfUl9Q V1JfQ0xLX1NUQVRFLCBHRU44X1JfUFdSX0NMS19TVEFURSwgMCk7Cj4gLQl9Cj4gLQo+IC0JcmVn c1tDVFhfRU5EXSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gLQlpZiAoSU5URUxfR0VOKGVuZ2lu ZS0+aTkxNSkgPj0gMTApCj4gLQkJcmVnc1tDVFhfRU5EXSB8PSBCSVQoMCk7Cj4gLX0KPiAtCj4g LXN0YXRpYyB2b2lkIGdlbjEyX2luaXRfcmVnX3N0YXRlKHUzMiAqIGNvbnN0IHJlZ3MsCj4gLQkJ CQkgc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+IC0JCQkJIHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSwKPiAtCQkJCSBzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZykKPiAtewo+IC0Jc3Ry dWN0IGk5MTVfcHBndHQgKiBjb25zdCBwcGd0dCA9IGk5MTVfdm1fdG9fcHBndHQoY2UtPnZtKTsK PiAtCWNvbnN0IGJvb2wgcmNzID0gZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1M7Cj4gLQlj b25zdCB1MzIgYmFzZSA9IGVuZ2luZS0+bW1pb19iYXNlOwo+IC0JY29uc3QgdTMyIGxyaV9iYXNl ID0KPiAtCQlpbnRlbF9lbmdpbmVfaGFzX3JlbGF0aXZlX21taW8oZW5naW5lKSA/IE1JX0xSSV9D U19NTUlPIDogMDsKPiAtCj4gLQlyZWdzW0NUWF9MUklfSEVBREVSXzBdID0KPiAtCQlNSV9MT0FE X1JFR0lTVEVSX0lNTShyY3MgPyAxMSA6IDkpIHwKPiAtCQlNSV9MUklfRk9SQ0VfUE9TVEVEIHwK PiAtCQlscmlfYmFzZTsKPiAtCj4gLQlpbml0X2NvbW1vbl9yZWdfc3RhdGUocmVncywgcHBndHQs IGVuZ2luZSwgcmluZyk7Cj4gLQo+IC0JLyogV2Ugd2FudCBjdHhfcHRyIGZvciBhbGwgZW5naW5l cyB0byBiZSBzZXQgKi8KPiAtCWluaXRfd2FfYmJfcmVnX3N0YXRlKHJlZ3MsIGVuZ2luZSwgR0VO MTJfQ1RYX0JCX1BFUl9DVFhfUFRSKTsKPiAtCj4gLQlyZWdzW0NUWF9MUklfSEVBREVSXzFdID0K PiAtCQlNSV9MT0FEX1JFR0lTVEVSX0lNTSg5KSB8Cj4gLQkJTUlfTFJJX0ZPUkNFX1BPU1RFRCB8 Cj4gLQkJbHJpX2Jhc2U7Cj4gLQo+IC0JQ1RYX1JFRyhyZWdzLCBDVFhfQ1RYX1RJTUVTVEFNUCwg UklOR19DVFhfVElNRVNUQU1QKGJhc2UpLCAwKTsKPiAtCj4gLQlpbml0X3BwZ3R0X3JlZ19zdGF0 ZShyZWdzLCBiYXNlLCBwcGd0dCk7Cj4gLQo+IC0JaWYgKHJjcykgewo+IC0JCXJlZ3NbR0VOMTJf Q1RYX0xSSV9IRUFERVJfM10gPQo+IC0JCQlNSV9MT0FEX1JFR0lTVEVSX0lNTSgxKSB8IGxyaV9i YXNlOwo+IC0JCUNUWF9SRUcocmVncywgQ1RYX1JfUFdSX0NMS19TVEFURSwgR0VOOF9SX1BXUl9D TEtfU1RBVEUsIDApOwo+IC0KPiAtCQkvKiBUT0RPOiBvYV9pbml0X3JlZ19zdGF0ZSA/ICovCj4g LQl9Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19pbml0X3JlZ19zdGF0ZSh1MzIg KnJlZ3MsCj4gLQkJCQkgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAtCQkJCSAgICAg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkJICAgICBzdHJ1Y3QgaW50ZWxf cmluZyAqcmluZykKPiArCQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ ICsJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQkg ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9yaW5nICpyaW5nLAo+ICsJCQkJICAgICBib29sIGNsb3Nl KQo+ICB7Cj4gIAkvKgo+ICAJICogQSBjb250ZXh0IGlzIGFjdHVhbGx5IGEgYmlnIGJhdGNoIGJ1 ZmZlciB3aXRoIHNldmVyYWwKPiBAQCAtMzQ2NSwxMCArMzcxNywyMSBAQCBzdGF0aWMgdm9pZCBl eGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUodTMyICpyZWdzLAo+ICAJICoKPiAgCSAqIE11c3Qga2Vl cCBjb25zaXN0ZW50IHdpdGggdmlydHVhbF91cGRhdGVfcmVnaXN0ZXJfb2Zmc2V0cygpLgo+ICAJ ICovCj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4gLQkJZ2VuMTJfaW5p dF9yZWdfc3RhdGUocmVncywgY2UsIGVuZ2luZSwgcmluZyk7Cj4gLQllbHNlCj4gLQkJZ2VuOF9p bml0X3JlZ19zdGF0ZShyZWdzLCBjZSwgZW5naW5lLCByaW5nKTsKPiArCXUzMiAqYmJlID0gc2V0 X29mZnNldHMocmVncywgcmVnX29mZnNldHMoZW5naW5lKSwgZW5naW5lKTsKPiArCj4gKwlpZiAo Y2xvc2UpIHsgLyogQ2xvc2UgdGhlIGJhdGNoOyB1c2VkIG1haW5seSBieSBsaXZlX2xyY19sYXlv dXQoKSAqLwo+ICsJCSpiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsJCWlmIChJTlRFTF9H RU4oZW5naW5lLT5pOTE1KSA+PSAxMCkKPiArCQkJKmJiZSB8PSBCSVQoMCk7Cj4gKwl9Cj4gKwo+ ICsJaW5pdF9jb21tb25fcmVnX3N0YXRlKHJlZ3MsIGVuZ2luZSwgcmluZyk7Cj4gKwlpbml0X3Bw Z3R0X3JlZ19zdGF0ZShyZWdzLCB2bV9hbGlhcyhjZS0+dm0pKTsKPiArCj4gKwlpbml0X3dhX2Ji X3JlZ19zdGF0ZShyZWdzLCBlbmdpbmUsCj4gKwkJCSAgICAgSU5URUxfR0VOKGVuZ2luZS0+aTkx NSkgPj0gMTIgPwo+ICsJCQkgICAgIEdFTjEyX0NUWF9CQl9QRVJfQ1RYX1BUUiA6Cj4gKwkJCSAg ICAgQ1RYX0JCX1BFUl9DVFhfUFRSKTsKPiAgfQo+ICAKPiAgc3RhdGljIGludAo+IEBAIC0zNDc3 LDYgKzM3NDAsNyBAQCBwb3B1bGF0ZV9scl9jb250ZXh0KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSwKPiAgCQkgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAJCSAgICBzdHJ1 Y3QgaW50ZWxfcmluZyAqcmluZykKPiAgewo+ICsJYm9vbCBpbmhpYml0ID0gdHJ1ZTsKPiAgCXZv aWQgKnZhZGRyOwo+ICAJdTMyICpyZWdzOwo+ICAJaW50IHJldDsKPiBAQCAtMzUwOCwxNCArMzc3 MiwxNSBAQCBwb3B1bGF0ZV9scl9jb250ZXh0KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAg Cj4gIAkJbWVtY3B5KHZhZGRyICsgc3RhcnQsIGRlZmF1bHRzICsgc3RhcnQsIGVuZ2luZS0+Y29u dGV4dF9zaXplKTsKPiAgCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKGVuZ2luZS0+ZGVmYXVs dF9zdGF0ZSk7Cj4gKwkJaW5oaWJpdCA9IGZhbHNlOwo+ICAJfQo+ICAKPiAgCS8qIFRoZSBzZWNv bmQgcGFnZSBvZiB0aGUgY29udGV4dCBvYmplY3QgY29udGFpbnMgc29tZSBmaWVsZHMgd2hpY2gg bXVzdAo+ICAJICogYmUgc2V0IHVwIHByaW9yIHRvIHRoZSBmaXJzdCBleGVjdXRpb24uICovCj4g IAlyZWdzID0gdmFkZHIgKyBMUkNfU1RBVEVfUE4gKiBQQUdFX1NJWkU7Cj4gLQlleGVjbGlzdHNf aW5pdF9yZWdfc3RhdGUocmVncywgY2UsIGVuZ2luZSwgcmluZyk7Cj4gLQlpZiAoIWVuZ2luZS0+ ZGVmYXVsdF9zdGF0ZSkKPiAtCQlyZWdzW0NUWF9DT05URVhUX0NPTlRST0wgKyAxXSB8PQo+ICsJ ZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKHJlZ3MsIGNlLCBlbmdpbmUsIHJpbmcsIGluaGliaXQp Owo+ICsJaWYgKGluaGliaXQpCj4gKwkJcmVnc1tDVFhfQ09OVEVYVF9DT05UUk9MXSB8PQo+ICAJ CQlfTUFTS0VEX0JJVF9FTkFCTEUoQ1RYX0NUUkxfRU5HSU5FX0NUWF9SRVNUT1JFX0lOSElCSVQp Owo+ICAKPiAgCXJldCA9IDA7Cj4gQEAgLTQyMTIsNyArNDQ3Nyw3IEBAIHZvaWQgaW50ZWxfbHJf Y29udGV4dF9yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gIAkJCSAgICAg ICBlbmdpbmUtPnBpbm5lZF9kZWZhdWx0X3N0YXRlICsgTFJDX1NUQVRFX1BOICogUEFHRV9TSVpF LAo+ICAJCQkgICAgICAgZW5naW5lLT5jb250ZXh0X3NpemUgLSBQQUdFX1NJWkUpOwo+ICAJCX0K PiAtCQlleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUocmVncywgY2UsIGVuZ2luZSwgY2UtPnJpbmcp Owo+ICsJCWV4ZWNsaXN0c19pbml0X3JlZ19zdGF0ZShyZWdzLCBjZSwgZW5naW5lLCBjZS0+cmlu ZywgZmFsc2UpOwo+ICAJfQo+ICAKPiAgCS8qIFJlcnVuIHRoZSByZXF1ZXN0OyBpdHMgcGF5bG9h ZCBoYXMgYmVlbiBuZXV0ZXJlZCAoaWYgZ3VpbHR5KS4gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfbHJjX3JlZy5oCj4gaW5kZXggN2U3NzNlNzRhM2ZlLi4wNmFiMDI3NmUxMGUgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3JlZy5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3JlZy5oCj4gQEAgLTEwLDYwICsx MCw0MCBAQAo+ICAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiAgCj4gIC8qIEdFTjggdG8gR0VO MTEgUmVnIFN0YXRlIENvbnRleHQgKi8KPiAtI2RlZmluZSBDVFhfTFJJX0hFQURFUl8wCQkweDAx Cj4gLSNkZWZpbmUgQ1RYX0NPTlRFWFRfQ09OVFJPTAkJMHgwMgo+IC0jZGVmaW5lIENUWF9SSU5H X0hFQUQJCQkweDA0Cj4gLSNkZWZpbmUgQ1RYX1JJTkdfVEFJTAkJCTB4MDYKPiAtI2RlZmluZSBD VFhfUklOR19CVUZGRVJfU1RBUlQJCTB4MDgKPiAtI2RlZmluZSBDVFhfUklOR19CVUZGRVJfQ09O VFJPTAkJMHgwYQo+IC0jZGVmaW5lIENUWF9CQl9IRUFEX1UJCQkweDBjCj4gLSNkZWZpbmUgQ1RY X0JCX0hFQURfTAkJCTB4MGUKPiAtI2RlZmluZSBDVFhfQkJfU1RBVEUJCQkweDEwCj4gLSNkZWZp bmUgQ1RYX1NFQ09ORF9CQl9IRUFEX1UJCTB4MTIKPiAtI2RlZmluZSBDVFhfU0VDT05EX0JCX0hF QURfTAkJMHgxNAo+IC0jZGVmaW5lIENUWF9TRUNPTkRfQkJfU1RBVEUJCTB4MTYKPiAtI2RlZmlu ZSBDVFhfQkJfUEVSX0NUWF9QVFIJCTB4MTgKPiAtI2RlZmluZSBDVFhfUkNTX0lORElSRUNUX0NU WAkJMHgxYQo+IC0jZGVmaW5lIENUWF9SQ1NfSU5ESVJFQ1RfQ1RYX09GRlNFVAkweDFjCj4gLSNk ZWZpbmUgQ1RYX0xSSV9IRUFERVJfMQkJMHgyMQo+IC0jZGVmaW5lIENUWF9DVFhfVElNRVNUQU1Q CQkweDIyCj4gLSNkZWZpbmUgQ1RYX1BEUDNfVURXCQkJMHgyNAo+IC0jZGVmaW5lIENUWF9QRFAz X0xEVwkJCTB4MjYKPiAtI2RlZmluZSBDVFhfUERQMl9VRFcJCQkweDI4Cj4gLSNkZWZpbmUgQ1RY X1BEUDJfTERXCQkJMHgyYQo+IC0jZGVmaW5lIENUWF9QRFAxX1VEVwkJCTB4MmMKPiAtI2RlZmlu ZSBDVFhfUERQMV9MRFcJCQkweDJlCj4gLSNkZWZpbmUgQ1RYX1BEUDBfVURXCQkJMHgzMAo+IC0j ZGVmaW5lIENUWF9QRFAwX0xEVwkJCTB4MzIKPiAtI2RlZmluZSBDVFhfTFJJX0hFQURFUl8yCQkw eDQxCj4gLSNkZWZpbmUgQ1RYX1JfUFdSX0NMS19TVEFURQkJMHg0Mgo+IC0jZGVmaW5lIENUWF9F TkQJCQkJMHg0NAo+ICsjZGVmaW5lIENUWF9DT05URVhUX0NPTlRST0wJCSgweDAyICsgMSkKPiAr I2RlZmluZSBDVFhfUklOR19IRUFECQkJKDB4MDQgKyAxKQo+ICsjZGVmaW5lIENUWF9SSU5HX1RB SUwJCQkoMHgwNiArIDEpCj4gKyNkZWZpbmUgQ1RYX1JJTkdfQlVGRkVSX1NUQVJUCQkoMHgwOCAr IDEpCj4gKyNkZWZpbmUgQ1RYX1JJTkdfQlVGRkVSX0NPTlRST0wJCSgweDBhICsgMSkKPiArI2Rl ZmluZSBDVFhfQkJfU1RBVEUJCQkoMHgxMCArIDEpCj4gKyNkZWZpbmUgQ1RYX0JCX1BFUl9DVFhf UFRSCQkoMHgxOCArIDEpCj4gKyNkZWZpbmUgQ1RYX1BEUDNfVURXCQkJKDB4MjQgKyAxKQo+ICsj ZGVmaW5lIENUWF9QRFAzX0xEVwkJCSgweDI2ICsgMSkKPiArI2RlZmluZSBDVFhfUERQMl9VRFcJ CQkoMHgyOCArIDEpCj4gKyNkZWZpbmUgQ1RYX1BEUDJfTERXCQkJKDB4MmEgKyAxKQo+ICsjZGVm aW5lIENUWF9QRFAxX1VEVwkJCSgweDJjICsgMSkKPiArI2RlZmluZSBDVFhfUERQMV9MRFcJCQko MHgyZSArIDEpCj4gKyNkZWZpbmUgQ1RYX1BEUDBfVURXCQkJKDB4MzAgKyAxKQo+ICsjZGVmaW5l IENUWF9QRFAwX0xEVwkJCSgweDMyICsgMSkKPiArI2RlZmluZSBDVFhfUl9QV1JfQ0xLX1NUQVRF CQkoMHg0MiArIDEpCj4gIAo+ICAjZGVmaW5lIEdFTjlfQ1RYX1JJTkdfTUlfTU9ERQkJMHg1NAo+ ICAKPiAgLyogR0VOMTIrIFJlZyBTdGF0ZSBDb250ZXh0ICovCj4gLSNkZWZpbmUgR0VOMTJfQ1RY X0JCX1BFUl9DVFhfUFRSCQkweDEyCj4gLSNkZWZpbmUgR0VOMTJfQ1RYX0xSSV9IRUFERVJfMwkJ CTB4NDEKPiAtCj4gLSNkZWZpbmUgQ1RYX1JFRyhyZWdfc3RhdGUsIHBvcywgcmVnLCB2YWwpIGRv IHsgXAo+IC0JdTMyICpyZWdfc3RhdGVfXyA9IChyZWdfc3RhdGUpOyBcCj4gLQljb25zdCB1MzIg cG9zX18gPSAocG9zKTsgXAo+IC0JKHJlZ19zdGF0ZV9fKVsocG9zX18pICsgMF0gPSBpOTE1X21t aW9fcmVnX29mZnNldChyZWcpOyBcCj4gLQkocmVnX3N0YXRlX18pWyhwb3NfXykgKyAxXSA9ICh2 YWwpOyBcCj4gLX0gd2hpbGUgKDApCj4gKyNkZWZpbmUgR0VOMTJfQ1RYX0JCX1BFUl9DVFhfUFRS CQkoMHgxMiArIDEpCj4gIAo+ICAjZGVmaW5lIEFTU0lHTl9DVFhfUERQKHBwZ3R0LCByZWdfc3Rh dGUsIG4pIGRvIHsgXAo+ICAJdTMyICpyZWdfc3RhdGVfXyA9IChyZWdfc3RhdGUpOyBcCj4gIAlj b25zdCB1NjQgYWRkcl9fID0gaTkxNV9wYWdlX2Rpcl9kbWFfYWRkcigocHBndHQpLCAobikpOyBc Cj4gLQkocmVnX3N0YXRlX18pW0NUWF9QRFAgIyMgbiAjIyBfVURXICsgMV0gPSB1cHBlcl8zMl9i aXRzKGFkZHJfXyk7IFwKPiAtCShyZWdfc3RhdGVfXylbQ1RYX1BEUCAjIyBuICMjIF9MRFcgKyAx XSA9IGxvd2VyXzMyX2JpdHMoYWRkcl9fKTsgXAo+ICsJKHJlZ19zdGF0ZV9fKVtDVFhfUERQICMj IG4gIyMgX1VEV10gPSB1cHBlcl8zMl9iaXRzKGFkZHJfXyk7IFwKPiArCShyZWdfc3RhdGVfXylb Q1RYX1BEUCAjIyBuICMjIF9MRFddID0gbG93ZXJfMzJfYml0cyhhZGRyX18pOyBcCj4gIH0gd2hp bGUgKDApCj4gIAo+ICAjZGVmaW5lIEFTU0lHTl9DVFhfUE1MNChwcGd0dCwgcmVnX3N0YXRlKSBk byB7IFwKPiAgCXUzMiAqcmVnX3N0YXRlX18gPSAocmVnX3N0YXRlKTsgXAo+ICAJY29uc3QgdTY0 IGFkZHJfXyA9IHB4X2RtYShwcGd0dC0+cGQpOyBcCj4gLQkocmVnX3N0YXRlX18pW0NUWF9QRFAw X1VEVyArIDFdID0gdXBwZXJfMzJfYml0cyhhZGRyX18pOyBcCj4gLQkocmVnX3N0YXRlX18pW0NU WF9QRFAwX0xEVyArIDFdID0gbG93ZXJfMzJfYml0cyhhZGRyX18pOyBcCj4gKwkocmVnX3N0YXRl X18pW0NUWF9QRFAwX1VEV10gPSB1cHBlcl8zMl9iaXRzKGFkZHJfXyk7IFwKPiArCShyZWdfc3Rh dGVfXylbQ1RYX1BEUDBfTERXXSA9IGxvd2VyXzMyX2JpdHMoYWRkcl9fKTsgXAo+ICB9IHdoaWxl ICgwKQo+ICAKPiAgI2RlZmluZSBHRU44X0NUWF9SQ1NfSU5ESVJFQ1RfQ1RYX09GRlNFVF9ERUZB VUxUCTB4MTcKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rf bHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYwo+IGluZGV4IDkz YTg3MWJmZDk1ZC4uMjJlYTJlNzQ3MDY0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L3NlbGZ0ZXN0X2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2Vs ZnRlc3RfbHJjLmMKPiBAQCAtMjIwMSwzICsyMjAxLDE0NSBAQCBpbnQgaW50ZWxfZXhlY2xpc3Rz X2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAKPiAgCXJl dHVybiBpOTE1X2xpdmVfc3VidGVzdHModGVzdHMsIGk5MTUpOwo+ICB9Cj4gKwo+ICtzdGF0aWMg dm9pZCBoZXhkdW1wKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKPiArewo+ICsJY29uc3Qg c2l6ZV90IHJvd3NpemUgPSA4ICogc2l6ZW9mKHUzMik7Cj4gKwljb25zdCB2b2lkICpwcmV2ID0g TlVMTDsKPiArCWJvb2wgc2tpcCA9IGZhbHNlOwo+ICsJc2l6ZV90IHBvczsKPiArCj4gKwlmb3Ig KHBvcyA9IDA7IHBvcyA8IGxlbjsgcG9zICs9IHJvd3NpemUpIHsKPiArCQljaGFyIGxpbmVbMTI4 XTsKPiArCj4gKwkJaWYgKHByZXYgJiYgIW1lbWNtcChwcmV2LCBidWYgKyBwb3MsIHJvd3NpemUp KSB7Cj4gKwkJCWlmICghc2tpcCkgewo+ICsJCQkJcHJfaW5mbygiKlxuIik7Cj4gKwkJCQlza2lw ID0gdHJ1ZTsKPiArCQkJfQo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCVdBUk5fT05f T05DRShoZXhfZHVtcF90b19idWZmZXIoYnVmICsgcG9zLCBsZW4gLSBwb3MsCj4gKwkJCQkJCXJv d3NpemUsIHNpemVvZih1MzIpLAo+ICsJCQkJCQlsaW5lLCBzaXplb2YobGluZSksCj4gKwkJCQkJ CWZhbHNlKSA+PSBzaXplb2YobGluZSkpOwo+ICsJCXByX2luZm8oIlslMDR6eF0gJXNcbiIsIHBv cywgbGluZSk7Cj4gKwo+ICsJCXByZXYgPSBidWYgKyBwb3M7Cj4gKwkJc2tpcCA9IGZhbHNlOwo+ ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGxpdmVfbHJjX2xheW91dCh2b2lkICphcmcpCj4g K3sKPiArCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBhcmc7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmU7Cj4gKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiArCXUzMiAqbWVtOwo+ ICsJaW50IGVycjsKPiArCj4gKwkvKgo+ICsJICogQ2hlY2sgdGhlIHJlZ2lzdGVycyBvZmZzZXRz IHdlIHVzZSB0byBjcmVhdGUgdGhlIGluaXRpYWwgcmVnIHN0YXRlCj4gKwkgKiBtYXRjaCB0aGUg bGF5b3V0IHNhdmVkIGJ5IEhXLgo+ICsJICovCj4gKwo+ICsJbWVtID0ga21hbGxvYyhQQUdFX1NJ WkUsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFtZW0pCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ ICsJZXJyID0gMDsKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGd0LT5pOTE1LCBpZCkgewo+ ICsJCXUzMiAqaHcsICpscmM7Cj4gKwkJaW50IGR3Owo+ICsKPiArCQlpZiAoIWVuZ2luZS0+ZGVm YXVsdF9zdGF0ZSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWh3ID0gaTkxNV9nZW1fb2JqZWN0 X3Bpbl9tYXAoZW5naW5lLT5kZWZhdWx0X3N0YXRlLAo+ICsJCQkJCSAgICAgSTkxNV9NQVBfV0Ip OwoKVGhpcyBkZWZhdWx0IHN0YXRlIGlzIG5vdCBwcmlzdGluZSBhcyB3ZSBoYXZlIHRyYW1wbGVk Cml0IHdpdGggb3VyIGZpcnN0IHN1Ym1pc3Npb24sIHJpZ2h0PwoKQnV0IGJlaW5nIHN1Y2NlZWRl ZCBhdCBkb2luZyBzbywgdGhlIG5leHQgY29udGV4dApzYXZlIHNob3VsZCBvdmVyd3JpdGUgb3Vy IHRyYW1wbGluZyBhbmQgaXQgd291bGQKdGhlbiByZXByZXNlbnQgdGhlIGh3IGFjY3VyYXRlIGNv bnRleHQgc2F2ZQpzdGF0ZS4KCkFnYWluc3Qgd2hpY2ggd2Ugd2lsbCBjb21wYXJlIG9mIG91ciBy ZWcgc3RhdGUKd3JpdGVyLgoKCgo+ICsJCWlmIChJU19FUlIoaHcpKSB7Cj4gKwkJCWVyciA9IFBU Ul9FUlIoaHcpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwkJaHcgKz0gTFJDX1NUQVRFX1BOICog UEFHRV9TSVpFIC8gc2l6ZW9mKCpodyk7Cj4gKwo+ICsJCWxyYyA9IG1lbXNldChtZW0sIDAsIFBB R0VfU0laRSk7Cj4gKwkJZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKGxyYywKPiArCQkJCQkgZW5n aW5lLT5rZXJuZWxfY29udGV4dCwKPiArCQkJCQkgZW5naW5lLAo+ICsJCQkJCSBlbmdpbmUtPmtl cm5lbF9jb250ZXh0LT5yaW5nLAo+ICsJCQkJCSB0cnVlKTsKPiArCj4gKwkJZHcgPSAwOwo+ICsJ CWRvIHsKPiArCQkJdTMyIGxyaSA9IGh3W2R3XTsKPiArCj4gKwkJCWlmIChscmkgPT0gMCkgewo+ ICsJCQkJZHcrKzsKPiArCQkJCWNvbnRpbnVlOwo+ICsJCQl9Cj4gKwo+ICsJCQlpZiAoKGxyaSAm IEdFTk1BU0soMzEsIDIzKSkgIT0gTUlfSU5TVFIoMHgyMiwgMCkpIHsKPiArCQkJCXByX2Vycigi JXM6IEV4cGVjdGVkIExSSSBjb21tYW5kIGF0IGR3b3JkICVkLCBmb3VuZCAlMDh4XG4iLAo+ICsJ CQkJICAgICAgIGVuZ2luZS0+bmFtZSwgZHcsIGxyaSk7Cj4gKwkJCQllcnIgPSAtRUlOVkFMOwo+ ICsJCQkJYnJlYWs7Cj4gKwkJCX0KPiArCj4gKwkJCWlmIChscmNbZHddICE9IGxyaSkgewo+ICsJ CQkJcHJfZXJyKCIlczogTFJJIGNvbW1hbmQgbWlzbWF0Y2ggYXQgZHdvcmQgJWQsIGV4cGVjdGVk ICUwOHggZm91bmQgJTA4eFxuIiwKPiArCQkJCSAgICAgICBlbmdpbmUtPm5hbWUsIGR3LCBscmks IGxyY1tkd10pOwo+ICsJCQkJZXJyID0gLUVJTlZBTDsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4g Kwo+ICsJCQlscmkgJj0gMHg3ZjsKPiArCQkJbHJpKys7Cj4gKwkJCWR3Kys7Cj4gKwo+ICsJCQl3 aGlsZSAobHJpKSB7Cj4gKwkJCQlpZiAoaHdbZHddICE9IGxyY1tkd10pIHsKPiArCQkJCQlwcl9l cnIoIiVzOiBEaWZmZXJlbnQgcmVnaXN0ZXJzIGZvdW5kIGF0IGR3b3JkICVkLCBleHBlY3RlZCAl eCwgZm91bmQgJXhcbiIsCj4gKwkJCQkJICAgICAgIGVuZ2luZS0+bmFtZSwgZHcsIGh3W2R3XSwg bHJjW2R3XSk7Cj4gKwkJCQkJZXJyID0gLUVJTlZBTDsKPiArCQkJCQlicmVhazsKPiArCQkJCX0K PiArCj4gKwkJCQkvKgo+ICsJCQkJICogU2tpcCBvdmVyIHRoZSBhY3R1YWwgcmVnaXN0ZXIgdmFs dWUgYXMgd2UKPiArCQkJCSAqIGV4cGVjdCB0aGF0IHRvIGRpZmZlci4KPiArCQkJCSAqLwo+ICsJ CQkJZHcgKz0gMjsKPiArCQkJCWxyaSAtPSAyOwoKVGhpcyBtYWtlcyBtZSB3b25kZXIgaWYgd2Ug Y291bGQgdXNlIHRoaXMgbWFjaGluZXJ5IHBvc3QgaGFuZy4gSnVzdCB0bwpnZXQgYSBsaXR0bGUg bW9yZSB0cmlhZ2UgZGF0YSBvdXQsIGllICd5b3VyIGNvbnRleHQgbG9va3MgY29ycnVwdGVkIGF0 Cm9mZnNldCAleCcuLi4KCj4gKwkJCX0KPiArCQl9IHdoaWxlICgobHJjW2R3XSAmIH5CSVQoMCkp ICE9IE1JX0JBVENIX0JVRkZFUl9FTkQpOwoKT2ssIHlvdSB0aWUgdXAgYWx3YXlzIHRoZSBnZW5l cmF0ZSBpbWFnZS4gRm9yIGZ1dHVyZSB3b3JrIGFkZCB0aGUgaHcgYmF0Y2gKZW5kcG9pbnQgYmUg YSBwYXJ0IG9mIGNoZWNrZXI/CgotTWlrYQoKPiArCj4gKwkJaWYgKGVycikgewo+ICsJCQlwcl9p bmZvKCIlczogSFcgcmVnaXN0ZXIgaW1hZ2U6XG4iLCBlbmdpbmUtPm5hbWUpOwo+ICsJCQloZXhk dW1wKGh3LCBQQUdFX1NJWkUpOwo+ICsKPiArCQkJcHJfaW5mbygiJXM6IFNXIHJlZ2lzdGVyIGlt YWdlOlxuIiwgZW5naW5lLT5uYW1lKTsKPiArCQkJaGV4ZHVtcChscmMsIFBBR0VfU0laRSk7Cj4g KwkJfQo+ICsKPiArCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKGVuZ2luZS0+ZGVmYXVsdF9z dGF0ZSk7Cj4gKwkJaWYgKGVycikKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJa2ZyZWUobWVt KTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK2ludCBpbnRlbF9scmNfbGl2ZV9zZWxmdGVz dHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCXN0YXRpYyBjb25zdCBz dHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7Cj4gKwkJU1VCVEVTVChsaXZlX2xyY19sYXlv dXQpLAo+ICsJfTsKPiArCj4gKwlpZiAoIUhBU19MT0dJQ0FMX1JJTkdfQ09OVEVYVFMoaTkxNSkp Cj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0dXJuIGludGVsX2d0X2xpdmVfc3VidGVzdHModGVz dHMsICZpOTE1LT5ndCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9wZXJmLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwo+IGluZGV4IGMx Yjc2NDIzMzc2MS4uNTI0ZjY3MTBiN2FhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcGVyZi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMK PiBAQCAtMTY3MywxMCArMTY3Myw4IEBAIHN0YXRpYyB1MzIgb2FfY29uZmlnX2ZsZXhfcmVnKGNv bnN0IHN0cnVjdCBpOTE1X29hX2NvbmZpZyAqb2FfY29uZmlnLAo+ICAgKiBpbiB0aGUgY2FzZSB0 aGF0IHRoZSBPQSB1bml0IGhhcyBiZWVuIGRpc2FibGVkLgo+ICAgKi8KPiAgc3RhdGljIHZvaWQK PiAtZ2VuOF91cGRhdGVfcmVnX3N0YXRlX3VubG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0sCj4gLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4gLQkJCSAg ICAgICB1MzIgKnJlZ19zdGF0ZSwKPiAtCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpOTE1X29hX2Nv bmZpZyAqb2FfY29uZmlnKQo+ICtnZW44X3VwZGF0ZV9yZWdfc3RhdGVfdW5sb2NrZWQoY29uc3Qg c3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICsJCQkgICAgICAgY29uc3Qgc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSBjZS0+ZW5naW5lLT5pOTE1Owo+ICAJdTMyIGN0eF9vYWN0eGN0cmwgPSBpOTE1LT5wZXJm LmN0eF9vYWN0eGN0cmxfb2Zmc2V0Owo+IEBAIC0xNjkxLDIxICsxNjg5LDE5IEBAIGdlbjhfdXBk YXRlX3JlZ19zdGF0ZV91bmxvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ ICAJCUVVX1BFUkZfQ05UTDUsCj4gIAkJRVVfUEVSRl9DTlRMNiwKPiAgCX07Cj4gKwl1MzIgKnJl Z19zdGF0ZSA9IGNlLT5scmNfcmVnX3N0YXRlOwo+ICAJaW50IGk7Cj4gIAo+IC0JQ1RYX1JFRyhy ZWdfc3RhdGUsIGN0eF9vYWN0eGN0cmwsIEdFTjhfT0FDVFhDT05UUk9MLAo+ICsJcmVnX3N0YXRl W2N0eF9vYWN0eGN0cmwgKyAxXSA9Cj4gIAkJKHN0cmVhbS0+cGVyaW9kX2V4cG9uZW50IDw8IEdF TjhfT0FfVElNRVJfUEVSSU9EX1NISUZUKSB8Cj4gIAkJKHN0cmVhbS0+cGVyaW9kaWMgPyBHRU44 X09BX1RJTUVSX0VOQUJMRSA6IDApIHwKPiAtCQlHRU44X09BX0NPVU5URVJfUkVTVU1FKTsKPiAr CQlHRU44X09BX0NPVU5URVJfUkVTVU1FOwo+ICAKPiAtCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGZsZXhfcmVncyk7IGkrKykgewo+IC0JCUNUWF9SRUcocmVnX3N0YXRlLCBjdHhfZmxleGV1 MCArIGkgKiAyLCBmbGV4X3JlZ3NbaV0sCj4gLQkJCW9hX2NvbmZpZ19mbGV4X3JlZyhvYV9jb25m aWcsIGZsZXhfcmVnc1tpXSkpOwo+IC0JfQo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo ZmxleF9yZWdzKTsgaSsrKQo+ICsJCXJlZ19zdGF0ZVtjdHhfZmxleGV1MCArIGkgKiAyICsgMV0g PQo+ICsJCQlvYV9jb25maWdfZmxleF9yZWcoc3RyZWFtLT5vYV9jb25maWcsIGZsZXhfcmVnc1tp XSk7Cj4gIAo+IC0JQ1RYX1JFRyhyZWdfc3RhdGUsCj4gLQkJQ1RYX1JfUFdSX0NMS19TVEFURSwg R0VOOF9SX1BXUl9DTEtfU1RBVEUsCj4gLQkJaW50ZWxfc3NldV9tYWtlX3JwY3MoaTkxNSwgJmNl LT5zc2V1KSk7Cj4gKwlyZWdfc3RhdGVbQ1RYX1JfUFdSX0NMS19TVEFURV0gPSBpbnRlbF9zc2V1 X21ha2VfcnBjcyhpOTE1LCAmY2UtPnNzZXUpOwo+ICB9Cj4gIAo+ICBzdHJ1Y3QgZmxleCB7Cj4g QEAgLTE3MjksNyArMTcyNSw3IEBAIGdlbjhfc3RvcmVfZmxleChzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSwKPiAgCW9mZnNldCA9IGk5MTVfZ2d0dF9vZmZzZXQoY2UtPnN0YXRlKSArIExSQ19TVEFU RV9QTiAqIFBBR0VfU0laRTsKPiAgCWRvIHsKPiAgCQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lN TV9HRU40IHwgTUlfVVNFX0dHVFQ7Cj4gLQkJKmNzKysgPSBvZmZzZXQgKyAoZmxleC0+b2Zmc2V0 ICsgMSkgKiBzaXplb2YodTMyKTsKPiArCQkqY3MrKyA9IG9mZnNldCArIGZsZXgtPm9mZnNldCAq IHNpemVvZih1MzIpOwo+ICAJCSpjcysrID0gMDsKPiAgCQkqY3MrKyA9IGZsZXgtPnZhbHVlOwo+ ICAJfSB3aGlsZSAoZmxleCsrLCAtLWNvdW50KTsKPiBAQCAtMTg2Myw3ICsxODU5LDcgQEAgc3Rh dGljIGludCBnZW44X2NvbmZpZ3VyZV9hbGxfY29udGV4dHMoc3RydWN0IGk5MTVfcGVyZl9zdHJl YW0gKnN0cmVhbSwKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gc3RyZWFtLT5k ZXZfcHJpdjsKPiAgCS8qIFRoZSBNTUlPIG9mZnNldHMgZm9yIEZsZXggRVUgcmVnaXN0ZXJzIGFy ZW4ndCBjb250aWd1b3VzICovCj4gIAljb25zdCB1MzIgY3R4X2ZsZXhldTAgPSBpOTE1LT5wZXJm LmN0eF9mbGV4ZXUwX29mZnNldDsKPiAtI2RlZmluZSBjdHhfZmxleGV1TihOKSAoY3R4X2ZsZXhl dTAgKyAyICogKE4pKQo+ICsjZGVmaW5lIGN0eF9mbGV4ZXVOKE4pIChjdHhfZmxleGV1MCArIDIg KiAoTikgKyAxKQo+ICAJc3RydWN0IGZsZXggcmVnc1tdID0gewo+ICAJCXsKPiAgCQkJR0VOOF9S X1BXUl9DTEtfU1RBVEUsCj4gQEAgLTE4NzEsNyArMTg2Nyw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9j b25maWd1cmVfYWxsX2NvbnRleHRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4g IAkJfSwKPiAgCQl7Cj4gIAkJCUdFTjhfT0FDVFhDT05UUk9MLAo+IC0JCQlpOTE1LT5wZXJmLmN0 eF9vYWN0eGN0cmxfb2Zmc2V0LAo+ICsJCQlpOTE1LT5wZXJmLmN0eF9vYWN0eGN0cmxfb2Zmc2V0 ICsgMSwKPiAgCQkJKChzdHJlYW0tPnBlcmlvZF9leHBvbmVudCA8PCBHRU44X09BX1RJTUVSX1BF UklPRF9TSElGVCkgfAo+ICAJCQkgKHN0cmVhbS0+cGVyaW9kaWMgPyBHRU44X09BX1RJTUVSX0VO QUJMRSA6IDApIHwKPiAgCQkJIEdFTjhfT0FfQ09VTlRFUl9SRVNVTUUpCj4gQEAgLTIyOTksOSAr MjI5NSw4IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9zdHJlYW1faW5pdChzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtLAo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAtdm9pZCBpOTE1X29h X2luaXRfcmVnX3N0YXRlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAtCQkJICAg IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAtCQkJICAgIHUzMiAqcmVncykKPiArdm9pZCBp OTE1X29hX2luaXRfcmVnX3N0YXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAr CQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+ICAJc3Ry dWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbTsKPiAgCj4gQEAgLTIzMTMsNyArMjMwOCw3IEBA IHZvaWQgaTkxNV9vYV9pbml0X3JlZ19zdGF0ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsCj4gIAo+ICAJc3RyZWFtID0gZW5naW5lLT5pOTE1LT5wZXJmLmV4Y2x1c2l2ZV9zdHJlYW07 Cj4gIAlpZiAoc3RyZWFtKQo+IC0JCWdlbjhfdXBkYXRlX3JlZ19zdGF0ZV91bmxvY2tlZChzdHJl YW0sIGNlLCByZWdzLCBzdHJlYW0tPm9hX2NvbmZpZyk7Cj4gKwkJZ2VuOF91cGRhdGVfcmVnX3N0 YXRlX3VubG9ja2VkKGNlLCBzdHJlYW0pOwo+ICB9Cj4gIAo+ICAvKioKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BlcmYuaAo+IGluZGV4IGE0MTJiMTZkOWZmYy4uZjRmYjMxMTE4NGIxIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9wZXJmLmgKPiBAQCAtMjUsOCArMjUsNyBAQCBpbnQgaTkxNV9wZXJmX2Fk ZF9jb25maWdfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgCQkJ ICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cj4gIGludCBpOTE1X3BlcmZfcmVtb3ZlX2Nv bmZpZ19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAJCQkJICBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+IC12b2lkIGk5MTVfb2FfaW5pdF9yZWdfc3RhdGUoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkgICAgc3RydWN0IGludGVsX2NvbnRl eHQgKmNlLAo+IC0JCQkgICAgdTMyICpyZWdfc3RhdGUpOwo+ICt2b2lkIGk5MTVfb2FfaW5pdF9y ZWdfc3RhdGUoY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICsJCQkgICAgY29uc3Qg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgCj4gICNlbmRpZiAvKiBfX0k5MTVf UEVSRl9IX18gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L2k5MTVfbGl2ZV9zZWxmdGVzdHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p OTE1X2xpdmVfc2VsZnRlc3RzLmgKPiBpbmRleCAxY2NmMGY3MzFhYzAuLjY2ZDgzYzEzOTBjMSAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3Nl bGZ0ZXN0cy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2 ZV9zZWxmdGVzdHMuaAo+IEBAIC0xNSw2ICsxNSw3IEBAIHNlbGZ0ZXN0KHdvcmthcm91bmRzLCBp bnRlbF93b3JrYXJvdW5kc19saXZlX3NlbGZ0ZXN0cykKPiAgc2VsZnRlc3QoZ3RfZW5naW5lcywg aW50ZWxfZW5naW5lX2xpdmVfc2VsZnRlc3RzKQo+ICBzZWxmdGVzdChndF90aW1lbGluZXMsIGlu dGVsX3RpbWVsaW5lX2xpdmVfc2VsZnRlc3RzKQo+ICBzZWxmdGVzdChndF9jb250ZXh0cywgaW50 ZWxfY29udGV4dF9saXZlX3NlbGZ0ZXN0cykKPiArc2VsZnRlc3QoZ3RfbHJjLCBpbnRlbF9scmNf bGl2ZV9zZWxmdGVzdHMpCj4gIHNlbGZ0ZXN0KHJlcXVlc3RzLCBpOTE1X3JlcXVlc3RfbGl2ZV9z ZWxmdGVzdHMpCj4gIHNlbGZ0ZXN0KGFjdGl2ZSwgaTkxNV9hY3RpdmVfbGl2ZV9zZWxmdGVzdHMp Cj4gIHNlbGZ0ZXN0KG9iamVjdHMsIGk5MTVfZ2VtX29iamVjdF9saXZlX3NlbGZ0ZXN0cykKPiAt LSAKPiAyLjIzLjAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4