From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH] drm/i915/preemption: Allow preemption between submission ports Date: Fri, 23 Feb 2018 17:18:17 +0200 Message-ID: <877er3spja.fsf@gaia.fi.intel.com> References: <20180222141154.21504-1-chris@chris-wilson.co.uk> <20180222142229.14517-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 75B9A6F1AC for ; Fri, 23 Feb 2018 15:21:54 +0000 (UTC) In-Reply-To: <20180222142229.14517-1-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 List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gU29tZXRp bWVzIHdlIG5lZWQgdG8gYm9vc3QgdGhlIHByaW9yaXR5IG9mIGFuIGluLWZsaWdodCByZXF1ZXN0 LCB3aGljaAo+IG1heSBsZWFkIHRvIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlIHNlY29uZCBzdWJt aXNzaW9uIHBvcnQgdGhlbiBjb250YWlucwo+IGEgaGlnaGVyIHByaW9yaXR5IGNvbnRleHQgdGhh biB0aGUgZmlyc3QgYW5kIHNvIHdlIG5lZWQgdG8gaW5qZWN0IGEKPiBwcmVlbXB0aW9uIGV2ZW50 LiBUbyBkbyBzbyB3ZSBtdXN0IGFsd2F5cyBjaGVjayBpbnNpZGUKPiBleGVjbGlzdHNfZGVxdWV1 ZSgpIHdoZXRoZXIgdGhlcmUgaXMgYSBwcmlvcml0eSBpbnZlcnNpb24gYmV0d2VlbiB0aGUKPiBw b3J0cyB0aGVtc2VsdmVzIGFzIHdlbGwgYXMgdGhlIGhlYWQgb2YgdGhlIHByaW9yaXR5IHNvcnRl ZCBxdWV1ZSwgYW5kIHdlCj4gY2Fubm90IGp1c3Qgc2tpcCBkZXF1ZXVpbmcgaWYgdGhlIHF1ZXVl IGlzIGVtcHR5Lgo+Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13 aWxzb24uY28udWs+Cj4gQ2M6IE1pY2hhxYIgV2luaWFyc2tpIDxtaWNoYWwud2luaWFyc2tpQGlu dGVsLmNvbT4KPiBDYzogTWljaGVsIFRoaWVycnkgPG1pY2hlbC50aGllcnJ5QGludGVsLmNvbT4K PiBDYzogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRlbC5jb20+Cj4gQ2M6 IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CgpSZXZpZXdlZC1ieTog TWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRlbC5jb20+Cgo+IC0tLQo+IFJl YmFzZSBmb3IgY29uZmxpY3RzCj4gLUNocmlzCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2VuZ2luZV9jcy5jICAgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9ndWNfc3VibWlzc2lvbi5jIHwgIDE3ICstLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9scmMuYyAgICAgICAgICAgIHwgMTYxICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oICAgICB8ICAgNSArCj4g IDQgZmlsZXMgY2hhbmdlZCwgMTA3IGluc2VydGlvbnMoKyksIDc4IGRlbGV0aW9ucygtKQo+Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMKPiBpbmRleCBjMzE1NDQ0MDY5NzQu LmNlN2ZjZjU1YmExOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9l bmdpbmVfY3MuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5j Cj4gQEAgLTQyMyw2ICs0MjMsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9lbmdpbmVfaW5pdF9leGVj bGlzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAlCVUlMRF9CVUdfT05fTk9U X1BPV0VSX09GXzIoZXhlY2xpc3RzX251bV9wb3J0cyhleGVjbGlzdHMpKTsKPiAgCUdFTV9CVUdf T04oZXhlY2xpc3RzX251bV9wb3J0cyhleGVjbGlzdHMpID4gRVhFQ0xJU1RfTUFYX1BPUlRTKTsK PiAgCj4gKwlleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5ID0gSU5UX01JTjsKPiAgCWV4ZWNsaXN0 cy0+cXVldWUgPSBSQl9ST09UOwo+ICAJZXhlY2xpc3RzLT5maXJzdCA9IE5VTEw7Cj4gIH0KPiBA QCAtMTkwMyw2ICsxOTA0LDcgQEAgdm9pZCBpbnRlbF9lbmdpbmVfZHVtcChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsCj4gIAlzcGluX2xvY2tfaXJxKCZlbmdpbmUtPnRpbWVsaW5lLT5s b2NrKTsKPiAgCWxpc3RfZm9yX2VhY2hfZW50cnkocnEsICZlbmdpbmUtPnRpbWVsaW5lLT5yZXF1 ZXN0cywgbGluaykKPiAgCQlwcmludF9yZXF1ZXN0KG0sIHJxLCAiXHRcdEUgIik7Cj4gKwlkcm1f cHJpbnRmKG0sICJcdFx0UXVldWUgcHJpb3JpdHk6ICVkXG4iLCBleGVjbGlzdHMtPnF1ZXVlX3By aW9yaXR5KTsKPiAgCWZvciAocmIgPSBleGVjbGlzdHMtPmZpcnN0OyByYjsgcmIgPSByYl9uZXh0 KHJiKSkgewo+ICAJCXN0cnVjdCBpOTE1X3ByaW9saXN0ICpwID0KPiAgCQkJcmJfZW50cnkocmIs IHR5cGVvZigqcCksIG5vZGUpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9ndWNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX3N1 Ym1pc3Npb24uYwo+IGluZGV4IDY0OTExM2M3YTNjMi4uNTg2ZGRlNTc5OTAzIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfc3VibWlzc2lvbi5jCj4gQEAgLTc1LDYgKzc1 LDExIEBACj4gICAqCj4gICAqLwo+ICAKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaTkxNV9wcmlv bGlzdCAqdG9fcHJpb2xpc3Qoc3RydWN0IHJiX25vZGUgKnJiKQo+ICt7Cj4gKwlyZXR1cm4gcmJf ZW50cnkocmIsIHN0cnVjdCBpOTE1X3ByaW9saXN0LCBub2RlKTsKPiArfQo+ICsKPiAgc3RhdGlj IGlubGluZSBib29sIGlzX2hpZ2hfcHJpb3JpdHkoc3RydWN0IGludGVsX2d1Y19jbGllbnQgKmNs aWVudCkKPiAgewo+ICAJcmV0dXJuIChjbGllbnQtPnByaW9yaXR5ID09IEdVQ19DTElFTlRfUFJJ T1JJVFlfS01EX0hJR0ggfHwKPiBAQCAtNjgyLDE1ICs2ODcsMTIgQEAgc3RhdGljIHZvaWQgZ3Vj X2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJcmIgPSBleGVjbGlz dHMtPmZpcnN0Owo+ICAJR0VNX0JVR19PTihyYl9maXJzdCgmZXhlY2xpc3RzLT5xdWV1ZSkgIT0g cmIpOwo+ICAKPiAtCWlmICghcmIpCj4gLQkJZ290byB1bmxvY2s7Cj4gLQo+ICAJaWYgKHBvcnRf aXNzZXQocG9ydCkpIHsKPiAgCQlpZiAoZW5naW5lLT5pOTE1LT5wcmVlbXB0X2NvbnRleHQpIHsK PiAgCQkJc3RydWN0IGd1Y19wcmVlbXB0X3dvcmsgKnByZWVtcHRfd29yayA9Cj4gIAkJCQkmZW5n aW5lLT5pOTE1LT5ndWMucHJlZW1wdF93b3JrW2VuZ2luZS0+aWRdOwo+ICAKPiAtCQkJaWYgKHJi X2VudHJ5KHJiLCBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCwgbm9kZSktPnByaW9yaXR5ID4KPiArCQkJ aWYgKGV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHkgPgo+ICAJCQkgICAgbWF4KHBvcnRfcmVxdWVz dChwb3J0KS0+cHJpb3RyZWUucHJpb3JpdHksIDApKSB7Cj4gIAkJCQlleGVjbGlzdHNfc2V0X2Fj dGl2ZShleGVjbGlzdHMsCj4gIAkJCQkJCSAgICAgRVhFQ0xJU1RTX0FDVElWRV9QUkVFTVBUKTsK PiBAQCAtNzA2LDggKzcwOCw4IEBAIHN0YXRpYyB2b2lkIGd1Y19kZXF1ZXVlKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCX0KPiAgCUdFTV9CVUdfT04ocG9ydF9pc3NldChwb3J0 KSk7Cj4gIAo+IC0JZG8gewo+IC0JCXN0cnVjdCBpOTE1X3ByaW9saXN0ICpwID0gcmJfZW50cnko cmIsIHR5cGVvZigqcCksIG5vZGUpOwo+ICsJd2hpbGUgKHJiKSB7Cj4gKwkJc3RydWN0IGk5MTVf cHJpb2xpc3QgKnAgPSB0b19wcmlvbGlzdChyYik7Cj4gIAkJc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEsICpybjsKPiAgCj4gIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJxLCBybiwgJnAtPnJl cXVlc3RzLCBwcmlvdHJlZS5saW5rKSB7Cj4gQEAgLTczNiw4ICs3MzgsOSBAQCBzdGF0aWMgdm9p ZCBndWNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkJSU5JVF9M SVNUX0hFQUQoJnAtPnJlcXVlc3RzKTsKPiAgCQlpZiAocC0+cHJpb3JpdHkgIT0gSTkxNV9QUklP UklUWV9OT1JNQUwpCj4gIAkJCWttZW1fY2FjaGVfZnJlZShlbmdpbmUtPmk5MTUtPnByaW9yaXRp ZXMsIHApOwo+IC0JfSB3aGlsZSAocmIpOwo+ICsJfQo+ICBkb25lOgo+ICsJZXhlY2xpc3RzLT5x dWV1ZV9wcmlvcml0eSA9IHJiID8gdG9fcHJpb2xpc3QocmIpLT5wcmlvcml0eSA6IElOVF9NSU47 Cj4gIAlleGVjbGlzdHMtPmZpcnN0ID0gcmI7Cj4gIAlpZiAoc3VibWl0KSB7Cj4gIAkJcG9ydF9h c3NpZ24ocG9ydCwgbGFzdCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBpbmRleCA5NjQ4 ODViNWQ3Y2IuLjRiYzcyZmJhZjc5MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9scmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4g QEAgLTE2OSw2ICsxNjksMjMgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRl KHUzMiAqcmVnX3N0YXRlLAo+ICAJCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsCj4gIAkJCQkgICAgIHN0cnVjdCBpbnRlbF9yaW5nICpyaW5nKTsKPiAgCj4gK3N0YXRpYyBp bmxpbmUgc3RydWN0IGk5MTVfcHJpb2xpc3QgKnRvX3ByaW9saXN0KHN0cnVjdCByYl9ub2RlICpy YikKPiArewo+ICsJcmV0dXJuIHJiX2VudHJ5KHJiLCBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCwgbm9k ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IHJxX3ByaW8oY29uc3Qgc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnEpCj4gK3sKPiArCXJldHVybiBycS0+cHJpb3RyZWUucHJpb3JpdHk7Cj4g K30KPiArCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3ByZWVtcHQoY29uc3Qgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKmxhc3QsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHByaW8pCj4gK3sKPiArCXJldHVybiBlbmdpbmUtPmk5MTUtPnByZWVt cHRfY29udGV4dCAmJiBwcmlvID4gbWF4KHJxX3ByaW8obGFzdCksIDApOwo+ICt9Cj4gKwo+ICAv KioKPiAgICogaW50ZWxfbHJfY29udGV4dF9kZXNjcmlwdG9yX3VwZGF0ZSgpIC0gY2FsY3VsYXRl ICYgY2FjaGUgdGhlIGRlc2NyaXB0b3IKPiAgICogCQkJCQkgIGRlc2NyaXB0b3IgZm9yIGEgcGlu bmVkIGNvbnRleHQKPiBAQCAtMjI0LDcgKzI0MSw3IEBAIGxvb2t1cF9wcmlvbGlzdChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gIAlwYXJlbnQgPSAmZXhlY2xpc3RzLT5xdWV1ZS5y Yl9ub2RlOwo+ICAJd2hpbGUgKCpwYXJlbnQpIHsKPiAgCQlyYiA9ICpwYXJlbnQ7Cj4gLQkJcCA9 IHJiX2VudHJ5KHJiLCB0eXBlb2YoKnApLCBub2RlKTsKPiArCQlwID0gdG9fcHJpb2xpc3QocmIp Owo+ICAJCWlmIChwcmlvID4gcC0+cHJpb3JpdHkpIHsKPiAgCQkJcGFyZW50ID0gJnJiLT5yYl9s ZWZ0Owo+ICAJCX0gZWxzZSBpZiAocHJpbyA8IHAtPnByaW9yaXR5KSB7Cj4gQEAgLTI2NCw3ICsy ODEsNyBAQCBsb29rdXBfcHJpb2xpc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ ICAJaWYgKGZpcnN0KQo+ICAJCWV4ZWNsaXN0cy0+Zmlyc3QgPSAmcC0+bm9kZTsKPiAgCj4gLQly ZXR1cm4gcHRyX3BhY2tfYml0cyhwLCBmaXJzdCwgMSk7Cj4gKwlyZXR1cm4gcDsKPiAgfQo+ICAK PiAgc3RhdGljIHZvaWQgdW53aW5kX3dhX3RhaWwoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4g QEAgLTI5MCwxNCArMzA3LDEwIEBAIHN0YXRpYyB2b2lkIF9fdW53aW5kX2luY29tcGxldGVfcmVx dWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJCV9faTkxNV9yZXF1ZXN0 X3Vuc3VibWl0KHJxKTsKPiAgCQl1bndpbmRfd2FfdGFpbChycSk7Cj4gIAo+IC0JCUdFTV9CVUdf T04ocnEtPnByaW90cmVlLnByaW9yaXR5ID09IEk5MTVfUFJJT1JJVFlfSU5WQUxJRCk7Cj4gLQkJ aWYgKHJxLT5wcmlvdHJlZS5wcmlvcml0eSAhPSBsYXN0X3ByaW8pIHsKPiAtCQkJcCA9IGxvb2t1 cF9wcmlvbGlzdChlbmdpbmUsCj4gLQkJCQkJICAgICZycS0+cHJpb3RyZWUsCj4gLQkJCQkJICAg IHJxLT5wcmlvdHJlZS5wcmlvcml0eSk7Cj4gLQkJCXAgPSBwdHJfbWFza19iaXRzKHAsIDEpOwo+ IC0KPiAtCQkJbGFzdF9wcmlvID0gcnEtPnByaW90cmVlLnByaW9yaXR5Owo+ICsJCUdFTV9CVUdf T04ocnFfcHJpbyhycSkgPT0gSTkxNV9QUklPUklUWV9JTlZBTElEKTsKPiArCQlpZiAocnFfcHJp byhycSkgIT0gbGFzdF9wcmlvKSB7Cj4gKwkJCWxhc3RfcHJpbyA9IHJxX3ByaW8ocnEpOwo+ICsJ CQlwID0gbG9va3VwX3ByaW9saXN0KGVuZ2luZSwgJnJxLT5wcmlvdHJlZSwgbGFzdF9wcmlvKTsK PiAgCQl9Cj4gIAo+ICAJCWxpc3RfYWRkKCZycS0+cHJpb3RyZWUubGluaywgJnAtPnJlcXVlc3Rz KTsKPiBAQCAtMzk3LDEwICs0MTAsMTEgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pdF9w b3J0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkJCWRlc2MgPSBleGVjbGlz dHNfdXBkYXRlX2NvbnRleHQocnEpOwo+ICAJCQlHRU1fREVCVUdfRVhFQyhwb3J0W25dLmNvbnRl eHRfaWQgPSB1cHBlcl8zMl9iaXRzKGRlc2MpKTsKPiAgCj4gLQkJCUdFTV9UUkFDRSgiJXMgaW5b JWRdOiAgY3R4PSVkLiVkLCBzZXFubz0leFxuIiwKPiArCQkJR0VNX1RSQUNFKCIlcyBpblslZF06 ICBjdHg9JWQuJWQsIHNlcW5vPSV4LCBwcmlvPSVkXG4iLAo+ICAJCQkJICBlbmdpbmUtPm5hbWUs IG4sCj4gIAkJCQkgIHBvcnRbbl0uY29udGV4dF9pZCwgY291bnQsCj4gLQkJCQkgIHJxLT5nbG9i YWxfc2Vxbm8pOwo+ICsJCQkJICBycS0+Z2xvYmFsX3NlcW5vLAo+ICsJCQkJICBycV9wcmlvKHJx KSk7Cj4gIAkJfSBlbHNlIHsKPiAgCQkJR0VNX0JVR19PTighbik7Cj4gIAkJCWRlc2MgPSAwOwo+ IEBAIC00NTMsMTIgKzQ2NywxNyBAQCBzdGF0aWMgdm9pZCBpbmplY3RfcHJlZW1wdF9jb250ZXh0 KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCQkgICBfTUFTS0VEX0JJVF9FTkFC TEUoQ1RYX0NUUkxfRU5HSU5FX0NUWF9SRVNUT1JFX0lOSElCSVQgfAo+ICAJCQkJICAgICAgQ1RY X0NUUkxfRU5HSU5FX0NUWF9TQVZFX0lOSElCSVQpKTsKPiAgCj4gKwkvKgo+ICsJICogU3dpdGNo IHRvIG91ciBlbXB0eSBwcmVlbXB0IGNvbnRleHQgc28KPiArCSAqIHRoZSBzdGF0ZSBvZiB0aGUg R1BVIGlzIGtub3duIChpZGxlKS4KPiArCSAqLwo+ICAJR0VNX1RSQUNFKCIlc1xuIiwgZW5naW5l LT5uYW1lKTsKPiAgCWZvciAobiA9IGV4ZWNsaXN0c19udW1fcG9ydHMoJmVuZ2luZS0+ZXhlY2xp c3RzKTsgLS1uOyApCj4gIAkJZWxzcF93cml0ZSgwLCBlbmdpbmUtPmV4ZWNsaXN0cy5lbHNwKTsK PiAgCj4gIAllbHNwX3dyaXRlKGNlLT5scmNfZGVzYywgZW5naW5lLT5leGVjbGlzdHMuZWxzcCk7 Cj4gIAlleGVjbGlzdHNfY2xlYXJfYWN0aXZlKCZlbmdpbmUtPmV4ZWNsaXN0cywgRVhFQ0xJU1RT X0FDVElWRV9IV0FDSyk7Cj4gKwlleGVjbGlzdHNfc2V0X2FjdGl2ZSgmZW5naW5lLT5leGVjbGlz dHMsIEVYRUNMSVNUU19BQ1RJVkVfUFJFRU1QVCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGV4 ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiBAQCAtNDk1 LDggKzUxNCw2IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKPiAgCXNwaW5fbG9ja19pcnEoJmVuZ2luZS0+dGltZWxpbmUtPmxv Y2spOwo+ICAJcmIgPSBleGVjbGlzdHMtPmZpcnN0Owo+ICAJR0VNX0JVR19PTihyYl9maXJzdCgm ZXhlY2xpc3RzLT5xdWV1ZSkgIT0gcmIpOwo+IC0JaWYgKCFyYikKPiAtCQlnb3RvIHVubG9jazsK PiAgCj4gIAlpZiAobGFzdCkgewo+ICAJCS8qCj4gQEAgLTUxOSw1NCArNTM2LDQ4IEBAIHN0YXRp YyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiAgCQlpZiAoIWV4ZWNsaXN0c19pc19hY3RpdmUoZXhlY2xpc3RzLCBFWEVDTElTVFNfQUNUSVZF X0hXQUNLKSkKPiAgCQkJZ290byB1bmxvY2s7Cj4gIAo+IC0JCWlmIChlbmdpbmUtPmk5MTUtPnBy ZWVtcHRfY29udGV4dCAmJgo+IC0JCSAgICByYl9lbnRyeShyYiwgc3RydWN0IGk5MTVfcHJpb2xp c3QsIG5vZGUpLT5wcmlvcml0eSA+Cj4gLQkJICAgIG1heChsYXN0LT5wcmlvdHJlZS5wcmlvcml0 eSwgMCkpIHsKPiAtCQkJLyoKPiAtCQkJICogU3dpdGNoIHRvIG91ciBlbXB0eSBwcmVlbXB0IGNv bnRleHQgc28KPiAtCQkJICogdGhlIHN0YXRlIG9mIHRoZSBHUFUgaXMga25vd24gKGlkbGUpLgo+ IC0JCQkgKi8KPiArCQlpZiAobmVlZF9wcmVlbXB0KGVuZ2luZSwgbGFzdCwgZXhlY2xpc3RzLT5x dWV1ZV9wcmlvcml0eSkpIHsKPiAgCQkJaW5qZWN0X3ByZWVtcHRfY29udGV4dChlbmdpbmUpOwo+ IC0JCQlleGVjbGlzdHNfc2V0X2FjdGl2ZShleGVjbGlzdHMsCj4gLQkJCQkJICAgICBFWEVDTElT VFNfQUNUSVZFX1BSRUVNUFQpOwo+ICAJCQlnb3RvIHVubG9jazsKPiAtCQl9IGVsc2Ugewo+IC0J CQkvKgo+IC0JCQkgKiBJbiB0aGVvcnksIHdlIGNvdWxkIGNvYWxlc2NlIG1vcmUgcmVxdWVzdHMg b250bwo+IC0JCQkgKiB0aGUgc2Vjb25kIHBvcnQgKHRoZSBmaXJzdCBwb3J0IGlzIGFjdGl2ZSwg d2l0aAo+IC0JCQkgKiBubyBwcmVlbXB0aW9ucyBwZW5kaW5nKS4gSG93ZXZlciwgdGhhdCBtZWFu cyB3ZQo+IC0JCQkgKiB0aGVuIGhhdmUgdG8gZGVhbCB3aXRoIHRoZSBwb3NzaWJsZSBsaXRlLXJl c3RvcmUKPiAtCQkJICogb2YgdGhlIHNlY29uZCBwb3J0IChhcyB3ZSBzdWJtaXQgdGhlIEVMU1As IHRoZXJlCj4gLQkJCSAqIG1heSBiZSBhIGNvbnRleHQtc3dpdGNoKSBidXQgYWxzbyB3ZSBtYXkg Y29tcGxldGUKPiAtCQkJICogdGhlIHJlc3VibWlzc2lvbiBiZWZvcmUgdGhlIGNvbnRleHQtc3dp dGNoLiBFcmdvLAo+IC0JCQkgKiBjb2FsZXNjaW5nIG9udG8gdGhlIHNlY29uZCBwb3J0IHdpbGwg Y2F1c2UgYQo+IC0JCQkgKiBwcmVlbXB0aW9uIGV2ZW50LCBidXQgd2UgY2Fubm90IHByZWRpY3Qg d2hldGhlcgo+IC0JCQkgKiB0aGF0IHdpbGwgYWZmZWN0IHBvcnRbMF0gb3IgcG9ydFsxXS4KPiAt CQkJICoKPiAtCQkJICogSWYgdGhlIHNlY29uZCBwb3J0IGlzIGFscmVhZHkgYWN0aXZlLCB3ZSBj YW4gd2FpdAo+IC0JCQkgKiB1bnRpbCB0aGUgbmV4dCBjb250ZXh0LXN3aXRjaCBiZWZvcmUgY29u dGVtcGxhdGluZwo+IC0JCQkgKiBuZXcgcmVxdWVzdHMuIFRoZSBHUFUgd2lsbCBiZSBidXN5IGFu ZCB3ZSBzaG91bGQgYmUKPiAtCQkJICogYWJsZSB0byByZXN1Ym1pdCB0aGUgbmV3IEVMU1AgYmVm b3JlIGl0IGlkbGVzLAo+IC0JCQkgKiBhdm9pZGluZyBwaXBlbGluZSBidWJibGVzIChtb21lbnRh cnkgcGF1c2VzIHdoZXJlCj4gLQkJCSAqIHRoZSBkcml2ZXIgaXMgdW5hYmxlIHRvIGtlZXAgdXAg dGhlIHN1cHBseSBvZiBuZXcKPiAtCQkJICogd29yaykuCj4gLQkJCSAqLwo+IC0JCQlpZiAocG9y dF9jb3VudCgmcG9ydFsxXSkpCj4gLQkJCQlnb3RvIHVubG9jazsKPiAtCj4gLQkJCS8qIFdhSWRs ZUxpdGVSZXN0b3JlOmJkdyxza2wKPiAtCQkJICogQXBwbHkgdGhlIHdhIE5PT1BzIHRvIHByZXZl bnQKPiAtCQkJICogcmluZzpIRUFEID09IHJxOlRBSUwgYXMgd2UgcmVzdWJtaXQgdGhlCj4gLQkJ CSAqIHJlcXVlc3QuIFNlZSBnZW44X2VtaXRfYnJlYWRjcnVtYigpIGZvcgo+IC0JCQkgKiB3aGVy ZSB3ZSBwcmVwYXJlIHRoZSBwYWRkaW5nIGFmdGVyIHRoZQo+IC0JCQkgKiBlbmQgb2YgdGhlIHJl cXVlc3QuCj4gLQkJCSAqLwo+IC0JCQlsYXN0LT50YWlsID0gbGFzdC0+d2FfdGFpbDsKPiAgCQl9 Cj4gKwo+ICsJCS8qCj4gKwkJICogSW4gdGhlb3J5LCB3ZSBjb3VsZCBjb2FsZXNjZSBtb3JlIHJl cXVlc3RzIG9udG8KPiArCQkgKiB0aGUgc2Vjb25kIHBvcnQgKHRoZSBmaXJzdCBwb3J0IGlzIGFj dGl2ZSwgd2l0aAo+ICsJCSAqIG5vIHByZWVtcHRpb25zIHBlbmRpbmcpLiBIb3dldmVyLCB0aGF0 IG1lYW5zIHdlCj4gKwkJICogdGhlbiBoYXZlIHRvIGRlYWwgd2l0aCB0aGUgcG9zc2libGUgbGl0 ZS1yZXN0b3JlCj4gKwkJICogb2YgdGhlIHNlY29uZCBwb3J0IChhcyB3ZSBzdWJtaXQgdGhlIEVM U1AsIHRoZXJlCj4gKwkJICogbWF5IGJlIGEgY29udGV4dC1zd2l0Y2gpIGJ1dCBhbHNvIHdlIG1h eSBjb21wbGV0ZQo+ICsJCSAqIHRoZSByZXN1Ym1pc3Npb24gYmVmb3JlIHRoZSBjb250ZXh0LXN3 aXRjaC4gRXJnbywKPiArCQkgKiBjb2FsZXNjaW5nIG9udG8gdGhlIHNlY29uZCBwb3J0IHdpbGwg Y2F1c2UgYQo+ICsJCSAqIHByZWVtcHRpb24gZXZlbnQsIGJ1dCB3ZSBjYW5ub3QgcHJlZGljdCB3 aGV0aGVyCj4gKwkJICogdGhhdCB3aWxsIGFmZmVjdCBwb3J0WzBdIG9yIHBvcnRbMV0uCj4gKwkJ ICoKPiArCQkgKiBJZiB0aGUgc2Vjb25kIHBvcnQgaXMgYWxyZWFkeSBhY3RpdmUsIHdlIGNhbiB3 YWl0Cj4gKwkJICogdW50aWwgdGhlIG5leHQgY29udGV4dC1zd2l0Y2ggYmVmb3JlIGNvbnRlbXBs YXRpbmcKPiArCQkgKiBuZXcgcmVxdWVzdHMuIFRoZSBHUFUgd2lsbCBiZSBidXN5IGFuZCB3ZSBz aG91bGQgYmUKPiArCQkgKiBhYmxlIHRvIHJlc3VibWl0IHRoZSBuZXcgRUxTUCBiZWZvcmUgaXQg aWRsZXMsCj4gKwkJICogYXZvaWRpbmcgcGlwZWxpbmUgYnViYmxlcyAobW9tZW50YXJ5IHBhdXNl cyB3aGVyZQo+ICsJCSAqIHRoZSBkcml2ZXIgaXMgdW5hYmxlIHRvIGtlZXAgdXAgdGhlIHN1cHBs eSBvZiBuZXcKPiArCQkgKiB3b3JrKS4gSG93ZXZlciwgd2UgaGF2ZSB0byBkb3VibGUgY2hlY2sg dGhhdCB0aGUKPiArCQkgKiBwcmlvcml0aWVzIG9mIHRoZSBwb3J0cyBoYXZlbid0IGJlZW4gc3dp dGNoLgo+ICsJCSAqLwo+ICsJCWlmIChwb3J0X2NvdW50KCZwb3J0WzFdKSkKPiArCQkJZ290byB1 bmxvY2s7Cj4gKwo+ICsJCS8qCj4gKwkJICogV2FJZGxlTGl0ZVJlc3RvcmU6YmR3LHNrbAo+ICsJ CSAqIEFwcGx5IHRoZSB3YSBOT09QcyB0byBwcmV2ZW50Cj4gKwkJICogcmluZzpIRUFEID09IHJx OlRBSUwgYXMgd2UgcmVzdWJtaXQgdGhlCj4gKwkJICogcmVxdWVzdC4gU2VlIGdlbjhfZW1pdF9i cmVhZGNydW1iKCkgZm9yCj4gKwkJICogd2hlcmUgd2UgcHJlcGFyZSB0aGUgcGFkZGluZyBhZnRl ciB0aGUKPiArCQkgKiBlbmQgb2YgdGhlIHJlcXVlc3QuCj4gKwkJICovCj4gKwkJbGFzdC0+dGFp bCA9IGxhc3QtPndhX3RhaWw7Cj4gIAl9Cj4gIAo+IC0JZG8gewo+IC0JCXN0cnVjdCBpOTE1X3By aW9saXN0ICpwID0gcmJfZW50cnkocmIsIHR5cGVvZigqcCksIG5vZGUpOwo+ICsJd2hpbGUgKHJi KSB7Cj4gKwkJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnAgPSB0b19wcmlvbGlzdChyYik7Cj4gIAkJ c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsICpybjsKPiAgCj4gIAkJbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKHJxLCBybiwgJnAtPnJlcXVlc3RzLCBwcmlvdHJlZS5saW5rKSB7Cj4gQEAgLTYyOCw4 ICs2MzksOSBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCj4gIAkJSU5JVF9MSVNUX0hFQUQoJnAtPnJlcXVlc3RzKTsKPiAgCQlp ZiAocC0+cHJpb3JpdHkgIT0gSTkxNV9QUklPUklUWV9OT1JNQUwpCj4gIAkJCWttZW1fY2FjaGVf ZnJlZShlbmdpbmUtPmk5MTUtPnByaW9yaXRpZXMsIHApOwo+IC0JfSB3aGlsZSAocmIpOwo+ICsJ fQo+ICBkb25lOgo+ICsJZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eSA9IHJiID8gdG9fcHJpb2xp c3QocmIpLT5wcmlvcml0eSA6IElOVF9NSU47Cj4gIAlleGVjbGlzdHMtPmZpcnN0ID0gcmI7Cj4g IAlpZiAoc3VibWl0KQo+ICAJCXBvcnRfYXNzaWduKHBvcnQsIGxhc3QpOwo+IEBAIC02OTAsNyAr NzAyLDcgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2NhbmNlbF9yZXF1ZXN0cyhzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkvKiBGbHVzaCB0aGUgcXVldWVkIHJlcXVlc3RzIHRv IHRoZSB0aW1lbGluZSBsaXN0IChmb3IgcmV0aXJpbmcpLiAqLwo+ICAJcmIgPSBleGVjbGlzdHMt PmZpcnN0Owo+ICAJd2hpbGUgKHJiKSB7Cj4gLQkJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnAgPSBy Yl9lbnRyeShyYiwgdHlwZW9mKCpwKSwgbm9kZSk7Cj4gKwkJc3RydWN0IGk5MTVfcHJpb2xpc3Qg KnAgPSB0b19wcmlvbGlzdChyYik7Cj4gIAo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShy cSwgcm4sICZwLT5yZXF1ZXN0cywgcHJpb3RyZWUubGluaykgewo+ICAJCQlJTklUX0xJU1RfSEVB RCgmcnEtPnByaW90cmVlLmxpbmspOwo+IEBAIC03MDgsNyArNzIwLDcgQEAgc3RhdGljIHZvaWQg ZXhlY2xpc3RzX2NhbmNlbF9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gIAo+ICAJLyogUmVtYWluaW5nIF91bnJlYWR5XyByZXF1ZXN0cyB3aWxsIGJlIG5vcCdlZCB3 aGVuIHN1Ym1pdHRlZCAqLwo+ICAKPiAtCj4gKwlleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5ID0g SU5UX01JTjsKPiAgCWV4ZWNsaXN0cy0+cXVldWUgPSBSQl9ST09UOwo+ICAJZXhlY2xpc3RzLT5m aXJzdCA9IE5VTEw7Cj4gIAlHRU1fQlVHX09OKHBvcnRfaXNzZXQoZXhlY2xpc3RzLT5wb3J0KSk7 Cj4gQEAgLTg2NCwxMCArODc2LDExIEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJtaXNzaW9u X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQo+ICAJCQkJCQkJRVhFQ0xJU1RTX0FDVElWRV9V U0VSKSk7Cj4gIAo+ICAJCQlycSA9IHBvcnRfdW5wYWNrKHBvcnQsICZjb3VudCk7Cj4gLQkJCUdF TV9UUkFDRSgiJXMgb3V0WzBdOiBjdHg9JWQuJWQsIHNlcW5vPSV4XG4iLAo+ICsJCQlHRU1fVFJB Q0UoIiVzIG91dFswXTogY3R4PSVkLiVkLCBzZXFubz0leCwgcHJpbz0lZFxuIiwKPiAgCQkJCSAg ZW5naW5lLT5uYW1lLAo+ICAJCQkJICBwb3J0LT5jb250ZXh0X2lkLCBjb3VudCwKPiAtCQkJCSAg cnEgPyBycS0+Z2xvYmFsX3NlcW5vIDogMCk7Cj4gKwkJCQkgIHJxID8gcnEtPmdsb2JhbF9zZXFu byA6IDAsCj4gKwkJCQkgIHJxID8gcnFfcHJpbyhycSkgOiAwKTsKPiAgCj4gIAkJCS8qIENoZWNr IHRoZSBjb250ZXh0L2Rlc2MgaWQgZm9yIHRoaXMgZXZlbnQgbWF0Y2hlcyAqLwo+ICAJCQlHRU1f REVCVUdfQlVHX09OKGJ1ZlsyICogaGVhZCArIDFdICE9IHBvcnQtPmNvbnRleHRfaWQpOwo+IEBA IC05MTIsMTUgKzkyNSwxOSBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfc3VibWlzc2lvbl90YXNr bGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKPiAgCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChk ZXZfcHJpdiwgZXhlY2xpc3RzLT5md19kb21haW5zKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQg aW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkgICBz dHJ1Y3QgaTkxNV9wcmlvdHJlZSAqcHQsCj4gLQkJCSAgIGludCBwcmlvKQo+ICtzdGF0aWMgdm9p ZCBxdWV1ZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkJICBz dHJ1Y3QgaTkxNV9wcmlvdHJlZSAqcHQsCj4gKwkJCSAgaW50IHByaW8pCj4gIHsKPiAtCXN0cnVj dCBpOTE1X3ByaW9saXN0ICpwID0gbG9va3VwX3ByaW9saXN0KGVuZ2luZSwgcHQsIHByaW8pOwo+ ICsJbGlzdF9hZGRfdGFpbCgmcHQtPmxpbmssICZsb29rdXBfcHJpb2xpc3QoZW5naW5lLCBwdCwg cHJpbyktPnJlcXVlc3RzKTsKPiArfQo+ICAKPiAtCWxpc3RfYWRkX3RhaWwoJnB0LT5saW5rLCAm cHRyX21hc2tfYml0cyhwLCAxKS0+cmVxdWVzdHMpOwo+IC0JaWYgKHB0cl91bm1hc2tfYml0cyhw LCAxKSkKPiArc3RhdGljIHZvaWQgc3VibWl0X3F1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwgaW50IHByaW8pCj4gK3sKPiArCWlmIChwcmlvID4gZW5naW5lLT5leGVjbGlzdHMu cXVldWVfcHJpb3JpdHkpIHsKPiArCQllbmdpbmUtPmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eSA9 IHByaW87Cj4gIAkJdGFza2xldF9oaV9zY2hlZHVsZSgmZW5naW5lLT5leGVjbGlzdHMudGFza2xl dCk7Cj4gKwl9Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJtaXRfcmVxdWVz dChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KQo+IEBAIC05MzEsNyArOTQ4LDggQEAgc3Rh dGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJl cXVlc3QpCj4gIAkvKiBXaWxsIGJlIGNhbGxlZCBmcm9tIGlycS1jb250ZXh0IHdoZW4gdXNpbmcg Zm9yZWlnbiBmZW5jZXMuICovCj4gIAlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT50aW1lbGlu ZS0+bG9jaywgZmxhZ3MpOwo+ICAKPiAtCWluc2VydF9yZXF1ZXN0KGVuZ2luZSwgJnJlcXVlc3Qt PnByaW90cmVlLCByZXF1ZXN0LT5wcmlvdHJlZS5wcmlvcml0eSk7Cj4gKwlxdWV1ZV9yZXF1ZXN0 KGVuZ2luZSwgJnJlcXVlc3QtPnByaW90cmVlLCBycV9wcmlvKHJlcXVlc3QpKTsKPiArCXN1Ym1p dF9xdWV1ZShlbmdpbmUsIHJxX3ByaW8ocmVxdWVzdCkpOwo+ICAKPiAgCUdFTV9CVUdfT04oIWVu Z2luZS0+ZXhlY2xpc3RzLmZpcnN0KTsKPiAgCUdFTV9CVUdfT04obGlzdF9lbXB0eSgmcmVxdWVz dC0+cHJpb3RyZWUubGluaykpOwo+IEBAIC05ODcsNyArMTAwNSw3IEBAIHN0YXRpYyB2b2lkIGV4 ZWNsaXN0c19zY2hlZHVsZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0LCBpbnQgcHJpbykK PiAgCSAqIHN0YXRpYyB2b2lkIHVwZGF0ZV9wcmlvcml0aWVzKHN0cnVjdCBpOTE1X3ByaW90cmVl ICpwdCwgcHJpbykgewo+ICAJICoJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXAsICZwdC0+c2lnbmFs ZXJzX2xpc3QsIHNpZ25hbF9saW5rKQo+ICAJICoJCXVwZGF0ZV9wcmlvcml0aWVzKGRlcC0+c2ln bmFsLCBwcmlvKQo+IC0JICoJaW5zZXJ0X3JlcXVlc3QocHQpOwo+ICsJICoJcXVldWVfcmVxdWVz dChwdCk7Cj4gIAkgKiB9Cj4gIAkgKiBidXQgdGhhdCBtYXkgaGF2ZSB1bmxpbWl0ZWQgcmVjdXJz aW9uIGRlcHRoIGFuZCBzbyBydW5zIGEgdmVyeQo+ICAJICogcmVhbCByaXNrIG9mIG92ZXJ1bm5p bmcgdGhlIGtlcm5lbCBzdGFjay4gSW5zdGVhZCwgd2UgYnVpbGQKPiBAQCAtMTA1MCw4ICsxMDY4 LDkgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX3NjaGVkdWxlKHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJlcXVlc3QsIGludCBwcmlvKQo+ICAJCXB0LT5wcmlvcml0eSA9IHByaW87Cj4gIAkJaWYgKCFs aXN0X2VtcHR5KCZwdC0+bGluaykpIHsKPiAgCQkJX19saXN0X2RlbF9lbnRyeSgmcHQtPmxpbmsp Owo+IC0JCQlpbnNlcnRfcmVxdWVzdChlbmdpbmUsIHB0LCBwcmlvKTsKPiArCQkJcXVldWVfcmVx dWVzdChlbmdpbmUsIHB0LCBwcmlvKTsKPiAgCQl9Cj4gKwkJc3VibWl0X3F1ZXVlKGVuZ2luZSwg cHJpbyk7Cj4gIAl9Cj4gIAo+ICAJc3Bpbl91bmxvY2tfaXJxKCZlbmdpbmUtPnRpbWVsaW5lLT5s b2NrKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZl ci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gaW5kZXggYTli ODNiZjdlODM3Li5jNGU5MDIyYjM0ZTMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cmluZ2J1ZmZlci5oCj4gQEAgLTI1Nyw2ICsyNTcsMTEgQEAgc3RydWN0IGludGVsX2VuZ2luZV9l eGVjbGlzdHMgewo+ICAJICovCj4gIAl1bnNpZ25lZCBpbnQgcG9ydF9tYXNrOwo+ICAKPiArCS8q Kgo+ICsJICogQHF1ZXVlX3ByaW9yaXR5OiBIaWdoZXN0IHBlbmRpbmcgcHJpb3JpdHkuCj4gKwkg Ki8KPiArCWludCBxdWV1ZV9wcmlvcml0eTsKPiArCj4gIAkvKioKPiAgCSAqIEBxdWV1ZTogcXVl dWUgb2YgcmVxdWVzdHMsIGluIHByaW9yaXR5IGxpc3RzCj4gIAkgKi8KPiAtLSAKPiAyLjE2LjEK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==