From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 24/24] RFC drm/i915: Expose a PMU interface for perf queries Date: Thu, 15 Jun 2017 12:17:09 +0100 Message-ID: References: <20170518094638.5469-1-chris@chris-wilson.co.uk> <20170518094638.5469-24-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 98EEC6E702 for ; Thu, 15 Jun 2017 11:17:12 +0000 (UTC) In-Reply-To: <20170518094638.5469-24-chris@chris-wilson.co.uk> Content-Language: en-GB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE4LzA1LzIwMTcgMTA6NDYsIENocmlzIFdpbHNvbiB3cm90ZToKPiBUaGUgZmlyc3QgZ29h bCBpcyB0byBiZSBhYmxlIHRvIG1lYXN1cmUgR1BVIChhbmQgaW52aWR1YWwgcmluZykgYnVzeW5l c3MKPiB3aXRob3V0IGhhdmluZyB0byBwb2xsIHJlZ2lzdGVycyBmcm9tIHVzZXJzcGFjZS4gKFdo aWNoIG5vdCBvbmx5IGluY3Vycwo+IGhvbGRpbmcgdGhlIGZvcmNld2FrZSBsb2NrIGluZGVmaW5p dGVseSwgcGVydHVyYmluZyB0aGUgc3lzdGVtLCBidXQgYWxzbwo+IHJ1bnMgdGhlIHJpc2sgb2Yg aGFuZ2luZyB0aGUgbWFjaGluZS4pIEFzIGFuIGFsdGVybmF0aXZlIHdlIGNhbiB1c2UgdGhlCj4g cGVyZiBldmVudCBjb3VudGVyIGludGVyZmFjZSB0byBzYW1wbGUgdGhlIHJpbmcgcmVnaXN0ZXJz IHBlcmlvZGljYWxseQo+IGFuZCBzZW5kIHRob3NlIHJlc3VsdHMgdG8gdXNlcnNwYWNlLgoKSSBm aW5hbGx5IGdvdCByb3VuZCB0cnlpbmcgdGhpcyBhbmQgaXQgZG9lcyBub3QgbG9vayB0b28gYmFk IG92ZXJoZWFkIHdpc2UuCgpNYXliZSBpdCBpcyBwb2xpc2ggYW5kIHJldmlldyB0aW1lPyA6KQoK SSBhbSBhbHNvIHRoaW5raW5nIGlmIHdlIGNvdWxkIG1ha2UgaXQgbW9yZSBlZmZpY2llbnQgb24g Z2VuOCsgYnkgCmVtcGxveWluZyB0aGUgY29yZSBvZiB0aGUgZW5naW5lIGJ1c3luZXNzIFJGQyBJ J3ZlIHJlY2VudGx5IHNlbnQuIFNvIGluIApvdGhlciB3b3JkcyBhdm9pZCBvbmUgdGltZXIgYW5k IE1NSU8gc2FtcGxpbmcgd2hlbiBwb3NzaWJsZS4gSXQgY2FuIGJlIGEgCnNlcGFyYXRlIHBhdGNo IG9uIHRvcCBhZGRlZCBieSBtZSBpZiB3ZSBnZXQgYWdyZWVtZW50IG9uIHRoaXMuCgo+IFRvIGJl IGFibGUgdG8gZG8gc28sIHdlIG5lZWQgdG8gZXhwb3J0IHRoZSB0d28gc3ltYm9scyBmcm9tCj4g a2VybmVsL2V2ZW50cy9jb3JlLmMgdG8gcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgYSBQTVUgZGV2 aWNlLgo+IAo+IHYyOiBVc2UgYSBjb21tb24gdGltZXIgZm9yIHRoZSByaW5nIHNhbXBsaW5nLgo+ IAo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr Pgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgIHwgICAx ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICB8ICAgMiArCj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgMjMgKysKPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMgICAgICAgICB8IDQ0OSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5oIHwgICAyICsKPiAgIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAg ICB8ICA0MCArKysKPiAgIGtlcm5lbC9ldmVudHMvY29yZS5jICAgICAgICAgICAgICAgICAgICB8 ICAgMSArCj4gICA3IGZpbGVzIGNoYW5nZWQsIDUxOCBpbnNlcnRpb25zKCspCj4gICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCj4gaW5kZXggN2IwNWZiODAyZjRjLi5jYTg4ZTZlNjc5MTAgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQo+IEBAIC0yNiw2ICsyNiw3IEBAIGk5MTUteSA6PSBpOTE1X2Rydi5vIFwK PiAgIAo+ICAgaTkxNS0kKENPTkZJR19DT01QQVQpICAgKz0gaTkxNV9pb2MzMi5vCj4gICBpOTE1 LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBpOTE1X2RlYnVnZnMubyBpbnRlbF9waXBlX2NyYy5vCj4g K2k5MTUtJChDT05GSUdfUEVSRl9FVkVOVFMpICs9IGk5MTVfcG11Lm8KPiAgIAo+ICAgIyBHRU0g Y29kZQo+ICAgaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmMKPiBpbmRleCAyZDJmYjQzMjdmOTcuLmUzYzZkMDUyZDFjOSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuYwo+IEBAIC0xMTQ0LDYgKzExNDQsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2Ry aXZlcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICAJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwo+ICAgCj4gICAJaTkxNV9nZW1f c2hyaW5rZXJfaW5pdChkZXZfcHJpdik7Cj4gKwlpOTE1X3BtdV9yZWdpc3RlcihkZXZfcHJpdik7 Cj4gICAKPiAgIAkvKgo+ICAgCSAqIE5vdGlmeSBhIHZhbGlkIHN1cmZhY2UgYWZ0ZXIgbW9kZXNl dHRpbmcsCj4gQEAgLTExOTcsNiArMTE5OCw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX3Vu cmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgCWludGVsX29w cmVnaW9uX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwo+ICAgCj4gICAJaTkxNV9wZXJmX3VucmVnaXN0 ZXIoZGV2X3ByaXYpOwo+ICsJaTkxNV9wbXVfdW5yZWdpc3RlcihkZXZfcHJpdik7Cj4gICAKPiAg IAlpOTE1X3RlYXJkb3duX3N5c2ZzKGRldl9wcml2KTsKPiAgIAlpOTE1X2d1Y19sb2dfdW5yZWdp c3RlcihkZXZfcHJpdik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggMWZhMWU3ZDQ4 ZjAyLi4xMGJlYWUxYTEzYzggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtNDAs NiArNDAsNyBAQAo+ICAgI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KPiAgICNpbmNsdWRlIDxsaW51 eC9pbnRlbC1pb21tdS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KPiArI2luY2x1ZGUg PGxpbnV4L3BlcmZfZXZlbnQuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9wbV9xb3MuaD4KPiAgICNp bmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NobWVtX2Zz Lmg+Cj4gQEAgLTIwNzUsNiArMjA3NiwxMiBAQCBzdHJ1Y3QgaW50ZWxfY2RjbGtfc3RhdGUgewo+ ICAgCXVuc2lnbmVkIGludCBjZGNsaywgdmNvLCByZWY7Cj4gICB9Owo+ICAgCj4gK2VudW0gewo+ ICsJX19JOTE1X1NBTVBMRV9GUkVRX0FDVCA9IDAsCj4gKwlfX0k5MTVfU0FNUExFX0ZSRVFfUkVR LAo+ICsJX19JOTE1X05VTV9QTVVfU0FNUExFUlMKPiArfTsKPiArCj4gICBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSB7Cj4gICAJc3RydWN0IGRybV9kZXZpY2UgZHJtOwo+ICAgCj4gQEAgLTI1NjQs NiArMjU3MSwxMyBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gICAJCWludAlpcnE7Cj4g ICAJfSBscGVfYXVkaW87Cj4gICAKPiArCXN0cnVjdCB7Cj4gKwkJc3RydWN0IHBtdSBiYXNlOwo+ ICsJCXN0cnVjdCBocnRpbWVyIHRpbWVyOwo+ICsJCXU2NCBlbmFibGU7Cj4gKwkJdTY0IHNhbXBs ZVtfX0k5MTVfTlVNX1BNVV9TQU1QTEVSU107Cj4gKwl9IHBtdTsKPiArCj4gICAJLyoKPiAgIAkg KiBOT1RFOiBUaGlzIGlzIHRoZSBkcmkxL3VtcyBkdW5nZW9uLCBkb24ndCBhZGQgc3R1ZmYgaGVy ZS4gWW91ciBwYXRjaAo+ICAgCSAqIHdpbGwgYmUgcmVqZWN0ZWQuIEluc3RlYWQgbG9vayBmb3Ig YSBiZXR0ZXIgcGxhY2UuCj4gQEAgLTM2ODEsNiArMzY5NSwxNSBAQCBleHRlcm4gdm9pZCBpOTE1 X3BlcmZfZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICAgZXh0ZXJu IHZvaWQgaTkxNV9wZXJmX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dik7Cj4gICBleHRlcm4gdm9pZCBpOTE1X3BlcmZfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICAgCj4gKy8qIGk5MTVfcG11LmMgKi8KPiArI2lmZGVmIENP TkZJR19QRVJGX0VWRU5UUwo+ICtleHRlcm4gdm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gK2V4dGVybiB2b2lkIGk5MTVfcG11X3VucmVnaXN0 ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+ICsjZWxzZQo+ICtzdGF0aWMgaW5s aW5lIHZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp IHt9Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KSB7fQo+ICsjZW5kaWYKPiArCj4gICAvKiBpOTE1X3N1c3BlbmQu YyAqLwo+ICAgZXh0ZXJuIGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KTsKPiAgIGV4dGVybiBpbnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcG11LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjgwZTFjMDc4NDFhYwo+IC0t LSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCj4gQEAg LTAsMCArMSw0NDkgQEAKPiArI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KPiArCj4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICsj aW5jbHVkZSAiaW50ZWxfcmluZ2J1ZmZlci5oIgo+ICsKPiArI2RlZmluZSBGUkVRVUVOQ1kgMjAw Cj4gKyNkZWZpbmUgUEVSSU9EIG1heF90KHU2NCwgMTAwMDAsIE5TRUNfUEVSX1NFQyAvIEZSRVFV RU5DWSkKPiArCj4gKyNkZWZpbmUgUklOR19NQVNLIDB4ZmZmZmZmZmYKPiArI2RlZmluZSBSSU5H X01BWCAzMgo+ICsKPiArc3RhdGljIHZvaWQgZW5naW5lc19zYW1wbGUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmU7Cj4gKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiArCWJvb2wgZncgPSBmYWxzZTsKPiAr Cj4gKwlpZiAoKGRldl9wcml2LT5wbXUuZW5hYmxlICYgUklOR19NQVNLKSA9PSAwKQo+ICsJCXJl dHVybjsKPiArCj4gKwlpZiAoIWRldl9wcml2LT5ndC5hd2FrZSkKPiArCQlyZXR1cm47Cj4gKwo+ ICsJaWYgKCFpbnRlbF9ydW50aW1lX3BtX2dldF9pZl9pbl91c2UoZGV2X3ByaXYpKQo+ICsJCXJl dHVybjsKPiArCj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdiwgaWQpIHsKPiAr CQl1MzIgdmFsOwo+ICsKPiArCQlpZiAoKGRldl9wcml2LT5wbXUuZW5hYmxlICYgKDB4NyA8PCAo NCppZCkpKSA9PSAwKQoKVGhpcyB3b3VsZCBuZWVkIHNvbWUgbmljZWx5IG5hbWVkIG1hY3Jvcy4g UE1VX0VOR0lORV9NQVNLKGlkKSA/Cgo+ICsJCQljb250aW51ZTsKPiArCgpXb3VsZCBoZWxwIG1l IGF0IGxlYXN0OgoKCQkvKiBTa2lwIGlkbGUgZW5naW5lcy4gKi8KPiArCQlpZiAoaTkxNV9zZXFu b19wYXNzZWQoaW50ZWxfZW5naW5lX2dldF9zZXFubyhlbmdpbmUpLAo+ICsJCQkJICAgICAgaW50 ZWxfZW5naW5lX2xhc3Rfc3VibWl0KGVuZ2luZSkpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJ aWYgKCFmdykgewo+ICsJCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChkZXZfcHJpdiwgRk9S Q0VXQUtFX0FMTCk7Cj4gKwkJCWZ3ID0gdHJ1ZTsKPiArCQl9Cj4gKwo+ICsJCXZhbCA9IEk5MTVf UkVBRF9GVyhSSU5HX01JX01PREUoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiArCQlpZiAoISh2YWwg JiBNT0RFX0lETEUpKQo+ICsJCQllbmdpbmUtPnBtdV9zYW1wbGVbSTkxNV9TQU1QTEVfQlVTWV0g Kz0gUEVSSU9EOwo+ICsKPiArCQl2YWwgPSBJOTE1X1JFQURfRlcoUklOR19DVEwoZW5naW5lLT5t bWlvX2Jhc2UpKTsKPiArCQlpZiAodmFsICYgUklOR19XQUlUKQo+ICsJCQllbmdpbmUtPnBtdV9z YW1wbGVbSTkxNV9TQU1QTEVfV0FJVF0gKz0gUEVSSU9EOwo+ICsJCWlmICh2YWwgJiBSSU5HX1dB SVRfU0VNQVBIT1JFKQo+ICsJCQllbmdpbmUtPnBtdV9zYW1wbGVbSTkxNV9TQU1QTEVfU0VNQV0g Kz0gUEVSSU9EOwo+ICsJfQo+ICsKPiArCWlmIChmdykKPiArCQlpbnRlbF91bmNvcmVfZm9yY2V3 YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4gKwlpbnRlbF9ydW50aW1lX3BtX3B1 dChkZXZfcHJpdik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGZyZXF1ZW5jeV9zYW1wbGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlpZiAoZGV2X3ByaXYtPnBt dS5lbmFibGUgJiBCSVRfVUxMKEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1kpKSB7Cj4gKwkJdTY0 IHZhbDsKPiArCj4gKwkJdmFsID0gZGV2X3ByaXYtPnJwcy5jdXJfZnJlcTsKPiArCQlpZiAoZGV2 X3ByaXYtPmd0LmF3YWtlICYmCj4gKwkJICAgIGludGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2luX3Vz ZShkZXZfcHJpdikpIHsKPiArCQkJdmFsID0gSTkxNV9SRUFEX05PVFJBQ0UoR0VONl9SUFNUQVQx KTsKPiArCQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKPiArCQkJCXZhbCA9ICh2YWwg JiBHRU45X0NBR0ZfTUFTSykgPj4gR0VOOV9DQUdGX1NISUZUOwo+ICsJCQllbHNlIGlmIChJU19I QVNXRUxMKGRldl9wcml2KSB8fCBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDgpCj4gKwkJCQl2YWwg PSAodmFsICYgSFNXX0NBR0ZfTUFTSykgPj4gSFNXX0NBR0ZfU0hJRlQ7Cj4gKwkJCWVsc2UKPiAr CQkJCXZhbCA9ICh2YWwgJiBHRU42X0NBR0ZfTUFTSykgPj4gR0VONl9DQUdGX1NISUZUOwo+ICsJ CQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7Cj4gKwkJfQo+ICsJCXZhbCA9IGludGVs X2dwdV9mcmVxKGRldl9wcml2LCB2YWwpOwo+ICsJCWRldl9wcml2LT5wbXUuc2FtcGxlW19fSTkx NV9TQU1QTEVfRlJFUV9BQ1RdICs9IHZhbCAqIFBFUklPRDsKPiArCX0KPiArCj4gKwlpZiAoZGV2 X3ByaXYtPnBtdS5lbmFibGUgJiBCSVRfVUxMKEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1kp KSB7Cj4gKwkJdTY0IHZhbCA9IGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBkZXZfcHJpdi0+cnBz LmN1cl9mcmVxKTsKPiArCQlkZXZfcHJpdi0+cG11LnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFf UkVRXSArPSB2YWwgKiBQRVJJT0Q7Cj4gKwl9Cj4gK30KCkkgdGhpbmsgYSB2ZXJ5IG5pY2UgdGhp bmcgd291bGQgYmUgdG8gZ2F0ZSB0aGUgdGltZXIgb24gZ3QuYXdha2UgfCAKSTkxNV9QTVVfUkVR VUVTVEVEX0ZSRVFVRU5DWSBmcm9tIHRoZSBjYWxsZXJzLiBBY3R1YWxseSBub3QgZ2F0ZSwgYnV0 IHRvIAptYW5hZ2UgaXQgdmlhIHRob3NlIHRyaWdnZXJzLgoKTWF5YmUgaGF2ZSBzb21ldGhpbmcg bGlrZSBldmVudF9uZWVkc190aW1lcihldmVudCkgYXQgdGhlIHRpbWVyIGVuYWJsZSAKdGltZSBh bmQgZXhwb3J0IGkxOTE1X3BtdV9ndF9pZGxlL2FjdGl2ZSB0byBiZSBjYWxsZWQgZnJvbSB0aGUg cmVsZXZhbnQgCnBhcnRzIGVsc2V3aGVyZS4gVGhvc2UgZnVuY3Rpb25zIHdvdWxkIHRoZW4gbWFu YWdlIHRoZSB0aW1lciBlbmFibGVtZW50IApkZXBlbmRpbmcgb24gdGhlIGVuYWJsZWQgZXZlbnRz IG1hc2suCgpUaGlzIHdheSB3ZSB3b3VsZCBoYXZlIG5vIHRpbWVyIHJ1bm5pbmcgZHVyaW5nIEdU IGlkbGUgcGVyaW9kcyB3aGljaCAKd291bGQgYmUgdmVyeSBuaWNlLiAoVW5sZXNzIEk5MTVfUE1V X1JFUVVFU1RFRF9GUkVRVUVOQ1kgaXMgZW5hYmxlZC4pCgpUaGVuIG9uIHRvcCwgYXMgbWVudGlv bmVkIGJlZm9yZSwgd2UgY291bGQgaGF2ZSBldmVudF9uZWVkc190aW1lcigpIGdpdmUgCmRpZmZl cmVudCByZXN1bHRzIGZvciBlbmdpbmUgc3RhdHMgaWYgd2UgZm9sbG93ZWQgdXAgd2l0aCBhIGdl bjgrIG1vZGUgCmRyaXZlbiBieSB0aGUgcmVxdWVzdCBpbi9vdXQgaG9va3MgaW5zdGVhZCBvZiBo YXZpbmcgdG8gcnVuIGEgdGltZXIgYW5kIApkbyBtbWlvLgoKPiArCj4gK3N0YXRpYyBlbnVtIGhy dGltZXJfcmVzdGFydCBpOTE1X3NhbXBsZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKPiArewo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQo+ICsJCWNvbnRhaW5lcl9vZihocnRp bWVyLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgcG11LnRpbWVyKTsKPiArCj4gKwlpZiAoaTkx NS0+cG11LmVuYWJsZSA9PSAwKQo+ICsJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKPiArCj4g KwllbmdpbmVzX3NhbXBsZShpOTE1KTsKPiArCWZyZXF1ZW5jeV9zYW1wbGUoaTkxNSk7Cj4gKwo+ ICsJaHJ0aW1lcl9mb3J3YXJkX25vdyhocnRpbWVyLCBuc190b19rdGltZShQRVJJT0QpKTsKPiAr CXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGk5MTVfcG11 X2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+ICt7Cj4gKwlXQVJOX09O KGV2ZW50LT5wYXJlbnQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGVuZ2luZV9ldmVudF9pbml0 KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPQo+ICsJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBw bXUuYmFzZSk7Cj4gKwlpbnQgZW5naW5lID0gZXZlbnQtPmF0dHIuY29uZmlnID4+IDI7Cj4gKwlp bnQgc2FtcGxlID0gZXZlbnQtPmF0dHIuY29uZmlnICYgMzsKClNvbWUgbWFjcm9zIGZvciB0aGVz ZSB0d28uCgo+ICsKPiArCXN3aXRjaCAoc2FtcGxlKSB7Cj4gKwljYXNlIEk5MTVfU0FNUExFX0JV U1k6Cj4gKwljYXNlIEk5MTVfU0FNUExFX1dBSVQ6Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVf U0FNUExFX1NFTUE6Cj4gKwkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCj4gKwkJCXJldHVybiAt RU5PREVWOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVOT0VOVDsKPiAr CX0KPiArCj4gKwlpZiAoZW5naW5lID49IEk5MTVfTlVNX0VOR0lORVMpCj4gKwkJcmV0dXJuIC1F Tk9FTlQ7CgpXaHkgRU5PRU5UIGFuZCBub3QgRU5PREVWPwoKPiArCj4gKwlpZiAoIWk5MTUtPmVu Z2luZVtlbmdpbmVdKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaHJ0aW1lcl9zYW1wbGUoc3RydWN0 IGhydGltZXIgKmhydGltZXIpCj4gK3sKPiArCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7 Cj4gKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7Cj4gKwl1NjQgcGVyaW9kOwo+ICsKPiArCWV2 ZW50ID0gY29udGFpbmVyX29mKGhydGltZXIsIHN0cnVjdCBwZXJmX2V2ZW50LCBody5ocnRpbWVy KTsKPiArCWlmIChldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCj4gKwkJ cmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwo+ICsKPiArCWV2ZW50LT5wbXUtPnJlYWQoZXZlbnQp Owo+ICsKPiArCXBlcmZfc2FtcGxlX2RhdGFfaW5pdCgmZGF0YSwgMCwgZXZlbnQtPmh3Lmxhc3Rf cGVyaW9kKTsKPiArCXBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsICZkYXRhLCBOVUxMKTsKPiAr Cj4gKwlwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBldmVudC0+aHcuc2FtcGxlX3BlcmlvZCk7 Cj4gKwlocnRpbWVyX2ZvcndhcmRfbm93KGhydGltZXIsIG5zX3RvX2t0aW1lKHBlcmlvZCkpOwo+ ICsJcmV0dXJuIEhSVElNRVJfUkVTVEFSVDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW5pdF9o cnRpbWVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPiArewo+ICsJc3RydWN0IGh3X3BlcmZf ZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Cj4gKwo+ICsJaWYgKCFpc19zYW1wbGluZ19ldmVudChl dmVudCkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBD TE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwo+ICsJaHdjLT5ocnRpbWVyLmZ1bmN0 aW9uID0gaHJ0aW1lcl9zYW1wbGU7Cj4gKwo+ICsJaWYgKGV2ZW50LT5hdHRyLmZyZXEpIHsKPiAr CQlsb25nIGZyZXEgPSBldmVudC0+YXR0ci5zYW1wbGVfZnJlcTsKPiArCj4gKwkJZXZlbnQtPmF0 dHIuc2FtcGxlX3BlcmlvZCA9IE5TRUNfUEVSX1NFQyAvIGZyZXE7Cj4gKwkJaHdjLT5zYW1wbGVf cGVyaW9kID0gZXZlbnQtPmF0dHIuc2FtcGxlX3BlcmlvZDsKPiArCQlsb2NhbDY0X3NldCgmaHdj LT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKPiArCQlod2MtPmxhc3RfcGVyaW9k ID0gaHdjLT5zYW1wbGVfcGVyaW9kOwo+ICsJCWV2ZW50LT5hdHRyLmZyZXEgPSAwOwo+ICsJfQo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGk5MTVfcG11X2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9Cj4gKwkJ Y29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJLyogWFhYIGlkZWFsbHkgb25seSB3YW50IHBpZCA9PSAtMSAmJiBjcHUg PT0gLTEgKi8KCldoYXQgaXMgdGhpcyBhYm91dD8KCj4gKwo+ICsJaWYgKGV2ZW50LT5hdHRyLnR5 cGUgIT0gZXZlbnQtPnBtdS0+dHlwZSkKPiArCQlyZXR1cm4gLUVOT0VOVDsKPiArCj4gKwlpZiAo aGFzX2JyYW5jaF9zdGFjayhldmVudCkpCj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICsKPiAr CXJldCA9IDA7Cj4gKwlpZiAoZXZlbnQtPmF0dHIuY29uZmlnIDwgUklOR19NQVgpIHsKPiArCQly ZXQgPSBlbmdpbmVfZXZlbnRfaW5pdChldmVudCk7Cj4gKwl9IGVsc2Ugc3dpdGNoIChldmVudC0+ YXR0ci5jb25maWcpIHsKPiArCWNhc2UgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWToKPiArCQlp ZiAoSVNfVkFMTEVZVklFVyhpOTE1KSB8fCBJU19DSEVSUllWSUVXKGk5MTUpKQo+ICsJCQlyZXQg PSAtRU5PREVWOyAvKiByZXF1aXJlcyBhIG11dGV4IGZvciBzYW1wbGluZyEgKi8KPiArCWNhc2Ug STkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWToKPiArCWNhc2UgSTkxNV9QTVVfRU5FUkdZOgo+ ICsJY2FzZSBJOTE1X1BNVV9SQzZfUkVTSURFTkNZOgo+ICsJY2FzZSBJOTE1X1BNVV9SQzZwX1JF U0lERU5DWToKPiArCWNhc2UgSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZOgo+ICsJCWlmIChJTlRF TF9HRU4oaTkxNSkgPCA2KQo+ICsJCQlyZXQgPSAtRU5PREVWOwo+ICsJCWJyZWFrOwo+ICsJfQo+ ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWlmICghZXZlbnQtPnBhcmVudCkK PiArCQlldmVudC0+ZGVzdHJveSA9IGk5MTVfcG11X2V2ZW50X2Rlc3Ryb3k7Cj4gKwo+ICsJaW5p dF9ocnRpbWVyKGV2ZW50KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgaTkxNV9wbXVfdGltZXJfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+ICt7Cj4g KwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKPiArCXM2NCBwZXJpb2Q7 Cj4gKwo+ICsJaWYgKCFpc19zYW1wbGluZ19ldmVudChldmVudCkpCj4gKwkJcmV0dXJuOwo+ICsK PiArCXBlcmlvZCA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7Cj4gKwlpZiAocGVy aW9kKSB7Cj4gKwkJaWYgKHBlcmlvZCA8IDApCj4gKwkJCXBlcmlvZCA9IDEwMDAwOwo+ICsKPiAr CQlsb2NhbDY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgMCk7Cj4gKwl9IGVsc2Ugewo+ICsJCXBl cmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Cj4gKwl9Cj4gKwo+ ICsJaHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5ocnRpbWVyLAo+ICsJCQkgICAgICAgbnNf dG9fa3RpbWUocGVyaW9kKSwgMCwKPiArCQkJICAgICAgIEhSVElNRVJfTU9ERV9SRUxfUElOTkVE KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTkxNV9wbXVfdGltZXJfY2FuY2VsKHN0cnVjdCBw ZXJmX2V2ZW50ICpldmVudCkKPiArewo+ICsJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZl dmVudC0+aHc7Cj4gKwo+ICsJaWYgKCFpc19zYW1wbGluZ19ldmVudChldmVudCkpCj4gKwkJcmV0 dXJuOwo+ICsKPiArCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LAo+ICsJCSAgICBrdGlt ZV90b19ucyhocnRpbWVyX2dldF9yZW1haW5pbmcoJmh3Yy0+aHJ0aW1lcikpKTsKPiArCWhydGlt ZXJfY2FuY2VsKCZod2MtPmhydGltZXIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpOTE1X3Bt dV9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9Cj4gKwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVvZigq aTkxNSksIHBtdS5iYXNlKTsKPiArCj4gKwlpZiAoaTkxNS0+cG11LmVuYWJsZSA9PSAwKQo+ICsJ CWhydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmk5MTUtPnBtdS50aW1lciwKPiArCQkJCSAgICAgICBu c190b19rdGltZShQRVJJT0QpLCAwLAo+ICsJCQkJICAgICAgIEhSVElNRVJfTU9ERV9SRUxfUElO TkVEKTsKPiArCj4gKwlpOTE1LT5wbXUuZW5hYmxlIHw9IEJJVF9VTEwoZXZlbnQtPmF0dHIuY29u ZmlnKTsKPiArCj4gKwlpOTE1X3BtdV90aW1lcl9zdGFydChldmVudCk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGk5MTVfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9Cj4gKwkJY29udGFpbmVyX29mKGV2 ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKPiArCj4gKwlpOTE1LT5wbXUuZW5h YmxlICY9IH5CSVRfVUxMKGV2ZW50LT5hdHRyLmNvbmZpZyk7Cj4gKwlpOTE1X3BtdV90aW1lcl9j YW5jZWwoZXZlbnQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGk5MTVfcG11X2V2ZW50X2FkZChz dHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKPiArewo+ICsJc3RydWN0IGh3X3Bl cmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Cj4gKwo+ICsJaWYgKGZsYWdzICYgUEVSRl9FRl9T VEFSVCkKPiArCQlpOTE1X3BtdV9lbmFibGUoZXZlbnQpOwo+ICsKPiArCWh3Yy0+c3RhdGUgPSAh KGZsYWdzICYgUEVSRl9FRl9TVEFSVCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGlu dCBmbGFncykKPiArewo+ICsJaTkxNV9wbXVfZGlzYWJsZShldmVudCk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwg aW50IGZsYWdzKQo+ICt7Cj4gKwlpOTE1X3BtdV9lbmFibGUoZXZlbnQpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwg aW50IGZsYWdzKQo+ICt7Cj4gKwlpOTE1X3BtdV9kaXNhYmxlKGV2ZW50KTsKPiArfQo+ICsKPiAr c3RhdGljIHU2NCByZWFkX2VuZXJneV91SihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gK3sKPiArCXU2NCBwb3dlcjsKPiArCj4gKwlHRU1fQlVHX09OKElOVEVMX0dFTihkZXZf cHJpdikgPCA2KTsKPiArCj4gKwlpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHIgPiArCj4gKwly ZG1zcmwoTVNSX1JBUExfUE9XRVJfVU5JVCwgcG93ZXIpOwo+ICsJcG93ZXIgPSAocG93ZXIgJiAw eDFmMDApID4+IDg7Cj4gKwlwb3dlciA9IDEwMDAwMDAgPj4gcG93ZXI7IC8qIGNvbnZlcnQgdG8g dUogKi8KPiArCXBvd2VyICo9IEk5MTVfUkVBRF9OT1RSQUNFKE1DSF9TRUNQX05SR19TVFRTKTsK PiArCj4gKwlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7Cj4gKwo+ICsJcmV0dXJuIHBv d2VyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHU2NCBjYWxjX3Jlc2lkZW5jeShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJCQkgY29uc3QgaTkxNV9yZWdfdCByZWcp Cj4gK3sKPiArCXU2NCB2YWwsIHVuaXRzID0gMTI4LCBkaXYgPSAxMDAwMDA7Cj4gKwo+ICsJR0VN X0JVR19PTihJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNik7Cj4gKwo+ICsJaW50ZWxfcnVudGltZV9w bV9nZXQoZGV2X3ByaXYpOwo+ICsJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NI RVJSWVZJRVcoZGV2X3ByaXYpKSB7Cj4gKwkJZGl2ID0gZGV2X3ByaXYtPmN6Y2xrX2ZyZXE7Cj4g KwkJdW5pdHMgPSAxOwo+ICsJCWlmIChJOTE1X1JFQURfTk9UUkFDRShWTFZfQ09VTlRFUl9DT05U Uk9MKSAmIFZMVl9DT1VOVF9SQU5HRV9ISUdIKQo+ICsJCQl1bml0cyA8PD0gODsKPiArCX0gZWxz ZSBpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpIHsKPiArCQlkaXYgPSAxMjAwOwo+ICsJCXVuaXRz ID0gMTsKPiArCX0KPiArCXZhbCA9IEk5MTVfUkVBRF9OT1RSQUNFKHJlZyk7Cj4gKwlpbnRlbF9y dW50aW1lX3BtX3B1dChkZXZfcHJpdik7Cj4gKwo+ICsJdmFsICo9IHVuaXRzOwo+ICsJcmV0dXJu IERJVl9ST1VORF9VUF9VTEwodmFsLCBkaXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTY0IGNvdW50 X2ludGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCS8qIG9w ZW4tY29kZWQga3N0YXRfaXJxcygpICovCj4gKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFf dG9fZGVzYyhpOTE1LT5kcm0ucGRldi0+aXJxKTsKPiArCXU2NCBzdW0gPSAwOwo+ICsJaW50IGNw dTsKPiArCj4gKwlpZiAoIWRlc2MgfHwgIWRlc2MtPmtzdGF0X2lycXMpCj4gKwkJcmV0dXJuIDA7 Cj4gKwo+ICsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKPiArCQlzdW0gKz0gKnBlcl9jcHVf cHRyKGRlc2MtPmtzdGF0X2lycXMsIGNwdSk7Cj4gKwo+ICsJcmV0dXJuIHN1bTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZl bnQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KPiArCQljb250YWlu ZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOwo+ICsJdTY0IHZhbCA9 IDA7Cj4gKwo+ICsJaWYgKGV2ZW50LT5hdHRyLmNvbmZpZyA8IDMyKSB7CgozMiBjb3VsZCB1c2Ug YSBuYW1lIGFzIHdlbGwuCgo+ICsJCWludCBlbmdpbmUgPSBldmVudC0+YXR0ci5jb25maWcgPj4g MjsKPiArCQlpbnQgc2FtcGxlID0gZXZlbnQtPmF0dHIuY29uZmlnICYgMzsKPiArCQl2YWwgPSBp OTE1LT5lbmdpbmVbZW5naW5lXS0+cG11X3NhbXBsZVtzYW1wbGVdOwo+ICsJfSBlbHNlIHN3aXRj aCAoZXZlbnQtPmF0dHIuY29uZmlnKSB7Cj4gKwljYXNlIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVO Q1k6Cj4gKwkJdmFsID0gaTkxNS0+cG11LnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfQUNUXTsK PiArCQlicmVhazsKPiArCWNhc2UgSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWToKPiArCQl2 YWwgPSBpOTE1LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9SRVFdOwo+ICsJCWJyZWFr Owo+ICsJY2FzZSBJOTE1X1BNVV9FTkVSR1k6Cj4gKwkJdmFsID0gcmVhZF9lbmVyZ3lfdUooaTkx NSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfUE1VX0lOVEVSUlVQVFM6Cj4gKwkJdmFsID0g Y291bnRfaW50ZXJydXB0cyhpOTE1KTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIEk5MTVfUE1V X1JDNl9SRVNJREVOQ1k6Cj4gKwkJaWYgKCFpOTE1LT5ndC5hd2FrZSkKPiArCQkJcmV0dXJuOwoK RG9uJ3QgbmVlZCB0byBzZXQgdmFsIHRvIHNvbWV0aGluZyBpbiB0aGlzIGNhc2U/IExpa2UgMTAw JSwgb3Igd2hhdCBpcyAKdGhlIGVxdWl2YWxlbnQuIE1heWJlIG5vdCwgSSBuZWVkIHRvIHN0dWR5 IGhvdyB0aGUgUE1VIEFQSSB3b3Jrcy4uCgo+ICsKPiArCQl2YWwgPSBjYWxjX3Jlc2lkZW5jeShp OTE1LCBJU19WQUxMRVlWSUVXKGk5MTUpID8gVkxWX0dUX1JFTkRFUl9SQzYgOiBHRU42X0dUX0dG WF9SQzYpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgSTkxNV9QTVVfUkM2cF9SRVNJREVOQ1k6 Cj4gKwkJaWYgKCFpOTE1LT5ndC5hd2FrZSkKPiArCQkJcmV0dXJuOwo+ICsKPiArCQlpZiAoIUlT X1ZBTExFWVZJRVcoaTkxNSkpCj4gKwkJCXZhbCA9IGNhbGNfcmVzaWRlbmN5KGk5MTUsIEdFTjZf R1RfR0ZYX1JDNnApOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgSTkxNV9QTVVfUkM2cHBfUkVT SURFTkNZOgo+ICsJCWlmICghaTkxNS0+Z3QuYXdha2UpCj4gKwkJCXJldHVybjsKPiArCj4gKwkJ aWYgKCFJU19WQUxMRVlWSUVXKGk5MTUpKQo+ICsJCQl2YWwgPSBjYWxjX3Jlc2lkZW5jeShpOTE1 LCBHRU42X0dUX0dGWF9SQzZwcCk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJbG9jYWw2NF9z ZXQoJmV2ZW50LT5jb3VudCwgdmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1X3BtdV9l dmVudF9ldmVudF9pZHgoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+ICt7Cj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArdm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSkKPiArewo+ICsJaWYgKElOVEVMX0dFTihpOTE1KSA8PSAyKQo+ICsJCXJldHVy bjsKPiArCj4gKwlpOTE1LT5wbXUuYmFzZS50YXNrX2N0eF9ucgk9IHBlcmZfc3dfY29udGV4dDsK PiArCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQJPSBpOTE1X3BtdV9ldmVudF9pbml0Owo+ICsJ aTkxNS0+cG11LmJhc2UuYWRkCQk9IGk5MTVfcG11X2V2ZW50X2FkZDsKPiArCWk5MTUtPnBtdS5i YXNlLmRlbAkJPSBpOTE1X3BtdV9ldmVudF9kZWw7Cj4gKwlpOTE1LT5wbXUuYmFzZS5zdGFydAkJ PSBpOTE1X3BtdV9ldmVudF9zdGFydDsKPiArCWk5MTUtPnBtdS5iYXNlLnN0b3AJCT0gaTkxNV9w bXVfZXZlbnRfc3RvcDsKPiArCWk5MTUtPnBtdS5iYXNlLnJlYWQJCT0gaTkxNV9wbXVfZXZlbnRf cmVhZDsKPiArCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2lkeAk9IGk5MTVfcG11X2V2ZW50X2V2ZW50 X2lkeDsKPiArCj4gKwlocnRpbWVyX2luaXQoJmk5MTUtPnBtdS50aW1lciwgQ0xPQ0tfTU9OT1RP TklDLCBIUlRJTUVSX01PREVfUkVMKTsKPiArCWk5MTUtPnBtdS50aW1lci5mdW5jdGlvbiA9IGk5 MTVfc2FtcGxlOwo+ICsJaTkxNS0+cG11LmVuYWJsZSA9IDA7Cj4gKwo+ICsJaWYgKHBlcmZfcG11 X3JlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSwgImk5MTUiLCAtMSkpCj4gKwkJaTkxNS0+cG11LmJh c2UuZXZlbnRfaW5pdCA9IE5VTEw7Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9wbXVfdW5yZWdpc3Rl cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiArewo+ICsJaWYgKCFpOTE1LT5wbXUu YmFzZS5ldmVudF9pbml0KQo+ICsJCXJldHVybjsKPiArCj4gKwlpOTE1LT5wbXUuZW5hYmxlID0g MDsKPiArCj4gKwlwZXJmX3BtdV91bnJlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSk7Cj4gKwlpOTE1 LT5wbXUuYmFzZS5ldmVudF9pbml0ID0gTlVMTDsKPiArCj4gKwlocnRpbWVyX2NhbmNlbCgmaTkx NS0+cG11LnRpbWVyKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVy LmgKPiBpbmRleCA2YWEyMGFjOGNkZTMuLjA4NGZhNzgxNjI1NiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiBAQCAtMjQ0LDYgKzI0NCw4IEBAIHN0cnVjdCBp bnRlbF9lbmdpbmVfY3Mgewo+ICAgCQlJOTE1X1NFTEZURVNUX0RFQ0xBUkUoYm9vbCBtb2NrIDog MSk7Cj4gICAJfSBicmVhZGNydW1iczsKPiAgIAo+ICsJdTY0IHBtdV9zYW1wbGVbM107CgpEZWZp bmUgZm9yIDMgbmVlZGVkLgoKPiArCj4gICAJLyoKPiAgIAkgKiBBIHBvb2wgb2Ygb2JqZWN0cyB0 byB1c2UgYXMgc2hhZG93IGNvcGllcyBvZiBjbGllbnQgYmF0Y2ggYnVmZmVycwo+ICAgCSAqIHdo ZW4gdGhlIGNvbW1hbmQgcGFyc2VyIGlzIGVuYWJsZWQuIFByZXZlbnRzIHRoZSBjbGllbnQgZnJv bQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL3Vh cGkvZHJtL2k5MTVfZHJtLmgKPiBpbmRleCAzNGVlMDExZjA4YWMuLmU5Mzc1ZmYyOTM3MSAxMDA2 NDQKPiAtLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKPiArKysgYi9pbmNsdWRlL3Vh cGkvZHJtL2k5MTVfZHJtLmgKPiBAQCAtODYsNiArODYsNDYgQEAgZW51bSBpOTE1X21vY3NfdGFi bGVfaW5kZXggewo+ICAgCUk5MTVfTU9DU19DQUNIRUQsCj4gICB9Owo+ICAgCj4gKy8qKgo+ICsg KiBET0M6IHBlcmZfZXZlbnRzIGV4cG9zZWQgYnkgaTkxNSB0aHJvdWdoIC9zeXMvYnVzL2V2ZW50 X3NvdXJjZXMvZHJpdmVycy9pOTE1Cj4gKyAqCj4gKyAqLwo+ICsjZGVmaW5lIEk5MTVfU0FNUExF X0JVU1kJMAo+ICsjZGVmaW5lIEk5MTVfU0FNUExFX1dBSVQJMQo+ICsjZGVmaW5lIEk5MTVfU0FN UExFX1NFTUEJMgo+ICsKPiArI2RlZmluZSBJOTE1X1NBTVBMRV9SQ1MJCTAKPiArI2RlZmluZSBJ OTE1X1NBTVBMRV9WQ1MJCTEKPiArI2RlZmluZSBJOTE1X1NBTVBMRV9CQ1MJCTIKPiArI2RlZmlu ZSBJOTE1X1NBTVBMRV9WRUNTCTMKPiArCj4gKyNkZWZpbmUgX19JOTE1X1BNVV9DT1VOVChyaW5n LCBpZCkgKChyaW5nKSA8PCA0IHwgKGlkKSkKPiArCj4gKyNkZWZpbmUgSTkxNV9QTVVfQ09VTlRf UkNTX0JVU1kgX19JOTE1X1BNVV9DT1VOVChJOTE1X1NBTVBMRV9SQ1MsIEk5MTVfU0FNUExFX0JV U1kpCj4gKyNkZWZpbmUgSTkxNV9QTVVfQ09VTlRfUkNTX1dBSVQgX19JOTE1X1BNVV9DT1VOVChJ OTE1X1NBTVBMRV9SQ1MsIEk5MTVfU0FNUExFX1dBSVQpCj4gKyNkZWZpbmUgSTkxNV9QTVVfQ09V TlRfUkNTX1NFTUEgX19JOTE1X1BNVV9DT1VOVChJOTE1X1NBTVBMRV9SQ1MsIEk5MTVfU0FNUExF X1NFTUEpCj4gKwo+ICsjZGVmaW5lIEk5MTVfUE1VX0NPVU5UX1ZDU19CVVNZIF9fSTkxNV9QTVVf Q09VTlQoSTkxNV9TQU1QTEVfVkNTLCBJOTE1X1NBTVBMRV9CVVNZKQo+ICsjZGVmaW5lIEk5MTVf UE1VX0NPVU5UX1ZDU19XQUlUIF9fSTkxNV9QTVVfQ09VTlQoSTkxNV9TQU1QTEVfVkNTLCBJOTE1 X1NBTVBMRV9XQUlUKQo+ICsjZGVmaW5lIEk5MTVfUE1VX0NPVU5UX1ZDU19TRU1BIF9fSTkxNV9Q TVVfQ09VTlQoSTkxNV9TQU1QTEVfVkNTLCBJOTE1X1NBTVBMRV9TRU1BKQoKVkNTMiBpcyBtaXNz aW5nLgoKPiArCj4gKyNkZWZpbmUgSTkxNV9QTVVfQ09VTlRfQkNTX0JVU1kgX19JOTE1X1BNVV9D T1VOVChJOTE1X1NBTVBMRV9CQ1MsIEk5MTVfU0FNUExFX0JVU1kpCj4gKyNkZWZpbmUgSTkxNV9Q TVVfQ09VTlRfQkNTX1dBSVQgX19JOTE1X1BNVV9DT1VOVChJOTE1X1NBTVBMRV9CQ1MsIEk5MTVf U0FNUExFX1dBSVQpCj4gKyNkZWZpbmUgSTkxNV9QTVVfQ09VTlRfQkNTX1NFTUEgX19JOTE1X1BN VV9DT1VOVChJOTE1X1NBTVBMRV9CQ1MsIEk5MTVfU0FNUExFX1NFTUEpCj4gKwo+ICsjZGVmaW5l IEk5MTVfUE1VX0NPVU5UX1ZFQ1NfQlVTWSBfX0k5MTVfUE1VX0NPVU5UKEk5MTVfU0FNUExFX1ZF Q1MsIEk5MTVfU0FNUExFX0JVU1kpCj4gKyNkZWZpbmUgSTkxNV9QTVVfQ09VTlRfVkVDU19XQUlU IF9fSTkxNV9QTVVfQ09VTlQoSTkxNV9TQU1QTEVfVkVDUywgSTkxNV9TQU1QTEVfV0FJVCkKPiAr I2RlZmluZSBJOTE1X1BNVV9DT1VOVF9WRUNTX1NFTUEgX19JOTE1X1BNVV9DT1VOVChJOTE1X1NB TVBMRV9WRUNTLCBJOTE1X1NBTVBMRV9TRU1BKQo+ICsKPiArI2RlZmluZSBJOTE1X1BNVV9BQ1RV QUxfRlJFUVVFTkNZIDMyCj4gKyNkZWZpbmUgSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWSAz Mwo+ICsjZGVmaW5lIEk5MTVfUE1VX0VORVJHWSAzNAo+ICsjZGVmaW5lIEk5MTVfUE1VX0lOVEVS UlVQVFMgMzUKCkRvIHRoZXNlIG51bWJlcnMgYmVjb21lIEFCSSBidHc/Cgo+ICsKPiArI2RlZmlu ZSBJOTE1X1BNVV9SQzZfUkVTSURFTkNZCQk0MAo+ICsjZGVmaW5lIEk5MTVfUE1VX1JDNnBfUkVT SURFTkNZCTQxCj4gKyNkZWZpbmUgSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZCTQyCj4gKwo+ICAg LyogRWFjaCByZWdpb24gaXMgYSBtaW5pbXVtIG9mIDE2aywgYW5kIHRoZXJlIGFyZSBhdCBtb3N0 IDI1NSBvZiB0aGVtLgo+ICAgICovCj4gICAjZGVmaW5lIEk5MTVfTlJfVEVYX1JFR0lPTlMgMjU1 CS8qIHRhYmxlIHNpemUgMmsgLSBtYXhpbXVtIGR1ZSB0byB1c2UKPiBkaWZmIC0tZ2l0IGEva2Vy bmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwo+IGluZGV4IGY4MTFkZDIw YmJjMS4uNjM1MWVkOGEyZTU2IDEwMDY0NAo+IC0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jCj4g KysrIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKPiBAQCAtNzM2NSw2ICs3MzY1LDcgQEAgaW50IHBl cmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAo+ICAgewo+ICAgCXJl dHVybiBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsIGRhdGEsIHJlZ3MpOwo+ICAgfQo+ ICtFWFBPUlRfU1lNQk9MX0dQTChwZXJmX2V2ZW50X292ZXJmbG93KTsKPiAgIAo+ICAgLyoKPiAg ICAqIEdlbmVyaWMgc29mdHdhcmUgZXZlbnQgaW5mcmFzdHJ1Y3R1cmUKPiAKCkZpcnN0IHBhc3Mg b25seSBmb3Igbm93LiBObyBpbnNpZ2h0IGludG8gcGVyZi9QTVUgaW50ZXJhY3Rpb24gYW5kIApo YXZlbid0IGNoZWNrZWQgdGhlIHJlc2lkZW5jeSZjbyBjYWxjdWxhdGlvbnMuCgpSZWdhcmRzLAoK VHZydGtvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=