From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: Re: [PATCH] drm/xen-front: Make shmem backed display buffer coherent Date: Thu, 20 Dec 2018 13:24:34 +0200 Message-ID: <18fb3bb8-5682-b156-8299-7ac03463ce23@gmail.com> References: <20181127103252.20994-1-andr2000@gmail.com> <17640791-5306-f7e4-8588-dd39c14e975b@tronnes.org> <96086dbe-8065-2d0d-e5f6-4932ffbf956e@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6C3006E345 for ; Thu, 20 Dec 2018 11:24:38 +0000 (UTC) Received: by mail-lj1-x242.google.com with SMTP id t9-v6so1199084ljh.6 for ; Thu, 20 Dec 2018 03:24:38 -0800 (PST) In-Reply-To: <96086dbe-8065-2d0d-e5f6-4932ffbf956e@tronnes.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= , "Oleksandr_Andrushchenko@epam.com" , xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, daniel.vetter@intel.com, jgross@suse.com, boris.ostrovsky@oracle.com Cc: Gerd Hoffmann List-Id: dri-devel@lists.freedesktop.org T24gMTIvMTkvMTggNjoxNCBQTSwgTm9yYWxmIFRyw7hubmVzIHdyb3RlOgo+Cj4gRGVuIDE5LjEy LjIwMTggMDkuMTgsIHNrcmV2IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvOgo+PiBPbiAxMi8xOC8x OCA5OjIwIFBNLCBOb3JhbGYgVHLDuG5uZXMgd3JvdGU6Cj4+Pgo+Pj4gRGVuIDI3LjExLjIwMTgg MTEuMzIsIHNrcmV2IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvOgo+Pj4+IEZyb206IE9sZWtzYW5k ciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPj4+Pgo+ Pj4+IFdoZW4gR0VNIGJhY2tpbmcgc3RvcmFnZSBpcyBhbGxvY2F0ZWQgd2l0aCBkcm1fZ2VtX2dl dF9wYWdlcwo+Pj4+IHRoZSBiYWNraW5nIHBhZ2VzIG1heSBiZSBjYWNoZWQsIHRodXMgbWFraW5n IGl0IHBvc3NpYmxlIHRoYXQKPj4+PiB0aGUgYmFja2VuZCBzZWVzIG9ubHkgcGFydGlhbCBjb250 ZW50IG9mIHRoZSBidWZmZXIgd2hpY2ggbWF5Cj4+Pj4gbGVhZCB0byBzY3JlZW4gYXJ0aWZhY3Rz LiBNYWtlIHN1cmUgdGhhdCB0aGUgZnJvbnRlbmQncwo+Pj4+IG1lbW9yeSBpcyBjb2hlcmVudCBh bmQgdGhlIGJhY2tlbmQgYWx3YXlzIHNlZXMgY29ycmVjdCBkaXNwbGF5Cj4+Pj4gYnVmZmVyIGNv bnRlbnQuCj4+Pj4KPj4+PiBGaXhlczogYzU3NWI3ZWViODlmICgiZHJtL3hlbi1mcm9udDogQWRk IHN1cHBvcnQgZm9yIFhlbiBQViBkaXNwbGF5IAo+Pj4+IGZyb250ZW5kIikKPj4+Pgo+Pj4+IFNp Z25lZC1vZmYtYnk6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIAo+Pj4+IDxvbGVrc2FuZHJfYW5k cnVzaGNoZW5rb0BlcGFtLmNvbT4KPj4+PiAtLS0KPj4+PiDCoCBkcml2ZXJzL2dwdS9kcm0veGVu L3hlbl9kcm1fZnJvbnRfZ2VtLmMgfCA2MiAKPj4+PiArKysrKysrKysrKysrKysrKysrLS0tLS0t Cj4+Pj4gwqAgMSBmaWxlIGNoYW5nZWQsIDQ4IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygt KQo+Pj4+Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9u dF9nZW0uYyAKPj4+PiBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYwo+ Pj4+IGluZGV4IDQ3ZmYwMTlkM2FlZi4uYzU5MjczNWU0OWQyIDEwMDY0NAo+Pj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYwo+Pj4+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYwo+Pj4+IEBAIC0zMyw4ICszMywxMSBAQCBz dHJ1Y3QgeGVuX2dlbV9vYmplY3Qgewo+Pj4+IMKgwqDCoMKgwqAgLyogc2V0IGZvciBidWZmZXJz IGFsbG9jYXRlZCBieSB0aGUgYmFja2VuZCAqLwo+Pj4+IMKgwqDCoMKgwqAgYm9vbCBiZV9hbGxv YzsKPj4+PiDCoCAtwqDCoMKgIC8qIHRoaXMgaXMgZm9yIGltcG9ydGVkIFBSSU1FIGJ1ZmZlciAq Lwo+Pj4+IC3CoMKgwqAgc3RydWN0IHNnX3RhYmxlICpzZ3RfaW1wb3J0ZWQ7Cj4+Pj4gK8KgwqDC oCAvKgo+Pj4+ICvCoMKgwqDCoCAqIHRoaXMgaXMgZm9yIGltcG9ydGVkIFBSSU1FIGJ1ZmZlciBv ciB0aGUgb25lIGFsbG9jYXRlZCB2aWEKPj4+PiArwqDCoMKgwqAgKiBkcm1fZ2VtX2dldF9wYWdl cy4KPj4+PiArwqDCoMKgwqAgKi8KPj4+PiArwqDCoMKgIHN0cnVjdCBzZ190YWJsZSAqc2d0Owo+ Pj4+IMKgIH07Cj4+Pj4gwqAgwqAgc3RhdGljIGlubGluZSBzdHJ1Y3QgeGVuX2dlbV9vYmplY3Qg Kgo+Pj4+IEBAIC03NywxMCArODAsMjEgQEAgc3RhdGljIHN0cnVjdCB4ZW5fZ2VtX29iamVjdCAK Pj4+PiAqZ2VtX2NyZWF0ZV9vYmooc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPj4+PiDCoMKgwqDC oMKgIHJldHVybiB4ZW5fb2JqOwo+Pj4+IMKgIH0KPj4+PiDCoCArc3RydWN0IHNnX3RhYmxlICp4 ZW5fZHJtX2Zyb250X2dlbV9nZXRfc2dfdGFibGUoc3RydWN0IAo+Pj4+IGRybV9nZW1fb2JqZWN0 ICpnZW1fb2JqKQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgKnhl bl9vYmogPSB0b194ZW5fZ2VtX29iaihnZW1fb2JqKTsKPj4+PiArCj4+Pj4gK8KgwqDCoCBpZiAo IXhlbl9vYmotPnBhZ2VzKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsKPj4+PiArCj4+Pj4gK8KgwqDCoCByZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKHhl bl9vYmotPnBhZ2VzLCB4ZW5fb2JqLT5udW1fcGFnZXMpOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+IMKg IHN0YXRpYyBzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgKmdlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgCj4+Pj4gc2l6ZV90IHNpemUpCj4+Pj4gwqAgewo+Pj4+IMKgwqDCoMKgwqAgc3Ry dWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gZGV2LT5kZXZfcHJpdmF0ZTsK Pj4+PiDCoMKgwqDCoMKgIHN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29iajsKPj4+PiArwqDC oMKgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwo+Pj4+IMKgwqDCoMKgwqAgaW50IHJl dDsKPj4+PiDCoCDCoMKgwqDCoMKgIHNpemUgPSByb3VuZF91cChzaXplLCBQQUdFX1NJWkUpOwo+ Pj4+IEBAIC0xMTMsMTAgKzEyNywxNCBAQCBzdGF0aWMgc3RydWN0IHhlbl9nZW1fb2JqZWN0IAo+ Pj4+ICpnZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCBzaXplKQo+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCB4ZW5fb2JqLT5iZV9hbGxvYyA9IHRydWU7Cj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiB4ZW5fb2JqOwo+Pj4+IMKgwqDCoMKgwqAgfQo+Pj4+ICsKPj4+ PiDCoMKgwqDCoMKgIC8qCj4+Pj4gwqDCoMKgwqDCoMKgICogbmVlZCB0byBhbGxvY2F0ZSBiYWNr aW5nIHBhZ2VzIG5vdywgc28gd2UgY2FuIHNoYXJlIHRob3NlCj4+Pj4gwqDCoMKgwqDCoMKgICog d2l0aCB0aGUgYmFja2VuZAo+Pj4+IMKgwqDCoMKgwqDCoCAqLwo+Pj4KPj4+Cj4+PiBMZXQncyBz ZWUgaWYgSSB1bmRlcnN0YW5kIHdoYXQgeW91J3JlIGRvaW5nOgo+Pj4KPj4+IEhlcmUgeW91IHNh eSB0aGF0IHRoZSBwYWdlcyBzaG91bGQgYmUgRE1BIGFjY2Vzc2libGUgZm9yIGRldmljZXMgCj4+ PiB0aGF0IGNhbgo+Pj4gb25seSBzZWUgNEdCLgo+Pgo+PiBZZXMsIHlvdXIgdW5kZXJzdGFuZGlu ZyBpcyBjb3JyZWN0LiBBcyB3ZSBhcmUgYSBwYXJhLXZpcnR1YWxpemVkIAo+PiBkZXZpY2Ugd2UK Pj4KPj4gZG8gbm90IGhhdmUgc3RyaWN0IHJlcXVpcmVtZW50cyBmb3IgMzItYml0IERNQS4gQnV0 LCB2aWEgZG1hLWJ1ZiBleHBvcnQsCj4+Cj4+IHRoZSBidWZmZXIgd2UgY3JlYXRlIGNhbiBiZSB1 c2VkIGJ5IHJlYWwgSFcsIGUuZy4gb25lIGNhbiBwYXNzLXRocm91Z2gKPj4KPj4gcmVhbCBIVyBk ZXZpY2VzIGludG8gYSBndWVzdCBkb21haW4gYW5kIHRoZXkgY2FuIGltcG9ydCBvdXIgYnVmZmVy ICh5ZXMsCj4+Cj4+IHRoZXkgY2FuIGJlIElPTU1VIGJhY2tlZCBhbmQgb3RoZXIgY29uZGl0aW9u cyBtYXkgYXBwbHkpLgo+Pgo+PiBTbywgdGhpcyBpcyB3aHkgd2UgYXJlIGxpbWl0aW5nIHRvIERN QTMyIGhlcmUsIGp1c3QgdG8gYWxsb3cgbW9yZSAKPj4gcG9zc2libGUKPj4KPj4gdXNlLWNhc2Vz Cj4+Cj4+Pgo+Pj4+ICvCoMKgwqAgbWFwcGluZyA9IHhlbl9vYmotPmJhc2UuZmlscC0+Zl9tYXBw aW5nOwo+Pj4+ICvCoMKgwqAgbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgR0ZQX1VTRVIg fCBfX0dGUF9ETUEzMik7Cj4+Pj4gKwo+Pj4+IMKgwqDCoMKgwqAgeGVuX29iai0+bnVtX3BhZ2Vz ID0gRElWX1JPVU5EX1VQKHNpemUsIFBBR0VfU0laRSk7Cj4+Pj4gwqDCoMKgwqDCoCB4ZW5fb2Jq LT5wYWdlcyA9IGRybV9nZW1fZ2V0X3BhZ2VzKCZ4ZW5fb2JqLT5iYXNlKTsKPj4+PiDCoMKgwqDC oMKgIGlmIChJU19FUlJfT1JfTlVMTCh4ZW5fb2JqLT5wYWdlcykpIHsKPj4+PiBAQCAtMTI1LDgg KzE0MywyNyBAQCBzdGF0aWMgc3RydWN0IHhlbl9nZW1fb2JqZWN0IAo+Pj4+ICpnZW1fY3JlYXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCBzaXplKQo+Pj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBnb3RvIGZhaWw7Cj4+Pj4gwqDCoMKgwqDCoCB9Cj4+Pj4gwqAgK8KgwqDCoCB4ZW5fb2Jq LT5zZ3QgPSB4ZW5fZHJtX2Zyb250X2dlbV9nZXRfc2dfdGFibGUoJnhlbl9vYmotPmJhc2UpOwo+ Pj4+ICvCoMKgwqAgaWYgKElTX0VSUl9PUl9OVUxMKHhlbl9vYmotPnNndCkpewo+Pj4+ICvCoMKg wqDCoMKgwqDCoCByZXQgPSBQVFJfRVJSKHhlbl9vYmotPnNndCk7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgIHhlbl9vYmotPnNndCA9IE5VTEw7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbF9w dXRfcGFnZXM7Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgaWYgKCFkbWFfbWFw X3NnKGRldi0+ZGV2LCB4ZW5fb2JqLT5zZ3QtPnNnbCwgeGVuX29iai0+c2d0LT5uZW50cywKPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBETUFfQklESVJFQ1RJT05BTCkpIHsKPj4+Cj4+Pgo+ Pj4gQXJlIHlvdSB1c2luZyB0aGUgRE1BIHN0cmVhbWluZyBBUEkgYXMgYSB3YXkgdG8gZmx1c2gg dGhlIGNhY2hlcz8KPj4gWWVzCj4+PiBEb2VzIHRoaXMgbWVhbiB0aGF0IEdGUF9VU0VSIGlzbid0 IG1ha2luZyB0aGUgYnVmZmVyIGNvaGVyZW50Pwo+Pgo+PiBObywgaXQgZGlkbid0IGhlbHAuIEkg aGFkIGEgcXVlc3Rpb24gWzFdIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgCj4+IGJldHRlciB3YXkK Pj4KPj4gdG8gYWNoaWV2ZSB0aGUgc2FtZSwgYnV0IGRpZG4ndCBoYXZlIGFueSByZXNwb25zZSB5 ZXQuIFNvLCBJIGltcGxlbWVudGVkCj4+Cj4+IGl0IHZpYSBETUEgQVBJIHdoaWNoIGhlbHBlZC4K Pgo+IEFzIEdlcmQgc2F5cyBhc2tpbmcgb24gdGhlIGFybSBsaXN0IGlzIHByb2JhYmx5IHRoZSBi ZXN0IHdheSBvZiBmaW5kaW5nIGEKPiBmdXR1cmUgcHJvb2Ygc29sdXRpb24gYW5kIHVuZGVyc3Rh bmRpbmcgd2hhdCdzIGdvaW5nIG9uLgpZZXMsIGl0IHNlZW1zIHNvCj4KPiBCdXQgaWYgeW91IGRv bid0IGdldCBhbnkgaGVscCB0aGVyZSBhbmQgeW91IGVuZCB1cCB3aXRoIHRoZSBwcmVzZW50Cj4g c29sdXRpb24gSSBzdWdnZXN0IHlvdSBhZGQgYSBjb21tZW50IHRoYXQgdGhpcyBpcyBmb3IgZmx1 c2hpbmcgdGhlIGNhY2hlcwo+IG9uIGFybS4gV2l0aCB0aGUgY3VycmVudCBjb2RlIG9uZSBjYW4g YmUgbGVkIHRvIGJlbGlldmUgdGhhdCB0aGUgZHJpdmVyCj4gdXNlcyB0aGUgZG1hIGFkZHJlc3Mg c29tZXdoZXJlLgpNYWtlcyBzZW5zZQo+Cj4gV2hhdCBhYm91dCB4ODYsIGRvZXMgdGhlIHByb2Js ZW0gZXhpc3QgdGhlcmU/Cj4KWWVzLCBidXQgdGhlcmUgSSBjb3VsZCBkbyBkcm1fY2xmbHVzaF9w YWdlcyB3aGljaCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIEFSTQo+IEkgd29uZGVyIGlmIHlvdSBj YW4gY2FsbCBkbWFfdW5tYXBfc2coKSByaWdodCBhd2F5IHNpbmNlIHRoZSBmbHVzaGluZyBoYXMK PiBhbHJlYWR5IGhhcHBlbmVkLiBUaGF0IHdvdWxkIGNvbnRhaW4gdGhpcyBmbHVzaGluZyAiaGFj ayIgaW5zaWRlIHRoZQo+IGdlbV9jcmVhdGUgZnVuY3Rpb24uClllcywgSSB3YXMgdGhpbmtpbmcg YWJvdXQgdGhpcyAic29sdXRpb24iIGFzIHdlbGwKPgo+IEkgYWxzbyBzdWdnZXN0IGNhbGxpbmcg ZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKCkgZGlyZWN0bHkgdG8gaW5jcmVhc2UKPiByZWFkYWJpbGl0 eSwgc2luY2UgdGhlIGNoZWNrIGluIHhlbl9kcm1fZnJvbnRfZ2VtX2dldF9zZ190YWJsZSgpIGlz bid0Cj4gbmVjZXNzYXJ5IGZvciB0aGlzIHVzZSBjYXNlLgpUaGlzIGNhbiBiZSBkb25lCj4KPgo+ IE5vcmFsZi4KPgo+Cj4+Cj4+Pgo+Pj4gTm9yYWxmLgo+Pj4KPj4+PiArwqDCoMKgwqDCoMKgwqAg cmV0ID0gLUVGQVVMVDsKPj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsX2ZyZWVfc2d0Owo+ Pj4+ICvCoMKgwqAgfQo+Pj4+ICsKPj4+PiDCoMKgwqDCoMKgIHJldHVybiB4ZW5fb2JqOwo+Pj4+ IMKgICtmYWlsX2ZyZWVfc2d0Ogo+Pj4+ICvCoMKgwqAgc2dfZnJlZV90YWJsZSh4ZW5fb2JqLT5z Z3QpOwo+Pj4+ICvCoMKgwqAgeGVuX29iai0+c2d0ID0gTlVMTDsKPj4+PiArZmFpbF9wdXRfcGFn ZXM6Cj4+Pj4gK8KgwqDCoCBkcm1fZ2VtX3B1dF9wYWdlcygmeGVuX29iai0+YmFzZSwgeGVuX29i ai0+cGFnZXMsIHRydWUsIGZhbHNlKTsKPj4+PiArwqDCoMKgIHhlbl9vYmotPnBhZ2VzID0gTlVM TDsKPj4+PiDCoCBmYWlsOgo+Pj4+IMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxs b2NhdGUgYnVmZmVyIHdpdGggc2l6ZSAlenVcbiIsIHNpemUpOwo+Pj4+IMKgwqDCoMKgwqAgcmV0 dXJuIEVSUl9QVFIocmV0KTsKPj4+PiBAQCAtMTQ5LDcgKzE4Niw3IEBAIHZvaWQgCj4+Pj4geGVu X2RybV9mcm9udF9nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpnZW1fb2JqKQo+Pj4+IMKgwqDCoMKgwqAgc3RydWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2Jq ID0gdG9feGVuX2dlbV9vYmooZ2VtX29iaik7Cj4+Pj4gwqAgwqDCoMKgwqDCoCBpZiAoeGVuX29i ai0+YmFzZS5pbXBvcnRfYXR0YWNoKSB7Cj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGRybV9wcmltZV9n ZW1fZGVzdHJveSgmeGVuX29iai0+YmFzZSwgeGVuX29iai0+c2d0X2ltcG9ydGVkKTsKPj4+PiAr wqDCoMKgwqDCoMKgwqAgZHJtX3ByaW1lX2dlbV9kZXN0cm95KCZ4ZW5fb2JqLT5iYXNlLCB4ZW5f b2JqLT5zZ3QpOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnZW1fZnJlZV9wYWdlc19hcnJheSh4 ZW5fb2JqKTsKPj4+PiDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IGlmICh4ZW5fb2JqLT5wYWdlcykgewo+Pj4+IEBAIC0xNTgsNiArMTk1LDEzIEBAIHZvaWQgCj4+ Pj4geGVuX2RybV9mcm9udF9nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpnZW1fb2JqKQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGVuX29iai0+cGFnZXMpOwo+Pj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ2VtX2ZyZWVfcGFnZXNfYXJyYXkoeGVuX29iaik7Cj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmICh4ZW5fb2JqLT5zZ3QpIHsKPj4+PiArIGRtYV91bm1hcF9z Zyh4ZW5fb2JqLT5iYXNlLmRldi0+ZGV2LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZW5fb2JqLT5zZ3QtPnNnbCwKPj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg eGVuX29iai0+c2d0LT5uZW50cywKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRE1BX0JJRElSRUNUSU9OQUwpOwo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZ19mcmVlX3RhYmxlKHhlbl9vYmot PnNndCk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkcm1fZ2VtX3B1dF9wYWdlcygmeGVuX29iai0+ YmFzZSwKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgeGVuX29iai0+cGFnZXMsIHRydWUsIGZhbHNlKTsKPj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB9Cj4+Pj4gQEAgLTE3NCwxNiArMjE4LDYgQEAgc3RydWN0IHBhZ2UgCj4+ Pj4gKip4ZW5fZHJtX2Zyb250X2dlbV9nZXRfcGFnZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpn ZW1fb2JqKQo+Pj4+IMKgwqDCoMKgwqAgcmV0dXJuIHhlbl9vYmotPnBhZ2VzOwo+Pj4+IMKgIH0K Pj4+PiDCoCAtc3RydWN0IHNnX3RhYmxlICp4ZW5fZHJtX2Zyb250X2dlbV9nZXRfc2dfdGFibGUo c3RydWN0IAo+Pj4+IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKQo+Pj4+IC17Cj4+Pj4gLcKgwqDC oCBzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgKnhlbl9vYmogPSB0b194ZW5fZ2VtX29iaihnZW1fb2Jq KTsKPj4+PiAtCj4+Pj4gLcKgwqDCoCBpZiAoIXhlbl9vYmotPnBhZ2VzKQo+Pj4+IC3CoMKgwqDC oMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4+PiAtCj4+Pj4gLcKgwqDCoCByZXR1 cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKHhlbl9vYmotPnBhZ2VzLCB4ZW5fb2JqLT5udW1fcGFn ZXMpOwo+Pj4+IC19Cj4+Pj4gLQo+Pj4+IMKgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqCj4+Pj4g wqAgeGVuX2RybV9mcm9udF9nZW1faW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRt YV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+Pj4+IEBAIC0yMDMsNyArMjM3LDcgQEAgeGVuX2Ry bV9mcm9udF9nZW1faW1wb3J0X3NnX3RhYmxlKHN0cnVjdCAKPj4+PiBkcm1fZGV2aWNlICpkZXYs Cj4+Pj4gwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIEVSUl9QVFIocmV0KTsKPj4+PiDCoCAtwqDCoMKgIHhlbl9vYmotPnNndF9pbXBvcnRlZCA9 IHNndDsKPj4+PiArwqDCoMKgIHhlbl9vYmotPnNndCA9IHNndDsKPj4+PiDCoCDCoMKgwqDCoMKg IHJldCA9IGRybV9wcmltZV9zZ190b19wYWdlX2FkZHJfYXJyYXlzKHNndCwgeGVuX29iai0+cGFn ZXMsCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgTlVMTCwgeGVuX29iai0+bnVtX3BhZ2VzKTsKPj4+IF9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+PiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0 Cj4+PiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+PiBodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo+Pgo+PiBUaGFuayB5b3Us Cj4+Cj4+IE9sZWtzYW5kcgo+Pgo+PiBbMV0gCj4+IGh0dHBzOi8vd3d3Lm1haWwtYXJjaGl2ZS5j b20veGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnL21zZzMxNzQ1Lmh0bWwKPj4KVGhhbmsg eW91LApPbGVrc2FuZHIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg==