From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Wang, Zhi A" Subject: Re: [RFCv6 2/2] drm/i915: Introduce private PAT management Date: Thu, 31 Aug 2017 18:40:30 +0000 Message-ID: References: <1504030448-31973-1-git-send-email-zhi.a.wang@intel.com> <1504030448-31973-2-git-send-email-zhi.a.wang@intel.com> <1504130400.8120.36.camel@rdvivi-vienna> <9c5674b2-bc85-4765-5d5d-37c0a44f4cff@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Rodrigo Vivi Cc: "intel-gfx@lists.freedesktop.org" , "Widawsky, Benjamin" , "intel-gvt-dev@lists.freedesktop.org" , "Vivi, Rodrigo" List-Id: intel-gfx@lists.freedesktop.org SSBzZWUgd2h5IHRoYXQgaXMgZ29pbmcgd3JvbmcuIEkgdGFrZSBDaHJpcycgY29tbWVudHMgZGly ZWN0bHkgbGlrZToNCg0KX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVfUERFX0lO REVYLC4uLi4pLCBidXQgMCAhPSBQUEFUX0NBQ0hFX1BERV9JTkRFWCBhY3R1YWxseS4gV2FpdCBt eSB1cGRhdGUuDQoNClRoYW5rcywNClpoaS4NCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N CkZyb206IFJvZHJpZ28gVml2aSBbbWFpbHRvOnJvZHJpZ28udml2aUBnbWFpbC5jb21dIA0KU2Vu dDogVGh1cnNkYXksIEF1Z3VzdCAzMSwgMjAxNyA4OjE1IEFNDQpUbzogV2FuZywgWmhpIEEgPHpo aS5hLndhbmdAaW50ZWwuY29tPg0KQ2M6IFZpdmksIFJvZHJpZ28gPHJvZHJpZ28udml2aUBpbnRl bC5jb20+OyBpbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnOyBXaWRhd3NreSwgQmVuamFt aW4gPGJlbmphbWluLndpZGF3c2t5QGludGVsLmNvbT47IGludGVsLWd2dC1kZXZAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnDQpTdWJqZWN0OiBSZTogW0ludGVsLWdmeF0gW1JGQ3Y2IDIvMl0gZHJtL2k5 MTU6IEludHJvZHVjZSBwcml2YXRlIFBBVCBtYW5hZ2VtZW50DQoNCk9uIFdlZCwgQXVnIDMwLCAy MDE3IGF0IDk6NDkgUE0sIFpoaSBXYW5nIDx6aGkuYS53YW5nQGludGVsLmNvbT4gd3JvdGU6DQo+ IEhpIFZpdmk6DQo+ICAgICBUaGFua3MgZm9yIHRoZSByZXBseSEgVGhlIHJlZ2lzdGVyIGFyZSB3 cml0dGVuIGluIHBwYXQtPnVwZGF0ZV9odygpIG5vdy4NCg0Kb2gsIEkgc2F3IG5vdy4uLg0KSSBo YWRkZW4gbm90aWNlZCB0aGF0IGludGVyYXRpb24uDQoNCkJ1dCBzb21ldGhpbmcgc2VlbXMgcmVh bGx5IG9kZCB5ZXQuLi4NCk15IENOTCB3aXRoIHRoZXNlIDIgcGF0Y2hlcyBhcHBsaWVkIGhhbmdz IG9uIGFueSBleGVjdXRpb24uLi4NCg0KPg0KPg0KPiArc3RhdGljIHZvaWQgY25sX3ByaXZhdGVf cGF0X3VwZGF0ZV9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSANCj4gKypkZXZfcHJpdikgew0K PiArICAgICAgIHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gJmRldl9wcml2LT5wcGF0Ow0KPiAr ICAgICAgIGludCBpOw0KPiArDQo+ICsgICAgICAgZm9yX2VhY2hfc2V0X2JpdChpLCBwcGF0LT5k aXJ0eSwgcHBhdC0+bWF4X2VudHJpZXMpIHsNCj4gKyAgICAgICAgICAgICAgIEk5MTVfV1JJVEUo R0VOMTBfUEFUX0lOREVYKGkpLCBwcGF0LT5lbnRyaWVzW2ldLnZhbHVlKTsNCj4gKyAgICAgICAg ICAgICAgIGNsZWFyX2JpdChpLCBwcGF0LT5kaXJ0eSk7DQo+ICsgICAgICAgfQ0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCBiZHdfcHJpdmF0ZV9wYXRfdXBkYXRlX2h3KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlIA0KPiArKmRldl9wcml2KSB7DQo+ICsgICAgICAgc3RydWN0IGludGVsX3BwYXQg KnBwYXQgPSAmZGV2X3ByaXYtPnBwYXQ7DQo+ICsgICAgICAgdTY0IHBhdCA9IDA7DQo+ICsgICAg ICAgaW50IGk7DQo+ICsNCj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHBhdC0+bWF4X2VudHJp ZXM7IGkrKykNCj4gKyAgICAgICAgICAgICAgIHBhdCB8PSBHRU44X1BQQVQoaSwgcHBhdC0+ZW50 cmllc1tpXS52YWx1ZSk7DQo+ICsNCj4gKyAgICAgICBiaXRtYXBfY2xlYXIocHBhdC0+ZGlydHks IDAsIHBwYXQtPm1heF9lbnRyaWVzKTsNCj4gKw0KPiArICAgICAgIEk5MTVfV1JJVEUoR0VOOF9Q UklWQVRFX1BBVF9MTywgbG93ZXJfMzJfYml0cyhwYXQpKTsNCj4gKyAgICAgICBJOTE1X1dSSVRF KEdFTjhfUFJJVkFURV9QQVRfSEksIHVwcGVyXzMyX2JpdHMocGF0KSk7IH0NCj4NCj4gT24gMDgv MzEvMTcgMDY6MDAsIFZpdmksIFJvZHJpZ28gd3JvdGU6DQo+Pg0KPj4gT24gV2VkLCAyMDE3LTA4 LTMwIGF0IDAyOjE0ICswODAwLCBaaGkgV2FuZyB3cm90ZToNCj4+Pg0KPj4+IFRoZSBwcml2YXRl IFBBVCBtYW5hZ2VtZW50IGlzIHRvIHN1cHBvcnQgUFBBVCBlbnRyeSBtYW5pcHVsYXRpb24uIA0K Pj4+IFR3byBBUElzIGFyZSBpbnRyb2R1Y2VkIGZvciBkeW5hbWljYWxseSBtYW5hZ2luZyBQUEFU IGVudHJpZXM6IA0KPj4+IGludGVsX3BwYXRfZ2V0IGFuZCBpbnRlbF9wcGF0X3B1dC4NCj4+Pg0K Pj4+IGludGVsX3BwYXRfZ2V0IHdpbGwgc2VhcmNoIGZvciBhbiBleGlzdGluZyBQUEFUIGVudHJ5 IHdoaWNoIA0KPj4+IHBlcmZlY3RseSBtYXRjaGVzIHRoZSByZXF1aXJlZCBQUEFUIHZhbHVlLiBJ ZiBub3QsIGl0IHdpbGwgdHJ5IHRvIA0KPj4+IGFsbG9jYXRlIG9yIHJldHVybiBhIHBhcnRpYWxs eSBtYXRjaGVkIFBQQVQgZW50cnkgaWYgdGhlcmUgaXMgYW55IA0KPj4+IGF2YWlsYWJsZSBQUEFU IGluZGV4ZXMgb3Igbm90Lg0KPj4+DQo+Pj4gaW50ZWxfcHBhdF9wdXQgd2lsbCBwdXQgYmFjayB0 aGUgUFBBVCBlbnRyeSB3aGljaCBjb21lcyBmcm9tIA0KPj4+IGludGVsX3BwYXRfZ2V0LiBJZiBp dCdzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgdGhlIHJlZmVyZW5jZSBjb3VudCANCj4+PiB3aWxs IGJlIGRlY3JlYXNlZC4gSWYgdGhlIHJlZmVyZW5jZSBjb3VudCB0dXJucyBpbnRvIHplcm8sIHRo ZSBQUEFUIA0KPj4+IGluZGV4IGlzIGZyZWVkIGFnYWluLg0KPj4+DQo+Pj4gQmVzaWRlcywgYW5v dGhlciB0d28gY2FsbGJhY2tzIGFyZSBpbnRyb2R1Y2VkIHRvIHN1cHBvcnQgdGhlIHByaXZhdGUg DQo+Pj4gUEFUIG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBPbmUgaXMgcHBhdC0+dXBkYXRlX2h3KCks IHdoaWNoIHdyaXRlcyB0aGUgDQo+Pj4gUFBBVCBjb25maWd1cmF0aW9ucyBpbiBwcGF0LT5lbnRy aWVzIGludG8gSFcuIEFub3RoZXIgb25lIGlzIA0KPj4+IHBwYXQtPm1hdGNoLCB3aGljaCB3aWxs IHJldHVybiBhIHNjb3JlIHRvIHNob3cgaG93IHR3byBQUEFUIHZhbHVlcyANCj4+PiBtYXRjaCB3 aXRoIGVhY2ggb3RoZXIuDQo+Pj4NCj4+PiB2NjoNCj4+Pg0KPj4+IC0gQWRkcmVzcyBhbGwgY29t bWVudHMgZnJvbSBDaHJpczoNCj4+PiBodHRwOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2ludGVs LWdmeC9tc2cxMzY4NTAuaHRtbA0KPj4+DQo+Pj4gLSBBZGRyZXNzIGFsbCBjb21tZW50cyBmcm9t IEpvb25hczoNCj4+PiBodHRwOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2ludGVsLWdmeC9tc2cx MzY4NDUuaHRtbA0KPj4+DQo+Pj4gdjU6DQo+Pj4NCj4+PiAtIEFkZCBjaGVjayBhbmQgd2Fybm5p bmdzIGZvciB0aG9zZSBwbGF0Zm9ybXMgd2hpY2ggZG9uJ3QgaGF2ZSBQUEFULg0KPj4+DQo+Pj4g djM6DQo+Pj4NCj4+PiAtIEludHJvZHVjZSBkaXJ0eSBiaXRtYXAgZm9yIFBQQVQgcmVnaXN0ZXJz LiAoQ2hyaXMpDQo+Pj4gLSBDaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIHBvaW50ZXIgImRldl9wcml2 IiB0byAiaTkxNSIuIChDaHJpcykNCj4+PiAtIGludGVsX3BwYXRfe2dldCwgcHV0fSByZXR1cm5z L3Rha2VzIGEgY29uc3QgaW50ZWxfcHBhdF9lbnRyeSAqLiANCj4+PiAoQ2hyaXMpDQo+Pj4NCj4+ PiB2MjoNCj4+Pg0KPj4+IC0gQVBJIHJlLWRlc2lnbi4gKENocmlzKQ0KPj4+DQo+Pj4gQ2M6IEJl biBXaWRhd3NreSA8YmVuamFtaW4ud2lkYXdza3lAaW50ZWwuY29tPg0KPj4+IENjOiBSb2RyaWdv IFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+DQo+Pj4gQ2M6IENocmlzIFdpbHNvbiA8Y2hy aXNAY2hyaXMtd2lsc29uLmNvLnVrPg0KPj4+IENjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5s YWh0aW5lbkBsaW51eC5pbnRlbC5jb20+DQo+Pj4gU2lnbmVkLW9mZi1ieTogWmhpIFdhbmcgPHpo aS5hLndhbmdAaW50ZWwuY29tPg0KPj4+IC0tLQ0KPj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaCAgICAgfCAgIDIgKw0KPj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fZ3R0LmMgfCAyNzMNCj4+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0N Cj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oIHwgIDM2ICsrKysrDQo+ Pj4gICAzIGZpbGVzIGNoYW5nZWQsIDI2MiBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMoLSkN Cj4+Pg0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIA0K Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBpbmRleCA3NTg3ZWY1Li41ZmZk ZTEwIDEwMDY0NA0KPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgNCj4+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oDQo+Pj4gQEAgLTIzMTIsNiAr MjMxMiw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsNCj4+PiAgICAgICAgIERFQ0xBUkVf SEFTSFRBQkxFKG1tX3N0cnVjdHMsIDcpOw0KPj4+ICAgICAgICAgc3RydWN0IG11dGV4IG1tX2xv Y2s7DQo+Pj4gICArICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCBwcGF0Ow0KPj4+ICsNCj4+PiAgICAg ICAgIC8qIEtlcm5lbCBNb2Rlc2V0dGluZyAqLw0KPj4+ICAgICAgICAgc3RydWN0IGludGVsX2Ny dGMgKnBsYW5lX3RvX2NydGNfbWFwcGluZ1tJOTE1X01BWF9QSVBFU107DQo+Pj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jDQo+Pj4gYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYw0KPj4+IGluZGV4IGI3NGZhOWQuLjMxMDYxNDIgMTAw NjQ0DQo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMNCj4+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYw0KPj4+IEBAIC0yODE2LDQx ICsyODE2LDIwMCBAQCBzdGF0aWMgaW50IGdndHRfcHJvYmVfY29tbW9uKHN0cnVjdCANCj4+PiBp OTE1X2dndHQgKmdndHQsIHU2NCBzaXplKQ0KPj4+ICAgICAgICAgcmV0dXJuIDA7DQo+Pj4gICB9 DQo+Pj4gICAtc3RhdGljIHZvaWQgY25sX3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSANCj4+PiAqZGV2X3ByaXYpDQo+Pj4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfcHBh dF9lbnRyeSAqDQo+Pj4gK19fYWxsb2NfcHBhdF9lbnRyeShzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBh dCwgdW5zaWduZWQgaW50IGluZGV4LCB1OA0KPj4+IHZhbHVlKQ0KPj4+ICAgew0KPj4+ICsgICAg ICAgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmVudHJ5ID0gJnBwYXQtPmVudHJpZXNbaW5kZXhd Ow0KPj4+ICsNCj4+PiArICAgICAgIEdFTV9CVUdfT04oaW5kZXggPj0gcHBhdC0+bWF4X2VudHJp ZXMpOw0KPj4+ICsgICAgICAgR0VNX0JVR19PTih0ZXN0X2JpdChpbmRleCwgcHBhdC0+dXNlZCkp Ow0KPj4+ICsNCj4+PiArICAgICAgIGVudHJ5LT5wcGF0ID0gcHBhdDsNCj4+PiArICAgICAgIGVu dHJ5LT52YWx1ZSA9IHZhbHVlOw0KPj4+ICsgICAgICAga3JlZl9pbml0KCZlbnRyeS0+cmVmKTsN Cj4+PiArICAgICAgIHNldF9iaXQoaW5kZXgsIHBwYXQtPnVzZWQpOw0KPj4+ICsgICAgICAgc2V0 X2JpdChpbmRleCwgcHBhdC0+ZGlydHkpOw0KPj4+ICsNCj4+PiArICAgICAgIHJldHVybiBlbnRy eTsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIHZvaWQgX19mcmVlX3BwYXRfZW50cnkoc3Ry dWN0IGludGVsX3BwYXRfZW50cnkgKmVudHJ5KSB7DQo+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxf cHBhdCAqcHBhdCA9IGVudHJ5LT5wcGF0Ow0KPj4+ICsgICAgICAgdW5zaWduZWQgaW50IGluZGV4 ID0gZW50cnkgLSBwcGF0LT5lbnRyaWVzOw0KPj4+ICsNCj4+PiArICAgICAgIEdFTV9CVUdfT04o aW5kZXggPj0gcHBhdC0+bWF4X2VudHJpZXMpOw0KPj4+ICsgICAgICAgR0VNX0JVR19PTighdGVz dF9iaXQoaW5kZXgsIHBwYXQtPnVzZWQpKTsNCj4+PiArDQo+Pj4gKyAgICAgICBlbnRyeS0+dmFs dWUgPSBwcGF0LT5jbGVhcl92YWx1ZTsNCj4+PiArICAgICAgIGNsZWFyX2JpdChpbmRleCwgcHBh dC0+dXNlZCk7DQo+Pj4gKyAgICAgICBzZXRfYml0KGluZGV4LCBwcGF0LT5kaXJ0eSk7IH0NCj4+ PiArDQo+Pj4gKy8qKg0KPj4+ICsgKiBpbnRlbF9wcGF0X2dldCAtIGdldCBhIHVzYWJsZSBQUEFU IGVudHJ5DQo+Pj4gKyAqIEBpOTE1OiBpOTE1IGRldmljZSBpbnN0YW5jZQ0KPj4+ICsgKiBAdmFs dWU6IHRoZSBQUEFUIHZhbHVlIHJlcXVpcmVkIGJ5IHRoZSBjYWxsZXINCj4+PiArICoNCj4+PiAr ICogVGhlIGZ1bmN0aW9uIHRyaWVzIHRvIHNlYXJjaCBpZiB0aGVyZSBpcyBhbiBleGlzdGluZyBQ UEFUIGVudHJ5IA0KPj4+ICt3aGljaA0KPj4+ICsgKiBtYXRjaGVzIHdpdGggdGhlIHJlcXVpcmVk IHZhbHVlLiBJZiBwZXJmZWN0bHkgbWF0Y2hlZCwgdGhlIA0KPj4+ICtleGlzdGluZw0KPj4+IFBQ QVQNCj4+PiArICogZW50cnkgd2lsbCBiZSB1c2VkLiBJZiBvbmx5IHBhcnRpYWxseSBtYXRjaGVk LCBpdCB3aWxsIHRyeSB0byANCj4+PiArIGNoZWNrDQo+Pj4gaWYNCj4+PiArICogdGhlcmUgaXMg YW55IGF2YWlsYWJsZSBQUEFUIGluZGV4LiBJZiB5ZXMsIGl0IHdpbGwgYWxsb2NhdGUgYSANCj4+ PiArIG5ldw0KPj4+IFBQQVQNCj4+PiArICogaW5kZXggZm9yIHRoZSByZXF1aXJlZCBlbnRyeSBh bmQgdXBkYXRlIHRoZSBIVy4gSWYgbm90LCB0aGUgDQo+Pj4gK3BhcnRpYWxseQ0KPj4+ICsgKiBt YXRjaGVkIGVudHJ5IHdpbGwgYmUgdXNlZC4NCj4+PiArICovDQo+Pj4gK2NvbnN0IHN0cnVjdCBp bnRlbF9wcGF0X2VudHJ5ICoNCj4+PiAraW50ZWxfcHBhdF9nZXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsIHU4IHZhbHVlKSB7DQo+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAq cHBhdCA9ICZpOTE1LT5wcGF0Ow0KPj4+ICsgICAgICAgc3RydWN0IGludGVsX3BwYXRfZW50cnkg KmVudHJ5Ow0KPj4+ICsgICAgICAgdW5zaWduZWQgaW50IHNjYW5uZWQsIGJlc3Rfc2NvcmU7DQo+ Pj4gKyAgICAgICBpbnQgaTsNCj4+PiArDQo+Pj4gKyAgICAgICBHRU1fQlVHX09OKCFwcGF0LT5t YXhfZW50cmllcyk7DQo+Pj4gKw0KPj4+ICsgICAgICAgc2Nhbm5lZCA9IGJlc3Rfc2NvcmUgPSAw Ow0KPj4+ICsNCj4+PiArICAgICAgIGZvcl9lYWNoX3NldF9iaXQoaSwgcHBhdC0+dXNlZCwgcHBh dC0+bWF4X2VudHJpZXMpIHsNCj4+PiArICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNjb3Jl Ow0KPj4+ICsNCj4+PiArICAgICAgICAgICAgICAgZW50cnkgPSAmcHBhdC0+ZW50cmllc1tpXTsN Cj4+PiArICAgICAgICAgICAgICAgc2NvcmUgPSBwcGF0LT5tYXRjaChlbnRyeS0+dmFsdWUsIHZh bHVlKTsNCj4+PiArICAgICAgICAgICAgICAgaWYgKHNjb3JlID4gYmVzdF9zY29yZSkgew0KPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY29yZSA9PSBJTlRFTF9QUEFUX1BFUkZFQ1Rf TUFUQ0gpIHsNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyZWZfZ2V0KCZl bnRyeS0+cmVmKTsNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl bnRyeTsNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICB9DQo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgYmVzdF9zY29yZSA9IHNjb3JlOw0KPj4+ICsgICAgICAgICAgICAgICB9DQo+Pj4g KyAgICAgICAgICAgICAgIHNjYW5uZWQrKzsNCj4+PiArICAgICAgIH0NCj4+PiArDQo+Pj4gKyAg ICAgICBpZiAoc2Nhbm5lZCA9PSBwcGF0LT5tYXhfZW50cmllcykgew0KPj4+ICsgICAgICAgICAg ICAgICBpZiAoIWJlc3Rfc2NvcmUpDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IEVSUl9QVFIoLUVOT1NQQyk7DQo+Pj4gKw0KPj4+ICsgICAgICAgICAgICAgICBrcmVmX2dldCgm ZW50cnktPnJlZik7DQo+Pj4gKyAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsNCj4+PiArICAg ICAgIH0NCj4+PiArDQo+Pj4gKyAgICAgICBpID0gZmluZF9maXJzdF96ZXJvX2JpdChwcGF0LT51 c2VkLCBwcGF0LT5tYXhfZW50cmllcyk7DQo+Pj4gKyAgICAgICBlbnRyeSA9IF9fYWxsb2NfcHBh dF9lbnRyeShwcGF0LCBpLCB2YWx1ZSk7DQo+Pj4gKyAgICAgICBwcGF0LT51cGRhdGVfaHcoaTkx NSk7DQo+Pj4gKyAgICAgICByZXR1cm4gZW50cnk7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRp YyB2b2lkIHJlbGVhc2VfcHBhdChzdHJ1Y3Qga3JlZiAqa3JlZikgew0KPj4+ICsgICAgICAgc3Ry dWN0IGludGVsX3BwYXRfZW50cnkgKmVudHJ5ID0NCj4+PiArICAgICAgICAgICAgICAgY29udGFp bmVyX29mKGtyZWYsIHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5LCByZWYpOw0KPj4+ICsgICAgICAg c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlbnRyeS0+cHBhdC0+aTkxNTsNCj4+PiAr DQo+Pj4gKyAgICAgICBfX2ZyZWVfcHBhdF9lbnRyeShlbnRyeSk7DQo+Pj4gKyAgICAgICBlbnRy eS0+cHBhdC0+dXBkYXRlX2h3KGk5MTUpOyB9DQo+Pj4gKw0KPj4+ICsvKioNCj4+PiArICogaW50 ZWxfcHBhdF9wdXQgLSBwdXQgYmFjayB0aGUgUFBBVCBlbnRyeSBnb3QgZnJvbSANCj4+PiAraW50 ZWxfcHBhdF9nZXQoKQ0KPj4+ICsgKiBAZW50cnk6IGFuIGludGVsIFBQQVQgZW50cnkNCj4+PiAr ICoNCj4+PiArICogUHV0IGJhY2sgdGhlIFBQQVQgZW50cnkgZ290IGZyb20gaW50ZWxfcHBhdF9n ZXQoKS4gSWYgdGhlIFBQQVQgDQo+Pj4gK2luZGV4DQo+Pj4gb2YgdGhlDQo+Pj4gKyAqIGVudHJ5 IGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgaXRzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGJlDQo+ Pj4gZGVjcmVhc2VkLiBPbmNlDQo+Pj4gKyAqIHRoZSByZWZlcmVuY2UgY291bnQgYmVjb21lcyBp bnRvIHplcm8sIHRoZSBQUEFUIGluZGV4IGJlY29tZXMgDQo+Pj4gKyBmcmVlDQo+Pj4gYWdhaW4u DQo+Pj4gKyAqLw0KPj4+ICt2b2lkIGludGVsX3BwYXRfcHV0KGNvbnN0IHN0cnVjdCBpbnRlbF9w cGF0X2VudHJ5ICplbnRyeSkgew0KPj4+ICsgICAgICAgc3RydWN0IGludGVsX3BwYXQgKnBwYXQg PSBlbnRyeS0+cHBhdDsNCj4+PiArICAgICAgIHVuc2lnbmVkIGludCBpbmRleCA9IGVudHJ5IC0g cHBhdC0+ZW50cmllczsNCj4+PiArDQo+Pj4gKyAgICAgICBHRU1fQlVHX09OKCFwcGF0LT5tYXhf ZW50cmllcyk7DQo+Pj4gKw0KPj4+ICsgICAgICAga3JlZl9wdXQoJnBwYXQtPmVudHJpZXNbaW5k ZXhdLnJlZiwgcmVsZWFzZV9wcGF0KTsgfQ0KPj4+ICsNCj4+PiArc3RhdGljIHZvaWQgY25sX3By aXZhdGVfcGF0X3VwZGF0ZV9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSANCj4+PiArKmRldl9w cml2KSB7DQo+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+ cHBhdDsNCj4+PiArICAgICAgIGludCBpOw0KPj4+ICsNCj4+PiArICAgICAgIGZvcl9lYWNoX3Nl dF9iaXQoaSwgcHBhdC0+ZGlydHksIHBwYXQtPm1heF9lbnRyaWVzKSB7DQo+Pj4gKyAgICAgICAg ICAgICAgIEk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKGkpLCBwcGF0LT5lbnRyaWVzW2ldLnZh bHVlKTsNCj4+PiArICAgICAgICAgICAgICAgY2xlYXJfYml0KGksIHBwYXQtPmRpcnR5KTsNCj4+ PiArICAgICAgIH0NCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIHZvaWQgYmR3X3ByaXZhdGVf cGF0X3VwZGF0ZV9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSANCj4+PiArKmRldl9wcml2KSB7 DQo+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+cHBhdDsN Cj4+PiArICAgICAgIHU2NCBwYXQgPSAwOw0KPj4+ICsgICAgICAgaW50IGk7DQo+Pj4gKw0KPj4+ ICsgICAgICAgZm9yIChpID0gMDsgaSA8IHBwYXQtPm1heF9lbnRyaWVzOyBpKyspDQo+Pj4gKyAg ICAgICAgICAgICAgIHBhdCB8PSBHRU44X1BQQVQoaSwgcHBhdC0+ZW50cmllc1tpXS52YWx1ZSk7 DQo+Pj4gKw0KPj4+ICsgICAgICAgYml0bWFwX2NsZWFyKHBwYXQtPmRpcnR5LCAwLCBwcGF0LT5t YXhfZW50cmllcyk7DQo+Pj4gKw0KPj4+ICsgICAgICAgSTkxNV9XUklURShHRU44X1BSSVZBVEVf UEFUX0xPLCBsb3dlcl8zMl9iaXRzKHBhdCkpOw0KPj4+ICsgICAgICAgSTkxNV9XUklURShHRU44 X1BSSVZBVEVfUEFUX0hJLCB1cHBlcl8zMl9iaXRzKHBhdCkpOyB9DQo+Pj4gKw0KPj4+ICtzdGF0 aWMgdW5zaWduZWQgaW50IGJkd19wcml2YXRlX3BhdF9tYXRjaCh1OCBzcmMsIHU4IGRzdCkgew0K Pj4+ICsgICAgICAgdW5zaWduZWQgaW50IHNjb3JlID0gMDsNCj4+PiArDQo+Pj4gKyAgICAgICAv KiBDYWNoZSBhdHRyaWJ1dGUgaGFzIHRvIGJlIG1hdGNoZWQuICovDQo+Pj4gKyAgICAgICBpZiAo R0VOOF9QUEFUX0dFVF9DQShzcmMpICE9IEdFTjhfUFBBVF9HRVRfQ0EoZHN0KSkNCj4+PiArICAg ICAgICAgICAgICAgcmV0dXJuIDA7DQo+Pj4gKw0KPj4+ICsgICAgICAgaWYgKEdFTjhfUFBBVF9H RVRfVEMoc3JjKSA9PSBHRU44X1BQQVRfR0VUX1RDKGRzdCkpDQo+Pj4gKyAgICAgICAgICAgICAg IHNjb3JlICs9IDI7DQo+Pj4gKw0KPj4+ICsgICAgICAgaWYoR0VOOF9QUEFUX0dFVF9BR0Uoc3Jj KSA9PSBHRU44X1BQQVRfR0VUX0FHRShkc3QpKQ0KPj4+ICsgICAgICAgICAgICAgICBzY29yZSAr PSAxOw0KPj4+ICsNCj4+PiArICAgICAgIGlmIChzY29yZSA9PSAzKQ0KPj4+ICsgICAgICAgICAg ICAgICByZXR1cm4gSU5URUxfUFBBVF9QRVJGRUNUX01BVENIOw0KPj4+ICsNCj4+PiArICAgICAg IHJldHVybiBzY29yZTsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIHVuc2lnbmVkIGludCBj aHZfcHJpdmF0ZV9wYXRfbWF0Y2godTggc3JjLCB1OCBkc3QpIHsNCj4+PiArICAgICAgIHJldHVy biAoQ0hWX1BQQVRfR0VUX1NOT09QKHNyYykgPT0gQ0hWX1BQQVRfR0VUX1NOT09QKGRzdCkpID8N Cj4+PiArICAgICAgICAgICAgICAgSU5URUxfUFBBVF9QRVJGRUNUX01BVENIIDogMDsgfQ0KPj4+ ICsNCj4+PiArc3RhdGljIHZvaWQgY25sX3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgaW50ZWxf cHBhdCAqcHBhdCkgew0KPj4+ICsgICAgICAgcHBhdC0+bWF4X2VudHJpZXMgPSA4Ow0KPj4+ICsg ICAgICAgcHBhdC0+dXBkYXRlX2h3ID0gY25sX3ByaXZhdGVfcGF0X3VwZGF0ZV9odzsNCj4+PiAr ICAgICAgIHBwYXQtPm1hdGNoID0gYmR3X3ByaXZhdGVfcGF0X21hdGNoOw0KPj4+ICsgICAgICAg cHBhdC0+Y2xlYXJfdmFsdWUgPSBHRU44X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBBVF9BR0UoMyk7 DQo+Pj4gKw0KPj4+ICAgICAgICAgLyogWFhYOiBzcGVjIGlzIHVuY2xlYXIgaWYgdGhpcyBpcyBz dGlsbCBuZWVkZWQgZm9yIENOTCsgKi8NCj4+PiAtICAgICAgIGlmICghVVNFU19QUEdUVChkZXZf cHJpdikpIHsNCj4+PiAtICAgICAgICAgICAgICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgo MCksIEdFTjhfUFBBVF9VQyk7DQo+Pj4gKyAgICAgICBpZiAoIVVTRVNfUFBHVFQocHBhdC0+aTkx NSkpIHsNCj4+PiArICAgICAgICAgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRf Q0FDSEVEX1BERV9JTkRFWCwNCj4+PiBHRU44X1BQQVRfVUMpOw0KPj4+ICAgICAgICAgICAgICAg ICByZXR1cm47DQo+Pj4gICAgICAgICB9DQo+Pj4gICAtICAgICBJOTE1X1dSSVRFKEdFTjEwX1BB VF9JTkRFWCgwKSwgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQyk7DQo+Pj4gLSAgICAgICBJ OTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCgxKSwgR0VOOF9QUEFUX1dDIHwgR0VOOF9QUEFUX0xM Q0VMTEMpOw0KPj4+IC0gICAgICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoMiksIEdFTjhf UFBBVF9XVCB8IEdFTjhfUFBBVF9MTENFTExDKTsNCj4+PiAtICAgICAgIEk5MTVfV1JJVEUoR0VO MTBfUEFUX0lOREVYKDMpLCBHRU44X1BQQVRfVUMpOw0KPj4+IC0gICAgICAgSTkxNV9XUklURShH RU4xMF9QQVRfSU5ERVgoNCksIEdFTjhfUFBBVF9MTENFTExDIHwNCj4+PiBHRU44X1BQQVRfQUdF KDApKTsNCj4+PiAtICAgICAgIEk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDUpLCBHRU44X1BQ QVRfTExDRUxMQyB8DQo+Pj4gR0VOOF9QUEFUX0FHRSgxKSk7DQo+Pj4gLSAgICAgICBJOTE1X1dS SVRFKEdFTjEwX1BBVF9JTkRFWCg2KSwgR0VOOF9QUEFUX0xMQ0VMTEMgfA0KPj4+IEdFTjhfUFBB VF9BR0UoMikpOw0KPj4+IC0gICAgICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoNyksIEdF TjhfUFBBVF9MTENFTExDIHwNCj4+PiBHRU44X1BQQVRfQUdFKDMpKTsNCj4+DQo+Pg0KPj4gR2Vu OCBhbGxvY2F0aW9uIHN0eWxlIGRvZXNuJ3Qgd29yayBvbiBDTkwuDQo+PiBJIGRvbid0IHNlZSB3 aGVyZSBhbGwgdGhlc2UgcmVnaXN0ZXJzIHdvdWxkIGJlIGdldHRpbmcgcHJvcGVybHkgd3JpdHRl bi4NCj4+DQo+Pj4gKyAgICAgICAvKiBTZWUgZ2VuOF9wdGVfZW5jb2RlKCkgZm9yIHRoZSBtYXBw aW5nIGZyb20gY2FjaGUtbGV2ZWwgdG8gDQo+Pj4gKyBQUEFUDQo+Pj4gKi8NCj4+PiArICAgICAg IF9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0NBQ0hFRF9QREVfSU5ERVgsIEdFTjhfUFBB VF9XQiANCj4+PiArIHwNCj4+PiBHRU44X1BQQVRfTExDKTsNCj4+PiArICAgICAgIF9fYWxsb2Nf cHBhdF9lbnRyeShwcGF0LCBQUEFUX0RJU1BMQVlfRUxMQ19JTkRFWCwgDQo+Pj4gKyBHRU44X1BQ QVRfV1QgfA0KPj4+IEdFTjhfUFBBVF9MTENFTExDKTsNCj4+PiArICAgICAgIF9fYWxsb2NfcHBh dF9lbnRyeShwcGF0LCBQUEFUX1VOQ0FDSEVEX0lOREVYLCBHRU44X1BQQVRfVUMpOw0KPj4+ICsg ICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX0lOREVYLCANCj4+PiAr IEdFTjhfUFBBVF9MTENFTExDIHwNCj4+PiBHRU44X1BQQVRfQUdFKDApKTsNCj4+PiAgIH0NCj4+ PiAgICAgLyogVGhlIEdHVFQgYW5kIFBQR1RUIG5lZWQgYSBwcml2YXRlIFBQQVQgc2V0dXAgaW4g b3JkZXIgdG8gDQo+Pj4gaGFuZGxlIGNhY2hlYWJpbGl0eQ0KPj4+ICAgICogYml0cy4gV2hlbiB1 c2luZyBhZHZhbmNlZCBjb250ZXh0cyBlYWNoIGNvbnRleHQgc3RvcmVzIGl0cyBvd24gDQo+Pj4g UEFULCBidXQNCj4+PiAgICAqIHdyaXRpbmcgdGhpcyBkYXRhIHNob3VsZG4ndCBiZSBoYXJtZnVs IGV2ZW4gaW4gdGhvc2UgY2FzZXMuICovIA0KPj4+IC1zdGF0aWMgdm9pZCBiZHdfc2V0dXBfcHJp dmF0ZV9wcGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIA0KPj4+ICpkZXZfcHJpdikNCj4+PiAr c3RhdGljIHZvaWQgYmR3X3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBh dCkNCj4+PiAgIHsNCj4+PiAtICAgICAgIHU2NCBwYXQ7DQo+Pj4gKyAgICAgICBwcGF0LT5tYXhf ZW50cmllcyA9IDg7DQo+Pj4gKyAgICAgICBwcGF0LT51cGRhdGVfaHcgPSBiZHdfcHJpdmF0ZV9w YXRfdXBkYXRlX2h3Ow0KPj4+ICsgICAgICAgcHBhdC0+bWF0Y2ggPSBiZHdfcHJpdmF0ZV9wYXRf bWF0Y2g7DQo+Pj4gKyAgICAgICBwcGF0LT5jbGVhcl92YWx1ZSA9IEdFTjhfUFBBVF9XQiB8IEdF TjhfUFBBVF9MTENFTExDIHwNCj4+PiBHRU44X1BQQVRfQUdFKDMpOw0KPj4+ICAgLSAgICAgcGF0 ID0gR0VOOF9QUEFUKDAsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTEMpICAgICB8IC8qIGZv cg0KPj4+IG5vcm1hbCBvYmplY3RzLCBubyBlTExDICovDQo+Pj4gLSAgICAgICAgICAgICBHRU44 X1BQQVQoMSwgR0VOOF9QUEFUX1dDIHwgR0VOOF9QUEFUX0xMQ0VMTEMpIHwgLyogZm9yDQo+Pj4g c29tZXRoaW5nIHBvaW50aW5nIHRvIHB0ZXM/ICovDQo+Pj4gLSAgICAgICAgICAgICBHRU44X1BQ QVQoMiwgR0VOOF9QUEFUX1dUIHwgR0VOOF9QUEFUX0xMQ0VMTEMpIHwgLyogZm9yDQo+Pj4gc2Nh bm91dCB3aXRoIGVMTEMgKi8NCj4+PiAtICAgICAgICAgICAgIEdFTjhfUFBBVCgzLCBHRU44X1BQ QVRfVUMpICAgICAgICAgICAgICAgICAgICAgfCAvKg0KPj4+IFVuY2FjaGVkIG9iamVjdHMsIG1v c3RseSBmb3Igc2Nhbm91dCAqLw0KPj4+IC0gICAgICAgICAgICAgR0VOOF9QUEFUKDQsIEdFTjhf UFBBVF9XQiB8IEdFTjhfUFBBVF9MTENFTExDIHwNCj4+PiBHRU44X1BQQVRfQUdFKDApKSB8DQo+ Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoNSwgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xM Q0VMTEMgfA0KPj4+IEdFTjhfUFBBVF9BR0UoMSkpIHwNCj4+PiAtICAgICAgICAgICAgIEdFTjhf UFBBVCg2LCBHRU44X1BQQVRfV0IgfCBHRU44X1BQQVRfTExDRUxMQyB8DQo+Pj4gR0VOOF9QUEFU X0FHRSgyKSkgfA0KPj4+IC0gICAgICAgICAgICAgR0VOOF9QUEFUKDcsIEdFTjhfUFBBVF9XQiB8 IEdFTjhfUFBBVF9MTENFTExDIHwNCj4+PiBHRU44X1BQQVRfQUdFKDMpKTsNCj4+PiAtDQo+Pj4g LSAgICAgICBpZiAoIVVTRVNfUFBHVFQoZGV2X3ByaXYpKQ0KPj4+ICsgICAgICAgaWYgKCFVU0VT X1BQR1RUKHBwYXQtPmk5MTUpKSB7DQo+Pj4gICAgICAgICAgICAgICAgIC8qIFNwZWM6ICJGb3Ig R0dUVCwgdGhlcmUgaXMgTk8gcGF0X3NlbFsyOjBdIGZyb20gDQo+Pj4gdGhlIGVudHJ5LA0KPj4+ ICAgICAgICAgICAgICAgICAgKiBzbyBSVEwgd2lsbCBhbHdheXMgdXNlIHRoZSB2YWx1ZSBjb3Jy ZXNwb25kaW5nIHRvDQo+Pj4gICAgICAgICAgICAgICAgICAqIHBhdF9zZWwgPSAwMDAiLg0KPj4+ IEBAIC0yODY0LDE3ICszMDIzLDI2IEBAIHN0YXRpYyB2b2lkIGJkd19zZXR1cF9wcml2YXRlX3Bw YXQoc3RydWN0IA0KPj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPj4+ICAgICAgICAg ICAgICAgICAgKiBTbyB3ZSBjYW4gc3RpbGwgaG9sZCBvbnRvIGFsbCBvdXIgYXNzdW1wdGlvbnMg d3J0IGNwdQ0KPj4+ICAgICAgICAgICAgICAgICAgKiBjbGZsdXNoaW5nIG9uIExMQyBtYWNoaW5l cy4NCj4+PiAgICAgICAgICAgICAgICAgICovDQo+Pj4gLSAgICAgICAgICAgICAgIHBhdCA9IEdF TjhfUFBBVCgwLCBHRU44X1BQQVRfVUMpOw0KPj4+ICsgICAgICAgICAgICAgICBfX2FsbG9jX3Bw YXRfZW50cnkocHBhdCwgUFBBVF9DQUNIRURfUERFX0lOREVYLA0KPj4+IEdFTjhfUFBBVF9VQyk7 DQo+Pj4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4+PiArICAgICAgIH0NCj4+PiAgIC0gICAg IC8qIFhYWDogc3BlYyBkZWZpbmVzIHRoaXMgYXMgMiBkaXN0aW5jdCByZWdpc3RlcnMuIEl0J3Mg dW5jbGVhcg0KPj4+IGlmIGEgNjRiDQo+Pj4gLSAgICAgICAgKiB3cml0ZSB3b3VsZCB3b3JrLiAq Lw0KPj4+IC0gICAgICAgSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0xPLCBwYXQpOw0KPj4+ IC0gICAgICAgSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0hJLCBwYXQgPj4gMzIpOw0KPj4+ ICsgICAgICAgLyogU2VlIGdlbjhfcHRlX2VuY29kZSgpIGZvciB0aGUgbWFwcGluZyBmcm9tIGNh Y2hlLWxldmVsIHRvIA0KPj4+ICsgUFBBVA0KPj4+ICovDQo+Pj4gKyAgICAgICAvKiBmb3Igbm9y bWFsIG9iamVjdHMsIG5vIGVMTEMgKi8NCj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShw cGF0LCBQUEFUX0NBQ0hFRF9QREVfSU5ERVgsIEdFTjhfUFBBVF9XQiANCj4+PiArIHwNCj4+PiBH RU44X1BQQVRfTExDKTsNCj4+PiArICAgICAgIC8qIGZvciBzY2Fub3V0IHdpdGggZUxMQyAqLw0K Pj4+ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfRElTUExBWV9FTExDX0lO REVYLCANCj4+PiArIEdFTjhfUFBBVF9XVCB8DQo+Pj4gR0VOOF9QUEFUX0xMQ0VMTEMpOw0KPj4+ ICsgICAgICAgLyogVW5jYWNoZWQgb2JqZWN0cywgbW9zdGx5IGZvciBzY2Fub3V0ICovDQo+Pj4g KyAgICAgICBfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgUFBBVF9VTkNBQ0hFRF9JTkRFWCwgR0VO OF9QUEFUX1VDKTsNCj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0NB Q0hFRF9JTkRFWCwgR0VOOF9QUEFUX1dCIHwNCj4+PiBHRU44X1BQQVRfTExDRUxMQyB8IEdFTjhf UFBBVF9BR0UoMCkpOw0KPj4+ICAgfQ0KPj4+ICAgLXN0YXRpYyB2b2lkIGNodl9zZXR1cF9wcml2 YXRlX3BwYXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgDQo+Pj4gKmRldl9wcml2KQ0KPj4+ICtz dGF0aWMgdm9pZCBjaHZfc2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0 KQ0KPj4+ICAgew0KPj4+IC0gICAgICAgdTY0IHBhdDsNCj4+PiArICAgICAgIHBwYXQtPm1heF9l bnRyaWVzID0gODsNCj4+PiArICAgICAgIHBwYXQtPnVwZGF0ZV9odyA9IGJkd19wcml2YXRlX3Bh dF91cGRhdGVfaHc7DQo+Pj4gKyAgICAgICBwcGF0LT5tYXRjaCA9IGNodl9wcml2YXRlX3BhdF9t YXRjaDsNCj4+PiArICAgICAgIHBwYXQtPmNsZWFyX3ZhbHVlID0gQ0hWX1BQQVRfU05PT1A7DQo+ Pj4gICAgICAgICAvKg0KPj4+ICAgICAgICAgICogTWFwIFdCIG9uIEJEVyB0byBzbm9vcGVkIG9u IENIVi4NCj4+PiBAQCAtMjg5NCwxNyArMzA2MiwxMiBAQCBzdGF0aWMgdm9pZCBjaHZfc2V0dXBf cHJpdmF0ZV9wcGF0KHN0cnVjdCANCj4+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4+ PiAgICAgICAgICAqIFdoaWNoIG1lYW5zIHdlIG11c3Qgc2V0IHRoZSBzbm9vcCBiaXQgaW4gUEFU IGVudHJ5IDANCj4+PiAgICAgICAgICAqIGluIG9yZGVyIHRvIGtlZXAgdGhlIGdsb2JhbCBzdGF0 dXMgcGFnZSB3b3JraW5nLg0KPj4+ICAgICAgICAgICovDQo+Pj4gLSAgICAgICBwYXQgPSBHRU44 X1BQQVQoMCwgQ0hWX1BQQVRfU05PT1ApIHwNCj4+PiAtICAgICAgICAgICAgIEdFTjhfUFBBVCgx LCAwKSB8DQo+Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoMiwgMCkgfA0KPj4+IC0gICAgICAg ICAgICAgR0VOOF9QUEFUKDMsIDApIHwNCj4+PiAtICAgICAgICAgICAgIEdFTjhfUFBBVCg0LCBD SFZfUFBBVF9TTk9PUCkgfA0KPj4+IC0gICAgICAgICAgICAgR0VOOF9QUEFUKDUsIENIVl9QUEFU X1NOT09QKSB8DQo+Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoNiwgQ0hWX1BQQVRfU05PT1Ap IHwNCj4+PiAtICAgICAgICAgICAgIEdFTjhfUFBBVCg3LCBDSFZfUFBBVF9TTk9PUCk7DQo+Pj4g ICAtICAgICBJOTE1X1dSSVRFKEdFTjhfUFJJVkFURV9QQVRfTE8sIHBhdCk7DQo+Pj4gLSAgICAg ICBJOTE1X1dSSVRFKEdFTjhfUFJJVkFURV9QQVRfSEksIHBhdCA+PiAzMik7DQo+Pj4gKyAgICAg ICAvKiBTZWUgZ2VuOF9wdGVfZW5jb2RlKCkgZm9yIHRoZSBtYXBwaW5nIGZyb20gY2FjaGUtbGV2 ZWwgdG8gDQo+Pj4gKyBQUEFUDQo+Pj4gKi8NCj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9lbnRy eShwcGF0LCBQUEFUX0NBQ0hFRF9QREVfSU5ERVgsIENIVl9QUEFUX1NOT09QKTsNCj4+PiArICAg ICAgIF9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0RJU1BMQVlfRUxMQ19JTkRFWCwgMCk7 DQo+Pj4gKyAgICAgICBfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgUFBBVF9VTkNBQ0hFRF9JTkRF WCwgMCk7DQo+Pj4gKyAgICAgICBfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgUFBBVF9DQUNIRURf SU5ERVgsIENIVl9QUEFUX1NOT09QKTsNCj4+PiAgIH0NCj4+PiAgICAgc3RhdGljIHZvaWQgZ2Vu Nl9nbWNoX3JlbW92ZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkgQEAgDQo+Pj4gLTI5 MTcsMTIgKzMwODAsMjcgQEAgc3RhdGljIHZvaWQgZ2VuNl9nbWNoX3JlbW92ZShzdHJ1Y3QgDQo+ Pj4gaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkNCj4+PiAgICAgc3RhdGljIHZvaWQgc2V0dXBfcHJp dmF0ZV9wYXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPj4+ICAgew0KPj4+ ICsgICAgICAgc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSAmZGV2X3ByaXYtPnBwYXQ7DQo+Pj4g KyAgICAgICBpbnQgaTsNCj4+PiArDQo+Pj4gKyAgICAgICBwcGF0LT5pOTE1ID0gZGV2X3ByaXY7 DQo+Pj4gKw0KPj4+ICAgICAgICAgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApDQo+Pj4g LSAgICAgICAgICAgICAgIGNubF9zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOw0KPj4+ICsg ICAgICAgICAgICAgICBjbmxfc2V0dXBfcHJpdmF0ZV9wcGF0KHBwYXQpOw0KPj4+ICAgICAgICAg ZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgfHwgSVNfR0VOOV9MUChkZXZfcHJpdikp DQo+Pj4gLSAgICAgICAgICAgICAgIGNodl9zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOw0K Pj4+ICsgICAgICAgICAgICAgICBjaHZfc2V0dXBfcHJpdmF0ZV9wcGF0KHBwYXQpOw0KPj4+ICAg ICAgICAgZWxzZQ0KPj4+IC0gICAgICAgICAgICAgICBiZHdfc2V0dXBfcHJpdmF0ZV9wcGF0KGRl dl9wcml2KTsNCj4+PiArICAgICAgICAgICAgICAgYmR3X3NldHVwX3ByaXZhdGVfcHBhdChwcGF0 KTsNCj4+PiArDQo+Pj4gKyAgICAgICBHRU1fQlVHX09OKHBwYXQtPm1heF9lbnRyaWVzID4gSU5U RUxfTUFYX1BQQVRfRU5UUklFUyk7DQo+Pj4gKw0KPj4+ICsgICAgICAgZm9yX2VhY2hfY2xlYXJf Yml0KGksIHBwYXQtPnVzZWQsIHBwYXQtPm1heF9lbnRyaWVzKSB7DQo+Pj4gKyAgICAgICAgICAg ICAgIHBwYXQtPmVudHJpZXNbaV0udmFsdWUgPSBwcGF0LT5jbGVhcl92YWx1ZTsNCj4+PiArICAg ICAgICAgICAgICAgcHBhdC0+ZW50cmllc1tpXS5wcGF0ID0gcHBhdDsNCj4+PiArICAgICAgICAg ICAgICAgc2V0X2JpdChpLCBwcGF0LT5kaXJ0eSk7DQo+Pj4gKyAgICAgICB9DQo+Pj4gKw0KPj4+ ICsgICAgICAgcHBhdC0+dXBkYXRlX2h3KGRldl9wcml2KTsNCj4+PiAgIH0NCj4+PiAgICAgc3Rh dGljIGludCBnZW44X2dtY2hfcHJvYmUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkgQEAgLTMyMzYs MTMgDQo+Pj4gKzM0MTQsMTAgQEAgdm9pZCBpOTE1X2dlbV9yZXN0b3JlX2d0dF9tYXBwaW5ncyhz dHJ1Y3QNCj4+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4+PiAgICAgICAgIGdndHQt PmJhc2UuY2xvc2VkID0gZmFsc2U7DQo+Pj4gICAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSA4KSB7DQo+Pj4gLSAgICAgICAgICAgICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDEwKQ0KPj4+IC0gICAgICAgICAgICAgICAgICAgICAgIGNubF9zZXR1cF9wcml2YXRlX3BwYXQo ZGV2X3ByaXYpOw0KPj4+IC0gICAgICAgICAgICAgICBlbHNlIGlmIChJU19DSEVSUllWSUVXKGRl dl9wcml2KSB8fCBJU19HRU45X0xQKGRldl9wcml2KSkNCj4+PiAtICAgICAgICAgICAgICAgICAg ICAgICBjaHZfc2V0dXBfcHJpdmF0ZV9wcGF0KGRldl9wcml2KTsNCj4+PiAtICAgICAgICAgICAg ICAgZWxzZQ0KPj4+IC0gICAgICAgICAgICAgICAgICAgICAgIGJkd19zZXR1cF9wcml2YXRlX3Bw YXQoZGV2X3ByaXYpOw0KPj4+ICsgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBh dCA9ICZkZXZfcHJpdi0+cHBhdDsNCj4+PiAgICsgICAgICAgICAgICAgYml0bWFwX3NldChwcGF0 LT5kaXJ0eSwgMCwgcHBhdC0+bWF4X2VudHJpZXMpOw0KPj4+ICsgICAgICAgICAgICAgICBkZXZf cHJpdi0+cHBhdC51cGRhdGVfaHcoZGV2X3ByaXYpOw0KPj4+ICAgICAgICAgICAgICAgICByZXR1 cm47DQo+Pj4gICAgICAgICB9DQo+Pj4gICBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZ3R0LmgNCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0 dC5oDQo+Pj4gaW5kZXggYjRlM2FhNy4uZTEwY2E4OSAxMDA2NDQNCj4+PiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaA0KPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5oDQo+Pj4gQEAgLTE0Myw2ICsxNDMsMTEgQEAgdHlwZWRlZiB1NjQg Z2VuOF9wcGd0dF9wbWw0ZV90Ow0KPj4+ICAgI2RlZmluZSBHRU44X1BQQVRfRUxMQ19PVkVSUklE RSAgICAgICAgICAgICAgICgwPDwyKQ0KPj4+ICAgI2RlZmluZSBHRU44X1BQQVQoaSwgeCkgICAg ICAgICAgICAgICAgICAgICAgICgodTY0KSh4KSA8PCAoKGkpICogOCkpDQo+Pj4gICArI2RlZmlu ZSBHRU44X1BQQVRfR0VUX0NBKHgpICgoeCkgJiAzKQ0KPj4+ICsjZGVmaW5lIEdFTjhfUFBBVF9H RVRfVEMoeCkgKCh4KSAmICgzIDw8IDIpKSAjZGVmaW5lIA0KPj4+ICtHRU44X1BQQVRfR0VUX0FH RSh4KSAoKHgpICYgKDMgPDwgNCkpICNkZWZpbmUgQ0hWX1BQQVRfR0VUX1NOT09QKHgpIA0KPj4+ ICsoKHgpICYgKDEgPDwgNikpDQo+Pj4gKw0KPj4+ICAgc3RydWN0IHNnX3RhYmxlOw0KPj4+ICAg ICBzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyB7DQo+Pj4gQEAgLTUzNiw2ICs1NDEsMzcgQEAg aTkxNV92bV90b19nZ3R0KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQ0KPj4+ICAgICAg ICAgcmV0dXJuIGNvbnRhaW5lcl9vZih2bSwgc3RydWN0IGk5MTVfZ2d0dCwgYmFzZSk7DQo+Pj4g ICB9DQo+Pj4gICArI2RlZmluZSBJTlRFTF9NQVhfUFBBVF9FTlRSSUVTIDgNCj4+PiArI2RlZmlu ZSBJTlRFTF9QUEFUX1BFUkZFQ1RfTUFUQ0ggKH4wVSkNCj4+PiArDQo+Pj4gK3N0cnVjdCBpbnRl bF9wcGF0Ow0KPj4+ICsNCj4+PiArc3RydWN0IGludGVsX3BwYXRfZW50cnkgew0KPj4+ICsgICAg ICAgc3RydWN0IGludGVsX3BwYXQgKnBwYXQ7DQo+Pj4gKyAgICAgICBzdHJ1Y3Qga3JlZiByZWY7 DQo+Pj4gKyAgICAgICB1OCB2YWx1ZTsNCj4+PiArfTsNCj4+PiArDQo+Pj4gK3N0cnVjdCBpbnRl bF9wcGF0IHsNCj4+PiArICAgICAgIHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5IGVudHJpZXNbSU5U RUxfTUFYX1BQQVRfRU5UUklFU107DQo+Pj4gKyAgICAgICBERUNMQVJFX0JJVE1BUCh1c2VkLCBJ TlRFTF9NQVhfUFBBVF9FTlRSSUVTKTsNCj4+PiArICAgICAgIERFQ0xBUkVfQklUTUFQKGRpcnR5 LCBJTlRFTF9NQVhfUFBBVF9FTlRSSUVTKTsNCj4+PiArICAgICAgIHVuc2lnbmVkIGludCBtYXhf ZW50cmllczsNCj4+PiArICAgICAgIHU4IGNsZWFyX3ZhbHVlOw0KPj4+ICsgICAgICAgLyoNCj4+ PiArICAgICAgICAqIFJldHVybiBhIHNjb3JlIHRvIHNob3cgaG93IHR3byBQUEFUIHZhbHVlcyBt YXRjaCwNCj4+PiArICAgICAgICAqIGEgSU5URUxfUFBBVF9QRVJGRUNUX01BVENIIGluZGljYXRl cyBhIHBlcmZlY3QgbWF0Y2gNCj4+PiArICAgICAgICAqLw0KPj4+ICsgICAgICAgdW5zaWduZWQg aW50ICgqbWF0Y2gpKHU4IHNyYywgdTggZHN0KTsNCj4+PiArICAgICAgIHZvaWQgKCp1cGRhdGVf aHcpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsNCj4+PiArDQo+Pj4gKyAgICAgICBz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsgfTsNCj4+PiArDQo+Pj4gK2NvbnN0IHN0cnVj dCBpbnRlbF9wcGF0X2VudHJ5ICoNCj4+PiAraW50ZWxfcHBhdF9nZXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsIHU4IHZhbHVlKTsgdm9pZCANCj4+PiAraW50ZWxfcHBhdF9wdXQoY29u c3Qgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmVudHJ5KTsNCj4+PiArDQo+Pj4gICBpbnQgaTkx NV9nZW1faW5pdF9hbGlhc2luZ19wcGd0dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7 DQo+Pj4gICB2b2lkIGk5MTVfZ2VtX2ZpbmlfYWxpYXNpbmdfcHBndHQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpOw0KPj4+DQo+Pg0KPj4NCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18NCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdA0KPiBJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4DQoNCg0KDQotLQ0KUm9kcmlnbyBWaXZpDQpC bG9nOiBodHRwOi8vYmxvZy52aXZpLmVuZy5icg0KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==