From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: References: <20180315125617.12062-1-tvrtko.ursulin@linux.intel.com> <152111966955.25315.15544334273574135347@mail.alporthouse.com> From: Tvrtko Ursulin Message-ID: <1a8be18d-e456-b3b0-3483-d95594ea8b27@linux.intel.com> Date: Thu, 15 Mar 2018 13:36:26 +0000 MIME-Version: 1.0 In-Reply-To: <152111966955.25315.15544334273574135347@mail.alporthouse.com> Content-Language: en-GB Subject: Re: [igt-dev] [PATCH i-g-t] tests/perf_pmu: Improve accuracy by waiting on spinner to start List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Chris Wilson , Tvrtko Ursulin , igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org, Tvrtko Ursulin List-ID: Ck9uIDE1LzAzLzIwMTggMTM6MTQsIENocmlzIFdpbHNvbiB3cm90ZToKPiBRdW90aW5nIFR2cnRr byBVcnN1bGluICgyMDE4LTAzLTE1IDEyOjU2OjE3KQo+PiBGcm9tOiBUdnJ0a28gVXJzdWxpbiA8 dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+Pgo+PiBNb3JlIHRoYW4gb25lIHRlc3QgYXNzdW1l cyB0aGF0IHRoZSBzcGlubmVyIGlzIHJ1bm5pbmcgcHJldHR5IG11Y2gKPj4gaW1tZWRpYXRlbHkg YWZ0ZXIgd2UgaGF2ZSBjcmVhdGUgb3Igc3VibWl0dGVkIGl0Lgo+Pgo+PiBJbiBhY3R1YWxpdHkg dGhlcmUgaXMgYSB2YXJpYWJsZSBkZWxheSwgZXNwZWNpYWxseSBvbiBleGVjbGlzdHMgcGxhdGZv cm1zLAo+PiBiZXR3ZWVuIHN1Ym1pc3Npb24gYW5kIHNwaW4gYmF0Y2ggc3RhcnRpbmcgdG8gcnVu IG9uIHRoZSBoYXJkd2FyZS4KPj4KPj4gVG8gZW5hYmxlIHRlc3RzIHdoaWNoIGNhcmUgYWJvdXQg dGhpcyBsZXZlbCBvZiB0aW1pbmcgdG8gYWNjb3VudCBmb3IgdGhpcywKPj4gd2UgYWRkIGEgbmV3 IHNwaW4gYmF0Y2ggY29uc3RydWN0b3Igd2hpY2ggcHJvdmlkZXMgYW4gb3V0cHV0IGZpZWxkIHdo aWNoCj4+IGNhbiBiZSBwb2xsZWQgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIGJhdGNoIGFjdHVhbGx5 IHN0YXJ0ZWQgcnVubmluZy4KPj4KPj4gVGhpcyBpcyBpbXBsZW1lbnRlZCB2aWEgTUlfU1RPUkVE V19JTU0gZnJvbSB0aGUgc3BpbiBiYXRjaCwgd3JpdGluZyBpbnRvCj4+IG1lbW9yeSBtYXBwZWQg cGFnZSBzaGFyZWQgd2l0aCB1c2Vyc3BhY2UuCj4+Cj4+IFVzaW5nIHRoaXMgZmFjaWxpdHkgZnJv bSBwZXJmX3BtdSwgd2hlcmUgYXBwbGljYWJsZSwgc2hvdWxkIGltcHJvdmUgdmVyeQo+PiBvY2Nh c2lvbmFsIHRlc3QgZmFpbHMgYWNyb3NzIHRoZSBzZXQgYW5kIHBsYXRmb3Jtcy4KPj4KPj4gU2ln bmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPj4g U3VnZ2VzdGVkLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPj4g LS0tCj4+ICAgbGliL2lndF9kdW1teWxvYWQuYyB8ICA5OSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLQo+PiAgIGxpYi9pZ3RfZHVtbXlsb2FkLmggfCAgIDkgKysrKwo+PiAgIHRl c3RzL3BlcmZfcG11LmMgICAgfCAxNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tLQo+PiAgIDMgZmlsZXMgY2hhbmdlZCwgMTk2IGluc2VydGlvbnMo KyksIDU3IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvbGliL2lndF9kdW1teWxvYWQu YyBiL2xpYi9pZ3RfZHVtbXlsb2FkLmMKPj4gaW5kZXggNGIyMGYyM2RmZTI2Li4wNDQ3ZDJmMTRk NTcgMTAwNjQ0Cj4+IC0tLSBhL2xpYi9pZ3RfZHVtbXlsb2FkLmMKPj4gKysrIGIvbGliL2lndF9k dW1teWxvYWQuYwo+PiBAQCAtNzQsOSArNzQsMTIgQEAgZmlsbF9yZWxvYyhzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jLAo+PiAgICAgICAgICByZWxvYy0+d3JpdGVf ZG9tYWluID0gd3JpdGVfZG9tYWluczsKPj4gICB9Cj4+ICAgCj4+IC1zdGF0aWMgaW50IGVtaXRf cmVjdXJzaXZlX2JhdGNoKGlndF9zcGluX3QgKnNwaW4sCj4+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGVuZ2luZSwKPj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkZXAsIGJvb2wgb3V0X2ZlbmNl KQo+PiArI2RlZmluZSBPVVRfRkVOQ0UgICAgICAoMSA8PCAwKQo+PiArI2RlZmluZSBQT0xMX1JV TiAgICAgICAoMSA8PCAxKQo+PiArCj4+ICtzdGF0aWMgaW50Cj4+ICtlbWl0X3JlY3Vyc2l2ZV9i YXRjaChpZ3Rfc3Bpbl90ICpzcGluLCBpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgZW5n aW5lLAo+PiArICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkZXAsIHVuc2lnbmVkIGludCBm bGFncykKPj4gICB7Cj4+ICAgI2RlZmluZSBTQ1JBVENIIDAKPj4gICAjZGVmaW5lIEJBVENIIDEK Pj4gQEAgLTExNiw2ICsxMTksOCBAQCBzdGF0aWMgaW50IGVtaXRfcmVjdXJzaXZlX2JhdGNoKGln dF9zcGluX3QgKnNwaW4sCj4+ICAgICAgICAgIGV4ZWNidWYuYnVmZmVyX2NvdW50Kys7Cj4+ICAg Cj4+ICAgICAgICAgIGlmIChkZXApIHsKPj4gKyAgICAgICAgICAgICAgIGlndF9hc3NlcnQoIShm bGFncyAmIFBPTExfUlVOKSk7Cj4+ICsKPiAKPiBDaGFsbGVuZ2UgbGVmdCB0byB0aGUgcmVhZGVy IDopCgpXZWxsIG5vdCB0aGUgcmVhZGVyLCB3aG9ldmVyIGdldHMgdG8gbmVlZCBib3RoLiA6KQoK Pj4gICAgICAgICAgICAgICAgICAvKiBkdW1teSB3cml0ZSB0byBkZXBlbmRlbmN5ICovCj4+ICAg ICAgICAgICAgICAgICAgb2JqW1NDUkFUQ0hdLmhhbmRsZSA9IGRlcDsKPj4gICAgICAgICAgICAg ICAgICBmaWxsX3JlbG9jKCZyZWxvY3Nbb2JqW0JBVENIXS5yZWxvY2F0aW9uX2NvdW50KytdLAo+ PiBAQCAtMTIzLDYgKzEyOCw0MSBAQCBzdGF0aWMgaW50IGVtaXRfcmVjdXJzaXZlX2JhdGNoKGln dF9zcGluX3QgKnNwaW4sCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJOTE1X0dFTV9E T01BSU5fUkVOREVSLAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTkxNV9HRU1fRE9N QUlOX1JFTkRFUik7Cj4+ICAgICAgICAgICAgICAgICAgZXhlY2J1Zi5idWZmZXJfY291bnQrKzsK Pj4gKyAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgUE9MTF9SVU4pIHsKPj4gKyAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIGlndF9hc3Nl cnQoIWRlcCk7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIHNwaW4tPnBvbGxfaGFuZGxlID0gZ2Vt X2NyZWF0ZShmZCwgNDA5Nik7Cj4+ICsgICAgICAgICAgICAgICBzcGluLT5ydW5uaW5nID0gX19n ZW1fbW1hcF9fd2MoZmQsIHNwaW4tPnBvbGxfaGFuZGxlLAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDQwOTYsIFBST1RfUkVBRCB8IFBST1RfV1JJ VEUpOwo+IAo+IFVzZSBtbWFwX2NwdSBhbmQgZ2VtX3NldF9jYWNoaW5nKCkuCgpXb3VsZG4ndCB0 aGF0IGdldCB1cyBpbnRvIGNvaGVyZW5jeSBpc3N1ZXMgb24gc29tZSBwbGF0Zm9ybXM/IEkga2Vl cCB0aGUgCnBhZ2UgbWFwcGVkIGZvciBBUEkgdXNlcnMgdG8gcG9sbCBvbi4KCj4gCj4+ICsgICAg ICAgICAgICAgICBpZ3RfYXNzZXJ0KHNwaW4tPnJ1bm5pbmcpOwo+PiArICAgICAgICAgICAgICAg aWd0X2Fzc2VydF9lcSgqc3Bpbi0+cnVubmluZywgMCk7Cj4+ICsKPj4gKyAgICAgICAgICAgICAg ICpiYXRjaCsrID0gTUlfU1RPUkVfRFdPUkRfSU1NIHwgKGdlbiA8IDYgPyAxIDw8IDIyIDogMCk7 Cj4gCj4gSG1tLCBoYXZlIHdlIGZvcmdvdCB0aGUgKGxlbi0yKSBvciBpcyB0aGlzIGFuIHVudXN1 YWwgY29tbWFuZCB0aGF0IGtub3dzCj4gaXRzIG93biBsZW5ndGg/CgpJIGxpZnRlZCB0aGUgY29k ZSBmcm9tIGVsc2V3aGVyZS4KCj4gCj4+ICsKPj4gKyAgICAgICAgICAgICAgIGlmIChnZW4gPj0g OCkgewo+PiArICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzaXplb2YodWludDMyX3Qp Owo+PiArICAgICAgICAgICAgICAgICAgICAgICAqYmF0Y2grKyA9IDA7Cj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICpiYXRjaCsrID0gMDsKPj4gKyAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo Z2VuID49IDQpIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMiAqIHNpemVv Zih1aW50MzJfdCk7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICpiYXRjaCsrID0gMDsKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgKmJhdGNoKysgPSAwOwo+PiArICAgICAgICAgICAgICAg fSBlbHNlIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2l6ZW9mKHVpbnQz Ml90KTsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2hbLTFdLS07Cj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICpiYXRjaCsrID0gMDsKPj4gKyAgICAgICAgICAgICAgIH0KPj4gKwo+ PiArICAgICAgICAgICAgICAgKmJhdGNoKysgPSAxOwo+PiArCj4+ICsgICAgICAgICAgICAgICBv YmpbU0NSQVRDSF0uaGFuZGxlID0gc3Bpbi0+cG9sbF9oYW5kbGU7Cj4+ICsgICAgICAgICAgICAg ICBmaWxsX3JlbG9jKCZyZWxvY3Nbb2JqW0JBVENIXS5yZWxvY2F0aW9uX2NvdW50KytdLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluLT5wb2xsX2hhbmRsZSwgb2Zmc2V0LAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTik7 Cj4gCj4gRE9NQUlOX1JFTkRFUiBwcmVmZXJhYmx5LiBZb3UgZG9uJ3QgbmVlZCB0aGUgdy9hLiBD b3VsZCB3ZSBub3QgbGllIGFib3V0Cj4gdGhlIHdyaXRlLWhhemFyZD8gUmVtb3ZlcyB0aGUgbmVl ZCBmb3IgRVhFQ19PQkpFQ1RfQVNZTkMgYW5kIG9wZW5zIHVwCgpDYW4gZG8uCgo+IHRoZSBwb3Nz aWJpbGl0eSBmb3IgdXNpbmcgZGlmZmVyZW50IGR3b3JkcyBmb3IgZGlmZmVyZW50IGVuZ2luZXMg YW5kIHRoZW4KPiB3YWl0aW5nIGZvciBhbGwtZW5naW5lcy4KClllcywgSSBjb3VsZCBldmVuIHVz ZSB0aGlzIHNvIGdvb2QgdG8gbm90IGxldCBtZSBiZSBsYXp5LiA6KQoKCj4+ICsgICAgICAgICAg ICAgICBleGVjYnVmLmJ1ZmZlcl9jb3VudCsrOwo+IAo+IGdlbjQgYW5kIGdlbjUgcmVxdWlyZSBJ OTE1X0VYRUNfU0VDVVJFIGFuZCBhIERSTV9NQVNURVIgZmQuCj4gCj4gV2UgY2FuIGp1c3QgZG8g c29tZXRoaW5nIGxpa2UKPiAJaWYgKGdlbiA9PSA0IHx8IGdlbiA9PSA1KQo+IAkJaWd0X3JlcXVp cmUoaWd0X2RldmljZV9zZXRfbWFzdGVyKGZkKSA9PSAwKSk7CgpPa2F5LgoKPiAKPj4gKy8qKgo+ PiArICogaWd0X3NwaW5fYmF0Y2hfbmV3X3BvbGw6Cj4+ICsgKiBAZmQ6IG9wZW4gaTkxNSBkcm0g ZmlsZSBkZXNjcmlwdG9yCj4+ICsgKiBAZW5naW5lOiBSaW5nIHRvIGV4ZWN1dGUgYmF0Y2ggT1In ZCB3aXRoIGV4ZWNidWYgZmxhZ3MuIElmIHZhbHVlIGlzIGxlc3MKPj4gKyAqICAgICAgICAgIHRo YW4gMCwgZXhlY3V0ZSBvbiBhbGwgYXZhaWxhYmxlIHJpbmdzLgo+PiArICoKPj4gKyAqIFN0YXJ0 IGEgcmVjdXJzaXZlIGJhdGNoIG9uIGEgcmluZy4gSW1tZWRpYXRlbHkgcmV0dXJucyBhICNpZ3Rf c3Bpbl90IHRoYXQKPj4gKyAqIGNvbnRhaW5zIHRoZSBiYXRjaCdzIGhhbmRsZSB0aGF0IGNhbiBi ZSB3YWl0ZWQgdXBvbi4gVGhlIHJldHVybmVkIHN0cnVjdHVyZQo+PiArICogbXVzdCBiZSBwYXNz ZWQgdG8gaWd0X3NwaW5fYmF0Y2hfZnJlZSgpIGZvciBwb3N0LXByb2Nlc3NpbmcuCj4+ICsgKgo+ PiArICogaWd0X3NwaW5fdC0+cnVubmluZyB3aWxsIGNvbnRhaW50IGEgcG9pbnRlciB3aGljaCB0 YXJnZXQgd2lsbCBjaGFuZ2UgZnJvbQo+PiArICogemVybyB0byBvbmUgb25jZSB0aGUgc3Bpbm5l ciBhY3R1YWxseSBzdGFydHMgZXhlY3V0aW5nIG9uIHRoZSBHUFUuCj4+ICsgKgo+PiArICogUmV0 dXJuczoKPj4gKyAqIFN0cnVjdHVyZSB3aXRoIGhlbHBlciBpbnRlcm5hbCBzdGF0ZSBmb3IgaWd0 X3NwaW5fYmF0Y2hfZnJlZSgpLgo+PiArICovCj4+ICtpZ3Rfc3Bpbl90ICoKPj4gK2lndF9zcGlu X2JhdGNoX25ld19wb2xsKGludCBmZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBlbmdpbmUpCj4+ ICt7Cj4+ICsgICAgICAgaWd0X3NwaW5fdCAqc3BpbjsKPj4gKwo+PiArICAgICAgIGlndF9yZXF1 aXJlX2dlbShmZCk7Cj4+ICsgICAgICAgaWd0X3JlcXVpcmUoZ2VtX21tYXBfX2hhc193YyhmZCkp Owo+IAo+IGlndF9yZXF1aXJlKGdlbV9jYW5fc3RvcmVfZHdvcmQoZmQsIGVuZ2luZSkpOwo+IAo+ IE5vdCBhbGwgcGxhdGZvcm1zIGhhdmUgYSBNSV9TVE9SRV9EV09SRC9EQVRBX0lNTSAod2l0aCB2 aXJ0dWFsIGFkZHJlc3Nlcwo+IGF0IGxlYXN0KSBhbmQgc29tZSBwbGF0Zm9ybXMgd2lsbCBkaWUg KCpjb3VnaCogc25iICpjb3VnaCopLgoKR3JyIHRoYXQgbWFrZXMgaXQgYWxsIHByb2JsZW1hdGlj LiBXZWxsLCBtYXliZSBub3QgY29tcGxldGVseSwgSSBjYW4gCmp1c3QgZmFsbCBiYWNrIHRvIGxl c3MgYWNjdXJhdGUgbWV0aG9kIG9uIHRob3NlIHBsYXRmb3Jtcy4KCj4gCj4+ICsKPj4gKyAgICAg ICBzcGluID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXdfcG9sbChmZCwgY3R4LCBlbmdpbmUpOwo+PiAr ICAgICAgIGlndF9hc3NlcnQoZ2VtX2JvX2J1c3koZmQsIHNwaW4tPmhhbmRsZSkpOwo+PiArCj4+ ICsgICAgICAgcmV0dXJuIHNwaW47Cj4+ICt9Cj4gCj4+ICAgaWd0X3NwaW5fdCAqX19pZ3Rfc3Bp bl9iYXRjaF9uZXcoaW50IGZkLAo+PiBAQCAtNTUsNiArNTcsMTMgQEAgaWd0X3NwaW5fdCAqaWd0 X3NwaW5fYmF0Y2hfbmV3X2ZlbmNlKGludCBmZCwKPj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50MzJfdCBjdHgsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgZW5naW5lKTsKPj4gICAKPj4gK2lndF9zcGluX3QgKl9faWd0 X3NwaW5fYmF0Y2hfbmV3X3BvbGwoaW50IGZkLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50MzJfdCBjdHgsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGVuZ2luZSk7Cj4+ICtpZ3Rfc3Bpbl90ICppZ3Rfc3Bpbl9i YXRjaF9uZXdfcG9sbChpbnQgZmQsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQzMl90IGN0eCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgZW5naW5lKTsKPj4gKwo+PiAgIHZvaWQgaWd0X3NwaW5fYmF0Y2hfc2V0X3RpbWVv dXQoaWd0X3NwaW5fdCAqc3BpbiwgaW50NjRfdCBucyk7Cj4+ICAgdm9pZCBpZ3Rfc3Bpbl9iYXRj aF9lbmQoaWd0X3NwaW5fdCAqc3Bpbik7Cj4+ICAgdm9pZCBpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGlu dCBmZCwgaWd0X3NwaW5fdCAqc3Bpbik7Cj4+IGRpZmYgLS1naXQgYS90ZXN0cy9wZXJmX3BtdS5j IGIvdGVzdHMvcGVyZl9wbXUuYwo+PiBpbmRleCAxOWZjYzk1ZmZjN2YuLmQxYjdiMjNiYzY0NiAx MDA2NDQKPj4gLS0tIGEvdGVzdHMvcGVyZl9wbXUuYwo+PiArKysgYi90ZXN0cy9wZXJmX3BtdS5j Cj4+IEBAIC0xODQsNiArMTg0LDM4IEBAIHN0YXRpYyB2b2lkIGVuZF9zcGluKGludCBmZCwgaWd0 X3NwaW5fdCAqc3BpbiwgdW5zaWduZWQgaW50IGZsYWdzKQo+PiAgICAgICAgICAgICAgICAgIHVz bGVlcChiYXRjaF9kdXJhdGlvbl9ucyAvIDUwMDApOwo+PiAgIH0KPj4gICAKPj4gK3N0YXRpYyBp Z3Rfc3Bpbl90ICogX19zcGluX3BvbGwoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGxv bmcgZmxhZ3MpCj4+ICt7Cj4+ICsgICAgICAgcmV0dXJuIF9faWd0X3NwaW5fYmF0Y2hfbmV3X3Bv bGwoZmQsIGN0eCwgZmxhZ3MpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBf X3NwaW5fd2FpdChpZ3Rfc3Bpbl90ICpzcGluKQo+PiArewo+PiArICAgICAgIHN0cnVjdCB0aW1l c3BlYyBzdGFydCA9IHsgfTsKPj4gKwo+PiArICAgICAgIGlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0 KTsKPj4gKwo+PiArICAgICAgIHdoaWxlICghc3Bpbi0+cnVubmluZyk7Cj4gCj4gUHV0ICc7JyBv biBhIG5ldyBsaW5lIHNvIGl0J3MgY2xlYXJseSB2aXNpYmxlLgoKT2theS4KCj4gCj4+ICsKPj4g KyAgICAgICByZXR1cm4gaWd0X25zZWNfZWxhcHNlZCgmc3RhcnQpOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaWd0X3NwaW5fdCAqIF9fc3Bpbl9zeW5jKGludCBmZCwgdWludDMyX3QgY3R4LCB1bnNp Z25lZCBsb25nIGZsYWdzKQo+PiArewo+PiArICAgICAgIGlndF9zcGluX3QgKnNwaW4gPSBfX3Nw aW5fcG9sbChmZCwgY3R4LCBmbGFncyk7Cj4+ICsKPj4gKyAgICAgICBfX3NwaW5fd2FpdChzcGlu KTsKPj4gKwo+PiArICAgICAgIHJldHVybiBzcGluOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaWd0 X3NwaW5fdCAqIHNwaW5fc3luYyhpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgbG9uZyBm bGFncykKPiAKPiBzcGluX3N5bmMoKSBoYXMgY29ubm90YXRpb25zIHdpdGggZ2VtX3N5bmMoKS4g Z2VtX3N5bmMgaXMgd2FpdCBmb3IgZW5kLAo+IGJ1dCBzcGluX3N5bmMgaXMgd2FpdF9mb3Jfc3Rh cnQuIE1heWJlIHNwaW5fd2FpdF9mb3JfZXhlY3V0ZT8gTmFoLgo+IAo+PiArewo+PiArICAgICAg IGlndF9yZXF1aXJlX2dlbShmZCk7Cj4+ICsKPj4gKyAgICAgICByZXR1cm4gX19zcGluX3N5bmMo ZmQsIGN0eCwgZmxhZ3MpOwo+PiArfQo+IAo+PiAgIHN0YXRpYyB2b2lkCj4+ICAgX19zdWJtaXRf c3Bpbl9iYXRjaChpbnQgZ2VtX2ZkLAo+PiArICAgICAgICAgICAgICAgICAgIGlndF9zcGluX3Qg KnNwaW4sCj4+ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19v YmplY3QyICpvYmosCj4+ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9l eGVjdXRpb25fZW5naW5lMiAqZSkKPj4gICB7Cj4+ICAgICAgICAgIHN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY2J1ZmZlcjIgZWIgPSB7Cj4+IC0gICAgICAgICAgICAgICAuYnVmZmVyX2NvdW50ID0g MSwKPj4gICAgICAgICAgICAgICAgICAuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2Jq KSwKPj4gICAgICAgICAgICAgICAgICAuZmxhZ3MgPSBlMnJpbmcoZ2VtX2ZkLCBlKSwKPj4gICAg ICAgICAgfTsKPj4gICAKPj4gKyAgICAgICBpZiAoc3Bpbi0+cnVubmluZykgewo+PiArICAgICAg ICAgICAgICAgb2JqWzBdLmhhbmRsZSA9IHNwaW4tPnBvbGxfaGFuZGxlOwo+PiArICAgICAgICAg ICAgICAgb2JqWzBdLmZsYWdzID0gRVhFQ19PQkpFQ1RfQVNZTkM7Cj4+ICsgICAgICAgICAgICAg ICBvYmpbMV0uaGFuZGxlID0gc3Bpbi0+aGFuZGxlOwo+PiArICAgICAgICAgICAgICAgZWIuYnVm ZmVyX2NvdW50ID0gMjsKPj4gKyAgICAgICB9IGVsc2Ugewo+PiArICAgICAgICAgICAgICAgb2Jq WzBdLmhhbmRsZSA9IHNwaW4tPmhhbmRsZTsKPj4gKyAgICAgICAgICAgICAgIGViLmJ1ZmZlcl9j b3VudCA9IDE7Cj4+ICsgICAgICAgfQo+IAo+IG9ialtdIG11c3QgYmUgc2V0IHVwIGJ5IHRoZSBj YWxsZXI7IHRoZSBFWEVDX09CSkVDVF9QSU5ORUQgYXJlCj4gZXNzZW50aWFsLiBPciBlbHNlIHRo ZSBrZXJuZWwgKndpbGwqIG1vdmUgc3Bpbi0+cG9sbF9oYW5kbGUgYW5kIHRoZW4gaXQKPiBpcyBm dWJhci4KCldoeSB0aGUgY2FsbGVyIGhhcyB0byBkbyBpdD8gSXQgaXMgcHJvdmlkaW5nIG9iaiBh cnJheSB3aGljaCBnZXRzIApwb3B1bGF0ZWQgYnkgdGhlIGhlbHBlciBhbmQgYnkgdGhlIGtlcm5l bC4gSWYgSSBhZGQgRVhFQ19PQkpFQ1RfUElOTkVEIAp0byB0aGUgaGVscGVyIGlzIHRoZXJlIGEg cmVtYWluaW5nIHByb2JsZW0/CgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaWd0LWRldgo=