From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniele Ceraolo Spurio Subject: Re: [RFC] drm/i915/guc: New GuC stage descriptors Date: Thu, 18 Oct 2018 14:07:32 -0700 Message-ID: References: <20180829191814.10872-2-michal.wajdeczko@intel.com> <20181012182530.18885-1-daniele.ceraolospurio@intel.com> <98896222-d37d-9bb4-7c8d-a4f439e5989e@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id ADF7B6E109 for ; Thu, 18 Oct 2018 21:07:33 +0000 (UTC) In-Reply-To: <98896222-d37d-9bb4-7c8d-a4f439e5989e@intel.com> 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: "Lis, Tomasz" , intel-gfx@lists.freedesktop.org Cc: Michel Thierry List-Id: intel-gfx@lists.freedesktop.org CgpPbiAxNy8xMC8xOCAxMTo0MiwgTGlzLCBUb21hc3ogd3JvdGU6Cj4gCj4gCj4gT24gMjAxOC0x MC0xMiAyMDoyNSwgRGFuaWVsZSBDZXJhb2xvIFNwdXJpbyB3cm90ZToKPj4gV2l0aCB0aGUgbmV3 IGludGVyZmFjZSwgR3VDIG5vdyByZXF1aXJlcyBldmVyeSBscmMgdG8gYmUgcmVnaXN0ZXJlZCBp bgo+PiBvbmUgb2YgdGhlIHN0YWdlIGRlc2NyaXB0b3JzLCB3aGljaCBoYXZlIGJlZW4gcmUtZGVz aWduZWQgc28gdGhhdCBlYWNoCj4+IGRlc2NyaXB0b3IgY2FuIHN0b3JlIHVwIHRvIDY0IGxyYyBw ZXIgY2xhc3MgKGkuZS4gZXF1YWwgdG8gdGhlIHBvc3NpYmxlCj4+IFNXIGNvdW50ZXIgdmFsdWVz KS4KPj4gU2ltaWxhcmx5IHRvIHdoYXQgaGFwcGVuZWQgd2l0aCB0aGUgcHJldmlvdXMgbGVnYWN5 IGRlc2lnbiwgaXQgaXMgCj4+IHBvc3NpYmxlCj4+IHRvIGhhdmUgYSBzaW5nbGUgInByb3h5IiBk ZXNjcmlwdG9yIHRoYXQgb3ducyB0aGUgd29ya3F1ZXVlIGFuZCB0aGUKPj4gZG9vcmJlbGwgYW5k IHVzZSBpdCBmb3IgYWxsIHN1Ym1pc3Npb24uIFRvIGRpc3Rpbmd1aXNoIHRoZSBwcm94eQo+PiBk ZXNjcmlwdG9ycyBmcm9tIHRoZSBvbmUgdXNlZCBmb3IgbHJjIHN0b3JhZ2UsIHRoZSBsYXR0ZXIg aGF2ZSBiZWVuCj4+IGNhbGxlZCAicHJpbmNpcGFsIi4gQSBkZXNjcmlwdG9yIGNhbid0IGJlIGJv dGggYSBwcm94eSBhbmQgYSBwcmluY2lwYWwKPj4gYXQgdGhlIHNhbWUgdGltZTsgdG8gZW5mb3Jj ZSB0aGlzLCBzaW5jZSB3ZSBvbmx5IHVzZSAxIHByb3h5IGRlc2NyaXB0b3IKPj4gcGVyIGNsaWVu dCwgd2UgcmVzZXJ2ZSBlbm91Z2ggZGVzY3JpcHRvciBmcm9tIHRoZSBib3R0b20gb2YgdGhlIHBv b2wgdG8KPj4gYmUgdXNlZCBhcyBwcm94eSBhbmQgbGVhdmUgdGhlIG90aGVycyBhcyBwcmluY2lw YWxzLiBGb3Igc2ltcGxpY2l0eSwgd2UKPj4gY3VycmVudGx5IG1hcCBjb250ZXh0IElEcyAxOjEg dG8gcHJpbmNpcGFsIGRlc2NyaXB0b3JzLCBidXQgd2UgY291bGQKPj4gaGF2ZSBtb3JlIGNvbnRl eHRzIGluIGZsaWdodCBpZiBuZWVkZWQgYnkgdXNpbmcgdGhlIFNXIGNvdW50ZXIuCj4gRG9lcyB0 aGlzIGhhdmUgYW55IGluZmx1ZW5jZSBvbiB0aGUgY29uY2VwdCBvZiAiZGVmYXVsdCBjb250ZXh0 IiB1c2VkIGJ5IAo+IFVNRHM/Cj4gT3IgaXMgdGhpcyBjb21wbGV0ZWx5IHNlcGFyYXRlPwoKTm8g cmVsYXRpb25zaGlwIGF0IHRoZSBtb21lbnQsIHdlIG9ubHkgbWFwIGdlbV9jb250ZXh0IHRvIHN0 YWdlX2Rlc2MsIHdlIApkb24ndCBjYXJlIGFib3V0IHdobyB0aG9zZSBjb250ZXh0cyBiZWxvbmcg dG8gb3IgaWYgdGhleSdyZSBkZWZhdWx0IG9yIApub3QuIFdlIGNvdWxkIHBvdGVudGlhbGx5IHVz ZSBhbiBhcHByb2FjaCB3aGVyZSBlYWNoIGZpbGUgZGVzY3JpcHRvciAKZ2V0cyBhIHN0YWdlIGRl c2NyaXB0b3IgYW5kIGFsbCB0aGUgY29udGV4dHMgb3BlbmVkIGJ5IHRoYXQgRkQgdXNlIHRoZSAK c2FtZSBzdGFnZV9kZXNjIHdpdGggZGlmZmVyZW50IFNXIGNvdW50ZXJzLCBidXQgdGhhdCB3b3Vs ZCBsaW1pdCBib3RoIAp0aGUgbnVtYmVyIG9mIG9wZW4gRkRzIGFuZCB0aGUgbnVtYmVyIG9mIGNv bnRleHRzIHBlciBGRCwgc28gZG9lc24ndCAKc2VlbSBsaWtlIGEgZ29vZCBpZGVhIElNTy4KCj4+ IE5vdGUgdGhhdCB0aGUgbHJjcyBuZWVkIHRvIGJlIG1hcHBlZCBpbiB0aGUgcHJpbmNpcGFsIGRl c2NyaXB0b3IgdW50aWwKPj4gZ3VjIGlzIGRvbmUgd2l0aCB0aGVtLiBUaGlzIG1lYW5zIHRoYXQg d2UgY2FuJ3QgcmVsZWFzZSB0aGUgSFcgaWQgd2hlbgo+PiB0aGUgdXNlciBhcHAgY2xvc2VzIHRo ZSBjdHggYmVjYXVzZSBpdCBtaWdodCBzdGlsbCBiZSBpbiBmbGlnaHQgd2l0aCBHdUMKPj4gYW5k IHRoYXQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIHdoZW4gdW5waW5uaW5nIGJlY2F1c2UgdGhlIGZh Y3QgdGhhdCB0aGUKPiBzL3RoZS8vCj4+IGEgcmVxdWVzdCBvbiB0aGUgbmV4dCBjb250ZXh0IGhh cyBjb21wbGV0ZWQgZG9lc24ndCBtZWFuIHRoYXQgR3VDIGlzCj4+IGRvbmUgcHJvY2Vzc2luZyB0 aGUgZmlyc3Qgb25lLiBTZWUgaW4tY29kZSBjb21tZW50cyBmb3IgZGV0YWlscy4KPj4KPj4gTk9U RTogR3VDIGlzIG5vdCBnb2luZyB0byBsb29rIGF0IGxyY3MgdGhhdCBhcmUgbm90IGluIGZsaWdo dCwgc28gd2UKPj4gY291bGQgcG90ZW50aWFsbHkgc2tpcCB0aGUgdW5waW5uaW5nIHN0ZXBzLiBI b3dldmVyLCB0aGUgdW5waW5uaWcgc3RlcHMKPj4gcGVyZm9ybSBleHRyYSBjb3JyZWN0bmVzcyBj aGVjayBzbyBiZXR0ZXIga2VlcCB0aGVtIHVudGlsIHdlJ3JlIHN1cmUKPj4gdGhhdCB0aGUgZmxv dyBpcyBzb2xpZC4KPj4KPj4gQmFzZWQgb24gYW4gaW5pdGlhbCBwYXRjaCBieSBPc2NhciBNYXRl by4KPj4KPj4gUkZDOiB0aGlzIHdpbGwgYmUgc2VudCBhcyBwYXJ0IG9mIHRoZSB1cGRhdGVkIHNl cmllcyBvbmNlIHdlIGhhdmUKPj4gdGhlIGdlbjkgRlcgd2l0aCB0aGUgbmV3IGludGVyZmFjZSwg YnV0IHNpbmNlIHRoZSBmbG93IGlzCj4+IHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGNvbXBhcmVk IHRvIHRoZSBwcmV2aW91cyB2ZXJzaW9uIEknZCBsaWtlCj4+IHRvIGdhdGhlciBzb21lIGVhcmx5 IGZlZWRiYWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG1ham9yCj4+IGlzc3Vlcy4K Pj4KPj4gU2lnbmVkLW9mZi1ieTogRGFuaWVsZSBDZXJhb2xvIFNwdXJpbyA8ZGFuaWVsZS5jZXJh b2xvc3B1cmlvQGludGVsLmNvbT4KPj4gU2lnbmVkLW9mZi1ieTogTWljaGFsIFdhamRlY3prbyA8 bWljaGFsLndhamRlY3prb0BpbnRlbC5jb20+Cj4+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNo cmlzLXdpbHNvbi5jby51az4KPj4gQ2M6IE1pY2hlbCBUaGllcnJ5IDxtaWNoZWwudGhpZXJyeUBp bnRlbC5jb20+Cj4+IENjOiBNaWNoYWwgV2luaWFyc2tpIDxtaWNoYWwud2luaWFyc2tpQGludGVs LmNvbT4KPj4gQ2M6IFRvbWFzeiBMaXMgPHRvbWFzei5saXNAaW50ZWwuY29tPgo+PiAtLS0KPj4g wqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmPCoMKgwqDCoMKgwqDCoMKgIHzC oCAzMCArLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5owqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHzCoMKgIDUgKy0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fY29udGV4dC5jwqDCoMKgwqAgfMKgwqAgOSArLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9ndWMuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDE0ICstCj4+IMKgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19md2lmLmjCoMKgwqDCoMKgwqAgfMKgIDczICsrKy0t Cj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19zdWJtaXNzaW9uLmMgfCAzNDYg KysrKysrKysrKysrKysrLS0tLS0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJj LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAxOCArLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNyArCj4+IMKgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9ndWMuY8KgIHzCoMKgIDQgKy0KPj4g wqAgOSBmaWxlcyBjaGFuZ2VkLCAzNjAgaW5zZXJ0aW9ucygrKSwgMTQ2IGRlbGV0aW9ucygtKQo+ Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgCj4+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPj4gaW5kZXggMDBjNTUxZDNl NDA5Li4wNGJiZGU0YTM4YTYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZGVidWdmcy5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5j Cj4+IEBAIC0yNDc0LDExICsyNDc0LDEwIEBAIHN0YXRpYyBpbnQgaTkxNV9ndWNfc3RhZ2VfcG9v bChzdHJ1Y3Qgc2VxX2ZpbGUgCj4+ICptLCB2b2lkICpkYXRhKQo+PiDCoMKgwqDCoMKgwqDCoMKg wqAgc2VxX3ByaW50ZihtLCAiR3VDIHN0YWdlIGRlc2NyaXB0b3IgJXU6XG4iLCBpbmRleCk7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBzZXFfcHJpbnRmKG0sICJcdEluZGV4OiAldVxuIiwgZGVzYy0+ c3RhZ2VfaWQpOwo+PiArwqDCoMKgwqDCoMKgwqAgc2VxX3ByaW50ZihtLCAiXHRQcm94eSBJbmRl eDogJXVcbiIsIGRlc2MtPnByb3h5X2lkKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNlcV9wcmlu dGYobSwgIlx0QXR0cmlidXRlOiAweCV4XG4iLCBkZXNjLT5hdHRyaWJ1dGUpOwo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgc2VxX3ByaW50ZihtLCAiXHRQcmlvcml0eTogJWRcbiIsIGRlc2MtPnByaW9y aXR5KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNlcV9wcmludGYobSwgIlx0RG9vcmJlbGwgaWQ6 ICVkXG4iLCBkZXNjLT5kYl9pZCk7Cj4+IC3CoMKgwqDCoMKgwqDCoCBzZXFfcHJpbnRmKG0sICJc dEVuZ2luZXMgdXNlZDogMHgleFxuIiwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZGVzYy0+ZW5naW5lc191c2VkKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNlcV9wcmludGYobSwg Ilx0RG9vcmJlbGwgdHJpZ2dlciBwaHk6IDB4JWxseCwgY3B1OiAweCVsbHgsIAo+PiB1SzogMHgl eFxuIiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVzYy0+ZGJfdHJpZ2dl cl9waHksCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlc2MtPmRiX3RyaWdn ZXJfY3B1LAo+PiBAQCAtMjQ5MCwxOCArMjQ4OSwyMSBAQCBzdGF0aWMgaW50IGk5MTVfZ3VjX3N0 YWdlX3Bvb2woc3RydWN0IHNlcV9maWxlIAo+PiAqbSwgdm9pZCAqZGF0YSkKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIHNlcV9wdXRjKG0sICdcbicpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yX2Vh Y2hfZW5naW5lX21hc2tlZChlbmdpbmUsIGRldl9wcml2LCBjbGllbnQtPmVuZ2luZXMsIAo+PiB0 bXApIHsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGd1Y19lbmdpbmVfaWQgPSBlbmdp bmUtPmd1Y19pZDsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGd1Y19leGVjbGlz dF9jb250ZXh0ICpscmMgPQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmZGVzYy0+bHJjW2d1Y19lbmdpbmVfaWRdOwo+PiAtCj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHNlcV9wcmludGYobSwgIlx0JXMgTFJDOlxuIiwgZW5naW5lLT5uYW1lKTsK Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VxX3ByaW50ZihtLCAiXHRcdENvbnRleHQgZGVz YzogMHgleFxuIiwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBscmMt PmNvbnRleHRfZGVzYyk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlcV9wcmludGYobSwg Ilx0XHRDb250ZXh0IGlkOiAweCV4XG4iLCBscmMtPmNvbnRleHRfaWQpOwo+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzZXFfcHJpbnRmKG0sICJcdFx0TFJDQTogMHgleFxuIiwgbHJjLT5yaW5n X2xyY2EpOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZXFfcHJpbnRmKG0sICJcdFx0Umlu ZyBiZWdpbjogMHgleFxuIiwgbHJjLT5yaW5nX2JlZ2luKTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc2VxX3ByaW50ZihtLCAiXHRcdFJpbmcgZW5kOiAweCV4XG4iLCBscmMtPnJpbmdfZW5k KTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VxX3B1dGMobSwgJ1xuJyk7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHU4IGNsYXNzID0gZW5naW5lLT5jbGFzczsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdTggaW5zdCA9IGVuZ2luZS0+aW5zdGFuY2U7Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKGRlc2MtPmxyY19hbGxvY19tYXBbY2xhc3NdLmJpdG1hcCAm IEJJVChpbnN0KSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBn dWNfZXhlY2xpc3RfY29udGV4dCAqbHJjID0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmZGVzYy0+bHJjW2NsYXNzXVtpbnN0XTsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZXFfcHJpbnRmKG0sICJcdCVzIExSQzpc biIsIGVuZ2luZS0+bmFtZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2Vx X3ByaW50ZihtLCAiXHRcdEhXIGNvbnRleHQgZGVzYzogMHgleDoweCV4XG4iLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb3dlcl8zMl9iaXRzKGxy Yy0+aHdfY29udGV4dF9kZXNjKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdXBwZXJfMzJfYml0cyhscmMtPmh3X2NvbnRleHRfZGVzYykpOwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlcV9wcmludGYobSwgIlx0XHRMUkM6IDB4 JXhcbiIsIGxyYy0+cmluZ19scmMpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHNlcV9wcmludGYobSwgIlx0XHRSaW5nIGJlZ2luOiAweCV4XG4iLCAKPj4gbHJjLT5yaW5nX2Jl Z2luKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZXFfcHJpbnRmKG0sICJc dFx0UmluZyBlbmQ6IDB4JXhcbiIsIGxyYy0+cmluZ19lbmQpOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNlcV9wdXRjKG0sICdcbicpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqAgfQo+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAKPj4gYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oCj4+IGluZGV4IGJkNzY5MzE5ODdlZi4uY2UwOTVkNTdlMDUwIDEw MDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4gQEAgLTE4NzgsMTMgKzE4NzgsMTQgQEAg c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqICh0aGUg U1cgQ29udGV4dCBJRCBmaWVsZCkgYnV0IEd1QyBsaW1pdHMgaXQgZnVydGhlciBzbwo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqIHdpdGhvdXQgdGFraW5nIGFkdmFudGFnZSBvZiBwYXJ0IG9mIHRo ZSBTVyBjb3VudGVyIGZpZWxkIHRoZQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGZpcm13YXJl IG9ubHkgc3VwcG9ydHMgYSBtYXggbnVtYmVyIG9mIGNvbnRleHRzIGVxdWFsIHRvIHRoZQo+PiAt wqDCoMKgwqDCoMKgwqDCoCAqIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBHdUMgc3RhZ2UgZGVz Y3JpcHRvciBwb29sLgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIG51bWJlciBvZiBlbnRyaWVzIGlu IHRoZSBHdUMgc3RhZ2UgZGVzY3JpcHRvciBwb29sLCBtaW51cwo+PiArwqDCoMKgwqDCoMKgwqDC oCAqIHRoZSBkZXNjcmlwdG9ycyByZXNlcnZlZCBmb3IgcHJveHkgdXNhZ2UKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqAgKi8KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpZGEgaHdfaWRhOwo+ PiDCoCAjZGVmaW5lIE1BWF9DT05URVhUX0hXX0lEICgxPDwyMSkgLyogZXhjbHVzaXZlICovCj4+ IMKgICNkZWZpbmUgTUFYX0dVQ19DT05URVhUX0hXX0lEICgxIDw8IDIwKSAvKiBleGNsdXNpdmUg Ki8KPj4gwqAgI2RlZmluZSBHRU4xMV9NQVhfQ09OVEVYVF9IV19JRCAoMTw8MTEpIC8qIGV4Y2x1 c2l2ZSAqLwo+PiAtI2RlZmluZSBHRU4xMV9NQVhfQ09OVEVYVF9IV19JRF9XSVRIX0dVQyBHVUNf TUFYX1NUQUdFX0RFU0NSSVBUT1JTCj4+ICsjZGVmaW5lIEdFTjExX01BWF9DT05URVhUX0hXX0lE X1dJVEhfR1VDIEdVQ19NQVhfUFBBTF9TVEFHRV9ERVNDUklQVE9SUwo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IGxpc3RfaGVhZCBod19pZF9saXN0Owo+PiDCoMKgwqDCoMKgIH0gY29udGV4 dHM7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0 LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4+IGluZGV4 IDU1MmQyZTEwOGRlNC4uYzIzOWQ5YjkzMDdjIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fY29udGV4dC5jCj4+IEBAIC0yODQsMTAgKzI4NCwxNSBAQCBzdGF0aWMgdm9pZCBj b250ZXh0X2Nsb3NlKHN0cnVjdCAKPj4gaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+PiDCoMKgwqDC oMKgIGk5MTVfZ2VtX2NvbnRleHRfc2V0X2Nsb3NlZChjdHgpOwo+PiDCoMKgwqDCoMKgIC8qCj4+ IC3CoMKgwqDCoCAqIFRoaXMgY29udGV4dCB3aWxsIG5ldmVyIGFnYWluIGJlIGFzc2luZ2VkIHRv IEhXLCBzbyB3ZSBjYW4KPj4gK8KgwqDCoMKgICogVGhpcyBjb250ZXh0IHdpbGwgbmV2ZXIgYWdh aW4gYmUgYXNzaWduZWQgdG8gSFcsIHNvIHdlIGNhbgo+PiDCoMKgwqDCoMKgwqAgKiByZXVzZSBp dHMgSUQgZm9yIHRoZSBuZXh0IGNvbnRleHQuCj4+ICvCoMKgwqDCoCAqCj4+ICvCoMKgwqDCoCAq IGlmIEd1QyBpcyBpbiB1c2UsIHdlIG5lZWQgdG8ga2VlcCB0aGUgSUQgdW50aWwgR3VDIGhhcyBm aW5pc2hlZAo+PiArwqDCoMKgwqAgKiBwcm9jZXNzaW5nIGFsbCBzdWJtaXR0ZWQgcmVxdWVzdHMg YmVjYXVzZSB0aGUgSUQgaXMgdXNlZCBieSB0aGUKPj4gK8KgwqDCoMKgICogZmlybXdhcmUgdG8g aW5kZXggdGhlIGd1YyBzdGFnZV9kZXNjIHBvb2wuCj4+IMKgwqDCoMKgwqDCoCAqLwo+PiAtwqDC oMKgIHJlbGVhc2VfaHdfaWQoY3R4KTsKPj4gK8KgwqDCoCBpZiAoIVVTRVNfR1VDX1NVQk1JU1NJ T04oY3R4LT5pOTE1KSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJlbGVhc2VfaHdfaWQoY3R4KTsKPj4g wqDCoMKgwqDCoCAvKgo+PiDCoMKgwqDCoMKgwqAgKiBUaGUgTFVUIHVzZXMgdGhlIFZNQSBhcyBh IGJhY2twb2ludGVyIHRvIHVucmVmIHRoZSBvYmplY3QsCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9ndWMuaAo+PiBpbmRleCAxMWIzODgyNDgyZjQuLjA1ZWU0NGZiNjZhZiAxMDA2NDQKPj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPj4gQEAgLTU4LDEwICs1OCwxNCBAQCBzdHJ1Y3QgaW50ZWxf Z3VjIHsKPj4gwqDCoMKgwqDCoCBib29sIGludGVycnVwdHNfZW5hYmxlZDsKPj4gwqDCoMKgwqDC oCB1bnNpZ25lZCBpbnQgbXNnX2VuYWJsZWRfbWFzazsKPj4gK8KgwqDCoCBzdHJ1Y3QgaWRhIGNs aWVudF9pZHM7Cj4+ICsjZGVmaW5lIEdVQ19NQVhfQ0xJRU5UX0lEUyAyCj4+ICsKPj4gwqDCoMKg wqDCoCBzdHJ1Y3QgaTkxNV92bWEgKmFkc192bWE7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGk5MTVf dm1hICpzdGFnZV9kZXNjX3Bvb2w7Cj4+IMKgwqDCoMKgwqAgdm9pZCAqc3RhZ2VfZGVzY19wb29s X3ZhZGRyOwo+PiAtwqDCoMKgIHN0cnVjdCBpZGEgc3RhZ2VfaWRzOwo+PiArI2RlZmluZcKgwqDC oCBHVUNfTUFYX1BQQUxfU1RBR0VfREVTQ1JJUFRPUlMgKEdVQ19NQVhfU1RBR0VfREVTQ1JJUFRP UlMgCj4+IC0gR1VDX01BWF9DTElFTlRfSURTKQo+PiArCj4+IMKgwqDCoMKgwqAgc3RydWN0IGk5 MTVfdm1hICpzaGFyZWRfZGF0YTsKPj4gwqDCoMKgwqDCoCB2b2lkICpzaGFyZWRfZGF0YV92YWRk cjsKPj4gQEAgLTk0LDYgKzk4LDE0IEBAIHN0cnVjdCBpbnRlbF9ndWMgewo+PiDCoMKgwqDCoMKg IC8qIEd1QydzIEZXIHNwZWNpZmljIG5vdGlmeSBmdW5jdGlvbiAqLwo+PiDCoMKgwqDCoMKgIHZv aWQgKCpub3RpZnkpKHN0cnVjdCBpbnRlbF9ndWMgKmd1Yyk7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+ PiArwqDCoMKgwqAgKiBPdmVycmlkZSB0aGUgZmlyc3Qgc3RhZ2VfZGVzYyB0byBiZSB1c2VkIGFz IHByb3h5Cj4+ICvCoMKgwqDCoCAqIChEZWZhdWx0OiBHVUNfTUFYX1BQQUxfU1RBR0VfREVTQ1JJ UFRPUlMpLiBUaGUgbWF4IG51bWJlciBvZiBwcGFsCj4+ICvCoMKgwqDCoCAqIGRlc2NyaXB0b3Jz IGlzIG5vdCB1cGRhdGVkIGFjY29yZGluZ2x5IHNpbmNlIHRoZSB0ZXN0IHVzaW5nIAo+PiB0aGlz IGRvZXMKPj4gK8KgwqDCoMKgICogbm90IGFsbG9jYXRlIGFueSBjb250ZXh0Lgo+PiArwqDCoMKg wqAgKi8KPj4gK8KgwqDCoCBJOTE1X1NFTEZURVNUX0RFQ0xBUkUodTMyIHN0YXJ0aW5nX3Byb3h5 X2lkKTsKPj4gwqAgfTsKPj4gwqAgc3RhdGljIGlubGluZSBib29sIGludGVsX2d1Y19pc19hbGl2 ZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9ndWNfZndpZi5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1 Y19md2lmLmgKPj4gaW5kZXggY2UzYWI2ZWQyMWQ1Li4xYTBmNDFhMjYxNzMgMTAwNjQ0Cj4+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19md2lmLmgKPj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3aWYuaAo+PiBAQCAtMzIsNiArMzIsOCBAQAo+PiDC oCAjZGVmaW5lIEdVQ19NQVhfU1RBR0VfREVTQ1JJUFRPUlPCoMKgwqAgMTAyNAo+PiDCoCAjZGVm aW5lwqDCoMKgIEdVQ19JTlZBTElEX1NUQUdFX0lEwqDCoMKgwqDCoMKgwqAgR1VDX01BWF9TVEFH RV9ERVNDUklQVE9SUwo+PiArI2RlZmluZSBHVUNfTUFYX0xSQ19QRVJfQ0xBU1PCoMKgwqDCoMKg wqDCoCA2NAo+PiArCj4+IMKgICNkZWZpbmUgR1VDX1JFTkRFUl9FTkdJTkXCoMKgwqDCoMKgwqDC oCAwCj4+IMKgICNkZWZpbmUgR1VDX1ZJREVPX0VOR0lORcKgwqDCoMKgwqDCoMKgIDEKPj4gwqAg I2RlZmluZSBHVUNfQkxJVFRFUl9FTkdJTkXCoMKgwqDCoMKgwqDCoCAyCj4+IEBAIC02Niw5ICs2 OCwxMiBAQAo+PiDCoCAjZGVmaW5lIEdVQ19ET09SQkVMTF9ESVNBQkxFRMKgwqDCoMKgwqDCoMKg IDAKPj4gwqAgI2RlZmluZSBHVUNfU1RBR0VfREVTQ19BVFRSX0FDVElWRcKgwqDCoCBCSVQoMCkK Pj4gLSNkZWZpbmUgR1VDX1NUQUdFX0RFU0NfQVRUUl9QRU5ESU5HX0RCwqDCoMKgIEJJVCgxKQo+ PiAtI2RlZmluZSBHVUNfU1RBR0VfREVTQ19BVFRSX0tFUk5FTMKgwqDCoCBCSVQoMikKPj4gLSNk ZWZpbmUgR1VDX1NUQUdFX0RFU0NfQVRUUl9QUkVFTVBUwqDCoMKgIEJJVCgzKQo+PiArI2RlZmlu ZSBHVUNfU1RBR0VfREVTQ19BVFRSX1RZUEVfU0hJRlTCoMKgwqAgMQo+PiArI2RlZmluZSBHVUNf U1RBR0VfREVTQ19BVFRSX1BSSU5DSVBBTMKgwqDCoCAoMHgwIDw8IAo+PiBHVUNfU1RBR0VfREVT Q19BVFRSX1RZUEVfU0hJRlQpCj4+ICsjZGVmaW5lIEdVQ19TVEFHRV9ERVNDX0FUVFJfUFJPWFnC oMKgwqAgKDB4MSA8PCAKPj4gR1VDX1NUQUdFX0RFU0NfQVRUUl9UWVBFX1NISUZUKQo+PiArI2Rl ZmluZSBHVUNfU1RBR0VfREVTQ19BVFRSX1JFQUzCoMKgwqAgKDB4MiA8PCAKPj4gR1VDX1NUQUdF X0RFU0NfQVRUUl9UWVBFX1NISUZUKQo+PiArI2RlZmluZSBHVUNfU1RBR0VfREVTQ19BVFRSX1RZ UEVfTUFTS8KgwqDCoCAoMHgzIDw8IAo+PiBHVUNfU1RBR0VfREVTQ19BVFRSX1RZUEVfU0hJRlQp Cj4+ICsjZGVmaW5lIEdVQ19TVEFHRV9ERVNDX0FUVFJfS0VSTkVMwqDCoMKgICgxIDw8IDMpCj4+ IMKgICNkZWZpbmUgR1VDX1NUQUdFX0RFU0NfQVRUUl9SRVNFVMKgwqDCoCBCSVQoNCkKPj4gwqAg I2RlZmluZSBHVUNfU1RBR0VfREVTQ19BVFRSX1dRTE9DS0VEwqDCoMKgIEJJVCg1KQo+PiDCoCAj ZGVmaW5lIEdVQ19TVEFHRV9ERVNDX0FUVFJfUENIwqDCoMKgwqDCoMKgwqAgQklUKDYpCj4+IEBA IC0yNzcsOSArMjgyLDEwIEBAIHN0cnVjdCBndWNfcHJvY2Vzc19kZXNjIHsKPj4gwqDCoMKgwqDC oCB1NjQgd3FfYmFzZV9hZGRyOwo+PiDCoMKgwqDCoMKgIHUzMiB3cV9zaXplX2J5dGVzOwo+PiDC oMKgwqDCoMKgIHUzMiB3cV9zdGF0dXM7Cj4+IC3CoMKgwqAgdTMyIGVuZ2luZV9wcmVzZW5jZTsK Pj4gwqDCoMKgwqDCoCB1MzIgcHJpb3JpdHk7Cj4+IC3CoMKgwqAgdTMyIHJlc2VydmVkWzMwXTsK Pj4gK8KgwqDCoCB1MzIgdG9rZW47Cj4+ICvCoMKgwqAgdTMyIHF1ZXVlX2VuZ2luZV9lcnJvcjsK Pj4gK8KgwqDCoCB1MzIgcmVzZXJ2ZWRbMjNdOwo+PiDCoCB9IF9fcGFja2VkOwo+PiDCoCAvKiBl bmdpbmUgaWQgYW5kIGNvbnRleHQgaWQgaXMgcGFja2VkIGludG8gCj4+IGd1Y19leGVjbGlzdF9j b250ZXh0LmNvbnRleHRfaWQqLwo+PiBAQCAtMjg4LDE4ICsyOTQsMjAgQEAgc3RydWN0IGd1Y19w cm9jZXNzX2Rlc2Mgewo+PiDCoCAvKiBUaGUgZXhlY2xpc3QgY29udGV4dCBpbmNsdWRpbmcgc29m dHdhcmUgYW5kIEhXIGluZm9ybWF0aW9uICovCj4+IMKgIHN0cnVjdCBndWNfZXhlY2xpc3RfY29u dGV4dCB7Cj4+IC3CoMKgwqAgdTMyIGNvbnRleHRfZGVzYzsKPj4gLcKgwqDCoCB1MzIgY29udGV4 dF9pZDsKPj4gLcKgwqDCoCB1MzIgcmluZ19zdGF0dXM7Cj4+IC3CoMKgwqAgdTMyIHJpbmdfbHJj YTsKPj4gK8KgwqDCoCB1NjQgaHdfY29udGV4dF9kZXNjOwo+PiArwqDCoMKgIHUzMiByZXNlcnZl ZDA7Cj4+ICvCoMKgwqAgdTMyIHJpbmdfbHJjOwo+PiDCoMKgwqDCoMKgIHUzMiByaW5nX2JlZ2lu Owo+PiDCoMKgwqDCoMKgIHUzMiByaW5nX2VuZDsKPj4gwqDCoMKgwqDCoCB1MzIgcmluZ19uZXh0 X2ZyZWVfbG9jYXRpb247Cj4+IMKgwqDCoMKgwqAgdTMyIHJpbmdfY3VycmVudF90YWlsX3BvaW50 ZXJfdmFsdWU7Cj4+IC3CoMKgwqAgdTggZW5naW5lX3N0YXRlX3N1Ym1pdF92YWx1ZTsKPj4gLcKg wqDCoCB1OCBlbmdpbmVfc3RhdGVfd2FpdF92YWx1ZTsKPj4gLcKgwqDCoCB1MTYgcGFnZWZhdWx0 X2NvdW50Owo+PiAtwqDCoMKgIHUxNiBlbmdpbmVfc3VibWl0X3F1ZXVlX2NvdW50Owo+PiArwqDC oMKgIHUzMiBlbmdpbmVfc3RhdGVfd2FpdF92YWx1ZTsKPj4gK8KgwqDCoCB1MzIgc3RhdGVfcmVz ZXJ2ZWQ7Cj4+ICvCoMKgwqAgdTMyIGlzX3ByZXNlbnRfaW5fc3E7Cj4+ICvCoMKgwqAgdTMyIHN5 bmNfdmFsdWU7Cj4+ICvCoMKgwqAgdTMyIHN5bmNfYWRkcjsKPj4gK8KgwqDCoCB1MzIgc2xwY19o aW50czsKPj4gK8KgwqDCoCB1MzIgcmVzZXJ2ZWQxWzRdOwo+PiDCoCB9IF9fcGFja2VkOwo+PiDC oCAvKgo+PiBAQCAtMzEyLDM2ICszMjAsMzMgQEAgc3RydWN0IGd1Y19leGVjbGlzdF9jb250ZXh0 IHsKPj4gwqDCoCAqIHdpdGggdGhlIEd1QywgYmVpbmcgYWxsb2NhdGVkIGJlZm9yZSB0aGUgR3VD IGlzIGxvYWRlZCB3aXRoIGl0cyAKPj4gZmlybXdhcmUuCj4+IMKgwqAgKi8KPj4gwqAgc3RydWN0 IGd1Y19zdGFnZV9kZXNjIHsKPj4gLcKgwqDCoCB1MzIgc2NoZWRfY29tbW9uX2FyZWE7Cj4+ICvC oMKgwqAgdTY0IGRlc2NfcHJpdmF0ZTsKPj4gwqDCoMKgwqDCoCB1MzIgc3RhZ2VfaWQ7Cj4+IC3C oMKgwqAgdTMyIHBhc19pZDsKPj4gLcKgwqDCoCB1OCBlbmdpbmVzX3VzZWQ7Cj4+ICvCoMKgwqAg dTMyIHByb3h5X2lkOwo+PiDCoMKgwqDCoMKgIHU2NCBkYl90cmlnZ2VyX2NwdTsKPj4gwqDCoMKg wqDCoCB1MzIgZGJfdHJpZ2dlcl91azsKPj4gwqDCoMKgwqDCoCB1NjQgZGJfdHJpZ2dlcl9waHk7 Cj4+IC3CoMKgwqAgdTE2IGRiX2lkOwo+PiAtCj4+IC3CoMKgwqAgc3RydWN0IGd1Y19leGVjbGlz dF9jb250ZXh0IGxyY1tHVUNfTUFYX0VOR0lORVNfTlVNXTsKPj4gLQo+PiAtwqDCoMKgIHU4IGF0 dHJpYnV0ZTsKPj4gLQo+PiAtwqDCoMKgIHUzMiBwcmlvcml0eTsKPj4gLQo+PiArwqDCoMKgIHUz MiBkYl9pZDsKPj4gK8KgwqDCoCBzdHJ1Y3QgZ3VjX2V4ZWNsaXN0X2NvbnRleHQgCj4+IGxyY1tH VUNfTUFYX0VOR0lORV9DTEFTU0VTXVtHVUNfTUFYX0xSQ19QRVJfQ0xBU1NdOwo+PiArwqDCoMKg IHN0cnVjdCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCB1NjQgYml0bWFwOwo+PiArwqDCoMKgwqDCoMKg wqAgdTMyIHJlc2VydmVkMDsKPj4gK8KgwqDCoCB9IF9fcGFja2VkIGxyY19hbGxvY19tYXBbR1VD X01BWF9FTkdJTkVfQ0xBU1NFU107Cj4+ICvCoMKgwqAgdTMyIGxyY19jb3VudDsKPj4gK8KgwqDC oCB1MzIgbWF4X2xyY19wZXJfY2xhc3M7Cj4+ICvCoMKgwqAgdTMyIGF0dHJpYnV0ZTsgLyogR1VD X1NUQUdFX0RFU0NfQVRUUl94eHggKi8KPj4gK8KgwqDCoCB1MzIgcHJpb3JpdHk7IC8qIEdVQ19D TElFTlRfUFJJT1JJVFlfeHh4ICovCj4+IMKgwqDCoMKgwqAgdTMyIHdxX3NhbXBsZWRfdGFpbF9v ZmZzZXQ7Cj4+IMKgwqDCoMKgwqAgdTMyIHdxX3RvdGFsX3N1Ym1pdF9lbnF1ZXVlczsKPj4gLQo+ PiDCoMKgwqDCoMKgIHUzMiBwcm9jZXNzX2Rlc2M7Cj4+IMKgwqDCoMKgwqAgdTMyIHdxX2FkZHI7 Cj4+IMKgwqDCoMKgwqAgdTMyIHdxX3NpemU7Cj4+IC0KPj4gLcKgwqDCoCB1MzIgZW5naW5lX3By ZXNlbmNlOwo+PiAtCj4+IC3CoMKgwqAgdTggZW5naW5lX3N1c3BlbmRlZDsKPj4gLQo+PiAtwqDC oMKgIHU4IHJlc2VydmVkMFszXTsKPj4gLcKgwqDCoCB1NjQgcmVzZXJ2ZWQxWzFdOwo+PiAtCj4+ IC3CoMKgwqAgdTY0IGRlc2NfcHJpdmF0ZTsKPj4gK8KgwqDCoCB1MzIgZmVhdHVyZTA7Cj4+ICvC oMKgwqAgdTMyIGZlYXR1cmUxOwo+PiArwqDCoMKgIHUzMiBmZWF0dXJlMjsKPj4gK8KgwqDCoCB1 MzIgcXVldWVfZW5naW5lX2Vycm9yOwo+PiArwqDCoMKgIHUzMiByZXNlcnZlZFsyXTsKPj4gK8Kg wqDCoCB1NjQgcmVzZXJ2ZWQzWzEyXTsKPj4gwqAgfSBfX3BhY2tlZDsKPj4gwqAgLyoqCj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfc3VibWlzc2lvbi5jIAo+ PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKPj4gaW5kZXgg ZWFlNjY4NDQyZWJlLi45YmY4ZWJiYzRkZTEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYwo+PiBAQCAtNDYsMTcgKzQ2LDIyIEBACj4+IMKgwqAg KiB0aGF0IGNvbnRhaW5zIGFsbCByZXF1aXJlZCBwYWdlcyBmb3IgdGhlc2UgZWxlbWVudHMpLgo+ PiDCoMKgICoKPj4gwqDCoCAqIEd1QyBzdGFnZSBkZXNjcmlwdG9yOgo+PiAtICogRHVyaW5nIGlu aXRpYWxpemF0aW9uLCB0aGUgZHJpdmVyIGFsbG9jYXRlcyBhIHN0YXRpYyBwb29sIG9mIDEwMjQg Cj4+IHN1Y2gKPj4gLSAqIGRlc2NyaXB0b3JzLCBhbmQgc2hhcmVzIHRoZW0gd2l0aCB0aGUgR3VD Lgo+PiAtICogQ3VycmVudGx5LCB0aGVyZSBleGlzdHMgYSAxOjEgbWFwcGluZyBiZXR3ZWVuIGEg aW50ZWxfZ3VjX2NsaWVudCAKPj4gYW5kIGEKPj4gLSAqIGd1Y19zdGFnZV9kZXNjICh2aWEgdGhl IGNsaWVudCdzIHN0YWdlX2lkKSwgc28gZWZmZWN0aXZlbHkgb25seSBvbmUKPj4gLSAqIGdldHMg dXNlZC4gVGhpcyBzdGFnZSBkZXNjcmlwdG9yIGxldHMgdGhlIEd1QyBrbm93IGFib3V0IHRoZSAK Pj4gZG9vcmJlbGwsCj4+IC0gKiB3b3JrcXVldWUgYW5kIHByb2Nlc3MgZGVzY3JpcHRvci4gVGhl b3JldGljYWxseSwgaXQgYWxzbyBsZXRzIHRoZSBHdUMKPj4gLSAqIGtub3cgYWJvdXQgb3VyIEhX IGNvbnRleHRzIChjb250ZXh0IElELCBldGMuLi4pLCBidXQgd2UgYWN0dWFsbHkKPj4gLSAqIGVt cGxveSBhIGtpbmQgb2Ygc3VibWlzc2lvbiB3aGVyZSB0aGUgR3VDIHVzZXMgdGhlIExSQ0Egc2Vu dCB2aWEgCj4+IHRoZSB3b3JrCj4+IC0gKiBpdGVtIGluc3RlYWQgKHRoZSBzaW5nbGUgZ3VjX3N0 YWdlX2Rlc2MgYXNzb2NpYXRlZCB0byBleGVjYnVmIGNsaWVudAo+PiAtICogY29udGFpbnMgaW5m b3JtYXRpb24gYWJvdXQgdGhlIGRlZmF1bHQga2VybmVsIGNvbnRleHQgb25seSwgYnV0IAo+PiB0 aGlzIGlzCj4+IC0gKiBlc3NlbnRpYWxseSB1bnVzZWQpLiBUaGlzIGlzIGNhbGxlZCBhICJwcm94 eSIgc3VibWlzc2lvbi4KPj4gKyAqIER1cmluZyBpbml0aWFsaXphdGlvbiwgdGhlIGRyaXZlciBh bGxvY2F0ZXMgYSBzdGF0aWMgcG9vbCBvZiAKPj4gZGVzY3JpcHRvcnMKPj4gKyAqIGFuZCBzaGFy ZXMgdGhlbSB3aXRoIHRoZSBHdUMuIFRoaXMgc3RhZ2UgZGVzY3JpcHRvciBsZXRzIHRoZSBHdUMg Cj4+IGtub3cgYWJvdXQKPiBTZW50ZW5jZSBtaXNzaW5nIGRlZmluaXRpb24gb2YgInRoaXMgc3Rh Z2UgZGVzY3JpcHRvciIsIGllLiAiRWFjaCBlbnRyeSAKPiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo ZSBwb29sIHJlcHJlc2VudHMgb25lIGd1Y19zdGFnZV9kZXNjLiBUaGVzZSBzdGFnZSAKPiBkZXNj cmlwdG9ycy4uLiIKCldpbGwgYWRkCgo+PiArICogdGhlIGRvb3JiZWxsLCB3b3JrcXVldWUgYW5k IHByb2Nlc3MgZGVzY3JpcHRvciwgYWRkaXRpb25hbGx5IGl0IAo+PiBzdG9yZXMKPj4gKyAqIGlu Zm9ybWF0aW9uIGFib3V0IGFsbCBwb3NzaWJsZSBIVyBjb250ZXh0cyB0aGF0IHVzZSBpdCAoNjQg eCAKPj4gbnVtYmVyIG9mCj4+ICsgKiBlbmdpbmUgY2xhc3NlcyBvZiBndWNfZXhlY2xpc3RfY29u dGV4dCBzdHJ1Y3RzKS4KPj4gKyAqCj4+ICsgKiBUaGUgaWRlYSBpcyB0aGF0IGV2ZXJ5IGRpcmVj dC1zdWJtaXNzaW9uIEd1QyBjbGllbnQgZ2V0cyBvbmUgU1cgCj4+IENvbnRleHQgSUQKPj4gKyAq IGFuZCBldmVyeSBIVyBjb250ZXh0IGNyZWF0ZWQgYnkgdGhhdCBjbGllbnQgZ2V0cyBvbmUgU1cg Q291bnRlci4gCj4+IFRoZSAiU1cKPj4gKyAqIENvbnRleHQgSUQiIGFuZCAiU1cgQ291bnRlciIg dG8gdXNlIG5vdyBnZXQgcGFzc2VkIG9uIGV2ZXJ5IHdvcmsgCj4+IHF1ZXVlIGl0ZW0uCj4+ICsg Kgo+PiArICogQnV0IHdlIGRvbid0IGhhdmUgZGlyZWN0IHN1Ym1pc3Npb24geWV0OiBkb2VzIHRo YXQgbWVhbiB3ZSBhcmUgCj4+IGxpbWl0ZWQgdG8gNjQKPj4gKyAqIGNvbnRleHRzIGluIHRvdGFs IChvbmUgY2xpZW50KT8gTm90IHJlYWxseTogd2UgY2FuIHVzZSBleHRyYSBHdUMgCj4+IGNvbnRl eHQKPj4gKyAqIGRlc2NyaXB0b3JzIHRvIHN0b3JlIG1vcmUgSFcgY29udGV4dHMuIFRoZXkgYXJl IHNwZWNpYWwgaW4gdGhhdCAKPj4gdGhleSBkb24ndAo+PiArICogaGF2ZSB0aGVpciBvd24gd29y ayBxdWV1ZSwgZG9vcmJlbGwgb3IgcHJvY2VzcyBkZXNjcmlwdG9yLiAKPj4gSW5zdGVhZCwgdGhl c2UKPj4gKyAqICJwcmluY2lwYWwiIEd1QyBjb250ZXh0IGRlc2NyaXB0b3JzIHVzZSB0aGUgb25l IHRoYXQgYmVsb25ncyB0byAKPj4gdGhlIGNsaWVudAo+PiArICogYXMgYSAicHJveHkiIGZvciBz dWJtaXNzaW9uIChhIGdlbmVyYWxpemF0aW9uIG9mIHRoZSBvbGQgcHJveHkgCj4+IHN1Ym1pc3Np b24pLgo+PiDCoMKgICoKPj4gwqDCoCAqIFRoZSBTY3JhdGNoIHJlZ2lzdGVyczoKPj4gwqDCoCAq IFRoZXJlIGFyZSAxNiBNTUlPLWJhc2VkIHJlZ2lzdGVycyBzdGFydCBmcm9tIDB4QzE4MC4gVGhl IGtlcm5lbCAKPj4gZHJpdmVyIHdyaXRlcwo+PiBAQCAtMTY0LDExICsxNjksMjggQEAgc3RhdGlj IGludCBfX2d1Y19kZWFsbG9jYXRlX2Rvb3JiZWxsKHN0cnVjdCAKPj4gaW50ZWxfZ3VjICpndWMs IHUzMiBzdGFnZV9pZCkKPj4gwqDCoMKgwqDCoCByZXR1cm4gaW50ZWxfZ3VjX3NlbmQoZ3VjLCBh Y3Rpb24sIEFSUkFZX1NJWkUoYWN0aW9uKSk7Cj4+IMKgIH0KPj4gLXN0YXRpYyBzdHJ1Y3QgZ3Vj X3N0YWdlX2Rlc2MgKl9fZ2V0X3N0YWdlX2Rlc2Moc3RydWN0IAo+PiBpbnRlbF9ndWNfY2xpZW50 ICpjbGllbnQpCj4+ICtzdGF0aWMgc3RydWN0IGd1Y19zdGFnZV9kZXNjICpfX2dldF9zdGFnZV9k ZXNjKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgCj4+IHUzMiBpbmRleCkKPj4gK3sKPj4gK8KgwqDC oCBzdHJ1Y3QgZ3VjX3N0YWdlX2Rlc2MgKmJhc2UgPSBndWMtPnN0YWdlX2Rlc2NfcG9vbF92YWRk cjsKPj4gKwo+PiArwqDCoMKgIEdFTV9CVUdfT04oIVVTRVNfR1VDX1NVQk1JU1NJT04oZ3VjX3Rv X2k5MTUoZ3VjKSkpOwo+PiArwqDCoMKgIEdFTV9CVUdfT04oaW5kZXggPj0gR1VDX01BWF9TVEFH RV9ERVNDUklQVE9SUyk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gJmJhc2VbaW5kZXhdOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGd1Y19zdGFnZV9kZXNjICpfX2dldF9wcm94eV9zdGFn ZV9kZXNjKHN0cnVjdCAKPj4gaW50ZWxfZ3VjX2NsaWVudCAqY2xpZW50KQo+PiDCoCB7Cj4+IC3C oMKgwqAgc3RydWN0IGd1Y19zdGFnZV9kZXNjICpiYXNlID0gY2xpZW50LT5ndWMtPnN0YWdlX2Rl c2NfcG9vbF92YWRkcjsKPj4gK8KgwqDCoCBHRU1fQlVHX09OKCFJOTE1X1NFTEZURVNUX09OTFko Y2xpZW50LT5ndWMtPnN0YXJ0aW5nX3Byb3h5X2lkKSAmJgo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjbGllbnQtPnN0YWdlX2lkIDwgR1VDX01BWF9QUEFMX1NUQUdFX0RFU0NSSVBUT1JTKTsK Pj4gK8KgwqDCoCByZXR1cm4gX19nZXRfc3RhZ2VfZGVzYyhjbGllbnQtPmd1YywgY2xpZW50LT5z dGFnZV9pZCk7Cj4+ICt9Cj4+IC3CoMKgwqAgcmV0dXJuICZiYXNlW2NsaWVudC0+c3RhZ2VfaWRd Owo+PiArc3RhdGljIHN0cnVjdCBndWNfc3RhZ2VfZGVzYyAqX19nZXRfcHBhbF9zdGFnZV9kZXNj KHN0cnVjdCBpbnRlbF9ndWMgCj4+ICpndWMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGluZGV4KQo+PiArewo+PiArwqDCoMKg IEdFTV9CVUdfT04oaW5kZXggPj0gR1VDX01BWF9QUEFMX1NUQUdFX0RFU0NSSVBUT1JTKTsKPj4g K8KgwqDCoCByZXR1cm4gX19nZXRfc3RhZ2VfZGVzYyhndWMsIGluZGV4KTsKPj4gwqAgfQo+PiDC oCAvKgo+PiBAQCAtMTgzLDcgKzIwNSw3IEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2Rvb3JiZWxs X2Rlc2Moc3RydWN0IAo+PiBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQsIHUxNiBuZXdfaWQpCj4+ IMKgwqDCoMKgwqAgc3RydWN0IGd1Y19zdGFnZV9kZXNjICpkZXNjOwo+PiDCoMKgwqDCoMKgIC8q IFVwZGF0ZSB0aGUgR3VDJ3MgaWRlYSBvZiB0aGUgZG9vcmJlbGwgSUQgKi8KPj4gLcKgwqDCoCBk ZXNjID0gX19nZXRfc3RhZ2VfZGVzYyhjbGllbnQpOwo+PiArwqDCoMKgIGRlc2MgPSBfX2dldF9w cm94eV9zdGFnZV9kZXNjKGNsaWVudCk7Cj4+IMKgwqDCoMKgwqAgZGVzYy0+ZGJfaWQgPSBuZXdf aWQ7Cj4+IMKgIH0KPj4gQEAgLTMyOSwxNCArMzUxLDEyIEBAIHN0YXRpYyBpbnQgZ3VjX3N0YWdl X2Rlc2NfcG9vbF9jcmVhdGUoc3RydWN0IAo+PiBpbnRlbF9ndWMgKmd1YykKPj4gwqDCoMKgwqDC oCBndWMtPnN0YWdlX2Rlc2NfcG9vbCA9IHZtYTsKPj4gwqDCoMKgwqDCoCBndWMtPnN0YWdlX2Rl c2NfcG9vbF92YWRkciA9IHZhZGRyOwo+PiAtwqDCoMKgIGlkYV9pbml0KCZndWMtPnN0YWdlX2lk cyk7Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+IMKgIH0KPj4gwqAgc3RhdGljIHZvaWQgZ3Vj X3N0YWdlX2Rlc2NfcG9vbF9kZXN0cm95KHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPj4gwqAgewo+ PiAtwqDCoMKgIGlkYV9kZXN0cm95KCZndWMtPnN0YWdlX2lkcyk7Cj4+IMKgwqDCoMKgwqAgaTkx NV92bWFfdW5waW5fYW5kX3JlbGVhc2UoJmd1Yy0+c3RhZ2VfZGVzY19wb29sLCAKPj4gSTkxNV9W TUFfUkVMRUFTRV9NQVApOwo+PiDCoCB9Cj4+IEBAIC0zNDcsNzggKzM2NywyNiBAQCBzdGF0aWMg dm9pZCBndWNfc3RhZ2VfZGVzY19wb29sX2Rlc3Ryb3koc3RydWN0IAo+PiBpbnRlbF9ndWMgKmd1 YykKPj4gwqDCoCAqIGRhdGEgc3RydWN0dXJlcyByZWxhdGluZyB0byB0aGlzIGNsaWVudCAoZG9v cmJlbGwsIHByb2Nlc3MgCj4+IGRlc2NyaXB0b3IsCj4+IMKgwqAgKiB3cml0ZSBxdWV1ZSwgZXRj KS4KPj4gwqDCoCAqLwo+PiAtc3RhdGljIHZvaWQgZ3VjX3N0YWdlX2Rlc2NfaW5pdChzdHJ1Y3Qg aW50ZWxfZ3VjX2NsaWVudCAqY2xpZW50KQo+PiArc3RhdGljIHZvaWQgZ3VjX3Byb3h5X3N0YWdl X2Rlc2NfaW5pdChzdHJ1Y3QgaW50ZWxfZ3VjX2NsaWVudCAqY2xpZW50KQo+PiDCoCB7Cj4+IC3C oMKgwqAgc3RydWN0IGludGVsX2d1YyAqZ3VjID0gY2xpZW50LT5ndWM7Cj4+IC3CoMKgwqAgc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKPj4gLcKg wqDCoCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4+IC3CoMKgwqAgc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eCA9IGNsaWVudC0+b3duZXI7Cj4+IMKgwqDCoMKgwqAgc3RydWN0 IGd1Y19zdGFnZV9kZXNjICpkZXNjOwo+PiAtwqDCoMKgIHVuc2lnbmVkIGludCB0bXA7Cj4+IMKg wqDCoMKgwqAgdTMyIGdmeF9hZGRyOwo+PiAtwqDCoMKgIGRlc2MgPSBfX2dldF9zdGFnZV9kZXNj KGNsaWVudCk7Cj4+ICvCoMKgwqAgZGVzYyA9IF9fZ2V0X3Byb3h5X3N0YWdlX2Rlc2MoY2xpZW50 KTsKPj4gwqDCoMKgwqDCoCBtZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7Cj4+IMKgwqDC oMKgwqAgZGVzYy0+YXR0cmlidXRlID0gR1VDX1NUQUdFX0RFU0NfQVRUUl9BQ1RJVkUgfAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR1VDX1NUQUdFX0RFU0NfQVRUUl9QUk9YWSB8Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHVUNfU1RBR0VfREVTQ19BVFRSX0tFUk5F TDsKPj4gLcKgwqDCoCBpZiAoaXNfaGlnaF9wcmlvcml0eShjbGllbnQpKQo+PiAtwqDCoMKgwqDC oMKgwqAgZGVzYy0+YXR0cmlidXRlIHw9IEdVQ19TVEFHRV9ERVNDX0FUVFJfUFJFRU1QVDsKPj4g wqDCoMKgwqDCoCBkZXNjLT5zdGFnZV9pZCA9IGNsaWVudC0+c3RhZ2VfaWQ7Cj4+IMKgwqDCoMKg wqAgZGVzYy0+cHJpb3JpdHkgPSBjbGllbnQtPnByaW9yaXR5Owo+PiDCoMKgwqDCoMKgIGRlc2Mt PmRiX2lkID0gY2xpZW50LT5kb29yYmVsbF9pZDsKPj4gLcKgwqDCoCBmb3JfZWFjaF9lbmdpbmVf bWFza2VkKGVuZ2luZSwgZGV2X3ByaXYsIGNsaWVudC0+ZW5naW5lcywgdG1wKSB7Cj4+IC3CoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSB0b19pbnRlbF9jb250ZXh0KGN0 eCwgZW5naW5lKTsKPj4gLcKgwqDCoMKgwqDCoMKgIHUzMiBndWNfZW5naW5lX2lkID0gZW5naW5l LT5ndWNfaWQ7Cj4+IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZ3VjX2V4ZWNsaXN0X2NvbnRleHQg KmxyYyA9ICZkZXNjLT5scmNbZ3VjX2VuZ2luZV9pZF07Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKg IC8qIFRPRE86IFdlIGhhdmUgYSBkZXNpZ24gaXNzdWUgdG8gYmUgc29sdmVkIGhlcmUuIE9ubHkg d2hlbiB3ZQo+PiAtwqDCoMKgwqDCoMKgwqDCoCAqIHJlY2VpdmUgdGhlIGZpcnN0IGJhdGNoLCB3 ZSBrbm93IHdoaWNoIGVuZ2luZSBpcyB1c2VkIGJ5IHRoZQo+PiAtwqDCoMKgwqDCoMKgwqDCoCAq IHVzZXIuIEJ1dCBoZXJlIEd1QyBleHBlY3RzIHRoZSBscmMgYW5kIHJpbmcgdG8gYmUgcGlubmVk LiBJdAo+PiAtwqDCoMKgwqDCoMKgwqDCoCAqIGlzIG5vdCBhbiBpc3N1ZSBmb3IgZGVmYXVsdCBj b250ZXh0LCB3aGljaCBpcyB0aGUgb25seSBvbmUKPj4gLcKgwqDCoMKgwqDCoMKgwqAgKiBmb3Ig bm93IHdobyBvd25zIGEgR3VDIGNsaWVudC4gQnV0IGZvciBmdXR1cmUgb3duZXIgb2YgR3VDCj4+ IC3CoMKgwqDCoMKgwqDCoMKgICogY2xpZW50LCBuZWVkIHRvIG1ha2Ugc3VyZSBscmMgaXMgcGlu bmVkIHByaW9yIHRvIGVudGVyIGhlcmUuCj4+IC3CoMKgwqDCoMKgwqDCoMKgICovCj4+IC3CoMKg wqDCoMKgwqDCoCBpZiAoIWNlLT5zdGF0ZSkKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJl YWs7wqDCoMKgIC8qIFhYWDogY29udGludWU/ICovCj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgIC8q Cj4+IC3CoMKgwqDCoMKgwqDCoMKgICogWFhYOiBXaGVuIHRoaXMgaXMgYSBHVUNfU1RBR0VfREVT Q19BVFRSX0tFUk5FTCBjbGllbnQgKHByb3h5Cj4+IC3CoMKgwqDCoMKgwqDCoMKgICogc3VibWlz c2lvbiBvciwgaW4gb3RoZXIgd29yZHMsIG5vdCB1c2luZyBhIGRpcmVjdCBzdWJtaXNzaW9uCj4+ IC3CoMKgwqDCoMKgwqDCoMKgICogbW9kZWwpIHRoZSBLTUQncyBMUkNBIGlzIG5vdCB1c2VkIGZv ciBhbnkgd29yayBzdWJtaXNzaW9uLgo+PiAtwqDCoMKgwqDCoMKgwqDCoCAqIEluc3RlYWQsIHRo ZSBHdUMgdXNlcyB0aGUgTFJDQSBvZiB0aGUgdXNlciBtb2RlIGNvbnRleHQgKHNlZQo+PiAtwqDC oMKgwqDCoMKgwqDCoCAqIGd1Y19hZGRfcmVxdWVzdCBiZWxvdykuCj4+IC3CoMKgwqDCoMKgwqDC oMKgICovCj4+IC3CoMKgwqDCoMKgwqDCoCBscmMtPmNvbnRleHRfZGVzYyA9IGxvd2VyXzMyX2Jp dHMoY2UtPmxyY19kZXNjKTsKPj4gLQo+PiAtwqDCoMKgwqDCoMKgwqAgLyogVGhlIHN0YXRlIHBh Z2UgaXMgYWZ0ZXIgUFBIV1NQICovCj4+IC3CoMKgwqDCoMKgwqDCoCBscmMtPnJpbmdfbHJjYSA9 IGludGVsX2d1Y19nZ3R0X29mZnNldChndWMsIGNlLT5zdGF0ZSkgKwo+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgTFJDX1NUQVRFX1BOICogUEFHRV9TSVpFOwo+PiAtCj4+IC3C oMKgwqDCoMKgwqDCoCAvKiBYWFg6IEluIGRpcmVjdCBzdWJtaXNzaW9uLCB0aGUgR3VDIHdhbnRz IHRoZSBIVyBjb250ZXh0IGlkCj4+IC3CoMKgwqDCoMKgwqDCoMKgICogaGVyZS4gSW4gcHJveHkg c3VibWlzc2lvbiwgaXQgd2FudHMgdGhlIHN0YWdlIGlkCj4+IC3CoMKgwqDCoMKgwqDCoMKgICov Cj4+IC3CoMKgwqDCoMKgwqDCoCBscmMtPmNvbnRleHRfaWQgPSAoY2xpZW50LT5zdGFnZV9pZCA8 PCBHVUNfRUxDX0NUWElEX09GRlNFVCkgfAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIChndWNfZW5naW5lX2lkIDw8IEdVQ19FTENfRU5HSU5FX09GRlNFVCk7Cj4+IC0KPj4gLcKg wqDCoMKgwqDCoMKgIGxyYy0+cmluZ19iZWdpbiA9IGludGVsX2d1Y19nZ3R0X29mZnNldChndWMs IGNlLT5yaW5nLT52bWEpOwo+PiAtwqDCoMKgwqDCoMKgwqAgbHJjLT5yaW5nX2VuZCA9IGxyYy0+ cmluZ19iZWdpbiArIGNlLT5yaW5nLT5zaXplIC0gMTsKPj4gLcKgwqDCoMKgwqDCoMKgIGxyYy0+ cmluZ19uZXh0X2ZyZWVfbG9jYXRpb24gPSBscmMtPnJpbmdfYmVnaW47Cj4+IC3CoMKgwqDCoMKg wqDCoCBscmMtPnJpbmdfY3VycmVudF90YWlsX3BvaW50ZXJfdmFsdWUgPSAwOwo+PiAtCj4+IC3C oMKgwqDCoMKgwqDCoCBkZXNjLT5lbmdpbmVzX3VzZWQgfD0gKDEgPDwgZ3VjX2VuZ2luZV9pZCk7 Cj4+IC3CoMKgwqAgfQo+PiAtCj4+IC3CoMKgwqAgRFJNX0RFQlVHX0RSSVZFUigiSG9zdCBlbmdp bmVzIDB4JXggPT4gR3VDIGVuZ2luZXMgdXNlZCAweCV4XG4iLAo+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNsaWVudC0+ZW5naW5lcywgZGVzYy0+ZW5naW5lc191c2VkKTsKPj4gLcKgwqDC oCBXQVJOX09OKGRlc2MtPmVuZ2luZXNfdXNlZCA9PSAwKTsKPj4gLQo+PiDCoMKgwqDCoMKgIC8q Cj4+IMKgwqDCoMKgwqDCoCAqIFRoZSBkb29yYmVsbCwgcHJvY2VzcyBkZXNjcmlwdG9yLCBhbmQg d29ya3F1ZXVlIGFyZSBhbGwgcGFydHMKPj4gwqDCoMKgwqDCoMKgICogb2YgdGhlIGNsaWVudCBv YmplY3QsIHdoaWNoIHRoZSBHdUMgd2lsbCByZWZlcmVuY2UgdmlhIHRoZSBHR1RUCj4+IMKgwqDC oMKgwqDCoCAqLwo+PiAtwqDCoMKgIGdmeF9hZGRyID0gaW50ZWxfZ3VjX2dndHRfb2Zmc2V0KGd1 YywgY2xpZW50LT52bWEpOwo+PiArwqDCoMKgIGdmeF9hZGRyID0gaW50ZWxfZ3VjX2dndHRfb2Zm c2V0KGNsaWVudC0+Z3VjLCBjbGllbnQtPnZtYSk7Cj4+IMKgwqDCoMKgwqAgZGVzYy0+ZGJfdHJp Z2dlcl9waHkgPSBzZ19kbWFfYWRkcmVzcyhjbGllbnQtPnZtYS0+cGFnZXMtPnNnbCkgKwo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsaWVudC0+ZG9vcmJlbGxfb2Zmc2V0 Owo+PiDCoMKgwqDCoMKgIGRlc2MtPmRiX3RyaWdnZXJfY3B1ID0gcHRyX3RvX3U2NChfX2dldF9k b29yYmVsbChjbGllbnQpKTsKPj4gQEAgLTQzMCwxMSArMzk4LDExIEBAIHN0YXRpYyB2b2lkIGd1 Y19zdGFnZV9kZXNjX2luaXQoc3RydWN0IAo+PiBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4+ IMKgwqDCoMKgwqAgZGVzYy0+ZGVzY19wcml2YXRlID0gcHRyX3RvX3U2NChjbGllbnQpOwo+PiDC oCB9Cj4+IC1zdGF0aWMgdm9pZCBndWNfc3RhZ2VfZGVzY19maW5pKHN0cnVjdCBpbnRlbF9ndWNf Y2xpZW50ICpjbGllbnQpCj4+ICtzdGF0aWMgdm9pZCBndWNfcHJveHlfc3RhZ2VfZGVzY19maW5p KHN0cnVjdCBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBz dHJ1Y3QgZ3VjX3N0YWdlX2Rlc2MgKmRlc2M7Cj4+IC3CoMKgwqAgZGVzYyA9IF9fZ2V0X3N0YWdl X2Rlc2MoY2xpZW50KTsKPj4gK8KgwqDCoCBkZXNjID0gX19nZXRfcHJveHlfc3RhZ2VfZGVzYyhj bGllbnQpOwo+PiDCoMKgwqDCoMKgIG1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKPj4g wqAgfQo+PiBAQCAtNTUzLDcgKzUyMSw3IEBAIHN0YXRpYyB2b2lkIGluamVjdF9wcmVlbXB0X2Nv bnRleHQoc3RydWN0IAo+PiB3b3JrX3N0cnVjdCAqd29yaykKPj4gwqDCoMKgwqDCoCBzdHJ1Y3Qg aW50ZWxfZ3VjICpndWMgPSBjb250YWluZXJfb2YocHJlZW1wdF93b3JrLCB0eXBlb2YoKmd1Yyks Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cHJlZW1wdF93b3JrW2VuZ2luZS0+aWRdKTsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfZ3Vj X2NsaWVudCAqY2xpZW50ID0gZ3VjLT5wcmVlbXB0X2NsaWVudDsKPj4gLcKgwqDCoCBzdHJ1Y3Qg Z3VjX3N0YWdlX2Rlc2MgKnN0YWdlX2Rlc2MgPSBfX2dldF9zdGFnZV9kZXNjKGNsaWVudCk7Cj4+ ICvCoMKgwqAgc3RydWN0IGd1Y19zdGFnZV9kZXNjICpzdGFnZV9kZXNjID0gX19nZXRfcHJveHlf c3RhZ2VfZGVzYyhjbGllbnQpOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSA9IHRvX2ludGVsX2NvbnRleHQoY2xpZW50LT5vd25lciwgZW5naW5lKTsKPj4gwqDCoMKgwqDC oCB1MzIgZGF0YVs3XTsKPj4gQEAgLTkxOSw2ICs4ODcsNyBAQCBndWNfY2xpZW50X2FsbG9jKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaTkx NV92bWEgKnZtYTsKPj4gwqDCoMKgwqDCoCB2b2lkICp2YWRkcjsKPj4gwqDCoMKgwqDCoCBpbnQg cmV0Owo+PiArwqDCoMKgIHUzMiBzdGFydGluZ19pZDsKPj4gwqDCoMKgwqDCoCBjbGllbnQgPSBr emFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7Cj4+IMKgwqDCoMKgwqAgaWYgKCFj bGllbnQpCj4+IEBAIC05MzEsOCArOTAwLDExIEBAIGd1Y19jbGllbnRfYWxsb2Moc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiDCoMKgwqDCoMKgIGNsaWVudC0+ZG9vcmJlbGxf aWQgPSBHVUNfRE9PUkJFTExfSU5WQUxJRDsKPj4gwqDCoMKgwqDCoCBzcGluX2xvY2tfaW5pdCgm Y2xpZW50LT53cV9sb2NrKTsKPj4gLcKgwqDCoCByZXQgPSBpZGFfc2ltcGxlX2dldCgmZ3VjLT5z dGFnZV9pZHMsIDAsIEdVQ19NQVhfU1RBR0VfREVTQ1JJUFRPUlMsCj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoIUk5MTVfU0VM RlRFU1RfT05MWShzdGFydGluZ19pZCA9IGd1Yy0+c3RhcnRpbmdfcHJveHlfaWQpKQo+PiArwqDC oMKgwqDCoMKgwqAgc3RhcnRpbmdfaWQgPSBHVUNfTUFYX1BQQUxfU1RBR0VfREVTQ1JJUFRPUlM7 Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBpZGFfc2ltcGxlX2dldCgmZ3VjLT5jbGllbnRfaWRzLCBz dGFydGluZ19pZCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdVQ19NQVhf U1RBR0VfREVTQ1JJUFRPUlMsIEdGUF9LRVJORUwpOwo+PiDCoMKgwqDCoMKgIGlmIChyZXQgPCAw KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfY2xpZW50Owo+PiBAQCAtOTgzLDcgKzk1 NSw3IEBAIGd1Y19jbGllbnRfYWxsb2Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+PiDCoCBlcnJfdm1hOgo+PiDCoMKgwqDCoMKgIGk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNl KCZjbGllbnQtPnZtYSwgMCk7Cj4+IMKgIGVycl9pZDoKPj4gLcKgwqDCoCBpZGFfc2ltcGxlX3Jl bW92ZSgmZ3VjLT5zdGFnZV9pZHMsIGNsaWVudC0+c3RhZ2VfaWQpOwo+PiArwqDCoMKgIGlkYV9z aW1wbGVfcmVtb3ZlKCZndWMtPmNsaWVudF9pZHMsIGNsaWVudC0+c3RhZ2VfaWQpOwo+PiDCoCBl cnJfY2xpZW50Ogo+PiDCoMKgwqDCoMKgIGtmcmVlKGNsaWVudCk7Cj4+IMKgwqDCoMKgwqAgcmV0 dXJuIEVSUl9QVFIocmV0KTsKPj4gQEAgLTk5Myw3ICs5NjUsNyBAQCBzdGF0aWMgdm9pZCBndWNf Y2xpZW50X2ZyZWUoc3RydWN0IAo+PiBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4+IMKgIHsK Pj4gwqDCoMKgwqDCoCB1bnJlc2VydmVfZG9vcmJlbGwoY2xpZW50KTsKPj4gwqDCoMKgwqDCoCBp OTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFzZSgmY2xpZW50LT52bWEsIEk5MTVfVk1BX1JFTEVBU0Vf TUFQKTsKPj4gLcKgwqDCoCBpZGFfc2ltcGxlX3JlbW92ZSgmY2xpZW50LT5ndWMtPnN0YWdlX2lk cywgY2xpZW50LT5zdGFnZV9pZCk7Cj4+ICvCoMKgwqAgaWRhX3NpbXBsZV9yZW1vdmUoJmNsaWVu dC0+Z3VjLT5jbGllbnRfaWRzLCBjbGllbnQtPnN0YWdlX2lkKTsKPj4gwqDCoMKgwqDCoCBrZnJl ZShjbGllbnQpOwo+PiDCoCB9Cj4+IEBAIC0xMDYzLDcgKzEwMzUsNyBAQCBzdGF0aWMgaW50IF9f Z3VjX2NsaWVudF9lbmFibGUoc3RydWN0IAo+PiBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4+ IMKgwqDCoMKgwqAgaW50IHJldDsKPj4gwqDCoMKgwqDCoCBndWNfcHJvY19kZXNjX2luaXQoY2xp ZW50KTsKPj4gLcKgwqDCoCBndWNfc3RhZ2VfZGVzY19pbml0KGNsaWVudCk7Cj4+ICvCoMKgwqAg Z3VjX3Byb3h5X3N0YWdlX2Rlc2NfaW5pdChjbGllbnQpOwo+PiDCoMKgwqDCoMKgIHJldCA9IGNy ZWF0ZV9kb29yYmVsbChjbGllbnQpOwo+PiDCoMKgwqDCoMKgIGlmIChyZXQpCj4+IEBAIC0xMDcy LDcgKzEwNDQsNyBAQCBzdGF0aWMgaW50IF9fZ3VjX2NsaWVudF9lbmFibGUoc3RydWN0IAo+PiBp bnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+IMKgIGZh aWw6Cj4+IC3CoMKgwqAgZ3VjX3N0YWdlX2Rlc2NfZmluaShjbGllbnQpOwo+PiArwqDCoMKgIGd1 Y19wcm94eV9zdGFnZV9kZXNjX2ZpbmkoY2xpZW50KTsKPj4gwqDCoMKgwqDCoCBndWNfcHJvY19k ZXNjX2ZpbmkoY2xpZW50KTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiDCoCB9Cj4+IEBA IC0xMDg5LDcgKzEwNjEsNyBAQCBzdGF0aWMgdm9pZCBfX2d1Y19jbGllbnRfZGlzYWJsZShzdHJ1 Y3QgCj4+IGludGVsX2d1Y19jbGllbnQgKmNsaWVudCkKPj4gwqDCoMKgwqDCoCBlbHNlCj4+IMKg wqDCoMKgwqDCoMKgwqDCoCBfX2Rlc3Ryb3lfZG9vcmJlbGwoY2xpZW50KTsKPj4gLcKgwqDCoCBn dWNfc3RhZ2VfZGVzY19maW5pKGNsaWVudCk7Cj4+ICvCoMKgwqAgZ3VjX3Byb3h5X3N0YWdlX2Rl c2NfZmluaShjbGllbnQpOwo+PiDCoMKgwqDCoMKgIGd1Y19wcm9jX2Rlc2NfZmluaShjbGllbnQp Owo+PiDCoCB9Cj4+IEBAIC0xMTQ1LDYgKzExMTcsOSBAQCBpbnQgaW50ZWxfZ3VjX3N1Ym1pc3Np b25faW5pdChzdHJ1Y3QgaW50ZWxfZ3VjIAo+PiAqZ3VjKQo+PiDCoMKgwqDCoMKgIEdFTV9CVUdf T04oIWd1Yy0+c3RhZ2VfZGVzY19wb29sKTsKPj4gwqDCoMKgwqDCoCBXQVJOX09OKCFndWNfdmVy aWZ5X2Rvb3JiZWxscyhndWMpKTsKPj4gKwo+PiArwqDCoMKgIGlkYV9pbml0KCZndWMtPmNsaWVu dF9pZHMpOwo+PiArCj4+IMKgwqDCoMKgwqAgcmV0ID0gZ3VjX2NsaWVudHNfY3JlYXRlKGd1Yyk7 Cj4+IMKgwqDCoMKgwqAgaWYgKHJldCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX3Bv b2w7Cj4+IEBAIC0xMTU3LDYgKzExMzIsNyBAQCBpbnQgaW50ZWxfZ3VjX3N1Ym1pc3Npb25faW5p dChzdHJ1Y3QgaW50ZWxfZ3VjIAo+PiAqZ3VjKQo+PiDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiDC oCBlcnJfcG9vbDoKPj4gK8KgwqDCoCBpZGFfZGVzdHJveSgmZ3VjLT5jbGllbnRfaWRzKTsKPj4g wqDCoMKgwqDCoCBndWNfc3RhZ2VfZGVzY19wb29sX2Rlc3Ryb3koZ3VjKTsKPj4gwqDCoMKgwqDC oCByZXR1cm4gcmV0Owo+PiDCoCB9Cj4+IEBAIC0xMTczLDYgKzExNDksOCBAQCB2b2lkIGludGVs X2d1Y19zdWJtaXNzaW9uX2Zpbmkoc3RydWN0IGludGVsX2d1YyAKPj4gKmd1YykKPj4gwqDCoMKg wqDCoCBndWNfY2xpZW50c19kZXN0cm95KGd1Yyk7Cj4+IMKgwqDCoMKgwqAgV0FSTl9PTighZ3Vj X3ZlcmlmeV9kb29yYmVsbHMoZ3VjKSk7Cj4+ICvCoMKgwqAgaWRhX2Rlc3Ryb3koJmd1Yy0+Y2xp ZW50X2lkcyk7Cj4+ICsKPj4gwqDCoMKgwqDCoCBpZiAoZ3VjLT5zdGFnZV9kZXNjX3Bvb2wpCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBndWNfc3RhZ2VfZGVzY19wb29sX2Rlc3Ryb3koZ3VjKTsKPj4g wqAgfQo+PiBAQCAtMTI1Nyw2ICsxMjM1LDIwMyBAQCBzdGF0aWMgdm9pZCBndWNfc3VibWlzc2lv bl91bnBhcmsoc3RydWN0IAo+PiBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gwqDCoMKgwqDC oCBpbnRlbF9lbmdpbmVfcGluX2JyZWFkY3J1bWJzX2lycShlbmdpbmUpOwo+PiDCoCB9Cj4+ICtz dGF0aWMgdm9pZCBndWNfbWFwX2dlbV9jdHhfdG9fcHBhbF9zdGFnZShzdHJ1Y3QgaW50ZWxfZ3Vj ICpndWMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IGd1Y19zdGFnZV9kZXNjICpkZXNjLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHUzMiBpZCkKPj4gK3sKPj4gK8KgwqDCoCBHRU1fQlVHX09OKGRlc2Mt PmF0dHJpYnV0ZSAmIEdVQ19TVEFHRV9ERVNDX0FUVFJfQUNUSVZFKTsKPj4gKwo+PiArwqDCoMKg IGRlc2MtPmF0dHJpYnV0ZSA9IEdVQ19TVEFHRV9ERVNDX0FUVFJfQUNUSVZFIHwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdVQ19TVEFHRV9ERVNDX0FUVFJfUFJJTkNJUEFMIHwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdVQ19TVEFHRV9ERVNDX0FUVFJfS0VSTkVMOwo+ PiArwqDCoMKgIGRlc2MtPnN0YWdlX2lkID0gaWQ7Cj4+ICsKPj4gK8KgwqDCoCAvKiBhbGwgcHBh bCBjb250ZXh0cyB3aWxsIGJlIHN1Ym1pdHRlZCB0cm91Z2ggdGhlIGV4ZWNidWYgY2xpZW50ICov Cj4+ICvCoMKgwqAgZGVzYy0+cHJveHlfaWQgPSBndWMtPmV4ZWNidWZfY2xpZW50LT5zdGFnZV9p ZDsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIG1heF9scmNfcGVyX2NsYXNzIGlz IHVzZWQgaW4gR3VDIHRvIGN1dCBzaG9ydCBsb29wcyBvdmVyIHRoZQo+PiArwqDCoMKgwqAgKiBs cmNfYml0bWFwIHdoZW4gb25seSBhIHNtYWxsIGFtb3VudCBvZiBscmNzIGFyZSB1c2VkLiBXZSBj b3VsZAo+PiArwqDCoMKgwqAgKiByZWNhbGN1bGF0ZSB0aGlzIHZhbHVlIGV2ZXJ5IHRpbWUgYW4g bHJjIGlzIGFkZGVkIG9yIHJlbW92ZWQsIGJ1dAo+PiArwqDCoMKgwqAgKiBnaXZlbiB0aGUgZmFj dCB0aGF0IHdlIG9ubHkgaGF2ZSBhIG1heCBudW1iZXIgb2YgbHJjcyBwZXIgCj4+IHN0YWdlX2Rl c2MKPj4gK8KgwqDCoMKgICogZXF1YWwgdG8gdGhlIG1heCBudW1iZXIgb2YgaW5zdGFuY2VzIG9m IGEgY2xhc3MgKGJlY2F1c2Ugd2UgbWFwCj4+ICvCoMKgwqDCoCAqIGdlbV9jb250ZXh0IDE6MSB3 aXRoIHN0YWdlX2Rlc2MpIGFuZCB0aGF0IHRoZSBHdUMgbG9vcHMgb25seSBpbgo+PiArwqDCoMKg wqAgKiBzcGVjaWZpYyBjYXNlcywgcmVkb2luZyB0aGUgY2FsY3VsYXRpb24gZWFjaCB0aW1lIGRv ZXNuJ3QgZ2l2ZSAKPj4gdXMgYQo+PiArwqDCoMKgwqAgKiBiaWcgYmVuZWZpdCBmb3IgdGhlIGNv c3Qgc28gd2UgY2FuIGp1c3QgdXNlIGEgc3RhdGljIHZhbHVlLgo+PiArwqDCoMKgwqAgKi8KPj4g K8KgwqDCoCBkZXNjLT5tYXhfbHJjX3Blcl9jbGFzcyA9IE1BWF9FTkdJTkVfSU5TVEFOQ0UgKyAx Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBndWNfdW5tYXBfZ2VtX2N0eF9mcm9tX3BwYWxf c3RhZ2Uoc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGd1Y19zdGFnZV9kZXNjICpkZXNjKQo+ PiArewo+PiArwqDCoMKgIEdFTV9CVUdfT04oIShkZXNjLT5hdHRyaWJ1dGUgJiBHVUNfU1RBR0Vf REVTQ19BVFRSX0FDVElWRSkpOwo+PiArwqDCoMKgIEdFTV9CVUdfT04oZGVzYy0+bHJjX2NvdW50 ID4gMCk7Cj4+ICsKPj4gK8KgwqDCoCBtZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBndWNfcHBhbF9zdGFnZV9scmNfcGluKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgCj4+ICplbmdpbmUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY2UpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmN0 eC0+aTkxNS0+Z3VjOwo+PiArwqDCoMKgIHN0cnVjdCBndWNfc3RhZ2VfZGVzYyAqZGVzYzsKPj4g K8KgwqDCoCBzdHJ1Y3QgZ3VjX2V4ZWNsaXN0X2NvbnRleHQgKmxyYzsKPj4gK8KgwqDCoCB1OCBn dWNfY2xhc3MgPSBlbmdpbmUtPmNsYXNzOwo+PiArCj4+ICvCoMKgwqAgLyogMToxIGdlbV9jb250 ZXh0IHRvIHBwYWwgbWFwcGluZyAqLwo+PiArwqDCoMKgIEdFTV9CVUdfT04oY2UtPnN3X2NvdW50 ZXIgPiBNQVhfRU5HSU5FX0lOU1RBTkNFKTsKPj4gKwo+PiArwqDCoMKgIGRlc2MgPSBfX2dldF9w cGFsX3N0YWdlX2Rlc2MoZ3VjLCBjZS0+c3dfY29udGV4dF9pZCk7Cj4+ICvCoMKgwqAgR0VNX0JV R19PTihkZXNjLT5scmNfYWxsb2NfbWFwW2d1Y19jbGFzc10uYml0bWFwICYgCj4+IEJJVChjZS0+ c3dfY291bnRlcikpOwo+PiArCj4+ICvCoMKgwqAgaWYgKCFkZXNjLT5scmNfY291bnQrKykKPj4g K8KgwqDCoMKgwqDCoMKgIGd1Y19tYXBfZ2VtX2N0eF90b19wcGFsX3N0YWdlKGd1YywgZGVzYywg Y2UtPnN3X2NvbnRleHRfaWQpOwo+PiArCj4+ICvCoMKgwqAgbHJjID0gJmRlc2MtPmxyY1tndWNf Y2xhc3NdW2NlLT5zd19jb3VudGVyXTsKPj4gK8KgwqDCoCBscmMtPmh3X2NvbnRleHRfZGVzYyA9 IGNlLT5scmNfZGVzYzsKPj4gK8KgwqDCoCBscmMtPnJpbmdfbHJjID0gaW50ZWxfZ3VjX2dndHRf b2Zmc2V0KGd1YywgY2UtPnN0YXRlKSArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIExSQ19T VEFURV9QTiAqIFBBR0VfU0laRTsKPj4gK8KgwqDCoCBscmMtPnJpbmdfYmVnaW4gPSBpbnRlbF9n dWNfZ2d0dF9vZmZzZXQoZ3VjLCBjZS0+cmluZy0+dm1hKTsKPj4gK8KgwqDCoCBscmMtPnJpbmdf ZW5kID0gbHJjLT5yaW5nX2JlZ2luICsgY2UtPnJpbmctPnNpemUgLSAxOwo+PiArCj4+ICvCoMKg wqAgZGVzYy0+bHJjX2FsbG9jX21hcFtndWNfY2xhc3NdLmJpdG1hcCB8PSBCSVQoY2UtPnN3X2Nv dW50ZXIpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgZ3VjX3BwYWxfc3RhZ2Vf bHJjX3VucGluKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1 Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0gY2UtPmdlbV9jb250ZXh0Owo+PiArwqDCoMKgIHN0 cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZjdHgtPmk5MTUtPmd1YzsKPj4gK8KgwqDCoCBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBjdHgtPmk5MTUtPmVuZ2luZVtjZSAtIAo+PiBjdHgt Pl9fZW5naW5lXTsKPj4gK8KgwqDCoCBzdHJ1Y3QgZ3VjX3N0YWdlX2Rlc2MgKmRlc2M7Cj4+ICvC oMKgwqAgc3RydWN0IGd1Y19leGVjbGlzdF9jb250ZXh0ICpscmM7Cj4+ICvCoMKgwqAgdTggZ3Vj X2NsYXNzID0gZW5naW5lLT5jbGFzczsKPj4gKwo+PiArwqDCoMKgIGRlc2MgPSBfX2dldF9wcGFs X3N0YWdlX2Rlc2MoZ3VjLCBjZS0+c3dfY29udGV4dF9pZCk7Cj4+ICvCoMKgwqAgR0VNX0JVR19P TighKGRlc2MtPmxyY19hbGxvY19tYXBbZ3VjX2NsYXNzXS5iaXRtYXAgJiAKPj4gQklUKGNlLT5z d19jb3VudGVyKSkpOwo+PiArCj4+ICvCoMKgwqAgbHJjID0gJmRlc2MtPmxyY1tndWNfY2xhc3Nd W2NlLT5zd19jb3VudGVyXTsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIEd1QyBu ZWVkcyB1cyB0byBrZWVwIHRoZSBscmMgbWFwcGVkIHVudGlsIGl0IGhhcyBmaW5pc2hlZCAKPj4g cHJvY2Vzc2luZwo+PiArwqDCoMKgwqAgKiB0aGUgY3R4IHN3aXRjaCBpbnRlcnJ1cHQuIFdoZW4g ZXhlY3V0aW5nIG5vcCBvciB2ZXJ5IHNtYWxsIAo+PiB3b3JrbG9hZHMKPj4gK8KgwqDCoMKgICog aXQgaXMgcG9zc2libGUgKGJ1dCBxdWl0ZSB1bmxpa2VseSkgdGhhdCAyIGNvbnRleHRzIG9uIGRp ZmZlcmVudAo+PiArwqDCoMKgwqAgKiBFTFNQcyBvZiB0aGUgc2FtZSBlbmdpbmUgY29tcGxldGUg YmVmb3JlIHRoZSBHdUMgbWFuYWdlcyB0byAKPj4gcHJvY2Vzcwo+PiArwqDCoMKgwqAgKiB0aGUg aW50ZXJydXB0IGZvciB0aGUgZmlyc3QgY29tcGxldGlvbi4gRXhwZXJpbWVudHMgc2hvdyB0aGlz IAo+PiBoYXBwZW5zCj4+ICvCoMKgwqDCoCAqIGZvciB+MC4yJSBvZiBjb250ZXh0cyB3aGVuIGV4 ZWN1dGluZyBub3Agd29ya2xvYWRzIG9uIGRpZmZlcmVudAo+PiArwqDCoMKgwqAgKiBjb250ZXh0 cyBiYWNrIHRvIGJhY2sgb24gdGhlIHNhbWUgZW5naW5lLiBXaGVuIHN1Ym1pdHRpbmcgbm9wCj4+ ICvCoMKgwqDCoCAqIHdvcmtsb2FkcyBvbiBhbGwgZW5naW5lcyBhdCB0aGUgc2FtZSB0aW1lIHRo ZSBoaXQtcmF0ZSBnb2VzIHVwIHRvCj4+ICvCoMKgwqDCoCAqIH4wLjclLiBJbiBhbGwgdGhlIG9i c2VydmVkIGNhc2VzIEd1QyByZXF1aXJlZCA8IDEwMHVzIHRvIGNhdGNoIAo+PiB1cCwKPj4gK8Kg wqDCoMKgICogd2l0aCB0aGUgc2luZ2xlIGVuZ2luZSBjYXNlIGJlaW5nIGFsd2F5cyBiZWxvdyAy MHVzLgo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKgwqAgKiBUaGUgY29tcGxldGlvbiBvZiB0aGUg cmVxdWVzdCBvbiB0aGUgc2Vjb25kIGxyYyB3aWxsIHJlZHVjZSBvdXIKPj4gK8KgwqDCoMKgICog cGluX2NvdW50IG9uIHRoZSBmaXJzdCBscmMgdG8gemVybywgdGh1cyB0cmlnZ2VyaW5nIGEgY2Fs bCB0byAKPj4gdGhpcwo+PiArwqDCoMKgwqAgKiBmdW5jdGlvbiBwb3RlbnRpYWxseSBiZWZvcmUg R3VDIGhhcyBoYWQgdGltZSB0byBwcm9jZXNzIHRoZQo+PiArwqDCoMKgwqAgKiBpbnRlcnJ1cHQu IFRvIGF2b2lkIHRoaXMsIHdlIGNvdWxkIGdldCBhbiBleHRyYSBwaW4gb24gdGhlIAo+PiBjb250 ZXh0IG9yCj4+ICvCoMKgwqDCoCAqIGRlbGF5IHRoZSB1bnBpbiB3aGVuIGd1YyBpcyBpbiB1c2Us IGJ1dCBnaXZlbiB0aGF0IHRoZSBpc3N1ZSBpcwo+PiArwqDCoMKgwqAgKiBsaW1pdGVkIHRvIHBh dGhvbG9naWNhbCBzY2VuYXJpb3MgYW5kIGhhcyB2ZXJ5IGxvdyBoaXQgcmF0ZSBldmVuCj4+ICvC oMKgwqDCoCAqIHRoZXJlLCB3ZSBjYW4ganVzdCBpbnRyb2R1Y2UgYSBzbWFsbCBkZWxheSB3aGVu IGl0IGhhcHBlbnMgdG8gCj4+IGdpdmUKPj4gK8KgwqDCoMKgICogdGltZSB0byBHdUMgdG8gY2F0 Y2ggdXAuIEFsc28gdG8gYmUgbm90ZWQgdGhhdCBzaW5jZSB0aGUgcmVxdWVzdHMKPj4gK8KgwqDC oMKgICogaGF2ZSBjb21wbGV0ZWQgb24gdGhlIEhXIHdlJ3ZlIG1vc3QgbGlrZWx5IGFscmVhZHkg c2VudCBHdUMgCj4+IHRoZSBuZXh0Cj4+ICvCoMKgwqDCoCAqIGNvbnRleHRzIHRvIGJlIGV4ZWN1 dGVkLCBzbyBpdCBpcyB1bmxpa2VseSB0aGF0IGJ5IHdhaXRpbmcgCj4+IHdlJ2xsIGFkZAo+PiAr wqDCoMKgwqAgKiBidWJibGVzIGluIHRoZSBIVyBleGVjdXRpb24uCj4+ICvCoMKgwqDCoCAqLwo+ PiArwqDCoMKgIFdBUk5fT04od2FpdF9mb3JfdXMobHJjLT5pc19wcmVzZW50X2luX3NxID09IDAs IDEwMDApKTsKPj4gKwo+PiArwqDCoMKgIGRlc2MtPmxyY19hbGxvY19tYXBbZ3VjX2NsYXNzXS5i aXRtYXAgJj0gfkJJVChjZS0+c3dfY291bnRlcik7Cj4+ICvCoMKgwqAgbWVtc2V0KGxyYywgMCwg c2l6ZW9mKCpscmMpKTsKPj4gKwo+PiArwqDCoMKgIGlmICghLS1kZXNjLT5scmNfY291bnQpCj4+ ICvCoMKgwqDCoMKgwqDCoCBndWNfdW5tYXBfZ2VtX2N0eF9mcm9tX3BwYWxfc3RhZ2UoZ3VjLCBk ZXNjKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIGd1Y19pbml0X2xyY19tYXBw aW5nKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IGd1Y190b19pOTE1KGd1Yyk7Cj4+ICvCoMKgwqAgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+PiArwqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICpjdHg7Cj4+ICvCoMKgwqAgc3RydWN0IGludGVsX2NvbnRleHQgKmNlOwo+PiArwqDCoMKgIGVu dW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICog U29tZSBjb250ZXh0IChlLmcuIGtlcm5lbF9jb250ZXh0KSBtaWdodCBoYXZlIGJlZW4gcGlubmVk IAo+PiBiZWZvcmUgd2UKPj4gK8KgwqDCoMKgICogZW5hYmxlZCBHdUMgc3VibWlzc2lvbiwgc28g d2UgbmVlZCB0byBhZGQgdGhlbSB0byB0aGUgR3VDIAo+PiBib29rZXBpbmcuCj4+ICvCoMKgwqDC oCAqIEFsc28sIGFmdGVyIGEgcmVzZXQgdGhlIEd1QyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0 IHRoZSAKPj4gaW5mb3JtYXRpb24KPj4gK8KgwqDCoMKgICogc2hhcmVkIHdpdGggR3VDIGlzIHBy b3Blcmx5IHJlc2V0Lgo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKgwqAgKiBOT1RFOiB0aGUgY29k ZSBiZWxvdyBhc3N1bWVzIDE6MSBtYXBwaW5nIGJldHdlZW4gcHBhbCAKPj4gZGVzY3JpcHRvcnMg YW5kCj4+ICvCoMKgwqDCoCAqIGdlbSBjb250ZXh0cyBmb3Igc2ltcGxpY2l0eS4KPj4gK8KgwqDC oMKgICovCj4+ICvCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeShjdHgsICZpOTE1LT5jb250ZXh0 cy5saXN0LCBsaW5rKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoYXRvbWljX3JlYWQoJmN0eC0+ aHdfaWRfcGluX2NvdW50KSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZ3Vj X3N0YWdlX2Rlc2MgKmRlc2M7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogbWFr ZSBzdXJlIHRoZSBkZXNjcmlwdG9yIGlzIGNsZWFuLi4uICovCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEdFTV9CVUdfT04oY3R4LT5od19pZCA+IEdVQ19NQVhfUFBBTF9TVEFHRV9ERVNDUklQ VE9SUyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlc2MgPSBfX2dldF9wcGFsX3N0YWdl X2Rlc2MoZ3VjLCBjdHgtPmh3X2lkKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtc2V0 KGRlc2MsIDAsIHNpemVvZigqZGVzYykpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC8qIC4uLmFuZCB0aGUgKHJlLSlwaW4gYWxsIHRoZSBscmNzICovCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2UgPSB0b19pbnRlbF9jb250ZXh0KGN0eCwgZW5naW5l KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoY2UtPnBpbl9jb3VudCA+ IDApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBndWNfcHBhbF9z dGFnZV9scmNfcGluKGVuZ2luZSwgY3R4LCBjZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IH0KPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbmxpbmUgdm9pZCBndWNfZmluaV9scmNfbWFwcGluZyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMp Cj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBndWNfdG9f aTkxNShndWMpOwo+PiArwqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPj4g K8KgwqDCoCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owo+PiArwqDCoMKgIHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZTsKPj4gK8KgwqDCoCBlbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPj4g Kwo+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoY3R4LCAmaTkxNS0+Y29udGV4dHMubGlz dCwgbGluaykgewo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGF0b21pY19yZWFkKCZjdHgtPmh3X2lk X3Bpbl9jb3VudCkpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yX2VhY2hfZW5naW5l KGVuZ2luZSwgaTkxNSwgaWQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj ZSA9IHRvX2ludGVsX2NvbnRleHQoY3R4LCBlbmdpbmUpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlmIChjZS0+cGluX2NvdW50ID4gMCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGd1Y19wcGFsX3N0YWdlX2xyY191bnBpbihjZSk7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGd1Y19jb250ZXh0X3VucGluKHN0cnVjdCBpbnRl bF9jb250ZXh0ICpjZSkKPj4gK3sKPj4gK8KgwqDCoCBndWNfcHBhbF9zdGFnZV9scmNfdW5waW4o Y2UpOwo+PiArwqDCoMKgIGludGVsX2V4ZWNsaXN0c19jb250ZXh0X3VucGluKGNlKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0X29wcyBndWNfY29udGV4 dF9vcHMgPSB7Cj4+ICvCoMKgwqAgLnVucGluID0gZ3VjX2NvbnRleHRfdW5waW4sCj4+ICvCoMKg wqAgLmRlc3Ryb3kgPSBpbnRlbF9leGVjbGlzdHNfY29udGV4dF9kZXN0cm95LAo+PiArfTsKPj4g Kwo+PiArc3RhdGljIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpndWNfY29udGV4dF9waW4oc3RydWN0 IGludGVsX2VuZ2luZV9jcyAKPj4gKmVuZ2luZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ PiArewo+PiArwqDCoMKgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9IHRvX2ludGVsX2NvbnRl eHQoY3R4LCBlbmdpbmUpOwo+PiArCj4+ICvCoMKgwqAgbG9ja2RlcF9hc3NlcnRfaGVsZCgmY3R4 LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4gKwo+PiArwqDCoMKgIGlmIChsaWtlbHkoY2Ut PnBpbl9jb3VudCsrKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBjZTsKPj4gK8KgwqDCoCBH RU1fQlVHX09OKCFjZS0+cGluX2NvdW50KTsgLyogbm8gb3ZlcmZsb3cgcGxlYXNlISAqLwo+PiAr Cj4+ICvCoMKgwqAgY2UtPm9wcyA9ICZndWNfY29udGV4dF9vcHM7Cj4+ICsKPj4gK8KgwqDCoCBj ZSA9IGludGVsX2V4ZWNsaXN0c19jb250ZXh0X3BpbihlbmdpbmUsIGN0eCwgY2UpOwo+PiArwqDC oMKgIGlmICghSVNfRVJSKGNlKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGd1Y19wcGFsX3N0YWdlX2xy Y19waW4oZW5naW5lLCBjdHgsIGNlKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiBjZTsKPj4gK30K Pj4gKwo+PiDCoCBzdGF0aWMgdm9pZCBndWNfc2V0X2RlZmF1bHRfc3VibWlzc2lvbihzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCAvKgo+PiBAQCAt MTI3NCw2ICsxNDQ5LDggQEAgc3RhdGljIHZvaWQgZ3VjX3NldF9kZWZhdWx0X3N1Ym1pc3Npb24o c3RydWN0IAo+PiBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gwqDCoMKgwqDCoCBlbmdpbmUt PmV4ZWNsaXN0cy50YXNrbGV0LmZ1bmMgPSBndWNfc3VibWlzc2lvbl90YXNrbGV0Owo+PiArwqDC oMKgIGVuZ2luZS0+Y29udGV4dF9waW4gPSBndWNfY29udGV4dF9waW47Cj4+ICsKPj4gwqDCoMKg wqDCoCBlbmdpbmUtPnBhcmsgPSBndWNfc3VibWlzc2lvbl9wYXJrOwo+PiDCoMKgwqDCoMKgIGVu Z2luZS0+dW5wYXJrID0gZ3VjX3N1Ym1pc3Npb25fdW5wYXJrOwo+PiBAQCAtMTMyMCw2ICsxNDk3 LDggQEAgaW50IGludGVsX2d1Y19zdWJtaXNzaW9uX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZ3VjIAo+ PiAqZ3VjKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZW5naW5lLT5zZXRfZGVmYXVsdF9zdWJtaXNz aW9uKGVuZ2luZSk7Cj4+IMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgIGd1Y19pbml0X2xyY19tYXBw aW5nKGd1Yyk7Cj4+ICsKPj4gwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gwqAgfQo+PiBAQCAtMTMy OSw2ICsxNTA4LDcgQEAgdm9pZCBpbnRlbF9ndWNfc3VibWlzc2lvbl9kaXNhYmxlKHN0cnVjdCAK Pj4gaW50ZWxfZ3VjICpndWMpCj4+IMKgwqDCoMKgwqAgR0VNX0JVR19PTihkZXZfcHJpdi0+Z3Qu YXdha2UpOyAvKiBHVCBzaG91bGQgYmUgcGFya2VkIGZpcnN0ICovCj4+ICvCoMKgwqAgZ3VjX2Zp bmlfbHJjX21hcHBpbmcoZ3VjKTsKPj4gwqDCoMKgwqDCoCBndWNfaW50ZXJydXB0c19yZWxlYXNl KGRldl9wcml2KTsKPj4gwqDCoMKgwqDCoCBndWNfY2xpZW50c19kaXNhYmxlKGd1Yyk7Cj4+IMKg IH0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIAo+PiBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+IGluZGV4IDQ4ZTBjZGY0MjIyMS4u NDQ0YmM4MzU1NGM1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+PiBAQCAtMTA3 MSw3ICsxMDcxLDcgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pdF9yZXF1ZXN0KHN0cnVj dCAKPj4gaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KQo+PiDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmVuZ2luZS0+dGltZWxpbmUubG9jaywgZmxhZ3MpOwo+PiDCoCB9Cj4+IC1zdGF0 aWMgdm9pZCBleGVjbGlzdHNfY29udGV4dF9kZXN0cm95KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSkKPj4gK3ZvaWQgaW50ZWxfZXhlY2xpc3RzX2NvbnRleHRfZGVzdHJveShzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY2UpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBHRU1fQlVHX09OKGNlLT5waW5fY291 bnQpOwo+PiBAQCAtMTA4NCw3ICsxMDg0LDcgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2NvbnRl eHRfZGVzdHJveShzdHJ1Y3QgCj4+IGludGVsX2NvbnRleHQgKmNlKQo+PiDCoMKgwqDCoMKgIGk5 MTVfZ2VtX29iamVjdF9wdXQoY2UtPnN0YXRlLT5vYmopOwo+PiDCoCB9Cj4+IC1zdGF0aWMgdm9p ZCBleGVjbGlzdHNfY29udGV4dF91bnBpbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4+ICt2 b2lkIGludGVsX2V4ZWNsaXN0c19jb250ZXh0X3VucGluKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsK Pj4gQEAgLTExNDEsMTAgKzExNDEsMTAgQEAgc3RhdGljIGludCBfX2NvbnRleHRfcGluKHN0cnVj dCAKPj4gaTkxNV9nZW1fY29udGV4dCAqY3R4LCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPj4gwqDC oMKgwqDCoCByZXR1cm4gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgZmxhZ3MpOwo+PiDCoCB9Cj4+ IC1zdGF0aWMgc3RydWN0IGludGVsX2NvbnRleHQgKgo+PiAtX19leGVjbGlzdHNfY29udGV4dF9w aW4oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4+ICtzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Cj4+ICtpbnRlbF9leGVjbGlzdHNfY29udGV4dF9waW4oc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHgsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGludGVsX2NvbnRleHQgKmNlKQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgdm9pZCAqdmFkZHI7Cj4+ IMKgwqDCoMKgwqAgaW50IHJldDsKPj4gQEAgLTEyMDUsOCArMTIwNSw4IEBAIF9fZXhlY2xpc3Rz X2NvbnRleHRfcGluKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgCj4+ICplbmdpbmUsCj4+IMKgIH0K Pj4gwqAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0X29wcyBleGVjbGlzdHNfY29u dGV4dF9vcHMgPSB7Cj4+IC3CoMKgwqAgLnVucGluID0gZXhlY2xpc3RzX2NvbnRleHRfdW5waW4s Cj4+IC3CoMKgwqAgLmRlc3Ryb3kgPSBleGVjbGlzdHNfY29udGV4dF9kZXN0cm95LAo+PiArwqDC oMKgIC51bnBpbiA9IGludGVsX2V4ZWNsaXN0c19jb250ZXh0X3VucGluLAo+PiArwqDCoMKgIC5k ZXN0cm95ID0gaW50ZWxfZXhlY2xpc3RzX2NvbnRleHRfZGVzdHJveSwKPj4gwqAgfTsKPj4gwqAg c3RhdGljIHN0cnVjdCBpbnRlbF9jb250ZXh0ICoKPj4gQEAgLTEyMjQsNyArMTIyNCw3IEBAIGV4 ZWNsaXN0c19jb250ZXh0X3BpbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIAo+PiAqZW5naW5lLAo+ PiDCoMKgwqDCoMKgIGNlLT5vcHMgPSAmZXhlY2xpc3RzX2NvbnRleHRfb3BzOwo+PiAtwqDCoMKg IHJldHVybiBfX2V4ZWNsaXN0c19jb250ZXh0X3BpbihlbmdpbmUsIGN0eCwgY2UpOwo+PiArwqDC oMKgIHJldHVybiBpbnRlbF9leGVjbGlzdHNfY29udGV4dF9waW4oZW5naW5lLCBjdHgsIGNlKTsK Pj4gwqAgfQo+PiDCoCBzdGF0aWMgaW50IGV4ZWNsaXN0c19yZXF1ZXN0X2FsbG9jKHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJlcXVlc3QpCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9scmMuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaAo+PiBp bmRleCBmNWE1NTAyZWNmNzAuLjE3OGIxODFlYTY1MSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbHJjLmgKPj4gQEAgLTEwNCw0ICsxMDQsMTEgQEAgdm9pZCBpbnRlbF9scl9jb250ZXh0X3Jl c3VtZShzdHJ1Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPj4gwqAgdm9pZCBp bnRlbF9leGVjbGlzdHNfc2V0X2RlZmF1bHRfc3VibWlzc2lvbihzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzIAo+PiAqZW5naW5lKTsKPj4gK3N0cnVjdCBpbnRlbF9jb250ZXh0ICoKPj4gK2ludGVsX2V4 ZWNsaXN0c19jb250ZXh0X3BpbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0 eCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY2UpOwo+PiArdm9pZCBpbnRlbF9leGVjbGlzdHNfY29udGV4dF91bnBpbihzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqY2UpOwo+PiArdm9pZCBpbnRlbF9leGVjbGlzdHNfY29udGV4dF9kZXN0cm95 KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSk7Cj4+ICsKPj4gwqAgI2VuZGlmIC8qIF9JTlRFTF9M UkNfSF8gKi8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p bnRlbF9ndWMuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfZ3Vj LmMKPj4gaW5kZXggYmYyNzE2MmZiMzI3Li5lYjRlOGJiZThjODIgMTAwNjQ0Cj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9ndWMuYwo+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfZ3VjLmMKPj4gQEAgLTMwMSw2ICszMDEsNyBA QCBzdGF0aWMgaW50IGlndF9ndWNfZG9vcmJlbGxzKHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoCBp ZiAoZXJyKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byB1bmxvY2s7Cj4+ICvCoMKgwqAgZ3Vj LT5zdGFydGluZ19wcm94eV9pZCA9IEdVQ19NQVhfUFBBTF9TVEFHRV9ERVNDUklQVE9SUyAtIEFU VEVNUFRTOwo+IG1heWJlIEdFTV9CVUdfT04oR1VDX01BWF9QUEFMX1NUQUdFX0RFU0NSSVBUT1JT IDwgQVRURU1QVFMpID8KCmFjaywgYnV0IEJVSUxEX0JVR19PTgoKPj4gwqDCoMKgwqDCoCBmb3Ig KGkgPSAwOyBpIDwgQVRURU1QVFM7IGkrKykgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgY2xpZW50 c1tpXSA9IGd1Y19jbGllbnRfYWxsb2MoZGV2X3ByaXYsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBJTlRFTF9JTkZPKGRldl9wcml2KS0+ cmluZ19tYXNrLAo+PiBAQCAtMzM0LDcgKzMzNSw4IEBAIHN0YXRpYyBpbnQgaWd0X2d1Y19kb29y YmVsbHModm9pZCAqYXJnKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIFRoZSBjaGVjayBiZWxv dyBpcyBvbmx5IHZhbGlkIGJlY2F1c2Ugd2Uga2VlcCBhIGRvb3JiZWxsCj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgICogYXNzaWduZWQgZHVyaW5nIHRoZSB3aG9sZSBsaWZlIG9mIHRoZSBjbGllbnQu Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAoY2xpZW50 c1tpXS0+c3RhZ2VfaWQgPj0gR1VDX05VTV9ET09SQkVMTFMpIHsKPj4gK8KgwqDCoMKgwqDCoMKg IGlmICgoY2xpZW50c1tpXS0+c3RhZ2VfaWQgLSBndWMtPnN0YXJ0aW5nX3Byb3h5X2lkKSA+PQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdVQ19OVU1fRE9PUkJFTExTKSB7Cj4gSSBhbHdh eXMgZ2V0IGEgYml0IG5lcnZvdXMgd2hlbiBJIHNlZSB1bnNpZ25lZCBudW1iZXJzIHN1YnRyYWN0 ZWQuLgoKVGhlIGNoZWNrIHlvdSBhc2tlZCBmb3IgYWJvdmUgc2hvdWxkIGVuc3VyZSB3ZSBkb24n dCB1bmRlcmZsb3cgaGVyZS4KCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByX2Vycigi WyVkXSBtb3JlIGNsaWVudHMgdGhhbiBkb29yYmVsbHMgKCVkID49ICVkKVxuIiwKPiAldSA/Cgph Y2sKCkRhbmllbGUKCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aSwgY2xpZW50c1tpXS0+c3RhZ2VfaWQsIEdVQ19OVU1fRE9PUkJFTExTKTsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gLUVJTlZBTDsKPiAKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==