From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2DB236EA9D for ; Wed, 28 Feb 2018 17:12:48 +0000 (UTC) Date: Wed, 28 Feb 2018 19:12:44 +0200 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Message-ID: <20180228171244.GO5453@intel.com> References: <20180227215040.11297-1-chris@chris-wilson.co.uk> <20180228090016.4589-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180228090016.4589-1-chris@chris-wilson.co.uk> Subject: Re: [igt-dev] [PATCH igt v6] lib: Provide an accelerated routine for readback from WC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Chris Wilson Cc: igt-dev@lists.freedesktop.org List-ID: T24gV2VkLCBGZWIgMjgsIDIwMTggYXQgMDk6MDA6MTZBTSArMDAwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IFJlYWRpbmcgZnJvbSBXQyBpcyBhd2Z1bGx5IHNsb3cgYXMgZWFjaCBhY2Nlc3MgaXMg dW5jYWNoZWQgYW5kIHNvCj4gcGVyZm9ybWVkIHN5bmNocm9ub3VzbHksIHN0YWxsaW5nIGZvciB0 aGUgbWVtb3J5IGxvYWQuIHg4NiBkaWQgaW50cm9kdWNlCj4gc29tZSBuZXcgaW5zdHJ1Y3Rpb25z IGluIFNTRSA0LjEgdG8gcHJvdmlkZSBhIHNtYWxsIGludGVybmFsIGJ1ZmZlciB0bwo+IGFjY2Vs ZXJhdGUgcmVhZGluZyBiYWNrIGEgY2FjaGVsaW5lIGF0IGEgdGltZSBmcm9tIHVuY2FjaGVkIG1l bW9yeSwgZm9yCj4gdGhpcyBwdXJwb3NlLgo+IAo+IHYyOiBEb24ndCBiZSBsYXp5IGFuZCBoYW5k bGUgbWlzYWxpZ25tZW50Lgo+IHYzOiBTd2l0Y2ggb3V0IG9mIHNzZTQxIGJlZm9yZSBlbWl0dGlu ZyB0aGUgZ2VuZXJpYyBtZW1jcHkgcm91dGluZQo+IHY0OiBSZXBsYWNlIG9wZW5jb2RlZCBtZW1j cHlfZnJvbV93Ywo+IHY1OiBBbHdheXMgZmx1c2ggdGhlIGludGVybmFsIGJ1ZmZlciBiZWZvcmUg dXNlIChFcmljKQo+IHY2OiBBc3N1bWUgYnVsayBtb3Zlcywgc28gY2hlY2sgZm9yIGRzdCBhbGln bm1lbnQuCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxz b24uY28udWs+Cj4gQ2M6IEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Cj4gLS0tCj4gIGxp Yi9pZ3RfZmIuYyAgICAgICAgICAgICAgICAgICB8ICAgMyArLQo+ICBsaWIvaWd0X3g4Ni5jICAg ICAgICAgICAgICAgICAgfCAxMjQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiAgbGliL2lndF94ODYuaCAgICAgICAgICAgICAgICAgIHwgICAyICsKPiAgdGVzdHMv Z2VtX2ZlbmNlX3RocmFzaC5jICAgICAgIHwgIDYzICstLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICB0 ZXN0cy9nZW1fbW1hcF9ndHQuYyAgICAgICAgICAgfCAgMzcgKy0tLS0tLS0tLS0tCj4gIHRlc3Rz L2dlbV90aWxlZF9wcmVhZF9wd3JpdGUuYyB8ICAzNyArLS0tLS0tLS0tLS0KPiAgNiBmaWxlcyBj aGFuZ2VkLCAxMzIgaW5zZXJ0aW9ucygrKSwgMTM0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1n aXQgYS9saWIvaWd0X2ZiLmMgYi9saWIvaWd0X2ZiLmMKPiBpbmRleCBlY2Q3MzA1My4uNzQwNGJh N2MgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9mYi5jCj4gKysrIGIvbGliL2lndF9mYi5jCj4gQEAg LTMyLDYgKzMyLDcgQEAKPiAgI2luY2x1ZGUgImRybXRlc3QuaCIKPiAgI2luY2x1ZGUgImlndF9m Yi5oIgo+ICAjaW5jbHVkZSAiaWd0X2ttcy5oIgo+ICsjaW5jbHVkZSAiaWd0X3g4Ni5oIgo+ICAj aW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKPiAgI2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIK PiAgCj4gQEAgLTEzNDAsNyArMTM0MSw3IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRfbnYxMl90b19y Z2IyNChzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvCj4gIAkg KiBpdCdzIGZhc3RlciB0byBjb3B5IHRoZSB3aG9sZSBCTyB0byBhIHRlbXBvcmFyeSBidWZmZXIg YW5kIGNvbnZlcnQKPiAgCSAqIGZyb20gdGhlcmUuCj4gIAkgKi8KPiAtCW1lbWNweShidWYsIGJs aXQtPmxpbmVhci5tYXAsIGJsaXQtPmxpbmVhci5zaXplKTsKPiArCWlndF9tZW1jcHlfZnJvbV93 YyhidWYsIGJsaXQtPmxpbmVhci5tYXAsIGJsaXQtPmxpbmVhci5zaXplKTsKPiAgCXkgPSAmYnVm W2JsaXQtPmxpbmVhci5vZmZzZXRzWzBdXTsKPiAgCXV2ID0gJmJ1ZltibGl0LT5saW5lYXIub2Zm c2V0c1sxXV07Cj4gIAo+IGRpZmYgLS1naXQgYS9saWIvaWd0X3g4Ni5jIGIvbGliL2lndF94ODYu Ywo+IGluZGV4IDBlZDNjNmYxLi41NDUzOTQ1NiAxMDA2NDQKPiAtLS0gYS9saWIvaWd0X3g4Ni5j Cj4gKysrIGIvbGliL2lndF94ODYuYwo+IEBAIC0zNiw3ICszNiwxMCBAQAo+ICAjZW5kaWYKPiAg Cj4gICNpbmNsdWRlICJpZ3RfeDg2LmgiCj4gKwo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gICNp bmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gIAo+ICAvKioKPiAgICog U0VDVElPTjppZ3RfeDg2Cj4gQEAgLTE3NCwzICsxNzcsMTI0IEBAIGNoYXIgKmlndF94ODZfZmVh dHVyZXNfdG9fc3RyaW5nKHVuc2lnbmVkIGZlYXR1cmVzLCBjaGFyICpsaW5lKQo+ICAJcmV0dXJu IHJldDsKPiAgfQo+ICAjZW5kaWYKPiArCj4gKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmICFk ZWZpbmVkKF9fY2xhbmdfXykKPiArI2RlZmluZSBNT1ZOVCA1MTIKCldoYXQncyB0aGlzIE1PVk5U IGRlZmluZT8KCj4gKwo+ICsjcHJhZ21hIEdDQyBwdXNoX29wdGlvbnMKPiArI3ByYWdtYSBHQ0Mg dGFyZ2V0KCJzc2U0LjEiKQo+ICsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XcG9p bnRlci1hcml0aCIKPiArCj4gKyNkZWZpbmUgbWluKHgsIHkpICh7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKPiArCXR5cGVvZih4KSBfbWluMSA9ICh4KTsgICAgICAgICAgICAgICAgICBc Cj4gKwl0eXBlb2YoeSkgX21pbjIgPSAoeSk7ICAgICAgICAgICAgICAgICAgXAo+ICsJKHZvaWQp ICgmX21pbjEgPT0gJl9taW4yKTsgICAgICAgICAgICAgIFwKPiArCV9taW4xIDwgX21pbjIgPyBf bWluMSA6IF9taW4yOwkJXAo+ICt9KQoKaWd0X2F1eC5oIGhhcyB0aGlzIGFscmVhZHkgSSBiZWxp ZXZlLgoKPiArCj4gKyNpbmNsdWRlIDxzbW1pbnRyaW4uaD4KPiArc3RhdGljIHZvaWQgbWVtY3B5 X2Zyb21fd2Nfc3NlNDEodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcg bGVuKQo+ICt7Cj4gKwljaGFyIGJ1ZlsxNl07Cj4gKwo+ICsJLyogRmx1c2ggdGhlIGludGVybmFs IGJ1ZmZlciBvZiBwb3RlbnRpYWwgc3RhbGUgZ2Z4IGRhdGEgKi8KPiArCV9fYnVpbHRpbl9pYTMy X21mZW5jZSgpOwoKSXNuJ3QgdGhlcmUgYSBfbW1fbWZlbmNlKCk/CgpBcGFydCBmcm9tIHRob3Nl IGV2ZXJ5dGhpbmcgbG9va3MgYWxsIHJpZ2h0IHRvIG1lLgpSZXZpZXdlZC1ieTogVmlsbGUgU3ly asOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCj4gKwo+ICsJaWYgKCh1aW50 cHRyX3Qpc3JjICYgMTUpIHsKPiArCQlfX20xMjhpICpTID0gKF9fbTEyOGkgKikoKHVpbnRwdHJf dClzcmMgJiB+MTUpOwo+ICsJCXVuc2lnbmVkIGxvbmcgbWlzYWxpZ24gPSAodWludHB0cl90KXNy YyAmIDE1Owo+ICsJCXVuc2lnbmVkIGxvbmcgY29weSA9IG1pbihsZW4sIDE2IC0gbWlzYWxpZ24p Owo+ICsKPiArCQlfbW1fc3RvcmV1X3NpMTI4KChfX20xMjhpICopYnVmLAo+ICsJCQkJIF9tbV9z dHJlYW1fbG9hZF9zaTEyOChTKSk7Cj4gKwo+ICsJCW1lbWNweShkc3QsIGJ1ZiArIG1pc2FsaWdu LCBjb3B5KTsKPiArCj4gKwkJZHN0ICs9IGNvcHk7Cj4gKwkJc3JjICs9IGNvcHk7Cj4gKwkJbGVu IC09IGNvcHk7Cj4gKwl9Cj4gKwo+ICsJLyogV2UgYXNzdW1lIHdlIGFyZSBkb2luZyBidWxrIHRy YW5zZmVycywgc28gcHJlZmVyIGFsaWduZWQgbW92ZXMgKi8KPiArCWlmICgoKHVpbnRwdHJfdClk c3QgJiAxNSkgPT0gMCkgewo+ICsJCXdoaWxlIChsZW4gPj0gNjQpIHsKPiArCQkJX19tMTI4aSAq UyA9IChfX20xMjhpICopc3JjOwo+ICsJCQlfX20xMjhpICpEID0gKF9fbTEyOGkgKilkc3Q7Cj4g KwkJCV9fbTEyOGkgdG1wWzRdOwo+ICsKPiArCQkJdG1wWzBdID0gX21tX3N0cmVhbV9sb2FkX3Np MTI4KFMgKyAwKTsKPiArCQkJdG1wWzFdID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMgKyAxKTsK PiArCQkJdG1wWzJdID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMgKyAyKTsKPiArCQkJdG1wWzNd ID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMgKyAzKTsKPiArCj4gKwkJCV9tbV9zdG9yZV9zaTEy OChEICsgMCwgdG1wWzBdKTsKPiArCQkJX21tX3N0b3JlX3NpMTI4KEQgKyAxLCB0bXBbMV0pOwo+ ICsJCQlfbW1fc3RvcmVfc2kxMjgoRCArIDIsIHRtcFsyXSk7Cj4gKwkJCV9tbV9zdG9yZV9zaTEy OChEICsgMywgdG1wWzNdKTsKPiArCj4gKwkJCXNyYyArPSA2NDsKPiArCQkJZHN0ICs9IDY0Owo+ ICsJCQlsZW4gLT0gNjQ7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQl3aGlsZSAobGVuID49IDY0 KSB7Cj4gKwkJCV9fbTEyOGkgKlMgPSAoX19tMTI4aSAqKXNyYzsKPiArCQkJX19tMTI4aSAqRCA9 IChfX20xMjhpICopZHN0Owo+ICsJCQlfX20xMjhpIHRtcFs0XTsKPiArCj4gKwkJCXRtcFswXSA9 IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChTICsgMCk7Cj4gKwkJCXRtcFsxXSA9IF9tbV9zdHJlYW1f bG9hZF9zaTEyOChTICsgMSk7Cj4gKwkJCXRtcFsyXSA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChT ICsgMik7Cj4gKwkJCXRtcFszXSA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChTICsgMyk7Cj4gKwo+ ICsJCQlfbW1fc3RvcmV1X3NpMTI4KEQgKyAwLCB0bXBbMF0pOwo+ICsJCQlfbW1fc3RvcmV1X3Np MTI4KEQgKyAxLCB0bXBbMV0pOwo+ICsJCQlfbW1fc3RvcmV1X3NpMTI4KEQgKyAyLCB0bXBbMl0p Owo+ICsJCQlfbW1fc3RvcmV1X3NpMTI4KEQgKyAzLCB0bXBbM10pOwo+ICsKPiArCQkJc3JjICs9 IDY0Owo+ICsJCQlkc3QgKz0gNjQ7Cj4gKwkJCWxlbiAtPSA2NDsKPiArCQl9Cj4gKwl9Cj4gKwo+ ICsJd2hpbGUgKGxlbiA+PSAxNikgewo+ICsJCV9tbV9zdG9yZXVfc2kxMjgoKF9fbTEyOGkgKilk c3QsCj4gKwkJCQkgX21tX3N0cmVhbV9sb2FkX3NpMTI4KChfX20xMjhpICopc3JjKSk7Cj4gKwo+ ICsJCXNyYyArPSAxNjsKPiArCQlkc3QgKz0gMTY7Cj4gKwkJbGVuIC09IDE2Owo+ICsJfQo+ICsK PiArCWlmIChsZW4pIHsKPiArCQlfbW1fc3RvcmV1X3NpMTI4KChfX20xMjhpICopYnVmLAo+ICsJ CQkJIF9tbV9zdHJlYW1fbG9hZF9zaTEyOCgoX19tMTI4aSAqKXNyYykpOwo+ICsJCW1lbWNweShk c3QsIGJ1ZiwgbGVuKTsKPiArCX0KPiArfQo+ICsKPiArI3ByYWdtYSBHQ0MgcG9wX29wdGlvbnMK PiArCj4gK3N0YXRpYyB2b2lkIG1lbWNweV9mcm9tX3djKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAq c3JjLCB1bnNpZ25lZCBsb25nIGxlbikKPiArewo+ICsJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCAoKnJlc29sdmVfbWVtY3B5X2Zyb21fd2Modm9pZCkpKHZv aWQgKiwgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBsb25nKQo+ICt7Cj4gKwlpZiAoaWd0X3g4Nl9m ZWF0dXJlcygpICYgU1NFNF8xKQo+ICsJCXJldHVybiBtZW1jcHlfZnJvbV93Y19zc2U0MTsKPiAr Cj4gKwlyZXR1cm4gbWVtY3B5X2Zyb21fd2M7Cj4gK30KPiArCj4gK3ZvaWQgaWd0X21lbWNweV9m cm9tX3djKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGxlbikKPiAr CV9fYXR0cmlidXRlX18oKGlmdW5jKCJyZXNvbHZlX21lbWNweV9mcm9tX3djIikpKTsKPiArCj4g KyNlbHNlCj4gK3ZvaWQgaWd0X21lbWNweV9mcm9tX3djKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAq c3JjLCB1bnNpZ25lZCBsb25nIGxlbikKPiArewo+ICsJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwo+ ICt9Cj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9saWIvaWd0X3g4Ni5oIGIvbGliL2lndF94ODYu aAo+IGluZGV4IDI3YjdmMGZkLi5kNGY4YzM0MyAxMDA2NDQKPiAtLS0gYS9saWIvaWd0X3g4Ni5o Cj4gKysrIGIvbGliL2lndF94ODYuaAo+IEBAIC01NSw0ICs1NSw2IEBAIHN0YXRpYyBpbmxpbmUg Y2hhciAqaWd0X3g4Nl9mZWF0dXJlc190b19zdHJpbmcodW5zaWduZWQgZmVhdHVyZXMsIGNoYXIg KmxpbmUpCj4gIH0KPiAgI2VuZGlmCj4gIAo+ICt2b2lkIGlndF9tZW1jcHlfZnJvbV93Yyh2b2lk ICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBsZW4pOwo+ICsKPiAgI2VuZGlm IC8qIElHVF9YODZfSCAqLwo+IGRpZmYgLS1naXQgYS90ZXN0cy9nZW1fZmVuY2VfdGhyYXNoLmMg Yi90ZXN0cy9nZW1fZmVuY2VfdGhyYXNoLmMKPiBpbmRleCBjOGZmOTYxZC4uMmQ3ZmIyZmYgMTAw NjQ0Cj4gLS0tIGEvdGVzdHMvZ2VtX2ZlbmNlX3RocmFzaC5jCj4gKysrIGIvdGVzdHMvZ2VtX2Zl bmNlX3RocmFzaC5jCj4gQEAgLTEwNyw3NSArMTA3LDE2IEBAIGJvX2NvcHkgKHZvaWQgKl9hcmcp Cj4gIAlyZXR1cm4gTlVMTDsKPiAgfQo+ICAKPiAtI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYg IWRlZmluZWQoX19jbGFuZ19fKQo+IC0KPiAtI3ByYWdtYSBHQ0MgcHVzaF9vcHRpb25zCj4gLSNw cmFnbWEgR0NDIHRhcmdldCgic3NlNC4xIikKPiAtCj4gLSNpbmNsdWRlIDxzbW1pbnRyaW4uaD4K PiAtCj4gLSNkZWZpbmUgTU9WTlQgNTEyCj4gLQo+IC1fX2F0dHJpYnV0ZV9fKChub2lubGluZSkp Cj4gLXN0YXRpYyB2b2lkIGNvcHlfd2NfcGFnZSh2b2lkICpkc3QsIHZvaWQgKnNyYykKPiAtewo+ IC0JaWYgKGlndF94ODZfZmVhdHVyZXMoKSAmIFNTRTRfMSkgewo+IC0JCV9fbTEyOGkgKlMgPSAo X19tMTI4aSAqKXNyYzsKPiAtCQlfX20xMjhpICpEID0gKF9fbTEyOGkgKilkc3Q7Cj4gLQo+IC0J CWZvciAoaW50IGkgPSAwOyBpIDwgUEFHRV9TSVpFL0NBQ0hFTElORTsgaSsrKSB7Cj4gLQkJCV9f bTEyOGkgdG1wWzRdOwo+IC0KPiAtCQkJdG1wWzBdID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMr Kyk7Cj4gLQkJCXRtcFsxXSA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChTKyspOwo+IC0JCQl0bXBb Ml0gPSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoUysrKTsKPiAtCQkJdG1wWzNdID0gX21tX3N0cmVh bV9sb2FkX3NpMTI4KFMrKyk7Cj4gLQo+IC0JCQlfbW1fc3RvcmVfc2kxMjgoRCsrLCB0bXBbMF0p Owo+IC0JCQlfbW1fc3RvcmVfc2kxMjgoRCsrLCB0bXBbMV0pOwo+IC0JCQlfbW1fc3RvcmVfc2kx MjgoRCsrLCB0bXBbMl0pOwo+IC0JCQlfbW1fc3RvcmVfc2kxMjgoRCsrLCB0bXBbM10pOwo+IC0J CX0KPiAtCX0gZWxzZQo+IC0JCW1lbWNweShkc3QsIHNyYywgUEFHRV9TSVpFKTsKPiAtfQo+IC0K PiAtc3RhdGljIHZvaWQgY29weV93Y19jYWNoZWxpbmUodm9pZCAqZHN0LCB2b2lkICpzcmMpCj4g LXsKPiAtCWlmIChpZ3RfeDg2X2ZlYXR1cmVzKCkgJiBTU0U0XzEpIHsKPiAtCQlfX20xMjhpICpT ID0gKF9fbTEyOGkgKilzcmM7Cj4gLQkJX19tMTI4aSAqRCA9IChfX20xMjhpICopZHN0Owo+IC0J CV9fbTEyOGkgdG1wWzRdOwo+IC0KPiAtCQl0bXBbMF0gPSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgo UysrKTsKPiAtCQl0bXBbMV0gPSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoUysrKTsKPiAtCQl0bXBb Ml0gPSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoUysrKTsKPiAtCQl0bXBbM10gPSBfbW1fc3RyZWFt X2xvYWRfc2kxMjgoUysrKTsKPiAtCj4gLQkJX21tX3N0b3JlX3NpMTI4KEQrKywgdG1wWzBdKTsK PiAtCQlfbW1fc3RvcmVfc2kxMjgoRCsrLCB0bXBbMV0pOwo+IC0JCV9tbV9zdG9yZV9zaTEyOChE KyssIHRtcFsyXSk7Cj4gLQkJX21tX3N0b3JlX3NpMTI4KEQrKywgdG1wWzNdKTsKPiAtCX0gZWxz ZQo+IC0JCW1lbWNweShkc3QsIHNyYywgQ0FDSEVMSU5FKTsKPiAtfQo+IC0KPiAtI3ByYWdtYSBH Q0MgcG9wX29wdGlvbnMKPiAtCj4gLSNlbHNlCj4gLQo+ICBzdGF0aWMgdm9pZCBjb3B5X3djX3Bh Z2Uodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCj4gIHsKPiAtCW1lbWNweShkc3QsIHNyYywg UEFHRV9TSVpFKTsKPiArCWlndF9tZW1jcHlfZnJvbV93Yyhkc3QsIHNyYywgUEFHRV9TSVpFKTsK PiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgY29weV93Y19jYWNoZWxpbmUodm9pZCAqZHN0LCBjb25z dCB2b2lkICpzcmMpCj4gIHsKPiAtCW1lbWNweShkc3QsIHNyYywgQ0FDSEVMSU5FKTsKPiArCWln dF9tZW1jcHlfZnJvbV93Yyhkc3QsIHNyYywgQ0FDSEVMSU5FKTsKPiAgfQo+ICAKPiAtI2VuZGlm Cj4gLQo+ICBzdGF0aWMgdm9pZAo+ICBfYm9fd3JpdGVfdmVyaWZ5KHN0cnVjdCB0ZXN0ICp0KQo+ ICB7Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2dlbV9tbWFwX2d0dC5jIGIvdGVzdHMvZ2VtX21tYXBf Z3R0LmMKPiBpbmRleCAwZjU5ODEyNS4uNmEzMzJiMjUgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvZ2Vt X21tYXBfZ3R0LmMKPiArKysgYi90ZXN0cy9nZW1fbW1hcF9ndHQuYwo+IEBAIC01MjksNDUgKzUy OSwxMCBAQCB0ZXN0X2h1Z2VfYm8oaW50IGZkLCBpbnQgaHVnZSwgaW50IHRpbGluZykKPiAgCW11 bm1hcChsaW5lYXJfcGF0dGVybiwgUEFHRV9TSVpFKTsKPiAgfQo+ICAKPiAtI2lmIGRlZmluZWQo X194ODZfNjRfXykgJiYgIWRlZmluZWQoX19jbGFuZ19fKQo+IC0jZGVmaW5lIE1PVk5UIDUxMgo+ IC0KPiAtI3ByYWdtYSBHQ0MgcHVzaF9vcHRpb25zCj4gLSNwcmFnbWEgR0NDIHRhcmdldCgic3Nl NC4xIikKPiAtCj4gLSNpbmNsdWRlIDxzbW1pbnRyaW4uaD4KPiAtX19hdHRyaWJ1dGVfXygobm9p bmxpbmUpKQo+IC1zdGF0aWMgdm9pZCBjb3B5X3djX3BhZ2Uodm9pZCAqZHN0LCB2b2lkICpzcmMp Cj4gLXsKPiAtCWlmIChpZ3RfeDg2X2ZlYXR1cmVzKCkgJiBTU0U0XzEpIHsKPiAtCQlfX20xMjhp ICpTID0gKF9fbTEyOGkgKilzcmM7Cj4gLQkJX19tMTI4aSAqRCA9IChfX20xMjhpICopZHN0Owo+ IC0KPiAtCQlmb3IgKGludCBpID0gMDsgaSA8IFBBR0VfU0laRS82NDsgaSsrKSB7Cj4gLQkJCV9f bTEyOGkgdG1wWzRdOwo+IC0KPiAtCQkJdG1wWzBdID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMr Kyk7Cj4gLQkJCXRtcFsxXSA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChTKyspOwo+IC0JCQl0bXBb Ml0gPSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoUysrKTsKPiAtCQkJdG1wWzNdID0gX21tX3N0cmVh bV9sb2FkX3NpMTI4KFMrKyk7Cj4gLQo+IC0JCQlfbW1fc3RvcmVfc2kxMjgoRCsrLCB0bXBbMF0p Owo+IC0JCQlfbW1fc3RvcmVfc2kxMjgoRCsrLCB0bXBbMV0pOwo+IC0JCQlfbW1fc3RvcmVfc2kx MjgoRCsrLCB0bXBbMl0pOwo+IC0JCQlfbW1fc3RvcmVfc2kxMjgoRCsrLCB0bXBbM10pOwo+IC0J CX0KPiAtCX0gZWxzZQo+IC0JCW1lbWNweShkc3QsIHNyYywgUEFHRV9TSVpFKTsKPiAtfQo+IC0K PiAtI3ByYWdtYSBHQ0MgcG9wX29wdGlvbnMKPiAtCj4gLSNlbHNlCj4gIHN0YXRpYyB2b2lkIGNv cHlfd2NfcGFnZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKPiAgewo+IC0JbWVtY3B5KGRz dCwgc3JjLCBQQUdFX1NJWkUpOwo+ICsJaWd0X21lbWNweV9mcm9tX3djKGRzdCwgc3JjLCBQQUdF X1NJWkUpOwo+ICB9Cj4gLSNlbmRpZgo+ICAKPiAgc3RhdGljIHVuc2lnbmVkIGludCB0aWxlX3Jv d19zaXplKGludCB0aWxpbmcsIHVuc2lnbmVkIGludCBzdHJpZGUpCj4gIHsKPiBkaWZmIC0tZ2l0 IGEvdGVzdHMvZ2VtX3RpbGVkX3ByZWFkX3B3cml0ZS5jIGIvdGVzdHMvZ2VtX3RpbGVkX3ByZWFk X3B3cml0ZS5jCj4gaW5kZXggN2I1NTc3ZmQuLjMxM2RhYTM4IDEwMDY0NAo+IC0tLSBhL3Rlc3Rz L2dlbV90aWxlZF9wcmVhZF9wd3JpdGUuYwo+ICsrKyBiL3Rlc3RzL2dlbV90aWxlZF9wcmVhZF9w d3JpdGUuYwo+IEBAIC0xMDAsNDUgKzEwMCwxMCBAQCBjcmVhdGVfYm8oaW50IGZkKQo+ICAJcmV0 dXJuIGhhbmRsZTsKPiAgfQo+ICAKPiAtI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgIWRlZmlu ZWQoX19jbGFuZ19fKQo+IC0jZGVmaW5lIE1PVk5UIDUxMgo+IC0KPiAtI3ByYWdtYSBHQ0MgcHVz aF9vcHRpb25zCj4gLSNwcmFnbWEgR0NDIHRhcmdldCgic3NlNC4xIikKPiAtCj4gLSNpbmNsdWRl IDxzbW1pbnRyaW4uaD4KPiAtX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQo+IC1zdGF0aWMgdm9p ZCBjb3B5X3djX3BhZ2Uodm9pZCAqZHN0LCB2b2lkICpzcmMpCj4gLXsKPiAtCWlmIChpZ3RfeDg2 X2ZlYXR1cmVzKCkgJiBTU0U0XzEpIHsKPiAtCQlfX20xMjhpICpTID0gKF9fbTEyOGkgKilzcmM7 Cj4gLQkJX19tMTI4aSAqRCA9IChfX20xMjhpICopZHN0Owo+IC0KPiAtCQlmb3IgKGludCBpID0g MDsgaSA8IFBBR0VfU0laRS82NDsgaSsrKSB7Cj4gLQkJCV9fbTEyOGkgdG1wWzRdOwo+IC0KPiAt CQkJdG1wWzBdID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMrKyk7Cj4gLQkJCXRtcFsxXSA9IF9t bV9zdHJlYW1fbG9hZF9zaTEyOChTKyspOwo+IC0JCQl0bXBbMl0gPSBfbW1fc3RyZWFtX2xvYWRf c2kxMjgoUysrKTsKPiAtCQkJdG1wWzNdID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMrKyk7Cj4g LQo+IC0JCQlfbW1fc3RvcmVfc2kxMjgoRCsrLCB0bXBbMF0pOwo+IC0JCQlfbW1fc3RvcmVfc2kx MjgoRCsrLCB0bXBbMV0pOwo+IC0JCQlfbW1fc3RvcmVfc2kxMjgoRCsrLCB0bXBbMl0pOwo+IC0J CQlfbW1fc3RvcmVfc2kxMjgoRCsrLCB0bXBbM10pOwo+IC0JCX0KPiAtCX0gZWxzZQo+IC0JCW1l bWNweShkc3QsIHNyYywgUEFHRV9TSVpFKTsKPiAtfQo+IC0KPiAtI3ByYWdtYSBHQ0MgcG9wX29w dGlvbnMKPiAtCj4gLSNlbHNlCj4gIHN0YXRpYyB2b2lkIGNvcHlfd2NfcGFnZSh2b2lkICpkc3Qs IGNvbnN0IHZvaWQgKnNyYykKPiAgewo+IC0JbWVtY3B5KGRzdCwgc3JjLCBQQUdFX1NJWkUpOwo+ ICsJaWd0X21lbWNweV9mcm9tX3djKGRzdCwgc3JjLCBQQUdFX1NJWkUpOwo+ICB9Cj4gLSNlbmRp Zgo+ICAKPiAgaWd0X3NpbXBsZV9tYWluCj4gIHsKPiAtLSAKPiAyLjE2LjIKPiAKPiBfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGlndC1kZXYgbWFpbGlu ZyBsaXN0Cj4gaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYKCi0tIApWaWxsZSBTeXJqw6Rs w6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=