From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: Re: [RFC 01/14] RFC drm/i915: Expose a PMU interface for perf queries Date: Mon, 24 Jul 2017 18:09:08 -0700 Message-ID: <20170725010908.GB15479@intel.com> References: <20170718143618.12254-1-tvrtko.ursulin@linux.intel.com> <20170718143618.12254-2-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 250896E361 for ; Tue, 25 Jul 2017 01:09:10 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20170718143618.12254-2-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin Cc: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMTctMDctMTggMTU6MzY6MDUsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+RnJvbTogQ2hyaXMg V2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4KPlRoZSBmaXJzdCBnb2FsIGlzIHRv IGJlIGFibGUgdG8gbWVhc3VyZSBHUFUgKGFuZCBpbnZpZHVhbCByaW5nKSBidXN5bmVzcwo+d2l0 aG91dCBoYXZpbmcgdG8gcG9sbCByZWdpc3RlcnMgZnJvbSB1c2Vyc3BhY2UuIChXaGljaCBub3Qg b25seSBpbmN1cnMKPmhvbGRpbmcgdGhlIGZvcmNld2FrZSBsb2NrIGluZGVmaW5pdGVseSwgcGVy dHVyYmluZyB0aGUgc3lzdGVtLCBidXQgYWxzbwo+cnVucyB0aGUgcmlzayBvZiBoYW5naW5nIHRo ZSBtYWNoaW5lLikgQXMgYW4gYWx0ZXJuYXRpdmUgd2UgY2FuIHVzZSB0aGUKPnBlcmYgZXZlbnQg Y291bnRlciBpbnRlcmZhY2UgdG8gc2FtcGxlIHRoZSByaW5nIHJlZ2lzdGVycyBwZXJpb2RpY2Fs bHkKPmFuZCBzZW5kIHRob3NlIHJlc3VsdHMgdG8gdXNlcnNwYWNlLgo+Cj5UbyBiZSBhYmxlIHRv IGRvIHNvLCB3ZSBuZWVkIHRvIGV4cG9ydCB0aGUgdHdvIHN5bWJvbHMgZnJvbQo+a2VybmVsL2V2 ZW50cy9jb3JlLmMgdG8gcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgYSBQTVUgZGV2aWNlLgo+Cj52 MjogVXNlIGEgY29tbW9uIHRpbWVyIGZvciB0aGUgcmluZyBzYW1wbGluZy4KPgo+U2lnbmVkLW9m Zi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4tLS0KPiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwo+IGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICB8ICAgMiArCj4gZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgIDIzICsrCj4gZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9wbXUuYyAgICAgICAgIHwgNDUyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIHwgICAyICsKPiBpbmNsdWRl L3VhcGkvZHJtL2k5MTVfZHJtLmggICAgICAgICAgICAgfCAgNDEgKysrCj4ga2VybmVsL2V2ZW50 cy9jb3JlLmMgICAgICAgICAgICAgICAgICAgIHwgICAxICsKPiA3IGZpbGVzIGNoYW5nZWQsIDUy MiBpbnNlcnRpb25zKCspCj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcG11LmMKPgo+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPmluZGV4IGY4MjI3MzE4ZGNhZi4uMWM3 MjAwMTNkYzQyIDEwMDY0NAo+LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj5AQCAtMjYsNiArMjYsNyBAQCBpOTE1 LXkgOj0gaTkxNV9kcnYubyBcCj4KPiBpOTE1LSQoQ09ORklHX0NPTVBBVCkgICArPSBpOTE1X2lv YzMyLm8KPiBpOTE1LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBpOTE1X2RlYnVnZnMubyBpbnRlbF9w aXBlX2NyYy5vCj4raTkxNS0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gaTkxNV9wbXUubwo+Cj4g IyBHRU0gY29kZQo+IGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBcCj5kaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmMKPmluZGV4IGQzMTBkODI0NWRjYS4uZjE4Y2U1MTlmNmEyIDEwMDY0NAo+LS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuYwo+QEAgLTExOTQsNiArMTE5NCw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZHJp dmVyX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwo+Cj4gCWk5MTVfZ2VtX3Nocmlua2Vy X2luaXQoZGV2X3ByaXYpOwo+KwlpOTE1X3BtdV9yZWdpc3RlcihkZXZfcHJpdik7Cj4KPiAJLyoK PiAJICogTm90aWZ5IGEgdmFsaWQgc3VyZmFjZSBhZnRlciBtb2Rlc2V0dGluZywKPkBAIC0xMjQ3 LDYgKzEyNDgsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAJaW50ZWxfb3ByZWdpb25fdW5yZWdpc3Rlcihk ZXZfcHJpdik7Cj4KPiAJaTkxNV9wZXJmX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwo+KwlpOTE1X3Bt dV91bnJlZ2lzdGVyKGRldl9wcml2KTsKPgo+IAlpOTE1X3RlYXJkb3duX3N5c2ZzKGRldl9wcml2 KTsKPiAJaTkxNV9ndWNfbG9nX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwo+ZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCj5pbmRleCA3YzZmYWIwOGEyZTYuLmRlNTE4NTAzZTAzMyAxMDA2NDQKPi0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKPkBAIC00MCw2ICs0MCw3IEBACj4gI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4K PiAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KPiAjaW5jbHVkZSA8bGludXgva3JlZi5o Pgo+KyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+Cj4gI2luY2x1ZGUgPGxpbnV4L3BtX3Fv cy5oPgo+ICNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5oPgo+ICNpbmNsdWRlIDxsaW51eC9z aG1lbV9mcy5oPgo+QEAgLTIwOTMsNiArMjA5NCwxMiBAQCBzdHJ1Y3QgaW50ZWxfY2RjbGtfc3Rh dGUgewo+IAl1bnNpZ25lZCBpbnQgY2RjbGssIHZjbywgcmVmOwo+IH07Cj4KPitlbnVtIHsKPisJ X19JOTE1X1NBTVBMRV9GUkVRX0FDVCA9IDAsCj4rCV9fSTkxNV9TQU1QTEVfRlJFUV9SRVEsCj4r CV9fSTkxNV9OVU1fUE1VX1NBTVBMRVJTCj4rfTsKPisKPiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSB7Cj4gCXN0cnVjdCBkcm1fZGV2aWNlIGRybTsKPgo+QEAgLTI1OTEsNiArMjU5OCwxMyBAQCBz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gCQlpbnQJaXJxOwo+IAl9IGxwZV9hdWRpbzsKPgo+ KwlzdHJ1Y3Qgewo+KwkJc3RydWN0IHBtdSBiYXNlOwo+KwkJc3RydWN0IGhydGltZXIgdGltZXI7 Cj4rCQl1NjQgZW5hYmxlOwo+KwkJdTY0IHNhbXBsZVtfX0k5MTVfTlVNX1BNVV9TQU1QTEVSU107 Cj4rCX0gcG11Owo+Kwo+IAkvKgo+IAkgKiBOT1RFOiBUaGlzIGlzIHRoZSBkcmkxL3VtcyBkdW5n ZW9uLCBkb24ndCBhZGQgc3R1ZmYgaGVyZS4gWW91ciBwYXRjaAo+IAkgKiB3aWxsIGJlIHJlamVj dGVkLiBJbnN0ZWFkIGxvb2sgZm9yIGEgYmV0dGVyIHBsYWNlLgo+QEAgLTM3NjAsNiArMzc3NCwx NSBAQCBleHRlcm4gdm9pZCBpOTE1X3BlcmZfZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwo+IGV4dGVybiB2b2lkIGk5MTVfcGVyZl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IGV4dGVybiB2b2lkIGk5MTVfcGVyZl91bnJlZ2lzdGVy KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4KPisvKiBpOTE1X3BtdS5jICov Cj4rI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwo+K2V4dGVybiB2b2lkIGk5MTVfcG11X3JlZ2lz dGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPitleHRlcm4gdm9pZCBpOTE1X3Bt dV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPisjZWxzZQo+K3N0 YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSkge30KPitzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9wbXVfdW5yZWdpc3RlcihzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkge30KPisjZW5kaWYKPisKPiAvKiBpOTE1X3N1c3Bl bmQuYyAqLwo+IGV4dGVybiBpbnQgaTkxNV9zYXZlX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7Cj4gZXh0ZXJuIGludCBpOTE1X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3BtdS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwo+bmV3IGZp bGUgbW9kZSAxMDA2NDQKPmluZGV4IDAwMDAwMDAwMDAwMC4uZjAzZGRhZDQ0ZGE2Cj4tLS0gL2Rl di9udWxsCj4rKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCj5AQCAtMCwwICsx LDQ1MiBAQAo+KyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+Cj4rI2luY2x1ZGUgPGxpbnV4 L3BtX3J1bnRpbWUuaD4KPisKPisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPisjaW5jbHVkZSAiaW50 ZWxfcmluZ2J1ZmZlci5oIgo+Kwo+KyNkZWZpbmUgRlJFUVVFTkNZIDIwMAo+KyNkZWZpbmUgUEVS SU9EIG1heF90KHU2NCwgMTAwMDAsIE5TRUNfUEVSX1NFQyAvIEZSRVFVRU5DWSkKPisKPisjZGVm aW5lIFJJTkdfTUFTSyAweGZmZmZmZmZmCj4rI2RlZmluZSBSSU5HX01BWCAzMgo+Kwo+K3N0YXRp YyB2b2lkIGVuZ2luZXNfc2FtcGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK Pit7Cj4rCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPisJZW51bSBpbnRlbF9lbmdp bmVfaWQgaWQ7Cj4rCWJvb2wgZncgPSBmYWxzZTsKPisKPisJaWYgKChkZXZfcHJpdi0+cG11LmVu YWJsZSAmIFJJTkdfTUFTSykgPT0gMCkKPisJCXJldHVybjsKPisKPisJaWYgKCFkZXZfcHJpdi0+ Z3QuYXdha2UpCj4rCQlyZXR1cm47Cj4rCj4rCWlmICghaW50ZWxfcnVudGltZV9wbV9nZXRfaWZf aW5fdXNlKGRldl9wcml2KSkKPisJCXJldHVybjsKPisKPisJZm9yX2VhY2hfZW5naW5lKGVuZ2lu ZSwgZGV2X3ByaXYsIGlkKSB7Cj4rCQl1MzIgdmFsOwo+Kwo+KwkJaWYgKChkZXZfcHJpdi0+cG11 LmVuYWJsZSAmICgweDcgPDwgKDQqaWQpKSkgPT0gMCkKPisJCQljb250aW51ZTsKPisKPisJCWlm IChpOTE1X3NlcW5vX3Bhc3NlZChpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSksCj4rCQkJ CSAgICAgIGludGVsX2VuZ2luZV9sYXN0X3N1Ym1pdChlbmdpbmUpKSkKPisJCQljb250aW51ZTsK PisKClRoaXMgc2VlbXMgdG9vIGNsZXZlciBvZiBhbiBvcHRpbWl6YXRpb24sIHdoeSBub3QganVz dCB1c2UgTU9ERV9JRExFIHRvIGJlIGFzCmFjY3VyYXRlIGFzIHBvc3NpYmxlIGFuZCByZWx5IGFz IGxpdHRsZSBhcyBwb3NzaWJsZSBvbiBzb2Z0d2FyZSB0cmFja2luZy4KCj4rCQlpZiAoIWZ3KSB7 Cj4rCQkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwp Owo+KwkJCWZ3ID0gdHJ1ZTsKPisJCX0KPisKPisJCWVuZ2luZS0+cG11X3NhbXBsZVtJOTE1X1NB TVBMRV9RVUVVRURdICs9IFBFUklPRDsKPisKPisJCXZhbCA9IEk5MTVfUkVBRF9GVyhSSU5HX01J X01PREUoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPisJCWlmICghKHZhbCAmIE1PREVfSURMRSkpCj4r CQkJZW5naW5lLT5wbXVfc2FtcGxlW0k5MTVfU0FNUExFX0JVU1ldICs9IFBFUklPRDsKPisKPisJ CXZhbCA9IEk5MTVfUkVBRF9GVyhSSU5HX0NUTChlbmdpbmUtPm1taW9fYmFzZSkpOwo+KwkJaWYg KHZhbCAmIFJJTkdfV0FJVCkKPisJCQllbmdpbmUtPnBtdV9zYW1wbGVbSTkxNV9TQU1QTEVfV0FJ VF0gKz0gUEVSSU9EOwo+KwkJaWYgKHZhbCAmIFJJTkdfV0FJVF9TRU1BUEhPUkUpCj4rCQkJZW5n aW5lLT5wbXVfc2FtcGxlW0k5MTVfU0FNUExFX1NFTUFdICs9IFBFUklPRDsKPisJfQo+Kwo+Kwlp ZiAoZncpCj4rCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtF X0FMTCk7Cj4rCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKPit9Cj4rCj4rc3RhdGlj IHZvaWQgZnJlcXVlbmN5X3NhbXBsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4rewo+KwlpZiAoZGV2X3ByaXYtPnBtdS5lbmFibGUgJiBCSVRfVUxMKEk5MTVfUE1VX0FDVFVB TF9GUkVRVUVOQ1kpKSB7Cj4rCQl1NjQgdmFsOwo+Kwo+KwkJdmFsID0gZGV2X3ByaXYtPnJwcy5j dXJfZnJlcTsKPisJCWlmIChkZXZfcHJpdi0+Z3QuYXdha2UgJiYKPisJCSAgICBpbnRlbF9ydW50 aW1lX3BtX2dldF9pZl9pbl91c2UoZGV2X3ByaXYpKSB7Cj4rCQkJdmFsID0gSTkxNV9SRUFEX05P VFJBQ0UoR0VONl9SUFNUQVQxKTsKPisJCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQo+ KwkJCQl2YWwgPSAodmFsICYgR0VOOV9DQUdGX01BU0spID4+IEdFTjlfQ0FHRl9TSElGVDsKPisJ CQllbHNlIGlmIChJU19IQVNXRUxMKGRldl9wcml2KSB8fCBJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDgpCj4rCQkJCXZhbCA9ICh2YWwgJiBIU1dfQ0FHRl9NQVNLKSA+PiBIU1dfQ0FHRl9TSElGVDsK PisJCQllbHNlCj4rCQkJCXZhbCA9ICh2YWwgJiBHRU42X0NBR0ZfTUFTSykgPj4gR0VONl9DQUdG X1NISUZUOwo+KwkJCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKPisJCX0KPisJCXZh bCA9IGludGVsX2dwdV9mcmVxKGRldl9wcml2LCB2YWwpOwo+KwkJZGV2X3ByaXYtPnBtdS5zYW1w bGVbX19JOTE1X1NBTVBMRV9GUkVRX0FDVF0gKz0gdmFsICogUEVSSU9EOwo+Kwl9Cj4rCj4rCWlm IChkZXZfcHJpdi0+cG11LmVuYWJsZSAmIEJJVF9VTEwoSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFV RU5DWSkpIHsKPisJCXU2NCB2YWwgPSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgZGV2X3ByaXYt PnJwcy5jdXJfZnJlcSk7Cj4rCQlkZXZfcHJpdi0+cG11LnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZS RVFfUkVRXSArPSB2YWwgKiBQRVJJT0Q7Cj4rCX0KPit9Cj4rCj4rc3RhdGljIGVudW0gaHJ0aW1l cl9yZXN0YXJ0IGk5MTVfc2FtcGxlKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQo+K3sKPisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQo+KwkJY29udGFpbmVyX29mKGhydGltZXIsIHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlLCBwbXUudGltZXIpOwo+Kwo+KwlpZiAoaTkxNS0+cG11LmVu YWJsZSA9PSAwKQo+KwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwo+Kwo+KwllbmdpbmVzX3Nh bXBsZShpOTE1KTsKPisJZnJlcXVlbmN5X3NhbXBsZShpOTE1KTsKPisKPisJaHJ0aW1lcl9mb3J3 YXJkX25vdyhocnRpbWVyLCBuc190b19rdGltZShQRVJJT0QpKTsKPisJcmV0dXJuIEhSVElNRVJf UkVTVEFSVDsKPit9Cj4rCj4rc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfZGVzdHJveShzdHJ1 Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4rewo+KwlXQVJOX09OKGV2ZW50LT5wYXJlbnQpOwo+K30K PisKPitzdGF0aWMgaW50IGVuZ2luZV9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVu dCkKPit7Cj4rCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KPisJCWNvbnRhaW5lcl9v ZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7Cj4rCWludCBlbmdpbmUgPSBl dmVudC0+YXR0ci5jb25maWcgPj4gMjsKPisJaW50IHNhbXBsZSA9IGV2ZW50LT5hdHRyLmNvbmZp ZyAmIDM7Cj4rCj4rCXN3aXRjaCAoc2FtcGxlKSB7Cj4rCWNhc2UgSTkxNV9TQU1QTEVfUVVFVUVE Ogo+KwljYXNlIEk5MTVfU0FNUExFX0JVU1k6Cj4rCWNhc2UgSTkxNV9TQU1QTEVfV0FJVDoKPisJ CWJyZWFrOwo+KwljYXNlIEk5MTVfU0FNUExFX1NFTUE6Cj4rCQlpZiAoSU5URUxfR0VOKGk5MTUp IDwgNikKPisJCQlyZXR1cm4gLUVOT0RFVjsKPisJCWJyZWFrOwo+KwlkZWZhdWx0Ogo+KwkJcmV0 dXJuIC1FTk9FTlQ7Cj4rCX0KPisKPisJaWYgKGVuZ2luZSA+PSBJOTE1X05VTV9FTkdJTkVTKQo+ KwkJcmV0dXJuIC1FTk9FTlQ7Cj4rCj4rCWlmICghaTkxNS0+ZW5naW5lW2VuZ2luZV0pCj4rCQly ZXR1cm4gLUVOT0RFVjsKPisKPisJcmV0dXJuIDA7Cj4rfQo+Kwo+K3N0YXRpYyBlbnVtIGhydGlt ZXJfcmVzdGFydCBocnRpbWVyX3NhbXBsZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKPit7Cj4r CXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7Cj4rCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVu dDsKPisJdTY0IHBlcmlvZDsKPisKPisJZXZlbnQgPSBjb250YWluZXJfb2YoaHJ0aW1lciwgc3Ry dWN0IHBlcmZfZXZlbnQsIGh3LmhydGltZXIpOwo+KwlpZiAoZXZlbnQtPnN0YXRlICE9IFBFUkZf RVZFTlRfU1RBVEVfQUNUSVZFKQo+KwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwo+Kwo+Kwll dmVudC0+cG11LT5yZWFkKGV2ZW50KTsKPisKPisJcGVyZl9zYW1wbGVfZGF0YV9pbml0KCZkYXRh LCAwLCBldmVudC0+aHcubGFzdF9wZXJpb2QpOwo+KwlwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50 LCAmZGF0YSwgTlVMTCk7Cj4rCj4rCXBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGV2ZW50LT5o dy5zYW1wbGVfcGVyaW9kKTsKPisJaHJ0aW1lcl9mb3J3YXJkX25vdyhocnRpbWVyLCBuc190b19r dGltZShwZXJpb2QpKTsKPisJcmV0dXJuIEhSVElNRVJfUkVTVEFSVDsKPit9Cj4rCj4rc3RhdGlj IHZvaWQgaW5pdF9ocnRpbWVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPit7Cj4rCXN0cnVj dCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owo+Kwo+KwlpZiAoIWlzX3NhbXBsaW5n X2V2ZW50KGV2ZW50KSkKPisJCXJldHVybjsKPisKPisJaHJ0aW1lcl9pbml0KCZod2MtPmhydGlt ZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7Cj4rCWh3Yy0+aHJ0aW1lci5m dW5jdGlvbiA9IGhydGltZXJfc2FtcGxlOwo+Kwo+KwlpZiAoZXZlbnQtPmF0dHIuZnJlcSkgewo+ KwkJbG9uZyBmcmVxID0gZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXE7Cj4rCj4rCQlldmVudC0+YXR0 ci5zYW1wbGVfcGVyaW9kID0gTlNFQ19QRVJfU0VDIC8gZnJlcTsKPisJCWh3Yy0+c2FtcGxlX3Bl cmlvZCA9IGV2ZW50LT5hdHRyLnNhbXBsZV9wZXJpb2Q7Cj4rCQlsb2NhbDY0X3NldCgmaHdjLT5w ZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKPisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBo d2MtPnNhbXBsZV9wZXJpb2Q7Cj4rCQlldmVudC0+YXR0ci5mcmVxID0gMDsKPisJfQo+K30KPisK PitzdGF0aWMgaW50IGk5MTVfcG11X2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50 KQo+K3sKPisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQo+KwkJY29udGFpbmVyX29m KGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKPisJaW50IHJldDsKPisKPisJ LyogWFhYIGlkZWFsbHkgb25seSB3YW50IHBpZCA9PSAtMSAmJiBjcHUgPT0gLTEgKi8KPisKPisJ aWYgKGV2ZW50LT5hdHRyLnR5cGUgIT0gZXZlbnQtPnBtdS0+dHlwZSkKPisJCXJldHVybiAtRU5P RU5UOwo+Kwo+KwlpZiAoaGFzX2JyYW5jaF9zdGFjayhldmVudCkpCj4rCQlyZXR1cm4gLUVPUE5P VFNVUFA7Cj4rCj4rCXJldCA9IDA7Cj4rCWlmIChldmVudC0+YXR0ci5jb25maWcgPCBSSU5HX01B WCkgewo+KwkJcmV0ID0gZW5naW5lX2V2ZW50X2luaXQoZXZlbnQpOwo+Kwl9IGVsc2Ugc3dpdGNo IChldmVudC0+YXR0ci5jb25maWcpIHsKPisJY2FzZSBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZ Ogo+KwkJaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNfQ0hFUlJZVklFVyhpOTE1KSkKPisJ CQlyZXQgPSAtRU5PREVWOyAvKiByZXF1aXJlcyBhIG11dGV4IGZvciBzYW1wbGluZyEgKi8KPisJ Y2FzZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZOgo+KwljYXNlIEk5MTVfUE1VX0VORVJH WToKPisJY2FzZSBJOTE1X1BNVV9SQzZfUkVTSURFTkNZOgo+KwljYXNlIEk5MTVfUE1VX1JDNnBf UkVTSURFTkNZOgo+KwljYXNlIEk5MTVfUE1VX1JDNnBwX1JFU0lERU5DWToKPisJCWlmIChJTlRF TF9HRU4oaTkxNSkgPCA2KQo+KwkJCXJldCA9IC1FTk9ERVY7Cj4rCQlicmVhazsKPisJfQo+Kwlp ZiAocmV0KQo+KwkJcmV0dXJuIHJldDsKPisKPisJaWYgKCFldmVudC0+cGFyZW50KQo+KwkJZXZl bnQtPmRlc3Ryb3kgPSBpOTE1X3BtdV9ldmVudF9kZXN0cm95Owo+Kwo+Kwlpbml0X2hydGltZXIo ZXZlbnQpOwo+Kwo+KwlyZXR1cm4gMDsKPit9Cj4rCj4rc3RhdGljIHZvaWQgaTkxNV9wbXVfdGlt ZXJfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+K3sKPisJc3RydWN0IGh3X3BlcmZf ZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Cj4rCXM2NCBwZXJpb2Q7Cj4rCj4rCWlmICghaXNfc2Ft cGxpbmdfZXZlbnQoZXZlbnQpKQo+KwkJcmV0dXJuOwo+Kwo+KwlwZXJpb2QgPSBsb2NhbDY0X3Jl YWQoJmh3Yy0+cGVyaW9kX2xlZnQpOwo+KwlpZiAocGVyaW9kKSB7Cj4rCQlpZiAocGVyaW9kIDwg MCkKPisJCQlwZXJpb2QgPSAxMDAwMDsKPisKPisJCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9s ZWZ0LCAwKTsKPisJfSBlbHNlIHsKPisJCXBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+ c2FtcGxlX3BlcmlvZCk7Cj4rCX0KPisKPisJaHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5o cnRpbWVyLAo+KwkJCSAgICAgICBuc190b19rdGltZShwZXJpb2QpLCAwLAo+KwkJCSAgICAgICBI UlRJTUVSX01PREVfUkVMX1BJTk5FRCk7Cj4rfQo+Kwo+K3N0YXRpYyB2b2lkIGk5MTVfcG11X3Rp bWVyX2NhbmNlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4rewo+KwlzdHJ1Y3QgaHdfcGVy Zl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKPisKPisJaWYgKCFpc19zYW1wbGluZ19ldmVudChl dmVudCkpCj4rCQlyZXR1cm47Cj4rCj4rCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LAo+ KwkJICAgIGt0aW1lX3RvX25zKGhydGltZXJfZ2V0X3JlbWFpbmluZygmaHdjLT5ocnRpbWVyKSkp Owo+KwlocnRpbWVyX2NhbmNlbCgmaHdjLT5ocnRpbWVyKTsKPit9Cj4rCj4rc3RhdGljIHZvaWQg aTkxNV9wbXVfZW5hYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPit7Cj4rCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0KPisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBl b2YoKmk5MTUpLCBwbXUuYmFzZSk7Cj4rCj4rCWlmIChpOTE1LT5wbXUuZW5hYmxlID09IDApCj4r CQlocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZpOTE1LT5wbXUudGltZXIsCj4rCQkJCSAgICAgICBu c190b19rdGltZShQRVJJT0QpLCAwLAo+KwkJCQkgICAgICAgSFJUSU1FUl9NT0RFX1JFTF9QSU5O RUQpOwo+Kwo+KwlpOTE1LT5wbXUuZW5hYmxlIHw9IEJJVF9VTEwoZXZlbnQtPmF0dHIuY29uZmln KTsKPisKPisJaTkxNV9wbXVfdGltZXJfc3RhcnQoZXZlbnQpOwo+K30KPisKPitzdGF0aWMgdm9p ZCBpOTE1X3BtdV9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPit7Cj4rCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KPisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0 eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7Cj4rCj4rCWk5MTUtPnBtdS5lbmFibGUgJj0gfkJJVF9V TEwoZXZlbnQtPmF0dHIuY29uZmlnKTsKPisJaTkxNV9wbXVfdGltZXJfY2FuY2VsKGV2ZW50KTsK Pit9Cj4rCj4rc3RhdGljIGludCBpOTE1X3BtdV9ldmVudF9hZGQoc3RydWN0IHBlcmZfZXZlbnQg KmV2ZW50LCBpbnQgZmxhZ3MpCj4rewo+KwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2 ZW50LT5odzsKPisKPisJaWYgKGZsYWdzICYgUEVSRl9FRl9TVEFSVCkKPisJCWk5MTVfcG11X2Vu YWJsZShldmVudCk7Cj4rCj4rCWh3Yy0+c3RhdGUgPSAhKGZsYWdzICYgUEVSRl9FRl9TVEFSVCk7 Cj4rCj4rCXJldHVybiAwOwo+K30KPisKPitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9kZWwo c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCj4rewo+KwlpOTE1X3BtdV9kaXNh YmxlKGV2ZW50KTsKPit9Cj4rCj4rc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfc3RhcnQoc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCj4rewo+KwlpOTE1X3BtdV9lbmFibGUo ZXZlbnQpOwo+K30KPisKPitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9zdG9wKHN0cnVjdCBw ZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQo+K3sKPisJaTkxNV9wbXVfZGlzYWJsZShldmVu dCk7Cj4rfQo+Kwo+K3N0YXRpYyB1NjQgcmVhZF9lbmVyZ3lfdUooc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+K3sKPisJdTY0IHBvd2VyOwo+Kwo+KwlHRU1fQlVHX09OKElOVEVM X0dFTihkZXZfcHJpdikgPCA2KTsKPisKPisJaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYp Owo+Kwo+KwlyZG1zcmwoTVNSX1JBUExfUE9XRVJfVU5JVCwgcG93ZXIpOwo+Kwlwb3dlciA9IChw b3dlciAmIDB4MWYwMCkgPj4gODsKPisJcG93ZXIgPSAxMDAwMDAwID4+IHBvd2VyOyAvKiBjb252 ZXJ0IHRvIHVKICovCj4rCXBvd2VyICo9IEk5MTVfUkVBRF9OT1RSQUNFKE1DSF9TRUNQX05SR19T VFRTKTsKPisKPisJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOwo+Kwo+KwlyZXR1cm4g cG93ZXI7Cj4rfQo+Kwo+K3N0YXRpYyBpbmxpbmUgdTY0IGNhbGNfcmVzaWRlbmN5KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPisJCQkJIGNvbnN0IGk5MTVfcmVnX3QgcmVnKQo+ K3sKPisJdTY0IHZhbCwgdW5pdHMgPSAxMjgsIGRpdiA9IDEwMDAwMDsKPisKPisJR0VNX0JVR19P TihJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNik7Cj4rCj4rCWludGVsX3J1bnRpbWVfcG1fZ2V0KGRl dl9wcml2KTsKPisJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpKSB7Cj4rCQlkaXYgPSBkZXZfcHJpdi0+Y3pjbGtfZnJlcTsKPisJCXVuaXRzID0g MTsKPisJCWlmIChJOTE1X1JFQURfTk9UUkFDRShWTFZfQ09VTlRFUl9DT05UUk9MKSAmIFZMVl9D T1VOVF9SQU5HRV9ISUdIKQo+KwkJCXVuaXRzIDw8PSA4Owo+Kwl9IGVsc2UgaWYgKElTX0dFTjlf TFAoZGV2X3ByaXYpKSB7Cj4rCQlkaXYgPSAxMjAwOwo+KwkJdW5pdHMgPSAxOwo+Kwl9Cj4rCXZh bCA9IEk5MTVfUkVBRF9OT1RSQUNFKHJlZyk7Cj4rCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9w cml2KTsKPisKPisJdmFsICo9IHVuaXRzOwo+KwlyZXR1cm4gRElWX1JPVU5EX1VQX1VMTCh2YWws IGRpdik7Cj4rfQo+Kwo+K3N0YXRpYyB1NjQgY291bnRfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSkKPit7Cj4rCS8qIG9wZW4tY29kZWQga3N0YXRfaXJxcygpICovCj4r CXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGk5MTUtPmRybS5wZGV2LT5pcnEp Owo+Kwl1NjQgc3VtID0gMDsKPisJaW50IGNwdTsKPisKPisJaWYgKCFkZXNjIHx8ICFkZXNjLT5r c3RhdF9pcnFzKQo+KwkJcmV0dXJuIDA7Cj4rCj4rCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUp Cj4rCQlzdW0gKz0gKnBlcl9jcHVfcHRyKGRlc2MtPmtzdGF0X2lycXMsIGNwdSk7Cj4rCj4rCXJl dHVybiBzdW07Cj4rfQo+Kwo+K3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X3JlYWQoc3RydWN0 IHBlcmZfZXZlbnQgKmV2ZW50KQo+K3sKPisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PQo+KwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsK PisJdTY0IHZhbCA9IDA7Cj4rCj4rCWlmIChldmVudC0+YXR0ci5jb25maWcgPCAzMikgewo+KwkJ aW50IGVuZ2luZSA9IGV2ZW50LT5hdHRyLmNvbmZpZyA+PiAyOwo+KwkJaW50IHNhbXBsZSA9IGV2 ZW50LT5hdHRyLmNvbmZpZyAmIDM7Cj4rCQl2YWwgPSBpOTE1LT5lbmdpbmVbZW5naW5lXS0+cG11 X3NhbXBsZVtzYW1wbGVdOwo+Kwl9IGVsc2Ugc3dpdGNoIChldmVudC0+YXR0ci5jb25maWcpIHsK PisJY2FzZSBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZOgo+KwkJdmFsID0gaTkxNS0+cG11LnNh bXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfQUNUXTsKPisJCWJyZWFrOwo+KwljYXNlIEk5MTVfUE1V X1JFUVVFU1RFRF9GUkVRVUVOQ1k6Cj4rCQl2YWwgPSBpOTE1LT5wbXUuc2FtcGxlW19fSTkxNV9T QU1QTEVfRlJFUV9SRVFdOwo+KwkJYnJlYWs7Cj4rCWNhc2UgSTkxNV9QTVVfRU5FUkdZOgo+KwkJ dmFsID0gcmVhZF9lbmVyZ3lfdUooaTkxNSk7Cj4rCQlicmVhazsKPisJY2FzZSBJOTE1X1BNVV9J TlRFUlJVUFRTOgo+KwkJdmFsID0gY291bnRfaW50ZXJydXB0cyhpOTE1KTsKPisJCWJyZWFrOwo+ Kwo+KwljYXNlIEk5MTVfUE1VX1JDNl9SRVNJREVOQ1k6Cj4rCQlpZiAoIWk5MTUtPmd0LmF3YWtl KQo+KwkJCXJldHVybjsKPisKPisJCXZhbCA9IGNhbGNfcmVzaWRlbmN5KGk5MTUsIElTX1ZBTExF WVZJRVcoaTkxNSkgPyBWTFZfR1RfUkVOREVSX1JDNiA6IEdFTjZfR1RfR0ZYX1JDNik7Cj4rCQli cmVhazsKPisKPisJY2FzZSBJOTE1X1BNVV9SQzZwX1JFU0lERU5DWToKPisJCWlmICghaTkxNS0+ Z3QuYXdha2UpCj4rCQkJcmV0dXJuOwo+Kwo+KwkJaWYgKCFJU19WQUxMRVlWSUVXKGk5MTUpKQo+ KwkJCXZhbCA9IGNhbGNfcmVzaWRlbmN5KGk5MTUsIEdFTjZfR1RfR0ZYX1JDNnApOwo+KwkJYnJl YWs7Cj4rCj4rCWNhc2UgSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZOgo+KwkJaWYgKCFpOTE1LT5n dC5hd2FrZSkKPisJCQlyZXR1cm47Cj4rCj4rCQlpZiAoIUlTX1ZBTExFWVZJRVcoaTkxNSkpCj4r CQkJdmFsID0gY2FsY19yZXNpZGVuY3koaTkxNSwgR0VONl9HVF9HRlhfUkM2cHApOwo+KwkJYnJl YWs7Cj4rCX0KPisKPisJbG9jYWw2NF9zZXQoJmV2ZW50LT5jb3VudCwgdmFsKTsKPit9Cj4rCj4r c3RhdGljIGludCBpOTE1X3BtdV9ldmVudF9ldmVudF9pZHgoc3RydWN0IHBlcmZfZXZlbnQgKmV2 ZW50KQo+K3sKPisJcmV0dXJuIDA7Cj4rfQo+Kwo+K3ZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4rewo+KwlpZiAoSU5URUxfR0VOKGk5MTUpIDw9 IDIpCj4rCQlyZXR1cm47Cj4rCj4rCWk5MTUtPnBtdS5iYXNlLnRhc2tfY3R4X25yCT0gcGVyZl9z d19jb250ZXh0Owo+KwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0CT0gaTkxNV9wbXVfZXZlbnRf aW5pdDsKPisJaTkxNS0+cG11LmJhc2UuYWRkCQk9IGk5MTVfcG11X2V2ZW50X2FkZDsKPisJaTkx NS0+cG11LmJhc2UuZGVsCQk9IGk5MTVfcG11X2V2ZW50X2RlbDsKPisJaTkxNS0+cG11LmJhc2Uu c3RhcnQJCT0gaTkxNV9wbXVfZXZlbnRfc3RhcnQ7Cj4rCWk5MTUtPnBtdS5iYXNlLnN0b3AJCT0g aTkxNV9wbXVfZXZlbnRfc3RvcDsKPisJaTkxNS0+cG11LmJhc2UucmVhZAkJPSBpOTE1X3BtdV9l dmVudF9yZWFkOwo+KwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pZHgJPSBpOTE1X3BtdV9ldmVudF9l dmVudF9pZHg7Cj4rCj4rCWhydGltZXJfaW5pdCgmaTkxNS0+cG11LnRpbWVyLCBDTE9DS19NT05P VE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwo+KwlpOTE1LT5wbXUudGltZXIuZnVuY3Rpb24gPSBp OTE1X3NhbXBsZTsKPisJaTkxNS0+cG11LmVuYWJsZSA9IDA7Cj4rCj4rCWlmIChwZXJmX3BtdV9y ZWdpc3RlcigmaTkxNS0+cG11LmJhc2UsICJpOTE1IiwgLTEpKQo+KwkJaTkxNS0+cG11LmJhc2Uu ZXZlbnRfaW5pdCA9IE5VTEw7Cj4rfQo+Kwo+K3ZvaWQgaTkxNV9wbXVfdW5yZWdpc3RlcihzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPit7Cj4rCWlmICghaTkxNS0+cG11LmJhc2UuZXZl bnRfaW5pdCkKPisJCXJldHVybjsKPisKPisJaTkxNS0+cG11LmVuYWJsZSA9IDA7Cj4rCj4rCXBl cmZfcG11X3VucmVnaXN0ZXIoJmk5MTUtPnBtdS5iYXNlKTsKPisJaTkxNS0+cG11LmJhc2UuZXZl bnRfaW5pdCA9IE5VTEw7Cj4rCj4rCWhydGltZXJfY2FuY2VsKCZpOTE1LT5wbXUudGltZXIpOwo+ K30KPmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPmluZGV4IGQzM2M5MzQ0 NGMwZC4uMDg3N2IxNTEyMzlkIDEwMDY0NAo+LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5oCj4rKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVm ZmVyLmgKPkBAIC0yNDUsNiArMjQ1LDggQEAgc3RydWN0IGludGVsX2VuZ2luZV9jcyB7Cj4gCQlJ OTE1X1NFTEZURVNUX0RFQ0xBUkUoYm9vbCBtb2NrIDogMSk7Cj4gCX0gYnJlYWRjcnVtYnM7Cj4K PisJdTY0IHBtdV9zYW1wbGVbNF07Cj4rCj4gCS8qCj4gCSAqIEEgcG9vbCBvZiBvYmplY3RzIHRv IHVzZSBhcyBzaGFkb3cgY29waWVzIG9mIGNsaWVudCBiYXRjaCBidWZmZXJzCj4gCSAqIHdoZW4g dGhlIGNvbW1hbmQgcGFyc2VyIGlzIGVuYWJsZWQuIFByZXZlbnRzIHRoZSBjbGllbnQgZnJvbQo+ ZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9k cm0vaTkxNV9kcm0uaAo+aW5kZXggN2NjYmQ2YTJiYmUwLi43MzM3NzRmMTlhMGIgMTAwNjQ0Cj4t LS0gYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKPisrKyBiL2luY2x1ZGUvdWFwaS9kcm0v aTkxNV9kcm0uaAo+QEAgLTg2LDYgKzg2LDQ3IEBAIGVudW0gaTkxNV9tb2NzX3RhYmxlX2luZGV4 IHsKPiAJSTkxNV9NT0NTX0NBQ0hFRCwKPiB9Owo+Cj4rLyoqCj4rICogRE9DOiBwZXJmX2V2ZW50 cyBleHBvc2VkIGJ5IGk5MTUgdGhyb3VnaCAvc3lzL2J1cy9ldmVudF9zb3VyY2VzL2RyaXZlcnMv aTkxNQo+KyAqCj4rICovCj4rI2RlZmluZSBJOTE1X1NBTVBMRV9RVUVVRUQJMAo+KyNkZWZpbmUg STkxNV9TQU1QTEVfQlVTWQkxCj4rI2RlZmluZSBJOTE1X1NBTVBMRV9XQUlUCTIKPisjZGVmaW5l IEk5MTVfU0FNUExFX1NFTUEJMwo+Kwo+KyNkZWZpbmUgSTkxNV9TQU1QTEVfUkNTCQkwCj4rI2Rl ZmluZSBJOTE1X1NBTVBMRV9WQ1MJCTEKPisjZGVmaW5lIEk5MTVfU0FNUExFX0JDUwkJMgo+KyNk ZWZpbmUgSTkxNV9TQU1QTEVfVkVDUwkzCj4rCj4rI2RlZmluZSBfX0k5MTVfUE1VX0NPVU5UKHJp bmcsIGlkKSAoKHJpbmcpIDw8IDIgfCAoaWQpKQo+Kwo+KyNkZWZpbmUgSTkxNV9QTVVfQ09VTlRf UkNTX0JVU1kgX19JOTE1X1BNVV9DT1VOVChJOTE1X1NBTVBMRV9SQ1MsIEk5MTVfU0FNUExFX0JV U1kpCj4rI2RlZmluZSBJOTE1X1BNVV9DT1VOVF9SQ1NfV0FJVCBfX0k5MTVfUE1VX0NPVU5UKEk5 MTVfU0FNUExFX1JDUywgSTkxNV9TQU1QTEVfV0FJVCkKPisjZGVmaW5lIEk5MTVfUE1VX0NPVU5U X1JDU19TRU1BIF9fSTkxNV9QTVVfQ09VTlQoSTkxNV9TQU1QTEVfUkNTLCBJOTE1X1NBTVBMRV9T RU1BKQo+Kwo+KyNkZWZpbmUgSTkxNV9QTVVfQ09VTlRfVkNTX0JVU1kgX19JOTE1X1BNVV9DT1VO VChJOTE1X1NBTVBMRV9WQ1MsIEk5MTVfU0FNUExFX0JVU1kpCj4rI2RlZmluZSBJOTE1X1BNVV9D T1VOVF9WQ1NfV0FJVCBfX0k5MTVfUE1VX0NPVU5UKEk5MTVfU0FNUExFX1ZDUywgSTkxNV9TQU1Q TEVfV0FJVCkKPisjZGVmaW5lIEk5MTVfUE1VX0NPVU5UX1ZDU19TRU1BIF9fSTkxNV9QTVVfQ09V TlQoSTkxNV9TQU1QTEVfVkNTLCBJOTE1X1NBTVBMRV9TRU1BKQo+Kwo+KyNkZWZpbmUgSTkxNV9Q TVVfQ09VTlRfQkNTX0JVU1kgX19JOTE1X1BNVV9DT1VOVChJOTE1X1NBTVBMRV9CQ1MsIEk5MTVf U0FNUExFX0JVU1kpCj4rI2RlZmluZSBJOTE1X1BNVV9DT1VOVF9CQ1NfV0FJVCBfX0k5MTVfUE1V X0NPVU5UKEk5MTVfU0FNUExFX0JDUywgSTkxNV9TQU1QTEVfV0FJVCkKPisjZGVmaW5lIEk5MTVf UE1VX0NPVU5UX0JDU19TRU1BIF9fSTkxNV9QTVVfQ09VTlQoSTkxNV9TQU1QTEVfQkNTLCBJOTE1 X1NBTVBMRV9TRU1BKQo+Kwo+KyNkZWZpbmUgSTkxNV9QTVVfQ09VTlRfVkVDU19CVVNZIF9fSTkx NV9QTVVfQ09VTlQoSTkxNV9TQU1QTEVfVkVDUywgSTkxNV9TQU1QTEVfQlVTWSkKPisjZGVmaW5l IEk5MTVfUE1VX0NPVU5UX1ZFQ1NfV0FJVCBfX0k5MTVfUE1VX0NPVU5UKEk5MTVfU0FNUExFX1ZF Q1MsIEk5MTVfU0FNUExFX1dBSVQpCj4rI2RlZmluZSBJOTE1X1BNVV9DT1VOVF9WRUNTX1NFTUEg X19JOTE1X1BNVV9DT1VOVChJOTE1X1NBTVBMRV9WRUNTLCBJOTE1X1NBTVBMRV9TRU1BKQo+Kwo+ KyNkZWZpbmUgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSAzMgo+KyNkZWZpbmUgSTkxNV9QTVVf UkVRVUVTVEVEX0ZSRVFVRU5DWSAzMwoKVGhpcyBvbmUgc2VlbXMgbGVzcyB0aGFuIHVzZWZ1bC4K Cj4rI2RlZmluZSBJOTE1X1BNVV9FTkVSR1kgMzQKPisjZGVmaW5lIEk5MTVfUE1VX0lOVEVSUlVQ VFMgMzUKPisKPisjZGVmaW5lIEk5MTVfUE1VX1JDNl9SRVNJREVOQ1kJCTQwCj4rI2RlZmluZSBJ OTE1X1BNVV9SQzZwX1JFU0lERU5DWQk0MQo+KyNkZWZpbmUgSTkxNV9QTVVfUkM2cHBfUkVTSURF TkNZCTQyCj4rCj4gLyogRWFjaCByZWdpb24gaXMgYSBtaW5pbXVtIG9mIDE2aywgYW5kIHRoZXJl IGFyZSBhdCBtb3N0IDI1NSBvZiB0aGVtLgo+ICAqLwo+ICNkZWZpbmUgSTkxNV9OUl9URVhfUkVH SU9OUyAyNTUJLyogdGFibGUgc2l6ZSAyayAtIG1heGltdW0gZHVlIHRvIHVzZQo+ZGlmZiAtLWdp dCBhL2tlcm5lbC9ldmVudHMvY29yZS5jIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKPmluZGV4IGU0 NmViYThjZDFiNy4uN2I4YzZkY2UxMDc4IDEwMDY0NAo+LS0tIGEva2VybmVsL2V2ZW50cy9jb3Jl LmMKPisrKyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCj5AQCAtNzM4Niw2ICs3Mzg2LDcgQEAgaW50 IHBlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAo+IHsKPiAJcmV0 dXJuIF9fcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgZGF0YSwgcmVncyk7Cj4gfQo+K0VY UE9SVF9TWU1CT0xfR1BMKHBlcmZfZXZlbnRfb3ZlcmZsb3cpOwo+Cj4gLyoKPiAgKiBHZW5lcmlj IHNvZnR3YXJlIGV2ZW50IGluZnJhc3RydWN0dXJlCj4tLSAKPjIuOS40Cj4KCi0tIApCZW4gV2lk YXdza3ksIEludGVsIE9wZW4gU291cmNlIFRlY2hub2xvZ3kgQ2VudGVyCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=