From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 19/23] drm/i915: Track the context's seqno in its own timeline HWSP Date: Fri, 18 Jan 2019 14:10:35 +0000 Message-ID: References: <20190117143519.16086-1-chris@chris-wilson.co.uk> <20190117143519.16086-20-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5F4076F7AF for ; Fri, 18 Jan 2019 14:10:35 +0000 (UTC) In-Reply-To: <20190117143519.16086-20-chris@chris-wilson.co.uk> Content-Language: en-US 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 Ck9uIDE3LzAxLzIwMTkgMTQ6MzUsIENocmlzIFdpbHNvbiB3cm90ZToKPiBOb3cgdGhhdCB3ZSBo YXZlIGFsbG9jYXRlZCBvdXJzZWx2ZXMgYSBjYWNoZWxpbmUgdG8gc3RvcmUgYSBicmVhZGNydW1i LAo+IHdlIGNhbiBlbWl0IGEgd3JpdGUgZnJvbSB0aGUgR1BVIGludG8gdGhlIHRpbWVsaW5lJ3Mg SFdTUCBvZiB0aGUKPiBwZXItY29udGV4dCBzZXFubyBhcyB3ZSBjb21wbGV0ZSBlYWNoIHJlcXVl c3QuIFRoaXMgZHJvcHMgdGhlIG1pcnJvcmluZwo+IG9mIHRoZSBwZXItZW5naW5lIEhXU1AgYW5k IGFsbG93cyBlYWNoIGNvbnRleHQgdG8gb3BlcmF0ZSBpbmRlcGVuZGVudGx5Lgo+IFdlIGRvIG5v dCBuZWVkIHRvIHVud2luZCB0aGUgcGVyLWNvbnRleHQgdGltZWxpbmUsIGFuZCBzbyByZXF1ZXN0 cyBhcmUKPiBhbHdheXMgY29uc2lzdGVudCB3aXRoIHRoZSB0aW1lbGluZSBicmVhZGNydW1iLCBn cmVhdGx5IHNpbXBsaWZ5aW5nIHRoZQo+IGNvbXBsZXRpb24gY2hlY2tzIGFzIHdlIG5vIGxvbmdl ciBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dCB0aGUKPiBnbG9iYWxfc2Vxbm8gY2hhbmdpbmcg bWlkIGNoZWNrLgo+IAo+IEF0IHRoaXMgcG9pbnQsIHdlIGFyZSBlbWl0dGluZyBib3RoIHBlci1j b250ZXh0IGFuZCBnbG9iYWwgc2Vxbm8gYW5kCj4gc3RpbGwgdXNpbmcgdGhlIHNpbmdsZSBwZXIt ZW5naW5lIGV4ZWN1dGlvbiB0aW1lbGluZSBmb3IgcmVzb2x2aW5nCj4gaW50ZXJydXB0cy4KPiAK PiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4K PiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICAgICAgIHwg IDIgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jICAgICAgICAgIHwg IDIgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5oICAgICAgICAgIHwg MjcgKystLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jlc2V0LmMgICAgICAgICAg ICB8ICAxICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmggICAgICAgICAgICAg IHwgIDcgKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jICAgICAgICAgICAg IHwgMzIgKysrKy0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5j ICAgICAgfCA5MSArKysrKysrKysrKysrKy0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL21vY2tfZW5naW5lLmMgfCAgOCArLQo+ICAgOCBmaWxlcyBjaGFuZ2VkLCAxMDkg aW5zZXJ0aW9ucygrKSwgNjEgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j Cj4gaW5kZXggM2M2MDkxMDIxMjkwLi5hNWJkNTE5ODdjMGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMKPiBAQCAtMjg5MCw3ICsyODkwLDcgQEAgaTkxNV9nZW1fZmluZF9hY3RpdmVfcmVx dWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICAJICovCj4gICAJc3Bpbl9s b2NrX2lycXNhdmUoJmVuZ2luZS0+dGltZWxpbmUubG9jaywgZmxhZ3MpOwo+ICAgCWxpc3RfZm9y X2VhY2hfZW50cnkocmVxdWVzdCwgJmVuZ2luZS0+dGltZWxpbmUucmVxdWVzdHMsIGxpbmspIHsK PiAtCQlpZiAoX19pOTE1X3JlcXVlc3RfY29tcGxldGVkKHJlcXVlc3QsIHJlcXVlc3QtPmdsb2Jh bF9zZXFubykpCj4gKwkJaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocmVxdWVzdCkpCj4gICAJ CQljb250aW51ZTsKPiAgIAo+ICAgCQlhY3RpdmUgPSByZXF1ZXN0Owo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVxdWVzdC5jCj4gaW5kZXggN2QwNjhjNDA2YTQ5Li4wZDdiNzFhZmYyOGYgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+IEBAIC02MTQsNyArNjE0LDcgQEAgaTkx NV9yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eCkKPiAgIAlycS0+cmluZyA9IGNlLT5yaW5nOwo+ICAgCXJxLT50 aW1lbGluZSA9IGNlLT5yaW5nLT50aW1lbGluZTsKPiAgIAlHRU1fQlVHX09OKHJxLT50aW1lbGlu ZSA9PSAmZW5naW5lLT50aW1lbGluZSk7Cj4gLQlycS0+aHdzcF9zZXFubyA9ICZlbmdpbmUtPnN0 YXR1c19wYWdlLmFkZHJbSTkxNV9HRU1fSFdTX0lOREVYXTsKPiArCXJxLT5od3NwX3NlcW5vID0g cnEtPnRpbWVsaW5lLT5od3NwX3NlcW5vOwo+ICAgCj4gICAJc3Bpbl9sb2NrX2luaXQoJnJxLT5s b2NrKTsKPiAgIAlkbWFfZmVuY2VfaW5pdCgmcnEtPmZlbmNlLAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVxdWVzdC5oCj4gaW5kZXggNGRkMjJkYWRmNWNlLi5hMTZhM2I3ZjdkOTIgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuaAo+IEBAIC0zMjQsMzIgKzMyNCwyMSBAQCBzdGF0 aWMgaW5saW5lIHUzMiBod3NwX3NlcW5vKGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ ICAgICovCj4gICBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9yZXF1ZXN0X3N0YXJ0ZWQoY29uc3Qg c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gICB7Cj4gLQl1MzIgc2Vxbm87Cj4gLQo+IC0Jc2Vx bm8gPSBpOTE1X3JlcXVlc3RfZ2xvYmFsX3NlcW5vKHJxKTsKPiAtCWlmICghc2Vxbm8pIC8qIG5v dCB5ZXQgc3VibWl0dGVkIHRvIEhXICovCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0KPiAtCXJldHVy biBpOTE1X3NlcW5vX3Bhc3NlZChod3NwX3NlcW5vKHJxKSwgc2Vxbm8gLSAxKTsKPiArCXJldHVy biBpOTE1X3NlcW5vX3Bhc3NlZChod3NwX3NlcW5vKHJxKSwgcnEtPmZlbmNlLnNlcW5vIC0gMSk7 Cj4gICB9Cj4gICAKPiAtc3RhdGljIGlubGluZSBib29sCj4gLV9faTkxNV9yZXF1ZXN0X2NvbXBs ZXRlZChjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyIHNlcW5vKQo+ICtzdGF0aWMg aW5saW5lIGJvb2wgaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycSkKPiAgIHsKPiAtCUdFTV9CVUdfT04oIXNlcW5vKTsKPiAtCXJldHVybiBpOTE1X3Nl cW5vX3Bhc3NlZChod3NwX3NlcW5vKHJxKSwgc2Vxbm8pICYmCj4gLQkJc2Vxbm8gPT0gaTkxNV9y ZXF1ZXN0X2dsb2JhbF9zZXFubyhycSk7Cj4gKwlyZXR1cm4gaTkxNV9zZXFub19wYXNzZWQoaHdz cF9zZXFubyhycSksIHJxLT5mZW5jZS5zZXFubyk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGlubGlu ZSBib29sIGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQoY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEpCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3JlcXVlc3RfZmFrZV9jb21wbGV0ZShjb25z dCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKCkkgZG9uJ3QgbGlrZSB0aGlzIG5hbWUuIGZvcmNl X2NvbXBsZXRlPyBmb3JjZV9od3NwX2NvbXBsZXRlPyBPciB0dXJuIGl0IAphcm91bmQsIGk5MTVf aHdzcF93cml0ZShycS0+aHdzcF9zZXFubywgcnEtPmZlbmNlLnNlcW5vKT8gTm93IGl0IGlzIApi ZWdpbm5pbmcgdG8gcmVtaW5kIG9mIGludGVsX3dyaXRlX3N0YXR1c19wYWdlLiA6KQoKPiAgIHsK PiAtCXUzMiBzZXFubzsKPiAtCj4gLQlzZXFubyA9IGk5MTVfcmVxdWVzdF9nbG9iYWxfc2Vxbm8o cnEpOwo+IC0JaWYgKCFzZXFubykKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gKwkvKiBEb24ndCBhbGxv dyBvdXJzZWx2ZXMgdG8gYWNjaWRlbnRhbGx5IGdvIGJhY2t3YXJkcy4gKi8KPiArCWlmIChpOTE1 X3JlcXVlc3RfY29tcGxldGVkKHJxKSkKPiArCQlyZXR1cm47Cj4gICAKPiAtCXJldHVybiBfX2k5 MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEsIHNlcW5vKTsKPiArCVdSSVRFX09OQ0UoKih1MzIgKily cS0+aHdzcF9zZXFubywgcnEtPmZlbmNlLnNlcW5vKTsKPiAgIH0KPiAgIAo+ICAgdm9pZCBpOTE1 X3JldGlyZV9yZXF1ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVzZXQuYwo+IGluZGV4IDEyZTVhMmJjODI1Yy4uZWZmNzY1NThiOTU4IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQuYwo+IEBAIC03NTYsNiArNzU2LDcgQEAgc3Rh dGljIHZvaWQgbm9wX3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3Qp Cj4gICAKPiAgIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmVxdWVzdC0+ZW5naW5lLT50aW1lbGluZS5s b2NrLCBmbGFncyk7Cj4gICAJX19pOTE1X3JlcXVlc3Rfc3VibWl0KHJlcXVlc3QpOwo+ICsJaTkx NV9yZXF1ZXN0X2Zha2VfY29tcGxldGUocmVxdWVzdCk7Cj4gICAJaW50ZWxfZW5naW5lX3dyaXRl X2dsb2JhbF9zZXFubyhyZXF1ZXN0LT5lbmdpbmUsIHJlcXVlc3QtPmdsb2JhbF9zZXFubyk7Cj4g ICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmVxdWVzdC0+ZW5naW5lLT50aW1lbGluZS5sb2Nr LCBmbGFncyk7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf dm1hLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5oCj4gaW5kZXggNTc5M2FiZTUw OWEyLi4xOGJlNzg2YTk3MGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV92bWEuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmgKPiBAQCAtMjIx LDYgKzIyMSwxMyBAQCBzdGF0aWMgaW5saW5lIHUzMiBpOTE1X2dndHRfb2Zmc2V0KGNvbnN0IHN0 cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgCXJldHVybiBsb3dlcl8zMl9iaXRzKHZtYS0+bm9kZS5z dGFydCk7Cj4gICB9Cj4gICAKPiArLyogWFhYIGlubGluZSBzcGFnaGV0dGkgKi8KPiArc3RhdGlj IGlubGluZSB1MzIgaTkxNV90aW1lbGluZV9zZXFub19hZGRyZXNzKGNvbnN0IHN0cnVjdCBpOTE1 X3RpbWVsaW5lICp0bCkKPiArewo+ICsJR0VNX0JVR19PTighdGwtPnBpbl9jb3VudCk7Cj4gKwly ZXR1cm4gaTkxNV9nZ3R0X29mZnNldCh0bC0+aHdzcF9nZ3R0KSArIHRsLT5od3NwX29mZnNldDsK PiArfQo+ICsKPiAgIHN0YXRpYyBpbmxpbmUgdTMyIGk5MTVfZ2d0dF9waW5fYmlhcyhzdHJ1Y3Qg aTkxNV92bWEgKnZtYSkKPiAgIHsKPiAgIAlyZXR1cm4gaTkxNV92bV90b19nZ3R0KHZtYS0+dm0p LT5waW5fYmlhczsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJj LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+IGluZGV4IGE2MjRlNjQ0ZmJk Ny4uNTkzOTI4ZGQ2YmJlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBAQCAtODI3 LDEwICs4MjcsMTAgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2NhbmNlbF9yZXF1ZXN0cyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICAJbGlzdF9mb3JfZWFjaF9lbnRyeShycSwg JmVuZ2luZS0+dGltZWxpbmUucmVxdWVzdHMsIGxpbmspIHsKPiAgIAkJR0VNX0JVR19PTighcnEt Pmdsb2JhbF9zZXFubyk7Cj4gICAKPiAtCQlpZiAodGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfU0lH TkFMRURfQklULCAmcnEtPmZlbmNlLmZsYWdzKSkKPiAtCQkJY29udGludWU7Cj4gKwkJaWYgKCF0 ZXN0X2JpdChETUFfRkVOQ0VfRkxBR19TSUdOQUxFRF9CSVQsICZycS0+ZmVuY2UuZmxhZ3MpKQo+ ICsJCQlkbWFfZmVuY2Vfc2V0X2Vycm9yKCZycS0+ZmVuY2UsIC1FSU8pOwo+ICAgCj4gLQkJZG1h X2ZlbmNlX3NldF9lcnJvcigmcnEtPmZlbmNlLCAtRUlPKTsKPiArCQlpOTE1X3JlcXVlc3RfZmFr ZV9jb21wbGV0ZShycSk7Cj4gICAJfQo+ICAgCj4gICAJLyogRmx1c2ggdGhlIHF1ZXVlZCByZXF1 ZXN0cyB0byB0aGUgdGltZWxpbmUgbGlzdCAoZm9yIHJldGlyaW5nKS4gKi8KPiBAQCAtODQzLDYg Kzg0Myw3IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCj4gICAJCQlkbWFfZmVuY2Vfc2V0X2Vycm9yKCZy cS0+ZmVuY2UsIC1FSU8pOwo+ICAgCQkJX19pOTE1X3JlcXVlc3Rfc3VibWl0KHJxKTsKPiArCQkJ aTkxNV9yZXF1ZXN0X2Zha2VfY29tcGxldGUocnEpOwo+ICAgCQl9Cj4gICAKPiAgIAkJcmJfZXJh c2VfY2FjaGVkKCZwLT5ub2RlLCAmZXhlY2xpc3RzLT5xdWV1ZSk7Cj4gQEAgLTIwMjIsMzEgKzIw MjMsNDAgQEAgc3RhdGljIHZvaWQgZ2VuOF9lbWl0X2JyZWFkY3J1bWIoc3RydWN0IGk5MTVfcmVx dWVzdCAqcmVxdWVzdCwgdTMyICpjcykKPiAgIAkvKiB3L2E6IGJpdCA1IG5lZWRzIHRvIGJlIHpl cm8gZm9yIE1JX0ZMVVNIX0RXIGFkZHJlc3MuICovCj4gICAJQlVJTERfQlVHX09OKEk5MTVfR0VN X0hXU19JTkRFWF9BRERSICYgKDEgPDwgNSkpOwo+ICAgCj4gLQljcyA9IGdlbjhfZW1pdF9nZ3R0 X3dyaXRlKGNzLCByZXF1ZXN0LT5nbG9iYWxfc2Vxbm8sCj4gKwljcyA9IGdlbjhfZW1pdF9nZ3R0 X3dyaXRlKGNzLAo+ICsJCQkJICByZXF1ZXN0LT5mZW5jZS5zZXFubywKPiArCQkJCSAgaTkxNV90 aW1lbGluZV9zZXFub19hZGRyZXNzKHJlcXVlc3QtPnRpbWVsaW5lKSk7Cj4gKwo+ICsJY3MgPSBn ZW44X2VtaXRfZ2d0dF93cml0ZShjcywKPiArCQkJCSAgcmVxdWVzdC0+Z2xvYmFsX3NlcW5vLAo+ ICAgCQkJCSAgaW50ZWxfaHdzX3NlcW5vX2FkZHJlc3MocmVxdWVzdC0+ZW5naW5lKSk7Cj4gKwo+ ICAgCSpjcysrID0gTUlfVVNFUl9JTlRFUlJVUFQ7Cj4gICAJKmNzKysgPSBNSV9BUkJfT05fT0ZG IHwgTUlfQVJCX0VOQUJMRTsKPiArCj4gICAJcmVxdWVzdC0+dGFpbCA9IGludGVsX3Jpbmdfb2Zm c2V0KHJlcXVlc3QsIGNzKTsKPiAgIAlhc3NlcnRfcmluZ190YWlsX3ZhbGlkKHJlcXVlc3QtPnJp bmcsIHJlcXVlc3QtPnRhaWwpOwo+ICAgCj4gICAJZ2VuOF9lbWl0X3dhX3RhaWwocmVxdWVzdCwg Y3MpOwo+ICAgfQo+IC1zdGF0aWMgY29uc3QgaW50IGdlbjhfZW1pdF9icmVhZGNydW1iX3N6ID0g NiArIFdBX1RBSUxfRFdPUkRTOwo+ICtzdGF0aWMgY29uc3QgaW50IGdlbjhfZW1pdF9icmVhZGNy dW1iX3N6ID0gMTAgKyBXQV9UQUlMX0RXT1JEUzsKPiAgIAo+ICAgc3RhdGljIHZvaWQgZ2VuOF9l bWl0X2JyZWFkY3J1bWJfcmNzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsIHUzMiAqY3Mp Cj4gICB7Cj4gLQkvKiBXZSdyZSB1c2luZyBxd29yZCB3cml0ZSwgc2Vxbm8gc2hvdWxkIGJlIGFs aWduZWQgdG8gOCBieXRlcy4gKi8KPiAtCUJVSUxEX0JVR19PTihJOTE1X0dFTV9IV1NfSU5ERVgg JiAxKTsKPiAtCj4gICAJY3MgPSBnZW44X2VtaXRfZ2d0dF93cml0ZV9yY3MoY3MsCj4gLQkJCQkg ICAgICByZXF1ZXN0LT5nbG9iYWxfc2Vxbm8sCj4gLQkJCQkgICAgICBpbnRlbF9od3Nfc2Vxbm9f YWRkcmVzcyhyZXF1ZXN0LT5lbmdpbmUpLAo+ICsJCQkJICAgICAgcmVxdWVzdC0+ZmVuY2Uuc2Vx bm8sCj4gKwkJCQkgICAgICBpOTE1X3RpbWVsaW5lX3NlcW5vX2FkZHJlc3MocmVxdWVzdC0+dGlt ZWxpbmUpLAo+ICAgCQkJCSAgICAgIFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VUX0NBQ0hFX0ZM VVNIIHwKPiAgIAkJCQkgICAgICBQSVBFX0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0ggfAo+ICAg CQkJCSAgICAgIFBJUEVfQ09OVFJPTF9EQ19GTFVTSF9FTkFCTEUgfAo+ICAgCQkJCSAgICAgIFBJ UEVfQ09OVFJPTF9GTFVTSF9FTkFCTEUgfAo+ICAgCQkJCSAgICAgIFBJUEVfQ09OVFJPTF9DU19T VEFMTCk7Cj4gICAKPiArCWNzID0gZ2VuOF9lbWl0X2dndHRfd3JpdGVfcmNzKGNzLAo+ICsJCQkJ ICAgICAgcmVxdWVzdC0+Z2xvYmFsX3NlcW5vLAo+ICsJCQkJICAgICAgaW50ZWxfaHdzX3NlcW5v X2FkZHJlc3MocmVxdWVzdC0+ZW5naW5lKSwKPiArCQkJCSAgICAgIFBJUEVfQ09OVFJPTF9DU19T VEFMTCk7Cj4gKwo+ICAgCSpjcysrID0gTUlfVVNFUl9JTlRFUlJVUFQ7Cj4gICAJKmNzKysgPSBN SV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRTsKPiAgIAo+IEBAIC0yMDU1LDcgKzIwNjUsNyBA QCBzdGF0aWMgdm9pZCBnZW44X2VtaXRfYnJlYWRjcnVtYl9yY3Moc3RydWN0IGk5MTVfcmVxdWVz dCAqcmVxdWVzdCwgdTMyICpjcykKPiAgIAo+ICAgCWdlbjhfZW1pdF93YV90YWlsKHJlcXVlc3Qs IGNzKTsKPiAgIH0KPiAtc3RhdGljIGNvbnN0IGludCBnZW44X2VtaXRfYnJlYWRjcnVtYl9yY3Nf c3ogPSA4ICsgV0FfVEFJTF9EV09SRFM7Cj4gK3N0YXRpYyBjb25zdCBpbnQgZ2VuOF9lbWl0X2Jy ZWFkY3J1bWJfcmNzX3N6ID0gMTQgKyBXQV9UQUlMX0RXT1JEUzsKPiAgIAo+ICAgc3RhdGljIGlu dCBnZW44X2luaXRfcmNzX2NvbnRleHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gICB7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwo+IGluZGV4IDU4ODczMDRiYzNh ZS4uYmNjNzAwZTcwMzdiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3JpbmdidWZmZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZm ZXIuYwo+IEBAIC0zMjUsNiArMzI1LDEyIEBAIHN0YXRpYyB2b2lkIGdlbjZfcmNzX2VtaXRfYnJl YWRjcnVtYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyICpjcykKPiAgIAkJIFBJUEVfQ09O VFJPTF9EQ19GTFVTSF9FTkFCTEUgfAo+ICAgCQkgUElQRV9DT05UUk9MX1FXX1dSSVRFIHwKPiAg IAkJIFBJUEVfQ09OVFJPTF9DU19TVEFMTCk7Cj4gKwkqY3MrKyA9IGk5MTVfdGltZWxpbmVfc2Vx bm9fYWRkcmVzcyhycS0+dGltZWxpbmUpIHwKPiArCQlQSVBFX0NPTlRST0xfR0xPQkFMX0dUVDsK PiArCSpjcysrID0gcnEtPmZlbmNlLnNlcW5vOwo+ICsKPiArCSpjcysrID0gR0ZYX09QX1BJUEVf Q09OVFJPTCg0KTsKPiArCSpjcysrID0gUElQRV9DT05UUk9MX1FXX1dSSVRFIHwgUElQRV9DT05U Uk9MX0NTX1NUQUxMOwo+ICAgCSpjcysrID0gaW50ZWxfaHdzX3NlcW5vX2FkZHJlc3MocnEtPmVu Z2luZSkgfCBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVDsKPiAgIAkqY3MrKyA9IHJxLT5nbG9iYWxf c2Vxbm87Cj4gICAKPiBAQCAtMzM0LDcgKzM0MCw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfcmNzX2Vt aXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyICpjcykKPiAgIAlycS0+ dGFpbCA9IGludGVsX3Jpbmdfb2Zmc2V0KHJxLCBjcyk7Cj4gICAJYXNzZXJ0X3JpbmdfdGFpbF92 YWxpZChycS0+cmluZywgcnEtPnRhaWwpOwo+ICAgfQo+IC1zdGF0aWMgY29uc3QgaW50IGdlbjZf cmNzX2VtaXRfYnJlYWRjcnVtYl9zeiA9IDE0Owo+ICtzdGF0aWMgY29uc3QgaW50IGdlbjZfcmNz X2VtaXRfYnJlYWRjcnVtYl9zeiA9IDE4Owo+ICAgCj4gICBzdGF0aWMgaW50Cj4gICBnZW43X3Jl bmRlcl9yaW5nX2NzX3N0YWxsX3dhKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+IEBAIC00MjUs NiArNDMxLDEzIEBAIHN0YXRpYyB2b2lkIGdlbjdfcmNzX2VtaXRfYnJlYWRjcnVtYihzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSwgdTMyICpjcykKPiAgIAkJIFBJUEVfQ09OVFJPTF9RV19XUklURSB8 Cj4gICAJCSBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVF9JVkIgfAo+ICAgCQkgUElQRV9DT05UUk9M X0NTX1NUQUxMKTsKPiArCSpjcysrID0gaTkxNV90aW1lbGluZV9zZXFub19hZGRyZXNzKHJxLT50 aW1lbGluZSk7Cj4gKwkqY3MrKyA9IHJxLT5mZW5jZS5zZXFubzsKPiArCj4gKwkqY3MrKyA9IEdG WF9PUF9QSVBFX0NPTlRST0woNCk7Cj4gKwkqY3MrKyA9IChQSVBFX0NPTlRST0xfUVdfV1JJVEUg fAo+ICsJCSBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVF9JVkIgfAo+ICsJCSBQSVBFX0NPTlRST0xf Q1NfU1RBTEwpOwo+ICAgCSpjcysrID0gaW50ZWxfaHdzX3NlcW5vX2FkZHJlc3MocnEtPmVuZ2lu ZSk7Cj4gICAJKmNzKysgPSBycS0+Z2xvYmFsX3NlcW5vOwo+ICAgCj4gQEAgLTQzNCwyNyArNDQ3 LDM3IEBAIHN0YXRpYyB2b2lkIGdlbjdfcmNzX2VtaXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSwgdTMyICpjcykKPiAgIAlycS0+dGFpbCA9IGludGVsX3Jpbmdfb2Zmc2V0KHJx LCBjcyk7Cj4gICAJYXNzZXJ0X3JpbmdfdGFpbF92YWxpZChycS0+cmluZywgcnEtPnRhaWwpOwo+ ICAgfQo+IC1zdGF0aWMgY29uc3QgaW50IGdlbjdfcmNzX2VtaXRfYnJlYWRjcnVtYl9zeiA9IDY7 Cj4gK3N0YXRpYyBjb25zdCBpbnQgZ2VuN19yY3NfZW1pdF9icmVhZGNydW1iX3N6ID0gMTA7Cj4g ICAKPiAgIHN0YXRpYyB2b2lkIGdlbjZfeGNzX2VtaXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSwgdTMyICpjcykKPiAgIHsKPiAtCSpjcysrID0gTUlfRkxVU0hfRFcgfCBNSV9G TFVTSF9EV19PUF9TVE9SRURXOwo+IC0JKmNzKysgPSBpbnRlbF9od3Nfc2Vxbm9fYWRkcmVzcyhy cS0+ZW5naW5lKSB8IE1JX0ZMVVNIX0RXX1VTRV9HVFQ7Cj4gKwkqY3MrKyA9IE1JX0ZMVVNIX0RX IHwgTUlfRkxVU0hfRFdfT1BfU1RPUkVEVyB8IE1JX0ZMVVNIX0RXX1NUT1JFX0lOREVYOwo+ICsJ KmNzKysgPSBJOTE1X0dFTV9IV1NfU0VRTk9fQUREUiB8IE1JX0ZMVVNIX0RXX1VTRV9HVFQ7Cj4g KwkqY3MrKyA9IHJxLT5mZW5jZS5zZXFubzsKPiArCj4gKwkqY3MrKyA9IE1JX0ZMVVNIX0RXIHwg TUlfRkxVU0hfRFdfT1BfU1RPUkVEVyB8IE1JX0ZMVVNIX0RXX1NUT1JFX0lOREVYOwo+ICsJKmNz KysgPSBJOTE1X0dFTV9IV1NfSU5ERVhfQUREUiB8IE1JX0ZMVVNIX0RXX1VTRV9HVFQ7Cj4gICAJ KmNzKysgPSBycS0+Z2xvYmFsX3NlcW5vOwo+ICsKPiAgIAkqY3MrKyA9IE1JX1VTRVJfSU5URVJS VVBUOwo+ICsJKmNzKysgPSBNSV9OT09QOwo+ICAgCj4gICAJcnEtPnRhaWwgPSBpbnRlbF9yaW5n X29mZnNldChycSwgY3MpOwo+ICAgCWFzc2VydF9yaW5nX3RhaWxfdmFsaWQocnEtPnJpbmcsIHJx LT50YWlsKTsKPiAgIH0KPiAtc3RhdGljIGNvbnN0IGludCBnZW42X3hjc19lbWl0X2JyZWFkY3J1 bWJfc3ogPSA0Owo+ICtzdGF0aWMgY29uc3QgaW50IGdlbjZfeGNzX2VtaXRfYnJlYWRjcnVtYl9z eiA9IDg7Cj4gICAKPiAgICNkZWZpbmUgR0VON19YQ1NfV0EgMzIKPiAgIHN0YXRpYyB2b2lkIGdl bjdfeGNzX2VtaXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyICpjcykK PiAgIHsKPiAgIAlpbnQgaTsKPiAgIAo+IC0JKmNzKysgPSBNSV9GTFVTSF9EVyB8IE1JX0ZMVVNI X0RXX09QX1NUT1JFRFc7Cj4gLQkqY3MrKyA9IGludGVsX2h3c19zZXFub19hZGRyZXNzKHJxLT5l bmdpbmUpIHwgTUlfRkxVU0hfRFdfVVNFX0dUVDsKPiArCSpjcysrID0gTUlfRkxVU0hfRFcgfCBN SV9GTFVTSF9EV19PUF9TVE9SRURXIHwgTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVg7Cj4gKwkqY3Mr KyA9IEk5MTVfR0VNX0hXU19TRVFOT19BRERSIHwgTUlfRkxVU0hfRFdfVVNFX0dUVDsKPiArCSpj cysrID0gcnEtPmZlbmNlLnNlcW5vOwo+ICsKPiArCSpjcysrID0gTUlfRkxVU0hfRFcgfCBNSV9G TFVTSF9EV19PUF9TVE9SRURXIHwgTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVg7Cj4gKwkqY3MrKyA9 IEk5MTVfR0VNX0hXU19JTkRFWF9BRERSIHwgTUlfRkxVU0hfRFdfVVNFX0dUVDsKPiAgIAkqY3Mr KyA9IHJxLT5nbG9iYWxfc2Vxbm87Cj4gICAKPiAgIAlmb3IgKGkgPSAwOyBpIDwgR0VON19YQ1Nf V0E7IGkrKykgewo+IEBAIC00NjgsMTIgKzQ5MSwxMSBAQCBzdGF0aWMgdm9pZCBnZW43X3hjc19l bWl0X2JyZWFkY3J1bWIoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpCj4gICAJKmNz KysgPSAwOwo+ICAgCj4gICAJKmNzKysgPSBNSV9VU0VSX0lOVEVSUlVQVDsKPiAtCSpjcysrID0g TUlfTk9PUDsKPiAgIAo+ICAgCXJxLT50YWlsID0gaW50ZWxfcmluZ19vZmZzZXQocnEsIGNzKTsK PiAgIAlhc3NlcnRfcmluZ190YWlsX3ZhbGlkKHJxLT5yaW5nLCBycS0+dGFpbCk7Cj4gICB9Cj4g LXN0YXRpYyBjb25zdCBpbnQgZ2VuN194Y3NfZW1pdF9icmVhZGNydW1iX3N6ID0gOCArIEdFTjdf WENTX1dBICogMzsKPiArc3RhdGljIGNvbnN0IGludCBnZW43X3hjc19lbWl0X2JyZWFkY3J1bWJf c3ogPSAxMCArIEdFTjdfWENTX1dBICogMzsKPiAgICN1bmRlZiBHRU43X1hDU19XQQo+ICAgCj4g ICBzdGF0aWMgdm9pZCBzZXRfaHdzdGFtKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwg dTMyIG1hc2spCj4gQEAgLTczMyw3ICs3NTUsNyBAQCBzdGF0aWMgdm9pZCByZXNldF9yaW5nKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgYm9vbCBzdGFsbGVkKQo+ICAgCXJxID0gTlVM TDsKPiAgIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGwtPmxvY2ssIGZsYWdzKTsKPiAgIAlsaXN0X2Zv cl9lYWNoX2VudHJ5KHBvcywgJnRsLT5yZXF1ZXN0cywgbGluaykgewo+IC0JCWlmICghX19pOTE1 X3JlcXVlc3RfY29tcGxldGVkKHBvcywgcG9zLT5nbG9iYWxfc2Vxbm8pKSB7Cj4gKwkJaWYgKCFp OTE1X3JlcXVlc3RfY29tcGxldGVkKHBvcykpIHsKPiAgIAkJCXJxID0gcG9zOwo+ICAgCQkJYnJl YWs7Cj4gICAJCX0KPiBAQCAtODc1LDExICs4OTcsMTAgQEAgc3RhdGljIHZvaWQgY2FuY2VsX3Jl cXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAlsaXN0X2Zvcl9lYWNo X2VudHJ5KHJlcXVlc3QsICZlbmdpbmUtPnRpbWVsaW5lLnJlcXVlc3RzLCBsaW5rKSB7Cj4gICAJ CUdFTV9CVUdfT04oIXJlcXVlc3QtPmdsb2JhbF9zZXFubyk7Cj4gICAKPiAtCQlpZiAodGVzdF9i aXQoRE1BX0ZFTkNFX0ZMQUdfU0lHTkFMRURfQklULAo+IC0JCQkgICAgICZyZXF1ZXN0LT5mZW5j ZS5mbGFncykpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAtCQlkbWFfZmVuY2Vfc2V0X2Vycm9yKCZy ZXF1ZXN0LT5mZW5jZSwgLUVJTyk7Cj4gKwkJaWYgKCF0ZXN0X2JpdChETUFfRkVOQ0VfRkxBR19T SUdOQUxFRF9CSVQsCj4gKwkJCSAgICAgICZyZXF1ZXN0LT5mZW5jZS5mbGFncykpCj4gKwkJCWRt YV9mZW5jZV9zZXRfZXJyb3IoJnJlcXVlc3QtPmZlbmNlLCAtRUlPKTsKPiArCQlpOTE1X3JlcXVl c3RfZmFrZV9jb21wbGV0ZShyZXF1ZXN0KTsKPiAgIAl9Cj4gICAKPiAgIAlpbnRlbF93cml0ZV9z dGF0dXNfcGFnZShlbmdpbmUsCj4gQEAgLTkwMywyNyArOTI0LDM4IEBAIHN0YXRpYyB2b2lkIGk5 eHhfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPiAgIAo+ICAg c3RhdGljIHZvaWQgaTl4eF9lbWl0X2JyZWFkY3J1bWIoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEs IHUzMiAqY3MpCj4gICB7Cj4gKwlHRU1fQlVHX09OKHJxLT50aW1lbGluZS0+aHdzcF9nZ3R0ICE9 IHJxLT5lbmdpbmUtPnN0YXR1c19wYWdlLnZtYSk7Cj4gKwo+ICAgCSpjcysrID0gTUlfRkxVU0g7 Cj4gICAKPiArCSpjcysrID0gTUlfU1RPUkVfRFdPUkRfSU5ERVg7Cj4gKwkqY3MrKyA9IEk5MTVf R0VNX0hXU19TRVFOT19BRERSOwo+ICsJKmNzKysgPSBycS0+ZmVuY2Uuc2Vxbm87Cj4gKwo+ICAg CSpjcysrID0gTUlfU1RPUkVfRFdPUkRfSU5ERVg7Cj4gICAJKmNzKysgPSBJOTE1X0dFTV9IV1Nf SU5ERVhfQUREUjsKPiAgIAkqY3MrKyA9IHJxLT5nbG9iYWxfc2Vxbm87Cj4gICAKPiAgIAkqY3Mr KyA9IE1JX1VTRVJfSU5URVJSVVBUOwo+IC0JKmNzKysgPSBNSV9OT09QOwo+ICAgCj4gICAJcnEt PnRhaWwgPSBpbnRlbF9yaW5nX29mZnNldChycSwgY3MpOwo+ICAgCWFzc2VydF9yaW5nX3RhaWxf dmFsaWQocnEtPnJpbmcsIHJxLT50YWlsKTsKPiAgIH0KPiAtc3RhdGljIGNvbnN0IGludCBpOXh4 X2VtaXRfYnJlYWRjcnVtYl9zeiA9IDY7Cj4gK3N0YXRpYyBjb25zdCBpbnQgaTl4eF9lbWl0X2Jy ZWFkY3J1bWJfc3ogPSA4Owo+ICAgCj4gICAjZGVmaW5lIEdFTjVfV0FfU1RPUkVTIDggLyogbXVz dCBiZSBhdCBsZWFzdCAxISAqLwo+ICAgc3RhdGljIHZvaWQgZ2VuNV9lbWl0X2JyZWFkY3J1bWIo c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpCj4gICB7Cj4gICAJaW50IGk7Cj4gICAK PiArCUdFTV9CVUdfT04ocnEtPnRpbWVsaW5lLT5od3NwX2dndHQgIT0gcnEtPmVuZ2luZS0+c3Rh dHVzX3BhZ2Uudm1hKTsKPiArCj4gICAJKmNzKysgPSBNSV9GTFVTSDsKPiAgIAo+ICsJKmNzKysg PSBNSV9TVE9SRV9EV09SRF9JTkRFWDsKPiArCSpjcysrID0gSTkxNV9HRU1fSFdTX1NFUU5PX0FE RFI7Cj4gKwkqY3MrKyA9IHJxLT5mZW5jZS5zZXFubzsKPiArCj4gICAJQlVJTERfQlVHX09OKEdF TjVfV0FfU1RPUkVTIDwgMSk7Cj4gICAJZm9yIChpID0gMDsgaSA8IEdFTjVfV0FfU1RPUkVTOyBp KyspIHsKPiAgIAkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTkRFWDsKPiBAQCAtOTMyLDExICs5 NjQsMTIgQEAgc3RhdGljIHZvaWQgZ2VuNV9lbWl0X2JyZWFkY3J1bWIoc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEsIHUzMiAqY3MpCj4gICAJfQo+ICAgCj4gICAJKmNzKysgPSBNSV9VU0VSX0lOVEVS UlVQVDsKPiArCSpjcysrID0gTUlfTk9PUDsKPiAgIAo+ICAgCXJxLT50YWlsID0gaW50ZWxfcmlu Z19vZmZzZXQocnEsIGNzKTsKPiAgIAlhc3NlcnRfcmluZ190YWlsX3ZhbGlkKHJxLT5yaW5nLCBy cS0+dGFpbCk7Cj4gICB9Cj4gLXN0YXRpYyBjb25zdCBpbnQgZ2VuNV9lbWl0X2JyZWFkY3J1bWJf c3ogPSBHRU41X1dBX1NUT1JFUyAqIDMgKyAyOwo+ICtzdGF0aWMgY29uc3QgaW50IGdlbjVfZW1p dF9icmVhZGNydW1iX3N6ID0gR0VONV9XQV9TVE9SRVMgKiAzICsgNjsKPiAgICN1bmRlZiBHRU41 X1dBX1NUT1JFUwo+ICAgCj4gICBzdGF0aWMgdm9pZAo+IEBAIC0xMTYzLDYgKzExOTYsMTAgQEAg aW50IGludGVsX3JpbmdfcGluKHN0cnVjdCBpbnRlbF9yaW5nICpyaW5nKQo+ICAgCj4gICAJR0VN X0JVR19PTihyaW5nLT52YWRkcik7Cj4gICAKPiArCXJldCA9IGk5MTVfdGltZWxpbmVfcGluKHJp bmctPnRpbWVsaW5lKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gICAJZmxh Z3MgPSBQSU5fR0xPQkFMOwo+ICAgCj4gICAJLyogUmluZyB3cmFwYXJvdW5kIGF0IG9mZnNldCAw IHNvbWV0aW1lcyBoYW5ncy4gTm8gaWRlYSB3aHkuICovCj4gQEAgLTExNzksMjggKzEyMTYsMzIg QEAgaW50IGludGVsX3JpbmdfcGluKHN0cnVjdCBpbnRlbF9yaW5nICpyaW5nKQo+ICAgCQllbHNl Cj4gICAJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4odm1hLT5vYmos IHRydWUpOwo+ICAgCQlpZiAodW5saWtlbHkocmV0KSkKPiAtCQkJcmV0dXJuIHJldDsKPiArCQkJ Z290byB1bnBpbl90aW1lbGluZTsKPiAgIAl9Cj4gICAKPiAgIAlyZXQgPSBpOTE1X3ZtYV9waW4o dm1hLCAwLCAwLCBmbGFncyk7Cj4gICAJaWYgKHVubGlrZWx5KHJldCkpCj4gLQkJcmV0dXJuIHJl dDsKPiArCQlnb3RvIHVucGluX3RpbWVsaW5lOwo+ICAgCj4gICAJaWYgKGk5MTVfdm1hX2lzX21h cF9hbmRfZmVuY2VhYmxlKHZtYSkpCj4gICAJCWFkZHIgPSAodm9pZCBfX2ZvcmNlICopaTkxNV92 bWFfcGluX2lvbWFwKHZtYSk7Cj4gICAJZWxzZQo+ICAgCQlhZGRyID0gaTkxNV9nZW1fb2JqZWN0 X3Bpbl9tYXAodm1hLT5vYmosIG1hcCk7Cj4gLQlpZiAoSVNfRVJSKGFkZHIpKQo+IC0JCWdvdG8g ZXJyOwo+ICsJaWYgKElTX0VSUihhZGRyKSkgewo+ICsJCXJldCA9IFBUUl9FUlIoYWRkcik7Cj4g KwkJZ290byB1bnBpbl9yaW5nOwo+ICsJfQo+ICAgCj4gICAJdm1hLT5vYmotPnBpbl9nbG9iYWwr KzsKPiAgIAo+ICAgCXJpbmctPnZhZGRyID0gYWRkcjsKPiAgIAlyZXR1cm4gMDsKPiAgIAo+IC1l cnI6Cj4gK3VucGluX3Jpbmc6Cj4gICAJaTkxNV92bWFfdW5waW4odm1hKTsKPiAtCXJldHVybiBQ VFJfRVJSKGFkZHIpOwo+ICt1bnBpbl90aW1lbGluZToKPiArCWk5MTVfdGltZWxpbmVfdW5waW4o cmluZy0+dGltZWxpbmUpOwo+ICsJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ICAgdm9pZCBpbnRl bF9yaW5nX3Jlc2V0KHN0cnVjdCBpbnRlbF9yaW5nICpyaW5nLCB1MzIgdGFpbCkKPiBAQCAtMTIy OSw2ICsxMjcwLDggQEAgdm9pZCBpbnRlbF9yaW5nX3VucGluKHN0cnVjdCBpbnRlbF9yaW5nICpy aW5nKQo+ICAgCj4gICAJcmluZy0+dm1hLT5vYmotPnBpbl9nbG9iYWwtLTsKPiAgIAlpOTE1X3Zt YV91bnBpbihyaW5nLT52bWEpOwo+ICsKPiArCWk5MTVfdGltZWxpbmVfdW5waW4ocmluZy0+dGlt ZWxpbmUpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICoKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19lbmdpbmUuYwo+IGluZGV4IGFjZDI3Yzdl ODA3Yi4uYjRiNjEwNTZiMjI3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9tb2NrX2VuZ2luZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL21vY2tfZW5naW5lLmMKPiBAQCAtNzksNiArNzksNyBAQCBzdGF0aWMgdm9pZCBhZHZhbmNl KHN0cnVjdCBtb2NrX2VuZ2luZSAqZW5naW5lLAo+ICAgCQkgICAgc3RydWN0IG1vY2tfcmVxdWVz dCAqcmVxdWVzdCkKPiAgIHsKPiAgIAlsaXN0X2RlbF9pbml0KCZyZXF1ZXN0LT5saW5rKTsKPiAr CWk5MTVfcmVxdWVzdF9mYWtlX2NvbXBsZXRlKCZyZXF1ZXN0LT5iYXNlKTsKPiAgIAltb2NrX3Nl cW5vX2FkdmFuY2UoJmVuZ2luZS0+YmFzZSwgcmVxdWVzdC0+YmFzZS5nbG9iYWxfc2Vxbm8pOwo+ ICAgfQo+ICAgCj4gQEAgLTI1MywxNiArMjU0LDEzIEBAIHZvaWQgbW9ja19lbmdpbmVfZmx1c2go c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCWRlbF90aW1lcl9zeW5jKCZtb2Nr LT5od19kZWxheSk7Cj4gICAKPiAgIAlzcGluX2xvY2tfaXJxKCZtb2NrLT5od19sb2NrKTsKPiAt CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXF1ZXN0LCBybiwgJm1vY2stPmh3X3F1ZXVlLCBs aW5rKSB7Cj4gLQkJbGlzdF9kZWxfaW5pdCgmcmVxdWVzdC0+bGluayk7Cj4gLQkJbW9ja19zZXFu b19hZHZhbmNlKCZtb2NrLT5iYXNlLCByZXF1ZXN0LT5iYXNlLmdsb2JhbF9zZXFubyk7Cj4gLQl9 Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxdWVzdCwgcm4sICZtb2NrLT5od19xdWV1 ZSwgbGluaykKPiArCQlhZHZhbmNlKG1vY2ssIHJlcXVlc3QpOwo+ICAgCXNwaW5fdW5sb2NrX2ly cSgmbW9jay0+aHdfbG9jayk7Cj4gICB9Cj4gICAKPiAgIHZvaWQgbW9ja19lbmdpbmVfcmVzZXQo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+IC0JaW50ZWxfd3JpdGVfc3Rh dHVzX3BhZ2UoZW5naW5lLCBJOTE1X0dFTV9IV1NfSU5ERVgsIDApOwo+ICAgfQo+ICAgCj4gICB2 b2lkIG1vY2tfZW5naW5lX2ZyZWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IAoK TG9va3MgZ29vZC4KClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==