From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH i-g-t 1/3] lib/{igt_sysfs, igt_aux}: Make available to other users kick_fbcon() (unbind_fbcon()), and added helpers to igt_aux. Date: Mon, 24 Oct 2016 10:40:37 +0200 Message-ID: <20161024084037.GG20761@phenom.ffwll.local> References: <20161020193649.11701-1-marius.c.vlad@intel.com> <20161020193649.11701-2-marius.c.vlad@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4610C6E390 for ; Mon, 24 Oct 2016 08:40:41 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id o81so8653061wma.2 for ; Mon, 24 Oct 2016 01:40:41 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20161020193649.11701-2-marius.c.vlad@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Marius Vlad Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBPY3QgMjAsIDIwMTYgYXQgMTA6MzY6NDdQTSArMDMwMCwgTWFyaXVzIFZsYWQgd3Jv dGU6Cj4gUHJldmlvdXNseSB1bmRlciB1bmJpbmRfZmJjb24oKSwgZGlzYWJsZS9lbmFibGUgZnJh bWVidWZmZXIgY29uc29sZS4KPiAKPiBsaWIvaWd0X2F1eDogQWRkZWQgaGVscGVycyB0byBoZWxw IGNvbnZlcnQgc2ggc2NyaXB0cyB0byBDIHZlcnNpb24uIGxpYmttb2QgYW5kCj4gcHJvY3BzIGlu dGVyZmFjZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBNYXJpdXMgVmxhZCA8bWFyaXVzLmMudmxhZEBp bnRlbC5jb20+Cj4gLS0tCj4gIGNvbmZpZ3VyZS5hYyAgICB8ICAgMiArCj4gIGxpYi9NYWtlZmls ZS5hbSB8ICAgMiArCj4gIGxpYi9pZ3RfYXV4LmMgICB8IDI3OCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBsaWIvaWd0X2F1eC5oICAg fCAgIDcgKysKPiAgbGliL2lndF9ndnQuYyAgIHwgIDQzICstLS0tLS0tLQo+ICBsaWIvaWd0X3N5 c2ZzLmMgfCAgNTQgKysrKysrKysrKysKPiAgbGliL2lndF9zeXNmcy5oIHwgICAyICsKPiAgNyBm aWxlcyBjaGFuZ2VkLCAzNDcgaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0pCgpJZiB5b3Ug Z28gd2l0aCBleHRyYWN0aW5nIHN0dWZmIGludG8gaGVscGVycyBJJ2QgZ28gd2l0aCBhIG5ldyBo ZWxwZXIKbGlicmFyeSBsaWtlIGlndF9rbW9kLmMuIE9yIGp1c3Qga2VlcCBpdCBpbi1saW5lIHdp dGggdGVzdHMsIGV4dHJhY3RpbmcKY29kZSBpcyBpbW8gb3ZlcnJhdGVkIDstKQoKQWxzbyBwbHMg bWFrZSBzdXJlIHRoZSBkb2NzIGFyZSBjb3JyZWN0IGFuZCBsb29rIGdvb2QsIHRoZXJlJ3MgYSBi dW5jaCBvZgppc3N1ZXMgd2l0aCB0aGVtIChsaWtlIG5vbi1tYXRjaGluZyBmdW5jdGlvbiBuYW1l cyBiZXR3ZWVuIGNvbW1lbnQgYW5kCmFjdHVhbCBjb2RlKS4KLURhbmllbAoKPiAKPiBkaWZmIC0t Z2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCj4gaW5kZXggNzM1Y2ZkNS4uMmM2ZTQ5 ZCAxMDA2NDQKPiAtLS0gYS9jb25maWd1cmUuYWMKPiArKysgYi9jb25maWd1cmUuYWMKPiBAQCAt MTIxLDYgKzEyMSw4IEBAIEFDX1NVQlNUKEFTU0VNQkxFUl9XQVJOX0NGTEFHUykKPiAgCj4gIFBL R19DSEVDS19NT0RVTEVTKERSTSwgW2xpYmRybV0pCj4gIFBLR19DSEVDS19NT0RVTEVTKFBDSUFD Q0VTUywgW3BjaWFjY2VzcyA+PSAwLjEwXSkKPiArUEtHX0NIRUNLX01PRFVMRVMoS01PRCwgW2xp Ymttb2RdKQo+ICtQS0dfQ0hFQ0tfTU9EVUxFUyhQUk9DUFMsIFtsaWJwcm9jcHNdKQo+ICAKPiAg Y2FzZSAiJHRhcmdldF9jcHUiIGluCj4gIAl4ODYqfGk/ODYpCj4gZGlmZiAtLWdpdCBhL2xpYi9N YWtlZmlsZS5hbSBiL2xpYi9NYWtlZmlsZS5hbQo+IGluZGV4IDRjMDg5M2QuLmUxNzM3YmQgMTAw NjQ0Cj4gLS0tIGEvbGliL01ha2VmaWxlLmFtCj4gKysrIGIvbGliL01ha2VmaWxlLmFtCj4gQEAg LTM0LDYgKzM0LDggQEAgQU1fQ0ZMQUdTICs9ICQoQ0FJUk9fQ0ZMQUdTKQo+ICBsaWJpbnRlbF90 b29sc19sYV9MSUJBREQgPSBcCj4gIAkkKERSTV9MSUJTKSBcCj4gIAkkKFBDSUFDQ0VTU19MSUJT KSBcCj4gKwkkKFBST0NQU19MSUJTKSBcCj4gKwkkKEtNT0RfTElCUykgXAo+ICAJJChDQUlST19M SUJTKSBcCj4gIAkkKExJQlVERVZfTElCUykgXAo+ICAJJChMSUJVTldJTkRfTElCUykgXAo+IGRp ZmYgLS1naXQgYS9saWIvaWd0X2F1eC5jIGIvbGliL2lndF9hdXguYwo+IGluZGV4IDQyMWY2ZDQu LmQxNTA4MTggMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9hdXguYwo+ICsrKyBiL2xpYi9pZ3RfYXV4 LmMKPiBAQCAtNTEsNiArNTEsOSBAQAo+ICAjaW5jbHVkZSA8dGVybWlvcy5oPgo+ICAjaW5jbHVk ZSA8YXNzZXJ0Lmg+Cj4gIAo+ICsjaW5jbHVkZSA8cHJvYy9yZWFkcHJvYy5oPgo+ICsjaW5jbHVk ZSA8bGlia21vZC5oPgo+ICsKPiAgI2luY2x1ZGUgImRybXRlc3QuaCIKPiAgI2luY2x1ZGUgImk5 MTVfZHJtLmgiCj4gICNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCj4gQEAgLTExOTMsNiArMTE5 NiwyODEgQEAgdm9pZCBpZ3Rfc2V0X21vZHVsZV9wYXJhbV9pbnQoY29uc3QgY2hhciAqbmFtZSwg aW50IHZhbCkKPiAgCWlndF9zZXRfbW9kdWxlX3BhcmFtKG5hbWUsIHN0cik7Cj4gIH0KPiAgCj4g Ky8qKgo+ICsgKiBpZ3RfcGtpbGw6Cj4gKyAqIEBzaWc6IFNpZ25hbCB0byBzZW5kCj4gKyAqIEBu YW1lOiBOYW1lIG9mIHByb2Nlc3MgaW4gdGhlIGZvcm0gZm91bmQgaW4gL3Byb2MvcGlkL2NvbW0g KGxpbWl0ZWQgdG8gMTUKPiArICogY2hhcnMpCj4gKyAqIEByZXR1cm5zOiAwIGluIGNhc2UgdGhl IHByb2Nlc3MgaXMgbm90IGZvdW5kIHJ1bm5pbmcgb3IgdGhlIHNpZ25hbCBoYXMgYmVlbgo+ICsg KiBzZW50IHN1Y2Nlc3NmdWxseSBvciAtMSBvdGhlcndpc2UuCj4gKyAqCj4gKyAqIFRoaXMgZnVu Y3Rpb24gc2VuZHMgdGhlIHNpZ25hbCBAc2lnIGZvciBhIHByb2Nlc3MgZm91bmQgaW4gcHJvY2Vz cyB0YWJsZQo+ICsgKiB3aXRoIG5hbWUgQGNvbW0uCj4gKyAqLwo+ICtpbnQKPiAraWd0X3BraWxs KGludCBzaWcsIGNvbnN0IGNoYXIgKmNvbW0pCj4gK3sKPiArCWludCBlcnIgPSAwLCB0cnkgPSA1 Owo+ICsJUFJPQ1RBQiAqcHJvYzsKPiArCXByb2NfdCAqcHJvY19pbmZvOwo+ICsKPiArCXByb2Mg PSBvcGVucHJvYyhQUk9DX0ZJTExDT00gfCBQUk9DX0ZJTExTVEFUIHwgUFJPQ19GSUxMQVJHKTsK PiArCWlndF9hc3NlcnQocHJvYyAhPSBOVUxMKTsKPiArCj4gKwl3aGlsZSAoKHByb2NfaW5mbyA9 IHJlYWRwcm9jKHByb2MsIE5VTEwpKSkgewo+ICsJCWlmIChwcm9jX2luZm8gJiYKPiArCQkgICAg IXN0cm5jYXNlY21wKHByb2NfaW5mby0+Y21kLCBjb21tLCBzaXplb2YocHJvY19pbmZvLT5jbWQp KSkgewo+ICsJCQlzd2l0Y2ggKHNpZykgewo+ICsJCQljYXNlIFNJR1RFUk06Cj4gKwkJCWNhc2Ug U0lHS0lMTDoKPiArCQkJCWRvIHsKPiArCQkJCQlraWxsKHByb2NfaW5mby0+dGlkLCBzaWcpOwo+ ICsJCQkJfSB3aGlsZSAoa2lsbChwcm9jX2luZm8tPnRpZCwgMCkgPCAwICYmIHRyeS0tKTsKPiAr Cj4gKwkJCQlpZiAoa2lsbChwcm9jX2luZm8tPnRpZCwgMCkgPCAwKQo+ICsJCQkJCWVyciA9IC0x Owo+ICsJCQkJYnJlYWs7Cj4gKwkJCWRlZmF1bHQ6Cj4gKwkJCQlpZiAoa2lsbChwcm9jX2luZm8t PnRpZCwgc2lnKSA8IDApCj4gKwkJCQkJZXJyID0gLTE7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ ICsKPiArCQkJZnJlZXByb2MocHJvY19pbmZvKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJCWZy ZWVwcm9jKHByb2NfaW5mbyk7Cj4gKwl9Cj4gKwo+ICsJY2xvc2Vwcm9jKHByb2MpOwo+ICsJcmV0 dXJuIGVycjsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9raWxsOgo+ICsgKiBAc2lnOiBTaWdu YWwgdG8gc2VuZC4KPiArICogQHBpZDogUHJvY2VzcyBwaWQgdG8gc2VuZC4KPiArICogQHJldHVy bnM6IDAgaW4gY2FzZSBvZiBzdWNjZXNzIG9yIC0xIG90aGVyd2lzZS4KPiArICoKPiArICogVGhp cyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaWd0X3BraWxsKCkgb25seSB0aGF0IGl0IHNlYXJj aGVzIHRoZSBwcm9jZXNzCj4gKyAqIHRhYmxlIHVzaW5nIEBwaWQgaW5zdGVhZCBvZiBjb21tIG5h bWUuCj4gKyAqCj4gKyAqLwo+ICtpbnQKPiAraWd0X2tpbGwoaW50IHNpZywgcGlkX3QgcGlkKQo+ ICt7Cj4gKwlpbnQgZXJyID0gMCwgdHJ5ID0gNTsKPiArCVBST0NUQUIgKnByb2M7Cj4gKwlwcm9j X3QgKnByb2NfaW5mbzsKPiArCj4gKwlwcm9jID0gb3BlbnByb2MoUFJPQ19QSUQgfCBQUk9DX0ZJ TExTVEFUIHwgUFJPQ19GSUxMQVJHKTsKPiArCWlndF9hc3NlcnQocHJvYyAhPSBOVUxMKTsKPiAr Cj4gKwl3aGlsZSAoKHByb2NfaW5mbyA9IHJlYWRwcm9jKHByb2MsIE5VTEwpKSkgewo+ICsJCWlm IChwcm9jX2luZm8gJiYgcHJvY19pbmZvLT50aWQgPT0gcGlkKSB7Cj4gKwkJCXN3aXRjaCAoc2ln KSB7Cj4gKwkJCWNhc2UgU0lHVEVSTToKPiArCQkJY2FzZSBTSUdLSUxMOgo+ICsJCQkJZG8gewo+ ICsJCQkJCWtpbGwocHJvY19pbmZvLT50aWQsIHNpZyk7Cj4gKwkJCQl9IHdoaWxlIChraWxsKHBy b2NfaW5mby0+dGlkLCAwKSA8IDAgJiYgdHJ5LS0pOwo+ICsKPiArCQkJCWlmIChraWxsKHByb2Nf aW5mby0+dGlkLCAwKSA8IDApCj4gKwkJCQkJZXJyID0gLTE7Cj4gKwkJCQlicmVhazsKPiArCQkJ ZGVmYXVsdDoKPiArCQkJCWlmIChraWxsKHByb2NfaW5mby0+dGlkLCBzaWcpIDwgMCkKPiArCQkJ CQllcnIgPSAtMTsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwkJCWZyZWVwcm9jKHByb2NfaW5m byk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCQlmcmVlcHJvYyhwcm9jX2luZm8pOwo+ICsJfQo+ ICsKPiArCWNsb3NlcHJvYyhwcm9jKTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRp YyBib29sCj4gK2lndF9tb2R1bGVfaW5fdXNlKHN0cnVjdCBrbW9kX21vZHVsZSAqa21vZCkKPiAr ewo+ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSBrbW9kX21vZHVsZV9nZXRfaW5pdHN0YXRlKGtt b2QpOwo+ICsKPiArCS8qIGlmIGNvbXBpbGVkIGJ1aWx0aW4gb3IgZG9lcyBub3QgZXhpc3QgKi8K PiArCWlmIChlcnIgPT0gS01PRF9NT0RVTEVfQlVJTFRJTiB8fCBlcnIgPCAwKQo+ICsJCXJldHVy biBmYWxzZTsKPiArCj4gKwlpZiAoa21vZF9tb2R1bGVfZ2V0X3JlZmNudChrbW9kKSAhPSAwIHx8 Cj4gKwkgICAga21vZF9tb2R1bGVfZ2V0X2hvbGRlcnMoa21vZCkgIT0gTlVMTCkKPiArCQlyZXR1 cm4gdHJ1ZTsKPiArCj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICsvKioKPiArICog aWd0X2xzbW9kOgo+ICsgKiBAbW9kX25hbWU6IFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCj4gKyAq IEByZXR1cm5zOiBUcnVlIGluIGNhc2UgdGhlIG1vZHVsZSBoYXMgYmVlbiBmb3VuZCBvciBmYWxz ZSBvdGhlcndpc2UuCj4gKyAqCj4gKyAqCj4gKyAqIEZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBleGlz dGFuY2Ugb2YgbW9kdWxlIEBtb2RfbmFtZSBpbiBsaXN0IG9mIGxvYWRlZCBrZXJuZWwKPiArICog bW9kdWxlcy4KPiArICoKPiArICovCj4gK2Jvb2wKPiAraWd0X2xzbW9kX2hhc19tb2R1bGUoY29u c3QgY2hhciAqbW9kX25hbWUpCj4gK3sKPiArCXN0cnVjdCBrbW9kX2xpc3QgKm1vZCwgKmxpc3Q7 Cj4gKwlzdHJ1Y3Qga21vZF9jdHggKmN0eDsKPiArCWJvb2wgcmV0ID0gZmFsc2U7Cj4gKwo+ICsJ Y3R4ID0ga21vZF9uZXcoTlVMTCwgTlVMTCk7Cj4gKwlpZ3RfYXNzZXJ0KGN0eCAhPSBOVUxMKTsK PiArCj4gKwlpZiAoa21vZF9tb2R1bGVfbmV3X2Zyb21fbG9hZGVkKGN0eCwgJmxpc3QpIDwgMCkg ewo+ICsJCWttb2RfdW5yZWYoY3R4KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWtt b2RfbGlzdF9mb3JlYWNoKG1vZCwgbGlzdCkgewo+ICsJCXN0cnVjdCBrbW9kX21vZHVsZSAqa21v ZCA9IGttb2RfbW9kdWxlX2dldF9tb2R1bGUobW9kKTsKPiArCQljb25zdCBjaGFyICprbW9kX25h bWUgPSBrbW9kX21vZHVsZV9nZXRfbmFtZShrbW9kKTsKPiArCj4gKwkJaWYgKCFzdHJuY2FzZWNt cChrbW9kX25hbWUsIG1vZF9uYW1lLCBzdHJsZW4oa21vZF9uYW1lKSkpIHsKPiArCQkJa21vZF9t b2R1bGVfdW5yZWYoa21vZCk7Cj4gKwkJCXJldCA9IHRydWU7Cj4gKwkJCWJyZWFrOwo+ICsJCX0K PiArCQlrbW9kX21vZHVsZV91bnJlZihrbW9kKTsKPiArCX0KPiArCj4gKwlrbW9kX21vZHVsZV91 bnJlZl9saXN0KGxpc3QpOwo+ICsJa21vZF91bnJlZihjdHgpOwo+ICsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gKwo+ICsvKioKPiArICogaWd0X2luc21vZDoKPiArICogQG1vZF9uYW1lOiBU aGUgbmFtZSBvZiB0aGUgbW9kdWxlCj4gKyAqIEBvcHRzOiBQYXJhbWV0ZXJzIGZvciB0aGUgbW9k dWxlLiBOVUxMIGluIGNhc2Ugbm8gcGFyYW1ldGVycwo+ICsgKiBhcmUgdG8gYmUgcGFzc2VkLCBv ciBhICdcMCcgdGVybWluYXRlZCBzdHJpbmcgb3RoZXJ3aXNlLgo+ICsgKiBAcmV0dXJuczogMCBp biBjYXNlIG9mIHN1Y2Nlc3Mgb3IgLTEgaW4gY2FzZSB0aGUgbW9kdWxlIGNvdWxkIG5vdAo+ICsg KiBiZSBsb2FkZWQuCj4gKyAqCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gbG9hZHMgYSBrZXJu ZWwgbW9kdWxlIHVzaW5nIHRoZSBuYW1lIHNwZWNpZmllZCBpbiBAbW9kX25hbWUuCj4gKyAqCj4g KyAqIEBOb3RlOiBUaGlzIGZ1bmN0aW9ucyBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgcmVzb2x2ZSBv dGhlciBtb2R1bGUKPiArICogZGVwZW5kZW5jaWVzIHNvIG1ha2UgbWFrZSBzdXJlIHlvdSBsb2Fk IHRoZSBkZXBlbmRlbmNpZXMgbW9kdWxlKHMpIGJlZm9yZQo+ICsgKiB0aGlzIG9uZS4KPiArICov Cj4gK2ludAo+ICtpZ3RfaW5zbW9kKGNvbnN0IGNoYXIgKm1vZF9uYW1lLCBjb25zdCBjaGFyICpv cHRzKQo+ICt7Cj4gKwlzdHJ1Y3Qga21vZF9jdHggKmN0eDsKPiArCXN0cnVjdCBrbW9kX21vZHVs ZSAqa21vZDsKPiArCWludCBlcnIgPSAwOwo+ICsKPiArCWN0eCA9IGttb2RfbmV3KE5VTEwsIE5V TEwpOwo+ICsJaWd0X2Fzc2VydChjdHggIT0gTlVMTCk7Cj4gKwo+ICsKPiArCWVyciA9IGttb2Rf bW9kdWxlX25ld19mcm9tX25hbWUoY3R4LCBtb2RfbmFtZSwgJmttb2QpOwo+ICsJaWYgKGVyciA8 IDApIHsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwllcnIgPSBrbW9kX21vZHVsZV9pbnNl cnRfbW9kdWxlKGttb2QsIDAsIG9wdHMpOwo+ICsJaWYgKGVyciA8IDApIHsKPiArCQlzd2l0Y2gg KGVycikgewo+ICsJCWNhc2UgLUVFWElTVDoKPiArCQkJaWd0X2luZm8oIk1vZHVsZSAlcyBhbHJl YWR5IGluc2VydGVkXG4iLAo+ICsJCQkJIGttb2RfbW9kdWxlX2dldF9uYW1lKGttb2QpKTsKPiAr CQkJZXJyID0gLTE7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgLUVOT0VOVDoKPiArCQkJaWd0X2lu Zm8oIlVua25vd24gc3ltYm9sIGluIG1vZHVsZSAlcyBvciAiCj4gKwkJCQkgInVua25vd24gcGFy YW1ldGVyXG4iLAo+ICsJCQkJIGttb2RfbW9kdWxlX2dldF9uYW1lKGttb2QpKTsKPiArCQkJZXJy ID0gLTE7Cj4gKwkJCWJyZWFrOwo+ICsJCWRlZmF1bHQ6Cj4gKwkJCWlndF9pbmZvKCJDb3VsZCBu b3QgaW5zZXJ0ICVzICglcylcbiIsCj4gKwkJCQkga21vZF9tb2R1bGVfZ2V0X25hbWUoa21vZCks IHN0cmVycm9yKC1lcnIpKTsKPiArCQkJZXJyID0gLTE7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiAr CX0KPiArb3V0Ogo+ICsJa21vZF9tb2R1bGVfdW5yZWYoa21vZCk7Cj4gKwlrbW9kX3VucmVmKGN0 eCk7Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArCj4gKy8qKgo+ICsgKiBpZ3Rfcm1t b2Q6Cj4gKyAqIEBtb2RfbmFtZTogTW9kdWxlIG5hbWUuCj4gKyAqIEBmb3JjZTogQSBib29sIHZh bHVlIHRvIGZvcmNlIHJlbW92YWwuIE5vdGUgdGhhdCBoaXMgZmxhZyBkb2VzIG5vdCByZW1vdmUK PiArICogdGhlIG1vZHVsZShzKSB0aGF0IHRoZSBtb2R1bGUgc3BlY2lmaWVkIGJ5IEBtb2RfbmFt ZSBkZXBlbmRzIG9uLiBJbiBvdGhlcgo+ICsgKiB3b3JkcyB5b3UgbXVzdCBpZ3Rfcm1tb2QoKSB0 aGUgbW9kdWxlKHMpIGRlcGVuZGVuY2llcyBiZWZvcmUgY2FsbGluZyBpdCB3aXRoCj4gKyAqIEBt b2RfbmFtZS4KPiArICogQHJldHVybnM6IDAgaW4gY2FzZSBvZiBzdWNjZXNzIG9yIC0xIG90aGVy d2lzZS4KPiArICoKPiArICogUmVtb3ZlcyB0aGUgbW9kdWxlIEBtb2RfbmFtZS4KPiArICoKPiAr ICovCj4gK2ludAo+ICtpZ3Rfcm1tb2QoY29uc3QgY2hhciAqbW9kX25hbWUsIGJvb2wgZm9yY2Up Cj4gK3sKPiArCXN0cnVjdCBrbW9kX2N0eCAqY3R4Owo+ICsJc3RydWN0IGttb2RfbW9kdWxlICpr bW9kOwo+ICsJaW50IGVyciwgZmxhZ3MgPSAwOwo+ICsKPiArCWN0eCA9IGttb2RfbmV3KE5VTEws IE5VTEwpOwo+ICsJaWd0X2Fzc2VydChjdHggIT0gTlVMTCk7Cj4gKwo+ICsJZXJyID0ga21vZF9t b2R1bGVfbmV3X2Zyb21fbmFtZShjdHgsIG1vZF9uYW1lLCAma21vZCk7Cj4gKwlpZiAoZXJyIDwg MCkgewo+ICsJCWlndF9pbmZvKCJDb3VsZCBub3QgdXNlIG1vZHVsZSAlcyAoJXMpXG4iLCBtb2Rf bmFtZSwKPiArCQkJCXN0cmVycm9yKC1lcnIpKTsKPiArCQllcnIgPSAtMTsKPiArCQlnb3RvIG91 dDsKPiArCX0KPiArCj4gKwlpZiAoaWd0X21vZHVsZV9pbl91c2Uoa21vZCkpIHsKPiArCQlpZ3Rf aW5mbygiTW9kdWxlICVzIGlzIGluIHVzZVxuIiwgbW9kX25hbWUpOwo+ICsJCWVyciA9IC0xOwo+ ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCWlmIChmb3JjZSkgewo+ICsJCWZsYWdzIHw9IEtN T0RfUkVNT1ZFX0ZPUkNFOwo+ICsJfQo+ICsKPiArCWVyciA9IGttb2RfbW9kdWxlX3JlbW92ZV9t b2R1bGUoa21vZCwgZmxhZ3MpOwo+ICsJaWYgKGVyciA8IDApIHsKPiArCQlpZ3RfaW5mbygiQ291 bGQgbm90IHJlbW92ZSBtb2R1bGUgJXMgKCVzKVxuIiwgbW9kX25hbWUsCj4gKwkJCQlzdHJlcnJv cigtZXJyKSk7Cj4gKwkJZXJyID0gLTE7Cj4gKwl9Cj4gKwo+ICtvdXQ6Cj4gKwlrbW9kX21vZHVs ZV91bnJlZihrbW9kKTsKPiArCWttb2RfdW5yZWYoY3R4KTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ ICt9Cj4gKwo+ICsKPiAgc3RhdGljIHN0cnVjdCBpZ3Rfc2lnbGF0ZW5jeSB7Cj4gIAl0aW1lcl90 IHRpbWVyOwo+ICAJc3RydWN0IHRpbWVzcGVjIHRhcmdldDsKPiBkaWZmIC0tZ2l0IGEvbGliL2ln dF9hdXguaCBiL2xpYi9pZ3RfYXV4LmgKPiBpbmRleCBkMzAxOTZiLi43OTQ2OTIzIDEwMDY0NAo+ IC0tLSBhL2xpYi9pZ3RfYXV4LmgKPiArKysgYi9saWIvaWd0X2F1eC5oCj4gQEAgLTI2NCw0ICsy NjQsMTEgQEAgZG91YmxlIGlndF9zdG9wX3NpZ2xhdGVuY3koc3RydWN0IGlndF9tZWFuICpyZXN1 bHQpOwo+ICB2b2lkIGlndF9zZXRfbW9kdWxlX3BhcmFtKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0 IGNoYXIgKnZhbCk7Cj4gIHZvaWQgaWd0X3NldF9tb2R1bGVfcGFyYW1faW50KGNvbnN0IGNoYXIg Km5hbWUsIGludCB2YWwpOwo+ICAKPiAraW50IGlndF9wa2lsbChpbnQgc2lnLCBjb25zdCBjaGFy ICpjb21tKTsKPiAraW50IGlndF9raWxsKGludCBzaWcsIHBpZF90IHBpZCk7Cj4gKwo+ICtib29s IGlndF9sc21vZF9oYXNfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZF9uYW1lKTsKPiAraW50IGlndF9p bnNtb2QoY29uc3QgY2hhciAqbW9kX25hbWUsIGNvbnN0IGNoYXIgKm9wdHMpOwo+ICtpbnQgaWd0 X3JtbW9kKGNvbnN0IGNoYXIgKm1vZF9uYW1lLCBib29sIGZvcmNlKTsKPiArCj4gICNlbmRpZiAv KiBJR1RfQVVYX0ggKi8KPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9ndnQuYyBiL2xpYi9pZ3RfZ3Z0 LmMKPiBpbmRleCAwZjMzMmQxLi44YmJmOWJkIDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3RfZ3Z0LmMK PiArKysgYi9saWIvaWd0X2d2dC5jCj4gQEAgLTIzLDYgKzIzLDcgQEAKPiAgCj4gICNpbmNsdWRl ICJpZ3QuaCIKPiAgI2luY2x1ZGUgImlndF9ndnQuaCIKPiArI2luY2x1ZGUgImlndF9zeXNmcy5o Igo+ICAKPiAgI2luY2x1ZGUgPGRpcmVudC5oPgo+ICAjaW5jbHVkZSA8dW5pc3RkLmg+Cj4gQEAg LTQ2LDQ5ICs0Nyw5IEBAIHN0YXRpYyBib29sIGlzX2d2dF9lbmFibGVkKHZvaWQpCj4gIAlyZXR1 cm4gZW5hYmxlZDsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgdW5iaW5kX2ZiY29uKHZvaWQpCj4g LXsKPiAtCWNoYXIgYnVmWzEyOF07Cj4gLQljb25zdCBjaGFyICpwYXRoID0gIi9zeXMvY2xhc3Mv dnRjb25zb2xlIjsKPiAtCURJUiAqZGlyOwo+IC0Jc3RydWN0IGRpcmVudCAqdnRjb247Cj4gLQo+ IC0JZGlyID0gb3BlbmRpcihwYXRoKTsKPiAtCWlmICghZGlyKQo+IC0JCXJldHVybjsKPiAtCj4g LQl3aGlsZSAoKHZ0Y29uID0gcmVhZGRpcihkaXIpKSkgewo+IC0JCWludCBmZCwgbGVuOwo+IC0K PiAtCQlpZiAoc3RybmNtcCh2dGNvbi0+ZF9uYW1lLCAidnRjb24iLCA1KSkKPiAtCQkJY29udGlu dWU7Cj4gLQo+IC0JCXNwcmludGYoYnVmLCAiJXMvJXMvbmFtZSIsIHBhdGgsIHZ0Y29uLT5kX25h bWUpOwo+IC0JCWZkID0gb3BlbihidWYsIE9fUkRPTkxZKTsKPiAtCQlpZiAoZmQgPCAwKQo+IC0J CQljb250aW51ZTsKPiAtCj4gLQkJbGVuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSAtIDEp Owo+IC0JCWNsb3NlKGZkKTsKPiAtCQlpZiAobGVuID49IDApCj4gLQkJCWJ1ZltsZW5dID0gJ1ww JzsKPiAtCj4gLQkJaWYgKHN0cnN0cihidWYsICJmcmFtZSBidWZmZXIgZGV2aWNlIikpIHsKPiAt CQkJc3ByaW50ZihidWYsICIlcy8lcy9iaW5kIiwgcGF0aCwgdnRjb24tPmRfbmFtZSk7Cj4gLQkJ CWZkID0gb3BlbihidWYsIE9fV1JPTkxZKTsKPiAtCQkJaWYgKGZkICE9IC0xKSB7Cj4gLQkJCQlp Z3RfaWdub3JlX3dhcm4od3JpdGUoZmQsICIxXG4iLCAyKSk7Cj4gLQkJCQljbG9zZShmZCk7Cj4g LQkJCX0KPiAtCQkJYnJlYWs7Cj4gLQkJfQo+IC0JfQo+IC0JY2xvc2VkaXIoZGlyKTsKPiAtfQo+ IC0KPiAgc3RhdGljIHZvaWQgdW5sb2FkX2k5MTUodm9pZCkKPiAgewo+IC0JdW5iaW5kX2ZiY29u KCk7Cj4gKwlraWNrX2ZiY29uKGZhbHNlKTsKPiAgCS8qIHBraWxsIGFsc2FjdCAqLwo+ICAKPiAg CWlndF9pZ25vcmVfd2FybihzeXN0ZW0oIi9zYmluL21vZHByb2JlIC1zIC1yIGk5MTUiKSk7Cj4g ZGlmZiAtLWdpdCBhL2xpYi9pZ3Rfc3lzZnMuYyBiL2xpYi9pZ3Rfc3lzZnMuYwo+IGluZGV4IDYx MmRlNzUuLjA4MDM2NTkgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9zeXNmcy5jCj4gKysrIGIvbGli L2lndF9zeXNmcy5jCj4gQEAgLTM0LDcgKzM0LDExIEBACj4gICNpbmNsdWRlIDxmY250bC5oPgo+ ICAjaW5jbHVkZSA8dW5pc3RkLmg+Cj4gICNpbmNsdWRlIDxpOTE1X2RybS5oPgo+ICsjaW5jbHVk ZSA8ZGlyZW50Lmg+Cj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiArI2luY2x1ZGUgPGZjbnRsLmg+ Cj4gIAo+ICsjaW5jbHVkZSAiaWd0X2NvcmUuaCIKPiAgI2luY2x1ZGUgImlndF9zeXNmcy5oIgo+ ICAKPiAgLyoqCj4gQEAgLTM5MSwzICszOTUsNTMgQEAgYm9vbCBpZ3Rfc3lzZnNfc2V0X2Jvb2xl YW4oaW50IGRpciwgY29uc3QgY2hhciAqYXR0ciwgYm9vbCB2YWx1ZSkKPiAgewo+ICAJcmV0dXJu IGlndF9zeXNmc19wcmludGYoZGlyLCBhdHRyLCAiJWQiLCB2YWx1ZSkgPT0gMTsKPiAgfQo+ICsK PiArLyoqCj4gKyAqIGtpY2tfZmJjb246Cj4gKyAqIEBlbmFibGU6IGJvb2xlYW4gdmFsdWUKPiAr ICoKPiArICogVGhpcyBmdW5jdGlvbnMgZW5hYmxlcy9kaXNhYmxlcyB0aGUgdGV4dCBjb25zb2xl IHJ1bm5pbmcgb24gdG9wIG9mIHRoZQo+ICsgKiBmcmFtZWJ1ZmZlciBkZXZpY2UuCj4gKyAqLwo+ ICt2b2lkIGtpY2tfZmJjb24oYm9vbCBlbmFibGUpCj4gK3sKPiArCWNoYXIgYnVmWzEyOF07Cj4g Kwljb25zdCBjaGFyICpwYXRoID0gIi9zeXMvY2xhc3MvdnRjb25zb2xlIjsKPiArCURJUiAqZGly Owo+ICsJc3RydWN0IGRpcmVudCAqdnRjb247Cj4gKwo+ICsJZGlyID0gb3BlbmRpcihwYXRoKTsK PiArCWlmICghZGlyKQo+ICsJCXJldHVybjsKPiArCj4gKwl3aGlsZSAoKHZ0Y29uID0gcmVhZGRp cihkaXIpKSkgewo+ICsJCWludCBmZCwgbGVuOwo+ICsKPiArCQlpZiAoc3RybmNtcCh2dGNvbi0+ ZF9uYW1lLCAidnRjb24iLCA1KSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXNwcmludGYoYnVm LCAiJXMvJXMvbmFtZSIsIHBhdGgsIHZ0Y29uLT5kX25hbWUpOwo+ICsJCWZkID0gb3BlbihidWYs IE9fUkRPTkxZKTsKPiArCQlpZiAoZmQgPCAwKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJbGVu ID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSAtIDEpOwo+ICsJCWNsb3NlKGZkKTsKPiArCQlp ZiAobGVuID49IDApCj4gKwkJCWJ1ZltsZW5dID0gJ1wwJzsKPiArCj4gKwkJaWYgKHN0cnN0cihi dWYsICJmcmFtZSBidWZmZXIgZGV2aWNlIikpIHsKPiArCQkJc3ByaW50ZihidWYsICIlcy8lcy9i aW5kIiwgcGF0aCwgdnRjb24tPmRfbmFtZSk7Cj4gKwkJCWZkID0gb3BlbihidWYsIE9fV1JPTkxZ KTsKPiArCQkJaWYgKGZkICE9IC0xKSB7Cj4gKwkJCQlpZiAoZW5hYmxlKQo+ICsJCQkJCWlndF9p Z25vcmVfd2Fybih3cml0ZShmZCwgIjFcbiIsIDIpKTsKPiArCQkJCWVsc2UKPiArCQkJCQlpZ3Rf aWdub3JlX3dhcm4od3JpdGUoZmQsICIwXG4iLCAyKSk7Cj4gKwkJCQljbG9zZShmZCk7Cj4gKwkJ CX0KPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsJY2xvc2VkaXIoZGlyKTsKPiArfQo+IGRp ZmYgLS1naXQgYS9saWIvaWd0X3N5c2ZzLmggYi9saWIvaWd0X3N5c2ZzLmgKPiBpbmRleCA0ODIw MDY2Li5hMTQxODk0IDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3Rfc3lzZnMuaAo+ICsrKyBiL2xpYi9p Z3Rfc3lzZnMuaAo+IEBAIC00Myw0ICs0Myw2IEBAIGJvb2wgaWd0X3N5c2ZzX3NldF91MzIoaW50 IGRpciwgY29uc3QgY2hhciAqYXR0ciwgdWludDMyX3QgdmFsdWUpOwo+ICBib29sIGlndF9zeXNm c19nZXRfYm9vbGVhbihpbnQgZGlyLCBjb25zdCBjaGFyICphdHRyKTsKPiAgYm9vbCBpZ3Rfc3lz ZnNfc2V0X2Jvb2xlYW4oaW50IGRpciwgY29uc3QgY2hhciAqYXR0ciwgYm9vbCB2YWx1ZSk7Cj4g IAo+ICt2b2lkIGtpY2tfZmJjb24oYm9vbCBlbmFibGUpOwo+ICsKPiAgI2VuZGlmIC8qIF9fSUdU X1NZU0ZTX0hfXyAqLwo+IC0tIAo+IDIuNy40Cj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBF bmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==