From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH 10/39] drm/i915: Syntatic sugar for using intel_runtime_pm Date: Thu, 03 Jan 2019 11:48:46 +0200 Message-ID: <877efmkr5t.fsf@intel.com> References: <20190102094139.24014-1-chris@chris-wilson.co.uk> <20190102094139.24014-10-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 57A416E07E for ; Thu, 3 Jan 2019 09:48:42 +0000 (UTC) In-Reply-To: <20190102094139.24014-10-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAwMiBKYW4gMjAxOSwgQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28u dWs+IHdyb3RlOgo+IEZyZXF1ZW50bHksIHdlIHVzZSBpbnRlbF9ydW50aW1lX3BtX2dldC9fcHV0 IGFyb3VuZCBhIHNtYWxsIGJsb2NrLgo+IEZvcm1hbGlzZSB0aGF0IHVzYWdlIGJ5IHByb3ZpZGlu ZyBhIG1hY3JvIHRvIGRlZmluZSBzdWNoIGEgYmxvY2sgd2l0aCBhbgo+IGF1dG9tYXRpYyBjbG9z dXJlIHRvIHNjb3BlIHRoZSBpbnRlbF9ydW50aW1lX3BtIHdha2VyZWYgdG8gdGhhdCBibG9jaywK PiBpLmUuIG1hY3JvIGFidXNlIHNtZWxsaW5nIG9mIHB5dGhvbi4KCkknbSBkaXZpZGVkIG9uIHRo aXMgb25lLiBJJ20gbm90IGtub3duIHRvIHNoeSBhd2F5IGZyb20gbWFjcm8KYWJ1c2UuLi4gSXQg ZG9lcyBhZGQgeWV0IGFub3RoZXIgaTkxNS1pc20gdG8gdGhlIGxlYXJuaW5nIGN1cnZlLiBBbmQg eW91CnNlZW0gdG8gaGF2ZSB0byBhZGQgc29tZSB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMgYmVj YXVzZSB0aGUgY29tcGlsZXIKaXMgbm8gbG9uZ2VyIGFibGUgdG8gZmlndXJlIGl0IGFsbCBvdXQg aXRzZWxmLiBXaGF0IGRvZXMgdGhpcyBkbyB0byBjb2RlCnNpemU/CgpCUiwKSmFuaS4KCj4KPiBT aWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAt LS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgICAgICAgICAgIHwgMTYy ICsrKysrKysrLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAg ICAgICAgICAgICAgfCAgMTAgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0 LmMgICAgICAgICAgIHwgIDIzICsrLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9z aHJpbmtlci5jICAgICAgfCAgNDQgKystLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9w bXUuYyAgICAgICAgICAgICAgIHwgICA3ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf c3lzZnMuYyAgICAgICAgICAgICB8ICAgNyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kcnYuaCAgICAgICAgICAgICAgfCAgIDggKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9ndWNfbG9nLmMgICAgICAgICAgfCAgMjYgKystCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2h1Yy5jICAgICAgICAgICAgICB8ICAgNyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9wYW5lbC5jICAgICAgICAgICAgfCAgMTggKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfdW5jb3JlLmMgICAgICAgICAgIHwgIDMwICsrLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfZ2VtLmMgICAgIHwgIDM0ICsrLS0KPiAgLi4uL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jIHwgIDEyICstCj4gIC4uLi9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdC5jICB8ICAxMSArLQo+ICAuLi4vZHJtL2k5MTUv c2VsZnRlc3RzL2ludGVsX3dvcmthcm91bmRzLmMgICAgfCAgMjggKy0tCj4gIDE1IGZpbGVzIGNo YW5nZWQsIDIwMCBpbnNlcnRpb25zKCspLCAyMjcgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2RlYnVnZnMuYwo+IGluZGV4IDE4ZjI4MDBmZDdkMy4uNDYzZmE3NWM4MDMyIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBAQCAtOTUzLDkgKzk1Myw5IEBA IHN0YXRpYyBpbnQgaTkxNV9ncHVfaW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVj dCBmaWxlICpmaWxlKQo+ICAJc3RydWN0IGk5MTVfZ3B1X3N0YXRlICpncHU7Cj4gIAlpbnRlbF93 YWtlcmVmX3Qgd2FrZXJlZjsKPiAgCj4gLQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQo aTkxNSk7Cj4gLQlncHUgPSBpOTE1X2NhcHR1cmVfZ3B1X3N0YXRlKGk5MTUpOwo+IC0JaW50ZWxf cnVudGltZV9wbV9wdXQoaTkxNSwgd2FrZXJlZik7Cj4gKwlncHUgPSBOVUxMOwo+ICsJd2l0aF9p bnRlbF9ydW50aW1lX3BtKGk5MTUsIHdha2VyZWYpCj4gKwkJZ3B1ID0gaTkxNV9jYXB0dXJlX2dw dV9zdGF0ZShpOTE1KTsKPiAgCWlmIChJU19FUlIoZ3B1KSkKPiAgCQlyZXR1cm4gUFRSX0VSUihn cHUpOwo+ICAKPiBAQCAtMTI4NywxNyArMTI4NywxNSBAQCBzdGF0aWMgaW50IGk5MTVfaGFuZ2No ZWNrX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIAkJcmV0dXJuIDA7 Cj4gIAl9Cj4gIAo+IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsK PiArCXdpdGhfaW50ZWxfcnVudGltZV9wbShkZXZfcHJpdiwgd2FrZXJlZikgewo+ICsJCWZvcl9l YWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgewo+ICsJCQlhY3RoZFtpZF0gPSBpbnRl bF9lbmdpbmVfZ2V0X2FjdGl2ZV9oZWFkKGVuZ2luZSk7Cj4gKwkJCXNlcW5vW2lkXSA9IGludGVs X2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKTsKPiArCQl9Cj4gIAo+IC0JZm9yX2VhY2hfZW5naW5l KGVuZ2luZSwgZGV2X3ByaXYsIGlkKSB7Cj4gLQkJYWN0aGRbaWRdID0gaW50ZWxfZW5naW5lX2dl dF9hY3RpdmVfaGVhZChlbmdpbmUpOwo+IC0JCXNlcW5vW2lkXSA9IGludGVsX2VuZ2luZV9nZXRf c2Vxbm8oZW5naW5lKTsKPiArCQlpbnRlbF9lbmdpbmVfZ2V0X2luc3Rkb25lKGRldl9wcml2LT5l bmdpbmVbUkNTXSwgJmluc3Rkb25lKTsKPiAgCX0KPiAgCj4gLQlpbnRlbF9lbmdpbmVfZ2V0X2lu c3Rkb25lKGRldl9wcml2LT5lbmdpbmVbUkNTXSwgJmluc3Rkb25lKTsKPiAtCj4gLQlpbnRlbF9y dW50aW1lX3BtX3B1dChkZXZfcHJpdiwgd2FrZXJlZik7Cj4gLQo+ICAJaWYgKHRpbWVyX3BlbmRp bmcoJmRldl9wcml2LT5ncHVfZXJyb3IuaGFuZ2NoZWNrX3dvcmsudGltZXIpKQo+ICAJCXNlcV9w cmludGYobSwgIkhhbmdjaGVjayBhY3RpdmUsIHRpbWVyIGZpcmVzIGluICVkbXNcbiIsCj4gIAkJ CSAgIGppZmZpZXNfdG9fbXNlY3MoZGV2X3ByaXYtPmdwdV9lcnJvci5oYW5nY2hlY2tfd29yay50 aW1lci5leHBpcmVzIC0KPiBAQCAtMTU3MywxOCArMTU3MSwxNiBAQCBzdGF0aWMgaW50IGk5MTVf ZHJwY19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+ICB7Cj4gIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7 Cj4gIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCWludCBlcnI7Cj4gLQo+IC0Jd2FrZXJl ZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtCj4gLQlpZiAoSVNfVkFMTEVZ VklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gLQkJZXJyID0gdmx2 X2RycGNfaW5mbyhtKTsKPiAtCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNikKPiAt CQllcnIgPSBnZW42X2RycGNfaW5mbyhtKTsKPiAtCWVsc2UKPiAtCQllcnIgPSBpcm9ubGFrZV9k cnBjX2luZm8obSk7Cj4gKwlpbnQgZXJyID0gLUVOT0RFVjsKPiAgCj4gLQlpbnRlbF9ydW50aW1l X3BtX3B1dChkZXZfcHJpdiwgd2FrZXJlZik7Cj4gKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oZGV2 X3ByaXYsIHdha2VyZWYpIHsKPiArCQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNf Q0hFUlJZVklFVyhkZXZfcHJpdikpCj4gKwkJCWVyciA9IHZsdl9kcnBjX2luZm8obSk7Cj4gKwkJ ZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA2KQo+ICsJCQllcnIgPSBnZW42X2RycGNf aW5mbyhtKTsKPiArCQllbHNlCj4gKwkJCWVyciA9IGlyb25sYWtlX2RycGNfaW5mbyhtKTsKPiAr CX0KPiAgCj4gIAlyZXR1cm4gZXJyOwo+ICB9Cj4gQEAgLTIwNjgsOCArMjA2NCw3IEBAIHN0YXRp YyBpbnQgaTkxNV9ycHNfYm9vc3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEp Cj4gIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAgCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsK PiAgCj4gLQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXRfaWZfaW5fdXNlKGRldl9wcml2 KTsKPiAtCWlmICh3YWtlcmVmKSB7Cj4gKwl3aXRoX2ludGVsX3J1bnRpbWVfcG1faWZfaW5fdXNl KGRldl9wcml2LCB3YWtlcmVmKSB7Cj4gIAkJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8 IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Cj4gIAkJCW11dGV4X2xvY2soJmRldl9wcml2LT5w Y3VfbG9jayk7Cj4gIAkJCWFjdF9mcmVxID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsCj4gQEAg LTIwODAsNyArMjA3NSw2IEBAIHN0YXRpYyBpbnQgaTkxNV9ycHNfYm9vc3RfaW5mbyhzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gIAkJCWFjdF9mcmVxID0gaW50ZWxfZ2V0X2NhZ2Yo ZGV2X3ByaXYsCj4gIAkJCQkJCSAgSTkxNV9SRUFEKEdFTjZfUlBTVEFUMSkpOwo+ICAJCX0KPiAt CQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdiwgd2FrZXJlZik7Cj4gIAl9Cj4gIAo+ICAJ c2VxX3ByaW50ZihtLCAiUlBTIGVuYWJsZWQ/ICVkXG4iLCBycHMtPmVuYWJsZWQpOwo+IEBAIC0y MTcyLDkgKzIxNjYsOCBAQCBzdGF0aWMgaW50IGk5MTVfaHVjX2xvYWRfc3RhdHVzX2luZm8oc3Ry dWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAJcCA9IGRybV9zZXFfZmlsZV9wcmludGVy KG0pOwo+ICAJaW50ZWxfdWNfZndfZHVtcCgmZGV2X3ByaXYtPmh1Yy5mdywgJnApOwo+ICAKPiAt CXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7Cj4gLQlzZXFfcHJpbnRm KG0sICJcbkh1QyBzdGF0dXMgMHglMDh4OlxuIiwgSTkxNV9SRUFEKEhVQ19TVEFUVVMyKSk7Cj4g LQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdiwgd2FrZXJlZik7Cj4gKwl3aXRoX2ludGVs X3J1bnRpbWVfcG0oZGV2X3ByaXYsIHdha2VyZWYpCj4gKwkJc2VxX3ByaW50ZihtLCAiXG5IdUMg c3RhdHVzIDB4JTA4eDpcbiIsIEk5MTVfUkVBRChIVUNfU1RBVFVTMikpOwo+ICAKPiAgCXJldHVy biAwOwo+ICB9Cj4gQEAgLTIxODQsNyArMjE3Nyw2IEBAIHN0YXRpYyBpbnQgaTkxNV9ndWNfbG9h ZF9zdGF0dXNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gIAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Cj4g IAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAgCXN0cnVjdCBkcm1fcHJpbnRlciBwOwo+IC0J dTMyIHRtcCwgaTsKPiAgCj4gIAlpZiAoIUhBU19HVUMoZGV2X3ByaXYpKQo+ICAJCXJldHVybiAt RU5PREVWOwo+IEBAIC0yMTkyLDIyICsyMTg0LDIzIEBAIHN0YXRpYyBpbnQgaTkxNV9ndWNfbG9h ZF9zdGF0dXNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gIAlwID0gZHJt X3NlcV9maWxlX3ByaW50ZXIobSk7Cj4gIAlpbnRlbF91Y19md19kdW1wKCZkZXZfcHJpdi0+Z3Vj LmZ3LCAmcCk7Cj4gIAo+IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2 KTsKPiAtCj4gLQl0bXAgPSBJOTE1X1JFQUQoR1VDX1NUQVRVUyk7Cj4gLQo+IC0Jc2VxX3ByaW50 ZihtLCAiXG5HdUMgc3RhdHVzIDB4JTA4eDpcbiIsIHRtcCk7Cj4gLQlzZXFfcHJpbnRmKG0sICJc dEJvb3Ryb20gc3RhdHVzID0gMHgleFxuIiwKPiAtCQkodG1wICYgR1NfQk9PVFJPTV9NQVNLKSA+ PiBHU19CT09UUk9NX1NISUZUKTsKPiAtCXNlcV9wcmludGYobSwgIlx0dUtlcm5lbCBzdGF0dXMg PSAweCV4XG4iLAo+IC0JCSh0bXAgJiBHU19VS0VSTkVMX01BU0spID4+IEdTX1VLRVJORUxfU0hJ RlQpOwo+IC0Jc2VxX3ByaW50ZihtLCAiXHRNSUEgQ29yZSBzdGF0dXMgPSAweCV4XG4iLAo+IC0J CSh0bXAgJiBHU19NSUFfTUFTSykgPj4gR1NfTUlBX1NISUZUKTsKPiAtCXNlcV9wdXRzKG0sICJc blNjcmF0Y2ggcmVnaXN0ZXJzOlxuIik7Cj4gLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKPiAt CQlzZXFfcHJpbnRmKG0sICJcdCUyZDogXHQweCV4XG4iLCBpLCBJOTE1X1JFQUQoU09GVF9TQ1JB VENIKGkpKSk7Cj4gLQo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYsIHdha2VyZWYp Owo+ICsJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGRldl9wcml2LCB3YWtlcmVmKSB7Cj4gKwkJdTMy IHRtcCA9IEk5MTVfUkVBRChHVUNfU1RBVFVTKTsKPiArCQl1MzIgaTsKPiArCj4gKwkJc2VxX3By aW50ZihtLCAiXG5HdUMgc3RhdHVzIDB4JTA4eDpcbiIsIHRtcCk7Cj4gKwkJc2VxX3ByaW50Ziht LCAiXHRCb290cm9tIHN0YXR1cyA9IDB4JXhcbiIsCj4gKwkJCSAgICh0bXAgJiBHU19CT09UUk9N X01BU0spID4+IEdTX0JPT1RST01fU0hJRlQpOwo+ICsJCXNlcV9wcmludGYobSwgIlx0dUtlcm5l bCBzdGF0dXMgPSAweCV4XG4iLAo+ICsJCQkgICAodG1wICYgR1NfVUtFUk5FTF9NQVNLKSA+PiBH U19VS0VSTkVMX1NISUZUKTsKPiArCQlzZXFfcHJpbnRmKG0sICJcdE1JQSBDb3JlIHN0YXR1cyA9 IDB4JXhcbiIsCj4gKwkJCSAgICh0bXAgJiBHU19NSUFfTUFTSykgPj4gR1NfTUlBX1NISUZUKTsK PiArCQlzZXFfcHV0cyhtLCAiXG5TY3JhdGNoIHJlZ2lzdGVyczpcbiIpOwo+ICsJCWZvciAoaSA9 IDA7IGkgPCAxNjsgaSsrKSB7Cj4gKwkJCXNlcV9wcmludGYobSwgIlx0JTJkOiBcdDB4JXhcbiIs Cj4gKwkJCQkgICBpLCBJOTE1X1JFQUQoU09GVF9TQ1JBVENIKGkpKSk7Cj4gKwkJfQo+ICsJfQo+ ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gQEAgLTI2ODAsMTkgKzI2NzMsMTQgQEAgc3RhdGljIGlu dCBpOTE1X2VuZXJneV91SihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gIAlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA8IDYpCj4gIAkJcmV0dXJuIC1FTk9ERVY7Cj4gIAo+IC0Jd2Fr ZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtCj4gLQlpZiAocmRtc3Js X3NhZmUoTVNSX1JBUExfUE9XRVJfVU5JVCwgJnBvd2VyKSkgewo+IC0JCWludGVsX3J1bnRpbWVf cG1fcHV0KGRldl9wcml2LCB3YWtlcmVmKTsKPiArCWlmIChyZG1zcmxfc2FmZShNU1JfUkFQTF9Q T1dFUl9VTklULCAmcG93ZXIpKQo+ICAJCXJldHVybiAtRU5PREVWOwo+IC0JfQo+ICAKPiAgCXVu aXRzID0gKHBvd2VyICYgMHgxZjAwKSA+PiA4Owo+IC0JcG93ZXIgPSBJOTE1X1JFQUQoTUNIX1NF Q1BfTlJHX1NUVFMpOwo+IC0JcG93ZXIgPSAoMTAwMDAwMCAqIHBvd2VyKSA+PiB1bml0czsgLyog Y29udmVydCB0byB1SiAqLwo+IC0KPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2LCB3 YWtlcmVmKTsKPiArCXdpdGhfaW50ZWxfcnVudGltZV9wbShkZXZfcHJpdiwgd2FrZXJlZikKPiAr CQlwb3dlciA9IEk5MTVfUkVBRChNQ0hfU0VDUF9OUkdfU1RUUyk7Cj4gIAo+ICsJcG93ZXIgPSAo MTAwMDAwMCAqIHBvd2VyKSA+PiB1bml0czsgLyogY29udmVydCB0byB1SiAqLwo+ICAJc2VxX3By aW50ZihtLCAiJWxsdSIsIHBvd2VyKTsKPiAgCj4gIAlyZXR1cm4gMDsKPiBAQCAtMzI3NSwyMiAr MzI2MywyMCBAQCBzdGF0aWMgc3NpemVfdCBpOTE1X2lwY19zdGF0dXNfd3JpdGUoc3RydWN0IGZp bGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAo+ICAJc3RydWN0IHNlcV9maWxlICpt ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gbS0+cHJpdmF0ZTsKPiAgCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0JaW50IHJl dDsKPiAgCWJvb2wgZW5hYmxlOwo+ICsJaW50IHJldDsKPiAgCj4gIAlyZXQgPSBrc3RydG9ib29s X2Zyb21fdXNlcih1YnVmLCBsZW4sICZlbmFibGUpOwo+ICAJaWYgKHJldCA8IDApCj4gIAkJcmV0 dXJuIHJldDsKPiAgCj4gLQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYp Owo+IC0KPiAtCWlmICghZGV2X3ByaXYtPmlwY19lbmFibGVkICYmIGVuYWJsZSkKPiAtCQlEUk1f SU5GTygiRW5hYmxpbmcgSVBDOiBXTSB3aWxsIGJlIHByb3BlciBvbmx5IGFmdGVyIG5leHQgY29t bWl0XG4iKTsKPiAtCWRldl9wcml2LT53bS5kaXN0cnVzdF9iaW9zX3dtID0gdHJ1ZTsKPiAtCWRl dl9wcml2LT5pcGNfZW5hYmxlZCA9IGVuYWJsZTsKPiAtCWludGVsX2VuYWJsZV9pcGMoZGV2X3By aXYpOwo+IC0KPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2LCB3YWtlcmVmKTsKPiAr CXdpdGhfaW50ZWxfcnVudGltZV9wbShkZXZfcHJpdiwgd2FrZXJlZikgewo+ICsJCWlmICghZGV2 X3ByaXYtPmlwY19lbmFibGVkICYmIGVuYWJsZSkKPiArCQkJRFJNX0lORk8oIkVuYWJsaW5nIElQ QzogV00gd2lsbCBiZSBwcm9wZXIgb25seSBhZnRlciBuZXh0IGNvbW1pdFxuIik7Cj4gKwkJZGV2 X3ByaXYtPndtLmRpc3RydXN0X2Jpb3Nfd20gPSB0cnVlOwo+ICsJCWRldl9wcml2LT5pcGNfZW5h YmxlZCA9IGVuYWJsZTsKPiArCQlpbnRlbF9lbmFibGVfaXBjKGRldl9wcml2KTsKPiArCX0KPiAg Cj4gIAlyZXR1cm4gbGVuOwo+ICB9Cj4gQEAgLTQxMzAsMTYgKzQxMTYsMTMgQEAgaTkxNV9jYWNo ZV9zaGFyaW5nX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKPiAgewo+ICAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGF0YTsKPiAgCWludGVsX3dha2VyZWZfdCB3YWtlcmVm Owo+IC0JdTMyIHNucGNyOwo+ICsJdTMyIHNucGNyID0gMDsKPiAgCj4gIAlpZiAoIShJU19HRU5f UkFOR0UoZGV2X3ByaXYsIDYsIDcpKSkKPiAgCQlyZXR1cm4gLUVOT0RFVjsKPiAgCj4gLQl3YWtl cmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOwo+IC0KPiAtCXNucGNyID0gSTkx NV9SRUFEKEdFTjZfTUJDVU5JVF9TTlBDUik7Cj4gLQo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQo ZGV2X3ByaXYsIHdha2VyZWYpOwo+ICsJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGRldl9wcml2LCB3 YWtlcmVmKQo+ICsJCXNucGNyID0gSTkxNV9SRUFEKEdFTjZfTUJDVU5JVF9TTlBDUik7Cj4gIAo+ ICAJKnZhbCA9IChzbnBjciAmIEdFTjZfTUJDX1NOUENSX01BU0spID4+IEdFTjZfTUJDX1NOUENS X1NISUZUOwo+ICAKPiBAQCAtNDE1MSw3ICs0MTM0LDYgQEAgaTkxNV9jYWNoZV9zaGFyaW5nX3Nl dCh2b2lkICpkYXRhLCB1NjQgdmFsKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkYXRhOwo+ICAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gLQl1MzIgc25w Y3I7Cj4gIAo+ICAJaWYgKCEoSVNfR0VOX1JBTkdFKGRldl9wcml2LCA2LCA3KSkpCj4gIAkJcmV0 dXJuIC1FTk9ERVY7Cj4gQEAgLTQxNTksMTYgKzQxNDEsMTcgQEAgaTkxNV9jYWNoZV9zaGFyaW5n X3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQo+ICAJaWYgKHZhbCA+IDMpCj4gIAkJcmV0dXJuIC1F SU5WQUw7Cj4gIAo+IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsK PiAgCURSTV9ERUJVR19EUklWRVIoIk1hbnVhbGx5IHNldHRpbmcgdW5jb3JlIHNoYXJpbmcgdG8g JWxsdVxuIiwgdmFsKTsKPiArCXdpdGhfaW50ZWxfcnVudGltZV9wbShkZXZfcHJpdiwgd2FrZXJl Zikgewo+ICsJCXUzMiBzbnBjcjsKPiArCj4gKwkJLyogVXBkYXRlIHRoZSBjYWNoZSBzaGFyaW5n IHBvbGljeSBoZXJlIGFzIHdlbGwgKi8KPiArCQlzbnBjciA9IEk5MTVfUkVBRChHRU42X01CQ1VO SVRfU05QQ1IpOwo+ICsJCXNucGNyICY9IH5HRU42X01CQ19TTlBDUl9NQVNLOwo+ICsJCXNucGNy IHw9IHZhbCA8PCBHRU42X01CQ19TTlBDUl9TSElGVDsKPiArCQlJOTE1X1dSSVRFKEdFTjZfTUJD VU5JVF9TTlBDUiwgc25wY3IpOwo+ICsJfQo+ICAKPiAtCS8qIFVwZGF0ZSB0aGUgY2FjaGUgc2hh cmluZyBwb2xpY3kgaGVyZSBhcyB3ZWxsICovCj4gLQlzbnBjciA9IEk5MTVfUkVBRChHRU42X01C Q1VOSVRfU05QQ1IpOwo+IC0Jc25wY3IgJj0gfkdFTjZfTUJDX1NOUENSX01BU0s7Cj4gLQlzbnBj ciB8PSAodmFsIDw8IEdFTjZfTUJDX1NOUENSX1NISUZUKTsKPiAtCUk5MTVfV1JJVEUoR0VONl9N QkNVTklUX1NOUENSLCBzbnBjcik7Cj4gLQo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3By aXYsIHdha2VyZWYpOwo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gQEAgLTQ0MDUsMjAgKzQzODgs MTcgQEAgc3RhdGljIGludCBpOTE1X3NzZXVfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9p ZCAqdW51c2VkKQo+ICAJc3NldS5tYXhfZXVzX3Blcl9zdWJzbGljZSA9Cj4gIAkJSU5URUxfSU5G TyhkZXZfcHJpdiktPnNzZXUubWF4X2V1c19wZXJfc3Vic2xpY2U7Cj4gIAo+IC0Jd2FrZXJlZiA9 IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtCj4gLQlpZiAoSVNfQ0hFUlJZVklF VyhkZXZfcHJpdikpIHsKPiAtCQljaGVycnl2aWV3X3NzZXVfZGV2aWNlX3N0YXR1cyhkZXZfcHJp diwgJnNzZXUpOwo+IC0JfSBlbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7Cj4gLQkJ YnJvYWR3ZWxsX3NzZXVfZGV2aWNlX3N0YXR1cyhkZXZfcHJpdiwgJnNzZXUpOwo+IC0JfSBlbHNl IGlmIChJU19HRU4oZGV2X3ByaXYsIDkpKSB7Cj4gLQkJZ2VuOV9zc2V1X2RldmljZV9zdGF0dXMo ZGV2X3ByaXYsICZzc2V1KTsKPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MCkgewo+IC0JCWdlbjEwX3NzZXVfZGV2aWNlX3N0YXR1cyhkZXZfcHJpdiwgJnNzZXUpOwo+ICsJ d2l0aF9pbnRlbF9ydW50aW1lX3BtKGRldl9wcml2LCB3YWtlcmVmKSB7Cj4gKwkJaWYgKElTX0NI RVJSWVZJRVcoZGV2X3ByaXYpKQo+ICsJCQljaGVycnl2aWV3X3NzZXVfZGV2aWNlX3N0YXR1cyhk ZXZfcHJpdiwgJnNzZXUpOwo+ICsJCWVsc2UgaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikpCj4g KwkJCWJyb2Fkd2VsbF9zc2V1X2RldmljZV9zdGF0dXMoZGV2X3ByaXYsICZzc2V1KTsKPiArCQll bHNlIGlmIChJU19HRU4oZGV2X3ByaXYsIDkpKQo+ICsJCQlnZW45X3NzZXVfZGV2aWNlX3N0YXR1 cyhkZXZfcHJpdiwgJnNzZXUpOwo+ICsJCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTApCj4gKwkJCWdlbjEwX3NzZXVfZGV2aWNlX3N0YXR1cyhkZXZfcHJpdiwgJnNzZXUpOwo+ICAJ fQo+ICAKPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2LCB3YWtlcmVmKTsKPiAtCj4g IAlpOTE1X3ByaW50X3NzZXVfaW5mbyhtLCBmYWxzZSwgJnNzZXUpOwo+ICAKPiAgCXJldHVybiAw Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IDQxZDI1M2U4YzA5ZS4uMTg0MWQ2NzIw YThkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTgxNCwxMyArODE0LDEzIEBA IHZvaWQgaTkxNV9nZW1fZmx1c2hfZ2d0dF93cml0ZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+ICAKPiAgCWk5MTVfZ2VtX2NoaXBzZXRfZmx1c2goZGV2X3ByaXYpOwo+ICAK PiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7Cj4gLQlzcGluX2xv Y2tfaXJxKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2spOwo+ICsJd2l0aF9pbnRlbF9ydW50aW1lX3Bt KGRldl9wcml2LCB3YWtlcmVmKSB7Cj4gKwkJc3Bpbl9sb2NrX2lycSgmZGV2X3ByaXYtPnVuY29y ZS5sb2NrKTsKPiAgCj4gLQlQT1NUSU5HX1JFQURfRlcoUklOR19IRUFEKFJFTkRFUl9SSU5HX0JB U0UpKTsKPiArCQlQT1NUSU5HX1JFQURfRlcoUklOR19IRUFEKFJFTkRFUl9SSU5HX0JBU0UpKTsK PiAgCj4gLQlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT51bmNvcmUubG9jayk7Cj4gLQlpbnRl bF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdiwgd2FrZXJlZik7Cj4gKwkJc3Bpbl91bmxvY2tfaXJx KCZkZXZfcHJpdi0+dW5jb3JlLmxvY2spOwo+ICsJfQo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXggZTI1YWUxYTc5MDgxLi44NTJk YmMxZjE4NWYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0 LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IEBAIC0yNTM2 LDkgKzI1MzYsOCBAQCBzdGF0aWMgaW50IGdndHRfYmluZF92bWEoc3RydWN0IGk5MTVfdm1hICp2 bWEsCj4gIAlpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX3JlYWRvbmx5KG9iaikpCj4gIAkJcHRlX2Zs YWdzIHw9IFBURV9SRUFEX09OTFk7Cj4gIAo+IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1f Z2V0KGk5MTUpOwo+IC0Jdm1hLT52bS0+aW5zZXJ0X2VudHJpZXModm1hLT52bSwgdm1hLCBjYWNo ZV9sZXZlbCwgcHRlX2ZsYWdzKTsKPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUsIHdha2Vy ZWYpOwo+ICsJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGk5MTUsIHdha2VyZWYpCj4gKwkJdm1hLT52 bS0+aW5zZXJ0X2VudHJpZXModm1hLT52bSwgdm1hLCBjYWNoZV9sZXZlbCwgcHRlX2ZsYWdzKTsK PiAgCj4gIAl2bWEtPnBhZ2Vfc2l6ZXMuZ3R0ID0gSTkxNV9HVFRfUEFHRV9TSVpFOwo+ICAKPiBA QCAtMjU1Nyw5ICsyNTU2LDggQEAgc3RhdGljIHZvaWQgZ2d0dF91bmJpbmRfdm1hKHN0cnVjdCBp OTE1X3ZtYSAqdm1hKQo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB2bWEtPnZt LT5pOTE1Owo+ICAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gIAo+IC0Jd2FrZXJlZiA9IGlu dGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOwo+IC0Jdm1hLT52bS0+Y2xlYXJfcmFuZ2Uodm1hLT52 bSwgdm1hLT5ub2RlLnN0YXJ0LCB2bWEtPnNpemUpOwo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQo aTkxNSwgd2FrZXJlZik7Cj4gKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oaTkxNSwgd2FrZXJlZikK PiArCQl2bWEtPnZtLT5jbGVhcl9yYW5nZSh2bWEtPnZtLCB2bWEtPm5vZGUuc3RhcnQsIHZtYS0+ c2l6ZSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgYWxpYXNpbmdfZ3R0X2JpbmRfdm1hKHN0cnVj dCBpOTE1X3ZtYSAqdm1hLAo+IEBAIC0yNTkzLDkgKzI1OTEsMTAgQEAgc3RhdGljIGludCBhbGlh c2luZ19ndHRfYmluZF92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gIAlpZiAoZmxhZ3MgJiBJ OTE1X1ZNQV9HTE9CQUxfQklORCkgewo+ICAJCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICAK PiAtCQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7Cj4gLQkJdm1hLT52bS0+ aW5zZXJ0X2VudHJpZXModm1hLT52bSwgdm1hLCBjYWNoZV9sZXZlbCwgcHRlX2ZsYWdzKTsKPiAt CQlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1LCB3YWtlcmVmKTsKPiArCQl3aXRoX2ludGVsX3J1 bnRpbWVfcG0oaTkxNSwgd2FrZXJlZikgewo+ICsJCQl2bWEtPnZtLT5pbnNlcnRfZW50cmllcyh2 bWEtPnZtLCB2bWEsCj4gKwkJCQkJCWNhY2hlX2xldmVsLCBwdGVfZmxhZ3MpOwo+ICsJCX0KPiAg CX0KPiAgCj4gIAlyZXR1cm4gMDsKPiBAQCAtMjYwNiwxMSArMjYwNSwxMSBAQCBzdGF0aWMgdm9p ZCBhbGlhc2luZ19ndHRfdW5iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdm1hLT52bS0+aTkxNTsKPiAgCj4gIAlpZiAodm1h LT5mbGFncyAmIEk5MTVfVk1BX0dMT0JBTF9CSU5EKSB7Cj4gKwkJc3RydWN0IGk5MTVfYWRkcmVz c19zcGFjZSAqdm0gPSB2bWEtPnZtOwo+ICAJCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICAK PiAtCQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7Cj4gLQkJdm1hLT52bS0+ Y2xlYXJfcmFuZ2Uodm1hLT52bSwgdm1hLT5ub2RlLnN0YXJ0LCB2bWEtPnNpemUpOwo+IC0JCWlu dGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUsIHdha2VyZWYpOwo+ICsJCXdpdGhfaW50ZWxfcnVudGlt ZV9wbShpOTE1LCB3YWtlcmVmKQo+ICsJCQl2bS0+Y2xlYXJfcmFuZ2Uodm0sIHZtYS0+bm9kZS5z dGFydCwgdm1hLT5zaXplKTsKPiAgCX0KPiAgCj4gIAlpZiAodm1hLT5mbGFncyAmIEk5MTVfVk1B X0xPQ0FMX0JJTkQpIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fc2hyaW5rZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Nocmlua2VyLmMK PiBpbmRleCBlYWMzYTQ3ZjJhNjIuLmNiNTVkYzRmMGQxZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zaHJpbmtlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fc2hyaW5rZXIuYwo+IEBAIC0yOTcsMTQgKzI5NywxNCBAQCBpOTE1X2dl bV9zaHJpbmsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gIHVuc2lnbmVkIGxvbmcg aTkxNV9nZW1fc2hyaW5rX2FsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgewo+ ICAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gLQl1bnNpZ25lZCBsb25nIGZyZWVkOwo+ICsJ dW5zaWduZWQgbG9uZyBmcmVlZCA9IDA7Cj4gIAo+IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVf cG1fZ2V0KGk5MTUpOwo+IC0JZnJlZWQgPSBpOTE1X2dlbV9zaHJpbmsoaTkxNSwgLTFVTCwgTlVM TCwKPiAtCQkJCUk5MTVfU0hSSU5LX0JPVU5EIHwKPiAtCQkJCUk5MTVfU0hSSU5LX1VOQk9VTkQg fAo+IC0JCQkJSTkxNV9TSFJJTktfQUNUSVZFKTsKPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5 MTUsIHdha2VyZWYpOwo+ICsJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGk5MTUsIHdha2VyZWYpIHsK PiArCQlmcmVlZCA9IGk5MTVfZ2VtX3NocmluayhpOTE1LCAtMVVMLCBOVUxMLAo+ICsJCQkJCUk5 MTVfU0hSSU5LX0JPVU5EIHwKPiArCQkJCQlJOTE1X1NIUklOS19VTkJPVU5EIHwKPiArCQkJCQlJ OTE1X1NIUklOS19BQ1RJVkUpOwo+ICsJfQo+ICAKPiAgCXJldHVybiBmcmVlZDsKPiAgfQo+IEBA IC0zNzcsMTQgKzM3NywxNCBAQCBpOTE1X2dlbV9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtl ciAqc2hyaW5rZXIsIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCj4gIAlpZiAoc2MtPm5yX3Nj YW5uZWQgPCBzYy0+bnJfdG9fc2NhbiAmJiBjdXJyZW50X2lzX2tzd2FwZCgpKSB7Cj4gIAkJaW50 ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gIAo+IC0JCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3Bt X2dldChpOTE1KTsKPiAtCQlmcmVlZCArPSBpOTE1X2dlbV9zaHJpbmsoaTkxNSwKPiAtCQkJCQkg c2MtPm5yX3RvX3NjYW4gLSBzYy0+bnJfc2Nhbm5lZCwKPiAtCQkJCQkgJnNjLT5ucl9zY2FubmVk LAo+IC0JCQkJCSBJOTE1X1NIUklOS19BQ1RJVkUgfAo+IC0JCQkJCSBJOTE1X1NIUklOS19CT1VO RCB8Cj4gLQkJCQkJIEk5MTVfU0hSSU5LX1VOQk9VTkQpOwo+IC0JCWludGVsX3J1bnRpbWVfcG1f cHV0KGk5MTUsIHdha2VyZWYpOwo+ICsJCXdpdGhfaW50ZWxfcnVudGltZV9wbShpOTE1LCB3YWtl cmVmKSB7Cj4gKwkJCWZyZWVkICs9IGk5MTVfZ2VtX3NocmluayhpOTE1LAo+ICsJCQkJCQkgc2Mt Pm5yX3RvX3NjYW4gLSBzYy0+bnJfc2Nhbm5lZCwKPiArCQkJCQkJICZzYy0+bnJfc2Nhbm5lZCwK PiArCQkJCQkJIEk5MTVfU0hSSU5LX0FDVElWRSB8Cj4gKwkJCQkJCSBJOTE1X1NIUklOS19CT1VO RCB8Cj4gKwkJCQkJCSBJOTE1X1NIUklOS19VTkJPVU5EKTsKPiArCQl9Cj4gIAl9Cj4gIAo+ICAJ c2hyaW5rZXJfdW5sb2NrKGk5MTUsIHVubG9jayk7Cj4gQEAgLTQ4MSwxMyArNDgxLDEzIEBAIGk5 MTVfZ2VtX3Nocmlua2VyX3ZtYXAoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQg bG9uZyBldmVudCwgdm9pZCAqcHRyCj4gIAlpZiAocmV0KQo+ICAJCWdvdG8gb3V0Owo+ICAKPiAt CXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1KTsKPiAtCWZyZWVkX3BhZ2VzICs9 IGk5MTVfZ2VtX3NocmluayhpOTE1LCAtMVVMLCBOVUxMLAo+IC0JCQkJICAgICAgIEk5MTVfU0hS SU5LX0JPVU5EIHwKPiAtCQkJCSAgICAgICBJOTE1X1NIUklOS19VTkJPVU5EIHwKPiAtCQkJCSAg ICAgICBJOTE1X1NIUklOS19BQ1RJVkUgfAo+IC0JCQkJICAgICAgIEk5MTVfU0hSSU5LX1ZNQVBT KTsKPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUsIHdha2VyZWYpOwo+ICsJd2l0aF9pbnRl bF9ydW50aW1lX3BtKGk5MTUsIHdha2VyZWYpIHsKPiArCQlmcmVlZF9wYWdlcyArPSBpOTE1X2dl bV9zaHJpbmsoaTkxNSwgLTFVTCwgTlVMTCwKPiArCQkJCQkgICAgICAgSTkxNV9TSFJJTktfQk9V TkQgfAo+ICsJCQkJCSAgICAgICBJOTE1X1NIUklOS19VTkJPVU5EIHwKPiArCQkJCQkgICAgICAg STkxNV9TSFJJTktfQUNUSVZFIHwKPiArCQkJCQkgICAgICAgSTkxNV9TSFJJTktfVk1BUFMpOwo+ ICsJfQo+ICAKPiAgCS8qIFdlIGFsc28gd2FudCB0byBjbGVhciBhbnkgY2FjaGVkIGlvbWFwcyBh cyB0aGV5IHdyYXAgdm1hcCAqLwo+ICAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZtYSwgbmV4 dCwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMKPiBpbmRleCAzZDQzZmM5ZGQyNWQuLmIxY2IyZDNj YWUxNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwo+IEBAIC0yMzAsMTQgKzIzMCwxMSBA QCBmcmVxdWVuY3lfc2FtcGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdW5z aWduZWQgaW50IHBlcmlvZF9ucykKPiAgCj4gIAkJdmFsID0gZGV2X3ByaXYtPmd0X3BtLnJwcy5j dXJfZnJlcTsKPiAgCQlpZiAoZGV2X3ByaXYtPmd0LmF3YWtlKSB7Cj4gLQkJCWludGVsX3dha2Vy ZWZfdCB3YWtlcmVmID0KPiAtCQkJCWludGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShkZXZf cHJpdik7Cj4gKwkJCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICAKPiAtCQkJaWYgKHdha2Vy ZWYpIHsKPiArCQkJd2l0aF9pbnRlbF9ydW50aW1lX3BtX2lmX2luX3VzZShkZXZfcHJpdiwgd2Fr ZXJlZikKPiAgCQkJCXZhbCA9IGludGVsX2dldF9jYWdmKGRldl9wcml2LAo+ICAJCQkJCQkgICAg IEk5MTVfUkVBRF9OT1RSQUNFKEdFTjZfUlBTVEFUMSkpOwo+IC0JCQkJaW50ZWxfcnVudGltZV9w bV9wdXQoZGV2X3ByaXYsIHdha2VyZWYpOwo+IC0JCQl9Cj4gIAkJfQo+ICAKPiAgCQlhZGRfc2Ft cGxlX211bHQoJmRldl9wcml2LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9BQ1RdLAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMKPiBpbmRleCAyY2JiZjE2NWQxNzkuLjQxMzEzMDA1 YWY0MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMKPiBAQCAtNDMsMTEgKzQzLDEw IEBAIHN0YXRpYyB1MzIgY2FsY19yZXNpZGVuY3koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAo+ICAJCQkgIGk5MTVfcmVnX3QgcmVnKQo+ICB7Cj4gIAlpbnRlbF93YWtlcmVmX3Qg d2FrZXJlZjsKPiAtCXU2NCByZXM7Cj4gKwl1NjQgcmVzID0gMDsKPiAgCj4gLQl3YWtlcmVmID0g aW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOwo+IC0JcmVzID0gaW50ZWxfcmM2X3Jlc2lk ZW5jeV91cyhkZXZfcHJpdiwgcmVnKTsKPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2 LCB3YWtlcmVmKTsKPiArCXdpdGhfaW50ZWxfcnVudGltZV9wbShkZXZfcHJpdiwgd2FrZXJlZikK PiArCQlyZXMgPSBpbnRlbF9yYzZfcmVzaWRlbmN5X3VzKGRldl9wcml2LCByZWcpOwo+ICAKPiAg CXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVF9VTEwocmVzLCAxMDAwKTsKPiAgfQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rydi5oCj4gaW5kZXggYTFlNGUxMDMzMjg5Li40MjcyYzI2MGI2ZTEgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IEBAIC0yMTg3LDYgKzIxODcsMTQgQEAgaW50ZWxf d2FrZXJlZl90IGludGVsX3J1bnRpbWVfcG1fZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KTsKPiAgaW50ZWxfd2FrZXJlZl90IGludGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gIGludGVsX3dha2VyZWZfdCBpbnRlbF9y dW50aW1lX3BtX2dldF9ub3Jlc3VtZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4g IAo+ICsjZGVmaW5lIHdpdGhfaW50ZWxfcnVudGltZV9wbShpOTE1LCB3ZikgXAo+ICsJZm9yICh3 ZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOyB3ZjsgXAo+ICsJICAgICBpbnRlbF9ydW50 aW1lX3BtX3B1dChpOTE1LCB3ZiksIHdmID0gMCkKPiArCj4gKyNkZWZpbmUgd2l0aF9pbnRlbF9y dW50aW1lX3BtX2lmX2luX3VzZShpOTE1LCB3ZikgXAo+ICsJZm9yICh3ZiA9IGludGVsX3J1bnRp bWVfcG1fZ2V0X2lmX2luX3VzZShpOTE1KTsgd2Y7IFwKPiArCSAgICAgaW50ZWxfcnVudGltZV9w bV9wdXQoaTkxNSwgd2YpLCB3ZiA9IDApCj4gKwo+ICB2b2lkIGludGVsX3J1bnRpbWVfcG1fcHV0 X3VuY2hlY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gICNpZiBJU19FTkFC TEVEKENPTkZJR19EUk1fSTkxNV9ERUJVR19SVU5USU1FX1BNKQo+ICB2b2lkIGludGVsX3J1bnRp bWVfcG1fcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBpbnRlbF93YWtlcmVmX3Qg d3JlZik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2cu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2cuYwo+IGluZGV4IDIwYzBiMzZk NzQ4ZS4uYjUzNTgyYzBjNmMxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2d1Y19sb2cuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2cu Ywo+IEBAIC00NDQsOSArNDQ0LDggQEAgc3RhdGljIHZvaWQgZ3VjX2xvZ19jYXB0dXJlX2xvZ3Mo c3RydWN0IGludGVsX2d1Y19sb2cgKmxvZykKPiAgCSAqIEdlbmVyYWxseSBkZXZpY2UgaXMgZXhw ZWN0ZWQgdG8gYmUgYWN0aXZlIG9ubHkgYXQgdGhpcwo+ICAJICogdGltZSwgc28gZ2V0L3B1dCBz aG91bGQgYmUgcmVhbGx5IHF1aWNrLgo+ICAJICovCj4gLQl3YWtlcmVmID0gaW50ZWxfcnVudGlt ZV9wbV9nZXQoZGV2X3ByaXYpOwo+IC0JZ3VjX2FjdGlvbl9mbHVzaF9sb2dfY29tcGxldGUoZ3Vj KTsKPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2LCB3YWtlcmVmKTsKPiArCXdpdGhf aW50ZWxfcnVudGltZV9wbShkZXZfcHJpdiwgd2FrZXJlZikKPiArCQlndWNfYWN0aW9uX2ZsdXNo X2xvZ19jb21wbGV0ZShndWMpOwo+ICB9Cj4gIAo+ICBpbnQgaW50ZWxfZ3VjX2xvZ19jcmVhdGUo c3RydWN0IGludGVsX2d1Y19sb2cgKmxvZykKPiBAQCAtNTA3LDcgKzUwNiw3IEBAIGludCBpbnRl bF9ndWNfbG9nX3NldF9sZXZlbChzdHJ1Y3QgaW50ZWxfZ3VjX2xvZyAqbG9nLCB1MzIgbGV2ZWwp Cj4gIAlzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSBsb2dfdG9fZ3VjKGxvZyk7Cj4gIAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOwo+ICAJaW50ZWxf d2FrZXJlZl90IHdha2VyZWY7Cj4gLQlpbnQgcmV0Owo+ICsJaW50IHJldCA9IDA7Cj4gIAo+ICAJ QlVJTERfQlVHX09OKEdVQ19MT0dfVkVSQk9TSVRZX01JTiAhPSAwKTsKPiAgCUdFTV9CVUdfT04o IWxvZy0+dm1hKTsKPiBAQCAtNTIxLDE2ICs1MjAsMTQgQEAgaW50IGludGVsX2d1Y19sb2dfc2V0 X2xldmVsKHN0cnVjdCBpbnRlbF9ndWNfbG9nICpsb2csIHUzMiBsZXZlbCkKPiAgCj4gIAltdXRl eF9sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gIAo+IC0JaWYgKGxvZy0+bGV2 ZWwgPT0gbGV2ZWwpIHsKPiAtCQlyZXQgPSAwOwo+ICsJaWYgKGxvZy0+bGV2ZWwgPT0gbGV2ZWwp Cj4gIAkJZ290byBvdXRfdW5sb2NrOwo+IC0JfQo+ICAKPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50 aW1lX3BtX2dldChkZXZfcHJpdik7Cj4gLQlyZXQgPSBndWNfYWN0aW9uX2NvbnRyb2xfbG9nKGd1 YywgR1VDX0xPR19MRVZFTF9JU19WRVJCT1NFKGxldmVsKSwKPiAtCQkJCSAgICAgR1VDX0xPR19M RVZFTF9JU19FTkFCTEVEKGxldmVsKSwKPiAtCQkJCSAgICAgR1VDX0xPR19MRVZFTF9UT19WRVJC T1NJVFkobGV2ZWwpKTsKPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2LCB3YWtlcmVm KTsKPiArCXdpdGhfaW50ZWxfcnVudGltZV9wbShkZXZfcHJpdiwgd2FrZXJlZikKPiArCQlyZXQg PSBndWNfYWN0aW9uX2NvbnRyb2xfbG9nKGd1YywKPiArCQkJCQkgICAgIEdVQ19MT0dfTEVWRUxf SVNfVkVSQk9TRShsZXZlbCksCj4gKwkJCQkJICAgICBHVUNfTE9HX0xFVkVMX0lTX0VOQUJMRUQo bGV2ZWwpLAo+ICsJCQkJCSAgICAgR1VDX0xPR19MRVZFTF9UT19WRVJCT1NJVFkobGV2ZWwpKTsK PiAgCWlmIChyZXQpIHsKPiAgCQlEUk1fREVCVUdfRFJJVkVSKCJndWNfbG9nX2NvbnRyb2wgYWN0 aW9uIGZhaWxlZCAlZFxuIiwgcmV0KTsKPiAgCQlnb3RvIG91dF91bmxvY2s7Cj4gQEAgLTYxMSw5 ICs2MDgsOCBAQCB2b2lkIGludGVsX2d1Y19sb2dfcmVsYXlfZmx1c2goc3RydWN0IGludGVsX2d1 Y19sb2cgKmxvZykKPiAgCSAqLwo+ICAJZmx1c2hfd29yaygmbG9nLT5yZWxheS5mbHVzaF93b3Jr KTsKPiAgCj4gLQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7Cj4gLQlndWNf YWN0aW9uX2ZsdXNoX2xvZyhndWMpOwo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSwgd2Fr ZXJlZik7Cj4gKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oaTkxNSwgd2FrZXJlZikKPiArCQlndWNf YWN0aW9uX2ZsdXNoX2xvZyhndWMpOwo+ICAKPiAgCS8qIEd1QyB3b3VsZCBoYXZlIHVwZGF0ZWQg bG9nIGJ1ZmZlciBieSBub3csIHNvIGNhcHR1cmUgaXQgKi8KPiAgCWd1Y19sb2dfY2FwdHVyZV9s b2dzKGxvZyk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2h1Yy5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmMKPiBpbmRleCAzZThjMThiNmE0MmQu LjliZDFjOTAwMmMyYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9o dWMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2h1Yy5jCj4gQEAgLTExNiwx NCArMTE2LDEzIEBAIGludCBpbnRlbF9odWNfY2hlY2tfc3RhdHVzKHN0cnVjdCBpbnRlbF9odWMg Kmh1YykKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gaHVjX3Rv X2k5MTUoaHVjKTsKPiAgCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0JYm9vbCBzdGF0dXM7 Cj4gKwlib29sIHN0YXR1cyA9IGZhbHNlOwo+ICAKPiAgCWlmICghSEFTX0hVQyhkZXZfcHJpdikp Cj4gIAkJcmV0dXJuIC1FTk9ERVY7Cj4gIAo+IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1f Z2V0KGRldl9wcml2KTsKPiAtCXN0YXR1cyA9IEk5MTVfUkVBRChIVUNfU1RBVFVTMikgJiBIVUNf RldfVkVSSUZJRUQ7Cj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdiwgd2FrZXJlZik7 Cj4gKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oZGV2X3ByaXYsIHdha2VyZWYpCj4gKwkJc3RhdHVz ID0gSTkxNV9SRUFEKEhVQ19TVEFUVVMyKSAmIEhVQ19GV19WRVJJRklFRDsKPiAgCj4gIAlyZXR1 cm4gc3RhdHVzOwo+ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BhbmVsLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCj4gaW5kZXggOTNh MmU0YjVjNTRjLi41YTM5YTYzNDdhN2EgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcGFuZWwuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVs LmMKPiBAQCAtMTIwNCwxNyArMTIwNCwxOSBAQCBzdGF0aWMgaW50IGludGVsX2JhY2tsaWdodF9k ZXZpY2VfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQo+ICAJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+YmFzZS5kZXY7Cj4gIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gIAlpbnRlbF93YWtlcmVm X3Qgd2FrZXJlZjsKPiAtCXUzMiBod19sZXZlbDsKPiAtCWludCByZXQ7Cj4gKwlpbnQgcmV0ID0g MDsKPiAgCj4gLQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOwo+IC0J ZHJtX21vZGVzZXRfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0aW9uX211dGV4LCBOVUxM KTsKPiArCXdpdGhfaW50ZWxfcnVudGltZV9wbShkZXZfcHJpdiwgd2FrZXJlZikgewo+ICsJCXUz MiBod19sZXZlbDsKPiAgCj4gLQlod19sZXZlbCA9IGludGVsX3BhbmVsX2dldF9iYWNrbGlnaHQo Y29ubmVjdG9yKTsKPiAtCXJldCA9IHNjYWxlX2h3X3RvX3VzZXIoY29ubmVjdG9yLCBod19sZXZl bCwgYmQtPnByb3BzLm1heF9icmlnaHRuZXNzKTsKPiArCQlkcm1fbW9kZXNldF9sb2NrKCZkZXYt Pm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsIE5VTEwpOwo+ICAKPiAtCWRybV9tb2Rlc2V0 X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0aW9uX211dGV4KTsKPiAtCWludGVsX3J1 bnRpbWVfcG1fcHV0KGRldl9wcml2LCB3YWtlcmVmKTsKPiArCQlod19sZXZlbCA9IGludGVsX3Bh bmVsX2dldF9iYWNrbGlnaHQoY29ubmVjdG9yKTsKPiArCQlyZXQgPSBzY2FsZV9od190b191c2Vy KGNvbm5lY3RvciwKPiArCQkJCSAgICAgICBod19sZXZlbCwgYmQtPnByb3BzLm1heF9icmlnaHRu ZXNzKTsKPiArCj4gKwkJZHJtX21vZGVzZXRfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLmNvbm5l Y3Rpb25fbXV0ZXgpOwo+ICsJfQo+ICAKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF91bmNvcmUuYwo+IGluZGV4IDU4MTM1NWI4NTA1Yy4uNjRlZDVhNzhkYTY0IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VuY29yZS5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMKPiBAQCAtMTY5NiwyMSArMTY5Niwy MSBAQCBpbnQgaTkxNV9yZWdfcmVhZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAK PiAgCWZsYWdzID0gcmVnLT5vZmZzZXQgJiAoZW50cnktPnNpemUgLSAxKTsKPiAgCj4gLQl3YWtl cmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOwo+IC0JaWYgKGVudHJ5LT5zaXpl ID09IDggJiYgZmxhZ3MgPT0gSTkxNV9SRUdfUkVBRF84Ql9XQSkKPiAtCQlyZWctPnZhbCA9IEk5 MTVfUkVBRDY0XzJ4MzIoZW50cnktPm9mZnNldF9sZHcsCj4gLQkJCQkJICAgIGVudHJ5LT5vZmZz ZXRfdWR3KTsKPiAtCWVsc2UgaWYgKGVudHJ5LT5zaXplID09IDggJiYgZmxhZ3MgPT0gMCkKPiAt CQlyZWctPnZhbCA9IEk5MTVfUkVBRDY0KGVudHJ5LT5vZmZzZXRfbGR3KTsKPiAtCWVsc2UgaWYg KGVudHJ5LT5zaXplID09IDQgJiYgZmxhZ3MgPT0gMCkKPiAtCQlyZWctPnZhbCA9IEk5MTVfUkVB RChlbnRyeS0+b2Zmc2V0X2xkdyk7Cj4gLQllbHNlIGlmIChlbnRyeS0+c2l6ZSA9PSAyICYmIGZs YWdzID09IDApCj4gLQkJcmVnLT52YWwgPSBJOTE1X1JFQUQxNihlbnRyeS0+b2Zmc2V0X2xkdyk7 Cj4gLQllbHNlIGlmIChlbnRyeS0+c2l6ZSA9PSAxICYmIGZsYWdzID09IDApCj4gLQkJcmVnLT52 YWwgPSBJOTE1X1JFQUQ4KGVudHJ5LT5vZmZzZXRfbGR3KTsKPiAtCWVsc2UKPiAtCQlyZXQgPSAt RUlOVkFMOwo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYsIHdha2VyZWYpOwo+ICsJ d2l0aF9pbnRlbF9ydW50aW1lX3BtKGRldl9wcml2LCB3YWtlcmVmKSB7Cj4gKwkJaWYgKGVudHJ5 LT5zaXplID09IDggJiYgZmxhZ3MgPT0gSTkxNV9SRUdfUkVBRF84Ql9XQSkKPiArCQkJcmVnLT52 YWwgPSBJOTE1X1JFQUQ2NF8yeDMyKGVudHJ5LT5vZmZzZXRfbGR3LAo+ICsJCQkJCQkgICAgZW50 cnktPm9mZnNldF91ZHcpOwo+ICsJCWVsc2UgaWYgKGVudHJ5LT5zaXplID09IDggJiYgZmxhZ3Mg PT0gMCkKPiArCQkJcmVnLT52YWwgPSBJOTE1X1JFQUQ2NChlbnRyeS0+b2Zmc2V0X2xkdyk7Cj4g KwkJZWxzZSBpZiAoZW50cnktPnNpemUgPT0gNCAmJiBmbGFncyA9PSAwKQo+ICsJCQlyZWctPnZh bCA9IEk5MTVfUkVBRChlbnRyeS0+b2Zmc2V0X2xkdyk7Cj4gKwkJZWxzZSBpZiAoZW50cnktPnNp emUgPT0gMiAmJiBmbGFncyA9PSAwKQo+ICsJCQlyZWctPnZhbCA9IEk5MTVfUkVBRDE2KGVudHJ5 LT5vZmZzZXRfbGR3KTsKPiArCQllbHNlIGlmIChlbnRyeS0+c2l6ZSA9PSAxICYmIGZsYWdzID09 IDApCj4gKwkJCXJlZy0+dmFsID0gSTkxNV9SRUFEOChlbnRyeS0+b2Zmc2V0X2xkdyk7Cj4gKwkJ ZWxzZQo+ICsJCQlyZXQgPSAtRUlOVkFMOwo+ICsJfQo+ICAKPiAgCXJldHVybiByZXQ7Cj4gIH0K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW0uYwo+IGluZGV4IDAxYTQ2 YzQ2ZmUyNS4uZTc3YjdlZDQ0OWFlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2k5MTVfZ2VtLmMKPiBAQCAtOTgsMjYgKzk4LDIyIEBAIHN0YXRpYyB2b2lkIHBtX3N1c3Bl bmQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIHsKPiAgCWludGVsX3dha2VyZWZf dCB3YWtlcmVmOwo+ICAKPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1KTsK PiAtCj4gLQlpOTE1X2dlbV9zdXNwZW5kX2d0dF9tYXBwaW5ncyhpOTE1KTsKPiAtCWk5MTVfZ2Vt X3N1c3BlbmRfbGF0ZShpOTE1KTsKPiAtCj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1LCB3 YWtlcmVmKTsKPiArCXdpdGhfaW50ZWxfcnVudGltZV9wbShpOTE1LCB3YWtlcmVmKSB7Cj4gKwkJ aTkxNV9nZW1fc3VzcGVuZF9ndHRfbWFwcGluZ3MoaTkxNSk7Cj4gKwkJaTkxNV9nZW1fc3VzcGVu ZF9sYXRlKGk5MTUpOwo+ICsJfQo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBwbV9oaWJlcm5hdGUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIHsKPiAgCWludGVsX3dha2VyZWZfdCB3 YWtlcmVmOwo+ICAKPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1KTsKPiAt Cj4gLQlpOTE1X2dlbV9zdXNwZW5kX2d0dF9tYXBwaW5ncyhpOTE1KTsKPiAtCj4gLQlpOTE1X2dl bV9mcmVlemUoaTkxNSk7Cj4gLQlpOTE1X2dlbV9mcmVlemVfbGF0ZShpOTE1KTsKPiArCXdpdGhf aW50ZWxfcnVudGltZV9wbShpOTE1LCB3YWtlcmVmKSB7Cj4gKwkJaTkxNV9nZW1fc3VzcGVuZF9n dHRfbWFwcGluZ3MoaTkxNSk7Cj4gIAo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSwgd2Fr ZXJlZik7Cj4gKwkJaTkxNV9nZW1fZnJlZXplKGk5MTUpOwo+ICsJCWk5MTVfZ2VtX2ZyZWV6ZV9s YXRlKGk5MTUpOwo+ICsJfQo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBwbV9yZXN1bWUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gQEAgLTEyOCwxMyArMTI0LDExIEBAIHN0YXRpYyB2 b2lkIHBtX3Jlc3VtZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgCSAqIEJvdGgg c3VzcGVuZCBhbmQgaGliZXJuYXRlIGZvbGxvdyB0aGUgc2FtZSB3YWtldXAgcGF0aCBhbmQgYXNz dW1lCj4gIAkgKiB0aGF0IHJ1bnRpbWUtcG0ganVzdCB3b3Jrcy4KPiAgCSAqLwo+IC0Jd2FrZXJl ZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOwo+IC0KPiAtCWludGVsX2VuZ2luZXNfc2Fu aXRpemUoaTkxNSwgZmFsc2UpOwo+IC0JaTkxNV9nZW1fc2FuaXRpemUoaTkxNSk7Cj4gLQlpOTE1 X2dlbV9yZXN1bWUoaTkxNSk7Cj4gLQo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSwgd2Fr ZXJlZik7Cj4gKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oaTkxNSwgd2FrZXJlZikgewo+ICsJCWlu dGVsX2VuZ2luZXNfc2FuaXRpemUoaTkxNSwgZmFsc2UpOwo+ICsJCWk5MTVfZ2VtX3Nhbml0aXpl KGk5MTUpOwo+ICsJCWk5MTVfZ2VtX3Jlc3VtZShpOTE1KTsKPiArCX0KPiAgfQo+ICAKPiAgc3Rh dGljIGludCBpZ3RfZ2VtX3N1c3BlbmQodm9pZCAqYXJnKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQuYwo+IGluZGV4IDZlZGY5NDM4OTJk MC4uZjU5MjZhYTIzZTlkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvaTkxNV9nZW1fY29udGV4dC5jCj4gQEAgLTYxMCw5ICs2MTAsOSBAQCBzdGF0aWMgaW50 IGlndF9jdHhfZXhlYyh2b2lkICphcmcpCj4gIAkJCQl9Cj4gIAkJCX0KPiAgCj4gLQkJCXdha2Vy ZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1KTsKPiAtCQkJZXJyID0gZ3B1X2ZpbGwob2Jq LCBjdHgsIGVuZ2luZSwgZHcpOwo+IC0JCQlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1LCB3YWtl cmVmKTsKPiArCQkJZXJyID0gMDsKPiArCQkJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGk5MTUsIHdh a2VyZWYpCj4gKwkJCQllcnIgPSBncHVfZmlsbChvYmosIGN0eCwgZW5naW5lLCBkdyk7Cj4gIAkJ CWlmIChlcnIpIHsKPiAgCQkJCXByX2VycigiRmFpbGVkIHRvIGZpbGwgZHdvcmQgJWx1IFslbHUv JWx1XSB3aXRoIGdwdSAoJXMpIGluIGN0eCAldSBbZnVsbC1wcGd0dD8gJXNdLCBlcnI9JWRcbiIs Cj4gIAkJCQkgICAgICAgbmR3b3JkcywgZHcsIG1heF9kd29yZHMob2JqKSwKPiBAQCAtNzE4LDkg KzcxOCw5IEBAIHN0YXRpYyBpbnQgaWd0X2N0eF9yZWFkb25seSh2b2lkICphcmcpCj4gIAkJCQkJ aTkxNV9nZW1fb2JqZWN0X3NldF9yZWFkb25seShvYmopOwo+ICAJCQl9Cj4gIAo+IC0JCQl3YWtl cmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7Cj4gLQkJCWVyciA9IGdwdV9maWxsKG9i aiwgY3R4LCBlbmdpbmUsIGR3KTsKPiAtCQkJaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSwgd2Fr ZXJlZik7Cj4gKwkJCWVyciA9IDA7Cj4gKwkJCXdpdGhfaW50ZWxfcnVudGltZV9wbShpOTE1LCB3 YWtlcmVmKQo+ICsJCQkJZXJyID0gZ3B1X2ZpbGwob2JqLCBjdHgsIGVuZ2luZSwgZHcpOwo+ICAJ CQlpZiAoZXJyKSB7Cj4gIAkJCQlwcl9lcnIoIkZhaWxlZCB0byBmaWxsIGR3b3JkICVsdSBbJWx1 LyVsdV0gd2l0aCBncHUgKCVzKSBpbiBjdHggJXUgW2Z1bGwtcHBndHQ/ICVzXSwgZXJyPSVkXG4i LAo+ICAJCQkJICAgICAgIG5kd29yZHMsIGR3LCBtYXhfZHdvcmRzKG9iaiksCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3QuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3QuYwo+IGluZGV4IDM1 NzVlMTM4N2MzZi4uMzk1YWU4NzhlMGY3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3QuYwo+IEBAIC01MDksOSArNTA5LDggQEAgc3Rh dGljIHZvaWQgZGlzYWJsZV9yZXRpcmVfd29ya2VyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KQo+ICAJaWYgKCFpOTE1LT5ndC5hY3RpdmVfcmVxdWVzdHMrKykgewo+ICAJCWludGVsX3dh a2VyZWZfdCB3YWtlcmVmOwo+ICAKPiAtCQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQo aTkxNSk7Cj4gLQkJaTkxNV9nZW1fdW5wYXJrKGk5MTUpOwo+IC0JCWludGVsX3J1bnRpbWVfcG1f cHV0KGk5MTUsIHdha2VyZWYpOwo+ICsJCXdpdGhfaW50ZWxfcnVudGltZV9wbShpOTE1LCB3YWtl cmVmKQo+ICsJCQlpOTE1X2dlbV91bnBhcmsoaTkxNSk7Cj4gIAl9Cj4gIAltdXRleF91bmxvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAKPiBAQCAtNTkzLDEwICs1OTIsMTAgQEAgc3Rh dGljIGludCBpZ3RfbW1hcF9vZmZzZXRfZXhoYXVzdGlvbih2b2lkICphcmcpCj4gIAkJCWdvdG8g b3V0Owo+ICAJCX0KPiAgCj4gKwkJZXJyID0gMDsKPiAgCQltdXRleF9sb2NrKCZpOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPiAtCQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7 Cj4gLQkJZXJyID0gbWFrZV9vYmpfYnVzeShvYmopOwo+IC0JCWludGVsX3J1bnRpbWVfcG1fcHV0 KGk5MTUsIHdha2VyZWYpOwo+ICsJCXdpdGhfaW50ZWxfcnVudGltZV9wbShpOTE1LCB3YWtlcmVm KQo+ICsJCQllcnIgPSBtYWtlX29ial9idXN5KG9iaik7Cj4gIAkJbXV0ZXhfdW5sb2NrKCZpOTE1 LT5kcm0uc3RydWN0X211dGV4KTsKPiAgCQlpZiAoZXJyKSB7Cj4gIAkJCXByX2VycigiW2xvb3Ag JWRdIEZhaWxlZCB0byBidXN5IHRoZSBvYmplY3RcbiIsIGxvb3ApOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfd29ya2Fyb3VuZHMuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jCj4gaW5kZXggYzZh MjZkN2FkMzI2Li5iN2I1YmJlZmY1MWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2ludGVsX3dvcmthcm91bmRzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaW50ZWxfd29ya2Fyb3VuZHMuYwo+IEBAIC00OCw5ICs0OCw5IEBAIHJl YWRfbm9ucHJpdnMoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+ICAJaWYgKGVycikKPiAgCQlnb3RvIGVycl9vYmo7Cj4gIAo+IC0J d2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGVuZ2luZS0+aTkxNSk7Cj4gLQlycSA9IGk5 MTVfcmVxdWVzdF9hbGxvYyhlbmdpbmUsIGN0eCk7Cj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dChl bmdpbmUtPmk5MTUsIHdha2VyZWYpOwo+ICsJcnEgPSBFUlJfUFRSKC1FTk9ERVYpOwo+ICsJd2l0 aF9pbnRlbF9ydW50aW1lX3BtKGVuZ2luZS0+aTkxNSwgd2FrZXJlZikKPiArCQlycSA9IGk5MTVf cmVxdWVzdF9hbGxvYyhlbmdpbmUsIGN0eCk7Cj4gIAlpZiAoSVNfRVJSKHJxKSkgewo+ICAJCWVy ciA9IFBUUl9FUlIocnEpOwo+ICAJCWdvdG8gZXJyX3BpbjsKPiBAQCAtMTkxLDE0ICsxOTEsMTUg QEAgc3dpdGNoX3RvX3NjcmF0Y2hfY29udGV4dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsCj4gIAlpZiAoSVNfRVJSKGN0eCkpCj4gIAkJcmV0dXJuIFBUUl9FUlIoY3R4KTsKPiAgCj4g LQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoZW5naW5lLT5pOTE1KTsKPiAtCj4gLQlp ZiAoc3BpbikKPiAtCQlycSA9IGlndF9zcGlubmVyX2NyZWF0ZV9yZXF1ZXN0KHNwaW4sIGN0eCwg ZW5naW5lLCBNSV9OT09QKTsKPiAtCWVsc2UKPiAtCQlycSA9IGk5MTVfcmVxdWVzdF9hbGxvYyhl bmdpbmUsIGN0eCk7Cj4gLQo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoZW5naW5lLT5pOTE1LCB3 YWtlcmVmKTsKPiArCXJxID0gRVJSX1BUUigtRU5PREVWKTsKPiArCXdpdGhfaW50ZWxfcnVudGlt ZV9wbShlbmdpbmUtPmk5MTUsIHdha2VyZWYpIHsKPiArCQlpZiAoc3BpbikKPiArCQkJcnEgPSBp Z3Rfc3Bpbm5lcl9jcmVhdGVfcmVxdWVzdChzcGluLAo+ICsJCQkJCQkJY3R4LCBlbmdpbmUsCj4g KwkJCQkJCQlNSV9OT09QKTsKPiArCQllbHNlCj4gKwkJCXJxID0gaTkxNV9yZXF1ZXN0X2FsbG9j KGVuZ2luZSwgY3R4KTsKPiArCX0KPiAgCj4gIAlrZXJuZWxfY29udGV4dF9jbG9zZShjdHgpOwo+ ICAKPiBAQCAtMjU2LDkgKzI1Nyw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfd2hpdGVsaXN0X2Fjcm9z c19yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gIAlpZiAoZXJyKQo+ICAJ CWdvdG8gb3V0Owo+ICAKPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1KTsK PiAtCWVyciA9IHJlc2V0KGVuZ2luZSk7Cj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1LCB3 YWtlcmVmKTsKPiArCXdpdGhfaW50ZWxfcnVudGltZV9wbShpOTE1LCB3YWtlcmVmKQo+ICsJCWVy ciA9IHJlc2V0KGVuZ2luZSk7Cj4gIAo+ICAJaWYgKHdhbnRfc3Bpbikgewo+ICAJCWlndF9zcGlu bmVyX2VuZCgmc3Bpbik7CgotLSAKSmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNlIEdyYXBo aWNzIENlbnRlcgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK