From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Rogozhkin, Dmitry V" Subject: Re: [PATCH i-g-t 5/5] tests/perf_pmu: Tests for i915 PMU API Date: Mon, 18 Sep 2017 21:18:40 +0000 Message-ID: <1505740588.6405.10.camel@intel.com> References: <20170918113840.2684-1-tvrtko.ursulin@linux.intel.com> <20170918113840.2684-6-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8F1D56E436 for ; Mon, 18 Sep 2017 21:18:42 +0000 (UTC) In-Reply-To: <20170918113840.2684-6-tvrtko.ursulin@linux.intel.com> Content-Language: en-US Content-ID: <0F8B9266DCD6FE45A5B0178268D49EA4@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "tursulin@ursulin.net" Cc: "Intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org RGlkIHlvdSB0cnkgdGVzdHMgb24gdGhlIHN5c3RlbSB3aXRoIDIgVkRCT1ggZW5naW5lcz8gT24g bXkgc2lkZSAyIHRlc3RzDQphcmUgZmFpbGluZyBvbiBTS0wgR1Q0ZSBOVUM6DQoNCihwZXJmX3Bt dTo1NDE0KSBDUklUSUNBTDogVGVzdCBhc3NlcnRpb24gZmFpbHVyZSBmdW5jdGlvbg0KYnVzeV9j aGVja19hbGwsIGZpbGUgcGVyZl9wbXUuYzoxNjQ6DQoocGVyZl9wbXU6NTQxNCkgQ1JJVElDQUw6 IEZhaWxlZCBhc3NlcnRpb246IChkb3VibGUpKHZhbFtpXSkgPD0gKDEuMCArDQp0b2xlcmFuY2Up ICogKGRvdWJsZSkwLjBmICYmIChkb3VibGUpKHZhbFtpXSkgPj0gKDEuMCAtIHRvbGVyYW5jZSkg Kg0KKGRvdWJsZSkwLjBmDQoocGVyZl9wbXU6NTQxNCkgQ1JJVElDQUw6ICd2YWxbaV0nICE9ICcw LjBmJyAoNDk5OTg0OTYwLjAwMDAwMCBub3QNCndpdGhpbiAyLjAwMDAwMCUgdG9sZXJhbmNlIG9m IDAuMDAwMDAwKQ0KU3VidGVzdCB0d28tYnVzeS1jaGVjay1hbGwtYnNkOiBGQUlMICgwLjUwMXMp DQoNCihwZXJmX3BtdTo1NDE0KSBDUklUSUNBTDogVGVzdCBhc3NlcnRpb24gZmFpbHVyZSBmdW5j dGlvbg0KdHdvX2J1c3lfY2hlY2tfYWxsLCBmaWxlIHBlcmZfcG11LmM6MjIxOg0KKHBlcmZfcG11 OjU0MTQpIENSSVRJQ0FMOiBGYWlsZWQgYXNzZXJ0aW9uOiAoZG91YmxlKSh2YWxbaV0pIDw9ICgx LjAgKw0KdG9sZXJhbmNlKSAqIChkb3VibGUpMC4wZiAmJiAoZG91YmxlKSh2YWxbaV0pID49ICgx LjAgLSB0b2xlcmFuY2UpICoNCihkb3VibGUpMC4wZg0KKHBlcmZfcG11OjU0MTQpIENSSVRJQ0FM OiAndmFsW2ldJyAhPSAnMC4wZicgKDQ5OTk0MDE0Ni4wMDAwMDAgbm90DQp3aXRoaW4gMi4wMDAw MDAlIHRvbGVyYW5jZSBvZiAwLjAwMDAwMCkNClN1YnRlc3QgdHdvLWJ1c3ktY2hlY2stYWxsLWJz ZDE6IEZBSUwgKDAuNTAxcykNCg0KSSBhbSB0cnlpbmcgdG8gc3BlY3VsYXRlIG9uIHRoZSByZWFz b25zIGJlbG93Lg0KDQoNCk9uIE1vbiwgMjAxNy0wOS0xOCBhdCAxMjozOCArMDEwMCwgVHZydGtv IFVyc3VsaW4gd3JvdGU6DQo+IEZyb206IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBp bnRlbC5jb20+DQo+IA0KPiBBIGJ1bmNoIG9mIHRlc3RzIGZvciB0aGUgbmV3IGk5MTUgUE1VIGZl YXR1cmUuDQo+IA0KPiBQYXJ0cyBvZiB0aGUgY29kZSB3ZXJlIGluaXRpYWx5IHNrZXRjaGVkIGJ5 IERtaXRyeSBSb2dvemhraW4uDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8 dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPg0KPiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJp cy13aWxzb24uY28udWs+DQo+IENjOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0cnkudi5yb2dvemhr aW5AaW50ZWwuY29tPg0KPiAtLS0NCj4gIGxpYi9pZ3RfZ3QuYyAgICAgICAgICAgfCAgMjMgKy0N Cj4gIGxpYi9pZ3RfZ3QuaCAgICAgICAgICAgfCAgIDggKw0KPiAgdGVzdHMvTWFrZWZpbGUuc291 cmNlcyB8ICAgMSArDQo+ICB0ZXN0cy9wZXJmX3BtdS5jICAgICAgIHwgNzEzICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIDQgZmlsZXMgY2hhbmdl ZCwgNzM4IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pDQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgdGVzdHMvcGVyZl9wbXUuYw0KPiANCj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZ3QuYyBiL2xp Yi9pZ3RfZ3QuYw0KPiBpbmRleCBiM2YzYjM4MDllZWUuLjEwMmNjMjg0MWZlYiAxMDA2NDQNCj4g LS0tIGEvbGliL2lndF9ndC5jDQo+ICsrKyBiL2xpYi9pZ3RfZ3QuYw0KPiBAQCAtNTM3LDE0ICs1 MzcsMjMgQEAgdW5zaWduZWQgaW50ZWxfZGV0ZWN0X2FuZF9jbGVhcl9taXNzZWRfaW50ZXJydXB0 cyhpbnQgZmQpDQo+ICAJcmV0dXJuIG1pc3NlZDsNCj4gIH0NCj4gIA0KPiArZW51bSBkcm1faTkx NV9nZW1fZW5naW5lX2NsYXNzIHsNCj4gKwlJOTE1X0VOR0lORV9DTEFTU19PVEhFUiA9IDAsDQo+ ICsJSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSID0gMSwNCj4gKwlJOTE1X0VOR0lORV9DTEFTU19D T1BZID0gMiwNCj4gKwlJOTE1X0VOR0lORV9DTEFTU19WSURFTyA9IDMsDQo+ICsJSTkxNV9FTkdJ TkVfQ0xBU1NfVklERU9fRU5IQU5DRSA9IDQsDQo+ICsJSTkxNV9FTkdJTkVfQ0xBU1NfTUFYIC8q IG5vbi1BQkkgKi8NCj4gK307DQo+ICsNCj4gIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25f ZW5naW5lIGludGVsX2V4ZWN1dGlvbl9lbmdpbmVzW10gPSB7DQo+IC0JeyAiZGVmYXVsdCIsIE5V TEwsIDAsIDAgfSwNCj4gLQl7ICJyZW5kZXIiLCAicmNzMCIsIEk5MTVfRVhFQ19SRU5ERVIsIDAg fSwNCj4gLQl7ICJic2QiLCAidmNzMCIsIEk5MTVfRVhFQ19CU0QsIDAgfSwNCj4gLQl7ICJic2Qx IiwgInZjczAiLCBJOTE1X0VYRUNfQlNELCAxPDwxMyAvKkk5MTVfRVhFQ19CU0RfUklORzEqLyB9 LA0KPiAtCXsgImJzZDIiLCAidmNzMSIsIEk5MTVfRVhFQ19CU0QsIDI8PDEzIC8qSTkxNV9FWEVD X0JTRF9SSU5HMiovIH0sDQo+IC0JeyAiYmx0IiwgImJjczAiLCBJOTE1X0VYRUNfQkxULCAwIH0s DQo+IC0JeyAidmVib3giLCAidmVjczAiLCBJOTE1X0VYRUNfVkVCT1gsIDAgfSwNCj4gKwl7ICJk ZWZhdWx0IiwgTlVMTCwgLTEsIC0xLCAwLCAwIH0sDQo+ICsJeyAicmVuZGVyIiwgInJjczAiLCBJ OTE1X0VOR0lORV9DTEFTU19SRU5ERVIsIDAsIEk5MTVfRVhFQ19SRU5ERVIsIDAgfSwNCj4gKwl7 ICJic2QiLCAidmNzMCIsIEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAwLCBJOTE1X0VYRUNfQlNE LCAwIH0sDQpXaXRoIHN1Y2ggZGVmaW5pdGlvbiwgd2Ugd2lsbCBwcm9iYWJseSBkZXRlY3QgImJz ZCIgYXMgYW4gZW5naW5lIChhcw0Kd2VsbCBhcyAiYnNkMSIgYW5kICJic2QyIiksIHJpZ2h0PyBB cyBhIHJlc3VsdCwgd2Ugd2lsbCBydW4NCnR3by1idXN5LWNoZWNrLWFsbC1ic2QgZm9yIGl0IGFu ZCBhY2NvcmRpbmcgdG8gZGVmaW5lZCBmbGFncyB3ZSB3aWxsDQpzdWJtaXQgd29ya2xvYWRzIHRv IF9ib3RoXyB2Y3MwIGFuZCB2Y3MxIGV2ZW5seSBmb2xsb3dpbmcgaTkxNSBLTUQNCmRpc3BhdGNo aW5nLiBUaHVzLCB0aGUgdHdvLWJ1c3ktY2hlY2stYWxsLWJzZCB3aWxsIGZhaWwgc2luY2UgaXQg d2lsbA0KZGV0ZWN0IGEgbG9hZCBvbiAzIGVuZ2luZXMgKHJjczAsIHZjczAsIHZjczEpIGluc3Rl YWQgb2YgMi4NCg0KSSBhbSBub3QgcXVpdGUgc3VyZSB3aHkgdHdvLWJ1c3ktY2hlY2stYWxsLWJz ZDEgZmFpbHMgYXMgd2VsbCBvbiBteQ0Kc2lkZT8gb3IgcmF0aGVyLCB3aHkgaXQgZGlkIG5vdCBm YWlsIG9uIHlvdXIgc2lkZSBhcyB3ZWxsPyBUaGUgb25seQ0KZXhwbGFuYXRpb24gSSBzZWUgaXMg dGhhdCB0aGUgdGVzdCB0aGlua3MgImJzZCIgYW5kICJic2QxIiBhcmUgc2VwYXJhdGUNCmVuZ2lu ZXMsIGFuZCwgdGh1cywgY291bnQgdGhlbSBhcyAyLiBCdXQgdGhhdCBzaG91bGQgZmFpbCBvbiBz aW5nbGUNClZEQk9YIHN5c3RlbSBhcyB3ZWxsLi4uIGhtLi4uDQoNCj4gKwl7ICJic2QxIiwgInZj czAiLCBJOTE1X0VOR0lORV9DTEFTU19WSURFTywgMCwgSTkxNV9FWEVDX0JTRCwgMTw8MTMgLypJ OTE1X0VYRUNfQlNEX1JJTkcxKi8gfSwNCj4gKwl7ICJic2QyIiwgInZjczEiLCBJOTE1X0VOR0lO RV9DTEFTU19WSURFTywgMSwgSTkxNV9FWEVDX0JTRCwgMjw8MTMgLypJOTE1X0VYRUNfQlNEX1JJ TkcyKi8gfSwNCj4gKwl7ICJibHQiLCAiYmNzMCIsIEk5MTVfRU5HSU5FX0NMQVNTX0NPUFksIDAs IEk5MTVfRVhFQ19CTFQsIDAgfSwNCj4gKwl7ICJ2ZWJveCIsICJ2ZWNzMCIsIEk5MTVfRU5HSU5F X0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDAsIEk5MTVfRVhFQ19WRUJPWCwgMCB9LA0KPiAgCXsgTlVM TCwgMCwgMCB9DQo+ICB9Ow0KPiAgDQo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2d0LmggYi9saWIv aWd0X2d0LmgNCj4gaW5kZXggMjU3OWNiZDM3YmU3Li40MzYwNDFjZTljYzAgMTAwNjQ0DQo+IC0t LSBhL2xpYi9pZ3RfZ3QuaA0KPiArKysgYi9saWIvaWd0X2d0LmgNCj4gQEAgLTY2LDYgKzY2LDgg QEAgdW5zaWduZWQgaW50ZWxfZGV0ZWN0X2FuZF9jbGVhcl9taXNzZWRfaW50ZXJydXB0cyhpbnQg ZmQpOw0KPiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lIHsNCj4g IAljb25zdCBjaGFyICpuYW1lOw0KPiAgCWNvbnN0IGNoYXIgKmZ1bGxfbmFtZTsNCj4gKwlpbnQg Y2xhc3M7DQo+ICsJaW50IGluc3RhbmNlOw0KPiAgCXVuc2lnbmVkIGV4ZWNfaWQ7DQo+ICAJdW5z aWduZWQgZmxhZ3M7DQo+ICB9IGludGVsX2V4ZWN1dGlvbl9lbmdpbmVzW107DQo+IEBAIC03OCw2 ICs4MCwxMiBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUgew0K PiAgCSAgICAgZV9fKyspIFwNCj4gIAkJZm9yX2lmIChnZW1faGFzX3JpbmcoZmRfXywgZmxhZ3Nf XyA9IGVfXy0+ZXhlY19pZCB8IGVfXy0+ZmxhZ3MpKQ0KPiAgDQo+ICsjZGVmaW5lIGZvcl9lYWNo X2VuZ2luZV9jbGFzc19pbnN0YW5jZShmZF9fLCBlX18pIFwNCj4gKwlmb3IgKChlX18pID0gaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZXM7XA0KPiArCSAgICAgKGVfXyktPm5hbWU7IFwNCj4gKwkgICAg IChlX18pKyspIFwNCj4gKwkJZm9yX2lmICgoZV9fKS0+Y2xhc3MgPiAwKQ0KPiArDQo+ICBib29s IGdlbV9jYW5fc3RvcmVfZHdvcmQoaW50IGZkLCB1bnNpZ25lZCBpbnQgZW5naW5lKTsNCj4gIA0K PiAgI2VuZGlmIC8qIElHVF9HVF9IICovDQo+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcw0KPiBpbmRleCBjZjU0MmRmMTgxYTguLjRi YWI2MjQ3MTUxYyAxMDA2NDQNCj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcw0KPiArKysg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzDQo+IEBAIC0yMTcsNiArMjE3LDcgQEAgVEVTVFNfcHJv Z3MgPSBcDQo+ICAJa21zX3ZibGFuayBcDQo+ICAJbWV0YV90ZXN0IFwNCj4gIAlwZXJmIFwNCj4g KwlwZXJmX3BtdSBcDQo+ICAJcG1fYmFja2xpZ2h0IFwNCj4gIAlwbV9scHNwIFwNCj4gIAlwbV9y YzZfcmVzaWRlbmN5IFwNCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL3BlcmZfcG11LmMgYi90ZXN0cy9w ZXJmX3BtdS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4u MmRiZWU1ODZkYWNjDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvdGVzdHMvcGVyZl9wbXUuYw0K PiBAQCAtMCwwICsxLDcxMyBAQA0KPiArLyoNCj4gKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVs IENvcnBvcmF0aW9uDQo+ICsgKg0KPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGENCj4gKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksDQo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uDQo+ICsgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwN Cj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQ0KPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gKyAqDQo+ICsgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0DQo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlDQo+ICsgKiBTb2Z0d2FyZS4NCj4g KyAqDQo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQo+ICsg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwNCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQo+ICsgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORw0KPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUw0KPiArICogSU4gVEhFIFNPRlRXQVJF Lg0KPiArICoNCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8c3RkbGliLmg+DQo+ICsjaW5jbHVk ZSA8c3RkaW8uaD4NCj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gKyNpbmNsdWRlIDxmY250bC5o Pg0KPiArI2luY2x1ZGUgPGludHR5cGVzLmg+DQo+ICsjaW5jbHVkZSA8ZXJybm8uaD4NCj4gKyNp bmNsdWRlIDxzeXMvc3RhdC5oPg0KPiArI2luY2x1ZGUgPHN5cy90aW1lLmg+DQo+ICsjaW5jbHVk ZSA8c3lzL3RpbWVzLmg+DQo+ICsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQo+ICsjaW5jbHVkZSA8 ZGlyZW50Lmg+DQo+ICsjaW5jbHVkZSA8dGltZS5oPg0KPiArI2luY2x1ZGUgPHBvbGwuaD4NCj4g Kw0KPiArI2luY2x1ZGUgImlndC5oIg0KPiArI2luY2x1ZGUgImlndF9wZXJmLmgiDQo+ICsNCj4g K0lHVF9URVNUX0RFU0NSSVBUSU9OKCJUZXN0IHRoZSBpOTE1IHBtdSBwZXJmIGludGVyZmFjZSIp Ow0KPiArDQo+ICtjb25zdCBkb3VibGUgdG9sZXJhbmNlID0gMC4wMmY7DQo+ICtjb25zdCB1bnNp Z25lZCBsb25nIGJhdGNoX2R1cmF0aW9uX25zID0gMTAwMCAqIDEwMDAgKiAxMDAwIC8gMjsNCj4g Kw0KPiArc3RhdGljIHZvaWQNCj4gK2luaXQoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVs X2V4ZWN1dGlvbl9lbmdpbmUgKmUsIHVpbnQ4X3Qgc2FtcGxlKQ0KPiArew0KPiArCXVpbnQ2NF90 IGNvbmZpZyA9IF9fSTkxNV9QTVVfRU5HSU5FKGUtPmNsYXNzLCBlLT5pbnN0YW5jZSwgc2FtcGxl KTsNCj4gKwlpbnQgZmQ7DQo+ICsNCj4gKwlpZ3RfcmVxdWlyZShnZW1faGFzX3JpbmcoZ2VtX2Zk LCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpKTsNCj4gKw0KPiArCWZkID0gcGVyZl9pOTE1X29wZW4o Y29uZmlnKTsNCj4gKwlpZ3RfYXNzZXJ0KGZkID49IDApOw0KPiArDQo+ICsJY2xvc2UoZmQpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdWludDY0X3QgcG11X3JlYWRfc2luZ2xlKGludCBmZCkNCj4g K3sNCj4gKwl1aW50NjRfdCBkYXRhWzJdOw0KPiArCXNzaXplX3QgbGVuOw0KPiArDQo+ICsJbGVu ID0gcmVhZChmZCwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsNCj4gKwlpZ3RfYXNzZXJ0X2VxKGxlbiwg c2l6ZW9mKGRhdGEpKTsNCj4gKw0KPiArCXJldHVybiBkYXRhWzBdOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZCBwbXVfcmVhZF9tdWx0aShpbnQgZmQsIHVuc2lnbmVkIGludCBudW0sIHVpbnQ2 NF90ICp2YWwpDQo+ICt7DQo+ICsJdWludDY0X3QgYnVmWzIgKyBudW1dOw0KPiArCXVuc2lnbmVk IGludCBpOw0KPiArCXNzaXplX3QgbGVuOw0KPiArDQo+ICsJbGVuID0gcmVhZChmZCwgYnVmLCBz aXplb2YoYnVmKSk7DQo+ICsJaWd0X2Fzc2VydF9lcShsZW4sIHNpemVvZihidWYpKTsNCj4gKwlm b3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspDQo+ICsJCXZhbFtpXSA9IGJ1ZlsyICsgaV07DQo+ICt9 DQo+ICsNCj4gKyNkZWZpbmUgYXNzZXJ0X3dpdGhpbl9lcHNpbG9uKHgsIHJlZiwgdG9sZXJhbmNl KSBcDQo+ICsJaWd0X2Fzc2VydF9mKChkb3VibGUpKHgpIDw9ICgxLjAgKyB0b2xlcmFuY2UpICog KGRvdWJsZSlyZWYgJiYgXA0KPiArCQkgICAgIChkb3VibGUpKHgpID49ICgxLjAgLSB0b2xlcmFu Y2UpICogKGRvdWJsZSlyZWYsIFwNCj4gKwkJICAgICAiJyVzJyAhPSAnJXMnICglZiBub3Qgd2l0 aGluICVmJSUgdG9sZXJhbmNlIG9mICVmKVxuIixcDQo+ICsJCSAgICAgI3gsICNyZWYsIChkb3Vi bGUpeCwgdG9sZXJhbmNlICogMTAwLjAsIChkb3VibGUpcmVmKQ0KPiArDQo+ICtzdGF0aWMgdm9p ZA0KPiArc2luZ2xlKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5n aW5lICplLCBib29sIGJ1c3kpDQo+ICt7DQo+ICsJdWludDY0X3QgY29uZmlnID0gSTkxNV9QTVVf RU5HSU5FX0JVU1koZS0+Y2xhc3MsIGUtPmluc3RhbmNlKTsNCj4gKwlkb3VibGUgcmVmID0gYnVz eSA/IGJhdGNoX2R1cmF0aW9uX25zIDogMC4wZjsNCj4gKwlpZ3Rfc3Bpbl90ICpzcGluOw0KPiAr CXVpbnQ2NF90IHZhbDsNCj4gKwlpbnQgZmQ7DQo+ICsNCj4gKwlpZ3RfcmVxdWlyZShnZW1faGFz X3JpbmcoZ2VtX2ZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpKTsNCj4gKw0KPiArCWlmIChidXN5 KSB7DQo+ICsJCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBlLT5leGVjX2lk IHwgZS0+ZmxhZ3MsIDApOw0KPiArCQlpZ3Rfc3Bpbl9iYXRjaF9zZXRfdGltZW91dChzcGluLCBi YXRjaF9kdXJhdGlvbl9ucyk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJdXNsZWVwKGJhdGNoX2R1cmF0 aW9uX25zIC8gMTAwMCk7DQo+ICsJfQ0KPiArDQo+ICsJZmQgPSBwZXJmX2k5MTVfb3Blbihjb25m aWcpOw0KPiArCWlndF9hc3NlcnQoZmQgPj0gMCk7DQo+ICsNCj4gKwlpZiAoYnVzeSkNCj4gKwkJ Z2VtX3N5bmMoZ2VtX2ZkLCBzcGluLT5oYW5kbGUpOw0KPiArDQo+ICsJdmFsID0gcG11X3JlYWRf c2luZ2xlKGZkKTsNCj4gKw0KPiArCWFzc2VydF93aXRoaW5fZXBzaWxvbih2YWwsIHJlZiwgdG9s ZXJhbmNlKTsNCj4gKw0KPiArCWlmIChidXN5KQ0KPiArCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGdl bV9mZCwgc3Bpbik7DQo+ICsJY2xvc2UoZmQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0K PiArYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUgKmUsDQo+ICsJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1fZW5naW5lcykN Cj4gK3sNCj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZSAqZV87DQo+ICsJ dWludDY0X3QgdmFsW251bV9lbmdpbmVzXTsNCj4gKwlpbnQgZmRbMl07DQo+ICsJaWd0X3NwaW5f dCAqc3BpbjsNCj4gKwl1bnNpZ25lZCBpbnQgYnVzeV9pZHgsIGk7DQo+ICsNCj4gKwlpZ3RfcmVx dWlyZShnZW1faGFzX3JpbmcoZ2VtX2ZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpKTsNCj4gKw0K PiArCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBlLT5leGVjX2lkIHwgZS0+ ZmxhZ3MsIDApOw0KPiArCWlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KHNwaW4sIGJhdGNoX2R1 cmF0aW9uX25zKTsNCj4gKw0KPiArCWkgPSAwOw0KPiArCWZkWzBdID0gLTE7DQo+ICsJZm9yX2Vh Y2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKGZkLCBlXykgew0KPiArCQlpZiAoIWdlbV9oYXNfcmlu ZyhnZW1fZmQsIGVfLT5leGVjX2lkIHwgZV8tPmZsYWdzKSkNCj4gKwkJCWNvbnRpbnVlOw0KPiAr DQo+ICsJCWlmIChlID09IGVfKQ0KPiArCQkJYnVzeV9pZHggPSBpOw0KPiArDQo+ICsJCWZkW2kg PT0gMCA/IDAgOiAxXSA9DQo+ICsJCQlwZXJmX2k5MTVfb3Blbl9ncm91cChJOTE1X1BNVV9FTkdJ TkVfQlVTWShlXy0+Y2xhc3MsDQo+ICsJCQkJCQkJCSAgZV8tPmluc3RhbmNlKSwNCj4gKwkJCQkJ ICAgICBmZFswXSk7DQo+ICsJCWlndF9hc3NlcnQoZmRbMF0gPiAwKTsNCj4gKwkJaWd0X2Fzc2Vy dChpID09IDAgfHwgZmRbMV0gPiAwKTsNCj4gKwkJaSsrOw0KPiArCX0NCj4gKw0KPiArCWdlbV9z eW5jKGdlbV9mZCwgc3Bpbi0+aGFuZGxlKTsNCj4gKw0KPiArCXBtdV9yZWFkX211bHRpKGZkWzBd LCBudW1fZW5naW5lcywgdmFsKTsNCj4gKw0KPiArCWFzc2VydF93aXRoaW5fZXBzaWxvbih2YWxb YnVzeV9pZHhdLCBiYXRjaF9kdXJhdGlvbl9ucywgdG9sZXJhbmNlKTsNCj4gKwlmb3IgKGkgPSAw OyBpIDwgbnVtX2VuZ2luZXM7IGkrKykgew0KPiArCQlpZiAoaSA9PSBidXN5X2lkeCkNCj4gKwkJ CWNvbnRpbnVlOw0KPiArCQlhc3NlcnRfd2l0aGluX2Vwc2lsb24odmFsW2ldLCAwLjBmLCB0b2xl cmFuY2UpOw0KPiArCX0NCj4gKw0KPiArCWlndF9zcGluX2JhdGNoX2ZyZWUoZ2VtX2ZkLCBzcGlu KTsNCj4gKwljbG9zZShmZFswXSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0d29f YnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9l bmdpbmUgKmUsDQo+ICsJCSAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1fZW5naW5lcykNCj4gK3sN Cj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZSAqZV87DQo+ICsJdWludDY0 X3QgdmFsW251bV9lbmdpbmVzXTsNCj4gKwlpbnQgZmRbMl07DQo+ICsJaWd0X3NwaW5fdCAqc3Bp blsyXTsNCj4gKwl1bnNpZ25lZCBpbnQgYnVzeV9pZHhbMl0sIGk7DQo+ICsNCj4gKwlpZ3RfcmVx dWlyZShnZW1faGFzX3JpbmcoZ2VtX2ZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpKTsNCj4gKwlp Z3RfYXNzZXJ0KGUtPmV4ZWNfaWQgIT0gMCAmJiBlLT5leGVjX2lkICE9IEk5MTVfRVhFQ19SRU5E RVIpOw0KPiArDQo+ICsJc3BpblswXSA9IGlndF9zcGluX2JhdGNoX25ldyhnZW1fZmQsIDAsIGUt PmV4ZWNfaWQgfCBlLT5mbGFncywgMCk7DQo+ICsJaWd0X3NwaW5fYmF0Y2hfc2V0X3RpbWVvdXQo c3BpblswXSwgYmF0Y2hfZHVyYXRpb25fbnMpOw0KPiArDQo+ICsJc3BpblsxXSA9IGlndF9zcGlu X2JhdGNoX25ldyhnZW1fZmQsIDAsIEk5MTVfRVhFQ19SRU5ERVIsIDApOw0KPiArCWlndF9zcGlu X2JhdGNoX3NldF90aW1lb3V0KHNwaW5bMV0sIGJhdGNoX2R1cmF0aW9uX25zKTsNCj4gKw0KPiAr CWkgPSAwOw0KPiArCWZkWzBdID0gLTE7DQo+ICsJZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3Rh bmNlKGZkLCBlXykgew0KPiArCQl1bnNpZ25lZCBpbnQgaWR4ID0gaSA9PSAwID8gMCA6IDE7DQo+ ICsNCj4gKwkJaWYgKCFnZW1faGFzX3JpbmcoZ2VtX2ZkLCBlXy0+ZXhlY19pZCB8IGVfLT5mbGFn cykpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQlpZiAoZV8tPmNsYXNzID09IEk5MTVfRU5H SU5FX0NMQVNTX1JFTkRFUiAmJiBlXy0+aW5zdGFuY2UgPT0gMCkNCj4gKwkJCWJ1c3lfaWR4WzBd ID0gaTsNCj4gKwkJZWxzZSBpZiAoZSA9PSBlXykNCj4gKwkJCWJ1c3lfaWR4WzFdID0gaTsNCj4g Kw0KPiArCQlmZFtpZHhdID0NCj4gKwkJCXBlcmZfaTkxNV9vcGVuX2dyb3VwKEk5MTVfUE1VX0VO R0lORV9CVVNZKGVfLT5jbGFzcywNCj4gKwkJCQkJCQkJICBlXy0+aW5zdGFuY2UpLA0KPiArCQkJ CQkgICAgIGZkWzBdKTsNCj4gKwkJaWd0X2Fzc2VydChmZFtpZHhdID4gMCk7DQo+ICsJCWkrKzsN Cj4gKwl9DQo+ICsNCj4gKwlnZW1fc3luYyhnZW1fZmQsIHNwaW5bMF0tPmhhbmRsZSk7DQo+ICsJ Z2VtX3N5bmMoZ2VtX2ZkLCBzcGluWzFdLT5oYW5kbGUpOw0KPiArDQo+ICsJcG11X3JlYWRfbXVs dGkoZmRbMF0sIG51bV9lbmdpbmVzLCB2YWwpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IG51 bV9lbmdpbmVzOyBpKyspIHsNCj4gKwkJaWYgKGkgPT0gYnVzeV9pZHhbMF0gfHwgaSA9PSBidXN5 X2lkeFsxXSkNCj4gKwkJCWFzc2VydF93aXRoaW5fZXBzaWxvbih2YWxbaV0sIGJhdGNoX2R1cmF0 aW9uX25zLA0KPiArCQkJCQkgICAgICB0b2xlcmFuY2UpOw0KPiArCQllbHNlDQo+ICsJCQlhc3Nl cnRfd2l0aGluX2Vwc2lsb24odmFsW2ldLCAwLjBmLCB0b2xlcmFuY2UpOw0KPiArCX0NCj4gKw0K PiArCWlndF9zcGluX2JhdGNoX2ZyZWUoZ2VtX2ZkLCBzcGluWzBdKTsNCj4gKwlpZ3Rfc3Bpbl9i YXRjaF9mcmVlKGdlbV9mZCwgc3BpblsxXSk7DQo+ICsJY2xvc2UoZmRbMF0pOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZA0KPiArbm9fc2VtYShpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZSAqZSwgYm9vbCBidXN5KQ0KPiArew0KPiArCWlndF9zcGluX3Qg KnNwaW47DQo+ICsJdWludDY0X3QgdmFsWzJdOw0KPiArCWludCBmZCwgZmQyOw0KPiArDQo+ICsJ aWd0X3JlcXVpcmUoZ2VtX2hhc19yaW5nKGdlbV9mZCwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzKSk7 DQo+ICsNCj4gKwlpZiAoYnVzeSkgew0KPiArCQlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGdl bV9mZCwgMCwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzLCAwKTsNCj4gKwkJaWd0X3NwaW5fYmF0Y2hf c2V0X3RpbWVvdXQoc3BpbiwgYmF0Y2hfZHVyYXRpb25fbnMpOw0KPiArCX0gZWxzZSB7DQo+ICsJ CXVzbGVlcChiYXRjaF9kdXJhdGlvbl9ucyAvIDEwMDApOw0KPiArCX0NCj4gKw0KPiArCWZkID0g cGVyZl9pOTE1X29wZW5fZ3JvdXAoSTkxNV9QTVVfRU5HSU5FX1NFTUEoZS0+Y2xhc3MsIGUtPmlu c3RhbmNlKSwNCj4gKwkJCQkgIC0xKTsNCj4gKwlpZ3RfYXNzZXJ0KGZkID49IDApOw0KPiArCWZk MiA9IHBlcmZfaTkxNV9vcGVuX2dyb3VwKEk5MTVfUE1VX0VOR0lORV9XQUlUKGUtPmNsYXNzLCBl LT5pbnN0YW5jZSksDQo+ICsJCQkJICBmZCk7DQo+ICsNCj4gKwlwbXVfcmVhZF9tdWx0aShmZCwg MiwgdmFsKTsNCj4gKw0KPiArCWFzc2VydF93aXRoaW5fZXBzaWxvbih2YWxbMF0sIDAuMGYsIHRv bGVyYW5jZSk7DQo+ICsJYXNzZXJ0X3dpdGhpbl9lcHNpbG9uKHZhbFsxXSwgMC4wZiwgdG9sZXJh bmNlKTsNCj4gKw0KPiArCWlmIChidXN5KQ0KPiArCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGdlbV9m ZCwgc3Bpbik7DQo+ICsJY2xvc2UoZmQyKTsNCj4gKwljbG9zZShmZCk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB2b2lkDQo+ICttdWx0aV9jbGllbnQoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGlu dGVsX2V4ZWN1dGlvbl9lbmdpbmUgKmUpDQo+ICt7DQo+ICsJdWludDY0X3QgY29uZmlnID0gSTkx NV9QTVVfRU5HSU5FX0JVU1koZS0+Y2xhc3MsIGUtPmluc3RhbmNlKTsNCj4gKwlpZ3Rfc3Bpbl90 ICpzcGluOw0KPiArCXVpbnQ2NF90IHZhbFsyXTsNCj4gKwlpbnQgZmRbMl07DQo+ICsNCj4gKwlp Z3RfcmVxdWlyZShnZW1faGFzX3JpbmcoZ2VtX2ZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpKTsN Cj4gKw0KPiArCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBlLT5leGVjX2lk IHwgZS0+ZmxhZ3MsIDApOw0KPiArCWlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KHNwaW4sIGJh dGNoX2R1cmF0aW9uX25zKTsNCj4gKw0KPiArCWZkWzBdID0gcGVyZl9pOTE1X29wZW4oY29uZmln KTsNCj4gKwlpZ3RfYXNzZXJ0KGZkWzBdID49IDApOw0KPiArDQo+ICsJdXNsZWVwKGJhdGNoX2R1 cmF0aW9uX25zIC8gNDAwMCk7DQo+ICsNCj4gKwlmZFsxXSA9IHBlcmZfaTkxNV9vcGVuKGNvbmZp Zyk7DQo+ICsJaWd0X2Fzc2VydChmZFsxXSA+PSAwKTsNCj4gKw0KPiArCXVzbGVlcChiYXRjaF9k dXJhdGlvbl9ucyAvIDMwMDApOw0KPiArDQo+ICsJdmFsWzFdID0gcG11X3JlYWRfc2luZ2xlKGZk WzFdKTsNCj4gKwljbG9zZShmZFsxXSk7DQo+ICsNCj4gKwlnZW1fc3luYyhnZW1fZmQsIHNwaW4t PmhhbmRsZSk7DQo+ICsNCj4gKwl2YWxbMF0gPSBwbXVfcmVhZF9zaW5nbGUoZmRbMF0pOw0KPiAr DQo+ICsJYXNzZXJ0X3dpdGhpbl9lcHNpbG9uKHZhbFswXSwgYmF0Y2hfZHVyYXRpb25fbnMsIHRv bGVyYW5jZSk7DQo+ICsJYXNzZXJ0X3dpdGhpbl9lcHNpbG9uKHZhbFsxXSwgYmF0Y2hfZHVyYXRp b25fbnMgLyAzLCB0b2xlcmFuY2UpOw0KPiArDQo+ICsJaWd0X3NwaW5fYmF0Y2hfZnJlZShnZW1f ZmQsIHNwaW4pOw0KPiArCWNsb3NlKGZkWzBdKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBU ZXN0cyB0aGF0IGk5MTUgUE1VIGNvcmVjdGx5IGVycm9yIG91dCBpbiBpbnZhbGlkIGluaXRpYWxp emF0aW9uLg0KPiArICogaTkxNSBQTVUgaXMgdW5jb3JlIFBNVSwgdGh1czoNCj4gKyAqICAtIHNh bXBsaW5nIHBlcmlvZCBpcyBub3Qgc3VwcG9ydGVkDQo+ICsgKiAgLSBwaWQgPiAwIGlzIG5vdCBz dXBwb3J0ZWQgc2luY2Ugd2UgY2FuJ3QgY291bnQgcGVyLXByb2Nlc3MgKHdlIGNvdW50DQo+ICsg KiAgICBwZXIgd2hvbGUgc3lzdGVtKA0KPiArICogIC0gY3B1ICE9IDAgaXMgbm90IHN1cHBvcnRl ZCBzaW5jZSBpOTE1IFBNVSBleHBvc2VzIGNwdW1hc2sgZm9yIENQVTANCj4gKyAqLw0KPiArc3Rh dGljIHZvaWQgaW52YWxpZF9pbml0KHZvaWQpDQo+ICt7DQo+ICsJc3RydWN0IHBlcmZfZXZlbnRf YXR0ciBhdHRyOw0KPiArCWludCBwaWQsIGNwdTsNCj4gKw0KPiArI2RlZmluZSBBVFRSX0lOSVQo KSBcDQo+ICtkbyB7IFwNCj4gKwltZW1zZXQoJmF0dHIsIDAsIHNpemVvZiAoYXR0cikpOyBcDQo+ ICsJYXR0ci5jb25maWcgPSBJOTE1X1BNVV9FTkdJTkVfQlVTWShJOTE1X0VOR0lORV9DTEFTU19S RU5ERVIsIDApOyBcDQo+ICsJYXR0ci50eXBlID0gaTkxNV90eXBlX2lkKCk7IFwNCj4gKwlpZ3Rf YXNzZXJ0KGF0dHIudHlwZSAhPSAwKTsgXA0KPiArfSB3aGlsZSgwKQ0KPiArDQo+ICsJQVRUUl9J TklUKCk7DQo+ICsJYXR0ci5zYW1wbGVfcGVyaW9kID0gMTAwOw0KPiArCXBpZCA9IC0xOw0KPiAr CWNwdSA9IDA7DQo+ICsJaWd0X2Fzc2VydF9lcShwZXJmX2V2ZW50X29wZW4oJmF0dHIsIHBpZCwg Y3B1LCAtMSwgMCksIC0xKTsNCj4gKwlpZ3RfYXNzZXJ0X2VxKGVycm5vLCBFSU5WQUwpOw0KPiAr DQo+ICsJQVRUUl9JTklUKCk7DQo+ICsJcGlkID0gMDsNCj4gKwljcHUgPSAwOw0KPiArCWlndF9h c3NlcnRfZXEocGVyZl9ldmVudF9vcGVuKCZhdHRyLCBwaWQsIGNwdSwgLTEsIDApLCAtMSk7DQo+ ICsJaWd0X2Fzc2VydF9lcShlcnJubywgRUlOVkFMKTsNCj4gKw0KPiArCUFUVFJfSU5JVCgpOw0K PiArCXBpZCA9IC0xOw0KPiArCWNwdSA9IDE7DQo+ICsJaWd0X2Fzc2VydF9lcShwZXJmX2V2ZW50 X29wZW4oJmF0dHIsIHBpZCwgY3B1LCAtMSwgMCksIC0xKTsNCj4gKwlpZ3RfYXNzZXJ0X2VxKGVy cm5vLCBFTk9ERVYpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpbml0X290aGVyKHVuc2ln bmVkIGludCBpLCBib29sIHZhbGlkKQ0KPiArew0KPiArCWludCBmZDsNCj4gKw0KPiArCWZkID0g cGVyZl9pOTE1X29wZW4oX19JOTE1X1BNVV9PVEhFUihpKSk7DQo+ICsJaWd0X3JlcXVpcmUoIShm ZCA8IDAgJiYgZXJybm8gPT0gRU5PREVWKSk7DQo+ICsJaWYgKHZhbGlkKSB7DQo+ICsJCWlndF9h c3NlcnQoZmQgPj0gMCk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJaWd0X2Fzc2VydChmZCA8IDApOw0K PiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJY2xvc2UoZmQpOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZCByZWFkX290aGVyKHVuc2lnbmVkIGludCBpLCBib29sIHZhbGlkKQ0KPiArew0K PiArCWludCBmZDsNCj4gKw0KPiArCWZkID0gcGVyZl9pOTE1X29wZW4oX19JOTE1X1BNVV9PVEhF UihpKSk7DQo+ICsJaWd0X3JlcXVpcmUoIShmZCA8IDAgJiYgZXJybm8gPT0gRU5PREVWKSk7DQo+ ICsJaWYgKHZhbGlkKSB7DQo+ICsJCWlndF9hc3NlcnQoZmQgPj0gMCk7DQo+ICsJfSBlbHNlIHsN Cj4gKwkJaWd0X2Fzc2VydChmZCA8IDApOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJ KHZvaWQpcG11X3JlYWRfc2luZ2xlKGZkKTsNCj4gKw0KPiArCWNsb3NlKGZkKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGJvb2wgY3B1MF9ob3RwbHVnX3N1cHBvcnQodm9pZCkNCj4gK3sNCj4gKwlp bnQgZmQgPSBvcGVuKCIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL29ubGluZSIsIE9fV1JP TkxZKTsNCj4gKw0KPiArCWNsb3NlKGZkKTsNCj4gKw0KPiArCXJldHVybiBmZCA+IDA7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB1aW50NjRfdA0KPiArZWxhcHNlZF9ucyhjb25zdCBzdHJ1Y3QgdGlt ZXNwZWMgKnN0YXJ0LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmVuZCkNCj4gK3sNCj4gKwlyZXR1 cm4gKChlbmQtPnR2X3NlYyAtIHN0YXJ0LT50dl9zZWMpICogMWU5ICsNCj4gKwkJKGVuZC0+dHZf bnNlYyAtIHN0YXJ0LT50dl9uc2VjKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGNwdV9o b3RwbHVnKGludCBnZW1fZmQpDQo+ICt7DQo+ICsJc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBub3c7 DQo+ICsJaWd0X3NwaW5fdCAqc3BpbjsNCj4gKwl1aW50NjRfdCB2YWwsIHJlZjsNCj4gKwlpbnQg ZmQ7DQo+ICsNCj4gKwlpZ3RfcmVxdWlyZShjcHUwX2hvdHBsdWdfc3VwcG9ydCgpKTsNCj4gKw0K PiArCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVS LCAwKTsNCj4gKwlmZCA9IHBlcmZfaTkxNV9vcGVuKEk5MTVfUE1VX0VOR0lORV9CVVNZKEk5MTVf RU5HSU5FX0NMQVNTX1JFTkRFUiwgMCkpOw0KPiArCWlndF9hc3NlcnQoZmQgPj0gMCk7DQo+ICsN Cj4gKwljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnN0YXJ0KTsNCj4gKw0KPiArCWln dF9mb3JrKGNoaWxkLCAxKSB7DQo+ICsJCWludCBjcHUgPSAwOw0KPiArDQo+ICsJCWZvciAoOzsp IHsNCj4gKwkJCWNoYXIgbmFtZVsxMjhdOw0KPiArCQkJaW50IGNwdWZkOw0KPiArDQo+ICsJCQlz cHJpbnRmKG5hbWUsICIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUlZC9vbmxpbmUiLA0KPiAr CQkJCWNwdSk7DQo+ICsJCQljcHVmZCA9IG9wZW4obmFtZSwgT19XUk9OTFkpOw0KPiArCQkJaWYg KGNwdWZkID09IC0xKSB7DQo+ICsJCQkJaWd0X2Fzc2VydChjcHUgPiAwKTsNCj4gKwkJCQlicmVh azsNCj4gKwkJCX0NCj4gKwkJCWlndF9hc3NlcnRfZXEod3JpdGUoY3B1ZmQsICIwIiwgMiksIDIp Ow0KPiArDQo+ICsJCQl1c2xlZXAoMTAwMCAqIDEwMDApOw0KPiArDQo+ICsJCQlpZ3RfYXNzZXJ0 X2VxKHdyaXRlKGNwdWZkLCAiMSIsIDIpLCAyKTsNCj4gKw0KPiArCQkJY2xvc2UoY3B1ZmQpOw0K PiArCQkJY3B1Kys7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlpZ3Rfd2FpdGNoaWxkcmVuKCk7 DQo+ICsNCj4gKwlpZ3Rfc3Bpbl9iYXRjaF9lbmQoc3Bpbik7DQo+ICsJZ2VtX3N5bmMoZ2VtX2Zk LCBzcGluLT5oYW5kbGUpOw0KPiArDQo+ICsJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMs ICZub3cpOw0KPiArCXZhbCA9IHBtdV9yZWFkX3NpbmdsZShmZCk7DQo+ICsNCj4gKwlyZWYgPSBl bGFwc2VkX25zKCZzdGFydCwgJm5vdyk7DQo+ICsNCj4gKwlhc3NlcnRfd2l0aGluX2Vwc2lsb24o dmFsLCByZWYsIHRvbGVyYW5jZSk7DQo+ICsNCj4gKwlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGdlbV9m ZCwgc3Bpbik7DQo+ICsJY2xvc2UoZmQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiAr dGVzdF9pbnRlcnJ1cHRzKGludCBnZW1fZmQpDQo+ICt7DQo+ICsJaWd0X3NwaW5fdCAqc3BpbjsN Cj4gKwl1aW50NjRfdCBpZGxlLCBidXN5LCBwcmV2Ow0KPiArCWludCBmZDsNCj4gKw0KPiArCWZk ID0gcGVyZl9pOTE1X29wZW4oSTkxNV9QTVVfSU5URVJSVVBUUyk7DQo+ICsJaWd0X2Fzc2VydChm ZCA+PSAwKTsNCj4gKw0KPiArCWdlbV9xdWllc2NlbnRfZ3B1KGdlbV9mZCk7DQo+ICsJc2xlZXAo Mik7DQo+ICsJcHJldiA9IHBtdV9yZWFkX3NpbmdsZShmZCk7DQo+ICsJdXNsZWVwKGJhdGNoX2R1 cmF0aW9uX25zIC8gMTAwMCk7DQo+ICsJaWRsZSA9IHBtdV9yZWFkX3NpbmdsZShmZCk7DQo+ICsN Cj4gKwlpZ3RfYXNzZXJ0X2VxKGlkbGUgLSBwcmV2LCAwKTsNCj4gKw0KPiArCXNwaW4gPSBpZ3Rf c3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVSLCAwKTsNCj4gKwlpZ3Rf c3Bpbl9iYXRjaF9zZXRfdGltZW91dChzcGluLCBiYXRjaF9kdXJhdGlvbl9ucyk7DQo+ICsJZ2Vt X3N5bmMoZ2VtX2ZkLCBzcGluLT5oYW5kbGUpOw0KPiArDQo+ICsJYnVzeSA9IHBtdV9yZWFkX3Np bmdsZShmZCk7DQo+ICsJaWd0X2Fzc2VydChidXN5ID4gaWRsZSk7DQo+ICsNCj4gKwlpZ3Rfc3Bp bl9iYXRjaF9mcmVlKGdlbV9mZCwgc3Bpbik7DQo+ICsJY2xvc2UoZmQpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZA0KPiArdGVzdF9mcmVxdWVuY3koaW50IGdlbV9mZCkNCj4gK3sNCj4gKwlp Z3Rfc3Bpbl90ICpzcGluOw0KPiArCXVpbnQ2NF90IGlkbGVbMl0sIGJ1c3lbMl07DQo+ICsJaW50 IGZkOw0KPiArDQo+ICsJZmQgPSBwZXJmX2k5MTVfb3Blbl9ncm91cChJOTE1X1BNVV9SRVFVRVNU RURfRlJFUVVFTkNZLCAtMSk7DQo+ICsJaWd0X2Fzc2VydChmZCA+PSAwKTsNCj4gKwlpZ3RfYXNz ZXJ0KHBlcmZfaTkxNV9vcGVuX2dyb3VwKEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1ksIGZkKSA+ PSAwKTsNCj4gKw0KPiArCWdlbV9xdWllc2NlbnRfZ3B1KGdlbV9mZCk7DQo+ICsJdXNsZWVwKGJh dGNoX2R1cmF0aW9uX25zIC8gMTAwMCk7DQo+ICsNCj4gKwlwbXVfcmVhZF9tdWx0aShmZCwgMiwg aWRsZSk7DQo+ICsNCj4gKwlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwgSTkx NV9FWEVDX1JFTkRFUiwgMCk7DQo+ICsJaWd0X3NwaW5fYmF0Y2hfc2V0X3RpbWVvdXQoc3Bpbiwg YmF0Y2hfZHVyYXRpb25fbnMpOw0KPiArCWdlbV9zeW5jKGdlbV9mZCwgc3Bpbi0+aGFuZGxlKTsN Cj4gKw0KPiArCXBtdV9yZWFkX211bHRpKGZkLCAyLCBidXN5KTsNCj4gKw0KPiArCWlndF9hc3Nl cnQoYnVzeVswXSA+IGlkbGVbMF0pOw0KPiArCWlndF9hc3NlcnQoYnVzeVsxXSA+IGlkbGVbMV0p Ow0KPiArDQo+ICsJaWd0X3NwaW5fYmF0Y2hfZnJlZShnZW1fZmQsIHNwaW4pOw0KPiArCWNsb3Nl KGZkKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3Rlc3RfcmM2KGludCBnZW1fZmQp DQo+ICt7DQo+ICsJaW50NjRfdCBkdXJhdGlvbl9ucyA9IDUwMCAqIDEwMDAgKiAxMDAwOw0KPiAr CWlndF9zcGluX3QgKnNwaW47DQo+ICsJdWludDY0X3QgaWRsZSwgYnVzeSwgcHJldjsNCj4gKwlp bnQgZmQ7DQo+ICsNCj4gKwlmZCA9IHBlcmZfaTkxNV9vcGVuKEk5MTVfUE1VX1JDNl9SRVNJREVO Q1kpOw0KPiArCWlndF9hc3NlcnQoZmQgPj0gMCk7DQo+ICsNCj4gKwlnZW1fcXVpZXNjZW50X2dw dShnZW1fZmQpOw0KPiArCXNsZWVwKDIpOw0KPiArDQo+ICsJcHJldiA9IHBtdV9yZWFkX3Npbmds ZShmZCk7DQo+ICsJdXNsZWVwKGR1cmF0aW9uX25zIC8gMTAwMCk7DQo+ICsJaWRsZSA9IHBtdV9y ZWFkX3NpbmdsZShmZCk7DQo+ICsNCj4gKwlhc3NlcnRfd2l0aGluX2Vwc2lsb24oaWRsZSAtIHBy ZXYsIGR1cmF0aW9uX25zLCB0b2xlcmFuY2UpOw0KPiArDQo+ICsJc3BpbiA9IGlndF9zcGluX2Jh dGNoX25ldyhnZW1fZmQsIDAsIEk5MTVfRVhFQ19SRU5ERVIsIDApOw0KPiArCWlndF9zcGluX2Jh dGNoX3NldF90aW1lb3V0KHNwaW4sIGR1cmF0aW9uX25zKTsNCj4gKw0KPiArCXByZXYgPSBwbXVf cmVhZF9zaW5nbGUoZmQpOw0KPiArDQo+ICsJZ2VtX3N5bmMoZ2VtX2ZkLCBzcGluLT5oYW5kbGUp Ow0KPiArDQo+ICsJYnVzeSA9IHBtdV9yZWFkX3NpbmdsZShmZCk7DQo+ICsJYXNzZXJ0X3dpdGhp bl9lcHNpbG9uKGJ1c3kgLSBwcmV2LCAwLjAsIHRvbGVyYW5jZSk7DQo+ICsNCj4gKwlpZ3Rfc3Bp bl9iYXRjaF9mcmVlKGdlbV9mZCwgc3Bpbik7DQo+ICsJY2xvc2UoZmQpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZA0KPiArdGVzdF9yYzZwKGludCBnZW1fZmQpDQo+ICt7DQo+ICsJY29uc3Qg dW5zaWduZWQgaW50IGRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChnZW1fZmQpOw0KPiArCWlu dDY0X3QgZHVyYXRpb25fbnMgPSAyICogMTAwMCAqIDEwMDAgKiAxMDAwOw0KPiArCXVuc2lnbmVk IGludCBudW1fcG11ID0gMTsNCj4gKwlpZ3Rfc3Bpbl90ICpzcGluOw0KPiArCXVpbnQ2NF90IGlk bGVbM10sIGJ1c3lbM10sIHByZXZbM107DQo+ICsJdW5zaWduZWQgaW50IGk7DQo+ICsJaW50IGZk LCByZXQ7DQo+ICsNCj4gKwlpZ3RfcmVxdWlyZShpbnRlbF9nZW4oZGV2aWQpIDwgOCAmJiAhSVNf SEFTV0VMTChkZXZpZCkpOw0KPiArDQo+ICsJZmQgPSBwZXJmX2k5MTVfb3Blbl9ncm91cChJOTE1 X1BNVV9SQzZfUkVTSURFTkNZLCAtMSk7DQo+ICsJaWd0X2Fzc2VydChmZCA+PSAwKTsNCj4gKw0K PiArCXJldCA9IHBlcmZfaTkxNV9vcGVuX2dyb3VwKEk5MTVfUE1VX1JDNnBfUkVTSURFTkNZLCBm ZCk7DQo+ICsJaWYgKHJldCA+IDApIHsNCj4gKwkJbnVtX3BtdSsrOw0KPiArCQlyZXQgPSBwZXJm X2k5MTVfb3Blbl9ncm91cChJOTE1X1BNVV9SQzZwX1JFU0lERU5DWSwgZmQpOw0KPiArCQlpZiAo cmV0ID4gMCkNCj4gKwkJCW51bV9wbXUrKzsNCj4gKwl9DQo+ICsNCj4gKwlnZW1fcXVpZXNjZW50 X2dwdShnZW1fZmQpOw0KPiArCXNsZWVwKDIpOw0KPiArDQo+ICsJcG11X3JlYWRfbXVsdGkoZmQs IG51bV9wbXUsIHByZXYpOw0KPiArCXVzbGVlcChkdXJhdGlvbl9ucyAvIDEwMDApOw0KPiArCXBt dV9yZWFkX211bHRpKGZkLCBudW1fcG11LCBpZGxlKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkg PCBudW1fcG11OyBpKyspDQo+ICsJCWFzc2VydF93aXRoaW5fZXBzaWxvbihpZGxlW2ldIC0gcHJl dltpXSwgZHVyYXRpb25fbnMsDQo+ICsJCQkJICAgICAgdG9sZXJhbmNlKTsNCj4gKw0KPiArCXNw aW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVSLCAwKTsN Cj4gKwlpZ3Rfc3Bpbl9iYXRjaF9zZXRfdGltZW91dChzcGluLCBkdXJhdGlvbl9ucyk7DQo+ICsN Cj4gKwlwbXVfcmVhZF9tdWx0aShmZCwgbnVtX3BtdSwgcHJldik7DQo+ICsNCj4gKwlnZW1fc3lu YyhnZW1fZmQsIHNwaW4tPmhhbmRsZSk7DQo+ICsNCj4gKwlwbXVfcmVhZF9tdWx0aShmZCwgbnVt X3BtdSwgYnVzeSk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BtdTsgaSsrKQ0KPiAr CQlhc3NlcnRfd2l0aGluX2Vwc2lsb24oYnVzeVtpXSAtIHByZXZbaV0sIDAuMCwgdG9sZXJhbmNl KTsNCj4gKw0KPiArCWlndF9zcGluX2JhdGNoX2ZyZWUoZ2VtX2ZkLCBzcGluKTsNCj4gKwljbG9z ZShmZCk7DQo+ICt9DQo+ICsNCj4gK2lndF9tYWluDQo+ICt7DQo+ICsJY29uc3QgdW5zaWduZWQg aW50IG51bV9vdGhlcl9tZXRyaWNzID0NCj4gKwkJCQlJOTE1X1BNVV9MQVNUIC0gX19JOTE1X1BN VV9PVEhFUigwKSArIDE7DQo+ICsJdW5zaWduZWQgaW50IG51bV9lbmdpbmVzID0gMDsNCj4gKwlp bnQgZmQgPSAtMTsNCj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZSAqZTsN Cj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gKw0KPiArCWlndF9maXh0dXJlIHsNCj4gKwkJZmQgPSBk cm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9JTlRFTCk7DQo+ICsNCj4gKwkJaWd0X3JlcXVp cmVfZ2VtKGZkKTsNCj4gKwkJaWd0X3JlcXVpcmUoaTkxNV90eXBlX2lkKCkgPiAwKTsNCj4gKw0K PiArCQlmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UoZmQsIGUpIHsNCj4gKwkJCWlmIChn ZW1faGFzX3JpbmcoZmQsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncykpDQo+ICsJCQkJbnVtX2VuZ2lu ZXMrKzsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCS8qKg0KPiArCSAqIFRlc3QgaW52YWxpZCBh Y2Nlc3MgdmlhIHBlcmYgQVBJIGlzIHJlamVjdGVkLg0KPiArCSAqLw0KPiArCWlndF9zdWJ0ZXN0 KCJpbnZhbGlkLWluaXQiKQ0KPiArCQlpbnZhbGlkX2luaXQoKTsNCj4gKw0KPiArCWZvcl9lYWNo X2VuZ2luZV9jbGFzc19pbnN0YW5jZShmZCwgZSkgew0KPiArCQkvKioNCj4gKwkJICogVGVzdCB0 aGF0IGEgc2luZ2xlIGVuZ2luZSBtZXRyaWMgY2FuIGJlIGluaXRpYWxpemVkLg0KPiArCQkgKi8N Cj4gKwkJaWd0X3N1YnRlc3RfZigiaW5pdC1idXN5LSVzIiwgZS0+bmFtZSkNCj4gKwkJCWluaXQo ZmQsIGUsIEk5MTVfU0FNUExFX0JVU1kpOw0KPiArDQo+ICsJCWlndF9zdWJ0ZXN0X2YoImluaXQt d2FpdC0lcyIsIGUtPm5hbWUpDQo+ICsJCQlpbml0KGZkLCBlLCBJOTE1X1NBTVBMRV9XQUlUKTsN Cj4gKw0KPiArCQlpZ3Rfc3VidGVzdF9mKCJpbml0LXNlbWEtJXMiLCBlLT5uYW1lKQ0KPiArCQkJ aW5pdChmZCwgZSwgSTkxNV9TQU1QTEVfU0VNQSk7DQo+ICsNCj4gKwkJLyoqDQo+ICsJCSAqIFRl c3QgdGhhdCBlbmdpbmVzIHNob3cgbm8gbG9hZCB3aGVuIGlkbGUuDQo+ICsJCSAqLw0KPiArCQlp Z3Rfc3VidGVzdF9mKCJpZGxlLSVzIiwgZS0+bmFtZSkNCj4gKwkJCXNpbmdsZShmZCwgZSwgZmFs c2UpOw0KPiArDQo+ICsJCS8qKg0KPiArCQkgKiBUZXN0IHRoYXQgYSBzaW5nbGUgZW5naW5lIHJl cG9ydHMgbG9hZCBjb3JyZWN0bHkuDQo+ICsJCSAqLw0KPiArCQlpZ3Rfc3VidGVzdF9mKCJidXN5 LSVzIiwgZS0+bmFtZSkNCj4gKwkJCXNpbmdsZShmZCwgZSwgdHJ1ZSk7DQo+ICsNCj4gKwkJLyoq DQo+ICsJCSAqIFRlc3QgdGhhdCB3aGVuIG9uZSBlbmdpbmUgaXMgbG9hZGVkIG90aGVyIHJlcG9y dCBubyBsb2FkLg0KPiArCQkgKi8NCj4gKwkJaWd0X3N1YnRlc3RfZigiYnVzeS1jaGVjay1hbGwt JXMiLCBlLT5uYW1lKQ0KPiArCQkJYnVzeV9jaGVja19hbGwoZmQsIGUsIG51bV9lbmdpbmVzKTsN Cj4gKw0KPiArCQkvKioNCj4gKwkJICogVGVzdCB0aGF0IHdoZW4gdHdvIGVuZ2luZXMgYXJlIGxv YWRlZCBvdGhlciByZXBvcnQgbm8gbG9hZC4NCj4gKwkJICovDQo+ICsJCWlmICghKGUtPmNsYXNz ID09IEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiAmJiBlLT5pbnN0YW5jZSA9PSAwKSkNCj4gKwkJ CWlndF9zdWJ0ZXN0X2YoInR3by1idXN5LWNoZWNrLWFsbC0lcyIsIGUtPm5hbWUpDQo+ICsJCQkJ dHdvX2J1c3lfY2hlY2tfYWxsKGZkLCBlLCBudW1fZW5naW5lcyk7DQo+ICsNCj4gKwkJLyoqDQo+ ICsJCSAqIFRlc3QgdGhhdCBzZW1waG9yZSBjb3VudGVycyByZXBvcnQgbm8gYWN0aXZpdHkgb24g aWRsZQ0KPiArCQkgKiBlbmdpbmVzLg0KPiArCQkgKi8NCj4gKwkJaWd0X3N1YnRlc3RfZigiaWRs ZS1uby1zZW1hcGhvcmVzLSVzIiwgZS0+bmFtZSkNCj4gKwkJCW5vX3NlbWEoZmQsIGUsIGZhbHNl KTsNCj4gKw0KPiArCQlpZ3Rfc3VidGVzdF9mKCJidXN5LW5vLXNlbWFwaG9yZXMtJXMiLCBlLT5u YW1lKQ0KPiArCQkJbm9fc2VtYShmZCwgZSwgdHJ1ZSk7DQo+ICsNCj4gKwkJLyoqDQo+ICsJCSAq IENoZWNrIHRoYXQgdHdvIHBlcmYgY2xpZW50cyBkbyBub3QgaW5mbHVlbmNlIGVhY2ggb3RoZXJz DQo+ICsJCSAqIG9ic2VydmF0aW9ucy4NCj4gKwkJICovDQo+ICsJCWlndF9zdWJ0ZXN0X2YoIm11 bHRpLWNsaWVudC0lcyIsIGUtPm5hbWUpDQo+ICsJCQltdWx0aV9jbGllbnQoZmQsIGUpOw0KPiAr CX0NCj4gKw0KPiArCS8qKg0KPiArCSAqIFRlc3QgdGhhdCBub24tZW5naW5lIGNvdW50ZXJzIGNh biBiZSBpbml0aWFsaXplZCBhbmQgcmVhZC4gQXBhcnQNCj4gKwkgKiBmcm9tIHRoZSBpbnZhbGlk IG1ldHJpYyB3aGljaCBzaG91bGQgZmFpbC4NCj4gKwkgKi8NCj4gKwlmb3IgKGkgPSAwOyBpIDwg bnVtX290aGVyX21ldHJpY3MgKyAxOyBpKyspIHsNCj4gKwkJaWd0X3N1YnRlc3RfZigib3RoZXIt aW5pdC0ldSIsIGkpDQo+ICsJCQlpbml0X290aGVyKGksIGkgPCBudW1fb3RoZXJfbWV0cmljcyk7 DQo+ICsNCj4gKwkJaWd0X3N1YnRlc3RfZigib3RoZXItcmVhZC0ldSIsIGkpDQo+ICsJCQlyZWFk X290aGVyKGksIGkgPCBudW1fb3RoZXJfbWV0cmljcyk7DQo+ICsJfQ0KPiArDQo+ICsJLyoqDQo+ ICsJICogVGVzdCBjb3VudGVycyBhcmUgbm90IGFmZmVjdGVkIGJ5IENQVSBvZmZsaW5lL29ubGlu ZSBldmVudHMuDQo+ICsJICovDQo+ICsJaWd0X3N1YnRlc3QoImNwdS1ob3RwbHVnIikNCj4gKwkJ Y3B1X2hvdHBsdWcoZmQpOw0KPiArDQo+ICsJLyoqDQo+ICsJICogVGVzdCBHUFUgZnJlcXVlbmN5 Lg0KPiArCSAqLw0KPiArCWlndF9zdWJ0ZXN0KCJmcmVxdWVuY3kiKQ0KPiArCQl0ZXN0X2ZyZXF1 ZW5jeShmZCk7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBUZXN0IGludGVycnVwdCBjb3VudCByZXBv cnRpbmcuDQo+ICsJICovDQo+ICsJaWd0X3N1YnRlc3QoImludGVycnVwdHMiKQ0KPiArCQl0ZXN0 X2ludGVycnVwdHMoZmQpOw0KPiArDQo+ICsJLyoqDQo+ICsJICogVGVzdCBSQzYgcmVzaWRlbmN5 IHJlcG9ydGluZy4NCj4gKwkgKi8NCj4gKwlpZ3Rfc3VidGVzdCgicmM2IikNCj4gKwkJdGVzdF9y YzYoZmQpOw0KPiArDQo+ICsJLyoqDQo+ICsJICogVGVzdCBSQzZwIHJlc2lkZW5jeSByZXBvcnRp bmcuDQo+ICsJICovDQo+ICsJaWd0X3N1YnRlc3QoInJjNnAiKQ0KPiArCQl0ZXN0X3JjNnAoZmQp Ow0KPiArfQ0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK