From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 73FA76E12E for ; Thu, 21 Nov 2019 14:08:04 +0000 (UTC) Date: Thu, 21 Nov 2019 16:07:59 +0200 From: Petri Latvala Message-ID: <20191121140759.GH25209@platvala-desk.ger.corp.intel.com> References: <20191120212143.364333-1-lionel.g.landwerlin@intel.com> <20191120212143.364333-4-lionel.g.landwerlin@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191120212143.364333-4-lionel.g.landwerlin@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t 03/10] igt: add timeline test cases List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Lionel Landwerlin Cc: igt-dev@lists.freedesktop.org, Chunming Zhou List-ID: T24gV2VkLCBOb3YgMjAsIDIwMTkgYXQgMTE6MjE6MzZQTSArMDIwMCwgTGlvbmVsIExhbmR3ZXJs aW4gd3JvdGU6Cj4gRnJvbTogQ2h1bm1pbmcgWmhvdSA8ZGF2aWQxLnpob3VAYW1kLmNvbT4KPiAK PiB2MjogYWRhcHQgdG8gbmV3IHRyYW5zZmVyIGlvY3RsCj4gCj4gdjM6IERyb3AgdXNlbGVzcyB1 aW50NjRfdCBjYXN0cyAoTGlvbmVsKQo+ICAgICBGaXggdGltZWxpbmUgcXVlcnkgcHJvdG90eXBl cyAoTGlvbmVsKQo+ICAgICBUZXN0IG11bHRpIHdhaXQgd2l0aCB0aW1lbGluZSAmIGJpbmFyeSBz eW5jb2JqcyAoTGlvbmVsKQo+IAo+IHY0OiBTd2l0Y2ggZnJvbSBkcm1Jb2N0bCB0byBpZ3RfaW9j dGwgaW4gdGVzdHMvKi5jIChDaHJpcykKPiAgICAgQ2xlYXIgb3V0IGVycm5vIGluIGhlbHBlciBm dW5jdGlvbnMgKENocmlzKQo+IAo+IHY1OiBGaXggbGliIGNvbW1lbnRzIG9uIHRyYW5zZmVyIGhl bHBlcnMgKExpb25lbCkKPiAKPiB2NjogQWRkIGlndF9kZXNjcmliZSgpIChMaW9uZWwpCj4gCj4g U2lnbmVkLW9mZi1ieTogQ2h1bm1pbmcgWmhvdSA8ZGF2aWQxLnpob3VAYW1kLmNvbT4KPiBTaWdu ZWQtb2ZmLWJ5OiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRlbC5j b20+Cj4gLS0tCj4gIGxpYi9pZ3Rfc3luY29iai5jICAgICAgICB8ICAyMzcgKysrKysrKysKPiAg bGliL2lndF9zeW5jb2JqLmggICAgICAgIHwgICAxOSArCj4gIHRlc3RzL21lc29uLmJ1aWxkICAg ICAgICB8ICAgIDEgKwoKQ29ycmVzcG9uZGluZyBhdXRvdG9vbHMgY2hhbmdlIG1pc3NpbmcuCgoK LS0gClBldHJpIExhdHZhbGEKCgoKPiAgdGVzdHMvc3luY29ial90aW1lbGluZS5jIHwgMTE1MCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICA0IGZpbGVzIGNoYW5nZWQs IDE0MDcgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvc3luY29ial90 aW1lbGluZS5jCj4gCj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3Rfc3luY29iai5jIGIvbGliL2lndF9z eW5jb2JqLmMKPiBpbmRleCBlNTU2OWZmYy4uNjMyYTUxODIgMTAwNjQ0Cj4gLS0tIGEvbGliL2ln dF9zeW5jb2JqLmMKPiArKysgYi9saWIvaWd0X3N5bmNvYmouYwo+IEBAIC0yODYsMyArMjg2LDI0 MCBAQCBzeW5jb2JqX3NpZ25hbChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50MzJfdCBj b3VudCkKPiAgewo+ICAJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfc2lnbmFsKGZkLCBoYW5kbGVz LCBjb3VudCksIDApOwo+ICB9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK19fc3luY29ial90aW1lbGlu ZV9zaWduYWwoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKnBvaW50cywgdWlu dDMyX3QgY291bnQpCj4gK3sKPiArCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBh cnJheSA9IHsgMCB9Owo+ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJYXJyYXkuaGFuZGxlcyA9IHRv X3VzZXJfcG9pbnRlcihoYW5kbGVzKTsKPiArCWFycmF5LnBvaW50cyA9IHRvX3VzZXJfcG9pbnRl cihwb2ludHMpOwo+ICsJYXJyYXkuY291bnRfaGFuZGxlcyA9IGNvdW50Owo+ICsJaWYgKGRybUlv Y3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9USU1FTElORV9TSUdOQUwsICZhcnJheSkpIHsKPiAr CQllcnIgPSAtZXJybm87Cj4gKwkJaWd0X2Fzc3VtZShlcnIpOwo+ICsJfQo+ICsJZXJybm8gPSAw Owo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHN5bmNvYmpfc2lnbmFsOgo+ ICsgKiBAZmQ6IFRoZSBEUk0gZmlsZSBkZXNjcmlwdG9yLgo+ICsgKiBAaGFuZGxlczogQXJyYXkg b2Ygc3luY29iaiBoYW5kbGVzIHRvIHNpZ25hbAo+ICsgKiBAcG9pbnRzOiBMaXN0IG9mIHBvaW50 IG9mIGhhbmRsZXMgdG8gc2lnbmFsLgo+ICsgKiBAY291bnQ6IENvdW50IG9mIHN5bmNvYmogaGFu ZGxlcy4KPiArICoKPiArICogU2lnbmFsIGEgc2V0IG9mIHN5bmNvYmpzLgo+ICsgKi8KPiArdm9p ZAo+ICtzeW5jb2JqX3RpbWVsaW5lX3NpZ25hbChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1 aW50NjRfdCAqcG9pbnRzLCB1aW50MzJfdCBjb3VudCkKPiArewo+ICsJaWd0X2Fzc2VydF9lcShf X3N5bmNvYmpfdGltZWxpbmVfc2lnbmFsKGZkLCBoYW5kbGVzLCBwb2ludHMsIGNvdW50KSwgMCk7 Cj4gK30KPiAraW50Cj4gK19fc3luY29ial90aW1lbGluZV93YWl0X2lvY3RsKGludCBmZCwgc3Ry dWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQgKmFyZ3MpCj4gK3sKPiArCWludCBlcnIgPSAw Owo+ICsJaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9USU1FTElORV9XQUlULCBh cmdzKSkgewo+ICsJCWVyciA9IC1lcnJubzsKPiArCQlpZ3RfYXNzdW1lKGVycik7Cj4gKwl9Cj4g KwllcnJubyA9IDA7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gK3N0YXRpYyBpbnQKPiArX19zeW5j b2JqX3RpbWVsaW5lX3dhaXQoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKnBv aW50cywKPiArCQkJdW5zaWduZWQgbnVtX2hhbmRsZXMsCj4gKwkJCWludDY0X3QgdGltZW91dF9u c2VjLCB1bnNpZ25lZCBmbGFncywKPiArCQkJdWludDMyX3QgKmZpcnN0X3NpZ25hbGVkKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCBhcmdzOwo+ICsJaW50IHJldDsK PiArCj4gKwlhcmdzLmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoaGFuZGxlcyk7Cj4gKwlhcmdz LnBvaW50cyA9IHRvX3VzZXJfcG9pbnRlcihwb2ludHMpOwo+ICsJYXJncy50aW1lb3V0X25zZWMg PSB0aW1lb3V0X25zZWM7Cj4gKwlhcmdzLmNvdW50X2hhbmRsZXMgPSBudW1faGFuZGxlczsKPiAr CWFyZ3MuZmxhZ3MgPSBmbGFnczsKPiArCWFyZ3MuZmlyc3Rfc2lnbmFsZWQgPSAwOwo+ICsJYXJn cy5wYWQgPSAwOwo+ICsKPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9U SU1FTElORV9XQUlULCAmYXJncyk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCXJldCA9IC1lcnJu bzsKPiArCQlpZ3RfYXNzdW1lKHJldCk7Cj4gKwl9Cj4gKwllcnJubyA9IDA7Cj4gKwo+ICsJaWYg KGZpcnN0X3NpZ25hbGVkKQo+ICsJCSpmaXJzdF9zaWduYWxlZCA9IGFyZ3MuZmlyc3Rfc2lnbmFs ZWQ7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtpbnQKPiArc3luY29ial90aW1lbGluZV93 YWl0X2VycihpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLAo+ICsJ CQkgIHVuc2lnbmVkIG51bV9oYW5kbGVzLAo+ICsJCQkgIGludDY0X3QgdGltZW91dF9uc2VjLCB1 bnNpZ25lZCBmbGFncykKPiArewo+ICsJcmV0dXJuIF9fc3luY29ial90aW1lbGluZV93YWl0KGZk LCBoYW5kbGVzLCBwb2ludHMsIG51bV9oYW5kbGVzLAo+ICsJCQkJICAgICAgIHRpbWVvdXRfbnNl YywgZmxhZ3MsIE5VTEwpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogc3luY29ial90aW1lbGluZV93 YWl0Ogo+ICsgKiBAZmQ6IFRoZSBEUk0gZmlsZSBkZXNjcmlwdG9yCj4gKyAqIEBoYW5kbGVzOiBM aXN0IG9mIHN5bmNvYmogaGFuZGxlcyB0byB3YWl0IGZvci4KPiArICogQHBvaW50czogTGlzdCBv ZiBwb2ludCBvZiBoYW5kbGVzIHRvIHdhaXQgZm9yLgo+ICsgKiBAbnVtX2hhbmRsZXM6IENvdW50 IG9mIGhhbmRsZXMKPiArICogQHRpbWVvdXRfbnNlYzogQWJzb2x1dGUgd2FpdCB0aW1lb3V0IGlu IG5hbm9zZWNvbmRzLgo+ICsgKiBAZmxhZ3M6IFdhaXQgaW9jdGwgZmxhZ3MuCj4gKyAqIEBmaXJz dF9zaWduYWxlZDogUmV0dXJuZWQgaGFuZGxlIGZvciBmaXJzdCBzaWduYWxlZCBzeW5jb2JqLgo+ ICsgKgo+ICsgKiBXYWl0cyBpbiB0aGUga2VybmVsIGZvciBhbnkvYWxsIHRoZSByZXF1ZXN0ZWQg c3luY29ianMgdGltZWxpbmUgcG9pbnQKPiArICogdXNpbmcgdGhlIHRpbWVvdXQgYW5kIGZsYWdz Lgo+ICsgKiBSZXR1cm5zOiBib29sIHZhbHVlIC0gZmFsc2UgPSB0aW1lZG91dCwgdHJ1ZSA9IHNp Z25hbGVkCj4gKyAqLwo+ICtib29sCj4gK3N5bmNvYmpfdGltZWxpbmVfd2FpdChpbnQgZmQsIHVp bnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLAo+ICsJCSAgICAgIHVuc2lnbmVkIG51 bV9oYW5kbGVzLAo+ICsJCSAgICAgIGludDY0X3QgdGltZW91dF9uc2VjLCB1bnNpZ25lZCBmbGFn cywKPiArCQkgICAgICB1aW50MzJfdCAqZmlyc3Rfc2lnbmFsZWQpCj4gK3sKPiArCWludCByZXQ7 Cj4gKwo+ICsJcmV0ID0gX19zeW5jb2JqX3RpbWVsaW5lX3dhaXQoZmQsIGhhbmRsZXMsIHBvaW50 cywgbnVtX2hhbmRsZXMsCj4gKwkJCQkgICAgICB0aW1lb3V0X25zZWMsIGZsYWdzLCBmaXJzdF9z aWduYWxlZCk7Cj4gKwlpZiAocmV0ID09IC1FVElNRSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwlp Z3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gKwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50Cj4gK19fc3luY29ial90aW1lbGluZV9xdWVyeShpbnQgZmQsIHVpbnQzMl90 ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLAo+ICsJCQkgdWludDMyX3QgaGFuZGxlX2NvdW50 KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJnczsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJYXJncy5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKGhhbmRsZXMpOwo+ ICsJYXJncy5wb2ludHMgPSB0b191c2VyX3BvaW50ZXIocG9pbnRzKTsKPiArCWFyZ3MuY291bnRf aGFuZGxlcyA9IGhhbmRsZV9jb3VudDsKPiArCWFyZ3MuZmxhZ3MgPSAwOwo+ICsKPiArCXJldCA9 IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9RVUVSWSwgJmFyZ3MpOwo+ICsJaWYgKHJl dCkgewo+ICsJCXJldCA9IC1lcnJubzsKPiArCQlpZ3RfYXNzdW1lKHJldCk7Cj4gKwl9Cj4gKwo+ ICsJZXJybm8gPSAwOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHN5bmNv YmpfdGltZWxpbmVfcXVlcnk6Cj4gKyAqIEBmZDogVGhlIERSTSBmaWxlIGRlc2NyaXB0b3IuCj4g KyAqIEBoYW5kbGVzOiBBcnJheSBvZiBzeW5jb2JqIGhhbmRsZXMuCj4gKyAqIEBwb2ludHM6IEFy cmF5IG9mIHN5bmNvYmogcG9pbnRzIHF1ZXJpZWQuCj4gKyAqIEBjb3VudDogQ291bnQgb2Ygc3lu Y29iaiBoYW5kbGVzLgo+ICsgKgo+ICsgKiBRdWVyaWVzIGEgc2V0IG9mIHN5bmNvYmpzLgo+ICsg Ki8KPiArdm9pZAo+ICtzeW5jb2JqX3RpbWVsaW5lX3F1ZXJ5KGludCBmZCwgdWludDMyX3QgKmhh bmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsCj4gKwkJICAgICAgIHVpbnQzMl90IGNvdW50KQo+ICt7 Cj4gKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV9xdWVyeShmZCwgaGFuZGxlcywg cG9pbnRzLCBjb3VudCksIDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK19fc3luY29ial9i aW5hcnlfdG9fdGltZWxpbmUoaW50IGZkLCB1aW50MzJfdCB0aW1lbGluZV9oYW5kbGUsCj4gKwkJ CSAgICAgdWludDY0X3QgcG9pbnQsIHVpbnQzMl90IGJpbmFyeV9oYW5kbGUpCj4gK3sKPiArCXN0 cnVjdCBkcm1fc3luY29ial90cmFuc2ZlciBhcmdzOwo+ICsJaW50IHJldDsKPiArCj4gKwlhcmdz LnNyY19oYW5kbGUgPSBiaW5hcnlfaGFuZGxlOwo+ICsJYXJncy5kc3RfaGFuZGxlID0gdGltZWxp bmVfaGFuZGxlOwo+ICsJYXJncy5zcmNfcG9pbnQgPSAwOwo+ICsJYXJncy5kc3RfcG9pbnQgPSBw b2ludDsKPiArCWFyZ3MuZmxhZ3MgPSAwOwo+ICsJYXJncy5wYWQgPSAwOwo+ICsJcmV0ID0gZHJt SW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RSQU5TRkVSLCAmYXJncyk7Cj4gKwlpZiAocmV0 KSB7Cj4gKwkJcmV0ID0gLWVycm5vOwo+ICsJCWlndF9hc3NlcnQocmV0KTsKPiArCX0KPiArCj4g KwllcnJubyA9IDA7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKioKPiArICogc3luY29i al9iaW5hcnlfdG9fdGltZWxpbmU6Cj4gKyAqIEBmZDogVGhlIERSTSBmaWxlIGRlc2NyaXB0b3Iu Cj4gKyAqIEB0aW1lbGluZV9oYW5kbGU6IEEgc3luY29iaiB0aW1lbGluZSBoYW5kbGUKPiArICog QHBvaW50OiBBIHN5bmNvYmogdGltZWxpbmUgcG9pbnQgaW4gdGhlIHRpbWVsaW5lIGhhbmRsZQo+ ICsgKiBAYmluYXJ5X2hhbmRsZTogQSBzeW5jb2JqIGJpbmFyeSBoYW5kbGUKPiArICoKPiArICog VHJhbnNmZXJzIGEgRE1BIGZlbmNlIGZyb20gYSBiaW5hcnkgc3luY29iaiBpbnRvIGEgdGltZWxp bmUgc3luY29iago+ICsgKiBhdCBhIGdpdmVuIHBvaW50IG9uIHRoZSB0aW1lbGluZS4KPiArICov Cj4gK3ZvaWQKPiArc3luY29ial9iaW5hcnlfdG9fdGltZWxpbmUoaW50IGZkLCB1aW50MzJfdCB0 aW1lbGluZV9oYW5kbGUsCj4gKwkJCSAgIHVpbnQ2NF90IHBvaW50LCB1aW50MzJfdCBiaW5hcnlf aGFuZGxlKQo+ICt7Cj4gKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial9iaW5hcnlfdG9fdGltZWxp bmUoZmQsIHRpbWVsaW5lX2hhbmRsZSwgcG9pbnQsCj4gKwkJCQkJCSAgIGJpbmFyeV9oYW5kbGUp LCAwKTsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtfX3N5bmNvYmpfdGltZWxpbmVfdG9fYmlu YXJ5KGludCBmZCwgdWludDMyX3QgYmluYXJ5X2hhbmRsZSwKPiArCQkJICAgICB1aW50MzJfdCB0 aW1lbGluZV9oYW5kbGUsCj4gKwkJCSAgICAgdWludDY0X3QgcG9pbnQsCj4gKwkJCSAgICAgdWlu dDMyX3QgZmxhZ3MpCj4gK3sKPiArCXN0cnVjdCBkcm1fc3luY29ial90cmFuc2ZlciBhcmdzOwo+ ICsJaW50IHJldDsKPiArCj4gKwlhcmdzLmRzdF9oYW5kbGUgPSBiaW5hcnlfaGFuZGxlOwo+ICsJ YXJncy5zcmNfaGFuZGxlID0gdGltZWxpbmVfaGFuZGxlOwo+ICsJYXJncy5kc3RfcG9pbnQgPSAw Owo+ICsJYXJncy5zcmNfcG9pbnQgPSBwb2ludDsKPiArCWFyZ3MuZmxhZ3MgPSBmbGFnczsKPiAr CWFyZ3MucGFkID0gMDsKPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9U UkFOU0ZFUiwgJmFyZ3MpOwo+ICsJaWYgKHJldCkgewo+ICsJCXJldCA9IC1lcnJubzsKPiArCQlp Z3RfYXNzZXJ0KHJldCk7Cj4gKwl9Cj4gKwo+ICsJZXJybm8gPSAwOwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArLyoqCj4gKyAqIHN5bmNvYmpfYmluYXJ5X3RvX3RpbWVsaW5lOgo+ICsgKiBA ZmQ6IFRoZSBEUk0gZmlsZSBkZXNjcmlwdG9yLgo+ICsgKiBAYmluYXJ5X2hhbmRsZTogQSBzeW5j b2JqIGJpbmFyeSBoYW5kbGUKPiArICogQHRpbWVsaW5lX2hhbmRsZTogQSBzeW5jb2JqIHRpbWVs aW5lIGhhbmRsZQo+ICsgKiBAcG9pbnQ6IEEgc3luY29iaiB0aW1lbGluZSBwb2ludCBpbiB0aGUg dGltZWxpbmUgaGFuZGxlCj4gKyAqCj4gKyAqIFRyYW5zZmVycyBETUEgZmVuY2UgZnJvbSBhIGdp dmVuIHBvaW50IGZyb20gdGltZWxpbmUgc3luY29iaiBpbnRvIGEKPiArICogYmluYXJ5IHN5bmNv YmouCj4gKyAqLwo+ICt2b2lkCj4gK3N5bmNvYmpfdGltZWxpbmVfdG9fYmluYXJ5KGludCBmZCwg dWludDMyX3QgYmluYXJ5X2hhbmRsZSwKPiArCQkJICAgdWludDMyX3QgdGltZWxpbmVfaGFuZGxl LAo+ICsJCQkgICB1aW50NjRfdCBwb2ludCwKPiArCQkJICAgdWludDMyX3QgZmxhZ3MpCj4gK3sK PiArCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3RpbWVsaW5lX3RvX2JpbmFyeShmZCwgYmluYXJ5 X2hhbmRsZSwKPiArCQkJCQkJICAgdGltZWxpbmVfaGFuZGxlLCBwb2ludCwKPiArCQkJCQkJICAg ZmxhZ3MpLCAwKTsKPiArfQo+IGRpZmYgLS1naXQgYS9saWIvaWd0X3N5bmNvYmouaCBiL2xpYi9p Z3Rfc3luY29iai5oCj4gaW5kZXggNTFhZDIzNjQuLjIwZjFmMThmIDEwMDY0NAo+IC0tLSBhL2xp Yi9pZ3Rfc3luY29iai5oCj4gKysrIGIvbGliL2lndF9zeW5jb2JqLmgKPiBAQCAtNDEsNyArNDEs MjYgQEAgaW50IHN5bmNvYmpfd2FpdF9lcnIoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWlu dDMyX3QgY291bnQsCj4gIGJvb2wgc3luY29ial93YWl0KGludCBmZCwgdWludDMyX3QgKmhhbmRs ZXMsIHVpbnQzMl90IGNvdW50LAo+ICAJCSAgdWludDY0X3QgYWJzX3RpbWVvdXRfbnNlYywgdWlu dDMyX3QgZmxhZ3MsCj4gIAkJICB1aW50MzJfdCAqZmlyc3Rfc2lnbmFsZWQpOwo+ICtpbnQgX19z eW5jb2JqX3RpbWVsaW5lX3dhaXRfaW9jdGwoaW50IGZkLAo+ICsJCQkJICBzdHJ1Y3QgZHJtX3N5 bmNvYmpfdGltZWxpbmVfd2FpdCAqYXJncyk7Cj4gK2Jvb2wgc3luY29ial90aW1lbGluZV93YWl0 KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsCj4gKwkJCSAgIHVu c2lnbmVkIG51bV9oYW5kbGVzLAo+ICsJCQkgICBpbnQ2NF90IHRpbWVvdXRfbnNlYywgdW5zaWdu ZWQgZmxhZ3MsCj4gKwkJCSAgIHVpbnQzMl90ICpmaXJzdF9zaWduYWxlZCk7Cj4gK2ludCBzeW5j b2JqX3RpbWVsaW5lX3dhaXRfZXJyKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90 ICpwb2ludHMsCj4gKwkJCSAgICAgIHVuc2lnbmVkIG51bV9oYW5kbGVzLAo+ICsJCQkgICAgICBp bnQ2NF90IHRpbWVvdXRfbnNlYywgdW5zaWduZWQgZmxhZ3MpOwo+ICB2b2lkIHN5bmNvYmpfcmVz ZXQoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDMyX3QgY291bnQpOwo+ICB2b2lkIHN5 bmNvYmpfc2lnbmFsKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQzMl90IGNvdW50KTsK PiArdm9pZCBzeW5jb2JqX3RpbWVsaW5lX3F1ZXJ5KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMs IHVpbnQ2NF90ICpwb2ludHMsCj4gKwkJCSAgICB1aW50MzJfdCBjb3VudCk7Cj4gK3ZvaWQgc3lu Y29ial9iaW5hcnlfdG9fdGltZWxpbmUoaW50IGZkLCB1aW50MzJfdCB0aW1lbGluZV9oYW5kbGUs Cj4gKwkJCQl1aW50NjRfdCBwb2ludCwgdWludDMyX3QgYmluYXJ5X2hhbmRsZSk7Cj4gK3ZvaWQg c3luY29ial90aW1lbGluZV90b19iaW5hcnkoaW50IGZkLCB1aW50MzJfdCBiaW5hcnlfaGFuZGxl LAo+ICsJCQkJdWludDMyX3QgdGltZWxpbmVfaGFuZGxlLAo+ICsJCQkJdWludDY0X3QgcG9pbnQs Cj4gKwkJCQl1aW50MzJfdCBmbGFncyk7Cj4gK3ZvaWQgc3luY29ial90aW1lbGluZV9zaWduYWwo aW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKnBvaW50cywKPiArCQkJICAgICB1 aW50MzJfdCBjb3VudCk7Cj4gIAo+ICAjZW5kaWYgLyogSUdUX1NZTkNPQkpfSCAqLwo+IGRpZmYg LS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gaW5kZXggNzU1 ZmM5ZTYuLjdlZDQxNDBiIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCj4gKysrIGIv dGVzdHMvbWVzb24uYnVpbGQKPiBAQCAtODIsNiArODIsNyBAQCB0ZXN0X3Byb2dzID0gWwo+ICAJ J3ByaW1lX3ZnZW0nLAo+ICAJJ3N5bmNvYmpfYmFzaWMnLAo+ICAJJ3N5bmNvYmpfd2FpdCcsCj4g Kwknc3luY29ial90aW1lbGluZScsCj4gIAkndGVtcGxhdGUnLAo+ICAJJ3Rvb2xzX3Rlc3QnLAo+ ICAJJ3YzZF9nZXRfYm9fb2Zmc2V0JywKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvc3luY29ial90aW1l bGluZS5jIGIvdGVzdHMvc3luY29ial90aW1lbGluZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMC4uODJmYzA4YWEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdGVzdHMv c3luY29ial90aW1lbGluZS5jCj4gQEAgLTAsMCArMSwxMTUwIEBACj4gKy8qCj4gKyAqIENvcHly aWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh Cj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdh cmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUu Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImlndC5oIgo+ICsjaW5jbHVkZSAic3dfc3luYy5oIgo+ ICsjaW5jbHVkZSAiaWd0X3N5bmNvYmouaCIKPiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ICsjaW5j bHVkZSA8dGltZS5oPgo+ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxwdGhy ZWFkLmg+Cj4gKyNpbmNsdWRlIDxzaWduYWwuaD4KPiArI2luY2x1ZGUgImRybS5oIgo+ICsKPiAr SUdUX1RFU1RfREVTQ1JJUFRJT04oIlRlc3RzIGZvciB0aGUgZHJtIHRpbWVsaW5lIHN5bmMgb2Jq ZWN0IEFQSSIpOwo+ICsKPiArLyogT25lIHRlbnRoIG9mIGEgc2Vjb25kICovCj4gKyNkZWZpbmUg U0hPUlRfVElNRV9OU0VDIDEwMDAwMDAwMHVsbAo+ICsKPiArI2RlZmluZSBOU0VDU19QRVJfU0VD IDEwMDAwMDAwMDB1bGwKPiArCj4gK3N0YXRpYyB1aW50NjRfdAo+ICtnZXR0aW1lX25zKHZvaWQp Cj4gK3sKPiArCXN0cnVjdCB0aW1lc3BlYyBjdXJyZW50Owo+ICsJY2xvY2tfZ2V0dGltZShDTE9D S19NT05PVE9OSUMsICZjdXJyZW50KTsKPiArCXJldHVybiAodWludDY0X3QpY3VycmVudC50dl9z ZWMgKiBOU0VDU19QRVJfU0VDICsgY3VycmVudC50dl9uc2VjOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZAo+ICtzbGVlcF9uc2VjKHVpbnQ2NF90IHRpbWVfbnNlYykKPiArewo+ICsJc3RydWN0IHRp bWVzcGVjIHQ7Cj4gKwl0LnR2X3NlYyA9IHRpbWVfbnNlYyAvIE5TRUNTX1BFUl9TRUM7Cj4gKwl0 LnR2X25zZWMgPSB0aW1lX25zZWMgJSBOU0VDU19QRVJfU0VDOwo+ICsJaWd0X2Fzc2VydF9lcShu YW5vc2xlZXAoJnQsIE5VTEwpLCAwKTsKPiArfQo+ICsKPiArc3RhdGljIHVpbnQ2NF90Cj4gK3No b3J0X3RpbWVvdXQodm9pZCkKPiArewo+ICsJcmV0dXJuIGdldHRpbWVfbnMoKSArIFNIT1JUX1RJ TUVfTlNFQzsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtzeW5jb2JqX2F0dGFjaF9zd19zeW5j KGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBwb2ludCkKPiArewo+ICsJaW50IHRp bWVsaW5lLCBmZW5jZTsKPiArCj4gKwl0aW1lbGluZSA9IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRl KCk7Cj4gKwlmZW5jZSA9IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlX2ZlbmNlKHRpbWVsaW5lLCAx KTsKPiArCj4gKwlpZiAocG9pbnQgPT0gMCkgewo+ICsJCXN5bmNvYmpfaW1wb3J0X3N5bmNfZmls ZShmZCwgaGFuZGxlLCBmZW5jZSk7Cj4gKwl9IGVsc2Ugewo+ICsJCXVpbnQzMl90IHN5bmNvYmog PSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7Cj4gKwo+ICsJCXN5bmNvYmpfaW1wb3J0X3N5bmNfZmls ZShmZCwgc3luY29iaiwgZmVuY2UpOwo+ICsJCXN5bmNvYmpfYmluYXJ5X3RvX3RpbWVsaW5lKGZk LCBoYW5kbGUsIHBvaW50LCBzeW5jb2JqKTsKPiArCQlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNv YmopOwo+ICsJfQo+ICsKPiArCWNsb3NlKGZlbmNlKTsKPiArCj4gKwlyZXR1cm4gdGltZWxpbmU7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3N5bmNvYmpfdHJpZ2dlcihpbnQgZmQsIHVpbnQz Ml90IGhhbmRsZSwgdWludDY0X3QgcG9pbnQpCj4gK3sKPiArCWludCB0aW1lbGluZSA9IHN5bmNv YmpfYXR0YWNoX3N3X3N5bmMoZmQsIGhhbmRsZSwgcG9pbnQpOwo+ICsJc3dfc3luY190aW1lbGlu ZV9pbmModGltZWxpbmUsIDEpOwo+ICsJY2xvc2UodGltZWxpbmUpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdGltZXJfdAo+ICtzZXRfdGltZXIodm9pZCAoKmNiKSh1bmlvbiBzaWd2YWwpLCB2b2lkICpw dHIsIGludCBpLCB1aW50NjRfdCBuc2VjKQo+ICt7Cj4gKyAgICAgICAgdGltZXJfdCB0aW1lcjsK PiArICAgICAgICBzdHJ1Y3Qgc2lnZXZlbnQgc2V2Owo+ICsgICAgICAgIHN0cnVjdCBpdGltZXJz cGVjIGl0czsKPiArCj4gKyAgICAgICAgbWVtc2V0KCZzZXYsIDAsIHNpemVvZihzZXYpKTsKPiAr ICAgICAgICBzZXYuc2lnZXZfbm90aWZ5ID0gU0lHRVZfVEhSRUFEOwo+ICsJaWYgKHB0cikKPiAr CQlzZXYuc2lnZXZfdmFsdWUuc2l2YWxfcHRyID0gcHRyOwo+ICsJZWxzZQo+ICsJCXNldi5zaWdl dl92YWx1ZS5zaXZhbF9pbnQgPSBpOwo+ICsgICAgICAgIHNldi5zaWdldl9ub3RpZnlfZnVuY3Rp b24gPSBjYjsKPiArICAgICAgICBpZ3RfYXNzZXJ0KHRpbWVyX2NyZWF0ZShDTE9DS19NT05PVE9O SUMsICZzZXYsICZ0aW1lcikgPT0gMCk7Cj4gKwo+ICsgICAgICAgIG1lbXNldCgmaXRzLCAwLCBz aXplb2YoaXRzKSk7Cj4gKyAgICAgICAgaXRzLml0X3ZhbHVlLnR2X3NlYyA9IG5zZWMgLyBOU0VD X1BFUl9TRUM7Cj4gKyAgICAgICAgaXRzLml0X3ZhbHVlLnR2X25zZWMgPSBuc2VjICUgTlNFQ19Q RVJfU0VDOwo+ICsgICAgICAgIGlndF9hc3NlcnQodGltZXJfc2V0dGltZSh0aW1lciwgMCwgJml0 cywgTlVMTCkgPT0gMCk7Cj4gKwo+ICsJcmV0dXJuIHRpbWVyOwo+ICt9Cj4gKwo+ICtzdHJ1Y3Qg ZmRfaGFuZGxlX3BhaXIgewo+ICsJaW50IGZkOwo+ICsJdWludDMyX3QgaGFuZGxlOwo+ICsJdWlu dDY0X3QgcG9pbnQ7Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt0aW1lbGluZV9pbmNfZnVu Yyh1bmlvbiBzaWd2YWwgc2lndmFsKQo+ICt7Cj4gKwlzd19zeW5jX3RpbWVsaW5lX2luYyhzaWd2 YWwuc2l2YWxfaW50LCAxKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArc3luY29ial90cmln Z2VyX2ZyZWVfcGFpcl9mdW5jKHVuaW9uIHNpZ3ZhbCBzaWd2YWwpCj4gK3sKPiArCXN0cnVjdCBm ZF9oYW5kbGVfcGFpciAqcGFpciA9IHNpZ3ZhbC5zaXZhbF9wdHI7Cj4gKwlzeW5jb2JqX3RyaWdn ZXIocGFpci0+ZmQsIHBhaXItPmhhbmRsZSwgcGFpci0+cG9pbnQpOwo+ICsJZnJlZShwYWlyKTsK PiArfQo+ICsKPiArc3RhdGljIHRpbWVyX3QKPiArc3luY29ial90cmlnZ2VyX2RlbGF5ZWQoaW50 IGZkLCB1aW50MzJfdCBzeW5jb2JqLCB1aW50NjRfdCBwb2ludCwgdWludDY0X3QgbnNlYykKPiAr ewo+ICsJc3RydWN0IGZkX2hhbmRsZV9wYWlyICpwYWlyID0gbWFsbG9jKHNpemVvZigqcGFpcikp Owo+ICsKPiArCXBhaXItPmZkID0gZmQ7Cj4gKwlwYWlyLT5oYW5kbGUgPSBzeW5jb2JqOwo+ICsJ cGFpci0+cG9pbnQgPSBwb2ludDsKPiArCj4gKwlyZXR1cm4gc2V0X3RpbWVyKHN5bmNvYmpfdHJp Z2dlcl9mcmVlX3BhaXJfZnVuYywgcGFpciwgMCwgbnNlYyk7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBjaGFyICp0ZXN0X3dhaXRfYmFkX2ZsYWdzX2Rlc2MgPQo+ICsJIlZlcmlmaWVzIHRoYXQg YW4gaW52YWxpZCB2YWx1ZSBpbiBkcm1fc3luY29ial90aW1lbGluZV93YWl0OjpmbGFncyBpcyIK PiArCSIgcmVqZWN0ZWQiOwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3dhaXRfYmFkX2ZsYWdzKGlu dCBmZCkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQgd2FpdCA9IHt9 Owo+ICsJd2FpdC5mbGFncyA9IDB4ZGVhZGJlZWY7Cj4gKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29i al90aW1lbGluZV93YWl0X2lvY3RsKGZkLCAmd2FpdCksIC1FSU5WQUwpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3QgY2hhciAqdGVzdF93YWl0X3plcm9faGFuZGxlc19kZXNjID0KPiArCSJWZXJp ZmllcyB0aGF0IHdhaXRpbmcgb24gYW4gZW1wdHkgbGlzdCBvZiBpbnZhbGlkIHN5bmNvYmogaGFu ZGxlcyBpcyIKPiArCSIgcmVqZWN0ZWQiOwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3dhaXRfemVy b19oYW5kbGVzKGludCBmZCkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dh aXQgd2FpdCA9IHt9Owo+ICsJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxpbmVfd2FpdF9p b2N0bChmZCwgJndhaXQpLCAtRUlOVkFMKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIg KnRlc3Rfd2FpdF9pbGxlZ2FsX2hhbmRsZV9kZXNjID0KPiArCSJWZXJpZmllcyB0aGF0IHdhaXRp bmcgb24gYW4gaW52YWxpZCBzeW5jb2JqIGhhbmRsZSBpcyByZWplY3RlZCI7Cj4gK3N0YXRpYyB2 b2lkCj4gK3Rlc3Rfd2FpdF9pbGxlZ2FsX2hhbmRsZShpbnQgZmQpCj4gK3sKPiArCXN0cnVjdCBk cm1fc3luY29ial90aW1lbGluZV93YWl0IHdhaXQgPSB7fTsKPiArCXVpbnQzMl90IGhhbmRsZSA9 IDA7Cj4gKwo+ICsJd2FpdC5jb3VudF9oYW5kbGVzID0gMTsKPiArCXdhaXQuaGFuZGxlcyA9IHRv X3VzZXJfcG9pbnRlcigmaGFuZGxlKTsKPiArCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3RpbWVs aW5lX3dhaXRfaW9jdGwoZmQsICZ3YWl0KSwgLUVOT0VOVCk7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBjaGFyICp0ZXN0X3F1ZXJ5X3plcm9faGFuZGxlc19kZXNjID0KPiArCSJWZXJpZmllcyB0 aGF0IHF1ZXJ5aW5nIGFuIGVtcHR5IGxpc3Qgb2Ygc3luY29iaiBoYW5kbGVzIGlzIHJlamVjdGVk IjsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9xdWVyeV96ZXJvX2hhbmRsZXMoaW50IGZkKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJncyA9IHt9Owo+ICsJaW50 IHJldDsKPiArCj4gKwlyZXQgPSBpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1FVRVJZ LCAmYXJncyk7Cj4gKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSAgRUlOVkFMKTsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKnRlc3RfcXVlcnlfaWxsZWdhbF9oYW5kbGVf ZGVzYyA9Cj4gKwkiVmVyaWZpZXMgdGhhdCBxdWVyeWluZyBhbiBpbnZhbGlkIHN5bmNvYmogaGFu ZGxlIGlzIHJlamVjdGVkIjsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9xdWVyeV9pbGxlZ2FsX2hh bmRsZShpbnQgZmQpCj4gK3sKPiArCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBh cmdzID0ge307Cj4gKwl1aW50MzJfdCBoYW5kbGUgPSAwOwo+ICsJaW50IHJldDsKPiArCj4gKwlh cmdzLmNvdW50X2hhbmRsZXMgPSAxOwo+ICsJYXJncy5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVy KCZoYW5kbGUpOwo+ICsJcmV0ID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9RVUVS WSwgJmFyZ3MpOwo+ICsJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKTsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKnRlc3RfcXVlcnlfb25lX2lsbGVnYWxfaGFu ZGxlX2Rlc2MgPQo+ICsJIlZlcmlmaWVzIHRoYXQgcXVlcnlpbmcgYSBsaXN0IG9mIGludmFsaWQg c3luY29iaiBoYW5kbGUgaW5jbHVkaW5nIGFuIgo+ICsJIiBpbnZhbGlkIG9uZSBpcyByZWplY3Rl ZCI7Cj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3RfcXVlcnlfb25lX2lsbGVnYWxfaGFuZGxlKGludCBm ZCkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFycmF5ID0ge307 Cj4gKwl1aW50MzJfdCBzeW5jb2Jqc1szXTsKPiArCXVpbnQ2NF90IGluaXRpYWxfcG9pbnQgPSAx Owo+ICsJaW50IHJldDsKPiArCj4gKwlzeW5jb2Jqc1swXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAw KTsKPiArCXN5bmNvYmpzWzFdID0gMDsKPiArCXN5bmNvYmpzWzJdID0gc3luY29ial9jcmVhdGUo ZmQsIDApOwo+ICsKPiArCXN5bmNvYmpfdGltZWxpbmVfc2lnbmFsKGZkLCAmc3luY29ianNbMF0s ICZpbml0aWFsX3BvaW50LCAxKTsKPiArCXN5bmNvYmpfdGltZWxpbmVfc2lnbmFsKGZkLCAmc3lu Y29ianNbMl0sICZpbml0aWFsX3BvaW50LCAxKTsKPiArCWlndF9hc3NlcnRfZXEoc3luY29ial90 aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmpzWzBdLAo+ICsJCQkJCQkmaW5pdGlhbF9wb2lu dCwgMSwgMCwgMCksIDApOwo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRf ZXJyKGZkLCAmc3luY29ianNbMl0sCj4gKwkJCQkJCSZpbml0aWFsX3BvaW50LCAxLCAwLCAwKSwg MCk7Cj4gKwo+ICsJYXJyYXkuY291bnRfaGFuZGxlcyA9IDM7Cj4gKwlhcnJheS5oYW5kbGVzID0g dG9fdXNlcl9wb2ludGVyKHN5bmNvYmpzKTsKPiArCXJldCA9IGlndF9pb2N0bChmZCwgRFJNX0lP Q1RMX1NZTkNPQkpfUVVFUlksICZhcnJheSk7Cj4gKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBl cnJubyA9PSBFTk9FTlQpOwo+ICsKPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMF0p Owo+ICsJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1syXSk7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBjaGFyICp0ZXN0X3F1ZXJ5X2JhZF9wYWRfZGVzYyA9Cj4gKwkiVmVyaWZ5IHRoYXQg cXVlcnlpbmcgYSB0aW1lbGluZSBzeW5jb2JqIHdpdGggYW4gaW52YWxpZCIKPiArCSIgZHJtX3N5 bmNvYmpfdGltZWxpbmVfYXJyYXk6OmZsYWdzIGZpZWxkIGlzIHJlamVjdGVkIjsKPiArc3RhdGlj IHZvaWQKPiArdGVzdF9xdWVyeV9iYWRfcGFkKGludCBmZCkKPiArewo+ICsJc3RydWN0IGRybV9z eW5jb2JqX3RpbWVsaW5lX2FycmF5IGFycmF5ID0ge307Cj4gKwl1aW50MzJfdCBoYW5kbGUgPSAw Owo+ICsJaW50IHJldDsKPiArCj4gKwlhcnJheS5mbGFncyA9IDB4ZGVhZGJlZWY7Cj4gKwlhcnJh eS5jb3VudF9oYW5kbGVzID0gMTsKPiArCWFycmF5LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIo JmhhbmRsZSk7Cj4gKwlyZXQgPSBpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1FVRVJZ LCAmYXJyYXkpOwo+ICsJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVkFMKTsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKnRlc3Rfc2lnbmFsX3plcm9faGFuZGxlc19k ZXNjID0KPiArCSJWZXJpZnkgdGhhdCBzaWduYWxpbmcgYW4gZW1wdHkgbGlzdCBvZiBzeW5jb2Jq IGhhbmRsZXMgaXMgcmVqZWN0ZWQiOwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3NpZ25hbF96ZXJv X2hhbmRsZXMoaW50IGZkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJy YXkgYXJncyA9IHt9Owo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBpZ3RfaW9jdGwoZmQsIERS TV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFyZ3MpOwo+ICsJaWd0X2Fzc2VydChy ZXQgPT0gLTEgJiYgZXJybm8gPT0gIEVJTlZBTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBj aGFyICp0ZXN0X3NpZ25hbF9pbGxlZ2FsX2hhbmRsZV9kZXNjID0KPiArCSJWZXJpZnkgdGhhdCBz aWduYWxpbmcgYW4gaW52YWxpZCBzeW5jb2JqIGhhbmRsZSBpcyByZWplY3RlZCI7Cj4gK3N0YXRp YyB2b2lkCj4gK3Rlc3Rfc2lnbmFsX2lsbGVnYWxfaGFuZGxlKGludCBmZCkKPiArewo+ICsJc3Ry dWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFyZ3MgPSB7fTsKPiArCXVpbnQzMl90IGhh bmRsZSA9IDA7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWFyZ3MuY291bnRfaGFuZGxlcyA9IDE7Cj4g KwlhcmdzLmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7Cj4gKwlyZXQgPSBpZ3Rf aW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFyZ3MpOwo+ICsJ aWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQKPiArdGVzdF9zaWduYWxfaWxsZWdhbF9wb2ludChpbnQgZmQpCj4gK3sKPiArCXN0 cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBhcmdzID0ge307Cj4gKwl1aW50MzJfdCBo YW5kbGUgPSAxOwo+ICsJdWludDY0X3QgcG9pbnQgPSAwOwo+ICsJaW50IHJldDsKPiArCj4gKwlh cmdzLmNvdW50X2hhbmRsZXMgPSAxOwo+ICsJYXJncy5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVy KCZoYW5kbGUpOwo+ICsJYXJncy5wb2ludHMgPSB0b191c2VyX3BvaW50ZXIoJnBvaW50KTsKPiAr CXJldCA9IGlndF9pb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfU0lHTkFMLCAm YXJncyk7Cj4gKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqdGVzdF9zaWduYWxfb25lX2lsbGVnYWxfaGFuZGxl X2Rlc2MgPQo+ICsJIlZlcmlmeSB0aGF0IGFuIGludmFsaWQgc3luY29iaiBoYW5kbGUgaW4gZHJt X3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgaXMiCj4gKwkiIHJlamVjdGVkIGZvciBzaWduYWxpbmci Owo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3NpZ25hbF9vbmVfaWxsZWdhbF9oYW5kbGUoaW50IGZk KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJyYXkgPSB7fTsK PiArCXVpbnQzMl90IHN5bmNvYmpzWzNdOwo+ICsJdWludDY0X3QgaW5pdGlhbF9wb2ludCA9IDE7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXN5bmNvYmpzWzBdID0gc3luY29ial9jcmVhdGUoZmQsIDAp Owo+ICsJc3luY29ianNbMV0gPSAwOwo+ICsJc3luY29ianNbMl0gPSBzeW5jb2JqX2NyZWF0ZShm ZCwgMCk7Cj4gKwo+ICsJc3luY29ial90aW1lbGluZV9zaWduYWwoZmQsICZzeW5jb2Jqc1swXSwg JmluaXRpYWxfcG9pbnQsIDEpOwo+ICsJc3luY29ial90aW1lbGluZV9zaWduYWwoZmQsICZzeW5j b2Jqc1syXSwgJmluaXRpYWxfcG9pbnQsIDEpOwo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3Rp bWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29ianNbMF0sCj4gKwkJCQkJCSZpbml0aWFsX3BvaW50 LCAxLCAwLCAwKSwgMCk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9l cnIoZmQsICZzeW5jb2Jqc1syXSwKPiArCQkJCQkJJmluaXRpYWxfcG9pbnQsIDEsIDAsIDApLCAw KTsKPiArCj4gKwlhcnJheS5jb3VudF9oYW5kbGVzID0gMzsKPiArCWFycmF5LmhhbmRsZXMgPSB0 b191c2VyX3BvaW50ZXIoc3luY29ianMpOwo+ICsJcmV0ID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9D VExfU1lOQ09CSl9USU1FTElORV9TSUdOQUwsICZhcnJheSk7Cj4gKwlpZ3RfYXNzZXJ0KHJldCA9 PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpOwo+ICsKPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3lu Y29ianNbMF0pOwo+ICsJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1syXSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0X3NpZ25hbF9iYWRfcGFkX2Rlc2MgPQo+ICsJIlZl cmlmaWVzIHRoYXQgYW4gaW52YWxpZCB2YWx1ZSBpbiBkcm1fc3luY29ial90aW1lbGluZV9hcnJh eS5mbGFncyBpcyIKPiArCSIgcmVqZWN0ZWQiOwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3NpZ25h bF9iYWRfcGFkKGludCBmZCkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2Fy cmF5IGFycmF5ID0ge307Cj4gKwl1aW50MzJfdCBoYW5kbGUgPSAwOwo+ICsJaW50IHJldDsKPiAr Cj4gKwlhcnJheS5mbGFncyA9IDB4ZGVhZGJlZWY7Cj4gKwlhcnJheS5jb3VudF9oYW5kbGVzID0g MTsKPiArCWFycmF5LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7Cj4gKwlyZXQg PSBpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFycmF5 KTsKPiArCWlndF9hc3NlcnQocmV0ID09IC0xICYmIGVycm5vID09IEVJTlZBTCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0X3NpZ25hbF9hcnJheV9kZXNjID0KPiArCSJWZXJp ZmllcyB0aGUgc2lnbmFsaW5nIG9mIGEgbGlzdCBvZiB0aW1lbGluZSBzeW5jb2JqIjsKPiArc3Rh dGljIHZvaWQKPiArdGVzdF9zaWduYWxfYXJyYXkoaW50IGZkKQo+ICt7Cj4gKwl1aW50MzJfdCBz eW5jb2Jqc1s0XTsKPiArCXVpbnQ2NF90IHBvaW50c1s0XSA9IHsxLCAxLCAxLCAwfTsKPiArCj4g KwlzeW5jb2Jqc1swXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKPiArCXN5bmNvYmpzWzFdID0g c3luY29ial9jcmVhdGUoZmQsIDApOwo+ICsJc3luY29ianNbMl0gPSBzeW5jb2JqX2NyZWF0ZShm ZCwgMCk7Cj4gKwlzeW5jb2Jqc1szXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKPiArCj4gKwlz eW5jb2JqX3RpbWVsaW5lX3NpZ25hbChmZCwgc3luY29ianMsIHBvaW50cywgNCk7Cj4gKwlpZ3Rf YXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsIHN5bmNvYmpzLAo+ICsJCQkJ CQlwb2ludHMsIDMsIDAsIDApLCAwKTsKPiArCWlndF9hc3NlcnRfZXEoc3luY29ial93YWl0X2Vy cihmZCwgJnN5bmNvYmpzWzNdLCAxLCAwLCAwKSwgMCk7Cj4gKwo+ICsJc3luY29ial9kZXN0cm95 KGZkLCBzeW5jb2Jqc1swXSk7Cj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzFdKTsK PiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMl0pOwo+ICsJc3luY29ial9kZXN0cm95 KGZkLCBzeW5jb2Jqc1szXSk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0X3Ry YW5zZmVyX2lsbGVnYWxfaGFuZGxlX2Rlc2MgPQo+ICsJIlZlcmlmaWVzIHRoYXQgYW4gaW52YWxp ZCBzeW5jb2JqIGhhbmRsZSBpcyByZWplY3RlZCBpbiIKPiArCSIgZHJtX3N5bmNvYmpfdHJhbnNm ZXIiOwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3RyYW5zZmVyX2lsbGVnYWxfaGFuZGxlKGludCBm ZCkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RyYW5zZmVyIGFyZ3MgPSB7fTsKPiArCXVp bnQzMl90IGhhbmRsZSA9IDA7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWFyZ3Muc3JjX2hhbmRsZSA9 IHRvX3VzZXJfcG9pbnRlcigmaGFuZGxlKTsKPiArCWFyZ3MuZHN0X2hhbmRsZSA9IHRvX3VzZXJf cG9pbnRlcigmaGFuZGxlKTsKPiArCWFyZ3Muc3JjX3BvaW50ID0gMTsKPiArCWFyZ3MuZHN0X3Bv aW50ID0gMDsKPiArCXJldCA9IGlndF9pb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVFJBTlNG RVIsICZhcmdzKTsKPiArCWlndF9hc3NlcnQocmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCk7 Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0X3RyYW5zZmVyX2JhZF9wYWRfZGVz YyA9Cj4gKwkiVmVyaWZpZXMgdGhhdCBpbnZhbGlkIGRybV9zeW5jb2JqX3RyYW5zZmVyOjpwYWQg ZmllbGQgdmFsdWUgaXMiCj4gKwkiIHJlamVjdGVkIjsKPiArc3RhdGljIHZvaWQKPiArdGVzdF90 cmFuc2Zlcl9iYWRfcGFkKGludCBmZCkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RyYW5z ZmVyIGFyZyA9IHt9Owo+ICsJdWludDMyX3QgaGFuZGxlID0gMDsKPiArCWludCByZXQ7Cj4gKwo+ ICsJYXJnLnBhZCA9IDB4ZGVhZGJlZWY7Cj4gKwlhcmcuc3JjX2hhbmRsZSA9IHRvX3VzZXJfcG9p bnRlcigmaGFuZGxlKTsKPiArCWFyZy5kc3RfaGFuZGxlID0gdG9fdXNlcl9wb2ludGVyKCZoYW5k bGUpOwo+ICsJcmV0ID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9UUkFOU0ZFUiwg JmFyZyk7Cj4gKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5WQUwpOwo+ICt9 Cj4gKwo+ICsjZGVmaW5lIFdBSVRfRk9SX1NVQk1JVAkJKDEgPDwgMCkKPiArI2RlZmluZSBXQUlU X0FMTAkJKDEgPDwgMSkKPiArI2RlZmluZSBXQUlUX0FWQUlMQUJMRQkJKDEgPDwgMikKPiArI2Rl ZmluZSBXQUlUX1VOU1VCTUlUVEVECSgxIDw8IDMpCj4gKyNkZWZpbmUgV0FJVF9TVUJNSVRURUQJ CSgxIDw8IDQpCj4gKyNkZWZpbmUgV0FJVF9TSUdOQUxFRAkJKDEgPDwgNSkKPiArI2RlZmluZSBX QUlUX0ZMQUdTX01BWAkJKDEgPDwgNikgLSAxCj4gKwo+ICtzdGF0aWMgdWludDMyX3QKPiArZmxh Z3NfZm9yX3Rlc3RfZmxhZ3ModWludDMyX3QgdGVzdF9mbGFncykKPiArewo+ICsJdWludDMyX3Qg ZmxhZ3MgPSAwOwo+ICsKPiArCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKQo+ICsJ CWZsYWdzIHw9IERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlUOwo+ICsKPiAr CWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9BVkFJTEFCTEUpCj4gKwkJZmxhZ3MgfD0gRFJNX1NZTkNP QkpfV0FJVF9GTEFHU19XQUlUX0FWQUlMQUJMRTsKPiArCj4gKwlpZiAodGVzdF9mbGFncyAmIFdB SVRfQUxMKQo+ICsJCWZsYWdzIHw9IERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9BTEw7Cj4g Kwo+ICsJcmV0dXJuIGZsYWdzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqdGVzdF9z aWduYWxfd2FpdF9kZXNjID0KPiArCSJWZXJpZmllcyB3YWl0IGJlaGF2aW9yIG9uIGEgc2luZ2xl IHRpbWVsaW5lIHN5bmNvYmoiOwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3NpbmdsZV93YWl0KGlu dCBmZCwgdWludDMyX3QgdGVzdF9mbGFncywgaW50IGV4cGVjdCkKPiArewo+ICsJdWludDMyX3Qg c3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKPiArCXVpbnQzMl90IGZsYWdzID0gZmxh Z3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7Cj4gKwl1aW50NjRfdCBwb2ludCA9IDE7Cj4g KwlpbnQgdGltZWxpbmUgPSAtMTsKPiArCj4gKwlpZiAodGVzdF9mbGFncyAmIChXQUlUX1NVQk1J VFRFRCB8IFdBSVRfU0lHTkFMRUQpKQo+ICsJCXRpbWVsaW5lID0gc3luY29ial9hdHRhY2hfc3df c3luYyhmZCwgc3luY29iaiwgcG9pbnQpOwo+ICsKPiArCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9T SUdOQUxFRCkKPiArCQlzd19zeW5jX3RpbWVsaW5lX2luYyh0aW1lbGluZSwgMSk7Cj4gKwo+ICsJ aWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBv aW50LCAxLAo+ICsJCQkJCQkwLCBmbGFncyksIGV4cGVjdCk7Cj4gKwo+ICsJaWd0X2Fzc2VydF9l cShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LCAxLAo+ICsJ CQkJCQlzaG9ydF90aW1lb3V0KCksIGZsYWdzKSwgZXhwZWN0KTsKPiArCj4gKwlpZiAoZXhwZWN0 ICE9IC1FVElNRSkgewo+ICsJCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2Vy cihmZCwgJnN5bmNvYmosICZwb2ludCwgMSwKPiArCQkJCQkJCVVJTlQ2NF9NQVgsIGZsYWdzKSwg ZXhwZWN0KTsKPiArCX0KPiArCj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOwo+ICsJ aWYgKHRpbWVsaW5lICE9IC0xKQo+ICsJCWNsb3NlKHRpbWVsaW5lKTsKPiArfQo+ICsKPiArc3Rh dGljIGNvbnN0IGNoYXIgKnRlc3Rfd2FpdF9kZWxheWVkX3NpZ25hbF9kZXNjID0KPiArCSJWZXJp ZmllcyB3YWl0IGJlaGF2aW9yIG9uIGEgdGltZWxpbmUgc3luY29iaiB3aXRoIGEgZGVsYXllZCBz aWduYWwiCj4gKwkiIGZyb20gYSBkaWZmZXJlbnQgdGhyZWFkIjsKPiArc3RhdGljIHZvaWQKPiAr dGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFsKGludCBmZCwgdWludDMyX3QgdGVzdF9mbGFncykKPiAr ewo+ICsJdWludDMyX3Qgc3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKPiArCXVpbnQz Ml90IGZsYWdzID0gZmxhZ3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7Cj4gKwl1aW50NjRf dCBwb2ludCA9IDE7Cj4gKwlpbnQgdGltZWxpbmUgPSAtMTsKPiArCXRpbWVyX3QgdGltZXI7Cj4g Kwo+ICsJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpIHsKPiArCQl0aW1lciA9IHN5 bmNvYmpfdHJpZ2dlcl9kZWxheWVkKGZkLCBzeW5jb2JqLCBwb2ludCwgU0hPUlRfVElNRV9OU0VD KTsKPiArCX0gZWxzZSB7Cj4gKwkJdGltZWxpbmUgPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZk LCBzeW5jb2JqLCBwb2ludCk7Cj4gKwkJdGltZXIgPSBzZXRfdGltZXIodGltZWxpbmVfaW5jX2Z1 bmMsIE5VTEwsCj4gKwkJCQkgIHRpbWVsaW5lLCBTSE9SVF9USU1FX05TRUMpOwo+ICsJfQo+ICsK PiArCWlndF9hc3NlcnQoc3luY29ial90aW1lbGluZV93YWl0KGZkLCAmc3luY29iaiwgJnBvaW50 LCAxLAo+ICsJCQkJZ2V0dGltZV9ucygpICsgU0hPUlRfVElNRV9OU0VDICogMiwKPiArCQkJCWZs YWdzLCBOVUxMKSk7Cj4gKwo+ICsJdGltZXJfZGVsZXRlKHRpbWVyKTsKPiArCj4gKwlpZiAodGlt ZWxpbmUgIT0gLTEpCj4gKwkJY2xvc2UodGltZWxpbmUpOwo+ICsKPiArCXN5bmNvYmpfZGVzdHJv eShmZCwgc3luY29iaik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0X3Jlc2V0 X3Vuc2lnbmFsZWRfZGVzYyA9Cj4gKwkiVmVyaWZpZXMgYmVoYXZpb3Igb2YgYSByZXNldCBvcGVy YXRpb24gb24gYW4gdW5zaWduYWxlZCB0aW1lbGluZSIKPiArCSIgc3luY29iaiI7Cj4gK3N0YXRp YyB2b2lkCj4gK3Rlc3RfcmVzZXRfdW5zaWduYWxlZChpbnQgZmQpCj4gK3sKPiArCXVpbnQzMl90 IHN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7Cj4gKwl1aW50NjRfdCBwb2ludCA9IDE7 Cj4gKwo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3lu Y29iaiwgJnBvaW50LAo+ICsJCQkJCQkxLCAwLCAwKSwgLUVJTlZBTCk7Cj4gKwo+ICsJc3luY29i al9yZXNldChmZCwgJnN5bmNvYmosIDEpOwo+ICsKPiArCWlndF9hc3NlcnRfZXEoc3luY29ial90 aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2ludCwKPiArCQkJCQkJMSwgMCwgMCks IC1FSU5WQUwpOwo+ICsKPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29iaik7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0X3Jlc2V0X3NpZ25hbGVkX2Rlc2MgPQo+ICsJIlZl cmlmaWVzIGJlaGF2aW9yIG9mIGEgcmVzZXQgb3BlcmF0aW9uIG9uIGEgc2lnbmFsZWQgdGltZWxp bmUgc3luY29iaiI7Cj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3RfcmVzZXRfc2lnbmFsZWQoaW50IGZk KQo+ICt7Cj4gKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUoZmQsIDApOwo+ICsJ dWludDY0X3QgcG9pbnQgPSAxOwo+ICsKPiArCXN5bmNvYmpfdHJpZ2dlcihmZCwgc3luY29iaiwg cG9pbnQpOwo+ICsKPiArCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2Vycihm ZCwgJnN5bmNvYmosICZwb2ludCwKPiArCQkJCQkJMSwgMCwgMCksIDApOwo+ICsKPiArCXN5bmNv YmpfcmVzZXQoZmQsICZzeW5jb2JqLCAxKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpf dGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsCj4gKwkJCQkJCTEsIDAsIDAp LCAtRUlOVkFMKTsKPiArCj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgY29uc3QgY2hhciAqdGVzdF9yZXNldF9tdWx0aXBsZV9zaWduYWxlZF9kZXNj ID0KPiArCSJWZXJpZmllcyBiZWhhdmlvciBvZiBhIHJlc2V0IG9wZXJhdGlvbiBvbiBhIGxpc3Qg b2Ygc2lnbmFsZWQgdGltZWxpbmUiCj4gKwkiIHN5bmNvYmpzIjsKPiArc3RhdGljIHZvaWQKPiAr dGVzdF9yZXNldF9tdWx0aXBsZV9zaWduYWxlZChpbnQgZmQpCj4gK3sKPiArCXVpbnQ2NF90IHBv aW50c1szXSA9IHsxLCAxLCAxfTsKPiArCXVpbnQzMl90IHN5bmNvYmpzWzNdOwo+ICsJaW50IGk7 Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewo+ICsJCXN5bmNvYmpzW2ldID0gc3lu Y29ial9jcmVhdGUoZmQsIDApOwo+ICsJCXN5bmNvYmpfdHJpZ2dlcihmZCwgc3luY29ianNbaV0s IHBvaW50c1tpXSk7Cj4gKwl9Cj4gKwo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5l X3dhaXRfZXJyKGZkLCBzeW5jb2JqcywgcG9pbnRzLCAzLCAwLCAwKSwgMCk7Cj4gKwo+ICsJc3lu Y29ial9yZXNldChmZCwgc3luY29ianMsIDMpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCAzOyBp KyspIHsKPiArCQlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZz eW5jb2Jqc1tpXSwKPiArCQkJCQkJCSZwb2ludHNbaV0sIDEsCj4gKwkJCQkJCQkwLCAwKSwgLUVJ TlZBTCk7Cj4gKwkJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1tpXSk7Cj4gKwl9Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkCj4gK3Jlc2V0X2FuZF90cmlnZ2VyX2Z1bmModW5pb24gc2lndmFs IHNpZ3ZhbCkKPiArewo+ICsJc3RydWN0IGZkX2hhbmRsZV9wYWlyICpwYWlyID0gc2lndmFsLnNp dmFsX3B0cjsKPiArCXN5bmNvYmpfcmVzZXQocGFpci0+ZmQsICZwYWlyLT5oYW5kbGUsIDEpOwo+ ICsJc3luY29ial90cmlnZ2VyKHBhaXItPmZkLCBwYWlyLT5oYW5kbGUsIHBhaXItPnBvaW50KTsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKnRlc3RfcmVzZXRfZHVyaW5nX3dhaXRfZm9y X3N1Ym1pdF9kZXNjID0KPiArCSJWZXJpZmllcyBiZWhhdmlvciBvZiBhIHJlc2V0IG9wZXJhdGlv biBhIHRpbWVsaW5lIHN5bmNvYmogd2hpbGUgd2FpdCIKPiArCSIgb3BlcmF0aW9uIGlzIG9uZ29p bmciOwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3Jlc2V0X2R1cmluZ193YWl0X2Zvcl9zdWJtaXQo aW50IGZkKQo+ICt7Cj4gKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUoZmQsIDAp Owo+ICsJdWludDMyX3QgZmxhZ3MgPSBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfRk9SX1NV Qk1JVDsKPiArCXN0cnVjdCBmZF9oYW5kbGVfcGFpciBwYWlyOwo+ICsJdWludDY0X3QgcG9pbnQg PSAxOwo+ICsJdGltZXJfdCB0aW1lcjsKPiArCj4gKwlwYWlyLmZkID0gZmQ7Cj4gKwlwYWlyLmhh bmRsZSA9IHN5bmNvYmo7Cj4gKwl0aW1lciA9IHNldF90aW1lcihyZXNldF9hbmRfdHJpZ2dlcl9m dW5jLCAmcGFpciwgMCwgU0hPUlRfVElNRV9OU0VDKTsKPiArCj4gKwkvKiBBIHJlc2V0IHNob3Vs ZCBiZSBhIG5vLW9wIGV2ZW4gaWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdhaXQgKi8KPiAr CWlndF9hc3NlcnQoc3luY29ial90aW1lbGluZV93YWl0KGZkLCAmc3luY29iaiwgJnBvaW50LCAx LAo+ICsJCQkJZ2V0dGltZV9ucygpICsgU0hPUlRfVElNRV9OU0VDICogMiwKPiArCQkJCWZsYWdz LCBOVUxMKSk7Cj4gKwo+ICsJdGltZXJfZGVsZXRlKHRpbWVyKTsKPiArCj4gKwlzeW5jb2JqX2Rl c3Ryb3koZmQsIHN5bmNvYmopOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqdGVzdF9z aWduYWxfZGVzYyA9Cj4gKwkiVmVyaWZpZXMgYmFzaWMgc2lnbmFsaW5nIG9mIGEgdGltZWxpbmUg c3luY29iaiI7Cj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3Rfc2lnbmFsKGludCBmZCkKPiArewo+ICsJ dWludDMyX3Qgc3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKPiArCXVpbnQzMl90IGZs YWdzID0gRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0ZPUl9TVUJNSVQ7Cj4gKwl1aW50NjRf dCBwb2ludCA9IDE7Cj4gKwo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRf ZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LAo+ICsJCQkJCQkxLCAwLCAwKSwgLUVJTlZBTCk7Cj4g KwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAm cG9pbnQsCj4gKwkJCQkJCTEsIDAsIGZsYWdzKSwgLUVUSU1FKTsKPiArCj4gKwlzeW5jb2JqX3Rp bWVsaW5lX3NpZ25hbChmZCwgJnN5bmNvYmosICZwb2ludCwgMSk7Cj4gKwo+ICsJaWd0X2Fzc2Vy dChzeW5jb2JqX3RpbWVsaW5lX3dhaXQoZmQsICZzeW5jb2JqLCAmcG9pbnQsIDEsIDAsIDAsIE5V TEwpKTsKPiArCWlndF9hc3NlcnQoc3luY29ial90aW1lbGluZV93YWl0KGZkLCAmc3luY29iaiwg JnBvaW50LCAxLCAwLCBmbGFncywgTlVMTCkpOwo+ICsKPiArCXN5bmNvYmpfZGVzdHJveShmZCwg c3luY29iaik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0X211bHRpX3dhaXRf ZGVzYyA9Cj4gKwkiVmVyaWZpZXMgd2FpdGluZyBvbiBhIGxpc3Qgb2YgdGltZWxpbmUgc3luY29i anMiOwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X211bHRpX3dhaXQoaW50IGZkLCB1aW50MzJfdCB0 ZXN0X2ZsYWdzLCBpbnQgZXhwZWN0KQo+ICt7Cj4gKwl1aW50MzJfdCB0ZmxhZywgZmxhZ3M7Cj4g KwlpbnQgaSwgZmlkeCwgdGltZWxpbmU7Cj4gKwl1aW50NjRfdCBwb2ludHNbNV0gPSB7Cj4gKwkJ MSArIHJhbmQoKSAlIDEwMDAsCj4gKwkJMCwgLyogbm9uIHRpbWVsaW5lIHN5bmNvYmogKi8KPiAr CQkxICsgcmFuZCgpICUgMTAwMCwKPiArCQkxICsgcmFuZCgpICUgMTAwMCwKPiArCQkwLCAvKiBu b24gdGltZWxpbmUgc3luY29iaiAqLwo+ICsJfTsKPiArCXVpbnQzMl90IHN5bmNvYmpzW0FSUkFZ X1NJWkUocG9pbnRzKV07Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG9pbnRz KTsgaSsrKQo+ICsJCXN5bmNvYmpzW2ldID0gc3luY29ial9jcmVhdGUoZmQsIDApOwo+ICsKPiAr CWZsYWdzID0gZmxhZ3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7Cj4gKwl0ZXN0X2ZsYWdz ICY9IH4oV0FJVF9BTEwgfCBXQUlUX0ZPUl9TVUJNSVQgfCBXQUlUX0FWQUlMQUJMRSk7Cj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG9pbnRzKTsgaSsrKSB7Cj4gKwkJZmlkeCA9 IGZmcyh0ZXN0X2ZsYWdzKSAtIDE7Cj4gKwkJdGZsYWcgPSAoMSA8PCBmaWR4KTsKPiArCj4gKwkJ aWYgKHRlc3RfZmxhZ3MgJiB+dGZsYWcpCj4gKwkJCXRlc3RfZmxhZ3MgJj0gfnRmbGFnOwo+ICsK PiArCQlpZiAodGZsYWcgJiAoV0FJVF9TVUJNSVRURUQgfCBXQUlUX1NJR05BTEVEKSkgewo+ICsJ CQl0aW1lbGluZSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmpzW2ldLAo+ICsJ CQkJCQkJICBwb2ludHNbaV0pOwo+ICsJCX0KPiArCQlpZiAodGZsYWcgJiBXQUlUX1NJR05BTEVE KQo+ICsJCQlzd19zeW5jX3RpbWVsaW5lX2luYyh0aW1lbGluZSwgMSk7Cj4gKwl9Cj4gKwo+ICsJ aWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCBzeW5jb2JqcywKPiAr CQkJCQkJcG9pbnRzLCBBUlJBWV9TSVpFKHBvaW50cyksCj4gKwkJCQkJCTAsIGZsYWdzKSwgZXhw ZWN0KTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQs IHN5bmNvYmpzLAo+ICsJCQkJCQlwb2ludHMsIEFSUkFZX1NJWkUocG9pbnRzKSwKPiArCQkJCQkJ c2hvcnRfdGltZW91dCgpLAo+ICsJCQkJCQlmbGFncyksIGV4cGVjdCk7Cj4gKwo+ICsJaWYgKGV4 cGVjdCAhPSAtRVRJTUUpIHsKPiArCQlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2Fp dF9lcnIoZmQsIHN5bmNvYmpzLAo+ICsJCQkJCQkJcG9pbnRzLCBBUlJBWV9TSVpFKHBvaW50cyks Cj4gKwkJCQkJCQlVSU5UNjRfTUFYLAo+ICsJCQkJCQkJZmxhZ3MpLCBleHBlY3QpOwo+ICsJfQo+ ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBvaW50cyk7IGkrKykKPiArCQlzeW5j b2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzW2ldKTsKPiArfQo+ICsKPiArc3RydWN0IHdhaXRfdGhy ZWFkX2RhdGEgewo+ICsJaW50IGZkOwo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dh aXQgd2FpdDsKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkICoKPiArd2FpdF90aHJlYWRfZnVuYyh2 b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3Qgd2FpdF90aHJlYWRfZGF0YSAqd2FpdCA9IGRhdGE7 Cj4gKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0X2lvY3RsKHdhaXQtPmZk LCAmd2FpdC0+d2FpdCksIDApOwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBjaGFyICp0ZXN0X3dhaXRfc25hcHNob3RfZGVzYyA9Cj4gKwkiVmVyaWZpZXMgd2FpdGlu ZyBvbiBhIGxpc3Qgb2YgdGltZWxpbmUgc3luY29ianMgd2l0aCBkaWZmZXJlbnQgdGhyZWFkIgo+ ICsJIiBmb3Igd2FpdC9zaWduYWwiOwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3dhaXRfc25hcHNo b3QoaW50IGZkLCB1aW50MzJfdCB0ZXN0X2ZsYWdzKQo+ICt7Cj4gKwlzdHJ1Y3Qgd2FpdF90aHJl YWRfZGF0YSB3YWl0ID0ge307Cj4gKwl1aW50MzJfdCBzeW5jb2Jqc1syXTsKPiArCXVpbnQ2NF90 IHBvaW50c1syXSA9IHsxLCAxfTsKPiArCWludCB0aW1lbGluZXNbM10gPSB7IC0xLCAtMSwgLTEg fTsKPiArCXB0aHJlYWRfdCB0aHJlYWQ7Cj4gKwo+ICsJc3luY29ianNbMF0gPSBzeW5jb2JqX2Ny ZWF0ZShmZCwgMCk7Cj4gKwlzeW5jb2Jqc1sxXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKPiAr Cj4gKwlpZiAoISh0ZXN0X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSkgewo+ICsJCXRpbWVsaW5l c1swXSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmpzWzBdLCBwb2ludHNbMF0p Owo+ICsJCXRpbWVsaW5lc1sxXSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmpz WzFdLCBwb2ludHNbMV0pOwo+ICsJfQo+ICsKPiArCXdhaXQuZmQgPSBmZDsKPiArCXdhaXQud2Fp dC5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKHN5bmNvYmpzKTsKPiArCXdhaXQud2FpdC5jb3Vu dF9oYW5kbGVzID0gMjsKPiArCXdhaXQud2FpdC5wb2ludHMgPSB0b191c2VyX3BvaW50ZXIocG9p bnRzKTsKPiArCXdhaXQud2FpdC50aW1lb3V0X25zZWMgPSBzaG9ydF90aW1lb3V0KCk7Cj4gKwl3 YWl0LndhaXQuZmxhZ3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0X2ZsYWdzKTsKPiArCj4g KwlpZ3RfYXNzZXJ0X2VxKHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWQsIE5VTEwsIHdhaXRfdGhyZWFk X2Z1bmMsICZ3YWl0KSwgMCk7Cj4gKwo+ICsJc2xlZXBfbnNlYyhTSE9SVF9USU1FX05TRUMgLyA1 KTsKPiArCj4gKwkvKiBUcnkgdG8gZmFrZSB0aGUga2VybmVsIG91dCBieSB0cmlnZ2VyaW5nIG9y IHBhcnRpYWxseSB0cmlnZ2VyaW5nCj4gKwkgKiB0aGUgZmlyc3QgZmVuY2UuCj4gKwkgKi8KPiAr CWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9BTEwpIHsKPiArCQkvKiBJZiBpdCdzIFdBSVRfQUxMLCBh Y3R1YWxseSB0cmlnZ2VyIGl0ICovCj4gKwkJaWYgKHRpbWVsaW5lc1swXSA9PSAtMSkKPiArCQkJ c3luY29ial90cmlnZ2VyKGZkLCBzeW5jb2Jqc1swXSwgcG9pbnRzWzBdKTsKPiArCQllbHNlCj4g KwkJCXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lc1swXSwgMSk7Cj4gKwl9IGVsc2UgaWYg KHRlc3RfZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpIHsKPiArCQl0aW1lbGluZXNbMF0gPSBzeW5j b2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1swXSwgcG9pbnRzWzBdKTsKPiArCX0KPiAr Cj4gKwlzbGVlcF9uc2VjKFNIT1JUX1RJTUVfTlNFQyAvIDUpOwo+ICsKPiArCS8qIFRoZW4gcmVz ZXQgaXQgKi8KPiArCXN5bmNvYmpfcmVzZXQoZmQsICZzeW5jb2Jqc1swXSwgMSk7Cj4gKwo+ICsJ c2xlZXBfbnNlYyhTSE9SVF9USU1FX05TRUMgLyA1KTsKPiArCj4gKwkvKiBUaGVuICJzdWJtaXQi IGl0IGluIGEgd2F5IHRoYXQgd2lsbCBuZXZlciB0cmlnZ2VyLiAgVGhpcyB3YXksIGlmCj4gKwkg KiB0aGUga2VybmVsIHBpY2tzIHVwIG9uIHRoZSBuZXcgZmVuY2UgKGl0IHNob3VsZG4ndCksIHdl J2xsIGdldCBhCj4gKwkgKiB0aW1lb3V0Lgo+ICsJICovCj4gKwl0aW1lbGluZXNbMl0gPSBzeW5j b2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1swXSwgcG9pbnRzWzBdKTsKPiArCj4gKwlz bGVlcF9uc2VjKFNIT1JUX1RJTUVfTlNFQyAvIDUpOwo+ICsKPiArCS8qIE5vdyB0cmlnZ2VyIHRo ZSBzZWNvbmQgZmVuY2UgdG8gY29tcGxldGUgdGhlIHdhaXQgKi8KPiArCj4gKwlpZiAodGltZWxp bmVzWzFdID09IC0xKQo+ICsJCXN5bmNvYmpfdHJpZ2dlcihmZCwgc3luY29ianNbMV0sIHBvaW50 c1sxXSk7Cj4gKwllbHNlCj4gKwkJc3dfc3luY190aW1lbGluZV9pbmModGltZWxpbmVzWzFdLCAx KTsKPiArCj4gKwlwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKPiArCj4gKwlpZiAoISh0ZXN0 X2ZsYWdzICYgV0FJVF9BTEwpKQo+ICsJCWlndF9hc3NlcnRfZXEod2FpdC53YWl0LmZpcnN0X3Np Z25hbGVkLCAxKTsKPiArCj4gKwljbG9zZSh0aW1lbGluZXNbMF0pOwo+ICsJY2xvc2UodGltZWxp bmVzWzFdKTsKPiArCWNsb3NlKHRpbWVsaW5lc1syXSk7Cj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQs IHN5bmNvYmpzWzBdKTsKPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMV0pOwo+ICt9 Cj4gKwo+ICsvKiBUaGUgbnVtYmVycyAwLTcsIGVhY2ggcmVwZWF0ZWQgNXggYW5kIHNodWZmbGVk LiAqLwo+ICtzdGF0aWMgY29uc3QgdW5zaWduZWQgc2h1ZmZsZWRfMF83X3g0W10gPSB7Cj4gKwky LCAwLCA2LCAxLCAxLCA0LCA1LCAyLCAwLCA3LCAxLCA3LCA2LCAzLCA0LCA1LAo+ICsJMCwgMiwg NywgMywgNSwgNCwgMCwgNiwgNywgMywgMiwgNSwgNiwgMSwgNCwgMywKPiArfTsKPiArCj4gK2Vu dW0gc3luY29ial9zdGFnZSB7Cj4gKwlTVEFHRV9VTlNVQk1JVFRFRCwKPiArCVNUQUdFX1NVQk1J VFRFRCwKPiArCVNUQUdFX1NJR05BTEVELAo+ICsJU1RBR0VfUkVTRVQsCj4gKwlTVEFHRV9SRVNV Qk1JVFRFRCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0X3dhaXRfY29tcGxl eF9kZXNjID0KPiArCSJWZXJpZmllcyB0aW1lbGluZSBzeW5jb2JqIGF0IGRpZmZlcmVudCBzaWdu YWwvb3BlcmF0aW9ucyBzdGFnZXMgJiIKPiArCSIgYmV0d2VlbiBkaWZmZXJlbnQgdGhyZWFkcy4i Owo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3dhaXRfY29tcGxleChpbnQgZmQsIHVpbnQzMl90IHRl c3RfZmxhZ3MpCj4gK3sKPiArCXN0cnVjdCB3YWl0X3RocmVhZF9kYXRhIHdhaXQgPSB7fTsKPiAr CXVpbnQzMl90IHN5bmNvYmpzWzhdOwo+ICsJdWludDY0X3QgcG9pbnRzWzhdID0gezEsIDEsIDEs IDEsIDEsIDEsIDEsIDF9Owo+ICsJZW51bSBzeW5jb2JqX3N0YWdlIHN0YWdlWzhdOwo+ICsJaW50 IGksIGosIHRpbWVsaW5lc1s4XTsKPiArCXVpbnQzMl90IGZpcnN0X3NpZ25hbGVkID0gLTEsIG51 bV9zaWduYWxlZCA9IDA7Cj4gKwlwdGhyZWFkX3QgdGhyZWFkOwo+ICsKPiArCWZvciAoaSA9IDA7 IGkgPCA4OyBpKyspIHsKPiArCQlzdGFnZVtpXSA9IFNUQUdFX1VOU1VCTUlUVEVEOwo+ICsJCXN5 bmNvYmpzW2ldID0gc3luY29ial9jcmVhdGUoZmQsIDApOwo+ICsJfQo+ICsKPiArCWlmICh0ZXN0 X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykK PiArCQkJdGltZWxpbmVzW2ldID0gLTE7Cj4gKwl9IGVsc2Ugewo+ICsJCWZvciAoaSA9IDA7IGkg PCA4OyBpKyspCj4gKwkJCXRpbWVsaW5lc1tpXSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQs IHN5bmNvYmpzW2ldLAo+ICsJCQkJCQkJICAgICAgcG9pbnRzW2ldKTsKPiArCX0KPiArCj4gKwl3 YWl0LmZkID0gZmQ7Cj4gKwl3YWl0LndhaXQuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcihzeW5j b2Jqcyk7Cj4gKwl3YWl0LndhaXQuY291bnRfaGFuZGxlcyA9IDI7Cj4gKwl3YWl0LndhaXQucG9p bnRzID0gdG9fdXNlcl9wb2ludGVyKHBvaW50cyk7Cj4gKwl3YWl0LndhaXQudGltZW91dF9uc2Vj ID0gZ2V0dGltZV9ucygpICsgTlNFQ1NfUEVSX1NFQzsKPiArCXdhaXQud2FpdC5mbGFncyA9IGZs YWdzX2Zvcl90ZXN0X2ZsYWdzKHRlc3RfZmxhZ3MpOwo+ICsKPiArCWlndF9hc3NlcnRfZXEocHRo cmVhZF9jcmVhdGUoJnRocmVhZCwgTlVMTCwgd2FpdF90aHJlYWRfZnVuYywgJndhaXQpLCAwKTsK PiArCj4gKwlzbGVlcF9uc2VjKE5TRUNTX1BFUl9TRUMgLyA1MCk7Cj4gKwo+ICsJbnVtX3NpZ25h bGVkID0gMDsKPiArCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNodWZmbGVkXzBfN194NCk7 IGorKykgewo+ICsJCWkgPSBzaHVmZmxlZF8wXzdfeDRbal07Cj4gKwkJaWd0X2Fzc2VydF9sdChp LCBBUlJBWV9TSVpFKHN5bmNvYmpzKSk7Cj4gKwo+ICsJCXN3aXRjaCAoc3RhZ2VbaV0rKykgewo+ ICsJCWNhc2UgU1RBR0VfVU5TVUJNSVRURUQ6Cj4gKwkJCS8qIFdlIG5lZWQgdG8gc3VibWl0IGF0 dGFjaCBhIGZlbmNlICovCj4gKwkJCWlmICghKHRlc3RfZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQp KSB7Cj4gKwkJCQkvKiBXZSBoYWQgdG8gYXR0YWNoIG9uZSB1cC1mcm9udCAqLwo+ICsJCQkJaWd0 X2Fzc2VydF9uZXEodGltZWxpbmVzW2ldLCAtMSk7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJ CQl0aW1lbGluZXNbaV0gPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1tpXSwK PiArCQkJCQkJCSAgICAgIHBvaW50c1tpXSk7Cj4gKwkJCWJyZWFrOwo+ICsKPiArCQljYXNlIFNU QUdFX1NVQk1JVFRFRDoKPiArCQkJLyogV2UgaGF2ZSBhIGZlbmNlLCB0cmlnZ2VyIGl0ICovCj4g KwkJCWlndF9hc3NlcnRfbmVxKHRpbWVsaW5lc1tpXSwgLTEpOwo+ICsJCQlzd19zeW5jX3RpbWVs aW5lX2luYyh0aW1lbGluZXNbaV0sIDEpOwo+ICsJCQljbG9zZSh0aW1lbGluZXNbaV0pOwo+ICsJ CQl0aW1lbGluZXNbaV0gPSAtMTsKPiArCQkJaWYgKG51bV9zaWduYWxlZCA9PSAwKQo+ICsJCQkJ Zmlyc3Rfc2lnbmFsZWQgPSBpOwo+ICsJCQludW1fc2lnbmFsZWQrKzsKPiArCQkJYnJlYWs7Cj4g Kwo+ICsJCWNhc2UgU1RBR0VfU0lHTkFMRUQ6Cj4gKwkJCS8qIFdlJ3JlIGFscmVhZHkgc2lnbmFs ZWQsIHJlc2V0ICovCj4gKwkJCXN5bmNvYmpfcmVzZXQoZmQsICZzeW5jb2Jqc1tpXSwgMSk7Cj4g KwkJCWJyZWFrOwo+ICsKPiArCQljYXNlIFNUQUdFX1JFU0VUOgo+ICsJCQkvKiBXZSdyZSByZXNl dCwgc3VibWl0IGFuZCBkb24ndCBzaWduYWwgKi8KPiArCQkJdGltZWxpbmVzW2ldID0gc3luY29i al9hdHRhY2hfc3dfc3luYyhmZCwgc3luY29ianNbaV0sCj4gKwkJCQkJCQkgICAgICBwb2ludHNb aV0pOwo+ICsJCQlicmVhazsKPiArCj4gKwkJY2FzZSBTVEFHRV9SRVNVQk1JVFRFRDoKPiArCQkJ aWd0X2Fzc2VydCghIlNob3VsZCBub3QgcmVhY2ggdGhpcyBzdGFnZSIpOwo+ICsJCQlicmVhazsK PiArCQl9Cj4gKwo+ICsJCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9BTEwpIHsKPiArCQkJaWYgKG51 bV9zaWduYWxlZCA9PSBBUlJBWV9TSVpFKHN5bmNvYmpzKSkKPiArCQkJCWJyZWFrOwo+ICsJCX0g ZWxzZSB7Cj4gKwkJCWlmIChudW1fc2lnbmFsZWQgPiAwKQo+ICsJCQkJYnJlYWs7Cj4gKwkJfQo+ ICsKPiArCQlzbGVlcF9uc2VjKE5TRUNTX1BFUl9TRUMgLyAxMDApOwo+ICsJfQo+ICsKPiArCXB0 aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpOwo+ICsKPiArCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9B TEwpIHsKPiArCQlpZ3RfYXNzZXJ0X2VxKG51bV9zaWduYWxlZCwgQVJSQVlfU0laRShzeW5jb2Jq cykpOwo+ICsJfSBlbHNlIHsKPiArCQlpZ3RfYXNzZXJ0X2VxKG51bV9zaWduYWxlZCwgMSk7Cj4g KwkJaWd0X2Fzc2VydF9lcSh3YWl0LndhaXQuZmlyc3Rfc2lnbmFsZWQsIGZpcnN0X3NpZ25hbGVk KTsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Cj4gKwkJY2xvc2UodGlt ZWxpbmVzW2ldKTsKPiArCQlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzW2ldKTsKPiArCX0K PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKnRlc3Rfd2FpdF9pbnRlcnJ1cHRlZF9kZXNj ID0KPiArCSJWZXJpZmllcyB0aW1lbGluZSBzeW5jb2JqIHdhaXRzIGludGVyYWN0aW9uIHdpdGgg c2lnbmFscy4iOwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3dhaXRfaW50ZXJydXB0ZWQoaW50IGZk LCB1aW50MzJfdCB0ZXN0X2ZsYWdzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxp bmVfd2FpdCB3YWl0ID0ge307Cj4gKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUo ZmQsIDApOwo+ICsJdWludDY0X3QgcG9pbnQgPSAxOwo+ICsJaW50IHRpbWVsaW5lOwo+ICsKPiAr CXdhaXQuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcigmc3luY29iaik7Cj4gKwl3YWl0LnBvaW50 cyA9IHRvX3VzZXJfcG9pbnRlcigmcG9pbnQpOwo+ICsJd2FpdC5jb3VudF9oYW5kbGVzID0gMTsK PiArCXdhaXQuZmxhZ3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0X2ZsYWdzKTsKPiArCj4g KwlpZiAodGVzdF9mbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkgewo+ICsJCXdhaXQudGltZW91dF9u c2VjID0gc2hvcnRfdGltZW91dCgpOwo+ICsJCWlndF93aGlsZV9pbnRlcnJ1cHRpYmxlKHRydWUp Cj4gKwkJCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3RpbWVsaW5lX3dhaXRfaW9jdGwoZmQsICZ3 YWl0KSwgLUVUSU1FKTsKPiArCX0KPiArCj4gKwl0aW1lbGluZSA9IHN5bmNvYmpfYXR0YWNoX3N3 X3N5bmMoZmQsIHN5bmNvYmosIHBvaW50KTsKPiArCj4gKwl3YWl0LnRpbWVvdXRfbnNlYyA9IHNo b3J0X3RpbWVvdXQoKTsKPiArCWlndF93aGlsZV9pbnRlcnJ1cHRpYmxlKHRydWUpCj4gKwkJaWd0 X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxpbmVfd2FpdF9pb2N0bChmZCwgJndhaXQpLCAtRVRJ TUUpOwo+ICsKPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29iaik7Cj4gKwljbG9zZSh0aW1l bGluZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sCj4gK2hhc19zeW5jb2JqX3RpbWVsaW5lX3dh aXQoaW50IGZkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCB3YWl0 ID0ge307Cj4gKwl1aW50MzJfdCBoYW5kbGUgPSAwOwo+ICsJdWludDY0X3QgdmFsdWU7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCWlmIChkcm1HZXRDYXAoZmQsIERSTV9DQVBfU1lOQ09CSl9USU1FTElO RSwgJnZhbHVlKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwlpZiAoIXZhbHVlKQo+ICsJCXJldHVy biBmYWxzZTsKPiArCj4gKwkvKiBUcnkgd2FpdGluZyBmb3IgemVybyBzeW5jIG9iamVjdHMgc2hv dWxkIGZhaWwgd2l0aCBFSU5WQUwgKi8KPiArCXdhaXQuY291bnRfaGFuZGxlcyA9IDE7Cj4gKwl3 YWl0LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7Cj4gKwlyZXQgPSBpZ3RfaW9j dGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1dBSVQsICZ3YWl0KTsKPiArCXJldHVy biByZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UOwo+ICt9Cj4gKwo+ICtpZ3RfbWFpbgo+ICt7 Cj4gKwlpbnQgZmQgPSAtMTsKPiArCj4gKwlpZ3RfZml4dHVyZSB7Cj4gKwkJZmQgPSBkcm1fb3Bl bl9kcml2ZXIoRFJJVkVSX0FOWSk7Cj4gKwkJaWd0X3JlcXVpcmUoaGFzX3N5bmNvYmpfdGltZWxp bmVfd2FpdChmZCkpOwo+ICsJCWlndF9yZXF1aXJlX3N3X3N5bmMoKTsKPiArCX0KPiArCj4gKwlp Z3RfZGVzY3JpYmUodGVzdF93YWl0X2JhZF9mbGFnc19kZXNjKTsKPiArCWlndF9zdWJ0ZXN0KCJp bnZhbGlkLXdhaXQtYmFkLWZsYWdzIikKPiArCQl0ZXN0X3dhaXRfYmFkX2ZsYWdzKGZkKTsKPiAr Cj4gKwlpZ3RfZGVzY3JpYmUodGVzdF93YWl0X3plcm9faGFuZGxlc19kZXNjKTsKPiArCWlndF9z dWJ0ZXN0KCJpbnZhbGlkLXdhaXQtemVyby1oYW5kbGVzIikKPiArCQl0ZXN0X3dhaXRfemVyb19o YW5kbGVzKGZkKTsKPiArCj4gKwlpZ3RfZGVzY3JpYmUodGVzdF93YWl0X2lsbGVnYWxfaGFuZGxl X2Rlc2MpOwo+ICsJaWd0X3N1YnRlc3QoImludmFsaWQtd2FpdC1pbGxlZ2FsLWhhbmRsZSIpCj4g KwkJdGVzdF93YWl0X2lsbGVnYWxfaGFuZGxlKGZkKTsKPiArCj4gKwlpZ3RfZGVzY3JpYmUodGVz dF9xdWVyeV96ZXJvX2hhbmRsZXNfZGVzYyk7Cj4gKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1xdWVy eS16ZXJvLWhhbmRsZXMiKQo+ICsJCXRlc3RfcXVlcnlfemVyb19oYW5kbGVzKGZkKTsKPiArCj4g KwlpZ3RfZGVzY3JpYmUodGVzdF9xdWVyeV9pbGxlZ2FsX2hhbmRsZV9kZXNjKTsKPiArCWlndF9z dWJ0ZXN0KCJpbnZhbGlkLXF1ZXJ5LWlsbGVnYWwtaGFuZGxlIikKPiArCQl0ZXN0X3F1ZXJ5X2ls bGVnYWxfaGFuZGxlKGZkKTsKPiArCj4gKwlpZ3RfZGVzY3JpYmUodGVzdF9xdWVyeV9vbmVfaWxs ZWdhbF9oYW5kbGVfZGVzYyk7Cj4gKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1xdWVyeS1vbmUtaWxs ZWdhbC1oYW5kbGUiKQo+ICsJCXRlc3RfcXVlcnlfb25lX2lsbGVnYWxfaGFuZGxlKGZkKTsKPiAr Cj4gKwlpZ3RfZGVzY3JpYmUodGVzdF9xdWVyeV9iYWRfcGFkX2Rlc2MpOwo+ICsJaWd0X3N1YnRl c3QoImludmFsaWQtcXVlcnktYmFkLXBhZCIpCj4gKwkJdGVzdF9xdWVyeV9iYWRfcGFkKGZkKTsK PiArCj4gKwlpZ3RfZGVzY3JpYmUodGVzdF9zaWduYWxfemVyb19oYW5kbGVzX2Rlc2MpOwo+ICsJ aWd0X3N1YnRlc3QoImludmFsaWQtc2lnbmFsLXplcm8taGFuZGxlcyIpCj4gKwkJdGVzdF9zaWdu YWxfemVyb19oYW5kbGVzKGZkKTsKPiArCj4gKwlpZ3RfZGVzY3JpYmUodGVzdF9zaWduYWxfaWxs ZWdhbF9oYW5kbGVfZGVzYyk7Cj4gKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1zaWduYWwtaWxsZWdh bC1oYW5kbGUiKQo+ICsJCXRlc3Rfc2lnbmFsX2lsbGVnYWxfaGFuZGxlKGZkKTsKPiArCj4gKwlp Z3Rfc3VidGVzdCgiaW52YWxpZC1zaWduYWwtaWxsZWdhbC1wb2ludCIpCj4gKwkJdGVzdF9zaWdu YWxfaWxsZWdhbF9wb2ludChmZCk7Cj4gKwo+ICsJaWd0X2Rlc2NyaWJlKHRlc3Rfc2lnbmFsX29u ZV9pbGxlZ2FsX2hhbmRsZV9kZXNjKTsKPiArCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXNpZ25hbC1v bmUtaWxsZWdhbC1oYW5kbGUiKQo+ICsJCXRlc3Rfc2lnbmFsX29uZV9pbGxlZ2FsX2hhbmRsZShm ZCk7Cj4gKwo+ICsJaWd0X2Rlc2NyaWJlKHRlc3Rfc2lnbmFsX2JhZF9wYWRfZGVzYyk7Cj4gKwlp Z3Rfc3VidGVzdCgiaW52YWxpZC1zaWduYWwtYmFkLXBhZCIpCj4gKwkJdGVzdF9zaWduYWxfYmFk X3BhZChmZCk7Cj4gKwo+ICsJaWd0X2Rlc2NyaWJlKHRlc3Rfc2lnbmFsX2FycmF5X2Rlc2MpOwo+ ICsJaWd0X3N1YnRlc3QoInNpZ25hbC1hcnJheSIpCj4gKwkJdGVzdF9zaWduYWxfYXJyYXkoZmQp Owo+ICsKPiArCWlndF9kZXNjcmliZSh0ZXN0X3RyYW5zZmVyX2lsbGVnYWxfaGFuZGxlX2Rlc2Mp Owo+ICsJaWd0X3N1YnRlc3QoImludmFsaWQtdHJhbnNmZXItaWxsZWdhbC1oYW5kbGUiKQo+ICsJ CXRlc3RfdHJhbnNmZXJfaWxsZWdhbF9oYW5kbGUoZmQpOwo+ICsKPiArCWlndF9kZXNjcmliZSh0 ZXN0X3RyYW5zZmVyX2JhZF9wYWRfZGVzYyk7Cj4gKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC10cmFu c2Zlci1iYWQtcGFkIikKPiArCQl0ZXN0X3RyYW5zZmVyX2JhZF9wYWQoZmQpOwo+ICsKPiArCWZv ciAodW5zaWduZWQgZmxhZ3MgPSAwOyBmbGFncyA8IFdBSVRfRkxBR1NfTUFYOyBmbGFncysrKSB7 Cj4gKwkJaW50IGVycjsKPiArCj4gKwkJLyogT25seSBvbmUgd2FpdCBtb2RlIGZvciBzaW5nbGUt d2FpdCB0ZXN0cyAqLwo+ICsJCWlmIChfX2J1aWx0aW5fcG9wY291bnQoZmxhZ3MgJiAoV0FJVF9V TlNVQk1JVFRFRCB8Cj4gKwkJCQkJCVdBSVRfU1VCTUlUVEVEIHwKPiArCQkJCQkJV0FJVF9TSUdO QUxFRCkpICE9IDEpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZiAoKGZsYWdzICYgV0FJVF9V TlNVQk1JVFRFRCkgJiYgIShmbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkpCj4gKwkJCWVyciA9IC1F SU5WQUw7Cj4gKwkJZWxzZSBpZiAoIShmbGFncyAmIFdBSVRfU0lHTkFMRUQpICYmICEoKGZsYWdz ICYgV0FJVF9TVUJNSVRURUQpICYmIChmbGFncyAmIFdBSVRfQVZBSUxBQkxFKSkpCj4gKwkJCWVy ciA9IC1FVElNRTsKPiArCQllbHNlCj4gKwkJCWVyciA9IDA7Cj4gKwo+ICsJCWlndF9kZXNjcmli ZSh0ZXN0X3NpZ25hbF93YWl0X2Rlc2MpOwo+ICsJCWlndF9zdWJ0ZXN0X2YoIiVzc2luZ2xlLXdh aXQlcyVzJXMlcyVzJXMiLAo+ICsJCQkgICAgICBlcnIgPT0gLUVJTlZBTCA/ICJpbnZhbGlkLSIg OiBlcnIgPT0gLUVUSU1FID8gImV0aW1lLSIgOiAiIiwKPiArCQkJICAgICAgKGZsYWdzICYgV0FJ VF9BTEwpID8gIi1hbGwiIDogIiIsCj4gKwkJCSAgICAgIChmbGFncyAmIFdBSVRfRk9SX1NVQk1J VCkgPyAiLWZvci1zdWJtaXQiIDogIiIsCj4gKwkJCSAgICAgIChmbGFncyAmIFdBSVRfQVZBSUxB QkxFKSA/ICItYXZhaWxhYmxlIiA6ICIiLAo+ICsJCQkgICAgICAoZmxhZ3MgJiBXQUlUX1VOU1VC TUlUVEVEKSA/ICItdW5zdWJtaXR0ZWQiIDogIiIsCj4gKwkJCSAgICAgIChmbGFncyAmIFdBSVRf U1VCTUlUVEVEKSA/ICItc3VibWl0dGVkIiA6ICIiLAo+ICsJCQkgICAgICAoZmxhZ3MgJiBXQUlU X1NJR05BTEVEKSA/ICItc2lnbmFsZWQiIDogIiIpCj4gKwkJCXRlc3Rfc2luZ2xlX3dhaXQoZmQs IGZsYWdzLCBlcnIpOwo+ICsJfQo+ICsKPiArCWlndF9kZXNjcmliZSh0ZXN0X3dhaXRfZGVsYXll ZF9zaWduYWxfZGVzYyk7Cj4gKwlpZ3Rfc3VidGVzdCgid2FpdC1kZWxheWVkLXNpZ25hbCIpCj4g KwkJdGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFsKGZkLCAwKTsKPiArCj4gKwlpZ3RfZGVzY3JpYmUo dGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFsX2Rlc2MpOwo+ICsJaWd0X3N1YnRlc3QoIndhaXQtZm9y LXN1Ym1pdC1kZWxheWVkLXN1Ym1pdCIpCj4gKwkJdGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFsKGZk LCBXQUlUX0ZPUl9TVUJNSVQpOwo+ICsKPiArCWlndF9kZXNjcmliZSh0ZXN0X3dhaXRfZGVsYXll ZF9zaWduYWxfZGVzYyk7Cj4gKwlpZ3Rfc3VidGVzdCgid2FpdC1hbGwtZGVsYXllZC1zaWduYWwi KQo+ICsJCXRlc3Rfd2FpdF9kZWxheWVkX3NpZ25hbChmZCwgV0FJVF9BTEwpOwo+ICsKPiArCWln dF9kZXNjcmliZSh0ZXN0X3dhaXRfZGVsYXllZF9zaWduYWxfZGVzYyk7Cj4gKwlpZ3Rfc3VidGVz dCgid2FpdC1hbGwtZm9yLXN1Ym1pdC1kZWxheWVkLXN1Ym1pdCIpCj4gKwkJdGVzdF93YWl0X2Rl bGF5ZWRfc2lnbmFsKGZkLCBXQUlUX0FMTCB8IFdBSVRfRk9SX1NVQk1JVCk7Cj4gKwo+ICsJaWd0 X2Rlc2NyaWJlKHRlc3RfcmVzZXRfdW5zaWduYWxlZF9kZXNjKTsKPiArCWlndF9zdWJ0ZXN0KCJy ZXNldC11bnNpZ25hbGVkIikKPiArCQl0ZXN0X3Jlc2V0X3Vuc2lnbmFsZWQoZmQpOwo+ICsKPiAr CWlndF9kZXNjcmliZSh0ZXN0X3Jlc2V0X3NpZ25hbGVkX2Rlc2MpOwo+ICsJaWd0X3N1YnRlc3Qo InJlc2V0LXNpZ25hbGVkIikKPiArCQl0ZXN0X3Jlc2V0X3NpZ25hbGVkKGZkKTsKPiArCj4gKwlp Z3RfZGVzY3JpYmUodGVzdF9yZXNldF9tdWx0aXBsZV9zaWduYWxlZF9kZXNjKTsKPiArCWlndF9z dWJ0ZXN0KCJyZXNldC1tdWx0aXBsZS1zaWduYWxlZCIpCj4gKwkJdGVzdF9yZXNldF9tdWx0aXBs ZV9zaWduYWxlZChmZCk7Cj4gKwo+ICsJaWd0X2Rlc2NyaWJlKHRlc3RfcmVzZXRfZHVyaW5nX3dh aXRfZm9yX3N1Ym1pdF9kZXNjKTsKPiArCWlndF9zdWJ0ZXN0KCJyZXNldC1kdXJpbmctd2FpdC1m b3Itc3VibWl0IikKPiArCQl0ZXN0X3Jlc2V0X2R1cmluZ193YWl0X2Zvcl9zdWJtaXQoZmQpOwo+ ICsKPiArCWlndF9kZXNjcmliZSh0ZXN0X3NpZ25hbF9kZXNjKTsKPiArCWlndF9zdWJ0ZXN0KCJz aWduYWwiKQo+ICsJCXRlc3Rfc2lnbmFsKGZkKTsKPiArCj4gKwlmb3IgKHVuc2lnbmVkIGZsYWdz ID0gMDsgZmxhZ3MgPCBXQUlUX0ZMQUdTX01BWDsgZmxhZ3MrKykgewo+ICsJCWludCBlcnI7Cj4g Kwo+ICsJCS8qIEF0IGxlYXN0IG9uZSB3YWl0IG1vZGUgZm9yIG11bHRpLXdhaXQgdGVzdHMgKi8K PiArCQlpZiAoIShmbGFncyAmIChXQUlUX1VOU1VCTUlUVEVEIHwKPiArCQkJICAgICAgIFdBSVRf U1VCTUlUVEVEIHwKPiArCQkJICAgICAgIFdBSVRfU0lHTkFMRUQpKSkKPiArCQkJY29udGludWU7 Cj4gKwo+ICsJCWVyciA9IDA7Cj4gKwkJaWYgKChmbGFncyAmIFdBSVRfVU5TVUJNSVRURUQpICYm ICEoZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpKSB7Cj4gKwkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJ fSBlbHNlIGlmIChmbGFncyAmIFdBSVRfQUxMKSB7Cj4gKwkJCWlmIChmbGFncyAmIChXQUlUX1VO U1VCTUlUVEVEIHwgV0FJVF9TVUJNSVRURUQpKQo+ICsJCQkJZXJyID0gLUVUSU1FOwo+ICsJCQlp ZiAoIShmbGFncyAmIFdBSVRfVU5TVUJNSVRURUQpICYmIChmbGFncyAmIFdBSVRfU1VCTUlUVEVE KSAmJiAoZmxhZ3MgJiBXQUlUX0FWQUlMQUJMRSkpCj4gKwkJCQllcnIgPSAwOwo+ICsJCX0gZWxz ZSB7Cj4gKwkJCWlmICghKGZsYWdzICYgV0FJVF9TSUdOQUxFRCkgJiYgISgoZmxhZ3MgJiBXQUlU X1NVQk1JVFRFRCkgJiYgKGZsYWdzICYgV0FJVF9BVkFJTEFCTEUpKSkKPiArCQkJCWVyciA9IC1F VElNRTsKPiArCQl9Cj4gKwo+ICsJCWlndF9kZXNjcmliZSh0ZXN0X211bHRpX3dhaXRfZGVzYyk7 Cj4gKwkJaWd0X3N1YnRlc3RfZigiJXNtdWx0aS13YWl0JXMlcyVzJXMlcyVzIiwKPiArCQkJICAg ICAgZXJyID09IC1FSU5WQUwgPyAiaW52YWxpZC0iIDogZXJyID09IC1FVElNRSA/ICJldGltZS0i IDogIiIsCj4gKwkJCSAgICAgIChmbGFncyAmIFdBSVRfQUxMKSA/ICItYWxsIiA6ICIiLAo+ICsJ CQkgICAgICAoZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpID8gIi1mb3Itc3VibWl0IiA6ICIiLAo+ ICsJCQkgICAgICAoZmxhZ3MgJiBXQUlUX0FWQUlMQUJMRSkgPyAiLWF2YWlsYWJsZSIgOiAiIiwK PiArCQkJICAgICAgKGZsYWdzICYgV0FJVF9VTlNVQk1JVFRFRCkgPyAiLXVuc3VibWl0dGVkIiA6 ICIiLAo+ICsJCQkgICAgICAoZmxhZ3MgJiBXQUlUX1NVQk1JVFRFRCkgPyAiLXN1Ym1pdHRlZCIg OiAiIiwKPiArCQkJICAgICAgKGZsYWdzICYgV0FJVF9TSUdOQUxFRCkgPyAiLXNpZ25hbGVkIiA6 ICIiKQo+ICsJCQl0ZXN0X211bHRpX3dhaXQoZmQsIGZsYWdzLCBlcnIpOwo+ICsJfQo+ICsKPiAr CWlndF9kZXNjcmliZSh0ZXN0X3dhaXRfc25hcHNob3RfZGVzYyk7Cj4gKwlpZ3Rfc3VidGVzdCgi d2FpdC1hbnktc25hcHNob3QiKQo+ICsJCXRlc3Rfd2FpdF9zbmFwc2hvdChmZCwgMCk7Cj4gKwo+ ICsJaWd0X2Rlc2NyaWJlKHRlc3Rfd2FpdF9zbmFwc2hvdF9kZXNjKTsKPiArCWlndF9zdWJ0ZXN0 KCJ3YWl0LWFsbC1zbmFwc2hvdCIpCj4gKwkJdGVzdF93YWl0X3NuYXBzaG90KGZkLCBXQUlUX0FM TCk7Cj4gKwo+ICsJaWd0X2Rlc2NyaWJlKHRlc3Rfd2FpdF9zbmFwc2hvdF9kZXNjKTsKPiArCWln dF9zdWJ0ZXN0KCJ3YWl0LWZvci1zdWJtaXQtc25hcHNob3QiKQo+ICsJCXRlc3Rfd2FpdF9zbmFw c2hvdChmZCwgV0FJVF9GT1JfU1VCTUlUKTsKPiArCj4gKwlpZ3RfZGVzY3JpYmUodGVzdF93YWl0 X3NuYXBzaG90X2Rlc2MpOwo+ICsJaWd0X3N1YnRlc3QoIndhaXQtYWxsLWZvci1zdWJtaXQtc25h cHNob3QiKQo+ICsJCXRlc3Rfd2FpdF9zbmFwc2hvdChmZCwgV0FJVF9BTEwgfCBXQUlUX0ZPUl9T VUJNSVQpOwo+ICsKPiArCWlndF9kZXNjcmliZSh0ZXN0X3dhaXRfY29tcGxleF9kZXNjKTsKPiAr CWlndF9zdWJ0ZXN0KCJ3YWl0LWFueS1jb21wbGV4IikKPiArCQl0ZXN0X3dhaXRfY29tcGxleChm ZCwgMCk7Cj4gKwo+ICsJaWd0X2Rlc2NyaWJlKHRlc3Rfd2FpdF9jb21wbGV4X2Rlc2MpOwo+ICsJ aWd0X3N1YnRlc3QoIndhaXQtYWxsLWNvbXBsZXgiKQo+ICsJCXRlc3Rfd2FpdF9jb21wbGV4KGZk LCBXQUlUX0FMTCk7Cj4gKwo+ICsJaWd0X2Rlc2NyaWJlKHRlc3Rfd2FpdF9jb21wbGV4X2Rlc2Mp Owo+ICsJaWd0X3N1YnRlc3QoIndhaXQtZm9yLXN1Ym1pdC1jb21wbGV4IikKPiArCQl0ZXN0X3dh aXRfY29tcGxleChmZCwgV0FJVF9GT1JfU1VCTUlUKTsKPiArCj4gKwlpZ3RfZGVzY3JpYmUodGVz dF93YWl0X2NvbXBsZXhfZGVzYyk7Cj4gKwlpZ3Rfc3VidGVzdCgid2FpdC1hbGwtZm9yLXN1Ym1p dC1jb21wbGV4IikKPiArCQl0ZXN0X3dhaXRfY29tcGxleChmZCwgV0FJVF9BTEwgfCBXQUlUX0ZP Ul9TVUJNSVQpOwo+ICsKPiArCWlndF9kZXNjcmliZSh0ZXN0X3dhaXRfaW50ZXJydXB0ZWRfZGVz Yyk7Cj4gKwlpZ3Rfc3VidGVzdCgid2FpdC1hbnktaW50ZXJydXB0ZWQiKQo+ICsJCXRlc3Rfd2Fp dF9pbnRlcnJ1cHRlZChmZCwgMCk7Cj4gKwo+ICsJaWd0X2Rlc2NyaWJlKHRlc3Rfd2FpdF9pbnRl cnJ1cHRlZF9kZXNjKTsKPiArCWlndF9zdWJ0ZXN0KCJ3YWl0LWFsbC1pbnRlcnJ1cHRlZCIpCj4g KwkJdGVzdF93YWl0X2ludGVycnVwdGVkKGZkLCBXQUlUX0FMTCk7Cj4gK30KPiAtLSAKPiAyLjI0 LjAKPiAKCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K PiBpZ3QtZGV2IG1haWxpbmcgbGlzdAo+IGlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4g aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1h aWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=