From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 12/12] drm/i915: Cache the reset_counter for the request Date: Tue, 24 Nov 2015 17:43:22 +0100 Message-ID: <20151124164322.GT17050@phenom.ffwll.local> References: <1448023432-10726-1-git-send-email-chris@chris-wilson.co.uk> <1448023432-10726-12-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-f53.google.com (mail-wm0-f53.google.com [74.125.82.53]) by gabe.freedesktop.org (Postfix) with ESMTPS id 385E772045 for ; Tue, 24 Nov 2015 08:43:26 -0800 (PST) Received: by wmww144 with SMTP id w144so146698898wmw.1 for ; Tue, 24 Nov 2015 08:43:25 -0800 (PST) Content-Disposition: inline In-Reply-To: <1448023432-10726-12-git-send-email-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 Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBOb3YgMjAsIDIwMTUgYXQgMTI6NDM6NTJQTSArMDAwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IEluc3RlYWQgb2YgcXVlcnlpbmcgdGhlIHJlc2V0IGNvdW50ZXIgYmVmb3JlIGV2ZXJ5 IGFjY2VzcyB0byB0aGUgcmluZywKPiBxdWVyeSBpdCB0aGUgZmlyc3QgdGltZSB3ZSB0b3VjaCB0 aGUgcmluZywgYW5kIGRvIGEgZmluYWwgY29tcGFyZSB3aGVuCj4gc3VibWl0dGluZyB0aGUgcmVx dWVzdC4gRm9yIGNvcnJlY3RuZXNzLCB3ZSBuZWVkIHRvIHRoZW4gc2FuaXRpemUgaG93Cj4gdGhl IHJlc2V0X2NvdW50ZXIgaXMgaW5jcmVtZW50ZWQgdG8gcHJldmVudCBicm9rZW4gc3VibWlzc2lv biBhbmQKPiB3YWl0aW5nIGFjcm9zcyByZXNldHMsIGluIHRoZSBwcm9jZXNzIGZpeGluZyB0aGUg cGVyc2lzdGVudCAtRUlPIHdlCj4gc3RpbGwgc2VlIHRvZGF5IG9uIGZhaWxlZCB3YWl0cy4KCnRi aCB0aGF0IGV4cGxhbmF0aW9uIHdlbnQgc3RyYWlnaHQgb3ZlciBteSBoZWFkLiBRdWVzdGlvbnM6 Ci0gV2hlcmUgZG8gd2Ugd2FpdCBhZ2FpbiBvdmVyIGEgcmVzZXQ/IFdpdGggYWxsIHRoZSB3YWtl dXBzIHdlIHNob3VsZAogIGNhdGNoIHRoZW0gcHJvcGVybHkuIEkgZ3Vlc3MgdGhpcyBuZWVkcyB0 aGUgZGV0YWlsZWQgc2NlbmFyaW8gdG8gaGVscCBtZQogIG91dCwgc2luY2UgSSBoYXZlIGRpbSBt ZW1vcmllcyB0aGF0IHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyA7LSkKCi0gV2hhdCBwcmVjaXNl bHkgaXMgdGhlIGVmZmVjdCBmb3Igd2FpdGVycz8gSSBvbmx5IHNlZSBtb3ZpbmcgdGhlCiAgYXRv bWljX2luYyB1bmRlciB0aGUgZGV2LT5zdHJ1Y3RfbXV0ZXgsIHdoaWNoIHNob3VsZG4ndCBkbyBh IGhvbGUgbG90CiAgZm9yIGFueW9uZS4gUGx1cyBub3QgcmV0dXJuaW5nIC1FQUdBSU4gd2hlbiBy ZXNldF9pbl9wcm9ncmVzcywgd2hpY2gKICBsb29rcyBsaWtlIGl0IG1pZ2h0IHJlc3VsdCBpbiBt aXNzZWQgd2FrZXVwcyBhbmQgZGVhZGxvY2tzIHdpdGggdGhlCiAgcmVzZXQgd29yay4KCkkgL3Ro b3VnaHQvIHRoYXQgdGhlIC1FSU8gaXMgZnJvbSBjaGVja193ZWRnZSBpbiBpbnRlbF9yaW5nX2Jl Z2luLCBidXQKdGhhdCBwYXJ0IHNlZW1zIGVzc2VudGlhbGx5IHVuY2hhbmdlZC4KCkFzaWRlIGZy b20gYWxsIHRoYXQsIHNodWZmbGluZyB0aGUgYXRvbWljX2luYyAoaWYgSSBjYW4gY29udmluY2Ug bXlzZWxmCnRoYXQgaXQncyBzYWZlKSB0byBhdm9pZCB0aGUgcmVsb2FkX2luX3Jlc2V0IGhhY2sg bG9va3MgbGlrZSBhIGdvb2QKaW1wcm92ZW1lbnQuCgpNb3JlIGNvbmZ1c2VkIGNvbW1lbnRzIGJl bG93LgotRGFuaWVsCgo+IHYyOiBSZWJhc2UKPiB2MzogTm93IHdpdGggYWRkZWQgdGVzdGNhc2UK PiAKPiBUZXN0Y2FzZTogaWd0L2dlbV9laW8KPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24g PGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kZWJ1Z2ZzLmMgICAgIHwgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuYyAgICAgICAgIHwgMzIgKysrKysrKy0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmggICAgICAgICB8IDM5ICsrKysrKysrKystLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMgICAgICAgICB8IDkwICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jICAgICAgICAgfCAyMSArLS0t LS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgICAgfCAxMCArKy0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyB8IDE3ICsrKystLS0K PiAgNyBmaWxlcyBjaGFuZ2VkLCAxMDQgaW5zZXJ0aW9ucygrKSwgMTA3IGRlbGV0aW9ucygtKQo+ IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gaW5kZXggZDgzZjM1YzhkZjM0Li4x MDc3MTFlYzk1NmYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1 Z2ZzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IEBAIC00 NDE1LDcgKzQ0MTUsNyBAQCBpOTE1X3dlZGdlZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCj4g IAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGF0YTsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gIAo+IC0JKnZhbCA9IGF0b21pY19y ZWFkKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpOwo+ICsJKnZhbCA9IGk5MTVf dGVybWluYWxseV93ZWRnZWQoJmRldl9wcml2LT5ncHVfZXJyb3IpOwoKRG9uJ3Qgd2UgaGF2ZSBh IGZldyB0ZXN0cyBsZWZ0IHRoYXQgbG9vayBhdCB0aGlzIHN0aWxsPwoKPiAgCXJldHVybiAwOwo+ ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gaW5kZXggZmZkOTlkMjdmYWM3Li41ODM4ODgy ZTEwYTEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBAQCAtODQxLDIzICs4NDEsMzEg QEAgaW50IGk5MTVfcmVzdW1lX2xlZ2FjeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICBpbnQg aTkxNV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGk5MTVf Z3B1X2Vycm9yICplcnJvciA9ICZkZXZfcHJpdi0+Z3B1X2Vycm9yOwo+ICsJdW5zaWduZWQgcmVz ZXRfY291bnRlcjsKPiAgCWJvb2wgc2ltdWxhdGVkOwo+ICAJaW50IHJldDsKPiAgCj4gIAlpbnRl bF9yZXNldF9ndF9wb3dlcnNhdmUoZGV2KTsKPiAgCj4gIAltdXRleF9sb2NrKCZkZXYtPnN0cnVj dF9tdXRleCk7Cj4gKwlhdG9taWNfY2xlYXJfbWFzayhJOTE1X1dFREdFRCwgJmVycm9yLT5yZXNl dF9jb3VudGVyKTsKPiArCXJlc2V0X2NvdW50ZXIgPSBhdG9taWNfaW5jX3JldHVybigmZXJyb3It PnJlc2V0X2NvdW50ZXIpOwoKVGhpcyBwdWJsaXNoZXMgdGhlIHJlc2V0LWNvbXBsZXRlIHRvbyBl YXJseSBmb3IgdGhlIG1vZGVzZXQgY29kZSBJIHRoaW5rLgpBdCBsZWFzdCBpdCBjcnVjaWFsbHkg cmVsaWVzIHVwb24gZGV2LT5zdHJ1Y3RfbXV0ZXggc2VyaWFsaXppbmcKZXZlcnl0aGluZyBpbiBv dXIgZHJpdmVyLCBhbmQgSSBkb24ndCBsaWtlIHRvIGNlbWVudCB0aGF0IGFzc3VtcHRpb24gaW4K ZXZlbiBtb3JlLgoKV2h5IGRvIHdlIG5lZWQgdG8gbW92ZSB0aGF0IGF0b21pY19pbmMgYWdhaW4/ CgpJIGd1ZXNzIHdoYXQgd2UgY291bGQgdHJ5IGlzIHNldCBpdCByaWdodCBhZnRlciB3ZSd2ZSBy ZXNldCB0aGUgaHcsIGJ1dApiZWZvcmUgd2Ugc3RhcnQgdG8gcmUtaW5pdGlhbGl6ZSBpdC4gU28g bW92ZSB0aGUgYXRvbWljIHN0dWZmIGJlbG93CmludGVsX2dwdV9yZXNldCwgd2l0aCBzb21lIG5l YXQgYmFycmllciBhZ2Fpbi4gTWF5YmUgd2Ugc2hvdWxkIGV2ZW4gcHVzaAppOTE1X2dlbV9yZXNl dCBkb3duIGJlbG93IHRoYXQgdG9vLiBOb3Qgc3VyZS4KCj4gKwlpZiAoV0FSTl9PTihfX2k5MTVf cmVzZXRfaW5fcHJvZ3Jlc3MocmVzZXRfY291bnRlcikpKSB7Cj4gKwkJcmV0ID0gLUVJTzsKPiAr CQlnb3RvIGVycm9yOwo+ICsJfQo+ICAKPiAgCWk5MTVfZ2VtX3Jlc2V0KGRldik7Cj4gIAo+IC0J c2ltdWxhdGVkID0gZGV2X3ByaXYtPmdwdV9lcnJvci5zdG9wX3JpbmdzICE9IDA7Cj4gKwlzaW11 bGF0ZWQgPSBlcnJvci0+c3RvcF9yaW5ncyAhPSAwOwo+ICAKPiAgCXJldCA9IGludGVsX2dwdV9y ZXNldChkZXYpOwo+ICAKPiAgCS8qIEFsc28gcmVzZXQgdGhlIGdwdSBoYW5nbWFuLiAqLwo+ICAJ aWYgKHNpbXVsYXRlZCkgewo+ICAJCURSTV9JTkZPKCJTaW11bGF0ZWQgZ3B1IGhhbmcsIHJlc2V0 dGluZyBzdG9wX3JpbmdzXG4iKTsKPiAtCQlkZXZfcHJpdi0+Z3B1X2Vycm9yLnN0b3BfcmluZ3Mg PSAwOwo+ICsJCWVycm9yLT5zdG9wX3JpbmdzID0gMDsKPiAgCQlpZiAocmV0ID09IC1FTk9ERVYp IHsKPiAgCQkJRFJNX0lORk8oIlJlc2V0IG5vdCBpbXBsZW1lbnRlZCwgYnV0IGlnbm9yaW5nICIK PiAgCQkJCSAiZXJyb3IgZm9yIHNpbXVsYXRlZCBncHUgaGFuZ3NcbiIpOwo+IEBAIC04NzAsOCAr ODc4LDcgQEAgaW50IGk5MTVfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCj4gIAlp ZiAocmV0KSB7Cj4gIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVzZXQgY2hpcDogJWlcbiIsIHJl dCk7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQkJcmV0dXJuIHJl dDsKPiArCQlnb3RvIGVycm9yOwo+ICAJfQo+ICAKPiAgCWludGVsX292ZXJsYXlfcmVzZXQoZGV2 X3ByaXYpOwo+IEBAIC04OTAsMjAgKzg5NywxNCBAQCBpbnQgaTkxNV9yZXNldChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+ICAJICogd2FzIHJ1bm5pbmcgYXQgdGhlIHRpbWUgb2YgdGhlIHJlc2V0 IChpLmUuIHdlIHdlcmVuJ3QgVlQKPiAgCSAqIHN3aXRjaGVkIGF3YXkpLgo+ICAJICovCj4gLQo+ IC0JLyogVXNlZCB0byBwcmV2ZW50IGdlbV9jaGVja193ZWRnZWQgcmV0dXJuaW5nIC1FQUdBSU4g ZHVyaW5nIGdwdSByZXNldCAqLwo+IC0JZGV2X3ByaXYtPmdwdV9lcnJvci5yZWxvYWRfaW5fcmVz ZXQgPSB0cnVlOwo+IC0KPiAgCXJldCA9IGk5MTVfZ2VtX2luaXRfaHcoZGV2KTsKPiAtCj4gLQlk ZXZfcHJpdi0+Z3B1X2Vycm9yLnJlbG9hZF9pbl9yZXNldCA9IGZhbHNlOwo+IC0KPiAtCW11dGV4 X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAJaWYgKHJldCkgewo+ICAJCURSTV9FUlJP UigiRmFpbGVkIGh3IGluaXQgb24gcmVzZXQgJWRcbiIsIHJldCk7Cj4gLQkJcmV0dXJuIHJldDsK PiArCQlnb3RvIGVycm9yOwo+ICAJfQo+ICAKPiArCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOwo+ICsKPiAgCS8qCj4gIAkgKiBycHMvcmM2IHJlLWluaXQgaXMgbmVjZXNzYXJ5IHRv IHJlc3RvcmUgc3RhdGUgbG9zdCBhZnRlciB0aGUKPiAgCSAqIHJlc2V0IGFuZCB0aGUgcmUtaW5z dGFsbCBvZiBndCBpcnFzLiBTa2lwIGZvciBpcm9ubGFrZSBwZXIKPiBAQCAtOTE0LDYgKzkxNSwx MSBAQCBpbnQgaTkxNV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJCWludGVsX2Vu YWJsZV9ndF9wb3dlcnNhdmUoZGV2KTsKPiAgCj4gIAlyZXR1cm4gMDsKPiArCj4gK2Vycm9yOgo+ ICsJYXRvbWljX3NldF9tYXNrKEk5MTVfV0VER0VELCAmZXJyb3ItPnJlc2V0X2NvdW50ZXIpOwo+ ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICB9 Cj4gIAo+ICBzdGF0aWMgaW50IGk5MTVfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBj b25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ IGluZGV4IDNmZTkzM2U0ZTY2NC4uYWE4M2IyODRjYjJmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCj4gQEAgLTEzOTUsOSArMTM5NSw2IEBAIHN0cnVjdCBpOTE1X2dwdV9lcnJvciB7Cj4g IAo+ICAJLyogRm9yIG1pc3NlZCBpcnEvc2Vxbm8gc2ltdWxhdGlvbi4gKi8KPiAgCXVuc2lnbmVk IGludCB0ZXN0X2lycV9yaW5nczsKPiAtCj4gLQkvKiBVc2VkIHRvIHByZXZlbnQgZ2VtX2NoZWNr X3dlZGdlZCByZXR1cm5pbmcgLUVBR0FJTiBkdXJpbmcgZ3B1IHJlc2V0ICAgKi8KPiAtCWJvb2wg cmVsb2FkX2luX3Jlc2V0Owo+ICB9Owo+ICAKPiAgZW51bSBtb2Rlc2V0X3Jlc3RvcmUgewo+IEBA IC0yMTU3LDYgKzIxNTQsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qgewo+ICAJLyoq IE9uIFdoaWNoIHJpbmcgdGhpcyByZXF1ZXN0IHdhcyBnZW5lcmF0ZWQgKi8KPiAgCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1Owo+ICAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l Owo+ICsJdW5zaWduZWQgcmVzZXRfY291bnRlcjsKPiAgCj4gIAkvKiogR0VNIHNlcXVlbmNlIG51 bWJlciBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0LiAqLwo+ICAJdWludDMyX3Qgc2Vxbm87 Cj4gQEAgLTI4OTEsMjMgKzI4ODksNDcgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICoK PiAgaTkxNV9nZW1fZmluZF9hY3RpdmVfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpy aW5nKTsKPiAgCj4gIGJvb2wgaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOwo+IC1pbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2NoZWNrX3dlZGdlKHN0cnVj dCBpOTE1X2dwdV9lcnJvciAqZXJyb3IsCj4gK2ludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fY2hl Y2tfd2VkZ2UodW5zaWduZWQgcmVzZXRfY291bnRlciwKPiAgCQkJCSAgICAgIGJvb2wgaW50ZXJy dXB0aWJsZSk7Cj4gIAo+ICtzdGF0aWMgaW5saW5lIHUzMiBpOTE1X3Jlc2V0X2NvdW50ZXIoc3Ry dWN0IGk5MTVfZ3B1X2Vycm9yICplcnJvcikKPiArewo+ICsJcmV0dXJuIGF0b21pY19yZWFkKCZl cnJvci0+cmVzZXRfY291bnRlcik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBfX2k5 MTVfcmVzZXRfaW5fcHJvZ3Jlc3ModTMyIHJlc2V0KQo+ICt7Cj4gKwlyZXR1cm4gdW5saWtlbHko cmVzZXQgJiBJOTE1X1JFU0VUX0lOX1BST0dSRVNTX0ZMQUcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW5saW5lIGJvb2wgX19pOTE1X3Jlc2V0X2luX3Byb2dyZXNzX29yX3dlZGdlZCh1MzIgcmVzZXQp Cj4gK3sKPiArCXJldHVybiB1bmxpa2VseShyZXNldCAmIChJOTE1X1JFU0VUX0lOX1BST0dSRVNT X0ZMQUcgfCBJOTE1X1dFREdFRCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgX19p OTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKHUzMiByZXNldCkKPiArewo+ICsJcmV0dXJuIHVubGlrZWx5 KHJlc2V0ICYgSTkxNV9XRURHRUQpOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW5saW5lIGJvb2wgaTkx NV9yZXNldF9pbl9wcm9ncmVzcyhzdHJ1Y3QgaTkxNV9ncHVfZXJyb3IgKmVycm9yKQo+ICB7Cj4g LQlyZXR1cm4gdW5saWtlbHkoYXRvbWljX3JlYWQoJmVycm9yLT5yZXNldF9jb3VudGVyKQo+IC0J CQkmIChJOTE1X1JFU0VUX0lOX1BST0dSRVNTX0ZMQUcgfCBJOTE1X1dFREdFRCkpOwo+ICsJcmV0 dXJuIF9faTkxNV9yZXNldF9pbl9wcm9ncmVzcyhpOTE1X3Jlc2V0X2NvdW50ZXIoZXJyb3IpKTsK PiArfQo+ICsKPiArc3RhdGljIGlubGluZSBib29sIGk5MTVfcmVzZXRfaW5fcHJvZ3Jlc3Nfb3Jf d2VkZ2VkKHN0cnVjdCBpOTE1X2dwdV9lcnJvciAqZXJyb3IpCj4gK3sKPiArCXJldHVybiBfX2k5 MTVfcmVzZXRfaW5fcHJvZ3Jlc3Nfb3Jfd2VkZ2VkKGk5MTVfcmVzZXRfY291bnRlcihlcnJvcikp Owo+ICB9Cj4gIAo+ICBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV90ZXJtaW5hbGx5X3dlZGdlZChz dHJ1Y3QgaTkxNV9ncHVfZXJyb3IgKmVycm9yKQo+ICB7Cj4gLQlyZXR1cm4gYXRvbWljX3JlYWQo JmVycm9yLT5yZXNldF9jb3VudGVyKSAmIEk5MTVfV0VER0VEOwo+ICsJcmV0dXJuIF9faTkxNV90 ZXJtaW5hbGx5X3dlZGdlZChpOTE1X3Jlc2V0X2NvdW50ZXIoZXJyb3IpKTsKPiAgfQo+ICAKPiAg c3RhdGljIGlubGluZSB1MzIgaTkxNV9yZXNldF9jb3VudChzdHJ1Y3QgaTkxNV9ncHVfZXJyb3Ig KmVycm9yKQo+ICB7Cj4gLQlyZXR1cm4gKChhdG9taWNfcmVhZCgmZXJyb3ItPnJlc2V0X2NvdW50 ZXIpICYgfkk5MTVfV0VER0VEKSArIDEpIC8gMjsKPiArCXJldHVybiAoKGk5MTVfcmVzZXRfY291 bnRlcihlcnJvcikgJiB+STkxNV9XRURHRUQpICsgMSkgLyAyOwo+ICB9Cj4gIAo+ICBzdGF0aWMg aW5saW5lIGJvb2wgaTkxNV9zdG9wX3JpbmdfYWxsb3dfYmFuKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiBAQCAtMjk0MCw3ICsyOTYyLDYgQEAgdm9pZCBfX2k5MTVfYWRkX3Jl cXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gICNkZWZpbmUgaTkxNV9h ZGRfcmVxdWVzdF9ub19mbHVzaChyZXEpIFwKPiAgCV9faTkxNV9hZGRfcmVxdWVzdChyZXEsIE5V TEwsIGZhbHNlKQo+ICBpbnQgX19pOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcSwKPiAtCQkJdW5zaWduZWQgcmVzZXRfY291bnRlciwKPiAgCQkJYm9vbCBp bnRlcnJ1cHRpYmxlLAo+ICAJCQlzNjQgKnRpbWVvdXQsCj4gIAkJCXN0cnVjdCBpbnRlbF9ycHNf Y2xpZW50ICpycHMpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IGQzNjA5ZTExMTY0 Ny4uNmFjOWM4MDI0NGZhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTg1LDkg Kzg1LDcgQEAgaTkxNV9nZW1fd2FpdF9mb3JfZXJyb3Ioc3RydWN0IGk5MTVfZ3B1X2Vycm9yICpl cnJvcikKPiAgewo+ICAJaW50IHJldDsKPiAgCj4gLSNkZWZpbmUgRVhJVF9DT05EICghaTkxNV9y ZXNldF9pbl9wcm9ncmVzcyhlcnJvcikgfHwgXAo+IC0JCSAgIGk5MTVfdGVybWluYWxseV93ZWRn ZWQoZXJyb3IpKQo+IC0JaWYgKEVYSVRfQ09ORCkKPiArCWlmICghaTkxNV9yZXNldF9pbl9wcm9n cmVzcyhlcnJvcikpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+ICAJLyoKPiBAQCAtOTYsMTcgKzk0LDE2 IEBAIGk5MTVfZ2VtX3dhaXRfZm9yX2Vycm9yKHN0cnVjdCBpOTE1X2dwdV9lcnJvciAqZXJyb3Ip Cj4gIAkgKiB3ZSBzaG91bGQgc2ltcGx5IHRyeSB0byBiYWlsIG91dCBhbmQgZmFpbCBhcyBncmFj ZWZ1bGx5IGFzIHBvc3NpYmxlLgo+ICAJICovCj4gIAlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVw dGlibGVfdGltZW91dChlcnJvci0+cmVzZXRfcXVldWUsCj4gLQkJCQkJICAgICAgIEVYSVRfQ09O RCwKPiArCQkJCQkgICAgICAgIWk5MTVfcmVzZXRfaW5fcHJvZ3Jlc3MoZXJyb3IpLAo+ICAJCQkJ CSAgICAgICAxMCpIWik7Cj4gIAlpZiAocmV0ID09IDApIHsKPiAgCQlEUk1fRVJST1IoIlRpbWVk IG91dCB3YWl0aW5nIGZvciB0aGUgZ3B1IHJlc2V0IHRvIGNvbXBsZXRlXG4iKTsKPiAgCQlyZXR1 cm4gLUVJTzsKPiAgCX0gZWxzZSBpZiAocmV0IDwgMCkgewo+ICAJCXJldHVybiByZXQ7Cj4gKwl9 IGVsc2Ugewo+ICsJCXJldHVybiAwOwo+ICAJfQo+IC0jdW5kZWYgRVhJVF9DT05ECj4gLQo+IC0J cmV0dXJuIDA7CgpJIGxpa2UgdGhlIGV4aXN0aW5nIGNvbG9yIGJldHRlciA7LSkKCj4gIH0KPiAg Cj4gIGludCBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQo+IEBAIC0xMTEyLDI2ICsxMTA5LDIwIEBAIHB1dF9ycG06Cj4gIH0KPiAgCj4gIGludAo+ IC1pOTE1X2dlbV9jaGVja193ZWRnZShzdHJ1Y3QgaTkxNV9ncHVfZXJyb3IgKmVycm9yLAo+ICtp OTE1X2dlbV9jaGVja193ZWRnZSh1bnNpZ25lZCByZXNldF9jb3VudGVyLAo+ICAJCSAgICAgYm9v bCBpbnRlcnJ1cHRpYmxlKQo+ICB7Cj4gLQlpZiAoaTkxNV9yZXNldF9pbl9wcm9ncmVzcyhlcnJv cikpIHsKPiArCWlmIChfX2k5MTVfcmVzZXRfaW5fcHJvZ3Jlc3Nfb3Jfd2VkZ2VkKHJlc2V0X2Nv dW50ZXIpKSB7Cj4gIAkJLyogTm9uLWludGVycnVwdGlibGUgY2FsbGVycyBjYW4ndCBoYW5kbGUg LUVBR0FJTiwgaGVuY2UgcmV0dXJuCj4gIAkJICogLUVJTyB1bmNvbmRpdGlvbmFsbHkgZm9yIHRo ZXNlLiAqLwo+ICAJCWlmICghaW50ZXJydXB0aWJsZSkKPiAgCQkJcmV0dXJuIC1FSU87Cj4gIAo+ ICAJCS8qIFJlY292ZXJ5IGNvbXBsZXRlLCBidXQgdGhlIHJlc2V0IGZhaWxlZCAuLi4gKi8KPiAt CQlpZiAoaTkxNV90ZXJtaW5hbGx5X3dlZGdlZChlcnJvcikpCj4gKwkJaWYgKF9faTkxNV90ZXJt aW5hbGx5X3dlZGdlZChyZXNldF9jb3VudGVyKSkKPiAgCQkJcmV0dXJuIC1FSU87Cj4gIAo+IC0J CS8qCj4gLQkJICogQ2hlY2sgaWYgR1BVIFJlc2V0IGlzIGluIHByb2dyZXNzIC0gd2UgbmVlZCBp bnRlbF9yaW5nX2JlZ2luCj4gLQkJICogdG8gd29yayBwcm9wZXJseSB0byByZWluaXQgdGhlIGh3 IHN0YXRlIHdoaWxlIHRoZSBncHUgaXMKPiAtCQkgKiBzdGlsbCBtYXJrZWQgYXMgcmVzZXQtaW4t cHJvZ3Jlc3MuIEhhbmRsZSB0aGlzIHdpdGggYSBmbGFnLgo+IC0JCSAqLwo+IC0JCWlmICghZXJy b3ItPnJlbG9hZF9pbl9yZXNldCkKPiAtCQkJcmV0dXJuIC1FQUdBSU47Cj4gKwkJcmV0dXJuIC1F QUdBSU47CgpUaGlzIG9ubHkgd29ya3MgYmVjYXVzZSB5b3UgbW92ZSB0aGUgY2hlY2tfd2VkZ2Ug ZnJvbSByaW5nX2JlZ2luIHRvCndhaXRfc3BhY2UsIHNvIGFzc3VtZXMgdGhhdCB3ZSBuZXZlciBj aGFuZ2UgdGhhdCBhZ2Fpbi4gUmF0aGVyIGZyYWdpbGUKaW1vLgoKPiAgCX0KPiAgCj4gIAlyZXR1 cm4gMDsKPiBAQCAtMTIwMCw3ICsxMTkxLDYgQEAgc3RhdGljIGludCBfX2k5MTVfc3Bpbl9yZXF1 ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCBpbnQgc3RhdGUpCj4gIC8qKgo+ ICAgKiBfX2k5MTVfd2FpdF9yZXF1ZXN0IC0gd2FpdCB1bnRpbCBleGVjdXRpb24gb2YgcmVxdWVz dCBoYXMgZmluaXNoZWQKPiAgICogQHJlcTogZHVoIQo+IC0gKiBAcmVzZXRfY291bnRlcjogcmVz ZXQgc2VxdWVuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiByZXF1ZXN0Cj4gICAqIEBpbnRl cnJ1cHRpYmxlOiBkbyBhbiBpbnRlcnJ1cHRpYmxlIHdhaXQgKG5vcm1hbGx5IHllcykKPiAgICog QHRpbWVvdXQ6IGluIC0gaG93IGxvbmcgdG8gd2FpdCAoTlVMTCBmb3JldmVyKTsgb3V0IC0gaG93 IG11Y2ggdGltZSByZW1haW5pbmcKPiAgICoKPiBAQCAtMTIxNSw3ICsxMjA1LDYgQEAgc3RhdGlj IGludCBfX2k5MTVfc3Bpbl9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVx LCBpbnQgc3RhdGUpCj4gICAqIGVycm5vIHdpdGggcmVtYWluaW5nIHRpbWUgZmlsbGVkIGluIHRp bWVvdXQgYXJndW1lbnQuCj4gICAqLwo+ICBpbnQgX19pOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPiAtCQkJdW5zaWduZWQgcmVzZXRfY291bnRlciwK PiAgCQkJYm9vbCBpbnRlcnJ1cHRpYmxlLAo+ICAJCQlzNjQgKnRpbWVvdXQsCj4gIAkJCXN0cnVj dCBpbnRlbF9ycHNfY2xpZW50ICpycHMpCj4gQEAgLTEyNjQsMTIgKzEyNTMsMTIgQEAgaW50IF9f aTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gIAo+ ICAJCS8qIFdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZ3B1IHJlc2V0IGhhcHBlbmVkIGlu IGJldHdlZW4KPiAgCQkgKiB0aGUgY2FsbGVyIGdyYWJiaW5nIHRoZSBzZXFubyBhbmQgbm93IC4u LiAqLwo+IC0JCWlmIChyZXNldF9jb3VudGVyICE9IGF0b21pY19yZWFkKCZkZXZfcHJpdi0+Z3B1 X2Vycm9yLnJlc2V0X2NvdW50ZXIpKSB7Cj4gLQkJCS8qIC4uLiBidXQgdXBncmFkZSB0aGUgLUVB R0FJTiB0byBhbiAtRUlPIGlmIHRoZSBncHUKPiAtCQkJICogaXMgdHJ1ZWx5IGdvbmUuICovCj4g LQkJCXJldCA9IGk5MTVfZ2VtX2NoZWNrX3dlZGdlKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLCBpbnRl cnJ1cHRpYmxlKTsKPiAtCQkJaWYgKHJldCA9PSAwKQo+IC0JCQkJcmV0ID0gLUVBR0FJTjsKPiAr CQlpZiAocmVxLT5yZXNldF9jb3VudGVyICE9IGk5MTVfcmVzZXRfY291bnRlcigmZGV2X3ByaXYt PmdwdV9lcnJvcikpIHsKPiArCQkJLyogQXMgd2UgZG8gbm90IHJlcXVldWUgdGhlIHJlcXVlc3Qg b3ZlciBhIEdQVSByZXNldCwKPiArCQkJICogaWYgb25lIGRvZXMgb2NjdXIgd2Uga25vdyB0aGF0 IHRoZSByZXF1ZXN0IGlzCj4gKwkJCSAqIGVmZmVjdGl2ZWx5IGNvbXBsZXRlLgo+ICsJCQkgKi8K PiArCQkJcmV0ID0gMDsKPiAgCQkJYnJlYWs7CgpUaGlzIG5vdyBubyBsb25nZXIgYmFpbHMgb3V0 IHN0cmFpZ2h0IHdoZW4gYSByZXNldCBpcyBpbiBwcm9ncmVzcyB3aXRoCi1FQUdBSU4uIEkgZmVh ciBmb3IgdGhlIGRlYWRsb2Nrcy4KCj4gIAkJfQo+ICAKPiBAQCAtMTQzMywxMyArMTQyMiw3IEBA IGk5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ICAK PiAgCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXZfcHJpdi0+ZGV2LT5zdHJ1Y3RfbXV0ZXgp KTsKPiAgCj4gLQlyZXQgPSBpOTE1X2dlbV9jaGVja193ZWRnZSgmZGV2X3ByaXYtPmdwdV9lcnJv ciwgaW50ZXJydXB0aWJsZSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0J cmV0ID0gX19pOTE1X3dhaXRfcmVxdWVzdChyZXEsCj4gLQkJCQkgIGF0b21pY19yZWFkKCZkZXZf cHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpLAo+IC0JCQkJICBpbnRlcnJ1cHRpYmxlLCBO VUxMLCBOVUxMKTsKPiArCXJldCA9IF9faTkxNV93YWl0X3JlcXVlc3QocmVxLCBpbnRlcnJ1cHRp YmxlLCBOVUxMLCBOVUxMKTsKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIHJldDsKPiAgCj4gQEAg LTE1MTQsNyArMTQ5Nyw2IEBAIGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZ19fbm9uYmxv Y2tpbmcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2Owo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxdWVzdHNbSTkxNV9OVU1fUklOR1NdOwo+IC0JdW5zaWduZWQgcmVzZXRfY291bnRlcjsK PiAgCWludCByZXQsIGksIG4gPSAwOwo+ICAKPiAgCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZk ZXYtPnN0cnVjdF9tdXRleCkpOwo+IEBAIC0xNTIzLDEyICsxNTA1LDYgQEAgaTkxNV9nZW1fb2Jq ZWN0X3dhaXRfcmVuZGVyaW5nX19ub25ibG9ja2luZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLAo+ICAJaWYgKCFvYmotPmFjdGl2ZSkKPiAgCQlyZXR1cm4gMDsKPiAgCj4gLQlyZXQg PSBpOTE1X2dlbV9jaGVja193ZWRnZSgmZGV2X3ByaXYtPmdwdV9lcnJvciwgdHJ1ZSk7Cj4gLQlp ZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JcmVzZXRfY291bnRlciA9IGF0b21pY19y ZWFkKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpOwo+IC0KPiAgCWlmIChyZWFk b25seSkgewo+ICAJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxOwo+ICAKPiBAQCAt MTU1MCw5ICsxNTI2LDkgQEAgaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nX19ub25ibG9j a2luZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAJfQo+ICAKPiAgCW11dGV4 X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsJcmV0ID0gMDsKPiAgCWZvciAoaSA9IDA7 IHJldCA9PSAwICYmIGkgPCBuOyBpKyspCj4gLQkJcmV0ID0gX19pOTE1X3dhaXRfcmVxdWVzdChy ZXF1ZXN0c1tpXSwgcmVzZXRfY291bnRlciwgdHJ1ZSwKPiAtCQkJCQkgIE5VTEwsIHJwcyk7Cj4g KwkJcmV0ID0gX19pOTE1X3dhaXRfcmVxdWVzdChyZXF1ZXN0c1tpXSwgdHJ1ZSwgTlVMTCwgcnBz KTsKPiAgCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgCj4gIAlmb3IgKGkgPSAw OyBpIDwgbjsgaSsrKSB7Cj4gQEAgLTI3MDcsNiArMjY4Myw3IEBAIGludCBpOTE1X2dlbV9yZXF1 ZXN0X2FsbG9jKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgCQkJICAgc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICoqcmVxX291dCkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmdpbmUtPmRldik7Cj4gKwl1bnNpZ25lZCBy ZXNldF9jb3VudGVyID0gaTkxNV9yZXNldF9jb3VudGVyKCZkZXZfcHJpdi0+Z3B1X2Vycm9yKTsK PiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxOwo+ICAJaW50IHJldDsKPiAgCj4g QEAgLTI3MTUsNiArMjY5MiwxMCBAQCBpbnQgaTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gIAo+ICAJKnJlcV9vdXQgPSBOVUxMOwo+ICAKPiAr CXJldCA9IGk5MTVfZ2VtX2NoZWNrX3dlZGdlKHJlc2V0X2NvdW50ZXIsIGRldl9wcml2LT5tbS5p bnRlcnJ1cHRpYmxlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gIAlyZXEg PSBrbWVtX2NhY2hlX3phbGxvYyhkZXZfcHJpdi0+cmVxdWVzdHMsIEdGUF9LRVJORUwpOwo+ICAJ aWYgKHJlcSA9PSBOVUxMKQo+ICAJCXJldHVybiAtRU5PTUVNOwo+IEBAIC0yNzI1LDYgKzI3MDYs NyBAQCBpbnQgaTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsCj4gIAo+ICAJa3JlZl9pbml0KCZyZXEtPnJlZik7Cj4gIAlyZXEtPmk5MTUgPSBkZXZf cHJpdjsKPiArCXJlcS0+cmVzZXRfY291bnRlciA9IHJlc2V0X2NvdW50ZXI7Cj4gIAlyZXEtPmVu Z2luZSA9IGVuZ2luZTsKPiAgCXJlcS0+Y3R4ICA9IGN0eDsKPiAgCWk5MTVfZ2VtX2NvbnRleHRf cmVmZXJlbmNlKHJlcS0+Y3R4KTsKPiBAQCAtMzA3NywxMSArMzA1OSw5IEBAIHZvaWQgaTkxNV9n ZW1fY2xvc2Vfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtLAo+ICBpbnQKPiAgaTkx NV9nZW1fd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3dhaXQgKmFy Z3MgPSBkYXRhOwo+ICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiAgCXN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxW0k5MTVfTlVNX1JJTkdTXTsKPiAtCXVuc2lnbmVk IHJlc2V0X2NvdW50ZXI7Cj4gIAlpbnQgaSwgbiA9IDA7Cj4gIAlpbnQgcmV0Owo+ICAKPiBAQCAt MzExNSw3ICszMDk1LDYgQEAgaTkxNV9nZW1fd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gIAl9Cj4gIAo+ICAJZHJt X2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4gLQlyZXNldF9jb3VudGVyID0g YXRvbWljX3JlYWQoJmRldl9wcml2LT5ncHVfZXJyb3IucmVzZXRfY291bnRlcik7Cj4gIAo+ICAJ Zm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspIHsKPiAgCQlpZiAob2JqLT5sYXN0 X3JlYWRfcmVxW2ldID09IE5VTEwpCj4gQEAgLTMxMjgsMTEgKzMxMDcsMjMgQEAgaTkxNV9nZW1f d2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGUpCj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewo+ICAJCWlmIChy ZXQgPT0gMCkKPiAtCQkJcmV0ID0gX19pOTE1X3dhaXRfcmVxdWVzdChyZXFbaV0sIHJlc2V0X2Nv dW50ZXIsIHRydWUsCj4gKwkJCXJldCA9IF9faTkxNV93YWl0X3JlcXVlc3QocmVxW2ldLCB0cnVl LAo+ICAJCQkJCQkgIGFyZ3MtPnRpbWVvdXRfbnMgPiAwID8gJmFyZ3MtPnRpbWVvdXRfbnMgOiBO VUxMLAo+ICAJCQkJCQkgIGZpbGUtPmRyaXZlcl9wcml2KTsKPiArCj4gKwkJLyogSWYgdGhlIEdQ VSBodW5nIGJlZm9yZSB0aGlzLCByZXBvcnQgaXQuIElkZWFsbHkgd2Ugb25seQo+ICsJCSAqIHJl cG9ydCBpZiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGNvbXBsZXRlZC4gQ3VycmVudGx5Cj4gKwkJ ICogd2hlbiB3ZSBkb24ndCBtYXJrIHRoZSBndWlsdHkgcGFydHkgYW5kIGFib3J0IGFsbAo+ICsJ CSAqIHJlcXVlc3RzIG9uIHJlc2V0LCBzbyBqdXN0IG1hcmsgYWxsIGFzIEVJTy4KPiArCQkgKi8K PiArCQlpZiAocmV0ID09IDAgJiYKPiArCQkgICAgcmVxW2ldLT5yZXNldF9jb3VudGVyICE9IGk5 MTVfcmVzZXRfY291bnRlcigmcmVxW2ldLT5pOTE1LT5ncHVfZXJyb3IpKQo+ICsJCQlyZXQgPSAt RUlPOwo+ICsKPiAgCQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlX191bmxvY2tlZChyZXFb aV0pOwo+ICAJfQo+ICsKPiArCj4gIAlyZXR1cm4gcmV0Owo+ICAKPiAgb3V0Ogo+IEBAIC0zMTYw LDcgKzMxNTEsNiBAQCBfX2k5MTVfZ2VtX29iamVjdF9zeW5jKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCj4gIAlpZiAoIWk5MTVfc2VtYXBob3JlX2lzX2VuYWJsZWQoZnJvbV9yZXEt Pmk5MTUpKSB7Cj4gIAkJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBmcm9tX3JlcS0+ aTkxNTsKPiAgCQlyZXQgPSBfX2k5MTVfd2FpdF9yZXF1ZXN0KGZyb21fcmVxLAo+IC0JCQkJCSAg YXRvbWljX3JlYWQoJmk5MTUtPmdwdV9lcnJvci5yZXNldF9jb3VudGVyKSwKPiAgCQkJCQkgIGk5 MTUtPm1tLmludGVycnVwdGlibGUsCj4gIAkJCQkJICBOVUxMLAo+ICAJCQkJCSAgJmk5MTUtPnJw cy5zZW1hcGhvcmVzKTsKPiBAQCAtNDA4MiwxNCArNDA3MiwxNSBAQCBpOTE1X2dlbV9yaW5nX3Ro cm90dGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiAg CXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiA9IGZpbGUtPmRyaXZlcl9w cml2Owo+ICAJdW5zaWduZWQgbG9uZyByZWNlbnRfZW5vdWdoID0gamlmZmllcyAtIERSTV9JOTE1 X1RIUk9UVExFX0pJRkZJRVM7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVl c3QsICp0YXJnZXQgPSBOVUxMOwo+IC0JdW5zaWduZWQgcmVzZXRfY291bnRlcjsKPiAgCWludCBy ZXQ7Cj4gIAo+ICAJcmV0ID0gaTkxNV9nZW1fd2FpdF9mb3JfZXJyb3IoJmRldl9wcml2LT5ncHVf ZXJyb3IpOwo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCXJldCA9IGk5MTVf Z2VtX2NoZWNrX3dlZGdlKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLCBmYWxzZSk7Cj4gKwkvKiBBQkk6 IHJldHVybiAtRUlPIGlmIHdlZGdlZCAqLwo+ICsJcmV0ID0gaTkxNV9nZW1fY2hlY2tfd2VkZ2Uo aTkxNV9yZXNldF9jb3VudGVyKCZkZXZfcHJpdi0+Z3B1X2Vycm9yKSwKPiArCQkJCSAgIGZhbHNl KTsKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIHJldDsKPiAgCj4gQEAgLTQxMDcsNyArNDA5OCw2 IEBAIGk5MTVfZ2VtX3JpbmdfdGhyb3R0bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0 IGRybV9maWxlICpmaWxlKQo+ICAKPiAgCQl0YXJnZXQgPSByZXF1ZXN0Owo+ICAJfQo+IC0JcmVz ZXRfY291bnRlciA9IGF0b21pY19yZWFkKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2NvdW50 ZXIpOwo+ICAJaWYgKHRhcmdldCkKPiAgCQlpOTE1X2dlbV9yZXF1ZXN0X3JlZmVyZW5jZSh0YXJn ZXQpOwo+ICAJc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+bW0ubG9jayk7Cj4gQEAgLTQxMTUsNyAr NDEwNSw3IEBAIGk5MTVfZ2VtX3JpbmdfdGhyb3R0bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IGRybV9maWxlICpmaWxlKQo+ICAJaWYgKHRhcmdldCA9PSBOVUxMKQo+ICAJCXJldHVy biAwOwo+ICAKPiAtCXJldCA9IF9faTkxNV93YWl0X3JlcXVlc3QodGFyZ2V0LCByZXNldF9jb3Vu dGVyLCB0cnVlLCBOVUxMLCBOVUxMKTsKPiArCXJldCA9IF9faTkxNV93YWl0X3JlcXVlc3QodGFy Z2V0LCB0cnVlLCBOVUxMLCBOVUxMKTsKPiAgCWlmIChyZXQgPT0gMCkKPiAgCQlxdWV1ZV9kZWxh eWVkX3dvcmsoZGV2X3ByaXYtPndxLCAmZGV2X3ByaXYtPm1tLnJldGlyZV93b3JrLCAwKTsKPiAg Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gaW5kZXggZjlmNWU5Y2Y3MzYwLi4xODYzMTUyMDg0 NjIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiBAQCAtMjIwMCw3ICsyMjAwLDYgQEAg c3RhdGljIHZvaWQgaTkxNV9lcnJvcl93YWtlX3VwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiAgc3RhdGljIHZvaWQgaTkxNV9yZXNldF9hbmRfd2FrZXVwKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZGV2KTsKPiAtCXN0cnVjdCBpOTE1X2dwdV9lcnJvciAqZXJyb3IgPSAmZGV2X3By aXYtPmdwdV9lcnJvcjsKPiAgCWNoYXIgKmVycm9yX2V2ZW50W10gPSB7IEk5MTVfRVJST1JfVUVW RU5UICI9MSIsIE5VTEwgfTsKPiAgCWNoYXIgKnJlc2V0X2V2ZW50W10gPSB7IEk5MTVfUkVTRVRf VUVWRU5UICI9MSIsIE5VTEwgfTsKPiAgCWNoYXIgKnJlc2V0X2RvbmVfZXZlbnRbXSA9IHsgSTkx NV9FUlJPUl9VRVZFTlQgIj0wIiwgTlVMTCB9Owo+IEBAIC0yMjE4LDcgKzIyMTcsNyBAQCBzdGF0 aWMgdm9pZCBpOTE1X3Jlc2V0X2FuZF93YWtldXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAg CSAqIHRoZSByZXNldCBpbi1wcm9ncmVzcyBiaXQgaXMgb25seSBldmVyIHNldCBieSBjb2RlIG91 dHNpZGUgb2YgdGhpcwo+ICAJICogd29yayB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGFu eSBvdGhlciByYWNlcy4KPiAgCSAqLwo+IC0JaWYgKGk5MTVfcmVzZXRfaW5fcHJvZ3Jlc3MoZXJy b3IpICYmICFpOTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKGVycm9yKSkgewo+ICsJaWYgKGk5MTVfcmVz ZXRfaW5fcHJvZ3Jlc3MoJmRldl9wcml2LT5ncHVfZXJyb3IpKSB7Cj4gIAkJRFJNX0RFQlVHX0RS SVZFUigicmVzZXR0aW5nIGNoaXBcbiIpOwo+ICAJCWtvYmplY3RfdWV2ZW50X2VudigmZGV2LT5w cmltYXJ5LT5rZGV2LT5rb2JqLCBLT0JKX0NIQU5HRSwKPiAgCQkJCSAgIHJlc2V0X2V2ZW50KTsK PiBAQCAtMjI0NiwyNSArMjI0NSw5IEBAIHN0YXRpYyB2b2lkIGk5MTVfcmVzZXRfYW5kX3dha2V1 cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAKPiAgCQlpbnRlbF9ydW50aW1lX3BtX3B1dChk ZXZfcHJpdik7Cj4gIAo+IC0JCWlmIChyZXQgPT0gMCkgewo+IC0JCQkvKgo+IC0JCQkgKiBBZnRl ciBhbGwgdGhlIGdlbSBzdGF0ZSBpcyByZXNldCwgaW5jcmVtZW50IHRoZSByZXNldAo+IC0JCQkg KiBjb3VudGVyIGFuZCB3YWtlIHVwIGV2ZXJ5b25lIHdhaXRpbmcgZm9yIHRoZSByZXNldCB0bwo+ IC0JCQkgKiBjb21wbGV0ZS4KPiAtCQkJICoKPiAtCQkJICogU2luY2UgdW5sb2NrIG9wZXJhdGlv bnMgYXJlIGEgb25lLXNpZGVkIGJhcnJpZXIgb25seSwKPiAtCQkJICogd2UgbmVlZCB0byBpbnNl cnQgYSBiYXJyaWVyIGhlcmUgdG8gb3JkZXIgYW55IHNlcW5vCj4gLQkJCSAqIHVwZGF0ZXMgYmVm b3JlCj4gLQkJCSAqIHRoZSBjb3VudGVyIGluY3JlbWVudC4KPiAtCQkJICovCj4gLQkJCXNtcF9t Yl9fYmVmb3JlX2F0b21pYygpOwo+IC0JCQlhdG9taWNfaW5jKCZkZXZfcHJpdi0+Z3B1X2Vycm9y LnJlc2V0X2NvdW50ZXIpOwo+IC0KPiArCQlpZiAocmV0ID09IDApCj4gIAkJCWtvYmplY3RfdWV2 ZW50X2VudigmZGV2LT5wcmltYXJ5LT5rZGV2LT5rb2JqLAo+ICAJCQkJCSAgIEtPQkpfQ0hBTkdF LCByZXNldF9kb25lX2V2ZW50KTsKPiAtCQl9IGVsc2Ugewo+IC0JCQlhdG9taWNfc2V0X21hc2so STkxNV9XRURHRUQsICZlcnJvci0+cmVzZXRfY291bnRlcik7Cj4gLQkJfQo+ICAKPiAgCQkvKgo+ ICAJCSAqIE5vdGU6IFRoZSB3YWtlX3VwIGFsc28gc2VydmVzIGFzIGEgbWVtb3J5IGJhcnJpZXIg c28gdGhhdAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiBpbmRleCBjZGQ2MDc0 MjU3YWYuLjhjYjg5MzIwZDI4ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kaXNwbGF5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMKPiBAQCAtMzI5OCw4ICszMjk4LDcgQEAgc3RhdGljIGJvb2wgaW50ZWxfY3J0Y19oYXNfcGVu ZGluZ19mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAgCXN0cnVjdCBpbnRlbF9jcnRjICpp bnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiAgCWJvb2wgcGVuZGluZzsKPiAgCj4g LQlpZiAoaTkxNV9yZXNldF9pbl9wcm9ncmVzcygmZGV2X3ByaXYtPmdwdV9lcnJvcikgfHwKPiAt CSAgICBpbnRlbF9jcnRjLT5yZXNldF9jb3VudGVyICE9IGF0b21pY19yZWFkKCZkZXZfcHJpdi0+ Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpKQo+ICsJaWYgKGludGVsX2NydGMtPnJlc2V0X2NvdW50 ZXIgIT0gaTkxNV9yZXNldF9jb3VudGVyKCZkZXZfcHJpdi0+Z3B1X2Vycm9yKSkKPiAgCQlyZXR1 cm4gZmFsc2U7Cj4gIAo+ICAJc3Bpbl9sb2NrX2lycSgmZGV2LT5ldmVudF9sb2NrKTsKPiBAQCAt MTA3NTEsOCArMTA3NTAsNyBAQCBzdGF0aWMgYm9vbCBwYWdlX2ZsaXBfZmluaXNoZWQoc3RydWN0 IGludGVsX2NydGMgKmNydGMpCj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFz ZS5kZXY7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOwo+ICAKPiAtCWlmIChpOTE1X3Jlc2V0X2luX3Byb2dyZXNzKCZkZXZfcHJpdi0+Z3B1 X2Vycm9yKSB8fAo+IC0JICAgIGNydGMtPnJlc2V0X2NvdW50ZXIgIT0gYXRvbWljX3JlYWQoJmRl dl9wcml2LT5ncHVfZXJyb3IucmVzZXRfY291bnRlcikpCj4gKwlpZiAoY3J0Yy0+cmVzZXRfY291 bnRlciAhPSBpOTE1X3Jlc2V0X2NvdW50ZXIoJmRldl9wcml2LT5ncHVfZXJyb3IpKQo+ICAJCXJl dHVybiB0cnVlOwo+ICAKPiAgCS8qCj4gQEAgLTExMTgwLDkgKzExMTc4LDcgQEAgc3RhdGljIHZv aWQgaW50ZWxfbW1pb19mbGlwX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4g IAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpbnRlbF9tbWlvX2ZsaXAsIHdvcmspOwo+ICAK PiAgCWlmIChtbWlvX2ZsaXAtPnJlcSkKPiAtCQlXQVJOX09OKF9faTkxNV93YWl0X3JlcXVlc3Qo bW1pb19mbGlwLT5yZXEsCj4gLQkJCQkJICAgIG1taW9fZmxpcC0+Y3J0Yy0+cmVzZXRfY291bnRl ciwKPiAtCQkJCQkgICAgZmFsc2UsIE5VTEwsCj4gKwkJV0FSTl9PTihfX2k5MTVfd2FpdF9yZXF1 ZXN0KG1taW9fZmxpcC0+cmVxLCBmYWxzZSwgTlVMTCwKPiAgCQkJCQkgICAgJm1taW9fZmxpcC0+ aTkxNS0+cnBzLm1taW9mbGlwcykpOwo+ICAKPiAgCWludGVsX2RvX21taW9fZmxpcChtbWlvX2Zs aXAtPmNydGMpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5n YnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPiBpbmRl eCBmMzNkYjM0OTVlMzUuLmIzNTM4YjY2MzUzYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9yaW5nYnVmZmVyLmMKPiBAQCAtMjE1Niw5ICsyMTU2LDcgQEAgaW50IGludGVsX3Jpbmdf aWRsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICAJCQlsaXN0KTsKPiAgCj4gIAkv KiBNYWtlIHN1cmUgd2UgZG8gbm90IHRyaWdnZXIgYW55IHJldGlyZXMgKi8KPiAtCXJldHVybiBf X2k5MTVfd2FpdF9yZXF1ZXN0KHJlcSwKPiAtCQkJCSAgIGF0b21pY19yZWFkKCZyZXEtPmk5MTUt PmdwdV9lcnJvci5yZXNldF9jb3VudGVyKSwKPiAtCQkJCSAgIHJlcS0+aTkxNS0+bW0uaW50ZXJy dXB0aWJsZSwKPiArCXJldHVybiBfX2k5MTVfd2FpdF9yZXF1ZXN0KHJlcSwgcmVxLT5pOTE1LT5t bS5pbnRlcnJ1cHRpYmxlLAo+ICAJCQkJICAgTlVMTCwgTlVMTCk7Cj4gIH0KPiAgCj4gQEAgLTIy NTIsNiArMjI1MCwxNCBAQCBzdGF0aWMgaW50IHdhaXRfZm9yX3NwYWNlKHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxLCBpbnQgYnl0ZXMpCj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiBy ZXQ7Cj4gIAo+ICsJLyogSWYgdGhlIHJlcXVlc3Qgd2FzIGNvbXBsZXRlZCBkdWUgdG8gYSBHUFUg aGFuZywgd2Ugd2FudCB0bwo+ICsJICogZXJyb3Igb3V0IGJlZm9yZSB3ZSBjb250aW51ZSB0byBl bWl0IG1vcmUgY29tbWFuZHMgdG8gdGhlIEdQVS4KPiArCSAqLwo+ICsJcmV0ID0gaTkxNV9nZW1f Y2hlY2tfd2VkZ2UoaTkxNV9yZXNldF9jb3VudGVyKCZ0b19pOTE1KGVuZ2luZS0+ZGV2KS0+Z3B1 X2Vycm9yKSwKPiArCQkJCSAgIHRvX2k5MTUoZW5naW5lLT5kZXYpLT5tbS5pbnRlcnJ1cHRpYmxl KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKCkRvbid0IHdlIHN0aWxsIGhhdmUgdGhl IHByb2JsZW0gd2l0aCAtRUlPIG5vdyBoZXJlLCBqdXN0IGxlc3MgbGlrZWx5IHRoYW4KZnJvbSBp bnRlbF9yaW5nX2JlZ2luPwoKPiArCj4gIAlyaW5nLT5zcGFjZSA9IHNwYWNlOwo+ICAJcmV0dXJu IDA7Cj4gIH0KPiBAQCAtMjMxNiwxMSArMjMyMiw2IEBAIGludCBpbnRlbF9yaW5nX2JlZ2luKHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCBpbnQgbnVtX2R3b3JkcykKPiAgewo+ICAJ aW50IHJldDsKPiAgCj4gLQlyZXQgPSBpOTE1X2dlbV9jaGVja193ZWRnZSgmcmVxLT5pOTE1LT5n cHVfZXJyb3IsCj4gLQkJCQkgICByZXEtPmk5MTUtPm1tLmludGVycnVwdGlibGUpOwo+IC0JaWYg KHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAgCXJldCA9IHJpbmdfcHJlcGFyZShyZXEsIG51 bV9kd29yZHMgKiBzaXplb2YodWludDMyX3QpKTsKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIHJl dDsKPiAtLSAKPiAyLjYuMgo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKPiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4CgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50 ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK