From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [PATCH v5 06/35] drm/i915: Start of GPU scheduler Date: Fri, 26 Feb 2016 11:13:30 +0200 Message-ID: <1456478010.7316.1.camel@linux.intel.com> References: <1455805644-6450-1-git-send-email-John.C.Harrison@Intel.com> <1455805644-6450-7-git-send-email-John.C.Harrison@Intel.com> <1455886981.7321.89.camel@linux.intel.com> <56C74AE9.90009@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 614386EA35 for ; Fri, 26 Feb 2016 09:13:28 +0000 (UTC) In-Reply-To: <56C74AE9.90009@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: John Harrison , Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org SGksCgpUaGUgYmVsb3cgYW5zd2VycyBhcmUgcmVhc29uYWJsZS4gU28gdjYgc2hvdWxkIGJlIHRo ZSB2ZXJzaW9uLgoKUmVnYXJkcywgSm9vbmFzCgpPbiBwZSwgMjAxNi0wMi0xOSBhdCAxNzowMyAr MDAwMCwgSm9obiBIYXJyaXNvbiB3cm90ZToKPiBPbiAxOS8wMi8yMDE2IDEzOjAzLCBKb29uYXMg TGFodGluZW4gd3JvdGU6Cj4gPiAKPiA+IEhpLAo+ID4gCj4gPiBOb3cgdGhlIGNvZGUgaXMgaW4g cmV2aWV3YWJsZSBjaHVua3MsIGV4Y2VsbGVudCEKPiA+IAo+ID4gSSd2ZSBhZGRlZCBteSBjb21t ZW50cyBiZWxvdy4gQSBmZXcgcmVwZWF0cyBmcm9tIGxhc3Qgcm91bmQsIGJ1dAo+ID4gbm93Cj4g PiB3aXRoIG1vcmUgcXVlc3Rpb25zIGFib3V0IHRoZSBsb2dpYyBpdHNlbGYuCj4gPiAKPiA+IE9u IHRvLCAyMDE2LTAyLTE4IGF0IDE0OjI2ICswMDAwLCBKb2huLkMuSGFycmlzb25ASW50ZWwuY29t IHdyb3RlOgo+ID4gPiAKPiA+ID4gRnJvbTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29u QEludGVsLmNvbT4KPiA+ID4gCj4gPiA+IEluaXRpYWwgY3JlYXRpb24gb2Ygc2NoZWR1bGVyIHNv dXJjZSBmaWxlcy4gTm90ZSB0aGF0IHRoaXMgcGF0Y2gKPiA+ID4gaW1wbGVtZW50cyBtb3N0IG9m IHRoZSBzY2hlZHVsZXIgZnVuY3Rpb25hbGl0eSBidXQgZG9lcyBub3QgaG9vawo+ID4gPiBpdCBp bgo+ID4gPiB0byB0aGUgZHJpdmVyIHlldC4gSXQgYWxzbyBsZWF2ZXMgdGhlIHNjaGVkdWxlciBj b2RlIGluICdwYXNzCj4gPiA+IHRocm91Z2gnCj4gPiA+IG1vZGUgc28gdGhhdCBldmVuIHdoZW4g aXQgaXMgaG9va2VkIGluLCBpdCB3aWxsIG5vdCBhY3R1YWxseSBkbwo+ID4gPiB2ZXJ5Cj4gPiA+ IG11Y2guIFRoaXMgYWxsb3dzIHRoZSBob29rcyB0byBiZSBhZGRlZCBvbmUgYXQgYSB0aW1lIGlu IGJpdGUKPiA+ID4gc2l6ZQo+ID4gPiBjaHVua3MgYW5kIG9ubHkgd2hlbiB0aGUgc2NoZWR1bGVy IGlzIGZpbmFsbHkgZW5hYmxlZCBhdCB0aGUgZW5kCj4gPiA+IGRvZXMKPiA+ID4gYW55dGhpbmcg c3RhcnQgaGFwcGVuaW5nLgo+ID4gPiAKPiA+ID4gVGhlIGdlbmVyYWwgdGhlb3J5IG9mIG9wZXJh dGlvbiBpcyB0aGF0IHdoZW4gYmF0Y2ggYnVmZmVycyBhcmUKPiA+ID4gc3VibWl0dGVkIHRvIHRo ZSBkcml2ZXIsIHRoZSBleGVjYnVmZmVyKCkgY29kZSBwYWNrYWdlcyB1cCBhbGwKPiA+ID4gdGhl Cj4gPiA+IGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGV4ZWN1dGUgdGhlIGJhdGNoIGJ1ZmZlciBh dCBhIGxhdGVyIHRpbWUuCj4gPiA+IFRoaXMKPiA+ID4gcGFja2FnZSBpcyBnaXZlbiBvdmVyIHRv IHRoZSBzY2hlZHVsZXIgd2hpY2ggYWRkcyBpdCB0byBhbgo+ID4gPiBpbnRlcm5hbAo+ID4gPiBu b2RlIGxpc3QuIFRoZSBzY2hlZHVsZXIgYWxzbyBzY2FucyB0aGUgbGlzdCBvZiBvYmplY3RzCj4g PiA+IGFzc29jaWF0ZWQKPiA+ID4gd2l0aCB0aGUgYmF0Y2ggYnVmZmVyIGFuZCBjb21wYXJlcyB0 aGVtIGFnYWluc3QgdGhlIG9iamVjdHMKPiA+ID4gYWxyZWFkeSBpbgo+ID4gPiB1c2UgYnkgb3Ro ZXIgYnVmZmVycyBpbiB0aGUgbm9kZSBsaXN0LiBJZiBtYXRjaGVzIGFyZSBmb3VuZCB0aGVuCj4g PiA+IHRoZQo+ID4gPiBuZXcgYmF0Y2ggYnVmZmVyIG5vZGUgaXMgbWFya2VkIGFzIGJlaW5nIGRl cGVuZGVudCB1cG9uIHRoZQo+ID4gPiBtYXRjaGluZwo+ID4gPiBub2RlLiBUaGUgc2FtZSBpcyBk b25lIGZvciB0aGUgY29udGV4dCBvYmplY3QuIFRoZSBzY2hlZHVsZXIgYWxzbwo+ID4gPiBidW1w cyB1cCB0aGUgcHJpb3JpdHkgb2Ygc3VjaCBtYXRjaGluZyBub2RlcyBvbiB0aGUgZ3JvdW5kcyB0 aGF0Cj4gPiA+IHRoZQo+ID4gPiBtb3JlIGRlcGVuZGVuY2llcyBhIGdpdmVuIGJhdGNoIGJ1ZmZl ciBoYXMgdGhlIG1vcmUgaW1wb3J0YW50IGl0Cj4gPiA+IGlzCj4gPiA+IGxpa2VseSB0byBiZS4K PiA+ID4gCj4gPiA+IFRoZSBzY2hlZHVsZXIgYWltcyB0byBoYXZlIGEgZ2l2ZW4gKHR1bmVhYmxl KSBudW1iZXIgb2YgYmF0Y2gKPiA+ID4gYnVmZmVycwo+ID4gPiBpbiBmbGlnaHQgb24gdGhlIGhh cmR3YXJlIGF0IGFueSBnaXZlbiB0aW1lLiBJZiBmZXdlciB0aGFuIHRoaXMKPiA+ID4gYXJlCj4g PiA+IGN1cnJlbnRseSBleGVjdXRpbmcgd2hlbiBhIG5ldyBub2RlIGlzIHF1ZXVlZCwgdGhlbiB0 aGUgbm9kZSBpcwo+ID4gPiBwYXNzZWQKPiA+ID4gc3RyYWlnaHQgdGhyb3VnaCB0byB0aGUgc3Vi bWl0IGZ1bmN0aW9uLiBPdGhlcndpc2UgaXQgaXMgc2ltcGx5Cj4gPiA+IGFkZGVkCj4gPiA+IHRv IHRoZSBxdWV1ZSBhbmQgdGhlIGRyaXZlciByZXR1cm5zIGJhY2sgdG8gdXNlciBsYW5kLgo+ID4g PiAKPiA+ID4gVGhlIHNjaGVkdWxlciBpcyBub3RpZmllZCB3aGVuIGVhY2ggYmF0Y2ggYnVmZmVy IGNvbXBsZXRlcyBhbmQKPiA+ID4gdXBkYXRlcwo+ID4gPiBpdHMgaW50ZXJuYWwgdHJhY2tpbmcg YWNjb3JkaW5nbHkuIEF0IHRoZSBlbmQgb2YgdGhlIGNvbXBsZXRpb24KPiA+ID4gaW50ZXJydXB0 IHByb2Nlc3NpbmcsIGlmIGFueSBzY2hlZHVsZXIgdHJhY2tlZCBiYXRjaGVzIHdlcmUKPiA+ID4g cHJvY2Vzc2VkLAo+ID4gPiB0aGUgc2NoZWR1bGVyJ3MgZGVmZXJyZWQgd29ya2VyIHRocmVhZCBp cyB3b2tlbiB1cC4gVGhpcyBjYW4gZG8KPiA+ID4gbW9yZQo+ID4gPiBpbnZvbHZlZCBwcm9jZXNz aW5nIHN1Y2ggYXMgYWN0dWFsbHkgcmVtb3ZpbmcgY29tcGxldGVkIG5vZGVzCj4gPiA+IGZyb20g dGhlCj4gPiA+IHF1ZXVlIGFuZCBmcmVlaW5nIHVwIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3 aXRoIHRoZW0gKGludGVybmFsCj4gPiA+IG1lbW9yeSBhbGxvY2F0aW9ucywgRFJNIG9iamVjdCBy ZWZlcmVuY2VzLCBjb250ZXh0IHJlZmVyZW5jZSwKPiA+ID4gZXRjLikuCj4gPiA+IFRoZSB3b3Jr IGhhbmRsZXIgYWxzbyBjaGVja3MgdGhlIGluIGZsaWdodCBjb3VudCBhbmQgY2FsbHMgdGhlCj4g PiA+IHN1Ym1pc3Npb24gY29kZSBpZiBhIG5ldyBzbG90IGhhcyBhcHBlYXJlZC4KPiA+ID4gCj4g PiA+IFdoZW4gdGhlIHNjaGVkdWxlcidzIHN1Ym1pdCBjb2RlIGlzIGNhbGxlZCwgaXQgc2NhbnMg dGhlIHF1ZXVlZAo+ID4gPiBub2RlCj4gPiA+IGxpc3QgZm9yIHRoZSBoaWdoZXN0IHByaW9yaXR5 IG5vZGUgdGhhdCBoYXMgbm8gdW5tZXQKPiA+ID4gZGVwZW5kZW5jaWVzLgo+ID4gPiBOb3RlIHRo YXQgdGhlIGRlcGVuZGVuY3kgY2FsY3VsYXRpb24gaXMgY29tcGxleCBhcyBpdCBtdXN0IHRha2UK PiA+ID4gaW50ZXItcmluZyBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBwcmVlbXB0aW9ucyBp bnRvIGFjY291bnQuCj4gPiA+IE5vdGUKPiA+ID4gYWxzbyB0aGF0IGluIHRoZSBmdXR1cmUgdGhp cyB3aWxsIGJlIGV4dGVuZGVkIHRvIGluY2x1ZGUgZXh0ZXJuYWwKPiA+ID4gZGVwZW5kZW5jaWVz IHN1Y2ggYXMgdGhlIEFuZHJvaWQgTmF0aXZlIFN5bmMgZmlsZSBkZXNjcmlwdG9ycwo+ID4gPiBh bmQvb3IKPiA+ID4gdGhlIGxpbnV4IGRtYS1idWZmIHN5bmNocm9uaXNhdGlvbiBzY2hlbWUuCj4g PiA+IAo+ID4gPiBJZiBhIHN1aXRhYmxlIG5vZGUgaXMgZm91bmQgdGhlbiBpdCBpcyBzZW50IHRv IGV4ZWNidWZmX2ZpbmFsKCkKPiA+ID4gZm9yCj4gPiA+IHN1Ym1pc3Npb24gdG8gdGhlIGhhcmR3 YXJlLiBUaGUgaW4gZmxpZ2h0IGNvdW50IGlzIHRoZW4gcmUtCj4gPiA+IGNoZWNrZWQgYW5kCj4g PiA+IGEgbmV3IG5vZGUgcG9wcGVkIGZyb20gdGhlIGxpc3QgaWYgYXBwcm9wcmlhdGUuIEFsbCBu b2RlcyB0aGF0Cj4gPiA+IGFyZSBub3QKPiA+ID4gc3VibWl0dGVkIGhhdmUgdGhlaXIgcHJpb3Jp dHkgYnVtcGVkLiBUaGlzIGVuc3VyZXMgdGhhdCBsb3cKPiA+ID4gcHJpb3JpdHkKPiA+ID4gdGFz a3MgZG8gbm90IGdldCBzdGFydmVkIG91dCBieSBidXN5IGhpZ2hlciBwcmlvcml0eSBvbmVzIC0K PiA+ID4gZXZlcnl0aGluZwo+ID4gPiB3aWxsIGV2ZW50dWFsbHkgZ2V0IGl0cyB0dXJuIHRvIHJ1 bi4KPiA+ID4gCj4gPiA+IE5vdGUgdGhhdCB0aGlzIHBhdGNoIGRvZXMgbm90IGltcGxlbWVudCBw cmUtZW1wdGl2ZSBzY2hlZHVsaW5nLgo+ID4gPiBPbmx5Cj4gPiA+IGJhc2ljIHNjaGVkdWxpbmcg YnkgcmUtb3JkZXJpbmcgYmF0Y2ggYnVmZmVyIHN1Ym1pc3Npb24gaXMKPiA+ID4gY3VycmVudGx5 Cj4gPiA+IGltcGxlbWVudGVkLiBQcmUtZW1wdGlvbiBvZiBhY3RpdmVseSBleGVjdXRpbmcgYmF0 Y2ggYnVmZmVycwo+ID4gPiBjb21lcyBpbgo+ID4gPiB0aGUgbmV4dCBwYXRjaCBzZXJpZXMuCj4g PiA+IAo+ID4gPiB2MjogQ2hhbmdlZCBwcmlvcml0eSBsZXZlbHMgdG8gKy8tMTAyMyBkdWUgdG8g ZmVlZGJhY2sgZnJvbSBDaHJpcwo+ID4gPiBXaWxzb24uCj4gPiA+IAo+ID4gPiBSZW1vdmVkIHJl ZHVuZGFudCBpbmRleCBmcm9tIHNjaGVkdWxlciBub2RlLgo+ID4gPiAKPiA+ID4gQ2hhbmdlZCB0 aW1lIHN0YW1wcyB0byB1c2UgamlmZmllcyBpbnN0ZWFkIG9mIHJhdyBtb25vdG9uaWMuIFRoaXMK PiA+ID4gcHJvdmlkZXMgbG93ZXIgcmVzb2x1dGlvbiBidXQgaW1wcm92ZWQgY29tcGF0aWJpbGl0 eSB3aXRoIG90aGVyCj4gPiA+IGk5MTUKPiA+ID4gY29kZS4KPiA+ID4gCj4gPiA+IE1ham9yIHJl LXdyaXRlIG9mIGNvbXBsZXRpb24gdHJhY2tpbmcgY29kZSBkdWUgdG8gc3RydWN0IGZlbmNlCj4g PiA+IGNvbnZlcnNpb24uIFRoZSBzY2hlZHVsZXIgbm8gbG9uZ2VyIGhhcyBpdCdzIG93biBwcml2 YXRlIElSUQo+ID4gPiBoYW5kbGVyCj4gPiA+IGJ1dCBqdXN0IGxldHMgdGhlIGV4aXN0aW5nIHJl cXVlc3QgY29kZSBoYW5kbGUgY29tcGxldGlvbiBldmVudHMuCj4gPiA+IEluc3RlYWQsIHRoZSBz Y2hlZHVsZXIgbm93IGhvb2tzIGludG8gdGhlIHJlcXVlc3Qgbm90aWZ5IGNvZGUgdG8KPiA+ID4g YmUKPiA+ID4gdG9sZCB3aGVuIGEgcmVxdWVzdCBoYXMgY29tcGxldGVkLgo+ID4gPiAKPiA+ID4g UmVkdWNlZCBkcml2ZXIgbXV0ZXggbG9ja2luZyBzY29wZS4gUmVtb3ZhbCBvZiBzY2hlZHVsZXIg bm9kZXMgbm8KPiA+ID4gbG9uZ2VyIGdyYWJzIHRoZSBtdXRleCBsb2NrLgo+ID4gPiAKPiA+ID4g djM6IFJlZmFjdG9yIG9mIGRlcGVuZGVuY3kgZ2VuZXJhdGlvbiB0byBtYWtlIHRoZSBjb2RlIG1v cmUKPiA+ID4gcmVhZGFibGUuCj4gPiA+IEFsc28gYWRkZWQgaW4gcmVhZC1yZWFkIG9wdGltaXNh dGlvbiBzdXBwb3J0IC0gaS5lLiwgZG9uJ3QgdHJlYXQKPiA+ID4gYQo+ID4gPiBzaGFyZWQgcmVh ZC1vbmx5IGJ1ZmZlciBhcyBiZWluZyBhIGRlcGVuZGVuY3kuCj4gPiA+IAo+ID4gPiBBbGxvd2Vk IHRoZSBraWxsaW5nIG9mIHF1ZXVlZCBub2RlcyByYXRoZXIgdGhhbiBvbmx5IGZseWluZyBvbmVz Lgo+ID4gPiAKPiA+ID4gdjQ6IFVwZGF0ZWQgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIGJldHRlciBy ZWZsZWN0IHRoZSBjdXJyZW50Cj4gPiA+IHN0YXRlIG9mCj4gPiA+IHRoZSBjb2RlLiBEb3duZ3Jh ZGVkIHNvbWUgQlVHX09OcyB0byBXQVJOX09Ocy4gVXNlZCB0aGUgY29ycmVjdAo+ID4gPiBhcnJh eQo+ID4gPiBtZW1vcnkgYWxsb2NhdG9yIGZ1bmN0aW9uIChrbWFsbG9jX2FycmF5IGluc3RlYWQg b2Yga21hbGxvYykuCj4gPiA+IENvcnJlY3RlZCB0aGUgZm9ybWF0IG9mIHNvbWUgY29tbWVudHMu IFdyYXBwZWQgc29tZSBsaW5lcwo+ID4gPiBkaWZmZXJlbnRseQo+ID4gPiB0byBrZWVwIHRoZSBz dHlsZSBjaGVja2VyIGhhcHB5Lgo+ID4gPiAKPiA+ID4gRml4ZWQgYSBXQVJOX09OIHdoZW4ga2ls bGluZyBub2Rlcy4gVGhlIGRlcGVuZGVuY3kgcmVtb3ZhbCBjb2RlCj4gPiA+IGNoZWNrcwo+ID4g PiB0aGF0IG5vZGVzIGJlaW5nIGRlc3Ryb3llZCBkbyBub3QgaGF2ZSBhbnkgb3VzdGFuZGluZwo+ ID4gPiBkZXBlbmRlbmNpZXMKPiA+ID4gKHdoaWNoIHdvdWxkIGltcGx5IHRoZXkgc2hvdWxkIG5v dCBoYXZlIGJlZW4gZXhlY3V0ZWQgeWV0KS4gSW4KPiA+ID4gdGhlCj4gPiA+IGNhc2Ugb2Ygbm9k ZXMgYmVpbmcgZGVzdHJveWVkLCBlLmcuIGR1ZSB0byBjb250ZXh0IGJhbm5pbmcsIHRoZW4KPiA+ ID4gdGhpcwo+ID4gPiBtaWdodCB3ZWxsIGJlIHRoZSBjYXNlIC0gdGhleSBoYXZlIG5vdCBiZWVu IGV4ZWN1dGVkIGFuZCBkbwo+ID4gPiBpbmRlZWQKPiA+ID4gaGF2ZSBvdXRzdGFuZGluZyBkZXBl bmRlbmNpZXMuCj4gPiA+IAo+ID4gPiBSZS1pbnN0YXRlZCB0aGUgY29kZSB0byBkaXNibGUgaW50 ZXJydXB0cyB3aGVuIG5vdCBpbiB1c2UuIFRoZQo+ID4gPiB1bmRlcmx5aW5nIHByb2JsZW0gY2F1 c2luZyBicm9rZW4gSVJRIHJlZmVyZW5jZSBjb3VudHMgc2VlbXMgdG8KPiA+ID4gaGF2ZQo+ID4g PiBiZWVuIGZpeGVkIG5vdy4KPiA+ID4gCj4gPiA+IHY1OiBTaHVmZmxlZCB2YXJpb3VzIGZ1bmN0 aW9ucyBhcm91bmQgdG8gcmVtb3ZlIGZvcndhcmQKPiA+ID4gZGVjbGFyYXRpb25zCj4gPiA+IGFz IGFwcGFyZW50bHkgdGhlc2UgYXJlIGZyb3duZWQgdXBvbi4gUmVtb3ZlZCBsb3RzIG9mIHdoaXRl IHNwYWNlCj4gPiA+IGFzCj4gPiA+IGFwcGFyZW50bHkgaGF2aW5nIGVhc3kgdG8gcmVhZCBjb2Rl IGlzIGFsc28gZnJvd25lZCB1cG9uLiBTcGxpdAo+ID4gPiB0aGUKPiA+ID4gZGlyZWN0IHN1Ym1p c3Npb24gc2NoZWR1bGVyIGJ5cGFzcyBjb2RlIG91dCBpbnRvIGEgc2VwYXJhdGUKPiA+ID4gZnVu Y3Rpb24uCj4gPiA+IFNxdWFzaGVkIGRvd24gdGhlIGk5MTVfc2NoZWR1bGVyLmMgc2VjdGlvbnMg b2YgdmFyaW91cyBwYXRjaGVzCj4gPiA+IGludG8KPiA+ID4gdGhpcyBwYXRjaC4gVGh1cyB0aGUg bGF0ZXIgcGF0Y2hlcyBzaW1wbHkgaG9vayBpbiBleGlzdGluZyBjb2RlCj4gPiA+IGludG8KPiA+ ID4gdmFyaW91cyBwYXJ0cyBvZiB0aGUgZHJpdmVyIHJhdGhlciB0aGFuIGFkZGluZyB0aGUgY29k ZSBhcyB3ZWxsLgo+ID4gPiBBZGRlZAo+ID4gPiBkb2N1bWVudGF0aW9uIHRvIHZhcmlvdXMgZnVu Y3Rpb25zLiBSZS13b3JrZWQgdGhlIHN1Ym1pdCBmdW5jdGlvbgo+ID4gPiBpbgo+ID4gPiB0ZXJt cyBvZiBtdXRleCBsb2NraW5nLCBlcnJvciBoYW5kbGluZyBhbmQgZXhpdCBwYXRocy4gU3BsaXQg dGhlCj4gPiA+IGRlbGF5ZWQgd29yayBoYW5kbGVyIGZ1bmN0aW9uIGluIGhhbGYuIE1hZGUgdXNl IG9mIHRoZSBrZXJuZWwKPiA+ID4gJ2NsYW1wJwo+ID4gPiBtYWNyby4gW0pvb25hcyBMYWh0aW5l bl0KPiA+ID4gCj4gPiA+IEFkZGVkIHJ1bnRpbWUgUE0gY2FsbHMgYXMgdGhlc2UgbXVzdCBiZSBk b25lIGF0IHRoZSB0b3AgbGV2ZWwKPiA+ID4gYmVmb3JlCj4gPiA+IGFjcXVpcmluZyB0aGUgZHJp dmVyIG11dGV4IGxvY2suIFtDaHJpcyBXaWxzb25dCj4gPiA+IAo+ID4gPiBSZW1vdmVkIHNvbWUg b2Jzb2xldGUgZGVidWcgY29kZSB0aGF0IGhhZCBiZWVuIGZvcmdvdHRlbiBhYm91dC4KPiA+ID4g Cj4gPiA+IE1vdmVkIG1vcmUgY2xlYW4gdXAgY29kZSBpbnRvIHRoZQo+ID4gPiAnaTkxNV9nZW1f c2NoZWR1bGVyX2NsZWFuX25vZGUoKScKPiA+ID4gZnVuY3Rpb24gcmF0aGVyIHRoYW4gcmVwbGlj YXRpbmcgaXQgaW4gbXV0bGlwbGUgcGxhY2VzLgo+ID4gPiAKPiA+ID4gVXNlZCBsaWdodGVyIHdl aWdodCBzcGlubG9ja3MuCj4gPiA+IAo+ID4gPiBGb3I6IFZJWi0xNTg3Cj4gPiA+IFNpZ25lZC1v ZmYtYnk6IEpvaG4gSGFycmlzb24gPEpvaG4uQy5IYXJyaXNvbkBJbnRlbC5jb20+Cj4gPiA+IENj OiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+Cj4gPiA+ IC0tLQo+ID4gPiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZcKgwqDCoMKgwqDCoMKg wqDCoHzCoMKgwqAxICsKPiA+ID4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaMKg wqDCoMKgwqDCoMKgfMKgwqDCoDYgKwo+ID4gPiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jwqDCoMKgwqDCoMKgwqB8wqDCoMKgNSArCj4gPiA+IMKgIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfc2NoZWR1bGVyLmMgfCA4NzQKPiA+ID4gKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+ID4gPiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5o IHzCoMKgOTUgKysrKwo+ID4gPiDCoCA1IGZpbGVzIGNoYW5nZWQsIDk4MSBpbnNlcnRpb25zKCsp Cj4gPiA+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Nj aGVkdWxlci5jCj4gPiA+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3NjaGVkdWxlci5oCj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUKPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ ID4gPiBpbmRleCAxNTM5OGM1Li43OWNiMzhiIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZQo+ID4gPiBAQCAtMTAsNiArMTAsNyBAQCBjY2ZsYWdzLXkgOj0gLVdlcnJvcgo+ID4gPiDC oCBpOTE1LXkgOj0gaTkxNV9kcnYubyBcCj4gPiA+IMKgwqAJwqDCoGk5MTVfaXJxLm8gXAo+ID4g PiDCoMKgCcKgwqBpOTE1X3BhcmFtcy5vIFwKPiA+ID4gKwnCoMKgaTkxNV9zY2hlZHVsZXIubyBc Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGk5MTVfc3VzcGVuZC5vIFwKPiA+ID4gwqDC oAnCoMKgaTkxNV9zeXNmcy5vIFwKPiA+ID4gwqDCoAnCoMKgaW50ZWxfY3NyLm8gXAo+ID4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gPiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+ID4gaW5kZXggZjQ0ODdiOS4uMDNhZGQxYSAx MDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+IEBAIC0xNzAzLDYgKzE3 MDMsOCBAQCBzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyX3BhcmFtcyB7Cj4gPiA+IMKgwqAJc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0wqDCoMKgwqDCoCpyZXF1ZXN0Owo+ID4gPiDCoCB9Owo+ID4g PiDCoMKgCj4gPiA+ICtzdHJ1Y3QgaTkxNV9zY2hlZHVsZXI7Cj4gPiA+ICsKPiA+ID4gwqAgLyog dXNlZCBpbiBjb21wdXRpbmcgdGhlIG5ldyB3YXRlcm1hcmtzIHN0YXRlICovCj4gPiA+IMKgIHN0 cnVjdCBpbnRlbF93bV9jb25maWcgewo+ID4gPiDCoMKgCXVuc2lnbmVkIGludCBudW1fcGlwZXNf YWN0aXZlOwo+ID4gPiBAQCAtMTk2OCw2ICsxOTcwLDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgewo+ID4gPiDCoMKgCj4gPiA+IMKgwqAJc3RydWN0IGk5MTVfcnVudGltZV9wbSBwbTsKPiA+ ID4gwqDCoAo+ID4gPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyOwo+ID4gPiAr Cj4gPiBJIHRoaW5rIHdlIHNob3VsZCBoYXZlIGk5MTUuZW5hYmxlX3NjaGVkdWxlciBwYXJhbWV0 ZXIgKGp1c3QgbGlrZQo+ID4gaTkxNS5lbmFibGVfZXhlY2xpc3RzKSBhbmQgbWFrZSB0aGlzIGEg ZGF0YSBtZW1iZXIsIG5vdCBwb2ludGVyLgo+ID4gCj4gPiBUaGVuIHdlIGNhbiBnbyBmb3J3YXJk IGFuZCBoYXZlIGk5MTUuZW5hYmxlX3NjaGVkdWxlcl9wcmVlbXB0IGFuZAo+ID4gc28gb24KPiA+ IHRvIGNvbnRyb2wgdGhpbmdzIGF0IGJvb3QgdGltZS4KPiBUaGVyZSBhcmUuIFRoZSBlbmFibGVf c2NoZWR1bGVyIGNvbWVzIGluIGFzIHBhdGNoICMyMS4gSW5jbHVkaW5nIGl0Cj4gZnJvbcKgCj4g dGhlIHN0YXJ0IG1lYW5zIG1vZGlmeWluZyBpOTE1X3BhcmFtcy5bY2hdIGluIHRoaXMgcGF0Y2gg YXMgd2VsbC4KPiBBbmTCoAo+IHRoZW4geW91IGFyZSBnZXR0aW5nIGludG8gb25lIGJpZyBwYXRj aCB0aGF0IGNvbnRhaW5zIGV2ZXJ5dGhpbmcgYW5kCj4gaXPCoAo+IHVucmV2aWV3YWJsZSBkdWUg dG8gaXRzIHNoZWVyIHNpemUuIFRoZSBlbmFibGVfcHJlZW1wdGlvbiBwYXJhbWV0ZXLCoAo+IGNv bWVzIGluIHdpdGggdGhlIHByZS1lbXB0aW9uIGNvZGUuIE5vIHBvaW50IGluIGFkZGluZyB0aGF0 IHVudGlsCj4gdGhlcmXCoAo+IGlzIHNvbWV0aGluZyBmb3IgaXQgdG8gY29udHJvbC4KPiAKPiAK PiA+IAo+ID4gCj4gPiA+IAo+ID4gPiDCoMKgCS8qIEFic3RyYWN0IHRoZSBzdWJtaXNzaW9uIG1l Y2hhbmlzbSAobGVnYWN5IHJpbmdidWZmZXIKPiA+ID4gb3IgZXhlY2xpc3RzKSBhd2F5ICovCj4g PiA+IMKgwqAJc3RydWN0IHsKPiA+ID4gwqDCoAkJaW50ICgqZXhlY2J1Zl9zdWJtaXQpKHN0cnVj dAo+ID4gPiBpOTE1X2V4ZWNidWZmZXJfcGFyYW1zICpwYXJhbXMsCj4gPiA+IEBAIC0yMjkwLDYg KzIyOTQsOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qgewo+ID4gPiDCoMKgCS8qKiBw cm9jZXNzIGlkZW50aWZpZXIgc3VibWl0dGluZyB0aGlzIHJlcXVlc3QgKi8KPiA+ID4gwqDCoAlz dHJ1Y3QgcGlkICpwaWQ7Cj4gPiA+IMKgwqAKPiA+ID4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJf cXVldWVfZW50cnkJKnNjaGVkdWxlcl9xZTsKPiA+ID4gKwo+ID4gRnVubnkgd2hpdGVzcGFjZS4K PiA+IAo+ID4gPiAKPiA+ID4gwqDCoAkvKioKPiA+ID4gwqDCoAnCoCogVGhlIEVMU1Agb25seSBh Y2NlcHRzIHR3byBlbGVtZW50cyBhdCBhIHRpbWUsIHNvIHdlCj4gPiA+IHF1ZXVlCj4gPiA+IMKg wqAJwqAqIGNvbnRleHQvdGFpbCBwYWlycyBvbiBhIGdpdmVuIHF1ZXVlIChyaW5nLQo+ID4gPiA+ ZXhlY2xpc3RfcXVldWUpIHVudGlsIHRoZQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKPiA+ID4gaW5kZXggZGZlNDNlYS4uN2Q5YWEyNCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbS5jCj4gPiA+IEBAIC0zMiw2ICszMiw3IEBACj4gPiA+IMKgICNpbmNsdWRlICJp OTE1X3ZncHUuaCIKPiA+ID4gwqAgI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKPiA+ID4gwqAgI2lu Y2x1ZGUgImludGVsX2Rydi5oIgo+ID4gPiArI2luY2x1ZGUgImk5MTVfc2NoZWR1bGVyLmgiCj4g PiA+IMKgICNpbmNsdWRlCj4gPiA+IMKgICNpbmNsdWRlCj4gPiA+IMKgICNpbmNsdWRlCj4gPiA+ IEBAIC01MzE1LDYgKzUzMTYsMTAgQEAgaW50IGk5MTVfZ2VtX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiA+ID4gwqDCoAnCoCovCj4gPiA+IMKgwqAJaW50ZWxfdW5jb3JlX2ZvcmNld2Fr ZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOwo+ID4gPiDCoMKgCj4gPiA+ICsJcmV0ID0g aTkxNV9zY2hlZHVsZXJfaW5pdChkZXYpOwo+ID4gPiArCWlmIChyZXQpCj4gPiA+ICsJCWdvdG8g b3V0X3VubG9jazsKPiA+ID4gKwo+ID4gPiDCoMKgCXJldCA9IGk5MTVfZ2VtX2luaXRfdXNlcnB0 cihkZXYpOwo+ID4gPiDCoMKgCWlmIChyZXQpCj4gPiA+IMKgwqAJCWdvdG8gb3V0X3VubG9jazsK PiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMK PiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCj4gPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gPiA+IGluZGV4IDAwMDAwMDAuLmZjMjNlZTcKPiA+ID4gLS0tIC9k ZXYvbnVsbAo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5j Cj4gPiA+IEBAIC0wLDAgKzEsODc0IEBACj4gPiA+ICsvKgo+ID4gPiArICogQ29weXJpZ2h0IChj KSAyMDE0IEludGVsIENvcnBvcmF0aW9uCj4gPiA+ICsgKgo+ID4gPiArICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPiA+ID4gb2J0 YWluaW5nIGEKPiA+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPiA+ID4gIlNvZnR3YXJlIiksCj4gPiA+ICsgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKPiA+ID4g d2l0aG91dCBsaW1pdGF0aW9uCj4gPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwKPiA+ID4gc3VibGljZW5zZSwKPiA+ID4g KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0bwo+ID4gPiB3aG9tIHRoZQo+ID4gPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKPiA+ID4gY29uZGl0aW9uczoKPiA+ID4g KyAqCj4gPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZQo+ID4gPiAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPiA+ICsgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwKPiA+ID4gcG9y dGlvbnMgb2YgdGhlCj4gPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ID4gKyAqCj4gPiA+ICsgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKPiA+ ID4gS0lORCwgRVhQUkVTUyBPUgo+ID4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+ID4gPiBNRVJDSEFOVEFCSUxJVFksCj4gPiA+ ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LsKgwqBJTiBOTwo+ID4gPiBFVkVOVCBTSEFMTAo+ID4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCj4gPiA+IERBTUFHRVMgT1Ig T1RIRVIKPiA+ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IKPiA+ID4gT1RIRVJXSVNFLCBBUklTSU5HCj4gPiA+ICsgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4gPiA+ IE9USEVSIERFQUxJTkdTCj4gPiA+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gPiA+ICsgKgo+ID4g PiArICovCj4gPiA+ICsKPiA+ID4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ID4gPiArI2luY2x1 ZGUgImludGVsX2Rydi5oIgo+ID4gPiArI2luY2x1ZGUgImk5MTVfc2NoZWR1bGVyLmgiCj4gPiA+ ICsKPiA+ID4gKy8qKgo+ID4gPiArICogaTkxNV9zY2hlZHVsZXJfaXNfZW5hYmxlZCAtIFJldHVy bnMgdHJ1ZSBpZiB0aGUgc2NoZWR1bGVyIGlzCj4gPiA+IGVuYWJsZWQuCj4gPiA+ICsgKiBAZGV2 OiBEUk0gZGV2aWNlCj4gPiA+ICsgKi8KPiA+ID4gK2Jvb2wgaTkxNV9zY2hlZHVsZXJfaXNfZW5h YmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPiA+ICsKPiA+ID4g KwlyZXR1cm4gZGV2X3ByaXYtPnNjaGVkdWxlciAhPSBOVUxMOwo+ID4gPiArfQo+ID4gaTkxNS5l bmFibGVfc2NoZWR1bGVyIHdvdWxkIGJlIHVzZWQgaW5zdGVhZC4KPiBJdCBpcyB3aGVuIGl0IGFy cml2ZXMuCj4gCj4gPiAKPiA+IAo+ID4gPiAKPiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ICsgKiBp OTE1X3NjaGVkdWxlcl9pbml0IC0gSW5pdGlhbGlzZSB0aGUgc2NoZWR1bGVyLgo+ID4gPiArICog QGRldjogRFJNIGRldmljZQo+ID4gPiArICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgLUVO T01FTSBpZiBtZW1vcnkgYWxsb2NhdGlvbnMKPiA+ID4gZmFpbC4KPiA+ID4gKyAqLwo+ID4gPiAr aW50IGk5MTVfc2NoZWR1bGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ID4gK3sK PiA+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2 YXRlOwo+ID4gPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyID0gZGV2X3ByaXYt PnNjaGVkdWxlcjsKPiA+ID4gKwlpbnQgcjsKPiA+ID4gKwo+ID4gVGhpcyBwcm90ZWN0aW9uIC0t Pgo+ID4gCj4gPiA+IAo+ID4gPiArCWlmIChzY2hlZHVsZXIpCj4gPiA+ICsJCXJldHVybiAwOwo+ ID4gPiArCj4gPiA+ICsJc2NoZWR1bGVyID0ga3phbGxvYyhzaXplb2YoKnNjaGVkdWxlciksIEdG UF9LRVJORUwpOwo+ID4gPiArCWlmICghc2NoZWR1bGVyKQo+ID4gPiArCQlyZXR1cm4gLUVOT01F TTsKPiA+ID4gKwo+ID4gSXMgbm90IG5lZWRlZCBpZiB3ZSBoYXZlIGRhdGEgbWVtYmVyIGFuZCBp OTE1LmVuYWJsZV9zY2hlZHVsZXIuCj4gTWFraW5nIHRoZSBzY2hlZHVsZXIgc3RydWN0dXJlIGEg b2JqZWN0IHJhdGhlciB0aGFuIGEgcG9pbnRlcgo+IGJhc2ljYWxsecKgCj4gbWVhbnMgbW92aW5n IHRoZSB3aG9sZSBvZiBpOTE1X3NjaGVkdWxlci5oIGludG8gaTkxNV9kcnYuaC4gVGhlcmUgaXMK PiB0b2/CoAo+IG11Y2ggaW50ZXJjb25uZWN0ZWRuZXNzIGJldHdlZW4gdGhlIHZhcmlvdXMgc3Ry dWN0dXJlcy4gSSB3b3VsZCBzYXkKPiB0aGF0wqAKPiBrZWVwaW5nIHRoZSBjb2RlIG5pY2VseSBw YXJ0aXRpb25lZCBhbmQgcmVhZGFibGUgaXMgd29ydGggdGhlIG9uZcKgCj4gZHluYW1pYyBhbGxv Y2F0aW9uIGF0IGRyaXZlciBsb2FkIHRpbWUuCj4gCj4gPiAKPiA+IAo+ID4gPiAKPiA+ID4gKwlz cGluX2xvY2tfaW5pdCgmc2NoZWR1bGVyLT5sb2NrKTsKPiA+ID4gKwo+ID4gPiArCWZvciAociA9 IDA7IHIgPCBJOTE1X05VTV9SSU5HUzsgcisrKQo+ID4gPiArCQlJTklUX0xJU1RfSEVBRCgmc2No ZWR1bGVyLT5ub2RlX3F1ZXVlW3JdKTsKPiA+ID4gKwo+ID4gPiArCS8qIERlZmF1bHQgdHVuaW5n IHZhbHVlczogKi8KPiA+ID4gKwlzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX21pbsKgwqDCoMKg wqA9IC0xMDIzOwo+ID4gPiArCXNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfbWF4wqDCoMKgwqDC oD0gMTAyMzsKPiA+ID4gKwlzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX2J1bXDCoMKgwqDCoD0g NTA7Cj4gPiA+ICsJc2NoZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9wcmVlbXB0ID0gOTAwOwo+ID4g PiArCXNjaGVkdWxlci0+bWluX2ZseWluZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSAyOwo+ ID4gPiArCj4gPiA+ICsJZGV2X3ByaXYtPnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKPiA+ID4gKwo+ ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsvKgo+ID4gPiArICogQWRk IGEgcG9wcGVkIG5vZGUgYmFjayBpbiB0byB0aGUgcXVldWUuIEZvciBleGFtcGxlLCBiZWNhdXNl Cj4gPiA+IHRoZSByaW5nIHdhcwo+ID4gPiArICogaHVuZyB3aGVuIGV4ZWNmaW5hbCgpIHdhcyBj YWxsZWQgYW5kIHRodXMgdGhlIHJpbmcgc3VibWlzc2lvbgo+ID4gPiBuZWVkcyB0byBiZQo+ID4g PiArICogcmV0cmllZCBsYXRlci4KPiA+ID4gKyAqLwo+ID4gPiArc3RhdGljIHZvaWQgaTkxNV9z Y2hlZHVsZXJfbm9kZV9yZXF1ZXVlKHN0cnVjdAo+ID4gPiBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9l bnRyeSAqbm9kZSkKPiA+ID4gK3sKPiA+ID4gKwlXQVJOX09OKCFub2RlKTsKPiA+IFJhdGhlciBy ZW1vdmUgdGhpcyBjb21wbGV0ZWx5IGFzIGl0IGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLCBvciB1 c2UKPiA+IEJVR19PTiBiZWNhdXNlIG5leHQgbGluZSB3aWxsIHN0cmFpZ2h0IGxlYWQgdG8gT09Q UyBhZnRlciB3YXJuaW5nLgo+ID4gSSdsbAo+ID4gcGFzcyBtZW50aW9uaW5nIHJlc3Qgb2YgdGhl IG9idmlvdXMgV0FSTl9PTiB2cyBCVUdfT04ncy4KPiBZZWFoLCBtb3N0IG9mIHRoZSBXQVJOL0JV R19PTnMgYXJlIHByb2JhYmx5IHVubmVjZXNzYXJ5IG5vdy4gVGhleQo+IHdlcmXCoAo+IHNjYXR0 ZXJlZCBsaWJlcmFsbHkgYXJvdW5kIGR1cmluZyBpbml0aWFsIGRldmVsb3BtZW50IHdoZW4gc3Ry YW5nZQo+IGFuZMKgCj4gdW5leHBlY3RlZCB0aGluZ3MgY291bGQgaGFwcGVuLiBOb3cgdGhlIHRo ZSBjb2RlIHBhdGhzIGFyZSBwcmV0dHkKPiB3ZWxswqAKPiBlc3RhYmxpc2hlZCB0aGV5IGFyZW4n dCByZWFsbHkgbXVjaCB1c2UuIEknbGwgcmVkdWNlIHRoZW0gZG93biB0bwo+IGp1c3TCoAo+IHRo ZSBvbmVzIHRoYXQgc3RpbGwgbWFrZSBzZW5zZS4KPiAKPiAKPiA+IAo+ID4gCj4gPiA+IAo+ID4g PiArCVdBUk5fT04oIUk5MTVfU1FTX0lTX0ZMWUlORyhub2RlKSk7Cj4gPiA+ICsKPiA+ID4gKwkv KiBTZXFubyB3aWxsIGJlIHJlYXNzaWduZWQgb24gcmVsYXVuY2ggKi8KPiA+ID4gKwlub2RlLT5w YXJhbXMucmVxdWVzdC0+c2Vxbm8gPSAwOwo+ID4gPiArCW5vZGUtPnN0YXR1cyA9IGk5MTVfc3Fz X3F1ZXVlZDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArLyoKPiA+ID4gKyAqIEdpdmUgdXAgb24g YSBub2RlIGNvbXBsZXRlbHkuIEZvciBleGFtcGxlLCBiZWNhdXNlIGl0IGlzCj4gPiA+IGNhdXNp bmcgdGhlCj4gPiA+ICsgKiByaW5nIHRvIGhhbmcgb3IgaXMgdXNpbmcgc29tZSByZXNvdXJjZSB0 aGF0IG5vIGxvbmdlciBleGlzdHMuCj4gPiA+ICsgKi8KPiA+ID4gK3N0YXRpYyB2b2lkIGk5MTVf c2NoZWR1bGVyX25vZGVfa2lsbChzdHJ1Y3QKPiA+ID4gaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50 cnkgKm5vZGUpCj4gPiA+ICt7Cj4gPiA+ICsJV0FSTl9PTighbm9kZSk7Cj4gPiA+ICsJV0FSTl9P TihJOTE1X1NRU19JU19DT01QTEVURShub2RlKSk7Cj4gPiA+ICsKPiA+ID4gKwlub2RlLT5zdGF0 dXMgPSBpOTE1X3Nxc19kZWFkOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsvKiBNYXJrIGEgbm9k ZSBhcyBpbiBmbGlnaHQgb24gdGhlIGhhcmR3YXJlLiAqLwo+ID4gQXMgZm9yIGRvY3VtZW50YXRp b24sIGZyb20gYmVsb3csIEkgb25seSBhc3N1bWUgc2NoZWR1bGVyIGxvY2sgbXVzdAo+ID4gYmUK PiA+IGhlbGQgYW5kIG5vZGUncyBjYW4gYmUgb25seSBtYW5pcHVsYXRlZCB3aGVuIHNjaGVkdWxl ciBsb2NrIGlzCj4gPiBoZWxkPwo+ID4gSXQncyBnb29kIHRvIGFkZCBhIGNvbW1lbnQgZGVzY3Jp YmluZyB0aGUgZXhwZWN0ZWQgbG9ja2luZy4gT3IKPiA+IG1heWJlCj4gPiBhZGQgYXNzZXJ0X3Nj aGVkdWxlcl9sb2NrX2hlbGQoKSBoZWxwZXIgYW5kIHNwcmlua2xlIGl0IGFyb3VuZCB0aGUKPiA+ IGZ1bmN0aW9ucyBzaW1pbGFyIHRvIGFzc2VydF9ycG1fd2FrZWxvY2tfaGVsZCgpLCB3aGljaCBp cyBzZWxmLQo+ID4gZG9jdW1lbnRpbmc/Cj4gPiAKPiA+ID4gCj4gPiA+ICtzdGF0aWMgaW50IGk5 MTVfc2NoZWR1bGVyX25vZGVfZmx5KHN0cnVjdAo+ID4gPiBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9l bnRyeSAqbm9kZSkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBub2RlLT5wYXJhbXMuZGV2LQo+ID4gPiA+ZGV2X3ByaXZhdGU7Cj4gPiBJZiBub2Rl IGlzIE5VTEwsIHRoaXMgd291bGQgYWxyZWFkeSBPT1BTLCBJIGRvIG5vdCB0aGluayBpdCdzCj4g PiB1bnJlYXNvbmFibGUgdG8gZXhwZWN0IG5vZGUgbm90IHRvIGJlIE5VTEwuIFRoZSBiZWxvdyBX QVJOX09OIGNoZWNrCj4gPiBpcwo+ID4gbmV2ZXIgcmVhY2hlZC4KPiA+IAo+ID4gPiAKPiA+ID4g KwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVsZXI7 Cj4gPiA+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZzsKPiA+ID4gKwo+ID4gPiArCVdB Uk5fT04oIXNjaGVkdWxlcik7Cj4gPiA+ICsJV0FSTl9PTighbm9kZSk7Cj4gPiA+ICsJV0FSTl9P Tihub2RlLT5zdGF0dXMgIT0gaTkxNV9zcXNfcG9wcGVkKTsKPiA+ID4gKwo+ID4gPiArCXJpbmcg PSBub2RlLT5wYXJhbXMucmluZzsKPiA+ID4gKwo+ID4gVGhpcyBhbmQgc2ltaWxhciBhc3NpZ25t ZW50cyBjYW4gYmUgc3F1YXNoZWQgdG8gZGVjbGFyYXRpb24gbGluZSwKPiA+IGFzCj4gPiB0aGlz IGlzIGJhc2ljYWxseSBhbiBhbGlhcy4KPiA+IAo+ID4gPiAKPiA+ID4gKwkvKgo+ID4gPiArCcKg KiBBZGQgdGhlIG5vZGUgKHdoaWNoIHNob3VsZCBjdXJyZW50bHkgYmUgaW4gc3RhdGUKPiA+ID4g cG9wcGVkKSB0byB0aGUKPiA+ID4gKwnCoCogZnJvbnQgb2YgdGhlIHF1ZXVlLiBUaGlzIGVuc3Vy ZSB0aGF0IGZseWluZyBub2RlcyBhcmUKPiA+ID4gYWx3YXlzIGhlbGQKPiA+ID4gKwnCoCogaW4g aGFyZHdhcmUgc3VibWlzc2lvbiBvcmRlci4KPiA+ID4gKwnCoCovCj4gPiA+ICsJbGlzdF9hZGQo Jm5vZGUtPmxpbmssICZzY2hlZHVsZXItPm5vZGVfcXVldWVbcmluZy0+aWRdKTsKPiA+ID4gKwo+ ID4gPiArCW5vZGUtPnN0YXR1cyA9IGk5MTVfc3FzX2ZseWluZzsKPiA+ID4gKwo+ID4gPiArCWlm ICghKHNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+aWRdICYKPiA+ID4gaTkxNV9zZl9pbnRlcnJ1cHRz X2VuYWJsZWQpKSB7Cj4gPiA+ICsJCWJvb2wgc3VjY2VzcyA9IHRydWU7Cj4gPiA+ICsKPiA+ID4g KwkJc3VjY2VzcyA9IHJpbmctPmlycV9nZXQocmluZyk7Cj4gPiA+ICsJCWlmIChzdWNjZXNzKQo+ ID4gPiArCQkJc2NoZWR1bGVyLT5mbGFnc1tyaW5nLT5pZF0gfD0KPiA+ID4gaTkxNV9zZl9pbnRl cnJ1cHRzX2VuYWJsZWQ7Cj4gPiA+ICsJCWVsc2UKPiA+ID4gKwkJCXJldHVybiAtRUlOVkFMOwo+ ID4gU2hvdWxkbid0IHRoZSBub2RlIGJlIGNsZWFuZWQgdXAgZnJvbSBub2RlX3F1ZXVlIGluIGNh c2Ugb2YgYW4KPiA+IGVycm9yPwo+IE5vdCByZWFsbHkuIFRoZSBiYXRjaCBidWZmZXIgd2lsbCBz dGlsbCBiZSBleGVjdXRlZCByZWdhcmRsZXNzIG9mwqAKPiB3aGV0aGVyIGludGVycnVwdHMgY291 bGQgYmUgZW5hYmxlZCBvciBub3QuIFRoZSByZXR1cm4gY29kZSBpcwo+IGFjdHVhbGx5wqAKPiBp Z25vcmVkIHNvIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBhIHZvaWQgZnVuY3Rpb24sIEkgZ3Vlc3Mu IFdpdGhvdXTCoAo+IGludGVycnVwdHMgdGhlbiBjb21wbGV0aW9uIG1pZ2h0IHRha2UgYSB3aGls ZSB0byBiZSBub3RpY2VkIGJ1dAo+IHN0dWZmwqAKPiBzaG91bGQgc3RpbGwgYmFzaWNhbGx5IHdv cmsuCj4gCj4gCj4gPiAKPiA+IAo+ID4gQWxzbywgSSB0aGluayBhYm92ZSBjb3VsZCBiZSB3cml0 dGVuIG11Y2ggbW9yZSBjb21wYWN0IGZvcm0KPiA+IChiZWNhdXNlIGl0Cj4gPiBsb29rcyBsaWtl IHNvbWV0aGluZyB3aGVyZSBtb3JlIGxvZ2ljIHdpbGwgYmUgYWRkZWQgbGF0ZXIpLiBJdAo+ID4g bWFrZXMgaXQKPiA+IGVhc2llciB0byB3cml0ZSBhbmQgdmlzdWFsaXplIHRoZSBlcnJvciBwYXRo cyB3aGVuIHJlYWRpbmcgaWYgdGhlcmUKPiA+IGFyZQo+ID4gbm8gbmVzdGVkIGlmJ3MuCj4gPiAK PiA+IEkgd29uJ3QgbWVudGlvbiBhYm91dCB0aGUgZXJyb3IgcGF0aHMgb2YgZnVuY3Rpb25zIGJl bG93LCBJIGV4cGVjdAo+ID4gdGhlCj4gPiBmb2xsb3dpbmcgZ3VpZGxpbmUgdG8gYmUgYWRoZXJl ZDsKPiA+IAo+ID4gCWlmIChzY2hlZHVsZXItPmZsYWdzW3JpbmctPmlkXSAmIEk5MTVfU0ZfSU5U X0VOQUJMRUQpCj4gPiAJCWdvdG8gb3V0Owo+ID4gCj4gPiAJaWYgKCFyaW5nLT5pcnFfZ2V0KHJp bmcpKQo+ID4gCQlnb3RvIGVycl9pcnE7Cj4gPiAKPiA+IAlpZiAoIS4uLikKPiA+IAkJZ290byBl cnJfZm9vOwo+ID4gCj4gPiAJc2NoZWR1bGVyLT5mbGFnc1tyaW5nLT5pZF0gfD0gSTkxNV9TRl9J TlRfRU5BQkxFRDsKPiA+IG91dDoKPiA+IAlyZXR1cm4gMDsKPiA+IGVycl9mb286Cj4gPiAJZm9v YmFyKCk7Cj4gPiBlcnJfaXJxOgo+ID4gCWxpc3RfcmVtb3ZlKCkKPiA+IAlyZXR1cm4gLUVJTlZB TDsKPiA+IAo+ID4gPiAKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4g K30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHVpbnQzMl90IGk5MTVfc2NoZWR1bGVyX2NvdW50X2Zs eWluZyhzdHJ1Y3QKPiA+ID4gaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciwKPiA+ID4gKwkJCQkJ wqDCoMKgwqBzdHJ1Y3QKPiA+ID4gaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ID4gPiArewo+ID4g PiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZTsKPiA+ID4gKwl1aW50 MzJfdCBmbHlpbmcgPSAwOwo+ID4gPiArCj4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShub2Rl LCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JpbmctCj4gPiA+ID5pZF0sIGxpbmspCj4gPiArMSBm b3IgdGhlIGZvcl9lYWNoX3NjaGVkdWxlcl9ub2RlKC4uLikKPiA+IAo+ID4gPiAKPiA+ID4gKwkJ aWYgKEk5MTVfU1FTX0lTX0ZMWUlORyhub2RlKSkKPiA+ID4gKwkJCWZseWluZysrOwo+ID4gPiAr Cj4gPiA+ICsJcmV0dXJuIGZseWluZzsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZv aWQgaTkxNV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVtcF9jbGVhcihzdHJ1Y3QKPiA+ID4gaTkxNV9z Y2hlZHVsZXIgKnNjaGVkdWxlcikKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVs ZXJfcXVldWVfZW50cnkgKm5vZGU7Cj4gPiA+ICsJaW50IGk7Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ ID4gPiArCcKgKiBFbnN1cmUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGRvbid0IGNhdXNlIHByb2Js ZW1zIGFuZAo+ID4gPiB0aGF0IGEgYnVtcAo+ID4gPiArCcKgKiBieSBvYmplY3QgdXNhZ2Ugb25s eSBidW1wcyBlYWNoIHVzaW5nIGJ1ZmZlciBvbmNlOgo+ID4gPiArCcKgKi8KPiA+ID4gKwlmb3Ig KGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykgewo+ID4gPiArCQlsaXN0X2Zvcl9lYWNo X2VudHJ5KG5vZGUsICZzY2hlZHVsZXItCj4gPiA+ID5ub2RlX3F1ZXVlW2ldLCBsaW5rKQo+ID4g PiArCQkJbm9kZS0+YnVtcGVkID0gZmFsc2U7Cj4gPiA+ICsJfQo+ID4gPiArfQo+ID4gPiArCj4g PiA+ICtzdGF0aWMgaW50IGk5MTVfc2NoZWR1bGVyX3ByaW9yaXR5X2J1bXAoc3RydWN0IGk5MTVf c2NoZWR1bGVyCj4gPiA+ICpzY2hlZHVsZXIsCj4gPiA+ICsJCQkJc3RydWN0Cj4gPiA+IGk5MTVf c2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICp0YXJnZXQsCj4gPiBJcyB0aGVyZSBzcGVjaWZpYyByZWFz b24gd2h5IHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSBhcmUKPiA+IG5vdAo+ID4g cmVmZXJyZWQgdG8ganVzdCBhcyAibm9kZSIgYnV0ICJxZSIgYW5kIGhlcmUgc29tZXRoaW5nIGVs c2UsIGRvCj4gPiAibm9kZSIKPiA+IGFuZCAicWUiIGhhdmUgYSBzcGVjaWFsIHNlbWFudGljIG1l YW5pbmc/Cj4gTm90IHN1cmUgd2hhdCB5b3UgbWVhbi4gVGhlIHVzZSBvZiAnbm9kZScgaXMgYmVj YXVzZSBhbG1vc3QKPiBldmVyeXRoaW5nwqAKPiBhbiBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRy eSBvYmplY3QgaXMgYmVpbmcgdXNlZCBpdCBpcyBhcyBhIG5vZGUgaW4KPiBhwqAKPiBsaXN0IHRo YXQgaXMgYmVpbmcgaXRlcmF0ZWQgb3Zlci4gVGhlIG9ubHkgJ3FlJyB2YXJpYWJsZSBpcyBpbsKg Cj4gJ2k5MTVfc2NoZWR1bGVyX3F1ZXVlX2V4ZWNidWZmZXJbX2J5cGFzc10nIGFuZCB0aGVyZSBp dCBpcyBiZWNhdXNlCj4gdGhlwqAKPiBxZSBpcyBiZWluZyBwYXNzZWQgaW4gZnJvbSBvdXRzaWRl IGFuZCBpcyBjb3BpZWQgdG8gYSBsb2NhbCAnbm9kZScKPiB0aGF0wqAKPiBpcyB0aGVuIGFkZGVk IHRvIHRoZSBsaXN0LiBJIHRoaW5rIHRoZSB1c2Ugb2YgJ3RhcmdldCcgaGVyZSBpcwo+IGxhcmdl bHnCoAo+IGhpc3RvcmljYWwuIFRoZSBzdWJzZXF1ZW50IGFycmF5IHNlYXJjaCB3YXMgb3JpZ2lu YWxseSBhIGxpc3Qgc2VhcmNoCj4gYW5kwqAKPiBoZW5jZSBoYWQgYSAnbm9kZScgdGhhdCB3YXMg dXNlZCBhcyB0aGUgaXRlcmF0b3IuIFRodXMgdGhlIHFlIHBhc3NlZAo+IGluwqAKPiB3YXMgY2Fs bGVkIHNvbWV0aGluZyBlbHNlIHRvIGF2b2lkIGNvbmZsaWN0cyBhbmQgdGFyZ2V0IHNlZW1lZAo+ IGFwcHJvcHJpYXRlLgo+IAo+ID4gCj4gPiA+IAo+ID4gPiArCQkJCXVpbnQzMl90IGJ1bXApCj4g PiA+ICt7Cj4gPiA+ICsJdWludDMyX3QgbmV3X3ByaW9yaXR5Owo+ID4gPiArCWludCBpLCBjb3Vu dDsKPiA+ID4gKwo+ID4gPiArCWlmICh0YXJnZXQtPnByaW9yaXR5ID49IHNjaGVkdWxlci0+cHJp b3JpdHlfbGV2ZWxfbWF4KQo+ID4gPiArCQlyZXR1cm4gMTsKPiA+IFNvIGlmIG9uZSBub2RlIHJl YWNoZXMgbWF4aW11bSBwcmlvcml0eSB0aGUgZGVwZW5kZW5jaWVzIGFyZQo+ID4gZXhwZWN0ZWQK PiA+IHRvIGJlIG1heGVkIG91dCBhbHJlYWR5Pwo+IFllcy4gRGVwZW5kZW5jaWVzIHNob3VsZCBh bHdheXMgYmUgb2YgZXF1YWwgb3IgaGlnaGVyIHByaW9yaXR5IHRvCj4gdGhlwqAKPiBkZXBlbmRl ZS4gV2hlbiBhIG5ldyBkZXBlbmRlbmN5IGlzIGNyZWF0ZWQsIHRoZSBwcmlvcml0eSBvZiB0aGUK PiBkZXBlbmRlZcKgCj4gaXMgYWRkZWQgb24gdG8gZW5zdXJlIHRoYXQgc29tZXRoaW5nIG9mIGhp Z2ggcHJpb3JpdHkgY2FuIG5ldmVyIGJlCj4gc3R1Y2vCoAo+IHdhaXRpbmcgb24gc29tZXRoaW5n IG9mIGxvdyBwcmlvcml0eS4gQWxzbywgaXQgbWVhbnMgdGhhdCBhIGJhdGNoCj4gYnVmZmVywqAK PiB0aGF0IGxvdHMgb2Ygb3RoZXIgYnVmZmVycyBhcmUgd2FpdGluZyBvbiB3aWxsIGJlIGJ1bXBl ZCB0byBoaWdoZXIKPiBhbmTCoAo+IGhpZ2hlciBwcmlvcml0eSB0aGUgbW9yZSB3YWl0ZXJzIHRo ZXJlIGFyZSBhbmQgdGh1cyBpcyBtb3JlIGxpa2VseSB0bwo+IGJlwqAKPiBleGVjdXRlZCBzb29u ZXIgYW5kIGZyZWUgdGhlbSBhbGwgdXAuCj4gCj4gCj4gPiAKPiA+ID4gCj4gPiA+ICsKPiA+ID4g KwlpZiAodGFyZ2V0LT5idW1wZWQpCj4gPiA+ICsJCXJldHVybiAwOwo+ID4gPiArCj4gPiA+ICsJ bmV3X3ByaW9yaXR5ID0gdGFyZ2V0LT5wcmlvcml0eSArIGJ1bXA7Cj4gPiA+ICsJaWYgKChuZXdf cHJpb3JpdHkgPD0gdGFyZ2V0LT5wcmlvcml0eSkgfHwKPiA+ID4gKwnCoMKgwqDCoChuZXdfcHJp b3JpdHkgPiBzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX21heCkpCj4gPiA+ICsJCXRhcmdldC0+ cHJpb3JpdHkgPSBzY2hlZHVsZXItCj4gPiA+ID5wcmlvcml0eV9sZXZlbF9tYXg7Cj4gPiA+ICsJ ZWxzZQo+ID4gPiArCQl0YXJnZXQtPnByaW9yaXR5ID0gbmV3X3ByaW9yaXR5Owo+ID4gPiArCj4g PiA+ICsJY291bnQgPSAxOwo+ID4gPiArCXRhcmdldC0+YnVtcGVkID0gdHJ1ZTsKPiA+ID4gKwo+ ID4gPiArCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPm51bV9kZXBzOyBpKyspIHsKPiA+ID4gKwkJ aWYgKCF0YXJnZXQtPmRlcF9saXN0W2ldKQo+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ICsKPiA+ ID4gKwkJaWYgKHRhcmdldC0+ZGVwX2xpc3RbaV0tPmJ1bXBlZCkKPiA+ID4gKwkJCWNvbnRpbnVl Owo+ID4gPiArCj4gPiA+ICsJCWNvdW50ICs9IGk5MTVfc2NoZWR1bGVyX3ByaW9yaXR5X2J1bXAo c2NoZWR1bGVyLAo+ID4gPiArCQkJCQkJwqDCoMKgwqDCoMKgdGFyZ2V0LQo+ID4gPiA+ZGVwX2xp c3RbaV0sCj4gPiA+ICsJCQkJCQnCoMKgwqDCoMKgwqBidW1wKTsKPiA+ID4gKwl9Cj4gPiA+ICsK PiA+ID4gKwlyZXR1cm4gY291bnQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gKy8qCj4gPiA+ICsg KiBOb2RlcyBhcmUgY29uc2lkZXJlZCB2YWxpZCBkZXBlbmRlbmNpZXMgaWYgdGhleSBhcmUgcXVl dWVkIG9uCj4gPiA+IGFueSByaW5nIG9yCj4gPiA+ICsgKiBpZiB0aGV5IGFyZSBpbiBmbGlnaHQg b24gYSBkaWZmZXJlbnQgcmluZy4gSW4gZmxpZ2h0IG9uIHRoZQo+ID4gPiBzYW1lIHJpbmcgaXMg bm8KPiA+ID4gKyAqIGxvbmdlciBpbnRlcmVzdGluZyBmb3Igbm9uLXByZW1wdGl2ZSBub2RlcyBh cyB0aGUgcmluZwo+ID4gPiBzZXJpYWxpc2VzIGV4ZWN1dGlvbi4KPiA+ID4gKyAqIEZvciBwcmUt ZW1wdGluZyBub2RlcywgYWxsIGluIGZsaWdodCBkZXBlbmRlbmNpZXMgYXJlIHZhbGlkCj4gPiA+ IGFzIHRoZXkgbXVzdCBub3QKPiA+ID4gKyAqIGJlIGp1bXBlZCBieSB0aGUgYWN0IG9mIHByZS1l bXB0aW5nLgo+ID4gPiArICoKPiA+ID4gKyAqIEFueXRoaW5nIHRoYXQgaXMgbmVpdGhlciBxdWV1 ZWQgbm9yIGZseWluZyBpcyB1bmludGVyZXN0aW5nLgo+ID4gPiArICovCj4gPiA+ICtzdGF0aWMg aW5saW5lIGJvb2wgaTkxNV9zY2hlZHVsZXJfaXNfZGVwZW5kZW5jeV92YWxpZCgKPiA+ID4gKwkJ CXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZSwKPiA+ID4gdWludDMyX3Qg aWR4KQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAq ZGVwOwo+ID4gPiArCj4gPiA+ICsJZGVwID0gbm9kZS0+ZGVwX2xpc3RbaWR4XTsKPiA+ID4gKwlp ZiAoIWRlcCkKPiA+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gPiArCj4gPiA+ICsJaWYgKEk5MTVf U1FTX0lTX1FVRVVFRChkZXApKQo+ID4gPiArCQlyZXR1cm4gdHJ1ZTsKPiA+ID4gKwo+ID4gPiAr CWlmIChJOTE1X1NRU19JU19GTFlJTkcoZGVwKSkgewo+ID4gPiArCQlpZiAobm9kZS0+cGFyYW1z LnJpbmcgIT0gZGVwLT5wYXJhbXMucmluZykKPiA+ID4gKwkJCXJldHVybiB0cnVlOwo+ID4gPiAr CX0KPiA+ID4gKwo+ID4gPiArCXJldHVybiBmYWxzZTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiAr c3RhdGljIGludCBpOTE1X3NjaGVkdWxlcl9wb3BfZnJvbV9xdWV1ZV9sb2NrZWQoc3RydWN0Cj4g PiA+IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiA+ID4gKwkJCQlzdHJ1Y3QKPiA+ID4gaTkxNV9z Y2hlZHVsZXJfcXVldWVfZW50cnkgKipwb3Bfbm9kZSkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByaW5nLT5kZXYtCj4gPiA+ID5kZXZfcHJpdmF0 ZTsKPiA+ID4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciA9IGRldl9wcml2LT5z Y2hlZHVsZXI7Cj4gPiA+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpiZXN0 ID0gTlVMTDsKPiA+ID4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGU7 Cj4gPiA+ICsJaW50IHJldDsKPiA+ID4gKwlpbnQgaTsKPiA+ID4gKwlib29sIGFueV9xdWV1ZWQg PSBmYWxzZTsKPiA+ID4gKwlib29sIGhhc19sb2NhbCwgaGFzX3JlbW90ZSwgb25seV9yZW1vdGUg PSBmYWxzZTsKPiA+ID4gKwo+ID4gPiArCSpwb3Bfbm9kZSA9IE5VTEw7Cj4gPiA+ICsJcmV0ID0g LUVOT0RBVEE7Cj4gPiA+ICsKPiA+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZzY2hl ZHVsZXItPm5vZGVfcXVldWVbcmluZy0KPiA+ID4gPmlkXSwgbGluaykgewo+ID4gPiArCQlpZiAo IUk5MTVfU1FTX0lTX1FVRVVFRChub2RlKSkKPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiArCQlh bnlfcXVldWVkID0gdHJ1ZTsKPiA+ID4gKwo+ID4gPiArCQloYXNfbG9jYWzCoMKgPSBmYWxzZTsK PiA+ID4gKwkJaGFzX3JlbW90ZSA9IGZhbHNlOwo+ID4gPiArCQlmb3IgKGkgPSAwOyBpIDwgbm9k ZS0+bnVtX2RlcHM7IGkrKykgewo+ID4gPiArCQkJaWYKPiA+ID4gKCFpOTE1X3NjaGVkdWxlcl9p c19kZXBlbmRlbmN5X3ZhbGlkKG5vZGUsIGkpKQo+ID4gPiArCQkJCWNvbnRpbnVlOwo+ID4gPiAr Cj4gPiA+ICsJCQlpZiAobm9kZS0+ZGVwX2xpc3RbaV0tPnBhcmFtcy5yaW5nID09Cj4gPiA+IG5v ZGUtPnBhcmFtcy5yaW5nKQo+ID4gPiArCQkJCWhhc19sb2NhbCA9IHRydWU7Cj4gPiA+ICsJCQll bHNlCj4gPiA+ICsJCQkJaGFzX3JlbW90ZSA9IHRydWU7Cj4gPiA+ICsJCX0KPiA+ID4gKwo+ID4g PiArCQlpZiAoaGFzX3JlbW90ZSAmJiAhaGFzX2xvY2FsKQo+ID4gPiArCQkJb25seV9yZW1vdGUg PSB0cnVlOwo+ID4gPiArCj4gPiA+ICsJCWlmICghaGFzX2xvY2FsICYmICFoYXNfcmVtb3RlKSB7 Cj4gPiA+ICsJCQlpZiAoIWJlc3QgfHwKPiA+ID4gKwkJCcKgwqDCoMKgKG5vZGUtPnByaW9yaXR5 ID4gYmVzdC0+cHJpb3JpdHkpKQo+ID4gPiArCQkJCWJlc3QgPSBub2RlOwo+ID4gPiArCQl9Cj4g PiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJaWYgKGJlc3QpIHsKPiA+ID4gKwkJbGlzdF9kZWwoJmJl c3QtPmxpbmspOwo+ID4gPiArCj4gPiA+ICsJCUlOSVRfTElTVF9IRUFEKCZiZXN0LT5saW5rKTsK PiA+ID4gKwkJYmVzdC0+c3RhdHVzwqDCoD0gaTkxNV9zcXNfcG9wcGVkOwo+ID4gPiArCj4gPiA+ ICsJCXJldCA9IDA7Cj4gPiA+ICsJfSBlbHNlIHsKPiA+ID4gKwkJLyogQ2FuIG9ubHkgZ2V0IGhl cmUgaWY6Cj4gPiA+ICsJCcKgKiAoYSkgdGhlcmUgYXJlIG5vIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVl Cj4gPiA+ICsJCcKgKiAoYikgYWxsIHF1ZXVlZCBidWZmZXJzIGFyZSBkZXBlbmRlbnQgb24gb3Ro ZXIKPiA+ID4gYnVmZmVycwo+ID4gPiArCQnCoCrCoMKgwqDCoMKgZS5nLiBvbiBhIGJ1ZmZlciB0 aGF0IGlzIGluIGZsaWdodCBvbiBhCj4gPiA+IGRpZmZlcmVudCByaW5nCj4gPiA+ICsJCcKgKi8K PiA+ID4gKwkJaWYgKG9ubHlfcmVtb3RlKSB7Cj4gPiA+ICsJCQkvKiBUaGUgb25seSBkZXBlbmRl bnQgYnVmZmVycyBhcmUgb24KPiA+ID4gYW5vdGhlciByaW5nLiAqLwo+ID4gPiArCQkJcmV0ID0g LUVBR0FJTjsKPiA+ID4gKwkJfSBlbHNlIGlmIChhbnlfcXVldWVkKSB7Cj4gPiA+ICsJCQkvKiBJ dCBzZWVtcyB0aGF0IHNvbWV0aGluZyBoYXMgZ29uZQo+ID4gPiBob3JyaWJseSB3cm9uZyEgKi8K PiA+ID4gKwkJCURSTV9FUlJPUigiQnJva2VuIGRlcGVuZGVuY3kgdHJhY2tpbmcgb24KPiA+ID4g cmluZyAlZCFcbiIsCj4gPiA+ICsJCQkJwqDCoChpbnQpIHJpbmctPmlkKTsKPiA+IFdvdWxkIHRo aXMgY29uZGl0aW9uIGJlIHdvcnRoeSBXQVJOX09OQ0UoKSwgYmVjYXVzZSBpdCB3aWxsIGtlZXAK PiA+IHJlcGVhdGluZyBhcyB0aGUgc2l0dWF0aW9uIHdpbGwgcGVyc2lzdD8KPiA+IAo+ID4gPiAK PiA+ID4gKwkJfQo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCSpwb3Bfbm9kZSA9IGJlc3Q7Cj4g PiA+ICsJcmV0dXJuIHJldDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArLyoKPiA+ID4gKyAqIE5C OiBUaGUgZHJpdmVyIG11dGV4IGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nIHRoaXMK PiA+ID4gZnVuY3Rpb24uIEl0IGlzCj4gPiA+ICsgKiBvbmx5IHJlYWxseSByZXF1aXJlZCBkdXJp bmcgdGhlIGFjdHVhbCBiYWNrIGVuZCBzdWJtaXNzaW9uCj4gPiA+IGNhbGwuIEhvd2V2ZXIsCj4g PiA+ICsgKiBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgYSBtdXRleCB3aGlsZSBob2xkaW5nIGEgc3Bp biBsb2NrIGlzIGEKPiA+ID4gQmFkIElkZWEuCj4gPiA+ICsgKiBBbmQgcmVsZWFzaW5nIHRoZSBv bmUgYmVmb3JlIGFjcXVpcmluZyB0aGUgb3RoZXIgbGVhZHMgdG8KPiA+ID4gb3RoZXIgY29kZQo+ ID4gPiArICogYmVpbmcgcnVuIGFuZCBpbnRlcmZlcmluZy4KPiA+ID4gKyAqLwo+ID4gPiArc3Rh dGljIGludCBpOTE1X3NjaGVkdWxlcl9zdWJtaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmlu ZykKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Owo+ ID4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7Cj4gPiA+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIgPSBkZXZfcHJpdi0+ c2NoZWR1bGVyOwo+ID4gPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9k ZTsKPiA+ID4gKwlpbnQgcmV0LCBjb3VudCA9IDAsIGZseWluZzsKPiA+ID4gKwo+ID4gPiArCVdB Uk5fT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiA+ID4gKwo+ID4g PiArCXNwaW5fbG9ja19pcnEoJnNjaGVkdWxlci0+bG9jayk7Cj4gPiA+ICsKPiA+ID4gKwlXQVJO X09OKHNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+aWRdICYKPiA+ID4gaTkxNV9zZl9zdWJtaXR0aW5n KTsKPiA+ID4gKwlzY2hlZHVsZXItPmZsYWdzW3JpbmctPmlkXSB8PSBpOTE1X3NmX3N1Ym1pdHRp bmc7Cj4gPiA+ICsKPiA+ID4gKwkvKiBGaXJzdCB0aW1lIGFyb3VuZCwgY29tcGxhaW4gaWYgYW55 dGhpbmcgdW5leHBlY3RlZAo+ID4gPiBvY2N1cnM6ICovCj4gPiA+ICsJcmV0ID0gaTkxNV9zY2hl ZHVsZXJfcG9wX2Zyb21fcXVldWVfbG9ja2VkKHJpbmcsICZub2RlKTsKPiA+ID4gKwlpZiAocmV0 KQo+ID4gPiArCQlnb3RvIGVycm9yOwo+ID4gPiArCj4gPiA+ICsJZG8gewo+ID4gPiArCQlXQVJO X09OKCFub2RlKTsKPiA+ID4gKwkJV0FSTl9PTihub2RlLT5wYXJhbXMucmluZyAhPSByaW5nKTsK PiA+ID4gKwkJV0FSTl9PTihub2RlLT5zdGF0dXMgIT0gaTkxNV9zcXNfcG9wcGVkKTsKPiA+ID4g KwkJY291bnQrKzsKPiA+ID4gKwo+ID4gPiArCQkvKgo+ID4gPiArCQnCoCogVGhlIGNhbGwgdG8g cG9wIGFib3ZlIHdpbGwgaGF2ZSByZW1vdmVkIHRoZQo+ID4gPiBub2RlIGZyb20gdGhlCj4gPiA+ ICsJCcKgKiBsaXN0LiBTbyBhZGQgaXQgYmFjayBpbiBhbmQgbWFyayBpdCBhcyBpbgo+ID4gPiBm bGlnaHQuCj4gPiA+ICsJCcKgKi8KPiA+ID4gKwkJaTkxNV9zY2hlZHVsZXJfbm9kZV9mbHkobm9k ZSk7Cj4gPiA+ICsKPiA+ID4gKwkJc3Bpbl91bmxvY2tfaXJxKCZzY2hlZHVsZXItPmxvY2spOwo+ ID4gPiArCQlyZXQgPSBkZXZfcHJpdi0+Z3QuZXhlY2J1Zl9maW5hbCgmbm9kZS0+cGFyYW1zKTsK PiA+ID4gKwkJc3Bpbl9sb2NrX2lycSgmc2NoZWR1bGVyLT5sb2NrKTsKPiA+ID4gKwo+ID4gPiAr CQkvKgo+ID4gPiArCQnCoCogSGFuZGxlIGZhaWxlZCBzdWJtaXNzaW9uIGJ1dCBmaXJzdCBjaGVj ayB0aGF0Cj4gPiA+IHRoZQo+ID4gPiArCQnCoCogd2F0Y2hkb2cvcmVzZXQgY29kZSBoYXMgbm90 IG51a2VkIHRoZSBub2RlCj4gPiA+IHdoaWxlIHdlCj4gPiA+ICsJCcKgKiB3ZXJlbid0IGxvb2tp bmc6Cj4gPiA+ICsJCcKgKi8KPiA+ID4gKwkJaWYgKHJldCAmJiAobm9kZS0+c3RhdHVzICE9IGk5 MTVfc3FzX2RlYWQpKSB7Cj4gPiA+ICsJCQlib29sIHJlcXVldWUgPSB0cnVlOwo+ID4gPiArCj4g PiA+ICsJCQkvKgo+ID4gPiArCQkJwqAqIE9oIGRlYXIhIEVpdGhlciB0aGUgbm9kZSBpcyBicm9r ZW4gb3IKPiA+ID4gdGhlIHJpbmcgaXMKPiA+ID4gKwkJCcKgKiBidXN5LiBTbyBuZWVkIHRvIGtp bGwgdGhlIG5vZGUgb3IKPiA+ID4gcmVxdWV1ZSBpdCBhbmQgdHJ5Cj4gPiA+ICsJCQnCoCogYWdh aW4gbGF0ZXIgYXMgYXBwcm9wcmlhdGUuCj4gPiA+ICsJCQnCoCovCj4gPiA+ICsKPiA+ID4gKwkJ CXN3aXRjaCAoLXJldCkgewo+ID4gPiArCQkJY2FzZSBFTk9ERVY6Cj4gPiA+ICsJCQljYXNlIEVO T0VOVDoKPiA+ID4gKwkJCQkvKiBGYXRhbCBlcnJvcnMuIEtpbGwgdGhlIG5vZGUuCj4gPiA+ICov Cj4gPiA+ICsJCQkJcmVxdWV1ZSA9IGZhbHNlOwo+ID4gPiArCQkJCWk5MTVfc2NoZWR1bGVyX25v ZGVfa2lsbChub2RlKTsKPiA+ID4gKwkJCWJyZWFrOwo+ID4gVGhlc2UgYnJlYWsgaW5kZW50cyBz dGlsbC4KPiA+IAo+ID4gPiAKPiA+ID4gKwo+ID4gPiArCQkJY2FzZSBFQUdBSU46Cj4gPiA+ICsJ CQljYXNlIEVCVVNZOgo+ID4gPiArCQkJY2FzZSBFSU86Cj4gPiA+ICsJCQljYXNlIEVOT01FTToK PiA+ID4gKwkJCWNhc2UgRVJFU1RBUlRTWVM6Cj4gPiA+ICsJCQljYXNlIEVJTlRSOgo+ID4gPiAr CQkJCS8qIFN1cHBvc2VkbHkgcmVjb3ZlcmFibGUKPiA+ID4gZXJyb3JzLiAqLwo+ID4gPiArCQkJ YnJlYWs7Cj4gPiA+ICsKPiA+ID4gKwkJCWRlZmF1bHQ6Cj4gPiA+ICsJCQkJLyoKPiA+ID4gKwkJ CQnCoCogQXNzdW1lIHRoZSBlcnJvciBpcwo+ID4gPiByZWNvdmVyYWJsZSBhbmQgaG9wZQo+ID4g PiArCQkJCcKgKiBmb3IgdGhlIGJlc3QuCj4gPiA+ICsJCQkJwqAqLwo+ID4gPiArCQkJCU1JU1NJ TkdfQ0FTRSgtcmV0KTsKPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiArCQkJfQo+ID4gPiArCj4gPiA+ ICsJCQlpZiAocmVxdWV1ZSkgewo+ID4gPiArCQkJCWk5MTVfc2NoZWR1bGVyX25vZGVfcmVxdWV1 ZShub2RlCj4gPiA+ICk7Cj4gPiA+ICsJCQkJLyoKPiA+ID4gKwkJCQnCoCogTm8gcG9pbnQgc3Bp bm5pbmcgaWYgdGhlIHJpbmcKPiA+ID4gaXMgY3VycmVudGx5Cj4gPiA+ICsJCQkJwqAqIHVuYXZh aWxhYmxlIHNvIGp1c3QgZ2l2ZSB1cAo+ID4gPiBhbmQgY29tZSBiYWNrCj4gPiA+ICsJCQkJwqAq IGxhdGVyLgo+ID4gPiArCQkJCcKgKi8KPiA+ID4gKwkJCQlicmVhazsKPiA+ID4gKwkJCX0KPiA+ ID4gKwkJfQo+ID4gPiArCj4gPiA+ICsJCS8qIEtlZXAgbGF1bmNoaW5nIHVudGlsIHRoZSBza3kg aXMgc3VmZmljaWVudGx5Cj4gPiA+IGZ1bGwuICovCj4gPiA+ICsJCWZseWluZyA9IGk5MTVfc2No ZWR1bGVyX2NvdW50X2ZseWluZyhzY2hlZHVsZXIsCj4gPiA+IHJpbmcpOwo+ID4gPiArCQlpZiAo Zmx5aW5nID49IHNjaGVkdWxlci0+bWluX2ZseWluZykKPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiAr Cj4gPiA+ICsJCS8qIEdyYWIgYW5vdGhlciBub2RlIGFuZCBnbyByb3VuZCBhZ2Fpbi4uLiAqLwo+ ID4gPiArCQlyZXQgPSBpOTE1X3NjaGVkdWxlcl9wb3BfZnJvbV9xdWV1ZV9sb2NrZWQocmluZywK PiA+ID4gJm5vZGUpOwo+ID4gPiArCX0gd2hpbGUgKHJldCA9PSAwKTsKPiA+ID4gKwo+ID4gPiAr CS8qIERvbid0IGNvbXBsYWluIGFib3V0IG5vdCBiZWluZyBhYmxlIHRvIHN1Ym1pdCBleHRyYQo+ ID4gPiBlbnRyaWVzICovCj4gPiA+ICsJaWYgKHJldCA9PSAtRU5PREFUQSkKPiA+ID4gKwkJcmV0 ID0gMDsKPiA+ID4gKwo+ID4gPiArCS8qCj4gPiA+ICsJwqAqIEJ1bXAgdGhlIHByaW9yaXR5IG9m IGV2ZXJ5dGhpbmcgdGhhdCB3YXMgbm90Cj4gPiA+IHN1Ym1pdHRlZCB0byBwcmV2ZW50Cj4gPiA+ ICsJwqAqIHN0YXJ2YXRpb24gb2YgbG93IHByaW9yaXR5IHRhc2tzIGJ5IGEgc3BhbW1pbmcgaGln aAo+ID4gPiBwcmlvcml0eSB0YXNrLgo+ID4gPiArCcKgKi8KPiA+IFRoaXMsIHRoaXMgY2FsbHMg Zm9yIGFuIEktRy1UIHRlc3QgdG8gbWFrZSBzdXJlIHdlJ3JlIGVmZmVjdGl2ZS4KPiBZZWFoLCBJ R1RzIGFyZSB1bmRlciBkZXZlbG9wbWVudC4KPiAKPiA+IAo+ID4gPiAKPiA+ID4gKwlpOTE1X3Nj aGVkdWxlcl9wcmlvcml0eV9idW1wX2NsZWFyKHNjaGVkdWxlcik7Cj4gPiA+ICsJbGlzdF9mb3Jf ZWFjaF9lbnRyeShub2RlLCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JpbmctCj4gPiA+ID5pZF0s IGxpbmspIHsKPiA+ID4gKwkJaWYgKCFJOTE1X1NRU19JU19RVUVVRUQobm9kZSkpCj4gPiA+ICsJ CQljb250aW51ZTsKPiA+ID4gKwo+ID4gPiArCQlpOTE1X3NjaGVkdWxlcl9wcmlvcml0eV9idW1w KHNjaGVkdWxlciwgbm9kZSwKPiA+ID4gKwkJCQkJwqDCoMKgwqDCoHNjaGVkdWxlci0KPiA+ID4g PnByaW9yaXR5X2xldmVsX2J1bXApOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCS8qIE9uIHN1 Y2Nlc3MsIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgc3VibWl0dGVkLgo+ID4gPiAqLwo+ ID4gPiArCWlmIChyZXQgPT0gMCkKPiA+ID4gKwkJcmV0ID0gY291bnQ7Cj4gPiA+ICsKPiA+ID4g K2Vycm9yOgo+ID4gPiArCXNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+aWRdICY9IH5pOTE1X3NmX3N1 Ym1pdHRpbmc7Cj4gPiA+ICsJc3Bpbl91bmxvY2tfaXJxKCZzY2hlZHVsZXItPmxvY2spOwo+ID4g PiArCXJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIGk5MTVf Z2VuZXJhdGVfZGVwZW5kZW5jaWVzKHN0cnVjdCBpOTE1X3NjaGVkdWxlcgo+ID4gPiAqc2NoZWR1 bGVyLAo+ID4gPiArCQkJCcKgwqDCoMKgwqDCoMKgc3RydWN0Cj4gPiA+IGk5MTVfc2NoZWR1bGVy X3F1ZXVlX2VudHJ5ICpub2RlLAo+ID4gPiArCQkJCcKgwqDCoMKgwqDCoMKgdWludDMyX3Qgcmlu ZykKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfb2JqX2VudHJ5ICp0aGlz LCAqdGhhdDsKPiA+ID4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKnRlc3Q7 Cj4gPiA+ICsJaW50IGksIGo7Cj4gPiA+ICsJYm9vbCBmb3VuZDsKPiA+ID4gKwo+ID4gPiArCWxp c3RfZm9yX2VhY2hfZW50cnkodGVzdCwgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyaW5nXSwKPiA+ ID4gbGluaykgewo+ID4gPiArCQlpZiAoSTkxNV9TUVNfSVNfQ09NUExFVEUodGVzdCkpCj4gPiA+ ICsJCQljb250aW51ZTsKPiA+ID4gKwo+ID4gPiArCQkvKgo+ID4gPiArCQnCoCogQmF0Y2hlcyBv biB0aGUgc2FtZSByaW5nIGZvciB0aGUgc2FtZQo+ID4gPiArCQnCoCogY29udGV4dCBtdXN0IGJl IGtlcHQgaW4gb3JkZXIuCj4gPiA+ICsJCcKgKi8KPiA+ID4gKwkJZm91bmQgPSAobm9kZS0+cGFy YW1zLmN0eCA9PSB0ZXN0LT5wYXJhbXMuY3R4KQo+ID4gPiAmJgo+ID4gPiArCQkJKG5vZGUtPnBh cmFtcy5yaW5nID09IHRlc3QtCj4gPiA+ID5wYXJhbXMucmluZyk7Cj4gPiA+ICsKPiA+ID4gKwkJ LyoKPiA+ID4gKwkJwqAqIEJhdGNoZXMgd29ya2luZyBvbiB0aGUgc2FtZSBvYmplY3RzIG11c3QK PiA+ID4gKwkJwqAqIGJlIGtlcHQgaW4gb3JkZXIuCj4gPiA+ICsJCcKgKi8KPiA+ID4gKwkJZm9y IChpID0gMDsgKGkgPCBub2RlLT5udW1fb2JqcykgJiYgIWZvdW5kOyBpKyspCj4gPiA+IHsKPiA+ ID4gKwkJCXRoaXMgPSBub2RlLT5zYXZlZF9vYmplY3RzICsgaTsKPiA+IG5vZGUtPm9ianMgYW5k IG5vZGUtPm51bV9vYmpzIHdvdWxkIGJlIGEgYmV0dGVyIG5hbWluZyBtYXRjaC4KPiA+IG51bV9v YmpzCj4gPiBhbmQgc2F2ZWRfb2JqZWN0cyBtYWtlcyBtZSB0aGluayB3ZSBoYXZlIGEgYnVnIGhl cmUsIGluZGV4aW5nIHdyb25nCj4gPiBhcnJheS4KPiA+IAo+ID4gPiAKPiA+ID4gKwo+ID4gPiAr CQkJZm9yIChqID0gMDsgaiA8IHRlc3QtPm51bV9vYmpzOyBqKyspIHsKPiA+ID4gKwkJCQl0aGF0 ID0gdGVzdC0+c2F2ZWRfb2JqZWN0cyArIGo7Cj4gPiA+ICsKPiA+ID4gKwkJCQlpZiAodGhpcy0+ b2JqICE9IHRoYXQtPm9iaikKPiA+ID4gKwkJCQkJY29udGludWU7Cj4gPiA+ICsKPiA+ID4gKwkJ CQkvKiBPbmx5IG5lZWQgdG8gd29ycnkgYWJvdXQKPiA+ID4gd3JpdGVzICovCj4gPiA+ICsJCQkJ aWYgKHRoaXMtPnJlYWRfb25seSAmJiB0aGF0LQo+ID4gPiA+cmVhZF9vbmx5KQo+ID4gPiArCQkJ CQljb250aW51ZTsKPiA+ID4gKwo+ID4gPiArCQkJCWZvdW5kID0gdHJ1ZTsKPiA+ID4gKwkJCQli cmVhazsKPiA+ID4gKwkJCX0KPiA+ID4gKwkJfQo+ID4gPiArCj4gPiA+ICsJCWlmIChmb3VuZCkg ewo+ID4gPiArCQkJbm9kZS0+ZGVwX2xpc3Rbbm9kZS0+bnVtX2RlcHNdID0gdGVzdDsKPiA+ID4g KwkJCW5vZGUtPm51bV9kZXBzKys7Cj4gPiA+ICsJCX0KPiA+ID4gKwl9Cj4gPiA+ICt9Cj4gPiA+ ICsKPiA+ID4gK3N0YXRpYyBpbnQgaTkxNV9zY2hlZHVsZXJfcXVldWVfZXhlY2J1ZmZlcl9ieXBh c3Moc3RydWN0Cj4gPiA+IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpxZSkKPiA+ID4gK3sK PiA+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBxZS0+cGFyYW1zLmRl di0KPiA+ID4gPmRldl9wcml2YXRlOwo+ID4gPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2No ZWR1bGVyID0gZGV2X3ByaXYtPnNjaGVkdWxlcjsKPiA+ID4gKwlpbnQgcmV0Owo+ID4gPiArCj4g PiA+ICsJc2NoZWR1bGVyLT5mbGFnc1txZS0+cGFyYW1zLnJpbmctPmlkXSB8PQo+ID4gPiBpOTE1 X3NmX3N1Ym1pdHRpbmc7Cj4gPiA+ICsJcmV0ID0gZGV2X3ByaXYtPmd0LmV4ZWNidWZfZmluYWwo JnFlLT5wYXJhbXMpOwo+ID4gPiArCXNjaGVkdWxlci0+ZmxhZ3NbcWUtPnBhcmFtcy5yaW5nLT5p ZF0gJj0KPiA+ID4gfmk5MTVfc2Zfc3VibWl0dGluZzsKPiA+ID4gKwo+ID4gVGhlIGFib3ZlIGNv ZGUgbWFrZXMgbWUgdGhpbmsgb2YgbG9ja2luZyBhZ2FpbiwgbWF5YmUgZG9jdW1lbnQgYXQKPiA+ IHRvcAo+ID4gb2YgdGhpcyBmdW5jdGlvbi4KPiBObyBuZWVkIHRvIGFjcXVpcmUgdGhlIHNwaW5s b2NrIGF0IHRoaXMgcG9pbnQuIElmIHRoZSBzY2hlZHVsZXIgaXMKPiBpbsKgCj4gYnlwYXNzIG1v ZGUgdGhlbiB0aGVyZSBpcyBubyBpbnRlcm5hbCBzdGF0ZSB0byBwcm90ZWN0LiBUaGUgZHJpdmVy Cj4gbXV0ZXjCoAo+IGxvY2sgd2lsbCBiZSBoZWxkIGJlY2F1c2UgdGhlcmUgaXMgb25seSBvbmUg Y29kZSBwYXRoIHRvIGdldCBoZXJlCj4gd2hpY2jCoAo+IGlzIHRoZSBleGVjYnVmZiBJT0NUTC4g VGhlIHdob2xlIHBvaW50IG9mIGJ5cGFzcyBtb2RlIGlzIHRoYXQgaXQgaXMKPiBhwqAKPiBzaW5n bGUgY29udGlndW91cyBleGVjdXRpb24gcGF0aCBmcm9tIElPQ1RMIGVudHJ5IGFsbCB0aGUgd2F5 IHRocm91Z2gKPiB0b8KgCj4gaGFyZHdhcmUgc3VibWlzc2lvbi4gQSBtdXRleCBjaGVjayBjb3Vs ZCBiZSBhZGRlZCBidXQgaXQgc2VlbXPCoAo+IHVubmVjZXNzYXJ5IGdpdmVuIHRoZSBsaW1pdGVk IGNhbGxpbmcgc2NvcGUuCj4gCj4gPiAKPiA+IAo+ID4gPiAKPiA+ID4gKwkvKgo+ID4gPiArCcKg KiBEb24ndCBkbyBhbnkgY2xlYW4gdXAgb24gZmFpbHVyZSBiZWNhdXNlIHRoZSBjYWxsZXIKPiA+ ID4gd2lsbAo+ID4gPiArCcKgKiBkbyBpdCBhbGwgYW55d2F5Lgo+ID4gPiArCcKgKi8KPiA+ID4g KwlpZiAocmV0KQo+ID4gPiArCQlyZXR1cm4gcmV0Owo+ID4gPiArCj4gPiA+ICsJLyogTmVlZCB0 byByZWxlYXNlIGFueSByZXNvdXJjZXMgaGVsZCBieSB0aGUgbm9kZTogKi8KPiA+ID4gKwlpOTE1 X3NjaGVkdWxlcl9jbGVhbl9ub2RlKHFlKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiAwOwo+ID4g PiArfQo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2V4 ZWNidWZmZXIgLSBTdWJtaXQgYSBiYXRjaCBidWZmZXIKPiA+ID4gcmVxdWVzdCB0byB0aGUKPiA+ ID4gKyAqIHNjaGVkdWxlci4KPiA+ID4gKyAqIEBxZTogVGhlIGJhdGNoIGJ1ZmZlciByZXF1ZXN0 IHRvIGJlIHF1ZXVlZC4KPiA+ID4gKyAqIFRoZSBleHBlY3RhdGlvbiBpcyB0aGUgcWUgcGFzc2Vk IGluIGlzIGEgbG9jYWwgc3RhY2sKPiA+ID4gdmFyaWFibGUuIFRoaXMKPiA+ID4gKyAqIGZ1bmN0 aW9uIHdpbGwgY29weSBpdHMgY29udGVudHMgaW50byBhIGZyZXNobHkgYWxsb2NhdGVkIGxpc3QK PiA+ID4gbm9kZS4gVGhlCj4gPiA+ICsgKiBuZXcgbm9kZSB0YWtlcyBvd25lcnNoaXAgb2Ygc2Fp ZCBjb250ZW50cyBzbyB0aGUgb3JpZ2luYWwgcWUKPiA+ID4gc2hvdWxkIHNpbXBseQo+ID4gPiAr ICogYmUgZGlzY2FyZGVkIGFuZCBub3QgY2xlYW5lZCB1cCAoaS5lLiBkb24ndCBmcmVlIG1lbW9y eSBpdAo+ID4gPiBwb2ludHMgdG8gb3IKPiA+ID4gKyAqIGRlcmVmZXJlbmNlIG9iamVjdHMgaXQg aG9sZHMpLiBUaGUgbm9kZSBpcyBhZGRlZCB0byB0aGUKPiA+ID4gc2NoZWR1bGVyJ3MgcXVldWUK PiA+ID4gKyAqIGFuZCB0aGUgYmF0Y2ggYnVmZmVyIHdpbGwgYmUgc3VibWl0dGVkIHRvIHRoZSBo YXJkd2FyZSBhdAo+ID4gPiBzb21lIGZ1dHVyZQo+ID4gPiArICogcG9pbnQgaW4gdGltZSAod2hp Y2ggbWF5IGJlIGltbWVkaWF0ZWx5LCBiZWZvcmUgcmV0dXJuaW5nIG9yCj4gPiA+IG1heSBiZSBx dWl0ZQo+ID4gPiArICogYSBsb3QgbGF0ZXIpLgo+ID4gPiArICovCj4gPiA+ICtpbnQgaTkxNV9z Y2hlZHVsZXJfcXVldWVfZXhlY2J1ZmZlcihzdHJ1Y3QKPiA+ID4gaTkxNV9zY2hlZHVsZXJfcXVl dWVfZW50cnkgKnFlKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHFlLT5wYXJhbXMuZGV2LQo+ID4gPiA+ZGV2X3ByaXZhdGU7Cj4gPiA+ICsJc3Ry dWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIgPSBkZXZfcHJpdi0+c2NoZWR1bGVyOwo+ID4g PiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSBxZS0+cGFyYW1zLnJpbmc7Cj4gPiA+ ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlOwo+ID4gPiArCXN0cnVj dCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqdGVzdDsKPiA+ID4gKwlib29sIG5vdF9mbHlp bmc7Cj4gPiA+ICsJaW50IGksIHI7Cj4gPiA+ICsJaW50IGluY29tcGxldGUgPSAwOwo+ID4gPiAr Cj4gPiA+ICsJV0FSTl9PTighc2NoZWR1bGVyKTsKPiA+ID4gKwo+ID4gPiArCWlmICgxLyohaTkx NS5lbmFibGVfc2NoZWR1bGVyKi8pCj4gPiA+ICsJCXJldHVybgo+ID4gPiBpOTE1X3NjaGVkdWxl cl9xdWV1ZV9leGVjYnVmZmVyX2J5cGFzcyhxZSk7Cj4gPiA+ICsKPiA+IEknbSB0aGlua2luZywg c2hvdWxkIHdlIGJyYW5jaCBhbHJlYWR5IGJlZm9yZSBjYWxsaW5nIGEgZnVuY3Rpb24KPiA+IG5h bWVkCj4gPiBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9leGVjYnVmZmVyIGlmIHNjaGVkdWxlciBpcyBk aXNhYmxlZD8KPiBUaGF0IHdvdWxkIHJlcXVpcmUgcHV0dGluZyBpZihzY2hlZHVsZXIpIGxvZ2lj IGluIHJhbmRvbSBwb2ludHPCoAo+IHRocm91Z2hvdXQgdGhlIGRyaXZlci4gRG9pbmcgaXQgdGhp cyB3YXksIHRoZSBkcml2ZXIgYXMgYSB3aG9sZSBoYXMKPiBhwqAKPiBzaW5nbGUgZXhlY3V0aW9u IHBhdGggd2hpY2ggaXMgdmlhIHRoZSBzY2hlZHVsZXIuIEl0IGlzIHRoZW4gdXAgdG8KPiB0aGXC oAo+IHNjaGVkdWxlciBpdHNlbGYgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcnVuIGluIGJ5cGFzcyBt b2RlLCBzaW1wbGXCoAo+IHJlLW9yZGVyaW5nIG1vZGUsIGZ1bGwgcHJlLWVtcHRpb24gbW9kZSBv ciBhbnkgb3RoZXIgbW9kZSB3ZSBmZWVsIGEKPiBuZWVkwqAKPiB0byBhZGQuCj4gCj4gCj4gPiAK PiA+ID4gCj4gPiA+ICsJbm9kZSA9IGttYWxsb2Moc2l6ZW9mKCpub2RlKSwgR0ZQX0tFUk5FTCk7 Cj4gPiA+ICsJaWYgKCFub2RlKQo+ID4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ID4gKwo+ID4g PiArCSpub2RlID0gKnFlOwo+ID4gTm93IEkgcmVhZCB0aGUgYWRkZWQgZG9jdW1lbnRhdGlvbiBm b3IgdGhlIGZ1bmN0aW9uLCBtYXliZSB3ZQo+ID4gc2hvdWxkIGF0Cj4gPiBsZWFzdCB6ZXJvIG91 dCBxZSB0byBhdm9pZCBmdXR1cmUgcHJvYmxlbXM/Cj4gVGhlIGV4ZWNidWZmIHN1Y2Nlc3MgcGF0 aCBoYW5kcyB0aGUgcWUgY29udGVudHMgb3ZlciBhbmQgcHJldHR5IG11Y2jCoAo+IGltbWVkaWF0 ZWx5IGRyb3BzIGFsbCB0aGUgd2F5IGJhY2sgb3V0IG9mIHRoZSBJT0NUTC4gVGhlIGZhaWx1cmUK PiBwYXRowqAKPiBkb2VzIHRoZSBmdWxsIGNsZWFudXAgb2YgZGUtYWxsb2NhdGluZyBhbGwgdGhl IHFlIHN0dWZmIGl0IGhhZMKgCj4gcHJldmlvdXNseSBhbGxvY2F0ZWQuIElNTyB0aGVyZSBkb2Vz bid0IHNlZW0gdG8gYmUgbXVjaCBuZWVkIHRvIHplcm8KPiBvdXTCoAo+IHRoZSBzdHJ1Y3R1cmUg YXQgdGhpcyBwb2ludC4KPiAKPiA+IAo+ID4gCj4gPiA+IAo+ID4gPiArCUlOSVRfTElTVF9IRUFE KCZub2RlLT5saW5rKTsKPiA+ID4gKwlub2RlLT5zdGF0dXMgPSBpOTE1X3Nxc19xdWV1ZWQ7Cj4g PiA+ICsJbm9kZS0+c3RhbXDCoMKgPSBqaWZmaWVzOwo+ID4gPiArCWk5MTVfZ2VtX3JlcXVlc3Rf cmVmZXJlbmNlKG5vZGUtPnBhcmFtcy5yZXF1ZXN0KTsKPiA+ID4gKwo+ID4gPiArCVdBUk5fT04o bm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNjaGVkdWxlcl9xZSk7Cj4gPiA+ICsJbm9kZS0+cGFyYW1z LnJlcXVlc3QtPnNjaGVkdWxlcl9xZSA9IG5vZGU7Cj4gPiA+ICsKPiA+ID4gKwkvKiBOZWVkIHRv IGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGluY29tcGxldGUgZW50cmllcyBpbgo+ID4gPiB0aGUg bGlzdCBhcwo+ID4gPiArCcKgKiB0aGF0IHdpbGwgYmUgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUg ZGVwZW5kZW5jeSBsaXN0Lgo+ID4gPiArCcKgKgo+ID4gPiArCcKgKiBOb3RlIHRoYXQgdGhlIGFs bG9jYXRpb24gbXVzdCBub3QgYmUgbWFkZSB3aXRoIHRoZQo+ID4gPiBzcGlubG9jayBhY3F1aXJl ZAo+ID4gPiArCcKgKiBhcyBrbWFsbG9jIGNhbiBzbGVlcC4gSG93ZXZlciwgdGhlIHVubG9jay9y ZWxvY2sgaXMKPiA+ID4gc2FmZSBiZWNhdXNlIG5vCj4gPiA+ICsJwqAqIG5ldyBlbnRyaWVzIGNh biBiZSBxdWV1ZWQgdXAgZHVyaW5nIHRoZSB1bmxvY2sgYXMgdGhlCj4gPiA+IGk5MTUgZHJpdmVy Cj4gPiA+ICsJwqAqIG11dGV4IGlzIHN0aWxsIGhlbGQuIEVudHJpZXMgY291bGQgYmUgcmVtb3Zl ZCBmcm9tCj4gPiA+IHRoZSBsaXN0IGJ1dCB0aGF0Cj4gPiA+ICsJwqAqIGp1c3QgbWVhbnMgdGhl IGRlcF9saXN0IHdpbGwgYmUgb3Zlci1hbGxvY2F0ZWQgd2hpY2gKPiA+ID4gaXMgZmluZS4KPiA+ ID4gKwnCoCovCj4gPiA+ICsJc3Bpbl9sb2NrX2lycSgmc2NoZWR1bGVyLT5sb2NrKTsKPiA+IC0t Pgo+ID4gCj4gPiA+IAo+ID4gPiArCWZvciAociA9IDA7IHIgPCBJOTE1X05VTV9SSU5HUzsgcisr KSB7Cj4gPiA+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnkodGVzdCwgJnNjaGVkdWxlci0KPiA+ID4g Pm5vZGVfcXVldWVbcl0sIGxpbmspIHsKPiA+ID4gKwkJCWlmIChJOTE1X1NRU19JU19DT01QTEVU RSh0ZXN0KSkKPiA+ID4gKwkJCQljb250aW51ZTsKPiA+ID4gKwo+ID4gPiArCQkJaW5jb21wbGV0 ZSsrOwo+ID4gPiArCQl9Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA8LS0gVGhpcyBjb3VudGluZyBz dHJ1Y3R1cmUsIEkgc3RpbGwgdGhpbmsgaXQgd291bGQgYmUgZ29vZCBpZGVhIHRvCj4gPiBtYWtl IGl0IGEgc3RhdGljIGhlbHBlci4KPiA+IAo+ID4gPiAKPiA+ID4gKwkvKiBUZW1wb3JhcmlseSB1 bmxvY2sgdG8gYWxsb2NhdGUgbWVtb3J5OiAqLwo+ID4gPiArCXNwaW5fdW5sb2NrX2lycSgmc2No ZWR1bGVyLT5sb2NrKTsKPiA+ID4gKwlpZiAoaW5jb21wbGV0ZSkgewo+ID4gPiArCQlub2RlLT5k ZXBfbGlzdCA9IGttYWxsb2NfYXJyYXkoaW5jb21wbGV0ZSwKPiA+ID4gKwkJCQkJwqDCoMKgwqDC oMKgwqBzaXplb2YoKm5vZGUtCj4gPiA+ID5kZXBfbGlzdCksCj4gPiA+ICsJCQkJCcKgwqDCoMKg wqDCoMKgR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJCWlmICghbm9kZS0+ZGVwX2xpc3QpIHsKPiA+ID4g KwkJCWtmcmVlKG5vZGUpOwo+ID4gPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gPiA+ICsJCX0KPiA+ ID4gKwl9IGVsc2UKPiA+ID4gKwkJbm9kZS0+ZGVwX2xpc3QgPSBOVUxMOwo+ID4gPiArCj4gPiA+ ICsJc3Bpbl9sb2NrX2lycSgmc2NoZWR1bGVyLT5sb2NrKTsKPiA+ID4gKwlub2RlLT5udW1fZGVw cyA9IDA7Cj4gPiA+ICsKPiA+ID4gKwlpZiAobm9kZS0+ZGVwX2xpc3QpIHsKPiA+ID4gKwkJZm9y IChyID0gMDsgciA8IEk5MTVfTlVNX1JJTkdTOyByKyspCj4gPiA+ICsJCQlpOTE1X2dlbmVyYXRl X2RlcGVuZGVuY2llcyhzY2hlZHVsZXIsCj4gPiA+IG5vZGUsIHIpOwo+ID4gPiArCj4gPiA+ICsJ CVdBUk5fT04obm9kZS0+bnVtX2RlcHMgPiBpbmNvbXBsZXRlKTsKPiA+ID4gKwl9Cj4gPiA+ICsK PiA+ID4gKwlub2RlLT5wcmlvcml0eSA9IGNsYW1wKG5vZGUtPnByaW9yaXR5LAo+ID4gPiArCQkJ wqDCoMKgwqDCoMKgwqBzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX21pbiwKPiA+ID4gKwkJCcKg wqDCoMKgwqDCoMKgc2NoZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9tYXgpOwo+ID4gPiArCj4gPiA+ ICsJaWYgKChub2RlLT5wcmlvcml0eSA+IDApICYmIG5vZGUtPm51bV9kZXBzKSB7Cj4gPiA+ICsJ CWk5MTVfc2NoZWR1bGVyX3ByaW9yaXR5X2J1bXBfY2xlYXIoc2NoZWR1bGVyKTsKPiA+ID4gKwo+ ID4gPiArCQlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+bnVtX2RlcHM7IGkrKykKPiA+ID4gKwkJCWk5 MTVfc2NoZWR1bGVyX3ByaW9yaXR5X2J1bXAoc2NoZWR1bGVyLAo+ID4gPiArCQkJCQlub2RlLT5k ZXBfbGlzdFtpXSwgbm9kZS0KPiA+ID4gPnByaW9yaXR5KTsKPiA+IElmIG5vZGUgaXMgcG9zdGVk IHdpdGggbWF4aW11bSBwcmlvcml0eSB0byBiZWdpbiB3aXRoLCB3b3VsZG4ndCB0aGUKPiA+IHBy aW9yaXR5IHByb3BhZ2F0aW9uIHN0b3AgYWZ0ZXIgZmlyc3QgbGV2ZWwgZGVwZW5kZW5jaWVzIGR1 ZSB0byB0aGUKPiA+IGNoZWNrIGluIHRoZSBiZWdpbm5pbmcgb2YgcHJpb3JpdHlfYnVtcCBmdW5j dGlvbj8KPiBUaGUgcmVjdXJzaW9uIHdpbGwgc3RvcCB3aGVuZXZlciBpdCBlbmNvdW50ZXJzIGEg bm9kZSBhbHJlYWR5IGF0Cj4gbWF4aW11bcKgCj4gcHJpb3JpdHkuIEhvd2V2ZXIsIGl0IGlzIG5v dCBzdGFydGluZyBmcm9tIHRoZSBuZXdseSBzdWJtaXR0ZWQgbm9kZQo+IGJ1dMKgCj4gZnJvbSB0 aGF0IG5vZGUncyBkZXBlbmRlbmNpZXMuIElmIHRoZXkgYXJlIGFscmVhZHkgYXQgbWF4IHByaW9y aXR5Cj4gdGhlbsKgCj4gdGhlaXIgZGVwZW5kZW5jaWVzIG11c3QgYWxzbyBiZSBhbmQgc28gb24g ZG93biB0aGUgY2hhaW4gYW5kIG5vCj4gZnVydGhlcsKgCj4gcHJvY2Vzc2luZyBpcyByZXF1aXJl ZC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZXkgYXJlIG5vdCB0aGVuIHRoZXnCoAo+IHdpbGwg YmUgYnVtcGVkIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgY2hlY2tlZCBhbmQgc28gb24gZG93biB0 aGUKPiBjaGFpbi4KPiAKPiA+IAo+ID4gPiAKPiA+ID4gKwo+ID4gPiArCWxpc3RfYWRkX3RhaWwo Jm5vZGUtPmxpbmssICZzY2hlZHVsZXItPm5vZGVfcXVldWVbcmluZy0KPiA+ID4gPmlkXSk7Cj4g PiA+ICsKPiA+ID4gKwlub3RfZmx5aW5nID0gaTkxNV9zY2hlZHVsZXJfY291bnRfZmx5aW5nKHNj aGVkdWxlciwKPiA+ID4gcmluZykgPAo+ID4gPiArCQkJCQkJwqBzY2hlZHVsZXItCj4gPiA+ID5t aW5fZmx5aW5nOwo+ID4gPiArCj4gPiA+ICsJc3Bpbl91bmxvY2tfaXJxKCZzY2hlZHVsZXItPmxv Y2spOwo+ID4gPiArCj4gPiA+ICsJaWYgKG5vdF9mbHlpbmcpCj4gPiA+ICsJCWk5MTVfc2NoZWR1 bGVyX3N1Ym1pdChyaW5nKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4g PiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGk5MTVfc2NoZWR1bGVyX25vdGlmeV9yZXF1ZXN0IC0g Tm90aWZ5IHRoZSBzY2hlZHVsZXIgdGhhdCB0aGUKPiA+ID4gZ2l2ZW4KPiA+ID4gKyAqIHJlcXVl c3QgaGFzIGNvbXBsZXRlZCBvbiB0aGUgaGFyZHdhcmUuCj4gPiA+ICsgKiBAcmVxOiBSZXF1ZXN0 IHN0cnVjdHVyZSB3aGljaCBoYXMgY29tcGxldGVkCj4gPiA+ICsgKiBAcHJlZW1wdDogRGlkIGl0 IGNvbXBsZXRlIHByZS1lbXB0aXZlbHk/Cj4gPiA+ICsgKiBBIHNlcXVlbmNlIG51bWJlciBoYXMg cG9wcGVkIG91dCBvZiB0aGUgaGFyZHdhcmUgYW5kIHRoZQo+ID4gPiByZXF1ZXN0IGhhbmRsaW5n Cj4gPiA+ICsgKiBjb2RlIGhhcyBtYXBwZWQgaXQgYmFjayB0byBhIHJlcXVlc3QgYW5kIHdpbGwg bWFyayB0aGF0Cj4gPiA+IHJlcXVlc3QgY29tcGxldGUuCj4gPiA+ICsgKiBJdCBhbHNvIGNhbGxz IHRoaXMgZnVuY3Rpb24gdG8gbm90aWZ5IHRoZSBzY2hlZHVsZXIgYWJvdXQgdGhlCj4gPiA+IGNv bXBsZXRpb24KPiA+ID4gKyAqIHNvIHRoZSBzY2hlZHVsZXIncyBub2RlIGNhbiBiZSB1cGRhdGVk IGFwcHJvcHJpYXRlbHkuCj4gPiA+ICsgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3QgaXMg c2NoZWR1bGVyIG1hbmFnZWQsIGZhbHNlIGlmCj4gPiA+IG5vdC4gVGhlIHJldHVybgo+ID4gPiAr ICogdmFsdWUgaXMgY29tYmluZWQgZm9yIGFsbCBmcmVzaGx5IGNvbXBsZXRlZCByZXF1ZXN0cyBh bmQgaWYKPiA+ID4gYW55IHdlcmUgdHJ1ZQo+ID4gPiArICogdGhlbiBpOTE1X3NjaGVkdWxlcl93 YWtldXAoKSBpcyBjYWxsZWQgc28gdGhlIHNjaGVkdWxlciBjYW4KPiA+ID4gZG8gZnVydGhlcgo+ ID4gPiArICogcHJvY2Vzc2luZyAoc3VibWl0IG1vcmUgd29yaykgYXQgdGhlIGVuZC4KPiA+ID4g KyAqLwo+ID4gPiArYm9vbCBpOTE1X3NjaGVkdWxlcl9ub3RpZnlfcmVxdWVzdChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QKPiA+ID4gKnJlcSkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHJlcS0+cmluZy0KPiA+ID4gPmRldik7 Cj4gPiA+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIgPSBkZXZfcHJpdi0+c2No ZWR1bGVyOwo+ID4gPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZSA9 IHJlcS0KPiA+ID4gPnNjaGVkdWxlcl9xZTsKPiA+ID4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ ID4gPiArCj4gPiA+ICsJaWYgKCFub2RlKQo+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICsK PiA+ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7Cj4gPiA+ ICsKPiA+ID4gKwlXQVJOX09OKCFJOTE1X1NRU19JU19GTFlJTkcobm9kZSkpOwo+ID4gPiArCj4g PiA+ICsJLyogTm9kZSB3YXMgaW4gZmxpZ2h0IHNvIG1hcmsgaXQgYXMgY29tcGxldGUuICovCj4g PiA+ICsJaWYgKHJlcS0+Y2FuY2VsbGVkKQo+ID4gPiArCQlub2RlLT5zdGF0dXMgPSBpOTE1X3Nx c19kZWFkOwo+ID4gPiArCWVsc2UKPiA+ID4gKwkJbm9kZS0+c3RhdHVzID0gaTkxNV9zcXNfY29t cGxldGU7Cj4gPiA+ICsKPiA+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZHVsZXIt PmxvY2ssIGZsYWdzKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiB0cnVlOwo+ID4gPiArfQo+ID4g PiArCj4gPiA+ICtzdGF0aWMgaW50IGk5MTVfc2NoZWR1bGVyX3JlbW92ZV9kZXBlbmRlbnQoc3Ry dWN0IGk5MTVfc2NoZWR1bGVyCj4gPiA+ICpzY2hlZHVsZXIsCj4gPiA+ICsJCQkJc3RydWN0Cj4g PiA+IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpyZW1vdmUpCj4gPiA+ICt7Cj4gPiA+ICsJ c3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlOwo+ID4gPiArCWludCBpLCBy Owo+ID4gPiArCWludCBjb3VudCA9IDA7Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ID4gPiArCcKgKiBF bnN1cmUgdGhhdCBhIG5vZGUgaXMgbm90IGJlaW5nIHJlbW92ZWQgd2hpY2ggaXMKPiA+ID4gc3Rp bGwgZGVwZW5kZW50Cj4gPiA+ICsJwqAqIHVwb24gb3RoZXIgKG5vdCBjb21wbGV0ZWQpIHdvcmsu IElmIHRoYXQgaGFwcGVucywgaXQKPiA+ID4gaW1wbGllcwo+ID4gPiArCcKgKiBzb21ldGhpbmcg aGFzIGdvbmUgdmVyeSB3cm9uZyB3aXRoIHRoZSBkZXBlbmRlbmN5Cj4gPiA+IHRyYWNraW5nISBO b3RlCj4gPiA+ICsJwqAqIHRoYXQgdGhlcmUgaXMgbm8gbmVlZCB0byB3b3JyeSBpZiB0aGlzIG5v ZGUgaGFzIGJlZW4KPiA+ID4gZXhwbGljaXRseQo+ID4gPiArCcKgKiBraWxsZWQgZm9yIHNvbWUg cmVhc29uIC0gaXQgbWlnaHQgYmUgYmVpbmcga2lsbGVkCj4gPiA+IGJlZm9yZSBpdCBnb3QKPiA+ ID4gKwnCoCogc2VudCB0byB0aGUgaGFyZHdhcmUuCj4gPiA+ICsJwqAqLwo+ID4gPiArCWlmIChy ZW1vdmUtPnN0YXR1cyAhPSBpOTE1X3Nxc19kZWFkKSB7Cj4gPiA+ICsJCWZvciAoaSA9IDA7IGkg PCByZW1vdmUtPm51bV9kZXBzOyBpKyspCj4gPiA+ICsJCQlpZiAoKHJlbW92ZS0+ZGVwX2xpc3Rb aV0pICYmCj4gPiA+ICsJCQnCoMKgwqDCoCghSTkxNV9TUVNfSVNfQ09NUExFVEUocmVtb3ZlLQo+ ID4gPiA+ZGVwX2xpc3RbaV0pKSkKPiA+ID4gKwkJCQljb3VudCsrOwo+ID4gPiArCQlXQVJOX09O KGNvdW50KTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ID4gPiArCcKgKiBSZW1vdmUg dGhpcyBub2RlIGZyb20gdGhlIGRlcGVuZGVuY3kgbGlzdHMgb2YgYW55Cj4gPiA+IG90aGVyIG5v ZGUgd2hpY2gKPiA+ID4gKwnCoCogbWlnaHQgYmUgd2FpdGluZyBvbiBpdC4KPiA+ID4gKwnCoCov Cj4gPiA+ICsJZm9yIChyID0gMDsgciA8IEk5MTVfTlVNX1JJTkdTOyByKyspIHsKPiA+ID4gKwkJ bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmc2NoZWR1bGVyLQo+ID4gPiA+bm9kZV9xdWV1ZVty XSwgbGluaykgewo+ID4gPiArCQkJZm9yIChpID0gMDsgaSA8IG5vZGUtPm51bV9kZXBzOyBpKysp IHsKPiA+ID4gKwkJCQlpZiAobm9kZS0+ZGVwX2xpc3RbaV0gIT0gcmVtb3ZlKQo+ID4gPiArCQkJ CQljb250aW51ZTsKPiA+ID4gKwo+ID4gPiArCQkJCW5vZGUtPmRlcF9saXN0W2ldID0gTlVMTDsK PiA+ID4gKwkJCX0KPiA+ID4gKwkJfQo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXJldHVybiAw Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGk5MTVfc2NoZWR1bGVyX3dh a2V1cCAtIHdha2UgdGhlIHNjaGVkdWxlcidzIHdvcmtlciB0aHJlYWQKPiA+ID4gKyAqIEBkZXY6 IERSTSBkZXZpY2UKPiA+ID4gKyAqIENhbGxlZCBhdCB0aGUgZW5kIG9mIHNlcW5vIGludGVycnVw dCBwcm9jZXNzaW5nIGlmIGFueQo+ID4gPiByZXF1ZXN0IGhhcwo+ID4gPiArICogY29tcGxldGVk IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBzY2hlZHVsZXIgbm9kZS4KPiA+ID4gKyAqLwo+ID4gPiAr dm9pZCBpOTE1X3NjaGVkdWxlcl93YWtldXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ID4g K3sKPiA+ID4gKwkvKiBYWFg6IE5lZWQgdG8gY2FsbCBpOTE1X3NjaGVkdWxlcl9yZW1vdmUoKSB2 aWEgd29yawo+ID4gPiBoYW5kbGVyLiAqLwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsvKioKPiA+ ID4gKyAqIGk5MTVfc2NoZWR1bGVyX2NsZWFuX25vZGUgLSBmcmVlIHVwIGFueQo+ID4gPiBhbGxv Y2F0aW9ucy9yZWZlcmVuY2VzCj4gPiA+ICsgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHNj aGVkdWxlciBxdWV1ZSBlbnRyeS4KPiA+ID4gKyAqIEBub2RlOiBRdWV1ZSBlbnRyeSBzdHJ1Y3R1 cmUgd2hpY2ggaXMgY29tcGxldGUKPiA+ID4gKyAqIEFmdGVyIGEgZ2l2ZSBiYXRjaCBidWZmZXIg Y29tcGxldGVzIG9uIHRoZSBoYXJkd2FyZSwgYWxsIHRoZQo+ID4gPiBpbmZvcm1hdGlvbgo+ID4g PiArICogcmVxdWlyZWQgdG8gcmVzdWJtaXQgaXQgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLiBIb3dl dmVyLCB0aGUKPiA+ID4gbm9kZSBlbnRyeQo+ID4gPiArICogaXRzZWxmIG1pZ2h0IHN0aWxsIGJl IHJlcXVpcmVkIGZvciB0cmFja2luZyBwdXJwb3NlcyBmb3IgYQo+ID4gPiB3aGlsZSBsb25nZXIu Cj4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYXMgc29vbiBhcyB0aGUg bm9kZSBpcyBrbm93bgo+ID4gPiB0byBiZSBjb21wbGV0ZQo+ID4gPiArICogc28gdGhhdCB0aGVz ZSByZXNvdXJjZXMgbWF5IGJlIGZyZWVkIGV2ZW4gdGhvdWdoIHRoZSBub2RlCj4gPiA+IGl0c2Vs ZiBtaWdodAo+ID4gPiArICogaGFuZyBhcm91bmQuCj4gPiA+ICsgKi8KPiA+ID4gK3ZvaWQgaTkx NV9zY2hlZHVsZXJfY2xlYW5fbm9kZShzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkK PiA+ID4gKm5vZGUpCj4gPiA+ICt7Cj4gPiA+ICsJaWYgKCFJOTE1X1NRU19JU19DT01QTEVURShu b2RlKSkgewo+ID4gPiArCQlXQVJOKCFub2RlLT5wYXJhbXMucmVxdWVzdC0+Y2FuY2VsbGVkLAo+ ID4gPiArCQnCoMKgwqDCoMKgIkNsZWFuaW5nIGFjdGl2ZSBub2RlOiAlZCFcbiIsIG5vZGUtCj4g PiA+ID5zdGF0dXMpOwo+ID4gPiArCQlyZXR1cm47Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJ aWYgKG5vZGUtPnBhcmFtcy5iYXRjaF9vYmopIHsKPiA+ID4gKwkJLyoKPiA+ID4gKwkJwqAqIFRo ZSBiYXRjaCBidWZmZXIgbXVzdCBiZSB1bnBpbm5lZCBiZWZvcmUgaXQKPiA+ID4gaXMgdW5yZWZl cmVuY2VkCj4gPiA+ICsJCcKgKiBvdGhlcndpc2UgdGhlIHVucGluIGZhaWxzIHdpdGggYSBtaXNz aW5nCj4gPiA+IHZtYSE/Cj4gPiA+ICsJCcKgKi8KPiA+ID4gKwkJaWYgKG5vZGUtPnBhcmFtcy5k aXNwYXRjaF9mbGFncyAmCj4gPiA+IEk5MTVfRElTUEFUQ0hfU0VDVVJFKQo+ID4gPiArCQkJaTkx NV9nZW1fZXhlY2J1ZmZfcmVsZWFzZV9iYXRjaF9vYmoobm9kZQo+ID4gPiAtPnBhcmFtcy5iYXRj aF9vYmopOwo+ID4gPiArCj4gPiBUaGlzIGNvZGUgc2VlbXMgbGl0dGxlIGJpdCBvdXQgb2YgcGxh Y2UuCj4gTm90IHN1cmUgd2hlcmUgZWxzZSB5b3UgY291bGQgcHV0IGl0LiBUaGUgY29kZSBpdHNl bGYgaXMganVzdCBhIGNvcHkKPiBvZsKgCj4gdGhlIGV4aXN0aW5nIGNsZWFuIHVwIGNvZGUgdGhh dCB3YXMgYWxyZWFkeSBpbiB0aGUgZXhlY2J1ZmYgY29kZQo+IHBhdGguwqAKPiBUaGUgY2xlYW51 cCBjYW4gbm8gbG9uZ2VyIGJlIGRvbmUgd2l0aGluIHRoZSBleGVjYnVmZiBjYWxsIGR1ZSB0bwo+ IHRoZcKgCj4gYmF0Y2ggYnVmZmVyIGV4ZWN1dGlvbiBiZWluZyBhcmJpdHJhcmlseSBkZWxheWVk IGJ5IHRoZSBzY2hlZHVsZXIuCj4gVGh1c8KgCj4gaXQgaXMgZG93biB0byB0aGUgc2NoZWR1bGVy IHRvIGRvIGFsbCB0aGUgbmVjZXNzYXJ5IGNsZWFudXAgd2hlbiBpdMKgCj4ga25vd3MgdGhhdCB0 aGUgYmF0Y2ggYnVmZmVyIGlzIG5vIGxvbmdlciByZXF1aXJlZC4KPiAKPiA+IAo+ID4gCj4gPiA+ IAo+ID4gPiArCQlub2RlLT5wYXJhbXMuYmF0Y2hfb2JqID0gTlVMTDsKPiA+ID4gKwl9Cj4gPiA+ ICsKPiA+ID4gKwkvKiBBbmQgYW55dGhpbmcgZWxzZSBvd25lZCBieSB0aGUgbm9kZTogKi8KPiA+ ID4gKwlpZiAobm9kZS0+cGFyYW1zLmNsaXByZWN0cykgewo+ID4gPiArCQlrZnJlZShub2RlLT5w YXJhbXMuY2xpcHJlY3RzKTsKPiA+ID4gKwkJbm9kZS0+cGFyYW1zLmNsaXByZWN0cyA9IE5VTEw7 Cj4gPiA+ICsJfQo+ID4gPiArfQo+ID4gPiArCj4gPiBUaGUgYmVsb3cgZnVuY3Rpb24gaXMgcXVp dGUgaGFja3ksIEkgdW5kZXJzdG9vZCB0aGlzIHdpbGwgYmUKPiA+IG1pdGlnYXRlZAo+ID4gYnkg cGVyLWN0eCBzZXF1ZW5jZSBudW1iZXJpbmcgaW4gdGhlIGZ1dHVyZT8KPiBUbyBiZSBob25lc3Qs IEkgdGhpbmsgaXQgaXMgYWxyZWFkeSBvYnNvbGV0ZSBkdWUgdG8gdGhlIHByZXZpb3VzIHdvcmsK PiBvZsKgCj4gY29udmVydGluZyBmcm9tIHNlcW5vIHRlc3RzIGV2ZXJ5d2hlcmUgdG8gdGVzdGlu ZyByZXF1ZXN0Cj4gc3RydWN0dXJlcy7CoAo+IFRoZSBwb2ludCBvZiB0aGUgY29kZSBiZWxvdyB3 YXMgdG8gY29wZSB3aXRoIHNlcW5vIHZhbHVlcyBwb3BwaW5nIG91dAo+IG9mwqAKPiB0aGUgaGFy ZHdhcmUgaW4gcmFuZG9tIG9yZGVyIGR1ZSB0byB0aGUgcmUtb3JkZXJpbmcgb2YgYmF0Y2ggYnVm ZmVyc8KgCj4gcHJpb3IgdG8gZXhlY3V0aW9uLiBXaGVyZWFzLCB0aGUgc3RydWN0IHJlcXVlc3Qg Y29udmVyc2lvbiBhbGxvd2VkCj4gdGhlwqAKPiBzZXFubyB0byBiZSBsYXRlIGFsbG9jYXRlZCBh bmQgdGh1cyBrZXB0IGluIG9yZGVyLgo+IAo+IFVuZm9ydHVuYXRlbHksIHByZS1lbXB0aW9uIGNv bmZ1c2VzIG1hdHRlcnMgYWdhaW4uIEFsdGhvdWdoIHRoZcKgCj4gaW50ZW50aW9uIGlzIHRoYXQg c2Vxbm8gdmFsdWVzIHdpbGwgc3RpbGwgYmUga2VwdCBpbiBvcmRlci4gSXQncwo+IGp1c3TCoAo+ IHRoYXQgYSBnaXZlbiByZXF1ZXN0IG1pZ2h0IGhhdmUgbXVsdGlwbGUgZGlmZmVyZW50IHNlcW5v IHZhbHVlcwo+IGFzc2lnbmVkwqAKPiB0byBpdCB0aHJvdWdob3V0IGl0cyBsaWZlLiBUaGUgcHJl LWVtcHRpb24gY29kZSBoYXNuJ3QgcXVpdGUgc2V0dGxlZMKgCj4gZG93biB5ZXQgdGhvdWdoLCBl c3BlY2lhbGx5IHdpdGggaW50ZXJlc3RpbmcgbmV3IGhhcmR3YXJlIHBsYW5uZWQKPiBmb3LCoAo+ IGZ1dHVyZSBjaGlwcy4gVGh1cyBJIGRvbid0IHJlYWxseSB3YW50IHRvIHJpcCBvdXQgYWxsIG9m IHRoaXMgY29kZQo+IHF1aXRlwqAKPiB5ZXQganVzdCBpbiBjYXNlIHdlIGRvIHN0aWxsIG5lZWQg aXQuCj4gCj4gQXMgeW91IHNheSwgcGVyLWN0eCBzZXFub3Mgd291bGQgZGVmaW5pdGVseSBoYXZl IGFuIGVmZmVjdCBoZXJlIGFzCj4gd2VsbC7CoAo+IFNvIHllcywgbG9uZyB0ZXJtIHRoZSBpbnRl bnRpb24gaXMgdG8gcmVtb3ZlIGFsbCB0aGlzIG5hc3R5bmVzcy4KPiBTaG9ydMKgCj4gdGVybSwg aXQgc2VlbXMgYmVzdCB0byBrZWVwIGl0IGFyb3VuZCB1bnRpbCBwcm92ZW4gdW5uZWNlc3Nhcnku Cj4gCj4gPiAKPiA+IAo+ID4gPiAKPiA+ID4gK3N0YXRpYyBib29sIGk5MTVfc2NoZWR1bGVyX3Jl bW92ZShzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIKPiA+ID4gKnNjaGVkdWxlciwKPiA+ID4gKwkJCQnC oMKgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiA+ID4gKwkJCQnCoMKgc3RydWN0IGxp c3RfaGVhZCAqcmVtb3ZlKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9x dWV1ZV9lbnRyeSAqbm9kZSwgKm5vZGVfbmV4dDsKPiA+ID4gKwlpbnQgZmx5aW5nID0gMCwgcXVl dWVkID0gMDsKPiA+ID4gKwlib29sIGRvX3N1Ym1pdDsKPiA+ID4gKwl1aW50MzJfdCBtaW5fc2Vx bm87Cj4gPiA+ICsKPiA+ID4gKwlzcGluX2xvY2tfaXJxKCZzY2hlZHVsZXItPmxvY2spOwo+ID4g PiArCj4gPiA+ICsJLyoKPiA+ID4gKwnCoCogSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHN5c3RlbSBp cyBpZGxlLCBzdGFydGluZwo+ID4gPiAnbWluX3NlcW5vJyBmcm9tIGEgYmlnCj4gPiA+ICsJwqAq IG51bWJlciB3aWxsIGNhdXNlIGFsbCBub2RlcyB0byBiZSByZW1vdmVkIGFzIHRoZXkgYXJlCj4g PiA+IG5vdyBiYWNrIHRvCj4gPiA+ICsJwqAqIGJlaW5nIGluLW9yZGVyLiBIb3dldmVyLCB0aGlz IHdpbGwgYmUgYSBwcm9ibGVtIGlmCj4gPiA+IHRoZSBsYXN0IG9uZSB0bwo+ID4gPiArCcKgKiBj b21wbGV0ZSB3YXMgYWN0dWFsbHkgb3V0LW9mLW9yZGVyIGFzIHRoZSByaW5nIHNlcW5vCj4gPiA+ IHZhbHVlIHdpbGwgYmUKPiA+ID4gKwnCoCogbG93ZXIgdGhhbiBvbmUgb3IgbW9yZSBjb21wbGV0 ZWQgYnVmZmVycy4gVGh1cyBjb2RlCj4gPiA+IGxvb2tpbmcgZm9yIHRoZQo+ID4gPiArCcKgKiBj b21wbGV0aW9uIG9mIHNhaWQgYnVmZmVycyB3aWxsIHdhaXQgZm9yZXZlci4KPiA+ID4gKwnCoCog SW5zdGVhZCwgdXNlIHRoZSBoYXJkd2FyZSBzZXFubyBhcyB0aGUgc3RhcnRpbmcKPiA+ID4gcG9p bnQuIFRoaXMgbWVhbnMKPiA+ID4gKwnCoCogdGhhdCBzb21lIGJ1ZmZlcnMgbWlnaHQgYmUga2Vw dCBhcm91bmQgZXZlbiBpbiBhCj4gPiA+IGNvbXBsZXRlbHkgaWRsZQo+ID4gPiArCcKgKiBzeXN0 ZW0gYnV0IGl0IHNob3VsZCBndWFyYW50ZWUgdGhhdCBuby1vbmUgZXZlciBnZXRzCj4gPiA+IGNv bmZ1c2VkIHdoZW4KPiA+ID4gKwnCoCogd2FpdGluZyBmb3IgYnVmZmVyIGNvbXBsZXRpb24uCj4g PiA+ICsJwqAqLwo+ID4gPiArCW1pbl9zZXFubyA9IHJpbmctPmdldF9zZXFubyhyaW5nLCB0cnVl KTsKPiA+ID4gKwo+ID4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJnNjaGVkdWxlci0+ bm9kZV9xdWV1ZVtyaW5nLQo+ID4gPiA+aWRdLCBsaW5rKSB7Cj4gPiA+ICsJCWlmIChJOTE1X1NR U19JU19RVUVVRUQobm9kZSkpCj4gPiA+ICsJCQlxdWV1ZWQrKzsKPiA+ID4gKwkJZWxzZSBpZiAo STkxNV9TUVNfSVNfRkxZSU5HKG5vZGUpKQo+ID4gPiArCQkJZmx5aW5nKys7Cj4gPiA+ICsJCWVs c2UgaWYgKEk5MTVfU1FTX0lTX0NPTVBMRVRFKG5vZGUpKQo+ID4gPiArCQkJY29udGludWU7Cj4g PiA+ICsKPiA+ID4gKwkJaWYgKG5vZGUtPnBhcmFtcy5yZXF1ZXN0LT5zZXFubyA9PSAwKQo+ID4g PiArCQkJY29udGludWU7Cj4gPiA+ICsKPiA+ID4gKwkJaWYgKCFpOTE1X3NlcW5vX3Bhc3NlZChu b2RlLT5wYXJhbXMucmVxdWVzdC0KPiA+ID4gPnNlcW5vLCBtaW5fc2Vxbm8pKQo+ID4gPiArCQkJ bWluX3NlcW5vID0gbm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNlcW5vOwo+ID4gPiArCX0KPiA+ID4g Kwo+ID4gPiArCUlOSVRfTElTVF9IRUFEKHJlbW92ZSk7Cj4gPiA+ICsJbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKG5vZGUsIG5vZGVfbmV4dCwgJnNjaGVkdWxlci0KPiA+ID4gPm5vZGVfcXVldWVb cmluZy0+aWRdLCBsaW5rKSB7Cj4gPiA+ICsJCS8qCj4gPiA+ICsJCcKgKiBPbmx5IHJlbW92ZSBj b21wbGV0ZWQgbm9kZXMgd2hpY2ggaGF2ZSBhCj4gPiA+IGxvd2VyIHNlcW5vIHRoYW4KPiA+ID4g KwkJwqAqIGFsbCBwZW5kaW5nIG5vZGVzLiBXaGlsZSB0aGVyZSBpcyB0aGUKPiA+ID4gcG9zc2li aWxpdHkgb2YgdGhlCj4gPiA+ICsJCcKgKiByaW5nJ3Mgc2Vxbm8gY291bnRpbmcgYmFja3dhcmRz LCBhbGwgaGlnaGVyCj4gPiA+IGJ1ZmZlcnMgbXVzdAo+ID4gPiArCQnCoCogYmUgcmVtZW1iZXJl ZCBzbyB0aGF0IHRoZQo+ID4gPiAnaTkxNV9zZXFub19wYXNzZWQoKScgdGVzdCBjYW4KPiA+ID4g KwkJwqAqIHJlcG9ydCB0aGF0IHRoZXkgaGF2ZSBpbiBmYWN0IHBhc3NlZC4KPiA+ID4gKwkJwqAq Cj4gPiA+ICsJCcKgKiBOQjogVGhpcyBpcyBub3QgdHJ1ZSBmb3IgJ2RlYWQnIG5vZGVzLiBUaGUK PiA+ID4gR1BVIHJlc2V0IGNhdXNlcwo+ID4gPiArCQnCoCogdGhlIHNvZnR3YXJlIHNlcW5vIHRv IHJlc3RhcnQgZnJvbSBpdHMKPiA+ID4gaW5pdGlhbCB2YWx1ZS4gVGh1cwo+ID4gPiArCQnCoCog dGhlIGRlYWQgbm9kZXMgbXVzdCBiZSByZW1vdmVkIGV2ZW4gdGhvdWdoCj4gPiA+IHRoZWlyIHNl cW5vIHZhbHVlcwo+ID4gPiArCQnCoCogYXJlIHBvdGVudGlhbGx5IHZhc3RseSBncmVhdGVyIHRo YW4gdGhlCj4gPiA+IGN1cnJlbnQgcmluZyBzZXFuby4KPiA+ID4gKwkJwqAqLwo+ID4gPiArCQlp ZiAoIUk5MTVfU1FTX0lTX0NPTVBMRVRFKG5vZGUpKQo+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ ICsKPiA+ID4gKwkJaWYgKG5vZGUtPnN0YXR1cyAhPSBpOTE1X3Nxc19kZWFkKSB7Cj4gPiA+ICsJ CQlpZiAoaTkxNV9zZXFub19wYXNzZWQobm9kZS0KPiA+ID4gPnBhcmFtcy5yZXF1ZXN0LT5zZXFu bywgbWluX3NlcW5vKSAmJgo+ID4gPiArCQkJwqDCoMKgwqAobm9kZS0+cGFyYW1zLnJlcXVlc3Qt PnNlcW5vICE9Cj4gPiA+IG1pbl9zZXFubykpCj4gPiA+ICsJCQkJY29udGludWU7Cj4gPiA+ICsJ CX0KPiA+ID4gKwo+ID4gPiArCQlsaXN0X2RlbCgmbm9kZS0+bGluayk7Cj4gPiA+ICsJCWxpc3Rf YWRkKCZub2RlLT5saW5rLCByZW1vdmUpOwo+ID4gPiArCj4gPiA+ICsJCS8qIFN0cmlwIHRoZSBk ZXBlbmRlbmN5IGluZm8gd2hpbGUgdGhlIG11dGV4IGlzCj4gPiA+IHN0aWxsIGxvY2tlZCAqLwo+ ID4gPiArCQlpOTE1X3NjaGVkdWxlcl9yZW1vdmVfZGVwZW5kZW50KHNjaGVkdWxlciwKPiA+ID4g bm9kZSk7Cj4gPiA+ICsKPiA+ID4gKwkJY29udGludWU7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ ICsJLyoKPiA+ID4gKwnCoCogUmVsZWFzZSB0aGUgaW50ZXJydXB0IHJlZmVyZW5jZSBjb3VudCBp ZiB0aGVyZSBhcmUgbm8KPiA+ID4gbG9uZ2VyIGFueQo+ID4gPiArCcKgKiBub2RlcyB0byB3b3Jy eSBhYm91dC4KPiA+ID4gKwnCoCovCj4gPiA+ICsJaWYgKCFmbHlpbmcgJiYgIXF1ZXVlZCAmJgo+ ID4gPiArCcKgwqDCoMKgKHNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+aWRdICYKPiA+ID4gaTkxNV9z Zl9pbnRlcnJ1cHRzX2VuYWJsZWQpKSB7Cj4gPiA+ICsJCXJpbmctPmlycV9wdXQocmluZyk7Cj4g PiA+ICsJCXNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+aWRdICY9Cj4gPiA+IH5pOTE1X3NmX2ludGVy cnVwdHNfZW5hYmxlZDsKPiA+IE1heWJlIGhhdmUgdGhpcyBwaWVjZSBvZiBjb2RlIGFzIGEgaGVs cGVyPyBUbyBlbmFibGUgaW50ZXJydXB0cyBhbmQKPiA+IGRpc2FibGUgdGhlbSwgbWF5YmUgZXZl biBhIHJlZmVyZW5jZSBjb3VudD8KPiBOb3Qgc3VyZSBob3cgbXVjaCB5b3UgY291bGQgYWJzdHJh Y3Qgb3V0IGludG8gYSBoZWxwZXIgb3RoZXIgdGhhbgo+IHRoZcKgCj4gdHdvIGxpbmVzIG9mIGly cV9nZXR8cHV0ICsgZmxhZyBzZXR8Y2xlYXIuIFRoZSBmbHlpbmd8cXVldWVkIHRlc3QgaXPCoAo+ IHBhcnRpY3VsYXIgdG8gdGhpcyBvbmUgaW5zdGFuY2UuIEFsc28sIHRoZXJlIGlzIG5vIG5lZWQg dG8gcmVmZXJlbmNlwqAKPiBjb3VudCBhcyB0aGUgaXJxIGNvZGUgZG9lcyB0aGF0IGFscmVhZHku Cj4gCj4gPiAKPiA+IAo+ID4gPiAKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwkvKiBMYXVuY2gg bW9yZSBwYWNrZXRzIG5vdz8gKi8KPiA+ID4gKwlkb19zdWJtaXQgPSAocXVldWVkID4gMCkgJiYg KGZseWluZyA8IHNjaGVkdWxlci0KPiA+ID4gPm1pbl9mbHlpbmcpOwo+ID4gPiArCj4gPiA+ICsJ c3Bpbl91bmxvY2tfaXJxKCZzY2hlZHVsZXItPmxvY2spOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJu IGRvX3N1Ym1pdDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArdm9pZCBpOTE1X3NjaGVkdWxlcl9w cm9jZXNzX3dvcmsoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiA+ID4gK3sKPiA+ID4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByaW5nLT5kZXYtCj4gPiA+ID5k ZXZfcHJpdmF0ZTsKPiA+ID4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciA9IGRl dl9wcml2LT5zY2hlZHVsZXI7Cj4gPiA+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2Vu dHJ5ICpub2RlOwo+ID4gPiArCWJvb2wgZG9fc3VibWl0Owo+ID4gPiArCXN0cnVjdCBsaXN0X2hl YWQgcmVtb3ZlOwo+ID4gPiArCj4gPiA+ICsJaWYgKGxpc3RfZW1wdHkoJnNjaGVkdWxlci0+bm9k ZV9xdWV1ZVtyaW5nLT5pZF0pKQo+ID4gPiArCQlyZXR1cm47Cj4gPiA+ICsKPiA+ID4gKwkvKiBS ZW1vdmUgY29tcGxldGVkIG5vZGVzLiAqLwo+ID4gPiArCWRvX3N1Ym1pdCA9IGk5MTVfc2NoZWR1 bGVyX3JlbW92ZShzY2hlZHVsZXIsIHJpbmcsCj4gPiA+ICZyZW1vdmUpOwo+ID4gPiArCj4gPiA+ ICsJaWYgKCFkb19zdWJtaXQgJiYgbGlzdF9lbXB0eSgmcmVtb3ZlKSkKPiA+ID4gKwkJcmV0dXJu Owo+ID4gPiArCj4gPiA+ICsJLyogTmVlZCB0byBncmFiIHRoZSBwbSBsb2NrIG91dHNpZGUgb2Yg dGhlIG11dGV4IGxvY2sgKi8KPiA+ID4gKwlpZiAoZG9fc3VibWl0KQo+ID4gPiArCQlpbnRlbF9y dW50aW1lX3BtX2dldChkZXZfcHJpdik7Cj4gPiA+ICsKPiA+ID4gKwltdXRleF9sb2NrKCZyaW5n LT5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoZG9fc3VibWl0KQo+ID4g PiArCQlpOTE1X3NjaGVkdWxlcl9zdWJtaXQocmluZyk7Cj4gPiA+ICsKPiA+ID4gKwl3aGlsZSAo IWxpc3RfZW1wdHkoJnJlbW92ZSkpIHsKPiA+ID4gKwkJbm9kZSA9IGxpc3RfZmlyc3RfZW50cnko JnJlbW92ZSwgdHlwZW9mKCpub2RlKSwKPiA+ID4gbGluayk7Cj4gPiA+ICsJCWxpc3RfZGVsKCZu b2RlLT5saW5rKTsKPiA+ID4gKwo+ID4gPiArCQkvKiBGcmVlIHVwIGFsbCB0aGUgRFJNIHJlZmVy ZW5jZXMgKi8KPiA+ID4gKwkJaTkxNV9zY2hlZHVsZXJfY2xlYW5fbm9kZShub2RlKTsKPiA+ID4g Kwo+ID4gPiArCQkvKiBBbmQgYW55dGhpbmcgZWxzZSBvd25lZCBieSB0aGUgbm9kZTogKi8KPiA+ ID4gKwkJbm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNjaGVkdWxlcl9xZSA9IE5VTEw7Cj4gPiA+ICsJ CWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2Uobm9kZS0KPiA+ID4gPnBhcmFtcy5yZXF1ZXN0 KTsKPiA+ID4gKwkJa2ZyZWUobm9kZS0+ZGVwX2xpc3QpOwo+ID4gPiArCQlrZnJlZShub2RlKTsK PiA+IE1heWJlIGhhdmUgYSBzZXBhcmF0ZSBoZWxwZXIgZm9yIGZyZWVpbmcgYSBub2RlLCB3b3Vs ZCBtYWtlIHRoaXMKPiA+IG11Y2gKPiA+IGNsZWFuZXIuCj4gVGhlcmUgaXMgYSBoZWxwZXIgZm9y IGZyZWVpbmcgdXAgdGhlIGNvbnRlbnRzIG9mIHRoZSBub2RlIC0gc2VlwqAKPiBpOTE1X3NjaGVk dWxlcl9jbGVhbl9ub2RlKCkgYWJvdmUuIEhvd2V2ZXIsIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVk Cj4gZnJvbcKgCj4gbXVsdGlwbGUgcGxhY2VzIGFuZCB0aGlzIGlzIHRoZSBvbmx5IGluc3RhbmNl IHdoZXJlIHRoZSBub2RlIGl0c2VsZgo+IGlzwqAKPiBhY3R1YWxseSBmcmVlZC4gVGhlIG90aGVy IGNhbGxlcnMgZWl0aGVyIG5lZWQgdG8ga2VlcCB0aGUgbm9kZQo+IGFyb3VuZMKgCj4gZm9yIGEg d2hpbGUgbG9uZ2VyIChpLmUuIHVudGlsIHRoaXMgcGllY2Ugb2YgY29kZSBjYW4gcnVuKSBvciBk b24ndAo+IG93bsKgCj4gdGhlIG5vZGUgYmVjYXVzZSBpdCBpcyBzdGFjayBhbGxvY2F0ZWQgKGlu IHRoZSBieXBhc3MgY2FzZSkuIFNvIHRoZcKgCj4gJ2FueXRoaW5nIGVsc2UnIHNlY3Rpb24gY2Fu bm90IGJlIG1vdmVkIGludG8gdGhlIGV4aXN0aW5nIGNsZWFuCj4gZnVuY3Rpb27CoAo+IGFuZCBh bnkgc2Vjb25kYXJ5IGhlbHBlciB3b3VsZCBiZSBzaW5nbGUgdXNhZ2UgYW5kIG9ubHkgZm91ciBs aW5lcwo+IGxvbmcuwqAKPiBJdCBkb2Vzbid0IHNlZW0gd29ydGggaXQuCj4gCj4gPiAKPiA+IAo+ ID4gPiAKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwltdXRleF91bmxvY2soJnJpbmctPmRldi0+ c3RydWN0X211dGV4KTsKPiA+ID4gKwo+ID4gPiArCWlmIChkb19zdWJtaXQpCj4gPiA+ICsJCWlu dGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKPiA+ID4gK30KPiA+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmgKPiA+ID4gYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5oCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g PiA+IGluZGV4IDAwMDAwMDAuLjQxNWZlYzgKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5oCj4gPiA+IEBAIC0wLDAgKzEs OTUgQEAKPiA+ID4gKy8qCj4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9y YXRpb24KPiA+ID4gKyAqCj4gPiA+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgo+ID4gPiBvYnRhaW5pbmcgYQo+ID4gPiArICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZQo+ID4gPiAiU29mdHdhcmUiKSwKPiA+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwo+ID4gPiB3aXRob3V0IGxpbWl0YXRpb24K PiA+ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLAo+ID4gPiBzdWJsaWNlbnNlLAo+ID4gPiArICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvCj4gPiA+IHdob20g dGhlCj4gPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZwo+ID4gPiBjb25kaXRpb25zOgo+ID4gPiArICoKPiA+ID4gKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCj4gPiA+IChp bmNsdWRpbmcgdGhlIG5leHQKPiA+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAo+ID4gPiBwb3J0aW9ucyBvZiB0aGUKPiA+ID4g KyAqIFNvZnR3YXJlLgo+ID4gPiArICoKPiA+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQo+ID4gPiBLSU5ELCBFWFBSRVNTIE9S Cj4gPiA+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GCj4gPiA+IE1FUkNIQU5UQUJJTElUWSwKPiA+ID4gKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuwqDCoElOIE5PCj4gPiA+IEVW RU5UIFNIQUxMCj4gPiA+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwKPiA+ID4gREFNQUdFUyBPUiBPVEhFUgo+ID4gPiArICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgo+ID4gPiBP VEhFUldJU0UsIEFSSVNJTkcKPiA+ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiA+ID4gT1RIRVIgREVBTElOR1MKPiA+ ID4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiA+ID4gKyAqCj4gPiA+ICsgKi8KPiA+ID4gKwo+ID4g PiArI2lmbmRlZiBfSTkxNV9TQ0hFRFVMRVJfSF8KPiA+ID4gKyNkZWZpbmUgX0k5MTVfU0NIRURV TEVSX0hfCj4gPiA+ICsKPiA+ID4gK2VudW0gaTkxNV9zY2hlZHVsZXJfcXVldWVfc3RhdHVzIHsK PiA+ID4gKwkvKiBMaW1ibzogKi8KPiA+ID4gKwlpOTE1X3Nxc19ub25lID0gMCwKPiA+ID4gKwkv KiBOb3QgeWV0IHN1Ym1pdHRlZCB0byBoYXJkd2FyZTogKi8KPiA+ID4gKwlpOTE1X3Nxc19xdWV1 ZWQsCj4gPiA+ICsJLyogUG9wcGVkIGZyb20gcXVldWUsIHJlYWR5IHRvIGZseTogKi8KPiA+ID4g KwlpOTE1X3Nxc19wb3BwZWQsCj4gPiA+ICsJLyogU2VudCB0byBoYXJkd2FyZSBmb3IgcHJvY2Vz c2luZzogKi8KPiA+ID4gKwlpOTE1X3Nxc19mbHlpbmcsCj4gPiA+ICsJLyogRmluaXNoZWQgcHJv Y2Vzc2luZyBvbiB0aGUgaGFyZHdhcmU6ICovCj4gPiA+ICsJaTkxNV9zcXNfY29tcGxldGUsCj4g PiA+ICsJLyogS2lsbGVkIGJ5IHdhdGNoZG9nIG9yIGNhdGFzdHJvcGhpYyBzdWJtaXNzaW9uCj4g PiA+IGZhaWx1cmU6ICovCj4gPiA+ICsJaTkxNV9zcXNfZGVhZCwKPiA+ID4gKwkvKiBMaW1pdCB2 YWx1ZSBmb3IgdXNlIHdpdGggYXJyYXlzL2xvb3BzICovCj4gPiA+ICsJaTkxNV9zcXNfTUFYCj4g PiA+ICt9Owo+ID4gPiArCj4gPiBUbyB1cHBlcmNhc2UuCj4gR3Jyci4gTGludXgga2VybmVsIHN0 eWxlIGd1aWRlIGlzIGRhZnQuCj4gCj4gPiAKPiA+IAo+ID4gPiAKPiA+ID4gKyNkZWZpbmUgSTkx NV9TUVNfSVNfUVVFVUVEKG5vZGUpCSgoKG5vZGUpLT5zdGF0dXMgPT0KPiA+ID4gaTkxNV9zcXNf cXVldWVkKSkKPiA+ID4gKyNkZWZpbmUgSTkxNV9TUVNfSVNfRkxZSU5HKG5vZGUpCSgoKG5vZGUp LT5zdGF0dXMgPT0KPiA+ID4gaTkxNV9zcXNfZmx5aW5nKSkKPiA+ID4gKyNkZWZpbmUgSTkxNV9T UVNfSVNfQ09NUExFVEUobm9kZSkJKCgobm9kZSktPnN0YXR1cyA9PQo+ID4gPiBpOTE1X3Nxc19j b21wbGV0ZSkgfHwgXAo+ID4gPiArCQkJCQnCoCgobm9kZSktPnN0YXR1cyA9PQo+ID4gPiBpOTE1 X3Nxc19kZWFkKSkKPiA+ID4gKwo+ID4gPiArc3RydWN0IGk5MTVfc2NoZWR1bGVyX29ial9lbnRy eSB7Cj4gPiA+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3TCoMKgwqDCoMKgwqDCoMKgwqDC oCpvYmo7Cj4gPiA+ICsJYm9vbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWFkX29ubHk7Cj4gPiA+ICt9Owo+ID4gPiArCj4g PiA+ICtzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgewo+ID4gPiArCXN0cnVjdCBp OTE1X2V4ZWNidWZmZXJfcGFyYW1zwqDCoMKgwqDCoMKgwqBwYXJhbXM7Cj4gPiA+ICsJLyogLTEw MjMgPSBsb3dlc3QgcHJpb3JpdHksIDAgPSBkZWZhdWx0LCAxMDIzID0gaGlnaGVzdAo+ID4gPiAq Lwo+ID4gPiArCWludDMyX3TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcHJpb3JpdHk7Cj4gPiA+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVy X29ial9lbnRyecKgwqDCoMKgwqAqc2F2ZWRfb2JqZWN0czsKPiA+ID4gKwlpbnTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBu dW1fb2JqczsKPiA+ID4gKwlib29swqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJ1bXBlZDsKPiA+ID4gKwlzdHJ1Y3QgaTkxNV9z Y2hlZHVsZXJfcXVldWVfZW50cnnCoMKgwqAqKmRlcF9saXN0Owo+ID4gPiArCWludMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG51bV9kZXBzOwo+ID4gPiArCWVudW0gaTkxNV9zY2hlZHVsZXJfcXVldWVfc3RhdHVzwqDCoMKg wqBzdGF0dXM7Cj4gPiA+ICsJdW5zaWduZWQgbG9uZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdGFtcDsKPiA+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxpbms7Cj4gPiBBYm92ZSB3aGl0ZXNw YWNlIGlzIHN0aWxsIGluY29ycmVjdCBhbmQgSSBjb3VsZCByZWFsbHkgdXNlCj4gPiBjb21tZW50 cy4KPiA+IAo+ID4gPiAKPiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gK3N0cnVjdCBpOTE1X3NjaGVk dWxlciB7Cj4gPiA+ICsJc3RydWN0IGxpc3RfaGVhZMKgwqDCoMKgbm9kZV9xdWV1ZVtJOTE1X05V TV9SSU5HU107Cj4gPiA+ICsJdWludDMyX3TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmbGFnc1tJ OTE1X05VTV9SSU5HU107Cj4gPiA+ICsJc3BpbmxvY2tfdMKgwqDCoMKgwqDCoMKgwqDCoMKgbG9j azsKPiA+ID4gKwo+ID4gPiArCS8qIFR1bmluZyBwYXJhbWV0ZXJzOiAqLwo+ID4gPiArCWludDMy X3TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByaW9yaXR5X2xldmVsX21pbjsKPiA+ID4gKwlp bnQzMl90wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcmlvcml0eV9sZXZlbF9tYXg7Cj4gPiA+ ICsJaW50MzJfdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJpb3JpdHlfbGV2ZWxfYnVtcDsK PiA+ID4gKwlpbnQzMl90wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcmlvcml0eV9sZXZlbF9w cmVlbXB0Owo+ID4gPiArCXVpbnQzMl90wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWluX2ZseWlu ZzsKPiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gKy8qIEZsYWcgYml0cyBmb3IgaTkxNV9zY2hlZHVs ZXI6OmZsYWdzICovCj4gPiA+ICtlbnVtIHsKPiA+ID4gKwlpOTE1X3NmX2ludGVycnVwdHNfZW5h YmxlZMKgwqA9ICgxIDw8IDApLAo+ID4gPiArCWk5MTVfc2Zfc3VibWl0dGluZ8KgwqDCoMKgwqDC oMKgwqDCoMKgPSAoMSA8PCAxKSwKPiA+ID4gK307Cj4gPiBUaGVzZSBtdXN0IGJlIEk5MTVfVVBQ RVJDQVNFX1NPTUVUSElORyBieSBjb252ZW50aW9uLgo+ID4gCj4gPiA+IAo+ID4gPiArCj4gPiA+ ICtib29sIGk5MTVfc2NoZWR1bGVyX2lzX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 Cj4gPiA+ICtpbnQgaTkxNV9zY2hlZHVsZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsK PiA+ID4gK3ZvaWQgaTkxNV9zY2hlZHVsZXJfY2xlYW5fbm9kZShzdHJ1Y3QgaTkxNV9zY2hlZHVs ZXJfcXVldWVfZW50cnkKPiA+ID4gKm5vZGUpOwo+ID4gPiAraW50IGk5MTVfc2NoZWR1bGVyX3F1 ZXVlX2V4ZWNidWZmZXIoc3RydWN0Cj4gPiA+IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpx ZSk7Cj4gPiA+ICtib29sIGk5MTVfc2NoZWR1bGVyX25vdGlmeV9yZXF1ZXN0KHN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdAo+ID4gPiAqcmVxKTsKPiA+ID4gK3ZvaWQgaTkxNV9zY2hlZHVsZXJf d2FrZXVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ID4gPiArCj4gPiA+ICsjZW5kaWbCoMKg LyogX0k5MTVfU0NIRURVTEVSX0hfICovCi0tIApKb29uYXMgTGFodGluZW4KT3BlbiBTb3VyY2Ug VGVjaG5vbG9neSBDZW50ZXIKSW50ZWwgQ29ycG9yYXRpb24KCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=