From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: References: <20180511071141.24581-1-chris@chris-wilson.co.uk> From: Tvrtko Ursulin Message-ID: <203943cb-da94-14e0-bc62-4705ef4e8a8c@linux.intel.com> Date: Fri, 11 May 2018 09:31:52 +0100 MIME-Version: 1.0 In-Reply-To: <20180511071141.24581-1-chris@chris-wilson.co.uk> Content-Language: en-GB Subject: Re: [igt-dev] [Intel-gfx] [PATCH i-g-t] benchmarks/wsim: Simulate and interpret .wsim 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 , intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-ID: Ck9uIDExLzA1LzIwMTggMDg6MTEsIENocmlzIFdpbHNvbiB3cm90ZToKPiBBIGxpdHRsZSB0b29s IEkndmUgYmVlbiBtZWFuaW5nIHRvIHdyaXRlIGZvciBhIHdoaWxlLi4uIENvbnZlcnQgdGhlCj4g LndzaW0gaW50byB0aGVpciBkYWcgYW5kIGZpbmQgdGhlIGxvbmdlc3QgY2hhaW5zIGFuZCBldmFs dWF0ZSB0aGVtIG9uIGFuCj4gc2ltdWxhdGVkIG1hY2hpbmUuCgpWZXJ5IGNvb2whCgpCdXQgSSB0 aGluayB5b3UgbmVlZCB0byBoYW5kbGUgdGhlICdzJyBjb21tYW5kIHdoaWNoIGFwcGVhcnMgaW4g dGhlIAppbnRlcmVzdGluZyB3b3JrbG9hZHMuIE1heWJlIHlvdSBjb3VsZCBqdXN0IGZha2UgaXQg YXMgYSB6ZXJvIGR1cmF0aW9uIApiYXRjaCB3aXRoIGEgZGF0YSBkZXBlbmRlbmN5LgoKRmVuY2Ug cmVsYXRlZCBjb21tYW5kcyB3b3VsZCBhbHNvIGJlIHVzZWZ1bCBidXQgbW9yZSBkaWZmaWN1bHQg SSBndWVzcy4gCkFzIHdvdWxkIHRocm90dGxpbmcuCgpEZWxheXMgY291bGQgbWF5YmUgYmUgZmFr ZWQgYXMgYmF0Y2hlcyBhcyB3ZWxsIGJ5IGFkZGluZyBpbnB1dCAKZGVwZW5kZW5jeSB0byBldmVy eXRoaW5nIHByZWNlZGluZyBpdC4KClJlZ2FyZHMsCgpUdnJ0a28KCj4gCj4gU2lnbmVkLW9mZi1i eTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IFR2cnRrbyBV cnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gLS0tCj4gICBiZW5jaG1hcmtzL01h a2VmaWxlLnNvdXJjZXMgfCAgIDEgKwo+ICAgYmVuY2htYXJrcy9zaW1fd3NpbS5jICAgICAgIHwg NDM0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgMiBmaWxlcyBjaGFu Z2VkLCA0MzUgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGJlbmNobWFya3Mv c2ltX3dzaW0uYwo+IAo+IGRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL01ha2VmaWxlLnNvdXJjZXMg Yi9iZW5jaG1hcmtzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCBkMTUwMDM1YWEuLmI4MGE3NjQ0 YyAxMDA2NDQKPiAtLS0gYS9iZW5jaG1hcmtzL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi9iZW5j aG1hcmtzL01ha2VmaWxlLnNvdXJjZXMKPiBAQCAtMTcsNiArMTcsNyBAQCBiZW5jaG1hcmtzX3By b2dfbGlzdCA9CQkJXAo+ICAgCWdlbV93c2ltCQkJXAo+ICAgCWttc192YmxhbmsJCQlcCj4gICAJ cHJpbWVfbG9va3VwCQkJXAo+ICsJc2ltX3dzaW0JCQlcCj4gICAJdmdlbV9tbWFwCQkJXAo+ICAg CSQoTlVMTCkKPiAgIAo+IGRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3NpbV93c2ltLmMgYi9iZW5j aG1hcmtzL3NpbV93c2ltLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MC4uY2I4ZTdhZGM0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2JlbmNobWFya3Mvc2ltX3dzaW0u Ywo+IEBAIC0wLDAgKzEsNDM0IEBACj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8 c3RkbGliLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArCj4gKyNpbmNsdWRlICJpZ3RfYXV4 LmgiCj4gKwo+ICsjaWYgMAo+ICsjZGVmaW5lIERCRyguLi4pIHByaW50ZihfX1ZBX0FSR1NfXykK PiArI2Vsc2UKPiArI2RlZmluZSBEQkcoLi4uKSBkbyB7IH0gd2hpbGUoMCkKPiArI2VuZGlmCj4g Kwo+ICtzdHJ1Y3QgZGVwZW5kZW5jeSB7Cj4gKwlzdHJ1Y3QgdGFzayAqc2lnbmFsOwo+ICsJc3Ry dWN0IGlndF9saXN0IGxpbms7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdGFzayB7Cj4gKwlzdHJ1Y3Qg aWd0X2xpc3QgbGluazsKPiArCXN0cnVjdCBpZ3RfbGlzdCBzY2hlZDsKPiArCXN0cnVjdCBpZ3Rf bGlzdCBzaWduYWxzOwo+ICsJaW50IHN0ZXA7Cj4gKwlpbnQgY3R4Owo+ICsJaW50IGNsYXNzOwo+ ICsJaW50IGluc3RhbmNlOwo+ICsJbG9uZyBtaW4sIG1heDsKPiArCWxvbmcgZHVyYXRpb247Cj4g Kwlsb25nIGRlYWRsaW5lOwo+ICsJYm9vbCB2aXNpdGVkOwo+ICt9Owo+ICsKPiArc3RydWN0IHdv cmsgewo+ICsJc3RydWN0IHRhc2sgKip0YXNrczsKPiArCXVuc2lnbmVkIGludCBjb3VudCwgc2l6 ZTsKPiArCj4gKwlzdHJ1Y3QgaWd0X2xpc3QgZW5kczsKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lk IGFkZF9kZXBlbmRlbmN5KHN0cnVjdCB0YXNrICp0YXNrLCBzdHJ1Y3QgdGFzayAqc2lnbmFsKQo+ ICt7Cj4gKwlzdHJ1Y3QgZGVwZW5kZW5jeSAqZGVwOwo+ICsKPiArCURCRygiJXMgJWQgKGNvbnRl eHQgJWQsIGVuZ2luZSAlZCkgLT4gJWQgKGNvbnRleHQgJWQsIGVuZ2luZSAlZClcbiIsCj4gKwkg ICAgX19mdW5jX18sCj4gKwkgICAgc2lnbmFsLT5zdGVwLCBzaWduYWwtPmN0eCwgc2lnbmFsLT5j bGFzcywKPiArCSAgICB0YXNrLT5zdGVwLCB0YXNrLT5jdHgsIHRhc2stPmNsYXNzKTsKPiArCj4g KwlkZXAgPSBtYWxsb2Moc2l6ZW9mKCpkZXApKTsKPiArCWRlcC0+c2lnbmFsID0gc2lnbmFsOwo+ ICsJaWd0X2xpc3RfYWRkKCZkZXAtPmxpbmssICZ0YXNrLT5zaWduYWxzKTsKPiArCWlndF9saXN0 X2RlbCgmc2lnbmFsLT5saW5rKTsKPiArCWlndF9saXN0X2luaXQoJnNpZ25hbC0+bGluayk7Cj4g K30KPiArCj4gK2VudW0gY2xhc3Mgewo+ICsJUkNTLAo+ICsJQkNTLAo+ICsJVkNTLAo+ICsJVkVD UywKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIGFkZF90YXNrKHN0cnVjdCB3b3JrICp3b3JrLCBj aGFyICpsaW5lKQo+ICt7Cj4gKwlzdGF0aWMgY29uc3QgY2hhciAqZW5naW5lc1tdID0gewo+ICsJ CVtSQ1NdICA9ICJyY3MiLAo+ICsJCVtCQ1NdICA9ICJiY3MiLAo+ICsJCVtWQ1NdICA9ICJ2Y3Mi LAo+ICsJCVtWRUNTXSA9ICJ2ZWNzIiwKPiArCX07Cj4gKwlzdHJ1Y3QgdGFzayAqdGFzazsKPiAr CWNoYXIgKnRva2VuOwo+ICsJaW50IGk7Cj4gKwo+ICsJdGFzayA9IG1hbGxvYyhzaXplb2YoKnRh c2spKTsKPiArCj4gKwlpZ3RfbGlzdF9pbml0KCZ0YXNrLT5zaWduYWxzKTsKPiArCWlndF9saXN0 X2luaXQoJnRhc2stPnNjaGVkKTsKPiArCXRhc2stPnN0ZXAgPSB3b3JrLT5jb3VudDsKPiArCXRh c2stPnZpc2l0ZWQgPSBmYWxzZTsKPiArCj4gKwkvKgo+ICsJICogMS5SQ1MuMjgwMC0zMTAwLi0x LjAKPiArCSAqIC0gY29udGV4dAo+ICsJICogLSBlbmdpbmUKPiArCSAqIC0gZGVsYXkKPiArCSAq IC0gZGVwZW5kZW5jaWVzCj4gKwkgKiAtIHN5bmMKPiArCSAqLwo+ICsJREJHKCJsaW5lPSclcydc biIsIGxpbmUpOwo+ICsKPiArCS8qIGNvbnRleHQgKi8KPiArCXRva2VuID0gc3RydG9rKGxpbmUs ICIuIik7Cj4gKwlEQkcoImNvbnRleHQ9JyVzJ1xuIiwgdG9rZW4pOwo+ICsJdGFzay0+Y3R4ICA9 IGF0b2kodG9rZW4pOwo+ICsJaWYgKCF0YXNrLT5jdHgpCj4gKwkJcmV0dXJuOwo+ICsKPiArCS8q IGVuZ2luZSAqLwo+ICsJdG9rZW4gPSBzdHJ0b2soTlVMTCwgIi4iKTsKPiArCURCRygiZW5naW5l PSclcydcbiIsIHRva2VuKTsKPiArCXRhc2stPmNsYXNzID0gLTE7Cj4gKwlmb3IgKGkgPSAwOyBp IDwgc2l6ZW9mKGVuZ2luZXMpL3NpemVvZigqZW5naW5lcyk7IGkrKykgewo+ICsJCWNvbnN0IGlu dCBsZW4gPSBzdHJsZW4oZW5naW5lc1tpXSk7Cj4gKwkJaWYgKCFzdHJuY2FzZWNtcCh0b2tlbiwg ZW5naW5lc1tpXSwgbGVuKSkgewo+ICsJCQl0YXNrLT5jbGFzcyA9IGk7Cj4gKwkJCWlmICh0b2tl bltsZW5dKQo+ICsJCQkJdGFzay0+aW5zdGFuY2UgPSBhdG9pKHRva2VuICsgbGVuKTsKPiArCQkJ ZWxzZQo+ICsJCQkJdGFzay0+aW5zdGFuY2UgPSAtMTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJ fQo+ICsKPiArCS8qIGRlbGF5ICovCj4gKwl0b2tlbiA9IHN0cnRvayhOVUxMLCAiLiIpOwo+ICsJ REJHKCJkZWxheT0nJXMnXG4iLCB0b2tlbik7Cj4gKwl0YXNrLT5taW4gPSBzdHJ0b2wodG9rZW4s ICZ0b2tlbiwgMCk7Cj4gKwlpZiAoKnRva2VuKQo+ICsJCXRhc2stPm1heCA9IHN0cnRvbCh0b2tl biArIDEsIE5VTEwsIDApOwo+ICsJZWxzZQo+ICsJCXRhc2stPm1heCA9IHRhc2stPm1pbjsKPiAr CXRhc2stPmR1cmF0aW9uID0gKHRhc2stPm1pbiArIHRhc2stPm1heCkgLyAyOwo+ICsJREJHKCJt aW49JWx1LCBtYXg9JWx1OyBkdXJhdGlvbj0lbHVcbiIsIHRhc2stPm1pbiwgdGFzay0+bWF4LCB0 YXNrLT5kdXJhdGlvbik7Cj4gKwo+ICsJLyogZGVwZW5kZW5jaWVzICovCj4gKwl0b2tlbiA9IHN0 cnRvayhOVUxMLCAiLiIpOwo+ICsJREJHKCJkZXBzPSclcydcbiIsIHRva2VuKTsKPiArCXdoaWxl ICgoaSA9IHN0cnRvbCh0b2tlbiwgJnRva2VuLCAwKSkpIHsKPiArCQlhZGRfZGVwZW5kZW5jeSh0 YXNrLCB3b3JrLT50YXNrc1t3b3JrLT5jb3VudCArIGldKTsKPiArCQlpZiAoKnRva2VuKQo+ICsJ CQl0b2tlbisrOwo+ICsJfQo+ICsKPiArCS8qIGFkZCBhIGRlcGVuZGVuY3kgZm9yIHRoZSBjb250 ZXh0K2VuZ2luZSB0aW1lbGluZSAqLwo+ICsJZm9yIChpID0gd29yay0+Y291bnQ7IC0taSA+PSAw OyApIHsKPiArCQlpZiAod29yay0+dGFza3NbaV0tPmN0eCA9PSB0YXNrLT5jdHggJiYKPiArCQkg ICAgd29yay0+dGFza3NbaV0tPmNsYXNzID09IHRhc2stPmNsYXNzKSB7Cj4gKwkJCWFkZF9kZXBl bmRlbmN5KHRhc2ssIHdvcmstPnRhc2tzW2ldKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ ICsKPiArCWlndF9saXN0X2FkZCgmdGFzay0+bGluaywgJndvcmstPmVuZHMpOwo+ICsJd29yay0+ dGFza3Nbd29yay0+Y291bnQrK10gPSB0YXNrOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHdv cmsgKnBhcnNlX3dvcmsoRklMRSAqZmlsZSkKPiArewo+ICsJc3RydWN0IHdvcmsgKndvcms7Cj4g KwljaGFyICpsaW5lID0gTlVMTDsKPiArCXNpemVfdCBsZW4gPSAwOwo+ICsKPiArCXdvcmsgPSBt YWxsb2Moc2l6ZW9mKCp3b3JrKSk7Cj4gKwlpZ3RfbGlzdF9pbml0KCZ3b3JrLT5lbmRzKTsKPiAr Cj4gKwl3b3JrLT5zaXplID0gNjQ7Cj4gKwl3b3JrLT5jb3VudCA9IDA7Cj4gKwl3b3JrLT50YXNr cyA9IG1hbGxvYyhzaXplb2YoKndvcmstPnRhc2tzKSAqIHdvcmstPnNpemUpOwo+ICsKPiArCXdo aWxlIChnZXRsaW5lKCZsaW5lLCAmbGVuLCBmaWxlKSAhPSAtMSkgewo+ICsJCWlmICh3b3JrLT5j b3VudCA9PSB3b3JrLT5zaXplKSB7Cj4gKwkJCXdvcmstPnRhc2tzID0gcmVhbGxvYyh3b3JrLT50 YXNrcywKPiArCQkJCQkgICAgICBzaXplb2YoKndvcmstPnRhc2tzKSAqIHdvcmstPnNpemUpOwo+ ICsJCQl3b3JrLT5zaXplICo9IDI7Cj4gKwkJfQo+ICsJCWFkZF90YXNrKHdvcmssIGxpbmUpOwo+ ICsJfQo+ICsKPiArCWZyZWUobGluZSk7Cj4gKwo+ICsJREJHKCIlZCB0YXNrc1xuIiwgd29yay0+ Y291bnQpOwo+ICsJcmV0dXJuIHdvcms7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25n IHN1bV9kdXJhdGlvbnMoc3RydWN0IHRhc2sgKnRhc2spCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcg bWF4X2R1cmF0aW9uID0gMDsKPiArCXN0cnVjdCB0YXNrICpzaWduYWwgPSBOVUxMOwo+ICsJc3Ry dWN0IGRlcGVuZGVuY3kgKmRlcDsKPiArCj4gKwlpZ3RfbGlzdF9mb3JfZWFjaChkZXAsICZ0YXNr LT5zaWduYWxzLCBsaW5rKSB7Cj4gKwkJaWYgKGRlcC0+c2lnbmFsLT5kdXJhdGlvbiA+IG1heF9k dXJhdGlvbikgewo+ICsJCQlzaWduYWwgPSBkZXAtPnNpZ25hbDsKPiArCQkJbWF4X2R1cmF0aW9u ID0gc2lnbmFsLT5kdXJhdGlvbjsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRhc2stPmR1 cmF0aW9uICsgKHNpZ25hbCA/IHN1bV9kdXJhdGlvbnMoc2lnbmFsKSA6IDApOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBpZGVhbF9kZXB0aChzdHJ1Y3Qgd29yayAqd29yaykKPiArewo+ICsJdW5z aWduZWQgbG9uZyB0b3RhbF9kdXJhdGlvbjsKPiArCXVuc2lnbmVkIGxvbmcgbWF4X2R1cmF0aW9u Owo+ICsJc3RydWN0IHRhc2sgKnRhc2s7Cj4gKwlpbnQgaTsKPiArCj4gKwkvKgo+ICsJICogVGhl IGlkZWFsIGRlcHRoIGlzIHRoZSBsb25nZXN0IGNoYWluIG9mIGRlcGVuZGVuY2llcyBhcyB0aGUK PiArCSAqIGRlcGVuZGVuY3kgY2hhaW4gcmVxdWlyZXMgc2VxdWVudGlhbCB0YXNrIGV4ZWN1dGlv bi4gRWFjaAo+ICsJICogY2hhaW4gaXMgYXNzdW1lZCB0byBiZSBydW4gaW4gcGFyYWxsZWwgb24g YW4gaW5maW5pdGUgc2V0IG9mCj4gKwkgKiBlbmdpbmVzLCBzbyB0aGUgcmF0ZWxpbWl0aW5nIHN0 ZXAgaXMgaXRzIGxvbmdlc3QgcGF0aC4KPiArCSAqLwo+ICsJbWF4X2R1cmF0aW9uID0gMDsKPiAr CWlndF9saXN0X2Zvcl9lYWNoKHRhc2ssICZ3b3JrLT5lbmRzLCBsaW5rKSB7Cj4gKwkJdW5zaWdu ZWQgbG9uZyBkdXJhdGlvbiA9IHN1bV9kdXJhdGlvbnModGFzayk7Cj4gKwkJaWYgKGR1cmF0aW9u ID4gbWF4X2R1cmF0aW9uKQo+ICsJCQltYXhfZHVyYXRpb24gPSBkdXJhdGlvbjsKPiArCX0KPiAr Cj4gKwl0b3RhbF9kdXJhdGlvbiA9IDA7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgd29yay0+Y291bnQ7 IGkrKykKPiArCQl0b3RhbF9kdXJhdGlvbiArPSB3b3JrLT50YXNrc1tpXS0+ZHVyYXRpb247Cj4g Kwo+ICsJcHJpbnRmKCJTaW5nbGUgY2xpZW50XG4iKTsKPiArCXByaW50ZigiICAgdG90YWwgZHVy YXRpb24gJWx1dXM7ICUuMmYgd3BzXG4iLCB0b3RhbF9kdXJhdGlvbiwgMWU2L3RvdGFsX2R1cmF0 aW9uKTsKPiArCXByaW50ZigiICAgaWRlYWwgZHVyYXRpb24gJWx1dXM7ICUuMmYgd3BzXG4iLCBt YXhfZHVyYXRpb24sIDFlNi9tYXhfZHVyYXRpb24pOwo+ICt9Cj4gKwo+ICtzdHJ1Y3Qgc2ltX2Ns YXNzIHsKPiArCWludCBuaW5zdGFuY2U7Cj4gKwl1bnNpZ25lZCBpbnQgaW5zdGFuY2VzWzRdOwo+ ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgc2luZ2xlX2NsaWVudChzdHJ1Y3Qgd29yayAqd29yaykK PiArewo+ICsJc3RydWN0IHNpbV9jbGFzcyBzaW1bXSA9IHsKPiArCQlbUkNTXSAgPSB7IDEgfSwK PiArCQlbQkNTXSAgPSB7IDEgfSwKPiArCQlbVkNTXSAgPSB7IDIgfSwKPiArCQlbVkVDU10gPSB7 IDEgfSwKPiArCX0sICpjbGFzczsKPiArCUlHVF9MSVNUKHNjaGVkKTsKPiArCXN0cnVjdCB0YXNr ICp0YXNrOwo+ICsJdW5zaWduZWQgbG9uZyBtYXg7Cj4gKwlpbnQgaSwgajsKPiArCj4gKwlmb3Ig KGkgPSAwOyBpIDwgd29yay0+Y291bnQ7IGkrKykKPiArCQlpZ3RfbGlzdF9pbml0KCZ3b3JrLT50 YXNrc1tpXS0+c2NoZWQpOwo+ICsKPiArCWlndF9saXN0X2Zvcl9lYWNoKHRhc2ssICZ3b3JrLT5l bmRzLCBsaW5rKSB7Cj4gKwkJaWd0X2xpc3RfYWRkX3RhaWwoJnRhc2stPnNjaGVkLCAmc2NoZWQp Owo+ICsJfQo+ICsKPiArCWlndF9saXN0X2Zvcl9lYWNoKHRhc2ssICZzY2hlZCwgc2NoZWQpIHsK PiArCQlzdHJ1Y3QgZGVwZW5kZW5jeSAqZGVwOwo+ICsKPiArCQlpZ3RfbGlzdF9mb3JfZWFjaChk ZXAsICZ0YXNrLT5zaWduYWxzLCBsaW5rKQo+ICsJCQlpZ3RfbGlzdF9tb3ZlX3RhaWwoJmRlcC0+ c2lnbmFsLT5zY2hlZCwgJnNjaGVkKTsKPiArCX0KPiArCj4gKwlpZ3RfbGlzdF9mb3JfZWFjaF9y ZXZlcnNlKHRhc2ssICZzY2hlZCwgc2NoZWQpIHsKPiArCQlzdHJ1Y3QgZGVwZW5kZW5jeSAqZGVw Owo+ICsJCWludCBpbnN0YW5jZTsKPiArCj4gKwkJY2xhc3MgPSAmc2ltW3Rhc2stPmNsYXNzXTsK PiArCQltYXggPSBjbGFzcy0+aW5zdGFuY2VzWzBdOwo+ICsKPiArCQlpbnN0YW5jZSA9IHRhc2st Pmluc3RhbmNlOwo+ICsJCWlmIChpbnN0YW5jZSA8IDApIHsKPiArCQkJaW5zdGFuY2UgPSAwOwo+ ICsJCQlmb3IgKGkgPSAxOyBpIDwgY2xhc3MtPm5pbnN0YW5jZTsgaSsrKSB7Cj4gKwkJCQlpZiAo Y2xhc3MtPmluc3RhbmNlc1tpXSA8IG1heCkgewo+ICsJCQkJCW1heCA9IGNsYXNzLT5pbnN0YW5j ZXNbaV07Cj4gKwkJCQkJaW5zdGFuY2UgPSBpOwo+ICsJCQkJfQo+ICsJCQl9Cj4gKwkJfQo+ICsK PiArCQkvKgo+ICsJCSAqIEdyZWVkeSAoZmlyc3QgYXZhaWxhYmxlKSwgbm90IHRydWUgb3B0aW1h bCBzY2hlZHVsaW5nLgo+ICsJCSAqCj4gKwkJICogRm9yIG9wdGltYWwsIHdlIGRvIGhhdmUgdG8g Y29tcHV0ZSB0aGUgZ2xvYmFsIG9wdGltYWwKPiArCQkgKiBvcmRlcmluZyBieSBjaGVja2luZyBl dmVyeSBwZXJtdXRhdGlvbi4uLgo+ICsJCSAqLwo+ICsJCWlndF9saXN0X2Zvcl9lYWNoKGRlcCwg JnRhc2stPnNpZ25hbHMsIGxpbmspIHsKPiArCQkJaWYgKGRlcC0+c2lnbmFsLT5kZWFkbGluZSA+ IG1heCkKPiArCQkJCW1heCA9IGRlcC0+c2lnbmFsLT5kZWFkbGluZTsKPiArCQl9Cj4gKwo+ICsJ CURCRygidGFzayAlZDogZW5naW5lICVkLCBpbnN0YW5jZSAlZDsgZmluaXNoICVsdVxuIiwKPiAr CQkgICAgdGFzay0+c3RlcCwgdGFzay0+Y2xhc3MsIGluc3RhbmNlLCBtYXgpOwo+ICsKPiArCQl0 YXNrLT5kZWFkbGluZSA9IG1heCArIHRhc2stPmR1cmF0aW9uOwo+ICsJCWNsYXNzLT5pbnN0YW5j ZXNbaW5zdGFuY2VdID0gdGFzay0+ZGVhZGxpbmU7Cj4gKwl9Cj4gKwo+ICsJbWF4ID0gMDsKPiAr CWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2ltKS9zaXplb2Yoc2ltWzBdKTsgaSsrKSB7Cj4gKwkJ Y2xhc3MgPSAmc2ltW2ldOwo+ICsJCWZvciAoaiA9IDA7IGogPCBjbGFzcy0+bmluc3RhbmNlOyBq KyspIHsKPiArCQkJaWYgKGNsYXNzLT5pbnN0YW5jZXNbal0gPiBtYXgpCj4gKwkJCQltYXggPSBj bGFzcy0+aW5zdGFuY2VzW2pdOwo+ICsJCX0KPiArCX0KPiArCj4gKwlwcmludGYoIlNpbXVsYXRl ZCBjbGllbnQ6XG4iKTsKPiArCXByaW50ZigiICAgZHVyYXRpb24gJWx1dXM7ICUuMmYgd3BzXG4i LCBtYXgsIDFlNi9tYXgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwYWNrZWRfY2xpZW50cyhz dHJ1Y3Qgd29yayAqd29yaykKPiArewo+ICsJc3RydWN0IHNpbV9jbGFzcyBzaW1bXSA9IHsKPiAr CQlbUkNTXSAgPSB7IDEgfSwKPiArCQlbQkNTXSAgPSB7IDEgfSwKPiArCQlbVkNTXSAgPSB7IDIg fSwKPiArCQlbVkVDU10gPSB7IDEgfSwKPiArCX0sICpjbGFzczsKPiArCUlHVF9MSVNUKHNjaGVk KTsKPiArCXN0cnVjdCB0YXNrICp0YXNrOwo+ICsJdW5zaWduZWQgbG9uZyBtaW47Cj4gKwlpbnQg aSwgajsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgd29yay0+Y291bnQ7IGkrKykKPiArCQlpZ3Rf bGlzdF9pbml0KCZ3b3JrLT50YXNrc1tpXS0+c2NoZWQpOwo+ICsKPiArCWlndF9saXN0X2Zvcl9l YWNoKHRhc2ssICZ3b3JrLT5lbmRzLCBsaW5rKQo+ICsJCWlndF9saXN0X2FkZF90YWlsKCZ0YXNr LT5zY2hlZCwgJnNjaGVkKTsKPiArCj4gKwlpZ3RfbGlzdF9mb3JfZWFjaCh0YXNrLCAmc2NoZWQs IHNjaGVkKSB7Cj4gKwkJc3RydWN0IGRlcGVuZGVuY3kgKmRlcDsKPiArCj4gKwkJaWd0X2xpc3Rf Zm9yX2VhY2goZGVwLCAmdGFzay0+c2lnbmFscywgbGluaykKPiArCQkJaWd0X2xpc3RfbW92ZV90 YWlsKCZkZXAtPnNpZ25hbC0+c2NoZWQsICZzY2hlZCk7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAq IENvbXB1dGUgdGhlIG1heGltdW0gZHVyYXRpb24gcmVxdWlyZWQgb24gYW55IGVuZ2luZS4KPiAr CSAqCj4gKwkgKiBXaXRoIHN1ZmZpY2llbnQgY2xpZW50cyBmb3JjaW5nIG1heGltdW0gb2NjdXBh bmN5IHVuZGVyIHRoZWlyIHdlaWdodCwKPiArCSAqIHRoZSByYXRlbGltaXRpbmcgc3RlcCBiZWNv bWVzIGEgc2luZ2xlIGVuZ2luZSBhbmQgaG93IG1hbnkgY2xpZW50cwo+ICsJICogaXQgdGFrZXMg dG8gZmlsbC4KPiArCSAqLwo+ICsJaWd0X2xpc3RfZm9yX2VhY2hfcmV2ZXJzZSh0YXNrLCAmc2No ZWQsIHNjaGVkKSB7Cj4gKwkJaW50IGluc3RhbmNlOwo+ICsKPiArCQljbGFzcyA9ICZzaW1bdGFz ay0+Y2xhc3NdOwo+ICsJCWluc3RhbmNlID0gdGFzay0+aW5zdGFuY2U7Cj4gKwkJaWYgKGluc3Rh bmNlIDwgMCkgewo+ICsJCQlpbnN0YW5jZSA9IDA7Cj4gKwkJCW1pbiA9IGNsYXNzLT5pbnN0YW5j ZXNbMF07Cj4gKwkJCWZvciAoaSA9IDE7IGkgPCBjbGFzcy0+bmluc3RhbmNlOyBpKyspIHsKPiAr CQkJCWlmIChjbGFzcy0+aW5zdGFuY2VzW2ldIDwgbWluKSB7Cj4gKwkJCQkJbWluID0gY2xhc3Mt Pmluc3RhbmNlc1tpXTsKPiArCQkJCQlpbnN0YW5jZSA9IGk7Cj4gKwkJCQl9Cj4gKwkJCX0KPiAr CQl9Cj4gKwo+ICsJCWNsYXNzLT5pbnN0YW5jZXNbaW5zdGFuY2VdICs9IHRhc2stPmR1cmF0aW9u Owo+ICsJfQo+ICsKPiArCW1pbiA9IDA7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNpbSkv c2l6ZW9mKHNpbVswXSk7IGkrKykgewo+ICsJCWNsYXNzID0gJnNpbVtpXTsKPiArCQlmb3IgKGog PSAwOyBqIDwgY2xhc3MtPm5pbnN0YW5jZTsgaisrKSB7Cj4gKwkJCWlmIChjbGFzcy0+aW5zdGFu Y2VzW2pdID4gbWluKQo+ICsJCQkJbWluID0gY2xhc3MtPmluc3RhbmNlc1tqXTsKPiArCQl9Cj4g Kwl9Cj4gKwo+ICsJcHJpbnRmKCJQYWNrZWQgY2xpZW50czpcbiIpOwo+ICsJcHJpbnRmKCIgICBk dXJhdGlvbiAlbHV1czsgJS4yZiB3cHNcbiIsIG1pbiwgMWU2L21pbik7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGdyYXBodml6KHN0cnVjdCB3b3JrICp3b3JrKQo+ICt7Cj4gKyNpZiAwCj4gKwlp bnQgaSwgajsKPiArCj4gKwlwcmludGYoImRpZ3JhcGgge1xuIik7Cj4gKwlwcmludGYoIiAgcmFu a2Rpcj1MUjtcbiIpOwo+ICsJcHJpbnRmKCIgIHNwbGluZXM9bGluZTtcbiIpOwo+ICsJcHJpbnRm KCJcbiIpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCB3b3JrLT5jb3VudDsgaSsrKSB7Cj4gKwkJ c3RydWN0IHRhc2sgKnRhc2sgPSB3b3JrLT50YXNrc1tpXTsKPiArCj4gKwkJaWYgKHRhc2stPnZp c2l0ZWQpCj4gKwkJCWdvdG8gc2tpcDsKPiArCj4gKwkJcHJpbnRmKCIgIHN1YmdyYXBoIGNsdXN0 ZXJfJWQge1xuIiwgdGFzay0+Y3R4KTsKPiArCQlwcmludGYoIiAgICBsYWJlbD1cIkNvbnRleHQg JWRcIlxuIiwgdGFzay0+Y3R4KTsKPiArCQlmb3IgKGogPSBpOyBqIDwgd29yay0+Y291bnQ7IGor Kykgewo+ICsJCQlpZiAod29yay0+dGFza3Nbal0tPmN0eCA9PSB0YXNrLT5jdHgpIHsKPiArCQkJ CXByaW50ZigiICAgIHRhc2tfJTAzZDtcbiIsIGopOwo+ICsJCQkJd29yay0+dGFza3Nbal0tPnZp c2l0ZWQgPSB0cnVlOwo+ICsJCQl9Cj4gKwkJfQo+ICsJCXByaW50ZigiICB9XG5cbiIpOwo+ICsK PiArc2tpcDoKPiArCQl0YXNrLT52aXNpdGVkID0gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IHdvcmstPmNvdW50OyBpKyspIHsKPiArCQlzdHJ1Y3QgdGFzayAqdGFzayA9IHdv cmstPnRhc2tzW2ldOwo+ICsJCXN0cnVjdCBkZXBlbmRlbmN5ICpkZXA7Cj4gKwo+ICsJCWlndF9s aXN0X2Zvcl9lYWNoKGRlcCwgJnRhc2stPnNpZ25hbHMsIGxpbmspIHsKPiArCQkJcHJpbnRmKCIg IHRhc2tfJTAzZCAtPiB0YXNrXyUwM2Q7XG4iLAo+ICsJCQkgICAgICAgZGVwLT5zaWduYWwtPnN0 ZXAsIHRhc2stPnN0ZXApOwo+ICsJCX0KPiArCX0KPiArCj4gKwlwcmludGYoIn1cbiIpOwo+ICsj ZW5kaWYKPiArfQo+ICsKPiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICt7Cj4g KwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7Cj4gKwkJRklMRSAq ZmlsZSA9IGZvcGVuKGFyZ3ZbaV0sICJyIik7Cj4gKwkJc3RydWN0IHdvcmsgKndvcms7Cj4gKwo+ ICsJCWlmICghZmlsZSkgewo+ICsJCQlwZXJyb3IoYXJndltpXSk7Cj4gKwkJCXJldHVybiAxOwo+ ICsJCX0KPiArCj4gKwkJd29yayA9IHBhcnNlX3dvcmsoZmlsZSk7Cj4gKwkJZmNsb3NlKGZpbGUp Owo+ICsKPiArCQlncmFwaHZpeih3b3JrKTsKPiArCj4gKwkJaWRlYWxfZGVwdGgod29yayk7Cj4g KwkJc2luZ2xlX2NsaWVudCh3b3JrKTsKPiArCQlwYWNrZWRfY2xpZW50cyh3b3JrKTsKPiArCX0K PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2lndC1kZXYK From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t] benchmarks/wsim: Simulate and interpret .wsim Date: Fri, 11 May 2018 09:31:52 +0100 Message-ID: <203943cb-da94-14e0-bc62-4705ef4e8a8c@linux.intel.com> References: <20180511071141.24581-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180511071141.24581-1-chris@chris-wilson.co.uk> Content-Language: en-GB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDExLzA1LzIwMTggMDg6MTEsIENocmlzIFdpbHNvbiB3cm90ZToKPiBBIGxpdHRsZSB0b29s IEkndmUgYmVlbiBtZWFuaW5nIHRvIHdyaXRlIGZvciBhIHdoaWxlLi4uIENvbnZlcnQgdGhlCj4g LndzaW0gaW50byB0aGVpciBkYWcgYW5kIGZpbmQgdGhlIGxvbmdlc3QgY2hhaW5zIGFuZCBldmFs dWF0ZSB0aGVtIG9uIGFuCj4gc2ltdWxhdGVkIG1hY2hpbmUuCgpWZXJ5IGNvb2whCgpCdXQgSSB0 aGluayB5b3UgbmVlZCB0byBoYW5kbGUgdGhlICdzJyBjb21tYW5kIHdoaWNoIGFwcGVhcnMgaW4g dGhlIAppbnRlcmVzdGluZyB3b3JrbG9hZHMuIE1heWJlIHlvdSBjb3VsZCBqdXN0IGZha2UgaXQg YXMgYSB6ZXJvIGR1cmF0aW9uIApiYXRjaCB3aXRoIGEgZGF0YSBkZXBlbmRlbmN5LgoKRmVuY2Ug cmVsYXRlZCBjb21tYW5kcyB3b3VsZCBhbHNvIGJlIHVzZWZ1bCBidXQgbW9yZSBkaWZmaWN1bHQg SSBndWVzcy4gCkFzIHdvdWxkIHRocm90dGxpbmcuCgpEZWxheXMgY291bGQgbWF5YmUgYmUgZmFr ZWQgYXMgYmF0Y2hlcyBhcyB3ZWxsIGJ5IGFkZGluZyBpbnB1dCAKZGVwZW5kZW5jeSB0byBldmVy eXRoaW5nIHByZWNlZGluZyBpdC4KClJlZ2FyZHMsCgpUdnJ0a28KCj4gCj4gU2lnbmVkLW9mZi1i eTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IFR2cnRrbyBV cnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gLS0tCj4gICBiZW5jaG1hcmtzL01h a2VmaWxlLnNvdXJjZXMgfCAgIDEgKwo+ICAgYmVuY2htYXJrcy9zaW1fd3NpbS5jICAgICAgIHwg NDM0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgMiBmaWxlcyBjaGFu Z2VkLCA0MzUgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGJlbmNobWFya3Mv c2ltX3dzaW0uYwo+IAo+IGRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL01ha2VmaWxlLnNvdXJjZXMg Yi9iZW5jaG1hcmtzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCBkMTUwMDM1YWEuLmI4MGE3NjQ0 YyAxMDA2NDQKPiAtLS0gYS9iZW5jaG1hcmtzL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi9iZW5j aG1hcmtzL01ha2VmaWxlLnNvdXJjZXMKPiBAQCAtMTcsNiArMTcsNyBAQCBiZW5jaG1hcmtzX3By b2dfbGlzdCA9CQkJXAo+ICAgCWdlbV93c2ltCQkJXAo+ICAgCWttc192YmxhbmsJCQlcCj4gICAJ cHJpbWVfbG9va3VwCQkJXAo+ICsJc2ltX3dzaW0JCQlcCj4gICAJdmdlbV9tbWFwCQkJXAo+ICAg CSQoTlVMTCkKPiAgIAo+IGRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3NpbV93c2ltLmMgYi9iZW5j aG1hcmtzL3NpbV93c2ltLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MC4uY2I4ZTdhZGM0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2JlbmNobWFya3Mvc2ltX3dzaW0u Ywo+IEBAIC0wLDAgKzEsNDM0IEBACj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8 c3RkbGliLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArCj4gKyNpbmNsdWRlICJpZ3RfYXV4 LmgiCj4gKwo+ICsjaWYgMAo+ICsjZGVmaW5lIERCRyguLi4pIHByaW50ZihfX1ZBX0FSR1NfXykK PiArI2Vsc2UKPiArI2RlZmluZSBEQkcoLi4uKSBkbyB7IH0gd2hpbGUoMCkKPiArI2VuZGlmCj4g Kwo+ICtzdHJ1Y3QgZGVwZW5kZW5jeSB7Cj4gKwlzdHJ1Y3QgdGFzayAqc2lnbmFsOwo+ICsJc3Ry dWN0IGlndF9saXN0IGxpbms7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdGFzayB7Cj4gKwlzdHJ1Y3Qg aWd0X2xpc3QgbGluazsKPiArCXN0cnVjdCBpZ3RfbGlzdCBzY2hlZDsKPiArCXN0cnVjdCBpZ3Rf bGlzdCBzaWduYWxzOwo+ICsJaW50IHN0ZXA7Cj4gKwlpbnQgY3R4Owo+ICsJaW50IGNsYXNzOwo+ ICsJaW50IGluc3RhbmNlOwo+ICsJbG9uZyBtaW4sIG1heDsKPiArCWxvbmcgZHVyYXRpb247Cj4g Kwlsb25nIGRlYWRsaW5lOwo+ICsJYm9vbCB2aXNpdGVkOwo+ICt9Owo+ICsKPiArc3RydWN0IHdv cmsgewo+ICsJc3RydWN0IHRhc2sgKip0YXNrczsKPiArCXVuc2lnbmVkIGludCBjb3VudCwgc2l6 ZTsKPiArCj4gKwlzdHJ1Y3QgaWd0X2xpc3QgZW5kczsKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lk IGFkZF9kZXBlbmRlbmN5KHN0cnVjdCB0YXNrICp0YXNrLCBzdHJ1Y3QgdGFzayAqc2lnbmFsKQo+ ICt7Cj4gKwlzdHJ1Y3QgZGVwZW5kZW5jeSAqZGVwOwo+ICsKPiArCURCRygiJXMgJWQgKGNvbnRl eHQgJWQsIGVuZ2luZSAlZCkgLT4gJWQgKGNvbnRleHQgJWQsIGVuZ2luZSAlZClcbiIsCj4gKwkg ICAgX19mdW5jX18sCj4gKwkgICAgc2lnbmFsLT5zdGVwLCBzaWduYWwtPmN0eCwgc2lnbmFsLT5j bGFzcywKPiArCSAgICB0YXNrLT5zdGVwLCB0YXNrLT5jdHgsIHRhc2stPmNsYXNzKTsKPiArCj4g KwlkZXAgPSBtYWxsb2Moc2l6ZW9mKCpkZXApKTsKPiArCWRlcC0+c2lnbmFsID0gc2lnbmFsOwo+ ICsJaWd0X2xpc3RfYWRkKCZkZXAtPmxpbmssICZ0YXNrLT5zaWduYWxzKTsKPiArCWlndF9saXN0 X2RlbCgmc2lnbmFsLT5saW5rKTsKPiArCWlndF9saXN0X2luaXQoJnNpZ25hbC0+bGluayk7Cj4g K30KPiArCj4gK2VudW0gY2xhc3Mgewo+ICsJUkNTLAo+ICsJQkNTLAo+ICsJVkNTLAo+ICsJVkVD UywKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIGFkZF90YXNrKHN0cnVjdCB3b3JrICp3b3JrLCBj aGFyICpsaW5lKQo+ICt7Cj4gKwlzdGF0aWMgY29uc3QgY2hhciAqZW5naW5lc1tdID0gewo+ICsJ CVtSQ1NdICA9ICJyY3MiLAo+ICsJCVtCQ1NdICA9ICJiY3MiLAo+ICsJCVtWQ1NdICA9ICJ2Y3Mi LAo+ICsJCVtWRUNTXSA9ICJ2ZWNzIiwKPiArCX07Cj4gKwlzdHJ1Y3QgdGFzayAqdGFzazsKPiAr CWNoYXIgKnRva2VuOwo+ICsJaW50IGk7Cj4gKwo+ICsJdGFzayA9IG1hbGxvYyhzaXplb2YoKnRh c2spKTsKPiArCj4gKwlpZ3RfbGlzdF9pbml0KCZ0YXNrLT5zaWduYWxzKTsKPiArCWlndF9saXN0 X2luaXQoJnRhc2stPnNjaGVkKTsKPiArCXRhc2stPnN0ZXAgPSB3b3JrLT5jb3VudDsKPiArCXRh c2stPnZpc2l0ZWQgPSBmYWxzZTsKPiArCj4gKwkvKgo+ICsJICogMS5SQ1MuMjgwMC0zMTAwLi0x LjAKPiArCSAqIC0gY29udGV4dAo+ICsJICogLSBlbmdpbmUKPiArCSAqIC0gZGVsYXkKPiArCSAq IC0gZGVwZW5kZW5jaWVzCj4gKwkgKiAtIHN5bmMKPiArCSAqLwo+ICsJREJHKCJsaW5lPSclcydc biIsIGxpbmUpOwo+ICsKPiArCS8qIGNvbnRleHQgKi8KPiArCXRva2VuID0gc3RydG9rKGxpbmUs ICIuIik7Cj4gKwlEQkcoImNvbnRleHQ9JyVzJ1xuIiwgdG9rZW4pOwo+ICsJdGFzay0+Y3R4ICA9 IGF0b2kodG9rZW4pOwo+ICsJaWYgKCF0YXNrLT5jdHgpCj4gKwkJcmV0dXJuOwo+ICsKPiArCS8q IGVuZ2luZSAqLwo+ICsJdG9rZW4gPSBzdHJ0b2soTlVMTCwgIi4iKTsKPiArCURCRygiZW5naW5l PSclcydcbiIsIHRva2VuKTsKPiArCXRhc2stPmNsYXNzID0gLTE7Cj4gKwlmb3IgKGkgPSAwOyBp IDwgc2l6ZW9mKGVuZ2luZXMpL3NpemVvZigqZW5naW5lcyk7IGkrKykgewo+ICsJCWNvbnN0IGlu dCBsZW4gPSBzdHJsZW4oZW5naW5lc1tpXSk7Cj4gKwkJaWYgKCFzdHJuY2FzZWNtcCh0b2tlbiwg ZW5naW5lc1tpXSwgbGVuKSkgewo+ICsJCQl0YXNrLT5jbGFzcyA9IGk7Cj4gKwkJCWlmICh0b2tl bltsZW5dKQo+ICsJCQkJdGFzay0+aW5zdGFuY2UgPSBhdG9pKHRva2VuICsgbGVuKTsKPiArCQkJ ZWxzZQo+ICsJCQkJdGFzay0+aW5zdGFuY2UgPSAtMTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJ fQo+ICsKPiArCS8qIGRlbGF5ICovCj4gKwl0b2tlbiA9IHN0cnRvayhOVUxMLCAiLiIpOwo+ICsJ REJHKCJkZWxheT0nJXMnXG4iLCB0b2tlbik7Cj4gKwl0YXNrLT5taW4gPSBzdHJ0b2wodG9rZW4s ICZ0b2tlbiwgMCk7Cj4gKwlpZiAoKnRva2VuKQo+ICsJCXRhc2stPm1heCA9IHN0cnRvbCh0b2tl biArIDEsIE5VTEwsIDApOwo+ICsJZWxzZQo+ICsJCXRhc2stPm1heCA9IHRhc2stPm1pbjsKPiAr CXRhc2stPmR1cmF0aW9uID0gKHRhc2stPm1pbiArIHRhc2stPm1heCkgLyAyOwo+ICsJREJHKCJt aW49JWx1LCBtYXg9JWx1OyBkdXJhdGlvbj0lbHVcbiIsIHRhc2stPm1pbiwgdGFzay0+bWF4LCB0 YXNrLT5kdXJhdGlvbik7Cj4gKwo+ICsJLyogZGVwZW5kZW5jaWVzICovCj4gKwl0b2tlbiA9IHN0 cnRvayhOVUxMLCAiLiIpOwo+ICsJREJHKCJkZXBzPSclcydcbiIsIHRva2VuKTsKPiArCXdoaWxl ICgoaSA9IHN0cnRvbCh0b2tlbiwgJnRva2VuLCAwKSkpIHsKPiArCQlhZGRfZGVwZW5kZW5jeSh0 YXNrLCB3b3JrLT50YXNrc1t3b3JrLT5jb3VudCArIGldKTsKPiArCQlpZiAoKnRva2VuKQo+ICsJ CQl0b2tlbisrOwo+ICsJfQo+ICsKPiArCS8qIGFkZCBhIGRlcGVuZGVuY3kgZm9yIHRoZSBjb250 ZXh0K2VuZ2luZSB0aW1lbGluZSAqLwo+ICsJZm9yIChpID0gd29yay0+Y291bnQ7IC0taSA+PSAw OyApIHsKPiArCQlpZiAod29yay0+dGFza3NbaV0tPmN0eCA9PSB0YXNrLT5jdHggJiYKPiArCQkg ICAgd29yay0+dGFza3NbaV0tPmNsYXNzID09IHRhc2stPmNsYXNzKSB7Cj4gKwkJCWFkZF9kZXBl bmRlbmN5KHRhc2ssIHdvcmstPnRhc2tzW2ldKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ ICsKPiArCWlndF9saXN0X2FkZCgmdGFzay0+bGluaywgJndvcmstPmVuZHMpOwo+ICsJd29yay0+ dGFza3Nbd29yay0+Y291bnQrK10gPSB0YXNrOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHdv cmsgKnBhcnNlX3dvcmsoRklMRSAqZmlsZSkKPiArewo+ICsJc3RydWN0IHdvcmsgKndvcms7Cj4g KwljaGFyICpsaW5lID0gTlVMTDsKPiArCXNpemVfdCBsZW4gPSAwOwo+ICsKPiArCXdvcmsgPSBt YWxsb2Moc2l6ZW9mKCp3b3JrKSk7Cj4gKwlpZ3RfbGlzdF9pbml0KCZ3b3JrLT5lbmRzKTsKPiAr Cj4gKwl3b3JrLT5zaXplID0gNjQ7Cj4gKwl3b3JrLT5jb3VudCA9IDA7Cj4gKwl3b3JrLT50YXNr cyA9IG1hbGxvYyhzaXplb2YoKndvcmstPnRhc2tzKSAqIHdvcmstPnNpemUpOwo+ICsKPiArCXdo aWxlIChnZXRsaW5lKCZsaW5lLCAmbGVuLCBmaWxlKSAhPSAtMSkgewo+ICsJCWlmICh3b3JrLT5j b3VudCA9PSB3b3JrLT5zaXplKSB7Cj4gKwkJCXdvcmstPnRhc2tzID0gcmVhbGxvYyh3b3JrLT50 YXNrcywKPiArCQkJCQkgICAgICBzaXplb2YoKndvcmstPnRhc2tzKSAqIHdvcmstPnNpemUpOwo+ ICsJCQl3b3JrLT5zaXplICo9IDI7Cj4gKwkJfQo+ICsJCWFkZF90YXNrKHdvcmssIGxpbmUpOwo+ ICsJfQo+ICsKPiArCWZyZWUobGluZSk7Cj4gKwo+ICsJREJHKCIlZCB0YXNrc1xuIiwgd29yay0+ Y291bnQpOwo+ICsJcmV0dXJuIHdvcms7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25n IHN1bV9kdXJhdGlvbnMoc3RydWN0IHRhc2sgKnRhc2spCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcg bWF4X2R1cmF0aW9uID0gMDsKPiArCXN0cnVjdCB0YXNrICpzaWduYWwgPSBOVUxMOwo+ICsJc3Ry dWN0IGRlcGVuZGVuY3kgKmRlcDsKPiArCj4gKwlpZ3RfbGlzdF9mb3JfZWFjaChkZXAsICZ0YXNr LT5zaWduYWxzLCBsaW5rKSB7Cj4gKwkJaWYgKGRlcC0+c2lnbmFsLT5kdXJhdGlvbiA+IG1heF9k dXJhdGlvbikgewo+ICsJCQlzaWduYWwgPSBkZXAtPnNpZ25hbDsKPiArCQkJbWF4X2R1cmF0aW9u ID0gc2lnbmFsLT5kdXJhdGlvbjsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRhc2stPmR1 cmF0aW9uICsgKHNpZ25hbCA/IHN1bV9kdXJhdGlvbnMoc2lnbmFsKSA6IDApOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBpZGVhbF9kZXB0aChzdHJ1Y3Qgd29yayAqd29yaykKPiArewo+ICsJdW5z aWduZWQgbG9uZyB0b3RhbF9kdXJhdGlvbjsKPiArCXVuc2lnbmVkIGxvbmcgbWF4X2R1cmF0aW9u Owo+ICsJc3RydWN0IHRhc2sgKnRhc2s7Cj4gKwlpbnQgaTsKPiArCj4gKwkvKgo+ICsJICogVGhl IGlkZWFsIGRlcHRoIGlzIHRoZSBsb25nZXN0IGNoYWluIG9mIGRlcGVuZGVuY2llcyBhcyB0aGUK PiArCSAqIGRlcGVuZGVuY3kgY2hhaW4gcmVxdWlyZXMgc2VxdWVudGlhbCB0YXNrIGV4ZWN1dGlv bi4gRWFjaAo+ICsJICogY2hhaW4gaXMgYXNzdW1lZCB0byBiZSBydW4gaW4gcGFyYWxsZWwgb24g YW4gaW5maW5pdGUgc2V0IG9mCj4gKwkgKiBlbmdpbmVzLCBzbyB0aGUgcmF0ZWxpbWl0aW5nIHN0 ZXAgaXMgaXRzIGxvbmdlc3QgcGF0aC4KPiArCSAqLwo+ICsJbWF4X2R1cmF0aW9uID0gMDsKPiAr CWlndF9saXN0X2Zvcl9lYWNoKHRhc2ssICZ3b3JrLT5lbmRzLCBsaW5rKSB7Cj4gKwkJdW5zaWdu ZWQgbG9uZyBkdXJhdGlvbiA9IHN1bV9kdXJhdGlvbnModGFzayk7Cj4gKwkJaWYgKGR1cmF0aW9u ID4gbWF4X2R1cmF0aW9uKQo+ICsJCQltYXhfZHVyYXRpb24gPSBkdXJhdGlvbjsKPiArCX0KPiAr Cj4gKwl0b3RhbF9kdXJhdGlvbiA9IDA7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgd29yay0+Y291bnQ7 IGkrKykKPiArCQl0b3RhbF9kdXJhdGlvbiArPSB3b3JrLT50YXNrc1tpXS0+ZHVyYXRpb247Cj4g Kwo+ICsJcHJpbnRmKCJTaW5nbGUgY2xpZW50XG4iKTsKPiArCXByaW50ZigiICAgdG90YWwgZHVy YXRpb24gJWx1dXM7ICUuMmYgd3BzXG4iLCB0b3RhbF9kdXJhdGlvbiwgMWU2L3RvdGFsX2R1cmF0 aW9uKTsKPiArCXByaW50ZigiICAgaWRlYWwgZHVyYXRpb24gJWx1dXM7ICUuMmYgd3BzXG4iLCBt YXhfZHVyYXRpb24sIDFlNi9tYXhfZHVyYXRpb24pOwo+ICt9Cj4gKwo+ICtzdHJ1Y3Qgc2ltX2Ns YXNzIHsKPiArCWludCBuaW5zdGFuY2U7Cj4gKwl1bnNpZ25lZCBpbnQgaW5zdGFuY2VzWzRdOwo+ ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgc2luZ2xlX2NsaWVudChzdHJ1Y3Qgd29yayAqd29yaykK PiArewo+ICsJc3RydWN0IHNpbV9jbGFzcyBzaW1bXSA9IHsKPiArCQlbUkNTXSAgPSB7IDEgfSwK PiArCQlbQkNTXSAgPSB7IDEgfSwKPiArCQlbVkNTXSAgPSB7IDIgfSwKPiArCQlbVkVDU10gPSB7 IDEgfSwKPiArCX0sICpjbGFzczsKPiArCUlHVF9MSVNUKHNjaGVkKTsKPiArCXN0cnVjdCB0YXNr ICp0YXNrOwo+ICsJdW5zaWduZWQgbG9uZyBtYXg7Cj4gKwlpbnQgaSwgajsKPiArCj4gKwlmb3Ig KGkgPSAwOyBpIDwgd29yay0+Y291bnQ7IGkrKykKPiArCQlpZ3RfbGlzdF9pbml0KCZ3b3JrLT50 YXNrc1tpXS0+c2NoZWQpOwo+ICsKPiArCWlndF9saXN0X2Zvcl9lYWNoKHRhc2ssICZ3b3JrLT5l bmRzLCBsaW5rKSB7Cj4gKwkJaWd0X2xpc3RfYWRkX3RhaWwoJnRhc2stPnNjaGVkLCAmc2NoZWQp Owo+ICsJfQo+ICsKPiArCWlndF9saXN0X2Zvcl9lYWNoKHRhc2ssICZzY2hlZCwgc2NoZWQpIHsK PiArCQlzdHJ1Y3QgZGVwZW5kZW5jeSAqZGVwOwo+ICsKPiArCQlpZ3RfbGlzdF9mb3JfZWFjaChk ZXAsICZ0YXNrLT5zaWduYWxzLCBsaW5rKQo+ICsJCQlpZ3RfbGlzdF9tb3ZlX3RhaWwoJmRlcC0+ c2lnbmFsLT5zY2hlZCwgJnNjaGVkKTsKPiArCX0KPiArCj4gKwlpZ3RfbGlzdF9mb3JfZWFjaF9y ZXZlcnNlKHRhc2ssICZzY2hlZCwgc2NoZWQpIHsKPiArCQlzdHJ1Y3QgZGVwZW5kZW5jeSAqZGVw Owo+ICsJCWludCBpbnN0YW5jZTsKPiArCj4gKwkJY2xhc3MgPSAmc2ltW3Rhc2stPmNsYXNzXTsK PiArCQltYXggPSBjbGFzcy0+aW5zdGFuY2VzWzBdOwo+ICsKPiArCQlpbnN0YW5jZSA9IHRhc2st Pmluc3RhbmNlOwo+ICsJCWlmIChpbnN0YW5jZSA8IDApIHsKPiArCQkJaW5zdGFuY2UgPSAwOwo+ ICsJCQlmb3IgKGkgPSAxOyBpIDwgY2xhc3MtPm5pbnN0YW5jZTsgaSsrKSB7Cj4gKwkJCQlpZiAo Y2xhc3MtPmluc3RhbmNlc1tpXSA8IG1heCkgewo+ICsJCQkJCW1heCA9IGNsYXNzLT5pbnN0YW5j ZXNbaV07Cj4gKwkJCQkJaW5zdGFuY2UgPSBpOwo+ICsJCQkJfQo+ICsJCQl9Cj4gKwkJfQo+ICsK PiArCQkvKgo+ICsJCSAqIEdyZWVkeSAoZmlyc3QgYXZhaWxhYmxlKSwgbm90IHRydWUgb3B0aW1h bCBzY2hlZHVsaW5nLgo+ICsJCSAqCj4gKwkJICogRm9yIG9wdGltYWwsIHdlIGRvIGhhdmUgdG8g Y29tcHV0ZSB0aGUgZ2xvYmFsIG9wdGltYWwKPiArCQkgKiBvcmRlcmluZyBieSBjaGVja2luZyBl dmVyeSBwZXJtdXRhdGlvbi4uLgo+ICsJCSAqLwo+ICsJCWlndF9saXN0X2Zvcl9lYWNoKGRlcCwg JnRhc2stPnNpZ25hbHMsIGxpbmspIHsKPiArCQkJaWYgKGRlcC0+c2lnbmFsLT5kZWFkbGluZSA+ IG1heCkKPiArCQkJCW1heCA9IGRlcC0+c2lnbmFsLT5kZWFkbGluZTsKPiArCQl9Cj4gKwo+ICsJ CURCRygidGFzayAlZDogZW5naW5lICVkLCBpbnN0YW5jZSAlZDsgZmluaXNoICVsdVxuIiwKPiAr CQkgICAgdGFzay0+c3RlcCwgdGFzay0+Y2xhc3MsIGluc3RhbmNlLCBtYXgpOwo+ICsKPiArCQl0 YXNrLT5kZWFkbGluZSA9IG1heCArIHRhc2stPmR1cmF0aW9uOwo+ICsJCWNsYXNzLT5pbnN0YW5j ZXNbaW5zdGFuY2VdID0gdGFzay0+ZGVhZGxpbmU7Cj4gKwl9Cj4gKwo+ICsJbWF4ID0gMDsKPiAr CWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2ltKS9zaXplb2Yoc2ltWzBdKTsgaSsrKSB7Cj4gKwkJ Y2xhc3MgPSAmc2ltW2ldOwo+ICsJCWZvciAoaiA9IDA7IGogPCBjbGFzcy0+bmluc3RhbmNlOyBq KyspIHsKPiArCQkJaWYgKGNsYXNzLT5pbnN0YW5jZXNbal0gPiBtYXgpCj4gKwkJCQltYXggPSBj bGFzcy0+aW5zdGFuY2VzW2pdOwo+ICsJCX0KPiArCX0KPiArCj4gKwlwcmludGYoIlNpbXVsYXRl ZCBjbGllbnQ6XG4iKTsKPiArCXByaW50ZigiICAgZHVyYXRpb24gJWx1dXM7ICUuMmYgd3BzXG4i LCBtYXgsIDFlNi9tYXgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwYWNrZWRfY2xpZW50cyhz dHJ1Y3Qgd29yayAqd29yaykKPiArewo+ICsJc3RydWN0IHNpbV9jbGFzcyBzaW1bXSA9IHsKPiAr CQlbUkNTXSAgPSB7IDEgfSwKPiArCQlbQkNTXSAgPSB7IDEgfSwKPiArCQlbVkNTXSAgPSB7IDIg fSwKPiArCQlbVkVDU10gPSB7IDEgfSwKPiArCX0sICpjbGFzczsKPiArCUlHVF9MSVNUKHNjaGVk KTsKPiArCXN0cnVjdCB0YXNrICp0YXNrOwo+ICsJdW5zaWduZWQgbG9uZyBtaW47Cj4gKwlpbnQg aSwgajsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgd29yay0+Y291bnQ7IGkrKykKPiArCQlpZ3Rf bGlzdF9pbml0KCZ3b3JrLT50YXNrc1tpXS0+c2NoZWQpOwo+ICsKPiArCWlndF9saXN0X2Zvcl9l YWNoKHRhc2ssICZ3b3JrLT5lbmRzLCBsaW5rKQo+ICsJCWlndF9saXN0X2FkZF90YWlsKCZ0YXNr LT5zY2hlZCwgJnNjaGVkKTsKPiArCj4gKwlpZ3RfbGlzdF9mb3JfZWFjaCh0YXNrLCAmc2NoZWQs IHNjaGVkKSB7Cj4gKwkJc3RydWN0IGRlcGVuZGVuY3kgKmRlcDsKPiArCj4gKwkJaWd0X2xpc3Rf Zm9yX2VhY2goZGVwLCAmdGFzay0+c2lnbmFscywgbGluaykKPiArCQkJaWd0X2xpc3RfbW92ZV90 YWlsKCZkZXAtPnNpZ25hbC0+c2NoZWQsICZzY2hlZCk7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAq IENvbXB1dGUgdGhlIG1heGltdW0gZHVyYXRpb24gcmVxdWlyZWQgb24gYW55IGVuZ2luZS4KPiAr CSAqCj4gKwkgKiBXaXRoIHN1ZmZpY2llbnQgY2xpZW50cyBmb3JjaW5nIG1heGltdW0gb2NjdXBh bmN5IHVuZGVyIHRoZWlyIHdlaWdodCwKPiArCSAqIHRoZSByYXRlbGltaXRpbmcgc3RlcCBiZWNv bWVzIGEgc2luZ2xlIGVuZ2luZSBhbmQgaG93IG1hbnkgY2xpZW50cwo+ICsJICogaXQgdGFrZXMg dG8gZmlsbC4KPiArCSAqLwo+ICsJaWd0X2xpc3RfZm9yX2VhY2hfcmV2ZXJzZSh0YXNrLCAmc2No ZWQsIHNjaGVkKSB7Cj4gKwkJaW50IGluc3RhbmNlOwo+ICsKPiArCQljbGFzcyA9ICZzaW1bdGFz ay0+Y2xhc3NdOwo+ICsJCWluc3RhbmNlID0gdGFzay0+aW5zdGFuY2U7Cj4gKwkJaWYgKGluc3Rh bmNlIDwgMCkgewo+ICsJCQlpbnN0YW5jZSA9IDA7Cj4gKwkJCW1pbiA9IGNsYXNzLT5pbnN0YW5j ZXNbMF07Cj4gKwkJCWZvciAoaSA9IDE7IGkgPCBjbGFzcy0+bmluc3RhbmNlOyBpKyspIHsKPiAr CQkJCWlmIChjbGFzcy0+aW5zdGFuY2VzW2ldIDwgbWluKSB7Cj4gKwkJCQkJbWluID0gY2xhc3Mt Pmluc3RhbmNlc1tpXTsKPiArCQkJCQlpbnN0YW5jZSA9IGk7Cj4gKwkJCQl9Cj4gKwkJCX0KPiAr CQl9Cj4gKwo+ICsJCWNsYXNzLT5pbnN0YW5jZXNbaW5zdGFuY2VdICs9IHRhc2stPmR1cmF0aW9u Owo+ICsJfQo+ICsKPiArCW1pbiA9IDA7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNpbSkv c2l6ZW9mKHNpbVswXSk7IGkrKykgewo+ICsJCWNsYXNzID0gJnNpbVtpXTsKPiArCQlmb3IgKGog PSAwOyBqIDwgY2xhc3MtPm5pbnN0YW5jZTsgaisrKSB7Cj4gKwkJCWlmIChjbGFzcy0+aW5zdGFu Y2VzW2pdID4gbWluKQo+ICsJCQkJbWluID0gY2xhc3MtPmluc3RhbmNlc1tqXTsKPiArCQl9Cj4g Kwl9Cj4gKwo+ICsJcHJpbnRmKCJQYWNrZWQgY2xpZW50czpcbiIpOwo+ICsJcHJpbnRmKCIgICBk dXJhdGlvbiAlbHV1czsgJS4yZiB3cHNcbiIsIG1pbiwgMWU2L21pbik7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGdyYXBodml6KHN0cnVjdCB3b3JrICp3b3JrKQo+ICt7Cj4gKyNpZiAwCj4gKwlp bnQgaSwgajsKPiArCj4gKwlwcmludGYoImRpZ3JhcGgge1xuIik7Cj4gKwlwcmludGYoIiAgcmFu a2Rpcj1MUjtcbiIpOwo+ICsJcHJpbnRmKCIgIHNwbGluZXM9bGluZTtcbiIpOwo+ICsJcHJpbnRm KCJcbiIpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCB3b3JrLT5jb3VudDsgaSsrKSB7Cj4gKwkJ c3RydWN0IHRhc2sgKnRhc2sgPSB3b3JrLT50YXNrc1tpXTsKPiArCj4gKwkJaWYgKHRhc2stPnZp c2l0ZWQpCj4gKwkJCWdvdG8gc2tpcDsKPiArCj4gKwkJcHJpbnRmKCIgIHN1YmdyYXBoIGNsdXN0 ZXJfJWQge1xuIiwgdGFzay0+Y3R4KTsKPiArCQlwcmludGYoIiAgICBsYWJlbD1cIkNvbnRleHQg JWRcIlxuIiwgdGFzay0+Y3R4KTsKPiArCQlmb3IgKGogPSBpOyBqIDwgd29yay0+Y291bnQ7IGor Kykgewo+ICsJCQlpZiAod29yay0+dGFza3Nbal0tPmN0eCA9PSB0YXNrLT5jdHgpIHsKPiArCQkJ CXByaW50ZigiICAgIHRhc2tfJTAzZDtcbiIsIGopOwo+ICsJCQkJd29yay0+dGFza3Nbal0tPnZp c2l0ZWQgPSB0cnVlOwo+ICsJCQl9Cj4gKwkJfQo+ICsJCXByaW50ZigiICB9XG5cbiIpOwo+ICsK PiArc2tpcDoKPiArCQl0YXNrLT52aXNpdGVkID0gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IHdvcmstPmNvdW50OyBpKyspIHsKPiArCQlzdHJ1Y3QgdGFzayAqdGFzayA9IHdv cmstPnRhc2tzW2ldOwo+ICsJCXN0cnVjdCBkZXBlbmRlbmN5ICpkZXA7Cj4gKwo+ICsJCWlndF9s aXN0X2Zvcl9lYWNoKGRlcCwgJnRhc2stPnNpZ25hbHMsIGxpbmspIHsKPiArCQkJcHJpbnRmKCIg IHRhc2tfJTAzZCAtPiB0YXNrXyUwM2Q7XG4iLAo+ICsJCQkgICAgICAgZGVwLT5zaWduYWwtPnN0 ZXAsIHRhc2stPnN0ZXApOwo+ICsJCX0KPiArCX0KPiArCj4gKwlwcmludGYoIn1cbiIpOwo+ICsj ZW5kaWYKPiArfQo+ICsKPiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICt7Cj4g KwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7Cj4gKwkJRklMRSAq ZmlsZSA9IGZvcGVuKGFyZ3ZbaV0sICJyIik7Cj4gKwkJc3RydWN0IHdvcmsgKndvcms7Cj4gKwo+ ICsJCWlmICghZmlsZSkgewo+ICsJCQlwZXJyb3IoYXJndltpXSk7Cj4gKwkJCXJldHVybiAxOwo+ ICsJCX0KPiArCj4gKwkJd29yayA9IHBhcnNlX3dvcmsoZmlsZSk7Cj4gKwkJZmNsb3NlKGZpbGUp Owo+ICsKPiArCQlncmFwaHZpeih3b3JrKTsKPiArCj4gKwkJaWRlYWxfZGVwdGgod29yayk7Cj4g KwkJc2luZ2xlX2NsaWVudCh3b3JrKTsKPiArCQlwYWNrZWRfY2xpZW50cyh3b3JrKTsKPiArCX0K PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK