From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v4] drm/vgem: Attach sw fences to exported vGEM dma-buf (ioctl) Date: Mon, 18 Jul 2016 08:34:20 +0200 Message-ID: <20160718063420.GR17101@phenom.ffwll.local> References: <1468479859-16767-1-git-send-email-chris@chris-wilson.co.uk> <1468571471-12610-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2F99E6E21D for ; Mon, 18 Jul 2016 06:34:26 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id i5so11039775wmg.2 for ; Sun, 17 Jul 2016 23:34:26 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1468571471-12610-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Chris Wilson Cc: Daniel Vetter , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Zach Reizner , Gustavo Padovan List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBKdWwgMTUsIDIwMTYgYXQgMDk6MzE6MTFBTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IHZHRU0gYnVmZmVycyBhcmUgdXNlZnVsIGZvciBwYXNzaW5nIGRhdGEgYmV0d2VlbiBz b2Z0d2FyZSBjbGllbnRzIGFuZAo+IGhhcmR3YXJlIHJlbmRlcnMuIEJ5IGFsbG93aW5nIHRoZSB1 c2VyIHRvIGNyZWF0ZSBhbmQgYXR0YWNoIGZlbmNlcyB0bwo+IHRoZSBleHBvcnRlZCB2R0VNIGJ1 ZmZlcnMgKG9uIHRoZSBkbWEtYnVmKSwgdGhlIHVzZXIgY2FuIGltcGxlbWVudCBhCj4gZGVmZXJy ZWQgcmVuZGVyZXIgYW5kIHF1ZXVlIGhhcmR3YXJlIG9wZXJhdGlvbnMgbGlrZSBmbGlwcGluZyBh bmQgdGhlbgo+IHNpZ25hbCB0aGUgYnVmZmVyIHJlYWRpbmVzcyAoaS5lLiB0aGlzIGFsbG93cyB0 aGUgdXNlciB0byBzY2hlZHVsZQo+IG9wZXJhdGlvbnMgb3V0LW9mLW9yZGVyLCBidXQgaGF2ZSB0 aGVtIGNvbXBsZXRlIGluLW9yZGVyKS4KPiAKPiBUaGlzIGFsc28gbWFrZXMgaXQgbXVjaCBlYXNp ZXIgdG8gd3JpdGUgdGlnaHRseSBjb250cm9sbGVkIHRlc3RjYXNlcyBmb3IKPiBkbWEtYnVmIGZl bmNpbmcgYW5kIHNpZ25hbGluZyBiZXR3ZWVuIGhhcmR3YXJlIGRyaXZlcnMuCj4gCj4gdjI6IERv bid0IHByZXRlbmQgdGhlIGZlbmNlcyBleGlzdCBpbiBhbiBvcmRlcmVkIHRpbWVsaW5lLCBidXQg YWxsb2NhdGUKPiBhIHNlcGFyYXRlIGZlbmNlLWNvbnRleHQgZm9yIGVhY2ggZmVuY2Ugc28gdGhh dCB0aGUgZmVuY2VzIGFyZQo+IHVub3JkZXJlZC4KPiB2MzogTWFrZSB0aGUgZGVidWcgb3V0cHV0 IG1vcmUgaW50ZXJlc3RpbmcsIGFuZCBzaG93IHRoZSBzaWduYWxlZCBzdGF0dXMuCj4gdjQ6IEF1 dG9tYXRpY2FsbHkgc2lnbmFsIHRoZSBmZW5jZSB0byBwcmV2ZW50IHVzZXJzcGFjZSBmcm9tCj4g aW5kZWZpbml0ZWx5IGhhbmdpbmcgZHJpdmVycy4KPiAKPiBUZXN0Y2FzZTogaWd0L3ZnZW1fYmFz aWMvZG1hYnVmLWZlbmNlCj4gVGVzdGNhc2U6IGlndC92Z2VtX3Nsb3cvbm9oYW5nCj4gU2lnbmVk LW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IFNl YW4gUGF1bCA8c2VhbnBhdWxAY2hyb21pdW0ub3JnPgo+IENjOiBaYWNoIFJlaXpuZXIgPHphY2hy QGdvb2dsZS5jb20+Cj4gQ2M6IEd1c3Rhdm8gUGFkb3ZhbiA8Z3VzdGF2by5wYWRvdmFuQGNvbGxh Ym9yYS5jby51az4KPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4K PiBBY2tlZC1ieTogWmFjaCBSZWl6bmVyIDx6YWNockBnb29nbGUuY29tPgoKQXBwbGllZCB0byBk cm0tbWlzYywgdGhhbmtzLgotRGFuaWVsCgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vdmdlbS9N YWtlZmlsZSAgICAgfCAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuYyAg IHwgIDM0ICsrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmggICB8ICAxNiAr KysKPiAgZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9mZW5jZS5jIHwgMjgzICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGluY2x1ZGUvdWFwaS9kcm0vdmdlbV9kcm0u aCAgICAgICB8ICA2MiArKysrKysrKysKPiAgNSBmaWxlcyBjaGFuZ2VkLCAzOTYgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L3ZnZW0vdmdlbV9mZW5jZS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvZHJt L3ZnZW1fZHJtLmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZnZW0vTWFrZWZp bGUgYi9kcml2ZXJzL2dwdS9kcm0vdmdlbS9NYWtlZmlsZQo+IGluZGV4IDNmNGM3Yjg0MjAyOC4u YmZjZGVhMTMzMGU2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92Z2VtL01ha2VmaWxl Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZnZW0vTWFrZWZpbGUKPiBAQCAtMSw0ICsxLDQgQEAK PiAgY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KPiAtdmdlbS15IDo9IHZnZW1fZHJ2Lm8KPiAr dmdlbS15IDo9IHZnZW1fZHJ2Lm8gdmdlbV9mZW5jZS5vCj4gIAo+ICBvYmotJChDT05GSUdfRFJN X1ZHRU0pCSs9IHZnZW0ubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2Vt X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuYwo+IGluZGV4IDI5YzJhYWIz YzFhNy4uYzE1YmFmYjA2NjY1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3Zn ZW1fZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5jCj4gQEAgLTgz LDYgKzgzLDM0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdmdl bV9nZW1fdm1fb3BzID0gewo+ICAJLmNsb3NlID0gZHJtX2dlbV92bV9jbG9zZSwKPiAgfTsKPiAg Cj4gK3N0YXRpYyBpbnQgdmdlbV9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSkKPiArewo+ICsJc3RydWN0IHZnZW1fZmlsZSAqdmZpbGU7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCXZmaWxlID0ga3phbGxvYyhzaXplb2YoKnZmaWxlKSwgR0ZQX0tFUk5FTCk7 Cj4gKwlpZiAoIXZmaWxlKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWZpbGUtPmRyaXZl cl9wcml2ID0gdmZpbGU7Cj4gKwo+ICsJcmV0ID0gdmdlbV9mZW5jZV9vcGVuKHZmaWxlKTsKPiAr CWlmIChyZXQpIHsKPiArCQlrZnJlZSh2ZmlsZSk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmdlbV9wcmVjbG9zZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gK3sKPiArCXN0cnVj dCB2Z2VtX2ZpbGUgKnZmaWxlID0gZmlsZS0+ZHJpdmVyX3ByaXY7Cj4gKwo+ICsJdmdlbV9mZW5j ZV9jbG9zZSh2ZmlsZSk7Cj4gKwlrZnJlZSh2ZmlsZSk7Cj4gK30KPiArCj4gIC8qIGlvY3RscyAq Lwo+ICAKPiAgc3RhdGljIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqdmdlbV9nZW1fY3JlYXRlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gQEAgLTE2NCw2ICsxOTIsOCBAQCB1bnJlZjoKPiAgfQo+ ICAKPiAgc3RhdGljIHN0cnVjdCBkcm1faW9jdGxfZGVzYyB2Z2VtX2lvY3Rsc1tdID0gewo+ICsJ RFJNX0lPQ1RMX0RFRl9EUlYoVkdFTV9GRU5DRV9BVFRBQ0gsIHZnZW1fZmVuY2VfYXR0YWNoX2lv Y3RsLCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKPiArCURSTV9JT0NUTF9ERUZfRFJWKFZH RU1fRkVOQ0VfU0lHTkFMLCB2Z2VtX2ZlbmNlX3NpZ25hbF9pb2N0bCwgRFJNX0FVVEh8RFJNX1JF TkRFUl9BTExPVyksCj4gIH07Cj4gIAo+ICBzdGF0aWMgaW50IHZnZW1fbW1hcChzdHJ1Y3QgZmls ZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gQEAgLTI3MSw5ICszMDEsMTIg QEAgc3RhdGljIGludCB2Z2VtX3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmos Cj4gIAo+ICBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgdmdlbV9kcml2ZXIgPSB7Cj4gIAkuZHJp dmVyX2ZlYXR1cmVzCQk9IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJTUUsCj4gKwkub3BlbgkJCQk9 IHZnZW1fb3BlbiwKPiArCS5wcmVjbG9zZQkJCT0gdmdlbV9wcmVjbG9zZSwKPiAgCS5nZW1fZnJl ZV9vYmplY3RfdW5sb2NrZWQJPSB2Z2VtX2dlbV9mcmVlX29iamVjdCwKPiAgCS5nZW1fdm1fb3Bz CQkJPSAmdmdlbV9nZW1fdm1fb3BzLAo+ICAJLmlvY3RscwkJCQk9IHZnZW1faW9jdGxzLAo+ICsJ Lm51bV9pb2N0bHMgCQkJPSBBUlJBWV9TSVpFKHZnZW1faW9jdGxzKSwKPiAgCS5mb3BzCQkJCT0g JnZnZW1fZHJpdmVyX2ZvcHMsCj4gIAo+ICAJLmR1bWJfY3JlYXRlCQkJPSB2Z2VtX2dlbV9kdW1i X2NyZWF0ZSwKPiBAQCAtMzI4LDUgKzM2MSw2IEBAIG1vZHVsZV9pbml0KHZnZW1faW5pdCk7Cj4g IG1vZHVsZV9leGl0KHZnZW1fZXhpdCk7Cj4gIAo+ICBNT0RVTEVfQVVUSE9SKCJSZWQgSGF0LCBJ bmMuIik7Cj4gK01PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uIik7Cj4gIE1PRFVMRV9E RVNDUklQVElPTihEUklWRVJfREVTQyk7Cj4gIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0 aW9uYWwgcmlnaHRzIik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1f ZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5oCj4gaW5kZXggOTg4Y2JhYWU3 NTg4Li4xZjg3OThhZDMyOWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdl bV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmgKPiBAQCAtMzIs OSArMzIsMjUgQEAKPiAgI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJt X2dlbS5oPgo+ICAKPiArI2luY2x1ZGUgPHVhcGkvZHJtL3ZnZW1fZHJtLmg+Cj4gKwo+ICtzdHJ1 Y3QgdmdlbV9maWxlIHsKPiArCXN0cnVjdCBpZHIgZmVuY2VfaWRyOwo+ICsJc3RydWN0IG11dGV4 IGZlbmNlX211dGV4Owo+ICt9Owo+ICsKPiAgI2RlZmluZSB0b192Z2VtX2JvKHgpIGNvbnRhaW5l cl9vZih4LCBzdHJ1Y3QgZHJtX3ZnZW1fZ2VtX29iamVjdCwgYmFzZSkKPiAgc3RydWN0IGRybV92 Z2VtX2dlbV9vYmplY3Qgewo+ICAJc3RydWN0IGRybV9nZW1fb2JqZWN0IGJhc2U7Cj4gIH07Cj4g IAo+ICtpbnQgdmdlbV9mZW5jZV9vcGVuKHN0cnVjdCB2Z2VtX2ZpbGUgKmZpbGUpOwo+ICtpbnQg dmdlbV9mZW5jZV9hdHRhY2hfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJICAg IHZvaWQgKmRhdGEsCj4gKwkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ICtpbnQgdmdl bV9mZW5jZV9zaWduYWxfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJICAgIHZv aWQgKmRhdGEsCj4gKwkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ICt2b2lkIHZnZW1f ZmVuY2VfY2xvc2Uoc3RydWN0IHZnZW1fZmlsZSAqZmlsZSk7Cj4gKwo+ICAjZW5kaWYKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9mZW5jZS5jIGIvZHJpdmVycy9ncHUv ZHJtL3ZnZW0vdmdlbV9mZW5jZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwMDAwMDAuLmU3N2I1MjIwODY5OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vdmdlbS92Z2VtX2ZlbmNlLmMKPiBAQCAtMCwwICsxLDI4MyBAQAo+ICsvKgo+ICsgKiBD b3B5cmlnaHQgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpCj4gKyAqIHRvIGRlYWwgaW4gdGhlIHNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogb24g dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1Ygo+ICsgKiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbQo+ICsgKiB0aGVtIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4g KyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBT b2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJ VFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMsIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUgo+ICsgKiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQsIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9N LCBPVVQgT0YgT1IgSU4KPiArICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5j bHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4K PiArCj4gKyNpbmNsdWRlICJ2Z2VtX2Rydi5oIgo+ICsKPiArI2RlZmluZSBWR0VNX0ZFTkNFX1RJ TUVPVVQgKDEwKkhaKQo+ICsKPiArc3RydWN0IHZnZW1fZmVuY2Ugewo+ICsJc3RydWN0IGZlbmNl IGJhc2U7Cj4gKwlzdHJ1Y3Qgc3BpbmxvY2sgbG9jazsKPiArCXN0cnVjdCB0aW1lcl9saXN0IHRp bWVyOwo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKnZnZW1fZmVuY2VfZ2V0X2RyaXZl cl9uYW1lKHN0cnVjdCBmZW5jZSAqZmVuY2UpCj4gK3sKPiArCXJldHVybiAidmdlbSI7Cj4gK30K PiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICp2Z2VtX2ZlbmNlX2dldF90aW1lbGluZV9uYW1lKHN0 cnVjdCBmZW5jZSAqZmVuY2UpCj4gK3sKPiArCXJldHVybiAidW5ib3VuZCI7Cj4gK30KPiArCj4g K3N0YXRpYyBib29sIHZnZW1fZmVuY2Vfc2lnbmFsZWQoc3RydWN0IGZlbmNlICpmZW5jZSkKPiAr ewo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB2Z2VtX2ZlbmNlX2Vu YWJsZV9zaWduYWxpbmcoc3RydWN0IGZlbmNlICpmZW5jZSkKPiArewo+ICsJcmV0dXJuIHRydWU7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZnZW1fZmVuY2VfcmVsZWFzZShzdHJ1Y3QgZmVuY2Ug KmJhc2UpCj4gK3sKPiArCXN0cnVjdCB2Z2VtX2ZlbmNlICpmZW5jZSA9IGNvbnRhaW5lcl9vZihi YXNlLCB0eXBlb2YoKmZlbmNlKSwgYmFzZSk7Cj4gKwo+ICsJZGVsX3RpbWVyX3N5bmMoJmZlbmNl LT50aW1lcik7Cj4gKwlmZW5jZV9mcmVlKCZmZW5jZS0+YmFzZSk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHZnZW1fZmVuY2VfdmFsdWVfc3RyKHN0cnVjdCBmZW5jZSAqZmVuY2UsIGNoYXIgKnN0 ciwgaW50IHNpemUpCj4gK3sKPiArCXNucHJpbnRmKHN0ciwgc2l6ZSwgIiV1IiwgZmVuY2UtPnNl cW5vKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmdlbV9mZW5jZV90aW1lbGluZV92YWx1ZV9z dHIoc3RydWN0IGZlbmNlICpmZW5jZSwgY2hhciAqc3RyLAo+ICsJCQkJCSAgaW50IHNpemUpCj4g K3sKPiArCXNucHJpbnRmKHN0ciwgc2l6ZSwgIiV1IiwgZmVuY2VfaXNfc2lnbmFsZWQoZmVuY2Up ID8gZmVuY2UtPnNlcW5vIDogMCk7Cj4gK30KPiArCj4gK2NvbnN0IHN0cnVjdCBmZW5jZV9vcHMg dmdlbV9mZW5jZV9vcHMgPSB7Cj4gKwkuZ2V0X2RyaXZlcl9uYW1lID0gdmdlbV9mZW5jZV9nZXRf ZHJpdmVyX25hbWUsCj4gKwkuZ2V0X3RpbWVsaW5lX25hbWUgPSB2Z2VtX2ZlbmNlX2dldF90aW1l bGluZV9uYW1lLAo+ICsJLmVuYWJsZV9zaWduYWxpbmcgPSB2Z2VtX2ZlbmNlX2VuYWJsZV9zaWdu YWxpbmcsCj4gKwkuc2lnbmFsZWQgPSB2Z2VtX2ZlbmNlX3NpZ25hbGVkLAo+ICsJLndhaXQgPSBm ZW5jZV9kZWZhdWx0X3dhaXQsCj4gKwkucmVsZWFzZSA9IHZnZW1fZmVuY2VfcmVsZWFzZSwKPiAr Cj4gKwkuZmVuY2VfdmFsdWVfc3RyID0gdmdlbV9mZW5jZV92YWx1ZV9zdHIsCj4gKwkudGltZWxp bmVfdmFsdWVfc3RyID0gdmdlbV9mZW5jZV90aW1lbGluZV92YWx1ZV9zdHIsCj4gK307Cj4gKwo+ ICtzdGF0aWMgdm9pZCB2Z2VtX2ZlbmNlX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQo+ICt7 Cj4gKwlzdHJ1Y3QgdmdlbV9mZW5jZSAqZmVuY2UgPSAoc3RydWN0IHZnZW1fZmVuY2UgKilkYXRh Owo+ICsKPiArCWZlbmNlX3NpZ25hbCgmZmVuY2UtPmJhc2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg c3RydWN0IGZlbmNlICp2Z2VtX2ZlbmNlX2NyZWF0ZShzdHJ1Y3QgdmdlbV9maWxlICp2ZmlsZSwK PiArCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4gK3sKPiArCXN0cnVjdCB2Z2VtX2Zl bmNlICpmZW5jZTsKPiArCj4gKwlmZW5jZSA9IGt6YWxsb2Moc2l6ZW9mKCpmZW5jZSksIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFmZW5jZSkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlzcGluX2xv Y2tfaW5pdCgmZmVuY2UtPmxvY2spOwo+ICsJZmVuY2VfaW5pdCgmZmVuY2UtPmJhc2UsICZ2Z2Vt X2ZlbmNlX29wcywgJmZlbmNlLT5sb2NrLAo+ICsJCSAgIGZlbmNlX2NvbnRleHRfYWxsb2MoMSks IDEpOwo+ICsKPiArCXNldHVwX3RpbWVyKCZmZW5jZS0+dGltZXIsIHZnZW1fZmVuY2VfdGltZW91 dCwgKHVuc2lnbmVkIGxvbmcpZmVuY2UpOwo+ICsKPiArCS8qIFdlIGZvcmNlIHRoZSBmZW5jZSB0 byBleHBpcmUgd2l0aGluIDEwcyB0byBwcmV2ZW50IGRyaXZlciBoYW5ncyAqLwo+ICsJbW9kX3Rp bWVyKCZmZW5jZS0+dGltZXIsIFZHRU1fRkVOQ0VfVElNRU9VVCk7Cj4gKwo+ICsJcmV0dXJuICZm ZW5jZS0+YmFzZTsKPiArfQo+ICsKPiArc3RhdGljIGludCBhdHRhY2hfZG1hYnVmKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCj4gKwkJCSBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiArewo+ ICsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKPiArCj4gKwlpZiAob2JqLT5kbWFfYnVmKQo+ICsJ CXJldHVybiAwOwo+ICsKPiArCWRtYWJ1ZiA9IGRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfZXhwb3J0 KGRldiwgb2JqLCAwKTsKPiArCWlmIChJU19FUlIoZG1hYnVmKSkKPiArCQlyZXR1cm4gUFRSX0VS UihkbWFidWYpOwo+ICsKPiArCW9iai0+ZG1hX2J1ZiA9IGRtYWJ1ZjsKPiArCWRybV9nZW1fb2Jq ZWN0X3JlZmVyZW5jZShvYmopOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qCj4gKyAqIHZn ZW1fZmVuY2VfYXR0YWNoX2lvY3RsIChEUk1fSU9DVExfVkdFTV9GRU5DRV9BVFRBQ0gpOgo+ICsg Kgo+ICsgKiBDcmVhdGUgYW5kIGF0dGFjaCBhIGZlbmNlIHRvIHRoZSB2R0VNIGhhbmRsZS4gVGhp cyBmZW5jZSBpcyB0aGVuIGV4cG9zZWQKPiArICogdmlhIHRoZSBkbWEtYnVmIHJlc2VydmF0aW9u IG9iamVjdCBhbmQgdmlzaWJsZSB0byBjb25zdW1lcnMgb2YgdGhlIGV4cG9ydGVkCj4gKyAqIGRt YS1idWYuIElmIHRoZSBmbGFncyBjb250YWluIFZHRU1fRkVOQ0VfV1JJVEUsIHRoZSBmZW5jZSBp bmRpY2F0ZXMgdGhlCj4gKyAqIHZHRU0gYnVmZmVyIGlzIGJlaW5nIHdyaXR0ZW4gdG8gYnkgdGhl IGNsaWVudCBhbmQgaXMgZXhwb3NlZCBhcyBhbiBleGNsdXNpdmUKPiArICogZmVuY2UsIG90aGVy d2lzZSB0aGUgZmVuY2UgaW5kaWNhdGVzIHRoZSBjbGllbnQgaXMgY3VycmVudCByZWFkaW5nIGZy b20gdGhlCj4gKyAqIGJ1ZmZlciBhbmQgYWxsIGZ1dHVyZSB3cml0ZXMgc2hvdWxkIHdhaXQgZm9y IHRoZSBjbGllbnQgdG8gc2lnbmFsIGl0cwo+ICsgKiBjb21wbGV0aW9uLiBOb3RlIHRoYXQgaWYg YSBjb25mbGljdGluZyBmZW5jZSBpcyBhbHJlYWR5IG9uIHRoZSBkbWEtYnVmIChpLmUuCj4gKyAq IGFuIGV4Y2x1c2l2ZSBmZW5jZSB3aGVuIGFkZGluZyBhIHJlYWQsIG9yIGFueSBmZW5jZSB3aGVu IGFkZGluZyBhIHdyaXRlKSwKPiArICogLUVCVVNZIGlzIHJlcG9ydGVkLiBTZXJpYWxpc2F0aW9u IGJldHdlZW4gb3BlcmF0aW9ucyBzaG91bGQgYmUgaGFuZGxlZAo+ICsgKiBieSB3YWl0aW5nIHVw b24gdGhlIGRtYS1idWYuCj4gKyAqCj4gKyAqIFRoaXMgcmV0dXJucyB0aGUgaGFuZGxlIGZvciB0 aGUgbmV3IGZlbmNlIHRoYXQgbXVzdCBiZSBzaWduYWxlZCB3aXRoaW4gMTAKPiArICogc2Vjb25k cyAob3Igb3RoZXJ3aXNlIGl0IHdpbGwgYXV0b21hdGljYWxseSBleHBpcmUpLiBTZWUKPiArICog dmdlbV9mZW5jZV9zaWduYWxfaW9jdGwgKERSTV9JT0NUTF9WR0VNX0ZFTkNFX1NJR05BTCkuCj4g KyAqCj4gKyAqIElmIHRoZSB2R0VNIGhhbmRsZSBkb2VzIG5vdCBleGlzdCwgdmdlbV9mZW5jZV9h dHRhY2hfaW9jdGwgcmV0dXJucyAtRU5PRU5ULgo+ICsgKi8KPiAraW50IHZnZW1fZmVuY2VfYXR0 YWNoX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCSAgICB2b2lkICpkYXRhLAo+ ICsJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3ZnZW1f ZmVuY2VfYXR0YWNoICphcmcgPSBkYXRhOwo+ICsJc3RydWN0IHZnZW1fZmlsZSAqdmZpbGUgPSBm aWxlLT5kcml2ZXJfcHJpdjsKPiArCXN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKnJlc3Y7Cj4g KwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKPiArCXN0cnVjdCBmZW5jZSAqZmVuY2U7Cj4g KwlpbnQgcmV0Owo+ICsKPiArCWlmIChhcmctPmZsYWdzICYgflZHRU1fRkVOQ0VfV1JJVEUpCj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKGFyZy0+cGFkKQo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsKPiArCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlLCBhcmctPmhhbmRs ZSk7Cj4gKwlpZiAoIW9iaikKPiArCQlyZXR1cm4gLUVOT0VOVDsKPiArCj4gKwlyZXQgPSBhdHRh Y2hfZG1hYnVmKGRldiwgb2JqKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnI7Cj4gKwo+ICsJ ZmVuY2UgPSB2Z2VtX2ZlbmNlX2NyZWF0ZSh2ZmlsZSwgYXJnLT5mbGFncyk7Cj4gKwlpZiAoIWZl bmNlKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwkv KiBDaGVjayBmb3IgYSBjb25mbGljdGluZyBmZW5jZSAqLwo+ICsJcmVzdiA9IG9iai0+ZG1hX2J1 Zi0+cmVzdjsKPiArCWlmICghcmVzZXJ2YXRpb25fb2JqZWN0X3Rlc3Rfc2lnbmFsZWRfcmN1KHJl c3YsCj4gKwkJCQkJCSAgYXJnLT5mbGFncyAmIFZHRU1fRkVOQ0VfV1JJVEUpKSB7Cj4gKwkJcmV0 ID0gLUVCVVNZOwo+ICsJCWdvdG8gZXJyX2ZlbmNlOwo+ICsJfQo+ICsKPiArCS8qIEV4cG9zZSB0 aGUgZmVuY2UgdmlhIHRoZSBkbWEtYnVmICovCj4gKwlyZXQgPSAwOwo+ICsJbXV0ZXhfbG9jaygm cmVzdi0+bG9jay5iYXNlKTsKPiArCWlmIChhcmctPmZsYWdzICYgVkdFTV9GRU5DRV9XUklURSkK PiArCQlyZXNlcnZhdGlvbl9vYmplY3RfYWRkX2V4Y2xfZmVuY2UocmVzdiwgZmVuY2UpOwo+ICsJ ZWxzZSBpZiAoKHJldCA9IHJlc2VydmF0aW9uX29iamVjdF9yZXNlcnZlX3NoYXJlZChyZXN2KSkg PT0gMCkKPiArCQlyZXNlcnZhdGlvbl9vYmplY3RfYWRkX3NoYXJlZF9mZW5jZShyZXN2LCBmZW5j ZSk7Cj4gKwltdXRleF91bmxvY2soJnJlc3YtPmxvY2suYmFzZSk7Cj4gKwo+ICsJLyogUmVjb3Jk IHRoZSBmZW5jZSBpbiBvdXIgaWRyIGZvciBsYXRlciBzaWduYWxpbmcgKi8KPiArCWlmIChyZXQg PT0gMCkgewo+ICsJCW11dGV4X2xvY2soJnZmaWxlLT5mZW5jZV9tdXRleCk7Cj4gKwkJcmV0ID0g aWRyX2FsbG9jKCZ2ZmlsZS0+ZmVuY2VfaWRyLCBmZW5jZSwgMSwgMCwgR0ZQX0tFUk5FTCk7Cj4g KwkJbXV0ZXhfdW5sb2NrKCZ2ZmlsZS0+ZmVuY2VfbXV0ZXgpOwo+ICsJCWlmIChyZXQgPiAwKSB7 Cj4gKwkJCWFyZy0+b3V0X2ZlbmNlID0gcmV0Owo+ICsJCQlyZXQgPSAwOwo+ICsJCX0KPiArCX0K PiArZXJyX2ZlbmNlOgo+ICsJaWYgKHJldCkgewo+ICsJCWZlbmNlX3NpZ25hbChmZW5jZSk7Cj4g KwkJZmVuY2VfcHV0KGZlbmNlKTsKPiArCX0KPiArZXJyOgo+ICsJZHJtX2dlbV9vYmplY3RfdW5y ZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qCj4g KyAqIHZnZW1fZmVuY2Vfc2lnbmFsX2lvY3RsIChEUk1fSU9DVExfVkdFTV9GRU5DRV9TSUdOQUwp Ogo+ICsgKgo+ICsgKiBTaWduYWwgYW5kIGNvbnN1bWUgYSBmZW5jZSBlYWxpZXIgYXR0YWNoZWQg dG8gYSB2R0VNIGhhbmRsZSB1c2luZwo+ICsgKiB2Z2VtX2ZlbmNlX2F0dGFjaF9pb2N0bCAoRFJN X0lPQ1RMX1ZHRU1fRkVOQ0VfQVRUQUNIKS4KPiArICoKPiArICogQWxsIGZlbmNlcyBtdXN0IGJl IHNpZ25hbGVkIHdpdGhpbiAxMHMgb2YgYXR0YWNobWVudCBvciBvdGhlcndpc2UgdGhleQo+ICsg KiB3aWxsIGF1dG9tYXRpY2FsbHkgZXhwaXJlIChhbmQgYSB2Z2VtX2ZlbmNlX3NpZ25hbF9pb2N0 bCByZXR1cm5zIC1FVElNRURPVVQpLgo+ICsgKgo+ICsgKiBTaWduYWxpbmcgYSBmZW5jZSBpbmRp Y2F0ZXMgdG8gYWxsIGNvbnN1bWVycyBvZiB0aGUgZG1hLWJ1ZiB0aGF0IHRoZQo+ICsgKiBjbGll bnQgaGFzIGNvbXBsZXRlZCB0aGUgb3BlcmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmVuY2Us IGFuZCB0aGF0IHRoZQo+ICsgKiBidWZmZXIgaXMgdGhlbiByZWFkeSBmb3IgY29uc3VtcHRpb24u Cj4gKyAqCj4gKyAqIElmIHRoZSBmZW5jZSBkb2VzIG5vdCBleGlzdCAob3IgaGFzIGFscmVhZHkg YmVlbiBzaWduYWxlZCBieSB0aGUgY2xpZW50KSwKPiArICogdmdlbV9mZW5jZV9zaWduYWxfaW9j dGwgcmV0dXJucyAtRU5PRU5ULgo+ICsgKi8KPiAraW50IHZnZW1fZmVuY2Vfc2lnbmFsX2lvY3Rs KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCSAgICB2b2lkICpkYXRhLAo+ICsJCQkgICAg c3RydWN0IGRybV9maWxlICpmaWxlKQo+ICt7Cj4gKwlzdHJ1Y3QgdmdlbV9maWxlICp2ZmlsZSA9 IGZpbGUtPmRyaXZlcl9wcml2Owo+ICsJc3RydWN0IGRybV92Z2VtX2ZlbmNlX3NpZ25hbCAqYXJn ID0gZGF0YTsKPiArCXN0cnVjdCBmZW5jZSAqZmVuY2U7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlm IChhcmctPmZsYWdzKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCW11dGV4X2xvY2soJnZm aWxlLT5mZW5jZV9tdXRleCk7Cj4gKwlmZW5jZSA9IGlkcl9yZXBsYWNlKCZ2ZmlsZS0+ZmVuY2Vf aWRyLCBOVUxMLCBhcmctPmZlbmNlKTsKPiArCW11dGV4X3VubG9jaygmdmZpbGUtPmZlbmNlX211 dGV4KTsKPiArCWlmICghZmVuY2UpCj4gKwkJcmV0dXJuIC1FTk9FTlQ7Cj4gKwlpZiAoSVNfRVJS KGZlbmNlKSkKPiArCQlyZXR1cm4gUFRSX0VSUihmZW5jZSk7Cj4gKwo+ICsJaWYgKGZlbmNlX2lz X3NpZ25hbGVkKGZlbmNlKSkKPiArCQlyZXQgPSAtRVRJTUVET1VUOwo+ICsKPiArCWZlbmNlX3Np Z25hbChmZW5jZSk7Cj4gKwlmZW5jZV9wdXQoZmVuY2UpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiAraW50IHZnZW1fZmVuY2Vfb3BlbihzdHJ1Y3QgdmdlbV9maWxlICp2ZmlsZSkKPiArewo+ ICsJbXV0ZXhfaW5pdCgmdmZpbGUtPmZlbmNlX211dGV4KTsKPiArCWlkcl9pbml0KCZ2ZmlsZS0+ ZmVuY2VfaWRyKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX3Zn ZW1fZmVuY2VfaWRyX2ZpbmkoaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlm ZW5jZV9zaWduYWwocCk7Cj4gKwlmZW5jZV9wdXQocCk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArdm9pZCB2Z2VtX2ZlbmNlX2Nsb3NlKHN0cnVjdCB2Z2VtX2ZpbGUgKnZmaWxlKQo+ICt7Cj4g KwlpZHJfZm9yX2VhY2goJnZmaWxlLT5mZW5jZV9pZHIsIF9fdmdlbV9mZW5jZV9pZHJfZmluaSwg dmZpbGUpOwo+ICsJaWRyX2Rlc3Ryb3koJnZmaWxlLT5mZW5jZV9pZHIpOwo+ICt9Cj4gZGlmZiAt LWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vdmdlbV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vdmdl bV9kcm0uaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5iZjY2 ZjVkYjZkYTgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVkZS91YXBpL2RybS92Z2VtX2Ry bS5oCj4gQEAgLTAsMCArMSw2MiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgMjAxNiBJbnRlbCBD b3Jwb3JhdGlvbgo+ICsgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgo+ICsgKgo+ICsgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlCj4gKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKPiArICogd2l0aG91dCBsaW1pdGF0 aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAo+ICsg KiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvCj4gKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwo+ICsgKiB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCj4gKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCj4gKyAq IG9mIHRoZSBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKPiArICogT1IgSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+ICsg KiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T04tSU5GUklOR0VNRU5ULgo+ICsgKiBJTiBOTyBFVkVOVCBTSEFMTCBUVU5HU1RFTiBHUkFQSElD UyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SCj4gKyAqIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LAo+ICsgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRQo+ICsgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIF9VQVBJX1ZH RU1fRFJNX0hfCj4gKyNkZWZpbmUgX1VBUElfVkdFTV9EUk1fSF8KPiArCj4gKyNpbmNsdWRlICJk cm0uaCIKPiArCj4gKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQo+ICtleHRlcm4gIkMiIHsKPiAr I2VuZGlmCj4gKwo+ICsvKiBQbGVhc2Ugbm90ZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gYWxsIHN0 cnVjdHMgZGVmaW5lZCBoZXJlIGFyZQo+ICsgKiBzdWJqZWN0IHRvIGJhY2t3YXJkcy1jb21wYXRp YmlsaXR5IGNvbnN0cmFpbnRzLgo+ICsgKi8KPiArI2RlZmluZSBEUk1fVkdFTV9GRU5DRV9BVFRB Q0gJMHgxCj4gKyNkZWZpbmUgRFJNX1ZHRU1fRkVOQ0VfU0lHTkFMCTB4Mgo+ICsKPiArI2RlZmlu ZSBEUk1fSU9DVExfVkdFTV9GRU5DRV9BVFRBQ0gJRFJNX0lPV1IoIERSTV9DT01NQU5EX0JBU0Ug KyBEUk1fVkdFTV9GRU5DRV9BVFRBQ0gsIHN0cnVjdCBkcm1fdmdlbV9mZW5jZV9hdHRhY2gpCj4g KyNkZWZpbmUgRFJNX0lPQ1RMX1ZHRU1fRkVOQ0VfU0lHTkFMCURSTV9JT1coIERSTV9DT01NQU5E X0JBU0UgKyBEUk1fVkdFTV9GRU5DRV9TSUdOQUwsIHN0cnVjdCBkcm1fdmdlbV9mZW5jZV9zaWdu YWwpCj4gKwo+ICtzdHJ1Y3QgZHJtX3ZnZW1fZmVuY2VfYXR0YWNoIHsKPiArCV9fdTMyIGhhbmRs ZTsKPiArCV9fdTMyIGZsYWdzOwo+ICsjZGVmaW5lIFZHRU1fRkVOQ0VfV1JJVEUJMHgxCj4gKwlf X3UzMiBvdXRfZmVuY2U7Cj4gKwlfX3UzMiBwYWQ7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHJtX3Zn ZW1fZmVuY2Vfc2lnbmFsIHsKPiArCV9fdTMyIGZlbmNlOwo+ICsJX191MzIgZmxhZ3M7Cj4gK307 Cj4gKwo+ICsjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKPiArfQo+ICsjZW5kaWYKPiArCj4gKyNl bmRpZiAvKiBfVUFQSV9WR0VNX0RSTV9IXyAqLwo+IC0tIAo+IDIuOC4xCj4gCgotLSAKRGFuaWVs IFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cu ZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==