From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Bish, Jim" Subject: Re: [PATCH v4] drm/i915 : Added Programming of the MOCS Date: Thu, 25 Jun 2015 21:06:21 +0000 Message-ID: <558C6D4D.6050908@intel.com> References: <1434554362-22384-1-git-send-email-peter.antoine@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id E14CF4A001 for ; Thu, 25 Jun 2015 14:06:38 -0700 (PDT) In-Reply-To: <1434554362-22384-1-git-send-email-peter.antoine@intel.com> Content-Language: en-US Content-ID: <49A6A675048B1F449007C1AA6D3EA081@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org DQoNCk9uIDA2LzE3LzIwMTUgMDg6MTkgQU0sIFBldGVyIEFudG9pbmUgd3JvdGU6DQo+IFRoaXMg Y2hhbmdlIGFkZHMgdGhlIHByb2dyYW1taW5nIG9mIHRoZSBNT0NTIHJlZ2lzdGVycyB0byB0aGUg Z2VuIDkrDQo+IHBsYXRmb3Jtcy4gVGhpcyBjaGFuZ2Ugc2V0IHByb2dyYW1zIHRoZSBNT0NTIHJl Z2lzdGVyIHZhbHVlcyB0byBhIHNldA0KPiBvZiB2YWx1ZXMgdGhhdCBhcmUgZGVmaW5lZCB0byBi ZSBvcHRpbWFsLg0KPiANCj4gSXQgY3JlYXRlcyBhIGZpeGVkIHJlZ2lzdGVyIHNldCB0aGF0IGlz IHByb2dyYW1tZWQgYWNyb3NzIHRoZSBkaWZmZXJlbnQNCj4gZW5naW5lcyBzbyB0aGF0IGFsbCBl bmdpbmVzIGhhdmUgdGhlIHNhbWUgdGFibGUuIFRoaXMgaXMgZG9uZSBhcyB0aGUNCj4gbWFpbiBS Q1MgY29udGV4dCBvbmx5IGhvbGRzIHRoZSByZWdpc3RlcnMgZm9yIGl0c2VsZiBhbmQgdGhlIHNo YXJlZA0KPiBMMyB2YWx1ZXMuIEJ5IHRyeWluZyB0byBrZWVwIHRoZSByZWdpc3RlcnMgY29uc2lz dGVudCBhY3Jvc3MgdGhlDQo+IGRpZmZlcmVudCBlbmdpbmVzIGl0IHNob3VsZCBtYWtlIHRoZSBw cm9ncmFtbWluZyBmb3IgdGhlIHJlZ2lzdGVycw0KPiBjb25zaXN0ZW50Lg0KPiANCj4gdjI6DQo+ IC0nc3RhdGljIGNvbnN0JyBmb3IgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHN0eWxlIGNo YW5nZXMuKE1hdHQgVHVybmVyKQ0KPiB2MzoNCj4gLSBNYWtlIHRoZSB0YWJsZXMgInNsaWdodGx5 IiBtb3JlIHJlYWRhYmxlLiAoRGFtaWVuIExlc3BpYXUpDQo+IC0gVXBkYXRlZCB0YWJsZXMgZml4 IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24uDQo+IHY0Og0KPiAtIENvZGUgZm9ybWF0dGluZy4gKENo cmlzIFdpbHNvbikNCj4gLSByZS1wcml2YXRpc2VkIG1vY3MgY29kZS4gKERhbmllbCBWZXR0ZXIp DQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBQZXRlciBBbnRvaW5lIDxwZXRlci5hbnRvaW5lQGludGVs LmNvbT4NCj4gLS0tDQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgfCAgIDEg Kw0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgIHwgICA5ICsNCj4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jICB8ICAxMCArLQ0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHJjLmggIHwgICA0ICsNCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X21vY3MuYyB8IDM3MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oIHwgIDY0ICsrKysrKysNCj4gIDYgZmls ZXMgY2hhbmdlZCwgNDYwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMNCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmgNCj4gDQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlDQo+IGluZGV4IGI3ZGRmNDguLmM3ODFlMTkgMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlDQo+IEBAIC0zNSw2ICszNSw3IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIu byBcDQo+ICAJICBpOTE1X2lycS5vIFwNCj4gIAkgIGk5MTVfdHJhY2VfcG9pbnRzLm8gXA0KPiAg CSAgaW50ZWxfbHJjLm8gXA0KPiArCSAgaW50ZWxfbW9jcy5vIFwNCj4gIAkgIGludGVsX3Jpbmdi dWZmZXIubyBcDQo+ICAJICBpbnRlbF91bmNvcmUubw0KPiAgDQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZWcuaA0KPiBpbmRleCA3MjEzMjI0Li4zYTQzNWI1IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlZy5oDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cmVnLmgNCj4gQEAgLTc4MjksNCArNzgyOSwxMyBAQCBlbnVtIHNrbF9kaXNwX3Bvd2VyX3dlbGxz IHsNCj4gICNkZWZpbmUgX1BBTEVUVEVfQSAoZGV2X3ByaXYtPmluZm8uZGlzcGxheV9tbWlvX29m ZnNldCArIDB4YTAwMCkNCj4gICNkZWZpbmUgX1BBTEVUVEVfQiAoZGV2X3ByaXYtPmluZm8uZGlz cGxheV9tbWlvX29mZnNldCArIDB4YTgwMCkNCj4gIA0KPiArLyogTU9DUyAoTWVtb3J5IE9iamVj dCBDb250cm9sIFN0YXRlKSByZWdpc3RlcnMgKi8NCj4gKyNkZWZpbmUgR0VOOV9MTkNGQ01PQ1Mw CQkoMHhCMDIwKQkvKiBMMyBDYWNoZSBDb250cm9sIGJhc2UgKi8NCj4gKw0KPiArI2RlZmluZSBH RU45X0dGWF9NT0NTXzAJCSgweGM4MDApCS8qIEdyYXBoaWNzIE1PQ1MgYmFzZSByZWdpc3Rlciov DQo+ICsjZGVmaW5lIEdFTjlfTUZYMF9NT0NTXzAJKDB4YzkwMCkJLyogTWVkaWEgMCBNT0NTIGJh c2UgcmVnaXN0ZXIqLw0KPiArI2RlZmluZSBHRU45X01GWDFfTU9DU18wCSgweGNBMDApCS8qIE1l ZGlhIDEgTU9DUyBiYXNlIHJlZ2lzdGVyKi8NCj4gKyNkZWZpbmUgR0VOOV9WRUJPWF9NT0NTXzAJ KDB4Y0IwMCkJLyogVmlkZW8gTU9DUyBiYXNlIHJlZ2lzdGVyKi8NCj4gKyNkZWZpbmUgR0VOOV9C TFRfTU9DU18wCQkoMHhjYzAwKQkvKiBCbGl0dGVyIE1PQ1MgYmFzZSByZWdpc3RlciovDQo+ICsN Cj4gICNlbmRpZiAvKiBfSTkxNV9SRUdfSF8gKi8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMN Cj4gaW5kZXggOWY1NDg1ZC4uNzNiOTE5ZCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHJjLmMNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJj LmMNCj4gQEAgLTEzNSw2ICsxMzUsNyBAQA0KPiAgI2luY2x1ZGUgPGRybS9kcm1QLmg+DQo+ICAj aW5jbHVkZSA8ZHJtL2k5MTVfZHJtLmg+DQo+ICAjaW5jbHVkZSAiaTkxNV9kcnYuaCINCj4gKyNp bmNsdWRlICJpbnRlbF9tb2NzLmgiDQo+ICANCj4gICNkZWZpbmUgR0VOOV9MUl9DT05URVhUX1JF TkRFUl9TSVpFICgyMiAqIFBBR0VfU0laRSkNCj4gICNkZWZpbmUgR0VOOF9MUl9DT05URVhUX1JF TkRFUl9TSVpFICgyMCAqIFBBR0VfU0laRSkNCj4gQEAgLTc5Niw3ICs3OTcsNyBAQCBzdGF0aWMg aW50IGxvZ2ljYWxfcmluZ19wcmVwYXJlKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVm LA0KPiAgICoNCj4gICAqIFJldHVybjogbm9uLXplcm8gaWYgdGhlIHJpbmdidWZmZXIgaXMgbm90 IHJlYWR5IHRvIGJlIHdyaXR0ZW4gdG8uDQo+ICAgKi8NCj4gLXN0YXRpYyBpbnQgaW50ZWxfbG9n aWNhbF9yaW5nX2JlZ2luKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLA0KPiAraW50 IGludGVsX2xvZ2ljYWxfcmluZ19iZWdpbihzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1 ZiwNCj4gIAkJCQkgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwgaW50IG51bV9kd29yZHMp DQo+ICB7DQo+ICAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9IHJpbmdidWYtPnJpbmc7 DQo+IEBAIC0xMzc5LDYgKzEzODAsMTMgQEAgc3RhdGljIGludCBnZW44X2luaXRfcmNzX2NvbnRl eHQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywNCj4gIAlpZiAocmV0KQ0KPiAgCQlyZXR1 cm4gcmV0Ow0KPiAgDQo+ICsJLyoNCj4gKwkgKiBGYWlsaW5nIHRvIHByb2dyYW0gdGhlIE1PQ1Mg aXMgbm9uLWZhdGFsLlRoZSBzeXN0ZW0gd2lsbCBub3QNCj4gKwkgKiBydW4gYXQgcGVhayBwZXJm b3JtYW5jZS4gU28gZ2VuZXJhdGUgYSB3YXJuaW5nIGFuZCBjYXJyeSBvbi4NCj4gKwkgKi8NCj4g KwlpZiAoZ2VuOV9wcm9ncmFtX21vY3MocmluZywgY3R4KSAhPSAwKQ0KPiArCQlEUk1fRVJST1Io Ik1PQ1MgZmFpbGVkIHRvIHByb2dyYW06IGV4cGVjdCBwZXJmb3JtYW5jZSBpc3N1ZXMuIik7DQo+ ICsNCj4gIAlyZXR1cm4gaW50ZWxfbHJfY29udGV4dF9yZW5kZXJfc3RhdGVfaW5pdChyaW5nLCBj dHgpOw0KPiAgfQ0KPiAgDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oDQo+IGluZGV4IDA0ZDNh NmQuLmRiYmQ2YWYgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5oDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oDQo+IEBAIC00NCw2 ICs0NCwxMCBAQCBpbnQgaW50ZWxfbG9naWNhbF9yaW5nc19pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOw0KPiAgDQo+ICBpbnQgbG9naWNhbF9yaW5nX2ZsdXNoX2FsbF9jYWNoZXMoc3RydWN0 IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsDQo+ICAJCQkJICBzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY3R4KTsNCj4gKw0KPiAraW50IGludGVsX2xvZ2ljYWxfcmluZ19iZWdpbihzdHJ1Y3QgaW50 ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwNCj4gKwkJCQkgICAgc3RydWN0IGludGVsX2NvbnRleHQg KmN0eCwgaW50IG51bV9kd29yZHMpOw0KPiArDQo+ICAvKioNCj4gICAqIGludGVsX2xvZ2ljYWxf cmluZ19hZHZhbmNlKCkgLSBhZHZhbmNlIHRoZSByaW5nYnVmZmVyIHRhaWwNCj4gICAqIEByaW5n YnVmOiBSaW5nYnVmZmVyIHRvIGFkdmFuY2UuDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9tb2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uN2MwOWU2Nw0KPiAtLS0g L2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYw0KPiBA QCAtMCwwICsxLDM3MyBAQA0KPiArLyoNCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBJbnRlbCBD b3Jwb3JhdGlvbg0KPiArICoNCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhDQo+ICsgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLA0KPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KPiArICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQo+ ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUNCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICoNCj4gKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQNCj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUNCj4gKyAqIFNvZnR3YXJlLg0KPiArICoNCj4g KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SDQo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwNCj4gKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTA0KPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVINCj4gKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H IEZST00sDQo+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQ0KPiArICogU09GVFdBUkUuDQo+ICsg Kg0KPiArICogQXV0aG9yczoNCj4gKyAqICAgIFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVA aW50ZWwuY29tPg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlICJpbnRlbF9tb2NzLmgiDQo+ICsj aW5jbHVkZSAiaW50ZWxfbHJjLmgiDQo+ICsjaW5jbHVkZSAiaW50ZWxfcmluZ2J1ZmZlci5oIg0K PiArDQo+ICsvKiBzdHJ1Y3R1cmVzIHJlcXVpcmVkICovDQo+ICtzdHJ1Y3QgZHJtX2k5MTVfbW9j c19lbnRyeSB7DQo+ICsJdTMyCWNvbnRyb2xfdmFsdWU7DQo+ICsJdTE2CWwzY2NfdmFsdWU7DQo+ ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSB7DQo+ICsJdTMyCQkJCQlz aXplOw0KPiArCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9tb2NzX2VudHJ5CSp0YWJsZTsNCj4gK307 DQo+ICsNCj4gKy8qIERlZmluZXMgZm9yIHRoZSB0YWJsZXMgKFhYWF9NT0NTXzAgLSBYWFhfTU9D U182MykgKi8NCj4gKyNkZWZpbmUJTU9DU19DQUNIRUFCSUxJVFkodmFsdWUpCSh2YWx1ZSA8PCAw KQ0KPiArI2RlZmluZQlNT0NTX1RHVF9DQUNIRSh2YWx1ZSkJCSh2YWx1ZSA8PCAyKQ0KPiArI2Rl ZmluZQlNT0NTX0xSVU0odmFsdWUpCQkodmFsdWUgPDwgNCkNCj4gKyNkZWZpbmUJTU9DU19BT00o dmFsdWUpCQkJKHZhbHVlIDw8IDYpDQo+ICsjZGVmaW5lCU1PQ1NfTEVDQ19FU0ModmFsdWUpCQko dmFsdWUgPDwgNykNCj4gKyNkZWZpbmUJTU9DU19MRUNDX1NDQyh2YWx1ZSkJCSh2YWx1ZSA8PCA4 KQ0KPiArI2RlZmluZQlNT0NfUEZNKHZhbHVlKQkJCSh2YWx1ZSA8PCAxMSkNCj4gKyNkZWZpbmUJ TU9DU19TQ0YodmFsdWUpCQkJKHZhbHVlIDw8IDE0KQ0KPiArDQo+ICsvKiBEZWZpbmVzIGZvciB0 aGUgdGFibGVzIChMTkNGTU9DUzAgLSBMTkNGTU9DUzMxKSAtIHR3byBlbnRyaWVzIHBlciB3b3Jk ICovDQo+ICsjZGVmaW5lCU1PQ1NfRVNDKHZhbHVlKQkJCSh2YWx1ZSA8PCAwKQ0KPiArI2RlZmlu ZQlNT0NTX1NDQyh2YWx1ZSkJCQkodmFsdWUgPDwgMSkNCj4gKyNkZWZpbmUJTU9DU19MM19DQUNI RUFCSUxJVFkodmFsdWUpCSh2YWx1ZSA8PCA0KQ0KPiArDQo+ICsvKiBIZWxwZXIgZGVmaW5lcyAq Lw0KPiArI2RlZmluZSBHRU45X05VTV9NT0NTX1JJTkdTCSg1KQkvKiBOdW1iZXIgb2YgbW9jcyBl bmdpbmVzIHRvIHByb2dyYW0gKi8NCj4gKyNkZWZpbmUgR0VOOV9OVU1fTU9DU19FTlRSSUVTCSg2 MykJLyogNjMgb3V0IG9mIDY0IC0gNjQgaXMgcnN2cmQgKi8NCnNwZWMgc2hvd3MgdG9wIHR3byBl bnRyaWVzIGFzIHJlc2VydmVkIGZvciBoYXJkd2FyZS4gIHBsZWFzZSBkb3VibGUgY2hlY2sNCmFu ZCB1cGRhdGUNCj4gKw0KPiArLyogRURSQU0gQ2FjaGluZyBvcHRpb25zICovDQo+ICsjZGVmaW5l IEVEUkFNX1BBR0VUQUJMRQkJKDApDQo+ICsjZGVmaW5lIEVEUkFNX1VDCQkoMSkNCj4gKyNkZWZp bmUgRURSQU1fUkVTRVJWRUQJCSgyKQ0KPiArI2RlZmluZSBFRFJBTV9XQgkJKDMpDQo+ICsNCj4g Ky8qIEwzIENhY2hpbmcgb3B0aW9ucyAqLw0KPiArI2RlZmluZSBMM19ESVJFQ1QJCSgwKQ0KPiAr I2RlZmluZSBMM19VQwkJCSgxKQ0KPiArI2RlZmluZSBMM19SRVNFUlZFRAkJKDIpDQo+ICsjZGVm aW5lIEwzX1dCCQkJKDMpDQo+ICsNCj4gKy8qIHRhcmdldCBjYWNoZSAqLw0KPiArI2RlZmluZSBF TExDCQkJKDApDQo+ICsjZGVmaW5lIExMQwkJCSgxKQ0KPiArI2RlZmluZSBMTENfRUxMQwkJKDIp DQo+ICsNCj4gKy8qDQo+ICsgKiBNT0NTIHRhYmxlcw0KPiArICoNCj4gKyAqIFRoZXNlIGFyZSB0 aGUgTU9DUyB0YWJsZXMgdGhhdCBhcmUgcHJvZ3JhbW1lZCBhY3Jvc3MgYWxsIHRoZSByaW5ncy4N Cj4gKyAqIFRoZSBjb250cm9sIHZhbHVlIGlzIHByb2dyYW1tZWQgdG8gYWxsIHRoZSByaW5ncyB0 aGF0IHN1cHBvcnQgdGhlDQo+ICsgKiBNT0NTIHJlZ2lzdGVycy4gV2hpbGUgdGhlIGwzY2NfdmFs dWVzIGFyZSBvbmx5IHByb2dyYW1tZWQgdG8gdGhlDQo+ICsgKiBMTkNGQ01PQ1MwIC0gTE5DRkNN T0NTMzIgcmVnaXN0ZXJzLg0KPiArICoNCj4gKyAqIE5PVEU6IFRoZXNlIHRhYmxlcyBNVVNUIHN0 YXJ0IHdpdGggYmVpbmcgdW5jYWNoZWQgYW5kIHRoZSBsZW5ndGggTVVTVCBiZQ0KPiArICogICAg ICAgbGVzcyB0aGFuIDYzIGFzIHRoZSBsYXN0IHR3byByZWdpc3RlcnMgYXJlIHJlc2VydmVkIGJ5 IHRoZSBoYXJkd2FyZS4NCj4gKyAqLw0KPiArc3RhdGljIHN0cnVjdCBkcm1faTkxNV9tb2NzX2Vu dHJ5IHNreWxha2VfbW9jc190YWJsZVtdID0gew0KPiArCSAvKiB7MHgwMDAwMDAwOSwgMHgwMDEw fSAqLw0KPiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fVUMpIHwgTU9DU19UR1RfQ0FDSEUo TExDX0VMTEMpIHwNCj4gKwkJTU9DU19MUlVNKDApIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0Nf RVNDKDApIHwgTU9DU19TQ0MoMCkgfA0KPiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLA0K PiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwz X1VDKSl9LA0KPiArCSAvKiB7MHgwMDAwMDAzYiwgMHgwMDMwfSAqLw0KPiArCXsoTU9DU19DQUNI RUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDX0VMTEMpIHwNCj4gKwkJTU9D U19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkg fA0KPiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLA0KPiArCQkoTU9DU19FU0MoMCkgfCBN T0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9LA0KPiArCSAvKiB7MHgw MDAwMDAzOSwgMHgwMDEwfSAqLw0KPiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fVUMpIHwg TU9DU19UR1RfQ0FDSEUoTExDX0VMTEMpIHwNCj4gKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00o MCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfA0KPiArCQlNT0NfUEZNKDApIHwg TU9DU19TQ0YoMCkpLA0KPiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNf Q0FDSEVBQklMSVRZKEwzX1VDKSl9LA0KPiArCSAvKiB7MHgwMDAwMDAxNywgMHgwMDMwfSAqLw0K PiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8 DQo+ICsJCU1PQ1NfTFJVTSgxKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwNCj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwNCj4gKwkJKE1PQ1Nf RVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19XQikpfSwNCj4g KwkgLyogezB4MDAwMDAwMTcsIDB4MDAxMH0gKi8NCj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVE UkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfA0KPiArCQlNT0NTX0xSVU0oMSkgfCBNT0NT X0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8DQo+ICsJCU1PQ19QRk0o MCkgfCBNT0NTX1NDRigwKSksDQo+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9D U19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sDQo+ICsJIC8qIHsweDAwMDAwMDE5LCAweDAwMTB9 ICovDQo+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShM TENfRUxMQykgfA0KPiArCQlNT0NTX0xSVU0oMSkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19F U0MoMCkgfCBNT0NTX1NDQygwKSB8DQo+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksDQo+ ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNf VUMpKX0sDQo+ICsJIC8qIHsweDAwMDAwMDM3LCAweDAwMzB9ICovDQo+ICsJeyhNT0NTX0NBQ0hF QUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwNCj4gKwkJTU9DU19MUlVN KDMpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfA0KPiAr CQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLA0KPiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1ND QygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9LA0KPiArCSAvKiB7MHgwMDAwMDAz NywgMHgwMDEwfSAqLw0KPiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19U R1RfQ0FDSEUoTExDKSB8DQo+ICsJCU1PQ1NfTFJVTSgzKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19M RUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwNCj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDAp KSwNCj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElU WShMM19VQykpfSwNCj4gKwkgLyogezB4MDAwMDAwM2IsIDB4MDAxMH0gKi8NCj4gKwl7KE1PQ1Nf Q0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQ19FTExDKSB8DQo+ICsJ CU1PQ1NfTFJVTSgzKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0ND KDApIHwNCj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwNCj4gKwkJKE1PQ1NfRVNDKDAp IHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwNCj4gK307DQo+ ICsNCnBsZWFzZSBhZGQgY29tbWVudCBhYm92ZSB0aGUgYnJveHRvbiB0YWJsZSB0byBjbGFyaWZ5 IHRoZSB1c2Ugb2YgTExDIGluIHRoZSANCk1PQ1NfVEdUX0NBQ0hFIGFzIG5vdCBhcHBsaWNhYmxl IGZvciBicm94dG9uLg0KDQo+ICtzdGF0aWMgc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkgYnJv eHRvbl9tb2NzX3RhYmxlW10gPSB7DQo+ICsJIC8qIHsweDAwMDAwMDAxLCAweDAwMTB9ICovDQo+ ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShFTExDKSB8 DQo+ICsJCU1PQ1NfTFJVTSgwKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwNCj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwNCj4gKwkJKE1PQ1Nf RVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwNCj4g KwkgLyogezB4MDAwMDAwMDUsIDB4MDAxMH0gKi8NCj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVE UkFNX1VDKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfA0KPiArCQlNT0NTX0xSVU0oMCkgfCBNT0NT X0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8DQo+ICsJCU1PQ19QRk0o MCkgfCBNT0NTX1NDRigwKSksDQo+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9D U19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sDQo+ICsJIC8qIHsweDAwMDAwMDA1LCAweDAwMzB9 ICovDQo+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShM TEMpIHwNCj4gKwkJTU9DU19MUlVNKDApIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDAp IHwgTU9DU19TQ0MoMCkgfA0KPiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLA0KPiArCQko TU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9 LA0KPiArCSAvKiB7MHgwMDAwMDAxNywgMHgwMDMwfSAqLw0KPiArCXsoTU9DU19DQUNIRUFCSUxJ VFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8DQo+ICsJCU1PQ1NfTFJVTSgxKSB8 IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwNCj4gKwkJTU9D X1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwNCj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkg fCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19XQikpfSwNCj4gKwkgLyogezB4MDAwMDAwMTcsIDB4 MDAxMH0gKi8NCj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NB Q0hFKExMQykgfA0KPiArCQlNT0NTX0xSVU0oMSkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19F U0MoMCkgfCBNT0NTX1NDQygwKSB8DQo+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksDQo+ ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNf VUMpKX0sDQo+ICsJIC8qIHsweDAwMDAwMDE5LCAweDAwMTB9ICovDQo+ICsJeyhNT0NTX0NBQ0hF QUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfA0KPiArCQlNT0NT X0xSVU0oMSkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8 DQo+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksDQo+ICsJCShNT0NTX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sDQo+ICsJIC8qIHsweDAw MDAwMDM3LCAweDAwMzB9ICovDQo+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBN T0NTX1RHVF9DQUNIRShMTEMpIHwNCj4gKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBN T0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfA0KPiArCQlNT0NfUEZNKDApIHwgTU9DU19T Q0YoMCkpLA0KPiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVB QklMSVRZKEwzX1dCKSl9LA0KPiArCSAvKiB7MHgwMDAwMDAzNywgMHgwMDEwfSAqLw0KPiArCXso TU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8DQo+ICsJ CU1PQ1NfTFJVTSgzKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0ND KDApIHwNCj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwNCj4gKwkJKE1PQ1NfRVNDKDAp IHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwNCj4gKwkgLyog ezB4MDAwMDAwM2IsIDB4MDAxMH0gKi8NCj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dC KSB8IE1PQ1NfVEdUX0NBQ0hFKExMQ19FTExDKSB8DQo+ICsJCU1PQ1NfTFJVTSgzKSB8IE1PQ1Nf QU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwNCj4gKwkJTU9DX1BGTSgw KSB8IE1PQ1NfU0NGKDApKSwNCj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NT X0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogZ2V0 X21vY3Nfc2V0dGluZ3MNCj4gKyAqDQo+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRo ZSB2YWx1ZXMgb2YgdGhlIE1PQ1MgdGFibGUgdGhhdCBuZWVkcyB0bw0KPiArICogYmUgcHJvZ3Jh bW1lZCBmb3IgdGhlIHBsYXRmb3JtLiBJdCB3aWxsIHJldHVybiB0aGUgdmFsdWVzIHRoYXQgbmVl ZA0KPiArICogdG8gYmUgcHJvZ3JhbW1lZCBhbmQgaWYgdGhleSBuZWVkIHRvIGJlIHByb2dyYW1t ZWQuDQo+ICsgKg0KPiArICogSWYgdGhlIHJldHVybiB2YWx1ZXMgaXMgZmFsc2UgdGhlbiB0aGUg cmVnaXN0ZXJzIGRvIG5vdCBuZWVkIHByb2dyYW1taW5nLg0KPiArICovDQo+ICtzdGF0aWMgYm9v bCBnZXRfbW9jc19zZXR0aW5ncyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LA0KPiArCQkJICAgICAg c3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUgKnRhYmxlKSB7DQo+ICsJYm9vbAlyZXN1bHQgPSBm YWxzZTsNCj4gKw0KPiArCWlmIChJU19TS1lMQUtFKGRldikpIHsNCj4gKwkJdGFibGUtPnNpemUg ID0gQVJSQVlfU0laRShza3lsYWtlX21vY3NfdGFibGUpOw0KPiArCQl0YWJsZS0+dGFibGUgPSBz a3lsYWtlX21vY3NfdGFibGU7DQo+ICsJCXJlc3VsdCA9IHRydWU7DQo+ICsJfSBlbHNlIGlmIChJ U19CUk9YVE9OKGRldikpIHsNCj4gKwkJdGFibGUtPnNpemUgID0gQVJSQVlfU0laRShicm94dG9u X21vY3NfdGFibGUpOw0KPiArCQl0YWJsZS0+dGFibGUgPSBicm94dG9uX21vY3NfdGFibGU7DQo+ ICsJCXJlc3VsdCA9IHRydWU7DQo+ICsJfSBlbHNlIHsNCj4gKwkJLyogUGxhdGZvcm0gdGhhdCBz aG91bGQgaGF2ZSBhIE1PQ1MgdGFibGUgZG9lcyBub3QgKi8NCj4gKwkJV0FSTl9PTihJTlRFTF9J TkZPKGRldiktPmdlbiA+PSA5KTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcmVzdWx0Ow0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAqIGVtaXRfbW9jc19jb250cm9sX3RhYmxlKCkgLSBlbWl0IHRo ZSBtb2NzIGNvbnRyb2wgdGFibGUNCj4gKyAqIEByaW5nYnVmOglEUk0gZGV2aWNlLg0KPiArICog QHRhYmxlOglUaGUgdmFsdWVzIHRvIHByb2dyYW0gaW50byB0aGUgY29udHJvbCByZWdzLg0KPiAr ICogQHJlZ19iYXNlOglUaGUgYmFzZSBmb3IgdGhlIEVuZ2luZSB0aGF0IG5lZWRzIHRvIGJlIHBy b2dyYW1tZWQuDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgZW1pdHMgYSBNSV9M T0FEX1JFR0lTVEVSX0lNTSBjb21tYW5kIGZvciB0aGUNCj4gKyAqIGdpdmVuIHRhYmxlIHN0YXJ0 aW5nIGF0IHRoZSBnaXZlbiBhZGRyZXNzLg0KPiArICoNCj4gKyAqIFJldHVybjogTm90aGluZy4N Cj4gKyAqLw0KPiArc3RhdGljIHZvaWQgZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUoc3RydWN0IGlu dGVsX3JpbmdidWZmZXIgKnJpbmdidWYsDQo+ICsJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9tb2Nz X3RhYmxlICp0YWJsZSwNCj4gKwkJCQkgICAgdTMyIHJlZ19iYXNlKQ0KPiArew0KPiArCXVuc2ln bmVkIGludCBpbmRleDsNCj4gKw0KPiArCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYs DQo+ICsJCQlNSV9MT0FEX1JFR0lTVEVSX0lNTShHRU45X05VTV9NT0NTX0VOVFJJRVMpKTsNCj4g Kw0KPiArCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRhYmxlLT5zaXplOyBpbmRleCsrKSB7DQo+ ICsJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHJlZ19iYXNlICsgKGluZGV4ICog NCkpOw0KPiArCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLA0KPiArCQkJCQl0YWJs ZS0+dGFibGVbaW5kZXhdLmNvbnRyb2xfdmFsdWUpOw0KPiArCX0NCj4gKw0KPiArCS8qDQo+ICsJ ICogT2ssIG5vdyBzZXQgdGhlIHVudXNlZCBlbnRyaWVzIHRvIHVuY2FjaGVkLiBUaGVzZSBlbnRy aWVzIGFyZQ0KPiArCSAqIG9mZmljaWFsbHkgdW5kZWZpbmVkIGFuZCBubyBjb250YWN0IGlzIGdp dmVuIGZvciB0aGUgY29udGVudHMgYW5kDQo+ICsJICogc2V0dGluZ3MgaXMgZ2l2ZW4gZm9yIHRo ZXNlIGVudHJpZXMuDQo+ICsJICoNCj4gKwkgKiBFbnRyeSAwIGluIHRoZSB0YWJsZSBpcyB1bmNh Y2hlZCAtIHNvIHdlIGFyZSBqdXN0IHdyaXR0ZW4gdGhhdA0KPiArCSAqIHZhbHVlIHRvIGFsbCB0 aGUgdXNlZCBlbnRyaWVzLg0KPiArCSAqLw0KPiArCWZvciAoOyBpbmRleCA8IEdFTjlfTlVNX01P Q1NfRU5UUklFUzsgaW5kZXgrKykgew0KPiArCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5n YnVmLCByZWdfYmFzZSArIChpbmRleCAqIDQpKTsNCj4gKwkJaW50ZWxfbG9naWNhbF9yaW5nX2Vt aXQocmluZ2J1ZiwgdGFibGUtPnRhYmxlWzBdLmNvbnRyb2xfdmFsdWUpOw0KPiArCX0NCj4gKw0K PiArCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1JX05PT1ApOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAqIGVtaXRfbW9jc19sM2NjX3RhYmxlKCkgLSBlbWl0IHRoZSBtb2NzIGNv bnRyb2wgdGFibGUNCj4gKyAqIEByaW5nYnVmOglEUk0gZGV2aWNlLg0KPiArICogQHRhYmxlOglU aGUgdmFsdWVzIHRvIHByb2dyYW0gaW50byB0aGUgY29udHJvbCByZWdzLg0KPiArICoNCj4gKyAq IFRoaXMgZnVuY3Rpb24gc2ltcGx5IGVtaXRzIGEgTUlfTE9BRF9SRUdJU1RFUl9JTU0gY29tbWFu ZCBmb3IgdGhlDQo+ICsgKiBnaXZlbiB0YWJsZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkcmVz cy4gVGhpcyByZWdpc3RlciBzZXQgaXMgIHByb2dyYW1tZWQNCj4gKyAqIGluIHBhaXJzLg0KPiAr ICoNCj4gKyAqIFJldHVybjogTm90aGluZy4NCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgZW1pdF9t b2NzX2wzY2NfdGFibGUoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsDQo+ICsJCQkg c3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUgKnRhYmxlKSB7DQo+ICsJdW5zaWduZWQgaW50IGNv dW50Ow0KPiArCXVuc2lnbmVkIGludCBpOw0KPiArCXUzMiB2YWx1ZTsNCj4gKwl1MzIgZmlsbGVy ID0gKHRhYmxlLT50YWJsZVswXS5sM2NjX3ZhbHVlICYgMHhmZmZmKSB8DQo+ICsJCQkoKHRhYmxl LT50YWJsZVswXS5sM2NjX3ZhbHVlICYgMHhmZmZmKSA8PCAxNik7DQo+ICsNCj4gKwlpbnRlbF9s b2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLA0KPiArCQkJTUlfTE9BRF9SRUdJU1RFUl9JTU0oR0VO OV9OVU1fTU9DU19FTlRSSUVTIC8gMikpOw0KPiArDQo+ICsJZm9yIChpID0gMCwgY291bnQgPSAw OyBpIDwgdGFibGUtPnNpemUgLyAyOyBpKyssIGNvdW50ICs9IDIpIHsNCj4gKwkJdmFsdWUgPSAo dGFibGUtPnRhYmxlW2NvdW50XS5sM2NjX3ZhbHVlICYgMHhmZmZmKSB8DQo+ICsJCQkoKHRhYmxl LT50YWJsZVtjb3VudCArIDFdLmwzY2NfdmFsdWUgJiAweGZmZmYpIDw8IDE2KTsNCj4gKw0KPiAr CQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBHRU45X0xOQ0ZDTU9DUzAgKyAoaSAq IDQpKTsNCj4gKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgdmFsdWUpOw0KPiAr CX0NCj4gKw0KPiArCWlmICh0YWJsZS0+c2l6ZSAmIDB4MDEpIHsNCj4gKwkJLyogT2RkIHRhYmxl IHNpemUgLSAxIGxlZnQgb3ZlciAqLw0KPiArCQl2YWx1ZSA9ICh0YWJsZS0+dGFibGVbY291bnRd LmwzY2NfdmFsdWUgJiAweGZmZmYpIHwNCj4gKwkJCSgodGFibGUtPnRhYmxlWzBdLmwzY2NfdmFs dWUgJiAweGZmZmYpIDw8IDE2KTsNCj4gKwl9IGVsc2UNCj4gKwkJdmFsdWUgPSBmaWxsZXI7DQo+ ICsNCj4gKwkvKg0KPiArCSAqIE5vdyBzZXQgdGhlIHJlc3Qgb2YgdGhlIHRhYmxlIHRvIHVuY2Fj aGVkIC0gdXNlIGVudHJ5IDAgYXMgdGhpcw0KPiArCSAqIHdpbGwgYmUgdW5jYWNoZWQuIExlYXZl IHRoZSBsYXN0IHBhaXIgYXMgaW5pdGlhbGlzZWQgYXMgdGhleSBhcmUNCj4gKwkgKiByZXNlcnZl ZCBieSB0aGUgaGFyZHdhcmUuDQo+ICsJICovDQo+ICsJZm9yICg7IGkgPCAoR0VOOV9OVU1fTU9D U19FTlRSSUVTIC8gMikgLSAxOyBpKyspIHsNCj4gKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQo cmluZ2J1ZiwgR0VOOV9MTkNGQ01PQ1MwICsgKGkgKiA0KSk7DQo+ICsJCWludGVsX2xvZ2ljYWxf cmluZ19lbWl0KHJpbmdidWYsIHZhbHVlKTsNCj4gKw0KPiArCQl2YWx1ZSA9IGZpbGxlcjsNCj4g Kwl9DQo+ICsNCj4gKwlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBNSV9OT09QKTsN Cj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIGdlbjlfcHJvZ3JhbV9tb2NzKCkgLSBwcm9ncmFtIHRo ZSBNT0NTIHJlZ2lzdGVyLg0KPiArICoNCj4gKyAqIHJpbmc6CVRoZSByaW5nIHRoYXQgdGhlIHBy b2dyYW1taW5nIGJhdGNoIHdpbGwgYmUgcnVuIGluLg0KPiArICogY3R4OgkJVGhlIGludGVsX2Nv bnRleHQgdG8gYmUgdXNlZC4NCj4gKyAqDQo+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZW1pdCBh IGJhdGNoIGJ1ZmZlciB3aXRoIHRoZSB2YWx1ZXMgcmVxdWlyZWQgZm9yDQo+ICsgKiBwcm9ncmFt bWluZyB0aGUgTU9DUyByZWdpc3RlciB2YWx1ZXMgZm9yIGFsbCB0aGUgY3VycmVudGx5IHN1cHBv cnRlZA0KPiArICogcmluZ3MuDQo+ICsgKg0KPiArICogVGhlc2UgcmVnaXN0ZXJzIGFyZSBwYXJ0 aWFsbHkgc3RvcmVkIGluIHRoZSBSQ1MgY29udGV4dCwgc28gdGhleSBhcmUNCj4gKyAqIGVtaXR0 ZWQgYXQgdGhlIHNhbWUgdGltZSBzbyB0aGF0IHdoZW4gYSBjb250ZXh0IGlzIGNyZWF0ZWQgdGhl c2UgcmVnaXN0ZXJzDQo+ICsgKiBhcmUgc2V0IHVwLiBUaGVzZSByZWdpc3RlcnMgaGF2ZSB0byBi ZSBlbWl0dGVkIGludG8gdGhlIHN0YXJ0IG9mIHRoZQ0KPiArICogY29udGV4dCBhcyBzZXR0aW5n IHRoZSBFTFNQIHdpbGwgcmUtaW5pdCBzb21lIG9mIHRoZXNlIHJlZ2lzdGVycyBiYWNrDQo+ICsg KiB0byB0aGUgaHcgdmFsdWVzLg0KPiArICoNCj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBv dGhlcndpc2UgdGhlIGVycm9yIHN0YXR1cy4NCj4gKyAqLw0KPiAraW50IGdlbjlfcHJvZ3JhbV9t b2NzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsDQo+ICsJCQkgIHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjdHgpDQo+ICt7DQo+ICsJaW50IHJldCA9IDA7DQo+ICsNCj4gKwlzdHJ1Y3QgZHJt X2k5MTVfbW9jc190YWJsZSB0Ow0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5k ZXY7DQo+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYgPSBjdHgtPmVuZ2luZVty aW5nLT5pZF0ucmluZ2J1ZjsNCj4gKw0KPiArCWlmIChnZXRfbW9jc19zZXR0aW5ncyhkZXYsICZ0 KSkgew0KPiArCQl1MzIgdGFibGVfc2l6ZTsNCj4gKw0KPiArCQkvKg0KPiArCQkgKiBPSy4gRm9y IGVhY2ggc3VwcG9ydGVkIHJpbmc6DQo+ICsJCSAqICBudW1iZXIgb2YgbW9jcyBlbnRyaWVzICog MiBkd29yZHMgZm9yIGVhY2ggY29udHJvbF92YWx1ZQ0KPiArCQkgKiAgcGx1cyBudW1iZXIgb2Yg bW9jcyBlbnRyaWVzIC8yIGR3b3JkcyBmb3IgbDNjYyB2YWx1ZXMuDQo+ICsJCSAqDQo+ICsJCSAq ICBQbHVzIDEgZm9yIHRoZSBsb2FkIGNvbW1hbmQgYW5kIDEgZm9yIHRoZSBOT09QIHBlciByaW5n DQo+ICsJCSAqICBhbmQgdGhlIGwzY2MgcHJvZ3JhbW1pbmcuDQo+ICsJCSAqLw0KPiArCQl0YWJs ZV9zaXplID0gR0VOOV9OVU1fTU9DU19SSU5HUyAqDQo+ICsJCQkJKCgyICogR0VOOV9OVU1fTU9D U19FTlRSSUVTKSArIDIpICsNCj4gKwkJCQlHRU45X05VTV9NT0NTX0VOVFJJRVMgKyAyOw0KPiAr CQlyZXQgPSBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4ocmluZ2J1ZiwgY3R4LCB0YWJsZV9zaXpl KTsNCj4gKwkJaWYgKHJldCkgew0KPiArCQkJRFJNX0RFQlVHKCJpbnRlbF9sb2dpY2FsX3Jpbmdf YmVnaW4gZmFpbGVkICVkXG4iLCByZXQpOw0KPiArCQkJcmV0dXJuIHJldDsNCj4gKwkJfQ0KPiAr DQo+ICsJCS8qIHByb2dyYW0gdGhlIGNvbnRyb2wgcmVnaXN0ZXJzICovDQo+ICsJCWVtaXRfbW9j c19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0LCBHRU45X0dGWF9NT0NTXzApOw0KPiArCQllbWl0 X21vY3NfY29udHJvbF90YWJsZShyaW5nYnVmLCAmdCwgR0VOOV9NRlgwX01PQ1NfMCk7DQo+ICsJ CWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0LCBHRU45X01GWDFfTU9DU18wKTsN Cj4gKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdFTjlfVkVCT1hfTU9D U18wKTsNCj4gKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdFTjlfQkxU X01PQ1NfMCk7DQo+ICsNCj4gKwkJLyogbm93IHByb2dyYW0gdGhlIGwzY2MgcmVnaXN0ZXJzICov DQo+ICsJCWVtaXRfbW9jc19sM2NjX3RhYmxlKHJpbmdidWYsICZ0KTsNCj4gKw0KPiArCQlpbnRl bF9sb2dpY2FsX3JpbmdfYWR2YW5jZShyaW5nYnVmKTsNCj4gKw0KPiArCQlEUk1fREVCVUcoIk1P Q1M6IFRhYmxlIHNldCBpbiBDb250ZXh0XG4iKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlEUk1fREVC VUcoIk1PQ1M6IFRhYmxlIE5vdCBzdXBwb3J0ZWQgb24gcGxhdGZvcm1cbiIpOw0KPiArCX0NCj4g Kw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX21vY3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3Mu aA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi5lMjc4MGNlDQo+IC0t LSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oDQo+ IEBAIC0wLDAgKzEsNjQgQEANCj4gKy8qDQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgSW50ZWwg Q29ycG9yYXRpb24NCj4gKyAqDQo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQ0KPiArICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwNCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24NCj4gKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLA0K PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlDQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KPiArICoNCj4gKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQNCj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUNCj4gKyAqIFNvZnR3YXJlLg0KPiAr ICoNCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwNCj4gKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTA0KPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVINCj4gKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HIEZST00sDQo+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQ0KPiArICogU09GVFdBUkUu DQo+ICsgKg0KPiArICogQXV0aG9yczoNCj4gKyAqICAgIFBldGVyIEFudG9pbmUgPHBldGVyLmFu dG9pbmVAaW50ZWwuY29tPg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgSU5URUxfTU9DU19IDQo+ ICsjZGVmaW5lIElOVEVMX01PQ1NfSA0KPiArDQo+ICsvKioNCj4gKyAqIERPQzogTWVtb3J5IE9i amVjdHMgQ29udHJvbCBTdGF0ZSAoTU9DUykNCj4gKyAqDQo+ICsgKiBNb3RpdmF0aW9uOg0KPiAr ICogSW4gcHJldmlvdXMgR2VucyB0aGUgTU9DUyBzZXR0aW5ncyB3YXMgYSB2YWx1ZSB0aGF0IHdh cyBzZXQgYnkgdXNlciBsYW5kIGFzDQo+ICsgKiBwYXJ0IG9mIHRoZSBiYXRjaC4gSW4gR2VuOSB0 aGlzIGhhcyBjaGFuZ2VkIHRvIGJlIGEgc2luZ2xlIHRhYmxlIChwZXIgcmluZykNCj4gKyAqIHRo YXQgYWxsIGJhdGNoZXMgbm93IHJlZmVyZW5jZSBieSBpbmRleCBpbnN0ZWFkIG9mIHByb2dyYW1t aW5nIHRoZSBNT0NTDQo+ICsgKiBkaXJlY3RseS4NCj4gKyAqDQo+ICsgKiBUaGUgb25lIHdyaW5r bGUgaW4gdGhpcyBpcyB0aGF0IG9ubHkgUEFSVCBvZiB0aGUgTU9DUyB0YWJsZXMgYXJlIGluY2x1 ZGVkDQo+ICsgKiBpbiBjb250ZXh0IChUaGUgR0ZYX01PQ1NfMCAtIEdGWF9NT0NTXzY0IGFuZCB0 aGUgTE5DRkNNT0NTMCAtIExOQ0ZDTU9DUzMyDQo+ICsgKiByZWdpc3RlcnMpLiBUaGUgcmVzdCBh cmUgbm90ICh0aGUgc2V0dGluZ3MgZm9yIHRoZSBvdGhlciByaW5ncykuDQo+ICsgKg0KPiArICog VGhpcyB0YWJsZSBuZWVkcyB0byBiZSBzZXQgYXQgc3lzdGVtIHN0YXJ0LXVwIGJlY2F1c2UgdGhl IHdheSB0aGUgdGFibGUNCj4gKyAqIGludGVyYWN0cyB3aXRoIHRoZSBjb250ZXh0cyBhbmQgdGhl IEdtbUxpYiBpbnRlcmZhY2UuDQo+ICsgKg0KPiArICoNCj4gKyAqIEltcGxlbWVudGF0aW9uOg0K PiArICoNCj4gKyAqIFRoZSB0YWJsZSBpcyBwcm9ncmFtbWVkIG9uIGEgcGxhdGZvcm0gYmFzaXMg ZnJvbSBhIHRhYmxlIHRoYXQgaXMgZ2VuZXJhdGVkDQo+ICsgKiBmcm9tIHRoZSBvbmUgdGhhdCBo YXMgYmVlbiBhZ3JlZWQgYnkgdGhlIGRpZmZlcmVudCByZXNwb25zaWJsZSBwYXJ0aWVzLiBUaGlz DQo+ICsgKiB0YWJsZXMgKG9uZSBwZXIgc3VwcG9ydGVkIHBsYXRmb3JtKSBpcyBkZWZpbmVkIGlu IGludGVsX21vY3MuYyBhbmQgaXMNCj4gKyAqIHByb2dyYW1tZWQgaW4gdGhlIGZpcnN0IGJhdGNo IGFmdGVyIHRoZSBjb250ZXh0IGlzIGxvYWRlZCAod2l0aCB0aGUgaGFyZHdhcmUNCj4gKyAqIHdv cmthcm91bmRzKS4gVGhpcyB3aWxsIHRoZW4gbGV0IHRoZSB1c3VhbCBjb250ZXh0IGhhbmRsaW5n IGtlZXAgdGhlIE1PQ1MgaW4NCj4gKyAqIHN0ZXAuDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUg PGRybS9kcm1QLmg+DQo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCINCj4gKw0KPiAraW50IGdlbjlf cHJvZ3JhbV9tb2NzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsDQo+ICsJCQlzdHJ1Y3Qg aW50ZWxfY29udGV4dCAqY3R4KTsNCj4gKw0KPiArI2VuZGlmDQo+ICsNCj4gCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==