From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A811AC433EF for ; Thu, 28 Oct 2021 21:23:34 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6989860FF2 for ; Thu, 28 Oct 2021 21:23:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 6989860FF2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E73916E07D; Thu, 28 Oct 2021 21:23:33 +0000 (UTC) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9DF2C6E07D for ; Thu, 28 Oct 2021 21:23:32 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10151"; a="229248386" X-IronPort-AV: E=Sophos;i="5.87,191,1631602800"; d="scan'208";a="229248386" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Oct 2021 14:23:27 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,191,1631602800"; d="scan'208";a="538203445" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by fmsmga008.fm.intel.com with ESMTP; 28 Oct 2021 14:23:27 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Thu, 28 Oct 2021 14:23:26 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Thu, 28 Oct 2021 14:23:26 -0700 Received: from orsmsx611.amr.corp.intel.com ([10.22.229.24]) by ORSMSX611.amr.corp.intel.com ([10.22.229.24]) with mapi id 15.01.2242.012; Thu, 28 Oct 2021 14:23:26 -0700 From: "Sripada, Radhakrishna" To: "Srivatsa, Anusha" , "intel-gfx@lists.freedesktop.org" Thread-Topic: [Intel-gfx] [PATCH v9] drm/i915: Update memory bandwidth formulae Thread-Index: AQHXwgfFmYRxFkZQPEq0c4JBo9SGbKvpb/gA//+PjBA= Date: Thu, 28 Oct 2021 21:23:26 +0000 Message-ID: <59379bb4abe049a8a962fcb6a3de979f@intel.com> References: <20211015210041.16858-1-radhakrishna.sripada@intel.com> <5669cc7dd042449094a97ccc8ccaed19@intel.com> In-Reply-To: <5669cc7dd042449094a97ccc8ccaed19@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.6.200.16 dlp-reaction: no-action x-originating-ip: [10.22.254.132] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH v9] drm/i915: Update memory bandwidth formulae X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogU3JpdmF0c2EsIEFudXNo YSA8YW51c2hhLnNyaXZhdHNhQGludGVsLmNvbT4NCj4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIg MjgsIDIwMjEgMjowNCBQTQ0KPiBUbzogU3JpcGFkYSwgUmFkaGFrcmlzaG5hIDxyYWRoYWtyaXNo bmEuc3JpcGFkYUBpbnRlbC5jb20+OyBpbnRlbC0NCj4gZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y Zw0KPiBTdWJqZWN0OiBSRTogW0ludGVsLWdmeF0gW1BBVENIIHY5XSBkcm0vaTkxNTogVXBkYXRl IG1lbW9yeSBiYW5kd2lkdGgNCj4gZm9ybXVsYWUNCj4gDQo+IFJlcGx5aW5nIHRvIHRoZSByaWdo dCBwYXRjaCB0aGlzIHRpbWUuDQo+IEZyb20gd2hhdCB0aGUgYnNwZWMgc2F5cywgdGhlIGNoYW5n ZXMgbG9vayBnb29kLg0KPiBNaW5vciBmZWVkYmFjayBiZWxvdyBpbmxpbmUuDQo+IA0KPiBXaXRo IHRoYXQgY2hhbmdlLA0KPiBSZXZpZXdlZC1ieTogQW51c2hhIFNyaXZhdHNhIDxhbnVzaGEuc3Jp dmF0c2FAaW50ZWwuY29tPg0KPiANCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N Cj4gPiBGcm9tOiBJbnRlbC1nZnggPGludGVsLWdmeC1ib3VuY2VzQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZz4gT24gQmVoYWxmIE9mDQo+ID4gUmFkaGFrcmlzaG5hIFNyaXBhZGENCj4gPiBTZW50OiBG cmlkYXksIE9jdG9iZXIgMTUsIDIwMjEgMjowMSBQTQ0KPiA+IFRvOiBpbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnDQo+ID4gU3ViamVjdDogW0ludGVsLWdmeF0gW1BBVENIIHY5XSBkcm0v aTkxNTogVXBkYXRlIG1lbW9yeSBiYW5kd2lkdGgNCj4gPiBmb3JtdWxhZQ0KPiA+DQo+ID4gVGhl IGZvcm11bGFlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gaW5jbHVkZSBtb3JlIHZhcmlhYmxlcy4gTWFr ZSBzdXJlIHRoZQ0KPiA+IGNvZGUgY2FycmllcyB0aGUgc2FtZS4NCj4gPg0KPiA+IEJzcGVjOiA2 NDYzMSwgNTQwMjMNCj4gPg0KPiA+IHYyOiBNYWtlIEdFTjExIGZvbGxvdyB0aGUgZGVmYXVsdCBy b3V0ZSBhbmQgZml4IGNhbGN1bGF0aW9uIG9mDQo+ID4gICAgIG1heGRlYncoUkspDQo+ID4gdjM6 IEZpeCBkaXYgYnkgemVybyBvbiBkZWZhdWx0IGNhc2UNCj4gPiAgICAgQ29ycmVjdCBpbmRlbnQg Zm9yIGZhbGx0aHJvdWdoKEphbmkpDQo+ID4gdjQ6IEZpeCBkaXYgYnkgemVybyBvbiBnZW4xMS4N Cj4gPiB2NTogRml4IDAgbWF4X251bWNoYW5uZWxzIGNhc2UNCj4gPiB2NjoNCj4gPiAgICAgLSBT cGxpdCBnZW4xMS9nZW4xMiBhbGdvcml0aG1zDQo+ID4gICAgIC0gRml4IFJLTCBkZWJ1cnN0IHZh bHVlDQo+ID4gICAgIC0gRml4IGRpZmZlcmVuY2UgYi93ZWVuIElDTCBhbmQgVEdMIGFsZ29yaXRo bXMNCj4gPiAgICAgLSBQcm90ZWN0IGRlaW50ZXJsZWF2ZSBmcm9tIGJlaW5nIDANCj4gPiAgICAg LSBXYXJuIHdoZW4gbnVtY2hhbm5lbHMgZXhjZWVkcyBtYXhfbnVtY2hhbm5lbHMNCj4gPiAgICAg LSBGaXggc2NhbGluZyBvZiBjbGtfbWF4IGZyb20gZGlmZmVyZW50IHVuaXRzDQo+ID4gICAgIC0g cy9kZWludGVybGVhdmUvY2hhbm5lbHdpZHRoLyBpbiBjYWxjdWxhdGluZyBwZWFrYncNCj4gPiAg ICAgLSBGaXggb2ZmIGJ5IG9uZSBmb3IgbnVtX3BsYW5lcyBUR0wrDQo+ID4gICAgIC0gRml4IFNB R1YgY2hlY2sNCj4gPiB2NzogRml4IGRpdiBieSB6ZXJvIGVycm9yIG9uIGdlbjExDQo+ID4gdjg6 IEV2ZW4gdGhvdWdoIHRoZSBhbGdvcml0aG0gZm9yIGdlbjExIHNheXMgdGhhdCB3ZSBuZWVkIHRv IHJldHVybg0KPiA+ICAgICBkZXJhdGVkIGJ3IGZvciBhIHFndiBwb2ludCB3aG9zZSBwbGFuZXMg YXJlIGxlc3MgdGhhbiBubyBvZiBhY3RpdmUNCj4gPiAgICAgcGxhbmVzLCB3ZSByZXR1cm4gMCBm b3IgZGVyYXRlZGJ3IHdoZW4gb25seSBvbmUgcGxhbmUgaXMgYWxsb3dlZC4NCj4gPiAgICAgV2Ug bW9kaWZ5IHRoZSBhbGdvcml0aG0gdG8gYWNjb21tb2RhdGUgdGhlIGNhc2Ugd2hlcmUgbm8gb2Yg YWN0aXZlDQo+ID4gICAgIHBsYW5lcyBhcmUgc2FtZSBhcyB0aGUgbWluIG5vIG9mIHBsYW5lcyBz dXBwb3J0ZWQgYnkgYSBxZ3YgcG9pbnQuDQo+ID4gdjk6IEZpeCBkY2xrIHNjYWxpbmcgZm9yIGRn MQ0KPiA+DQo+ID4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRl bC5jb20+DQo+ID4gU3VnZ2VzdGVkLWJ5OiBNYXR0IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJAaW50 ZWwuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFJhZGhha3Jpc2huYSBTcmlwYWRhIDxyYWRoYWty aXNobmEuc3JpcGFkYUBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfYncuYyB8IDIxMSArKysrKysrKysrKysrKysrKysrKy0tLS0NCj4g PiAgMSBmaWxlIGNoYW5nZWQsIDE3OSBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkNCj4g Pg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2J3 LmMNCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYncuYw0KPiA+IGlu ZGV4IDhkOWQ4ODhlOTMxNi4uMTVjMDA2MTk0Yzg1IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYncuYw0KPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfYncuYw0KPiA+IEBAIC0yNyw2ICsyNyw5IEBAIHN0cnVjdCBp bnRlbF9xZ3ZfaW5mbyB7DQo+ID4gIAl1OCBudW1fcG9pbnRzOw0KPiA+ICAJdTggbnVtX3BzZl9w b2ludHM7DQo+ID4gIAl1OCB0X2JsOw0KPiA+ICsJdTggbWF4X251bWNoYW5uZWxzOw0KPiA+ICsJ dTggY2hhbm5lbF93aWR0aDsNCj4gPiArCXU4IGRlaW50ZXJsZWF2ZTsNCj4gPiAgfTsNCj4gPg0K PiA+ICBzdGF0aWMgaW50IGRnMV9tY2hiYXJfcmVhZF9xZ3ZfcG9pbnRfaW5mbyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZQ0KPiA+ICpkZXZfcHJpdiwgQEAgLTQyLDcgKzQ1LDcgQEAgc3RhdGljIGlu dA0KPiA+IGRnMV9tY2hiYXJfcmVhZF9xZ3ZfcG9pbnRfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsDQo+ID4gIAkJZGNsa19yZWZlcmVuY2UgPSA2OyAvKiA2ICogMTYuNjY2 IE1IeiA9IDEwMCBNSHogKi8NCj4gPiAgCWVsc2UNCj4gPiAgCQlkY2xrX3JlZmVyZW5jZSA9IDg7 IC8qIDggKiAxNi42NjYgTUh6ID0gMTMzIE1IeiAqLw0KPiA+IC0Jc3AtPmRjbGsgPSBkY2xrX3Jh dGlvICogZGNsa19yZWZlcmVuY2U7DQo+ID4gKwlzcC0+ZGNsayA9IERJVl9ST1VORF9VUCgoMTY2 NjcgKiBkY2xrX3JhdGlvICogZGNsa19yZWZlcmVuY2UpICsNCj4gPiA1MDAsDQo+ID4gKzEwMDAp Ow0KPiA+DQo+ID4gIAl2YWwgPSBpbnRlbF91bmNvcmVfcmVhZCgmZGV2X3ByaXYtPnVuY29yZSwN Cj4gPiBTS0xfTUNfQklPU19EQVRBXzBfMF8wX01DSEJBUl9QQ1UpOw0KPiA+ICAJaWYgKHZhbCAm IERHMV9HRUFSX1RZUEUpDQo+ID4gQEAgLTY5LDYgKzcyLDcgQEAgc3RhdGljIGludCBpY2xfcGNv ZGVfcmVhZF9xZ3ZfcG9pbnRfaW5mbyhzdHJ1Y3QNCj4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwNCj4gPiAgCQkJCQkgaW50IHBvaW50KQ0KPiA+ICB7DQo+ID4gIAl1MzIgdmFsID0gMCwg dmFsMiA9IDA7DQo+ID4gKwl1MTYgZGNsazsNCj4gPiAgCWludCByZXQ7DQo+ID4NCj4gPiAgCXJl dCA9IHNhbmR5YnJpZGdlX3Bjb2RlX3JlYWQoZGV2X3ByaXYsIEBAIC03OCw3ICs4Miw4IEBAIHN0 YXRpYw0KPiA+IGludCBpY2xfcGNvZGVfcmVhZF9xZ3ZfcG9pbnRfaW5mbyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+ID4gIAlpZiAocmV0KQ0KPiA+ICAJCXJldHVybiByZXQ7 DQo+ID4NCj4gPiAtCXNwLT5kY2xrID0gdmFsICYgMHhmZmZmOw0KPiA+ICsJZGNsayA9IHZhbCAm IDB4ZmZmZjsNCj4gPiArCXNwLT5kY2xrID0gRElWX1JPVU5EX1VQKCgxNjY2NyAqIGRjbGspICsg KERJU1BMQVlfVkVSKGRldl9wcml2KQ0KPiA+ID4gMTEgPw0KPiA+ICs1MDAgOiAwKSwgMTAwMCk7 DQo+ID4gIAlzcC0+dF9ycCA9ICh2YWwgJiAweGZmMDAwMCkgPj4gMTY7DQo+ID4gIAlzcC0+dF9y Y2QgPSAodmFsICYgMHhmZjAwMDAwMCkgPj4gMjQ7DQo+ID4NCj4gPiBAQCAtMTMzLDcgKzEzOCw4 IEBAIGludCBpY2xfcGNvZGVfcmVzdHJpY3RfcWd2X3BvaW50cyhzdHJ1Y3QNCj4gPiBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwgIH0NCj4gPg0KPiA+ICBzdGF0aWMgaW50IGljbF9nZXRfcWd2 X3BvaW50cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+ID4gLQkJCSAgICAg IHN0cnVjdCBpbnRlbF9xZ3ZfaW5mbyAqcWkpDQo+ID4gKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9x Z3ZfaW5mbyAqcWksDQo+ID4gKwkJCSAgICAgIGJvb2wgaXNfeV90aWxlKQ0KPiA+ICB7DQo+ID4g IAljb25zdCBzdHJ1Y3QgZHJhbV9pbmZvICpkcmFtX2luZm8gPSAmZGV2X3ByaXYtPmRyYW1faW5m bzsNCj4gPiAgCWludCBpLCByZXQ7DQo+ID4gQEAgLTE0NCwxNyArMTUwLDQxIEBAIHN0YXRpYyBp bnQgaWNsX2dldF9xZ3ZfcG9pbnRzKHN0cnVjdA0KPiA+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LA0KPiA+ICAJaWYgKERJU1BMQVlfVkVSKGRldl9wcml2KSA9PSAxMikNCj4gPiAgCQlzd2l0 Y2ggKGRyYW1faW5mby0+dHlwZSkgew0KPiA+ICAJCWNhc2UgSU5URUxfRFJBTV9ERFI0Og0KPiA+ IC0JCQlxaS0+dF9ibCA9IDQ7DQo+ID4gKwkJCXFpLT50X2JsID0gaXNfeV90aWxlID8gOCA6IDQ7 DQo+ID4gKwkJCXFpLT5tYXhfbnVtY2hhbm5lbHMgPSAyOw0KPiA+ICsJCQlxaS0+Y2hhbm5lbF93 aWR0aCA9IDY0Ow0KPiA+ICsJCQlxaS0+ZGVpbnRlcmxlYXZlID0gaXNfeV90aWxlID8gMSA6IDI7 DQo+ID4gIAkJCWJyZWFrOw0KPiA+ICAJCWNhc2UgSU5URUxfRFJBTV9ERFI1Og0KPiA+IC0JCQlx aS0+dF9ibCA9IDg7DQo+ID4gKwkJCXFpLT50X2JsID0gaXNfeV90aWxlID8gMTYgOiA4Ow0KPiA+ ICsJCQlxaS0+bWF4X251bWNoYW5uZWxzID0gNDsNCj4gPiArCQkJcWktPmNoYW5uZWxfd2lkdGgg PSAzMjsNCj4gPiArCQkJcWktPmRlaW50ZXJsZWF2ZSA9IGlzX3lfdGlsZSA/IDEgOiAyOw0KPiA+ ICsJCQlicmVhazsNCj4gPiArCQljYXNlIElOVEVMX0RSQU1fTFBERFI0Og0KPiA+ICsJCQlpZiAo SVNfUk9DS0VUTEFLRShkZXZfcHJpdikpIHsNCj4gPiArCQkJCXFpLT50X2JsID0gODsNCj4gPiAr CQkJCXFpLT5tYXhfbnVtY2hhbm5lbHMgPSA0Ow0KPiA+ICsJCQkJcWktPmNoYW5uZWxfd2lkdGgg PSAzMjsNCj4gPiArCQkJCXFpLT5kZWludGVybGVhdmUgPSAyOw0KPiA+ICsJCQkJYnJlYWs7DQo+ ID4gKwkJCX0NCj4gPiArCQkJZmFsbHRocm91Z2g7DQo+ID4gKwkJY2FzZSBJTlRFTF9EUkFNX0xQ RERSNToNCj4gPiArCQkJcWktPnRfYmwgPSAxNjsNCj4gPiArCQkJcWktPm1heF9udW1jaGFubmVs cyA9IDg7DQo+ID4gKwkJCXFpLT5jaGFubmVsX3dpZHRoID0gMTY7DQo+ID4gKwkJCXFpLT5kZWlu dGVybGVhdmUgPSBpc195X3RpbGUgPyAyIDogNDsNCj4gPiAgCQkJYnJlYWs7DQo+ID4gIAkJZGVm YXVsdDoNCj4gPiAgCQkJcWktPnRfYmwgPSAxNjsNCj4gPiArCQkJcWktPm1heF9udW1jaGFubmVs cyA9IDE7DQo+ID4gIAkJCWJyZWFrOw0KPiA+ICAJCX0NCj4gPiAtCWVsc2UgaWYgKERJU1BMQVlf VkVSKGRldl9wcml2KSA9PSAxMSkNCj4gPiArCWVsc2UgaWYgKERJU1BMQVlfVkVSKGRldl9wcml2 KSA9PSAxMSkgew0KPiA+ICAJCXFpLT50X2JsID0gZGV2X3ByaXYtPmRyYW1faW5mby50eXBlID09 IElOVEVMX0RSQU1fRERSNCA/DQo+ID4gNCA6IDg7DQo+ID4gKwkJcWktPm1heF9udW1jaGFubmVs cyA9IDE7DQo+ID4gKwl9DQo+ID4NCj4gPiAgCWlmIChkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRy bSwNCj4gPiAgCQkJcWktPm51bV9wb2ludHMgPiBBUlJBWV9TSVpFKHFpLT5wb2ludHMpKSkgQEAg LQ0KPiA+IDE5MywxMiArMjIzLDYgQEAgc3RhdGljIGludCBpY2xfZ2V0X3Fndl9wb2ludHMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gPiAqZGV2X3ByaXYsDQo+ID4gIAlyZXR1cm4gMDsNCj4g PiAgfQ0KPiA+DQo+ID4gLXN0YXRpYyBpbnQgaWNsX2NhbGNfYncoaW50IGRjbGssIGludCBudW0s IGludCBkZW4pIC17DQo+ID4gLQkvKiBtdWx0aXBsZXMgb2YgMTYuNjY2TUh6ICgxMDAvNikgKi8N Cj4gPiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChudW0gKiBkY2xrICogMTAwLCBkZW4gKiA2 KTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAgc3RhdGljIGludCBhZGxfY2FsY19wc2ZfYncoaW50IGNs aykNCj4gPiAgew0KPiA+ICAJLyoNCj4gPiBAQCAtMjQwLDcgKzI2NCw3IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgaW50ZWxfc2FfaW5mbyB0Z2xfc2FfaW5mbyA9IHsgIH07DQo+ID4NCj4gPiAgc3Rh dGljIGNvbnN0IHN0cnVjdCBpbnRlbF9zYV9pbmZvIHJrbF9zYV9pbmZvID0gew0KPiA+IC0JLmRl YnVyc3QgPSAxNiwNCj4gPiArCS5kZWJ1cnN0ID0gOCwNCj4gPiAgCS5kZXByb2did2xpbWl0ID0g MjAsIC8qIEdCL3MgKi8NCj4gPiAgCS5kaXNwbGF5cnRpZHMgPSAxMjgsDQo+ID4gIAkuZGVyYXRp bmcgPSAxMCwNCj4gPiBAQCAtMjY1LDM1ICsyODksMTMwIEBAIHN0YXRpYyBpbnQgaWNsX2dldF9i d19pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ID4gKmRldl9wcml2LCBjb25zdCBzdHJ1 Y3QgaW50ZWwNCj4gPiAgCXN0cnVjdCBpbnRlbF9xZ3ZfaW5mbyBxaSA9IHt9Ow0KPiA+ICAJYm9v bCBpc195X3RpbGUgPSB0cnVlOyAvKiBhc3N1bWUgeSB0aWxlIG1heSBiZSB1c2VkICovDQo+ID4g IAlpbnQgbnVtX2NoYW5uZWxzID0gbWF4X3QodTgsIDEsIGRldl9wcml2LQ0KPiA+ID5kcmFtX2lu Zm8ubnVtX2NoYW5uZWxzKTsNCj4gPiAtCWludCBkZWludGVybGVhdmU7DQo+ID4gLQlpbnQgaXBx ZGVwdGgsIGlwcWRlcHRocGNoOw0KPiA+ICsJaW50IGlwcWRlcHRoLCBpcHFkZXB0aHBjaCA9IDE2 Ow0KPiA+ICAJaW50IGRjbGtfbWF4Ow0KPiA+ICAJaW50IG1heGRlYnc7DQo+ID4gKwlpbnQgbnVt X2dyb3VwcyA9IEFSUkFZX1NJWkUoZGV2X3ByaXYtPm1heF9idyk7DQo+ID4gIAlpbnQgaSwgcmV0 Ow0KPiA+DQo+ID4gLQlyZXQgPSBpY2xfZ2V0X3Fndl9wb2ludHMoZGV2X3ByaXYsICZxaSk7DQo+ ID4gKwlyZXQgPSBpY2xfZ2V0X3Fndl9wb2ludHMoZGV2X3ByaXYsICZxaSwgaXNfeV90aWxlKTsN Cj4gPiAgCWlmIChyZXQpIHsNCj4gPiAgCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwNCj4g PiAgCQkJICAgICJGYWlsZWQgdG8gZ2V0IG1lbW9yeSBzdWJzeXN0ZW0gaW5mb3JtYXRpb24sDQo+ ID4gaWdub3JpbmcgYmFuZHdpZHRoIGxpbWl0cyIpOw0KPiA+ICAJCXJldHVybiByZXQ7DQo+ID4g IAl9DQo+ID4NCj4gPiAtCWRlaW50ZXJsZWF2ZSA9IERJVl9ST1VORF9VUChudW1fY2hhbm5lbHMs IGlzX3lfdGlsZSA/IDQgOiAyKTsNCj4gPiAgCWRjbGtfbWF4ID0gaWNsX3NhZ3ZfbWF4X2RjbGso JnFpKTsNCj4gPiArCW1heGRlYncgPSBtaW4oc2EtPmRlcHJvZ2J3bGltaXQgKiAxMDAwLCBkY2xr X21heCAqIDE2ICogNiAvIDEwKTsNCj4gPiArCWlwcWRlcHRoID0gbWluKGlwcWRlcHRocGNoLCBz YS0+ZGlzcGxheXJ0aWRzIC8gbnVtX2NoYW5uZWxzKTsNCj4gPiArCXFpLmRlaW50ZXJsZWF2ZSA9 IERJVl9ST1VORF9VUChudW1fY2hhbm5lbHMsIGlzX3lfdGlsZSA/IDQgOiAyKTsNCj4gPiArDQo+ ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2dyb3VwczsgaSsrKSB7DQo+ID4gKwkJc3RydWN0IGlu dGVsX2J3X2luZm8gKmJpID0gJmRldl9wcml2LT5tYXhfYndbaV07DQo+ID4gKwkJaW50IGNscGNo Z3JvdXA7DQo+ID4gKwkJaW50IGo7DQo+ID4gKw0KPiA+ICsJCWNscGNoZ3JvdXAgPSAoc2EtPmRl YnVyc3QgKiBxaS5kZWludGVybGVhdmUgLyBudW1fY2hhbm5lbHMpDQo+ID4gPDwgaTsNCj4gPiAr CQliaS0+bnVtX3BsYW5lcyA9IChpcHFkZXB0aCAtIGNscGNoZ3JvdXApIC8gY2xwY2hncm91cCAr IDE7DQo+ID4gKw0KPiA+ICsJCWJpLT5udW1fcWd2X3BvaW50cyA9IHFpLm51bV9wb2ludHM7DQo+ ID4gKwkJYmktPm51bV9wc2ZfZ3ZfcG9pbnRzID0gcWkubnVtX3BzZl9wb2ludHM7DQo+ID4gKw0K PiA+ICsJCWZvciAoaiA9IDA7IGogPCBxaS5udW1fcG9pbnRzOyBqKyspIHsNCj4gVGhlIGogaGVy ZSBjYW4gYmUgbW9yZSBkZXNjcmlwdGl2ZSB0byBtYWtlIGl0IGVhc3kgdG8gdW5kZXJzdGFuZC4g cy9qL3NhZ3YNCj4gcHJvYmFibHk/DQpJIGFtIG5vdCBzdXJlIGlmIHRoaXMgY2FzZSB3YXJyYW50 cyBhIGRlcGFydHVyZSBmcm9tIHN0YW5kYXJkIGNvbnZlbnRpb24gb2YgbmFtaW5nIGl0ZXJhdG9y cy4NClRoaXMgaXRlcmF0b3IgaiBpcyB1c2VkIGluIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhl IGNvZGUgYW5kIEkgYW0gc2tlcHRpY2FsIGFib3V0IGNoYW5naW5nIGl0Lg0KDQpUaGFua3MgZm9y IHRoZSByZXZpZXcsDQpSYWRoYWtyaXNobmEoUkspIFNyaXBhZGENCj4gDQo+IFRoYW5rcywNCj4g QW51c2hhDQo+ID4gKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9xZ3ZfcG9pbnQgKnNwID0gJnFpLnBv aW50c1tqXTsNCj4gPiArCQkJaW50IGN0LCBidzsNCj4gPiArDQo+ID4gKwkJCS8qDQo+ID4gKwkJ CSAqIE1heCByb3cgY3ljbGUgdGltZQ0KPiA+ICsJCQkgKg0KPiA+ICsJCQkgKiBGSVhNRSB3aGF0 IGlzIHRoZSBsb2dpYyBiZWhpbmQgdGhlDQo+ID4gKwkJCSAqIGFzc3VtZWQgYnVyc3QgbGVuZ3Ro Pw0KPiA+ICsJCQkgKi8NCj4gPiArCQkJY3QgPSBtYXhfdChpbnQsIHNwLT50X3JjLCBzcC0+dF9y cCArIHNwLT50X3JjZCArDQo+ID4gKwkJCQkgICAoY2xwY2hncm91cCAtIDEpICogcWkudF9ibCAr IHNwLT50X3JkcHJlKTsNCj4gPiArCQkJYncgPSBESVZfUk9VTkRfVVAoc3AtPmRjbGsgKiBjbHBj aGdyb3VwICogMzIgKg0KPiA+IG51bV9jaGFubmVscywgY3QpOw0KPiA+DQo+ID4gLQlpcHFkZXB0 aHBjaCA9IDE2Ow0KPiA+ICsJCQliaS0+ZGVyYXRlZGJ3W2pdID0gbWluKG1heGRlYncsDQo+ID4g KwkJCQkJICAgICAgIGJ3ICogKDEwMCAtIHNhLT5kZXJhdGluZykgLyAxMDApOw0KPiA+ICsNCj4g PiArCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+ID4gKwkJCQkgICAgIkJXJWQgLyBR R1YgJWQ6IG51bV9wbGFuZXM9JWQNCj4gPiBkZXJhdGVkYnc9JXVcbiIsDQo+ID4gKwkJCQkgICAg aSwgaiwgYmktPm51bV9wbGFuZXMsIGJpLT5kZXJhdGVkYndbal0pOw0KPiA+ICsJCX0NCj4gPiAr CX0NCj4gPiArCS8qDQo+ID4gKwkgKiBJbiBjYXNlIGlmIFNBR1YgaXMgZGlzYWJsZWQgaW4gQklP Uywgd2UgYWx3YXlzIGdldCAxDQo+ID4gKwkgKiBTQUdWIHBvaW50LCBidXQgd2UgY2FuJ3Qgc2Vu ZCBQQ29kZSBjb21tYW5kcyB0byByZXN0cmljdCBpdA0KPiA+ICsJICogYXMgaXQgd2lsbCBmYWls IGFuZCBwb2ludGxlc3MgYW55d2F5Lg0KPiA+ICsJICovDQo+ID4gKwlpZiAocWkubnVtX3BvaW50 cyA9PSAxKQ0KPiA+ICsJCWRldl9wcml2LT5zYWd2X3N0YXR1cyA9IEk5MTVfU0FHVl9OT1RfQ09O VFJPTExFRDsNCj4gPiArCWVsc2UNCj4gPiArCQlkZXZfcHJpdi0+c2Fndl9zdGF0dXMgPSBJOTE1 X1NBR1ZfRU5BQkxFRDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCB0Z2xfZ2V0X2J3X2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCBjb25zdA0KPiA+ICtzdHJ1Y3QgaW50ZWxfc2FfaW5mbyAqc2EpIHsNCj4gPiArCXN0 cnVjdCBpbnRlbF9xZ3ZfaW5mbyBxaSA9IHt9Ow0KPiA+ICsJY29uc3Qgc3RydWN0IGRyYW1faW5m byAqZHJhbV9pbmZvID0gJmRldl9wcml2LT5kcmFtX2luZm87DQo+ID4gKwlib29sIGlzX3lfdGls ZSA9IHRydWU7IC8qIGFzc3VtZSB5IHRpbGUgbWF5IGJlIHVzZWQgKi8NCj4gPiArCWludCBudW1f Y2hhbm5lbHMgPSBtYXhfdCh1OCwgMSwgZGV2X3ByaXYtDQo+ID4gPmRyYW1faW5mby5udW1fY2hh bm5lbHMpOw0KPiA+ICsJaW50IGlwcWRlcHRoLCBpcHFkZXB0aHBjaCA9IDE2Ow0KPiA+ICsJaW50 IGRjbGtfbWF4Ow0KPiA+ICsJaW50IG1heGRlYncsIHBlYWtidzsNCj4gPiArCWludCBjbHBlcmNo Z3JvdXA7DQo+ID4gKwlpbnQgbnVtX2dyb3VwcyA9IEFSUkFZX1NJWkUoZGV2X3ByaXYtPm1heF9i dyk7DQo+ID4gKwlpbnQgaSwgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IGljbF9nZXRfcWd2X3Bv aW50cyhkZXZfcHJpdiwgJnFpLCBpc195X3RpbGUpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJ CWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLA0KPiA+ICsJCQkgICAgIkZhaWxlZCB0byBnZXQg bWVtb3J5IHN1YnN5c3RlbSBpbmZvcm1hdGlvbiwNCj4gPiBpZ25vcmluZyBiYW5kd2lkdGggbGlt aXRzIik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoZHJh bV9pbmZvLT50eXBlID09IElOVEVMX0RSQU1fTFBERFI0IHx8IGRyYW1faW5mby0+dHlwZSA9PQ0K PiA+IElOVEVMX0RSQU1fTFBERFI1KQ0KPiA+ICsJCW51bV9jaGFubmVscyAqPSAyOw0KPiA+ICsN Cj4gPiArCXFpLmRlaW50ZXJsZWF2ZSA9IHFpLmRlaW50ZXJsZWF2ZSA/IDogRElWX1JPVU5EX1VQ KG51bV9jaGFubmVscywNCj4gPiAraXNfeV90aWxlID8gNCA6IDIpOw0KPiA+ICsNCj4gPiArCWlm IChudW1fY2hhbm5lbHMgPCBxaS5tYXhfbnVtY2hhbm5lbHMgJiYgRElTUExBWV9WRVIoZGV2X3By aXYpDQo+ID4gPj0gMTIpDQo+ID4gKwkJcWkuZGVpbnRlcmxlYXZlID0gbWF4KERJVl9ST1VORF9V UChxaS5kZWludGVybGVhdmUsIDIpLCAxKTsNCj4gPiArDQo+ID4gKwlpZiAoRElTUExBWV9WRVIo ZGV2X3ByaXYpID4gMTEgJiYgbnVtX2NoYW5uZWxzID4NCj4gPiBxaS5tYXhfbnVtY2hhbm5lbHMp DQo+ID4gKwkJZHJtX3dhcm4oJmRldl9wcml2LT5kcm0sICJOdW1iZXIgb2YgY2hhbm5lbHMgZXhj ZWVkcw0KPiA+IG1heCBudW1iZXIgb2YgY2hhbm5lbHMuIik7DQo+ID4gKwlpZiAocWkubWF4X251 bWNoYW5uZWxzICE9IDApDQo+ID4gKwkJbnVtX2NoYW5uZWxzID0gbWluX3QodTgsIG51bV9jaGFu bmVscywNCj4gPiBxaS5tYXhfbnVtY2hhbm5lbHMpOw0KPiA+ICsNCj4gPiArCWRjbGtfbWF4ID0g aWNsX3NhZ3ZfbWF4X2RjbGsoJnFpKTsNCj4gPiArDQo+ID4gKwlwZWFrYncgPSBudW1fY2hhbm5l bHMgKiBESVZfUk9VTkRfVVAocWkuY2hhbm5lbF93aWR0aCwgOCkgKg0KPiA+IGRjbGtfbWF4Ow0K PiA+ICsJbWF4ZGVidyA9IG1pbihzYS0+ZGVwcm9nYndsaW1pdCAqIDEwMDAsIHBlYWtidyAqIDYg LyAxMCk7IC8qIDYwJQ0KPiA+ICovDQo+ID4NCj4gPiAtCW1heGRlYncgPSBtaW4oc2EtPmRlcHJv Z2J3bGltaXQgKiAxMDAwLA0KPiA+IC0JCSAgICAgIGljbF9jYWxjX2J3KGRjbGtfbWF4LCAxNiwg MSkgKiA2IC8gMTApOyAvKiA2MCUgKi8NCj4gPiAgCWlwcWRlcHRoID0gbWluKGlwcWRlcHRocGNo LCBzYS0+ZGlzcGxheXJ0aWRzIC8gbnVtX2NoYW5uZWxzKTsNCj4gPiArCS8qDQo+ID4gKwkgKiBj bHBlcmNoZ3JvdXAgPSA0a3BhZ2VzcGVybWVtcGFnZSAqIGNscGVyY2hwZXJibG9jaywNCj4gPiAr CSAqIGNscGVyY2hwZXJibG9jayA9IDggLyBudW1fY2hhbm5lbHMgKiBpbnRlcmxlYXZlDQo+ID4g KwkgKi8NCj4gPiArCWNscGVyY2hncm91cCA9IDQgKiBESVZfUk9VTkRfVVAoOCwgbnVtX2NoYW5u ZWxzKSAqDQo+ID4gcWkuZGVpbnRlcmxlYXZlOw0KPiA+DQo+ID4gLQlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShkZXZfcHJpdi0+bWF4X2J3KTsgaSsrKSB7DQo+ID4gKwlmb3IgKGkgPSAwOyBp IDwgbnVtX2dyb3VwczsgaSsrKSB7DQo+ID4gIAkJc3RydWN0IGludGVsX2J3X2luZm8gKmJpID0g JmRldl9wcml2LT5tYXhfYndbaV07DQo+ID4gKwkJc3RydWN0IGludGVsX2J3X2luZm8gKmJpX25l eHQ7DQo+ID4gIAkJaW50IGNscGNoZ3JvdXA7DQo+ID4gIAkJaW50IGo7DQo+ID4NCj4gPiAtCQlj bHBjaGdyb3VwID0gKHNhLT5kZWJ1cnN0ICogZGVpbnRlcmxlYXZlIC8gbnVtX2NoYW5uZWxzKSA8 PA0KPiA+IGk7DQo+ID4gLQkJYmktPm51bV9wbGFuZXMgPSAoaXBxZGVwdGggLSBjbHBjaGdyb3Vw KSAvIGNscGNoZ3JvdXAgKyAxOw0KPiA+ICsJCWlmIChpIDwgbnVtX2dyb3VwcyAtIDEpDQo+ID4g KwkJCWJpX25leHQgPSAmZGV2X3ByaXYtPm1heF9id1tpICsgMV07DQo+ID4gKw0KPiA+ICsJCWNs cGNoZ3JvdXAgPSAoc2EtPmRlYnVyc3QgKiBxaS5kZWludGVybGVhdmUgLyBudW1fY2hhbm5lbHMp DQo+ID4gPDwgaTsNCj4gPiArDQo+ID4gKwkJaWYgKGkgPCBudW1fZ3JvdXBzIC0gMSAmJiBjbHBj aGdyb3VwIDwgY2xwZXJjaGdyb3VwKQ0KPiA+ICsJCQliaV9uZXh0LT5udW1fcGxhbmVzID0gKGlw cWRlcHRoIC0gY2xwY2hncm91cCkgLw0KPiA+IGNscGNoZ3JvdXAgKyAxOw0KPiA+ICsJCWVsc2UN Cj4gPiArCQkJYmlfbmV4dC0+bnVtX3BsYW5lcyA9IDA7DQo+ID4NCj4gPiAgCQliaS0+bnVtX3Fn dl9wb2ludHMgPSBxaS5udW1fcG9pbnRzOw0KPiA+ICAJCWJpLT5udW1fcHNmX2d2X3BvaW50cyA9 IHFpLm51bV9wc2ZfcG9pbnRzOyBAQCAtMzEwLDcNCj4gPiArNDI5LDcgQEAgc3RhdGljIGludCBp Y2xfZ2V0X2J3X2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiA+IGNv bnN0IHN0cnVjdCBpbnRlbA0KPiA+ICAJCQkgKi8NCj4gPiAgCQkJY3QgPSBtYXhfdChpbnQsIHNw LT50X3JjLCBzcC0+dF9ycCArIHNwLT50X3JjZCArDQo+ID4gIAkJCQkgICAoY2xwY2hncm91cCAt IDEpICogcWkudF9ibCArIHNwLT50X3JkcHJlKTsNCj4gPiAtCQkJYncgPSBpY2xfY2FsY19idyhz cC0+ZGNsaywgY2xwY2hncm91cCAqIDMyICoNCj4gPiBudW1fY2hhbm5lbHMsIGN0KTsNCj4gPiAr CQkJYncgPSBESVZfUk9VTkRfVVAoc3AtPmRjbGsgKiBjbHBjaGdyb3VwICogMzIgKg0KPiA+IG51 bV9jaGFubmVscywgY3QpOw0KPiA+DQo+ID4gIAkJCWJpLT5kZXJhdGVkYndbal0gPSBtaW4obWF4 ZGVidywNCj4gPiAgCQkJCQkgICAgICAgYncgKiAoMTAwIC0gc2EtPmRlcmF0aW5nKSAvIDEwMCk7 DQo+ID4gQEAgLTMyOSw5ICs0NDgsNiBAQCBzdGF0aWMgaW50IGljbF9nZXRfYndfaW5mbyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiA+ICpkZXZfcHJpdiwgY29uc3Qgc3RydWN0IGludGVsDQo+ ID4gIAkJCQkgICAgIkJXJWQgLyBQU0YgR1YgJWQ6IG51bV9wbGFuZXM9JWQNCj4gPiBidz0ldVxu IiwNCj4gPiAgCQkJCSAgICBpLCBqLCBiaS0+bnVtX3BsYW5lcywgYmktPnBzZl9id1tqXSk7DQo+ ID4gIAkJfQ0KPiA+IC0NCj4gPiAtCQlpZiAoYmktPm51bV9wbGFuZXMgPT0gMSkNCj4gPiAtCQkJ YnJlYWs7DQo+ID4gIAl9DQo+ID4NCj4gPiAgCS8qDQo+ID4gQEAgLTM5NSw2ICs1MTEsMzQgQEAg c3RhdGljIHVuc2lnbmVkIGludCBpY2xfbWF4X2J3KHN0cnVjdA0KPiA+IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LA0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIH0NCj4gPg0KPiA+ICtzdGF0aWMg dW5zaWduZWQgaW50IHRnbF9tYXhfYncoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LA0KPiA+ICsJCQkgICAgICAgaW50IG51bV9wbGFuZXMsIGludCBxZ3ZfcG9pbnQpIHsNCj4gPiAr CWludCBpOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBMZXQncyByZXR1cm4gbWF4IGJ3IGZv ciAwIHBsYW5lcw0KPiA+ICsJICovDQo+ID4gKwludW1fcGxhbmVzID0gbWF4KDEsIG51bV9wbGFu ZXMpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IEFSUkFZX1NJWkUoZGV2X3ByaXYtPm1heF9idykg LSAxOyBpID49IDA7IGktLSkgew0KPiA+ICsJCWNvbnN0IHN0cnVjdCBpbnRlbF9id19pbmZvICpi aSA9DQo+ID4gKwkJCSZkZXZfcHJpdi0+bWF4X2J3W2ldOw0KPiA+ICsNCj4gPiArCQkvKg0KPiA+ ICsJCSAqIFBjb2RlIHdpbGwgbm90IGV4cG9zZSBhbGwgUUdWIHBvaW50cyB3aGVuDQo+ID4gKwkJ ICogU0FHViBpcyBmb3JjZWQgdG8gb2ZmL21pbi9tZWQvbWF4Lg0KPiA+ICsJCSAqLw0KPiA+ICsJ CWlmIChxZ3ZfcG9pbnQgPj0gYmktPm51bV9xZ3ZfcG9pbnRzKQ0KPiA+ICsJCQlyZXR1cm4gVUlO VF9NQVg7DQo+ID4gKw0KPiA+ICsJCWlmIChudW1fcGxhbmVzIDw9IGJpLT5udW1fcGxhbmVzKQ0K PiA+ICsJCQlyZXR1cm4gYmktPmRlcmF0ZWRid1txZ3ZfcG9pbnRdOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCXJldHVybiBkZXZfcHJpdi0+bWF4X2J3WzBdLmRlcmF0ZWRid1txZ3ZfcG9pbnRdOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgdW5zaWduZWQgaW50IGFkbF9wc2ZfYncoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiA+ICAJCQkgICAgICAgaW50IHBzZl9ndl9w b2ludCkNCj4gPiAgew0KPiA+IEBAIC00MTIsMTMgKzU1NiwxMyBAQCB2b2lkIGludGVsX2J3X2lu aXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gPiAqZGV2X3ByaXYpDQo+ID4gIAlpZiAo SVNfREcyKGRldl9wcml2KSkNCj4gPiAgCQlkZzJfZ2V0X2J3X2luZm8oZGV2X3ByaXYpOw0KPiA+ ICAJZWxzZSBpZiAoSVNfQUxERVJMQUtFX1AoZGV2X3ByaXYpKQ0KPiA+IC0JCWljbF9nZXRfYndf aW5mbyhkZXZfcHJpdiwgJmFkbHBfc2FfaW5mbyk7DQo+ID4gKwkJdGdsX2dldF9id19pbmZvKGRl dl9wcml2LCAmYWRscF9zYV9pbmZvKTsNCj4gPiAgCWVsc2UgaWYgKElTX0FMREVSTEFLRV9TKGRl dl9wcml2KSkNCj4gPiAtCQlpY2xfZ2V0X2J3X2luZm8oZGV2X3ByaXYsICZhZGxzX3NhX2luZm8p Ow0KPiA+ICsJCXRnbF9nZXRfYndfaW5mbyhkZXZfcHJpdiwgJmFkbHNfc2FfaW5mbyk7DQo+ID4g IAllbHNlIGlmIChJU19ST0NLRVRMQUtFKGRldl9wcml2KSkNCj4gPiAtCQlpY2xfZ2V0X2J3X2lu Zm8oZGV2X3ByaXYsICZya2xfc2FfaW5mbyk7DQo+ID4gKwkJdGdsX2dldF9id19pbmZvKGRldl9w cml2LCAmcmtsX3NhX2luZm8pOw0KPiA+ICAJZWxzZSBpZiAoRElTUExBWV9WRVIoZGV2X3ByaXYp ID09IDEyKQ0KPiA+IC0JCWljbF9nZXRfYndfaW5mbyhkZXZfcHJpdiwgJnRnbF9zYV9pbmZvKTsN Cj4gPiArCQl0Z2xfZ2V0X2J3X2luZm8oZGV2X3ByaXYsICZ0Z2xfc2FfaW5mbyk7DQo+ID4gIAll bHNlIGlmIChESVNQTEFZX1ZFUihkZXZfcHJpdikgPT0gMTEpDQo+ID4gIAkJaWNsX2dldF9id19p bmZvKGRldl9wcml2LCAmaWNsX3NhX2luZm8pOyAgfSBAQCAtNzQ2LDcNCj4gPiArODkwLDEwIEBA IGludCBpbnRlbF9id19hdG9taWNfY2hlY2soc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3Rh dGUpDQo+ID4gIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3Fndl9wb2ludHM7IGkrKykgew0KPiA+ICAJ CXVuc2lnbmVkIGludCBtYXhfZGF0YV9yYXRlOw0KPiA+DQo+ID4gLQkJbWF4X2RhdGFfcmF0ZSA9 IGljbF9tYXhfYncoZGV2X3ByaXYsIG51bV9hY3RpdmVfcGxhbmVzLA0KPiA+IGkpOw0KPiA+ICsJ CWlmIChESVNQTEFZX1ZFUihkZXZfcHJpdikgPiAxMSkNCj4gPiArCQkJbWF4X2RhdGFfcmF0ZSA9 IHRnbF9tYXhfYncoZGV2X3ByaXYsDQo+ID4gbnVtX2FjdGl2ZV9wbGFuZXMsIGkpOw0KPiA+ICsJ CWVsc2UNCj4gPiArCQkJbWF4X2RhdGFfcmF0ZSA9IGljbF9tYXhfYncoZGV2X3ByaXYsDQo+ID4g bnVtX2FjdGl2ZV9wbGFuZXMsIGkpOw0KPiA+ICAJCS8qDQo+ID4gIAkJICogV2UgbmVlZCB0byBr bm93IHdoaWNoIHFndiBwb2ludCBnaXZlcyB1cw0KPiA+ICAJCSAqIG1heGltdW0gYmFuZHdpZHRo IGluIG9yZGVyIHRvIGRpc2FibGUgU0FHVg0KPiA+IC0tDQo+ID4gMi4yMC4xDQoNCg==