From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH 02/13] drm/i915: Implement command buffer parsing logic Date: Wed, 05 Feb 2014 17:15:35 +0200 Message-ID: <8738jx3814.fsf@intel.com> References: <1385484699-51596-1-git-send-email-bradley.d.volkin@intel.com> <1391032514-19136-1-git-send-email-bradley.d.volkin@intel.com> <1391032514-19136-3-git-send-email-bradley.d.volkin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 69184106ED6 for ; Wed, 5 Feb 2014 07:12:26 -0800 (PST) In-Reply-To: <1391032514-19136-3-git-send-email-bradley.d.volkin@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces@lists.freedesktop.org Errors-To: intel-gfx-bounces@lists.freedesktop.org To: bradley.d.volkin@intel.com, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyOSBKYW4gMjAxNCwgYnJhZGxleS5kLnZvbGtpbkBpbnRlbC5jb20gd3JvdGU6Cj4g RnJvbTogQnJhZCBWb2xraW4gPGJyYWRsZXkuZC52b2xraW5AaW50ZWwuY29tPgo+Cj4gVGhlIGNv bW1hbmQgcGFyc2VyIHNjYW5zIGJhdGNoIGJ1ZmZlcnMgc3VibWl0dGVkIHZpYSBleGVjYnVmZmVy IGlvY3RscyBiZWZvcmUKPiB0aGUgZHJpdmVyIHN1Ym1pdHMgdGhlbSB0byBoYXJkd2FyZS4gQXQg YSBoaWdoIGxldmVsLCBpdCBsb29rcyBmb3Igc2V2ZXJhbAo+IHRoaW5nczoKPgo+IDEpIENvbW1h bmRzIHdoaWNoIGFyZSBleHBsaWNpdGx5IGRlZmluZWQgYXMgcHJpdmlsZWdlZCBvciB3aGljaCBz aG91bGQgb25seSBiZQo+ICAgIHVzZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuIFRoZSBwYXJzZXIg Z2VuZXJhbGx5IHJlamVjdHMgc3VjaCBjb21tYW5kcywgd2l0aAo+ICAgIHRoZSBwcm92aXNpb24g dGhhdCBpdCBtYXkgYWxsb3cgc29tZSBmcm9tIHRoZSBkcm0gbWFzdGVyIHByb2Nlc3MuCj4gMikg Q29tbWFuZHMgd2hpY2ggYWNjZXNzIHJlZ2lzdGVycy4gVG8gc3VwcG9ydCBjb3JyZWN0L2VuaGFu Y2VkIHVzZXJzcGFjZQo+ICAgIGZ1bmN0aW9uYWxpdHksIHBhcnRpY3VsYXJseSBjZXJ0YWluIE9w ZW5HTCBleHRlbnNpb25zLCB0aGUgcGFyc2VyIHByb3ZpZGVzIGEKPiAgICB3aGl0ZWxpc3Qgb2Yg cmVnaXN0ZXJzIHdoaWNoIHVzZXJzcGFjZSBtYXkgc2FmZWx5IGFjY2VzcyAoZm9yIGJvdGggbm9y bWFsIGFuZAo+ICAgIGRybSBtYXN0ZXIgcHJvY2Vzc2VzKS4KPiAzKSBDb21tYW5kcyB3aGljaCBh Y2Nlc3MgcHJpdmlsZWdlZCBtZW1vcnkgKGkuZS4gR0dUVCwgSFdTIHBhZ2UsIGV0YykuIFRoZQo+ ICAgIHBhcnNlciBhbHdheXMgcmVqZWN0cyBzdWNoIGNvbW1hbmRzLgo+Cj4gRWFjaCByaW5nIG1h aW50YWlucyB0YWJsZXMgb2YgY29tbWFuZHMgYW5kIHJlZ2lzdGVycyB3aGljaCB0aGUgcGFyc2Vy IHVzZXMgaW4KPiBzY2FubmluZyBiYXRjaCBidWZmZXJzIHN1Ym1pdHRlZCB0byB0aGF0IHJpbmcu Cj4KPiBUaGUgc2V0IG9mIGNvbW1hbmRzIHRoYXQgdGhlIHBhcnNlciBtdXN0IGNoZWNrIGZvciBp cyBzaWduaWZpY2FudGx5IHNtYWxsZXIKPiB0aGFuIHRoZSBudW1iZXIgb2YgY29tbWFuZHMgc3Vw cG9ydGVkLCBlc3BlY2lhbGx5IG9uIHRoZSByZW5kZXIgcmluZy4gQXMgc3VjaCwKPiB0aGUgcGFy c2VyIHRhYmxlcyAoYnVpbHQgdXAgaW4gc3Vic2VxdWVudCBwYXRjaGVzKSBjb250YWluIG9ubHkg dGhvc2UgY29tbWFuZHMKPiByZXF1aXJlZCBieSB0aGUgcGFyc2VyLiBUaGlzIGdlbmVyYWxseSB3 b3JrcyBiZWNhdXNlIGNvbW1hbmQgb3Bjb2RlIHJhbmdlcyBoYXZlCj4gc3RhbmRhcmQgY29tbWFu ZCBsZW5ndGggZW5jb2RpbmdzLiBTbyBmb3IgY29tbWFuZHMgdGhhdCB0aGUgcGFyc2VyIGRvZXMg bm90IG5lZWQKPiB0byBjaGVjaywgaXQgY2FuIGVhc2lseSBza2lwIHRoZW0uIFRoaXMgaXMgaW1w bGVtZW50YXRlZCB2aWEgYSBwZXItcmluZyBsZW5ndGgKPiBkZWNvZGluZyB2ZnVuYy4KPgo+IFVu Zm9ydHVuYXRlbHksIHRoZXJlIGFyZSBhIG51bWJlciBvZiBjb21tYW5kcyB0aGF0IGRvIG5vdCBm b2xsb3cgdGhlIHN0YW5kYXJkCj4gbGVuZ3RoIGVuY29kaW5nIGZvciB0aGVpciBvcGNvZGUgcmFu Z2UsIHByaW1hcmlseSBhbW9uZ3N0IHRoZSBNSV8qIGNvbW1hbmRzLiBUbwo+IGhhbmRsZSB0aGlz LCB0aGUgcGFyc2VyIHByb3ZpZGVzIGEgd2F5IHRvIGRlZmluZSBleHBsaWNpdCAic2tpcCIgZW50 cmllcyBpbiB0aGUKPiBwZXItcmluZyBjb21tYW5kIHRhYmxlcy4KPgo+IE90aGVyIGNvbW1hbmQg dGFibGUgZW50cmllcyB3aWxsIG1hcCBmYWlybHkgZGlyZWN0bHkgdG8gaGlnaCBsZXZlbCBjYXRl Z29yaWVzCj4gbWVudGlvbmVkIGFib3ZlOiByZWplY3RlZCwgbWFzdGVyLW9ubHksIHJlZ2lzdGVy IHdoaXRlbGlzdC4gQSBudW1iZXIgb2YgY2hlY2tzLAo+IGluY2x1ZGluZyB0aGUgcHJpdmlsZWdl ZCBtZW1vcnkgY2hlY2tzLCBhcmUgaW1wbGVtZW50ZWQgdmlhIGEgZ2VuZXJhbCBiaXRtYXNraW5n Cj4gbWVjaGFuaXNtLgo+Cj4gT1RDLVRyYWNrZXI6IEFYSUEtNDYzMQo+IENoYW5nZS1JZDogSTUw Yjk4YzcxYzY2NTU4OTMyOTFjNzhhMmQxYjg5NTQ1NzdiMzdhMzAKPiBTaWduZWQtb2ZmLWJ5OiBC cmFkIFZvbGtpbiA8YnJhZGxleS5kLnZvbGtpbkBpbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMyArLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYyAgICAgfCA0MDQgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAg IHwgIDk0ICsrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZl ci5jIHwgIDE3ICsrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGFyYW1zLmMgICAgICAg ICB8ICAgNSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyAgICB8 ICAgMiArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCAgICB8ICAz MiArKysKPiAgNyBmaWxlcyBjaGFuZ2VkLCA1NTYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFy c2VyLmMKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggNDg1MDQ5NC4uMmRhODFiZiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTQ3LDcgKzQ3LDggQEAgaTkxNS15IDo9IGk5MTVf ZHJ2Lm8gaTkxNV9kbWEubyBpOTE1X2lycS5vIFwKPiAgCSAgZHZvX3RmcDQxMC5vIFwKPiAgCSAg ZHZvX3NpbDE2NC5vIFwKPiAgCSAgZHZvX25zMjUwMS5vIFwKPiAtCSAgaTkxNV9nZW1fZG1hYnVm Lm8KPiArCSAgaTkxNV9nZW1fZG1hYnVmLm8gXAo+ICsJICBpOTE1X2NtZF9wYXJzZXIubwoKSWYg eW91IGFkZCB0aGlzIGFueXdoZXJlIGJ1dCBsYXN0LCB5b3Ugb25seSBuZWVkIHRvIHRvdWNoIG9u ZSBsaW5lCmluc3RlYWQgb2YgdHdvLiBJdCdzIG5pdHBpY2t5LCBidXQgaGVscHMgd2l0aCB0aGlu Z3MgbGlrZSBnaXQgYmxhbWUKKHdoaWNoIHdvdWxkIG5vdyBwb2ludCBhdCB5b3UgZm9yIGk5MTVf Z2VtX2RtYWJ1Zi5vIHRvbyA7KS4KCj4gIAo+ICBpOTE1LSQoQ09ORklHX0NPTVBBVCkgICArPSBp OTE1X2lvYzMyLm8KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Y21kX3BhcnNlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjc2MzlkYmMKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMKPiBAQCAt MCwwICsxLDQwNCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxMyBJbnRlbCBDb3Jwb3Jh dGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsg KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsg KiAgICBCcmFkIFZvbGtpbiA8YnJhZGxleS5kLnZvbGtpbkBpbnRlbC5jb20+Cj4gKyAqCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKwo+ICsjZGVmaW5lIENMSUVOVF9NQVNL ICAgICAgMHhFMDAwMDAwMAo+ICsjZGVmaW5lIFNVQkNMSUVOVF9NQVNLICAgMHgxODAwMDAwMAo+ ICsjZGVmaW5lIE1JX0NMSUVOVCAgICAgICAgMHgwMDAwMDAwMAo+ICsjZGVmaW5lIFJDX0NMSUVO VCAgICAgICAgMHg2MDAwMDAwMAo+ICsjZGVmaW5lIEJDX0NMSUVOVCAgICAgICAgMHg0MDAwMDAw MAo+ICsjZGVmaW5lIE1FRElBX1NVQkNMSUVOVCAgMHgxMDAwMDAwMAo+ICsKPiArc3RhdGljIHUz MiBnZW43X3JlbmRlcl9nZXRfY21kX2xlbmd0aF9tYXNrKHUzMiBjbWRfaGVhZGVyKQo+ICt7Cj4g Kwl1MzIgY2xpZW50ID0gY21kX2hlYWRlciAmIENMSUVOVF9NQVNLOwo+ICsJdTMyIHN1YmNsaWVu dCA9IGNtZF9oZWFkZXIgJiBTVUJDTElFTlRfTUFTSzsKPiArCj4gKwlpZiAoY2xpZW50ID09IE1J X0NMSUVOVCkKPiArCQlyZXR1cm4gMHgzRjsKPiArCWVsc2UgaWYgKGNsaWVudCA9PSBSQ19DTElF TlQpIHsKPiArCQlpZiAoc3ViY2xpZW50ID09IE1FRElBX1NVQkNMSUVOVCkKPiArCQkJcmV0dXJu IDB4RkZGRjsKPiArCQllbHNlCj4gKwkJCXJldHVybiAweEZGOwo+ICsJfQo+ICsKPiArCURSTV9E RUJVR19EUklWRVIoIkNNRDogQWJub3JtYWwgcmNzIGNtZCBsZW5ndGghIDB4JTA4WFxuIiwgY21k X2hlYWRlcik7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHUzMiBnZW43X2JzZF9n ZXRfY21kX2xlbmd0aF9tYXNrKHUzMiBjbWRfaGVhZGVyKQo+ICt7Cj4gKwl1MzIgY2xpZW50ID0g Y21kX2hlYWRlciAmIENMSUVOVF9NQVNLOwo+ICsJdTMyIHN1YmNsaWVudCA9IGNtZF9oZWFkZXIg JiBTVUJDTElFTlRfTUFTSzsKPiArCj4gKwlpZiAoY2xpZW50ID09IE1JX0NMSUVOVCkKPiArCQly ZXR1cm4gMHgzRjsKPiArCWVsc2UgaWYgKGNsaWVudCA9PSBSQ19DTElFTlQpIHsKPiArCQlpZiAo c3ViY2xpZW50ID09IE1FRElBX1NVQkNMSUVOVCkKPiArCQkJcmV0dXJuIDB4RkZGOwo+ICsJCWVs c2UKPiArCQkJcmV0dXJuIDB4RkY7Cj4gKwl9Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiQ01E OiBBYm5vcm1hbCBic2QgY21kIGxlbmd0aCEgMHglMDhYXG4iLCBjbWRfaGVhZGVyKTsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGdlbjdfYmx0X2dldF9jbWRfbGVuZ3RoX21h c2sodTMyIGNtZF9oZWFkZXIpCj4gK3sKPiArCXUzMiBjbGllbnQgPSBjbWRfaGVhZGVyICYgQ0xJ RU5UX01BU0s7Cj4gKwo+ICsJaWYgKGNsaWVudCA9PSBNSV9DTElFTlQpCj4gKwkJcmV0dXJuIDB4 M0Y7Cj4gKwllbHNlIGlmIChjbGllbnQgPT0gQkNfQ0xJRU5UKQo+ICsJCXJldHVybiAweEZGOwo+ ICsKPiArCURSTV9ERUJVR19EUklWRVIoIkNNRDogQWJub3JtYWwgYmx0IGNtZCBsZW5ndGghIDB4 JTA4WFxuIiwgY21kX2hlYWRlcik7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgdmFsaWRhdGVfY21kc19zb3J0ZWQoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQo+ ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlpZiAoIXJpbmctPmNtZF90YWJsZXMgfHwgcmluZy0+Y21k X3RhYmxlX2NvdW50ID09IDApCj4gKwkJcmV0dXJuOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBy aW5nLT5jbWRfdGFibGVfY291bnQ7IGkrKykgewo+ICsJCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9j bWRfdGFibGUgKnRhYmxlID0gJnJpbmctPmNtZF90YWJsZXNbaV07Cj4gKwkJdTMyIHByZXZpb3Vz ID0gMDsKPiArCQlpbnQgajsKPiArCj4gKwkJZm9yIChqID0gMDsgaiA8IHRhYmxlLT5jb3VudDsg aisrKSB7Cj4gKwkJCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9jbWRfZGVzY3JpcHRvciAqZGVzYyA9 Cj4gKwkJCQkmdGFibGUtPnRhYmxlW2ldOwo+ICsJCQl1MzIgY3VyciA9IGRlc2MtPmNtZC52YWx1 ZSAmIGRlc2MtPmNtZC5tYXNrOwo+ICsKPiArCQkJaWYgKGN1cnIgPCBwcmV2aW91cykgewo+ICsJ CQkJRFJNX0VSUk9SKCJDTUQ6IHRhYmxlIG5vdCBzb3J0ZWQgcmluZz0lZCB0YWJsZT0lZCBlbnRy eT0lZCBjbWQ9MHglMDhYXG4iLAo+ICsJCQkJCSAgcmluZy0+aWQsIGksIGosIGN1cnIpOwo+ICsJ CQkJcmV0dXJuOwoKU28gdGhpcyBjaGVja3MgdGhlIGhhbmQtZmlsbGVkIHRhYmxlcywgcmlnaHQ/ CgpJIHRoaW5rIHRoaXMgc2hvdWxkIG5vdCBzdG9wIGF0IHRoZSBmaXJzdCBlcnJvciwgYnV0IHJh dGhlciBzY2FuIHRoZQp3aG9sZSB0YWJsZSBhbmQgRFJNX0VSUk9SIGFsbCBjYXNlcyB3aGVyZSBj dXJyIDwgcHJldmlvdXMsIGFuZCBhZnRlciB0aGUKZnVsbCBzY2FuIEJVR19PTigpIGlmIHRoZXJl IHdlcmUgYW55IGVycm9ycy4KCj4gKwkJCX0KPiArCj4gKwkJCXByZXZpb3VzID0gY3VycjsKPiAr CQl9Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNoZWNrX3NvcnRlZChpbnQgcmluZ19p ZCwgY29uc3QgdTMyICpyZWdfdGFibGUsIGludCByZWdfY291bnQpCj4gK3sKPiArCWludCBpOwo+ ICsJdTMyIHByZXZpb3VzID0gMDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgcmVnX2NvdW50OyBp KyspIHsKPiArCQl1MzIgY3VyciA9IHJlZ190YWJsZVtpXTsKPiArCj4gKwkJaWYgKGN1cnIgPCBw cmV2aW91cykgewo+ICsJCQlEUk1fRVJST1IoIkNNRDogdGFibGUgbm90IHNvcnRlZCByaW5nPSVk IGVudHJ5PSVkIHJlZz0weCUwOFhcbiIsCj4gKwkJCQkgIHJpbmdfaWQsIGksIGN1cnIpOwo+ICsJ CQlyZXR1cm47CgpTYW1lIGhlcmUuCgo+ICsJCX0KPiArCj4gKwkJcHJldmlvdXMgPSBjdXJyOwo+ ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2YWxpZGF0ZV9yZWdzX3NvcnRlZChzdHJ1Y3Qg aW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCj4gK3sKPiArCWlmIChyaW5nLT5yZWdfdGFibGUgJiYg cmluZy0+cmVnX2NvdW50ID4gMCkKPiArCQljaGVja19zb3J0ZWQocmluZy0+aWQsIHJpbmctPnJl Z190YWJsZSwgcmluZy0+cmVnX2NvdW50KTsKPiArCj4gKwlpZiAocmluZy0+bWFzdGVyX3JlZ190 YWJsZSAmJiByaW5nLT5tYXN0ZXJfcmVnX2NvdW50ID4gMCkKPiArCQljaGVja19zb3J0ZWQocmlu Zy0+aWQsIHJpbmctPm1hc3Rlcl9yZWdfdGFibGUsCj4gKwkJCSAgICAgcmluZy0+bWFzdGVyX3Jl Z19jb3VudCk7CgpTb21laG93IEkgdGhpbmsgdGhlIGlmcyBoZXJlIGFyZSByZWR1bmRhbnQuIGNo ZWNrX3NvcnRlZCgpIGlzIGEgbm8tb3AgaWYKcmVnX2NvdW50ID09IDAsIGFuZCBpZiByZWdfY291 bnQgPiAwIHdoaWxlIHJlZ190YWJsZSA9PSBOVUxMLCBpdApkZXNlcnZlcyB0byBvb3BzIQoKPiAr fQo+ICsKPiArdm9pZCBpOTE1X2NtZF9wYXJzZXJfaW5pdF9yaW5nKHN0cnVjdCBpbnRlbF9yaW5n X2J1ZmZlciAqcmluZykKPiArewo+ICsJaWYgKCFJU19HRU43KHJpbmctPmRldikpCj4gKwkJcmV0 dXJuOwo+ICsKPiArCXN3aXRjaCAocmluZy0+aWQpIHsKPiArCWNhc2UgUkNTOgo+ICsJCXJpbmct PmdldF9jbWRfbGVuZ3RoX21hc2sgPSBnZW43X3JlbmRlcl9nZXRfY21kX2xlbmd0aF9tYXNrOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSBWQ1M6Cj4gKwkJcmluZy0+Z2V0X2NtZF9sZW5ndGhfbWFzayA9 IGdlbjdfYnNkX2dldF9jbWRfbGVuZ3RoX21hc2s7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEJDUzoK PiArCQlyaW5nLT5nZXRfY21kX2xlbmd0aF9tYXNrID0gZ2VuN19ibHRfZ2V0X2NtZF9sZW5ndGhf bWFzazsKPiArCQlicmVhazsKPiArCWNhc2UgVkVDUzoKPiArCQkvKiBWRUNTIGNhbiB1c2UgdGhl IHNhbWUgbGVuZ3RoX21hc2sgZnVuY3Rpb24gYXMgVkNTICovCj4gKwkJcmluZy0+Z2V0X2NtZF9s ZW5ndGhfbWFzayA9IGdlbjdfYnNkX2dldF9jbWRfbGVuZ3RoX21hc2s7Cj4gKwkJYnJlYWs7Cj4g KwlkZWZhdWx0Ogo+ICsJCURSTV9FUlJPUigiQ01EOiBjbWRfcGFyc2VyX2luaXQgd2l0aCB1bmtu b3duIHJpbmc6ICVkXG4iLAo+ICsJCQkgIHJpbmctPmlkKTsKCllvdSdsbCBvb3BzIGxhdGVyIGZv ciBjYWxsaW5nIE5VTEwgcmluZy0+Z2V0X2NtZF9sZW5ndGhfbWFzaygpLCBzbyBtaWdodAphcyB3 ZWxsIEJVRygpIGhlcmUuCgo+ICsJfQo+ICsKPiArCXZhbGlkYXRlX2NtZHNfc29ydGVkKHJpbmcp Owo+ICsJdmFsaWRhdGVfcmVnc19zb3J0ZWQocmluZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2k5MTVfY21kX2Rlc2NyaXB0b3IqCj4gK2ZpbmRfY21kX2luX3RhYmxlKGNv bnN0IHN0cnVjdCBkcm1faTkxNV9jbWRfdGFibGUgKnRhYmxlLAo+ICsJCSAgdTMyIGNtZF9oZWFk ZXIpCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCB0YWJsZS0+Y291bnQ7 IGkrKykgewo+ICsJCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9jbWRfZGVzY3JpcHRvciAqZGVzYyA9 ICZ0YWJsZS0+dGFibGVbaV07Cj4gKwkJdTMyIG1hc2tlZF9jbWQgPSBkZXNjLT5jbWQubWFzayAm IGNtZF9oZWFkZXI7Cj4gKwkJdTMyIG1hc2tlZF92YWx1ZSA9IGRlc2MtPmNtZC52YWx1ZSAmIGRl c2MtPmNtZC5tYXNrOwo+ICsKPiArCQlpZiAobWFza2VkX2NtZCA9PSBtYXNrZWRfdmFsdWUpCj4g KwkJCXJldHVybiBkZXNjOwo+ICsJfQo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICsv Kgo+ICsgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIGRlc2NyaXB0b3IgZm9yIHRoZSBjb21tYW5k IHNwZWNpZmllZCBieSBjbWRfaGVhZGVyLgo+ICsgKgo+ICsgKiBUaGUgY2FsbGVyIG11c3Qgc3Vw cGx5IHNwYWNlIGZvciBhIGRlZmF1bHQgZGVzY3JpcHRvciB2aWEgdGhlIGRlZmF1bHRfZGVzYwo+ ICsgKiBwYXJhbWV0ZXIuIElmIG5vIGRlc2NyaXB0b3IgZm9yIHRoZSBzcGVjaWZpZWQgY29tbWFu ZCBleGlzdHMgaW4gdGhlIHJpbmcncwo+ICsgKiBjb21tYW5kIHBhcnNlciB0YWJsZXMsIHRoaXMg ZnVuY3Rpb24gZmlsbHMgaW4gZGVmYXVsdF9kZXNjIGJhc2VkIG9uIHRoZQo+ICsgKiByaW5nJ3Mg ZGVmYXVsdCBsZW5ndGggZW5jb2RpbmcgYW5kIHJldHVybnMgZGVmYXVsdF9kZXNjLgo+ICsgKi8K PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9jbWRfZGVzY3JpcHRvcioKPiArZmluZF9j bWQoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAo+ICsJIHUzMiBjbWRfaGVhZGVyLAo+ ICsJIHN0cnVjdCBkcm1faTkxNV9jbWRfZGVzY3JpcHRvciAqZGVmYXVsdF9kZXNjKQo+ICt7Cj4g Kwl1MzIgbWFzazsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCByaW5nLT5jbWRf dGFibGVfY291bnQ7IGkrKykgewo+ICsJCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9jbWRfZGVzY3Jp cHRvciAqZGVzYzsKPiArCj4gKwkJZGVzYyA9IGZpbmRfY21kX2luX3RhYmxlKCZyaW5nLT5jbWRf dGFibGVzW2ldLCBjbWRfaGVhZGVyKTsKPiArCQlpZiAoZGVzYykKPiArCQkJcmV0dXJuIGRlc2M7 Cj4gKwl9Cj4gKwo+ICsJbWFzayA9IHJpbmctPmdldF9jbWRfbGVuZ3RoX21hc2soY21kX2hlYWRl cik7Cj4gKwlpZiAoIW1hc2spCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJQlVHX09OKCFkZWZh dWx0X2Rlc2MpOwo+ICsJZGVmYXVsdF9kZXNjLT5mbGFncyA9IENNRF9ERVNDX1NLSVA7Cj4gKwlk ZWZhdWx0X2Rlc2MtPmxlbmd0aC5tYXNrID0gbWFzazsKPiArCj4gKwlyZXR1cm4gZGVmYXVsdF9k ZXNjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZhbGlkX3JlZyhjb25zdCB1MzIgKnRhYmxlLCBp bnQgY291bnQsIHUzMiBhZGRyKQoKSSBsaWtlIGJvb2xzIGZvciBib29sZWFuIHN0dWZmLgoKPiAr ewo+ICsJaWYgKHRhYmxlICYmIGNvdW50ICE9IDApIHsKPiArCQlpbnQgaTsKPiArCj4gKwkJZm9y IChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKPiArCQkJaWYgKHRhYmxlW2ldID09IGFkZHIpCj4g KwkJCQlyZXR1cm4gMTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyB1MzIgKnZtYXBfYmF0Y2goc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK PiArewo+ICsJaW50IGk7Cj4gKwl2b2lkICphZGRyID0gTlVMTDsKPiArCXN0cnVjdCBzZ19wYWdl X2l0ZXIgc2dfaXRlcjsKPiArCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4gKwo+ICsJcGFnZXMgPSBk cm1fbWFsbG9jX2FiKG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQsIHNpemVvZigqcGFnZXMp KTsKPiArCWlmIChwYWdlcyA9PSBOVUxMKSB7Cj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiRmFpbGVk IHRvIGdldCBzcGFjZSBmb3IgcGFnZXNcbiIpOwo+ICsJCWdvdG8gZmluaXNoOwo+ICsJfQo+ICsK PiArCWkgPSAwOwo+ICsJZm9yX2VhY2hfc2dfcGFnZShvYmotPnBhZ2VzLT5zZ2wsICZzZ19pdGVy LCBvYmotPnBhZ2VzLT5uZW50cywgMCkgewo+ICsJCXBhZ2VzW2ldID0gc2dfcGFnZV9pdGVyX3Bh Z2UoJnNnX2l0ZXIpOwo+ICsJCWkrKzsKPiArCX0KPiArCj4gKwlhZGRyID0gdm1hcChwYWdlcywg aSwgMCwgUEFHRV9LRVJORUwpOwo+ICsJaWYgKGFkZHIgPT0gTlVMTCkgewo+ICsJCURSTV9ERUJV R19EUklWRVIoIkZhaWxlZCB0byB2bWFwIHBhZ2VzXG4iKTsKPiArCQlnb3RvIGZpbmlzaDsKPiAr CX0KPiArCj4gK2ZpbmlzaDoKPiArCWlmIChwYWdlcykKPiArCQlkcm1fZnJlZV9sYXJnZShwYWdl cyk7Cj4gKwlyZXR1cm4gKHUzMiopYWRkcjsKPiArfQo+ICsKPiAraW50IGk5MTVfbmVlZHNfY21k X3BhcnNlcihzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCgpib29sCgo+ICt7Cj4gKwkv KiBObyBjb21tYW5kIHRhYmxlcyBpbmRpY2F0ZXMgYSBwbGF0Zm9ybSB3aXRob3V0IHBhcnNpbmcg Ki8KPiArCWlmICghcmluZy0+Y21kX3RhYmxlcykKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXR1 cm4gaTkxNS5lbmFibGVfY21kX3BhcnNlcjsKPiArfQo+ICsKPiArI2RlZmluZSBMRU5HVEhfQklB UyAyCj4gKwo+ICtpbnQgaTkxNV9wYXJzZV9jbWRzKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAq cmluZywKPiArCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJhdGNoX29iaiwKPiAr CQkgICAgdTMyIGJhdGNoX3N0YXJ0X29mZnNldCwKPiArCQkgICAgYm9vbCBpc19tYXN0ZXIpCj4g K3sKPiArCWludCByZXQgPSAwOwo+ICsJdTMyICpjbWQsICpiYXRjaF9iYXNlLCAqYmF0Y2hfZW5k Owo+ICsJc3RydWN0IGRybV9pOTE1X2NtZF9kZXNjcmlwdG9yIGRlZmF1bHRfZGVzYyA9IHsgMCB9 Owo+ICsJaW50IG5lZWRzX2NsZmx1c2ggPSAwOwo+ICsKPiArCXJldCA9IGk5MTVfZ2VtX29ial9w cmVwYXJlX3NobWVtX3JlYWQoYmF0Y2hfb2JqLCAmbmVlZHNfY2xmbHVzaCk7Cj4gKwlpZiAocmV0 KSB7Cj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiQ01EOiBmYWlsZWQgdG8gcHJlcCByZWFkXG4iKTsK PiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWJhdGNoX2Jhc2UgPSB2bWFwX2JhdGNoKGJh dGNoX29iaik7Cj4gKwlpZiAoIWJhdGNoX2Jhc2UpIHsKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJD TUQ6IEZhaWxlZCB0byB2bWFwIGJhdGNoXG4iKTsKPiArCQlpOTE1X2dlbV9vYmplY3RfdW5waW5f cGFnZXMoYmF0Y2hfb2JqKTsKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiArCj4gKwlpZiAo bmVlZHNfY2xmbHVzaCkKPiArCQlkcm1fY2xmbHVzaF92aXJ0X3JhbmdlKChjaGFyICopYmF0Y2hf YmFzZSwgYmF0Y2hfb2JqLT5iYXNlLnNpemUpOwo+ICsKPiArCWNtZCA9IGJhdGNoX2Jhc2UgKyAo YmF0Y2hfc3RhcnRfb2Zmc2V0IC8gc2l6ZW9mKCpjbWQpKTsKPiArCWJhdGNoX2VuZCA9IGNtZCAr IChiYXRjaF9vYmotPmJhc2Uuc2l6ZSAvIHNpemVvZigqYmF0Y2hfZW5kKSk7Cj4gKwo+ICsJd2hp bGUgKGNtZCA8IGJhdGNoX2VuZCkgewo+ICsJCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9jbWRfZGVz Y3JpcHRvciAqZGVzYzsKPiArCQl1MzIgbGVuZ3RoOwo+ICsKPiArCQlpZiAoKmNtZCA9PSBNSV9C QVRDSF9CVUZGRVJfRU5EKQo+ICsJCQlicmVhazsKPiArCj4gKwkJZGVzYyA9IGZpbmRfY21kKHJp bmcsICpjbWQsICZkZWZhdWx0X2Rlc2MpOwo+ICsJCWlmICghZGVzYykgewo+ICsJCQlEUk1fREVC VUdfRFJJVkVSKCJDTUQ6IFVucmVjb2duaXplZCBjb21tYW5kOiAweCUwOFhcbiIsCj4gKwkJCQkJ ICpjbWQpOwo+ICsJCQlyZXQgPSAtRUlOVkFMOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJ CWlmIChkZXNjLT5mbGFncyAmIENNRF9ERVNDX0ZJWEVEKQo+ICsJCQlsZW5ndGggPSBkZXNjLT5s ZW5ndGguZml4ZWQ7Cj4gKwkJZWxzZQo+ICsJCQlsZW5ndGggPSAoKCpjbWQgJiBkZXNjLT5sZW5n dGgubWFzaykgKyBMRU5HVEhfQklBUyk7Cj4gKwo+ICsJCWlmICgoYmF0Y2hfZW5kIC0gY21kKSA8 IGxlbmd0aCkgewo+ICsJCQlEUk1fREVCVUdfRFJJVkVSKCJDTUQ6IENvbW1hbmQgbGVuZ3RoIGV4 Y2VlZHMgYmF0Y2ggbGVuZ3RoOiAweCUwOFggbGVuZ3RoPSVkIGJhdGNobGVuPSVsZFxuIiwKPiAr CQkJCQkgKmNtZCwKPiArCQkJCQkgbGVuZ3RoLAo+ICsJCQkJCSBiYXRjaF9lbmQgLSBjbWQpOwo+ ICsJCQlyZXQgPSAtRUlOVkFMOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWlmIChkZXNj LT5mbGFncyAmIENNRF9ERVNDX1JFSkVDVCkgewo+ICsJCQlEUk1fREVCVUdfRFJJVkVSKCJDTUQ6 IFJlamVjdGVkIGNvbW1hbmQ6IDB4JTA4WFxuIiwgKmNtZCk7Cj4gKwkJCXJldCA9IC1FSU5WQUw7 Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJaWYgKChkZXNjLT5mbGFncyAmIENNRF9ERVND X01BU1RFUikgJiYgIWlzX21hc3Rlcikgewo+ICsJCQlEUk1fREVCVUdfRFJJVkVSKCJDTUQ6IFJl amVjdGVkIG1hc3Rlci1vbmx5IGNvbW1hbmQ6IDB4JTA4WFxuIiwKPiArCQkJCQkgKmNtZCk7Cj4g KwkJCXJldCA9IC1FSU5WQUw7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJaWYgKGRlc2Mt PmZsYWdzICYgQ01EX0RFU0NfUkVHSVNURVIpIHsKPiArCQkJdTMyIHJlZ19hZGRyID0gY21kW2Rl c2MtPnJlZy5vZmZzZXRdICYgZGVzYy0+cmVnLm1hc2s7Cj4gKwo+ICsJCQlpZiAoIXZhbGlkX3Jl ZyhyaW5nLT5yZWdfdGFibGUsCj4gKwkJCQkgICAgICAgcmluZy0+cmVnX2NvdW50LCByZWdfYWRk cikpIHsKPiArCQkJCWlmICghaXNfbWFzdGVyIHx8Cj4gKwkJCQkgICAgIXZhbGlkX3JlZyhyaW5n LT5tYXN0ZXJfcmVnX3RhYmxlLAo+ICsJCQkJCSAgICAgICByaW5nLT5tYXN0ZXJfcmVnX2NvdW50 LAo+ICsJCQkJCSAgICAgICByZWdfYWRkcikpIHsKPiArCQkJCQlEUk1fREVCVUdfRFJJVkVSKCJD TUQ6IFJlamVjdGVkIHJlZ2lzdGVyIDB4JTA4WCBpbiBjb21tYW5kOiAweCUwOFggKHJpbmc9JWQp XG4iLAo+ICsJCQkJCQkJIHJlZ19hZGRyLAo+ICsJCQkJCQkJICpjbWQsCj4gKwkJCQkJCQkgcmlu Zy0+aWQpOwo+ICsJCQkJCXJldCA9IC1FSU5WQUw7Cj4gKwkJCQkJYnJlYWs7Cj4gKwkJCQl9Cj4g KwkJCX0KPiArCQl9Cj4gKwo+ICsJCWlmIChkZXNjLT5mbGFncyAmIENNRF9ERVNDX0JJVE1BU0sp IHsKPiArCQkJaW50IGk7Cj4gKwo+ICsJCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+Yml0c19jb3Vu dDsgaSsrKSB7Cj4gKwkJCQl1MzIgZHdvcmQgPSBjbWRbZGVzYy0+Yml0c1tpXS5vZmZzZXRdICYK PiArCQkJCQlkZXNjLT5iaXRzW2ldLm1hc2s7Cj4gKwo+ICsJCQkJaWYgKGR3b3JkICE9IGRlc2Mt PmJpdHNbaV0uZXhwZWN0ZWQpIHsKPiArCQkJCQlEUk1fREVCVUdfRFJJVkVSKCJDTUQ6IFJlamVj dGVkIGNvbW1hbmQgMHglMDhYIGZvciBiaXRtYXNrIDB4JTA4WCAoZXhwPTB4JTA4WCBhY3Q9MHgl MDhYKSAocmluZz0lZClcbiIsCj4gKwkJCQkJCQkgKmNtZCwKPiArCQkJCQkJCSBkZXNjLT5iaXRz W2ldLm1hc2ssCj4gKwkJCQkJCQkgZGVzYy0+Yml0c1tpXS5leHBlY3RlZCwKPiArCQkJCQkJCSBk d29yZCwgcmluZy0+aWQpOwo+ICsJCQkJCXJldCA9IC1FSU5WQUw7Cj4gKwkJCQkJYnJlYWs7Cj4g KwkJCQl9Cj4gKwkJCX0KPiArCj4gKwkJCWlmIChyZXQpCj4gKwkJCQlicmVhazsKPiArCQl9Cj4g Kwo+ICsJCWNtZCArPSBsZW5ndGg7Cj4gKwl9Cj4gKwo+ICsJaWYgKGNtZCA+PSBiYXRjaF9lbmQp IHsKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJDTUQ6IEdvdCB0byB0aGUgZW5kIG9mIHRoZSBidWZm ZXIgdy9vIGEgQkJFIGNtZCFcbiIpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJ dnVubWFwKGJhdGNoX2Jhc2UpOwo+ICsKPiArCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhi YXRjaF9vYmopOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmgKPiBpbmRleCBiZmIzMGRmLi44YWVkODBmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o Cj4gQEAgLTE3NjUsNiArMTc2NSw5MSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlIHsK PiAgCWF0b21pY190IHJwc193YWl0X2Jvb3N0Owo+ICB9Owo+ICAKPiArLyoqCj4gKyAqIEEgY29t bWFuZCB0aGF0IHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgYnkgdGhlIGNvbW1hbmQgcGFyc2Vy Lgo+ICsgKi8KCllvdSBoYXZlIHBsZW50eSBvZiBrZXJuZWwtZG9jIGNvbW1lbnRzIGhlcmUgYW5k IGluIG90aGVyIHBhdGNoZXMuIFRoZXkKZG8gZXhwZWN0IGEgY2VydGFpbiBmb3JtYXQsIGhvd2V2 ZXIuIFBsZWFzZSBlaXRoZXIgbWFrZSB0aGVtIHJlZ3VsYXIKY29tbWVudHMgKHRoZSBlYXN5IHdh eSkgb3IgYWRoZXJlIHRvIHByb3BlciBrZXJuZWwtZG9jIGZvcm1hdC4KCj4gK3N0cnVjdCBkcm1f aTkxNV9jbWRfZGVzY3JpcHRvciB7Cj4gKwkvKioKPiArCSAqIEZsYWdzIGRlc2NyaWJpbmcgaG93 IHRoZSBjb21tYW5kIHBhcnNlciBwcm9jZXNzZXMgdGhlIGNvbW1hbmQuCj4gKwkgKgo+ICsJICog Q01EX0RFU0NfRklYRUQ6IFRoZSBjb21tYW5kIGhhcyBhIGZpeGVkIGxlbmd0aCBpZiB0aGlzIGlz IHNldCwKPiArCSAqICAgICAgICAgICAgICAgICBhIGxlbmd0aCBtYXNrIGlmIG5vdCBzZXQKPiAr CSAqIENNRF9ERVNDX1NLSVA6IFRoZSBjb21tYW5kIGlzIGFsbG93ZWQgYnV0IGRvZXMgbm90IGZv bGxvdyB0aGUKPiArCSAqICAgICAgICAgICAgICAgIHN0YW5kYXJkIGxlbmd0aCBlbmNvZGluZyBm b3IgdGhlIG9wY29kZSByYW5nZSBpbgo+ICsJICogICAgICAgICAgICAgICAgd2hpY2ggaXQgZmFs bHMKPiArCSAqIENNRF9ERVNDX1JFSkVDVDogVGhlIGNvbW1hbmQgaXMgbmV2ZXIgYWxsb3dlZAo+ ICsJICogQ01EX0RFU0NfUkVHSVNURVI6IFRoZSBjb21tYW5kIHNob3VsZCBiZSBjaGVja2VkIGFn YWluc3QgdGhlCj4gKwkgKiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgd2hpdGVsaXN0IGZv ciB0aGUgYXBwcm9wcmlhdGUgcmluZwo+ICsJICogQ01EX0RFU0NfTUFTVEVSOiBUaGUgY29tbWFu ZCBpcyBhbGxvd2VkIGlmIHRoZSBzdWJtaXR0aW5nIHByb2Nlc3MKPiArCSAqICAgICAgICAgICAg ICAgICAgaXMgdGhlIERSTSBtYXN0ZXIKPiArCSAqLwo+ICsJdTMyIGZsYWdzOwo+ICsjZGVmaW5l IENNRF9ERVNDX0ZJWEVEICAgICgxPDwwKQo+ICsjZGVmaW5lIENNRF9ERVNDX1NLSVAgICAgICgx PDwxKQo+ICsjZGVmaW5lIENNRF9ERVNDX1JFSkVDVCAgICgxPDwyKQo+ICsjZGVmaW5lIENNRF9E RVNDX1JFR0lTVEVSICgxPDwzKQo+ICsjZGVmaW5lIENNRF9ERVNDX0JJVE1BU0sgICgxPDw0KQo+ ICsjZGVmaW5lIENNRF9ERVNDX01BU1RFUiAgICgxPDw1KQoKRmVlbHMgbGlrZSBmbGFncyBzaG91 bGQgYmUgbmFtZWQgRkxBRywgbm90IERFU0MuICpzaHJ1ZyouCgo+ICsKPiArCS8qKgo+ICsJICog VGhlIGNvbW1hbmQncyB1bmlxdWUgaWRlbnRpZmljYXRpb24gYml0cyBhbmQgdGhlIGJpdG1hc2sg dG8gZ2V0IHRoZW0uCj4gKwkgKiBUaGlzIGlzbid0IHN0cmljdGx5IHRoZSBvcGNvZGUgZmllbGQg YXMgZGVmaW5lZCBpbiB0aGUgc3BlYyBhbmQgbWF5Cj4gKwkgKiBhbHNvIGluY2x1ZGUgdHlwZSwg c3VidHlwZSwgYW5kL29yIHN1Ym9wIGZpZWxkcy4KPiArCSAqLwo+ICsJc3RydWN0IHsKPiArCQl1 MzIgdmFsdWU7Cj4gKwkJdTMyIG1hc2s7Cj4gKwl9IGNtZDsKPiArCj4gKwkvKioKPiArCSAqIFRo ZSBjb21tYW5kJ3MgbGVuZ3RoLiBUaGUgY29tbWFuZCBpcyBlaXRoZXIgZml4ZWQgbGVuZ3RoIChp LmUuIGRvZXMKPiArCSAqIG5vdCBpbmNsdWRlIGEgbGVuZ3RoIGZpZWxkKSBvciBoYXMgYSBsZW5n dGggZmllbGQgbWFzay4gVGhlIGZsYWcKPiArCSAqIENNRF9ERVNDX0ZJWEVEIGluZGljYXRlcyBh IGZpeGVkIGxlbmd0aC4gT3RoZXJ3aXNlLCB0aGUgY29tbWFuZCBoYXMKPiArCSAqIGEgbGVuZ3Ro IG1hc2suIEFsbCBjb21tYW5kIGVudHJpZXMgaW4gYSBjb21tYW5kIHRhYmxlIG11c3QgaW5jbHVk ZQo+ICsJICogbGVuZ3RoIGluZm9ybWF0aW9uLgo+ICsJICovCj4gKwl1bmlvbiB7Cj4gKwkJdTMy IGZpeGVkOwo+ICsJCXUzMiBtYXNrOwo+ICsJfSBsZW5ndGg7Cj4gKwo+ICsJLyoqCj4gKwkgKiBE ZXNjcmliZXMgd2hlcmUgdG8gZmluZCBhIHJlZ2lzdGVyIGFkZHJlc3MgaW4gdGhlIGNvbW1hbmQg dG8gY2hlY2sKPiArCSAqIGFnYWluc3QgdGhlIHJpbmcncyByZWdpc3RlciB3aGl0ZWxpc3QuIE9u bHkgdmFsaWQgaWYgZmxhZ3MgaGFzIHRoZQo+ICsJICogQ01EX0RFU0NfUkVHSVNURVIgYml0IHNl dC4KPiArCSAqLwo+ICsJc3RydWN0IHsKPiArCQl1MzIgb2Zmc2V0Owo+ICsJCXUzMiBtYXNrOwo+ ICsJfSByZWc7Cj4gKwo+ICsjZGVmaW5lIE1BWF9DTURfREVTQ19CSVRNQVNLUyAzCj4gKwkvKioK PiArCSAqIERlc2NyaWJlcyBjb21tYW5kIGNoZWNrcyB3aGVyZSBhIHBhcnRpY3VsYXIgZHdvcmQg aXMgbWFza2VkIGFuZAo+ICsJICogY29tcGFyZWQgYWdhaW5zdCBhbiBleHBlY3RlZCB2YWx1ZS4g SWYgdGhlIGNvbW1hbmQgZG9lcyBub3QgbWF0Y2gKPiArCSAqIHRoZSBleHBlY3RlZCB2YWx1ZSwg dGhlIHBhcnNlciByZWplY3RzIGl0LiBPbmx5IHZhbGlkIGlmIGZsYWdzIGhhcwo+ICsJICogdGhl IENNRF9ERVNDX0JJVE1BU0sgYml0IHNldC4KPiArCSAqLwo+ICsJc3RydWN0IHsKPiArCQl1MzIg b2Zmc2V0Owo+ICsJCXUzMiBtYXNrOwo+ICsJCXUzMiBleHBlY3RlZDsKPiArCX0gYml0c1tNQVhf Q01EX0RFU0NfQklUTUFTS1NdOwo+ICsJLyoqIE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIHRo ZSBiaXRzIGFycmF5ICovCj4gKwlpbnQgYml0c19jb3VudDsKPiArfTsKPiArCj4gKy8qKgo+ICsg KiBBIHRhYmxlIG9mIGNvbW1hbmRzIHJlcXVpcmluZyBzcGVjaWFsIGhhbmRsaW5nIGJ5IHRoZSBj b21tYW5kIHBhcnNlci4KPiArICoKPiArICogRWFjaCByaW5nIGhhcyBhbiBhcnJheSBvZiB0YWJs ZXMuIEVhY2ggdGFibGUgY29uc2lzdHMgb2YgYW4gYXJyYXkgb2YgY29tbWFuZAo+ICsgKiBkZXNj cmlwdG9ycywgd2hpY2ggbXVzdCBiZSBzb3J0ZWQgd2l0aCBjb21tYW5kIG9wY29kZXMgaW4gYXNj ZW5kaW5nIG9yZGVyLgo+ICsgKi8KPiArc3RydWN0IGRybV9pOTE1X2NtZF90YWJsZSB7Cj4gKwlj b25zdCBzdHJ1Y3QgZHJtX2k5MTVfY21kX2Rlc2NyaXB0b3IgKnRhYmxlOwo+ICsJaW50IGNvdW50 Owo+ICt9Owo+ICsKPiAgI2RlZmluZSBJTlRFTF9JTkZPKGRldikJKHRvX2k5MTUoZGV2KS0+aW5m bykKPiAgCj4gICNkZWZpbmUgSVNfSTgzMChkZXYpCQkoKGRldiktPnBkZXYtPmRldmljZSA9PSAw eDM1NzcpCj4gQEAgLTE5MjMsNiArMjAwOCw3IEBAIHN0cnVjdCBpOTE1X3BhcmFtcyB7Cj4gIAli b29sIHByZWZhdWx0X2Rpc2FibGU7Cj4gIAlib29sIHJlc2V0Owo+ICAJaW50IGludmVydF9icmln aHRuZXNzOwo+ICsJaW50IGVuYWJsZV9jbWRfcGFyc2VyOwo+ICB9Owo+ICBleHRlcm4gc3RydWN0 IGk5MTVfcGFyYW1zIGk5MTUgX19yZWFkX21vc3RseTsKPiAgCj4gQEAgLTI0MjgsNiArMjUxNCwx NCBAQCB2b2lkIGk5MTVfZGVzdHJveV9lcnJvcl9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KTsKPiAgdm9pZCBpOTE1X2dldF9leHRyYV9pbnN0ZG9uZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB1aW50MzJfdCAqaW5zdGRvbmUpOwo+ICBjb25zdCBjaGFyICppOTE1X2NhY2hlX2xldmVsX3N0 cihpbnQgdHlwZSk7Cj4gIAo+ICsvKiBpOTE1X2NtZF9wYXJzZXIuYyAqLwo+ICt2b2lkIGk5MTVf Y21kX3BhcnNlcl9pbml0X3Jpbmcoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKTsKPiAr aW50IGk5MTVfbmVlZHNfY21kX3BhcnNlcihzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcp Owo+ICtpbnQgaTkxNV9wYXJzZV9jbWRzKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywK PiArCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJhdGNoX29iaiwKPiArCQkgICAg dTMyIGJhdGNoX3N0YXJ0X29mZnNldCwKPiArCQkgICAgYm9vbCBpc19tYXN0ZXIpOwo+ICsKPiAg LyogaTkxNV9zdXNwZW5kLmMgKi8KPiAgZXh0ZXJuIGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldik7Cj4gIGV4dGVybiBpbnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVj YnVmZmVyLmMKPiBpbmRleCAwMzJkZWY5Li5jOTUzNDQ1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+IEBAIC0xMTgwLDYgKzExODAsMjMgQEAgaTkx NV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ ICAJfQo+ICAJYmF0Y2hfb2JqLT5iYXNlLnBlbmRpbmdfcmVhZF9kb21haW5zIHw9IEk5MTVfR0VN X0RPTUFJTl9DT01NQU5EOwo+ICAKPiArCWlmIChpOTE1X25lZWRzX2NtZF9wYXJzZXIocmluZykp IHsKPiArCQlyZXQgPSBpOTE1X3BhcnNlX2NtZHMocmluZywKPiArCQkJCSAgICAgIGJhdGNoX29i aiwKPiArCQkJCSAgICAgIGFyZ3MtPmJhdGNoX3N0YXJ0X29mZnNldCwKPiArCQkJCSAgICAgIGZp bGUtPmlzX21hc3Rlcik7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBlcnI7Cj4gKwo+ICsJCS8q Cj4gKwkJICogU2V0IHRoZSBESVNQQVRDSF9TRUNVUkUgYml0IHRvIHJlbW92ZSB0aGUgTk9OX1NF Q1VSRSBiaXQKPiArCQkgKiBmcm9tIE1JX0JBVENIX0JVRkZFUl9TVEFSVCBjb21tYW5kcyBpc3N1 ZWQgaW4gdGhlCj4gKwkJICogZGlzcGF0Y2hfZXhlY2J1ZmZlciBpbXBsZW1lbnRhdGlvbnMuIFdl IHNwZWNpZmljYWxseSBkb24ndAo+ICsJCSAqIHdhbnQgdGhhdCBzZXQgd2hlbiB0aGUgY29tbWFu ZCBwYXJzZXIgaXMgZW5hYmxlZC4KPiArCQkgKi8KPiArCQlmbGFncyB8PSBJOTE1X0RJU1BBVENI X1NFQ1VSRTsKPiArCX0KPiArCj4gIAkvKiBzbmIvaXZiL3ZsdiBjb25mbGF0ZSB0aGUgImJhdGNo IGluIHBwZ3R0IiBiaXQgd2l0aCB0aGUgIm5vbi1zZWN1cmUKPiAgCSAqIGJhdGNoIiBiaXQuIEhl bmNlIHdlIG5lZWQgdG8gcGluIHNlY3VyZSBiYXRjaGVzIGludG8gdGhlIGdsb2JhbCBndHQuCj4g IAkgKiBoc3cgc2hvdWxkIGhhdmUgdGhpcyBmaXhlZCwgYnV0IGJkdyBtdWNrcyBpdCB1cCBhZ2Fp bi4gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wYXJhbXMuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGFyYW1zLmMKPiBpbmRleCBjNzQzMDU3Li42ZDNk OTA2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGFyYW1zLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BhcmFtcy5jCj4gQEAgLTQ3LDYgKzQ3LDcg QEAgc3RydWN0IGk5MTVfcGFyYW1zIGk5MTUgX19yZWFkX21vc3RseSA9IHsKPiAgCS5wcmVmYXVs dF9kaXNhYmxlID0gMCwKPiAgCS5yZXNldCA9IHRydWUsCj4gIAkuaW52ZXJ0X2JyaWdodG5lc3Mg PSAwLAo+ICsJLmVuYWJsZV9jbWRfcGFyc2VyID0gMAoKUGxlYXNlIGFkZCBhIGNvbW1hIGluIHRo ZSBlbmQgc28gdGhlIG5leHQgYWRkaXRpb24gd29uJ3QgaGF2ZSB0bywganVzdApsaWtlIHRoaXMg ZG9lc24ndCBoYXZlIHRvIHRvdWNoIHRoZSBwcmV2aW91cyBsaW5lLgoKPiAgfTsKPiAgCj4gIG1v ZHVsZV9wYXJhbV9uYW1lZChtb2Rlc2V0LCBpOTE1Lm1vZGVzZXQsIGludCwgMDQwMCk7Cj4gQEAg LTE1MywzICsxNTQsNyBAQCBNT0RVTEVfUEFSTV9ERVNDKGludmVydF9icmlnaHRuZXNzLAo+ICAJ InJlcG9ydCBQQ0kgZGV2aWNlIElELCBzdWJzeXN0ZW0gdmVuZG9yIGFuZCBzdWJzeXN0ZW0gZGV2 aWNlIElEICIKPiAgCSJ0byBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnLCBpZiB5b3Vy IG1hY2hpbmUgbmVlZHMgaXQuICIKPiAgCSJJdCB3aWxsIHRoZW4gYmUgaW5jbHVkZWQgaW4gYW4g dXBjb21pbmcgbW9kdWxlIHZlcnNpb24uIik7Cj4gKwo+ICttb2R1bGVfcGFyYW1fbmFtZWQoZW5h YmxlX2NtZF9wYXJzZXIsIGk5MTUuZW5hYmxlX2NtZF9wYXJzZXIsIGludCwgMDYwMCk7Cj4gK01P RFVMRV9QQVJNX0RFU0MoZW5hYmxlX2NtZF9wYXJzZXIsCj4gKwkJIkVuYWJsZSBjb21tYW5kIHBh cnNpbmcgKGRlZmF1bHQ6IGZhbHNlKSIpOwoKSWYgaXQncyBhIGJvb2wsIG1ha2UgaXQgYSBib29s LCBvciBjaGFuZ2UgdGhlIGRlZmF1bHQgdGV4dCB0byAwLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcmluZ2J1ZmZlci5jCj4gaW5kZXggYTBkNjFmOC4uNzdmYzYxZCAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPiBAQCAtMTM4OCw2ICsxMzg4LDggQEAg c3RhdGljIGludCBpbnRlbF9pbml0X3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gIAlpZiAoSVNfSTgzMChyaW5nLT5kZXYpIHx8IElTXzg0NUcocmluZy0+ZGV2KSkKPiAgCQly aW5nLT5lZmZlY3RpdmVfc2l6ZSAtPSAxMjg7Cj4gIAo+ICsJaTkxNV9jbWRfcGFyc2VyX2luaXRf cmluZyhyaW5nKTsKPiArCj4gIAlyZXR1cm4gMDsKPiAgCj4gIGVycl91bm1hcDoKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gaW5kZXggNzFhNzNmNC4uY2ZmMmIzNSAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiBAQCAtMTYyLDYg KzE2MiwzOCBAQCBzdHJ1Y3QgIGludGVsX3JpbmdfYnVmZmVyIHsKPiAgCQl1MzIgZ3R0X29mZnNl dDsKPiAgCQl2b2xhdGlsZSB1MzIgKmNwdV9wYWdlOwo+ICAJfSBzY3JhdGNoOwo+ICsKPiArCS8q Kgo+ICsJICogVGFibGVzIG9mIGNvbW1hbmRzIHRoZSBjb21tYW5kIHBhcnNlciBuZWVkcyB0byBr bm93IGFib3V0Cj4gKwkgKiBmb3IgdGhpcyByaW5nLgo+ICsJICovCj4gKwljb25zdCBzdHJ1Y3Qg ZHJtX2k5MTVfY21kX3RhYmxlICpjbWRfdGFibGVzOwo+ICsJaW50IGNtZF90YWJsZV9jb3VudDsK PiArCj4gKwkvKioKPiArCSAqIFRhYmxlIG9mIHJlZ2lzdGVycyBhbGxvd2VkIGluIGNvbW1hbmRz IHRoYXQgcmVhZC93cml0ZSByZWdpc3RlcnMuCj4gKwkgKi8KPiArCWNvbnN0IHUzMiAqcmVnX3Rh YmxlOwo+ICsJaW50IHJlZ19jb3VudDsKPiArCj4gKwkvKioKPiArCSAqIFRhYmxlIG9mIHJlZ2lz dGVycyBhbGxvd2VkIGluIGNvbW1hbmRzIHRoYXQgcmVhZC93cml0ZSByZWdpc3RlcnMsIGJ1dAo+ ICsJICogb25seSBmcm9tIHRoZSBEUk0gbWFzdGVyLgo+ICsJICovCj4gKwljb25zdCB1MzIgKm1h c3Rlcl9yZWdfdGFibGU7Cj4gKwlpbnQgbWFzdGVyX3JlZ19jb3VudDsKPiArCj4gKwkvKioKPiAr CSAqIFJldHVybnMgdGhlIGJpdG1hc2sgZm9yIHRoZSBsZW5ndGggZmllbGQgb2YgdGhlIHNwZWNp ZmllZCBjb21tYW5kLgo+ICsJICogUmV0dXJuIDAgZm9yIGFuIHVucmVjb2duaXplZC9pbnZhbGlk IGNvbW1hbmQuCj4gKwkgKgo+ICsJICogSWYgdGhlIGNvbW1hbmQgcGFyc2VyIGZpbmRzIGFuIGVu dHJ5IGZvciBhIGNvbW1hbmQgaW4gdGhlIHJpbmcncwo+ICsJICogY21kX3RhYmxlcywgaXQgZ2V0 cyB0aGUgY29tbWFuZCdzIGxlbmd0aCBiYXNlZCBvbiB0aGUgdGFibGUgZW50cnkuCj4gKwkgKiBJ ZiBub3QsIGl0IGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSBwZXItcmluZyBs ZW5ndGggZmllbGQKPiArCSAqIGVuY29kaW5nIGZvciB0aGUgY29tbWFuZCAoaS5lLiBjZXJ0YWlu IG9wY29kZSByYW5nZXMgdXNlIGNlcnRhaW4gYml0cwo+ICsJICogdG8gZW5jb2RlIHRoZSBjb21t YW5kIGxlbmd0aCBpbiB0aGUgaGVhZGVyKS4KPiArCSAqLwo+ICsJdTMyICgqZ2V0X2NtZF9sZW5n dGhfbWFzaykodTMyIGNtZF9oZWFkZXIpOwo+ICB9OwoKUGxlbnR5IG9mIG5vbi1jb25mb3JtaW5n IGtlcm5lbC1kb2MgY29tbWVudHMgaGVyZSB0b28uCgo+ICAKPiAgc3RhdGljIGlubGluZSBib29s Cj4gLS0gCj4gMS44LjUuMgo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngKCi0tIApKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5v bG9neSBDZW50ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK