From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chunming Zhou Subject: Re: [PATCH 5/5] [RFC]drm: add syncobj timeline support v3 Date: Mon, 3 Sep 2018 12:13:09 +0800 Message-ID: <2ccca40e-d64d-2cb3-e9d5-9504e4a47eb4@amd.com> References: <20180829104434.13265-1-david1.zhou@amd.com> <20180829104434.13265-5-david1.zhou@amd.com> <81961480-d1a2-f2b3-7c7c-f7704bb42153@gmail.com> <45ed2e67-0b20-fa45-9575-e3f29470d4fd@amd.com> <60e0dd83-93c1-8cbf-03b6-f00739fb7078@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <60e0dd83-93c1-8cbf-03b6-f00739fb7078-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: =?UTF-8?Q?Christian_K=c3=b6nig?= , Chunming Zhou , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Dave Airlie , Daniel Rakos , Daniel Vetter , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org CgrlnKggMjAxOC84LzMwIDE5OjMyLCBDaHJpc3RpYW4gS8O2bmlnIOWGmemBkzoKPiBbU05JUF0K Pj4+Pj4KPj4+Pj4+ICsKPj4+Pj4+ICtzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCB7Cj4+Pj4+ PiArwqDCoMKgIHN0cnVjdCBkcm1fc3luY29ial9zdHViX2ZlbmNlIGJhc2U7Cj4+Pj4+PiArwqDC oMKgIHU2NMKgwqDCoCB2YWx1ZTsKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IHJiX25vZGXCoMKgIG5v ZGU7Cj4+Pj4+PiArfTsKPj4+Pj4+ICtzdHJ1Y3QgZHJtX3N5bmNvYmpfc2lnbmFsX3B0IHsKPj4+ Pj4+ICvCoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX3N0dWJfZmVuY2UgYmFzZTsKPj4+Pj4+ICvC oMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqc2lnbmFsX2ZlbmNlOwo+Pj4+Pj4gK8KgwqDCoCBzdHJ1 Y3QgZG1hX2ZlbmNlICpwcmVfcHRfYmFzZTsKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IGRtYV9mZW5j ZV9jYiBzaWduYWxfY2I7Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2VfY2IgcHJlX3B0 X2NiOwo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmo7Cj4+Pj4+PiAr wqDCoMKgIHU2NMKgwqDCoCB2YWx1ZTsKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCBs aXN0Owo+Pj4+Pj4gK307Cj4+Pj4+Cj4+Pj4+IFdoYXQgYXJlIHRob3NlIHR3byBzdHJ1Y3R1cmVz IGdvb2QgZm9yCj4+Pj4gVGhleSBhcmUgdXNlZCB0byByZWNvcmQgd2FpdCBvcHMgcG9pbnRzIGFu ZCBzaWduYWwgb3BzIHBvaW50cy4KPj4+PiBGb3IgdGltZWxpbmUsIHRoZXkgYXJlIGNvbm5lY3Rl ZCBieSB0aW1lbGluZSB2YWx1ZSwgd29ya3MgbGlrZToKPj4+PiDCoMKgwqAgYS4gc2lnbmFsIHB0 IGluY3JlYXNlIHRpbWVsaW5lIHZhbHVlIHRvIHNpZ25hbF9wdCB2YWx1ZSB3aGVuIAo+Pj4+IHNp Z25hbF9wdCBpcyBzaWduYWxlZC4gc2lnbmFsX3B0IGlzIGRlcGVuZGluZyBvbiBwcmV2aW91cyBw dCBmZW5jZSAKPj4+PiBhbmQgaXRzZWxmIHNpZ25hbCBmZW5jZSBmcm9tIHNpZ25hbCBvcHMuCj4+ Pj4gwqDCoMKgIGIuIHdhaXQgcHQgdHJlZSBjaGVja3MgaWYgdGltZWxpbmUgdmFsdWUgb3ZlciBp dHNlbGYgdmFsdWUuCj4+Pj4KPj4+PiBGb3Igbm9ybWFsLCB3b3JrcyBsaWtlOgo+Pj4+IMKgwqDC oCBhLiBzaWduYWwgcHQgaW5jcmVhc2UgMSBmb3Igc3luY29ial90aW1lbGluZS0+c2lnbmFsX3Bv aW50IAo+Pj4+IGV2ZXJ5IHRpbWUgd2hlbiBzaWduYWwgb3BzIGlzIHBlcmZvcm1lZC4KPj4+PiDC oMKgwqAgYi4gd2hlbiB3YWl0IG9wcyBpcyBjb21taW5nLCB3YWl0IHB0IHdpbGwgZmV0Y2ggYWJv dmUgbGFzdCAKPj4+PiBzaWduYWwgcHQgdmFsdWUgYXMgaXRzIHdhaXQgcG9pbnQuIHdhaXQgcHQg d2lsbCBiZSBvbmx5IHNpZ25hbGVkIGJ5IAo+Pj4+IGVxdWFsIHBvaW50IHZhbHVlIHNpZ25hbF9w dC4KPj4+Pgo+Pj4+Cj4+Pj4+IGFuZCB3aHkgaXMgdGhlIHN0dWIgZmVuY2UgdGhlaXIgYmFzZT8K Pj4+PiBHb29kIHF1ZXN0aW9uLCBJIHRyaWVkIHRvIGt6YWxsb2MgZm9yIHRoZW0gYXMgd2VsbCB3 aGVuIEkgZGVidWcgCj4+Pj4gdGhlbSwgSSBlbmNvdW50ZXJlZCBhIHByb2JsZW06Cj4+Pj4gSSBs b29rdXAvZmluZCB3YWl0X3B0IG9yIHNpZ25hbF9wdCBzdWNjZXNzZnVsbHksIGJ1dCB3aGVuIEkg dHJpZWQgCj4+Pj4gdG8gdXNlIHRoZW0sIHRoZXkgYXJlIGZyZWVkIHNvbWV0aW1lcywgYW5kIHJl c3VsdHMgaW4gTlVMTCBwb2ludC4KPj4+PiBhbmQgZ2VuZXJhbGx5LCB3aGVuIGxvb2t1cCB0aGVt LCB3ZSBvZnRlbiBuZWVkIHRoZWlyIHN0dWIgZmVuY2UgYXMgCj4+Pj4gd2VsbCwgYW5kIGluIHRo ZSBtZWFudGltZSzCoCB0aGVpciBsaWZlY3ljbGUgYXJlIHNhbWUuCj4+Pj4gQWJvdmUgcmVhc29u LCBJIG1ha2Ugc3R1YiBmZW5jZSBhcyB0aGVpciBiYXNlLgo+Pj4KPj4+IFRoYXQgc291bmRzIGxp a2UgeW91IG9ubHkgZGlkIHRoaXMgYmVjYXVzZSB5b3UgbWVzc2VkIHVwIHRoZSBsaWZlY3ljbGUu Cj4+Pgo+Pj4gQWRkaXRpb25hbCB0byB0aGF0IEkgZG9uJ3QgdGhpbmsgeW91IGNvcnJlY3RseSBj b25zaWRlcmVkIHRoZSAKPj4+IGxpZmVjeWNsZSBvZiB0aGUgd2FpdHMgYW5kIHRoZSBzeW5jIG9i amVjdCBpdHNlbGYuIEUuZy4gYmxvY2tpbmcgaW4gCj4+PiBkcm1fc3luY29ial90aW1lbGluZV9m aW5pKCkgdW50aWwgYWxsIHdhaXRzIGFyZSBkb25lIGlzIG5vdCBhIGdvb2QgCj4+PiBpZGVhLgo+ Pj4KPj4+IFdoYXQgeW91IHNob3VsZCBkbyBpbnN0ZWFkIGlzIHRvIGNyZWF0ZSBhIGZlbmNlX2Fy cmF5IG9iamVjdCB3aXRoIAo+Pj4gYWxsIHRoZSBmZW5jZSB3ZSBuZWVkIHRvIHdhaXQgZm9yIHdo ZW4gYSB3YWl0IHBvaW50IGlzIHJlcXVlc3RlZC4KPj4gWWVhaCwgdGhpcyBpcyBvdXIgaW5pdGlh bCBkaXNjdXNzaW9uIHJlc3VsdCwgYnV0IHdoZW4gSSB0cmllZCB0byBkbyAKPj4gdGhhdCwgSSBm b3VuZCB0aGF0IGNhbm5vdCBtZWV0IHRoZSBhZHZhbmNlIHNpZ25hbCByZXF1aXJlbWVudDoKPj4g wqDCoMKgIGEuIFdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIHdhaXQgYW5kIHNpZ25hbCBwdCB2YWx1 ZSBhcmUgbm90IAo+PiBvbmUtdG8tb25lIG1hdGNoLCBpdCdzIGRpZmZpY3VsdCB0byBmaW5kIGRl cGVuZGVudCBwb2ludCwgYXQgbGVhc3QsIAo+PiB0aGVyZSBpcyBzb21lIG92ZXJoZWFkLgo+Cj4g QXMgZmFyIGFzIEkgY2FuIHNlZSB0aGF0IGlzIGluZGVwZW5kZW50IG9mIHVzaW5nIGEgZmVuY2Ug YXJyYXkgaGVyZS4gCj4gU2VlIHlvdSBjYW4gZWl0aGVyIHVzZSBhIHJpbmcgYnVmZmVyIG9yIGFu IHJiLXRyZWUsIGJ1dCB3aGVuIHlvdSB3YW50IAo+IHRvIHdhaXQgZm9yIGEgc3BlY2lmaWMgcG9p bnQgd2UgbmVlZCB0byBjb25kZW5zZSB0aGUgbm90IHlldCBzaWduYWxlZCAKPiBmZW5jZXMgaW50 byBhbiBhcnJheS4KYWdhaW4sIG5lZWQgdG8gZmluZCB0aGUgcmFuZ2Ugb2Ygd2hlcmUgdGhlIHNw ZWNpZmljIHBvaW50IGluLCB3ZSBzaG91bGQgCmNsb3NlIHRvIHRpbWVsaW5lIHNlbWFudGljcywg SSBhbHNvIHJlZmVyZWQgdGhlIHN3X3N5bmMuYyB0aW1lbGluZSwgCnVzYWxseSB3YWl0X3B0IGlz IHNpZ25hbGxlZCBieSB0aW1lbGluZSBwb2ludC4gQW5kIEkgYWdyZWUgd2UgY2FuIAppbXBsZW1l bnQgaXQgd2l0aCBzZXZlcmFsIG1ldGhvZHMsIGJ1dCBJIGRvbid0IHRoaW5rIHRoZXJlIGFyZSBi YXNpY2FsIApkaWZmZXJlbmNlcy4KCj4KPj4gwqDCoMKgIGIuIGJlY2F1c2Ugd2UgYWxsb3dlZCAi d2FpdC1iZWZvcmUtc2lnbmFsIiwgaWYgCj4+ICJ3YWl0LWJlZm9yZS1zaWduYWwiIGhhcHBlbnMs IHRoZXJlIGlzbid0IHNpZ25hbCBmZW5jZSB3aGljaCBjYW4gYmUgCj4+IHVzZWQgdG8gY3JlYXRl IGZlbmNlIGFycmF5Lgo+Cj4gV2VsbCwgYWdhaW4gd2UgRE9OJ1Qgc3VwcG9ydCB3YWl0LWJlZm9y ZS1zaWduYWwgaGVyZS4gSSB3aWxsIGNlcnRhaW5seSAKPiBOQUsgYW55IGltcGxlbWVudGF0aW9u IHdoaWNoIHRyaWVzIHRvIGRvIHRoaXMgdW50aWwgd2UgaGF2ZW4ndCBmaWd1cmVkIAo+IG91dCBh bGwgdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgY29uc3RyYWludHMgYW5kIEkgc3RpbGwgZG9uJ3Qg c2VlIGhvdyAKPiB3ZSBjYW4gZG8gdGhpcy4KeWVzLCB3ZSBkb24ndCBzdXBwb3J0IHJlYWwgd2Fp dC1iZWZvcmUtc2lnbmFsIGluIHBhdGNoIG5vdywganVzdCBhIGZha2UgCndhaXQtYmVmb3JlLXNp Z25hbCwgd2hpY2ggc3RpbGwgd2FpdCBvbiBDUyBzdWJtaXNzaW9uIHVudGlsIHNpZ25hbCAKb3Bl cmF0aW9uIGNvbWluZyB0aHJvdWdoIHdhaXRfZXZlbnQsIHdoaWNoIGlzIHRoZSBjb25jbHVzaW9u IHdlIApkaXNzY3Vzc2VkIGJlZm9yZS4KCj4KPj4gU28gdGltZWxpbmUgdmFsdWUgaXMgZ29vZCB0 byByZXNvbHZlIHRoYXQuCj4+Cj4+Pgo+Pj4gT3RoZXJ3aXNlIHNvbWVib2R5IGNhbiBlYXNpbHkg Y29uc3RydWN0IGEgc2l0dWF0aW9uIHdoZXJlIHRpbWVsaW5lIAo+Pj4gc3luYyBvYmogQSB3YWl0 cyBvbiBCIGFuZCBCIHdhaXRzIG9uIEEuCj4+IFNhbWUgc2l0dWF0aW9uIGFsc28gY2FuIGhhcHBl bnMgd2l0aCBmZW5jZS1hcnJheSwgd2Ugb25seSBjYW4gc2VlIAo+PiB0aGlzIGlzIGEgcHJvZ3Jh bW1pbmcgYnVnIHdpdGggaW5jb3JyZWN0IHVzZS4KPgo+IE5vLCBmZW5jZS1hcnJheSBpcyBpbml0 aWFsaXplZCBvbmx5IG9uY2Ugd2l0aCBhIHN0YXRpYyBsaXN0IG9mIGZlbmNlcy4gCj4gVGhpcyB3 YXkgaXQgaXMgaW1wb3NzaWJsZSB0byBhZGQgdGhlIGZlbmNlLWFycmF5IHRvIGl0c2VsZiBmb3Ig ZXhhbXBsZS4KPgo+IEUuZy4geW91IGNhbid0IGJ1aWxkIGNpcmNsZSBkZXBlbmRlbmNpZXMgd2l0 aCB0aGF0Lgp3ZSBhbHJlYWR5IHdhaXQgZm9yIHNpZ25hbCBvcGVyYXRpb24gZXZlbnQsIHNvIG5l dmVyIGJ1aWxkIGNpcmNsZSAKZGVwZW5kZW5jaWVzIHdpdGggdGhhdC4gVGhlIHRoZW9yeSBpcyBz YW1lLgoKCj4KPj4gQmV0dGVyIHVzZSByYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3Nh ZmUoKSBmb3IgdGhpcy4KPj4+PiBGcm9tIHRoZSBjb21tZW50cywgc2VlbXMgd2UgY2Fubm90IHVz ZSBpdCBoZXJlLCB3ZSBuZWVkIGVyYXNlIG5vZGUgCj4+Pj4gaGVyZS4KPj4+PiBDb21tZW50czoK Pj4+PiDCoCogTm90ZSwgaG93ZXZlciwgdGhhdCBpdCBjYW5ub3QgaGFuZGxlIG90aGVyIG1vZGlm aWNhdGlvbnMgdGhhdCAKPj4+PiByZS1vcmRlciB0aGUKPj4+PiDCoCogcmJ0cmVlIGl0IGlzIGl0 ZXJhdGluZyBvdmVyLiBUaGlzIGluY2x1ZGVzIGNhbGxpbmcgcmJfZXJhc2UoKSBvbiAKPj4+PiBA cG9zLCBhcwo+Pj4+IMKgKiByYl9lcmFzZSgpIG1heSByZWJhbGFuY2UgdGhlIHRyZWUsIGNhdXNp bmcgdXMgdG8gbWlzcyBzb21lIG5vZGVzLgo+Pj4+IMKgKi8KPj4+Cj4+PiBZZWFoLCBidXQgeW91 ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIGhhcyB0aGUgc2FtZSBwcm9ibGVtIDopCj4+Pgo+Pj4g WW91IG5lZWQgdG8gdXNlIHNvbWV0aGluZyBsaWtlICJ3aGlsZSAobm9kZSA9IHJiX2ZpcnN0KC4u LikpIiAKPj4+IGluc3RlYWQgaWYgeW91IHdhbnQgdG8gZGVzdHJ1Y3QgdGhlIHdob2xlIHRyZWUu Ck9LLCBnb3QgaXQsIEkgd2lsbCBjaGFuZ2UgaXQgaW4gdjQuCgpUaGFua3MsCkRhdmlkIFpob3UK Pj4+Cj4+PiBSZWdhcmRzLAo+Pj4gQ2hyaXN0aWFuLgo+Pj4KPj4+Pgo+Pj4+IFRoYW5rcywKPj4+ PiBEYXZpZCBaaG91Cj4+Pj4+Cj4+Pj4+IFJlZ2FyZHMsCj4+Pj4+IENocmlzdGlhbi4KPj4+Pj4K Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB3YWl0X3B0ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGRy bV9zeW5jb2JqX3dhaXRfcHQsIG5vZGUpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIG5vZGUgPSBy Yl9uZXh0KG5vZGUpOwo+PiBJIGFscmVhZHkgZ2V0IHRoZSBuZXh0IG5vZGUgYmVmb3JlIGVyYXNp bmcgdGhpcyBub2RlLCBzbyB0aGUgImZvciAKPj4gKC4uLiIgc2VudGVuY2UgaXMgZXF1YWwgd2l0 aCAid2hpbGUgKC4uLikiCj4KPiBUaGF0IHN0aWxsIGRvZXNuJ3Qgd29yay4gVGhlIHByb2JsZW0g aXMgdGhlIGJlY2F1c2Ugb2YgYW4gZXJhc2UgdGhlIAo+IG5leHQgbm9kZSBtaWdodCBza2lwIHNv bWUgbm9kZXMgd2hlbiByZWJhbGFuY2luZy4KPgo+IFdoYXQgeW91IG5lZWQgdG8gZG8gaXMgdG8g ZWl0aGVyIG5vdCBlcmFzZSB0aGUgbm9kZXMgYXQgYWxsIChiZWNhdXNlIAo+IHdlIHJlLWluaXRp YWxpemUgdGhlIHRyZWUgYW55d2F5KSBvciBhbHdheXMgdXNlIHJiX2ZpcnN0KCkuCj4KPiBSZWdh cmRzLAo+IENocmlzdGlhbi4KPgo+Pgo+PiBUaGFua3MsCj4+IERhdmlkIFpob3UKPj4KPj4+Pj4+ ICsgcmJfZXJhc2UoJndhaXRfcHQtPm5vZGUsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICZzeW5jb2JqX3RpbWVsaW5lLT53YWl0X3B0X3RyZWUpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDC oMKgIFJCX0NMRUFSX05PREUoJndhaXRfcHQtPm5vZGUpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKg IHNwaW5fdW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkbWFf ZmVuY2Vfd2FpdCgmd2FpdF9wdC0+YmFzZS5iYXNlLCB0cnVlKTsKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCBzcGluX2xvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC8q IGtmcmVlKHdhaXRfcHQpIGlzIGV4Y3V0ZWQgYnkgZmVuY2UgcHV0ICovCj4+Pj4+PiArwqDCoMKg wqDCoMKgwqAgZG1hX2ZlbmNlX3B1dCgmd2FpdF9wdC0+YmFzZS5iYXNlKTsKPj4+Pj4+ICvCoMKg wqAgfQo+Pj4+Pj4gK8KgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2lnbmFsX3B0LCB0 bXAsCj4+Pj4+PiArICZzeW5jb2JqX3RpbWVsaW5lLT5zaWduYWxfcHRfbGlzdCwgbGlzdCkgewo+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGxpc3RfZGVsKCZzaWduYWxfcHQtPmxpc3QpOwo+Pj4+Pj4g K8KgwqDCoMKgwqDCoMKgIGlmIChzaWduYWxfcHQtPnNpZ25hbF9mZW5jZSkgewo+Pj4+Pj4gKyBk bWFfZmVuY2VfcmVtb3ZlX2NhbGxiYWNrKHNpZ25hbF9wdC0+c2lnbmFsX2ZlbmNlLAo+Pj4+Pj4g KyAmc2lnbmFsX3B0LT5zaWduYWxfY2IpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZG1hX2ZlbmNlX3B1dChzaWduYWxfcHQtPnNpZ25hbF9mZW5jZSk7Cj4+Pj4+PiArwqDCoMKgwqDC oMKgwqAgfQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChzaWduYWxfcHQtPnByZV9wdF9iYXNl KSB7Cj4+Pj4+PiArIGRtYV9mZW5jZV9yZW1vdmVfY2FsbGJhY2soc2lnbmFsX3B0LT5wcmVfcHRf YmFzZSwKPj4+Pj4+ICsgJnNpZ25hbF9wdC0+cHJlX3B0X2NiKTsKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRtYV9mZW5jZV9wdXQoc2lnbmFsX3B0LT5wcmVfcHRfYmFzZSk7Cj4+Pj4+ PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRtYV9mZW5jZV9wdXQo JnNpZ25hbF9wdC0+YmFzZS5iYXNlKTsKPj4+Pj4+ICvCoMKgwqAgfQo+Pj4+Pj4gK8KgwqDCoCBz cGluX3VubG9jaygmc3luY29iai0+bG9jayk7Cj4+Pj4+PiArfQo+Pj4+Pj4gKwo+Pj4+Pj4gwqAg LcKgwqDCoCAqZmVuY2UgPSBkcm1fc3luY29ial9mZW5jZV9nZXQoc3luY29iaik7Cj4+Pj4+PiAt wqDCoMKgIGlmICgqZmVuY2UpCj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDE7Cj4+Pj4+ PiArc3RhdGljIGJvb2wgZHJtX3N5bmNvYmpfbm9ybWFsX3NpZ25hbF93YWl0X3B0cyhzdHJ1Y3Qg Cj4+Pj4+PiBkcm1fc3luY29iaiAqc3luY29iaiwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCBzaWduYWxfcHQpCj4+Pj4+PiAr ewo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9IE5VTEw7Cj4+Pj4+PiArwqDC oMKgIHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0ICp3YWl0X3B0ID0gTlVMTDsKPj4+Pj4+IMKg IMKgwqDCoMKgwqAgc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4+Pj4+IC3CoMKgwqAgLyog V2UndmUgYWxyZWFkeSB0cmllZCBvbmNlIHRvIGdldCBhIGZlbmNlIGFuZCBmYWlsZWQuIE5vdyAK Pj4+Pj4+IHRoYXQgd2UKPj4+Pj4+IC3CoMKgwqDCoCAqIGhhdmUgdGhlIGxvY2ssIHRyeSBvbmUg bW9yZSB0aW1lIGp1c3QgdG8gYmUgc3VyZSB3ZSBkb24ndCAKPj4+Pj4+IGFkZCBhCj4+Pj4+PiAt wqDCoMKgwqAgKiBjYWxsYmFjayB3aGVuIGEgZmVuY2UgaGFzIGFscmVhZHkgYmVlbiBzZXQuCj4+ Pj4+PiAtwqDCoMKgwqAgKi8KPj4+Pj4+IC3CoMKgwqAgaWYgKHN5bmNvYmotPmZlbmNlKSB7Cj4+ Pj4+PiAtwqDCoMKgwqDCoMKgwqAgKmZlbmNlID0gCj4+Pj4+PiBkbWFfZmVuY2VfZ2V0KHJjdV9k ZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3luY29iai0+ZmVuY2UsCj4+Pj4+PiAtIGxvY2tkZXBfaXNf aGVsZCgmc3luY29iai0+bG9jaykpKTsKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCByZXQgPSAxOwo+ Pj4+Pj4gLcKgwqDCoCB9IGVsc2Ugewo+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgICpmZW5jZSA9IE5V TEw7Cj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgZHJtX3N5bmNvYmpfYWRkX2NhbGxiYWNrX2xvY2tl ZChzeW5jb2JqLCBjYiwgZnVuYyk7Cj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0ID0gMDsKPj4+ Pj4+ICvCoMKgwqAgZm9yKG5vZGUgPSByYl9maXJzdCgmc3luY29iai0+c3luY29ial90aW1lbGlu ZS53YWl0X3B0X3RyZWUpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIG5vZGUgIT0gTlVMTDsgKSB7 Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgd2FpdF9wdCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBk cm1fc3luY29ial93YWl0X3B0LCBub2RlKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBub2RlID0g cmJfbmV4dChub2RlKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBmb3Igbm9ybWFsIHN5bmNv YmogKi8KPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAod2FpdF9wdC0+dmFsdWUgPT0gc2lnbmFs X3B0KSB7Cj4+Pj4+PiArIGRtYV9mZW5jZV9zaWduYWwoJndhaXRfcHQtPmJhc2UuYmFzZSk7Cj4+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYl9lcmFzZSgmd2FpdF9wdC0+bm9kZSwKPj4+ Pj4+ICsgJnN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUud2FpdF9wdF90cmVlKTsKPj4+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJCX0NMRUFSX05PREUoJndhaXRfcHQtPm5vZGUpOwo+Pj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoga2ZyZWUod2FpdF9wdCkgaXMgZXhjdXRlZCBi eSBmZW5jZSBwdXQgKi8KPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYV9mZW5jZV9w dXQoJndhaXRfcHQtPmJhc2UuYmFzZSk7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz cGluX3VubG9jaygmc3luY29iai0+bG9jayk7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gdHJ1ZTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+PiDCoMKgwqDCoMKg IH0KPj4+Pj4+IMKgwqDCoMKgwqAgc3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+Pj4g K8KgwqDCoCByZXR1cm4gZmFsc2U7Cj4+Pj4+PiArfQo+Pj4+Pj4gwqAgLcKgwqDCoCByZXR1cm4g cmV0Owo+Pj4+Pj4gK3N0YXRpYyB2b2lkIGRybV9zeW5jb2JqX3RpbWVsaW5lX3NpZ25hbF93YWl0 X3B0cyhzdHJ1Y3QgCj4+Pj4+PiBkcm1fc3luY29iaiAqc3luY29iaikKPj4+Pj4+ICt7Cj4+Pj4+ PiArwqDCoMKgIHN0cnVjdCByYl9ub2RlICpub2RlID0gTlVMTDsKPj4+Pj4+ICvCoMKgwqAgc3Ry dWN0IGRybV9zeW5jb2JqX3dhaXRfcHQgKndhaXRfcHQgPSBOVUxMOwo+Pj4+Pj4gKwo+Pj4+Pj4g K8KgwqDCoCBzcGluX2xvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+Pj4gK8KgwqDCoCBmb3Iobm9k ZSA9IHJiX2ZpcnN0KCZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLndhaXRfcHRfdHJlZSk7Cj4+ Pj4+PiArwqDCoMKgwqDCoMKgwqAgbm9kZSAhPSBOVUxMOyApIHsKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCB3YWl0X3B0ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQs IG5vZGUpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIG5vZGUgPSByYl9uZXh0KG5vZGUpOwo+Pj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICh3YWl0X3B0LT52YWx1ZSA8PSBzeW5jb2JqLT5zeW5jb2Jq X3RpbWVsaW5lLnRpbWVsaW5lKSB7Cj4+Pj4+PiArIGRtYV9mZW5jZV9zaWduYWwoJndhaXRfcHQt PmJhc2UuYmFzZSk7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYl9lcmFzZSgmd2Fp dF9wdC0+bm9kZSwKPj4+Pj4+ICsgJnN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUud2FpdF9wdF90 cmVlKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJCX0NMRUFSX05PREUoJndhaXRf cHQtPm5vZGUpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoga2ZyZWUod2FpdF9w dCkgaXMgZXhjdXRlZCBieSBmZW5jZSBwdXQgKi8KPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGRtYV9mZW5jZV9wdXQoJndhaXRfcHQtPmJhc2UuYmFzZSk7Cj4+Pj4+PiArwqDCoMKgwqDC oMKgwqAgfSBlbHNlIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIHRoZSBsb29w IGlzIGZyb20gbGVmdCB0byByaWdodCwgdGhlIGxhdGVyIGVudHJ5IAo+Pj4+Pj4gdmFsdWUgaXMK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBiaWdnZXIsIHNvIGRvbid0IG5lZWQg dG8gY2hlY2sgYW55IG1vcmUgKi8KPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFr Owo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+Pj4+ICvCoMKgwqAgfQo+Pj4+Pj4gK8KgwqDC oCBzcGluX3VubG9jaygmc3luY29iai0+bG9jayk7Cj4+Pj4+PiDCoCB9Cj4+Pj4+PiDCoCAtdm9p ZCBkcm1fc3luY29ial9hZGRfY2FsbGJhY2soc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLAo+ Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9zeW5j b2JqX2NiICpjYiwKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRy bV9zeW5jb2JqX2Z1bmNfdCBmdW5jKQo+Pj4+Pj4gKwo+Pj4+Pj4gKwo+Pj4+Pj4gK3N0YXRpYyB2 b2lkIHB0X2ZlbmNlX2NiKHN0cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQgKnNpZ25hbF9wdCkK Pj4+Pj4+IMKgIHsKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UgPSBOVUxM Owo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmo7Cj4+Pj4+PiArwqDC oMKgIHN0cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQgKnRhaWxfcHQ7Cj4+Pj4+PiArwqDCoMKg IHU2NCBwdF92YWx1ZSA9IHNpZ25hbF9wdC0+dmFsdWU7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKg IGRtYV9mZW5jZV9zaWduYWwoJnNpZ25hbF9wdC0+YmFzZS5iYXNlKTsKPj4+Pj4+ICvCoMKgwqAg ZmVuY2UgPSBzaWduYWxfcHQtPnNpZ25hbF9mZW5jZTsKPj4+Pj4+ICvCoMKgwqAgc2lnbmFsX3B0 LT5zaWduYWxfZmVuY2UgPSBOVUxMOwo+Pj4+Pj4gK8KgwqDCoCBkbWFfZmVuY2VfcHV0KGZlbmNl KTsKPj4+Pj4+ICvCoMKgwqAgZmVuY2UgPSBzaWduYWxfcHQtPnByZV9wdF9iYXNlOwo+Pj4+Pj4g K8KgwqDCoCBzaWduYWxfcHQtPnByZV9wdF9iYXNlID0gTlVMTDsKPj4+Pj4+ICvCoMKgwqAgZG1h X2ZlbmNlX3B1dChmZW5jZSk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHN5bmNvYmogPSBzaWdu YWxfcHQtPnN5bmNvYmo7Cj4+Pj4+PiDCoMKgwqDCoMKgIHNwaW5fbG9jaygmc3luY29iai0+bG9j ayk7Cj4+Pj4+PiAtwqDCoMKgIGRybV9zeW5jb2JqX2FkZF9jYWxsYmFja19sb2NrZWQoc3luY29i aiwgY2IsIGZ1bmMpOwo+Pj4+Pj4gK8KgwqDCoCBzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnRp bWVsaW5lID0gcHRfdmFsdWU7Cj4+Pj4+PiArwqDCoMKgIHRhaWxfcHQgPSAKPj4+Pj4+IGxpc3Rf bGFzdF9lbnRyeSgmc3luY29iai0+c3luY29ial90aW1lbGluZS5zaWduYWxfcHRfbGlzdCwKPj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fc3luY29i al9zaWduYWxfcHQsIGxpc3QpOwo+Pj4+Pj4gK8KgwqDCoCBpZiAoKHN5bmNvYmotPnR5cGUgPT0g RFJNX1NZTkNPQkpfVFlQRV9OT1JNQUwgJiYgc2lnbmFsX3B0IAo+Pj4+Pj4gIT0gdGFpbF9wdCkK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB8fCBzeW5jb2JqLT50eXBlID09IERSTV9TWU5DT0JKX1RZ UEVfVElNRUxJTkUpIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBsaXN0X2RlbCgmc2lnbmFsX3B0 LT5saXN0KTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBrZnJlZShzaWduYWxfcHQpIHdpbGwg YmXCoCBleGVjdXRlZCBieSBiZWxvdyBmZW5jZSBwdXQgKi8KPj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCBkbWFfZmVuY2VfcHV0KCZzaWduYWxfcHQtPmJhc2UuYmFzZSk7Cj4+Pj4+PiArwqDCoMKgIH0K Pj4+Pj4+IMKgwqDCoMKgwqAgc3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+Pj4gK8Kg wqDCoCBpZiAoc3luY29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX05PUk1BTCkKPj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoCBkcm1fc3luY29ial9ub3JtYWxfc2lnbmFsX3dhaXRfcHRzKHN5bmNv YmosIHB0X3ZhbHVlKTsKPj4+Pj4+ICvCoMKgwqAgZWxzZQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKg IGRybV9zeW5jb2JqX3RpbWVsaW5lX3NpZ25hbF93YWl0X3B0cyhzeW5jb2JqKTsKPj4+Pj4+IMKg IH0KPj4+Pj4+ICtzdGF0aWMgdm9pZCBwdF9zaWduYWxfZmVuY2VfZnVuYyhzdHJ1Y3QgZG1hX2Zl bmNlICpmZW5jZSwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgZG1hX2ZlbmNlX2NiICpjYikKPj4+Pj4+ICt7Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBkcm1f c3luY29ial9zaWduYWxfcHQgKnNpZ25hbF9wdCA9Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgY29u dGFpbmVyX29mKGNiLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfc2lnbmFsX3B0LCBzaWduYWxfY2IpOwo+ Pj4+Pj4gwqAgLXZvaWQgZHJtX3N5bmNvYmpfcmVtb3ZlX2NhbGxiYWNrKHN0cnVjdCBkcm1fc3lu Y29iaiAqc3luY29iaiwKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz dHJ1Y3QgZHJtX3N5bmNvYmpfY2IgKmNiKQo+Pj4+Pj4gK8KgwqDCoCBpZiAoc2lnbmFsX3B0LT5w cmVfcHRfYmFzZSAmJgo+Pj4+Pj4gKyAhZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKHNpZ25hbF9wdC0+ cHJlX3B0X2Jhc2UpKQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4+Pj4+ICsKPj4+ Pj4+ICvCoMKgwqAgcHRfZmVuY2VfY2Ioc2lnbmFsX3B0KTsKPj4+Pj4+ICt9Cj4+Pj4+PiArc3Rh dGljIHZvaWQgcHRfcHJlX2ZlbmNlX2Z1bmMoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UsCj4+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZV9jYiAq Y2IpCj4+Pj4+PiArewo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfc2lnbmFsX3B0 ICpzaWduYWxfcHQgPQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGNvbnRhaW5lcl9vZihjYiwgc3Ry dWN0IGRybV9zeW5jb2JqX3NpZ25hbF9wdCwgcHJlX3B0X2NiKTsKPj4+Pj4+ICsKPj4+Pj4+ICvC oMKgwqAgaWYgKHNpZ25hbF9wdC0+c2lnbmFsX2ZlbmNlICYmCj4+Pj4+PiArICFkbWFfZmVuY2Vf aXNfc2lnbmFsZWQoc2lnbmFsX3B0LT5wcmVfcHRfYmFzZSkpCj4+Pj4+PiArwqDCoMKgwqDCoMKg wqAgcmV0dXJuOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBwdF9mZW5jZV9jYihzaWduYWxfcHQp Owo+Pj4+Pj4gK30KPj4+Pj4+ICsKPj4+Pj4+ICtzdGF0aWMgaW50IGRybV9zeW5jb2JqX3RpbWVs aW5lX2NyZWF0ZV9zaWduYWxfcHQoc3RydWN0IAo+Pj4+Pj4gZHJtX3N5bmNvYmogKnN5bmNvYmos Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQgcG9pbnQpCj4+Pj4+PiDCoCB7Cj4+Pj4+PiAr wqDCoMKgIHN0cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQgKnNpZ25hbF9wdCA9Cj4+Pj4+PiAr wqDCoMKgwqDCoMKgwqAga3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9zeW5jb2JqX3NpZ25hbF9w dCksIEdGUF9LRVJORUwpOwo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfc3R1Yl9m ZW5jZSAqYmFzZTsKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX3NpZ25hbF9wdCAq dGFpbF9wdDsKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqdGFpbF9wdF9mZW5jZSA9 IE5VTEw7Cj4+Pj4+PiArwqDCoMKgIGludCByZXQgPSAwOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDC oCBpZiAoIXNpZ25hbF9wdCkKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsK Pj4+Pj4+ICvCoMKgwqAgaWYgKHN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUuc2lnbmFsX3BvaW50 ID49IHBvaW50KSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgRFJNX1dBUk4oIkEgbGF0ZXIgc2ln bmFsIGlzIHJlYWR5ISIpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gb3V0Owo+Pj4+Pj4g K8KgwqDCoCB9Cj4+Pj4+PiArwqDCoMKgIGlmICghZmVuY2UpCj4+Pj4+PiArwqDCoMKgwqDCoMKg wqAgZ290byBvdXQ7Cj4+Pj4+PiArwqDCoMKgIGRtYV9mZW5jZV9nZXQoZmVuY2UpOwo+Pj4+Pj4g wqDCoMKgwqDCoCBzcGluX2xvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+Pj4gLcKgwqDCoCBsaXN0 X2RlbF9pbml0KCZjYi0+bm9kZSk7Cj4+Pj4+PiArwqDCoMKgIGJhc2UgPSAmc2lnbmFsX3B0LT5i YXNlOwo+Pj4+Pj4gK8KgwqDCoCBzcGluX2xvY2tfaW5pdCgmYmFzZS0+bG9jayk7Cj4+Pj4+PiAr wqDCoMKgIGRtYV9mZW5jZV9pbml0KCZiYXNlLT5iYXNlLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJmRybV9zeW5jb2JqX3N0dWJfZmVuY2Vfb3BzLAo+Pj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmJhc2UtPmxvY2ssCj4+Pj4+PiArIHN5bmNvYmotPnN5 bmNvYmpfdGltZWxpbmUudGltZWxpbmVfY29udGV4dCwgcG9pbnQpOwo+Pj4+Pj4gK8KgwqDCoCBz aWduYWxfcHQtPnNpZ25hbF9mZW5jZSA9IGZlbmNlOwo+Pj4+Pj4gK8KgwqDCoCAvKiB0aW1lbGlu ZSBzeW5jb2JqIG11c3QgdGFrZSB0aGlzIGRlcGVuZGVuY3kgKi8KPj4+Pj4+ICvCoMKgwqAgaWYg KHN5bmNvYmotPnR5cGUgPT0gRFJNX1NZTkNPQkpfVFlQRV9USU1FTElORSkgewo+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIGlmIAo+Pj4+Pj4gKCFsaXN0X2VtcHR5KCZzeW5jb2JqLT5zeW5jb2JqX3Rp bWVsaW5lLnNpZ25hbF9wdF9saXN0KSkgewo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dGFpbF9wdCA9IAo+Pj4+Pj4gbGlzdF9sYXN0X2VudHJ5KCZzeW5jb2JqLT5zeW5jb2JqX3RpbWVs aW5lLnNpZ25hbF9wdF9saXN0LAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQsIGxpc3Qp Owo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGFpbF9wdF9mZW5jZSA9ICZ0YWlsX3B0 LT5iYXNlLmJhc2U7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZG1hX2ZlbmNl X2lzX3NpZ25hbGVkKHRhaWxfcHRfZmVuY2UpKQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB0YWlsX3B0X2ZlbmNlID0gTlVMTDsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGVsc2UKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2lnbmFs X3B0LT5wcmVfcHRfYmFzZSA9Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZG1hX2ZlbmNlX2dldCh0YWlsX3B0X2ZlbmNlKTsKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCB9Cj4+Pj4+PiArwqDCoMKgIH0KPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgc2lnbmFsX3B0 LT52YWx1ZSA9IHBvaW50Owo+Pj4+Pj4gK8KgwqDCoCBzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5l LnNpZ25hbF9wb2ludCA9IHBvaW50Owo+Pj4+Pj4gK8KgwqDCoCBzaWduYWxfcHQtPnN5bmNvYmog PSBzeW5jb2JqOwo+Pj4+Pj4gK8KgwqDCoCBJTklUX0xJU1RfSEVBRCgmc2lnbmFsX3B0LT5saXN0 KTsKPj4+Pj4+ICvCoMKgwqAgbGlzdF9hZGRfdGFpbCgmc2lnbmFsX3B0LT5saXN0LCAKPj4+Pj4+ ICZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnNpZ25hbF9wdF9saXN0KTsKPj4+Pj4+IMKgwqDC oMKgwqAgc3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+Pj4gK8KgwqDCoCB3YWtlX3Vw X2FsbCgmc3luY29iai0+c3luY29ial90aW1lbGluZS53cSk7Cj4+Pj4+PiArwqDCoMKgIC8qKgo+ Pj4+Pj4gK8KgwqDCoMKgICogRXZlcnkgcHQgaXMgZGVwZW5kaW5nIG9uIHNpZ25hbCBmZW5jZSBh bmQgcHJldmlvdXMgcHQgCj4+Pj4+PiBmZW5jZSwgYWRkCj4+Pj4+PiArwqDCoMKgwqAgKiBjYWxs YmFja3MgdG8gdGhlbQo+Pj4+Pj4gK8KgwqDCoMKgICovCj4+Pj4+PiArwqDCoMKgIHJldCA9IGRt YV9mZW5jZV9hZGRfY2FsbGJhY2soc2lnbmFsX3B0LT5zaWduYWxfZmVuY2UsCj4+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc2lnbmFsX3B0LT5zaWduYWxf Y2IsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdF9z aWduYWxfZmVuY2VfZnVuYyk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGlmIChzaWduYWxfcHQt PnByZV9wdF9iYXNlKSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gZG1hX2ZlbmNlX2Fk ZF9jYWxsYmFjayhzaWduYWxfcHQtPnByZV9wdF9iYXNlLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc2lnbmFsX3B0LT5wcmVfcHRfY2Is Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHB0X3ByZV9mZW5jZV9mdW5jKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0ID09IC1F Tk9FTlQpCj4+Pj4+PiArIHB0X3ByZV9mZW5jZV9mdW5jKHNpZ25hbF9wdC0+cHJlX3B0X2Jhc2Us Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZzaWdu YWxfcHQtPnByZV9wdF9jYik7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZWxzZSBpZiAocmV0KQo+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7Cj4+Pj4+PiArwqDCoMKgIH0g ZWxzZSBpZiAocmV0ID09IC1FTk9FTlQpIHsKPj4+Pj4+ICsgcHRfc2lnbmFsX2ZlbmNlX2Z1bmMo c2lnbmFsX3B0LT5zaWduYWxfZmVuY2UsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAmc2lnbmFsX3B0LT5zaWduYWxfY2IpOwo+Pj4+Pj4gK8KgwqDCoCB9 IGVsc2UgaWYgKHJldCkgewo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7 Cj4+Pj4+PiArwqDCoMKgIH0KPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+Pj4+ PiArb3V0Ogo+Pj4+Pj4gK8KgwqDCoCBkbWFfZmVuY2VfcHV0KCZzaWduYWxfcHQtPmJhc2UuYmFz ZSk7Cj4+Pj4+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+PiDCoCB9Cj4+Pj4+PiDCoCDCoCAv KioKPj4+Pj4+IEBAIC0xNDksNTMgKzM4MSwzMCBAQCB2b2lkIGRybV9zeW5jb2JqX3JlcGxhY2Vf ZmVuY2Uoc3RydWN0IAo+Pj4+Pj4gZHJtX3N5bmNvYmogKnN5bmNvYmosCj4+Pj4+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCBwb2ludCwKPj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqZmVu Y2UpCj4+Pj4+PiDCoCB7Cj4+Pj4+PiAtwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKm9sZF9mZW5j ZTsKPj4+Pj4+IC3CoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX2NiICpjdXIsICp0bXA7Cj4+Pj4+ PiAtCj4+Pj4+PiAtwqDCoMKgIGlmIChmZW5jZSkKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBkbWFf ZmVuY2VfZ2V0KGZlbmNlKTsKPj4+Pj4+IC0KPj4+Pj4+IC3CoMKgwqAgc3Bpbl9sb2NrKCZzeW5j b2JqLT5sb2NrKTsKPj4+Pj4+IC0KPj4+Pj4+IC3CoMKgwqAgb2xkX2ZlbmNlID0gcmN1X2RlcmVm ZXJlbmNlX3Byb3RlY3RlZChzeW5jb2JqLT5mZW5jZSwKPj4+Pj4+IC0gbG9ja2RlcF9pc19oZWxk KCZzeW5jb2JqLT5sb2NrKSk7Cj4+Pj4+PiAtwqDCoMKgIHJjdV9hc3NpZ25fcG9pbnRlcihzeW5j b2JqLT5mZW5jZSwgZmVuY2UpOwo+Pj4+Pj4gLQo+Pj4+Pj4gLcKgwqDCoCBpZiAoZmVuY2UgIT0g b2xkX2ZlbmNlKSB7Cj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKGN1ciwgdG1wLCAmc3luY29iai0+Y2JfbGlzdCwgCj4+Pj4+PiBub2RlKSB7Cj4+Pj4+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaXN0X2RlbF9pbml0KCZjdXItPm5vZGUpOwo+Pj4+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3VyLT5mdW5jKHN5bmNvYmosIGN1cik7Cj4+Pj4+PiAr wqDCoMKgIGlmIChzeW5jb2JqLT50eXBlID09IERSTV9TWU5DT0JKX1RZUEVfVElNRUxJTkUpIHsK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZmVuY2UpCj4+Pj4+PiArIGRybV9zeW5jb2JqX3Rp bWVsaW5lX2NyZWF0ZV9zaWduYWxfcHQoc3luY29iaiwgZmVuY2UsCj4+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHBvaW50KTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+Pj4+PiArwqDCoMKgIH0g ZWxzZSBpZiAoc3luY29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX05PUk1BTCkgewo+Pj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIHU2NCBwdF92YWx1ZTsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCBpZiAoIWZlbmNlKSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkcm1f c3luY29ial90aW1lbGluZV9maW5pKHN5bmNvYmosCj4+Pj4+PiArICZzeW5jb2JqLT5zeW5jb2Jq X3RpbWVsaW5lKTsKPj4+Pj4+ICsgZHJtX3N5bmNvYmpfdGltZWxpbmVfaW5pdCgmc3luY29iai0+ c3luY29ial90aW1lbGluZSk7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47 Cj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHB0X3Zh bHVlID0gc3luY29iai0+c3luY29ial90aW1lbGluZS5zaWduYWxfcG9pbnQgKwo+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX1NZTkNPQkpfTk9STUFMX1BPSU5UOwo+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIGRybV9zeW5jb2JqX3RpbWVsaW5lX2NyZWF0ZV9zaWduYWxfcHQoc3luY29i aiwgZmVuY2UsIAo+Pj4+Pj4gcHRfdmFsdWUpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy bjsKPj4+Pj4+ICvCoMKgwqAgfSBlbHNlIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBEUk1fRVJS T1IoInRoZSBzeW5jb2JqIHR5cGUgaXNuJ3Qgc3VwcG9ydFxuIik7Cj4+Pj4+PiDCoMKgwqDCoMKg IH0KPj4+Pj4+IC0KPj4+Pj4+IC3CoMKgwqAgc3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2spOwo+ Pj4+Pj4gLQo+Pj4+Pj4gLcKgwqDCoCBkbWFfZmVuY2VfcHV0KG9sZF9mZW5jZSk7Cj4+Pj4+PiDC oCB9Cj4+Pj4+PiDCoCBFWFBPUlRfU1lNQk9MKGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2UpOwo+ Pj4+Pj4gwqAgLXN0cnVjdCBkcm1fc3luY29ial9zdHViX2ZlbmNlIHsKPj4+Pj4+IC3CoMKgwqAg c3RydWN0IGRtYV9mZW5jZSBiYXNlOwo+Pj4+Pj4gLcKgwqDCoCBzcGlubG9ja190IGxvY2s7Cj4+ Pj4+PiAtfTsKPj4+Pj4+IC0KPj4+Pj4+IC1zdGF0aWMgY29uc3QgY2hhciAqZHJtX3N5bmNvYmpf c3R1Yl9mZW5jZV9nZXRfbmFtZShzdHJ1Y3QgCj4+Pj4+PiBkbWFfZmVuY2UgKmZlbmNlKQo+Pj4+ Pj4gLXsKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gInN5bmNvYmpzdHViIjsKPj4+Pj4+ IC19Cj4+Pj4+PiAtCj4+Pj4+PiAtc3RhdGljIGJvb2wgZHJtX3N5bmNvYmpfc3R1Yl9mZW5jZV9l bmFibGVfc2lnbmFsaW5nKHN0cnVjdCAKPj4+Pj4+IGRtYV9mZW5jZSAqZmVuY2UpCj4+Pj4+PiAt ewo+Pj4+Pj4gLcKgwqDCoCByZXR1cm4gIWRtYV9mZW5jZV9pc19zaWduYWxlZChmZW5jZSk7Cj4+ Pj4+PiAtfQo+Pj4+Pj4gLQo+Pj4+Pj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29w cyBkcm1fc3luY29ial9zdHViX2ZlbmNlX29wcyA9IHsKPj4+Pj4+IC3CoMKgwqAgLmdldF9kcml2 ZXJfbmFtZSA9IGRybV9zeW5jb2JqX3N0dWJfZmVuY2VfZ2V0X25hbWUsCj4+Pj4+PiAtwqDCoMKg IC5nZXRfdGltZWxpbmVfbmFtZSA9IGRybV9zeW5jb2JqX3N0dWJfZmVuY2VfZ2V0X25hbWUsCj4+ Pj4+PiAtwqDCoMKgIC5lbmFibGVfc2lnbmFsaW5nID0gZHJtX3N5bmNvYmpfc3R1Yl9mZW5jZV9l bmFibGVfc2lnbmFsaW5nLAo+Pj4+Pj4gLcKgwqDCoCAucmVsZWFzZSA9IE5VTEwsCj4+Pj4+PiAt fTsKPj4+Pj4+IC0KPj4+Pj4+IMKgIHN0YXRpYyBpbnQgZHJtX3N5bmNvYmpfYXNzaWduX251bGxf aGFuZGxlKHN0cnVjdCBkcm1fc3luY29iaiAKPj4+Pj4+ICpzeW5jb2JqKQo+Pj4+Pj4gwqAgewo+ Pj4+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfc3R1Yl9mZW5jZSAqZmVuY2U7Cj4+ Pj4+PiBAQCAtMjE1LDYgKzQyNCwxNDMgQEAgc3RhdGljIGludCAKPj4+Pj4+IGRybV9zeW5jb2Jq X2Fzc2lnbl9udWxsX2hhbmRsZShzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmopCj4+Pj4+PiDC oMKgwqDCoMKgIHJldHVybiAwOwo+Pj4+Pj4gwqAgfQo+Pj4+Pj4gwqAgK3N0YXRpYyBzdHJ1Y3Qg ZHJtX3N5bmNvYmpfd2FpdF9wdCAqCj4+Pj4+PiArZHJtX3N5bmNvYmpfdGltZWxpbmVfbG9va3Vw X3dhaXRfcHRfZmVuY2Uoc3RydWN0IGRybV9zeW5jb2JqIAo+Pj4+Pj4gKnN5bmNvYmosCj4+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCBwb2ludCwK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGRtYV9mZW5jZSAqKmZlbmNlKQo+Pj4+Pj4gK3sKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IHJiX25v ZGUgKm5vZGUgPSAKPj4+Pj4+IHN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUud2FpdF9wdF90cmVl LnJiX25vZGU7Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0ICp3YWl0 X3B0ID0gTlVMTDsKPj4+Pj4+ICsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZz eW5jb2JqLT5sb2NrKTsKPj4+Pj4+ICvCoMKgwqAgd2hpbGUobm9kZSkgewo+Pj4+Pj4gK8KgwqDC oMKgwqDCoMKgIGludCByZXN1bHQ7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgd2Fp dF9wdCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0LCBub2RlKTsK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXN1bHQgPSBwb2ludCAtIHdhaXRfcHQtPnZhbHVlOwo+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXN1bHQgPCAwKSB7Cj4+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBub2RlID0gbm9kZS0+cmJfbGVmdDsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCB9IGVsc2UgaWYgKHJlc3VsdCA+IDApIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG5vZGUgPSBub2RlLT5yYl9yaWdodDsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGZlbmNlKQo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKmZlbmNlID0gZG1hX2ZlbmNlX2dldCgmd2FpdF9wdC0+YmFzZS5iYXNl KTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgIH0KPj4+Pj4+ICvCoMKgwqAgfQo+Pj4+Pj4gK8KgwqDCoCBzcGluX3VubG9jaygmc3lu Y29iai0+bG9jayk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHJldHVybiB3YWl0X3B0Owo+Pj4+ Pj4gK30KPj4+Pj4+ICsKPj4+Pj4+ICtzdGF0aWMgc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQg Kgo+Pj4+Pj4gK2RybV9zeW5jb2JqX3RpbWVsaW5lX2NyZWF0ZV93YWl0X3B0X2FuZF9yZXR1cm5f ZmVuY2Uoc3RydWN0IAo+Pj4+Pj4gZHJtX3N5bmNvYmogKnN5bmNvYmosCj4+Pj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0IHBv aW50LAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZSkKPj4+Pj4+ICt7Cj4+Pj4+PiAr wqDCoMKgIHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0ICp3YWl0X3B0ID0ga3phbGxvYyhzaXpl b2YoKndhaXRfcHQpLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCk7Cj4+Pj4+PiArwqDCoMKgIHN0cnVj dCBkcm1fc3luY29ial9zdHViX2ZlbmNlICpiYXNlOwo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgcmJf bm9kZSAqKm5ldyA9IAo+Pj4+Pj4gJihzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLndhaXRfcHRf dHJlZS5yYl9ub2RlKSwgKnBhcmVudCA9IE5VTEw7Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBkcm1f c3luY29ial9zaWduYWxfcHQgKnRhaWxfc2lnbmFsX3B0ID0KPj4+Pj4+ICsgbGlzdF9sYXN0X2Vu dHJ5KCZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnNpZ25hbF9wdF9saXN0LAo+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfc2lnbmFsX3B0 LCBsaXN0KTsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgaWYgKCF3YWl0X3B0KQo+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+Pj4+Pj4gK8KgwqDCoCBiYXNlID0gJndhaXRfcHQt PmJhc2U7Cj4+Pj4+PiArwqDCoMKgIHNwaW5fbG9ja19pbml0KCZiYXNlLT5sb2NrKTsKPj4+Pj4+ ICvCoMKgwqAgZG1hX2ZlbmNlX2luaXQoJmJhc2UtPmJhc2UsCj4+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAmZHJtX3N5bmNvYmpfc3R1Yl9mZW5jZV9vcHMsCj4+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmYmFzZS0+bG9jaywKPj4+Pj4+ICsgc3luY29iai0+ c3luY29ial90aW1lbGluZS50aW1lbGluZV9jb250ZXh0LCBwb2ludCk7Cj4+Pj4+PiArwqDCoMKg IHdhaXRfcHQtPnZhbHVlID0gcG9pbnQ7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIC8qIHdhaXQg cHQgbXVzdCBiZSBpbiBhbiBvcmRlciwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGxvb2t1cCAKPj4+ Pj4+IGFuZCBzaWduYWwKPj4+Pj4+ICvCoMKgwqDCoCAqIGl0ICovCj4+Pj4+PiArwqDCoMKgIHNw aW5fbG9jaygmc3luY29iai0+bG9jayk7Cj4+Pj4+PiArwqDCoMKgIGlmIChzeW5jb2JqLT50eXBl ID09IERSTV9TWU5DT0JKX1RZUEVfVElNRUxJTkUgJiYKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBw b2ludCA8PSBzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnRpbWVsaW5lKQo+Pj4+Pj4gK8KgwqDC oMKgwqDCoMKgIGRtYV9mZW5jZV9zaWduYWwoJndhaXRfcHQtPmJhc2UuYmFzZSk7Cj4+Pj4+PiAr wqDCoMKgIGlmICgoc3luY29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX05PUk1BTCkgJiYK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCAocG9pbnQgPT0gdGFpbF9zaWduYWxfcHQtPnZhbHVlKSAm Jgo+Pj4+Pj4gKyBkbWFfZmVuY2VfaXNfc2lnbmFsZWQoJnRhaWxfc2lnbmFsX3B0LT5iYXNlLmJh c2UpKQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRtYV9mZW5jZV9zaWduYWwoJndhaXRfcHQtPmJh c2UuYmFzZSk7Cj4+Pj4+PiArwqDCoMKgIHdoaWxlKCpuZXcpIHsKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqdGhpcyA9Cj4+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByYl9lbnRyeSgqbmV3LCBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCwg bm9kZSk7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaW50IHJlc3VsdCA9IHdhaXRfcHQtPnZhbHVl IC0gdGhpcy0+dmFsdWU7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcGFyZW50ID0g Km5ldzsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmVzdWx0IDwgMCkKPj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG5ldyA9ICYoKCpuZXcpLT5yYl9sZWZ0KTsKPj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCBlbHNlIGlmIChyZXN1bHQgPiAwKQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbmV3ID0gJigoKm5ldyktPnJiX3JpZ2h0KTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBl bHNlCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGV4aXN0Owo+Pj4+Pj4gK8Kg wqDCoCB9Cj4+Pj4+PiArwqDCoMKgIGlmIChmZW5jZSkKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCAq ZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+Pj4+Pj4gK8KgwqDC oCByYl9saW5rX25vZGUoJndhaXRfcHQtPm5vZGUsIHBhcmVudCwgbmV3KTsKPj4+Pj4+ICvCoMKg wqAgcmJfaW5zZXJ0X2NvbG9yKCZ3YWl0X3B0LT5ub2RlLCAKPj4+Pj4+ICZzeW5jb2JqLT5zeW5j b2JqX3RpbWVsaW5lLndhaXRfcHRfdHJlZSk7Cj4+Pj4+PiArwqDCoMKgIHNwaW5fdW5sb2NrKCZz eW5jb2JqLT5sb2NrKTsKPj4+Pj4+ICvCoMKgwqAgcmV0dXJuIHdhaXRfcHQ7Cj4+Pj4+PiArZXhp c3Q6Cj4+Pj4+PiArwqDCoMKgIHNwaW5fdW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4+Pj4+ICvC oMKgwqAgZG1hX2ZlbmNlX3B1dCgmd2FpdF9wdC0+YmFzZS5iYXNlKTsKPj4+Pj4+ICvCoMKgwqAg d2FpdF9wdCA9IGRybV9zeW5jb2JqX3RpbWVsaW5lX2xvb2t1cF93YWl0X3B0X2ZlbmNlKHN5bmNv YmosIAo+Pj4+Pj4gcG9pbnQsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmVuY2UpOwo+Pj4+Pj4gK8KgwqDCoCBy ZXR1cm4gd2FpdF9wdDsKPj4+Pj4+ICt9Cj4+Pj4+PiArCj4+Pj4+PiArc3RhdGljIHN0cnVjdCBk bWFfZmVuY2UgKgo+Pj4+Pj4gK2RybV9zeW5jb2JqX3RpbWVsaW5lX3BvaW50X2dldChzdHJ1Y3Qg ZHJtX3N5bmNvYmogKnN5bmNvYmosIHU2NCAKPj4+Pj4+IHBvaW50LCB1NjQgZmxhZ3MpCj4+Pj4+ PiArewo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqd2FpdF9wdDsK Pj4+Pj4+ICvCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UgPSBOVUxMOwo+Pj4+Pj4gKwo+ Pj4+Pj4gK8KgwqDCoCAvKiBhbHJlYWR5IHNpZ25hbGVkLCBzaW1wbHkgcmV0dXJuIGEgc2lnbmFs ZWQgc3R1YiBmZW5jZSAqLwo+Pj4+Pj4gK8KgwqDCoCBpZiAoc3luY29iai0+dHlwZSA9PSBEUk1f U1lOQ09CSl9UWVBFX1RJTUVMSU5FICYmCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcG9pbnQgPD0g c3luY29iai0+c3luY29ial90aW1lbGluZS50aW1lbGluZSkgewo+Pj4+Pj4gK8KgwqDCoMKgwqDC oMKgIHN0cnVjdCBkcm1fc3luY29ial9zdHViX2ZlbmNlICpmZW5jZTsKPj4+Pj4+ICsKPj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoCBmZW5jZSA9IGt6YWxsb2Moc2l6ZW9mKCpmZW5jZSksIEdGUF9LRVJO RUwpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChmZW5jZSA9PSBOVUxMKQo+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKg wqDCoMKgwqAgc3Bpbl9sb2NrX2luaXQoJmZlbmNlLT5sb2NrKTsKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCBkbWFfZmVuY2VfaW5pdCgmZmVuY2UtPmJhc2UsICZkcm1fc3luY29ial9zdHViX2ZlbmNl X29wcywKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmZlbmNl LT5sb2NrLCAwLCAwKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkbWFfZmVuY2Vfc2lnbmFsKCZm ZW5jZS0+YmFzZSk7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuICZmZW5jZS0+YmFzZTsK Pj4+Pj4+ICvCoMKgwqAgfQo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCAvKiBjaGVjayBpZiB0aGUg d2FpdCBwdCBleGlzdHMgKi8KPj4+Pj4+ICvCoMKgwqAgd2FpdF9wdCA9IGRybV9zeW5jb2JqX3Rp bWVsaW5lX2xvb2t1cF93YWl0X3B0X2ZlbmNlKHN5bmNvYmosIAo+Pj4+Pj4gcG9pbnQsCj4+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJmZlbmNlKTsKPj4+Pj4+ICvCoMKgwqAgaWYgKCFmZW5jZSkgewo+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIC8qIFRoaXMgaXMgYSBuZXcgd2FpdCBwdCwgc28gY3JlYXRlIGl0ICovCj4+ Pj4+PiArwqDCoMKgwqDCoMKgwqAgd2FpdF9wdCA9IAo+Pj4+Pj4gZHJtX3N5bmNvYmpfdGltZWxp bmVfY3JlYXRlX3dhaXRfcHRfYW5kX3JldHVybl9mZW5jZShzeW5jb2JqLCBwb2ludCwKPj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJmZlbmNlKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWZlbmNlKQo+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+Pj4+PiArwqDCoMKg IH0KPj4+Pj4+ICvCoMKgwqAgaWYgKHdhaXRfcHQpIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBp bnQgcmV0ID0gMDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZmxhZ3MgJiBE Uk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfRk9SX1NVQk1JVCkgewo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0ID0gCj4+Pj4+PiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGlt ZW91dChzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLndxLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdh aXRfcHQtPnZhbHVlIDw9IAo+Pj4+Pj4gc3luY29iai0+c3luY29ial90aW1lbGluZS5zaWduYWxf cG9pbnQsCj4+Pj4+PiArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMDApKTsgLyogd2FpdCAxMHMgKi8K Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQgPD0gMCkKPj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+Pj4+PiArwqDCoMKgwqDC oMKgwqAgfQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmZW5jZTsKPj4+Pj4+ICvCoMKg wqAgfQo+Pj4+Pj4gK8KgwqDCoCByZXR1cm4gTlVMTDsKPj4+Pj4+ICt9Cj4+Pj4+PiArCj4+Pj4+ PiDCoCAvKioKPj4+Pj4+IMKgwqAgKiBkcm1fc3luY29ial9maW5kX2ZlbmNlIC0gbG9va3VwIGFu ZCByZWZlcmVuY2UgdGhlIGZlbmNlIGluIGEgCj4+Pj4+PiBzeW5jIG9iamVjdAo+Pj4+Pj4gwqDC oCAqIEBmaWxlX3ByaXZhdGU6IGRybSBmaWxlIHByaXZhdGUgcG9pbnRlcgo+Pj4+Pj4gQEAgLTIy OSwyMCArNTc1LDQ1IEBAIHN0YXRpYyBpbnQgCj4+Pj4+PiBkcm1fc3luY29ial9hc3NpZ25fbnVs bF9oYW5kbGUoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqKQo+Pj4+Pj4gwqDCoCAqIGNvbnRh aW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBmZW5jZSwgd2hpY2ggbXVzdCBiZSByZWxlYXNlZCBieSAK Pj4+Pj4+IGNhbGxpbmcKPj4+Pj4+IMKgwqAgKiBkbWFfZmVuY2VfcHV0KCkuCj4+Pj4+PiDCoMKg ICovCj4+Pj4+PiAtaW50IGRybV9zeW5jb2JqX2ZpbmRfZmVuY2Uoc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXZhdGUsCj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgaGFu ZGxlLCB1NjQgcG9pbnQsCj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgZG1hX2ZlbmNlICoqZmVuY2UpCj4+Pj4+PiAraW50IGRybV9zeW5jb2JqX3NlYXJjaF9mZW5j ZShzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosIHU2NCAKPj4+Pj4+IHBvaW50LAo+Pj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCBmbGFncywgc3RydWN0IGRtYV9m ZW5jZSAqKmZlbmNlKQo+Pj4+Pj4gwqAgewo+Pj4+Pj4gLcKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNv YmogKnN5bmNvYmogPSBkcm1fc3luY29ial9maW5kKGZpbGVfcHJpdmF0ZSwgCj4+Pj4+PiBoYW5k bGUpOwo+Pj4+Pj4gwqDCoMKgwqDCoCBpbnQgcmV0ID0gMDsKPj4+Pj4+IMKgIMKgwqDCoMKgwqAg aWYgKCFzeW5jb2JqKQo+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PRU5UOwo+ Pj4+Pj4gwqAgLcKgwqDCoCAqZmVuY2UgPSBkcm1fc3luY29ial9mZW5jZV9nZXQoc3luY29iaik7 Cj4+Pj4+PiArwqDCoMKgIGlmIChzeW5jb2JqLT50eXBlID09IERSTV9TWU5DT0JKX1RZUEVfTk9S TUFMKSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgLypOT1JNQUwgc3luY29iaiBhbHdheXMgd2Fp dCBvbiBsYXN0IHB0ICovCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgdTY0IHRhaWxfcHRfdmFsdWUg PSBzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnNpZ25hbF9wb2ludDsKPj4+Pj4+ICsKPj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoCBpZiAodGFpbF9wdF92YWx1ZSA9PSAwKQo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdGFpbF9wdF92YWx1ZSArPSBEUk1fU1lOQ09CSl9OT1JNQUxfUE9JTlQ7 Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgLyogTk9STUFMIHN5bmNvYmogZG9lc24ndCBjYXJlIHBv aW50IHZhbHVlICovCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgV0FSTl9PTihwb2ludCAhPSAwKTsK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCAqZmVuY2UgPSBkcm1fc3luY29ial90aW1lbGluZV9wb2lu dF9nZXQoc3luY29iaiwgCj4+Pj4+PiB0YWlsX3B0X3ZhbHVlLAo+Pj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmbGFncyk7Cj4+Pj4+ PiArwqDCoMKgIH0gZWxzZSBpZiAoc3luY29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX1RJ TUVMSU5FKSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgKmZlbmNlID0gZHJtX3N5bmNvYmpfdGlt ZWxpbmVfcG9pbnRfZ2V0KHN5bmNvYmosIHBvaW50LAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmbGFncyk7Cj4+Pj4+PiArwqDC oMKgIH0gZWxzZSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJEb24ndCBzdXBw b3J0IHRoaXMgdHlwZSBzeW5jb2JqXG4iKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCAqZmVuY2Ug PSBOVUxMOwo+Pj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+PiDCoMKgwqDCoMKgIGlmICghKmZlbmNlKSB7 Cj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4+Pj4+IMKgwqDCoMKg wqAgfQo+Pj4+Pj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4gK30KPj4+Pj4+ICtFWFBPUlRf U1lNQk9MKGRybV9zeW5jb2JqX3NlYXJjaF9mZW5jZSk7Cj4+Pj4+PiAraW50IGRybV9zeW5jb2Jq X2ZpbmRfZmVuY2Uoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCj4+Pj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgaGFuZGxlLCB1NjQgcG9pbnQsCj4+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2UpIHsKPj4+ Pj4+ICvCoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqID0gZHJtX3N5bmNvYmpfZmlu ZChmaWxlX3ByaXZhdGUsIAo+Pj4+Pj4gaGFuZGxlKTsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAg aW50IHJldCA9IGRybV9zeW5jb2JqX3NlYXJjaF9mZW5jZShzeW5jb2JqLCBwb2ludCwKPj4+Pj4+ ICsgRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0ZPUl9TVUJNSVQsCj4+Pj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmVuY2UpOwo+Pj4+Pj4gwqDCoMKgwqDC oCBkcm1fc3luY29ial9wdXQoc3luY29iaik7Cj4+Pj4+PiDCoMKgwqDCoMKgIHJldHVybiByZXQ7 Cj4+Pj4+PiDCoCB9Cj4+Pj4+PiBAQCAtMjU5LDcgKzYzMCw3IEBAIHZvaWQgZHJtX3N5bmNvYmpf ZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKPj4+Pj4+IMKgwqDCoMKgwqAgc3RydWN0IGRybV9zeW5j b2JqICpzeW5jb2JqID0gY29udGFpbmVyX29mKGtyZWYsCj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNv YmosCj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZWZjb3VudCk7Cj4+Pj4+PiAtwqDCoMKgIGRybV9zeW5jb2JqX3JlcGxhY2Vf ZmVuY2Uoc3luY29iaiwgMCwgTlVMTCk7Cj4+Pj4+PiArwqDCoMKgIGRybV9zeW5jb2JqX3RpbWVs aW5lX2Zpbmkoc3luY29iaiwgJnN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUpOwo+Pj4+Pj4gwqDC oMKgwqDCoCBrZnJlZShzeW5jb2JqKTsKPj4+Pj4+IMKgIH0KPj4+Pj4+IMKgIEVYUE9SVF9TWU1C T0woZHJtX3N5bmNvYmpfZnJlZSk7Cj4+Pj4+PiBAQCAtMjg3LDggKzY1OCwxMiBAQCBpbnQgZHJt X3N5bmNvYmpfY3JlYXRlKHN0cnVjdCBkcm1fc3luY29iaiAKPj4+Pj4+ICoqb3V0X3N5bmNvYmos IHVpbnQzMl90IGZsYWdzLAo+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVN Owo+Pj4+Pj4gwqAgwqDCoMKgwqDCoCBrcmVmX2luaXQoJnN5bmNvYmotPnJlZmNvdW50KTsKPj4+ Pj4+IC3CoMKgwqAgSU5JVF9MSVNUX0hFQUQoJnN5bmNvYmotPmNiX2xpc3QpOwo+Pj4+Pj4gwqDC oMKgwqDCoCBzcGluX2xvY2tfaW5pdCgmc3luY29iai0+bG9jayk7Cj4+Pj4+PiArwqDCoMKgIGlm IChmbGFncyAmIERSTV9TWU5DT0JKX0NSRUFURV9UWVBFX1RJTUVMSU5FKQo+Pj4+Pj4gK8KgwqDC oMKgwqDCoMKgIHN5bmNvYmotPnR5cGUgPSBEUk1fU1lOQ09CSl9UWVBFX1RJTUVMSU5FOwo+Pj4+ Pj4gK8KgwqDCoCBlbHNlCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgc3luY29iai0+dHlwZSA9IERS TV9TWU5DT0JKX1RZUEVfTk9STUFMOwo+Pj4+Pj4gKyBkcm1fc3luY29ial90aW1lbGluZV9pbml0 KCZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lKTsKPj4+Pj4+IMKgIMKgwqDCoMKgwqAgaWYgKGZs YWdzICYgRFJNX1NZTkNPQkpfQ1JFQVRFX1NJR05BTEVEKSB7Cj4+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0ID0gZHJtX3N5bmNvYmpfYXNzaWduX251bGxfaGFuZGxlKHN5bmNvYmopOwo+Pj4+ Pj4gQEAgLTY0Niw3ICsxMDIxLDYgQEAgc3RydWN0IHN5bmNvYmpfd2FpdF9lbnRyeSB7Cj4+Pj4+ PiDCoMKgwqDCoMKgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKPj4+Pj4+IMKgwqDCoMKgwqAg c3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4+Pj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVu Y2VfY2IgZmVuY2VfY2I7Cj4+Pj4+PiAtwqDCoMKgIHN0cnVjdCBkcm1fc3luY29ial9jYiBzeW5j b2JqX2NiOwo+Pj4+Pj4gwqAgfTsKPj4+Pj4+IMKgIMKgIHN0YXRpYyB2b2lkIHN5bmNvYmpfd2Fp dF9mZW5jZV9mdW5jKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlLAo+Pj4+Pj4gQEAgLTY1OCwxOCAr MTAzMiw2IEBAIHN0YXRpYyB2b2lkIHN5bmNvYmpfd2FpdF9mZW5jZV9mdW5jKHN0cnVjdCAKPj4+ Pj4+IGRtYV9mZW5jZSAqZmVuY2UsCj4+Pj4+PiDCoMKgwqDCoMKgIHdha2VfdXBfcHJvY2Vzcyh3 YWl0LT50YXNrKTsKPj4+Pj4+IMKgIH0KPj4+Pj4+IMKgIC1zdGF0aWMgdm9pZCBzeW5jb2JqX3dh aXRfc3luY29ial9mdW5jKHN0cnVjdCBkcm1fc3luY29iaiAKPj4+Pj4+ICpzeW5jb2JqLAo+Pj4+ Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJt X3N5bmNvYmpfY2IgKmNiKQo+Pj4+Pj4gLXsKPj4+Pj4+IC3CoMKgwqAgc3RydWN0IHN5bmNvYmpf d2FpdF9lbnRyeSAqd2FpdCA9Cj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgY29udGFpbmVyX29mKGNi LCBzdHJ1Y3Qgc3luY29ial93YWl0X2VudHJ5LCBzeW5jb2JqX2NiKTsKPj4+Pj4+IC0KPj4+Pj4+ IC3CoMKgwqAgLyogVGhpcyBoYXBwZW5zIGluc2lkZSB0aGUgc3luY29iaiBsb2NrICovCj4+Pj4+ PiAtwqDCoMKgIHdhaXQtPmZlbmNlID0gCj4+Pj4+PiBkbWFfZmVuY2VfZ2V0KHJjdV9kZXJlZmVy ZW5jZV9wcm90ZWN0ZWQoc3luY29iai0+ZmVuY2UsCj4+Pj4+PiAtIGxvY2tkZXBfaXNfaGVsZCgm c3luY29iai0+bG9jaykpKTsKPj4+Pj4+IC3CoMKgwqAgd2FrZV91cF9wcm9jZXNzKHdhaXQtPnRh c2spOwo+Pj4+Pj4gLX0KPj4+Pj4+IC0KPj4+Pj4+IMKgIHN0YXRpYyBzaWduZWQgbG9uZyBkcm1f c3luY29ial9hcnJheV93YWl0X3RpbWVvdXQoc3RydWN0IAo+Pj4+Pj4gZHJtX3N5bmNvYmogKipz eW5jb2JqcywKPj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB1aW50MzJfdCBjb3VudCwKPj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50MzJfdCBmbGFncywKPj4+Pj4+ IEBAIC02OTMsMTQgKzEwNTUsMTEgQEAgc3RhdGljIHNpZ25lZCBsb25nIAo+Pj4+Pj4gZHJtX3N5 bmNvYmpfYXJyYXlfd2FpdF90aW1lb3V0KHN0cnVjdCBkcm1fc3luY29iaiAqKnN5bmNvYmpzLAo+ Pj4+Pj4gwqDCoMKgwqDCoCBzaWduYWxlZF9jb3VudCA9IDA7Cj4+Pj4+PiDCoMKgwqDCoMKgIGZv ciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Cj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZW50 cmllc1tpXS50YXNrID0gY3VycmVudDsKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBlbnRyaWVzW2ld LmZlbmNlID0gZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KHN5bmNvYmpzW2ldKTsKPj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCByZXQgPSBkcm1fc3luY29ial9zZWFyY2hfZmVuY2Uoc3luY29ianNbaV0sIDAs IDAsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmZW50cmllc1tpXS5mZW5jZSk7Cj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KCFlbnRyaWVzW2ldLmZlbmNlKSB7Cj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAo ZmxhZ3MgJiBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfRk9SX1NVQk1JVCkgewo+Pj4+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4+Pj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldCA9IC1FSU5WQUw7Cj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGdvdG8gY2xlYW51cF9lbnRyaWVzOwo+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gY2xlYW51cF9lbnRyaWVzOwo+Pj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIH0KPj4+Pj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZG1hX2ZlbmNl X2lzX3NpZ25hbGVkKGVudHJpZXNbaV0uZmVuY2UpKSB7Cj4+Pj4+PiBAQCAtNzI4LDE1ICsxMDg3 LDYgQEAgc3RhdGljIHNpZ25lZCBsb25nIAo+Pj4+Pj4gZHJtX3N5bmNvYmpfYXJyYXlfd2FpdF90 aW1lb3V0KHN0cnVjdCBkcm1fc3luY29iaiAqKnN5bmNvYmpzLAo+Pj4+Pj4gwqDCoMKgwqDCoMKg ICogZmFsbHRob3VnaCBhbmQgdHJ5IGEgMCB0aW1lb3V0IHdhaXQhCj4+Pj4+PiDCoMKgwqDCoMKg wqAgKi8KPj4+Pj4+IMKgIC3CoMKgwqAgaWYgKGZsYWdzICYgRFJNX1NZTkNPQkpfV0FJVF9GTEFH U19XQUlUX0ZPUl9TVUJNSVQpIHsKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBp IDwgY291bnQ7ICsraSkgewo+Pj4+Pj4gLSBkcm1fc3luY29ial9mZW5jZV9nZXRfb3JfYWRkX2Nh bGxiYWNrKHN5bmNvYmpzW2ldLAo+Pj4+Pj4gLSAmZW50cmllc1tpXS5mZW5jZSwKPj4+Pj4+IC0g JmVudHJpZXNbaV0uc3luY29ial9jYiwKPj4+Pj4+IC0gc3luY29ial93YWl0X3N5bmNvYmpfZnVu Yyk7Cj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgfQo+Pj4+Pj4gLcKgwqDCoCB9Cj4+Pj4+PiAtCj4+ Pj4+PiDCoMKgwqDCoMKgIGRvIHsKPj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzZXRfY3VycmVu dF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwo+Pj4+Pj4gwqAgQEAgLTc4NCwxMyArMTEzNCwx MCBAQCBzdGF0aWMgc2lnbmVkIGxvbmcgCj4+Pj4+PiBkcm1fc3luY29ial9hcnJheV93YWl0X3Rp bWVvdXQoc3RydWN0IGRybV9zeW5jb2JqICoqc3luY29ianMsCj4+Pj4+PiDCoCDCoCBjbGVhbnVw X2VudHJpZXM6Cj4+Pj4+PiDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7 Cj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKGVudHJpZXNbaV0uc3luY29ial9jYi5mdW5jKQo+ Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX3N5bmNvYmpfcmVtb3ZlX2NhbGxiYWNr KHN5bmNvYmpzW2ldLAo+Pj4+Pj4gLSAmZW50cmllc1tpXS5zeW5jb2JqX2NiKTsKPj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCBkbWFfZmVuY2VfcHV0KGVudHJpZXNbaV0uZmVuY2UpOwo+Pj4+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChlbnRyaWVzW2ldLmZlbmNlX2NiLmZ1bmMpCj4+Pj4+PiBkbWFf ZmVuY2VfcmVtb3ZlX2NhbGxiYWNrKGVudHJpZXNbaV0uZmVuY2UsCj4+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmVudHJpZXNbaV0u ZmVuY2VfY2IpOwo+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGRtYV9mZW5jZV9wdXQoZW50cmllc1tp XS5mZW5jZSk7Cj4+Pj4+PiDCoMKgwqDCoMKgIH0KPj4+Pj4+IMKgwqDCoMKgwqAga2ZyZWUoZW50 cmllcyk7Cj4+Pj4+PiDCoCBAQCAtOTY1LDEyICsxMzEyLDIwIEBAIGRybV9zeW5jb2JqX3Jlc2V0 X2lvY3RsKHN0cnVjdCAKPj4+Pj4+IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPj4+Pj4+ IMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHJldDsKPj4+Pj4+IMKgIC3CoMKgwqAgZm9yIChpID0gMDsgaSA8IGFyZ3MtPmNvdW50X2hhbmRs ZXM7IGkrKykKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBkcm1fc3luY29ial9yZXBsYWNlX2ZlbmNl KHN5bmNvYmpzW2ldLCAwLCBOVUxMKTsKPj4+Pj4+IC0KPj4+Pj4+ICvCoMKgwqAgZm9yIChpID0g MDsgaSA8IGFyZ3MtPmNvdW50X2hhbmRsZXM7IGkrKykgewo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKg IGlmIChzeW5jb2Jqc1tpXS0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX1RJTUVMSU5FKSB7Cj4+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoInRpbWVsaW5lIHN5bmNvYmog Y2Fubm90IHJlc2V0IVxuIik7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAt RUlOVkFMOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7Cj4+Pj4+PiAr wqDCoMKgwqDCoMKgwqAgfQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRybV9zeW5jb2JqX3RpbWVs aW5lX2Zpbmkoc3luY29ianNbaV0sCj4+Pj4+PiArICZzeW5jb2Jqc1tpXS0+c3luY29ial90aW1l bGluZSk7Cj4+Pj4+PiArIGRybV9zeW5jb2JqX3RpbWVsaW5lX2luaXQoJnN5bmNvYmpzW2ldLT5z eW5jb2JqX3RpbWVsaW5lKTsKPj4+Pj4+ICvCoMKgwqAgfQo+Pj4+Pj4gK291dDoKPj4+Pj4+IMKg wqDCoMKgwqAgZHJtX3N5bmNvYmpfYXJyYXlfZnJlZShzeW5jb2JqcywgYXJncy0+Y291bnRfaGFu ZGxlcyk7Cj4+Pj4+PiDCoCAtwqDCoMKgIHJldHVybiAwOwo+Pj4+Pj4gK8KgwqDCoCByZXR1cm4g cmV0Owo+Pj4+Pj4gwqAgfQo+Pj4+Pj4gwqAgwqAgaW50Cj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIAo+Pj4+Pj4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPj4+Pj4+IGluZGV4IDcyMDlkZDgz MmQzOS4uYmIyMGQzMThjOWQ2IDEwMDY0NAo+Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPj4+Pj4+IEBAIC0yMTgyLDcgKzIxODIsOSBAQCBhd2Fp dF9mZW5jZV9hcnJheShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKPj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoIShmbGFncyAmIEk5MTVfRVhFQ19GRU5DRV9XQUlUKSkKPj4+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4+Pj4gwqAgLcKgwqDCoMKgwqDC oMKgIGZlbmNlID0gZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KHN5bmNvYmopOwo+Pj4+Pj4gK8KgwqDC oMKgwqDCoMKgIGRybV9zeW5jb2JqX3NlYXJjaF9mZW5jZShzeW5jb2JqLCAwLAo+Pj4+Pj4gKyBE Uk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfRk9SX1NVQk1JVCwKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZmZW5jZSk7Cj4+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKCFmZW5jZSkKPj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiAtRUlOVkFMOwo+Pj4+Pj4gwqAgZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9zeW5j b2JqLmggYi9pbmNsdWRlL2RybS9kcm1fc3luY29iai5oCj4+Pj4+PiBpbmRleCA0MjU0MzJiODVh ODcuLjY1N2M5N2RjMjVlYyAxMDA2NDQKPj4+Pj4+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9zeW5j b2JqLmgKPj4+Pj4+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9zeW5jb2JqLmgKPj4+Pj4+IEBAIC0z MCw2ICszMCwyNSBAQAo+Pj4+Pj4gwqAgwqAgc3RydWN0IGRybV9zeW5jb2JqX2NiOwo+Pj4+Pj4g wqAgK2VudW0gZHJtX3N5bmNvYmpfdHlwZSB7Cj4+Pj4+PiArwqDCoMKgIERSTV9TWU5DT0JKX1RZ UEVfTk9STUFMLAo+Pj4+Pj4gK8KgwqDCoCBEUk1fU1lOQ09CSl9UWVBFX1RJTUVMSU5FCj4+Pj4+ PiArfTsKPj4+Pj4+ICsKPj4+Pj4+ICtzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmUgewo+Pj4+ Pj4gK8KgwqDCoCB3YWl0X3F1ZXVlX2hlYWRfdMKgwqDCoCB3cTsKPj4+Pj4+ICvCoMKgwqAgdTY0 IHRpbWVsaW5lX2NvbnRleHQ7Cj4+Pj4+PiArwqDCoMKgIC8qKgo+Pj4+Pj4gK8KgwqDCoMKgICog QHRpbWVsaW5lOiBzeW5jb2JqIHRpbWVsaW5lCj4+Pj4+PiArwqDCoMKgwqAgKi8KPj4+Pj4+ICvC oMKgwqAgdTY0IHRpbWVsaW5lOwo+Pj4+Pj4gK8KgwqDCoCB1NjQgc2lnbmFsX3BvaW50Owo+Pj4+ Pj4gKwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgcmJfcm9vdCB3YWl0X3B0X3RyZWU7 Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWQgc2lnbmFsX3B0X2xpc3Q7Cj4+Pj4+PiAr fTsKPj4+Pj4+ICsKPj4+Pj4+IMKgIC8qKgo+Pj4+Pj4gwqDCoCAqIHN0cnVjdCBkcm1fc3luY29i aiAtIHN5bmMgb2JqZWN0Lgo+Pj4+Pj4gwqDCoCAqCj4+Pj4+PiBAQCAtNDEsMTkgKzYwLDE2IEBA IHN0cnVjdCBkcm1fc3luY29iaiB7Cj4+Pj4+PiDCoMKgwqDCoMKgwqAgKi8KPj4+Pj4+IMKgwqDC oMKgwqAgc3RydWN0IGtyZWYgcmVmY291bnQ7Cj4+Pj4+PiDCoMKgwqDCoMKgIC8qKgo+Pj4+Pj4g LcKgwqDCoMKgICogQGZlbmNlOgo+Pj4+Pj4gLcKgwqDCoMKgICogTlVMTCBvciBhIHBvaW50ZXIg dG8gdGhlIGZlbmNlIGJvdW5kIHRvIHRoaXMgb2JqZWN0Lgo+Pj4+Pj4gLcKgwqDCoMKgICoKPj4+ Pj4+IC3CoMKgwqDCoCAqIFRoaXMgZmllbGQgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LiBV c2UgCj4+Pj4+PiBkcm1fc3luY29ial9mZW5jZV9nZXQoKQo+Pj4+Pj4gLcKgwqDCoMKgICogYW5k IGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2UoKSBpbnN0ZWFkLgo+Pj4+Pj4gK8KgwqDCoMKgICog QHR5cGU6IGluZGljYXRlIHN5bmNvYmogdHlwZQo+Pj4+Pj4gwqDCoMKgwqDCoMKgICovCj4+Pj4+ PiAtwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgX19yY3UgKmZlbmNlOwo+Pj4+Pj4gK8KgwqDCoCBl bnVtIGRybV9zeW5jb2JqX3R5cGUgdHlwZTsKPj4+Pj4+IMKgwqDCoMKgwqAgLyoqCj4+Pj4+PiAt wqDCoMKgwqAgKiBAY2JfbGlzdDogTGlzdCBvZiBjYWxsYmFja3MgdG8gY2FsbCB3aGVuIHRoZSAm ZmVuY2UgZ2V0cyAKPj4+Pj4+IHJlcGxhY2VkLgo+Pj4+Pj4gK8KgwqDCoMKgICogQHN5bmNvYmpf dGltZWxpbmU6IHRpbWVsaW5lCj4+Pj4+PiDCoMKgwqDCoMKgwqAgKi8KPj4+Pj4+IC3CoMKgwqAg c3RydWN0IGxpc3RfaGVhZCBjYl9saXN0Owo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNv YmpfdGltZWxpbmUgc3luY29ial90aW1lbGluZTsKPj4+Pj4+ICsKPj4+Pj4+IMKgwqDCoMKgwqAg LyoqCj4+Pj4+PiAtwqDCoMKgwqAgKiBAbG9jazogUHJvdGVjdHMgJmNiX2xpc3QgYW5kIHdyaXRl LWxvY2tzICZmZW5jZS4KPj4+Pj4+ICvCoMKgwqDCoCAqIEBsb2NrOiBQcm90ZWN0cyB0aW1lbGlu ZSBsaXN0IGFuZCB3cml0ZS1sb2NrcyAmZmVuY2UuCj4+Pj4+PiDCoMKgwqDCoMKgwqAgKi8KPj4+ Pj4+IMKgwqDCoMKgwqAgc3BpbmxvY2tfdCBsb2NrOwo+Pj4+Pj4gwqDCoMKgwqDCoCAvKioKPj4+ Pj4+IEBAIC02MiwyNSArNzgsNiBAQCBzdHJ1Y3QgZHJtX3N5bmNvYmogewo+Pj4+Pj4gwqDCoMKg wqDCoCBzdHJ1Y3QgZmlsZSAqZmlsZTsKPj4+Pj4+IMKgIH07Cj4+Pj4+PiDCoCAtdHlwZWRlZiB2 b2lkICgqZHJtX3N5bmNvYmpfZnVuY190KShzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosCj4+ Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fc3lu Y29ial9jYiAqY2IpOwo+Pj4+Pj4gLQo+Pj4+Pj4gLS8qKgo+Pj4+Pj4gLSAqIHN0cnVjdCBkcm1f c3luY29ial9jYiAtIGNhbGxiYWNrIGZvciBkcm1fc3luY29ial9hZGRfY2FsbGJhY2sKPj4+Pj4+ IC0gKiBAbm9kZTogdXNlZCBieSBkcm1fc3luY29iX2FkZF9jYWxsYmFjayB0byBhcHBlbmQgdGhp cyBzdHJ1Y3QgdG8KPj4+Pj4+IC0gKsKgwqDCoMKgwqAgJmRybV9zeW5jb2JqLmNiX2xpc3QKPj4+ Pj4+IC0gKiBAZnVuYzogZHJtX3N5bmNvYmpfZnVuY190IHRvIGNhbGwKPj4+Pj4+IC0gKgo+Pj4+ Pj4gLSAqIFRoaXMgc3RydWN0IHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgZHJtX3N5bmNvYmpfYWRk X2NhbGxiYWNrLCAKPj4+Pj4+IGFkZGl0aW9uYWwKPj4+Pj4+IC0gKiBkYXRhIGNhbiBiZSBwYXNz ZWQgYWxvbmcgYnkgZW1iZWRkaW5nIGRybV9zeW5jb2JqX2NiIGluIAo+Pj4+Pj4gYW5vdGhlciBz dHJ1Y3QuCj4+Pj4+PiAtICogVGhlIGNhbGxiYWNrIHdpbGwgZ2V0IGNhbGxlZCB0aGUgbmV4dCB0 aW1lIAo+Pj4+Pj4gZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZSBpcwo+Pj4+Pj4gLSAqIGNhbGxl ZC4KPj4+Pj4+IC0gKi8KPj4+Pj4+IC1zdHJ1Y3QgZHJtX3N5bmNvYmpfY2Igewo+Pj4+Pj4gLcKg wqDCoCBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cj4+Pj4+PiAtwqDCoMKgIGRybV9zeW5jb2JqX2Z1 bmNfdCBmdW5jOwo+Pj4+Pj4gLX07Cj4+Pj4+PiAtCj4+Pj4+PiDCoCB2b2lkIGRybV9zeW5jb2Jq X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpOwo+Pj4+Pj4gwqAgwqAgLyoqCj4+Pj4+PiBAQCAtMTA2 LDI5ICsxMDMsNiBAQCBkcm1fc3luY29ial9wdXQoc3RydWN0IGRybV9zeW5jb2JqICpvYmopCj4+ Pj4+PiDCoMKgwqDCoMKgIGtyZWZfcHV0KCZvYmotPnJlZmNvdW50LCBkcm1fc3luY29ial9mcmVl KTsKPj4+Pj4+IMKgIH0KPj4+Pj4+IMKgIC0vKioKPj4+Pj4+IC0gKiBkcm1fc3luY29ial9mZW5j ZV9nZXQgLSBnZXQgYSByZWZlcmVuY2UgdG8gYSBmZW5jZSBpbiBhIHN5bmMgCj4+Pj4+PiBvYmpl Y3QKPj4+Pj4+IC0gKiBAc3luY29iajogc3luYyBvYmplY3QuCj4+Pj4+PiAtICoKPj4+Pj4+IC0g KiBUaGlzIGFjcXVpcmVzIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvICZkcm1fc3luY29iai5mZW5j ZSAKPj4+Pj4+IGNvbnRhaW5lZCBpbiBAb2JqLAo+Pj4+Pj4gLSAqIGlmIG5vdCBOVUxMLiBJdCBp cyBpbGxlZ2FsIHRvIGNhbGwgdGhpcyB3aXRob3V0IGFscmVhZHkgCj4+Pj4+PiBob2xkaW5nIGEg cmVmZXJlbmNlLgo+Pj4+Pj4gLSAqIE5vIGxvY2tzIHJlcXVpcmVkLgo+Pj4+Pj4gLSAqCj4+Pj4+ PiAtICogUmV0dXJuczoKPj4+Pj4+IC0gKiBFaXRoZXIgdGhlIGZlbmNlIG9mIEBvYmogb3IgTlVM TCBpZiB0aGVyZSdzIG5vbmUuCj4+Pj4+PiAtICovCj4+Pj4+PiAtc3RhdGljIGlubGluZSBzdHJ1 Y3QgZG1hX2ZlbmNlICoKPj4+Pj4+IC1kcm1fc3luY29ial9mZW5jZV9nZXQoc3RydWN0IGRybV9z eW5jb2JqICpzeW5jb2JqKQo+Pj4+Pj4gLXsKPj4+Pj4+IC3CoMKgwqAgc3RydWN0IGRtYV9mZW5j ZSAqZmVuY2U7Cj4+Pj4+PiAtCj4+Pj4+PiAtwqDCoMKgIHJjdV9yZWFkX2xvY2soKTsKPj4+Pj4+ IC3CoMKgwqAgZmVuY2UgPSBkbWFfZmVuY2VfZ2V0X3JjdV9zYWZlKCZzeW5jb2JqLT5mZW5jZSk7 Cj4+Pj4+PiAtwqDCoMKgIHJjdV9yZWFkX3VubG9jaygpOwo+Pj4+Pj4gLQo+Pj4+Pj4gLcKgwqDC oCByZXR1cm4gZmVuY2U7Cj4+Pj4+PiAtfQo+Pj4+Pj4gLQo+Pj4+Pj4gwqAgc3RydWN0IGRybV9z eW5jb2JqICpkcm1fc3luY29ial9maW5kKHN0cnVjdCBkcm1fZmlsZSAKPj4+Pj4+ICpmaWxlX3By aXZhdGUsCj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB1MzIgaGFuZGxlKTsKPj4+Pj4+IMKgIHZvaWQgZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZShz dHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosIHU2NCAKPj4+Pj4+IHBvaW50LAo+Pj4+Pj4gQEAg LTE0Miw1ICsxMTYsNyBAQCBpbnQgZHJtX3N5bmNvYmpfY3JlYXRlKHN0cnVjdCBkcm1fc3luY29i aiAKPj4+Pj4+ICoqb3V0X3N5bmNvYmosIHVpbnQzMl90IGZsYWdzLAo+Pj4+Pj4gwqAgaW50IGRy bV9zeW5jb2JqX2dldF9oYW5kbGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCj4+Pj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5 bmNvYmosIHUzMiAqaGFuZGxlKTsKPj4+Pj4+IMKgIGludCBkcm1fc3luY29ial9nZXRfZmQoc3Ry dWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLCBpbnQgKnBfZmQpOwo+Pj4+Pj4gK2ludCBkcm1fc3lu Y29ial9zZWFyY2hfZmVuY2Uoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLCB1NjQgCj4+Pj4+ PiBwb2ludCwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQgZmxh Z3MsIHN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZSk7Cj4+Pj4+PiDCoCDCoCAjZW5kaWYKPj4+Pj4+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS9k cm0uaAo+Pj4+Pj4gaW5kZXggMzAwZjMzNjYzM2YyLi5jZWJkYjI1NDFlYjcgMTAwNjQ0Cj4+Pj4+ PiAtLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybS5oCj4+Pj4+PiArKysgYi9pbmNsdWRlL3VhcGkv ZHJtL2RybS5oCj4+Pj4+PiBAQCAtNzE3LDYgKzcxNyw3IEBAIHN0cnVjdCBkcm1fcHJpbWVfaGFu ZGxlIHsKPj4+Pj4+IMKgIHN0cnVjdCBkcm1fc3luY29ial9jcmVhdGUgewo+Pj4+Pj4gwqDCoMKg wqDCoCBfX3UzMiBoYW5kbGU7Cj4+Pj4+PiDCoCAjZGVmaW5lIERSTV9TWU5DT0JKX0NSRUFURV9T SUdOQUxFRCAoMSA8PCAwKQo+Pj4+Pj4gKyNkZWZpbmUgRFJNX1NZTkNPQkpfQ1JFQVRFX1RZUEVf VElNRUxJTkUgKDEgPDwgMSkKPj4+Pj4+IMKgwqDCoMKgwqAgX191MzIgZmxhZ3M7Cj4+Pj4+PiDC oCB9Owo+Pj4+Pgo+Pj4+Cj4+Pgo+Pj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KPj4+IGFtZC1nZnggbWFpbGluZyBsaXN0Cj4+PiBhbWQtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwo+Pj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9hbWQtZ2Z4Cj4+Cj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+IGFtZC1nZnggbWFpbGluZyBsaXN0Cj4gYW1kLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2FtZC1nZngKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=