From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id D25036E2F8 for ; Fri, 22 Mar 2019 09:58:39 +0000 (UTC) References: <20190321160528.4131-1-andi.shyti@intel.com> <20190321160528.4131-5-andi.shyti@intel.com> From: Tvrtko Ursulin Message-ID: Date: Fri, 22 Mar 2019 09:58:37 +0000 MIME-Version: 1.0 In-Reply-To: <20190321160528.4131-5-andi.shyti@intel.com> Content-Language: en-US Subject: Re: [igt-dev] [PATCH v15 4/5] lib/i915: add gem_engine_topology library and for_each loop definition 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: Andi Shyti , IGT dev Cc: Andi Shyti List-ID: Ck9uIDIxLzAzLzIwMTkgMTY6MDUsIEFuZGkgU2h5dGkgd3JvdGU6Cj4gVGhlIGdlbV9lbmdpbmVf dG9wb2xvZ3kgbGlicmFyeSBpcyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdAo+IGludGVyZmFjZSB3 aXRoIHRoZSBxdWVyeSBhbmQgZ2V0cGFyYW0vc2V0cGFyYW0gaW9jdGxzLgo+IAo+IFRoZSBsaWJy YXJ5J3MgYWNjZXNzIHBvaW50IGlzIHRoZSAnaW50ZWxfaW5pdF9lbmdpbmVfbGlzdCgpJwo+IGZ1 bmN0aW9uIHRoYXQsIGV2ZXJ5dGltZSBpcyBjYWxsZWQsIGdlbmVyYXRlcyB0aGUgbGlzdCBvZiBh Y3RpdmUKPiBlbmdpbmVzIGFuZCByZXR1cm5zIHRoZW0gaW4gYSAnc3RydWN0IGludGVsX2VuZ2lu ZV9kYXRhJy4gVGhlCj4gc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgdGhlIGVuZ2luZXMgdGhhdCBh cmUgYWN0aXZlbHkgcHJlc2VudCBpbgo+IHRoZSBHUFUuCj4gCj4gVGhlIGZ1bmN0aW9uIGNhbiB3 b3JrIGluIGJvdGggdGhlIGNhc2VzIHRoYXQgdGhlIHF1ZXJ5IGFuZAo+IGdldHBhcmFtIGlvY3Rs cyBhcmUgaW1wbGVtZW50ZWQgb3Igbm90IGJ5IHRoZSBydW5uaW5nIGtlcm5lbC4gSW4KPiBjYXNl IHRoZXkgYXJlIGltcGxlbWVudGVkLCBhIHF1ZXJ5IGlzIG1hZGUgdG8gdGhlIGRyaXZlciB0byBm ZXRjaAo+IHRoZSBsaXN0IG9mIGFjdGl2ZSBlbmdpbmVzLiBJbiBjYXNlIHRoZXkgYXJlIG5vdCBp bXBsZW1lbnRlZCwgdGhlCj4gbGlzdCBpcyB0YWtlbiBmcm9tIHRoZSAnaW50ZWxfZXhlY3V0aW9u X2VuZ2luZXMyJyBhcnJheSBhbmQKPiBzdG9yZWQgb25seSBhZnRlciBjaGVja2luZyB0aGVpciBw cmVzZW5jZS4KPiAKPiBUaGUgZ2VtX2VuZ2luZV90b3BvbG9neSBsaWJyYXJ5IHByb3ZpZGVzIHNv bWUgaXRlcmF0aW9uIGhlbHBlcnM6Cj4gCj4gICAtIGludGVsX2dldF9jdXJyZW50X2VuZ2luZSgp OiBwcm92aWRlcyB0aGUgY3VycmVudCBlbmdpbmUgaW4gdGhlCj4gICAgIGl0ZXJhdGlvbi4KPiAK PiAgIC0gaW50ZWxfZ2V0X2N1cnJlbnRfcGh5c2ljYWxfZW5naW5lKCk6IHByb3ZpZGVzIHRoZSBj dXJyZW50Cj4gICAgIHBoeXNpY2FsIGVuZ2luZSwgaWYgdGhlIGN1cnJlbnQgZW5naW5lIGlzIGEg dmlydHVhbCBlbmdpbmUsCj4gICAgIGl0IG1vdmVzIGZvcndhcmQgdW50aWwgaXQgZmluZHMgYSBw aHlzaWNhbCBlbmdpbmUuCj4gCj4gICAtIGludGVsX25leHRfZW5naW5lKCkgaXQganVzdCBpbmNy ZW1lbnRzIHRoZSBjb3VudGVyIHNvIHRoYXQgaXQKPiAgICAgcG9pbnRzIHRvIHRoZSBuZXh0IGVu Z2luZS4KPiAKPiBFeHRlbmQgdGhlICdmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UnIHNv IHRoYXQgaXQgY2FuIGxvb3AKPiB1c2luZyB0aGUgbmV3ICdpbnRlbF9pbml0X2VuZ2luZV9saXN0 KCknIGFuZCByZW5hbWUgaXQgdG8KPiAnZm9yX2VhY2hfY29udGV4dF9lbmdpbmUnLgo+IAo+IE1v dmUgJ19fZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlJyB0byBnZW1fZW5naW5lX3RvcG9s b2d5LmgKPiBhbmQgcmVuYW1lIGl0IHRvICdfX2Zvcl9lYWNoX3N0YXRpY19lbmdpbmUnLgo+IAo+ IFVwZGF0ZSBhY2NvcmRpbmdseSB0ZXN0cy9wZXJmX3BtdS5jIHRvIHVzZSBjb3JyZWN0bHkgdGhl IG5ldwo+IGZvcl9lYWNoIGxvcHBzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFuZGkgU2h5dGkgPGFu ZGkuc2h5dGlAaW50ZWwuY29tPgo+IC0tLQo+ICAgbGliL01ha2VmaWxlLnNvdXJjZXMgICAgICAg ICAgIHwgICAyICsKPiAgIGxpYi9pOTE1L2dlbV9lbmdpbmVfdG9wb2xvZ3kuYyB8IDIyMiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIGxpYi9pOTE1L2dlbV9lbmdpbmVfdG9w b2xvZ3kuaCB8ICA2MyArKysrKysrKysrCj4gICBsaWIvaWd0LmggICAgICAgICAgICAgICAgICAg ICAgfCAgIDEgKwo+ICAgbGliL2lndF9ndC5oICAgICAgICAgICAgICAgICAgIHwgICA4ICstCj4g ICBsaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICAgdGVzdHMvcGVyZl9w bXUuYyAgICAgICAgICAgICAgIHwgIDEyICstCj4gICA3IGZpbGVzIGNoYW5nZWQsIDI5NiBpbnNl cnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaTkx NS9nZW1fZW5naW5lX3RvcG9sb2d5LmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaTkxNS9n ZW1fZW5naW5lX3RvcG9sb2d5LmgKPiAKPiBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJj ZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IGNmMjcyMDk4MTcwNy4uNzU3YmQ3YTE3 ZWJlIDEwMDY0NAo+IC0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvbGliL01ha2Vm aWxlLnNvdXJjZXMKPiBAQCAtMTMsNiArMTMsOCBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKPiAg IAlpOTE1L2dlbV9yaW5nLmMJXAo+ICAgCWk5MTUvZ2VtX21tYW4uYwlcCj4gICAJaTkxNS9nZW1f bW1hbi5oCVwKPiArCWk5MTUvZ2VtX2VuZ2luZV90b3BvbG9neS5jCVwKPiArCWk5MTUvZ2VtX2Vu Z2luZV90b3BvbG9neS5oCVwKPiAgIAlpOTE1XzNkLmgJCVwKPiAgIAlpOTE1X3JlZy5oCQlcCj4g ICAJaTkxNV9wY2lpZHMuaAkJXAo+IGRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fZW5naW5lX3Rv cG9sb2d5LmMgYi9saWIvaTkxNS9nZW1fZW5naW5lX3RvcG9sb2d5LmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTE0NGM0OWExOTkzCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2xpYi9pOTE1L2dlbV9lbmdpbmVfdG9wb2xvZ3kuYwo+IEBAIC0wLDAgKzEsMjIy IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4gKyAq Cj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4g KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImRybXRlc3QuaCIK PiArI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCj4gKwo+ICsjaW5jbHVkZSAiaTkxNS9nZW1f ZW5naW5lX3RvcG9sb2d5LmgiCj4gKwo+ICsjZGVmaW5lIFNJWkVPRl9DVFhfUEFSQU0Jb2Zmc2V0 b2Yoc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVzLCBcCj4gKwkJCQkJY2xhc3NfaW5z dGFuY2VbSTkxNV9FWEVDX1JJTkdfTUFTSyArIDFdKQo+ICsjZGVmaW5lIFNJWkVPRl9RVUVSWQkJ b2Zmc2V0b2Yoc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2VuZ2luZV9pbmZvLCBcCj4gKwkJCQkJZW5n aW5lc1tJOTE1X0VYRUNfUklOR19NQVNLICsgMV0pCj4gKwo+ICtzdGF0aWMgaW50IF9fZ2VtX3F1 ZXJ5KGludCBmZCwgc3RydWN0IGRybV9pOTE1X3F1ZXJ5ICpxKQo+ICt7Cj4gKwlpbnQgZXJyID0g MDsKPiArCj4gKwlpZiAoaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9RVUVSWSwgcSkpCj4g KwkJZXJyID0gLWVycm5vOwo+ICsKPiArCWVycm5vID0gMDsKPiArCXJldHVybiBlcnI7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGdlbV9xdWVyeShpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9xdWVy eSAqcSkKPiArewo+ICsJaWd0X2Fzc2VydF9lcShfX2dlbV9xdWVyeShmZCwgcSksIDApOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBxdWVyeV9lbmdpbmVzKGludCBmZCwKPiArCQkJICBzdHJ1Y3Qg ZHJtX2k5MTVfcXVlcnlfZW5naW5lX2luZm8gKnF1ZXJ5X2VuZ2luZXMsCj4gKwkJCSAgaW50IGxl bmd0aCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gaXRlbSA9IHsgfTsKPiAr CXN0cnVjdCBkcm1faTkxNV9xdWVyeSBxdWVyeSA9IHsgfTsKPiArCj4gKwlpdGVtLnF1ZXJ5X2lk ID0gRFJNX0k5MTVfUVVFUllfRU5HSU5FX0lORk87Cj4gKwlxdWVyeS5pdGVtc19wdHIgPSB0b191 c2VyX3BvaW50ZXIoJml0ZW0pOwo+ICsJcXVlcnkubnVtX2l0ZW1zID0gMTsKPiArCWl0ZW0ubGVu Z3RoID0gbGVuZ3RoOwo+ICsKPiArCWl0ZW0uZGF0YV9wdHIgPSB0b191c2VyX3BvaW50ZXIocXVl cnlfZW5naW5lcyk7Cj4gKwo+ICsJZ2VtX3F1ZXJ5KGZkLCAmcXVlcnkpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBjdHhfbWFwX2VuZ2luZXMoaW50IGZkLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Rh dGEgKmVkLAo+ICsJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtICpjdHhf cGFyYW0pCj4gK3sKPiArCXN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcyAqY3R4X2Vu Z2luZSA9Cj4gKwkJCShzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2luZXMqKSBjdHhfcGFy YW0tPnZhbHVlOwo+ICsJaW50IGkgPSAwOwo+ICsKPiArCWZvciAodHlwZW9mKGN0eF9lbmdpbmUt PmNsYXNzX2luc3RhbmNlWzBdKSAqcCA9Cj4gKwkJCSZjdHhfZW5naW5lLT5jbGFzc19pbnN0YW5j ZVswXTsKPiArCQkJCQkJaSA8IGVkLT5uZW5naW5lczsgaSsrLCBwKyspIHsKPiArCQlwLT5lbmdp bmVfY2xhc3MgPSBlZC0+ZW5naW5lc1tpXS5jbGFzczsKPiArCQlwLT5lbmdpbmVfaW5zdGFuY2Ug PSBlZC0+ZW5naW5lc1tpXS5pbnN0YW5jZTsKPiArCX0KPiArCj4gKwljdHhfcGFyYW0tPnNpemUg PSBvZmZzZXRvZih0eXBlb2YoKmN0eF9lbmdpbmUpLCBjbGFzc19pbnN0YW5jZVtpXSk7Cj4gKwo+ ICsJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCBjdHhfcGFyYW0pOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBpbml0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUyLCBj b25zdCBjaGFyICpuYW1lLAo+ICsJCQl1aW50MTZfdCBjbGFzcywgdWludDE2X3QgaW5zdGFuY2Us IHVpbnQ2NF90IGZsYWdzKQo+ICt7Cj4gKwlzdGF0aWMgY29uc3QgY2hhciAqdW5rbm93bl9uYW1l ID0gInVua25vd24iLAo+ICsJCQkgICp2aXJ0dWFsX25hbWUgPSAidmlydHVhbCI7Cj4gKwo+ICsJ ZTItPmNsYXNzICAgID0gY2xhc3M7Cj4gKwllMi0+aW5zdGFuY2UgPSBpbnN0YW5jZTsKPiArCWUy LT5mbGFncyAgICA9IGZsYWdzOwo+ICsKPiArCWlmIChjbGFzcyA8IDAgJiYgaW5zdGFuY2UgPCAw KSB7Cj4gKwkJZTItPm5hbWUgPSB2aXJ0dWFsX25hbWU7Cj4gKwl9IGVsc2Ugewo+ICsJCWNvbnN0 IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqX19lMjsKPiArCj4gKwkJX19mb3JfZWFj aF9zdGF0aWNfZW5naW5lKF9fZTIpCj4gKwkJCWlmIChfX2UyLT5jbGFzcyA9PSBjbGFzcyAmJiBf X2UyLT5pbnN0YW5jZSA9PSBpbnN0YW5jZSkKPiArCQkJCWJyZWFrOwo+ICsKPiArCQllMi0+bmFt ZSA9IF9fZTItPm5hbWUgPyBfX2UyLT5uYW1lIDogdW5rbm93bl9uYW1lOwo+ICsJfQo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBxdWVyeV9lbmdpbmVfbGlzdChpbnQgZmQsIHN0cnVjdCBpbnRlbF9l bmdpbmVfZGF0YSAqZWQpCj4gK3sKPiArCXVpbnQ4X3QgcXVlcnlfYnVmZmVyW1NJWkVPRl9RVUVS WV0gPSB7IH07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZW5naW5lX2luZm8gKnF1ZXJ5X2Vu Z2luZSA9Cj4gKwkJCShzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZW5naW5lX2luZm8gKikgcXVlcnlf YnVmZmVyOwo+ICsJaW50IGk7Cj4gKwo+ICsJcXVlcnlfZW5naW5lcyhmZCwgcXVlcnlfZW5naW5l LCBTSVpFT0ZfUVVFUlkpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBxdWVyeV9lbmdpbmUtPm51 bV9lbmdpbmVzOyBpKyspCj4gKwkJaW5pdF9lbmdpbmUoJmVkLT5lbmdpbmVzW2ldLCBOVUxMLAo+ ICsJCQkgICBxdWVyeV9lbmdpbmUtPmVuZ2luZXNbaV0uZW5naW5lX2NsYXNzLAo+ICsJCQkgICBx dWVyeV9lbmdpbmUtPmVuZ2luZXNbaV0uZW5naW5lX2luc3RhbmNlLCBpKTsKPiArCj4gKwllZC0+ bmVuZ2luZXMgPSBxdWVyeV9lbmdpbmUtPm51bV9lbmdpbmVzOwo+ICt9Cj4gKwo+ICtzdHJ1Y3Qg aW50ZWxfZW5naW5lX2RhdGEgaW50ZWxfaW5pdF9lbmdpbmVfbGlzdChpbnQgZmQsIHVpbnQzMl90 IGN0eF9pZCkKPiArewo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9kYXRhIGVuZ2luZV9kYXRhID0g eyB9Owo+ICsJdWludDhfdCBidWZmW1NJWkVPRl9DVFhfUEFSQU1dID0geyB9Owo+ICsKPiArCXN0 cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcyAqZW5naW5lcyA9Cj4gKwkJKHN0cnVjdCBp OTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcyAqKSBidWZmOwo+ICsKPiArCXN0cnVjdCBkcm1faTkx NV9nZW1fY29udGV4dF9wYXJhbSBwYXJhbSA9IHsKPiArCQkucGFyYW0gPSBJOTE1X0NPTlRFWFRf UEFSQU1fRU5HSU5FUywKPiArCQkuY3R4X2lkID0gY3R4X2lkLAo+ICsJCS5zaXplID0gU0laRU9G X0NUWF9QQVJBTSwKPiArCQkudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoZW5naW5lcyksCj4gKwl9 Owo+ICsKPiArCWludCBpLCByZXQ7Cj4gKwl1bnNpZ25lZCBpbnQgbmVuZ2luZXM7Cj4gKwo+ICsJ cmV0ID0gX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZwYXJhbSk7Cj4gKwo+ICsJbmVuZ2lu ZXMgPSBwYXJhbS5zaXplID4gc2l6ZW9mKHN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5l cykgPwo+ICsJCSAgIChwYXJhbS5zaXplIC0gc2l6ZW9mKHN0cnVjdCBpOTE1X2NvbnRleHRfcGFy YW1fZW5naW5lcykpIC8KPiArCQkgICBzaXplb2YoZW5naW5lcy0+Y2xhc3NfaW5zdGFuY2VbMF0p IDoKPiArCQkgICAwOwo+ICsKPiArCWlmIChuZW5naW5lcyA+IEk5MTVfRVhFQ19SSU5HX01BU0sg KyAxKSB7Cj4gKwkJZW5naW5lX2RhdGEuZXJyb3IgPSByZXQgPyByZXQgOiAtRUlOVkFMOwo+ICsJ CXJldHVybiBlbmdpbmVfZGF0YTsKPiArCX0KPiArCj4gKwlpZiAoX19nZW1fY29udGV4dF9nZXRf cGFyYW0oZmQsICZwYXJhbSkpIHsKCldoeSBhcmUgeW91IGNhbGxpbmcgZ2V0X3BhcmFtIHR3aWNl IGJ0dz8KClJlZ2FyZHMsCgpUdnJ0a28KCj4gKwkJLyogaWYga2VybmVsIGRvZXMgbm90IHN1cHBv cnQgZW5naW5lL2NvbnRleHQgbWFwcGluZyAqLwo+ICsJCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqZTI7Cj4gKwo+ICsJCWlndF9kZWJ1ZygidXNpbmcgcHJlLWFsbG9jYXRl ZCBlbmdpbmUgbGlzdFxuIik7Cj4gKwo+ICsJCV9fZm9yX2VhY2hfc3RhdGljX2VuZ2luZShlMikg ewo+ICsJCQlzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKl9fZTI7Cj4gKwo+ICsJCQlf X2UyID0gJmVuZ2luZV9kYXRhLmVuZ2luZXNbZW5naW5lX2RhdGEubmVuZ2luZXNdOwo+ICsJCQlf X2UyLT5mbGFncyA9IGdlbV9jbGFzc19pbnN0YW5jZV90b19lYl9mbGFncyhmZCwKPiArCQkJCQkJ ZTItPmNsYXNzLCBlMi0+aW5zdGFuY2UpOwo+ICsKPiArCQkJaWYgKCFnZW1faGFzX3JpbmcoZmQs IF9fZTItPmZsYWdzKSkKPiArCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJX19lMi0+bmFtZSA9IGUy LT5uYW1lOwo+ICsJCQlfX2UyLT5pbnN0YW5jZSA9IGUyLT5pbnN0YW5jZTsKPiArCQkJX19lMi0+ Y2xhc3MgPSBlMi0+Y2xhc3M7Cj4gKwkJCWVuZ2luZV9kYXRhLm5lbmdpbmVzKys7Cj4gKwkJfQo+ ICsKPiArCX0gZWxzZSBpZiAoIXBhcmFtLnNpemUpIHsKPiArCQkvKiBlbHNlIGlmIGNvbnRleHQg ZG9lc24ndCBoYXZlIG1hcHBlZCBlbmdpbmVzICovCj4gKwkJcXVlcnlfZW5naW5lX2xpc3QoZmQs ICZlbmdpbmVfZGF0YSk7Cj4gKwkJY3R4X21hcF9lbmdpbmVzKGZkLCAmZW5naW5lX2RhdGEsICZw YXJhbSk7Cj4gKwo+ICsJfSBlbHNlIHsKPiArCQkvKiBjb250ZXh0IGhhcyBhIGxpc3Qgb2YgbWFw cGVkIGVuZ2luZXMgKi8KPiArCj4gKwkJZm9yIChpID0gMDsgaSA8IG5lbmdpbmVzOyBpKyspCj4g KwkJCWluaXRfZW5naW5lKCZlbmdpbmVfZGF0YS5lbmdpbmVzW2ldLCBOVUxMLAo+ICsJCQkJICAg IGVuZ2luZXMtPmNsYXNzX2luc3RhbmNlW2ldLmVuZ2luZV9jbGFzcywKPiArCQkJCSAgICBlbmdp bmVzLT5jbGFzc19pbnN0YW5jZVtpXS5lbmdpbmVfaW5zdGFuY2UsCj4gKwkJCQkgICAgaSk7Cj4g Kwo+ICsJCWVuZ2luZV9kYXRhLm5lbmdpbmVzID0gaTsKPiArCX0KPiArCj4gKwlyZXR1cm4gZW5n aW5lX2RhdGE7Cj4gK30KPiArCj4gK3N0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMgo+ICsJ KmludGVsX2dldF9jdXJyZW50X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2RhdGEgKmVkKQo+ ICt7Cj4gKwlyZXR1cm4gKGVkLT5uIDwgZWQtPm5lbmdpbmVzKSAmJiAhZWQtPmVycm9yID8KPiAr CQkmZWQtPmVuZ2luZXNbZWQtPm5dIDoKPiArCQlOVUxMOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVs X25leHRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfZGF0YSAqZWQpCj4gK3sKPiArCWVkLT5u Kys7Cj4gK30KPiArCj4gK3N0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMgo+ICsJKmludGVs X2dldF9jdXJyZW50X3BoeXNpY2FsX2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2RhdGEgKmVk KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmU7Cj4gKwo+ICsJZm9y IChlID0gaW50ZWxfZ2V0X2N1cnJlbnRfZW5naW5lKGVkKTsKPiArCSAgICAgZSAmJiAhSVNfUEhZ U0lDQUxfRU5HSU5FKGUpOwo+ICsJICAgICBpbnRlbF9uZXh0X2VuZ2luZShlZCkpCj4gKwkJOwo+ ICsKPiArCXJldHVybiBlOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2xpYi9pOTE1L2dlbV9lbmdpbmVf dG9wb2xvZ3kuaCBiL2xpYi9pOTE1L2dlbV9lbmdpbmVfdG9wb2xvZ3kuaAo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mNjYyYTQ2MDFlY2QKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvbGliL2k5MTUvZ2VtX2VuZ2luZV90b3BvbG9neS5oCj4gQEAgLTAsMCArMSw2 MyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsg Kgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiAr ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRI T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MK PiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgR0VNX0VOR0lORV9U T1BPTE9HWV9ICj4gKyNkZWZpbmUgR0VNX0VOR0lORV9UT1BPTE9HWV9ICj4gKwo+ICsjaW5jbHVk ZSAiaWd0X2d0LmgiCj4gKyNpbmNsdWRlICJpOTE1X2RybS5oIgo+ICsKPiArc3RydWN0IGludGVs X2VuZ2luZV9kYXRhIHsKPiArCXVpbnQzMl90IG5lbmdpbmVzOwo+ICsJdWludDMyX3QgbjsKPiAr CWludCBlcnJvcjsKPiArCXN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiBlbmdpbmVzW0k5 MTVfRVhFQ19SSU5HX01BU0sgKyAxXTsKPiArfTsKPiArCj4gK3N0cnVjdCBpbnRlbF9lbmdpbmVf ZGF0YSBpbnRlbF9pbml0X2VuZ2luZV9saXN0KGludCBmZCwgdWludDMyX3QgY3R4X2lkKTsKPiAr Cj4gKy8qIGl0ZXJhdGlvbiBmdW5jdGlvbnMgKi8KPiArc3RydWN0IGludGVsX2V4ZWN1dGlvbl9l bmdpbmUyCj4gKwkqaW50ZWxfZ2V0X2N1cnJlbnRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVf ZGF0YSAqZWQpOwo+ICtzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIKPiArCSppbnRlbF9n ZXRfY3VycmVudF9waHlzaWNhbF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9kYXRhICplZCk7 Cj4gK3ZvaWQgaW50ZWxfbmV4dF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9kYXRhICplZCk7 Cj4gKwo+ICsjZGVmaW5lIElTX1BIWVNJQ0FMX0VOR0lORShlMikgKChlMi0+Y2xhc3MgPj0gMCkg JiYgKGUyLT5pbnN0YW5jZSA+PSAwKSkKPiArCj4gKy8qIG5lZWRzIHRvIHJlcGxhY2UgIl9fZm9y X2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlIiB3aGVuIGNvbmZsaWN0cyBhcmUgZml4ZWQgKi8K PiArI2RlZmluZSBfX2Zvcl9lYWNoX3N0YXRpY19lbmdpbmUoZV9fKSBcCj4gKwlmb3IgKChlX18p ID0gaW50ZWxfZXhlY3V0aW9uX2VuZ2luZXMyOyAoZV9fKS0+bmFtZTsgKGVfXykrKykKPiArCj4g KyNkZWZpbmUgZm9yX2VhY2hfY29udGV4dF9lbmdpbmUoZmRfXywgY3R4X18sIGVfXykgXAo+ICsJ Zm9yIChzdHJ1Y3QgaW50ZWxfZW5naW5lX2RhdGEgaV9fID0gaW50ZWxfaW5pdF9lbmdpbmVfbGlz dChmZF9fLCBjdHhfXyk7IFwKPiArCSAgICAgKChlX18pID0gaW50ZWxfZ2V0X2N1cnJlbnRfZW5n aW5lKCZpX18pKTsgXAo+ICsJICAgICBpbnRlbF9uZXh0X2VuZ2luZSgmaV9fKSkKPiArCj4gKy8q IG5lZWRzIHRvIHJlcGxhY2UgImZvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZSIgd2hlbiBjb25mbGlj dHMgYXJlIGZpeGVkICovCj4gKyNkZWZpbmUgX19mb3JfZWFjaF9waHlzaWNhbF9lbmdpbmVfXyhm ZF9fLCBlX18pIFwKPiArCWZvciAoc3RydWN0IGludGVsX2VuZ2luZV9kYXRhIGlfXyA9IGludGVs X2luaXRfZW5naW5lX2xpc3QoZmRfXywgMCk7IFwKPiArCSAgICAgKChlX18pID0gaW50ZWxfZ2V0 X2N1cnJlbnRfcGh5c2ljYWxfZW5naW5lKCZpX18pKTsgXAo+ICsJICAgICBpbnRlbF9uZXh0X2Vu Z2luZSgmaV9fKSkKPiArCj4gKyNlbmRpZiAvKiBHRU1fRU5HSU5FX1RPUE9MT0dZX0ggKi8KPiBk aWZmIC0tZ2l0IGEvbGliL2lndC5oIGIvbGliL2lndC5oCj4gaW5kZXggNjY1NGE2NTljMDYyLi4w M2YxOWNhMmRmYjYgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndC5oCj4gKysrIGIvbGliL2lndC5oCj4g QEAgLTUzLDUgKzUzLDYgQEAKPiAgICNpbmNsdWRlICJtZWRpYV9zcGluLmgiCj4gICAjaW5jbHVk ZSAicmVuZGVyY29weS5oIgo+ICAgI2luY2x1ZGUgImk5MTUvZ2VtX21tYW4uaCIKPiArI2luY2x1 ZGUgImk5MTUvZ2VtX2VuZ2luZV90b3BvbG9neS5oIgo+ICAgCj4gICAjZW5kaWYgLyogSUdUX0gg Ki8KPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9ndC5oIGIvbGliL2lndF9ndC5oCj4gaW5kZXggNDc1 YzBiM2MzY2M2Li4yYTcwMzJkNGIyNjIgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9ndC5oCj4gKysr IGIvbGliL2lndF9ndC5oCj4gQEAgLTk1LDYgKzk1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBp bnRlbF9leGVjdXRpb25fZW5naW5lMiB7Cj4gICAJY29uc3QgY2hhciAqbmFtZTsKPiAgIAlpbnQg Y2xhc3M7Cj4gICAJaW50IGluc3RhbmNlOwo+ICsJdWludDY0X3QgZmxhZ3M7Cj4gICB9IGludGVs X2V4ZWN1dGlvbl9lbmdpbmVzMltdOwo+ICAgCj4gICB1bnNpZ25lZCBpbnQKPiBAQCAtMTE0LDEx ICsxMTUsNCBAQCB2b2lkIGdlbV9yZXF1aXJlX2VuZ2luZShpbnQgZ2VtX2ZkLAo+ICAgCWlndF9y ZXF1aXJlKGdlbV9oYXNfZW5naW5lKGdlbV9mZCwgY2xhc3MsIGluc3RhbmNlKSk7Cj4gICB9Cj4g ICAKPiAtI2RlZmluZSBfX2Zvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZShlX18pIFwKPiAt CWZvciAoKGVfXykgPSBpbnRlbF9leGVjdXRpb25fZW5naW5lczI7IChlX18pLT5uYW1lOyAoZV9f KSsrKQo+IC0KPiAtI2RlZmluZSBmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UoZmRfXywg ZV9fKSBcCj4gLQlmb3IgKChlX18pID0gaW50ZWxfZXhlY3V0aW9uX2VuZ2luZXMyOyAoZV9fKS0+ bmFtZTsgKGVfXykrKykgXAo+IC0JCWZvcl9pZiAoZ2VtX2hhc19lbmdpbmUoKGZkX18pLCAoZV9f KS0+Y2xhc3MsIChlX18pLT5pbnN0YW5jZSkpCj4gLQo+ICAgI2VuZGlmIC8qIElHVF9HVF9IICov Cj4gZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZAo+IGluZGV4 IDBlYjU1ODVkNzJiOS4uM2NjNTJmOTdjOGJmIDEwMDY0NAo+IC0tLSBhL2xpYi9tZXNvbi5idWls ZAo+ICsrKyBiL2xpYi9tZXNvbi5idWlsZAo+IEBAIC01LDYgKzUsNyBAQCBsaWJfc291cmNlcyA9 IFsKPiAgIAknaTkxNS9nZW1fc3VibWlzc2lvbi5jJywKPiAgIAknaTkxNS9nZW1fcmluZy5jJywK PiAgIAknaTkxNS9nZW1fbW1hbi5jJywKPiArCSdpOTE1L2dlbV9lbmdpbmVfdG9wb2xvZ3kuYycs Cj4gICAJJ2lndF9jb2xvcl9lbmNvZGluZy5jJywKPiAgIAknaWd0X2RlYnVnZnMuYycsCj4gICAJ J2lndF9kZXZpY2UuYycsCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL3BlcmZfcG11LmMgYi90ZXN0cy9w ZXJmX3BtdS5jCj4gaW5kZXggNGY1NTJiYzJhZTI4Li4wZTEwYmNmZDE2OTMgMTAwNjQ0Cj4gLS0t IGEvdGVzdHMvcGVyZl9wbXUuYwo+ICsrKyBiL3Rlc3RzL3BlcmZfcG11LmMKPiBAQCAtNDM0LDcg KzQzNCw3IEBAIGJ1c3lfY2hlY2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9l eGVjdXRpb25fZW5naW5lMiAqZSwKPiAgIAo+ICAgCWkgPSAwOwo+ICAgCWZkWzBdID0gLTE7Cj4g LQlmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UoZ2VtX2ZkLCBlXykgewo+ICsJZm9yX2Vh Y2hfY29udGV4dF9lbmdpbmUoZ2VtX2ZkLCAwLCBlXykgewo+ICAgCQlpZiAoZSA9PSBlXykKPiAg IAkJCWJ1c3lfaWR4ID0gaTsKPiAgIAo+IEBAIC00OTcsNyArNDk3LDcgQEAgbW9zdF9idXN5X2No ZWNrX2FsbChpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIg KmUsCj4gICAJdW5zaWduZWQgaW50IGlkbGVfaWR4LCBpOwo+ICAgCj4gICAJaSA9IDA7Cj4gLQlm b3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UoZ2VtX2ZkLCBlXykgewo+ICsJZm9yX2VhY2hf Y29udGV4dF9lbmdpbmUoZ2VtX2ZkLCAwLCBlXykgewo+ICAgCQlpZiAoZSA9PSBlXykKPiAgIAkJ CWlkbGVfaWR4ID0gaTsKPiAgIAkJZWxzZSBpZiAoc3BpbikKPiBAQCAtNTU0LDcgKzU1NCw3IEBA IGFsbF9idXN5X2NoZWNrX2FsbChpbnQgZ2VtX2ZkLCBjb25zdCB1bnNpZ25lZCBpbnQgbnVtX2Vu Z2luZXMsCj4gICAJdW5zaWduZWQgaW50IGk7Cj4gICAKPiAgIAlpID0gMDsKPiAtCWZvcl9lYWNo X2VuZ2luZV9jbGFzc19pbnN0YW5jZShnZW1fZmQsIGUpIHsKPiArCWZvcl9lYWNoX2NvbnRleHRf ZW5naW5lKGdlbV9mZCwgMCwgZSkgewo+ICAgCQlpZiAoc3BpbikKPiAgIAkJCV9fc3VibWl0X3Nw aW5fYmF0Y2goZ2VtX2ZkLCBzcGluLCBlLCA2NCk7Cj4gICAJCWVsc2UKPiBAQCAtMTY4Myw3ICsx NjgzLDcgQEAgaWd0X21haW4KPiAgIAkJaWd0X3JlcXVpcmVfZ2VtKGZkKTsKPiAgIAkJaWd0X3Jl cXVpcmUoaTkxNV90eXBlX2lkKCkgPiAwKTsKPiAgIAo+IC0JCWZvcl9lYWNoX2VuZ2luZV9jbGFz c19pbnN0YW5jZShmZCwgZSkKPiArCQlmb3JfZWFjaF9jb250ZXh0X2VuZ2luZShmZCwgMCwgZSkK PiAgIAkJCW51bV9lbmdpbmVzKys7Cj4gICAJfQo+ICAgCj4gQEAgLTE2OTMsNyArMTY5Myw3IEBA IGlndF9tYWluCj4gICAJaWd0X3N1YnRlc3QoImludmFsaWQtaW5pdCIpCj4gICAJCWludmFsaWRf aW5pdCgpOwo+ICAgCj4gLQlfX2Zvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZShlKSB7Cj4g KwlfX2Zvcl9lYWNoX3N0YXRpY19lbmdpbmUoZSkgewo+ICAgCQljb25zdCB1bnNpZ25lZCBpbnQg cGN0W10gPSB7IDIsIDUwLCA5OCB9Owo+ICAgCj4gICAJCS8qKgo+IEBAIC0xODk3LDcgKzE4OTcs NyBAQCBpZ3RfbWFpbgo+ICAgCQkJZ2VtX3F1aWVzY2VudF9ncHUoZmQpOwo+ICAgCQl9Cj4gICAK PiAtCQlfX2Zvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZShlKSB7Cj4gKwkJX19mb3JfZWFj aF9zdGF0aWNfZW5naW5lKGUpIHsKPiAgIAkJCWlndF9zdWJ0ZXN0X2dyb3VwIHsKPiAgIAkJCQlp Z3RfZml4dHVyZSB7Cj4gICAJCQkJCWdlbV9yZXF1aXJlX2VuZ2luZShyZW5kZXJfZmQsCj4gCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFp bGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==