From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH v3 09/16] drm/i915/gen9: Drop re-allocation of DDB at atomic commit (v2) Date: Fri, 06 May 2016 14:42:46 -0400 Message-ID: <1462560166.30874.14.camel@redhat.com> References: <1461280630-7477-1-git-send-email-matthew.d.roper@intel.com> <1461280630-7477-10-git-send-email-matthew.d.roper@intel.com> <1462558369.30874.10.camel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id B5B6A6E2B4 for ; Fri, 6 May 2016 18:42:47 +0000 (UTC) In-Reply-To: <1462558369.30874.10.camel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Roper , intel-gfx@lists.freedesktop.org, Maarten Lankhorst List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCAyMDE2LTA1LTA2IGF0IDE0OjEyIC0wNDAwLCBMeXVkZSBQYXVsIHdyb3RlOgo+IE9u IFRodSwgMjAxNi0wNC0yMSBhdCAxNjoxNyAtMDcwMCwgTWF0dCBSb3BlciB3cm90ZToKPiA+IAo+ ID4gTm93IHRoYXQgd2UncmUgcHJvcGVybHkgcHJlLWFsbG9jYXRpbmcgdGhlIEREQiBkdXJpbmcg dGhlIGF0b21pYyBjaGVjawo+ID4gcGhhc2UgYW5kIHdlIHRydXN0IHRoYXQgdGhlIGFsbG9jYXRp b24gaXMgYXBwcm9wcmlhdGUsIGxldCdzIGFjdHVhbGx5Cj4gPiB1c2UgdGhlIGFsbG9jYXRpb24g Y29tcHV0ZWQgYW5kIG5vdCBkdXBsaWNhdGUgdGhhdCB3b3JrIGR1cmluZyB0aGUKPiA+IGNvbW1p dCBwaGFzZS4KPiA+IAo+ID4gdjI6Cj4gPiDCoC0gU2lnbmlmaWNhbnQgcmViYXNpbmcgbm93IHRo YXQgd2UgY2FuIHVzZSBjYWNoZWQgZGF0YSByYXRlcyBhbmQKPiA+IMKgwqDCoG1pbmltdW0gYmxv Y2sgYWxsb2NhdGlvbnMgdG8gYXZvaWQgZ3JhYmJpbmcgYWRkaXRpb25hbCBwbGFuZSBzdGF0ZXMu Cj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IE1hdHQgUm9wZXIgPG1hdHRoZXcuZC5yb3BlckBpbnRl bC5jb20+Cj4gPiBSZXZpZXdlZC1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hv cnN0QGxpbnV4LmludGVsLmNvbT4KPiA+IC0tLQo+ID4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kaXNwbGF5LmMgfMKgwqAxNCArLS0KPiA+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcG0uY8KgwqDCoMKgwqDCoHwgMjI0ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cj4gPiAtLQo+ID4gLQo+ID4gwqAyIGZpbGVzIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKyksIDE3 MSBkZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rpc3BsYXkuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMKPiA+IGluZGV4IGM5NzBlM2UuLjgwZDhmNzcgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rpc3BsYXkuYwo+ID4gQEAgLTEzNTk5LDYgKzEzNTk5LDcgQEAgc3RhdGljIGludCBp bnRlbF9hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlCj4gPiAqZGV2LAo+ID4gwqAKPiA+ IMKgCWRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoZGV2LCBzdGF0ZSk7Cj4gPiDCoAlkZXZf cHJpdi0+d20uY29uZmlnID0gaW50ZWxfc3RhdGUtPndtX2NvbmZpZzsKPiA+ICsJZGV2X3ByaXYt PndtLnNrbF9yZXN1bHRzLmRkYiA9IGludGVsX3N0YXRlLT5kZGI7Cj4gPiDCoAlpbnRlbF9zaGFy ZWRfZHBsbF9jb21taXQoc3RhdGUpOwo+ID4gwqAKPiA+IMKgCWlmIChpbnRlbF9zdGF0ZS0+bW9k ZXNldCkgewo+ID4gQEAgLTEzNzE2LDE5ICsxMzcxNyw2IEBAIHN0YXRpYyBpbnQgaW50ZWxfYXRv bWljX2NvbW1pdChzdHJ1Y3QgZHJtX2RldmljZQo+ID4gKmRldiwKPiA+IMKgCQlpbnRlbF9tb2Rl c2V0X3ZlcmlmeV9jcnRjKGNydGMsIG9sZF9jcnRjX3N0YXRlLCBjcnRjLQo+ID4gPnN0YXRlKTsK PiA+IMKgCX0KPiA+IMKgCj4gPiAtCS8qCj4gPiAtCcKgKiBUZW1wb3Jhcnkgc2FuaXR5IGNoZWNr OiBtYWtlIHN1cmUgb3VyIHByZS1jb21wdXRlZCBEREIgbWF0Y2hlcwo+ID4gdGhlCj4gPiAtCcKg KiBvbmUgd2UgYWN0dWFsbHkgd2luZCB1cCBwcm9ncmFtbWluZy4KPiA+IC0JwqAqCj4gPiAtCcKg KiBOb3QgYSBncmVhdCBwbGFjZSB0byBwdXQgdGhpcywgYnV0IHRoZSBlYXNpZXN0IHBsYWNlIHdl IGhhdmUKPiA+IGFjY2Vzcwo+ID4gLQnCoCogdG8gYm90aCB0aGUgcHJlLWNvbXB1dGVkIGFuZCBm aW5hbCBEREInczsgd2UnbGwgYmUgcmVtb3ZpbmcgdGhpcwo+ID4gLQnCoCogY2hlY2sgaW4gdGhl IG5leHQgcGF0Y2ggYW55d2F5Lgo+ID4gLQnCoCovCj4gPiAtCVdBUk4oSVNfR0VOOShkZXYpICYm Cj4gPiAtCcKgwqDCoMKgwqBtZW1jbXAoJmludGVsX3N0YXRlLT5kZGIsICZkZXZfcHJpdi0+d20u c2tsX3Jlc3VsdHMuZGRiLAo+ID4gLQkJwqDCoMKgwqBzaXplb2YoaW50ZWxfc3RhdGUtPmRkYikp LAo+ID4gLQnCoMKgwqDCoMKgIlByZS1jb21wdXRlZCBEREIgZG9lcyBub3QgbWF0Y2ggZmluYWwg RERCIVxuIik7Cj4gPiAtCj4gPiDCoAlpZiAoaW50ZWxfc3RhdGUtPm1vZGVzZXQpCj4gPiDCoAkJ aW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9NT0RFU0VUKTsK PiA+IMKgCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gPiBpbmRleCBmY2E0NGY4Li5m MjhmZDM2IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gQEAgLTI4NDksNyAr Mjg0OSw2IEBAIHNrbF93bV9wbGFuZV9pZChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l KQo+ID4gwqBzdGF0aWMgdm9pZAo+ID4gwqBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGlt aXRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiDCoAkJCQnCoMKgwqBjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gLQkJCQnCoMKgwqBzdHJ1Y3QgaW50ZWxfd21f Y29uZmlnICpjb25maWcsCj4gPiDCoAkJCQnCoMKgwqBzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSAqYWxs b2MsIC8qIG91dCAqLwo+ID4gwqAJCQkJwqDCoMKgaW50ICpudW1fYWN0aXZlIC8qIG91dCAqLykK PiA+IMKgewo+ID4gQEAgLTI4NTcsMjQgKzI4NTYsMjIgQEAgc2tsX2RkYl9nZXRfcGlwZV9hbGxv Y2F0aW9uX2xpbWl0cyhzdHJ1Y3QgZHJtX2RldmljZQo+ID4gKmRldiwKPiA+IMKgCXN0cnVjdCBp bnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRlID0KPiA+IHRvX2ludGVsX2F0b21pY19zdGF0 ZShzdGF0ZSk7Cj4gPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGRldik7Cj4gPiDCoAlzdHJ1Y3QgZHJtX2NydGMgKmZvcl9jcnRjID0gY3N0YXRlLT5iYXNl LmNydGM7Cj4gPiAtCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiA+IMKgCXVuc2lnbmVkIGludCBw aXBlX3NpemUsIGRkYl9zaXplOwo+ID4gwqAJaW50IG50aF9hY3RpdmVfcGlwZTsKPiA+IMKgCWlu dCBwaXBlID0gdG9faW50ZWxfY3J0Yyhmb3JfY3J0YyktPnBpcGU7Cj4gPiDCoAo+ID4gLQlpZiAo aW50ZWxfc3RhdGUgJiYgaW50ZWxfc3RhdGUtPmFjdGl2ZV9waXBlX2NoYW5nZXMpCj4gPiAtCQkq bnVtX2FjdGl2ZSA9IGh3ZWlnaHQzMihpbnRlbF9zdGF0ZS0+YWN0aXZlX2NydGNzKTsKPiA+IC0J ZWxzZSBpZiAoaW50ZWxfc3RhdGUpCj4gPiAtCQkqbnVtX2FjdGl2ZSA9IGh3ZWlnaHQzMihkZXZf cHJpdi0+YWN0aXZlX2NydGNzKTsKPiA+IC0JZWxzZQo+ID4gLQkJKm51bV9hY3RpdmUgPSBjb25m aWctPm51bV9waXBlc19hY3RpdmU7Cj4gPiAtCj4gPiAtCWlmICghY3N0YXRlLT5iYXNlLmFjdGl2 ZSkgewo+ID4gKwlpZiAoV0FSTl9PTighc3RhdGUpIHx8ICFjc3RhdGUtPmJhc2UuYWN0aXZlKSB7 Cj4gPiDCoAkJYWxsb2MtPnN0YXJ0ID0gMDsKPiA+IMKgCQlhbGxvYy0+ZW5kID0gMDsKPiA+ICsJ CSpudW1fYWN0aXZlID0gaHdlaWdodDMyKGRldl9wcml2LT5hY3RpdmVfY3J0Y3MpOwo+ID4gwqAJ CXJldHVybjsKPiA+IMKgCX0KPiA+IMKgCj4gPiArCWlmIChpbnRlbF9zdGF0ZS0+YWN0aXZlX3Bp cGVfY2hhbmdlcykKPiA+ICsJCSpudW1fYWN0aXZlID0gaHdlaWdodDMyKGludGVsX3N0YXRlLT5h Y3RpdmVfY3J0Y3MpOwo+ID4gKwllbHNlCj4gPiArCQkqbnVtX2FjdGl2ZSA9IGh3ZWlnaHQzMihk ZXZfcHJpdi0+YWN0aXZlX2NydGNzKTsKPiA+ICsKPiA+IMKgCWlmIChJU19CUk9YVE9OKGRldikp Cj4gPiDCoAkJZGRiX3NpemUgPSBCWFRfRERCX1NJWkU7Cj4gPiDCoAllbHNlCj4gPiBAQCAtMjg4 Myw1MCArMjg4MCwyMyBAQCBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVj dCBkcm1fZGV2aWNlCj4gPiAqZGV2LAo+ID4gwqAJZGRiX3NpemUgLT0gNDsgLyogNCBibG9ja3Mg Zm9yIGJ5cGFzcyBwYXRoIGFsbG9jYXRpb24gKi8KPiA+IMKgCj4gPiDCoAkvKgo+ID4gLQnCoCog RklYTUU6IEF0IHRoZSBtb21lbnQgd2UgbWF5IGJlIGNhbGxlZCBvbiBlaXRoZXIgaW4tZmxpZ2h0 IG9yCj4gPiBmdWxseQo+ID4gLQnCoCogY29tbWl0dGVkIGNzdGF0ZSdzLsKgwqBPbmNlIHdlIGZ1 bGx5IG1vdmUgRERCIGFsbG9jYXRpb24gaW4gdGhlCj4gPiBjaGVjawo+ID4gLQnCoCogcGhhc2Us IHdlJ2xsIG9ubHkgYmUgY2FsbGVkIG9uIGluLWZsaWdodCBzdGF0ZXMgYW5kIHRoZSAnZWxzZScK PiA+IC0JwqAqIGJyYW5jaCBoZXJlIHdpbGwgZ28gYXdheS4KPiA+IC0JwqAqCj4gPiAtCcKgKiBU aGUgJ2Vsc2UnIGJyYW5jaCBpcyBzbGlnaHRseSByYWN5IGhlcmUsIGJ1dCBpdCB3YXMgcmFjeSB0 bwo+ID4gYmVnaW4KPiA+IC0JwqAqIHdpdGg7IHNpbmNlIGl0J3MgZ29pbmcgYXdheSBzb29uLCBu byBlZmZvcnQgaXMgbWFkZSB0byBhZGRyZXNzCj4gPiB0aGF0Lgo+ID4gKwnCoCogSWYgdGhlIHN0 YXRlIGRvZXNuJ3QgY2hhbmdlIHRoZSBhY3RpdmUgQ1JUQydzLCB0aGVuIHRoZXJlJ3MKPiA+ICsJ wqAqIG5vIG5lZWQgdG8gcmVjYWxjdWxhdGU7IHRoZSBleGlzdGluZyBwaXBlIGFsbG9jYXRpb24g bGltaXRzCj4gPiArCcKgKiBzaG91bGQgcmVtYWluIHVuY2hhbmdlZC7CoMKgTm90ZSB0aGF0IHdl J3JlIHNhZmUgZnJvbSByYWNpbmcKPiA+ICsJwqAqIGNvbW1pdHMgc2luY2UgYW55IHJhY2luZyBj b21taXQgdGhhdCBjaGFuZ2VzIHRoZSBhY3RpdmUgQ1JUQwo+ID4gKwnCoCogbGlzdCB3b3VsZCBu ZWVkIHRvIGdyYWIgX2FsbF8gY3J0YyBsb2NrcywgaW5jbHVkaW5nIHRoZSBvbmUKPiA+ICsJwqAq IHdlIGN1cnJlbnRseSBob2xkLgo+ID4gwqAJwqAqLwo+ID4gLQlpZiAoc3RhdGUpIHsKPiA+IC0J CS8qCj4gPiAtCQnCoCogSWYgdGhlIHN0YXRlIGRvZXNuJ3QgY2hhbmdlIHRoZSBhY3RpdmUgQ1JU QydzLCB0aGVuCj4gPiB0aGVyZSdzCj4gPiAtCQnCoCogbm8gbmVlZCB0byByZWNhbGN1bGF0ZTsg dGhlIGV4aXN0aW5nIHBpcGUgYWxsb2NhdGlvbgo+ID4gbGltaXRzCj4gPiAtCQnCoCogc2hvdWxk IHJlbWFpbiB1bmNoYW5nZWQuwqDCoE5vdGUgdGhhdCB3ZSdyZSBzYWZlIGZyb20KPiA+IHJhY2lu Zwo+ID4gLQkJwqAqIGNvbW1pdHMgc2luY2UgYW55IHJhY2luZyBjb21taXQgdGhhdCBjaGFuZ2Vz IHRoZSBhY3RpdmUKPiA+IENSVEMKPiA+IC0JCcKgKiBsaXN0IHdvdWxkIG5lZWQgdG8gZ3JhYiBf YWxsXyBjcnRjIGxvY2tzLCBpbmNsdWRpbmcgdGhlCj4gPiBvbmUKPiA+IC0JCcKgKiB3ZSBjdXJy ZW50bHkgaG9sZC4KPiA+IC0JCcKgKi8KPiA+IC0JCWlmICghaW50ZWxfc3RhdGUtPmFjdGl2ZV9w aXBlX2NoYW5nZXMpIHsKPiA+IC0JCQkqYWxsb2MgPSBkZXZfcHJpdi0+d20uc2tsX2h3LmRkYi5w aXBlW3BpcGVdOwo+ID4gLQkJCXJldHVybjsKPiA+IC0JCX0KPiA+IC0KPiA+IC0JCW50aF9hY3Rp dmVfcGlwZSA9IGh3ZWlnaHQzMihpbnRlbF9zdGF0ZS0+YWN0aXZlX2NydGNzICYKPiA+IC0JCQkJ CcKgwqDCoMKgKGRybV9jcnRjX21hc2soZm9yX2NydGMpIC0gMSkpOwo+ID4gLQkJcGlwZV9zaXpl ID0gZGRiX3NpemUgLyBod2VpZ2h0MzIoaW50ZWxfc3RhdGUtCj4gPiA+YWN0aXZlX2NydGNzKTsK PiA+IC0JCWFsbG9jLT5zdGFydCA9IG50aF9hY3RpdmVfcGlwZSAqIGRkYl9zaXplIC8gKm51bV9h Y3RpdmU7Cj4gPiAtCQlhbGxvYy0+ZW5kID0gYWxsb2MtPnN0YXJ0ICsgcGlwZV9zaXplOwo+ID4g LQl9IGVsc2Ugewo+ID4gLQkJbnRoX2FjdGl2ZV9waXBlID0gMDsKPiA+IC0JCWZvcl9lYWNoX2Ny dGMoZGV2LCBjcnRjKSB7Cj4gPiAtCQkJaWYgKCF0b19pbnRlbF9jcnRjKGNydGMpLT5hY3RpdmUp Cj4gPiAtCQkJCWNvbnRpbnVlOwo+ID4gLQo+ID4gLQkJCWlmIChjcnRjID09IGZvcl9jcnRjKQo+ ID4gLQkJCQlicmVhazsKPiA+IC0KPiA+IC0JCQludGhfYWN0aXZlX3BpcGUrKzsKPiA+IC0JCX0K PiA+IC0KPiA+IC0JCXBpcGVfc2l6ZSA9IGRkYl9zaXplIC8gY29uZmlnLT5udW1fcGlwZXNfYWN0 aXZlOwo+ID4gLQkJYWxsb2MtPnN0YXJ0ID0gbnRoX2FjdGl2ZV9waXBlICogZGRiX3NpemUgLwo+ ID4gLQkJCWNvbmZpZy0+bnVtX3BpcGVzX2FjdGl2ZTsKPiA+IC0JCWFsbG9jLT5lbmQgPSBhbGxv Yy0+c3RhcnQgKyBwaXBlX3NpemU7Cj4gPiArCWlmICghaW50ZWxfc3RhdGUtPmFjdGl2ZV9waXBl X2NoYW5nZXMpIHsKPiA+ICsJCSphbGxvYyA9IGRldl9wcml2LT53bS5za2xfaHcuZGRiLnBpcGVb cGlwZV07Cj4gU28gSSBmaW5hbGx5IGZpZ3VyZWQgb3V0IHdoYXQncyBjYXVzaW5nIGFsbCBvZiB0 aGUgdmFsaWQgd20gY2FsY3VsYXRpb25zIHRvCj4gZ2V0Cj4gcmVqZWN0ZWQsIGxlYWRpbmcgdG8g Ymxhbmsgc2NyZWVucyBldGMuIGV0Yy4gVGhlIHByb2JsZW0gaXMgdGhpcyBsaW5lIHJpZ2h0Cj4g aGVyZQo+IHdoZXJlIHdlIGFzc2lnbiAqYWxsb2MsIHdlIG5ldmVyIGFjdHVhbGx5IHNldCBkZXZf cHJpdi0KPiA+d20uc2tsX2h3LmRkYi5waXBlW3BpcGVdwqAKPiB0byBhIHZhbHVlIGFueXdoZXJl IHNvIHdlIGVuZCB1cCBoYXZpbmcgYm9ndXMgZGRiIGVudHJ5IHNpemVzLiBJZiB5b3UgY2hhbmdl Cj4gaXQKPiB0byBzb21ldGhpbmcgbGlrZToKPiAKPiAJCSphbGxvYyA9IGRldl9wcml2LT53bS5z a2xfaHcuZGRiLnBsYW5lW3BpcGVdW2ludGVsX2NydGMtPnBsYW5lXTsKV2hvb3BzLCBJIHN0YW5k IGNvcnJlY3RlZCBvbiB0aGlzLCBzaW5jZSB0aGlzIHNlZW1zIHRvIGNhdXNlIGEgZmV3IGlzc3Vl cyB3aXRoClZUIHN3aXRjaGluZy4gV2UgYWN0dWFsbHkgd2FudCBzb21ldGhpbmcgbGlrZSB0aGlz OgoKCQlpZiAoIWludGVsX3N0YXRlLT5hY3RpdmVfcGlwZV9jaGFuZ2VzICYmCgkJwqAgwqAgZGV2 X3ByaXYtPndtLnNrbF9ody5kZGIucGlwZVtwaXBlXS5lbmQgIT0gMCkgewoJCQkqYWxsb2MgPSBk ZXZfcHJpdi0+d20uc2tsX2h3LmRkYi5waXBlW3BpcGVdOwoJCQlyZXR1cm47CgkJfQoKPiAKPiBX ZSBnZXQgdGhlIHJpZ2h0IHZhbHVlcyBhbmQgZXZlcnl0aGluZyBzdGFydHMgd29ya2luZyBhcyBl eHBlY3RlZC4gQlRXOiBUaGluZ3MKPiBzZWVtIHRvIGJlIHByZXR0eSBzdGFibGUgd2l0aCB0aGlz IHBhdGNoc2V0IGFmdGVyIHRoaXMgZml4LCBoYXZlbid0IHRyaWVkIGl0Cj4gb24KPiBhbnkgb3Ro ZXIgcGxhdGZvcm1zIHRoZW4gc2tsIHlldCB0aG91Z2ggc28gSSdsbCBsZXQgeW91IGtub3cgaWYg SSBydW4gaW50byBhbnkKPiBtb3JlIHByb2JsZW1zLgo+IAo+ID4gCj4gPiArCQlyZXR1cm47Cj4g PiDCoAl9Cj4gPiArCj4gPiArCW50aF9hY3RpdmVfcGlwZSA9IGh3ZWlnaHQzMihpbnRlbF9zdGF0 ZS0+YWN0aXZlX2NydGNzICYKPiA+ICsJCQkJwqDCoMKgwqAoZHJtX2NydGNfbWFzayhmb3JfY3J0 YykgLSAxKSk7Cj4gPiArCXBpcGVfc2l6ZSA9IGRkYl9zaXplIC8gaHdlaWdodDMyKGludGVsX3N0 YXRlLT5hY3RpdmVfY3J0Y3MpOwo+ID4gKwlhbGxvYy0+c3RhcnQgPSBudGhfYWN0aXZlX3BpcGUg KiBkZGJfc2l6ZSAvICpudW1fYWN0aXZlOwo+ID4gKwlhbGxvYy0+ZW5kID0gYWxsb2MtPnN0YXJ0 ICsgcGlwZV9zaXplOwo+ID4gwqB9Cj4gPiDCoAo+ID4gwqBzdGF0aWMgdW5zaWduZWQgaW50IHNr bF9jdXJzb3JfYWxsb2NhdGlvbihpbnQgbnVtX2FjdGl2ZSkKPiA+IEBAIC0zMDI1LDYyICsyOTk1 LDMzIEBAIHNrbF9nZXRfdG90YWxfcmVsYXRpdmVfZGF0YV9yYXRlKHN0cnVjdAo+ID4gaW50ZWxf Y3J0Y19zdGF0ZSAqaW50ZWxfY3N0YXRlKQo+ID4gwqAJc3RydWN0IGRybV9jcnRjICpjcnRjID0g Y3N0YXRlLT5jcnRjOwo+ID4gwqAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsK PiA+IMKgCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRj KTsKPiA+ICsJY29uc3Qgc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gPiDCoAljb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lOwo+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpwc3RhdGU7Cj4gPiDCoAl1bnNpZ25lZCBpbnQgcmF0ZSwgdG90YWxfZGF0YV9yYXRlID0gMDsK PiA+IMKgCWludCBpZDsKPiA+ICsJaW50IGk7Cj4gPiArCj4gPiArCWlmIChXQVJOX09OKCFzdGF0 ZSkpCj4gPiArCQlyZXR1cm4gMDsKPiA+IMKgCj4gPiDCoAkvKiBDYWxjdWxhdGUgYW5kIGNhY2hl IGRhdGEgcmF0ZSBmb3IgZWFjaCBwbGFuZSAqLwo+ID4gLQkvKgo+ID4gLQnCoCogRklYTUU6IEF0 IHRoZSBtb21lbnQgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG9uIGVpdGhlciBhbgo+ID4g LQnCoCogaW4tZmxpZ2h0IG9yIGEgY29tbWl0dGVkIHN0YXRlIG9iamVjdC7CoMKgSWYgaXQncyBp bi1mbGlnaHQgdGhlbgo+ID4gd2UKPiA+IC0JwqAqIG9ubHkgd2FudCB0byByZS1jYWxjdWxhdGUg dGhlIHBsYW5lIGRhdGEgcmF0ZSBmb3IgcGxhbmVzIHRoYXQKPiA+IGFyZQo+ID4gLQnCoCogcGFy dCBvZiB0aGUgdHJhbnNhY3Rpb24gKGkuZS4sIHdlIGRvbid0IHdhbnQgdG8gZ3JhYiBhbnkKPiA+ IGFkZGl0aW9uYWwKPiA+IC0JwqAqIHBsYW5lIHN0YXRlcyBpZiB3ZSBkb24ndCBoYXZlIHRvKS7C oMKgSWYgd2UncmUgb3BlcmF0aW5nIG9uCj4gPiBjb21taXR0ZWQKPiA+IC0JwqAqIHN0YXRlLCB3 ZSdsbCBqdXN0IGdvIGFoZWFkIGFuZCByZWNhbGN1bGF0ZSB0aGUgcGxhbmUgZGF0YSByYXRlCj4g PiBmb3IKPiA+IC0JwqAqIGFsbCBwbGFuZXMuCj4gPiAtCcKgKgo+ID4gLQnCoCogT25jZSB3ZSBm aW5pc2ggbW92aW5nIG91ciBEREIgYWxsb2NhdGlvbiB0byB0aGUgYXRvbWljIGNoZWNrCj4gPiBw aGFzZSwKPiA+IC0JwqAqIHdlJ2xsIG9ubHkgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG9uIGlu LWZsaWdodCBzdGF0ZSBvYmplY3RzLAo+ID4gc28KPiA+IC0JwqAqIHRoZSAnZWxzZScgYnJhbmNo IGhlcmUgd2lsbCBnbyBhd2F5Lgo+ID4gLQnCoCovCj4gPiAtCWlmIChzdGF0ZSkgewo+ID4gLQkJ c3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpw c3RhdGU7Cj4gPiAtCQlpbnQgaTsKPiA+IC0KPiA+IC0JCWZvcl9lYWNoX3BsYW5lX2luX3N0YXRl KHN0YXRlLCBwbGFuZSwgcHN0YXRlLCBpKSB7Cj4gPiAtCQkJaW50ZWxfcGxhbmUgPSB0b19pbnRl bF9wbGFuZShwbGFuZSk7Cj4gPiAtCQkJaWQgPSBza2xfd21fcGxhbmVfaWQoaW50ZWxfcGxhbmUp Owo+ID4gLQo+ID4gLQkJCWlmIChpbnRlbF9wbGFuZS0+cGlwZSAhPSBpbnRlbF9jcnRjLT5waXBl KQo+ID4gLQkJCQljb250aW51ZTsKPiA+IC0KPiA+IC0JCQkvKiBwYWNrZWQvdXYgKi8KPiA+IC0J CQlyYXRlID0gc2tsX3BsYW5lX3JlbGF0aXZlX2RhdGFfcmF0ZShpbnRlbF9jc3RhdGUsCj4gPiAt CQkJCQkJCcKgwqDCoMKgcHN0YXRlLCAwKTsKPiA+IC0JCQlpbnRlbF9jc3RhdGUtPndtLnNrbC5w bGFuZV9kYXRhX3JhdGVbaWRdID0gcmF0ZTsKPiA+IC0KPiA+IC0JCQkvKiB5LXBsYW5lICovCj4g PiAtCQkJcmF0ZSA9IHNrbF9wbGFuZV9yZWxhdGl2ZV9kYXRhX3JhdGUoaW50ZWxfY3N0YXRlLAo+ ID4gLQkJCQkJCQnCoMKgwqDCoHBzdGF0ZSwgMSk7Cj4gPiAtCQkJaW50ZWxfY3N0YXRlLT53bS5z a2wucGxhbmVfeV9kYXRhX3JhdGVbaWRdID0gcmF0ZTsKPiA+IC0JCX0KPiA+IC0JfSBlbHNlIHsK PiA+IC0JCWZvcl9lYWNoX2ludGVsX3BsYW5lX29uX2NydGMoZGV2LCBpbnRlbF9jcnRjLCBpbnRl bF9wbGFuZSkKPiA+IHsKPiA+IC0JCQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3Rh dGUgPQo+ID4gLQkJCQlpbnRlbF9wbGFuZS0+YmFzZS5zdGF0ZTsKPiA+IC0JCQlpbnQgaWQgPSBz a2xfd21fcGxhbmVfaWQoaW50ZWxfcGxhbmUpOwo+ID4gKwlmb3JfZWFjaF9wbGFuZV9pbl9zdGF0 ZShzdGF0ZSwgcGxhbmUsIHBzdGF0ZSwgaSkgewo+ID4gKwkJaWQgPSBza2xfd21fcGxhbmVfaWQo dG9faW50ZWxfcGxhbmUocGxhbmUpKTsKPiA+ICsJCWludGVsX3BsYW5lID0gdG9faW50ZWxfcGxh bmUocGxhbmUpOwo+ID4gwqAKPiA+IC0JCQkvKiBwYWNrZWQvdXYgKi8KPiA+IC0JCQlyYXRlID0g c2tsX3BsYW5lX3JlbGF0aXZlX2RhdGFfcmF0ZShpbnRlbF9jc3RhdGUsCj4gPiAtCQkJCQkJCcKg wqDCoMKgcHN0YXRlLCAwKTsKPiA+IC0JCQlpbnRlbF9jc3RhdGUtPndtLnNrbC5wbGFuZV9kYXRh X3JhdGVbaWRdID0gcmF0ZTsKPiA+ICsJCWlmIChpbnRlbF9wbGFuZS0+cGlwZSAhPSBpbnRlbF9j cnRjLT5waXBlKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gwqAKPiA+IC0JCQkvKiB5LXBsYW5lICov Cj4gPiAtCQkJcmF0ZSA9IHNrbF9wbGFuZV9yZWxhdGl2ZV9kYXRhX3JhdGUoaW50ZWxfY3N0YXRl LAo+ID4gLQkJCQkJCQnCoMKgwqDCoHBzdGF0ZSwgMSk7Cj4gPiAtCQkJaW50ZWxfY3N0YXRlLT53 bS5za2wucGxhbmVfeV9kYXRhX3JhdGVbaWRdID0gcmF0ZTsKPiA+IC0JCX0KPiA+ICsJCS8qIHBh Y2tlZC91diAqLwo+ID4gKwkJcmF0ZSA9IHNrbF9wbGFuZV9yZWxhdGl2ZV9kYXRhX3JhdGUoaW50 ZWxfY3N0YXRlLAo+ID4gKwkJCQkJCcKgwqDCoMKgcHN0YXRlLCAwKTsKPiA+ICsJCWludGVsX2Nz dGF0ZS0+d20uc2tsLnBsYW5lX2RhdGFfcmF0ZVtpZF0gPSByYXRlOwo+ID4gKwo+ID4gKwkJLyog eS1wbGFuZSAqLwo+ID4gKwkJcmF0ZSA9IHNrbF9wbGFuZV9yZWxhdGl2ZV9kYXRhX3JhdGUoaW50 ZWxfY3N0YXRlLAo+ID4gKwkJCQkJCcKgwqDCoMKgcHN0YXRlLCAxKTsKPiA+ICsJCWludGVsX2Nz dGF0ZS0+d20uc2tsLnBsYW5lX3lfZGF0YV9yYXRlW2lkXSA9IHJhdGU7Cj4gPiDCoAl9Cj4gPiDC oAo+ID4gwqAJLyogQ2FsY3VsYXRlIENSVEMncyB0b3RhbCBkYXRhIHJhdGUgZnJvbSBjYWNoZWQg dmFsdWVzICovCj4gPiBAQCAtMzEwNCw4ICszMDQ1LDYgQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRi KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gPiDCoAlzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUgPSBjc3RhdGUtPmJhc2Uuc3RhdGU7Cj4gPiDCoAlzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMgPSBjc3RhdGUtPmJhc2UuY3J0YzsKPiA+IMKgCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5kZXY7Cj4gPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZGV2KTsKPiA+IC0Jc3RydWN0IGludGVsX3dtX2NvbmZpZyAqY29uZmlnID0gJmRl dl9wcml2LT53bS5jb25maWc7Cj4gPiDCoAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9 IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gPiDCoAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3Bs YW5lOwo+ID4gwqAJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gPiBAQCAtMzExOSw2ICszMDU4 LDkgQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3Rh dGUsCj4gPiDCoAlpbnQgbnVtX2FjdGl2ZTsKPiA+IMKgCWludCBpZCwgaTsKPiA+IMKgCj4gPiAr CWlmIChXQVJOX09OKCFzdGF0ZSkpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+IMKgCWlmICgh Y3N0YXRlLT5iYXNlLmFjdGl2ZSkgewo+ID4gwqAJCWRkYi0+cGlwZVtwaXBlXS5zdGFydCA9IGRk Yi0+cGlwZVtwaXBlXS5lbmQgPSAwOwo+ID4gwqAJCW1lbXNldChkZGItPnBsYW5lW3BpcGVdLCAw LCBzaXplb2YoZGRiLT5wbGFuZVtwaXBlXSkpOwo+ID4gQEAgLTMxMjYsOCArMzA2OCw3IEBAIHNr bF9hbGxvY2F0ZV9waXBlX2RkYihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4g wqAJCXJldHVybiAwOwo+ID4gwqAJfQo+ID4gwqAKPiA+IC0Jc2tsX2RkYl9nZXRfcGlwZV9hbGxv Y2F0aW9uX2xpbWl0cyhkZXYsIGNzdGF0ZSwgY29uZmlnLCBhbGxvYywKPiA+IC0JCQkJCcKgwqDC oCZudW1fYWN0aXZlKTsKPiA+ICsJc2tsX2RkYl9nZXRfcGlwZV9hbGxvY2F0aW9uX2xpbWl0cyhk ZXYsIGNzdGF0ZSwgYWxsb2MsCj4gPiAmbnVtX2FjdGl2ZSk7Cj4gPiDCoAlhbGxvY19zaXplID0g c2tsX2RkYl9lbnRyeV9zaXplKGFsbG9jKTsKPiA+IMKgCWlmIChhbGxvY19zaXplID09IDApIHsK PiA+IMKgCQltZW1zZXQoZGRiLT5wbGFuZVtwaXBlXSwgMCwgc2l6ZW9mKGRkYi0+cGxhbmVbcGlw ZV0pKTsKPiA+IEBAIC0zMTM5LDUzICszMDgwLDMxIEBAIHNrbF9hbGxvY2F0ZV9waXBlX2RkYihz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ID4gKmNzdGF0ZSwKPiA+IMKgCWRkYi0+cGxhbmVbcGlw ZV1bUExBTkVfQ1VSU09SXS5lbmQgPSBhbGxvYy0+ZW5kOwo+ID4gwqAKPiA+IMKgCWFsbG9jX3Np emUgLT0gY3Vyc29yX2Jsb2NrczsKPiA+IC0JYWxsb2MtPmVuZCAtPSBjdXJzb3JfYmxvY2tzOwo+ ID4gwqAKPiA+IMKgCS8qIDEuIEFsbG9jYXRlIHRoZSBtaW5pbnVtIHJlcXVpcmVkIGJsb2NrcyBm b3IgZWFjaCBhY3RpdmUgcGxhbmUgKi8KPiA+IC0JLyoKPiA+IC0JwqAqIFRPRE86IFJlbW92ZSBz dXBwb3J0IGZvciBhbHJlYWR5LWNvbW1pdHRlZCBzdGF0ZSBvbmNlIHdlCj4gPiAtCcKgKiBvbmx5 IGFsbG9jYXRlIEREQiBvbiBpbi1mbGlnaHQgc3RhdGVzLgo+ID4gLQnCoCovCj4gPiAtCWlmIChz dGF0ZSkgewo+ID4gLQkJZm9yX2VhY2hfcGxhbmVfaW5fc3RhdGUoc3RhdGUsIHBsYW5lLCBwc3Rh dGUsIGkpIHsKPiA+IC0JCQlpbnRlbF9wbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lKTsKPiA+ IC0JCQlpZCA9IHNrbF93bV9wbGFuZV9pZChpbnRlbF9wbGFuZSk7Cj4gPiAtCj4gPiAtCQkJaWYg KGludGVsX3BsYW5lLT5waXBlICE9IHBpcGUpCj4gPiAtCQkJCWNvbnRpbnVlOwo+ID4gLQo+ID4g LQkJCWlmICghdG9faW50ZWxfcGxhbmVfc3RhdGUocHN0YXRlKS0+dmlzaWJsZSkgewo+ID4gLQkJ CQltaW5pbXVtW2lkXSA9IDA7Cj4gPiAtCQkJCXlfbWluaW11bVtpZF0gPSAwOwo+ID4gLQkJCQlj b250aW51ZTsKPiA+IC0JCQl9Cj4gPiAtCQkJaWYgKHBsYW5lLT50eXBlID09IERSTV9QTEFORV9U WVBFX0NVUlNPUikgewo+ID4gLQkJCQltaW5pbXVtW2lkXSA9IDA7Cj4gPiAtCQkJCXlfbWluaW11 bVtpZF0gPSAwOwo+ID4gLQkJCQljb250aW51ZTsKPiA+IC0JCQl9Cj4gPiAtCj4gPiAtCQkJbWlu aW11bVtpZF0gPSA4Owo+ID4gLQkJCWlmIChwc3RhdGUtPmZiLT5waXhlbF9mb3JtYXQgPT0gRFJN X0ZPUk1BVF9OVjEyKQo+ID4gLQkJCQl5X21pbmltdW1baWRdID0gODsKPiA+IC0JCQllbHNlCj4g PiAtCQkJCXlfbWluaW11bVtpZF0gPSAwOwo+ID4gLQkJfQo+ID4gLQl9IGVsc2Ugewo+ID4gLQkJ Zm9yX2VhY2hfaW50ZWxfcGxhbmVfb25fY3J0YyhkZXYsIGludGVsX2NydGMsIGludGVsX3BsYW5l KQo+ID4gewo+ID4gLQkJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJmludGVsX3BsYW5lLT5i YXNlOwo+ID4gLQkJCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmUtPnN0YXRlLT5m YjsKPiA+IC0JCQlpbnQgaWQgPSBza2xfd21fcGxhbmVfaWQoaW50ZWxfcGxhbmUpOwo+ID4gLQo+ ID4gLQkJCWlmICghdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKS0+dmlzaWJsZSkK PiA+IC0JCQkJY29udGludWU7Cj4gPiArCWZvcl9lYWNoX3BsYW5lX2luX3N0YXRlKHN0YXRlLCBw bGFuZSwgcHN0YXRlLCBpKSB7Cj4gPiArCQlpbnRlbF9wbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBs YW5lKTsKPiA+ICsJCWlkID0gc2tsX3dtX3BsYW5lX2lkKGludGVsX3BsYW5lKTsKPiA+IMKgCj4g PiAtCQkJaWYgKHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikKPiA+IC0JCQkJ Y29udGludWU7Cj4gPiArCQlpZiAoaW50ZWxfcGxhbmUtPnBpcGUgIT0gcGlwZSkKPiA+ICsJCQlj b250aW51ZTsKPiA+IMKgCj4gPiAtCQkJbWluaW11bVtpZF0gPSA4Owo+ID4gLQkJCXlfbWluaW11 bVtpZF0gPSAoZmItPnBpeGVsX2Zvcm1hdCA9PQo+ID4gRFJNX0ZPUk1BVF9OVjEyKQo+ID4gPyA4 IDogMDsKPiA+ICsJCWlmICghdG9faW50ZWxfcGxhbmVfc3RhdGUocHN0YXRlKS0+dmlzaWJsZSkg ewo+ID4gKwkJCW1pbmltdW1baWRdID0gMDsKPiA+ICsJCQl5X21pbmltdW1baWRdID0gMDsKPiA+ ICsJCQljb250aW51ZTsKPiA+ICsJCX0KPiA+ICsJCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExB TkVfVFlQRV9DVVJTT1IpIHsKPiA+ICsJCQltaW5pbXVtW2lkXSA9IDA7Cj4gPiArCQkJeV9taW5p bXVtW2lkXSA9IDA7Cj4gPiArCQkJY29udGludWU7Cj4gPiDCoAkJfQo+ID4gKwo+ID4gKwkJbWlu aW11bVtpZF0gPSA4Owo+ID4gKwkJaWYgKHBzdGF0ZS0+ZmItPnBpeGVsX2Zvcm1hdCA9PSBEUk1f Rk9STUFUX05WMTIpCj4gPiArCQkJeV9taW5pbXVtW2lkXSA9IDg7Cj4gPiArCQllbHNlCj4gPiAr CQkJeV9taW5pbXVtW2lkXSA9IDA7Cj4gPiDCoAl9Cj4gPiDCoAo+ID4gwqAJZm9yIChpID0gMDsg aSA8IFBMQU5FX0NVUlNPUjsgaSsrKSB7Cj4gPiBAQCAtMzczNiw3ICszNjU1LDYgQEAgc3RhdGlj IGJvb2wgc2tsX3VwZGF0ZV9waXBlX3dtKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+IMKgCXN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiA+IMKg CXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNy dGMtPnN0YXRlKTsKPiA+IMKgCj4gPiAtCVdBUk5fT04oc2tsX2FsbG9jYXRlX3BpcGVfZGRiKGNz dGF0ZSwgZGRiKSAhPSAwKTsKPiA+IMKgCXNrbF9idWlsZF9waXBlX3dtKGNzdGF0ZSwgZGRiLCBw aXBlX3dtKTsKPiA+IMKgCj4gPiDCoAlpZiAoIW1lbWNtcCgmaW50ZWxfY3J0Yy0+d20uYWN0aXZl LnNrbCwgcGlwZV93bSwgc2l6ZW9mKCpwaXBlX3dtKSkpCj4gPiBAQCAtMzgwMCwxNiArMzcxOCw2 IEBAIHN0YXRpYyB2b2lkIHNrbF9jbGVhcl93bShzdHJ1Y3Qgc2tsX3dtX3ZhbHVlcwo+ID4gKndh dGVybWFya3MsIGVudW0gcGlwZSBwaXBlKQo+ID4gwqAJbWVtc2V0KHdhdGVybWFya3MtPnBsYW5l X3RyYW5zW3BpcGVdLAo+ID4gwqAJwqDCoMKgwqDCoMKgwqAwLCBzaXplb2YodWludDMyX3QpICog STkxNV9NQVhfUExBTkVTKTsKPiA+IMKgCXdhdGVybWFya3MtPnBsYW5lX3RyYW5zW3BpcGVdW1BM QU5FX0NVUlNPUl0gPSAwOwo+ID4gLQo+ID4gLQkvKiBDbGVhciBkZGIgZW50cmllcyBmb3IgcGlw ZSAqLwo+ID4gLQltZW1zZXQoJndhdGVybWFya3MtPmRkYi5waXBlW3BpcGVdLCAwLCBzaXplb2Yo c3RydWN0Cj4gPiBza2xfZGRiX2VudHJ5KSk7Cj4gPiAtCW1lbXNldCgmd2F0ZXJtYXJrcy0+ZGRi LnBsYW5lW3BpcGVdLCAwLAo+ID4gLQnCoMKgwqDCoMKgwqDCoHNpemVvZihzdHJ1Y3Qgc2tsX2Rk Yl9lbnRyeSkgKiBJOTE1X01BWF9QTEFORVMpOwo+ID4gLQltZW1zZXQoJndhdGVybWFya3MtPmRk Yi55X3BsYW5lW3BpcGVdLCAwLAo+ID4gLQnCoMKgwqDCoMKgwqDCoHNpemVvZihzdHJ1Y3Qgc2ts X2RkYl9lbnRyeSkgKiBJOTE1X01BWF9QTEFORVMpOwo+ID4gLQltZW1zZXQoJndhdGVybWFya3Mt PmRkYi5wbGFuZVtwaXBlXVtQTEFORV9DVVJTT1JdLCAwLAo+ID4gLQnCoMKgwqDCoMKgwqDCoHNp emVvZihzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSkpOwo+ID4gLQo+ID4gwqB9Cj4gPiDCoAo+ID4gwqBz dGF0aWMgaW50Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=