From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [RFC 01/29] drm/i915/gvt: Introduce the basic architecture of GVT-g Date: Tue, 16 Feb 2016 16:08:42 +0200 Message-ID: <1455631722.4977.55.camel@linux.intel.com> References: <1453976511-27322-1-git-send-email-zhi.a.wang@intel.com> <1453976511-27322-2-git-send-email-zhi.a.wang@intel.com> <1454075829.11299.48.camel@linux.intel.com> <56B197AB.5070406@intel.com> <56C2F1C4.1030309@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 820236E7D9 for ; Tue, 16 Feb 2016 14:10:01 +0000 (UTC) In-Reply-To: <56C2F1C4.1030309@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Zhi Wang , daniel.vetter@ffwll.ch, Jani Nikula Cc: intel-gfx@lists.freedesktop.org, david.j.cowperthwaite@intel.com, igvt-g@lists.01.org List-Id: intel-gfx@lists.freedesktop.org SGksCgpPbiB0aSwgMjAxNi0wMi0xNiBhdCAxNzo1NCArMDgwMCwgWmhpIFdhbmcgd3JvdGU6Cj4g SGkgSm9vbmFzOgo+IMKgwqDCoMKgwqBGb3IgdGhlIGRlYnVnIGZ1bmN0aW9uL21hY3JvcywgY291 bGQgd2UgdXNlIERSTV9ERUJVR19EUklWRVIgYXPCoAo+IG91dHB1dCwgYnV0IGtlZXAgb3VyIGlu dGVybmFsIGRlYnVnIHN3aXRjaCAmIG1hcmNvcywgbGlrZToKPiAKPiAjZGVmaW5lIGd2dF9kYmdf eHh4KHh4eCwgeHh4KSBcCj4gCWlmIChndnRfZGVidWcgJiB4eHgpIFwKPiAJCURSTV9ERUJVR19E UklWRVIoeHh4eHh4KQo+IAo+IElzIGl0IE9LIGZvciB0aGUgbWFpbnRhaW5lcnM/IE9yIHdlIGhh dmUgdG8gdXNlIERSTV9ERUJVR19EUklWRVLCoAo+IGRpcmVjdGx5IDooLgo+IAoKSSB0aGluayBm cm9tIHVwc3RyZWFtIGtlcm5lbCBwZXJzcGVjdGl2ZSB0aGUgcmlnaHQgYW5zd2VyIGlzIHRoYXQg Y29kZQpsaWtlIGFib3ZlIHJlYWxseSBuZWVkcyB0byB1c2UgZHluYW1pYyBkZWJ1Z2dpbmcgaW5z dGVhZCBvZiBzZWxmLWJha2VkCnN5c3RlbS4gV2hlbiB1c2luZyBkeW5hbWljIGRlYnVnZ2luZyBm cmFtZXdvcmssIGRlYnVnZ2luZyBjb3VsZCBiZQplbmFibGVkIGluIGRpZmZlcmVudCBncmFudWxh cml0eSBsZXZlbHMgKG1vZHVsZSwgZmlsZSwgZnVuY3Rpb24sIGxpbmUsCm9yIGZvcm1hdCkuIE1v cmUgYXQ6wqBodHRwczovL2x3bi5uZXQvQXJ0aWNsZXMvNDM0ODMzLwoKUGFzc2luZyBkeW5hbWlj IGRlYnVnIGZpbHRlciAnZm9ybWF0ICJpOTE1OiBndnQ6IGNvcmU6ICIgK3AnIHdvdWxkIHRoZW4K ZW5hYmxlIEdWVCBjb3JlIGRlYnVnZ2luZy4KCk9uIHRoZSBvdGhlciBoYW5kLCBEYW5pZWwgZG9l cyBub3Qgd2FudCB1cyB0byBicmVhayBkcm0uZGVidWcgb3IgYWRkCmk5MTUuZGVidWcgKHNvIEkg Z3Vlc3MgaTkxNS5ndnRfZGVidWcgaXMgbm90IGZpbmUgZWl0aGVyKS4gRGlzY3Vzc2lvbgpvY2N1 cnJlZCBpbiB0aGlzIHBhdGNoOgoKaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3JnL3Bh dGNoLzcxNDEyLwoKU28gSSB0aGluayBiZXN0IHlvdSBjYW4gY3VycmVudGx5IGRvIGlzOgoKI2Rl ZmluZSBndnRfZGJnX3h4eChmbXQsIHh4eCkgXAoJRFJNX0RFQlVHX0RSSVZFUigiZ3Z0OiB4eHg6 ICIgZm10LCAuLi4pPgoKQW5kIHRoZW4gd2Ugd2FpdCBmb3IgRFJNIHRvIGdldCBjb252ZXJ0ZWQg dG8gZHluYW1pYyBkZWJ1Zy4KCkkgZGlzY3Vzc2VkIHRoaXMgd2l0aCBEYW5pZWwsIGFuZCBpdCBz aG91bGQgYmUgZG9hYmxlLiBPbmx5IGRvd24tZmFsbAppcyB0aGF0IGluIG9yZGVyIHRvIG1ha2Ug ZHJtLmRlYnVnPTB4MGUgc3ludGF4IHN0aWxsIHdvcmssIHdlIG5lZWQgdG8KbWFrZSBtYWtlIGRk ZWJ1Z19leGVjX3F1ZXJpZXMgc3ltYm9sIGV4cG9ydGVkIGFuZCBhZGQgY29kZSBsaWtlIHRoaXMK Zm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5OwoKaWYgKGRybS5kZWJ1ZyAmIERSTV9VVF9DT1JF KQoJZGRlYnVnX2V4ZWNfcXVlcmllcygiZm9ybWF0IFwiZHJtOiBjb3JlOiBcIiArcCIsIC4uLik7 CmlmIChkcm0uZGVidWcgJiBEUk1fVVRfRFJJVkVSKQoJZGRlYnVnX2V4ZWNfcXVlcmllcygiZm9y bWF0IFwiZHJtOiBkcnY6IFwiICtwIiwgLi4uKTsKCldoYXQgZG8geW91IGd1eXMgdGhpbms/IE9u ZSBjb3VsZCBleHBvcnQgbW9yZSBzeW1ib2xzIGFuZCBhZGQgdGhlCmZpbHRlcnMgaW4gYSBtb3Jl IGRpcmVjdCBtYW5uZXIsIGJ1dCBJJ20gbm90IHN1cmUgaWYgaXQncyB3b3J0aCB0aGUKZWZmb3J0 LgoKUmVnYXJkcywgSm9vbmFzCgo+IFRoYW5rcywKPiBaaGkuCj4gCj4g5LqOIDAyLzAzLzE2IDE0 OjAxLCBaaGkgV2FuZyB3cm90ZToKPiA+IEhpIEpvb25hczoKPiA+IMKgwqDCoMKgwqBUaGFua3Mg eW91IHZlcnkgbXVjaCEgV2UncmUgdmVyeSBleGNpdGVkIGZvciByZWNlaXZpbmcgeW91cgo+ID4g YWR2aWNlCj4gPiBhbmQgY29udGludWUgdG8gYmUgb3BlbiB0byBhbnkgY29tbWVudHMuIDopCj4g PiAKPiA+IEknbSBzdXBwb3NlZCB0aGF0IHdlIHNob3VsZCBtYWtlIHRoZSBhZ3JlZW1lbnRzIG9u IGk5MTUgaG9zdCBjaGFuZ2UKPiA+IGF0Cj4gPiB0aGUgdmVyeSBiZWdpbm5pbmcsIGFzIEknbSBj b25jZXJuZWQgZHVyaW5nIHRoZSBkaXNjdXNzaW9uIG9mIGk5MTUKPiA+IGhvc3QKPiA+IGNoYW5n ZSwgeW91IGtub3csIG1heWJlIHNvbWUgY29kZSBvZiBHVlQtZyBuZWVkcyB0byBiZSByZWZpbmVk IG9yCj4gPiByZS1kZXNpZ25lZC4gU28gd2UgcHV0IHRoZSBpOTE1IGhvc3QgY2hhbmdlcyB0byB0 aGUgYmVnaW5uaW5nIG9mCj4gPiB0aGUKPiA+IHBhdGNoIHNldCBmb3IgdGhlIGNvbnZlbmllbmNl IG9mIGRpc2N1c3Npb24uCj4gPiAKPiA+IEkgc3VtbWFyaXplIHlvdXIgY29tbWVudHMgYXMgYmVs b3csIHZlcnkgYXBwbGljYXRlLiA6KQo+ID4gCj4gPiAtIFJlcGxhY2UgYm9vbGVhbiByZXR1cm4g dmFsdWUgd2l0aCBpbnQgYXMgbXVjaCBhcyBwb3NzaWJsZS4KPiA+IC0gUmVwbGFjZSBjdXN0b21p emVkIGRlYnVnIEFTU0VSVCgpIGZ1bmN0aW9uICYgbWFjcm9zIHdpdGgKPiA+IERSTV9ERUJVR18q Cj4gPiAtIERvY3VtZW50IGFsbCBub24tc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGk5MTUKPiA+IC0g Rml4IGFsbCB3aGl0ZXNwYWNlIHZpYSBzY3JpcHRzL2NsZWFucGF0Y2gucGwKPiA+IC0gQ29tbWl0 IGZ1bmN0aW9uIHN0cnVjdHVyZSByZWZpbmVtZW50Lgo+ID4gLSBDaGFuZ2UgdGhlIHJlZ2lzdGVy IGFjY2VzcyBiZWhhdmlvciBqdXN0IGxpa2Ugd2hhdCBpOTE1IGRvZXMuCj4gPiAKPiA+IEZvciBv dGhlciBjb21tZW50cywgc2VlIG15IGNvbW1lbnRzIGJlbG93LiA6KQo+ID4gCj4gPiBPbiAwMS8y OS8xNiAyMTo1NywgSm9vbmFzIExhaHRpbmVuIHdyb3RlOgo+ID4gPiBIaSwKPiA+ID4gCj4gPiA+ IFRMO0RSIE92ZXJhbGwsIHdlIGhhdmUgc2FtZSBwcm9ibGVtIGFzIHdpdGggdGhlIHNjaGVkdWxl ciBzZXJpZXMsCj4gPiA+IHRoZXJlCj4gPiA+IGlzIHRvbyBtdWNoIHBsYWNlaG9sZGVyIHN0dWZm IGZvciBlYXN5IHJldmlldy4gSnVzdCBzcXVhc2ggZW5vdWdoCj4gPiA+IGNvZGUKPiA+ID4gaW50 byBvbmUgY29tbWl0IHNvIGl0IGFjdHVhbGx5IGRvZXMgc29tZXRoaW5nIGxvZ2ljYWwgdGhhdCBj YW4gYmUKPiA+ID4gcmV2aWV3ZWQgYW5kIHRoZW4gZXh0ZW5kIGl0IGxhdGVyLiBUaGVuIGl0IGNh biBiZSByZXZpZXdlZCBhbmQKPiA+ID4gcHVzaGVkLgo+ID4gPiBKdXN0IHNwbGl0dGluZyB0aGUg Y29kZSBkb3duIHRvIGFjaGlldmUgc21hbGxlciBwYXRjaGVzIGlzIG5vdAo+ID4gPiB0aGUKPiA+ ID4gcmlnaHQgdGhpbmcgdG8gZG8uCj4gPiA+IAo+ID4gPiBDb21tZW50cyBvbiB0aGUgb3ZlcmFs bCBjb2RlOiBZb3UgbmVlZCB0byBkb2N1bWVudCBhbGwgaGVhZGVyCj4gPiA+IGZpbGUKPiA+ID4g ZnVuY3Rpb25zIChpbiB0aGUgc291cmNlIGZpbGVzKSwgYW5kIGl0IGlzIGdvb2QgdG8gZG9jdW1l bnQgdGhlCj4gPiA+IHN0YXRpYwo+ID4gPiBmdW5jdGlvbnMgd2l0aGluIGEgZmlsZSB0b28sIHRv IG1ha2UgZnV0dXJlIG1haW50ZW5hbmNlIGVhc2llci4KPiA+ID4gCj4gPiA+IEl0IGlzIG5vdCBh Ym91dCBzcGxpdHRpbmcgdGhlIGNvZGUgZG93biB0byBzbWFsbCBjaHVua3MsIGJ1dAo+ID4gPiBz cGxpdHRpbmcKPiA+ID4gaXQgZG93biB0byBzbWFsbCAqbG9naWNhbCogY2h1bmtzLiBJdCBkb2Vz bid0IG1ha2Ugc2Vuc2UgdG8KPiA+ID4gY29tbWl0Cj4gPiA+IGRvemVucyBvZiBlbXB0eSBib2Rp ZWQgZnVuY3Rpb25zIGZvciByZXZpZXcsIGFuZCB0aGVuIGxhdGVyIGFkZAo+ID4gPiB0aGVpcgo+ ID4gPiBjb2RlLgo+ID4gPiAKPiA+ID4gSWYgeW91IGFkZCBmdW5jdGlvbnMsIG9ubHkgYWRkIHRo ZW0gYXQgYSBwYXRjaCB0aGF0IHRha2VzIHRoZW0KPiA+ID4gaW50byB1c2UKPiA+ID4gdG9vLCB1 bmxlc3Mgd2UncmUgdGFsa2luZyBhYm91dCBnZW5lcmFsIHB1cnBvc2Ugc2hhcmVkIGNvZGUuIEFu ZAo+ID4gPiBhbHNvCj4gPiA+IHJlbWVtYmVyIHRvIGFkZCB0aGUgZnVuY3Rpb24gYm9keSBhbmQg ZG9jdW1lbnRhdGlvbiBoZWFkZXIuIElmCj4gPiA+IHlvdQo+ID4gPiBzaW1wbHkgYWRkIGEgInJl dHVybiAwOyIgb3Igc2ltaWxhciBmdW5jdGlvbiBib2R5LCBkbyBhZGQgYQo+ID4gPiBjb21tZW50 IHRvCj4gPiA+IHdoeSB0aGUgZnVuY3Rpb24gZG9lcyBub3QgZXhpc3QgYW5kIHdoZW4gaXQgd2ls bC4KPiA+ID4gCj4gPiA+IFRoZW4sIHRoZXJlIGlzIGEgdHJlbmQgb2YgaGF2aW5nIGEgYm9vbGVh biByZXR1cm4gdmFsdWVzIGluIHRoZQo+ID4gPiBjb2RlLgo+ID4gPiBXaGVuIHBvc3NpYmxlLCBp dCBzaG91bGQgcmF0aGVyIGJlIGludCBhbmQgdGhlIGNhdXNlIGZvciBmYWlsdXJlCj4gPiA+IHNo b3VsZAo+ID4gPiBiZSBwcm9wYWdhdGVkIGZyb20gdGhlIGxhc3QgbGV2ZWwgYWxsIHRoZSB3YXkg dG8gdXAgKC1FTk9NRU4KPiA+ID4gZXRjLikuCj4gPiA+IFRoaXMgd2F5IGRlYnVnZ2luZyBiZWNv bWVzIGVhc2llciBhbmQgaWYgbmV3IGVycm9yIGNvbmRpdGlvbnMKPiA+ID4gYXBwZWFyLAo+ID4g PiB0aGVyZSBpcyBsZXNzIG9mIGEgbWFpbnRlbmFuY2UgYnVyZGVuIHRvIGFkZCB0aGUgcHJvcGFn YXRpb24KPiA+ID4gbGF0ZXIuCj4gPiA+IAo+ID4gPiBGaW5hbGx5LCBtYWtlIHN1cmUgdG8gbG9v ayBhdCB0aGUgZXhpc3RpbmcgZHJpdmVyIHBhcnRzIGFuZAo+ID4gPiDCoMKgwqDCoGh0dHBzOi8v d3d3Lmtlcm5lbC5vcmcvZG9jL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKPiA+ID4gZm9yIHBy b3BlciBjb2Rpbmcgc3R5bGUuIFRoZXJlIGFyZSBsb3RzIG9mIHdoaXRlc3BhY2UgZml4ZXMKPiA+ ID4gbmVlZGVkIGluCj4gPiA+IHRoaXMgc2VyaWVzLCBsaWtlIGFycmF5IGluaXRpYWxpemF0aW9u cy4KPiA+ID4gCj4gPiA+IEkgaG9wZSB0byBzZWUgdGhpcyBmaXJzdCBwYXRjaCByZXJvbGxlZCBz byB0aGF0IHlvdSBzcXVhc2ggc29tZQo+ID4gPiBvZiB0aGUKPiA+ID4gbGF0ZXIgY29tbWl0cyBp bnRvIGl0IHNvIHRoYXQgYWxsIGZ1bmN0aW9ucyBoYXZlIGEgYm9keSBhbmQgeW91Cj4gPiA+IGFk ZAo+ID4gPiBkb2N1bWVudGF0aW9uIGZvciB0aGUgZnVuY3Rpb25zIHNvIEkgY2FuIGJvdGggc2Vl IHdoYXQgaXQgc2hvdWxkCj4gPiA+IGRvIGFuZAo+ID4gPiB3aGF0IGl0IGFjdHVhbGx5IGRvZXMu IE9ubHkgcmVyb2xsIHRoZSBmaXJzdCBwYXRjaCwgdG8ga2VlcCB0aGUKPiA+ID4gaXRlcmF0aXZl IHN0ZXAgc21hbGxlci4gTGV0cyBvbmx5IHRoZW4gY29udGludWUgd2l0aCB0aGUgcmVzdCBvZgo+ ID4gPiB0aGUKPiA+ID4gc2VyaWVzIG9uY2Ugd2UndmUgcmVhY2hlZCBhIGNvbnNlbnN1cyBvbiB0 aGUgZm9ybWF0dGluZyBhbmQgc3R5bGUKPiA+ID4gYmFzaWNzLgo+ID4gPiAKPiA+ID4gU2VlIG1v cmUgY29tbWVudHMgYmVsb3cuCj4gPiA+IAo+ID4gPiBPbiB0bywgMjAxNi0wMS0yOCBhdCAxODoy MSArMDgwMCwgWmhpIFdhbmcgd3JvdGU6Cj4gPiA+ID4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRo ZSB2ZXJ5IGJhc2ljIGZyYW1ld29yayBvZiBHVlQtZyBkZXZpY2UKPiA+ID4gPiBtb2RlbCwKPiA+ ID4gPiBpbmNsdWRlcyBiYXNpYyBwcm90b3R5cGVzLCBkZWZpbml0aW9ucywgaW5pdGlhbGl6YXRp b24uCj4gPiA+ID4gLS0tCj4gPiA+ID4gwqAgYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2ludGVy ZmFjZS5owqDCoHzCoMKgwqAzICsKPiA+ID4gPiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29u ZmlnwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDE2ICsrCj4gPiA+ID4gwqAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgMiArCj4gPiA+ID4gwqAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlwqDCoMKgwqDCoHzCoMKgwqA1ICsKPiA+ ID4gPiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGVidWcuaMKgwqDCoMKgwqDCoHzCoMKg NzIgKysrKysrKwo+ID4gPiA+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9mYl9kZWNvZGVy LmMgfMKgwqAzNCArKysrCj4gPiA+ID4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ZiX2Rl Y29kZXIuaCB8IDExMCArKysrKysrKysrCj4gPiA+ID4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Z0L2d2dC5jwqDCoMKgwqDCoMKgwqDCoHwgMzY2Cj4gPiA+ID4gKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ID4gPiA+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQu aMKgwqDCoMKgwqDCoMKgwqB8IDEzMCArKysrKysrKysrKysKPiA+ID4gPiDCoCBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndnQvaHlwZXJjYWxsLmjCoMKgfMKgwqAzMCArKysKPiA+ID4gPiDCoCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvbXB0LmjCoMKgwqDCoMKgwqDCoMKgfMKgwqA5NyArKysrKysr KysKPiA+ID4gPiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmPCoMKgwqDCoMKg fMKgwqAyOSArKysKPiA+ID4gPiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmjC oMKgwqDCoMKgfMKgwqAzNCArKysrCj4gPiA+ID4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L3JlZy5owqDCoMKgwqDCoMKgwqDCoHzCoMKgMzQgKysrKwo+ID4gPiA+IMKgIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZG1hLmPCoMKgwqDCoMKgwqDCoHzCoMKgMTkgKysKPiA+ID4gPiDCoCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5owqDCoMKgwqDCoMKgwqB8wqDCoMKgNiArCj4g PiA+ID4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92Z3B1LmjCoMKgwqDCoMKgwqB8wqDC oMKgMyArCj4gPiA+ID4gwqAgaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5owqDCoMKgwqDCoMKg wqDCoMKgwqDCoHzCoMKgwqAxICsKPiA+ID4gPiDCoCAxOCBmaWxlcyBjaGFuZ2VkLCA5OTEgaW5z ZXJ0aW9ucygrKQo+ID4gPiA+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvTWFrZWZpbGUKPiA+ID4gPiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2RlYnVnLmgKPiA+ID4gPiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ZiX2RlY29kZXIuYwo+ID4gPiA+IMKgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZmJfZGVjb2Rlci5oCj4gPiA+ID4gwqAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYwo+ID4gPiA+ IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKPiA+ ID4gPiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2h5cGVy Y2FsbC5oCj4gPiA+ID4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9tcHQuaAo+ID4gPiA+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvcGFyYW1zLmMKPiA+ID4gPiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L3BhcmFtcy5oCj4gPiA+ID4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9yZWcuaAo+ID4gPiA+IAo+ID4gPiA+IGRpZmYgLS1naXQg YS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmgKPiA+ID4gPiBiL2FyY2gveDg2 L2luY2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaAo+ID4gPiA+IGluZGV4IDYyY2EwM2UuLjZmZjQ5 ODYgMTAwNjQ0Cj4gPiA+ID4gLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFj ZS5oCj4gPiA+ID4gKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5oCj4g PiA+ID4gQEAgLTczLDYgKzczLDkgQEAKPiA+ID4gPiDCoCAjZW5kaWYKPiA+ID4gPiAKPiA+ID4g PiDCoCAjaWZuZGVmIF9fQVNTRU1CTFlfXwo+ID4gPiA+ICsKPiA+ID4gPiArI2luY2x1ZGUKPiA+ ID4gPiArCj4gPiA+IAo+ID4gPiBJIGRvbid0IGZvbGxvdyB3aHkgdGhpcyB3b3VsZCBuZWVkIHRv IGJlIGFkZGVkIGlmIHRoZSBmaWxlIGlzIG5vdAo+ID4gPiBtb2RpZmllZCBvdGhlcndpc2UuIEVh Y2ggaGVhZGVyIHNob3VsZCBvbmx5IGluY2x1ZGUgd2hhdCB0aGV5Cj4gPiA+IHVzZS4KPiA+ID4g Cj4gPiA+IElmIHRoaXMgaXMgYW4gZXhpc3RpbmcgYnVnICh0aGF0IHhlbi9pbnRlcmZhY2UuaCBj YW4gbm90IGJlCj4gPiA+IGluY2x1ZGVkCj4gPiA+IHdpdGhvdXQgaW5jbHVkaW5nIGxpbnV4L3R5 cGVzLmgpLCBpdCBzaG91bGQgYmUgc3BsaXQgdG8gYQo+ID4gPiBzZXBhcmF0ZQo+ID4gPiBwYXRj aCBhbmQgc2VudCB0byBYZW4gdGVhbS4gU2FtZSBmb3IgaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hl bi5oLgo+ID4gPiAKPiA+ID4gPiDCoCAvKiBFeHBsaWNpdGx5IHNpemUgaW50ZWdlcnMgdGhhdCBy ZXByZXNlbnQgcGZucyBpbiB0aGUgcHVibGljCj4gPiA+ID4gaW50ZXJmYWNlCj4gPiA+ID4gwqDC oMKgKiB3aXRoIFhlbiBzbyB0aGF0IG9uIEFSTSB3ZSBjYW4gaGF2ZSBvbmUgQUJJIHRoYXQgd29y a3MgZm9yCj4gPiA+ID4gMzIKPiA+ID4gPiBhbmQgNjQKPiA+ID4gPiDCoMKgwqAqIGJpdCBndWVz dHMuICovCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcK PiA+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcKPiA+ID4gPiBpbmRleCAwNTFl YWIzLi44OWZmNzIzIDEwMDY0NAo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tj b25maWcKPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnCj4gPiA+ID4g QEAgLTQ3LDMgKzQ3LDE5IEBAIGNvbmZpZyBEUk1fSTkxNV9QUkVMSU1JTkFSWV9IV19TVVBQT1JU Cj4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoG9wdGlvbiBjaGFuZ2VzIHRoZSBkZWZhdWx0IGZvciB0 aGF0IG1vZHVsZSBvcHRpb24uCj4gPiA+ID4gCj4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoElmIGlu IGRvdWJ0LCBzYXkgIk4iLgo+ID4gPiA+ICsKPiA+ID4gPiArY29uZmlnIEk5MTVfR1ZUCj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqB0cmlzdGF0ZSAiR1ZULWcgaG9zdCBkcml2ZXIiCj4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqBkZXBlbmRzIG9uIERSTV9JOTE1Cj4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqBzZWxlY3QgSVJRX1dPUksKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGRlZmF1bHQgeQo+ ID4gPiAKPiA+ID4gRGVmYXVsdGluZyB0byAibiIgd291bGQgbWFrZSBzZW5zZSBpbml0aWFsbHku Cj4gPiA+IAo+ID4gW1poaV0gU3VyZSwgd2lsbCBkby4KPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oGhlbHAKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqBFbmFibGluZyBHVlQtZyBtZWRpYXRl ZCBncmFwaGljcyBwYXNzdGhyb3VnaAo+ID4gPiA+IHRlY2huaXF1ZSBmb3IKPiA+ID4gPiBJbnRl bCBpOTE1Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgYmFzZWQgaW50ZWdyYXRlZCBncmFw aGljcyBjYXJkLiBXaXRoIEdWVC1nLCBpdCdzCj4gPiA+ID4gcG9zc2libGUKPiA+ID4gPiB0byBo YXZlIG9uZQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVncmF0ZWQgaTkxNSBkZXZp Y2Ugc2hhcmVkIGJ5IG11bHRpcGxlIFZNcy4KPiA+ID4gPiBQZXJmb3JtYW5jZQo+ID4gPiA+IGNy aXRpY2FsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgb3B0ZXJhdGlvbnMgc3VjaCBhcyBh cHBlcnR1cmUgYWNjZXNzZXMgYW5kIHJpbmcKPiA+ID4gPiBidWZmZXIKPiA+ID4gPiBvcGVyYXRp b25zCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgYXJlIHBhc3MtdGhyb3VnaGVkIHRvIFZN LCB3aXRoIGEgbWluaW1hbCBzZXQgb2YKPiA+ID4gPiBjb25mbGljdGluZyByZXNvdXJjZXMKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAoZS5nLiBkaXNwbGF5IHNldHRpbmdzKSBtZWRpYXRl ZCBieSB2R1QgZHJpdmVyLiBUaGUKPiA+ID4gPiBiZW5lZml0IG9mIHZHVAo+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoGlzIG9uIGJvdGggdGhlIHBlcmZvcm1hbmNlLCBnaXZlbiB0aGF0IGVh Y2ggVk0gY291bGQKPiA+ID4gPiBkaXJlY3RseSBvcGVyYXRlCj4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgaXRzIGFwZXJ0dXJlIHNwYWNlIGFuZCBzdWJtaXQgY29tbWFuZHMgbGlrZSBydW5u aW5nCj4gPiA+ID4gb24KPiA+ID4gPiBuYXRpdmUsIGFuZAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoHRoZSBmZWF0dXJlIGNvbXBsZXRlbmVzcywgZ2l2ZW4gdGhhdCBhIHRydWUgR0VOCj4g PiA+ID4gaGFyZHdhcmUKPiA+ID4gPiBpcyBleHBvc2VkLgo+ID4gPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKPiA+ID4gPiBpbmRleCAwODUxZGUwNy4uZDRkZjQxMCAxMDA2NDQKPiA+ID4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ID4gPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gPiA+ID4gQEAgLTkxLDYgKzkxLDggQEAgaTkxNS15 ICs9IGR2b19jaDcwMTcubyBcCj4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoGludGVsX3Nkdm8ubyBc Cj4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoGludGVsX3R2Lm8KPiA+ID4gPiAKPiA+ID4gPiArb2Jq LSQoQ09ORklHX0k5MTVfR1ZUKcKgwqArPSBndnQvCj4gPiA+ID4gKwo+ID4gPiA+IMKgICMgdmly dHVhbCBncHUgY29kZQo+ID4gPiA+IMKgIGk5MTUteSArPSBpOTE1X3ZncHUubwo+ID4gPiA+IAo+ ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUKPiA+ ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtlZmlsZQo+ID4gPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gPiA+ID4gaW5kZXggMDAwMDAwMC4uNjkzNWI3OAo+ID4gPiA+IC0tLSAv ZGV2L251bGwKPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUK PiA+ID4gPiBAQCAtMCwwICsxLDUgQEAKPiA+ID4gPiArR1ZUX1NPVVJDRSA6PSBndnQubyBwYXJh bXMubyBmYl9kZWNvZGVyLm8KPiA+ID4gPiArCj4gPiA+ID4gK2NjZmxhZ3MtecKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCs9IC1JJChzcmMpIC1JJChzcmMpLy4uIC1XYWxsIC1XZXJyb3IKPiA+ID4g PiAtV25vLXVudXNlZC1mdW5jdGlvbgo+ID4gPiA+ICtpOTE1X2d2dC15wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgOj0gJChHVlRfU09VUkNFKQo+ID4gPiA+ICtvYmotJChDT05GSUdfSTkxNV9HVlQp wqDCoMKgwqDCoMKgwqDCoCs9IGk5MTVfZ3Z0Lm8KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Z0L2RlYnVnLmgKPiA+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9kZWJ1Zy5oCj4gPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gPiBpbmRleCAw MDAwMDAwLi4xOGUxNDY3Cj4gPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d2dC9kZWJ1Zy5oCj4gPiA+ID4gQEAgLTAsMCArMSw3MiBAQAo+ID4g PiA+ICsvKgo+ID4gPiA+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzCj4gPiA+ID4gcmVzZXJ2ZWQuCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAq IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uCj4gPiA+ID4gb2J0YWluaW5nIGEKPiA+ID4gPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKPiA+ID4gPiAodGhlCj4gPiA+ID4g IlNvZnR3YXJlIiksCj4gPiA+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZwo+ID4gPiA+IHdpdGhvdXQKPiA+ID4gPiBsaW1pdGF0aW9u Cj4gPiA+ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLAo+ID4gPiA+IGRpc3RyaWJ1dGUsCj4gPiA+ID4gc3VibGljZW5zZSwKPiA+ID4gPiArICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z Cj4gPiA+ID4gdG8gd2hvbQo+ID4gPiA+IHRoZQo+ID4gPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+ID4gPiA+IGNvbmRpdGlv bnM6Cj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCj4gPiA+ID4gKGluY2x1ZGluZwo+ID4gPiA+IHRoZSBu ZXh0Cj4gPiA+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbAo+ID4gPiA+IHBvcnRpb25zIG9mIHRoZQo+ID4gPiA+ICsgKiBTb2Z0 d2FyZS4KPiA+ID4gPiArICoKPiA+ID4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCj4gPiA+ID4gS0lORCwKPiA+ID4gPiBFWFBS RVNTIE9SCj4gPiA+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YKPiA+ID4gPiBNRVJDSEFOVEFCSUxJVFksCj4gPiA+ID4gKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuwqDCoElO Cj4gPiA+ID4gTk8KPiA+ID4gPiBFVkVOVCBTSEFMTAo+ID4gPiA+ICsgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKPiA+ID4gPiBEQU1B R0VTCj4gPiA+ID4gT1IgT1RIRVIKPiA+ID4gPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgo+ID4gPiA+IE9USEVSV0lTRSwKPiA+ID4gPiBB UklTSU5HIEZST00sCj4gPiA+ID4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiA+ID4gPiBPVEhFUgo+ID4gPiA+IERFQUxJTkdTIElO IFRIRQo+ID4gPiA+ICsgKiBTT0ZUV0FSRS4KPiA+ID4gPiArICovCj4gPiA+ID4gKwo+ID4gPiA+ ICsjaWZuZGVmIF9fR1ZUX0RFQlVHX0hfXwo+ID4gPiA+ICsjZGVmaW5lIF9fR1ZUX0RFQlVHX0hf Xwo+ID4gPiA+ICsKPiA+ID4gPiArI2RlZmluZQo+ID4gPiA+IEFTU0VSVCh4KcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gPiA+IMKgXAo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgZG8KPiA+ID4gPiB7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghKHgpKQo+ID4gPiA+IHvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByaW50aygiQXNzZXJ0IGF0ICVzIGxpbmUKPiA+ID4gPiAl ZFxuIizCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9f RklMRV9fLAo+ID4gPiA+IF9fTElORV9fKTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgXAo+ID4gPiA+ICsKPiA+ID4gPiB9wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqB9IHdo aWxlICgwKTsKPiA+ID4gPiArCj4gPiA+ID4gKyNkZWZpbmUgQVNTRVJUX05VTSh4LAo+ID4gPiA+ IHkpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgZG8KPiA+ID4gPiB7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmICghKHgpKQo+ID4gPiA+IHvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBcCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHByaW50aygiQXNzZXJ0IGF0ICVzIGxpbmUgJWQgcGFyYQo+ID4gPiA+IDB4 JWxseFxuIizCoMKgwqDCoFwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9fRklMRV9fLCBfX0xJTkVfXywKPiA+ ID4gPiAodTY0KXkpO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gPiArCj4gPiA+ID4g fcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgfSB3aGlsZSAoMCk7Cj4gPiA+ID4gKwo+ID4gPiAKPiA+ ID4gVGhlcmUgYWxyZWFkeSBpcyBXQVJOX09OIChhbmQgaTkxNV9kcnYuaCBtb2RpZmllcyBpdCBh IGxpdHRsZSkuCj4gPiA+IERvIG5vdAo+ID4gPiBpbnRyb2R1Y2UgY3VzdG9tIGZ1bmN0aW9ucyBs aWtlIHRoaXMsIGlmIHRoZSBleGlzdGluZyBvbmVzIG5lZWQKPiA+ID4gaW1wcm92ZW1lbnQsIGlt cHJvdmUgdGhlbS4KPiA+ID4gCj4gPiBbWmhpXSBPSy4gV2lsbCBkbyBhcyB3aGF0IGk5MTUgZG9l cwo+ID4gPiA+ICsjZGVmaW5lIGd2dF9pbmZvKGZtdCwgYXJncy4uLikgXAo+ID4gPiA+ICvCoMKg wqDCoHByaW50ayhLRVJOX0lORk8iW0dWVC1nXSAiZm10IlxuIiwgIyNhcmdzKQo+ID4gPiA+ICsK PiA+ID4gPiArI2RlZmluZSBndnRfZXJyKGZtdCwgYXJncy4uLikgXAo+ID4gPiA+ICvCoMKgwqDC oHByaW50ayhLRVJOX0VSUiIlcygpIC0gJWQ6ICJmbXQiXG4iLCBfX2Z1bmNfXywgX19MSU5FX18s Cj4gPiA+ID4gIyNhcmdzKQo+ID4gPiA+ICsKPiA+ID4gPiArI2RlZmluZSBndnRfd2FybihmbXQs IGFyZ3MuLi4pIFwKPiA+ID4gPiArwqDCoMKgwqBwcmludGsoS0VSTl9XQVJOSU5HIiVzKCkgLSAl ZDogImZtdCJcbiIsIF9fZnVuY19fLAo+ID4gPiA+IF9fTElORV9fLAo+ID4gPiA+ICMjYXJncykK PiA+ID4gPiArCj4gPiA+ID4gKyNkZWZpbmUgZ3Z0X2RiZyhsZXZlbCwgZm10LCBhcmdzLi4uKSBk byB7IFwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGlmIChndnQuZGVidWcgJiBsZXZlbCkgXAo+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcmludGsoS0VSTl9ERUJVRyIlcygpIC0g JWQ6ICJmbXQiXG4iLCBfX2Z1bmNfXywKPiA+ID4gPiBfX0xJTkVfXywgIyNhcmdzKTsgXAo+ID4g PiA+ICvCoMKgwqDCoH13aGlsZSgwKQo+ID4gPiA+ICsKPiA+ID4gPiArZW51bSB7Cj4gPiA+ID4g K8KgwqDCoMKgR1ZUX0RCR19DT1JFID0gKDEgPDwgMCksCj4gPiA+ID4gK8KgwqDCoMKgR1ZUX0RC R19NTSA9ICgxIDw8IDEpLAo+ID4gPiA+ICvCoMKgwqDCoEdWVF9EQkdfSVJRID0gKDEgPDwgMiks Cj4gPiA+ID4gK307Cj4gPiA+ID4gKwo+ID4gPiA+ICsjZGVmaW5lIGd2dF9kYmdfY29yZShmbXQs IGFyZ3MuLi4pIFwKPiA+ID4gPiArwqDCoMKgwqBndnRfZGJnKEdWVF9EQkdfQ09SRSwgZm10LCAj I2FyZ3MpCj4gPiA+ID4gKwo+ID4gPiA+ICsjZGVmaW5lIGd2dF9kYmdfbW0oZm10LCBhcmdzLi4u KSBcCj4gPiA+ID4gK8KgwqDCoMKgZ3Z0X2RiZyhHVlRfREJHX01NLCBmbXQsICMjYXJncykKPiA+ ID4gPiArCj4gPiA+ID4gKyNkZWZpbmUgZ3Z0X2RiZ19pcnEoZm10LCBhcmdzLi4uKSBcCj4gPiA+ ID4gK8KgwqDCoMKgZ3Z0X2RiZyhHVlRfREJHX0lSUSwgZm10LCAjI2FyZ3MpCj4gPiA+ID4gKwo+ ID4gPiA+ICsjZW5kaWYKPiA+ID4gCj4gPiA+IFRoaXMgc2hvdWxkIGJlIGludGVncmF0ZWQgYmV0 dGVyIHRvIERSTSBkZWJ1Z2dpbmcgb3B0aW9ucywgY3VzdG9tCj4gPiA+IGRlYnVnZ2luZyBjb2Rl IG9ubHkgZm9yIGk5MTUgd2FzIHJlamVjdGVkIGEgd2hpbGUgYWdvLgo+ID4gPiAKPiA+IFtaSEld IFRoYW5rcyBmb3Igc2hhcmluZyB0aGUgaGlzdG9yeS4gOikgV2lsbCBjaGFuZ2UgdGhhdC4KPiA+ ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ZiX2RlY29kZXIuYwo+ ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ZiX2RlY29kZXIuYwo+ID4gPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+ID4gaW5kZXggMDAwMDAwMC4uYTIxOTgxOQo+ID4gPiA+ IC0tLSAvZGV2L251bGwKPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZmJf ZGVjb2Rlci5jCj4gPiA+ID4gQEAgLTAsMCArMSwzNCBAQAo+ID4gPiA+ICsvKgo+ID4gPiA+ICsg KiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzCj4g PiA+ID4gcmVzZXJ2ZWQuCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCj4gPiA+ID4gb2J0YWlu aW5nIGEKPiA+ID4gPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMKPiA+ID4gPiAodGhlCj4gPiA+ID4gIlNvZnR3YXJlIiksCj4gPiA+ ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZwo+ID4gPiA+IHdpdGhvdXQKPiA+ID4gPiBsaW1pdGF0aW9uCj4gPiA+ID4gKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAo+ID4gPiA+IGRpc3Ry aWJ1dGUsCj4gPiA+ID4gc3VibGljZW5zZSwKPiA+ID4gPiArICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zCj4gPiA+ID4gdG8gd2hvbQo+ ID4gPiA+IHRoZQo+ID4gPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+ID4gPiA+IGNvbmRpdGlvbnM6Cj4gPiA+ID4gKyAqCj4g PiA+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlCj4gPiA+ID4gKGluY2x1ZGluZwo+ID4gPiA+IHRoZSBuZXh0Cj4gPiA+ID4gKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAo+ ID4gPiA+IHBvcnRpb25zIG9mIHRoZQo+ID4gPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ID4gPiArICoK PiA+ID4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZCj4gPiA+ID4gS0lORCwKPiA+ID4gPiBFWFBSRVNTIE9SCj4gPiA+ID4gKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YK PiA+ID4gPiBNRVJDSEFOVEFCSUxJVFksCj4gPiA+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuwqDCoElOCj4gPiA+ID4gTk8KPiA+ID4g PiBFVkVOVCBTSEFMTAo+ID4gPiA+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKPiA+ID4gPiBEQU1BR0VTCj4gPiA+ID4gT1IgT1RI RVIKPiA+ID4gPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUgo+ID4gPiA+IE9USEVSV0lTRSwKPiA+ID4gPiBBUklTSU5HIEZST00sCj4gPiA+ ID4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IKPiA+ID4gPiBPVEhFUgo+ID4gPiA+IERFQUxJTkdTIElOIFRIRQo+ID4gPiA+ICsgKiBT T0ZUV0FSRS4KPiA+ID4gPiArICovCj4gPiA+ID4gKwo+ID4gPiA+ICsjaW5jbHVkZSAiZ3Z0Lmgi Cj4gPiA+ID4gKwo+ID4gPiA+ICtpbnQgZ3Z0X2RlY29kZV9mYl9mb3JtYXQoc3RydWN0IHBndF9k ZXZpY2UgKnBkZXYsIGludCB2bWlkLAo+ID4gPiA+IHN0cnVjdAo+ID4gPiA+IGd2dF9mYl9mb3Jt YXQgKmZiKQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDCoMKgcmV0dXJuIDA7Cj4gPiA+ID4gK30K PiA+ID4gPiArCj4gPiA+ID4gK2ludCBndnRfZmJfbm90aWZpZXJfY2FsbF9jaGFpbih1bnNpZ25l ZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKPiA+ID4gPiArewo+ID4gPiA+ICvCoMKgwqDCoHJldHVy biAwOwo+ID4gPiA+ICt9Cj4gPiA+IAo+ID4gPiBLZXJuZWxkb2MgbWlzc2luZyBmb3IgdGhlc2Ug ZnVuY3Rpb25zLiBJdCBpcyBhbGwgdGhlIHNhbWUgdG8KPiA+ID4gc3F1YXNoCj4gPiA+IGxhdGVy IHBhdGNoZXMgdG8gaW50cm9kdWNlIHRoZSBjb2RlIHRvIHRoZXNlIGZ1bmN0aW9ucyBhbHJlYWR5 LAo+ID4gPiByZXZpZXdpbmcgdXRpbGl0eSBmdW5jdGlvbnMgd2l0aCBubyBrZXJuZWxkb2MgYW5k IG5vIGJvZHkgbWFrZXMKPiA+ID4gaXQKPiA+ID4gc29tZXdoYXQgZGlmZmljdWx0IHRvIHNlZSB0 aGUgYmlnIHBpY3R1cmUuCj4gPiA+IAo+ID4gCj4gPiBbWmhpXSBPbmUgcXVlc3Rpb24uIEkgc2F3 IGk5MTUgcHV0IHNvbWUgZnVuY3Rpb24gaW5zdHJ1Y3Rpb24gaW4KPiA+ICouYy4gSXMKPiA+IGl0 IGFsc28gT0sgZm9yIGtlcm5lbCBkb2MgZ2VuZXJhdGluZyB0aGUgcHJvcGVyIGRvYyBmaWxlcz8K PiA+IAo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZmJfZGVj b2Rlci5oCj4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZmJfZGVjb2Rlci5oCj4g PiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gPiBpbmRleCAwMDAwMDAwLi4yYzI5ZWQ0 Cj4gPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9mYl9kZWNvZGVyLmgKPiA+ID4gPiBAQCAtMCwwICsxLDExMCBAQAo+ID4gPiA+ICsvKgo+ ID4gPiA+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzCj4gPiA+ID4gcmVzZXJ2ZWQuCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCj4gPiA+ ID4gb2J0YWluaW5nIGEKPiA+ID4gPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKPiA+ID4gPiAodGhlCj4gPiA+ID4gIlNvZnR3YXJl IiksCj4gPiA+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZwo+ID4gPiA+IHdpdGhvdXQKPiA+ID4gPiBsaW1pdGF0aW9uCj4gPiA+ID4g KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAo+ID4g PiA+IGRpc3RyaWJ1dGUsCj4gPiA+ID4gc3VibGljZW5zZSwKPiA+ID4gPiArICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zCj4gPiA+ID4g dG8gd2hvbQo+ID4gPiA+IHRoZQo+ID4gPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+ID4gPiA+IGNvbmRpdGlvbnM6Cj4gPiA+ ID4gKyAqCj4gPiA+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlCj4gPiA+ID4gKGluY2x1ZGluZwo+ID4gPiA+IHRoZSBuZXh0Cj4gPiA+ ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbAo+ID4gPiA+IHBvcnRpb25zIG9mIHRoZQo+ID4gPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ ID4gPiArICoKPiA+ID4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZCj4gPiA+ID4gS0lORCwKPiA+ID4gPiBFWFBSRVNTIE9SCj4g PiA+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YKPiA+ID4gPiBNRVJDSEFOVEFCSUxJVFksCj4gPiA+ID4gKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuwqDCoElOCj4gPiA+ID4g Tk8KPiA+ID4gPiBFVkVOVCBTSEFMTAo+ID4gPiA+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKPiA+ID4gPiBEQU1BR0VTCj4gPiA+ ID4gT1IgT1RIRVIKPiA+ID4gPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUgo+ID4gPiA+IE9USEVSV0lTRSwKPiA+ID4gPiBBUklTSU5HIEZS T00sCj4gPiA+ID4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IKPiA+ID4gPiBPVEhFUgo+ID4gPiA+IERFQUxJTkdTIElOIFRIRQo+ID4g PiA+ICsgKiBTT0ZUV0FSRS4KPiA+ID4gPiArICovCj4gPiA+ID4gKwo+ID4gPiA+ICsjaWZuZGVm IF9HVlRfRkJfREVDT0RFUl9IXwo+ID4gPiA+ICsjZGVmaW5lIF9HVlRfRkJfREVDT0RFUl9IXwo+ ID4gPiA+ICsKPiA+ID4gPiArdHlwZWRlZiBlbnVtIHsKPiA+ID4gPiArwqDCoMKgwqBGQl9NT0RF X1NFVF9TVEFSVCA9IDEsCj4gPiA+ID4gK8KgwqDCoMKgRkJfTU9ERV9TRVRfRU5ELAo+ID4gPiA+ ICvCoMKgwqDCoEZCX0RJU1BMQVlfRkxJUCwKPiA+ID4gPiArfWd2dF9mYl9ldmVudF90Owo+ID4g PiA+ICsKPiA+ID4gPiArdHlwZWRlZiBlbnVtIHsKPiA+ID4gPiArwqDCoMKgwqBERElfUE9SVF9O T05FwqDCoMKgwqA9IDAsCj4gPiA+ID4gK8KgwqDCoMKgRERJX1BPUlRfQsKgwqDCoMKgPSAxLAo+ ID4gPiA+ICvCoMKgwqDCoERESV9QT1JUX0PCoMKgwqDCoD0gMiwKPiA+ID4gPiArwqDCoMKgwqBE RElfUE9SVF9EwqDCoMKgwqA9IDMsCj4gPiA+ID4gK8KgwqDCoMKgRERJX1BPUlRfRcKgwqDCoMKg PSA0Cj4gPiA+ID4gK30gZGRpX3BvcnRfdDsKPiA+ID4gPiArCj4gPiA+ID4gK3N0cnVjdCBwZ3Rf ZGV2aWNlOwo+ID4gPiA+ICsKPiA+ID4gPiArc3RydWN0IGd2dF9mYl9ub3RpZnlfbXNnIHsKPiA+ ID4gPiArwqDCoMKgwqB1bnNpZ25lZCB2bV9pZDsKPiA+ID4gPiArwqDCoMKgwqB1bnNpZ25lZCBw aXBlX2lkOyAvKiBpZCBzdGFydGluZyBmcm9tIDAgKi8KPiA+ID4gPiArwqDCoMKgwqB1bnNpZ25l ZCBwbGFuZV9pZDsgLyogcHJpbWFyeSwgY3Vyc29yLCBvciBzcHJpdGUgKi8KPiA+ID4gPiArfTsK PiA+ID4gPiArCj4gPiA+ID4gKy8qIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gYW5kIGdhbW1hIGNv cnJlY3Rpb24gYXJlIG5vdAo+ID4gPiA+IGluY2x1ZGVkICovCj4gPiA+ID4gK3N0cnVjdCBndnRf cHJpbWFyeV9wbGFuZV9mb3JtYXQgewo+ID4gPiA+ICvCoMKgwqDCoHU4wqDCoMKgwqBlbmFibGVk O8KgwqDCoMKgLyogcGxhbmUgaXMgZW5hYmxlZCAqLwo+ID4gPiA+ICvCoMKgwqDCoHU4wqDCoMKg wqB0aWxlZDvCoMKgwqDCoMKgwqDCoMKgLyogWC10aWxlZCAqLwo+ID4gPiA+ICvCoMKgwqDCoHU4 wqDCoMKgwqBicHA7wqDCoMKgwqDCoMKgwqDCoC8qIGJpdHMgcGVyIHBpeGVsICovCj4gPiA+ID4g K8KgwqDCoMKgdTMywqDCoMKgwqBod19mb3JtYXQ7wqDCoMKgwqAvKiBmb3JtYXQgZmllbGQgaW4g dGhlIFBSSV9DVEwKPiA+ID4gPiByZWdpc3RlciAqLwo+ID4gPiA+ICvCoMKgwqDCoHUzMsKgwqDC oMKgZHJtX2Zvcm1hdDvCoMKgwqDCoC8qIGZvcm1hdCBpbiBEUk0gZGVmaW5pdGlvbiAqLwo+ID4g PiA+ICvCoMKgwqDCoHUzMsKgwqDCoMKgYmFzZTvCoMKgwqDCoMKgwqDCoMKgLyogZnJhbWVidWZm ZXIgYmFzZSBpbiBncmFwaGljcyBtZW1vcnkKPiA+ID4gPiAqLwo+ID4gPiA+ICvCoMKgwqDCoHUz MsKgwqDCoMKgeF9vZmZzZXQ7wqDCoMKgwqAvKiBpbiBwaXhlbHMgKi8KPiA+ID4gPiArwqDCoMKg wqB1MzLCoMKgwqDCoHlfb2Zmc2V0O8KgwqDCoMKgLyogaW4gbGluZXMgKi8KPiA+ID4gPiArwqDC oMKgwqB1MzLCoMKgwqDCoHdpZHRoO8KgwqDCoMKgwqDCoMKgwqAvKiBpbiBwaXhlbHMgKi8KPiA+ ID4gPiArwqDCoMKgwqB1MzLCoMKgwqDCoGhlaWdodDvCoMKgwqDCoMKgwqDCoMKgLyogaW4gbGlu ZXMgKi8KPiA+ID4gPiArwqDCoMKgwqB1MzLCoMKgwqDCoHN0cmlkZTvCoMKgwqDCoMKgwqDCoMKg LyogaW4gYnl0ZXMgKi8KPiA+ID4gPiArfTsKPiA+ID4gPiArCj4gPiA+ID4gK3N0cnVjdCBndnRf c3ByaXRlX3BsYW5lX2Zvcm1hdCB7Cj4gPiA+ID4gK8KgwqDCoMKgdTjCoMKgwqDCoGVuYWJsZWQ7 wqDCoMKgwqAvKiBwbGFuZSBpcyBlbmFibGVkICovCj4gPiA+ID4gK8KgwqDCoMKgdTjCoMKgwqDC oHRpbGVkO8KgwqDCoMKgwqDCoMKgwqAvKiBYLXRpbGVkICovCj4gPiA+ID4gK8KgwqDCoMKgdTjC oMKgwqDCoGJwcDvCoMKgwqDCoMKgwqDCoMKgLyogYml0cyBwZXIgcGl4ZWwgKi8KPiA+ID4gPiAr wqDCoMKgwqB1MzLCoMKgwqDCoGh3X2Zvcm1hdDvCoMKgwqDCoC8qIGZvcm1hdCBmaWVsZCBpbiB0 aGUgU1BSX0NUTAo+ID4gPiA+IHJlZ2lzdGVyICovCj4gPiA+ID4gK8KgwqDCoMKgdTMywqDCoMKg wqBkcm1fZm9ybWF0O8KgwqDCoMKgLyogZm9ybWF0IGluIERSTSBkZWZpbml0aW9uICovCj4gPiA+ ID4gK8KgwqDCoMKgdTMywqDCoMKgwqBiYXNlO8KgwqDCoMKgwqDCoMKgwqAvKiBzcHJpdGUgYmFz ZSBpbiBncmFwaGljcyBtZW1vcnkgKi8KPiA+ID4gPiArwqDCoMKgwqB1MzLCoMKgwqDCoHhfcG9z O8KgwqDCoMKgwqDCoMKgwqAvKiBpbiBwaXhlbHMgKi8KPiA+ID4gPiArwqDCoMKgwqB1MzLCoMKg wqDCoHlfcG9zO8KgwqDCoMKgwqDCoMKgwqAvKiBpbiBsaW5lcyAqLwo+ID4gPiA+ICvCoMKgwqDC oHUzMsKgwqDCoMKgeF9vZmZzZXQ7wqDCoMKgwqAvKiBpbiBwaXhlbHMgKi8KPiA+ID4gPiArwqDC oMKgwqB1MzLCoMKgwqDCoHlfb2Zmc2V0O8KgwqDCoMKgLyogaW4gbGluZXMgKi8KPiA+ID4gPiAr wqDCoMKgwqB1MzLCoMKgwqDCoHdpZHRoO8KgwqDCoMKgwqDCoMKgwqAvKiBpbiBwaXhlbHMgKi8K PiA+ID4gPiArwqDCoMKgwqB1MzLCoMKgwqDCoGhlaWdodDvCoMKgwqDCoMKgwqDCoMKgLyogaW4g bGluZXMgKi8KPiA+ID4gPiArfTsKPiA+ID4gPiArCj4gPiA+ID4gK3N0cnVjdCBndnRfY3Vyc29y X3BsYW5lX2Zvcm1hdCB7Cj4gPiA+ID4gK8KgwqDCoMKgdTjCoMKgwqDCoGVuYWJsZWQ7Cj4gPiA+ ID4gK8KgwqDCoMKgdTjCoMKgwqDCoG1vZGU7wqDCoMKgwqDCoMKgwqDCoC8qIGN1cnNvciBtb2Rl IHNlbGVjdCAqLwo+ID4gPiA+ICvCoMKgwqDCoHU4wqDCoMKgwqBicHA7wqDCoMKgwqDCoMKgwqDC oC8qIGJpdHMgcGVyIHBpeGVsICovCj4gPiA+ID4gK8KgwqDCoMKgdTMywqDCoMKgwqBkcm1fZm9y bWF0O8KgwqDCoMKgLyogZm9ybWF0IGluIERSTSBkZWZpbml0aW9uICovCj4gPiA+ID4gK8KgwqDC oMKgdTMywqDCoMKgwqBiYXNlO8KgwqDCoMKgwqDCoMKgwqAvKiBjdXJzb3IgYmFzZSBpbiBncmFw aGljcyBtZW1vcnkgKi8KPiA+ID4gPiArwqDCoMKgwqB1MzLCoMKgwqDCoHhfcG9zO8KgwqDCoMKg wqDCoMKgwqAvKiBpbiBwaXhlbHMgKi8KPiA+ID4gPiArwqDCoMKgwqB1MzLCoMKgwqDCoHlfcG9z O8KgwqDCoMKgwqDCoMKgwqAvKiBpbiBsaW5lcyAqLwo+ID4gPiA+ICvCoMKgwqDCoHU4wqDCoMKg wqB4X3NpZ247wqDCoMKgwqDCoMKgwqDCoC8qIFggUG9zaXRpb24gU2lnbiAqLwo+ID4gPiA+ICvC oMKgwqDCoHU4wqDCoMKgwqB5X3NpZ247wqDCoMKgwqDCoMKgwqDCoC8qIFkgUG9zaXRpb24gU2ln biAqLwo+ID4gPiA+ICvCoMKgwqDCoHUzMsKgwqDCoMKgd2lkdGg7wqDCoMKgwqDCoMKgwqDCoC8q IGluIHBpeGVscyAqLwo+ID4gPiA+ICvCoMKgwqDCoHUzMsKgwqDCoMKgaGVpZ2h0O8KgwqDCoMKg wqDCoMKgwqAvKiBpbiBsaW5lcyAqLwo+ID4gPiA+ICvCoMKgwqDCoHUzMsKgwqDCoMKgeF9ob3Q7 wqDCoMKgwqDCoMKgwqDCoC8qIGluIHBpeGVscyAqLwo+ID4gPiA+ICvCoMKgwqDCoHUzMsKgwqDC oMKgeV9ob3Q7wqDCoMKgwqDCoMKgwqDCoC8qIGluIHBpeGVscyAqLwo+ID4gPiA+ICt9Owo+ID4g PiA+ICsKPiA+ID4gCj4gPiA+IFRoZSBhYm92ZSBzdHJ1Y3RzIGhhdmUgYSBsb3QgaW4gY29tbW9u LCB3b3VsZCBpdCBtYWtlIHNlbnNlIHRvCj4gPiA+IGhhdmUgdGhlCj4gPiA+IGNvbW1vbiBtZW1i ZXJzICsgcGxhbmUgdHlwZSBhbmQgdGhlbiB1bmlvbiBmb3IgdGhlIHBsYW5lIHR5cGUKPiA+ID4g c3BlY2lmaWMKPiA+ID4gZGF0YS4gSSBzdXNwZWN0IGhhdmluZyBpdCBhbGwgc3BsaXQgdGhpcyB3 YXkgd2lsbCBsZWFkIHRvIG1vcmUKPiA+ID4gdXRpbGl0eQo+ID4gPiBmdW5jdGlvbnMgc29tZXdo ZXJlLgo+ID4gPiAKPiA+IFtaaGldIFRoYW5rcy4gV2lsbCBkbyB0aGF0Lgo+ID4gCj4gPiA+ID4g K3N0cnVjdCBndnRfcGlwZV9mb3JtYXQgewo+ID4gPiA+ICvCoMKgwqDCoHN0cnVjdCBndnRfcHJp bWFyeV9wbGFuZV9mb3JtYXTCoMKgwqDCoHByaW1hcnk7Cj4gPiA+ID4gK8KgwqDCoMKgc3RydWN0 IGd2dF9zcHJpdGVfcGxhbmVfZm9ybWF0wqDCoMKgwqBzcHJpdGU7Cj4gPiA+ID4gK8KgwqDCoMKg c3RydWN0IGd2dF9jdXJzb3JfcGxhbmVfZm9ybWF0wqDCoMKgwqBjdXJzb3I7Cj4gPiA+ID4gK8Kg wqDCoMKgZGRpX3BvcnRfdCBkZGlfcG9ydDvCoMKgLyogdGhlIERESSBwb3J0IHRoYXQgdGhlIHBp cGUgaXMKPiA+ID4gPiBjb25uZWN0ZWQKPiA+ID4gPiB0byAqLwo+ID4gPiA+ICt9Owo+ID4gPiA+ ICsKPiA+ID4gPiArc3RydWN0IGd2dF9mYl9mb3JtYXR7Cj4gPiA+ID4gK8KgwqDCoMKgc3RydWN0 IGd2dF9waXBlX2Zvcm1hdMKgwqDCoMKgcGlwZXNbSTkxNV9NQVhfUElQRVNdOwo+ID4gPiA+ICt9 Owo+ID4gPiA+ICsKPiA+ID4gPiArZXh0ZXJuIGludCBndnRfZmJfbm90aWZpZXJfY2FsbF9jaGFp bih1bnNpZ25lZCBsb25nIHZhbCwgdm9pZAo+ID4gPiA+ICpkYXRhKTsKPiA+ID4gPiArZXh0ZXJu IGludCBndnRfZGVjb2RlX2ZiX2Zvcm1hdChzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiwgaW50Cj4g PiA+ID4gdm1pZCwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgZ3Z0X2ZiX2Zvcm1hdCAqZmIpOwo+ID4gPiA+ICsKPiA+ID4gPiArI2VuZGlmCj4gPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYwo+ID4gPiA+IGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5jCj4gPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiA+ID4gPiBpbmRleCAwMDAwMDAwLi4wNDFkMTBmCj4gPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4g PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYwo+ID4gPiA+IEBAIC0wLDAg KzEsMzY2IEBACj4gPiA+ID4gKy8qCj4gPiA+ID4gKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYg SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMKPiA+ID4gPiByZXNlcnZlZC4KPiA+ID4gPiAr ICoKPiA+ID4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24KPiA+ID4gPiBvYnRhaW5pbmcgYQo+ID4gPiA+ICsgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcwo+ID4gPiA+ ICh0aGUKPiA+ID4gPiAiU29mdHdhcmUiKSwKPiA+ID4gPiArICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCj4gPiA+ID4gd2l0aG91dAo+ID4g PiA+IGxpbWl0YXRpb24KPiA+ID4gPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsCj4gPiA+ID4gZGlzdHJpYnV0ZSwKPiA+ID4gPiBzdWJsaWNlbnNl LAo+ID4gPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMKPiA+ID4gPiB0byB3aG9tCj4gPiA+ID4gdGhlCj4gPiA+ID4gKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCj4g PiA+ID4gY29uZGl0aW9uczoKPiA+ID4gPiArICoKPiA+ID4gPiArICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKPiA+ID4gPiAoaW5jbHVkaW5n Cj4gPiA+ID4gdGhlIG5leHQKPiA+ID4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCj4gPiA+ID4gcG9ydGlvbnMgb2YgdGhlCj4g PiA+ID4gKyAqIFNvZnR3YXJlLgo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKPiA+ID4gPiBLSU5E LAo+ID4gPiA+IEVYUFJFU1MgT1IKPiA+ID4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+ID4gPiA+IE1FUkNIQU5UQUJJTElUWSwK PiA+ID4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC7CoMKgSU4KPiA+ID4gPiBOTwo+ID4gPiA+IEVWRU5UIFNIQUxMCj4gPiA+ID4gKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LAo+ID4gPiA+IERBTUFHRVMKPiA+ID4gPiBPUiBPVEhFUgo+ID4gPiA+ICsgKiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCj4gPiA+ID4gT1RIRVJX SVNFLAo+ID4gPiA+IEFSSVNJTkcgRlJPTSwKPiA+ID4gPiArICogT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ID4gPiA+IE9USEVSCj4gPiA+ ID4gREVBTElOR1MgSU4gVEhFCj4gPiA+ID4gKyAqIFNPRlRXQVJFLgo+ID4gPiA+ICsgKi8KPiA+ ID4gPiArCj4gPiA+ID4gKyNpbmNsdWRlCj4gPiA+ID4gKyNpbmNsdWRlCj4gPiA+ID4gKwo+ID4g PiA+ICsjaW5jbHVkZSAiZ3Z0LmgiCj4gPiA+ID4gKwo+ID4gPiA+ICtzdHJ1Y3QgZ3Z0X2hvc3Qg Z3Z0X2hvc3Q7Cj4gPiA+ID4gKwo+ID4gPiA+ICtleHRlcm4gc3RydWN0IGd2dF9rZXJuZWxfZG0g eGVuZ3Rfa2RtOwo+ID4gPiA+ICtleHRlcm4gc3RydWN0IGd2dF9rZXJuZWxfZG0ga3ZtZ3Rfa2Rt Owo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGNvbnN0IGNoYXIgKnN1cHBvcnRlZF9oeXBlcnZp c29yc1tdID0gewo+ID4gPiAKPiA+ID4gc2hvdWxkIGJlICJzdGF0aWMgY29uc3QgY2hhciAqIGNv bnN0Ii4KPiA+ID4gCj4gPiA+ID4gK8KgwqDCoMKgW0dWVF9IWVBFUlZJU09SX1RZUEVfWEVOXSA9 ICJYZW4gSHlwZXJ2aXNvciIsCj4gPiA+ID4gK8KgwqDCoMKgW0dWVF9IWVBFUlZJU09SX1RZUEVf S1ZNXSA9ICJLVk0iLAo+ID4gPiA+ICt9Owo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGJvb2wg Z3Z0X2luaXRfaG9zdCh2b2lkKQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDCoMKgc3RydWN0IGd2 dF9ob3N0ICpob3N0ID0gJmd2dF9ob3N0Owo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqBpZiAo IWd2dC5lbmFibGUpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGd2dF9kYmdfY29yZSgiR1ZU LWcgaGFzIGJlZW4gZGlzYWJsZWQgYnkga2VybmVsCj4gPiA+ID4gcGFyYW1ldGVyIik7Cj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gPiA+ID4gK8KgwqDCoMKgfQo+ID4g PiA+ICsKPiA+ID4gPiArwqDCoMKgwqBpZiAoaG9zdC0+aW5pdGlhbGl6ZWQpIHsKPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoGd2dF9lcnIoIkdWVC1nIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6 ZWQhIik7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gPiA+ID4gK8Kg wqDCoMKgfQo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqBpZiAoeGVuX2luaXRpYWxfZG9tYWlu KCkpIHsKPiA+ID4gCj4gPiA+IFNob3VsZG4ndCBYZW4gY29kZSBiZSBDT05GSUdfWEVOX0RPTTAg YW5kIENPTkZJR19YRU4gI2lmZGVmCj4gPiA+IHByb3RlY3RlZD8KPiA+ID4gCj4gPiBbWmhpXSBU aGUgZm9sbG93aW5nIGNvZGUgcGllY2Ugc2hvd3MKPiA+IHhlbl9pbml0aWFsX2RvbWFpbigpL3hl bl9kb21haW4oKQo+ID4gY291bGQgYWxzbyBiZSB1c2VkIHdoZW4gQ09ORklHX1hFTl9ET00wIGlz IG5vdCBzZXQuCj4gPiAKPiA+ICNpZmRlZiBDT05GSUdfWEVOCj4gPiBleHRlcm4gZW51bSB4ZW5f ZG9tYWluX3R5cGUgeGVuX2RvbWFpbl90eXBlOwo+ID4gI2Vsc2UKPiA+ICNkZWZpbmUgeGVuX2Rv bWFpbl90eXBlwqDCoMKgwqDCoMKgwqDCoMKgWEVOX05BVElWRQo+ID4gI2VuZGlmCj4gPiAKPiA+ ICNkZWZpbmUgeGVuX2RvbWFpbigpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKHhlbl9kb21haW5f dHlwZSAhPSBYRU5fTkFUSVZFKQo+ID4gI2RlZmluZSB4ZW5fcHZfZG9tYWluKCnCoMKgwqDCoMKg wqDCoMKgwqAoeGVuX2RvbWFpbigpCj4gPiAmJsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVuX2RvbWFpbl90eXBlID09IFhF Tl9QVl9ET01BSU4pCj4gPiAjZGVmaW5lIHhlbl9odm1fZG9tYWluKCnCoMKgwqDCoMKgwqDCoMKg KHhlbl9kb21haW4oKQo+ID4gJibCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBcCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlbl9kb21haW5fdHlwZSA9PQo+ID4gWEVOX0hW TV9ET01BSU4pCj4gPiAKPiA+ICNpZmRlZiBDT05GSUdfWEVOX0RPTTAKPiA+ICNpbmNsdWRlIDx4 ZW4vaW50ZXJmYWNlL3hlbi5oPgo+ID4gI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgo+ ID4gCj4gPiAjZGVmaW5lIHhlbl9pbml0aWFsX2RvbWFpbigpwqDCoMKgwqAoeGVuX2RvbWFpbigp ICYmIFwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVuX3N0YXJ0X2luZm8gJiYKPiA+IHhlbl9zdGFydF9pbmZv LT5mbGFncyAmIFNJRl9JTklURE9NQUlOKQo+ID4gI2Vsc2XCoMKgLyogIUNPTkZJR19YRU5fRE9N MCAqLwo+ID4gI2RlZmluZSB4ZW5faW5pdGlhbF9kb21haW4oKcKgwqDCoMKgKDApCj4gPiAjZW5k aWbCoMKgLyogQ09ORklHX1hFTl9ET00wICovCj4gPiAKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oC8qIFhlbiBEb20wICovCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqBob3N0LT5rZG0gPQo+ID4g PiA+IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHN5bWJvbF9nZXQoeGVuZ3Rfa2RtKSwKPiA+ID4g PiAieGVuZ3QiKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGhvc3QtPmh5cGVydmlzb3JfdHlw ZSA9IEdWVF9IWVBFUlZJU09SX1RZUEVfWEVOOwo+ID4gPiA+ICvCoMKgwqDCoH0gZWxzZSBpZih4 ZW5fZG9tYWluKCkpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoC8qIFhlbiBEb21VICovCj4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gPiA+ID4gK8KgwqDCoMKgfSBl bHNlIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoC8qIG5vdCBpbiBYZW4uIFRyeSBLVk1HVCAq Lwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgaG9zdC0+a2RtID0KPiA+ID4gPiB0cnlfdGhlbl9y ZXF1ZXN0X21vZHVsZShzeW1ib2xfZ2V0KGt2bWd0X2tkbSksCj4gPiA+ID4gImt2bSIpOwo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgaG9zdC0+aHlwZXJ2aXNvcl90eXBlID0gR1ZUX0hZUEVSVklT T1JfVFlQRV9LVk07Cj4gPiA+ID4gK8KgwqDCoMKgfQo+ID4gPiA+ICsKPiA+ID4gCj4gPiA+IFdo eSBkbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaHlwZXJ2aXNvciB0eXBlLCBhcmUgdGhlcmUg cGxlbnR5Cj4gPiA+IG9mCj4gPiA+IGh5cGVydmlzb3Igc3BlY2lmaWMgYmVoYXZpb3VyIGRpZmZl cmVuY2VzPwo+ID4gCj4gPiBbWmhpXSBBcyBHVlQtZyBuZWVkcyBzb21lIGh5cGVydmlzb3Igc2Vy dmljZXMgdG8gd29yaywgd2Ugd3JpdGUgYQo+ID4gYWJzdHJhY3Rpb24gbGF5ZXIgdG8gY29ubmVj dCBHVlQtZyB0byBkaWZmZXJlbnQgaHlwZXJ2aXNvci4gQnV0Cj4gPiBzdGlsbAo+ID4gdGhlcmUg YXJlIHNvbWUgZW11bGF0aW9uIGxvZ2ljIGNvdWxkbid0IGJlIGZpdHRlZCBpbnRvIHRoYXQKPiA+ IGFic3RyYWN0aW9uCj4gPiBsYXllciwgbGlrZSBPcFJlZ2lvbiBlbXVsYXRpb24uIEluIFhlbiwg d2UgZW11bGF0ZXMgaXQgaW4ga2VybmVsCj4gPiBzcGFjZSwKPiA+IHdoaWxlIHdlIGVtdWxhdGVz IGl0IGluIFFlbXUgdW5kZXIgS1ZNLiBJIGFsc28gYWdyZWVkIHRoYXQgd2UKPiA+IHNob3VsZAo+ ID4gZmluZCBzb21lIGFwcHJvYWNoIHRvIGltcHJvdmUgaXQganVzdCBsaWtlIHdoYXQgeW91IHNh aWQuCj4gPiAKPiA+IElmIGl0IGlzIGp1c3QgZm9yIHByaW50aW5nCj4gPiA+IHRoZSBiZWxvdyBk ZWJ1ZywgSSB0aGluayBpdCdzIGJldHRlciB0byBtb3ZlIHRoZSBkZWJ1ZyBpbnRvIGFib3ZlCj4g PiA+IGNvZGUKPiA+ID4gdGhhdCBkZXRlY3RzIHRoZSBoeXBlcnZpc29yLCB3cmFwIHRoZW0gd2l0 aCBhcHByb3ByaWF0ZSBDT05GSUcKPiA+ID4gI2lmZGVmcy4KPiA+ID4gCj4gPiA+ID4gK8KgwqDC oMKgaWYgKCFob3N0LT5rZG0pCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7 Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoGlmICghaHlwZXJ2aXNvcl9kZXRlY3RfaG9zdCgp KQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ID4gPiA+ICsKPiA+ID4g PiArwqDCoMKgwqBndnRfaW5mbygiUnVubmluZyB3aXRoIGh5cGVydmlzb3IgJXMgaW4gaG9zdCBt b2RlIiwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3VwcG9ydGVkX2h5cGVydmlz b3JzW2hvc3QtPmh5cGVydmlzb3JfdHlwZV0pOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqBp ZHJfaW5pdCgmaG9zdC0+ZGV2aWNlX2lkcik7Cj4gPiA+ID4gK8KgwqDCoMKgbXV0ZXhfaW5pdCgm aG9zdC0+ZGV2aWNlX2lkcl9sb2NrKTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgaG9zdC0+ aW5pdGlhbGl6ZWQgPSB0cnVlOwo+ID4gPiA+ICvCoMKgwqDCoHJldHVybiB0cnVlOwo+ID4gPiA+ ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgYm9vbCBpbml0X2RldmljZV9pbmZvKHN0cnVj dCBwZ3RfZGV2aWNlICpwZGV2KQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDCoMKgc3RydWN0IGd2 dF9kZXZpY2VfaW5mbyAqaW5mbyA9ICZwZGV2LT5kZXZpY2VfaW5mbzsKPiA+ID4gPiArCj4gPiA+ ID4gK8KgwqDCoMKgaWYgKCFJU19CUk9BRFdFTEwocGRldi0+ZGV2X3ByaXYpKSB7Cj4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqBndnRfZXJyKCJVbnN1cHBvcnRlZCBHRU4gZGV2aWNlIik7Cj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gPiA+ID4gK8KgwqDCoMKgfQo+ID4g PiA+ICsKPiA+ID4gPiArwqDCoMKgwqBpZiAoSVNfQlJPQURXRUxMKHBkZXYtPmRldl9wcml2KSkg ewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgaW5mby0+bWF4X2d0dF9nbV9zeiA9ICgxVUwgPDwg MzIpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgLyoKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgKiBUaGUgbGF5b3V0IG9mIEJBUjAgaW4gQkRXOgo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqAqIHw8IC0gTU1JTyAyTUIgLT58PC0gUmVzZXJ2ZWQgNk1CIC0+fDwtIE1BWCBHVFQgOE1CLQo+ ID4gPiA+ID58Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCoKPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgKiBHVFQgb2Zmc2V0IGluIEJBUjAgc3RhcnRzIGZyb20gOE1CIHRvIDE2TUIsIGFu ZAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAqIFdoYXRldmVyIEdUVCBzaXplIGlzIGNvbmZp Z3VyZWQgaW4gQklPUywKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgKiB0aGUgc2l6ZSBvZiBC QVIwIGlzIGFsd2F5cyAxNk1CLiBUaGUgYWN0dWFsCj4gPiA+ID4gY29uZmlndXJlZAo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqAqIEdUVCBzaXplIGNhbiBiZSBmb3VuZCBpbiBHTUNIX0NUUkwu Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCovCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqBp bmZvLT5ndHRfc3RhcnRfb2Zmc2V0ID0gKDFVTCA8PCAyMyk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqBpbmZvLT5tYXhfZ3R0X3NpemUgPSAoMVVMIDw8IDIzKTsKPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoGluZm8tPmd0dF9lbnRyeV9zaXplID0gODsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oGluZm8tPmd0dF9lbnRyeV9zaXplX3NoaWZ0ID0gMzsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oGluZm8tPmdtYWRyX2J5dGVzX2luX2NtZCA9IDg7Cj4gPiA+IAo+ID4gPiBXb3VsZCB0aGlzIGlu Zm9ybWF0aW9uIGJlIHVzZWZ1bCBpbiBhIGhlYWRlciBhcyAjZGVmaW5lcyB0b28/Cj4gPiA+IAo+ ID4gW1poaV0gUHJvYmFibHkuIENvbnNpZGVyIHRoYXQgb25lIEdWVC1nIGZlYXR1cmVkIGtlcm5l bCBjb3VsZCBiZQo+ID4gYWJsZSB0bwo+ID4gcnVuIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMsIHRo ZSBpbmZvcm1haW9uIGRhdGEgc3RydWN0dXJlIGNvdWxkIGJlCj4gPiBkaWZmZXJlbnQuIEJ1dCBJ IGFncmVlIHRvIGRlZmluZSB0aGUgbWFnaWMgbnVtYmVycyBpbiBhIGhlYWRlcgo+ID4gZmlsZXMu IDopCj4gPiAKPiA+ID4gPiArwqDCoMKgwqB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoGd2 dF9pbmZvKCJEZXZpY2UgaW5mbzoiKTsKPiA+ID4gPiArwqDCoMKgwqBwcmludGsoIsKgwqDCoMKg wqDCoMKgwqBtYXhfZ3R0X2dtX3N6OiAlbGx4XG4iLCBpbmZvLQo+ID4gPiA+ID5tYXhfZ3R0X2dt X3N6KTsKPiA+ID4gPiArwqDCoMKgwqBwcmludGsoIsKgwqDCoMKgwqDCoMKgwqBtYXhfZ3R0X3Np emU6ICV4XG4iLCBpbmZvLT5tYXhfZ3R0X3NpemUpOwo+ID4gPiA+ICvCoMKgwqDCoHByaW50aygi wqDCoMKgwqDCoMKgwqDCoGd0dF9zaXplX2VudHJ5OiAleFxuIiwgaW5mby0KPiA+ID4gPiA+Z3R0 X2VudHJ5X3NpemUpOwo+ID4gPiA+ICvCoMKgwqDCoHByaW50aygiwqDCoMKgwqDCoMKgwqDCoGd0 dF9lbnRyeV9zaXplX3NoaWZ0OiAleFxuIiwKPiA+ID4gPiBpbmZvLT5ndHRfZW50cnlfc2l6ZV9z aGlmdCk7Cj4gPiA+ID4gK8KgwqDCoMKgcHJpbnRrKCLCoMKgwqDCoMKgwqDCoMKgZ3R0X3N0YXJ0 X29mZnNldDogJXhcbiIsIGluZm8tCj4gPiA+ID4gPmd0dF9zdGFydF9vZmZzZXQpOwo+ID4gPiA+ ICvCoMKgwqDCoHByaW50aygiwqDCoMKgwqDCoMKgwqDCoGd0dF9lbmRfb2Zmc2V0OiAleFxuIiwg aW5mby0KPiA+ID4gPiA+Z3R0X2VuZF9vZmZzZXQpOwo+ID4gPiA+ICsKPiA+ID4gCj4gPiA+IEp1 c3QgcHV0IHRoaXMgdG8ga2luZCBvZiBzdHVmZiB0byBpOTE1X2RlYnVnZnMuYy4KPiA+ID4gCj4g PiBbWmhpXSBUaGFua3MuCj4gPiAKPiA+ID4gPiArwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiA+ID4g PiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIHZvaWQgaW5pdF9pbml0aWFsX2NmZ19zcGFj ZV9zdGF0ZShzdHJ1Y3QgcGd0X2RldmljZQo+ID4gPiA+ICpwZGV2KQo+ID4gPiA+ICt7Cj4gPiA+ ID4gK8KgwqDCoMKgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBwZGV2LT5kZXZfcHJpdi0+ZGV2 LT5wZGV2Owo+ID4gPiA+ICvCoMKgwqDCoGludCBpOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKg wqBndnRfZGJnX2NvcmUoImluaXQgaW5pdGlhbCBjZmcgc3BhY2UsIGlkICVkIiwgcGRldi0+aWQp Owo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgR1ZUX0NGR19TUEFD RV9TWjsgaSArPSA0KQo+ID4gPiAKPiA+ID4gKz0gc2l6ZW9mKC4uLikKPiA+ID4gCj4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqBwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2RldiwgaSwKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAodTMyICopJnBkZXYtPmluaXRpYWxf Y2ZnX3NwYWNlW2ldKTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgZm9yIChpID0gMDsgaSA8 IDM7IGkrKykgewo+ID4gPiAKPiA+ID4gTm8gbWFnaWMgbnVtYmVycyBtYWtlIGEgI2RlZmluZSBm b3IgMyBhbmQgZ2l2ZSBpdCBhIGRlc2NyaXB0aXZlCj4gPiA+IG5hbWUuCj4gPiA+IAo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgcGRldi0+YmFyX3NpemVbaV0gPSBwY2lfcmVzb3VyY2VfbGVuKHBj aV9kZXYsIGkgKiAyKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGd2dF9pbmZvKCJiYXIgJWQg c2l6ZTogJWxseCIsIGksIHBkZXYtPmJhcl9zaXplW2ldKTsKPiA+ID4gPiArwqDCoMKgwqB9Cj4g PiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyB2b2lkIGNsZWFuX2luaXRpYWxfbW1p b19zdGF0ZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPiA+ID4gPiArewo+ID4gPiA+ICvCoMKg wqDCoGlmIChwZGV2LT5ndHRtbWlvX3ZhKSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqBpb3Vu bWFwKHBkZXYtPmd0dG1taW9fdmEpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgcGRldi0+Z3R0 bW1pb192YSA9IE5VTEw7Cj4gPiA+ID4gK8KgwqDCoMKgfQo+ID4gPiA+ICsKPiA+ID4gPiArwqDC oMKgwqBpZiAocGRldi0+Z21hZHJfdmEpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGlvdW5t YXAocGRldi0+Z21hZHJfdmEpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgcGRldi0+Z21hZHJf dmEgPSBOVUxMOwo+ID4gPiA+ICvCoMKgwqDCoH0KPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4g PiArc3RhdGljIGJvb2wgaW5pdF9pbml0aWFsX21taW9fc3RhdGUoc3RydWN0IHBndF9kZXZpY2Ug KnBkZXYpCj4gPiA+ID4gK3sKPiA+ID4gPiArwqDCoMKgwqB1NjQgYmFyMCwgYmFyMTsKPiA+ID4g PiArCj4gPiA+ID4gK8KgwqDCoMKgZ3Z0X2RiZ19jb3JlKCJpbml0IGluaXRpYWwgbW1pbyBzdGF0 ZSwgaWQgJWQiLCBwZGV2LT5pZCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoGJhcjAgPSAq KHU2NCAqKSZwZGV2LQo+ID4gPiA+ID5pbml0aWFsX2NmZ19zcGFjZVtHVlRfUkVHX0NGR19TUEFD RV9CQVIwXTsKPiA+ID4gPiArwqDCoMKgwqBiYXIxID0gKih1NjQgKikmcGRldi0KPiA+ID4gPiA+ aW5pdGlhbF9jZmdfc3BhY2VbR1ZUX1JFR19DRkdfU1BBQ0VfQkFSMV07Cj4gPiA+ID4gKwo+ID4g PiA+ICvCoMKgwqDCoHBkZXYtPmd0dG1taW9fYmFzZSA9IGJhcjAgJiB+MHhmOwo+ID4gPiA+ICvC oMKgwqDCoHBkZXYtPm1taW9fc2l6ZSA9IDIgKiAxMDI0ICogMTAyNDsKPiA+ID4gPiArwqDCoMKg wqBwZGV2LT5yZWdfbnVtID0gcGRldi0+bW1pb19zaXplIC8gNDsKPiA+ID4gPiArwqDCoMKgwqBw ZGV2LT5nbWFkcl9iYXNlID0gYmFyMSAmIH4weGY7Cj4gPiA+ID4gKwo+ID4gPiAKPiA+ID4gTWFu eSBtYWdpYyBudW1iZXJzLgo+ID4gPiAKPiA+ID4gPiArwqDCoMKgwqBwZGV2LT5ndHRtbWlvX3Zh ID0gaW9yZW1hcChwZGV2LT5ndHRtbWlvX2Jhc2UsIHBkZXYtCj4gPiA+ID4gPmJhcl9zaXplWzBd KTsKPiA+ID4gPiArwqDCoMKgwqBpZiAoIXBkZXYtPmd0dG1taW9fdmEpIHsKPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoGd2dF9lcnIoImZhaWwgdG8gbWFwIEdUVE1NSU8gQkFSLiIpOwo+ID4gPiAK PiA+ID4gVGhlc2Ugc2hvdWxkIGJlIGlmKFdBUk5fT04oLi4uKSkKPiA+ID4gCj4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gPiA+ID4gK8KgwqDCoMKgfQo+ID4gPiA+ICsK PiA+ID4gPiArwqDCoMKgwqBwZGV2LT5nbWFkcl92YSA9IGlvcmVtYXAocGRldi0+Z21hZHJfYmFz ZSwgcGRldi0KPiA+ID4gPiA+YmFyX3NpemVbMl0pOwo+ID4gPiA+ICvCoMKgwqDCoGlmICghcGRl di0+Z21hZHJfdmEpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGd2dF9lcnIoImZhaWwgdG8g bWFwIEdNQURSIEJBUi4iKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOwo+ID4g PiA+ICvCoMKgwqDCoH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgZ3Z0X2luZm8oImJhcjA6 IDB4JWxseCwgYmFyMTogMHglbGx4IiwgYmFyMCwgYmFyMSk7Cj4gPiA+ID4gK8KgwqDCoMKgZ3Z0 X2luZm8oIm1taW8gc2l6ZTogJXgiLCBwZGV2LT5tbWlvX3NpemUpOwo+ID4gPiA+ICvCoMKgwqDC oGd2dF9pbmZvKCJndHRtbWlvOiAweCVsbHgsIGdtYWRyOiAweCVsbHgiLCBwZGV2LQo+ID4gPiA+ ID5ndHRtbWlvX2Jhc2UsCj4gPiA+ID4gcGRldi0+Z21hZHJfYmFzZSk7Cj4gPiA+ID4gK8KgwqDC oMKgZ3Z0X2luZm8oImd0dG1taW9fdmE6ICVwIiwgcGRldi0+Z3R0bW1pb192YSk7Cj4gPiA+ID4g K8KgwqDCoMKgZ3Z0X2luZm8oImdtYWRyX3ZhOiAlcCIsIHBkZXYtPmdtYWRyX3ZhKTsKPiA+ID4g PiArCj4gPiA+ID4gK8KgwqDCoMKgcmV0dXJuIHRydWU7Cj4gPiA+ID4gK2VycjoKPiA+ID4gPiAr wqDCoMKgwqBjbGVhbl9pbml0aWFsX21taW9fc3RhdGUocGRldik7Cj4gPiA+ID4gK8KgwqDCoMKg cmV0dXJuIGZhbHNlOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW50IGd2 dF9zZXJ2aWNlX3RocmVhZCh2b2lkICpkYXRhKQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDCoMKg c3RydWN0IHBndF9kZXZpY2UgKnBkZXYgPSAoc3RydWN0IHBndF9kZXZpY2UgKilkYXRhOwo+ID4g PiA+ICvCoMKgwqDCoGludCByOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqBndnRfZGJnX2Nv cmUoInNlcnZpY2UgdGhyZWFkIHN0YXJ0LCBwZ3QgJWQiLCBwZGV2LT5pZCk7Cj4gPiA+ID4gKwo+ ID4gPiA+ICvCoMKgwqDCoHdoaWxlKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoHIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGRldi0+c2Vydmlj ZV90aHJlYWRfd3EsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKga3Ro cmVhZF9zaG91bGRfc3RvcCgpIHx8IHBkZXYtCj4gPiA+ID4gPnNlcnZpY2VfcmVxdWVzdCk7Cj4g PiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3Ao KSkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiA+ID4gKwo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKHIpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZ3Z0X3dhcm4oInNlcnZpY2UgdGhyZWFkIGlzIHdha2VuIHVwIGJ5IHVuZXhwZWN0ZWQK PiA+ID4gPiBzaWduYWwuIik7Cj4gPiA+IAo+ID4gPiBTaG91bGQgYmUgV0FSTl9PTkNFLCB0byBh dm9pZCBmdXR1cmUgZGlzYXN0ZXJzIHdpdGggQ0kuCj4gPiA+IAo+ID4gW1poaV0gVGhhbmtzLgo+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoH0KPiA+ID4gPiArwqDCoMKgwqB9Cj4gPiA+ID4gK8KgwqDCoMKgcmV0dXJuIDA7 Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyB2b2lkIGNsZWFuX3NlcnZpY2Vf dGhyZWFkKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDC oMKgaWYgKHBkZXYtPnNlcnZpY2VfdGhyZWFkKSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqBr dGhyZWFkX3N0b3AocGRldi0+c2VydmljZV90aHJlYWQpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgcGRldi0+c2VydmljZV90aHJlYWQgPSBOVUxMOwo+ID4gPiA+ICvCoMKgwqDCoH0KPiA+ID4g PiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGJvb2wgaW5pdF9zZXJ2aWNlX3RocmVhZChz dHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPiA+ID4gPiArewo+ID4gPiA+ICvCoMKgwqDCoGluaXRf d2FpdHF1ZXVlX2hlYWQoJnBkZXYtPnNlcnZpY2VfdGhyZWFkX3dxKTsKPiA+ID4gPiArCj4gPiA+ ID4gK8KgwqDCoMKgcGRldi0+c2VydmljZV90aHJlYWQgPSBrdGhyZWFkX3J1bihndnRfc2Vydmlj ZV90aHJlYWQsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBkZXYsICJndnRfc2Vy dmljZV90aHJlYWQlZCIsIHBkZXYtPmlkKTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgaWYg KCFwZGV2LT5zZXJ2aWNlX3RocmVhZCkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgZ3Z0X2Vy cigiZmFpbCB0byBzdGFydCBzZXJ2aWNlIHRocmVhZC4iKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoHJldHVybiBmYWxzZTsKPiA+ID4gPiArwqDCoMKgwqB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvC oMKgwqDCoHJldHVybiB0cnVlOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMg dm9pZCBjbGVhbl9wZ3RfZGV2aWNlKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KQo+ID4gPiA+ICt7 Cj4gPiA+ID4gK8KgwqDCoMKgY2xlYW5fc2VydmljZV90aHJlYWQocGRldik7Cj4gPiA+ID4gK8Kg wqDCoMKgY2xlYW5faW5pdGlhbF9tbWlvX3N0YXRlKHBkZXYpOwo+ID4gPiA+ICt9Cj4gPiA+ID4g Kwo+ID4gPiA+ICtzdGF0aWMgYm9vbCBpbml0X3BndF9kZXZpY2Uoc3RydWN0IHBndF9kZXZpY2Ug KnBkZXYsIHN0cnVjdAo+ID4gPiA+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gPiA+ ICt7Cj4gPiA+ID4gK8KgwqDCoMKgaWYgKCFpbml0X2RldmljZV9pbmZvKHBkZXYpKQo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKg wqBpbml0X2luaXRpYWxfY2ZnX3NwYWNlX3N0YXRlKHBkZXYpOwo+ID4gPiA+ICsKPiA+ID4gPiAr wqDCoMKgwqBpZiAoIWluaXRfaW5pdGlhbF9tbWlvX3N0YXRlKHBkZXYpKQo+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgZ290byBlcnI7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoGlmICghaW5p dF9zZXJ2aWNlX3RocmVhZChwZGV2KSkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJy Owo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiA+ID4gPiArZXJyOgo+ ID4gPiA+ICvCoMKgwqDCoGNsZWFuX3BndF9kZXZpY2UocGRldik7Cj4gPiA+ID4gK8KgwqDCoMKg cmV0dXJuIGZhbHNlOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgYm9vbCBw b3N0X2luaXRfcGd0X2RldmljZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPiA+ID4gPiArewo+ ID4gPiA+ICvCoMKgwqDCoHJldHVybiB0cnVlOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ ICtzdGF0aWMgdm9pZCBmcmVlX3BndF9kZXZpY2Uoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCj4g PiA+ID4gK3sKPiA+ID4gPiArwqDCoMKgwqBzdHJ1Y3QgZ3Z0X2hvc3QgKmhvc3QgPSAmZ3Z0X2hv c3Q7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoG11dGV4X2xvY2soJmhvc3QtPmRldmljZV9p ZHJfbG9jayk7Cj4gPiA+ID4gK8KgwqDCoMKgaWRyX3JlbW92ZSgmaG9zdC0+ZGV2aWNlX2lkciwg cGRldi0+aWQpOwo+ID4gPiA+ICvCoMKgwqDCoG11dGV4X3VubG9jaygmaG9zdC0+ZGV2aWNlX2lk cl9sb2NrKTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgdmZyZWUocGRldik7Cj4gPiA+ID4g K30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgcGd0X2RldmljZSAqYWxsb2NfcGd0 X2RldmljZShzdHJ1Y3QKPiA+ID4gPiBkcm1faTkxNV9wcml2YXRlCj4gPiA+ID4gKmRldl9wcml2 KQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDCoMKgc3RydWN0IGd2dF9ob3N0ICpob3N0ID0gJmd2 dF9ob3N0Owo+ID4gPiA+ICvCoMKgwqDCoHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2ID0gTlVMTDsK PiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgcGRldiA9IHZ6YWxsb2Moc2l6ZW9mKCpwZGV2KSk7 Cj4gPiA+ID4gK8KgwqDCoMKgaWYgKCFwZGV2KSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqBn dnRfZXJyKCJmYWlsIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcGd0IGRldmljZS4iKTsKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+ID4gPiA+ICvCoMKgwqDCoH0KPiA+ID4g PiArCj4gPiA+ID4gK8KgwqDCoMKgbXV0ZXhfbG9jaygmaG9zdC0+ZGV2aWNlX2lkcl9sb2NrKTsK PiA+ID4gPiArwqDCoMKgwqBwZGV2LT5pZCA9IGlkcl9hbGxvYygmaG9zdC0+ZGV2aWNlX2lkciwg cGRldiwgMCwgMCwKPiA+ID4gPiBHRlBfS0VSTkVMKTsKPiA+ID4gPiArwqDCoMKgwqBtdXRleF91 bmxvY2soJmhvc3QtPmRldmljZV9pZHJfbG9jayk7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDC oGlmIChwZGV2LT5pZCA8IDApIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGd2dF9lcnIoImZh aWwgdG8gYWxsb2NhdGUgcGd0IGRldmljZSBpZC4iKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oGdvdG8gZXJyOwo+ID4gPiA+ICvCoMKgwqDCoH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKg bXV0ZXhfaW5pdCgmcGRldi0+bG9jayk7Cj4gPiA+ID4gK8KgwqDCoMKgcGRldi0+ZGV2X3ByaXYg PSBkZXZfcHJpdjsKPiA+ID4gPiArwqDCoMKgwqBpZHJfaW5pdCgmcGRldi0+aW5zdGFuY2VfaWRy KTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgcmV0dXJuIHBkZXY7Cj4gPiA+ID4gK2VycjoK PiA+ID4gPiArwqDCoMKgwqBmcmVlX3BndF9kZXZpY2UocGRldik7Cj4gPiA+ID4gK8KgwqDCoMKg cmV0dXJuIE5VTEw7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3ZvaWQgZ3Z0X2Rlc3Ry b3lfcGd0X2RldmljZSh2b2lkICpwcml2YXRlX2RhdGEpCj4gPiA+ID4gK3sKPiA+ID4gPiArwqDC oMKgwqBzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IChzdHJ1Y3QgcGd0X2RldmljZQo+ID4gPiA+ ICopcHJpdmF0ZV9kYXRhOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqBjbGVhbl9wZ3RfZGV2 aWNlKHBkZXYpOwo+ID4gPiA+ICvCoMKgwqDCoGZyZWVfcGd0X2RldmljZShwZGV2KTsKPiA+ID4g PiArfQo+ID4gPiA+ICsKPiA+ID4gPiArdm9pZCAqZ3Z0X2NyZWF0ZV9wZ3RfZGV2aWNlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ID4gPiArewo+ID4gPiA+ICvCoMKgwqDC oHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2ID0gTlVMTDsKPiA+ID4gPiArwqDCoMKgwqBzdHJ1Y3Qg Z3Z0X2hvc3QgKmhvc3QgPSAmZ3Z0X2hvc3Q7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoGlm ICghaG9zdC0+aW5pdGlhbGl6ZWQgJiYgIWd2dF9pbml0X2hvc3QoKSkgewo+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgZ3Z0X2VycigiZ3Z0X2luaXRfaG9zdCBmYWlsIik7Cj4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPiA+ID4gPiArwqDCoMKgwqB9Cj4gPiA+ID4gKwo+ID4g PiA+ICvCoMKgwqDCoGd2dF9kYmdfY29yZSgiY3JlYXRlIG5ldyBwZ3QgZGV2aWNlLCBpOTE1IGRl dl9wcml2OiAlcCIsCj4gPiA+ID4gZGV2X3ByaXYpOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKg wqBwZGV2ID0gYWxsb2NfcGd0X2RldmljZShkZXZfcHJpdik7Cj4gPiA+ID4gK8KgwqDCoMKgaWYg KCFwZGV2KSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqBndnRfZXJyKCJmYWlsIHRvIGFsbG9j YXRlIG1lbW9yeSBmb3IgcGd0IGRldmljZS4iKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGdv dG8gZXJyOwo+ID4gPiA+ICvCoMKgwqDCoH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgZ3Z0 X2RiZ19jb3JlKCJpbml0IHBndCBkZXZpY2UsIGlkICVkIiwgcGRldi0+aWQpOwo+ID4gPiA+ICsK PiA+ID4gPiArwqDCoMKgwqBpZiAoIWluaXRfcGd0X2RldmljZShwZGV2LCBkZXZfcHJpdikpIHsK PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGd2dF9lcnIoImZhaWwgdG8gaW5pdCBwaHlzaWNhbCBk ZXZpY2Ugc3RhdGUuIik7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqBnb3RvIGVycjsKPiA+ID4g PiArwqDCoMKgwqB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoGd2dF9kYmdfY29yZSgicGd0 IGRldmljZSBjcmVhdGlvbiBkb25lLCBpZCAlZCIsIHBkZXYtPmlkKTsKPiA+ID4gPiArCj4gPiA+ ID4gK8KgwqDCoMKgcmV0dXJuIHBkZXY7Cj4gPiA+ID4gK2VycjoKPiA+ID4gPiArwqDCoMKgwqBp ZiAocGRldikgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgZ3Z0X2Rlc3Ryb3lfcGd0X2Rldmlj ZShwZGV2KTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoHBkZXYgPSBOVUxMOwo+ID4gPiA+ICvC oMKgwqDCoH0KPiA+ID4gPiArwqDCoMKgwqByZXR1cm4gTlVMTDsKPiA+ID4gPiArfQo+ID4gPiA+ ICsKPiA+ID4gPiArYm9vbCBndnRfcG9zdF9pbml0X3BndF9kZXZpY2Uodm9pZCAqcHJpdmF0ZV9k YXRhKQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDCoMKgc3RydWN0IHBndF9kZXZpY2UgKnBkZXYg PSAoc3RydWN0IHBndF9kZXZpY2UKPiA+ID4gPiAqKXByaXZhdGVfZGF0YTsKPiA+ID4gPiArwqDC oMKgwqBzdHJ1Y3QgZ3Z0X2hvc3QgKmhvc3QgPSAmZ3Z0X2hvc3Q7Cj4gPiA+ID4gKwo+ID4gPiA+ ICvCoMKgwqDCoGlmICghaG9zdC0+aW5pdGlhbGl6ZWQpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoGd2dF9lcnIoImd2dF9ob3N0IGhhdmVuJ3QgYmVlbiBpbml0aWFsaXplZC4iKTsKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiA+ID4gPiArwqDCoMKgwqB9Cj4gPiA+ ID4gKwo+ID4gPiA+ICvCoMKgwqDCoGd2dF9kYmdfY29yZSgicG9zdCBpbml0IHBndCBkZXZpY2Ug JWQiLCBwZGV2LT5pZCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoGlmICghcG9zdF9pbml0 X3BndF9kZXZpY2UocGRldikpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGd2dF9lcnIoImZh aWwgdG8gcG9zdCBpbml0IHBoeXNpY2FsIGRldmljZSBzdGF0ZS4iKTsKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiA+ID4gPiArwqDCoMKgwqB9Cj4gPiA+ID4gKwo+ID4g PiA+ICvCoMKgwqDCoHJldHVybiB0cnVlOwo+ID4gPiA+ICt9Cj4gPiA+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaAo+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L2d2dC5oCj4gPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gPiBpbmRl eCAwMDAwMDAwLi42Yzg1YmJhCj4gPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiA+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaAo+ID4gPiA+IEBAIC0wLDAgKzEsMTMwIEBACj4g PiA+ID4gKy8qCj4gPiA+ID4gKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMKPiA+ID4gPiByZXNlcnZlZC4KPiA+ID4gPiArICoKPiA+ID4gPiAr ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24KPiA+ID4gPiBvYnRhaW5pbmcgYQo+ID4gPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcwo+ID4gPiA+ICh0aGUKPiA+ID4g PiAiU29mdHdhcmUiKSwKPiA+ID4gPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCj4gPiA+ID4gd2l0aG91dAo+ID4gPiA+IGxpbWl0YXRp b24KPiA+ID4gPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsCj4gPiA+ID4gZGlzdHJpYnV0ZSwKPiA+ID4gPiBzdWJsaWNlbnNlLAo+ID4gPiA+ICsg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMKPiA+ID4gPiB0byB3aG9tCj4gPiA+ID4gdGhlCj4gPiA+ID4gKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCj4gPiA+ID4gY29uZGl0 aW9uczoKPiA+ID4gPiArICoKPiA+ID4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKPiA+ID4gPiAoaW5jbHVkaW5nCj4gPiA+ID4gdGhl IG5leHQKPiA+ID4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsCj4gPiA+ID4gcG9ydGlvbnMgb2YgdGhlCj4gPiA+ID4gKyAqIFNv ZnR3YXJlLgo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKPiA+ID4gPiBLSU5ELAo+ID4gPiA+IEVY UFJFU1MgT1IKPiA+ID4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRgo+ID4gPiA+IE1FUkNIQU5UQUJJTElUWSwKPiA+ID4gPiArICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoMKg SU4KPiA+ID4gPiBOTwo+ID4gPiA+IEVWRU5UIFNIQUxMCj4gPiA+ID4gKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAo+ID4gPiA+IERB TUFHRVMKPiA+ID4gPiBPUiBPVEhFUgo+ID4gPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCj4gPiA+ID4gT1RIRVJXSVNFLAo+ID4gPiA+ IEFSSVNJTkcgRlJPTSwKPiA+ID4gPiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ID4gPiA+IE9USEVSCj4gPiA+ID4gREVBTElOR1Mg SU4gVEhFCj4gPiA+ID4gKyAqIFNPRlRXQVJFLgo+ID4gPiA+ICsgKi8KPiA+ID4gPiArCj4gPiA+ ID4gKyNpZm5kZWYgX0dWVF9IXwo+ID4gPiA+ICsjZGVmaW5lIF9HVlRfSF8KPiA+ID4gPiArCj4g PiA+ID4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ID4gPiA+ICsjaW5jbHVkZSAiaTkxNV92Z3B1 LmgiCj4gPiA+ID4gKwo+ID4gPiA+ICsjaW5jbHVkZSAiZGVidWcuaCIKPiA+ID4gPiArI2luY2x1 ZGUgInBhcmFtcy5oIgo+ID4gPiA+ICsjaW5jbHVkZSAicmVnLmgiCj4gPiA+ID4gKyNpbmNsdWRl ICJoeXBlcmNhbGwuaCIKPiA+ID4gPiArI2luY2x1ZGUgIm1wdC5oIgo+ID4gPiA+ICsjaW5jbHVk ZSAiZmJfZGVjb2Rlci5oIgo+ID4gPiA+ICsKPiA+ID4gPiArI2RlZmluZSBHVlRfTUFYX1ZHUFUg OAo+ID4gPiA+ICsKPiA+ID4gPiArZW51bSB7Cj4gPiA+ID4gK8KgwqDCoMKgR1ZUX0hZUEVSVklT T1JfVFlQRV9YRU4gPSAwLAo+ID4gPiA+ICvCoMKgwqDCoEdWVF9IWVBFUlZJU09SX1RZUEVfS1ZN LAo+ID4gPiA+ICt9Owo+ID4gPiA+ICsKPiA+ID4gPiArc3RydWN0IGd2dF9ob3N0IHsKPiA+ID4g PiArwqDCoMKgwqBib29sIGluaXRpYWxpemVkOwo+ID4gPiA+ICvCoMKgwqDCoGludCBoeXBlcnZp c29yX3R5cGU7Cj4gPiA+ID4gK8KgwqDCoMKgc3RydWN0IG11dGV4IGRldmljZV9pZHJfbG9jazsK PiA+ID4gPiArwqDCoMKgwqBzdHJ1Y3QgaWRyIGRldmljZV9pZHI7Cj4gPiA+ID4gK8KgwqDCoMKg c3RydWN0IGd2dF9rZXJuZWxfZG0gKmtkbTsKPiA+ID4gPiArfTsKPiA+ID4gPiArCj4gPiA+ID4g K2V4dGVybiBzdHJ1Y3QgZ3Z0X2hvc3QgZ3Z0X2hvc3Q7Cj4gPiA+ID4gKwo+ID4gPiA+ICsvKiBE ZXNjcmliZSB0aGUgbGltaXRhdGlvbiBvZiBIVy4qLwo+ID4gPiA+ICtzdHJ1Y3QgZ3Z0X2Rldmlj ZV9pbmZvIHsKPiA+ID4gPiArwqDCoMKgwqB1NjQgbWF4X2d0dF9nbV9zejsKPiA+ID4gPiArwqDC oMKgwqB1MzIgZ3R0X3N0YXJ0X29mZnNldDsKPiA+ID4gPiArwqDCoMKgwqB1MzIgZ3R0X2VuZF9v ZmZzZXQ7Cj4gPiA+ID4gK8KgwqDCoMKgdTMyIG1heF9ndHRfc2l6ZTsKPiA+ID4gPiArwqDCoMKg wqB1MzIgZ3R0X2VudHJ5X3NpemU7Cj4gPiA+ID4gK8KgwqDCoMKgdTMyIGd0dF9lbnRyeV9zaXpl X3NoaWZ0Owo+ID4gPiA+ICvCoMKgwqDCoHUzMiBnbWFkcl9ieXRlc19pbl9jbWQ7Cj4gPiA+ID4g K307Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdHJ1Y3Qgdmd0X2RldmljZSB7Cj4gPiA+ID4gK8KgwqDC oMKgaW50IGlkOwo+ID4gPiA+ICvCoMKgwqDCoGludCB2bV9pZDsKPiA+ID4gPiArwqDCoMKgwqBz dHJ1Y3QgcGd0X2RldmljZSAqcGRldjsKPiA+ID4gPiArwqDCoMKgwqBib29sIHdhcm5fdW50cmFj azsKPiA+ID4gPiArfTsKPiA+ID4gPiArCj4gPiA+ID4gK3N0cnVjdCBwZ3RfZGV2aWNlIHsKPiA+ ID4gPiArwqDCoMKgwqBzdHJ1Y3QgbXV0ZXggbG9jazsKPiA+ID4gPiArwqDCoMKgwqBpbnQgaWQ7 Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdjsKPiA+ID4gPiArwqDCoMKgwqBzdHJ1Y3QgaWRyIGluc3RhbmNlX2lkcjsKPiA+ID4gPiAr Cj4gPiA+ID4gK8KgwqDCoMKgc3RydWN0IGd2dF9kZXZpY2VfaW5mbyBkZXZpY2VfaW5mbzsKPiA+ ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgdTggaW5pdGlhbF9jZmdfc3BhY2VbR1ZUX0NGR19TUEFD RV9TWl07Cj4gPiA+ID4gK8KgwqDCoMKgdTY0IGJhcl9zaXplW0dWVF9CQVJfTlVNXTsKPiA+ID4g PiArCj4gPiA+ID4gK8KgwqDCoMKgdTY0IGd0dG1taW9fYmFzZTsKPiA+ID4gPiArwqDCoMKgwqB2 b2lkICpndHRtbWlvX3ZhOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqB1NjQgZ21hZHJfYmFz ZTsKPiA+ID4gPiArwqDCoMKgwqB2b2lkICpnbWFkcl92YTsKPiA+ID4gPiArCj4gPiA+ID4gK8Kg wqDCoMKgdTMyIG1taW9fc2l6ZTsKPiA+ID4gPiArwqDCoMKgwqB1MzIgcmVnX251bTsKPiA+ID4g PiArCj4gPiA+ID4gK8KgwqDCoMKgd2FpdF9xdWV1ZV9oZWFkX3Qgc2VydmljZV90aHJlYWRfd3E7 Cj4gPiA+ID4gK8KgwqDCoMKgc3RydWN0IHRhc2tfc3RydWN0ICpzZXJ2aWNlX3RocmVhZDsKPiA+ ID4gPiArwqDCoMKgwqB1bnNpZ25lZCBsb25nIHNlcnZpY2VfcmVxdWVzdDsKPiA+ID4gPiArfTsK PiA+ID4gPiArCj4gPiA+IAo+ID4gPiBIZXJlLS0+Cj4gPiA+IAo+ID4gPiA+ICtzdGF0aWMgaW5s aW5lIHUzMiBndnRfbW1pb19yZWFkKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2LAo+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgdTMyIHJlZykKPiA+ID4gPiArewo+ID4gPiA+ICvCoMKgwqDCoHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHBkZXYtPmRldl9wcml2Owo+ID4gPiA+ICvC oMKgwqDCoGk5MTVfcmVnX3QgdG1wID0gey5yZWcgPSByZWd9Owo+ID4gPiA+ICvCoMKgwqDCoHJl dHVybiBJOTE1X1JFQUQodG1wKTsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGlj IGlubGluZSB2b2lkIGd2dF9tbWlvX3dyaXRlKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2LAo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgdTMyIHJlZywgdTMyIHZhbCkKPiA+ID4gPiArewo+ID4gPiA+ ICvCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHBkZXYtPmRldl9w cml2Owo+ID4gPiA+ICvCoMKgwqDCoGk5MTVfcmVnX3QgdG1wID0gey5yZWcgPSByZWd9Owo+ID4g PiA+ICvCoMKgwqDCoEk5MTVfV1JJVEUodG1wLCB2YWwpOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ ID4gPiA+ICtzdGF0aWMgaW5saW5lIHU2NCBndnRfbW1pb19yZWFkNjQoc3RydWN0IHBndF9kZXZp Y2UgKnBkZXYsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqB1MzIgcmVnKQo+ID4gPiA+ICt7Cj4g PiA+ID4gK8KgwqDCoMKgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcGRldi0+ ZGV2X3ByaXY7Cj4gPiA+ID4gK8KgwqDCoMKgaTkxNV9yZWdfdCB0bXAgPSB7LnJlZyA9IHJlZ307 Cj4gPiA+ID4gK8KgwqDCoMKgcmV0dXJuIEk5MTVfUkVBRDY0KHRtcCk7Cj4gPiA+ID4gK30KPiA+ ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBndnRfbW1pb193cml0ZTY0KHN0cnVj dCBwZ3RfZGV2aWNlICpwZGV2LAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgdTMyIHJlZywgdTY0 IHZhbCkKPiA+ID4gPiArewo+ID4gPiA+ICvCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHBkZXYtPmRldl9wcml2Owo+ID4gPiA+ICvCoMKgwqDCoGk5MTVfcmVnX3Qg dG1wID0gey5yZWcgPSByZWd9Owo+ID4gPiA+ICvCoMKgwqDCoEk5MTVfV1JJVEU2NCh0bXAsIHZh bCk7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+IAo+ID4gPiA8LS0gV2h5PyBUaGUgaTkxNV9y ZWdfdCB0eXBlIHdhcyBhZGRlZCB0byBhdm9pZCBwcm9ibGVtcywgdGhpcwo+ID4gPiBjb2RlIGlz Cj4gPiA+IG5vdCB1c2VkIGFueXdoZXJlLCBhbmQgaXQgaGFzIG5vIGRvY3VtZW50YXRpb24sIHNv IEkgY2FuIG5vdAo+ID4gPiByZXZpZXcgaXQuCj4gPiA+IAo+ID4gPiBJIHdyb3RlIGNvbW1lbnRz IGF0IHRoZSB0b3Agb2YgdGhlIHBvc3QuCj4gPiA+IAo+ID4gW1poaV0gVGhhbmtzLCBJIHdpbGwg Y2hlY2sgdGhhdC4KPiA+IAo+ID4gPiBSZWdhcmRzLCBKb29uYXMKPiA+ID4gCj4gPiA+ID4gKyNl bmRpZgo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaHlwZXJj YWxsLmgKPiA+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9oeXBlcmNhbGwuaAo+ID4g PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+ID4gaW5kZXggMDAwMDAwMC4uMGE0MTg3NAo+ ID4gPiA+IC0tLSAvZGV2L251bGwKPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvaHlwZXJjYWxsLmgKPiA+ID4gPiBAQCAtMCwwICsxLDMwIEBACj4gPiA+ID4gKy8qCj4gPiA+ ID4gKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMKPiA+ID4gPiByZXNlcnZlZC4KPiA+ID4gPiArICoKPiA+ID4gPiArICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPiA+ID4gPiBv YnRhaW5pbmcgYQo+ID4gPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcwo+ID4gPiA+ICh0aGUKPiA+ID4gPiAiU29mdHdhcmUiKSwK PiA+ID4gPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nCj4gPiA+ID4gd2l0aG91dAo+ID4gPiA+IGxpbWl0YXRpb24KPiA+ID4gPiArICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCj4gPiA+ID4g ZGlzdHJpYnV0ZSwKPiA+ID4gPiBzdWJsaWNlbnNlLAo+ID4gPiA+ICsgKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMKPiA+ID4gPiB0byB3 aG9tCj4gPiA+ID4gdGhlCj4gPiA+ID4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCj4gPiA+ID4gY29uZGl0aW9uczoKPiA+ID4gPiAr ICoKPiA+ID4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UKPiA+ID4gPiAoaW5jbHVkaW5nCj4gPiA+ID4gdGhlIG5leHQKPiA+ID4gPiAr ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsCj4gPiA+ID4gcG9ydGlvbnMgb2YgdGhlCj4gPiA+ID4gKyAqIFNvZnR3YXJlLgo+ID4gPiA+ ICsgKgo+ID4gPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkKPiA+ID4gPiBLSU5ELAo+ID4gPiA+IEVYUFJFU1MgT1IKPiA+ID4g PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRgo+ID4gPiA+IE1FUkNIQU5UQUJJTElUWSwKPiA+ID4gPiArICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoMKgSU4KPiA+ID4gPiBOTwo+ ID4gPiA+IEVWRU5UIFNIQUxMCj4gPiA+ID4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAo+ID4gPiA+IERBTUFHRVMKPiA+ID4gPiBP UiBPVEhFUgo+ID4gPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SCj4gPiA+ID4gT1RIRVJXSVNFLAo+ID4gPiA+IEFSSVNJTkcgRlJPTSwK PiA+ID4gPiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUgo+ID4gPiA+IE9USEVSCj4gPiA+ID4gREVBTElOR1MgSU4gVEhFCj4gPiA+ID4g KyAqIFNPRlRXQVJFLgo+ID4gPiA+ICsgKi8KPiA+ID4gPiArCj4gPiA+ID4gKyNpZm5kZWYgX0dW VF9IWVBFUkNBTExfSF8KPiA+ID4gPiArI2RlZmluZSBfR1ZUX0hZUEVSQ0FMTF9IXwo+ID4gPiA+ ICsKPiA+ID4gPiArc3RydWN0IGd2dF9rZXJuZWxfZG0gewo+ID4gPiA+ICt9Owo+ID4gPiA+ICsK PiA+ID4gPiArI2VuZGlmIC8qIF9HVlRfSFlQRVJDQUxMX0hfICovCj4gPiA+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9tcHQuaAo+ID4gPiA+IGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L21wdC5oCj4gPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gPiBp bmRleCAwMDAwMDAwLi5iYmU0NDY1Cj4gPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9tcHQuaAo+ID4gPiA+IEBAIC0wLDAgKzEsOTcgQEAK PiA+ID4gPiArLyoKPiA+ID4gPiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cwo+ID4gPiA+IHJlc2VydmVkLgo+ID4gPiA+ICsgKgo+ID4gPiA+ ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbgo+ID4gPiA+IG9idGFpbmluZyBhCj4gPiA+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzCj4gPiA+ID4gKHRoZQo+ID4g PiA+ICJTb2Z0d2FyZSIpLAo+ID4gPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKPiA+ID4gPiB3aXRob3V0Cj4gPiA+ID4gbGltaXRh dGlvbgo+ID4gPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwKPiA+ID4gPiBkaXN0cmlidXRlLAo+ID4gPiA+IHN1YmxpY2Vuc2UsCj4gPiA+ID4g KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucwo+ID4gPiA+IHRvIHdob20KPiA+ID4gPiB0aGUKPiA+ID4gPiArICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKPiA+ID4gPiBjb25k aXRpb25zOgo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQo+ID4gPiA+IChpbmNsdWRpbmcKPiA+ID4gPiB0 aGUgbmV4dAo+ID4gPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwKPiA+ID4gPiBwb3J0aW9ucyBvZiB0aGUKPiA+ID4gPiArICog U29mdHdhcmUuCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQo+ID4gPiA+IEtJTkQsCj4gPiA+ID4g RVhQUkVTUyBPUgo+ID4gPiA+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GCj4gPiA+ID4gTUVSQ0hBTlRBQklMSVRZLAo+ID4gPiA+ICsg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULsKg wqBJTgo+ID4gPiA+IE5PCj4gPiA+ID4gRVZFTlQgU0hBTEwKPiA+ID4gPiArICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCj4gPiA+ID4g REFNQUdFUwo+ID4gPiA+IE9SIE9USEVSCj4gPiA+ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKPiA+ID4gPiBPVEhFUldJU0UsCj4gPiA+ ID4gQVJJU0lORyBGUk9NLAo+ID4gPiA+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4gPiA+ID4gT1RIRVIKPiA+ID4gPiBERUFMSU5H UyBJTiBUSEUKPiA+ID4gPiArICogU09GVFdBUkUuCj4gPiA+ID4gKyAqLwo+ID4gPiA+ICsKPiA+ ID4gPiArI2lmbmRlZiBfR1ZUX01QVF9IXwo+ID4gPiA+ICsjZGVmaW5lIF9HVlRfTVBUX0hfCj4g PiA+ID4gKwo+ID4gPiA+ICtzdHJ1Y3Qgdmd0X2RldmljZTsKPiA+ID4gPiArCj4gPiA+ID4gK3N0 YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBoeXBlcnZpc29yX2cybV9wZm4oc3RydWN0Cj4gPiA+ ID4gdmd0X2RldmljZSAqdmd0LAo+ID4gPiA+ICvCoMKgwqDCoHVuc2lnbmVkIGxvbmcgZ19wZm4p Cj4gPiA+ID4gK3sKPiA+ID4gPiArwqDCoMKgwqByZXR1cm4gMDsKPiA+ID4gPiArfQo+ID4gPiA+ ICsKPiA+ID4gPiArc3RhdGljIGlubGluZSBpbnQgaHlwZXJ2aXNvcl9wYXVzZV9kb21haW4oc3Ry dWN0IHZndF9kZXZpY2UKPiA+ID4gPiAqdmd0KQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDCoMKg cmV0dXJuIDA7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbmxpbmUgaW50 IGh5cGVydmlzb3Jfc2h1dGRvd25fZG9tYWluKHN0cnVjdCB2Z3RfZGV2aWNlCj4gPiA+ID4gKnZn dCkKPiA+ID4gPiArewo+ID4gPiA+ICvCoMKgwqDCoHJldHVybiAwOwo+ID4gPiA+ICt9Cj4gPiA+ ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW5saW5lIGludCBoeXBlcnZpc29yX3NldF90cmFwX2FyZWEo c3RydWN0IHZndF9kZXZpY2UKPiA+ID4gPiAqdmd0LAo+ID4gPiA+ICvCoMKgwqDCoHVpbnQ2NF90 IHN0YXJ0LCB1aW50NjRfdCBlbmQsIGJvb2wgbWFwKQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDC oMKgcmV0dXJuIDA7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbmxpbmUg Ym9vbCBoeXBlcnZpc29yX2RldGVjdF9ob3N0KHZvaWQpCj4gPiA+ID4gK3sKPiA+ID4gPiArwqDC oMKgwqByZXR1cm4gZmFsc2U7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBp bmxpbmUgaW50IGh5cGVydmlzb3JfdmlydF90b19tZm4odm9pZCAqYWRkcikKPiA+ID4gPiArewo+ ID4gPiA+ICvCoMKgwqDCoHJldHVybiAwOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtz dGF0aWMgaW5saW5lIHZvaWQgKmh5cGVydmlzb3JfbWZuX3RvX3ZpcnQoaW50IG1mbikKPiA+ID4g PiArewo+ID4gPiA+ICvCoMKgwqDCoHJldHVybiBOVUxMOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ ID4gPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgaHlwZXJ2aXNvcl9pbmplY3RfbXNpKHN0cnVjdCB2 Z3RfZGV2aWNlCj4gPiA+ID4gKnZndCkKPiA+ID4gPiArewo+ID4gPiA+ICvCoMKgwqDCoHJldHVy bjsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGlubGluZSBpbnQgaHlwZXJ2 aXNvcl9odm1faW5pdChzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0KQo+ID4gPiA+ICt7Cj4gPiA+ID4g K8KgwqDCoMKgcmV0dXJuIDA7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBp bmxpbmUgdm9pZCBoeXBlcnZpc29yX2h2bV9leGl0KHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpCj4g PiA+ID4gK3sKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGlubGluZSB2b2lk ICpoeXBlcnZpc29yX2dwYV90b192YShzdHJ1Y3Qgdmd0X2RldmljZQo+ID4gPiA+ICp2Z3QsCj4g PiA+ID4gdW5zaWduZWQgbG9uZyBncGEpCj4gPiA+ID4gK3sKPiA+ID4gPiArwqDCoMKgwqByZXR1 cm4gTlVMTDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGlubGluZSBib29s IGh5cGVydmlzb3JfcmVhZF92YShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LAo+ID4gPiA+IHZvaWQg KnZhLAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgdm9pZCAqdmFsLCBpbnQgbGVuLCBpbnQgYXRv bWljKQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ID4gPiA+ICt9 Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW5saW5lIGJvb2wgaHlwZXJ2aXNvcl93cml0ZV92 YShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LAo+ID4gPiA+IHZvaWQKPiA+ID4gPiAqdmEsCj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqB2b2lkICp2YWwsIGludCBsZW4sIGludCBhdG9taWMpCj4gPiA+ ID4gK3sKPiA+ID4gPiArwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gPiA+ID4gK30KPiA+ID4gPiAr Cj4gPiA+ID4gKyNlbmRpZiAvKiBfR1ZUX01QVF9IXyAqLwo+ID4gPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmMKPiA+ID4gPiBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9wYXJhbXMuYwo+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+ID4g aW5kZXggMDAwMDAwMC4uZGZjMzNjMwo+ID4gPiA+IC0tLSAvZGV2L251bGwKPiA+ID4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmMKPiA+ID4gPiBAQCAtMCwwICsxLDI5 IEBACj4gPiA+ID4gKy8qCj4gPiA+ID4gKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwg Q29ycG9yYXRpb24uIEFsbCByaWdodHMKPiA+ID4gPiByZXNlcnZlZC4KPiA+ID4gPiArICoKPiA+ ID4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24KPiA+ID4gPiBvYnRhaW5pbmcgYQo+ID4gPiA+ICsgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcwo+ID4gPiA+ICh0aGUK PiA+ID4gPiAiU29mdHdhcmUiKSwKPiA+ID4gPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCj4gPiA+ID4gd2l0aG91dAo+ID4gPiA+IGxp bWl0YXRpb24KPiA+ID4gPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsCj4gPiA+ID4gZGlzdHJpYnV0ZSwKPiA+ID4gPiBzdWJsaWNlbnNlLAo+ID4g PiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMKPiA+ID4gPiB0byB3aG9tCj4gPiA+ID4gdGhlCj4gPiA+ID4gKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCj4gPiA+ID4g Y29uZGl0aW9uczoKPiA+ID4gPiArICoKPiA+ID4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKPiA+ID4gPiAoaW5jbHVkaW5nCj4gPiA+ ID4gdGhlIG5leHQKPiA+ID4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsCj4gPiA+ID4gcG9ydGlvbnMgb2YgdGhlCj4gPiA+ID4g KyAqIFNvZnR3YXJlLgo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKPiA+ID4gPiBLSU5ELAo+ID4g PiA+IEVYUFJFU1MgT1IKPiA+ID4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+ID4gPiA+IE1FUkNIQU5UQUJJTElUWSwKPiA+ID4g PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC7CoMKgSU4KPiA+ID4gPiBOTwo+ID4gPiA+IEVWRU5UIFNIQUxMCj4gPiA+ID4gKyAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAo+ID4g PiA+IERBTUFHRVMKPiA+ID4gPiBPUiBPVEhFUgo+ID4gPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCj4gPiA+ID4gT1RIRVJXSVNFLAo+ ID4gPiA+IEFSSVNJTkcgRlJPTSwKPiA+ID4gPiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ID4gPiA+IE9USEVSCj4gPiA+ID4gREVB TElOR1MgSU4gVEhFCj4gPiA+ID4gKyAqIFNPRlRXQVJFLgo+ID4gPiA+ICsgKi8KPiA+ID4gPiAr Cj4gPiA+ID4gKyNpbmNsdWRlICJndnQuaCIKPiA+ID4gPiArCj4gPiA+ID4gK3N0cnVjdCBndnRf a2VybmVsX3BhcmFtcyBndnQgPSB7Cj4gPiA+ID4gK8KgwqDCoMKgLmVuYWJsZSA9IHRydWUsCj4g PiA+ID4gK8KgwqDCoMKgLmRlYnVnID0gMCwKPiA+ID4gPiArfTsKPiA+ID4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3BhcmFtcy5oCj4gPiA+ID4gYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndnQvcGFyYW1zLmgKPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4g PiA+IGluZGV4IDAwMDAwMDAuLmQyOTU1YjkKPiA+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3BhcmFtcy5oCj4gPiA+ID4gQEAgLTAsMCAr MSwzNCBAQAo+ID4gPiA+ICsvKgo+ID4gPiA+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IElu dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzCj4gPiA+ID4gcmVzZXJ2ZWQuCj4gPiA+ID4gKyAq Cj4gPiA+ID4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uCj4gPiA+ID4gb2J0YWluaW5nIGEKPiA+ID4gPiArICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKPiA+ID4gPiAo dGhlCj4gPiA+ID4gIlNvZnR3YXJlIiksCj4gPiA+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwo+ID4gPiA+IHdpdGhvdXQKPiA+ID4g PiBsaW1pdGF0aW9uCj4gPiA+ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLAo+ID4gPiA+IGRpc3RyaWJ1dGUsCj4gPiA+ID4gc3VibGljZW5zZSwK PiA+ID4gPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zCj4gPiA+ID4gdG8gd2hvbQo+ID4gPiA+IHRoZQo+ID4gPiA+ICsgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+ID4g PiA+IGNvbmRpdGlvbnM6Cj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCj4gPiA+ID4gKGluY2x1ZGluZwo+ ID4gPiA+IHRoZSBuZXh0Cj4gPiA+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAo+ID4gPiA+IHBvcnRpb25zIG9mIHRoZQo+ID4g PiA+ICsgKiBTb2Z0d2FyZS4KPiA+ID4gPiArICoKPiA+ID4gPiArICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCj4gPiA+ID4gS0lORCwK PiA+ID4gPiBFWFBSRVNTIE9SCj4gPiA+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKPiA+ID4gPiBNRVJDSEFOVEFCSUxJVFksCj4g PiA+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuwqDCoElOCj4gPiA+ID4gTk8KPiA+ID4gPiBFVkVOVCBTSEFMTAo+ID4gPiA+ICsgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwK PiA+ID4gPiBEQU1BR0VTCj4gPiA+ID4gT1IgT1RIRVIKPiA+ID4gPiArICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgo+ID4gPiA+IE9USEVSV0lT RSwKPiA+ID4gPiBBUklTSU5HIEZST00sCj4gPiA+ID4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiA+ID4gPiBPVEhFUgo+ID4gPiA+ IERFQUxJTkdTIElOIFRIRQo+ID4gPiA+ICsgKiBTT0ZUV0FSRS4KPiA+ID4gPiArICovCj4gPiA+ ID4gKwo+ID4gPiA+ICsjaWZuZGVmIF9HVlRfUEFSQU1TX0hfCj4gPiA+ID4gKyNkZWZpbmUgX0dW VF9QQVJBTVNfSF8KPiA+ID4gPiArCj4gPiA+ID4gK3N0cnVjdCBndnRfa2VybmVsX3BhcmFtcyB7 Cj4gPiA+ID4gK8KgwqDCoMKgYm9vbCBlbmFibGU7Cj4gPiA+ID4gK8KgwqDCoMKgaW50IGRlYnVn Owo+ID4gPiA+ICt9Owo+ID4gPiA+ICsKPiA+ID4gPiArZXh0ZXJuIHN0cnVjdCBndnRfa2VybmVs X3BhcmFtcyBndnQ7Cj4gPiA+ID4gKwo+ID4gPiA+ICsjZW5kaWYKPiA+ID4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3JlZy5oCj4gPiA+ID4gYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvcmVnLmgKPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiA+IGlu ZGV4IDAwMDAwMDAuLmQzNjNiNzQKPiA+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3JlZy5oCj4gPiA+ID4gQEAgLTAsMCArMSwzNCBAQAo+ ID4gPiA+ICsvKgo+ID4gPiA+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzCj4gPiA+ID4gcmVzZXJ2ZWQuCj4gPiA+ID4gKyAqCj4gPiA+ID4g KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uCj4gPiA+ID4gb2J0YWluaW5nIGEKPiA+ID4gPiArICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKPiA+ID4gPiAodGhlCj4gPiA+ ID4gIlNvZnR3YXJlIiksCj4gPiA+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwo+ID4gPiA+IHdpdGhvdXQKPiA+ID4gPiBsaW1pdGF0 aW9uCj4gPiA+ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLAo+ID4gPiA+IGRpc3RyaWJ1dGUsCj4gPiA+ID4gc3VibGljZW5zZSwKPiA+ID4gPiAr ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zCj4gPiA+ID4gdG8gd2hvbQo+ID4gPiA+IHRoZQo+ID4gPiA+ICsgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+ID4gPiA+IGNvbmRp dGlvbnM6Cj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCj4gPiA+ID4gKGluY2x1ZGluZwo+ID4gPiA+IHRo ZSBuZXh0Cj4gPiA+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbAo+ID4gPiA+IHBvcnRpb25zIG9mIHRoZQo+ID4gPiA+ICsgKiBT b2Z0d2FyZS4KPiA+ID4gPiArICoKPiA+ID4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCj4gPiA+ID4gS0lORCwKPiA+ID4gPiBF WFBSRVNTIE9SCj4gPiA+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YKPiA+ID4gPiBNRVJDSEFOVEFCSUxJVFksCj4gPiA+ID4gKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuwqDC oElOCj4gPiA+ID4gTk8KPiA+ID4gPiBFVkVOVCBTSEFMTAo+ID4gPiA+ICsgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKPiA+ID4gPiBE QU1BR0VTCj4gPiA+ID4gT1IgT1RIRVIKPiA+ID4gPiArICogTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgo+ID4gPiA+IE9USEVSV0lTRSwKPiA+ID4g PiBBUklTSU5HIEZST00sCj4gPiA+ID4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiA+ID4gPiBPVEhFUgo+ID4gPiA+IERFQUxJTkdT IElOIFRIRQo+ID4gPiA+ICsgKiBTT0ZUV0FSRS4KPiA+ID4gPiArICovCj4gPiA+ID4gKwo+ID4g PiA+ICsjaWZuZGVmIF9HVlRfUkVHX0gKPiA+ID4gPiArI2RlZmluZSBfR1ZUX1JFR19ICj4gPiA+ ID4gKwo+ID4gPiA+ICsjZGVmaW5lIEdWVF9DRkdfU1BBQ0VfU1rCoMKgwqDCoDI1Ngo+ID4gPiA+ ICsjZGVmaW5lIEdWVF9CQVJfTlVNwqDCoMKgwqDCoMKgwqDCoDQKPiA+ID4gPiArCj4gPiA+ID4g KyNkZWZpbmUgR1ZUX1JFR19DRkdfU1BBQ0VfQkFSMMKgwqDCoMKgMHgxMAo+ID4gPiA+ICsjZGVm aW5lIEdWVF9SRUdfQ0ZHX1NQQUNFX0JBUjHCoMKgwqDCoDB4MTgKPiA+ID4gPiArI2RlZmluZSBH VlRfUkVHX0NGR19TUEFDRV9CQVIywqDCoMKgwqAweDIwCj4gPiA+ID4gKwo+ID4gPiA+ICsjZW5k aWYKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+ ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+ID4gPiA+IGluZGV4IDQ3 MjVlOGQuLmVjYThlNTAgMTAwNjQ0Cj4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kbWEuYwo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMK PiA+ID4gPiBAQCAtOTQzLDYgKzk0MywxMCBAQCBpbnQgaTkxNV9kcml2ZXJfbG9hZChzdHJ1Y3Qg ZHJtX2RldmljZQo+ID4gPiA+ICpkZXYsCj4gPiA+ID4gdW5zaWduZWQgbG9uZyBmbGFncykKPiA+ ID4gPiAKPiA+ID4gPiDCoMKgwqDCoMKgwqBpbnRlbF91bmNvcmVfaW5pdChkZXYpOwo+ID4gPiA+ IAo+ID4gPiA+ICvCoMKgwqDCoGRldl9wcml2LT52Z3B1Lmhvc3RfcHJpdmF0ZV9kYXRhID0KPiA+ ID4gPiBndnRfY3JlYXRlX3BndF9kZXZpY2UoZGV2X3ByaXYpOwo+ID4gPiA+ICvCoMKgwqDCoGlm KGludGVsX2d2dF9ob3N0X2FjdGl2ZShkZXYpKQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgRFJN X0lORk8oIkdWVC1nIGlzIHJ1bm5pbmcgaW4gaG9zdCBtb2RlXG4iKTsKPiA+ID4gPiArCj4gPiA+ ID4gwqDCoMKgwqDCoMKgcmV0ID0gaTkxNV9nZW1fZ3R0X2luaXQoZGV2KTsKPiA+ID4gPiDCoMKg wqDCoMKgwqBpZiAocmV0KQo+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXRfZnJl ZWNzcjsKPiA+ID4gPiBAQCAtMTA2Nyw2ICsxMDcxLDEzIEBAIGludCBpOTE1X2RyaXZlcl9sb2Fk KHN0cnVjdCBkcm1fZGV2aWNlCj4gPiA+ID4gKmRldiwKPiA+ID4gPiB1bnNpZ25lZCBsb25nIGZs YWdzKQo+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXRfcG93ZXJfd2VsbDsKPiA+ ID4gPiDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gCj4gPiA+ID4gK8KgwqDCoMKgaWYgKGludGVsX2d2 dF9ob3N0X2FjdGl2ZShkZXYpKSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqBpZgo+ID4gPiA+ ICghZ3Z0X3Bvc3RfaW5pdF9wZ3RfZGV2aWNlKGRldl9wcml2LT52Z3B1Lmhvc3RfcHJpdmF0ZV9k YXRhKSkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fRVJST1IoImZhaWxl ZCB0byBwb3N0IGluaXQgcGd0IGRldmljZVxuIik7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGdvdG8gb3V0X3Bvd2VyX3dlbGw7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqB9Cj4g PiA+ID4gK8KgwqDCoMKgfQo+ID4gPiA+ICsKPiA+ID4gPiDCoMKgwqDCoMKgwqAvKgo+ID4gPiA+ IMKgwqDCoMKgwqDCoMKgKiBOb3RpZnkgYSB2YWxpZCBzdXJmYWNlIGFmdGVyIG1vZGVzZXR0aW5n LAo+ID4gPiA+IMKgwqDCoMKgwqDCoMKgKiB3aGVuIHJ1bm5pbmcgaW5zaWRlIGEgVk0uCj4gPiA+ ID4gQEAgLTExMTcsNiArMTEyOCwxMCBAQCBvdXRfZ3R0Ogo+ID4gPiA+IMKgwqDCoMKgwqDCoGk5 MTVfZ2xvYmFsX2d0dF9jbGVhbnVwKGRldik7Cj4gPiA+ID4gwqAgb3V0X2ZyZWVjc3I6Cj4gPiA+ ID4gwqDCoMKgwqDCoMKgaW50ZWxfY3NyX3Vjb2RlX2ZpbmkoZGV2X3ByaXYpOwo+ID4gPiA+ICvC oMKgwqDCoGlmIChpbnRlbF9ndnRfaG9zdF9hY3RpdmUoZGV2KSkgewo+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgZ3Z0X2Rlc3Ryb3lfcGd0X2RldmljZShkZXZfcHJpdi0KPiA+ID4gPiA+dmdwdS5o b3N0X3ByaXZhdGVfZGF0YSk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqBkZXZfcHJpdi0+dmdw dS5ob3N0X3ByaXZhdGVfZGF0YSA9IE5VTEw7Cj4gPiA+ID4gK8KgwqDCoMKgfQo+ID4gPiA+IMKg wqDCoMKgwqDCoGludGVsX3VuY29yZV9maW5pKGRldik7Cj4gPiA+ID4gwqDCoMKgwqDCoMKgcGNp X2lvdW5tYXAoZGV2LT5wZGV2LCBkZXZfcHJpdi0+cmVncyk7Cj4gPiA+ID4gwqAgcHV0X2JyaWRn ZToKPiA+ID4gPiBAQCAtMTE2NSw2ICsxMTgwLDEwIEBAIGludCBpOTE1X2RyaXZlcl91bmxvYWQo c3RydWN0IGRybV9kZXZpY2UKPiA+ID4gPiAqZGV2KQo+ID4gPiA+IAo+ID4gPiA+IMKgwqDCoMKg wqDCoGludGVsX21vZGVzZXRfY2xlYW51cChkZXYpOwo+ID4gPiA+IAo+ID4gPiA+ICvCoMKgwqDC oGlmIChpbnRlbF9ndnRfaG9zdF9hY3RpdmUoZGV2KSkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgZ3Z0X2Rlc3Ryb3lfcGd0X2RldmljZShkZXZfcHJpdi0KPiA+ID4gPiA+dmdwdS5ob3N0X3By aXZhdGVfZGF0YSk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqBkZXZfcHJpdi0+dmdwdS5ob3N0 X3ByaXZhdGVfZGF0YSA9IE5VTEw7Cj4gPiA+ID4gK8KgwqDCoMKgfQo+ID4gPiA+IMKgwqDCoMKg wqDCoC8qCj4gPiA+ID4gwqDCoMKgwqDCoMKgwqAqIGZyZWUgdGhlIG1lbW9yeSBzcGFjZSBhbGxv Y2F0ZWQgZm9yIHRoZSBjaGlsZCBkZXZpY2UKPiA+ID4gPiDCoMKgwqDCoMKgwqDCoCogY29uZmln IHBhcnNlZCBmcm9tIFZCVAo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oCj4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4g PiA+ID4gaW5kZXggMDFjYzk4Mi4uZGIzYzc5YiAxMDA2NDQKPiA+ID4gPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaAo+ID4gPiA+IEBAIC0xNjczLDYgKzE2NzMsNyBAQCBzdHJ1Y3QgaTkxNV93 b3JrYXJvdW5kcyB7Cj4gPiA+ID4gCj4gPiA+ID4gwqAgc3RydWN0IGk5MTVfdmlydHVhbF9ncHUg ewo+ID4gPiA+IMKgwqDCoMKgwqDCoGJvb2wgYWN0aXZlOwo+ID4gPiA+ICvCoMKgwqDCoHZvaWQg Kmhvc3RfcHJpdmF0ZV9kYXRhOwo+ID4gPiA+IMKgIH07Cj4gPiA+ID4gCj4gPiA+ID4gwqAgc3Ry dWN0IGk5MTVfZXhlY2J1ZmZlcl9wYXJhbXMgewo+ID4gPiA+IEBAIC0yNzQ3LDYgKzI3NDgsMTEg QEAgc3RhdGljIGlubGluZSBib29sCj4gPiA+ID4gaW50ZWxfdmdwdV9hY3RpdmUoc3RydWN0Cj4g PiA+ID4gZHJtX2RldmljZSAqZGV2KQo+ID4gPiA+IMKgwqDCoMKgwqDCoHJldHVybiB0b19pOTE1 KGRldiktPnZncHUuYWN0aXZlOwo+ID4gPiA+IMKgIH0KPiA+ID4gPiAKPiA+ID4gPiArc3RhdGlj IGlubGluZSBib29sIGludGVsX2d2dF9ob3N0X2FjdGl2ZShzdHJ1Y3QgZHJtX2RldmljZQo+ID4g PiA+ICpkZXYpCj4gPiA+ID4gK3sKPiA+ID4gPiArwqDCoMKgwqByZXR1cm4gdG9faTkxNShkZXYp LT52Z3B1Lmhvc3RfcHJpdmF0ZV9kYXRhID8gdHJ1ZSA6Cj4gPiA+ID4gZmFsc2U7Cj4gPiA+ID4g K30KPiA+ID4gPiArCj4gPiA+ID4gwqAgdm9pZAo+ID4gPiA+IMKgIGk5MTVfZW5hYmxlX3BpcGVz dGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bQo+ID4gPiA+IHBpcGUK PiA+ID4gPiBwaXBlLAo+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUzMiBz dGF0dXNfbWFzayk7Cj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfdmdwdS5oCj4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZncHUuaAo+ID4g PiA+IGluZGV4IDNjODNiNDcuLjk0MjQ5MGEgMTAwNjQ0Cj4gPiA+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV92Z3B1LmgKPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3ZncHUuaAo+ID4gPiA+IEBAIC0xMTMsNSArMTEzLDggQEAgc3RydWN0IHZndF9pZiB7 Cj4gPiA+ID4gwqAgZXh0ZXJuIHZvaWQgaTkxNV9jaGVja192Z3B1KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwo+ID4gPiA+IMKgIGV4dGVybiBpbnQgaW50ZWxfdmd0X2JhbGxvb24oc3RydWN0IGRy bV9kZXZpY2UgKmRldik7Cj4gPiA+ID4gwqAgZXh0ZXJuIHZvaWQgaW50ZWxfdmd0X2RlYmFsbG9v bih2b2lkKTsKPiA+ID4gPiArZXh0ZXJuIHZvaWQgKmd2dF9jcmVhdGVfcGd0X2RldmljZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ID4gPiA+ICpkZXZfcHJpdik7Cj4gPiA+ID4gK2V4dGVybiBi b29sIGd2dF9wb3N0X2luaXRfcGd0X2RldmljZSh2b2lkICpwcml2YXRlX2RhdGEpOwo+ID4gPiA+ ICtleHRlcm4gdm9pZCBndnRfZGVzdHJveV9wZ3RfZGV2aWNlKHZvaWQgKnByaXZhdGVfZGF0YSk7 Cj4gPiA+ID4gCj4gPiA+ID4gwqAgI2VuZGlmIC8qIF9JOTE1X1ZHUFVfSF8gKi8KPiA+ID4gPiBk aWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oCj4gPiA+ID4gYi9pbmNsdWRl L3hlbi9pbnRlcmZhY2UveGVuLmgKPiA+ID4gPiBpbmRleCBkMTMzMTEyLi43OGEzOGYxIDEwMDY0 NAo+ID4gPiA+IC0tLSBhL2luY2x1ZGUveGVuL2ludGVyZmFjZS94ZW4uaAo+ID4gPiA+ICsrKyBi L2luY2x1ZGUveGVuL2ludGVyZmFjZS94ZW4uaAo+ID4gPiA+IEBAIC0yOCw2ICsyOCw3IEBACj4g PiA+ID4gwqAgI2RlZmluZSBfX1hFTl9QVUJMSUNfWEVOX0hfXwo+ID4gPiA+IAo+ID4gPiA+IMKg ICNpbmNsdWRlCj4gPiA+ID4gKyNpbmNsdWRlCj4gPiA+ID4gCj4gPiA+ID4gwqAgLyoKPiA+ID4g PiDCoMKgwqAqIFhFTiAiU1lTVEVNIENBTExTIiAoYS5rLmEuIEhZUEVSQ0FMTFMpLgotLSAKSm9v bmFzIExhaHRpbmVuCk9wZW4gU291cmNlIFRlY2hub2xvZ3kgQ2VudGVyCkludGVsIENvcnBvcmF0 aW9uCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK