From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 3/7] drm/vc4: Add KMS support for Raspberry Pi. Date: Tue, 25 Aug 2015 10:44:23 +0200 Message-ID: <20150825084423.GU20434@phenom.ffwll.local> References: <1439934848-7196-1-git-send-email-eric@anholt.net> <1439934848-7196-4-git-send-email-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1439934848-7196-4-git-send-email-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Eric Anholt Cc: devicetree@vger.kernel.org, Stephen Warren , Lee Jones , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org T24gVHVlLCBBdWcgMTgsIDIwMTUgYXQgMDI6NTQ6MDRQTSAtMDcwMCwgRXJpYyBBbmhvbHQgd3Jv dGU6Cj4gVGhpcyBpcyB0aGUgc3RhcnQgb2YgYSBmdWxsIFZDNCBkcml2ZXIuICBSaWdodCBub3cg dGhpcyBqdXN0IHN1cHBvcnRzCj4gY29uZmlndXJpbmcgdGhlIGRpc3BsYXkgdXNpbmcgYSBwcmUt ZXhpc3RpbmcgdmlkZW8gbW9kZSAoYmVjYXVzZQo+IGNoYW5naW5nIHRoZSBwaXhlbCBjbG9jayBp c24ndCBhdmFpbGFibGUgeWV0LCBhbmQgZG9lc24ndCB3b3JrIHdoZW4gaXQKPiBpcykuICBIb3dl dmVyLCB0aGlzIGlzIGVub3VnaCBmb3IgZmJjb24gYW5kIGJyaW5naW5nIHVwIFggdXNpbmcKPiB4 Zjg2LXZpZGVvLW1vZGVzZXR0aW5nLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEVyaWMgQW5ob2x0IDxl cmljQGFuaG9sdC5uZXQ+Cj4gLS0tCj4gCj4gdjI6IERyb3AgRkJfSEVMUEVSIHNlbGVjdCB0aGFu a3MgdG8gQXJjaGl0J3MgcGF0Y2hlcy4gIERvIG1hbnVhbCBpbml0Cj4gICAgIG9yZGVyaW5nIGlu c3RlYWQgb2YgdXNpbmcgdGhlIC5sb2FkIGhvb2suICBTdHJ1Y3R1cmUgcmVnaXN0cmF0aW9uCj4g ICAgIG1vcmUgbGlrZSB0ZWdyYSdzLCBidXQgc3RpbGwgdXNpbmcgdGhlIHR5cGljYWwgImNvbXBv bmVudCIgY29kZS4KPiAgICAgRHJvcCBuby1vcCBob29rcyBmb3IgYXRvbWljX2JlZ2luIGFuZCBt b2RlX2ZpeHVwKCkgbm93IHRoYXQKPiAgICAgdGhleSdyZSBvcHRpb25hbC4gIERyb3Agc2VudGlu ZWwgaW4gTWFrZWZpbGUuICBGaXggbWlub3Igc3R5bGUKPiAgICAgbml0cyBJIG5vdGljZWQgb24g YW5vdGhlciByZXJlYWQuCgpmd2l3IEFja2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0 dGVyQGZmd2xsLmNoPiBzaW5jZSBFcmljIGhhcyBkb25lCmFsbCB0aGUgY2hhbmdlcyBJIHJlcXVl c3RlZCAtIHNpbXBseSBmb3Jnb3QgdG8gYWRkIHRoYXQgaW4gbXkgZWFybGllcgpyZXZpZXcuCgpO byBmdWxsIHItYiBzaW5jZSBJIGRvbid0IGhhdmUgYSBjbHVlIGFib3V0IHRoZSBodyAoYW5kIGRp ZG4ndCB0YWtlIGEKY2xvc2UgbG9vayBhdCB0aGUgaHcgdG91Y2hpbmcgY29kZSBoZW5jZSkuCgpD aGVlcnMsIERhbmllbAoKPiAKPiAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgIHwg ICAyICsKPiAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgIHwgICAxICsKPiAgZHJp dmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnICAgICAgIHwgIDEzICsKPiAgZHJpdmVycy9ncHUvZHJt L3ZjNC9NYWtlZmlsZSAgICAgIHwgIDE3ICsKPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8u YyAgICAgIHwgIDUyICsrKysKPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jICAgIHwg NTY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfZGVidWdmcy5jIHwgIDM4ICsrKwo+ICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9k cnYuYyAgICAgfCAyNzEgKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF9kcnYuaCAgICAgfCAxMjAgKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaGRt aS5jICAgIHwgNjMzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRy aXZlcnMvZ3B1L2RybS92YzQvdmM0X2h2cy5jICAgICB8IDE2MSArKysrKysrKysrCj4gIGRyaXZl cnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jICAgICB8ICA4NCArKysrKwo+ICBkcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9wbGFuZS5jICAgfCAzMjAgKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJz L2dwdS9kcm0vdmM0L3ZjNF9yZWdzLmggICAgfCA1NjIgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gIDE0IGZpbGVzIGNoYW5nZWQsIDI4MzkgaW5zZXJ0aW9ucygrKQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS92YzQvdmM0X2RlYnVnZnMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfZHJ2LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS92YzQvdmM0X2Rydi5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0 L3ZjNF9oZG1pLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0 X2h2cy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9rbXMu Ywo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYwo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcmVncy5oCj4gCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tj b25maWcKPiBpbmRleCAwNmFlNTAwLi4xOWJiMGRiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiBAQCAtMjYwLDMg KzI2MCw1IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3N0aS9LY29uZmlnIgo+ICBzb3VyY2Ug ImRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWciCj4gIAo+ICBzb3VyY2UgImRyaXZl cnMvZ3B1L2RybS9pbXgvS2NvbmZpZyIKPiArCj4gK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3Zj NC9LY29uZmlnIgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBpbmRleCA4ODU4NTEwLi4yODNlZDhlIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZQo+IEBAIC00Miw2ICs0Miw3IEBAIG9iai0kKENPTkZJR19EUk1fTUdBKQkrPSBtZ2EvCj4g IG9iai0kKENPTkZJR19EUk1fSTgxMCkJKz0gaTgxMC8KPiAgb2JqLSQoQ09ORklHX0RSTV9JOTE1 KSAgKz0gaTkxNS8KPiAgb2JqLSQoQ09ORklHX0RSTV9NR0FHMjAwKSArPSBtZ2FnMjAwLwo+ICtv YmotJChDT05GSUdfRFJNX1ZDNCkgICs9IHZjNC8KPiAgb2JqLSQoQ09ORklHX0RSTV9DSVJSVVNf UUVNVSkgKz0gY2lycnVzLwo+ICBvYmotJChDT05GSUdfRFJNX1NJUykgICArPSBzaXMvCj4gIG9i ai0kKENPTkZJR19EUk1fU0FWQUdFKSs9IHNhdmFnZS8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3ZjNC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5lODEwZWY3Cj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZwo+IEBAIC0wLDAgKzEsMTMgQEAKPiAr Y29uZmlnIERSTV9WQzQKPiArCXRyaXN0YXRlICJCcm9hZGNvbSBWQzQgR3JhcGhpY3MiCj4gKwlk ZXBlbmRzIG9uIEFSQ0hfQkNNMjgzNQo+ICsJZGVwZW5kcyBvbiBEUk0KPiArCXNlbGVjdCBEUk1f S01TX0hFTFBFUgo+ICsJc2VsZWN0IERSTV9LTVNfQ01BX0hFTFBFUgo+ICsJaGVscAo+ICsJICBD aG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBzeXN0ZW0gdGhhdCBoYXMgYSBCcm9hZGNv bQo+ICsJICBWQzQgR1BVLCBzdWNoIGFzIHRoZSBSYXNwYmVycnkgUGkgb3Igb3RoZXIgQkNNMjcw OC9CQ00yODM1Lgo+ICsKPiArCSAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgdGhhdCAiYXZvaWRfd2Fy bmluZ3M9MiIgYmUgcHJlc2VudCBpbgo+ICsJICB0aGUgY29uZmlnLnR4dCBmb3IgdGhlIGZpcm13 YXJlLCB0byBrZWVwIGl0IGZyb20gc21hc2hpbmcKPiArCSAgb3VyIGRpc3BsYXkgc2V0dXAuCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vdmM0L01ha2VmaWxlCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4z MmI0ZjljCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvTWFrZWZp bGUKPiBAQCAtMCwwICsxLDE3IEBACj4gK2NjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCj4gKwo+ ICsjIFBsZWFzZSBrZWVwIHRoZXNlIGJ1aWxkIGxpc3RzIHNvcnRlZCEKPiArCj4gKyMgY29yZSBk cml2ZXIgY29kZQo+ICt2YzQteSA6PSBcCj4gKwl2YzRfYm8ubyBcCj4gKwl2YzRfY3J0Yy5vIFwK PiArCXZjNF9kcnYubyBcCj4gKwl2YzRfa21zLm8gXAo+ICsJdmM0X2hkbWkubyBcCj4gKwl2YzRf aHZzLm8gXAo+ICsJdmM0X3BsYW5lLm8KPiArCj4gK3ZjNC0kKENPTkZJR19ERUJVR19GUykgKz0g dmM0X2RlYnVnZnMubwo+ICsKPiArb2JqLSQoQ09ORklHX0RSTV9WQzQpICArPSB2YzQubwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jIGIvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfYm8uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYWI5 ZjUxMAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5j Cj4gQEAgLTAsMCArMSw1MiBAQAo+ICsvKgo+ICsgKiAgQ29weXJpZ2h0IMKpIDIwMTUgQnJvYWRj b20KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqLwo+ICsKPiArLyogRE9DOiBW QzQgR0VNIEJPIG1hbmFnZW1lbnQgc3VwcG9ydC4KPiArICoKPiArICogVGhlIFZDNCBHUFUgYXJj aGl0ZWN0dXJlIChib3RoIHNjYW5vdXQgYW5kIHJlbmRlcmluZykgaGFzIGRpcmVjdAo+ICsgKiBh Y2Nlc3MgdG8gc3lzdGVtIG1lbW9yeSB3aXRoIG5vIE1NVSBpbiBiZXR3ZWVuLiAgVG8gc3VwcG9y dCBpdCwgd2UKPiArICogdXNlIHRoZSBHRU0gQ01BIGhlbHBlciBmdW5jdGlvbnMgdG8gYWxsb2Nh dGUgY29udGlndW91cyByYW5nZXMgb2YKPiArICogcGh5c2ljYWwgbWVtb3J5IGZvciBvdXIgQk9z Lgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJ2YzRfZHJ2LmgiCj4gKwo+ICtzdHJ1Y3QgdmM0X2Jv ICp2YzRfYm9fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCBzaXplKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjbWFfb2JqOwo+ICsKPiArCWNtYV9vYmog PSBkcm1fZ2VtX2NtYV9jcmVhdGUoZGV2LCBzaXplKTsKPiArCWlmIChJU19FUlIoY21hX29iaikp Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIHRvX3ZjNF9ibygmY21hX29i ai0+YmFzZSk7Cj4gK30KPiArCj4gK2ludCB2YzRfZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsCj4gKwkJICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJICAgIHN0 cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKPiArewo+ICsJaW50IG1pbl9waXRjaCA9 IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJwcCwgOCk7Cj4gKwlzdHJ1Y3QgdmM0 X2JvICpibyA9IE5VTEw7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChhcmdzLT5waXRjaCA8IG1p bl9waXRjaCkKPiArCQlhcmdzLT5waXRjaCA9IG1pbl9waXRjaDsKPiArCj4gKwlpZiAoYXJncy0+ c2l6ZSA8IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0KQo+ICsJCWFyZ3MtPnNpemUgPSBhcmdz LT5waXRjaCAqIGFyZ3MtPmhlaWdodDsKPiArCj4gKwlibyA9IHZjNF9ib19jcmVhdGUoZGV2LCBy b3VuZHVwKGFyZ3MtPnNpemUsIFBBR0VfU0laRSkpOwo+ICsJaWYgKCFibykKPiArCQlyZXR1cm4g LUVOT01FTTsKPiArCj4gKwlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCAm Ym8tPmJhc2UuYmFzZSwgJmFyZ3MtPmhhbmRsZSk7Cj4gKwlkcm1fZ2VtX29iamVjdF91bnJlZmVy ZW5jZV91bmxvY2tlZCgmYm8tPmJhc2UuYmFzZSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMgYi9kcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9jcnRjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAuLjJjNzBmYWYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfY3J0Yy5jCj4gQEAgLTAsMCArMSw1NjUgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAy MDE1IEJyb2FkY29tCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAq IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKi8KPiArCj4g Ky8qKgo+ICsgKiBET0M6IFZDNCBDUlRDIG1vZHVsZQo+ICsgKgo+ICsgKiBJbiBWQzQsIHRoZSBQ aXhlbCBWYWx2ZSBpcyB3aGF0IG1vc3QgY2xvc2VseSBjb3JyZXNwb25kcyB0byB0aGUKPiArICog RFJNJ3MgY29uY2VwdCBvZiBhIENSVEMuICBUaGUgUFYgZ2VuZXJhdGVzIHZpZGVvIHRpbWluZ3Mg ZnJvbSB0aGUKPiArICogcGl4ZWwgY2xvY2sgYW5kIGl0cyBjb25maWd1cmF0aW9uLgo+ICsgKgo+ ICsgKiBIb3dldmVyLCB0aGUgRFJNIENSVEMgYWxzbyBjb2xsZWN0cyB0aGUgY29uZmlndXJhdGlv biBvZiBhbGwgdGhlCj4gKyAqIERSTSBwbGFuZXMgYXR0YWNoZWQgdG8gaXQuICBBcyBhIHJlc3Vs dCwgdGhpcyBmaWxlIGFsc28gbWFuYWdlcwo+ICsgKiBzZXR1cCBvZiB0aGUgVkM0IEhWUydzIGRp c3BsYXkgZWxlbWVudHMgb24gdGhlIENSVEMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImRybV9h dG9taWNfaGVscGVyLmgiCj4gKyNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKPiArI2luY2x1 ZGUgImxpbnV4L2Nsay5oIgo+ICsjaW5jbHVkZSAibGludXgvY29tcG9uZW50LmgiCj4gKyNpbmNs dWRlICJ2YzRfZHJ2LmgiCj4gKyNpbmNsdWRlICJ2YzRfcmVncy5oIgo+ICsKPiArI2RlZmluZSBD UlRDX1dSSVRFKG9mZnNldCwgdmFsKSB3cml0ZWwodmFsLCB2YzRfY3J0Yy0+cmVncyArIChvZmZz ZXQpKQo+ICsjZGVmaW5lIENSVENfUkVBRChvZmZzZXQpIHJlYWRsKHZjNF9jcnRjLT5yZWdzICsg KG9mZnNldCkpCj4gKwo+ICsjZGVmaW5lIENSVENfUkVHKHJlZykgeyByZWcsICNyZWcgfQo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IHsKPiArCXUzMiByZWc7Cj4gKwljb25zdCBjaGFyICpuYW1lOwo+ ICt9IGNydGNfcmVnc1tdID0gewo+ICsJQ1JUQ19SRUcoUFZfQ09OVFJPTCksCj4gKwlDUlRDX1JF RyhQVl9WX0NPTlRST0wpLAo+ICsJQ1JUQ19SRUcoUFZfVlNZTkNEKSwKPiArCUNSVENfUkVHKFBW X0hPUlpBKSwKPiArCUNSVENfUkVHKFBWX0hPUlpCKSwKPiArCUNSVENfUkVHKFBWX1ZFUlRBKSwK PiArCUNSVENfUkVHKFBWX1ZFUlRCKSwKPiArCUNSVENfUkVHKFBWX1ZFUlRBX0VWRU4pLAo+ICsJ Q1JUQ19SRUcoUFZfVkVSVEJfRVZFTiksCj4gKwlDUlRDX1JFRyhQVl9JTlRFTiksCj4gKwlDUlRD X1JFRyhQVl9JTlRTVEFUKSwKPiArCUNSVENfUkVHKFBWX1NUQVQpLAo+ICsJQ1JUQ19SRUcoUFZf SEFDVF9BQ1QpLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgdmM0X2NydGNfZHVtcF9yZWdzKHN0 cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMpCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGNydGNfcmVncyk7IGkrKykgewo+ICsJCURSTV9JTkZPKCIweCUw NHggKCVzKTogMHglMDh4XG4iLAo+ICsJCQkgY3J0Y19yZWdzW2ldLnJlZywgY3J0Y19yZWdzW2ld Lm5hbWUsCj4gKwkJCSBDUlRDX1JFQUQoY3J0Y19yZWdzW2ldLnJlZykpOwo+ICsJfQo+ICt9Cj4g Kwo+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gK2ludCB2YzRfY3J0Y19kZWJ1Z2ZzX3JlZ3Mo c3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gK3sKPiArCXN0cnVjdCBkcm1faW5m b19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7Cj4gKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKPiArCWludCBjcnRjX2lu ZGV4ID0gKHVpbnRwdHJfdClub2RlLT5pbmZvX2VudC0+ZGF0YTsKPiArCXN0cnVjdCBkcm1fY3J0 YyAqY3J0YzsKPiArCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGM7Cj4gKwlpbnQgaTsKPiArCj4g KwlpID0gMDsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcu Y3J0Y19saXN0LCBoZWFkKSB7Cj4gKwkJaWYgKGkgPT0gY3J0Y19pbmRleCkKPiArCQkJYnJlYWs7 Cj4gKwkJaSsrOwo+ICsJfQo+ICsJaWYgKCFjcnRjKQo+ICsJCXJldHVybiAwOwo+ICsJdmM0X2Ny dGMgPSB0b192YzRfY3J0YyhjcnRjKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShjcnRjX3JlZ3MpOyBpKyspIHsKPiArCQlzZXFfcHJpbnRmKG0sICIlcyAoMHglMDR4KTogMHgl MDh4XG4iLAo+ICsJCQkgICBjcnRjX3JlZ3NbaV0ubmFtZSwgY3J0Y19yZWdzW2ldLnJlZywKPiAr CQkJICAgQ1JUQ19SRUFEKGNydGNfcmVnc1tpXS5yZWcpKTsKPiArCX0KPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsjZW5kaWYKPiArCj4gK3N0YXRpYyB2b2lkIHZjNF9jcnRjX2Rlc3Ryb3koc3Ry dWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdTMyIHZjNF9nZXRfZmlmb19mdWxsX2xldmVsKHUzMiBmb3JtYXQpCj4g K3sKPiArCXN0YXRpYyBjb25zdCB1MzIgZmlmb19sZW5fYnl0ZXMgPSA2NDsKPiArCXN0YXRpYyBj b25zdCB1MzIgaHZzX2xhdGVuY3lfcGl4ID0gNjsKPiArCj4gKwlzd2l0Y2ggKGZvcm1hdCkgewo+ ICsJY2FzZSBQVl9DT05UUk9MX0ZPUk1BVF9EU0lWXzE2Ogo+ICsJY2FzZSBQVl9DT05UUk9MX0ZP Uk1BVF9EU0lDXzE2Ogo+ICsJCXJldHVybiBmaWZvX2xlbl9ieXRlcyAtIDIgKiBodnNfbGF0ZW5j eV9waXg7Cj4gKwljYXNlIFBWX0NPTlRST0xfRk9STUFUX0RTSVZfMTg6Cj4gKwkJcmV0dXJuIGZp Zm9fbGVuX2J5dGVzIC0gMTQ7Cj4gKwljYXNlIFBWX0NPTlRST0xfRk9STUFUXzI0Ogo+ICsJY2Fz ZSBQVl9DT05UUk9MX0ZPUk1BVF9EU0lWXzI0Ogo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gZmlm b19sZW5fYnl0ZXMgLSAzICogaHZzX2xhdGVuY3lfcGl4Owo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCB2YzRfY3J0Y19tb2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAr ewo+ICsJc3RydWN0IHZjNF9jcnRjICp2YzRfY3J0YyA9IHRvX3ZjNF9jcnRjKGNydGMpOwo+ICsJ c3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSA9IGNydGMtPnN0YXRlOwo+ICsJc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmc3RhdGUtPmFkanVzdGVkX21vZGU7Cj4gKwl1MzIgdmFj dGl2ZSA9IChtb2RlLT52ZGlzcGxheSA+Pgo+ICsJCSAgICAgICAoKG1vZGUtPmZsYWdzICYgRFJN X01PREVfRkxBR19JTlRFUkxBQ0UpID8gMSA6IDApKTsKPiArCXUzMiBmb3JtYXQgPSBQVl9DT05U Uk9MX0ZPUk1BVF8yNDsKPiArCWJvb2wgZGVidWdfZHVtcF9yZWdzID0gZmFsc2U7Cj4gKwo+ICsJ aWYgKGRlYnVnX2R1bXBfcmVncykgewo+ICsJCURSTV9JTkZPKCJDUlRDICVkIHJlZ3MgYmVmb3Jl OlxuIiwgZHJtX2NydGNfaW5kZXgoY3J0YykpOwo+ICsJCXZjNF9jcnRjX2R1bXBfcmVncyh2YzRf Y3J0Yyk7Cj4gKwl9Cj4gKwo+ICsJLyogVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBzZXQgdGhlIHBp eGVsIGNsb2NrLiAqLwo+ICsKPiArCS8qIFJlc2V0IHRoZSBQViBmaWZvLiAqLwo+ICsJQ1JUQ19X UklURShQVl9DT05UUk9MLCAwKTsKPiArCUNSVENfV1JJVEUoUFZfQ09OVFJPTCwgUFZfQ09OVFJP TF9GSUZPX0NMUiB8IFBWX0NPTlRST0xfRU4pOwo+ICsJQ1JUQ19XUklURShQVl9DT05UUk9MLCAw KTsKPiArCj4gKwlDUlRDX1dSSVRFKFBWX0hPUlpBLAo+ICsJCSAgIFZDNF9TRVRfRklFTEQobW9k ZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kLAo+ICsJCQkJIFBWX0hPUlpBX0hCUCkgfAo+ICsJ CSAgIFZDNF9TRVRfRklFTEQobW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQsCj4g KwkJCQkgUFZfSE9SWkFfSFNZTkMpKTsKPiArCUNSVENfV1JJVEUoUFZfSE9SWkIsCj4gKwkJICAg VkM0X1NFVF9GSUVMRChtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5LAo+ICsJCQkJ IFBWX0hPUlpCX0hGUCkgfAo+ICsJCSAgIFZDNF9TRVRfRklFTEQobW9kZS0+aGRpc3BsYXksIFBW X0hPUlpCX0hBQ1RJVkUpKTsKPiArCj4gKwlDUlRDX1dSSVRFKFBWX1ZFUlRBLAo+ICsJCSAgIFZD NF9TRVRfRklFTEQobW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfZW5kLAo+ICsJCQkJIFBWX1ZF UlRBX1ZCUCkgfAo+ICsJCSAgIFZDNF9TRVRfRklFTEQobW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+ dnN5bmNfc3RhcnQsCj4gKwkJCQkgUFZfVkVSVEFfVlNZTkMpKTsKPiArCUNSVENfV1JJVEUoUFZf VkVSVEIsCj4gKwkJICAgVkM0X1NFVF9GSUVMRChtb2RlLT52c3luY19zdGFydCAtIG1vZGUtPnZk aXNwbGF5LAo+ICsJCQkJIFBWX1ZFUlRCX1ZGUCkgfAo+ICsJCSAgIFZDNF9TRVRfRklFTEQodmFj dGl2ZSwgUFZfVkVSVEJfVkFDVElWRSkpOwo+ICsJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVf RkxBR19JTlRFUkxBQ0UpIHsKPiArCQkvKiBXcml0ZSBQVl9WRVJUQV9FVkVOL1ZFUlRCX0VWRU4g Ki8KPiArCX0KPiArCj4gKwlDUlRDX1dSSVRFKFBWX0hBQ1RfQUNULCBtb2RlLT5oZGlzcGxheSk7 Cj4gKwo+ICsJQ1JUQ19XUklURShQVl9WX0NPTlRST0wsCj4gKwkJICAgUFZfVkNPTlRST0xfQ09O VElOVU9VUyk7Cj4gKwo+ICsJQ1JUQ19XUklURShQVl9DT05UUk9MLAo+ICsJCSAgIFZDNF9TRVRf RklFTEQoZm9ybWF0LCBQVl9DT05UUk9MX0ZPUk1BVCkgfAo+ICsJCSAgIFZDNF9TRVRfRklFTEQo dmM0X2dldF9maWZvX2Z1bGxfbGV2ZWwoZm9ybWF0KSwKPiArCQkJCSBQVl9DT05UUk9MX0ZJRk9f TEVWRUwpIHwKPiArCQkgICBQVl9DT05UUk9MX0NMUl9BVF9TVEFSVCB8Cj4gKwkJICAgUFZfQ09O VFJPTF9UUklHR0VSX1VOREVSRkxPVyB8Cj4gKwkJICAgUFZfQ09OVFJPTF9XQUlUX0hTVEFSVCB8 Cj4gKwkJICAgVkM0X1NFVF9GSUVMRChQVl9DT05UUk9MX0NMS19TRUxFQ1RfRFBJX1NNSV9IRE1J LAo+ICsJCQkJIFBWX0NPTlRST0xfQ0xLX1NFTEVDVCkgfAo+ICsJCSAgIFBWX0NPTlRST0xfRklG T19DTFIgfAo+ICsJCSAgIFBWX0NPTlRST0xfRU4pOwo+ICsKPiArCWlmIChkZWJ1Z19kdW1wX3Jl Z3MpIHsKPiArCQlEUk1fSU5GTygiQ1JUQyAlZCByZWdzIGFmdGVyOlxuIiwgZHJtX2NydGNfaW5k ZXgoY3J0YykpOwo+ICsJCXZjNF9jcnRjX2R1bXBfcmVncyh2YzRfY3J0Yyk7Cj4gKwl9Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIHJlcXVpcmVfaHZzX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKPiArewo+ICsJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKPiAr Cj4gKwlXQVJOX09OX09OQ0UoKEhWU19SRUFEKFNDQUxFUl9ESVNQQ1RSTCkgJiBTQ0FMRVJfRElT UENUUkxfRU5BQkxFKSAhPQo+ICsJCSAgICAgU0NBTEVSX0RJU1BDVFJMX0VOQUJMRSk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIHZjNF9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRj KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ICsJc3RydWN0 IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKPiArCXN0cnVjdCB2YzRfY3J0YyAqdmM0 X2NydGMgPSB0b192YzRfY3J0YyhjcnRjKTsKPiArCj4gKwlyZXF1aXJlX2h2c19lbmFibGVkKGRl dik7Cj4gKwo+ICsJQ1JUQ19XUklURShQVl9WX0NPTlRST0wsCj4gKwkJICAgQ1JUQ19SRUFEKFBW X1ZfQ09OVFJPTCkgJiB+UFZfVkNPTlRST0xfVklERU4pOwo+ICsJd2hpbGUgKENSVENfUkVBRChQ Vl9WX0NPTlRST0wpICYgUFZfVkNPTlRST0xfVklERU4pCj4gKwkJY3B1X3JlbGF4KCk7Cj4gKwo+ ICsJLyogV2l0aG91dCBhIHdhaXQgaGVyZSwgd2UgZW5kIHVwIHdpdGggYSBibGFjayBzY3JlZW4u ICovCj4gKwltc2xlZXAoMzApOwo+ICsKPiArCWlmIChIVlNfUkVBRChTQ0FMRVJfRElTUENUUkxY KHZjNF9jcnRjLT5jaGFubmVsKSkgJgo+ICsJICAgIFNDQUxFUl9ESVNQQ1RSTFhfRU5BQkxFKSB7 Cj4gKwkJSFZTX1dSSVRFKFNDQUxFUl9ESVNQQ1RSTFgodmM0X2NydGMtPmNoYW5uZWwpLAo+ICsJ CQkgIFNDQUxFUl9ESVNQQ1RSTFhfUkVTRVQpOwo+ICsKPiArCQkvKiBXaGlsZSB0aGUgZG9jcyBz YXkgdGhhdCByZXNldCBpcyBzZWxmLWNsZWFyaW5nLCBpdAo+ICsJCSAqIHNlZW1zIGl0IGRvZXNu J3QgYWN0dWFsbHkuCj4gKwkJICovCj4gKwkJSFZTX1dSSVRFKFNDQUxFUl9ESVNQQ1RSTFgodmM0 X2NydGMtPmNoYW5uZWwpLCAwKTsKPiArCX0KPiArCj4gKwkvKiBPbmNlIHdlIGxlYXZlLCB0aGUg c2NhbGVyIHNob3VsZCBiZSBkaXNhYmxlZCBhbmQgaXRzIGZpZm8gZW1wdHkuICovCj4gKwo+ICsJ V0FSTl9PTl9PTkNFKEhWU19SRUFEKFNDQUxFUl9ESVNQQ1RSTFgodmM0X2NydGMtPmNoYW5uZWwp KSAmCj4gKwkJICAgICBTQ0FMRVJfRElTUENUUkxYX1JFU0VUKTsKPiArCj4gKwlXQVJOX09OX09O Q0UoVkM0X0dFVF9GSUVMRChIVlNfUkVBRChTQ0FMRVJfRElTUFNUQVRYKHZjNF9jcnRjLT5jaGFu bmVsKSksCj4gKwkJCQkgICBTQ0FMRVJfRElTUFNUQVRYX01PREUpICE9Cj4gKwkJICAgICBTQ0FM RVJfRElTUFNUQVRYX01PREVfRElTQUJMRUQpOwo+ICsKPiArCVdBUk5fT05fT05DRSgoSFZTX1JF QUQoU0NBTEVSX0RJU1BTVEFUWCh2YzRfY3J0Yy0+Y2hhbm5lbCkpICYKPiArCQkgICAgICAoU0NB TEVSX0RJU1BTVEFUWF9GVUxMIHwgU0NBTEVSX0RJU1BTVEFUWF9FTVBUWSkpICE9Cj4gKwkJICAg ICBTQ0FMRVJfRElTUFNUQVRYX0VNUFRZKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmM0X2Ny dGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGNydGMtPmRldjsKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2 KGRldik7Cj4gKwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjID0gdG9fdmM0X2NydGMoY3J0Yyk7 Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlID0gY3J0Yy0+c3RhdGU7Cj4gKwlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZzdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKPiArCj4g KwlyZXF1aXJlX2h2c19lbmFibGVkKGRldik7Cj4gKwo+ICsJLyogVHVybiBvbiB0aGUgc2NhbGVy LCB3aGljaCB3aWxsIHdhaXQgZm9yIHZzdGFydCB0byBzdGFydAo+ICsJICogY29tcG9zaXRpbmcu Cj4gKwkgKi8KPiArCUhWU19XUklURShTQ0FMRVJfRElTUENUUkxYKHZjNF9jcnRjLT5jaGFubmVs KSwKPiArCQkgIFZDNF9TRVRfRklFTEQobW9kZS0+aGRpc3BsYXksIFNDQUxFUl9ESVNQQ1RSTFhf V0lEVEgpIHwKPiArCQkgIFZDNF9TRVRfRklFTEQobW9kZS0+dmRpc3BsYXksIFNDQUxFUl9ESVNQ Q1RSTFhfSEVJR0hUKSB8Cj4gKwkJICBTQ0FMRVJfRElTUENUUkxYX0VOQUJMRSk7Cj4gKwo+ICsJ LyogVHVybiBvbiB0aGUgcGl4ZWwgdmFsdmUsIHdoaWNoIHdpbGwgZW1pdCB0aGUgdnN0YXJ0IHNp Z25hbC4gKi8KPiArCUNSVENfV1JJVEUoUFZfVl9DT05UUk9MLAo+ICsJCSAgIENSVENfUkVBRChQ Vl9WX0NPTlRST0wpIHwgUFZfVkNPTlRST0xfVklERU4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHZjNF9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmRldjsKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7 Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiArCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2Ny dGMgPSB0b192YzRfY3J0YyhjcnRjKTsKPiArCXUzMiBkbGlzdF9jb3VudCA9IDA7Cj4gKwo+ICsJ ZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBzdGF0ZSkgewo+ICsJ CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0KPiArCQkJc3RhdGUtPnN0YXRl LT5wbGFuZV9zdGF0ZXNbZHJtX3BsYW5lX2luZGV4KHBsYW5lKV07Cj4gKwo+ICsJCS8qIHBsYW5l IG1pZ2h0IG5vdCBoYXZlIGNoYW5nZWQsIGluIHdoaWNoIGNhc2UgdGFrZQo+ICsJCSAqIGN1cnJl bnQgc3RhdGU6Cj4gKwkJICovCj4gKwkJaWYgKCFwbGFuZV9zdGF0ZSkKPiArCQkJcGxhbmVfc3Rh dGUgPSBwbGFuZS0+c3RhdGU7Cj4gKwo+ICsJCWRsaXN0X2NvdW50ICs9IHZjNF9wbGFuZV9kbGlz dF9zaXplKHBsYW5lX3N0YXRlKTsKPiArCX0KPiArCj4gKwlkbGlzdF9jb3VudCsrOyAvKiBBY2Nv dW50IGZvciBTQ0FMRVJfQ1RMMF9FTkQuICovCj4gKwo+ICsJaWYgKCF2YzRfY3J0Yy0+ZGxpc3Qg fHwgZGxpc3RfY291bnQgPiB2YzRfY3J0Yy0+ZGxpc3Rfc2l6ZSkgewo+ICsJCXZjNF9jcnRjLT5k bGlzdCA9ICgodTMyIF9faW9tZW0gKil2YzQtPmh2cy0+ZGxpc3QgKwo+ICsJCQkJICAgSFZTX0JP T1RMT0FERVJfRExJU1RfRU5EKTsKPiArCQl2YzRfY3J0Yy0+ZGxpc3Rfc2l6ZSA9ICgoU0NBTEVS X0RMSVNUX1NJWkUgPj4gMikgLQo+ICsJCQkJCUhWU19CT09UTE9BREVSX0RMSVNUX0VORCk7Cj4g Kwo+ICsJCWlmIChkbGlzdF9jb3VudCA+IHZjNF9jcnRjLT5kbGlzdF9zaXplKSB7Cj4gKwkJCURS TV9ERUJVR19LTVMoImRsaXN0IHRvbyBsYXJnZSBmb3IgQ1JUQyAoJWQgPiAlZCkuXG4iLAo+ICsJ CQkJICAgICAgZGxpc3RfY291bnQsIHZjNF9jcnRjLT5kbGlzdF9zaXplKTsKPiArCQkJcmV0dXJu IC1FSU5WQUw7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCB2YzRfY3J0Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJ CQkJICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192 YzRfZGV2KGRldik7Cj4gKwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjID0gdG9fdmM0X2NydGMo Y3J0Yyk7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiArCWJvb2wgZGVidWdfZHVtcF9y ZWdzID0gZmFsc2U7Cj4gKwl1MzIgX19pb21lbSAqZGxpc3RfbmV4dCA9IHZjNF9jcnRjLT5kbGlz dDsKPiArCj4gKwlpZiAoZGVidWdfZHVtcF9yZWdzKSB7Cj4gKwkJRFJNX0lORk8oIkNSVEMgJWQg SFZTIGJlZm9yZTpcbiIsIGRybV9jcnRjX2luZGV4KGNydGMpKTsKPiArCQl2YzRfaHZzX2R1bXBf c3RhdGUoZGV2KTsKPiArCX0KPiArCj4gKwkvKiBDb3B5IGFsbCB0aGUgYWN0aXZlIHBsYW5lcycg ZGxpc3QgY29udGVudHMgdG8gdGhlIGhhcmR3YXJlIGRsaXN0Lgo+ICsJICoKPiArCSAqIFhYWDog SWYgdGhlIG5ldyBkaXNwbGF5IGxpc3Qgd2FzIGxhcmdlIGVub3VnaCB0aGF0IGl0Cj4gKwkgKiBv dmVybGFwcGVkIGEgY3VycmVudGx5LXJlYWQgZGlzcGxheSBsaXN0LCB3ZSBuZWVkIHRvIGRvCj4g KwkgKiBzb21ldGhpbmcgbGlrZSBkaXNhYmxlIHNjYW5vdXQgYmVmb3JlIHB1dHRpbmcgaW4gdGhl IG5ldwo+ICsJICogbGlzdC4gIEZvciBub3csIHdlJ3JlIHNhZmUgYmVjYXVzZSB3ZSBvbmx5IGhh dmUgdGhlIHR3bwo+ICsJICogcGxhbmVzLgo+ICsJICovCj4gKwlkcm1fYXRvbWljX2NydGNfZm9y X2VhY2hfcGxhbmUocGxhbmUsIGNydGMpIHsKPiArCQlkbGlzdF9uZXh0ICs9IHZjNF9wbGFuZV93 cml0ZV9kbGlzdChwbGFuZSwgZGxpc3RfbmV4dCk7Cj4gKwl9Cj4gKwo+ICsJaWYgKGRsaXN0X25l eHQgPT0gdmM0X2NydGMtPmRsaXN0KSB7Cj4gKwkJLyogSWYgbm8gcGxhbmVzIHdlcmUgZW5hYmxl ZCwgdXNlIHRoZSBTQ0FMRVJfQ1RMMF9FTkQKPiArCQkgKiBhdCB0aGUgc3RhcnQgb2YgdGhlIGRp c3BsYXkgbGlzdCBtZW1vcnkgKGluIHRoZQo+ICsJCSAqIGJvb3Rsb2FkZXIgc2VjdGlvbikuICBX ZSdsbCByZXdyaXRlIHRoYXQKPiArCQkgKiBTQ0FMRVJfQ1RMMF9FTkQsIGp1c3QgaW4gY2FzZSwg dGhvdWdoLgo+ICsJCSAqLwo+ICsJCXdyaXRlbChTQ0FMRVJfQ1RMMF9FTkQsIHZjNC0+aHZzLT5k bGlzdCk7Cj4gKwkJSFZTX1dSSVRFKFNDQUxFUl9ESVNQTElTVFgodmM0X2NydGMtPmNoYW5uZWwp LCAwKTsKPiArCX0gZWxzZSB7Cj4gKwkJd3JpdGVsKFNDQUxFUl9DVEwwX0VORCwgZGxpc3RfbmV4 dCk7Cj4gKwkJZGxpc3RfbmV4dCsrOwo+ICsKPiArCQlIVlNfV1JJVEUoU0NBTEVSX0RJU1BMSVNU WCh2YzRfY3J0Yy0+Y2hhbm5lbCksCj4gKwkJCSAgKHUzMiAqKXZjNF9jcnRjLT5kbGlzdCAtICh1 MzIgKil2YzQtPmh2cy0+ZGxpc3QpOwo+ICsKPiArCQkvKiBNYWtlIHRoZSBuZXh0IGRpc3BsYXkg bGlzdCBzdGFydCBhZnRlciBvdXJzLiAqLwo+ICsJCXZjNF9jcnRjLT5kbGlzdF9zaXplIC09IChk bGlzdF9uZXh0IC0gdmM0X2NydGMtPmRsaXN0KTsKPiArCQl2YzRfY3J0Yy0+ZGxpc3QgPSBkbGlz dF9uZXh0Owo+ICsJfQo+ICsKPiArCWlmIChkZWJ1Z19kdW1wX3JlZ3MpIHsKPiArCQlEUk1fSU5G TygiQ1JUQyAlZCBIVlMgYWZ0ZXI6XG4iLCBkcm1fY3J0Y19pbmRleChjcnRjKSk7Cj4gKwkJdmM0 X2h2c19kdW1wX3N0YXRlKGRldik7Cj4gKwl9Cj4gKwo+ICsJaWYgKGNydGMtPnN0YXRlLT5ldmVu dCkgewo+ICsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJCWNydGMtPnN0YXRlLT5ldmVu dC0+cGlwZSA9IGRybV9jcnRjX2luZGV4KGNydGMpOwo+ICsKPiArCQlXQVJOX09OKGRybV9jcnRj X3ZibGFua19nZXQoY3J0YykgIT0gMCk7Cj4gKwo+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYt PmV2ZW50X2xvY2ssIGZsYWdzKTsKPiArCQl2YzRfY3J0Yy0+ZXZlbnQgPSBjcnRjLT5zdGF0ZS0+ ZXZlbnQ7Cj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFn cyk7Cj4gKwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKPiArCX0KPiArfQo+ICsKPiAraW50 IHZjNF9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjX2lkKQo+ ICt7Cj4gKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwo+ICsJc3RydWN0 IHZjNF9jcnRjICp2YzRfY3J0YyA9IHZjNC0+Y3J0Y1tjcnRjX2lkXTsKPiArCj4gKwlDUlRDX1dS SVRFKFBWX0lOVEVOLCBQVl9JTlRfVkZQX1NUQVJUKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArdm9pZCB2YzRfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50 IGNydGNfaWQpCj4gK3sKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7 Cj4gKwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjID0gdmM0LT5jcnRjW2NydGNfaWRdOwo+ICsK PiArCUNSVENfV1JJVEUoUFZfSU5URU4sIDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2YzRf Y3J0Y19oYW5kbGVfcGFnZV9mbGlwKHN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMpCj4gK3sKPiAr CXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZ2YzRfY3J0Yy0+YmFzZTsKPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiAr CXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiArCWlmICh2YzRf Y3J0Yy0+ZXZlbnQpIHsKPiArCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCB2YzRf Y3J0Yy0+ZXZlbnQpOwo+ICsJCXZjNF9jcnRjLT5ldmVudCA9IE5VTEw7Cj4gKwl9Cj4gKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiArfQo+ICsKPiAr c3RhdGljIGlycXJldHVybl90IHZjNF9jcnRjX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRh dGEpCj4gK3sKPiArCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMgPSBkYXRhOwo+ICsJdTMyIHN0 YXQgPSBDUlRDX1JFQUQoUFZfSU5UU1RBVCk7Cj4gKwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9O RTsKPiArCj4gKwlpZiAoc3RhdCAmIFBWX0lOVF9WRlBfU1RBUlQpIHsKPiArCQlDUlRDX1dSSVRF KFBWX0lOVFNUQVQsIFBWX0lOVF9WRlBfU1RBUlQpOwo+ICsJCWRybV9jcnRjX2hhbmRsZV92Ymxh bmsoJnZjNF9jcnRjLT5iYXNlKTsKPiArCQl2YzRfY3J0Y19oYW5kbGVfcGFnZV9mbGlwKHZjNF9j cnRjKTsKPiArCQlyZXQgPSBJUlFfSEFORExFRDsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIHZjNF9jcnRjX2Z1 bmNzID0gewo+ICsJLnNldF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAo+ ICsJLmRlc3Ryb3kgPSB2YzRfY3J0Y19kZXN0cm95LAo+ICsJLnBhZ2VfZmxpcCA9IGRybV9hdG9t aWNfaGVscGVyX3BhZ2VfZmxpcCwKPiArCS5zZXRfcHJvcGVydHkgPSBOVUxMLAo+ICsJLmN1cnNv cl9zZXQgPSBOVUxMLCAvKiBoYW5kbGVkIGJ5IGRybV9tb2RlX2N1cnNvcl91bml2ZXJzYWwgKi8K PiArCS5jdXJzb3JfbW92ZSA9IE5VTEwsIC8qIGhhbmRsZWQgYnkgZHJtX21vZGVfY3Vyc29yX3Vu aXZlcnNhbCAqLwo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldCwKPiAr CS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNh dGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9j cnRjX2Rlc3Ryb3lfc3RhdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9j cnRjX2hlbHBlcl9mdW5jcyB2YzRfY3J0Y19oZWxwZXJfZnVuY3MgPSB7Cj4gKwkubW9kZV9zZXRf bm9mYiA9IHZjNF9jcnRjX21vZGVfc2V0X25vZmIsCj4gKwkuZGlzYWJsZSA9IHZjNF9jcnRjX2Rp c2FibGUsCj4gKwkuZW5hYmxlID0gdmM0X2NydGNfZW5hYmxlLAo+ICsJLmF0b21pY19jaGVjayA9 IHZjNF9jcnRjX2F0b21pY19jaGVjaywKPiArCS5hdG9taWNfZmx1c2ggPSB2YzRfY3J0Y19hdG9t aWNfZmx1c2gsCj4gK307Cj4gKwo+ICsvKiBGcmVlcyB0aGUgcGFnZSBmbGlwIGV2ZW50IHdoZW4g dGhlIERSTSBkZXZpY2UgaXMgY2xvc2VkIHdpdGggdGhlCj4gKyAqIGV2ZW50IHN0aWxsIG91dHN0 YW5kaW5nLgo+ICsgKi8KPiArdm9pZCB2YzRfY2FuY2VsX3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiArewo+ICsJc3RydWN0IHZjNF9jcnRj ICp2YzRfY3J0YyA9IHRvX3ZjNF9jcnRjKGNydGMpOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmRldjsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJc3Bpbl9sb2Nr X2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ICsKPiArCWlmICh2YzRfY3J0Yy0+ ZXZlbnQgJiYgdmM0X2NydGMtPmV2ZW50LT5iYXNlLmZpbGVfcHJpdiA9PSBmaWxlKSB7Cj4gKwkJ dmM0X2NydGMtPmV2ZW50LT5iYXNlLmRlc3Ryb3koJnZjNF9jcnRjLT5ldmVudC0+YmFzZSk7Cj4g KwkJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsKPiArCQl2YzRfY3J0Yy0+ZXZlbnQgPSBOVUxM Owo+ICsJfQo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywg ZmxhZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZjNF9jcnRjX2JpbmQoc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKPiArCXN0cnVj dCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRybSk7Cj4gKwlzdHJ1Y3QgdmM0X2NydGMgKnZj NF9jcnRjOwo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICsJc3RydWN0IGRybV9wbGFuZSAq cHJpbWFyeV9wbGFuZSwgKmN1cnNvcl9wbGFuZTsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyogRm9y IG5vdywgd2UgY3JlYXRlIGp1c3QgdGhlIHByaW1hcnkgYW5kIHRoZSBsZWdhY3kgY3Vyc29yCj4g KwkgKiBwbGFuZXMuICBXZSBzaG91bGQgYmUgYWJsZSB0byBzdGFjayBtb3JlIHBsYW5lcyBvbiBl YXNpbHksCj4gKwkgKiBidXQgdG8gZG8gdGhhdCB3ZSB3b3VsZCBuZWVkIHRvIGNvbXB1dGUgdGhl IGJhbmR3aWR0aAo+ICsJICogcmVxdWlyZW1lbnQgb2YgdGhlIHBsYW5lIGNvbmZpZ3VyYXRpb24s IGFuZCByZWplY3Qgb25lcwo+ICsJICogdGhhdCB3aWxsIHRha2UgdG9vIG11Y2guCj4gKwkgKi8K PiArCXByaW1hcnlfcGxhbmUgPSB2YzRfcGxhbmVfaW5pdChkcm0sIERSTV9QTEFORV9UWVBFX1BS SU1BUlkpOwo+ICsJaWYgKCFwcmltYXJ5X3BsYW5lKSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gY29uc3RydWN0IHByaW1hcnkgcGxhbmVcbiIpOwo+ICsJCXJldCA9IFBUUl9FUlIocHJp bWFyeV9wbGFuZSk7Cj4gKwkJZ290byBmYWlsOwo+ICsJfQo+ICsKPiArCWN1cnNvcl9wbGFuZSA9 IHZjNF9wbGFuZV9pbml0KGRybSwgRFJNX1BMQU5FX1RZUEVfQ1VSU09SKTsKPiArCWlmICghY3Vy c29yX3BsYW5lKSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY29uc3RydWN0IGN1cnNv ciBwbGFuZVxuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUihjdXJzb3JfcGxhbmUpOwo+ICsJCWdvdG8g ZmFpbDsKPiArCX0KPiArCj4gKwl2YzRfY3J0YyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq dmM0X2NydGMpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghdmM0X2NydGMpCj4gKwkJcmV0dXJuIC1F Tk9NRU07Cj4gKwljcnRjID0gJnZjNF9jcnRjLT5iYXNlOwo+ICsKPiArCXZjNF9jcnRjLT5yZWdz ID0gdmM0X2lvcmVtYXBfcmVncyhwZGV2LCAwKTsKPiArCWlmIChJU19FUlIodmM0X2NydGMtPnJl Z3MpKQo+ICsJCXJldHVybiBQVFJfRVJSKHZjNF9jcnRjLT5yZWdzKTsKPiArCj4gKwlkcm1fY3J0 Y19pbml0X3dpdGhfcGxhbmVzKGRybSwgY3J0YywgcHJpbWFyeV9wbGFuZSwgY3Vyc29yX3BsYW5l LAo+ICsJCQkJICAmdmM0X2NydGNfZnVuY3MpOwo+ICsJZHJtX2NydGNfaGVscGVyX2FkZChjcnRj LCAmdmM0X2NydGNfaGVscGVyX2Z1bmNzKTsKPiArCXByaW1hcnlfcGxhbmUtPmNydGMgPSBjcnRj Owo+ICsJY3Vyc29yX3BsYW5lLT5jcnRjID0gY3J0YzsKPiArCXZjNC0+Y3J0Y1tkcm1fY3J0Y19p bmRleChjcnRjKV0gPSB2YzRfY3J0YzsKPiArCj4gKwkvKiBVbnRpbCB3ZSBoYXZlIGZ1bGwgc2Nh bm91dCBzZXR1cCB0byByb3V0ZSB0aGluZ3MgdGhyb3VnaCB0bwo+ICsJICogZW5jb2RlcnMsIGxp bmUgdGhpbmdzIHVwIGxpa2UgdGhlIGZpcm13YXJlIGRpZC4KPiArCSAqLwo+ICsJc3dpdGNoIChk cm1fY3J0Y19pbmRleChjcnRjKSkgewo+ICsJY2FzZSAwOgo+ICsJCXZjNF9jcnRjLT5jaGFubmVs ID0gMDsKPiArCQlicmVhazsKPiArCWNhc2UgMToKPiArCQl2YzRfY3J0Yy0+Y2hhbm5lbCA9IDI7 Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJY2FzZSAyOgo+ICsJCXZjNF9jcnRjLT5jaGFu bmVsID0gMTsKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlDUlRDX1dSSVRFKFBWX0lOVEVOLCAw KTsKPiArCUNSVENfV1JJVEUoUFZfSU5UU1RBVCwgUFZfSU5UX1ZGUF9TVEFSVCk7Cj4gKwlyZXQg PSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSwKPiArCQkJ ICAgICAgIHZjNF9jcnRjX2lycV9oYW5kbGVyLCAwLCAidmM0IGNydGMiLCB2YzRfY3J0Yyk7Cj4g Kwo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdmM0X2NydGMpOwo+ICsKPiArCXJldHVy biAwOwo+ICsKPiArZmFpbDoKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHZjNF9jcnRjX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rl ciwKPiArCQkJICAgIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPiArCXN0cnVjdCB2YzRfY3J0YyAqdmM0 X2NydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCj4gKwl2YzRfY3J0Y19kZXN0cm95KCZ2 YzRfY3J0Yy0+YmFzZSk7Cj4gKwo+ICsJQ1JUQ19XUklURShQVl9JTlRFTiwgMCk7Cj4gKwo+ICsJ cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgY29tcG9uZW50X29wcyB2YzRfY3J0Y19vcHMgPSB7Cj4gKwkuYmluZCAgID0gdmM0 X2NydGNfYmluZCwKPiArCS51bmJpbmQgPSB2YzRfY3J0Y191bmJpbmQsCj4gK307Cj4gKwo+ICtz dGF0aWMgaW50IHZjNF9jcnRjX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQo+ICt7Cj4gKwlyZXR1cm4gY29tcG9uZW50X2FkZCgmcGRldi0+ZGV2LCAmdmM0X2NydGNfb3Bz KTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2YzRfY3J0Y19kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJnZj NF9jcnRjX29wcyk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgdmM0X2NydGNfZHRfbWF0Y2hbXSA9IHsKPiArCXsgLmNvbXBhdGlibGUg PSAiYnJjbSx2YzQtcGl4ZWx2YWx2ZSIgfSwKPiArCXt9Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgcGxh dGZvcm1fZHJpdmVyIHZjNF9jcnRjX2RyaXZlciA9IHsKPiArCS5wcm9iZSA9IHZjNF9jcnRjX2Rl dl9wcm9iZSwKPiArCS5yZW1vdmUgPSB2YzRfY3J0Y19kZXZfcmVtb3ZlLAo+ICsJLmRyaXZlciA9 IHsKPiArCQkubmFtZSA9ICJ2YzRfY3J0YyIsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gdmM0X2Ny dGNfZHRfbWF0Y2gsCj4gKwl9LAo+ICt9Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kZWJ1Z2ZzLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmM1NTcwMzkKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZGVidWdmcy5jCj4gQEAgLTAsMCAr MSwzOCBAQAo+ICsvKgo+ICsgKiAgQ29weXJpZ2h0IMKpIDIwMTQgQnJvYWRjb20KPiArICoKPiAr ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3NlcV9m aWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5oPgo+ICsjaW5jbHVkZSA8bGludXgv Y3R5cGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1QLmg+Cj4gKwo+ICsjaW5jbHVkZSAidmM0X2Rydi5oIgo+ICsjaW5jbHVkZSAidmM0X3JlZ3Mu aCIKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2luZm9fbGlzdCB2YzRfZGVidWdmc19s aXN0W10gPSB7Cj4gKwl7ImhkbWlfcmVncyIsIHZjNF9oZG1pX2RlYnVnZnNfcmVncywgMH0sCj4g Kwl7Imh2c19yZWdzIiwgdmM0X2h2c19kZWJ1Z2ZzX3JlZ3MsIDB9LAo+ICsJeyJjcnRjMF9yZWdz IiwgdmM0X2NydGNfZGVidWdmc19yZWdzLCAwLCAodm9pZCAqKSh1aW50cHRyX3QpMH0sCj4gKwl7 ImNydGMxX3JlZ3MiLCB2YzRfY3J0Y19kZWJ1Z2ZzX3JlZ3MsIDAsICh2b2lkICopKHVpbnRwdHJf dCkxfSwKPiArCXsiY3J0YzJfcmVncyIsIHZjNF9jcnRjX2RlYnVnZnNfcmVncywgMCwgKHZvaWQg KikodWludHB0cl90KTJ9LAo+ICt9Owo+ICsjZGVmaW5lIFZDNF9ERUJVR0ZTX0VOVFJJRVMgQVJS QVlfU0laRSh2YzRfZGVidWdmc19saXN0KQo+ICsKPiAraW50Cj4gK3ZjNF9kZWJ1Z2ZzX2luaXQo c3RydWN0IGRybV9taW5vciAqbWlub3IpCj4gK3sKPiArCXJldHVybiBkcm1fZGVidWdmc19jcmVh dGVfZmlsZXModmM0X2RlYnVnZnNfbGlzdCwgVkM0X0RFQlVHRlNfRU5UUklFUywKPiArCQkJCQlt aW5vci0+ZGVidWdmc19yb290LCBtaW5vcik7Cj4gK30KPiArCj4gK3ZvaWQKPiArdmM0X2RlYnVn ZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKPiArewo+ICsJZHJtX2RlYnVnZnNf cmVtb3ZlX2ZpbGVzKHZjNF9kZWJ1Z2ZzX2xpc3QsIFZDNF9ERUJVR0ZTX0VOVFJJRVMsIG1pbm9y KTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYyBiL2Ry aXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwLi5kMzBhZWZhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS92YzQvdmM0X2Rydi5jCj4gQEAgLTAsMCArMSwyNzEgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IChDKSAyMDE0LTIwMTUgQnJvYWRjb20KPiArICogQ29weXJpZ2h0IChDKSAyMDEzIFJlZCBIYXQK PiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArCj4gKyNpbmNsdWRlICJ2YzRfZHJ2LmgiCj4g KyNpbmNsdWRlICJ2YzRfcmVncy5oIgo+ICsKPiArI2RlZmluZSBEUklWRVJfTkFNRSAidmM0Igo+ ICsjZGVmaW5lIERSSVZFUl9ERVNDICJCcm9hZGNvbSBWQzQgZ3JhcGhpY3MiCj4gKyNkZWZpbmUg RFJJVkVSX0RBVEUgIjIwMTQwNjE2Igo+ICsjZGVmaW5lIERSSVZFUl9NQUpPUiAwCj4gKyNkZWZp bmUgRFJJVkVSX01JTk9SIDAKPiArI2RlZmluZSBEUklWRVJfUEFUQ0hMRVZFTCAwCj4gKwo+ICsv KiBIZWxwZXIgZnVuY3Rpb24gZm9yIG1hcHBpbmcgdGhlIHJlZ3Mgb24gYSBwbGF0Zm9ybSBkZXZp Y2UuICovCj4gK3ZvaWQgX19pb21lbSAqdmM0X2lvcmVtYXBfcmVncyhzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpkZXYsIGludCBpbmRleCkKPiArewo+ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4g Kwl2b2lkIF9faW9tZW0gKm1hcDsKPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uo ZGV2LCBJT1JFU09VUkNFX01FTSwgaW5kZXgpOwo+ICsJbWFwID0gZGV2bV9pb3JlbWFwX3Jlc291 cmNlKCZkZXYtPmRldiwgcmVzKTsKPiArCWlmIChJU19FUlIobWFwKSkgewo+ICsJCURSTV9FUlJP UigiRmFpbGVkIHRvIG1hcCByZWdpc3RlcnM6ICVsZFxuIiwgUFRSX0VSUihtYXApKTsKPiArCQly ZXR1cm4gbWFwOwo+ICsJfQo+ICsKPiArCXJldHVybiBtYXA7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHZjNF9kcm1fcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9m aWxlICpmaWxlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwo+ICsJbGlzdF9m b3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpCj4g KwkJdmM0X2NhbmNlbF9wYWdlX2ZsaXAoY3J0YywgZmlsZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZjNF9kcm1fZm9wcyA9IHsKPiArCS5vd25lciA9 IFRISVNfTU9EVUxFLAo+ICsJLm9wZW4gPSBkcm1fb3BlbiwKPiArCS5yZWxlYXNlID0gZHJtX3Jl bGVhc2UsCj4gKwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCj4gKwkubW1hcCA9IGRybV9n ZW1fY21hX21tYXAsCj4gKwkucG9sbCA9IGRybV9wb2xsLAo+ICsJLnJlYWQgPSBkcm1fcmVhZCwK PiArI2lmZGVmIENPTkZJR19DT01QQVQKPiArCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lv Y3RsLAo+ICsjZW5kaWYKPiArCS5sbHNlZWsgPSBub29wX2xsc2VlaywKPiArfTsKPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgdmM0X2RybV9pb2N0bHNbXSA9IHsKPiAr fTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciB2YzRfZHJtX2RyaXZlciA9IHsKPiAr CS5kcml2ZXJfZmVhdHVyZXMgPSAoRFJJVkVSX01PREVTRVQgfAo+ICsJCQkgICAgRFJJVkVSX0FU T01JQyB8Cj4gKwkJCSAgICBEUklWRVJfR0VNIHwKPiArCQkJICAgIERSSVZFUl9QUklNRSksCj4g KwkucHJlY2xvc2UgPSB2YzRfZHJtX3ByZWNsb3NlLAo+ICsKPiArCS5lbmFibGVfdmJsYW5rID0g dmM0X2VuYWJsZV92YmxhbmssCj4gKwkuZGlzYWJsZV92YmxhbmsgPSB2YzRfZGlzYWJsZV92Ymxh bmssCj4gKwkuZ2V0X3ZibGFua19jb3VudGVyID0gZHJtX3ZibGFua19jb3VudCwKPiArCj4gKyNp ZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKPiArCS5kZWJ1Z2ZzX2luaXQgPSB2YzRfZGVidWdm c19pbml0LAo+ICsJLmRlYnVnZnNfY2xlYW51cCA9IHZjNF9kZWJ1Z2ZzX2NsZWFudXAsCj4gKyNl bmRpZgo+ICsKPiArCS5nZW1fZnJlZV9vYmplY3QgPSBkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCwK PiArCS5nZW1fdm1fb3BzID0gJmRybV9nZW1fY21hX3ZtX29wcywKPiArCj4gKwkucHJpbWVfaGFu ZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCj4gKwkucHJpbWVfZmRfdG9f aGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCj4gKwkuZ2VtX3ByaW1lX2ltcG9y dCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAo+ICsJLmdlbV9wcmltZV9leHBvcnQgPSBkcm1fZ2Vt X3ByaW1lX2V4cG9ydCwKPiArCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlCT0gZHJtX2dlbV9jbWFf cHJpbWVfZ2V0X3NnX3RhYmxlLAo+ICsJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBkcm1f Z2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCj4gKwkuZ2VtX3ByaW1lX3ZtYXAgPSBkcm1f Z2VtX2NtYV9wcmltZV92bWFwLAo+ICsJLmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2NtYV9w cmltZV92dW5tYXAsCj4gKwkuZ2VtX3ByaW1lX21tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFw LAo+ICsKPiArCS5kdW1iX2NyZWF0ZSA9IHZjNF9kdW1iX2NyZWF0ZSwKPiArCS5kdW1iX21hcF9v ZmZzZXQgPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZzZXQsCj4gKwkuZHVtYl9kZXN0cm95ID0g ZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCj4gKwo+ICsJLmlvY3RscyA9IHZjNF9kcm1faW9jdGxzLAo+ ICsJLm51bV9pb2N0bHMgPSBBUlJBWV9TSVpFKHZjNF9kcm1faW9jdGxzKSwKPiArCS5mb3BzID0g JnZjNF9kcm1fZm9wcywKPiArCj4gKwkubmFtZSA9IERSSVZFUl9OQU1FLAo+ICsJLmRlc2MgPSBE UklWRVJfREVTQywKPiArCS5kYXRlID0gRFJJVkVSX0RBVEUsCj4gKwkubWFqb3IgPSBEUklWRVJf TUFKT1IsCj4gKwkubWlub3IgPSBEUklWRVJfTUlOT1IsCj4gKwkucGF0Y2hsZXZlbCA9IERSSVZF Ul9QQVRDSExFVkVMLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB2YzRfZHJtX2JpbmQoc3RydWN0 IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9f cGxhdGZvcm1fZGV2aWNlKGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOwo+ICsJc3Ry dWN0IHZjNF9kZXYgKnZjNDsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWRldi0+Y29oZXJlbnRf ZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwo+ICsKPiArCXZjNCA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqdmM0KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXZjNCkKPiArCQlyZXR1cm4g LUVOT01FTTsKPiArCj4gKwlkcm0gPSBkcm1fZGV2X2FsbG9jKCZ2YzRfZHJtX2RyaXZlciwgZGV2 KTsKPiArCWlmICghZHJtKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJcGxhdGZvcm1fc2V0X2Ry dmRhdGEocGRldiwgZHJtKTsKPiArCXZjNC0+ZGV2ID0gZHJtOwo+ICsJZHJtLT5kZXZfcHJpdmF0 ZSA9IHZjNDsKPiArCj4gKwlkcm1fZGV2X3NldF91bmlxdWUoZHJtLCBkZXZfbmFtZShkZXYpKTsK PiArCj4gKwlkcm1fbW9kZV9jb25maWdfaW5pdChkcm0pOwo+ICsJaWYgKHJldCkKPiArCQlnb3Rv IHVucmVmOwo+ICsKPiArCXJldCA9IGNvbXBvbmVudF9iaW5kX2FsbChkZXYsIGRybSk7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gdW5yZWY7Cj4gKwo+ICsJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihk cm0sIDApOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290byB1bmJpbmRfYWxsOwo+ICsKPiArCXZj NF9rbXNfbG9hZChkcm0pOwo+ICsKPiArCXJldHVybiAwOwo+ICt1bmJpbmRfYWxsOgo+ICsJY29t cG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0pOwo+ICt1bnJlZjoKPiArCWRybV9kZXZfdW5yZWYo ZHJtKTsKPiArCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHZjNF9kcm1fdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwo+ICsJc3Ry dWN0IGRybV9kZXZpY2UgKmRybSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsKPiAr CWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4gKwo+ICsJZHJtX3B1dF9kZXYoZHJtKTsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyB2YzRf ZHJtX29wcyA9IHsKPiArCS5iaW5kID0gdmM0X2RybV9iaW5kLAo+ICsJLnVuYmluZCA9IHZjNF9k cm1fdW5iaW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBjb21wYXJlX29mKHN0cnVjdCBkZXZp Y2UgKmRldiwgdm9pZCAqZGF0YSkKPiArewo+ICsJcmV0dXJuIGRldi0+b2Zfbm9kZSA9PSBkYXRh Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkZF9jb21wb25lbnRzKHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqKm1hdGNocHRyLAo+ICsJCQkgIGNvbnN0IGNoYXIg Km5hbWUpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7Cj4g Kwl1bnNpZ25lZCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IDsgaSsrKSB7Cj4gKwkJc3RydWN0IGRl dmljZV9ub2RlICpub2RlOwo+ICsKPiArCQlub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgbmFt ZSwgaSk7Cj4gKwkJaWYgKCFub2RlKQo+ICsJCQlicmVhazsKPiArCj4gKwkJY29tcG9uZW50X21h dGNoX2FkZChkZXYsIG1hdGNocHRyLCBjb21wYXJlX29mLCBub2RlKTsKPiArCX0KPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2YzRfcGxhdGZvcm1fZHJtX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBjb21wb25lbnRfbWF0 Y2ggKm1hdGNoID0gTlVMTDsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4g Kwo+ICsJYWRkX2NvbXBvbmVudHMoZGV2LCAmbWF0Y2gsICJjcnRjcyIpOwo+ICsJYWRkX2NvbXBv bmVudHMoZGV2LCAmbWF0Y2gsICJlbmNvZGVycyIpOwo+ICsJYWRkX2NvbXBvbmVudHMoZGV2LCAm bWF0Y2gsICJodnNzIik7Cj4gKwo+ICsJcmV0dXJuIGNvbXBvbmVudF9tYXN0ZXJfYWRkX3dpdGhf bWF0Y2goZGV2LCAmdmM0X2RybV9vcHMsIG1hdGNoKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2 YzRfcGxhdGZvcm1fZHJtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7 Cj4gKwljb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmdmM0X2RybV9vcHMpOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCB2YzRfb2ZfbWF0Y2hbXSA9IHsKPiArCXsgLmNvbXBhdGlibGUgPSAiYnJjbSx2YzQiLCB9LAo+ ICsJe30sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHZjNF9vZl9tYXRjaCk7Cj4g Kwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfcGxhdGZvcm1fZHJpdmVyID0g ewo+ICsJLnByb2JlCQk9IHZjNF9wbGF0Zm9ybV9kcm1fcHJvYmUsCj4gKwkucmVtb3ZlCQk9IHZj NF9wbGF0Zm9ybV9kcm1fcmVtb3ZlLAo+ICsJLmRyaXZlcgkJPSB7Cj4gKwkJLm5hbWUJPSAidmM0 LWRybSIsCj4gKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0g dmM0X29mX21hdGNoLAo+ICsJfSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyICpjb21wb25lbnRfZHJpdmVyc1tdID0gewo+ICsJJnZjNF9oZG1pX2RyaXZlciwKPiAr CSZ2YzRfY3J0Y19kcml2ZXIsCj4gKwkmdmM0X2h2c19kcml2ZXIsCj4gK307Cj4gKwo+ICtzdGF0 aWMgaW50IF9faW5pdCB2YzRfZHJtX3JlZ2lzdGVyKHZvaWQpCj4gK3sKPiArCWludCBpOwo+ICsK PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbXBvbmVudF9kcml2ZXJzKTsgaSsrKSB7 Cj4gKwkJaW50IHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcihjb21wb25lbnRfZHJpdmVy c1tpXSk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQl3aGlsZSAoLS1pID49IDApCj4gKwkJCQlwbGF0 Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcihjb21wb25lbnRfZHJpdmVyc1tpXSk7Cj4gKwkJCXJldHVy biByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigm dmM0X3BsYXRmb3JtX2RyaXZlcik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCB2YzRf ZHJtX3VucmVnaXN0ZXIodm9pZCkKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gQVJS QVlfU0laRShjb21wb25lbnRfZHJpdmVycykgLSAxOyBpID49IDA7IGktLSkKPiArCQlwbGF0Zm9y bV9kcml2ZXJfdW5yZWdpc3Rlcihjb21wb25lbnRfZHJpdmVyc1tpXSk7Cj4gKwo+ICsJcGxhdGZv cm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZjNF9wbGF0Zm9ybV9kcml2ZXIpOwo+ICt9Cj4gKwo+ICtt b2R1bGVfaW5pdCh2YzRfZHJtX3JlZ2lzdGVyKTsKPiArbW9kdWxlX2V4aXQodmM0X2RybV91bnJl Z2lzdGVyKTsKPiArCj4gK01PRFVMRV9BTElBUygicGxhdGZvcm06dmM0LWRybSIpOwo+ICtNT0RV TEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIFZDNCBEUk0gRHJpdmVyIik7Cj4gK01PRFVMRV9BVVRI T1IoIkVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Iik7Cj4gK01PRFVMRV9MSUNFTlNFKCJH UEwgdjIiKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmggYi9k cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMC4uMjgyY2UwYgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9kcnYuaAo+IEBAIC0wLDAgKzEsMTIwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdo dCAoQykgMjAxNSBCcm9hZGNvbQo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICov Cj4gKwo+ICsjaW5jbHVkZSAiZHJtUC5oIgo+ICsjaW5jbHVkZSAiZHJtX2dlbV9jbWFfaGVscGVy LmgiCj4gKwo+ICtzdHJ1Y3QgdmM0X2RldiB7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Owo+ ICsKPiArCXN0cnVjdCB2YzRfaGRtaSAqaGRtaTsKPiArCXN0cnVjdCB2YzRfaHZzICpodnM7Cj4g KwlzdHJ1Y3QgdmM0X2NydGMgKmNydGNbM107Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0 cnVjdCB2YzRfZGV2ICoKPiArdG9fdmM0X2RldihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7 Cj4gKwlyZXR1cm4gKHN0cnVjdCB2YzRfZGV2ICopZGV2LT5kZXZfcHJpdmF0ZTsKPiArfQo+ICsK PiArc3RydWN0IHZjNF9ibyB7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0IGJhc2U7Cj4g K307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfYm8gKgo+ICt0b192YzRfYm8oc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpibykKPiArewo+ICsJcmV0dXJuIChzdHJ1Y3QgdmM0X2JvICop Ym87Cj4gK30KPiArCj4gK3N0cnVjdCB2YzRfaHZzIHsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXY7Cj4gKwl2b2lkIF9faW9tZW0gKnJlZ3M7Cj4gKwl2b2lkIF9faW9tZW0gKmRsaXN0 Owo+ICt9Owo+ICsKPiArc3RydWN0IHZjNF9jcnRjIHsKPiArCXN0cnVjdCBkcm1fY3J0YyBiYXNl Owo+ICsJdm9pZCBfX2lvbWVtICpyZWdzOwo+ICsKPiArCS8qIFdoaWNoIEhWUyBjaGFubmVsIHdl J3JlIHVzaW5nIGZvciBvdXIgQ1JUQy4gKi8KPiArCWludCBjaGFubmVsOwo+ICsKPiArCS8qIFBv aW50ZXIgdG8gdGhlIGFjdHVhbCBoYXJkd2FyZSBkaXNwbGF5IGxpc3QgbWVtb3J5IGZvciB0aGUK PiArCSAqIGNydGMuCj4gKwkgKi8KPiArCXUzMiBfX2lvbWVtICpkbGlzdDsKPiArCj4gKwl1MzIg ZGxpc3Rfc2l6ZTsgLyogaW4gZHdvcmRzICovCj4gKwo+ICsJc3RydWN0IGRybV9wZW5kaW5nX3Zi bGFua19ldmVudCAqZXZlbnQ7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRf Y3J0YyAqCj4gK3RvX3ZjNF9jcnRjKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJcmV0 dXJuIChzdHJ1Y3QgdmM0X2NydGMgKiljcnRjOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgdmM0X3BsYW5l IHsKPiArCXN0cnVjdCBkcm1fcGxhbmUgYmFzZTsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUg c3RydWN0IHZjNF9wbGFuZSAqCj4gK3RvX3ZjNF9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSkKPiArewo+ICsJcmV0dXJuIChzdHJ1Y3QgdmM0X3BsYW5lICopcGxhbmU7Cj4gK30KPiArCj4g KyNkZWZpbmUgSFZTX1JFQUQob2Zmc2V0KSByZWFkbCh2YzQtPmh2cy0+cmVncyArIG9mZnNldCkK PiArI2RlZmluZSBIVlNfV1JJVEUob2Zmc2V0LCB2YWwpIHdyaXRlbCh2YWwsIHZjNC0+aHZzLT5y ZWdzICsgb2Zmc2V0KQo+ICsKPiArLyogdmM0X2JvLmMgKi8KPiArdm9pZCB2YzRfZnJlZV9vYmpl Y3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKTsKPiArc3RydWN0IHZjNF9ibyAqdmM0 X2JvX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSk7Cj4gK2ludCB2 YzRfZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4gKwkJICAgIHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAq YXJncyk7Cj4gK3N0cnVjdCBkbWFfYnVmICp2YzRfcHJpbWVfZXhwb3J0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4gKwkJCQkgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBmbGFncyk7 Cj4gKwo+ICsvKiB2YzRfY3J0Yy5jICovCj4gK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IHZjNF9jcnRjX2RyaXZlcjsKPiAraW50IHZjNF9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIGludCBjcnRjX2lkKTsKPiArdm9pZCB2YzRfZGlzYWJsZV92Ymxhbmsoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGNfaWQpOwo+ICt2b2lkIHZjNF9jYW5jZWxfcGFnZV9m bGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9maWxlICpmaWxlKTsKPiAraW50 IHZjNF9jcnRjX2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZyk7Cj4g Kwo+ICsvKiB2YzRfZGVidWdmcy5jICovCj4gK2ludCB2YzRfZGVidWdmc19pbml0KHN0cnVjdCBk cm1fbWlub3IgKm1pbm9yKTsKPiArdm9pZCB2YzRfZGVidWdmc19jbGVhbnVwKHN0cnVjdCBkcm1f bWlub3IgKm1pbm9yKTsKPiArCj4gKy8qIHZjNF9kcnYuYyAqLwo+ICt2b2lkIF9faW9tZW0gKnZj NF9pb3JlbWFwX3JlZ3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgaW5kZXgpOwo+ ICsKPiArLyogdmM0X2hkbWkuYyAqLwo+ICtleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2 YzRfaGRtaV9kcml2ZXI7Cj4gK3N0cnVjdCBkcm1fZW5jb2RlciAqdmM0X2hkbWlfZW5jb2Rlcl9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICtzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqdmM0 X2hkbWlfY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCQkgICAg ICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwo+ICtpbnQgdmM0X2hkbWlfZGVidWdmc19y ZWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKTsKPiArCj4gKy8qIHZjNF9odnMu YyAqLwo+ICtleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfaHZzX2RyaXZlcjsKPiAr dm9pZCB2YzRfaHZzX2R1bXBfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gK2ludCB2 YzRfaHZzX2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCk7Cj4g Kwo+ICsvKiB2YzRfa21zLmMgKi8KPiAraW50IHZjNF9rbXNfbG9hZChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKPiArCj4gKy8qIHZjNF9wbGFuZS5jICovCj4gK3N0cnVjdCBkcm1fcGxhbmUgKnZj NF9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkgZW51bSBkcm1fcGxh bmVfdHlwZSB0eXBlKTsKPiArdTMyIHZjNF9wbGFuZV93cml0ZV9kbGlzdChzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwgdTMyIF9faW9tZW0gKmRsaXN0KTsKPiArdTMyIHZjNF9wbGFuZV9kbGlzdF9z aXplKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3ZjNC92YzRfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaGRtaS5j Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5jZDMzMDFiCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2hkbWkuYwo+IEBAIC0wLDAg KzEsNjMzIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNCBUaGUgTGludXggRm91bmRh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICogQ29weXJpZ2h0IChDKSAyMDEzIFJlZCBI YXQKPiArICogQXV0aG9yOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+Cj4gKyAqCj4g KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5IGl0Cj4gKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQo+ICsgKiB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKPiAr ICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVS Q0hBTlRBQklMSVRZIG9yCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKPiArICogbW9yZSBkZXRhaWxz Lgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCj4gKyAqIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPiArICovCj4gKwo+ICsj aW5jbHVkZSAiZHJtX2F0b21pY19oZWxwZXIuaCIKPiArI2luY2x1ZGUgImRybV9jcnRjX2hlbHBl ci5oIgo+ICsjaW5jbHVkZSAiZHJtX2VkaWQuaCIKPiArI2luY2x1ZGUgImxpbnV4L2Nsay5oIgo+ ICsjaW5jbHVkZSAibGludXgvY29tcG9uZW50LmgiCj4gKyNpbmNsdWRlICJsaW51eC9vZl9ncGlv LmgiCj4gKyNpbmNsdWRlICJsaW51eC9vZl9wbGF0Zm9ybS5oIgo+ICsjaW5jbHVkZSAidmM0X2Ry di5oIgo+ICsjaW5jbHVkZSAidmM0X3JlZ3MuaCIKPiArCj4gKy8qIEdlbmVyYWwgSERNSSBoYXJk d2FyZSBzdGF0ZS4gKi8KPiArc3RydWN0IHZjNF9oZG1pIHsKPiArCXN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXY7Cj4gKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRkYzsKPiArCXZvaWQgX19pb21l bSAqaGRtaWNvcmVfcmVnczsKPiArCXZvaWQgX19pb21lbSAqaGRfcmVnczsKPiArCWludCBocGRf Z3BpbzsKPiArCj4gKwkvKiBQcm9iZWQgdmlkZW8gbW9kZSBhdCBib290IHRpbWUsIHVzZWQgdG8g ZmlsdGVyIGRpc3BsYXkKPiArCSAqIG1vZGVzIHRvIG9ubHkgYWxsb3cgZXF1aXZhbGVudCBvbmVz IChzaW5jZSB3ZSBjYW4ndCBzZXQgdGhlCj4gKwkgKiBwaXhlbCBjbG9jayB5ZXQpLgo+ICsJICov Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBib290X21vZGU7Cj4gK307Cj4gKyNkZWZpbmUg SERNSV9SRUFEKG9mZnNldCkgcmVhZGwodmM0LT5oZG1pLT5oZG1pY29yZV9yZWdzICsgb2Zmc2V0 KQo+ICsjZGVmaW5lIEhETUlfV1JJVEUob2Zmc2V0LCB2YWwpIHdyaXRlbCh2YWwsIHZjNC0+aGRt aS0+aGRtaWNvcmVfcmVncyArIG9mZnNldCkKPiArI2RlZmluZSBIRF9SRUFEKG9mZnNldCkgcmVh ZGwodmM0LT5oZG1pLT5oZF9yZWdzICsgb2Zmc2V0KQo+ICsjZGVmaW5lIEhEX1dSSVRFKG9mZnNl dCwgdmFsKSB3cml0ZWwodmFsLCB2YzQtPmhkbWktPmhkX3JlZ3MgKyBvZmZzZXQpCj4gKwo+ICsv KiBWQzQgSERNSSBlbmNvZGVyIEtNUyBzdHJ1Y3QgKi8KPiArc3RydWN0IHZjNF9oZG1pX2VuY29k ZXIgewo+ICsJc3RydWN0IGRybV9lbmNvZGVyIGJhc2U7Cj4gKwlib29sIGhkbWlfbW9uaXRvcjsK PiArfTsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X2hkbWlfZW5jb2RlciAqCj4gK3RvX3Zj NF9oZG1pX2VuY29kZXIoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+ICt7Cj4gKwlyZXR1 cm4gY29udGFpbmVyX29mKGVuY29kZXIsIHN0cnVjdCB2YzRfaGRtaV9lbmNvZGVyLCBiYXNlKTsK PiArfQo+ICsKPiArLyogVkM0IEhETUkgY29ubmVjdG9yIEtNUyBzdHJ1Y3QgKi8KPiArc3RydWN0 IHZjNF9oZG1pX2Nvbm5lY3RvciB7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBiYXNlOwo+ICsK PiArCS8qIFNpbmNlIHRoZSBjb25uZWN0b3IgaXMgYXR0YWNoZWQgdG8ganVzdCB0aGUgb25lIGVu Y29kZXIsCj4gKwkgKiB0aGlzIGlzIHRoZSByZWZlcmVuY2UgdG8gaXQgc28gd2UgY2FuIGRvIHRo ZSBiZXN0X2VuY29kZXIoKQo+ICsJICogaG9vay4KPiArCSAqLwo+ICsJc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyOwo+ICt9Owo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfaGRtaV9jb25u ZWN0b3IgKgo+ICt0b192YzRfaGRtaV9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjb25uZWN0b3IsIHN0cnVjdCB2 YzRfaGRtaV9jb25uZWN0b3IsIGJhc2UpOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIEhETUlfUkVHKHJl ZykgeyByZWcsICNyZWcgfQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHsKPiArCXUzMiByZWc7Cj4g Kwljb25zdCBjaGFyICpuYW1lOwo+ICt9IGhkbWlfcmVnc1tdID0gewo+ICsJSERNSV9SRUcoVkM0 X0hETUlfQ09SRV9SRVYpLAo+ICsJSERNSV9SRUcoVkM0X0hETUlfU1dfUkVTRVRfQ09OVFJPTCks Cj4gKwlIRE1JX1JFRyhWQzRfSERNSV9IT1RQTFVHX0lOVCksCj4gKwlIRE1JX1JFRyhWQzRfSERN SV9IT1RQTFVHKSwKPiArCUhETUlfUkVHKFZDNF9IRE1JX0hPUlpBKSwKPiArCUhETUlfUkVHKFZD NF9IRE1JX0hPUlpCKSwKPiArCUhETUlfUkVHKFZDNF9IRE1JX0ZJRk9fQ1RMKSwKPiArCUhETUlf UkVHKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MKSwKPiArCUhETUlfUkVHKFZDNF9IRE1JX1ZF UlRBMCksCj4gKwlIRE1JX1JFRyhWQzRfSERNSV9WRVJUQTEpLAo+ICsJSERNSV9SRUcoVkM0X0hE TUlfVkVSVEIwKSwKPiArCUhETUlfUkVHKFZDNF9IRE1JX1ZFUlRCMSksCj4gKwlIRE1JX1JFRyhW QzRfSERNSV9UWF9QSFlfUkVTRVRfQ1RMKSwKPiArfTsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB7 Cj4gKwl1MzIgcmVnOwo+ICsJY29uc3QgY2hhciAqbmFtZTsKPiArfSBoZF9yZWdzW10gPSB7Cj4g KwlIRE1JX1JFRyhWQzRfSERfTV9DVEwpLAo+ICsJSERNSV9SRUcoVkM0X0hEX01BSV9DVEwpLAo+ ICsJSERNSV9SRUcoVkM0X0hEX1ZJRF9DVEwpLAo+ICsJSERNSV9SRUcoVkM0X0hEX0NTQ19DVEwp LAo+ICsJSERNSV9SRUcoVkM0X0hEX0ZSQU1FX0NPVU5UKSwKPiArfTsKPiArCj4gKyNpZmRlZiBD T05GSUdfREVCVUdfRlMKPiAraW50IHZjNF9oZG1pX2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2VxX2Zp bGUgKm0sIHZvaWQgKnVudXNlZCkKPiArewo+ICsJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUg PSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKPiArCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2Owo+ICsJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRv X3ZjNF9kZXYoZGV2KTsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGhkbWlfcmVncyk7IGkrKykgewo+ICsJCXNlcV9wcmludGYobSwgIiVzICgweCUwNHgpOiAw eCUwOHhcbiIsCj4gKwkJCSAgIGhkbWlfcmVnc1tpXS5uYW1lLCBoZG1pX3JlZ3NbaV0ucmVnLAo+ ICsJCQkgICBIRE1JX1JFQUQoaGRtaV9yZWdzW2ldLnJlZykpOwo+ICsJfQo+ICsKPiArCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkX3JlZ3MpOyBpKyspIHsKPiArCQlzZXFfcHJpbnRmKG0s ICIlcyAoMHglMDR4KTogMHglMDh4XG4iLAo+ICsJCQkgICBoZF9yZWdzW2ldLm5hbWUsIGhkX3Jl Z3NbaV0ucmVnLAo+ICsJCQkgICBIRF9SRUFEKGhkX3JlZ3NbaV0ucmVnKSk7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLwo+ICsKPiAr c3RhdGljIHZvaWQgdmM0X2hkbWlfZHVtcF9yZWdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4g K3sKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7Cj4gKwlpbnQgaTsK PiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoZG1pX3JlZ3MpOyBpKyspIHsKPiAr CQlEUk1fSU5GTygiMHglMDR4ICglcyk6IDB4JTA4eFxuIiwKPiArCQkJIGhkbWlfcmVnc1tpXS5y ZWcsIGhkbWlfcmVnc1tpXS5uYW1lLAo+ICsJCQkgSERNSV9SRUFEKGhkbWlfcmVnc1tpXS5yZWcp KTsKPiArCX0KPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkX3JlZ3MpOyBpKyspIHsK PiArCQlEUk1fSU5GTygiMHglMDR4ICglcyk6IDB4JTA4eFxuIiwKPiArCQkJIGhkX3JlZ3NbaV0u cmVnLCBoZF9yZWdzW2ldLm5hbWUsCj4gKwkJCSBIRF9SRUFEKGhkX3JlZ3NbaV0ucmVnKSk7Cj4g Kwl9Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCj4gK3ZjNF9o ZG1pX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9v bCBmb3JjZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2 Owo+ICsJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKPiArCj4gKwlpZiAo dmM0LT5oZG1pLT5ocGRfZ3Bpbykgewo+ICsJCWlmIChncGlvX2dldF92YWx1ZSh2YzQtPmhkbWkt PmhwZF9ncGlvKSkKPiArCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwo+ICsJ CWVsc2UKPiArCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ICsJfQo+ ICsKPiArCWlmIChIRE1JX1JFQUQoVkM0X0hETUlfSE9UUExVRykgJiBWQzRfSERNSV9IT1RQTFVH X0NPTk5FQ1RFRCkKPiArCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cj4gKwll bHNlCj4gKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCB2YzRfaGRtaV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVj dG9yKTsKPiArCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHZjNF9oZG1pX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcikKPiArewo+ICsJc3RydWN0IHZjNF9oZG1pX2Nvbm5lY3RvciAqdmM0X2Nv bm5lY3RvciA9Cj4gKwkJdG9fdmM0X2hkbWlfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gKwlzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSB2YzRfY29ubmVjdG9yLT5lbmNvZGVyOwo+ICsJc3Ry dWN0IHZjNF9oZG1pX2VuY29kZXIgKnZjNF9lbmNvZGVyID0gdG9fdmM0X2hkbWlfZW5jb2Rlcihl bmNvZGVyKTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKPiAr CXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7Cj4gKwlpbnQgcmV0ID0gMDsK PiArCXN0cnVjdCBlZGlkICplZGlkOwo+ICsKPiArCWVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVj dG9yLCB2YzQtPmhkbWktPmRkYyk7Cj4gKwlpZiAoIWVkaWQpCj4gKwkJcmV0dXJuIC1FTk9ERVY7 Cj4gKwo+ICsJdmM0X2VuY29kZXItPmhkbWlfbW9uaXRvciA9IGRybV9kZXRlY3RfaGRtaV9tb25p dG9yKGVkaWQpOwo+ICsJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNv bm5lY3RvciwgZWRpZCk7Cj4gKwlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBl ZGlkKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKiBTaW5jZSB3ZSBjYW4ndCBz ZXQgdGhlIHBpeGVsIGNsb2NrIHlldCwgZmlsdGVyIG91dCBhbGwgdGhlIEVESUQKPiArICogbW9k ZXMgdGhhdCBkb24ndCBtYXRjaCB3aGF0IHdhcyBzZXQgdXAgYnkgdGhlIGZpcm13YXJlLgo+ICsg Ki8KPiAraW50IHZjNF9oZG1pX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKPiArCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gK3sKPiArCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKPiArCXN0cnVjdCB2YzRfZGV2ICp2 YzQgPSB0b192YzRfZGV2KGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYm9vdF9t b2RlID0gJnZjNC0+aGRtaS0+Ym9vdF9tb2RlOwo+ICsKPiArCWlmIChtb2RlLT5oZGlzcGxheSAh PSBib290X21vZGUtPmhkaXNwbGF5IHx8Cj4gKwkgICAgbW9kZS0+aHN5bmNfc3RhcnQgIT0gYm9v dF9tb2RlLT5oc3luY19zdGFydCB8fAo+ICsJICAgIG1vZGUtPmhzeW5jX2VuZCAhPSBib290X21v ZGUtPmhzeW5jX2VuZCB8fAo+ICsJICAgIG1vZGUtPmh0b3RhbCAhPSBib290X21vZGUtPmh0b3Rh bCkgewo+ICsJCXJldHVybiBNT0RFX0VSUk9SOwo+ICsJfQo+ICsKPiArCXJldHVybiBNT0RFX09L Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICoKPiArdmM0X2hkbWlfY29u bmVjdG9yX2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7 Cj4gKwlzdHJ1Y3QgdmM0X2hkbWlfY29ubmVjdG9yICpoZG1pX2Nvbm5lY3RvciA9Cj4gKwkJdG9f dmM0X2hkbWlfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gKwlyZXR1cm4gaGRtaV9jb25uZWN0b3It PmVuY29kZXI7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9m dW5jcyB2YzRfaGRtaV9jb25uZWN0b3JfZnVuY3MgPSB7Cj4gKwkuZHBtcyA9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAo+ICsJLmRldGVjdCA9IHZjNF9oZG1pX2Nvbm5lY3Rvcl9k ZXRlY3QsCj4gKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rv cl9tb2RlcywKPiArCS5kZXN0cm95ID0gdmM0X2hkbWlfY29ubmVjdG9yX2Rlc3Ryb3ksCj4gKwku cmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCj4gKwkuYXRvbWljX2R1 cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3Rh dGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0 b3JfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9oZWxwZXJfZnVuY3MgdmM0X2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsK PiArCS5nZXRfbW9kZXMgPSB2YzRfaGRtaV9jb25uZWN0b3JfZ2V0X21vZGVzLAo+ICsJLm1vZGVf dmFsaWQgPSB2YzRfaGRtaV9tb2RlX3ZhbGlkLAo+ICsJLmJlc3RfZW5jb2RlciA9IHZjNF9oZG1p X2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqdmM0X2hkbWlfY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJ CQkgICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gK3sKPiArCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IgPSBOVUxMOwo+ICsJc3RydWN0IHZjNF9oZG1pX2Nvbm5lY3Rv ciAqaGRtaV9jb25uZWN0b3I7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwloZG1pX2Nvbm5lY3Rv ciA9IGRldm1fa3phbGxvYyhkZXYtPmRldiwgc2l6ZW9mKCpoZG1pX2Nvbm5lY3RvciksCj4gKwkJ CQkgICAgICBHRlBfS0VSTkVMKTsKPiArCWlmICghaGRtaV9jb25uZWN0b3IpIHsKPiArCQlyZXQg PSAtRU5PTUVNOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiArCWNvbm5lY3RvciA9ICZoZG1pX2Nv bm5lY3Rvci0+YmFzZTsKPiArCj4gKwloZG1pX2Nvbm5lY3Rvci0+ZW5jb2RlciA9IGVuY29kZXI7 Cj4gKwo+ICsJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9yLCAmdmM0X2hkbWlfY29u bmVjdG9yX2Z1bmNzLAo+ICsJCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpOwo+ICsJZHJt X2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJnZjNF9oZG1pX2Nvbm5lY3Rvcl9oZWxw ZXJfZnVuY3MpOwo+ICsKPiArCWNvbm5lY3Rvci0+cG9sbGVkID0gKERSTV9DT05ORUNUT1JfUE9M TF9DT05ORUNUIHwKPiArCQkJICAgICBEUk1fQ09OTkVDVE9SX1BPTExfRElTQ09OTkVDVCk7Cj4g Kwo+ICsJY29ubmVjdG9yLT5pbnRlcmxhY2VfYWxsb3dlZCA9IDA7Cj4gKwljb25uZWN0b3ItPmRv dWJsZXNjYW5fYWxsb3dlZCA9IDA7Cj4gKwo+ICsJZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcihjb25u ZWN0b3IpOwo+ICsKPiArCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0 b3IsIGVuY29kZXIpOwo+ICsKPiArCXJldHVybiBjb25uZWN0b3I7Cj4gKwo+ICsgZmFpbDoKPiAr CWlmIChjb25uZWN0b3IpCj4gKwkJdmM0X2hkbWlfY29ubmVjdG9yX2Rlc3Ryb3koY29ubmVjdG9y KTsKPiArCj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2 YzRfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiArewo+ICsJ ZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB2YzRfaGRtaV9lbmNvZGVyX2Z1bmNzID0gewo+ICsJLmRl c3Ryb3kgPSB2YzRfZW5jb2Rlcl9kZXN0cm95LAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgdmM0 X2hkbWlfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCj4gKwkJ CQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqdW5hZGp1c3RlZF9tb2RlLAo+ICsJCQkJ ICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gK3sKPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7Cj4gKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9f dmM0X2RldihkZXYpOwo+ICsJYm9vbCBkZWJ1Z19kdW1wX3JlZ3MgPSBmYWxzZTsKPiArCWJvb2wg aHN5bmNfcG9zID0gIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKTsKPiArCWJv b2wgdnN5bmNfcG9zID0gIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKTsKPiAr CXUzMiB2YWN0aXZlID0gKG1vZGUtPnZkaXNwbGF5ID4+Cj4gKwkJICAgICAgICgobW9kZS0+Zmxh Z3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkgPyAxIDogMCkpOwo+ICsJdTMyIHZlcnRhID0g KFZDNF9TRVRfRklFTEQobW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQsCj4gKwkJ CQkgICBWQzRfSERNSV9WRVJUQV9WU1ApIHwKPiArCQkgICAgIFZDNF9TRVRfRklFTEQobW9kZS0+ dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheSwKPiArCQkJCSAgIFZDNF9IRE1JX1ZFUlRBX1ZG UCkgfAo+ICsJCSAgICAgVkM0X1NFVF9GSUVMRCh2YWN0aXZlLCBWQzRfSERNSV9WRVJUQV9WQUwp KTsKPiArCXUzMiB2ZXJ0YiA9IChWQzRfU0VUX0ZJRUxEKDAsIFZDNF9IRE1JX1ZFUlRCX1ZTUE8p IHwKPiArCQkgICAgIFZDNF9TRVRfRklFTEQobW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfZW5k LAo+ICsJCQkJICAgVkM0X0hETUlfVkVSVEJfVkJQKSk7Cj4gKwo+ICsJaWYgKGRlYnVnX2R1bXBf cmVncykgewo+ICsJCURSTV9JTkZPKCJIRE1JIHJlZ3MgYmVmb3JlOlxuIik7Cj4gKwkJdmM0X2hk bWlfZHVtcF9yZWdzKGRldik7Cj4gKwl9Cj4gKwo+ICsJSERfV1JJVEUoVkM0X0hEX1ZJRF9DVEws IDApOwo+ICsKPiArCS8qIFhYWDogVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBzZXQgdGhlIEhETUkg c3RhdGUgbWFjaGluZQo+ICsJICogY2xvY2ssIGlmIHdlIGhhZCBhbiBpbnRlcmZhY2UgZm9yIGl0 Lgo+ICsJICovCj4gKwo+ICsJSERNSV9XUklURShWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTCwK PiArCQkgICBIRE1JX1JFQUQoVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0wpIHwKPiArCQkgICBW QzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9NQU5VQUxfRk9STUFUIHwKPiArCQkgICBWQzRfSERN SV9TQ0hFRFVMRVJfQ09OVFJPTF9JR05PUkVfVlNZTkNfUFJFRElDVFMpOwo+ICsKPiArCUhETUlf V1JJVEUoVkM0X0hETUlfSE9SWkEsCj4gKwkJICAgKHZzeW5jX3BvcyA/IFZDNF9IRE1JX0hPUlpB X1ZQT1MgOiAwKSB8Cj4gKwkJICAgKGhzeW5jX3BvcyA/IFZDNF9IRE1JX0hPUlpBX0hQT1MgOiAw KSB8Cj4gKwkJICAgVkM0X1NFVF9GSUVMRChtb2RlLT5oZGlzcGxheSwgVkM0X0hETUlfSE9SWkFf SEFQKSk7Cj4gKwo+ICsJSERNSV9XUklURShWQzRfSERNSV9IT1JaQiwKPiArCQkgICBWQzRfU0VU X0ZJRUxEKG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZCwKPiArCQkJCSBWQzRfSERNSV9I T1JaQl9IQlApIHwKPiArCQkgICBWQzRfU0VUX0ZJRUxEKG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUt PmhzeW5jX3N0YXJ0LAo+ICsJCQkJIFZDNF9IRE1JX0hPUlpCX0hTUCkgfAo+ICsJCSAgIFZDNF9T RVRfRklFTEQobW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheSwKPiArCQkJCSBWQzRf SERNSV9IT1JaQl9IRlApKTsKPiArCj4gKwlIRE1JX1dSSVRFKFZDNF9IRE1JX1ZFUlRBMCwgdmVy dGEpOwo+ICsJSERNSV9XUklURShWQzRfSERNSV9WRVJUQTEsIHZlcnRhKTsKPiArCj4gKwlIRE1J X1dSSVRFKFZDNF9IRE1JX1ZFUlRCMCwgdmVydGIpOwo+ICsJSERNSV9XUklURShWQzRfSERNSV9W RVJUQjEsIHZlcnRiKTsKPiArCj4gKwlIRF9XUklURShWQzRfSERfVklEX0NUTCwKPiArCQkgKHZz eW5jX3BvcyA/IDAgOiBWQzRfSERfVklEX0NUTF9WU1lOQ19MT1cpIHwKPiArCQkgKGhzeW5jX3Bv cyA/IDAgOiBWQzRfSERfVklEX0NUTF9IU1lOQ19MT1cpKTsKPiArCj4gKwkvKiBUaGUgUkdCIG9y ZGVyIGFwcGxpZXMgZXZlbiB3aGVuIENTQyBpcyBkaXNhYmxlZC4gKi8KPiArCUhEX1dSSVRFKFZD NF9IRF9DU0NfQ1RMLCBWQzRfU0VUX0ZJRUxEKFZDNF9IRF9DU0NfQ1RMX09SREVSX0JHUiwKPiAr CQkJCQkgICAgICAgVkM0X0hEX0NTQ19DVExfT1JERVIpKTsKPiArCj4gKwlIRE1JX1dSSVRFKFZD NF9IRE1JX0ZJRk9fQ1RMLCBWQzRfSERNSV9GSUZPX0NUTF9NQVNURVJfU0xBVkVfTik7Cj4gKwo+ ICsJaWYgKGRlYnVnX2R1bXBfcmVncykgewo+ICsJCURSTV9JTkZPKCJIRE1JIHJlZ3MgYWZ0ZXI6 XG4iKTsKPiArCQl2YzRfaGRtaV9kdW1wX3JlZ3MoZGV2KTsKPiArCX0KPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgdmM0X2hkbWlfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlcikKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKPiAr CXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7Cj4gKwo+ICsJSERNSV9XUklU RShWQzRfSERNSV9UWF9QSFlfUkVTRVRfQ1RMLCAweGYgPDwgMTYpOwo+ICsJSERfV1JJVEUoVkM0 X0hEX1ZJRF9DVEwsCj4gKwkJIEhEX1JFQUQoVkM0X0hEX1ZJRF9DVEwpICYgflZDNF9IRF9WSURf Q1RMX0VOQUJMRSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZjNF9oZG1pX2VuY29kZXJfZW5h YmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiArewo+ICsJc3RydWN0IHZjNF9oZG1p X2VuY29kZXIgKnZjNF9lbmNvZGVyID0gdG9fdmM0X2hkbWlfZW5jb2RlcihlbmNvZGVyKTsKPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7Cj4gKwlzdHJ1Y3QgdmM0X2Rl diAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwo+ICsKPiArCUhETUlfV1JJVEUoVkM0X0hETUlfVFhf UEhZX1JFU0VUX0NUTCwgMCk7Cj4gKwo+ICsJSERfV1JJVEUoVkM0X0hEX1ZJRF9DVEwsCj4gKwkJ IEhEX1JFQUQoVkM0X0hEX1ZJRF9DVEwpIHwKPiArCQkgVkM0X0hEX1ZJRF9DVExfRU5BQkxFIHwK PiArCQkgVkM0X0hEX1ZJRF9DVExfVU5ERVJGTE9XX0VOQUJMRSB8Cj4gKwkJIFZDNF9IRF9WSURf Q1RMX0ZSQU1FX0NPVU5URVJfUkVTRVQpOwo+ICsKPiArCWlmICh2YzRfZW5jb2Rlci0+aGRtaV9t b25pdG9yKSB7Cj4gKwkJSERNSV9XUklURShWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTCwKPiAr CQkJICAgSERNSV9SRUFEKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MKSB8Cj4gKwkJCSAgIFZD NF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MX01PREVfSERNSSk7Cj4gKwo+ICsJCXdoaWxlICghKEhE TUlfUkVBRChWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTCkgJgo+ICsJCQkgVkM0X0hETUlfU0NI RURVTEVSX0NPTlRST0xfSERNSV9BQ1RJVkUpKSB7Cj4gKwkJCWNwdV9yZWxheCgpOwo+ICsJCX0K PiArCX0gZWxzZSB7Cj4gKwkJSERNSV9XUklURShWQzRfSERNSV9SQU1fUEFDS0VUX0NPTkZJRywK PiArCQkJICAgSERNSV9SRUFEKFZDNF9IRE1JX1JBTV9QQUNLRVRfQ09ORklHKSAmCj4gKwkJCSAg IH4oVkM0X0hETUlfUkFNX1BBQ0tFVF9FTkFCTEUpKTsKPiArCQlIRE1JX1dSSVRFKFZDNF9IRE1J X1NDSEVEVUxFUl9DT05UUk9MLAo+ICsJCQkgICBIRE1JX1JFQUQoVkM0X0hETUlfU0NIRURVTEVS X0NPTlRST0wpICYKPiArCQkJICAgflZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MX01PREVfSERN SSk7Cj4gKwo+ICsJCXdoaWxlIChIRE1JX1JFQUQoVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0wp ICYKPiArCQkgICAgICAgVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0xfSERNSV9BQ1RJVkUpIHsK PiArCQkJY3B1X3JlbGF4KCk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmICh2YzRfZW5jb2Rlci0+ aGRtaV9tb25pdG9yKSB7Cj4gKwkJdTMyIGRyaWZ0Owo+ICsKPiArCQlXQVJOX09OKCEoSERNSV9S RUFEKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MKSAmCj4gKwkJCSAgVkM0X0hETUlfU0NIRURV TEVSX0NPTlRST0xfSERNSV9BQ1RJVkUpKTsKPiArCQlIRE1JX1dSSVRFKFZDNF9IRE1JX1NDSEVE VUxFUl9DT05UUk9MLAo+ICsJCQkgICBIRE1JX1JFQUQoVkM0X0hETUlfU0NIRURVTEVSX0NPTlRS T0wpIHwKPiArCQkJICAgVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0xfVkVSVF9BTFdBWVNfS0VF UE9VVCk7Cj4gKwo+ICsJCS8qIFhYWDogU2V0IEhETUlfUkFNX1BBQ0tFVF9DT05GSUcgKDEgPDwg MTYpIGFuZCBzZXQKPiArCQkgKiB1cCB0aGUgaW5mb2ZyYW1lLgo+ICsJCSAqLwo+ICsKPiArCQlk cmlmdCA9IEhETUlfUkVBRChWQzRfSERNSV9GSUZPX0NUTCk7Cj4gKwkJZHJpZnQgJj0gVkM0X0hE TUlfRklGT19WQUxJRF9XUklURV9NQVNLOwo+ICsKPiArCQlIRE1JX1dSSVRFKFZDNF9IRE1JX0ZJ Rk9fQ1RMLAo+ICsJCQkgICBkcmlmdCAmIH5WQzRfSERNSV9GSUZPX0NUTF9SRUNFTlRFUik7Cj4g KwkJSERNSV9XUklURShWQzRfSERNSV9GSUZPX0NUTCwKPiArCQkJICAgZHJpZnQgfCBWQzRfSERN SV9GSUZPX0NUTF9SRUNFTlRFUik7Cj4gKwkJdWRlbGF5KDEwMDApOwo+ICsJCUhETUlfV1JJVEUo VkM0X0hETUlfRklGT19DVEwsCj4gKwkJCSAgIGRyaWZ0ICYgflZDNF9IRE1JX0ZJRk9fQ1RMX1JF Q0VOVEVSKTsKPiArCQlIRE1JX1dSSVRFKFZDNF9IRE1JX0ZJRk9fQ1RMLAo+ICsJCQkgICBkcmlm dCB8IFZDNF9IRE1JX0ZJRk9fQ1RMX1JFQ0VOVEVSKTsKPiArCj4gKwkJd2hpbGUgKChIRE1JX1JF QUQoVkM0X0hETUlfRklGT19DVEwpICYKPiArCQkJVkM0X0hETUlfRklGT19DVExfUkVDRU5URVJf RE9ORSkgPT0gMCkgewo+ICsJCQljcHVfcmVsYXgoKTsKPiArCQl9Cj4gKwl9Cj4gK30KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHZjNF9oZG1pX2Vu Y29kZXJfaGVscGVyX2Z1bmNzID0gewo+ICsJLm1vZGVfc2V0ID0gdmM0X2hkbWlfZW5jb2Rlcl9t b2RlX3NldCwKPiArCS5kaXNhYmxlID0gdmM0X2hkbWlfZW5jb2Rlcl9kaXNhYmxlLAo+ICsJLmVu YWJsZSA9IHZjNF9oZG1pX2VuY29kZXJfZW5hYmxlLAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVj dCBkcm1fY3J0YyAqCj4gK3ZjNF9nZXRfY3J0Y19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3J0Y19ub2RlOwo+ICsJc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqY3J0Y19wZGV2Owo+ICsKPiArCWNydGNfbm9kZSA9IG9mX3BhcnNl X3BoYW5kbGUocGRldi0+ZGV2Lm9mX25vZGUsICJjcnRjIiwgMCk7Cj4gKwlpZiAoIWNydGNfbm9k ZSkgewo+ICsJCURSTV9FUlJPUigiTm8gQ1JUQyBmb3IgaGRtaSBpbiBEVFxuIik7Cj4gKwkJcmV0 dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwl9Cj4gKwo+ICsJY3J0Y19wZGV2ID0gb2ZfZmluZF9k ZXZpY2VfYnlfbm9kZShjcnRjX25vZGUpOwo+ICsJaWYgKCFjcnRjX3BkZXYpIHsKPiArCQlEUk1f RVJST1IoIk5vIENSVEMgZGV2aWNlIGF0dGFjaGVkIHRvIE9GIG5vZGVcbiIpOwo+ICsJCXJldHVy biBFUlJfUFRSKC1FSU5WQUwpOwo+ICsJfQo+ICsKPiArCXJldHVybiBwbGF0Zm9ybV9nZXRfZHJ2 ZGF0YShjcnRjX3BkZXYpOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZHJtX2VuY29kZXIgKnZjNF9oZG1p X2VuY29kZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdmM0 X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwo+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyID0gTlVMTDsKPiArCXN0cnVjdCB2YzRfaGRtaV9lbmNvZGVyICp2YzRfaGRtaV9lbmNvZGVy Owo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICsJaW50IHJldDsKPiArCj4gKwl2YzRfaGRt aV9lbmNvZGVyID0gZGV2bV9remFsbG9jKGRldi0+ZGV2LCBzaXplb2YoKnZjNF9oZG1pX2VuY29k ZXIpLAo+ICsJCQkJCUdGUF9LRVJORUwpOwo+ICsJaWYgKCF2YzRfaGRtaV9lbmNvZGVyKSB7Cj4g KwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwllbmNvZGVyID0gJnZj NF9oZG1pX2VuY29kZXItPmJhc2U7Cj4gKwo+ICsJY3J0YyA9IHZjNF9nZXRfY3J0Y19ub2RlKHZj NC0+aGRtaS0+cGRldik7Cj4gKwlpZiAoSVNfRVJSKGNydGMpKSB7Cj4gKwkJcmV0ID0gUFRSX0VS UihjcnRjKTsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwo+ICsJZHJtX2VuY29kZXJfaW5pdChk ZXYsIGVuY29kZXIsICZ2YzRfaGRtaV9lbmNvZGVyX2Z1bmNzLAo+ICsJCQkgRFJNX01PREVfRU5D T0RFUl9UTURTKTsKPiArCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgJnZjNF9oZG1p X2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKPiArCj4gKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9 IGRybV9jcnRjX21hc2soY3J0Yyk7Cj4gKwo+ICsJcmV0dXJuIGVuY29kZXI7Cj4gKwo+ICtmYWls Ogo+ICsJaWYgKGVuY29kZXIpCj4gKwkJdmM0X2VuY29kZXJfZGVzdHJveShlbmNvZGVyKTsKPiAr Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gKwo+ICsvKiBSZWFkcyBvdXQgdGhlIGN1 cnJlbnQgSERNSSBtb2RlIHByb2dyZWFtbWluZyBhdCBkcml2ZXIgbG9hZCB0aW1lLgo+ICsgKgo+ ICsgKiBUaGlzIGlzIGN1cnJlbnRseSB1c2VkIGZvciBsYXRlciBmaWx0ZXJpbmcgb3V0IG9mIHRo ZSBEREMtcHJvYmVkCj4gKyAqIHZpZGVvIG1vZGVzLCBzaW5jZSB3ZSBjYW4ndCBhY3R1YWxseSBj aGFuZ2UgbW9kZXMgZHVlIHRvIG5vdCBoYXZpbmcKPiArICogY29udHJvbCBvZiB0aGUgbmVjZXNz YXJ5IGNsb2Nrcy4gIExhdGVyIG9uLCB3ZSBtYXkgZW5kIHVwIHJldXNpbmcKPiArICogdGhpcyBm b3Igc2tpcHBpbmcgbW9kZXNldHMgYXQgYm9vdCB0aW1lLgo+ICsgKi8KPiArc3RhdGljIHZvaWQK PiArdmM0X2hkbWlfZ2V0X2Jvb3RfZGlzcGxheV9tb2RlKHN0cnVjdCB2YzRfZGV2ICp2YzQpCj4g K3sKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJnZjNC0+aGRtaS0+Ym9vdF9t b2RlOwo+ICsJdTMyIGhvcnphID0gSERNSV9SRUFEKFZDNF9IRE1JX0hPUlpBKTsKPiArCXUzMiBo b3J6YiA9IEhETUlfUkVBRChWQzRfSERNSV9IT1JaQik7Cj4gKwl1MzIgdmVydGEgPSBIRE1JX1JF QUQoVkM0X0hETUlfVkVSVEEwKTsKPiArCXUzMiB2ZXJ0YiA9IEhETUlfUkVBRChWQzRfSERNSV9W RVJUQjApOwo+ICsKPiArCW1lbXNldChtb2RlLCAwLCBzaXplb2YoKm1vZGUpKTsKPiArCj4gKwlp ZiAoIShob3J6YSAmIFZDNF9IRE1JX0hPUlpBX1ZQT1MpKQo+ICsJCW1vZGUtPmZsYWdzIHw9IERS TV9NT0RFX0ZMQUdfTlZTWU5DOwo+ICsJaWYgKCEoaG9yemEgJiBWQzRfSERNSV9IT1JaQV9IUE9T KSkKPiArCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX05IU1lOQzsKPiArCW1vZGUtPmhk aXNwbGF5ID0gVkM0X0dFVF9GSUVMRChob3J6YSwgVkM0X0hETUlfSE9SWkFfSEFQKTsKPiArCW1v ZGUtPmhzeW5jX3N0YXJ0ID0gKG1vZGUtPmhkaXNwbGF5ICsKPiArCQkJICAgICBWQzRfR0VUX0ZJ RUxEKGhvcnpiLCBWQzRfSERNSV9IT1JaQl9IRlApKTsKPiArCW1vZGUtPmhzeW5jX2VuZCA9ICht b2RlLT5oc3luY19zdGFydCArCj4gKwkJCSAgIFZDNF9HRVRfRklFTEQoaG9yemIsIFZDNF9IRE1J X0hPUlpCX0hTUCkpOwo+ICsJbW9kZS0+aHRvdGFsID0gKG1vZGUtPmhzeW5jX2VuZCArCj4gKwkJ CVZDNF9HRVRfRklFTEQoaG9yemIsIFZDNF9IRE1JX0hPUlpCX0hCUCkpOwo+ICsKPiArCW1vZGUt PnZkaXNwbGF5ID0gVkM0X0dFVF9GSUVMRCh2ZXJ0YSwgVkM0X0hETUlfVkVSVEFfVkFMKTsKPiAr CW1vZGUtPnZzeW5jX3N0YXJ0ID0gKG1vZGUtPnZkaXNwbGF5ICsKPiArCQkJICAgICBWQzRfR0VU X0ZJRUxEKHZlcnRhLCBWQzRfSERNSV9WRVJUQV9WRlApKTsKPiArCW1vZGUtPnZzeW5jX2VuZCA9 IChtb2RlLT52c3luY19zdGFydCArCj4gKwkJCSAgIFZDNF9HRVRfRklFTEQodmVydGEsIFZDNF9I RE1JX1ZFUlRBX1ZTUCkpOwo+ICsJbW9kZS0+dnRvdGFsID0gKG1vZGUtPnZzeW5jX2VuZCArCj4g KwkJCVZDNF9HRVRfRklFTEQodmVydGIsIFZDNF9IRE1JX1ZFUlRCX1ZCUCkpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHZjNF9oZG1pX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2 aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpk cm0gPSBkZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSBk cm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IHZjNF9oZG1pICpoZG1pOwo+ICsJc3RydWN0IGRl dmljZV9ub2RlICpkZGNfbm9kZTsKPiArCXUzMiB2YWx1ZTsKPiArCj4gKwloZG1pID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCpoZG1pKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWhkbWkpCj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJaGRtaS0+cGRldiA9IHBkZXY7Cj4gKwloZG1pLT5o ZG1pY29yZV9yZWdzID0gdmM0X2lvcmVtYXBfcmVncyhwZGV2LCAwKTsKPiArCWlmIChJU19FUlIo aGRtaS0+aGRtaWNvcmVfcmVncykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoaGRtaS0+aGRtaWNvcmVf cmVncyk7Cj4gKwo+ICsJaGRtaS0+aGRfcmVncyA9IHZjNF9pb3JlbWFwX3JlZ3MocGRldiwgMSk7 Cj4gKwlpZiAoSVNfRVJSKGhkbWktPmhkX3JlZ3MpKQo+ICsJCXJldHVybiBQVFJfRVJSKGhkbWkt PmhkX3JlZ3MpOwo+ICsKPiArCS8qIEREQyBpMmMgZHJpdmVyICovCj4gKwlkZGNfbm9kZSA9IG9m X3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAiZGRjIiwgMCk7Cj4gKwlpZiAoIWRkY19ub2Rl KSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZmluZCBkZGMgbm9kZSBpbiBkZXZpY2UgdHJl ZVxuIik7Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJaGRtaS0+ZGRjID0gb2Zf ZmluZF9pMmNfYWRhcHRlcl9ieV9ub2RlKGRkY19ub2RlKTsKPiArCWlmICghaGRtaS0+ZGRjKSB7 Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGRkYyBpMmMgYWRhcHRlciBieSBub2RlXG4i KTsKPiArCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKPiArCX0KPiArCj4gKwkvKiBPbmx5IHVzZSB0 aGUgR1BJTyBIUEQgcGluIGlmIHByZXNlbnQgaW4gdGhlIERULCBvdGhlcndpc2UKPiArCSAqIHdl J2xsIHVzZSB0aGUgSERNSSBjb3JlJ3MgcmVnaXN0ZXIuCj4gKwkgKi8KPiArCWlmIChvZl9maW5k X3Byb3BlcnR5KGRldi0+b2Zfbm9kZSwgImhwZC1ncGlvIiwgJnZhbHVlKSkgewo+ICsJCWhkbWkt PmhwZF9ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8oZGV2LT5vZl9ub2RlLCAiaHBkLWdwaW8iLCAw KTsKPiArCQlpZiAoaGRtaS0+aHBkX2dwaW8gPCAwKQo+ICsJCQlyZXR1cm4gaGRtaS0+aHBkX2dw aW87Cj4gKwl9Cj4gKwo+ICsJdmM0LT5oZG1pID0gaGRtaTsKPiArCj4gKwkvKiBIRE1JIGNvcmUg bXVzdCBiZSBlbmFibGVkLiAqLwo+ICsJV0FSTl9PTl9PTkNFKChIRF9SRUFEKFZDNF9IRF9NX0NU TCkgJiBWQzRfSERfTV9FTkFCTEUpID09IDApOwo+ICsKPiArCXZjNF9oZG1pX2dldF9ib290X2Rp c3BsYXlfbW9kZSh2YzQpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCB2YzRfaGRtaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0 ZXIsCj4gKwkJCSAgICB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJt ID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7Cj4gKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gZHJt LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlwdXRfZGV2aWNlKCZ2YzQtPmhkbWktPmRkYy0+ZGV2KTsK PiArCj4gKwl2YzQtPmhkbWkgPSBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGNvbXBvbmVudF9vcHMgdmM0X2hkbWlfb3BzID0gewo+ICsJLmJpbmQgICA9IHZjNF9oZG1pX2Jp bmQsCj4gKwkudW5iaW5kID0gdmM0X2hkbWlfdW5iaW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGlu dCB2YzRfaGRtaV9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ ICsJcmV0dXJuIGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJnZjNF9oZG1pX29wcyk7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgdmM0X2hkbWlfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQo+ICt7Cj4gKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZ2YzRfaGRtaV9v cHMpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIHZjNF9oZG1pX2R0X21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gImJyY20s dmM0LWhkbWkiIH0sCj4gKwl7fQo+ICt9Owo+ICsKPiArc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2 YzRfaGRtaV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUgPSB2YzRfaGRtaV9kZXZfcHJvYmUsCj4gKwku cmVtb3ZlID0gdmM0X2hkbWlfZGV2X3JlbW92ZSwKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUg PSAidmM0X2hkbWkiLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IHZjNF9oZG1pX2R0X21hdGNoLAo+ ICsJfSwKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaHZzLmMg Yi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9odnMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uMzQ5MDZmZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9odnMuYwo+IEBAIC0wLDAgKzEsMTYxIEBACj4gKy8qCj4gKyAqIENvcHly aWdodCAoQykgMjAxNSBCcm9hZGNvbQo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiAr ICovCj4gKwo+ICsvKioKPiArICogRE9DOiBWQzQgSFZTIG1vZHVsZS4KPiArICoKPiArICogVGhl IEhWUyBpcyB0aGUgcGllY2Ugb2YgaGFyZHdhcmUgdGhhdCBkb2VzIHRyYW5zbGF0aW9uLCBzY2Fs aW5nLAo+ICsgKiBjb2xvcnNwYWNlIGNvbnZlcnNpb24sIGFuZCBjb21wb3NpdGluZyBvZiBwaXhl bHMgc3RvcmVkIGluCj4gKyAqIGZyYW1lYnVmZmVycyBpbnRvIGEgRklGTyBvZiBwaXhlbHMgZ29p bmcgb3V0IHRvIHRoZSBQaXhlbCBWYWx2ZQo+ICsgKiAoQ1JUQykuCj4gKyAqCj4gKyAqIFRoZXJl IGlzIGEgc2luZ2xlIGdsb2JhbCBIVlMsIHdpdGggbXVsdGlwbGUgb3V0cHV0IEZJRk9zIHRoYXQg Y2FuCj4gKyAqIGJlIGNvbnN1bWVkIGJ5IHRoZSBQVnMuICBUaGlzIGZpbGUganVzdCBtYW5hZ2Vz IHRoZSByZXNvdXJjZXMgZm9yCj4gKyAqIHRoZSBIVlMsIHdoaWxlIHRoZSB2YzRfY3J0Yy5jIGNv ZGUgYWN0dWFsbHkgZHJpdmVzIEhWUyBzZXR1cCBmb3IKPiArICogZWFjaCBDUlRDLgo+ICsgKi8K PiArCj4gKyNpbmNsdWRlICJsaW51eC9jb21wb25lbnQuaCIKPiArI2luY2x1ZGUgInZjNF9kcnYu aCIKPiArI2luY2x1ZGUgInZjNF9yZWdzLmgiCj4gKwo+ICsjZGVmaW5lIEhWU19SRUcocmVnKSB7 IHJlZywgI3JlZyB9Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgewo+ICsJdTMyIHJlZzsKPiArCWNv bnN0IGNoYXIgKm5hbWU7Cj4gK30gaHZzX3JlZ3NbXSA9IHsKPiArCUhWU19SRUcoU0NBTEVSX0RJ U1BDVFJMKSwKPiArCUhWU19SRUcoU0NBTEVSX0RJU1BTVEFUKSwKPiArCUhWU19SRUcoU0NBTEVS X0RJU1BJRCksCj4gKwlIVlNfUkVHKFNDQUxFUl9ESVNQRUNUUkwpLAo+ICsJSFZTX1JFRyhTQ0FM RVJfRElTUFBST0YpLAo+ICsJSFZTX1JFRyhTQ0FMRVJfRElTUERJVEhFUiksCj4gKwlIVlNfUkVH KFNDQUxFUl9ESVNQRU9MTiksCj4gKwlIVlNfUkVHKFNDQUxFUl9ESVNQTElTVDApLAo+ICsJSFZT X1JFRyhTQ0FMRVJfRElTUExJU1QxKSwKPiArCUhWU19SRUcoU0NBTEVSX0RJU1BMSVNUMiksCj4g KwlIVlNfUkVHKFNDQUxFUl9ESVNQTFNUQVQpLAo+ICsJSFZTX1JFRyhTQ0FMRVJfRElTUExBQ1Qw KSwKPiArCUhWU19SRUcoU0NBTEVSX0RJU1BMQUNUMSksCj4gKwlIVlNfUkVHKFNDQUxFUl9ESVNQ TEFDVDIpLAo+ICsJSFZTX1JFRyhTQ0FMRVJfRElTUENUUkwwKSwKPiArCUhWU19SRUcoU0NBTEVS X0RJU1BCS0dORDApLAo+ICsJSFZTX1JFRyhTQ0FMRVJfRElTUFNUQVQwKSwKPiArCUhWU19SRUco U0NBTEVSX0RJU1BCQVNFMCksCj4gKwlIVlNfUkVHKFNDQUxFUl9ESVNQQ1RSTDEpLAo+ICsJSFZT X1JFRyhTQ0FMRVJfRElTUEJLR05EMSksCj4gKwlIVlNfUkVHKFNDQUxFUl9ESVNQU1RBVDEpLAo+ ICsJSFZTX1JFRyhTQ0FMRVJfRElTUEJBU0UxKSwKPiArCUhWU19SRUcoU0NBTEVSX0RJU1BDVFJM MiksCj4gKwlIVlNfUkVHKFNDQUxFUl9ESVNQQktHTkQyKSwKPiArCUhWU19SRUcoU0NBTEVSX0RJ U1BTVEFUMiksCj4gKwlIVlNfUkVHKFNDQUxFUl9ESVNQQkFTRTIpLAo+ICsJSFZTX1JFRyhTQ0FM RVJfRElTUEFMUEhBMiksCj4gK307Cj4gKwo+ICt2b2lkIHZjNF9odnNfZHVtcF9zdGF0ZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0 X2RldihkZXYpOwo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo aHZzX3JlZ3MpOyBpKyspIHsKPiArCQlEUk1fSU5GTygiMHglMDR4ICglcyk6IDB4JTA4eFxuIiwK PiArCQkJIGh2c19yZWdzW2ldLnJlZywgaHZzX3JlZ3NbaV0ubmFtZSwKPiArCQkJIEhWU19SRUFE KGh2c19yZWdzW2ldLnJlZykpOwo+ICsJfQo+ICsKPiArCURSTV9JTkZPKCJIVlMgY3R4OlxuIik7 Cj4gKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkgKz0gNCkgewo+ICsJCURSTV9JTkZPKCIweCUwOHgg KCVzKTogMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4XG4iLAo+ICsJCQkgaSAqIDQsIGkgPCBI VlNfQk9PVExPQURFUl9ETElTVF9FTkQgPyAiQiIgOiAiRCIsCj4gKwkJCSAoKHVpbnQzMl90ICop dmM0LT5odnMtPmRsaXN0KVtpICsgMF0sCj4gKwkJCSAoKHVpbnQzMl90ICopdmM0LT5odnMtPmRs aXN0KVtpICsgMV0sCj4gKwkJCSAoKHVpbnQzMl90ICopdmM0LT5odnMtPmRsaXN0KVtpICsgMl0s Cj4gKwkJCSAoKHVpbnQzMl90ICopdmM0LT5odnMtPmRsaXN0KVtpICsgM10pOwo+ICsJfQo+ICt9 Cj4gKwo+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gK2ludCB2YzRfaHZzX2RlYnVnZnNfcmVn cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKPiArewo+ICsJc3RydWN0IGRybV9p bmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2Owo+ICsJc3RydWN0IHZj NF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGh2c19yZWdzKTsgaSsrKSB7Cj4gKwkJc2VxX3ByaW50ZihtLCAi JXMgKDB4JTA0eCk6IDB4JTA4eFxuIiwKPiArCQkJICAgaHZzX3JlZ3NbaV0ubmFtZSwgaHZzX3Jl Z3NbaV0ucmVnLAo+ICsJCQkgICBIVlNfUkVBRChodnNfcmVnc1tpXS5yZWcpKTsKPiArCX0KPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsjZW5kaWYKPiArCj4gK3N0YXRpYyBpbnQgdmM0X2h2c19i aW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRh KQo+ICt7Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2 aWNlKGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKG1h c3Rlcik7Cj4gKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0 cnVjdCB2YzRfaHZzICpodnMgPSBOVUxMOwo+ICsKPiArCWh2cyA9IGRldm1fa3phbGxvYygmcGRl di0+ZGV2LCBzaXplb2YoKmh2cyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFodnMpCj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4gKwo+ICsJaHZzLT5wZGV2ID0gcGRldjsKPiArCj4gKwlodnMtPnJlZ3Mg PSB2YzRfaW9yZW1hcF9yZWdzKHBkZXYsIDApOwo+ICsJaWYgKElTX0VSUihodnMtPnJlZ3MpKQo+ ICsJCXJldHVybiBQVFJfRVJSKGh2cy0+cmVncyk7Cj4gKwo+ICsJaHZzLT5kbGlzdCA9IGh2cy0+ cmVncyArIFNDQUxFUl9ETElTVF9TVEFSVDsKPiArCj4gKwl2YzQtPmh2cyA9IGh2czsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2YzRfaHZzX3VuYmluZChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiArCQkJICAgdm9pZCAqZGF0YSkKPiAr ewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOwo+ ICsJc3RydWN0IHZjNF9kZXYgKnZjNCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJdmM0LT5o dnMgPSBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMg dmM0X2h2c19vcHMgPSB7Cj4gKwkuYmluZCAgID0gdmM0X2h2c19iaW5kLAo+ICsJLnVuYmluZCA9 IHZjNF9odnNfdW5iaW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB2YzRfaHZzX2Rldl9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlyZXR1cm4gY29tcG9uZW50 X2FkZCgmcGRldi0+ZGV2LCAmdmM0X2h2c19vcHMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZj NF9odnNfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlj b21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZ2YzRfaHZzX29wcyk7Cj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdmM0X2h2c19kdF9tYXRj aFtdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJicmNtLHZjNC1odnMiIH0sCj4gKwl7fQo+ICt9 Owo+ICsKPiArc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfaHZzX2RyaXZlciA9IHsKPiArCS5w cm9iZSA9IHZjNF9odnNfZGV2X3Byb2JlLAo+ICsJLnJlbW92ZSA9IHZjNF9odnNfZGV2X3JlbW92 ZSwKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAidmM0X2h2cyIsCj4gKwkJLm9mX21hdGNo X3RhYmxlID0gdmM0X2h2c19kdF9tYXRjaCwKPiArCX0sCj4gK307Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfa21z LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmU1ZTk2YmMKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfa21zLmMKPiBAQCAtMCww ICsxLDg0IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNSBCcm9hZGNvbQo+ICsgKgo+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICovCj4gKwo+ICsvKioKPiArICogRE9DOiBWQzQg S01TCj4gKyAqCj4gKyAqIFRoaXMgaXMgdGhlIGdlbmVyYWwgY29kZSBmb3IgaW1wbGVtZW50aW5n IEtNUyBtb2RlIHNldHRpbmcgdGhhdAo+ICsgKiBkb2Vzbid0IGNsZWFybHkgYXNzb2NpYXRlIHdp dGggYW55IG9mIHRoZSBvdGhlciBvYmplY3RzIChwbGFuZSwKPiArICogY3J0YywgSERNSSBlbmNv ZGVyKS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSAiZHJtX2NydGMuaCIKPiArI2luY2x1ZGUgImRy bV9hdG9taWNfaGVscGVyLmgiCj4gKyNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKPiArI2lu Y2x1ZGUgImRybV9wbGFuZV9oZWxwZXIuaCIKPiArI2luY2x1ZGUgImRybV9mYl9jbWFfaGVscGVy LmgiCj4gKyNpbmNsdWRlICJ2YzRfZHJ2LmgiCj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9tb2RlX2NvbmZpZ19mdW5jcyB2YzRfbW9kZV9mdW5jcyA9IHsKPiArCS5hdG9taWNfY2hlY2sg PSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKPiArCS5hdG9taWNfY29tbWl0ID0gZHJtX2F0b21p Y19oZWxwZXJfY29tbWl0LAo+ICsJLmZiX2NyZWF0ZSA9IGRybV9mYl9jbWFfY3JlYXRlLAo+ICt9 Owo+ICsKPiArLyogQ2FsbHMgb3V0IHRvIGluaXRpYWxpemUgYWxsIG9mIHRoZSBWQzQgS01TIG9i amVjdHMuICovCj4gK3N0YXRpYyBpbnQgdmM0X2luaXRfbW9kZXNldF9vYmplY3RzKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKPiAr CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4g KwllbmNvZGVyID0gdmM0X2hkbWlfZW5jb2Rlcl9pbml0KGRldik7Cj4gKwlpZiAoSVNfRVJSKGVu Y29kZXIpKSB7Cj4gKwkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBjb25zdHJ1Y3QgSERN SSBlbmNvZGVyXG4iKTsKPiArCQlyZXQgPSBQVFJfRVJSKGVuY29kZXIpOwo+ICsJCWdvdG8gZmFp bDsKPiArCX0KPiArCj4gKwljb25uZWN0b3IgPSB2YzRfaGRtaV9jb25uZWN0b3JfaW5pdChkZXYs IGVuY29kZXIpOwo+ICsJaWYgKElTX0VSUihjb25uZWN0b3IpKSB7Cj4gKwkJcmV0ID0gUFRSX0VS Uihjb25uZWN0b3IpOwo+ICsJCWRldl9lcnIoZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6 ZSBIRE1JIGNvbm5lY3RvclxuIik7Cj4gKwkJZ290byBmYWlsOwo+ICsJfQo+ICsKPiArZmFpbDoK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK2ludCB2YzRfa21zX2xvYWQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBkcm1fdmJsYW5rX2lu aXQoZGV2LCBkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4g KwkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIHZibGFua1xuIik7Cj4g KwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCA9 IDIwNDg7Cj4gKwlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSAyMDQ4Owo+ICsJZGV2LT5t b2RlX2NvbmZpZy5mdW5jcyA9ICZ2YzRfbW9kZV9mdW5jczsKPiArCWRldi0+bW9kZV9jb25maWcu cHJlZmVycmVkX2RlcHRoID0gMjQ7Cj4gKwo+ICsJcmV0ID0gdmM0X2luaXRfbW9kZXNldF9vYmpl Y3RzKGRldik7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZmFpbDsKPiArCj4gKwlkcm1fbW9kZV9j b25maWdfcmVzZXQoZGV2KTsKPiArCj4gKwlkcm1fZmJkZXZfY21hX2luaXQoZGV2LCAzMiwKPiAr CQkJICAgZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YywKPiArCQkJICAgZGV2LT5tb2RlX2NvbmZp Zy5udW1fY29ubmVjdG9yKTsKPiArCj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZGV2KTsK PiArCj4gK2ZhaWw6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS92YzQvdmM0X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5j Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5jZGQ4YjEwCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMKPiBAQCAtMCww ICsxLDMyMCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQnJvYWRjb20KPiArICoK PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqLwo+ICsKPiArLyoqCj4gKyAqIERPQzogVkM0 IHBsYW5lIG1vZHVsZQo+ICsgKgo+ICsgKiBFYWNoIERSTSBwbGFuZSBpcyBhIGxheWVyIG9mIHBp eGVscyBiZWluZyBzY2FubmVkIG91dCBieSB0aGUgSFZTLgo+ICsgKgo+ICsgKiBBdCBhdG9taWMg bW9kZXNldCBjaGVjayB0aW1lLCB3ZSBjb21wdXRlIHRoZSBIVlMgZGlzcGxheSBlbGVtZW50Cj4g KyAqIHN0YXRlIHRoYXQgd291bGQgYmUgbmVjZXNzYXJ5IGZvciBkaXNwbGF5aW5nIHRoZSBwbGFu ZSAoZ2l2aW5nIHVzIGEKPiArICogY2hhbmNlIHRvIGZpZ3VyZSBvdXQgaWYgYSBwbGFuZSBjb25m aWd1cmF0aW9uIGlzIGludmFsaWQpLCB0aGVuIGF0Cj4gKyAqIGF0b21pYyBmbHVzaCB0aW1lIHRo ZSBDUlRDIHdpbGwgYXNrIHVzIHRvIHdyaXRlIG91ciBlbGVtZW50IHN0YXRlCj4gKyAqIGludG8g dGhlIHJlZ2lvbiBvZiB0aGUgSFZTIHRoYXQgaXQgaGFzIGFsbG9jYXRlZCBmb3IgdXMuCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgInZjNF9kcnYuaCIKPiArI2luY2x1ZGUgInZjNF9yZWdzLmgiCj4g KyNpbmNsdWRlICJkcm1fYXRvbWljX2hlbHBlci5oIgo+ICsjaW5jbHVkZSAiZHJtX2ZiX2NtYV9o ZWxwZXIuaCIKPiArI2luY2x1ZGUgImRybV9wbGFuZV9oZWxwZXIuaCIKPiArCj4gK3N0cnVjdCB2 YzRfcGxhbmVfc3RhdGUgewo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBiYXNlOwo+ICsJdTMy ICpkbGlzdDsKPiArCXUzMiBkbGlzdF9zaXplOyAvKiBOdW1iZXIgb2YgZHdvcmRzIGluIGFsbG9j YXRlZCBmb3IgdGhlIGRpc3BsYXkgbGlzdCAqLwo+ICsJdTMyIGRsaXN0X2NvdW50OyAvKiBOdW1i ZXIgb2YgdXNlZCBkd29yZHMgaW4gdGhlIGRpc3BsYXkgbGlzdC4gKi8KPiArfTsKPiArCj4gK3N0 YXRpYyBpbmxpbmUgc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqCj4gK3RvX3ZjNF9wbGFuZV9zdGF0 ZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJcmV0dXJuIChzdHJ1Y3Qg dmM0X3BsYW5lX3N0YXRlICopc3RhdGU7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg aHZzX2Zvcm1hdCB7Cj4gKwl1MzIgZHJtOyAvKiBEUk1fRk9STUFUXyogKi8KPiArCXUzMiBodnM7 IC8qIEhWU19GT1JNQVRfKiAqLwo+ICsJdTMyIHBpeGVsX29yZGVyOwo+ICsJYm9vbCBoYXNfYWxw aGE7Cj4gK30gaHZzX2Zvcm1hdHNbXSA9IHsKPiArCXsKPiArCQkuZHJtID0gRFJNX0ZPUk1BVF9Y UkdCODg4OCwgLmh2cyA9IEhWU19QSVhFTF9GT1JNQVRfUkdCQTg4ODgsCj4gKwkJLnBpeGVsX29y ZGVyID0gSFZTX1BJWEVMX09SREVSX0FCR1IsIC5oYXNfYWxwaGEgPSBmYWxzZSwKPiArCX0sCj4g Kwl7Cj4gKwkJLmRybSA9IERSTV9GT1JNQVRfQVJHQjg4ODgsIC5odnMgPSBIVlNfUElYRUxfRk9S TUFUX1JHQkE4ODg4LAo+ICsJCS5waXhlbF9vcmRlciA9IEhWU19QSVhFTF9PUkRFUl9BQkdSLCAu aGFzX2FscGhhID0gdHJ1ZSwKPiArCX0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGh2c19mb3JtYXQgKnZjNF9nZXRfaHZzX2Zvcm1hdCh1MzIgZHJtX2Zvcm1hdCkKPiArewo+ICsJ dW5zaWduZWQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShodnNfZm9ybWF0 cyk7IGkrKykgewo+ICsJCWlmIChodnNfZm9ybWF0c1tpXS5kcm0gPT0gZHJtX2Zvcm1hdCkKPiAr CQkJcmV0dXJuICZodnNfZm9ybWF0c1tpXTsKPiArCX0KPiArCj4gKwlyZXR1cm4gTlVMTDsKPiAr fQo+ICsKPiArc3RhdGljIGJvb2wgcGxhbmVfZW5hYmxlZChzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpzdGF0ZSkKPiArewo+ICsJcmV0dXJuIHN0YXRlLT5mYiAmJiBzdGF0ZS0+Y3J0YzsKPiArfQo+ ICsKPiArc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqdmM0X3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiArewo+ICsJc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAq dmM0X3N0YXRlOwo+ICsKPiArCWlmIChXQVJOX09OKCFwbGFuZS0+c3RhdGUpKQo+ICsJCXJldHVy biBOVUxMOwo+ICsKPiArCXZjNF9zdGF0ZSA9IGttZW1kdXAocGxhbmUtPnN0YXRlLCBzaXplb2Yo KnZjNF9zdGF0ZSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCF2YzRfc3RhdGUpCj4gKwkJcmV0dXJu IE5VTEw7Cj4gKwo+ICsJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUo cGxhbmUsICZ2YzRfc3RhdGUtPmJhc2UpOwo+ICsKPiArCWlmICh2YzRfc3RhdGUtPmRsaXN0KSB7 Cj4gKwkJdmM0X3N0YXRlLT5kbGlzdCA9IGttZW1kdXAodmM0X3N0YXRlLT5kbGlzdCwKPiArCQkJ CQkgICB2YzRfc3RhdGUtPmRsaXN0X2NvdW50ICogNCwKPiArCQkJCQkgICBHRlBfS0VSTkVMKTsK PiArCQlpZiAoIXZjNF9zdGF0ZS0+ZGxpc3QpIHsKPiArCQkJa2ZyZWUodmM0X3N0YXRlKTsKPiAr CQkJcmV0dXJuIE5VTEw7Cj4gKwkJfQo+ICsJCXZjNF9zdGF0ZS0+ZGxpc3Rfc2l6ZSA9IHZjNF9z dGF0ZS0+ZGxpc3RfY291bnQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuICZ2YzRfc3RhdGUtPmJhc2U7 Cj4gK30KPiArCj4gK3ZvaWQgdmM0X3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCj4gKwkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gK3sK PiArCXN0cnVjdCB2YzRfcGxhbmVfc3RhdGUgKnZjNF9zdGF0ZSA9IHRvX3ZjNF9wbGFuZV9zdGF0 ZShzdGF0ZSk7Cj4gKwo+ICsJa2ZyZWUodmM0X3N0YXRlLT5kbGlzdCk7Cj4gKwlfX2RybV9hdG9t aWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUocGxhbmUsICZ2YzRfc3RhdGUtPmJhc2UpOwo+ ICsJa2ZyZWUoc3RhdGUpOwo+ICt9Cj4gKwo+ICsvKiBDYWxsZWQgZHVyaW5nIGluaXQgdG8gYWxs b2NhdGUgdGhlIHBsYW5lJ3MgYXRvbWljIHN0YXRlLiAqLwo+ICt2b2lkIHZjNF9wbGFuZV9yZXNl dChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiArewo+ICsJc3RydWN0IHZjNF9wbGFuZV9zdGF0 ZSAqdmM0X3N0YXRlOwo+ICsKPiArCVdBUk5fT04ocGxhbmUtPnN0YXRlKTsKPiArCj4gKwl2YzRf c3RhdGUgPSBremFsbG9jKHNpemVvZigqdmM0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAo IXZjNF9zdGF0ZSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJcGxhbmUtPnN0YXRlID0gJnZjNF9zdGF0 ZS0+YmFzZTsKPiArCXZjNF9zdGF0ZS0+YmFzZS5wbGFuZSA9IHBsYW5lOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCB2YzRfZGxpc3Rfd3JpdGUoc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqdmM0X3N0 YXRlLCB1MzIgdmFsKQo+ICt7Cj4gKwlpZiAodmM0X3N0YXRlLT5kbGlzdF9jb3VudCA9PSB2YzRf c3RhdGUtPmRsaXN0X3NpemUpIHsKPiArCQl1MzIgbmV3X3NpemUgPSBtYXgoNHUsIHZjNF9zdGF0 ZS0+ZGxpc3RfY291bnQgKiAyKTsKPiArCQl1MzIgKm5ld19kbGlzdCA9IGttYWxsb2MobmV3X3Np emUgKiA0LCBHRlBfS0VSTkVMKTsKPiArCj4gKwkJaWYgKCFuZXdfZGxpc3QpCj4gKwkJCXJldHVy bjsKPiArCQltZW1jcHkobmV3X2RsaXN0LCB2YzRfc3RhdGUtPmRsaXN0LCB2YzRfc3RhdGUtPmRs aXN0X2NvdW50ICogNCk7Cj4gKwo+ICsJCWtmcmVlKHZjNF9zdGF0ZS0+ZGxpc3QpOwo+ICsJCXZj NF9zdGF0ZS0+ZGxpc3QgPSBuZXdfZGxpc3Q7Cj4gKwkJdmM0X3N0YXRlLT5kbGlzdF9zaXplID0g bmV3X3NpemU7Cj4gKwl9Cj4gKwo+ICsJdmM0X3N0YXRlLT5kbGlzdFt2YzRfc3RhdGUtPmRsaXN0 X2NvdW50KytdID0gdmFsOwo+ICt9Cj4gKwo+ICsvKiBXcml0ZXMgb3V0IGEgZnVsbCBkaXNwbGF5 IGxpc3QgZm9yIGFuIGFjdGl2ZSBwbGFuZSB0byB0aGUgcGxhbmUncwo+ICsgKiBwcml2YXRlIGRs aXN0IHN0YXRlLgo+ICsgKi8KPiArc3RhdGljIGludCB2YzRfcGxhbmVfbW9kZV9zZXQoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJCSAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0 YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGUgPSB0b192YzRf cGxhbmVfc3RhdGUoc3RhdGUpOwo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0 ZS0+ZmI7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpibyA9IGRybV9mYl9jbWFfZ2V0 X2dlbV9vYmooZmIsIDApOwo+ICsJdTMyIGN0bDBfb2Zmc2V0ID0gdmM0X3N0YXRlLT5kbGlzdF9j b3VudDsKPiArCWNvbnN0IHN0cnVjdCBodnNfZm9ybWF0ICpmb3JtYXQgPSB2YzRfZ2V0X2h2c19m b3JtYXQoZmItPnBpeGVsX2Zvcm1hdCk7Cj4gKwl1aW50MzJfdCBvZmZzZXQgPSBmYi0+b2Zmc2V0 c1swXTsKPiArCWludCBjcnRjX3ggPSBzdGF0ZS0+Y3J0Y194Owo+ICsJaW50IGNydGNfeSA9IHN0 YXRlLT5jcnRjX3k7Cj4gKwlpbnQgY3J0Y193ID0gc3RhdGUtPmNydGNfdzsKPiArCWludCBjcnRj X2ggPSBzdGF0ZS0+Y3J0Y19oOwo+ICsKPiArCWlmIChjcnRjX3ggPCAwKSB7Cj4gKwkJb2Zmc2V0 ICs9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDApICogLWNydGNfeDsK PiArCQljcnRjX3cgKz0gY3J0Y194Owo+ICsJCWNydGNfeCA9IDA7Cj4gKwl9Cj4gKwo+ICsJaWYg KGNydGNfeSA8IDApIHsKPiArCQlvZmZzZXQgKz0gZmItPnBpdGNoZXNbMF0gKiAtY3J0Y195Owo+ ICsJCWNydGNfaCArPSBjcnRjX3k7Cj4gKwkJY3J0Y195ID0gMDsKPiArCX0KPiArCj4gKwl2YzRf ZGxpc3Rfd3JpdGUodmM0X3N0YXRlLAo+ICsJCQlTQ0FMRVJfQ1RMMF9WQUxJRCB8Cj4gKwkJCShm b3JtYXQtPnBpeGVsX29yZGVyIDw8IFNDQUxFUl9DVEwwX09SREVSX1NISUZUKSB8Cj4gKwkJCShm b3JtYXQtPmh2cyA8PCBTQ0FMRVJfQ1RMMF9QSVhFTF9GT1JNQVRfU0hJRlQpIHwKPiArCQkJU0NB TEVSX0NUTDBfVU5JVFkpOwo+ICsKPiArCS8qIFBvc2l0aW9uIFdvcmQgMDogSW1hZ2UgUG9zaXRp b25zIGFuZCBBbHBoYSBWYWx1ZSAqLwo+ICsJdmM0X2RsaXN0X3dyaXRlKHZjNF9zdGF0ZSwKPiAr CQkJVkM0X1NFVF9GSUVMRCgweGZmLCBTQ0FMRVJfUE9TMF9GSVhFRF9BTFBIQSkgfAo+ICsJCQlW QzRfU0VUX0ZJRUxEKGNydGNfeCwgU0NBTEVSX1BPUzBfU1RBUlRfWCkgfAo+ICsJCQlWQzRfU0VU X0ZJRUxEKGNydGNfeSwgU0NBTEVSX1BPUzBfU1RBUlRfWSkpOwo+ICsKPiArCS8qIFBvc2l0aW9u IFdvcmQgMTogU2NhbGVkIEltYWdlIERpbWVuc2lvbnMuCj4gKwkgKiBTa2lwcGVkIGR1ZSB0byBT Q0FMRVJfQ1RMMF9VTklUWSBzY2FsaW5nLgo+ICsJICovCj4gKwo+ICsJLyogUG9zaXRpb24gV29y ZCAyOiBTb3VyY2UgSW1hZ2UgU2l6ZSwgQWxwaGEgTW9kZSAqLwo+ICsJdmM0X2RsaXN0X3dyaXRl KHZjNF9zdGF0ZSwKPiArCQkJVkM0X1NFVF9GSUVMRChmb3JtYXQtPmhhc19hbHBoYSA/Cj4gKwkJ CQkgICAgICBTQ0FMRVJfUE9TMl9BTFBIQV9NT0RFX1BJUEVMSU5FIDoKPiArCQkJCSAgICAgIFND QUxFUl9QT1MyX0FMUEhBX01PREVfRklYRUQsCj4gKwkJCQkgICAgICBTQ0FMRVJfUE9TMl9BTFBI QV9NT0RFKSB8Cj4gKwkJCVZDNF9TRVRfRklFTEQoY3J0Y193LCBTQ0FMRVJfUE9TMl9XSURUSCkg fAo+ICsJCQlWQzRfU0VUX0ZJRUxEKGNydGNfaCwgU0NBTEVSX1BPUzJfSEVJR0hUKSk7Cj4gKwo+ ICsJLyogUG9zaXRpb24gV29yZCAzOiBDb250ZXh0LiAgV3JpdHRlbiBieSB0aGUgSFZTLiAqLwo+ ICsJdmM0X2RsaXN0X3dyaXRlKHZjNF9zdGF0ZSwgMHhjMGMwYzBjMCk7Cj4gKwo+ICsJLyogUG9p bnRlciBXb3JkIDA6IFJHQiAvIFkgUG9pbnRlciAqLwo+ICsJdmM0X2RsaXN0X3dyaXRlKHZjNF9z dGF0ZSwgYm8tPnBhZGRyICsgb2Zmc2V0KTsKPiArCj4gKwkvKiBQb2ludGVyIENvbnRleHQgV29y ZCAwOiBXcml0dGVuIGJ5IHRoZSBIVlMgKi8KPiArCXZjNF9kbGlzdF93cml0ZSh2YzRfc3RhdGUs IDB4YzBjMGMwYzApOwo+ICsKPiArCS8qIFBpdGNoIHdvcmQgMDogUG9pbnRlciAwIFBpdGNoICov Cj4gKwl2YzRfZGxpc3Rfd3JpdGUodmM0X3N0YXRlLAo+ICsJCQlWQzRfU0VUX0ZJRUxEKGZiLT5w aXRjaGVzWzBdLCBTQ0FMRVJfU1JDX1BJVENIKSk7Cj4gKwo+ICsJdmM0X3N0YXRlLT5kbGlzdFtj dGwwX29mZnNldF0gfD0KPiArCQlWQzRfU0VUX0ZJRUxEKHZjNF9zdGF0ZS0+ZGxpc3RfY291bnQs IFNDQUxFUl9DVEwwX1NJWkUpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKiBJZiBh IG1vZGVzZXQgaW52b2x2ZXMgY2hhbmdpbmcgdGhlIHNldHVwIG9mIGEgcGxhbmUsIHRoZSBhdG9t aWMKPiArICogaW5mcmFzdHJ1Y3R1cmUgd2lsbCBjYWxsIHRoaXMgdG8gdmFsaWRhdGUgYSBwcm9w b3NlZCBwbGFuZSBzZXR1cC4KPiArICogSG93ZXZlciwgaWYgYSBwbGFuZSBpc24ndCBnZXR0aW5n IHVwZGF0ZWQsIHRoaXMgKGFuZCB0aGUKPiArICogY29ycmVzcG9uZGluZyB2YzRfcGxhbmVfYXRv bWljX3VwZGF0ZSkgd29uJ3QgZ2V0IGNhbGxlZC4gIFRodXMsIHdlCj4gKyAqIGNvbXB1dGUgdGhl IGRsaXN0IGhlcmUgYW5kIGhhdmUgYWxsIGFjdGl2ZSBwbGFuZSBkbGlzdHMgZ2V0IHVwZGF0ZWQK PiArICogaW4gdGhlIENSVEMncyBmbHVzaC4KPiArICovCj4gK3N0YXRpYyBpbnQgdmM0X3BsYW5l X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiArCQkJCSAgc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCB2YzRfcGxhbmVfc3RhdGUgKnZj NF9zdGF0ZSA9IHRvX3ZjNF9wbGFuZV9zdGF0ZShzdGF0ZSk7Cj4gKwo+ICsJdmM0X3N0YXRlLT5k bGlzdF9jb3VudCA9IDA7Cj4gKwo+ICsJaWYgKHBsYW5lX2VuYWJsZWQoc3RhdGUpKQo+ICsJCXJl dHVybiB2YzRfcGxhbmVfbW9kZV9zZXQocGxhbmUsIHN0YXRlKTsKPiArCWVsc2UKPiArCQlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmM0X3BsYW5lX2F0b21pY191cGRhdGUoc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJCQkgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAq b2xkX3N0YXRlKQo+ICt7Cj4gKwkvKiBObyBjb250ZW50cyBoZXJlLiAgU2luY2Ugd2UgZG9uJ3Qg a25vdyB3aGVyZSBpbiB0aGUgQ1JUQydzCj4gKwkgKiBkbGlzdCB3ZSBzaG91bGQgYmUgc3RvcmVk LCBvdXIgZGxpc3QgaXMgdXBsb2FkZWQgdG8gdGhlCj4gKwkgKiBoYXJkd2FyZSB3aXRoIHZjNF9w bGFuZV93cml0ZV9kbGlzdCgpIGF0IENSVEMgYXRvbWljX2ZsdXNoCj4gKwkgKiB0aW1lLgo+ICsJ ICovCj4gK30KPiArCj4gK3UzMiB2YzRfcGxhbmVfd3JpdGVfZGxpc3Qoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsIHUzMiBfX2lvbWVtICpkbGlzdCkKPiArewo+ICsJc3RydWN0IHZjNF9wbGFuZV9z dGF0ZSAqdmM0X3N0YXRlID0gdG9fdmM0X3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7Cj4gKwlp bnQgaTsKPiArCj4gKwkvKiBDYW4ndCBtZW1jcHlfdG9pbygpIGJlY2F1c2UgaXQgbmVlZHMgdG8g YmUgMzItYml0IHdyaXRlcy4gKi8KPiArCWZvciAoaSA9IDA7IGkgPCB2YzRfc3RhdGUtPmRsaXN0 X2NvdW50OyBpKyspCj4gKwkJd3JpdGVsKHZjNF9zdGF0ZS0+ZGxpc3RbaV0sICZkbGlzdFtpXSk7 Cj4gKwo+ICsJcmV0dXJuIHZjNF9zdGF0ZS0+ZGxpc3RfY291bnQ7Cj4gK30KPiArCj4gK3UzMiB2 YzRfcGxhbmVfZGxpc3Rfc2l6ZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiArewo+ ICsJc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqdmM0X3N0YXRlID0gdG9fdmM0X3BsYW5lX3N0YXRl KHN0YXRlKTsKPiArCj4gKwlyZXR1cm4gdmM0X3N0YXRlLT5kbGlzdF9jb3VudDsKPiArfQo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIHZjNF9wbGFuZV9o ZWxwZXJfZnVuY3MgPSB7Cj4gKwkucHJlcGFyZV9mYiA9IE5VTEwsCj4gKwkuY2xlYW51cF9mYiA9 IE5VTEwsCj4gKwkuYXRvbWljX2NoZWNrID0gdmM0X3BsYW5lX2F0b21pY19jaGVjaywKPiArCS5h dG9taWNfdXBkYXRlID0gdmM0X3BsYW5lX2F0b21pY191cGRhdGUsCj4gK307Cj4gKwo+ICtzdGF0 aWMgdm9pZCB2YzRfcGxhbmVfZGVzdHJveShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiArewo+ ICsJZHJtX3BsYW5lX2hlbHBlcl9kaXNhYmxlKHBsYW5lKTsKPiArCWRybV9wbGFuZV9jbGVhbnVw KHBsYW5lKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mg dmM0X3BsYW5lX2Z1bmNzID0gewo+ICsJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVy X3VwZGF0ZV9wbGFuZSwKPiArCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlz YWJsZV9wbGFuZSwKPiArCS5kZXN0cm95ID0gdmM0X3BsYW5lX2Rlc3Ryb3ksCj4gKwkuc2V0X3By b3BlcnR5ID0gTlVMTCwKPiArCS5yZXNldCA9IHZjNF9wbGFuZV9yZXNldCwKPiArCS5hdG9taWNf ZHVwbGljYXRlX3N0YXRlID0gdmM0X3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNf ZGVzdHJveV9zdGF0ZSA9IHZjNF9wbGFuZV9kZXN0cm95X3N0YXRlLAo+ICt9Owo+ICsKPiArc3Ry dWN0IGRybV9wbGFuZSAqdmM0X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAr CQkJCSBlbnVtIGRybV9wbGFuZV90eXBlIHR5cGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lID0gTlVMTDsKPiArCXN0cnVjdCB2YzRfcGxhbmUgKnZjNF9wbGFuZTsKPiArCXUzMiBm b3JtYXRzW0FSUkFZX1NJWkUoaHZzX2Zvcm1hdHMpXTsKPiArCWludCByZXQgPSAwOwo+ICsJdW5z aWduZWQgaTsKPiArCj4gKwl2YzRfcGxhbmUgPSBkZXZtX2t6YWxsb2MoZGV2LT5kZXYsIHNpemVv ZigqdmM0X3BsYW5lKSwKPiArCQkJCSBHRlBfS0VSTkVMKTsKPiArCWlmICghdmM0X3BsYW5lKSB7 Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoaHZzX2Zvcm1hdHMpOyBpKyspCj4gKwkJZm9ybWF0c1tpXSA9 IGh2c19mb3JtYXRzW2ldLmRybTsKPiArCXBsYW5lID0gJnZjNF9wbGFuZS0+YmFzZTsKPiArCXJl dCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdChkZXYsIHBsYW5lLCAweGZmLAo+ICsJCQkJICAg ICAgICZ2YzRfcGxhbmVfZnVuY3MsCj4gKwkJCQkgICAgICAgZm9ybWF0cywgQVJSQVlfU0laRShm b3JtYXRzKSwKPiArCQkJCSAgICAgICB0eXBlKTsKPiArCj4gKwlkcm1fcGxhbmVfaGVscGVyX2Fk ZChwbGFuZSwgJnZjNF9wbGFuZV9oZWxwZXJfZnVuY3MpOwo+ICsKPiArCXJldHVybiBwbGFuZTsK PiArZmFpbDoKPiArCWlmIChwbGFuZSkKPiArCQl2YzRfcGxhbmVfZGVzdHJveShwbGFuZSk7Cj4g Kwo+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9yZWdzLmggYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9yZWdzLmgKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjBlZmY2MzEKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcmVncy5oCj4gQEAgLTAsMCArMSw1 NjIgQEAKPiArLyoKPiArICogIENvcHlyaWdodCDCqSAyMDE0LTIwMTUgQnJvYWRjb20KPiArICoK PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqLwo+ICsKPiArI2RlZmluZSBWQzRfTUFTSyho aWdoLCBsb3cpICgoKDEgPDwgKChoaWdoKSAtIChsb3cpICsgMSkpIC0gMSkgPDwgKGxvdykpCj4g Ky8qIFVzaW5nIHRoZSBHTlUgc3RhdGVtZW50IGV4cHJlc3Npb24gZXh0ZW5zaW9uICovCj4gKyNk ZWZpbmUgVkM0X1NFVF9GSUVMRCh2YWx1ZSwgZmllbGQpCQkJCQlcCj4gKwkoewkJCQkJCQkJXAo+ ICsJCXVpbnQzMl90IGZpZWxkdmFsID0gKHZhbHVlKSA8PCBmaWVsZCMjX1NISUZUOwkJXAo+ICsJ CVdBUk5fT04oKGZpZWxkdmFsICYgfmZpZWxkIyNfTUFTSykgIT0gMCk7CQlcCj4gKwkJZmllbGR2 YWwgJiBmaWVsZCMjX01BU0s7CQkJCVwKPiArCSB9KQo+ICsKPiArI2RlZmluZSBWQzRfR0VUX0ZJ RUxEKHdvcmQsIGZpZWxkKSAoKCh3b3JkKSAmIGZpZWxkIyNfTUFTSykgPj4JCVwKPiArCQkJCSAg ICBmaWVsZCMjX1NISUZUKQo+ICsKPiArI2RlZmluZSBWM0RfSURFTlQwICAgMHgwMDAwMAo+ICsj IGRlZmluZSBWM0RfRVhQRUNURURfSURFTlQwIFwKPiArCSgoMiA8PCAyNCkgfCBcCj4gKwkoJ1Yn IDw8IDApIHwgXAo+ICsJKCczJyA8PCA4KSB8IFwKPiArCSAoJ0QnIDw8IDE2KSkKPiArCj4gKyNk ZWZpbmUgVjNEX0lERU5UMSAgIDB4MDAwMDQKPiArLyogTXVsdGlwbGVzIG9mIDFrYiAqLwo+ICsj IGRlZmluZSBWM0RfSURFTlQxX1ZQTV9TSVpFX01BU0sgICAgICAgICAgICAgICAgICAgICAgVkM0 X01BU0soMzEsIDI4KQo+ICsjIGRlZmluZSBWM0RfSURFTlQxX1ZQTV9TSVpFX1NISUZUICAgICAg ICAgICAgICAgICAgICAgMjgKPiArIyBkZWZpbmUgVjNEX0lERU5UMV9OU0VNX01BU0sgICAgICAg ICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDIzLCAxNikKPiArIyBkZWZpbmUgVjNEX0lERU5U MV9OU0VNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE2Cj4gKyMgZGVmaW5lIFYzRF9J REVOVDFfVFVQU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSygxNSwgMTIp Cj4gKyMgZGVmaW5lIFYzRF9JREVOVDFfVFVQU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAg ICAxMgo+ICsjIGRlZmluZSBWM0RfSURFTlQxX1FVUFNfTUFTSyAgICAgICAgICAgICAgICAgICAg ICAgICAgVkM0X01BU0soMTEsIDgpCj4gKyMgZGVmaW5lIFYzRF9JREVOVDFfUVVQU19TSElGVCAg ICAgICAgICAgICAgICAgICAgICAgICA4Cj4gKyMgZGVmaW5lIFYzRF9JREVOVDFfTlNMQ19NQVNL ICAgICAgICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSyg3LCA0KQo+ICsjIGRlZmluZSBWM0Rf SURFTlQxX05TTENfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNAo+ICsjIGRlZmluZSBW M0RfSURFTlQxX1JFVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soMywg MCkKPiArIyBkZWZpbmUgVjNEX0lERU5UMV9SRVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAg ICAgIDAKPiArCj4gKyNkZWZpbmUgVjNEX0lERU5UMiAgIDB4MDAwMDgKPiArI2RlZmluZSBWM0Rf U0NSQVRDSCAgMHgwMDAxMAo+ICsjZGVmaW5lIFYzRF9MMkNBQ1RMICAweDAwMDIwCj4gKyMgZGVm aW5lIFYzRF9MMkNBQ1RMX0wyQ0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAy KQo+ICsjIGRlZmluZSBWM0RfTDJDQUNUTF9MMkNESVMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKDEgPDwgMSkKPiArIyBkZWZpbmUgVjNEX0wyQ0FDVExfTDJDRU5BICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgxIDw8IDApCj4gKwo+ICsjZGVmaW5lIFYzRF9TTENBQ1RMICAweDAwMDI0 Cj4gKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1QxQ0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAg ICBWQzRfTUFTSygyNywgMjQpCj4gKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1QxQ0NfU0hJRlQgICAg ICAgICAgICAgICAgICAgICAgICAyNAo+ICsjIGRlZmluZSBWM0RfU0xDQUNUTF9UMENDX01BU0sg ICAgICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soMTksIDE2KQo+ICsjIGRlZmluZSBWM0Rf U0xDQUNUTF9UMENDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTYKPiArIyBkZWZpbmUg VjNEX1NMQ0FDVExfVUNDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDEx LCA4KQo+ICsjIGRlZmluZSBWM0RfU0xDQUNUTF9VQ0NfU0hJRlQgICAgICAgICAgICAgICAgICAg ICAgICAgOAo+ICsjIGRlZmluZSBWM0RfU0xDQUNUTF9JQ0NfTUFTSyAgICAgICAgICAgICAgICAg ICAgICAgICAgVkM0X01BU0soMywgMCkKPiArIyBkZWZpbmUgVjNEX1NMQ0FDVExfSUNDX1NISUZU ICAgICAgICAgICAgICAgICAgICAgICAgIDAKPiArCj4gKyNkZWZpbmUgVjNEX0lOVENUTCAgIDB4 MDAwMzAKPiArI2RlZmluZSBWM0RfSU5URU5BICAgMHgwMDAzNAo+ICsjZGVmaW5lIFYzRF9JTlRE SVMgICAweDAwMDM4Cj4gKyMgZGVmaW5lIFYzRF9JTlRfU1BJTExVU0UgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoMSA8PCAzKQo+ICsjIGRlZmluZSBWM0RfSU5UX09VVE9NRU0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKPiArIyBkZWZpbmUgVjNEX0lOVF9GTERP TkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCj4gKyMgZGVmaW5lIFYz RF9JTlRfRlJET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQo+ICsK PiArI2RlZmluZSBWM0RfQ1QwQ1MgICAgMHgwMDEwMAo+ICsjZGVmaW5lIFYzRF9DVDFDUyAgICAw eDAwMTA0Cj4gKyNkZWZpbmUgVjNEX0NUTkNTKG4pIChWM0RfQ1QwQ1MgKyA0ICogbikKPiArIyBk ZWZpbmUgVjNEX0NUUlNUQSAgICAgICgxIDw8IDE1KQo+ICsjIGRlZmluZSBWM0RfQ1RTRU1BICAg ICAgKDEgPDwgMTIpCj4gKyMgZGVmaW5lIFYzRF9DVFJUU0QgICAgICAoMSA8PCA4KQo+ICsjIGRl ZmluZSBWM0RfQ1RSVU4gICAgICAgKDEgPDwgNSkKPiArIyBkZWZpbmUgVjNEX0NUU1VCUyAgICAg ICgxIDw8IDQpCj4gKyMgZGVmaW5lIFYzRF9DVEVSUiAgICAgICAoMSA8PCAzKQo+ICsjIGRlZmlu ZSBWM0RfQ1RNT0RFICAgICAgKDEgPDwgMCkKPiArCj4gKyNkZWZpbmUgVjNEX0NUMEVBICAgIDB4 MDAxMDgKPiArI2RlZmluZSBWM0RfQ1QxRUEgICAgMHgwMDEwYwo+ICsjZGVmaW5lIFYzRF9DVE5F QShuKSAoVjNEX0NUMEVBICsgNCAqIChuKSkKPiArI2RlZmluZSBWM0RfQ1QwQ0EgICAgMHgwMDEx MAo+ICsjZGVmaW5lIFYzRF9DVDFDQSAgICAweDAwMTE0Cj4gKyNkZWZpbmUgVjNEX0NUTkNBKG4p IChWM0RfQ1QwQ0EgKyA0ICogKG4pKQo+ICsjZGVmaW5lIFYzRF9DVDAwUkEwICAweDAwMTE4Cj4g KyNkZWZpbmUgVjNEX0NUMDFSQTAgIDB4MDAxMWMKPiArI2RlZmluZSBWM0RfQ1ROUkEwKG4pIChW M0RfQ1QwMFJBMCArIDQgKiAobikpCj4gKyNkZWZpbmUgVjNEX0NUMExDICAgIDB4MDAxMjAKPiAr I2RlZmluZSBWM0RfQ1QxTEMgICAgMHgwMDEyNAo+ICsjZGVmaW5lIFYzRF9DVE5MQyhuKSAoVjNE X0NUMExDICsgNCAqIChuKSkKPiArI2RlZmluZSBWM0RfQ1QwUEMgICAgMHgwMDEyOAo+ICsjZGVm aW5lIFYzRF9DVDFQQyAgICAweDAwMTJjCj4gKyNkZWZpbmUgVjNEX0NUTlBDKG4pIChWM0RfQ1Qw UEMgKyA0ICogKG4pKQo+ICsKPiArI2RlZmluZSBWM0RfUENTICAgICAgMHgwMDEzMAo+ICsjIGRl ZmluZSBWM0RfQk1PT00gICAgICAgKDEgPDwgOCkKPiArIyBkZWZpbmUgVjNEX1JNQlVTWSAgICAg ICgxIDw8IDMpCj4gKyMgZGVmaW5lIFYzRF9STUFDVElWRSAgICAoMSA8PCAyKQo+ICsjIGRlZmlu ZSBWM0RfQk1CVVNZICAgICAgKDEgPDwgMSkKPiArIyBkZWZpbmUgVjNEX0JNQUNUSVZFICAgICgx IDw8IDApCj4gKwo+ICsjZGVmaW5lIFYzRF9CRkMgICAgICAweDAwMTM0Cj4gKyNkZWZpbmUgVjNE X1JGQyAgICAgIDB4MDAxMzgKPiArI2RlZmluZSBWM0RfQlBDQSAgICAgMHgwMDMwMAo+ICsjZGVm aW5lIFYzRF9CUENTICAgICAweDAwMzA0Cj4gKyNkZWZpbmUgVjNEX0JQT0EgICAgIDB4MDAzMDgK PiArI2RlZmluZSBWM0RfQlBPUyAgICAgMHgwMDMwYwo+ICsjZGVmaW5lIFYzRF9CWENGICAgICAw eDAwMzEwCj4gKyNkZWZpbmUgVjNEX1NRUlNWMCAgIDB4MDA0MTAKPiArI2RlZmluZSBWM0RfU1FS U1YxICAgMHgwMDQxNAo+ICsjZGVmaW5lIFYzRF9TUUNOVEwgICAweDAwNDE4Cj4gKyNkZWZpbmUg VjNEX1NSUVBDICAgIDB4MDA0MzAKPiArI2RlZmluZSBWM0RfU1JRVUEgICAgMHgwMDQzNAo+ICsj ZGVmaW5lIFYzRF9TUlFVTCAgICAweDAwNDM4Cj4gKyNkZWZpbmUgVjNEX1NSUUNTICAgIDB4MDA0 M2MKPiArI2RlZmluZSBWM0RfVlBBQ05UTCAgMHgwMDUwMAo+ICsjZGVmaW5lIFYzRF9WUE1CQVNF ICAweDAwNTA0Cj4gKyNkZWZpbmUgVjNEX1BDVFJDICAgIDB4MDA2NzAKPiArI2RlZmluZSBWM0Rf UENUUkUgICAgMHgwMDY3NAo+ICsjZGVmaW5lIFYzRF9QQ1RSMCAgICAweDAwNjgwCj4gKyNkZWZp bmUgVjNEX1BDVFJTMCAgIDB4MDA2ODQKPiArI2RlZmluZSBWM0RfUENUUjEgICAgMHgwMDY4OAo+ ICsjZGVmaW5lIFYzRF9QQ1RSUzEgICAweDAwNjhjCj4gKyNkZWZpbmUgVjNEX1BDVFIyICAgIDB4 MDA2OTAKPiArI2RlZmluZSBWM0RfUENUUlMyICAgMHgwMDY5NAo+ICsjZGVmaW5lIFYzRF9QQ1RS MyAgICAweDAwNjk4Cj4gKyNkZWZpbmUgVjNEX1BDVFJTMyAgIDB4MDA2OWMKPiArI2RlZmluZSBW M0RfUENUUjQgICAgMHgwMDZhMAo+ICsjZGVmaW5lIFYzRF9QQ1RSUzQgICAweDAwNmE0Cj4gKyNk ZWZpbmUgVjNEX1BDVFI1ICAgIDB4MDA2YTgKPiArI2RlZmluZSBWM0RfUENUUlM1ICAgMHgwMDZh Ywo+ICsjZGVmaW5lIFYzRF9QQ1RSNiAgICAweDAwNmIwCj4gKyNkZWZpbmUgVjNEX1BDVFJTNiAg IDB4MDA2YjQKPiArI2RlZmluZSBWM0RfUENUUjcgICAgMHgwMDZiOAo+ICsjZGVmaW5lIFYzRF9Q Q1RSUzcgICAweDAwNmJjCj4gKyNkZWZpbmUgVjNEX1BDVFI4ICAgIDB4MDA2YzAKPiArI2RlZmlu ZSBWM0RfUENUUlM4ICAgMHgwMDZjNAo+ICsjZGVmaW5lIFYzRF9QQ1RSOSAgICAweDAwNmM4Cj4g KyNkZWZpbmUgVjNEX1BDVFJTOSAgIDB4MDA2Y2MKPiArI2RlZmluZSBWM0RfUENUUjEwICAgMHgw MDZkMAo+ICsjZGVmaW5lIFYzRF9QQ1RSUzEwICAweDAwNmQ0Cj4gKyNkZWZpbmUgVjNEX1BDVFIx MSAgIDB4MDA2ZDgKPiArI2RlZmluZSBWM0RfUENUUlMxMSAgMHgwMDZkYwo+ICsjZGVmaW5lIFYz RF9QQ1RSMTIgICAweDAwNmUwCj4gKyNkZWZpbmUgVjNEX1BDVFJTMTIgIDB4MDA2ZTQKPiArI2Rl ZmluZSBWM0RfUENUUjEzICAgMHgwMDZlOAo+ICsjZGVmaW5lIFYzRF9QQ1RSUzEzICAweDAwNmVj Cj4gKyNkZWZpbmUgVjNEX1BDVFIxNCAgIDB4MDA2ZjAKPiArI2RlZmluZSBWM0RfUENUUlMxNCAg MHgwMDZmNAo+ICsjZGVmaW5lIFYzRF9QQ1RSMTUgICAweDAwNmY4Cj4gKyNkZWZpbmUgVjNEX1BD VFJTMTUgIDB4MDA2ZmMKPiArI2RlZmluZSBWM0RfQkdFICAgICAgMHgwMGYwMAo+ICsjZGVmaW5l IFYzRF9GREJHTyAgICAweDAwZjA0Cj4gKyNkZWZpbmUgVjNEX0ZEQkdCICAgIDB4MDBmMDgKPiAr I2RlZmluZSBWM0RfRkRCR1IgICAgMHgwMGYwYwo+ICsjZGVmaW5lIFYzRF9GREJHUyAgICAweDAw ZjEwCj4gKyNkZWZpbmUgVjNEX0VSUlNUQVQgIDB4MDBmMjAKPiArCj4gKyNkZWZpbmUgUFZfQ09O VFJPTAkJCQkweDAwCj4gKyMgZGVmaW5lIFBWX0NPTlRST0xfRk9STUFUX01BU0sJCQlWQzRfTUFT SygyMywgMjEpCj4gKyMgZGVmaW5lIFBWX0NPTlRST0xfRk9STUFUX1NISUZUCQkyMQo+ICsjIGRl ZmluZSBQVl9DT05UUk9MX0ZPUk1BVF8yNAkJCTAKPiArIyBkZWZpbmUgUFZfQ09OVFJPTF9GT1JN QVRfRFNJVl8xNgkJMQo+ICsjIGRlZmluZSBQVl9DT05UUk9MX0ZPUk1BVF9EU0lDXzE2CQkyCj4g KyMgZGVmaW5lIFBWX0NPTlRST0xfRk9STUFUX0RTSVZfMTgJCTMKPiArIyBkZWZpbmUgUFZfQ09O VFJPTF9GT1JNQVRfRFNJVl8yNAkJNAo+ICsKPiArIyBkZWZpbmUgUFZfQ09OVFJPTF9GSUZPX0xF VkVMX01BU0sJCVZDNF9NQVNLKDIwLCAxNSkKPiArIyBkZWZpbmUgUFZfQ09OVFJPTF9GSUZPX0xF VkVMX1NISUZUCQkxNQo+ICsjIGRlZmluZSBQVl9DT05UUk9MX0NMUl9BVF9TVEFSVAkJKDEgPDwg MTQpCj4gKyMgZGVmaW5lIFBWX0NPTlRST0xfVFJJR0dFUl9VTkRFUkZMT1cJCSgxIDw8IDEzKQo+ ICsjIGRlZmluZSBQVl9DT05UUk9MX1dBSVRfSFNUQVJUCQkJKDEgPDwgMTIpCj4gKyMgZGVmaW5l IFBWX0NPTlRST0xfQ0xLX1NFTEVDVF9EU0kJCTAKPiArIyBkZWZpbmUgUFZfQ09OVFJPTF9DTEtf U0VMRUNUX0RQSV9TTUlfSERNSQkxCj4gKyMgZGVmaW5lIFBWX0NPTlRST0xfQ0xLX1NFTEVDVF9N QVNLCQlWQzRfTUFTSygzLCAyKQo+ICsjIGRlZmluZSBQVl9DT05UUk9MX0NMS19TRUxFQ1RfU0hJ RlQJCTIKPiArIyBkZWZpbmUgUFZfQ09OVFJPTF9GSUZPX0NMUgkJCSgxIDw8IDEpCj4gKyMgZGVm aW5lIFBWX0NPTlRST0xfRU4JCQkJKDEgPDwgMCkKPiArCj4gKyNkZWZpbmUgUFZfVl9DT05UUk9M CQkJCTB4MDQKPiArIyBkZWZpbmUgUFZfVkNPTlRST0xfQ09OVElOVU9VUwkJCSgxIDw8IDEpCj4g KyMgZGVmaW5lIFBWX1ZDT05UUk9MX1ZJREVOCQkJKDEgPDwgMCkKPiArCj4gKyNkZWZpbmUgUFZf VlNZTkNECQkJCTB4MDgKPiArCj4gKyNkZWZpbmUgUFZfSE9SWkEJCQkJMHgwYwo+ICsjIGRlZmlu ZSBQVl9IT1JaQV9IQlBfTUFTSwkJCVZDNF9NQVNLKDMxLCAxNikKPiArIyBkZWZpbmUgUFZfSE9S WkFfSEJQX1NISUZUCQkJMTYKPiArIyBkZWZpbmUgUFZfSE9SWkFfSFNZTkNfTUFTSwkJCVZDNF9N QVNLKDE1LCAwKQo+ICsjIGRlZmluZSBQVl9IT1JaQV9IU1lOQ19TSElGVAkJCTAKPiArCj4gKyNk ZWZpbmUgUFZfSE9SWkIJCQkJMHgxMAo+ICsjIGRlZmluZSBQVl9IT1JaQl9IRlBfTUFTSwkJCVZD NF9NQVNLKDMxLCAxNikKPiArIyBkZWZpbmUgUFZfSE9SWkJfSEZQX1NISUZUCQkJMTYKPiArIyBk ZWZpbmUgUFZfSE9SWkJfSEFDVElWRV9NQVNLCQkJVkM0X01BU0soMTUsIDApCj4gKyMgZGVmaW5l IFBWX0hPUlpCX0hBQ1RJVkVfU0hJRlQJCQkwCj4gKwo+ICsjZGVmaW5lIFBWX1ZFUlRBCQkJCTB4 MTQKPiArIyBkZWZpbmUgUFZfVkVSVEFfVkJQX01BU0sJCQlWQzRfTUFTSygzMSwgMTYpCj4gKyMg ZGVmaW5lIFBWX1ZFUlRBX1ZCUF9TSElGVAkJCTE2Cj4gKyMgZGVmaW5lIFBWX1ZFUlRBX1ZTWU5D X01BU0sJCQlWQzRfTUFTSygxNSwgMCkKPiArIyBkZWZpbmUgUFZfVkVSVEFfVlNZTkNfU0hJRlQJ CQkwCj4gKwo+ICsjZGVmaW5lIFBWX1ZFUlRCCQkJCTB4MTgKPiArIyBkZWZpbmUgUFZfVkVSVEJf VkZQX01BU0sJCQlWQzRfTUFTSygzMSwgMTYpCj4gKyMgZGVmaW5lIFBWX1ZFUlRCX1ZGUF9TSElG VAkJCTE2Cj4gKyMgZGVmaW5lIFBWX1ZFUlRCX1ZBQ1RJVkVfTUFTSwkJCVZDNF9NQVNLKDE1LCAw KQo+ICsjIGRlZmluZSBQVl9WRVJUQl9WQUNUSVZFX1NISUZUCQkJMAo+ICsKPiArI2RlZmluZSBQ Vl9WRVJUQV9FVkVOCQkJCTB4MWMKPiArI2RlZmluZSBQVl9WRVJUQl9FVkVOCQkJCTB4MjAKPiAr Cj4gKyNkZWZpbmUgUFZfSU5URU4JCQkJMHgyNAo+ICsjZGVmaW5lIFBWX0lOVFNUQVQJCQkJMHgy OAo+ICsjIGRlZmluZSBQVl9JTlRfVklEX0lETEUJCQkoMSA8PCA5KQo+ICsjIGRlZmluZSBQVl9J TlRfVkZQX0VORAkJCQkoMSA8PCA4KQo+ICsjIGRlZmluZSBQVl9JTlRfVkZQX1NUQVJUCQkJKDEg PDwgNykKPiArIyBkZWZpbmUgUFZfSU5UX1ZBQ1RfU1RBUlQJCQkoMSA8PCA2KQo+ICsjIGRlZmlu ZSBQVl9JTlRfVkJQX1NUQVJUCQkJKDEgPDwgNSkKPiArIyBkZWZpbmUgUFZfSU5UX1ZTWU5DX1NU QVJUCQkJKDEgPDwgNCkKPiArIyBkZWZpbmUgUFZfSU5UX0hGUF9TVEFSVAkJCSgxIDw8IDMpCj4g KyMgZGVmaW5lIFBWX0lOVF9IQUNUX1NUQVJUCQkJKDEgPDwgMikKPiArIyBkZWZpbmUgUFZfSU5U X0hCUF9TVEFSVAkJCSgxIDw8IDEpCj4gKyMgZGVmaW5lIFBWX0lOVF9IU1lOQ19TVEFSVAkJCSgx IDw8IDApCj4gKwo+ICsjZGVmaW5lIFBWX1NUQVQJCQkJCTB4MmMKPiArCj4gKyNkZWZpbmUgUFZf SEFDVF9BQ1QJCQkJMHgzMAo+ICsKPiArI2RlZmluZSBTQ0FMRVJfRElTUENUUkwgICAgICAgICAg ICAgICAgICAgICAgICAgMHgwMDAwMDAwMAo+ICsvKiBHbG9iYWwgcmVnaXN0ZXIgZm9yIGNsb2Nr IGdhdGluZyB0aGUgSFZTICovCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9FTkFCTEUJCQko MSA8PCAzMSkKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX0RTUDJFSVNMVVIJCSgxIDw8IDE1 KQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRFNQMUVJU0xVUgkJKDEgPDwgMTQpCj4gKy8q IEVuYWJsZXMgRGlzcGxheSAwIHNob3J0IGxpbmUgYW5kIHVuZGVycnVuIGNvbnRyaWJ1dGlvbiB0 bwo+ICsgKiBTQ0FMRVJfRElTUFNUQVRfSVJRRElTUDAuICBOb3RlIHRoYXQgc2hvcnQgZnJhbWUg Y29udHJpYnV0aW9ucyBhcmUKPiArICogYWx3YXlzIGVuYWJsZWQuCj4gKyAqLwo+ICsjIGRlZmlu ZSBTQ0FMRVJfRElTUENUUkxfRFNQMEVJU0xVUgkJKDEgPDwgMTMpCj4gKyMgZGVmaW5lIFNDQUxF Ul9ESVNQQ1RSTF9EU1AyRUlFT0xOCQkoMSA8PCAxMikKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BD VFJMX0RTUDJFSUVPRgkJKDEgPDwgMTEpCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9EU1Ax RUlFT0xOCQkoMSA8PCAxMCkKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX0RTUDFFSUVPRgkJ KDEgPDwgOSkKPiArLyogRW5hYmxlcyBEaXNwbGF5IDAgZW5kLW9mLWxpbmUtTiBjb250cmlidXRp b24gdG8KPiArICogU0NBTEVSX0RJU1BTVEFUX0lSUURJU1AwCj4gKyAqLwo+ICsjIGRlZmluZSBT Q0FMRVJfRElTUENUUkxfRFNQMEVJRU9MTgkJKDEgPDwgOCkKPiArLyogRW5hYmxlcyBEaXNwbGF5 IDAgRU9GIGNvbnRyaWJ1dGlvbiB0byBTQ0FMRVJfRElTUFNUQVRfSVJRRElTUDAgKi8KPiArIyBk ZWZpbmUgU0NBTEVSX0RJU1BDVFJMX0RTUDBFSUVPRgkJKDEgPDwgNykKPiArCj4gKyMgZGVmaW5l IFNDQUxFUl9ESVNQQ1RSTF9TTFZSREVJUlEJCSgxIDw8IDYpCj4gKyMgZGVmaW5lIFNDQUxFUl9E SVNQQ1RSTF9TTFZXUkVJUlEJCSgxIDw8IDUpCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9E TUFFSVJRCQkoMSA8PCA0KQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRElTUDJFSVJRCQko MSA8PCAzKQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRElTUDFFSVJRCQkoMSA8PCAyKQo+ ICsvKiBFbmFibGVzIGludGVycnVwdCBnZW5lcmF0aW9uIG9uIHRoZSBlbmFibGVkIEVPRi9FT0xO L0VJU0xVUgo+ICsgKiBiaXRzIGFuZCBzaG9ydCBmcmFtZXMuLgo+ICsgKi8KPiArIyBkZWZpbmUg U0NBTEVSX0RJU1BDVFJMX0RJU1AwRUlSUQkJKDEgPDwgMSkKPiArLyogRW5hYmxlcyBpbnRlcnJ1 cHQgZ2VuZXJhdGlvbiBvbiBzY2FsZXIgcHJvZmlsZXIgaW50ZXJydXB0LiAqLwo+ICsjIGRlZmlu ZSBTQ0FMRVJfRElTUENUUkxfU0NMRUlSUQkJKDEgPDwgMCkKPiArCj4gKyNkZWZpbmUgU0NBTEVS X0RJU1BTVEFUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKPiArIyBkZWZpbmUg U0NBTEVSX0RJU1BTVEFUX0NPQkxPVzIJCSgxIDw8IDI5KQo+ICsjIGRlZmluZSBTQ0FMRVJfRElT UFNUQVRfRU9MTjIJCQkoMSA8PCAyOCkKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VTRlJB TUUyCQkoMSA8PCAyNykKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VTTElORTIJCSgxIDw8 IDI2KQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRVVGTE9XMgkJKDEgPDwgMjUpCj4gKyMg ZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9FT0YyCQkJKDEgPDwgMjQpCj4gKwo+ICsjIGRlZmluZSBT Q0FMRVJfRElTUFNUQVRfQ09CTE9XMQkJKDEgPDwgMjEpCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQ U1RBVF9FT0xOMQkJCSgxIDw8IDIwKQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRVNGUkFN RTEJCSgxIDw8IDE5KQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRVNMSU5FMQkJKDEgPDwg MTgpCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9FVUZMT1cxCQkoMSA8PCAxNykKPiArIyBk ZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VPRjEJCQkoMSA8PCAxNikKPiArCj4gKyMgZGVmaW5lIFND QUxFUl9ESVNQU1RBVF9SRVNQX01BU0sJCVZDNF9NQVNLKDE1LCAxNCkKPiArIyBkZWZpbmUgU0NB TEVSX0RJU1BTVEFUX1JFU1BfU0hJRlQJCTE0Cj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9S RVNQX09LQVkJCTAKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX1JFU1BfRVhPS0FZCQkxCj4g KyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9SRVNQX1NMVkVSUgkJMgo+ICsjIGRlZmluZSBTQ0FM RVJfRElTUFNUQVRfUkVTUF9ERUNFUlIJCTMKPiArCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RB VF9DT0JMT1cwCQkoMSA8PCAxMykKPiArLyogU2V0IHdoZW4gdGhlIERJU1BFT0xOIGxpbmUgaXMg ZG9uZSBjb21wb3NpdGluZy4gKi8KPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VPTE4wCQkJ KDEgPDwgMTIpCj4gKy8qIFNldCB3aGVuIFZTVEFSVCBpcyBzZWVuIGJ1dCB0aGVyZSBhcmUgc3Rp bGwgcGl4ZWxzIGluIHRoZSBjdXJyZW50Cj4gKyAqIG91dHB1dCBsaW5lLgo+ICsgKi8KPiArIyBk ZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VTRlJBTUUwCQkoMSA8PCAxMSkKPiArLyogU2V0IHdoZW4g SFNUQVJUIGlzIHNlZW4gYnV0IHRoZXJlIGFyZSBzdGlsbCBwaXhlbHMgaW4gdGhlIGN1cnJlbnQK PiArICogb3V0cHV0IGxpbmUuCj4gKyAqLwo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRVNM SU5FMAkJKDEgPDwgMTApCj4gKy8qIFNldCB3aGVuIHRoZSB0aGUgZG93bnN0cmVhbSB0cmllcyB0 byByZWFkIGZyb20gdGhlIGRpc3BsYXkgRklGTwo+ICsgKiB3aGlsZSBpdCdzIGVtcHR5Lgo+ICsg Ki8KPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VVRkxPVzAJCSgxIDw8IDkpCj4gKy8qIFNl dCB3aGVuIHRoZSBkaXNwbGF5IG1vZGUgY2hhbmdlcyBmcm9tIFJVTiB0byBFT0YgKi8KPiArIyBk ZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VPRjAJCQkoMSA8PCA4KQo+ICsKPiArLyogU2V0IG9uIEFY SSBpbnZhbGlkIERNQSBJRCBlcnJvci4gKi8KPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0RN QV9FUlJPUgkJKDEgPDwgNykKPiArLyogU2V0IG9uIEFYSSBzbGF2ZSByZWFkIGRlY29kZSBlcnJv ciAqLwo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfSVJRU0xWUkQJCSgxIDw8IDYpCj4gKy8q IFNldCBvbiBBWEkgc2xhdmUgd3JpdGUgZGVjb2RlIGVycm9yICovCj4gKyMgZGVmaW5lIFNDQUxF Ul9ESVNQU1RBVF9JUlFTTFZXUgkJKDEgPDwgNSkKPiArLyogU2V0IHdoZW4gU0NBTEVSX0RJU1BT VEFUX0RNQV9FUlJPUiBpcyBzZXQsIG9yCj4gKyAqIFNDQUxFUl9ESVNQU1RBVF9SRVNQX0VSUk9S IGlzIG5vdCBTQ0FMRVJfRElTUFNUQVRfUkVTUF9PS0FZLgo+ICsgKi8KPiArIyBkZWZpbmUgU0NB TEVSX0RJU1BTVEFUX0lSUURNQQkJCSgxIDw8IDQpCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RB VF9JUlFESVNQMgkJKDEgPDwgMykKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0lSUURJU1Ax CQkoMSA8PCAyKQo+ICsvKiBTZXQgd2hlbiBhbnkgb2YgdGhlIEVPRi9FT0xOL0VTRlJBTUUvRVNM SU5FIGJpdHMgYXJlIHNldCBhbmQgdGhlaXIKPiArICogY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQg Yml0IGlzIGVuYWJsZWQgaW4gRElTUENUUkwuCj4gKyAqLwo+ICsjIGRlZmluZSBTQ0FMRVJfRElT UFNUQVRfSVJRRElTUDAJCSgxIDw8IDEpCj4gKy8qIE9uIHJlYWQsIHRoZSBwcm9maWxlciBpbnRl cnJ1cHQuICBPbiB3cml0ZSwgY2xlYXIgKmFsbCogaW50ZXJydXB0IGJpdHMuICovCj4gKyMgZGVm aW5lIFNDQUxFUl9ESVNQU1RBVF9JUlFTQ0wJCQkoMSA8PCAwKQo+ICsKPiArI2RlZmluZSBTQ0FM RVJfRElTUElEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAo+ICsjZGVmaW5l IFNDQUxFUl9ESVNQRUNUUkwgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCj4gKyNk ZWZpbmUgU0NBTEVSX0RJU1BQUk9GICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAK PiArI2RlZmluZSBTQ0FMRVJfRElTUERJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAw MDAxNAo+ICsjZGVmaW5lIFNDQUxFUl9ESVNQRU9MTiAgICAgICAgICAgICAgICAgICAgICAgICAw eDAwMDAwMDE4Cj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BMSVNUMCAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAwMDAwMjAKPiArI2RlZmluZSBTQ0FMRVJfRElTUExJU1QxICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMDAwMDAyNAo+ICsjZGVmaW5lIFNDQUxFUl9ESVNQTElTVDIgICAgICAgICAg ICAgICAgICAgICAgICAweDAwMDAwMDI4Cj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BMU1RBVCAgICAg ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMmMKPiArI2RlZmluZSBTQ0FMRVJfRElTUExJU1RY KHgpCQkJKFNDQUxFUl9ESVNQTElTVDAgKwlcCj4gKwkJCQkJCSAoeCkgKiAoU0NBTEVSX0RJU1BM SVNUMSAtIFwKPiArCQkJCQkJCVNDQUxFUl9ESVNQTElTVDApKQo+ICsKPiArI2RlZmluZSBTQ0FM RVJfRElTUExBQ1QwICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAo+ICsjZGVmaW5l IFNDQUxFUl9ESVNQTEFDVDEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0Cj4gKyNk ZWZpbmUgU0NBTEVSX0RJU1BMQUNUMiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgK PiArI2RlZmluZSBTQ0FMRVJfRElTUENUUkwwICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAw MDA0MAo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxYX0VOQUJMRQkJKDEgPDwgMzEpCj4gKyMg ZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTFhfUkVTRVQJCQkoMSA8PCAzMCkKPiArIyBkZWZpbmUgU0NB TEVSX0RJU1BDVFJMWF9XSURUSF9NQVNLCQlWQzRfTUFTSygyMywgMTIpCj4gKyMgZGVmaW5lIFND QUxFUl9ESVNQQ1RSTFhfV0lEVEhfU0hJRlQJCTEyCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RS TFhfSEVJR0hUX01BU0sJCVZDNF9NQVNLKDExLCAwKQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUENU UkxYX0hFSUdIVF9TSElGVAkJMAo+ICsKPiArI2RlZmluZSBTQ0FMRVJfRElTUEJLR05EMCAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAo+ICsjZGVmaW5lIFNDQUxFUl9ESVNQU1RBVDAg ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4Cj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BC QVNFMCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNGMKPiArIyBkZWZpbmUgU0NBTEVS X0RJU1BTVEFUWF9NT0RFX01BU0sJCVZDNF9NQVNLKDMxLCAzMCkKPiArIyBkZWZpbmUgU0NBTEVS X0RJU1BTVEFUWF9NT0RFX1NISUZUCQkzMAo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRYX01P REVfRElTQUJMRUQJCTAKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUWF9NT0RFX0lOSVQJCTEK PiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUWF9NT0RFX1JVTgkJMgo+ICsjIGRlZmluZSBTQ0FM RVJfRElTUFNUQVRYX01PREVfRU9GCQkzCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVFhfRlVM TAkJCSgxIDw8IDI5KQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRYX0VNUFRZCQkJKDEgPDwg MjgpCj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BDVFJMMSAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDAwMDAwNTAKPiArI2RlZmluZSBTQ0FMRVJfRElTUEJLR05EMSAgICAgICAgICAgICAgICAgICAg ICAgMHgwMDAwMDA1NAo+ICsjZGVmaW5lIFNDQUxFUl9ESVNQU1RBVDEgICAgICAgICAgICAgICAg ICAgICAgICAweDAwMDAwMDU4Cj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BTVEFUWCh4KQkJCShTQ0FM RVJfRElTUFNUQVQwICsgICAgICAgIFwKPiArCQkJCQkJICh4KSAqIChTQ0FMRVJfRElTUFNUQVQx IC0gXAo+ICsJCQkJCQkJU0NBTEVSX0RJU1BTVEFUMCkpCj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BC QVNFMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNWMKPiArI2RlZmluZSBTQ0FMRVJf RElTUENUUkwyICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAo+ICsjZGVmaW5lIFND QUxFUl9ESVNQQ1RSTFgoeCkJCQkoU0NBTEVSX0RJU1BDVFJMMCArICAgICAgICBcCj4gKwkJCQkJ CSAoeCkgKiAoU0NBTEVSX0RJU1BDVFJMMSAtIFwKPiArCQkJCQkJCVNDQUxFUl9ESVNQQ1RSTDAp KQo+ICsjZGVmaW5lIFNDQUxFUl9ESVNQQktHTkQyICAgICAgICAgICAgICAgICAgICAgICAweDAw MDAwMDY0Cj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BTVEFUMiAgICAgICAgICAgICAgICAgICAgICAg IDB4MDAwMDAwNjgKPiArI2RlZmluZSBTQ0FMRVJfRElTUEJBU0UyICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDAwMDA2Ywo+ICsjZGVmaW5lIFNDQUxFUl9ESVNQQUxQSEEyICAgICAgICAgICAg ICAgICAgICAgICAweDAwMDAwMDcwCj4gKyNkZWZpbmUgU0NBTEVSX0dBTUFERFIgICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKPiArI2RlZmluZSBTQ0FMRVJfR0FNREFUQSAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlMAo+ICsjZGVmaW5lIFNDQUxFUl9ETElTVF9T VEFSVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCj4gKyNkZWZpbmUgU0NBTEVSX0RM SVNUX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKPiArCj4gKyNkZWZpbmUg VkM0X0hETUlfQ09SRV9SRVYJCQkweDAwMAo+ICsKPiArI2RlZmluZSBWQzRfSERNSV9TV19SRVNF VF9DT05UUk9MCQkweDAwNAo+ICsjIGRlZmluZSBWQzRfSERNSV9TV19SRVNFVF9GT1JNQVRfREVU RUNUCSgxIDw8IDEpCj4gKyMgZGVmaW5lIFZDNF9IRE1JX1NXX1JFU0VUX0hETUkJCQkoMSA8PCAw KQo+ICsKPiArI2RlZmluZSBWQzRfSERNSV9IT1RQTFVHX0lOVAkJCTB4MDA4Cj4gKwo+ICsjZGVm aW5lIFZDNF9IRE1JX0hPVFBMVUcJCQkweDAwYwo+ICsjIGRlZmluZSBWQzRfSERNSV9IT1RQTFVH X0NPTk5FQ1RFRAkJKDEgPDwgMCkKPiArCj4gKyNkZWZpbmUgVkM0X0hETUlfUkFNX1BBQ0tFVF9D T05GSUcJCTB4MGEwCj4gKyMgZGVmaW5lIFZDNF9IRE1JX1JBTV9QQUNLRVRfRU5BQkxFCQkoMSA8 PCAxNikKPiArCj4gKyNkZWZpbmUgVkM0X0hETUlfSE9SWkEJCQkJMHgwYzQKPiArIyBkZWZpbmUg VkM0X0hETUlfSE9SWkFfVlBPUwkJCSgxIDw8IDE0KQo+ICsjIGRlZmluZSBWQzRfSERNSV9IT1Ja QV9IUE9TCQkJKDEgPDwgMTMpCj4gKy8qIEhvcml6b250YWwgYWN0aXZlIHBpeGVscyAoaGRpc3Bs YXkpLiAqLwo+ICsjIGRlZmluZSBWQzRfSERNSV9IT1JaQV9IQVBfTUFTSwkJVkM0X01BU0soMTIs IDApCj4gKyMgZGVmaW5lIFZDNF9IRE1JX0hPUlpBX0hBUF9TSElGVAkJMAo+ICsKPiArI2RlZmlu ZSBWQzRfSERNSV9IT1JaQgkJCQkweDBjOAo+ICsvKiBIb3Jpem9udGFsIHBhY2sgcG9yY2ggKGh0 b3RhbCAtIGhzeW5jX2VuZCkuICovCj4gKyMgZGVmaW5lIFZDNF9IRE1JX0hPUlpCX0hCUF9NQVNL CQlWQzRfTUFTSygyOSwgMjApCj4gKyMgZGVmaW5lIFZDNF9IRE1JX0hPUlpCX0hCUF9TSElGVAkJ MjAKPiArLyogSG9yaXpvbnRhbCBzeW5jIHB1bHNlIChoc3luY19lbmQgLSBoc3luY19zdGFydCku ICovCj4gKyMgZGVmaW5lIFZDNF9IRE1JX0hPUlpCX0hTUF9NQVNLCQlWQzRfTUFTSygxOSwgMTAp Cj4gKyMgZGVmaW5lIFZDNF9IRE1JX0hPUlpCX0hTUF9TSElGVAkJMTAKPiArLyogSG9yaXpvbnRh bCBmcm9udCBwb3JjaCAoaHN5bmNfc3RhcnQgLSBoZGlzcGxheSkuICovCj4gKyMgZGVmaW5lIFZD NF9IRE1JX0hPUlpCX0hGUF9NQVNLCQlWQzRfTUFTSyg5LCAwKQo+ICsjIGRlZmluZSBWQzRfSERN SV9IT1JaQl9IRlBfU0hJRlQJCTAKPiArCj4gKyNkZWZpbmUgVkM0X0hETUlfRklGT19DVEwJCQkw eDA1Ywo+ICsjIGRlZmluZSBWQzRfSERNSV9GSUZPX0NUTF9SRUNFTlRFUl9ET05FCSgxIDw8IDE0 KQo+ICsjIGRlZmluZSBWQzRfSERNSV9GSUZPX0NUTF9VU0VfRU1QVFkJCSgxIDw8IDEzKQo+ICsj IGRlZmluZSBWQzRfSERNSV9GSUZPX0NUTF9PTl9WQgkJKDEgPDwgNykKPiArIyBkZWZpbmUgVkM0 X0hETUlfRklGT19DVExfUkVDRU5URVIJCSgxIDw8IDYpCj4gKyMgZGVmaW5lIFZDNF9IRE1JX0ZJ Rk9fQ1RMX0ZJRk9fUkVTRVQJCSgxIDw8IDUpCj4gKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RM X1VTRV9QTExfTE9DSwkJKDEgPDwgNCkKPiArIyBkZWZpbmUgVkM0X0hETUlfRklGT19DVExfSU5W X0NMS19YRlIJCSgxIDw8IDMpCj4gKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX0NBUFRVUkVf UFRSCQkoMSA8PCAyKQo+ICsjIGRlZmluZSBWQzRfSERNSV9GSUZPX0NUTF9VU0VfRlVMTAkJKDEg PDwgMSkKPiArIyBkZWZpbmUgVkM0X0hETUlfRklGT19DVExfTUFTVEVSX1NMQVZFX04JKDEgPDwg MCkKPiArIyBkZWZpbmUgVkM0X0hETUlfRklGT19WQUxJRF9XUklURV9NQVNLCQkweGVmZmYKPiAr Cj4gKyNkZWZpbmUgVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0wJCTB4MGMwCj4gKyMgZGVmaW5l IFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MX01BTlVBTF9GT1JNQVQgKDEgPDwgMTUpCj4gKyMg ZGVmaW5lIFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MX0lHTk9SRV9WU1lOQ19QUkVESUNUUyAo MSA8PCA1KQo+ICsjIGRlZmluZSBWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9WRVJUX0FMV0FZ U19LRUVQT1VUCSgxIDw8IDMpCj4gKyMgZGVmaW5lIFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9M X0hETUlfQUNUSVZFCSgxIDw8IDEpCj4gKyMgZGVmaW5lIFZDNF9IRE1JX1NDSEVEVUxFUl9DT05U Uk9MX01PREVfSERNSQkoMSA8PCAwKQo+ICsKPiArI2RlZmluZSBWQzRfSERNSV9WRVJUQTAJCQkJ MHgwY2MKPiArI2RlZmluZSBWQzRfSERNSV9WRVJUQTEJCQkJMHgwZDQKPiArLyogVmVydGljYWwg c3luYyBwdWxzZSAodnN5bmNfZW5kIC0gdnN5bmNfc3RhcnQpLiAqLwo+ICsjIGRlZmluZSBWQzRf SERNSV9WRVJUQV9WU1BfTUFTSwkJVkM0X01BU0soMjQsIDIwKQo+ICsjIGRlZmluZSBWQzRfSERN SV9WRVJUQV9WU1BfU0hJRlQJCTIwCj4gKy8qIFZlcnRpY2FsIGZyb250IHBvcmNoICh2c3luY19z dGFydCAtIHZkaXNwbGF5KS4gKi8KPiArIyBkZWZpbmUgVkM0X0hETUlfVkVSVEFfVkZQX01BU0sJ CVZDNF9NQVNLKDE5LCAxMykKPiArIyBkZWZpbmUgVkM0X0hETUlfVkVSVEFfVkZQX1NISUZUCQkx Mwo+ICsvKiBWZXJ0aWNhbCBhY3RpdmUgbGluZXMgKHZkaXNwbGF5KS4gKi8KPiArIyBkZWZpbmUg VkM0X0hETUlfVkVSVEFfVkFMX01BU0sJCVZDNF9NQVNLKDEyLCAwKQo+ICsjIGRlZmluZSBWQzRf SERNSV9WRVJUQV9WQUxfU0hJRlQJCTAKPiArCj4gKyNkZWZpbmUgVkM0X0hETUlfVkVSVEIwCQkJ CTB4MGQwCj4gKyNkZWZpbmUgVkM0X0hETUlfVkVSVEIxCQkJCTB4MGQ4Cj4gKy8qIFZlcnRpY2Fs IHN5bmMgcHVsc2Ugb2Zmc2V0IChmb3IgaW50ZXJsYWNlZCkgKi8KPiArIyBkZWZpbmUgVkM0X0hE TUlfVkVSVEJfVlNQT19NQVNLCQlWQzRfTUFTSygyMSwgOSkKPiArIyBkZWZpbmUgVkM0X0hETUlf VkVSVEJfVlNQT19TSElGVAkJOQo+ICsvKiBWZXJ0aWNhbCBwYWNrIHBvcmNoICh2dG90YWwgLSB2 c3luY19lbmQpLiAqLwo+ICsjIGRlZmluZSBWQzRfSERNSV9WRVJUQl9WQlBfTUFTSwkJVkM0X01B U0soOCwgMCkKPiArIyBkZWZpbmUgVkM0X0hETUlfVkVSVEJfVkJQX1NISUZUCQkwCj4gKwo+ICsj ZGVmaW5lIFZDNF9IRE1JX1RYX1BIWV9SRVNFVF9DVEwJCTB4MmMwCj4gKwo+ICsjZGVmaW5lIFZD NF9IRF9NX0NUTAkJCQkweDAwYwo+ICsjIGRlZmluZSBWQzRfSERfTV9TV19SU1QJCQkoMSA8PCAy KQo+ICsjIGRlZmluZSBWQzRfSERfTV9FTkFCTEUJCQkoMSA8PCAwKQo+ICsKPiArI2RlZmluZSBW QzRfSERfTUFJX0NUTAkJCQkweDAxNAo+ICsKPiArI2RlZmluZSBWQzRfSERfVklEX0NUTAkJCQkw eDAzOAo+ICsjIGRlZmluZSBWQzRfSERfVklEX0NUTF9FTkFCTEUJCQkoMSA8PCAzMSkKPiArIyBk ZWZpbmUgVkM0X0hEX1ZJRF9DVExfVU5ERVJGTE9XX0VOQUJMRQkoMSA8PCAzMCkKPiArIyBkZWZp bmUgVkM0X0hEX1ZJRF9DVExfRlJBTUVfQ09VTlRFUl9SRVNFVAkoMSA8PCAyOSkKPiArIyBkZWZp bmUgVkM0X0hEX1ZJRF9DVExfVlNZTkNfTE9XCQkoMSA8PCAyOCkKPiArIyBkZWZpbmUgVkM0X0hE X1ZJRF9DVExfSFNZTkNfTE9XCQkoMSA8PCAyNykKPiArCj4gKyNkZWZpbmUgVkM0X0hEX0NTQ19D VEwJCQkJMHgwNDAKPiArIyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfT1JERVJfTUFTSwkJVkM0X01B U0soNywgNSkKPiArIyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfT1JERVJfU0hJRlQJCTUKPiArIyBk ZWZpbmUgVkM0X0hEX0NTQ19DVExfT1JERVJfUkdCCQkwCj4gKyMgZGVmaW5lIFZDNF9IRF9DU0Nf Q1RMX09SREVSX0JHUgkJMQo+ICsjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9PUkRFUl9CUkcJCTIK PiArIyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfT1JERVJfR1JCCQkzCj4gKyMgZGVmaW5lIFZDNF9I RF9DU0NfQ1RMX09SREVSX0dCUgkJNAo+ICsjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9PUkRFUl9S QkcJCTUKPiArIyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfUEFETVNCCQkJKDEgPDwgNCkKPiArIyBk ZWZpbmUgVkM0X0hEX0NTQ19DVExfTU9ERV9NQVNLCQlWQzRfTUFTSygzLCAyKQo+ICsjIGRlZmlu ZSBWQzRfSERfQ1NDX0NUTF9NT0RFX1NISUZUCQkyCj4gKyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RM X01PREVfUkdCX1RPX1NEX1lQUlBCCTAKPiArIyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfTU9ERV9S R0JfVE9fSERfWVBSUEIJMQo+ICsjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9NT0RFX0NVU1RPTQkJ Mgo+ICsjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9SR0IyWUNDCQkJKDEgPDwgMSkKPiArIyBkZWZp bmUgVkM0X0hEX0NTQ19DVExfRU5BQkxFCQkJKDEgPDwgMCkKPiArCj4gKyNkZWZpbmUgVkM0X0hE X0ZSQU1FX0NPVU5UCQkJMHgwNjgKPiArCj4gKy8qIEhWUyBkaXNwbGF5IGxpc3QgaW5mb3JtYXRp b24uICovCj4gKyNkZWZpbmUgSFZTX0JPT1RMT0FERVJfRExJU1RfRU5EICAgICAgICAgICAgICAg IDMyCj4gKwo+ICtlbnVtIGh2c19waXhlbF9mb3JtYXQgewo+ICsJLyogOGJwcCAqLwo+ICsJSFZT X1BJWEVMX0ZPUk1BVF9SR0IzMzIgPSAwLAo+ICsJLyogMTZicHAgKi8KPiArCUhWU19QSVhFTF9G T1JNQVRfUkdCQTQ0NDQgPSAxLAo+ICsJSFZTX1BJWEVMX0ZPUk1BVF9SR0I1NTUgPSAyLAo+ICsJ SFZTX1BJWEVMX0ZPUk1BVF9SR0JBNTU1MSA9IDMsCj4gKwlIVlNfUElYRUxfRk9STUFUX1JHQjU2 NSA9IDQsCj4gKwkvKiAyNGJwcCAqLwo+ICsJSFZTX1BJWEVMX0ZPUk1BVF9SR0I4ODggPSA1LAo+ ICsJSFZTX1BJWEVMX0ZPUk1BVF9SR0JBNjY2NiA9IDYsCj4gKwkvKiAzMmJwcCAqLwo+ICsJSFZT X1BJWEVMX0ZPUk1BVF9SR0JBODg4OCA9IDcKPiArfTsKPiArCj4gKy8qIE5vdGU6IHRoZSBMU0Ig aXMgdGhlIHJpZ2h0bW9zdCBjaGFyYWN0ZXIgc2hvd24uICBPbmx5IHZhbGlkIGZvcgo+ICsgKiBI VlNfUElYRUxfRk9STUFUX1JHQjg4ODgsIG5vdCBSR0I4ODguCj4gKyAqLwo+ICsjZGVmaW5lIEhW U19QSVhFTF9PUkRFUl9SR0JBCQkJMAo+ICsjZGVmaW5lIEhWU19QSVhFTF9PUkRFUl9CR1JBCQkJ MQo+ICsjZGVmaW5lIEhWU19QSVhFTF9PUkRFUl9BUkdCCQkJMgo+ICsjZGVmaW5lIEhWU19QSVhF TF9PUkRFUl9BQkdSCQkJMwo+ICsKPiArI2RlZmluZSBIVlNfUElYRUxfT1JERVJfWEJSRwkJCTAK PiArI2RlZmluZSBIVlNfUElYRUxfT1JERVJfWFJCRwkJCTEKPiArI2RlZmluZSBIVlNfUElYRUxf T1JERVJfWFJHQgkJCTIKPiArI2RlZmluZSBIVlNfUElYRUxfT1JERVJfWEJHUgkJCTMKPiArCj4g KyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1hZQ0JDUgkJCTAKPiArI2RlZmluZSBIVlNfUElYRUxf T1JERVJfWFlDUkNCCQkJMQo+ICsjZGVmaW5lIEhWU19QSVhFTF9PUkRFUl9ZWENCQ1IJCQkyCj4g KyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1lYQ1JDQgkJCTMKPiArCj4gKyNkZWZpbmUgU0NBTEVS X0NUTDBfRU5ECQkJCSgxIDw8IDMxKQo+ICsjZGVmaW5lIFNDQUxFUl9DVEwwX1ZBTElECQkJKDEg PDwgMzApCj4gKwo+ICsjZGVmaW5lIFNDQUxFUl9DVEwwX1NJWkVfTUFTSwkJCVZDNF9NQVNLKDI5 LCAyNCkKPiArI2RlZmluZSBTQ0FMRVJfQ1RMMF9TSVpFX1NISUZUCQkJMjQKPiArCj4gKyNkZWZp bmUgU0NBTEVSX0NUTDBfSEZMSVAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQo+ICsj ZGVmaW5lIFNDQUxFUl9DVEwwX1ZGTElQICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkK PiArCj4gKyNkZWZpbmUgU0NBTEVSX0NUTDBfT1JERVJfTUFTSwkJCVZDNF9NQVNLKDE0LCAxMykK PiArI2RlZmluZSBTQ0FMRVJfQ1RMMF9PUkRFUl9TSElGVAkJCTEzCj4gKwo+ICsvKiBTZXQgdG8g aW5kaWNhdGUgbm8gc2NhbGluZy4gKi8KPiArI2RlZmluZSBTQ0FMRVJfQ1RMMF9VTklUWQkJCSgx IDw8IDQpCj4gKwo+ICsjZGVmaW5lIFNDQUxFUl9DVEwwX1BJWEVMX0ZPUk1BVF9NQVNLCQlWQzRf TUFTSygzLCAwKQo+ICsjZGVmaW5lIFNDQUxFUl9DVEwwX1BJWEVMX0ZPUk1BVF9TSElGVAkJMAo+ ICsKPiArI2RlZmluZSBTQ0FMRVJfUE9TMF9GSVhFRF9BTFBIQV9NQVNLCQlWQzRfTUFTSygzMSwg MjQpCj4gKyNkZWZpbmUgU0NBTEVSX1BPUzBfRklYRURfQUxQSEFfU0hJRlQJCTI0Cj4gKwo+ICsj ZGVmaW5lIFNDQUxFUl9QT1MwX1NUQVJUX1lfTUFTSwkJVkM0X01BU0soMjMsIDEyKQo+ICsjZGVm aW5lIFNDQUxFUl9QT1MwX1NUQVJUX1lfU0hJRlQJCTEyCj4gKwo+ICsjZGVmaW5lIFNDQUxFUl9Q T1MwX1NUQVJUX1hfTUFTSwkJVkM0X01BU0soMTEsIDApCj4gKyNkZWZpbmUgU0NBTEVSX1BPUzBf U1RBUlRfWF9TSElGVAkJMAo+ICsKPiArI2RlZmluZSBTQ0FMRVJfUE9TMl9BTFBIQV9NT0RFX01B U0sJCVZDNF9NQVNLKDMxLCAzMCkKPiArI2RlZmluZSBTQ0FMRVJfUE9TMl9BTFBIQV9NT0RFX1NI SUZUCQkzMAo+ICsjZGVmaW5lIFNDQUxFUl9QT1MyX0FMUEhBX01PREVfUElQRUxJTkUJCTAKPiAr I2RlZmluZSBTQ0FMRVJfUE9TMl9BTFBIQV9NT0RFX0ZJWEVECQkxCj4gKyNkZWZpbmUgU0NBTEVS X1BPUzJfQUxQSEFfTU9ERV9GSVhFRF9OT05aRVJPCTIKPiArI2RlZmluZSBTQ0FMRVJfUE9TMl9B TFBIQV9NT0RFX0ZJWEVEX09WRVJfMHgwNwkzCj4gKwo+ICsjZGVmaW5lIFNDQUxFUl9QT1MyX0hF SUdIVF9NQVNLCQkJVkM0X01BU0soMjcsIDE2KQo+ICsjZGVmaW5lIFNDQUxFUl9QT1MyX0hFSUdI VF9TSElGVAkJMTYKPiArCj4gKyNkZWZpbmUgU0NBTEVSX1BPUzJfV0lEVEhfTUFTSwkJCVZDNF9N QVNLKDExLCAwKQo+ICsjZGVmaW5lIFNDQUxFUl9QT1MyX1dJRFRIX1NISUZUCQkJMAo+ICsKPiAr I2RlZmluZSBTQ0FMRVJfU1JDX1BJVENIX01BU0sJCQlWQzRfTUFTSygxNSwgMCkKPiArI2RlZmlu ZSBTQ0FMRVJfU1JDX1BJVENIX1NISUZUCQkJMAo+IC0tIAo+IDIuMS40Cj4gCj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApEYW5pZWwgVmV0 dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZnds bC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=