From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Wentland, Harry" Subject: Re: [PATCH v4 02/16] drm/dp_mst: Introduce new refcounting scheme for mstbs and ports Date: Tue, 8 Jan 2019 19:00:09 +0000 Message-ID: <85a90732-3123-d16b-658c-8153db83a7cc@amd.com> References: <20190105001506.30181-1-lyude@redhat.com> <20190105001506.30181-3-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190105001506.30181-3-lyude@redhat.com> Content-Language: en-US Content-ID: <4D88676588BF1745907BEF3C55CDFD66@namprd12.prod.outlook.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lyude Paul , "dri-devel@lists.freedesktop.org" , "intel-gfx@lists.freedesktop.org" , "nouveau@lists.freedesktop.org" , "amd-gfx@lists.freedesktop.org" Cc: David Airlie , "Zuo, Jerry" List-Id: dri-devel@lists.freedesktop.org DQoNCk9uIDIwMTktMDEtMDQgNzoxNCBwLm0uLCBMeXVkZSBQYXVsIHdyb3RlOg0KPiBUaGUgY3Vy cmVudCB3YXkgb2YgaGFuZGxpbmcgcmVmY291bnRpbmcgaW4gdGhlIERQIE1TVCBoZWxwZXJzIGlz IHJlYWxseQ0KPiBjb25mdXNpbmcgYW5kIHByb2JhYmx5IGp1c3QgcGxhaW4gd3JvbmcgYmVjYXVz ZSBpdCdzIGJlZW4gaGFja2VkIHVwIG1hbnkNCj4gdGltZXMgb3ZlciB0aGUgeWVhcnMgd2l0aG91 dCBhbnlvbmUgYWN0dWFsbHkgZ29pbmcgb3ZlciB0aGUgY29kZSBhbmQNCj4gc2VlaW5nIGlmIHRo aW5ncyBjb3VsZCBiZSBzaW1wbGlmaWVkLg0KPiANCj4gVG8gdGhlIGJlc3Qgb2YgbXkgdW5kZXJz dGFuZGluZywgdGhlIGN1cnJlbnQgc2NoZW1lIHdvcmtzIGxpa2UgdGhpczoNCj4gZHJtX2RwX21z dF9wb3J0IGFuZCBkcm1fZHBfbXN0X2JyYW5jaCBib3RoIGhhdmUgYSBzaW5nbGUgcmVmY291bnQu IFdoZW4NCj4gdGhpcyByZWZjb3VudCBoaXRzIDAgZm9yIGVpdGhlciBvZiB0aGUgdHdvLCB0aGV5 J3JlIHJlbW92ZWQgZnJvbSB0aGUNCj4gdG9wb2xvZ3kgc3RhdGUsIGJ1dCBub3QgaW1tZWRpYXRl bHkgZnJlZWQuIEJvdGggcG9ydHMgYW5kIGJyYW5jaCBkZXZpY2VzDQo+IHdpbGwgcmVpbml0aWFs aXplIHRoZWlyIGtyZWYgb25jZSBpdCdzIGhpdCAwIGJlZm9yZSBhY3R1YWxseSBkZXN0cm95aW5n DQo+IHRoZW1zZWx2ZXMuIFRoZSBpbnRlbmRlZCBwdXJwb3NlIGJlaGluZCB0aGlzIGlzIHNvIHRo YXQgd2UgY2FuIGF2b2lkDQo+IHByb2JsZW1zIGxpa2Ugbm90IGJlaW5nIGFibGUgdG8gZnJlZSBh IHJlbW90ZSBwYXlsb2FkIHRoYXQgbWlnaHQgc3RpbGwNCj4gYmUgYWN0aXZlLCBkdWUgdG8gdXMg aGF2aW5nIHJlbW92ZWQgYWxsIG9mIHRoZSBwb3J0L2JyYW5jaCBkZXZpY2UNCj4gc3RydWN0dXJl cyBpbiBtZW1vcnksIGFzIHBlcjoNCj4gDQo+IGNvbW1pdCA5MWEyNWU0NjMxMzAgKCJkcm0vZHAv bXN0OiBkZWFsbG9jYXRlIHBheWxvYWQgb24gcG9ydCBkZXN0cnVjdGlvbiIpDQo+IA0KPiBXaGlj aCBtYXkgaGF2ZSB3b3JrZWQsIGJ1dCB0aGVuIGl0IGNhdXNlZCB1c2UtYWZ0ZXItZnJlZSBlcnJv cnMuIEJlaW5nDQo+IG5ldyB0byBNU1QgYXQgdGhlIHRpbWUsIEkgdHJpZWQgZml4aW5nIGl0Ow0K PiANCj4gY29tbWl0IDI2M2VmZGUzMWY5NyAoImRybS9kcC9tc3Q6IEdldCB2YWxpZGF0ZWQgcG9y dCByZWYgaW4gZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQxKCkiKQ0KPiANCj4gQnV0LCB0aGF0 IHdhcyBicm9rZW46IGJvdGggZHJtX2RwX21zdF9wb3J0IGFuZCBkcm1fZHBfbXN0X2JyYW5jaCBz dHJ1Y3RzDQo+IGFyZSB2YWxpZGF0ZWQgaW4gYWxtb3N0IGV2ZXJ5IERQIE1TVCBoZWxwZXIgZnVu Y3Rpb24uIFNpbXBseSBwdXQsIHRoaXMNCj4gbWVhbnMgd2UgZ28gdGhyb3VnaCB0aGUgdG9wb2xv Z3kgYW5kIHRyeSB0byBzZWUgaWYgdGhlIGdpdmVuDQo+IGRybV9kcF9tc3RfYnJhbmNoIG9yIGRy bV9kcF9tc3RfcG9ydCBpcyBzdGlsbCBhdHRhY2hlZCB0byBzb21ldGhpbmcNCj4gYmVmb3JlIHRy eWluZyB0byB1c2UgaXQgaW4gb3JkZXIgdG8gYXZvaWQgZGVyZWZlcmVuY2luZyBmcmVlZCBtZW1v cnkNCj4gKHNvbWV0aGluZyB0aGF0IGhhcyBoYXBwZW5lZCBhIExPVCBpbiB0aGUgcGFzdCB3aXRo IHRoaXMgbGlicmFyeSkuDQo+IEJlY2F1c2Ugb2YgdGhpcyBpdCBkb2Vzbid0IGFjdHVhbGx5IG1h dHRlciB3aGV0aGVyIG9yIG5vdCB3ZSBrZWVwIGtlZXANCj4gdGhlIHBvcnRzIGFuZCBicmFuY2hl cyBhcm91bmQgaW4gbWVtb3J5IGFzIHRoYXQncyBub3QgZW5vdWdoLCBiZWNhdXNlDQo+IGFueSBm dW5jdGlvbiB0aGF0IHZhbGlkYXRlcyB0aGUgYnJhbmNoZXMgYW5kIHBvcnRzIHBhc3NlZCB0byBp dCB3aWxsDQo+IHN0aWxsIHJlamVjdCB0aGVtIGFueXdheSBzaW5jZSB0aGV5J3JlIG5vIGxvbmdl ciBpbiB0aGUgdG9wb2xvZ3kNCj4gc3RydWN0dXJlLiBTbywgdXNlLWFmdGVyLWZyZWUgZXJyb3Jz IHdlcmUgZml4ZWQgYnV0IHBheWxvYWQgZGVhbGxvY2F0aW9uDQo+IHdhcyBjb21wbGV0ZWx5IGJy b2tlbi4NCj4gDQo+IFR3byB5ZWFycyBsYXRlciwgQU1EIGluZm9ybWVkIG1lIGFib3V0IHRoaXMg aXNzdWUgYW5kIEkgYXR0ZW1wdGVkIHRvDQo+IGNvbWUgdXAgd2l0aCBhIHRlbXBvcmFyeSBmaXgs IHBlbmRpbmcgYSBsb25nLW92ZXJkdWUgY2xlYW51cCBvZiB0aGlzDQo+IGxpYnJhcnk6DQo+IA0K PiBjb21taXQgYzU0YzczNzRmZjQ0ICgiZHJtL2RwX21zdDogU2tpcCB2YWxpZGF0aW5nIHBvcnRz IGR1cmluZyBkZXN0cnVjdGlvbiwganVzdCByZWYiKQ0KPiANCj4gQnV0IHRoZW4gdGhhdCBpbnRy b2R1Y2VkIHVzZS1hZnRlci1mcmVlIGVycm9ycywgc28gSSBxdWlja2x5IHJldmVydGVkDQo+IGl0 Og0KPiANCj4gY29tbWl0IDk3NjU2MzViMzA3NSAoIlJldmVydCAiZHJtL2RwX21zdDogU2tpcCB2 YWxpZGF0aW5nIHBvcnRzIGR1cmluZyBkZXN0cnVjdGlvbiwganVzdCByZWYiIikNCj4gDQo+IEFu ZCBpbiB0aGUgcHJvY2VzcywgbGVhcm5lZCB0aGF0IHRoZXJlIGlzIGp1c3Qgbm8gc2ltcGxlIGZp eCBmb3IgdGhpczoNCj4gdGhlIGRlc2lnbiBpcyBqdXN0IGJyb2tlbi4gVW5mb3J0dW50ZWx5LCB0 aGUgdXNhZ2Ugb2YgdGhlc2UgaGVscGVycyBhcmUNCj4gcXVpdGUgYnJva2VuIGFzIHdlbGwuIFNv bWUgZHJpdmVycyBsaWtlIGk5MTUgaGF2ZSBiZWVuIHNtYXJ0IGVub3VnaCB0bw0KPiBhdm9pZCBh Y2Nlc3NpbmcgYW55IGtpbmQgb2YgaW5mb3JtYXRpb24gZnJvbSBNU1QgcG9ydCBzdHJ1Y3R1cmVz LCBidXQNCj4gb3RoZXJzIGxpa2Ugbm91dmVhdSBoYXZlIGFzc3VtZWQsIHVuZGVyc3RhbmRhYmx5 IHNvLCB0aGF0DQo+IGRybV9kcF9tc3RfcG9ydCBzdHJ1Y3R1cmVzIGFyZSBub3JtYWwgYW5kIGNh biBqdXN0IGJlIGFjY2Vzc2VkIGF0IGFueQ0KPiB0aW1lIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQg dXNlLWFmdGVyLWZyZWUgZXJyb3JzLg0KPiANCj4gQWZ0ZXIgYSBsb3Qgb2YgZGlzY3Vzc2lvbiwg bWUgYW5kIERhbmllbCBWZXR0ZXIgY2FtZSB1cCB3aXRoIGEgYmV0dGVyDQo+IGlkZWEgdG8gcmVw bGFjZSBhbGwgb2YgdGhpcy4NCj4gDQo+IFRvIHN1bW1hcml6ZSwgc2luY2UgdGhpcyBpcyBkb2N1 bWVudGVkIGZhciBtb3JlIGluZGVwdGggaW4gdGhlDQo+IGRvY3VtZW50YXRpb24gdGhpcyBwYXRj aCBpbnRyb2R1Y2VzLCB3ZSBtYWtlIGl0IHNvIHRoYXQgZHJtX2RwX21zdF9wb3J0DQo+IGFuZCBk cm1fZHBfbXN0X2JyYW5jaCBzdHJ1Y3R1cmVzIGhhdmUgdHdvIGRpZmZlcmVudCBjbGFzc2VzIG9m DQo+IHJlZmNvdW50czogdG9wb2xvZ3lfa3JlZiwgYW5kIG1hbGxvY19rcmVmLiB0b3BvbG9neV9r cmVmIGNvcnJlc3BvbmRzIHRvDQo+IHRoZSBsaWZldGltZSBvZiB0aGUgZ2l2ZW4gZHJtX2RwX21z dF9wb3J0IG9yIGRybV9kcF9tc3RfYnJhbmNoIGluIGl0J3MNCj4gZ2l2ZW4gdG9wb2xvZ3kuIE9u Y2UgaXQgaGl0cyB6ZXJvLCBhbnkgYXNzb2NpYXRlZCBjb25uZWN0b3JzIGFyZSByZW1vdmVkDQo+ IGFuZCB0aGUgYnJhbmNoIG9yIHBvcnQgY2FuIG5vIGxvbmdlciBiZSB2YWxpZGF0ZWQuIG1hbGxv Y19rcmVmDQo+IGNvcnJlc3BvbmRzIHRvIHRoZSBsaWZldGltZSBvZiB0aGUgbWVtb3J5IGFsbG9j YXRpb24gZm9yIHRoZSBhY3R1YWwNCj4gc3RydWN0dXJlLCBhbmQgd2lsbCBhbHdheXMgYmUgbm9u LXplcm8gc28gbG9uZyBhcyB0aGUgdG9wb2xvZ3lfa3JlZiBpcw0KPiBub24temVyby4gVGhpcyBn aXZlcyB1cyBhIHdheSB0byBhbGxvdyBjYWxsZXJzIHRvIGhvbGQgb250byBwb3J0IGFuZA0KPiBi cmFuY2ggZGV2aWNlIHN0cnVjdHVyZXMgcGFzdCB0aGVpciB0b3BvbG9neSBsaWZldGltZSwgYW5k IGRyYW1hdGljYWxseQ0KPiBzaW1wbGlmaWVzIHRoZSBsaWZldGltZXMgb2YgYm90aCBzdHJ1Y3R1 cmVzLiBUaGlzIGFsc28gZmluYWxseSBmaXhlcyB0aGUNCj4gcG9ydCBkZWFsbG9jYXRpb24gcHJv YmxlbSwgcHJvcGVybHkuDQo+IA0KPiBBZGRpdGlvbmFsbHk6IHNpbmNlIHRoaXMgbm93IG1lYW5z IHRoYXQgd2UgY2FuIGtlZXAgcG9ydHMgYW5kIGJyYW5jaA0KPiBkZXZpY2VzIGFsbG9jYXRlZCBp biBtZW1vcnkgZm9yIGhvd2V2ZXIgbG9uZyB3ZSBuZWVkLCB3ZSBubyBsb25nZXIgbmVlZA0KPiBh IHNpZ25pZmljYW50IGFtb3VudCBvZiB0aGUgcG9ydCB2YWxpZGF0aW9uIHRoYXQgd2UgY3VycmVu dGx5IGRvLg0KPiANCj4gQWRkaXRpb25hbGx5LCB0aGVyZSBpcyBvbmUgbGFzdCBzY2VuYXJpbyB0 aGF0IHRoaXMgZml4ZXMsIHdoaWNoIGNvdWxkbid0DQo+IGhhdmUgYmVlbiBmaXhlZCBwcm9wZXJs eSBiZWZvcmVoYW5kOg0KPiANCj4gLSBDUFUxIHVucmVmcyBwb3J0IGZyb20gdG9wb2xvZ3kgKHJl ZmNvdW50IDEtPjApDQo+IC0gQ1BVMiByZWZzIHBvcnQgaW4gdG9wb2xvZ3kocmVmY291bnQgMC0+ MSkNCj4gDQo+IFNpbmNlIHdlIG5vdyBjYW4gZ3VhcmFudGVlIG1lbW9yeSBzYWZldHkgZm9yIHBv cnRzIGFuZCBicmFuY2hlcw0KPiBhcy1uZWVkZWQsIHdlIGFsc28gY2FuIG1ha2Ugb3VyIG1haW4g cmVmZXJlbmNlIGNvdW50aW5nIGZ1bmN0aW9ucyBmaXgNCj4gdGhpcyBwcm9ibGVtIGJ5IHVzaW5n IGtyZWZfZ2V0X3VubGVzc196ZXJvKCkgaW50ZXJuYWxseSBzbyB0aGF0IHRvcG9sb2d5DQo+IHJl ZmNvdW50cyBjYW4gb25seSBldmVyIHJlYWNoIDAgb25jZS4NCj4gDQo+IENoYW5nZXMgc2luY2Ug djI6DQo+ICogRml4IGNvbW1pdCBtZXNzYWdlIC0gY2hlY2twYXRjaA0KPiBDaGFuZ2VzIHNpbmNl IHYxOg0KPiAqIFJlbW92ZSBmb3J3YXJkIGRlY2xhcmF0aW9ucyAtIGRhbnZldA0KPiAqIE1vdmUg IkJyYW5jaCBkZXZpY2UgYW5kIHBvcnQgcmVmY291bnRpbmciIHNlY3Rpb24gZnJvbSBkb2N1bWVu dGF0aW9uDQo+ICAgaW50byBrZXJuZWwtZG9jIGNvbW1lbnRzIC0gZGFudmV0DQo+ICogRXhwb3J0 IGludGVybmFsIHRvcG9sb2d5IGxpZmV0aW1lIGZ1bmN0aW9ucyBpbnRvIHRoZWlyIG93biBzZWN0 aW9uIGluDQo+ICAgdGhlIGtlcm5lbC1kb2NzIC0gZGFudmV0DQo+ICogcy9ALyYvZyBmb3Igc3Ry dWN0IHJlZmVyZW5jZXMgaW4ga2VybmVsLWRvY3MgLSBkYW52ZXQNCj4gKiBEcm9wIHRoZSAid2hl biB0aGV5IGFyZSBubyBsb25nZXIgYmVpbmcgdXNlZCIgYml0cyBmcm9tIHRoZSBrZXJuZWwNCj4g ICBkb2NzIC0gZGFudmV0DQo+ICogTW9kaWZ5IGRpYWdyYW1zIHRvIHNob3cgaG93IHRoZSBEUk0g ZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSB0b3BvbG9neQ0KPiAgIGFuZCBwYXlsb2FkcyAtIGRh bnZldA0KPiAqIE1ha2Ugc3VnZ2VzdGVkIGRvY3VtZW50YXRpb24gY2hhbmdlcyBmb3INCj4gICBk cm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiKCkgYW5kIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0 X3BvcnQoKSAtDQo+ICAgZGFudmV0DQo+ICogQmV0dGVyIGV4cGxhaW4gdGhlIHJlbGF0aW9uc2hp cCBiZXR3ZWVuIG1hbGxvYyByZWZzIGFuZCB0b3BvbG9neSBrcmVmcw0KPiAgIGluIHRoZSBkb2N1 bWVudGF0aW9uIGZvciBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0KCkgYW5kDQo+ICAgZHJt X2RwX21zdF90b3BvbG9neV9nZXRfbXN0YigpIC0gZGFudmV0DQo+ICogRml4ICJTZWUgYWxzbyIg aW4gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0YigpIC0gZGFudmV0DQo+ICogUmVuYW1lIGRy bV9kcF9tc3RfdG9wb2xvZ3lfZ2V0Xyhwb3J0fG1zdGIpKCkgLT4NCj4gICBkcm1fZHBfbXN0X3Rv cG9sb2d5X3RyeV9nZXRfKHBvcnR8bXN0YikoKSBhbmQNCj4gICBkcm1fZHBfbXN0X3RvcG9sb2d5 X3JlZl8ocG9ydHxtc3RiKSgpIC0+DQo+ICAgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfKHBvcnR8 bXN0YikoKSAtIGRhbnZldA0KPiAqIHMvc2hvdWxkL211c3QgaW4gZG9jcyAtIGRhbnZldA0KPiAq IFdBUk5fT04ocmVmY291bnQgPT0gMCkgaW4gdG9wb2xvZ3lfZ2V0Xyhtc3RifHBvcnQpIC0gZGFu dmV0DQo+ICogTW92ZSBrZG9jcyBmb3IgbXN0Yi9wb3J0IHN0cnVjdHMgaW5saW5lIC0gZGFudmV0 DQo+ICogU3BsaXQgZHJtX2RwX2dldF9sYXN0X2Nvbm5lY3RlZF9wb3J0X2FuZF9tc3RiKCkgY2hh bmdlcyBpbnRvIHRoZWlyIG93bg0KPiAgIGNvbW1pdCAtIGRhbnZldA0KPiANCj4gU2lnbmVkLW9m Zi1ieTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4NCj4gQ2M6IERhbmllbCBWZXR0ZXIg PGRhbmllbEBmZndsbC5jaD4NCj4gQ2M6IERhdmlkIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29t Pg0KPiBDYzogSmVycnkgWnVvIDxKZXJyeS5adW9AYW1kLmNvbT4NCj4gQ2M6IEhhcnJ5IFdlbnRs YW5kIDxoYXJyeS53ZW50bGFuZEBhbWQuY29tPg0KPiBDYzogSnVzdG9uIExpIDxqdXN0b24ubGlA aW50ZWwuY29tPg0KPiANCj4gc3F1YXNoISBkcm0vZHBfbXN0OiBJbnRyb2R1Y2UgbmV3IHJlZmNv dW50aW5nIHNjaGVtZSBmb3IgbXN0YnMgYW5kIHBvcnRzDQo+IA0KPiBzcXVhc2ghIGRybS9kcF9t c3Q6IEludHJvZHVjZSBuZXcgcmVmY291bnRpbmcgc2NoZW1lIGZvciBtc3RicyBhbmQgcG9ydHMN Cj4gDQo+ICogcy8pLTEvKSAtIDEvZyAtIGNoZWNrcGF0Y2gNCj4gDQoNCkFyZSB0aGUgYXV0byBz cXVhc2ggdGhpbmdzIGFuZCB0aGUgc3RyaW5nIHJlcGxhY2VtZW50IGNvbW1hbmQgaGVyZSBpbnRl bnRpb25hbD8NCg0KPiBTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29t Pg0KDQpDb3VwbGUgb2Ygc21hbGwgY29tbWVudHMsIG90aGVyd2lzZSB0aGlzIGNoYW5nZSBsb29r cyBjb3JyZWN0Lg0KDQpSZXZpZXdlZC1ieTogSGFycnkgV2VudGxhbmQgPGhhcnJ5LndlbnRsYW5k QGFtZC5jb20+DQoNCj4gLS0tDQo+ICAuLi4vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMS5k b3QgICAgICAgICAgfCAgNTIgKysNCj4gIC4uLi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0y LmRvdCAgICAgICAgICB8ICA1NiArKw0KPiAgLi4uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJl LTMuZG90ICAgICAgICAgIHwgIDU5ICsrKw0KPiAgRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1o ZWxwZXJzLnJzdCAgICAgICAgIHwgIDI2ICstDQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21z dF90b3BvbG9neS5jICAgICAgICAgfCA0ODIgKysrKysrKysrKysrKysrLS0tDQo+ICBpbmNsdWRl L2RybS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgICAgICAgICAgfCAgMzIgKy0NCj4gIDYgZmls ZXMgY2hhbmdlZCwgNjI5IGluc2VydGlvbnMoKyksIDc4IGRlbGV0aW9ucygtKQ0KPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMS5k b3QNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xv Z3ktZmlndXJlLTIuZG90DQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9ncHUv ZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0zLmRvdA0KPiANCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50 YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMS5kb3QgYi9Eb2N1bWVudGF0aW9uL2dw dS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTEuZG90DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ IGluZGV4IDAwMDAwMDAwMDAwMC4uMTU3ZTE3YzdlMGIwDQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0xLmRvdA0KPiBAQCAt MCwwICsxLDUyIEBADQo+ICtkaWdyYXBoIFQgew0KPiArICAgIC8qIE1ha2Ugc3VyZSBvdXIgcGF5 bG9hZHMgYXJlIGFsd2F5cyBkcmF3biBiZWxvdyB0aGUgZHJpdmVyIG5vZGUgKi8NCj4gKyAgICBz dWJncmFwaCBjbHVzdGVyX2RyaXZlciB7DQo+ICsgICAgICAgIGZpbGxjb2xvciA9IGdyZXk7DQo+ ICsgICAgICAgIHN0eWxlID0gZmlsbGVkOw0KPiArICAgICAgICBkcml2ZXIgLT4ge3BheWxvYWQx LCBwYXlsb2FkMn0gW2Rpcj1ub25lXTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvKiBEcml2ZXIg bWFsbG9jIHJlZmVyZW5jZXMgKi8NCj4gKyAgICBlZGdlIFtzdHlsZT1kYXNoZWRdOw0KPiArICAg IGRyaXZlciAtPiBwb3J0MTsNCj4gKyAgICBkcml2ZXIgLT4gcG9ydDI7DQo+ICsgICAgZHJpdmVy IC0+IHBvcnQzOmU7DQo+ICsgICAgZHJpdmVyIC0+IHBvcnQ0Ow0KPiArDQo+ICsgICAgcGF5bG9h ZDE6cyAtPiBwb3J0MTplOw0KPiArICAgIHBheWxvYWQyOnMgLT4gcG9ydDM6ZTsNCj4gKyAgICBl ZGdlIFtzdHlsZT0iIl07DQo+ICsNCj4gKyAgICBzdWJncmFwaCBjbHVzdGVyX3RvcG9sb2d5IHsN Cj4gKyAgICAgICAgbGFiZWw9IlRvcG9sb2d5IE1hbmFnZXIiOw0KPiArICAgICAgICBsYWJlbGxv Yz1ib3R0b207DQo+ICsNCj4gKyAgICAgICAgLyogVG9wb2xvZ3kgcmVmZXJlbmNlcyAqLw0KPiAr ICAgICAgICBtc3RiMSAtPiB7cG9ydDEsIHBvcnQyfTsNCj4gKyAgICAgICAgcG9ydDEgLT4gbXN0 YjI7DQo+ICsgICAgICAgIHBvcnQyIC0+IG1zdGIzIC0+IHtwb3J0MywgcG9ydDR9Ow0KPiArICAg ICAgICBwb3J0MyAtPiBtc3RiNDsNCj4gKw0KPiArICAgICAgICAvKiBNYWxsb2MgcmVmZXJlbmNl cyAqLw0KPiArICAgICAgICBlZGdlIFtzdHlsZT1kYXNoZWQ7ZGlyPWJhY2tdOw0KPiArICAgICAg ICBtc3RiMSAtPiB7cG9ydDEsIHBvcnQyfTsNCj4gKyAgICAgICAgcG9ydDEgLT4gbXN0YjI7DQo+ ICsgICAgICAgIHBvcnQyIC0+IG1zdGIzIC0+IHtwb3J0MywgcG9ydDR9Ow0KPiArICAgICAgICBw b3J0MyAtPiBtc3RiNDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBkcml2ZXIgW2xhYmVsPSJEUk0g ZHJpdmVyIjtzdHlsZT1maWxsZWQ7c2hhcGU9Ym94O2ZpbGxjb2xvcj1saWdodGJsdWVdOw0KPiAr DQo+ICsgICAgcGF5bG9hZDEgW2xhYmVsPSJQYXlsb2FkICMxIjtzdHlsZT1maWxsZWQ7c2hhcGU9 Ym94O2ZpbGxjb2xvcj1saWdodGJsdWVdOw0KPiArICAgIHBheWxvYWQyIFtsYWJlbD0iUGF5bG9h ZCAjMiI7c3R5bGU9ZmlsbGVkO3NoYXBlPWJveDtmaWxsY29sb3I9bGlnaHRibHVlXTsNCj4gKw0K PiArICAgIG1zdGIxIFtsYWJlbD0iTVNUQiAjMSI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxl Z3JlZW47c2hhcGU9b3ZhbF07DQo+ICsgICAgbXN0YjIgW2xhYmVsPSJNU1RCICMyIjtzdHlsZT1m aWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbjtzaGFwZT1vdmFsXTsNCj4gKyAgICBtc3RiMyBbbGFi ZWw9Ik1TVEIgIzMiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFsZWdyZWVuO3NoYXBlPW92YWxd Ow0KPiArICAgIG1zdGI0IFtsYWJlbD0iTVNUQiAjNCI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1w YWxlZ3JlZW47c2hhcGU9b3ZhbF07DQo+ICsNCj4gKyAgICBwb3J0MSBbbGFiZWw9IlBvcnQgIzEi O3NoYXBlPW92YWxdOw0KPiArICAgIHBvcnQyIFtsYWJlbD0iUG9ydCAjMiI7c2hhcGU9b3ZhbF07 DQo+ICsgICAgcG9ydDMgW2xhYmVsPSJQb3J0ICMzIjtzaGFwZT1vdmFsXTsNCj4gKyAgICBwb3J0 NCBbbGFiZWw9IlBvcnQgIzQiO3NoYXBlPW92YWxdOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvRG9j dW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0yLmRvdCBiL0RvY3VtZW50YXRp b24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMi5kb3QNCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi40MjQzZGQxNzM3Y2INCj4gLS0tIC9kZXYvbnVsbA0K PiArKysgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTIuZG90DQo+ IEBAIC0wLDAgKzEsNTYgQEANCj4gK2RpZ3JhcGggVCB7DQo+ICsgICAgLyogTWFrZSBzdXJlIG91 ciBwYXlsb2FkcyBhcmUgYWx3YXlzIGRyYXduIGJlbG93IHRoZSBkcml2ZXIgbm9kZSAqLw0KPiAr ICAgIHN1YmdyYXBoIGNsdXN0ZXJfZHJpdmVyIHsNCj4gKyAgICAgICAgZmlsbGNvbG9yID0gZ3Jl eTsNCj4gKyAgICAgICAgc3R5bGUgPSBmaWxsZWQ7DQo+ICsgICAgICAgIGRyaXZlciAtPiB7cGF5 bG9hZDEsIHBheWxvYWQyfSBbZGlyPW5vbmVdOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8qIERy aXZlciBtYWxsb2MgcmVmZXJlbmNlcyAqLw0KPiArICAgIGVkZ2UgW3N0eWxlPWRhc2hlZF07DQo+ ICsgICAgZHJpdmVyIC0+IHBvcnQxOw0KPiArICAgIGRyaXZlciAtPiBwb3J0MjsNCj4gKyAgICBk cml2ZXIgLT4gcG9ydDM6ZTsNCj4gKyAgICBkcml2ZXIgLT4gcG9ydDQgW2NvbG9yPXJlZF07DQo+ ICsNCj4gKyAgICBwYXlsb2FkMTpzIC0+IHBvcnQxOmU7DQo+ICsgICAgcGF5bG9hZDI6cyAtPiBw b3J0MzplOw0KPiArICAgIGVkZ2UgW3N0eWxlPSIiXTsNCj4gKw0KPiArICAgIHN1YmdyYXBoIGNs dXN0ZXJfdG9wb2xvZ3kgew0KPiArICAgICAgICBsYWJlbD0iVG9wb2xvZ3kgTWFuYWdlciI7DQo+ ICsgICAgICAgIGxhYmVsbG9jPWJvdHRvbTsNCj4gKw0KPiArICAgICAgICAvKiBUb3BvbG9neSBy ZWZlcmVuY2VzICovDQo+ICsgICAgICAgIG1zdGIxIC0+IHtwb3J0MSwgcG9ydDJ9Ow0KPiArICAg ICAgICBwb3J0MSAtPiBtc3RiMjsNCj4gKyAgICAgICAgZWRnZSBbY29sb3I9cmVkXTsNCj4gKyAg ICAgICAgcG9ydDIgLT4gbXN0YjMgLT4ge3BvcnQzLCBwb3J0NH07DQo+ICsgICAgICAgIHBvcnQz IC0+IG1zdGI0Ow0KPiArICAgICAgICBlZGdlIFtjb2xvcj0iIl07DQo+ICsNCj4gKyAgICAgICAg LyogTWFsbG9jIHJlZmVyZW5jZXMgKi8NCj4gKyAgICAgICAgZWRnZSBbc3R5bGU9ZGFzaGVkO2Rp cj1iYWNrXTsNCj4gKyAgICAgICAgbXN0YjEgLT4ge3BvcnQxLCBwb3J0Mn07DQo+ICsgICAgICAg IHBvcnQxIC0+IG1zdGIyOw0KPiArICAgICAgICBwb3J0MiAtPiBtc3RiMyAtPiBwb3J0MzsNCj4g KyAgICAgICAgZWRnZSBbY29sb3I9cmVkXTsNCj4gKyAgICAgICAgbXN0YjMgLT4gcG9ydDQ7DQo+ ICsgICAgICAgIHBvcnQzIC0+IG1zdGI0Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIG1zdGIxIFts YWJlbD0iTVNUQiAjMSI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW5dOw0KPiArICAg IG1zdGIyIFtsYWJlbD0iTVNUQiAjMiI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW5d Ow0KPiArICAgIG1zdGIzIFtsYWJlbD0iTVNUQiAjMyI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1w YWxlZ3JlZW5dOw0KPiArICAgIG1zdGI0IFtsYWJlbD0iTVNUQiAjNCI7c3R5bGU9ZmlsbGVkO2Zp bGxjb2xvcj1ncmV5XTsNCj4gKw0KPiArICAgIHBvcnQxIFtsYWJlbD0iUG9ydCAjMSJdOw0KPiAr ICAgIHBvcnQyIFtsYWJlbD0iUG9ydCAjMiJdOw0KPiArICAgIHBvcnQzIFtsYWJlbD0iUG9ydCAj MyJdOw0KPiArICAgIHBvcnQ0IFtsYWJlbD0iUG9ydCAjNCI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xv cj1ncmV5XTsNCj4gKw0KPiArICAgIGRyaXZlciBbbGFiZWw9IkRSTSBkcml2ZXIiO3N0eWxlPWZp bGxlZDtzaGFwZT1ib3g7ZmlsbGNvbG9yPWxpZ2h0Ymx1ZV07DQo+ICsNCj4gKyAgICBwYXlsb2Fk MSBbbGFiZWw9IlBheWxvYWQgIzEiO3N0eWxlPWZpbGxlZDtzaGFwZT1ib3g7ZmlsbGNvbG9yPWxp Z2h0Ymx1ZV07DQo+ICsgICAgcGF5bG9hZDIgW2xhYmVsPSJQYXlsb2FkICMyIjtzdHlsZT1maWxs ZWQ7c2hhcGU9Ym94O2ZpbGxjb2xvcj1saWdodGJsdWVdOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEv RG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0zLmRvdCBiL0RvY3VtZW50 YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMy5kb3QNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi42Y2Q3OGQwNjc3OGINCj4gLS0tIC9kZXYvbnVs bA0KPiArKysgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTMuZG90 DQo+IEBAIC0wLDAgKzEsNTkgQEANCj4gK2RpZ3JhcGggVCB7DQo+ICsgICAgLyogTWFrZSBzdXJl IG91ciBwYXlsb2FkcyBhcmUgYWx3YXlzIGRyYXduIGJlbG93IHRoZSBkcml2ZXIgbm9kZSAqLw0K PiArICAgIHN1YmdyYXBoIGNsdXN0ZXJfZHJpdmVyIHsNCj4gKyAgICAgICAgZmlsbGNvbG9yID0g Z3JleTsNCj4gKyAgICAgICAgc3R5bGUgPSBmaWxsZWQ7DQo+ICsgICAgICAgIGVkZ2UgW2Rpcj1u b25lXTsNCj4gKyAgICAgICAgZHJpdmVyIC0+IHBheWxvYWQxOw0KPiArICAgICAgICBkcml2ZXIg LT4gcGF5bG9hZDIgW3BlbndpZHRoPTNdOw0KPiArICAgICAgICBlZGdlIFtkaXI9IiJdOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIC8qIERyaXZlciBtYWxsb2MgcmVmZXJlbmNlcyAqLw0KPiArICAg IGVkZ2UgW3N0eWxlPWRhc2hlZF07DQo+ICsgICAgZHJpdmVyIC0+IHBvcnQxOw0KPiArICAgIGRy aXZlciAtPiBwb3J0MjsNCj4gKyAgICBkcml2ZXIgLT4gcG9ydDM6ZTsNCj4gKyAgICBkcml2ZXIg LT4gcG9ydDQgW2NvbG9yPWdyZXldOw0KPiArICAgIHBheWxvYWQxOnMgLT4gcG9ydDE6ZTsNCj4g KyAgICBwYXlsb2FkMjpzIC0+IHBvcnQzOmUgW3BlbndpZHRoPTNdOw0KPiArICAgIGVkZ2UgW3N0 eWxlPSIiXTsNCj4gKw0KPiArICAgIHN1YmdyYXBoIGNsdXN0ZXJfdG9wb2xvZ3kgew0KPiArICAg ICAgICBsYWJlbD0iVG9wb2xvZ3kgTWFuYWdlciI7DQo+ICsgICAgICAgIGxhYmVsbG9jPWJvdHRv bTsNCj4gKw0KPiArICAgICAgICAvKiBUb3BvbG9neSByZWZlcmVuY2VzICovDQo+ICsgICAgICAg IG1zdGIxIC0+IHtwb3J0MSwgcG9ydDJ9Ow0KPiArICAgICAgICBwb3J0MSAtPiBtc3RiMjsNCj4g KyAgICAgICAgZWRnZSBbY29sb3I9Z3JleV07DQo+ICsgICAgICAgIHBvcnQyIC0+IG1zdGIzIC0+ IHtwb3J0MywgcG9ydDR9Ow0KPiArICAgICAgICBwb3J0MyAtPiBtc3RiNDsNCj4gKyAgICAgICAg ZWRnZSBbY29sb3I9IiJdOw0KPiArDQo+ICsgICAgICAgIC8qIE1hbGxvYyByZWZlcmVuY2VzICov DQo+ICsgICAgICAgIGVkZ2UgW3N0eWxlPWRhc2hlZDtkaXI9YmFja107DQo+ICsgICAgICAgIG1z dGIxIC0+IHtwb3J0MSwgcG9ydDJ9Ow0KPiArICAgICAgICBwb3J0MSAtPiBtc3RiMjsNCj4gKyAg ICAgICAgcG9ydDIgLT4gbXN0YjMgW3BlbndpZHRoPTNdOw0KPiArICAgICAgICBtc3RiMyAtPiBw b3J0MyBbcGVud2lkdGg9M107DQo+ICsgICAgICAgIGVkZ2UgW2NvbG9yPWdyZXldOw0KPiArICAg ICAgICBtc3RiMyAtPiBwb3J0NDsNCj4gKyAgICAgICAgcG9ydDMgLT4gbXN0YjQ7DQo+ICsgICAg fQ0KPiArDQo+ICsgICAgbXN0YjEgW2xhYmVsPSJNU1RCICMxIjtzdHlsZT1maWxsZWQ7ZmlsbGNv bG9yPXBhbGVncmVlbl07DQo+ICsgICAgbXN0YjIgW2xhYmVsPSJNU1RCICMyIjtzdHlsZT1maWxs ZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbl07DQo+ICsgICAgbXN0YjMgW2xhYmVsPSJNU1RCICMzIjtz dHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbjtwZW53aWR0aD0zXTsNCj4gKyAgICBtc3Ri NCBbbGFiZWw9Ik1TVEIgIzQiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9Z3JleV07DQo+ICsNCj4g KyAgICBwb3J0MSBbbGFiZWw9IlBvcnQgIzEiXTsNCj4gKyAgICBwb3J0MiBbbGFiZWw9IlBvcnQg IzIiO3BlbndpZHRoPTVdOw0KPiArICAgIHBvcnQzIFtsYWJlbD0iUG9ydCAjMyI7cGVud2lkdGg9 M107DQo+ICsgICAgcG9ydDQgW2xhYmVsPSJQb3J0ICM0IjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9y PWdyZXldOw0KPiArDQo+ICsgICAgZHJpdmVyIFtsYWJlbD0iRFJNIGRyaXZlciI7c3R5bGU9Zmls bGVkO3NoYXBlPWJveDtmaWxsY29sb3I9bGlnaHRibHVlXTsNCj4gKw0KPiArICAgIHBheWxvYWQx IFtsYWJlbD0iUGF5bG9hZCAjMSI7c3R5bGU9ZmlsbGVkO3NoYXBlPWJveDtmaWxsY29sb3I9bGln aHRibHVlXTsNCj4gKyAgICBwYXlsb2FkMiBbbGFiZWw9IlBheWxvYWQgIzIiO3N0eWxlPWZpbGxl ZDtzaGFwZT1ib3g7ZmlsbGNvbG9yPWxpZ2h0Ymx1ZTtwZW53aWR0aD0zXTsNCj4gK30NCj4gZGlm ZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QgYi9Eb2N1bWVu dGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0DQo+IGluZGV4IGI0MjJlYjhlZGYxNi4uN2Ez ZmM1NjliYzY4IDEwMDY0NA0KPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBl cnMucnN0DQo+ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QNCj4g QEAgLTIwOCwxOCArMjA4LDQwIEBAIERpc3BsYXkgUG9ydCBEdWFsIE1vZGUgQWRhcHRvciBIZWxw ZXIgRnVuY3Rpb25zIFJlZmVyZW5jZQ0KPiAgLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2Ry bS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5jDQo+ICAgICA6ZXhwb3J0Og0KPiAgDQo+IC1EaXNw bGF5IFBvcnQgTVNUIEhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNlDQo+IC09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ICtEaXNwbGF5IFBvcnQgTVNUIEhlbHBl cnMNCj4gKz09PT09PT09PT09PT09PT09PT09PT09PQ0KPiArDQo+ICtPdmVydmlldw0KPiArLS0t LS0tLS0NCj4gIA0KPiAgLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0 X3RvcG9sb2d5LmMNCj4gICAgIDpkb2M6IGRwIG1zdCBoZWxwZXINCj4gIA0KPiArLi4ga2VybmVs LWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMNCj4gKyAgIDpkb2M6 IEJyYW5jaCBkZXZpY2UgYW5kIHBvcnQgcmVmY291bnRpbmcNCj4gKw0KPiArRnVuY3Rpb25zIFJl ZmVyZW5jZQ0KPiArLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArDQo+ICAuLiBrZXJuZWwtZG9jOjog aW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaA0KPiAgICAgOmludGVybmFsOg0KPiAgDQo+ ICAuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYw0K PiAgICAgOmV4cG9ydDoNCj4gIA0KPiArVG9wb2xvZ3kgTGlmZXRpbWUgSW50ZXJuYWxzDQo+ICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gKw0KPiArVGhlc2UgZnVuY3Rpb25zIGFyZW4n dCBleHBvcnRlZCB0byBkcml2ZXJzLCBidXQgYXJlIGRvY3VtZW50ZWQgaGVyZSB0byBoZWxwIG1h a2UNCj4gK3RoZSBNU1QgdG9wb2xvZ3kgaGVscGVycyBlYXNpZXIgdG8gdW5kZXJzdGFuZA0KPiAr DQo+ICsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3ku Yw0KPiArICAgOmZ1bmN0aW9uczogZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X21zdGIgZHJt X2RwX21zdF90b3BvbG9neV9nZXRfbXN0Yg0KPiArICAgICAgICAgICAgICAgZHJtX2RwX21zdF90 b3BvbG9neV9wdXRfbXN0Yg0KPiArICAgICAgICAgICAgICAgZHJtX2RwX21zdF90b3BvbG9neV90 cnlfZ2V0X3BvcnQgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydA0KPiArICAgICAgICAgICAg ICAgZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydA0KPiArICAgICAgICAgICAgICAgZHJtX2Rw X21zdF9nZXRfbXN0Yl9tYWxsb2MgZHJtX2RwX21zdF9wdXRfbXN0Yl9tYWxsb2MNCj4gKw0KPiAg TUlQSSBEU0kgSGVscGVyIEZ1bmN0aW9ucyBSZWZlcmVuY2UNCj4gID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQo+ICANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9k cm1fZHBfbXN0X3RvcG9sb2d5LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9n eS5jDQo+IGluZGV4IDZmOWIyMTEwNjlhNy4uYzBkYzIwZmJkNTVhIDEwMDY0NA0KPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMNCj4gQEAgLTg1MCw0NiArODUwLDIxMSBAQCBzdGF0 aWMgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICpkcm1fZHBfYWRkX21zdF9icmFuY2hfZGV2aWNl KHU4IGxjdCwgdTggKnJhZCkNCj4gIAlpZiAobGN0ID4gMSkNCj4gIAkJbWVtY3B5KG1zdGItPnJh ZCwgcmFkLCBsY3QgLyAyKTsNCj4gIAlJTklUX0xJU1RfSEVBRCgmbXN0Yi0+cG9ydHMpOw0KPiAt CWtyZWZfaW5pdCgmbXN0Yi0+a3JlZik7DQo+ICsJa3JlZl9pbml0KCZtc3RiLT50b3BvbG9neV9r cmVmKTsNCj4gKwlrcmVmX2luaXQoJm1zdGItPm1hbGxvY19rcmVmKTsNCj4gIAlyZXR1cm4gbXN0 YjsNCj4gIH0NCj4gIA0KPiAtc3RhdGljIHZvaWQgZHJtX2RwX2ZyZWVfbXN0X3BvcnQoc3RydWN0 IGtyZWYgKmtyZWYpOw0KPiAtDQo+ICBzdGF0aWMgdm9pZCBkcm1fZHBfZnJlZV9tc3RfYnJhbmNo X2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZikNCj4gIHsNCj4gLQlzdHJ1Y3QgZHJtX2RwX21zdF9i cmFuY2ggKm1zdGIgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNo LCBrcmVmKTsNCj4gLQlpZiAobXN0Yi0+cG9ydF9wYXJlbnQpIHsNCj4gLQkJaWYgKGxpc3RfZW1w dHkoJm1zdGItPnBvcnRfcGFyZW50LT5uZXh0KSkNCj4gLQkJCWtyZWZfcHV0KCZtc3RiLT5wb3J0 X3BhcmVudC0+a3JlZiwgZHJtX2RwX2ZyZWVfbXN0X3BvcnQpOw0KPiAtCX0NCj4gKwlzdHJ1Y3Qg ZHJtX2RwX21zdF9icmFuY2ggKm1zdGIgPQ0KPiArCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0 IGRybV9kcF9tc3RfYnJhbmNoLCBtYWxsb2Nfa3JlZik7DQo+ICsNCj4gKwlpZiAobXN0Yi0+cG9y dF9wYXJlbnQpDQo+ICsJCWRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKG1zdGItPnBvcnRfcGFy ZW50KTsNCj4gKw0KPiAgCWtmcmVlKG1zdGIpOw0KPiAgfQ0KPiAgDQo+ICsvKioNCj4gKyAqIERP QzogQnJhbmNoIGRldmljZSBhbmQgcG9ydCByZWZjb3VudGluZw0KPiArICoNCj4gKyAqIFRvcG9s b2d5IHJlZmNvdW50IG92ZXJ2aWV3DQo+ICsgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0K PiArICoNCj4gKyAqIFRoZSByZWZjb3VudGluZyBzY2hlbWVzIGZvciAmc3RydWN0IGRybV9kcF9t c3RfYnJhbmNoIGFuZCAmc3RydWN0DQo+ICsgKiBkcm1fZHBfbXN0X3BvcnQgYXJlIHNvbWV3aGF0 IHVudXN1YWwuIEJvdGggcG9ydHMgYW5kIGJyYW5jaCBkZXZpY2VzIGhhdmUNCj4gKyAqIHR3byBk aWZmZXJlbnQga2luZHMgb2YgcmVmY291bnRzOiB0b3BvbG9neSByZWZjb3VudHMsIGFuZCBtYWxs b2MgcmVmY291bnRzLg0KPiArICoNCj4gKyAqIFRvcG9sb2d5IHJlZmNvdW50cyBhcmUgbm90IGV4 cG9zZWQgdG8gZHJpdmVycywgYW5kIGFyZSBoYW5kbGVkIGludGVybmFsbHkNCj4gKyAqIGJ5IHRo ZSBEUCBNU1QgaGVscGVycy4gVGhlIGhlbHBlcnMgdXNlIHRoZW0gaW4gb3JkZXIgdG8gcHJldmVu dCB0aGUNCj4gKyAqIGluLW1lbW9yeSB0b3BvbG9neSBzdGF0ZSBmcm9tIGJlaW5nIGNoYW5nZWQg aW4gdGhlIG1pZGRsZSBvZiBjcml0aWNhbA0KPiArICogb3BlcmF0aW9ucyBsaWtlIGNoYW5naW5n IHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiBwYXlsb2FkIGFsbG9jYXRpb25zLiBUaGlzDQo+ICsgKiBt ZWFucyBlYWNoIGJyYW5jaCBhbmQgcG9ydCB3aWxsIGJlIGNvbnNpZGVyZWQgdG8gYmUgY29ubmVj dGVkIHRvIHRoZSByZXN0DQo+ICsgKiBvZiB0aGUgdG9wb2xvZ3kgdW50aWwgaXQncyB0b3BvbG9n eSByZWZjb3VudCByZWFjaGVzIHplcm8uIEFkZGl0aW9uYWxseSwNCj4gKyAqIGZvciBwb3J0cyB0 aGlzIG1lYW5zIHRoYXQgdGhlaXIgYXNzb2NpYXRlZCAmc3RydWN0IGRybV9jb25uZWN0b3Igd2ls bCBzdGF5DQo+ICsgKiByZWdpc3RlcmVkIHdpdGggdXNlcnNwYWNlIHVudGlsIHRoZSBwb3J0J3Mg cmVmY291bnQgcmVhY2hlcyAwLg0KPiArICoNCj4gKyAqIE1hbGxvYyByZWZjb3VudCBvdmVydmll dw0KPiArICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQo+ICsgKg0KPiArICogTWFsbG9jIHJl ZmVyZW5jZXMgYXJlIHVzZWQgdG8ga2VlcCBhICZzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IG9yICZz dHJ1Y3QNCj4gKyAqIGRybV9kcF9tc3RfYnJhbmNoIGFsbG9jYXRlZCBldmVuIGFmdGVyIGFsbCBv ZiBpdHMgdG9wb2xvZ3kgcmVmZXJlbmNlcyBoYXZlDQo+ICsgKiBiZWVuIGRyb3BwZWQsIHNvIHRo YXQgdGhlIGRyaXZlciBvciBNU1QgaGVscGVycyBjYW4gc2FmZWx5IGFjY2VzcyBlYWNoDQo+ICsg KiBicmFuY2gncyBsYXN0IGtub3duIHN0YXRlIGJlZm9yZSBpdCB3YXMgZGlzY29ubmVjdGVkIGZy b20gdGhlIHRvcG9sb2d5Lg0KPiArICogV2hlbiB0aGUgbWFsbG9jIHJlZmNvdW50IG9mIGEgcG9y dCBvciBicmFuY2ggcmVhY2hlcyAwLCB0aGUgbWVtb3J5DQo+ICsgKiBhbGxvY2F0aW9uIGNvbnRh aW5pbmcgdGhlICZzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggb3IgJnN0cnVjdA0KPiArICogZHJt X2RwX21zdF9wb3J0IHJlc3BlY3RpdmVseSB3aWxsIGJlIGZyZWVkLg0KPiArICoNCj4gKyAqIEZv ciAmc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoLCBtYWxsb2MgcmVmY291bnRzIGFyZSBub3QgY3Vy cmVudGx5IGV4cG9zZWQNCj4gKyAqIHRvIGRyaXZlcnMuIEFzIG9mIHdyaXRpbmcgdGhpcyBkb2N1 bWVudGF0aW9uLCB0aGVyZSBhcmUgbm8gZHJpdmVycyB0aGF0DQo+ICsgKiBoYXZlIGEgdXNlY2Fz ZSBmb3IgYWNjZXNzaW5nICZzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggb3V0c2lkZSBvZiB0aGUg TVNUDQo+ICsgKiBoZWxwZXJzLiBFeHBvc2luZyB0aGlzIEFQSSB0byBkcml2ZXJzIGluIGEgcmFj ZS1mcmVlIG1hbm5lciB3b3VsZCB0YWtlIG1vcmUNCj4gKyAqIHR3ZWFraW5nIG9mIHRoZSByZWZj b3VudGluZyBzY2hlbWUsIGhvd2V2ZXIgcGF0Y2hlcyBhcmUgd2VsY29tZSBwcm92aWRlZA0KPiAr ICogdGhlcmUgaXMgYSBsZWdpdGltYXRlIGRyaXZlciB1c2VjYXNlIGZvciB0aGlzLg0KPiArICoN Cj4gKyAqIFJlZmNvdW50IHJlbGF0aW9uc2hpcHMgaW4gYSB0b3BvbG9neQ0KPiArICogfn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQo+ICsgKg0KPiArICogTGV0J3MgdGFrZSBh IGxvb2sgYXQgd2h5IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0b3BvbG9neSBhbmQgbWFsbG9j DQo+ICsgKiByZWZjb3VudHMgaXMgZGVzaWduZWQgdGhlIHdheSBpdCBpcy4NCj4gKyAqDQo+ICsg KiAuLiBrZXJuZWwtZmlndXJlOjogZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0xLmRvdA0KPiArICoN Cj4gKyAqICAgIEFuIGV4YW1wbGUgb2YgdG9wb2xvZ3kgYW5kIG1hbGxvYyByZWZzIGluIGEgRFAg TVNUIHRvcG9sb2d5IHdpdGggdHdvDQo+ICsgKiAgICBhY3RpdmUgcGF5bG9hZHMuIFRvcG9sb2d5 IHJlZmNvdW50IGluY3JlbWVudHMgYXJlIGluZGljYXRlZCBieSBzb2xpZA0KPiArICogICAgbGlu ZXMsIGFuZCBtYWxsb2MgcmVmY291bnQgaW5jcmVtZW50cyBhcmUgaW5kaWNhdGVkIGJ5IGRhc2hl ZCBsaW5lcy4NCj4gKyAqICAgIEVhY2ggc3RhcnRzIGZyb20gdGhlIGJyYW5jaCB3aGljaCBpbmNy ZW1lbnRlZCB0aGUgcmVmY291bnQsIGFuZCBlbmRzIGF0DQo+ICsgKiAgICB0aGUgYnJhbmNoIHRv IHdoaWNoIHRoZSByZWZjb3VudCBiZWxvbmdzIHRvLg0KPiArICoNCj4gKyAqIEFzIHlvdSBjYW4g c2VlIGluIGZpZ3VyZSAxLCBldmVyeSBicmFuY2ggaW5jcmVtZW50cyB0aGUgdG9wb2xvZ3kgcmVm Y291bnQNCj4gKyAqIG9mIGl0J3MgY2hpbGRyZW4sIGFuZCBpbmNyZW1lbnRzIHRoZSBtYWxsb2Mg cmVmY291bnQgb2YgaXQncyBwYXJlbnQuDQo+ICsgKiBBZGRpdGlvbmFsbHksIGV2ZXJ5IHBheWxv YWQgaW5jcmVtZW50cyB0aGUgbWFsbG9jIHJlZmNvdW50IG9mIGl0J3MgYXNzaWduZWQNCj4gKyAq IHBvcnQgYnkgMS4NCj4gKyAqDQo+ICsgKiBTbywgd2hhdCB3b3VsZCBoYXBwZW4gaWYgTVNUQiAj MyBmcm9tIHRoZSBhYm92ZSBmaWd1cmUgd2FzIHVucGx1Z2dlZCBmcm9tDQo+ICsgKiB0aGUgc3lz dGVtLCBidXQgdGhlIGRyaXZlciBoYWRuJ3QgeWV0IHJlbW92ZWQgcGF5bG9hZCAjMiBmcm9tIHBv cnQgIzM/IFRoZQ0KPiArICogdG9wb2xvZ3kgd291bGQgc3RhcnQgdG8gbG9vayBsaWtlIGZpZ3Vy ZSAyLg0KPiArICoNCj4gKyAqIC4uIGtlcm5lbC1maWd1cmU6OiBkcC1tc3QvdG9wb2xvZ3ktZmln dXJlLTIuZG90DQo+ICsgKg0KPiArICogICAgUG9ydHMgYW5kIGJyYW5jaCBkZXZpY2VzIHdoaWNo IGhhdmUgYmVlbiByZWxlYXNlZCBmcm9tIG1lbW9yeSBhcmUNCj4gKyAqICAgIGNvbG9yZWQgZ3Jl eSwgYW5kIHJlZmVyZW5jZXMgd2hpY2ggaGF2ZSBiZWVuIHJlbW92ZWQgYXJlIGNvbG9yZWQgcmVk Lg0KPiArICoNCj4gKyAqIFdoZW5ldmVyIGEgcG9ydCBvciBicmFuY2ggZGV2aWNlJ3MgdG9wb2xv Z3kgcmVmY291bnQgcmVhY2hlcyB6ZXJvLCBpdCB3aWxsDQo+ICsgKiBkZWNyZW1lbnQgdGhlIHRv cG9sb2d5IHJlZmNvdW50cyBvZiBhbGwgaXRzIGNoaWxkcmVuLCB0aGUgbWFsbG9jIHJlZmNvdW50 DQo+ICsgKiBvZiBpdHMgcGFyZW50LCBhbmQgZmluYWxseSBpdHMgb3duIG1hbGxvYyByZWZjb3Vu dC4gRm9yIE1TVEIgIzQgYW5kIHBvcnQNCj4gKyAqICM0LCB0aGlzIG1lYW5zIHRoZXkgYm90aCBo YXZlIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gdGhlIHRvcG9sb2d5IGFuZCBmcmVlZA0KPiArICog ZnJvbSBtZW1vcnkuIEJ1dCwgYmVjYXVzZSBwYXlsb2FkICMyIGlzIHN0aWxsIGhvbGRpbmcgYSBy ZWZlcmVuY2UgdG8gcG9ydA0KPiArICogIzMsIHBvcnQgIzMgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0 b3BvbG9neSBidXQgaXQncyAmc3RydWN0IGRybV9kcF9tc3RfcG9ydA0KPiArICogaXMgc3RpbGwg YWNjZXNzaWJsZSBmcm9tIG1lbW9yeS4gVGhpcyBhbHNvIG1lYW5zIHBvcnQgIzMgaGFzIG5vdCB5 ZXQNCj4gKyAqIGRlY3JlbWVudGVkIHRoZSBtYWxsb2MgcmVmY291bnQgb2YgTVNUQiAjMywgc28g aXQncyAmc3RydWN0DQo+ICsgKiBkcm1fZHBfbXN0X2JyYW5jaCB3aWxsIGFsc28gc3RheSBhbGxv Y2F0ZWQgaW4gbWVtb3J5IHVudGlsIHBvcnQgIzMncw0KPiArICogbWFsbG9jIHJlZmNvdW50IHJl YWNoZXMgMC4NCj4gKyAqDQo+ICsgKiBUaGlzIHJlbGF0aW9uc2hpcCBpcyBuZWNlc3NhcnkgYmVj YXVzZSBpbiBvcmRlciB0byByZWxlYXNlIHBheWxvYWQgIzIsIHdlDQo+ICsgKiBuZWVkIHRvIGJl IGFibGUgdG8gZmlndXJlIG91dCB0aGUgbGFzdCByZWxhdGl2ZSBvZiBwb3J0ICMzIHRoYXQncyBz dGlsbA0KPiArICogY29ubmVjdGVkIHRvIHRoZSB0b3BvbG9neS4gSW4gdGhpcyBjYXNlLCB3ZSB3 b3VsZCB0cmF2ZWwgdXAgdGhlIHRvcG9sb2d5IGFzDQo+ICsgKiBzaG93biBpbiBmaWd1cmUgMy4N Cj4gKyAqDQo+ICsgKiAuLiBrZXJuZWwtZmlndXJlOjogZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0z LmRvdA0KPiArICoNCj4gKyAqIEFuZCBmaW5hbGx5LCByZW1vdmUgcGF5bG9hZCAjMiBieSBjb21t dW5pY2F0aW5nIHdpdGggcG9ydCAjMiB0aHJvdWdoDQo+ICsgKiBzaWRlYmFuZCB0cmFuc2FjdGlv bnMuDQo+ICsgKi8NCj4gKw0KDQpMb3ZlIHRoZSBkb2Mgd2l0aCBncmFwaHMgYW5kIGRldGFpbGVk IGV4cGxhbmF0aW9uIG9mIHdoeSB0aGVyZSBhcmUgbm93IHR3byByZWZjb3VudHMuDQoNCj4gKy8q Kg0KPiArICogZHJtX2RwX21zdF9nZXRfbXN0Yl9tYWxsb2MoKSAtIEluY3JlbWVudCB0aGUgbWFs bG9jIHJlZmNvdW50IG9mIGEgYnJhbmNoDQo+ICsgKiBkZXZpY2UNCj4gKyAqIEBtc3RiOiBUaGUg JnN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCB0byBpbmNyZW1lbnQgdGhlIG1hbGxvYyByZWZjb3Vu dCBvZg0KPiArICoNCj4gKyAqIEluY3JlbWVudHMgJmRybV9kcF9tc3RfYnJhbmNoLm1hbGxvY19r cmVmLiBXaGVuDQo+ICsgKiAmZHJtX2RwX21zdF9icmFuY2gubWFsbG9jX2tyZWYgcmVhY2hlcyAw LCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZm9yIEBtc3RiDQo+ICsgKiB3aWxsIGJlIHJlbGVhc2Vk IGFuZCBAbXN0YiBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQuDQo+ICsgKg0KPiArICogU2VlIGFsc286 IGRybV9kcF9tc3RfcHV0X21zdGJfbWFsbG9jKCkNCj4gKyAqLw0KPiArc3RhdGljIHZvaWQNCj4g K2RybV9kcF9tc3RfZ2V0X21zdGJfbWFsbG9jKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0 YikNCj4gK3sNCj4gKwlrcmVmX2dldCgmbXN0Yi0+bWFsbG9jX2tyZWYpOw0KPiArCURSTV9ERUJV RygibXN0YiAlcCAoJWQpXG4iLCBtc3RiLCBrcmVmX3JlYWQoJm1zdGItPm1hbGxvY19rcmVmKSk7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RwX21zdF9wdXRfbXN0Yl9tYWxsb2MoKSAt IERlY3JlbWVudCB0aGUgbWFsbG9jIHJlZmNvdW50IG9mIGEgYnJhbmNoDQo+ICsgKiBkZXZpY2UN Cj4gKyAqIEBtc3RiOiBUaGUgJnN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCB0byBkZWNyZW1lbnQg dGhlIG1hbGxvYyByZWZjb3VudCBvZg0KPiArICoNCj4gKyAqIERlY3JlbWVudHMgJmRybV9kcF9t c3RfYnJhbmNoLm1hbGxvY19rcmVmLiBXaGVuDQo+ICsgKiAmZHJtX2RwX21zdF9icmFuY2gubWFs bG9jX2tyZWYgcmVhY2hlcyAwLCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZm9yIEBtc3RiDQo+ICsg KiB3aWxsIGJlIHJlbGVhc2VkIGFuZCBAbXN0YiBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQuDQo+ICsg Kg0KPiArICogU2VlIGFsc286IGRybV9kcF9tc3RfZ2V0X21zdGJfbWFsbG9jKCkNCj4gKyAqLw0K PiArc3RhdGljIHZvaWQNCj4gK2RybV9kcF9tc3RfcHV0X21zdGJfbWFsbG9jKHN0cnVjdCBkcm1f ZHBfbXN0X2JyYW5jaCAqbXN0YikNCj4gK3sNCj4gKwlEUk1fREVCVUcoIm1zdGIgJXAgKCVkKVxu IiwgbXN0Yiwga3JlZl9yZWFkKCZtc3RiLT5tYWxsb2Nfa3JlZikgLSAxKTsNCj4gKwlrcmVmX3B1 dCgmbXN0Yi0+bWFsbG9jX2tyZWYsIGRybV9kcF9mcmVlX21zdF9icmFuY2hfZGV2aWNlKTsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgZHJtX2RwX2ZyZWVfbXN0X3BvcnQoc3RydWN0IGtyZWYg KmtyZWYpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCA9DQo+ICsJCWNv bnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0LCBtYWxsb2Nfa3JlZik7DQo+ ICsNCj4gKwlkcm1fZHBfbXN0X3B1dF9tc3RiX21hbGxvYyhwb3J0LT5wYXJlbnQpOw0KPiArCWtm cmVlKHBvcnQpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kcF9tc3RfZ2V0X3BvcnRf bWFsbG9jKCkgLSBJbmNyZW1lbnQgdGhlIG1hbGxvYyByZWZjb3VudCBvZiBhbiBNU1QgcG9ydA0K PiArICogQHBvcnQ6IFRoZSAmc3RydWN0IGRybV9kcF9tc3RfcG9ydCB0byBpbmNyZW1lbnQgdGhl IG1hbGxvYyByZWZjb3VudCBvZg0KPiArICoNCj4gKyAqIEluY3JlbWVudHMgJmRybV9kcF9tc3Rf cG9ydC5tYWxsb2Nfa3JlZi4gV2hlbiAmZHJtX2RwX21zdF9wb3J0Lm1hbGxvY19rcmVmDQo+ICsg KiByZWFjaGVzIDAsIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgQHBvcnQgd2lsbCBiZSByZWxl YXNlZCBhbmQgQHBvcnQgbWF5DQo+ICsgKiBubyBsb25nZXIgYmUgdXNlZC4NCj4gKyAqDQo+ICsg KiBCZWNhdXNlIEBwb3J0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGZyZWVkIGF0IGFueSB0aW1lIGJ5 IHRoZSBEUCBNU1QgaGVscGVycw0KPiArICogaWYgJmRybV9kcF9tc3RfcG9ydC5tYWxsb2Nfa3Jl ZiByZWFjaGVzIDAsIGluY2x1ZGluZyBkdXJpbmcgYSBjYWxsIHRvIHRoaXMNCj4gKyAqIGZ1bmN0 aW9uLCBkcml2ZXJzIHRoYXQgd2hpY2ggdG8gbWFrZSB1c2Ugb2YgJnN0cnVjdCBkcm1fZHBfbXN0 X3BvcnQgc2hvdWxkDQoNCi9zL3doaWNoL3dpc2gvZw0KDQo+ICsgKiBlbnN1cmUgdGhhdCB0aGV5 IGdyYWIgYXQgbGVhc3Qgb25lIG1haW4gbWFsbG9jIHJlZmVyZW5jZSB0byB0aGVpciBNU1QgcG9y dHMNCj4gKyAqIGluICZkcm1fZHBfbXN0X3RvcG9sb2d5X2Nicy5hZGRfY29ubmVjdG9yLiBUaGlz IGNhbGxiYWNrIGlzIGNhbGxlZCBiZWZvcmUNCj4gKyAqIHRoZXJlIGlzIGFueSBjaGFuY2UgZm9y ICZkcm1fZHBfbXN0X3BvcnQubWFsbG9jX2tyZWYgdG8gcmVhY2ggMC4NCj4gKyAqDQo+ICsgKiBT ZWUgYWxzbzogZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxsb2MoKQ0KPiArICovDQo+ICt2b2lkDQo+ ICtkcm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYyhzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0 KQ0KPiArew0KPiArCWtyZWZfZ2V0KCZwb3J0LT5tYWxsb2Nfa3JlZik7DQo+ICsJRFJNX0RFQlVH KCJwb3J0ICVwICglZClcbiIsIHBvcnQsIGtyZWZfcmVhZCgmcG9ydC0+bWFsbG9jX2tyZWYpKTsN Cj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9nZXRfcG9ydF9tYWxsb2MpOw0KPiAr DQo+ICsvKioNCj4gKyAqIGRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKCkgLSBEZWNyZW1lbnQg dGhlIG1hbGxvYyByZWZjb3VudCBvZiBhbiBNU1QgcG9ydA0KPiArICogQHBvcnQ6IFRoZSAmc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCB0byBkZWNyZW1lbnQgdGhlIG1hbGxvYyByZWZjb3VudCBvZg0K PiArICoNCj4gKyAqIERlY3JlbWVudHMgJmRybV9kcF9tc3RfcG9ydC5tYWxsb2Nfa3JlZi4gV2hl biAmZHJtX2RwX21zdF9wb3J0Lm1hbGxvY19rcmVmDQo+ICsgKiByZWFjaGVzIDAsIHRoZSBtZW1v cnkgYWxsb2NhdGlvbiBmb3IgQHBvcnQgd2lsbCBiZSByZWxlYXNlZCBhbmQgQHBvcnQgbWF5DQo+ ICsgKiBubyBsb25nZXIgYmUgdXNlZC4NCj4gKyAqDQo+ICsgKiBTZWUgYWxzbzogZHJtX2RwX21z dF9nZXRfcG9ydF9tYWxsb2MoKQ0KPiArICovDQo+ICt2b2lkDQo+ICtkcm1fZHBfbXN0X3B1dF9w b3J0X21hbGxvYyhzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQ0KPiArew0KPiArCURSTV9E RUJVRygicG9ydCAlcCAoJWQpXG4iLCBwb3J0LCBrcmVmX3JlYWQoJnBvcnQtPm1hbGxvY19rcmVm KSAtIDEpOw0KPiArCWtyZWZfcHV0KCZwb3J0LT5tYWxsb2Nfa3JlZiwgZHJtX2RwX2ZyZWVfbXN0 X3BvcnQpOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxv Yyk7DQo+ICsNCj4gIHN0YXRpYyB2b2lkIGRybV9kcF9kZXN0cm95X21zdF9icmFuY2hfZGV2aWNl KHN0cnVjdCBrcmVmICprcmVmKQ0KPiAgew0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAq bXN0YiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gsIGtyZWYp Ow0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiA9DQo+ICsJCWNvbnRhaW5lcl9v ZihrcmVmLCBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gsIHRvcG9sb2d5X2tyZWYpOw0KPiArCXN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyID0gbXN0Yi0+bWdyOw0KPiAgCXN0cnVj dCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsICp0bXA7DQo+ICAJYm9vbCB3YWtlX3R4ID0gZmFsc2U7 DQo+ICANCj4gLQkvKg0KPiAtCSAqIGluaXQga3JlZiBhZ2FpbiB0byBiZSB1c2VkIGJ5IHBvcnRz IHRvIHJlbW92ZSBtc3QgYnJhbmNoIHdoZW4gaXQgaXMNCj4gLQkgKiBub3QgbmVlZGVkIGFueW1v cmUNCj4gLQkgKi8NCj4gLQlrcmVmX2luaXQoa3JlZik7DQo+IC0NCj4gLQlpZiAobXN0Yi0+cG9y dF9wYXJlbnQgJiYgbGlzdF9lbXB0eSgmbXN0Yi0+cG9ydF9wYXJlbnQtPm5leHQpKQ0KPiAtCQlr cmVmX2dldCgmbXN0Yi0+cG9ydF9wYXJlbnQtPmtyZWYpOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBk ZXN0cm95IGFsbCBwb3J0cyAtIGRvbid0IG5lZWQgbG9jaw0KPiAtCSAqIGFzIHRoZXJlIGFyZSBu byBtb3JlIHJlZmVyZW5jZXMgdG8gdGhlIG1zdCBicmFuY2gNCj4gLQkgKiBkZXZpY2UgYXQgdGhp cyBwb2ludC4NCj4gLQkgKi8NCj4gKwltdXRleF9sb2NrKCZtZ3ItPmxvY2spOw0KPiAgCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCB0bXAsICZtc3RiLT5wb3J0cywgbmV4dCkgew0KPiAg CQlsaXN0X2RlbCgmcG9ydC0+bmV4dCk7DQo+ICAJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3Bv cnQocG9ydCk7DQo+ICAJfQ0KPiArCW11dGV4X3VubG9jaygmbWdyLT5sb2NrKTsNCj4gIA0KPiAg CS8qIGRyb3AgYW55IHR4IHNsb3RzIG1zZyAqLw0KPiAgCW11dGV4X2xvY2soJm1zdGItPm1nci0+ cWxvY2spOw0KPiBAQCAtOTA4LDE0ICsxMDczLDgzIEBAIHN0YXRpYyB2b2lkIGRybV9kcF9kZXN0 cm95X21zdF9icmFuY2hfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVmKQ0KPiAgCWlmICh3YWtlX3R4 KQ0KPiAgCQl3YWtlX3VwX2FsbCgmbXN0Yi0+bWdyLT50eF93YWl0cSk7DQo+ICANCj4gLQlrcmVm X3B1dChrcmVmLCBkcm1fZHBfZnJlZV9tc3RfYnJhbmNoX2RldmljZSk7DQo+ICsJZHJtX2RwX21z dF9wdXRfbXN0Yl9tYWxsb2MobXN0Yik7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2Rw X21zdF90b3BvbG9neV90cnlfZ2V0X21zdGIoKSAtIEluY3JlbWVudCB0aGUgdG9wb2xvZ3kgcmVm Y291bnQgb2YgYQ0KPiArICogYnJhbmNoIGRldmljZSB1bmxlc3MgaXRzIHplcm8NCj4gKyAqIEBt c3RiOiAmc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoIHRvIGluY3JlbWVudCB0aGUgdG9wb2xvZ3kg cmVmY291bnQgb2YNCj4gKyAqDQo+ICsgKiBBdHRlbXB0cyB0byBncmFiIGEgdG9wb2xvZ3kgcmVm ZXJlbmNlIHRvIEBtc3RiLCBpZiBpdCBoYXNuJ3QgeWV0IGJlZW4NCj4gKyAqIHJlbW92ZWQgZnJv bSB0aGUgdG9wb2xvZ3kgKGUuZy4gJmRybV9kcF9tc3RfYnJhbmNoLnRvcG9sb2d5X2tyZWYgaGFz DQo+ICsgKiByZWFjaGVkIDApLiBIb2xkaW5nIGEgdG9wb2xvZ3kgcmVmZXJlbmNlIGltcGxpZXMg dGhhdCBhIG1hbGxvYyByZWZlcmVuY2UNCj4gKyAqIHdpbGwgYmUgaGVsZCB0byBAbXN0YiBhcyBs b25nIGFzIHRoZSB1c2VyIGhvbGRzIHRoZSB0b3BvbG9neSByZWZlcmVuY2UuDQo+ICsgKg0KPiAr ICogQ2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gZW5zdXJlIHRoYXQgdGhlIHVzZXIgaGFzIGF0IGxl YXN0IG9uZSBtYWxsb2MNCj4gKyAqIHJlZmVyZW5jZSB0byBAbXN0Yi4gSWYgeW91IGFscmVhZHkg aGF2ZSBhIHRvcG9sb2d5IHJlZmVyZW5jZSB0byBAbXN0YiwgeW91DQo+ICsgKiBzaG91bGQgdXNl IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGIoKSBpbnN0ZWFkLg0KPiArICoNCj4gKyAqIFNl ZSBhbHNvOg0KPiArICogZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0YigpDQo+ICsgKiBkcm1f ZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3RiKCkNCj4gKyAqDQo+ICsgKiBSZXR1cm5zOg0KPiArICog KiAxOiBBIHRvcG9sb2d5IHJlZmVyZW5jZSB3YXMgZ3JhYmJlZCBzdWNjZXNzZnVsbHkNCj4gKyAq ICogMDogQHBvcnQgaXMgbm8gbG9uZ2VyIGluIHRoZSB0b3BvbG9neSwgbm8gcmVmZXJlbmNlIHdh cyBncmFiYmVkDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrDQo+ICtkcm1fZHBf bXN0X3RvcG9sb2d5X3RyeV9nZXRfbXN0YihzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIp DQo+ICt7DQo+ICsJaW50IHJldCA9IGtyZWZfZ2V0X3VubGVzc196ZXJvKCZtc3RiLT50b3BvbG9n eV9rcmVmKTsNCj4gKw0KPiArCWlmIChyZXQpDQo+ICsJCURSTV9ERUJVRygibXN0YiAlcCAoJWQp XG4iLCBtc3RiLA0KPiArCQkJICBrcmVmX3JlYWQoJm1zdGItPnRvcG9sb2d5X2tyZWYpKTsNCj4g Kw0KPiArCXJldHVybiByZXQ7DQo+ICB9DQo+ICANCj4gLXN0YXRpYyB2b2lkIGRybV9kcF9tc3Rf dG9wb2xvZ3lfcHV0X21zdGIoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiKQ0KPiArLyoq DQo+ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiKCkgLSBJbmNyZW1lbnQgdGhlIHRv cG9sb2d5IHJlZmNvdW50IG9mIGENCj4gKyAqIGJyYW5jaCBkZXZpY2UNCj4gKyAqIEBtc3RiOiBU aGUgJnN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCB0byBpbmNyZW1lbnQgdGhlIHRvcG9sb2d5IHJl ZmNvdW50IG9mDQo+ICsgKg0KPiArICogSW5jcmVtZW50cyAmZHJtX2RwX21zdF9icmFuY2gudG9w b2xvZ3lfcmVmY291bnQgd2l0aG91dCBjaGVja2luZyB3aGV0aGVyIG9yDQo+ICsgKiBub3QgaXQn cyBhbHJlYWR5IHJlYWNoZWQgMC4gVGhpcyBpcyBvbmx5IHZhbGlkIHRvIHVzZSBpbiBzY2VuYXJp b3Mgd2hlcmUNCj4gKyAqIHlvdSBhcmUgYWxyZWFkeSBndWFyYW50ZWVkIHRvIGhhdmUgYXQgbGVh c3Qgb25lIGFjdGl2ZSB0b3BvbG9neSByZWZlcmVuY2UNCj4gKyAqIHRvIEBtc3RiLiBPdGhlcndp c2UsIGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9tc3RiKCkgbXVzdCBiZSB1c2VkLg0KPiAr ICoNCj4gKyAqIFNlZSBhbHNvOg0KPiArICogZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X21z dGIoKQ0KPiArICogZHJtX2RwX21zdF90b3BvbG9neV9wdXRfbXN0YigpDQo+ICsgKi8NCj4gK3N0 YXRpYyB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGIoc3RydWN0IGRybV9kcF9tc3Rf YnJhbmNoICptc3RiKQ0KPiAgew0KPiAtCWtyZWZfcHV0KCZtc3RiLT5rcmVmLCBkcm1fZHBfZGVz dHJveV9tc3RfYnJhbmNoX2RldmljZSk7DQo+ICsJV0FSTl9PTihrcmVmX3JlYWQoJm1zdGItPnRv cG9sb2d5X2tyZWYpID09IDApOw0KPiArCWtyZWZfZ2V0KCZtc3RiLT50b3BvbG9neV9rcmVmKTsN Cj4gKwlEUk1fREVCVUcoIm1zdGIgJXAgKCVkKVxuIiwgbXN0Yiwga3JlZl9yZWFkKCZtc3RiLT50 b3BvbG9neV9rcmVmKSk7DQo+ICB9DQo+ICANCj4gKy8qKg0KPiArICogZHJtX2RwX21zdF90b3Bv bG9neV9wdXRfbXN0YigpIC0gcmVsZWFzZSBhIHRvcG9sb2d5IHJlZmVyZW5jZSB0byBhIGJyYW5j aA0KPiArICogZGV2aWNlDQo+ICsgKiBAbXN0YjogVGhlICZzdHJ1Y3QgZHJtX2RwX21zdF9icmFu Y2ggdG8gcmVsZWFzZSB0aGUgdG9wb2xvZ3kgcmVmZXJlbmNlIGZyb20NCj4gKyAqDQo+ICsgKiBS ZWxlYXNlcyBhIHRvcG9sb2d5IHJlZmVyZW5jZSBmcm9tIEBtc3RiIGJ5IGRlY3JlbWVudGluZw0K PiArICogJmRybV9kcF9tc3RfYnJhbmNoLnRvcG9sb2d5X2tyZWYuDQo+ICsgKg0KPiArICogU2Vl IGFsc286DQo+ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfbXN0YigpDQo+ICsgKiBk cm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiKCkNCj4gKyAqLw0KPiArc3RhdGljIHZvaWQNCj4g K2RybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X21zdGIoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICpt c3RiKQ0KPiArew0KPiArCURSTV9ERUJVRygibXN0YiAlcCAoJWQpXG4iLA0KPiArCQkgIG1zdGIs IGtyZWZfcmVhZCgmbXN0Yi0+dG9wb2xvZ3lfa3JlZikgLSAxKTsNCj4gKwlrcmVmX3B1dCgmbXN0 Yi0+dG9wb2xvZ3lfa3JlZiwgZHJtX2RwX2Rlc3Ryb3lfbXN0X2JyYW5jaF9kZXZpY2UpOw0KPiAr fQ0KPiAgDQo+ICBzdGF0aWMgdm9pZCBkcm1fZHBfcG9ydF90ZWFyZG93bl9wZHQoc3RydWN0IGRy bV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IG9sZF9wZHQpDQo+ICB7DQo+IEBAIC05MzcsNyArMTE3 MSw4IEBAIHN0YXRpYyB2b2lkIGRybV9kcF9wb3J0X3RlYXJkb3duX3BkdChzdHJ1Y3QgZHJtX2Rw X21zdF9wb3J0ICpwb3J0LCBpbnQgb2xkX3BkdCkNCj4gIA0KPiAgc3RhdGljIHZvaWQgZHJtX2Rw X2Rlc3Ryb3lfcG9ydChzdHJ1Y3Qga3JlZiAqa3JlZikNCj4gIHsNCj4gLQlzdHJ1Y3QgZHJtX2Rw X21zdF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQsIGtyZWYpOw0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQgPQ0KPiArCQljb250 YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9kcF9tc3RfcG9ydCwgdG9wb2xvZ3lfa3JlZik7DQo+ ICAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IgPSBwb3J0LT5tZ3I7DQo+ICAN Cj4gIAlpZiAoIXBvcnQtPmlucHV0KSB7DQo+IEBAIC05NTYsNyArMTE5MSw2IEBAIHN0YXRpYyB2 b2lkIGRybV9kcF9kZXN0cm95X3BvcnQoc3RydWN0IGtyZWYgKmtyZWYpDQo+ICAJCQkgKiBmcm9t IGFuIEVESUQgcmV0cmlldmFsICovDQo+ICANCj4gIAkJCW11dGV4X2xvY2soJm1nci0+ZGVzdHJv eV9jb25uZWN0b3JfbG9jayk7DQo+IC0JCQlrcmVmX2dldCgmcG9ydC0+cGFyZW50LT5rcmVmKTsN Cj4gIAkJCWxpc3RfYWRkKCZwb3J0LT5uZXh0LCAmbWdyLT5kZXN0cm95X2Nvbm5lY3Rvcl9saXN0 KTsNCj4gIAkJCW11dGV4X3VubG9jaygmbWdyLT5kZXN0cm95X2Nvbm5lY3Rvcl9sb2NrKTsNCj4g IAkJCXNjaGVkdWxlX3dvcmsoJm1nci0+ZGVzdHJveV9jb25uZWN0b3Jfd29yayk7DQo+IEBAIC05 NjcsMTIgKzEyMDEsNzkgQEAgc3RhdGljIHZvaWQgZHJtX2RwX2Rlc3Ryb3lfcG9ydChzdHJ1Y3Qg a3JlZiAqa3JlZikNCj4gIAkJZHJtX2RwX3BvcnRfdGVhcmRvd25fcGR0KHBvcnQsIHBvcnQtPnBk dCk7DQo+ICAJCXBvcnQtPnBkdCA9IERQX1BFRVJfREVWSUNFX05PTkU7DQo+ICAJfQ0KPiAtCWtm cmVlKHBvcnQpOw0KPiArCWRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKHBvcnQpOw0KPiAgfQ0K PiAgDQo+ICsvKioNCj4gKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9wb3J0KCkgLSBJ bmNyZW1lbnQgdGhlIHRvcG9sb2d5IHJlZmNvdW50IG9mIGENCj4gKyAqIHBvcnQgdW5sZXNzIGl0 cyB6ZXJvDQo+ICsgKiBAcG9ydDogJnN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgdG8gaW5jcmVtZW50 IHRoZSB0b3BvbG9neSByZWZjb3VudCBvZg0KPiArICoNCj4gKyAqIEF0dGVtcHRzIHRvIGdyYWIg YSB0b3BvbG9neSByZWZlcmVuY2UgdG8gQHBvcnQsIGlmIGl0IGhhc24ndCB5ZXQgYmVlbg0KPiAr ICogcmVtb3ZlZCBmcm9tIHRoZSB0b3BvbG9neSAoZS5nLiAmZHJtX2RwX21zdF9wb3J0LnRvcG9s b2d5X2tyZWYgaGFzIHJlYWNoZWQNCj4gKyAqIDApLiBIb2xkaW5nIGEgdG9wb2xvZ3kgcmVmZXJl bmNlIGltcGxpZXMgdGhhdCBhIG1hbGxvYyByZWZlcmVuY2Ugd2lsbCBiZQ0KPiArICogaGVsZCB0 byBAcG9ydCBhcyBsb25nIGFzIHRoZSB1c2VyIGhvbGRzIHRoZSB0b3BvbG9neSByZWZlcmVuY2Uu DQo+ICsgKg0KPiArICogQ2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gZW5zdXJlIHRoYXQgdGhlIHVz ZXIgaGFzIGF0IGxlYXN0IG9uZSBtYWxsb2MNCj4gKyAqIHJlZmVyZW5jZSB0byBAcG9ydC4gSWYg eW91IGFscmVhZHkgaGF2ZSBhIHRvcG9sb2d5IHJlZmVyZW5jZSB0byBAcG9ydCwgeW91DQo+ICsg KiBzaG91bGQgdXNlIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnQoKSBpbnN0ZWFkLg0KPiAr ICoNCj4gKyAqIFNlZSBhbHNvOg0KPiArICogZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydCgp DQo+ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KCkNCj4gKyAqDQo+ICsgKiBSZXR1 cm5zOg0KPiArICogKiAxOiBBIHRvcG9sb2d5IHJlZmVyZW5jZSB3YXMgZ3JhYmJlZCBzdWNjZXNz ZnVsbHkNCj4gKyAqICogMDogQHBvcnQgaXMgbm8gbG9uZ2VyIGluIHRoZSB0b3BvbG9neSwgbm8g cmVmZXJlbmNlIHdhcyBncmFiYmVkDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNr DQo+ICtkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0KQ0KPiArew0KPiArCWludCByZXQgPSBrcmVmX2dldF91bmxlc3NfemVybygmcG9y dC0+dG9wb2xvZ3lfa3JlZik7DQo+ICsNCj4gKwlpZiAocmV0KQ0KPiArCQlEUk1fREVCVUcoInBv cnQgJXAgKCVkKVxuIiwgcG9ydCwNCj4gKwkJCSAga3JlZl9yZWFkKCZwb3J0LT50b3BvbG9neV9r cmVmKSk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRy bV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnQoKSAtIEluY3JlbWVudCB0aGUgdG9wb2xvZ3kgcmVm Y291bnQgb2YgYSBwb3J0DQo+ICsgKiBAcG9ydDogVGhlICZzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0 IHRvIGluY3JlbWVudCB0aGUgdG9wb2xvZ3kgcmVmY291bnQgb2YNCj4gKyAqDQo+ICsgKiBJbmNy ZW1lbnRzICZkcm1fZHBfbXN0X3BvcnQudG9wb2xvZ3lfcmVmY291bnQgd2l0aG91dCBjaGVja2lu ZyB3aGV0aGVyIG9yDQo+ICsgKiBub3QgaXQncyBhbHJlYWR5IHJlYWNoZWQgMC4gVGhpcyBpcyBv bmx5IHZhbGlkIHRvIHVzZSBpbiBzY2VuYXJpb3Mgd2hlcmUNCj4gKyAqIHlvdSBhcmUgYWxyZWFk eSBndWFyYW50ZWVkIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGFjdGl2ZSB0b3BvbG9neSByZWZlcmVu Y2UNCj4gKyAqIHRvIEBwb3J0LiBPdGhlcndpc2UsIGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dl dF9wb3J0KCkgbXVzdCBiZSB1c2VkLg0KPiArICoNCj4gKyAqIFNlZSBhbHNvOg0KPiArICogZHJt X2RwX21zdF90b3BvbG9neV90cnlfZ2V0X3BvcnQoKQ0KPiArICogZHJtX2RwX21zdF90b3BvbG9n eV9wdXRfcG9ydCgpDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lf Z2V0X3BvcnQoc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkNCj4gK3sNCj4gKwlXQVJOX09O KGtyZWZfcmVhZCgmcG9ydC0+dG9wb2xvZ3lfa3JlZikgPT0gMCk7DQo+ICsJa3JlZl9nZXQoJnBv cnQtPnRvcG9sb2d5X2tyZWYpOw0KPiArCURSTV9ERUJVRygicG9ydCAlcCAoJWQpXG4iLCBwb3J0 LCBrcmVmX3JlYWQoJnBvcnQtPnRvcG9sb2d5X2tyZWYpKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KCkgLSByZWxlYXNlIGEgdG9wb2xvZ3kg cmVmZXJlbmNlIHRvIGEgcG9ydA0KPiArICogQHBvcnQ6IFRoZSAmc3RydWN0IGRybV9kcF9tc3Rf cG9ydCB0byByZWxlYXNlIHRoZSB0b3BvbG9neSByZWZlcmVuY2UgZnJvbQ0KPiArICoNCj4gKyAq IFJlbGVhc2VzIGEgdG9wb2xvZ3kgcmVmZXJlbmNlIGZyb20gQHBvcnQgYnkgZGVjcmVtZW50aW5n DQo+ICsgKiAmZHJtX2RwX21zdF9wb3J0LnRvcG9sb2d5X2tyZWYuDQo+ICsgKg0KPiArICogU2Vl IGFsc286DQo+ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfcG9ydCgpDQo+ICsgKiBk cm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0KCkNCj4gKyAqLw0KPiAgc3RhdGljIHZvaWQgZHJt X2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQ0K PiAgew0KPiAtCWtyZWZfcHV0KCZwb3J0LT5rcmVmLCBkcm1fZHBfZGVzdHJveV9wb3J0KTsNCj4g KwlEUk1fREVCVUcoInBvcnQgJXAgKCVkKVxuIiwNCj4gKwkJICBwb3J0LCBrcmVmX3JlYWQoJnBv cnQtPnRvcG9sb2d5X2tyZWYpIC0gMSk7DQo+ICsJa3JlZl9wdXQoJnBvcnQtPnRvcG9sb2d5X2ty ZWYsIGRybV9kcF9kZXN0cm95X3BvcnQpOw0KPiAgfQ0KPiAgDQo+ICBzdGF0aWMgc3RydWN0IGRy bV9kcF9tc3RfYnJhbmNoICoNCj4gQEAgLTk4MSwxMCArMTI4MiwxMCBAQCBkcm1fZHBfbXN0X3Rv cG9sb2d5X2dldF9tc3RiX3ZhbGlkYXRlZF9sb2NrZWQoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNo ICptc3RiLA0KPiAgew0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7DQo+ICAJc3Ry dWN0IGRybV9kcF9tc3RfYnJhbmNoICpybXN0YjsNCj4gLQlpZiAodG9fZmluZCA9PSBtc3RiKSB7 DQo+IC0JCWtyZWZfZ2V0KCZtc3RiLT5rcmVmKTsNCj4gKw0KPiArCWlmICh0b19maW5kID09IG1z dGIpDQo+ICAJCXJldHVybiBtc3RiOw0KPiAtCX0NCj4gKw0KPiAgCWxpc3RfZm9yX2VhY2hfZW50 cnkocG9ydCwgJm1zdGItPnBvcnRzLCBuZXh0KSB7DQo+ICAJCWlmIChwb3J0LT5tc3RiKSB7DQo+ ICAJCQlybXN0YiA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGJfdmFsaWRhdGVkX2xvY2tl ZCgNCj4gQEAgLTEwMDEsMjUgKzEzMDIsMzIgQEAgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0 Yl92YWxpZGF0ZWQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICAJCQkJ ICAgICAgIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YikNCj4gIHsNCj4gIAlzdHJ1Y3Qg ZHJtX2RwX21zdF9icmFuY2ggKnJtc3RiID0gTlVMTDsNCj4gKw0KPiAgCW11dGV4X2xvY2soJm1n ci0+bG9jayk7DQo+IC0JaWYgKG1nci0+bXN0X3ByaW1hcnkpDQo+ICsJaWYgKG1nci0+bXN0X3By aW1hcnkpIHsNCj4gIAkJcm1zdGIgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiX3ZhbGlk YXRlZF9sb2NrZWQoDQo+ICAJCSAgICBtZ3ItPm1zdF9wcmltYXJ5LCBtc3RiKTsNCj4gKw0KPiAr CQlpZiAocm1zdGIgJiYgIWRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9tc3RiKHJtc3RiKSkN Cj4gKwkJCXJtc3RiID0gTlVMTDsNCj4gKwl9DQo+ICAJbXV0ZXhfdW5sb2NrKCZtZ3ItPmxvY2sp Ow0KPiAgCXJldHVybiBybXN0YjsNCj4gIH0NCj4gIA0KPiAtc3RhdGljIHN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKmRybV9kcF9tc3RfZ2V0X3BvcnRfcmVmX2xvY2tlZChzdHJ1Y3QgZHJtX2RwX21z dF9icmFuY2ggKm1zdGIsIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnRvX2ZpbmQpDQo+ICtzdGF0 aWMgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqDQo+ICtkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9w b3J0X3ZhbGlkYXRlZF9sb2NrZWQoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiLA0KPiAr CQkJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICp0b19maW5kKQ0KPiAgew0KPiAgCXN0 cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsICptcG9ydDsNCj4gIA0KPiAgCWxpc3RfZm9yX2Vh Y2hfZW50cnkocG9ydCwgJm1zdGItPnBvcnRzLCBuZXh0KSB7DQo+IC0JCWlmIChwb3J0ID09IHRv X2ZpbmQpIHsNCj4gLQkJCWtyZWZfZ2V0KCZwb3J0LT5rcmVmKTsNCj4gKwkJaWYgKHBvcnQgPT0g dG9fZmluZCkNCj4gIAkJCXJldHVybiBwb3J0Ow0KPiAtCQl9DQo+ICsNCj4gIAkJaWYgKHBvcnQt Pm1zdGIpIHsNCj4gLQkJCW1wb3J0ID0gZHJtX2RwX21zdF9nZXRfcG9ydF9yZWZfbG9ja2VkKHBv cnQtPm1zdGIsIHRvX2ZpbmQpOw0KPiArCQkJbXBvcnQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dl dF9wb3J0X3ZhbGlkYXRlZF9sb2NrZWQoDQo+ICsJCQkgICAgcG9ydC0+bXN0YiwgdG9fZmluZCk7 DQo+ICAJCQlpZiAobXBvcnQpDQo+ICAJCQkJcmV0dXJuIG1wb3J0Ow0KPiAgCQl9DQo+IEBAIC0x MDMyLDkgKzEzNDAsMTUgQEAgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQo c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICAJCQkJICAgICAgIHN0cnVj dCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpDQo+ICB7DQo+ICAJc3RydWN0IGRybV9kcF9tc3RfcG9y dCAqcnBvcnQgPSBOVUxMOw0KPiArDQo+ICAJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsNCj4gLQlp ZiAobWdyLT5tc3RfcHJpbWFyeSkNCj4gLQkJcnBvcnQgPSBkcm1fZHBfbXN0X2dldF9wb3J0X3Jl Zl9sb2NrZWQobWdyLT5tc3RfcHJpbWFyeSwgcG9ydCk7DQo+ICsJaWYgKG1nci0+bXN0X3ByaW1h cnkpIHsNCj4gKwkJcnBvcnQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlkYXRl ZF9sb2NrZWQoDQo+ICsJCSAgICBtZ3ItPm1zdF9wcmltYXJ5LCBwb3J0KTsNCj4gKw0KPiArCQlp ZiAocnBvcnQgJiYgIWRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9wb3J0KHJwb3J0KSkNCj4g KwkJCXJwb3J0ID0gTlVMTDsNCj4gKwl9DQo+ICAJbXV0ZXhfdW5sb2NrKCZtZ3ItPmxvY2spOw0K PiAgCXJldHVybiBycG9ydDsNCj4gIH0NCj4gQEAgLTEwNDIsMTEgKzEzNTYsMTIgQEAgZHJtX2Rw X21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyICptZ3IsDQo+ICBzdGF0aWMgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqZHJtX2RwX2dl dF9wb3J0KHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiwgdTggcG9ydF9udW0pDQo+ICB7 DQo+ICAJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsNCj4gKwlpbnQgcmV0Ow0KPiAgDQo+ ICAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmbXN0Yi0+cG9ydHMsIG5leHQpIHsNCj4gIAkJ aWYgKHBvcnQtPnBvcnRfbnVtID09IHBvcnRfbnVtKSB7DQo+IC0JCQlrcmVmX2dldCgmcG9ydC0+ a3JlZik7DQo+IC0JCQlyZXR1cm4gcG9ydDsNCj4gKwkJCXJldCA9IGRybV9kcF9tc3RfdG9wb2xv Z3lfdHJ5X2dldF9wb3J0KHBvcnQpOw0KPiArCQkJcmV0dXJuIHJldCA/IHBvcnQgOiBOVUxMOw0K PiAgCQl9DQo+ICAJfQ0KPiAgDQo+IEBAIC0xMDk1LDYgKzE0MTAsMTEgQEAgc3RhdGljIGJvb2wg ZHJtX2RwX3BvcnRfc2V0dXBfcGR0KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpDQo+ICAJ CWlmIChwb3J0LT5tc3RiKSB7DQo+ICAJCQlwb3J0LT5tc3RiLT5tZ3IgPSBwb3J0LT5tZ3I7DQo+ ICAJCQlwb3J0LT5tc3RiLT5wb3J0X3BhcmVudCA9IHBvcnQ7DQo+ICsJCQkvKg0KPiArCQkJICog TWFrZSBzdXJlIHRoaXMgcG9ydCdzIG1lbW9yeSBhbGxvY2F0aW9uIHN0YXlzDQo+ICsJCQkgKiBh cm91bmQgdW50aWwgaXQncyBjaGlsZCBNU1RCIHJlbGVhc2VzIGl0DQo+ICsJCQkgKi8NCj4gKwkJ CWRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKHBvcnQpOw0KPiAgDQo+ICAJCQlzZW5kX2xpbmsg PSB0cnVlOw0KPiAgCQl9DQo+IEBAIC0xMTU1LDE3ICsxNDc1LDI2IEBAIHN0YXRpYyB2b2lkIGRy bV9kcF9hZGRfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIsDQo+ICAJYm9vbCBj cmVhdGVkID0gZmFsc2U7DQo+ICAJaW50IG9sZF9wZHQgPSAwOw0KPiAgCWludCBvbGRfZGRwcyA9 IDA7DQo+ICsNCj4gIAlwb3J0ID0gZHJtX2RwX2dldF9wb3J0KG1zdGIsIHBvcnRfbXNnLT5wb3J0 X251bWJlcik7DQo+ICAJaWYgKCFwb3J0KSB7DQo+ICAJCXBvcnQgPSBremFsbG9jKHNpemVvZigq cG9ydCksIEdGUF9LRVJORUwpOw0KPiAgCQlpZiAoIXBvcnQpDQo+ICAJCQlyZXR1cm47DQo+IC0J CWtyZWZfaW5pdCgmcG9ydC0+a3JlZik7DQo+ICsJCWtyZWZfaW5pdCgmcG9ydC0+dG9wb2xvZ3lf a3JlZik7DQo+ICsJCWtyZWZfaW5pdCgmcG9ydC0+bWFsbG9jX2tyZWYpOw0KPiAgCQlwb3J0LT5w YXJlbnQgPSBtc3RiOw0KPiAgCQlwb3J0LT5wb3J0X251bSA9IHBvcnRfbXNnLT5wb3J0X251bWJl cjsNCj4gIAkJcG9ydC0+bWdyID0gbXN0Yi0+bWdyOw0KPiAgCQlwb3J0LT5hdXgubmFtZSA9ICJE UE1TVCI7DQo+ICAJCXBvcnQtPmF1eC5kZXYgPSBkZXYtPmRldjsNCj4gKw0KPiArCQkvKg0KPiAr CQkgKiBNYWtlIHN1cmUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBvdXIgcGFyZW50IGJyYW5j aCBzdGF5cw0KPiArCQkgKiBhcm91bmQgdW50aWwgb3VyIG93biBtZW1vcnkgYWxsb2NhdGlvbiBp cyByZWxlYXNlZA0KPiArCQkgKi8NCj4gKwkJZHJtX2RwX21zdF9nZXRfbXN0Yl9tYWxsb2MobXN0 Yik7DQo+ICsNCj4gIAkJY3JlYXRlZCA9IHRydWU7DQo+ICAJfSBlbHNlIHsNCj4gIAkJb2xkX3Bk dCA9IHBvcnQtPnBkdDsNCj4gQEAgLTExODUsNyArMTUxNCw3IEBAIHN0YXRpYyB2b2lkIGRybV9k cF9hZGRfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIsDQo+ICAJICAgZm9yIHRo aXMgbGlzdCAqLw0KPiAgCWlmIChjcmVhdGVkKSB7DQo+ICAJCW11dGV4X2xvY2soJm1zdGItPm1n ci0+bG9jayk7DQo+IC0JCWtyZWZfZ2V0KCZwb3J0LT5rcmVmKTsNCj4gKwkJZHJtX2RwX21zdF90 b3BvbG9neV9nZXRfcG9ydChwb3J0KTsNCj4gIAkJbGlzdF9hZGQoJnBvcnQtPm5leHQsICZtc3Ri LT5wb3J0cyk7DQo+ICAJCW11dGV4X3VubG9jaygmbXN0Yi0+bWdyLT5sb2NrKTsNCj4gIAl9DQo+ IEBAIC0xMjEwLDggKzE1MzksMTEgQEAgc3RhdGljIHZvaWQgZHJtX2RwX2FkZF9wb3J0KHN0cnVj dCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiwNCj4gIAlpZiAoY3JlYXRlZCAmJiAhcG9ydC0+aW5w dXQpIHsNCj4gIAkJY2hhciBwcm9wcGF0aFsyNTVdOw0KPiAgDQo+IC0JCWJ1aWxkX21zdF9wcm9w X3BhdGgobXN0YiwgcG9ydC0+cG9ydF9udW0sIHByb3BwYXRoLCBzaXplb2YocHJvcHBhdGgpKTsN Cj4gLQkJcG9ydC0+Y29ubmVjdG9yID0gKCptc3RiLT5tZ3ItPmNicy0+YWRkX2Nvbm5lY3Rvciko bXN0Yi0+bWdyLCBwb3J0LCBwcm9wcGF0aCk7DQo+ICsJCWJ1aWxkX21zdF9wcm9wX3BhdGgobXN0 YiwgcG9ydC0+cG9ydF9udW0sIHByb3BwYXRoLA0KPiArCQkJCSAgICBzaXplb2YocHJvcHBhdGgp KTsNCj4gKwkJcG9ydC0+Y29ubmVjdG9yID0gKCptc3RiLT5tZ3ItPmNicy0+YWRkX2Nvbm5lY3Rv cikobXN0Yi0+bWdyLA0KPiArCQkJCQkJCQkgICBwb3J0LA0KPiArCQkJCQkJCQkgICBwcm9wcGF0 aCk7DQo+ICAJCWlmICghcG9ydC0+Y29ubmVjdG9yKSB7DQo+ICAJCQkvKiByZW1vdmUgaXQgZnJv bSB0aGUgcG9ydCBsaXN0ICovDQo+ICAJCQltdXRleF9sb2NrKCZtc3RiLT5tZ3ItPmxvY2spOw0K PiBAQCAtMTIyMSw2ICsxNTUzLDcgQEAgc3RhdGljIHZvaWQgZHJtX2RwX2FkZF9wb3J0KHN0cnVj dCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiwNCj4gIAkJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0 X3BvcnQocG9ydCk7DQo+ICAJCQlnb3RvIG91dDsNCj4gIAkJfQ0KPiArDQo+ICAJCWlmICgocG9y dC0+cGR0ID09IERQX1BFRVJfREVWSUNFX0RQX0xFR0FDWV9DT05WIHx8DQo+ICAJCSAgICAgcG9y dC0+cGR0ID09IERQX1BFRVJfREVWSUNFX1NTVF9TSU5LKSAmJg0KPiAgCQkgICAgcG9ydC0+cG9y dF9udW0gPj0gRFBfTVNUX0xPR0lDQUxfUE9SVF8wKSB7DQo+IEBAIC0xMjc4LDcgKzE2MTEsNyBA QCBzdGF0aWMgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICpkcm1fZHBfZ2V0X21zdF9icmFuY2hf ZGV2aWNlKHN0cnVjdCBkcm1fZHBfbXN0Xw0KPiAgew0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X2Jy YW5jaCAqbXN0YjsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Ow0KPiAtCWludCBp Ow0KPiArCWludCBpLCByZXQ7DQo+ICAJLyogZmluZCB0aGUgcG9ydCBieSBpdGVyYXRpbmcgZG93 biAqLw0KPiAgDQo+ICAJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsNCj4gQEAgLTEzMDMsNyArMTYz Niw5IEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKmRybV9kcF9nZXRfbXN0X2Jy YW5jaF9kZXZpY2Uoc3RydWN0IGRybV9kcF9tc3RfDQo+ICAJCQl9DQo+ICAJCX0NCj4gIAl9DQo+ IC0Ja3JlZl9nZXQoJm1zdGItPmtyZWYpOw0KPiArCXJldCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lf dHJ5X2dldF9tc3RiKG1zdGIpOw0KPiArCWlmICghcmV0KQ0KPiArCQltc3RiID0gTlVMTDsNCj4g IG91dDoNCj4gIAltdXRleF91bmxvY2soJm1nci0+bG9jayk7DQo+ICAJcmV0dXJuIG1zdGI7DQo+ IEBAIC0xMzMzLDE5ICsxNjY4LDIyIEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gg KmdldF9tc3RfYnJhbmNoX2RldmljZV9ieV9ndWlkX2hlbHBlcigNCj4gIAlyZXR1cm4gTlVMTDsN Cj4gIH0NCj4gIA0KPiAtc3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqZHJtX2RwX2dl dF9tc3RfYnJhbmNoX2RldmljZV9ieV9ndWlkKA0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X21nciAqbWdyLA0KPiAtCXVpbnQ4X3QgKmd1aWQpDQo+ICtzdGF0aWMgc3RydWN0IGRybV9k cF9tc3RfYnJhbmNoICoNCj4gK2RybV9kcF9nZXRfbXN0X2JyYW5jaF9kZXZpY2VfYnlfZ3VpZChz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gKwkJCQkgICAgIHVpbnQ4X3Qg Kmd1aWQpDQo+ICB7DQo+ICAJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiOw0KPiArCWlu dCByZXQ7DQo+ICANCj4gIAkvKiBmaW5kIHRoZSBwb3J0IGJ5IGl0ZXJhdGluZyBkb3duICovDQo+ ICAJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsNCj4gIA0KPiAgCW1zdGIgPSBnZXRfbXN0X2JyYW5j aF9kZXZpY2VfYnlfZ3VpZF9oZWxwZXIobWdyLT5tc3RfcHJpbWFyeSwgZ3VpZCk7DQo+IC0NCj4g LQlpZiAobXN0YikNCj4gLQkJa3JlZl9nZXQoJm1zdGItPmtyZWYpOw0KPiArCWlmIChtc3RiKSB7 DQo+ICsJCXJldCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9tc3RiKG1zdGIpOw0KPiAr CQlpZiAoIXJldCkNCj4gKwkJCW1zdGIgPSBOVUxMOw0KPiArCX0NCj4gIA0KPiAgCW11dGV4X3Vu bG9jaygmbWdyLT5sb2NrKTsNCj4gIAlyZXR1cm4gbXN0YjsNCj4gQEAgLTEzODQsMTEgKzE3MjIs MTQgQEAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF9saW5rX3Byb2JlX3dvcmsoc3RydWN0IHdvcmtf c3RydWN0ICp3b3JrKQ0KPiAgew0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAq bWdyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciwg d29yayk7DQo+ICAJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiOw0KPiArCWludCByZXQ7 DQo+ICANCj4gIAltdXRleF9sb2NrKCZtZ3ItPmxvY2spOw0KPiAgCW1zdGIgPSBtZ3ItPm1zdF9w cmltYXJ5Ow0KPiAgCWlmIChtc3RiKSB7DQo+IC0JCWtyZWZfZ2V0KCZtc3RiLT5rcmVmKTsNCj4g KwkJcmV0ID0gZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X21zdGIobXN0Yik7DQo+ICsJCWlm ICghcmV0KQ0KPiArCQkJbXN0YiA9IE5VTEw7DQo+ICAJfQ0KPiAgCW11dGV4X3VubG9jaygmbWdy LT5sb2NrKTsNCj4gIAlpZiAobXN0Yikgew0KPiBAQCAtMTcxNiw4ICsyMDU3LDEwIEBAIHN0YXRp YyBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKmRybV9kcF9nZXRfbGFzdF9jb25uZWN0ZWRfcG9y dF9hbmRfbXN0YihzdHJ1Y3QNCj4gIA0KPiAgCQlpZiAoZm91bmRfcG9ydCkgew0KPiAgCQkJcm1z dGIgPSBmb3VuZF9wb3J0LT5wYXJlbnQ7DQo+IC0JCQlrcmVmX2dldCgmcm1zdGItPmtyZWYpOw0K PiAtCQkJKnBvcnRfbnVtID0gZm91bmRfcG9ydC0+cG9ydF9udW07DQo+ICsJCQlpZiAoZHJtX2Rw X21zdF90b3BvbG9neV90cnlfZ2V0X21zdGIocm1zdGIpKQ0KPiArCQkJCSpwb3J0X251bSA9IGZv dW5kX3BvcnQtPnBvcnRfbnVtOw0KPiArCQkJZWxzZQ0KPiArCQkJCXJtc3RiID0gTlVMTDsNCj4g IAkJfQ0KPiAgCX0NCj4gIAltdXRleF91bmxvY2soJm1nci0+bG9jayk7DQo+IEBAIC0xNzQyLDcg KzIwODUsOSBAQCBzdGF0aWMgaW50IGRybV9kcF9wYXlsb2FkX3NlbmRfbXNnKHN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgCXBvcnRfbnVtID0gcG9ydC0+cG9ydF9udW07 DQo+ICAJbXN0YiA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGJfdmFsaWRhdGVkKG1nciwg cG9ydC0+cGFyZW50KTsNCj4gIAlpZiAoIW1zdGIpIHsNCj4gLQkJbXN0YiA9IGRybV9kcF9nZXRf bGFzdF9jb25uZWN0ZWRfcG9ydF9hbmRfbXN0YihtZ3IsIHBvcnQtPnBhcmVudCwgJnBvcnRfbnVt KTsNCj4gKwkJbXN0YiA9IGRybV9kcF9nZXRfbGFzdF9jb25uZWN0ZWRfcG9ydF9hbmRfbXN0Yiht Z3IsDQo+ICsJCQkJCQkJICAgICAgIHBvcnQtPnBhcmVudCwNCj4gKwkJCQkJCQkgICAgICAgJnBv cnRfbnVtKTsNCj4gIA0KDQpJIHVzdWFsbHkgZmluZCBpdCBiZXR0ZXIgdG8gbGVhdmUgc3R5bGlz dGljIGNoYW5nZXMgc2VwYXJhdGUgZnJvbSBmdW5jdGlvbmFsIGNoYW5nZXMuIEl0IG1ha2VzIG1h aW50YWluZXIncyBsaXZlcyBlYXNpZXIuDQoNCkhhcnJ5DQoNCj4gIAkJaWYgKCFtc3RiKSB7DQo+ ICAJCQlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpOw0KPiBAQCAtMjE2OCw3ICsy NTEzLDcgQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3NldF9tc3Qoc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsIGJvb2wgbXMNCj4gIA0KPiAgCQkvKiBnaXZlIHRoaXMg dGhlIG1haW4gcmVmZXJlbmNlICovDQo+ICAJCW1nci0+bXN0X3ByaW1hcnkgPSBtc3RiOw0KPiAt CQlrcmVmX2dldCgmbWdyLT5tc3RfcHJpbWFyeS0+a3JlZik7DQo+ICsJCWRybV9kcF9tc3RfdG9w b2xvZ3lfZ2V0X21zdGIobWdyLT5tc3RfcHJpbWFyeSk7DQo+ICANCj4gIAkJcmV0ID0gZHJtX2Rw X2RwY2Rfd3JpdGViKG1nci0+YXV4LCBEUF9NU1RNX0NUUkwsDQo+ICAJCQkJCQkJIERQX01TVF9F TiB8IERQX1VQX1JFUV9FTiB8IERQX1VQU1RSRUFNX0lTX1NSQyk7DQo+IEBAIC0yNzQzLDExICsz MDg4LDExIEBAIGJvb2wgZHJtX2RwX21zdF9hbGxvY2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgCXJldCA9IGRybV9kcF9pbml0X3ZjcGkobWdyLCAmcG9y dC0+dmNwaSwgcGJuLCBzbG90cyk7DQo+ICAJaWYgKHJldCkgew0KPiAgCQlEUk1fREVCVUdfS01T KCJmYWlsZWQgdG8gaW5pdCB2Y3BpIHNsb3RzPSVkIG1heD02MyByZXQ9JWRcbiIsDQo+IC0JCQkJ RElWX1JPVU5EX1VQKHBibiwgbWdyLT5wYm5fZGl2KSwgcmV0KTsNCj4gKwkJCSAgICAgIERJVl9S T1VORF9VUChwYm4sIG1nci0+cGJuX2RpdiksIHJldCk7DQo+ICAJCWdvdG8gb3V0Ow0KPiAgCX0N Cj4gIAlEUk1fREVCVUdfS01TKCJpbml0aW5nIHZjcGkgZm9yIHBibj0lZCBzbG90cz0lZFxuIiwN Cj4gLQkJCXBibiwgcG9ydC0+dmNwaS5udW1fc2xvdHMpOw0KPiArCQkgICAgICBwYm4sIHBvcnQt PnZjcGkubnVtX3Nsb3RzKTsNCj4gIA0KPiAgCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQo cG9ydCk7DQo+ICAJcmV0dXJuIHRydWU7DQo+IEBAIC0yNzkxLDcgKzMxMzYsOCBAQCBFWFBPUlRf U1lNQk9MKGRybV9kcF9tc3RfcmVzZXRfdmNwaV9zbG90cyk7DQo+ICAgKiBAbWdyOiBtYW5hZ2Vy IGZvciB0aGlzIHBvcnQNCj4gICAqIEBwb3J0OiB1bnZlcmlmaWVkIHBvcnQgdG8gZGVhbGxvY2F0 ZSB2Y3BpIGZvcg0KPiAgICovDQo+IC12b2lkIGRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3BpKHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0 ICpwb3J0KQ0KPiArdm9pZCBkcm1fZHBfbXN0X2RlYWxsb2NhdGVfdmNwaShzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gKwkJCQlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpw b3J0KQ0KPiAgew0KPiAgCXBvcnQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlk YXRlZChtZ3IsIHBvcnQpOw0KPiAgCWlmICghcG9ydCkNCj4gQEAgLTMwODYsMTMgKzM0MzIsNiBA QCBzdGF0aWMgdm9pZCBkcm1fZHBfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+ ICAJbXV0ZXhfdW5sb2NrKCZtZ3ItPnFsb2NrKTsNCj4gIH0NCj4gIA0KPiAtc3RhdGljIHZvaWQg ZHJtX2RwX2ZyZWVfbXN0X3BvcnQoc3RydWN0IGtyZWYgKmtyZWYpDQo+IC17DQo+IC0Jc3RydWN0 IGRybV9kcF9tc3RfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZHJtX2Rw X21zdF9wb3J0LCBrcmVmKTsNCj4gLQlrcmVmX3B1dCgmcG9ydC0+cGFyZW50LT5rcmVmLCBkcm1f ZHBfZnJlZV9tc3RfYnJhbmNoX2RldmljZSk7DQo+IC0Ja2ZyZWUocG9ydCk7DQo+IC19DQo+IC0N Cj4gIHN0YXRpYyB2b2lkIGRybV9kcF9kZXN0cm95X2Nvbm5lY3Rvcl93b3JrKHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yaykNCj4gIHsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Is IGRlc3Ryb3lfY29ubmVjdG9yX3dvcmspOw0KPiBAQCAtMzExMyw3ICszNDUyLDYgQEAgc3RhdGlj IHZvaWQgZHJtX2RwX2Rlc3Ryb3lfY29ubmVjdG9yX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQ0KPiAgCQlsaXN0X2RlbCgmcG9ydC0+bmV4dCk7DQo+ICAJCW11dGV4X3VubG9jaygmbWdy LT5kZXN0cm95X2Nvbm5lY3Rvcl9sb2NrKTsNCj4gIA0KPiAtCQlrcmVmX2luaXQoJnBvcnQtPmty ZWYpOw0KPiAgCQlJTklUX0xJU1RfSEVBRCgmcG9ydC0+bmV4dCk7DQo+ICANCj4gIAkJbWdyLT5j YnMtPmRlc3Ryb3lfY29ubmVjdG9yKG1nciwgcG9ydC0+Y29ubmVjdG9yKTsNCj4gQEAgLTMxMjcs NyArMzQ2NSw3IEBAIHN0YXRpYyB2b2lkIGRybV9kcF9kZXN0cm95X2Nvbm5lY3Rvcl93b3JrKHN0 cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gIAkJCWRybV9kcF9tc3RfcHV0X3BheWxvYWRfaWQo bWdyLCBwb3J0LT52Y3BpLnZjcGkpOw0KPiAgCQl9DQo+ICANCj4gLQkJa3JlZl9wdXQoJnBvcnQt PmtyZWYsIGRybV9kcF9mcmVlX21zdF9wb3J0KTsNCj4gKwkJZHJtX2RwX21zdF9wdXRfcG9ydF9t YWxsb2MocG9ydCk7DQo+ICAJCXNlbmRfaG90cGx1ZyA9IHRydWU7DQo+ICAJfQ0KPiAgCWlmIChz ZW5kX2hvdHBsdWcpDQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBl ci5oIGIvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaA0KPiBpbmRleCAzNzFjYzI4MTY0 NzcuLjhlY2E1ZjI5MjQyYyAxMDA2NDQNCj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9o ZWxwZXIuaA0KPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oDQo+IEBAIC00 NCw3ICs0NCw2IEBAIHN0cnVjdCBkcm1fZHBfdmNwaSB7DQo+ICANCj4gIC8qKg0KPiAgICogc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCAtIE1TVCBwb3J0DQo+IC0gKiBAa3JlZjogcmVmZXJlbmNlIGNv dW50IGZvciB0aGlzIHBvcnQuDQo+ICAgKiBAcG9ydF9udW06IHBvcnQgbnVtYmVyDQo+ICAgKiBA aW5wdXQ6IGlmIHRoaXMgcG9ydCBpcyBhbiBpbnB1dCBwb3J0Lg0KPiAgICogQG1jczogbWVzc2Fn ZSBjYXBhYmlsaXR5IHN0YXR1cyAtIERQIDEuMiBzcGVjLg0KPiBAQCAtNjcsNyArNjYsMTggQEAg c3RydWN0IGRybV9kcF92Y3BpIHsNCj4gICAqIGluIHRoZSBNU1QgdG9wb2xvZ3kuDQo+ICAgKi8N Cj4gIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgew0KPiAtCXN0cnVjdCBrcmVmIGtyZWY7DQo+ICsJ LyoqDQo+ICsJICogQHRvcG9sb2d5X2tyZWY6IHJlZmNvdW50IGZvciB0aGlzIHBvcnQncyBsaWZl dGltZSBpbiB0aGUgdG9wb2xvZ3ksDQo+ICsJICogb25seSB0aGUgRFAgTVNUIGhlbHBlcnMgc2hv dWxkIG5lZWQgdG8gdG91Y2ggdGhpcw0KPiArCSAqLw0KPiArCXN0cnVjdCBrcmVmIHRvcG9sb2d5 X2tyZWY7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBAbWFsbG9jX2tyZWY6IHJlZmNvdW50IGZvciB0 aGUgbWVtb3J5IGFsbG9jYXRpb24gY29udGFpbmluZyB0aGlzDQo+ICsJICogc3RydWN0dXJlLiBT ZWUgZHJtX2RwX21zdF9nZXRfcG9ydF9tYWxsb2MoKSBhbmQNCj4gKwkgKiBkcm1fZHBfbXN0X3B1 dF9wb3J0X21hbGxvYygpLg0KPiArCSAqLw0KPiArCXN0cnVjdCBrcmVmIG1hbGxvY19rcmVmOw0K PiAgDQo+ICAJdTggcG9ydF9udW07DQo+ICAJYm9vbCBpbnB1dDsNCj4gQEAgLTEwMiw3ICsxMTIs NiBAQCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IHsNCj4gIA0KPiAgLyoqDQo+ICAgKiBzdHJ1Y3Qg ZHJtX2RwX21zdF9icmFuY2ggLSBNU1QgYnJhbmNoIGRldmljZS4NCj4gLSAqIEBrcmVmOiByZWZl cmVuY2UgY291bnQgZm9yIHRoaXMgcG9ydC4NCj4gICAqIEByYWQ6IFJlbGF0aXZlIEFkZHJlc3Mg dG8gdGFsayB0byB0aGlzIGJyYW5jaCBkZXZpY2UuDQo+ICAgKiBAbGN0OiBMaW5rIGNvdW50IHRv dGFsIHRvIHRhbGsgdG8gdGhpcyBicmFuY2ggZGV2aWNlLg0KPiAgICogQG51bV9wb3J0czogbnVt YmVyIG9mIHBvcnRzIG9uIHRoZSBicmFuY2guDQo+IEBAIC0xMjEsNyArMTMwLDE5IEBAIHN0cnVj dCBkcm1fZHBfbXN0X3BvcnQgew0KPiAgICogdG8gZG93bnN0cmVhbSBwb3J0IG9mIHBhcmVudCBi cmFuY2hlcy4NCj4gICAqLw0KPiAgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoIHsNCj4gLQlzdHJ1 Y3Qga3JlZiBrcmVmOw0KPiArCS8qKg0KPiArCSAqIEB0b3BvbG9neV9rcmVmOiByZWZjb3VudCBm b3IgdGhpcyBicmFuY2ggZGV2aWNlJ3MgbGlmZXRpbWUgaW4gdGhlDQo+ICsJICogdG9wb2xvZ3ks IG9ubHkgdGhlIERQIE1TVCBoZWxwZXJzIHNob3VsZCBuZWVkIHRvIHRvdWNoIHRoaXMNCj4gKwkg Ki8NCj4gKwlzdHJ1Y3Qga3JlZiB0b3BvbG9neV9rcmVmOw0KPiArDQo+ICsJLyoqDQo+ICsJICog QG1hbGxvY19rcmVmOiByZWZjb3VudCBmb3IgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRhaW5p bmcgdGhpcw0KPiArCSAqIHN0cnVjdHVyZS4gU2VlIGRybV9kcF9tc3RfZ2V0X21zdGJfbWFsbG9j KCkgYW5kDQo+ICsJICogZHJtX2RwX21zdF9wdXRfbXN0Yl9tYWxsb2MoKS4NCj4gKwkgKi8NCj4g KwlzdHJ1Y3Qga3JlZiBtYWxsb2Nfa3JlZjsNCj4gKw0KPiAgCXU4IHJhZFs4XTsNCj4gIAl1OCBs Y3Q7DQo+ICAJaW50IG51bV9wb3J0czsNCj4gQEAgLTYyNiw0ICs2NDcsNyBAQCBpbnQgZHJtX2Rw X2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl LA0KPiAgaW50IGRybV9kcF9zZW5kX3Bvd2VyX3VwZG93bl9waHkoc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptZ3IsDQo+ICAJCQkJIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQs IGJvb2wgcG93ZXJfdXApOw0KPiAgDQo+ICt2b2lkIGRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9j KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0KPiArdm9pZCBkcm1fZHBfbXN0X3B1dF9w b3J0X21hbGxvYyhzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsNCj4gKw0KPiAgI2VuZGlm DQo+IA0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==