From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ramalingam C Subject: Re: [PATCH v3 5/9] drm/i915: Add HDCP framework + base implementation Date: Tue, 5 Dec 2017 14:36:39 +0530 Message-ID: References: <20171205051513.8603-1-seanpaul@chromium.org> <20171205051513.8603-6-seanpaul@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171205051513.8603-6-seanpaul@chromium.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sean Paul , dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Cc: seanpaul@google.com, David Airlie , Joonas Lahtinen , linux-kernel@vger.kernel.org, Rodrigo Vivi , daniel.vetter@intel.com List-Id: dri-devel@lists.freedesktop.org CgpPbiBUdWVzZGF5IDA1IERlY2VtYmVyIDIwMTcgMTA6NDUgQU0sIFNlYW4gUGF1bCB3cm90ZToK PiBUaGlzIHBhdGNoIGFkZHMgdGhlIGZyYW1ld29yayByZXF1aXJlZCB0byBhZGQgSERDUCBzdXBw b3J0IHRvIGludGVsCj4gY29ubmVjdG9ycy4gSXQgaW1wbGVtZW50cyBBa3N2IGxvYWRpbmcgZnJv bSBmdXNlLCBhbmQgcGFydHMgMS8yLzMKPiBvZiB0aGUgSERDUCBhdXRoZW50aWNhdGlvbiBzY2hl bWUuCj4KPiBOb3RlIHRoYXQgd2l0aG91dCBzaGltIGltcGxlbWVudGF0aW9ucywgdGhpcyBkb2Vz IG5vdCBhY3R1YWxseSBpbXBsZW1lbnQKPiBIRENQLiBUaGF0IHdpbGwgY29tZSBpbiBzdWJzZXF1 ZW50IHBhdGNoZXMuCj4KPiBDaGFuZ2VzIGluIHYyOgo+IC0gRG9uJ3Qgb3BlbiBjb2RlIHdhaXRf Zm9ycyAoQ2hyaXMpCj4gLSBkcm1faGRjcC5jIHVuZGVyIE1JVCBsaWNlbnNlIChEYW5pZWwpCj4g LSBNb3ZlIGludGVsX2hkY3BfZGlzYWJsZSgpIGNhbGwgYWJvdmUgZGRpX2Rpc2FibGUgKFJhbSkK PiAtIEZpeCAvLyBjb21tZW50cyAoSSB3b3JlIGEgY29uZSBvZiBzaGFtZSBmb3IgMTIgaG91cnMg dG8gYXRvbmUpIChEYW5pZWwpCj4gLSBKdXN0aWZ5IGludGVsX2hkY3Bfc2hpbSB3aXRoIGNvbW1l bnRzIChEYW5pZWwpCj4gLSBGaXhlZCBhc3luYyBsb2NraW5nIGlzc3VlcyBieSBhZGRpbmcgaGRj cF9tdXRleCAoRGFuaWVsKQo+IC0gRG9uJ3QgYWx0ZXIgY29ubmVjdG9yX3N0YXRlIGluIGVuYWJs ZS9kaXNhYmxlIChEYW5pZWwpCj4gQ2hhbmdlcyBpbiB2MzoKPiAtIEFkZGVkIGhkY3BfbXV0ZXgv aGRjcF92YWx1ZSB0byBtYWtlIGFzeW5jIHJlYXNvbmFibGUKPiAtIEFkZGVkIGhkY3BfcHJvcF93 b3JrIHRvIHNlcGFyYXRlIGxpbmsgY2hlY2tpbmcgJiBwcm9wZXJ0eSBzZXR0aW5nCj4gLSBBZGRl ZCBuZXcgaGVscGVyIGZvciBhdG9taWNfY2hlY2sgc3RhdGUgdHJhY2tpbmcgKERhbmllbCkKPiAt IE1vdmVkIGVuYWJsZS9kaXNhYmxlIGludG8gYXRvbWljX2NvbW1pdCB3aXRoIG1hdGNoaW5nIGhl bHBlcnMKPiAtIE1vdmVkIGludGVsX2hkY3BfY2hlY2tfbGluayBvdXQgb2YgYWxsIGxvY2tzIHdo ZW4gY2FsbGVkIGZyb20gZHAKPiAtIEJ1bXBlZCB1cCBrc3ZfZmlmbyB0aW1lb3V0IChub3RpY2Vk IGZhaWx1cmUgb24gb25lIG9mIG15IGRvbmdsZXMpCj4KPiBDYzogQ2hyaXMgV2lsc29uIDxjaHJp c0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJA aW50ZWwuY29tPgo+IENjOiBSYW1hbGluZ2FtIEMgPHJhbWFsaW5nYW0uY0BpbnRlbC5jb20+Cj4g U2lnbmVkLW9mZi1ieTogU2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+Cj4gLS0tCj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgfCAgIDEgKwo+ICAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgIHwgIDgzICsrKysKPiAgIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2F0b21pYy5jICB8ICAgMiArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMgfCAgMTQgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHJ2LmggICAgIHwgIDg4ICsrKysrCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNw LmMgICAgfCA3MzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIDYgZmls ZXMgY2hhbmdlZCwgOTE5IGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5k ZXggNDJiYzhiZDRmZjA2Li4zZmFjZWE0ZWVmZGIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ IEBAIC0xMDcsNiArMTA3LDcgQEAgaTkxNS15ICs9IGludGVsX2F1ZGlvLm8gXAo+ICAgCSAgaW50 ZWxfZmJjLm8gXAo+ICAgCSAgaW50ZWxfZmlmb191bmRlcnJ1bi5vIFwKPiAgIAkgIGludGVsX2Zy b250YnVmZmVyLm8gXAo+ICsJICBpbnRlbF9oZGNwLm8gXAo+ICAgCSAgaW50ZWxfaG90cGx1Zy5v IFwKPiAgIAkgIGludGVsX21vZGVzLm8gXAo+ICAgCSAgaW50ZWxfb3ZlcmxheS5vIFwKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVnLmgKPiBpbmRleCAwOWJmMDQzYzFjMmUuLjJiZDJjYzg0NDFkNCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+IEBAIC04MDM0LDYgKzgwMzQsNyBAQCBlbnVtIHsK PiAgICNkZWZpbmUgICAgIEdFTjlfTUVNX0xBVEVOQ1lfTEVWRUxfMV81X1NISUZUCTgKPiAgICNk ZWZpbmUgICAgIEdFTjlfTUVNX0xBVEVOQ1lfTEVWRUxfMl82X1NISUZUCTE2Cj4gICAjZGVmaW5l ICAgICBHRU45X01FTV9MQVRFTkNZX0xFVkVMXzNfN19TSElGVAkyNAo+ICsjZGVmaW5lICAgU0tM X1BDT0RFX0xPQURfSERDUF9LRVlTCQkweDUKPiAgICNkZWZpbmUgICBTS0xfUENPREVfQ0RDTEtf Q09OVFJPTAkJMHg3Cj4gICAjZGVmaW5lICAgICBTS0xfQ0RDTEtfUFJFUEFSRV9GT1JfQ0hBTkdF CTB4Mwo+ICAgI2RlZmluZSAgICAgU0tMX0NEQ0xLX1JFQURZX0ZPUl9DSEFOR0UJCTB4MQo+IEBA IC04MzM1LDYgKzgzMzYsODggQEAgZW51bSBza2xfcG93ZXJfZ2F0ZSB7Cj4gICAjZGVmaW5lICBT S0xfUFdfVE9fUEcocHcpCQkJKChwdykgLSBTS0xfRElTUF9QV18xICsgU0tMX1BHMSkKPiAgICNk ZWZpbmUgIFNLTF9GVVNFX1BHX0RJU1RfU1RBVFVTKHBnKQkJKDEgPDwgKDI3IC0gKHBnKSkpCj4g ICAKPiArCj4gKy8qIEhEQ1AgS2V5IFJlZ2lzdGVycyAqLwo+ICsjZGVmaW5lIFNLTF9IRENQX0tF WV9DT05GCQlfTU1JTygweDY2YzAwKQo+ICsjZGVmaW5lCSBTS0xfSERDUF9BS1NWX1NFTkRfVFJJ R0dFUglCSVQoMzEpCj4gKyNkZWZpbmUgIFNLTF9IRENQX0NMRUFSX0tFWVNfVFJJR0dFUglCSVQo MzApCj4gKyNkZWZpbmUgU0tMX0hEQ1BfS0VZX1NUQVRVUwkJX01NSU8oMHg2NmMwNCkKPiArI2Rl ZmluZSAgU0tMX0hEQ1BfRlVTRV9JTl9QUk9HUkVTUwlCSVQoNykKPiArI2RlZmluZSAgU0tMX0hE Q1BfRlVTRV9FUlJPUgkJQklUKDYpCj4gKyNkZWZpbmUgIFNLTF9IRENQX0ZVU0VfRE9ORQkJQklU KDUpCj4gKyNkZWZpbmUgIFNLTF9IRENQX0tFWV9MT0FEX1NUQVRVUwlCSVQoMSkKPiArI2RlZmlu ZSAgU0tMX0hEQ1BfS0VZX0xPQURfRE9ORQkJQklUKDApCj4gKyNkZWZpbmUgU0tMX0hEQ1BfQUtT Vl9MTwkJX01NSU8oMHg2NmMxMCkKPiArI2RlZmluZSBTS0xfSERDUF9BS1NWX0hJCQlfTU1JTygw eDY2YzE0KQo+ICsKPiArLyogSERDUCBSZXBlYXRlciBSZWdpc3RlcnMgKi8KPiArI2RlZmluZSBT S0xfSERDUF9SRVBfQ1RMCQlfTU1JTygweDY2ZDAwKQo+ICsjZGVmaW5lICBTS0xfSERDUF9ERElC X1JFUF9QUkVTRU5UCUJJVCgzMCkKPiArI2RlZmluZSAgU0tMX0hEQ1BfRERJQV9SRVBfUFJFU0VO VAlCSVQoMjkpCj4gKyNkZWZpbmUgIFNLTF9IRENQX0RESUNfUkVQX1BSRVNFTlQJQklUKDI4KQo+ ICsjZGVmaW5lICBTS0xfSERDUF9ERElEX1JFUF9QUkVTRU5UCUJJVCgyNykKPiArI2RlZmluZSAg U0tMX0hEQ1BfRERJRl9SRVBfUFJFU0VOVAlCSVQoMjYpCj4gKyNkZWZpbmUgIFNLTF9IRENQX0RE SUVfUkVQX1BSRVNFTlQJQklUKDI1KQo+ICsjZGVmaW5lICBTS0xfSERDUF9ERElCX1NIQTFfTTAJ CSgxIDw8IDIwKQo+ICsjZGVmaW5lICBTS0xfSERDUF9ERElBX1NIQTFfTTAJCSgyIDw8IDIwKQo+ ICsjZGVmaW5lICBTS0xfSERDUF9ERElDX1NIQTFfTTAJCSgzIDw8IDIwKQo+ICsjZGVmaW5lICBT S0xfSERDUF9ERElEX1NIQTFfTTAJCSg0IDw8IDIwKQo+ICsjZGVmaW5lICBTS0xfSERDUF9ERElG X1NIQTFfTTAJCSg1IDw8IDIwKQo+ICsjZGVmaW5lICBTS0xfSERDUF9ERElFX1NIQTFfTTAJCSg2 IDw8IDIwKSAvKiBCc3BlYyBzYXlzIDU/ICovCj4gKyNkZWZpbmUgIFNLTF9IRENQX1NIQTFfQlVT WQkJQklUKDE2KQo+ICsjZGVmaW5lICBTS0xfSERDUF9TSEExX1JFQURZCQlCSVQoMTcpCj4gKyNk ZWZpbmUgIFNLTF9IRENQX1NIQTFfQ09NUExFVEUJCUJJVCgxOCkKPiArI2RlZmluZSAgU0tMX0hE Q1BfU0hBMV9WX01BVENICQlCSVQoMTkpCj4gKyNkZWZpbmUgIFNLTF9IRENQX1NIQTFfVEVYVF8z MgkJKDEgPDwgMSkKPiArI2RlZmluZSAgU0tMX0hEQ1BfU0hBMV9DT01QTEVURV9IQVNICSgyIDw8 IDEpCj4gKyNkZWZpbmUgIFNLTF9IRENQX1NIQTFfVEVYVF8yNAkJKDQgPDwgMSkKPiArI2RlZmlu ZSAgU0tMX0hEQ1BfU0hBMV9URVhUXzE2CQkoNSA8PCAxKQo+ICsjZGVmaW5lICBTS0xfSERDUF9T SEExX1RFWFRfOAkJKDYgPDwgMSkKPiArI2RlZmluZSAgU0tMX0hEQ1BfU0hBMV9URVhUXzAJCSg3 IDw8IDEpCj4gKyNkZWZpbmUgU0tMX0hEQ1BfU0hBX1ZfUFJJTUVfSDAJCV9NTUlPKDB4NjZkMDQp Cj4gKyNkZWZpbmUgU0tMX0hEQ1BfU0hBX1ZfUFJJTUVfSDEJCV9NTUlPKDB4NjZkMDgpCj4gKyNk ZWZpbmUgU0tMX0hEQ1BfU0hBX1ZfUFJJTUVfSDIJCV9NTUlPKDB4NjZkMEMpCj4gKyNkZWZpbmUg U0tMX0hEQ1BfU0hBX1ZfUFJJTUVfSDMJCV9NTUlPKDB4NjZkMTApCj4gKyNkZWZpbmUgU0tMX0hE Q1BfU0hBX1ZfUFJJTUVfSDQJCV9NTUlPKDB4NjZkMTQpCj4gKyNkZWZpbmUgU0tMX0hEQ1BfU0hB X1ZfUFJJTUUoaCkJCV9NTUlPKCgweDY2ZDA0ICsgaCAqIDQpKQo+ICsjZGVmaW5lIFNLTF9IRENQ X1NIQV9URVhUCQlfTU1JTygweDY2ZDE4KQo+ICsKPiArLyogSERDUCBBdXRoIFJlZ2lzdGVycyAq Lwo+ICsjZGVmaW5lIF9TS0xfUE9SVEFfSERDUF9BVVRIRU5DCQkweDY2ODAwCj4gKyNkZWZpbmUg X1NLTF9QT1JUQl9IRENQX0FVVEhFTkMJCTB4NjY1MDAKPiArI2RlZmluZSBfU0tMX1BPUlRDX0hE Q1BfQVVUSEVOQwkJMHg2NjYwMAo+ICsjZGVmaW5lIF9TS0xfUE9SVERfSERDUF9BVVRIRU5DCQkw eDY2NzAwCj4gKyNkZWZpbmUgX1NLTF9QT1JURV9IRENQX0FVVEhFTkMJCTB4NjZBMDAKPiArI2Rl ZmluZSBfU0tMX1BPUlRGX0hEQ1BfQVVUSEVOQwkJMHg2NjkwMAo+ICsjZGVmaW5lIF9TS0xfUE9S VF9IRENQX0FVVEhFTkMocG9ydCwgeCkJX01NSU8oX1BJQ0socG9ydCwgXAo+ICsJCQkJCSAgX1NL TF9QT1JUQV9IRENQX0FVVEhFTkMsIFwKPiArCQkJCQkgIF9TS0xfUE9SVEJfSERDUF9BVVRIRU5D LCBcCj4gKwkJCQkJICBfU0tMX1BPUlRDX0hEQ1BfQVVUSEVOQywgXAo+ICsJCQkJCSAgX1NLTF9Q T1JURF9IRENQX0FVVEhFTkMsIFwKPiArCQkJCQkgIF9TS0xfUE9SVEVfSERDUF9BVVRIRU5DLCBc Cj4gKwkJCQkJICBfU0tMX1BPUlRGX0hEQ1BfQVVUSEVOQykgKyB4KQo+ICsjZGVmaW5lIFNLTF9Q T1JUX0hEQ1BfQ09ORihwb3J0KQlfU0tMX1BPUlRfSERDUF9BVVRIRU5DKHBvcnQsIDB4MCkKPiAr I2RlZmluZSAgU0tMX0hEQ1BfQ09ORl9DQVBUVVJFX0FOCUJJVCgwKQo+ICsjZGVmaW5lICBTS0xf SERDUF9DT05GX0FVVEhfQU5EX0VOQwkoQklUKDEpIHwgQklUKDApKQo+ICsjZGVmaW5lIFNLTF9Q T1JUX0hEQ1BfQU5JTklUKHBvcnQpCV9TS0xfUE9SVF9IRENQX0FVVEhFTkMocG9ydCwgMHg0KQo+ ICsjZGVmaW5lIFNLTF9QT1JUX0hEQ1BfQU5MTyhwb3J0KQlfU0tMX1BPUlRfSERDUF9BVVRIRU5D KHBvcnQsIDB4OCkKPiArI2RlZmluZSBTS0xfUE9SVF9IRENQX0FOSEkocG9ydCkJX1NLTF9QT1JU X0hEQ1BfQVVUSEVOQyhwb3J0LCAweEMpCj4gKyNkZWZpbmUgU0tMX1BPUlRfSERDUF9CS1NWTE8o cG9ydCkJX1NLTF9QT1JUX0hEQ1BfQVVUSEVOQyhwb3J0LCAweDEwKQo+ICsjZGVmaW5lIFNLTF9Q T1JUX0hEQ1BfQktTVkhJKHBvcnQpCV9TS0xfUE9SVF9IRENQX0FVVEhFTkMocG9ydCwgMHgxNCkK PiArI2RlZmluZSBTS0xfUE9SVF9IRENQX1JQUklNRShwb3J0KQlfU0tMX1BPUlRfSERDUF9BVVRI RU5DKHBvcnQsIDB4MTgpCj4gKyNkZWZpbmUgU0tMX1BPUlRfSERDUF9TVEFUVVMocG9ydCkJX1NL TF9QT1JUX0hEQ1BfQVVUSEVOQyhwb3J0LCAweDFDKQo+ICsjZGVmaW5lICBTS0xfSERDUF9TVEFU VVNfU1RSRUFNX0FfRU5DCUJJVCgzMSkKPiArI2RlZmluZSAgU0tMX0hEQ1BfU1RBVFVTX1NUUkVB TV9CX0VOQwlCSVQoMzApCj4gKyNkZWZpbmUgIFNLTF9IRENQX1NUQVRVU19TVFJFQU1fQ19FTkMJ QklUKDI5KQo+ICsjZGVmaW5lICBTS0xfSERDUF9TVEFUVVNfU1RSRUFNX0RfRU5DCUJJVCgyOCkK PiArI2RlZmluZSAgU0tMX0hEQ1BfU1RBVFVTX0FVVEgJCUJJVCgyMSkKPiArI2RlZmluZSAgU0tM X0hEQ1BfU1RBVFVTX0VOQwkJQklUKDIwKQo+ICsjZGVmaW5lICBTS0xfSERDUF9TVEFUVVNfUklf TUFUQ0gJQklUKDE5KQo+ICsjZGVmaW5lICBTS0xfSERDUF9TVEFUVVNfUjBfUkVBRFkJQklUKDE4 KQo+ICsjZGVmaW5lICBTS0xfSERDUF9TVEFUVVNfQU5fUkVBRFkJQklUKDE3KQo+ICsjZGVmaW5l ICBTS0xfSERDUF9TVEFUVVNfQ0lQSEVSCQlCSVQoMTYpCj4gKyNkZWZpbmUgIFNLTF9IRENQX1NU QVRVU19GUkFNRV9DTlQoeCkJKCh4ID4+IDgpICYgMHhmZikKPiArCj4gICAvKiBQZXItcGlwZSBE REkgRnVuY3Rpb24gQ29udHJvbCAqLwo+ICAgI2RlZmluZSBfVFJBTlNfRERJX0ZVTkNfQ1RMX0EJ CTB4NjA0MDAKPiAgICNkZWZpbmUgX1RSQU5TX0RESV9GVU5DX0NUTF9CCQkweDYxNDAwCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pYy5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMKPiBpbmRleCAzNmQ0ZTYzNWU0Y2UuLmQ0NTJjMzI3 ZGMxZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWMuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pYy5jCj4gQEAgLTExMCw2ICsx MTAsOCBAQCBpbnQgaW50ZWxfZGlnaXRhbF9jb25uZWN0b3JfYXRvbWljX2NoZWNrKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uLAo+ICAgCQl0b19pbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9zdGF0 ZShvbGRfc3RhdGUpOwo+ICAgCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiAg IAo+ICsJaW50ZWxfaGRjcF9hdG9taWNfY2hlY2soY29ubiwgb2xkX3N0YXRlLCBuZXdfc3RhdGUp Owo+ICsKPiAgIAlpZiAoIW5ld19zdGF0ZS0+Y3J0YykKPiAgIAkJcmV0dXJuIDA7Cj4gICAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gaW5kZXggNjAxYzIzYmU4MjY0Li5mNDVj NDY4YWJmOTggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxh eS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTEy MzE5LDYgKzEyMzE5LDggQEAgc3RhdGljIHZvaWQgaW50ZWxfYXRvbWljX2NvbW1pdF90YWlsKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gICAJc3RydWN0IGRybV9jcnRjX3N0YXRlICpv bGRfY3J0Y19zdGF0ZSwgKm5ld19jcnRjX3N0YXRlOwo+ICAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YzsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZSwgKm5ld19j b25uX3N0YXRlOwo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiAgIAlzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqaW50ZWxfY3N0YXRlOwo+ICAgCXU2NCBwdXRfZG9tYWluc1tJ OTE1X01BWF9QSVBFU10gPSB7fTsKPiAgIAlpbnQgaTsKPiBAQCAtMTI0MDgsOSArMTI0MTAsMTcg QEAgc3RhdGljIHZvaWQgaW50ZWxfYXRvbWljX2NvbW1pdF90YWlsKHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSkKPiAgIAkJfQo+ICAgCX0KPiAgIAo+ICsJZm9yX2VhY2hfb2xkbmV3X2Nv bm5lY3Rvcl9pbl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yLCBvbGRfY29ubl9zdGF0ZSwKPiArCQkJ CQkgICBuZXdfY29ubl9zdGF0ZSwgaSkKPiArCQlpbnRlbF9oZGNwX2F0b21pY19wcmVfY29tbWl0 KGNvbm5lY3Rvciwgb2xkX2Nvbm5fc3RhdGUsCj4gKwkJCQkJICAgICBuZXdfY29ubl9zdGF0ZSk7 Cj4gKwo+ICAgCS8qIE5vdyBlbmFibGUgdGhlIGNsb2NrcywgcGxhbmUsIHBpcGUsIGFuZCBjb25u ZWN0b3JzIHRoYXQgd2Ugc2V0IHVwLiAqLwo+ICAgCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9j cnRjcyhzdGF0ZSk7Cj4gICAKPiArCWZvcl9lYWNoX25ld19jb25uZWN0b3JfaW5fc3RhdGUoc3Rh dGUsIGNvbm5lY3RvciwgbmV3X2Nvbm5fc3RhdGUsIGkpCj4gKwkJaW50ZWxfaGRjcF9hdG9taWNf Y29tbWl0KGNvbm5lY3RvciwgbmV3X2Nvbm5fc3RhdGUpOwo+ICsKPiAgIAkvKiBGSVhNRTogV2Ug c2hvdWxkIGNhbGwgZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X2h3X2RvbmUoKSBoZXJlCj4gICAJ ICogYWxyZWFkeSwgYnV0IHN0aWxsIG5lZWQgdGhlIHN0YXRlIGZvciB0aGUgZGVsYXllZCBvcHRp bWl6YXRpb24uIFRvCj4gICAJICogZml4IHRoaXM6Cj4gQEAgLTE1MzIyLDYgKzE1MzMyLDEwIEBA IHN0YXRpYyB2b2lkIGludGVsX2hwZF9wb2xsX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiAgIAlmb3JfZWFjaF9pbnRlbF9jb25uZWN0b3JfaXRlcihjb25uZWN0b3IsICZjb25uX2l0ZXIp IHsKPiAgIAkJaWYgKGNvbm5lY3Rvci0+bW9kZXNldF9yZXRyeV93b3JrLmZ1bmMpCj4gICAJCQlj YW5jZWxfd29ya19zeW5jKCZjb25uZWN0b3ItPm1vZGVzZXRfcmV0cnlfd29yayk7Cj4gKwkJaWYg KGNvbm5lY3Rvci0+aGRjcF9zaGltKSB7Cj4gKwkJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygm Y29ubmVjdG9yLT5oZGNwX2NoZWNrX3dvcmspOwo+ICsJCQljYW5jZWxfd29ya19zeW5jKCZjb25u ZWN0b3ItPmhkY3BfcHJvcF93b3JrKTsKPiArCQl9Cj4gICAJfQo+ICAgCWRybV9jb25uZWN0b3Jf bGlzdF9pdGVyX2VuZCgmY29ubl9pdGVyKTsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYu aAo+IGluZGV4IDg1MmIzZDE2MTc1NC4uNmY0N2E0MjI3ZjVmIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHJ2LmgKPiBAQCAtMzAxLDYgKzMwMSw3NiBAQCBzdHJ1Y3QgaW50ZWxfcGFuZWwgewo+ ICAgCX0gYmFja2xpZ2h0Owo+ICAgfTsKPiAgIAo+ICsvKgo+ICsgKiBUaGlzIHN0cnVjdHVyZSBz ZXJ2ZXMgYXMgYSB0cmFuc2xhdGlvbiBsYXllciBiZXR3ZWVuIHRoZSBnZW5lcmljIEhEQ1AgY29k ZQo+ICsgKiBhbmQgdGhlIGJ1cy1zcGVjaWZpYyBjb2RlLiBXaGF0IHRoYXQgbWVhbnMgaXMgdGhh dCBIRENQIG92ZXIgSERNSSBkaWZmZXJzCj4gKyAqIGZyb20gSERDUCBvdmVyIERQLCBzbyB0byBh Y2NvdW50IGZvciB0aGVzZSBkaWZmZXJlbmNlcywgd2UgbmVlZCB0bwo+ICsgKiBjb21tdW5pY2F0 ZSB3aXRoIHRoZSByZWNlaXZlciB0aHJvdWdoIHRoaXMgc2hpbS4KPiArICoKPiArICogRm9yIGNv bXBsZXRlbmVzcywgdGhlIDIgYnVzZXMgZGlmZmVyIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKPiAr ICoJLSBEUCBBVVggdnMuIEREQwo+ICsgKgkJSERDUCByZWdpc3RlcnMgb24gdGhlIHJlY2VpdmVy IGFyZSBzZXQgdmlhIERQIEFVWCBmb3IgRFAsIGFuZAo+ICsgKgkJdGhleSBhcmUgc2V0IHZpYSBE REMgZm9yIEhETUkuCj4gKyAqCS0gUmVjZWl2ZXIgcmVnaXN0ZXIgb2Zmc2V0cwo+ICsgKgkJVGhl IG9mZnNldHMgb2YgdGhlIHJlZ2lzdGVycyBhcmUgZGlmZmVyZW50IGZvciBEUCB2cy4gSERNSQo+ ICsgKgktIFJlY2VpdmVyIHJlZ2lzdGVyIG1hc2tzL29mZnNldHMKPiArICoJCUZvciBpbnN0YW5j ZSwgdGhlIHJlYWR5IGJpdCBmb3IgdGhlIEtTViBmaWZvIGlzIGluIGEgZGlmZmVyZW50Cj4gKyAq CQlwbGFjZSBvbiBEUCB2cyBIRE1JCj4gKyAqCS0gUmVjZWl2ZXIgcmVnaXN0ZXIgbmFtZXMKPiAr ICoJCVNlcmlvdXNseS4gSW4gdGhlIERQIHNwZWMsIHRoZSAxNi1iaXQgcmVnaXN0ZXIgY29udGFp bmluZwo+ICsgKgkJZG93bnN0cmVhbSBpbmZvcm1hdGlvbiBpcyBjYWxsZWQgQklORk8sIG9uIEhE TUkgaXQncyBjYWxsZWQKPiArICoJCUJTVEFUVVMuIFRvIGNvbmZ1c2UgbWF0dGVycyBmdXJ0aGVy LCBEUCBoYXMgYSBCU1RBVFVTIHJlZ2lzdGVyCj4gKyAqCQl3aXRoIGEgY29tcGxldGVseSBkaWZm ZXJlbnQgZGVmaW5pdGlvbi4KPiArICoJLSBLU1YgRklGTwo+ICsgKgkJT24gSERNSSwgdGhlIGtz diBmaWZvIGlzIHJlYWQgYWxsIGF0IG9uY2UsIHdoZXJlYXMgb24gRFAgaXQgbXVzdAo+ICsgKgkJ YmUgcmVhZCAzIGtleXMgYXQgYSB0aW1lCj4gKyAqCS0gQWtzdiBvdXRwdXQKPiArICoJCVNpbmNl IEFrc3YgaXMgaGlkZGVuIGluIGhhcmR3YXJlLCB0aGVyZSdzIGRpZmZlcmVudCBwcm9jZWR1cmVz Cj4gKyAqCQl0byBzZW5kIGl0IG92ZXIgRFAgQVVYIHZzIEREQwo+ICsgKi8KPiArc3RydWN0IGlu dGVsX2hkY3Bfc2hpbSB7Cj4gKwkvKiBPdXRwdXRzIHRoZSB0cmFuc21pdHRlcidzIEFuIGFuZCBB a3N2IHZhbHVlcyB0byB0aGUgcmVjZWl2ZXIuICovCj4gKwlpbnQgKCp3cml0ZV9hbl9ha3N2KShz dHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwgdTggKmFuKTsKPiArCj4g KwkvKiBSZWFkcyB0aGUgcmVjZWl2ZXIncyBrZXkgc2VsZWN0aW9uIHZlY3RvciAqLwo+ICsJaW50 ICgqcmVhZF9ia3N2KShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwg dTggKmJrc3YpOwo+ICsKPiArCS8qCj4gKwkgKiBSZWFkcyBCSU5GTyBmcm9tIERQIHJlY2VpdmVy cyBhbmQgQlNUQVRVUyBmcm9tIEhETUkgcmVjZWl2ZXJzLiBUaGUKPiArCSAqIGRlZmluaXRpb25z IGFyZSB0aGUgc2FtZSBpbiB0aGUgcmVzcGVjdGl2ZSBzcGVjcywgYnV0IHRoZSBuYW1lcyBhcmUK PiArCSAqIGRpZmZlcmVudC4gQ2FsbCBpdCBCU1RBVFVTIHNpbmNlIHRoYXQncyB0aGUgbmFtZSB0 aGUgSERNSSBzcGVjCj4gKwkgKiB1c2VzIGFuZCBpdCB3YXMgdGhlcmUgZmlyc3QuCj4gKwkgKi8K PiArCWludCAoKnJlYWRfYnN0YXR1cykoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxf ZGlnX3BvcnQsCj4gKwkJCSAgICB1OCAqYnN0YXR1cyk7Cj4gKwo+ICsJLyogRGV0ZXJtaW5lcyB3 aGV0aGVyIGEgcmVwZWF0ZXIgaXMgcHJlc2VudCBkb3duc3RyZWFtICovCj4gKwlpbnQgKCpyZXBl YXRlcl9wcmVzZW50KShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwK PiArCQkJCWJvb2wgKnJlcGVhdGVyX3ByZXNlbnQpOwo+ICsKPiArCS8qIFJlYWRzIHRoZSByZWNl aXZlcidzIFJpJyB2YWx1ZSAqLwo+ICsJaW50ICgqcmVhZF9yaV9wcmltZSkoc3RydWN0IGludGVs X2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsIHU4ICpyaSk7Cj4gKwo+ICsJLyogRGV0ZXJt aW5lcyBpZiB0aGUgcmVjZWl2ZXIncyBLU1YgRklGTyBpcyByZWFkeSBmb3IgY29uc3VtcHRpb24g Ki8KPiArCWludCAoKnJlYWRfa3N2X3JlYWR5KShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpp bnRlbF9kaWdfcG9ydCwKPiArCQkJICAgICAgYm9vbCAqa3N2X3JlYWR5KTsKPiArCj4gKwkvKiBS ZWFkcyB0aGUga3N2IGZpZm8gZm9yIG51bV9kb3duc3RyZWFtIGRldmljZXMgKi8KPiArCWludCAo KnJlYWRfa3N2X2ZpZm8pKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0 LAo+ICsJCQkgICAgIGludCBudW1fZG93bnN0cmVhbSwgdTggKmtzdl9maWZvKTsKPiArCj4gKwkv KiBSZWFkcyBhIDMyLWJpdCBwYXJ0IG9mIFYnIGZyb20gdGhlIHJlY2VpdmVyICovCj4gKwlpbnQg KCpyZWFkX3ZfcHJpbWVfcGFydCkoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGln X3BvcnQsCj4gKwkJCQkgaW50IGksIHUzMiAqcGFydCk7Cj4gKwo+ICsJLyogRW5hYmxlcyBIRENQ IHNpZ25hbGxpbmcgb24gdGhlIHBvcnQgKi8KPiArCWludCAoKnRvZ2dsZV9zaWduYWxsaW5nKShz dHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKPiArCQkJCSBib29sIGVu YWJsZSk7Cj4gKwo+ICsJLyogRW5zdXJlcyB0aGUgbGluayBpcyBzdGlsbCBwcm90ZWN0ZWQgKi8K PiArCWJvb2wgKCpjaGVja19saW5rKShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9k aWdfcG9ydCk7Cj4gK307Cj4gKwo+ICAgc3RydWN0IGludGVsX2Nvbm5lY3RvciB7Cj4gICAJc3Ry dWN0IGRybV9jb25uZWN0b3IgYmFzZTsKPiAgIAkvKgo+IEBAIC0zMzIsNiArNDAyLDEyIEBAIHN0 cnVjdCBpbnRlbF9jb25uZWN0b3Igewo+ICAgCj4gICAJLyogV29yayBzdHJ1Y3QgdG8gc2NoZWR1 bGUgYSB1ZXZlbnQgb24gbGluayB0cmFpbiBmYWlsdXJlICovCj4gICAJc3RydWN0IHdvcmtfc3Ry dWN0IG1vZGVzZXRfcmV0cnlfd29yazsKPiArCj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfaGRjcF9z aGltICpoZGNwX3NoaW07Cj4gKwlzdHJ1Y3QgbXV0ZXggaGRjcF9tdXRleDsKPiArCXVpbnQ2NF90 IGhkY3BfdmFsdWU7IC8qIHByb3RlY3RlZCBieSBoZGNwX211dGV4ICovCj4gKwlzdHJ1Y3QgZGVs YXllZF93b3JrIGhkY3BfY2hlY2tfd29yazsKPiArCXN0cnVjdCB3b3JrX3N0cnVjdCBoZGNwX3By b3Bfd29yazsKPiAgIH07Cj4gICAKPiAgIHN0cnVjdCBpbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9z dGF0ZSB7Cj4gQEAgLTE3NjMsNiArMTgzOSwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxf YmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbgo+ ICAgfQo+ICAgI2VuZGlmIC8qIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFICovCj4gICAK PiArLyogaW50ZWxfaGRjcC5jICovCj4gK3ZvaWQgaW50ZWxfaGRjcF9hdG9taWNfY2hlY2soc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqb2xkX3N0YXRlLAo+ICsJCQkgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0 YXRlICpuZXdfc3RhdGUpOwo+ICt2b2lkIGludGVsX2hkY3BfYXRvbWljX3ByZV9jb21taXQoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJICAgICAgICAgIHN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICpvbGRfc3RhdGUsCj4gKwkJCSAgICAgICAgICBzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9zdGF0ZSAqbmV3X3N0YXRlKTsKPiArdm9pZCBpbnRlbF9oZGNwX2F0b21pY19jb21t aXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJICAgICAgc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKm5ld19zdGF0ZSk7Cj4gK2ludCBpbnRlbF9oZGNwX2NoZWNrX2xp bmsoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiArdm9pZCBpbnRlbF9oZGNw X2NoZWNrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKPiArdm9pZCBpbnRlbF9oZGNw X3Byb3Bfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwo+ICAgCj4gICAvKiBpbnRlbF9w c3IuYyAqLwo+ICAgdm9pZCBpbnRlbF9wc3JfZW5hYmxlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMDAwMDAwLi40ZWVmOTUwNTQxMGYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRjcC5jCj4gQEAgLTAsMCArMSw3MzEgQEAKPiAr LyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE3IEdvb2dsZSwgSW5jLgo+ICsgKgo+ICsgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u Cj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KPiArICogYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICog VEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SCj4gKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+ICsgKiBBUklTSU5HIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiAr ICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ ICsgKiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KPiArICovCj4gKwo+ICsjaW5j bHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1faGRjcC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvaTJjLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KPiArCj4gKyNpbmNs dWRlICJpbnRlbF9kcnYuaCIKPiArI2luY2x1ZGUgImk5MTVfcmVnLmgiCj4gKwo+ICsjZGVmaW5l IEtFWV9MT0FEX1RSSUVTCTUKPiArCj4gK3N0YXRpYyBpbnQgaW50ZWxfaGRjcF9wb2xsX2tzdl9m aWZvKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAo+ICsJCQkJICAg IGNvbnN0IHN0cnVjdCBpbnRlbF9oZGNwX3NoaW0gKnNoaW0pCj4gK3sKPiArCWludCByZXQsIHJl YWRfcmV0Owo+ICsJYm9vbCBrc3ZfcmVhZHk7Cj4gKwo+ICsJcmV0ID0gX193YWl0X2ZvcihyZWFk X3JldCA9IHNoaW0tPnJlYWRfa3N2X3JlYWR5KGludGVsX2RpZ19wb3J0LAo+ICsJCQkJCQkJICZr c3ZfcmVhZHkpLAo+ICsJCQkgcmVhZF9yZXQgfHwga3N2X3JlYWR5LCAxNTAwICogMTAwMCwgMTAw MCwgMTAwICogMTAwMCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwlpZiAocmVh ZF9yZXQpCj4gKwkJcmV0dXJuIHJlYWRfcmV0Owo+ICsJaWYgKCFrc3ZfcmVhZHkpCj4gKwkJcmV0 dXJuIC1FVElNRURPVVQ7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGludGVsX2hkY3BfY2xlYXJfa2V5cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gK3sKPiArCUk5MTVfV1JJVEUoU0tMX0hEQ1BfS0VZX0NPTkYsIFNLTF9IRENQX0NMRUFSX0tF WVNfVFJJR0dFUik7Cj4gKwlJOTE1X1dSSVRFKFNLTF9IRENQX0tFWV9TVEFUVVMsCj4gKwkJICAg U0tMX0hEQ1BfS0VZX0xPQURfRE9ORSB8IFNLTF9IRENQX0tFWV9MT0FEX1NUQVRVUyB8Cj4gKwkJ ICAgU0tMX0hEQ1BfRlVTRV9JTl9QUk9HUkVTUyB8IFNLTF9IRENQX0ZVU0VfRVJST1IgfAo+ICsJ CSAgIFNLTF9IRENQX0ZVU0VfRE9ORSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaW50ZWxfaGRj cF9sb2FkX2tleXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlp bnQgcmV0Owo+ICsJdTMyIHZhbDsKPiArCj4gKwkvKiBJbml0aWF0ZSBsb2FkaW5nIHRoZSBIRENQ IGtleSBmcm9tIGZ1c2VzICovCj4gKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+cGN1X2xvY2spOwo+ ICsJcmV0ID0gc2FuZHlicmlkZ2VfcGNvZGVfd3JpdGUoZGV2X3ByaXYsIFNLTF9QQ09ERV9MT0FE X0hEQ1BfS0VZUywgMSk7Cj4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT5wY3VfbG9jayk7Cj4g KwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhdGUgSERDUCBrZXkg bG9hZCAoJWQpXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyogV2Fp dCBmb3IgdGhlIGtleXMgdG8gbG9hZCAoNTAwdXMpICovCj4gKwlyZXQgPSBfX2ludGVsX3dhaXRf Zm9yX3JlZ2lzdGVyKGRldl9wcml2LCBTS0xfSERDUF9LRVlfU1RBVFVTLAo+ICsJCQkJCVNLTF9I RENQX0tFWV9MT0FEX0RPTkUsCj4gKwkJCQkJU0tMX0hEQ1BfS0VZX0xPQURfRE9ORSwKPiArCQkJ CQkxMCwgMSwgJnZhbCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwllbHNlIGlm ICghKHZhbCAmIFNLTF9IRENQX0tFWV9MT0FEX1NUQVRVUykpCj4gKwkJcmV0dXJuIC1FTlhJTzsK PiArCj4gKwkvKiBTZW5kIEFrc3Ygb3ZlciB0byBQQ0ggZGlzcGxheSBmb3IgdXNlIGluIGF1dGhl bnRpY2F0aW9uICovCj4gKwlJOTE1X1dSSVRFKFNLTF9IRENQX0tFWV9DT05GLCBTS0xfSERDUF9B S1NWX1NFTkRfVFJJR0dFUik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qIFJldHVy bnMgdXBkYXRlZCBTSEEtMSBpbmRleCAqLwo+ICtzdGF0aWMgaW50IGludGVsX3dyaXRlX3NoYV90 ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHNoYV90ZXh0KQo+ICt7 Cj4gKwlJOTE1X1dSSVRFKFNLTF9IRENQX1NIQV9URVhULCBzaGFfdGV4dCk7Cj4gKwlpZiAoaW50 ZWxfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsIFNLTF9IRENQX1JFUF9DVEwsCj4gKwkJCQkg ICAgU0tMX0hEQ1BfU0hBMV9SRUFEWSwKPiArCQkJCSAgICBTS0xfSERDUF9TSEExX1JFQURZLCAx KSkgewo+ICsJCURSTV9FUlJPUigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFNIQTEgcmVhZHlcbiIp Owo+ICsJCXJldHVybiAtRVRJTUVET1VUOwo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYwo+ICt1MzIgaW50ZWxfaGRjcF9nZXRfcmVwZWF0ZXJfY3RsKHN0cnVjdCBpbnRlbF9k aWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0KQo+ICt7Cj4gKwllbnVtIHBvcnQgcG9ydCA9IGlu dGVsX2RpZ19wb3J0LT5iYXNlLnBvcnQ7Cj4gKwlzd2l0Y2gocG9ydCkgewo+ICsJY2FzZSBQT1JU X0E6Cj4gKwkJcmV0dXJuIFNLTF9IRENQX0RESUFfUkVQX1BSRVNFTlQgfCBTS0xfSERDUF9ERElB X1NIQTFfTTA7Cj4gKwljYXNlIFBPUlRfQjoKPiArCQlyZXR1cm4gU0tMX0hEQ1BfRERJQl9SRVBf UFJFU0VOVCB8IFNLTF9IRENQX0RESUJfU0hBMV9NMDsKPiArCWNhc2UgUE9SVF9DOgo+ICsJCXJl dHVybiBTS0xfSERDUF9ERElDX1JFUF9QUkVTRU5UIHwgU0tMX0hEQ1BfRERJQ19TSEExX00wOwo+ ICsJY2FzZSBQT1JUX0Q6Cj4gKwkJcmV0dXJuIFNLTF9IRENQX0RESURfUkVQX1BSRVNFTlQgfCBT S0xfSERDUF9ERElEX1NIQTFfTTA7Cj4gKwljYXNlIFBPUlRfRToKPiArCQlyZXR1cm4gU0tMX0hE Q1BfRERJRV9SRVBfUFJFU0VOVCB8IFNLTF9IRENQX0RESUVfU0hBMV9NMDsKPiArCWRlZmF1bHQ6 Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwlEUk1fRVJST1IoIlVua25vd24gcG9ydCAlZFxuIiwgcG9y dCk7Cj4gKwlyZXR1cm4gLUVJTlZBTDsKPiArfQo+ICsKPiArLyogSW1wbGVtZW50cyBQYXJ0IDIg b2YgdGhlIEhEQ1AgYXV0aG9yaXphdGlvbiBwcm9jZWR1cmUgKi8KPiArc3RhdGljCj4gK2ludCBp bnRlbF9oZGNwX2F1dGhfZG93bnN0cmVhbShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRl bF9kaWdfcG9ydCwKPiArCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9oZGNwX3NoaW0gKnNo aW0pCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKPiArCXUzMiB2 cHJpbWUsIHNoYV90ZXh0LCBzaGFfbGVmdG92ZXJzLCByZXBfY3RsOwo+ICsJdTggYnN0YXR1c1sy XSwgbnVtX2Rvd25zdHJlYW0sICprc3ZfZmlmbzsKPiArCWludCByZXQsIGksIGosIHNoYV9pZHg7 Cj4gKwo+ICsJZGV2X3ByaXYgPSBpbnRlbF9kaWdfcG9ydC0+YmFzZS5iYXNlLmRldi0+ZGV2X3By aXZhdGU7Cj4gKwo+ICsJcmV0ID0gc2hpbS0+cmVhZF9ic3RhdHVzKGludGVsX2RpZ19wb3J0LCBi c3RhdHVzKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwkvKiBJZiB0aGVy ZSBhcmUgbm8gZG93bnN0cmVhbSBkZXZpY2VzLCB3ZSdyZSBhbGwgZG9uZS4gKi8KPiArCW51bV9k b3duc3RyZWFtID0gRFJNX0hEQ1BfTlVNX0RPV05TVFJFQU0oYnN0YXR1c1swXSk7Cj4gKwlpZiAo bnVtX2Rvd25zdHJlYW0gPT0gMCkgewo+ICsJCURSTV9JTkZPKCJIRENQIGlzIGVuYWJsZWQgKG5v IGRvd25zdHJlYW0gZGV2aWNlcylcbiIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCS8q IFBvbGwgZm9yIGtzdiBsaXN0IHJlYWR5IChzcGVjIHNheXMgbWF4IHRpbWUgYWxsb3dlZCBpcyA1 cykgKi8KPiArCXJldCA9IGludGVsX2hkY3BfcG9sbF9rc3ZfZmlmbyhpbnRlbF9kaWdfcG9ydCwg c2hpbSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJLU1YgbGlzdCBmYWlsZWQgdG8g YmVjb21lIHJlYWR5ICglZClcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4g Kwlrc3ZfZmlmbyA9IGt6YWxsb2MobnVtX2Rvd25zdHJlYW0gKiBEUk1fSERDUF9LU1ZfTEVOLCBH RlBfS0VSTkVMKTsKPiArCWlmICgha3N2X2ZpZm8pCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ ICsJcmV0ID0gc2hpbS0+cmVhZF9rc3ZfZmlmbyhpbnRlbF9kaWdfcG9ydCwgbnVtX2Rvd25zdHJl YW0sIGtzdl9maWZvKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwkvKiBQ cm9jZXNzIFYnIHZhbHVlcyBmcm9tIHRoZSByZWNlaXZlciAqLwo+ICsJZm9yIChpID0gMDsgaSA8 IERSTV9IRENQX1ZfUFJJTUVfTlVNX1BBUlRTOyBpKyspIHsKPiArCQlyZXQgPSBzaGltLT5yZWFk X3ZfcHJpbWVfcGFydChpbnRlbF9kaWdfcG9ydCwgaSwgJnZwcmltZSk7Cj4gKwkJaWYgKHJldCkK PiArCQkJcmV0dXJuIHJldDsKPiArCQlJOTE1X1dSSVRFKFNLTF9IRENQX1NIQV9WX1BSSU1FKGkp LCB2cHJpbWUpOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBXZSBuZWVkIHRvIHdyaXRlIHRoZSBj b25jYXRlbmF0aW9uIG9mIGFsbCBkZXZpY2UgS1NWcywgQklORk8gKERQKSB8fAo+ICsJICogQlNU QVRVUyAoSERNSSksIGFuZCBNMCAod2hpY2ggaXMgYWRkZWQgdmlhIEhEQ1BfUkVQX0NUTCkuIFRo aXMgYnl0ZQo+ICsJICogc3RyZWFtIGlzIHdyaXR0ZW4gdmlhIHRoZSBIRENQX1NIQV9URVhUIHJl Z2lzdGVyIGluIDMyLWJpdAo+ICsJICogaW5jcmVtZW50cy4gRXZlcnkgNjQgYnl0ZXMsIHdlIG5l ZWQgdG8gd3JpdGUgSERDUF9SRVBfQ1RMIGFnYWluLiBUaGlzCj4gKwkgKiBpbmRleCB3aWxsIGtl ZXAgdHJhY2sgb2Ygb3VyIHByb2dyZXNzIHRocm91Z2ggdGhlIDY0IGJ5dGVzIGFzIHdlbGwgYXMK PiArCSAqIGhlbHBpbmcgdXMgd29yayB0aGUgNDAtYml0IEtTVnMgdGhyb3VnaCBvdXIgMzItYml0 IHJlZ2lzdGVyLgo+ICsJICoKPiArCSAqIE5PVEU6IGRhdGEgcGFzc2VkIHZpYSBIRENQX1NIQV9U RVhUIHNob3VsZCBiZSBiaWctZW5kaWFuCj4gKwkgKi8KPiArCXNoYV9pZHggPSAwOwo+ICsJc2hh X3RleHQgPSAwOwo+ICsJc2hhX2xlZnRvdmVycyA9IDA7Cj4gKwlyZXBfY3RsID0gaW50ZWxfaGRj cF9nZXRfcmVwZWF0ZXJfY3RsKGludGVsX2RpZ19wb3J0KTsKPiArCUk5MTVfV1JJVEUoU0tMX0hE Q1BfUkVQX0NUTCwgcmVwX2N0bCB8IFNLTF9IRENQX1NIQTFfVEVYVF8zMik7Cj4gKwlmb3IgKGkg PSAwOyBpIDwgbnVtX2Rvd25zdHJlYW07IGkrKykgewo+ICsJCXVuc2lnbmVkIHNoYV9lbXB0eTsK PiArCQl1OCAqa3N2ID0gJmtzdl9maWZvW2kgKiBEUk1fSERDUF9LU1ZfTEVOXTsKPiArCj4gKwkJ LyogRmlsbCB1cCB0aGUgZW1wdHkgc2xvdHMgaW4gc2hhX3RleHQgYW5kIHdyaXRlIGl0IG91dCAq Lwo+ICsJCXNoYV9lbXB0eSA9IHNpemVvZihzaGFfdGV4dCkgLSBzaGFfbGVmdG92ZXJzOwo+ICsJ CWZvciAoaiA9IDA7IGogPCBzaGFfZW1wdHk7IGorKykKPiArCQkJc2hhX3RleHQgfD0ga3N2W2pd IDw8ICgoc2l6ZW9mKHNoYV90ZXh0KSAtIGogLSAxKSAqIDgpOwo+ICsKPiArCQlyZXQgPSBpbnRl bF93cml0ZV9zaGFfdGV4dChkZXZfcHJpdiwgc2hhX3RleHQpOwo+ICsJCWlmIChyZXQgPCAwKQo+ ICsJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQkvKiBQcm9ncmFtbWluZyBndWlkZSB3cml0ZXMgdGhp cyBldmVyeSA2NCBieXRlcyAqLwo+ICsJCXNoYV9pZHggKz0gc2l6ZW9mKHNoYV90ZXh0KTsKPiAr CQlpZiAoIShzaGFfaWR4ICUgNjQpKQo+ICsJCQlJOTE1X1dSSVRFKFNLTF9IRENQX1JFUF9DVEws Cj4gKwkJCQkgICByZXBfY3RsIHwgU0tMX0hEQ1BfU0hBMV9URVhUXzMyKTsKPiArCj4gKwkJLyog U3RvcmUgdGhlIGxlZnRvdmVyIGJ5dGVzIGZyb20gdGhlIGtzdiBpbiBzaGFfdGV4dCAqLwo+ICsJ CXNoYV9sZWZ0b3ZlcnMgPSBEUk1fSERDUF9LU1ZfTEVOIC0gc2hhX2VtcHR5Owo+ICsJCXNoYV90 ZXh0ID0gMDsKPiArCQlmb3IgKGogPSAwOyBqIDwgc2hhX2xlZnRvdmVyczsgaisrKQo+ICsJCQlz aGFfdGV4dCB8PSBrc3Zbc2hhX2VtcHR5ICsgal0gPDwKPiArCQkJCQkoKHNpemVvZihzaGFfdGV4 dCkgLSBqIC0gMSkgKiA4KTsKPiArCj4gKwkJLyoKPiArCQkgKiBJZiB3ZSBzdGlsbCBoYXZlIHJv b20gaW4gc2hhX3RleHQgZm9yIG1vcmUgZGF0YSwgY29udGludWUuCj4gKwkJICogT3RoZXJ3aXNl LCB3cml0ZSBpdCBvdXQgaW1tZWRpYXRlbHkuCj4gKwkJICovCj4gKwkJaWYgKHNpemVvZihzaGFf dGV4dCkgPiBzaGFfbGVmdG92ZXJzKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJcmV0ID0gaW50 ZWxfd3JpdGVfc2hhX3RleHQoZGV2X3ByaXYsIHNoYV90ZXh0KTsKPiArCQlpZiAocmV0IDwgMCkK PiArCQkJcmV0dXJuIHJldDsKPiArCQlzaGFfbGVmdG92ZXJzID0gMDsKPiArCQlzaGFfdGV4dCA9 IDA7Cj4gKwkJc2hhX2lkeCArPSBzaXplb2Yoc2hhX3RleHQpOwo+ICsJfQo+ICsKPiArCS8qCj4g KwkgKiBXZSBuZWVkIHRvIHdyaXRlIEJJTkZPL0JTVEFUVVMsIGFuZCBNMCBub3cuIERlcGVuZGlu ZyBvbiBob3cgbWFueQo+ICsJICogYnl0ZXMgYXJlIGxlZnRvdmVyIGZyb20gdGhlIGxhc3Qga3N2 LCB3ZSBtaWdodCBiZSBhYmxlIHRvIGZpdCB0aGVtCj4gKwkgKiBhbGwgaW4gc2hhX3RleHQgKGZp cnN0IDIgY2FzZXMpLCBvciB3ZSBtaWdodCBuZWVkIHRvIHNwbGl0IHRoZW0gdXAKPiArCSAqIGlu dG8gMiB3cml0ZXMgKGxhc3QgMiBjYXNlcykuCj4gKwkgKi8KPiArCWlmIChzaGFfbGVmdG92ZXJz ID09IDApIHsKPiArCQkvKiBXcml0ZSAxNiBiaXRzIG9mIHRleHQsIDE2IGJpdHMgb2YgTTAgKi8K PiArCQlJOTE1X1dSSVRFKFNLTF9IRENQX1JFUF9DVEwsIHJlcF9jdGwgfCBTS0xfSERDUF9TSEEx X1RFWFRfMTYpOwo+ICsJCXJldCA9IGludGVsX3dyaXRlX3NoYV90ZXh0KGRldl9wcml2LAo+ICsJ CQkJCSAgIGJzdGF0dXNbMF0gPDwgOCB8IGJzdGF0dXNbMV0pOwo+ICsJCWlmIChyZXQgPCAwKQo+ ICsJCQlyZXR1cm4gcmV0Owo+ICsJCXNoYV9pZHggKz0gc2l6ZW9mKHNoYV90ZXh0KTsKPiArCj4g KwkJLyogV3JpdGUgMzIgYml0cyBvZiBNMCAqLwo+ICsJCUk5MTVfV1JJVEUoU0tMX0hEQ1BfUkVQ X0NUTCwgcmVwX2N0bCB8IFNLTF9IRENQX1NIQTFfVEVYVF8wKTsKPiArCQlyZXQgPSBpbnRlbF93 cml0ZV9zaGFfdGV4dChkZXZfcHJpdiwgMCk7Cj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCXJldHVy biByZXQ7Cj4gKwkJc2hhX2lkeCArPSBzaXplb2Yoc2hhX3RleHQpOwo+ICsKPiArCQkvKiBXcml0 ZSAxNiBiaXRzIG9mIE0wICovCj4gKwkJSTkxNV9XUklURShTS0xfSERDUF9SRVBfQ1RMLCByZXBf Y3RsIHwgU0tMX0hEQ1BfU0hBMV9URVhUXzE2KTsKPiArCQlyZXQgPSBpbnRlbF93cml0ZV9zaGFf dGV4dChkZXZfcHJpdiwgMCk7Cj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCXJldHVybiByZXQ7Cj4g KwkJc2hhX2lkeCArPSBzaXplb2Yoc2hhX3RleHQpOwo+ICsKPiArCX0gZWxzZSBpZiAoc2hhX2xl ZnRvdmVycyA9PSAxKSB7Cj4gKwkJLyogV3JpdGUgMjQgYml0cyBvZiB0ZXh0LCA4IGJpdHMgb2Yg TTAgKi8KPiArCQlJOTE1X1dSSVRFKFNLTF9IRENQX1JFUF9DVEwsIHJlcF9jdGwgfCBTS0xfSERD UF9TSEExX1RFWFRfMjQpOwo+ICsJCXNoYV90ZXh0IHw9IGJzdGF0dXNbMF0gPDwgMTYgfCBic3Rh dHVzWzFdIDw8IDg7Cj4gKwkJLyogT25seSAyNC1iaXRzIG9mIGRhdGEsIG11c3QgYmUgaW4gdGhl IExTQiAqLwo+ICsJCXNoYV90ZXh0ID0gKHNoYV90ZXh0ICYgMHhmZmZmZmYwMCkgPj4gODsKPiAr CQlyZXQgPSBpbnRlbF93cml0ZV9zaGFfdGV4dChkZXZfcHJpdiwgc2hhX3RleHQpOwo+ICsJCWlm IChyZXQgPCAwKQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCXNoYV9pZHggKz0gc2l6ZW9mKHNoYV90 ZXh0KTsKPiArCj4gKwkJLyogV3JpdGUgMzIgYml0cyBvZiBNMCAqLwo+ICsJCUk5MTVfV1JJVEUo U0tMX0hEQ1BfUkVQX0NUTCwgcmVwX2N0bCB8IFNLTF9IRENQX1NIQTFfVEVYVF8wKTsKPiArCQly ZXQgPSBpbnRlbF93cml0ZV9zaGFfdGV4dChkZXZfcHJpdiwgMCk7Cj4gKwkJaWYgKHJldCA8IDAp Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJc2hhX2lkeCArPSBzaXplb2Yoc2hhX3RleHQpOwo+ICsK PiArCQkvKiBXcml0ZSAyNCBiaXRzIG9mIE0wICovCj4gKwkJSTkxNV9XUklURShTS0xfSERDUF9S RVBfQ1RMLCByZXBfY3RsIHwgU0tMX0hEQ1BfU0hBMV9URVhUXzgpOwo+ICsJCXJldCA9IGludGVs X3dyaXRlX3NoYV90ZXh0KGRldl9wcml2LCAwKTsKPiArCQlpZiAocmV0IDwgMCkKPiArCQkJcmV0 dXJuIHJldDsKPiArCQlzaGFfaWR4ICs9IHNpemVvZihzaGFfdGV4dCk7Cj4gKwo+ICsJfSBlbHNl IGlmIChzaGFfbGVmdG92ZXJzID09IDIpIHsKPiArCQkvKiBXcml0ZSAzMiBiaXRzIG9mIHRleHQg Ki8KPiArCQlJOTE1X1dSSVRFKFNLTF9IRENQX1JFUF9DVEwsIHJlcF9jdGwgfCBTS0xfSERDUF9T SEExX1RFWFRfMzIpOwo+ICsJCXNoYV90ZXh0IHw9IGJzdGF0dXNbMF0gPDwgMjQgfCBic3RhdHVz WzFdIDw8IDE2Owo+ICsJCXJldCA9IGludGVsX3dyaXRlX3NoYV90ZXh0KGRldl9wcml2LCBzaGFf dGV4dCk7Cj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJc2hhX2lkeCAr PSBzaXplb2Yoc2hhX3RleHQpOwo+ICsKPiArCQkvKiBXcml0ZSA2NCBiaXRzIG9mIE0wICovCj4g KwkJSTkxNV9XUklURShTS0xfSERDUF9SRVBfQ1RMLCByZXBfY3RsIHwgU0tMX0hEQ1BfU0hBMV9U RVhUXzApOwo+ICsJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKPiArCQkJcmV0ID0gaW50ZWxf d3JpdGVfc2hhX3RleHQoZGV2X3ByaXYsIDApOwo+ICsJCQlpZiAocmV0IDwgMCkKPiArCQkJCXJl dHVybiByZXQ7Cj4gKwkJCXNoYV9pZHggKz0gc2l6ZW9mKHNoYV90ZXh0KTsKPiArCQl9Cj4gKwl9 IGVsc2UgaWYgKHNoYV9sZWZ0b3ZlcnMgPT0gMykgewo+ICsJCS8qIFdyaXRlIDMyIGJpdHMgb2Yg dGV4dCAqLwo+ICsJCUk5MTVfV1JJVEUoU0tMX0hEQ1BfUkVQX0NUTCwgcmVwX2N0bCB8IFNLTF9I RENQX1NIQTFfVEVYVF8zMik7Cj4gKwkJc2hhX3RleHQgfD0gYnN0YXR1c1swXSA8PCAyNDsKPiAr CQlyZXQgPSBpbnRlbF93cml0ZV9zaGFfdGV4dChkZXZfcHJpdiwgc2hhX3RleHQpOwo+ICsJCWlm IChyZXQgPCAwKQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCXNoYV9pZHggKz0gc2l6ZW9mKHNoYV90 ZXh0KTsKPiArCj4gKwkJLyogV3JpdGUgOCBiaXRzIG9mIHRleHQsIDI0IGJpdHMgb2YgTTAgKi8K PiArCQlJOTE1X1dSSVRFKFNLTF9IRENQX1JFUF9DVEwsIHJlcF9jdGwgfCBTS0xfSERDUF9TSEEx X1RFWFRfOCk7Cj4gKwkJcmV0ID0gaW50ZWxfd3JpdGVfc2hhX3RleHQoZGV2X3ByaXYsIGJzdGF0 dXNbMV0pOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCXNoYV9pZHgg Kz0gc2l6ZW9mKHNoYV90ZXh0KTsKPiArCj4gKwkJLyogV3JpdGUgMzIgYml0cyBvZiBNMCAqLwo+ ICsJCUk5MTVfV1JJVEUoU0tMX0hEQ1BfUkVQX0NUTCwgcmVwX2N0bCB8IFNLTF9IRENQX1NIQTFf VEVYVF8wKTsKPiArCQlyZXQgPSBpbnRlbF93cml0ZV9zaGFfdGV4dChkZXZfcHJpdiwgMCk7Cj4g KwkJaWYgKHJldCA8IDApCj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJc2hhX2lkeCArPSBzaXplb2Yo c2hhX3RleHQpOwo+ICsKPiArCQkvKiBXcml0ZSA4IGJpdHMgb2YgTTAgKi8KPiArCQlJOTE1X1dS SVRFKFNLTF9IRENQX1JFUF9DVEwsIHJlcF9jdGwgfCBTS0xfSERDUF9TSEExX1RFWFRfMjQpOwo+ ICsJCXJldCA9IGludGVsX3dyaXRlX3NoYV90ZXh0KGRldl9wcml2LCAwKTsKPiArCQlpZiAocmV0 IDwgMCkKPiArCQkJcmV0dXJuIHJldDsKPiArCQlzaGFfaWR4ICs9IHNpemVvZihzaGFfdGV4dCk7 Cj4gKwl9IGVsc2Ugewo+ICsJCURSTV9FUlJPUigiSW52YWxpZCBudW1iZXIgb2YgbGVmdG92ZXJz ICVkXG4iLCBzaGFfbGVmdG92ZXJzKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4g KwlJOTE1X1dSSVRFKFNLTF9IRENQX1JFUF9DVEwsIHJlcF9jdGwgfCBTS0xfSERDUF9TSEExX1RF WFRfMzIpOwo+ICsJLyogRmlsbCB1cCB0byA2NC00IGJ5dGVzIHdpdGggemVyb3MgKGxlYXZlIHRo ZSBsYXN0IHdyaXRlIGZvciBsZW5ndGgpICovCj4gKwl3aGlsZSAoKHNoYV9pZHggJSA2NCkgPCAo NjQgLSBzaXplb2Yoc2hhX3RleHQpKSkgewo+ICsJCXJldCA9IGludGVsX3dyaXRlX3NoYV90ZXh0 KGRldl9wcml2LCAwKTsKPiArCQlpZiAocmV0IDwgMCkKPiArCQkJcmV0dXJuIHJldDsKPiArCQlz aGFfaWR4ICs9IHNpemVvZihzaGFfdGV4dCk7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIExhc3Qg d3JpdGUgZ2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBjb25jYXRlbmF0aW9uIGluIGJpdHMuIFRoYXQg aXM6Cj4gKwkgKiAgLSA1IGJ5dGVzIHBlciBkZXZpY2UKPiArCSAqICAtIDEwIGJ5dGVzIGZvciBC SU5GTy9CU1RBVFVTKDIpLCBNMCg4KQo+ICsJICovCj4gKwlzaGFfdGV4dCA9IChudW1fZG93bnN0 cmVhbSAqIDUgKyAxMCkgKiA4Owo+ICsJcmV0ID0gaW50ZWxfd3JpdGVfc2hhX3RleHQoZGV2X3By aXYsIHNoYV90ZXh0KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJ LyogVGVsbCB0aGUgSFcgd2UncmUgZG9uZSB3aXRoIHRoZSBoYXNoIGFuZCB3YWl0IGZvciBpdCB0 byBBQ0sgKi8KPiArCUk5MTVfV1JJVEUoU0tMX0hEQ1BfUkVQX0NUTCwgcmVwX2N0bCB8IFNLTF9I RENQX1NIQTFfQ09NUExFVEVfSEFTSCk7Cj4gKwlpZiAoaW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXIo ZGV2X3ByaXYsIFNLTF9IRENQX1JFUF9DVEwsCj4gKwkJCQkgICAgU0tMX0hEQ1BfU0hBMV9DT01Q TEVURSwKPiArCQkJCSAgICBTS0xfSERDUF9TSEExX0NPTVBMRVRFLCAxKSkgewo+ICsJCURSTV9F UlJPUigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFNIQTEgY29tcGxldGVcbiIpOwo+ICsJCXJldHVy biAtRVRJTUVET1VUOwo+ICsJfQo+ICsJaWYgKCEoSTkxNV9SRUFEKFNLTF9IRENQX1JFUF9DVEwp ICYgU0tMX0hEQ1BfU0hBMV9WX01BVENIKSkgewo+ICsJCURSTV9FUlJPUigiU0hBLTEgbWlzbWF0 Y2gsIEhEQ1AgZmFpbGVkXG4iKTsKPiArCQlyZXR1cm4gLUVOWElPOwo+ICsJfQo+ICsKPiArCURS TV9JTkZPKCJIRENQIGlzIGVuYWJsZWQgKCVkIGRvd25zdHJlYW0gZGV2aWNlcylcbiIsIG51bV9k b3duc3RyZWFtKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKiBJbXBsZW1lbnRzIFBhcnQg MSBvZiB0aGUgSERDUCBhdXRob3JpemF0aW9uIHByb2NlZHVyZSAqLwo+ICtzdGF0aWMgaW50IGlu dGVsX2hkY3BfYXV0aChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwK PiArCQkJICAgY29uc3Qgc3RydWN0IGludGVsX2hkY3Bfc2hpbSAqc2hpbSkKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2Owo+ICsJZW51bSBwb3J0IHBvcnQ7Cj4gKwl1 bnNpZ25lZCBsb25nIHIwX3ByaW1lX2dlbl9zdGFydDsKPiArCWludCByZXQsIGk7Cj4gKwl1bmlv biB7Cj4gKwkJdTMyIHJlZ1syXTsKPiArCQl1OCBzaGltW0RSTV9IRENQX0FOX0xFTl07Cj4gKwl9 IGFuOwo+ICsJdW5pb24gewo+ICsJCXUzMiByZWdbMl07Cj4gKwkJdTggc2hpbVtEUk1fSERDUF9L U1ZfTEVOXTsKPiArCX0gYmtzdjsKPiArCXVuaW9uIHsKPiArCQl1MzIgcmVnOwo+ICsJCXU4IHNo aW1bRFJNX0hEQ1BfUklfTEVOXTsKPiArCX0gcmk7Cj4gKwlib29sIHJlcGVhdGVyX3ByZXNlbnQ7 Cj4gKwo+ICsJZGV2X3ByaXYgPSBpbnRlbF9kaWdfcG9ydC0+YmFzZS5iYXNlLmRldi0+ZGV2X3By aXZhdGU7Cj4gKwo+ICsJcG9ydCA9IGludGVsX2RpZ19wb3J0LT5iYXNlLnBvcnQ7Cj4gKwo+ICsJ LyogSW5pdGlhbGl6ZSBBbiB3aXRoIDIgcmFuZG9tIHZhbHVlcyBhbmQgYWNxdWlyZSBpdCAqLwo+ ICsJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKPiArCQlJOTE1X1dSSVRFKFNLTF9QT1JUX0hEQ1Bf QU5JTklUKHBvcnQpLCBnZXRfcmFuZG9tX2xvbmcoKSk7Cj4gKwlJOTE1X1dSSVRFKFNLTF9QT1JU X0hEQ1BfQ09ORihwb3J0KSwgU0tMX0hEQ1BfQ09ORl9DQVBUVVJFX0FOKTsKPiArCj4gKwkvKiBX YWl0IGZvciBBbiB0byBiZSBhY3F1aXJlZCAqLwo+ICsJaWYgKGludGVsX3dhaXRfZm9yX3JlZ2lz dGVyKGRldl9wcml2LCBTS0xfUE9SVF9IRENQX1NUQVRVUyhwb3J0KSwKPiArCQkJCSAgICBTS0xf SERDUF9TVEFUVVNfQU5fUkVBRFksCj4gKwkJCQkgICAgU0tMX0hEQ1BfU1RBVFVTX0FOX1JFQURZ LCAxKSkgewo+ICsJCURSTV9FUlJPUigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIEFuXG4iKTsKPiAr CQlyZXR1cm4gLUVUSU1FRE9VVDsKPiArCX0KPiArCj4gKwlhbi5yZWdbMF0gPSBJOTE1X1JFQUQo U0tMX1BPUlRfSERDUF9BTkxPKHBvcnQpKTsKPiArCWFuLnJlZ1sxXSA9IEk5MTVfUkVBRChTS0xf UE9SVF9IRENQX0FOSEkocG9ydCkpOwo+ICsJcmV0ID0gc2hpbS0+d3JpdGVfYW5fYWtzdihpbnRl bF9kaWdfcG9ydCwgYW4uc2hpbSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ ICsJcjBfcHJpbWVfZ2VuX3N0YXJ0ID0gamlmZmllczsKPiArCj4gKwltZW1zZXQoJmJrc3YsIDAs IHNpemVvZihia3N2KSk7Cj4gKwlyZXQgPSBzaGltLT5yZWFkX2Jrc3YoaW50ZWxfZGlnX3BvcnQs IGJrc3Yuc2hpbSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJSTkxNV9X UklURShTS0xfUE9SVF9IRENQX0JLU1ZMTyhwb3J0KSwgYmtzdi5yZWdbMF0pOwo+ICsJSTkxNV9X UklURShTS0xfUE9SVF9IRENQX0JLU1ZISShwb3J0KSwgYmtzdi5yZWdbMV0pOwo+ICsKPiArCXJl dCA9IHNoaW0tPnJlcGVhdGVyX3ByZXNlbnQoaW50ZWxfZGlnX3BvcnQsICZyZXBlYXRlcl9wcmVz ZW50KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCWlmIChyZXBlYXRlcl9wcmVz ZW50KQo+ICsJCUk5MTVfV1JJVEUoU0tMX0hEQ1BfUkVQX0NUTCwKPiArCQkJICAgaW50ZWxfaGRj cF9nZXRfcmVwZWF0ZXJfY3RsKGludGVsX2RpZ19wb3J0KSk7Cj4gKwo+ICsJcmV0ID0gc2hpbS0+ dG9nZ2xlX3NpZ25hbGxpbmcoaW50ZWxfZGlnX3BvcnQsIHRydWUpOwo+ICsJaWYgKHJldCkKPiAr CQlyZXR1cm4gcmV0Owo+ICsKPiArCUk5MTVfV1JJVEUoU0tMX1BPUlRfSERDUF9DT05GKHBvcnQp LCBTS0xfSERDUF9DT05GX0FVVEhfQU5EX0VOQyk7Cj4gKwo+ICsJLyogV2FpdCBmb3IgUjAgcmVh ZHkgKi8KPiArCWlmICh3YWl0X2ZvcihJOTE1X1JFQUQoU0tMX1BPUlRfSERDUF9TVEFUVVMocG9y dCkpICYKPiArCQkgICAgIChTS0xfSERDUF9TVEFUVVNfUjBfUkVBRFkgfCBTS0xfSERDUF9TVEFU VVNfRU5DKSwgMSkpIHsKPiArCQlEUk1fRVJST1IoIlRpbWVkIG91dCB3YWl0aW5nIGZvciBSMCBy ZWFkeVxuIik7Cj4gKwkJcmV0dXJuIC1FVElNRURPVVQ7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAq IFdhaXQgZm9yIFIwJyB0byBiZWNvbWUgYXZhaWxhYmxlLCB0aGUgc3BlYyBzYXlzIDEwMG1zIGZy b20gQWtzdgo+ICsJICogd3JpdGUuIE9uIERQLCB0aGVyZSdzIGFuIFIwX1JFQURZIGJpdCBhdmFp bGFibGUgYnV0IG5vIHN1Y2ggYml0Cj4gKwkgKiBleGlzdHMgb24gSERNSS4gU2luY2UgdGhlIHVw cGVyLWJvdW5kIGlzIHRoZSBzYW1lLCB3ZSdsbCBqdXN0IGRvCj4gKwkgKiB0aGUgc3R1cGlkIHRo aW5nIGluc3RlYWQgb2YgcG9sbGluZyBvbiBvbmUgYW5kIG5vdCB0aGUgb3RoZXIuCj4gKwkgKi8K PiArCXdhaXRfcmVtYWluaW5nX21zX2Zyb21famlmZmllcyhyMF9wcmltZV9nZW5fc3RhcnQsIDEw MCk7Cj4gKwo+ICsJcmkucmVnID0gMDsKPiArCXJldCA9IHNoaW0tPnJlYWRfcmlfcHJpbWUoaW50 ZWxfZGlnX3BvcnQsIHJpLnNoaW0pOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsJ STkxNV9XUklURShTS0xfUE9SVF9IRENQX1JQUklNRShwb3J0KSwgcmkucmVnKTsKPiArCj4gKwkv KiBXYWl0IGZvciBSaSBwcmltZSBtYXRjaCAqLwo+ICsJaWYgKHdhaXRfZm9yKEk5MTVfUkVBRChT S0xfUE9SVF9IRENQX1NUQVRVUyhwb3J0KSkgJgo+ICsJCSAgICAgKFNLTF9IRENQX1NUQVRVU19S SV9NQVRDSCB8IFNLTF9IRENQX1NUQVRVU19FTkMpLCAxKSkgewo+ICsJCURSTV9FUlJPUigiVGlt ZWQgb3V0IHdhaXRpbmcgZm9yIFJpIHByaW1lIG1hdGNoICgleClcbiIsCj4gKwkJCSAgSTkxNV9S RUFEKFNLTF9QT1JUX0hEQ1BfU1RBVFVTKHBvcnQpKSk7Cj4gKwkJcmV0dXJuIC1FVElNRURPVVQ7 Cj4gKwl9Cj4gKwo+ICsJLyogV2FpdCBmb3IgZW5jcnlwdGlvbiBjb25maXJtYXRpb24gKi8KPiAr CWlmIChpbnRlbF93YWl0X2Zvcl9yZWdpc3RlcihkZXZfcHJpdiwgU0tMX1BPUlRfSERDUF9TVEFU VVMocG9ydCksCj4gKwkJCQkgICAgU0tMX0hEQ1BfU1RBVFVTX0VOQywKPiArCQkJCSAgICBTS0xf SERDUF9TVEFUVVNfRU5DLCAyMCkpIHsKPiArCQlEUk1fRVJST1IoIlRpbWVkIG91dCB3YWl0aW5n IGZvciBlbmNyeXB0aW9uXG4iKTsKPiArCQlyZXR1cm4gLUVUSU1FRE9VVDsKPiArCX0KPiArCj4g KwkvKgo+ICsJICogWFhYOiBJZiB3ZSBoYXZlIE1TVC1jb25uZWN0ZWQgZGV2aWNlcywgd2UgbmVl ZCB0byBlbmFibGUgZW5jcnlwdGlvbgo+ICsJICogb24gdGhvc2UgYXMgd2VsbC4KPiArCSAqLwo+ ICsKPiArCXJldHVybiBpbnRlbF9oZGNwX2F1dGhfZG93bnN0cmVhbShpbnRlbF9kaWdfcG9ydCwg c2hpbSk7Cj4gK30KPiArCj4gK3N0YXRpYwo+ICtzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpj b25uX3RvX2RpZ19wb3J0KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ ICsJcmV0dXJuIGVuY190b19kaWdfcG9ydCgmaW50ZWxfYXR0YWNoZWRfZW5jb2RlcigmY29ubmVj dG9yLT5iYXNlKS0+YmFzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX2ludGVsX2hkY3BfZGlz YWJsZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGNvbm5lY3Rvci0+YmFzZS5kZXYtPmRldl9wcml2 YXRlOwo+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBjb25u X3RvX2RpZ19wb3J0KGNvbm5lY3Rvcik7Cj4gKwllbnVtIHBvcnQgcG9ydCA9IGludGVsX2RpZ19w b3J0LT5iYXNlLnBvcnQ7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCUk5MTVfV1JJVEUoU0tMX1BPUlRf SERDUF9DT05GKHBvcnQpLCAwKTsKPiArCWlmIChpbnRlbF93YWl0X2Zvcl9yZWdpc3RlcihkZXZf cHJpdiwgU0tMX1BPUlRfSERDUF9TVEFUVVMocG9ydCksIH4wLCAwLAo+ICsJCQkJICAgIDIwKSkg ewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGRpc2FibGUgSERDUCwgdGltZW91dCBjbGVhcmlu ZyBzdGF0dXNcbiIpOwo+ICsJCXJldHVybiAtRVRJTUVET1VUOwo+ICsJfQo+ICsKPiArCWludGVs X2hkY3BfY2xlYXJfa2V5cyhkZXZfcHJpdik7Cj4gKwo+ICsJcmV0ID0gY29ubmVjdG9yLT5oZGNw X3NoaW0tPnRvZ2dsZV9zaWduYWxsaW5nKGludGVsX2RpZ19wb3J0LCBmYWxzZSk7Cj4gKwlpZiAo cmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZGlzYWJsZSBIRENQIHNpZ25hbGxpbmdc biIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJRFJNX0lORk8oIkhEQ1AgaXMgZGlz YWJsZWRcbiIpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX2ludGVsX2hk Y3BfZW5hYmxlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gY29ubmVjdG9yLT5iYXNlLmRldi0+ZGV2 X3ByaXZhdGU7Cj4gKwlpbnQgaSwgcmV0Owo+ICsKPiArCWlmICghKEk5MTVfUkVBRChTS0xfRlVT RV9TVEFUVVMpICYgU0tMX0ZVU0VfUEdfRElTVF9TVEFUVVMoMSkpKSB7Cj4gKwkJRFJNX0VSUk9S KCJQRzEgaXMgZGlzYWJsZWQsIGNhbm5vdCBsb2FkIGtleXNcbiIpOwo+ICsJCXJldHVybiAtRU5Y SU87Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEtFWV9MT0FEX1RSSUVTOyBpKyspIHsK PiArCQlyZXQgPSBpbnRlbF9oZGNwX2xvYWRfa2V5cyhkZXZfcHJpdik7Cj4gKwkJaWYgKCFyZXQp Cj4gKwkJCWJyZWFrOwo+ICsJCWludGVsX2hkY3BfY2xlYXJfa2V5cyhkZXZfcHJpdik7Cj4gKwl9 Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJDb3VsZCBub3QgbG9hZCBIRENQIGtleXMs ICglZClcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBpbnRl bF9oZGNwX2F1dGgoY29ubl90b19kaWdfcG9ydChjb25uZWN0b3IpLAo+ICsJCQkgICAgICBjb25u ZWN0b3ItPmhkY3Bfc2hpbSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQg dG8gYXV0aGVudGljYXRlIEhEQ1AgKCVkKVxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJ fQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2hkY3BfY2hlY2tfd29y ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9jb25uZWN0 b3IgKmNvbm5lY3RvciA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCj4gKwkJ CQkJCQkgc3RydWN0IGludGVsX2Nvbm5lY3RvciwKPiArCQkJCQkJICAgICAgICAgaGRjcF9jaGVj a193b3JrKTsKPiArCWlmICghaW50ZWxfaGRjcF9jaGVja19saW5rKGNvbm5lY3RvcikpCj4gKwkJ c2NoZWR1bGVfZGVsYXllZF93b3JrKCZjb25uZWN0b3ItPmhkY3BfY2hlY2tfd29yaywKPiArCQkJ CSAgICAgIERSTV9IRENQX0NIRUNLX1BFUklPRF9NUyk7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxf aGRjcF9wcm9wX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3Qg aW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IgPSBjb250YWluZXJfb2Yod29yaywKPiArCQkJCQkJ CSBzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yLAo+ICsJCQkJCQkgICAgICAgICBoZGNwX3Byb3Bfd29y ayk7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5iYXNlLmRldjsKPiAr CXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZTsKPiArCj4gKwltdXRleF9sb2NrKCZk ZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKPiArCWRybV9tb2Rlc2V0X2xvY2soJmRldi0+bW9kZV9j b25maWcuY29ubmVjdGlvbl9tdXRleCwgTlVMTCk7Cj4gKwltdXRleF9sb2NrKCZjb25uZWN0b3It PmhkY3BfbXV0ZXgpOwo+ICsKPiArCS8qCj4gKwkgKiBUaGlzIHdvcmtlciBpcyBvbmx5IHVzZWQg dG8gZmxpcCBiZXR3ZWVuIEVOQUJMRUQvREVTSVJFRC4gRWl0aGVyIG9mCj4gKwkgKiB0aG9zZSB0 byBPRkYgaXMgaGFuZGxlZCBieSBjb3JlLiBJZiBoZGNwX3ZhbHVlID09IE9GRiwgd2UncmUgcnVu bmluZwo+ICsJICoganVzdCBhZnRlciBoZGNwIGhhcyBiZWVuIGRpc2FibGVkLCBzbyBqdXN0IGV4 aXQKPiArCSAqLwo+ICsJaWYgKGNvbm5lY3Rvci0+aGRjcF92YWx1ZSAhPSBEUk1fTU9ERV9DT05U RU5UX1BST1RFQ1RJT05fT0ZGKSB7Cj4gKwkJc3RhdGUgPSBjb25uZWN0b3ItPmJhc2Uuc3RhdGU7 Cj4gKwkJc3RhdGUtPmNvbnRlbnRfcHJvdGVjdGlvbiA9IGNvbm5lY3Rvci0+aGRjcF92YWx1ZTsK PiArCX0KPiArCj4gKwltdXRleF91bmxvY2soJmNvbm5lY3Rvci0+aGRjcF9tdXRleCk7Cj4gKwlk cm1fbW9kZXNldF91bmxvY2soJmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCk7Cj4g KwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGludGVsX2hkY3BfZW5hYmxlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3Rv cikKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIWNvbm5lY3Rvci0+aGRjcF9zaGltKQo+ ICsJCXJldHVybiAtRU5PRU5UOwo+ICsKPiArCW11dGV4X2xvY2soJmNvbm5lY3Rvci0+aGRjcF9t dXRleCk7Cj4gKwo+ICsJcmV0ID0gX2ludGVsX2hkY3BfZW5hYmxlKGNvbm5lY3Rvcik7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCWNvbm5lY3Rvci0+aGRjcF92YWx1ZSA9IERS TV9NT0RFX0NPTlRFTlRfUFJPVEVDVElPTl9FTkFCTEVEOwo+ICsJc2NoZWR1bGVfd29yaygmY29u bmVjdG9yLT5oZGNwX3Byb3Bfd29yayk7Cj4gKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNvbm5l Y3Rvci0+aGRjcF9jaGVja193b3JrLAo+ICsJCQkgICAgICBEUk1fSERDUF9DSEVDS19QRVJJT0Rf TVMpOwo+ICtvdXQ6Cj4gKwltdXRleF91bmxvY2soJmNvbm5lY3Rvci0+aGRjcF9tdXRleCk7Cj4g KwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGludGVsX2hkY3BfZGlzYWJsZShz dHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ ICsJaWYgKCFjb25uZWN0b3ItPmhkY3Bfc2hpbSkKPiArCQlyZXR1cm4gLUVOT0VOVDsKPiArCj4g KwltdXRleF9sb2NrKCZjb25uZWN0b3ItPmhkY3BfbXV0ZXgpOwo+ICsKPiArCWNvbm5lY3Rvci0+ aGRjcF92YWx1ZSA9IERSTV9NT0RFX0NPTlRFTlRfUFJPVEVDVElPTl9PRkY7Cj4gKwlyZXQgPSBf aW50ZWxfaGRjcF9kaXNhYmxlKGNvbm5lY3Rvcik7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZjb25u ZWN0b3ItPmhkY3BfbXV0ZXgpOwo+ICsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZjb25uZWN0 b3ItPmhkY3BfY2hlY2tfd29yayk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICt2b2lkIGlu dGVsX2hkY3BfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4g KwkJCSAgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9zdGF0ZSwKPiArCQkJICAg ICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqbmV3X3N0YXRlKQo+ICt7Cj4gKwl1aW50NjRf dCBvbGRfY3AgPSBvbGRfc3RhdGUtPmNvbnRlbnRfcHJvdGVjdGlvbjsKPiArCXVpbnQ2NF90IG5l d19jcCA9IG5ld19zdGF0ZS0+Y29udGVudF9wcm90ZWN0aW9uOwo+ICsKPiArCWlmICghbmV3X3N0 YXRlLT5jcnRjKSB7Cj4gKwkJLyoKPiArCQkgKiBJZiB0aGUgY29ubmVjdG9yIGlzIGJlaW5nIGRp c2FibGVkIHdpdGggQ1AgZW5hYmxlZCwgbWFyayBpdAo+ICsJCSAqIGRlc2lyZWQgc28gaXQncyBy ZS1lbmFibGVkIHdoZW4gdGhlIGNvbm5lY3RvciBpcyBicm91Z2h0IGJhY2sKPiArCQkgKi8KPiAr CQlpZiAob2xkX2NwID09IERSTV9NT0RFX0NPTlRFTlRfUFJPVEVDVElPTl9FTkFCTEVEKQo+ICsJ CQluZXdfc3RhdGUtPmNvbnRlbnRfcHJvdGVjdGlvbiA9Cj4gKwkJCQlEUk1fTU9ERV9DT05URU5U X1BST1RFQ1RJT05fREVTSVJFRDsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJLyogT25seSBk cml2ZXJzIGNhbiBzZXQgY29udGVudCBwcm90ZWN0aW9uIGVuYWJsZWQgKi8KPiArCWlmIChvbGRf Y3AgIT0gRFJNX01PREVfQ09OVEVOVF9QUk9URUNUSU9OX0VOQUJMRUQgJiYKPiArCSAgICBuZXdf Y3AgPT0gRFJNX01PREVfQ09OVEVOVF9QUk9URUNUSU9OX0VOQUJMRUQpCj4gKwkJbmV3X3N0YXRl LT5jb250ZW50X3Byb3RlY3Rpb24gPQo+ICsJCQlEUk1fTU9ERV9DT05URU5UX1BST1RFQ1RJT05f REVTSVJFRDsKQXMgZHJtX2F0b21pY19jb25uZWN0b3Jfc2V0X3Byb3BlcnR5IGlzIHJlamVjdGlu ZyB0aGUgdXNlcnNwYWNlIHJlcXVlc3QgCmZvciBEUk1fTU9ERV9DT05URU5UX1BST1RFQ1RJT05f RU5BQkxFRCwKV2UgZG9udCBuZWVkIHRoaXMgY2hlY2sgaGVyZS4KCi0tUmFtCj4gK30KPiArCj4g K3ZvaWQgaW50ZWxfaGRjcF9hdG9taWNfcHJlX2NvbW1pdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLAo+ICsJCQkgICAgICAgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9s ZF9zdGF0ZSwKPiArCQkJICAgICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpuZXdf c3RhdGUpCj4gK3sKPiArCXVpbnQ2NF90IG9sZF9jcCA9IG9sZF9zdGF0ZS0+Y29udGVudF9wcm90 ZWN0aW9uOwo+ICsJdWludDY0X3QgbmV3X2NwID0gbmV3X3N0YXRlLT5jb250ZW50X3Byb3RlY3Rp b247Cj4gKwo+ICsJLyoKPiArCSAqIERpc2FibGUgSERDUCBpZiB0aGUgY29ubmVjdG9yIGlzIGJl Y29taW5nIGRpc2FibGVkLCBvciBpZiByZXF1ZXN0ZWQKPiArCSAqIHZpYSB0aGUgcHJvcGVydHku Cj4gKwkgKi8KPiArCWlmICgoIW5ld19zdGF0ZS0+Y3J0YyAmJiBvbGRfY3AgIT0gRFJNX01PREVf Q09OVEVOVF9QUk9URUNUSU9OX09GRikgfHwKPiArCSAgICAobmV3X3N0YXRlLT5jcnRjICYmIG9s ZF9jcCAhPSBEUk1fTU9ERV9DT05URU5UX1BST1RFQ1RJT05fT0ZGICYmCj4gKwkgICAgIG5ld19j cCA9PSBEUk1fTU9ERV9DT05URU5UX1BST1RFQ1RJT05fT0ZGKSkKPiArCQlpbnRlbF9oZGNwX2Rp c2FibGUodG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3RvcikpOwo+ICt9Cj4gKwo+ICt2b2lkIGlu dGVsX2hkY3BfYXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqbmV3X3N0YXRlKQo+ICt7Cj4g Kwl1aW50NjRfdCBuZXdfY3AgPSBuZXdfc3RhdGUtPmNvbnRlbnRfcHJvdGVjdGlvbjsKPiArCj4g KwkvKiBFbmFibGUgaGRjcCBpZiBpdCdzIGRlc2lyZWQgKi8KPiArCWlmIChuZXdfc3RhdGUtPmNy dGMgJiYgbmV3X2NwID09IERSTV9NT0RFX0NPTlRFTlRfUFJPVEVDVElPTl9ERVNJUkVEKQo+ICsJ CWludGVsX2hkY3BfZW5hYmxlKHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpKTsKPiArfQo+ ICsKPiArLyogSW1wbGVtZW50cyBQYXJ0IDMgb2YgdGhlIEhEQ1AgYXV0aG9yaXphdGlvbiBwcm9j ZWR1cmUgKi8KPiAraW50IGludGVsX2hkY3BfY2hlY2tfbGluayhzdHJ1Y3QgaW50ZWxfY29ubmVj dG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGNvbm5lY3Rvci0+YmFzZS5kZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBjb25uX3RvX2RpZ19wb3J0KGNvbm5lY3Rvcik7 Cj4gKwllbnVtIHBvcnQgcG9ydCA9IGludGVsX2RpZ19wb3J0LT5iYXNlLnBvcnQ7Cj4gKwlpbnQg cmV0ID0gMDsKPiArCj4gKwlpZiAoIWNvbm5lY3Rvci0+aGRjcF9zaGltKQo+ICsJCXJldHVybiAt RU5PRU5UOwo+ICsKPiArCW11dGV4X2xvY2soJmNvbm5lY3Rvci0+aGRjcF9tdXRleCk7Cj4gKwo+ ICsJaWYgKGNvbm5lY3Rvci0+aGRjcF92YWx1ZSA9PSBEUk1fTU9ERV9DT05URU5UX1BST1RFQ1RJ T05fT0ZGKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCWlmICghKEk5MTVfUkVBRChTS0xfUE9SVF9I RENQX1NUQVRVUyhwb3J0KSkgJiBTS0xfSERDUF9TVEFUVVNfRU5DKSkgewo+ICsJCURSTV9FUlJP UigiSERDUCBjaGVjayBmYWlsZWQ6IGxpbmsgaXMgbm90IGVuY3J5cHRlZCwgJXhcbiIsCj4gKwkJ CSAgIEk5MTVfUkVBRChTS0xfUE9SVF9IRENQX1NUQVRVUyhwb3J0KSkpOwo+ICsJCXJldCA9IC1F TlhJTzsKPiArCQljb25uZWN0b3ItPmhkY3BfdmFsdWUgPSBEUk1fTU9ERV9DT05URU5UX1BST1RF Q1RJT05fREVTSVJFRDsKPiArCQlzY2hlZHVsZV93b3JrKCZjb25uZWN0b3ItPmhkY3BfcHJvcF93 b3JrKTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwlpZiAoY29ubmVjdG9yLT5oZGNwX3No aW0tPmNoZWNrX2xpbmsoaW50ZWxfZGlnX3BvcnQpKSB7Cj4gKwkJaWYgKGNvbm5lY3Rvci0+aGRj cF92YWx1ZSAhPSBEUk1fTU9ERV9DT05URU5UX1BST1RFQ1RJT05fT0ZGKSB7Cj4gKwkJCWNvbm5l Y3Rvci0+aGRjcF92YWx1ZSA9Cj4gKwkJCQlEUk1fTU9ERV9DT05URU5UX1BST1RFQ1RJT05fRU5B QkxFRDsKPiArCQkJc2NoZWR1bGVfd29yaygmY29ubmVjdG9yLT5oZGNwX3Byb3Bfd29yayk7Cj4g KwkJfQo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCURSTV9JTkZPKCJIRENQIGxpbmsgZmFp bGVkLCByZXRyeWluZyBhdXRoZW50aWNhdGlvblxuIik7Cj4gKwo+ICsJcmV0ID0gX2ludGVsX2hk Y3BfZGlzYWJsZShjb25uZWN0b3IpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiRmFp bGVkIHRvIGRpc2FibGUgaGRjcCAoJWQpXG4iLCByZXQpOwo+ICsJCWNvbm5lY3Rvci0+aGRjcF92 YWx1ZSA9IERSTV9NT0RFX0NPTlRFTlRfUFJPVEVDVElPTl9ERVNJUkVEOwo+ICsJCXNjaGVkdWxl X3dvcmsoJmNvbm5lY3Rvci0+aGRjcF9wcm9wX3dvcmspOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ ICsKPiArCXJldCA9IF9pbnRlbF9oZGNwX2VuYWJsZShjb25uZWN0b3IpOwo+ICsJaWYgKHJldCkg ewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBoZGNwICglZClcbiIsIHJldCk7Cj4g KwkJY29ubmVjdG9yLT5oZGNwX3ZhbHVlID0gRFJNX01PREVfQ09OVEVOVF9QUk9URUNUSU9OX0RF U0lSRUQ7Cj4gKwkJc2NoZWR1bGVfd29yaygmY29ubmVjdG9yLT5oZGNwX3Byb3Bfd29yayk7Cj4g KwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICtvdXQ6Cj4gKwltdXRleF91bmxvY2soJmNvbm5lY3Rv ci0+aGRjcF9tdXRleCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK