From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 1/4] drm/i915: Clearing buffer objects via blitter engine Date: Wed, 01 Jul 2015 15:54:55 +0100 Message-ID: <5593FF3F.9030403@linux.intel.com> References: <1435742747-3782-1-git-send-email-ankitprasad.r.sharma@intel.com> <1435742747-3782-2-git-send-email-ankitprasad.r.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 51E5772126 for ; Wed, 1 Jul 2015 07:54:58 -0700 (PDT) In-Reply-To: <1435742747-3782-2-git-send-email-ankitprasad.r.sharma@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ankitprasad.r.sharma@intel.com, intel-gfx@lists.freedesktop.org Cc: akash.goel@intel.com, shashidhar.hiremath@intel.com List-Id: intel-gfx@lists.freedesktop.org CkhpLAoKT24gMDcvMDEvMjAxNSAxMDoyNSBBTSwgYW5raXRwcmFzYWQuci5zaGFybWFAaW50ZWwu Y29tIHdyb3RlOgo+IEZyb206IEFua2l0cHJhc2FkIFNoYXJtYSA8YW5raXRwcmFzYWQuci5zaGFy bWFAaW50ZWwuY29tPgo+Cj4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNsZWFyaW5nIGJ1 ZmZlciBvYmplY3RzIHZpYSBibGl0dGVyCj4gZW5naW5lcy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkg dXNlZnVsIGZvciBjbGVhcmluZyBvdXQgdGhlIG1lbW9yeQo+IGZyb20gc3RvbGVuIHJlZ2lvbi4K CkJlY2F1c2UgQ1BVIGNhbm5vdCBhY2Nlc3MgaXQ/IEkgd291bGQgcHV0IHRoYXQgaW50byB0aGUg Y29tbWl0IG1lc3NhZ2UgCnNpbmNlIEkgdGhpbmsgY292ZXIgbGV0dGVyIGRvZXMgbm90IGdvIGlu dG8gdGhlIGdpdCBoaXN0b3J5LgoKPiB2MjogQWRkIHN1cHBvcnQgZm9yIHVzaW5nIGV4ZWNsaXN0 cyAmIFBQR1RUCj4KPiB2MzogRml4IGlzc3VlcyBpbiBsZWdhY3kgcmluZ2J1ZmZlciBzdWJtaXNz aW9uIG1vZGUKPgo+IHY0OiBSZWJhc2VkIHRvIHRoZSBsYXRlc3QgZHJtLWludGVsLW5pZ2h0bHkg KEFua2l0KQo+Cj4gdGVzdGNhc2U6IGlndC9nZW1fc3RvbGVuCj4KCk5pdHBpY2s6IHVzdWFsbHkg aXQgaXMgIlRlc3RjYXNlOiIgYW5kIGFsbCB0YWdzIGdyb3VwZWQgdG9nZXRoZXIuCgo+IFNpZ25l ZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXMgYXQgY2hyaXMtd2lsc29uLmNvLnVrPgo+IFNp Z25lZC1vZmYtYnk6IERlZXBhayBTIDxkZWVwYWsucyBhdCBsaW51eC5pbnRlbC5jb20+Cj4gU2ln bmVkLW9mZi1ieTogQW5raXRwcmFzYWQgU2hhcm1hIDxhbmtpdHByYXNhZC5yLnNoYXJtYSBhdCBp bnRlbC5jb20+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAg ICAgfCAgIDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwg ICA0ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWMuYyAgICB8IDIwMSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfbHJjLmMgICAgICAgIHwgICA0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuaCAgICAgICAgfCAgIDMgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmlu Z2J1ZmZlci5jIHwgICAyICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVm ZmVyLmggfCAgIDEgKwo+ICAgNyBmaWxlcyBjaGFuZ2VkLCAyMTMgaW5zZXJ0aW9ucygrKSwgMyBk ZWxldGlvbnMoLSkKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9leGVjLmMKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggZGUyMTk2NS4uMTk1 OTMxNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTI0LDYgKzI0LDcgQEAgaTkxNS15 ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKPiAgIAkgIGk5MTVfZ2VtX2RlYnVnLm8gXAo+ICAgCSAg aTkxNV9nZW1fZG1hYnVmLm8gXAo+ICAgCSAgaTkxNV9nZW1fZXZpY3QubyBcCj4gKwkgIGk5MTVf Z2VtX2V4ZWMubyBcCj4gICAJICBpOTE1X2dlbV9leGVjYnVmZmVyLm8gXAo+ICAgCSAgaTkxNV9n ZW1fZ3R0Lm8gXAo+ICAgCSAgaTkxNV9nZW0ubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4g aW5kZXggZWE5Y2FmMi4uZDFlMTUxZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBA IC0zMDgyLDYgKzMwODIsMTAgQEAgaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9ldmljdF9zb21l dGhpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIGludCBpOTE1X2dlbV9ldmljdF92bShz dHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwgYm9vbCBkb19pZGxlKTsKPiAgIGludCBpOTE1 X2dlbV9ldmljdF9ldmVyeXRoaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+Cj4gKy8qIGk5 MTVfZ2VtX2V4ZWMuYyAqLwo+ICtpbnQgaTkxNV9nZW1fZXhlY19jbGVhcl9vYmplY3Qoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9m aWxlX3ByaXZhdGUgKmZpbGVfcHJpdik7Cj4gKwo+ICAgLyogYmVsb25ncyBpbiBpOTE1X2dlbV9n dHQuaCAqLwo+ICAgc3RhdGljIGlubGluZSB2b2lkIGk5MTVfZ2VtX2NoaXBzZXRfZmx1c2goc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKPiAgIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZXhlYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhl Yy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5hMDdmZGEwCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWMuYwo+ IEBAIC0wLDAgKzEsMjAxIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDEzIEludGVsIENv cnBvcmF0aW9uCgpJcyB0aGUgeWVhciBjb3JyZWN0PwoKPiArICoKPiArICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAq Cj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0 d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks Cj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FS RS4KPiArICoKPiArICogQXV0aG9yczoKPiArICogICAgQ2hyaXMgV2lsc29uIDxjaHJpcyBhdCBj aHJpcy13aWxzb24uY28udWs+CgpBbmQgYXV0aG9yPwoKPiArICoKPiArICovCj4gKwo+ICsjaW5j bHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9pOTE1X2RybS5oPgo+ICsjaW5jbHVk ZSAiaTkxNV9kcnYuaCIKPiArCj4gKyNkZWZpbmUgR0VOOF9DT0xPUl9CTFRfQ01EICgyPDwyOSB8 IDB4NTA8PDIyKQo+ICsKPiArI2RlZmluZSBCUFBfOCAwCj4gKyNkZWZpbmUgQlBQXzE2ICgxPDwy NCkKPiArI2RlZmluZSBCUFBfMzIgKDE8PDI1IHwgMTw8MjQpCj4gKwo+ICsjZGVmaW5lIFJPUF9G SUxMX0NPUFkgKDB4ZjAgPDwgMTYpCj4gKwo+ICtzdGF0aWMgaW50IGk5MTVfZ2VtX2V4ZWNfZmx1 c2hfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCQkgICAgICBz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICsJCQkJICAgICAgc3RydWN0IGludGVsX2Nv bnRleHQgKmN0eCwKPiArCQkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqKnJl cSkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc3luYyhv YmosIHJpbmcsIHJlcSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYg KG9iai0+YmFzZS53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSB7Cj4gKwkJaWYg KGk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaiwgZmFsc2UpKQo+ICsJCQlpOTE1X2dlbV9jaGlw c2V0X2ZsdXNoKG9iai0+YmFzZS5kZXYpOwo+ICsJCW9iai0+YmFzZS53cml0ZV9kb21haW4gJj0g fkk5MTVfR0VNX0RPTUFJTl9DUFU7Cj4gKwl9Cj4gKwlpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFp biAmIEk5MTVfR0VNX0RPTUFJTl9HVFQpIHsKPiArCQl3bWIoKTsKPiArCQlvYmotPmJhc2Uud3Jp dGVfZG9tYWluICY9IH5JOTE1X0dFTV9ET01BSU5fR1RUOwo+ICsJfQoKQWxsIHRoaXMgY291bGQg YmUgcmVwbGFjZWQgd2l0aCBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4sIG5vPwoK PiArCj4gKwlyZXR1cm4gaTkxNS5lbmFibGVfZXhlY2xpc3RzID8KPiArCQkJbG9naWNhbF9yaW5n X2ludmFsaWRhdGVfYWxsX2NhY2hlcygqcmVxKSA6Cj4gKwkJCWludGVsX3JpbmdfaW52YWxpZGF0 ZV9hbGxfY2FjaGVzKCpyZXEpOwoKQW5kIHRoaXMgaXMgZG9uZSBvbiBhY3R1YWwgc3VibWlzc2lv biBmb3IgeW91IGJ5IHRoZSBsb3dlciBsZXZlbHMgc28geW91IApkb24ndCBuZWVkIHRvIGNhbGwg aXQgZGlyZWN0bHkuCgo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpOTE1X2dlbV9leGVjX2RpcnR5 X29iamVjdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkJICAgICAgIHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gKwkJCQkgICAgICAgc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0sCj4gKwkJCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpyZXEpCj4gK3sKPiArCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZvYmotPmxhc3Rfd3JpdGVf cmVxLCByZXEpOwo+ICsJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9S RU5ERVI7Cj4gKwlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRF UjsKPiArCWk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKGk5MTVfZ2VtX29ial90b192bWEob2JqLCB2 bSksIHJlcSk7Cj4gKwlvYmotPmRpcnR5ID0gMTsKPiArCj4gKwlyaW5nLT5ncHVfY2FjaGVzX2Rp cnR5ID0gdHJ1ZTsKPiArfQo+ICsKPiAraW50IGk5MTVfZ2VtX2V4ZWNfY2xlYXJfb2JqZWN0KHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5 MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYpCj4gK3sKCkZ1bmN0aW9uIG5lZWRzIHNvbWUgZ29v ZCBrZXJuZWxkb2MuCgo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl Owo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZzsKPiArCXN0cnVjdCBpbnRlbF9jb250 ZXh0ICpjdHg7Cj4gKwlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZjsKPiArCXN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpyZXE7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXYt PnN0cnVjdF9tdXRleCk7CgpJdCB0aGluayB0aGVyZSB3YXMgc29tZSBndWlkYW5jZSB0aGF0IGxv Y2tkZXBfYXNzZXJ0X2hlbGQgaXMgY29tcGlsZWQgCm91dCB3aGVuIGxvY2tkZXAgaXMgbm90IGlu IHRoZSBrZXJuZWwgYW5kIHRoYXQgV0FSTl9PTiBpcyBwcmVmZXJyZWQuIEluIAp0aGlzIGNhc2Ug dGhhdCB3b3VsZCBwcm9iYWJseSBiZSBXQVJOX09OX09OQ0UgYW5kIHJldHVybiBlcnJvci4KCj4g Kwo+ICsJcmluZyA9ICZkZXZfcHJpdi0+cmluZ1tIQVNfQkxUKGRldikgPyBCQ1MgOiBSQ1NdOwo+ ICsJY3R4ID0gaTkxNV9nZW1fY29udGV4dF9nZXQoZmlsZV9wcml2LCBERUZBVUxUX0NPTlRFWFRf SEFORExFKTsKPiArCS8qIEFsbG9jYXRlIGEgcmVxdWVzdCBmb3IgdGhpcyBvcGVyYXRpb24gbmlj ZSBhbmQgZWFybHkuICovCj4gKwlyZXQgPSBpOTE1X2dlbV9yZXF1ZXN0X2FsbG9jKHJpbmcsIGN0 eCwgJnJlcSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYgKGN0eC0+ cHBndHQpCj4gKwkJdm0gPSAmY3R4LT5wcGd0dC0+YmFzZTsKPiArCWVsc2UKPiArCQl2bSA9ICZk ZXZfcHJpdi0+Z3R0LmJhc2U7Cj4gKwo+ICsJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cyAmJiAh Y3R4LT5lbmdpbmVbcmluZy0+aWRdLnN0YXRlKSB7Cj4gKwkJcmV0ID0gaW50ZWxfbHJfY29udGV4 dF9kZWZlcnJlZF9jcmVhdGUoY3R4LCByaW5nKTsKCmk5MTVfZ2VtX2NvbnRleHRfZ2V0IGFib3Zl IGFuZCB0aGlzIGNhbGwgYXJlIHZlcnkgc2ltaWxhciB0byB3aGF0IAppOTE1X2dlbV92YWxpZGF0 ZV9jb250ZXh0IGRvZXMuIEl0IHNlZW1zIHRvIG1lIGl0IHdvdWxkIGJlIGJldHRlciB0byAKY2Fs bCB0aGUgbGF0dGVyIGZ1bmN0aW9uIGhlcmUuCgo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiBy ZXQ7CgpGYWlsdXJlIHBhdGggKGFuZCBzb21lIGJlbG93KSBsZWFrcyB0aGUgcmVxdWVzdC4gaTkx NV9nZW1fcmVxdWVzdF9jYW5jZWwgCmlzIHRoZSBuZXcgQVBJIHRvIGJlIGNhbGxlZCBJIHVuZGVy c3RhbmQuCgo+ICsJfQo+ICsKPiArCXJpbmdidWYgPSBjdHgtPmVuZ2luZVtyaW5nLT5pZF0ucmlu Z2J1ZjsKPiArCj4gKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgdm0sIFBBR0VfU0la RSwgMCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYgKG9iai0+dGls aW5nX21vZGUgJiYgSU5URUxfSU5GTyhkZXYpLT5nZW4gPD0gMykgewo+ICsJCXJldCA9IGk5MTVf Z2VtX29iamVjdF9wdXRfZmVuY2Uob2JqKTsKPiArCQlpZiAocmV0KQo+ICsJCQlnb3RvIHVucGlu Owo+ICsJfQoKV2h5IGlzIHRoaXMgbmVlZGVkPwoKQ291bGQgaXQgYmUgY2FsbGVkIHVuY29uZGl0 aW9uYWxseSBhbmQgc3RpbGwgd29yaz8KCkF0IGxlYXN0IEkgd291bGQgcmVjb21tZW5kIGEgY29t bWVudCBleHBsYWluaW5nIGl0LgoKPiArCXJldCA9IGk5MTVfZ2VtX2V4ZWNfZmx1c2hfb2JqZWN0 KG9iaiwgcmluZywgY3R4LCAmcmVxKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byB1bnBpbjsKCkFz IEkgc2FpZCBhYm92ZSBvbmUgY2FsbCB0byBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21h aW4gd291bGQgYmUgCmVub3VnaCBJIHRoaW5rLgoKPiArCWlmIChpOTE1LmVuYWJsZV9leGVjbGlz dHMpIHsKPiArCQlpZiAoZGV2X3ByaXYtPmluZm8uZ2VuID49IDgpIHsKPiArCQkJcmV0ID0gaW50 ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHJlcSwgOCk7Cj4gKwkJCWlmIChyZXQpCj4gKwkJCQlnb3Rv IHVucGluOwo+ICsKPiArCQkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgR0VOOF9D T0xPUl9CTFRfQ01EIHwKPiArCQkJCQkJCSBCTFRfV1JJVEVfUkdCQSB8Cj4gKwkJCQkJCQkgKDct MikpOwo+ICsJCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBCUFBfMzIgfAo+ICsJ CQkJCQkJIFJPUF9GSUxMX0NPUFkgfAo+ICsJCQkJCQkJIFBBR0VfU0laRSk7Cj4gKwkJCWludGVs X2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIDApOwo+ICsJCQlpbnRlbF9sb2dpY2FsX3Jpbmdf ZW1pdChyaW5nYnVmLAo+ICsJCQkJCQlvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUCj4gKwkJ CQkJCTw8IDE2IHwgUEFHRV9TSVpFIC8gNCk7Cj4gKwkJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0 KHJpbmdidWYsCj4gKwkJCQkJCWk5MTVfZ2VtX29ial9vZmZzZXQob2JqLCB2bSkpOwo+ICsJCQlp bnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCAwKTsKPiArCQkJaW50ZWxfbG9naWNhbF9y aW5nX2VtaXQocmluZ2J1ZiwgMCk7Cj4gKwkJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdi dWYsIE1JX05PT1ApOwo+ICsKPiArCQkJaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2UocmluZ2J1 Zik7Cj4gKwkJfSBlbHNlIHsKPiArCQkJRFJNX0VSUk9SKCJFeGVjbGlzdHMgbm90IHN1cHBvcnRl ZCBmb3IgZ2VuICVkXG4iLAo+ICsJCQkJICBkZXZfcHJpdi0+aW5mby5nZW4pOwo+ICsJCQlyZXQg PSAtRUlOVkFMOwoKSSB3b3VsZCBwdXQgYSBXQVJOX09OX09OQ0UgaGVyZSwgb3IgZXZlbiBqdXN0 IHJldHVybiAtRUlOVkFMLiBJZiB0aGUgCmRyaXZlciBpcyBzbyBtZXNzZWQgdXAgaW4gZ2VuZXJh bCB0aGF0IGV4ZWNsaXN0cyBhcmUgZW5hYmxlZCA8IGdlbjggSSAKdGhpbmsgdGhlcmUgaXMgbm8g cG9pbnQgbG9nZ2luZyBlcnJvcnMgYWJvdXQgaXQgZnJvbSBoZXJlLiBXb3VsZCBhbHNvIApzYXZl IHlvdSBvbmUgaW5kZW50YXRpb24gbGV2ZWwuCgo+ICsJCQlnb3RvIHVucGluOwo+ICsJCX0KPiAr CX0gZWxzZSB7Cj4gKwkJaWYgKElTX0dFTjgoZGV2KSkgewo+ICsJCQlyZXQgPSBpbnRlbF9yaW5n X2JlZ2luKHJlcSwgOCk7Cj4gKwkJCWlmIChyZXQpCj4gKwkJCQlnb3RvIHVucGluOwo+ICsKPiAr CQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIEdFTjhfQ09MT1JfQkxUX0NNRCB8Cj4gKwkJCQkJICAg ICAgQkxUX1dSSVRFX1JHQkEgfCAoNy0yKSk7Cj4gKwkJCWludGVsX3JpbmdfZW1pdChyaW5nLCBC UFBfMzIgfAo+ICsJCQkJCSAgICAgIFJPUF9GSUxMX0NPUFkgfCBQQUdFX1NJWkUpOwo+ICsJCQlp bnRlbF9yaW5nX2VtaXQocmluZywgMCk7Cj4gKwkJCWludGVsX3JpbmdfZW1pdChyaW5nLAo+ICsJ CQkJCW9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQgPDwgMTYgfAo+ICsJCQkJCVBBR0VfU0la RSAvIDQpOwo+ICsJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgaTkxNV9nZW1fb2JqX29mZnNldChv YmosIHZtKSk7Cj4gKwkJCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKPiArCQkJaW50ZWxfcmlu Z19lbWl0KHJpbmcsIDApOwo+ICsJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7CgpT dWNoIGEgcGl0dHkgdGhhdCB0aGVzZSB0d28gZW1pdCBibG9ja3MgbmVlZCB0byBiZSBkdXBsaWNh dGVkIGJ1dCBJIApndWVzcyBpdCBpcyB3aGF0IGl0IGlzIG5vdy4KCj4gKwkJfSBlbHNlIHsKPiAr CQkJcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyZXEsIDYpOwo+ICsJCQlpZiAocmV0KQo+ICsJCQkJ Z290byB1bnBpbjsKPiArCj4gKwkJCWludGVsX3JpbmdfZW1pdChyaW5nLCBDT0xPUl9CTFRfQ01E IHwKPiArCQkJCQkgICAgICBCTFRfV1JJVEVfUkdCQSk7Cj4gKwkJCWludGVsX3JpbmdfZW1pdChy aW5nLCBCUFBfMzIgfAo+ICsJCQkJCSAgICAgIFJPUF9GSUxMX0NPUFkgfCBQQUdFX1NJWkUpOwo+ ICsJCQlpbnRlbF9yaW5nX2VtaXQocmluZywKPiArCQkJCQlvYmotPmJhc2Uuc2l6ZSA+PiBQQUdF X1NISUZUIDw8IDE2IHwKPiArCQkJCQlQQUdFX1NJWkUpOwo+ICsJCQlpbnRlbF9yaW5nX2VtaXQo cmluZywgaTkxNV9nZW1fb2JqX29mZnNldChvYmosIHZtKSk7Cj4gKwkJCWludGVsX3JpbmdfZW1p dChyaW5nLCAwKTsKPiArCQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOwo+ICsJCX0K PiArCj4gKwkJX19pbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gKwl9Cj4gKwo+ICsJaTkxNV9n ZW1fZXhlY19kaXJ0eV9vYmplY3Qob2JqLCByaW5nLCB2bSwgcmVxKTsKCldoZXJlIGlzIHRoaXMg cmVxdWVzdCBhY3R1YWxseSBzdWJtaXR0ZWQ/CgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==