From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC 1/5] drm: Add DRM support for tiny LCD displays Date: Wed, 16 Mar 2016 16:11:23 +0100 Message-ID: <20160316151123.GP14170@phenom.ffwll.local> References: <1458135259-31050-1-git-send-email-noralf@tronnes.org> <1458135259-31050-2-git-send-email-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x22d.google.com (mail-wm0-x22d.google.com [IPv6:2a00:1450:400c:c09::22d]) by gabe.freedesktop.org (Postfix) with ESMTPS id E43316E956 for ; Wed, 16 Mar 2016 15:10:36 +0000 (UTC) Received: by mail-wm0-x22d.google.com with SMTP id l68so192753225wml.0 for ; Wed, 16 Mar 2016 08:10:36 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1458135259-31050-2-git-send-email-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: thomas.petazzoni@free-electrons.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBNYXIgMTYsIDIwMTYgYXQgMDI6MzQ6MTVQTSArMDEwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IHRpbnlkcm0gcHJvdmlkZXMgYSB2ZXJ5IHNpbXBsaWZpZWQgdmlldyBvZiBEUk0g Zm9yIGRpc3BsYXlzIHRoYXQgaGFzCj4gb25ib2FyZCB2aWRlbyBtZW1vcnkgYW5kIGlzIGNvbm5l Y3RlZCB0aHJvdWdoIGEgc2xvdyBidXMgbGlrZSBTUEkvSTJDLgo+IAo+IFNpZ25lZC1vZmYtYnk6 IE5vcmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgoKWWF5LCBpdCBmaW5hbGx5IGhh cHBlbnMhIEkgYWxyZWFkeSBtYWRlIGEgY29tbWVudCBvbiB0aGUgY292ZXIgbGV0dGVyCmFib3V0 IHRoZSBmYmRldiBzdHVmZiwgSSB0aGluayB0aGF0J3MgdGhlIGJpZ2dlc3QgcGFydCB0byBzcGxp dCBvdXQgZnJvbQp0aW55ZHJtIGhlcmUuIEknbSBub3QgZW50aXJlbHkgc3VyZSBhIGRldGFpbGVk IGNvZGUgcmV2aWV3IG1ha2VzIHNlbnNlCmJlZm9yZSB0aGF0IHBhcnQgaXMgZG9uZSAoYW5kIGhl eSB3ZSBjYW4gc3RhcnQgbWVyZ2luZyBhbHJlYWR5KSwgc28ganVzdCBhCmhpZ2ggbGV2ZWwgcmV2 aWV3IGZvciBub3c6CgpUaGUgYmlnIHN0b3J5IGluIGttcy9kcm0gaW4gdGhlIHBhc3QgeWVhcnMg aXMgdGhhdCB3ZSd2ZSByZWplY3RpbmcKYW55dGhpbmcgdGhhdCByZW1vdGVseSBsb29rcyBsaWtl IGEgbWlkbGF5ZXIuIEluc3RlYWQgdGhlIHByZWZlcnJlZCBkZXNpZ24KcGF0dGVybiBpcyBhIGxp YnJhcnkgb2YgaGVscGVyIGZ1bmN0aW9ucyB0byBpbXBsZW1lbnQgdXNlZnVsIGRlZmF1bHQKYmVo YXZpb3VyLCBvciBzb21ldGltZXMganVzdCBidWlsZGluZyBibG9ja3MgZm9yIHVzZWZ1bCBkZWZh dWx0IGJlaGF2aW91ci4KQW5kIHRoZW4gYnVpbGQgdXAgcmVhbCBkcml2ZXJzIHVzaW5nIHRoZXNl IHBpZWNlcy4gVGhlIGJlbmVmaXQgb2YgdGhhdCBpcwp0d28tZm9sZDoKLSBlYXNpZXIgdG8gc2hh cmUgY29kZSB3aXRoIG90aGVyIGRyaXZlcnMgdGhhdCBvbmx5IG5lZWQgcGFydCBvZiB0aGUKICBi ZWhhdmlvdXIgKGUuZy4gZmJkZXYgZGVmZXJyZWQgaW8gc3VwcG9ydCkuCi0gZWFzaWVyIHRvIGFk YXB0IHRvIHNwZWNpYWwgaHcgdGhhdCBuZWVkcyBleGNlcHRpb25zIHNpbmNlIHdvcnN0IGNhc2Ug eW91CiAgY2FuIGp1c3QgY29weXBhc3RlIGFuIGVudGlyZSBob29rLiBPciBpbXBsZW1lbnQgdGhl IHNwZWNpYWwgY2FzZSBhbmQKICBjYWxsIHRoZSBkZWZhdWx0IGhlbHBlciBmb3IgdGhlIG5vcm1h bCBjYXNlcy4KCmx3biBoYXMgYSBnb29kIGFydGljbGUgb24gdGhpcyBwYXR0ZXJuOgoKaHR0cHM6 Ly9sd24ubmV0L0FydGljbGVzLzMzNjI2Mi8KCkluIHRoZSBjYXNlIG9mIHRpbnlkcm0gSSB0aGlu ayB0aGF0IG1lYW5zIHdlIHNob3VsZCBoYXZlIGEgYnVuY2ggb2YgbmV3CmRybSBoZWxwZXJzLCBv ciBleHRlbnNpb25zIGZvciBleGlzdGluZyBvbmVzOgotIGZiZGV2IGRlZmVycmVkIGlvIHN1cHBv cnQgdXNpbmcgLT5kaXJ0eWZiIGluIGRybV9mYl9oZWxwZXIuYy4KLSBIZWxwZXIgdG8gZ2VuZXJh dGUgYSBzaW1wbGUgZGlzcGxheSBwaXBlbGluZSB3aXRoIDEgcGxhbmUsIDEgY3J0YywgMQogIGVu Y29kZXIgcG9pbnRpbmcgYXQgYSBzcGVjaWZpYyBkcm1fY29ubmVjdG9yLiBUaGVyZSdzIGxvdHMg b2Ygb3RoZXIKICBzaW1wbGUgaHcgdGhhdCBjb3VsZCB1c2UgdGhpcy4gTWF5YmUgY3JlYXRlIGEg bmV3CiAgZHJtX3NpbXBsZV9rbXNfaGVscGVyLmMgZm9yIHRoaXMuCi0gQSBoZWxwZXIgdG8gY3Jl YXRlIGEgc2ltcGxlIGRybV9jb25uZWN0b3IgZnJvbSBhIGRybV9wYW5lbCAodGhlCiAgZ2V0X21v ZGVzIGhvb2tzIHlvdSBoYXZlIGhlcmUpLCBtYXliZSBhbHNvIGluIGRybV9zaW1wbGVfa21zX2hl bHBlci5jLgotIEhlbHBlcnMgdG8gaGFuZGxlIGRpcnR5ZmIsIGxpa2UgdGhlIGNsaXAgcmVjdCBt ZXJnZSBmdW5jdGlvbiB5b3UgaGF2ZSBpbgogIGhlcmUuCi0gSGVscGVyIG1heWJlIGZvciBwdXJl bHkgc29mdHdhcmUgZnJhbWVidWZmZXJzIHRoYXQgYXJlIHVwbG9hZGVkIHVzaW5nCiAgY3B1IGFj Y2VzcyBpbnN0ZWFkIG9mIGRtYS4KClRoZW4gYnVzLXNwZWNpZmljIHN1cHBvcnQgeW91IGhhdmUg aW4gbGF0ZXIgcGF0Y2hlcyBmb3IgdGlueWRybSB3b3VsZCBlYWNoCmJlIGEgc2VwYXJhdGUgZHJt IGRyaXZlciwgYXNzZW1lYmxlZCB1c2luZyB0aG9zZSBoZWxwZXIgYmxvY2tzLiBJdCdzIGEKbm90 Y2ggbW9yZSBib2lsZXJwbGF0ZSBtYXliZSwgYnV0IGFsbCB0aGUgc2VwYXJhdGUgcGllY2VzIEkg bGlzdGVkIGFib3ZlCndvdWxkIGJlIHVzZWZ1bCBpbiBkcml2ZXJzIG91dHNpZGUgb2YganVzdCB0 aW55ZHJtLiBBbmQgbWF5YmUgb3RoZXIKZHJpdmVycyB3b3VsZCBuZWVkIGFsbW9zdCBldmVyeXRo aW5nLCBleGNlcHQgdGhlIGRybV9mcmFtZWJ1ZmZlciBtdXN0IGJlCmFsbG9jZWQgdXNpbmcgdGhl IGRtYSBhcGkgKGkuZS4gdGhvc2Ugc2hvdWxkIHVzZSB0aGUgY21hIGhlbHBlcnMpLCBlLmcuCndo ZW4geW91ciBkdW1iIGJ1cyBjYW4gZG8gZG1hIG9mIHNvbWUgc29ydC4KCkFueXdheSBmaXJzdCB0 aG91Z2h0cywgSSdtIHJlYWxseSBoYXBweSB0aGF0IHNvbWV0aGluZyBsaWtlIHRoaXMgZmluYWxs eQpoYXBwZW5zIQoKQ2hlZXJzLCBEYW5pZWwKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL0tjb25m aWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0v TWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1 L2RybS90aW55ZHJtL0tjb25maWcgICAgICAgICAgICAgICAgICAgIHwgIDExICsKPiAgZHJpdmVy cy9ncHUvZHJtL3Rpbnlkcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBk cml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgOCAr Cj4gIGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvaW50ZXJuYWwuaCAgICAgICAgICAgIHwg IDQzICsrKwo+ICBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tY29yZS5jICAg ICAgICB8IDE5NCArKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90 aW55ZHJtLWNydGMuYyAgICAgICAgfCAyMDMgKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2Ry bS90aW55ZHJtL2NvcmUvdGlueWRybS1kZWZlcnJlZC5jICAgIHwgMTE2ICsrKysrKysKPiAgZHJp dmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWZiZGV2LmMgICAgICAgfCAzNDUgKysr KysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRy bS1mcmFtZWJ1ZmZlci5jIHwgMTEyICsrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0v Y29yZS90aW55ZHJtLWhlbHBlcnMuYyAgICAgfCAgOTcgKysrKysrCj4gIGRyaXZlcnMvZ3B1L2Ry bS90aW55ZHJtL2NvcmUvdGlueWRybS1wbGFuZS5jICAgICAgIHwgIDUwICsrKwo+ICBpbmNsdWRl L2RybS90aW55ZHJtL3Rpbnlkcm0uaCAgICAgICAgICAgICAgICAgICAgICB8IDE0MiArKysrKysr KysKPiAgMTQgZmlsZXMgY2hhbmdlZCwgMTMyNSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9LY29uZmlnCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9NYWtlZmlsZQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9pbnRlcm5hbC5oCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tY29yZS5jCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0t Y3J0Yy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3Jl L3Rpbnlkcm0tZGVmZXJyZWQuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L3Rpbnlkcm0vY29yZS90aW55ZHJtLWZiZGV2LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1mcmFtZWJ1ZmZlci5jCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0taGVscGVycy5j Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlk cm0tcGxhbmUuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vdGlueWRybS90aW55 ZHJtLmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJz L2dwdS9kcm0vS2NvbmZpZwo+IGluZGV4IGM0YmY5YTEuLjNmOGVkZTAgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ IEBAIC0yNjYsMyArMjY2LDUgQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9L Y29uZmlnIgo+ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9pbXgvS2NvbmZpZyIKPiAgCj4gIHNv dXJjZSAiZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnIgo+ICsKPiArc291cmNlICJkcml2ZXJz L2dwdS9kcm0vdGlueWRybS9LY29uZmlnIgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBpbmRleCAxZTlmZjRjLi5jN2M1 YzE2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZQo+IEBAIC03NSwzICs3NSw0IEBAIG9iai15CQkJKz0gaTJjLwo+ ICBvYmoteQkJCSs9IHBhbmVsLwo+ICBvYmoteQkJCSs9IGJyaWRnZS8KPiAgb2JqLSQoQ09ORklH X0RSTV9GU0xfRENVKSArPSBmc2wtZGN1Lwo+ICtvYmotJChDT05GSUdfRFJNX1RJTllEUk0pICs9 IHRpbnlkcm0vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL0tjb25maWcg Yi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9LY29uZmlnCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi5mMjkwMDQ1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS90aW55ZHJtL0tjb25maWcKPiBAQCAtMCwwICsxLDExIEBACj4gK21lbnVjb25maWcg RFJNX1RJTllEUk0KPiArCXRyaXN0YXRlICJTdXBwb3J0IGZvciBzbWFsbCBURlQgTENEIGRpc3Bs YXkgbW9kdWxlcyIKPiArCWRlcGVuZHMgb24gRFJNCj4gKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIK PiArCXNlbGVjdCBEUk1fS01TX0NNQV9IRUxQRVIKPiArCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQ RVIKPiArCXNlbGVjdCBEUk1fUEFORUwKPiArCXNlbGVjdCBWSURFT01PREVfSEVMUEVSUwo+ICsJ aGVscAo+ICsJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSB0aW55ZHJtIHN1cHBv cnRlZCBkaXNwbGF5Lgo+ICsJICBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBj YWxsZWQgdGlueWRybS4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNzQ3NmVkMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vdGlueWRybS9NYWtlZmlsZQo+IEBAIC0wLDAgKzEgQEAKPiArb2JqLSQo Q09ORklHX0RSTV9USU5ZRFJNKQkJKz0gY29yZS8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUv TWFrZWZpbGUKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjAzMzA5ZjQK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtl ZmlsZQo+IEBAIC0wLDAgKzEsOCBAQAo+ICtvYmotJChDT05GSUdfRFJNX1RJTllEUk0pCQkrPSB0 aW55ZHJtLm8KPiArdGlueWRybS15CQkJCSs9IHRpbnlkcm0tY29yZS5vCj4gK3Rpbnlkcm0teQkJ CQkrPSB0aW55ZHJtLWNydGMubwo+ICt0aW55ZHJtLXkJCQkJKz0gdGlueWRybS1mcmFtZWJ1ZmZl ci5vCj4gK3Rpbnlkcm0teQkJCQkrPSB0aW55ZHJtLXBsYW5lLm8KPiArdGlueWRybS15CQkJCSs9 IHRpbnlkcm0taGVscGVycy5vCj4gK3Rpbnlkcm0teQkJCQkrPSB0aW55ZHJtLWRlZmVycmVkLm8K PiArdGlueWRybS0kKENPTkZJR19EUk1fS01TX0ZCX0hFTFBFUikJKz0gdGlueWRybS1mYmRldi5v Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvaW50ZXJuYWwuaCBi L2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvaW50ZXJuYWwuaAo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYTEyNjY1OAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL2ludGVybmFsLmgKPiBAQCAtMCwwICsxLDQzIEBA Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNiBOb3JhbGYgVHLDuG5uZXMKPiArICoKPiAr ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiArICogdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPiArICogKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICovCj4gKwo+ICtpbnQgdGlueWRy bV9jcnRjX2NyZWF0ZShzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpOwo+ICsKPiArc3RhdGlj IGlubGluZSBib29sIHRpbnlkcm1fYWN0aXZlKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikK PiArewo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICsKPiArCWRybV9mb3JfZWFjaF9jcnRj KGNydGMsIHRkZXYtPmJhc2UpCj4gKwkJcmV0dXJuIGNydGMtPnN0YXRlICYmIGNydGMtPnN0YXRl LT5hY3RpdmU7Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICt2b2lkIHRpbnlkcm1f bW9kZV9jb25maWdfaW5pdChzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpOwo+ICsKPiAraW50 IHRpbnlkcm1fcGxhbmVfaW5pdChzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpOwo+ICsKPiAr I2lmZGVmIENPTkZJR19EUk1fS01TX0ZCX0hFTFBFUgo+ICtpbnQgdGlueWRybV9mYmRldl9pbml0 KHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldik7Cj4gK3ZvaWQgdGlueWRybV9mYmRldl9maW5p KHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldik7Cj4gK3ZvaWQgdGlueWRybV9mYmRldl9yZXN0 b3JlX21vZGUoc3RydWN0IHRpbnlkcm1fZmJkZXYgKmZiZGV2KTsKPiArI2Vsc2UKPiArc3RhdGlj IGlubGluZSBpbnQgdGlueWRybV9mYmRldl9pbml0KHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRl dikKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW55 ZHJtX2ZiZGV2X2Zpbmkoc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KQo+ICt7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW55ZHJtX2ZiZGV2X3Jlc3RvcmVfbW9kZShzdHJ1Y3Qg dGlueWRybV9mYmRldiAqZmJkZXYpCj4gK3sKPiArfQo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWNvcmUuYyBiL2RyaXZlcnMvZ3B1 L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1jb3JlLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAuLmNiM2NmNzEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWNvcmUuYwo+IEBAIC0wLDAgKzEsMTk0IEBACj4g Ky8vI2RlZmluZSBERUJVRwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRy w7hubmVzCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gKyAqIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UsIG9yCj4gKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqLwo+ ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19o ZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1 ZGUgPGRybS90aW55ZHJtL3Rpbnlkcm0uaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ ICsKPiArI2luY2x1ZGUgImludGVybmFsLmgiCj4gKwo+ICtzdGF0aWMgaW50IHRpbnlkcm1fbG9h ZChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKPiArewo+ICsJ c3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsJaW50IHJldDsKPiArCj4gKwlEUk1fREVC VUdfS01TKCJcbiIpOwo+ICsKPiArCXRpbnlkcm1fbW9kZV9jb25maWdfaW5pdCh0ZGV2KTsKPiAr Cj4gKwlyZXQgPSB0aW55ZHJtX3BsYW5lX2luaXQodGRldik7Cj4gKwlpZiAocmV0KQo+ICsJCXJl dHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gdGlueWRybV9jcnRjX2NyZWF0ZSh0ZGV2KTsKPiArCWlm IChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwljb25uZWN0b3IgPSBsaXN0X2ZpcnN0X2Vu dHJ5KCZkZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwKPiArCQkJCSAgICAgdHlwZW9m KCpjb25uZWN0b3IpLCBoZWFkKTsKPiArCWNvbm5lY3Rvci0+c3RhdHVzID0gY29ubmVjdG9yX3N0 YXR1c19jb25uZWN0ZWQ7Cj4gKwo+ICsJZHJtX3BhbmVsX2luaXQoJnRkZXYtPnBhbmVsKTsKPiAr CWRybV9wYW5lbF9hZGQoJnRkZXYtPnBhbmVsKTsKPiArCWRybV9wYW5lbF9hdHRhY2goJnRkZXYt PnBhbmVsLCBjb25uZWN0b3IpOwo+ICsKPiArCWRybV9tb2RlX2NvbmZpZ19yZXNldChkZGV2KTsK PiArCj4gKwlyZXQgPSB0aW55ZHJtX2ZiZGV2X2luaXQodGRldik7Cj4gKwlpZiAocmV0KQo+ICsJ CXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRp bnlkcm1fbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2KQo+ICt7Cj4gKwlzdHJ1Y3Qg dGlueWRybV9kZXZpY2UgKnRkZXYgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlEUk1fREVC VUdfS01TKCJcbiIpOwo+ICsJdGlueWRybV9mYmRldl9yZXN0b3JlX21vZGUodGRldi0+ZmJkZXYp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0aW55ZHJt X2ZvcHMgPSB7Cj4gKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCj4gKwkub3BlbgkJPSBkcm1fb3Bl biwKPiArCS5yZWxlYXNlCT0gZHJtX3JlbGVhc2UsCj4gKwkudW5sb2NrZWRfaW9jdGwJPSBkcm1f aW9jdGwsCj4gKyNpZmRlZiBDT05GSUdfQ09NUEFUCj4gKwkuY29tcGF0X2lvY3RsCT0gZHJtX2Nv bXBhdF9pb2N0bCwKPiArI2VuZGlmCj4gKwkucG9sbAkJPSBkcm1fcG9sbCwKPiArCS5yZWFkCQk9 IGRybV9yZWFkLAo+ICsJLmxsc2VlawkJPSBub19sbHNlZWssCj4gKwkubW1hcAkJPSBkcm1fZ2Vt X2NtYV9tbWFwLAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIHRpbnlkcm1f ZHJpdmVyID0gewo+ICsJLmRyaXZlcl9mZWF0dXJlcwk9IERSSVZFUl9HRU0gfCBEUklWRVJfTU9E RVNFVCB8IERSSVZFUl9QUklNRQo+ICsJCQkJfCBEUklWRVJfQVRPTUlDLAo+ICsJLmxvYWQJCQk9 IHRpbnlkcm1fbG9hZCwKPiArCS5sYXN0Y2xvc2UJCT0gdGlueWRybV9sYXN0Y2xvc2UsCj4gKy8v CS51bmxvYWQJCQk9IHRpbnlkcm1fdW5sb2FkLAo+ICsJLmdldF92YmxhbmtfY291bnRlcgk9IGRy bV92YmxhbmtfY291bnQsCj4gKy8vCS5lbmFibGVfdmJsYW5rCQk9IHRpbnlkcm1fZW5hYmxlX3Zi bGFuaywKPiArLy8JLmRpc2FibGVfdmJsYW5rCQk9IHRpbnlkcm1fZGlzYWJsZV92YmxhbmssCj4g KwkuZ2VtX2ZyZWVfb2JqZWN0CT0gZHJtX2dlbV9jbWFfZnJlZV9vYmplY3QsCj4gKwkuZ2VtX3Zt X29wcwkJPSAmZHJtX2dlbV9jbWFfdm1fb3BzLAo+ICsJLnByaW1lX2hhbmRsZV90b19mZAk9IGRy bV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAo+ICsJLnByaW1lX2ZkX3RvX2hhbmRsZQk9IGRybV9n ZW1fcHJpbWVfZmRfdG9faGFuZGxlLAo+ICsJLmdlbV9wcmltZV9pbXBvcnQJPSBkcm1fZ2VtX3By aW1lX2ltcG9ydCwKPiArCS5nZW1fcHJpbWVfZXhwb3J0CT0gZHJtX2dlbV9wcmltZV9leHBvcnQs Cj4gKwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZQk9IGRybV9nZW1fY21hX3ByaW1lX2dldF9zZ190 YWJsZSwKPiArCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVf aW1wb3J0X3NnX3RhYmxlLAo+ICsJLmdlbV9wcmltZV92bWFwCQk9IGRybV9nZW1fY21hX3ByaW1l X3ZtYXAsCj4gKwkuZ2VtX3ByaW1lX3Z1bm1hcAk9IGRybV9nZW1fY21hX3ByaW1lX3Z1bm1hcCwK PiArCS5nZW1fcHJpbWVfbW1hcAkJPSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwLAo+ICsJLmR1bWJf Y3JlYXRlCQk9IGRybV9nZW1fY21hX2R1bWJfY3JlYXRlLAo+ICsJLmR1bWJfbWFwX29mZnNldAk9 IGRybV9nZW1fY21hX2R1bWJfbWFwX29mZnNldCwKPiArCS5kdW1iX2Rlc3Ryb3kJCT0gZHJtX2dl bV9kdW1iX2Rlc3Ryb3ksCj4gKwkuZm9wcwkJCT0gJnRpbnlkcm1fZm9wcywKPiArCS5uYW1lCQkJ PSAidGlueWRybSIsCj4gKwkuZGVzYwkJCT0gInRpbnlkcm0iLAo+ICsJLmRhdGUJCQk9ICIyMDE1 MDkxNiIsCj4gKwkubWFqb3IJCQk9IDEsCj4gKwkubWlub3IJCQk9IDAsCj4gK307Cj4gKwo+ICt2 b2lkIHRpbnlkcm1fcmVsZWFzZShzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCj4gK3sKPiAr CURSTV9ERUJVR19LTVMoIlxuIik7Cj4gKwo+ICsJaWYgKHRkZXYtPmRlZmVycmVkKQo+ICsJCWNh bmNlbF9kZWxheWVkX3dvcmtfc3luYygmdGRldi0+ZGVmZXJyZWQtPmR3b3JrKTsKPiArCj4gKwl0 aW55ZHJtX2ZiZGV2X2ZpbmkodGRldik7Cj4gKwo+ICsJZHJtX3BhbmVsX2RldGFjaCgmdGRldi0+ cGFuZWwpOwo+ICsJZHJtX3BhbmVsX3JlbW92ZSgmdGRldi0+cGFuZWwpOwo+ICsKPiArCWRybV9t b2RlX2NvbmZpZ19jbGVhbnVwKHRkZXYtPmJhc2UpOwo+ICsJZHJtX2Rldl91bnJlZ2lzdGVyKHRk ZXYtPmJhc2UpOwo+ICsJZHJtX2Rldl91bnJlZih0ZGV2LT5iYXNlKTsKPiArfQo+ICtFWFBPUlRf U1lNQk9MKHRpbnlkcm1fcmVsZWFzZSk7Cj4gKwo+ICtpbnQgdGlueWRybV9yZWdpc3RlcihzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKPiArewo+ICsJc3Ry dWN0IGRybV9kcml2ZXIgKmRyaXZlciA9ICZ0aW55ZHJtX2RyaXZlcjsKPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkZGV2Owo+ICsJaW50IHJldDsKPiArCj4gKwlkZXZfaW5mbyhkZXYsICIlc1xuIiwg X19mdW5jX18pOwo+ICsKPiArZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygz Mik7Cj4gKwo+ICsJaWYgKFdBUk5fT04oIXRkZXYtPmRpcnR5ZmIpKQo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsKPiArCWRkZXYgPSBkcm1fZGV2X2FsbG9jKGRyaXZlciwgZGV2KTsKPiArCWlmICgh ZGRldikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwl0ZGV2LT5iYXNlID0gZGRldjsKPiAr CWRkZXYtPmRldl9wcml2YXRlID0gdGRldjsKPiArCj4gKwlyZXQgPSBkcm1fZGV2X3NldF91bmlx dWUoZGRldiwgZGV2X25hbWUoZGRldi0+ZGV2KSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJy X2ZyZWU7Cj4gKwo+ICsJcmV0ID0gZHJtX2Rldl9yZWdpc3RlcihkZGV2LCAwKTsKPiArCWlmIChy ZXQpCj4gKwkJZ290byBlcnJfZnJlZTsKPiArCj4gKwlEUk1fSU5GTygiRGV2aWNlOiAlc1xuIiwg ZGV2X25hbWUoZGV2KSk7Cj4gKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgb24g bWlub3IgJWRcbiIsCj4gKwkJIGRyaXZlci0+bmFtZSwgZHJpdmVyLT5tYWpvciwgZHJpdmVyLT5t aW5vciwgZHJpdmVyLT5wYXRjaGxldmVsLAo+ICsJCSBkZGV2LT5wcmltYXJ5LT5pbmRleCk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfZnJlZToKPiArCWRybV9kZXZfdW5yZWYoZGRldik7 Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKHRpbnlkcm1fcmVnaXN0 ZXIpOwo+ICsKPiArc3RhdGljIHZvaWQgZGV2bV90aW55ZHJtX3JlbGVhc2Uoc3RydWN0IGRldmlj ZSAqZGV2LCB2b2lkICpyZXMpCj4gK3sKPiArCXRpbnlkcm1fcmVsZWFzZSgqKHN0cnVjdCB0aW55 ZHJtX2RldmljZSAqKilyZXMpOwo+ICt9Cj4gKwo+ICtpbnQgZGV2bV90aW55ZHJtX3JlZ2lzdGVy KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KQo+ICt7Cj4g KwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKipwdHI7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXB0ciA9 IGRldnJlc19hbGxvYyhkZXZtX3Rpbnlkcm1fcmVsZWFzZSwgc2l6ZW9mKCpwdHIpLCBHRlBfS0VS TkVMKTsKPiArCWlmICghcHRyKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXJldCA9IHRp bnlkcm1fcmVnaXN0ZXIoZGV2LCB0ZGV2KTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZyZXNfZnJl ZShwdHIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJKnB0ciA9IHRkZXY7Cj4gKwlk ZXZyZXNfYWRkKGRldiwgcHRyKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lN Qk9MKGRldm1fdGlueWRybV9yZWdpc3Rlcik7Cj4gKwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1jcnRj LmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tY3J0Yy5jCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi42NWIzNDI2Cj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1jcnRjLmMKPiBAQCAt MCwwICsxLDIwMyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRyw7hu bmVzCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gKyAqIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yCj4gKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqLwo+ICsK PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxw ZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRy bS90aW55ZHJtL3Rpbnlkcm0uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArCj4gKyNp bmNsdWRlICJpbnRlcm5hbC5oIgo+ICsKPiArc3RhdGljIGludCB0aW55ZHJtX2Nvbm5lY3Rvcl9n ZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJc3RydWN0 IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gY29ubmVjdG9yLT5kZXYtPmRldl9wcml2YXRlOwo+ICsJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCURSTV9E RUJVR19LTVMoIlxuIik7Cj4gKwlyZXQgPSBkcm1fcGFuZWxfZ2V0X21vZGVzKCZ0ZGV2LT5wYW5l bCk7Cj4gKwlpZiAocmV0ID4gMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCW1vZGUgPSBkcm1f Y3Z0X21vZGUoY29ubmVjdG9yLT5kZXYsIHRkZXYtPndpZHRoLCB0ZGV2LT5oZWlnaHQsIDYwLCBm YWxzZSwgZmFsc2UsIGZhbHNlKTsKPiArCWlmICghbW9kZSkKPiArCQlyZXR1cm4gMDsKPiArCj4g Kwltb2RlLT50eXBlIHw9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOwo+ICsJZHJtX21vZGVfcHJv YmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOwo+ICsKPiArCXJldHVybiAxOwo+ICt9Cj4gKwo+ICtz dGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICoKPiArdGlueWRybV9jb25uZWN0b3JfYmVzdF9lbmNv ZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXJldHVybiBkcm1f ZW5jb2Rlcl9maW5kKGNvbm5lY3Rvci0+ZGV2LCBjb25uZWN0b3ItPmVuY29kZXJfaWRzWzBdKTsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5j cyB0aW55ZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7Cj4gKwkuZ2V0X21vZGVzID0gdGlu eWRybV9jb25uZWN0b3JfZ2V0X21vZGVzLAo+ICsJLmJlc3RfZW5jb2RlciA9IHRpbnlkcm1fY29u bmVjdG9yX2Jlc3RfZW5jb2RlciwKPiArfTsKPiArCj4gK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0 b3Jfc3RhdHVzCj4gK3Rpbnlkcm1fY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQo+ICt7Cj4gKwlEUk1fREVCVUdfS01TKCJzdGF0dXMg PSAlZFxuIiwgY29ubmVjdG9yLT5zdGF0dXMpOwo+ICsKPiArCWlmIChkcm1fZGV2aWNlX2lzX3Vu cGx1Z2dlZChjb25uZWN0b3ItPmRldikpCj4gKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlz Y29ubmVjdGVkOwo+ICsKPiArCXJldHVybiBjb25uZWN0b3ItPnN0YXR1czsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgdGlueWRybV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlEUk1fREVCVUdfS01TKCJcbiIpOwo+ICsJZHJtX2Nvbm5l Y3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7Cj4gKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29u bmVjdG9yKTsKPiArCWtmcmVlKGNvbm5lY3Rvcik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyB0aW55ZHJtX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKPiAr CS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCj4gKwkucmVzZXQgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCj4gKwkuZGV0ZWN0ID0gdGlueWRybV9j b25uZWN0b3JfZGV0ZWN0LAo+ICsJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3Npbmds ZV9jb25uZWN0b3JfbW9kZXMsCj4gKwkuZGVzdHJveSA9IHRpbnlkcm1fY29ubmVjdG9yX2Rlc3Ry b3ksCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0YXRpYyB2 b2lkIHRpbnlkcm1fZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikK PiArewo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0aW55ZHJtX2VuY29kZXJfZW5hYmxlKHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiArewo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRpbnlk cm1fZW5jb2Rlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ICsJ CQkJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArCQkJCQlzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHRpbnlkcm1f ZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7Cj4gKwkuZGlzYWJsZSA9IHRpbnlkcm1fZW5jb2Rlcl9k aXNhYmxlLAo+ICsJLmVuYWJsZSA9IHRpbnlkcm1fZW5jb2Rlcl9lbmFibGUsCj4gKwkuYXRvbWlj X2NoZWNrID0gdGlueWRybV9lbmNvZGVyX2F0b21pY19jaGVjaywKPiArfTsKPiArCj4gK3N0YXRp YyB2b2lkIHRpbnlkcm1fZW5jb2Rlcl9jbGVhbnVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKPiArewo+ICsJRFJNX0RFQlVHX0tNUygiXG4iKTsKPiArCWRybV9lbmNvZGVyX2NsZWFudXAo ZW5jb2Rlcik7Cj4gKwlrZnJlZShlbmNvZGVyKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB0aW55ZHJtX2VuY29kZXJfZnVuY3MgPSB7Cj4gKwkuZGVz dHJveSA9IHRpbnlkcm1fZW5jb2Rlcl9jbGVhbnVwLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQg dGlueWRybV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVj dCB0aW55ZHJtX2RldmljZSAqdGRldiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJ RFJNX0RFQlVHX0tNUygicHJlcGFyZWQ9JXUsIGVuYWJsZWQ9JXVcbiIsIHRkZXYtPnByZXBhcmVk LCB0ZGV2LT5lbmFibGVkKTsKPiArCj4gKwkvKiBUaGUgcGFuZWwgbXVzdCBiZSBwcmVwYXJlZCBv biB0aGUgZmlyc3QgY3J0YyBlbmFibGUgYWZ0ZXIgcHJvYmUgKi8KPiArCXRpbnlkcm1fcHJlcGFy ZSh0ZGV2KTsKPiArCS8qIFRoZSBwYW5lbCBpcyBlbmFibGVkIGFmdGVyIHRoZSBmaXJzdCBkaXNw bGF5IHVwZGF0ZSAqLwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0aW55ZHJtX2NydGNfZGlzYWJs ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCB0aW55ZHJtX2RldmljZSAq dGRldiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygicHJl cGFyZWQ9JXUsIGVuYWJsZWQ9JXVcbiIsIHRkZXYtPnByZXBhcmVkLCB0ZGV2LT5lbmFibGVkKTsK PiArCj4gKwl0aW55ZHJtX2Rpc2FibGUodGRldik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIHRpbnlkcm1fY3J0Y19oZWxwZXJfZnVuY3MgPSB7 Cj4gKwkuZGlzYWJsZSA9IHRpbnlkcm1fY3J0Y19kaXNhYmxlLAo+ICsJLmVuYWJsZSA9IHRpbnlk cm1fY3J0Y19lbmFibGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCB0aW55ZHJtX2NydGNfY2xl YW51cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCURSTV9ERUJVR19LTVMoIlxuIik7 Cj4gKwlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOwo+ICsJa2ZyZWUoY3J0Yyk7Cj4gK30KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgdGlueWRybV9jcnRjX2Z1bmNzID0g ewo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldCwKPiArCS5kZXN0cm95 ID0gdGlueWRybV9jcnRjX2NsZWFudXAsCj4gKwkuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNfaGVs cGVyX3NldF9jb25maWcsCj4gKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9m bGlwLAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRj X2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNf aGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK2ludCB0aW55ZHJtX2NydGNf Y3JlYXRlKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKPiArewo+ICsJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IHRkZXYtPmJhc2U7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yOwo+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwo+ICsJc3RydWN0IGRybV9jcnRj ICpjcnRjOwo+ICsJaW50IHJldDsKPiArCj4gKwljb25uZWN0b3IgPSBremFsbG9jKHNpemVvZigq Y29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7Cj4gKwllbmNvZGVyID0ga3phbGxvYyhzaXplb2YoKmVu Y29kZXIpLCBHRlBfS0VSTkVMKTsKPiArCWNydGMgPSBremFsbG9jKHNpemVvZigqY3J0YyksIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFjb25uZWN0b3IgfHwgIWVuY29kZXIgfHwgIWNydGMpIHsKPiAr CQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZXJyb3JfZnJlZTsKPiArCX0KPiArCj4gKwlkcm1f Y3J0Y19oZWxwZXJfYWRkKGNydGMsICZ0aW55ZHJtX2NydGNfaGVscGVyX2Z1bmNzKTsKPiArCXJl dCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZGV2LCBjcnRjLCAmdGRldi0+cGxhbmUsIE5V TEwsCj4gKwkJCQkJJnRpbnlkcm1fY3J0Y19mdW5jcyk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8g ZXJyb3JfZnJlZTsKPiArCj4gKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDEgPDwgZHJtX2Ny dGNfaW5kZXgoY3J0Yyk7Cj4gKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZ0aW55 ZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKPiArCXJldCA9IGRybV9lbmNvZGVyX2luaXQoZGV2 LCBlbmNvZGVyLCAmdGlueWRybV9lbmNvZGVyX2Z1bmNzLAo+ICsJCQkgICAgICAgRFJNX01PREVf RU5DT0RFUl9OT05FKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJvcl9mcmVlOwo+ICsKPiAr CWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZ0aW55ZHJtX2Nvbm5lY3Rvcl9o ZWxwZXJfZnVuY3MpOwo+ICsJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9y LCAmdGlueWRybV9jb25uZWN0b3JfZnVuY3MsCj4gKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX1ZJ UlRVQUwpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycm9yX2ZyZWU7Cj4gKwo+ICsJcmV0ID0g ZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7Cj4g KwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyb3JfZnJlZTsKPiArCj4gKwlyZXQgPSBkcm1fY29ubmVj dG9yX3JlZ2lzdGVyKGNvbm5lY3Rvcik7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyb3JfZnJl ZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycm9yX2ZyZWU6Cj4gKwlrZnJlZShjcnRjKTsK PiArCWtmcmVlKGVuY29kZXIpOwo+ICsJa2ZyZWUoY29ubmVjdG9yKTsKPiArCj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlu eWRybS1kZWZlcnJlZC5jIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWRl ZmVycmVkLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjE2NTUzYTYK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55 ZHJtLWRlZmVycmVkLmMKPiBAQCAtMCwwICsxLDExNiBAQAo+ICsjaW5jbHVkZSA8ZHJtL3Rpbnlk cm0vdGlueWRybS5oPgo+ICsKPiArI2luY2x1ZGUgImludGVybmFsLmgiCj4gKwo+ICtib29sIHRp bnlkcm1fZGVmZXJyZWRfYmVnaW4oc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2LAo+ICsJCQkg ICAgc3RydWN0IHRpbnlkcm1fZmJfY2xpcCAqZmJfY2xpcCkKPiArewo+ICsJc3RydWN0IHRpbnlk cm1fZGVmZXJyZWQgKmRlZmVycmVkID0gdGRldi0+ZGVmZXJyZWQ7Cj4gKwo+ICsJc3Bpbl9sb2Nr KCZkZWZlcnJlZC0+bG9jayk7Cj4gKwkqZmJfY2xpcCA9IGRlZmVycmVkLT5mYl9jbGlwOwo+ICsJ dGlueWRybV9yZXNldF9jbGlwKCZkZWZlcnJlZC0+ZmJfY2xpcC5jbGlwKTsKPiArCWRlZmVycmVk LT5mYl9jbGlwLmZiID0gTlVMTDsKPiArCWRlZmVycmVkLT5mYl9jbGlwLnZtZW0gPSBOVUxMOwo+ ICsJc3Bpbl91bmxvY2soJmRlZmVycmVkLT5sb2NrKTsKPiArCj4gKwkvKiBUaGUgY3J0YyBtaWdo dCBoYXZlIGJlZW4gZGlzYWJsZWQgYnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUgKi8KPiArCWlmICgh dGlueWRybV9hY3RpdmUodGRldikpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCS8qIE9uIGZp cnN0IHVwZGF0ZSBtYWtlIHN1cmUgdG8gZG8gdGhlIGVudGlyZSBmcmFtZWJ1ZmZlciAqLwo+ICsJ aWYgKCF0ZGV2LT5lbmFibGVkKSB7Cj4gKwkJZmJfY2xpcC0+Y2xpcC54MSA9IDA7Cj4gKwkJZmJf Y2xpcC0+Y2xpcC54MiA9IGZiX2NsaXAtPmZiLT53aWR0aCAtIDE7Cj4gKwkJZmJfY2xpcC0+Y2xp cC55MSA9IDA7Cj4gKwkJZmJfY2xpcC0+Y2xpcC55MiA9IGZiX2NsaXAtPmZiLT5oZWlnaHQgLSAx Owo+ICsJfQo+ICsKPiArCS8qIFRPRE86IHN1cHBvcnQgcGFydGlhbCB1cGRhdGVzICovCj4gKwlm Yl9jbGlwLT5jbGlwLngxID0gMDsKPiArCWZiX2NsaXAtPmNsaXAueDIgPSBmYl9jbGlwLT5mYi0+ d2lkdGggLSAxOwo+ICsJZmJfY2xpcC0+Y2xpcC55MSA9IDA7Cj4gKwlmYl9jbGlwLT5jbGlwLnky ID0gZmJfY2xpcC0+ZmItPmhlaWdodCAtIDE7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiAr RVhQT1JUX1NZTUJPTCh0aW55ZHJtX2RlZmVycmVkX2JlZ2luKTsKPiArCj4gK3ZvaWQgdGlueWRy bV9kZWZlcnJlZF9lbmQoc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KQo+ICt7Cj4gKwlpZiAo dGRldi0+cHJlcGFyZWQgJiYgIXRkZXYtPmVuYWJsZWQpIHsKPiArCQlkcm1fcGFuZWxfZW5hYmxl KCZ0ZGV2LT5wYW5lbCk7Cj4gKwkJdGRldi0+ZW5hYmxlZCA9IHRydWU7Cj4gKwl9Cj4gK30KPiAr RVhQT1JUX1NZTUJPTCh0aW55ZHJtX2RlZmVycmVkX2VuZCk7Cj4gKwo+ICtpbnQgdGlueWRybV9k aXJ0eWZiKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCB2b2lkICp2bWVtLCB1bnNpZ25lZCBm bGFncywKPiArCQkgICAgdW5zaWduZWQgY29sb3IsIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlw cywKPiArCQkgICAgdW5zaWduZWQgbnVtX2NsaXBzKQo+ICt7Cj4gKwlzdHJ1Y3QgdGlueWRybV9k ZXZpY2UgKnRkZXYgPSBmYi0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlzdHJ1Y3QgdGlueWRy bV9kZWZlcnJlZCAqZGVmZXJyZWQgPSB0ZGV2LT5kZWZlcnJlZDsKPiArCXN0cnVjdCB0aW55ZHJt X2ZiX2NsaXAgKmZiX2NsaXAgPSAmdGRldi0+ZGVmZXJyZWQtPmZiX2NsaXA7Cj4gKwo+ICsJYm9v bCBub19kZWxheSA9IGRlZmVycmVkLT5ub19kZWxheTsKPiArCXVuc2lnbmVkIGxvbmcgZGVsYXk7 Cj4gKwo+ICsJZGV2X2RiZyh0ZGV2LT5iYXNlLT5kZXYsICIlcyhmYiA9ICVwLCB2bWVtID0gJXAs IGNsaXBzID0gJXAsIG51bV9jbGlwcyA9ICV1LCBub19kZWxheSA9ICV1KVxuIiwgX19mdW5jX18s IGZiLCB2bWVtLCBjbGlwcywgbnVtX2NsaXBzLCBub19kZWxheSk7Cj4gKwo+ICsJaWYgKCF2bWVt IHx8ICFmYikKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlzcGluX2xvY2soJmRlZmVycmVk LT5sb2NrKTsKPiArCWZiX2NsaXAtPmZiID0gZmI7Cj4gKwlmYl9jbGlwLT52bWVtID0gdm1lbTsK PiArCXRpbnlkcm1fbWVyZ2VfY2xpcHMoJmZiX2NsaXAtPmNsaXAsIGNsaXBzLCBudW1fY2xpcHMs IGZsYWdzLAo+ICsJCQkgICAgZmItPndpZHRoLCBmYi0+aGVpZ2h0KTsKPiArCWlmICh0aW55ZHJt X2lzX2Z1bGxfY2xpcCgmZmJfY2xpcC0+Y2xpcCwgZmItPndpZHRoLCBmYi0+aGVpZ2h0KSkKPiAr CQlub19kZWxheSA9IHRydWU7Cj4gKwlzcGluX3VubG9jaygmZGVmZXJyZWQtPmxvY2spOwo+ICsK PiArCWRlbGF5ID0gbm9fZGVsYXkgPyAwIDogbXNlY3NfdG9famlmZmllcyhkZWZlcnJlZC0+ZGVm ZXJfbXMpOwo+ICsKPiArCWlmIChzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRlZmVycmVkLT5kd29y aywgZGVsYXkpKQo+ICsJCWRldl9kYmcodGRldi0+YmFzZS0+ZGV2LCAiJXM6IEFscmVhZHkgc2No ZWR1bGVkXG4iLCBfX2Z1bmNfXyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZ TUJPTCh0aW55ZHJtX2RpcnR5ZmIpOwo+ICsKPiArdm9pZCB0aW55ZHJtX21lcmdlX2NsaXBzKHN0 cnVjdCBkcm1fY2xpcF9yZWN0ICpkc3QsCj4gKwkJCSBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xp cHMsIHVuc2lnbmVkIG51bV9jbGlwcywKPiArCQkJIHVuc2lnbmVkIGZsYWdzLCB1MzIgd2lkdGgs IHUzMiBoZWlnaHQpCj4gK3sKPiArCXN0cnVjdCBkcm1fY2xpcF9yZWN0IGZ1bGxfY2xpcCA9IHsK PiArCQkueDEgPSAwLAo+ICsJCS54MiA9IHdpZHRoIC0gMSwKPiArCQkueTEgPSAwLAo+ICsJCS55 MiA9IGhlaWdodCAtIDEsCj4gKwl9Owo+ICsJaW50IGk7Cj4gKwo+ICsJaWYgKCFjbGlwcykgewo+ ICsJCWNsaXBzID0gJmZ1bGxfY2xpcDsKPiArCQludW1fY2xpcHMgPSAxOwo+ICsJfQo+ICsKPiAr CWZvciAoaSA9IDA7IGkgPCBudW1fY2xpcHM7IGkrKykgewo+ICsJCWRzdC0+eDEgPSBtaW4oZHN0 LT54MSwgY2xpcHNbaV0ueDEpOwo+ICsJCWRzdC0+eDIgPSBtYXgoZHN0LT54MiwgY2xpcHNbaV0u eDIpOwo+ICsJCWRzdC0+eTEgPSBtaW4oZHN0LT55MSwgY2xpcHNbaV0ueTEpOwo+ICsJCWRzdC0+ eTIgPSBtYXgoZHN0LT55MiwgY2xpcHNbaV0ueTIpOwo+ICsKPiArCQlpZiAoZmxhZ3MgJiBEUk1f TU9ERV9GQl9ESVJUWV9BTk5PVEFURV9DT1BZKSB7Cj4gKwkJCWkrKzsKPiArCQkJZHN0LT54MiA9 IG1heChkc3QtPngyLCBjbGlwc1tpXS54Mik7Cj4gKwkJCWRzdC0+eTIgPSBtYXgoZHN0LT55Miwg Y2xpcHNbaV0ueTIpOwo+ICsJCX0KPiArCX0KPiArCj4gKwlkc3QtPngyID0gbWluX3QodTMyLCBk c3QtPngyLCB3aWR0aCAtIDEpOwo+ICsJZHN0LT55MiA9IG1pbl90KHUzMiwgZHN0LT55MiwgaGVp Z2h0IC0gMSk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTCh0aW55ZHJtX21lcmdlX2NsaXBzKTsKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWZiZGV2LmMg Yi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tZmJkZXYuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNDRiNmE5NQo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tZmJkZXYuYwo+IEBAIC0w LDAgKzEsMzQ1IEBACj4gKy8vI2RlZmluZSBERUJVRwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMp IDIwMTYgTm9yYWxmIFRyw7hubmVzCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5Cj4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4gKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIu aD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJt X2dlbV9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vdGlueWRybS90aW55ZHJtLmg+Cj4g Kwo+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiArCj4gKyNkZWZpbmUgREVGQVVMVF9ERUZJT19E RUxBWSBIWi8zMAo+ICsKPiArc3RydWN0IHRpbnlkcm1fZmJkZXYgewo+ICsJc3RydWN0IGRybV9m Yl9oZWxwZXIgZmJfaGVscGVyOwo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYjsKPiArCXZv aWQgKnZtZW07Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB0aW55ZHJtX2ZiZGV2 ICpoZWxwZXJfdG9fZmJkZXYoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlcikKPiArewo+ICsJ cmV0dXJuIGNvbnRhaW5lcl9vZihoZWxwZXIsIHN0cnVjdCB0aW55ZHJtX2ZiZGV2LCBmYl9oZWxw ZXIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB0aW55ZHJtX2ZiZGV2ICpmYl90 b19mYmRldihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPiArewo+ICsJcmV0dXJuIGNvbnRh aW5lcl9vZihmYiwgc3RydWN0IHRpbnlkcm1fZmJkZXYsIGZiKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgdGlueWRybV9mYmRldl9kaXJ0eShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKPiArCQkJCXN0 cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwLCBib29sIHJ1bl9ub3cpCj4gK3sKPiArCXN0cnVjdCBk cm1fZmJfaGVscGVyICpoZWxwZXIgPSBpbmZvLT5wYXI7Cj4gKwlzdHJ1Y3QgdGlueWRybV9kZXZp Y2UgKnRkZXYgPSBoZWxwZXItPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiA9IGhlbHBlci0+ZmI7Cj4gKwo+ICsJaWYgKHRkZXYtPnBsYW5lLmZiICE9IGZi KQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAodGRldi0+ZGVmZXJyZWQpCj4gKwkJdGRldi0+ZGVm ZXJyZWQtPm5vX2RlbGF5ID0gcnVuX25vdzsKPiArCXRkZXYtPmRpcnR5ZmIoZmIsIGluZm8tPnNj cmVlbl9idWZmZXIsIDAsIDAsIGNsaXAsIDEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0aW55 ZHJtX2ZiZGV2X2RlZmVycmVkX2lvKHN0cnVjdCBmYl9pbmZvICppbmZvLAo+ICsJCQkJICAgICAg c3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QpCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgc3RhcnQs IGVuZCwgbmV4dCwgbWluLCBtYXg7Cj4gKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwOwo+ICsJ c3RydWN0IHBhZ2UgKnBhZ2U7Cj4gK2ludCBjb3VudCA9IDA7Cj4gKwo+ICsJbWluID0gVUxPTkdf TUFYOwo+ICsJbWF4ID0gMDsKPiArCW5leHQgPSAwOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShw YWdlLCBwYWdlbGlzdCwgbHJ1KSB7Cj4gKwkJc3RhcnQgPSBwYWdlLT5pbmRleCA8PCBQQUdFX1NI SUZUOwo+ICsJCWVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFIC0gMTsKPiArCQltaW4gPSBtaW4obWlu LCBzdGFydCk7Cj4gKwkJbWF4ID0gbWF4KG1heCwgZW5kKTsKPiArY291bnQrKzsKPiArCX0KPiAr Cj4gKwlpZiAobWluIDwgbWF4KSB7Cj4gKwkJY2xpcC54MSA9IDA7Cj4gKwkJY2xpcC54MiA9IGlu Zm8tPnZhci54cmVzIC0gMTsKPiArCQljbGlwLnkxID0gbWluIC8gaW5mby0+Zml4LmxpbmVfbGVu Z3RoOwo+ICsJCWNsaXAueTIgPSBtaW5fdCh1MzIsIG1heCAvIGluZm8tPmZpeC5saW5lX2xlbmd0 aCwKPiArCQkJCSAgICBpbmZvLT52YXIueXJlcyAtIDEpOwo+ICsJCXByX2RlYnVnKCIlczogeDE9 JXUsIHgyPSV1LCB5MT0ldSwgeTI9JXUsIGNvdW50PSVkXG4iLCBfX2Z1bmNfXywgY2xpcC54MSwg Y2xpcC54MiwgY2xpcC55MSwgY2xpcC55MiwgY291bnQpOwo+ICsJCXRpbnlkcm1fZmJkZXZfZGly dHkoaW5mbywgJmNsaXAsIHRydWUpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0aW55 ZHJtX2ZiZGV2X2ZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAo+ICsJCQkJICAgICAg Y29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2NsaXBf cmVjdCBjbGlwID0gewo+ICsJCS54MSA9IHJlY3QtPmR4LAo+ICsJCS54MiA9IHJlY3QtPmR4ICsg cmVjdC0+d2lkdGggLSAxLAo+ICsJCS55MSA9IHJlY3QtPmR5LAo+ICsJCS55MiA9IHJlY3QtPmR5 ICsgcmVjdC0+aGVpZ2h0IC0gMSwKPiArCX07Cj4gKwo+ICsJZGV2X2RiZyhpbmZvLT5kZXYsICIl czogZHg9JWQsIGR5PSVkLCB3aWR0aD0lZCwgaGVpZ2h0PSVkXG4iLAo+ICsJCV9fZnVuY19fLCBy ZWN0LT5keCwgcmVjdC0+ZHksIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQpOwo+ICsJc3lzX2Zp bGxyZWN0KGluZm8sIHJlY3QpOwo+ICsJdGlueWRybV9mYmRldl9kaXJ0eShpbmZvLCAmY2xpcCwg ZmFsc2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0aW55ZHJtX2ZiZGV2X2ZiX2NvcHlhcmVh KHN0cnVjdCBmYl9pbmZvICppbmZvLAo+ICsJCQkJICAgICAgY29uc3Qgc3RydWN0IGZiX2NvcHlh cmVhICphcmVhKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwID0gewo+ICsJCS54 MSA9IGFyZWEtPmR4LAo+ICsJCS54MiA9IGFyZWEtPmR4ICsgYXJlYS0+d2lkdGggLSAxLAo+ICsJ CS55MSA9IGFyZWEtPmR5LAo+ICsJCS55MiA9IGFyZWEtPmR5ICsgYXJlYS0+aGVpZ2h0IC0gMSwK PiArCX07Cj4gKwo+ICsJZGV2X2RiZyhpbmZvLT5kZXYsICIlczogZHg9JWQsIGR5PSVkLCB3aWR0 aD0lZCwgaGVpZ2h0PSVkXG4iLAo+ICsJCV9fZnVuY19fLCAgYXJlYS0+ZHgsIGFyZWEtPmR5LCBh cmVhLT53aWR0aCwgYXJlYS0+aGVpZ2h0KTsKPiArCXN5c19jb3B5YXJlYShpbmZvLCBhcmVhKTsK PiArCXRpbnlkcm1fZmJkZXZfZGlydHkoaW5mbywgJmNsaXAsIGZhbHNlKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgdGlueWRybV9mYmRldl9mYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmlu Zm8sCj4gKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKPiArewo+ICsJ c3RydWN0IGRybV9jbGlwX3JlY3QgY2xpcCA9IHsKPiArCQkueDEgPSBpbWFnZS0+ZHgsCj4gKwkJ LngyID0gaW1hZ2UtPmR4ICsgaW1hZ2UtPndpZHRoIC0gMSwKPiArCQkueTEgPSBpbWFnZS0+ZHks Cj4gKwkJLnkyID0gaW1hZ2UtPmR5ICsgaW1hZ2UtPmhlaWdodCAtIDEsCj4gKwl9Owo+ICsKPiAr CWRldl9kYmcoaW5mby0+ZGV2LCAiJXM6IGR4PSVkLCBkeT0lZCwgd2lkdGg9JWQsIGhlaWdodD0l ZFxuIiwKPiArCQlfX2Z1bmNfXywgIGltYWdlLT5keCwgaW1hZ2UtPmR5LCBpbWFnZS0+d2lkdGgs IGltYWdlLT5oZWlnaHQpOwo+ICsJc3lzX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7Cj4gKwl0aW55 ZHJtX2ZiZGV2X2RpcnR5KGluZm8sICZjbGlwLCBmYWxzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBz c2l6ZV90IHRpbnlkcm1fZmJkZXZfZmJfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sCj4gKwkJ CQkgICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCj4gKwkJCQkgICAg ICBsb2ZmX3QgKnBwb3MpCj4gK3sKPiArCXN0cnVjdCBkcm1fY2xpcF9yZWN0IGNsaXAgPSB7Cj4g KwkJLngxID0gMCwKPiArCQkueDIgPSBpbmZvLT52YXIueHJlcyAtIDEsCj4gKwkJLnkxID0gMCwK PiArCQkueTIgPSBpbmZvLT52YXIueXJlcyAtIDEsCj4gKwl9Owo+ICsJc3NpemVfdCByZXQ7Cj4g Kwo+ICsJZGV2X2RiZyhpbmZvLT5kZXYsICIlczpcbiIsIF9fZnVuY19fKTsKPiArCXJldCA9IGZi X3N5c193cml0ZShpbmZvLCBidWYsIGNvdW50LCBwcG9zKTsKPiArCXRpbnlkcm1fZmJkZXZfZGly dHkoaW5mbywgJmNsaXAsIGZhbHNlKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCB0aW55ZHJtX2ZiZGV2X2ZiX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIpCj4gK3sKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVu Y3MgdGlueWRybV9mYmRldl9mYl9mdW5jcyA9IHsKPiArCS5kZXN0cm95ID0gdGlueWRybV9mYmRl dl9mYl9kZXN0cm95LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB0aW55ZHJtX2ZiZGV2X2NyZWF0 ZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAo+ICsJCQkJc3RydWN0IGRybV9mYl9oZWxw ZXJfc3VyZmFjZV9zaXplICpzaXplcykKPiArewo+ICsJc3RydWN0IHRpbnlkcm1fZmJkZXYgKmZi ZGV2ID0gaGVscGVyX3RvX2ZiZGV2KGhlbHBlcik7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfZmJfY21k MiBtb2RlX2NtZCA9IHsgMCB9Owo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGhlbHBlci0+ ZGV2Owo+ICsJc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK PiArCXN0cnVjdCBmYl9kZWZlcnJlZF9pbyAqZmJkZWZpbzsKPiArCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiOwo+ICsJdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9waXhlbCA9IERJVl9ST1VORF9V UChzaXplcy0+c3VyZmFjZV9icHAsIDgpOwo+ICsJc3RydWN0IGZiX29wcyAqZmJvcHM7Cj4gKwlz dHJ1Y3QgZmJfaW5mbyAqZmJpOwo+ICsJc2l6ZV90IHNpemU7Cj4gKwljaGFyICpzY3JlZW5fYnVm ZmVyOwo+ICsJaW50IHJldDsKPiArCj4gKwltb2RlX2NtZC53aWR0aCA9IHNpemVzLT5zdXJmYWNl X3dpZHRoOwo+ICsJbW9kZV9jbWQuaGVpZ2h0ID0gc2l6ZXMtPnN1cmZhY2VfaGVpZ2h0Owo+ICsJ bW9kZV9jbWQucGl0Y2hlc1swXSA9IHNpemVzLT5zdXJmYWNlX3dpZHRoICogYnl0ZXNfcGVyX3Bp eGVsOwo+ICsJbW9kZV9jbWQucGl4ZWxfZm9ybWF0ID0gZHJtX21vZGVfbGVnYWN5X2ZiX2Zvcm1h dChzaXplcy0+c3VyZmFjZV9icHAsCj4gKwkJCQkJCQlzaXplcy0+c3VyZmFjZV9kZXB0aCk7Cj4g KwlzaXplID0gbW9kZV9jbWQucGl0Y2hlc1swXSAqIG1vZGVfY21kLmhlaWdodDsKPiArCj4gKwkv Kgo+ICsJICogQSBwZXIgZGV2aWNlIGZib3BzIHN0cnVjdHVyZSBpcyBuZWVkZWQgYmVjYXVzZQo+ ICsJICogZmJfZGVmZXJyZWRfaW9fY2xlYW51cCgpIGNsZWFycyBmYm9wcy5mYl9tbWFwCj4gKwkg Ki8KPiArCWZib3BzID0gZGV2bV9remFsbG9jKGRldi0+ZGV2LCBzaXplb2YoKmZib3BzKSwgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAoIWZib3BzKSB7Cj4gKwkJZGV2X2VycihkZXYtPmRldiwgIkZhaWxl ZCB0byBhbGxvY2F0ZSBmYm9wc1xuIik7Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ ICsJLyogQSBwZXIgZGV2aWNlIHN0cnVjdHVyZSBpcyBuZWVkZWQgZm9yIGluZGl2aWR1YWwgZGVs YXlzICovCj4gKwlmYmRlZmlvID0gZGV2bV9remFsbG9jKGRldi0+ZGV2LCBzaXplb2YoKmZiZGVm aW8pLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZmJkZWZpbykgewo+ICsJCWRldl9lcnIoZGV2LT5k ZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgZmJkZWZpb1xuIik7Cj4gKwkJcmV0dXJuIC1FTk9NRU07 Cj4gKwl9Cj4gKwo+ICsJZmJpID0gZHJtX2ZiX2hlbHBlcl9hbGxvY19mYmkoaGVscGVyKTsKPiAr CWlmIChJU19FUlIoZmJpKSkgewo+ICsJCWRldl9lcnIoZGV2LT5kZXYsICJDb3VsZCBub3QgYWxs b2NhdGUgZmJpXG4iKTsKPiArCQlyZXR1cm4gUFRSX0VSUihmYmkpOwo+ICsJfQo+ICsKPiArCXNj cmVlbl9idWZmZXIgPSB2emFsbG9jKHNpemUpOwo+ICsJaWYgKCFzY3JlZW5fYnVmZmVyKSB7Cj4g KwkJZGV2X2VycihkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBmYmRldiBzY3JlZW4gYnVm ZmVyLlxuIik7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl9mYl9pbmZvX2Rlc3Ry b3k7Cj4gKwl9Cj4gKwo+ICsJZmIgPSAmZmJkZXYtPmZiOwo+ICsJaGVscGVyLT5mYiA9IGZiOwo+ ICsJZHJtX2hlbHBlcl9tb2RlX2ZpbGxfZmJfc3RydWN0KGZiLCAmbW9kZV9jbWQpOwo+ICsJcmV0 ID0gZHJtX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCBmYiwgJnRpbnlkcm1fZmJkZXZfZmJfZnVuY3Mp Owo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdCBm cmFtZWJ1ZmZlcjogJWRcbiIsIHJldCk7Cj4gKwkJdmZyZWUoc2NyZWVuX2J1ZmZlcik7Cj4gKwkJ Z290byBlcnJfZmJfaW5mb19kZXN0cm95Owo+ICsJfQo+ICsKPiArCURSTV9ERUJVR19LTVMoImZi ZGV2IEZCIElEOiAlZCwgdm1lbSA9ICVwXG4iLCBmYi0+YmFzZS5pZCwgZmJkZXYtPnZtZW0pOwo+ ICsKPiArCWZiaS0+cGFyID0gaGVscGVyOwo+ICsJZmJpLT5mbGFncyA9IEZCSU5GT19GTEFHX0RF RkFVTFQgfCBGQklORk9fVklSVEZCOwo+ICsJc3RyY3B5KGZiaS0+Zml4LmlkLCAidGlueWRybSIp Owo+ICsKPiArCWZib3BzLT5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAo+ICsJZmJvcHMt PmZiX2ZpbGxyZWN0ICAgID0gdGlueWRybV9mYmRldl9mYl9maWxscmVjdCwKPiArCWZib3BzLT5m Yl9jb3B5YXJlYSAgICA9IHRpbnlkcm1fZmJkZXZfZmJfY29weWFyZWEsCj4gKwlmYm9wcy0+ZmJf aW1hZ2VibGl0ICAgPSB0aW55ZHJtX2ZiZGV2X2ZiX2ltYWdlYmxpdCwKPiArCWZib3BzLT5mYl93 cml0ZSAgICAgICA9IHRpbnlkcm1fZmJkZXZfZmJfd3JpdGUsCj4gKwlmYm9wcy0+ZmJfY2hlY2tf dmFyICAgPSBkcm1fZmJfaGVscGVyX2NoZWNrX3ZhciwKPiArCWZib3BzLT5mYl9zZXRfcGFyICAg ICA9IGRybV9mYl9oZWxwZXJfc2V0X3BhciwKPiArCWZib3BzLT5mYl9ibGFuayAgICAgICA9IGRy bV9mYl9oZWxwZXJfYmxhbmssCj4gKwlmYm9wcy0+ZmJfc2V0Y21hcCAgICAgPSBkcm1fZmJfaGVs cGVyX3NldGNtYXAsCj4gKwlmYmktPmZib3BzID0gZmJvcHM7Cj4gKwo+ICsJZHJtX2ZiX2hlbHBl cl9maWxsX2ZpeChmYmksIGZiLT5waXRjaGVzWzBdLCBmYi0+ZGVwdGgpOwo+ICsJZHJtX2ZiX2hl bHBlcl9maWxsX3ZhcihmYmksIGhlbHBlciwgc2l6ZXMtPmZiX3dpZHRoLCBzaXplcy0+ZmJfaGVp Z2h0KTsKPiArCj4gKwlmYmRldi0+dm1lbSA9IHNjcmVlbl9idWZmZXI7Cj4gKwlmYmktPnNjcmVl bl9idWZmZXIgPSBzY3JlZW5fYnVmZmVyOwo+ICsJZmJpLT5zY3JlZW5fc2l6ZSA9IHNpemU7Cj4g KwlmYmktPmZpeC5zbWVtX2xlbiA9IHNpemU7Cj4gKwo+ICsJaWYgKHRkZXYtPmRlZmVycmVkKQo+ ICsJCWZiZGVmaW8tPmRlbGF5ID0gbXNlY3NfdG9famlmZmllcyh0ZGV2LT5kZWZlcnJlZC0+ZGVm ZXJfbXMpOwo+ICsJZWxzZQo+ICsJCWZiZGVmaW8tPmRlbGF5ID0gREVGQVVMVF9ERUZJT19ERUxB WTsKPiArCS8qIGRlbGF5PTAgaXMgdHVybmVkIGludG8gZGVsYXk9SFosIHNvIHVzZSAxIGFzIGEg bWluaW11bSAqLwo+ICsJaWYgKCFmYmRlZmlvLT5kZWxheSkKPiArCQlmYmRlZmlvLT5kZWxheSA9 IDE7Cj4gKwlmYmRlZmlvLT5kZWZlcnJlZF9pbyA9IHRpbnlkcm1fZmJkZXZfZGVmZXJyZWRfaW87 Cj4gKwlmYmktPmZiZGVmaW8gPSBmYmRlZmlvOwo+ICsJZmJfZGVmZXJyZWRfaW9faW5pdChmYmkp Owo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX2ZiX2luZm9fZGVzdHJveToKPiArCWRybV9m Yl9oZWxwZXJfcmVsZWFzZV9mYmkoaGVscGVyKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mYl9oZWxwZXJfZnVuY3MgdGlueWRybV9mYl9o ZWxwZXJfZnVuY3MgPSB7Cj4gKwkuZmJfcHJvYmUgPSB0aW55ZHJtX2ZiZGV2X2NyZWF0ZSwKPiAr fTsKPiArCj4gK2ludCB0aW55ZHJtX2ZiZGV2X2luaXQoc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0 ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdGRldi0+YmFzZTsKPiArCXN0 cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXI7Cj4gKwlzdHJ1Y3QgdGlueWRybV9mYmRldiAqZmJk ZXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCURSTV9ERUJVR19LTVMoIklOXG4iKTsKPiArCj4gKwlm YmRldiA9IGRldm1fa3phbGxvYyhkZXYtPmRldiwgc2l6ZW9mKCpmYmRldiksIEdGUF9LRVJORUwp Owo+ICsJaWYgKCFmYmRldikgewo+ICsJCWRldl9lcnIoZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxs b2NhdGUgZHJtIGZiZGV2LlxuIik7Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJ aGVscGVyID0gJmZiZGV2LT5mYl9oZWxwZXI7Cj4gKwo+ICsJZHJtX2ZiX2hlbHBlcl9wcmVwYXJl KGRldiwgaGVscGVyLCAmdGlueWRybV9mYl9oZWxwZXJfZnVuY3MpOwo+ICsKPiArCXJldCA9IGRy bV9mYl9oZWxwZXJfaW5pdChkZXYsIGhlbHBlciwgMSwgMSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ ICsJCWRldl9lcnIoZGV2LT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkcm0gZmIgaGVscGVy LlxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBkcm1fZmJfaGVscGVy X3NpbmdsZV9hZGRfYWxsX2Nvbm5lY3RvcnMoaGVscGVyKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4g KwkJZGV2X2VycihkZXYtPmRldiwgIkZhaWxlZCB0byBhZGQgY29ubmVjdG9ycy5cbiIpOwo+ICsJ CWdvdG8gZXJyX2RybV9mYl9oZWxwZXJfZmluaTsKPiArCj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJt X2ZiX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhoZWxwZXIsIDE2KTsKPiArCWlmIChyZXQgPCAwKSB7 Cj4gKwkJZGV2X2VycihkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgaW5pdGlhbCBodyBjb25maWd1 cmF0aW9uLlxuIik7Cj4gKwkJZ290byBlcnJfZHJtX2ZiX2hlbHBlcl9maW5pOwo+ICsJfQo+ICsK PiArCXRkZXYtPmZiZGV2ID0gZmJkZXY7Cj4gKwlEUk1fREVCVUdfS01TKCJPVVRcbiIpOwo+ICsK PiArCXJldHVybiAwOwo+ICsKPiArZXJyX2RybV9mYl9oZWxwZXJfZmluaToKPiArCWRybV9mYl9o ZWxwZXJfZmluaShoZWxwZXIpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3ZvaWQg dGlueWRybV9mYmRldl9maW5pKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKPiArewo+ICsJ c3RydWN0IHRpbnlkcm1fZmJkZXYgKmZiZGV2ID0gdGRldi0+ZmJkZXY7Cj4gKwlzdHJ1Y3QgZHJt X2ZiX2hlbHBlciAqZmJfaGVscGVyID0gJmZiZGV2LT5mYl9oZWxwZXI7Cj4gKwo+ICsJRFJNX0RF QlVHX0tNUygiSU5cbiIpOwo+ICsKPiArCWRybV9mYl9oZWxwZXJfdW5yZWdpc3Rlcl9mYmkoZmJf aGVscGVyKTsKPiArCWZiX2RlZmVycmVkX2lvX2NsZWFudXAoZmJfaGVscGVyLT5mYmRldik7Cj4g Kwlkcm1fZmJfaGVscGVyX3JlbGVhc2VfZmJpKGZiX2hlbHBlcik7Cj4gKwlkcm1fZmJfaGVscGVy X2ZpbmkoZmJfaGVscGVyKTsKPiArCj4gKwlkcm1fZnJhbWVidWZmZXJfdW5yZWdpc3Rlcl9wcml2 YXRlKCZmYmRldi0+ZmIpOwo+ICsJZHJtX2ZyYW1lYnVmZmVyX2NsZWFudXAoJmZiZGV2LT5mYik7 Cj4gKwo+ICsJdmZyZWUoZmJkZXYtPnZtZW0pOwo+ICsKPiArCXRkZXYtPmZiZGV2ID0gTlVMTDsK PiArCURSTV9ERUJVR19LTVMoIk9VVFxuIik7Cj4gK30KPiArCj4gKy8qIFRPRE86IHBhc3MgdGRl diBpbnN0ZWFkID8gKi8KPiArdm9pZCB0aW55ZHJtX2ZiZGV2X3Jlc3RvcmVfbW9kZShzdHJ1Y3Qg dGlueWRybV9mYmRldiAqZmJkZXYpCj4gK3sKPiArCWlmIChmYmRldikKPiArCQlkcm1fZmJfaGVs cGVyX3Jlc3RvcmVfZmJkZXZfbW9kZV91bmxvY2tlZCgmZmJkZXYtPmZiX2hlbHBlcik7Cj4gK30K PiArRVhQT1JUX1NZTUJPTCh0aW55ZHJtX2ZiZGV2X3Jlc3RvcmVfbW9kZSk7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1mcmFtZWJ1ZmZlci5jIGIv ZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWZyYW1lYnVmZmVyLmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjEwNTZiYzYKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWZyYW1lYnVmZmVy LmMKPiBAQCAtMCwwICsxLDExMiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9y YWxmIFRyw7hubmVzCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4g KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yCj4gKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4g KyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0 b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS90aW55ZHJt L3Rpbnlkcm0uaD4KPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbnlkcm1fZnJhbWVidWZm ZXIgKnRvX3Rpbnlkcm1fZnJhbWVidWZmZXIoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCj4g K3sKPiArCXJldHVybiBjb250YWluZXJfb2YoZmIsIHN0cnVjdCB0aW55ZHJtX2ZyYW1lYnVmZmVy LCBiYXNlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGlueWRybV9mcmFtZWJ1ZmZlcl9kZXN0 cm95KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+ICt7Cj4gKwlzdHJ1Y3QgdGlueWRybV9m cmFtZWJ1ZmZlciAqdGlueWRybV9mYiA9IHRvX3Rpbnlkcm1fZnJhbWVidWZmZXIoZmIpOwo+ICsJ c3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gZmItPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwo+ ICsJRFJNX0RFQlVHX0tNUygiZmIgPSAlcCwgY21hX29iaiA9ICVwXG4iLCBmYiwgdGlueWRybV9m Yi0+Y21hX29iaik7Cj4gKwo+ICsJaWYgKHRkZXYtPmRlZmVycmVkKQo+ICsJCWZsdXNoX2RlbGF5 ZWRfd29yaygmdGRldi0+ZGVmZXJyZWQtPmR3b3JrKTsKPiArCj4gKwlpZiAodGlueWRybV9mYi0+ Y21hX29iaikKPiArCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmdGlueWRy bV9mYi0+Y21hX29iai0+YmFzZSk7Cj4gKwo+ICsJZHJtX2ZyYW1lYnVmZmVyX2NsZWFudXAoZmIp Owo+ICsJa2ZyZWUodGlueWRybV9mYik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdGlueWRybV9m cmFtZWJ1ZmZlcl9kaXJ0eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiArCQkJCSAgICAg c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4gKwkJCQkgICAgIHVuc2lnbmVkIGZsYWdzLCB1 bnNpZ25lZCBjb2xvciwKPiArCQkJCSAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAo+ ICsJCQkJICAgICB1bnNpZ25lZCBudW1fY2xpcHMpCj4gK3sKPiArCXN0cnVjdCB0aW55ZHJtX2Zy YW1lYnVmZmVyICp0ZmIgPSB0b190aW55ZHJtX2ZyYW1lYnVmZmVyKGZiKTsKPiArCXN0cnVjdCB0 aW55ZHJtX2RldmljZSAqdGRldiA9IGZiLT5kZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWRldl9k YmcoZmItPmRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKPiArCj4gKwlyZXR1cm4gdGRldi0+ ZGlydHlmYihmYiwgdGZiLT5jbWFfb2JqLT52YWRkciwgZmxhZ3MsIGNvbG9yLCBjbGlwcywgbnVt X2NsaXBzKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJf ZnVuY3MgdGlueWRybV9mYl9mdW5jcyA9IHsKPiArCS5kZXN0cm95ID0gdGlueWRybV9mcmFtZWJ1 ZmZlcl9kZXN0cm95LAo+ICsJLmRpcnR5ID0gdGlueWRybV9mcmFtZWJ1ZmZlcl9kaXJ0eSwKPiAr LyoJVE9ETz8KPiArICoJLmNyZWF0ZV9oYW5kbGUgPSB0aW55ZHJtX2ZyYW1lYnVmZmVyX2NyZWF0 ZV9oYW5kbGUsICovCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq Cj4gK3Rpbnlkcm1fZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LCBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdiwKPiArCQkgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2Nt ZCkKPiArewo+ICsJc3RydWN0IHRpbnlkcm1fZnJhbWVidWZmZXIgKnRpbnlkcm1fZmI7Cj4gKwlz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyogVE9ETz8g VmFsaWRhdGUgdGhlIHBpeGVsIGZvcm1hdCwgc2l6ZSBhbmQgcGl0Y2hlcyAqLwo+ICsJRFJNX0RF QlVHX0tNUygicGl4ZWxfZm9ybWF0PSVzXG4iLCBkcm1fZ2V0X2Zvcm1hdF9uYW1lKG1vZGVfY21k LT5waXhlbF9mb3JtYXQpKTsKPiArCURSTV9ERUJVR19LTVMoIndpZHRoPSV1XG4iLCBtb2RlX2Nt ZC0+d2lkdGgpOwo+ICsJRFJNX0RFQlVHX0tNUygiaGVpZ2h0PSV1XG4iLCBtb2RlX2NtZC0+aGVp Z2h0KTsKPiArCURSTV9ERUJVR19LTVMoInBpdGNoZXNbMF09JXVcbiIsIG1vZGVfY21kLT5waXRj aGVzWzBdKTsKPiArCj4gKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGRldiwgZmlsZV9w cml2LCBtb2RlX2NtZC0+aGFuZGxlc1swXSk7Cj4gKwlpZiAoIW9iaikKPiArCQlyZXR1cm4gTlVM TDsKPiArCj4gKwl0aW55ZHJtX2ZiID0ga3phbGxvYyhzaXplb2YoKnRpbnlkcm1fZmIpLCBHRlBf S0VSTkVMKTsKPiArCWlmICghdGlueWRybV9mYikKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwl0 aW55ZHJtX2ZiLT5jbWFfb2JqID0gdG9fZHJtX2dlbV9jbWFfb2JqKG9iaik7Cj4gKwo+ICsJcmV0 ID0gZHJtX2ZyYW1lYnVmZmVyX2luaXQoZGRldiwgJnRpbnlkcm1fZmItPmJhc2UsICZ0aW55ZHJt X2ZiX2Z1bmNzKTsKPiArCWlmIChyZXQpIHsKPiArCQlrZnJlZSh0aW55ZHJtX2ZiKTsKPiArCQlk cm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwo+ICsJCXJldHVybiBOVUxM Owo+ICsJfQo+ICsKPiArCWRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdCgmdGlueWRybV9m Yi0+YmFzZSwgbW9kZV9jbWQpOwo+ICsKPiArCXJldHVybiAmdGlueWRybV9mYi0+YmFzZTsKPiAr fQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgdGlueWRy bV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKPiArCS5mYl9jcmVhdGUgPSB0aW55ZHJtX2ZiX2NyZWF0 ZSwKPiArCS5hdG9taWNfY2hlY2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKPiArCS5hdG9t aWNfY29tbWl0ID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAo+ICt9Owo+ICsKPiArdm9pZCB0 aW55ZHJtX21vZGVfY29uZmlnX2luaXQoc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IHRkZXYtPmJhc2U7Cj4gKwo+ICsJZHJtX21v ZGVfY29uZmlnX2luaXQoZGRldik7Cj4gKwo+ICsJZGRldi0+bW9kZV9jb25maWcubWluX3dpZHRo ID0gdGRldi0+d2lkdGg7Cj4gKwlkZGV2LT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gdGRldi0+ aGVpZ2h0Owo+ICsJZGRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gdGRldi0+d2lkdGg7Cj4g KwlkZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gdGRldi0+aGVpZ2h0Owo+ICsJZGRldi0+ bW9kZV9jb25maWcuZnVuY3MgPSAmdGlueWRybV9tb2RlX2NvbmZpZ19mdW5jczsKPiArfQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0taGVscGVycy5j IGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWhlbHBlcnMuYwo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOGVkOWExNQo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0taGVscGVycy5jCj4g QEAgLTAsMCArMSw5NyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRy w7hubmVzCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gKyAqIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UsIG9yCj4gKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqLwo+ ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vdGlueWRybS90aW55 ZHJtLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3NwaS9zcGkuaD4KPiArCj4gKyNpbmNsdWRlICJpbnRlcm5hbC5oIgo+ICsKPiArc3RydWN0IGJh Y2tsaWdodF9kZXZpY2UgKnRpbnlkcm1fb2ZfZmluZF9iYWNrbGlnaHQoc3RydWN0IGRldmljZSAq ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0Owo+ICsJc3Ry dWN0IGRldmljZV9ub2RlICpucDsKPiArCj4gKwlucCA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5v Zl9ub2RlLCAiYmFja2xpZ2h0IiwgMCk7Cj4gKwlpZiAoIW5wKQo+ICsJCXJldHVybiBOVUxMOwo+ ICsKPiArCWJhY2tsaWdodCA9IG9mX2ZpbmRfYmFja2xpZ2h0X2J5X25vZGUobnApOwo+ICsJb2Zf bm9kZV9wdXQobnApOwo+ICsKPiArCWlmICghYmFja2xpZ2h0KQo+ICsJCXJldHVybiBFUlJfUFRS KC1FUFJPQkVfREVGRVIpOwo+ICsKPiArCXJldHVybiBiYWNrbGlnaHQ7Cj4gK30KPiArRVhQT1JU X1NZTUJPTCh0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0KTsKPiArCj4gK2ludCB0aW55ZHJtX3Bh bmVsX2VuYWJsZV9iYWNrbGlnaHQoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0 cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldiA9IHRpbnlkcm1fZnJvbV9wYW5lbChwYW5lbCk7Cj4g Kwo+ICsJaWYgKHRkZXYtPmJhY2tsaWdodCkgewo+ICsJCWlmICh0ZGV2LT5iYWNrbGlnaHQtPnBy b3BzLmJyaWdodG5lc3MgPT0gMCkKPiArCQkJdGRldi0+YmFja2xpZ2h0LT5wcm9wcy5icmlnaHRu ZXNzID0KPiArCQkJCQl0ZGV2LT5iYWNrbGlnaHQtPnByb3BzLm1heF9icmlnaHRuZXNzOwo+ICsJ CXRkZXYtPmJhY2tsaWdodC0+cHJvcHMuc3RhdGUgJj0gfkJMX0NPUkVfU1VTUEVOREVEOwo+ICsJ CWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKHRkZXYtPmJhY2tsaWdodCk7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTCh0aW55ZHJtX3BhbmVsX2VuYWJsZV9iYWNr bGlnaHQpOwo+ICsKPiAraW50IHRpbnlkcm1fcGFuZWxfZGlzYWJsZV9iYWNrbGlnaHQoc3RydWN0 IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldiA9 IHRpbnlkcm1fZnJvbV9wYW5lbChwYW5lbCk7Cj4gKwo+ICsJaWYgKHRkZXYtPmJhY2tsaWdodCkg ewo+ICsJCXRkZXYtPmJhY2tsaWdodC0+cHJvcHMuc3RhdGUgfD0gQkxfQ09SRV9TVVNQRU5ERUQ7 Cj4gKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXModGRldi0+YmFja2xpZ2h0KTsKPiArCX0KPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKHRpbnlkcm1fcGFuZWxfZGlzYWJs ZV9iYWNrbGlnaHQpOwo+ICsKPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCB0aW55ZHJtX3Bt X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdGlueWRybV9kZXZp Y2UgKnRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCj4gKwl0aW55ZHJtX2Rpc2FibGUo dGRldik7Cj4gKwl0aW55ZHJtX3VucHJlcGFyZSh0ZGV2KTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCB0aW55ZHJtX3BtX3Jlc3VtZShzdHJ1 Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldiA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiArCXRpbnlkcm1fcHJlcGFyZSh0ZGV2KTsKPiArCS8q IFRoZSBwYW5lbCBpcyBlbmFibGVkIGFmdGVyIHRoZSBmaXJzdCBkaXNwbGF5IHVwZGF0ZSAqLwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB0aW55 ZHJtX3NpbXBsZV9wbV9vcHMgPSB7Cj4gKyAgICAgICAgU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMo dGlueWRybV9wbV9zdXNwZW5kLCB0aW55ZHJtX3BtX3Jlc3VtZSkKPiArfTsKPiArRVhQT1JUX1NZ TUJPTCh0aW55ZHJtX3NpbXBsZV9wbV9vcHMpOwo+ICsKPiArdm9pZCB0aW55ZHJtX3NwaV9zaHV0 ZG93bihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+ICt7Cj4gKwlzdHJ1Y3QgdGlueWRybV9kZXZp Y2UgKnRkZXYgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKPiArCj4gKwl0aW55ZHJtX2Rpc2FibGUo dGRldik7Cj4gKwl0aW55ZHJtX3VucHJlcGFyZSh0ZGV2KTsKPiArfQo+ICtFWFBPUlRfU1lNQk9M KHRpbnlkcm1fc3BpX3NodXRkb3duKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rp bnlkcm0vY29yZS90aW55ZHJtLXBsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3Jl L3Rpbnlkcm0tcGxhbmUuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u Nzc3NGU4Ywo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9j b3JlL3Rpbnlkcm0tcGxhbmUuYwo+IEBAIC0wLDAgKzEsNTAgQEAKPiArLyoKPiArICogQ29weXJp Z2h0IChDKSAyMDE2IE5vcmFsZiBUcsO4bm5lcwo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQo+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+ICsgKiAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMu aD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0v dGlueWRybS90aW55ZHJtLmg+Cj4gKwo+ICsvKiBUT0RPOiBDb25maWd1cmFibGUgKi8KPiArc3Rh dGljIGNvbnN0IHVpbnQzMl90IHRpbnlkcm1fZm9ybWF0c1tdID0gewo+ICsJRFJNX0ZPUk1BVF9S R0I1NjUsCj4gKwlEUk1fRk9STUFUX1hSR0I4ODg4LAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQg dGlueWRybV9wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICsJ CQkJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKPiArewo+ICsJRFJNX0RFQlVH KCJoYW5kbGUgMHgleCwgY3J0YyAlZHglZCslZCslZFxuIiwgMCwKPiArCQkgIHBsYW5lLT5zdGF0 ZS0+Y3J0Y193LCBwbGFuZS0+c3RhdGUtPmNydGNfaCwKPiArCQkgIHBsYW5lLT5zdGF0ZS0+Y3J0 Y194LCBwbGFuZS0+c3RhdGUtPmNydGNfeSk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyB0aW55ZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsK PiArCS5hdG9taWNfdXBkYXRlID0gdGlueWRybV9wbGFuZV9hdG9taWNfdXBkYXRlLAo+ICt9Owo+ ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgdGlueWRybV9wbGFuZV9m dW5jcyA9IHsKPiArCS51cGRhdGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3Bs YW5lLAo+ICsJLmRpc2FibGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFu ZSwKPiArCS5kZXN0cm95CQk9IGRybV9wbGFuZV9jbGVhbnVwLAo+ICsJLnJlc2V0CQkJPSBkcm1f YXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldCwKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlCT0g ZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAo+ICsJLmF0b21pY19kZXN0 cm95X3N0YXRlCT0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZSwKPiArfTsK PiArCj4gK2ludCB0aW55ZHJtX3BsYW5lX2luaXQoc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2 KQo+ICt7Cj4gKwlkcm1fcGxhbmVfaGVscGVyX2FkZCgmdGRldi0+cGxhbmUsICZ0aW55ZHJtX3Bs YW5lX2hlbHBlcl9mdW5jcyk7Cj4gKwlyZXR1cm4gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KHRk ZXYtPmJhc2UsICZ0ZGV2LT5wbGFuZSwgMCwKPiArCQkJCQkmdGlueWRybV9wbGFuZV9mdW5jcywg dGlueWRybV9mb3JtYXRzLAo+ICsJCQkJCUFSUkFZX1NJWkUodGlueWRybV9mb3JtYXRzKSwKPiAr CQkJCQlEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiArfQo+IGRpZmYgLS1naXQgYS9pbmNsdWRl L2RybS90aW55ZHJtL3Rpbnlkcm0uaCBiL2luY2x1ZGUvZHJtL3Rpbnlkcm0vdGlueWRybS5oCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi42OTVlNDgzCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL2luY2x1ZGUvZHJtL3Rpbnlkcm0vdGlueWRybS5oCj4gQEAgLTAsMCArMSwx NDIgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE2IE5vcmFsZiBUcsO4bm5lcwo+ICsg Kgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+ICsgKiB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+ICsg KiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKi8KPiArCj4gKyNpZm5k ZWYgX19MSU5VWF9USU5ZRFJNX0gKPiArI2RlZmluZSBfX0xJTlVYX1RJTllEUk1fSAo+ICsKPiAr Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+Cj4gKwo+ICtzdHJ1Y3QgdGlueWRybV9kZWZlcnJl ZDsKPiArc3RydWN0IHRpbnlkcm1fZmJkZXY7Cj4gK3N0cnVjdCBzcGlfZGV2aWNlOwo+ICtzdHJ1 Y3QgcmVndWxhdG9yOwo+ICtzdHJ1Y3QgbGNkcmVnOwo+ICsKPiArc3RydWN0IHRpbnlkcm1fZnJh bWVidWZmZXIgewo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBiYXNlOwo+ICsJc3RydWN0IGRy bV9nZW1fY21hX29iamVjdCAqY21hX29iajsKPiArfTsKPiArCj4gK3N0cnVjdCB0aW55ZHJtX2Rl dmljZSB7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqYmFzZTsKPiArCXUzMiB3aWR0aCwgaGVpZ2h0 Owo+ICsJc3RydWN0IGRybV9wYW5lbCBwYW5lbDsKPiArCXN0cnVjdCBkcm1fcGxhbmUgcGxhbmU7 Cj4gKwlzdHJ1Y3QgdGlueWRybV9mYmRldiAqZmJkZXY7Cj4gKwlzdHJ1Y3QgdGlueWRybV9kZWZl cnJlZCAqZGVmZXJyZWQ7Cj4gKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0Owo+ ICsJc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yOwo+ICsJc3RydWN0IGxjZHJlZyAqbGNkcmVn Owo+ICsJYm9vbCBwcmVwYXJlZDsKPiArCWJvb2wgZW5hYmxlZDsKPiArCXZvaWQgKmRldl9wcml2 YXRlOwo+ICsKPiArCWludCAoKmRpcnR5ZmIpKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCB2 b2lkICp2bWVtLCB1bnNpZ25lZCBmbGFncywKPiArCQkgICAgICAgdW5zaWduZWQgY29sb3IsIHN0 cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKPiArCQkgICAgICAgdW5zaWduZWQgbnVtX2NsaXBz KTsKPiArfTsKPiArCj4gK2ludCBkZXZtX3Rpbnlkcm1fcmVnaXN0ZXIoc3RydWN0IGRldmljZSAq ZGV2LCBzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpOwo+ICtpbnQgdGlueWRybV9yZWdpc3Rl cihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldik7Cj4gK3Zv aWQgdGlueWRybV9yZWxlYXNlKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldik7Cj4gKwo+ICtz dGF0aWMgaW5saW5lIHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGlueWRybV9mcm9tX3BhbmVsKHN0 cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlyZXR1cm4gcGFuZWwtPmNvbm5lY3Rvci0+ ZGV2LT5kZXZfcHJpdmF0ZTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIHRpbnlkcm1f cHJlcGFyZShzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCj4gK3sKPiArCWlmICghdGRldi0+ cHJlcGFyZWQpIHsKPiArCQlkcm1fcGFuZWxfcHJlcGFyZSgmdGRldi0+cGFuZWwpOwo+ICsJCXRk ZXYtPnByZXBhcmVkID0gdHJ1ZTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lk IHRpbnlkcm1fdW5wcmVwYXJlKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKPiArewo+ICsJ aWYgKHRkZXYtPnByZXBhcmVkKSB7Cj4gKwkJZHJtX3BhbmVsX3VucHJlcGFyZSgmdGRldi0+cGFu ZWwpOwo+ICsJCXRkZXYtPnByZXBhcmVkID0gZmFsc2U7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRp YyBpbmxpbmUgdm9pZCB0aW55ZHJtX2VuYWJsZShzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYp Cj4gK3sKPiArCWlmICghdGRldi0+ZW5hYmxlZCkgewo+ICsJCWRybV9wYW5lbF9lbmFibGUoJnRk ZXYtPnBhbmVsKTsKPiArCQl0ZGV2LT5lbmFibGVkID0gdHJ1ZTsKPiArCX0KPiArfQo+ICsKPiAr c3RhdGljIGlubGluZSB2b2lkIHRpbnlkcm1fZGlzYWJsZShzdHJ1Y3QgdGlueWRybV9kZXZpY2Ug KnRkZXYpCj4gK3sKPiArCWlmICh0ZGV2LT5lbmFibGVkKSB7Cj4gKwkJZHJtX3BhbmVsX2Rpc2Fi bGUoJnRkZXYtPnBhbmVsKTsKPiArCQl0ZGV2LT5lbmFibGVkID0gZmFsc2U7Cj4gKwl9Cj4gK30K PiArCj4gK3N0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICp0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0 KHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gK2ludCB0aW55ZHJtX3BhbmVsX2VuYWJsZV9iYWNrbGln aHQoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpOwo+ICtpbnQgdGlueWRybV9wYW5lbF9kaXNhYmxl X2JhY2tsaWdodChzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCk7Cj4gK2V4dGVybiBjb25zdCBzdHJ1 Y3QgZGV2X3BtX29wcyB0aW55ZHJtX3NpbXBsZV9wbV9vcHM7Cj4gK3ZvaWQgdGlueWRybV9zcGlf c2h1dGRvd24oc3RydWN0IHNwaV9kZXZpY2UgKnNwaSk7Cj4gKwo+ICtzdHJ1Y3QgdGlueWRybV9m Yl9jbGlwIHsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ICsJc3RydWN0IGRybV9j bGlwX3JlY3QgY2xpcDsKPiArCXZvaWQgKnZtZW07Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdGlueWRy bV9kZWZlcnJlZCB7Cj4gKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrOwo+ICsJc3RydWN0IHRp bnlkcm1fZmJfY2xpcCBmYl9jbGlwOwo+ICsJdW5zaWduZWQgZGVmZXJfbXM7Cj4gKwlzcGlubG9j a190IGxvY2s7Cj4gKwlib29sIG5vX2RlbGF5Owo+ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSBz dHJ1Y3QgdGlueWRybV9kZXZpY2UgKndvcmtfdG9fdGlueWRybShzdHJ1Y3Qgd29ya19zdHJ1Y3Qg KndvcmspCj4gK3sKPiArCXN0cnVjdCB0aW55ZHJtX2RlZmVycmVkICpkZWZlcnJlZDsKPiArCj4g KwlkZWZlcnJlZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdGlueWRybV9kZWZlcnJlZCwg ZHdvcmsud29yayk7Cj4gKwlyZXR1cm4gZGVmZXJyZWQtPmZiX2NsaXAuZmItPmRldi0+ZGV2X3By aXZhdGU7Cj4gK30KPiArCj4gK2Jvb2wgdGlueWRybV9kZWZlcnJlZF9iZWdpbihzdHJ1Y3QgdGlu eWRybV9kZXZpY2UgKnRkZXYsCj4gKwkJCSAgICBzdHJ1Y3QgdGlueWRybV9mYl9jbGlwICpmYl9j bGlwKTsKPiArdm9pZCB0aW55ZHJtX2RlZmVycmVkX2VuZChzdHJ1Y3QgdGlueWRybV9kZXZpY2Ug KnRkZXYpOwo+ICtpbnQgdGlueWRybV9kaXJ0eWZiKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LCB2b2lkICp2bWVtLCB1bnNpZ25lZCBmbGFncywKPiArCQkgICAgdW5zaWduZWQgY29sb3IsIHN0 cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKPiArCQkgICAgdW5zaWduZWQgbnVtX2NsaXBzKTsK PiArCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCB0aW55ZHJtX2lzX2Z1bGxfY2xpcChzdHJ1Y3QgZHJt X2NsaXBfcmVjdCAqY2xpcCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQo+ICt7Cj4gKwlyZXR1cm4g Y2xpcC0+eDEgPT0gMCAmJiBjbGlwLT54MiA+PSAod2lkdGggLSAxKSAmJgo+ICsJICAgICAgIGNs aXAtPnkxID09IDAgJiYgY2xpcC0+eTIgPj0gKGhlaWdodCAtMSk7Cj4gK30KPiArCj4gK3N0YXRp YyBpbmxpbmUgdm9pZCB0aW55ZHJtX3Jlc2V0X2NsaXAoc3RydWN0IGRybV9jbGlwX3JlY3QgKmNs aXApCj4gK3sKPiArCWNsaXAtPngxID0gfjA7Cj4gKwljbGlwLT54MiA9IDA7Cj4gKwljbGlwLT55 MSA9IH4wOwo+ICsJY2xpcC0+eTIgPSAwOwo+ICt9Cj4gKwo+ICt2b2lkIHRpbnlkcm1fbWVyZ2Vf Y2xpcHMoc3RydWN0IGRybV9jbGlwX3JlY3QgKmRzdCwKPiArCQkJIHN0cnVjdCBkcm1fY2xpcF9y ZWN0ICpjbGlwcywgdW5zaWduZWQgbnVtX2NsaXBzLAo+ICsJCQkgdW5zaWduZWQgZmxhZ3MsIHUz MiB3aWR0aCwgdTMyIGhlaWdodCk7Cj4gKwo+ICsjZW5kaWYgLyogX19MSU5VWF9USU5ZRFJNX0gg Ki8KPiAtLSAKPiAyLjIuMgo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIElu dGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=