From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 12/22] drm/i915: Generalise GPU activity tracking Date: Tue, 5 Feb 2019 08:51:19 +0000 Message-ID: References: <20190204132214.9459-1-chris@chris-wilson.co.uk> <20190204132214.9459-13-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 mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id A12366E0FA for ; Tue, 5 Feb 2019 08:51:14 +0000 (UTC) In-Reply-To: <20190204132214.9459-13-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 Ck9uIDA0LzAyLzIwMTkgMTM6MjIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBXZSBjdXJyZW50bHkg dHJhY2sgR1BVIG1lbW9yeSB1c2FnZSBpbnNpZGUgVk1BLCBzdWNoIHRoYXQgd2UgbmV2ZXIKPiBy ZWxlYXNlIG1lbW9yeSB1c2VkIGJ5IHRoZSBHUFUgdW50aWwgYWZ0ZXIgaXQgaGFzIGZpbmlzaGVk IGFjY2Vzc2luZyBpdC4KPiBIb3dldmVyLCB3ZSBtYXkgd2FudCB0byB0cmFjayBvdGhlciByZXNv dXJjZXMgYXNpZGUgZnJvbSBWTUEsIG9yIHdlIG1heQo+IHdhbnQgdG8gc3BsaXQgYSBWTUEgaW50 byBtdWx0aXBsZSBpbmRlcGVuZGVudCByZWdpb25zIGFuZCB0cmFjayBlYWNoCj4gc2VwYXJhdGVs eS4gRm9yIHRoaXMgcHVycG9zZSwgZ2VuZXJhbGlzZSBvdXIgcmVxdWVzdCB0cmFja2luZyAoYWtp biB0bwo+IHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QpIHNvIHRoYXQgd2UgY2FuIGVtYmVkIGl0 IGludG8gb3RoZXIgb2JqZWN0cy4KClBsZWFzZSBhZGQgY2hhbmdlbG9nLgoKPiBTaWduZWQtb2Zm LWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAtLS0KPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgNCArLQo+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuYyAgICAgICAgICAgIHwgMjI4ICsrKysr KysrKysrKysrKysrKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuaCAgICAg ICAgICAgIHwgIDY5ICsrKysrKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmVf dHlwZXMuaCAgICAgIHwgIDI2ICsrCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9n dHQuYyAgICAgICAgICAgfCAgIDMgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1h LmMgICAgICAgICAgICAgICB8IDE3MyArKystLS0tLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3ZtYS5oICAgICAgICAgICAgICAgfCAgIDkgKy0KPiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2FjdGl2ZS5jICB8IDE1OCArKysrKysrKysrKysKPiAgIC4u Li9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oICB8ICAgMyArLQo+ICAg OSBmaWxlcyBjaGFuZ2VkLCA1MTkgaW5zZXJ0aW9ucygrKSwgMTU0IGRlbGV0aW9ucygtKQo+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlLmMKPiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZS5oCj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmVfdHlw ZXMuaAo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pOTE1X2FjdGl2ZS5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCAyMTBkMGU4Nzc3 YjYuLjE3ODdlMTI5OWIxYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTU3LDcgKzU3 LDkgQEAgaTkxNS0kKENPTkZJR19ERUJVR19GUykgKz0gaTkxNV9kZWJ1Z2ZzLm8gaW50ZWxfcGlw ZV9jcmMubwo+ICAgaTkxNS0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gaTkxNV9wbXUubwo+ICAg Cj4gICAjIEdFTSBjb2RlCj4gLWk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBcCj4gK2k5MTUt eSArPSBcCj4gKwkgIGk5MTVfYWN0aXZlLm8gXAo+ICsJICBpOTE1X2NtZF9wYXJzZXIubyBcCj4g ICAJICBpOTE1X2dlbV9iYXRjaF9wb29sLm8gXAo+ICAgCSAgaTkxNV9nZW1fY2xmbHVzaC5vIFwK PiAgIAkgIGk5MTVfZ2VtX2NvbnRleHQubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfYWN0aXZlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZS5j Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjkxOTUwZDc3OGNh Ygo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2 ZS5jCj4gQEAgLTAsMCArMSwyMjggQEAKPiArLyoKPiArICogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IE1JVAo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgo+ ICsgKi8KPiArCj4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICsjaW5jbHVkZSAiaTkxNV9hY3Rp dmUuaCIKPiArCj4gKyNkZWZpbmUgQktMKHJlZikgKCYocmVmKS0+aTkxNS0+ZHJtLnN0cnVjdF9t dXRleCkKPiArCj4gK3N0cnVjdCBhY3RpdmVfbm9kZSB7Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fYWN0 aXZlIGJhc2U7Cj4gKwlzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZjsKPiArCXN0cnVjdCByYl9ub2Rl IG5vZGU7Cj4gKwl1NjQgdGltZWxpbmU7Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtfX2Fj dGl2ZV9yZXRpcmUoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYpCj4gK3sKPiArCUdFTV9CVUdfT04o IXJlZi0+Y291bnQpOwo+ICsJaWYgKCEtLXJlZi0+Y291bnQpCj4gKwkJcmVmLT5yZXRpcmUocmVm KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArbm9kZV9yZXRpcmUoc3RydWN0IGk5MTVfZ2Vt X2FjdGl2ZSAqYmFzZSwgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gK3sKPiArCV9fYWN0aXZl X3JldGlyZShjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGFjdGl2ZV9ub2RlLCBiYXNlKS0+cmVm KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArbGFzdF9yZXRpcmUoc3RydWN0IGk5MTVfZ2Vt X2FjdGl2ZSAqYmFzZSwgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gK3sKPiArCV9fYWN0aXZl X3JldGlyZShjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGk5MTVfYWN0aXZlLCBsYXN0KSk7Cj4g K30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICoKPiArYWN0aXZlX2luc3Rh bmNlKHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmLCB1NjQgaWR4KQo+ICt7Cj4gKwlzdHJ1Y3QgYWN0 aXZlX25vZGUgKm5vZGU7Cj4gKwlzdHJ1Y3QgcmJfbm9kZSAqKnAsICpwYXJlbnQ7Cj4gKwlzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpvbGQ7Cj4gKwo+ICsJLyoKPiArCSAqIFdlIHRyYWNrIHRoZSBtb3N0 IHJlY2VudGx5IHVzZWQgdGltZWxpbmUgdG8gc2tpcCBhIHJidHJlZSBzZWFyY2gKPiArCSAqIGZv ciB0aGUgY29tbW9uIGNhc2UsIHVuZGVyIHR5cGljYWwgbG9hZHMgd2UgbmV2ZXIgbmVlZCB0aGUg cmJ0cmVlCj4gKwkgKiBhdCBhbGwuIFdlIGNhbiByZXVzZSB0aGUgbGFzdCBzbG90IGlmIGl0IGlz IGVtcHR5LCB0aGF0IGlzCj4gKwkgKiBhZnRlciB0aGUgcHJldmlvdXMgYWN0aXZpdHkgaGFzIGJl ZW4gcmV0aXJlZCwgb3IgaWYgaXQgbWF0Y2hlcyB0aGUKPiArCSAqIGN1cnJlbnQgdGltZWxpbmUu Cj4gKwkgKgo+ICsJICogTm90ZSB0aGF0IHdlIGFsbG93IHRoZSB0aW1lbGluZSB0byBiZSBhY3Rp dmUgc2ltdWx0YW5lb3VzbHkgaW4KPiArCSAqIHRoZSByYnRyZWUgYW5kIHRoZSBsYXN0IGNhY2hl LiBXZSBkbyB0aGlzIHRvIGF2b2lkIGhhdmluZwo+ICsJICogdG8gc2VhcmNoIGFuZCByZXBsYWNl IHRoZSByYnRyZWUgZWxlbWVudCBmb3IgYSBuZXcgdGltZWxpbmUsIHdpdGgKPiArCSAqIHRoZSBj b3N0IGJlaW5nIHRoYXQgd2UgbXVzdCBiZSBhd2FyZSB0aGF0IHRoZSByZWYgbWF5IGJlIHJldGly ZWQKPiArCSAqIHR3aWNlIGZvciB0aGUgc2FtZSB0aW1lbGluZSAoYXMgdGhlIG9sZGVyIHJidHJl ZSBlbGVtZW50IHdpbGwgYmUKPiArCSAqIHJldGlyZWQgYmVmb3JlIHRoZSBuZXcgcmVxdWVzdCBh ZGRlZCB0byBsYXN0KS4KPiArCSAqLwo+ICsJb2xkID0gaTkxNV9nZW1fYWN0aXZlX3JhdygmcmVm LT5sYXN0LCBCS0wocmVmKSk7Cj4gKwlpZiAoIW9sZCB8fCBvbGQtPmZlbmNlLmNvbnRleHQgPT0g aWR4KQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCS8qIE1vdmUgdGhlIGN1cnJlbnRseSBhY3RpdmUg ZmVuY2UgaW50byB0aGUgcmJ0cmVlICovCj4gKwlpZHggPSBvbGQtPmZlbmNlLmNvbnRleHQ7Cj4g Kwo+ICsJcGFyZW50ID0gTlVMTDsKPiArCXAgPSAmcmVmLT50cmVlLnJiX25vZGU7Cj4gKwl3aGls ZSAoKnApIHsKPiArCQlwYXJlbnQgPSAqcDsKPiArCj4gKwkJbm9kZSA9IHJiX2VudHJ5KHBhcmVu dCwgc3RydWN0IGFjdGl2ZV9ub2RlLCBub2RlKTsKPiArCQlpZiAobm9kZS0+dGltZWxpbmUgPT0g aWR4KQo+ICsJCQlnb3RvIHJlcGxhY2U7Cj4gKwo+ICsJCWlmIChub2RlLT50aW1lbGluZSA8IGlk eCkKPiArCQkJcCA9ICZwYXJlbnQtPnJiX3JpZ2h0Owo+ICsJCWVsc2UKPiArCQkJcCA9ICZwYXJl bnQtPnJiX2xlZnQ7Cj4gKwl9Cj4gKwo+ICsJbm9kZSA9IGttYWxsb2Moc2l6ZW9mKCpub2RlKSwg R0ZQX0tFUk5FTCk7Cj4gKwo+ICsJLyoga21hbGxvYyBtYXkgcmV0aXJlIHRoZSByZWYtPmxhc3Qg KHRoYW5rcyBzaHJpbmtlcikhICovCj4gKwlpZiAodW5saWtlbHkoIWk5MTVfZ2VtX2FjdGl2ZV9y YXcoJnJlZi0+bGFzdCwgQktMKHJlZikpKSkgewo+ICsJCWtmcmVlKG5vZGUpOwo+ICsJCWdvdG8g b3V0Owo+ICsJfQo+ICsKPiArCWlmICh1bmxpa2VseSghbm9kZSkpCj4gKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7Cj4gKwo+ICsJaW5pdF9yZXF1ZXN0X2FjdGl2ZSgmbm9kZS0+YmFzZSwgbm9k ZV9yZXRpcmUpOwo+ICsJbm9kZS0+cmVmID0gcmVmOwo+ICsJbm9kZS0+dGltZWxpbmUgPSBpZHg7 Cj4gKwo+ICsJcmJfbGlua19ub2RlKCZub2RlLT5ub2RlLCBwYXJlbnQsIHApOwo+ICsJcmJfaW5z ZXJ0X2NvbG9yKCZub2RlLT5ub2RlLCAmcmVmLT50cmVlKTsKPiArCj4gK3JlcGxhY2U6Cj4gKwkv Kgo+ICsJICogT3ZlcndyaXRlIHRoZSBwcmV2aW91cyBhY3RpdmUgc2xvdCBpbiB0aGUgcmJ0cmVl IHdpdGggbGFzdCwKPiArCSAqIGxlYXZpbmcgbGFzdCB6ZXJvZWQuIElmIHRoZSBwcmV2aW91cyBz bG90IGlzIHN0aWxsIGFjdGl2ZSwKPiArCSAqIHdlIG11c3QgYmUgY2FyZWZ1bCBhcyB3ZSBub3cg b25seSBleHBlY3QgdG8gcmVjZWl2ZSBvbmUgcmV0aXJlCj4gKwkgKiBjYWxsYmFjayBub3QgdHdv LCBhbmQgc28gbXVjaCB1bmRvIHRoZSBhY3RpdmUgY291bnRpbmcgZm9yIHRoZQo+ICsJICogb3Zl cndyaXR0ZW4gc2xvdC4KPiArCSAqLwo+ICsJaWYgKGk5MTVfZ2VtX2FjdGl2ZV9pc3NldCgmbm9k ZS0+YmFzZSkpIHsKPiArCQkvKiBSZXRpcmUgb3Vyc2VsdmVzIGZyb20gdGhlIG9sZCBycS0+YWN0 aXZlX2xpc3QgKi8KPiArCQlfX2xpc3RfZGVsX2VudHJ5KCZub2RlLT5iYXNlLmxpbmspOwo+ICsJ CXJlZi0+Y291bnQtLTsKPiArCQlHRU1fQlVHX09OKCFyZWYtPmNvdW50KTsKPiArCX0KPiArCUdF TV9CVUdfT04obGlzdF9lbXB0eSgmcmVmLT5sYXN0LmxpbmspKTsKPiArCWxpc3RfcmVwbGFjZV9p bml0KCZyZWYtPmxhc3QubGluaywgJm5vZGUtPmJhc2UubGluayk7Cj4gKwlub2RlLT5iYXNlLnJl cXVlc3QgPSBmZXRjaF9hbmRfemVybygmcmVmLT5sYXN0LnJlcXVlc3QpOwo+ICsKPiArb3V0Ogo+ ICsJcmV0dXJuICZyZWYtPmxhc3Q7Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9hY3RpdmVfaW5pdChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiArCQkgICAgICBzdHJ1Y3QgaTkxNV9hY3Rp dmUgKnJlZiwKPiArCQkgICAgICB2b2lkICgqcmV0aXJlKShzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJl ZikpCj4gK3sKPiArCXJlZi0+aTkxNSA9IGk5MTU7Cj4gKwlyZWYtPnJldGlyZSA9IHJldGlyZTsK PiArCXJlZi0+dHJlZSA9IFJCX1JPT1Q7Cj4gKwlpbml0X3JlcXVlc3RfYWN0aXZlKCZyZWYtPmxh c3QsIGxhc3RfcmV0aXJlKTsKPiArCXJlZi0+Y291bnQgPSAwOwo+ICt9Cj4gKwo+ICtpbnQgaTkx NV9hY3RpdmVfcmVmKHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmLAo+ICsJCSAgICB1NjQgdGltZWxp bmUsCj4gKwkJICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkx NV9nZW1fYWN0aXZlICphY3RpdmU7Cj4gKwo+ICsJYWN0aXZlID0gYWN0aXZlX2luc3RhbmNlKHJl ZiwgdGltZWxpbmUpOwo+ICsJaWYgKElTX0VSUihhY3RpdmUpKQo+ICsJCXJldHVybiBQVFJfRVJS KGFjdGl2ZSk7Cj4gKwo+ICsJaWYgKCFpOTE1X2dlbV9hY3RpdmVfaXNzZXQoYWN0aXZlKSkKPiAr CQlyZWYtPmNvdW50Kys7Cj4gKwlpOTE1X2dlbV9hY3RpdmVfc2V0KGFjdGl2ZSwgcnEpOwo+ICsK PiArCUdFTV9CVUdfT04oIXJlZi0+Y291bnQpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2Jv b2wgaTkxNV9hY3RpdmVfYWNxdWlyZShzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZikKPiArewo+ICsJ bG9ja2RlcF9hc3NlcnRfaGVsZChCS0wocmVmKSk7Cj4gKwlyZXR1cm4gIXJlZi0+Y291bnQrKzsK PiArfQo+ICsKPiArdm9pZCBpOTE1X2FjdGl2ZV9yZWxlYXNlKHN0cnVjdCBpOTE1X2FjdGl2ZSAq cmVmKQo+ICt7Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKEJLTChyZWYpKTsKPiArCV9fYWN0aXZl X3JldGlyZShyZWYpOwo+ICt9Cj4gKwo+ICtpbnQgaTkxNV9hY3RpdmVfd2FpdChzdHJ1Y3QgaTkx NV9hY3RpdmUgKnJlZikKPiArewo+ICsJc3RydWN0IGFjdGl2ZV9ub2RlICppdCwgKm47Cj4gKwlp bnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoaTkxNV9hY3RpdmVfYWNxdWlyZShyZWYpKQo+ICsJCWdv dG8gb3V0X3JlbGVhc2U7Cj4gKwo+ICsJcmV0ID0gaTkxNV9nZW1fYWN0aXZlX3JldGlyZSgmcmVm LT5sYXN0LCBCS0wocmVmKSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0X3JlbGVhc2U7Cj4g Kwo+ICsJcmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0LCBuLCAmcmVmLT50 cmVlLCBub2RlKSB7Cj4gKwkJcmV0ID0gaTkxNV9nZW1fYWN0aXZlX3JldGlyZSgmaXQtPmJhc2Us IEJLTChyZWYpKTsKPiArCQlpZiAocmV0KQo+ICsJCQlicmVhazsKPiArCX0KPiArCj4gK291dF9y ZWxlYXNlOgo+ICsJaTkxNV9hY3RpdmVfcmVsZWFzZShyZWYpOwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBfX2k5MTVfcmVxdWVzdF9hd2FpdF9hY3RpdmUoc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnEsCj4gKwkJCQkgICAgICAgc3RydWN0IGk5MTVfZ2VtX2FjdGl2ZSAqYWN0 aXZlKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpiYXJyaWVyID0KPiArCQlpOTE1X2dl bV9hY3RpdmVfcmF3KGFjdGl2ZSwgJnJxLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCj4g KwlyZXR1cm4gYmFycmllciA/IGk5MTVfcmVxdWVzdF9hd2FpdF9kbWFfZmVuY2UocnEsICZiYXJy aWVyLT5mZW5jZSkgOiAwOwo+ICt9Cj4gKwo+ICtpbnQgaTkxNV9yZXF1ZXN0X2F3YWl0X2FjdGl2 ZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgc3RydWN0IGk5MTVfYWN0aXZlICpyZWYpCj4gK3sK PiArCXN0cnVjdCBhY3RpdmVfbm9kZSAqaXQsICpuOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQg PSBfX2k5MTVfcmVxdWVzdF9hd2FpdF9hY3RpdmUocnEsICZyZWYtPmxhc3QpOwo+ICsJaWYgKHJl dCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50 cnlfc2FmZShpdCwgbiwgJnJlZi0+dHJlZSwgbm9kZSkgewo+ICsJCXJldCA9IF9faTkxNV9yZXF1 ZXN0X2F3YWl0X2FjdGl2ZShycSwgJml0LT5iYXNlKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1 cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIGk5MTVfYWN0 aXZlX2Zpbmkoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYpCj4gK3sKPiArCXN0cnVjdCBhY3RpdmVf bm9kZSAqaXQsICpuOwo+ICsKPiArCUdFTV9CVUdfT04oaTkxNV9nZW1fYWN0aXZlX2lzc2V0KCZy ZWYtPmxhc3QpKTsKPiArCj4gKwlyYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUo aXQsIG4sICZyZWYtPnRyZWUsIG5vZGUpIHsKPiArCQlHRU1fQlVHX09OKGk5MTVfZ2VtX2FjdGl2 ZV9pc3NldCgmaXQtPmJhc2UpKTsKPiArCQlrZnJlZShpdCk7Cj4gKwl9Cj4gKwlyZWYtPnRyZWUg PSBSQl9ST09UOwo+ICt9Cj4gKwo+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VM RlRFU1QpCj4gKyNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9hY3RpdmUuYyIKPiArI2VuZGlmCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlLmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAuLjBhYTI2MjhlYTczNAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZS5oCj4gQEAgLTAsMCArMSw2OSBAQAo+ICsvKgo+ ICsgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCj4gKyAqCj4gKyAqIENvcHlyaWdodCDC qSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfSTkxNV9BQ1RJ VkVfSF8KPiArI2RlZmluZSBfSTkxNV9BQ1RJVkVfSF8KPiArCj4gKyNpbmNsdWRlICJpOTE1X2Fj dGl2ZV90eXBlcy5oIgo+ICsKPiArLyoKPiArICogR1BVIGFjdGl2aXR5IHRyYWNraW5nCj4gKyAq Cj4gKyAqIEVhY2ggc2V0IG9mIGNvbW1hbmRzIHN1Ym1pdHRlZCB0byB0aGUgR1BVIGNvbXByb21p c2VzIGEgc2luZ2xlIHJlcXVlc3QgdGhhdAo+ICsgKiBzaWduYWxzIGEgZmVuY2UgdXBvbiBjb21w bGV0aW9uLiBzdHJ1Y3QgaTkxNV9yZXF1ZXN0IGNvbWJpbmVzIHRoZQo+ICsgKiBjb21tYW5kIHN1 Ym1pc3Npb24sIHNjaGVkdWxpbmcgYW5kIGZlbmNlIHNpZ25hbGluZyByb2xlcy4gSWYgd2Ugd2Fu dCB0byBzZWUKPiArICogaWYgYSBwYXJ0aWN1bGFyIHRhc2sgaXMgY29tcGxldGUsIHdlIG5lZWQg dG8gZ3JhYiB0aGUgZmVuY2UgKHN0cnVjdAo+ICsgKiBpOTE1X3JlcXVlc3QpIGZvciB0aGF0IHRh c2sgYW5kIGNoZWNrIG9yIHdhaXQgZm9yIGl0IHRvIGJlIHNpZ25hbGVkLiBNb3JlCj4gKyAqIG9m dGVuIHRob3VnaCB3ZSB3YW50IHRvIHRyYWNrIHRoZSBzdGF0dXMgb2YgYSBidW5jaCBvZiB0YXNr cywgZm9yIGV4YW1wbGUKPiArICogdG8gd2FpdCBmb3IgdGhlIEdQVSB0byBmaW5pc2ggYWNjZXNz aW5nIHNvbWUgbWVtb3J5IGFjcm9zcyBhIHZhcmlldHkgb2YKPiArICogZGlmZmVyZW50IGNvbW1h bmQgcGlwZWxpbmVzIGZyb20gZGlmZmVyZW50IGNsaWVudHMuIFdlIGNvdWxkIGNob29zZSB0bwo+ ICsgKiB0cmFjayBldmVyeSBzaW5nbGUgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2ss IGJ1dCBrbm93aW5nIHRoYXQKPiArICogZWFjaCByZXF1ZXN0IGJlbG9uZ3MgdG8gYW4gb3JkZXJl ZCB0aW1lbGluZSAobGF0ZXIgcmVxdWVzdHMgd2l0aGluIGEKPiArICogdGltZWxpbmUgbXVzdCB3 YWl0IGZvciBlYXJsaWVyIHJlcXVlc3RzKSwgd2UgbmVlZCBvbmx5IHRyYWNrIHRoZQo+ICsgKiBs YXRlc3QgcmVxdWVzdCBpbiBlYWNoIHRpbWVsaW5lIHRvIGRldGVybWluZSB0aGUgb3ZlcmFsbCBz dGF0dXMgb2YgdGhlCj4gKyAqIHRhc2suCj4gKyAqCj4gKyAqIHN0cnVjdCBpOTE1X2FjdGl2ZSBw cm92aWRlcyB0aGlzIHRyYWNraW5nIGFjcm9zcyB0aW1lbGluZXMuIEl0IGJ1aWxkcyBhCj4gKyAq IGNvbXBvc2l0ZSBzaGFyZWQtZmVuY2UsIGFuZCBpcyB1cGRhdGVkIGFzIG5ldyB3b3JrIGlzIHN1 Ym1pdHRlZCB0byB0aGUgdGFzaywKPiArICogZm9ybWluZyBhIHNuYXBzaG90IG9mIHRoZSBjdXJy ZW50IHN0YXR1cy4gSXQgc2hvdWxkIGJlIGVtYmVkZGVkIGludG8gdGhlCj4gKyAqIGRpZmZlcmVu dCByZXNvdXJjZXMgdGhhdCBuZWVkIHRvIHRyYWNrIHRoZWlyIGFzc29jaWF0ZWQgR1BVIGFjdGl2 aXR5IHRvCj4gKyAqIHByb3ZpZGUgYSBjYWxsYmFjayB3aGVuIHRoYXQgR1BVIGFjdGl2aXR5IGhh cyBjZWFzZWQsIG9yIG90aGVyd2lzZSB0bwo+ICsgKiBwcm92aWRlIGEgc2VyaWFsaXNhdGlvbiBw b2ludCBlaXRoZXIgZm9yIHJlcXVlc3Qgc3VibWlzc2lvbiBvciBmb3IgQ1BVCj4gKyAqIHN5bmNo cm9uaXNhdGlvbi4KPiArICovCj4gKwo+ICt2b2lkIGk5MTVfYWN0aXZlX2luaXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gKwkJICAgICAgc3RydWN0IGk5MTVfYWN0aXZlICpyZWYs Cj4gKwkJICAgICAgdm9pZCAoKnJldGlyZSkoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYpKTsKPiAr Cj4gK2ludCBpOTE1X2FjdGl2ZV9yZWYoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYsCj4gKwkJICAg IHU2NCB0aW1lbGluZSwKPiArCQkgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpOwo+ICsKPiAr aW50IGk5MTVfYWN0aXZlX3dhaXQoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYpOwo+ICsKPiAraW50 IGk5MTVfcmVxdWVzdF9hd2FpdF9hY3RpdmUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gKwkJ CSAgICAgIHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmKTsKPiArCj4gK2Jvb2wgaTkxNV9hY3RpdmVf YWNxdWlyZShzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZik7Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZv aWQgaTkxNV9hY3RpdmVfY2FuY2VsKHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmKQo+ICt7Cj4gKwlH RU1fQlVHX09OKHJlZi0+Y291bnQgIT0gMSk7Cj4gKwlyZWYtPmNvdW50ID0gMDsKPiArfQo+ICsK PiArdm9pZCBpOTE1X2FjdGl2ZV9yZWxlYXNlKHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmKTsKPiAr Cj4gK3N0YXRpYyBpbmxpbmUgYm9vbAo+ICtpOTE1X2FjdGl2ZV9pc19pZGxlKGNvbnN0IHN0cnVj dCBpOTE1X2FjdGl2ZSAqcmVmKQo+ICt7Cj4gKwlyZXR1cm4gIXJlZi0+Y291bnQ7Cj4gK30KPiAr Cj4gK3ZvaWQgaTkxNV9hY3RpdmVfZmluaShzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZik7Cj4gKwo+ ICsjZW5kaWYgLyogX0k5MTVfQUNUSVZFX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfYWN0aXZlX3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2FjdGl2ZV90eXBlcy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw MDAuLjQxMWU1MDJlZDhkZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2FjdGl2ZV90eXBlcy5oCj4gQEAgLTAsMCArMSwyNiBAQAo+ICsvKgo+ICsgKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCj4gKyAqCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5 IEludGVsIENvcnBvcmF0aW9uCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfSTkxNV9BQ1RJVkVfVFlQ RVNfSF8KPiArI2RlZmluZSBfSTkxNV9BQ1RJVkVfVFlQRVNfSF8KPiArCj4gKyNpbmNsdWRlIDxs aW51eC9yYnRyZWUuaD4KPiArCj4gKyNpbmNsdWRlICJpOTE1X3JlcXVlc3QuaCIKPiArCj4gK3N0 cnVjdCBkcm1faTkxNV9wcml2YXRlOwo+ICsKPiArc3RydWN0IGk5MTVfYWN0aXZlIHsKPiArCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1Owo+ICsKPiArCXN0cnVjdCByYl9yb290IHRyZWU7 Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlIGxhc3Q7Cj4gKwl1bnNpZ25lZCBpbnQgY291bnQ7 Cj4gKwo+ICsJdm9pZCAoKnJldGlyZSkoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYpOwo+ICt9Owo+ ICsKPiArI2VuZGlmIC8qIF9JOTE1X0FDVElWRV9UWVBFU19IXyAqLwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXggNDliMDA5OTZhMTVlLi5lNjI1NjU5YzAzYTIgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IEBAIC0xOTE3LDE0ICsxOTE3LDEzIEBA IHN0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKnBkX3ZtYV9jcmVhdGUoc3RydWN0IGdlbjZfaHdfcHBn dHQgKnBwZ3R0LCBpbnQgc2l6ZSkKPiAgIAlpZiAoIXZtYSkKPiAgIAkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7Cj4gICAKPiArCWk5MTVfYWN0aXZlX2luaXQoaTkxNSwgJnZtYS0+YWN0aXZlLCBO VUxMKTsKPiAgIAlpbml0X3JlcXVlc3RfYWN0aXZlKCZ2bWEtPmxhc3RfZmVuY2UsIE5VTEwpOwo+ ICAgCj4gICAJdm1hLT52bSA9ICZnZ3R0LT52bTsKPiAgIAl2bWEtPm9wcyA9ICZwZF92bWFfb3Bz Owo+ICAgCXZtYS0+cHJpdmF0ZSA9IHBwZ3R0Owo+ICAgCj4gLQl2bWEtPmFjdGl2ZSA9IFJCX1JP T1Q7Cj4gLQo+ICAgCXZtYS0+c2l6ZSA9IHNpemU7Cj4gICAJdm1hLT5mZW5jZV9zaXplID0gc2l6 ZTsKPiAgIAl2bWEtPmZsYWdzID0gSTkxNV9WTUFfR0dUVDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1h LmMKPiBpbmRleCBkODNiOGFkNWY4NTkuLmQ0NzcyMDYxZTY0MiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV92bWEuYwo+IEBAIC02MywyMiArNjMsMjMgQEAgc3RhdGljIHZvaWQgdm1hX3ByaW50X2Fs bG9jYXRvcihzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgY29uc3QgY2hhciAqcmVhc29uKQo+ICAgCj4g ICAjZW5kaWYKPiAgIAo+IC1zdHJ1Y3QgaTkxNV92bWFfYWN0aXZlIHsKPiAtCXN0cnVjdCBpOTE1 X2dlbV9hY3RpdmUgYmFzZTsKPiAtCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+IC0Jc3RydWN0IHJi X25vZGUgbm9kZTsKPiAtCXU2NCB0aW1lbGluZTsKPiAtfTsKPiArc3RhdGljIHZvaWQgb2JqX2J1 bXBfbXJ1KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKPiAgIAo+IC1z dGF0aWMgdm9pZAo+IC1fX2k5MTVfdm1hX3JldGlyZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gKwlzcGluX2xvY2soJmk5MTUtPm1tLm9ial9sb2NrKTsK PiArCWlmIChvYmotPmJpbmRfY291bnQpCj4gKwkJbGlzdF9tb3ZlX3RhaWwoJm9iai0+bW0ubGlu aywgJmk5MTUtPm1tLmJvdW5kX2xpc3QpOwo+ICsJc3Bpbl91bmxvY2soJmk5MTUtPm1tLm9ial9s b2NrKTsKPiArCj4gKwlvYmotPm1tLmRpcnR5ID0gdHJ1ZTsgLyogYmUgcGFyYW5vaWQgICovCj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIF9faTkxNV92bWFfcmV0aXJlKHN0cnVjdCBpOTE1X2FjdGl2 ZSAqcmVmKQo+ICAgewo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWEgPSBjb250YWluZXJfb2YocmVm LCB0eXBlb2YoKnZtYSksIGFjdGl2ZSk7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiA9IHZtYS0+b2JqOwo+ICAgCj4gLQlHRU1fQlVHX09OKCFpOTE1X3ZtYV9pc19hY3RpdmUo dm1hKSk7Cj4gLQlpZiAoLS12bWEtPmFjdGl2ZV9jb3VudCkKPiAtCQlyZXR1cm47Cj4gLQo+ICAg CUdFTV9CVUdfT04oIWk5MTVfZ2VtX29iamVjdF9pc19hY3RpdmUob2JqKSk7Cj4gICAJaWYgKC0t b2JqLT5hY3RpdmVfY291bnQpCj4gICAJCXJldHVybjsKPiBAQCAtOTAsMTYgKzkxLDEyIEBAIF9f aTkxNV92bWFfcmV0aXJlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSkKPiAgIAkJcmVzZXJ2YXRpb25fb2JqZWN0X3VubG9jayhvYmotPnJlc3YpOwo+ICAgCX0K PiAgIAo+IC0JLyogQnVtcCBvdXIgcGxhY2Ugb24gdGhlIGJvdW5kIGxpc3QgdG8ga2VlcCBpdCBy b3VnaGx5IGluIExSVSBvcmRlcgo+ICsJLyoKPiArCSAqIEJ1bXAgb3VyIHBsYWNlIG9uIHRoZSBi b3VuZCBsaXN0IHRvIGtlZXAgaXQgcm91Z2hseSBpbiBMUlUgb3JkZXIKPiAgIAkgKiBzbyB0aGF0 IHdlIGRvbid0IHN0ZWFsIGZyb20gcmVjZW50bHkgdXNlZCBidXQgaW5hY3RpdmUgb2JqZWN0cwo+ ICAgCSAqICh1bmxlc3Mgd2UgYXJlIGZvcmNlZCB0byBvZmMhKQo+ICAgCSAqLwo+IC0Jc3Bpbl9s b2NrKCZycS0+aTkxNS0+bW0ub2JqX2xvY2spOwo+IC0JaWYgKG9iai0+YmluZF9jb3VudCkKPiAt CQlsaXN0X21vdmVfdGFpbCgmb2JqLT5tbS5saW5rLCAmcnEtPmk5MTUtPm1tLmJvdW5kX2xpc3Qp Owo+IC0Jc3Bpbl91bmxvY2soJnJxLT5pOTE1LT5tbS5vYmpfbG9jayk7Cj4gLQo+IC0Jb2JqLT5t bS5kaXJ0eSA9IHRydWU7IC8qIGJlIHBhcmFub2lkICAqLwo+ICsJb2JqX2J1bXBfbXJ1KG9iaik7 Cj4gICAKPiAgIAlpZiAoaTkxNV9nZW1fb2JqZWN0X2hhc19hY3RpdmVfcmVmZXJlbmNlKG9iaikp IHsKPiAgIAkJaTkxNV9nZW1fb2JqZWN0X2NsZWFyX2FjdGl2ZV9yZWZlcmVuY2Uob2JqKTsKPiBA QCAtMTA3LDIxICsxMDQsNiBAQCBfX2k5MTVfdm1hX3JldGlyZShzdHJ1Y3QgaTkxNV92bWEgKnZt YSwgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gICAJfQo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2 b2lkCj4gLWk5MTVfdm1hX3JldGlyZShzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICpiYXNlLCBzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAtewo+IC0Jc3RydWN0IGk5MTVfdm1hX2FjdGl2ZSAqYWN0 aXZlID0KPiAtCQljb250YWluZXJfb2YoYmFzZSwgdHlwZW9mKCphY3RpdmUpLCBiYXNlKTsKPiAt Cj4gLQlfX2k5MTVfdm1hX3JldGlyZShhY3RpdmUtPnZtYSwgcnEpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZAo+IC1pOTE1X3ZtYV9sYXN0X3JldGlyZShzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICpi YXNlLCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAtewo+IC0JX19pOTE1X3ZtYV9yZXRpcmUo Y29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCBpOTE1X3ZtYSwgbGFzdF9hY3RpdmUpLCBycSk7Cj4g LX0KPiAtCj4gICBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICoKPiAgIHZtYV9jcmVhdGUoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkgICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSwKPiBAQCAtMTM3LDEwICsxMTksOSBAQCB2bWFfY3JlYXRlKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCj4gICAJaWYgKHZtYSA9PSBOVUxMKQo+ICAgCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKPiAgIAo+IC0Jdm1hLT5hY3RpdmUgPSBSQl9ST09UOwo+IC0KPiAtCWlu aXRfcmVxdWVzdF9hY3RpdmUoJnZtYS0+bGFzdF9hY3RpdmUsIGk5MTVfdm1hX2xhc3RfcmV0aXJl KTsKPiArCWk5MTVfYWN0aXZlX2luaXQodm0tPmk5MTUsICZ2bWEtPmFjdGl2ZSwgX19pOTE1X3Zt YV9yZXRpcmUpOwo+ICAgCWluaXRfcmVxdWVzdF9hY3RpdmUoJnZtYS0+bGFzdF9mZW5jZSwgTlVM TCk7Cj4gKwo+ICAgCXZtYS0+dm0gPSB2bTsKPiAgIAl2bWEtPm9wcyA9ICZ2bS0+dm1hX29wczsK PiAgIAl2bWEtPm9iaiA9IG9iajsKPiBAQCAtODIzLDcgKzgwNCw2IEBAIHZvaWQgaTkxNV92bWFf cmVvcGVuKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgc3RhdGljIHZvaWQgX19pOTE1X3ZtYV9k ZXN0cm95KHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gdm1hLT52bS0+aTkxNTsKPiAtCXN0cnVjdCBpOTE1X3ZtYV9hY3RpdmUg Kml0ZXIsICpuOwo+ICAgCj4gICAJR0VNX0JVR19PTih2bWEtPm5vZGUuYWxsb2NhdGVkKTsKPiAg IAlHRU1fQlVHX09OKHZtYS0+ZmVuY2UpOwo+IEBAIC04NDMsMTAgKzgyMyw3IEBAIHN0YXRpYyB2 b2lkIF9faTkxNV92bWFfZGVzdHJveShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIAkJc3Bpbl91 bmxvY2soJm9iai0+dm1hLmxvY2spOwo+ICAgCX0KPiAgIAo+IC0JcmJ0cmVlX3Bvc3RvcmRlcl9m b3JfZWFjaF9lbnRyeV9zYWZlKGl0ZXIsIG4sICZ2bWEtPmFjdGl2ZSwgbm9kZSkgewo+IC0JCUdF TV9CVUdfT04oaTkxNV9nZW1fYWN0aXZlX2lzc2V0KCZpdGVyLT5iYXNlKSk7Cj4gLQkJa2ZyZWUo aXRlcik7Cj4gLQl9Cj4gKwlpOTE1X2FjdGl2ZV9maW5pKCZ2bWEtPmFjdGl2ZSk7Cj4gICAKPiAg IAlrbWVtX2NhY2hlX2ZyZWUoaTkxNS0+dm1hcywgdm1hKTsKPiAgIH0KPiBAQCAtOTMxLDEwNCAr OTA4LDE1IEBAIHN0YXRpYyB2b2lkIGV4cG9ydF9mZW5jZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwK PiAgIAlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKHJlc3YpOwo+ICAgfQo+ICAgCj4gLXN0YXRp YyBzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICphY3RpdmVfaW5zdGFuY2Uoc3RydWN0IGk5MTVfdm1h ICp2bWEsIHU2NCBpZHgpCj4gLXsKPiAtCXN0cnVjdCBpOTE1X3ZtYV9hY3RpdmUgKmFjdGl2ZTsK PiAtCXN0cnVjdCByYl9ub2RlICoqcCwgKnBhcmVudDsKPiAtCXN0cnVjdCBpOTE1X3JlcXVlc3Qg Km9sZDsKPiAtCj4gLQkvKgo+IC0JICogV2UgdHJhY2sgdGhlIG1vc3QgcmVjZW50bHkgdXNlZCB0 aW1lbGluZSB0byBza2lwIGEgcmJ0cmVlIHNlYXJjaAo+IC0JICogZm9yIHRoZSBjb21tb24gY2Fz ZSwgdW5kZXIgdHlwaWNhbCBsb2FkcyB3ZSBuZXZlciBuZWVkIHRoZSByYnRyZWUKPiAtCSAqIGF0 IGFsbC4gV2UgY2FuIHJldXNlIHRoZSBsYXN0X2FjdGl2ZSBzbG90IGlmIGl0IGlzIGVtcHR5LCB0 aGF0IGlzCj4gLQkgKiBhZnRlciB0aGUgcHJldmlvdXMgYWN0aXZpdHkgaGFzIGJlZW4gcmV0aXJl ZCwgb3IgaWYgdGhlIGFjdGl2ZQo+IC0JICogbWF0Y2hlcyB0aGUgY3VycmVudCB0aW1lbGluZS4K PiAtCSAqCj4gLQkgKiBOb3RlIHRoYXQgd2UgYWxsb3cgdGhlIHRpbWVsaW5lIHRvIGJlIGFjdGl2 ZSBzaW11bHRhbmVvdXNseSBpbgo+IC0JICogdGhlIHJidHJlZSBhbmQgdGhlIGxhc3RfYWN0aXZl IGNhY2hlLiBXZSBkbyB0aGlzIHRvIGF2b2lkIGhhdmluZwo+IC0JICogdG8gc2VhcmNoIGFuZCBy ZXBsYWNlIHRoZSByYnRyZWUgZWxlbWVudCBmb3IgYSBuZXcgdGltZWxpbmUsIHdpdGgKPiAtCSAq IHRoZSBjb3N0IGJlaW5nIHRoYXQgd2UgbXVzdCBiZSBhd2FyZSB0aGF0IHRoZSB2bWEgbWF5IGJl IHJldGlyZWQKPiAtCSAqIHR3aWNlIGZvciB0aGUgc2FtZSB0aW1lbGluZSAoYXMgdGhlIG9sZGVy IHJidHJlZSBlbGVtZW50IHdpbGwgYmUKPiAtCSAqIHJldGlyZWQgYmVmb3JlIHRoZSBuZXcgcmVx dWVzdCBhZGRlZCB0byBsYXN0X2FjdGl2ZSkuCj4gLQkgKi8KPiAtCW9sZCA9IGk5MTVfZ2VtX2Fj dGl2ZV9yYXcoJnZtYS0+bGFzdF9hY3RpdmUsCj4gLQkJCQkgICZ2bWEtPnZtLT5pOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPiAtCWlmICghb2xkIHx8IG9sZC0+ZmVuY2UuY29udGV4dCA9PSBpZHgp Cj4gLQkJZ290byBvdXQ7Cj4gLQo+IC0JLyogTW92ZSB0aGUgY3VycmVudGx5IGFjdGl2ZSBmZW5j ZSBpbnRvIHRoZSByYnRyZWUgKi8KPiAtCWlkeCA9IG9sZC0+ZmVuY2UuY29udGV4dDsKPiAtCj4g LQlwYXJlbnQgPSBOVUxMOwo+IC0JcCA9ICZ2bWEtPmFjdGl2ZS5yYl9ub2RlOwo+IC0Jd2hpbGUg KCpwKSB7Cj4gLQkJcGFyZW50ID0gKnA7Cj4gLQo+IC0JCWFjdGl2ZSA9IHJiX2VudHJ5KHBhcmVu dCwgc3RydWN0IGk5MTVfdm1hX2FjdGl2ZSwgbm9kZSk7Cj4gLQkJaWYgKGFjdGl2ZS0+dGltZWxp bmUgPT0gaWR4KQo+IC0JCQlnb3RvIHJlcGxhY2U7Cj4gLQo+IC0JCWlmIChhY3RpdmUtPnRpbWVs aW5lIDwgaWR4KQo+IC0JCQlwID0gJnBhcmVudC0+cmJfcmlnaHQ7Cj4gLQkJZWxzZQo+IC0JCQlw ID0gJnBhcmVudC0+cmJfbGVmdDsKPiAtCX0KPiAtCj4gLQlhY3RpdmUgPSBrbWFsbG9jKHNpemVv ZigqYWN0aXZlKSwgR0ZQX0tFUk5FTCk7Cj4gLQo+IC0JLyoga21hbGxvYyBtYXkgcmV0aXJlIHRo ZSB2bWEtPmxhc3RfYWN0aXZlIHJlcXVlc3QgKHRoYW5rcyBzaHJpbmtlcikhICovCj4gLQlpZiAo dW5saWtlbHkoIWk5MTVfZ2VtX2FjdGl2ZV9yYXcoJnZtYS0+bGFzdF9hY3RpdmUsCj4gLQkJCQkJ ICAmdm1hLT52bS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCkpKSB7Cj4gLQkJa2ZyZWUoYWN0aXZl KTsKPiAtCQlnb3RvIG91dDsKPiAtCX0KPiAtCj4gLQlpZiAodW5saWtlbHkoIWFjdGl2ZSkpCj4g LQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gLQo+IC0JaW5pdF9yZXF1ZXN0X2FjdGl2ZSgm YWN0aXZlLT5iYXNlLCBpOTE1X3ZtYV9yZXRpcmUpOwo+IC0JYWN0aXZlLT52bWEgPSB2bWE7Cj4g LQlhY3RpdmUtPnRpbWVsaW5lID0gaWR4Owo+IC0KPiAtCXJiX2xpbmtfbm9kZSgmYWN0aXZlLT5u b2RlLCBwYXJlbnQsIHApOwo+IC0JcmJfaW5zZXJ0X2NvbG9yKCZhY3RpdmUtPm5vZGUsICZ2bWEt PmFjdGl2ZSk7Cj4gLQo+IC1yZXBsYWNlOgo+IC0JLyoKPiAtCSAqIE92ZXJ3cml0ZSB0aGUgcHJl dmlvdXMgYWN0aXZlIHNsb3QgaW4gdGhlIHJidHJlZSB3aXRoIGxhc3RfYWN0aXZlLAo+IC0JICog bGVhdmluZyBsYXN0X2FjdGl2ZSB6ZXJvZWQuIElmIHRoZSBwcmV2aW91cyBzbG90IGlzIHN0aWxs IGFjdGl2ZSwKPiAtCSAqIHdlIG11c3QgYmUgY2FyZWZ1bCBhcyB3ZSBub3cgb25seSBleHBlY3Qg dG8gcmVjZWl2ZSBvbmUgcmV0aXJlCj4gLQkgKiBjYWxsYmFjayBub3QgdHdvLCBhbmQgc28gbXVj aCB1bmRvIHRoZSBhY3RpdmUgY291bnRpbmcgZm9yIHRoZQo+IC0JICogb3ZlcndyaXR0ZW4gc2xv dC4KPiAtCSAqLwo+IC0JaWYgKGk5MTVfZ2VtX2FjdGl2ZV9pc3NldCgmYWN0aXZlLT5iYXNlKSkg ewo+IC0JCS8qIFJldGlyZSBvdXJzZWx2ZXMgZnJvbSB0aGUgb2xkIHJxLT5hY3RpdmVfbGlzdCAq Lwo+IC0JCV9fbGlzdF9kZWxfZW50cnkoJmFjdGl2ZS0+YmFzZS5saW5rKTsKPiAtCQl2bWEtPmFj dGl2ZV9jb3VudC0tOwo+IC0JCUdFTV9CVUdfT04oIXZtYS0+YWN0aXZlX2NvdW50KTsKPiAtCX0K PiAtCUdFTV9CVUdfT04obGlzdF9lbXB0eSgmdm1hLT5sYXN0X2FjdGl2ZS5saW5rKSk7Cj4gLQls aXN0X3JlcGxhY2VfaW5pdCgmdm1hLT5sYXN0X2FjdGl2ZS5saW5rLCAmYWN0aXZlLT5iYXNlLmxp bmspOwo+IC0JYWN0aXZlLT5iYXNlLnJlcXVlc3QgPSBmZXRjaF9hbmRfemVybygmdm1hLT5sYXN0 X2FjdGl2ZS5yZXF1ZXN0KTsKPiAtCj4gLW91dDoKPiAtCXJldHVybiAmdm1hLT5sYXN0X2FjdGl2 ZTsKPiAtfQo+IC0KPiAgIGludCBpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgaTkxNV92 bWEgKnZtYSwKPiAgIAkJCSAgICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgIAkJCSAgICB1 bnNpZ25lZCBpbnQgZmxhZ3MpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiA9IHZtYS0+b2JqOwo+IC0Jc3RydWN0IGk5MTVfZ2VtX2FjdGl2ZSAqYWN0aXZlOwo+ICAg Cj4gICAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcnEtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ ICAgCUdFTV9CVUdfT04oIWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSk7Cj4gICAK PiAtCWFjdGl2ZSA9IGFjdGl2ZV9pbnN0YW5jZSh2bWEsIHJxLT5mZW5jZS5jb250ZXh0KTsKPiAt CWlmIChJU19FUlIoYWN0aXZlKSkKPiAtCQlyZXR1cm4gUFRSX0VSUihhY3RpdmUpOwo+IC0KPiAg IAkvKgo+ICAgCSAqIEFkZCBhIHJlZmVyZW5jZSBpZiB3ZSdyZSBuZXdseSBlbnRlcmluZyB0aGUg YWN0aXZlIGxpc3QuCj4gICAJICogVGhlIG9yZGVyIGluIHdoaWNoIHdlIGFkZCBvcGVyYXRpb25z IHRvIHRoZSByZXRpcmVtZW50IHF1ZXVlIGlzCj4gQEAgLTEwMzcsOSArOTI1LDE1IEBAIGludCBp OTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgIAkgKiBhZGQg dGhlIGFjdGl2ZSByZWZlcmVuY2UgZmlyc3QgYW5kIHF1ZXVlIGZvciBpdCB0byBiZSBkcm9wcGVk Cj4gICAJICogKmxhc3QqLgo+ICAgCSAqLwo+IC0JaWYgKCFpOTE1X2dlbV9hY3RpdmVfaXNzZXQo YWN0aXZlKSAmJiAhdm1hLT5hY3RpdmVfY291bnQrKykKPiArCWlmICghdm1hLT5hY3RpdmUuY291 bnQpCj4gICAJCW9iai0+YWN0aXZlX2NvdW50Kys7Cj4gLQlpOTE1X2dlbV9hY3RpdmVfc2V0KGFj dGl2ZSwgcnEpOwo+ICsKPiArCWlmICh1bmxpa2VseShpOTE1X2FjdGl2ZV9yZWYoJnZtYS0+YWN0 aXZlLCBycS0+ZmVuY2UuY29udGV4dCwgcnEpKSkgewo+ICsJCWlmICghdm1hLT5hY3RpdmUuY291 bnQpCj4gKwkJCW9iai0+YWN0aXZlX2NvdW50LS07Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9 Cj4gKwo+ICAgCUdFTV9CVUdfT04oIWk5MTVfdm1hX2lzX2FjdGl2ZSh2bWEpKTsKPiAgIAlHRU1f QlVHX09OKCFvYmotPmFjdGl2ZV9jb3VudCk7Cj4gICAKPiBAQCAtMTA3Myw4ICs5NjcsNiBAQCBp bnQgaTkxNV92bWFfdW5iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgCSAqLwo+ICAgCW1p Z2h0X3NsZWVwKCk7Cj4gICAJaWYgKGk5MTVfdm1hX2lzX2FjdGl2ZSh2bWEpKSB7Cj4gLQkJc3Ry dWN0IGk5MTVfdm1hX2FjdGl2ZSAqYWN0aXZlLCAqbjsKPiAtCj4gICAJCS8qCj4gICAJCSAqIFdo ZW4gYSBjbG9zZWQgVk1BIGlzIHJldGlyZWQsIGl0IGlzIHVuYm91bmQgLSBlZWsuCj4gICAJCSAq IEluIG9yZGVyIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyByZWN1cnNpdmVseSBjbG9zZWQsCj4g QEAgLTEwOTAsMTkgKzk4MiwxMCBAQCBpbnQgaTkxNV92bWFfdW5iaW5kKHN0cnVjdCBpOTE1X3Zt YSAqdm1hKQo+ICAgCQkgKi8KPiAgIAkJX19pOTE1X3ZtYV9waW4odm1hKTsKPiAgIAo+IC0JCXJl dCA9IGk5MTVfZ2VtX2FjdGl2ZV9yZXRpcmUoJnZtYS0+bGFzdF9hY3RpdmUsCj4gLQkJCQkJICAg ICAmdm1hLT52bS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwkJcmV0ID0gaTkxNV9hY3Rp dmVfd2FpdCgmdm1hLT5hY3RpdmUpOwo+ICAgCQlpZiAocmV0KQo+ICAgCQkJZ290byB1bnBpbjsK PiAgIAo+IC0JCXJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShhY3RpdmUsIG4s Cj4gLQkJCQkJCSAgICAgJnZtYS0+YWN0aXZlLCBub2RlKSB7Cj4gLQkJCXJldCA9IGk5MTVfZ2Vt X2FjdGl2ZV9yZXRpcmUoJmFjdGl2ZS0+YmFzZSwKPiAtCQkJCQkJICAgICAmdm1hLT52bS0+aTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQkJCWlmIChyZXQpCj4gLQkJCQlnb3RvIHVucGluOwo+ IC0JCX0KPiAtCj4gICAJCXJldCA9IGk5MTVfZ2VtX2FjdGl2ZV9yZXRpcmUoJnZtYS0+bGFzdF9m ZW5jZSwKPiAgIAkJCQkJICAgICAmdm1hLT52bS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g ICB1bnBpbjoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmgKPiBpbmRleCA1NzkzYWJlNTA5YTIuLjNj MDNkNDU2OTQ4MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuaAo+IEBAIC0zNCw2ICszNCw3 IEBACj4gICAjaW5jbHVkZSAiaTkxNV9nZW1fZmVuY2VfcmVnLmgiCj4gICAjaW5jbHVkZSAiaTkx NV9nZW1fb2JqZWN0LmgiCj4gICAKPiArI2luY2x1ZGUgImk5MTVfYWN0aXZlLmgiCj4gICAjaW5j bHVkZSAiaTkxNV9yZXF1ZXN0LmgiCj4gICAKPiAgIGVudW0gaTkxNV9jYWNoZV9sZXZlbDsKPiBA QCAtMTA4LDkgKzEwOSw3IEBAIHN0cnVjdCBpOTE1X3ZtYSB7Cj4gICAjZGVmaW5lIEk5MTVfVk1B X1VTRVJGQVVMVAlCSVQoSTkxNV9WTUFfVVNFUkZBVUxUX0JJVCkKPiAgICNkZWZpbmUgSTkxNV9W TUFfR0dUVF9XUklURQlCSVQoMTUpCj4gICAKPiAtCXVuc2lnbmVkIGludCBhY3RpdmVfY291bnQ7 Cj4gLQlzdHJ1Y3QgcmJfcm9vdCBhY3RpdmU7Cj4gLQlzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlIGxh c3RfYWN0aXZlOwo+ICsJc3RydWN0IGk5MTVfYWN0aXZlIGFjdGl2ZTsKPiAgIAlzdHJ1Y3QgaTkx NV9nZW1fYWN0aXZlIGxhc3RfZmVuY2U7Cj4gICAKPiAgIAkvKioKPiBAQCAtMTU0LDkgKzE1Myw5 IEBAIGk5MTVfdm1hX2luc3RhbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4g ICB2b2lkIGk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNlKHN0cnVjdCBpOTE1X3ZtYSAqKnBfdm1h LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwo+ICAgI2RlZmluZSBJOTE1X1ZNQV9SRUxFQVNFX01BUCBC SVQoMCkKPiAgIAo+IC1zdGF0aWMgaW5saW5lIGJvb2wgaTkxNV92bWFfaXNfYWN0aXZlKHN0cnVj dCBpOTE1X3ZtYSAqdm1hKQo+ICtzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV92bWFfaXNfYWN0aXZl KGNvbnN0IHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgewo+IC0JcmV0dXJuIHZtYS0+YWN0aXZl X2NvdW50Owo+ICsJcmV0dXJuICFpOTE1X2FjdGl2ZV9pc19pZGxlKCZ2bWEtPmFjdGl2ZSk7Cj4g ICB9Cj4gICAKPiAgIGludCBfX211c3RfY2hlY2sgaTkxNV92bWFfbW92ZV90b19hY3RpdmUoc3Ry dWN0IGk5MTVfdm1hICp2bWEsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9pOTE1X2FjdGl2ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5 MTVfYWN0aXZlLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4u YzA1Y2EzNjY3MjlhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2FjdGl2ZS5jCj4gQEAgLTAsMCArMSwxNTggQEAKPiArLyoKPiArICog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAx OCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICIuLi9pOTE1X3NlbGZ0 ZXN0LmgiCj4gKwo+ICsjaW5jbHVkZSAiaWd0X2ZsdXNoX3Rlc3QuaCIKPiArI2luY2x1ZGUgImxp Yl9zd19mZW5jZS5oIgo+ICsKPiArc3RydWN0IGxpdmVfYWN0aXZlIHsKPiArCXN0cnVjdCBpOTE1 X2FjdGl2ZSBiYXNlOwo+ICsJYm9vbCByZXRpcmVkOwo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQg X19saXZlX2FjdGl2ZV9yZXRpcmUoc3RydWN0IGk5MTVfYWN0aXZlICpiYXNlKQo+ICt7Cj4gKwlz dHJ1Y3QgbGl2ZV9hY3RpdmUgKmFjdGl2ZSA9IGNvbnRhaW5lcl9vZihiYXNlLCB0eXBlb2YoKmFj dGl2ZSksIGJhc2UpOwo+ICsKPiArCWFjdGl2ZS0+cmV0aXJlZCA9IHRydWU7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgX19saXZlX2FjdGl2ZV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSwKPiArCQkJICAgICAgIHN0cnVjdCBsaXZlX2FjdGl2ZSAqYWN0aXZlKQo+ICt7Cj4gKwlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwlzdHJ1Y3QgaTkxNV9zd19mZW5jZSAq c3VibWl0Owo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gKwl1bnNpZ25lZCBpbnQgY291 bnQgPSAwOwo+ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJaTkxNV9hY3RpdmVfaW5pdChpOTE1LCAm YWN0aXZlLT5iYXNlLCBfX2xpdmVfYWN0aXZlX3JldGlyZSk7Cj4gKwlhY3RpdmUtPnJldGlyZWQg PSBmYWxzZTsKPiArCj4gKwlpZiAoIWk5MTVfYWN0aXZlX2FjcXVpcmUoJmFjdGl2ZS0+YmFzZSkp IHsKPiArCQlwcl9lcnIoIkZpcnN0IGk5MTVfYWN0aXZlX2FjcXVpcmUgc2hvdWxkIHJlcG9ydCBi ZWluZyBpZGxlXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlzdWJtaXQg PSBoZWFwX2ZlbmNlX2NyZWF0ZShHRlBfS0VSTkVMKTsKPiArCj4gKwlmb3JfZWFjaF9lbmdpbmUo ZW5naW5lLCBpOTE1LCBpZCkgewo+ICsJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ICsKPiAr CQlycSA9IGk5MTVfcmVxdWVzdF9hbGxvYyhlbmdpbmUsIGk5MTUtPmtlcm5lbF9jb250ZXh0KTsK PiArCQlpZiAoSVNfRVJSKHJxKSkgewo+ICsJCQllcnIgPSBQVFJfRVJSKHJxKTsKCkFkZCBhIG1l c3NhZ2UgaGVyZSBzbyBlcnJvciBjYXVzZSBpcyBjbGVhciBpbiB0aGUgbG9ncy4KCj4gKwkJCWJy ZWFrOwo+ICsJCX0KPiArCj4gKwkJZXJyID0gaTkxNV9zd19mZW5jZV9hd2FpdF9zd19mZW5jZV9n ZnAoJnJxLT5zdWJtaXQsCj4gKwkJCQkJCSAgICAgICBzdWJtaXQsCj4gKwkJCQkJCSAgICAgICBH RlBfS0VSTkVMKTsKPiArCQlpZiAoZXJyIDwgMCkgewo+ICsJCQlwcl9lcnIoIkZhaWxlZCB0byBh bGxvY2F0ZSBzdWJtaXNzaW9uIGZlbmNlIVxuIik7Cj4gKwkJCWk5MTVfcmVxdWVzdF9hZGQocnEp Owo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWVyciA9IGk5MTVfYWN0aXZlX3JlZigmYWN0 aXZlLT5iYXNlLCBycS0+ZmVuY2UuY29udGV4dCwgcnEpOwo+ICsJCWlmIChlcnIpIHsKPiArCQkJ cHJfZXJyKCJGYWlsZWQgdG8gdHJhY2sgYWN0aXZlIHJlZiFcbiIpOwo+ICsJCQlpOTE1X3JlcXVl c3RfYWRkKHJxKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQlpOTE1X3JlcXVlc3RfYWRk KHJxKTsKCnJlcXVlc3RfYWRkIGNvdWxkIGJlIGNvbnNvbGlkYXRlZCBpbnRvIGEgc2luZ2xlIGNh bGwgYWZ0ZXIgZXJyID0gCmk5MTVfc3dfZmVuY2UuLiwgaWYgeW91IHdhbnQuCgo+ICsJCWNvdW50 Kys7Cj4gKwl9Cj4gKwo+ICsJaTkxNV9hY3RpdmVfcmVsZWFzZSgmYWN0aXZlLT5iYXNlKTsKPiAr CWlmIChhY3RpdmUtPnJldGlyZWQpIHsKPiArCQlwcl9lcnIoImk5MTVfYWN0aXZlIHJldGlyZWQg YmVmb3JlIHN1Ym1pc3Npb24hXG4iKTsKPiArCQllcnIgPSAtRUlOVkFMOwo+ICsJfQo+ICsJaWYg KGFjdGl2ZS0+YmFzZS5jb3VudCAhPSBjb3VudCkgewo+ICsJCXByX2VycigiaTkxNV9hY3RpdmUg bm90IHRyYWNraW5nIGFsbCByZXF1ZXN0cywgZm91bmQgJWQsIGV4cGVjdGVkICVkXG4iLAo+ICsJ CSAgICAgICBhY3RpdmUtPmJhc2UuY291bnQsIGNvdW50KTsKPiArCQllcnIgPSAtRUlOVkFMOwo+ ICsJfQo+ICsKPiArCWk5MTVfc3dfZmVuY2VfY29tbWl0KHN1Ym1pdCk7Cj4gKwloZWFwX2ZlbmNl X3B1dChzdWJtaXQpOwo+ICsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bGl2ZV9hY3RpdmVfd2FpdCh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1ID0gYXJnOwo+ICsJc3RydWN0IGxpdmVfYWN0aXZlIGFjdGl2ZTsKPiArCWludGVs X3dha2VyZWZfdCB3YWtlcmVmOwo+ICsJaW50IGVycjsKPiArCj4gKwkvKiBDaGVjayB0aGF0IHdl IGdldCBhIGNhbGxiYWNrIHdoZW4gcmVxdWVzdHMgcmV0aXJlIHVwb24gd2FpdGluZyAqLwo+ICsK PiArCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJd2FrZXJlZiA9IGlu dGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOwo+ICsKPiArCWVyciA9IF9fbGl2ZV9hY3RpdmVfc2V0 dXAoaTkxNSwgJmFjdGl2ZSk7Cj4gKwo+ICsJaTkxNV9hY3RpdmVfd2FpdCgmYWN0aXZlLmJhc2Up Owo+ICsJaWYgKCFhY3RpdmUucmV0aXJlZCkgewo+ICsJCXByX2VycigiaTkxNV9hY3RpdmUgbm90 IHJldGlyZWQgYWZ0ZXIgd2FpdGluZyFcbiIpOwo+ICsJCWVyciA9IC1FSU5WQUw7Cj4gKwl9Cj4g Kwo+ICsJaTkxNV9hY3RpdmVfZmluaSgmYWN0aXZlLmJhc2UpOwo+ICsJaWYgKGlndF9mbHVzaF90 ZXN0KGk5MTUsIEk5MTVfV0FJVF9MT0NLRUQpKQo+ICsJCWVyciA9IC1FSU87Cj4gKwo+ICsJaW50 ZWxfcnVudGltZV9wbV9wdXQoaTkxNSwgd2FrZXJlZik7Cj4gKwltdXRleF91bmxvY2soJmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBsaXZlX2FjdGl2ZV9yZXRpcmUodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSA9IGFyZzsKPiArCXN0cnVjdCBsaXZlX2FjdGl2ZSBhY3RpdmU7Cj4gKwlp bnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiArCWludCBlcnI7Cj4gKwo+ICsJLyogQ2hlY2sgdGhh dCB3ZSBnZXQgYSBjYWxsYmFjayB3aGVuIHJlcXVlc3RzIGFyZSBpbmRpcmVjdGx5IHJldGlyZWQg Ki8KPiArCj4gKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCXdha2Vy ZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1KTsKPiArCj4gKwllcnIgPSBfX2xpdmVfYWN0 aXZlX3NldHVwKGk5MTUsICZhY3RpdmUpOwo+ICsKPiArCS8qIHdhaXRzIGZvciAmIHJldGlyZXMg YWxsIHJlcXVlc3RzICovCj4gKwlpZiAoaWd0X2ZsdXNoX3Rlc3QoaTkxNSwgSTkxNV9XQUlUX0xP Q0tFRCkpCj4gKwkJZXJyID0gLUVJTzsKPiArCj4gKwlpZiAoIWFjdGl2ZS5yZXRpcmVkKSB7Cj4g KwkJcHJfZXJyKCJpOTE1X2FjdGl2ZSBub3QgcmV0aXJlZCBhZnRlciBmbHVzaGluZyFcbiIpOwo+ ICsJCWVyciA9IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaTkxNV9hY3RpdmVfZmluaSgmYWN0aXZl LmJhc2UpOwo+ICsJaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSwgd2FrZXJlZik7Cj4gKwltdXRl eF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ ICsKPiAraW50IGk5MTVfYWN0aXZlX2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KQo+ICt7Cj4gKwlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0 c1tdID0gewo+ICsJCVNVQlRFU1QobGl2ZV9hY3RpdmVfd2FpdCksCj4gKwkJU1VCVEVTVChsaXZl X2FjdGl2ZV9yZXRpcmUpLAo+ICsJfTsKPiArCj4gKwlpZiAoaTkxNV90ZXJtaW5hbGx5X3dlZGdl ZCgmaTkxNS0+Z3B1X2Vycm9yKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXR1cm4gaTkxNV9z dWJ0ZXN0cyh0ZXN0cywgaTkxNSk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgKPiBpbmRleCA3NmI0Zjg3ZmM4NTMu LjZkNzY2OTI1YWQwNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaAo+IEBAIC0xMiw4ICsxMiw5IEBACj4gICBzZWxm dGVzdChzYW5pdHljaGVjaywgaTkxNV9saXZlX3Nhbml0eWNoZWNrKSAvKiBrZWVwIGZpcnN0IChp Z3Qgc2VsZmNoZWNrKSAqLwo+ICAgc2VsZnRlc3QodW5jb3JlLCBpbnRlbF91bmNvcmVfbGl2ZV9z ZWxmdGVzdHMpCj4gICBzZWxmdGVzdCh3b3JrYXJvdW5kcywgaW50ZWxfd29ya2Fyb3VuZHNfbGl2 ZV9zZWxmdGVzdHMpCj4gLXNlbGZ0ZXN0KHJlcXVlc3RzLCBpOTE1X3JlcXVlc3RfbGl2ZV9zZWxm dGVzdHMpCj4gICBzZWxmdGVzdCh0aW1lbGluZXMsIGk5MTVfdGltZWxpbmVfbGl2ZV9zZWxmdGVz dHMpCj4gK3NlbGZ0ZXN0KHJlcXVlc3RzLCBpOTE1X3JlcXVlc3RfbGl2ZV9zZWxmdGVzdHMpCj4g K3NlbGZ0ZXN0KGFjdGl2ZSwgaTkxNV9hY3RpdmVfbGl2ZV9zZWxmdGVzdHMpCj4gICBzZWxmdGVz dChvYmplY3RzLCBpOTE1X2dlbV9vYmplY3RfbGl2ZV9zZWxmdGVzdHMpCj4gICBzZWxmdGVzdChk bWFidWYsIGk5MTVfZ2VtX2RtYWJ1Zl9saXZlX3NlbGZ0ZXN0cykKPiAgIHNlbGZ0ZXN0KGNvaGVy ZW5jeSwgaTkxNV9nZW1fY29oZXJlbmN5X2xpdmVfc2VsZnRlc3RzKQo+IAoKV2l0aCB0aGUgY2hh bmdlIGxvZyBhbmQgZXJyb3IgbWVzc2FnZToKClJldmlld2VkLWJ5OiBUdnJ0a28gVXJzdWxpbiA8 dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgoKUmVnYXJkcywKClR2cnRrbwpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK