From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Harrison Subject: Re: [RFC 7/9] drm/i915: Interrupt driven fences Date: Wed, 28 Oct 2015 13:00:39 +0000 Message-ID: <5630C6F7.8000608@Intel.com> References: <1437143483-6234-1-git-send-email-John.C.Harrison@Intel.com> <1437143483-6234-8-git-send-email-John.C.Harrison@Intel.com> <55B616EE.8040302@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 8E9B77212B for ; Wed, 28 Oct 2015 06:01:10 -0700 (PDT) In-Reply-To: <55B616EE.8040302@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin , Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org T24gMjcvMDcvMjAxNSAxMjozMywgVHZydGtvIFVyc3VsaW4gd3JvdGU6Cj4KPiBIaSwKPgo+IE9u IDA3LzE3LzIwMTUgMDM6MzEgUE0sIEpvaG4uQy5IYXJyaXNvbkBJbnRlbC5jb20gd3JvdGU6Cj4+ IEZyb206IEpvaG4gSGFycmlzb24gPEpvaG4uQy5IYXJyaXNvbkBJbnRlbC5jb20+Cj4+Cj4+IFRo ZSBpbnRlbmRlZCB1c2FnZSBtb2RlbCBmb3Igc3RydWN0IGZlbmNlIGlzIHRoYXQgdGhlIHNpZ25h bGxlZCAKPj4gc3RhdHVzIHNob3VsZCBiZQo+PiBzZXQgb24gZGVtYW5kIHJhdGhlciB0aGFuIHBv bGxlZC4gVGhhdCBpcywgdGhlcmUgc2hvdWxkIG5vdCBiZSBhIG5lZWQgCj4+IGZvciBhCj4+ICdz aWduYWxlZCcgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGV2ZXJ5dGltZSB0aGUgc3RhdHVzIGlzIHF1 ZXJpZWQuIAo+PiBJbnN0ZWFkLAo+PiAnc29tZXRoaW5nJyBzaG91bGQgYmUgZG9uZSB0byBlbmFi bGUgYSBzaWduYWwgY2FsbGJhY2sgZnJvbSB0aGUgCj4+IGhhcmR3YXJlIHdoaWNoCj4+IHdpbGwg dXBkYXRlIHRoZSBzdGF0ZSBkaXJlY3RseS4gSW4gdGhlIGNhc2Ugb2YgcmVxdWVzdHMsIHRoaXMg aXMgdGhlIAo+PiBzZXFubwo+PiB1cGRhdGUgaW50ZXJydXB0LiBUaGUgaWRlYSBpcyB0aGF0IHRo aXMgY2FsbGJhY2sgd2lsbCBvbmx5IGJlIGVuYWJsZWQgCj4+IG9uIGRlbWFuZAo+PiB3aGVuIHNv bWV0aGluZyBhY3R1YWxseSB0cmllcyB0byB3YWl0IG9uIHRoZSBmZW5jZS4KPj4KPj4gVGhpcyBj aGFuZ2UgcmVtb3ZlcyB0aGUgcG9sbGluZyB0ZXN0IGFuZCByZXBsYWNlcyBpdCB3aXRoIHRoZSAK Pj4gY2FsbGJhY2sgc2NoZW1lLgo+PiBFYWNoIGZlbmNlIGlzIGFkZGVkIHRvIGEgJ3BsZWFzZSBw b2tlIG1lJyBsaXN0IGF0IHRoZSBzdGFydCBvZgo+PiBpOTE1X2FkZF9yZXF1ZXN0KCkuIFRoZSBp bnRlcnJ1cHQgaGFuZGxlciB0aGVuIHNjYW5zIHRocm91Z2ggdGhlIAo+PiAncG9rZSBtZScgbGlz dAo+PiB3aGVuIGEgbmV3IHNlcW5vIHBvcHMgb3V0IGFuZCBzaWduYWxzIGFueSBtYXRjaGluZyBm ZW5jZS9yZXF1ZXN0LiBUaGUgCj4+IGZlbmNlIGlzCj4+IHRoZW4gcmVtb3ZlZCBmcm9tIHRoZSBs aXN0IHNvIHRoZSBlbnRpcmUgcmVxdWVzdCBzdGFjayBkb2VzIG5vdCBuZWVkIAo+PiB0byBiZQo+ PiBzY2FubmVkIGV2ZXJ5IHRpbWUuIE5vdGUgdGhhdCB0aGUgZmVuY2UgaXMgYWRkZWQgdG8gdGhl IGxpc3QgYmVmb3JlIAo+PiB0aGUgY29tbWFuZHMKPj4gdG8gZ2VuZXJhdGUgdGhlIHNlcW5vIGlu dGVycnVwdCBhcmUgYWRkZWQgdG8gdGhlIHJpbmcuIFRodXMgdGhlIAo+PiBzZXF1ZW5jZSBpcwo+ PiBndWFyYW50ZWVkIHRvIGJlIHJhY2UgZnJlZSBpZiB0aGUgaW50ZXJydXB0IGlzIGFscmVhZHkg ZW5hYmxlZC4KPj4KPj4gTm90ZSB0aGF0IHRoZSBpbnRlcnJ1cHQgaXMgb25seSBlbmFibGVkIG9u IGRlbWFuZCAoaS5lLiB3aGVuIAo+PiBfX3dhaXRfcmVxdWVzdCgpIGlzCj4+IGNhbGxlZCkuIFRo dXMgdGhlcmUgaXMgc3RpbGwgYSBwb3RlbnRpYWwgcmFjZSB3aGVuIGVuYWJsaW5nIHRoZSAKPj4g aW50ZXJydXB0IGFzIHRoZQo+PiByZXF1ZXN0IG1heSBhbHJlYWR5IGhhdmUgY29tcGxldGVkLiBI b3dldmVyLCB0aGlzIGlzIHNpbXBseSBzb2x2ZWQgYnkgCj4+IGNhbGxpbmcKPj4gdGhlIGludGVy cnVwdCBwcm9jZXNzaW5nIGNvZGUgaW1tZWRpYXRlbHkgYWZ0ZXIgZW5hYmxpbmcgdGhlIAo+PiBp bnRlcnJ1cHQgYW5kCj4+IHRoZXJlYnkgY2hlY2tpbmcgZm9yIGFscmVhZHkgY29tcGxldGVkIHJl cXVlc3RzLgo+Pgo+PiBMYXN0bHksIHRoZSByaW5nIGNsZWFuIHVwIGNvZGUgaGFzIHRoZSBwb3Nz aWJpbGl0eSB0byBjYW5jZWwgb3V0c3RhbmRpbmcKPj4gcmVxdWVzdHMgKGUuZy4gYmVjYXVzZSBU RFIgaGFzIHJlc2V0IHRoZSByaW5nKS4gVGhlc2UgcmVxdWVzdHMgd2lsbCAKPj4gbmV2ZXIgZ2V0 Cj4+IHNpZ25hbGxlZCBhbmQgc28gbXVzdCBiZSByZW1vdmVkIGZyb20gdGhlIHNpZ25hbCBsaXN0 IG1hbnVhbGx5LiBUaGlzIAo+PiBpcyBkb25lIGJ5Cj4+IHNldHRpbmcgYSAnY2FuY2VsbGVkJyBm bGFnIGFuZCB0aGVuIGNhbGxpbmcgdGhlIHJlZ3VsYXIgbm90aWZ5L3JldGlyZSAKPj4gY29kZSBw YXRoCj4+IHJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gZHVwbGljYXRlIHRoZSBsaXN0IG1hbmlw dWxhdGF0aW9uIGFuZCBjbGVhbiAKPj4gdXAgY29kZSBpbgo+PiBtdWx0aXBsZSBwbGFjZXMuIFRo aXMgYWxzbyBhdm9pZCBhbnkgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIAo+PiBjYW5jZWxsYXRp b24KPj4gcmVxdWVzdCBtaWdodCBvY2N1ciBhZnRlci9kdXJpbmcgdGhlIGNvbXBsZXRpb24gaW50 ZXJydXB0IGFjdHVhbGx5IAo+PiBhcnJpdmluZy4KPj4KPj4gdjI6IFVwZGF0ZWQgdG8gdGFrZSBh ZHZhbnRhZ2Ugb2YgdGhlIHJlcXVlc3QgdW5yZWZlcmVuY2Ugbm8gbG9uZ2VyIAo+PiByZXF1aXJp bmcgdGhlCj4+IG11dGV4IGxvY2suCj4+Cj4+IEZvcjogVklaLTUxOTAKPj4gU2lnbmVkLW9mZi1i eTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KPj4gLS0tCj4+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgICA4ICsrCj4+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgIHwgMTMyIAo+PiArKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJx LmMgICAgICAgICB8ICAgMiArCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMg ICAgICAgIHwgICAxICsKPj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVy LmMgfCAgIDEgKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCB8 ICAgMSArCj4+ICAgNiBmaWxlcyBjaGFuZ2VkLCAxMzYgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlv bnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmgg Cj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+PiBpbmRleCA2MWMzZGIyLi5k N2YxYWE1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4gQEAgLTIxNjMsNyArMjE2 MywxMSBAQCB2b2lkIGk5MTVfZ2VtX3RyYWNrX2ZiKHN0cnVjdCAKPj4gZHJtX2k5MTVfZ2VtX29i amVjdCAqb2xkLAo+PiAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCB7Cj4+ICAgICAgIC8q KiBVbmRlcmx5aW5nIG9iamVjdCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzaWduYWwvd2FpdCBzdHVm Zi4gKi8KPj4gICAgICAgc3RydWN0IGZlbmNlIGZlbmNlOwo+PiArICAgIHN0cnVjdCBsaXN0X2hl YWQgc2lnbmFsX2xpc3Q7Cj4+ICsgICAgc3RydWN0IGxpc3RfaGVhZCB1bnNpZ25hbF9saXN0Owo+ Cj4gSW4gYWRkaXRpb24gdG8gd2hhdCBEYW5pZWwgc2FpZCAob25lIGxpc3RfaGVhZCBsb29rcyBl bm91Z2gpIGl0IGlzIAo+IGN1c3RvbWFyeSB0byBjYWxsIGl0IF9saW5rLgo+Cj4+ICAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgZGVsYXlfZnJlZV9saXN0Owo+PiArICAgIGJvb2wgY2FuY2VsbGVkOwo+ PiArICAgIGJvb2wgaXJxX2VuYWJsZWQ7Cj4+Cj4+ICAgICAgIC8qKiBPbiBXaGljaCByaW5nIHRo aXMgcmVxdWVzdCB3YXMgZ2VuZXJhdGVkICovCj4+ICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1Owo+PiBAQCAtMjI0MSw2ICsyMjQ1LDEwIEBAIGludCBpOTE1X2dlbV9yZXF1ZXN0 X2FsbG9jKHN0cnVjdCAKPj4gaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+PiAgICAgICAgICAgICAg ICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqKnJlcV9vdXQpOwo+PiAgIHZvaWQgaTkx NV9nZW1fcmVxdWVzdF9jYW5jZWwoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOwo+ Pgo+PiArdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X3N1Ym1pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcSk7Cj4+ICt2b2lkIGk5MTVfZ2VtX3JlcXVlc3RfZW5hYmxlX2ludGVycnVwdChz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgCj4+ICpyZXEpOwo+PiArdm9pZCBpOTE1X2dlbV9y ZXF1ZXN0X25vdGlmeShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKPj4gKwo+PiAgIGlu dCBpOTE1X2NyZWF0ZV9mZW5jZV90aW1lbGluZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+PiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+PiAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYwo+PiBpbmRleCA0ODI4MzVhLi43YzU4OWE5IDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMKPj4gQEAgLTEyMjIsNiArMTIyMiwxMSBAQCBpbnQgX19pOTE1X3dh aXRfcmVxdWVzdChzdHJ1Y3QgCj4+IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4+ICAgICAg IGlmIChsaXN0X2VtcHR5KCZyZXEtPmxpc3QpKQo+PiAgICAgICAgICAgcmV0dXJuIDA7Cj4+Cj4+ ICsgICAgLyoKPj4gKyAgICAgKiBFbmFibGUgaW50ZXJydXB0IGNvbXBsZXRpb24gb2YgdGhlIHJl cXVlc3QuCj4+ICsgICAgICovCj4+ICsgICAgaTkxNV9nZW1fcmVxdWVzdF9lbmFibGVfaW50ZXJy dXB0KHJlcSk7Cj4+ICsKPj4gICAgICAgaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJl cSkpCj4+ICAgICAgICAgICByZXR1cm4gMDsKPj4KPj4gQEAgLTEzODIsNiArMTM4NywxMCBAQCBz dGF0aWMgdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZShzdHJ1Y3QgCj4+IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICpyZXF1ZXN0KQo+PiAgICAgICBsaXN0X2RlbF9pbml0KCZyZXF1ZXN0LT5saXN0 KTsKPj4gICAgICAgaTkxNV9nZW1fcmVxdWVzdF9yZW1vdmVfZnJvbV9jbGllbnQocmVxdWVzdCk7 Cj4+Cj4+ICsgICAgLyogSW4gY2FzZSB0aGUgcmVxdWVzdCBpcyBzdGlsbCBpbiB0aGUgc2lnbmFs IHBlbmRpbmcgbGlzdCAqLwo+PiArICAgIGlmICghbGlzdF9lbXB0eSgmcmVxdWVzdC0+c2lnbmFs X2xpc3QpKQo+PiArICAgICAgICByZXF1ZXN0LT5jYW5jZWxsZWQgPSB0cnVlOwo+PiArCj4+ICAg ICAgIGk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UocmVxdWVzdCk7Cj4+ICAgfQo+Pgo+PiBA QCAtMjUzNCw2ICsyNTQzLDEyIEBAIHZvaWQgX19pOTE1X2FkZF9yZXF1ZXN0KHN0cnVjdCAKPj4g ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QsCj4+ICAgICAgICAqLwo+PiAgICAgICByZXF1 ZXN0LT5wb3N0Zml4ID0gaW50ZWxfcmluZ19nZXRfdGFpbChyaW5nYnVmKTsKPj4KPj4gKyAgICAv Kgo+PiArICAgICAqIEFkZCB0aGUgZmVuY2UgdG8gdGhlIHBlbmRpbmcgbGlzdCBiZWZvcmUgZW1p dHRpbmcgdGhlIAo+PiBjb21tYW5kcyB0bwo+PiArICAgICAqIGdlbmVyYXRlIGEgc2Vxbm8gbm90 aWZpY2F0aW9uIGludGVycnVwdC4KPj4gKyAgICAgKi8KPj4gKyAgICBpOTE1X2dlbV9yZXF1ZXN0 X3N1Ym1pdChyZXF1ZXN0KTsKPj4gKwo+PiAgICAgICBpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3Rz KQo+PiAgICAgICAgICAgcmV0ID0gcmluZy0+ZW1pdF9yZXF1ZXN0KHJlcXVlc3QpOwo+PiAgICAg ICBlbHNlIHsKPj4gQEAgLTI2NTMsNiArMjY2OCw5IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX3Jl cXVlc3RfZnJlZShzdHJ1Y3QgCj4+IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4+ICAgICAg ICAgICBpOTE1X2dlbV9jb250ZXh0X3VucmVmZXJlbmNlKGN0eCk7Cj4+ICAgICAgIH0KPj4KPj4g KyAgICBpZiAocmVxLT5pcnFfZW5hYmxlZCkKPj4gKyAgICAgICAgcmVxLT5yaW5nLT5pcnFfcHV0 KHJlcS0+cmluZyk7Cj4+ICsKPgo+IFdlIGdldCBoZXJlIHdpdGggaW50ZXJydXB0cyBzdGlsbCBl bmFibGVkIG9ubHkgaWYgdXNlcnNwYWNlIGlzIAo+IGFiYW5kb25pbmcgYSB3YWl0IG9uIGFuIHVu c2lnbmFsZWQgZmVuY2UsIGRpZCBJIGdldCB0aGF0IHJpZ2h0PwpJdCBpbXBsaWVzIHRoZSByZXF1 ZXN0IGhhcyBiZWVuIGFiYW5kb25lZCBpbiBzb21lIG1hbm5lciwgeWVzLiBFLmcuIFREUiAKaGFz IGtpbGxlZCBpdCwgdXNlciBzcGFjZSBoYXMgZ2l2ZW4gdXAsIC4uLgoKPgo+PiBrbWVtX2NhY2hl X2ZyZWUocmVxLT5pOTE1LT5yZXF1ZXN0cywgcmVxKTsKPj4gICB9Cj4+Cj4+IEBAIC0yNjY4LDI0 ICsyNjg2LDEwNSBAQCBzdGF0aWMgY29uc3QgY2hhciAKPj4gKmk5MTVfZ2VtX3JlcXVlc3RfZ2V0 X3RpbWVsaW5lX25hbWUoc3RydWN0IGZlbmNlICpyZXFfZmVuY2UpCj4+ICAgICAgIHJldHVybiBy ZXEtPnJpbmctPm5hbWU7Cj4+ICAgfQo+Pgo+PiAtc3RhdGljIGJvb2wgaTkxNV9nZW1fcmVxdWVz dF9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBmZW5jZSAqcmVxX2ZlbmNlKQo+PiArLyoKPj4gKyAq IFRoZSByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCB0byB0aGUgaGFyZHdhcmUgc28gYWRkIHRo ZSBmZW5jZSAKPj4gdG8gdGhlCj4+ICsgKiBsaXN0IG9mIHNpZ25hbGFibGUgZmVuY2VzLgo+PiAr ICoKPj4gKyAqIE5COiBUaGlzIGRvZXMgbm90IGVuYWJsZSBpbnRlcnJ1cHRzIHlldC4gVGhhdCBv bmx5IG9jY3VycyBvbiAKPj4gZGVtYW5kIHdoZW4KPj4gKyAqIHRoZSByZXF1ZXN0IGlzIGFjdHVh bGx5IHdhaXRlZCBvbi4gSG93ZXZlciwgYWRkaW5nIGl0IHRvIHRoZSBsaXN0IAo+PiBlYXJseQo+ PiArICogZW5zdXJlcyB0aGF0IHRoZXJlIGlzIG5vIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBp bnRlcnJ1cHQgY291bGQgCj4+IHBvcAo+PiArICogb3V0IHByZW1hdHVyZWx5IGFuZCB0aHVzIGJl IGNvbXBsZXRlbHkgbG9zdC4gVGhlIHJhY2UgaXMgbWVyZWx5IAo+PiB0aGF0IHRoZQo+PiArICog aW50ZXJydXB0IG11c3QgYmUgbWFudWFsbHkgY2hlY2tlZCBmb3IgYWZ0ZXIgYmVpbmcgZW5hYmxl ZC4KPj4gKyAqLwo+PiArdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X3N1Ym1pdChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPj4gICB7Cj4+IC0gICAgLyogSW50ZXJydXB0IGRyaXZlbiBm ZW5jZXMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuKi8KPj4gLSAgICBXQVJOKHRydWUsICJUaGlz IHNob3VsZCBub3QgYmUgY2FsbGVkISIpOwo+PiAtICAgIHJldHVybiB0cnVlOwo+PiArICAgIGZl bmNlX2VuYWJsZV9zd19zaWduYWxpbmcoJnJlcS0+ZmVuY2UpOwo+PiAgIH0KPj4KPj4gLXN0YXRp YyBib29sIGk5MTVfZ2VtX3JlcXVlc3RfaXNfY29tcGxldGVkKHN0cnVjdCBmZW5jZSAqcmVxX2Zl bmNlKQo+PiArLyoKPj4gKyAqIFRoZSByZXF1ZXN0IGlzIGJlaW5nIGFjdGl2ZWx5IHdhaXRlZCBv biwgc28gZW5hYmxlIGludGVycnVwdCBiYXNlZAo+PiArICogY29tcGxldGlvbiBzaWduYWxsaW5n Lgo+PiArICovCj4+ICt2b2lkIGk5MTVfZ2VtX3JlcXVlc3RfZW5hYmxlX2ludGVycnVwdChzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgCj4+ICpyZXEpCj4+ICt7Cj4+ICsgICAgaWYgKHJlcS0+ aXJxX2VuYWJsZWQpCj4+ICsgICAgICAgIHJldHVybjsKPj4gKwo+PiArICAgIFdBUk5fT04oIXJl cS0+cmluZy0+aXJxX2dldChyZXEtPnJpbmcpKTsKPj4gKyAgICByZXEtPmlycV9lbmFibGVkID0g dHJ1ZTsKPgo+IHJlcS0+aXJxX2VuYWJsZWQgbWFuaXB1bGF0aW9ucyBsb29rIHJhY3kuIEhlcmUg YW5kIGluIHJlcXVlc3QgZnJlZSBpdCAKPiBpcyBwcm90ZWN0ZWQgYnkgc3RydWN0X211dGV4LCBi dXQgdGhhdCBpcyBub3QgaGVsZCBpbiAKPiBpOTE1X2dlbV9yZXF1ZXN0X25vdGlmeS4gSW5pdGlh bCBmZWVsaW5nIGlzIHlvdSBzaG91bGQgdXNlIAo+IHJpbmctPmZlbmNlX2xvY2sgZXZlcnlwbGFj ZSB5b3UgcXVlcnkvbWFuaXB1bGF0ZSByZXEtPmlycV9lbmFibGVkLgoKVGhlIG9ubHkgYXN5bmNo cm9ub3VzIGFjY2VzcyBpcyBmcm9tIF9ub3RpZnkoKSB3aGljaCBkaXNhYmxlcyBJUlFzIGlmIAp0 aGUgZmxhZyBpcyBzZXQgYW5kIHRoZW4gY2xlYXJzIGl0LiBUaGF0IGNhbid0IHJhY2Ugd2l0aCB0 aGUgZW5hYmxlIApiZWNhdXNlIHRoZSBlbmFibGUgb25seSBzZXRzIHRoZSBmbGFnIGFmdGVyIHNl dHRpbmcgSVJRcyBvbi4gVGhlIHdvcnN0IAp0aGF0IGNhbiBoYXBwZW4gb24gYSByYWNlIGlzIHRo YXQgSVJRcyBhcmUgZW5hYmxlZCBhbmQgdGhlbiBpbW1lZGlhdGVseSAKZGlzYWJsZWQgLSB0cnVs eSBjb25jdXJyZW50IGV4ZWN1dGlvbiB3b3VsZCByZXN1bHQgaW4gb25lIHRlc3Qgb3IgdGhlIApv dGhlciBmYWlsaW5nIGFuZCBzbyBvbmx5IG9uZSBjb2RlIHBhdGggd291bGQgYmUgdGFrZW4uIFRo ZSBvbmx5IG90aGVyIAp1c2FnZSBpcyBpbiBfcmVxdWVzdF9mcmVlKCkgYnV0IHRoYXQgY2FuIG9u bHkgcnVuIHdoZW4gdGhlIGxhc3QgCnJlZmVyZW5jZSBoYXMgYmVlbiBkcm9wcGVkIGFuZCB0aGF0 IG1lYW5zIGl0IGlzIG5vIGxvbmdlciBvbiBhbnkgbGlzdCAKdGhhdCBfbm90aWZ5KCkgY2FuIHNl ZS4KCgo+PiArCj4+ICsgICAgLyoKPj4gKyAgICAgKiBCZWNhdXNlIHRoZSBpbnRlcnJ1cHQgaXMg b25seSBlbmFibGVkIG9uIGRlbWFuZCwgdGhlcmUgaXMgYSByYWNlCj4+ICsgICAgICogd2hlcmUg dGhlIGludGVycnVwdCBjYW4gZmlyZSBiZWZvcmUgYW55b25lIGlzIGxvb2tpbmcgZm9yIGl0LiBT bwo+PiArICAgICAqIGRvIGFuIGV4cGxpY2l0IGNoZWNrIGZvciBtaXNzZWQgaW50ZXJydXB0cy4K Pj4gKyAgICAgKi8KPj4gKyAgICBpOTE1X2dlbV9yZXF1ZXN0X25vdGlmeShyZXEtPnJpbmcpOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgYm9vbCBpOTE1X2dlbV9yZXF1ZXN0X2VuYWJsZV9zaWduYWxp bmcoc3RydWN0IGZlbmNlICpyZXFfZmVuY2UpCj4+ICAgewo+PiAgICAgICBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcSA9IGNvbnRhaW5lcl9vZihyZXFfZmVuY2UsCj4+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGVvZigqcmVxKSwgZmVuY2UpOwo+PiArCj4+ICsgICAgaTkx NV9nZW1fcmVxdWVzdF9yZWZlcmVuY2UocmVxKTsKPj4gKyAgICBXQVJOX09OKCFsaXN0X2VtcHR5 KCZyZXEtPnNpZ25hbF9saXN0KSk7Cj4KPiBJdCBsb29rcyB2ZXJ5IHVuc2FmZSB0byBwcm9jZWVk IG5vcm1hbGx5IGFmdGVyIHRoaXMgV0FSTl9PTi4gSXQgc2hvdWxkIAo+IHByb2JhYmx5IHJldHVy biBmYWxzZSBoZXJlIHRvIHByZXNlcnZlIGRhdGEgc3RydWN0dXJlIHNhbml0eS4KVGhpcyByZWFs bHkgc2hvdWxkIGJlIGEgQlVHX09OIGJ1dCBEYW5pZWwgZG9lc24ndCBsaWtlIHRob3NlLiBJdCBz aG91bGQgCmJlIGFuIGltcG9zc2libGUgY29kZSBwYXRoIGFuZCBub3Qgc29tZXRoaW5nIHRoYXQg Y2FuIGJlIGhpdCBieSB0aGUgdXNlciAKYmVpbmcgZHVtYi4gQW55d2F5LCB0aGlzIGNvZGUgaGFz IGFsbCBiZWVuIGNoYW5nZWQgaW4gdGhlIGxhdGVzdCAKaW5jYXJuYXRpb24uCgoKPgo+PiArIGxp c3RfYWRkX3RhaWwoJnJlcS0+c2lnbmFsX2xpc3QsICZyZXEtPnJpbmctPmZlbmNlX3NpZ25hbF9s aXN0KTsKPj4gKwo+PiArICAgIC8qCj4+ICsgICAgICogTm90ZSB0aGF0IHNpZ25hbGxpbmcgaXMg YWx3YXlzIGVuYWJsZWQgZm9yIGV2ZXJ5IHJlcXVlc3QgYmVmb3JlCj4+ICsgICAgICogdGhhdCBy ZXF1ZXN0IGlzIHN1Ym1pdHRlZCB0byB0aGUgaGFyZHdhcmUuIFRoZXJlZm9yZSB0aGVyZSBpcwo+ PiArICAgICAqIG5vIHJhY2UgY29uZGl0aW9uIHdoZXJlYnkgdGhlIHNpZ25hbCBjb3VsZCBwb3Ag b3V0IGJlZm9yZSB0aGUKPj4gKyAgICAgKiByZXF1ZXN0IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBs aXN0LiBIZW5jZSBubyBuZWVkIHRvIGNoZWNrCj4+ICsgICAgICogZm9yIGNvbXBsZXRpb24sIHVu ZG8gdGhlIGxpc3QgYWRkIGFuZCByZXR1cm4gZmFsc2UuCj4+ICsgICAgICoKPj4gKyAgICAgKiBO QjogSW50ZXJydXB0cyBhcmUgb25seSBlbmFibGVkIG9uIGRlbWFuZC4gVGh1cyB0aGVyZSBpcyBz dGlsbCBhCj4+ICsgICAgICogcmFjZSB3aGVyZSB0aGUgcmVxdWVzdCBjb3VsZCBjb21wbGV0ZSBi ZWZvcmUgdGhlIGludGVycnVwdCBoYXMKPj4gKyAgICAgKiBiZWVuIGVuYWJsZWQuIFRodXMgY2Fy ZSBtdXN0IGJlIHRha2VuIGF0IHRoYXQgcG9pbnQuCj4+ICsgICAgICovCj4+ICsKPj4gKyAgICBy ZXR1cm4gdHJ1ZTsKPj4gK30KPj4gKwo+PiArdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X25vdGlmeShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+PiArewo+PiArICAgIHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxLCAqcmVxX25leHQ7Cj4+ICsgICAgdW5zaWduZWQgbG9uZyBmbGFn czsKPj4gICAgICAgdTMyIHNlcW5vOwo+PiArICAgIExJU1RfSEVBRChmcmVlX2xpc3QpOwo+Pgo+ PiAtICAgIEJVR19PTihyZXEgPT0gTlVMTCk7Cj4+ICsgICAgaWYgKGxpc3RfZW1wdHkoJnJpbmct PmZlbmNlX3NpZ25hbF9saXN0KSkKPj4gKyAgICAgICAgcmV0dXJuOwo+PiArCj4+ICsgICAgc2Vx bm8gPSByaW5nLT5nZXRfc2Vxbm8ocmluZywgZmFsc2UpOwo+PiArCj4+ICsgICAgc3Bpbl9sb2Nr X2lycXNhdmUoJnJpbmctPmZlbmNlX2xvY2ssIGZsYWdzKTsKPj4gKyAgICBsaXN0X2Zvcl9lYWNo X2VudHJ5X3NhZmUocmVxLCByZXFfbmV4dCwgCj4+ICZyaW5nLT5mZW5jZV9zaWduYWxfbGlzdCwg c2lnbmFsX2xpc3QpIHsKPj4gKyAgICAgICAgaWYgKCFyZXEtPmNhbmNlbGxlZCkgewo+PiArICAg ICAgICAgICAgaWYgKCFpOTE1X3NlcW5vX3Bhc3NlZChzZXFubywgcmVxLT5zZXFubykpCj4+ICsg ICAgICAgICAgICAgICAgY29udGludWU7Cj4+Cj4+IC0gICAgc2Vxbm8gPSByZXEtPnJpbmctPmdl dF9zZXFubyhyZXEtPnJpbmcsIGZhbHNlLypsYXp5X2NvaGVyZW5jeSovKTsKPj4gKyAgICAgICAg ICAgIGZlbmNlX3NpZ25hbF9sb2NrZWQoJnJlcS0+ZmVuY2UpOwo+PiArICAgICAgICB9Cj4+ICsK Pj4gKyAgICAgICAgbGlzdF9kZWxfaW5pdCgmcmVxLT5zaWduYWxfbGlzdCk7Cj4KPiBJIGhhdmVu J3QgbWFuYWdlZCB0byBmaWd1cmUgb3V0IHdoeSBpcyB0aGlzIGFwcGFyZW50bHkgcmVtb3Zpbmcg Cj4gcmVxdWVzdHMgd2hpY2ggaGF2ZSBub3QgYmVlbiBzaWduYWxsZWQgZnJvbSB0aGUgc2lnbmFs X2xpc3Q/Cj4KPiBTaG91bGRuJ3QgdGhleSBiZSBtb3ZlZCB0byBmcmVlX2xpc3Qgb25seSBpZiBp OTE1X3NlcW5vX3Bhc3NlZD8KUmVxdWVzdHMgYXJlIG9ubHkgcmVtb3ZlZCBmcm9tIHRoZSBzaWdu YWwgbGlzdCBpZiBlaXRoZXIgYSkgdGhlIHNlcW5vIApoYXMgcGFzc2VkIG9yIGIpIHRoZSByZXF1 ZXN0IGhhcyBiZWVuIGNhbmNlbGxlZCBhbmQgdGh1cyB3aWxsIG5ldmVyIAphY3R1YWxseSBjb21w bGV0ZS4gTm90IHN1cmUgd2hhdCBvdGhlciBzY2VuYXJpbyB5b3UgYXJlIHNlZWluZy4KCj4KPj4g KyAgICAgICAgaWYgKHJlcS0+aXJxX2VuYWJsZWQpIHsKPj4gKyAgICAgICAgICAgIHJlcS0+cmlu Zy0+aXJxX3B1dChyZXEtPnJpbmcpOwo+PiArICAgICAgICAgICAgcmVxLT5pcnFfZW5hYmxlZCA9 IGZhbHNlOwo+PiArICAgICAgICB9Cj4+Cj4+IC0gICAgcmV0dXJuIGk5MTVfc2Vxbm9fcGFzc2Vk KHNlcW5vLCByZXEtPnNlcW5vKTsKPj4gKyAgICAgICAgLyogQ2FuJ3QgdW5yZWZlcmVuY2UgaGVy ZSBiZWNhdXNlIHRoYXQgbWlnaHQgZ3JhYiBmZW5jZV9sb2NrICovCj4+ICsgICAgICAgIGxpc3Rf YWRkX3RhaWwoJnJlcS0+dW5zaWduYWxfbGlzdCwgJmZyZWVfbGlzdCk7Cj4+ICsgICAgfQo+PiAr ICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmZlbmNlX2xvY2ssIGZsYWdzKTsKPj4g Kwo+PiArICAgIC8qIEl0IHNob3VsZCBub3cgYmUgc2FmZSB0byBhY3R1YWxseSBmcmVlIHRoZSBy ZXF1ZXN0cyAqLwo+PiArICAgIHdoaWxlICghbGlzdF9lbXB0eSgmZnJlZV9saXN0KSkgewo+PiAr ICAgICAgICByZXEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZmcmVlX2xpc3QsCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCwgdW5zaWduYWxfbGlzdCk7 Cj4+ICsgICAgICAgIGxpc3RfZGVsKCZyZXEtPnVuc2lnbmFsX2xpc3QpOwo+PiArCj4+ICsgICAg ICAgIGk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UocmVxKTsKPj4gKyAgICB9Cj4+ICAgfQo+ Pgo+PiAgIHN0YXRpYyB2b2lkIGk5MTVfZmVuY2VfdGltZWxpbmVfdmFsdWVfc3RyKHN0cnVjdCBm ZW5jZSAqZmVuY2UsIGNoYXIgCj4+ICpzdHIsIGludCBzaXplKQo+PiBAQCAtMjcxMSw3ICsyODEw LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmZW5jZV9vcHMgCj4+IGk5MTVfZ2VtX3JlcXVlc3Rf Zm9wcyA9IHsKPj4gICAgICAgLmdldF9kcml2ZXJfbmFtZSAgICA9IGk5MTVfZ2VtX3JlcXVlc3Rf Z2V0X2RyaXZlcl9uYW1lLAo+PiAgICAgICAuZ2V0X3RpbWVsaW5lX25hbWUgICAgPSBpOTE1X2dl bV9yZXF1ZXN0X2dldF90aW1lbGluZV9uYW1lLAo+PiAgICAgICAuZW5hYmxlX3NpZ25hbGluZyAg ICA9IGk5MTVfZ2VtX3JlcXVlc3RfZW5hYmxlX3NpZ25hbGluZywKPj4gLSAgICAuc2lnbmFsZWQg ICAgICAgID0gaTkxNV9nZW1fcmVxdWVzdF9pc19jb21wbGV0ZWQsCj4+ICAgICAgIC53YWl0ICAg ICAgICAgICAgPSBmZW5jZV9kZWZhdWx0X3dhaXQsCj4+ICAgICAgIC5yZWxlYXNlICAgICAgICA9 IGk5MTVfZ2VtX3JlcXVlc3RfcmVsZWFzZSwKPj4gICAgICAgLmZlbmNlX3ZhbHVlX3N0ciAgICA9 IGk5MTVfZmVuY2VfdmFsdWVfc3RyLAo+PiBAQCAtMjc5MSw2ICsyODg5LDcgQEAgaW50IGk5MTVf Z2VtX3JlcXVlc3RfYWxsb2Moc3RydWN0IAo+PiBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4+ICAg ICAgICAgICBnb3RvIGVycjsKPj4gICAgICAgfQo+Pgo+PiArICAgIElOSVRfTElTVF9IRUFEKCZy ZXEtPnNpZ25hbF9saXN0KTsKPj4gICAgICAgZmVuY2VfaW5pdCgmcmVxLT5mZW5jZSwgJmk5MTVf Z2VtX3JlcXVlc3RfZm9wcywgJnJpbmctPmZlbmNlX2xvY2ssCj4+IGN0eC0+ZW5naW5lW3Jpbmct PmlkXS5mZW5jZV90aW1lbGluZS5mZW5jZV9jb250ZXh0LAo+PiBpOTE1X2ZlbmNlX3RpbWVsaW5l X2dldF9uZXh0X3NlcW5vKCZjdHgtPmVuZ2luZVtyaW5nLT5pZF0uZmVuY2VfdGltZWxpbmUpKTsK Pj4gQEAgLTI5MTMsNiArMzAxMiwxMyBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9yZXNldF9yaW5n X2NsZWFudXAoc3RydWN0IAo+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4KPj4gICAg ICAgICAgIGk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHJlcXVlc3QpOwo+PiAgICAgICB9Cj4+ICsK Pj4gKyAgICAvKgo+PiArICAgICAqIE1ha2Ugc3VyZSBhbnkgcmVxdWVzdHMgdGhhdCB3ZXJlIG9u IHRoZSBzaWduYWwgcGVuZGluZyBsaXN0IGdldAo+PiArICAgICAqIGNsZWFuZWQgdXAuCj4+ICsg ICAgICovCj4+ICsgICAgaTkxNV9nZW1fcmVxdWVzdF9ub3RpZnkocmluZyk7Cj4+ICsgICAgaTkx NV9nZW1fcmV0aXJlX3JlcXVlc3RzX3JpbmcocmluZyk7Cj4KPiBXb3VsZCBpOTE1X2dlbV9yZXRp cmVfcmVxdWVzdHNfcmluZyBiZSBlbm91Z2ggZ2l2ZW4gaG93IGl0IGNhbGxzIAo+IGk5MTVfZ2Vt X3JlcXVlc3Rfbm90aWZ5IGl0c2VsZiBhcyB0aGUgZmlyc3QgdGhpbmcgYmVsb3c/Cj4KT29wcywg bGVmdCBvdmVyIGZyb20gYmVmb3JlIHJldGlyZSBjYWxsZWQgbm90aWZ5IGV4cGxpY2l0bHkuCgo+ PiAgIH0KPj4KPj4gICB2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZmVuY2VzKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4+IEBAIC0yOTY4LDYgKzMwNzQsMTMgQEAgaTkxNV9nZW1fcmV0aXJlX3JlcXVl c3RzX3Jpbmcoc3RydWN0IAo+PiBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4+ICAgewo+PiAgICAg ICBXQVJOX09OKGk5MTVfdmVyaWZ5X2xpc3RzKHJpbmctPmRldikpOwo+Pgo+PiArICAgIC8qCj4+ ICsgICAgICogSWYgbm8tb25lIGhhcyB3YWl0ZWQgb24gYSByZXF1ZXN0IHJlY2VudGx5IHRoZW4g aW50ZXJydXB0cyB3aWxsCj4+ICsgICAgICogbm90IGhhdmUgYmVlbiBlbmFibGVkIGFuZCB0aHVz IG5vIHJlcXVlc3RzIHdpbGwgZXZlciBiZSAKPj4gbWFya2VkIGFzCj4+ICsgICAgICogY29tcGxl dGVkLiBTbyBkbyBhbiBpbnRlcnJ1cHQgY2hlY2sgbm93Lgo+PiArICAgICAqLwo+PiArICAgIGk5 MTVfZ2VtX3JlcXVlc3Rfbm90aWZ5KHJpbmcpOwo+PiArCj4+ICAgICAgIC8qIFJldGlyZSByZXF1 ZXN0cyBmaXJzdCBhcyB3ZSB1c2UgaXQgYWJvdmUgZm9yIHRoZSBlYXJseSByZXR1cm4uCj4+ICAg ICAgICAqIElmIHdlIHJldGlyZSByZXF1ZXN0cyBsYXN0LCB3ZSBtYXkgdXNlIGEgbGF0ZXIgc2Vx bm8gYW5kIHNvIAo+PiBjbGVhcgo+PiAgICAgICAgKiB0aGUgcmVxdWVzdHMgbGlzdHMgd2l0aG91 dCBjbGVhcmluZyB0aGUgYWN0aXZlIGxpc3QsIGxlYWRpbmcgdG8KPj4gQEAgLTUzNDUsNiArNTQ1 OCw3IEBAIGluaXRfcmluZ19saXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+PiAg IHsKPj4gICAgICAgSU5JVF9MSVNUX0hFQUQoJnJpbmctPmFjdGl2ZV9saXN0KTsKPj4gICAgICAg SU5JVF9MSVNUX0hFQUQoJnJpbmctPnJlcXVlc3RfbGlzdCk7Cj4+ICsgICAgSU5JVF9MSVNUX0hF QUQoJnJpbmctPmZlbmNlX3NpZ25hbF9saXN0KTsKPj4gICAgICAgSU5JVF9MSVNUX0hFQUQoJnJp bmctPmRlbGF5ZWRfZnJlZV9saXN0KTsKPj4gICB9Cj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf aXJxLmMKPj4gaW5kZXggZDg3ZjE3My4uZTQ0NjUwOSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2lycS5jCj4+IEBAIC04NTMsNiArODUzLDggQEAgc3RhdGljIHZvaWQgbm90aWZ5X3Jpbmcoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAKPj4gKnJpbmcpCj4+Cj4+ICAgICAgIHRyYWNlX2k5MTVfZ2Vt X3JlcXVlc3Rfbm90aWZ5KHJpbmcpOwo+Pgo+PiArICAgIGk5MTVfZ2VtX3JlcXVlc3Rfbm90aWZ5 KHJpbmcpOwo+PiArCj4KPiBIb3cgbWFueSByZXF1ZXN0cyBhcmUgdHlwaWNhbGx5IG9uIHNpZ25h bF9saXN0IG9uIHNvbWUgdHlwaWNhbCAKPiB3b3JrbG9hZHM/IFRoaXMgY291bGQgYmUgYSBzaWdu aWZpY2FudCBwZXJmb3JtYW5jZSBjaGFuZ2Ugc2luY2Ugb24gCj4gZXZlcnkgdXNlciBpbnRlcnJ1 cHQgaXQgd291bGQgdGFsayBpdCBhbGwgcG90ZW50aWFsbHkgb25seSByZW1vdmluZyAKPiBvbmUg cmVxdWVzdCBhdCBhIHRpbWUuCj4KT2J2aW91c2x5LCBzb21lIG9mIHRoZSBJR1QgdGVzdHMgY2Fu IHByb2R1Y2UgdmVyeSBsYXJnZSByZXF1ZXN0IGxpc3RzIAooZS5nLiBnZW1fZXhlY19ub3ApIGJ1 dCBydW5uaW5nICdub3JtYWwnIHN0dWZmIHJhcmVseSBzZWVtcyB0byBnZW5lcmF0ZSAKYSBsb25n IGxpc3QuIEUuZy4gcnVubmluZyBHTEJlbmNoICsgR0xYR2VhcnMgb24gYW4gVWJ1bnR1IGRlc2t0 b3AgSSBnZXQgCjk1JSBvZiB0aGUgdGltZSB0aGVyZSBhcmUgdGVuIG9yIGZld2VyIHJlcXVlc3Rz IGluIHRoZSBsaXN0IGJ1dCB0aGUgbG9vcCAKaXRlcmF0ZXMgb25seSBvbmNlICg0OSUpIG9yIHR3 aWNlICg0NiUpIGJlY2F1c2UgdGhlIGZpcnN0IHJlcXVlc3QgZ2V0cyAKc2lnbmFsbGVkIGFuZCB0 aGUgc2Vjb25kIChpZiBwcmVzZW50KSBhYm9ydHMgdGhlIGxvb3AuCgpUaGUgYmlnZ2VzdCBwcm9i bGVtIHNlZW1zIHRvIGJlIHRoYXQgdGhlIGhhcmR3YXJlIGlzIGJyYWluIGRlYWQgd2l0aCAKcmVz cGVjdCB0byBnZW5lcmF0aW5nIGludGVycnVwdHMuIFNvIGlmIHR3byByZXF1ZXN0cyBjb21wbGV0 ZSBpbiBxdWljayAKc3VjY2Vzc2lvbiBhbmQgdGhlIElTUiBvbmx5IGdldHMgdG8gc2VlIHRoZSBz ZWNvbmQgc2Vxbm8sIGl0IHN0aWxsIGdldHMgCmNhbGxlZCBhIHNlY29uZCB0aW1lLiBUaHVzIHdl IGFjdHVhbGx5IGdldCBhIHJpZGljdWxvdXMgZmlndXJlIG9mIDYwJSBvZiAKSVNSIGNhbGxzIGJl aW5nIG5vLW9wcyBiZWNhdXNlIHRoZSBzZXFubyBoYXMgbm90IGFjdHVhbGx5IGFkdmFuY2VkLiBU aGUgCmNvZGUgbm93IGNoZWNrcyBmb3IgZHVwbGljYXRlIHNlcW5vcyBhbmQgZWFybHkgZXhpdHMu IE5vdCBzdXJlIGhvdyB0byAKZ2V0IHJpZCBvZiB0aGUgY2FsbCBjb21wbGV0ZWx5LgoKCj4gVGhl c2UgYXJlIGp1c3QgcmV2aWV3IGNvbW1lbnRzIG9uIHRoaXMgcGFydGljdWxhciBwYXRjaCB3aXRo b3V0IAo+IHRoaW5raW5nIHlldCBvZiB0aGUgYmlnZ2VyIGRlc2lnbiBxdWVzdGlvbnMgRGFuaWVs IGhhcyByYWlzZWQuCj4KPiBSZWdhcmRzLAo+Cj4gVHZydGtvCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=