From mboxrd@z Thu Jan  1 00:00:00 1970
Return-path: <barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org>
Received: from mail-qg0-x22a.google.com ([2607:f8b0:400d:c04::22a])
 by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux))
 id 1aGOrX-0000Lq-Q3
 for barebox@lists.infradead.org; Tue, 05 Jan 2016 10:29:13 +0000
Received: by mail-qg0-x22a.google.com with SMTP id 6so196431528qgy.1
 for <barebox@lists.infradead.org>; Tue, 05 Jan 2016 02:28:51 -0800 (PST)
MIME-Version: 1.0
In-Reply-To: <1451981463-23604-4-git-send-email-mkl@pengutronix.de>
References: <1451981463-23604-1-git-send-email-mkl@pengutronix.de>
 <1451981463-23604-4-git-send-email-mkl@pengutronix.de>
From: Yegor Yefremov <yegorslists@googlemail.com>
Date: Tue, 5 Jan 2016 11:28:31 +0100
Message-ID: <CAGm1_kunZqatbVbE3AgS-wQdx-gUqeShE2PrHYwxgLX74DRRLw@mail.gmail.com>
List-Id: <barebox.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/barebox>,
 <mailto:barebox-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/barebox/>
List-Post: <mailto:barebox@lists.infradead.org>
List-Help: <mailto:barebox-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/barebox>,
 <mailto:barebox-request@lists.infradead.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: "barebox" <barebox-bounces@lists.infradead.org>
Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org
Subject: Re: [PATCH 3/3] bootm: add initial FIT support
To: Marc Kleine-Budde <mkl@pengutronix.de>
Cc: barebox <barebox@lists.infradead.org>, kernel@pengutronix.de

SGkgTWFyYywKCnRoYW5rcyBmb3IgcmVwb3N0aW5nIHRoZSBwYXRjaGVzLgoKT24gVHVlLCBKYW4g
NSwgMjAxNiBhdCA5OjExIEFNLCBNYXJjIEtsZWluZS1CdWRkZSA8bWtsQHBlbmd1dHJvbml4LmRl
PiB3cm90ZToKPiBGcm9tOiBKYW4gTHVlYmJlIDxqbHVAcGVuZ3V0cm9uaXguZGU+Cj4KPiBUaGlz
IGltcGxlbWVudGF0aW9uIGlzIGluc3BpcmVkIGJ5IFUtQm9vdCdzIEZJVCBzdXBwb3J0LiBJbnN0
ZWFkIG9mCj4gdXNpbmcgbGliZmR0ICh3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBiYXJlYm94KSwg
Y29uZmlndXJhdGlvbiBzaWduYXR1cmVzCj4gYXJlIHZlcmlmaWVkIGJ5IHVzaW5nIGEgc2ltcGxp
ZmllZCBEVCBwYXJzZXIgYmFzZWQgb24gYmFyZWJveCdzIG93bgo+IGNvZGUuCj4KPiBDdXJyZW50
bHksIG9ubHkgc2lnbmVkIGNvbmZpZ3VyYXRpb25zIHdpdGggaGFzaGVkIGltYWdlcyBhcmUgc3Vw
cG9ydGVkLAo+IGFzIHRoZSBvdGhlciB2YXJpYW50cyBhcmUgbGVzcyB1c2VmdWwgZm9yIHZlcmlm
aWVkIGJvb3QuIENvbXBhdGlibGUgRklUCj4gaW1hZ2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIFUt
Qm9vdCdzIG1raW1hZ2UgdG9vbC4KCldoYXQgYWJvdXQgdW5zaWduZWQgaW1hZ2VzPwoKSSBhbHNv
IGdldDogdW5zdXBwb3J0ZWQgYWxnbyBjcmMzMgoKSXMgaXQgaW50ZW5kZWQgdG8gYmUgc3VwcG9y
dGVkPwoKPiBTaWduZWQtb2ZmLWJ5OiBKYW4gTHVlYmJlIDxqbHVAcGVuZ3V0cm9uaXguZGU+Cj4g
U2lnbmVkLW9mZi1ieTogTWFyYyBLbGVpbmUtQnVkZGUgPG1rbEBwZW5ndXRyb25peC5kZT4KPiAt
LS0KPiAgYXJjaC9hcm0vbGliL2Jvb3RtLmMgfCAgNzQgKysrKysrKwo+ICBjb21tYW5kcy9LY29u
ZmlnICAgICB8ICAgOCArCj4gIGNvbW1vbi9LY29uZmlnICAgICAgIHwgICA2ICsKPiAgY29tbW9u
L01ha2VmaWxlICAgICAgfCAgIDEgKwo+ICBjb21tb24vaW1hZ2UtZml0LmMgICB8IDU5MCArKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVk
ZS9pbWFnZS1maXQuaCAgfCAgNDIgKysrKwo+ICA2IGZpbGVzIGNoYW5nZWQsIDcyMSBpbnNlcnRp
b25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb21tb24vaW1hZ2UtZml0LmMKPiAgY3JlYXRl
IG1vZGUgMTAwNjQ0IGluY2x1ZGUvaW1hZ2UtZml0LmgKPgo+IGRpZmYgLS1naXQgYS9hcmNoL2Fy
bS9saWIvYm9vdG0uYyBiL2FyY2gvYXJtL2xpYi9ib290bS5jCj4gaW5kZXggN2JiOWI0MzY1NjBj
Li4yMmMyZDYwMTdlN2MgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm0vbGliL2Jvb3RtLmMKPiArKysg
Yi9hcmNoL2FybS9saWIvYm9vdG0uYwo+IEBAIC01NTMsNiArNTUzLDc4IEBAIEJBUkVCT1hfTUFH
SUNWQVIoYWltYWdlX25vdmVyd3JpdGVfYm9vdGFyZ3MsICJEaXNhYmxlIG92ZXJ3cml0ZSBvZiB0
aGUgYm9vdGFyZ3MKPiAgQkFSRUJPWF9NQUdJQ1ZBUihhaW1hZ2Vfbm92ZXJ3cml0ZV90YWdzLCAi
RGlzYWJsZSBvdmVyd3JpdGUgb2YgdGhlIHRhZ3MgYWRkciB3aXRoIHRoZSBvbmUgcHJlc2VudCBp
biBhaW1hZ2UiKTsKPiAgI2VuZGlmCj4KPiArI2luY2x1ZGUgPGltYWdlLWZpdC5oPgo+ICsKPiAr
c3RhdGljIGludCBkb19ib290bV9hcm1fZml0KHN0cnVjdCBpbWFnZV9kYXRhICpkYXRhKQo+ICt7
Cj4gKyAgICAgICBzdHJ1Y3QgZml0X2hhbmRsZSAqaGFuZGxlOwo+ICsgICAgICAgaW50IHJldDsK
PiArICAgICAgIHVuc2lnbmVkIGxvbmcgbWVtX2ZyZWU7Cj4gKyAgICAgICB1bnNpZ25lZCBsb25n
IG1lbV9zdGFydCwgbWVtX3NpemU7Cj4gKwo+ICsgICAgICAgaGFuZGxlID0gZml0X29wZW4oZGF0
YS0+b3NfZmlsZSwgZGF0YS0+b3NfbnVtLCBkYXRhLT52ZXJib3NlKTsKPiArICAgICAgIGlmICgh
aGFuZGxlKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArCj4gKyAgICAgICBy
ZXQgPSBzZHJhbV9zdGFydF9hbmRfc2l6ZSgmbWVtX3N0YXJ0LCAmbWVtX3NpemUpOwo+ICsgICAg
ICAgaWYgKHJldCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICAgICAv
KiBubyBzdXBwb3J0IGZvciBjdXN0b20gbG9hZCBhZGRyZXNzICovCj4gKyAgICAgICBkYXRhLT5v
c19hZGRyZXNzID0gbWVtX3N0YXJ0ICsgUEFHRV9BTElHTihoYW5kbGUtPmtlcm5lbF9zaXplICog
NCk7Cj4gKyAgICAgICBkYXRhLT5vc19yZXMgPSByZXF1ZXN0X3NkcmFtX3JlZ2lvbigiZml0LWtl
cm5lbCIsIGRhdGEtPm9zX2FkZHJlc3MsIGhhbmRsZS0+a2VybmVsX3NpemUpOwo+ICsgICAgICAg
aWYgKCFkYXRhLT5vc19yZXMpIHsKPiArICAgICAgICAgICAgICAgcHJfZXJyKCJDYW5ub3QgcmVx
dWVzdCByZWdpb24gMHglMDhseCAtIDB4JTA4bHhcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLT5vc19hZGRyZXNzLCBoYW5kbGUtPmtlcm5lbF9zaXplKTsKPiArICAg
ICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKPiArICAgICAgICAgICAgICAgZ290byBlcnJfb3V0
Owo+ICsgICAgICAgfQo+ICsgICAgICAgbWVtY3B5KCh2b2lkICopZGF0YS0+b3NfcmVzLT5zdGFy
dCwgaGFuZGxlLT5rZXJuZWwsIGhhbmRsZS0+a2VybmVsX3NpemUpOwo+ICsKPiArICAgICAgIC8q
Cj4gKyAgICAgICAgKiBQdXQgb2Z0cmVlL2luaXRyZCBjbG9zZSBiZWhpbmQgY29tcHJlc3NlZCBr
ZXJuZWwgaW1hZ2UgdG8gYXZvaWQKPiArICAgICAgICAqIHBsYWNpbmcgaXQgb3V0c2lkZSBvZiB0
aGUga2VybmVscyBsb3dtZW0uCj4gKyAgICAgICAgKi8KPiArICAgICAgIGlmIChoYW5kbGUtPmlu
aXRyZF9zaXplKSB7Cj4gKyAgICAgICAgICAgICAgIGRhdGEtPmluaXRyZF9hZGRyZXNzID0gUEFH
RV9BTElHTihkYXRhLT5vc19yZXMtPmVuZCArIFNaXzFNKTsKPiArICAgICAgICAgICAgICAgZGF0
YS0+aW5pdHJkX3JlcyA9IHJlcXVlc3Rfc2RyYW1fcmVnaW9uKCJmaXQtaW5pdHJkIiwgZGF0YS0+
aW5pdHJkX2FkZHJlc3MsIGhhbmRsZS0+aW5pdHJkX3NpemUpOwo+ICsgICAgICAgICAgICAgICBp
ZiAoIWRhdGEtPmluaXRyZF9yZXMpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAt
RU5PTUVNOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyX291dDsKPiArICAgICAg
ICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICBtZW1jcHkoKHZvaWQgKilkYXRhLT5pbml0cmRf
cmVzLT5zdGFydCwgaGFuZGxlLT5pbml0cmQsIGhhbmRsZS0+aW5pdHJkX3NpemUpOwo+ICsgICAg
ICAgfQo+ICsKPiArICAgICAgIGRhdGEtPm9mX3Jvb3Rfbm9kZSA9IG9mX3VuZmxhdHRlbl9kdGIo
aGFuZGxlLT5vZnRyZWUpOwo+ICsgICAgICAgaWYgKCFkYXRhLT5vZl9yb290X25vZGUpIHsKPiAr
ICAgICAgICAgICAgICAgcHJfZXJyKCJ1bmFibGUgdG8gdW5mbGF0dGVuIGRldmljZXRyZWVcbiIp
Owo+ICsgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwo+ICsgICAgICAgICAgICAgICBnb3Rv
IGVycl9vdXQ7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAgICAqIFB1dCBk
ZXZpY2V0cmVlIHJpZ2h0IGFmdGVyIGluaXRyZCBpZiBwcmVzZW50IG9yIGFmdGVyIHRoZSBrZXJu
ZWwKPiArICAgICAgICAqIGlmIG5vdC4KPiArICAgICAgICAqLwo+ICsgICAgICAgaWYgKGRhdGEt
PmluaXRyZF9yZXMpCj4gKyAgICAgICAgICAgICAgIG1lbV9mcmVlID0gUEFHRV9BTElHTihkYXRh
LT5pbml0cmRfcmVzLT5lbmQpOwo+ICsgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICBtZW1f
ZnJlZSA9IFBBR0VfQUxJR04oZGF0YS0+b3NfcmVzLT5lbmQgKyBTWl8xTSk7Cj4gKwo+ICsgICAg
ICAgcmV0dXJuIF9fZG9fYm9vdG1fbGludXgoZGF0YSwgbWVtX2ZyZWUsIDApOwo+ICsKPiArZXJy
X291dDoKPiArICAgICAgIGlmIChoYW5kbGUpCj4gKyAgICAgICAgICAgICAgIGZpdF9jbG9zZSho
YW5kbGUpOwo+ICsgICAgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBp
bWFnZV9oYW5kbGVyIGFybV9maXRfaGFuZGxlciA9IHsKPiArICAgICAgICAubmFtZSA9ICJGSVQg
aW1hZ2UiLAo+ICsgICAgICAgIC5ib290bSA9IGRvX2Jvb3RtX2FybV9maXQsCj4gKyAgICAgICAg
LmZpbGV0eXBlID0gZmlsZXR5cGVfb2Z0cmVlLAo+ICt9Owo+ICsKPiAgc3RhdGljIHN0cnVjdCBi
aW5mbXRfaG9vayBiaW5mbXRfYWltYWdlX2hvb2sgPSB7Cj4gICAgICAgICAudHlwZSA9IGZpbGV0
eXBlX2FpbWFnZSwKPiAgICAgICAgIC5leGVjID0gImJvb3RtIiwKPiBAQCAtNTc4LDYgKzY1MCw4
IEBAIHN0YXRpYyBpbnQgYXJtbGludXhfcmVnaXN0ZXJfaW1hZ2VfaGFuZGxlcih2b2lkKQo+ICAg
ICAgICAgICAgICAgICByZWdpc3Rlcl9pbWFnZV9oYW5kbGVyKCZhaW1hZ2VfaGFuZGxlcik7Cj4g
ICAgICAgICAgICAgICAgIGJpbmZtdF9yZWdpc3RlcigmYmluZm10X2FpbWFnZV9ob29rKTsKPiAg
ICAgICAgIH0KPiArICAgICAgIGlmIChJU19CVUlMVElOKENPTkZJR19DTURfQk9PVE1fRklUSU1B
R0UpKQo+ICsgICAgICAgICAgICAgICByZWdpc3Rlcl9pbWFnZV9oYW5kbGVyKCZhcm1fZml0X2hh
bmRsZXIpOwo+ICAgICAgICAgYmluZm10X3JlZ2lzdGVyKCZiaW5mbXRfYXJtX3ppbWFnZV9ob29r
KTsKPiAgICAgICAgIGJpbmZtdF9yZWdpc3RlcigmYmluZm10X2JhcmVib3hfaG9vayk7Cj4KPiBk
aWZmIC0tZ2l0IGEvY29tbWFuZHMvS2NvbmZpZyBiL2NvbW1hbmRzL0tjb25maWcKPiBpbmRleCAx
NzQzNjcwZWQzM2MuLmI4OTYyNzIwOWY1YSAxMDA2NDQKPiAtLS0gYS9jb21tYW5kcy9LY29uZmln
Cj4gKysrIGIvY29tbWFuZHMvS2NvbmZpZwo+IEBAIC00MTgsNiArNDE4LDE0IEBAIGNvbmZpZyBD
TURfQk9PVE1fQUlNQUdFCj4gICAgICAgICBoZWxwCj4gICAgICAgICAgIFN1cHBvcnQgdXNpbmcg
QW5kcm9pZCBJbWFnZXMuCj4KPiArY29uZmlnIENNRF9CT09UTV9GSVRJTUFHRQo+ICsgICAgICAg
Ym9vbAo+ICsgICAgICAgcHJvbXB0ICJGSVQgaW1hZ2Ugc3VwcG9ydCIKPiArICAgICAgIHNlbGVj
dCBGSVRJTUFHRQo+ICsgICAgICAgZGVwZW5kcyBvbiBDTURfQk9PVE0gJiYgQVJNCj4gKyAgICAg
ICBoZWxwCj4gKyAgICAgICAgIFN1cHBvcnQgdXNpbmcgRklUIEltYWdlcy4KPiArCj4gIGNvbmZp
ZyBDTURfQk9PVFUKPiAgICAgICAgIHRyaXN0YXRlCj4gICAgICAgICBkZWZhdWx0IHkKPiBkaWZm
IC0tZ2l0IGEvY29tbW9uL0tjb25maWcgYi9jb21tb24vS2NvbmZpZwo+IGluZGV4IDhlNzk1MDk2
OGMzZS4uZDgyNGI1ZTM1ZjA0IDEwMDY0NAo+IC0tLSBhL2NvbW1vbi9LY29uZmlnCj4gKysrIGIv
Y29tbW9uL0tjb25maWcKPiBAQCAtNjYsNiArNjYsMTIgQEAgY29uZmlnIFVJTUFHRQo+ICAgICAg
ICAgc2VsZWN0IENSQzMyCj4gICAgICAgICBib29sCj4KPiArY29uZmlnIEZJVElNQUdFCj4gKyAg
ICAgICBib29sCj4gKyAgICAgICBzZWxlY3QgT0ZUUkVFCj4gKyAgICAgICBzZWxlY3QgRElHRVNU
Cj4gKyAgICAgICBzZWxlY3QgQ1JZUFRPX1JTQQo+ICsKPiAgY29uZmlnIExPR0JVRgo+ICAgICAg
ICAgYm9vbAo+Cj4gZGlmZiAtLWdpdCBhL2NvbW1vbi9NYWtlZmlsZSBiL2NvbW1vbi9NYWtlZmls
ZQo+IGluZGV4IDU2ZTZiZWNlYzA3OC4uZmZhZjhlN2I0MmViIDEwMDY0NAo+IC0tLSBhL2NvbW1v
bi9NYWtlZmlsZQo+ICsrKyBiL2NvbW1vbi9NYWtlZmlsZQo+IEBAIC00Niw2ICs0Niw3IEBAIG9i
ai0kKENPTkZJR19TSEVMTF9IVVNIKSAgICAgICs9IGh1c2gubwo+ICBvYmotJChDT05GSUdfU0hF
TExfU0lNUExFKSAgICAgKz0gcGFyc2VyLm8KPiAgb2JqLSQoQ09ORklHX1NUQVRFKSAgICAgICAg
ICAgICs9IHN0YXRlLm8KPiAgb2JqLSQoQ09ORklHX1VJTUFHRSkgICAgICAgICAgICs9IGltYWdl
Lm8gdWltYWdlLm8KPiArb2JqLSQoQ09ORklHX0ZJVElNQUdFKSAgICAgICAgICs9IGltYWdlLWZp
dC5vCj4gIG9iai0kKENPTkZJR19NRU5VVFJFRSkgICAgICAgICArPSBtZW51dHJlZS5vCj4gIG9i
ai0kKENPTkZJR19FRklfR1VJRCkgICAgICAgICArPSBlZmktZ3VpZC5vCj4gIG9iai0kKENPTkZJ
R19FRklfREVWSUNFUEFUSCkgICArPSBlZmktZGV2aWNlcGF0aC5vCj4gZGlmZiAtLWdpdCBhL2Nv
bW1vbi9pbWFnZS1maXQuYyBiL2NvbW1vbi9pbWFnZS1maXQuYwo+IG5ldyBmaWxlIG1vZGUgMTAw
NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mYzk1ZWQ0ZDgxMTgKPiAtLS0gL2Rldi9udWxsCj4g
KysrIGIvY29tbW9uL2ltYWdlLWZpdC5jCj4gQEAgLTAsMCArMSw1OTAgQEAKPiArLyoKPiArICog
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPiArICogKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKPiArICogYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPiArICoKPiAr
ICogQ29weXJpZ2h0IChDKSBKYW4gTMO8YmJlLCAyMDE0Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg
PGNvbW1vbi5oPgo+ICsjaW5jbHVkZSA8aW5pdC5oPgo+ICsjaW5jbHVkZSA8Ym9vdC5oPgo+ICsj
aW5jbHVkZSA8bGliZmlsZS5oPgo+ICsjaW5jbHVkZSA8ZmR0Lmg+Cj4gKyNpbmNsdWRlIDxkaWdl
c3QuaD4KPiArI2luY2x1ZGUgPG9mLmg+Cj4gKyNpbmNsdWRlIDxmcy5oPgo+ICsjaW5jbHVkZSA8
bWFsbG9jLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgo+ICsjaW5jbHVkZSA8YXNtL2J5
dGVvcmRlci5oPgo+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5o
Pgo+ICsjaW5jbHVkZSA8c3RyaW5nbGlzdC5oPgo+ICsjaW5jbHVkZSA8cnNhLmg+Cj4gKyNpbmNs
dWRlIDxpbWFnZS1maXQuaD4KPiArCj4gKyNkZWZpbmUgRkRUX01BWF9ERVBUSCAzMgo+ICsjZGVm
aW5lIEZEVF9NQVhfUEFUSF9MRU4gMjAwCj4gKwo+ICsjZGVmaW5lIENIRUNLX0xFVkVMX05PTkUg
MAo+ICsjZGVmaW5lIENIRUNLX0xFVkVMX0hBU0ggMQo+ICsjZGVmaW5lIENIRUNLX0xFVkVMX1NJ
RyAyCj4gKyNkZWZpbmUgQ0hFQ0tfTEVWRUxfTUFYIDMKPiArCj4gK3N0YXRpYyB1aW50MzJfdCBk
dF9zdHJ1Y3RfYWR2YW5jZShzdHJ1Y3QgZmR0X2hlYWRlciAqZiwgdWludDMyX3QgZHQsIGludCBz
aXplKQo+ICt7Cj4gKyAgICAgICBkdCArPSBzaXplOwo+ICsgICAgICAgZHQgPSBBTElHTihkdCwg
NCk7Cj4gKwo+ICsgICAgICAgaWYgKGR0ID4gZi0+b2ZmX2R0X3N0cnVjdCArIGYtPnNpemVfZHRf
c3RydWN0KQo+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICAgICByZXR1cm4g
ZHQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjaGFyICpkdF9zdHJpbmcoc3RydWN0IGZkdF9oZWFkZXIg
KmYsIGNoYXIgKnN0cnN0YXJ0LCB1aW50MzJfdCBvZnMpCj4gK3sKPiArICAgICAgIGlmIChvZnMg
PiBmLT5zaXplX2R0X3N0cmluZ3MpCj4gKyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ICsg
ICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICByZXR1cm4gc3Ryc3RhcnQgKyBvZnM7Cj4gK30K
PiArCj4gK3N0YXRpYyBpbnQgb2ZfcmVhZF9zdHJpbmdfbGlzdChzdHJ1Y3QgZGV2aWNlX25vZGUg
Km5wLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnNsKQo+ICt7Cj4gKyAg
ICAgICBzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Cj4gKyAgICAgICBjb25zdCBjaGFyICpzOwo+ICsK
PiArICAgICAgIG9mX3Byb3BlcnR5X2Zvcl9lYWNoX3N0cmluZyhucCwgbmFtZSwgcHJvcCwgcykg
ewo+ICsgICAgICAgICAgICAgICBzdHJpbmdfbGlzdF9hZGQoc2wsIHMpOwo+ICsgICAgICAgfQo+
ICsKPiArICAgICAgIHJldHVybiBwcm9wID8gMCA6IC1FSU5WQUw7Cj4gK30KPiArCj4gK3N0YXRp
YyBpbnQgZml0X2RpZ2VzdCh2b2lkICpmaXQsIHN0cnVjdCBkaWdlc3QgKmRpZ2VzdCwKPiArICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHN0cmluZ19saXN0ICppbmNfbm9kZXMsIHN0cnVjdCBz
dHJpbmdfbGlzdCAqZXhjX3Byb3BzLAo+ICsgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBo
YXNoZWRfc3RyaW5nc19zdGFydCwgdWludDMyX3QgaGFzaGVkX3N0cmluZ3Nfc2l6ZSkKPiArewo+
ICsgICAgICAgc3RydWN0IGZkdF9oZWFkZXIgKmZkdCA9IGZpdDsKPiArICAgICAgIHVpbnQzMl90
IGR0X3N0cnVjdDsKPiArICAgICAgIHZvaWQgKmR0X3N0cmluZ3M7Cj4gKyAgICAgICBzdHJ1Y3Qg
ZmR0X2hlYWRlciBmOwo+ICsgICAgICAgaW50IHN0YWNrW0ZEVF9NQVhfREVQVEhdOwo+ICsgICAg
ICAgY2hhciBwYXRoW0ZEVF9NQVhfUEFUSF9MRU5dOwo+ICsgICAgICAgY2hhciAqZW5kOwo+ICsg
ICAgICAgdWludDMyX3QgdGFnOwo+ICsgICAgICAgaW50IHN0YXJ0ID0gLTE7Cj4gKyAgICAgICBp
bnQgZGVwdGggPSAtMTsKPiArICAgICAgIGludCB3YW50ID0gMDsKPiArCj4gKyAgICAgICBmLnRv
dGFsc2l6ZSA9IGZkdDMyX3RvX2NwdShmZHQtPnRvdGFsc2l6ZSk7Cj4gKyAgICAgICBmLm9mZl9k
dF9zdHJ1Y3QgPSBmZHQzMl90b19jcHUoZmR0LT5vZmZfZHRfc3RydWN0KTsKPiArICAgICAgIGYu
c2l6ZV9kdF9zdHJ1Y3QgPSBmZHQzMl90b19jcHUoZmR0LT5zaXplX2R0X3N0cnVjdCk7Cj4gKyAg
ICAgICBmLm9mZl9kdF9zdHJpbmdzID0gZmR0MzJfdG9fY3B1KGZkdC0+b2ZmX2R0X3N0cmluZ3Mp
Owo+ICsgICAgICAgZi5zaXplX2R0X3N0cmluZ3MgPSBmZHQzMl90b19jcHUoZmR0LT5zaXplX2R0
X3N0cmluZ3MpOwo+ICsKPiArICAgICAgIGlmIChoYXNoZWRfc3RyaW5nc19zdGFydCA+IGYuc2l6
ZV9kdF9zdHJpbmdzIHx8Cj4gKyAgICAgICAgICAgaGFzaGVkX3N0cmluZ3Nfc2l6ZSA+IGYuc2l6
ZV9kdF9zdHJpbmdzIHx8Cj4gKyAgICAgICAgICAgaGFzaGVkX3N0cmluZ3Nfc3RhcnQgKyBoYXNo
ZWRfc3RyaW5nc19zaXplID4gZi5zaXplX2R0X3N0cmluZ3MpIHsKPiArICAgICAgICAgICAgICAg
cHJfZXJyKCIlczogaGFzaGVkLXN0cmluZ3MgdG9vIGxhcmdlXG4iLCBfX2Z1bmNfXyk7Cj4gKyAg
ICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGR0
X3N0cnVjdCA9IGYub2ZmX2R0X3N0cnVjdDsKPiArICAgICAgIGR0X3N0cmluZ3MgPSAodm9pZCAq
KWZkdCArIGYub2ZmX2R0X3N0cmluZ3M7Cj4gKwo+ICsgICAgICAgZW5kID0gcGF0aDsKPiArICAg
ICAgICplbmQgPSAnXDAnOwo+ICsKPiArICAgICAgIGRvIHsKPiArICAgICAgICAgICAgICAgY29u
c3Qgc3RydWN0IGZkdF9wcm9wZXJ0eSAqZmR0X3Byb3A7Cj4gKyAgICAgICAgICAgICAgIGNvbnN0
IHN0cnVjdCBmZHRfbm9kZV9oZWFkZXIgKmZuaDsKPiArICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqbmFtZTsKPiArICAgICAgICAgICAgICAgaW50IGluY2x1ZGUgPSAwOwo+ICsgICAgICAgICAg
ICAgICBpbnQgc3RvcF9hdCA9IDA7Cj4gKyAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBkdF9z
dHJ1Y3Q7Cj4gKyAgICAgICAgICAgICAgIGludCBtYXhsZW4sIGxlbjsKPiArCj4gKyAgICAgICAg
ICAgICAgIHRhZyA9IGJlMzJfdG9fY3B1KCoodWludDMyX3QgKikoZml0ICsgZHRfc3RydWN0KSk7
Cj4gKwo+ICsgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZykgewo+ICsgICAgICAgICAgICAgICBj
YXNlIEZEVF9CRUdJTl9OT0RFOgo+ICsgICAgICAgICAgICAgICAgICAgICAgIGZuaCA9IGZpdCAr
IGR0X3N0cnVjdDsKPiArICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gZm5oLT5uYW1lOwo+
ICsgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbiA9ICh1bnNpZ25lZCBsb25nKWZkdCArIGYu
b2ZmX2R0X3N0cnVjdCArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLnNpemVf
ZHRfc3RydWN0IC0gKHVuc2lnbmVkIGxvbmcpbmFtZTsKPiArCj4gKyAgICAgICAgICAgICAgICAg
ICAgICAgbGVuID0gc3RybmxlbihuYW1lLCBtYXhsZW4gKyAxKTsKPiArICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobGVuID4gbWF4bGVuKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIC1FU1BJUEU7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGR0X3N0cnVj
dCA9IGR0X3N0cnVjdF9hZHZhbmNlKCZmLCBkdF9zdHJ1Y3QsCj4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBmZHRfbm9k
ZV9oZWFkZXIpICsgbGVuICsgMSk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGRlcHRo
Kys7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoID09IEZEVF9NQVhfREVQVEgp
Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVTUElQRTsKPiArICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZW5kIC0gcGF0aCArIDIgKyBsZW4gPj0gRkRUX01BWF9Q
QVRIX0xFTikKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVNQSVBF
Owo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmQgIT0gcGF0aCArIDEpCj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqZW5kKysgPSAnLyc7Cj4gKyAgICAgICAgICAgICAg
ICAgICAgICAgc3RyY3B5KGVuZCwgbmFtZSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgZW5k
ICs9IGxlbjsKPiArICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tkZXB0aF0gPSB3YW50Owo+
ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YW50ID09IDEpCj4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdG9wX2F0ID0gb2Zmc2V0Owo+ICsgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdHJpbmdfbGlzdF9jb250YWlucyhpbmNfbm9kZXMsIHBhdGgpKQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2FudCA9IDI7Cj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAod2FudCkKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQt
LTsKPiArICAgICAgICAgICAgICAgICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdG9wX2F0ID0gb2Zmc2V0Owo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlu
Y2x1ZGUgPSB3YW50Owo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiArCj4g
KyAgICAgICAgICAgICAgIGNhc2UgRkRUX0VORF9OT0RFOgo+ICsgICAgICAgICAgICAgICAgICAg
ICAgIGR0X3N0cnVjdCA9IGR0X3N0cnVjdF9hZHZhbmNlKCZmLCBkdF9zdHJ1Y3QsIEZEVF9UQUdT
SVpFKTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IHdhbnQ7Cj4gKyAg
ICAgICAgICAgICAgICAgICAgICAgd2FudCA9IHN0YWNrW2RlcHRoLS1dOwo+ICsgICAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChlbmQgPiBwYXRoICYmICotLWVuZCAhPSAnLycpCj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgKmVu
ZCA9ICdcMCc7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsKPiArICAg
ICAgICAgICAgICAgY2FzZSBGRFRfUFJPUDoKPiArICAgICAgICAgICAgICAgICAgICAgICBmZHRf
cHJvcCA9IGZpdCArIGR0X3N0cnVjdDsKPiArICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBm
ZHQzMl90b19jcHUoZmR0X3Byb3AtPmxlbik7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAg
IG5hbWUgPSBkdF9zdHJpbmcoJmYsIGR0X3N0cmluZ3MsIGZkdDMyX3RvX2NwdShmZHRfcHJvcC0+
bmFtZW9mZikpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkKPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVNQSVBFOwo+ICsKPiArICAgICAgICAg
ICAgICAgICAgICAgICBkdF9zdHJ1Y3QgPSBkdF9zdHJ1Y3RfYWR2YW5jZSgmZiwgZHRfc3RydWN0
LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVvZihzdHJ1Y3QgZmR0X3Byb3BlcnR5KSArIGxlbik7Cj4gKwo+ICsgICAgICAgICAgICAg
ICAgICAgICAgIGluY2x1ZGUgPSB3YW50ID49IDI7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg
c3RvcF9hdCA9IG9mZnNldDsKPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nX2xp
c3RfY29udGFpbnMoZXhjX3Byb3BzLCBuYW1lKSkKPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluY2x1ZGUgPSAwOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
PiArCj4gKyAgICAgICAgICAgICAgIGNhc2UgRkRUX05PUDoKPiArICAgICAgICAgICAgICAgICAg
ICAgICBkdF9zdHJ1Y3QgPSBkdF9zdHJ1Y3RfYWR2YW5jZSgmZiwgZHRfc3RydWN0LCBGRFRfVEFH
U0laRSk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgPSB3YW50ID49IDI7
Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgc3RvcF9hdCA9IG9mZnNldDsKPiArCj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgICAgICAgICBjYXNlIEZEVF9F
TkQ6Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgZHRfc3RydWN0ID0gZHRfc3RydWN0X2FkdmFu
Y2UoJmYsIGR0X3N0cnVjdCwgRkRUX1RBR1NJWkUpOwo+ICsKPiArICAgICAgICAgICAgICAgICAg
ICAgICBpbmNsdWRlID0gMTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4g
Kwo+ICsgICAgICAgICAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAgICAgICAgICAgICAgIHBy
X2VycigiJXM6IFVua25vd24gdGFnIDB4JTA4WFxuIiwgX19mdW5jX18sIHRhZyk7Cj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKyAgICAgICAgICAgICAgIH0KPiAr
Cj4gKyAgICAgICAgICAgICAgIGlmICghZHRfc3RydWN0KQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAtRVNQSVBFOwo+ICsKPiArICAgICAgICAgICAgICAgcHJfZGVidWcoIiVzOiBp
bmNsdWRlICVkLCB3YW50ICVkLCBvZmZzZXQgMHgleCwgbGVuIDB4JXhcbiIsCj4gKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhdGgsIGluY2x1ZGUsIHdhbnQsIG9mZnNldCwgZHRfc3RydWN0LW9m
ZnNldCk7Cj4gKwo+ICsgICAgICAgICAgICAgICBpZiAoaW5jbHVkZSAmJiBzdGFydCA9PSAtMSkK
PiArICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IG9mZnNldDsKPiArCj4gKyAgICAgICAg
ICAgICAgIGlmICghaW5jbHVkZSAmJiBzdGFydCAhPSAtMSkgewo+ICsgICAgICAgICAgICAgICAg
ICAgICAgIHByX2RlYnVnKCJyZWdpb246IDB4JXArMHgleFxuIiwgZml0K3N0YXJ0LCBvZmZzZXQt
c3RhcnQpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdF91cGRhdGUoZGlnZXN0LCBm
aXQrc3RhcnQsIG9mZnNldC1zdGFydCk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQg
PSAtMTsKPiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAgfSB3aGlsZSAodGFnICE9IEZEVF9F
TkQpOwo+ICsKPiArICAgICAgIHByX2RlYnVnKCJyZWdpb246IDB4JXArMHgleFxuIiwgZml0K3N0
YXJ0LCBkdF9zdHJ1Y3Qtc3RhcnQpOwo+ICsgICAgICAgZGlnZXN0X3VwZGF0ZShkaWdlc3QsIGZp
dCtzdGFydCwgZHRfc3RydWN0LXN0YXJ0KTsKPiArCj4gKyAgICAgICBwcl9kZWJ1Zygic3RyaW5n
czogMHglcCsweCV4XG4iLCBkdF9zdHJpbmdzK2hhc2hlZF9zdHJpbmdzX3N0YXJ0LCBoYXNoZWRf
c3RyaW5nc19zaXplKTsKPiArICAgICAgIGRpZ2VzdF91cGRhdGUoZGlnZXN0LCBkdF9zdHJpbmdz
K2hhc2hlZF9zdHJpbmdzX3N0YXJ0LCBoYXNoZWRfc3RyaW5nc19zaXplKTsKPiArCj4gKyAgICAg
ICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoKPiArICogVGhlIGNvbnNpc3RlbmN5IG9mIHRoZSBG
VEQgc3RydWN0dXJlIHdhcyBhbHJlYWR5IGNoZWNrZWQgYnkgb2ZfdW5mbGF0dGVuX2R0YigpCj4g
KyAqLwo+ICtzdGF0aWMgaW50IGZpdF92ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBkZXZpY2Vfbm9k
ZSAqc2lnX25vZGUsIHZvaWQgKmZpdCkKPiArewo+ICsgICAgICAgdWludDMyX3QgaGFzaGVkX3N0
cmluZ3Nfc3RhcnQsIGhhc2hlZF9zdHJpbmdzX3NpemU7Cj4gKyAgICAgICBzdHJ1Y3Qgc3RyaW5n
X2xpc3QgaW5jX25vZGVzLCBleGNfcHJvcHM7Cj4gKyAgICAgICBzdHJ1Y3QgcnNhX3B1YmxpY19r
ZXkga2V5ID0ge307Cj4gKyAgICAgICBzdHJ1Y3QgZGlnZXN0ICpkaWdlc3Q7Cj4gKyAgICAgICBp
bnQgc2lnX2xlbjsKPiArICAgICAgIGNvbnN0IGNoYXIgKmFsZ29fbmFtZSwgKmtleV9uYW1lLCAq
c2lnX3ZhbHVlOwo+ICsgICAgICAgY2hhciAqa2V5X3BhdGg7Cj4gKyAgICAgICBzdHJ1Y3QgZGV2
aWNlX25vZGUgKmtleV9ub2RlOwo+ICsgICAgICAgZW51bSBoYXNoX2FsZ28gYWxnbzsKPiArICAg
ICAgIHZvaWQgKmhhc2g7Cj4gKyAgICAgICBpbnQgcmV0Owo+ICsKPiArICAgICAgIGlmIChvZl9w
cm9wZXJ0eV9yZWFkX3N0cmluZyhzaWdfbm9kZSwgImFsZ28iLCAmYWxnb19uYW1lKSkgewo+ICsg
ICAgICAgICAgICAgICBwcl9lcnIoImFsZ28gbm90IGZvdW5kXG4iKTsKPiArICAgICAgICAgICAg
ICAgcmV0ID0gLUVJTlZBTDsKPiArICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICB9
Cj4gKyAgICAgICBpZiAoc3RyY21wKGFsZ29fbmFtZSwgInNoYTEscnNhMjA0OCIpID09IDApIHsK
PiArICAgICAgICAgICAgICAgYWxnbyA9IEhBU0hfQUxHT19TSEExOwo+ICsgICAgICAgfSBlbHNl
IGlmIChzdHJjbXAoYWxnb19uYW1lLCAic2hhMjU2LHJzYTQwOTYiKSA9PSAwKSB7Cj4gKyAgICAg
ICAgICAgICAgIGFsZ28gPSBIQVNIX0FMR09fU0hBMjU2Owo+ICsgICAgICAgfSBlbHNlICB7Cj4g
KyAgICAgICAgICAgICAgIHByX2VycigidW5rbm93biBhbGdvICVzXG4iLCBhbGdvX25hbWUpOwo+
ICsgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwo+ICsgICAgICAgICAgICAgICBnb3RvIG91
dDsKPiArICAgICAgIH0KPiArICAgICAgIGRpZ2VzdCA9IGRpZ2VzdF9hbGxvY19ieV9hbGdvKGFs
Z28pOwo+ICsgICAgICAgaWYgKCFkaWdlc3QpIHsKPiArICAgICAgICAgICAgICAgcHJfZXJyKCJ1
bnN1cHBvcnRlZCBhbGdvICVzXG4iLCBhbGdvX25hbWUpOwo+ICsgICAgICAgICAgICAgICByZXQg
PSAtRUlOVkFMOwo+ICsgICAgICAgICAgICAgICBnb3RvIG91dDsKPiArICAgICAgIH0KPiArCj4g
KyAgICAgICBzaWdfdmFsdWUgPSBvZl9nZXRfcHJvcGVydHkoc2lnX25vZGUsICJ2YWx1ZSIsICZz
aWdfbGVuKTsKPiArICAgICAgIGlmICghc2lnX3ZhbHVlKSB7Cj4gKyAgICAgICAgICAgICAgIHBy
X2Vycigic2lnbmF0dXJlIHZhbHVlIG5vdCBmb3VuZFxuIik7Cj4gKyAgICAgICAgICAgICAgIHJl
dCA9IC1FSU5WQUw7Cj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0X2ZyZWVfZGlnZXN0Owo+ICsg
ICAgICAgfQo+ICsKPiArICAgICAgIGlmIChvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhzaWdfbm9k
ZSwgImtleS1uYW1lLWhpbnQiLCAma2V5X25hbWUpKSB7Cj4gKyAgICAgICAgICAgICAgIHByX2Vy
cigia2V5IG5hbWUgbm90IGZvdW5kXG4iKTsKPiArICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZB
TDsKPiArICAgICAgICAgICAgICAgZ290byBvdXRfZnJlZV9kaWdlc3Q7Cj4gKyAgICAgICB9Cj4g
KyAgICAgICBrZXlfcGF0aCA9IGFzcHJpbnRmKCIvc2lnbmF0dXJlL2tleS0lcyIsIGtleV9uYW1l
KTsKPiArICAgICAgIGlmICgha2V5X25hbWUpIHsKPiArICAgICAgICAgICAgICAgcmV0ID0gLUVO
T01FTTsKPiArICAgICAgICAgICAgICAgZ290byBvdXRfZnJlZV9kaWdlc3Q7Cj4gKyAgICAgICB9
Cj4gKyAgICAgICBrZXlfbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKGtleV9wYXRoKTsKPiAr
ICAgICAgIGZyZWUoa2V5X3BhdGgpOwo+ICsgICAgICAgaWYgKCFrZXlfbm9kZSkgewo+ICsgICAg
ICAgICAgICAgICBwcl9pbmZvKCJmYWlsZWQgdG8gZmluZCBrZXkgbm9kZVxuIik7Cj4gKyAgICAg
ICAgICAgICAgIHJldCA9IC1FTk9FTlQ7Cj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0X2ZyZWVf
ZGlnZXN0Owo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldCA9IHJzYV9vZl9yZWFkX2tleShr
ZXlfbm9kZSwgJmtleSk7Cj4gKyAgICAgICBpZiAocmV0KSB7Cj4gKyAgICAgICAgICAgICAgIHBy
X2luZm8oImZhaWxlZCB0byByZWFkIGtleVxuIik7Cj4gKyAgICAgICAgICAgICAgIHJldCA9IC1F
Tk9FTlQ7Cj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0X2ZyZWVfZGlnZXN0Owo+ICsgICAgICAg
fQo+ICsKPiArICAgICAgIGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChzaWdfbm9kZSwg
Imhhc2hlZC1zdHJpbmdzIiwgMCwgJmhhc2hlZF9zdHJpbmdzX3N0YXJ0KSkgewo+ICsgICAgICAg
ICAgICAgICBwcl9lcnIoIiVzOiBoYXNoZWQtc3RyaW5ncyBzdGFydCBub3QgZm91bmRcbiIsIF9f
ZnVuY19fKTsKPiArICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKPiArICAgICAgICAgICAg
ICAgZ290byBvdXRfZnJlZV9kaWdlc3Q7Cj4gKyAgICAgICB9Cj4gKyAgICAgICBpZiAob2ZfcHJv
cGVydHlfcmVhZF91MzJfaW5kZXgoc2lnX25vZGUsICJoYXNoZWQtc3RyaW5ncyIsIDEsICZoYXNo
ZWRfc3RyaW5nc19zaXplKSkgewo+ICsgICAgICAgICAgICAgICBwcl9lcnIoIiVzOiBoYXNoZWQt
c3RyaW5ncyBzaXplIG5vdCBmb3VuZFxuIiwgX19mdW5jX18pOwo+ICsgICAgICAgICAgICAgICBy
ZXQgPSAtRUlOVkFMOwo+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9mcmVlX2RpZ2VzdDsKPiAr
ICAgICAgIH0KPiArCj4gKyAgICAgICBzdHJpbmdfbGlzdF9pbml0KCZpbmNfbm9kZXMpOwo+ICsg
ICAgICAgc3RyaW5nX2xpc3RfaW5pdCgmZXhjX3Byb3BzKTsKPiArCj4gKyAgICAgICBpZiAob2Zf
cmVhZF9zdHJpbmdfbGlzdChzaWdfbm9kZSwgImhhc2hlZC1ub2RlcyIsICZpbmNfbm9kZXMpKSB7
Cj4gKyAgICAgICAgICAgICAgIHByX2VycigiJXM6IGhhc2hlZC1ub2RlcyBpbnZhbGlkXG4iLCBf
X2Z1bmNfXyk7Cj4gKyAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7Cj4gKyAgICAgICAgICAg
ICAgIGdvdG8gb3V0X3NsOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHN0cmluZ19saXN0X2Fk
ZCgmZXhjX3Byb3BzLCAiZGF0YSIpOwo+ICsKPiArICAgICAgIGRpZ2VzdF9pbml0KGRpZ2VzdCk7
Cj4gKyAgICAgICByZXQgPSBmaXRfZGlnZXN0KGZpdCwgZGlnZXN0LCAmaW5jX25vZGVzLCAmZXhj
X3Byb3BzLCBoYXNoZWRfc3RyaW5nc19zdGFydCwgaGFzaGVkX3N0cmluZ3Nfc2l6ZSk7Cj4gKyAg
ICAgICBoYXNoID0geHphbGxvYyhkaWdlc3RfbGVuZ3RoKGRpZ2VzdCkpOwo+ICsgICAgICAgZGln
ZXN0X2ZpbmFsKGRpZ2VzdCwgaGFzaCk7Cj4gKwo+ICsgICAgICAgcmV0ID0gcnNhX3ZlcmlmeSgm
a2V5LCBzaWdfdmFsdWUsIHNpZ19sZW4sIGhhc2gsIGFsZ28pOwo+ICsgICAgICAgaWYgKHJldCkg
ewo+ICsgICAgICAgICAgICAgICBwcl9pbmZvKCJzaWcgQkFEXG4iKTsKPiArICAgICAgICAgICAg
ICAgcmV0ID0gQ0hFQ0tfTEVWRUxfTk9ORTsKPiArICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAg
ICAgICAgIHByX2luZm8oInNpZyBPS1xuIik7Cj4gKyAgICAgICAgICAgICAgIHJldCA9IENIRUNL
X0xFVkVMX1NJRzsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBmcmVlKGhhc2gpOwo+ICsgb3V0
X3NsOgo+ICsgICAgICAgc3RyaW5nX2xpc3RfZnJlZSgmaW5jX25vZGVzKTsKPiArICAgICAgIHN0
cmluZ19saXN0X2ZyZWUoJmV4Y19wcm9wcyk7Cj4gKyBvdXRfZnJlZV9kaWdlc3Q6Cj4gKyAgICAg
ICBkaWdlc3RfZnJlZShkaWdlc3QpOwo+ICsgb3V0Ogo+ICsgICAgICAgcmV0dXJuIHJldDsKPiAr
fQo+ICsKPiArc3RhdGljIGludCBmaXRfdmVyaWZ5X2hhc2goc3RydWN0IGRldmljZV9ub2RlICpo
YXNoLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgZGF0YV9sZW4pCj4gK3sKPiArICAgICAgIHN0cnVj
dCBkaWdlc3QgKmQ7Cj4gKyAgICAgICBjb25zdCBjaGFyICphbGdvOwo+ICsgICAgICAgY29uc3Qg
Y2hhciAqdmFsdWVfcmVhZDsKPiArICAgICAgIGNoYXIgKnZhbHVlX2NhbGM7Cj4gKyAgICAgICBp
bnQgaGFzaF9sZW47Cj4gKwo+ICsgICAgICAgdmFsdWVfcmVhZCA9IG9mX2dldF9wcm9wZXJ0eSho
YXNoLCAidmFsdWUiLCAmaGFzaF9sZW4pOwo+ICsgICAgICAgaWYgKCF2YWx1ZV9yZWFkKSB7Cj4g
KyAgICAgICAgICAgICAgIHByX2VycigidmFsdWUgbm90IGZvdW5kXG4iKTsKPiArICAgICAgICAg
ICAgICAgcmV0dXJuIENIRUNLX0xFVkVMX05PTkU7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAg
aWYgKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGhhc2gsICJhbGdvIiwgJmFsZ28pKSB7Cj4gKyAg
ICAgICAgICAgICAgIHByX2VycigiYWxnbyBub3QgZm91bmRcbiIpOwo+ICsgICAgICAgICAgICAg
ICByZXR1cm4gLUVJTlZBTDsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBkID0gZGlnZXN0X2Fs
bG9jKGFsZ28pOwo+ICsgICAgICAgaWYgKCFkKSB7Cj4gKyAgICAgICAgICAgICAgIHByX2Vycigi
dW5zdXBwb3J0ZWQgYWxnbyAlc1xuIiwgYWxnbyk7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiAt
RUlOVkFMOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlmIChoYXNoX2xlbiAhPSBkaWdlc3Rf
bGVuZ3RoKGQpKSB7Cj4gKyAgICAgICAgICAgICAgIHByX2VycigiaW52YWxpZCBoYXNoIGxlbmd0
aCAlZFxuIiwgaGFzaF9sZW4pOwo+ICsgICAgICAgICAgICAgICBkaWdlc3RfZnJlZShkKTsKPiAr
ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAg
dmFsdWVfY2FsYyA9IHhtYWxsb2MoaGFzaF9sZW4pOwo+ICsKPiArICAgICAgIGRpZ2VzdF9pbml0
KGQpOwo+ICsgICAgICAgZGlnZXN0X3VwZGF0ZShkLCBkYXRhLCBkYXRhX2xlbik7Cj4gKyAgICAg
ICBkaWdlc3RfZmluYWwoZCwgdmFsdWVfY2FsYyk7Cj4gKwo+ICsgICAgICAgaWYgKG1lbWNtcCh2
YWx1ZV9yZWFkLCB2YWx1ZV9jYWxjLCBoYXNoX2xlbikpIHsKPiArICAgICAgICAgICAgICAgcHJf
aW5mbygiaGFzaCBCQURcbiIpOwo+ICsgICAgICAgICAgICAgICBkaWdlc3RfZnJlZShkKTsKPiAr
ICAgICAgICAgICAgICAgcmV0dXJuIENIRUNLX0xFVkVMX05PTkU7Cj4gKyAgICAgICB9IGVsc2Ug
ewo+ICsgICAgICAgICAgICAgICBwcl9pbmZvKCJoYXNoIE9LXG4iKTsKPiArICAgICAgICAgICAg
ICAgZGlnZXN0X2ZyZWUoZCk7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiBDSEVDS19MRVZFTF9I
QVNIOwo+ICsgICAgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZpdF9vcGVuX2ltYWdlKHN0
cnVjdCBmaXRfaGFuZGxlICpoYW5kbGUsIGNvbnN0IGNoYXIqIHVuaXQpCj4gK3sKPiArICAgICAg
IHN0cnVjdCBkZXZpY2Vfbm9kZSAqaW1hZ2UgPSBOVUxMLCAqaGFzaDsKPiArICAgICAgIGNvbnN0
IGNoYXIgKnR5cGUgPSBOVUxMLCAqZGVzYzsKPiArICAgICAgIGNvbnN0IHZvaWQgKmRhdGE7Cj4g
KyAgICAgICBpbnQgZGF0YV9sZW47Cj4gKyAgICAgICBpbnQgcmV0LCBsZXZlbDsKPiArCj4gKyAg
ICAgICBpbWFnZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGhhbmRsZS0+cm9vdCwgImltYWdlcyIp
Owo+ICsgICAgICAgaWYgKCFpbWFnZSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7
Cj4gKwo+ICsgICAgICAgaW1hZ2UgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShpbWFnZSwgdW5pdCk7
Cj4gKyAgICAgICBpZiAoIWltYWdlKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsK
PiArCj4gKyAgICAgICBpZiAob2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoaW1hZ2UsICJkZXNjcmlw
dGlvbiIsICZkZXNjKSkgewo+ICsgICAgICAgICAgICAgICBwcl9pbmZvKCJGSVQgaW1hZ2UgJyVz
JyAobm8gZGVzY3JpcHRpb24pXG4iLCB1bml0KTsKPiArICAgICAgIH0gZWxzZSB7Cj4gKyAgICAg
ICAgICAgICAgIHByX2luZm8oIkZJVCBpbWFnZSAnJXMnOiAnJXMnXG4iLCB1bml0LCBkZXNjKTsK
PiArICAgICAgIH0KPiArCj4gKyAgICAgICBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhpbWFnZSwg
InR5cGUiLCAmdHlwZSk7Cj4gKyAgICAgICBpZiAoIXR5cGUpCj4gKyAgICAgICAgICAgICAgIHJl
dHVybiAtRUlOVkFMOwo+ICsKPiArICAgICAgIGRhdGEgPSBvZl9nZXRfcHJvcGVydHkoaW1hZ2Us
ICJkYXRhIiwgJmRhdGFfbGVuKTsKPiArICAgICAgIGlmICghZGF0YSkgewo+ICsgICAgICAgICAg
ICAgICBwcl9lcnIoImRhdGEgbm90IGZvdW5kXG4iKTsKPiArICAgICAgICAgICAgICAgcmV0dXJu
IC1FSU5WQUw7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgbGV2ZWwgPSBDSEVDS19MRVZFTF9N
QVg7Cj4gKyAgICAgICBmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGltYWdlLCBoYXNoKSB7Cj4gKyAg
ICAgICAgICAgICAgIGlmIChoYW5kbGUtPnZlcmJvc2UpCj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgb2ZfcHJpbnRfbm9kZXMoaGFzaCwgMCk7Cj4gKyAgICAgICAgICAgICAgIHJldCA9IGZpdF92
ZXJpZnlfaGFzaChoYXNoLCBkYXRhLCBkYXRhX2xlbik7Cj4gKyAgICAgICAgICAgICAgIGlmIChy
ZXQgPCAwKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAg
ICAgICAgIGxldmVsID0gbWluKGxldmVsLCByZXQpOwo+ICsgICAgICAgfQo+ICsgICAgICAgaWYg
KGxldmVsID09IENIRUNLX0xFVkVMX01BWCkgewo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJ
TlZBTDsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBpZiAobGV2ZWwgPT0gQ0hFQ0tfTEVWRUxf
SEFTSCkgewo+ICsgICAgICAgICAgICAgICBpZiAoc3RyY21wKHR5cGUsICJrZXJuZWwiKSA9PSAw
IHx8Cj4gKyAgICAgICAgICAgICAgICAgICBzdHJjbXAodHlwZSwgImtlcm5lbF9ub2xvYWQiKSA9
PSAwKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5rZXJuZWwgPSBkYXRhOwo+
ICsgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+a2VybmVsX3NpemUgPSBkYXRhX2xlbjsK
PiArICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAodHlwZSwgImZsYXRfZHQiKSA9PSAw
KSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5vZnRyZWUgPSBkYXRhOwo+ICsg
ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+b2Z0cmVlX3NpemUgPSBkYXRhX2xlbjsKPiAr
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAodHlwZSwgInJhbWRpc2siKSA9PSAwKSB7
Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5pbml0cmQgPSBkYXRhOwo+ICsgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+aW5pdHJkX3NpemUgPSBkYXRhX2xlbjsKPiArICAg
ICAgICAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgICAgICAgICBwcl9pbmZvKCJ1
bmtub3duIGltYWdlIHR5cGUgJXMsIGlnbm9yaW5nXG4iLCB0eXBlKTsKPiArICAgICAgICAgICAg
ICAgfQo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldHVybiBsZXZlbDsKPiArfQo+ICsKPiAr
c3RhdGljIGludCBmaXRfb3Blbl9jb25maWd1cmF0aW9uKHN0cnVjdCBmaXRfaGFuZGxlICpoYW5k
bGUsIGludCBudW0pCj4gK3sKPiArICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uZl9ub2Rl
ID0gTlVMTCwgKnNpZ19ub2RlOwo+ICsgICAgICAgY2hhciB1bml0X25hbWVbMTBdOwo+ICsgICAg
ICAgY29uc3QgY2hhciAqdW5pdCwgKmRlc2M7Cj4gKyAgICAgICBpbnQgcmV0LCBsZXZlbDsKPiAr
Cj4gKyAgICAgICBjb25mX25vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShoYW5kbGUtPnJvb3Qs
ICJjb25maWd1cmF0aW9ucyIpOwo+ICsgICAgICAgaWYgKCFjb25mX25vZGUpCj4gKyAgICAgICAg
ICAgICAgIHJldHVybiAtRU5PRU5UOwo+ICsKPiArICAgICAgIGlmIChudW0pIHsKPiArICAgICAg
ICAgICAgICAgc25wcmludGYodW5pdF9uYW1lLCBzaXplb2YodW5pdF9uYW1lKSwgImNvbmZAJWQi
LCBudW0pOwoKVGhpcyBpcyBub3Qgd29ya2luZyBmb3IgbXkgKi5pdHMgZmlsZToKaHR0cHM6Ly9n
aXRodWIuY29tL3Zpc2lvbnN5c3RlbXNnbWJoL29ucmlzY19icl9ic3AvYmxvYi9tYXN0ZXIvYm9h
cmQvdnNjb20vYmFsdG9zL2tlcm5lbC1maXQuaXRzClUtQm9vdCBpcyB3b3JraW5nIHdpdGggYm9v
dG0gJHtsb2FkYWRkcn0jY29uZiR7Ym9hcmRfbmFtZX0KCkZvciBCYXJlYm94IEkndmUgY2hhbmdl
ZCB0aGlzIGxpbmUgdG8KCnNucHJpbnRmKHVuaXRfbmFtZSwgc2l6ZW9mKHVuaXRfbmFtZSksICJj
b25mJWRAMSIsIG51bSkKClRoaXMgaXMgaG93IEkgc3RhcnQgTGludXg6IGJvb3RtIC9ib290L2tl
cm5lbC1maXQuaXRiQCRnbG9iYWwuYm9hcmQuaWQKCldoYXQgaXMgdGhlIHN0YW5kYXJkIGZvciBw
cm92aWRpbmcgRklUIGNvbmZpZ3VyYXRpb24/Cgo+ICsgICAgICAgICAgICAgICB1bml0ID0gdW5p
dF9uYW1lOwo+ICsgICAgICAgfSBlbHNlIGlmIChvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhjb25m
X25vZGUsICJkZWZhdWx0IiwgJnVuaXQpKSB7Cj4gKyAgICAgICAgICAgICAgIHVuaXQgPSAiY29u
ZkAxIjsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBjb25mX25vZGUgPSBvZl9nZXRfY2hpbGRf
YnlfbmFtZShjb25mX25vZGUsIHVuaXQpOwo+ICsgICAgICAgaWYgKCFjb25mX25vZGUpIHsKPiAr
ICAgICAgICAgICAgICAgcHJfZXJyKCJGSVQgY29uZmlndXJhdGlvbiAnJXMnIG5vdCBmb3VuZFxu
IiwgdW5pdCk7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOwo+ICsgICAgICAgfQo+
ICsKPiArICAgICAgIGlmIChvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhjb25mX25vZGUsICJkZXNj
cmlwdGlvbiIsICZkZXNjKSkgewo+ICsgICAgICAgICAgICAgICBwcl9pbmZvKCJGSVQgY29uZmln
dXJhdGlvbiAnJXMnIChubyBkZXNjcmlwdGlvbilcbiIsIHVuaXQpOwo+ICsgICAgICAgfSBlbHNl
IHsKPiArICAgICAgICAgICAgICAgcHJfaW5mbygiRklUIGNvbmZpZ3VyYXRpb24gJyVzJzogJyVz
J1xuIiwgdW5pdCwgZGVzYyk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgbGV2ZWwgPSBDSEVD
S19MRVZFTF9NQVg7Cj4gKyAgICAgICBmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGNvbmZfbm9kZSwg
c2lnX25vZGUpIHsKPiArICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dmVyYm9zZSkKPiArICAg
ICAgICAgICAgICAgICAgICAgICBvZl9wcmludF9ub2RlcyhzaWdfbm9kZSwgMCk7Cj4gKyAgICAg
ICAgICAgICAgIHJldCA9IGZpdF92ZXJpZnlfc2lnbmF0dXJlKHNpZ19ub2RlLCBoYW5kbGUtPmZp
dCk7Cj4gKyAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAgICAgICAgIGxldmVsID0gbWluKGxldmVsLCByZXQp
Owo+ICsgICAgICAgfQo+ICsgICAgICAgaWYgKGxldmVsID09IENIRUNLX0xFVkVMX01BWCkKPiAr
ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsgICAgICAgaWYgKGxldmVsICE9
IENIRUNLX0xFVkVMX1NJRykKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKwo+
ICsgICAgICAgaWYgKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGNvbmZfbm9kZSwgImtlcm5lbCIs
ICZ1bml0KSA9PSAwKQo+ICsgICAgICAgICAgICAgICBsZXZlbCA9IG1pbihsZXZlbCwgZml0X29w
ZW5faW1hZ2UoaGFuZGxlLCB1bml0KSk7Cj4gKyAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAg
IHJldHVybiAtRU5PRU5UOwo+ICsKPiArICAgICAgIGlmIChvZl9wcm9wZXJ0eV9yZWFkX3N0cmlu
Zyhjb25mX25vZGUsICJmZHQiLCAmdW5pdCkgPT0gMCkKPiArICAgICAgICAgICAgICAgbGV2ZWwg
PSBtaW4obGV2ZWwsIGZpdF9vcGVuX2ltYWdlKGhhbmRsZSwgdW5pdCkpOwo+ICsKPiArICAgICAg
IGlmIChvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhjb25mX25vZGUsICJyYW1kaXNrIiwgJnVuaXQp
ID09IDApCj4gKyAgICAgICAgICAgICAgIGxldmVsID0gbWluKGxldmVsLCBmaXRfb3Blbl9pbWFn
ZShoYW5kbGUsIHVuaXQpKTsKPiArCj4gKyAgICAgICBpZiAobGV2ZWwgIT0gQ0hFQ0tfTEVWRUxf
SEFTSCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsgICAgICAgcmV0
dXJuIDA7Cj4gK30KPiArCj4gK3N0cnVjdCBmaXRfaGFuZGxlICpmaXRfb3Blbihjb25zdCBjaGFy
ICpmaWxlbmFtZSwgaW50IG51bSwgYm9vbCB2ZXJib3NlKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3Qg
Zml0X2hhbmRsZSAqaGFuZGxlID0gTlVMTDsKPiArICAgICAgIGNvbnN0IGNoYXIgKmRlc2M7Cj4g
Kwo+ICsgICAgICAgaGFuZGxlID0geHphbGxvYyhzaXplb2Yoc3RydWN0IGZpdF9oYW5kbGUpKTsK
PiArCj4gKyAgICAgICBoYW5kbGUtPnZlcmJvc2UgPSB2ZXJib3NlOwo+ICsKPiArICAgICAgIGhh
bmRsZS0+Zml0ID0gcmVhZF9maWxlKGZpbGVuYW1lLCAmaGFuZGxlLT5zaXplKTsKPiArICAgICAg
IGlmICghaGFuZGxlLT5maXQpIHsKPiArICAgICAgICAgICAgICAgcHJfZXJyKCJ1bmFibGUgdG8g
cmVhZCAlczogJXNcbiIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwo+ICsgICAgICAgICAg
ICAgICBnb3RvIGVycjsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBoYW5kbGUtPnJvb3QgPSBv
Zl91bmZsYXR0ZW5fZHRiKGhhbmRsZS0+Zml0KTsKPiArICAgICAgIGlmIChJU19FUlIoaGFuZGxl
LT5yb290KSkgewo+ICsgICAgICAgICAgICAgICBnb3RvIGVycjsKPiArICAgICAgIH0KPiArCj4g
KyAgICAgICBpZiAob2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoaGFuZGxlLT5yb290LCAiZGVzY3Jp
cHRpb24iLCAmZGVzYykpIHsKPiArICAgICAgICAgICAgICAgcHJfaW5mbygiRklUICclcycgKG5v
IGRlc2NyaXB0aW9uKVxuIiwgZmlsZW5hbWUpOwo+ICsgICAgICAgfSBlbHNlIHsKPiArICAgICAg
ICAgICAgICAgcHJfaW5mbygiRklUICclcyc6ICclcydcbiIsIGZpbGVuYW1lLCBkZXNjKTsKPiAr
ICAgICAgIH0KPiArCj4gKyAgICAgICBpZiAoZml0X29wZW5fY29uZmlndXJhdGlvbihoYW5kbGUs
IG51bSkpCj4gKyAgICAgICAgICAgICAgIGdvdG8gZXJyOwo+ICsKPiArICAgICAgIHJldHVybiBo
YW5kbGU7Cj4gKyBlcnI6Cj4gKyAgICAgICBpZiAoaGFuZGxlLT5yb290KQo+ICsgICAgICAgICAg
ICAgICBvZl9kZWxldGVfbm9kZShoYW5kbGUtPnJvb3QpOwo+ICsgICAgICAgaWYgKGhhbmRsZS0+
Zml0KQo+ICsgICAgICAgICAgICAgICBmcmVlKGhhbmRsZS0+Zml0KTsKPiArICAgICAgIGZyZWUo
aGFuZGxlKTsKPiArCj4gKyAgICAgICByZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArdm9pZCBmaXRf
Y2xvc2Uoc3RydWN0IGZpdF9oYW5kbGUgKmhhbmRsZSkKPiArewo+ICsgICAgICAgaWYgKGhhbmRs
ZS0+cm9vdCkKPiArICAgICAgICAgICAgICAgb2ZfZGVsZXRlX25vZGUoaGFuZGxlLT5yb290KTsK
PiArICAgICAgIGlmIChoYW5kbGUtPmZpdCkKPiArICAgICAgICAgICAgICAgZnJlZShoYW5kbGUt
PmZpdCk7Cj4gKyAgICAgICBmcmVlKGhhbmRsZSk7Cj4gK30KPiArCj4gKyNpZmRlZiBDT05GSUdf
U0FOREJPWAo+ICtzdGF0aWMgaW50IGRvX2Jvb3RtX3NhbmRib3hfZml0KHN0cnVjdCBpbWFnZV9k
YXRhICpkYXRhKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgZml0X2hhbmRsZSAqaGFuZGxlOwo+ICsg
ICAgICAgaGFuZGxlID0gZml0X29wZW4oZGF0YS0+b3NfZmlsZSwgZGF0YS0+b3NfbnVtLCBkYXRh
LT52ZXJib3NlKTsKPiArICAgICAgIGlmIChoYW5kbGUpCj4gKyAgICAgICAgICAgICAgIGZpdF9j
bG9zZShoYW5kbGUpOwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1
Y3QgaW1hZ2VfaGFuZGxlciBzYW5kYm94X2ZpdF9oYW5kbGVyID0gewo+ICsgICAgICAgLm5hbWUg
PSAiRklUIGltYWdlIiwKPiArICAgICAgIC5ib290bSA9IGRvX2Jvb3RtX3NhbmRib3hfZml0LAo+
ICsgICAgICAgLmZpbGV0eXBlID0gZmlsZXR5cGVfb2Z0cmVlLAo+ICt9Owo+ICsKPiArc3RhdGlj
IGludCBzYW5kYm94X2ZpdF9yZWdpc3Rlcih2b2lkKQo+ICt7Cj4gKyAgICAgICByZXR1cm4gcmVn
aXN0ZXJfaW1hZ2VfaGFuZGxlcigmc2FuZGJveF9maXRfaGFuZGxlcik7Cj4gK30KPiArbGF0ZV9p
bml0Y2FsbChzYW5kYm94X2ZpdF9yZWdpc3Rlcik7Cj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9p
bmNsdWRlL2ltYWdlLWZpdC5oIGIvaW5jbHVkZS9pbWFnZS1maXQuaAo+IG5ldyBmaWxlIG1vZGUg
MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5iY2JjODU5ZWFkMzcKPiAtLS0gL2Rldi9udWxs
Cj4gKysrIGIvaW5jbHVkZS9pbWFnZS1maXQuaAo+IEBAIC0wLDAgKzEsNDIgQEAKPiArLyoKPiAr
ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiArICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPiArICogKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKPiArICogYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPiArICoK
PiArICogQ29weXJpZ2h0IChDKSBKYW4gTMO8YmJlLCAyMDE0Cj4gKyAqLwo+ICsKPiArI2lmbmRl
ZiBfX0lNQUdFX0ZJVF9IX18KPiArI2RlZmluZSBfX0lNQUdFX0ZJVF9IX18KPiArCj4gKyNpbmNs
dWRlIDxsaW51eC90eXBlcy5oPgo+ICsKPiArc3RydWN0IGZpdF9oYW5kbGUgewo+ICsgICAgICAg
dm9pZCAqZml0Owo+ICsgICAgICAgc2l6ZV90IHNpemU7Cj4gKwo+ICsgICAgICAgYm9vbCB2ZXJi
b3NlOwo+ICsKPiArICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdDsKPiArCj4gKyAgICAg
ICBjb25zdCB2b2lkICprZXJuZWw7Cj4gKyAgICAgICB1bnNpZ25lZCBsb25nIGtlcm5lbF9zaXpl
Owo+ICsgICAgICAgY29uc3Qgdm9pZCAqb2Z0cmVlOwo+ICsgICAgICAgdW5zaWduZWQgbG9uZyBv
ZnRyZWVfc2l6ZTsKPiArICAgICAgIGNvbnN0IHZvaWQgKmluaXRyZDsKPiArICAgICAgIHVuc2ln
bmVkIGxvbmcgaW5pdHJkX3NpemU7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZml0X2hhbmRsZSAqZml0
X29wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBudW0sIGJvb2wgdmVyYm9zZSk7Cj4gK3Zv
aWQgZml0X2Nsb3NlKHN0cnVjdCBmaXRfaGFuZGxlICpoYW5kbGUpOwo+ICsKPiArI2VuZGlmIC8q
IF9fSU1BR0VfRklUX0hfXyAqLwo+IC0tCj4gMi42LjIKPgoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KYmFyZWJveCBtYWlsaW5nIGxpc3QKYmFyZWJveEBs
aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz
dGluZm8vYmFyZWJveAo=