From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH] Add virtio gpu driver. Date: Tue, 24 Mar 2015 18:04:24 +0100 Message-ID: <20150324171629-mutt-send-email-mst@redhat.com> References: <1427213239-8775-1-git-send-email-kraxel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1427213239-8775-1-git-send-email-kraxel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Gerd Hoffmann Cc: virtio-dev@lists.oasis-open.org, "open list:ABI/API" , Rusty Russell , open list , "open list:DRM DRIVERS" , "open list:VIRTIO CORE, NET..." , Dave Airlie List-Id: linux-api@vger.kernel.org T24gVHVlLCBNYXIgMjQsIDIwMTUgYXQgMDU6MDc6MThQTSArMDEwMCwgR2VyZCBIb2ZmbWFubiB3 cm90ZToKPiBGcm9tOiBEYXZlIEFpcmxpZSA8YWlybGllZEBnbWFpbC5jb20+Cj4gCj4gVGhpcyBw YXRjaCBhZGRzIGEga21zIGRyaXZlciBmb3IgdGhlIHZpcnRpbyBncHUuICBUaGUgeG9yZyBtb2Rl c2V0dGluZwo+IGRyaXZlciBjYW4gaGFuZGxlIHRoZSBkZXZpY2UganVzdCBmaW5lLCB0aGUgZnJh bWVidWZmZXIgZm9yIGZiY29uIGlzCj4gdGhlcmUgdG9vLgo+IAo+IFFlbXUgcGF0Y2hlcyBmb3Ig dGhlIGhvc3Qgc2lkZSBhcmUgdW5kZXIgcmV2aWV3IGN1cnJlbnRseS4KPiAKPiBUaGUgcGNpIHZl cnNpb24gb2YgdGhlIGRldmljZSBjb21lcyBpbiB0d28gdmFyaWFudHM6IHdpdGggYW5kIHdpdGhv dXQKPiB2Z2EgY29tcGF0aWJpbGl0eS4gIFRoZSBmb3JtZXIgaGFzIGEgZXh0cmEgbWVtb3J5IGJh ciBmb3IgdGhlIHZnYQo+IGZyYW1lYnVmZmVyLCB0aGUgbGF0ZXIgaXMgYSBwdXJlIHZpcnRpbyBk ZXZpY2UuICBUaGUgb25seSBjb25jZXJuIGZvcgo+IHRoaXMgZHJpdmVyIGlzIHRoYXQgaW4gdGhl IHZpcnRpby12Z2EgY2FzZSB3ZSBoYXZlIHRvIGtpY2sgb3V0IHRoZQo+IGZpcm13YXJlIGZyYW1l YnVmZmVyLgo+IAo+IEluaXRpYWwgcmV2aXNpb24gaGFzIG9ubHkgMmQgc3VwcG9ydCwgM2QgKHZp cmdsKSBzdXBwb3J0IHJlcXVpcmVzCj4gc29tZSBtb3JlIHdvcmsgb24gdGhlIHFlbXUgc2lkZSBh bmQgd2lsbCBiZSBhZGRlZCBsYXRlci4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBEYXZlIEFpcmxpZSA8 YWlybGllZEByZWRoYXQuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEdlcmQgSG9mZm1hbm4gPGtyYXhl bEByZWRoYXQuY29tPgoKSSBkaWQgYSBxdWljayBzY2FuIG9mIHRoZSBjb2RlLCBiZWxvdyBhcmUg bW9zdGx5IGNvc21ldGljCmlzc3Vlcy4KCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9LY29uZmln ICAgICAgICAgICAgICAgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAg ICAgICAgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL3ZpcnRpby9LY29uZmlnICAg ICAgICAgICB8ICAxMSArCj4gIGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vTWFrZWZpbGUgICAgICAg ICAgfCAgIDkgKwo+ICBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZGVidWdmcy5jIHwg IDY0ICsrKysKPiAgZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rpc3BsYXkuYyB8IDUy NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3ZpcnRp by92aXJ0Z3B1X2RybV9idXMuYyB8ICA2OCArKysrCj4gIGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8v dmlydGdwdV9kcnYuYyAgICAgfCAxMzIgKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3ZpcnRp by92aXJ0Z3B1X2Rydi5oICAgICB8IDMyNiArKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMv Z3B1L2RybS92aXJ0aW8vdmlydGdwdV9mYi5jICAgICAgfCA0MTUgKysrKysrKysrKysrKysrKysr KysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9mZW5jZS5jICAgfCAgOTUg KysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9nZW0uYyAgICAgfCAxMjAg KysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfa21zLmMgICAgIHwgMTI1 ICsrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X29iamVjdC5jICB8IDE3 NCArKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV90dG0uYyAgICAg fCA0NTEgKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3ZpcnRp by92aXJ0Z3B1X3ZxLmMgICAgICB8IDU0MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gIGRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmMgICAgICAgfCAgIDIgKy0KPiAg aW5jbHVkZS9kcm0vZHJtUC5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCj4gIGluY2x1 ZGUvdWFwaS9saW51eC9LYnVpbGQgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBpbmNsdWRlL3Vh cGkvbGludXgvdmlydGlvX2dwdS5oICAgICAgICAgIHwgMjAzICsrKysrKysrKysrKwo+ICBpbmNs dWRlL3VhcGkvbGludXgvdmlydGlvX2lkcy5oICAgICAgICAgIHwgICAyICstCj4gIDIxIGZpbGVz IGNoYW5nZWQsIDMyNjcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vS2NvbmZpZwo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZpcnRpby9NYWtlZmlsZQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2RlYnVnZnMuYwo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rpc3BsYXkuYwo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2RybV9idXMuYwo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rydi5j Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZHJ2 LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9m Yi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVf ZmVuY2UuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0 Z3B1X2dlbS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3Zp cnRncHVfa21zLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8v dmlydGdwdV9vYmplY3QuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Zp cnRpby92aXJ0Z3B1X3R0bS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v dmlydGlvL3ZpcnRncHVfdnEuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL2xp bnV4L3ZpcnRpb19ncHUuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZp ZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gaW5kZXggMTUxYTA1MC4uZjIzODhlYSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnCj4gQEAgLTE5Nyw2ICsxOTcsOCBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9x eGwvS2NvbmZpZyIKPiAgCj4gIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JvY2hzL0tjb25maWci Cj4gIAo+ICtzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vS2NvbmZpZyIKPiArCj4gIHNv dXJjZSAiZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmlnIgo+ICAKPiAgc291cmNlICJkcml2ZXJz L2dwdS9kcm0vdGVncmEvS2NvbmZpZyIKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gaW5kZXggMmMyMzliOS4uMDgzZDQ0 MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUKPiBAQCAtNjIsNiArNjIsNyBAQCBvYmotJChDT05GSUdfRFJNX09N QVApCSs9IG9tYXBkcm0vCj4gIG9iai0kKENPTkZJR19EUk1fVElMQ0RDKQkrPSB0aWxjZGMvCj4g IG9iai0kKENPTkZJR19EUk1fUVhMKSArPSBxeGwvCj4gIG9iai0kKENPTkZJR19EUk1fQk9DSFMp ICs9IGJvY2hzLwo+ICtvYmotJChDT05GSUdfRFJNX1ZJUlRJT19HUFUpICs9IHZpcnRpby8KPiAg b2JqLSQoQ09ORklHX0RSTV9NU00pICs9IG1zbS8KPiAgb2JqLSQoQ09ORklHX0RSTV9URUdSQSkg Kz0gdGVncmEvCj4gIG9iai0kKENPTkZJR19EUk1fU1RJKSArPSBzdGkvCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8v S2NvbmZpZwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNTU4NjhlMgo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL0tjb25maWcKPiBA QCAtMCwwICsxLDExIEBACj4gK2NvbmZpZyBEUk1fVklSVElPX0dQVQo+ICsJdHJpc3RhdGUgIlFF TVUgVmlydGlvIEdQVSIKCkkgdGhpbmsgaXQgc2hvdWxkIGJlICJWaXJ0aW8gR1BVIGRyaXZlciIu Cgo+ICsJZGVwZW5kcyBvbiBEUk0gJiYgVklSVElPCj4gKwlzZWxlY3QgRkJfU1lTX0ZJTExSRUNU Cj4gKwlzZWxlY3QgRkJfU1lTX0NPUFlBUkVBCj4gKwlzZWxlY3QgRkJfU1lTX0lNQUdFQkxJVAo+ ICsgICAgICAgIHNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICsgICAgICAgIHNlbGVjdCBEUk1fS01T X0ZCX0hFTFBFUgo+ICsgICAgICAgIHNlbGVjdCBEUk1fVFRNCj4gKwloZWxwCj4gKwkgICBRRU1V IGJhc2VkIHZpcnRpbyBHUFUuCgpIb3cgYWJvdXQ6CglUaGlzIGlzIHRoZSB2aXJ0dWFsIEdQVSBk cml2ZXIgZm9yIHZpcnRpby4gIEl0IGNhbiBiZSB1c2VkIHdpdGgKCWxndWVzdCBvciBRRU1VIGJh c2VkIFZNTXMgKGxpa2UgS1ZNIG9yIFhlbikuICBTYXkgWSBvciBNLgoKCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlv L01ha2VmaWxlCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi41N2Q1OWVl Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vTWFrZWZpbGUK PiBAQCAtMCwwICsxLDkgQEAKPiArIwo+ICsjIE1ha2VmaWxlIGZvciB0aGUgZHJtIGRldmljZSBk cml2ZXIuICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUKPiArIyBEaXJlY3Qg UmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIChEUkkpIGluIFhGcmVlODYgNC4xLjAgYW5kIGhpZ2hl ci4KPiArCj4gK2NjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCj4gKwo+ICt2aXJ0aW8tZ3B1LXkg Oj0gdmlydGdwdV9kcnYubyB2aXJ0Z3B1X2ttcy5vIHZpcnRncHVfZHJtX2J1cy5vIHZpcnRncHVf Z2VtLm8gdmlydGdwdV9mYi5vIHZpcnRncHVfZGlzcGxheS5vIHZpcnRncHVfdnEubyB2aXJ0Z3B1 X3R0bS5vIHZpcnRncHVfZmVuY2UubyB2aXJ0Z3B1X29iamVjdC5vIHZpcnRncHVfZGVidWdmcy5v Cj4gKwo+ICtvYmotJChDT05GSUdfRFJNX1ZJUlRJT19HUFUpICs9IHZpcnRpby1ncHUubwoKQXJl IGNmbGFncyBoYWNrcyBhbmQgbG9uZyBtYWtlZmlsZSBsaW5lcyB0aGUgbm9ybSBmb3IgZHJtPwpJ ZiB5ZXMgdGhpcyBpcyBmaW5lLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRp by92aXJ0Z3B1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kZWJ1 Z2ZzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmRiYzQ5N2QKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2RlYnVn ZnMuYwo+IEBAIC0wLDAgKzEsNjQgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDA5IFJl ZCBIYXQKPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCj4gKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQo+ICsgKiAiU29mdHdh cmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nCj4gKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwKPiArICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCj4gKyAqIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwo+ ICsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCj4g KyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsCj4gKyAqIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPiArICoKPiArICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsCj4gKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRgo+ICsgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCj4gKyAqIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKPiAr ICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTgo+ICsgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KPiArICogV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4g KyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPiArCj4gKyNpbmNsdWRlICJk cm1QLmgiCj4gKyNpbmNsdWRlICJ2aXJ0Z3B1X2Rydi5oIgo+ICsKPiArc3RhdGljIGludAo+ICt2 aXJ0aW9fZ3B1X2RlYnVnZnNfaXJxX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRh KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9f bm9kZSAqKSBtLT5wcml2YXRlOwo+ICsJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiA9 IG5vZGUtPm1pbm9yLT5kZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCXNlcV9wcmludGYobSwgImZl bmNlICVsZCAlbGxkXG4iLAo+ICsJCSAgIGF0b21pYzY0X3JlYWQoJnZnZGV2LT5mZW5jZV9kcnYu bGFzdF9zZXEpLAo+ICsJCSAgIHZnZGV2LT5mZW5jZV9kcnYuc3luY19zZXEpOwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2luZm9fbGlzdCB2aXJ0aW9fZ3B1X2Rl YnVnZnNfbGlzdFtdID0gewo+ICsJeyAiaXJxX2ZlbmNlIiwgdmlydGlvX2dwdV9kZWJ1Z2ZzX2ly cV9pbmZvLCAwLCBOVUxMIH0sCj4gK307Cj4gKwo+ICsjZGVmaW5lIFZJUlRJT19HUFVfREVCVUdG U19FTlRSSUVTIEFSUkFZX1NJWkUodmlydGlvX2dwdV9kZWJ1Z2ZzX2xpc3QpCj4gKwo+ICtpbnQK PiArdmlydGlvX2dwdV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpCj4gK3sK PiArCWRybV9kZWJ1Z2ZzX2NyZWF0ZV9maWxlcyh2aXJ0aW9fZ3B1X2RlYnVnZnNfbGlzdCwKPiAr CQkJCSBWSVJUSU9fR1BVX0RFQlVHRlNfRU5UUklFUywKPiArCQkJCSBtaW5vci0+ZGVidWdmc19y b290LCBtaW5vcik7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArdm9pZAo+ICt2aXJ0aW9fZ3B1 X2RlYnVnZnNfdGFrZWRvd24oc3RydWN0IGRybV9taW5vciAqbWlub3IpCj4gK3sKPiArCWRybV9k ZWJ1Z2ZzX3JlbW92ZV9maWxlcyh2aXJ0aW9fZ3B1X2RlYnVnZnNfbGlzdCwKPiArCQkJCSBWSVJU SU9fR1BVX0RFQlVHRlNfRU5UUklFUywKPiArCQkJCSBtaW5vcik7Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1 L2RybS92aXJ0aW8vdmlydGdwdV9kaXNwbGF5LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAuLjU3OGEwMmMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3ZpcnRpby92aXJ0Z3B1X2Rpc3BsYXkuYwo+IEBAIC0wLDAgKzEsNTI3IEBACj4gKy8qCj4g KyAqIENvcHlyaWdodCAyMDEzIFJlZCBIYXQgSW5jLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoK PiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KPiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4g KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIENPUFlS SUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SCj4gKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiArICogT1RIRVIg REVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOiBEYXZlIEFpcmxp ZQo+ICsgKiAgICAgICAgICBBbG9uIExldnkKPiArICovCj4gKwo+ICsjaW5jbHVkZSAidmlydGdw dV9kcnYuaCIKPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUg PGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4gKwo+ICsjZGVmaW5lIFhSRVNfTUlOICAgMzIwCj4g KyNkZWZpbmUgWVJFU19NSU4gICAyMDAKPiArCj4gKyNkZWZpbmUgWFJFU19ERUYgIDEwMjQKPiAr I2RlZmluZSBZUkVTX0RFRiAgIDc2OAo+ICsKPiArI2RlZmluZSBYUkVTX01BWCAgODE5Mgo+ICsj ZGVmaW5lIFlSRVNfTUFYICA4MTkyCj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X2NydGNf Z2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICAgIHUxNiAqcmVkLCB1 MTYgKmdyZWVuLCB1MTYgKmJsdWUsCj4gKwkJCQkgICAgICB1aW50MzJfdCBzdGFydCwgdWludDMy X3Qgc2l6ZSkKPiArewo+ICsJLyogVE9ETyAqLwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt2 aXJ0aW9fZ3B1X2hpZGVfY3Vyc29yKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCj4g KwkJICAgICAgIHN0cnVjdCB2aXJ0aW9fZ3B1X291dHB1dCAqb3V0cHV0KQo+ICt7Cj4gKwlvdXRw dXQtPmN1cnNvci5oZHIudHlwZSA9IGNwdV90b19sZTMyKFZJUlRJT19HUFVfQ01EX1VQREFURV9D VVJTT1IpOwo+ICsJb3V0cHV0LT5jdXJzb3IucmVzb3VyY2VfaWQgPSAwOwo+ICsJdmlydGlvX2dw dV9jdXJzb3JfcGluZyh2Z2Rldiwgb3V0cHV0KTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2aXJ0 aW9fZ3B1X2NydGNfY3Vyc29yX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgICAg ICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKPiArCQkJCSAgICAgIHVpbnQzMl90IGhhbmRs ZSwKPiArCQkJCSAgICAgIHVpbnQzMl90IHdpZHRoLAo+ICsJCQkJICAgICAgdWludDMyX3QgaGVp Z2h0LAo+ICsJCQkJICAgICAgaW50MzJfdCBob3RfeCwgaW50MzJfdCBob3RfeSkKPiArewo+ICsJ c3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7 Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9vdXRwdXQgKm91dHB1dCA9Cj4gKwkJY29udGFpbmVyX29m KGNydGMsIHN0cnVjdCB2aXJ0aW9fZ3B1X291dHB1dCwgY3J0Yyk7Cj4gKwlzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKmdvYmogPSBOVUxMOwo+ICsJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpxb2Jq ID0gTlVMTDsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlICpmZW5jZSA9IE5VTEw7Cj4gKwlp bnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoaGFuZGxlID09IDApIHsKPiArCQl2aXJ0aW9fZ3B1X2hp ZGVfY3Vyc29yKHZnZGV2LCBvdXRwdXQpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCS8q IGxvb2t1cCB0aGUgY3Vyc29yICovCj4gKwlnb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGNy dGMtPmRldiwgZmlsZV9wcml2LCBoYW5kbGUpOwo+ICsJaWYgKGdvYmogPT0gTlVMTCkKPiArCQly ZXR1cm4gLUVOT0VOVDsKPiArCj4gKwlxb2JqID0gZ2VtX3RvX3ZpcnRpb19ncHVfb2JqKGdvYmop Owo+ICsKPiArCWlmICghcW9iai0+aHdfcmVzX2hhbmRsZSkgewo+ICsJCXJldCA9IC1FSU5WQUw7 Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gdmlydGlvX2dwdV9jbWRfdHJhbnNm ZXJfdG9faG9zdF8yZCh2Z2RldiwgcW9iai0+aHdfcmVzX2hhbmRsZSwgMCwKPiArCQkJCQkJIGNw dV90b19sZTMyKDY0KSwKPiArCQkJCQkJIGNwdV90b19sZTMyKDY0KSwKPiArCQkJCQkJIDAsIDAs ICZmZW5jZSk7Cj4gKwlpZiAoIXJldCkgewo+ICsJCXJlc2VydmF0aW9uX29iamVjdF9hZGRfZXhj bF9mZW5jZShxb2JqLT50Ym8ucmVzdiwKPiArCQkJCQkJICAmZmVuY2UtPmYpOwo+ICsJCXZpcnRp b19ncHVfb2JqZWN0X3dhaXQocW9iaiwgZmFsc2UpOwo+ICsJfQo+ICsKPiArCW91dHB1dC0+Y3Vy c29yLmhkci50eXBlID0gY3B1X3RvX2xlMzIoVklSVElPX0dQVV9DTURfVVBEQVRFX0NVUlNPUik7 Cj4gKwlvdXRwdXQtPmN1cnNvci5yZXNvdXJjZV9pZCA9IGNwdV90b19sZTMyKHFvYmotPmh3X3Jl c19oYW5kbGUpOwo+ICsJb3V0cHV0LT5jdXJzb3IuaG90X3ggPSBjcHVfdG9fbGUzMihob3RfeCk7 Cj4gKwlvdXRwdXQtPmN1cnNvci5ob3RfeSA9IGNwdV90b19sZTMyKGhvdF95KTsKPiArCXZpcnRp b19ncHVfY3Vyc29yX3BpbmcodmdkZXYsIG91dHB1dCk7Cj4gK291dDoKPiArCWRybV9nZW1fb2Jq ZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdvYmopOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIGludCB2aXJ0aW9fZ3B1X2NydGNfY3Vyc29yX21vdmUoc3RydWN0IGRybV9jcnRj ICpjcnRjLAo+ICsJCQkJICAgIGludCB4LCBpbnQgeSkKPiArewo+ICsJc3RydWN0IHZpcnRpb19n cHVfZGV2aWNlICp2Z2RldiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3Qgdmly dGlvX2dwdV9vdXRwdXQgKm91dHB1dCA9Cj4gKwkJY29udGFpbmVyX29mKGNydGMsIHN0cnVjdCB2 aXJ0aW9fZ3B1X291dHB1dCwgY3J0Yyk7Cj4gKwo+ICsJb3V0cHV0LT5jdXJzb3IuaGRyLnR5cGUg PSBjcHVfdG9fbGUzMihWSVJUSU9fR1BVX0NNRF9NT1ZFX0NVUlNPUik7Cj4gKwlvdXRwdXQtPmN1 cnNvci5wb3MueCA9IGNwdV90b19sZTMyKHgpOwo+ICsJb3V0cHV0LT5jdXJzb3IucG9zLnkgPSBj cHVfdG9fbGUzMih5KTsKPiArCXZpcnRpb19ncHVfY3Vyc29yX3BpbmcodmdkZXYsIG91dHB1dCk7 Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2aXJ0aW9fZ3B1X2NydGNfcGFn ZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICAgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIsCj4gKwkJCQkgICAgIHN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQg KmV2ZW50LAo+ICsJCQkJICAgICB1aW50MzJfdCBmbGFncykKPiArewo+ICsJcmV0dXJuIC1FSU5W QUw7Cj4gK30KPiArCj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIHZp cnRpb19ncHVfY3J0Y19mdW5jcyA9IHsKPiArCS5jdXJzb3Jfc2V0MiA9IHZpcnRpb19ncHVfY3J0 Y19jdXJzb3Jfc2V0LAo+ICsJLmN1cnNvcl9tb3ZlID0gdmlydGlvX2dwdV9jcnRjX2N1cnNvcl9t b3ZlLAo+ICsJLmdhbW1hX3NldCA9IHZpcnRpb19ncHVfY3J0Y19nYW1tYV9zZXQsCj4gKwkuc2V0 X2NvbmZpZyA9IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnLAo+ICsJLnBhZ2VfZmxpcCA9IHZp cnRpb19ncHVfY3J0Y19wYWdlX2ZsaXAsCj4gKwkuZGVzdHJveSA9IGRybV9jcnRjX2NsZWFudXAs Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X3VzZXJfZnJhbWVidWZmZXJfZGVz dHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPiArewo+ICsJc3RydWN0IHZpcnRpb19n cHVfZnJhbWVidWZmZXIgKnZpcnRpb19ncHVfZmIKPiArCQk9IHRvX3ZpcnRpb19ncHVfZnJhbWVi dWZmZXIoZmIpOwo+ICsKPiArCWlmICh2aXJ0aW9fZ3B1X2ZiLT5vYmopCj4gKwkJZHJtX2dlbV9v YmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQodmlydGlvX2dwdV9mYi0+b2JqKTsKPiArCWRybV9m cmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKPiArCWtmcmVlKHZpcnRpb19ncHVfZmIpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50Cj4gK3ZpcnRpb19ncHVfZnJhbWVidWZmZXJfc3VyZmFjZV9kaXJ0eShz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiArCQkJCSAgICAgc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYsCj4gKwkJCQkgICAgIHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjb2xvciwKPiAr CQkJCSAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAo+ICsJCQkJICAgICB1bnNpZ25l ZCBudW1fY2xpcHMpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZyYW1lYnVmZmVyICp2aXJ0 aW9fZ3B1X2ZiCj4gKwkJPSB0b192aXJ0aW9fZ3B1X2ZyYW1lYnVmZmVyKGZiKTsKPiArCj4gKwly ZXR1cm4gdmlydGlvX2dwdV9zdXJmYWNlX2RpcnR5KHZpcnRpb19ncHVfZmIsIGNsaXBzLCBudW1f Y2xpcHMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9m dW5jcyB2aXJ0aW9fZ3B1X2ZiX2Z1bmNzID0gewo+ICsJLmRlc3Ryb3kgPSB2aXJ0aW9fZ3B1X3Vz ZXJfZnJhbWVidWZmZXJfZGVzdHJveSwKPiArCS5kaXJ0eSA9IHZpcnRpb19ncHVfZnJhbWVidWZm ZXJfc3VyZmFjZV9kaXJ0eSwKPiArfTsKPiArCj4gK2ludAo+ICt2aXJ0aW9fZ3B1X2ZyYW1lYnVm ZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJICAgIHN0cnVjdCB2aXJ0aW9f Z3B1X2ZyYW1lYnVmZmVyICp2Z2ZiLAo+ICsJCQkgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIg Km1vZGVfY21kLAo+ICsJCQkgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiAr CWludCByZXQ7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJvOwo+ICsJdmdmYi0+b2Jq ID0gb2JqOwo+ICsKPiArCWJvID0gZ2VtX3RvX3ZpcnRpb19ncHVfb2JqKG9iaik7Cj4gKwo+ICsJ cmV0ID0gZHJtX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCAmdmdmYi0+YmFzZSwgJnZpcnRpb19ncHVf ZmJfZnVuY3MpOwo+ICsJaWYgKHJldCkgewo+ICsJCXZnZmItPm9iaiA9IE5VTEw7Cj4gKwkJcmV0 dXJuIHJldDsKPiArCX0KPiArCWRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdCgmdmdmYi0+ YmFzZSwgbW9kZV9jbWQpOwo+ICsKPiArCXNwaW5fbG9ja19pbml0KCZ2Z2ZiLT5kaXJ0eV9sb2Nr KTsKPiArCXZnZmItPngxID0gdmdmYi0+eTEgPSBJTlRfTUFYOwo+ICsJdmdmYi0+eDIgPSB2Z2Zi LT55MiA9IDA7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX2dw dV9jcnRjX2RwbXMoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgbW9kZSkKPiArewo+ICt9Cj4g Kwo+ICtzdGF0aWMgYm9vbCB2aXJ0aW9fZ3B1X2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCj4gKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUsCj4gKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUp Cj4gK3sKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZpcnRpb19ncHVf Y3J0Y19tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgICAgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg KmFkanVzdGVkX21vZGUsCj4gKwkJCQkgICAgaW50IHgsIGludCB5LAo+ICsJCQkJICAgIHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmRldjsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYgPSBkZXYt PmRldl9wcml2YXRlOwo+ICsJc3RydWN0IHZpcnRpb19ncHVfZnJhbWVidWZmZXIgKnZnZmI7Cj4g KwlzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJvLCAqb2xkX2JvID0gTlVMTDsKPiArCXN0cnVj dCB2aXJ0aW9fZ3B1X291dHB1dCAqb3V0cHV0ID0gZHJtX2NydGNfdG9fdmlydGlvX2dwdV9vdXRw dXQoY3J0Yyk7Cj4gKwo+ICsJaWYgKCFjcnRjLT5wcmltYXJ5LT5mYikgewo+ICsJCURSTV9ERUJV R19LTVMoIk5vIEZCIGJvdW5kXG4iKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlpZiAo b2xkX2ZiKSB7Cj4gKwkJdmdmYiA9IHRvX3ZpcnRpb19ncHVfZnJhbWVidWZmZXIob2xkX2ZiKTsK PiArCQlvbGRfYm8gPSBnZW1fdG9fdmlydGlvX2dwdV9vYmoodmdmYi0+b2JqKTsKPiArCX0KPiAr CXZnZmIgPSB0b192aXJ0aW9fZ3B1X2ZyYW1lYnVmZmVyKGNydGMtPnByaW1hcnktPmZiKTsKPiAr CWJvID0gZ2VtX3RvX3ZpcnRpb19ncHVfb2JqKHZnZmItPm9iaik7Cj4gKwlEUk1fREVCVUcoIisl ZCslZCAoJWQsJWQpID0+ICglZCwlZClcbiIsCj4gKwkJICB4LCB5LAo+ICsJCSAgbW9kZS0+aGRp c3BsYXksIG1vZGUtPnZkaXNwbGF5LAo+ICsJCSAgYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXksCj4g KwkJICBhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSk7Cj4gKwo+ICsJdmlydGlvX2dwdV9jbWRfc2V0 X3NjYW5vdXQodmdkZXYsIG91dHB1dC0+aW5kZXgsIGJvLT5od19yZXNfaGFuZGxlLAo+ICsJCQkJ bW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LCB4LCB5KTsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX2dwdV9jcnRjX3ByZXBhcmUoc3RydWN0IGRy bV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlEUk1fREVCVUcoImN1cnJlbnQ6ICVkeCVkKyVkKyVkICgl ZCkuXG4iLAo+ICsJCSAgY3J0Yy0+bW9kZS5oZGlzcGxheSwgY3J0Yy0+bW9kZS52ZGlzcGxheSwK PiArCQkgIGNydGMtPngsIGNydGMtPnksIGNydGMtPmVuYWJsZWQpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCB2aXJ0aW9fZ3B1X2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAr ewo+ICsJRFJNX0RFQlVHKCJcbiIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1 X2NydGNfbG9hZF9sdXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHZpcnRpb19ncHVfY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK PiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiArCXN0cnVjdCB2 aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IHZp cnRpb19ncHVfb3V0cHV0ICpvdXRwdXQgPSBkcm1fY3J0Y190b192aXJ0aW9fZ3B1X291dHB1dChj cnRjKTsKPiArCj4gKwl2aXJ0aW9fZ3B1X2NtZF9zZXRfc2Nhbm91dCh2Z2Rldiwgb3V0cHV0LT5p bmRleCwgMCwgMCwgMCwgMCwgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2NydGNfaGVscGVyX2Z1bmNzIHZpcnRpb19ncHVfY3J0Y19oZWxwZXJfZnVuY3MgPSB7Cj4gKwku ZGlzYWJsZSA9IHZpcnRpb19ncHVfY3J0Y19kaXNhYmxlLAo+ICsJLmRwbXMgPSB2aXJ0aW9fZ3B1 X2NydGNfZHBtcywKPiArCS5tb2RlX2ZpeHVwID0gdmlydGlvX2dwdV9jcnRjX21vZGVfZml4dXAs Cj4gKwkubW9kZV9zZXQgPSB2aXJ0aW9fZ3B1X2NydGNfbW9kZV9zZXQsCj4gKwkucHJlcGFyZSA9 IHZpcnRpb19ncHVfY3J0Y19wcmVwYXJlLAo+ICsJLmNvbW1pdCA9IHZpcnRpb19ncHVfY3J0Y19j b21taXQsCj4gKwkubG9hZF9sdXQgPSB2aXJ0aW9fZ3B1X2NydGNfbG9hZF9sdXQsCj4gK307Cj4g Kwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X2VuY19kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlciwgaW50IG1vZGUpCj4gK3sKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgdmlydGlvX2dw dV9lbmNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCj4gKwkJCQkgICAg ICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiArCQkJCSAgICAgIHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQo+ICt7Cj4gKwlyZXR1cm4gdHJ1ZTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX2dwdV9lbmNfcHJlcGFyZShzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXIpCj4gK3sKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX2dw dV9lbmNfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiArewo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X2VuY19tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIsCj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gKwkJ CQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCj4gK3sKPiArfQo+ ICsKPiArc3RhdGljIGludCB2aXJ0aW9fZ3B1X2Nvbm5fZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X291dHB1dCAqb3V0 cHV0ID0KPiArCQlkcm1fY29ubmVjdG9yX3RvX3ZpcnRpb19ncHVfb3V0cHV0KGNvbm5lY3Rvcik7 Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IE5VTEw7Cj4gKwlpbnQgY291bnQs IHdpZHRoLCBoZWlnaHQ7Cj4gKwo+ICsJd2lkdGggID0gbGUzMl90b19jcHUob3V0cHV0LT5pbmZv LnIud2lkdGgpOwo+ICsJaGVpZ2h0ID0gbGUzMl90b19jcHUob3V0cHV0LT5pbmZvLnIuaGVpZ2h0 KTsKPiArCWNvdW50ID0gZHJtX2FkZF9tb2Rlc19ub2VkaWQoY29ubmVjdG9yLCBYUkVTX01BWCwg WVJFU19NQVgpOwo+ICsKPiArCWlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKSB7Cj4gKwkJ d2lkdGggPSBYUkVTX0RFRjsKPiArCQloZWlnaHQgPSBZUkVTX0RFRjsKPiArCQlkcm1fc2V0X3By ZWZlcnJlZF9tb2RlKGNvbm5lY3RvciwgWFJFU19ERUYsIFlSRVNfREVGKTsKPiArCX0gZWxzZSB7 Cj4gKwkJRFJNX0RFQlVHKCJhZGQgbW9kZTogJWR4JWRcbiIsIHdpZHRoLCBoZWlnaHQpOwo+ICsJ CW1vZGUgPSBkcm1fY3Z0X21vZGUoY29ubmVjdG9yLT5kZXYsIHdpZHRoLCBoZWlnaHQsIDYwLAo+ ICsJCQkJICAgIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwo+ICsJCW1vZGUtPnR5cGUgfD0gRFJNX01P REVfVFlQRV9QUkVGRVJSRUQ7Cj4gKwkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1v ZGUpOwo+ICsJCWNvdW50Kys7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGNvdW50Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHZpcnRpb19ncHVfY29ubl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IsCj4gKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSkKPiArewo+ICsJc3RydWN0IHZpcnRpb19ncHVfb3V0cHV0ICpvdXRwdXQgPQo+ICsJCWRybV9j b25uZWN0b3JfdG9fdmlydGlvX2dwdV9vdXRwdXQoY29ubmVjdG9yKTsKPiArCWludCB3aWR0aCwg aGVpZ2h0Owo+ICsKPiArCXdpZHRoICA9IGxlMzJfdG9fY3B1KG91dHB1dC0+aW5mby5yLndpZHRo KTsKPiArCWhlaWdodCA9IGxlMzJfdG9fY3B1KG91dHB1dC0+aW5mby5yLmhlaWdodCk7Cj4gKwo+ ICsJaWYgKCEobW9kZS0+dHlwZSAmIERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEKSkKPiArCQlyZXR1 cm4gTU9ERV9PSzsKPiArCWlmIChtb2RlLT5oZGlzcGxheSA9PSBYUkVTX0RFRiAmJiBtb2RlLT52 ZGlzcGxheSA9PSBZUkVTX0RFRikKPiArCQlyZXR1cm4gTU9ERV9PSzsKPiArCWlmIChtb2RlLT5o ZGlzcGxheSA8PSB3aWR0aCAgJiYgbW9kZS0+aGRpc3BsYXkgPj0gd2lkdGggLSAxNiAmJgo+ICsJ ICAgIG1vZGUtPnZkaXNwbGF5IDw9IGhlaWdodCAmJiBtb2RlLT52ZGlzcGxheSA+PSBoZWlnaHQg LSAxNikKPiArCQlyZXR1cm4gTU9ERV9PSzsKPiArCj4gKwlEUk1fREVCVUcoImRlbCBtb2RlOiAl ZHglZFxuIiwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKPiArCXJldHVybiBNT0RF X0JBRDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlcioKPiArdmlydGlvX2dw dV9iZXN0X2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJ c3RydWN0IHZpcnRpb19ncHVfb3V0cHV0ICp2aXJ0aW9fZ3B1X291dHB1dCA9Cj4gKwkJZHJtX2Nv bm5lY3Rvcl90b192aXJ0aW9fZ3B1X291dHB1dChjb25uZWN0b3IpOwo+ICsKPiArCXJldHVybiAm dmlydGlvX2dwdV9vdXRwdXQtPmVuYzsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHZpcnRpb19ncHVfZW5jX2hlbHBlcl9mdW5jcyA9 IHsKPiArCS5kcG1zID0gdmlydGlvX2dwdV9lbmNfZHBtcywKPiArCS5tb2RlX2ZpeHVwID0gdmly dGlvX2dwdV9lbmNfbW9kZV9maXh1cCwKPiArCS5wcmVwYXJlID0gdmlydGlvX2dwdV9lbmNfcHJl cGFyZSwKPiArCS5tb2RlX3NldCA9IHZpcnRpb19ncHVfZW5jX21vZGVfc2V0LAo+ICsJLmNvbW1p dCA9IHZpcnRpb19ncHVfZW5jX2NvbW1pdCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgdmlydGlvX2dwdV9jb25uX2hlbHBlcl9mdW5j cyA9IHsKPiArCS5nZXRfbW9kZXMgPSB2aXJ0aW9fZ3B1X2Nvbm5fZ2V0X21vZGVzLAo+ICsJLm1v ZGVfdmFsaWQgPSB2aXJ0aW9fZ3B1X2Nvbm5fbW9kZV92YWxpZCwKPiArCS5iZXN0X2VuY29kZXIg PSB2aXJ0aW9fZ3B1X2Jlc3RfZW5jb2RlciwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRp b19ncHVfY29ubl9zYXZlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiAr CURSTV9ERUJVRygiXG4iKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX2dwdV9jb25u X3Jlc3RvcmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJRFJNX0RF QlVHKCJcbiIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyB2 aXJ0aW9fZ3B1X2Nvbm5fZGV0ZWN0KAo+ICsJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAo+ICsJCQlib29sIGZvcmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9vdXRwdXQg Km91dHB1dCA9Cj4gKwkJZHJtX2Nvbm5lY3Rvcl90b192aXJ0aW9fZ3B1X291dHB1dChjb25uZWN0 b3IpOwo+ICsKPiArCWlmIChvdXRwdXQtPmluZm8uZW5hYmxlZCkKPiArCQlyZXR1cm4gY29ubmVj dG9yX3N0YXR1c19jb25uZWN0ZWQ7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0 dXNfZGlzY29ubmVjdGVkOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZpcnRpb19ncHVfY29ubl9z ZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJCSAgIHN0 cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAo+ICsJCQkJICAgdWludDY0X3QgdmFsdWUpCj4g K3sKPiArCURSTV9ERUJVRygiXG4iKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCB2aXJ0aW9fZ3B1X2Nvbm5fZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9vdXRwdXQgKnZpcnRpb19ncHVfb3V0cHV0 ID0KPiArCQlkcm1fY29ubmVjdG9yX3RvX3ZpcnRpb19ncHVfb3V0cHV0KGNvbm5lY3Rvcik7Cj4g Kwo+ICsJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7Cj4gKwlkcm1fY29ubmVj dG9yX2NsZWFudXAoY29ubmVjdG9yKTsKPiArCWtmcmVlKHZpcnRpb19ncHVfb3V0cHV0KTsKPiAr fQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHZpcnRpb19n cHVfY29ubmVjdG9yX2Z1bmNzID0gewo+ICsJLmRwbXMgPSBkcm1faGVscGVyX2Nvbm5lY3Rvcl9k cG1zLAo+ICsJLnNhdmUgPSB2aXJ0aW9fZ3B1X2Nvbm5fc2F2ZSwKPiArCS5yZXN0b3JlID0gdmly dGlvX2dwdV9jb25uX3Jlc3RvcmUsCj4gKwkuZGV0ZWN0ID0gdmlydGlvX2dwdV9jb25uX2RldGVj dCwKPiArCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21v ZGVzLAo+ICsJLnNldF9wcm9wZXJ0eSA9IHZpcnRpb19ncHVfY29ubl9zZXRfcHJvcGVydHksCj4g KwkuZGVzdHJveSA9IHZpcnRpb19ncHVfY29ubl9kZXN0cm95LAo+ICt9Owo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB2aXJ0aW9fZ3B1X2VuY19mdW5jcyA9IHsK PiArCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwKPiArfTsKPiArCj4gK3N0YXRpYyBp bnQgdmdkZXZfb3V0cHV0X2luaXQoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwgaW50 IGluZGV4KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdmdkZXYtPmRkZXY7Cj4g KwlzdHJ1Y3QgdmlydGlvX2dwdV9vdXRwdXQgKm91dHB1dCA9IHZnZGV2LT5vdXRwdXRzICsgaW5k ZXg7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJm91dHB1dC0+Y29ubjsK PiArCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZvdXRwdXQtPmVuYzsKPiArCXN0cnVj dCBkcm1fY3J0YyAqY3J0YyA9ICZvdXRwdXQtPmNydGM7Cj4gKwo+ICsJb3V0cHV0LT5pbmRleCA9 IGluZGV4Owo+ICsJaWYgKGluZGV4ID09IDApIHsKPiArCQlvdXRwdXQtPmluZm8uZW5hYmxlZCA9 IGNwdV90b19sZTMyKHRydWUpOwo+ICsJCW91dHB1dC0+aW5mby5yLndpZHRoID0gY3B1X3RvX2xl MzIoWFJFU19ERUYpOwo+ICsJCW91dHB1dC0+aW5mby5yLmhlaWdodCA9IGNwdV90b19sZTMyKFlS RVNfREVGKTsKPiArCX0KPiArCj4gKwlkcm1fY3J0Y19pbml0KGRldiwgY3J0YywgJnZpcnRpb19n cHVfY3J0Y19mdW5jcyk7Cj4gKwlkcm1fbW9kZV9jcnRjX3NldF9nYW1tYV9zaXplKGNydGMsIDI1 Nik7Cj4gKwlkcm1fY3J0Y19oZWxwZXJfYWRkKGNydGMsICZ2aXJ0aW9fZ3B1X2NydGNfaGVscGVy X2Z1bmNzKTsKPiArCj4gKwlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZ2aXJ0 aW9fZ3B1X2Nvbm5lY3Rvcl9mdW5jcywKPiArCQkJICAgRFJNX01PREVfQ09OTkVDVE9SX1ZJUlRV QUwpOwo+ICsJY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfSFBEOwo+ICsJ ZHJtX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsICZ2aXJ0aW9fZ3B1X2VuY19mdW5jcywKPiAr CQkJIERSTV9NT0RFX0VOQ09ERVJfVklSVFVBTCk7Cj4gKwo+ICsJZW5jb2Rlci0+cG9zc2libGVf Y3J0Y3MgPSAxIDw8IGluZGV4Owo+ICsJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVy KGNvbm5lY3RvciwgZW5jb2Rlcik7Cj4gKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIs ICZ2aXJ0aW9fZ3B1X2VuY19oZWxwZXJfZnVuY3MpOwo+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJf YWRkKGNvbm5lY3RvciwgJnZpcnRpb19ncHVfY29ubl9oZWxwZXJfZnVuY3MpOwo+ICsJZHJtX2Nv bm5lY3Rvcl9yZWdpc3Rlcihjb25uZWN0b3IpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoKPiArdmlydGlvX2dwdV91c2VyX2ZyYW1lYnVm ZmVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJICAgc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXYsCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9j bWQpCj4gK3sKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gTlVMTDsKPiArCXN0cnVj dCB2aXJ0aW9fZ3B1X2ZyYW1lYnVmZmVyICp2aXJ0aW9fZ3B1X2ZiOwo+ICsJaW50IHJldDsKPiAr Cj4gKwkvKiBsb29rdXAgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCByZXMgaGFuZGxlICovCj4gKwlv YmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIG1vZGVfY21kLT5oYW5k bGVzWzBdKTsKPiArCWlmICghb2JqKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ICsK PiArCXZpcnRpb19ncHVfZmIgPSBremFsbG9jKHNpemVvZigqdmlydGlvX2dwdV9mYiksIEdGUF9L RVJORUwpOwo+ICsJaWYgKHZpcnRpb19ncHVfZmIgPT0gTlVMTCkKPiArCQlyZXR1cm4gRVJSX1BU UigtRU5PTUVNKTsKPiArCj4gKwlyZXQgPSB2aXJ0aW9fZ3B1X2ZyYW1lYnVmZmVyX2luaXQoZGV2 LCB2aXJ0aW9fZ3B1X2ZiLCBtb2RlX2NtZCwgb2JqKTsKPiArCWlmIChyZXQpIHsKPiArCQlrZnJl ZSh2aXJ0aW9fZ3B1X2ZiKTsKPiArCQlpZiAob2JqKQo+ICsJCQlkcm1fZ2VtX29iamVjdF91bnJl ZmVyZW5jZV91bmxvY2tlZChvYmopOwo+ICsJCXJldHVybiBOVUxMOwo+ICsJfQo+ICsKPiArCXJl dHVybiAmdmlydGlvX2dwdV9mYi0+YmFzZTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fbW9kZV9jb25maWdfZnVuY3MgdmlydGlvX2dwdV9tb2RlX2Z1bmNzID0gewo+ICsJLmZi X2NyZWF0ZSA9IHZpcnRpb19ncHVfdXNlcl9mcmFtZWJ1ZmZlcl9jcmVhdGUsCj4gK307Cj4gKwo+ ICtpbnQgdmlydGlvX2dwdV9tb2Rlc2V0X2luaXQoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2 Z2RldikKPiArewo+ICsJaW50IGk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWRybV9tb2RlX2NvbmZp Z19pbml0KHZnZGV2LT5kZGV2KTsKPiArCXZnZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5mdW5jcyA9 ICh2b2lkICopJnZpcnRpb19ncHVfbW9kZV9mdW5jczsKPiArCj4gKwkvKiBtb2RlcyB3aWxsIGJl IHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBmcmFtZWJ1ZmZlciBzaXplICovCj4gKwl2Z2Rldi0+ZGRl di0+bW9kZV9jb25maWcubWluX3dpZHRoID0gWFJFU19NSU47Cj4gKwl2Z2Rldi0+ZGRldi0+bW9k ZV9jb25maWcubWluX2hlaWdodCA9IFlSRVNfTUlOOwo+ICsJdmdkZXYtPmRkZXYtPm1vZGVfY29u ZmlnLm1heF93aWR0aCA9IFhSRVNfTUFYOwo+ICsJdmdkZXYtPmRkZXYtPm1vZGVfY29uZmlnLm1h eF9oZWlnaHQgPSBZUkVTX01BWDsKPiArCj4gKwlmb3IgKGkgPSAwIDsgaSA8IHZnZGV2LT5udW1f c2Nhbm91dHM7ICsraSkKPiArCQl2Z2Rldl9vdXRwdXRfaW5pdCh2Z2RldiwgaSk7Cj4gKwo+ICsJ LyogcHJpbWFyeSBzdXJmYWNlIG11c3QgYmUgY3JlYXRlZCBieSB0aGlzIHBvaW50LCB0byBhbGxv dwo+ICsJICogaXNzdWluZyBjb21tYW5kIHF1ZXVlIGNvbW1hbmRzIGFuZCBoYXZpbmcgdGhlbSBy ZWFkIGJ5Cj4gKwkgKiBzcGljZSBzZXJ2ZXIuICovCj4gKwlyZXQgPSB2aXJ0aW9fZ3B1X2ZiZGV2 X2luaXQodmdkZXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldCA9 IGRybV92YmxhbmtfaW5pdCh2Z2Rldi0+ZGRldiwgdmdkZXYtPm51bV9zY2Fub3V0cyk7Cj4gKwo+ ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KHZnZGV2LT5kZGV2KTsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3ZvaWQgdmlydGlvX2dwdV9tb2Rlc2V0X2Zpbmkoc3RydWN0IHZpcnRpb19n cHVfZGV2aWNlICp2Z2RldikKPiArewo+ICsJdmlydGlvX2dwdV9mYmRldl9maW5pKHZnZGV2KTsK PiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKHZnZGV2LT5kZGV2KTsKPiArfQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZHJtX2J1cy5jIGIvZHJpdmVycy9n cHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2RybV9idXMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uZTRiNTBhZgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vdmlydGlvL3ZpcnRncHVfZHJtX2J1cy5jCj4gQEAgLTAsMCArMSw2OCBAQAo+ICsjaW5j bHVkZSA8bGludXgvcGNpLmg+Cj4gKwo+ICsjaW5jbHVkZSAidmlydGdwdV9kcnYuaCIKPiArCj4g K2ludCBkcm1fdmlydGlvX3NldF9idXNpZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qg ZHJtX21hc3RlciAqbWFzdGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldi0+ cGRldjsKPiArCj4gKwlpZiAocGRldikgewo+ICsJCXJldHVybiBkcm1fcGNpX3NldF9idXNpZChk ZXYsIG1hc3Rlcik7Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg dmlydGlvX3BjaV9raWNrX291dF9maXJtd2FyZV9mYihzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikK PiArewo+ICsJc3RydWN0IGFwZXJ0dXJlc19zdHJ1Y3QgKmFwOwo+ICsJYm9vbCBwcmltYXJ5Owo+ ICsJYXAgPSBhbGxvY19hcGVydHVyZXMoMSk7Cj4gKwlpZiAoIWFwKQo+ICsJCXJldHVybjsKPiAr Cj4gKwlhcC0+cmFuZ2VzWzBdLmJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMik7 Cj4gKwlhcC0+cmFuZ2VzWzBdLnNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXYsIDIpOwo+ ICsKPiArCXByaW1hcnkgPSBwY2lfZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5mbGFn cwo+ICsJCSYgSU9SRVNPVVJDRV9ST01fU0hBRE9XOwo+ICsKPiArCXJlbW92ZV9jb25mbGljdGlu Z19mcmFtZWJ1ZmZlcnMoYXAsICJ2aXJ0aW9kcm1mYiIsIHByaW1hcnkpOwo+ICsKPiArCWtmcmVl KGFwKTsKPiArfQo+ICsKPiAraW50IGRybV92aXJ0aW9faW5pdChzdHJ1Y3QgZHJtX2RyaXZlciAq ZHJpdmVyLCBzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiArewo+ICsJc3RydWN0IGRybV9k ZXZpY2UgKmRldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJZGV2ID0gZHJtX2Rldl9hbGxvYyhkcml2 ZXIsICZ2ZGV2LT5kZXYpOwo+ICsJaWYgKCFkZXYpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwlk ZXYtPnZpcnRkZXYgPSB2ZGV2Owo+ICsJdmRldi0+cHJpdiA9IGRldjsKPiArCj4gKwlpZiAoc3Ry Y21wKHZkZXYtPmRldi5wYXJlbnQtPmJ1cy0+bmFtZSwgInBjaSIpID09IDApIHsKPiArCQlzdHJ1 Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYodmRldi0+ZGV2LnBhcmVudCk7Cj4gKwkJYm9v bCB2Z2EgPSAocGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBOwo+ICsJ CURSTV9JTkZPKCJwY2k6ICVzIGRldGVjdGVkXG4iLAo+ICsJCQkgdmdhID8gInZpcnRpby12Z2Ei IDogInZpcnRpby1ncHUtcGNpIik7Cj4gKwkJZGV2LT5wZGV2ID0gcGRldjsKPiArCQlpZiAodmdh KQo+ICsJCQl2aXJ0aW9fcGNpX2tpY2tfb3V0X2Zpcm13YXJlX2ZiKHBkZXYpOwo+ICsJfQo+ICsK PiArCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZGV2LCAwKTsKPiArCWlmIChyZXQpCj4gKwkJZ290 byBlcnJfZnJlZTsKPiArCj4gKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMg b24gbWlub3IgJWRcbiIsIGRyaXZlci0+bmFtZSwKPiArCQkgZHJpdmVyLT5tYWpvciwgZHJpdmVy LT5taW5vciwgZHJpdmVyLT5wYXRjaGxldmVsLAo+ICsJCSBkcml2ZXItPmRhdGUsIGRldi0+cHJp bWFyeS0+aW5kZXgpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX2ZyZWU6Cj4gKwlkcm1f ZGV2X3VucmVmKGRldik7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8v dmlydGdwdV9kcnYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMzY2 MmU4Ngo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRn cHVfZHJ2LmMKPiBAQCAtMCwwICsxLDEzMiBAQAo+ICsvKgo+ICsgKiAyMDExIFJlZCBIYXQsIElu Yy4KPiArICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4g KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2Fy ZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4g KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBWQSBMSU5VWCBTWVNURU1TIEFORC9PUiBJVFMgU1VQ UExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCj4gKyAqIE9USEVSIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLAo+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiArICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRX QVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKiAgICBEYXZlIEFpcmxpZSA8YWlybGllZEBy ZWRoYXQuY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgo+ICsjaW5j bHVkZSAiZHJtUC5oIgo+ICsjaW5jbHVkZSAiZHJtL2RybS5oIgo+ICsKPiArI2luY2x1ZGUgInZp cnRncHVfZHJ2LmgiCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXI7Cj4gKwo+ICtz dGF0aWMgaW50IHZpcnRpb19ncHVfbW9kZXNldCA9IC0xOwo+ICsKPiArTU9EVUxFX1BBUk1fREVT Qyhtb2Rlc2V0LCAiRGlzYWJsZS9FbmFibGUgbW9kZXNldHRpbmciKTsKPiArbW9kdWxlX3BhcmFt X25hbWVkKG1vZGVzZXQsIHZpcnRpb19ncHVfbW9kZXNldCwgaW50LCAwNDAwKTsKPiArCj4gK3N0 YXRpYyBpbnQgdmlydGlvX2dwdV9wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiAr ewo+ICsjaWZkZWYgQ09ORklHX1ZHQV9DT05TT0xFCj4gKwlpZiAodmdhY29uX3RleHRfZm9yY2Uo KSAmJiB2aXJ0aW9fZ3B1X21vZGVzZXQgPT0gLTEpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKyNl bmRpZgo+ICsKPiArCWlmICh2aXJ0aW9fZ3B1X21vZGVzZXQgPT0gMCkKPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiArCj4gKwlyZXR1cm4gZHJtX3ZpcnRpb19pbml0KCZkcml2ZXIsIHZkZXYpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X3JlbW92ZShzdHJ1Y3QgdmlydGlvX2Rldmlj ZSAqdmRldikKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHZkZXYtPnByaXY7Cj4g Kwlkcm1fcHV0X2RldihkZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X2Nv bmZpZ19jaGFuZ2VkKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gdmRldi0+cHJpdjsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2Rldmlj ZSAqdmdkZXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCXNjaGVkdWxlX3dvcmsoJnZnZGV2 LT5jb25maWdfY2hhbmdlZF93b3JrKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCB2aXJ0aW9f ZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7Cj4gKwl7IFZJUlRJT19JRF9HUFUsIFZJUlRJT19ERVZf QU5ZX0lEIH0sCj4gKwl7IDAgfSwKPiArfTsKPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmVh dHVyZXNbXSA9IHsKPiArfTsKPiArc3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19n cHVfZHJpdmVyID0gewo+ICsJLmZlYXR1cmVfdGFibGUgPSBmZWF0dXJlcywKPiArCS5mZWF0dXJl X3RhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGZlYXR1cmVzKSwKPiArCS5kcml2ZXIubmFtZSA9IEtC VUlMRF9NT0ROQU1FLAo+ICsJLmRyaXZlci5vd25lciA9IFRISVNfTU9EVUxFLAo+ICsJLmlkX3Rh YmxlID0gaWRfdGFibGUsCj4gKwkucHJvYmUgPSB2aXJ0aW9fZ3B1X3Byb2JlLAo+ICsJLnJlbW92 ZSA9IHZpcnRpb19ncHVfcmVtb3ZlLAo+ICsJLmNvbmZpZ19jaGFuZ2VkID0gdmlydGlvX2dwdV9j b25maWdfY2hhbmdlZAo+ICt9Owo+ICsKPiArbW9kdWxlX3ZpcnRpb19kcml2ZXIodmlydGlvX2dw dV9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0RFVklDRV9UQUJMRSh2aXJ0aW8sIGlkX3RhYmxlKTsK PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJWaXJ0aW8gR1BVIGRyaXZlciIpOwo+ICtNT0RVTEVfTElD RU5TRSgiR1BMIik7Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2 aXJ0aW9fZ3B1X2RyaXZlcl9mb3BzID0gewo+ICsJLm93bmVyID0gVEhJU19NT0RVTEUsCj4gKwku b3BlbiA9IGRybV9vcGVuLAo+ICsJLm1tYXAgPSB2aXJ0aW9fZ3B1X21tYXAsCj4gKwkucG9sbCA9 IGRybV9wb2xsLAo+ICsJLnJlYWQgPSBkcm1fcmVhZCwKPiArCS51bmxvY2tlZF9pb2N0bAk9IGRy bV9pb2N0bCwKPiArCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCj4gKyNpZmRlZiBDT05GSUdfQ09N UEFUCj4gKwkuY29tcGF0X2lvY3RsID0gZHJtX2NvbXBhdF9pb2N0bCwKPiArI2VuZGlmCj4gKwku bGxzZWVrID0gbm9vcF9sbHNlZWssCj4gK307Cj4gKwo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1f ZHJpdmVyIGRyaXZlciA9IHsKPiArCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfTU9ERVNFVCB8 IERSSVZFUl9HRU0sCj4gKwkuc2V0X2J1c2lkID0gZHJtX3ZpcnRpb19zZXRfYnVzaWQsCj4gKwku bG9hZCA9IHZpcnRpb19ncHVfZHJpdmVyX2xvYWQsCj4gKwkudW5sb2FkID0gdmlydGlvX2dwdV9k cml2ZXJfdW5sb2FkLAo+ICsKPiArCS5kdW1iX2NyZWF0ZSA9IHZpcnRpb19ncHVfbW9kZV9kdW1i X2NyZWF0ZSwKPiArCS5kdW1iX21hcF9vZmZzZXQgPSB2aXJ0aW9fZ3B1X21vZGVfZHVtYl9tbWFw LAo+ICsJLmR1bWJfZGVzdHJveSA9IHZpcnRpb19ncHVfbW9kZV9kdW1iX2Rlc3Ryb3ksCj4gKwo+ ICsjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCj4gKwkuZGVidWdmc19pbml0ID0gdmlydGlv X2dwdV9kZWJ1Z2ZzX2luaXQsCj4gKwkuZGVidWdmc19jbGVhbnVwID0gdmlydGlvX2dwdV9kZWJ1 Z2ZzX3Rha2Vkb3duLAo+ICsjZW5kaWYKPiArCj4gKwkuZ2VtX2ZyZWVfb2JqZWN0ID0gdmlydGlv X2dwdV9nZW1fZnJlZV9vYmplY3QsCj4gKwkuZm9wcyA9ICZ2aXJ0aW9fZ3B1X2RyaXZlcl9mb3Bz LAo+ICsKPiArCS5uYW1lID0gRFJJVkVSX05BTUUsCj4gKwkuZGVzYyA9IERSSVZFUl9ERVNDLAo+ ICsJLmRhdGUgPSBEUklWRVJfREFURSwKPiArCS5tYWpvciA9IERSSVZFUl9NQUpPUiwKPiArCS5t aW5vciA9IERSSVZFUl9NSU5PUiwKPiArCS5wYXRjaGxldmVsID0gRFJJVkVSX1BBVENITEVWRUws Cj4gK307Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kcnYu aCBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kcnYuaAo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNjA4MmVjMwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZHJ2LmgKPiBAQCAtMCwwICsxLDMyNiBAQAo+ ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVkIEhhdAo+ICsgKgo+ICsgKiBUaGlzIGZp bGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIHYyLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUg bWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgo+ICsgKiBtb3JlIGRldGFpbHMuCj4g KyAqLwo+ICsKPiArI2lmbmRlZiBWSVJUSU9fRFJWX0gKPiArI2RlZmluZSBWSVJUSU9fRFJWX0gK PiArCj4gKyNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3ZpcnRp b19pZHMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KPiArI2luY2x1ZGUg PGxpbnV4L3ZpcnRpb19ncHUuaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybV9nZW0uaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4K PiArI2luY2x1ZGUgPHR0bS90dG1fYm9fYXBpLmg+Cj4gKyNpbmNsdWRlIDx0dG0vdHRtX2JvX2Ry aXZlci5oPgo+ICsjaW5jbHVkZSA8dHRtL3R0bV9wbGFjZW1lbnQuaD4KPiArI2luY2x1ZGUgPHR0 bS90dG1fbW9kdWxlLmg+Cj4gKwo+ICsjZGVmaW5lIERSSVZFUl9OQU1FICJ2aXJ0aW9fZ3B1Igo+ ICsjZGVmaW5lIERSSVZFUl9ERVNDICJ2aXJ0aW8gR1BVIgo+ICsjZGVmaW5lIERSSVZFUl9EQVRF ICIwIgo+ICsKPiArI2RlZmluZSBEUklWRVJfTUFKT1IgMAo+ICsjZGVmaW5lIERSSVZFUl9NSU5P UiAwCj4gKyNkZWZpbmUgRFJJVkVSX1BBVENITEVWRUwgMQo+ICsKPiArLyogdmlydGdwdV9kcm1f YnVzLmMgKi8KPiAraW50IGRybV92aXJ0aW9fc2V0X2J1c2lkKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpOwo+ICtpbnQgZHJtX3ZpcnRpb19pbml0KHN0 cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KTsKPiAr Cj4gK3N0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCB7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Z2VtX2Jhc2U7Cj4gKwl1aW50MzJfdCBod19yZXNfaGFuZGxlOwo+ICsKPiArCXN0cnVjdCBzZ190 YWJsZSAqcGFnZXM7Cj4gKwl2b2lkICp2bWFwOwo+ICsJYm9vbCBkdW1iOwo+ICsJc3RydWN0IHR0 bV9wbGFjZSAgICAgICAgICAgICAgICBwbGFjZW1lbnRfY29kZTsKPiArCXN0cnVjdCB0dG1fcGxh Y2VtZW50CQlwbGFjZW1lbnQ7Cj4gKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QJdGJvOwo+ICsJ c3RydWN0IHR0bV9ib19rbWFwX29iagkJa21hcDsKPiArfTsKPiArI2RlZmluZSBnZW1fdG9fdmly dGlvX2dwdV9vYmooZ29iaikgXAo+ICsJY29udGFpbmVyX29mKChnb2JqKSwgc3RydWN0IHZpcnRp b19ncHVfb2JqZWN0LCBnZW1fYmFzZSkKPiArCj4gK3N0cnVjdCB2aXJ0aW9fZ3B1X3ZidWZmZXI7 Cj4gK3N0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZTsKPiArCj4gK3R5cGVkZWYgdm9pZCAoKnZpcnRp b19ncHVfcmVzcF9jYikoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKPiArCQkJCSAg IHN0cnVjdCB2aXJ0aW9fZ3B1X3ZidWZmZXIgKnZidWYpOwo+ICsKPiArc3RydWN0IHZpcnRpb19n cHVfZmVuY2VfZHJpdmVyIHsKPiArCWF0b21pYzY0X3QgICAgICAgbGFzdF9zZXE7Cj4gKwl1aW50 NjRfdCAgICAgICAgIHN5bmNfc2VxOwo+ICsJc3RydWN0IGxpc3RfaGVhZCBmZW5jZXM7Cj4gKwlz cGlubG9ja190ICAgICAgIGxvY2s7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmlydGlvX2dwdV9mZW5j ZSB7Cj4gKwlzdHJ1Y3QgZmVuY2UgZjsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlX2RyaXZl ciAqZHJ2Owo+ICsJc3RydWN0IGxpc3RfaGVhZCBub2RlOwo+ICsJdWludDY0X3Qgc2VxOwo+ICt9 Owo+ICsjZGVmaW5lIHRvX3ZpcnRpb19mZW5jZSh4KSBcCj4gKwljb250YWluZXJfb2YoeCwgc3Ry dWN0IHZpcnRpb19ncHVfZmVuY2UsIGYpCj4gKwo+ICtzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVy IHsKPiArCWNoYXIgKmJ1ZjsKPiArCWludCBzaXplOwo+ICsJYm9vbCBkZWJ1Z19kdW1wX3NnbGlz dHM7Cj4gKwo+ICsJdm9pZCAqZGF0YV9idWY7Cj4gKwl1aW50MzJfdCBkYXRhX3NpemU7Cj4gKwo+ ICsJY2hhciAqcmVzcF9idWY7Cj4gKwlpbnQgcmVzcF9zaXplOwo+ICsKPiArCXZpcnRpb19ncHVf cmVzcF9jYiByZXNwX2NiOwo+ICsKPiArCXN0cnVjdCBsaXN0X2hlYWQgZGVzdHJveV9saXN0Owo+ ICt9Owo+ICsKPiArc3RydWN0IHZpcnRpb19ncHVfb3V0cHV0IHsKPiArCWludCBpbmRleDsKPiAr CXN0cnVjdCBkcm1fY3J0YyBjcnRjOwo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubjsKPiAr CXN0cnVjdCBkcm1fZW5jb2RlciBlbmM7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9kaXNwbGF5X29u ZSBpbmZvOwo+ICsJc3RydWN0IHZpcnRpb19ncHVfdXBkYXRlX2N1cnNvciBjdXJzb3I7Cj4gKwlp bnQgY3VyX3g7Cj4gKwlpbnQgY3VyX3k7Cj4gK307Cj4gKyNkZWZpbmUgZHJtX2NydGNfdG9fdmly dGlvX2dwdV9vdXRwdXQoeCkgXAo+ICsJY29udGFpbmVyX29mKHgsIHN0cnVjdCB2aXJ0aW9fZ3B1 X291dHB1dCwgY3J0YykKPiArI2RlZmluZSBkcm1fY29ubmVjdG9yX3RvX3ZpcnRpb19ncHVfb3V0 cHV0KHgpIFwKPiArCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgdmlydGlvX2dwdV9vdXRwdXQsIGNv bm4pCj4gKyNkZWZpbmUgZHJtX2VuY29kZXJfdG9fdmlydGlvX2dwdV9vdXRwdXQoeCkgXAo+ICsJ Y29udGFpbmVyX29mKHgsIHN0cnVjdCB2aXJ0aW9fZ3B1X291dHB1dCwgZW5jKQo+ICsKPiArc3Ry dWN0IHZpcnRpb19ncHVfZnJhbWVidWZmZXIgewo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBi YXNlOwo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwlpbnQgeDEsIHkxLCB4Miwg eTI7IC8qIGRpcnR5IHJlY3QgKi8KPiArCXNwaW5sb2NrX3QgZGlydHlfbG9jazsKPiArCXVpbnQz Ml90IGh3X3Jlc19oYW5kbGU7Cj4gK307Cj4gKyNkZWZpbmUgdG9fdmlydGlvX2dwdV9mcmFtZWJ1 ZmZlcih4KSBcCj4gKwljb250YWluZXJfb2YoeCwgc3RydWN0IHZpcnRpb19ncHVfZnJhbWVidWZm ZXIsIGJhc2UpCj4gKwo+ICtzdHJ1Y3QgdmlydGlvX2dwdV9tbWFuIHsKPiArCXN0cnVjdCB0dG1f Ym9fZ2xvYmFsX3JlZiAgICAgICAgYm9fZ2xvYmFsX3JlZjsKPiArCXN0cnVjdCBkcm1fZ2xvYmFs X3JlZmVyZW5jZQltZW1fZ2xvYmFsX3JlZjsKPiArCWJvb2wJCQkJbWVtX2dsb2JhbF9yZWZlcmVu Y2VkOwo+ICsJc3RydWN0IHR0bV9ib19kZXZpY2UJCWJkZXY7Cj4gK307Cj4gKwo+ICtzdHJ1Y3Qg dmlydGlvX2dwdV9mYmRldjsKPiArCj4gK3N0cnVjdCB2aXJ0aW9fZ3B1X3F1ZXVlIHsKPiArCXN0 cnVjdCB2aXJ0cXVldWUgKnZxOwo+ICsJc3BpbmxvY2tfdCBxbG9jazsKPiArCXdhaXRfcXVldWVf aGVhZF90IGFja19xdWV1ZTsKPiArCXN0cnVjdCB3b3JrX3N0cnVjdCBkZXF1ZXVlX3dvcms7Cj4g K307Cj4gKwo+ICtzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2Ugewo+ICsJc3RydWN0IGRldmljZSAq ZGV2Owo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXY7Cj4gKwo+ICsJc3RydWN0IHZpcnRpb19k ZXZpY2UgKnZkZXY7Cj4gKwo+ICsJc3RydWN0IHZpcnRpb19ncHVfbW1hbiBtbWFuOwo+ICsKPiAr CS8qIHBvaW50ZXIgdG8gZmJkZXYgaW5mbyBzdHJ1Y3R1cmUgKi8KPiArCXN0cnVjdCB2aXJ0aW9f Z3B1X2ZiZGV2ICp2Z2ZiZGV2Owo+ICsJc3RydWN0IHZpcnRpb19ncHVfb3V0cHV0IG91dHB1dHNb VklSVElPX0dQVV9NQVhfU0NBTk9VVFNdOwo+ICsJdWludDMyX3QgbnVtX3NjYW5vdXRzOwo+ICsK PiArCXN0cnVjdCB2aXJ0aW9fZ3B1X3F1ZXVlIGN0cmxxOwo+ICsJc3RydWN0IHZpcnRpb19ncHVf cXVldWUgY3Vyc29ycTsKPiArCj4gKwlzdHJ1Y3QgaWRyCXJlc291cmNlX2lkcjsKPiArCXNwaW5s b2NrX3QgcmVzb3VyY2VfaWRyX2xvY2s7Cj4gKwo+ICsJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzcF93 cTsKPiArCS8qIGN1cnJlbnQgZGlzcGxheSBpbmZvICovCj4gKwlzcGlubG9ja190IGRpc3BsYXlf aW5mb19sb2NrOwo+ICsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlX2RyaXZlciBmZW5jZV9k cnY7Cj4gKwo+ICsJc3RydWN0IGlkcgljdHhfaWRfaWRyOwo+ICsJc3BpbmxvY2tfdCBjdHhfaWRf aWRyX2xvY2s7Cj4gKwo+ICsJc3RydWN0IHdvcmtfc3RydWN0IGNvbmZpZ19jaGFuZ2VkX3dvcms7 Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmlydGlvX2dwdV9mcHJpdiB7Cj4gKwl1aW50MzJfdCBjdHhf aWQ7Cj4gK307Cj4gKwo+ICsvKiB2aXJ0aW9faW9jdGwuYyAqLwo+ICsjZGVmaW5lIERSTV9WSVJU SU9fTlVNX0lPQ1RMUyAxMAo+ICtleHRlcm4gc3RydWN0IGRybV9pb2N0bF9kZXNjIHZpcnRpb19n cHVfaW9jdGxzW0RSTV9WSVJUSU9fTlVNX0lPQ1RMU107Cj4gKwo+ICsvKiB2aXJ0aW9fa21zLmMg Ki8KPiAraW50IHZpcnRpb19ncHVfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dW5zaWduZWQgbG9uZyBmbGFncyk7Cj4gK2ludCB2aXJ0aW9fZ3B1X2RyaXZlcl91bmxvYWQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldik7Cj4gKwo+ICsvKiB2aXJ0aW9fZ2VtLmMgKi8KPiArdm9pZCB2 aXJ0aW9fZ3B1X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmop Owo+ICtpbnQgdmlydGlvX2dwdV9nZW1faW5pdChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZn ZGV2KTsKPiArdm9pZCB2aXJ0aW9fZ3B1X2dlbV9maW5pKHN0cnVjdCB2aXJ0aW9fZ3B1X2Rldmlj ZSAqdmdkZXYpOwo+ICtpbnQgdmlydGlvX2dwdV9nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSwKPiArCQkJICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkgIHVpbnQ2NF90IHNp emUsCj4gKwkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqb2JqX3AsCj4gKwkJCSAgdWludDMy X3QgKmhhbmRsZV9wKTsKPiArc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICp2aXJ0aW9fZ3B1X2Fs bG9jX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJCQkgIHNpemVfdCBzaXpl LCBib29sIGtlcm5lbCwKPiArCQkJCQkJICBib29sIHBpbm5lZCk7Cj4gK2ludCB2aXJ0aW9fZ3B1 X21vZGVfZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4gKwkJCQlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICph cmdzKTsKPiAraW50IHZpcnRpb19ncHVfbW9kZV9kdW1iX2Rlc3Ryb3koc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsCj4gKwkJCQkgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCSB1aW50 MzJfdCBoYW5kbGUpOwo+ICtpbnQgdmlydGlvX2dwdV9tb2RlX2R1bWJfbW1hcChzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdiwKPiArCQkJICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAr CQkJICAgICAgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCAqb2Zmc2V0X3ApOwo+ICsKPiArLyog dmlydGlvX2ZiICovCj4gKyNkZWZpbmUgVklSVElPX0dQVUZCX0NPTk5fTElNSVQgMQo+ICtpbnQg dmlydGlvX2dwdV9mYmRldl9pbml0KHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYpOwo+ ICt2b2lkIHZpcnRpb19ncHVfZmJkZXZfZmluaShzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZn ZGV2KTsKPiAraW50IHZpcnRpb19ncHVfc3VyZmFjZV9kaXJ0eShzdHJ1Y3QgdmlydGlvX2dwdV9m cmFtZWJ1ZmZlciAqcWZiLAo+ICsJCQkgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywK PiArCQkJICAgICB1bnNpZ25lZCBudW1fY2xpcHMpOwo+ICsvKiB2aXJ0aW8gdmcgKi8KPiAraW50 IHZpcnRpb19ncHVfcmVzb3VyY2VfaWRfZ2V0KHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdk ZXYsCj4gKwkJCSAgICAgICB1aW50MzJfdCAqcmVzaWQpOwo+ICt2b2lkIHZpcnRpb19ncHVfcmVz b3VyY2VfaWRfcHV0KHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsIHVpbnQzMl90IGlk KTsKPiAraW50IHZpcnRpb19ncHVfY21kX2NyZWF0ZV9yZXNvdXJjZShzdHJ1Y3QgdmlydGlvX2dw dV9kZXZpY2UgKnZnZGV2LAo+ICsJCQkJICAgdWludDMyX3QgcmVzb3VyY2VfaWQsCj4gKwkJCQkg ICB1aW50MzJfdCBmb3JtYXQsCj4gKwkJCQkgICB1aW50MzJfdCB3aWR0aCwKPiArCQkJCSAgIHVp bnQzMl90IGhlaWdodCk7Cj4gK2ludCB2aXJ0aW9fZ3B1X2NtZF91bnJlZl9yZXNvdXJjZShzdHJ1 Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAo+ICsJCQkJICB1aW50MzJfdCByZXNvdXJjZV9p ZCk7Cj4gK2ludCB2aXJ0aW9fZ3B1X2NtZF90cmFuc2Zlcl90b19ob3N0XzJkKHN0cnVjdCB2aXJ0 aW9fZ3B1X2RldmljZSAqdmdkZXYsCj4gKwkJCQkgICAgICAgdWludDMyX3QgcmVzb3VyY2VfaWQs IHVpbnQ2NF90IG9mZnNldCwKPiArCQkJCSAgICAgICBfX2xlMzIgd2lkdGgsIF9fbGUzMiBoZWln aHQsCj4gKwkJCQkgICAgICAgX19sZTMyIHgsIF9fbGUzMiB5LAo+ICsJCQkJICAgICAgIHN0cnVj dCB2aXJ0aW9fZ3B1X2ZlbmNlICoqZmVuY2UpOwo+ICtpbnQgdmlydGlvX2dwdV9jbWRfcmVzb3Vy Y2VfZmx1c2goc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKPiArCQkJCSAgdWludDMy X3QgcmVzb3VyY2VfaWQsCj4gKwkJCQkgIHVpbnQzMl90IHgsIHVpbnQzMl90IHksCj4gKwkJCQkg IHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpOwo+ICtpbnQgdmlydGlvX2dwdV9jbWRf c2V0X3NjYW5vdXQoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKPiArCQkJICAgICAg IHVpbnQzMl90IHNjYW5vdXRfaWQsIHVpbnQzMl90IHJlc291cmNlX2lkLAo+ICsJCQkgICAgICAg dWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKPiArCQkJICAgICAgIHVpbnQzMl90IHgs IHVpbnQzMl90IHkpOwo+ICtpbnQgdmlydGlvX2dwdV9vYmplY3RfYXR0YWNoKHN0cnVjdCB2aXJ0 aW9fZ3B1X2RldmljZSAqdmdkZXYsCj4gKwkJCSAgICAgc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0 ICpvYmosCj4gKwkJCSAgICAgdWludDMyX3QgcmVzb3VyY2VfaWQsCj4gKwkJCSAgICAgc3RydWN0 IHZpcnRpb19ncHVfZmVuY2UgKipmZW5jZSk7Cj4gK2ludCB2aXJ0aW9fZ3B1X2F0dGFjaF9zdGF0 dXNfcGFnZShzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2KTsKPiAraW50IHZpcnRpb19n cHVfZGV0YWNoX3N0YXR1c19wYWdlKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYpOwo+ ICt2b2lkIHZpcnRpb19ncHVfY3Vyc29yX3Bpbmcoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2 Z2RldiwKPiArCQkJICAgIHN0cnVjdCB2aXJ0aW9fZ3B1X291dHB1dCAqb3V0cHV0KTsKPiAraW50 IHZpcnRpb19ncHVfY21kX2dldF9kaXNwbGF5X2luZm8oc3RydWN0IHZpcnRpb19ncHVfZGV2aWNl ICp2Z2Rldik7Cj4gK2ludCB2aXJ0aW9fZ3B1X2NtZF9yZXNvdXJjZV9pbnZhbF9iYWNraW5nKHN0 cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCj4gKwkJCQkJICB1aW50MzJfdCByZXNvdXJj ZV9pZCk7Cj4gK3ZvaWQgdmlydGlvX2dwdV9jdHJsX2FjayhzdHJ1Y3QgdmlydHF1ZXVlICp2cSk7 Cj4gK3ZvaWQgdmlydGlvX2dwdV9jdXJzb3JfYWNrKHN0cnVjdCB2aXJ0cXVldWUgKnZxKTsKPiAr dm9pZCB2aXJ0aW9fZ3B1X2RlcXVldWVfY3RybF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y ayk7Cj4gK3ZvaWQgdmlydGlvX2dwdV9kZXF1ZXVlX2N1cnNvcl9mdW5jKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yayk7Cj4gKwo+ICsvKiB2aXJ0aW9fZ3B1X2Rpc3BsYXkuYyAqLwo+ICtpbnQgdmly dGlvX2dwdV9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQlz dHJ1Y3QgdmlydGlvX2dwdV9mcmFtZWJ1ZmZlciAqdmdmYiwKPiArCQkJCXN0cnVjdCBkcm1fbW9k ZV9mYl9jbWQyICptb2RlX2NtZCwKPiArCQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsK PiAraW50IHZpcnRpb19ncHVfbW9kZXNldF9pbml0KHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAq dmdkZXYpOwo+ICt2b2lkIHZpcnRpb19ncHVfbW9kZXNldF9maW5pKHN0cnVjdCB2aXJ0aW9fZ3B1 X2RldmljZSAqdmdkZXYpOwo+ICsKPiArLyogdmlydGlvX2dwdV90dG0uYyAqLwo+ICtpbnQgdmly dGlvX2dwdV90dG1faW5pdChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2KTsKPiArdm9p ZCB2aXJ0aW9fZ3B1X3R0bV9maW5pKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYpOwo+ ICtib29sIHZpcnRpb19ncHVfdHRtX2JvX2lzX3ZpcnRpb19ncHVfb2JqZWN0KHN0cnVjdCB0dG1f YnVmZmVyX29iamVjdCAqYm8pOwo+ICtpbnQgdmlydGlvX2dwdV9tbWFwKHN0cnVjdCBmaWxlICpm aWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cj4gKwo+ICsvKiB2aXJ0aW9fZ3B1X2Zl bmNlLmMgKi8KPiAraW50IHZpcnRpb19ncHVfZmVuY2VfZW1pdChzdHJ1Y3QgdmlydGlvX2dwdV9k ZXZpY2UgKnZnZGV2LAo+ICsJCQkgIHN0cnVjdCB2aXJ0aW9fZ3B1X2N0cmxfaGRyICpjbWRfaGRy LAo+ICsJCQkgIHN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlICoqZmVuY2UpOwo+ICt2b2lkIHZpcnRp b19ncHVfZmVuY2VfZXZlbnRfcHJvY2VzcyhzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZkZXYs Cj4gKwkJCQkgICAgdTY0IGxhc3Rfc2VxKTsKPiArCj4gKy8qIHZpcnRpb19ncHVfb2JqZWN0ICov Cj4gK2ludCB2aXJ0aW9fZ3B1X29iamVjdF9jcmVhdGUoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNl ICp2Z2RldiwKPiArCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIGJvb2wga2VybmVsLCBib29s IHBpbm5lZCwKPiArCQkJICAgICBzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKipib19wdHIpOwo+ ICtpbnQgdmlydGlvX2dwdV9vYmplY3Rfa21hcChzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJv LCB2b2lkICoqcHRyKTsKPiAraW50IHZpcnRpb19ncHVfb2JqZWN0X2dldF9zZ190YWJsZShzdHJ1 Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnFkZXYsCj4gKwkJCQkgICBzdHJ1Y3QgdmlydGlvX2dwdV9v YmplY3QgKmJvKTsKPiArdm9pZCB2aXJ0aW9fZ3B1X29iamVjdF9mcmVlX3NnX3RhYmxlKHN0cnVj dCB2aXJ0aW9fZ3B1X29iamVjdCAqYm8pOwo+ICtpbnQgdmlydGlvX2dwdV9vYmplY3Rfd2FpdChz dHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJvLCBib29sIG5vX3dhaXQpOwo+ICsKPiArc3RhdGlj IGlubGluZSBzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QqCj4gK3ZpcnRpb19ncHVfb2JqZWN0X3Jl ZihzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJvKQo+ICt7Cj4gKwl0dG1fYm9fcmVmZXJlbmNl KCZiby0+dGJvKTsKPiArCXJldHVybiBibzsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lk IHZpcnRpb19ncHVfb2JqZWN0X3VucmVmKHN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAqKmJvKQo+ ICt7Cj4gKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKnRibzsKPiArCj4gKwlpZiAoKCpibykg PT0gTlVMTCkKPiArCQlyZXR1cm47Cj4gKwl0Ym8gPSAmKCgqYm8pLT50Ym8pOwo+ICsJdHRtX2Jv X3VucmVmKCZ0Ym8pOwo+ICsJaWYgKHRibyA9PSBOVUxMKQo+ICsJCSpibyA9IE5VTEw7Cj4gK30K PiArCj4gK3N0YXRpYyBpbmxpbmUgdTY0IHZpcnRpb19ncHVfb2JqZWN0X21tYXBfb2Zmc2V0KHN0 cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAqYm8pCj4gK3sKPiArCXJldHVybiBkcm1fdm1hX25vZGVf b2Zmc2V0X2FkZHIoJmJvLT50Ym8udm1hX25vZGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5l IGludCB2aXJ0aW9fZ3B1X29iamVjdF9yZXNlcnZlKHN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAq Ym8sCj4gKwkJCQkJIGJvb2wgbm9fd2FpdCkKPiArewo+ICsJaW50IHI7Cj4gKwo+ICsJciA9IHR0 bV9ib19yZXNlcnZlKCZiby0+dGJvLCB0cnVlLCBub193YWl0LCBmYWxzZSwgTlVMTCk7Cj4gKwlp ZiAodW5saWtlbHkociAhPSAwKSkgewo+ICsJCWlmIChyICE9IC1FUkVTVEFSVFNZUykgewo+ICsJ CQlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnFkZXYgPQo+ICsJCQkJYm8tPmdlbV9iYXNlLmRl di0+ZGV2X3ByaXZhdGU7Cj4gKwkJCWRldl9lcnIocWRldi0+ZGV2LCAiJXAgcmVzZXJ2ZSBmYWls ZWRcbiIsIGJvKTsKPiArCQl9Cj4gKwkJcmV0dXJuIHI7Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIHZpcnRpb19ncHVfb2JqZWN0X3VucmVzZXJ2ZShz dHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJvKQo+ICt7Cj4gKwl0dG1fYm9fdW5yZXNlcnZlKCZi by0+dGJvKTsKPiArfQo+ICsKPiArLyogdmlyZ2wgZGVidWZzICovCj4gK2ludCB2aXJ0aW9fZ3B1 X2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7Cj4gK3ZvaWQgdmlydGlvX2dw dV9kZWJ1Z2ZzX3Rha2Vkb3duKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKPiArCj4gKyNlbmRp Zgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZmIuYyBiL2Ry aXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9mYi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi4xZDc5NDU3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS92aXJ0aW8vdmlydGdwdV9mYi5jCj4gQEAgLTAsMCArMSw0MTUgQEAKPiArI2luY2x1 ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgo+ICsjaW5j bHVkZSAidmlydGdwdV9kcnYuaCIKPiArCj4gKyNkZWZpbmUgVklSVElPX0dQVV9GQkNPTl9QT0xM X1BFUklPRCAoSFogLyA2MCkKPiArCj4gK3N0cnVjdCB2aXJ0aW9fZ3B1X2ZiZGV2IHsKPiArCXN0 cnVjdCBkcm1fZmJfaGVscGVyICAgICAgICAgICBoZWxwZXI7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dw dV9mcmFtZWJ1ZmZlciAgdmdmYjsKPiArCXN0cnVjdCBsaXN0X2hlYWQJICAgICAgIGZiZGV2X2xp c3Q7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgICAgICAgKnZnZGV2Owo+ICsJc3RydWN0 IGRlbGF5ZWRfd29yayAgICAgICAgICAgIHdvcms7Cj4gK307Cj4gKyNkZWZpbmUgRExfQUxJR05f VVAoeCwgYSkgQUxJR04oeCwgYSkKPiArI2RlZmluZSBETF9BTElHTl9ET1dOKHgsIGEpIEFMSUdO KHgtKGEtMSksIGEpCgpkb2VzIG5vdCB3b3JrIGlmIHggPCBhLgphbHNvIHNwYWNlcyBhcm91bmQg LSBtaXNzaW5nLgoKSSB3b3VsZCBzYXkganVzdCBvcGVuLWNvZGUgeCAvIHNpemVvZiBsb25nICog c2l6ZW9mIGxvbmcKYmVsb3cgYW5kIGRyb3AgYm90aCB0aGVzZSBtYWNyb3MuCgo+ICsKPiArc3Rh dGljIGludCB2aXJ0aW9fZ3B1X2RpcnR5X3VwZGF0ZShzdHJ1Y3QgdmlydGlvX2dwdV9mcmFtZWJ1 ZmZlciAqZmIsCj4gKwkJCQkgICBib29sIHN0b3JlLCBpbnQgeCwgaW50IHksCj4gKwkJCQkgICBp bnQgd2lkdGgsIGludCBoZWlnaHQpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBm Yi0+YmFzZS5kZXY7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKPiArCWJvb2wgc3RvcmVfZm9yX2xhdGVyID0gZmFsc2U7Cj4gKwlpbnQgYWxp Z25lZF94Owo+ICsJaW50IGJwcCA9IChmYi0+YmFzZS5iaXRzX3Blcl9waXhlbCAvIDgpOwoKZG9u J3QgcHV0ICgpIGFyb3VuZCB0aGUgd2hvbGUgZXhwcmVzc2lvbi4KCj4gKwlpbnQgeDIsIHkyOwo+ ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAqb2Jq ID0gZ2VtX3RvX3ZpcnRpb19ncHVfb2JqKGZiLT5vYmopOwo+ICsKPiArCWFsaWduZWRfeCA9IERM X0FMSUdOX0RPV04oeCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKPiArCXdpZHRoID0gRExfQUxJ R05fVVAod2lkdGggKyAoeC1hbGlnbmVkX3gpLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwoKbWlz c2luZyBzcGFjZXMgYXJvdW5kIC0gYWdhaW4KCj4gKwl4ID0gYWxpZ25lZF94Owo+ICsKPiArCWlm ICgod2lkdGggPD0gMCkgfHwKPiArCSAgICAoeCArIHdpZHRoID4gZmItPmJhc2Uud2lkdGgpIHx8 Cj4gKwkgICAgKHkgKyBoZWlnaHQgPiBmYi0+YmFzZS5oZWlnaHQpKSB7Cgp5b3UgZG9uJ3QgcmVh bGx5IG5lZWQgKCkgYXJvdW5kIDwgPiBpZiB1c2luZyBpdCB3aXRoIHx8LgoKCj4gKwkJRFJNX0RF QlVHKCJ2YWx1ZXMgb3V0IG9mIHJhbmdlICVkeCVkKyVkKyVkLCBmYiAlZHglZFxuIiwKPiArCQkJ ICB3aWR0aCwgaGVpZ2h0LCB4LCB5LAo+ICsJCQkgIGZiLT5iYXNlLndpZHRoLCBmYi0+YmFzZS5o ZWlnaHQpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCS8qIGlmIHdlIGFyZSBp biBhdG9taWMganVzdCBzdG9yZSB0aGUgaW5mbwo+ICsJICAgY2FuJ3QgdGVzdCBpbnNpZGUgc3Bp biBsb2NrICovCnNob3VsZCB1c2UgYSBkaWZmZXJlbnQgc3R5bGUgZm9yIG11bHRpbGluZSBjb21t ZW50cy4KCj4gKwlpZiAoaW5fYXRvbWljKCkgfHwgc3RvcmUpCj4gKwkJc3RvcmVfZm9yX2xhdGVy ID0gdHJ1ZTsKCmluX2F0b21pYyB1c2VycyBhcmUgc3VzcGVjdCwgdGhpcyBuZWVkcyBiZXR0ZXIg Y29tbWVudHMuIFdoYXQgYXJlIHlvdQp0cnlpbmcgdG8gdGVzdCBmb3IgaGVyZT8gaXQncyB1c3Vh bGx5IGJlc3QganVzdCBzcGxpdCB1cCBjb2RlLApvciBwYXNzIGEgZmxhZyBmcm9tIGNhbGxlcnMg dGhhdCBrbm93IGluIHdoaWNoIGNvbnRleHQKdGhleSBhcmUgaW52b2tlZCwgYnV0IG1heWJlIGl0 J3MganVzdGlmaWVkIGhlcmUuCgo+ICsKPiArCXgyID0geCArIHdpZHRoIC0gMTsKPiArCXkyID0g eSArIGhlaWdodCAtIDE7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmZiLT5kaXJ0eV9sb2Nr LCBmbGFncyk7Cj4gKwo+ICsJaWYgKGZiLT55MSA8IHkpCj4gKwkJeSA9IGZiLT55MTsKPiArCWlm IChmYi0+eTIgPiB5MikKPiArCQl5MiA9IGZiLT55MjsKPiArCWlmIChmYi0+eDEgPCB4KQo+ICsJ CXggPSBmYi0+eDE7Cj4gKwlpZiAoZmItPngyID4geDIpCj4gKwkJeDIgPSBmYi0+eDI7Cj4gKwo+ ICsJaWYgKHN0b3JlX2Zvcl9sYXRlcikgewo+ICsJCWZiLT54MSA9IHg7Cj4gKwkJZmItPngyID0g eDI7Cj4gKwkJZmItPnkxID0geTsKPiArCQlmYi0+eTIgPSB5MjsKPiArCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZmYi0+ZGlydHlfbG9jaywgZmxhZ3MpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ ICsKPiArCWZiLT54MSA9IGZiLT55MSA9IElOVF9NQVg7Cj4gKwlmYi0+eDIgPSBmYi0+eTIgPSAw Owo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZiLT5kaXJ0eV9sb2NrLCBmbGFncyk7 Cj4gKwo+ICsJewo+ICsJCXVpbnQzMl90IG9mZnNldDsKPiArCQl1aW50MzJfdCB3ID0geDIgLSB4 ICsgMTsKPiArCQl1aW50MzJfdCBoID0geTIgLSB5ICsgMTsKPiArCj4gKwkJb2Zmc2V0ID0gKHkg KiBmYi0+YmFzZS5waXRjaGVzWzBdKSArIHggKiBicHA7Cj4gKwo+ICsJCXZpcnRpb19ncHVfY21k X3RyYW5zZmVyX3RvX2hvc3RfMmQodmdkZXYsIG9iai0+aHdfcmVzX2hhbmRsZSwKPiArCQkJCQkJ ICAgb2Zmc2V0LAo+ICsJCQkJCQkgICBjcHVfdG9fbGUzMih3KSwKPiArCQkJCQkJICAgY3B1X3Rv X2xlMzIoaCksCj4gKwkJCQkJCSAgIGNwdV90b19sZTMyKHgpLAo+ICsJCQkJCQkgICBjcHVfdG9f bGUzMih5KSwKPiArCQkJCQkJICAgTlVMTCk7Cj4gKwo+ICsJfQo+ICsJdmlydGlvX2dwdV9jbWRf cmVzb3VyY2VfZmx1c2godmdkZXYsIG9iai0+aHdfcmVzX2hhbmRsZSwKPiArCQkJCSAgICAgIHgs IHksIHgyIC0geCArIDEsIHkyIC0geSArIDEpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2lu dCB2aXJ0aW9fZ3B1X3N1cmZhY2VfZGlydHkoc3RydWN0IHZpcnRpb19ncHVfZnJhbWVidWZmZXIg KnZnZmIsCj4gKwkJCSAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAo+ICsJCQkgICAg IHVuc2lnbmVkIG51bV9jbGlwcykKPiArewo+ICsJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2 Z2RldiA9IHZnZmItPmJhc2UuZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1 X29iamVjdCAqb2JqID0gZ2VtX3RvX3ZpcnRpb19ncHVfb2JqKHZnZmItPm9iaik7Cj4gKwlzdHJ1 Y3QgZHJtX2NsaXBfcmVjdCBub3JlY3Q7Cj4gKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHNf cHRyOwo+ICsJaW50IGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbTsKPiArCWludCBpOwo+ICsJaW50 IGluYyA9IDE7Cj4gKwlpZiAoIW51bV9jbGlwcykgewo+ICsJCW51bV9jbGlwcyA9IDE7Cj4gKwkJ Y2xpcHMgPSAmbm9yZWN0Owo+ICsJCW5vcmVjdC54MSA9IG5vcmVjdC55MSA9IDA7Cj4gKwkJbm9y ZWN0LngyID0gdmdmYi0+YmFzZS53aWR0aDsKPiArCQlub3JlY3QueTIgPSB2Z2ZiLT5iYXNlLmhl aWdodDsKPiArCX0KPiArCWxlZnQgPSBjbGlwcy0+eDE7Cj4gKwlyaWdodCA9IGNsaXBzLT54MjsK PiArCXRvcCA9IGNsaXBzLT55MTsKPiArCWJvdHRvbSA9IGNsaXBzLT55MjsKPiArCj4gKwkvKiBz a2lwIHRoZSBmaXJzdCBjbGlwIHJlY3QgKi8KPiArCWZvciAoaSA9IDEsIGNsaXBzX3B0ciA9IGNs aXBzICsgaW5jOwo+ICsJICAgICBpIDwgbnVtX2NsaXBzOyBpKyssIGNsaXBzX3B0ciArPSBpbmMp IHsKPiArCQlsZWZ0ID0gbWluX3QoaW50LCBsZWZ0LCAoaW50KWNsaXBzX3B0ci0+eDEpOwo+ICsJ CXJpZ2h0ID0gbWF4X3QoaW50LCByaWdodCwgKGludCljbGlwc19wdHItPngyKTsKPiArCQl0b3Ag PSBtaW5fdChpbnQsIHRvcCwgKGludCljbGlwc19wdHItPnkxKTsKPiArCQlib3R0b20gPSBtYXhf dChpbnQsIGJvdHRvbSwgKGludCljbGlwc19wdHItPnkyKTsKPiArCX0KPiArCj4gKwlpZiAob2Jq LT5kdW1iKQo+ICsJCXJldHVybiB2aXJ0aW9fZ3B1X2RpcnR5X3VwZGF0ZSh2Z2ZiLCBmYWxzZSwg bGVmdCwgdG9wLAo+ICsJCQkJCSAgICAgICByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCk7Cj4g Kwo+ICsJdmlydGlvX2dwdV9jbWRfcmVzb3VyY2VfZmx1c2godmdkZXYsIG9iai0+aHdfcmVzX2hh bmRsZSwKPiArCQkJCSAgICAgIGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3Ap Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRpb19ncHVfZmJfZGly dHlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBkZWxheWVk X3dvcmsgKmRlbGF5ZWRfd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKPiArCXN0cnVjdCB2 aXJ0aW9fZ3B1X2ZiZGV2ICp2ZmJkZXYgPQo+ICsJCWNvbnRhaW5lcl9vZihkZWxheWVkX3dvcmss IHN0cnVjdCB2aXJ0aW9fZ3B1X2ZiZGV2LCB3b3JrKTsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2Zy YW1lYnVmZmVyICp2Z2ZiID0gJnZmYmRldi0+dmdmYjsKPiArCj4gKwl2aXJ0aW9fZ3B1X2RpcnR5 X3VwZGF0ZSgmdmZiZGV2LT52Z2ZiLCBmYWxzZSwgdmdmYi0+eDEsIHZnZmItPnkxLAo+ICsJCQkJ dmdmYi0+eDIgLSB2Z2ZiLT54MSwgdmdmYi0+eTIgLSB2Z2ZiLT55MSk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHZpcnRpb19ncHVfM2RfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sCj4g KwkJCQkgICBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCj4gK3sKPiArCXN0cnVjdCB2 aXJ0aW9fZ3B1X2ZiZGV2ICp2ZmJkZXYgPSBpbmZvLT5wYXI7Cj4gKwlzeXNfZmlsbHJlY3QoaW5m bywgcmVjdCk7Cj4gKwl2aXJ0aW9fZ3B1X2RpcnR5X3VwZGF0ZSgmdmZiZGV2LT52Z2ZiLCB0cnVl LCByZWN0LT5keCwgcmVjdC0+ZHksCj4gKwkJCSAgICAgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdo dCk7Cj4gKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnZmYmRldi0+d29yaywgVklSVElPX0dQVV9G QkNPTl9QT0xMX1BFUklPRCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRpb19ncHVfM2Rf Y29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCj4gKwkJCQkgICBjb25zdCBzdHJ1Y3QgZmJf Y29weWFyZWEgKmFyZWEpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZiZGV2ICp2ZmJkZXYg PSBpbmZvLT5wYXI7Cj4gKwlzeXNfY29weWFyZWEoaW5mbywgYXJlYSk7Cj4gKwl2aXJ0aW9fZ3B1 X2RpcnR5X3VwZGF0ZSgmdmZiZGV2LT52Z2ZiLCB0cnVlLCBhcmVhLT5keCwgYXJlYS0+ZHksCj4g KwkJCSAgIGFyZWEtPndpZHRoLCBhcmVhLT5oZWlnaHQpOwo+ICsJc2NoZWR1bGVfZGVsYXllZF93 b3JrKCZ2ZmJkZXYtPndvcmssIFZJUlRJT19HUFVfRkJDT05fUE9MTF9QRVJJT0QpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1XzNkX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAq aW5mbywKPiArCQkJCSAgICBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQo+ICt7Cj4gKwlz dHJ1Y3QgdmlydGlvX2dwdV9mYmRldiAqdmZiZGV2ID0gaW5mby0+cGFyOwo+ICsJc3lzX2ltYWdl YmxpdChpbmZvLCBpbWFnZSk7Cj4gKwl2aXJ0aW9fZ3B1X2RpcnR5X3VwZGF0ZSgmdmZiZGV2LT52 Z2ZiLCB0cnVlLCBpbWFnZS0+ZHgsIGltYWdlLT5keSwKPiArCQkJICAgICBpbWFnZS0+d2lkdGgs IGltYWdlLT5oZWlnaHQpOwo+ICsJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ2ZmJkZXYtPndvcmss IFZJUlRJT19HUFVfRkJDT05fUE9MTF9QRVJJT0QpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0 IGZiX29wcyB2aXJ0aW9fZ3B1ZmJfb3BzID0gewo+ICsJLm93bmVyID0gVEhJU19NT0RVTEUsCj4g KwkuZmJfY2hlY2tfdmFyID0gZHJtX2ZiX2hlbHBlcl9jaGVja192YXIsCj4gKwkuZmJfc2V0X3Bh ciA9IGRybV9mYl9oZWxwZXJfc2V0X3BhciwgLyogVE9ETzogY29weSB2bXdnZnggKi8KPiArCS5m Yl9maWxscmVjdCA9IHZpcnRpb19ncHVfM2RfZmlsbHJlY3QsCj4gKwkuZmJfY29weWFyZWEgPSB2 aXJ0aW9fZ3B1XzNkX2NvcHlhcmVhLAo+ICsJLmZiX2ltYWdlYmxpdCA9IHZpcnRpb19ncHVfM2Rf aW1hZ2VibGl0LAo+ICsJLmZiX3Bhbl9kaXNwbGF5ID0gZHJtX2ZiX2hlbHBlcl9wYW5fZGlzcGxh eSwKPiArCS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCj4gKwkuZmJfc2V0Y21hcCA9 IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKPiArCS5mYl9kZWJ1Z19lbnRlciA9IGRybV9mYl9oZWxw ZXJfZGVidWdfZW50ZXIsCj4gKwkuZmJfZGVidWdfbGVhdmUgPSBkcm1fZmJfaGVscGVyX2RlYnVn X2xlYXZlLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB2aXJ0aW9fZ3B1X3ZtYXBfZmIoc3RydWN0 IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKPiArCQkJICAgICAgc3RydWN0IHZpcnRpb19ncHVf b2JqZWN0ICpvYmopCj4gK3sKPiArCXJldHVybiB2aXJ0aW9fZ3B1X29iamVjdF9rbWFwKG9iaiwg TlVMTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmlydGlvX2dwdWZiX2NyZWF0ZShzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqaGVscGVyLAo+ICsJCQkgICAgICAgc3RydWN0IGRybV9mYl9oZWxwZXJf c3VyZmFjZV9zaXplICpzaXplcykKPiArewo+ICsJc3RydWN0IHZpcnRpb19ncHVfZmJkZXYgKnZm YmRldiA9Cj4gKwkJY29udGFpbmVyX29mKGhlbHBlciwgc3RydWN0IHZpcnRpb19ncHVfZmJkZXYs IGhlbHBlcik7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaGVscGVyLT5kZXY7Cj4gKwlz dHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0 cnVjdCBmYl9pbmZvICppbmZvOwo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gKwlz dHJ1Y3QgZHJtX21vZGVfZmJfY21kMiBtb2RlX2NtZCA9IHt9Owo+ICsJc3RydWN0IHZpcnRpb19n cHVfb2JqZWN0ICpvYmo7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSB2Z2Rldi0+ZGV2Owo+ ICsJdWludDMyX3QgcmVzaWQsIGZvcm1hdCwgc2l6ZTsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYg KHNpemVzLT5zdXJmYWNlX2JwcCA9PSAyNCkKPiArCQlzaXplcy0+c3VyZmFjZV9icHAgPSAzMjsK PiArCW1vZGVfY21kLndpZHRoID0gc2l6ZXMtPnN1cmZhY2Vfd2lkdGg7Cj4gKwltb2RlX2NtZC5o ZWlnaHQgPSBzaXplcy0+c3VyZmFjZV9oZWlnaHQ7Cj4gKwltb2RlX2NtZC5waXRjaGVzWzBdID0g bW9kZV9jbWQud2lkdGggKiAoKHNpemVzLT5zdXJmYWNlX2JwcCArIDcpIC8gOCk7Cj4gKwltb2Rl X2NtZC5waXhlbF9mb3JtYXQgPSBkcm1fbW9kZV9sZWdhY3lfZmJfZm9ybWF0KHNpemVzLT5zdXJm YWNlX2JwcCwKPiArCQkJCQkJCSAgc2l6ZXMtPnN1cmZhY2VfZGVwdGgpOwo+ICsKPiArCXN3aXRj aCAobW9kZV9jbWQucGl4ZWxfZm9ybWF0KSB7Cj4gKyNpZmRlZiBfX0JJR19FTkRJQU4KPiArCWNh c2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiArCQlmb3JtYXQgPSBWSVJUSU9fR1BVX0ZPUk1BVF9Y OFI4RzhCOF9VTk9STTsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoK PiArCQlmb3JtYXQgPSBWSVJUSU9fR1BVX0ZPUk1BVF9BOFI4RzhCOF9VTk9STTsKPiArCQlicmVh azsKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4ODoKPiArCQlmb3JtYXQgPSBWSVJUSU9fR1BV X0ZPUk1BVF9COEc4UjhYOF9VTk9STTsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9C R1JBODg4ODoKPiArCQlmb3JtYXQgPSBWSVJUSU9fR1BVX0ZPUk1BVF9COEc4UjhBOF9VTk9STTsK PiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JYODg4ODoKPiArCQlmb3JtYXQgPSBW SVJUSU9fR1BVX0ZPUk1BVF9SOEc4QjhYOF9VTk9STTsKPiArCQlicmVhazsKPiArCWNhc2UgRFJN X0ZPUk1BVF9SR0JBODg4ODoKPiArCQlmb3JtYXQgPSBWSVJUSU9fR1BVX0ZPUk1BVF9SOEc4QjhB OF9VTk9STTsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKPiArCQlm b3JtYXQgPSBWSVJUSU9fR1BVX0ZPUk1BVF9YOEI4RzhSOF9VTk9STTsKPiArCQlicmVhazsKPiAr CWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKPiArCQlmb3JtYXQgPSBWSVJUSU9fR1BVX0ZPUk1B VF9BOEI4RzhSOF9VTk9STTsKPiArCQlicmVhazsKPiArI2Vsc2UKPiArCWNhc2UgRFJNX0ZPUk1B VF9YUkdCODg4ODoKPiArCQlmb3JtYXQgPSBWSVJUSU9fR1BVX0ZPUk1BVF9COEc4UjhYOF9VTk9S TTsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKPiArCQlmb3JtYXQg PSBWSVJUSU9fR1BVX0ZPUk1BVF9COEc4UjhBOF9VTk9STTsKPiArCQlicmVhazsKPiArCWNhc2Ug RFJNX0ZPUk1BVF9CR1JYODg4ODoKPiArCQlmb3JtYXQgPSBWSVJUSU9fR1BVX0ZPUk1BVF9YOFI4 RzhCOF9VTk9STTsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKPiAr CQlmb3JtYXQgPSBWSVJUSU9fR1BVX0ZPUk1BVF9BOFI4RzhCOF9VTk9STTsKPiArCQlicmVhazsK PiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JYODg4ODoKPiArCQlmb3JtYXQgPSBWSVJUSU9fR1BVX0ZP Uk1BVF9YOEI4RzhSOF9VTk9STTsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JB ODg4ODoKPiArCQlmb3JtYXQgPSBWSVJUSU9fR1BVX0ZPUk1BVF9BOEI4RzhSOF9VTk9STTsKPiAr CQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKPiArCQlmb3JtYXQgPSBWSVJU SU9fR1BVX0ZPUk1BVF9SOEc4QjhYOF9VTk9STTsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZP Uk1BVF9BQkdSODg4ODoKPiArCQlmb3JtYXQgPSBWSVJUSU9fR1BVX0ZPUk1BVF9SOEc4QjhBOF9V Tk9STTsKPiArCQlicmVhazsKPiArI2VuZGlmCj4gKwlkZWZhdWx0Ogo+ICsJCWZvcm1hdCA9IDA7 Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwlpZiAoZm9ybWF0ID09IDApIHsKPiArCQlyZXQgPSAtRUlO VkFMOwo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGZpbmQgdmlydGlvIGdwdSBmb3JtYXQgZm9y ICVkXG4iLAo+ICsJCQkgIG1vZGVfY21kLnBpeGVsX2Zvcm1hdCk7Cj4gKwkJZ290byBmYWlsOwo+ ICsJfQo+ICsKPiArCXNpemUgPSBtb2RlX2NtZC5waXRjaGVzWzBdICogbW9kZV9jbWQuaGVpZ2h0 Owo+ICsJb2JqID0gdmlydGlvX2dwdV9hbGxvY19vYmplY3QoZGV2LCBzaXplLCBmYWxzZSwgdHJ1 ZSk7Cj4gKwlpZiAoIW9iaikgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBmYWlsOwo+ ICsJfQo+ICsKPiArCXJldCA9IHZpcnRpb19ncHVfcmVzb3VyY2VfaWRfZ2V0KHZnZGV2LCAmcmVz aWQpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ICsJcmV0ID0gdmlydGlvX2dw dV9jbWRfY3JlYXRlX3Jlc291cmNlKHZnZGV2LCByZXNpZCwgZm9ybWF0LAo+ICsJCQkJCSAgbW9k ZV9jbWQud2lkdGgsIG1vZGVfY21kLmhlaWdodCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZmFp bDsKPiArCj4gKwlyZXQgPSB2aXJ0aW9fZ3B1X3ZtYXBfZmIodmdkZXYsIG9iaik7Cj4gKwlpZiAo cmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdm1hcCBmYiAlZFxuIiwgcmV0KTsKPiAr CQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwo+ICsJLyogYXR0YWNoIHRoZSBvYmplY3QgdG8gdGhlIHJl c291cmNlICovCj4gKwlyZXQgPSB2aXJ0aW9fZ3B1X29iamVjdF9hdHRhY2godmdkZXYsIG9iaiwg cmVzaWQsIE5VTEwpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ICsJaW5mbyA9 IGZyYW1lYnVmZmVyX2FsbG9jKDAsIGRldmljZSk7Cj4gKwlpZiAoIWluZm8pIHsKPiArCQlyZXQg PSAtRU5PTUVNOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiArCj4gKwlpbmZvLT5wYXIgPSBoZWxw ZXI7Cj4gKwo+ICsJcmV0ID0gdmlydGlvX2dwdV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgJnZmYmRl di0+dmdmYiwKPiArCQkJCSAgICAgICAmbW9kZV9jbWQsICZvYmotPmdlbV9iYXNlKTsKPiArCWlm IChyZXQpCj4gKwkJZ290byBmYWlsOwo+ICsKPiArCWZiID0gJnZmYmRldi0+dmdmYi5iYXNlOwo+ ICsKPiArCXZmYmRldi0+aGVscGVyLmZiID0gZmI7Cj4gKwl2ZmJkZXYtPmhlbHBlci5mYmRldiA9 IGluZm87Cj4gKwo+ICsJc3RyY3B5KGluZm8tPmZpeC5pZCwgInZpcnRpb2RybWZiIik7Cj4gKwlp bmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUOwo+ICsJaW5mby0+ZmJvcHMgPSAmdmlydGlvX2dw dWZiX29wczsKPiArCWluZm8tPnBpeG1hcC5mbGFncyA9IEZCX1BJWE1BUF9TWVNURU07Cj4gKwly ZXQgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApOwo+ICsJaWYgKHJldCkgewo+ ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBmYWlsOwo+ICsJfQo+ICsKPiArCWluZm8tPnNj cmVlbl9iYXNlID0gb2JqLT52bWFwOwo+ICsJaW5mby0+c2NyZWVuX3NpemUgPSBvYmotPmdlbV9i YXNlLnNpemU7Cj4gKwlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiLT5waXRjaGVzWzBd LCBmYi0+ZGVwdGgpOwo+ICsJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihpbmZvLCAmdmZiZGV2LT5o ZWxwZXIsCj4gKwkJCSAgICAgICBzaXplcy0+ZmJfd2lkdGgsIHNpemVzLT5mYl9oZWlnaHQpOwo+ ICsKPiArCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gMDsKPiArCWluZm8tPmZpeC5tbWlvX2xlbiA9 IDA7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK2ZhaWw6Cj4gKwoKU2VlbSB0b28gc2ltcGxlLiAgc2hv dWxkbid0IHRoaXMgY2xlYW51cCB3aGF0ZXZlciBpdCBhbGxvY2F0ZWQ/Cgo+ICsJcmV0dXJuIC1F SU5WQUw7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmlydGlvX2dwdV9mYmRldl9kZXN0cm95KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkgICAgc3RydWN0IHZpcnRpb19ncHVfZmJkZXYg KnZnZmJkZXYpCj4gK3sKPiArCXN0cnVjdCBmYl9pbmZvICppbmZvOwo+ICsJc3RydWN0IHZpcnRp b19ncHVfZnJhbWVidWZmZXIgKnZnZmIgPSAmdmdmYmRldi0+dmdmYjsKPiArCj4gKwlpZiAodmdm YmRldi0+aGVscGVyLmZiZGV2KSB7Cj4gKwkJaW5mbyA9IHZnZmJkZXYtPmhlbHBlci5mYmRldjsK PiArCj4gKwkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKPiArCQlmcmFtZWJ1ZmZlcl9y ZWxlYXNlKGluZm8pOwo+ICsJfQo+ICsJaWYgKHZnZmItPm9iaikKPiArCQl2Z2ZiLT5vYmogPSBO VUxMOwo+ICsJZHJtX2ZiX2hlbHBlcl9maW5pKCZ2Z2ZiZGV2LT5oZWxwZXIpOwo+ICsJZHJtX2Zy YW1lYnVmZmVyX2NsZWFudXAoJnZnZmItPmJhc2UpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g K3N0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyB2aXJ0aW9fZ3B1X2ZiX2hlbHBlcl9m dW5jcyA9IHsKPiArCS5mYl9wcm9iZSA9IHZpcnRpb19ncHVmYl9jcmVhdGUsCj4gK307Cj4gKwo+ ICtpbnQgdmlydGlvX2dwdV9mYmRldl9pbml0KHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdk ZXYpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZiZGV2ICp2Z2ZiZGV2Owo+ICsJaW50IGJw cF9zZWwgPSAzMjsgLyogVE9ETzogcGFyYW1ldGVyIGZyb20gc29tZXdoZXJlPyAqLwo+ICsJaW50 IHJldDsKPiArCj4gKwl2Z2ZiZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZpcnRpb19ncHVf ZmJkZXYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghdmdmYmRldikKPiArCQlyZXR1cm4gLUVOT01F TTsKPiArCj4gKwl2Z2ZiZGV2LT52Z2RldiA9IHZnZGV2Owo+ICsJdmdkZXYtPnZnZmJkZXYgPSB2 Z2ZiZGV2Owo+ICsJSU5JVF9ERUxBWUVEX1dPUksoJnZnZmJkZXYtPndvcmssIHZpcnRpb19ncHVf ZmJfZGlydHlfd29yayk7Cj4gKwo+ICsJZHJtX2ZiX2hlbHBlcl9wcmVwYXJlKHZnZGV2LT5kZGV2 LCAmdmdmYmRldi0+aGVscGVyLAo+ICsJCQkgICAgICAmdmlydGlvX2dwdV9mYl9oZWxwZXJfZnVu Y3MpOwo+ICsJcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0KHZnZGV2LT5kZGV2LCAmdmdmYmRldi0+ aGVscGVyLAo+ICsJCQkJIHZnZGV2LT5udW1fc2Nhbm91dHMsCj4gKwkJCQkgVklSVElPX0dQVUZC X0NPTk5fTElNSVQpOwo+ICsJaWYgKHJldCkgewo+ICsJCWtmcmVlKHZnZmJkZXYpOwo+ICsJCXJl dHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJZHJtX2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9jb25u ZWN0b3JzKCZ2Z2ZiZGV2LT5oZWxwZXIpOwo+ICsJZHJtX2ZiX2hlbHBlcl9pbml0aWFsX2NvbmZp ZygmdmdmYmRldi0+aGVscGVyLCBicHBfc2VsKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2 b2lkIHZpcnRpb19ncHVfZmJkZXZfZmluaShzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2 KQo+ICt7Cj4gKwlpZiAoIXZnZGV2LT52Z2ZiZGV2KQo+ICsJCXJldHVybjsKPiArCj4gKwl2aXJ0 aW9fZ3B1X2ZiZGV2X2Rlc3Ryb3kodmdkZXYtPmRkZXYsIHZnZGV2LT52Z2ZiZGV2KTsKPiArCWtm cmVlKHZnZGV2LT52Z2ZiZGV2KTsKPiArCXZnZGV2LT52Z2ZiZGV2ID0gTlVMTDsKPiArfQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZmVuY2UuYyBiL2RyaXZl cnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9mZW5jZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi41NTJhYTQ5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS92aXJ0aW8vdmlydGdwdV9mZW5jZS5jCj4gQEAgLTAsMCArMSw5NSBAQAo+ICsjaW5j bHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgInZpcnRncHVfZHJ2LmgiCj4gKwo+ICtzdGF0 aWMgY29uc3QgY2hhciAqdmlydGlvX2dldF9kcml2ZXJfbmFtZShzdHJ1Y3QgZmVuY2UgKmYpCj4g K3sKPiArCXJldHVybiAidmlydGlvX2dwdSI7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBjaGFy ICp2aXJ0aW9fZ2V0X3RpbWVsaW5lX25hbWUoc3RydWN0IGZlbmNlICpmKQo+ICt7Cj4gKwlyZXR1 cm4gImNvbnRyb2xxIjsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgdmlydGlvX2VuYWJsZV9zaWdu YWxpbmcoc3RydWN0IGZlbmNlICpmKQo+ICt7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiAr c3RhdGljIGJvb2wgdmlydGlvX3NpZ25hbGVkKHN0cnVjdCBmZW5jZSAqZikKPiArewo+ICsJc3Ry dWN0IHZpcnRpb19ncHVfZmVuY2UgKmZlbmNlID0gdG9fdmlydGlvX2ZlbmNlKGYpOwo+ICsKPiAr CWlmIChhdG9taWM2NF9yZWFkKCZmZW5jZS0+ZHJ2LT5sYXN0X3NlcSkgPj0gZmVuY2UtPnNlcSkg ewo+ICsJCXJldHVybiB0cnVlOwo+ICsJfQoKCmRyb3Age30KCj4gKwlyZXR1cm4gZmFsc2U7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRpb19mZW5jZV92YWx1ZV9zdHIoc3RydWN0IGZlbmNl ICpmLCBjaGFyICpzdHIsIGludCBzaXplKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9mZW5j ZSAqZmVuY2UgPSB0b192aXJ0aW9fZmVuY2UoZik7Cj4gKwo+ICsJc25wcmludGYoc3RyLCBzaXpl LCAiJWxsdSIsIGZlbmNlLT5zZXEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fdGlt ZWxpbmVfdmFsdWVfc3RyKHN0cnVjdCBmZW5jZSAqZiwgY2hhciAqc3RyLCBpbnQgc2l6ZSkKPiAr ewo+ICsJc3RydWN0IHZpcnRpb19ncHVfZmVuY2UgKmZlbmNlID0gdG9fdmlydGlvX2ZlbmNlKGYp Owo+ICsKPiArCXNucHJpbnRmKHN0ciwgc2l6ZSwgIiVsdSIsIGF0b21pYzY0X3JlYWQoJmZlbmNl LT5kcnYtPmxhc3Rfc2VxKSk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmVuY2Vf b3BzIHZpcnRpb19mZW5jZV9vcHMgPSB7Cj4gKwkuZ2V0X2RyaXZlcl9uYW1lICAgICA9IHZpcnRp b19nZXRfZHJpdmVyX25hbWUsCj4gKwkuZ2V0X3RpbWVsaW5lX25hbWUgICA9IHZpcnRpb19nZXRf dGltZWxpbmVfbmFtZSwKPiArCS5lbmFibGVfc2lnbmFsaW5nICAgID0gdmlydGlvX2VuYWJsZV9z aWduYWxpbmcsCj4gKwkuc2lnbmFsZWQgICAgICAgICAgICA9IHZpcnRpb19zaWduYWxlZCwKPiAr CS53YWl0ICAgICAgICAgICAgICAgID0gZmVuY2VfZGVmYXVsdF93YWl0LAo+ICsJLmZlbmNlX3Zh bHVlX3N0ciAgICAgPSB2aXJ0aW9fZmVuY2VfdmFsdWVfc3RyLAo+ICsJLnRpbWVsaW5lX3ZhbHVl X3N0ciAgPSB2aXJ0aW9fdGltZWxpbmVfdmFsdWVfc3RyLAo+ICt9Owo+ICsKPiAraW50IHZpcnRp b19ncHVfZmVuY2VfZW1pdChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAo+ICsJCQkg IHN0cnVjdCB2aXJ0aW9fZ3B1X2N0cmxfaGRyICpjbWRfaGRyLAo+ICsJCQkgIHN0cnVjdCB2aXJ0 aW9fZ3B1X2ZlbmNlICoqZmVuY2UpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlX2Ry aXZlciAqZHJ2ID0gJnZnZGV2LT5mZW5jZV9kcnY7Cj4gKwl1bnNpZ25lZCBsb25nIGlycV9mbGFn czsKPiArCj4gKwkqZmVuY2UgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlydGlvX2dwdV9mZW5j ZSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCgqZmVuY2UpID09IE5VTEwpCj4gKwkJcmV0dXJuIC1F Tk9NRU07Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgaXJxX2ZsYWdzKTsK PiArCSgqZmVuY2UpLT5kcnYgPSBkcnY7Cj4gKwkoKmZlbmNlKS0+c2VxID0gKytkcnYtPnN5bmNf c2VxOwo+ICsJZmVuY2VfaW5pdCgmKCpmZW5jZSktPmYsICZ2aXJ0aW9fZmVuY2Vfb3BzLCAmZHJ2 LT5sb2NrLAo+ICsJCSAgIDAsICgqZmVuY2UpLT5zZXEpOwo+ICsJZmVuY2VfZ2V0KCYoKmZlbmNl KS0+Zik7Cj4gKwlsaXN0X2FkZF90YWlsKCYoKmZlbmNlKS0+bm9kZSwgJmRydi0+ZmVuY2VzKTsK PiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgaXJxX2ZsYWdzKTsKPiArCj4g KwljbWRfaGRyLT5mbGFncyB8PSBjcHVfdG9fbGUzMihWSVJUSU9fR1BVX0ZMQUdfRkVOQ0UpOwo+ ICsJY21kX2hkci0+ZmVuY2VfaWQgPSBjcHVfdG9fbGU2NCgoKmZlbmNlKS0+c2VxKTsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIHZpcnRpb19ncHVfZmVuY2VfZXZlbnRfcHJvY2Vzcyhz dHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAo+ICsJCQkJICAgIHU2NCBsYXN0X3NlcSkK PiArewo+ICsJc3RydWN0IHZpcnRpb19ncHVfZmVuY2VfZHJpdmVyICpkcnYgPSAmdmdkZXYtPmZl bmNlX2RydjsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlICpmZW5jZSwgKnRtcDsKPiArCXVu c2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZkcnYtPmxv Y2ssIGlycV9mbGFncyk7Cj4gKwlhdG9taWM2NF9zZXQoJnZnZGV2LT5mZW5jZV9kcnYubGFzdF9z ZXEsIGxhc3Rfc2VxKTsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmZW5jZSwgdG1wLCAm ZHJ2LT5mZW5jZXMsIG5vZGUpIHsKPiArCQlpZiAobGFzdF9zZXEgPCBmZW5jZS0+c2VxKQo+ICsJ CQljb250aW51ZTsKPiArCQlmZW5jZV9zaWduYWxfbG9ja2VkKCZmZW5jZS0+Zik7Cj4gKwkJbGlz dF9kZWwoJmZlbmNlLT5ub2RlKTsKPiArCQlmZW5jZV9wdXQoJmZlbmNlLT5mKTsKPiArCX0KPiAr CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgaXJxX2ZsYWdzKTsKPiArfQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZ2VtLmMgYi9kcml2ZXJz L2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZ2VtLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAuLjhiYzBhMjQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3ZpcnRpby92aXJ0Z3B1X2dlbS5jCj4gQEAgLTAsMCArMSwxMjAgQEAKPiArCj4gKyNpbmNs dWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSAidmlydGdwdV9kcnYuaCIKPiArCj4gK3ZvaWQg dmlydGlvX2dwdV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2Jq KQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKm9iaiA9IGdlbV90b192aXJ0aW9f Z3B1X29iaihnZW1fb2JqKTsKPiArCj4gKwlpZiAob2JqKQo+ICsJCXZpcnRpb19ncHVfb2JqZWN0 X3VucmVmKCZvYmopOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKnZpcnRp b19ncHVfYWxsb2Nfb2JqZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkJCSAgc2l6 ZV90IHNpemUsIGJvb2wga2VybmVsLAo+ICsJCQkJCQkgIGJvb2wgcGlubmVkKQo+ICt7Cj4gKwlz dHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0 cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAqb2JqOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSB2 aXJ0aW9fZ3B1X29iamVjdF9jcmVhdGUodmdkZXYsIHNpemUsIGtlcm5lbCwgcGlubmVkLCAmb2Jq KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCj4gKwlyZXR1cm4g b2JqOwo+ICt9Cj4gKwo+ICtpbnQgdmlydGlvX2dwdV9nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZmls ZSAqZmlsZSwKPiArCQkJICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkgIHVpbnQ2NF90 IHNpemUsCj4gKwkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqb2JqX3AsCj4gKwkJCSAgdWlu dDMyX3QgKmhhbmRsZV9wKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKm9iajsK PiArCWludCByZXQ7Cj4gKwl1MzIgaGFuZGxlOwo+ICsKPiArCW9iaiA9IHZpcnRpb19ncHVfYWxs b2Nfb2JqZWN0KGRldiwgc2l6ZSwgZmFsc2UsIGZhbHNlKTsKPiArCWlmIChJU19FUlIob2JqKSkK PiArCQlyZXR1cm4gUFRSX0VSUihvYmopOwo+ICsKPiArCXJldCA9IGRybV9nZW1faGFuZGxlX2Ny ZWF0ZShmaWxlLCAmb2JqLT5nZW1fYmFzZSwgJmhhbmRsZSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJ ZHJtX2dlbV9vYmplY3RfcmVsZWFzZSgmb2JqLT5nZW1fYmFzZSk7Cj4gKwkJcmV0dXJuIHJldDsK PiArCX0KPiArCj4gKwkqb2JqX3AgPSAmb2JqLT5nZW1fYmFzZTsKPiArCj4gKwkvKiBkcm9wIHJl ZmVyZW5jZSBmcm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhvbGRzIGl0IG5vdyAqLwo+ICsJZHJtX2dl bV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm9iai0+Z2VtX2Jhc2UpOwo+ICsKPiArCSpo YW5kbGVfcCA9IGhhbmRsZTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgdmlydGlvX2dw dV9tb2RlX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ICsJCQkJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCXN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAq YXJncykKPiArewo+ICsJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiA9IGRldi0+ZGV2 X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmo7Cj4gKwlzdHJ1Y3Qgdmly dGlvX2dwdV9vYmplY3QgKm9iajsKPiArCWludCByZXQ7Cj4gKwl1aW50MzJfdCBwaXRjaDsKPiAr CXVpbnQzMl90IHJlc2lkOwo+ICsKPiArCXBpdGNoID0gYXJncy0+d2lkdGggKiAoKGFyZ3MtPmJw cCArIDEpIC8gOCk7Cj4gKwlhcmdzLT5zaXplID0gcGl0Y2ggKiBhcmdzLT5oZWlnaHQ7Cj4gKwlh cmdzLT5zaXplID0gQUxJR04oYXJncy0+c2l6ZSwgUEFHRV9TSVpFKTsKPiArCj4gKwlyZXQgPSB2 aXJ0aW9fZ3B1X2dlbV9jcmVhdGUoZmlsZV9wcml2LCBkZXYsIGFyZ3MtPnNpemUsICZnb2JqLAo+ ICsJCQkJICZhcmdzLT5oYW5kbGUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ ICsJcmV0ID0gdmlydGlvX2dwdV9yZXNvdXJjZV9pZF9nZXQodmdkZXYsICZyZXNpZCk7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gZmFpbDsKPiArCj4gKwlyZXQgPSB2aXJ0aW9fZ3B1X2NtZF9jcmVh dGVfcmVzb3VyY2UodmdkZXYsIHJlc2lkLAo+ICsJCQkJCSAgMiwgYXJncy0+d2lkdGgsIGFyZ3Mt PmhlaWdodCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZmFpbDsKPiArCj4gKwkvKiBhdHRhY2gg dGhlIG9iamVjdCB0byB0aGUgcmVzb3VyY2UgKi8KPiArCW9iaiA9IGdlbV90b192aXJ0aW9fZ3B1 X29iaihnb2JqKTsKPiArCXJldCA9IHZpcnRpb19ncHVfb2JqZWN0X2F0dGFjaCh2Z2Rldiwgb2Jq LCByZXNpZCwgTlVMTCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZmFpbDsKPiArCj4gKwlvYmot PmR1bWIgPSB0cnVlOwo+ICsJYXJncy0+cGl0Y2ggPSBwaXRjaDsKPiArCXJldHVybiByZXQ7Cj4g K2ZhaWw6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgdmlydGlvX2dwdV9tb2RlX2R1 bWJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKPiArCQkJCSBzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ICsJCQkJIHVpbnQzMl90IGhhbmRsZSkKPiArewo+ICsJcmV0dXJuIGRy bV9nZW1faGFuZGxlX2RlbGV0ZShmaWxlX3ByaXYsIGhhbmRsZSk7Cj4gK30KPiArCj4gK2ludCB2 aXJ0aW9fZ3B1X21vZGVfZHVtYl9tbWFwKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ICsJ CQkgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkgICAgICB1aW50MzJfdCBoYW5k bGUsIHVpbnQ2NF90ICpvZmZzZXRfcCkKPiArewo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpn b2JqOwo+ICsJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpvYmo7Cj4gKwlCVUdfT04oIW9mZnNl dF9wKTsKPiArCWdvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhh bmRsZSk7Cj4gKwlpZiAoZ29iaiA9PSBOVUxMKQo+ICsJCXJldHVybiAtRU5PRU5UOwo+ICsJb2Jq ID0gZ2VtX3RvX3ZpcnRpb19ncHVfb2JqKGdvYmopOwo+ICsJKm9mZnNldF9wID0gdmlydGlvX2dw dV9vYmplY3RfbW1hcF9vZmZzZXQob2JqKTsKPiArCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNl X3VubG9ja2VkKGdvYmopOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92 aXJ0Z3B1X2ttcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi40NWM0 YmViCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdw dV9rbXMuYwo+IEBAIC0wLDAgKzEsMTI1IEBACj4gKyNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4K PiArI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1Q Lmg+Cj4gKyNpbmNsdWRlICJ2aXJ0Z3B1X2Rydi5oIgo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlv X2dwdV9jb25maWdfY2hhbmdlZF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2ID0KPiArCQljb250YWluZXJf b2Yod29yaywgc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlLAo+ICsJCQkgICAgIGNvbmZpZ19jaGFu Z2VkX3dvcmspOwo+ICsJdTMyIGV2ZW50c19yZWFkLCBldmVudHNfY2xlYXIgPSAwOwo+ICsKPiAr CS8qIHJlYWQgdGhlIGNvbmZpZyBzcGFjZSAqLwo+ICsJdmlydGlvX2NyZWFkKHZnZGV2LT52ZGV2 LCBzdHJ1Y3QgdmlydGlvX2dwdV9jb25maWcsCj4gKwkJICAgICBldmVudHNfcmVhZCwgJmV2ZW50 c19yZWFkKTsKPiArCWlmIChldmVudHNfcmVhZCAmIFZJUlRJT19HUFVfRVZFTlRfRElTUExBWSkg ewo+ICsJCXZpcnRpb19ncHVfY21kX2dldF9kaXNwbGF5X2luZm8odmdkZXYpOwo+ICsJCWRybV9o ZWxwZXJfaHBkX2lycV9ldmVudCh2Z2Rldi0+ZGRldik7Cj4gKwkJZXZlbnRzX2NsZWFyIHw9IFZJ UlRJT19HUFVfRVZFTlRfRElTUExBWTsKPiArCX0KPiArCXZpcnRpb19jd3JpdGUodmdkZXYtPnZk ZXYsIHN0cnVjdCB2aXJ0aW9fZ3B1X2NvbmZpZywKPiArCQkgICAgICBldmVudHNfY2xlYXIsICZl dmVudHNfY2xlYXIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X2luaXRfdnEo c3RydWN0IHZpcnRpb19ncHVfcXVldWUgKnZndnEsCj4gKwkJCSAgICAgICB2b2lkICgqd29ya19m dW5jKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspKQo+ICt7Cj4gKwlzcGluX2xvY2tfaW5pdCgm dmd2cS0+cWxvY2spOwo+ICsJaW5pdF93YWl0cXVldWVfaGVhZCgmdmd2cS0+YWNrX3F1ZXVlKTsK PiArCUlOSVRfV09SSygmdmd2cS0+ZGVxdWV1ZV93b3JrLCB3b3JrX2Z1bmMpOwoKR2VuZXJhbGx5 LCB5b3UgbXVzdCBmbHVzaCB3cXMgb24gY2xlYW51cCBwYXRoLApzaW5jZSBxb3JrIG1pZ2h0IGJl IHBlbmRpbmcuCk1heWJlIGl0J3Mgbm90IG5lZWRlZCBoZXJlLCBpZiBzbyBuZWVkcyBhIGNvbW1l bnQuCgoKPiArfQo+ICsKPiAraW50IHZpcnRpb19ncHVfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKPiArewo+ICsJc3RhdGljIHZxX2NhbGxi YWNrX3QgKmNhbGxiYWNrc1tdID0gewo+ICsJCXZpcnRpb19ncHVfY3RybF9hY2ssIHZpcnRpb19n cHVfY3Vyc29yX2Fjawo+ICsJfTsKPiArCXN0YXRpYyBjb25zdCBjaGFyICpuYW1lc1tdID0geyAi Y29udHJvbCIsICJjdXJzb3IiIH07Cj4gKwo+ICsJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2 Z2RldjsKPiArCS8qIHRoaXMgd2lsbCBleHBhbmQgbGF0ZXIgKi8KPiArCXN0cnVjdCB2aXJ0cXVl dWUgKnZxc1syXTsKPiArCXUzMiBudW1fc2Nhbm91dHM7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlm ICghdmlydGlvX2hhc19mZWF0dXJlKGRldi0+dmlydGRldiwgVklSVElPX0ZfVkVSU0lPTl8xKSkK PiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwl2Z2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVj dCB2aXJ0aW9fZ3B1X2RldmljZSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCF2Z2RldikKPiArCQly ZXR1cm4gLUVOT01FTTsKPiArCj4gKwl2Z2Rldi0+ZGRldiA9IGRldjsKPiArCWRldi0+ZGV2X3By aXZhdGUgPSB2Z2RldjsKPiArCXZnZGV2LT52ZGV2ID0gZGV2LT52aXJ0ZGV2Owo+ICsJdmdkZXYt PmRldiA9IGRldi0+ZGV2Owo+ICsKPiArCXNwaW5fbG9ja19pbml0KCZ2Z2Rldi0+ZGlzcGxheV9p bmZvX2xvY2spOwo+ICsJc3Bpbl9sb2NrX2luaXQoJnZnZGV2LT5jdHhfaWRfaWRyX2xvY2spOwo+ ICsJaWRyX2luaXQoJnZnZGV2LT5jdHhfaWRfaWRyKTsKPiArCXNwaW5fbG9ja19pbml0KCZ2Z2Rl di0+cmVzb3VyY2VfaWRyX2xvY2spOwo+ICsJaWRyX2luaXQoJnZnZGV2LT5yZXNvdXJjZV9pZHIp Owo+ICsJaW5pdF93YWl0cXVldWVfaGVhZCgmdmdkZXYtPnJlc3Bfd3EpOwo+ICsJdmlydGlvX2dw dV9pbml0X3ZxKCZ2Z2Rldi0+Y3RybHEsIHZpcnRpb19ncHVfZGVxdWV1ZV9jdHJsX2Z1bmMpOwo+ ICsJdmlydGlvX2dwdV9pbml0X3ZxKCZ2Z2Rldi0+Y3Vyc29ycSwgdmlydGlvX2dwdV9kZXF1ZXVl X2N1cnNvcl9mdW5jKTsKPiArCj4gKwlzcGluX2xvY2tfaW5pdCgmdmdkZXYtPmZlbmNlX2Rydi5s b2NrKTsKPiArCUlOSVRfTElTVF9IRUFEKCZ2Z2Rldi0+ZmVuY2VfZHJ2LmZlbmNlcyk7Cj4gKwlJ TklUX1dPUksoJnZnZGV2LT5jb25maWdfY2hhbmdlZF93b3JrLAo+ICsJCSAgdmlydGlvX2dwdV9j b25maWdfY2hhbmdlZF93b3JrX2Z1bmMpOwo+ICsKPiArCXJldCA9IHZnZGV2LT52ZGV2LT5jb25m aWctPmZpbmRfdnFzKHZnZGV2LT52ZGV2LCAyLCB2cXMsCj4gKwkJCQkJICAgIGNhbGxiYWNrcywg bmFtZXMpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGZpbmQgdmly dCBxdWV1ZXNcbiIpOwo+ICsJCWdvdG8gZXJyX3ZxczsKPiArCX0KPiArCXZnZGV2LT5jdHJscS52 cSA9IHZxc1swXTsKPiArCXZnZGV2LT5jdXJzb3JxLnZxID0gdnFzWzFdOwo+ICsKPiArCXJldCA9 IHZpcnRpb19ncHVfdHRtX2luaXQodmdkZXYpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJP UigiZmFpbGVkIHRvIGluaXQgdHRtICVkXG4iLCByZXQpOwo+ICsJCWdvdG8gZXJyX3R0bTsKPiAr CX0KPiArCj4gKwkvKiBnZXQgZGlzcGxheSBpbmZvICovCj4gKwl2aXJ0aW9fY3JlYWQodmdkZXYt PnZkZXYsIHN0cnVjdCB2aXJ0aW9fZ3B1X2NvbmZpZywKPiArCQkgICAgIG51bV9zY2Fub3V0cywg Jm51bV9zY2Fub3V0cyk7Cj4gKwl2Z2Rldi0+bnVtX3NjYW5vdXRzID0gbWluX3QodWludDMyX3Qs IG51bV9zY2Fub3V0cywKPiArCQkJCSAgICBWSVJUSU9fR1BVX01BWF9TQ0FOT1VUUyk7Cj4gKwlp ZiAoIXZnZGV2LT5udW1fc2Nhbm91dHMpIHsKPiArCQlEUk1fRVJST1IoIm51bV9zY2Fub3V0cyBp cyB6ZXJvXG4iKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXJyX3NjYW5vdXRzOwo+ ICsJfQo+ICsKPiArCXJldCA9IHZpcnRpb19ncHVfbW9kZXNldF9pbml0KHZnZGV2KTsKPiArCWlm IChyZXQpCj4gKwkJZ290byBlcnJfbW9kZXNldDsKPiArCj4gKwl2aXJ0aW9fZGV2aWNlX3JlYWR5 KHZnZGV2LT52ZGV2KTsKPiArCXZpcnRpb19ncHVfY21kX2dldF9kaXNwbGF5X2luZm8odmdkZXYp Owo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfbW9kZXNldDoKPiArZXJyX3NjYW5vdXRzOgo+ICsJ dmlydGlvX2dwdV90dG1fZmluaSh2Z2Rldik7Cj4gK2Vycl90dG06Cj4gKwl2Z2Rldi0+dmRldi0+ Y29uZmlnLT5kZWxfdnFzKHZnZGV2LT52ZGV2KTsKPiArZXJyX3ZxczoKPiArCWtmcmVlKHZnZGV2 KTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK2ludCB2aXJ0aW9fZ3B1X2RyaXZlcl91bmxv YWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IHZpcnRpb19ncHVfZGV2 aWNlICp2Z2RldiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwoKSXMgYmVsb3cgc2FmZSB0byBkbyB3 aGlsZSBkZXZpY2UgbWlnaHQgYmUgc2VuZGluZwp1cyBpbnRlcnJ1cHRzIChiZWZvcmUgZGVsX3Zx cyk/ICBJIGRpZG4ndCBjaGVjaywgYnV0IGxvb2tzCnN1c3BpY2lvdXMuCgpPVE9IIHlvdSBtdXN0 IGFsc28gYmUgY2FyZWZ1bCBub3QgdG8gZG8gZGVsX3ZxcwppZiB5b3VyIGNvZGUgbWlnaHQga2lj ay4KCj4gKwl2aXJ0aW9fZ3B1X21vZGVzZXRfZmluaSh2Z2Rldik7Cj4gKwl2aXJ0aW9fZ3B1X3R0 bV9maW5pKHZnZGV2KTsKPiArCXZnZGV2LT52ZGV2LT5jb25maWctPmRlbF92cXModmdkZXYtPnZk ZXYpOwo+ICsJa2ZyZWUodmdkZXYpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJt L3ZpcnRpby92aXJ0Z3B1X29iamVjdC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwLi4wZDk4YWU0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92 aXJ0aW8vdmlydGdwdV9vYmplY3QuYwo+IEBAIC0wLDAgKzEsMTc0IEBACj4gKyNpbmNsdWRlICJ2 aXJ0Z3B1X2Rydi5oIgo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX2dwdV90dG1fYm9fZGVzdHJv eShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKnRibykKPiArewo+ICsJc3RydWN0IHZpcnRpb19n cHVfb2JqZWN0ICpibzsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXY7Cj4gKwo+ ICsJYm8gPSBjb250YWluZXJfb2YodGJvLCBzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QsIHRibyk7 Cj4gKwl2Z2RldiA9IChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKiliby0+Z2VtX2Jhc2UuZGV2 LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlpZiAoYm8tPmh3X3Jlc19oYW5kbGUpCj4gKwkJdmlydGlv X2dwdV9jbWRfdW5yZWZfcmVzb3VyY2UodmdkZXYsIGJvLT5od19yZXNfaGFuZGxlKTsKPiArCWlm IChiby0+cGFnZXMpCj4gKwkJdmlydGlvX2dwdV9vYmplY3RfZnJlZV9zZ190YWJsZShibyk7Cj4g Kwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKCZiby0+Z2VtX2Jhc2UpOwo+ICsJa2ZyZWUoYm8pOwo+ ICt9Cj4gKwo+ICtib29sIHZpcnRpb19ncHVfdHRtX2JvX2lzX3ZpcnRpb19ncHVfb2JqZWN0KHN0 cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCj4gK3sKPiArCWlmIChiby0+ZGVzdHJveSA9PSAm dmlydGlvX2dwdV90dG1fYm9fZGVzdHJveSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCXJldHVybiBm YWxzZTsKPiArfQoKdGhpcyBmdW5jdGlvbiBzZWVtcyB1bnVzZWQuCgo+ICsKPiArc3RhdGljIHZv aWQgdmlydGlvX2dwdV9pbml0X3R0bV9wbGFjZW1lbnQoc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0 ICp2Z2JvLAo+ICsJCQkJCSAgYm9vbCBwaW5uZWQpCj4gK3sKPiArCXUzMiBjID0gMTsKPiArCXUz MiBwZmxhZyA9IHBpbm5lZCA/IFRUTV9QTF9GTEFHX05PX0VWSUNUIDogMDsKPiArCj4gKwl2Z2Jv LT5wbGFjZW1lbnQucGxhY2VtZW50ID0gJnZnYm8tPnBsYWNlbWVudF9jb2RlOwo+ICsJdmdiby0+ cGxhY2VtZW50LmJ1c3lfcGxhY2VtZW50ID0gJnZnYm8tPnBsYWNlbWVudF9jb2RlOwo+ICsJdmdi by0+cGxhY2VtZW50X2NvZGUuZnBmbiA9IDA7Cj4gKwl2Z2JvLT5wbGFjZW1lbnRfY29kZS5scGZu ID0gMDsKPiArCXZnYm8tPnBsYWNlbWVudF9jb2RlLmZsYWdzID0KPiArCQlUVE1fUExfTUFTS19D QUNISU5HIHwgVFRNX1BMX0ZMQUdfVFQgfCBwZmxhZzsKPiArCXZnYm8tPnBsYWNlbWVudC5udW1f cGxhY2VtZW50ID0gYzsKPiArCXZnYm8tPnBsYWNlbWVudC5udW1fYnVzeV9wbGFjZW1lbnQgPSBj Owo+ICsKPiArfQo+ICsKPiAraW50IHZpcnRpb19ncHVfb2JqZWN0X2NyZWF0ZShzdHJ1Y3Qgdmly dGlvX2dwdV9kZXZpY2UgKnZnZGV2LAo+ICsJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgYm9v bCBrZXJuZWwsIGJvb2wgcGlubmVkLAo+ICsJCQkgICAgIHN0cnVjdCB2aXJ0aW9fZ3B1X29iamVj dCAqKmJvX3B0cikKPiArewo+ICsJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpibzsKPiArCWVu dW0gdHRtX2JvX3R5cGUgdHlwZTsKPiArCXNpemVfdCBhY2Nfc2l6ZTsKPiArCWludCByOwo+ICsK PiArCWlmIChrZXJuZWwpCj4gKwkJdHlwZSA9IHR0bV9ib190eXBlX2tlcm5lbDsKPiArCWVsc2UK PiArCQl0eXBlID0gdHRtX2JvX3R5cGVfZGV2aWNlOwo+ICsJKmJvX3B0ciA9IE5VTEw7Cj4gKwo+ ICsJYWNjX3NpemUgPSB0dG1fYm9fZG1hX2FjY19zaXplKCZ2Z2Rldi0+bW1hbi5iZGV2LCBzaXpl LAo+ICsJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QpKTsKPiArCj4g KwlibyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCksIEdGUF9LRVJO RUwpOwo+ICsJaWYgKGJvID09IE5VTEwpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwlzaXplID0g cm91bmR1cChzaXplLCBQQUdFX1NJWkUpOwo+ICsJciA9IGRybV9nZW1fb2JqZWN0X2luaXQodmdk ZXYtPmRkZXYsICZiby0+Z2VtX2Jhc2UsIHNpemUpOwo+ICsJaWYgKHVubGlrZWx5KHIpKSB7Cj4g KwkJa2ZyZWUoYm8pOwo+ICsJCXJldHVybiByOwo+ICsJfQo+ICsJYm8tPmR1bWIgPSBmYWxzZTsK PiArCj4gKwl2aXJ0aW9fZ3B1X2luaXRfdHRtX3BsYWNlbWVudChibywgcGlubmVkKTsKPiArCXIg PSB0dG1fYm9faW5pdCgmdmdkZXYtPm1tYW4uYmRldiwgJmJvLT50Ym8sIHNpemUsIHR5cGUsCj4g KwkJCSZiby0+cGxhY2VtZW50LCAwLCAha2VybmVsLCBOVUxMLCBhY2Nfc2l6ZSwKPiArCQkJTlVM TCwgTlVMTCwgJnZpcnRpb19ncHVfdHRtX2JvX2Rlc3Ryb3kpOwo+ICsJaWYgKHVubGlrZWx5KHIg IT0gMCkpIHsKPiArCQlpZiAociAhPSAtRVJFU1RBUlRTWVMpCgpUaGF0J3MgdW51c3VhbCBpbiBr ZXJuZWwuCldoYXQncyB0aGlzIHRlc3QgaW4gYWlkIG9mPyBOZWVkcyBhIGNvbW1lbnQuCgo+ICsJ CQlkZXZfZXJyKHZnZGV2LT5kZXYsCj4gKwkJCQkib2JqZWN0X2luaXQgJWQgZmFpbGVkIGZvciAo JWx1KVxuIiwgciwKPiArCQkJCXNpemUpOwo+ICsJCXJldHVybiByOwo+ICsJfQo+ICsJKmJvX3B0 ciA9IGJvOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCB2aXJ0aW9fZ3B1X29iamVjdF9r bWFwKHN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAqYm8sIHZvaWQgKipwdHIpCj4gK3sKPiArCWJv b2wgaXNfaW9tZW07Cj4gKwlpbnQgcjsKPiArCj4gKwlpZiAoYm8tPnZtYXApIHsKPiArCQlpZiAo cHRyKQo+ICsJCQkqcHRyID0gYm8tPnZtYXA7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwlyID0g dHRtX2JvX2ttYXAoJmJvLT50Ym8sIDAsIGJvLT50Ym8ubnVtX3BhZ2VzLCAmYm8tPmttYXApOwo+ ICsJaWYgKHIpCj4gKwkJcmV0dXJuIHI7Cj4gKwliby0+dm1hcCA9IHR0bV9rbWFwX29ial92aXJ0 dWFsKCZiby0+a21hcCwgJmlzX2lvbWVtKTsKPiArCWlmIChwdHIpCj4gKwkJKnB0ciA9IGJvLT52 bWFwOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKyNpZiAwCgppcyB0aGlzIGNvZGUgdXNlZnVs PwoKPiArdm9pZCB2aXJ0aW9fZ3B1X29iamVjdF9mb3JjZV9kZWxldGUoc3RydWN0IHZpcnRpb19n cHVfZGV2aWNlICp2Z2RldikKPiArewo+ICsJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpibywg Km47Cj4gKwo+ICsKCnR3byBlbW90eSBsaW5lcwoKPiArCWRldl9lcnIodmdkZXYtPmRldiwgIlVz ZXJzcGFjZSBzdGlsbCBoYXMgYWN0aXZlIG9iamVjdHMgIVxuIik7Cj4gKwlsaXN0X2Zvcl9lYWNo X2VudHJ5X3NhZmUoYm8sIG4sICZ2Z2Rldi0+Z2VtLm9iamVjdHMsIGxpc3QpIHsKPiArCQltdXRl eF9sb2NrKCZ2Z2Rldi0+ZGRldi0+c3RydWN0X211dGV4KTsKPiArCQlkZXZfZXJyKHZnZGV2LT5k ZXYsICIlcCAlcCAlbHUgJWx1IGZvcmNlIGZyZWVcbiIsCj4gKwkJCSZiby0+Z2VtX2Jhc2UsIGJv LCAodW5zaWduZWQgbG9uZyliby0+Z2VtX2Jhc2Uuc2l6ZSwKPiArCQkJKigodW5zaWduZWQgbG9u ZyAqKSZiby0+Z2VtX2Jhc2UucmVmY291bnQpKTsKPiArCQlzcGluX2xvY2soJnZnZGV2LT5nZW0u bG9jayk7Cj4gKwkJbGlzdF9kZWxfaW5pdCgmYm8tPmxpc3QpOwo+ICsJCXNwaW5fdW5sb2NrKCZ2 Z2Rldi0+Z2VtLmxvY2spOwo+ICsJCS8qIHRoaXMgc2hvdWxkIHVucmVmIHRoZSB0dG0gYm8gKi8K PiArCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmYm8tPmdlbV9iYXNlKTsKPiArCQltdXRl eF91bmxvY2soJnZnZGV2LT5kZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsJfQo+ICt9Cj4gKyNlbmRp Zgo+ICsKPiAraW50IHZpcnRpb19ncHVfb2JqZWN0X2dldF9zZ190YWJsZShzdHJ1Y3QgdmlydGlv X2dwdV9kZXZpY2UgKnFkZXYsCj4gKwkJCQkgICBzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJv KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsJc3RydWN0IHBhZ2UgKipwYWdlcyA9IGJvLT50Ym8udHRt LT5wYWdlczsKPiArCWludCBucl9wYWdlcyA9IGJvLT50Ym8ubnVtX3BhZ2VzOwo+ICsKPiArCS8q IHd0ZiBzd2FwcGluZyAqLwo+ICsJaWYgKGJvLT5wYWdlcykKPiArCQlyZXR1cm4gMDsKPiArCj4g KwlpZiAoYm8tPnRiby50dG0tPnN0YXRlID09IHR0X3VucG9wdWxhdGVkKQo+ICsJCWJvLT50Ym8u dHRtLT5iZGV2LT5kcml2ZXItPnR0bV90dF9wb3B1bGF0ZShiby0+dGJvLnR0bSk7Cj4gKwliby0+ cGFnZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2dfdGFibGUpLCBHRlBfS0VSTkVMKTsKPiAr CWlmICghYm8tPnBhZ2VzKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCXJldCA9IHNnX2FsbG9jX3Rh YmxlX2Zyb21fcGFnZXMoYm8tPnBhZ2VzLCBwYWdlcywgbnJfcGFnZXMsIDAsCj4gKwkJCQkJbnJf cGFnZXMgPDwgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8g b3V0Owo+ICsJcmV0dXJuIDA7Cj4gK291dDoKPiArCWtmcmVlKGJvLT5wYWdlcyk7Cj4gKwliby0+ cGFnZXMgPSBOVUxMOwo+ICsJcmV0dXJuIC1FTk9NRU07Cj4gK30KPiArCj4gK3ZvaWQgdmlydGlv X2dwdV9vYmplY3RfZnJlZV9zZ190YWJsZShzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJvKQo+ ICt7Cj4gKwlzZ19mcmVlX3RhYmxlKGJvLT5wYWdlcyk7Cj4gKwlrZnJlZShiby0+cGFnZXMpOwo+ ICsJYm8tPnBhZ2VzID0gTlVMTDsKPiArfQo+ICsKPiAraW50IHZpcnRpb19ncHVfb2JqZWN0X3dh aXQoc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpibywgYm9vbCBub193YWl0KQo+ICt7Cj4gKwlp bnQgcjsKPiArCj4gKwlyID0gdHRtX2JvX3Jlc2VydmUoJmJvLT50Ym8sIHRydWUsIG5vX3dhaXQs IGZhbHNlLCBOVUxMKTsKPiArCWlmICh1bmxpa2VseShyICE9IDApKQo+ICsJCXJldHVybiByOwo+ ICsJciA9IHR0bV9ib193YWl0KCZiby0+dGJvLCB0cnVlLCB0cnVlLCBub193YWl0KTsKPiArCXR0 bV9ib191bnJlc2VydmUoJmJvLT50Ym8pOwo+ICsJcmV0dXJuIHI7Cj4gK30KPiArCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV90dG0uYyBiL2RyaXZlcnMvZ3B1 L2RybS92aXJ0aW8vdmlydGdwdV90dG0uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMC4uYTZmMjJlMAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v dmlydGlvL3ZpcnRncHVfdHRtLmMKPiBAQCAtMCwwICsxLDQ1MSBAQAo+ICsvKgo+ICsgKiBDb3B5 cmlnaHQgMjAxMyBSZWQgSGF0IEluYy4KCkl0J3MgMjAxNSBpc24ndCBpdD8KCj4gKyAqCj4gKyAq IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgo+ICsgKiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ ICsgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IKPiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCj4gKyAqIEFSSVNJTkcgRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP Ugo+ICsgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhv cnM6IERhdmUgQWlybGllCj4gKyAqICAgICAgICAgIEFsb24gTGV2eQo+ICsgKi8KPiArCj4gKyNp bmNsdWRlIDx0dG0vdHRtX2JvX2FwaS5oPgo+ICsjaW5jbHVkZSA8dHRtL3R0bV9ib19kcml2ZXIu aD4KPiArI2luY2x1ZGUgPHR0bS90dG1fcGxhY2VtZW50Lmg+Cj4gKyNpbmNsdWRlIDx0dG0vdHRt X3BhZ2VfYWxsb2MuaD4KPiArI2luY2x1ZGUgPHR0bS90dG1fbW9kdWxlLmg+Cj4gKyNpbmNsdWRl IDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybS5oPgo+ICsjaW5jbHVkZSAidmlydGdw dV9kcnYuaCIKPiArCj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsKPiArI2RlZmluZSBE Uk1fRklMRV9QQUdFX09GRlNFVCAoMHgxMDAwMDAwMDBVTEwgPj4gUEFHRV9TSElGVCkKPiArCj4g K3N0YXRpYyBzdHJ1Y3QKPiArdmlydGlvX2dwdV9kZXZpY2UgKnZpcnRpb19ncHVfZ2V0X3ZnZGV2 KHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9t bWFuICptbWFuOwo+ICsJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldjsKPiArCj4gKwlt bWFuID0gY29udGFpbmVyX29mKGJkZXYsIHN0cnVjdCB2aXJ0aW9fZ3B1X21tYW4sIGJkZXYpOwo+ ICsJdmdkZXYgPSBjb250YWluZXJfb2YobW1hbiwgc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlLCBt bWFuKTsKPiArCXJldHVybiB2Z2RldjsKPiArfQo+ICsKPiArc3RhdGljIGludCB2aXJ0aW9fZ3B1 X3R0bV9tZW1fZ2xvYmFsX2luaXQoc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCj4g K3sKPiArCXJldHVybiB0dG1fbWVtX2dsb2JhbF9pbml0KHJlZi0+b2JqZWN0KTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgdmlydGlvX2dwdV90dG1fbWVtX2dsb2JhbF9yZWxlYXNlKHN0cnVjdCBk cm1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKQo+ICt7Cj4gKwl0dG1fbWVtX2dsb2JhbF9yZWxlYXNl KHJlZi0+b2JqZWN0KTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2aXJ0aW9fZ3B1X3R0bV9nbG9i YWxfaW5pdChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2KQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHJtX2dsb2JhbF9yZWZlcmVuY2UgKmdsb2JhbF9yZWY7Cj4gKwlpbnQgcjsKPiArCj4gKwl2Z2Rl di0+bW1hbi5tZW1fZ2xvYmFsX3JlZmVyZW5jZWQgPSBmYWxzZTsKPiArCWdsb2JhbF9yZWYgPSAm dmdkZXYtPm1tYW4ubWVtX2dsb2JhbF9yZWY7Cj4gKwlnbG9iYWxfcmVmLT5nbG9iYWxfdHlwZSA9 IERSTV9HTE9CQUxfVFRNX01FTTsKPiArCWdsb2JhbF9yZWYtPnNpemUgPSBzaXplb2Yoc3RydWN0 IHR0bV9tZW1fZ2xvYmFsKTsKPiArCWdsb2JhbF9yZWYtPmluaXQgPSAmdmlydGlvX2dwdV90dG1f bWVtX2dsb2JhbF9pbml0Owo+ICsJZ2xvYmFsX3JlZi0+cmVsZWFzZSA9ICZ2aXJ0aW9fZ3B1X3R0 bV9tZW1fZ2xvYmFsX3JlbGVhc2U7Cj4gKwo+ICsJciA9IGRybV9nbG9iYWxfaXRlbV9yZWYoZ2xv YmFsX3JlZik7Cj4gKwlpZiAociAhPSAwKSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgc2V0dGlu ZyB1cCBUVE0gbWVtb3J5IGFjY291bnRpbmcgIgo+ICsJCQkgICJzdWJzeXN0ZW0uXG4iKTsKPiAr CQlyZXR1cm4gcjsKPiArCX0KPiArCj4gKwl2Z2Rldi0+bW1hbi5ib19nbG9iYWxfcmVmLm1lbV9n bG9iID0KPiArCQl2Z2Rldi0+bW1hbi5tZW1fZ2xvYmFsX3JlZi5vYmplY3Q7Cj4gKwlnbG9iYWxf cmVmID0gJnZnZGV2LT5tbWFuLmJvX2dsb2JhbF9yZWYucmVmOwo+ICsJZ2xvYmFsX3JlZi0+Z2xv YmFsX3R5cGUgPSBEUk1fR0xPQkFMX1RUTV9CTzsKPiArCWdsb2JhbF9yZWYtPnNpemUgPSBzaXpl b2Yoc3RydWN0IHR0bV9ib19nbG9iYWwpOwo+ICsJZ2xvYmFsX3JlZi0+aW5pdCA9ICZ0dG1fYm9f Z2xvYmFsX2luaXQ7Cj4gKwlnbG9iYWxfcmVmLT5yZWxlYXNlID0gJnR0bV9ib19nbG9iYWxfcmVs ZWFzZTsKPiArCXIgPSBkcm1fZ2xvYmFsX2l0ZW1fcmVmKGdsb2JhbF9yZWYpOwo+ICsJaWYgKHIg IT0gMCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHNldHRpbmcgdXAgVFRNIEJPIHN1YnN5c3Rl bS5cbiIpOwo+ICsJCWRybV9nbG9iYWxfaXRlbV91bnJlZigmdmdkZXYtPm1tYW4ubWVtX2dsb2Jh bF9yZWYpOwo+ICsJCXJldHVybiByOwo+ICsJfQo+ICsKPiArCXZnZGV2LT5tbWFuLm1lbV9nbG9i YWxfcmVmZXJlbmNlZCA9IHRydWU7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgdmlydGlvX2dwdV90dG1fZ2xvYmFsX2Zpbmkoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2 Z2RldikKPiArewo+ICsJaWYgKHZnZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmZXJlbmNlZCkgewo+ ICsJCWRybV9nbG9iYWxfaXRlbV91bnJlZigmdmdkZXYtPm1tYW4uYm9fZ2xvYmFsX3JlZi5yZWYp Owo+ICsJCWRybV9nbG9iYWxfaXRlbV91bnJlZigmdmdkZXYtPm1tYW4ubWVtX2dsb2JhbF9yZWYp Owo+ICsJCXZnZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmZXJlbmNlZCA9IGZhbHNlOwo+ICsJfQo+ ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpcnRpb19ncHVf dHRtX3ZtX29wczsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAq dHRtX3ZtX29wczsKCldoYXQgZG8gdGhlIGdsb2JhbHMgZG8/IGdlbmVyYWxseSBpdCdzIGJlc3Qg dG8gYXZvaWQKZ2xvYmFscy4KCj4gKwo+ICtzdGF0aWMgaW50IHZpcnRpb19ncHVfdHRtX2ZhdWx0 KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAo+ICsJCQkJc3RydWN0IHZtX2ZhdWx0ICp2bWYp Cj4gK3sKPiArCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87Cj4gKwlzdHJ1Y3QgdmlydGlv X2dwdV9kZXZpY2UgKnZnZGV2Owo+ICsJaW50IHI7Cj4gKwo+ICsJYm8gPSAoc3RydWN0IHR0bV9i dWZmZXJfb2JqZWN0ICopdm1hLT52bV9wcml2YXRlX2RhdGE7Cj4gKwlpZiAoYm8gPT0gTlVMTCkK PiArCQlyZXR1cm4gVk1fRkFVTFRfTk9QQUdFOwo+ICsJdmdkZXYgPSB2aXJ0aW9fZ3B1X2dldF92 Z2Rldihiby0+YmRldik7Cj4gKwlyID0gdHRtX3ZtX29wcy0+ZmF1bHQodm1hLCB2bWYpOwo+ICsJ cmV0dXJuIHI7Cj4gK30KPiArCj4gK2ludCB2aXJ0aW9fZ3B1X21tYXAoc3RydWN0IGZpbGUgKmZp bHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdjsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXY7Cj4gKwlpbnQg cjsKPiArCj4gKwlmaWxlX3ByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Cj4gKwl2Z2RldiA9IGZp bGVfcHJpdi0+bWlub3ItPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlpZiAodmdkZXYgPT0gTlVMTCkg ewo+ICsJCURSTV9FUlJPUigKPiArCQkgImZpbHAtPnByaXZhdGVfZGF0YS0+bWlub3ItPmRldi0+ ZGV2X3ByaXZhdGUgPT0gTlVMTFxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwly ID0gdHRtX2JvX21tYXAoZmlscCwgdm1hLCAmdmdkZXYtPm1tYW4uYmRldik7Cj4gKwlpZiAodW5s aWtlbHkociAhPSAwKSkKPiArCQlyZXR1cm4gcjsKPiArCWlmICh1bmxpa2VseSh0dG1fdm1fb3Bz ID09IE5VTEwpKSB7Cj4gKwkJdHRtX3ZtX29wcyA9IHZtYS0+dm1fb3BzOwo+ICsJCXZpcnRpb19n cHVfdHRtX3ZtX29wcyA9ICp0dG1fdm1fb3BzOwo+ICsJCXZpcnRpb19ncHVfdHRtX3ZtX29wcy5m YXVsdCA9ICZ2aXJ0aW9fZ3B1X3R0bV9mYXVsdDsKClRoZXNlIGdsb2JhbHMgYXJlIG9wZXJhdGVk IHdpdGhvdXQgYW55IGxvY2tzLgpTZWVtcyByYWN5LgoKPiArCX0KPiArCXZtYS0+dm1fb3BzID0g JnZpcnRpb19ncHVfdHRtX3ZtX29wczsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHZpcnRpb19ncHVfaW52YWxpZGF0ZV9jYWNoZXMoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJk ZXYsCj4gKwkJCQkJdWludDMyX3QgZmxhZ3MpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHR0bV9ib19tYW5fZ2V0X25vZGUoc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5h Z2VyICptYW4sCj4gKwkJCSAgICAgICBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAo+ICsJ CQkgICAgICAgY29uc3Qgc3RydWN0IHR0bV9wbGFjZSAqcGxhY2UsCj4gKwkJCSAgICAgICBzdHJ1 Y3QgdHRtX21lbV9yZWcgKm1lbSkKPiArewo+ICsJbWVtLT5tbV9ub2RlID0gKHZvaWQgKikxOwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHR0bV9ib19tYW5fcHV0X25vZGUo c3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCj4gKwkJCQlzdHJ1Y3QgdHRtX21lbV9y ZWcgKm1lbSkKPiArewo+ICsJbWVtLT5tbV9ub2RlID0gKHZvaWQgKilOVUxMOwo+ICsJcmV0dXJu Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHR0bV9ib19tYW5faW5pdChzdHJ1Y3QgdHRtX21lbV90 eXBlX21hbmFnZXIgKm1hbiwKPiArCQkJICAgdW5zaWduZWQgbG9uZyBwX3NpemUpCj4gK3sKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHR0bV9ib19tYW5fdGFrZWRvd24oc3Ry dWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4pCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCB0dG1fYm9fbWFuX2RlYnVnKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFu YWdlciAqbWFuLAo+ICsJCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCkKPiArewo+ICt9Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyX2Z1bmMgdmlydGlvX2dw dV9ib19tYW5hZ2VyX2Z1bmMgPSB7Cj4gKwl0dG1fYm9fbWFuX2luaXQsCj4gKwl0dG1fYm9fbWFu X3Rha2Vkb3duLAo+ICsJdHRtX2JvX21hbl9nZXRfbm9kZSwKPiArCXR0bV9ib19tYW5fcHV0X25v ZGUsCj4gKwl0dG1fYm9fbWFuX2RlYnVnCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHZpcnRpb19n cHVfaW5pdF9tZW1fdHlwZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwgdWludDMyX3QgdHlw ZSwKPiArCQkJCSAgICBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbikKPiArewo+ICsJ c3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldjsKPiArCj4gKwl2Z2RldiA9IHZpcnRpb19n cHVfZ2V0X3ZnZGV2KGJkZXYpOwo+ICsKPiArCXN3aXRjaCAodHlwZSkgewo+ICsJY2FzZSBUVE1f UExfU1lTVEVNOgo+ICsJCS8qIFN5c3RlbSBtZW1vcnkgKi8KPiArCQltYW4tPmZsYWdzID0gVFRN X01FTVRZUEVfRkxBR19NQVBQQUJMRTsKPiArCQltYW4tPmF2YWlsYWJsZV9jYWNoaW5nID0gVFRN X1BMX01BU0tfQ0FDSElORzsKPiArCQltYW4tPmRlZmF1bHRfY2FjaGluZyA9IFRUTV9QTF9GTEFH X0NBQ0hFRDsKPiArCQlicmVhazsKPiArCWNhc2UgVFRNX1BMX1RUOgo+ICsJCW1hbi0+ZnVuYyA9 ICZ2aXJ0aW9fZ3B1X2JvX21hbmFnZXJfZnVuYzsKPiArCQltYW4tPmZsYWdzID0gVFRNX01FTVRZ UEVfRkxBR19NQVBQQUJMRTsKPiArCQltYW4tPmF2YWlsYWJsZV9jYWNoaW5nID0gVFRNX1BMX01B U0tfQ0FDSElORzsKPiArCQltYW4tPmRlZmF1bHRfY2FjaGluZyA9IFRUTV9QTF9GTEFHX0NBQ0hF RDsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJRFJNX0VSUk9SKCJVbnN1cHBvcnRlZCBt ZW1vcnkgdHlwZSAldVxuIiwgKHVuc2lnbmVkKXR5cGUpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRpb19ncHVfZXZp Y3RfZmxhZ3Moc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKPiArCQkJCXN0cnVjdCB0dG1f cGxhY2VtZW50ICpwbGFjZW1lbnQpCj4gK3sKPiArCXN0YXRpYyBzdHJ1Y3QgdHRtX3BsYWNlIHBs YWNlbWVudHMgPSB7Cj4gKwkJLmZwZm4gID0gMCwKPiArCQkubHBmbiAgPSAwLAo+ICsJCS5mbGFn cyA9IFRUTV9QTF9NQVNLX0NBQ0hJTkcgfCBUVE1fUExfRkxBR19TWVNURU0sCj4gKwl9Owo+ICsK PiArCXBsYWNlbWVudC0+cGxhY2VtZW50ID0gJnBsYWNlbWVudHM7Cj4gKwlwbGFjZW1lbnQtPmJ1 c3lfcGxhY2VtZW50ID0gJnBsYWNlbWVudHM7Cj4gKwlwbGFjZW1lbnQtPm51bV9wbGFjZW1lbnQg PSAxOwo+ICsJcGxhY2VtZW50LT5udW1fYnVzeV9wbGFjZW1lbnQgPSAxOwo+ICsJcmV0dXJuOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZpcnRpb19ncHVfdmVyaWZ5X2FjY2VzcyhzdHJ1Y3QgdHRt X2J1ZmZlcl9vYmplY3QgKmJvLAo+ICsJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxwKQo+ICt7Cj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2aXJ0aW9fZ3B1X3R0bV9pb19tZW1f cmVzZXJ2ZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKPiArCQkJCQkgc3RydWN0IHR0bV9t ZW1fcmVnICptZW0pCj4gK3sKPiArCXN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuID0g JmJkZXYtPm1hblttZW0tPm1lbV90eXBlXTsKPiArCj4gKwltZW0tPmJ1cy5hZGRyID0gTlVMTDsK PiArCW1lbS0+YnVzLm9mZnNldCA9IDA7Cj4gKwltZW0tPmJ1cy5zaXplID0gbWVtLT5udW1fcGFn ZXMgPDwgUEFHRV9TSElGVDsKPiArCW1lbS0+YnVzLmJhc2UgPSAwOwo+ICsJbWVtLT5idXMuaXNf aW9tZW0gPSBmYWxzZTsKPiArCWlmICghKG1hbi0+ZmxhZ3MgJiBUVE1fTUVNVFlQRV9GTEFHX01B UFBBQkxFKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCXN3aXRjaCAobWVtLT5tZW1fdHlwZSkg ewo+ICsJY2FzZSBUVE1fUExfU1lTVEVNOgo+ICsJY2FzZSBUVE1fUExfVFQ6Cj4gKwkJLyogc3lz dGVtIG1lbW9yeSAqLwo+ICsJCXJldHVybiAwOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiArCX0KPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9f Z3B1X3R0bV9pb19tZW1fZnJlZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKPiArCQkJCSAg ICAgICBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSkKPiArewo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBU VE0gYmFja2VuZCBmdW5jdGlvbnMuCj4gKyAqLwo+ICtzdHJ1Y3QgdmlydGlvX2dwdV90dG1fdHQg ewo+ICsJc3RydWN0IHR0bV9kbWFfdHQJCXR0bTsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2Rldmlj ZQkJKnZnZGV2Owo+ICsJdTY0CQkJCW9mZnNldDsKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgdmly dGlvX2dwdV90dG1fYmFja2VuZF9iaW5kKHN0cnVjdCB0dG1fdHQgKnR0bSwKPiArCQkJCSAgICAg ICBzdHJ1Y3QgdHRtX21lbV9yZWcgKmJvX21lbSkKPiArewo+ICsJc3RydWN0IHZpcnRpb19ncHVf dHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKPiArCj4gKwlndHQtPm9mZnNldCA9ICh1bnNpZ25l ZCBsb25nKShib19tZW0tPnN0YXJ0IDw8IFBBR0VfU0hJRlQpOwo+ICsJaWYgKCF0dG0tPm51bV9w YWdlcykgewo+ICsJCVdBUk4oMSwgIm5vdGhpbmcgdG8gYmluZCAlbHUgcGFnZXMgZm9yIG1yZWcg JXAgYmFjayAlcCFcbiIsCj4gKwkJICAgICB0dG0tPm51bV9wYWdlcywgYm9fbWVtLCB0dG0pOwo+ ICsJfQoKc2luZ2xlIGxpbmUgd2l0aGluIHt9LCBwbHMgZHJvcCB7fS8KCj4gKwkvKiBOb3QgaW1w bGVtZW50ZWQgKi8KCldoYXQgaXNuJ3Q/Cgo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgdmlydGlvX2dwdV90dG1fYmFja2VuZF91bmJpbmQoc3RydWN0IHR0bV90dCAqdHRtKQo+ ICt7Cj4gKwkvKiBOb3QgaW1wbGVtZW50ZWQgKi8KPiArCXJldHVybiAwOwoKY29tbWVudCBkb2Vz IG5vdCBzZWVtIGhlbHBmdWwuCjAgbWVhbnMgZmFpbHVyZSBoZXJlPwoKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgdmlydGlvX2dwdV90dG1fYmFja2VuZF9kZXN0cm95KHN0cnVjdCB0dG1fdHQgKnR0 bSkKPiArewo+ICsJc3RydWN0IHZpcnRpb19ncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsK PiArCj4gKwl0dG1fZG1hX3R0X2ZpbmkoJmd0dC0+dHRtKTsKPiArCWtmcmVlKGd0dCk7Cj4gK30K PiArCj4gK3N0YXRpYyBzdHJ1Y3QgdHRtX2JhY2tlbmRfZnVuYyB2aXJ0aW9fZ3B1X2JhY2tlbmRf ZnVuYyA9IHsKPiArCS5iaW5kID0gJnZpcnRpb19ncHVfdHRtX2JhY2tlbmRfYmluZCwKPiArCS51 bmJpbmQgPSAmdmlydGlvX2dwdV90dG1fYmFja2VuZF91bmJpbmQsCj4gKwkuZGVzdHJveSA9ICZ2 aXJ0aW9fZ3B1X3R0bV9iYWNrZW5kX2Rlc3Ryb3ksCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHZp cnRpb19ncHVfdHRtX3R0X3BvcHVsYXRlKHN0cnVjdCB0dG1fdHQgKnR0bSkKPiArewo+ICsJaWYg KHR0bS0+c3RhdGUgIT0gdHRfdW5wb3B1bGF0ZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0 dXJuIHR0bV9wb29sX3BvcHVsYXRlKHR0bSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRp b19ncHVfdHRtX3R0X3VucG9wdWxhdGUoc3RydWN0IHR0bV90dCAqdHRtKQo+ICt7Cj4gKwl0dG1f cG9vbF91bnBvcHVsYXRlKHR0bSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdHRtX3R0ICp2 aXJ0aW9fZ3B1X3R0bV90dF9jcmVhdGUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCj4gKwkJ CQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKPiArCQkJCQkgICAgICAgdWludDMyX3QgcGFn ZV9mbGFncywKPiArCQkJCQkgICAgICAgc3RydWN0IHBhZ2UgKmR1bW15X3JlYWRfcGFnZSkKPiAr ewo+ICsJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldjsKPiArCXN0cnVjdCB2aXJ0aW9f Z3B1X3R0bV90dCAqZ3R0Owo+ICsKPiArCXZnZGV2ID0gdmlydGlvX2dwdV9nZXRfdmdkZXYoYmRl dik7Cj4gKwlndHQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmlydGlvX2dwdV90dG1fdHQpLCBH RlBfS0VSTkVMKTsKPiArCWlmIChndHQgPT0gTlVMTCkKPiArCQlyZXR1cm4gTlVMTDsKPiArCWd0 dC0+dHRtLnR0bS5mdW5jID0gJnZpcnRpb19ncHVfYmFja2VuZF9mdW5jOwo+ICsJZ3R0LT52Z2Rl diA9IHZnZGV2Owo+ICsJaWYgKHR0bV9kbWFfdHRfaW5pdCgmZ3R0LT50dG0sIGJkZXYsIHNpemUs IHBhZ2VfZmxhZ3MsCj4gKwkJCSAgICBkdW1teV9yZWFkX3BhZ2UpKSB7Cj4gKwkJa2ZyZWUoZ3R0 KTsKPiArCQlyZXR1cm4gTlVMTDsKPiArCX0KPiArCXJldHVybiAmZ3R0LT50dG0udHRtOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X21vdmVfbnVsbChzdHJ1Y3QgdHRtX2J1ZmZl cl9vYmplY3QgKmJvLAo+ICsJCQkJIHN0cnVjdCB0dG1fbWVtX3JlZyAqbmV3X21lbSkKPiArewo+ ICsJc3RydWN0IHR0bV9tZW1fcmVnICpvbGRfbWVtID0gJmJvLT5tZW07Cj4gKwo+ICsJQlVHX09O KG9sZF9tZW0tPm1tX25vZGUgIT0gTlVMTCk7Cj4gKwkqb2xkX21lbSA9ICpuZXdfbWVtOwo+ICsJ bmV3X21lbS0+bW1fbm9kZSA9IE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmlydGlvX2dw dV9ib19tb3ZlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCj4gKwkJCSAgICAgIGJvb2wg ZXZpY3QsIGJvb2wgaW50ZXJydXB0aWJsZSwKPiArCQkJICAgICAgYm9vbCBub193YWl0X2dwdSwK PiArCQkJICAgICAgc3RydWN0IHR0bV9tZW1fcmVnICpuZXdfbWVtKQo+ICt7Cj4gKwl2aXJ0aW9f Z3B1X21vdmVfbnVsbChibywgbmV3X21lbSk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgdmlydGlvX2dwdV9ib19tb3ZlX25vdGlmeShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmpl Y3QgKnRibywKPiArCQkJCSAgICAgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbmV3X21lbSkKPiArewo+ ICsJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpibzsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2Rl dmljZSAqdmdkZXY7Cj4gKwo+ICsJYm8gPSBjb250YWluZXJfb2YodGJvLCBzdHJ1Y3QgdmlydGlv X2dwdV9vYmplY3QsIHRibyk7Cj4gKwl2Z2RldiA9IChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2Ug Kiliby0+Z2VtX2Jhc2UuZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlpZiAoIW5ld19tZW0gfHwg KG5ld19tZW0tPnBsYWNlbWVudCAmIFRUTV9QTF9GTEFHX1NZU1RFTSkpIHsKPiArCQlpZiAoYm8t Pmh3X3Jlc19oYW5kbGUpCj4gKwkJCXZpcnRpb19ncHVfY21kX3Jlc291cmNlX2ludmFsX2JhY2tp bmcodmdkZXYsCj4gKwkJCQkJCQkgICBiby0+aHdfcmVzX2hhbmRsZSk7Cj4gKwo+ICsJfSBlbHNl IGlmIChuZXdfbWVtLT5wbGFjZW1lbnQgJiBUVE1fUExfRkxBR19UVCkgewo+ICsJCWlmIChiby0+ aHdfcmVzX2hhbmRsZSkgewo+ICsJCQl2aXJ0aW9fZ3B1X29iamVjdF9hdHRhY2godmdkZXYsIGJv LCBiby0+aHdfcmVzX2hhbmRsZSwKPiArCQkJCQkgICAgICBOVUxMKTsKPiArCQl9Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuOwoKcmV0dXJuIGhlcmUgaXMgdXNlbGVzcy4KCj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHZpcnRpb19ncHVfYm9fc3dhcF9ub3RpZnkoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0 ICp0Ym8pCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAqYm87Cj4gKwlzdHJ1Y3Qg dmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2Owo+ICsKPiArCWJvID0gY29udGFpbmVyX29mKHRibywg c3RydWN0IHZpcnRpb19ncHVfb2JqZWN0LCB0Ym8pOwo+ICsJdmdkZXYgPSAoc3RydWN0IHZpcnRp b19ncHVfZGV2aWNlICopYm8tPmdlbV9iYXNlLmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJaWYg KGJvLT5wYWdlcykKPiArCQl2aXJ0aW9fZ3B1X29iamVjdF9mcmVlX3NnX3RhYmxlKGJvKTsKPiAr fQo+ICsKPiArc3RhdGljIHN0cnVjdCB0dG1fYm9fZHJpdmVyIHZpcnRpb19ncHVfYm9fZHJpdmVy ID0gewo+ICsJLnR0bV90dF9jcmVhdGUgPSAmdmlydGlvX2dwdV90dG1fdHRfY3JlYXRlLAo+ICsJ LnR0bV90dF9wb3B1bGF0ZSA9ICZ2aXJ0aW9fZ3B1X3R0bV90dF9wb3B1bGF0ZSwKPiArCS50dG1f dHRfdW5wb3B1bGF0ZSA9ICZ2aXJ0aW9fZ3B1X3R0bV90dF91bnBvcHVsYXRlLAo+ICsJLmludmFs aWRhdGVfY2FjaGVzID0gJnZpcnRpb19ncHVfaW52YWxpZGF0ZV9jYWNoZXMsCj4gKwkuaW5pdF9t ZW1fdHlwZSA9ICZ2aXJ0aW9fZ3B1X2luaXRfbWVtX3R5cGUsCj4gKwkuZXZpY3RfZmxhZ3MgPSAm dmlydGlvX2dwdV9ldmljdF9mbGFncywKPiArCS5tb3ZlID0gJnZpcnRpb19ncHVfYm9fbW92ZSwK PiArCS52ZXJpZnlfYWNjZXNzID0gJnZpcnRpb19ncHVfdmVyaWZ5X2FjY2VzcywKPiArCS5pb19t ZW1fcmVzZXJ2ZSA9ICZ2aXJ0aW9fZ3B1X3R0bV9pb19tZW1fcmVzZXJ2ZSwKPiArCS5pb19tZW1f ZnJlZSA9ICZ2aXJ0aW9fZ3B1X3R0bV9pb19tZW1fZnJlZSwKPiArCS5tb3ZlX25vdGlmeSA9ICZ2 aXJ0aW9fZ3B1X2JvX21vdmVfbm90aWZ5LAo+ICsJLnN3YXBfbm90aWZ5ID0gJnZpcnRpb19ncHVf Ym9fc3dhcF9ub3RpZnksCj4gK307Cj4gKwo+ICtpbnQgdmlydGlvX2dwdV90dG1faW5pdChzdHJ1 Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2KQo+ICt7Cj4gKwlpbnQgcjsKPiArCj4gKwlyID0g dmlydGlvX2dwdV90dG1fZ2xvYmFsX2luaXQodmdkZXYpOwo+ICsJaWYgKHIpCj4gKwkJcmV0dXJu IHI7Cj4gKwkvKiBObyBvdGhlcnMgdXNlciBvZiBhZGRyZXNzIHNwYWNlIHNvIHNldCBpdCB0byAw ICovCgpObyBvdGhlciB1c2Vycz8KCj4gKwlyID0gdHRtX2JvX2RldmljZV9pbml0KCZ2Z2Rldi0+ bW1hbi5iZGV2LAo+ICsJCQkgICAgICAgdmdkZXYtPm1tYW4uYm9fZ2xvYmFsX3JlZi5yZWYub2Jq ZWN0LAo+ICsJCQkgICAgICAgJnZpcnRpb19ncHVfYm9fZHJpdmVyLAo+ICsJCQkgICAgICAgdmdk ZXYtPmRkZXYtPmFub25faW5vZGUtPmlfbWFwcGluZywKPiArCQkJICAgICAgIERSTV9GSUxFX1BB R0VfT0ZGU0VULCAwKTsKPiArCWlmIChyKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgaW5pdGlh bGl6aW5nIGJ1ZmZlciBvYmplY3QgZHJpdmVyKCVkKS5cbiIsIHIpOwo+ICsJCXJldHVybiByOwo+ ICsJfQo+ICsKPiArCXIgPSB0dG1fYm9faW5pdF9tbSgmdmdkZXYtPm1tYW4uYmRldiwgVFRNX1BM X1RULCAwKTsKPiArCWlmIChyKSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgaW5pdGlhbGl6aW5n IEdUVCBoZWFwLlxuIik7CgpzaG91bGQgcmV2ZXJ0IGVmZmVjdCBvZiB0dG1fYm9fZGV2aWNlX2lu aXQgYW5kCnZpcnRpb19ncHVfdHRtX2dsb2JhbF9pbml0PwoKPiArCQlyZXR1cm4gcjsKPiArCX0K PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIHZpcnRpb19ncHVfdHRtX2Zpbmkoc3RydWN0 IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldikKPiArewo+ICsJdHRtX2JvX2RldmljZV9yZWxlYXNl KCZ2Z2Rldi0+bW1hbi5iZGV2KTsKPiArCXZpcnRpb19ncHVfdHRtX2dsb2JhbF9maW5pKHZnZGV2 KTsKPiArCURSTV9JTkZPKCJ2aXJ0aW9fZ3B1OiB0dG0gZmluYWxpemVkXG4iKTsKPiArfQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnEuYyBiL2RyaXZlcnMv Z3B1L2RybS92aXJ0aW8vdmlydGdwdV92cS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwLi5hOThjZGE4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS92aXJ0aW8vdmlydGdwdV92cS5jCj4gQEAgLTAsMCArMSw1NDAgQEAKPiArI2luY2x1ZGUgPGRy bS9kcm1QLmg+Cj4gKyNpbmNsdWRlICJ2aXJ0Z3B1X2Rydi5oIgo+ICsjaW5jbHVkZSA8bGludXgv dmlydGlvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC92aXJ0aW9fcmluZy5oPgo+ICsKPiArCj4gK2ludCB2aXJ0aW9fZ3B1X3Jlc291cmNl X2lkX2dldChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LCB1aW50MzJfdCAqcmVzaWQp Cj4gK3sKPiArCWludCBoYW5kbGU7Cj4gKwo+ICsJaWRyX3ByZWxvYWQoR0ZQX0tFUk5FTCk7Cj4g KwlzcGluX2xvY2soJnZnZGV2LT5yZXNvdXJjZV9pZHJfbG9jayk7Cj4gKwloYW5kbGUgPSBpZHJf YWxsb2MoJnZnZGV2LT5yZXNvdXJjZV9pZHIsIE5VTEwsIDEsIDAsIEdGUF9OT1dBSVQpOwo+ICsJ c3Bpbl91bmxvY2soJnZnZGV2LT5yZXNvdXJjZV9pZHJfbG9jayk7Cj4gKwlpZHJfcHJlbG9hZF9l bmQoKTsKPiArCSpyZXNpZCA9IGhhbmRsZTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lk IHZpcnRpb19ncHVfcmVzb3VyY2VfaWRfcHV0KHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdk ZXYsIHVpbnQzMl90IGlkKQo+ICt7Cj4gKwlzcGluX2xvY2soJnZnZGV2LT5yZXNvdXJjZV9pZHJf bG9jayk7Cj4gKwlpZHJfcmVtb3ZlKCZ2Z2Rldi0+cmVzb3VyY2VfaWRyLCBpZCk7Cj4gKwlzcGlu X3VubG9jaygmdmdkZXYtPnJlc291cmNlX2lkcl9sb2NrKTsKPiArfQo+ICsKPiArdm9pZCB2aXJ0 aW9fZ3B1X2N0cmxfYWNrKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gdnEtPnZkZXYtPnByaXY7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZp Y2UgKnZnZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXNjaGVkdWxlX3dvcmsoJnZnZGV2LT5j dHJscS5kZXF1ZXVlX3dvcmspOwo+ICt9Cj4gKwo+ICt2b2lkIHZpcnRpb19ncHVfY3Vyc29yX2Fj ayhzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IHZxLT52ZGV2LT5wcml2Owo+ICsJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiA9IGRl di0+ZGV2X3ByaXZhdGU7Cj4gKwlzY2hlZHVsZV93b3JrKCZ2Z2Rldi0+Y3Vyc29ycS5kZXF1ZXVl X3dvcmspOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlcioKPiAr dmlydGlvX2dwdV9hbGxvY2F0ZV92YnVmKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYs Cj4gKwkJCSBpbnQgc2l6ZSwgaW50IHJlc3Bfc2l6ZSwKPiArCQkJIHZpcnRpb19ncHVfcmVzcF9j YiByZXNwX2NiKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmOwo+ICsK PiArCXZidWYgPSBremFsbG9jKHNpemVvZigqdmJ1ZikgKyBzaXplICsgcmVzcF9zaXplLCBHRlBf S0VSTkVMKTsKPiArCWlmICghdmJ1ZikKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ICsJdmJ1Zi0+YnVm ID0gKHZvaWQgKil2YnVmICsgc2l6ZW9mKCp2YnVmKTsKPiArCXZidWYtPnNpemUgPSBzaXplOwo+ ICsKPiArCXZidWYtPnJlc3BfY2IgPSByZXNwX2NiOwo+ICsJaWYgKHJlc3Bfc2l6ZSkKPiArCQl2 YnVmLT5yZXNwX2J1ZiA9ICh2b2lkICopdmJ1Zi0+YnVmICsgc2l6ZTsKPiArCWVsc2UKPiArCQl2 YnVmLT5yZXNwX2J1ZiA9IE5VTEw7Cj4gKwl2YnVmLT5yZXNwX3NpemUgPSByZXNwX3NpemU7Cj4g Kwo+ICsJcmV0dXJuIHZidWY7Cj4gK2ZhaWw6Cj4gKwlrZnJlZSh2YnVmKTsKPiArCXJldHVybiBF UlJfUFRSKC1FTk9NRU0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCAqdmlydGlvX2dwdV9hbGxv Y19jbWQoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKPiArCQkJCSAgc3RydWN0IHZp cnRpb19ncHVfdmJ1ZmZlciAqKnZidWZmZXJfcCwKPiArCQkJCSAgaW50IHNpemUpCj4gK3sKPiAr CXN0cnVjdCB2aXJ0aW9fZ3B1X3ZidWZmZXIgKnZidWY7Cj4gKwo+ICsJdmJ1ZiA9IHZpcnRpb19n cHVfYWxsb2NhdGVfdmJ1Zih2Z2Rldiwgc2l6ZSwKPiArCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCB2 aXJ0aW9fZ3B1X2N0cmxfaGRyKSwgTlVMTCk7Cj4gKwlpZiAoSVNfRVJSKHZidWYpKSB7Cj4gKwkJ KnZidWZmZXJfcCA9IE5VTEw7Cj4gKwkJcmV0dXJuIEVSUl9DQVNUKHZidWYpOwoKTmljZSwgYnV0 IHRoZW4gYWxsIGNhbGxlcnMgZmFpbCB0byB2YWxpZGF0ZSB0aGUgcmV0dXJuZWQgdmFsdWVzLgpX aGF0IHdhcyB0aGUgcG9pbnQgdGhlbj8KCj4gKwl9Cj4gKwkqdmJ1ZmZlcl9wID0gdmJ1ZjsKPiAr CXJldHVybiB2YnVmLT5idWY7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdmlydGlvX2dwdV91 cGRhdGVfY3Vyc29yKgo+ICt2aXJ0aW9fZ3B1X2FsbG9jX2N1cnNvcihzdHJ1Y3QgdmlydGlvX2dw dV9kZXZpY2UgKnZnZGV2LAo+ICsJCQlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICoqdmJ1ZmZl cl9wKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmOwo+ICsKPiArCXZi dWYgPSB2aXJ0aW9fZ3B1X2FsbG9jYXRlX3ZidWYKPiArCQkodmdkZXYsIHNpemVvZihzdHJ1Y3Qg dmlydGlvX2dwdV91cGRhdGVfY3Vyc29yKSwgMCwgTlVMTCk7Cj4gKwlpZiAoSVNfRVJSKHZidWYp KSB7Cj4gKwkJKnZidWZmZXJfcCA9IE5VTEw7Cj4gKwkJcmV0dXJuIEVSUl9DQVNUKHZidWYpOwo+ ICsJfQo+ICsJKnZidWZmZXJfcCA9IHZidWY7Cj4gKwlyZXR1cm4gKHN0cnVjdCB2aXJ0aW9fZ3B1 X3VwZGF0ZV9jdXJzb3IgKil2YnVmLT5idWY7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkICp2aXJ0 aW9fZ3B1X2FsbG9jX2NtZF9yZXNwKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCj4g KwkJCQkgICAgICAgdmlydGlvX2dwdV9yZXNwX2NiIGNiLAo+ICsJCQkJICAgICAgIHN0cnVjdCB2 aXJ0aW9fZ3B1X3ZidWZmZXIgKip2YnVmZmVyX3AsCj4gKwkJCQkgICAgICAgaW50IGNtZF9zaXpl LCBpbnQgcmVzcF9zaXplKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVm Owo+ICsKPiArCXZidWYgPSB2aXJ0aW9fZ3B1X2FsbG9jYXRlX3ZidWYodmdkZXYsIGNtZF9zaXpl LCByZXNwX3NpemUsIGNiKTsKPiArCWlmIChJU19FUlIodmJ1ZikpIHsKPiArCQkqdmJ1ZmZlcl9w ID0gTlVMTDsKPiArCQlyZXR1cm4gRVJSX0NBU1QodmJ1Zik7CgpTYW1lIGlzc3VlIGFzIHZpcnRp b19ncHVfYWxsb2NfY21kCgo+ICsJfQo+ICsJKnZidWZmZXJfcCA9IHZidWY7Cj4gKwlyZXR1cm4g KHN0cnVjdCB2aXJ0aW9fZ3B1X2NvbW1hbmQgKil2YnVmLT5idWY7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGZyZWVfdmJ1ZihzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAo+ICsJCSAg ICAgIHN0cnVjdCB2aXJ0aW9fZ3B1X3ZidWZmZXIgKnZidWYpCj4gK3sKPiArCWtmcmVlKHZidWYt PmRhdGFfYnVmKTsKPiArCWtmcmVlKHZidWYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJlY2xh aW1fdmJ1ZnMoc3RydWN0IHZpcnRxdWV1ZSAqdnEsIHN0cnVjdCBsaXN0X2hlYWQgKnJlY2xhaW1f bGlzdCkKPiArewo+ICsJc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlciAqdmJ1ZjsKPiArCXVuc2ln bmVkIGludCBsZW47Cj4gKwlpbnQgZnJlZWQgPSAwOwo+ICsJd2hpbGUgKCh2YnVmID0gdmlydHF1 ZXVlX2dldF9idWYodnEsICZsZW4pKSkgewo+ICsJCWxpc3RfYWRkX3RhaWwoJnZidWYtPmRlc3Ry b3lfbGlzdCwgcmVjbGFpbV9saXN0KTsKPiArCQlmcmVlZCsrOwo+ICsJfQo+ICsJcmV0dXJuIGZy ZWVkOwo+ICt9Cj4gKwo+ICt2b2lkIHZpcnRpb19ncHVfZGVxdWV1ZV9jdHJsX2Z1bmMoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZn ZGV2ID0KPiArCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlLAo+ ICsJCQkgICAgIGN0cmxxLmRlcXVldWVfd29yayk7Cj4gKwlpbnQgcmV0Owo+ICsJc3RydWN0IGxp c3RfaGVhZCByZWNsYWltX2xpc3Q7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICplbnRy eSwgKnRtcDsKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2N0cmxfaGRyICpyZXNwOwo+ICsJdTY0IGZl bmNlX2lkID0gMDsKPiArCj4gKwlJTklUX0xJU1RfSEVBRCgmcmVjbGFpbV9saXN0KTsKPiArCXNw aW5fbG9jaygmdmdkZXYtPmN0cmxxLnFsb2NrKTsKPiArCWRvIHsKPiArCQl2aXJ0cXVldWVfZGlz YWJsZV9jYih2Z2Rldi0+Y3RybHEudnEpOwo+ICsJCXJldCA9IHJlY2xhaW1fdmJ1ZnModmdkZXYt PmN0cmxxLnZxLCAmcmVjbGFpbV9saXN0KTsKPiArCQlpZiAocmV0ID09IDApCj4gKwkJCURSTV9E RUJVRygiY2xlYW5lZCAwIGJ1ZmZlcnMgd2llcmRcbiIpOwoKd2llcmQgc3BlbGxpbmcgaW50ZW50 aW9uYWw/Cgo+ICsKPiArCX0gd2hpbGUgKCF2aXJ0cXVldWVfZW5hYmxlX2NiKHZnZGV2LT5jdHJs cS52cSkpOwo+ICsJc3Bpbl91bmxvY2soJnZnZGV2LT5jdHJscS5xbG9jayk7Cj4gKwo+ICsJbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsICZyZWNsYWltX2xpc3QsIGRlc3Ryb3lf bGlzdCkgewo+ICsJCXJlc3AgPSAoc3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgKillbnRyeS0+ cmVzcF9idWY7Cj4gKwkJaWYgKHJlc3AtPnR5cGUgIT0gY3B1X3RvX2xlMzIoVklSVElPX0dQVV9S RVNQX09LX05PREFUQSkpCj4gKwkJCURSTV9ERUJVRygicmVzcG9uc2UgMHgleFxuIiwgbGUzMl90 b19jcHUocmVzcC0+dHlwZSkpOwo+ICsJCWlmIChyZXNwLT5mbGFncyAmIGNwdV90b19sZTMyKFZJ UlRJT19HUFVfRkxBR19GRU5DRSkpIHsKPiArCQkJdTY0IGYgPSBsZTY0X3RvX2NwdShyZXNwLT5m ZW5jZV9pZCk7Cj4gKwo+ICsJCQlpZiAoZmVuY2VfaWQgPiBmKSB7Cj4gKwkJCQlEUk1fRVJST1Io IiVzOiBPb3BzOiBmZW5jZSAlbGx4IC0+ICVsbHhcbiIsCj4gKwkJCQkJICBfX2Z1bmNfXywgZmVu Y2VfaWQsIGYpOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJZmVuY2VfaWQgPSBmOwo+ICsJCQl9Cj4g KwkJfQo+ICsJCWlmIChlbnRyeS0+cmVzcF9jYikKPiArCQkJZW50cnktPnJlc3BfY2IodmdkZXYs IGVudHJ5KTsKPiArCj4gKwkJbGlzdF9kZWwoJmVudHJ5LT5kZXN0cm95X2xpc3QpOwo+ICsJCWZy ZWVfdmJ1Zih2Z2RldiwgZW50cnkpOwo+ICsJfQo+ICsJd2FrZV91cCgmdmdkZXYtPmN0cmxxLmFj a19xdWV1ZSk7Cj4gKwo+ICsJaWYgKGZlbmNlX2lkKSB7Cj4gKwkJdmlydGlvX2dwdV9mZW5jZV9l dmVudF9wcm9jZXNzKHZnZGV2LCBmZW5jZV9pZCk7Cj4gKwl9Cgpkb24ndCBwdXQge30gYXJvdW5k IHNpbmdsZSBsaW5lIGJsb2Nrcy4KCj4gK30KPiArCj4gK3ZvaWQgdmlydGlvX2dwdV9kZXF1ZXVl X2N1cnNvcl9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiArewo+ICsJc3RydWN0IHZp cnRpb19ncHVfZGV2aWNlICp2Z2RldiA9Cj4gKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2 aXJ0aW9fZ3B1X2RldmljZSwKPiArCQkJICAgICBjdXJzb3JxLmRlcXVldWVfd29yayk7Cj4gKwlz dHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHZnZGV2LT5jdXJzb3JxLnZxOwo+ICsJc3RydWN0IGxpc3Rf aGVhZCByZWNsYWltX2xpc3Q7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICplbnRyeSwg KnRtcDsKPiArCXVuc2lnbmVkIGludCBsZW47Cj4gKwlpbnQgcmV0Owo+ICsKPiArCUlOSVRfTElT VF9IRUFEKCZyZWNsYWltX2xpc3QpOwo+ICsJc3Bpbl9sb2NrKCZ2Z2Rldi0+Y3Vyc29ycS5xbG9j ayk7Cj4gKwlkbyB7Cj4gKwkJdmlydHF1ZXVlX2Rpc2FibGVfY2IodmdkZXYtPmN1cnNvcnEudnEp Owo+ICsJCXJldCA9IHJlY2xhaW1fdmJ1ZnModmdkZXYtPmN1cnNvcnEudnEsICZyZWNsYWltX2xp c3QpOwo+ICsJCWlmIChyZXQgPT0gMCkKPiArCQkJRFJNX0RFQlVHKCJjbGVhbmVkIDAgYnVmZmVy cyB3aWVyZFxuIik7Cj4gKwkJd2hpbGUgKHZpcnRxdWV1ZV9nZXRfYnVmKHZxLCAmbGVuKSkKPiAr CQkJLyogbm90aGluZyAqLzsKPiArCX0gd2hpbGUgKCF2aXJ0cXVldWVfZW5hYmxlX2NiKHZnZGV2 LT5jdXJzb3JxLnZxKSk7Cj4gKwlzcGluX3VubG9jaygmdmdkZXYtPmN1cnNvcnEucWxvY2spOwo+ ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdG1wLCAmcmVjbGFpbV9saXN0 LCBkZXN0cm95X2xpc3QpIHsKPiArCQlsaXN0X2RlbCgmZW50cnktPmRlc3Ryb3lfbGlzdCk7Cj4g KwkJZnJlZV92YnVmKHZnZGV2LCBlbnRyeSk7Cj4gKwl9Cj4gKwl3YWtlX3VwKCZ2Z2Rldi0+Y3Vy c29ycS5hY2tfcXVldWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZpcnRpb19ncHVfcXVldWVf Y3RybF9idWZmZXIoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKPiArCQkJCQlzdHJ1 Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydHF1ZXVlICp2 cSA9IHZnZGV2LT5jdHJscS52cTsKPiArCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dzWzNdLCB2Y21k LCB2b3V0LCB2cmVzcDsKPiArCWludCBvdXRjbnQgPSAwLCBpbmNudCA9IDA7Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCXNnX2luaXRfb25lKCZ2Y21kLCB2YnVmLT5idWYsIHZidWYtPnNpemUpOwo+ICsJ c2dzW291dGNudCtpbmNudF0gPSAmdmNtZDsKPiArCW91dGNudCsrOwo+ICsKPiArCWlmICh2YnVm LT5kYXRhX2J1Zikgewo+ICsJCXNnX2luaXRfb25lKCZ2b3V0LCB2YnVmLT5kYXRhX2J1ZiwgdmJ1 Zi0+ZGF0YV9zaXplKTsKPiArCQlzZ3Nbb3V0Y250K2luY250XSA9ICZ2b3V0OwoKTmVlZCBzcGFj ZSBhcm91bmQgKyBoZXJlIGFuZCBlbHNld2hlcmUuCgo+ICsJCW91dGNudCsrOwo+ICsJfQo+ICsK PiArCWlmICh2YnVmLT5yZXNwX2J1Zikgewo+ICsJCXNnX2luaXRfb25lKCZ2cmVzcCwgdmJ1Zi0+ cmVzcF9idWYsIHZidWYtPnJlc3Bfc2l6ZSk7Cj4gKwkJc2dzW291dGNudCtpbmNudF0gPSAmdnJl c3A7Cj4gKwkJaW5jbnQrKzsKPiArCX0KPiArCj4gKwlzcGluX2xvY2soJnZnZGV2LT5jdHJscS5x bG9jayk7Cj4gK3JldHJ5Ogo+ICsJcmV0ID0gdmlydHF1ZXVlX2FkZF9zZ3ModnEsIHNncywgb3V0 Y250LCBpbmNudCwgdmJ1ZiwgR0ZQX0FUT01JQyk7Cj4gKwlpZiAocmV0ID09IC1FTk9TUEMpIHsK PiArCQlzcGluX3VubG9jaygmdmdkZXYtPmN0cmxxLnFsb2NrKTsKPiArCQl3YWl0X2V2ZW50KHZn ZGV2LT5jdHJscS5hY2tfcXVldWUsIHZxLT5udW1fZnJlZSk7Cj4gKwkJc3Bpbl9sb2NrKCZ2Z2Rl di0+Y3RybHEucWxvY2spOwo+ICsJCWdvdG8gcmV0cnk7Cj4gKwl9IGVsc2Ugewo+ICsJCXZpcnRx dWV1ZV9raWNrKHZxKTsKPiArCX0KClRoaXMgY2FuIGZhaWwgb24gT09NIHRvbyBzaW5jZSB5b3Ug YXJlCnVzaW5nIEdGUF9BVE9NSUMsIHlvdSBtdXN0bid0IGZhaWwgaW4gdGhpcyBjYXNlLAp5b3Ug c2hvdWxkIGhhbmRsZSB0aGlzIGdyYWNlZnVsbHkgYnkgcmV0cnlpbmcKbGF0ZXIuCgpNYXliZSBj aGFuZ2UgcWxvY2sgdG8gYSBtdXRleCwgYW5kIEdGUF9BVE9NSUMgdG8gR0ZQX0tFUk5FTC4KCj4g KwlzcGluX3VubG9jaygmdmdkZXYtPmN0cmxxLnFsb2NrKTsKPiArCj4gKwlpZiAoIXJldCkKPiAr CQlyZXQgPSB2cS0+bnVtX2ZyZWU7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHZpcnRpb19ncHVfcXVldWVfY3Vyc29yKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdk ZXYsCj4gKwkJCQkgICBzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmKQo+ICt7Cj4gKwlz dHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHZnZGV2LT5jdXJzb3JxLnZxOwo+ICsJc3RydWN0IHNjYXR0 ZXJsaXN0ICpzZ3NbMV0sIGNjbWQ7Cj4gKwlpbnQgcmV0Owo+ICsJaW50IG91dGNudDsKPiArCj4g KwlzZ19pbml0X29uZSgmY2NtZCwgdmJ1Zi0+YnVmLCB2YnVmLT5zaXplKTsKPiArCXNnc1swXSA9 ICZjY21kOwo+ICsJb3V0Y250ID0gMTsKPiArCj4gKwlzcGluX2xvY2soJnZnZGV2LT5jdXJzb3Jx LnFsb2NrKTsKPiArcmV0cnk6Cj4gKwlyZXQgPSB2aXJ0cXVldWVfYWRkX3Nncyh2cSwgc2dzLCBv dXRjbnQsIDAsIHZidWYsIEdGUF9BVE9NSUMpOwo+ICsJaWYgKHJldCA9PSAtRU5PU1BDKSB7Cj4g KwkJc3Bpbl91bmxvY2soJnZnZGV2LT5jdXJzb3JxLnFsb2NrKTsKPiArCQl3YWl0X2V2ZW50KHZn ZGV2LT5jdXJzb3JxLmFja19xdWV1ZSwgdnEtPm51bV9mcmVlKTsKCmNoZWNraW5nIG51bV9mcmVl IG91dHNpZGUgbG9jayBzZWVtcyByaXNreS4KRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBzZWUgYSBz dGFsZSBudW1fZnJlZQp2YWx1ZSBhbmQgYmxvY2sgZm9yZXZlci4KCj4gKwkJc3Bpbl9sb2NrKCZ2 Z2Rldi0+Y3Vyc29ycS5xbG9jayk7Cj4gKwkJZ290byByZXRyeTsKPiArCX0gZWxzZSB7Cj4gKwkJ dmlydHF1ZXVlX2tpY2sodnEpOwo+ICsJfQo+ICsKPiArCXNwaW5fdW5sb2NrKCZ2Z2Rldi0+Y3Vy c29ycS5xbG9jayk7Cj4gKwo+ICsJaWYgKCFyZXQpCj4gKwkJcmV0ID0gdnEtPm51bV9mcmVlOwo+ ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoganVzdCBjcmVhdGUgZ2VtIG9iamVjdHMgZm9y IHVzZXJzcGFjZSBhbmQgbG9uZyBsaXZlZCBvYmplY3RzLAo+ICsgICBqdXN0IHVzZSBkbWFfYWxs b2NlZCBwYWdlcyBmb3IgdGhlIHF1ZXVlIG9iamVjdHM/ICovCj4gKwo+ICsvKiBjcmVhdGUgYSBi YXNpYyByZXNvdXJjZSAqLwo+ICtpbnQgdmlydGlvX2dwdV9jbWRfY3JlYXRlX3Jlc291cmNlKHN0 cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCj4gKwkJCQkgICB1aW50MzJfdCByZXNvdXJj ZV9pZCwKPiArCQkJCSAgIHVpbnQzMl90IGZvcm1hdCwKPiArCQkJCSAgIHVpbnQzMl90IHdpZHRo LAo+ICsJCQkJICAgdWludDMyX3QgaGVpZ2h0KQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9y ZXNvdXJjZV9jcmVhdGVfMmQgKmNtZF9wOwo+ICsJc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlciAq dmJ1ZjsKPiArCj4gKwljbWRfcCA9IHZpcnRpb19ncHVfYWxsb2NfY21kKHZnZGV2LCAmdmJ1Ziwg c2l6ZW9mKCpjbWRfcCkpOwo+ICsJbWVtc2V0KGNtZF9wLCAwLCBzaXplb2YoKmNtZF9wKSk7Cj4g Kwo+ICsJY21kX3AtPmhkci50eXBlID0gY3B1X3RvX2xlMzIoVklSVElPX0dQVV9DTURfUkVTT1VS Q0VfQ1JFQVRFXzJEKTsKPiArCWNtZF9wLT5yZXNvdXJjZV9pZCA9IGNwdV90b19sZTMyKHJlc291 cmNlX2lkKTsKPiArCWNtZF9wLT5mb3JtYXQgPSBjcHVfdG9fbGUzMihmb3JtYXQpOwo+ICsJY21k X3AtPndpZHRoID0gY3B1X3RvX2xlMzIod2lkdGgpOwo+ICsJY21kX3AtPmhlaWdodCA9IGNwdV90 b19sZTMyKGhlaWdodCk7Cj4gKwo+ICsJdmlydGlvX2dwdV9xdWV1ZV9jdHJsX2J1ZmZlcih2Z2Rl diwgdmJ1Zik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCB2aXJ0aW9fZ3B1X2Nt ZF91bnJlZl9yZXNvdXJjZShzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAo+ICsJCQkJ ICB1aW50MzJfdCByZXNvdXJjZV9pZCkKPiArewo+ICsJc3RydWN0IHZpcnRpb19ncHVfcmVzb3Vy Y2VfdW5yZWYgKmNtZF9wOwo+ICsJc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlciAqdmJ1ZjsKPiAr Cj4gKwljbWRfcCA9IHZpcnRpb19ncHVfYWxsb2NfY21kKHZnZGV2LCAmdmJ1Ziwgc2l6ZW9mKCpj bWRfcCkpOwo+ICsJbWVtc2V0KGNtZF9wLCAwLCBzaXplb2YoKmNtZF9wKSk7Cj4gKwo+ICsJY21k X3AtPmhkci50eXBlID0gY3B1X3RvX2xlMzIoVklSVElPX0dQVV9DTURfUkVTT1VSQ0VfVU5SRUYp Owo+ICsJY21kX3AtPnJlc291cmNlX2lkID0gY3B1X3RvX2xlMzIocmVzb3VyY2VfaWQpOwo+ICsK PiArCXZpcnRpb19ncHVfcXVldWVfY3RybF9idWZmZXIodmdkZXYsIHZidWYpOwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK2ludCB2aXJ0aW9fZ3B1X2NtZF9yZXNvdXJjZV9pbnZhbF9iYWNraW5n KHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCj4gKwkJCQkJICB1aW50MzJfdCByZXNv dXJjZV9pZCkKPiArewo+ICsJc3RydWN0IHZpcnRpb19ncHVfcmVzb3VyY2VfZGV0YWNoX2JhY2tp bmcgKmNtZF9wOwo+ICsJc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlciAqdmJ1ZjsKPiArCj4gKwlj bWRfcCA9IHZpcnRpb19ncHVfYWxsb2NfY21kKHZnZGV2LCAmdmJ1Ziwgc2l6ZW9mKCpjbWRfcCkp Owo+ICsJbWVtc2V0KGNtZF9wLCAwLCBzaXplb2YoKmNtZF9wKSk7Cj4gKwo+ICsJY21kX3AtPmhk ci50eXBlID0gY3B1X3RvX2xlMzIoVklSVElPX0dQVV9DTURfUkVTT1VSQ0VfREVUQUNIX0JBQ0tJ TkcpOwo+ICsJY21kX3AtPnJlc291cmNlX2lkID0gY3B1X3RvX2xlMzIocmVzb3VyY2VfaWQpOwo+ ICsKPiArCXZpcnRpb19ncHVfcXVldWVfY3RybF9idWZmZXIodmdkZXYsIHZidWYpOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgdmlydGlvX2dwdV9jbWRfc2V0X3NjYW5vdXQoc3Ry dWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKPiArCQkJICAgICAgIHVpbnQzMl90IHNjYW5v dXRfaWQsIHVpbnQzMl90IHJlc291cmNlX2lkLAo+ICsJCQkgICAgICAgdWludDMyX3Qgd2lkdGgs IHVpbnQzMl90IGhlaWdodCwKPiArCQkJICAgICAgIHVpbnQzMl90IHgsIHVpbnQzMl90IHkpCj4g K3sKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X3NldF9zY2Fub3V0ICpjbWRfcDsKPiArCXN0cnVjdCB2 aXJ0aW9fZ3B1X3ZidWZmZXIgKnZidWY7Cj4gKwo+ICsJY21kX3AgPSB2aXJ0aW9fZ3B1X2FsbG9j X2NtZCh2Z2RldiwgJnZidWYsIHNpemVvZigqY21kX3ApKTsKPiArCW1lbXNldChjbWRfcCwgMCwg c2l6ZW9mKCpjbWRfcCkpOwo+ICsKPiArCWNtZF9wLT5oZHIudHlwZSA9IGNwdV90b19sZTMyKFZJ UlRJT19HUFVfQ01EX1NFVF9TQ0FOT1VUKTsKPiArCWNtZF9wLT5yZXNvdXJjZV9pZCA9IGNwdV90 b19sZTMyKHJlc291cmNlX2lkKTsKPiArCWNtZF9wLT5zY2Fub3V0X2lkID0gY3B1X3RvX2xlMzIo c2Nhbm91dF9pZCk7Cj4gKwljbWRfcC0+ci53aWR0aCA9IGNwdV90b19sZTMyKHdpZHRoKTsKPiAr CWNtZF9wLT5yLmhlaWdodCA9IGNwdV90b19sZTMyKGhlaWdodCk7Cj4gKwljbWRfcC0+ci54ID0g Y3B1X3RvX2xlMzIoeCk7Cj4gKwljbWRfcC0+ci55ID0gY3B1X3RvX2xlMzIoeSk7Cj4gKwo+ICsJ dmlydGlvX2dwdV9xdWV1ZV9jdHJsX2J1ZmZlcih2Z2RldiwgdmJ1Zik7Cj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiAraW50IHZpcnRpb19ncHVfY21kX3Jlc291cmNlX2ZsdXNoKHN0cnVjdCB2aXJ0 aW9fZ3B1X2RldmljZSAqdmdkZXYsCj4gKwkJCQkgIHVpbnQzMl90IHJlc291cmNlX2lkLAo+ICsJ CQkJICB1aW50MzJfdCB4LCB1aW50MzJfdCB5LAo+ICsJCQkJICB1aW50MzJfdCB3aWR0aCwgdWlu dDMyX3QgaGVpZ2h0KQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9yZXNvdXJjZV9mbHVzaCAq Y21kX3A7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmOwo+ICsKPiArCWNtZF9w ID0gdmlydGlvX2dwdV9hbGxvY19jbWQodmdkZXYsICZ2YnVmLCBzaXplb2YoKmNtZF9wKSk7Cj4g KwltZW1zZXQoY21kX3AsIDAsIHNpemVvZigqY21kX3ApKTsKPiArCj4gKwljbWRfcC0+aGRyLnR5 cGUgPSBjcHVfdG9fbGUzMihWSVJUSU9fR1BVX0NNRF9SRVNPVVJDRV9GTFVTSCk7Cj4gKwljbWRf cC0+cmVzb3VyY2VfaWQgPSBjcHVfdG9fbGUzMihyZXNvdXJjZV9pZCk7Cj4gKwljbWRfcC0+ci53 aWR0aCA9IGNwdV90b19sZTMyKHdpZHRoKTsKPiArCWNtZF9wLT5yLmhlaWdodCA9IGNwdV90b19s ZTMyKGhlaWdodCk7Cj4gKwljbWRfcC0+ci54ID0gY3B1X3RvX2xlMzIoeCk7Cj4gKwljbWRfcC0+ ci55ID0gY3B1X3RvX2xlMzIoeSk7Cj4gKwo+ICsJdmlydGlvX2dwdV9xdWV1ZV9jdHJsX2J1ZmZl cih2Z2RldiwgdmJ1Zik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCB2aXJ0aW9f Z3B1X2NtZF90cmFuc2Zlcl90b19ob3N0XzJkKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdk ZXYsCj4gKwkJCQkgICAgICAgdWludDMyX3QgcmVzb3VyY2VfaWQsIHVpbnQ2NF90IG9mZnNldCwK PiArCQkJCSAgICAgICBfX2xlMzIgd2lkdGgsIF9fbGUzMiBoZWlnaHQsCj4gKwkJCQkgICAgICAg X19sZTMyIHgsIF9fbGUzMiB5LAo+ICsJCQkJICAgICAgIHN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNl ICoqZmVuY2UpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X3RyYW5zZmVyX3RvX2hvc3RfMmQg KmNtZF9wOwo+ICsJc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlciAqdmJ1ZjsKPiArCj4gKwljbWRf cCA9IHZpcnRpb19ncHVfYWxsb2NfY21kKHZnZGV2LCAmdmJ1Ziwgc2l6ZW9mKCpjbWRfcCkpOwo+ ICsJbWVtc2V0KGNtZF9wLCAwLCBzaXplb2YoKmNtZF9wKSk7Cj4gKwo+ICsJY21kX3AtPmhkci50 eXBlID0gY3B1X3RvX2xlMzIoVklSVElPX0dQVV9DTURfVFJBTlNGRVJfVE9fSE9TVF8yRCk7Cj4g KwljbWRfcC0+cmVzb3VyY2VfaWQgPSBjcHVfdG9fbGUzMihyZXNvdXJjZV9pZCk7Cj4gKwljbWRf cC0+b2Zmc2V0ID0gY3B1X3RvX2xlNjQob2Zmc2V0KTsKPiArCWNtZF9wLT5yLndpZHRoID0gd2lk dGg7Cj4gKwljbWRfcC0+ci5oZWlnaHQgPSBoZWlnaHQ7Cj4gKwljbWRfcC0+ci54ID0geDsKPiAr CWNtZF9wLT5yLnkgPSB5Owo+ICsKPiArCWlmIChmZW5jZSkKPiArCQl2aXJ0aW9fZ3B1X2ZlbmNl X2VtaXQodmdkZXYsICZjbWRfcC0+aGRyLCBmZW5jZSk7Cj4gKwl2aXJ0aW9fZ3B1X3F1ZXVlX2N0 cmxfYnVmZmVyKHZnZGV2LCB2YnVmKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludAo+ICt2aXJ0aW9fZ3B1X2NtZF9yZXNvdXJjZV9hdHRhY2hfYmFja2luZyhzdHJ1Y3Qg dmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAo+ICsJCQkJICAgICAgIHVpbnQzMl90IHJlc291cmNl X2lkLAo+ICsJCQkJICAgICAgIHN0cnVjdCB2aXJ0aW9fZ3B1X21lbV9lbnRyeSAqZW50cywKPiAr CQkJCSAgICAgICB1aW50MzJfdCBuZW50cywKPiArCQkJCSAgICAgICBzdHJ1Y3QgdmlydGlvX2dw dV9mZW5jZSAqKmZlbmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9yZXNvdXJjZV9hdHRh Y2hfYmFja2luZyAqY21kX3A7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmOwo+ ICsKPiArCWNtZF9wID0gdmlydGlvX2dwdV9hbGxvY19jbWQodmdkZXYsICZ2YnVmLCBzaXplb2Yo KmNtZF9wKSk7Cj4gKwltZW1zZXQoY21kX3AsIDAsIHNpemVvZigqY21kX3ApKTsKPiArCj4gKwlj bWRfcC0+aGRyLnR5cGUgPSBjcHVfdG9fbGUzMihWSVJUSU9fR1BVX0NNRF9SRVNPVVJDRV9BVFRB Q0hfQkFDS0lORyk7Cj4gKwljbWRfcC0+cmVzb3VyY2VfaWQgPSBjcHVfdG9fbGUzMihyZXNvdXJj ZV9pZCk7Cj4gKwljbWRfcC0+bnJfZW50cmllcyA9IGNwdV90b19sZTMyKG5lbnRzKTsKPiArCj4g Kwl2YnVmLT5kYXRhX2J1ZiA9IGVudHM7Cj4gKwl2YnVmLT5kYXRhX3NpemUgPSBzaXplb2YoKmVu dHMpICogbmVudHM7Cj4gKwo+ICsJaWYgKGZlbmNlKQo+ICsJCXZpcnRpb19ncHVfZmVuY2VfZW1p dCh2Z2RldiwgJmNtZF9wLT5oZHIsIGZlbmNlKTsKPiArCXZpcnRpb19ncHVfcXVldWVfY3RybF9i dWZmZXIodmdkZXYsIHZidWYpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCB2aXJ0aW9fZ3B1X2NtZF9nZXRfZGlzcGxheV9pbmZvX2NiKHN0cnVjdCB2aXJ0aW9fZ3B1 X2RldmljZSAqdmdkZXYsCj4gKwkJCQkJICAgICAgIHN0cnVjdCB2aXJ0aW9fZ3B1X3ZidWZmZXIg KnZidWYpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X3Jlc3BfZGlzcGxheV9pbmZvICpyZXNw ID0KPiArCQkoc3RydWN0IHZpcnRpb19ncHVfcmVzcF9kaXNwbGF5X2luZm8gKil2YnVmLT5yZXNw X2J1ZjsKPiArCWludCBpOwo+ICsKPiArCXNwaW5fbG9jaygmdmdkZXYtPmRpc3BsYXlfaW5mb19s b2NrKTsKPiArCWZvciAoaSA9IDA7IGkgPCB2Z2Rldi0+bnVtX3NjYW5vdXRzOyBpKyspIHsKPiAr CQl2Z2Rldi0+b3V0cHV0c1tpXS5pbmZvID0gcmVzcC0+cG1vZGVzW2ldOwo+ICsJCWlmIChyZXNw LT5wbW9kZXNbaV0uZW5hYmxlZCkgewo+ICsJCQlEUk1fREVCVUcoIm91dHB1dCAlZDogJWR4JWQr JWQrJWQiLCBpLAo+ICsJCQkJICBsZTMyX3RvX2NwdShyZXNwLT5wbW9kZXNbaV0uci53aWR0aCks Cj4gKwkJCQkgIGxlMzJfdG9fY3B1KHJlc3AtPnBtb2Rlc1tpXS5yLmhlaWdodCksCj4gKwkJCQkg IGxlMzJfdG9fY3B1KHJlc3AtPnBtb2Rlc1tpXS5yLngpLAo+ICsJCQkJICBsZTMyX3RvX2NwdShy ZXNwLT5wbW9kZXNbaV0uci55KSk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJRFJNX0RFQlVHKCJvdXRw dXQgJWQ6IGRpc2FibGVkIiwgaSk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXNwaW5fdW5sb2NrKCZ2 Z2Rldi0+ZGlzcGxheV9pbmZvX2xvY2spOwo+ICsJd2FrZV91cCgmdmdkZXYtPnJlc3Bfd3EpOwo+ ICsKPiArCWlmICghZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KHZnZGV2LT5kZGV2KSkgewo+ICsJ CWRybV9rbXNfaGVscGVyX2hvdHBsdWdfZXZlbnQodmdkZXYtPmRkZXYpOwo+ICsJfQoKRG9uJ3Qg cHV0IHt9IGFyb3VuZCBzaW5nbGUtc3RhdGVtZW50cy4KCj4gK30KPiArCj4gK2ludCB2aXJ0aW9f Z3B1X2NtZF9nZXRfZGlzcGxheV9pbmZvKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYp Cj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fZ3B1X2N0cmxfaGRyICpjbWRfcDsKPiArCXN0cnVjdCB2 aXJ0aW9fZ3B1X3ZidWZmZXIgKnZidWY7Cj4gKwo+ICsJY21kX3AgPSB2aXJ0aW9fZ3B1X2FsbG9j X2NtZF9yZXNwCj4gKwkJKHZnZGV2LCAmdmlydGlvX2dwdV9jbWRfZ2V0X2Rpc3BsYXlfaW5mb19j YiwgJnZidWYsCj4gKwkJIHNpemVvZigqY21kX3ApLCBzaXplb2Yoc3RydWN0IHZpcnRpb19ncHVf cmVzcF9kaXNwbGF5X2luZm8pKTsKClBscyBzcGxpdCBpdCBsaWtlIHRoaXM6CisJY21kX3AgPSB2 aXJ0aW9fZ3B1X2FsbG9jX2NtZF9yZXNwKHZnZGV2LAorCQkJCQkgICZ2aXJ0aW9fZ3B1X2NtZF9n ZXRfZGlzcGxheV9pbmZvX2NiLAorCQkJCQkgICZ2YnVmLAorCQkJIAkJICBzaXplb2YoKmNtZF9w KSwKKwkJCQkJICBzaXplb2Yoc3RydWN0IHZpcnRpb19ncHVfcmVzcF9kaXNwbGF5X2luZm8pKTsK CmkuZS4gKCBvbiBzYW1lIGxpbmUgYXMgZnVuY3Rpb24gbmFtZS4KCgo+ICsJbWVtc2V0KGNtZF9w LCAwLCBzaXplb2YoKmNtZF9wKSk7Cj4gKwo+ICsJY21kX3AtPnR5cGUgPSBjcHVfdG9fbGUzMihW SVJUSU9fR1BVX0NNRF9HRVRfRElTUExBWV9JTkZPKTsKPiArCXZpcnRpb19ncHVfcXVldWVfY3Ry bF9idWZmZXIodmdkZXYsIHZidWYpOwo+ICsJcmV0dXJuIDA7Cj4gK30KCm1ha2UgdGhpcyBmdW5j dGlvbiB2b2lkPwoKPiArCj4gK2ludCB2aXJ0aW9fZ3B1X29iamVjdF9hdHRhY2goc3RydWN0IHZp cnRpb19ncHVfZGV2aWNlICp2Z2RldiwKPiArCQkJICAgICBzdHJ1Y3QgdmlydGlvX2dwdV9vYmpl Y3QgKm9iaiwKPiArCQkJICAgICB1aW50MzJfdCByZXNvdXJjZV9pZCwKPiArCQkJICAgICBzdHJ1 Y3QgdmlydGlvX2dwdV9mZW5jZSAqKmZlbmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9t ZW1fZW50cnkgKmVudHM7Cj4gKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwo+ICsJaW50IHNpOwo+ ICsKPiArCWlmICghb2JqLT5wYWdlcykgewo+ICsJCWludCByZXQ7Cj4gKwkJcmV0ID0gdmlydGlv X2dwdV9vYmplY3RfZ2V0X3NnX3RhYmxlKHZnZGV2LCBvYmopOwo+ICsJCWlmIChyZXQpCj4gKwkJ CXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyogZ2V0cyBmcmVlZCB3aGVuIHRoZSByaW5nIGhh cyBjb25zdW1lZCBpdCAqLwo+ICsJZW50cyA9IGttYWxsb2NfYXJyYXkob2JqLT5wYWdlcy0+bmVu dHMsCj4gKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fZ3B1X21lbV9lbnRyeSksCj4gKwkJ CSAgICAgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWVudHMpIHsKPiArCQlEUk1fRVJST1IoImZhaWxl ZCB0byBhbGxvY2F0ZSBlbnQgbGlzdFxuIik7Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4g Kwo+ICsJZm9yX2VhY2hfc2cob2JqLT5wYWdlcy0+c2dsLCBzZywgb2JqLT5wYWdlcy0+bmVudHMs IHNpKSB7Cj4gKwkJZW50c1tzaV0uYWRkciA9IGNwdV90b19sZTY0KHNnX3BoeXMoc2cpKTsKPiAr CQllbnRzW3NpXS5sZW5ndGggPSBjcHVfdG9fbGUzMihzZy0+bGVuZ3RoKTsKPiArCQllbnRzW3Np XS5wYWRkaW5nID0gMDsKPiArCX0KPiArCj4gKwl2aXJ0aW9fZ3B1X2NtZF9yZXNvdXJjZV9hdHRh Y2hfYmFja2luZyh2Z2RldiwgcmVzb3VyY2VfaWQsCj4gKwkJCQkJICAgICAgIGVudHMsIG9iai0+ cGFnZXMtPm5lbnRzLAo+ICsJCQkJCSAgICAgICBmZW5jZSk7Cj4gKwlvYmotPmh3X3Jlc19oYW5k bGUgPSByZXNvdXJjZV9pZDsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIHZpcnRpb19n cHVfY3Vyc29yX3Bpbmcoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKPiArCQkJICAg IHN0cnVjdCB2aXJ0aW9fZ3B1X291dHB1dCAqb3V0cHV0KQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlv X2dwdV92YnVmZmVyICp2YnVmOwo+ICsJc3RydWN0IHZpcnRpb19ncHVfdXBkYXRlX2N1cnNvciAq Y3VyX3A7Cj4gKwo+ICsJb3V0cHV0LT5jdXJzb3IucG9zLnNjYW5vdXRfaWQgPSBjcHVfdG9fbGUz MihvdXRwdXQtPmluZGV4KTsKPiArCWN1cl9wID0gdmlydGlvX2dwdV9hbGxvY19jdXJzb3Iodmdk ZXYsICZ2YnVmKTsKPiArCW1lbWNweShjdXJfcCwgJm91dHB1dC0+Y3Vyc29yLCBzaXplb2Yob3V0 cHV0LT5jdXJzb3IpKTsKPiArCXZpcnRpb19ncHVfcXVldWVfY3Vyc29yKHZnZGV2LCB2YnVmKTsK PiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jIGIv ZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYwo+IGluZGV4IGU4OTRlYjIuLmEzMTY3 ZmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYwo+ICsr KyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmMKPiBAQCAtNTEwLDcgKzUxMCw3 IEBAIHN0YXRpYyBpbnQgdmlydGlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwK PiAgCQlnb3RvIGVycl9lbmFibGVfZGV2aWNlOwo+ICAKPiAgCXJjID0gcGNpX3JlcXVlc3RfcmVn aW9ucyhwY2lfZGV2LCAidmlydGlvLXBjaSIpOwo+IC0JaWYgKHJjKQo+ICsJaWYgKHJjICYmICgo cGNpX2Rldi0+Y2xhc3MgPj4gOCkgIT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBKSkKPiAgCQlnb3Rv IGVycl9yZXF1ZXN0X3JlZ2lvbnM7Cj4gIAo+ICAJaWYgKGZvcmNlX2xlZ2FjeSkgewo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKPiBpbmRleCBl OTI4NjI1Li5hMTA2N2M0IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAo+ICsrKyBi L2luY2x1ZGUvZHJtL2RybVAuaAo+IEBAIC03OTksNiArNzk5LDcgQEAgc3RydWN0IGRybV9kZXZp Y2Ugewo+ICAjZW5kaWYKPiAgCj4gIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybWRl djsgLyoqPCBQbGF0Zm9ybSBkZXZpY2Ugc3RydXR1cmUgKi8KPiArCXN0cnVjdCB2aXJ0aW9fZGV2 aWNlICp2aXJ0ZGV2Owo+ICAKPiAgCXN0cnVjdCBkcm1fc2dfbWVtICpzZzsJLyoqPCBTY2F0dGVy IGdhdGhlciBtZW1vcnkgKi8KPiAgCXVuc2lnbmVkIGludCBudW1fY3J0Y3M7ICAgICAgICAgICAg ICAgICAgLyoqPCBOdW1iZXIgb2YgQ1JUQ3Mgb24gdGhpcyBkZXZpY2UgKi8KPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS91YXBpL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvdWFwaS9saW51eC9LYnVpbGQK PiBpbmRleCA2OGNlYjk3Li45NzA3ZTVkIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51 eC9LYnVpbGQKPiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkCj4gQEAgLTQyOSw2ICs0 MjksNyBAQCBoZWFkZXIteSArPSB2aXJ0aW9fYmFsbG9vbi5oCj4gIGhlYWRlci15ICs9IHZpcnRp b19ibGsuaAo+ICBoZWFkZXIteSArPSB2aXJ0aW9fY29uZmlnLmgKPiAgaGVhZGVyLXkgKz0gdmly dGlvX2NvbnNvbGUuaAo+ICtoZWFkZXIteSArPSB2aXJ0aW9fZ3B1LmgKPiAgaGVhZGVyLXkgKz0g dmlydGlvX2lkcy5oCj4gIGhlYWRlci15ICs9IHZpcnRpb19uZXQuaAo+ICBoZWFkZXIteSArPSB2 aXJ0aW9fcGNpLmgKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19ncHUu aCBiL2luY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9fZ3B1LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAuLmExYmRhNTIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVk ZS91YXBpL2xpbnV4L3ZpcnRpb19ncHUuaAo+IEBAIC0wLDAgKzEsMjAzIEBACj4gKy8qCj4gKyAq IFZpcnRpbyBHUFUgRGV2aWNlCj4gKyAqCj4gKyAqIENvcHlyaWdodCBSZWQgSGF0LCBJbmMuIDIw MTMtMjAxNAo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKiAgICAgRGF2ZSBBaXJsaWUgPGFpcmxp ZWRAcmVkaGF0LmNvbT4KPiArICogICAgIEdlcmQgSG9mZm1hbm4gPGtyYXhlbEByZWRoYXQuY29t Pgo+ICsgKgo+ICsgKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1 c2UgdGhlIGRlZmluaXRpb25zCj4gKyAqIHRvIGltcGxlbWVudCBjb21wYXRpYmxlIGRyaXZlcnMv c2VydmVyczoKPiArICoKPiArICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4gKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ICsgKiBhcmUg bWV0Ogo+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4gKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKPiArICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KPiArICogMy4gTmVpdGhlciB0aGUg bmFtZSBvZiBJQk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCj4gKyAqICAgIG1h eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZQo+ICsgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4KPiArICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP TERFUlMgQU5EIENPTlRSSUJVVE9SUwo+ICsgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCj4gKyAqIExJTUlURUQgVE8s IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCj4g KyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIElCTSBPUgo+ICsgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKPiArICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAo+ICsgKiBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCj4gKyAq IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS IENBVVNFRCBBTkQKPiArICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCj4gKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAo+ICsgKiBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YKPiArICogU1VDSCBEQU1BR0UuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBWSVJUSU9fR1BVX0hX X0gKPiArI2RlZmluZSBWSVJUSU9fR1BVX0hXX0gKPiArCj4gK2VudW0gdmlydGlvX2dwdV9jdHJs X3R5cGUgewo+ICsJVklSVElPX0dQVV9VTkRFRklORUQgPSAwLAo+ICsKPiArCS8qIDJkIGNvbW1h bmRzICovCj4gKwlWSVJUSU9fR1BVX0NNRF9HRVRfRElTUExBWV9JTkZPID0gMHgwMTAwLAo+ICsJ VklSVElPX0dQVV9DTURfUkVTT1VSQ0VfQ1JFQVRFXzJELAo+ICsJVklSVElPX0dQVV9DTURfUkVT T1VSQ0VfVU5SRUYsCj4gKwlWSVJUSU9fR1BVX0NNRF9TRVRfU0NBTk9VVCwKPiArCVZJUlRJT19H UFVfQ01EX1JFU09VUkNFX0ZMVVNILAo+ICsJVklSVElPX0dQVV9DTURfVFJBTlNGRVJfVE9fSE9T VF8yRCwKPiArCVZJUlRJT19HUFVfQ01EX1JFU09VUkNFX0FUVEFDSF9CQUNLSU5HLAo+ICsJVklS VElPX0dQVV9DTURfUkVTT1VSQ0VfREVUQUNIX0JBQ0tJTkcsCj4gKwo+ICsJLyogY3Vyc29yIGNv bW1hbmRzICovCj4gKwlWSVJUSU9fR1BVX0NNRF9VUERBVEVfQ1VSU09SID0gMHgwMzAwLAo+ICsJ VklSVElPX0dQVV9DTURfTU9WRV9DVVJTT1IsCj4gKwo+ICsJLyogc3VjY2VzcyByZXNwb25zZXMg Ki8KPiArCVZJUlRJT19HUFVfUkVTUF9PS19OT0RBVEEgPSAweDExMDAsCj4gKwlWSVJUSU9fR1BV X1JFU1BfT0tfRElTUExBWV9JTkZPLAo+ICsKPiArCS8qIGVycm9yIHJlc3BvbnNlcyAqLwo+ICsJ VklSVElPX0dQVV9SRVNQX0VSUl9VTlNQRUMgPSAweDEyMDAsCj4gKwlWSVJUSU9fR1BVX1JFU1Bf RVJSX09VVF9PRl9NRU1PUlksCj4gKwlWSVJUSU9fR1BVX1JFU1BfRVJSX0lOVkFMSURfU0NBTk9V VF9JRCwKPiArCVZJUlRJT19HUFVfUkVTUF9FUlJfSU5WQUxJRF9SRVNPVVJDRV9JRCwKPiArCVZJ UlRJT19HUFVfUkVTUF9FUlJfSU5WQUxJRF9DT05URVhUX0lELAo+ICsJVklSVElPX0dQVV9SRVNQ X0VSUl9JTlZBTElEX1BBUkFNRVRFUiwKPiArfTsKPiArCj4gKyNkZWZpbmUgVklSVElPX0dQVV9G TEFHX0ZFTkNFICgxIDw8IDApCj4gKwo+ICtzdHJ1Y3QgdmlydGlvX2dwdV9jdHJsX2hkciB7Cj4g KwlfX2xlMzIgdHlwZTsKPiArCV9fbGUzMiBmbGFnczsKPiArCV9fbGU2NCBmZW5jZV9pZDsKPiAr CV9fbGUzMiBjdHhfaWQ7Cj4gKwlfX2xlMzIgcGFkZGluZzsKPiArfTsKPiArCj4gKy8qIGRhdGEg cGFzc2VkIGluIHRoZSBjdXJzb3IgdnEgKi8KPiArCj4gK3N0cnVjdCB2aXJ0aW9fZ3B1X2N1cnNv cl9wb3Mgewo+ICsJX19sZTMyIHNjYW5vdXRfaWQ7Cj4gKwlfX2xlMzIgeCwgeTsKClByZWZlciAK CV9fbGUzMiB4OwoJX19sZTMyIHk7CgpzbyBzdHJ1Y3Qgc2l6ZSBpcyBvYnZpb3VzLgoKPiArCV9f bGUzMiBwYWRkaW5nOwo+ICt9Owo+ICsKPiArLyogVklSVElPX0dQVV9DTURfVVBEQVRFX0NVUlNP UiwgVklSVElPX0dQVV9DTURfTU9WRV9DVVJTT1IgKi8KPiArc3RydWN0IHZpcnRpb19ncHVfdXBk YXRlX2N1cnNvciB7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9jdHJsX2hkciBoZHI7Cj4gKwlzdHJ1 Y3QgdmlydGlvX2dwdV9jdXJzb3JfcG9zIHBvczsgIC8qIHVwZGF0ZSAmIG1vdmUgKi8KPiArCV9f bGUzMiByZXNvdXJjZV9pZDsgICAgICAgICAgIC8qIHVwZGF0ZSBvbmx5ICovCj4gKwlfX2xlMzIg aG90X3g7ICAgICAgICAgICAgICAgICAvKiB1cGRhdGUgb25seSAqLwo+ICsJX19sZTMyIGhvdF95 OyAgICAgICAgICAgICAgICAgLyogdXBkYXRlIG9ubHkgKi8KPiArCV9fbGUzMiBwYWRkaW5nOwo+ ICt9Owo+ICsKPiArLyogZGF0YSBwYXNzZWQgaW4gdGhlIGNvbnRyb2wgdnEsIDJkIHJlbGF0ZWQg Ki8KPiArCgpyZWZlcnMgIHRvIHN0cnVjdCB2aXJ0aW9fZ3B1X3JlY3Qgb25seT8gb3IgYWxsCnN0 cnVjdHMgYmVsb3c/Cj4gK3N0cnVjdCB2aXJ0aW9fZ3B1X3JlY3Qgewo+ICsJX19sZTMyIHgsIHk7 Cj4gKwlfX2xlMzIgd2lkdGg7Cj4gKwlfX2xlMzIgaGVpZ2h0Owo+ICt9Owo+ICsKPiArLyogVklS VElPX0dQVV9DTURfUkVTT1VSQ0VfVU5SRUYgKi8KPiArc3RydWN0IHZpcnRpb19ncHVfcmVzb3Vy Y2VfdW5yZWYgewo+ICsJc3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgaGRyOwo+ICsJX19sZTMy IHJlc291cmNlX2lkOwo+ICsJX19sZTMyIHBhZGRpbmc7Cj4gK307Cj4gKwo+ICsvKiBWSVJUSU9f R1BVX0NNRF9SRVNPVVJDRV9DUkVBVEVfMkQ6IGNyZWF0ZSBhIDJkIHJlc291cmNlIHdpdGggYSBm b3JtYXQgKi8KPiArc3RydWN0IHZpcnRpb19ncHVfcmVzb3VyY2VfY3JlYXRlXzJkIHsKPiArCXN0 cnVjdCB2aXJ0aW9fZ3B1X2N0cmxfaGRyIGhkcjsKPiArCV9fbGUzMiByZXNvdXJjZV9pZDsKPiAr CV9fbGUzMiBmb3JtYXQ7Cj4gKwlfX2xlMzIgd2lkdGg7Cj4gKwlfX2xlMzIgaGVpZ2h0Owo+ICt9 Owo+ICsKPiArLyogVklSVElPX0dQVV9DTURfU0VUX1NDQU5PVVQgKi8KPiArc3RydWN0IHZpcnRp b19ncHVfc2V0X3NjYW5vdXQgewo+ICsJc3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgaGRyOwo+ ICsJc3RydWN0IHZpcnRpb19ncHVfcmVjdCByOwo+ICsJX19sZTMyIHNjYW5vdXRfaWQ7Cj4gKwlf X2xlMzIgcmVzb3VyY2VfaWQ7Cj4gK307Cj4gKwo+ICsvKiBWSVJUSU9fR1BVX0NNRF9SRVNPVVJD RV9GTFVTSCAqLwo+ICtzdHJ1Y3QgdmlydGlvX2dwdV9yZXNvdXJjZV9mbHVzaCB7Cj4gKwlzdHJ1 Y3QgdmlydGlvX2dwdV9jdHJsX2hkciBoZHI7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9yZWN0IHI7 Cj4gKwlfX2xlMzIgcmVzb3VyY2VfaWQ7Cj4gKwlfX2xlMzIgcGFkZGluZzsKPiArfTsKPiArCj4g Ky8qIFZJUlRJT19HUFVfQ01EX1RSQU5TRkVSX1RPX0hPU1RfMkQ6IHNpbXBsZSB0cmFuc2ZlciB0 b19ob3N0ICovCj4gK3N0cnVjdCB2aXJ0aW9fZ3B1X3RyYW5zZmVyX3RvX2hvc3RfMmQgewo+ICsJ c3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgaGRyOwo+ICsJc3RydWN0IHZpcnRpb19ncHVfcmVj dCByOwo+ICsJX19sZTY0IG9mZnNldDsKPiArCV9fbGUzMiByZXNvdXJjZV9pZDsKPiArCV9fbGUz MiBwYWRkaW5nOwo+ICt9Owo+ICsKPiArc3RydWN0IHZpcnRpb19ncHVfbWVtX2VudHJ5IHsKPiAr CV9fbGU2NCBhZGRyOwo+ICsJX19sZTMyIGxlbmd0aDsKPiArCV9fbGUzMiBwYWRkaW5nOwo+ICt9 Owo+ICsKPiArLyogVklSVElPX0dQVV9DTURfUkVTT1VSQ0VfQVRUQUNIX0JBQ0tJTkcgKi8KPiAr c3RydWN0IHZpcnRpb19ncHVfcmVzb3VyY2VfYXR0YWNoX2JhY2tpbmcgewo+ICsJc3RydWN0IHZp cnRpb19ncHVfY3RybF9oZHIgaGRyOwo+ICsJX19sZTMyIHJlc291cmNlX2lkOwo+ICsJX19sZTMy IG5yX2VudHJpZXM7Cj4gK307Cj4gKwo+ICsvKiBWSVJUSU9fR1BVX0NNRF9SRVNPVVJDRV9ERVRB Q0hfQkFDS0lORyAqLwo+ICtzdHJ1Y3QgdmlydGlvX2dwdV9yZXNvdXJjZV9kZXRhY2hfYmFja2lu ZyB7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9jdHJsX2hkciBoZHI7Cj4gKwlfX2xlMzIgcmVzb3Vy Y2VfaWQ7Cj4gKwlfX2xlMzIgcGFkZGluZzsKPiArfTsKPiArCj4gKy8qIFZJUlRJT19HUFVfUkVT UF9PS19ESVNQTEFZX0lORk8gKi8KPiArI2RlZmluZSBWSVJUSU9fR1BVX01BWF9TQ0FOT1VUUyAx Ngo+ICtzdHJ1Y3QgdmlydGlvX2dwdV9yZXNwX2Rpc3BsYXlfaW5mbyB7Cj4gKwlzdHJ1Y3Qgdmly dGlvX2dwdV9jdHJsX2hkciBoZHI7Cj4gKwlzdHJ1Y3QgdmlydGlvX2dwdV9kaXNwbGF5X29uZSB7 Cj4gKwkJc3RydWN0IHZpcnRpb19ncHVfcmVjdCByOwo+ICsJCV9fbGUzMiBlbmFibGVkOwo+ICsJ CV9fbGUzMiBmbGFnczsKPiArCX0gcG1vZGVzW1ZJUlRJT19HUFVfTUFYX1NDQU5PVVRTXTsKPiAr fTsKPiArCj4gKyNkZWZpbmUgVklSVElPX0dQVV9FVkVOVF9ESVNQTEFZICgxIDw8IDApCj4gKwo+ ICtzdHJ1Y3QgdmlydGlvX2dwdV9jb25maWcgewo+ICsJX191MzIgZXZlbnRzX3JlYWQ7Cj4gKwlf X3UzMiBldmVudHNfY2xlYXI7Cj4gKwlfX3UzMiBudW1fc2Nhbm91dHM7Cj4gKwlfX3UzMiByZXNl cnZlZDsKPiArfTsKPiArCj4gKy8qIHNpbXBsZSBmb3JtYXRzIGZvciBmYmNvbi9YIHVzZSAqLwo+ ICtlbnVtIHZpcnRpb19ncHVfZm9ybWF0cyB7Cj4gKwlWSVJUSU9fR1BVX0ZPUk1BVF9COEc4UjhB OF9VTk9STSAgPSAxLAo+ICsJVklSVElPX0dQVV9GT1JNQVRfQjhHOFI4WDhfVU5PUk0gID0gMiwK PiArCVZJUlRJT19HUFVfRk9STUFUX0E4UjhHOEI4X1VOT1JNICA9IDMsCj4gKwlWSVJUSU9fR1BV X0ZPUk1BVF9YOFI4RzhCOF9VTk9STSAgPSA0LAo+ICsKPiArCVZJUlRJT19HUFVfRk9STUFUX1I4 RzhCOEE4X1VOT1JNICA9IDY3LAo+ICsJVklSVElPX0dQVV9GT1JNQVRfWDhCOEc4UjhfVU5PUk0g ID0gNjgsCj4gKwo+ICsJVklSVElPX0dQVV9GT1JNQVRfQThCOEc4UjhfVU5PUk0gID0gMTIxLAo+ ICsJVklSVElPX0dQVV9GT1JNQVRfUjhHOEI4WDhfVU5PUk0gID0gMTM0LAo+ICsKCmRyb3AgZW1w dHkgbGluZSBoZXJlCgo+ICt9Owo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUv dWFwaS9saW51eC92aXJ0aW9faWRzLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX2lkcy5o Cj4gaW5kZXggMjg0ZmMzYS4uMTRkNzdmNyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3VhcGkvbGlu dXgvdmlydGlvX2lkcy5oCj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19pZHMuaAo+ IEBAIC0zOSw1ICszOSw1IEBACj4gICNkZWZpbmUgVklSVElPX0lEXzlQCQk5IC8qIDlwIHZpcnRp byBjb25zb2xlICovCj4gICNkZWZpbmUgVklSVElPX0lEX1JQUk9DX1NFUklBTCAxMSAvKiB2aXJ0 aW8gcmVtb3RlcHJvYyBzZXJpYWwgbGluayAqLwo+ICAjZGVmaW5lIFZJUlRJT19JRF9DQUlGCSAg ICAgICAxMiAvKiBWaXJ0aW8gY2FpZiAqLwo+IC0KPiArI2RlZmluZSBWSVJUSU9fSURfR1BVICAg ICAgICAgIDE2CgpJIHRoaW5rIHdlIGxpa2UgdGhlIGVtb3R5IGxpbmUgYmVmb3JlIGVuZGlmLgoK PiAgI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fSURTX0ggKi8KPiAtLSAKPiAxLjguMy4xCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==