From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH 2/3] drm/i915: Android sync points for i915 v3 Date: Wed, 03 Dec 2014 22:29:34 +0100 Message-ID: <547F80BE.605@canonical.com> References: <1417636147-29664-1-git-send-email-jbarnes@virtuousgeek.org> <1417636147-29664-3-git-send-email-jbarnes@virtuousgeek.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTP id 306A66E650 for ; Wed, 3 Dec 2014 13:39:03 -0800 (PST) In-Reply-To: <1417636147-29664-3-git-send-email-jbarnes@virtuousgeek.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jesse Barnes , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CgpPbiAwMy0xMi0xNCAyMDo0OSwgSmVzc2UgQmFybmVzIHdyb3RlOgo+IEV4cG9zZSBhbiBpb2N0 bCB0byBjcmVhdGUgQW5kcm9pZCBmZW5jZXMgYmFzZWQgb24gdGhlIEFuZHJvaWQgc3luYyBwb2lu dAo+IGluZnJhc3RydWN0dXJlICh3aGljaCBpbiB0dXJuIGlzIGJhc2VkIG9uIERNQS1idWYgZmVu Y2VzKS4gIEp1c3QgYQo+IHNrZXRjaCBhdCB0aGlzIHBvaW50LCBubyB0ZXN0aW5nIGhhcyBiZWVu IGRvbmUuCj4gCj4gVGhlcmUgYXJlIGEgY291cGxlIG9mIGdvYWxzIGhlcmU6Cj4gICAxKSBhbGxv dyBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcyB0byBjcmVhdGUgZmVuY2VzIHdpdGhvdXQgYW4K PiAgICAgIGFzc29jaWF0ZWQgYnVmZmVyCj4gICAyKSByZS11c2UgYSBjb21tb24gQVBJIHNvIHVz ZXJzcGFjZSBkb2Vzbid0IGhhdmUgdG8gaW1wZWRhbmNlIG1pc21hdGNoCj4gICAgICBiZXR3ZWVu IGRpZmZlcmVudCBkcml2ZXIgaW1wbGVtZW50YXRpb25zIHRvbyBtdWNoCj4gICAzKSBhbGxvdyBh cHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcyB0byB1c2UgZXhwbGljaXQgc3luY2hyb25pemF0aW9u IGlmCj4gICAgICB0aGV5IGNob29zZSBieSBleHBvc2luZyBmZW5jZXMgZGlyZWN0bHkKPiAKPiB2 MjogdXNlIHN0cnVjdCBmZW5jZSBkaXJlY3RseSB1c2luZyBNYWFydGVuJ3MgbmV3IGludGVyZmFj ZQo+IHYzOiB1c2UgbmV3IGk5MTUgcmVxdWVzdCBzdHJ1Y3R1cmUgKEplc3NlKQo+ICAgICBtYWtl IGk5MTUgZmVuY2VzIGEgY29tcGlsZSB0aW1lIG9wdGlvbiBzaW5jZSBBbmRyb2lkIHN1cHBvcnQg aXMgc3RpbGwKPiAgICAgaW4gc3RhZ2luZyAoSmVzc2UpCj4gICAgIGNoZWNrIGZvciByZXF1ZXN0 IGNvbXBsZXRlIGFmdGVyIGFybWluZyBJUlFzIChDaHJpcykKPiAgICAgYWRkIHRpbWVsaW5lIGlk IHRvIGlvY3RsIChUdnJ0a28pCj4gCj4gU2lnbmVkLW9mZi1ieTogSmVzc2UgQmFybmVzIDxqYmFy bmVzQHZpcnR1b3VzZ2Vlay5vcmc+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25m aWcgICAgIHwgIDE0ICsrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgIHwgICAx ICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyAgfCAgIDUgKwo+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICB8ICAyMCArKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYyAgfCAgIDUgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5j ICB8ICAgNCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5bmMuYyB8IDMyNSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS91YXBpL2RybS9p OTE1X2RybS5oICAgICAgfCAgMjMgKysrCj4gIDggZmlsZXMgY2hhbmdlZCwgMzk2IGluc2VydGlv bnMoKyksIDEgZGVsZXRpb24oLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfc3luYy5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnCj4gaW5kZXggNGUzOWFiMy4u NmIyM2QxNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZwo+IEBAIC00Myw2ICs0MywyMCBAQCBjb25m aWcgRFJNX0k5MTVfS01TCj4gIAo+ICAJICBJZiBpbiBkb3VidCwgc2F5ICJZIi4KPiAgCj4gK2Nv bmZpZyBEUk1fSTkxNV9TWU5DCj4gKwlib29sICJFbmFibGUgZXhwbGljaXQgc3luYyBzdXBwb3J0 Igo+ICsJZGVwZW5kcyBvbiBEUk1fSTkxNQo+ICsJZGVmYXVsdCB5CmRlZmF1bHQgbgo+ICsJc2Vs ZWN0IFNUQUdJTkcKc2hvdWxkbid0IHRoYXQgYmUgZGVwZW5kcyBvbiBTVEFHSU5HIHJhdGhlcj8g OlAKCj4gKwlzZWxlY3QgQU5EUk9JRAo+ICsJc2VsZWN0IFNZTkMKPiArCWhlbHAKPiArCSAgQ2hv b3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBBbmRyb2lkIG5hdGl2ZSBzeW5jIHN1cHBvcnQgYW5k IHRoZQo+ICsJICBjb3JyZXNwb25kaW5nIGk5MTUgZHJpdmVyIGNvZGUgdG8gZXhwb3NlIGl0LiAg U2xpZ2h0bHkgaW5jcmVhc2VzCj4gKwkgIGRyaXZlciBzaXplIGFuZCBwdWxscyBpbiBzeW5jIHN1 cHBvcnQgZnJvbSBzdGFnaW5nLgo+ICsKPiArCSAgSWYgaW4gZG91YnQsIHNheSAiWSIuCiJOIgo+ ICsKPiAgY29uZmlnIERSTV9JOTE1X0ZCREVWCj4gIAlib29sICJFbmFibGUgbGVnYWN5IGZiZGV2 IHN1cHBvcnQgZm9yIHRoZSBtb2Rlc2V0dGluZyBpbnRlbCBkcml2ZXIiCj4gIAlkZXBlbmRzIG9u IERSTV9JOTE1Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCBlNDA4M2U0Li40NWUxNTVmIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtNTYsNiArNTYsNyBAQCBpOTE1LXkgKz0gaW50 ZWxfYXVkaW8ubyBcCj4gIAkgIGludGVsX3Nwcml0ZS5vCj4gIGk5MTUtJChDT05GSUdfQUNQSSkJ CSs9IGludGVsX2FjcGkubyBpbnRlbF9vcHJlZ2lvbi5vCj4gIGk5MTUtJChDT05GSUdfRFJNX0k5 MTVfRkJERVYpCSs9IGludGVsX2ZiZGV2Lm8KPiAraTkxNS0kKENPTkZJR19EUk1fSTkxNV9TWU5D KQkrPSBpOTE1X3N5bmMubwo+ICAKPiAgIyBtb2Rlc2V0dGluZyBvdXRwdXQvZW5jb2RlciBjb2Rl Cj4gIGk5MTUteSArPSBkdm9fY2g3MDE3Lm8gXAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+IGlu ZGV4IDg4N2Q4OGYuLjYyMWJkN2YgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kbWEuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKPiBAQCAt MTA2Miw2ICsxMDYyLDExIEBAIGNvbnN0IHN0cnVjdCBkcm1faW9jdGxfZGVzYyBpOTE1X2lvY3Rs c1tdID0gewo+ICAJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9SRUdfUkVBRCwgaTkxNV9yZWdfcmVh ZF9pb2N0bCwgRFJNX1VOTE9DS0VEfERSTV9SRU5ERVJfQUxMT1cpLAo+ICAJRFJNX0lPQ1RMX0RF Rl9EUlYoSTkxNV9HRVRfUkVTRVRfU1RBVFMsIGk5MTVfZ2V0X3Jlc2V0X3N0YXRzX2lvY3RsLCBE Uk1fVU5MT0NLRUR8RFJNX1JFTkRFUl9BTExPVyksCj4gIAlEUk1fSU9DVExfREVGX0RSVihJOTE1 X0dFTV9VU0VSUFRSLCBpOTE1X2dlbV91c2VycHRyX2lvY3RsLCBEUk1fVU5MT0NLRUR8RFJNX1JF TkRFUl9BTExPVyksCj4gKyNpZmRlZiBDT05GSUdfRFJNX0k5MTVfU1lOQwo+ICsJRFJNX0lPQ1RM X0RFRl9EUlYoSTkxNV9HRU1fRkVOQ0UsIGk5MTVfc3luY19jcmVhdGVfZmVuY2VfaW9jdGwsIERS TV9VTkxPQ0tFRHxEUk1fUkVOREVSX0FMTE9XKSwKPiArI2Vsc2UKPiArCURSTV9JT0NUTF9ERUZf RFJWKEk5MTVfR0VNX0ZFTkNFLCBkcm1fbm9vcCwgRFJNX1VOTE9DS0VEfERSTV9SRU5ERVJfQUxM T1cpLAo+ICsjZW5kaWYKPiAgfTsKPiAgCj4gIGludCBpOTE1X21heF9pb2N0bCA9IEFSUkFZX1NJ WkUoaTkxNV9pb2N0bHMpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IDA0OTQ4MmYu LjM2N2Q5NWEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtMTUyNSw2ICsxNTI1 LDkgQEAgc3RydWN0IGk5MTVfd29ya2Fyb3VuZHMgewo+ICAJdTMyIGNvdW50Owo+ICB9Owo+ICAK PiArc3RydWN0IGk5MTVfc3luY190aW1lbGluZTsKPiArCj4gKwpEZWFkIGRlZmluaXRpb24/Cj4g IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4g IAlzdHJ1Y3Qga21lbV9jYWNoZSAqc2xhYjsKPiBAQCAtMTU2MCw2ICsxNTYzLDkgQEAgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgewo+ICAJdWludDMyX3QgbGFzdF9zZXFubywgbmV4dF9zZXFubzsK PiAgCj4gIAlzdHJ1Y3QgZHJtX2RtYV9oYW5kbGUgKnN0YXR1c19wYWdlX2RtYWg7Cj4gKwo+ICsJ c3RydWN0IGk5MTVfc3luY190aW1lbGluZSAqc3luY190bFtJOTE1X05VTV9SSU5HU107CkRlYWQg bWVtYmVyPwoKPiAgCXN0cnVjdCByZXNvdXJjZSBtY2hfcmVzOwo+ICAKPiAgCS8qIHByb3RlY3Rz IHRoZSBpcnEgbWFza3MgKi8KPiBAQCAtMjUwOSw2ICsyNTE1LDIwIEBAIHZvaWQgaTkxNV9pbml0 X3ZtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgdm9pZCBpOTE1X2dlbV9m cmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gIHZvaWQgaTkxNV9nZW1f dm1hX2Rlc3Ryb3koc3RydWN0IGk5MTVfdm1hICp2bWEpOwo+ICAKPiArLyogaTkxNV9zeW5jLmMg Ki8KPiArI2lmZGVmIENPTkZJR19EUk1fSTkxNV9TWU5DCj4gK2ludCBpOTE1X3N5bmNfaW5pdChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICt2b2lkIGk5MTVfc3luY19maW5p KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gK2ludCBpOTE1X3N5bmNfY3Jl YXRlX2ZlbmNlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJ CQkgc3RydWN0IGRybV9maWxlICpmaWxlKTsKPiArI2Vsc2UKPiArc3RhdGljIGlubGluZSBpbnQg aTkxNV9zeW5jX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4g KwlyZXR1cm4gMDsKPiArfQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9zeW5jX2Zpbmkoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KSB7IH0KPiArI2VuZGlmCj4gKwo+ICAjZGVm aW5lIFBJTl9NQVBQQUJMRSAweDEKPiAgI2RlZmluZSBQSU5fTk9OQkxPQ0sgMHgyCj4gICNkZWZp bmUgUElOX0dMT0JBTCAweDQKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBpbmRleCA3YTgzYTlm Li4zOTQwN2I0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTQ4ODcsNiArNDg4 Nyw5IEBAIGludCBpOTE1X2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAkJYXRv bWljX3NldF9tYXNrKEk5MTVfV0VER0VELCAmZGV2X3ByaXYtPmdwdV9lcnJvci5yZXNldF9jb3Vu dGVyKTsKPiAgCQlyZXQgPSAwOwo+ICAJfQo+ICsKPiArCWk5MTVfc3luY19pbml0KGRldl9wcml2 KTsKPiArCj4gIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgCj4gIAlyZXR1 cm4gcmV0Owo+IEBAIC01MDExLDYgKzUwMTQsOCBAQCB2b2lkIGk5MTVfZ2VtX3JlbGVhc2Uoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ICAJCXJlcXVlc3Qt PmZpbGVfcHJpdiA9IE5VTEw7Cj4gIAl9Cj4gIAlzcGluX3VubG9jaygmZmlsZV9wcml2LT5tbS5s b2NrKTsKPiArCj4gKwlpOTE1X3N5bmNfZmluaShkZXYtPmRldl9wcml2YXRlKTsKPiAgfQo+ICAK PiAgc3RhdGljIHZvaWQKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9p cnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiBpbmRleCA3OTEzYTcyLi5k NGVkZTgzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gQEAgLTMzLDYgKzMzLDcgQEAK PiAgI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ ICAjaW5jbHVkZSA8ZHJtL2k5MTVfZHJtLmg+Cj4gKyNpbmNsdWRlICIuLi8uLi8uLi9zdGFnaW5n L2FuZHJvaWQvc3luYy5oIgo+ICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAgI2luY2x1ZGUgImk5 MTVfdHJhY2UuaCIKPiAgI2luY2x1ZGUgImludGVsX2Rydi5oIgo+IEBAIC0yMzc4LDggKzIzNzks OSBAQCBzdGF0aWMgdm9pZCBpOTE1X2Vycm9yX3dha2VfdXAoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+ICAJICovCj4gIAo+ICAJLyogV2FrZSB1cCBfX3dhaXRfc2Vxbm8sIHBv dGVudGlhbGx5IGhvbGRpbmcgZGV2LT5zdHJ1Y3RfbXV0ZXguICovCj4gLQlmb3JfZWFjaF9yaW5n KHJpbmcsIGRldl9wcml2LCBpKQo+ICsJZm9yX2VhY2hfcmluZyhyaW5nLCBkZXZfcHJpdiwgaSkg ewo+ICAJCXdha2VfdXBfYWxsKCZyaW5nLT5pcnFfcXVldWUpOwo+ICsJfQo+ICAKPiAgCS8qIFdh a2UgdXAgaW50ZWxfY3J0Y193YWl0X2Zvcl9wZW5kaW5nX2ZsaXBzLCBob2xkaW5nIGNydGMtPm11 dGV4LiAqLwo+ICAJd2FrZV91cF9hbGwoJmRldl9wcml2LT5wZW5kaW5nX2ZsaXBfcXVldWUpOwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5bmMuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfc3luYy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwLi40NzQxYjBjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfc3luYy5jCj4gQEAgLTAsMCArMSwzMjUgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiAr ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4K PiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJ U0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiAr ICoKPiArICogQXV0aG9yczoKPiArICogICAgSmVzc2UgQmFybmVzIDxqYmFybmVzQHZpcnR1b3Vz Z2Vlay5vcmc+Cj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNp bmNsdWRlIDxkcm0vZHJtX3ZtYV9tYW5hZ2VyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vaTkxNV9kcm0u aD4KPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCj4g KyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiArI2luY2x1ZGUgPGxpbnV4L29vbS5oPgo+ICsjaW5j bHVkZSA8bGludXgvc2htZW1fZnMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L3N3YXAuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvZG1hLWJ1Zi5oPgo+ICsjaW5jbHVkZSAiLi4vLi4vLi4vc3RhZ2luZy9hbmRyb2lk L3N5bmMuaCIKPiArCj4gKy8qIE5vdGhpbmcgcmVhbGx5IHRvIHByb3RlY3QgaGVyZS4uLiAqLwo+ ICtzdGF0aWMgc3BpbmxvY2tfdCBmZW5jZV9sb2NrOwo+ICsKPiArLyoKPiArICogaTkxNSBmZW5j ZXMgb24gc3luYyB0aW1lbGluZXMKPiArICoKPiArICogV2UgaW1wbGVtZW50IHN5bmMgcG9pbnRz IGluIHRlcm1zIG9mIGk5MTUgc2Vxbm9zLiAgVGhleSdyZSBleHBvc2VkCj4gKyAqIHRocm91Z2gg dGhlIG5ldyBEUk1fSTkxNV9HRU1fRkVOQ0UgaW9jdGwsIGFuZCBjYW4gYmUgbWl4ZWQgYW5kIG1h dGNoZWQKPiArICogd2l0aCBvdGhlciBBbmRyb2lkIHRpbWVsaW5lcyBhbmQgYWdncmVnYXRlZCBp bnRvIHN5bmNfZmVuY2VzLCBldGMuCj4gKyAqCj4gKyAqIFRPRE86Cj4gKyAqICAgcmViYXNlIG9u IHRvcCBvZiBDaHJpcydzIHNlcW5vL3JlcXVlc3Qgc3R1ZmYgYW5kIHVzZSByZXF1ZXN0cwo+ICsg KiAgIGFsbG93IG5vbi1SQ1MgZmVuY2VzIChuZWVkIHJpbmcvY29udGV4dCBhc3NvY2lhdGlvbikK PiArICovCj4gKwo+ICtzdHJ1Y3QgaTkxNV9mZW5jZSB7Cj4gKwlzdHJ1Y3QgZmVuY2UgYmFzZTsK PiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY3R4Owo+ICsJd2FpdF9xdWV1ZV90IHdhaXQ7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcXVlc3Q7Cj4gK307Cj4gKwo+ICsjZGVmaW5lIHRvX2ludGVsX2ZlbmNlKHgpIGNv bnRhaW5lcl9vZih4LCBzdHJ1Y3QgaTkxNV9mZW5jZSwgYmFzZSkKPiArCj4gK2ludCBfX3dhaXRf c2Vxbm8oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgdTMyIHNlcW5vLAo+ICsJCSB1bnNp Z25lZCByZXNldF9jb3VudGVyLAo+ICsJCSBib29sIGludGVycnVwdGlibGUsCj4gKwkJIHN0cnVj dCB0aW1lc3BlYyAqdGltZW91dCwKPiArCQkgc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAq ZmlsZV9wcml2KTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICppOTE1X2ZlbmNlX2dldF9kcml2 ZXJfbmFtZShzdHJ1Y3QgZmVuY2UgKmZlbmNlKQo+ICt7Cj4gKwlyZXR1cm4gImk5MTUiOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqaTkxNV9mZW5jZV9nZXRfdGltZWxpbmVfbmFtZShz dHJ1Y3QgZmVuY2UgKmZlbmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9mZW5jZSAqaW50ZWxfZmVu Y2UgPSB0b19pbnRlbF9mZW5jZShmZW5jZSk7Cj4gKwo+ICsJcmV0dXJuIGludGVsX2ZlbmNlLT5y aW5nLT5uYW1lOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGk5MTVfZmVuY2VfY2hlY2sod2FpdF9x dWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgZmxhZ3MsCj4gKwkJCSAgICB2b2lkICpr ZXkpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2ZlbmNlICppbnRlbF9mZW5jZSA9IHdhaXQtPnByaXZh dGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nID0gaW50ZWxfZmVuY2UtPnJpbmc7 Cj4gKwo+ICsJaWYgKCFpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChpbnRlbF9mZW5jZS0+cmVx dWVzdCwgZmFsc2UpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWZlbmNlX3NpZ25hbF9sb2NrZWQo JmludGVsX2ZlbmNlLT5iYXNlKTsKPiArCj4gKwlfX3JlbW92ZV93YWl0X3F1ZXVlKCZyaW5nLT5p cnFfcXVldWUsIHdhaXQpOwo+ICsJZmVuY2VfcHV0KCZpbnRlbF9mZW5jZS0+YmFzZSk7Cj4gKwly aW5nLT5pcnFfcHV0KHJpbmcpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Ym9vbCBpOTE1X2ZlbmNlX2VuYWJsZV9zaWduYWxpbmcoc3RydWN0IGZlbmNlICpmZW5jZSkKPiAr ewo+ICsJc3RydWN0IGk5MTVfZmVuY2UgKmludGVsX2ZlbmNlID0gdG9faW50ZWxfZmVuY2UoZmVu Y2UpOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9IGludGVsX2ZlbmNlLT5yaW5n Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZf cHJpdmF0ZTsKPiArCXdhaXRfcXVldWVfdCAqd2FpdCA9ICZpbnRlbF9mZW5jZS0+d2FpdDsKPiAr Cj4gKwkvKiBxdWV1ZSBmZW5jZSB3YWl0IHF1ZXVlIG9uIGlycSBxdWV1ZSBhbmQgZ2V0IGZlbmNl ICovCj4gKwlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQoaW50ZWxfZmVuY2UtPnJlcXVl c3QsIGZhbHNlKSB8fAo+ICsJICAgIGk5MTVfdGVybWluYWxseV93ZWRnZWQoJmRldl9wcml2LT5n cHVfZXJyb3IpKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlpZiAoIXJpbmctPmlycV9nZXQo cmluZykpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2Nv bXBsZXRlZChpbnRlbF9mZW5jZS0+cmVxdWVzdCwgZmFsc2UpKSB7Cj4gKwkJcmluZy0+aXJxX3B1 dChyaW5nKTsKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCX0KPiArCj4gKwl3YWl0LT5mbGFncyA9IDA7 Cj4gKwl3YWl0LT5wcml2YXRlID0gaW50ZWxfZmVuY2U7Cj4gKwl3YWl0LT5mdW5jID0gaTkxNV9m ZW5jZV9jaGVjazsKPiArCj4gKwlfX2FkZF93YWl0X3F1ZXVlKCZyaW5nLT5pcnFfcXVldWUsIHdh aXQpOwo+ICsJZmVuY2VfZ2V0KGZlbmNlKTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsK PiArc3RhdGljIGJvb2wgaTkxNV9mZW5jZV9zaWduYWxlZChzdHJ1Y3QgZmVuY2UgKmZlbmNlKQo+ ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9mZW5jZSAqaW50ZWxfZmVuY2UgPSB0b19pbnRlbF9mZW5jZShm ZW5jZSk7Cj4gKwo+ICsJcmV0dXJuIGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKGludGVsX2Zl bmNlLT5yZXF1ZXN0LCBmYWxzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzaWduZWQgbG9uZyBpOTE1 X2ZlbmNlX3dhaXQoc3RydWN0IGZlbmNlICpmZW5jZSwgYm9vbCBpbnRyLAo+ICsJCQkJICAgc2ln bmVkIGxvbmcgdGltZW91dF9qcykKPiArewo+ICsJc3RydWN0IGk5MTVfZmVuY2UgKmludGVsX2Zl bmNlID0gdG9faW50ZWxfZmVuY2UoZmVuY2UpOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gaW50ZWxfZmVuY2UtPnJpbmctPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlpbnQg cmV0Owo+ICsJczY0IHRpbWVvdXQ7Cj4gKwo+ICsJdGltZW91dCA9IGppZmZpZXNfdG9fbnNlY3Mo dGltZW91dF9qcyk7Cj4gKwo+ICsJcmV0ID0gX19pOTE1X3dhaXRfcmVxdWVzdChpbnRlbF9mZW5j ZS0+cmVxdWVzdCwKPiArCQkJCSAgYXRvbWljX3JlYWQoJmRldl9wcml2LT5ncHVfZXJyb3IucmVz ZXRfY291bnRlciksCj4gKwkJCQkgIGludHIsICZ0aW1lb3V0LCBOVUxMKTsKPiArCWlmIChyZXQg PT0gLUVUSU1FKQo+ICsJCXJldHVybiBuc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwo+ICsKPiAr CXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaTkxNV9mZW5jZV9maWxsX2RyaXZl cl9kYXRhKHN0cnVjdCBmZW5jZSAqZmVuY2UsIHZvaWQgKmRhdGEsCj4gKwkJCQkgICAgICBpbnQg c2l6ZSkKPiArewo+ICsJc3RydWN0IGk5MTVfZmVuY2UgKmludGVsX2ZlbmNlID0gdG9faW50ZWxf ZmVuY2UoZmVuY2UpOwo+ICsKPiArCWlmIChzaXplIDwgc2l6ZW9mKGludGVsX2ZlbmNlLT5yZXF1 ZXN0LT5zZXFubykpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJbWVtY3B5KGRhdGEsICZp bnRlbF9mZW5jZS0+cmVxdWVzdC0+c2Vxbm8sCj4gKwkgICAgICAgc2l6ZW9mKGludGVsX2ZlbmNl LT5yZXF1ZXN0LT5zZXFubykpOwo+ICsKPiArCXJldHVybiBzaXplb2YoaW50ZWxfZmVuY2UtPnJl cXVlc3QtPnNlcW5vKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTkxNV9mZW5jZV92YWx1ZV9z dHIoc3RydWN0IGZlbmNlICpmZW5jZSwgY2hhciAqc3RyLCBpbnQgc2l6ZSkKPiArewo+ICsJc3Ry dWN0IGk5MTVfZmVuY2UgKmludGVsX2ZlbmNlID0gdG9faW50ZWxfZmVuY2UoZmVuY2UpOwo+ICsK PiArCXNucHJpbnRmKHN0ciwgc2l6ZSwgIiV1IiwgaW50ZWxfZmVuY2UtPnJlcXVlc3QtPnNlcW5v KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTkxNV9mZW5jZV90aW1lbGluZV92YWx1ZV9zdHIo c3RydWN0IGZlbmNlICpmZW5jZSwgY2hhciAqc3RyLAo+ICsJCQkJCSAgaW50IHNpemUpCj4gK3sK PiArCXN0cnVjdCBpOTE1X2ZlbmNlICppbnRlbF9mZW5jZSA9IHRvX2ludGVsX2ZlbmNlKGZlbmNl KTsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSBpbnRlbF9mZW5jZS0+cmluZzsK PiArCj4gKwlzbnByaW50ZihzdHIsIHNpemUsICIldSIsIHJpbmctPmdldF9zZXFubyhyaW5nLCBm YWxzZSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGZlbmNlX29wcyBpOTE1X2ZlbmNlX29w cyA9IHsKPiArCS5nZXRfZHJpdmVyX25hbWUgPSAJaTkxNV9mZW5jZV9nZXRfZHJpdmVyX25hbWUs Cj4gKwkuZ2V0X3RpbWVsaW5lX25hbWUgPQlpOTE1X2ZlbmNlX2dldF90aW1lbGluZV9uYW1lLAo+ ICsJLmVuYWJsZV9zaWduYWxpbmcgPQlpOTE1X2ZlbmNlX2VuYWJsZV9zaWduYWxpbmcsCj4gKwku c2lnbmFsZWQgPQkJaTkxNV9mZW5jZV9zaWduYWxlZCwKPiArCS53YWl0ID0JCQlpOTE1X2ZlbmNl X3dhaXQsCj4gKwkuZmlsbF9kcml2ZXJfZGF0YSA9CWk5MTVfZmVuY2VfZmlsbF9kcml2ZXJfZGF0 YSwKPiArCS5mZW5jZV92YWx1ZV9zdHIgPQlpOTE1X2ZlbmNlX3ZhbHVlX3N0ciwKPiArCS50aW1l bGluZV92YWx1ZV9zdHIgPQlpOTE1X2ZlbmNlX3RpbWVsaW5lX3ZhbHVlX3N0ciwKPiArfTsKPiAr Cj4gK3N0YXRpYyBzdHJ1Y3QgZmVuY2UgKmk5MTVfZmVuY2VfY3JlYXRlKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKnJpbmcsCj4gKwkJCQkgICAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCkK PiArewo+ICsJc3RydWN0IGk5MTVfZmVuY2UgKmZlbmNlOwo+ICsJaW50IHJldDsKPiArCj4gKwlm ZW5jZSA9IGt6YWxsb2Moc2l6ZW9mKCpmZW5jZSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFmZW5j ZSkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlyZXQgPSByaW5nLT5hZGRfcmVxdWVzdChyaW5n KTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoImFkZF9yZXF1ZXN0IGZhaWxlZFxuIik7 Cj4gKwkJZmVuY2VfZnJlZSgoc3RydWN0IGZlbmNlICopZmVuY2UpOwo+ICsJCXJldHVybiBOVUxM Owo+ICsJfQo+ICsKPiArCWZlbmNlLT5yaW5nID0gcmluZzsKPiArCWZlbmNlLT5jdHggPSBjdHg7 Cj4gKwlmZW5jZS0+cmVxdWVzdCA9IHJpbmctPm91dHN0YW5kaW5nX2xhenlfcmVxdWVzdDsKPiAr CWZlbmNlX2luaXQoJmZlbmNlLT5iYXNlLCAmaTkxNV9mZW5jZV9vcHMsICZmZW5jZV9sb2NrLCBj dHgtPnVzZXJfaGFuZGxlLAo+ICsJCSAgIGZlbmNlLT5yZXF1ZXN0LT5zZXFubyk7Cj4gKwo+ICsJ cmV0dXJuICZmZW5jZS0+YmFzZTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGk5MTVfc3luY19jcmVh dGVfZmVuY2VfaW9jdGwgLSBmZW5jZSBjcmVhdGlvbiBmdW5jdGlvbgo+ICsgKiBAZGV2OiBkcm0g ZGV2aWNlCj4gKyAqIEBkYXRhOiBpb2N0bCBkYXRhCj4gKyAqIEBmaWxlOiBmaWxlIHN0cnVjdAo+ ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBmZW5jZSBnaXZlbiBhIGNvbnRleHQg YW5kIHJpbmcsIGFuZCByZXR1cm5zCj4gKyAqIGl0IHRvIHRoZSBjYWxsZXIgaW4gdGhlIGZvcm0g b2YgYSBmaWxlIGRlc2NyaXB0b3IuCj4gKyAqCj4gKyAqIFRoZSByZXR1cm5lZCBkZXNjcmlwdG9y IGlzIGEgc3luYyBmZW5jZSBmZCwgYW5kIGNhbiBiZSB1c2VkIHdpdGggYWxsCj4gKyAqIHRoZSB1 c3VhbCBzeW5jIGZlbmNlIG9wZXJhdGlvbnMgKHBvbGwsIGlvY3RsLCBldGMpLgo+ICsgKgo+ICsg KiBUaGUgcHJvY2VzcyBmZCBsaW1pdCBzaG91bGQgcHJldmVudCBhbiBvdmVyYWxsb2NhdGlvbiBv ZiBmZW5jZSBvYmplY3RzLAo+ICsgKiB3aGljaCBuZWVkIHRvIGJlIGRlc3Ryb3llZCBtYW51YWxs eSB3aXRoIGEgY2xvc2UoKSBjYWxsLgo+ICsgKi8KPiAraW50IGk5MTVfc3luY19jcmVhdGVfZmVu Y2VfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiArCQkJCSBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2ZlbmNlICpm ZGF0YSA9IGRhdGE7Cj4gKwlzdHJ1Y3QgZmVuY2UgKmZlbmNlOwo+ICsJc3RydWN0IHN5bmNfZmVu Y2UgKnNmZW5jZTsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4gKwlzdHJ1Y3Qg aW50ZWxfY29udGV4dCAqY3R4Owo+ICsJdTMyIGN0eF9pZCA9IGZkYXRhLT5jdHhfaWQ7Cj4gKwlp bnQgZmQgPSBnZXRfdW51c2VkX2ZkX2ZsYWdzKE9fQ0xPRVhFQyk7Cj4gKwlpbnQgcmV0ID0gMDsK PiArCj4gKwlpZiAoZmlsZSA9PSBOVUxMKSB7Cj4gKwkJRFJNX0VSUk9SKCJubyBmaWxlIHByaXY/ XG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXQgPSBpOTE1X211dGV4 X2xvY2tfaW50ZXJydXB0aWJsZShkZXYpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigi bXV0ZXggaW50ZXJydXB0ZWRcbiIpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCWN0eCA9 IGk5MTVfZ2VtX2NvbnRleHRfZ2V0KGZpbGUtPmRyaXZlcl9wcml2LCBjdHhfaWQpOwo+ICsJaWYg KGN0eCA9PSBOVUxMKSB7Cj4gKwkJRFJNX0VSUk9SKCJjb250ZXh0IGxvb2t1cCBmYWlsZWRcbiIp Owo+ICsJCXJldCA9IC1FTk9FTlQ7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJcmluZyA9 ICZkZXZfcHJpdi0+cmluZ1tSQ1NdOwo+ICsKPiArCWlmICghaW50ZWxfcmluZ19pbml0aWFsaXpl ZChyaW5nKSkgewo+ICsJCURSTV9FUlJPUigicmluZyBub3QgcmVhZHlcbiIpOwo+ICsJCXJldCA9 IC1FSU87Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJZmVuY2UgPSBpOTE1X2ZlbmNlX2Ny ZWF0ZShyaW5nLCBjdHgpOwo+ICsJaWYgKCFmZW5jZSkgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4g KwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJZmRhdGEtPm5hbWVbc2l6ZW9mKGZkYXRhLT5uYW1l KSAtIDFdID0gJ1wwJzsKPiArCXNmZW5jZSA9IHN5bmNfZmVuY2VfY3JlYXRlX2RtYShmZGF0YS0+ bmFtZSwgZmVuY2UpOwo+ICsJaWYgKCFzZmVuY2UpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJ CWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCWZkYXRhLT5mZCA9IGZkOwo+ICsKPiArCXN5bmNfZmVu Y2VfaW5zdGFsbChzZmVuY2UsIGZkKTsKPiArCj4gKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0 X211dGV4KTsKPiArb3V0Ogo+ICsJcmV0dXJuIHJldDsKPiArCj4gK2VycjoKPiArCW11dGV4X3Vu bG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsJcHV0X3VudXNlZF9mZChmZCk7Cj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgaTkxNV9zeW5jX2luaXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwo+ ICsJaW50IGksIHJldCA9IDA7Cj4gKwo+ICsJZm9yX2VhY2hfcmluZyhyaW5nLCBkZXZfcHJpdiwg aSkgewo+ICsJCS8qIEZJWE1FOiBub24tUkNTIGZlbmNlcyAqLwo+ICsJfQo+ICsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9zeW5jX2Zpbmkoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg STkxNV9OVU1fUklOR1M7IGkrKykgewo+ICsJfQo+ICt9CkRvIHlvdSBoYXZlIGEgbmVlZCBmb3Ig c3luY19pbml0L2Zpbmk/CgpUaGUgcmVzdCBsb29rcyBnb29kIHRvIG1lLiBDb2RlJ3MgY2xlYW5l ZCB1cCBhIGxvdC4gOi0pCgp+TWFhcnRlbgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=