From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 55107C352B6 for ; Tue, 14 Apr 2020 13:19:36 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 352992063A for ; Tue, 14 Apr 2020 13:19:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 352992063A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AD3A66E4CD; Tue, 14 Apr 2020 13:19:35 +0000 (UTC) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id D580B6E4CD for ; Tue, 14 Apr 2020 13:19:34 +0000 (UTC) IronPort-SDR: eRc/TuJMUiNKsNIRUlXlYfTkODQImxxmoLaFrH5i9d3Dmz4utxPYobpUFHAoxliTxcDrTJ6xO/ CK8FmEDiEFPA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Apr 2020 06:19:34 -0700 IronPort-SDR: S+uuG/209tJCqvpcTK3cMEDWYyoo3kEIHWP82bItiLHDUm0IfNf7xOohpMewVu9KYSn/W/fur0 FlcA5dWDK98w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,382,1580803200"; d="scan'208";a="427057812" Received: from marinasm-mobl1.ccr.corp.intel.com (HELO [10.252.42.43]) ([10.252.42.43]) by orsmga005.jf.intel.com with ESMTP; 14 Apr 2020 06:19:32 -0700 To: Venkata Sandeep Dhanalakota , intel-gfx@lists.freedesktop.org References: <20200410165158.29546-1-venkata.s.dhanalakota@intel.com> <20200410165158.29546-4-venkata.s.dhanalakota@intel.com> From: Lionel Landwerlin Organization: Intel Corporation (UK) Ltd. - Co. Reg. #1134945 - Pipers Way, Swindon SN3 1RJ Message-ID: Date: Tue, 14 Apr 2020 16:19:32 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200410165158.29546-4-venkata.s.dhanalakota@intel.com> Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH 4/4] drm/selftests: selftest for timeline semaphore X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: chris.p.wilson@intel.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" SSBsZWZ0IHNvbWUgY29tbWVudHMgYmVsb3csIGJ1dCBJIHdvbmRlciBhYm91dCB0aGUgdmFsdWVz IG9mIHRoZXNlIHRlc3RzIApjb21wYXJlZCB0byBDaHJpcycgWzFdLgpNdWNoIGxpa2UgdGhlIHRl c3RzIGZyb20gQ2hyaXMgaXQgbW9zdGx5IGV4ZXJjaXNlcyB0aGUgZG1hX2ZlbmNlXyogQVBJLgoK T24gdGhlIGRybV9zeW5jb2JqIEFQSSBpdCdzIGp1c3QgcmVwbGFjZV9mZW5jZSgpLCBnZXRfZmVu Y2UoKSwgCmFkZF9wb2ludCgpICh0aGF0IGxhc3Qgb25lIGNhbm5vdCBmYWlsKS4KCi1MaW9uZWwK ClsxXSA6IGh0dHBzOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9wYXRjaC8zNjA4NjUvP3Nl cmllcz03NTc0MyZyZXY9MQoKT24gMTAvMDQvMjAyMCAxOTo1MSwgVmVua2F0YSBTYW5kZWVwIERo YW5hbGFrb3RhIHdyb3RlOgo+IHNpbXBsZSB0ZXN0cyB1c2luZyBkcm0gYXBpIGZvciB0aW1lbGlu ZSBzZW1hcGhvcmUuCj4KPiBTaWduZWQtb2ZmLWJ5OiBWZW5rYXRhIFNhbmRlZXAgRGhhbmFsYWtv dGEgPHZlbmthdGEucy5kaGFuYWxha290YUBpbnRlbC5jb20+Cj4gLS0tCj4gICBkcml2ZXJzL2dw dS9kcm0vc2VsZnRlc3RzL01ha2VmaWxlICAgICAgICAgICAgfCAgIDIgKy0KPiAgIC4uLi9kcm0v c2VsZnRlc3RzL2RybV90aW1lbGluZV9zZWxmdGVzdHMuaCAgICB8ICAxNiArCj4gICAuLi4vc2Vs ZnRlc3RzL3Rlc3QtZHJtX3RpbWVsaW5lX3NlbWFwaG9yZS5jICAgfCA1NDUgKysrKysrKysrKysr KysrKysrCj4gICAzIGZpbGVzIGNoYW5nZWQsIDU2MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9u KC0pCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9kcm1f dGltZWxpbmVfc2VsZnRlc3RzLmgKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vc2VsZnRlc3RzL3Rlc3QtZHJtX3RpbWVsaW5lX3NlbWFwaG9yZS5jCj4KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9z ZWxmdGVzdHMvTWFrZWZpbGUKPiBpbmRleCAwODU2ZTRiMTJmNzAuLjViY2VlZjdjOWQwMiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL01ha2VmaWxlCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9NYWtlZmlsZQo+IEBAIC00LDQgKzQsNCBAQCB0ZXN0LWRy bV9tb2Rlc2V0LXkgOj0gdGVzdC1kcm1fbW9kZXNldF9jb21tb24ubyB0ZXN0LWRybV9wbGFuZV9o ZWxwZXIubyBcCj4gICAJCSAgICAgIHRlc3QtZHJtX2RhbWFnZV9oZWxwZXIubyB0ZXN0LWRybV9k cF9tc3RfaGVscGVyLm8gXAo+ICAgCQkgICAgICB0ZXN0LWRybV9yZWN0Lm8KPiAgIAo+IC1vYmot JChDT05GSUdfRFJNX0RFQlVHX1NFTEZURVNUKSArPSB0ZXN0LWRybV9tbS5vIHRlc3QtZHJtX21v ZGVzZXQubyB0ZXN0LWRybV9jbWRsaW5lX3BhcnNlci5vCj4gK29iai0kKENPTkZJR19EUk1fREVC VUdfU0VMRlRFU1QpICs9IHRlc3QtZHJtX21tLm8gdGVzdC1kcm1fbW9kZXNldC5vIHRlc3QtZHJt X2NtZGxpbmVfcGFyc2VyLm8gdGVzdC1kcm1fdGltZWxpbmVfc2VtYXBob3JlLm8KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9kcm1fdGltZWxpbmVfc2VsZnRlc3RzLmgg Yi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL2RybV90aW1lbGluZV9zZWxmdGVzdHMuaAo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi44OTIyYTFlZWQ1MjUKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9kcm1fdGltZWxp bmVfc2VsZnRlc3RzLmgKPiBAQCAtMCwwICsxLDE2IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wICovCj4gKy8qIExpc3QgZWFjaCB1bml0IHRlc3QgYXMgc2VsZnRlc3Qo bmFtZSwgZnVuY3Rpb24pCj4gKyAqCj4gKyAqIFRoZSBuYW1lIGlzIHVzZWQgYXMgYm90aCBhbiBl bnVtIGFuZCBleHBhbmRlZCBhcyBpZ3RfX25hbWUgdG8gY3JlYXRlCj4gKyAqIGEgbW9kdWxlIHBh cmFtZXRlci4gSXQgbXVzdCBiZSB1bmlxdWUgYW5kIGxlZ2FsIGZvciBhIEMgaWRlbnRpZmllci4K PiArICoKPiArICogVGVzdHMgYXJlIGV4ZWN1dGVkIGluIG9yZGVyIGJ5IGlndC9kcm1fdGltZWxp bmVfc2VsZnRlc3RzCj4gKyAqLwo+ICtzZWxmdGVzdChzYW5pdHljaGVjaywgaWd0X3Nhbml0eWNo ZWNrKSAvKiBrZWVwIGZpcnN0IChzZWxmY2hlY2sgZm9yIGlndCkgKi8KPiArc2VsZnRlc3QoY2hh aW5iYXNpYywgaWd0X2NoYWluYmFzaWMpCj4gK3NlbGZ0ZXN0KHdhaXRjaGFpbiwgaWd0X3dhaXRj aGFpbikKPiArc2VsZnRlc3Qoc2lnbmFsc2Vxbm8sIGlndF9zaWduYWxzZXFubykKPiArc2VsZnRl c3Qod2FpdHNlcW5vLCBpZ3Rfd2FpdHNlcW5vKQo+ICtzZWxmdGVzdChhZGR1bm9yZGVyLCBpZ3Rf YWRkdW5vcmRlcikKPiArc2VsZnRlc3QoZmluZHNlcW5vLCBpZ3RfZmluZHNlcW5vKQo+ICtzZWxm dGVzdChpZ3RfZm9yd2FyZCwgaWd0X2ZvcndhcmQpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9zZWxmdGVzdHMvdGVzdC1kcm1fdGltZWxpbmVfc2VtYXBob3JlLmMgYi9kcml2ZXJzL2dw dS9kcm0vc2VsZnRlc3RzL3Rlc3QtZHJtX3RpbWVsaW5lX3NlbWFwaG9yZS5jCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjhhOTY0ZDMwMmU0Mgo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3QtZHJtX3RpbWVsaW5l X3NlbWFwaG9yZS5jCj4gQEAgLTAsMCArMSw1NDUgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb25seQo+ICsvKgo+ICsgKiBUZXN0IGNhc2VzIGZvciB0aGUgdGltZWxp bmUgc2VtYXBob3JlCj4gKyAqLwo+ICsKPiArI2RlZmluZSBwcl9mbXQoZm10KSAiZHJtX3RsOiAi IGZtdAo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9y YW5kb20uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21tLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9rdGhy ZWFkLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zY2hlZC9zaWduYWwuaD4KPiArCj4gKyNpbmNsdWRl IDxkcm0vZHJtX3N5bmNvYmouaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1mZW5jZS5oPgo+ICsj aW5jbHVkZSA8bGludXgvZG1hLWZlbmNlLWNoYWluLmg+Cj4gKwo+ICsjaW5jbHVkZSAiLi4vbGli L2RybV9yYW5kb20uaCIKPiArCj4gKyNkZWZpbmUgVEVTVFMgImRybV90aW1lbGluZV9zZWxmdGVz dHMuaCIKPiArI2luY2x1ZGUgImRybV9zZWxmdGVzdC5oIgo+ICsKPiArI2RlZmluZSBNQVhfVElN RUxJTkVTIDY0Cj4gKyNkZWZpbmUgTUFYX1RIUkVBRFMgKDIgKiBNQVhfVElNRUxJTkVTKQo+ICsK PiArc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpzbGFiX3RpbWVsaW5lOwo+ICtzdGF0aWMgc3Ry dWN0IGttZW1fY2FjaGUgKnNsYWJfZmVuY2VfY2hhaW47Cj4gKwo+ICtzdHJ1Y3QgbW9ja190aW1l bGluZSB7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmo7Cj4gKwo+ICsJLyogY2Igd2hl biBiYXNlIGlzIHNpZ25hbGxlZCAqLwo+ICsJc3RydWN0IGRtYV9mZW5jZV9jYiBjYjsKPiArCXN0 cnVjdCBkbWFfZmVuY2UgYmFzZTsKPiArCS8qIGxvY2sgZm9yIGRtYV9mZW5jZSAqLwo+ICsJc3Bp bmxvY2tfdCBsb2NrOwo+ICsJdTY0IHBvaW50Owo+ICsJdTMyIGZsYWdzOwo+ICt9Owo+ICsKPiAr c3RydWN0IGZlbmNlX2NoYWluIHsKPiArCXN0cnVjdCBkbWFfZmVuY2VfY2hhaW4gY2hhaW47Cj4g KwlzdHJ1Y3QgZG1hX2ZlbmNlIGZlbmNlOwo+ICsJLyogY2Igd2hlbiBmZW5jZSBpcyBzaWduYWxs ZWQgKi8KPiArCXN0cnVjdCBkbWFfZmVuY2VfY2IgY2I7Cj4gKwlhdG9taWNfdCBzaWduYWxlcnM7 Cj4gKwlzcGlubG9ja190IGxvY2s7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgY2hhaW5faW5mbyB7Cj4g KwlzdHJ1Y3QgZmVuY2VfY2hhaW4gKipjaGFpbnM7Cj4gKwlpbnQgbmNoYWluczsKPiArfTsKPiAr Cj4gK3N0YXRpYyBjb25zdCBjaGFyICptb2NrX25hbWUoc3RydWN0IGRtYV9mZW5jZSAgKnMpCj4g K3sKPiArCXJldHVybiAidGltZWxpbmUiOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtb2NrX3Jl bGVhc2Uoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCj4gK3sKPiArCXByX2RlYnVnKCJyZWxlYXNl ICVsbGRcbiIsZmVuY2UtPnNlcW5vKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBk bWFfZmVuY2Vfb3BzIG1vY2tfb3BzID0gewo+ICsJLmdldF9kcml2ZXJfbmFtZSA9IG1vY2tfbmFt ZSwKPiArCS5nZXRfdGltZWxpbmVfbmFtZSA9IG1vY2tfbmFtZSwKPiArCS5yZWxlYXNlID0gbW9j a19yZWxlYXNlLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgZmVuY2VfY2FsbGJhY2soc3RydWN0 IGRtYV9mZW5jZSAqZiwgc3RydWN0IGRtYV9mZW5jZV9jYiAqY2IpCj4gK3sKPiArCXN0cnVjdCBm ZW5jZV9jaGFpbiAqdCA9Cj4gKwkJCWNvbnRhaW5lcl9vZihjYiwgc3RydWN0IGZlbmNlX2NoYWlu LCBjYik7Cj4gKwo+ICsJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnQtPnNpZ25hbGVycykpCj4g KwkJZG1hX2ZlbmNlX3NpZ25hbCgmdC0+ZmVuY2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0 aW1lbGluZV9jYWxsYmFjayhzdHJ1Y3QgZG1hX2ZlbmNlICpmLCBzdHJ1Y3QgZG1hX2ZlbmNlX2Ni ICpjYikKPiArewo+ICsJc3RydWN0IG1vY2tfdGltZWxpbmUgKnQgPQo+ICsJCQljb250YWluZXJf b2YoY2IsIHN0cnVjdCBtb2NrX3RpbWVsaW5lLCBjYik7Cj4gKwlkbWFfZmVuY2Vfc2lnbmFsKCZ0 LT5iYXNlKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBtb2NrX3RpbWVsaW5lICp0aW1lbGlu ZSh1NjQgcG9pbnQsIHUzMiBmbGFncykKPiArewo+ICsJc3RydWN0IG1vY2tfdGltZWxpbmUgKnQ7 Cj4gKwo+ICsJdCA9IGttZW1fY2FjaGVfYWxsb2Moc2xhYl90aW1lbGluZSwgR0ZQX0tFUk5FTCB8 IF9fR0ZQX1pFUk8pOwo+ICsJaWYgKCF0KQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCXNwaW5f bG9ja19pbml0KCZ0LT5sb2NrKTsKPiArCWRtYV9mZW5jZV9pbml0KCZ0LT5iYXNlLCAmbW9ja19v cHMsICZ0LT5sb2NrLCAwLCBwb2ludCk7Cj4gKwlkcm1fc3luY29ial9jcmVhdGUoJnQtPnN5bmNv YmosIGZsYWdzLCBkbWFfZmVuY2VfZ2V0KCZ0LT5iYXNlKSk7Cj4gKwl0LT5wb2ludCA9IHBvaW50 Owo+ICsKPiArCXJldHVybiB0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGZlbmNlX2NoYWlu KiBmZW5jZV9jaGFpbihzdHJ1Y3QgZG1hX2ZlbmNlICpwcmV2LAo+ICsJCQkJICAgIHU2NCBzZXFu bykKPiArewo+ICsJc3RydWN0IGZlbmNlX2NoYWluICpmOwo+ICsKPiArCWYgPSBrbWVtX2NhY2hl X2FsbG9jKHNsYWJfZmVuY2VfY2hhaW4sIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKPiArCj4g KwlpZiAoIWYpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJc3Bpbl9sb2NrX2luaXQoJmYtPmxv Y2spOwo+ICsJZG1hX2ZlbmNlX2luaXQoJmYtPmZlbmNlLCAmbW9ja19vcHMsCj4gKwkJCSAgICAg ICAmZi0+bG9jaywgMCwgc2Vxbm8pOwo+ICsJZG1hX2ZlbmNlX2NoYWluX2luaXQoJmYtPmNoYWlu LAo+ICsJCQkgICAgIHByZXYsCj4gKwkJCSAgICAgZG1hX2ZlbmNlX2dldCgmZi0+ZmVuY2UpLAo+ ICsJCQkgICAgIHNlcW5vKTsKPiArCj4gKwlyZXR1cm4gZjsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgYWxsb2NhdGVfY2hhaW5zKHN0cnVjdCBjaGFpbl9pbmZvICpjaSwgaW50IGNvdW50LCBpbnQg c3RhcnQpCj4gK3sKPiArCXN0cnVjdCBkbWFfZmVuY2UgKnByZXZfY2hhaW4gPSBOVUxMOwo+ICsJ c3RydWN0IGZlbmNlX2NoYWluICoqY2hhaW5zOwo+ICsJaW50IGk7Cj4gKwo+ICsJY2ktPmNoYWlu cyA9IGt2bWFsbG9jX2FycmF5KGNvdW50LCBzaXplb2Yoc3RydWN0IGZlbmNlX2NoYWluICopLAo+ ICsJCQkJR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwo+ICsJaWYgKCFjaS0+Y2hhaW5zKQo+ICsJ CXJldHVybjsKPiArCj4gKwljaGFpbnMgPSBjaS0+Y2hhaW5zOwo+ICsJY2ktPm5jaGFpbnMgPSBj b3VudDsKPiArCWZvciAoaSA9IDA7aSA8IGNpLT5uY2hhaW5zOyBpKyspIHsKPiArCQljaGFpbnNb aV0gPSBmZW5jZV9jaGFpbihwcmV2X2NoYWluLCBzdGFydCArIGkpOwo+ICsJCXByZXZfY2hhaW4g PSAmY2hhaW5zW2ldLT5jaGFpbi5iYXNlOwo+ICsJCWRtYV9mZW5jZV9nZXQocHJldl9jaGFpbik7 Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRlbGV0ZV9jaGFpbnMoc3RydWN0IGNoYWlu X2luZm8gKmNpKQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgY2ktPm5j aGFpbnM7IGkrKykgewo+ICsJCWRtYV9mZW5jZV9yZWxlYXNlKCZjaS0+Y2hhaW5zW2ldLT5mZW5j ZS5yZWZjb3VudCk7Cj4gKwkJa21lbV9jYWNoZV9mcmVlKHNsYWJfZmVuY2VfY2hhaW4sIGNpLT5j aGFpbnNbaV0pOwo+ICsJfQo+ICsJa3ZmcmVlKGNpLT5jaGFpbnMpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGlndF9zYW5pdHljaGVjayh2b2lkICppZ25vcmVkKQo+ICt7Cj4gKwlzdHJ1Y3QgbW9j a190aW1lbGluZSAqdDsKPiArCXN0cnVjdCBkbWFfZmVuY2UgKmY7Cj4gKwlpbnQgZXJyID0gMDsK PiArCj4gKwl0ID0gdGltZWxpbmUoMSwgMCk7Cj4gKwo+ICsJaWYgKCF0KQo+ICsJCXJldHVybiAt RU5PTUVNOwo+ICsKPiArCWRtYV9mZW5jZV9zaWduYWwoJnQtPmJhc2UpOwo+ICsKPiArCWYgPSBk cm1fc3luY29ial9mZW5jZV9nZXQodC0+c3luY29iaik7Cj4gKwlpZiAoIWRtYV9mZW5jZV9pc19z aWduYWxlZChmKSkKPiArCQllcnIgPSAtMTsKPiArCj4gKwlkbWFfZmVuY2VfcHV0KCZ0LT5iYXNl KTsKPiArCWRybV9zeW5jb2JqX3B1dCh0LT5zeW5jb2JqKTsKPiArCWttZW1fY2FjaGVfZnJlZShz bGFiX3RpbWVsaW5lLCB0KTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg aWd0X2NoYWluYmFzaWModm9pZCAqaWdub3JlZCkKPiArewo+ICsJc3RydWN0IGZlbmNlX2NoYWlu ICpsYXN0LCAqY2hhaW47Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlICpmaXJzdCA9IE5VTEw7Cj4gKwlz dHJ1Y3QgY2hhaW5faW5mbyBjaTsKPiArCWludCBpLCBjb3VudCA9IDEwOwo+ICsJaW50IGVyciA9 IDA7Cj4gKwo+ICsJYWxsb2NhdGVfY2hhaW5zKCZjaSwgY291bnQsIDApOwo+ICsJaWYgKElTX0VS Ul9PUl9OVUxMKGNpLmNoYWlucykpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJY2hhaW4g PSBjaS5jaGFpbnNbMF07Cj4gKwlmaXJzdCA9ICZjaGFpbi0+ZmVuY2U7Cj4gKwo+ICsJZm9yIChp ID0gMTsgaSA8IGNvdW50OyBpKyspIHsKPiArCQljaGFpbiA9IGNpLmNoYWluc1tpXTsKPiArCQlk bWFfZmVuY2Vfc2lnbmFsKCZjaGFpbi0+ZmVuY2UpOwo+ICsJCWxhc3QgPSBjaGFpbjsKPiArCX0K CgpJIGd1ZXNzIHlvdSBjb3VsZCBhZGQgYW5vdGhlciBjaGVjayBoZXJlIDoKCmlmIChkbWFfZmVu Y2VfaXNfc2lnbmFsZWQoJmxhc3QtPmNoYWluLmJhc2UpKQoKIMKgwqDCoCBlcnIgPSAtMTsKCgo+ ICsJZG1hX2ZlbmNlX3NpZ25hbChmaXJzdCk7Cj4gKwo+ICsJaWYgKCFkbWFfZmVuY2VfaXNfc2ln bmFsZWQoJmxhc3QtPmNoYWluLmJhc2UpKQo+ICsJCWVyciA9IC0xOwo+ICsKPiArCWRlbGV0ZV9j aGFpbnMoJmNpKTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X2Zp bmRzZXFubyh2b2lkICppZ25vcmVkKQo+ICt7Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlICpmLCAqZmly c3Q7Cj4gKwlzdHJ1Y3QgY2hhaW5faW5mbyBjaTsKPiArCWludCBjb3VudCA9IDE1LCBzdGFydCA9 IDM7Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwlhbGxvY2F0ZV9jaGFpbnMoJmNpLCBjb3VudCwg c3RhcnQpOwo+ICsJaWYgKElTX0VSUl9PUl9OVUxMKGNpLmNoYWlucykpCj4gKwkJcmV0dXJuIC1F Tk9NRU07Cj4gKwo+ICsJZiA9ICZjaS5jaGFpbnNbY291bnQgLSAxXS0+Y2hhaW4uYmFzZTsKCkRv bid0IHlvdSBuZWVkIHRvIGluY3JlbWVudCB0aGUgcmVmY291bnQgb2YgZj8KCk90aGVyd2lzZSBk ZWxldGVfY2hhaW5zKCkgd2lsbCB1bnJlZiBvbmNlIHRvbyBtYW55IHRpbWUuCgoKCj4gKwlmaXJz dCA9ICZjaS5jaGFpbnNbMF0tPmNoYWluLmJhc2U7Cj4gKwo+ICsJZG1hX2ZlbmNlX2NoYWluX2Zp bmRfc2Vxbm8oJmYsIDEpOwo+ICsJaWYgKGYgJiYgZiAhPSBmaXJzdCkgewo+ICsJCXByX2Vycigi SW5jb3JyZWN0IGNoYWluLWZlbmNlLnNlcW5vOiVsbGQgcmVwb3J0ZWQgZm9yIGNvbXBsZXRlZCBz ZXFubzoxXG4iLAo+ICsJCQlmLT5zZXFubyk7Cj4gKwkJZG1hX2ZlbmNlX2dldChmKTsKPiArCQll cnIgPSBkbWFfZmVuY2VfY2hhaW5fZmluZF9zZXFubygmZiwgc3RhcnQpOwo+ICsJCWRtYV9mZW5j ZV9wdXQoZik7Cj4gKwkJaWYgKGVycikgewo+ICsJCQlwcl9lcnIoIlJlcG9ydGVkICVkIGZvciBm aW5kaW5nIHNlbGYhXG4iLCBlcnIpOwo+ICsJCQllcnIgPSAtRUlOVkFMOwo+ICsJCX0KPiArCX0K PiArCj4gKwlkZWxldGVfY2hhaW5zKCZjaSk7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGlndF93YWl0Y2hhaW4odm9pZCAqaWdub3JlZCkKPiArewo+ICsJc3RydWN0IGZl bmNlX2NoYWluICpsYXN0Owo+ICsJc3RydWN0IGNoYWluX2luZm8gY2k7Cj4gKwlzdHJ1Y3QgbW9j a190aW1lbGluZSAqdDsKPiArCXN0cnVjdCBkbWFfZmVuY2UgKmY7Cj4gKwlpbnQgY291bnQgPSAx MCwgaTsKPiArCWludCBzdGFydCA9IDc7Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwl0ID0gdGlt ZWxpbmUoc3RhcnQsIDB4MCk7Cj4gKwo+ICsJaWYgKCF0KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ ICsKPiArCWFsbG9jYXRlX2NoYWlucygmY2ksIGNvdW50LCBzdGFydCArIDEpOwo+ICsJaWYgKElT X0VSUl9PUl9OVUxMKGNpLmNoYWlucykpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJbGFz dCA9IGNpLmNoYWluc1tjb3VudCAtIDFdOwo+ICsJZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZSh0 LT5zeW5jb2JqLCAmbGFzdC0+Y2hhaW4uYmFzZSk7Cj4gKwo+ICsJZiA9IGRybV9zeW5jb2JqX2Zl bmNlX2dldCh0LT5zeW5jb2JqKTsKPiArCWlmKGRtYV9mZW5jZV9pc19zaWduYWxlZChmKSkgewpD b2Rpbmcgc3R5bGUgZG9lc24ndCBsb29rIHJpZ2h0LiBUaGVyZSBzaG91bGQgYmUgYSBzcGFjZSBh ZnRlciAnaWYnLgo+ICsJCSBlcnIgPSAtMTsKPiArCQkgZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJ Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCj4gKwkJZG1hX2ZlbmNlX3NpZ25hbCgmY2kuY2hh aW5zW2ldLT5mZW5jZSk7Cj4gKwo+ICsJaWYoIWRtYV9mZW5jZV9pc19zaWduYWxlZChmKSkKPiAr CQkgZXJyID0gLTE7Cj4gK2VycjoKPiArCWRlbGV0ZV9jaGFpbnMoJmNpKTsKPiArCWRybV9zeW5j b2JqX3B1dCh0LT5zeW5jb2JqKTsKPiArCWttZW1fY2FjaGVfZnJlZShzbGFiX3RpbWVsaW5lLCB0 KTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X3NpZ25hbHNlcW5v KHZvaWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0cnVjdCBmZW5jZV9jaGFpbiAqd2FpdDsKPiArCXN0 cnVjdCBjaGFpbl9pbmZvIGNpOwo+ICsJc3RydWN0IG1vY2tfdGltZWxpbmUgKnRbNl07Cj4gKwlz dHJ1Y3QgZG1hX2ZlbmNlICpmOwo+ICsJaW50IGksIGNvdW50ID0gNTsKPiArCWludCBlcnIgPSAw Owo+ICsKPiArCWFsbG9jYXRlX2NoYWlucygmY2ksIDEsIDApOwo+ICsJaWYgKElTX0VSUl9PUl9O VUxMKGNpLmNoYWlucykpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJd2FpdCA9IGNpLmNo YWluc1swXTsKPiArCj4gKwlmb3IgKGkgPSAwO2kgPCBjb3VudDsgaSsrKSB7Cj4gKwkJdFtpXSA9 IHRpbWVsaW5lKGksIDB4MCk7Cj4gKwkJZG1hX2ZlbmNlX2FkZF9jYWxsYmFjaygmd2FpdC0+ZmVu Y2UsCj4gKwkJCQkgICAgICAgJnRbaV0tPmNiLAo+ICsJCQkJICAgICAgIHRpbWVsaW5lX2NhbGxi YWNrKTsKPiArCX0KPiArCj4gKwkvKiB3YWl0IGZvciBhdmFpbGFibGUgKi8KPiArCWZvciAoaSA9 IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4gKwkJZiA9IGRybV9zeW5jb2JqX2ZlbmNlX2dldCh0W2ld LT5zeW5jb2JqKTsKPiArCQlpZihkbWFfZmVuY2VfaXNfc2lnbmFsZWQoZikpIHsKPiArCQkJIGVy ciA9IC0xOwo+ICsJCQkgZ290byBlcnI7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWRtYV9mZW5jZV9z aWduYWwoJndhaXQtPmZlbmNlKTsKPiArCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4g KwkJZiA9IGRybV9zeW5jb2JqX2ZlbmNlX2dldCh0W2ldLT5zeW5jb2JqKTsKPiArCQlpZighZG1h X2ZlbmNlX2lzX3NpZ25hbGVkKGYpKQo+ICsJCQkgZXJyID0gLTE7Cj4gKwl9Cj4gKwo+ICtlcnI6 Cj4gKwlmb3IgKGkgPSAwO2kgPCBjb3VudDsgaSsrKSB7Cj4gKwkJZHJtX3N5bmNvYmpfZnJlZSgm dFtpXS0+c3luY29iai0+cmVmY291bnQpOwo+ICsJCWttZW1fY2FjaGVfZnJlZShzbGFiX3RpbWVs aW5lLCB0W2ldKTsKPiArCX0KPiArCj4gKwlkZWxldGVfY2hhaW5zKCZjaSk7Cj4gKwlyZXR1cm4g ZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF93YWl0c2Vxbm8odm9pZCAqaWdub3JlZCkK PiArewo+ICsJc3RydWN0IGZlbmNlX2NoYWluICpzaWduYWw7Cj4gKwlzdHJ1Y3QgbW9ja190aW1l bGluZSAqdFs2XTsKPiArCXN0cnVjdCBjaGFpbl9pbmZvIGNpOwo+ICsJc3RydWN0IGRtYV9mZW5j ZSAqZjsKPiArCWludCBpLCBjb3VudCA9IDU7Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwlhbGxv Y2F0ZV9jaGFpbnMoJmNpLCAxLCAwKTsKPiArCWlmIChJU19FUlJfT1JfTlVMTChjaS5jaGFpbnMp KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXNpZ25hbCA9IGNpLmNoYWluc1swXTsKPiAr CWF0b21pY19zZXQoJnNpZ25hbC0+c2lnbmFsZXJzLCBjb3VudCk7Cj4gKwo+ICsJLyogd2FpdCBm b3Igc3VibWl0ICovCj4gKwlmb3IgKGkgPSAwO2kgPCBjb3VudDsgaSsrKSB7Cj4gKwkJdFtpXSA9 IHRpbWVsaW5lKGksIDB4MCk7Cj4gKwkJZG1hX2ZlbmNlX2FkZF9jYWxsYmFjayh0W2ldLT5zeW5j b2JqLT5mZW5jZSwKPiArCQkJCSAgICAgICAmc2lnbmFsLT5jYiwKPiArCQkJCSAgICAgICBmZW5j ZV9jYWxsYmFjayk7Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDtpIDwgY291bnQ7IGkrKykgewo+ ICsJCWlmKGRtYV9mZW5jZV9pc19zaWduYWxlZCgmc2lnbmFsLT5jaGFpbi5iYXNlKSkKPiArCQkJ IGVyciA9IC0xOwo+ICsKPiArCQlmID0gZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KHRbaV0tPnN5bmNv YmopOwo+ICsJCWRtYV9mZW5jZV9zaWduYWwoZik7CmRtYV9mZW5jZV9wdXQoZikgPwo+ICsJfQo+ ICsKPiArCWlmKCFkbWFfZmVuY2VfaXNfc2lnbmFsZWQoJnNpZ25hbC0+Y2hhaW4uYmFzZSkpCj4g KwkJIGVyciA9IC0xOwo+ICsKPiArCWZvciAoaSA9IDA7aSA8IGNvdW50OyBpKyspIHsKPiArCQlk bWFfZmVuY2VfcHV0KHRbaV0tPnN5bmNvYmotPmZlbmNlKTsKPiArCQlrbWVtX2NhY2hlX2ZyZWUo c2xhYl90aW1lbGluZSwgdFtpXSk7Cj4gKwl9Cj4gKwlkZWxldGVfY2hhaW5zKCZjaSk7Cj4gKwly ZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9hZGR1bm9yZGVyKHZvaWQgKmln bm9yZWQpCj4gK3sKPiArCXN0cnVjdCBmZW5jZV9jaGFpbiAqd2FpdDsKPiArCXN0cnVjdCBjaGFp bl9pbmZvIGNpOwo+ICsJc3RydWN0IG1vY2tfdGltZWxpbmUgKnQ7Cj4gKwlzdHJ1Y3QgZG1hX2Zl bmNlICpmOwo+ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJdCA9IHRpbWVsaW5lKDYsIDB4MCk7Cj4g KwlhbGxvY2F0ZV9jaGFpbnMoJmNpLCAxLCAyKTsKPiArCXdhaXQgPSBjaS5jaGFpbnNbMF07Cj4g KwlpZiAoSVNfRVJSX09SX05VTEwoY2kuY2hhaW5zKSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwlkcm1fc3luY29ial9hZGRfcG9pbnQodC0+c3luY29iaiwgJndhaXQtPmNoYWluLCAmd2Fp dC0+ZmVuY2UsIDIpOwoKClRoaXMgZG9lc24ndCBsb29rIHJpZ2h0LCBiZWNhdXNlIGRybV9zeW5j b2JqX2FkZF9wb2ludCgpIHdpbGwgaW5pdGlhbGl6ZSAKdGhlIGZlbmNlLWNoYWluIHVzaW5nIGRt YV9mZW5jZV9jaGFpbl9pbml0LgoKWWV0IGFsbG9jYXRlX2NoYWlucyBhbHJlYWR5IGNhbGxzIGRt YV9mZW5jZV9jaGFpbl9pbml0IG9uIHRoZSBzYW1lIG9iamVjdC4KCgo+ICsKPiArCWRtYV9mZW5j ZV9zaWduYWwoJndhaXQtPmZlbmNlKTsKPiArCWYgPSBkcm1fc3luY29ial9mZW5jZV9nZXQodC0+ c3luY29iaik7Cj4gKwlpZiAoZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKCZ3YWl0LT5jaGFpbi5iYXNl KSkgewo+ICsJCWVyciA9IC0xOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCWRtYV9mZW5j ZV9zaWduYWwoZik7Cj4gKwlpZiAoIWRtYV9mZW5jZV9pc19zaWduYWxlZCgmd2FpdC0+Y2hhaW4u YmFzZSkpIHsKPiArCQllcnIgPSAtMTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArZXJyOgo+ICsJ ZGVsZXRlX2NoYWlucygmY2kpOwo+ICsJZHJtX3N5bmNvYmpfcHV0KHQtPnN5bmNvYmopOwo+ICsJ a21lbV9jYWNoZV9mcmVlKHNsYWJfdGltZWxpbmUsIHQpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ ICsKPiArc3RhdGljIGludCBfX3NpZ25hbF90aW1lbGluZSh2b2lkICphcmcpCj4gK3sKPiArCXN0 cnVjdCBtb2NrX3RpbWVsaW5lICp0aW1lbGluZSA9IGFyZzsKPiArCXN0cnVjdCBkbWFfZmVuY2Ug KmY7Cj4gKwo+ICsJZiA9IGRybV9zeW5jb2JqX2ZlbmNlX2dldCh0aW1lbGluZS0+c3luY29iaik7 Cj4gKwo+ICsJaWYgKGYgJiYgZG1hX2ZlbmNlX3dhaXQoZiwgdHJ1ZSkpewo+ICsJCWRybV9zeW5j b2JqX3B1dCh0aW1lbGluZS0+c3luY29iaik7Cj4gKwkJcmV0dXJuIC1FSU87Cj4gKwl9CkxlYWtp bmcgYSByZWYgb24gdGhlIGZlbmNlPwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IF9fd2FpdF90aW1lbGluZSh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBtb2NrX3Rp bWVsaW5lICp0aW1lbGluZSA9IGFyZzsKPiArCXN0cnVjdCBkbWFfZmVuY2UgKmY7Cj4gKwo+ICsJ ZiA9IGRybV9zeW5jb2JqX2ZlbmNlX2dldCh0aW1lbGluZS0+c3luY29iaik7Cj4gKwlkbWFfZmVu Y2Vfc2lnbmFsKGYpOwpMZWFraW5nIGEgcmVmIG9uIHRoZSBmZW5jZT8KPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpZ3RfZm9yd2FyZCh2b2lkICppZ25vcmVkKQo+ICt7 Cj4gKwlzdHJ1Y3QgbW9ja190aW1lbGluZSAqc1tNQVhfVElNRUxJTkVTXSwgKnRbTUFYX1RJTUVM SU5FU107Cj4gKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tzW01BWF9USFJFQURTXSwgKnRzazsK PiArCXN0cnVjdCBjaGFpbl9pbmZvIGNpLCBjW01BWF9USU1FTElORVNdOwo+ICsJc3RydWN0IGZl bmNlX2NoYWluICpjaGFpbiwgKnNpZ25hbGVyOwo+ICsJaW50IGksIGVyciA9IDAsIGNvdW50ID0g MDsKPiArCXN0cnVjdCBkbWFfZmVuY2UgKmxhc3Q7Cj4gKwo+ICsJLy9zaWduYWxlciB3aWxsIHNp Z25hbCB0aGUgcG9pbnRzIGluIHRpbWVsaW5lczsKS2VybmVsIGNvZGluZyBzdHlsZSBkb2Vzbid0 IGFsbCAvLyBjb21tZW50cy4KPiArCWFsbG9jYXRlX2NoYWlucygmY2ksIDEsIDIxKTsKPiArCXNp Z25hbGVyID0gY2kuY2hhaW5zWzBdOwo+ICsKPiArCWRtYV9mZW5jZV9nZXQoJnNpZ25hbGVyLT5m ZW5jZSk7Cj4gKwlmb3IgKGkgPSAwO2kgPCBNQVhfVElNRUxJTkVTOyBpKyspIHsKPiArCQlzW2ld ID0gdGltZWxpbmUoaSwgMHgwKTsKPiArCQlkcm1fc3luY29ial9yZXBsYWNlX2ZlbmNlKHNbaV0t PnN5bmNvYmosICZzaWduYWxlci0+ZmVuY2UpOwo+ICsJCXRzayA9IGt0aHJlYWRfcnVuKF9fc2ln bmFsX3RpbWVsaW5lLCBzW2ldLCAic2lnbmFsIik7Cj4gKwkJaWYgKElTX0VSUih0c2spKSB7Cj4g KwkJCWVyciA9IFBUUl9FUlIodHNrKTsKPiArCQkJZ290byBlcnI7Cj4gKwkJfQo+ICsJCWdldF90 YXNrX3N0cnVjdCh0c2spOwo+ICsJCXlpZWxkX3RvKHRzaywgdHJ1ZSk7Cj4gKwkJdGFza3NbY291 bnQrK10gPSB0c2s7Cj4gKwl9Cj4gKwo+ICsJYXRvbWljX3NldCgmc2lnbmFsZXItPnNpZ25hbGVy cywgTUFYX1RJTUVMSU5FUyk7Cj4gKwlmb3IgKGkgPSAwO2kgPCBNQVhfVElNRUxJTkVTOyBpKysp IHsKPiArCj4gKwkJYWxsb2NhdGVfY2hhaW5zKCZjW2ldLCAxLCBpKTsKPiArCQl0W2ldID0gdGlt ZWxpbmUoaSwgMHgwKTsKPiArCQljaGFpbiA9IGNbaV0uY2hhaW5zWzBdOwo+ICsKPiArCQlkcm1f c3luY29ial9yZXBsYWNlX2ZlbmNlKHRbaV0tPnN5bmNvYmosCj4gKwkJCQkJICBkbWFfZmVuY2Vf Z2V0KCZjaGFpbi0+ZmVuY2UpKTsKCmRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2UoKSBhbHJlYWR5 IGNhbGxzIGRtYV9mZW5jZV9nZXQoKSBpbnRlcm5hbGx5LgoKPiArCQlsYXN0ID0gJmNoYWluLT5j aGFpbi5iYXNlOwo+ICsJCWRtYV9mZW5jZV9hZGRfY2FsbGJhY2sodFtpXS0+c3luY29iai0+ZmVu Y2UsCj4gKwkJCQkJJnNpZ25hbGVyLT5jYiwKPiArCQkJCQlmZW5jZV9jYWxsYmFjayk7Cj4gKwkJ dHNrID0ga3RocmVhZF9ydW4oX193YWl0X3RpbWVsaW5lLCB0W2ldLCAid2FpdCIpOwo+ICsJCWlm IChJU19FUlIodHNrKSkgewo+ICsJCQllcnIgPSBQVFJfRVJSKHRzayk7Cj4gKwkJCWdvdG8gZXJy Owo+ICsJCX0KPiArCQlnZXRfdGFza19zdHJ1Y3QodHNrKTsKPiArCQl5aWVsZF90byh0c2ssIHRy dWUpOwo+ICsJCXRhc2tzW2NvdW50KytdID0gdHNrOwo+ICsJfQo+ICsKPiArCWRtYV9mZW5jZV93 YWl0KGxhc3QsIHRydWUpOwo+ICsJZG1hX2ZlbmNlX3dhaXQoJnNpZ25hbGVyLT5mZW5jZSwgdHJ1 ZSk7Cj4gKwlkbWFfZmVuY2VfcHV0KCZzaWduYWxlci0+ZmVuY2UpOwo+ICtlcnI6Cj4gKwlmb3Ig KGkgPSAwO2kgPCBjb3VudDsgaSsrKSB7Cj4gKwkJaW50IHJldDsKPiArCj4gKwkJcmV0ID0ga3Ro cmVhZF9zdG9wKHRhc2tzW2ldKTsKPiArCQlpZiAocmV0ICYmICFlcnIpCj4gKwkJCWVyciA9IHJl dDsKPiArCQlwdXRfdGFza19zdHJ1Y3QodGFza3NbaV0pOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCBNQVhfVElNRUxJTkVTOyBpKyspIHsKPiArCQljaGFpbiA9IGNbaV0uY2hhaW5zWzBd Owo+ICsKPiArCQlpZiAoIWRtYV9mZW5jZV9nZXRfc3RhdHVzKCZjaGFpbi0+Y2hhaW4uYmFzZSkg fHwKPiArCQkgICAgIWRtYV9mZW5jZV9nZXRfc3RhdHVzKCZjaGFpbi0+ZmVuY2UpKSB7Cj4gKwkJ CXByX2VycigiRnJlZWluZyBhbiB1bnNpZ25hbGVkIGZlbmNlXG4iKTsKPiArCQkJZXJyID0gLTE7 Cj4gKwkJfQo+ICsJCWRlbGV0ZV9jaGFpbnMoJmNbaV0pOwo+ICsJCWttZW1fY2FjaGVfZnJlZShz bGFiX3RpbWVsaW5lLCB0W2ldKTsKPiArCQlrbWVtX2NhY2hlX2ZyZWUoc2xhYl90aW1lbGluZSwg c1tpXSk7Cj4gKwl9Cj4gKwlkZWxldGVfY2hhaW5zKCZjaSk7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9 Cj4gKwo+ICsjaW5jbHVkZSAiZHJtX3NlbGZ0ZXN0LmMiCj4gKwo+ICtzdGF0aWMgaW50IF9faW5p dCB0ZXN0X2RybV90aW1saW5lX2luaXQodm9pZCkKPiArewo+ICsJaW50IGVyciA9IDA7Cj4gKwo+ ICsJc2xhYl90aW1lbGluZSA9IEtNRU1fQ0FDSEUobW9ja190aW1lbGluZSwKPiArCQkJCSBTTEFC X1RZUEVTQUZFX0JZX1JDVSB8Cj4gKwkJCQkgU0xBQl9IV0NBQ0hFX0FMSUdOKTsKPiArCj4gKwlz bGFiX2ZlbmNlX2NoYWluID0gS01FTV9DQUNIRShmZW5jZV9jaGFpbiwKPiArCQkJCSBTTEFCX1RZ UEVTQUZFX0JZX1JDVSB8Cj4gKwkJCQkgU0xBQl9IV0NBQ0hFX0FMSUdOKTsKPiArCWlmICghc2xh Yl90aW1lbGluZSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlwcl9pbmZvKCJUZXN0aW5n IHRpbWVsaW5lIHNlbWFwaG9yZVxuIik7Cj4gKwllcnIgPSBydW5fc2VsZnRlc3RzKHNlbGZ0ZXN0 cywgQVJSQVlfU0laRShzZWxmdGVzdHMpLCBOVUxMKTsKPiArCj4gKwlyZXR1cm4gZXJyID4gMCA/ IDAgOiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCB0ZXN0X2RybV90aW1lbGlu ZV9leGl0KHZvaWQpCj4gK3sKPiArCWttZW1fY2FjaGVfZGVzdHJveShzbGFiX3RpbWVsaW5lKTsK PiArCWttZW1fY2FjaGVfZGVzdHJveShzbGFiX2ZlbmNlX2NoYWluKTsKPiArfQo+ICsKPiArbW9k dWxlX2luaXQodGVzdF9kcm1fdGltbGluZV9pbml0KTsKPiArbW9kdWxlX2V4aXQodGVzdF9kcm1f dGltZWxpbmVfZXhpdCk7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJJbnRlbCBDb3Jwb3JhdGlvbiIp Owo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==