From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [PATCH 03/14 v4] xen/arm: vpl011: Add pl011 uart emulation in Xen Date: Tue, 6 Jun 2017 16:02:03 -0700 (PDT) Message-ID: References: <1496769929-23355-1-git-send-email-bhupinder.thakur@linaro.org> <1496769929-23355-4-git-send-email-bhupinder.thakur@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dINUa-0000vr-ID for xen-devel@lists.xenproject.org; Tue, 06 Jun 2017 23:02:28 +0000 In-Reply-To: <1496769929-23355-4-git-send-email-bhupinder.thakur@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Bhupinder Thakur Cc: Stefano Stabellini , Wei Liu , Ian Jackson , Julien Grall , xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org T24gVHVlLCA2IEp1biAyMDE3LCBCaHVwaW5kZXIgVGhha3VyIHdyb3RlOgo+IEFkZCBlbXVsYXRp b24gY29kZSB0byBlbXVsYXRlIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHBsMDExIHJlZ2lzdGVycwo+ IGFuZCBwbDAxMSBpbnRlcnJ1cHRzOgo+IAo+ICAgICAtIEVtdWxhdGUgRFIgcmVhZC93cml0ZSBi eSByZWFkaW5nIGFuZCB3cml0aW5nIGZyb20vdG8gdGhlIElOCj4gICAgICAgYW5kIE9VVCByaW5n IGJ1ZmZlcnMgYW5kIHJhaXNpbmcgYW4gZXZlbnQgdG8gdGhlIGJhY2tlbmQgd2hlbgo+ICAgICAg IHRoZXJlIGlzIGRhdGEgaW4gdGhlIE9VVCByaW5nIGJ1ZmZlciBhbmQgaW5qZWN0aW5nIGFuIGlu dGVycnVwdAo+ICAgICAgIHRvIHRoZSBndWVzdCB3aGVuIHRoZXJlIGlzIGRhdGEgaW4gdGhlIElO IHJpbmcgYnVmZmVyCj4gCj4gICAgIC0gT3RoZXIgcmVnaXN0ZXJzIGFyZSByZWxhdGVkIHRvIGlu dGVycnVwdCBtYW5hZ2VtZW50IGFuZAo+ICAgICAgIGVzc2VudGlhbGx5IGNvbnRyb2wgd2hlbiBp bnRlcnJ1cHRzIGFyZSBkZWxpdmVyZWQgdG8gdGhlIGd1ZXN0Cj4gCj4gVGhlIFNCU0EgY29tcGxp YW50IHBsMDExIHVhcnQgaXMgY292ZXJlZCBpbiBBcHBlbmRpeCBCIG9mCj4gaHR0cHM6Ly9zdGF0 aWMuZG9jcy5hcm0uY29tL2RlbjAwMjkvYS9TZXJ2ZXJfQmFzZV9TeXN0ZW1fQXJjaGl0ZWN0dXJl X3YzXzFfQVJNX0RFTl8wMDI5QS5wZGYKPiAKPiBTaWduZWQtb2ZmLWJ5OiBCaHVwaW5kZXIgVGhh a3VyIDxiaHVwaW5kZXIudGhha3VyQGxpbmFyby5vcmc+Cj4gLS0tCj4gQ0M6IGlqCj4gQ0M6IHds Cj4gQ0M6IHNzCj4gQ0M6IGpnCj4gQ0M6IGt3Cj4gCj4gQ2hhbmdlcyBzaW5jZSB2MzoKPiAtIE1v dmVkIHRoZSBjYWxsIHRvIERFRklORV9YRU5fRkxFWF9SSU5HIGZyb20gdnBsMDExLmggdG8gcHVi bGljL2NvbnNvbGUuaC4gVGhpcyBtYWNybyBkZWZpbmVzCj4gICBzdGFuZGFyZCBmdW5jdGlvbnMg dG8gb3BlcmF0ZSBvbiB0aGUgcmluZyBidWZmZXIuCj4gLSBMb2NrIHRha2VuIHdoaWxlIHVwZGF0 aW5nIHRoZSBpbnRlcnJ1cHQgbWFzayBhbmQgY2xlYXIgcmVnaXN0ZXJzIGluIG1taW9fd3JpdGUu Cj4gLSBVc2UgZ2ZuX3QgaW5zdGVhZCBvZiB4ZW5fcGZuX3QuCj4gLSB2Z2ljX2ZyZWVfdmlycSBj YWxsZWQgaWYgdGhlcmUgaXMgYW55IGVycm9yIGluIHZwbDAxMSBpbml0aWFsaXphdGlvbi4KPiAt IG1taW8gaGFuZGxlcnMgZnJlZWQgaWYgdGhlcmUgaXMgYW55IGVycm9yIGluIHZwbDAxMSBpbml0 aWFsaXphdGlvbi4KPiAtIFJlbW92ZWQgdnBsMDExLT5pbml0aWFsaXplZCBmbGFnIHVzYWdlIGFz IHRoZSBzYW1lIGNoZWNrIGNvdWxkIGJlIGRvbmUgCj4gICB1c2luZyB2cGwwMTEtPnJpbmctcmVm Lgo+IC0gVXNlZCByZXR1cm4gaW5zdGVhZCBvZiBicmVhayBpbiB0aGUgc3dpdGNoIGhhbmRsaW5n IG9mIGVtdWxhdGlvbiBvZiBkaWZmZXJlbnQgcGwwMTEgcmVnaXN0ZXJzLgo+IC0gUmVuYW1lZCB2 cGwwMTFfdXBkYXRlX3NwaSgpIHRvIHZwbDAxMV91cGRhdGUoKS4KPiAKPiBDaGFuZ2VzIHNpbmNl IHYyOgo+IC0gVXNlIGdlbmVyaWMgdnJlZ19yZWcqIGZvciByZWFkL3dyaXRlIG9mIHJlZ2lzdGVy cyBlbXVsYXRpbmcgcGwwMTEuCj4gLSBVc2UgZ2VuZXJpYyByaW5nIGJ1ZmZlciBmdW5jdGlvbnMg ZGVmaW5lZCB1c2luZyBERUZJTkVfWEVOX0ZMRVhfUklORy4KPiAtIFJlbmFtZWQgdGhlIFNQSSBp bmplY3Rpb24gZnVuY3Rpb24gdG8gdnBsMDExX3VwZGF0ZV9zcGkoKSB0byByZWZsZWN0IGxldmVs IAo+ICAgdHJpZ2dlcmVkIG5hdHVyZSBvZiBwbDAxMSBpbnRlcnJ1cHRzLgo+IC0gVGhlIHBsMDEx IHJlZ2lzdGVyIGFjY2VzcyBhZGRyZXNzIHNob3VsZCBhbHdheXMgYmUgdGhlIGJhc2UgYWRkcmVz cyBvZiB0aGUKPiAgIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgYXMgcGVyIHNlY3Rpb24gQiBvZiB0 aGUgU0JTQSBkb2N1bWVudC4gRm9yIHRoaXMgcmVhc29uLAo+ICAgdGhlIHJlZ2lzdGVyIHJhbmdl IGFkZHJlc3MgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLgo+IAo+IENoYW5nZXMgc2luY2UgdjE6Cj4g LSBSZW1vdmVkIHRoZSBvcHRpbWl6dGlvbiByZWxhdGVkIHRvIHNlbmRpaW5nIGV2ZW50cyB0byB4 ZW5jb25zb2xlIAo+IC0gVXNlIGxvY2FsIHZhcmlhYmxlcyBhcyByaW5nIGJ1ZmZlciBpbmRpY2Vz IHdoaWxlIHVzaW5nIHRoZSByaW5nIGJ1ZmZlcgo+IAo+ICB0b29scy9jb25zb2xlL2RhZW1vbi9p by5jICAgICAgICB8ICAgMiArLQo+ICB4ZW4vYXJjaC9hcm0vS2NvbmZpZyAgICAgICAgICAgICB8 ICAgNSArCj4gIHhlbi9hcmNoL2FybS9NYWtlZmlsZSAgICAgICAgICAgIHwgICAxICsKPiAgeGVu L2FyY2gvYXJtL3ZwbDAxMS5jICAgICAgICAgICAgfCA0MTggKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4gIHhlbi9pbmNsdWRlL2FzbS1hcm0vZG9tYWluLmggICAgIHwg ICA2ICsKPiAgeGVuL2luY2x1ZGUvYXNtLWFybS9wbDAxMS11YXJ0LmggfCAgIDIgKwo+ICB4ZW4v aW5jbHVkZS9hc20tYXJtL3ZwbDAxMS5oICAgICB8ICA3NCArKysrKysrCj4gIHhlbi9pbmNsdWRl L3B1YmxpYy9hcmNoLWFybS5oICAgIHwgICA2ICsKPiAgeGVuL2luY2x1ZGUvcHVibGljL2lvL2Nv bnNvbGUuaCAgfCAgIDQgKwo+ICA5IGZpbGVzIGNoYW5nZWQsIDUxNyBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC9hcm0vdnBsMDExLmMK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL2FzbS1hcm0vdnBsMDExLmgKPiAKPiBk aWZmIC0tZ2l0IGEvdG9vbHMvY29uc29sZS9kYWVtb24vaW8uYyBiL3Rvb2xzL2NvbnNvbGUvZGFl bW9uL2lvLmMKPiBpbmRleCA3ZTZhODg2Li45NDdmMTNhIDEwMDY0NAo+IC0tLSBhL3Rvb2xzL2Nv bnNvbGUvZGFlbW9uL2lvLmMKPiArKysgYi90b29scy9jb25zb2xlL2RhZW1vbi9pby5jCj4gQEAg LTIxLDYgKzIxLDcgQEAKPiAgCj4gICNpbmNsdWRlICJ1dGlscy5oIgo+ICAjaW5jbHVkZSAiaW8u aCIKPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICAjaW5jbHVkZSA8eGVuZXZ0Y2huLmg+Cj4gICNp bmNsdWRlIDx4ZW5nbnR0YWIuaD4KPiAgI2luY2x1ZGUgPHhlbnN0b3JlLmg+Cj4gQEAgLTI5LDcg KzMwLDYgQEAKPiAgCj4gICNpbmNsdWRlIDxzdGRsaWIuaD4KPiAgI2luY2x1ZGUgPGVycm5vLmg+ Cj4gLSNpbmNsdWRlIDxzdHJpbmcuaD4KPiAgI2luY2x1ZGUgPHBvbGwuaD4KPiAgI2luY2x1ZGUg PGZjbnRsLmg+Cj4gICNpbmNsdWRlIDx1bmlzdGQuaD4KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gv YXJtL0tjb25maWcgYi94ZW4vYXJjaC9hcm0vS2NvbmZpZwo+IGluZGV4IGQ0NmI5OGMuLmMxYTBl N2YgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gvYXJtL0tjb25maWcKPiArKysgYi94ZW4vYXJjaC9h cm0vS2NvbmZpZwo+IEBAIC01MCw2ICs1MCwxMSBAQCBjb25maWcgSEFTX0lUUwo+ICAgICAgICAg IHByb21wdCAiR0lDdjMgSVRTIE1TSSBjb250cm9sbGVyIHN1cHBvcnQiIGlmIEVYUEVSVCA9ICJ5 Igo+ICAgICAgICAgIGRlcGVuZHMgb24gSEFTX0dJQ1YzCj4gIAo+ICtjb25maWcgVlBMMDExX0NP TlNPTEUKPiArCWJvb2wgIkVtdWxhdGVkIHBsMDExIGNvbnNvbGUgc3VwcG9ydCIKPiArCWRlZmF1 bHQgeQo+ICsJLS0taGVscC0tLQo+ICsJICBBbGxvd3MgYSBndWVzdCB0byB1c2UgcGwwMTEgVUFS VCBhcyBhIGNvbnNvbGUKPiAgZW5kbWVudQo+ICAKPiAgbWVudSAiQVJNIGVycmF0YSB3b3JrYXJv dW5kIHZpYSB0aGUgYWx0ZXJuYXRpdmUgZnJhbWV3b3JrIgo+IGRpZmYgLS1naXQgYS94ZW4vYXJj aC9hcm0vTWFrZWZpbGUgYi94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKPiBpbmRleCA0OWUxZmIyLi4x NWVmYzEzIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS9NYWtlZmlsZQo+ICsrKyBiL3hlbi9h cmNoL2FybS9NYWtlZmlsZQo+IEBAIC01Miw2ICs1Miw3IEBAIG9iai15ICs9IHZtX2V2ZW50Lm8K PiAgb2JqLXkgKz0gdnRpbWVyLm8KPiAgb2JqLXkgKz0gdnBzY2kubwo+ICBvYmoteSArPSB2dWFy dC5vCj4gK29iai0kKENPTkZJR19WUEwwMTFfQ09OU09MRSkgKz0gdnBsMDExLm8KPiAgCj4gICNv YmotYmluLXkgKz0gLi4uLm8KPiAgCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS92cGwwMTEu YyBiL3hlbi9hcmNoL2FybS92cGwwMTEuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMC4uOWIxZjI3ZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi94ZW4vYXJjaC9hcm0vdnBs MDExLmMKPiBAQCAtMCwwICsxLDQxOCBAQAo+ICsvKgo+ICsgKiBhcmNoL2FybS92cGwwMTEuYwo+ ICsgKgo+ICsgKiBWaXJ0dWFsIFBMMDExIFVBUlQKPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQK PiArICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSwKPiArICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAo+ICsgKiBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkgb3IKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgo+ICsgKiBtb3JlIGRldGFpbHMuCj4gKyAq Cj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKPiArICogdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg PHhlbi9lcnJuby5oPgo+ICsjaW5jbHVkZSA8eGVuL2V2ZW50Lmg+Cj4gKyNpbmNsdWRlIDx4ZW4v Z3Vlc3RfYWNjZXNzLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vaW5pdC5oPgo+ICsjaW5jbHVkZSA8eGVu L2xpYi5oPgo+ICsjaW5jbHVkZSA8eGVuL21tLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4K PiArI2luY2x1ZGUgPHB1YmxpYy9kb21jdGwuaD4KPiArI2luY2x1ZGUgPHB1YmxpYy9pby9jb25z b2xlLmg+Cj4gKyNpbmNsdWRlIDxhc20tYXJtL3BsMDExLXVhcnQuaD4KPiArI2luY2x1ZGUgPGFz bS1hcm0vdmdpYy1lbXVsLmg+Cj4gKyNpbmNsdWRlIDxhc20tYXJtL3ZwbDAxMS5oPgo+ICsKPiAr c3RhdGljIGJvb2wgdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhzdHJ1Y3QgaHNyX2RhYnQgZGFi dCkKPiArewo+ICsgICAgcmV0dXJuIChkYWJ0LnNpemUgIT0gREFCVF9ET1VCTEVfV09SRCk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHZwbDAxMV91cGRhdGUoc3RydWN0IGRvbWFpbiAqZCkKPiAr ewo+ICsgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0gJmQtPmFyY2gudnBsMDExOwo+ICsKPiAr ICAgIC8qCj4gKyAgICAgKiBUT0RPOiBQTDAxMSBpbnRlcnJ1cHRzIGFyZSBsZXZlbCB0cmlnZ2Vy ZWQgd2hpY2ggbWVhbnMKPiArICAgICAqIHRoYXQgaW50ZXJydXB0IG5lZWRzIHRvIGJlIHNldC9j bGVhciBpbnN0ZWFkIG9mIGJlaW5nCj4gKyAgICAgKiBpbmplY3RlZC4gSG93ZXZlciwgY3VycmVu dGx5IHZHSUMgZG9lcyBub3QgaGFuZGxlIGxldmVsIAo+ICsgICAgICogdHJpZ2dlcmVkIGludGVy cnVwdHMgcHJvcGVybHkuIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgCj4gKyAgICAgKiByZXZp c2l0ZWQgb25jZSB2R0lDIHN0YXJ0cyBoYW5kbGluZyBsZXZlbCB0cmlnZ2VyZWQgCj4gKyAgICAg KiBpbnRlcnJ1cHRzLgo+ICsgICAgICovCj4gKyAgICBpZiAoIHZwbDAxMS0+dWFydHJpcyAmIHZw bDAxMS0+dWFydGltc2MgKQo+ICsgICAgICAgIHZnaWNfdmNwdV9pbmplY3Rfc3BpKGQsIEdVRVNU X1ZQTDAxMV9TUEkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdWludDhfdCB2cGwwMTFfcmVhZF9kYXRh KHN0cnVjdCBkb21haW4gKmQpCj4gK3sKPiArICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKyAg ICB1aW50OF90IGRhdGEgPSAwOwo+ICsgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0gJmQtPmFy Y2gudnBsMDExOwo+ICsgICAgc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gdnBsMDEx LT5yaW5nX2J1ZjsKPiArICAgIFhFTkNPTlNfUklOR19JRFggaW5fY29ucyA9IGludGYtPmluX2Nv bnM7Cj4gKyAgICBYRU5DT05TX1JJTkdfSURYIGluX3Byb2QgPSBpbnRmLT5pbl9wcm9kOwoKQWZ0 ZXIgcmVhZGluZyB0aGUgaW5kZXhlcywgd2UgYWx3YXlzIG5lZWQgYmFycmllcnMuIEluIHRoaXMg Y2FzZToKCiAgc21wX3JtYigpOwoKCj4gKyAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4gKwo+ ICsgICAgLyoKPiArICAgICAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlcmUgd2lsbCBiZSBkYXRh IGluIHRoZSByaW5nIGJ1ZmZlciB3aGVuIHRoaXMKPiArICAgICAqIGZ1bmN0aW9uIGlzIGNhbGxl ZCBzaW5jZSB0aGUgZ3Vlc3QgaXMgZXhwZWN0ZWQgdG8gcmVhZCB0aGUgZGF0YSByZWdpc3Rlcgo+ ICsgICAgICogb25seSBpZiB0aGUgVFhGRSBmbGFnIGlzIG5vdCBzZXQuCj4gKyAgICAgKiBJZiB0 aGUgZ3Vlc3Qgc3RpbGwgZG9lcyByZWFkIHdoZW4gVFhGRSBiaXQgaXMgc2V0IHRoZW4gMCB3aWxs IGJlIHJldHVybmVkLgo+ICsgICAgICovCj4gKyAgICBpZiAoIHhlbmNvbnNfcXVldWVkKGluX3By b2QsIGluX2NvbnMsIHNpemVvZihpbnRmLT5pbikpID4gMCApCj4gKyAgICB7Cj4gKyAgICAgICAg ZGF0YSA9IGludGYtPmluW3hlbmNvbnNfbWFzayhpbl9jb25zLCBzaXplb2YoaW50Zi0+aW4pKV07 Cj4gKyAgICAgICAgaW5fY29ucyArPSAxOwo+ICsgICAgICAgIGludGYtPmluX2NvbnMgPSBpbl9j b25zOwo+ICsgICAgICAgIHNtcF9tYigpOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsgICAgewo+ ICsgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogVW5leHBlY3RlZCBJTiByaW5n IGJ1ZmZlciBlbXB0eVxuIik7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKCB4ZW5jb25zX3F1ZXVl ZChpbl9wcm9kLCBpbl9jb25zLCBzaXplb2YoaW50Zi0+aW4pKSA9PSAwICkKPiArICAgIHsKPiAr ICAgICAgICB2cGwwMTEtPnVhcnRmciB8PSBSWEZFOwo+ICsgICAgICAgIHZwbDAxMS0+dWFydHJp cyAmPSB+UlhJOwo+ICsgICAgfQo+ICsgICAgdnBsMDExLT51YXJ0ZnIgJj0gflJYRkY7Cj4gKyAg ICBWUEwwMTFfVU5MT0NLKGQsIGZsYWdzKTsKCkkgYW0gcHJldHR5IHN1cmUgdGhhdCB0aGUgUFYg Y29uc29sZSBwcm90b2NvbCByZXF1aXJlcyB1cyB0byBub3RpZnkgdGhlCm90aGVyIGVuZCBldmVu IG9uIHJlYWRzLiBXZSBuZWVkIHRvIGFkZCBhIG5vdGlmeV92aWFfeGVuX2V2ZW50X2NoYW5uZWwK aGVyZSwgSSB0aGluay4KCgo+ICsgICAgcmV0dXJuIGRhdGE7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHZwbDAxMV93cml0ZV9kYXRhKHN0cnVjdCBkb21haW4gKmQsIHVpbnQ4X3QgZGF0YSkKPiAr ewo+ICsgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiArICAgIHN0cnVjdCB2cGwwMTEgKnZwbDAx MSA9ICZkLT5hcmNoLnZwbDAxMTsKPiArICAgIHN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50 ZiA9IHZwbDAxMS0+cmluZ19idWY7Cj4gKyAgICBYRU5DT05TX1JJTkdfSURYIG91dF9jb25zID0g aW50Zi0+b3V0X2NvbnM7Cj4gKyAgICBYRU5DT05TX1JJTkdfSURYIG91dF9wcm9kID0gaW50Zi0+ b3V0X3Byb2Q7CgogIHNtcF9tYigpCgoKPiArICAgIFZQTDAxMV9MT0NLKGQsIGZsYWdzKTsKPiAr Cj4gKyAgICAvKgo+ICsgICAgICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgcmluZyBpcyBub3Qg ZnVsbCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkCj4gKyAgICAgKiBhcyB0aGUgZ3Vlc3Qg aXMgZXhwZWN0ZWQgdG8gd3JpdGUgdG8gdGhlIGRhdGEgcmVnaXN0ZXIgb25seSB3aGVuIHRoZQo+ ICsgICAgICogVFhGRiBmbGFnIGlzIG5vdCBzZXQuCj4gKyAgICAgKiBJbiBjYXNlIHRoZSBndWVz dCBkb2VzIHdyaXRlIGV2ZW4gd2hlbiB0aGUgVFhGRiBmbGFnIGlzIHNldCB0aGVuIHRoZQo+ICsg ICAgICogZGF0YSB3aWxsIGJlIHNpbGVudGx5IGRyb3BwZWQuCj4gKyAgICAgKi8KPiArICAgIGlm ICggeGVuY29uc19xdWV1ZWQob3V0X3Byb2QsIG91dF9jb25zLCBzaXplb2YoaW50Zi0+b3V0KSkg IT0KPiArICAgICAgICAgc2l6ZW9mIChpbnRmLT5vdXQpICkKPiArICAgIHsKPiArICAgICAgICBp bnRmLT5vdXRbeGVuY29uc19tYXNrKG91dF9wcm9kLCBzaXplb2YoaW50Zi0+b3V0KSldID0gZGF0 YTsKPiArICAgICAgICBzbXBfd21iKCk7Cj4gKyAgICAgICAgb3V0X3Byb2QgKz0gMTsKPiArICAg ICAgICBpbnRmLT5vdXRfcHJvZCA9IG91dF9wcm9kOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsg ICAgewo+ICsgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogVW5leHBlY3RlZCBP VVQgcmluZyBidWZmZXIgZnVsbFxuIik7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKCB4ZW5jb25z X3F1ZXVlZChvdXRfcHJvZCwgb3V0X2NvbnMsIHNpemVvZihpbnRmLT5vdXQpKSA9PQo+ICsgICAg ICAgICBzaXplb2YgKGludGYtPm91dCkgKQo+ICsgICAgewo+ICsgICAgICAgIHZwbDAxMS0+dWFy dGZyIHw9IFRYRkY7Cj4gKyAgICAgICAgdnBsMDExLT51YXJ0cmlzICY9IH5UWEk7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgdnBsMDExLT51YXJ0ZnIgfD0gQlVTWTsKPiArCj4gKyAgICB2cGwwMTEtPnVh cnRmciAmPSB+VFhGRTsKPiArCj4gKyAgICBWUEwwMTFfVU5MT0NLKGQsIGZsYWdzKTsKPiArCj4g KyAgICAvKgo+ICsgICAgICogU2VuZCBhbiBldmVudCB0byBjb25zb2xlIGJhY2tlbmQgdG8gaW5k aWNhdGUgdGhhdCB0aGVyZSBpcyAKPiArICAgICAqIGRhdGEgaW4gdGhlIE9VVCByaW5nIGJ1ZmZl ci4KPiArICAgICAqLwo+ICsgICAgbm90aWZ5X3ZpYV94ZW5fZXZlbnRfY2hhbm5lbChkLCB2cGww MTEtPmV2dGNobik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdnBsMDExX21taW9fcmVhZChzdHJ1 Y3QgdmNwdSAqdiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1taW9faW5mb190ICpp bmZvLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfdCAqciwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByaXYpCj4gK3sKPiArICAgIHN0cnVjdCBo c3JfZGFidCBkYWJ0ID0gaW5mby0+ZGFidDsKPiArICAgIHVpbnQzMl90IHZwbDAxMV9yZWcgPSAo dWludDMyX3QpKGluZm8tPmdwYSAtIEdVRVNUX1BMMDExX0JBU0UpOwo+ICsgICAgc3RydWN0IHZw bDAxMSAqdnBsMDExID0gJnYtPmRvbWFpbi0+YXJjaC52cGwwMTE7Cj4gKwo+ICsgICAgc3dpdGNo ICggdnBsMDExX3JlZyApCj4gKyAgICB7Cj4gKyAgICBjYXNlIERSOgo+ICsgICAgICAgIC8qCj4g KyAgICAgICAgICogU2luY2UgcGwwMTEgcmVnaXN0ZXJzIGFyZSAzMi1iaXQgcmVnaXN0ZXJzLCBh bGwgcmVnaXN0ZXJzCj4gKyAgICAgICAgICogYXJlIGhhbmRsZWQgc2ltaWxhcmx5IGFsbG93aW5n IDgtYml0LCAxNi1iaXQgYW5kIDMyLWJpdAo+ICsgICAgICAgICAqIGFjY2Vzc2VzLgo+ICsgICAg ICAgICAqLwo+ICsgICAgICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkg KSBnb3RvIGJhZF93aWR0aDsKPiArCj4gKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4dHJhY3Qo dnBsMDExX3JlYWRfZGF0YSh2LT5kb21haW4pLCBpbmZvKTsKPiArICAgICAgICByZXR1cm4gMTsK PiArCj4gKyAgICBjYXNlIFJTUjoKPiArICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tf YWNjZXNzKGRhYnQpICkgZ290byBiYWRfd2lkdGg7Cj4gKwo+ICsgICAgICAgIC8qIEl0IGFsd2F5 cyByZXR1cm5zIDAgYXMgdGhlcmUgYXJlIG5vIHBoeXNpY2FsIGVycm9ycy4gKi8KPiArICAgICAg ICAqciA9IDA7Cj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgY2FzZSBGUjoKPiArICAg ICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQpICkgZ290byBiYWRfd2lk dGg7Cj4gKwo+ICsgICAgICAgICpyID0gdnJlZ19yZWczMl9leHRyYWN0KHZwbDAxMS0+dWFydGZy LCBpbmZvKTsKPiArICAgICAgICByZXR1cm4gMTsKPiArCj4gKyAgICBjYXNlIFJJUzoKPiArICAg ICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQpICkgZ290byBiYWRfd2lk dGg7Cj4gKwo+ICsgICAgICAgICpyID0gdnJlZ19yZWczMl9leHRyYWN0KHZwbDAxMS0+dWFydHJp cywgaW5mbyk7Cj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgY2FzZSBNSVM6Cj4gKyAg ICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dp ZHRoOwo+ICsKPiArICAgICAgICAqciA9IHZyZWdfcmVnMzJfZXh0cmFjdCh2cGwwMTEtPnVhcnRy aXMgJiAKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cGwwMTEtPnVhcnRpbXNj LCBpbmZvKTsKPiArICAgICAgICByZXR1cm4gMTsKPiArCj4gKyAgICBjYXNlIElNU0M6Cj4gKyAg ICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dp ZHRoOwo+ICsKPiArICAgICAgICAqciA9IHZyZWdfcmVnMzJfZXh0cmFjdCh2cGwwMTEtPnVhcnRp bXNjLCBpbmZvKTsKPiArICAgICAgICByZXR1cm4gMTsKPiArCj4gKyAgICBjYXNlIElDUjoKPiAr ICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQpICkgZ290byBiYWRf d2lkdGg7Cj4gKwo+ICsgICAgICAgIC8qIE9ubHkgd3JpdGUgaXMgdmFsaWQuICovCj4gKyAgICAg ICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICBncHJpbnRrKFhFTkxP R19FUlIsICJ2cGwwMTE6IHVuaGFuZGxlZCByZWFkIHIlZCBvZmZzZXQgJSMwOHhcbiIsCj4gKyAg ICAgICAgICAgICAgICBkYWJ0LnJlZywgdnBsMDExX3JlZyk7Cj4gKyAgICAgICAgcmV0dXJuIDA7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDE7Cj4gKwo+ICtiYWRfd2lkdGg6Cj4gKyAgICBn cHJpbnRrKFhFTkxPR19FUlIsICJ2cGwwMTE6IGJhZCByZWFkIHdpZHRoICVkIHIlZCBvZmZzZXQg JSMwOHhcbiIsCj4gKyAgICAgICAgICAgIGRhYnQuc2l6ZSwgZGFidC5yZWcsIHZwbDAxMV9yZWcp Owo+ICsgICAgZG9tYWluX2NyYXNoX3N5bmNocm9ub3VzKCk7Cj4gKyAgICByZXR1cm4gMDsKPiAr Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdnBsMDExX21taW9fd3JpdGUoc3RydWN0IHZjcHUgKnYs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW1pb19pbmZvX3QgKmluZm8sCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfdCByLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKnByaXYpCj4gK3sKPiArICAgIHN0cnVjdCBoc3JfZGFidCBk YWJ0ID0gaW5mby0+ZGFidDsKPiArICAgIHVpbnQzMl90IHZwbDAxMV9yZWcgPSAodWludDMyX3Qp KGluZm8tPmdwYSAtIEdVRVNUX1BMMDExX0JBU0UpOwo+ICsgICAgc3RydWN0IHZwbDAxMSAqdnBs MDExID0gJnYtPmRvbWFpbi0+YXJjaC52cGwwMTE7Cj4gKyAgICBzdHJ1Y3QgZG9tYWluICpkID0g di0+ZG9tYWluOwo+ICsgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKyAgICBzd2l0Y2gg KCB2cGwwMTFfcmVnICkKPiArICAgIHsKPiArICAgIGNhc2UgRFI6Cj4gKyAgICB7Cj4gKyAgICAg ICAgdWludDMyX3QgZGF0YSA9IDA7Cj4gKwo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogU2lu Y2UgcGwwMTEgcmVnaXN0ZXJzIGFyZSAzMi1iaXQgcmVnaXN0ZXJzLCBhbGwgcmVnaXN0ZXJzCj4g KyAgICAgICAgICogYXJlIGhhbmRsZWQgc2ltaWxhcmx5IGFsbG93aW5nIDgtYml0LCAxNi1iaXQg YW5kIDMyLWJpdAo+ICsgICAgICAgICAqIGFjY2Vzc2VzLgo+ICsgICAgICAgICAqLwo+ICsgICAg ICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJhZF93aWR0 aDsKPiArCj4gKyAgICAgICAgdnJlZ19yZWczMl91cGRhdGUoJmRhdGEsIHIsIGluZm8pOwo+ICsg ICAgICAgIGRhdGEgJj0gMHhGRjsKPiArICAgICAgICB2cGwwMTFfd3JpdGVfZGF0YSh2LT5kb21h aW4sIGRhdGEpOwo+ICsgICAgICAgIHJldHVybiAxOwo+ICsgICAgfQo+ICsgICAgY2FzZSBSU1I6 IC8qIE5vdGhpbmcgdG8gY2xlYXIuICovCj4gKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2No ZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+ICsKPiArICAgICAgICByZXR1cm4g MTsgCj4gKwo+ICsgICAgY2FzZSBGUjoKPiArICAgIGNhc2UgUklTOgo+ICsgICAgY2FzZSBNSVM6 Cj4gKyAgICAgICAgZ290byB3cml0ZV9pZ25vcmU7Cj4gKwo+ICsgICAgY2FzZSBJTVNDOgo+ICsg ICAgICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJhZF93 aWR0aDsKPiArCj4gKyAgICAgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOwo+ICsgICAgICAgIHZy ZWdfcmVnMzJfdXBkYXRlKCZ2cGwwMTEtPnVhcnRpbXNjLCByLCBpbmZvKTsKPiArICAgICAgICBW UEwwMTFfVU5MT0NLKGQsIGZsYWdzKTsKPiArICAgICAgICB2cGwwMTFfdXBkYXRlKHYtPmRvbWFp bik7Cj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgY2FzZSBJQ1I6Cj4gKyAgICAgICAg aWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+ ICsKPiArICAgICAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4gKyAgICAgICAgdnJlZ19yZWcz Ml9jbGVhcmJpdHMoJnZwbDAxMS0+dWFydHJpcywgciwgaW5mbyk7Cj4gKyAgICAgICAgVlBMMDEx X1VOTE9DSyhkLCBmbGFncyk7Cj4gKyAgICAgICAgdnBsMDExX3VwZGF0ZShkKTsKPiArICAgICAg ICByZXR1cm4gMTsKPiArCj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIGdwcmludGsoWEVOTE9H X0VSUiwgInZwbDAxMTogdW5oYW5kbGVkIHdyaXRlIHIlZCBvZmZzZXQgJSMwOHhcbiIsCj4gKyAg ICAgICAgICAgICAgICBkYWJ0LnJlZywgdnBsMDExX3JlZyk7Cj4gKyAgICAgICAgcmV0dXJuIDA7 Cj4gKyAgICB9Cj4gKwo+ICt3cml0ZV9pZ25vcmU6Cj4gKyAgICByZXR1cm4gMTsKPiArCj4gK2Jh ZF93aWR0aDoKPiArICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogYmFkIHdyaXRlIHdp ZHRoICVkIHIlZCBvZmZzZXQgJSMwOHhcbiIsCj4gKyAgICAgICAgICAgIGRhYnQuc2l6ZSwgZGFi dC5yZWcsIHZwbDAxMV9yZWcpOwo+ICsgICAgZG9tYWluX2NyYXNoX3N5bmNocm9ub3VzKCk7Cj4g KyAgICByZXR1cm4gMDsKPiArCj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1pb19o YW5kbGVyX29wcyB2cGwwMTFfbW1pb19oYW5kbGVyID0gewo+ICsgICAgLnJlYWQgPSB2cGwwMTFf bW1pb19yZWFkLAo+ICsgICAgLndyaXRlID0gdnBsMDExX21taW9fd3JpdGUsCj4gK307Cj4gKwo+ ICtzdGF0aWMgdm9pZCB2cGwwMTFfZGF0YV9hdmFpbChzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4g KyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0g JmQtPmFyY2gudnBsMDExOwo+ICsgICAgc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0g dnBsMDExLT5yaW5nX2J1ZjsKPiArICAgIFhFTkNPTlNfUklOR19JRFggaW5fY29ucyA9IGludGYt PmluX2NvbnM7Cj4gKyAgICBYRU5DT05TX1JJTkdfSURYIGluX3Byb2QgPSBpbnRmLT5pbl9wcm9k Owo+ICsgICAgWEVOQ09OU19SSU5HX0lEWCBvdXRfY29ucyA9IGludGYtPm91dF9jb25zOwo+ICsg ICAgWEVOQ09OU19SSU5HX0lEWCBvdXRfcHJvZCA9IGludGYtPm91dF9wcm9kOwo+ICsgICAgWEVO Q09OU19SSU5HX0lEWCBpbl9yaW5nX3FzaXplLCBvdXRfcmluZ19xc2l6ZTsKCiAgc21iX21iKCkK Cgo+ICsgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOwo+ICsKPiArICAgIGluX3JpbmdfcXNpemUg PSB4ZW5jb25zX3F1ZXVlZChpbl9wcm9kLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluX2NvbnMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mKGludGYtPmluKSk7Cj4gKwo+ICsgICAgb3V0X3JpbmdfcXNpemUgPSB4ZW5jb25zX3F1ZXVl ZChvdXRfcHJvZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2Nv bnMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpbnRmLT5v dXQpKTsKPiArCj4gKyAgICAvKiBVcGRhdGUgdGhlIHVhcnQgcnggc3RhdGUgaWYgdGhlIGJ1ZmZl ciBpcyBub3QgZW1wdHkuICovCj4gKyAgICBpZiAoIGluX3JpbmdfcXNpemUgIT0gMCApCj4gKyAg ICB7Cj4gKyAgICAgICAgdnBsMDExLT51YXJ0ZnIgJj0gflJYRkU7Cj4gKyAgICAgICAgaWYgKCBp bl9yaW5nX3FzaXplID09IHNpemVvZihpbnRmLT5pbikgKQo+ICsgICAgICAgICAgICB2cGwwMTEt PnVhcnRmciB8PSBSWEZGOwo+ICsgICAgICAgIHZwbDAxMS0+dWFydHJpcyB8PSBSWEk7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgLyogVXBkYXRlIHRoZSB1YXJ0IHR4IHN0YXRlIGlmIHRoZSBidWZmZXIg aXMgbm90IGZ1bGwuICovCj4gKyAgICBpZiAoIG91dF9yaW5nX3FzaXplICE9IHNpemVvZihpbnRm LT5vdXQpICkKPiArICAgIHsKPiArICAgICAgICB2cGwwMTEtPnVhcnRmciAmPSB+VFhGRjsKPiAr ICAgICAgICB2cGwwMTEtPnVhcnRyaXMgfD0gVFhJOwo+ICsgICAgICAgIGlmICggb3V0X3Jpbmdf cXNpemUgPT0gMCApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICB2cGwwMTEtPnVhcnRmciAm PSB+QlVTWTsKPiArICAgICAgICAgICAgdnBsMDExLT51YXJ0ZnIgfD0gVFhGRTsKPiArICAgICAg ICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgVlBMMDExX1VOTE9DSyhkLCBmbGFncyk7Cj4gKwo+ICsg ICAgdnBsMDExX3VwZGF0ZShkKTsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyB2b2lkIHZwbDAxMV9u b3RpZmljYXRpb24oc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGludCBwb3J0KQo+ICt7Cj4gKyAg ICB2cGwwMTFfZGF0YV9hdmFpbCh2LT5kb21haW4pOwo+ICt9Cj4gKwo+ICtpbnQgZG9tYWluX3Zw bDAxMV9pbml0KHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCB2cGwwMTFfaW5pdF9pbmZvICppbmZv KQo+ICt7Cj4gKyAgICBpbnQgcmM7Cj4gKyAgICBzdHJ1Y3QgdnBsMDExICp2cGwwMTEgPSAmZC0+ YXJjaC52cGwwMTE7Cj4gKwo+ICsgICAgaWYgKCB2cGwwMTEtPnJpbmdfYnVmICkKPiArICAgICAg ICByZXR1cm4gMDsKPiArCj4gKyAgICAvKiBNYXAgdGhlIGd1ZXN0IFBGTiB0byBYZW4gYWRkcmVz cyBzcGFjZS4gKi8KPiArICAgIHJjID0gIHByZXBhcmVfcmluZ19mb3JfaGVscGVyKGQsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZm5feChpbmZvLT5nZm4pLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZwbDAxMS0+cmluZ19wYWdlLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZwbDAxMS0+cmluZ19idWYpOwo+ICsgICAg aWYgKCByYyA8IDAgKQo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsKPiArICAgIHJjID0gdmdpY19y ZXNlcnZlX3ZpcnEoZCwgR1VFU1RfVlBMMDExX1NQSSk7Cj4gKyAgICBpZiAoICFyYyApCj4gKyAg ICB7Cj4gKyAgICAgICAgcmMgPSAtRUlOVkFMOwo+ICsgICAgICAgIGdvdG8gb3V0MTsKPiArICAg IH0KPiArCj4gKyAgICByZWdpc3Rlcl9tbWlvX2hhbmRsZXIoZCwgJnZwbDAxMV9tbWlvX2hhbmRs ZXIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgR1VFU1RfUEwwMTFfQkFTRSwgR1VFU1Rf UEwwMTFfU0laRSwgTlVMTCk7Cj4gKwo+ICsgICAgc3Bpbl9sb2NrX2luaXQoJnZwbDAxMS0+bG9j ayk7Cj4gKwo+ICsgICAgcmMgPSBhbGxvY191bmJvdW5kX3hlbl9ldmVudF9jaGFubmVsKGQsIDAs IGluZm8tPmNvbnNvbGVfZG9taWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdnBsMDExX25vdGlmaWNhdGlvbik7Cj4gKyAgICBpZiAoIHJjIDwgMCApCj4gKyAg ICAgICAgZ290byBvdXQyOwo+ICsKPiArICAgIHZwbDAxMS0+ZXZ0Y2huID0gaW5mby0+ZXZ0Y2hu ID0gcmM7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gKwo+ICtvdXQyOgo+ICsgICAgeGZyZWUoZC0+ YXJjaC52bW1pby5oYW5kbGVycyk7Cj4gKyAgICB2Z2ljX2ZyZWVfdmlycShkLCBHVUVTVF9WUEww MTFfU1BJKTsKPiArCj4gK291dDE6Cj4gKyAgICBkZXN0cm95X3JpbmdfZm9yX2hlbHBlcigmdnBs MDExLT5yaW5nX2J1ZiwgdnBsMDExLT5yaW5nX3BhZ2UpOwo+ICsKPiArb3V0Ogo+ICsgICAgcmV0 dXJuIHJjOwo+ICt9Cj4gKwo+ICt2b2lkIGRvbWFpbl92cGwwMTFfZGVpbml0KHN0cnVjdCBkb21h aW4gKmQpCj4gK3sKPiArICAgIHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZkLT5hcmNoLnZwbDAx MTsKPiArCj4gKyAgICBpZiAoICF2cGwwMTEtPnJpbmdfYnVmICkKPiArICAgICAgICByZXR1cm47 Cj4gKwo+ICsgICAgZnJlZV94ZW5fZXZlbnRfY2hhbm5lbChkLCB2cGwwMTEtPmV2dGNobik7Cj4g KyAgICBkZXN0cm95X3JpbmdfZm9yX2hlbHBlcigmdnBsMDExLT5yaW5nX2J1ZiwgdnBsMDExLT5y aW5nX3BhZ2UpOwo+ICsgICAgeGZyZWUoZC0+YXJjaC52bW1pby5oYW5kbGVycyk7Cj4gK30KPiAr Cj4gKy8qCj4gKyAqIExvY2FsIHZhcmlhYmxlczoKPiArICogbW9kZTogQwo+ICsgKiBjLWZpbGUt c3R5bGU6ICJCU0QiCj4gKyAqIGMtYmFzaWMtb2Zmc2V0OiA0Cj4gKyAqIGluZGVudC10YWJzLW1v ZGU6IG5pbAo+ICsgKiBFbmQ6Cj4gKyAqLwo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20t YXJtL2RvbWFpbi5oIGIveGVuL2luY2x1ZGUvYXNtLWFybS9kb21haW4uaAo+IGluZGV4IDZkZTgw ODIuLjkxZDEwNjEgMTAwNjQ0Cj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9kb21haW4uaAo+ ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vZG9tYWluLmgKPiBAQCAtMTEsNiArMTEsNyBAQAo+ ICAjaW5jbHVkZSA8cHVibGljL2h2bS9wYXJhbXMuaD4KPiAgI2luY2x1ZGUgPHhlbi9zZXJpYWwu aD4KPiAgI2luY2x1ZGUgPHhlbi9yYnRyZWUuaD4KPiArI2luY2x1ZGUgPGFzbS1hcm0vdnBsMDEx Lmg+Cj4gIAo+ICBzdHJ1Y3QgaHZtX2RvbWFpbgo+ICB7Cj4gQEAgLTEzMyw2ICsxMzQsMTEgQEAg c3RydWN0IGFyY2hfZG9tYWluCj4gICAgICBzdHJ1Y3Qgewo+ICAgICAgICAgIHVpbnQ4X3QgcHJp dmlsZWdlZF9jYWxsX2VuYWJsZWQgOiAxOwo+ICAgICAgfSBtb25pdG9yOwo+ICsKPiArI2lmZGVm IENPTkZJR19WUEwwMTFfQ09OU09MRQo+ICsgICAgc3RydWN0IHZwbDAxMSB2cGwwMTE7Cj4gKyNl bmRpZgo+ICsKPiAgfSAgX19jYWNoZWxpbmVfYWxpZ25lZDsKPiAgCj4gIHN0cnVjdCBhcmNoX3Zj cHUKPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFybS9wbDAxMS11YXJ0LmggYi94ZW4v aW5jbHVkZS9hc20tYXJtL3BsMDExLXVhcnQuaAo+IGluZGV4IDEyM2Y0NzcuLjU3ZTllYzcgMTAw NjQ0Cj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9wbDAxMS11YXJ0LmgKPiArKysgYi94ZW4v aW5jbHVkZS9hc20tYXJtL3BsMDExLXVhcnQuaAo+IEBAIC00OSw2ICs0OSw4IEBACj4gIC8qIEZS IGJpdHMgKi8KPiAgI2RlZmluZSBUWEZFICAgKDE8PDcpIC8qIFRYIEZJRk8gZW1wdHkgKi8KPiAg I2RlZmluZSBSWEZFICAgKDE8PDQpIC8qIFJYIEZJRk8gZW1wdHkgKi8KPiArI2RlZmluZSBUWEZG ICAgKDE8PDUpIC8qIFRYIEZJRk8gZnVsbCAqLwo+ICsjZGVmaW5lIFJYRkYgICAoMTw8NikgLyog UlggRklGTyBmdWxsICovCj4gICNkZWZpbmUgQlVTWSAgICgxPDwzKSAvKiBUcmFuc21pdCBpcyBu b3QgY29tcGxldGUgKi8KPiAgCj4gIC8qIExDUl9IIGJpdHMgKi8KPiBkaWZmIC0tZ2l0IGEveGVu L2luY2x1ZGUvYXNtLWFybS92cGwwMTEuaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vdnBsMDExLmgK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmIzZTMzMmQKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLWFybS92cGwwMTEuaAo+IEBAIC0wLDAgKzEs NzQgQEAKPiArLyoKPiArICogaW5jbHVkZS94ZW4vdnBsMDExLmgKPiArICoKPiArICogVmlydHVh bCBQTDAxMSBVQVJUCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cj4gKyAqIHVuZGVyIHRoZSB0 ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCj4g KyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKPiArICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCj4gKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IKPiArICogbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh bG9uZyB3aXRoCj4gKyAqIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+Lgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX1ZQTDAxMV9IXwo+ICsKPiAr I2RlZmluZSBfVlBMMDExX0hfCj4gKwo+ICsjaW5jbHVkZSA8cHVibGljL2RvbWN0bC5oPgo+ICsj aW5jbHVkZSA8cHVibGljL2lvL3JpbmcuaD4KPiArI2luY2x1ZGUgPGFzbS1hcm0vdnJlZy5oPgo+ ICsjaW5jbHVkZSA8eGVuL21tLmg+Cj4gKwo+ICsvKiBoZWxwZXIgbWFjcm9zICovCj4gKyNkZWZp bmUgVlBMMDExX0xPQ0soZCxmbGFncykgc3Bpbl9sb2NrX2lycXNhdmUoJihkKS0+YXJjaC52cGww MTEubG9jaywgZmxhZ3MpCj4gKyNkZWZpbmUgVlBMMDExX1VOTE9DSyhkLGZsYWdzKSBzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCYoZCktPmFyY2gudnBsMDExLmxvY2ssIGZsYWdzKQo+ICsKPiArc3Ry dWN0IHZwbDAxMSB7Cj4gKyAgICB2b2lkICpyaW5nX2J1ZjsKPiArICAgIHN0cnVjdCBwYWdlX2lu Zm8gKnJpbmdfcGFnZTsKPiArICAgIHVpbnQzMl90ICAgIHVhcnRmcjsgICAgIC8qIEZsYWcgcmVn aXN0ZXIgKi8KPiArICAgIHVpbnQzMl90ICAgIHVhcnRjcjsgICAgIC8qIENvbnRyb2wgcmVnaXN0 ZXIgKi8KPiArICAgIHVpbnQzMl90ICAgIHVhcnRpbXNjOyAgIC8qIEludGVycnVwdCBtYXNrIHJl Z2lzdGVyKi8KPiArICAgIHVpbnQzMl90ICAgIHVhcnRpY3I7ICAgIC8qIEludGVycnVwdCBjbGVh ciByZWdpc3RlciAqLwo+ICsgICAgdWludDMyX3QgICAgdWFydHJpczsgICAgLyogUmF3IGludGVy cnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KPiArICAgIHVpbnQzMl90ICAgIHVhcnRtaXM7ICAgIC8q IE1hc2tlZCBpbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KPiArICAgIHNwaW5sb2NrX3QgIGxvY2s7Cj4g KyAgICBldnRjaG5fcG9ydF90IGV2dGNobjsKPiArfTsKPiArCj4gK3N0cnVjdCB2cGwwMTFfaW5p dF9pbmZvIHsKPiArICAgIHVpbnQzMl90IGNvbnNvbGVfZG9taWQ7Cj4gKyAgICBnZm5fdCBnZm47 Cj4gKyAgICBldnRjaG5fcG9ydF90IGV2dGNobjsKPiArfTsKPiArCj4gKyNpZmRlZiBDT05GSUdf VlBMMDExX0NPTlNPTEUKPiAraW50IGRvbWFpbl92cGwwMTFfaW5pdChzdHJ1Y3QgZG9tYWluICpk LAo+ICsgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cGwwMTFfaW5pdF9pbmZvICppbmZv KTsKPiArdm9pZCBkb21haW5fdnBsMDExX2RlaW5pdChzdHJ1Y3QgZG9tYWluICpkKTsKPiArI2Vs c2UKPiArc3RhdGljIGlubGluZSBpbnQgZG9tYWluX3ZwbDAxMV9pbml0KHN0cnVjdCBkb21haW4g KmQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnBsMDEx X2luaXRfaW5mbyAqaW5mbykKPiArewo+ICsgICAgcmV0dXJuIC1FTk9TWVM7Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgdm9pZCBkb21haW5fdnBsMDExX2RlaW5pdChzdHJ1Y3QgZG9tYWluICpk KSB7IH0KPiArI2VuZGlmCj4gKwo+ICsjZW5kaWYKPiArCj4gKy8qCj4gKyAqIExvY2FsIHZhcmlh YmxlczoKPiArICogbW9kZTogQwo+ICsgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCj4gKyAqIGMtYmFz aWMtb2Zmc2V0OiA0Cj4gKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAo+ICsgKiBFbmQ6Cj4gKyAq Lwo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9wdWJsaWMvYXJjaC1hcm0uaCBiL3hlbi9pbmNs dWRlL3B1YmxpYy9hcmNoLWFybS5oCj4gaW5kZXggYmQ5NzRmYi4uODVhYjY2NSAxMDA2NDQKPiAt LS0gYS94ZW4vaW5jbHVkZS9wdWJsaWMvYXJjaC1hcm0uaAo+ICsrKyBiL3hlbi9pbmNsdWRlL3B1 YmxpYy9hcmNoLWFybS5oCj4gQEAgLTQxMCw2ICs0MTAsMTAgQEAgdHlwZWRlZiB1aW50NjRfdCB4 ZW5fY2FsbGJhY2tfdDsKPiAgI2RlZmluZSBHVUVTVF9BQ1BJX0JBU0UgMHgyMDAwMDAwMFVMTAo+ ICAjZGVmaW5lIEdVRVNUX0FDUElfU0laRSAweDAyMDAwMDAwVUxMCj4gIAo+ICsvKiBQTDAxMSBt YXBwaW5ncyAqLwo+ICsjZGVmaW5lIEdVRVNUX1BMMDExX0JBU0UgICAgMHgyMjAwMDAwMFVMTAo+ ICsjZGVmaW5lIEdVRVNUX1BMMDExX1NJWkUgICAgMHgwMDAwMTAwMFVMTAo+ICsKPiAgLyoKPiAg ICogMTZNQiA9PSA0MDk2IHBhZ2VzIHJlc2VydmVkIGZvciBndWVzdCB0byB1c2UgYXMgYSByZWdp b24gdG8gbWFwIGl0cwo+ICAgKiBncmFudCB0YWJsZSBpbi4KPiBAQCAtNDQ0LDYgKzQ0OCw4IEBA IHR5cGVkZWYgdWludDY0X3QgeGVuX2NhbGxiYWNrX3Q7Cj4gICNkZWZpbmUgR1VFU1RfVElNRVJf UEhZU19OU19QUEkgMzAKPiAgI2RlZmluZSBHVUVTVF9FVlRDSE5fUFBJICAgICAgICAzMQo+ICAK PiArI2RlZmluZSBHVUVTVF9WUEwwMTFfU1BJICAgICAgICAzMgo+ICsKPiAgLyogUFNDSSBmdW5j dGlvbnMgKi8KPiAgI2RlZmluZSBQU0NJX2NwdV9zdXNwZW5kIDAKPiAgI2RlZmluZSBQU0NJX2Nw dV9vZmYgICAgIDEKPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvcHVibGljL2lvL2NvbnNvbGUu aCBiL3hlbi9pbmNsdWRlL3B1YmxpYy9pby9jb25zb2xlLmgKPiBpbmRleCBlMmNkOTdmLi41ZTQ1 ZTFjIDEwMDY0NAo+IC0tLSBhL3hlbi9pbmNsdWRlL3B1YmxpYy9pby9jb25zb2xlLmgKPiArKysg Yi94ZW4vaW5jbHVkZS9wdWJsaWMvaW8vY29uc29sZS5oCj4gQEAgLTI3LDYgKzI3LDggQEAKPiAg I2lmbmRlZiBfX1hFTl9QVUJMSUNfSU9fQ09OU09MRV9IX18KPiAgI2RlZmluZSBfX1hFTl9QVUJM SUNfSU9fQ09OU09MRV9IX18KPiAgCj4gKyNpbmNsdWRlICJyaW5nLmgiCj4gKwo+ICB0eXBlZGVm IHVpbnQzMl90IFhFTkNPTlNfUklOR19JRFg7Cj4gIAo+ICAjZGVmaW5lIE1BU0tfWEVOQ09OU19J RFgoaWR4LCByaW5nKSAoKGlkeCkgJiAoc2l6ZW9mKHJpbmcpLTEpKQo+IEBAIC0zOCw2ICs0MCw4 IEBAIHN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSB7Cj4gICAgICBYRU5DT05TX1JJTkdfSURYIG91 dF9jb25zLCBvdXRfcHJvZDsKPiAgfTsKPiAgCj4gK0RFRklORV9YRU5fRkxFWF9SSU5HKHhlbmNv bnMpOwo+ICsKPiAgI2VuZGlmIC8qIF9fWEVOX1BVQkxJQ19JT19DT05TT0xFX0hfXyAqLwo+ICAK PiAgLyoKPiAtLSAKPiAyLjcuNAo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu Lm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==