From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 10/28] drm/i915/selftests: Perform some basic cycle counting of MI ops Date: Thu, 07 Nov 2019 10:39:00 +0200 Message-ID: <874kzgnkrf.fsf@gaia.fi.intel.com> References: <20191107081252.10542-1-chris@chris-wilson.co.uk> <20191107081252.10542-10-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id CDBF56EF01 for ; Thu, 7 Nov 2019 08:39:08 +0000 (UTC) In-Reply-To: <20191107081252.10542-10-chris@chris-wilson.co.uk> 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 Cc: Anna Karas List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gU29tZSBi YXNpYyBpbmZvcm1hdGlvbiB0aGF0IGlzIHVzZWZ1bCB0byBrbm93LCBzdWNoIGFzIGhvdyBtYW55 IGN5Y2xlcwo+IGlzIGEgTUlfTk9PUC4KPgo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8 Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENjOiBBbm5hIEthcmFzIDxhbm5hLmthcmFzQGlu dGVsLmNvbT4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4K PiAtLS0KPiAgLi4uL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3RfYmx0LmMgIHwg IDE1ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9jcy5jICB8 IDMzOSArKysrKysrKysrKysrKysrKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wY2ku YyAgICAgICAgICAgICAgIHwgICA2ICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zZWxm dGVzdC5oICAgICAgICAgIHwgICA0ICsKPiAgLi4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3Bl cmZfc2VsZnRlc3RzLmggIHwgIDEzICsKPiAgLi4uL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkx NV9zZWxmdGVzdC5jICAgIHwgIDQzICsrKwo+ICA2IGZpbGVzIGNoYW5nZWQsIDQxNyBpbnNlcnRp b25zKCspLCAzIGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcGVyZl9zZWxmdGVzdHMuaAo+Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0X2JsdC5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3RfYmx0 LmMKPiBpbmRleCAxNDZiYTcxY2U3OTcuLjE3ZmM2MGFhMTIzYSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdF9ibHQuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0X2Js dC5jCj4gQEAgLTUyNyw4ICs1MjcsNiBAQCBzdGF0aWMgaW50IGlndF9jb3B5X2JsdF9jdHgwKHZv aWQgKmFyZykKPiAgaW50IGk5MTVfZ2VtX29iamVjdF9ibHRfbGl2ZV9zZWxmdGVzdHMoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIHsKPiAgCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkx NV9zdWJ0ZXN0IHRlc3RzW10gPSB7Cj4gLQkJU1VCVEVTVChwZXJmX2ZpbGxfYmx0KSwKPiAtCQlT VUJURVNUKHBlcmZfY29weV9ibHQpLAo+ICAJCVNVQlRFU1QoaWd0X2ZpbGxfYmx0KSwKPiAgCQlT VUJURVNUKGlndF9maWxsX2JsdF9jdHgwKSwKPiAgCQlTVUJURVNUKGlndF9jb3B5X2JsdCksCj4g QEAgLTU0MywzICs1NDEsMTYgQEAgaW50IGk5MTVfZ2VtX29iamVjdF9ibHRfbGl2ZV9zZWxmdGVz dHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIAo+ICAJcmV0dXJuIGk5MTVfbGl2 ZV9zdWJ0ZXN0cyh0ZXN0cywgaTkxNSk7Cj4gIH0KPiArCj4gK2ludCBpOTE1X2dlbV9vYmplY3Rf Ymx0X3BlcmZfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICt7Cj4g KwlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0gewo+ICsJCVNVQlRF U1QocGVyZl9maWxsX2JsdCksCj4gKwkJU1VCVEVTVChwZXJmX2NvcHlfYmx0KSwKPiArCX07Cj4g Kwo+ICsJaWYgKGludGVsX2d0X2lzX3dlZGdlZCgmaTkxNS0+Z3QpKQo+ICsJCXJldHVybiAwOwo+ ICsKPiArCXJldHVybiBpOTE1X2xpdmVfc3VidGVzdHModGVzdHMsIGk5MTUpOwo+ICt9Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9jcy5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX2NzLmMKPiBpbmRleCAzODgw ZjA3YzI5YjguLmFhNmIxOTk3ZWRkYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9zZWxmdGVzdF9lbmdpbmVfY3MuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L3NlbGZ0ZXN0X2VuZ2luZV9jcy5jCj4gQEAgLTQsNyArNCwzNDQgQEAKPiAgICogQ29weXJpZ2h0 IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KPiAgICovCj4gIAo+IC0jaW5jbHVkZSAiLi4vaTkx NV9zZWxmdGVzdC5oIgo+ICsjaW5jbHVkZSA8bGludXgvc29ydC5oPgo+ICsKPiArI2luY2x1ZGUg ImludGVsX2d0X3BtLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9ycHMuaCIKPiArCj4gKyNpbmNsdWRl ICJpOTE1X3NlbGZ0ZXN0LmgiCj4gKyNpbmNsdWRlICJzZWxmdGVzdHMvaWd0X2ZsdXNoX3Rlc3Qu aCIKPiArCj4gKyNkZWZpbmUgQ09VTlQgNQo+ICsKPiArc3RhdGljIGludCBjbXBfdTMyKGNvbnN0 IHZvaWQgKkEsIGNvbnN0IHZvaWQgKkIpCj4gK3sKPiArCWNvbnN0IHUzMiAqYSA9IEEsICpiID0g QjsKPiArCj4gKwlyZXR1cm4gKmEgLSAqYjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcGVyZl9i ZWdpbihzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ICt7Cj4gKwlpbnRlbF9ndF9wbV9nZXQoZ3QpOwo+ ICsKPiArCS8qIEJvb3N0IGdwdWZyZXEgdG8gbWF4IFt3YWl0Ym9vc3RdIGFuZCBrZWVwIGl0IGZp eGVkICovCj4gKwlhdG9taWNfaW5jKCZndC0+cnBzLm51bV93YWl0ZXJzKTsKPiArCXNjaGVkdWxl X3dvcmsoJmd0LT5ycHMud29yayk7Cj4gKwlmbHVzaF93b3JrKCZndC0+cnBzLndvcmspOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHBlcmZfZW5kKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gK3sKPiAr CWF0b21pY19kZWMoJmd0LT5ycHMubnVtX3dhaXRlcnMpOwo+ICsJaW50ZWxfZ3RfcG1fcHV0KGd0 KTsKPiArCj4gKwlyZXR1cm4gaWd0X2ZsdXNoX3Rlc3QoZ3QtPmk5MTUpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHdyaXRlX3RpbWVzdGFtcChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgaW50IHNs b3QpCj4gK3sKPiArCXUzMiBjbWQ7Cj4gKwl1MzIgKmNzOwo+ICsKPiArCWNzID0gaW50ZWxfcmlu Z19iZWdpbihycSwgNCk7Cj4gKwlpZiAoSVNfRVJSKGNzKSkKPiArCQlyZXR1cm4gUFRSX0VSUihj cyk7Cj4gKwo+ICsJY21kID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgTUlfVVNFX0dHVFQ7Cj4g KwlpZiAoSU5URUxfR0VOKHJxLT5pOTE1KSA+PSA4KQo+ICsJCWNtZCsrOwo+ICsJKmNzKysgPSBj bWQ7Cj4gKwkqY3MrKyA9IHJxLT5lbmdpbmUtPm1taW9fYmFzZSArIDB4MzU4OwoKd2UgaGF2ZSBS SU5HX1RJTUVTVEFNUC4KClRlc3Qgc28gc2hvcnQgd2UgZG9uJ3QgbmVlZCB0aGUgVURXIEkgc3Vw cG9zZT8KCi1NaWthLCBqdXN0IHN0cm9sbGluZyBhcm91bmQgaGVyZS4KCj4gKwkqY3MrKyA9IGk5 MTVfcmVxdWVzdF90aW1lbGluZShycSktPmh3c3Bfb2Zmc2V0ICsgc2xvdCAqIHNpemVvZih1MzIp Owo+ICsJKmNzKysgPSAwOwo+ICsKPiArCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpjcmVhdGVf ZW1wdHlfYmF0Y2goc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gKwl1MzIg KmNzOwo+ICsJaW50IGVycjsKPiArCj4gKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2lu dGVybmFsKGNlLT5lbmdpbmUtPmk5MTUsIFBBR0VfU0laRSk7Cj4gKwlpZiAoSVNfRVJSKG9iaikp Cj4gKwkJcmV0dXJuIEVSUl9DQVNUKG9iaik7Cj4gKwo+ICsJY3MgPSBpOTE1X2dlbV9vYmplY3Rf cGluX21hcChvYmosIEk5MTVfTUFQX1dCKTsKPiArCWlmIChJU19FUlIoY3MpKSB7Cj4gKwkJaTkx NV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJCXJldHVybiBFUlJfQ0FTVChjcyk7Cj4gKwl9Cj4g Kwo+ICsJY3NbMF0gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsKPiArCWk5MTVfZ2VtX29iamVj dF9mbHVzaF9tYXAob2JqKTsKPiArCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAob2JqKTsKPiAr Cj4gKwl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosIGNlLT52bSwgTlVMTCk7Cj4gKwlpZiAo SVNfRVJSKHZtYSkpIHsKPiArCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gKwkJcmV0dXJu IHZtYTsKPiArCX0KPiArCj4gKwllcnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNF Uik7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJCXJl dHVybiBFUlJfUFRSKGVycik7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHZtYTsKPiArfQo+ICsKPiAr c3RhdGljIHUzMiB0cmlmaWx0ZXIodTMyICphKQo+ICt7Cj4gKwl1NjQgc3VtOwo+ICsKPiArCXNv cnQoYSwgQ09VTlQsIHNpemVvZigqYSksIGNtcF91MzIsIE5VTEwpOwo+ICsKPiArCXN1bSArPSBt dWxfdTMyX3UzMihhWzJdLCAyKTsKPiArCXN1bSArPSBhWzFdOwo+ICsJc3VtICs9IGFbM107Cj4g Kwo+ICsJcmV0dXJuIHN1bSA+PiAyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBlcmZfbWlfYmJf c3RhcnQodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gYXJnOwo+ICsJ c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQg aWQ7Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA8IDcp IC8qIGZvciBwZXItZW5naW5lIENTX1RJTUVTVEFNUCAqLwo+ICsJCXJldHVybiAwOwo+ICsKPiAr CXBlcmZfYmVnaW4oZ3QpOwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZ3QsIGlkKSB7Cj4g KwkJc3RydWN0IGludGVsX2NvbnRleHQgKmNlID0gZW5naW5lLT5rZXJuZWxfY29udGV4dDsKPiAr CQlzdHJ1Y3QgaTkxNV92bWEgKmJhdGNoOwo+ICsJCXUzMiBjeWNsZXNbQ09VTlRdOwo+ICsJCWlu dCBpOwo+ICsKPiArCQliYXRjaCA9IGNyZWF0ZV9lbXB0eV9iYXRjaChjZSk7Cj4gKwkJaWYgKElT X0VSUihiYXRjaCkpIHsKPiArCQkJZXJyID0gUFRSX0VSUihiYXRjaCk7Cj4gKwkJCWJyZWFrOwo+ ICsJCX0KPiArCj4gKwkJZXJyID0gaTkxNV92bWFfc3luYyhiYXRjaCk7Cj4gKwkJaWYgKGVycikg ewo+ICsJCQlpOTE1X3ZtYV9wdXQoYmF0Y2gpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJ CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN5Y2xlcyk7IGkrKykgewo+ICsJCQlzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycTsKPiArCj4gKwkJCXJxID0gaTkxNV9yZXF1ZXN0X2NyZWF0ZShjZSk7 Cj4gKwkJCWlmIChJU19FUlIocnEpKSB7Cj4gKwkJCQllcnIgPSBQVFJfRVJSKHJxKTsKPiArCQkJ CWJyZWFrOwo+ICsJCQl9Cj4gKwo+ICsJCQllcnIgPSB3cml0ZV90aW1lc3RhbXAocnEsIDIpOwo+ ICsJCQlpZiAoZXJyKQo+ICsJCQkJZ290byBvdXQ7Cj4gKwo+ICsJCQllcnIgPSBycS0+ZW5naW5l LT5lbWl0X2JiX3N0YXJ0KHJxLAo+ICsJCQkJCQkJYmF0Y2gtPm5vZGUuc3RhcnQsIDgsCj4gKwkJ CQkJCQkwKTsKPiArCQkJaWYgKGVycikKPiArCQkJCWdvdG8gb3V0Owo+ICsKPiArCQkJZXJyID0g d3JpdGVfdGltZXN0YW1wKHJxLCAzKTsKPiArCQkJaWYgKGVycikKPiArCQkJCWdvdG8gb3V0Owo+ ICsKPiArb3V0Ogo+ICsJCQlpOTE1X3JlcXVlc3RfZ2V0KHJxKTsKPiArCQkJaTkxNV9yZXF1ZXN0 X2FkZChycSk7Cj4gKwo+ICsJCQlpZiAoaTkxNV9yZXF1ZXN0X3dhaXQocnEsIDAsIEhaIC8gNSkg PCAwKQo+ICsJCQkJZXJyID0gLUVJTzsKPiArCQkJaTkxNV9yZXF1ZXN0X3B1dChycSk7Cj4gKwkJ CWlmIChlcnIpCj4gKwkJCQlicmVhazsKPiArCj4gKwkJCWN5Y2xlc1tpXSA9IHJxLT5od3NwX3Nl cW5vWzNdIC0gcnEtPmh3c3Bfc2Vxbm9bMl07Cj4gKwkJfQo+ICsJCWk5MTVfdm1hX3B1dChiYXRj aCk7Cj4gKwkJaWYgKGVycikKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXByX2luZm8oIiVzOiBNSV9C Ql9TVEFSVCBjeWNsZXM6ICV1XG4iLAo+ICsJCQllbmdpbmUtPm5hbWUsIHRyaWZpbHRlcihjeWNs ZXMpKTsKPiArCX0KPiArCWlmIChwZXJmX2VuZChndCkpCj4gKwkJZXJyID0gLUVJTzsKPiArCj4g KwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpjcmVhdGVf bm9wX2JhdGNoKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iajsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICsJdTMyICpj czsKPiArCWludCBlcnI7Cj4gKwo+ICsJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9pbnRl cm5hbChjZS0+ZW5naW5lLT5pOTE1LCBTWl82NEspOwo+ICsJaWYgKElTX0VSUihvYmopKQo+ICsJ CXJldHVybiBFUlJfQ0FTVChvYmopOwo+ICsKPiArCWNzID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9t YXAob2JqLCBJOTE1X01BUF9XQik7Cj4gKwlpZiAoSVNfRVJSKGNzKSkgewo+ICsJCWk5MTVfZ2Vt X29iamVjdF9wdXQob2JqKTsKPiArCQlyZXR1cm4gRVJSX0NBU1QoY3MpOwo+ICsJfQo+ICsKPiAr CW1lbXNldChjcywgMCwgU1pfNjRLKTsKPiArCWNzW1NaXzY0SyAvIHNpemVvZigqY3MpIC0gMV0g PSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsKPiArCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9tYXAo b2JqKTsKPiArCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAob2JqKTsKPiArCj4gKwl2bWEgPSBp OTE1X3ZtYV9pbnN0YW5jZShvYmosIGNlLT52bSwgTlVMTCk7Cj4gKwlpZiAoSVNfRVJSKHZtYSkp IHsKPiArCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gKwkJcmV0dXJuIHZtYTsKPiArCX0K PiArCj4gKwllcnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNFUik7Cj4gKwlpZiAo ZXJyKSB7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJCXJldHVybiBFUlJfUFRS KGVycik7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHZtYTsKPiArfQo+ICsKPiArc3RhdGljIGludCBw ZXJmX21pX25vb3Aodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gYXJn Owo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJZW51bSBpbnRlbF9lbmdp bmVfaWQgaWQ7Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwlpZiAoSU5URUxfR0VOKGd0LT5pOTE1 KSA8IDcpIC8qIGZvciBwZXItZW5naW5lIENTX1RJTUVTVEFNUCAqLwo+ICsJCXJldHVybiAwOwo+ ICsKPiArCXBlcmZfYmVnaW4oZ3QpOwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZ3QsIGlk KSB7Cj4gKwkJc3RydWN0IGludGVsX2NvbnRleHQgKmNlID0gZW5naW5lLT5rZXJuZWxfY29udGV4 dDsKPiArCQlzdHJ1Y3QgaTkxNV92bWEgKmJhc2UsICpub3A7Cj4gKwkJdTMyIGN5Y2xlc1tDT1VO VF07Cj4gKwkJaW50IGk7Cj4gKwo+ICsJCWJhc2UgPSBjcmVhdGVfZW1wdHlfYmF0Y2goY2UpOwo+ ICsJCWlmIChJU19FUlIoYmFzZSkpIHsKPiArCQkJZXJyID0gUFRSX0VSUihiYXNlKTsKPiArCQkJ YnJlYWs7Cj4gKwkJfQo+ICsKPiArCQllcnIgPSBpOTE1X3ZtYV9zeW5jKGJhc2UpOwo+ICsJCWlm IChlcnIpIHsKPiArCQkJaTkxNV92bWFfcHV0KGJhc2UpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4g Kwo+ICsJCW5vcCA9IGNyZWF0ZV9ub3BfYmF0Y2goY2UpOwo+ICsJCWlmIChJU19FUlIobm9wKSkg ewo+ICsJCQllcnIgPSBQVFJfRVJSKG5vcCk7Cj4gKwkJCWk5MTVfdm1hX3B1dChiYXNlKTsKPiAr CQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQllcnIgPSBpOTE1X3ZtYV9zeW5jKG5vcCk7Cj4gKwkJ aWYgKGVycikgewo+ICsJCQlpOTE1X3ZtYV9wdXQobm9wKTsKPiArCQkJaTkxNV92bWFfcHV0KGJh c2UpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGN5Y2xlcyk7IGkrKykgewo+ICsJCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiArCj4g KwkJCXJxID0gaTkxNV9yZXF1ZXN0X2NyZWF0ZShjZSk7Cj4gKwkJCWlmIChJU19FUlIocnEpKSB7 Cj4gKwkJCQllcnIgPSBQVFJfRVJSKHJxKTsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwo+ICsJ CQllcnIgPSB3cml0ZV90aW1lc3RhbXAocnEsIDIpOwo+ICsJCQlpZiAoZXJyKQo+ICsJCQkJZ290 byBvdXQ7Cj4gKwo+ICsJCQllcnIgPSBycS0+ZW5naW5lLT5lbWl0X2JiX3N0YXJ0KHJxLAo+ICsJ CQkJCQkJYmFzZS0+bm9kZS5zdGFydCwgOCwKPiArCQkJCQkJCTApOwo+ICsJCQlpZiAoZXJyKQo+ ICsJCQkJZ290byBvdXQ7Cj4gKwo+ICsJCQllcnIgPSB3cml0ZV90aW1lc3RhbXAocnEsIDMpOwo+ ICsJCQlpZiAoZXJyKQo+ICsJCQkJZ290byBvdXQ7Cj4gKwo+ICsJCQllcnIgPSBycS0+ZW5naW5l LT5lbWl0X2JiX3N0YXJ0KHJxLAo+ICsJCQkJCQkJbm9wLT5ub2RlLnN0YXJ0LCA0MDk2LAo+ICsJ CQkJCQkJMCk7Cj4gKwkJCWlmIChlcnIpCj4gKwkJCQlnb3RvIG91dDsKPiArCj4gKwkJCWVyciA9 IHdyaXRlX3RpbWVzdGFtcChycSwgNCk7Cj4gKwkJCWlmIChlcnIpCj4gKwkJCQlnb3RvIG91dDsK PiArCj4gK291dDoKPiArCQkJaTkxNV9yZXF1ZXN0X2dldChycSk7Cj4gKwkJCWk5MTVfcmVxdWVz dF9hZGQocnEpOwo+ICsKPiArCQkJaWYgKGk5MTVfcmVxdWVzdF93YWl0KHJxLCAwLCBIWiAvIDUp IDwgMCkKPiArCQkJCWVyciA9IC1FSU87Cj4gKwkJCWk5MTVfcmVxdWVzdF9wdXQocnEpOwo+ICsJ CQlpZiAoZXJyKQo+ICsJCQkJYnJlYWs7Cj4gKwo+ICsJCQljeWNsZXNbaV0gPQo+ICsJCQkJKHJx LT5od3NwX3NlcW5vWzRdIC0gcnEtPmh3c3Bfc2Vxbm9bM10pIC0KPiArCQkJCShycS0+aHdzcF9z ZXFub1szXSAtIHJxLT5od3NwX3NlcW5vWzJdKTsKPiArCQl9Cj4gKwkJaTkxNV92bWFfcHV0KG5v cCk7Cj4gKwkJaTkxNV92bWFfcHV0KGJhc2UpOwo+ICsJCWlmIChlcnIpCj4gKwkJCWJyZWFrOwo+ ICsKPiArCQlwcl9pbmZvKCIlczogMTZLIE1JX05PT1AgY3ljbGVzOiAldVxuIiwKPiArCQkJZW5n aW5lLT5uYW1lLCB0cmlmaWx0ZXIoY3ljbGVzKSk7Cj4gKwl9Cj4gKwlpZiAocGVyZl9lbmQoZ3Qp KQo+ICsJCWVyciA9IC1FSU87Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiAraW50IGlu dGVsX2VuZ2luZV9jc19wZXJmX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKPiArewo+ICsJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsK PiArCQlTVUJURVNUKHBlcmZfbWlfYmJfc3RhcnQpLAo+ICsJCVNVQlRFU1QocGVyZl9taV9ub29w KSwKPiArCX07Cj4gKwo+ICsJaWYgKGludGVsX2d0X2lzX3dlZGdlZCgmaTkxNS0+Z3QpKQo+ICsJ CXJldHVybiAwOwo+ICsKPiArCXJldHVybiBpbnRlbF9ndF9saXZlX3N1YnRlc3RzKHRlc3RzLCAm aTkxNS0+Z3QpOwo+ICt9Cj4gIAo+ICBzdGF0aWMgaW50IGludGVsX21taW9fYmFzZXNfY2hlY2so dm9pZCAqYXJnKQo+ICB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cGNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BjaS5jCj4gaW5kZXggMWJiNzAxZDMy YTVkLi5kYTNlOWI1NzUyYWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9wY2kuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGNpLmMKPiBAQCAtMTAw Myw2ICsxMDAzLDEyIEBAIHN0YXRpYyBpbnQgaTkxNV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYg KnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCj4gIAkJcmV0dXJuIGVyciA+ IDAgPyAtRU5PVFRZIDogZXJyOwo+ICAJfQo+ICAKPiArCWVyciA9IGk5MTVfcGVyZl9zZWxmdGVz dHMocGRldik7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJaTkxNV9wY2lfcmVtb3ZlKHBkZXYpOwo+ICsJ CXJldHVybiBlcnIgPiAwID8gLUVOT1RUWSA6IGVycjsKPiArCX0KPiArCj4gIAlyZXR1cm4gMDsK PiAgfQo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zZWxmdGVz dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zZWxmdGVzdC5oCj4gaW5kZXggNGQ4ODIw NWRlNTFiLi45OGJjYjZmYTBhYjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9zZWxmdGVzdC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zZWxmdGVz dC5oCj4gQEAgLTM2LDYgKzM2LDcgQEAgc3RydWN0IGk5MTVfc2VsZnRlc3Qgewo+ICAJY2hhciAq ZmlsdGVyOwo+ICAJaW50IG1vY2s7Cj4gIAlpbnQgbGl2ZTsKPiArCWludCBwZXJmOwo+ICB9Owo+ ICAKPiAgI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNUKQo+IEBAIC00NSw2 ICs0Niw3IEBAIGV4dGVybiBzdHJ1Y3QgaTkxNV9zZWxmdGVzdCBpOTE1X3NlbGZ0ZXN0Owo+ICAK PiAgaW50IGk5MTVfbW9ja19zZWxmdGVzdHModm9pZCk7Cj4gIGludCBpOTE1X2xpdmVfc2VsZnRl c3RzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKPiAraW50IGk5MTVfcGVyZl9zZWxmdGVzdHMoc3Ry dWN0IHBjaV9kZXYgKnBkZXYpOwo+ICAKPiAgLyogV2UgZXh0cmFjdCB0aGUgZnVuY3Rpb24gZGVj bGFyYXRpb25zIGZyb20gaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oIGFuZAo+ICAgKiBpOTE1X2xpdmVf c2VsZnRlc3RzLmggQWRkIHlvdXIgdW5pdCB0ZXN0IGRlY2xhcmF0aW9ucyB0aGVyZSEKPiBAQCAt NjEsNiArNjMsNyBAQCBpbnQgaTkxNV9saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgcGNpX2RldiAqcGRl dik7Cj4gICN1bmRlZiBzZWxmdGVzdAo+ICAjZGVmaW5lIHNlbGZ0ZXN0KG5hbWUsIGZ1bmMpIGlu dCBmdW5jKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiAgI2luY2x1ZGUgInNlbGZ0 ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgiCj4gKyNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9w ZXJmX3NlbGZ0ZXN0cy5oIgo+ICAjdW5kZWYgc2VsZnRlc3QKPiAgCj4gIHN0cnVjdCBpOTE1X3N1 YnRlc3Qgewo+IEBAIC0xMDksNiArMTEyLDcgQEAgaW50IF9faTkxNV9zdWJ0ZXN0cyhjb25zdCBj aGFyICpjYWxsZXIsCj4gIAo+ICBzdGF0aWMgaW5saW5lIGludCBpOTE1X21vY2tfc2VsZnRlc3Rz KHZvaWQpIHsgcmV0dXJuIDA7IH0KPiAgc3RhdGljIGlubGluZSBpbnQgaTkxNV9saXZlX3NlbGZ0 ZXN0cyhzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyByZXR1cm4gMDsgfQo+ICtzdGF0aWMgaW5saW5l IGludCBpOTE1X3BlcmZfc2VsZnRlc3RzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IHJldHVybiAw OyB9Cj4gIAo+ICAjZGVmaW5lIEk5MTVfU0VMRlRFU1RfREVDTEFSRSh4KQo+ICAjZGVmaW5lIEk5 MTVfU0VMRlRFU1RfT05MWSh4KSAwCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X3BlcmZfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9wZXJmX3NlbGZ0ZXN0cy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwMDAuLmY3MTI5YTI0M2RhYQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9wZXJmX3NlbGZ0ZXN0cy5oCj4gQEAg LTAsMCArMSwxMyBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ ICsvKiBMaXN0IGVhY2ggdW5pdCB0ZXN0IGFzIHNlbGZ0ZXN0KG5hbWUsIGZ1bmN0aW9uKQo+ICsg Kgo+ICsgKiBUaGUgbmFtZSBpcyB1c2VkIGFzIGJvdGggYW4gZW51bSBhbmQgZXhwYW5kZWQgYXMg c3VidGVzdF9fbmFtZSB0byBjcmVhdGUKPiArICogYSBtb2R1bGUgcGFyYW1ldGVyLiBJdCBtdXN0 IGJlIHVuaXF1ZSBhbmQgbGVnYWwgZm9yIGEgQyBpZGVudGlmaWVyLgo+ICsgKgo+ICsgKiBUaGUg ZnVuY3Rpb24gc2hvdWxkIGJlIG9mIHR5cGUgaW50IGZ1bmN0aW9uKHZvaWQpLiBJdCBtYXkgYmUg Y29uZGl0aW9uYWxseQo+ICsgKiBjb21waWxlZCB1c2luZyAjaWYgSVNfRU5BQkxFRChEUk1fSTkx NV9TRUxGVEVTVCkuCj4gKyAqCj4gKyAqIFRlc3RzIGFyZSBleGVjdXRlZCBpbiBvcmRlciBieSBp Z3QvaTkxNV9zZWxmdGVzdAo+ICsgKi8KPiArc2VsZnRlc3QoZW5naW5lX2NzLCBpbnRlbF9lbmdp bmVfY3NfcGVyZl9zZWxmdGVzdHMpCj4gK3NlbGZ0ZXN0KGJsdCwgaTkxNV9nZW1fb2JqZWN0X2Js dF9wZXJmX3NlbGZ0ZXN0cykKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfc2VsZnRlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p OTE1X3NlbGZ0ZXN0LmMKPiBpbmRleCBhNmNjYTRhZDk2ZjYuLmQzYmY5ZWVmYjY4MiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9zZWxmdGVzdC5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfc2VsZnRlc3QuYwo+IEBA IC01Nyw2ICs1NywxMiBAQCBlbnVtIHsKPiAgI3VuZGVmIHNlbGZ0ZXN0Cj4gIH07Cj4gIAo+ICtl bnVtIHsKPiArI2RlZmluZSBzZWxmdGVzdChuYW1lLCBmdW5jKSBwZXJmXyMjbmFtZSwKPiArI2lu Y2x1ZGUgImk5MTVfcGVyZl9zZWxmdGVzdHMuaCIKPiArI3VuZGVmIHNlbGZ0ZXN0Cj4gK307Cj4g Kwo+ICBzdHJ1Y3Qgc2VsZnRlc3Qgewo+ICAJYm9vbCBlbmFibGVkOwo+ICAJY29uc3QgY2hhciAq bmFtZTsKPiBAQCAtNzgsNiArODQsMTIgQEAgc3RhdGljIHN0cnVjdCBzZWxmdGVzdCBsaXZlX3Nl bGZ0ZXN0c1tdID0gewo+ICB9Owo+ICAjdW5kZWYgc2VsZnRlc3QKPiAgCj4gKyNkZWZpbmUgc2Vs ZnRlc3QobiwgZikgW3BlcmZfIyNuXSA9IHsgLm5hbWUgPSAjbiwgeyAubGl2ZSA9IGYgfSB9LAo+ ICtzdGF0aWMgc3RydWN0IHNlbGZ0ZXN0IHBlcmZfc2VsZnRlc3RzW10gPSB7Cj4gKyNpbmNsdWRl ICJpOTE1X3BlcmZfc2VsZnRlc3RzLmgiCj4gK307Cj4gKyN1bmRlZiBzZWxmdGVzdAo+ICsKPiAg LyogRW1iZWQgdGhlIGxpbmUgbnVtYmVyIGludG8gdGhlIHBhcmFtZXRlciBuYW1lIHNvIHRoYXQg d2UgY2FuIG9yZGVyIHRlc3RzICovCj4gICNkZWZpbmUgc2VsZnRlc3QobiwgZnVuYykgc2VsZnRl c3RfMChuLCBmdW5jLCBwYXJhbShuKSkKPiAgI2RlZmluZSBwYXJhbShuKSBfX1BBU1RFKGlndF9f LCBfX1BBU1RFKF9fTElORV9fLCBfX21vY2tfIyNuKSkKPiBAQCAtOTMsNiArMTA1LDEzIEBAIG1v ZHVsZV9wYXJhbV9uYW1lZChpZCwgbGl2ZV9zZWxmdGVzdHNbbGl2ZV8jI25dLmVuYWJsZWQsIGJv b2wsIDA0MDApOwo+ICAjaW5jbHVkZSAiaTkxNV9saXZlX3NlbGZ0ZXN0cy5oIgo+ICAjdW5kZWYg c2VsZnRlc3RfMAo+ICAjdW5kZWYgcGFyYW0KPiArCj4gKyNkZWZpbmUgcGFyYW0obikgX19QQVNU RShpZ3RfXywgX19QQVNURShfX0xJTkVfXywgX19wZXJmXyMjbikpCj4gKyNkZWZpbmUgc2VsZnRl c3RfMChuLCBmdW5jLCBpZCkgXAo+ICttb2R1bGVfcGFyYW1fbmFtZWQoaWQsIHBlcmZfc2VsZnRl c3RzW3BlcmZfIyNuXS5lbmFibGVkLCBib29sLCAwNDAwKTsKPiArI2luY2x1ZGUgImk5MTVfcGVy Zl9zZWxmdGVzdHMuaCIKPiArI3VuZGVmIHNlbGZ0ZXN0XzAKPiArI3VuZGVmIHBhcmFtCj4gICN1 bmRlZiBzZWxmdGVzdAo+ICAKPiAgc3RhdGljIHZvaWQgc2V0X2RlZmF1bHRfdGVzdF9hbGwoc3Ry dWN0IHNlbGZ0ZXN0ICpzdCwgdW5zaWduZWQgaW50IGNvdW50KQo+IEBAIC0yMDAsNiArMjE5LDI3 IEBAIGludCBpOTE1X2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ICAJcmV0 dXJuIDA7Cj4gIH0KPiAgCj4gK2ludCBpOTE1X3BlcmZfc2VsZnRlc3RzKHN0cnVjdCBwY2lfZGV2 ICpwZGV2KQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWlmICghaTkxNV9zZWxmdGVzdC5wZXJm KQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWVyciA9IHJ1bl9zZWxmdGVzdHMocGVyZiwgcGRldl90 b19pOTE1KHBkZXYpKTsKPiArCWlmIChlcnIpIHsKPiArCQlpOTE1X3NlbGZ0ZXN0LnBlcmYgPSBl cnI7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwlpZiAoaTkxNV9zZWxmdGVzdC5wZXJm IDwgMCkgewo+ICsJCWk5MTVfc2VsZnRlc3QucGVyZiA9IC1FTk9UVFk7Cj4gKwkJcmV0dXJuIDE7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gIHN0YXRpYyBib29sIGFwcGx5X3N1 YnRlc3RfZmlsdGVyKGNvbnN0IGNoYXIgKmNhbGxlciwgY29uc3QgY2hhciAqbmFtZSkKPiAgewo+ ICAJY2hhciAqZmlsdGVyLCAqc2VwLCAqdG9rOwo+IEBAIC0zNjUsMyArNDA1LDYgQEAgTU9EVUxF X1BBUk1fREVTQyhtb2NrX3NlbGZ0ZXN0cywgIlJ1biBzZWxmdGVzdHMgYmVmb3JlIGxvYWRpbmcs IHVzaW5nIG1vY2sgaGFyZHcKPiAgCj4gIG1vZHVsZV9wYXJhbV9uYW1lZF91bnNhZmUobGl2ZV9z ZWxmdGVzdHMsIGk5MTVfc2VsZnRlc3QubGl2ZSwgaW50LCAwNDAwKTsKPiAgTU9EVUxFX1BBUk1f REVTQyhsaXZlX3NlbGZ0ZXN0cywgIlJ1biBzZWxmdGVzdHMgYWZ0ZXIgZHJpdmVyIGluaXRpYWxp c2F0aW9uIG9uIHRoZSBsaXZlIHN5c3RlbSAoMDpkaXNhYmxlZCBbZGVmYXVsdF0sIDE6cnVuIHRl c3RzIHRoZW4gY29udGludWUsIC0xOnJ1biB0ZXN0cyB0aGVuIGV4aXQgbW9kdWxlKSIpOwo+ICsK PiArbW9kdWxlX3BhcmFtX25hbWVkX3Vuc2FmZShwZXJmX3NlbGZ0ZXN0cywgaTkxNV9zZWxmdGVz dC5wZXJmLCBpbnQsIDA0MDApOwo+ICtNT0RVTEVfUEFSTV9ERVNDKHBlcmZfc2VsZnRlc3RzLCAi UnVuIHBlcmZvcm1hbmNlIG9yaWVudGF0ZWQgc2VsZnRlc3RzIGFmdGVyIGRyaXZlciBpbml0aWFs aXNhdGlvbiBvbiB0aGUgbGl2ZSBzeXN0ZW0gKDA6ZGlzYWJsZWQgW2RlZmF1bHRdLCAxOnJ1biB0 ZXN0cyB0aGVuIGNvbnRpbnVlLCAtMTpydW4gdGVzdHMgdGhlbiBleGl0IG1vZHVsZSkiKTsKPiAt LSAKPiAyLjI0LjAKPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4A81BC5DF60 for ; Thu, 7 Nov 2019 08:39:10 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 212B621D79 for ; Thu, 7 Nov 2019 08:39:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 212B621D79 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A98396EF01; Thu, 7 Nov 2019 08:39:09 +0000 (UTC) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id CDBF56EF01 for ; Thu, 7 Nov 2019 08:39:08 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Nov 2019 00:39:07 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,277,1569308400"; d="scan'208";a="214530538" Received: from gaia.fi.intel.com ([10.237.72.192]) by orsmga002.jf.intel.com with ESMTP; 07 Nov 2019 00:39:05 -0800 Received: by gaia.fi.intel.com (Postfix, from userid 1000) id 1DE5C5C02E1; Thu, 7 Nov 2019 10:39:00 +0200 (EET) From: Mika Kuoppala To: Chris Wilson , intel-gfx@lists.freedesktop.org In-Reply-To: <20191107081252.10542-10-chris@chris-wilson.co.uk> References: <20191107081252.10542-1-chris@chris-wilson.co.uk> <20191107081252.10542-10-chris@chris-wilson.co.uk> Date: Thu, 07 Nov 2019 10:39:00 +0200 Message-ID: <874kzgnkrf.fsf@gaia.fi.intel.com> MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH 10/28] drm/i915/selftests: Perform some basic cycle counting of MI ops X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Anna Karas Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191107083900.8H_k0QrSQE37rqHplchLfGwbOWCe_KsjYIWNO2DT0h4@z> Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gU29tZSBi YXNpYyBpbmZvcm1hdGlvbiB0aGF0IGlzIHVzZWZ1bCB0byBrbm93LCBzdWNoIGFzIGhvdyBtYW55 IGN5Y2xlcwo+IGlzIGEgTUlfTk9PUC4KPgo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8 Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENjOiBBbm5hIEthcmFzIDxhbm5hLmthcmFzQGlu dGVsLmNvbT4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4K PiAtLS0KPiAgLi4uL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3RfYmx0LmMgIHwg IDE1ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9jcy5jICB8 IDMzOSArKysrKysrKysrKysrKysrKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wY2ku YyAgICAgICAgICAgICAgIHwgICA2ICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zZWxm dGVzdC5oICAgICAgICAgIHwgICA0ICsKPiAgLi4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3Bl cmZfc2VsZnRlc3RzLmggIHwgIDEzICsKPiAgLi4uL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkx NV9zZWxmdGVzdC5jICAgIHwgIDQzICsrKwo+ICA2IGZpbGVzIGNoYW5nZWQsIDQxNyBpbnNlcnRp b25zKCspLCAzIGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcGVyZl9zZWxmdGVzdHMuaAo+Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0X2JsdC5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3RfYmx0 LmMKPiBpbmRleCAxNDZiYTcxY2U3OTcuLjE3ZmM2MGFhMTIzYSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdF9ibHQuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0X2Js dC5jCj4gQEAgLTUyNyw4ICs1MjcsNiBAQCBzdGF0aWMgaW50IGlndF9jb3B5X2JsdF9jdHgwKHZv aWQgKmFyZykKPiAgaW50IGk5MTVfZ2VtX29iamVjdF9ibHRfbGl2ZV9zZWxmdGVzdHMoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIHsKPiAgCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkx NV9zdWJ0ZXN0IHRlc3RzW10gPSB7Cj4gLQkJU1VCVEVTVChwZXJmX2ZpbGxfYmx0KSwKPiAtCQlT VUJURVNUKHBlcmZfY29weV9ibHQpLAo+ICAJCVNVQlRFU1QoaWd0X2ZpbGxfYmx0KSwKPiAgCQlT VUJURVNUKGlndF9maWxsX2JsdF9jdHgwKSwKPiAgCQlTVUJURVNUKGlndF9jb3B5X2JsdCksCj4g QEAgLTU0MywzICs1NDEsMTYgQEAgaW50IGk5MTVfZ2VtX29iamVjdF9ibHRfbGl2ZV9zZWxmdGVz dHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIAo+ICAJcmV0dXJuIGk5MTVfbGl2 ZV9zdWJ0ZXN0cyh0ZXN0cywgaTkxNSk7Cj4gIH0KPiArCj4gK2ludCBpOTE1X2dlbV9vYmplY3Rf Ymx0X3BlcmZfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICt7Cj4g KwlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0gewo+ICsJCVNVQlRF U1QocGVyZl9maWxsX2JsdCksCj4gKwkJU1VCVEVTVChwZXJmX2NvcHlfYmx0KSwKPiArCX07Cj4g Kwo+ICsJaWYgKGludGVsX2d0X2lzX3dlZGdlZCgmaTkxNS0+Z3QpKQo+ICsJCXJldHVybiAwOwo+ ICsKPiArCXJldHVybiBpOTE1X2xpdmVfc3VidGVzdHModGVzdHMsIGk5MTUpOwo+ICt9Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9jcy5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX2NzLmMKPiBpbmRleCAzODgw ZjA3YzI5YjguLmFhNmIxOTk3ZWRkYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9zZWxmdGVzdF9lbmdpbmVfY3MuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L3NlbGZ0ZXN0X2VuZ2luZV9jcy5jCj4gQEAgLTQsNyArNCwzNDQgQEAKPiAgICogQ29weXJpZ2h0 IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KPiAgICovCj4gIAo+IC0jaW5jbHVkZSAiLi4vaTkx NV9zZWxmdGVzdC5oIgo+ICsjaW5jbHVkZSA8bGludXgvc29ydC5oPgo+ICsKPiArI2luY2x1ZGUg ImludGVsX2d0X3BtLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9ycHMuaCIKPiArCj4gKyNpbmNsdWRl ICJpOTE1X3NlbGZ0ZXN0LmgiCj4gKyNpbmNsdWRlICJzZWxmdGVzdHMvaWd0X2ZsdXNoX3Rlc3Qu aCIKPiArCj4gKyNkZWZpbmUgQ09VTlQgNQo+ICsKPiArc3RhdGljIGludCBjbXBfdTMyKGNvbnN0 IHZvaWQgKkEsIGNvbnN0IHZvaWQgKkIpCj4gK3sKPiArCWNvbnN0IHUzMiAqYSA9IEEsICpiID0g QjsKPiArCj4gKwlyZXR1cm4gKmEgLSAqYjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcGVyZl9i ZWdpbihzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ICt7Cj4gKwlpbnRlbF9ndF9wbV9nZXQoZ3QpOwo+ ICsKPiArCS8qIEJvb3N0IGdwdWZyZXEgdG8gbWF4IFt3YWl0Ym9vc3RdIGFuZCBrZWVwIGl0IGZp eGVkICovCj4gKwlhdG9taWNfaW5jKCZndC0+cnBzLm51bV93YWl0ZXJzKTsKPiArCXNjaGVkdWxl X3dvcmsoJmd0LT5ycHMud29yayk7Cj4gKwlmbHVzaF93b3JrKCZndC0+cnBzLndvcmspOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHBlcmZfZW5kKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gK3sKPiAr CWF0b21pY19kZWMoJmd0LT5ycHMubnVtX3dhaXRlcnMpOwo+ICsJaW50ZWxfZ3RfcG1fcHV0KGd0 KTsKPiArCj4gKwlyZXR1cm4gaWd0X2ZsdXNoX3Rlc3QoZ3QtPmk5MTUpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHdyaXRlX3RpbWVzdGFtcChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgaW50IHNs b3QpCj4gK3sKPiArCXUzMiBjbWQ7Cj4gKwl1MzIgKmNzOwo+ICsKPiArCWNzID0gaW50ZWxfcmlu Z19iZWdpbihycSwgNCk7Cj4gKwlpZiAoSVNfRVJSKGNzKSkKPiArCQlyZXR1cm4gUFRSX0VSUihj cyk7Cj4gKwo+ICsJY21kID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgTUlfVVNFX0dHVFQ7Cj4g KwlpZiAoSU5URUxfR0VOKHJxLT5pOTE1KSA+PSA4KQo+ICsJCWNtZCsrOwo+ICsJKmNzKysgPSBj bWQ7Cj4gKwkqY3MrKyA9IHJxLT5lbmdpbmUtPm1taW9fYmFzZSArIDB4MzU4OwoKd2UgaGF2ZSBS SU5HX1RJTUVTVEFNUC4KClRlc3Qgc28gc2hvcnQgd2UgZG9uJ3QgbmVlZCB0aGUgVURXIEkgc3Vw cG9zZT8KCi1NaWthLCBqdXN0IHN0cm9sbGluZyBhcm91bmQgaGVyZS4KCj4gKwkqY3MrKyA9IGk5 MTVfcmVxdWVzdF90aW1lbGluZShycSktPmh3c3Bfb2Zmc2V0ICsgc2xvdCAqIHNpemVvZih1MzIp Owo+ICsJKmNzKysgPSAwOwo+ICsKPiArCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpjcmVhdGVf ZW1wdHlfYmF0Y2goc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gKwl1MzIg KmNzOwo+ICsJaW50IGVycjsKPiArCj4gKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2lu dGVybmFsKGNlLT5lbmdpbmUtPmk5MTUsIFBBR0VfU0laRSk7Cj4gKwlpZiAoSVNfRVJSKG9iaikp Cj4gKwkJcmV0dXJuIEVSUl9DQVNUKG9iaik7Cj4gKwo+ICsJY3MgPSBpOTE1X2dlbV9vYmplY3Rf cGluX21hcChvYmosIEk5MTVfTUFQX1dCKTsKPiArCWlmIChJU19FUlIoY3MpKSB7Cj4gKwkJaTkx NV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJCXJldHVybiBFUlJfQ0FTVChjcyk7Cj4gKwl9Cj4g Kwo+ICsJY3NbMF0gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsKPiArCWk5MTVfZ2VtX29iamVj dF9mbHVzaF9tYXAob2JqKTsKPiArCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAob2JqKTsKPiAr Cj4gKwl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosIGNlLT52bSwgTlVMTCk7Cj4gKwlpZiAo SVNfRVJSKHZtYSkpIHsKPiArCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gKwkJcmV0dXJu IHZtYTsKPiArCX0KPiArCj4gKwllcnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNF Uik7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJCXJl dHVybiBFUlJfUFRSKGVycik7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHZtYTsKPiArfQo+ICsKPiAr c3RhdGljIHUzMiB0cmlmaWx0ZXIodTMyICphKQo+ICt7Cj4gKwl1NjQgc3VtOwo+ICsKPiArCXNv cnQoYSwgQ09VTlQsIHNpemVvZigqYSksIGNtcF91MzIsIE5VTEwpOwo+ICsKPiArCXN1bSArPSBt dWxfdTMyX3UzMihhWzJdLCAyKTsKPiArCXN1bSArPSBhWzFdOwo+ICsJc3VtICs9IGFbM107Cj4g Kwo+ICsJcmV0dXJuIHN1bSA+PiAyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBlcmZfbWlfYmJf c3RhcnQodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gYXJnOwo+ICsJ c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQg aWQ7Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA8IDcp IC8qIGZvciBwZXItZW5naW5lIENTX1RJTUVTVEFNUCAqLwo+ICsJCXJldHVybiAwOwo+ICsKPiAr CXBlcmZfYmVnaW4oZ3QpOwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZ3QsIGlkKSB7Cj4g KwkJc3RydWN0IGludGVsX2NvbnRleHQgKmNlID0gZW5naW5lLT5rZXJuZWxfY29udGV4dDsKPiAr CQlzdHJ1Y3QgaTkxNV92bWEgKmJhdGNoOwo+ICsJCXUzMiBjeWNsZXNbQ09VTlRdOwo+ICsJCWlu dCBpOwo+ICsKPiArCQliYXRjaCA9IGNyZWF0ZV9lbXB0eV9iYXRjaChjZSk7Cj4gKwkJaWYgKElT X0VSUihiYXRjaCkpIHsKPiArCQkJZXJyID0gUFRSX0VSUihiYXRjaCk7Cj4gKwkJCWJyZWFrOwo+ ICsJCX0KPiArCj4gKwkJZXJyID0gaTkxNV92bWFfc3luYyhiYXRjaCk7Cj4gKwkJaWYgKGVycikg ewo+ICsJCQlpOTE1X3ZtYV9wdXQoYmF0Y2gpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJ CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN5Y2xlcyk7IGkrKykgewo+ICsJCQlzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycTsKPiArCj4gKwkJCXJxID0gaTkxNV9yZXF1ZXN0X2NyZWF0ZShjZSk7 Cj4gKwkJCWlmIChJU19FUlIocnEpKSB7Cj4gKwkJCQllcnIgPSBQVFJfRVJSKHJxKTsKPiArCQkJ CWJyZWFrOwo+ICsJCQl9Cj4gKwo+ICsJCQllcnIgPSB3cml0ZV90aW1lc3RhbXAocnEsIDIpOwo+ ICsJCQlpZiAoZXJyKQo+ICsJCQkJZ290byBvdXQ7Cj4gKwo+ICsJCQllcnIgPSBycS0+ZW5naW5l LT5lbWl0X2JiX3N0YXJ0KHJxLAo+ICsJCQkJCQkJYmF0Y2gtPm5vZGUuc3RhcnQsIDgsCj4gKwkJ CQkJCQkwKTsKPiArCQkJaWYgKGVycikKPiArCQkJCWdvdG8gb3V0Owo+ICsKPiArCQkJZXJyID0g d3JpdGVfdGltZXN0YW1wKHJxLCAzKTsKPiArCQkJaWYgKGVycikKPiArCQkJCWdvdG8gb3V0Owo+ ICsKPiArb3V0Ogo+ICsJCQlpOTE1X3JlcXVlc3RfZ2V0KHJxKTsKPiArCQkJaTkxNV9yZXF1ZXN0 X2FkZChycSk7Cj4gKwo+ICsJCQlpZiAoaTkxNV9yZXF1ZXN0X3dhaXQocnEsIDAsIEhaIC8gNSkg PCAwKQo+ICsJCQkJZXJyID0gLUVJTzsKPiArCQkJaTkxNV9yZXF1ZXN0X3B1dChycSk7Cj4gKwkJ CWlmIChlcnIpCj4gKwkJCQlicmVhazsKPiArCj4gKwkJCWN5Y2xlc1tpXSA9IHJxLT5od3NwX3Nl cW5vWzNdIC0gcnEtPmh3c3Bfc2Vxbm9bMl07Cj4gKwkJfQo+ICsJCWk5MTVfdm1hX3B1dChiYXRj aCk7Cj4gKwkJaWYgKGVycikKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXByX2luZm8oIiVzOiBNSV9C Ql9TVEFSVCBjeWNsZXM6ICV1XG4iLAo+ICsJCQllbmdpbmUtPm5hbWUsIHRyaWZpbHRlcihjeWNs ZXMpKTsKPiArCX0KPiArCWlmIChwZXJmX2VuZChndCkpCj4gKwkJZXJyID0gLUVJTzsKPiArCj4g KwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpjcmVhdGVf bm9wX2JhdGNoKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iajsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICsJdTMyICpj czsKPiArCWludCBlcnI7Cj4gKwo+ICsJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9pbnRl cm5hbChjZS0+ZW5naW5lLT5pOTE1LCBTWl82NEspOwo+ICsJaWYgKElTX0VSUihvYmopKQo+ICsJ CXJldHVybiBFUlJfQ0FTVChvYmopOwo+ICsKPiArCWNzID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9t YXAob2JqLCBJOTE1X01BUF9XQik7Cj4gKwlpZiAoSVNfRVJSKGNzKSkgewo+ICsJCWk5MTVfZ2Vt X29iamVjdF9wdXQob2JqKTsKPiArCQlyZXR1cm4gRVJSX0NBU1QoY3MpOwo+ICsJfQo+ICsKPiAr CW1lbXNldChjcywgMCwgU1pfNjRLKTsKPiArCWNzW1NaXzY0SyAvIHNpemVvZigqY3MpIC0gMV0g PSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsKPiArCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9tYXAo b2JqKTsKPiArCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAob2JqKTsKPiArCj4gKwl2bWEgPSBp OTE1X3ZtYV9pbnN0YW5jZShvYmosIGNlLT52bSwgTlVMTCk7Cj4gKwlpZiAoSVNfRVJSKHZtYSkp IHsKPiArCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gKwkJcmV0dXJuIHZtYTsKPiArCX0K PiArCj4gKwllcnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNFUik7Cj4gKwlpZiAo ZXJyKSB7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJCXJldHVybiBFUlJfUFRS KGVycik7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHZtYTsKPiArfQo+ICsKPiArc3RhdGljIGludCBw ZXJmX21pX25vb3Aodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gYXJn Owo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJZW51bSBpbnRlbF9lbmdp bmVfaWQgaWQ7Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwlpZiAoSU5URUxfR0VOKGd0LT5pOTE1 KSA8IDcpIC8qIGZvciBwZXItZW5naW5lIENTX1RJTUVTVEFNUCAqLwo+ICsJCXJldHVybiAwOwo+ ICsKPiArCXBlcmZfYmVnaW4oZ3QpOwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZ3QsIGlk KSB7Cj4gKwkJc3RydWN0IGludGVsX2NvbnRleHQgKmNlID0gZW5naW5lLT5rZXJuZWxfY29udGV4 dDsKPiArCQlzdHJ1Y3QgaTkxNV92bWEgKmJhc2UsICpub3A7Cj4gKwkJdTMyIGN5Y2xlc1tDT1VO VF07Cj4gKwkJaW50IGk7Cj4gKwo+ICsJCWJhc2UgPSBjcmVhdGVfZW1wdHlfYmF0Y2goY2UpOwo+ ICsJCWlmIChJU19FUlIoYmFzZSkpIHsKPiArCQkJZXJyID0gUFRSX0VSUihiYXNlKTsKPiArCQkJ YnJlYWs7Cj4gKwkJfQo+ICsKPiArCQllcnIgPSBpOTE1X3ZtYV9zeW5jKGJhc2UpOwo+ICsJCWlm IChlcnIpIHsKPiArCQkJaTkxNV92bWFfcHV0KGJhc2UpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4g Kwo+ICsJCW5vcCA9IGNyZWF0ZV9ub3BfYmF0Y2goY2UpOwo+ICsJCWlmIChJU19FUlIobm9wKSkg ewo+ICsJCQllcnIgPSBQVFJfRVJSKG5vcCk7Cj4gKwkJCWk5MTVfdm1hX3B1dChiYXNlKTsKPiAr CQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQllcnIgPSBpOTE1X3ZtYV9zeW5jKG5vcCk7Cj4gKwkJ aWYgKGVycikgewo+ICsJCQlpOTE1X3ZtYV9wdXQobm9wKTsKPiArCQkJaTkxNV92bWFfcHV0KGJh c2UpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGN5Y2xlcyk7IGkrKykgewo+ICsJCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiArCj4g KwkJCXJxID0gaTkxNV9yZXF1ZXN0X2NyZWF0ZShjZSk7Cj4gKwkJCWlmIChJU19FUlIocnEpKSB7 Cj4gKwkJCQllcnIgPSBQVFJfRVJSKHJxKTsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwo+ICsJ CQllcnIgPSB3cml0ZV90aW1lc3RhbXAocnEsIDIpOwo+ICsJCQlpZiAoZXJyKQo+ICsJCQkJZ290 byBvdXQ7Cj4gKwo+ICsJCQllcnIgPSBycS0+ZW5naW5lLT5lbWl0X2JiX3N0YXJ0KHJxLAo+ICsJ CQkJCQkJYmFzZS0+bm9kZS5zdGFydCwgOCwKPiArCQkJCQkJCTApOwo+ICsJCQlpZiAoZXJyKQo+ ICsJCQkJZ290byBvdXQ7Cj4gKwo+ICsJCQllcnIgPSB3cml0ZV90aW1lc3RhbXAocnEsIDMpOwo+ ICsJCQlpZiAoZXJyKQo+ICsJCQkJZ290byBvdXQ7Cj4gKwo+ICsJCQllcnIgPSBycS0+ZW5naW5l LT5lbWl0X2JiX3N0YXJ0KHJxLAo+ICsJCQkJCQkJbm9wLT5ub2RlLnN0YXJ0LCA0MDk2LAo+ICsJ CQkJCQkJMCk7Cj4gKwkJCWlmIChlcnIpCj4gKwkJCQlnb3RvIG91dDsKPiArCj4gKwkJCWVyciA9 IHdyaXRlX3RpbWVzdGFtcChycSwgNCk7Cj4gKwkJCWlmIChlcnIpCj4gKwkJCQlnb3RvIG91dDsK PiArCj4gK291dDoKPiArCQkJaTkxNV9yZXF1ZXN0X2dldChycSk7Cj4gKwkJCWk5MTVfcmVxdWVz dF9hZGQocnEpOwo+ICsKPiArCQkJaWYgKGk5MTVfcmVxdWVzdF93YWl0KHJxLCAwLCBIWiAvIDUp IDwgMCkKPiArCQkJCWVyciA9IC1FSU87Cj4gKwkJCWk5MTVfcmVxdWVzdF9wdXQocnEpOwo+ICsJ CQlpZiAoZXJyKQo+ICsJCQkJYnJlYWs7Cj4gKwo+ICsJCQljeWNsZXNbaV0gPQo+ICsJCQkJKHJx LT5od3NwX3NlcW5vWzRdIC0gcnEtPmh3c3Bfc2Vxbm9bM10pIC0KPiArCQkJCShycS0+aHdzcF9z ZXFub1szXSAtIHJxLT5od3NwX3NlcW5vWzJdKTsKPiArCQl9Cj4gKwkJaTkxNV92bWFfcHV0KG5v cCk7Cj4gKwkJaTkxNV92bWFfcHV0KGJhc2UpOwo+ICsJCWlmIChlcnIpCj4gKwkJCWJyZWFrOwo+ ICsKPiArCQlwcl9pbmZvKCIlczogMTZLIE1JX05PT1AgY3ljbGVzOiAldVxuIiwKPiArCQkJZW5n aW5lLT5uYW1lLCB0cmlmaWx0ZXIoY3ljbGVzKSk7Cj4gKwl9Cj4gKwlpZiAocGVyZl9lbmQoZ3Qp KQo+ICsJCWVyciA9IC1FSU87Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiAraW50IGlu dGVsX2VuZ2luZV9jc19wZXJmX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKPiArewo+ICsJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsK PiArCQlTVUJURVNUKHBlcmZfbWlfYmJfc3RhcnQpLAo+ICsJCVNVQlRFU1QocGVyZl9taV9ub29w KSwKPiArCX07Cj4gKwo+ICsJaWYgKGludGVsX2d0X2lzX3dlZGdlZCgmaTkxNS0+Z3QpKQo+ICsJ CXJldHVybiAwOwo+ICsKPiArCXJldHVybiBpbnRlbF9ndF9saXZlX3N1YnRlc3RzKHRlc3RzLCAm aTkxNS0+Z3QpOwo+ICt9Cj4gIAo+ICBzdGF0aWMgaW50IGludGVsX21taW9fYmFzZXNfY2hlY2so dm9pZCAqYXJnKQo+ICB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cGNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BjaS5jCj4gaW5kZXggMWJiNzAxZDMy YTVkLi5kYTNlOWI1NzUyYWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9wY2kuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGNpLmMKPiBAQCAtMTAw Myw2ICsxMDAzLDEyIEBAIHN0YXRpYyBpbnQgaTkxNV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYg KnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCj4gIAkJcmV0dXJuIGVyciA+ IDAgPyAtRU5PVFRZIDogZXJyOwo+ICAJfQo+ICAKPiArCWVyciA9IGk5MTVfcGVyZl9zZWxmdGVz dHMocGRldik7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJaTkxNV9wY2lfcmVtb3ZlKHBkZXYpOwo+ICsJ CXJldHVybiBlcnIgPiAwID8gLUVOT1RUWSA6IGVycjsKPiArCX0KPiArCj4gIAlyZXR1cm4gMDsK PiAgfQo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zZWxmdGVz dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zZWxmdGVzdC5oCj4gaW5kZXggNGQ4ODIw NWRlNTFiLi45OGJjYjZmYTBhYjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9zZWxmdGVzdC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zZWxmdGVz dC5oCj4gQEAgLTM2LDYgKzM2LDcgQEAgc3RydWN0IGk5MTVfc2VsZnRlc3Qgewo+ICAJY2hhciAq ZmlsdGVyOwo+ICAJaW50IG1vY2s7Cj4gIAlpbnQgbGl2ZTsKPiArCWludCBwZXJmOwo+ICB9Owo+ ICAKPiAgI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNUKQo+IEBAIC00NSw2 ICs0Niw3IEBAIGV4dGVybiBzdHJ1Y3QgaTkxNV9zZWxmdGVzdCBpOTE1X3NlbGZ0ZXN0Owo+ICAK PiAgaW50IGk5MTVfbW9ja19zZWxmdGVzdHModm9pZCk7Cj4gIGludCBpOTE1X2xpdmVfc2VsZnRl c3RzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKPiAraW50IGk5MTVfcGVyZl9zZWxmdGVzdHMoc3Ry dWN0IHBjaV9kZXYgKnBkZXYpOwo+ICAKPiAgLyogV2UgZXh0cmFjdCB0aGUgZnVuY3Rpb24gZGVj bGFyYXRpb25zIGZyb20gaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oIGFuZAo+ICAgKiBpOTE1X2xpdmVf c2VsZnRlc3RzLmggQWRkIHlvdXIgdW5pdCB0ZXN0IGRlY2xhcmF0aW9ucyB0aGVyZSEKPiBAQCAt NjEsNiArNjMsNyBAQCBpbnQgaTkxNV9saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgcGNpX2RldiAqcGRl dik7Cj4gICN1bmRlZiBzZWxmdGVzdAo+ICAjZGVmaW5lIHNlbGZ0ZXN0KG5hbWUsIGZ1bmMpIGlu dCBmdW5jKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiAgI2luY2x1ZGUgInNlbGZ0 ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgiCj4gKyNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9w ZXJmX3NlbGZ0ZXN0cy5oIgo+ICAjdW5kZWYgc2VsZnRlc3QKPiAgCj4gIHN0cnVjdCBpOTE1X3N1 YnRlc3Qgewo+IEBAIC0xMDksNiArMTEyLDcgQEAgaW50IF9faTkxNV9zdWJ0ZXN0cyhjb25zdCBj aGFyICpjYWxsZXIsCj4gIAo+ICBzdGF0aWMgaW5saW5lIGludCBpOTE1X21vY2tfc2VsZnRlc3Rz KHZvaWQpIHsgcmV0dXJuIDA7IH0KPiAgc3RhdGljIGlubGluZSBpbnQgaTkxNV9saXZlX3NlbGZ0 ZXN0cyhzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyByZXR1cm4gMDsgfQo+ICtzdGF0aWMgaW5saW5l IGludCBpOTE1X3BlcmZfc2VsZnRlc3RzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IHJldHVybiAw OyB9Cj4gIAo+ICAjZGVmaW5lIEk5MTVfU0VMRlRFU1RfREVDTEFSRSh4KQo+ICAjZGVmaW5lIEk5 MTVfU0VMRlRFU1RfT05MWSh4KSAwCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X3BlcmZfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9wZXJmX3NlbGZ0ZXN0cy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwMDAuLmY3MTI5YTI0M2RhYQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9wZXJmX3NlbGZ0ZXN0cy5oCj4gQEAg LTAsMCArMSwxMyBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ ICsvKiBMaXN0IGVhY2ggdW5pdCB0ZXN0IGFzIHNlbGZ0ZXN0KG5hbWUsIGZ1bmN0aW9uKQo+ICsg Kgo+ICsgKiBUaGUgbmFtZSBpcyB1c2VkIGFzIGJvdGggYW4gZW51bSBhbmQgZXhwYW5kZWQgYXMg c3VidGVzdF9fbmFtZSB0byBjcmVhdGUKPiArICogYSBtb2R1bGUgcGFyYW1ldGVyLiBJdCBtdXN0 IGJlIHVuaXF1ZSBhbmQgbGVnYWwgZm9yIGEgQyBpZGVudGlmaWVyLgo+ICsgKgo+ICsgKiBUaGUg ZnVuY3Rpb24gc2hvdWxkIGJlIG9mIHR5cGUgaW50IGZ1bmN0aW9uKHZvaWQpLiBJdCBtYXkgYmUg Y29uZGl0aW9uYWxseQo+ICsgKiBjb21waWxlZCB1c2luZyAjaWYgSVNfRU5BQkxFRChEUk1fSTkx NV9TRUxGVEVTVCkuCj4gKyAqCj4gKyAqIFRlc3RzIGFyZSBleGVjdXRlZCBpbiBvcmRlciBieSBp Z3QvaTkxNV9zZWxmdGVzdAo+ICsgKi8KPiArc2VsZnRlc3QoZW5naW5lX2NzLCBpbnRlbF9lbmdp bmVfY3NfcGVyZl9zZWxmdGVzdHMpCj4gK3NlbGZ0ZXN0KGJsdCwgaTkxNV9nZW1fb2JqZWN0X2Js dF9wZXJmX3NlbGZ0ZXN0cykKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfc2VsZnRlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p OTE1X3NlbGZ0ZXN0LmMKPiBpbmRleCBhNmNjYTRhZDk2ZjYuLmQzYmY5ZWVmYjY4MiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9zZWxmdGVzdC5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfc2VsZnRlc3QuYwo+IEBA IC01Nyw2ICs1NywxMiBAQCBlbnVtIHsKPiAgI3VuZGVmIHNlbGZ0ZXN0Cj4gIH07Cj4gIAo+ICtl bnVtIHsKPiArI2RlZmluZSBzZWxmdGVzdChuYW1lLCBmdW5jKSBwZXJmXyMjbmFtZSwKPiArI2lu Y2x1ZGUgImk5MTVfcGVyZl9zZWxmdGVzdHMuaCIKPiArI3VuZGVmIHNlbGZ0ZXN0Cj4gK307Cj4g Kwo+ICBzdHJ1Y3Qgc2VsZnRlc3Qgewo+ICAJYm9vbCBlbmFibGVkOwo+ICAJY29uc3QgY2hhciAq bmFtZTsKPiBAQCAtNzgsNiArODQsMTIgQEAgc3RhdGljIHN0cnVjdCBzZWxmdGVzdCBsaXZlX3Nl bGZ0ZXN0c1tdID0gewo+ICB9Owo+ICAjdW5kZWYgc2VsZnRlc3QKPiAgCj4gKyNkZWZpbmUgc2Vs ZnRlc3QobiwgZikgW3BlcmZfIyNuXSA9IHsgLm5hbWUgPSAjbiwgeyAubGl2ZSA9IGYgfSB9LAo+ ICtzdGF0aWMgc3RydWN0IHNlbGZ0ZXN0IHBlcmZfc2VsZnRlc3RzW10gPSB7Cj4gKyNpbmNsdWRl ICJpOTE1X3BlcmZfc2VsZnRlc3RzLmgiCj4gK307Cj4gKyN1bmRlZiBzZWxmdGVzdAo+ICsKPiAg LyogRW1iZWQgdGhlIGxpbmUgbnVtYmVyIGludG8gdGhlIHBhcmFtZXRlciBuYW1lIHNvIHRoYXQg d2UgY2FuIG9yZGVyIHRlc3RzICovCj4gICNkZWZpbmUgc2VsZnRlc3QobiwgZnVuYykgc2VsZnRl c3RfMChuLCBmdW5jLCBwYXJhbShuKSkKPiAgI2RlZmluZSBwYXJhbShuKSBfX1BBU1RFKGlndF9f LCBfX1BBU1RFKF9fTElORV9fLCBfX21vY2tfIyNuKSkKPiBAQCAtOTMsNiArMTA1LDEzIEBAIG1v ZHVsZV9wYXJhbV9uYW1lZChpZCwgbGl2ZV9zZWxmdGVzdHNbbGl2ZV8jI25dLmVuYWJsZWQsIGJv b2wsIDA0MDApOwo+ICAjaW5jbHVkZSAiaTkxNV9saXZlX3NlbGZ0ZXN0cy5oIgo+ICAjdW5kZWYg c2VsZnRlc3RfMAo+ICAjdW5kZWYgcGFyYW0KPiArCj4gKyNkZWZpbmUgcGFyYW0obikgX19QQVNU RShpZ3RfXywgX19QQVNURShfX0xJTkVfXywgX19wZXJmXyMjbikpCj4gKyNkZWZpbmUgc2VsZnRl c3RfMChuLCBmdW5jLCBpZCkgXAo+ICttb2R1bGVfcGFyYW1fbmFtZWQoaWQsIHBlcmZfc2VsZnRl c3RzW3BlcmZfIyNuXS5lbmFibGVkLCBib29sLCAwNDAwKTsKPiArI2luY2x1ZGUgImk5MTVfcGVy Zl9zZWxmdGVzdHMuaCIKPiArI3VuZGVmIHNlbGZ0ZXN0XzAKPiArI3VuZGVmIHBhcmFtCj4gICN1 bmRlZiBzZWxmdGVzdAo+ICAKPiAgc3RhdGljIHZvaWQgc2V0X2RlZmF1bHRfdGVzdF9hbGwoc3Ry dWN0IHNlbGZ0ZXN0ICpzdCwgdW5zaWduZWQgaW50IGNvdW50KQo+IEBAIC0yMDAsNiArMjE5LDI3 IEBAIGludCBpOTE1X2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ICAJcmV0 dXJuIDA7Cj4gIH0KPiAgCj4gK2ludCBpOTE1X3BlcmZfc2VsZnRlc3RzKHN0cnVjdCBwY2lfZGV2 ICpwZGV2KQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWlmICghaTkxNV9zZWxmdGVzdC5wZXJm KQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWVyciA9IHJ1bl9zZWxmdGVzdHMocGVyZiwgcGRldl90 b19pOTE1KHBkZXYpKTsKPiArCWlmIChlcnIpIHsKPiArCQlpOTE1X3NlbGZ0ZXN0LnBlcmYgPSBl cnI7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwlpZiAoaTkxNV9zZWxmdGVzdC5wZXJm IDwgMCkgewo+ICsJCWk5MTVfc2VsZnRlc3QucGVyZiA9IC1FTk9UVFk7Cj4gKwkJcmV0dXJuIDE7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gIHN0YXRpYyBib29sIGFwcGx5X3N1 YnRlc3RfZmlsdGVyKGNvbnN0IGNoYXIgKmNhbGxlciwgY29uc3QgY2hhciAqbmFtZSkKPiAgewo+ ICAJY2hhciAqZmlsdGVyLCAqc2VwLCAqdG9rOwo+IEBAIC0zNjUsMyArNDA1LDYgQEAgTU9EVUxF X1BBUk1fREVTQyhtb2NrX3NlbGZ0ZXN0cywgIlJ1biBzZWxmdGVzdHMgYmVmb3JlIGxvYWRpbmcs IHVzaW5nIG1vY2sgaGFyZHcKPiAgCj4gIG1vZHVsZV9wYXJhbV9uYW1lZF91bnNhZmUobGl2ZV9z ZWxmdGVzdHMsIGk5MTVfc2VsZnRlc3QubGl2ZSwgaW50LCAwNDAwKTsKPiAgTU9EVUxFX1BBUk1f REVTQyhsaXZlX3NlbGZ0ZXN0cywgIlJ1biBzZWxmdGVzdHMgYWZ0ZXIgZHJpdmVyIGluaXRpYWxp c2F0aW9uIG9uIHRoZSBsaXZlIHN5c3RlbSAoMDpkaXNhYmxlZCBbZGVmYXVsdF0sIDE6cnVuIHRl c3RzIHRoZW4gY29udGludWUsIC0xOnJ1biB0ZXN0cyB0aGVuIGV4aXQgbW9kdWxlKSIpOwo+ICsK PiArbW9kdWxlX3BhcmFtX25hbWVkX3Vuc2FmZShwZXJmX3NlbGZ0ZXN0cywgaTkxNV9zZWxmdGVz dC5wZXJmLCBpbnQsIDA0MDApOwo+ICtNT0RVTEVfUEFSTV9ERVNDKHBlcmZfc2VsZnRlc3RzLCAi UnVuIHBlcmZvcm1hbmNlIG9yaWVudGF0ZWQgc2VsZnRlc3RzIGFmdGVyIGRyaXZlciBpbml0aWFs aXNhdGlvbiBvbiB0aGUgbGl2ZSBzeXN0ZW0gKDA6ZGlzYWJsZWQgW2RlZmF1bHRdLCAxOnJ1biB0 ZXN0cyB0aGVuIGNvbnRpbnVlLCAtMTpydW4gdGVzdHMgdGhlbiBleGl0IG1vZHVsZSkiKTsKPiAt LSAKPiAyLjI0LjAKPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=