From mboxrd@z Thu Jan 1 00:00:00 1970 From: Damien Lespiau Subject: Re: [PATCH v2] drm/i915 : Added Programming of the MOCS Date: Fri, 5 Jun 2015 15:53:54 +0100 Message-ID: <20150605145353.GB19705@strange.ger.corp.intel.com> References: <1433442442-512-1-git-send-email-peter.antoine@intel.com> <1433515416-12946-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 mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 73AC66E29B for ; Fri, 5 Jun 2015 07:53:56 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1433515416-12946-1-git-send-email-peter.antoine@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Peter Antoine Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKdW4gMDUsIDIwMTUgYXQgMDM6NDM6MzZQTSArMDEwMCwgUGV0ZXIgQW50b2luZSB3 cm90ZToKPiBUaGlzIGNoYW5nZSBhZGRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aGUgTU9DUyByZWdp c3RlcnMgdG8gdGhlIGdlbiA5Kwo+IHBsYXRmb3Jtcy4gVGhpcyBjaGFuZ2Ugc2V0IHByb2dyYW1z IHRoZSBNT0NTIHJlZ2lzdGVyIHZhbHVlcyB0byBhIHNldAo+IG9mIHZhbHVlcyB0aGF0IGFyZSBk ZWZpbmVkIHRvIGJlIG9wdGltYWwuCj4gCj4gSXQgY3JlYXRlcyBhIGZpeGVkIHJlZ2lzdGVyIHNl dCB0aGF0IGlzIHByb2dyYW1tZWQgYWNyb3NzIHRoZSBkaWZmZXJlbnQKPiBlbmdpbmVzIHNvIHRo YXQgYWxsIGVuZ2luZXMgaGF2ZSB0aGUgc2FtZSB0YWJsZS4gVGhpcyBpcyBkb25lIGFzIHRoZQo+ IG1haW4gUkNTIGNvbnRleHQgb25seSBob2xkcyB0aGUgcmVnaXN0ZXJzIGZvciBpdHNlbGYgYW5k IHRoZSBzaGFyZWQKPiBMMyB2YWx1ZXMuIEJ5IHRyeWluZyB0byBrZWVwIHRoZSByZWdpc3RlcnMg Y29uc2lzdGVudCBhY3Jvc3MgdGhlCj4gZGlmZmVyZW50IGVuZ2luZXMgaXQgc2hvdWxkIG1ha2Ug dGhlIHByb2dyYW1taW5nIGZvciB0aGUgcmVnaXN0ZXJzCj4gY29uc2lzdGVudC4KPiAKPiB2Mjog J3N0YXRpYyBjb25zdCcgZm9yIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzdHlsZSBjaGFu Z2VzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50 ZWwuY29tPgoKSSB3YXMgd29uZGVyaW5nLCB3b3VsZCBpdCBwb3NzaWJsZSB0byBkb2N1bWVudCB0 aGUgaW50ZW5kZWQgdXNhZ2UgZm9yCnRoZSBkZWZpbmVkIGNvbmZpZ3VyYXRpb25zPyBUaGF0J2Qg aGVscCB1c2VyIHNwYWNlIGRyaXZlcnMgSSB0aGluay4KCi0tIApEYW1pZW4KCj4gLS0tCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICB8ICAgMyArLQo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3JlZy5oICAgfCAgIDkgKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbHJjLmMgIHwgIDY4ICsrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X21vY3MuYyB8IDI0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmggfCAxMDEgKysrKysrKysrKysrKysrKwo+ ICA1IGZpbGVzIGNoYW5nZWQsIDQyMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuaAo+IAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlCj4gaW5kZXggYjdkZGY0OC4uY2Q3YjkxMCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCj4gQEAgLTM2LDcgKzM2LDggQEAgaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5v IFwKPiAgCSAgaTkxNV90cmFjZV9wb2ludHMubyBcCj4gIAkgIGludGVsX2xyYy5vIFwKPiAgCSAg aW50ZWxfcmluZ2J1ZmZlci5vIFwKPiAtCSAgaW50ZWxfdW5jb3JlLm8KPiArCSAgaW50ZWxfdW5j b3JlLm8gXAo+ICsJICBpbnRlbF9tb2NzLm8KPiAgCj4gICMgYXV0b2dlbmVyYXRlZCBudWxsIHJl bmRlciBzdGF0ZQo+ICBpOTE1LXkgKz0gaW50ZWxfcmVuZGVyc3RhdGVfZ2VuNi5vIFwKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVnLmgKPiBpbmRleCA3MjEzMjI0Li4zYTQzNWI1IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3JlZy5oCj4gQEAgLTc4MjksNCArNzgyOSwxMyBAQCBlbnVtIHNrbF9kaXNwX3Bv d2VyX3dlbGxzIHsKPiAgI2RlZmluZSBfUEFMRVRURV9BIChkZXZfcHJpdi0+aW5mby5kaXNwbGF5 X21taW9fb2Zmc2V0ICsgMHhhMDAwKQo+ICAjZGVmaW5lIF9QQUxFVFRFX0IgKGRldl9wcml2LT5p bmZvLmRpc3BsYXlfbW1pb19vZmZzZXQgKyAweGE4MDApCj4gIAo+ICsvKiBNT0NTIChNZW1vcnkg T2JqZWN0IENvbnRyb2wgU3RhdGUpIHJlZ2lzdGVycyAqLwo+ICsjZGVmaW5lIEdFTjlfTE5DRkNN T0NTMAkJKDB4QjAyMCkJLyogTDMgQ2FjaGUgQ29udHJvbCBiYXNlICovCj4gKwo+ICsjZGVmaW5l IEdFTjlfR0ZYX01PQ1NfMAkJKDB4YzgwMCkJLyogR3JhcGhpY3MgTU9DUyBiYXNlIHJlZ2lzdGVy Ki8KPiArI2RlZmluZSBHRU45X01GWDBfTU9DU18wCSgweGM5MDApCS8qIE1lZGlhIDAgTU9DUyBi YXNlIHJlZ2lzdGVyKi8KPiArI2RlZmluZSBHRU45X01GWDFfTU9DU18wCSgweGNBMDApCS8qIE1l ZGlhIDEgTU9DUyBiYXNlIHJlZ2lzdGVyKi8KPiArI2RlZmluZSBHRU45X1ZFQk9YX01PQ1NfMAko MHhjQjAwKQkvKiBWaWRlbyBNT0NTIGJhc2UgcmVnaXN0ZXIqLwo+ICsjZGVmaW5lIEdFTjlfQkxU X01PQ1NfMAkJKDB4Y2MwMCkJLyogQmxpdHRlciBNT0NTIGJhc2UgcmVnaXN0ZXIqLwo+ICsKPiAg I2VuZGlmIC8qIF9JOTE1X1JFR19IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gaW5k ZXggOWY1NDg1ZC4uYzg3NTU2OSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9scmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gQEAg LTEzNSw2ICsxMzUsNyBAQAo+ICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiAgI2luY2x1ZGUgPGRy bS9pOTE1X2RybS5oPgo+ICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImludGVs X21vY3MuaCIKPiAgCj4gICNkZWZpbmUgR0VOOV9MUl9DT05URVhUX1JFTkRFUl9TSVpFICgyMiAq IFBBR0VfU0laRSkKPiAgI2RlZmluZSBHRU44X0xSX0NPTlRFWFRfUkVOREVSX1NJWkUgKDIwICog UEFHRV9TSVpFKQo+IEBAIC0xMzcwLDYgKzEzNzEsNjcgQEAgb3V0Ogo+ICAJcmV0dXJuIHJldDsK PiAgfQo+ICAKPiArLyoKPiArICogaTkxNV9nZW1fcHJvZ3JhbV9tb2NzKCkgLSBwcm9ncmFtIHRo ZSBNT0NTIHJlZ2lzdGVyLgo+ICsgKgo+ICsgKiByaW5nOglUaGUgcmluZyB0aGF0IHRoZSBwcm9n cmFtbWluZyBiYXRjaCB3aWxsIGJlIHJ1biBpbi4KPiArICogY3R4OgkJVGhlIGludGVsX2NvbnRl eHQgdG8gYmUgdXNlZC4KPiArICoKPiArICogVGhpcyBmdW5jdGlvbiB3aWxsIGVtaXQgYSBiYXRj aCBidWZmZXIgd2l0aCB0aGUgdmFsdWVzIHJlcXVpcmVkIGZvcgo+ICsgKiBwcm9ncmFtbWluZyB0 aGUgTU9DUyByZWdpc3RlciB2YWx1ZXMgZm9yIGFsbCB0aGUgY3VycmVubHkgc3VwcG9ydGVkCj4g KyAqIHJpbmdzLgo+ICsgKgo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHRo ZSBlcnJvciBzdGF0dXMuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGk5MTVfZ2VtX3Byb2dyYW1fbW9j cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICsJCQkgIHN0cnVjdCBpbnRlbF9jb250 ZXh0ICpjdHgpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsKPiArCXN0cnVjdCBkcm1faTkxNV9t b2NzX3RhYmxlIHQ7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Owo+ICsJ c3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYgPSBjdHgtPmVuZ2luZVtyaW5nLT5pZF0u cmluZ2J1ZjsKPiArCj4gKwlpZiAoZ2V0X21vY3Nfc2V0dGluZ3MoZGV2LCAmdCkpIHsKPiArCQl1 MzIgdGFibGVfc2l6ZTsKPiArCj4gKwkJLyoKPiArCQkgKiBPSy4gRm9yIGVhY2ggc3VwcG9ydGVk IHJpbmc6Cj4gKwkJICogIHRhYmxlX3NpemUgKiAyIGR3b3JkcyBmb3IgZWFjaCBjb250cm9sX3Zh bHVlCj4gKwkJICogIHBsdXMgdGFibGUvMiBkd29yZHMgZm9yIGwzY2MgdmFsdWVzLgo+ICsJCSAq Cj4gKwkJICogIFBsdXMgMSBmb3IgdGhlIGxvYWQgY29tbWFuZCBhbmQgMSBmb3IgdGhlIE5PT1Ag cGVyIHJpbmcKPiArCQkgKiAgYW5kIHRoZSBsM2NjIHByb2dyYW1taW5nLgo+ICsJCSAqLwo+ICsJ CXRhYmxlX3NpemUgPSBHRU45X05VTV9NT0NTX1JJTkdTICogKCgyICogdC5zaXplKSArIDIpICsK PiArCQkJCXQuc2l6ZSArIDI7Cj4gKwkJcmV0ID0gaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHJp bmdidWYsIGN0eCwgdGFibGVfc2l6ZSk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlEUk1fRVJST1Io ImludGVsX2xvZ2ljYWxfcmluZ19iZWdpbiBmYWlsZWQgJWRcbiIsIHJldCk7Cj4gKwkJCXJldHVy biByZXQ7Cj4gKwkJfQo+ICsKPiArCQkvKiBwcm9ncmFtIHRoZSBjb250cm9sIHJlZ2lzdGVycyAq Lwo+ICsJCWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0LCBHRU45X0dGWF9NT0NT XzApOwo+ICsJCWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0LCBHRU45X01GWDBf TU9DU18wKTsKPiArCQllbWl0X21vY3NfY29udHJvbF90YWJsZShyaW5nYnVmLCAmdCwgR0VOOV9N RlgxX01PQ1NfMCk7Cj4gKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdF TjlfVkVCT1hfTU9DU18wKTsKPiArCQllbWl0X21vY3NfY29udHJvbF90YWJsZShyaW5nYnVmLCAm dCwgR0VOOV9CTFRfTU9DU18wKTsKPiArCj4gKwkJLyogbm93IHByb2dyYW0gdGhlIGwzY2MgcmVn aXN0ZXJzICovCj4gKwkJZW1pdF9tb2NzX2wzY2NfdGFibGUocmluZ2J1ZiwgJnQpOwo+ICsKPiAr CQlpbnRlbF9sb2dpY2FsX3JpbmdfYWR2YW5jZShyaW5nYnVmKTsKPiArCj4gKwkJRFJNX0lORk8o Ik1PQ1M6IFRhYmxlIHNldCBpbiBDb250ZXh0XG4iKTsKPiArCX0gZWxzZSB7Cj4gKwkJRFJNX0lO Rk8oIk1PQ1M6IFRhYmxlIE5vdCBzdXBwb3J0ZWQgb24gcGxhdGZvcm1cbiIpOwo+ICsJfQo+ICsK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKwo+ICBzdGF0aWMgaW50IGdlbjhfaW5pdF9yY3Nf Y29udGV4dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICAJCSAgICAgICBzdHJ1Y3Qg aW50ZWxfY29udGV4dCAqY3R4KQo+ICB7Cj4gQEAgLTEzNzksNiArMTQ0MSwxMiBAQCBzdGF0aWMg aW50IGdlbjhfaW5pdF9yY3NfY29udGV4dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiArCS8qCj4gKwkgKiBGYWlsaW5nIHRv IHByb2dyYW0gdGhlIE1PQ1MgaXMgbm9uLWZhdGFsLlRoZSBzeXN0ZW0gd2lsbCBub3QKPiArCSAq IHJ1biBhdCBwZWFrIHBlcmZvcm1hbmNlLiBTbyBnZW5lcmF0ZSBhIHdhcm5pbmcgYW5kIGNhcnJ5 IG9uLgo+ICsJICovCj4gKwlXQVJOX09OKGk5MTVfZ2VtX3Byb2dyYW1fbW9jcyhyaW5nLCBjdHgp ICE9IDApOwo+ICsKPiAgCXJldHVybiBpbnRlbF9scl9jb250ZXh0X3JlbmRlcl9zdGF0ZV9pbml0 KHJpbmcsIGN0eCk7Cj4gIH0KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX21vY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYwo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNjdjNzk2Nwo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMKPiBAQCAtMCwwICsxLDI0 MiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPiAr ICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4g KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6ICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4gKyAqIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4g VEhFCj4gKyAqIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKiAgICBQZXRlciBB bnRvaW5lIDxwZXRlci5hbnRvaW5lQGludGVsLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSAi aW50ZWxfbW9jcy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfbHJjLmgiCj4gKyNpbmNsdWRlICJpbnRl bF9yaW5nYnVmZmVyLmgiCj4gKwo+ICsvKgo+ICsgKiBNT0NTIHRhYmxlcwo+ICsgKgo+ICsgKiBU aGVzZSBhcmUgdGhlIE1PQ1MgdGFibGVzIHRoYXQgYXJlIHByb2dyYW1tZWQgYWNyb3NzIGFsbCB0 aGUgcmluZ3MuCj4gKyAqIFRoZSBjb250cm9sIHZhbHVlIGlzIHByb2dyYW1tZWQgdG8gYWxsIHRo ZSByaW5ncyB0aGF0IHN1cHBvcnQgdGhlCj4gKyAqIE1PQ1MgcmVnaXN0ZXJzLiBXaGlsZSB0aGUg bDNjY192YWx1ZXMgYXJlIG9ubHkgcHJvZ3JhbW1lZCB0byB0aGUKPiArICogTE5DRkNNT0NTMCAt IExOQ0ZDTU9DUzMyIHJlZ2lzdGVycy4KPiArICoKPiArICogTk9URTogVGhlc2UgdGFibGVzIE1V U1Qgc3RhcnQgd2l0aCBiZWluZyB1bmNhY2hlZCB7MCwwfSBhbmQgdGhlCj4gKyAqICAgICAgIHRo ZSBsZW5ndGggTVVTVCBiZSBsZXNzIHRoYW4gNjMgYXMgdGhlIGxhc3QgdHdvIHJlZ2lzdGVycyBh cmUKPiArICogICAgICAgcmVzZXJ2ZWQgYnkgdGhlIGhhcmR3YXJlLgo+ICsgKi8KPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1faTkxNV9tb2NzX2VudHJ5IHNreWxha2VfbW9jc190YWJsZVtdID0g ewo+ICsJIC8qIHsweDAwMDAwMDA5LCAweDAwMTB9ICovCj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZ KDEpIHwgTU9DU19UR1RfQ0FDSEUoMikgfCBNT0NTX0xSVU0oMCkgfAo+ICsJCU1PQ1NfQU9NKDAp IHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DX1BGTSgwKSB8Cj4gKwkJTU9D U19TQ0YoMCkpLAo+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNI RUFCSUxJVFkoMSkpfSwKPiArCSAvKiB7MHgwMDAwMDAzYiwgMHgwMDMwfSAqLwo+ICsJeyhNT0NT X0NBQ0hFQUJJTElUWSgzKSB8IE1PQ1NfVEdUX0NBQ0hFKDIpIHwgTU9DU19MUlVNKDMpIHwKPiAr CQlNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0o MCkgfAo+ICsJCU1PQ1NfU0NGKDApKSwKPiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8 IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKDMpKX0sCj4gKwkgLyogezB4MDAwMDAwMzksIDB4MDAxMH0g Ki8KPiArCXsoTU9DU19DQUNIRUFCSUxJVFkoMSkgfCBNT0NTX1RHVF9DQUNIRSgyKSB8IE1PQ1Nf TFJVTSgzKSB8Cj4gKwkJTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0Mo MCkgfCBNT0NfUEZNKDApIHwKPiArCQlNT0NTX1NDRigwKSksCj4gKwkJKE1PQ1NfRVNDKDApIHwg TU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWSgxKSl9LAo+ICsJIC8qIHsweDAwMDAw MDE3LCAweDAwMzB9ICovCj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKDMpIHwgTU9DU19UR1RfQ0FD SEUoMSkgfCBNT0NTX0xSVU0oMSkgfAo+ICsJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygw KSB8IE1PQ1NfU0NDKDApIHwgTU9DX1BGTSgwKSB8Cj4gKwkJTU9DU19TQ0YoMCkpLAo+ICsJCShN T0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoMykpfSwKPiAr CSAvKiB7MHgwMDAwMDAxNywgMHgwMDEwfSAqLwo+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWSgzKSB8 IE1PQ1NfVEdUX0NBQ0hFKDEpIHwgTU9DU19MUlVNKDEpIHwKPiArCQlNT0NTX0FPTSgwKSB8IE1P Q1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfAo+ICsJCU1PQ1NfU0NG KDApKSwKPiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklM SVRZKDEpKX0sCj4gKwkgLyogezB4MDAwMDAwMTksIDB4MDAxMH0gKi8KPiArCXsoTU9DU19DQUNI RUFCSUxJVFkoMSkgfCBNT0NTX1RHVF9DQUNIRSgyKSB8IE1PQ1NfTFJVTSgxKSB8Cj4gKwkJTU9D U19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NfUEZNKDApIHwK PiArCQlNT0NTX1NDRigwKSksCj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NT X0wzX0NBQ0hFQUJJTElUWSgxKSl9LAo+ICsJIC8qIHsweDAwMDAwMDM3LCAweDAwMzB9ICovCj4g Kwl7KE1PQ1NfQ0FDSEVBQklMSVRZKDMpIHwgTU9DU19UR1RfQ0FDSEUoMSkgfCBNT0NTX0xSVU0o MykgfAo+ICsJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwg TU9DX1BGTSgwKSB8Cj4gKwkJTU9DU19TQ0YoMCkpLAo+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1Nf U0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoMykpfSwKPiArCSAvKiB7MHgwMDAwMDAzYiwg MHgwMDEwfSAqLwo+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWSgzKSB8IE1PQ1NfVEdUX0NBQ0hFKDIp IHwgTU9DU19MUlVNKDMpIHwKPiArCQlNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBN T0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfAo+ICsJCU1PQ1NfU0NGKDApKSwKPiArCQkoTU9DU19F U0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKDEpKX0sCj4gK307Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkgYnJveHRvbl9tb2Nz X3RhYmxlW10gPSB7Cj4gKwkgLyogezB4MDAwMDAwMDEsIDB4MDAxMH0gKi8KPiArCXsoTU9DU19D QUNIRUFCSUxJVFkoMSkgfCBNT0NTX1RHVF9DQUNIRSgwKSB8IE1PQ1NfTFJVTSgwKSB8Cj4gKwkJ TU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NfUEZNKDAp IHwKPiArCQlNT0NTX1NDRigwKSksCj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBN T0NTX0wzX0NBQ0hFQUJJTElUWSgxKSl9LAo+ICsJIC8qIHsweDAwMDA0MDAxLCAweDAwMTB9ICov Cj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKDEpIHwgTU9DU19UR1RfQ0FDSEUoMCkgfCBNT0NTX0xS VU0oMCkgfAo+ICsJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDAp IHwgTU9DX1BGTSgwKSB8Cj4gKwkJTU9DU19TQ0YoMSkpLAo+ICsJCShNT0NTX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoMSkpfSwKPiArCSAvKiB7MHgwMDAwNDAz YiwgMHgwMDMwfSAqLwo+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWSgzKSB8IE1PQ1NfVEdUX0NBQ0hF KDIpIHwgTU9DU19MUlVNKDMpIHwKPiArCQlNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkg fCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfAo+ICsJCU1PQ1NfU0NGKDEpKSwKPiArCQkoTU9D U19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKDMpKX0sCj4gKwkg LyogezB4MDAwMDQwMWIsIDB4MDAzMH0gKi8KPiArCXsoTU9DU19DQUNIRUFCSUxJVFkoMykgfCBN T0NTX1RHVF9DQUNIRSgyKSB8IE1PQ1NfTFJVTSgxKSB8Cj4gKwkJTU9DU19BT00oMCkgfCBNT0NT X0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NfUEZNKDApIHwKPiArCQlNT0NTX1NDRigx KSksCj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElU WSgzKSl9LAo+ICsJIC8qIHsweDAwMDAwMDE3LCAweDAwMTB9ICovCj4gKwl7KE1PQ1NfQ0FDSEVB QklMSVRZKDMpIHwgTU9DU19UR1RfQ0FDSEUoMSkgfCBNT0NTX0xSVU0oMSkgfAo+ICsJCU1PQ1Nf QU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DX1BGTSgwKSB8Cj4g KwkJTU9DU19TQ0YoMCkpLAo+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19M M19DQUNIRUFCSUxJVFkoMSkpfSwKPiArCSAvKiB7MHgwMDAwMDAxOSwgMHgwMDEwfSAqLwo+ICsJ eyhNT0NTX0NBQ0hFQUJJTElUWSgxKSB8IE1PQ1NfVEdUX0NBQ0hFKDIpIHwgTU9DU19MUlVNKDEp IHwKPiArCQlNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1P Q19QRk0oMCkgfAo+ICsJCU1PQ1NfU0NGKDApKSwKPiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1ND QygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKDEpKX0sCj4gKwkgLyogezB4MDAwMDAwMzcsIDB4 MDAzMH0gKi8KPiArCXsoTU9DU19DQUNIRUFCSUxJVFkoMykgfCBNT0NTX1RHVF9DQUNIRSgxKSB8 IE1PQ1NfTFJVTSgzKSB8Cj4gKwkJTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9D U19TQ0MoMCkgfCBNT0NfUEZNKDApIHwKPiArCQlNT0NTX1NDRigwKSksCj4gKwo+ICsJCShNT0NT X0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoMykpfSwKPiArCSAv KiB7MHgwMDAwMDAzYiwgMHgwMDEwfSAqLwo+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWSgzKSB8IE1P Q1NfVEdUX0NBQ0hFKDIpIHwgTU9DU19MUlVNKDMpIHwKPiArCQlNT0NTX0FPTSgwKSB8IE1PQ1Nf TEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfAo+ICsJCU1PQ1NfU0NGKDAp KSwKPiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZ KDEpKX0sCj4gK307Cj4gKwo+ICsvKioKPiArICogZ2V0X21vY3Nfc2V0dGluZ3MKPiArICoKPiAr ICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgdmFsdWVzIG9mIHRoZSBNT0NTIHRhYmxl IHRoYXQgbmVlZHMgdG8KPiArICogYmUgcHJvZ3JhbW1lZCBmb3IgdGhlIHBsYXRmb3JtLiBJdCB3 aWxsIHJldHVybiB0aGUgdmFsdWVzIHRoYXQgbmVlZAo+ICsgKiB0byBiZSBwcm9ncmFtbWVkIGFu ZCBpZiB0aGV5IG5lZWQgdG8gYmUgcHJvZ3JhbW1lZC4KPiArICoKPiArICogSWYgdGhlIHJldHVy biB2YWx1ZXMgaXMgZmFsc2UgdGhlbiB0aGUgcmVnaXN0ZXJzIGRvIG5vdCBuZWVkIHByb2dyYW1t aW5nLgo+ICsgKi8KPiArYm9vbCBnZXRfbW9jc19zZXR0aW5ncyhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSAqdGFibGUpIHsKPiAr CWJvb2wJcmVzdWx0ID0gZmFsc2U7Cj4gKwo+ICsJaWYgKElTX1NLWUxBS0UoZGV2KSkgewo+ICsJ CXRhYmxlLT5zaXplICA9IEFSUkFZX1NJWkUoc2t5bGFrZV9tb2NzX3RhYmxlKTsKPiArCQl0YWJs ZS0+dGFibGUgPSBza3lsYWtlX21vY3NfdGFibGU7Cj4gKwkJcmVzdWx0ID0gdHJ1ZTsKPiArCX0g ZWxzZSBpZiAoSVNfQlJPWFRPTihkZXYpKSB7Cj4gKwkJdGFibGUtPnNpemUgID0gQVJSQVlfU0la RShicm94dG9uX21vY3NfdGFibGUpOwo+ICsJCXRhYmxlLT50YWJsZSA9IGJyb3h0b25fbW9jc190 YWJsZTsKPiArCQlyZXN1bHQgPSB0cnVlOwo+ICsJfSBlbHNlIHsKPiArCQkvKiBQbGF0Zm9ybSB0 aGF0IHNob3VsZCBoYXZlIGEgTU9DUyB0YWJsZSBkb2VzIG5vdCAqLwo+ICsJCVdBUk5fT04oSU5U RUxfSU5GTyhkZXYpLT5nZW4gPj0gOSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJlc3VsdDsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIGVtaXRfbW9jc19jb250cm9sX3RhYmxlKCkgLSBlbWl0IHRoZSBt b2NzIGNvbnRyb2wgdGFibGUKPiArICogQHJpbmdidWY6CURSTSBkZXZpY2UuCj4gKyAqIEB0YWJs ZToJVGhlIHZhbHVlcyB0byBwcm9ncmFtIGludG8gdGhlIGNvbnRyb2wgcmVncy4KPiArICogQHJl Z19iYXNlOglUaGUgYmFzZSBmb3IgdGhlIEVuZ2luZSB0aGF0IG5lZWRzIHRvIGJlIHByb2dyYW1t ZWQuCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGVtaXRzIGEgTUlfTE9BRF9SRUdJ U1RFUl9JTU0gY29tbWFuZCBmb3IgdGhlCj4gKyAqIGdpdmVuIHRhYmxlIHN0YXJ0aW5nIGF0IHRo ZSBnaXZlbiBhZGRyZXNzLgo+ICsgKgo+ICsgKiBSZXR1cm46IE5vdGhpbmcuCj4gKyAqLwo+ICt2 b2lkIGVtaXRfbW9jc19jb250cm9sX3RhYmxlKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5n YnVmLAo+ICsJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSwKPiArCQkJ CSAgICB1MzIgcmVnX2Jhc2UpCj4gK3sKPiArCXVuc2lnbmVkIGludCBpbmRleDsKPiArCj4gKwlp bnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLAo+ICsJCQlNSV9MT0FEX1JFR0lTVEVSX0lN TShHRU45X05VTV9NT0NTX0VOVFJJRVMpKTsKPiArCj4gKwlmb3IgKGluZGV4ID0gMDsgaW5kZXgg PCB0YWJsZS0+c2l6ZTsgaW5kZXgrKykgewo+ICsJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJp bmdidWYsIHJlZ19iYXNlICsgKGluZGV4ICogNCkpOwo+ICsJCWludGVsX2xvZ2ljYWxfcmluZ19l bWl0KHJpbmdidWYsCj4gKwkJCQkJdGFibGUtPnRhYmxlW2luZGV4XS5jb250cm9sX3ZhbHVlKTsK PiArCX0KPiArCj4gKwkvKgo+ICsJICogT2ssIG5vdyBzZXQgdGhlIHVudXNlZCBlbnRyaWVzIHRv IHVuY2FjaGVkLiBUaGVzZSBlbnRyaWVzIGFyZQo+ICsJICogb2ZmaWNpYWxseSB1bmRlZmluZWQg YW5kIG5vIGNvbnRhY3QgaXMgZ2l2ZW4gZm9yIHRoZSBjb250ZW50cyBhbmQKPiArCSAqIHNldHRp bmdzIGlzIGdpdmVuIGZvciB0aGVzZSBlbnRyaWVzLgo+ICsJICoKPiArCSAqIEVudHJ5IDAgaW4g dGhlIHRhYmxlIGlzIHVuY2FjaGVkIC0gc28gd2UgYXJlIGp1c3Qgd3JpdHRlbiB0aGF0Cj4gKwkg KiB2YWx1ZSB0byBhbGwgdGhlIHVzZWQgZW50cmllcy4KPiArCSAqLwo+ICsJZm9yICg7IGluZGV4 IDwgR0VOOV9OVU1fTU9DU19FTlRSSUVTOyBpbmRleCsrKSB7Cj4gKwkJaW50ZWxfbG9naWNhbF9y aW5nX2VtaXQocmluZ2J1ZiwgcmVnX2Jhc2UgKyAoaW5kZXggKiA0KSk7Cj4gKwkJaW50ZWxfbG9n aWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgdGFibGUtPnRhYmxlWzBdLmNvbnRyb2xfdmFsdWUpOwo+ ICsJfQo+ICsKPiArCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1JX05PT1ApOwo+ ICt9Cj4gKwo+ICsvKioKPiArICogZW1pdF9tb2NzX2wzY2NfdGFibGUoKSAtIGVtaXQgdGhlIG1v Y3MgY29udHJvbCB0YWJsZQo+ICsgKiBAcmluZ2J1ZjoJRFJNIGRldmljZS4KPiArICogQHRhYmxl OglUaGUgdmFsdWVzIHRvIHByb2dyYW0gaW50byB0aGUgY29udHJvbCByZWdzLgo+ICsgKgo+ICsg KiBUaGlzIGZ1bmN0aW9uIHNpbXBseSBlbWl0cyBhIE1JX0xPQURfUkVHSVNURVJfSU1NIGNvbW1h bmQgZm9yIHRoZQo+ICsgKiBnaXZlbiB0YWJsZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkcmVz cy4gVGhpcyByZWdpc3RlciBzZXQgaXMgIHByb2dyYW1tZWQKPiArICogaW4gcGFpcnMuCj4gKyAq Cj4gKyAqIFJldHVybjogTm90aGluZy4KPiArICovCj4gK3ZvaWQgZW1pdF9tb2NzX2wzY2NfdGFi bGUoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4gKwkJCSBzdHJ1Y3QgZHJtX2k5 MTVfbW9jc190YWJsZSAqdGFibGUpIHsKPiArCXVuc2lnbmVkIGludCBjb3VudDsKPiArCXVuc2ln bmVkIGludCBpOwo+ICsKPiArCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsCj4gKwkJ CU1JX0xPQURfUkVHSVNURVJfSU1NKEdFTjlfTlVNX01PQ1NfRU5UUklFUyAvIDIpKTsKPiArCj4g Kwlmb3IgKGkgPSAwLCBjb3VudCA9IDA7IGkgPCB0YWJsZS0+c2l6ZSAvIDI7IGkrKywgY291bnQg Kz0gMikgewo+ICsJCXUzMiB2YWx1ZSA9ICh0YWJsZS0+dGFibGVbY291bnRdLmwzY2NfdmFsdWUg JiAweGZmZmYpIHwKPiArCQkJKCh0YWJsZS0+dGFibGVbY291bnQgKyAxXS5sM2NjX3ZhbHVlICYg MHhmZmZmKSA8PCAxNik7Cj4gKwo+ICsJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYs IEdFTjlfTE5DRkNNT0NTMCArIChpICogNCkpOwo+ICsJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0 KHJpbmdidWYsIHZhbHVlKTsKPiArCX0KPiArCj4gKwkvKgo+ICsJICogTm93IHNldCB0aGUgcmVz dCBvZiB0aGUgdGFibGUgdG8gdW5jYWNoZWQgLSB1c2UgZW50cnkgMCBhcyB0aGlzCj4gKwkgKiB3 aWxsIGJlIHVuY2FjaGVkLiBMZWF2ZSB0aGUgbGFzdCBwYWlyIGluaXRpYWxpc2VkIGFzIHJlc2Vy dmVkIGJ5Cj4gKwkgKiB0aGUgaGFyZHdhcmUuCj4gKwkgKi8KPiArCWZvciAoOyBpIDwgR0VOOV9O VU1fTU9DU19FTlRSSUVTIC8gMjsgaSsrKSB7Cj4gKwkJdTMyIHZhbHVlID0gKHRhYmxlLT50YWJs ZVswXS5sM2NjX3ZhbHVlICYgMHhmZmZmKSB8Cj4gKwkJCSgodGFibGUtPnRhYmxlWzBdLmwzY2Nf dmFsdWUgJiAweGZmZmYpIDw8IDE2KTsKPiArCj4gKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQo cmluZ2J1ZiwgR0VOOV9MTkNGQ01PQ1MwICsgKGkgKiA0KSk7Cj4gKwkJaW50ZWxfbG9naWNhbF9y aW5nX2VtaXQocmluZ2J1ZiwgdmFsdWUpOwo+ICsJfQo+ICsKPiArCWludGVsX2xvZ2ljYWxfcmlu Z19lbWl0KHJpbmdidWYsIE1JX05PT1ApOwo+ICt9Cj4gKwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9t b2NzLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmFjZmZhMTUKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oCj4g QEAgLTAsMCArMSwxMDEgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDE1IEludGVsIENv cnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0 Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKPiArICog T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUyBJTiBUSEUKPiArICogU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6 Cj4gKyAqICAgIFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50ZWwuY29tPgo+ICsgKi8K PiArCj4gKyNpZm5kZWYgSU5URUxfTU9DU19ICj4gKyNkZWZpbmUgSU5URUxfTU9DU19ICj4gKwo+ ICsvKioKPiArICogRE9DOiBNZW1vcnkgT2JqZWN0cyBDb250cm9sIFN0YXRlIChNT0NTKQo+ICsg Kgo+ICsgKiBNb3RpdmF0aW9uOgo+ICsgKiBJbiBwcmV2aW91cyBHZW5zIHRoZSBNT0NTIHNldHRp bmdzIHdhcyBhIHZhbHVlIHRoYXQgd2FzIHNldCBieSB1c2VyIGxhbmQgYXMKPiArICogcGFydCBv ZiB0aGUgYmF0Y2guIEluIEdlbjkgdGhpcyBoYXMgY2hhbmdlZCB0byBiZSBhIHNpbmdsZSB0YWJs ZSAocGVyIHJpbmcpCj4gKyAqIHRoYXQgYWxsIGJhdGNoZXMgbm93IHJlZmVyZW5jZSBieSBpbmRl eCBpbnN0ZWFkIG9mIHByb2dyYW1taW5nIHRoZSBNT0NTCj4gKyAqIGRpcmVjdGx5Lgo+ICsgKgo+ ICsgKiBUaGUgb25lIHdyaW5rbGUgaW4gdGhpcyBpcyB0aGF0IG9ubHkgUEFSVCBvZiB0aGUgTU9D UyB0YWJsZXMgYXJlIGluY2x1ZGVkCj4gKyAqIGluIGNvbnRleHQgKFRoZSBHRlhfTU9DU18wIC0g R0ZYX01PQ1NfNjQgYW5kIHRoZSBMTkNGQ01PQ1MwIC0gTE5DRkNNT0NTMzIKPiArICogcmVnaXN0 ZXJzKS4gVGhlIHJlc3QgYXJlIG5vdCAodGhlIHNldHRpbmdzIGZvciB0aGUgb3RoZXIgcmluZ3Mp Lgo+ICsgKgo+ICsgKiBUaGlzIHRhYmxlIG5lZWRzIHRvIGJlIHNldCBhdCBzeXN0ZW0gc3RhcnQt dXAgYmVjYXVzZSB0aGUgd2F5IHRoZSB0YWJsZQo+ICsgKiBpbnRlcmFjdHMgd2l0aCB0aGUgY29u dGV4dHMgYW5kIHRoZSBHbW1MaWIgaW50ZXJmYWNlLgo+ICsgKgo+ICsgKgo+ICsgKiBJbXBsZW1l bnRhdGlvbjoKPiArICoKPiArICogVGhlIHRhYmxlIGlzIHByb2dyYW1tZWQgb24gYSBwbGF0Zm9y bSBiYXNpcyBmcm9tIGEgdGFibGUgdGhhdCBpcyBnZW5lcmF0ZWQKPiArICogZnJvbSB0aGUgb25l IHRoYXQgaGFzIGJlZW4gYWdyZWVkIGJ5IHRoZSBkaWZmZXJlbnQgcmVzcG9uc2libGUgcGFydGll cy4gVGhpcwo+ICsgKiB0YWJsZXMgKG9uZSBwZXIgc3VwcG9ydGVkIHBsYXRmb3JtKSBpcyBkZWZp bmVkIGluIGludGVsX21vY3MuYyBhbmQgaXMKPiArICogcHJvZ3JhbW1lZCBpbiB0aGUgZmlyc3Qg YmF0Y2ggYWZ0ZXIgdGhlIGNvbnRleHQgaXMgbG9hZGVkICh3aXRoIHRoZSBoYXJkd2FyZQo+ICsg KiB3b3JrYXJvdW5kcykuIFRoaXMgd2lsbCB0aGVuIGxldCB0aGUgdXN1YWwgY29udGV4dCBoYW5k bGluZyBrZWVwIHRoZSBNT0NTIGluCj4gKyAqIHN0ZXAuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg PGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICsKPiArLyogRGVmaW5lcyBm b3IgdGhlIHRhYmxlcyAoWFhYX01PQ1NfMCAtIFhYWF9NT0NTXzYzKSAqLwo+ICsjZGVmaW5lCU1P Q1NfQ0FDSEVBQklMSVRZKHZhbHVlKQkoKHZhbHVlICYgMHgwMykgPDwgMCkKPiArI2RlZmluZQlN T0NTX1RHVF9DQUNIRSh2YWx1ZSkJCSgodmFsdWUgJiAweDAzKSA8PCAyKQo+ICsjZGVmaW5lCU1P Q1NfTFJVTSh2YWx1ZSkJCSgodmFsdWUgJiAweDAzKSA8PCA0KQo+ICsjZGVmaW5lCU1PQ1NfQU9N KHZhbHVlKQkJCSgodmFsdWUgJiAweDAxKSA8PCA2KQo+ICsjZGVmaW5lCU1PQ1NfTEVDQ19FU0Mo dmFsdWUpCQkoKHZhbHVlICYgMHgwMSkgPDwgNykKPiArI2RlZmluZQlNT0NTX0xFQ0NfU0NDKHZh bHVlKQkJKCh2YWx1ZSAmIDB4MDcpIDw8IDgpCj4gKyNkZWZpbmUJTU9DX1BGTSh2YWx1ZSkJCQko KHZhbHVlICYgMHgwNykgPDwgMTEpCj4gKyNkZWZpbmUJTU9DU19TQ0YodmFsdWUpCQkJKCh2YWx1 ZSAmIDB4MDEpIDw8IDE0KQo+ICsKPiArLyogRGVmaW5lcyBmb3IgdGhlIHRhYmxlcyAoTE5DRk1P Q1MwIC0gTE5DRk1PQ1MzMSkgLSB0d28gZW50cmllcyBwZXIgd29yZCAqLwo+ICsjZGVmaW5lCU1P Q1NfRVNDKHZhbHVlKQkJCSgodmFsdWUgJiAweDAxKSA8PCAwKQo+ICsjZGVmaW5lCU1PQ1NfU0ND KHZhbHVlKQkJCSgodmFsdWUgJiAweDA3KSA8PCAxKQo+ICsjZGVmaW5lCU1PQ1NfTDNfQ0FDSEVB QklMSVRZKHZhbHVlKQkoKHZhbHVlICYgMHgwMykgPDwgNCkKPiArCj4gKy8qIEhlbHBlciBkZWZp bmVzICovCj4gKyNkZWZpbmUgR0VOOV9OVU1fTU9DU19SSU5HUwkoNSkJLyogTnVtYmVyIG9mIG1v Y3MgZW5naW5lcyB0byBwcm9ncmFtICovCj4gKyNkZWZpbmUgR0VOOV9OVU1fTU9DU19FTlRSSUVT CSg2MykJLyogNjMgb3V0IG9mIDY0IC0gNjQgaXMgcnN2cmQgKi8KPiArCj4gKy8qIHN0cnVjdHVy ZXMgcmVxdWlyZWQgKi8KPiArc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkgewo+ICsJdTMyCWNv bnRyb2xfdmFsdWU7Cj4gKwl1MTYJbDNjY192YWx1ZTsKPiArfTsKPiArCj4gK3N0cnVjdCBkcm1f aTkxNV9tb2NzX3RhYmxlIHsKPiArCXUzMgkJCQkJc2l6ZTsKPiArCWNvbnN0IHN0cnVjdCBkcm1f aTkxNV9tb2NzX2VudHJ5CSp0YWJsZTsKPiArfTsKPiArCj4gK3ZvaWQgZW1pdF9tb2NzX2wzY2Nf dGFibGUoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4gKwkJCSBzdHJ1Y3QgZHJt X2k5MTVfbW9jc190YWJsZSAqdGFibGUpOwo+ICsKPiArdm9pZCBlbWl0X21vY3NfY29udHJvbF90 YWJsZShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwKPiArCQkJCXN0cnVjdCBkcm1f aTkxNV9tb2NzX3RhYmxlICp0YWJsZSwKPiArCQkJCXUzMiByZWdfYmFzZSk7Cj4gKwo+ICtib29s IGdldF9tb2NzX3NldHRpbmdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCSAgICAgIHN0 cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSk7Cj4gKwo+ICsjZW5kaWYKPiArCj4gLS0g Cj4gMS45LjEKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCj4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=