From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Price Subject: Re: [PATCH 3/5] drm/panfrost: Add a no execute flag for BO allocations Date: Mon, 22 Jul 2019 13:19:58 +0100 Message-ID: <07a47ad9-cda9-b8dc-8bab-e9f065ae7229@arm.com> References: <20190717183352.22519-1-robh@kernel.org> <20190717183352.22519-3-robh@kernel.org> <896cada5-580a-7637-2884-f0c616314ea4@arm.com> <4b7fc0b4-aa5b-06ba-ad4a-5b959e265e67@arm.com> <0bf616f7-023a-e1e3-dbf6-9a98155f6bf9@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by gabe.freedesktop.org (Postfix) with ESMTP id 140B189B0B for ; Mon, 22 Jul 2019 12:20:01 +0000 (UTC) In-Reply-To: <0bf616f7-023a-e1e3-dbf6-9a98155f6bf9@arm.com> Content-Language: en-GB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Robin Murphy , Rob Herring Cc: dri-devel , Boris Brezillon , Alyssa Rosenzweig , Tomeu Vizoso List-Id: dri-devel@lists.freedesktop.org T24gMjIvMDcvMjAxOSAxMzowOSwgUm9iaW4gTXVycGh5IHdyb3RlOgo+IE9uIDIyLzA3LzIwMTkg MTE6MDcsIFN0ZXZlbiBQcmljZSB3cm90ZToKPj4gT24gMjIvMDcvMjAxOSAxMDo1MCwgUm9iaW4g TXVycGh5IHdyb3RlOgo+Pj4gT24gMTkvMDcvMjAxOSAyMzowNywgUm9iIEhlcnJpbmcgd3JvdGU6 Cj4+Pj4gT24gRnJpLCBKdWwgMTksIDIwMTkgYXQgNDozOSBBTSBTdGV2ZW4gUHJpY2UgPHN0ZXZl bi5wcmljZUBhcm0uY29tPgo+Pj4+IHdyb3RlOgo+Pj4+Pgo+Pj4+PiBPbiAxOC8wNy8yMDE5IDE4 OjAzLCBSb2IgSGVycmluZyB3cm90ZToKPj4+Pj4+IE9uIFRodSwgSnVsIDE4LCAyMDE5IGF0IDk6 MDMgQU0gU3RldmVuIFByaWNlIDxzdGV2ZW4ucHJpY2VAYXJtLmNvbT4KPj4+Pj4+IHdyb3RlOgo+ Pj4+Pj4+Cj4+Pj4+Pj4gT24gMTcvMDcvMjAxOSAxOTozMywgUm9iIEhlcnJpbmcgd3JvdGU6Cj4+ Pj4+Pj4+IEV4ZWN1dGFibGUgYnVmZmVycyBoYXZlIGFuIGFsaWdubWVudCByZXN0cmljdGlvbiB0 aGF0IHRoZXkgY2FuJ3QKPj4+Pj4+Pj4gY3Jvc3MKPj4+Pj4+Pj4gMTZNQiBib3VuZGFyeSBhcyB0 aGUgR1BVIHByb2dyYW0gY291bnRlciBpcyAyNC1iaXRzLiBUaGlzCj4+Pj4+Pj4+IHJlc3RyaWN0 aW9uIGlzCj4+Pj4+Pj4+IGN1cnJlbnRseSBub3QgaGFuZGxlZCBhbmQgd2UganVzdCBnZXQgbHVj a3kuIEFzIGN1cnJlbnQgdXNlcnNwYWNlCj4+Pj4+Pj4KPj4+Pj4+PiBBY3R1YWxseSBpdCBkZXBl bmRzIHdoaWNoIEdQVSB5b3UgYXJlIHVzaW5nIC0gc29tZSBkbyBoYXZlIGEgYmlnZ2VyCj4+Pj4+ Pj4gcHJvZ3JhbSBjb3VudGVyIC0gc28gaXQgbWlnaHQgYmUgdGhlIGNob2ljZSBvZiBHUFUgdG8g dGVzdCBvbiByYXRoZXIKPj4+Pj4+PiB0aGFuIGp1c3QgbHVjay4gQnV0IGtiYXNlIGFsd2F5cyBh c3N1bWVzIHRoZSB3b3JzdCBjYXNlICgyNCBiaXQpCj4+Pj4+Pj4gYXMgaW4KPj4+Pj4+PiBwcmFj dGlzZSB0aGF0J3MgZW5vdWdoLgo+Pj4+Pj4+Cj4+Pj4+Pj4+IGFzc3VtZXMgYWxsIEJPcyBhcmUg ZXhlY3V0YWJsZSwgdGhhdCBoYXMgdG8gcmVtYWluIHRoZSBkZWZhdWx0LiBTbwo+Pj4+Pj4+PiBh ZGQgYQo+Pj4+Pj4+PiBuZXcgUEFORlJPU1RfQk9fTk9FWEVDIGZsYWcgdG8gYWxsb3cgdXNlcnNw YWNlIHRvIGluZGljYXRlIHdoaWNoCj4+Pj4+Pj4+IEJPcyBhcmUKPj4+Pj4+Pj4gbm90IGV4ZWN1 dGFibGUuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IFRoZXJlIGlzIGFsc28gYSByZXN0cmljdGlvbiB0aGF0 IGV4ZWN1dGFibGUgYnVmZmVycyBjYW5ub3Qgc3RhcnQKPj4+Pj4+Pj4gb3IgZW5kCj4+Pj4+Pj4+ IG9uIGEgNEdCIGJvdW5kYXJ5LiBUaGlzIGlzIG1vc3RseSBhdm9pZGVkIGFzIHRoZXJlIGlzIG9u bHkgNEdCIG9mCj4+Pj4+Pj4+IHNwYWNlCj4+Pj4+Pj4+IGN1cnJlbnRseSBhbmQgdGhlIGJlZ2lu bmluZyBpcyBhbHJlYWR5IGJsb2NrZWQgb3V0IGZvciBOVUxMIHB0cgo+Pj4+Pj4+PiBkZXRlY3Rp b24uIEFkZCBzdXBwb3J0IHRvIGhhbmRsZSB0aGlzIHJlc3RyaWN0aW9uIGZ1bGx5Cj4+Pj4+Pj4+ IHJlZ2FyZGxlc3Mgb2YKPj4+Pj4+Pj4gdGhlIGN1cnJlbnQgY29uc3RyYWludHMuCj4+Pj4+Pj4+ Cj4+Pj4+Pj4+IEZvciBleGlzdGluZyB1c2Vyc3BhY2UsIGFsbCBjcmVhdGVkIEJPcyByZW1haW4g ZXhlY3V0YWJsZSwgYnV0IHRoZQo+Pj4+Pj4+PiBHUFUKPj4+Pj4+Pj4gVkEgYWxpZ25tZW50IHdp bGwgYmUgaW5jcmVhc2VkIHRvIHRoZSBzaXplIG9mIHRoZSBCTy4gVGhpcwo+Pj4+Pj4+PiBzaG91 bGRuJ3QKPj4+Pj4+Pj4gbWF0dGVyIGFzIHRoZXJlIGlzIHBsZW50eSBvZiBHUFUgVkEgc3BhY2Uu Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IENjOiBUb21ldSBWaXpvc28gPHRvbWV1LnZpem9zb0Bjb2xsYWJv cmEuY29tPgo+Pj4+Pj4+PiBDYzogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AY29s bGFib3JhLmNvbT4KPj4+Pj4+Pj4gQ2M6IFJvYmluIE11cnBoeSA8cm9iaW4ubXVycGh5QGFybS5j b20+Cj4+Pj4+Pj4+IENjOiBTdGV2ZW4gUHJpY2UgPHN0ZXZlbi5wcmljZUBhcm0uY29tPgo+Pj4+ Pj4+PiBDYzogQWx5c3NhIFJvc2VuendlaWcgPGFseXNzYUByb3Nlbnp3ZWlnLmlvPgo+Pj4+Pj4+ PiBTaWduZWQtb2ZmLWJ5OiBSb2IgSGVycmluZyA8cm9iaEBrZXJuZWwub3JnPgo+Pj4+Pj4+PiAt LS0KPj4+Pj4+Pj4gwqDCoCBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMg fCAyMAo+Pj4+Pj4+PiArKysrKysrKysrKysrKysrKysrLQo+Pj4+Pj4+PiDCoMKgIGRyaXZlcnMv Z3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9nZW0uYyB8IDE4ICsrKysrKysrKysrKysrKystLQo+ Pj4+Pj4+PiDCoMKgIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9nZW0uaCB8wqAg MyArKy0KPj4+Pj4+Pj4gwqDCoCBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11 LmMgfMKgIDMgKysrCj4+Pj4+Pj4+IMKgwqAgaW5jbHVkZS91YXBpL2RybS9wYW5mcm9zdF9kcm0u aMKgwqDCoMKgwqDCoMKgwqAgfMKgIDIgKysKPj4+Pj4+Pj4gwqDCoCA1IGZpbGVzIGNoYW5nZWQs IDQyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMKPj4+Pj4+Pj4g Yi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMKPj4+Pj4+Pj4gaW5kZXgg ZDM1NGI5Mjk2NGQ1Li5iOTFlOTkxYmM2YTMgMTAwNjQ0Cj4+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYwo+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMKPj4+Pj4+Pj4gQEAgLTQ5LDcgKzQ5LDggQEAg c3RhdGljIGludCBwYW5mcm9zdF9pb2N0bF9jcmVhdGVfYm8oc3RydWN0Cj4+Pj4+Pj4+IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqAgc3RydWN0IHBh bmZyb3N0X2dlbV9vYmplY3QgKmJvOwo+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJt X3BhbmZyb3N0X2NyZWF0ZV9ibyAqYXJncyA9IGRhdGE7Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IC3CoMKg wqDCoCBpZiAoIWFyZ3MtPnNpemUgfHwgYXJncy0+ZmxhZ3MgfHwgYXJncy0+cGFkKQo+Pj4+Pj4+ PiArwqDCoMKgwqAgaWYgKCFhcmdzLT5zaXplIHx8IGFyZ3MtPnBhZCB8fAo+Pj4+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoCAoYXJncy0+ZmxhZ3MgJiB+UEFORlJPU1RfQk9fTk9FWEVDKSkKPj4+Pj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4+Pj4+ Pgo+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoCBibyA9IHBhbmZyb3N0X2dlbV9jcmVhdGVfd2l0aF9o YW5kbGUoZmlsZSwgZGV2LCBhcmdzLT5zaXplLAo+Pj4+Pj4+PiBhcmdzLT5mbGFncywKPj4+Pj4+ Pj4gQEAgLTM2Nyw2ICszNjgsMjIgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyCj4+Pj4+Pj4+ IHBhbmZyb3N0X2RybV9kcml2ZXIgPSB7Cj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgIC5nZW1fcHJp bWVfbW1hcMKgwqDCoMKgwqDCoMKgwqAgPSBkcm1fZ2VtX3ByaW1lX21tYXAsCj4+Pj4+Pj4+IMKg wqAgfTsKPj4+Pj4+Pj4KPj4+Pj4+Pj4gKyNkZWZpbmUgUEZOXzRHX01BU0vCoMKgwqAgKChTWl80 RyAtIDEpID4+IFBBR0VfU0hJRlQpCj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gK3N0YXRpYyB2b2lkIHBh bmZyb3N0X2RybV9tbV9jb2xvcl9hZGp1c3QoY29uc3Qgc3RydWN0IGRybV9tbV9ub2RlCj4+Pj4+ Pj4+ICpub2RlLAo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBjb2xv ciwKPj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCAqc3RhcnQsIHU2NCAqZW5kKQo+Pj4+ Pj4+PiArewo+Pj4+Pj4+PiArwqDCoMKgwqAgLyogRXhlY3V0YWJsZSBidWZmZXJzIGNhbid0IHN0 YXJ0IG9yIGVuZCBvbiBhIDRHQiBib3VuZGFyeSAqLwo+Pj4+Pj4+PiArwqDCoMKgwqAgaWYgKCFj b2xvcikgewo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgoKnN0YXJ0ICYg UEZOXzRHX01BU0spID09IDApCj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICgqc3RhcnQpKys7Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAoKCplbmQgJiBQRk5fNEdfTUFTSykgPT0gMCkKPj4+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKCplbmQpLS07Cj4+Pj4+Pj4+ ICvCoMKgwqDCoCB9Cj4+Pj4+Pj4+ICt9Cj4+Pj4+Pj4KPj4+Pj4+PiBVbmxlc3MgSSdtIG1pc3Rh a2VuIHRoaXMgd29uJ3QgYWN0dWFsbHkgcHJvdmlkZSB0aGUgZ3VhcmFudGVlIGlmIHRoZQo+Pj4+ Pj4+IG1lbW9yeSByZWdpb24gaXMgPjRHQiAod2hpY2ggYWRtaXR0ZWRseSBpdCBpc24ndCBhdCB0 aGUgbW9tZW50KS4gRm9yCj4+Pj4+Pj4gZXhhbXBsZSBhIDhHQiByZWdpb24gd291bGQgaGF2ZSB0 aGUgYmVnaW5uaW5nL2VuZCB0cmltbWVkIG9mZiwgYnV0Cj4+Pj4+Pj4gdGhlcmUncyBhbm90aGVy IDRHQiBpbiB0aGUgbWlkZGxlIHdoaWNoIGNvdWxkIGJlIGFsbG9jYXRlZCBuZXh0IHRvLgo+Pj4+ Pj4KPj4+Pj4+IEh1bW0sIG90aGVyIHRoYW4gbm90IGFsbG93aW5nIHNpemVzIGdyZWF0ZXIgdGhh biA0Ry0oMipQQUdFX1NJWkUpLAo+Pj4+Pj4gSSdtCj4+Pj4+PiBub3Qgc3VyZSBob3cgd2Ugc29s dmUgdGhhdC4gSSBndWVzcyBhdm9pZGluZyBzaXplcyBvZiAobio0RyAtCj4+Pj4+PiBQQUdFX1NJ WkUpIHdvdWxkIGF2b2lkIHRoZSBwcm9ibGVtLiBTZWVtcyBsaWtlIGFsbW9zdCA0R0IgZXhlY3V0 YWJsZQo+Pj4+Pj4gYnVmZmVyIHNob3VsZCBiZSBlbm91Z2ggZm9yIGFueW9uZShUTSkuCj4+Pj4+ Cj4+Pj4+IEkgd2FzIHRoaW5raW5nIG9mIHNvbWV0aGluZyBsaWtlOgo+Pj4+Pgo+Pj4+PiBpZiAo KCplbmQgJiB+UEZOXzRHX01BU0spICE9ICgqc3RhcnQgJiB+UEZOXzRHX01BU0spKSB7Cj4+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoKCpzdGFydCAmIFBGTl80R19NQVNLKSArCj4+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChTWl8xNk0gPj4gUEFHRV9TSElGVCkgPCBQRk5fNEdf TUFTSykKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqZW5kID0gKCpz dGFydCAmIH5QRk5fNEdfTUFTSykgKwo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoU1pfNEdCIC0gU1pfMTZNKSA+PiBQQUdFX1NISUZUOwo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICpzdGFydCA9ICgqZW5kICYgflBGTl80R19NQVNLKSArIChTWl8xNk0pID4+ Cj4+Pj4+IFBBR0VfU0hJRlQ7Cj4+Pj4+IH0KPj4+Pj4KPj4+Pj4gU28gc3BsaXQgdGhlIHJlZ2lv biBkZXBlbmRpbmcgb24gd2hlcmUgd2UgY2FuIGZpbmQgYSBmcmVlIDE2TUIgcmVnaW9uCj4+Pj4+ IHdoaWNoIGRvZXNuJ3QgY3Jvc3MgNEdCLgo+Pj4+Cj4+Pj4gSGVyZSdzIHdoYXQgSSBlbmRlZCB1 cCB3aXRoLiBJdCdzIHNsaWdodGx5IGRpZmZlcmVudCBpbiB0aGF0IHRoZSBzdGFydAo+Pj4+IGFu ZCBlbmQgZG9uJ3QgZ2V0IDE2TUIgYWxpZ25lZC4gVGhlIGNvZGUgYWxyZWFkeSB0YWtlcyBjYXJl IG9mIHRoZQo+Pj4+IGFsaWdubWVudCB3aGljaCBhbHNvIGlzIG5vdCBuZWNlc3NhcmlseSAxNk1C LCBidXQgJ2FsaWduID0gc2l6ZScgYXMKPj4+PiB0aGF0J3Mgc3VmZmljaWVudCB0byBub3QgY3Jv c3MgYSAxNk1CIGJvdW5kYXJ5Lgo+Pj4+Cj4+Pj4gI2RlZmluZSBQRk5fNEfCoMKgwqDCoMKgwqDC oMKgwqAgKFNaXzRHID4+IFBBR0VfU0hJRlQpCj4+Pj4gI2RlZmluZSBQRk5fNEdfTUFTS8KgwqDC oMKgIChQRk5fNEcgLSAxKQo+Pj4+ICNkZWZpbmUgUEZOXzE2TcKgwqDCoMKgwqDCoMKgwqAgKFNa XzE2TSA+PiBQQUdFX1NISUZUKQo+Pj4+Cj4+Pj4gc3RhdGljIHZvaWQgcGFuZnJvc3RfZHJtX21t X2NvbG9yX2FkanVzdChjb25zdCBzdHJ1Y3QgZHJtX21tX25vZGUKPj4+PiAqbm9kZSwKPj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBjb2xvciwKPj4+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0ICpzdGFydCwgdTY0ICplbmQpCj4+Pj4gewo+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBFeGVjdXRhYmxlIGJ1ZmZlcnMgY2FuJ3Qgc3RhcnQgb3Ig ZW5kIG9uIGEgNEdCIGJvdW5kYXJ5ICovCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghKGNv bG9yICYgUEFORlJPU1RfQk9fTk9FWEVDKSkgewo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKCgqc3RhcnQgJiBQRk5fNEdfTUFTSykgPT0gMCkKPj4+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKnN0YXJ0KSsrOwo+ Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoKCplbmQgJiBQ Rk5fNEdfTUFTSykgPT0gMCkKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAoKmVuZCktLTsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLyogRW5zdXJlIHN0YXJ0IGFuZCBlbmQgYXJlIGluIHRoZSBzYW1lIDRH QiByYW5nZSAqLwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCgq ZW5kICYgflBGTl80R19NQVNLKSAhPSAoKnN0YXJ0ICYKPj4+PiB+UEZOXzRHX01BU0spKSB7Cj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KCgqc3RhcnQgJiBQRk5fNEdfTUFTSykgKyBQRk5fMTZNIDwKPj4+PiBQRk5fNEdfTUFTSykKPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKmVuZCA9ICgqc3RhcnQgJiB+UEZOXzRHX01BU0spICsKPj4+PiBQRk5fNEcg LSAxOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGVsc2UKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnN0YXJ0ID0gKCplbmQgJiB+UEZOXzRHX01BU0spICsg MTsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gfQo+Pj4KPj4+IElmIHlvdSdyZSBoYXBweSB3aXRoIHRo ZSBhZGRpdGlvbmFsIHJlc3RyaWN0aW9uIHRoYXQgYSBidWZmZXIgY2FuJ3QKPj4+IGNyb3NzIGEg NEdCIGJvdW5kYXJ5ICh3aGljaCBkb2VzIHNlZW0gdG8gYmUgcmVxdWlyZWQgZm9yIGNlcnRhaW4g a2luZHMKPj4+IG9mIGJ1ZmZlcnMgYW55d2F5KSwgdGhlbiBJIGRvbid0IHRoaW5rIGl0IG5lZWRz IHRvIGJlIGFueXdoZXJlIG5lYXIgdGhhdAo+Pj4gY29tcGxleDoKPj4+Cj4+PiDCoMKgwqDCoMKg aWYgKCEoKnN0YXJ0ICYgUEZOXzRHX01BU0spKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoCAqc3RhcnQr Kwo+Pj4gwqDCoMKgwqDCoCplbmQgPSBtaW4oKmVuZCwgQUxJR04oKnN0YXJ0LCBQRk5fNEcpIC0g MSk7Cj4+Cj4+IFdoYXQgaGFwcGVucyBpZiAqc3RhcnQgaXMgdmVyeSBuZWFyIHRoZSBlbmQgb2Yg YSA0R0IgYm91bmRhcnk/IEluIHRoYXQKPj4gY2FzZSAqZW5kIC0gKnN0YXJ0IG1pZ2h0IG5vdCBi ZSBhcyBiaWcgYXMgMTZNQiBhbmQgd2UgY291bGQgZW5kIHVwCj4+IGZhaWxpbmcgdGhlIGFsbG9j YXRpb24gSUlVQy4KPiAKPiBBaGVtLi4uIHdlbGwsIHRoZSB0aGluZyBhYm91dCBjb21wbGljYXRl ZC1hbmQtaGFyZC10by1yZWFkIGNvZGUgaXMgdGhhdAo+IGl0IHR1cm5zIG91dCB0byBiZSBjb21w bGljYXRlZCBhbmQgaGFyZCB0byByZWFkIGNvcnJlY3RseSA6KQo+IAo+IEZXSVcsIGhhdmluZyB0 YWtlbiBhIGNsb3NlciBsb29rLCBteSBpbnRlcnByZXRhdGlvbiB3b3VsZCBiZSBzb21ldGhpbmcK PiBsaWtlIChldmVuIG1vcmUgdW50ZXN0ZWQgdGhhbiBiZWZvcmUpOgo+IAo+IMKgwqDCoMKgdTY0 IHN0YXJ0X3NlZyA9IEFMSUdOKCpzdGFydCwgUEZOXzRHKTsKPiDCoMKgwqDCoHU2NCBlbmRfc2Vn ID0gQUxJR05fRE9XTigqZW5kLCBQRk5fNEcpOwo+IAo+IMKgwqDCoMKgaWYgKHN0YXJ0X3NlZyAt IHN0YXJ0IDwgZW5kIC0gZW5kX3NlZykgewo+IMKgwqDCoMKgwqDCoMKgICpzdGFydCA9IGVuZF9z ZWcgKyAxOwo+IMKgwqDCoMKgwqDCoMKgICplbmQgPSBtaW4oKmVuZCwgZW5kX3NlZyArIFBGTl80 RyAtIDEpOwo+IMKgwqDCoMKgfSBlbHNlIHsKPiDCoMKgwqDCoMKgwqDCoCAqZW5kID0gc3RhcnRf c2VnIC0gMTsKPiDCoMKgwqDCoMKgwqDCoCAqc3RhcnQgPSBtYXgoKnN0YXJ0LCBzdGFydF9zZWcg LSBQRk5fNEcgKyAxKTsKPiDCoMKgwqDCoH0KPiAKPiBidXQgYXQgdGhpcyBwb2ludCBJJ20gc3Vy ZSB3ZSdyZSB3ZWxsIGludG8gcGVyc29uYWwgcHJlZmVyZW5jZSBhbmQKPiAic2hvcnRlciBkb2Vz IG5vdCBuZWNlc3NhcmlseSBpbXBseSBjbGVhcmVyIiB0ZXJyaXRvcnkuIE1vcmUKPiBpbXBvcnRh bnRseSwgdGhvdWdoLCBpdCBub3cgb2NjdXJzIHRvIG1lIHRoYXQgdGhlICJwaWNrIHRoZSBiaWdn ZXN0IGVuZCIKPiBhcHByb2FjaCBzZWVtcyBpbmhlcmVudGx5IHN1Ym9wdGltYWwgZm9yIGNhc2Vz IHdoZXJlIHRoZSBbc3RhcnQsZW5kXQo+IGludGVydmFsIGNyb3NzZXMgKm1vcmUqIHRoYW4gb25l IGJvdW5kYXJ5LiBGb3IsIHNheSwgc3RhcnQgPSBQRk5fNEcgLSAxLAo+IGVuZCA9IDIgKiBQRk5f NEcgKyAxLCBlaXRoZXIgd2F5IHdlJ2QgZ2V0IGNhdWdodCB1cCBvbiB0aGUgc2luZ2xlIHBhZ2UK PiBhdCBvbmUgZW5kIGFuZCBpZ25vcmUgdGhlIGZ1bGwgNEdCIGluIHRoZSBtaWRkbGUgOi8KCklu ZGVlZCwgdGhhdCBjYXNlIHdhcyBqdXN0IG9jY3VycmluZyB0byBtZSB0b28hIEhvdyBhYm91dDoK Cgl1NjQgbmV4dF9zZWcgPSBBTElHTigqc3RhcnQsIFBGTl80Ryk7CgoJaWYgKG5leHRfc2VnIC0g KnN0YXJ0IDw9IFBGTl8xNk0pCgkJKnN0YXJ0ID0gbmV4dF9zZWcgKyAxOwoKCSplbmQgPSBtaW4o KmVuZCwgQUxJR04oKnN0YXJ0LCBQRk5fNEcpIC0gMSk7CgpTbyBhbHdheXMgYWxsb2NhdGUgYXQg dGhlIGJlZ2lubmluZywgYnV0IHNraXAgcGFzdCB0aGUgbmV4dCA0R0IgYm91bmRhcnkKaWYgdGhl cmUncyBsZXNzIHRoYW4gMTZNQiBsZWZ0IChvciBlcXVhbCB0byBhdm9pZCB0aGUgNEdCIGJvdW5k YXJ5KS4KClN0ZXZlCgo+Pj4+Pgo+Pj4+PiBCdXQgbGlrZSB5b3Ugc2F5OiA0R0Igc2hvdWxkIGJl IGVub3VnaCBmb3IgYW55b25lIDspCj4+Pj4+Cj4+Pj4+Pj4gQWxzbyBhIG1pbm9yIGlzc3VlLCBi dXQgd2UgbWlnaHQgd2FudCB0byBjb25zaWRlciBoYXZpbmcgc29tZQo+Pj4+Pj4+IGNvbnN0YW50 cwo+Pj4+Pj4+IGZvciAnY29sb3InIC0gaXQncyBub3Qgb2J2aW91cyBmcm9tIHRoaXMgY29kZSB0 aGF0IGNvbG9yPT1ub19leGVjLgo+Pj4+Pj4KPj4+Pj4+IFllYWgsIEkgd2FzIGp1c3QgZ29pbmcg d29ycnkgYWJvdXQgdGhhdCB3aGVuIHdlIGhhZCBhIHNlY29uZCBiaXQgdG8KPj4+Pj4+IHBhc3Mu Cj4+Pj4+Cj4+Pj4+IE9uZSBvdGhlciAnbWlub3InIGlzc3VlIEkgbm90aWNlZCBhcyBJIHdhcyB3 cml0aW5nIHRoZSBhYm92ZS4KPj4+Pj4gUEFHRV9TSVpFCj4+Pj4+IGlzIG9mIGNvdXJzZSB0aGUg Q1BVIHBhZ2Ugc2l6ZSAtIHdlIGNvdWxkIGhhdmUgdGhlIHNpdHVhdGlvbiBvZiBDUFUKPj4+Pj4g YW5kCj4+Pj4+IEdQVSBwYWdlIHNpemUgYmVpbmcgZGlmZmVyZW50IChlLmcuIENPTkZJR19BUk02 NF82NEtfUEFHRVMpLiBJJ20gbm90Cj4+Pj4+IHN1cmUgd2hldGhlciB3ZSB3YW50IHRvIHN1cHBv cnQgdGhpcyBvciBub3QgKGtiYXNlIGRvZXNuJ3QpLiBBbHNvIGluCj4+Pj4+IHRoZW9yeSBzb21l IEdQVXMgZG8gc3VwcG9ydCA2NEsgKEFTX1RSQU5TQ0ZHX0FEUk1PREVfQUFSQ0g2NF82NEspIC0K Pj4+Pj4gYnV0Cj4+Pj4+IGtiYXNlIGhhcyBuZXZlciB1c2VkIHRoaXMgc28gSSBkb24ndCBrbm93 IGlmIGl0IHdvcmtzLi4uIDspCj4+Pj4KPj4+PiBTaGhoISBJIGhhdmUgdGhvdWdodCBhYm91dCB0 aGF0LCBidXQgd2FzIGlnbm9yaW5nIGZvciBub3cuCj4+Pgo+Pj4gSW4gZ2VuZXJhbCwgSSBkb24n dCB0aGluayB0aGF0IHNob3VsZCBiZSB0b28gZ3JlYXQgYSBjb25jZXJuIC0gd2UKPj4+IGFscmVh ZHkgaGFuZGxlIGl0IGZvciBJT01NVXMsIHByb3ZpZGVkIHRoZSBtaW5pbXVtIElPTU1VIHBhZ2Ug c2l6ZSBpcyBubwo+Pj4gbGFyZ2VyIHRoYW4gUEFHRV9TSVpFLCB3aGljaCBzaG91bGQgYWx3YXlz IGJlIHRoZSBjYXNlIGhlcmUgdG9vLiBMb29raW5nCj4+PiBhdCBob3cgcGFuZnJvc3RfbW11X21h cCgpIGlzIGltcGxlbWVudGVkLCBhbmQgZ2l2ZW4gdGhhdCB3ZSdyZSBhbHJlYWR5Cj4+PiB0cnlp bmcgdG8gaGFuZGxlIHN0dWZmIGF0IDJNQiBncmFudWxhcml0eSB3aGVyZSBwb3NzaWJsZSwgSSBk b24ndCBzZWUKPj4+IGFueSBvYnZpb3VzIHJlYXNvbnMgZm9yIDY0SyBwYWdlcyBub3QgdG8gd29y ayBhbHJlYWR5IChhc3N1bWluZyB0aGVyZQo+Pj4gYXJlbid0IGFueSA0SyBhc3N1bXB0aW9ucyBi YWtlZCBpbnRvIHRoZSB1c2Vyc3BhY2Ugc2lkZSkuIEkgbWlnaHQgaGF2ZQo+Pj4gdG8gZ2l2ZSBp dCBhIHRyeS4uLgo+Pgo+PiBJJ2QgYmUgaW50ZXJlc3RlZCB0byBrbm93IGlmIGl0IHdvcmtzLiBJ IGtub3cgdGhhdCBrYmFzZSBpbmNvcnJlY3RseQo+PiB1c2VzIFBBR0VfU0laRSBpbiBzZXZlcmFs IHBsYWNlcyAoaW4gcGFydGljdWxhciBhc3N1bWluZyBpdCBpcyB0aGUgc2l6ZQo+PiBvZiB0aGUg cGFnZSB0YWJsZXMpLiBBbmQgSSB3YXMgYXdhcmUgSSB3YXMgaW4gZGFuZ2VyIG9mIHNsaXBwaW5n IGludG8KPj4gdGhlIHNhbWUgbWluZHNldCBoZXJlLgo+Pgo+PiBVc2VyIHNwYWNlIHNob3VsZG4n dCBjYXJlIHRvbyBtdWNoIC0gb3RoZXIgdGhhbiB0aGUgc2l6ZSBvZiBidWZmZXJzCj4+IGFsbG9j YXRlZCBiZWluZyByb3VuZGVkIHVwIHRvIHRoZSBDUFUncyBwYWdlIHNpemUuIEF0IGxlYXN0IHRo ZSBQYW5mcm9zdAo+PiB1c2VyL2tlcm5lbCBBQkkgaGFzIHNpemVzIGluIGJ5dGVzIG5vdCBwYWdl cyAodW5saWtlIGtiYXNlKS4KPiAKPiBTb3VuZHMgcHJvbWlzaW5nIC0gbXkgSnVubyBicmFuY2gg aXMgaW4gYSBiaXQgb2YgYSBtZXNzIGF0IHRoZSBtb21lbnQKPiBidXQgb25jZSBJJ3ZlIGdvdCB0 aGF0IGNsZWFuZWQgdXAgSSdsbCBoYXZlIGEgcXVpY2sgcGxheS4KPiAKPiBSb2Jpbi4KPiBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==