From mboxrd@z Thu Jan 1 00:00:00 1970 From: Patrik Jakobsson Subject: Re: [PATCH v2 5/5] drm: Add decoding of DRM and KMS ioctls Date: Tue, 30 Jun 2015 10:51:03 +0200 Message-ID: <20150630085103.GC12526@patrik-dev-mach> References: <1434616965-5157-1-git-send-email-patrik.jakobsson@linux.intel.com> <1434616965-5157-6-git-send-email-patrik.jakobsson@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 5A54C6E21F for ; Tue, 30 Jun 2015 01:50:58 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1434616965-5157-6-git-send-email-patrik.jakobsson@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: strace-devel@lists.sourceforge.net Cc: intel-gfx@lists.freedesktop.org, ldv@altlinux.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKdW4gMTgsIDIwMTUgYXQgMTA6NDI6NDVBTSArMDIwMCwgUGF0cmlrIEpha29ic3Nv biB3cm90ZToKPiBUaGlzIHBhdGNoIGFkZHMgbWFueSBvZiB0aGUgRFJNIGFuZCBLTVMgaW9jdGxz LiBUaGUgcmVzdCBjYW4gYmUgYWRkZWQgYXMKPiBuZWVkZWQuCj4gCj4gKiBkcm0uYzogRGVjb2Rl IERSTV9JT0NUTF9WRVJTSU9OCj4gKiBkcm0uYzogRGVjb2RlIERSTV9JT0NUTF9HRVRfVU5JUVVF Cj4gKiBkcm0uYzogRGVjb2RlIERSTV9JT0NUTF9HRVRfTUFHSUMKPiAqIGRybS5jOiBEZWNvZGUg RFJNX0lPQ1RMX1dBSVRfVkJMQU5LCj4gKiBkcm0uYzogRGVjb2RlIERSTV9JT0NUTF9NT0RFX0dF VFJFU09VUkNFUwo+ICogZHJtLmM6IERlY29kZSBEUk1fSU9DVExfTU9ERV9HRVRDUlRDCj4gKiBk cm0uYzogRGVjb2RlIERSTV9JT0NUTF9NT0RFX1NFVENSVEMKPiAqIGRybS5jOiBEZWNvZGUgRFJN X0lPQ1RMX01PREVfQ1VSU09SCj4gKiBkcm0uYzogRGVjb2RlIERSTV9JT0NUTF9NT0RFX0NVUlNP UjIKPiAqIGRybS5jOiBEZWNvZGUgRFJNX0lPQ1RMX01PREVfR0VUR0FNTUEKPiAqIGRybS5jOiBE ZWNvZGUgRFJNX0lPQ1RMX01PREVfU0VUR0FNTUEKPiAqIGRybS5jOiBEZWNvZGUgRFJNX0lPQ1RM X01PREVfR0VURU5DT0RFUgo+ICogZHJtLmM6IERlY29kZSBEUk1fSU9DVExfTU9ERV9HRVRDT05O RUNUT1IKPiAqIGRybS5jOiBEZWNvZGUgRFJNX0lPQ1RMX01PREVfR0VUUFJPUEVSVFkKPiAqIGRy bS5jOiBEZWNvZGUgRFJNX0lPQ1RMX01PREVfU0VUUFJPUEVSVFkKPiAqIGRybS5jOiBEZWNvZGUg RFJNX0lPQ1RMX01PREVfR0VUUFJPUEJMT0IKPiAqIGRybS5jOiBEZWNvZGUgRFJNX0lPQ1RMX01P REVfR0VURkIKPiAqIGRybS5jOiBEZWNvZGUgRFJNX0lPQ1RMX01PREVfQURERkIKPiAqIGRybS5j OiBEZWNvZGUgRFJNX0lPQ1RMX01PREVfUk1GQgo+ICogZHJtLmM6IERlY29kZSBEUk1fSU9DVExf TU9ERV9QQUdFX0ZMSVAKPiAqIGRybS5jOiBEZWNvZGUgRFJNX0lPQ1RMX0RJUlRZRkIKPiAqIGRy bS5jOiBEZWNvZGUgRFJNX0lPQ1RMX0NSRUFURV9EVU1CCj4gKiBkcm0uYzogRGVjb2RlIERSTV9J T0NUTF9NQVBfRFVNQgo+ICogZHJtLmM6IERlY29kZSBEUk1fSU9DVExfREVTVFJPWV9EVU1CCj4g KiBkcm0uYzogRGVjb2RlIERSTV9JT0NUTF9HRU1fQ0xPU0UKPiAKPiBTaWduZWQtb2ZmLWJ5OiBQ YXRyaWsgSmFrb2Jzc29uIDxwYXRyaWsuamFrb2Jzc29uQGxpbnV4LmludGVsLmNvbT4KPiAtLS0K PiAgZHJtLmMgfCA1MTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4gIDEgZmlsZSBjaGFuZ2VkLCA1MTAgaW5zZXJ0aW9u cygrKQo+IAo+IGRpZmYgLS1naXQgYS9kcm0uYyBiL2RybS5jCj4gaW5kZXggOGUzZjdkMS4uMmU2 ZDc2MyAxMDA2NDQKPiAtLS0gYS9kcm0uYwo+ICsrKyBiL2RybS5jCj4gQEAgLTEwNCw2ICsxMDQs NDYzIEBAIGludCBkcm1fZGVjb2RlX251bWJlcihzdHJ1Y3QgdGNiICp0Y3AsIHVuc2lnbmVkIGlu dCBhcmcpCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiArc3RhdGljIGludCBkcm1fdmVyc2lvbihz dHJ1Y3QgdGNiICp0Y3AsIGNvbnN0IHVuc2lnbmVkIGludCBjb2RlLCBsb25nIGFyZykKPiArewo+ ICsJc3RydWN0IGRybV92ZXJzaW9uIHZlcjsKPiArCj4gKwlpZiAodW1vdmUodGNwLCBhcmcsICZ2 ZXIpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChleGl0aW5nKHRjcCkpIHsKPiArCQl0cHJp bnRmKCIsIHt2ZXJzaW9uX21ham9yPSVkLCB2ZXJzaW9uX21pbm9yPSVkLCB2ZXJzaW9uX3BhdGNo bGV2ZWw9JWQsICIKPiArCQkJIm5hbWVfbGVuPSVsdSwgbmFtZT0iLCB2ZXIudmVyc2lvbl9tYWpv ciwKPiArCQkJdmVyLnZlcnNpb25fbWlub3IsIHZlci52ZXJzaW9uX3BhdGNobGV2ZWwsCj4gKwkJ CXZlci5uYW1lX2xlbik7Cj4gKwkJcHJpbnRzdHIodGNwLCAobG9uZyl2ZXIubmFtZSwgdmVyLm5h bWVfbGVuKTsKPiArCQl0cHJpbnRmKCIsIGRhdGVfbGVuPSVsdSwgZGF0ZT0iLCB2ZXIuZGF0ZV9s ZW4pOwo+ICsJCXByaW50c3RyKHRjcCwgKGxvbmcpdmVyLmRhdGUsIHZlci5kYXRlX2xlbik7Cj4g KwkJdHByaW50ZigiLCBkZXNjX2xlbj0lbHUsIGRlc2M9IiwgdmVyLmRlc2NfbGVuKTsKPiArCQlw cmludHN0cih0Y3AsIChsb25nKXZlci5kZXNjLCB2ZXIuZGVzY19sZW4pOwo+ICsJCXRwcmludHMo In0iKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcm1f Z2V0X3VuaXF1ZShzdHJ1Y3QgdGNiICp0Y3AsIGNvbnN0IHVuc2lnbmVkIGludCBjb2RlLCBsb25n IGFyZykKPiArewo+ICsJc3RydWN0IGRybV91bmlxdWUgdW5pcXVlOwo+ICsKPiArCWlmICh1bW92 ZSh0Y3AsIGFyZywgJnVuaXF1ZSkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGV4aXRpbmco dGNwKSkgewo+ICsJCXRwcmludGYoIiwge3VuaXF1ZV9sZW49JWx1LCB1bmlxdWU9fSIsIHVuaXF1 ZS51bmlxdWVfbGVuKTsKPiArCQlwcmludHN0cih0Y3AsIChsb25nKXVuaXF1ZS51bmlxdWUsIHVu aXF1ZS51bmlxdWVfbGVuKTsKPiArCQl0cHJpbnRzKCJ9Iik7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX2dldF9tYWdpYyhzdHJ1Y3QgdGNiICp0Y3As IGNvbnN0IHVuc2lnbmVkIGludCBjb2RlLCBsb25nIGFyZykKPiArewo+ICsJc3RydWN0IGRybV9h dXRoIGF1dGg7Cj4gKwo+ICsJaWYgKHVtb3ZlKHRjcCwgYXJnLCAmYXV0aCkpCj4gKwkJcmV0dXJu IDA7Cj4gKwo+ICsJaWYgKGV4aXRpbmcodGNwKSkKPiArCQl0cHJpbnRmKCIsIHttYWdpYz0ldX0i LCBhdXRoLm1hZ2ljKTsKPiArCj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGludCBk cm1fd2FpdF92Ymxhbmsoc3RydWN0IHRjYiAqdGNwLCBjb25zdCB1bnNpZ25lZCBpbnQgY29kZSwg bG9uZyBhcmcpCj4gK3sKPiArCXVuaW9uIGRybV93YWl0X3ZibGFuayB2Ymxhbms7Cj4gKwo+ICsJ aWYgKHVtb3ZlKHRjcCwgYXJnLCAmdmJsYW5rKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAo ZW50ZXJpbmcodGNwKSkgewo+ICsJCXRwcmludGYoIiwge3JlcXVlc3Q9e3R5cGU9JXUsIHNlcXVl bmNlPSV1LCBzaWduYWw9JWx1fSIsCj4gKwkJCXZibGFuay5yZXF1ZXN0LnR5cGUsIHZibGFuay5y ZXF1ZXN0LnNlcXVlbmNlLAo+ICsJCQl2YmxhbmsucmVxdWVzdC5zaWduYWwpOwo+ICsJfSBlbHNl IGlmIChleGl0aW5nKHRjcCkpIHsKPiArCQl0cHJpbnRmKCIsIHJlcGx5PXt0eXBlPSV1LCBzZXF1 ZW5jZT0ldSwgdHZhbF9zZWM9JWxkLCB0dmFsX3VzZWM9JWxkfX0iLAo+ICsJCQl2YmxhbmsucmVw bHkudHlwZSwgdmJsYW5rLnJlcGx5LnNlcXVlbmNlLAo+ICsJCQl2YmxhbmsucmVwbHkudHZhbF9z ZWMsIHZibGFuay5yZXBseS50dmFsX3VzZWMpOwo+ICsJfQo+ICsKPiArCXJldHVybiAxOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9tb2RlX2dldF9yZXNvdXJjZXMoc3RydWN0IHRjYiAqdGNw LCBjb25zdCB1bnNpZ25lZCBpbnQgY29kZSwgbG9uZyBhcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1f bW9kZV9jYXJkX3JlcyByZXM7Cj4gKwo+ICsJaWYgKHVtb3ZlKHRjcCwgYXJnLCAmcmVzKSkKPiAr CQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoZXhpdGluZyh0Y3ApKSB7Cj4gKwkJdHByaW50ZigiLCB7 ZmJfaWRfcHRyPSVwLCBjcnRjX2lkX3B0cj0lcCwgY29ubmVjdG9yX2lkX3B0cj0lcCwgIgo+ICsJ CQkiZW5jb2Rlcl9pZF9wdHI9JXAsIGNvdW50X2Zicz0ldSwgY291bnRfY3J0Y3M9JXUsICIKPiAr CQkJImNvdW50X2Nvbm5lY3RvcnM9JXUsIGNvdW50X2VuY29kZXJzPSV1LCBtaW5fd2lkdGg9JXUs ICIKPiArCQkJIm1heF93aWR0aD0ldSwgbWluX2hlaWdodD0ldSwgbWF4X2hlaWdodD0ldX0iLAo+ ICsJCQkodm9pZCAqKXJlcy5mYl9pZF9wdHIsICh2b2lkICopcmVzLmNydGNfaWRfcHRyLAo+ICsJ CQkodm9pZCAqKXJlcy5jb25uZWN0b3JfaWRfcHRyLCAodm9pZCAqKXJlcy5lbmNvZGVyX2lkX3B0 ciwKPiArCQkJcmVzLmNvdW50X2ZicywgcmVzLmNvdW50X2NydGNzLCByZXMuY291bnRfY29ubmVj dG9ycywKPiArCQkJcmVzLmNvdW50X2VuY29kZXJzLCByZXMubWluX3dpZHRoLCByZXMubWF4X3dp ZHRoLAo+ICsJCQlyZXMubWluX2hlaWdodCwgcmVzLm1heF9oZWlnaHQpOwo+ICsJfQo+ICsKPiAr CXJldHVybiAxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcm1fbW9kZV9wcmludF9tb2RlaW5m byhzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKmluZm8pCj4gK3sKPiArCXRwcmludGYoImNsb2Nr PSV1LCBoZGlzcGxheT0laHUsIGhzeW5jX3N0YXJ0PSVodSwgaHN5bmNfZW5kPSVodSwgIgo+ICsJ CSJodG90YWw9JWh1LCBoc2tldz0laHUsIHZkaXNwbGF5PSVodSwgdnN5bmNfc3RhcnQ9JWh1LCAi Cj4gKwkJInZzeW5jX2VuZD0laHUsIHZ0b3RhbD0laHUsIHZzY2FuPSVodSwgdnJlZnJlc2g9JXUs ICIKPiArCQkiZmxhZ3M9MHgleCwgdHlwZT0ldSwgbmFtZT0lcyIsIGluZm8tPmNsb2NrLCBpbmZv LT5oZGlzcGxheSwKPiArCQlpbmZvLT5oc3luY19zdGFydCwgaW5mby0+aHN5bmNfZW5kLCBpbmZv LT5odG90YWwsIGluZm8tPmhza2V3LAo+ICsJCWluZm8tPnZkaXNwbGF5LCBpbmZvLT52c3luY19z dGFydCwgaW5mby0+dnN5bmNfZW5kLAo+ICsJCWluZm8tPnZ0b3RhbCwgaW5mby0+dnNjYW4sIGlu Zm8tPnZyZWZyZXNoLCBpbmZvLT5mbGFncywKPiArCQlpbmZvLT50eXBlLCBpbmZvLT5uYW1lKTsK PiArfQo+ICsKPiArc3RhdGljIGludCBkcm1fbW9kZV9nZXRfY3J0YyhzdHJ1Y3QgdGNiICp0Y3As IGNvbnN0IHVuc2lnbmVkIGludCBjb2RlLCBsb25nIGFyZykKPiArewo+ICsJc3RydWN0IGRybV9t b2RlX2NydGMgY3J0YzsKPiArCj4gKwlpZiAodW1vdmUodGNwLCBhcmcsICZjcnRjKSkKPiArCQly ZXR1cm4gMDsKPiArCj4gKwlpZiAoZW50ZXJpbmcodGNwKSkgewo+ICsJCXRwcmludGYoIiwge2Ny dGNfaWQ9JXUiLCBjcnRjLmNydGNfaWQpOwo+ICsJfSBlbHNlIGlmIChleGl0aW5nKHRjcCkpIHsK PiArCQl0cHJpbnRmKCIsIHNldF9jb25uZWN0b3JzX3B0cj0lcCwgY291bnRfY29ubmVjdG9ycz0l dSwgIgo+ICsJCQkiZmJfaWQ9JXUsIHg9JXUsIHk9JXUsIGdhbW1hX3NpemU9JXUsIG1vZGVfdmFs aWQ9JXUsICIKPiArCQkJIm1vZGU9eyIsICh2b2lkICopY3J0Yy5zZXRfY29ubmVjdG9yc19wdHIs Cj4gKwkJCWNydGMuY291bnRfY29ubmVjdG9ycywgY3J0Yy5mYl9pZCwgY3J0Yy54LCBjcnRjLnks Cj4gKwkJCWNydGMuZ2FtbWFfc2l6ZSwgY3J0Yy5tb2RlX3ZhbGlkKTsKPiArCj4gKwkJZHJtX21v ZGVfcHJpbnRfbW9kZWluZm8oJmNydGMubW9kZSk7Cj4gKwkJdHByaW50ZigifX0iKTsKPiArCX0K PiArCj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcm1fbW9kZV9zZXRfY3J0 YyhzdHJ1Y3QgdGNiICp0Y3AsIGNvbnN0IHVuc2lnbmVkIGludCBjb2RlLCBsb25nIGFyZykKPiAr ewo+ICsJc3RydWN0IGRybV9tb2RlX2NydGMgY3J0YzsKPiArCj4gKwlpZiAodW1vdmUodGNwLCBh cmcsICZjcnRjKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoZW50ZXJpbmcodGNwKSkgewo+ ICsJCXRwcmludGYoIiwge3NldF9jb25uZWN0b3JzX3B0cj0lcCwgY291bnRfY29ubmVjdG9ycz0l dSwgIgo+ICsJCQkiY3J0Y19pZD0ldSwgZmJfaWQ9JXUsIHg9JXUsIHk9JXUsIGdhbW1hX3NpemU9 JXUsICIKPiArCQkJIm1vZGVfdmFsaWQ9JXUsIG1vZGU9eyIsICh2b2lkICopY3J0Yy5zZXRfY29u bmVjdG9yc19wdHIsCj4gKwkJCWNydGMuY291bnRfY29ubmVjdG9ycywgY3J0Yy5jcnRjX2lkLCBj cnRjLmZiX2lkLCBjcnRjLngsCj4gKwkJCWNydGMueSwgY3J0Yy5nYW1tYV9zaXplLCBjcnRjLm1v ZGVfdmFsaWQpOwo+ICsKPiArCQlkcm1fbW9kZV9wcmludF9tb2RlaW5mbygmY3J0Yy5tb2RlKTsK PiArCQl0cHJpbnRmKCJ9fSIpOwo+ICsJfQo+ICsKPiArCXJldHVybiAxOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGRybV9tb2RlX2N1cnNvcihzdHJ1Y3QgdGNiICp0Y3AsIGNvbnN0IHVuc2lnbmVk IGludCBjb2RlLCBsb25nIGFyZykKPiArewo+ICsJc3RydWN0IGRybV9tb2RlX2N1cnNvciBjdXJz b3I7Cj4gKwo+ICsJaWYgKHVtb3ZlKHRjcCwgYXJnLCAmY3Vyc29yKSkKPiArCQlyZXR1cm4gMDsK PiArCj4gKwlpZiAoZW50ZXJpbmcodGNwKSkgewo+ICsJCXRwcmludGYoIiwge2ZsYWdzPTB4JXgs IGNydGNfaWQ9JXUsIHg9JWQsIHk9JWQsIHdpZHRoPSV1LCAiCj4gKwkJCSJoZWlnaHQ9JXUsIGhh bmRsZT0ldX0iLCBjdXJzb3IuZmxhZ3MsIGN1cnNvci5jcnRjX2lkLAo+ICsJCQljdXJzb3IueCwg Y3Vyc29yLnksIGN1cnNvci53aWR0aCwgY3Vyc29yLmhlaWdodCwKPiArCQkJY3Vyc29yLmhhbmRs ZSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX21v ZGVfY3Vyc29yMihzdHJ1Y3QgdGNiICp0Y3AsIGNvbnN0IHVuc2lnbmVkIGludCBjb2RlLCBsb25n IGFyZykKPiArewo+ICsJc3RydWN0IGRybV9tb2RlX2N1cnNvcjIgY3Vyc29yOwo+ICsKPiArCWlm ICh1bW92ZSh0Y3AsIGFyZywgJmN1cnNvcikpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGVu dGVyaW5nKHRjcCkpIHsKPiArCQl0cHJpbnRmKCIsIHtmbGFncz0weCV4LCBjcnRjX2lkPSV1LCB4 PSVkLCB5PSVkLCB3aWR0aD0ldSwgIgo+ICsJCQkiaGVpZ2h0PSV1LCBoYW5kbGU9JXUsIGhvdF94 PSVkLCBob3RfeT0lZH0iLAo+ICsJCQljdXJzb3IuZmxhZ3MsIGN1cnNvci5jcnRjX2lkLCBjdXJz b3IueCwgY3Vyc29yLnksCj4gKwkJCWN1cnNvci53aWR0aCwgY3Vyc29yLmhlaWdodCwgY3Vyc29y LmhhbmRsZSwKPiArCQkJY3Vyc29yLmhvdF94LCBjdXJzb3IuaG90X3kpOwo+ICsJfQo+ICsKPiAr CXJldHVybiAxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9tb2RlX2dldF9nYW1tYShzdHJ1 Y3QgdGNiICp0Y3AsIGNvbnN0IHVuc2lnbmVkIGludCBjb2RlLCBsb25nIGFyZykKPiArewo+ICsJ c3RydWN0IGRybV9tb2RlX2NydGNfbHV0IGx1dDsKPiArCj4gKwlpZiAodW1vdmUodGNwLCBhcmcs ICZsdXQpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChlbnRlcmluZyh0Y3ApKSB7Cj4gKwkJ LyogV2UgZG9uJ3QgcHJpbnQgdGhlIGVudGlyZSB0YWJsZSwganVzdCB0aGUgcG9pbnRlcnMgKi8K PiArCQl0cHJpbnRmKCIsIHtjcnRjX2lkPSV1LCBnYW1tYV9zaXplPSV1LCByZWQ9JXAsIGdyZWVu PSVwLCAiCj4gKwkJCSJibHVlPSVwfSIsIGx1dC5jcnRjX2lkLCBsdXQuZ2FtbWFfc2l6ZSwKPiAr CQkJKHZvaWQgKilsdXQucmVkLCAodm9pZCAqKWx1dC5ncmVlbiwgKHZvaWQgKilsdXQuYmx1ZSk7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX21vZGVf c2V0X2dhbW1hKHN0cnVjdCB0Y2IgKnRjcCwgY29uc3QgdW5zaWduZWQgaW50IGNvZGUsIGxvbmcg YXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfY3J0Y19sdXQgbHV0Owo+ICsKPiArCWlmICh1 bW92ZSh0Y3AsIGFyZywgJmx1dCkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGVudGVyaW5n KHRjcCkpIHsKPiArCQkvKiBXZSBkb24ndCBwcmludCB0aGUgZW50aXJlIHRhYmxlLCBqdXN0IHRo ZSByZ2IgcG9pbnRlcnMgKi8KPiArCQl0cHJpbnRmKCIsIHtjcnRjX2lkPSV1LCBnYW1tYV9zaXpl PSV1LCByZWQ9JXAsIGdyZWVuPSVwLCAiCj4gKwkJCSJibHVlPSVwfSIsIGx1dC5jcnRjX2lkLCBs dXQuZ2FtbWFfc2l6ZSwKPiArCQkJKHZvaWQgKilsdXQucmVkLCAodm9pZCAqKWx1dC5ncmVlbiwg KHZvaWQgKilsdXQuYmx1ZSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZHJtX21vZGVfZ2V0X2VuY29kZXIoc3RydWN0IHRjYiAqdGNwLCBjb25zdCB1bnNp Z25lZCBpbnQgY29kZSwgbG9uZyBhcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1fbW9kZV9nZXRfZW5j b2RlciBlbmM7Cj4gKwo+ICsJaWYgKHVtb3ZlKHRjcCwgYXJnLCAmZW5jKSkKPiArCQlyZXR1cm4g MDsKPiArCj4gKwlpZiAoZW50ZXJpbmcodGNwKSkgewo+ICsJCXRwcmludGYoIiwge2VuY29kZXJf aWQ9JXUiLCBlbmMuZW5jb2Rlcl9pZCk7Cj4gKwl9IGVsc2UgaWYgKGV4aXRpbmcodGNwKSkgewo+ ICsJCS8qIFRPRE86IFByaW50IG5hbWUgb2YgZW5jb2RlciB0eXBlICovCj4gKwkJdHByaW50Zigi LCBlbmNvZGVyX3R5cGU9JXUsIGNydGNfaWQ9JXUsIHBvc3NpYmxlX2NydGNzPTB4JXgsICIKPiAr CQkJInBvc3NpYmxlX2Nsb25lcz0weCV4fSIsIGVuYy5lbmNvZGVyX3R5cGUsCj4gKwkJCWVuYy5j cnRjX2lkLCBlbmMucG9zc2libGVfY3J0Y3MsIGVuYy5wb3NzaWJsZV9jbG9uZXMpOwo+ICsJfQo+ ICsKPiArCXJldHVybiAxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9tb2RlX2dldF9jb25u ZWN0b3Ioc3RydWN0IHRjYiAqdGNwLCBjb25zdCB1bnNpZ25lZCBpbnQgY29kZSwgbG9uZyBhcmcp Cj4gK3sKPiArCXN0cnVjdCBkcm1fbW9kZV9nZXRfY29ubmVjdG9yIGNvbjsKPiArCj4gKwlpZiAo dW1vdmUodGNwLCBhcmcsICZjb24pKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCS8qIFdlIGNvdWxk IGJlIHZlcnkgdmVyYm9zZSBoZXJlIGJ1dCBrZWVwIGlzIHNpbXBsZSBmb3Igbm93ICovCj4gKwlp ZiAoZW50ZXJpbmcodGNwKSkgewo+ICsJCXRwcmludGYoIiwge2Nvbm5lY3Rvcl9pZD0ldSIsIGNv bi5jb25uZWN0b3JfaWQpOwo+ICsJfSBlbHNlIGlmIChleGl0aW5nKHRjcCkpIHsKPiArCQl0cHJp bnRmKCIsIGVuY29kZXJzX3B0cj0lcCwgbW9kZXNfcHRyPSVwLCBwcm9wc19wdHI9JXAsICIKPiAr CQkJInByb3BfdmFsdWVzX3B0cj0lcCwgY291bnRfbW9kZXM9JXUsIGNvdW50X3Byb3BzPSV1LCAi Cj4gKwkJCSJjb3VudF9lbmNvZGVycz0ldSwgZW5jb2Rlcl9pZD0ldSwgY29ubmVjdG9yX3R5cGU9 JXUsICIKPiArCQkJImNvbm5lY3Rvcl90eXBlX2lkPSV1LCBjb25uZWN0aW9uPSV1LCBtbV93aWR0 aD0ldSwgIgo+ICsJCQkibW1faGVpZ2h0PSV1LCBzdWJwaXhlbD0ldX0iLCAodm9pZCAqKWNvbi5l bmNvZGVyc19wdHIsCj4gKwkJCSh2b2lkICopY29uLm1vZGVzX3B0ciwgKHZvaWQgKiljb24ucHJv cHNfcHRyLAo+ICsJCQkodm9pZCAqKWNvbi5wcm9wX3ZhbHVlc19wdHIsIGNvbi5jb3VudF9tb2Rl cywKPiArCQkJY29uLmNvdW50X3Byb3BzLCBjb24uY291bnRfZW5jb2RlcnMsIGNvbi5lbmNvZGVy X2lkLAo+ICsJCQljb24uY29ubmVjdG9yX3R5cGUsIGNvbi5jb25uZWN0b3JfdHlwZV9pZCwKPiAr CQkJY29uLmNvbm5lY3Rpb24sIGNvbi5tbV93aWR0aCwgY29uLm1tX2hlaWdodCwKPiArCQkJY29u LnN1YnBpeGVsKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBkcm1fbW9kZV9nZXRfcHJvcGVydHkoc3RydWN0IHRjYiAqdGNwLCBjb25zdCB1bnNpZ25lZCBp bnQgY29kZSwgbG9uZyBhcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1fbW9kZV9nZXRfcHJvcGVydHkg cHJvcDsKPiArCj4gKwlpZiAodW1vdmUodGNwLCBhcmcsICZwcm9wKSkKPiArCQlyZXR1cm4gMDsK PiArCj4gKwlpZiAoZW50ZXJpbmcodGNwKSkgewo+ICsJCXRwcmludGYoIiwge3Byb3BfaWQ9JXUi LCBwcm9wLnByb3BfaWQpOwo+ICsJfSBlbHNlIGlmIChleGl0aW5nKHRjcCkpIHsKPiArCQl0cHJp bnRmKCIsIHZhbHVlc19wdHI9JXAsIGVudW1fYmxvYl9wdHI9JXAsIGZsYWdzPTB4JXgsICIKPiAr CQkJIm5hbWU9JXMsIGNvdW50X3ZhbHVlcz0ldSwgY291bnRfZW51bV9ibG9icz0ldX0iLAo+ICsJ CQkodm9pZCAqKXByb3AudmFsdWVzX3B0ciwgKHZvaWQgKilwcm9wLmVudW1fYmxvYl9wdHIsCj4g KwkJCXByb3AuZmxhZ3MsIHByb3AubmFtZSwgcHJvcC5jb3VudF92YWx1ZXMsCj4gKwkJCXByb3Au Y291bnRfZW51bV9ibG9icyk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZHJtX21vZGVfc2V0X3Byb3BlcnR5KHN0cnVjdCB0Y2IgKnRjcCwgY29uc3QgdW5z aWduZWQgaW50IGNvZGUsIGxvbmcgYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfY29ubmVj dG9yX3NldF9wcm9wZXJ0eSBwcm9wOwo+ICsKPiArCWlmICh1bW92ZSh0Y3AsIGFyZywgJnByb3Ap KQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChlbnRlcmluZyh0Y3ApKSB7Cj4gKwkJdHByaW50 ZigiLCB7dmFsdWU9JUx1LCBwcm9wX2lkPSV1LCBjb25uZWN0b3JfaWQ9JXV9IiwKPiArCQkJcHJv cC52YWx1ZSwgcHJvcC5wcm9wX2lkLCBwcm9wLmNvbm5lY3Rvcl9pZCk7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX21vZGVfZ2V0X3Byb3BfYmxvYihz dHJ1Y3QgdGNiICp0Y3AsIGNvbnN0IHVuc2lnbmVkIGludCBjb2RlLCBsb25nIGFyZykKPiArewo+ ICsJc3RydWN0IGRybV9tb2RlX2dldF9ibG9iIGJsb2I7Cj4gKwo+ICsJaWYgKHVtb3ZlKHRjcCwg YXJnLCAmYmxvYikpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGVudGVyaW5nKHRjcCkpIHsK PiArCQl0cHJpbnRmKCIsIHtibG9iX2lkPSV1IiwgYmxvYi5ibG9iX2lkKTsKPiArCX0gZWxzZSBp ZiAoZXhpdGluZyh0Y3ApKSB7Cj4gKwkJdHByaW50ZigiLCBsZW5ndGg9JXUsIGRhdGE9JXB9Iiwg YmxvYi5sZW5ndGgsCj4gKwkJCSh2b2lkICopYmxvYi5kYXRhKTsKPiArCX0KPiArCj4gKwlyZXR1 cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcm1fbW9kZV9hZGRfZmIoc3RydWN0IHRjYiAq dGNwLCBjb25zdCB1bnNpZ25lZCBpbnQgY29kZSwgbG9uZyBhcmcpCj4gK3sKPiArCXN0cnVjdCBk cm1fbW9kZV9mYl9jbWQgY21kOwo+ICsKPiArCWlmICh1bW92ZSh0Y3AsIGFyZywgJmNtZCkpCj4g KwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGVudGVyaW5nKHRjcCkpIHsKPiArCQl0cHJpbnRmKCIs IHt3aWR0aD0ldSwgaGVpZ2h0PSV1LCBwaXRjaD0ldSwgYnBwPSV1LCBkZXB0aD0ldSwgIgo+ICsJ CQkiaGFuZGxlPSV1IiwgY21kLndpZHRoLCBjbWQuaGVpZ2h0LCBjbWQucGl0Y2gsCj4gKwkJCWNt ZC5icHAsIGNtZC5kZXB0aCwgY21kLmhhbmRsZSk7Cj4gKwl9IGVsc2UgaWYgKGV4aXRpbmcodGNw KSkgewo+ICsJCXRwcmludGYoIiwgZmJfaWQ9JXV9IiwgY21kLmZiX2lkKTsKPiArCX0KPiArCj4g KwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcm1fbW9kZV9nZXRfZmIoc3RydWN0 IHRjYiAqdGNwLCBjb25zdCB1bnNpZ25lZCBpbnQgY29kZSwgbG9uZyBhcmcpCj4gK3sKPiArCXN0 cnVjdCBkcm1fbW9kZV9mYl9jbWQgY21kOwo+ICsKPiArCWlmICh1bW92ZSh0Y3AsIGFyZywgJmNt ZCkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGVudGVyaW5nKHRjcCkpIHsKPiArCQl0cHJp bnRmKCIsIHtmYl9pZD0ldSIsIGNtZC5mYl9pZCk7Cj4gKwl9IGVsc2Ugewo+ICsJCXRwcmludGYo Iiwgd2lkdGg9JXUsIGhlaWdodD0ldSwgcGl0Y2g9JXUsIGJwcD0ldSwgZGVwdGg9JXUsICIKPiAr CQkiaGFuZGxlPSV1fSIsIGNtZC53aWR0aCwgY21kLmhlaWdodCwgY21kLnBpdGNoLAo+ICsJCWNt ZC5icHAsIGNtZC5kZXB0aCwgY21kLmhhbmRsZSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDE7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX21vZGVfcm1fZmIoc3RydWN0IHRjYiAqdGNwLCBjb25z dCB1bnNpZ25lZCBpbnQgY29kZSwgbG9uZyBhcmcpCj4gK3sKPiArCXVuc2lnbmVkIGludCBoYW5k bGU7Cj4gKwo+ICsJaWYgKHVtb3ZlKHRjcCwgYXJnLCAmaGFuZGxlKSkKPiArCQlyZXR1cm4gMDsK PiArCj4gKwlpZiAoZW50ZXJpbmcodGNwKSkKPiArCQl0cHJpbnRmKCIsICV1IiwgaGFuZGxlKTsK PiArCj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcm1fbW9kZV9wYWdlX2Zs aXAoc3RydWN0IHRjYiAqdGNwLCBjb25zdCB1bnNpZ25lZCBpbnQgY29kZSwgbG9uZyBhcmcpCj4g K3sKPiArCXN0cnVjdCBkcm1fbW9kZV9jcnRjX3BhZ2VfZmxpcCBmbGlwOwo+ICsKPiArCWlmICh1 bW92ZSh0Y3AsIGFyZywgJmZsaXApKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChlbnRlcmlu Zyh0Y3ApKSB7Cj4gKwkJdHByaW50ZigiLCB7Y3J0Y19pZD0ldSwgZmJfaWQ9JXUsIGZsYWdzPTB4 JXgsIHVzZXJfZGF0YT0weCVMeH0iLAo+ICsJCQlmbGlwLmNydGNfaWQsIGZsaXAuZmJfaWQsIGZs aXAuZmxhZ3MsIGZsaXAudXNlcl9kYXRhKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMTsKPiArfQo+ ICsKPiArc3RhdGljIGludCBkcm1fbW9kZV9kaXJ0eV9mYihzdHJ1Y3QgdGNiICp0Y3AsIGNvbnN0 IHVuc2lnbmVkIGludCBjb2RlLCBsb25nIGFyZykKPiArewo+ICsJc3RydWN0IGRybV9tb2RlX2Zi X2RpcnR5X2NtZCBjbWQ7Cj4gKwo+ICsJaWYgKHVtb3ZlKHRjcCwgYXJnLCAmY21kKSkKPiArCQly ZXR1cm4gMDsKPiArCj4gKwlpZiAoZW50ZXJpbmcodGNwKSkgewo+ICsJCXRwcmludGYoIiwge2Zi X2lkPSV1LCBmbGFncz0weCV4LCBjb2xvcj0weCV4LCBudW1fY2xpcHM9JXUsICIKPiArCQkJImNs aXBzX3B0cj0lcH0iLCBjbWQuZmJfaWQsIGNtZC5mbGFncywgY21kLmNvbG9yLAo+ICsJCQljbWQu bnVtX2NsaXBzLCAodm9pZCAqKWNtZC5jbGlwc19wdHIpOwo+ICsJfQo+ICsKPiArCXJldHVybiAx Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9tb2RlX2NyZWF0ZV9kdW1iKHN0cnVjdCB0Y2Ig KnRjcCwgY29uc3QgdW5zaWduZWQgaW50IGNvZGUsIGxvbmcgYXJnKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHJtX21vZGVfY3JlYXRlX2R1bWIgZHVtYjsKPiArCj4gKwlpZiAodW1vdmUodGNwLCBhcmcsICZk dW1iKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoZW50ZXJpbmcodGNwKSkgewo+ICsJCXRw cmludGYoIiwge3dpZHRoPSV1LCBoZWlnaHQ9JXUsIGJwcD0ldSwgZmxhZ3M9MHgleCIsCj4gKwkJ CWR1bWIud2lkdGgsIGR1bWIuaGVpZ2h0LCBkdW1iLmJwcCwgZHVtYi5mbGFncyk7Cj4gKwl9IGVs c2UgaWYgKGV4aXRpbmcodGNwKSkgewo+ICsJCXRwcmludGYoIiwgaGFuZGxlPSV1LCBwaXRjaD0l dSwgc2l6ZT0lTHV9IiwgZHVtYi5oYW5kbGUsCj4gKwkJCWR1bWIucGl0Y2gsIGR1bWIuc2l6ZSk7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX21vZGVf bWFwX2R1bWIoc3RydWN0IHRjYiAqdGNwLCBjb25zdCB1bnNpZ25lZCBpbnQgY29kZSwgbG9uZyBh cmcpCj4gK3sKPiArCXN0cnVjdCBkcm1fbW9kZV9tYXBfZHVtYiBkdW1iOwo+ICsKPiArCWlmICh1 bW92ZSh0Y3AsIGFyZywgJmR1bWIpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChlbnRlcmlu Zyh0Y3ApKSB7Cj4gKwkJdHByaW50ZigiLCB7aGFuZGxlPSV1IiwgZHVtYi5oYW5kbGUpOwo+ICsJ fSBlbHNlIGlmIChleGl0aW5nKHRjcCkpIHsKPiArCQl0cHJpbnRmKCIsIG9mZnNldD0lTHV9Iiwg ZHVtYi5vZmZzZXQpOwo+ICsJfQo+ICsKPiArCXJldHVybiAxOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGRybV9tb2RlX2Rlc3Ryb3lfZHVtYihzdHJ1Y3QgdGNiICp0Y3AsIGNvbnN0IHVuc2lnbmVk IGludCBjb2RlLCBsb25nIGFyZykKPiArewo+ICsJc3RydWN0IGRybV9tb2RlX2Rlc3Ryb3lfZHVt YiBkdW1iOwo+ICsKPiArCWlmICh1bW92ZSh0Y3AsIGFyZywgJmR1bWIpKQo+ICsJCXJldHVybiAw Owo+ICsKPiArCWlmIChlbnRlcmluZyh0Y3ApKQo+ICsJCXRwcmludGYoIiwge2hhbmRsZT0ldX0i LCBkdW1iLmhhbmRsZSk7Cj4gKwo+ICsJcmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg ZHJtX2dlbV9jbG9zZShzdHJ1Y3QgdGNiICp0Y3AsIGNvbnN0IHVuc2lnbmVkIGludCBjb2RlLCBs b25nIGFyZykKPiArewo+ICsJc3RydWN0IGRybV9nZW1fY2xvc2UgY2xvc2U7Cj4gKwo+ICsJaWYg KHVtb3ZlKHRjcCwgYXJnLCAmY2xvc2UpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChlbnRl cmluZyh0Y3ApKQo+ICsJCXRwcmludGYoIiwge2hhbmRsZT0ldX0iLCBjbG9zZS5oYW5kbGUpOwo+ ICsKPiArCXJldHVybiAxOwo+ICt9Cj4gKwo+ICBpbnQgZHJtX2lvY3RsKHN0cnVjdCB0Y2IgKnRj cCwgY29uc3QgdW5zaWduZWQgaW50IGNvZGUsIGxvbmcgYXJnKQo+ICB7Cj4gIAkvKiBDaGVjayBm b3IgZGV2aWNlIHNwZWNpZmljIGlvY3RscyAqLwo+IEBAIC0xMTIsNiArNTY5LDU5IEBAIGludCBk cm1faW9jdGwoc3RydWN0IHRjYiAqdGNwLCBjb25zdCB1bnNpZ25lZCBpbnQgY29kZSwgbG9uZyBh cmcpCj4gIAkJCXJldHVybiBkcm1faTkxNV9pb2N0bCh0Y3AsIGNvZGUsIGFyZyk7Cj4gIAl9Cj4g IAo+ICsJc3dpdGNoIChjb2RlKSB7Cj4gKwljYXNlIERSTV9JT0NUTF9WRVJTSU9OOgo+ICsJCXJl dHVybiBkcm1fdmVyc2lvbih0Y3AsIGNvZGUsIGFyZyk7Cj4gKwljYXNlIERSTV9JT0NUTF9HRVRf VU5JUVVFOgo+ICsJCXJldHVybiBkcm1fZ2V0X3VuaXF1ZSh0Y3AsIGNvZGUsIGFyZyk7Cj4gKwlj YXNlIERSTV9JT0NUTF9HRVRfTUFHSUM6Cj4gKwkJcmV0dXJuIGRybV9nZXRfbWFnaWModGNwLCBj b2RlLCBhcmcpOwo+ICsJY2FzZSBEUk1fSU9DVExfV0FJVF9WQkxBTks6Cj4gKwkJcmV0dXJuIGRy bV93YWl0X3ZibGFuayh0Y3AsIGNvZGUsIGFyZyk7Cj4gKwljYXNlIERSTV9JT0NUTF9NT0RFX0dF VFJFU09VUkNFUzoKPiArCQlyZXR1cm4gZHJtX21vZGVfZ2V0X3Jlc291cmNlcyh0Y3AsIGNvZGUs IGFyZyk7Cj4gKwljYXNlIERSTV9JT0NUTF9NT0RFX0dFVENSVEM6Cj4gKwkJcmV0dXJuIGRybV9t b2RlX2dldF9jcnRjKHRjcCwgY29kZSwgYXJnKTsKPiArCWNhc2UgRFJNX0lPQ1RMX01PREVfU0VU Q1JUQzoKPiArCQlyZXR1cm4gZHJtX21vZGVfc2V0X2NydGModGNwLCBjb2RlLCBhcmcpOwo+ICsJ Y2FzZSBEUk1fSU9DVExfTU9ERV9DVVJTT1I6Cj4gKwkJcmV0dXJuIGRybV9tb2RlX2N1cnNvcih0 Y3AsIGNvZGUsIGFyZyk7Cj4gKwljYXNlIERSTV9JT0NUTF9NT0RFX0NVUlNPUjI6Cj4gKwkJcmV0 dXJuIGRybV9tb2RlX2N1cnNvcjIodGNwLCBjb2RlLCBhcmcpOwo+ICsJY2FzZSBEUk1fSU9DVExf TU9ERV9HRVRHQU1NQToKPiArCQlyZXR1cm4gZHJtX21vZGVfZ2V0X2dhbW1hKHRjcCwgY29kZSwg YXJnKTsKPiArCWNhc2UgRFJNX0lPQ1RMX01PREVfU0VUR0FNTUE6Cj4gKwkJcmV0dXJuIGRybV9t b2RlX3NldF9nYW1tYSh0Y3AsIGNvZGUsIGFyZyk7Cj4gKwljYXNlIERSTV9JT0NUTF9NT0RFX0dF VEVOQ09ERVI6Cj4gKwkJcmV0dXJuIGRybV9tb2RlX2dldF9lbmNvZGVyKHRjcCwgY29kZSwgYXJn KTsKPiArCWNhc2UgRFJNX0lPQ1RMX01PREVfR0VUQ09OTkVDVE9SOgo+ICsJCXJldHVybiBkcm1f bW9kZV9nZXRfY29ubmVjdG9yKHRjcCwgY29kZSwgYXJnKTsKPiArCWNhc2UgRFJNX0lPQ1RMX01P REVfR0VUUFJPUEVSVFk6Cj4gKwkJcmV0dXJuIGRybV9tb2RlX2dldF9wcm9wZXJ0eSh0Y3AsIGNv ZGUsIGFyZyk7Cj4gKwljYXNlIERSTV9JT0NUTF9NT0RFX1NFVFBST1BFUlRZOgo+ICsJCXJldHVy biBkcm1fbW9kZV9zZXRfcHJvcGVydHkodGNwLCBjb2RlLCBhcmcpOwo+ICsJY2FzZSBEUk1fSU9D VExfTU9ERV9HRVRQUk9QQkxPQjoKPiArCQlyZXR1cm4gZHJtX21vZGVfZ2V0X3Byb3BfYmxvYih0 Y3AsIGNvZGUsIGFyZyk7Cj4gKwljYXNlIERSTV9JT0NUTF9NT0RFX0dFVEZCOgo+ICsJCXJldHVy biBkcm1fbW9kZV9nZXRfZmIodGNwLCBjb2RlLCBhcmcpOwo+ICsJY2FzZSBEUk1fSU9DVExfTU9E RV9BRERGQjoKPiArCQlyZXR1cm4gZHJtX21vZGVfYWRkX2ZiKHRjcCwgY29kZSwgYXJnKTsKPiAr CWNhc2UgRFJNX0lPQ1RMX01PREVfUk1GQjoKPiArCQlyZXR1cm4gZHJtX21vZGVfcm1fZmIodGNw LCBjb2RlLCBhcmcpOwo+ICsJY2FzZSBEUk1fSU9DVExfTU9ERV9QQUdFX0ZMSVA6Cj4gKwkJcmV0 dXJuIGRybV9tb2RlX3BhZ2VfZmxpcCh0Y3AsIGNvZGUsIGFyZyk7Cj4gKwljYXNlIERSTV9JT0NU TF9NT0RFX0RJUlRZRkI6Cj4gKwkJcmV0dXJuIGRybV9tb2RlX2RpcnR5X2ZiKHRjcCwgY29kZSwg YXJnKTsKPiArCWNhc2UgRFJNX0lPQ1RMX01PREVfQ1JFQVRFX0RVTUI6Cj4gKwkJcmV0dXJuIGRy bV9tb2RlX2NyZWF0ZV9kdW1iKHRjcCwgY29kZSwgYXJnKTsKPiArCWNhc2UgRFJNX0lPQ1RMX01P REVfTUFQX0RVTUI6Cj4gKwkJcmV0dXJuIGRybV9tb2RlX21hcF9kdW1iKHRjcCwgY29kZSwgYXJn KTsKPiArCWNhc2UgRFJNX0lPQ1RMX01PREVfREVTVFJPWV9EVU1COgo+ICsJCXJldHVybiBkcm1f bW9kZV9kZXN0cm95X2R1bWIodGNwLCBjb2RlLCBhcmcpOwo+ICsJY2FzZSBEUk1fSU9DVExfR0VN X0NMT1NFOgo+ICsJCXJldHVybiBkcm1fZ2VtX2Nsb3NlKHRjcCwgY29kZSwgYXJnKTsKPiArCX0K PiArCgpKdXN0IHJlYWxpemVkIEknbSBsZWFraW5nIG1lbW9yeSBoZXJlIGJlY2F1c2Ugb2YgdGhv c2UgcmV0dXJucy4gV2lsbCB0YWtlIGNhcmUKb2YgdGhhdC4KCj4gIAkvKiBGcmVlIGFueSBhbGxv Y2F0ZWQgcHJpdmF0ZSBkYXRhICovCj4gIAlpZiAoZXhpdGluZyh0Y3ApICYmIHRjcC0+cHJpdl9k YXRhICE9IE5VTEwpIHsKPiAgCQlmcmVlKHRjcC0+cHJpdl9kYXRhKTsKPiAtLSAKPiAyLjEuNAo+ IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==