From owner-freebsd-emulation@FreeBSD.ORG Fri Dec 15 02:59:28 2006 Return-Path: X-Original-To: emulation@freebsd.org Delivered-To: freebsd-emulation@FreeBSD.ORG Received: from mx1.FreeBSD.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CDDDA16A4D8 for ; Fri, 15 Dec 2006 02:59:28 +0000 (UTC) (envelope-from swhetzel@gmail.com) Received: from nz-out-0506.google.com (nz-out-0506.google.com [64.233.162.237]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8776243DE0 for ; Fri, 15 Dec 2006 02:56:38 +0000 (GMT) (envelope-from swhetzel@gmail.com) Received: by nz-out-0506.google.com with SMTP id i11so361381nzh for ; Thu, 14 Dec 2006 18:58:16 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=iad3N3E3DEwLjoLq6QCJcuK4s2QjFm6oMa1GNiLuR59g3x0JOm+Vo1d3xMrc4TQUzNF1UgKJAsDxnQ8hyyFGacmdG08O3FUxroya5Q021iFoc7HCIdcHji/FaCM98MmJqouRKHxsuY/URFOcJidz2dzXfUOefZnvIX5lBQEbeKY= Received: by 10.65.234.3 with SMTP id l3mr426333qbr.1166151496361; Thu, 14 Dec 2006 18:58:16 -0800 (PST) Received: by 10.65.61.1 with HTTP; Thu, 14 Dec 2006 18:58:15 -0800 (PST) Message-ID: <790a9fff0612141858x3a0a4ce5vc348d32d9b56f343@mail.gmail.com> Date: Thu, 14 Dec 2006 20:58:15 -0600 From: "Scot Hetzel" To: "Divacky Roman" In-Reply-To: <20061214153029.GA36558@stud.fit.vutbr.cz> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_79072_22077359.1166151495960" References: <790a9fff0612140333ofd0891el59f767329f291371@mail.gmail.com> <20061214153029.GA36558@stud.fit.vutbr.cz> Cc: emulation@freebsd.org Subject: Re: linuxolator: utimes implementation X-BeenThere: freebsd-emulation@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Development of Emulators of other operating systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Dec 2006 02:59:29 -0000 ------=_Part_79072_22077359.1166151495960 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 12/14/06, Divacky Roman wrote: > On Thu, Dec 14, 2006 at 05:33:40AM -0600, Scot Hetzel wrote: > > While I was running the the tests for ltp-full-20061121, I noticed > > that the utimes function wasn't implemented in the linuxolator. > > > > I looked up the man page and found that it was similar to the utime > > function, except that it allows a program to set an inode down to the > > microsecond. > > > > Merging together the linux_utime and freebsd32_utimes functions, I was > > able to create the linux_utimes function. > > what about this patch instead (only relevant part): > I'm able to compile the linux module with this patch, and I no longer see "* utimes not implemented" when running the ltp testcases. The attached patch to ltp-20061121 implements testcases for utimes (based on the utime testcases). It currently is failing the utimes04, and utimes05 testcases: utimes04 1 FAIL : tmp_file access and modification times usec not set utimes05 1 FAIL : tmp_file access and modification times usec not set This might be because I'm not using the right field from the stat function to get the access and modification times for the usec in these testcases. If I comment out the code that checks the usec, then these two tests pass. Scot -- DISCLAIMER: No electrons were mamed while sending this message. Only slightly bruised. ------=_Part_79072_22077359.1166151495960 Content-Type: text/x-diff; name=ltp-utimes-patch; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_evpzty9c Content-Disposition: attachment; filename="ltp-utimes-patch" ZGlmZiAtcnVOIGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcvcnVudGVzdC9sdHBsaXRlIGx0cC1mdWxs LTIwMDYxMTIxL3J1bnRlc3QvbHRwbGl0ZQotLS0gbHRwLWZ1bGwtMjAwNjExMjEtb3JpZy9ydW50 ZXN0L2x0cGxpdGUJVHVlIE5vdiAyMSAxNDozMToyMCAyMDA2CisrKyBsdHAtZnVsbC0yMDA2MTEy MS9ydW50ZXN0L2x0cGxpdGUJVGh1IERlYyAxNCAxMjo1OTo0MyAyMDA2CkBAIC05NTUsNiArOTU1 LDE0IEBACiB1dGltZTA1IHV0aW1lMDUKIHV0aW1lMDYgdXRpbWUwNgogCit1dGltZXMwMSB1dGlt ZXMwMQordXRpbWVzMDFBIHN5bWxpbmswMSAtVCB1dGltZXMwMQordXRpbWVzMDIgdXRpbWVzMDIK K3V0aW1lczAzIHV0aW1lczAzCit1dGltZXMwNCB1dGltZXMwNAordXRpbWVzMDUgdXRpbWVzMDUK K3V0aW1lczA2IHV0aW1lczA2CisKIHZmb3JrMDEgdmZvcmswMQogdmZvcmswMiB2Zm9yazAyCiAK ZGlmZiAtcnVOIGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcvcnVudGVzdC9zdHJlc3MucGFydDMgbHRw LWZ1bGwtMjAwNjExMjEvcnVudGVzdC9zdHJlc3MucGFydDMKLS0tIGx0cC1mdWxsLTIwMDYxMTIx LW9yaWcvcnVudGVzdC9zdHJlc3MucGFydDMJVHVlIE5vdiAyMSAxNDozMToyMCAyMDA2CisrKyBs dHAtZnVsbC0yMDA2MTEyMS9ydW50ZXN0L3N0cmVzcy5wYXJ0MwlUaHUgRGVjIDE0IDEzOjAwOjU2 IDIwMDYKQEAgLTgzOCw2ICs4MzgsMTQgQEAKIHV0aW1lMDUgdXRpbWUwNQogdXRpbWUwNiB1dGlt ZTA2CiAKK3V0aW1lczAxIHV0aW1lczAxCit1dGltZXMwMUEgc3ltbGluazAxIC1UIHV0aW1lczAx Cit1dGltZXMwMiB1dGltZXMwMgordXRpbWVzMDMgdXRpbWVzMDMKK3V0aW1lczA0IHV0aW1lczA0 Cit1dGltZXMwNSB1dGltZXMwNQordXRpbWVzMDYgdXRpbWVzMDYKKwogdmZvcmswMSB2Zm9yazAx CiB2Zm9yazAyIHZmb3JrMDIKIApkaWZmIC1ydU4gbHRwLWZ1bGwtMjAwNjExMjEtb3JpZy9ydW50 ZXN0L3N5c2NhbGxzIGx0cC1mdWxsLTIwMDYxMTIxL3J1bnRlc3Qvc3lzY2FsbHMKLS0tIGx0cC1m dWxsLTIwMDYxMTIxLW9yaWcvcnVudGVzdC9zeXNjYWxscwlUdWUgTm92IDIxIDE0OjMxOjIwIDIw MDYKKysrIGx0cC1mdWxsLTIwMDYxMTIxL3J1bnRlc3Qvc3lzY2FsbHMJVGh1IERlYyAxNCAxMzow MToxMiAyMDA2CkBAIC05NDIsNiArOTQyLDE0IEBACiB1dGltZTA1IHV0aW1lMDUKIHV0aW1lMDYg dXRpbWUwNgogCit1dGltZXMwMSB1dGltZXMwMQordXRpbWVzMDFBIHN5bWxpbmswMSAtVCB1dGlt ZXMwMQordXRpbWVzMDIgdXRpbWVzMDIKK3V0aW1lczAzIHV0aW1lczAzCit1dGltZXMwNCB1dGlt ZXMwNAordXRpbWVzMDUgdXRpbWVzMDUKK3V0aW1lczA2IHV0aW1lczA2CisKIHZmb3JrMDEgdmZv cmswMQogdmZvcmswMiB2Zm9yazAyCiAKZGlmZiAtcnVOIGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcv dGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zeW1saW5rL3N5bWxpbmswMS5jIGx0cC1mdWxsLTIw MDYxMTIxL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvc3ltbGluay9zeW1saW5rMDEuYwotLS0g bHRwLWZ1bGwtMjAwNjExMjEtb3JpZy90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3N5bWxpbmsv c3ltbGluazAxLmMJVHVlIE5vdiAyMSAxNDozMToyOCAyMDA2CisrKyBsdHAtZnVsbC0yMDA2MTEy MS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3N5bWxpbmsvc3ltbGluazAxLmMJVGh1IERlYyAx NCAxODoyMTowNCAyMDA2CkBAIC0xNTIsNiArMTUyLDE3IEBACiAqIAogKiAgICBXQUxMIENMT0NL IFRJTUUJOiAzCiAqCisqICAgIFRFU1QgSURFTlRJRklFUiAgICA6IHV0aW1lczAxICh1dGltZXMp CisqCisqICAgIFRFU1QgVElUTEUgICAgICAgICA6IFNldCBGaWxlIEFjY2VzcyBBbmQgTW9kaWZ5 IE9iamVjdCBGaWxlIFRpbWVzCisqICAgICAgICAgICAgICAgICAgICAgICAgIEluZGlyZWN0bHkg RnJvbSBhIFN5bWJvbGljIExpbmsgRmlsZQorKgorKiAgICBQQVJFTlQgRE9DVU1FTlQgICAgOiBz eW10ZHMwMQorKgorKiAgICBURVNUIENBU0UgVE9UQUwgICAgOiAzCisqCisqICAgIFdBTEwgQ0xP Q0sgVElNRSAgICA6IDMKKyoKICogICAgVEVTVCBJREVOVElGSUVSCTogcmVuYW1lMDEgKHJlbmFt ZSkKICogCiAqICAgIFRFU1QgVElUTEUJCTogUmVuYW1lIGEgU3ltYm9saWMgTGluayBGaWxlIEFu ZCBOb3QgQW55IE9iamVjdApAQCAtMjUzLDYgKzI2NCwxMiBAQAogKiAgICAgICAgIDIuIFJlY2Vp dmUgRU5PRU5UIGVycm9yIHdoZW4gYWNjZXNzaW5nIG5vbi1leGlzdGVudCBkaXJlY3RvcnkgdGhy b3VnaCBzeW1ib2xpYyBsaW5rIGZpbGUKICogICAgICAgICAzLiBSZWNlaXZlIEVMT09QIGVycm9y IHdoZW4gbmVzdGluZyBvZiBzeW1ib2xpYyBsaW5rcyBleGNlZWQgbWF4aW11bQogKiAKKyogICAg ICAgRm9yIHV0aW1lcworKgorKiAgICAgICAgIDEuIENoYW5nZSBpbm9kZSB0aW1lcyBvZiBvYmpl Y3QgZmlsZSB0aHJvdWdoIGEgc3ltYm9saWMgbGluayBmaWxlCisqICAgICAgICAgMi4gUmVjZWl2 ZSBFTk9FTlQgZXJyb3Igd2hlbiBhY2Nlc3Npbmcgbm9uLWV4aXN0ZW50IGRpcmVjdG9yeSB0aHJv dWdoIHN5bWJvbGljIGxpbmsgZmlsZQorKiAgICAgICAgIDMuIFJlY2VpdmUgRUxPT1AgZXJyb3Ig d2hlbiBuZXN0aW5nIG9mIHN5bWJvbGljIGxpbmtzIGV4Y2VlZCBtYXhpbXVtCisqCiAqICAgICAg IEZvciByZW5hbWUKICoKICogICAgICAgICAxLiBSZW5hbWUgYSBzeW1ib2xpYyBsaW5rIGZpbGUg d2hpY2ggcG9pbnRzIGF0IG5vIG9iamVjdCBmaWxlCkBAIC0yNzcsMTIgKzI5NCwxNCBAQAogKiMq IyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyoq LwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRl IDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2lu Y2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGZjbnRsLmg+ICAgICAgICAgICAgIC8qIG9wZW4o Mikgc3lzdGVtIGNhbGwgKi8KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN5cy90eXBl cy5oPgogI2luY2x1ZGUgPHV0aW1lLmg+ICAgICAgICAgICAgIC8qIHV0aW1lKDIpIHN5c3RlbSBj YWxsICovCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4gICAgICAgICAgLyogdXRpbWVzKDIpIHN5c3Rl bSBjYWxsICovCiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4g ICAgICAgICAgLyogc3RhdCgyKSBhbmQgbHN0YXQoMikgc3lzdGVtIGNhbGxzICovCiAKQEAgLTMw Nyw2ICszMjYsNyBAQAogdm9pZCBkb191bmxpbmsoKTsKIHZvaWQgZG9fY2htb2QoKTsKIHZvaWQg ZG9fdXRpbWUoKTsKK3ZvaWQgZG9fdXRpbWVzKCk7CiB2b2lkIGRvX3JlbmFtZSgpOwogdm9pZCBk b19vcGVuKCk7CiAKQEAgLTMyOSw2ICszNDksNyBAQAogI2RlZmluZSBVTkxJTksgInVubGluazAx IgogI2RlZmluZSBDSE1PRCAiY2htb2QwMSIKICNkZWZpbmUgVVRJTUUgInV0aW1lMDEiCisjZGVm aW5lIFVUSU1FUyAgInV0aW1lczAxIgogI2RlZmluZSBSRU5BTUUgInJlbmFtZTAxIgogI2RlZmlu ZSBPUEVOICJvcGVuMDEiCiAKQEAgLTM3Miw2ICszOTMsOCBAQAogICJOZXN0ZWQgc3ltYm9saWMg bGluayBhY2Nlc3MgY29uZGl0aW9uIGNhdWdodC4gIEVMT09QIGlzIHJldHVybmVkIiwKICAiUmVh ZGluZyBhIG5vbnN5bWJvbGljIGxpbmsgZmlsZSBlcnJvciBjb25kaXRpb24gaXMgY2F1Z2h0LiAg RUlOVkFMIGlzIHJldHVybmVkIiwKICAibHN0YXQoMikgb2Ygb2JqZWN0IGZpbGUgcmV0dXJucyBv YmplY3QgZmlsZSBpbm9kZSBpbmZvcm1hdGlvbiIsCisgInV0aW1lcygyKSBjaGFuZ2Ugb2Ygb2Jq ZWN0IGZpbGUgYWNjZXNzIGFuZCBtb2RpZnkgdGltZXMgdGhyb3VnaCBzeW1ib2xpYyBsaW5rIGZp bGUgaXMgb2siLAorICJ1dGltZXMoMikgZXJyb3Igd2hlbiBhY2Nlc3Npbmcgbm9uLWV4aXN0ZW50 IG9iamVjdCB0aHJvdWdoIHN5bWJvbGljIGxpbmsgaXMgY2F1Z2h0IiwKICAiTlVMTCIKIH07CiAK QEAgLTQzNSw3ICs0NTgsMTAgQEAKICAgICB7T1BFTiwgMCwgMCwgMjUsIGNyZWF0X2JvdGgsIGNr X2JvdGgsIHtPX0ZJTEUsIFNfRklMRSwgT19GSUxFfX0sCiAgICAge09QRU4sIDEsIEVFWElTVCwg MjYsIGNyZWF0X3N5bWxpbmssIGNrX3N5bWxpbmssIHtPX0ZJTEUsIFNfRklMRSwgT19GSUxFfX0s CiAgICAge09QRU4sIDEsIEVOT0VOVCwgMjcsIGNyZWF0X3N5bWxpbmssIGNrX3N5bWxpbmssIHtP X0ZJTEUsIFNfRklMRSwgTlVMTH19LAotICAgIHtPUEVOLCAxLCBFTE9PUCwgMjgsIGNyZWF0X3N5 bWxpbmssIGNrX3N5bWxpbmssIHtTX0ZJTEUsIFNfRklMRSwgTlVMTH19CisgICAge09QRU4sIDEs IEVMT09QLCAyOCwgY3JlYXRfc3ltbGluaywgY2tfc3ltbGluaywge1NfRklMRSwgU19GSUxFLCBO VUxMfX0sCisgICAge1VUSU1FUywgMCwgMCwgMzEsIGNyZWF0X2JvdGgsIGNrX2JvdGgsIHtPX0ZJ TEUsIFNfRklMRSwgT19GSUxFfX0sCisgICAge1VUSU1FUywgMSwgRU5PRU5ULCAzMiwgY3JlYXRf c3ltbGluaywgY2tfc3ltbGluaywge09fRklMRSwgU19GSUxFLCBOVUxMfX0sCisgICAge1VUSU1F UywgMSwgRUxPT1AsIDI4LCBjcmVhdF9zeW1saW5rLCBja19zeW1saW5rLCB7U19GSUxFLCBTX0ZJ TEUsIE5VTEx9fQogfTsKIAogLyoKQEAgLTQ3Niw2ICs1MDIsOCBAQAogCQkiUmVuYW1lIGEgU3lt Ym9saWMgTGluayBGaWxlIEFuZCBOb3QgQW55IE9iamVjdCBmaWxlIiB9LAogICAgeyBPUEVOLCAg ICAgIm9wZW4iLCAgICAgNSwgJnRlc3Rfb2JqZWN0c1szM10sCiAJCSJDcmVhdGUvT3BlbiBhIEZp bGUgRm9yIFJlYWRpbmcgT3IgV3JpdGluZyB2aWEgc3ltbGluayIgfSwKKyAgIHsgVVRJTUVTLCAg ICJ1dGltZXMiLCAgIDMsICZ0ZXN0X29iamVjdHNbMzhdLAorICAgICAgICAgICAgICAgICJTZXQg RmlsZSBBY2Nlc3MgQW5kIE1vZGlmeSBPYmplY3QgRmlsZSBUaW1lcyB2aWEgc3ltbGluayIgfSwK IH07CiAKIC8qCkBAIC0xMDI0LDYgKzEwNTIsOCBAQAogICAgICAgICAgICAgICAgIGRvX3JlbmFt ZSh0Y19wdHIpOwogICAgICAgICAgICAgIGVsc2UgaWYgKGNrdGNzaWQodGNfcHRyLT50Y2lkLCBP UEVOKSkKICAgICAgICAgICAgICAgICBkb19vcGVuKHRjX3B0cik7CisgICAgICAgICAgICAgZWxz ZSBpZiAoY2t0Y3NpZCh0Y19wdHItPnRjaWQsIFVUSU1FUykpCisJCWRvX3V0aW1lcyh0Y19wdHIp OwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB0c3RfcmVzbShUQlJPSywgIlVu a25vd24gdGVzdCBjYXNlIHByb2Nlc3NpbmcgYWN0aW9ucyBkZWNsYXJlZCIpOwogICAgICAgICAg IH0KQEAgLTExODUsNiArMTIxNSwxOCBAQAogCQkiIGZpbGUgdGhyb3VnaCBhIHN5bWJvbGljIGxp bmsgZmlsZSB3YXMgbm90IHJlY2VpdmVkLCIsCiAJCWVycm5vLCBzdHJlcnJvcihlcnJubykpOwog ICAgICB9CisgICAgIGVsc2UgaWYgKGNrdGNzaWQodGNfcHRyLT50Y2lkLCBVVElNRVMpKSB7CisK KyAgICAgICAgaWYgKCh1dGltZXModGNfcHRyLT5mbl9hcmdbMV0sIE5VTEwpID09IC0xKSAmJiAo ZXJybm8gPT0gRU5PRU5UKSkKKyAgICAgICAgICAgaWYgKCBURVNUX1JFU1VMVCAhPSBUUEFTUyB8 fCBTVERfRlVOQ1RJT05BTF9URVNUICApCisgICAgICAgICAgICAgICB0c3RfcmVzbShURVNUX1JF U1VMVCwgbXNnc1t0Y19wdHItPnBhc3NfbXNnXSk7CisgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICBUc3RfY291bnQrKzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICB0c3RfcmVzbShU RkFJTCwgIiVzICVzIGVycm5vOiVkICVzIiwKKyAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgRU5P RU5UIGVycm9yIGNvbmRpdGlvbiB3aGVuIHV0aW1lcygyKSBhIHN5bWJvbGljIiwKKyAgICAgICAg ICAgICAgICAibGluayB3aGljaCBwb2ludGVkIGF0IG5vIG9iamVjdDoiLCBlcnJubywgc3RyZXJy b3IoZXJybm8pKTsKKyAgICAgfQogICAgICBlbHNlCiAgICAgICAgIHRzdF9yZXNtKFRCUk9LLCAi VW5rbm93biB0ZXN0IGNhc2UgcHJvY2Vzc2luZyBhY3Rpb25zIGRlY2xhcmVkIik7CiB9CkBAIC0x Mjk0LDYgKzEzMzYsMjEgQEAKIAkJIkV4cGVjdGVkIEVMT09QIGVycm9yIGNvbmRpdGlvbiB3aGVu IG9wZW4oMikgYSBuZXN0ZWQgc3ltYm9saWMgbGluazoiLAogCQllcnJubywgc3RyZXJyb3IoZXJy bm8pKTsKICAgICAgfQorICAgICBlbHNlIGlmIChja3Rjc2lkKHRjX3B0ci0+dGNpZCwgVVRJTUVT KSkgeworCisgICAgICAgIFRFU1QoIHV0aW1lcyh0Y19wdHItPmZuX2FyZ1sxXSwgTlVMTCkgKTsK KyAgICAgICAgZXJybm89VEVTVF9FUlJOTzsKKworICAgICAgICBpZiAoKFRFU1RfUkVUVVJOID09 IC0xKSAmJiAoZXJybm8gPT0gRUxPT1ApKQorICAgICAgICAgICBpZiAoIFRFU1RfUkVTVUxUICE9 IFRQQVNTIHx8IFNURF9GVU5DVElPTkFMX1RFU1QgICkKKyAgICAgICAgICAgICAgIHRzdF9yZXNt KFRFU1RfUkVTVUxULCBtc2dzW3RjX3B0ci0+cGFzc19tc2ddKTsKKyAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgIFRzdF9jb3VudCsrOworICAgICAgICBlbHNlCisgICAgICAgICAgIHRz dF9yZXNtKFRGQUlMLCAiJXMgZXJybm86JWQgJXMiLAorICAgICAgICAgICAgICAgICJFeHBlY3Rl ZCBFTE9PUCBlcnJvciBjb25kaXRpb24gd2hlbiB1dGltZXMoMikgYSBuZXN0ZWQgc3ltYm9saWMg bGluazoiLAorICAgICAgICAgICAgICAgIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworICAgICB9 CiAgICAgIGVsc2UKICAgICAgICAgdHN0X3Jlc20oVEJST0ssICJVbmtub3duIHRlc3QgY2FzZSBw cm9jZXNzaW5nIGFjdGlvbnMgZGVjbGFyZWQiKTsKIH0KQEAgLTE5NjUsNiArMjAyMiw2NCBAQAog ICAgICAgICAgICAgICB0c3RfcmVzbShURkFJTCwgdGVzdF9tc2cpOwogICAgICAgICB9CiAgICAg ICAgIGNsb3NlKGZkKTsKKyAgICAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgcm91 dGluZSBjaGVja3Mgb3V0IHRoZSB1dGltZXMoMikgc3lzdGVtIGNhbGwgZm9yIGEgc3VjY2Vzc2Z1 bAorICogaW52b2NhdGlvbgorICoKKyAqICAgQXJndW1lbnQgaXMgcG9pbnRlciB0byB0ZXN0X29i amVjdHMgYXJyYXkgb2Ygc3RydWN0dXJlcyBvZiB0eXBlCisgKiAgIGFsbF90ZXN0X2Nhc2VzCisg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCit2b2lkCitkb191dGltZXModGNfcHRyKQorc3RydWN0IGFsbF90ZXN0 X2Nhc2VzICp0Y19wdHI7Cit7CisgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVzWzJdOworCisgICAg IGlmIChzdGF0KHRjX3B0ci0+Zm5fYXJnWzJdLCAmYXN5bWxpbmspID09IC0xKQorICAgICAgICB0 c3RfcmVzbShUQlJPSywgInN0YXQoMikgRmFpbHVyZSB3aGVuIGFjY2Vzc2luZyAlcyBvYmplY3Qg ZmlsZSIsCisgICAgICAgICAgICB0Y19wdHItPmZuX2FyZ1syXSk7CisgICAgIGVsc2UgeworICAg ICAgICAvKiBOb3cgYWRkIGEgZmV3IHZhbHVlcyB0byBhY2Nlc3MgYW5kIG1vZGlmeSB0aW1lcyAq LworCisgICAgICAgIHRpbWVzWzBdLnR2X3NlYyA9IGFzeW1saW5rLnN0X2F0aW1lICsgYV90aW1l X3ZhbHVlOworICAgICAgICB0aW1lc1swXS50dl91c2VjID0gYXN5bWxpbmsuc3RfYXRpbS50dl9u c2VjIC8gMTAwMDsKKyAgICAgICAgdGltZXNbMV0udHZfc2VjID0gYXN5bWxpbmsuc3RfbXRpbWUg KyBhX3RpbWVfdmFsdWU7CisgICAgICAgIHRpbWVzWzFdLnR2X3VzZWMgPSBhc3ltbGluay5zdF9t dGltLnR2X25zZWMgLyAxMDAwOworCisgICAgICAgIC8qIE5vdyBoYW5kIG9mZiB0byB1dGltZXMo MikgdmlhIHN5bWJvbGljIGxpbmsgZmlsZSovCisKKyAgICAgICAgaWYgKHV0aW1lcyh0Y19wdHIt PmZuX2FyZ1sxXSwgdGltZXMpID09IC0xKQorICAgICAgICAgICAgdHN0X3Jlc20oVEZBSUwsICIl cyAlcyIsCisgICAgICAgICAgICAgICAgInV0aW1lcygyKSBmYWlsZWQgdG8gcHJvY2VzcyBvYmpl Y3QgZmlsZSBhY2Nlc3MgYW5kIG1vZGlmeSIsCisgICAgICAgICAgICAgICAgInRpbWUgdXBkYXRl cyB0aHJvdWdoIHN5bWJvbGljIGxpbmsiKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgIC8q IE5vdyB2ZXJpZnkgY2hhbmdlcyB3ZXJlIG1hZGUgKi8KKworICAgICAgICAgICBpZiAoc3RhdCh0 Y19wdHItPmZuX2FyZ1syXSwgJnN0YXR0ZXIpID09IC0xKQorICAgICAgICAgICAgICB0c3RfcmVz bShUQlJPSywKKyAgICAgICAgICAgICAgICAic3RhdCgyKSBGYWlsdXJlIHdoZW4gYWNjZXNzaW5n ICVzIG9iamVjdCBmaWxlIiwKKyAgICAgICAgICAgICAgICB0Y19wdHItPmZuX2FyZ1syXSk7Cisg ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICB0aW1lX3QgdGVtcCwgZGlmZjsKKworICAg ICAgICAgICAgICB0ZW1wID0gc3RhdHRlci5zdF9hdGltZSAtIGFzeW1saW5rLnN0X2F0aW1lOwor ICAgICAgICAgICAgICBkaWZmID0gKHN0YXR0ZXIuc3RfbXRpbWUgLSBhc3ltbGluay5zdF9tdGlt ZSkgLSB0ZW1wOworCisgICAgICAgICAgICAgIGlmICghIGRpZmYpCisgICAgICAgICAgICAgICAg IGlmICggVEVTVF9SRVNVTFQgIT0gVFBBU1MgfHwgU1REX0ZVTkNUSU9OQUxfVEVTVCAgKQorICAg ICAgICAgICAgICAgICAgICAgdHN0X3Jlc20oVEVTVF9SRVNVTFQsIG1zZ3NbdGNfcHRyLT5wYXNz X21zZ10pOworICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICBUc3Rf Y291bnQrKzsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICB0c3RfcmVzbShU RkFJTCwgIiVzICVzICVkIGdyZWF0ZXIgdGhhbiBvcmlnaW5hbCB0aW1lcyIsCisgICAgICAgICAg ICAgICAgICAgICJ1dGltZXMoMikgZmFpbGVkIHRvIGNoYW5nZSBvYmplY3QgZmlsZSBhY2Nlc3Mg YW5kIiwKKyAgICAgICAgICAgICAgICAgICAgIm1vZGlmeSB0aW1lcyB0aHJvdWdoIHN5bWJvbGlj IGxpbmsgdG8gYSB2YWx1ZSIsCisgICAgICAgICAgICAgICAgICAgIGFfdGltZV92YWx1ZSk7Cisg ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICB9CiB9CiAKZGlmZiAtcnVOIGx0cC1mdWxsLTIw MDYxMTIxLW9yaWcvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvTWFrZWZpbGUgbHRw LWZ1bGwtMjAwNjExMjEvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvTWFrZWZpbGUK LS0tIGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGlt ZXMvTWFrZWZpbGUJV2VkIERlYyAzMSAxODowMDowMCAxOTY5CisrKyBsdHAtZnVsbC0yMDA2MTEy MS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0aW1lcy9NYWtlZmlsZQlUdWUgTm92IDIxIDE0 OjMxOjI4IDIwMDYKQEAgLTAsMCArMSwzMSBAQAorIworIyAgQ29weXJpZ2h0IChjKSBJbnRlcm5h dGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMQorIworIyAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisjCisjICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisjICB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisj ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKyMgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisjCisKK0NGTEFHUyArPSAtSS4uLy4uLy4uLy4u L2luY2x1ZGUgLVdhbGwKK0xETElCUyArPSAtTC4uLy4uLy4uLy4uL2xpYiAtbGx0cAorCitTUkNT ICAgID0gJCh3aWxkY2FyZCAqLmMpCitUQVJHRVRTID0gJChwYXRzdWJzdCAlLmMsJSwkKFNSQ1Mp KQorCithbGw6ICQoVEFSR0VUUykKKworaW5zdGFsbDoKKwlAc2V0IC1lOyBmb3IgaSBpbiAkKFRB UkdFVFMpOyBkbyBsbiAtZiAkJGkgLi4vLi4vLi4vYmluLyQkaSA7IGRvbmUKKworY2xlYW46CisJ cm0gLWYgJChUQVJHRVRTKQpkaWZmIC1ydU4gbHRwLWZ1bGwtMjAwNjExMjEtb3JpZy90ZXN0Y2Fz ZXMva2VybmVsL3N5c2NhbGxzL3V0aW1lcy91dGltZXMwMS5jIGx0cC1mdWxsLTIwMDYxMTIxL3Rl c3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1lczAxLmMKLS0tIGx0cC1mdWxsLTIw MDYxMTIxLW9yaWcvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvdXRpbWVzMDEuYwlX ZWQgRGVjIDMxIDE4OjAwOjAwIDE5NjkKKysrIGx0cC1mdWxsLTIwMDYxMTIxL3Rlc3RjYXNlcy9r ZXJuZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1lczAxLmMJVGh1IERlYyAxNCAxMjozNjoyOCAyMDA2 CkBAIC0wLDAgKzEsMjgxIEBACisvKgorICoKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlv bmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMQorICoKKyAqICAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQor ICogICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w bGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8q CisgKiBUZXN0IE5hbWU6IHV0aW1lczAxCisgKgorICogVGVzdCBEZXNjcmlwdGlvbjoKKyAqICBW ZXJpZnkgdGhhdCB0aGUgc3lzdGVtIGNhbGwgdXRpbWVzKCkgc3VjY2Vzc2Z1bGx5IHNldHMgdGhl IG1vZGlmaWNhdGlvbgorICogIGFuZCBhY2Nlc3MgdGltZXMgb2YgYSBmaWxlIHRvIHRoZSBjdXJy ZW50IHRpbWUsIGlmIHRoZSB0aW1lcyBhcmd1bWVudAorICogIGlzIG51bGwsIGFuZCB0aGUgdXNl ciBJRCBvZiB0aGUgcHJvY2VzcyBpcyAicm9vdCIuCisgKgorICogRXhwZWN0ZWQgUmVzdWx0Ogor ICogIHV0aW1lcyBzdWNjZWVkcyByZXR1cm5pbmcgemVybyBhbmQgc2V0cyB0aGUgYWNjZXNzIGFu ZCBtb2RpZmljYXRpb24KKyAqICB0aW1lcyBvZiB0aGUgZmlsZSB0byB0aGUgY3VycmVudCB0aW1l LgorICoKKyAqIEFsZ29yaXRobToKKyAqICBTZXR1cDoKKyAqICAgU2V0dXAgc2lnbmFsIGhhbmRs aW5nLgorICogICBDcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KKyAqICAgUGF1c2UgZm9yIFNJ R1VTUjEgaWYgb3B0aW9uIHNwZWNpZmllZC4KKyAqCisgKiAgVGVzdDoKKyAqICAgTG9vcCBpZiB0 aGUgcHJvcGVyIG9wdGlvbnMgYXJlIGdpdmVuLgorICogICBFeGVjdXRlIHN5c3RlbSBjYWxsCisg KiAgIENoZWNrIHJldHVybiBjb2RlLCBpZiBzeXN0ZW0gY2FsbCBmYWlsZWQgKHJldHVybj0tMSkK KyAqICAgCUxvZyB0aGUgZXJybm8gYW5kIElzc3VlIGEgRkFJTCBtZXNzYWdlLgorICogICBPdGhl cndpc2UsCisgKiAgIAlWZXJpZnkgdGhlIEZ1bmN0aW9uYWxpdHkgb2Ygc3lzdGVtIGNhbGwJCisg KiAgICAgIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgIAlJc3N1ZSBGdW5jdGlvbmFsaXR5LVBhc3Mg bWVzc2FnZS4KKyAqICAgICAgT3RoZXJ3aXNlLAorICoJCUlzc3VlIEZ1bmN0aW9uYWxpdHktRmFp bCBtZXNzYWdlLgorICogIENsZWFudXA6CisgKiAgIFByaW50IGVycm5vIGxvZyBhbmQvb3IgdGlt aW5nIHN0YXRzIGlmIG9wdGlvbnMgZ2l2ZW4KKyAqICAgRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZGly ZWN0b3J5IGNyZWF0ZWQuCisgKgorICogVXNhZ2U6ICA8Zm9yIGNvbW1hbmQtbGluZT4KKyAqICB1 dGltZXMwMSBbLWMgbl0gWy1lXSBbLWZdIFstaSBuXSBbLUkgeF0gWy1wIHhdIFstdF0KKyAqCQl3 aGVyZSwgIC1jIG4gOiBSdW4gbiBjb3BpZXMgY29uY3VycmVudGx5LgorICoJCQktZSAgIDogVHVy biBvbiBlcnJubyBsb2dnaW5nLgorICoJCQktZiAgIDogVHVybiBvZmYgZnVuY3Rpb25hbGl0eSBU ZXN0aW5nLgorICoJCQktaSBuIDogRXhlY3V0ZSB0ZXN0IG4gdGltZXMuCisgKgkJCS1JIHggOiBF eGVjdXRlIHRlc3QgZm9yIHggc2Vjb25kcy4KKyAqCQkJLVAgeCA6IFBhdXNlIGZvciB4IHNlY29u ZHMgYmV0d2VlbiBpdGVyYXRpb25zLgorICoJCQktdCAgIDogVHVybiBvbiBzeXNjYWxsIHRpbWlu Zy4KKyAqCisgKiBIaXN0b3J5CisgKgkwNy8yMDAxIEpvaG4gR2VvcmdlCisgKgkJLVBvcnRlZAor ICoKKyAqIFJlc3RyaWN0aW9uczoKKyAqICBUaGlzIHRlc3Qgc2hvdWxkIGJlIHJ1biBieSAnc3Vw ZXItdXNlcicgKHJvb3QpIG9ubHkuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu Y2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5v Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUg PHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+Cisj aW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAidGVzdC5oIgorI2luY2x1ZGUgInVzY3Rlc3Qu aCIKKworI2RlZmluZSBURU1QX0ZJTEUJInRtcF9maWxlIgorI2RlZmluZSBGSUxFX01PREUJU19J UlVTUiB8IFNfSVJHUlAgfCBTX0lST1RICisKK2NoYXIgKlRDSUQ9InV0aW1lczAxIjsJCS8qIFRl c3QgcHJvZ3JhbSBpZGVudGlmaWVyLiAgICAqLworaW50IFRTVF9UT1RBTD0xOwkJLyogVG90YWwg bnVtYmVyIG9mIHRlc3QgY2FzZXMuICovCitleHRlcm4gaW50IFRzdF9jb3VudDsJCS8qIFRlc3Qg Q2FzZSBjb3VudGVyIGZvciB0c3RfKiByb3V0aW5lcyAqLwordGltZV90IGN1cnJfdGltZTsJCS8q IGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzICovCit0aW1lX3QgdGxvYzsJCQkvKiBhcmd1bWVudCB2 YXIuIGZvciB0aW1lKCkgKi8KK2ludCBleHBfZW5vc1tdPXswfTsKKwordm9pZCBzZXR1cCgpOwkJ CS8qIE1haW4gc2V0dXAgZnVuY3Rpb24gb2YgdGVzdCAqLwordm9pZCBjbGVhbnVwKCk7CQkJLyog Y2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIHRlc3QgKi8KKworaW50CittYWluKGludCBhYywgY2hh ciAqKmF2KQoreworCXN0cnVjdCBzdGF0IHN0YXRfYnVmOwkvKiBzdHJ1Y3QgYnVmZmVyIHRvIGhv bGQgZmlsZSBpbmZvLiAqLworCWludCBsYzsJCQkvKiBsb29wIGNvdW50ZXIgKi8KKwljaGFyICpt c2c7CQkvKiBtZXNzYWdlIHJldHVybmVkIGZyb20gcGFyc2Vfb3B0cyAqLworCXRpbWVfdCBtb2Rm X3RpbWUsIGFjY2Vzc190aW1lOworCXRpbWVfdCBwcmVzX3RpbWU7CS8qIGZpbGUgbW9kaWZpY2F0 aW9uL2FjY2Vzcy9wcmVzZW50IHRpbWUgKi8KKyAgICAKKwkvKiBQYXJzZSBzdGFuZGFyZCBvcHRp b25zIGdpdmVuIHRvIHJ1biB0aGUgdGVzdC4gKi8KKwltc2cgPSBwYXJzZV9vcHRzKGFjLCBhdiwg KG9wdGlvbl90ICopIE5VTEwsIE5VTEwpOworCWlmIChtc2cgIT0gKGNoYXIgKikgTlVMTCkgewor CQl0c3RfYnJrbShUQlJPSywgTlVMTCwgIk9QVElPTiBQQVJTSU5HIEVSUk9SIC0gJXMiLCBtc2cp OworCQl0c3RfZXhpdCgpOworCX0KKworCS8qIFBlcmZvcm0gZ2xvYmFsIHNldHVwIGZvciB0ZXN0 ICovCisJc2V0dXAoKTsKKworCS8qIHNldCB0aGUgZXhwZWN0ZWQgZXJybm9zLi4uICovCisJVEVT VF9FWFBfRU5PUyhleHBfZW5vcyk7CisKKwkvKiBDaGVjayBsb29waW5nIHN0YXRlIGlmIC1pIG9w dGlvbiBnaXZlbiAqLworCWZvciAobGMgPSAwOyBURVNUX0xPT1BJTkcobGMpOyBsYysrKSB7CisJ CS8qIFJlc2V0IFRzdF9jb3VudCBpbiBjYXNlIHdlIGFyZSBsb29waW5nLiAqLworCQlUc3RfY291 bnQ9MDsKKworCQkvKiAKKwkJICogSW52b2tlIHV0aW1lcygyKSB0byBzZXQgVEVNUF9GSUxFIGFj Y2VzcyBhbmQKKwkJICogbW9kaWZpY2F0aW9uIHRpbWVzIHRvIHRoZSBjdXJyZW50IHRpbWUuCisJ CSAqLworCQlURVNUKHV0aW1lcyhURU1QX0ZJTEUsIE5VTEwpKTsKKworCQkvKiBjaGVjayByZXR1 cm4gY29kZSBvZiB1dGltZXMoMikgKi8KKwkJaWYgKFRFU1RfUkVUVVJOID09IC0xKSB7CisJCQlU RVNUX0VSUk9SX0xPRyhURVNUX0VSUk5PKTsKKwkJCXRzdF9yZXNtKFRGQUlMLCAidXRpbWVzKCVz KSBGYWlsZWQsIGVycm5vPSVkIDogJXMiLAorCQkJCSBURU1QX0ZJTEUsIFRFU1RfRVJSTk8sIHN0 cmVycm9yKFRFU1RfRVJSTk8pKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBQZXJmb3JtIGZ1 bmN0aW9uYWwgdmVyaWZpY2F0aW9uIGlmIHRlc3QKKwkJCSAqIGV4ZWN1dGVkIHdpdGhvdXQgKC1m KSBvcHRpb24uCisJCQkgKi8KKwkJCWlmIChTVERfRlVOQ1RJT05BTF9URVNUKSB7CisJCQkJLyoK KwkJCQkgKiBTbGVlcCBmb3IgYSBzZWNvbmQgc28gdGhhdCBtb2QgdGltZSBhbmQKKwkJCQkgKiBh Y2Nlc3MgdGltZXMgd2lsbCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUKKwkJCQkgKiBjdXJyZW50IHRp bWUKKwkJCQkgKi8KKwkJCQlzbGVlcCgyKTsKKworCQkJCS8qCisJCQkJICogR2V0IHRoZSBjdXJy ZW50IHRpbWUgbm93LCBhZnRlciBjYWxsaW5nCisJCQkJICogdXRpbWVzKDIpCisJCQkJICovCisJ CQkJaWYgKChwcmVzX3RpbWUgPSB0aW1lKCZ0bG9jKSkgPCAwKSB7CisJCQkJCXRzdF9icmttKFRG QUlMLCBjbGVhbnVwLCAidGltZSgpICIKKwkJCQkJCSJmYWlsZWQgdG8gZ2V0IHByZXNlbnQgdGlt ZSAiCisJCQkJCQkiYWZ0ZXIgdXRpbWVzLCBlcnJvcj0lZCIsIGVycm5vKTsKKwkJCQkJLypOT1RS RUFDSEVEKi8KKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIEdldCB0aGUgbW9kaWZpY2F0aW9uIGFu ZCBhY2Nlc3MgdGltZXMgb2YKKwkJCQkgKiB0ZW1wb3JhcnkgZmlsZSB1c2luZyBzdGF0KDIpLgor CQkJCSAqLworCQkJCWlmIChzdGF0KFRFTVBfRklMRSwgJnN0YXRfYnVmKSA8IDApIHsKKwkJCQkJ dHN0X2Jya20oVEZBSUwsIGNsZWFudXAsICJzdGF0KDIpIG9mICIKKwkJCQkJCSIlcyBmYWlsZWQs IGVycm9yOiVkIiwKKwkJCQkJCSBURU1QX0ZJTEUsIFRFU1RfRVJSTk8pOworCQkJCQkvKk5PVFJF QUNIRUQqLworCQkJCX0KKwkJCQltb2RmX3RpbWUgPSBzdGF0X2J1Zi5zdF9tdGltZTsKKwkJCQlh Y2Nlc3NfdGltZSA9IHN0YXRfYnVmLnN0X2F0aW1lOworCisJCQkJLyogTm93IGRvIHRoZSBhY3R1 YWwgdmVyaWZpY2F0aW9uICovCisJCQkJaWYgKG1vZGZfdGltZSA8PSBjdXJyX3RpbWUgfHwgXAor CQkJCQltb2RmX3RpbWUgPj0gcHJlc190aW1lIHx8IFwKKwkJCQkJYWNjZXNzX3RpbWUgPD0gY3Vy cl90aW1lIHx8IFwKKwkJCQkJYWNjZXNzX3RpbWUgPj0gcHJlc190aW1lKSB7CisJCQkJCXRzdF9y ZXNtKFRGQUlMLCAiJXMgYWNjZXNzIGFuZCAiCisJCQkJCQkibW9kaWZpY2F0aW9uIHRpbWVzIG5v dCBzZXQiLAorCQkJCQkJIFRFTVBfRklMRSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJdHN0X3Jlc20o VFBBU1MsICJGdW5jdGlvbmFsaXR5IG9mICIKKwkJCQkJCSJ1dGltZXMoJXMsIE5VTEwpIHN1Y2Nl c3NmdWwiLAorCQkJCQkJIFRFTVBfRklMRSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl0c3Rf cmVzbShUUEFTUywgIiVzIGNhbGwgc3VjY2VlZGVkIiwgVENJRCk7CisJCQl9CisJCX0KKwkJVHN0 X2NvdW50Kys7CisJfQkvKiBFbmQgZm9yIFRFU1RfTE9PUElORyAqLworCisJLyogQ2FsbCBjbGVh bnVwKCkgdG8gdW5kbyBzZXR1cCBkb25lIGZvciB0aGUgdGVzdC4gKi8KKwljbGVhbnVwKCk7CisJ LypOT1RSRUFDSEVEKi8KKworCisgIHJldHVybigwKTsKKworfQkvKiBFbmQgbWFpbiAqLworCisv KgorICogdm9pZAorICogc2V0dXAoKSAtIHBlcmZvcm1zIGFsbCBPTkUgVElNRSBzZXR1cCBmb3Ig dGhpcyB0ZXN0LgorICogIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGNoYW5nZSBk aXJlY3RvcnkgdG8gaXQuCisgKiAgQ3JlYXRlIGEgdGVzdCBmaWxlIHVuZGVyIHRlbXBvcmFyeSBk aXJlY3RvcnkgYW5kIGNsb3NlIGl0CisgKi8KK3ZvaWQgCitzZXR1cCgpCit7CisJaW50IGZpbGRl czsJCQkvKiBmaWxlIGhhbmRsZSBmb3IgdGVtcCBmaWxlICovCisKKwkvKiBjYXB0dXJlIHNpZ25h bHMgKi8KKwl0c3Rfc2lnKEZPUkssIERFRl9IQU5ETEVSLCBjbGVhbnVwKTsKKworCS8qIENoZWNr IHRoYXQgdGhlIHRlc3QgcHJvY2VzcyBpZCBpcyBzdXBlci9yb290ICAqLworCWlmIChnZXRldWlk KCkgIT0gMCkgeworCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgIk11c3QgYmUgc3VwZXIvcm9vdCBm b3IgdGhpcyB0ZXN0ISIpOworCQl0c3RfZXhpdCgpOworCX0KKworCS8qIFBhdXNlIGlmIHRoYXQg b3B0aW9uIHdhcyBzcGVjaWZpZWQgKi8KKwlURVNUX1BBVVNFOworCisJLyogbWFrZSBhIHRlbXAg ZGlyZWN0b3J5IGFuZCBjZCB0byBpdCAqLworCXRzdF90bXBkaXIoKTsKKworCS8qIENyZWF0IGEg dGVtcG9yYXJ5IGZpbGUgdW5kZXIgYWJvdmUgZGlyZWN0b3J5ICovCisJaWYgKChmaWxkZXMgPSBj cmVhdChURU1QX0ZJTEUsIEZJTEVfTU9ERSkpID09IC0xKSB7CisJCXRzdF9icmttKFRCUk9LLCBj bGVhbnVwLAorCQkJICJjcmVhdCglcywgJSNvKSBGYWlsZWQsIGVycm5vPSVkIDolcyIsCisJCQkg VEVNUF9GSUxFLCBGSUxFX01PREUsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworCQkvKk5PVFJF QUNIRUQqLworCX0KKworCS8qIENsb3NlIHRoZSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkICovCisJ aWYgKGNsb3NlKGZpbGRlcykgPCAwKSB7CisJCXRzdF9icmttKFRCUk9LLCBjbGVhbnVwLAorCQkJ ICJjbG9zZSglcykgRmFpbGVkLCBlcnJubz0lZCA6ICVzOiIsCisJCQkgVEVNUF9GSUxFLCBlcnJu bywgc3RyZXJyb3IoZXJybm8pKTsKKwkJLypOT1RSRUFDSEVEKi8KKwl9CisKKwkvKiBHZXQgdGhl IGN1cnJlbnQgdGltZSAqLworCWlmICgoY3Vycl90aW1lID0gdGltZSgmdGxvYykpIDwgMCkgewor CQl0c3RfYnJrbShUQlJPSywgY2xlYW51cCwKKwkJCSAidGltZSgpIGZhaWxlZCB0byBnZXQgY3Vy cmVudCB0aW1lLCBlcnJubz0lZCIsCisJCQkgZXJybm8pOworCQkvKk5PVFJFQUNIRUQqLworCX0K KworCS8qCisJICogU2xlZXAgZm9yIGEgc2Vjb25kIHNvIHRoYXQgbW9kIHRpbWUgYW5kIGFjY2Vz cyB0aW1lcyB3aWxsIGJlCisJICogZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgdGltZQorCSAq LworCXNsZWVwKDIpOwkvKiBzbGVlcCgxKSBvbiBJQTY0IHNvbWV0aW1lcyBzbGVlcHMgPCAxIHNl YyEhICovCisJCQorfQkvKiBFbmQgc2V0dXAoKSAqLworCisvKgorICogdm9pZAorICogY2xlYW51 cCgpIC0gcGVyZm9ybXMgYWxsIE9ORSBUSU1FIGNsZWFudXAgZm9yIHRoaXMgdGVzdCBhdAorICog ICAgICAgICAgICAgY29tcGxldGlvbiBvciBwcmVtYXR1cmUgZXhpdC4KKyAqICBSZW1vdmUgdGhl IHRlc3QgZGlyZWN0b3J5IGFuZCB0ZXN0ZmlsZSBjcmVhdGVkIGluIHRoZSBzZXR1cC4KKyAqLwor dm9pZCAKK2NsZWFudXAoKQoreworCS8qCisJICogcHJpbnQgdGltaW5nIHN0YXRzIGlmIHRoYXQg b3B0aW9uIHdhcyBzcGVjaWZpZWQuCisJICogcHJpbnQgZXJybm8gbG9nIGlmIHRoYXQgb3B0aW9u IHdhcyBzcGVjaWZpZWQuCisJICovCisJVEVTVF9DTEVBTlVQOworCisJLyogUmVtb3ZlIHRtcCBk aXIgYW5kIGFsbCBmaWxlcyBpbiBpdCAqLworCXRzdF9ybWRpcigpOworCisJLyogZXhpdCB3aXRo IHJldHVybiBjb2RlIGFwcHJvcHJpYXRlIGZvciByZXN1bHRzICovCisJdHN0X2V4aXQoKTsKK30J LyogRW5kIGNsZWFudXAoKSAqLwpkaWZmIC1ydU4gbHRwLWZ1bGwtMjAwNjExMjEtb3JpZy90ZXN0 Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0aW1lcy91dGltZXMwMi5jIGx0cC1mdWxsLTIwMDYxMTIx L3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1lczAyLmMKLS0tIGx0cC1mdWxs LTIwMDYxMTIxLW9yaWcvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvdXRpbWVzMDIu YwlXZWQgRGVjIDMxIDE4OjAwOjAwIDE5NjkKKysrIGx0cC1mdWxsLTIwMDYxMTIxL3Rlc3RjYXNl cy9rZXJuZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1lczAyLmMJVGh1IERlYyAxNCAxMjozNjoxNCAy MDA2CkBAIC0wLDAgKzEsMjk5IEBACisvKgorICoKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5h dGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMQorICoKKyAqICAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZQorICogICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisK Ky8qCisgKiBUZXN0IE5hbWU6IHV0aW1lczAyCisgKgorICogVGVzdCBEZXNjcmlwdGlvbjoKKyAq ICBWZXJpZnkgdGhhdCB0aGUgc3lzdGVtIGNhbGwgdXRpbWVzKCkgc3VjY2Vzc2Z1bGx5IHNldHMg dGhlIG1vZGlmaWNhdGlvbgorICogIGFuZCBhY2Nlc3MgdGltZXMgb2YgYSBmaWxlIHRvIHRoZSBj dXJyZW50IHRpbWUsIHVuZGVyIHRoZSBmb2xsb3dpbmcKKyAqICBjb25zdHJhaW50cywKKyAqCS0g VGhlIHRpbWVzIGFyZ3VtZW50IGlzIG51bGwuCisgKgktIFRoZSB1c2VyIElEIG9mIHRoZSBwcm9j ZXNzIGlzIG5vdCAicm9vdCIuCisgKgktIFRoZSBmaWxlIGlzIG93bmVkIGJ5IHRoZSB1c2VyIElE IG9mIHRoZSBwcm9jZXNzLgorICoKKyAqIEV4cGVjdGVkIFJlc3VsdDoKKyAqICB1dGltZXMgc3Vj Y2VlZHMgcmV0dXJuaW5nIHplcm8gYW5kIHNldHMgdGhlIGFjY2VzcyBhbmQgbW9kaWZpY2F0aW9u CisgKiAgdGltZXMgb2YgdGhlIGZpbGUgdG8gdGhlIGN1cnJlbnQgdGltZS4KKyAqCisgKiBBbGdv cml0aG06CisgKiAgU2V0dXA6CisgKiAgIFNldHVwIHNpZ25hbCBoYW5kbGluZy4KKyAqICAgQ3Jl YXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkuCisgKiAgIFBhdXNlIGZvciBTSUdVU1IxIGlmIG9wdGlv biBzcGVjaWZpZWQuCisgKgorICogIFRlc3Q6CisgKiAgIExvb3AgaWYgdGhlIHByb3BlciBvcHRp b25zIGFyZSBnaXZlbi4KKyAqICAgRXhlY3V0ZSBzeXN0ZW0gY2FsbAorICogICBDaGVjayByZXR1 cm4gY29kZSwgaWYgc3lzdGVtIGNhbGwgZmFpbGVkIChyZXR1cm49LTEpCisgKiAgIAlMb2cgdGhl IGVycm5vIGFuZCBJc3N1ZSBhIEZBSUwgbWVzc2FnZS4KKyAqICAgT3RoZXJ3aXNlLAorICogICAJ VmVyaWZ5IHRoZSBGdW5jdGlvbmFsaXR5IG9mIHN5c3RlbSBjYWxsCQorICogICAgICBpZiBzdWNj ZXNzZnVsLAorICogICAgICAJSXNzdWUgRnVuY3Rpb25hbGl0eS1QYXNzIG1lc3NhZ2UuCisgKiAg ICAgIE90aGVyd2lzZSwKKyAqCQlJc3N1ZSBGdW5jdGlvbmFsaXR5LUZhaWwgbWVzc2FnZS4KKyAq ICBDbGVhbnVwOgorICogICBQcmludCBlcnJubyBsb2cgYW5kL29yIHRpbWluZyBzdGF0cyBpZiBv cHRpb25zIGdpdmVuCisgKiAgIERlbGV0ZSB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBjcmVhdGVk LgorICoKKyAqIFVzYWdlOiAgPGZvciBjb21tYW5kLWxpbmU+CisgKgl1dGltZXMwMiBbLWMgbl0g Wy1lXSBbLWZdIFstaSBuXSBbLUkgeF0gWy1wIHhdIFstdF0KKyAqCXdoZXJlLCAgLWMgbiA6IFJ1 biBuIGNvcGllcyBjb25jdXJyZW50bHkuCisgKgkJLWUgICA6IFR1cm4gb24gZXJybm8gbG9nZ2lu Zy4KKyAqCQktZiAgIDogVHVybiBvZmYgZnVuY3Rpb25hbGl0eSBUZXN0aW5nLgorICoJCS1pIG4g OiBFeGVjdXRlIHRlc3QgbiB0aW1lcy4KKyAqCQktSSB4IDogRXhlY3V0ZSB0ZXN0IGZvciB4IHNl Y29uZHMuCisgKgkJLVAgeCA6IFBhdXNlIGZvciB4IHNlY29uZHMgYmV0d2VlbiBpdGVyYXRpb25z LgorICoJCS10ICAgOiBUdXJuIG9uIHN5c2NhbGwgdGltaW5nLgorICoKKyAqIEhpc3RvcnkKKyAq CTA3LzIwMDEgSm9obiBHZW9yZ2UKKyAqCQktUG9ydGVkCisgKgorICogUmVzdHJpY3Rpb25zOgor ICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNs dWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+ CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxz eXMvc3RhdC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1 ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgInRlc3QuaCIKKyNpbmNsdWRlICJ1c2N0ZXN0LmgiCisK KyNkZWZpbmUgVEVNUF9GSUxFCSJ0bXBfZmlsZSIKKyNkZWZpbmUgRklMRV9NT0RFCVNfSVJVU1Ig fCBTX0lSR1JQIHwgU19JUk9USAorCitjaGFyICpUQ0lEPSJ1dGltZXMwMiI7CQkvKiBUZXN0IHBy b2dyYW0gaWRlbnRpZmllci4gICAgKi8KK2ludCBUU1RfVE9UQUw9MTsJCS8qIFRvdGFsIG51bWJl ciBvZiB0ZXN0IGNhc2VzLiAqLworZXh0ZXJuIGludCBUc3RfY291bnQ7CQkvKiBUZXN0IENhc2Ug Y291bnRlciBmb3IgdHN0Xyogcm91dGluZXMgKi8KK3RpbWVfdCBjdXJyX3RpbWU7CQkvKiBjdXJy ZW50IHRpbWUgaW4gc2Vjb25kcyAqLwordGltZV90IHRsb2M7CQkJLyogYXJndW1lbnQgdmFyLiBm b3IgdGltZSgpICovCitpbnQgZXhwX2Vub3NbXT17MH07CitjaGFyIG5vYm9keV91aWRbXSA9ICJu b2JvZHkiOworc3RydWN0IHBhc3N3ZCAqbHRwdXNlcjsKKworCit2b2lkIHNldHVwKCk7CQkJLyog TWFpbiBzZXR1cCBmdW5jdGlvbiBvZiB0ZXN0ICovCit2b2lkIGNsZWFudXAoKTsJCQkvKiBjbGVh bnVwIGZ1bmN0aW9uIGZvciB0aGUgdGVzdCAqLworCitpbnQKK21haW4oaW50IGFjLCBjaGFyICoq YXYpCit7CisJc3RydWN0IHN0YXQgc3RhdF9idWY7CS8qIHN0cnVjdCBidWZmZXIgdG8gaG9sZCBm aWxlIGluZm8uICovCisJaW50IGxjOwkJCS8qIGxvb3AgY291bnRlciAqLworCWNoYXIgKm1zZzsJ CS8qIG1lc3NhZ2UgcmV0dXJuZWQgZnJvbSBwYXJzZV9vcHRzICovCisJdGltZV90IG1vZGZfdGlt ZSwgYWNjZXNzX3RpbWU7CisJdGltZV90IHByZXNfdGltZTsJLyogZmlsZSBtb2RpZmljYXRpb24v YWNjZXNzL3ByZXNlbnQgdGltZSAqLworICAgIAorCS8qIFBhcnNlIHN0YW5kYXJkIG9wdGlvbnMg Z2l2ZW4gdG8gcnVuIHRoZSB0ZXN0LiAqLworCW1zZyA9IHBhcnNlX29wdHMoYWMsIGF2LCAob3B0 aW9uX3QgKikgTlVMTCwgTlVMTCk7CisJaWYgKG1zZyAhPSAoY2hhciAqKSBOVUxMKSB7CisJCXRz dF9icmttKFRCUk9LLCBOVUxMLCAiT1BUSU9OIFBBUlNJTkcgRVJST1IgLSAlcyIsIG1zZyk7CisJ CXRzdF9leGl0KCk7CisJfQorCisJLyogUGVyZm9ybSBnbG9iYWwgc2V0dXAgZm9yIHRlc3QgKi8K KwlzZXR1cCgpOworCisJLyogc2V0IHRoZSBleHBlY3RlZCBlcnJub3MuLi4gKi8KKwlURVNUX0VY UF9FTk9TKGV4cF9lbm9zKTsKKworCS8qIENoZWNrIGxvb3Bpbmcgc3RhdGUgaWYgLWkgb3B0aW9u IGdpdmVuICovCisJZm9yIChsYyA9IDA7IFRFU1RfTE9PUElORyhsYyk7IGxjKyspIHsKKwkJLyog UmVzZXQgVHN0X2NvdW50IGluIGNhc2Ugd2UgYXJlIGxvb3BpbmcuICovCisJCVRzdF9jb3VudD0w OworCisJCS8qIAorCQkgKiBJbnZva2UgdXRpbWVzKDIpIHRvIHNldCBURU1QX0ZJTEUgYWNjZXNz IGFuZAorCQkgKiBtb2RpZmljYXRpb24gdGltZXMgdG8gdGhlIGN1cnJlbnQgdGltZS4KKwkJICov CisJCVRFU1QodXRpbWVzKFRFTVBfRklMRSwgTlVMTCkpOworCisJCS8qIGNoZWNrIHJldHVybiBj b2RlIG9mIHV0aW1lcygyKSAqLworCQlpZiAoVEVTVF9SRVRVUk4gPT0gLTEpIHsKKwkJCVRFU1Rf RVJST1JfTE9HKFRFU1RfRVJSTk8pOworCQkJdHN0X3Jlc20oVEZBSUwsICJ1dGltZXMoJXMpIEZh aWxlZCwgZXJybm89JWQgOiAlcyIsCisJCQkJIFRFTVBfRklMRSwgVEVTVF9FUlJOTywgc3RyZXJy b3IoVEVTVF9FUlJOTykpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFBlcmZvcm0gZnVuY3Rp b25hbCB2ZXJpZmljYXRpb24gaWYgdGVzdAorCQkJICogZXhlY3V0ZWQgd2l0aG91dCAoLWYpIG9w dGlvbi4KKwkJCSAqLworCQkJaWYgKFNURF9GVU5DVElPTkFMX1RFU1QpIHsKKwkJCQkvKgorCQkJ CSAqIFNsZWVwIGZvciBhIHNlY29uZCBzbyB0aGF0IG1vZCB0aW1lIGFuZAorCQkJCSAqIGFjY2Vz cyB0aW1lcyB3aWxsIGJlIGRpZmZlcmVudCBmcm9tIHRoZQorCQkJCSAqIGN1cnJlbnQgdGltZQor CQkJCSAqLworCQkJCXNsZWVwKDIpOworCisJCQkJLyoKKwkJCQkgKiBHZXQgdGhlIGN1cnJlbnQg dGltZSBub3csIGFmdGVyIGNhbGxpbmcKKwkJCQkgKiB1dGltZXMoMikKKwkJCQkgKi8KKwkJCQlp ZiAoKHByZXNfdGltZSA9IHRpbWUoJnRsb2MpKSA8IDApIHsKKwkJCQkJdHN0X2Jya20oVEZBSUws IGNsZWFudXAsICJ0aW1lKCkgIgorCQkJCQkJImZhaWxlZCB0byBnZXQgcHJlc2VudCB0aW1lICIK KwkJCQkJCSJhZnRlciB1dGltZXMsIGVycm9yPSVkIiwKKwkJCQkJCWVycm5vKTsKKwkJCQkJLypO T1RSRUFDSEVEKi8KKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIEdldCB0aGUgbW9kaWZpY2F0aW9u IGFuZCBhY2Nlc3MgdGltZXMgb2YKKwkJCQkgKiB0ZW1wb3JhcnkgZmlsZSB1c2luZyBzdGF0KDIp LgorCQkJCSAqLworCQkJCWlmIChzdGF0KFRFTVBfRklMRSwgJnN0YXRfYnVmKSA8IDApIHsKKwkJ CQkJdHN0X2Jya20oVEZBSUwsIGNsZWFudXAsICJzdGF0KDIpIG9mICIKKwkJCQkJCSIlcyBmYWls ZWQsIGVycm5vOiVkIiwKKwkJCQkJCVRFTVBfRklMRSwgVEVTVF9FUlJOTyk7CisJCQkJCS8qTk9U UkVBQ0hFRCovCisJCQkJfQorCQkJCW1vZGZfdGltZSA9IHN0YXRfYnVmLnN0X210aW1lOworCQkJ CWFjY2Vzc190aW1lID0gc3RhdF9idWYuc3RfYXRpbWU7CisKKwkJCQkvKiBOb3cgZG8gdGhlIGFj dHVhbCB2ZXJpZmljYXRpb24gKi8KKwkJCQlpZiAobW9kZl90aW1lIDw9IGN1cnJfdGltZSB8fCBc CisJCQkJCW1vZGZfdGltZSA+PSBwcmVzX3RpbWUgfHwgXAorCQkJCQlhY2Nlc3NfdGltZSA8PSBj dXJyX3RpbWUgfHwgXAorCQkJCQlhY2Nlc3NfdGltZSA+PSBwcmVzX3RpbWUpIHsKKwkJCQkJdHN0 X3Jlc20oVEZBSUwsICIlcyBhY2Nlc3MgYW5kICIKKwkJCQkJCSJtb2RpZmljYXRpb24gdGltZXMg bm90IHNldCIsCisJCQkJCQlURU1QX0ZJTEUpOworCQkJCX0gZWxzZSB7CisJCQkJCXRzdF9yZXNt KFRQQVNTLCAiRnVuY3Rpb25hbGl0eSBvZiAiCisJCQkJCQkidXRpbWVzKCVzLCBOVUxMKSBzdWNj ZXNzZnVsIiwKKwkJCQkJCVRFTVBfRklMRSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl0c3Rf cmVzbShUUEFTUywgIiVzIGNhbGwgc3VjY2VlZGVkIiwgVENJRCk7CisJCQl9CisJCX0KKwkJVHN0 X2NvdW50Kys7CisJfQkvKiBFbmQgZm9yIFRFU1RfTE9PUElORyAqLworCisJLyogQ2FsbCBjbGVh bnVwKCkgdG8gdW5kbyBzZXR1cCBkb25lIGZvciB0aGUgdGVzdC4gKi8KKwljbGVhbnVwKCk7CisJ LypOT1RSRUFDSEVEKi8KKworCisgIHJldHVybigwKTsKKworfQkvKiBFbmQgbWFpbiAqLworCisv KgorICogdm9pZAorICogc2V0dXAoKSAtIHBlcmZvcm1zIGFsbCBPTkUgVElNRSBzZXR1cCBmb3Ig dGhpcyB0ZXN0LgorICogIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGNoYW5nZSBk aXJlY3RvcnkgdG8gaXQuCisgKiAgQ3JlYXRlIGEgdGVzdCBmaWxlIHVuZGVyIHRlbXBvcmFyeSBk aXJlY3RvcnkgYW5kIGNsb3NlIGl0CisgKi8KK3ZvaWQgCitzZXR1cCgpCit7CisJaW50IGZpbGRl czsJCQkvKiBmaWxlIGhhbmRsZSBmb3IgdGVtcCBmaWxlICovCisKKwkvKiBjYXB0dXJlIHNpZ25h bHMgKi8KKwl0c3Rfc2lnKEZPUkssIERFRl9IQU5ETEVSLCBjbGVhbnVwKTsKKworCS8qIFN3aXRj aCB0byBub2JvZHkgdXNlciBmb3IgY29ycmVjdCBlcnJvciBjb2RlIGNvbGxlY3Rpb24gKi8KKyAg ICAgICAgaWYgKGdldGV1aWQoKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgdHN0X2Jya20oVEJS T0ssIHRzdF9leGl0LCAiVGVzdCBtdXN0IGJlIHJ1biBhcyByb290Iik7CisgICAgICAgIH0KKyAg ICAgICAgIGx0cHVzZXIgPSBnZXRwd25hbShub2JvZHlfdWlkKTsKKyAgICAgICAgIGlmIChzZXR1 aWQobHRwdXNlci0+cHdfdWlkKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIHRzdF9yZXNtKFRJ TkZPLCAic2V0dWlkIGZhaWxlZCB0byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInRvIHNl dCB0aGUgZWZmZWN0aXZlIHVpZCB0byAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRw dXNlci0+cHdfdWlkKTsKKyAgICAgICAgICAgICAgICBwZXJyb3IoInNldHVpZCIpOworICAgICAg ICAgfQorCQorCisJLyogUGF1c2UgaWYgdGhhdCBvcHRpb24gd2FzIHNwZWNpZmllZAorCSAqIFRF U1RfUEFVU0UgY29udGFpbnMgdGhlIGNvZGUgdG8gZm9yayB0aGUgdGVzdCB3aXRoIHRoZSAtaSBv cHRpb24uCisJICogWW91IHdhbnQgdG8gbWFrZSBzdXJlIHlvdSBkbyB0aGlzIGJlZm9yZSB5b3Ug Y3JlYXRlIHlvdXIgdGVtcG9yYXJ5CisJICogZGlyZWN0b3J5LgorCSAqLworCVRFU1RfUEFVU0U7 CisKKwkvKiBtYWtlIGEgdGVtcCBkaXJlY3RvcnkgYW5kIGNkIHRvIGl0ICovCisJdHN0X3RtcGRp cigpOworCisJLyogQ3JlYXQgYSB0ZW1wb3JhcnkgZmlsZSB1bmRlciBhYm92ZSBkaXJlY3Rvcnkg Ki8KKwlpZiAoKGZpbGRlcyA9IGNyZWF0KFRFTVBfRklMRSwgRklMRV9NT0RFKSkgPT0gLTEpIHsK KwkJdHN0X2Jya20oVEJST0ssIGNsZWFudXAsCisJCQkgImNyZWF0KCVzLCAlI28pIEZhaWxlZCwg ZXJybm89JWQgOiVzIiwKKwkJCSBURU1QX0ZJTEUsIEZJTEVfTU9ERSwgZXJybm8sIHN0cmVycm9y KGVycm5vKSk7CisJCS8qTk9UUkVBQ0hFRCovCisJfQorCisJLyogQ2xvc2UgdGhlIHRlbXBvcmFy eSBmaWxlIGNyZWF0ZWQgKi8KKwlpZiAoY2xvc2UoZmlsZGVzKSA8IDApIHsKKwkJdHN0X2Jya20o VEJST0ssIGNsZWFudXAsCisJCQkgImNsb3NlKCVzKSBGYWlsZWQsIGVycm5vPSVkIDogJXM6IiwK KwkJCSBURU1QX0ZJTEUsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworCQkvKk5PVFJFQUNIRUQq LworCX0KKworCS8qIEdldCB0aGUgY3VycmVudCB0aW1lICovCisJaWYgKChjdXJyX3RpbWUgPSB0 aW1lKCZ0bG9jKSkgPCAwKSB7CisJCXRzdF9icmttKFRCUk9LLCBjbGVhbnVwLAorCQkJICJ0aW1l KCkgZmFpbGVkIHRvIGdldCBjdXJyZW50IHRpbWUsIGVycm5vPSVkIiwKKwkJCSBlcnJubyk7CisJ CS8qTk9UUkVBQ0hFRCovCisJfQorCisJLyoKKwkgKiBTbGVlcCBmb3IgYSBzZWNvbmQgc28gdGhh dCBtb2QgdGltZSBhbmQgYWNjZXNzIHRpbWVzIHdpbGwgYmUKKwkgKiBkaWZmZXJlbnQgZnJvbSB0 aGUgY3VycmVudCB0aW1lCisJICovCisJc2xlZXAoMik7CS8qIHNsZWVwKDEpIG9uIElBNjQgc29t ZXRpbWVzIHNsZWVwcyA8IDEgc2VjISEgKi8KKwkJCit9CS8qIEVuZCBzZXR1cCgpICovCisKKy8q CisgKiB2b2lkCisgKiBjbGVhbnVwKCkgLSBwZXJmb3JtcyBhbGwgT05FIFRJTUUgY2xlYW51cCBm b3IgdGhpcyB0ZXN0IGF0CisgKiAgICAgICAgICAgICBjb21wbGV0aW9uIG9yIHByZW1hdHVyZSBl eGl0LgorICogIFJlbW92ZSB0aGUgdGVzdCBkaXJlY3RvcnkgYW5kIHRlc3RmaWxlIGNyZWF0ZWQg aW4gdGhlIHNldHVwLgorICovCit2b2lkIAorY2xlYW51cCgpCit7CisJLyoKKwkgKiBwcmludCB0 aW1pbmcgc3RhdHMgaWYgdGhhdCBvcHRpb24gd2FzIHNwZWNpZmllZC4KKwkgKiBwcmludCBlcnJu byBsb2cgaWYgdGhhdCBvcHRpb24gd2FzIHNwZWNpZmllZC4KKwkgKi8KKwlURVNUX0NMRUFOVVA7 CisKKwkvKiBSZW1vdmUgdG1wIGRpciBhbmQgYWxsIGZpbGVzIGluIGl0ICovCisJdHN0X3JtZGly KCk7CisKKwkvKiBleGl0IHdpdGggcmV0dXJuIGNvZGUgYXBwcm9wcmlhdGUgZm9yIHJlc3VsdHMg Ki8KKwl0c3RfZXhpdCgpOworfQkvKiBFbmQgY2xlYW51cCgpICovCmRpZmYgLXJ1TiBsdHAtZnVs bC0yMDA2MTEyMS1vcmlnL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1lczAz LmMgbHRwLWZ1bGwtMjAwNjExMjEvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvdXRp bWVzMDMuYwotLS0gbHRwLWZ1bGwtMjAwNjExMjEtb3JpZy90ZXN0Y2FzZXMva2VybmVsL3N5c2Nh bGxzL3V0aW1lcy91dGltZXMwMy5jCVdlZCBEZWMgMzEgMTg6MDA6MDAgMTk2OQorKysgbHRwLWZ1 bGwtMjAwNjExMjEvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvdXRpbWVzMDMuYwlU aHUgRGVjIDE0IDEyOjM1OjU5IDIwMDYKQEAgLTAsMCArMSwzNzYgQEAKKy8qCisgKgorICogICBD b3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAx CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK KyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlCisgKiAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZv dW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAy MTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIFRlc3QgTmFtZTogdXRpbWVzMDMKKyAqCisgKiBU ZXN0IERlc2NyaXB0aW9uOgorICogIFZlcmlmeSB0aGF0IHRoZSBzeXN0ZW0gY2FsbCB1dGltZXMo KSBzdWNjZXNzZnVsbHkgc2V0cyB0aGUgbW9kaWZpY2F0aW9uCisgKiAgYW5kIGFjY2VzcyB0aW1l cyBvZiBhIGZpbGUgdG8gdGhlIGN1cnJlbnQgdGltZSwgdW5kZXIgdGhlIGZvbGxvd2luZworICog IGNvbnN0cmFpbnRzLAorICoJLSBUaGUgdGltZXMgYXJndW1lbnQgaXMgbnVsbC4KKyAqCS0gVGhl IHVzZXIgSUQgb2YgdGhlIHByb2Nlc3MgaXMgbm90ICJyb290Ii4KKyAqCS0gVGhlIGZpbGUgaXMg bm90IG93bmVkIGJ5IHRoZSB1c2VyIElEIG9mIHRoZSBwcm9jZXNzLgorICoJLSBUaGUgdXNlciBJ RCBvZiB0aGUgcHJvY2VzcyBoYXMgd3JpdGUgYWNjZXNzIHRvIHRoZSBmaWxlLgorICoKKyAqIEV4 cGVjdGVkIFJlc3VsdDoKKyAqICB1dGltZXMgc3VjY2VlZHMgcmV0dXJuaW5nIHplcm8gYW5kIHNl dHMgdGhlIGFjY2VzcyBhbmQgbW9kaWZpY2F0aW8KKyAqICB0aW1lcyBvZiB0aGUgZmlsZSB0byB0 aGUgY3VycmVudCB0aW1lLgorICoKKyAqIEFsZ29yaXRobToKKyAqICBTZXR1cDoKKyAqICAgU2V0 dXAgc2lnbmFsIGhhbmRsaW5nLgorICogICBDcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KKyAq ICAgUGF1c2UgZm9yIFNJR1VTUjEgaWYgb3B0aW9uIHNwZWNpZmllZC4KKyAqCisgKiAgVGVzdDoK KyAqICAgTG9vcCBpZiB0aGUgcHJvcGVyIG9wdGlvbnMgYXJlIGdpdmVuLgorICogICBFeGVjdXRl IHN5c3RlbSBjYWxsCisgKiAgIENoZWNrIHJldHVybiBjb2RlLCBpZiBzeXN0ZW0gY2FsbCBmYWls ZWQgKHJldHVybj0tMSkKKyAqICAgCUxvZyB0aGUgZXJybm8gYW5kIElzc3VlIGEgRkFJTCBtZXNz YWdlLgorICogICBPdGhlcndpc2UsCisgKiAgIAlWZXJpZnkgdGhlIEZ1bmN0aW9uYWxpdHkgb2Yg c3lzdGVtIGNhbGwJCisgKiAgICAgIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgIAlJc3N1ZSBGdW5j dGlvbmFsaXR5LVBhc3MgbWVzc2FnZS4KKyAqICAgICAgT3RoZXJ3aXNlLAorICoJCUlzc3VlIEZ1 bmN0aW9uYWxpdHktRmFpbCBtZXNzYWdlLgorICogIENsZWFudXA6CisgKiAgIFByaW50IGVycm5v IGxvZyBhbmQvb3IgdGltaW5nIHN0YXRzIGlmIG9wdGlvbnMgZ2l2ZW4KKyAqICAgRGVsZXRlIHRo ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGNyZWF0ZWQuCisgKgorICogVXNhZ2U6ICA8Zm9yIGNvbW1h bmQtbGluZT4KKyAqICB1dGltZXMwMyBbLWMgbl0gWy1lXSBbLWZdIFstaSBuXSBbLUkgeF0gWy1w IHhdIFstdF0KKyAqCXdoZXJlLCAgLWMgbiA6IFJ1biBuIGNvcGllcyBjb25jdXJyZW50bHkuCisg KgkJLWUgICA6IFR1cm4gb24gZXJybm8gbG9nZ2luZy4KKyAqCQktZiAgIDogVHVybiBvZmYgZnVu Y3Rpb25hbGl0eSBUZXN0aW5nLgorICoJCS1pIG4gOiBFeGVjdXRlIHRlc3QgbiB0aW1lcy4KKyAq CQktSSB4IDogRXhlY3V0ZSB0ZXN0IGZvciB4IHNlY29uZHMuCisgKgkJLVAgeCA6IFBhdXNlIGZv ciB4IHNlY29uZHMgYmV0d2VlbiBpdGVyYXRpb25zLgorICoJCS10ICAgOiBUdXJuIG9uIHN5c2Nh bGwgdGltaW5nLgorICoKKyAqIEhpc3RvcnkKKyAqCTA3LzIwMDEgSm9obiBHZW9yZ2UKKyAqCQkt UG9ydGVkCisgKgorICogUmVzdHJpY3Rpb25zOgorICogIFRoaXMgdGVzdCBzaG91bGQgYmUgcnVu IGJ5IHJvb3Qgb25seS4KKyAqICBub2JvZHkgYW5kIGJpbiBtdXN0IGJlIHZhbGlkIHVzZXJzLgor ICogCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNs dWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o PgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8d2FpdC5oPgorI2luY2x1ZGUgPHN5 cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisj aW5jbHVkZSAidGVzdC5oIgorI2luY2x1ZGUgInVzY3Rlc3QuaCIKKworI2RlZmluZSBURU1QX0ZJ TEUJInRtcF9maWxlIgorI2RlZmluZSBGSUxFX01PREUJU19JUldYVSB8IFNfSVJHUlAgfCBTX0lX R1JQfCBTX0lST1RIIHwgU19JV09USAorI2RlZmluZSBMVFBVU0VSMQkibm9ib2R5IgorI2RlZmlu ZSBMVFBVU0VSMgkiYmluIgorCitjaGFyICpUQ0lEPSJ1dGltZXMwMyI7CQkvKiBUZXN0IHByb2dy YW0gaWRlbnRpZmllci4gICAgKi8KK2ludCBUU1RfVE9UQUw9MTsJCS8qIFRvdGFsIG51bWJlciBv ZiB0ZXN0IGNhc2VzLiAqLworZXh0ZXJuIGludCBUc3RfY291bnQ7CQkvKiBUZXN0IENhc2UgY291 bnRlciBmb3IgdHN0Xyogcm91dGluZXMgKi8KK3RpbWVfdCBjdXJyX3RpbWU7CQkvKiBjdXJyZW50 IHRpbWUgaW4gc2Vjb25kcyAqLwordGltZV90IHRsb2M7CQkJLyogYXJndW1lbnQgdmFyLiBmb3Ig dGltZSgpICovCitpbnQgZXhwX2Vub3NbXT17MH07CisKK3N0cnVjdCBwYXNzd2QgKmx0cHVzZXI7 ICAgICAgICAgLyogcGFzc3dvcmQgc3RydWN0IGZvciBsdHB1c2VycyAqLwordWlkX3QgdXNlcl91 aWQ7ICAgICAgICAgICAgICAgICAvKiB1c2VyIGlkIG9mIGx0cHVzZXIgKi8KK2dpZF90IGdyb3Vw X2dpZDsgICAgICAgICAgICAgICAgLyogZ3JvdXAgaWQgb2YgbHRwdXNlciAqLworaW50IHN0YXR1 czsKKwordm9pZCBzZXR1cCgpOwkJCS8qIE1haW4gc2V0dXAgZnVuY3Rpb24gb2YgdGVzdCAqLwor dm9pZCBjbGVhbnVwKCk7CQkJLyogY2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIHRlc3QgKi8KKwor aW50CittYWluKGludCBhYywgY2hhciAqKmF2KQoreworCXN0cnVjdCBzdGF0IHN0YXRfYnVmOwkv KiBzdHJ1Y3QgYnVmZmVyIHRvIGhvbGQgZmlsZSBpbmZvLiAqLworCWludCBsYzsJCQkvKiBsb29w IGNvdW50ZXIgKi8KKwljaGFyICptc2c7CQkvKiBtZXNzYWdlIHJldHVybmVkIGZyb20gcGFyc2Vf b3B0cyAqLworCXRpbWVfdCBtb2RmX3RpbWUsIGFjY2Vzc190aW1lOworCXRpbWVfdCBwcmVzX3Rp bWU7CS8qIGZpbGUgbW9kaWZpY2F0aW9uL2FjY2Vzcy9wcmVzZW50IHRpbWUgKi8KKwlwaWRfdCBw aWQ7CisgICAgCisJLyogUGFyc2Ugc3RhbmRhcmQgb3B0aW9ucyBnaXZlbiB0byBydW4gdGhlIHRl c3QuICovCisJbXNnID0gcGFyc2Vfb3B0cyhhYywgYXYsIChvcHRpb25fdCAqKSBOVUxMLCBOVUxM KTsKKwlpZiAobXNnICE9IChjaGFyICopIE5VTEwpIHsKKwkJdHN0X2Jya20oVEJST0ssIE5VTEws ICJPUFRJT04gUEFSU0lORyBFUlJPUiAtICVzIiwgbXNnKTsKKwkJdHN0X2V4aXQoKTsKKwl9CisK KwkvKiBQZXJmb3JtIGdsb2JhbCBzZXR1cCBmb3IgdGVzdCAqLworCXNldHVwKCk7CisKKwkvKiBz ZXQgdGhlIGV4cGVjdGVkIGVycm5vcy4uLiAqLworCVRFU1RfRVhQX0VOT1MoZXhwX2Vub3MpOwor CisJcGlkID0gRk9SS19PUl9WRk9SSygpOworCisJaWYgKHBpZCA9PSAtMSkgeworCQl0c3RfYnJr bShUQlJPSywgY2xlYW51cCwgImZvcmsoKSBmYWlsZWQiKTsKKwl9IGVsc2UgaWYgKHBpZCA9PSAw KSB7CisJCWlmICgobHRwdXNlciA9IGdldHB3bmFtKExUUFVTRVIxKSkgPT0gTlVMTCkgeworCQkJ dHN0X2Jya20oVEJST0ssY2xlYW51cCwiJXMgbm90IGZvdW5kIGluIC9ldGMvcGFzc3dkIiwKKwkJ CUxUUFVTRVIxKTsKKwkJfQorCisJCS8qIGdldCB1aWQvZ2lkIG9mIHVzZXIgYWNjb3JkaW5nbHkg Ki8KKwkJdXNlcl91aWQgPSBsdHB1c2VyLT5wd191aWQ7CisKKwkJc2V0ZXVpZCh1c2VyX3VpZCk7 CisKKwkJLyogQ2hlY2sgbG9vcGluZyBzdGF0ZSBpZiAtaSBvcHRpb24gZ2l2ZW4gKi8KKwkJZm9y IChsYyA9IDA7IFRFU1RfTE9PUElORyhsYyk7IGxjKyspIHsKKwkJCS8qIFJlc2V0IFRzdF9jb3Vu dCBpbiBjYXNlIHdlIGFyZSBsb29waW5nLiAqLworCQkJVHN0X2NvdW50PTA7CisKKwkJCS8qIAor CQkJICogSW52b2tlIHV0aW1lcygyKSB0byBzZXQgVEVNUF9GSUxFIGFjY2VzcyBhbmQKKwkJCSAq IG1vZGlmaWNhdGlvbiB0aW1lcyB0byB0aGUgY3VycmVudCB0aW1lLgorCQkJICovCisJCQlURVNU KHV0aW1lcyhURU1QX0ZJTEUsIE5VTEwpKTsKKworCQkJLyogY2hlY2sgcmV0dXJuIGNvZGUgb2Yg dXRpbWVzKDIpICovCisJCQlpZiAoVEVTVF9SRVRVUk4gPT0gLTEpIHsKKwkJCQlURVNUX0VSUk9S X0xPRyhURVNUX0VSUk5PKTsKKwkJCQl0c3RfcmVzbShURkFJTCwKKwkJCQkJInV0aW1lcyglcykg RmFpbGVkLCBlcnJubz0lZCA6ICVzIiwKKwkJCQkJVEVNUF9GSUxFLCBURVNUX0VSUk5PLAorCQkJ CQlzdHJlcnJvcihURVNUX0VSUk5PKSk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogUGVy Zm9ybSBmdW5jdGlvbmFsIHZlcmlmaWNhdGlvbiBpZiB0ZXN0CisJCQkJICogZXhlY3V0ZWQgd2l0 aG91dCAoLWYpIG9wdGlvbi4KKwkJCQkgKi8KKwkJCQlpZiAoU1REX0ZVTkNUSU9OQUxfVEVTVCkg eworCQkJCQkvKgorCQkJCQkgKiBTbGVlcCBmb3IgYSBzZWNvbmQgc28gdGhhdCBtb2QgdGltZQor CQkJCQkgKiBhbmQgYWNjZXNzIHRpbWVzIHdpbGwgYmUgZGlmZmVyZW50CisJCQkJCSAqIGZyb20g dGhlIGN1cnJlbnQgdGltZS4KKwkJCQkJICovCisJCQkJCXNsZWVwKDIpOworCisJCQkJCS8qCisJ CQkJCSAqIEdldCB0aGUgY3VycmVudCB0aW1lIG5vdywgYWZ0ZXIKKwkJCQkJICogY2FsbGluZyB1 dGltZXMoMikKKwkJCQkJICovCisJCQkJCWlmICgocHJlc190aW1lID0gdGltZSgmdGxvYykpIDwg MCkgeworCQkJCQkJdHN0X2Jya20oVEZBSUwsIGNsZWFudXAsCisJCQkJCQkJInRpbWUoKSBmYWls ZWQgdG8gZ2V0ICIKKwkJCQkJCQkicHJlc2VudCB0aW1lIGFmdGVyICIKKwkJCQkJCQkidXRpbWVz LCBlcnJvcj0lZCIsCisJCQkJCQkJZXJybm8pOworCQkJCQkJLypOT1RSRUFDSEVEKi8KKwkJCQkJ fQorCisJCQkJCS8qCisJCQkJCSAqIEdldCB0aGUgbW9kaWZpY2F0aW9uIGFuZCBhY2Nlc3MKKwkJ CQkJICogdGltZXMgb2YgdGVtcG9yYXJ5IGZpbGUgdXNpbmcKKwkJCQkJICogc3RhdCgyKS4KKwkJ CQkJICovCisJCQkJCWlmIChzdGF0KFRFTVBfRklMRSwgJnN0YXRfYnVmKSA8IDApIHsKKwkJCQkJ CXRzdF9icmttKFRGQUlMLCBjbGVhbnVwLAorCQkJCQkJCSJzdGF0KDIpIG9mICVzIGZhaWxlZCwg IgorCQkJCQkJCSJlcnJvcjolZCIsIFRFTVBfRklMRSwKKwkJCQkJCQlURVNUX0VSUk5PKTsKKwkJ CQkJCS8qTk9UUkVBQ0hFRCovCisJCQkJCX0KKwkJCQkJbW9kZl90aW1lID0gc3RhdF9idWYuc3Rf bXRpbWU7CisJCQkJCWFjY2Vzc190aW1lID0gc3RhdF9idWYuc3RfYXRpbWU7CisJCisJCQkJCS8q IE5vdyBkbyB0aGUgYWN0dWFsIHZlcmlmaWNhdGlvbiAqLworCQkJCQlpZiAobW9kZl90aW1lIDw9 IGN1cnJfdGltZSB8fCBcCisJCQkJCQltb2RmX3RpbWUgPj0gcHJlc190aW1lIHx8IFwKKwkJCQkJ CWFjY2Vzc190aW1lIDw9IGN1cnJfdGltZSB8fCBcCisJCQkJCQlhY2Nlc3NfdGltZSA+PSBwcmVz X3RpbWUpIHsKKwkJCQkJCXRzdF9yZXNtKFRGQUlMLCAiJXMgYWNjZXNzIGFuZCAiCisJCQkJCQkJ Im1vZGlmaWNhdGlvbiB0aW1lcyAiCisJCQkJCQkJIm5vdCBzZXQiLCBURU1QX0ZJTEUpOworCQkJ CQl9IGVsc2UgeworCQkJCQkJdHN0X3Jlc20oVFBBU1MsICJGdW5jdGlvbmFsaXR5ICIKKwkJCQkJ CQkib2YgdXRpbWVzKCVzLCBOVUxMKSAiCisJCQkJCQkJInN1Y2Nlc3NmdWwiLAorCQkJCQkJCVRF TVBfRklMRSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQl0c3RfcmVzbShUUEFTUywgIiVz IGNhbGwgc3VjY2VlZGVkIiwKKwkJCQkJCQlUQ0lEKTsKKwkJCQl9CisJCQl9CisJCQlUc3RfY291 bnQrKzsJCS8qIGluY3IuIFRFU1RfTE9PUCBjb3VudGVyICovCisJCX0JLyogRW5kIGZvciBURVNU X0xPT1BJTkcgKi8KKwl9IGVsc2UgeworCQl3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCk7CisJCV9l eGl0KDApOwkvKgorCQkJCSAqIEV4aXQgaGVyZSBhbmQgbGV0IHRoZSBjaGlsZCBjbGVhbiB1cC4K KwkJCQkgKiBUaGlzIGFsbG93cyB0aGUgZXJybm8gaW5mb3JtYXRpb24gc2V0CisJCQkJICogYnkg dGhlIFRFU1RfRVJST1JfTE9HIG1hY3JvIGFuZCB0aGUKKwkJCQkgKiBQQVNTL0ZBSUwgc3RhdHVz IHRvIGJlIHByZXNlcnZlZCBmb3IKKwkJCQkgKiB1c2UgZHVyaW5nIGNsZWFudXAuCisJCQkJICov CisJfQorCS8qIENhbGwgY2xlYW51cCgpIHRvIHVuZG8gc2V0dXAgZG9uZSBmb3IgdGhlIHRlc3Qu ICovCisJY2xlYW51cCgpOworCS8qTk9UUkVBQ0hFRCovCisKKworICByZXR1cm4oMCk7CisKK30J LyogRW5kIG1haW4gKi8KKworLyoKKyAqIHZvaWQKKyAqIHNldHVwKCkgLSBwZXJmb3JtcyBhbGwg T05FIFRJTUUgc2V0dXAgZm9yIHRoaXMgdGVzdC4KKyAqICBDcmVhdGUgYSB0ZW1wb3JhcnkgZGly ZWN0b3J5IGFuZCBjaGFuZ2UgZGlyZWN0b3J5IHRvIGl0LgorICogIENyZWF0ZSBhIHRlc3QgZmls ZSB1bmRlciB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCBjbG9zZSBpdAorICogIENoYW5nZSB0aGUg b3duZXJzaGlwIG9mIHRlc3RmaWxlIHRvIHRoYXQgb2YgImJpbiIgdXNlci4KKyAqICBSZWNvcmQg dGhlIGN1cnJlbnQgdGltZS4KKyAqLwordm9pZCAKK3NldHVwKCkKK3sKKwlpbnQgZmlsZGVzOwkJ CS8qIGZpbGUgaGFuZGxlIGZvciB0ZW1wIGZpbGUgKi8KKwljaGFyICp0bXBkID0gTlVMTDsKKwor CS8qIGNhcHR1cmUgc2lnbmFscyAqLworCXRzdF9zaWcoRk9SSywgREVGX0hBTkRMRVIsIGNsZWFu dXApOworCisJLyogQ2hlY2sgdGhhdCB0aGUgdGVzdCBwcm9jZXNzIGlkIGlzIG5vdCBzdXBlci9y b290ICAqLworCWlmIChnZXRldWlkKCkgIT0gMCkgeworCQl0c3RfYnJrbShUQlJPSywgTlVMTCwg Ik11c3QgYmUgcm9vdCBmb3IgdGhpcyB0ZXN0ISIpOworCQl0c3RfZXhpdCgpOworCX0KKworCS8q IFBhdXNlIGlmIHRoYXQgb3B0aW9uIHdhcyBzcGVjaWZpZWQKKwkgKiBURVNUX1BBVVNFIGNvbnRh aW5zIHRoZSBjb2RlIHRvIGZvcmsgdGhlIHRlc3Qgd2l0aCB0aGUgLWkgb3B0aW9uLgorCSAqIFlv dSB3YW50IHRvIG1ha2Ugc3VyZSB5b3UgZG8gdGhpcyBiZWZvcmUgeW91IGNyZWF0ZSB5b3VyIHRl bXBvcmFyeQorCSAqIGRpcmVjdG9yeS4KKwkgKi8KKwlURVNUX1BBVVNFOworCisJLyogbWFrZSBh IHRlbXAgZGlyZWN0b3J5IGFuZCBjZCB0byBpdCAqLworCXRzdF90bXBkaXIoKTsKKworICAgICAg ICAvKiBnZXQgdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgKi8KKyAgICAgICAg aWYgKCh0bXBkID0gZ2V0Y3dkKHRtcGQsIDApKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAg dHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiZ2V0Y3dkIGZhaWxlZCIpOworICAgICAgICB9CisK KwkvKiBDcmVhdCBhIHRlbXBvcmFyeSBmaWxlIHVuZGVyIGFib3ZlIGRpcmVjdG9yeSAqLworCWlm ICgoZmlsZGVzID0gY3JlYXQoVEVNUF9GSUxFLCBGSUxFX01PREUpKSA9PSAtMSkgeworCQl0c3Rf YnJrbShUQlJPSywgY2xlYW51cCwKKwkJCSAiY3JlYXQoJXMsICUjbykgRmFpbGVkLCBlcnJubz0l ZCA6JXMiLAorCQkJIFRFTVBfRklMRSwgRklMRV9NT0RFLCBlcnJubywgc3RyZXJyb3IoZXJybm8p KTsKKwkJLypOT1RSRUFDSEVEKi8KKwl9CisKKwkvKiBDbG9zZSB0aGUgdGVtcG9yYXJ5IGZpbGUg Y3JlYXRlZCAqLworCWlmIChjbG9zZShmaWxkZXMpIDwgMCkgeworCQl0c3RfYnJrbShUQlJPSywg Y2xlYW51cCwKKwkJCSAiY2xvc2UoJXMpIEZhaWxlZCwgZXJybm89JWQgOiAlczoiLAorCQkJIFRF TVBfRklMRSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisJCS8qTk9UUkVBQ0hFRCovCisJfQor CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCBzcGVjaWZpZWQgTW9kZSBwZXJtaXNzaW9ucyBzZXQg YXMKKwkgKiB1bWFzayB2YWx1ZSBtYXkgYmUgZGlmZmVyZW50LgorCSAqLworCWlmIChjaG1vZChU RU1QX0ZJTEUsIEZJTEVfTU9ERSkgPCAwKSB7CisJCXRzdF9icmttKFRCUk9LLCBjbGVhbnVwLAor CQkJICJjaG1vZCglcykgRmFpbGVkLCBlcnJubz0lZCA6ICVzOiIsCisJCQkgVEVNUF9GSUxFLCBl cnJubywgc3RyZXJyb3IoZXJybm8pKTsKKwkJLypOT1RSRUFDSEVEKi8KKwl9CisKKyAgICAgICAg aWYgKGNobW9kKHRtcGQsIDA3MTEpICE9IDApIHsKKyAgICAgICAgICAgICAgICB0c3RfYnJrbShU QlJPSywgY2xlYW51cCwgImNobW9kKCkgZmFpbGVkIik7CisgICAgICAgIH0KKworCWlmICgobHRw dXNlciA9IGdldHB3bmFtKExUUFVTRVIyKSkgPT0gTlVMTCkgeworCQl0c3RfYnJrbShUQlJPSywg Y2xlYW51cCwgIiVzIG5vdCBmb3VuZCBpbiAvZXRjL3Bhc3N3ZCIsCisJCQlMVFBVU0VSMik7CisJ CS8qTk9UUkVBQ0hFRCovCisJfQorCisJLyogZ2V0IHVpZC9naWQgb2YgdXNlciBhY2NvcmRpbmds eSAqLworCXVzZXJfdWlkID0gbHRwdXNlci0+cHdfdWlkOworCWdyb3VwX2dpZCA9IGx0cHVzZXIt PnB3X2dpZDsKKworCSAvKgorICAgICAgICAgKiBDaGFuZ2UgdGhlIG93bmVyc2hpcCBvZiB0ZXN0 IGRpcmVjdG9yeS9maWxlIHNwZWNpZmllZCBieQorICAgICAgICAgKiBwYXRobmFtZSB0byB0aGF0 IG9mIHVzZXJfdWlkIGFuZCBncm91cF9naWQuCisgICAgICAgICAqLworICAgICAgICBpZiAoY2hv d24oVEVNUF9GSUxFLCB1c2VyX3VpZCwgZ3JvdXBfZ2lkKSA8IDApIHsKKwkJdHN0X2Jya20oVEJS T0ssIGNsZWFudXAsICJjaG93bigpIG9mICVzIGZhaWxlZCwgZXJyb3IgJWQiLAorCQkJVEVNUF9G SUxFLCBlcnJubyk7CisJCS8qTk9UUkVBQ0hFRCovCisJfQorCQkJCisJLyogR2V0IHRoZSBjdXJy ZW50IHRpbWUgKi8KKwlpZiAoKGN1cnJfdGltZSA9IHRpbWUoJnRsb2MpKSA8IDApIHsKKwkJdHN0 X2Jya20oVEJST0ssIGNsZWFudXAsCisJCQkgInRpbWUoKSBmYWlsZWQgdG8gZ2V0IGN1cnJlbnQg dGltZSwgZXJybm89JWQiLCBlcnJubyk7CisJCS8qTk9UUkVBQ0hFRCovCisJfQorCisJLyoKKwkg KiBTbGVlcCBmb3IgYSBzZWNvbmQgc28gdGhhdCBtb2QgdGltZSBhbmQgYWNjZXNzIHRpbWVzIHdp bGwgYmUKKwkgKiBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCB0aW1lCisJICovCisJc2xlZXAo Mik7CS8qIHNsZWVwKDEpIG9uIElBNjQgc29tZXRpbWVzIHNsZWVwcyA8IDEgc2VjISEgKi8KKwkJ Cit9CS8qIEVuZCBzZXR1cCgpICovCisKKy8qCisgKiB2b2lkCisgKiBjbGVhbnVwKCkgLSBwZXJm b3JtcyBhbGwgT05FIFRJTUUgY2xlYW51cCBmb3IgdGhpcyB0ZXN0IGF0CisgKiAgICAgICAgICAg ICBjb21wbGV0aW9uIG9yIHByZW1hdHVyZSBleGl0LgorICogIFJlbW92ZSB0aGUgdGVzdCBkaXJl Y3RvcnkgYW5kIHRlc3RmaWxlIGNyZWF0ZWQgaW4gdGhlIHNldHVwLgorICovCit2b2lkIAorY2xl YW51cCgpCit7CisJc2V0ZXVpZCgwKTsKKwkvKgorCSAqIHByaW50IHRpbWluZyBzdGF0cyBpZiB0 aGF0IG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorCSAqIHByaW50IGVycm5vIGxvZyBpZiB0aGF0IG9w dGlvbiB3YXMgc3BlY2lmaWVkLgorCSAqLworCVRFU1RfQ0xFQU5VUDsKKworCS8qIFJlbW92ZSB0 bXAgZGlyIGFuZCBhbGwgZmlsZXMgaW4gaXQgKi8KKwl0c3Rfcm1kaXIoKTsKKworCS8qIGV4aXQg d2l0aCByZXR1cm4gY29kZSBhcHByb3ByaWF0ZSBmb3IgcmVzdWx0cyAqLworCXRzdF9leGl0KCk7 Cit9CS8qIEVuZCBjbGVhbnVwKCkgKi8KZGlmZiAtcnVOIGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcv dGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvdXRpbWVzMDQuYyBsdHAtZnVsbC0yMDA2 MTEyMS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0aW1lcy91dGltZXMwNC5jCi0tLSBsdHAt ZnVsbC0yMDA2MTEyMS1vcmlnL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1l czA0LmMJV2VkIERlYyAzMSAxODowMDowMCAxOTY5CisrKyBsdHAtZnVsbC0yMDA2MTEyMS90ZXN0 Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0aW1lcy91dGltZXMwNC5jCVRodSBEZWMgMTQgMjA6MTY6 NDAgMjAwNgpAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqCisgKiAgIENvcHlyaWdodCAoYykgSW50 ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDEKKyAqCisgKiAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUKKyAqICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwg NTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAq LworCisvKgorICogVGVzdCBOYW1lOiB1dGltZXMwNAorICoKKyAqIFRlc3QgRGVzY3JpcHRpb246 CisgKiAgVmVyaWZ5IHRoYXQgdGhlIHN5c3RlbSBjYWxsIHV0aW1lcygpIHN1Y2Nlc3NmdWxseSBz ZXRzIHRoZSBtb2RpZmljYXRpb24KKyAqICBhbmQgYWNjZXNzIHRpbWVzIG9mIGEgZmlsZSB0byB0 aGUgdGltZSBzcGVjaWZpZWQgYnkgdGltZXMgYXJndW1lbnQsIGlmCisgKiAgdGhlIHRpbWVzIGFy Z3VtZW50IGlzIG5vdCBudWxsLCBhbmQgdGhlIHVzZXIgSUQgb2YgdGhlIHByb2Nlc3MgaXMgInJv b3QiLgorICoKKyAqIEV4cGVjdGVkIFJlc3VsdDoKKyAqICAgdXRpbWVzIHN1Y2NlZWRzIHJldHVy bmluZyB6ZXJvIGFuZCBzZXRzIHRoZSBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiAKKyAqICAgdGlt ZXMgb2YgdGhlIGZpbGUgdG8gdGhhdCBzcGVjaWZpZWQgYnkgdGhlIHRpbWVzIGFyZ3VtZW50Lgor ICoKKyAqIEFsZ29yaXRobToKKyAqICBTZXR1cDoKKyAqICAgU2V0dXAgc2lnbmFsIGhhbmRsaW5n LgorICogICBDcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KKyAqICAgUGF1c2UgZm9yIFNJR1VT UjEgaWYgb3B0aW9uIHNwZWNpZmllZC4KKyAqCisgKiAgVGVzdDoKKyAqICAgTG9vcCBpZiB0aGUg cHJvcGVyIG9wdGlvbnMgYXJlIGdpdmVuLgorICogICBFeGVjdXRlIHN5c3RlbSBjYWxsCisgKiAg IENoZWNrIHJldHVybiBjb2RlLCBpZiBzeXN0ZW0gY2FsbCBmYWlsZWQgKHJldHVybj0tMSkKKyAq ICAgCUxvZyB0aGUgZXJybm8gYW5kIElzc3VlIGEgRkFJTCBtZXNzYWdlLgorICogICBPdGhlcndp c2UsCisgKiAgIAlWZXJpZnkgdGhlIEZ1bmN0aW9uYWxpdHkgb2Ygc3lzdGVtIGNhbGwJCisgKiAg ICAgIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgIAlJc3N1ZSBGdW5jdGlvbmFsaXR5LVBhc3MgbWVz c2FnZS4KKyAqICAgICAgT3RoZXJ3aXNlLAorICoJCUlzc3VlIEZ1bmN0aW9uYWxpdHktRmFpbCBt ZXNzYWdlLgorICogIENsZWFudXA6CisgKiAgIFByaW50IGVycm5vIGxvZyBhbmQvb3IgdGltaW5n IHN0YXRzIGlmIG9wdGlvbnMgZ2l2ZW4KKyAqICAgRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZGlyZWN0 b3J5IGNyZWF0ZWQuCisgKgorICogVXNhZ2U6ICA8Zm9yIGNvbW1hbmQtbGluZT4KKyAqICB1dGlt ZXMwNCBbLWMgbl0gWy1lXSBbLWZdIFstaSBuXSBbLUkgeF0gWy1wIHhdIFstdF0KKyAqCXdoZXJl LCAgLWMgbiA6IFJ1biBuIGNvcGllcyBjb25jdXJyZW50bHkuCisgKgkJLWUgICA6IFR1cm4gb24g ZXJybm8gbG9nZ2luZy4KKyAqIAkJLWYgICA6IFR1cm4gb2ZmIGZ1bmN0aW9uYWxpdHkgVGVzdGlu Zy4KKyAqCQktaSBuIDogRXhlY3V0ZSB0ZXN0IG4gdGltZXMuCisgKgkJLUkgeCA6IEV4ZWN1dGUg dGVzdCBmb3IgeCBzZWNvbmRzLgorICoJCS1QIHggOiBQYXVzZSBmb3IgeCBzZWNvbmRzIGJldHdl ZW4gaXRlcmF0aW9ucy4KKyAqCQktdCAgIDogVHVybiBvbiBzeXNjYWxsIHRpbWluZy4KKyAqCisg KiBIaXN0b3J5CisgKgkwNy8yMDAxIEpvaG4gR2VvcmdlCisgKgkJLVBvcnRlZAorICoKKyAqIFJl c3RyaWN0aW9uczoKKyAqICBUaGlzIHRlc3Qgc2hvdWxkIGJlIHJ1biBieSAnc3VwZXItdXNlcicg KHJvb3QpIG9ubHkuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j bHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN0cmluZy5o PgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpbmNsdWRl ICJ0ZXN0LmgiCisjaW5jbHVkZSAidXNjdGVzdC5oIgorCisjZGVmaW5lIFRFTVBfRklMRQkidG1w X2ZpbGUiCisjZGVmaW5lIEZJTEVfTU9ERQlTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgKKyNk ZWZpbmUgTkVXX1RJTUUJMTAwMDAKKyNkZWZpbmUgTkVXX1RJTUVfVVNFQwkxMDAKKworY2hhciAq VENJRD0idXRpbWVzMDQiOwkJLyogVGVzdCBwcm9ncmFtIGlkZW50aWZpZXIuICAgICovCitpbnQg VFNUX1RPVEFMPTE7CQkvKiBUb3RhbCBudW1iZXIgb2YgdGVzdCBjYXNlcy4gKi8KK2V4dGVybiBp bnQgVHN0X2NvdW50OwkJLyogVGVzdCBDYXNlIGNvdW50ZXIgZm9yIHRzdF8qIHJvdXRpbmVzICov CitpbnQgZXhwX2Vub3NbXT17MH07CitzdHJ1Y3QgdGltZXZhbCB0aW1lc1syXTsJLyogc3RydWN0 LiBidWZmZXIgZm9yIHV0aW1lcygpICovCisKK3ZvaWQgc2V0dXAoKTsJCQkvKiBNYWluIHNldHVw IGZ1bmN0aW9uIG9mIHRlc3QgKi8KK3ZvaWQgY2xlYW51cCgpOwkJCS8qIGNsZWFudXAgZnVuY3Rp b24gZm9yIHRoZSB0ZXN0ICovCisKK2ludAorbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwlz dHJ1Y3Qgc3RhdCBzdGF0X2J1ZjsJLyogc3RydWN0IGJ1ZmZlciB0byBob2xkIGZpbGUgaW5mby4g Ki8KKwlpbnQgbGM7CQkJLyogbG9vcCBjb3VudGVyICovCisJY2hhciAqbXNnOwkJLyogbWVzc2Fn ZSByZXR1cm5lZCBmcm9tIHBhcnNlX29wdHMgKi8KKwl0aW1lX3QgbW9kZl90aW1lLCBhY2Nlc3Nf dGltZTsKKwlsb25nIG1vZGZfdGltZV91c2VjLCBhY2Nlc3NfdGltZV91c2VjOworCQkJCS8qIGZp bGUgbW9kaWZpY2F0aW9uL2FjY2VzcyB0aW1lICovCisgICAgCisJLyogUGFyc2Ugc3RhbmRhcmQg b3B0aW9ucyBnaXZlbiB0byBydW4gdGhlIHRlc3QuICovCisJbXNnID0gcGFyc2Vfb3B0cyhhYywg YXYsIChvcHRpb25fdCAqKSBOVUxMLCBOVUxMKTsKKwlpZiAobXNnICE9IChjaGFyICopIE5VTEwp IHsKKwkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJPUFRJT04gUEFSU0lORyBFUlJPUiAtICVzIiwg bXNnKTsKKwkJdHN0X2V4aXQoKTsKKwl9CisKKwkvKiBQZXJmb3JtIGdsb2JhbCBzZXR1cCBmb3Ig dGVzdCAqLworCXNldHVwKCk7CisKKwkvKiBzZXQgdGhlIGV4cGVjdGVkIGVycm5vcy4uLiAqLwor CVRFU1RfRVhQX0VOT1MoZXhwX2Vub3MpOworCisJLyogQ2hlY2sgbG9vcGluZyBzdGF0ZSBpZiAt aSBvcHRpb24gZ2l2ZW4gKi8KKwlmb3IgKGxjID0gMDsgVEVTVF9MT09QSU5HKGxjKTsgbGMrKykg eworCQkvKiBSZXNldCBUc3RfY291bnQgaW4gY2FzZSB3ZSBhcmUgbG9vcGluZy4gKi8KKwkJVHN0 X2NvdW50PTA7CisKKwkJLyogCisJCSAqIEludm9rZSB1dGltZXMoMikgdG8gc2V0IFRFTVBfRklM RSBhY2Nlc3MgYW5kCisJCSAqIG1vZGlmaWNhdGlvbiB0aW1lcyB0byB0aGF0IHNwZWNpZmllZCBi eQorCQkgKiB0aW1lcyBhcmd1bWVudC4KKwkJICovCisJCVRFU1QodXRpbWVzKFRFTVBfRklMRSwg dGltZXMpKTsKKworCQkvKiBjaGVjayByZXR1cm4gY29kZSBvZiB1dGltZXMoMikgKi8KKwkJaWYg KFRFU1RfUkVUVVJOID09IC0xKSB7CisJCQlURVNUX0VSUk9SX0xPRyhURVNUX0VSUk5PKTsKKwkJ CXRzdF9yZXNtKFRGQUlMLCAidXRpbWVzKCVzKSBGYWlsZWQsIGVycm5vPSVkIDogJXMiLAorCQkJ CSBURU1QX0ZJTEUsIFRFU1RfRVJSTk8sIHN0cmVycm9yKFRFU1RfRVJSTk8pKTsKKwkJfSBlbHNl IHsKKwkJCS8qCisJCQkgKiBQZXJmb3JtIGZ1bmN0aW9uYWwgdmVyaWZpY2F0aW9uIGlmIHRlc3QK KwkJCSAqIGV4ZWN1dGVkIHdpdGhvdXQgKC1mKSBvcHRpb24uCisJCQkgKi8KKwkJCWlmIChTVERf RlVOQ1RJT05BTF9URVNUKSB7CisJCQkJLyoKKwkJCQkgKiBHZXQgdGhlIG1vZGlmaWNhdGlvbiBh bmQgYWNjZXNzIHRpbWVzIG9mCisJCQkJICogdGVtcG9yYXJ5IGZpbGUgdXNpbmcgc3RhdCgyKS4K KwkJCQkgKi8KKwkJCQlpZiAoc3RhdChURU1QX0ZJTEUsICZzdGF0X2J1ZikgPCAwKSB7CisJCQkJ CXRzdF9icmttKFRGQUlMLCBjbGVhbnVwLAorCQkJCQkJInN0YXQoMikgb2YgJXMgZmFpbGVkLCAi CisJCQkJCQkiZXJyb3I6JWQiLCBURU1QX0ZJTEUsCisJCQkJCQlURVNUX0VSUk5PKTsKKwkJCQkJ LypOT1RSRUFDSEVEKi8KKwkJCQl9CisJCQkJbW9kZl90aW1lID0gc3RhdF9idWYuc3RfbXRpbWU7 CisJCQkJbW9kZl90aW1lX3VzZWMgPSBzdGF0X2J1Zi5zdF9tdGltLnR2X25zZWMgLyAxMDAwOwor CQkJCWFjY2Vzc190aW1lID0gc3RhdF9idWYuc3RfYXRpbWU7CisJCQkJYWNjZXNzX3RpbWVfdXNl YyA9IHN0YXRfYnVmLnN0X2F0aW0udHZfbnNlYyAvIDEwMDA7CisKKwkJCQkvKiBOb3cgZG8gdGhl IGFjdHVhbCB2ZXJpZmljYXRpb24gKi8KKwkJCQlpZiAoKG1vZGZfdGltZSAhPSBORVdfVElNRSkg fHwgXAorCQkJCSAgICAoYWNjZXNzX3RpbWUgIT0gTkVXX1RJTUUpKSB7CisJCQkJCXRzdF9yZXNt KFRGQUlMLCAiJXMgYWNjZXNzIGFuZCAiCisJCQkJCQkibW9kaWZpY2F0aW9uIHRpbWVzIG5vdCBz ZXQiLAorCQkJCQkJVEVNUF9GSUxFKTsKKwkJCQl9IGVsc2UgaWYgKChtb2RmX3RpbWVfdXNlYyAh PSBORVdfVElNRV9VU0VDKSB8fCBcCisJCQkJICAgIChhY2Nlc3NfdGltZV91c2VjICE9IE5FV19U SU1FX1VTRUMpKSB7CisJCQkJCXRzdF9yZXNtKFRGQUlMLCAiJXMgYWNjZXNzIGFuZCAiCisJCQkJ CQkibW9kaWZpY2F0aW9uIHRpbWVzIHVzZWMgbm90IHNldCIsCisJCQkJCQlURU1QX0ZJTEUpOwor CQkJCX0gZWxzZSB7CisJCQkJCXRzdF9yZXNtKFRQQVNTLCAiRnVuY3Rpb25hbGl0eSBvZiAiCisJ CQkJCQkidXRpbWVzKCVzLCB0aW1lcykgc3VjY2Vzc2Z1bCIsCisJCQkJCQlURU1QX0ZJTEUpOwor CQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJdHN0X3Jlc20oVFBBU1MsICIlcyBjYWxsIHN1Y2NlZWRl ZCIsIFRDSUQpOworCQkJfQorCQl9CisJCVRzdF9jb3VudCsrOwkJLyogaW5jciBURVNUX0xPT1Ag Y291bnRlciAqLworCX0JLyogRW5kIGZvciBURVNUX0xPT1BJTkcgKi8KKworCS8qIENhbGwgY2xl YW51cCgpIHRvIHVuZG8gc2V0dXAgZG9uZSBmb3IgdGhlIHRlc3QuICovCisJY2xlYW51cCgpOwor CS8qTk9UUkVBQ0hFRCovCisKKworICByZXR1cm4oMCk7CisKK30JLyogRW5kIG1haW4gKi8KKwor LyoKKyAqIHZvaWQKKyAqIHNldHVwKCkgLSBwZXJmb3JtcyBhbGwgT05FIFRJTUUgc2V0dXAgZm9y IHRoaXMgdGVzdC4KKyAqICBDcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCBjaGFuZ2Ug ZGlyZWN0b3J5IHRvIGl0LgorICogIENyZWF0ZSBhIHRlc3QgZmlsZSB1bmRlciB0ZW1wb3Jhcnkg ZGlyZWN0b3J5IGFuZCBjbG9zZSBpdAorICovCit2b2lkIAorc2V0dXAoKQoreworCWludCBmaWxk ZXM7CQkJLyogZmlsZSBoYW5kbGUgZm9yIHRlbXAgZmlsZSAqLworCisJLyogY2FwdHVyZSBzaWdu YWxzICovCisJdHN0X3NpZyhOT0ZPUkssIERFRl9IQU5ETEVSLCBjbGVhbnVwKTsKKworCS8qIENo ZWNrIHRoYXQgdGhlIHRlc3QgcHJvY2VzcyBpZCBpcyBzdXBlci9yb290ICAqLworCWlmIChnZXRl dWlkKCkgIT0gMCkgeworCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgIk11c3QgYmUgc3VwZXIvcm9v dCBmb3IgdGhpcyB0ZXN0ISIpOworCQl0c3RfZXhpdCgpOworCX0KKworCS8qIFBhdXNlIGlmIHRo YXQgb3B0aW9uIHdhcyBzcGVjaWZpZWQgKi8KKwlURVNUX1BBVVNFOworCisJLyogbWFrZSBhIHRl bXAgZGlyZWN0b3J5IGFuZCBjZCB0byBpdCAqLworCXRzdF90bXBkaXIoKTsKKworCS8qIENyZWF0 IGEgdGVtcG9yYXJ5IGZpbGUgdW5kZXIgYWJvdmUgZGlyZWN0b3J5ICovCisJaWYgKChmaWxkZXMg PSBjcmVhdChURU1QX0ZJTEUsIEZJTEVfTU9ERSkpID09IC0xKSB7CisJCXRzdF9icmttKFRCUk9L LCBjbGVhbnVwLAorCQkJICJjcmVhdCglcywgJSNvKSBGYWlsZWQsIGVycm5vPSVkIDolcyIsCisJ CQkgVEVNUF9GSUxFLCBGSUxFX01PREUsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworCX0KKwor CS8qIENsb3NlIHRoZSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkICovCisJaWYgKGNsb3NlKGZpbGRl cykgPCAwKSB7CisJCXRzdF9icmttKFRCUk9LLCBjbGVhbnVwLAorCQkJICJjbG9zZSglcykgRmFp bGVkLCBlcnJubz0lZCA6ICVzOiIsCisJCQkgVEVNUF9GSUxFLCBlcnJubywgc3RyZXJyb3IoZXJy bm8pKTsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBtb2RpZmljYXRpb24gYW5kIGFjY2VzcyB0 aW1lIGluIHRoZSB0aW1lcyBhcmcgKi8KKwl0aW1lc1swXS50dl9zZWMgPSBORVdfVElNRTsKKwl0 aW1lc1swXS50dl91c2VjID0gTkVXX1RJTUVfVVNFQzsKKwl0aW1lc1sxXS50dl9zZWMgPSBORVdf VElNRTsKKwl0aW1lc1sxXS50dl91c2VjID0gTkVXX1RJTUVfVVNFQzsKKworfQkvKiBFbmQgc2V0 dXAoKSAqLworCisvKgorICogdm9pZAorICogY2xlYW51cCgpIC0gcGVyZm9ybXMgYWxsIE9ORSBU SU1FIGNsZWFudXAgZm9yIHRoaXMgdGVzdCBhdAorICogICAgICAgICAgICAgY29tcGxldGlvbiBv ciBwcmVtYXR1cmUgZXhpdC4KKyAqICBSZW1vdmUgdGhlIHRlc3QgZGlyZWN0b3J5IGFuZCB0ZXN0 ZmlsZSBjcmVhdGVkIGluIHRoZSBzZXR1cC4KKyAqLwordm9pZCAKK2NsZWFudXAoKQoreworCS8q CisJICogcHJpbnQgdGltaW5nIHN0YXRzIGlmIHRoYXQgb3B0aW9uIHdhcyBzcGVjaWZpZWQuCisJ ICogcHJpbnQgZXJybm8gbG9nIGlmIHRoYXQgb3B0aW9uIHdhcyBzcGVjaWZpZWQuCisJICovCisJ VEVTVF9DTEVBTlVQOworCisJLyogUmVtb3ZlIHRtcCBkaXIgYW5kIGFsbCBmaWxlcyBpbiBpdCAq LworCXRzdF9ybWRpcigpOworCisJLyogZXhpdCB3aXRoIHJldHVybiBjb2RlIGFwcHJvcHJpYXRl IGZvciByZXN1bHRzICovCisJdHN0X2V4aXQoKTsKK30JLyogRW5kIGNsZWFudXAoKSAqLwpkaWZm IC1ydU4gbHRwLWZ1bGwtMjAwNjExMjEtb3JpZy90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0 aW1lcy91dGltZXMwNS5jIGx0cC1mdWxsLTIwMDYxMTIxL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2Fs bHMvdXRpbWVzL3V0aW1lczA1LmMKLS0tIGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcvdGVzdGNhc2Vz L2tlcm5lbC9zeXNjYWxscy91dGltZXMvdXRpbWVzMDUuYwlXZWQgRGVjIDMxIDE4OjAwOjAwIDE5 NjkKKysrIGx0cC1mdWxsLTIwMDYxMTIxL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvdXRpbWVz L3V0aW1lczA1LmMJVGh1IERlYyAxNCAyMDoxODowMiAyMDA2CkBAIC0wLDAgKzEsMjc0IEBACisv KgorICoKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVz ICBDb3JwLiwgMjAwMQorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg KiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg KgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorICogICB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwg Qm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBUZXN0IE5hbWU6IHV0aW1l czA1CisgKgorICogVGVzdCBEZXNjcmlwdGlvbjoKKyAqICBWZXJpZnkgdGhhdCB0aGUgc3lzdGVt IGNhbGwgdXRpbWVzKCkgc3VjY2Vzc2Z1bGx5IHNldHMgdGhlIG1vZGlmaWNhdGlvbgorICogIGFu ZCBhY2Nlc3MgdGltZXMgb2YgYSBmaWxlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIHRp bWVzIGFyZ3VtZW50CisgKiAgdW5kZXIgdGhlIGZvbGxvd2luZyBjb25zdHJhaW50cywKKyAqCQkt IFRoZSB0aW1lcyBhcmd1bWVudCBpcyBub3QgbnVsbCwKKyAqCQktIFRoZSB1c2VyIElEIG9mIHRo ZSBwcm9jZXNzIGlzIG5vdCAicm9vdCIuCisgKgkJLSBUaGUgZmlsZSBpcyBvd25lZCBieSB0aGUg dXNlciBJRCBvZiB0aGUgcHJvY2Vzcy4KKyAqCisgKiBFeHBlY3RlZCBSZXN1bHQ6CisgKiAgdXRp bWVzIHN1Y2NlZWRzIHJldHVybmluZyB6ZXJvIGFuZCBzZXRzIHRoZSBhY2Nlc3MgYW5kIG1vZGlm aWNhdGlvbiAKKyAqICB0aW1lcyBvZiB0aGUgZmlsZSB0byB0aGF0IHNwZWNpZmllZCBieSB0aGUg dGltZXMgYXJndW1lbnQuCisgKgorICogQWxnb3JpdGhtOgorICogIFNldHVwOgorICogICBTZXR1 cCBzaWduYWwgaGFuZGxpbmcuCisgKiAgIENyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgorICog ICBQYXVzZSBmb3IgU0lHVVNSMSBpZiBvcHRpb24gc3BlY2lmaWVkLgorICoKKyAqICBUZXN0Ogor ICogICBMb29wIGlmIHRoZSBwcm9wZXIgb3B0aW9ucyBhcmUgZ2l2ZW4uCisgKiAgIEV4ZWN1dGUg c3lzdGVtIGNhbGwKKyAqICAgQ2hlY2sgcmV0dXJuIGNvZGUsIGlmIHN5c3RlbSBjYWxsIGZhaWxl ZCAocmV0dXJuPS0xKQorICogICAJTG9nIHRoZSBlcnJubyBhbmQgSXNzdWUgYSBGQUlMIG1lc3Nh Z2UuCisgKiAgIE90aGVyd2lzZSwKKyAqICAgCVZlcmlmeSB0aGUgRnVuY3Rpb25hbGl0eSBvZiBz eXN0ZW0gY2FsbAkKKyAqICAgICAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgCUlzc3VlIEZ1bmN0 aW9uYWxpdHktUGFzcyBtZXNzYWdlLgorICogICAgICBPdGhlcndpc2UsCisgKgkJSXNzdWUgRnVu Y3Rpb25hbGl0eS1GYWlsIG1lc3NhZ2UuCisgKiAgQ2xlYW51cDoKKyAqICAgUHJpbnQgZXJybm8g bG9nIGFuZC9vciB0aW1pbmcgc3RhdHMgaWYgb3B0aW9ucyBnaXZlbgorICogICBEZWxldGUgdGhl IHRlbXBvcmFyeSBkaXJlY3RvcnkgY3JlYXRlZC4KKyAqCisgKiBVc2FnZTogIDxmb3IgY29tbWFu ZC1saW5lPgorICogIHV0aW1lczA1IFstYyBuXSBbLWVdIFstZl0gWy1pIG5dIFstSSB4XSBbLXAg eF0gWy10XQorICoJCXdoZXJlLAktYyBuIDogUnVuIG4gY29waWVzIGNvbmN1cnJlbnRseS4KKyAq CQkJLWUgICA6IFR1cm4gb24gZXJybm8gbG9nZ2luZy4KKyAqCQkJLWYgICA6IFR1cm4gb2ZmIGZ1 bmN0aW9uYWxpdHkgVGVzdGluZy4KKyAqCQkJLWkgbiA6IEV4ZWN1dGUgdGVzdCBuIHRpbWVzLgor ICoJCQktSSB4IDogRXhlY3V0ZSB0ZXN0IGZvciB4IHNlY29uZHMuCisgKgkJCS1QIHggOiBQYXVz ZSBmb3IgeCBzZWNvbmRzIGJldHdlZW4gaXRlcmF0aW9ucy4KKyAqCQkJLXQgICA6IFR1cm4gb24g c3lzY2FsbCB0aW1pbmcuCisgKgorICogSGlzdG9yeQorICoJMDcvMjAwMSBKb2huIEdlb3JnZQor ICoJCS1Qb3J0ZWQKKyAqCisgKiBSZXN0cmljdGlvbnM6CisgKgorICovCisKKyNpbmNsdWRlIDxz dGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j bHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5o PgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8 c2lnbmFsLmg+CisjaW5jbHVkZSA8cHdkLmg+CisKKyNpbmNsdWRlICJ0ZXN0LmgiCisjaW5jbHVk ZSAidXNjdGVzdC5oIgorCisjZGVmaW5lIFRFTVBfRklMRQkidG1wX2ZpbGUiCisjZGVmaW5lIEZJ TEVfTU9ERQlTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgKKyNkZWZpbmUgTkVXX1RJTUUJMTAw MDAKKyNkZWZpbmUgTkVXX1RJTUVfVVNFQwkxMDAKKworY2hhciAqVENJRD0idXRpbWVzMDUiOwkJ LyogVGVzdCBwcm9ncmFtIGlkZW50aWZpZXIuICAgICovCitpbnQgVFNUX1RPVEFMPTE7CQkvKiBU b3RhbCBudW1iZXIgb2YgdGVzdCBjYXNlcy4gKi8KK2V4dGVybiBpbnQgVHN0X2NvdW50OwkJLyog VGVzdCBDYXNlIGNvdW50ZXIgZm9yIHRzdF8qIHJvdXRpbmVzICovCitpbnQgZXhwX2Vub3NbXT17 MH07CitjaGFyIG5vYm9keV91aWRbXSA9ICJub2JvZHkiOworc3RydWN0IHBhc3N3ZCAqbHRwdXNl cjsKKworCitzdHJ1Y3QgdGltZXZhbCB0aW1lc1syXTsJLyogc3RydWN0LiBidWZmZXIgZm9yIHV0 aW1lcygpICovCisKK3ZvaWQgc2V0dXAoKTsJCQkvKiBNYWluIHNldHVwIGZ1bmN0aW9uIG9mIHRl c3QgKi8KK3ZvaWQgY2xlYW51cCgpOwkJCS8qIGNsZWFudXAgZnVuY3Rpb24gZm9yIHRoZSB0ZXN0 ICovCisKK2ludAorbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwlzdHJ1Y3Qgc3RhdCBzdGF0 X2J1ZjsJLyogc3RydWN0IGJ1ZmZlciB0byBob2xkIGZpbGUgaW5mby4gKi8KKwlpbnQgbGM7CQkJ LyogbG9vcCBjb3VudGVyICovCisJY2hhciAqbXNnOwkJLyogbWVzc2FnZSByZXR1cm5lZCBmcm9t IHBhcnNlX29wdHMgKi8KKwl0aW1lX3QgbW9kZl90aW1lLCBhY2Nlc3NfdGltZTsKKwlsb25nIG1v ZGZfdGltZV91c2VjLCBhY2Nlc3NfdGltZV91c2VjOworCQkJCS8qIGZpbGUgbW9kaWZpY2F0aW9u L2FjY2VzcyB0aW1lICovCisgICAgCisJLyogUGFyc2Ugc3RhbmRhcmQgb3B0aW9ucyBnaXZlbiB0 byBydW4gdGhlIHRlc3QuICovCisJbXNnID0gcGFyc2Vfb3B0cyhhYywgYXYsIChvcHRpb25fdCAq KSBOVUxMLCBOVUxMKTsKKwlpZiAobXNnICE9IChjaGFyICopIE5VTEwpIHsKKwkJdHN0X2Jya20o VEJST0ssIE5VTEwsICJPUFRJT04gUEFSU0lORyBFUlJPUiAtICVzIiwgbXNnKTsKKwkJdHN0X2V4 aXQoKTsKKwl9CisKKwkvKiBQZXJmb3JtIGdsb2JhbCBzZXR1cCBmb3IgdGVzdCAqLworCXNldHVw KCk7CisKKwkvKiBzZXQgdGhlIGV4cGVjdGVkIGVycm5vcy4uLiAqLworCVRFU1RfRVhQX0VOT1Mo ZXhwX2Vub3MpOworCisJLyogQ2hlY2sgbG9vcGluZyBzdGF0ZSBpZiAtaSBvcHRpb24gZ2l2ZW4g Ki8KKwlmb3IgKGxjID0gMDsgVEVTVF9MT09QSU5HKGxjKTsgbGMrKykgeworCQkvKiBSZXNldCBU c3RfY291bnQgaW4gY2FzZSB3ZSBhcmUgbG9vcGluZy4gKi8KKwkJVHN0X2NvdW50PTA7CisKKwkJ LyogCisJCSAqIEludm9rZSB1dGltZXMoMikgdG8gc2V0IFRFTVBfRklMRSBhY2Nlc3MgYW5kCisJ CSAqIG1vZGlmaWNhdGlvbiB0aW1lcyB0byB0aGF0IHNwZWNpZmllZCBieQorCQkgKiB0aW1lcyBh cmd1bWVudC4KKwkJICovCisJCVRFU1QodXRpbWVzKFRFTVBfRklMRSwgdGltZXMpKTsKKworCQkv KiBjaGVjayByZXR1cm4gY29kZSBvZiB1dGltZXMoMikgKi8KKwkJaWYgKFRFU1RfUkVUVVJOID09 IC0xKSB7CisJCQlURVNUX0VSUk9SX0xPRyhURVNUX0VSUk5PKTsKKwkJCXRzdF9yZXNtKFRGQUlM LCAidXRpbWVzKCVzKSBGYWlsZWQsIGVycm5vPSVkIDogJXMiLAorCQkJCSBURU1QX0ZJTEUsIFRF U1RfRVJSTk8sIHN0cmVycm9yKFRFU1RfRVJSTk8pKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkg KiBQZXJmb3JtIGZ1bmN0aW9uYWwgdmVyaWZpY2F0aW9uIGlmIHRlc3QKKwkJCSAqIGV4ZWN1dGVk IHdpdGhvdXQgKC1mKSBvcHRpb24uCisJCQkgKi8KKwkJCWlmIChTVERfRlVOQ1RJT05BTF9URVNU KSB7CisJCQkJLyoKKwkJCQkgKiBHZXQgdGhlIG1vZGlmaWNhdGlvbiBhbmQgYWNjZXNzIHRpbWVz IG9mCisJCQkJICogdGVtcG9yYXJ5IGZpbGUgdXNpbmcgc3RhdCgyKS4KKwkJCQkgKi8KKwkJCQlp ZiAoc3RhdChURU1QX0ZJTEUsICZzdGF0X2J1ZikgPCAwKSB7CisJCQkJCXRzdF9icmttKFRGQUlM LCBjbGVhbnVwLCAic3RhdCgyKSBvZiAiCisJCQkJCQkiJXMgZmFpbGVkLCBlcnJvcjolZCIsCisJ CQkJCQlURU1QX0ZJTEUsIFRFU1RfRVJSTk8pOworCQkJCQkvKk5PVFJFQUNIRUQqLworCQkJCX0K KwkJCQltb2RmX3RpbWUgPSBzdGF0X2J1Zi5zdF9tdGltZTsKKwkJCQltb2RmX3RpbWVfdXNlYyA9 IHN0YXRfYnVmLnN0X210aW0udHZfbnNlYyAvIDEwMDA7CisJCQkJYWNjZXNzX3RpbWUgPSBzdGF0 X2J1Zi5zdF9hdGltZTsKKwkJCQlhY2Nlc3NfdGltZV91c2VjID0gc3RhdF9idWYuc3RfYXRpbS50 dl9uc2VjIC8gMTAwMDsKKworCQkJCS8qIE5vdyBkbyB0aGUgYWN0dWFsIHZlcmlmaWNhdGlvbiAq LworCQkJCWlmICgobW9kZl90aW1lICE9IE5FV19USU1FKSB8fCBcCisJCQkJICAgIChhY2Nlc3Nf dGltZSAhPSBORVdfVElNRSkpIHsKKwkJCQkJdHN0X3Jlc20oVEZBSUwsICIlcyBhY2Nlc3MgYW5k ICIKKwkJCQkJCSJtb2RpZmljYXRpb24gdGltZXMgbm90IHNldCIsCisJCQkJCQlURU1QX0ZJTEUp OworCQkJCX0gZWxzZSBpZiAoKG1vZGZfdGltZV91c2VjICE9IE5FV19USU1FX1VTRUMpIHx8IFwK KwkJCQkgICAgKGFjY2Vzc190aW1lX3VzZWMgIT0gTkVXX1RJTUVfVVNFQykpIHsKKwkJCQkJdHN0 X3Jlc20oVEZBSUwsICIlcyBhY2Nlc3MgYW5kICIKKwkJCQkJCSJtb2RpZmljYXRpb24gdGltZXMg dXNlYyBub3Qgc2V0IiwKKwkJCQkJCVRFTVBfRklMRSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJdHN0 X3Jlc20oVFBBU1MsICJGdW5jdGlvbmFsaXR5IG9mICIKKwkJCQkJCSJ1dGltZXMoJXMsIHRpbWVz KSBzdWNjZXNzZnVsIiwKKwkJCQkJCVRFTVBfRklMRSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJ CQl0c3RfcmVzbShUUEFTUywgIiVzIGNhbGwgc3VjY2VlZGVkIiwgVENJRCk7CisJCQl9CisJCX0K KwkJVHN0X2NvdW50Kys7CQkvKiBpbmNyIFRFU1RfTE9PUCBjb3VudGVyICovCisJfQkvKiBFbmQg Zm9yIFRFU1RfTE9PUElORyAqLworCisJLyogQ2FsbCBjbGVhbnVwKCkgdG8gdW5kbyBzZXR1cCBk b25lIGZvciB0aGUgdGVzdC4gKi8KKwljbGVhbnVwKCk7CisJLypOT1RSRUFDSEVEKi8KKworCisg IHJldHVybigwKTsKKworfQkvKiBFbmQgbWFpbiAqLworCisvKgorICogdm9pZAorICogc2V0dXAo KSAtIHBlcmZvcm1zIGFsbCBPTkUgVElNRSBzZXR1cCBmb3IgdGhpcyB0ZXN0LgorICogIENyZWF0 ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGNoYW5nZSBkaXJlY3RvcnkgdG8gaXQuCisgKiAg Q3JlYXRlIGEgdGVzdCBmaWxlIHVuZGVyIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGNsb3NlIGl0 CisgKi8KK3ZvaWQgCitzZXR1cCgpCit7CisJaW50IGZpbGRlczsJCQkvKiBmaWxlIGhhbmRsZSBm b3IgdGVtcCBmaWxlICovCisKKwkvKiBjYXB0dXJlIHNpZ25hbHMgKi8KKwl0c3Rfc2lnKEZPUkss IERFRl9IQU5ETEVSLCBjbGVhbnVwKTsKKworCS8qIFN3aXRjaCB0byBub2JvZHkgdXNlciBmb3Ig Y29ycmVjdCBlcnJvciBjb2RlIGNvbGxlY3Rpb24gKi8KKyAgICAgICAgaWYgKGdldGV1aWQoKSAh PSAwKSB7CisgICAgICAgICAgICAgICAgdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiVGVzdCBt dXN0IGJlIHJ1biBhcyByb290Iik7CisgICAgICAgIH0KKyAgICAgICAgIGx0cHVzZXIgPSBnZXRw d25hbShub2JvZHlfdWlkKTsKKyAgICAgICAgIGlmIChzZXR1aWQobHRwdXNlci0+cHdfdWlkKSA9 PSAtMSkgeworICAgICAgICAgICAgICAgIHRzdF9yZXNtKFRJTkZPLCAic2V0dWlkIGZhaWxlZCB0 byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInRvIHNldCB0aGUgZWZmZWN0aXZlIHVpZCB0 byAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRwdXNlci0+cHdfdWlkKTsKKyAgICAg ICAgICAgICAgICBwZXJyb3IoInNldHVpZCIpOworICAgICAgICAgfQorCQkKKworCS8qIFBhdXNl IGlmIHRoYXQgb3B0aW9uIHdhcyBzcGVjaWZpZWQgKi8KKwlURVNUX1BBVVNFOworCisJLyogbWFr ZSBhIHRlbXAgZGlyZWN0b3J5IGFuZCBjZCB0byBpdCAqLworCXRzdF90bXBkaXIoKTsKKworCS8q IENyZWF0IGEgdGVtcG9yYXJ5IGZpbGUgdW5kZXIgYWJvdmUgZGlyZWN0b3J5ICovCisJaWYgKChm aWxkZXMgPSBjcmVhdChURU1QX0ZJTEUsIEZJTEVfTU9ERSkpID09IC0xKSB7CisJCXRzdF9icmtt KFRCUk9LLCBjbGVhbnVwLAorCQkJICJjcmVhdCglcywgJSNvKSBGYWlsZWQsIGVycm5vPSVkIDol cyIsCisJCQkgVEVNUF9GSUxFLCBGSUxFX01PREUsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOwor CX0KKworCS8qIENsb3NlIHRoZSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkICovCisJaWYgKGNsb3Nl KGZpbGRlcykgPCAwKSB7CisJCXRzdF9icmttKFRCUk9LLCBjbGVhbnVwLAorCQkJICJjbG9zZSgl cykgRmFpbGVkLCBlcnJubz0lZCA6ICVzOiIsCisJCQkgVEVNUF9GSUxFLCBlcnJubywgc3RyZXJy b3IoZXJybm8pKTsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBtb2RpZmljYXRpb24gYW5kIGFj Y2VzcyB0aW1lIGluIHRoZSB0aW1lcyBhcmcgKi8KKwl0aW1lc1swXS50dl9zZWMgPSBORVdfVElN RTsKKwl0aW1lc1swXS50dl91c2VjID0gTkVXX1RJTUVfVVNFQzsKKwl0aW1lc1sxXS50dl9zZWMg PSBORVdfVElNRTsKKwl0aW1lc1sxXS50dl91c2VjID0gTkVXX1RJTUVfVVNFQzsKKworfQkvKiBF bmQgc2V0dXAoKSAqLworCisvKgorICogdm9pZAorICogY2xlYW51cCgpIC0JcGVyZm9ybXMgYWxs IE9ORSBUSU1FIGNsZWFudXAgZm9yIHRoaXMgdGVzdCBhdAorICoJCWNvbXBsZXRpb24gb3IgcHJl bWF0dXJlIGV4aXQuCisgKgkJUmVtb3ZlIHRoZSB0ZXN0IGRpcmVjdG9yeSBhbmQgdGVzdGZpbGUg Y3JlYXRlZCBpbiB0aGUgc2V0dXAuCisgKi8KK3ZvaWQgCitjbGVhbnVwKCkKK3sKKwkvKgorCSAq IHByaW50IHRpbWluZyBzdGF0cyBpZiB0aGF0IG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorCSAqIHBy aW50IGVycm5vIGxvZyBpZiB0aGF0IG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorCSAqLworCVRFU1Rf Q0xFQU5VUDsKKworCS8qIFJlbW92ZSB0bXAgZGlyIGFuZCBhbGwgZmlsZXMgaW4gaXQgKi8KKwl0 c3Rfcm1kaXIoKTsKKworCS8qIGV4aXQgd2l0aCByZXR1cm4gY29kZSBhcHByb3ByaWF0ZSBmb3Ig cmVzdWx0cyAqLworCXRzdF9leGl0KCk7Cit9CS8qIEVuZCBjbGVhbnVwKCkgKi8KZGlmZiAtcnVO IGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMv dXRpbWVzMDYuYyBsdHAtZnVsbC0yMDA2MTEyMS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0 aW1lcy91dGltZXMwNi5jCi0tLSBsdHAtZnVsbC0yMDA2MTEyMS1vcmlnL3Rlc3RjYXNlcy9rZXJu ZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1lczA2LmMJV2VkIERlYyAzMSAxODowMDowMCAxOTY5Cisr KyBsdHAtZnVsbC0yMDA2MTEyMS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0aW1lcy91dGlt ZXMwNi5jCVRodSBEZWMgMTQgMTI6NDA6NDUgMjAwNgpAQCAtMCwwICsxLDMzNyBAQAorLyoKKyAq CisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29y cC4sIDIwMDEKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqICAgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK KyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rv biwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogVGVzdCBOYW1lOiB1dGltZXMwNgor ICoKKyAqIFRlc3QgRGVzY3JpcHRpb246CisgKiAxLiBWZXJpZnkgdGhhdCB0aGUgc3lzdGVtIGNh bGwgdXRpbWVzKCkgZmFpbHMgdG8gc2V0IHRoZSBtb2RpZmljYXRpb24KKyAqICAgIGFuZCBhY2Nl c3MgdGltZXMgb2YgYSBmaWxlIHRvIHRoZSBjdXJyZW50IHRpbWUsIHVuZGVyIHRoZSBmb2xsb3dp bmcKKyAqICAgIGNvbnN0cmFpbnRzLAorICoJIC0gVGhlIHRpbWVzIGFyZ3VtZW50IGlzIG51bGwu CisgKgkgLSBUaGUgdXNlciBJRCBvZiB0aGUgcHJvY2VzcyBpcyBub3QgInJvb3QiLgorICoJIC0g VGhlIGZpbGUgaXMgbm90IG93bmVkIGJ5IHRoZSB1c2VyIElEIG9mIHRoZSBwcm9jZXNzLgorICoJ IC0gVGhlIHVzZXIgSUQgb2YgdGhlIHByb2Nlc3MgZG9lcyBub3QgaGF2ZSB3cml0ZSBhY2Nlc3Mg dG8gdGhlCisgKgkgICBmaWxlLgorICogMi4gVmVyaWZ5IHRoYXQgdGhlIHN5c3RlbSBjYWxsIHV0 aW1lcygpIGZhaWxzIHRvIHNldCB0aGUgbW9kaWZpY2F0aW9uCisgKiAgICBhbmQgYWNjZXNzIHRp bWVzIG9mIGEgZmlsZSBpZiB0aGUgc3BlY2lmaWVkIGZpbGUgZG9lc24ndCBleGlzdC4KKyAqCisg KiBFeHBlY3RlZCBSZXN1bHQ6CisgKiAxLiB1dGltZXMgc2hvdWxkIGZhaWwgd2l0aCAtMSByZXR1 cm4gdmFsdWUgYW5kIHNldHMgZXJybm8gRUFDQ0VTLgorICogMi4gdXRpbWVzIHNob3VsZCBmYWls IHdpdGggLTEgcmV0dXJuIHZhbHVlIGFuZCBzZXRzIGVycm5vIEVOT0VOVC4KKyAqCisgKiBBbGdv cml0aG06CisgKiAgU2V0dXA6CisgKiAgIFNldHVwIHNpZ25hbCBoYW5kbGluZy4KKyAqICAgQ3Jl YXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkuCisgKiAgIFBhdXNlIGZvciBTSUdVU1IxIGlmIG9wdGlv biBzcGVjaWZpZWQuCisgKgorICogIFRlc3Q6CisgKiAgIExvb3AgaWYgdGhlIHByb3BlciBvcHRp b25zIGFyZSBnaXZlbi4KKyAqICAgRXhlY3V0ZSBzeXN0ZW0gY2FsbAorICogICBDaGVjayByZXR1 cm4gY29kZSwgaWYgc3lzdGVtIGNhbGwgZmFpbGVkIChyZXR1cm49LTEpCisgKiAgIAlpZiBlcnJu byBzZXQgPT0gZXhwZWN0ZWQgZXJybm8KKyAqICAgCQlJc3N1ZSBzeXMgY2FsbCBmYWlscyB3aXRo IGV4cGVjdGVkIHJldHVybiB2YWx1ZSBhbmQgZXJybm8uCisgKiAgIAlPdGhlcndpc2UsCisgKgkJ SXNzdWUgc3lzIGNhbGwgZmFpbHMgd2l0aCB1bmV4cGVjdGVkIGVycm5vLgorICogICBPdGhlcndp c2UsCisgKglJc3N1ZSBzeXMgY2FsbCByZXR1cm5zIHVuZXhwZWN0ZWQgdmFsdWUuCisgKgorICog IENsZWFudXA6CisgKiAgIFByaW50IGVycm5vIGxvZyBhbmQvb3IgdGltaW5nIHN0YXRzIGlmIG9w dGlvbnMgZ2l2ZW4KKyAqICAgRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5KHMpL2ZpbGUo cykgY3JlYXRlZC4KKyAqCisgKiBVc2FnZTogIDxmb3IgY29tbWFuZC1saW5lPgorICogIHV0aW1l czA2IFstYyBuXSBbLWVdIFstaSBuXSBbLUkgeF0gWy1wIHhdIFstdF0KKyAqCXdoZXJlLCAgLWMg biA6IFJ1biBuIGNvcGllcyBjb25jdXJyZW50bHkuCisgKgkJLWUgICA6IFR1cm4gb24gZXJybm8g bG9nZ2luZy4KKyAqCQktaSBuIDogRXhlY3V0ZSB0ZXN0IG4gdGltZXMuCisgKgkJLUkgeCA6IEV4 ZWN1dGUgdGVzdCBmb3IgeCBzZWNvbmRzLgorICoJCS1QIHggOiBQYXVzZSBmb3IgeCBzZWNvbmRz IGJldHdlZW4gaXRlcmF0aW9ucy4KKyAqCQktdCAgIDogVHVybiBvbiBzeXNjYWxsIHRpbWluZy4K KyAqCisgKiBIaXN0b3J5CisgKgkwNy8yMDAxIEpvaG4gR2VvcmdlCisgKgkJLVBvcnRlZAorICoK KyAqIFJlc3RyaWN0aW9uczoKKyAqICBUaGlzIHRlc3QgbXVzdCBiZSBleGVjdXRlZCBieSByb290 LgorICogICBub2JvZHkgYW5kIGJpbiBtdXN0IGJlIHZhbGlkIHVzZXJzLgorICovCisKKyNpbmNs dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5j bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4K KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMv dGltZS5oPgorI2luY2x1ZGUgPHdhaXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1 ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSAidGVzdC5oIgorI2luY2x1ZGUgInVzY3Rlc3Qu aCIKKworI2RlZmluZSBMVFBVU0VSMSAgICAgICAgIm5vYm9keSIKKyNkZWZpbmUgTFRQVVNFUjIg ICAgICAgICJiaW4iCisjZGVmaW5lIFRFTVBfRklMRQkidG1wX2ZpbGUiCisjZGVmaW5lIEZJTEVf TU9ERQlTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgKKworY2hhciAqVENJRD0idXRpbWVzMDYi OwkJLyogVGVzdCBwcm9ncmFtIGlkZW50aWZpZXIuICAgICovCitpbnQgVFNUX1RPVEFMPTI7CQkv KiBUb3RhbCBudW1iZXIgb2YgdGVzdCBjYXNlcy4gKi8KK2V4dGVybiBpbnQgVHN0X2NvdW50OwkJ LyogVGVzdCBDYXNlIGNvdW50ZXIgZm9yIHRzdF8qIHJvdXRpbmVzICovCit0aW1lX3QgY3Vycl90 aW1lOwkJLyogY3VycmVudCB0aW1lIGluIHNlY29uZHMgKi8KK3RpbWVfdCB0bG9jOwkJCS8qIGFy Z3VtZW50IHZhci4gZm9yIHRpbWUoKSAqLworaW50IGV4cF9lbm9zW109e0VBQ0NFUywgRU5PRU5U LCAwfTsKKworc3RydWN0IHBhc3N3ZCAqbHRwdXNlcjsgICAgICAgICAvKiBwYXNzd29yZCBzdHJ1 Y3QgZm9yIGx0cHVzZXJzICovCit1aWRfdCB1c2VyX3VpZDsgICAgICAgICAgICAgICAgIC8qIHVz ZXIgaWQgb2YgbHRwdXNlciAqLworZ2lkX3QgZ3JvdXBfZ2lkOyAgICAgICAgICAgICAgICAvKiBn cm91cCBpZCBvZiBsdHB1c2VyICovCitpbnQgc3RhdHVzOworCitpbnQgc2V0dXAxKCk7CQkJLyog c2V0dXAgZnVuY3Rpb24gdG8gdGVzdCBlcnJvciBFQUNDRVMgKi8KK2ludCBub19zZXR1cCgpOwor CitzdHJ1Y3QgdGVzdF9jYXNlX3QgewkJLyogdGVzdCBjYXNlIHN0cnVjdC4gdG8gaG9sZCByZWYu IHRlc3QgY29uZCdzKi8KKwljaGFyICpwYXRobmFtZTsKKwljaGFyICpkZXNjOworCWludCBleHBf ZXJybm87CisJaW50ICgqc2V0dXBmdW5jKSgpOworfSBUZXN0X2Nhc2VzW10gPSB7CisJeyBURU1Q X0ZJTEUsICJQZXJtaXNzaW9uIGRlbmllZCB0byBtb2RpZnkgZmlsZSB0aW1lIiwgRUFDQ0VTLCBz ZXR1cDEgfSwKKwl7ICIiLCAiU3BlY2lmaWVkIGZpbGUgZG9lc24ndCBleGlzdCIsIEVOT0VOVCwg bm9fc2V0dXAgfSwKKwl7IE5VTEwsIE5VTEwsIDAsIE5VTEx9Cit9OworCit2b2lkIHNldHVwKCk7 CQkJLyogTWFpbiBzZXR1cCBmdW5jdGlvbiBvZiB0ZXN0ICovCit2b2lkIGNsZWFudXAoKTsJCQkv KiBjbGVhbnVwIGZ1bmN0aW9uIGZvciB0aGUgdGVzdCAqLworCitpbnQKK21haW4oaW50IGFjLCBj aGFyICoqYXYpCit7CisJaW50IGxjOwkJCS8qIGxvb3AgY291bnRlciAqLworCWNoYXIgKm1zZzsJ CS8qIG1lc3NhZ2UgcmV0dXJuZWQgZnJvbSBwYXJzZV9vcHRzICovCisJY2hhciAqZmlsZV9uYW1l OwkvKiB0ZXN0ZmlsZSBuYW1lICovCisJY2hhciAqdGVzdF9kZXNjOwkvKiB0ZXN0IHNwZWNpZmlj IGVycm9yIG1lc3NhZ2UgKi8KKwlpbnQgaW5kOwkJLyogY291bnRlciB0byB0ZXN0IGRpZmZlcmVu dCB0ZXN0IGNvbmRpdGlvbnMgKi8KKwlpbnQgcGlkOworICAgIAorCS8qIFBhcnNlIHN0YW5kYXJk IG9wdGlvbnMgZ2l2ZW4gdG8gcnVuIHRoZSB0ZXN0LiAqLworCW1zZyA9IHBhcnNlX29wdHMoYWMs IGF2LCAob3B0aW9uX3QgKikgTlVMTCwgTlVMTCk7CisJaWYgKG1zZyAhPSAoY2hhciAqKSBOVUxM KSB7CisJCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiT1BUSU9OIFBBUlNJTkcgRVJST1IgLSAlcyIs IG1zZyk7CisJCXRzdF9leGl0KCk7CisJfQorCisJLyogUGVyZm9ybSBnbG9iYWwgc2V0dXAgZm9y IHRlc3QgKi8KKwlzZXR1cCgpOworCisJLyogc2V0IHRoZSBleHBlY3RlZCBlcnJub3MuLi4gKi8K KwlURVNUX0VYUF9FTk9TKGV4cF9lbm9zKTsKKworCXBpZCA9IEZPUktfT1JfVkZPUksoKTsKKwor CWlmIChwaWQgPT0gLTEpIHsKKwkJdHN0X2Jya20oVEJST0ssIGNsZWFudXAsICJmb3JrKCkgZmFp bGVkIik7CisJCS8qTk9UUkVBQ0hFRCovCisJfSBlbHNlIGlmIChwaWQgPT0gMCkgeworCQlpZiAo KGx0cHVzZXIgPSBnZXRwd25hbShMVFBVU0VSMSkpID09IE5VTEwpIHsKKwkJCXRzdF9icmttKFRC Uk9LLGNsZWFudXAsIiVzIG5vdCBmb3VuZCBpbiAvZXRjL3Bhc3N3ZCIsCisJCQkJTFRQVVNFUjEp OworCQkJLypOT1RSRUFDSEVEKi8KKwkJfQorCisJCS8qIGdldCB1aWQgb2YgdXNlciAqLworCQl1 c2VyX3VpZCA9IGx0cHVzZXItPnB3X3VpZDsKKworCQlzZXRldWlkKHVzZXJfdWlkKTsKKworCQkv KiBDaGVjayBsb29waW5nIHN0YXRlIGlmIC1pIG9wdGlvbiBnaXZlbiAqLworCQlmb3IgKGxjID0g MDsgVEVTVF9MT09QSU5HKGxjKTsgbGMrKykgeworCQkJLyogUmVzZXQgVHN0X2NvdW50IGluIGNh c2Ugd2UgYXJlIGxvb3BpbmcuICovCisJCQlUc3RfY291bnQ9MDsKKworCQkJZm9yIChpbmQgPSAw OyBUZXN0X2Nhc2VzW2luZF0uZGVzYyAhPSBOVUxMOyBpbmQrKykgeworCQkJCWZpbGVfbmFtZSA9 IFRlc3RfY2FzZXNbaW5kXS5wYXRobmFtZTsKKwkJCQl0ZXN0X2Rlc2MgPSBUZXN0X2Nhc2VzW2lu ZF0uZGVzYzsKKworCQkJCS8qCisJCQkJICogQ2FsbCB1dGltZXMoMikgdG8gdGVzdCBkaWZmZXJl bnQgdGVzdAorCQkJCSAqIGNvbmRpdGlvbnMuIFZlcmlmeSB0aGF0IGl0IGZhaWxzIHdpdGggLTEK KwkJCQkgKiByZXR1cm4gdmFsdWUgYW5kIHNldHMgYXBwcm9wcmlhdGUgZXJybm8uCisJCQkJICov CisJCQkJVEVTVCh1dGltZXMoZmlsZV9uYW1lLCBOVUxMKSk7CisKKwkJCQkvKiBDaGVjayByZXR1 cm4gY29kZSBmcm9tIHV0aW1lcygyKSAqLworCQkJCWlmIChURVNUX1JFVFVSTiA9PSAtMSkgewor CQkJCQlURVNUX0VSUk9SX0xPRyhURVNUX0VSUk5PKTsKKwkJCQkJaWYgKFRFU1RfRVJSTk8gPT0K KwkJCQkJCVRlc3RfY2FzZXNbaW5kXS5leHBfZXJybm8pIHsKKwkJCQkJCXRzdF9yZXNtKFRQQVNT LCAidXRpbWVzKCkgIgorCQkJCQkJCSJmYWlscywgJXMsIGVycm5vOiVkIiwKKwkJCQkJCQl0ZXN0 X2Rlc2MsIFRFU1RfRVJSTk8pOworCQkJCQl9IGVsc2UgeworCQkJCQkJdHN0X3Jlc20oVEZBSUws ICJ1dGltZXMoMikgIgorCQkJCQkJCSJmYWlscywgJXMsIGVycm5vOiVkLCAiCisJCQkJCQkJImV4 cGVjdGVkIGVycm5vOiVkIiwKKwkJCQkJCQl0ZXN0X2Rlc2MsIFRFU1RfRVJSTk8sCisJCQkJCQkJ VGVzdF9jYXNlc1tpbmRdLmV4cF9lcnJubyk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQl0 c3RfcmVzbShURkFJTCwgInV0aW1lcygyKSByZXR1cm5lZCAlZCwgIgorCQkJCQkJImV4cGVjdGVk IC0xLCBlcnJubzolZCIsCisJCQkJCQlURVNUX1JFVFVSTiwKKwkJCQkJCVRlc3RfY2FzZXNbaW5k XS5leHBfZXJybm8pOworCQkJCX0KKwkJCX0JLyogRW5kIG9mIFRFU1QgQ0FTRSBMT09QSU5HLiAq LworCisJCQlUc3RfY291bnQrKzsJCS8qIGluY3IgVEVTVF9MT09QIGNvdW50ZXIgKi8KKworCQl9 CS8qIEVuZCBmb3IgVEVTVF9MT09QSU5HICovCisJfSBlbHNlIHsKKwkJd2FpdHBpZChwaWQsICZz dGF0dXMsIDApOworCQlfZXhpdCgwKTsgICAgICAgLyoKKwkJCQkgKiBFeGl0IGhlcmUgYW5kIGxl dCB0aGUgY2hpbGQgY2xlYW4gdXAuCisJCQkJICogVGhpcyBhbGxvd3MgdGhlIGVycm5vIGluZm9y bWF0aW9uIHNldAorCQkJCSAqIGJ5IHRoZSBURVNUX0VSUk9SX0xPRyBtYWNybyBhbmQgdGhlCisJ CQkJICogUEFTUy9GQUlMIHN0YXR1cyB0byBiZSBwcmVzZXJ2ZWQgZm9yCisJCQkJICogdXNlIGR1 cmluZyBjbGVhbnVwLgorCQkJCSAqLworCX0KKwkvKiBDYWxsIGNsZWFudXAoKSB0byB1bmRvIHNl dHVwIGRvbmUgZm9yIHRoZSB0ZXN0LiAqLworCWNsZWFudXAoKTsKKwkvKk5PVFJFQUNIRUQqLwor CisKKyAgcmV0dXJuKDApOworCit9CS8qIEVuZCBtYWluICovCisKKy8qCisgKiB2b2lkCisgKiBz ZXR1cCgpIC0gcGVyZm9ybXMgYWxsIE9ORSBUSU1FIHNldHVwIGZvciB0aGlzIHRlc3QuCisgKiAg Q3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgY2hhbmdlIGRpcmVjdG9yeSB0byBpdC4K KyAqICBJbnZva2UgaW5kaXZpZHVhbCB0ZXN0IHNldHVwIGZ1bmN0aW9ucyBhY2NvcmRpbmcgdG8g dGhlIG9yZGVyCisgKiAgc2V0IGluIHRlc3Qgc3RydWN0LiBkZWZpbml0aW9uLgorICovCit2b2lk IAorc2V0dXAoKQoreworCWludCBpbmQ7CQkJLyogY291bnRlciBmb3Igc2V0dXAgZnVuY3Rpb25z ICovCisKKwkvKiBjYXB0dXJlIHNpZ25hbHMgKi8KKwl0c3Rfc2lnKEZPUkssIERFRl9IQU5ETEVS LCBjbGVhbnVwKTsKKworCS8qIENoZWNrIHRoYXQgdGhlIHRlc3QgcHJvY2VzcyBpZCBpcyBub24t c3VwZXIvcm9vdCAgKi8KKwlpZiAoZ2V0ZXVpZCgpICE9IDApIHsKKwkJdHN0X2Jya20oVEJST0ss IE5VTEwsICJNdXN0IGJlIHJvb3QgZm9yIHRoaXMgdGVzdCEiKTsKKwkJdHN0X2V4aXQoKTsKKwl9 CisKKwkvKiBQYXVzZSBpZiB0aGF0IG9wdGlvbiB3YXMgc3BlY2lmaWVkICovCisJVEVTVF9QQVVT RTsKKworCS8qIG1ha2UgYSB0ZW1wIGRpcmVjdG9yeSBhbmQgY2QgdG8gaXQgKi8KKwl0c3RfdG1w ZGlyKCk7CisKKwkvKiBjYWxsIGluZGl2aWR1YWwgc2V0dXAgZnVuY3Rpb25zICovCisJZm9yIChp bmQgPSAwOyBUZXN0X2Nhc2VzW2luZF0uZGVzYyAhPSBOVUxMOyBpbmQrKykgeworCQlUZXN0X2Nh c2VzW2luZF0uc2V0dXBmdW5jKCk7CisJfQorfQkvKiBFbmQgc2V0dXAoKSAqLworCisvKgorICog aW50CisgKiBub19zZXR1cCgpIC0gU29tZSB0ZXN0IGNvbmRpdGlvbnMgZm9yIHV0aW1lcygyKSBk byBub3QgYW55IHNldHVwLgorICogICAgICAgICAgICAgIEhlbmNlLCB0aGlzIGZ1bmN0aW9uIGp1 c3QgcmV0dXJucyAwLgorICovCitpbnQKK25vX3NldHVwKCkKK3sKKwlyZXR1cm4gMDsKK30KKwor LyoKKyAqIGludAorICogc2V0dXAxKCkgLSBzZXR1cCBmdW5jdGlvbiBmb3IgYSB0ZXN0IGNvbmRp dGlvbiBmb3Igd2hpY2ggdXRpbWVzKDIpCisgKgkJcmV0dXJucyAtMSBhbmQgc2V0cyBlcnJubyB0 byBFQUNDRVMuCisgKiAgQ3JlYXRlIGEgdGVzdGZpbGUgdW5kZXIgdGVtcG9yYXJ5IGRpcmVjdG9y eSBhbmQgY2hhbmdlIHRoZSBvd25lcnNoaXAgb2YKKyAqICB0ZXN0ZmlsZSB0byAiYmluIi4KKyAq LworaW50CitzZXR1cDEoKQoreworCWludCBmaWxkZXM7CQkJLyogZmlsZSBoYW5kbGUgZm9yIHRl bXAgZmlsZSAqLworCisJLyogQ3JlYXQgYSB0ZW1wb3JhcnkgZmlsZSB1bmRlciBhYm92ZSBkaXJl Y3RvcnkgKi8KKwlpZiAoKGZpbGRlcyA9IGNyZWF0KFRFTVBfRklMRSwgRklMRV9NT0RFKSkgPT0g LTEpIHsKKwkJdHN0X2Jya20oVEJST0ssIGNsZWFudXAsICJjcmVhdCglcywgJSNvKSBGYWlsZWQs IGVycm5vPSVkIDolcyIsCisJCQkgVEVNUF9GSUxFLCBGSUxFX01PREUsIGVycm5vLCBzdHJlcnJv cihlcnJubykpOworCX0KKworCS8qIENsb3NlIHRoZSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkICov CisJaWYgKGNsb3NlKGZpbGRlcykgPCAwKSB7CisJCXRzdF9icmttKFRCUk9LLCBjbGVhbnVwLCAi Y2xvc2UoJXMpIEZhaWxlZCwgZXJybm89JWQgOiAlczoiLAorCQkJCSBURU1QX0ZJTEUsIGVycm5v LCBzdHJlcnJvcihlcnJubykpOworCX0KKworCWlmICgobHRwdXNlciA9IGdldHB3bmFtKExUUFVT RVIyKSkgPT0gTlVMTCkgeworCQl0c3RfYnJrbShUQlJPSywgY2xlYW51cCwgIiVzIG5vdCBmb3Vu ZCBpbiAvZXRjL3Bhc3N3ZCIsCisJCQkJTFRQVVNFUjIpOworCQkvKk5PVFJFQUNIRUQqLworCX0K KworCS8qIGdldCB1aWQvZ2lkIG9mIHVzZXIgYWNjb3JkaW5nbHkgKi8KKwl1c2VyX3VpZCA9IGx0 cHVzZXItPnB3X3VpZDsKKwlncm91cF9naWQgPSBsdHB1c2VyLT5wd19naWQ7CisKKwlpZiAoY2hv d24oVEVNUF9GSUxFLCB1c2VyX3VpZCwgZ3JvdXBfZ2lkKSA8IDApIHsKKwkJdHN0X2Jya20oVEJS T0ssIGNsZWFudXAsICJjaG93bigpIG9mICVzIGZhaWxlZCwgZXJyb3IgJWQiLAorCQkJVEVNUF9G SUxFLCBlcnJubyk7CisJCS8qTk9UUkVBQ0hFRCovCisJfQorCisJcmV0dXJuIDA7Cit9CS8qIEVu ZCBvZiBzZXR1cDEgKi8KKworLyoKKyAqIHZvaWQKKyAqIGNsZWFudXAoKSAtIHBlcmZvcm1zIGFs bCBPTkUgVElNRSBjbGVhbnVwIGZvciB0aGlzIHRlc3QgYXQKKyAqICAgICAgICAgICAgIGNvbXBs ZXRpb24gb3IgcHJlbWF0dXJlIGV4aXQuCisgKiAgUmVtb3ZlIHRoZSB0ZXN0IGRpcmVjdG9yeSBh bmQgdGVzdGZpbGUgY3JlYXRlZCBpbiB0aGUgc2V0dXAuCisgKi8KK3ZvaWQgCitjbGVhbnVwKCkK K3sKKwlzZXRldWlkKDApOworCS8qCisJICogcHJpbnQgdGltaW5nIHN0YXRzIGlmIHRoYXQgb3B0 aW9uIHdhcyBzcGVjaWZpZWQuCisJICogcHJpbnQgZXJybm8gbG9nIGlmIHRoYXQgb3B0aW9uIHdh cyBzcGVjaWZpZWQuCisJICovCisJVEVTVF9DTEVBTlVQOworCisJLyogUmVtb3ZlIHRtcCBkaXIg YW5kIGFsbCBmaWxlcyBpbiBpdCAqLworCXRzdF9ybWRpcigpOworCisJLyogZXhpdCB3aXRoIHJl dHVybiBjb2RlIGFwcHJvcHJpYXRlIGZvciByZXN1bHRzICovCisJdHN0X2V4aXQoKTsKK30JLyog RW5kIGNsZWFudXAoKSAqLwo= ------=_Part_79072_22077359.1166151495960--