From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3A601897C5 for ; Mon, 24 Jun 2019 14:19:46 +0000 (UTC) From: "Ser, Simon" Date: Mon, 24 Jun 2019 14:15:45 +0000 Message-ID: <7eae002e11a714b044d62538ae8fb53e20fb7017.camel@intel.com> References: <20190619155518.25129-1-simon.ser@intel.com> <20190619155518.25129-10-simon.ser@intel.com> <20190624132257.2wmh7oxjsozvtszh@ahiler-desk1.fi.intel.com> In-Reply-To: <20190624132257.2wmh7oxjsozvtszh@ahiler-desk1.fi.intel.com> Content-Language: en-US Content-ID: <428D20AF238298458EB1C7905893DA66@intel.com> MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t v2 9/9] lib/igt_chamelium: autodiscover Chamelium port mappings List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "Hiler, Arkadiusz" Cc: "igt-dev@lists.freedesktop.org" , "Peres, Martin" List-ID: T24gTW9uLCAyMDE5LTA2LTI0IGF0IDE2OjIyICswMzAwLCBBcmthZGl1c3ogSGlsZXIgd3JvdGU6 DQo+IE9uIFdlZCwgSnVuIDE5LCAyMDE5IGF0IDA2OjU1OjE4UE0gKzAzMDAsIFNpbW9uIFNlciB3 cm90ZToNCj4gPiBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgZm9yIGNvbmZpZ3VyaW5nIENoYW1lbGl1 bSBwb3J0cyBpbiAuaWd0cmMsIG1ha2luZyBpdCBib3RoDQo+ID4gZWFzaWVyIGFuZCBsZXNzIGVy cm9yLXByb25lIHRvIHNldHVwIENoYW1lbGl1bSBib2FyZHMuDQo+ID4gDQo+ID4gQSBuZXcgZnVu Y3Rpb24gY2hhbWVsaXVtX2F1dG9kaXNjb3ZlciBzZXRzIGEgZGlmZmVyZW50IEVESUQgb24gZWFj aCBDaGFtZWxpdW0NCj4gPiBwb3J0IGFuZCBwbHVncyB0aGVtLiBXZSB0aGVuIHdhbGsgdGhlIGxp c3Qgb2YgRFJNIGNvbm5lY3RvcnMsIHJlYWQgYmFjayB0aGUNCj4gPiBFRElEIGFuZCBpbmZlciB0 aGUgbWFwcGluZy4NCj4gPiANCj4gPiBUaGUgRURJRCBzZXJpYWwgbnVtYmVyIGlzIHVzZWQgdG8g dGVsbCBlYWNoIHBvcnQgYXBhcnQuIEluIGNhc2UgYSBtYXBwaW5nIGlzDQo+ID4gYWxyZWFkeSBj b25maWd1cmVkIGluIHRoZSAuaWd0cmMgZmlsZSwgd2UgY2hlY2sgdGhhdCBpdCdzIGNvbnNpc3Rl bnQuDQo+ID4gDQo+ID4gTVNUIGlzIG5vdCBoYW5kbGVkIHlldCAocmVxdWlyZXMgcmVmYWN0b3Jp bmcgZXhpc3RpbmcgdGVzdHMgc2luY2UgY29ubmVjdG9yIElEcw0KPiA+IGFyZW4ndCBzdGFibGUp Lg0KPiA+IA0KPiA+IFNpZ25lZC1vZmYtYnk6IFNpbW9uIFNlciA8c2ltb24uc2VyQGludGVsLmNv bT4NCj4gPiAtLS0NCj4gPiAgbGliL2lndF9jaGFtZWxpdW0uYyB8IDIwNSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPiA+ICAxIGZpbGUgY2hhbmdlZCwgMjAz IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQo+ID4gDQo+ID4gZGlmZiAtLWdpdCBhL2xp Yi9pZ3RfY2hhbWVsaXVtLmMgYi9saWIvaWd0X2NoYW1lbGl1bS5jDQo+ID4gaW5kZXggZGNjNTll OWYwYjA0Li5kZGVhMWJhNDdkNGUgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL2lndF9jaGFtZWxpdW0u Yw0KPiA+ICsrKyBiL2xpYi9pZ3RfY2hhbWVsaXVtLmMNCj4gPiBAQCAtMzU4LDcgKzM1OCw3IEBA IHN0YXRpYyB4bWxycGNfdmFsdWUgKmNoYW1lbGl1bV9ycGMoc3RydWN0IGNoYW1lbGl1bSAqY2hh bWVsaXVtLA0KPiA+ICAgKi8NCj4gPiAgdm9pZCBjaGFtZWxpdW1fcGx1ZyhzdHJ1Y3QgY2hhbWVs aXVtICpjaGFtZWxpdW0sIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCkNCj4gPiAgew0KPiA+ IC0JaWd0X2RlYnVnKCJQbHVnZ2luZyAlc1xuIiwgcG9ydC0+bmFtZSk7DQo+ID4gKwlpZ3RfZGVi dWcoIlBsdWdnaW5nICVzIChDaGFtZWxpdW0gcG9ydCBJRCAlZClcbiIsIHBvcnQtPm5hbWUsIHBv cnQtPmlkKTsNCj4gPiAgCXhtbHJwY19ERUNSRUYoY2hhbWVsaXVtX3JwYyhjaGFtZWxpdW0sIE5V TEwsICJQbHVnIiwgIihpKSIsIHBvcnQtPmlkKSk7DQo+ID4gIH0NCj4gPiAgDQo+ID4gQEAgLTE4 MjgsNiArMTgyOCwyMDQgQEAgb3V0Og0KPiA+ICAJcmV0dXJuIHJldDsNCj4gPiAgfQ0KPiA+ICAN Cj4gPiArLyoqDQo+ID4gKyAqIGF1dG9kaXNjb3Zlcl9wb3J0czogbGlzdCBvZiBwb3J0cyB3aGlj aCBjYW4gYmUgYXV0by1kaXNjb3ZlcmVkDQo+ID4gKyAqDQo+ID4gKyAqIFNlZSB0aGlzIGZpbGUg Zm9yIGEgbGlzdCBvZiBDaGFtZWxpdW0gcG9ydHM6DQo+ID4gKyAqIGh0dHBzOi8vY2hyb21pdW0u Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bW9zL3BsYXRmb3JtL2NoYW1lbGVvbi8rL21hc3Rlci9j aGFtZWxlb25kL3V0aWxzL2lkcy5weQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGNvbnN0IGludCBh dXRvZGlzY292ZXJfcG9ydHNbXSA9IHsxLCAyLCAzLCA0fTsNCj4gPiArDQo+ID4gKyNkZWZpbmUg QVVUT0RJU0NPVkVSX1BPUlRTX0xFTiAoc2l6ZW9mKGF1dG9kaXNjb3Zlcl9wb3J0cykgLyBzaXpl b2YoYXV0b2Rpc2NvdmVyX3BvcnRzWzBdKSkNCj4gDQo+IFdlIGFsc28gaGF2ZSBDSEFNRUxJVU1f TUFYX1BPUlRTIHdoaWNoIGNvdW50cyB0aGUgbnVtYmVyIG9mIGRpc3BsYXkNCj4gcG9ydHMuIEFy ZSB3ZSBhbnRpY2lwYXRpbmcgYW55IG5vbi1hdXRvZGlzY292ZXJhYmxlIHBvcnRzPyBBbnkgb3Ro ZXINCj4gcmVhc29ucyB0byBrZWVwIHRoaXMgc2VwYXJhdGU/DQoNCldlIGNvdWxkIGhhdmUgYSB2 aWRlb19wb3J0cyBhcnJheS4gSG93ZXZlciBJJ2QgbGlrZSBub3QgdG8gZXhwb3NlIGl0IGluDQp0 aGUgaGVhZGVyLCBiZWNhdXNlIHBvcnQgSURzIGFyZW4ndCBzb21ldGhpbmcgbGlicmFyeSB1c2Vy cyBzaG91bGQgY2FyZQ0KYWJvdXQuIFRoZW4gd2UnZCBuZWVkIHRvIGRlZmluZSB0aGUgc2l6ZSBv ZiB0aGUgYXJyYXkgaW4gdGhlIGhlYWRlciBhbmQNCnRoZSBhcnJheSBpdHNlbGYgaW4gdGhlIEMg ZmlsZSwgd2hpY2ggaXMgYW5ub3lpbmcgYW5kIGVycm9yLXByb25lLg0KDQpGb3IgdGhpcyByZWFz b24sIEknZCBwcmVmZXIgdG8ga2VlcCBDSEFNRUxJVU1fTUFYX1BPUlRTLg0KDQpUaGF0IHNhaWQs IGFuIGVudW0gZm9yIGFsbCB2aWRlbyBwb3J0cyB3ZSBjYXJlIGFib3V0IGlzIHByb2JhYmx5IGEg Z29vZA0KaWRlYS4gT3IgbWF5YmUgd2UgY291bGQganVzdCBjYWxsIEdldFN1cHBvcnRlZElucHV0 cyBhbmQNCkhhc1ZpZGVvU3VwcG9ydCB0byBnZXQgYSBsaXN0IG9mIHBvcnRzIHRvIGF1dG8tZGlz Y292ZXI/DQoNClRoYXQgd291bGQgYmUgYSBsaXR0bGUgYml0IGJldHRlciBzaW5jZSB0aGUgcG9y dCBJRHMgY291bGQgY2hhbmdlIGZvciBhDQpkaWZmZXJlbnQgQ2hhbWVsaXVtIGJvYXJkLg0KDQo+ ID4gK3N0YXRpYyBpbnQgcG9ydF9pZF9mcm9tX2VkaWQoaW50IGRybV9mZCwgZHJtTW9kZUNvbm5l Y3RvciAqY29ubmVjdG9yKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcG9ydF9pZCA9IC0xOw0KPiA+ICsJ Ym9vbCBvazsNCj4gPiArCXVpbnQ2NF90IGVkaWRfYmxvYl9pZDsNCj4gPiArCWRybU1vZGVQcm9w ZXJ0eUJsb2JSZXMgKmVkaWRfYmxvYjsNCj4gPiArCWNvbnN0IHN0cnVjdCBlZGlkICplZGlkOw0K PiA+ICsJY2hhciBtZmdbM107DQo+ID4gKw0KPiA+ICsJaWYgKGNvbm5lY3Rvci0+Y29ubmVjdGlv biAhPSBEUk1fTU9ERV9DT05ORUNURUQpIHsNCj4gPiArCQlpZ3RfZGVidWcoIlNraXBwaW5nIGF1 dG8tZGlzY292ZXJ5IGZvciBjb25uZWN0b3IgJXMtJWQ6ICINCj4gPiArCQkJICAiY29ubmVjdG9y IHN0YXR1cyBpcyBub3QgY29ubmVjdGVkXG4iLA0KPiA+ICsJCQkgIGttc3Rlc3RfY29ubmVjdG9y X3R5cGVfc3RyKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpLA0KPiA+ICsJCQkgIGNvbm5lY3Rv ci0+Y29ubmVjdG9yX3R5cGVfaWQpOw0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlvayA9IGttc3Rlc3RfZ2V0X3Byb3BlcnR5KGRybV9mZCwgY29ubmVjdG9yLT5jb25u ZWN0b3JfaWQsDQo+ID4gKwkJCQkgIERSTV9NT0RFX09CSkVDVF9DT05ORUNUT1IsICJFRElEIiwN Cj4gPiArCQkJCSAgTlVMTCwgJmVkaWRfYmxvYl9pZCwgTlVMTCk7DQo+ID4gKwlpZiAoIW9rKSB7 DQo+ID4gKwkJaWd0X2RlYnVnKCJTa2lwcGluZyBhdXRvLWRpc2NvdmVyeSBmb3IgY29ubmVjdG9y ICVzLSVkOiAiDQo+ID4gKwkJCSAgIm1pc3NpbmcgdGhlIEVESUQgcHJvcGVydHlcbiIsDQo+ID4g KwkJCSAga21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlw ZSksDQo+ID4gKwkJCSAgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZV9pZCk7DQo+ID4gKwkJcmV0 dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWVkaWRfYmxvYiA9IGRybU1vZGVHZXRQcm9w ZXJ0eUJsb2IoZHJtX2ZkLCBlZGlkX2Jsb2JfaWQpOw0KPiA+ICsJaWd0X2Fzc2VydChlZGlkX2Js b2IpOw0KPiA+ICsNCj4gPiArCWVkaWQgPSAoY29uc3Qgc3RydWN0IGVkaWQgKikgZWRpZF9ibG9i LT5kYXRhOw0KPiA+ICsNCj4gPiArCWVkaWRfZ2V0X21mZyhlZGlkLCBtZmcpOw0KPiA+ICsJaWYg KG1lbWNtcChtZmcsICJJR1QiLCAzKSAhPSAwKSB7DQo+ID4gKwkJaWd0X2RlYnVnKCJTa2lwcGlu ZyBjb25uZWN0b3IgJXMtJWQgZm9yIGF1dG8tZGlzY292ZXJ5OiAiDQo+ID4gKwkJCSAgIm1hbnVm YWN0dXJlciBpcyAlLjNzLCBub3QgSUdUXG4iLA0KPiA+ICsJCQkgIGttc3Rlc3RfY29ubmVjdG9y X3R5cGVfc3RyKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpLA0KPiA+ICsJCQkgIGNvbm5lY3Rv ci0+Y29ubmVjdG9yX3R5cGVfaWQsIG1mZyk7DQo+ID4gKwkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJaWYgKGVkaWQtPnByb2RfY29kZVswXSAhPSAnQycgfHwgZWRpZC0+cHJvZF9j b2RlWzFdICE9ICdIJykgew0KPiA+ICsJCWlndF93YXJuKCJJbnZhbGlkIEVESUQgZm9yIElHVCBj b25uZWN0b3IgJXMtJWQ6ICINCj4gPiArCQkJICAiaW52YWxpZCBwcm9kdWN0IGNvZGVcbiIsDQo+ ID4gKwkJCSAga21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIoY29ubmVjdG9yLT5jb25uZWN0b3Jf dHlwZSksDQo+ID4gKwkJCSAgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZV9pZCk7DQo+ID4gKwkJ Z290byBvdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcG9ydF9pZCA9ICoodWludDMyX3QgKikg JmVkaWQtPnNlcmlhbDsNCj4gPiArCWlndF9kZWJ1ZygiQXV0by1kaXNjb3ZlcnkgbWFwcGVkIGNv bm5lY3RvciAlcy0lZCB0byBDaGFtZWxpdW0gIg0KPiA+ICsJCSAgInBvcnQgSUQgJWRcbiIsDQo+ ID4gKwkJICBrbXN0ZXN0X2Nvbm5lY3Rvcl90eXBlX3N0cihjb25uZWN0b3ItPmNvbm5lY3Rvcl90 eXBlKSwNCj4gPiArCQkgIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGVfaWQsIHBvcnRfaWQpOw0K PiA+ICsNCj4gPiArb3V0Og0KPiA+ICsJZHJtTW9kZUZyZWVQcm9wZXJ0eUJsb2IoZWRpZF9ibG9i KTsNCj4gPiArCXJldHVybiBwb3J0X2lkOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICogY2hhbWVsaXVtX2F1dG9kaXNjb3ZlcjogVE9ETw0KPiA+ICsgKi8NCj4gDQo+IEFyZSB5b3Ug cGxhbm5pbmcgdG8gZ2V0IHRoaXMgZGVzY3JpcHRpb24gZG9uZT8NCg0KRGVycA0KDQo+ID4gK3N0 YXRpYyBib29sIGNoYW1lbGl1bV9hdXRvZGlzY292ZXIoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVs aXVtLCBpbnQgZHJtX2ZkKQ0KPiA+ICt7DQo+ID4gKwlkcm1Nb2RlUmVzICpyZXM7DQo+ID4gKwlk cm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7DQo+ID4gKwlzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQg KnBvcnQ7DQo+ID4gKwlzaXplX3QgaSwgaiwgcG9ydF9pbmRleDsNCj4gPiArCWludCBwb3J0X2lk Ow0KPiA+ICsJdWludDMyX3QgY29ubl9pZDsNCj4gPiArCXN0cnVjdCBjaGFtZWxpdW1fZWRpZCAq ZWRpZDsNCj4gPiArCWJvb2wgZm91bmQ7DQo+ID4gKwl1aW50MzJfdCBhdXRvZGlzY292ZXJlZFtB VVRPRElTQ09WRVJfUE9SVFNfTEVOXSA9IHswfTsNCj4gPiArCWNoYXIgY29ubl9uYW1lWzY0XTsN Cj4gPiArDQo+ID4gKwlpZ3RfZGVidWcoIlN0YXJ0aW5nIENoYW1lbGl1bSBwb3J0IGF1dG8tZGlz Y292ZXJ5XG4iKTsNCj4gPiArDQo+ID4gKwllZGlkID0gY2hhbWVsaXVtX25ld19lZGlkKGNoYW1l bGl1bSwgaWd0X2ttc19nZXRfYmFzZV9lZGlkKCkpOw0KPiA+ICsNCj4gPiArCS8qIFNldCBFRElE IGFuZCBwbHVnIHBvcnRzIHdlIHdhbnQgdG8gYXV0by1kaXNjb3ZlciAqLw0KPiA+ICsJcG9ydF9p bmRleCA9IGNoYW1lbGl1bS0+cG9ydF9jb3VudDsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBBVVRP RElTQ09WRVJfUE9SVFNfTEVOOyBpKyspIHsNCj4gPiArCQlwb3J0X2lkID0gYXV0b2Rpc2NvdmVy X3BvcnRzW2ldOw0KPiA+ICsNCj4gPiArCQkvKiBObyBuZWVkIHRvIGF1dG8tZGlzY292ZXIgcG9y dHMgZXhwbGljaXRseSBjb25maWd1cmVkIGluIHRoZQ0KPiA+ICsJCSAqIC5pZ3RyYyBmaWxlLiAq Lw0KPiA+ICsJCWZvdW5kID0gZmFsc2U7DQo+ID4gKwkJZm9yIChqID0gMDsgaiA8IGNoYW1lbGl1 bS0+cG9ydF9jb3VudDsgaisrKSB7DQo+ID4gKwkJCWlmIChjaGFtZWxpdW0tPnBvcnRzW2pdLmlk ID09IHBvcnRfaWQpIHsNCj4gPiArCQkJCWZvdW5kID0gdHJ1ZTsNCj4gPiArCQkJCWJyZWFrOw0K PiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsJCWlmIChmb3VuZCkNCj4gPiArCQkJY29udGludWU7 DQo+IA0KPiB3ZSBhcmUgc2tpcHBpbmcgc2V0aW5nIGVkaWQgYW5kIHBsdWdpbmcgdGhlIHBvcnQg aWYgaXQgd2FzIGRlZmluZWQgaW4gLmlndHJjDQoNCkdvb2QgY2F0Y2guIEluIGZhY3QgeW91J3Zl IGJlZW4gcmV2aWV3aW5nIHYyLiBJJ3ZlIHBvc3RlZCB2MyB3aGljaA0KZml4ZXMgdGhpcyBpc3N1 ZS4NCg0KPiA+ICsNCj4gPiArCQlpZ3RfYXNzZXJ0KHBvcnRfaW5kZXggPCBDSEFNRUxJVU1fTUFY X1BPUlRTKTsNCj4gPiArCQlwb3J0ID0gJmNoYW1lbGl1bS0+cG9ydHNbcG9ydF9pbmRleF07DQo+ ID4gKwkJcG9ydF9pbmRleCsrOw0KPiA+ICsNCj4gPiArCQlwb3J0LT5pZCA9IHBvcnRfaWQ7DQo+ ID4gKw0KPiA+ICsJCWNoYW1lbGl1bV9wb3J0X3NldF9lZGlkKGNoYW1lbGl1bSwgcG9ydCwgZWRp ZCk7DQo+ID4gKwkJY2hhbWVsaXVtX3BsdWcoY2hhbWVsaXVtLCBwb3J0KTsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwkvKiBSZXByb2JlIGNvbm5lY3RvcnMgYW5kIGJ1aWxkIHRoZSBtYXBwaW5nICov DQo+ID4gKwlyZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRybV9mZCk7DQo+ID4gKwlpZiAoIXJl cykNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IHJl cy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7DQo+ID4gKwkJY29ubl9pZCA9IHJlcy0+Y29ubmVj dG9yc1tpXTsNCj4gPiArDQo+ID4gKwkJLyogUmVhZCB0aGUgRURJRCBhbmQgcGFyc2UgdGhlIENo YW1lbGl1bSBwb3J0IElEIHdlIHN0b3JlZA0KPiA+ICsJCSAqIHRoZXJlLiAqLw0KPiA+ICsJCWNv bm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3IoZHJtX2ZkLCByZXMtPmNvbm5lY3RvcnNbaV0p Ow0KPiA+ICsJCXBvcnRfaWQgPSBwb3J0X2lkX2Zyb21fZWRpZChkcm1fZmQsIGNvbm5lY3Rvcik7 DQo+ID4gKwkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsNCj4gPiArCQlpZiAocG9y dF9pZCA8IDApDQo+ID4gKwkJCWNvbnRpbnVlOw0KPiANCj4gaGVyZSB3ZSB3b24ndCBnZXQgYSBz ZW5zaWJsZSB2YWx1ZSBhbmQgY29udGludWU7DQo+IA0KPiA+ICsNCj4gPiArCQkvKiBJZiB3ZSBh bHJlYWR5IGhhdmUgYSBtYXBwaW5nIGZyb20gdGhlIGNvbmZpZyBmaWxlLCBjaGVjaw0KPiA+ICsJ CSAqIHRoYXQgaXQncyBjb25zaXN0ZW50LiAqLw0KPiA+ICsJCWZvdW5kID0gZmFsc2U7DQo+ID4g KwkJZm9yIChqID0gMDsgaiA8IGNoYW1lbGl1bS0+cG9ydF9jb3VudDsgaisrKSB7DQo+ID4gKwkJ CXBvcnQgPSAmY2hhbWVsaXVtLT5wb3J0c1tqXTsNCj4gPiArCQkJaWYgKHBvcnQtPmNvbm5lY3Rv cl9pZCA9PSBjb25uX2lkKSB7DQo+ID4gKwkJCQlmb3VuZCA9IHRydWU7DQo+ID4gKwkJCQlpZ3Rf YXNzZXJ0X2YocG9ydC0+aWQgPT0gcG9ydF9pZCwNCj4gPiArCQkJCQkgICAgICJJbmNvbnNpc3Rl bmN5IGRldGVjdGVkIGluIC5pZ3RyYzogIg0KPiA+ICsJCQkJCSAgICAgImNvbm5lY3RvciAlcyBp cyBjb25maWd1cmVkIHdpdGggIg0KPiA+ICsJCQkJCSAgICAgIkNoYW1lbGl1bSBwb3J0ICVkLCBi dXQgaXMgIg0KPiA+ICsJCQkJCSAgICAgImNvbm5lY3RlZCB0byBwb3J0ICVkXG4iLA0KPiA+ICsJ CQkJCSAgICAgcG9ydC0+bmFtZSwgcG9ydC0+aWQsIHBvcnRfaWQpOw0KPiA+ICsJCQkJYnJlYWs7 DQo+IA0KPiBzbyB0aGlzIHdob2xlIHNlY3Rpb24gY2hlY2tpbmcgY29uc2lzdGVuY3kgc2VlbXMg dG8gbWFrZSBubyBzZW5zZQ0KPiANCj4gT3IgYW0gSSByZWFkaW5nIHRoaXMgd3Jvbmc/DQo+IA0K PiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsJCWlmIChmb3VuZCkNCj4gPiArCQkJY29udGludWU7 DQo+ID4gKw0KPiA+ICsJCS8qIEdldCBnb3QgYSBuZXcgbWFwcGluZyAqLw0KPiANCj4gR2V0IGdv dD8NCj4gDQo+ID4gKwkJZm91bmQgPSBmYWxzZTsNCj4gPiArCQlmb3IgKGogPSAwOyBqIDwgQVVU T0RJU0NPVkVSX1BPUlRTX0xFTjsgaisrKSB7DQo+ID4gKwkJCWlmIChwb3J0X2lkID09IGF1dG9k aXNjb3Zlcl9wb3J0c1tqXSkgew0KPiA+ICsJCQkJZm91bmQgPSB0cnVlOw0KPiA+ICsJCQkJYXV0 b2Rpc2NvdmVyZWRbal0gPSBjb25uX2lkOw0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJCX0NCj4g PiArCQl9DQo+ID4gKwkJaWd0X2Fzc2VydF9mKGZvdW5kLCAiQXV0by1kaXNjb3ZlcmVkIGEgcG9y dCAoJWQpIHdlIGhhdmVuJ3QgIg0KPiA+ICsJCQkgICAgICJzZXR1cFxuIiwgcG9ydF9pZCk7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVzKTsNCj4gPiArDQo+ ID4gKwkvKiBXZSBub3cgaGF2ZSBhIENoYW1lbGl1bSBwb3J0IElEIOKGlCBEUk0gY29ubmVjdG9y IElEIG1hcHBpbmc6DQo+ID4gKwkgKiBhdXRvZGlzY292ZXJfcG9ydHMgY29udGFpbnMgdGhlIENo YW1lbGl1bSBwb3J0IElEcyBhbmQNCj4gPiArCSAqIGF1dG9kaXNjb3ZlcmVkIGNvbnRhaW5zIHRo ZSBEUk0gY29ubmVjdG9yIElEcy4gKi8NCj4gPiArCWZvciAoaSA9IDA7IGkgPCBBVVRPRElTQ09W RVJfUE9SVFNfTEVOOyBpKyspIHsNCj4gPiArCQlwb3J0X2lkID0gYXV0b2Rpc2NvdmVyX3BvcnRz W2ldOw0KPiA+ICsJCWNvbm5faWQgPSBhdXRvZGlzY292ZXJlZFtpXTsNCj4gPiArCQlpZiAoIWNv bm5faWQpIHsNCj4gPiArCQkJY29udGludWU7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlwb3J0 ID0gJmNoYW1lbGl1bS0+cG9ydHNbY2hhbWVsaXVtLT5wb3J0X2NvdW50XTsNCj4gPiArCQljaGFt ZWxpdW0tPnBvcnRfY291bnQrKzsNCj4gPiArDQo+ID4gKwkJcG9ydC0+aWQgPSBwb3J0X2lkOw0K PiA+ICsJCXBvcnQtPnR5cGUgPSBjaGFtZWxpdW1fZ2V0X3BvcnRfdHlwZShjaGFtZWxpdW0sIHBv cnQpOw0KPiA+ICsJCXBvcnQtPmNvbm5lY3Rvcl9pZCA9IGNvbm5faWQ7DQo+ID4gKw0KPiA+ICsJ CWNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3JDdXJyZW50KGRybV9mZCwgY29ubl9pZCk7 DQo+ID4gKwkJc25wcmludGYoY29ubl9uYW1lLCBzaXplb2YoY29ubl9uYW1lKSwgIiVzLSV1IiwN Cj4gPiArCQkJIGttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKGNvbm5lY3Rvci0+Y29ubmVjdG9y X3R5cGUpLA0KPiA+ICsJCQkgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZV9pZCk7DQo+ID4gKwkJ ZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsNCj4gPiArCQlwb3J0LT5uYW1lID0gc3Ry ZHVwKGNvbm5fbmFtZSk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJY2hhbWVsaXVtX3Jlc2V0KGNo YW1lbGl1bSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4g IHN0YXRpYyBib29sIGNoYW1lbGl1bV9yZWFkX2NvbmZpZyhzdHJ1Y3QgY2hhbWVsaXVtICpjaGFt ZWxpdW0sIGludCBkcm1fZmQpDQo+ID4gIHsNCj4gPiAgCUdFcnJvciAqZXJyb3IgPSBOVUxMOw0K PiA+IEBAIC0xODQ1LDcgKzIwNDMsMTAgQEAgc3RhdGljIGJvb2wgY2hhbWVsaXVtX3JlYWRfY29u ZmlnKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwgaW50IGRybV9mZCkNCj4gPiAgCQlyZXR1 cm4gZmFsc2U7DQo+ID4gIAl9DQo+ID4gIA0KPiA+IC0JcmV0dXJuIGNoYW1lbGl1bV9yZWFkX3Bv cnRfbWFwcGluZ3MoY2hhbWVsaXVtLCBkcm1fZmQpOw0KPiA+ICsJaWYgKCFjaGFtZWxpdW1fcmVh ZF9wb3J0X21hcHBpbmdzKGNoYW1lbGl1bSwgZHJtX2ZkKSkgew0KPiA+ICsJCXJldHVybiBmYWxz ZTsNCj4gPiArCX0NCj4gPiArCXJldHVybiBjaGFtZWxpdW1fYXV0b2Rpc2NvdmVyKGNoYW1lbGl1 bSwgZHJtX2ZkKTsNCj4gPiAgfQ0KPiA+ICANCj4gPiAgLyoqDQo+ID4gLS0gDQo+ID4gMi4yMi4w DQo+ID4gDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpp Z3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=