From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mx08-00178001.pphosted.com ([91.207.212.93]:56560 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752517AbdECJNW (ORCPT ); Wed, 3 May 2017 05:13:22 -0400 From: Hugues FRUCHET To: Nicolas Dufresne , "linux-media@vger.kernel.org" , Hans Verkuil CC: Benjamin Gaignard , Jean Christophe TROTIN Subject: Re: [PATCH v2 3/3] libv4l-codecparsers: add GStreamer mpeg2 parser Date: Wed, 3 May 2017 09:13:12 +0000 Message-ID: <82abed7d-a330-0267-3683-b9bafe080a59@st.com> References: <1493391752-22429-1-git-send-email-hugues.fruchet@st.com> <1493391752-22429-4-git-send-email-hugues.fruchet@st.com> <1493660273.17990.4.camel@ndufresne.ca> In-Reply-To: <1493660273.17990.4.camel@ndufresne.ca> Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: <2B463B4560153248A54BD2BECAC0928A@st.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-media-owner@vger.kernel.org List-ID: VGhhbmtzIE5pY29sYXMsDQpJIHdpbGwgdXBkYXRlIGNvbmZpZ3VyZS5hYyBhY2NvcmRpbmdseS4N CkJSLA0KSHVndWVzLg0KDQpPbiAwNS8wMS8yMDE3IDA3OjM3IFBNLCBOaWNvbGFzIER1ZnJlc25l IHdyb3RlOg0KPiBMZSB2ZW5kcmVkaSAyOCBhdnJpbCAyMDE3IMOgIDE3OjAyICswMjAwLCBIdWd1 ZXMgRnJ1Y2hldCBhIMOpY3JpdCA6DQo+PiBBZGQgdGhlIG1wZWcyIGNvZGVjcGFyc2VyIGJhY2tl bmQgZ2x1ZSB3aGljaCB3aWxsDQo+PiBjYWxsIHRoZSBHU3RyZWFtZXIgcGFyc2luZyBmdW5jdGlv bnMuDQo+Pg0KPj4gU2lnbmVkLW9mZi1ieTogSHVndWVzIEZydWNoZXQgPGh1Z3Vlcy5mcnVjaGV0 QHN0LmNvbT4NCj4+IC0tLQ0KPj4gIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgIDIxICsrDQo+PiAgbGliL2xpYnY0bC1jb2RlY3BhcnNlcnMvTWFrZWZp bGUuYW0gICAgICAgICAgICAgfCAgMTQgKy0NCj4+ICBsaWIvbGlidjRsLWNvZGVjcGFyc2Vycy9s aWJ2NGwtY3BhcnNlcnMtbXBlZzIuYyB8IDM3NQ0KPj4gKysrKysrKysrKysrKysrKysrKysrKysr DQo+PiAgbGliL2xpYnY0bC1jb2RlY3BhcnNlcnMvbGlidjRsLWNwYXJzZXJzLmMgICAgICAgfCAg IDQgKw0KPj4gIDQgZmlsZXMgY2hhbmdlZCwgNDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o LSkNCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2xpYnY0bC1jb2RlY3BhcnNlcnMvbGlidjRs LWNwYXJzZXJzLW1wZWcyLmMNCj4+DQo+PiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29u ZmlndXJlLmFjDQo+PiBpbmRleCA5Y2U3MzkyLi5jZTQzZjE4IDEwMDY0NA0KPj4gLS0tIGEvY29u ZmlndXJlLmFjDQo+PiArKysgYi9jb25maWd1cmUuYWMNCj4+IEBAIC0yNzMsNiArMjczLDI1IEBA IGZpDQo+Pg0KPj4gIEFDX1NVQlNUKFtKUEVHX0xJQlNdKQ0KPj4NCj4+ICsjIENoZWNrIGZvciBH U3RyZWFtZXIgY29kZWNwYXJzZXJzDQo+PiArDQo+PiArZ3N0X2NvZGVjcGFyc2Vyc19wa2djb25m aWc9ZmFsc2UNCj4+ICtQS0dfQ0hFQ0tfTU9EVUxFUyhbR1NUXSwgW2dzdHJlYW1lci0xLjAgPj0g MS44LjBdLA0KPj4gW2dzdF9wa2djb25maWc9dHJ1ZV0sIFtnc3RfcGtnY29uZmlnPWZhbHNlXSkN Cj4+ICtpZiB0ZXN0ICJ4JGdzdF9wa2djb25maWciID0gInhmYWxzZSI7IHRoZW4NCj4+ICsgICBB Q19NU0dfV0FSTihHU3RyZWFtZXIgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlKQ0KPj4gK2Vsc2UN Cj4+ICsgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbR1NUX0JBU0VdLCBbZ3N0cmVhbWVyLWJhc2UtMS4w ID49IDEuOC4wXSwNCj4+IFtnc3RfYmFzZV9wa2djb25maWc9dHJ1ZV0sIFtnc3RfYmFzZV9wa2dj b25maWc9ZmFsc2VdKQ0KPj4gKyAgIGlmIHRlc3QgIngkZ3N0X2Jhc2VfcGtnY29uZmlnIiA9ICJ4 ZmFsc2UiOyB0aGVuDQo+PiArICAgICAgQUNfTVNHX1dBUk4oR1N0cmVhbWVyIGJhc2UgbGlicmFy eSBpcyBub3QgYXZhaWxhYmxlKQ0KPj4gKyAgIGVsc2UNCj4+ICsgICAgICBQS0dfQ0hFQ0tfTU9E VUxFUyhHU1RfQ09ERUNfUEFSU0VSUywgW2dzdHJlYW1lci1jb2RlY3BhcnNlcnMtDQo+PiAxLjAg Pj0gMS44LjBdLCBbZ3N0X2NvZGVjcGFyc2Vyc19wa2djb25maWc9dHJ1ZV0sDQo+DQo+IFlvdSBz aG91bGQgb25seSBjaGVjayBmb3IgdGhlIGNvZGVjcGFyc2VyIGxpYnJhcnkuIFRoZSByZXN0IGFy ZQ0KPiBkZXBlbmRlbmNpZXMgd2hpY2ggd2lsbCBiZSBwdWxsZWQgYXV0b21hdGljYWxseSBieSBw a2ctY29uZmlnLiBJZiBmb3INCj4gc29tZSByZWFzb24geW91IG5lZWRlZCBtdWx0aXBsZSBsaWJz LCB0aGF0IGRvbid0IGRlcGVuZCBvbiBlYWNoIG90aGVycywNCj4gbm90aWNlIHRoZSBTIGluIFBL R19DSEVDS19NT0RVTEVTLiBZb3UgY2FuIGRvIGEgc2luZ2xlIGludm9jYXRpb24uDQo+DQo+PiBb Z3N0X2NvZGVjcGFyc2Vyc19wa2djb25maWc9ZmFsc2VdKQ0KPj4gKyAgICAgIGlmIHRlc3QgIngk Z3N0X2NvZGVjcGFyc2Vyc19wa2djb25maWciID0gInhmYWxzZSI7IHRoZW4NCj4+ICsgICAgICAg ICBBQ19NU0dfV0FSTihHU3RyZWFtZXIgY29kZWNwYXJzZXIgbGlicmFyeSBpcyBub3QgYXZhaWxh YmxlKQ0KPj4gKyAgICAgIGZpDQo+PiArICAgZmkNCj4+ICtmaQ0KPj4gK0FNX0NPTkRJVElPTkFM KFtIQVZFX0dTVF9DT0RFQ19QQVJTRVJTXSwgW3Rlc3QNCj4+IHgkZ3N0X2NvZGVjcGFyc2Vyc19w a2djb25maWcgPSB4dHJ1ZV0pDQo+PiArDQo+PiAgIyBDaGVjayBmb3IgcHRocmVhZA0KPj4NCj4+ ICBBU19JRihbdGVzdCB4JGVuYWJsZV9zaGFyZWQgIT0geG5vXSwNCj4+IEBAIC00NzcsNiArNDk2 LDcgQEAgQU1fQ09ORF9JRihbV0lUSF9WNEwyX0NUTF9MSUJWNExdLA0KPj4gW1VTRV9WNEwyX0NU TD0ieWVzIl0sIFtVU0VfVjRMMl9DVEw9Im5vIl0pDQo+PiAgQU1fQ09ORF9JRihbV0lUSF9WNEwy X0NUTF9TVFJFQU1fVE9dLCBbVVNFX1Y0TDJfQ1RMPSJ5ZXMiXSwNCj4+IFtVU0VfVjRMMl9DVEw9 Im5vIl0pDQo+PiAgQU1fQ09ORF9JRihbV0lUSF9WNEwyX0NPTVBMSUFOQ0VfTElCVjRMXSwNCj4+ IFtVU0VfVjRMMl9DT01QTElBTkNFPSJ5ZXMiXSwgW1VTRV9WNEwyX0NPTVBMSUFOQ0U9Im5vIl0p DQo+PiAgQVNfSUYoW3Rlc3QgIngkYWxzYV9wa2djb25maWciID0gInh0cnVlIl0sIFtVU0VfQUxT QT0ieWVzIl0sDQo+PiBbVVNFX0FMU0E9Im5vIl0pDQo+PiArQVNfSUYoW3Rlc3QgIngkZ3N0X2Nv ZGVjcGFyc2Vyc19wa2djb25maWciID0gInh0cnVlIl0sDQo+PiBbVVNFX0dTVF9DT0RFQ1BBUlNF UlM9InllcyJdLCBbVVNFX0dTVF9DT0RFQ1BBUlNFUlM9Im5vIl0pDQo+Pg0KPj4gIEFDX09VVFBV VA0KPj4NCj4+IEBAIC00OTcsNiArNTE3LDcgQEAgY29tcGlsZSB0aW1lIG9wdGlvbnMgc3VtbWFy eQ0KPj4gICAgICBwdGhyZWFkICAgICAgICAgICAgIDogJGhhdmVfcHRocmVhZA0KPj4gICAgICBR VCB2ZXJzaW9uICAgICAgICAgIDogJFFUX1ZFUlNJT04NCj4+ICAgICAgQUxTQSBzdXBwb3J0ICAg ICAgICA6ICRVU0VfQUxTQQ0KPj4gKyAgICBHU1QgY29kZWNwYXJzZXJzICAgIDogJFVTRV9HU1Rf Q09ERUNQQVJTRVJTDQo+Pg0KPj4gICAgICBidWlsZCBkeW5hbWljIGxpYnMgIDogJGVuYWJsZV9z aGFyZWQNCj4+ICAgICAgYnVpbGQgc3RhdGljIGxpYnMgICA6ICRlbmFibGVfc3RhdGljDQo+PiBk aWZmIC0tZ2l0IGEvbGliL2xpYnY0bC1jb2RlY3BhcnNlcnMvTWFrZWZpbGUuYW0gYi9saWIvbGli djRsLQ0KPj4gY29kZWNwYXJzZXJzL01ha2VmaWxlLmFtDQo+PiBpbmRleCBhOWQ2YzhiLi42MWY0 NzMwIDEwMDY0NA0KPj4gLS0tIGEvbGliL2xpYnY0bC1jb2RlY3BhcnNlcnMvTWFrZWZpbGUuYW0N Cj4+ICsrKyBiL2xpYi9saWJ2NGwtY29kZWNwYXJzZXJzL01ha2VmaWxlLmFtDQo+PiBAQCAtMSw5 ICsxLDIxIEBADQo+PiAgaWYgV0lUSF9WNExfUExVR0lOUw0KPj4gK2lmIEhBVkVfR1NUX0NPREVD X1BBUlNFUlMNCj4+ICsNCj4+ICBsaWJ2NGwycGx1Z2luX0xUTElCUkFSSUVTID0gbGlidjRsLWNv ZGVjcGFyc2Vycy5sYQ0KPj4gLWVuZGlmDQo+Pg0KPj4gIGxpYnY0bF9jb2RlY3BhcnNlcnNfbGFf U09VUkNFUyA9IGxpYnY0bC1jcGFyc2Vycy5jIGxpYnY0bC1jcGFyc2Vycy5oDQo+Pg0KPj4gIGxp YnY0bF9jb2RlY3BhcnNlcnNfbGFfQ1BQRkxBR1MgPSAkKENGTEFHX1ZJU0lCSUxJVFkpDQo+PiAt SSQodG9wX3NyY2RpcikvbGliL2xpYnY0bDIvIC1JJCh0b3Bfc3JjZGlyKS9saWIvbGlidjRsY29u dmVydC8NCj4+ICBsaWJ2NGxfY29kZWNwYXJzZXJzX2xhX0xERkxBR1MgPSAtYXZvaWQtdmVyc2lv biAtbW9kdWxlIC1zaGFyZWQNCj4+IC1leHBvcnQtZHluYW1pYyAtbHB0aHJlYWQNCj4+ICBsaWJ2 NGxfY29kZWNwYXJzZXJzX2xhX0xJQkFERCA9IC4uL2xpYnY0bDIvbGlidjRsMi5sYQ0KPj4gKw0K Pj4gKyMgR1N0cmVhbWVyIGNvZGVjcGFyc2VycyBsaWJyYXJ5DQo+PiArbGlidjRsX2NvZGVjcGFy c2Vyc19sYV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpIC1ER1NUX1VTRV9VTlNUQUJMRV9BUEkNCj4+ ICtsaWJ2NGxfY29kZWNwYXJzZXJzX2xhX0xERkxBR1MgKz0gJChHU1RfTElCX0xERkxBR1MpDQo+ PiArbGlidjRsX2NvZGVjcGFyc2Vyc19sYV9MSUJBREQgKz0gJChHTElCX0xJQlMpICQoR1NUX0xJ QlMpDQo+PiAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0NPREVDX1BBUlNFUlNfTElCUykgJChOVUxM KQ0KPj4gKw0KPj4gKyMgTVBFRy0yIHBhcnNlciBiYWNrLWVuZA0KPj4gK2xpYnY0bF9jb2RlY3Bh cnNlcnNfbGFfU09VUkNFUyArPSBsaWJ2NGwtY3BhcnNlcnMtbXBlZzIuYw0KPj4gKw0KPj4gK2Vu ZGlmDQo+PiArZW5kaWYNCj4+IGRpZmYgLS1naXQgYS9saWIvbGlidjRsLWNvZGVjcGFyc2Vycy9s aWJ2NGwtY3BhcnNlcnMtbXBlZzIuYw0KPj4gYi9saWIvbGlidjRsLWNvZGVjcGFyc2Vycy9saWJ2 NGwtY3BhcnNlcnMtbXBlZzIuYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAw MDAwMDAuLjM0NTZiNzMNCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBiL2xpYi9saWJ2NGwtY29k ZWNwYXJzZXJzL2xpYnY0bC1jcGFyc2Vycy1tcGVnMi5jDQo+PiBAQCAtMCwwICsxLDM3NSBAQA0K Pj4gKy8qDQo+PiArICogbGlidjRsLWNwYXJzZXJzLW1wZWcyLmMNCj4+ICsgKg0KPj4gKyAqIENv cHlyaWdodCAoQykgU1RNaWNyb2VsZWN0cm9uaWNzIFNBIDIwMTcNCj4+ICsgKiBBdXRob3JzOiBI dWd1ZXMgRnJ1Y2hldCA8aHVndWVzLmZydWNoZXRAc3QuY29tPg0KPj4gKyAqICAgICAgICAgIFRp ZmFpbmUgSW5ndWVyZSA8dGlmYWluZS5pbmd1ZXJlQHN0LmNvbT4NCj4+ICsgKiAgICAgICAgICBm b3IgU1RNaWNyb2VsZWN0cm9uaWNzLg0KPj4gKyAqDQo+PiArICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPj4gbW9kaWZ5DQo+ PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMNCj4+IHB1Ymxpc2hlZCBieQ0KPj4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwNCj4+IG9yDQo+PiAr ICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4+ICsgKg0KPj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLA0KPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mDQo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCj4+ICsgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KPj4gKyAqDQo+PiArICogWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp Yw0KPj4gTGljZW5zZQ0KPj4gKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQo+PiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBTdWl0ZSA1MDAsIEJvc3RvbiwNCj4+IE1BICAwMjExMC0xMzM1ICBVU0EN Cj4+ICsgKi8NCj4+ICsNCj4+ICsjaW5jbHVkZSA8ZXJybm8uaD4NCj4+ICsjaW5jbHVkZSA8c3Rk bGliLmg+DQo+PiArI2luY2x1ZGUgPHN0cmluZy5oPg0KPj4gKyNpbmNsdWRlIDxzdGRib29sLmg+ DQo+PiArDQo+PiArI2luY2x1ZGUgImxpYnY0bDIuaCINCj4+ICsjaW5jbHVkZSAibGlidjRsMi1w cml2LmgiDQo+PiArI2luY2x1ZGUgImxpYnY0bC1jcGFyc2Vycy5oIg0KPj4gKw0KPj4gKyNpbmNs dWRlIDxnc3QvY29kZWNwYXJzZXJzL2dzdG1wZWd2aWRlb3BhcnNlci5oPg0KPj4gKyNpbmNsdWRl IDxnc3QvYmFzZS9nc3RiaXRyZWFkZXIuaD4NCj4+ICsNCj4+ICsvKg0KPj4gKyAqIHBhcnNpbmcg bWV0YWRhdGEgaWRzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGNvbnRyb2wgaWRzLg0KPj4gKyAqIGtl ZXAgaW4gc3luYyBib3RoIGVudW0gYW5kIGFycmF5LCB0aGlzIGlzIHVzZWQgdG8gaW5kZXgNCj4+ IG1ldGFzWzxtZXRhIGlkPl0NCj4+ICsgKi8NCj4+ICtlbnVtIG1wZWcyX21ldGFfaWQgew0KPj4g KwlTRVFfSERSLA0KPj4gKwlTRVFfRVhULA0KPj4gKwlTRVFfRElTUExBWV9FWFQsDQo+PiArCVNF UV9NQVRSSVhfRVhULA0KPj4gKwlQSUNfSERSLA0KPj4gKwlQSUNfSERSMSwvKiAybmQgZmllbGQg ZGVjb2Rpbmcgb2YgaW50ZXJsYWNlZCBzdHJlYW0gKi8NCj4+ICsJUElDX0VYVCwNCj4+ICsJUElD X0VYVDEsLyogMm5kIGZpZWxkIGRlY29kaW5nIG9mIGludGVybGFjZWQgc3RyZWFtICovDQo+PiAr fTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgbXBlZzJf bWV0YXNfc3RvcmVbXSA9IHsNCj4+ICsJew0KPj4gKwkuaWQgPSBWNEwyX0NJRF9NUEVHX1ZJREVP X01QRUcyX1NFUV9IRFIsDQo+PiArCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX21wZWdfdmlk ZW9fbXBlZzJfc2VxX2hkciksDQo+PiArCX0sDQo+PiArCXsNCj4+ICsJLmlkID0gVjRMMl9DSURf TVBFR19WSURFT19NUEVHMl9TRVFfRVhULA0KPj4gKwkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRs Ml9tcGVnX3ZpZGVvX21wZWcyX3NlcV9leHQpLA0KPj4gKwl9LA0KPj4gKwl7DQo+PiArCS5pZCA9 IFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzJfU0VRX0RJU1BMQVlfRVhULA0KPj4gKwkuc2l6ZSA9 IHNpemVvZihzdHJ1Y3QNCj4+IHY0bDJfbXBlZ192aWRlb19tcGVnMl9zZXFfZGlzcGxheV9leHQp LA0KPj4gKwl9LA0KPj4gKwl7DQo+PiArCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzJf U0VRX01BVFJJWF9FWFQsDQo+PiArCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX21wZWdfdmlk ZW9fbXBlZzJfc2VxX21hdHJpeF9leHQpLA0KPj4gKwl9LA0KPj4gKwl7DQo+PiArCS5pZCA9IFY0 TDJfQ0lEX01QRUdfVklERU9fTVBFRzJfUElDX0hEUiwNCj4+ICsJLnNpemUgPSBzaXplb2Yoc3Ry dWN0IHY0bDJfbXBlZ192aWRlb19tcGVnMl9waWNfaGRyKSwNCj4+ICsJfSwNCj4+ICsJey8qIDJu ZCBmaWVsZCBkZWNvZGluZyBvZiBpbnRlcmxhY2VkIHN0cmVhbSAqLw0KPj4gKwkuaWQgPSBWNEwy X0NJRF9NUEVHX1ZJREVPX01QRUcyX1BJQ19IRFIsDQo+PiArCS5zaXplID0gc2l6ZW9mKHN0cnVj dCB2NGwyX21wZWdfdmlkZW9fbXBlZzJfcGljX2hkciksDQo+PiArCX0sDQo+PiArCXsNCj4+ICsJ LmlkID0gVjRMMl9DSURfTVBFR19WSURFT19NUEVHMl9QSUNfRVhULA0KPj4gKwkuc2l6ZSA9IHNp emVvZihzdHJ1Y3QgdjRsMl9tcGVnX3ZpZGVvX21wZWcyX3BpY19leHQpLA0KPj4gKwl9LA0KPj4g Kwl7LyogMm5kIGZpZWxkIGRlY29kaW5nIG9mIGludGVybGFjZWQgc3RyZWFtICovDQo+PiArCS5p ZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzJfUElDX0VYVCwNCj4+ICsJLnNpemUgPSBzaXpl b2Yoc3RydWN0IHY0bDJfbXBlZ192aWRlb19tcGVnMl9waWNfZXh0KSwNCj4+ICsJfSwNCj4+ICt9 Ow0KPj4gKw0KPj4gK2d1aW50OCBnZXRfZXh0ZW5zaW9uX2NvZGUoY29uc3QgR3N0TXBlZ1ZpZGVv UGFja2V0ICpwYWNrZXQpDQo+PiArew0KPj4gKwlHc3RCaXRSZWFkZXIgYnI7DQo+PiArCXVuc2ln bmVkIGNoYXIgZXh0ZW5zaW9uX2NvZGU7DQo+PiArDQo+PiArCWdzdF9iaXRfcmVhZGVyX2luaXQo JmJyLCAmcGFja2V0LT5kYXRhW3BhY2tldC0+b2Zmc2V0XSwNCj4+IHBhY2tldC0+c2l6ZSk7DQo+ PiArCWlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDgoJmJyLCAmZXh0ZW5zaW9uX2Nv ZGUsIDQpKQ0KPj4gew0KPj4gKwkJVjRMMl9MT0dfRVJSKCJmYWlsZWQgdG8gcmVhZCBleHRlbnNp b24gY29kZSIpOw0KPj4gKwkJcmV0dXJuIEdTVF9NUEVHX1ZJREVPX1BBQ0tFVF9OT05FOw0KPj4g Kwl9DQo+PiArDQo+PiArCXJldHVybiBleHRlbnNpb25fY29kZTsNCj4+ICt9DQo+PiArDQo+PiAr dW5zaWduZWQgaW50IG1wZWcyX3BhcnNlX21ldGFzKHN0cnVjdCBjcGFyc2Vyc19hdSAqYXUsDQo+ PiArCQkJICAgICAgIHN0cnVjdCB2NGwyX2V4dF9jb250cm9sICptZXRhcywNCj4+ICsJCQkgICAg ICAgdW5zaWduZWQgaW50ICpuYl9vZl9tZXRhcykNCj4+ICt7DQo+PiArCXVuc2lnbmVkIGNoYXIg ZXh0ZW5zaW9uX2NvZGU7DQo+PiArCWJvb2wgc3RhcnRjb2RlX2ZvdW5kID0gZmFsc2U7DQo+PiAr CWJvb2wgbWV0YV9mb3VuZCA9IGZhbHNlOw0KPj4gKwlHc3RNcGVnVmlkZW9QYWNrZXQgcGFja2V0 X2RhdGE7DQo+PiArCXVuc2lnbmVkIGludCBzbGljZV9pbmRleCA9IDA7DQo+PiArCUdzdE1wZWdW aWRlb1NlcXVlbmNlSGRyIGdzdF9zZXFfaGRyOw0KPj4gKwlHc3RNcGVnVmlkZW9TZXF1ZW5jZUV4 dCBnc3Rfc2VxX2V4dDsNCj4+ICsJR3N0TXBlZ1ZpZGVvU2VxdWVuY2VEaXNwbGF5RXh0IGdzdF9z ZXFfZGlzcGxheV9leHQ7DQo+PiArCUdzdE1wZWdWaWRlb1F1YW50TWF0cml4RXh0IGdzdF9zZXFf bWF0cml4X2V4dDsNCj4+ICsJR3N0TXBlZ1ZpZGVvUGljdHVyZUhkciBnc3RfcGljX2hkcjsNCj4+ ICsJR3N0TXBlZ1ZpZGVvUGljdHVyZUV4dCBnc3RfcGljX2V4dDsNCj4+ICsJc3RydWN0IHY0bDJf bXBlZ192aWRlb19tcGVnMl9zZXFfaGRyICpzZXFfaGRyOw0KPj4gKwlzdHJ1Y3QgdjRsMl9tcGVn X3ZpZGVvX21wZWcyX3NlcV9leHQgKnNlcV9leHQ7DQo+PiArCXN0cnVjdCB2NGwyX21wZWdfdmlk ZW9fbXBlZzJfc2VxX2Rpc3BsYXlfZXh0DQo+PiAqc2VxX2Rpc3BsYXlfZXh0Ow0KPj4gKwlzdHJ1 Y3QgdjRsMl9tcGVnX3ZpZGVvX21wZWcyX3NlcV9tYXRyaXhfZXh0ICpzZXFfbWF0cml4X2V4dDsN Cj4+ICsJc3RydWN0IHY0bDJfbXBlZ192aWRlb19tcGVnMl9waWNfaGRyICpwaWNfaGRyc1syXTsN Cj4+ICsJc3RydWN0IHY0bDJfbXBlZ192aWRlb19tcGVnMl9waWNfZXh0ICpwaWNfZXh0c1syXTsN Cj4+ICsNCj4+ICsJaWYgKCghYXUtPmFkZHIpIHx8ICghYXUtPmJ5dGVzdXNlZCkgfHwgKCFhdS0+ bWV0YXNfc3RvcmUpIHx8DQo+PiAoIW1ldGFzKSkgew0KPj4gKwkJVjRMMl9MT0dfRVJSKCIlczog aW52YWxpZCBpbnB1dDogYXUtPmFkZHI9JXAsIGF1LQ0KPj4+IGJ5dGVzdXNlZD0lZCwgYXUtPm1l dGFzX3N0b3JlPSVwLCBtZXRhcz0lcFxuIiwNCj4+ICsJCQkgICAgIF9fZnVuY19fLCBhdS0+YWRk ciwgYXUtPmJ5dGVzdXNlZCwgYXUtDQo+Pj4gbWV0YXNfc3RvcmUsIG1ldGFzKTsNCj4+ICsJCXJl dHVybiAwOw0KPj4gKwl9DQo+PiArDQo+PiArCXNlcV9oZHIgPSBhdS0+bWV0YXNfc3RvcmVbU0VR X0hEUl0ucHRyOw0KPj4gKwlzZXFfZXh0ID0gYXUtPm1ldGFzX3N0b3JlW1NFUV9FWFRdLnB0cjsN Cj4+ICsJc2VxX2Rpc3BsYXlfZXh0ID0gYXUtPm1ldGFzX3N0b3JlW1NFUV9ESVNQTEFZX0VYVF0u cHRyOw0KPj4gKwlzZXFfbWF0cml4X2V4dCA9IGF1LT5tZXRhc19zdG9yZVtTRVFfTUFUUklYX0VY VF0ucHRyOw0KPj4gKwlwaWNfaGRyc1swXSA9IGF1LT5tZXRhc19zdG9yZVtQSUNfSERSXS5wdHI7 DQo+PiArCXBpY19oZHJzWzFdID0gYXUtPm1ldGFzX3N0b3JlW1BJQ19IRFIgKyAxXS5wdHI7DQo+ PiArCXBpY19leHRzWzBdID0gYXUtPm1ldGFzX3N0b3JlW1BJQ19FWFRdLnB0cjsNCj4+ICsJcGlj X2V4dHNbMV0gPSBhdS0+bWV0YXNfc3RvcmVbUElDX0VYVCArIDFdLnB0cjsNCj4+ICsNCj4+ICsJ bWVtc2V0KCZwYWNrZXRfZGF0YSwgMCwgc2l6ZW9mKHBhY2tldF9kYXRhKSk7DQo+PiArDQo+PiAr CXdoaWxlICgoKHBhY2tldF9kYXRhLm9mZnNldCArIDQpIDwgYXUtPmJ5dGVzdXNlZCkpIHsNCj4+ ICsJCVY0TDJfTE9HKCIlczogcGFyc2luZyBpbnB1dCBmcm9tIG9mZnNldD0lZFxuIiwNCj4+IF9f ZnVuY19fLA0KPj4gKwkJCSBwYWNrZXRfZGF0YS5vZmZzZXQpOw0KPj4gKwkJc3RhcnRjb2RlX2Zv dW5kID0gZ3N0X21wZWdfdmlkZW9fcGFyc2UoJnBhY2tldF9kYXRhLA0KPj4gYXUtPmFkZHIsIGF1 LT5ieXRlc3VzZWQsIHBhY2tldF9kYXRhLm9mZnNldCk7DQo+PiArCQlpZiAoIXN0YXJ0Y29kZV9m b3VuZCkgew0KPj4gKwkJCVY0TDJfTE9HKCIlczogcGFyc2luZyBpcyBvdmVyXG4iLCBfX2Z1bmNf Xyk7DQo+PiArCQkJYnJlYWs7DQo+PiArCQl9DQo+PiArCQkvKg0KPj4gKwkJICogZ3N0X21wZWdf dmlkZW9fcGFyc2UgY29tcHV0ZSBwYWNrZXQgc2l6ZSBieQ0KPj4gc2VhcmNoaW5nIGZvciBuZXh0 DQo+PiArCQkgKiBzdGFydGNvZGUsIGJ1dCBpZiBuZXh0IHN0YXJ0Y29kZSBpcyBub3QgZm91bmQN Cj4+IChlbmQgb2YgYWNjZXNzIHVuaXQpLA0KPj4gKwkJICogcGFja2V0IHNpemUgaXMgc2V0IHRv IC0xLiBXZSBmaXggdGhpcyBoZXJlIGFuZA0KPj4gc2V0IHBhY2tldCBzaXplDQo+PiArCQkgKiB0 byByZW1haW5pbmcgc2l6ZSBpbiB0aGlzIGNhc2UuDQo+PiArCQkgKi8NCj4+ICsJCWlmIChwYWNr ZXRfZGF0YS5zaXplIDwgMCkNCj4+ICsJCQlwYWNrZXRfZGF0YS5zaXplID0gYXUtPmJ5dGVzdXNl ZCAtDQo+PiBwYWNrZXRfZGF0YS5vZmZzZXQ7DQo+PiArDQo+PiArCQlWNEwyX0xPRygiJXM6IGZv dW5kIHN0YXJ0Y29kZSAweCUwMnggQG9mZnNldD0ldSwNCj4+IHNpemU9JWRcbiIsDQo+PiArCQkJ IF9fZnVuY19fLCBwYWNrZXRfZGF0YS50eXBlLA0KPj4gcGFja2V0X2RhdGEub2Zmc2V0IC0gNCwg cGFja2V0X2RhdGEuc2l6ZSk7DQo+PiArDQo+PiArCQlzd2l0Y2ggKHBhY2tldF9kYXRhLnR5cGUp IHsNCj4+ICsJCWNhc2UgR1NUX01QRUdfVklERU9fUEFDS0VUX1BJQ1RVUkU6DQo+PiArCQkJaWYN Cj4+IChnc3RfbXBlZ192aWRlb19wYWNrZXRfcGFyc2VfcGljdHVyZV9oZWFkZXINCj4+ICsJCQkg ICAgKCZwYWNrZXRfZGF0YSwgJmdzdF9waWNfaGRyKSkgew0KPj4gKwkJCQlzdHJ1Y3QgdjRsMl9t cGVnX3ZpZGVvX21wZWcyX3BpY19oZHINCj4+ICpwaWNfaGRyID0gcGljX2hkcnNbc2xpY2VfaW5k ZXhdOw0KPj4gKw0KPj4gKwkJCQltZXRhc1soKm5iX29mX21ldGFzKSsrXSA9IGF1LQ0KPj4+IG1l dGFzX3N0b3JlW1BJQ19IRFIgKyBzbGljZV9pbmRleF07DQo+PiArDQo+PiArCQkJCW1lbXNldChw aWNfaGRyLCAwLA0KPj4gc2l6ZW9mKCpwaWNfaGRyKSk7DQo+PiArCQkJCXBpY19oZHItPnRzbiA9 IGdzdF9waWNfaGRyLnRzbjsNCj4+ICsJCQkJcGljX2hkci0+cGljX3R5cGUgPQ0KPj4gZ3N0X3Bp Y19oZHIucGljX3R5cGU7DQo+PiArCQkJCXBpY19oZHItPmZ1bGxfcGVsX2ZvcndhcmRfdmVjdG9y ID0NCj4+IGdzdF9waWNfaGRyLmZ1bGxfcGVsX2ZvcndhcmRfdmVjdG9yOw0KPj4gKwkJCQlwaWNf aGRyLT5mdWxsX3BlbF9iYWNrd2FyZF92ZWN0b3IgPQ0KPj4gZ3N0X3BpY19oZHIuZnVsbF9wZWxf YmFja3dhcmRfdmVjdG9yOw0KPj4gKwkJCQltZW1jcHkoJnBpY19oZHItPmZfY29kZSwNCj4+ICZn c3RfcGljX2hkci5mX2NvZGUsIHNpemVvZihwaWNfaGRyLT5mX2NvZGUpKTsNCj4+ICsNCj4+ICsJ CQkJVjRMMl9MT0coIiVzOiBQSUNUVVJFIEhFQURFUlxuIiwNCj4+IF9fZnVuY19fKTsNCj4+ICsJ CQkJbWV0YV9mb3VuZCA9IHRydWU7DQo+PiArCQkJfQ0KPj4gKwkJCWJyZWFrOw0KPj4gKw0KPj4g KwkJY2FzZSBHU1RfTVBFR19WSURFT19QQUNLRVRfU0xJQ0VfTUlOOg0KPj4gKwkJCS8qIE5ldyBz bGljZSBlbmNvdW50ZXJlZCAqLw0KPj4gKwkJCWlmIChzbGljZV9pbmRleCA+IDEpIHsNCj4+ICsJ CQkJVjRMMl9MT0dfRVJSKCIlczogbW9yZSB0aGFuIDIgc2xpY2VzDQo+PiBkZXRlY3RlZCBAb2Zm c2V0PSVkLCBpZ25vcmluZyB0aGlzIHNsaWNlLi4uXG4iLA0KPj4gKwkJCQkJICAgICBfX2Z1bmNf XywNCj4+IHBhY2tldF9kYXRhLm9mZnNldCk7DQo+PiArCQkJCWJyZWFrOw0KPj4gKwkJCX0NCj4+ ICsJCQkvKiBzdG9yZSBpdHMgb2Zmc2V0LCBpbmNsdWRpbmcgc3RhcnRjb2RlICovDQo+PiArCQkJ cGljX2hkcnNbc2xpY2VfaW5kZXhdLT5vZmZzZXQgPQ0KPj4gcGFja2V0X2RhdGEub2Zmc2V0IC0g NDsNCj4+ICsJCQlzbGljZV9pbmRleCsrOw0KPj4gKw0KPj4gKwkJCVY0TDJfTE9HKCIlczogU1RB UlQgT0YgU0xJQ0UgQCBvZmZzZXQ9JWRcbiIsDQo+PiBfX2Z1bmNfXywgcGFja2V0X2RhdGEub2Zm c2V0KTsNCj4+ICsJCQltZXRhX2ZvdW5kID0gdHJ1ZTsNCj4+ICsJCQlnb3RvIGRvbmU7DQo+PiAr DQo+PiArCQkJYnJlYWs7DQo+PiArDQo+PiArCQljYXNlIEdTVF9NUEVHX1ZJREVPX1BBQ0tFVF9V U0VSX0RBVEE6DQo+PiArCQkJLyogbm90IGltcGxlbWVudGVkIDogZG8gbm90aGluZyAqLw0KPj4g KwkJCVY0TDJfTE9HKCIlczogVVNFUiBEQVRBLCBub3QgaW1wbGVtZW50ZWRcbiIsDQo+PiBfX2Z1 bmNfXyk7DQo+PiArCQkJYnJlYWs7DQo+PiArDQo+PiArCQljYXNlIEdTVF9NUEVHX1ZJREVPX1BB Q0tFVF9TRVFVRU5DRToNCj4+ICsJCQlpZg0KPj4gKGdzdF9tcGVnX3ZpZGVvX3BhY2tldF9wYXJz ZV9zZXF1ZW5jZV9oZWFkZXINCj4+ICsJCQkgICAgKCZwYWNrZXRfZGF0YSwgJmdzdF9zZXFfaGRy KSkgew0KPj4gKwkJCQltZXRhc1soKm5iX29mX21ldGFzKSsrXSA9IGF1LQ0KPj4+IG1ldGFzX3N0 b3JlW1NFUV9IRFJdOw0KPj4gKw0KPj4gKwkJCQltZW1zZXQoc2VxX2hkciwgMCwNCj4+IHNpemVv Zigqc2VxX2hkcikpOw0KPj4gKwkJCQlzZXFfaGRyLT53aWR0aCA9IGdzdF9zZXFfaGRyLndpZHRo Ow0KPj4gKwkJCQlzZXFfaGRyLT5oZWlnaHQgPQ0KPj4gZ3N0X3NlcV9oZHIuaGVpZ2h0Ow0KPj4g KwkJCQlzZXFfaGRyLT5sb2FkX2ludHJhX3F1YW50aXNlcl9tYXRyaXgNCj4+ID0gMTsNCj4+ICsJ CQkJbWVtY3B5KCZzZXFfaGRyLQ0KPj4+IGludHJhX3F1YW50aXNlcl9tYXRyaXgsDQo+PiArCQkJ CSAgICAgICAmZ3N0X3NlcV9oZHIuaW50cmFfcXVhbnRpemVyXw0KPj4gbWF0cml4LA0KPj4gKwkJ CQkgICAgICAgc2l6ZW9mKHNlcV9oZHItDQo+Pj4gaW50cmFfcXVhbnRpc2VyX21hdHJpeCkpOw0K Pj4gKwkJCQlzZXFfaGRyLQ0KPj4+IGxvYWRfbm9uX2ludHJhX3F1YW50aXNlcl9tYXRyaXggPSAx Ow0KPj4gKwkJCQltZW1jcHkoJnNlcV9oZHItDQo+Pj4gbm9uX2ludHJhX3F1YW50aXNlcl9tYXRy aXgsDQo+PiArCQkJCSAgICAgICAmZ3N0X3NlcV9oZHIubm9uX2ludHJhX3F1YW50aQ0KPj4gemVy X21hdHJpeCwNCj4+ICsJCQkJICAgICAgIHNpemVvZihzZXFfaGRyLQ0KPj4+IG5vbl9pbnRyYV9x dWFudGlzZXJfbWF0cml4KSk7DQo+PiArDQo+PiArCQkJCVY0TDJfTE9HKCIlczogU0VRVUVOQ0Ug SEVBREVSXG4iLA0KPj4gX19mdW5jX18pOw0KPj4gKwkJCQltZXRhX2ZvdW5kID0gdHJ1ZTsNCj4+ ICsJCQl9DQo+PiArCQkJYnJlYWs7DQo+PiArDQo+PiArCQljYXNlIEdTVF9NUEVHX1ZJREVPX1BB Q0tFVF9FWFRFTlNJT046DQo+PiArCQkJZXh0ZW5zaW9uX2NvZGUgPQ0KPj4gZ2V0X2V4dGVuc2lv bl9jb2RlKCZwYWNrZXRfZGF0YSk7DQo+PiArCQkJVjRMMl9MT0coIiVzOiBleHRlbnNpb24gY29k ZT0weCUwMnggIFxuIiwNCj4+IF9fZnVuY19fLCBleHRlbnNpb25fY29kZSk7DQo+PiArDQo+PiAr CQkJc3dpdGNoIChleHRlbnNpb25fY29kZSkgew0KPj4gKwkJCWNhc2UgR1NUX01QRUdfVklERU9f UEFDS0VUX0VYVF9TRVFVRU5DRToNCj4+ICsJCQkJaWYNCj4+IChnc3RfbXBlZ192aWRlb19wYWNr ZXRfcGFyc2Vfc2VxdWVuY2VfZXh0ZW5zaW9uDQo+PiArCQkJCSAgICAoJnBhY2tldF9kYXRhLCAm Z3N0X3NlcV9leHQpKSB7DQo+PiArCQkJCQltZXRhc1soKm5iX29mX21ldGFzKSsrXSA9DQo+PiBh dS0+bWV0YXNfc3RvcmVbU0VRX0VYVF07DQo+PiArDQo+PiArCQkJCQltZW1zZXQoc2VxX2V4dCwg MCwNCj4+IHNpemVvZigqc2VxX2V4dCkpOw0KPj4gKwkJCQkJc2VxX2V4dC0+cHJvZmlsZSA9DQo+ PiBnc3Rfc2VxX2V4dC5wcm9maWxlOw0KPj4gKwkJCQkJc2VxX2V4dC0+bGV2ZWwgPQ0KPj4gZ3N0 X3NlcV9leHQubGV2ZWw7DQo+PiArCQkJCQlzZXFfZXh0LT5wcm9ncmVzc2l2ZSA9DQo+PiBnc3Rf c2VxX2V4dC5wcm9ncmVzc2l2ZTsNCj4+ICsJCQkJCXNlcV9leHQtPmNocm9tYV9mb3JtYXQgPQ0K Pj4gZ3N0X3NlcV9leHQuY2hyb21hX2Zvcm1hdDsNCj4+ICsJCQkJCXNlcV9leHQtPmhvcml6X3Np emVfZXh0ID0NCj4+IGdzdF9zZXFfZXh0Lmhvcml6X3NpemVfZXh0Ow0KPj4gKwkJCQkJc2VxX2V4 dC0+dmVydF9zaXplX2V4dCA9DQo+PiBnc3Rfc2VxX2V4dC52ZXJ0X3NpemVfZXh0Ow0KPj4gKw0K Pj4gKwkJCQkJVjRMMl9MT0coIiVzOiBTRVFVRU5DRQ0KPj4gRVhURU5TSU9OXG4iLCBfX2Z1bmNf Xyk7DQo+PiArCQkJCQltZXRhX2ZvdW5kID0gdHJ1ZTsNCj4+ICsJCQkJfQ0KPj4gKwkJCQlicmVh azsNCj4+ICsNCj4+ICsJCQljYXNlDQo+PiBHU1RfTVBFR19WSURFT19QQUNLRVRfRVhUX1NFUVVF TkNFX0RJU1BMQVk6DQo+PiArCQkJCWlmDQo+PiAoZ3N0X21wZWdfdmlkZW9fcGFja2V0X3BhcnNl X3NlcXVlbmNlX2Rpc3BsYXlfZXh0ZW5zaW9uDQo+PiArCQkJCSAgICAoJnBhY2tldF9kYXRhLA0K Pj4gJmdzdF9zZXFfZGlzcGxheV9leHQpKSB7DQo+PiArCQkJCQltZXRhc1soKm5iX29mX21ldGFz KSsrXSA9DQo+PiBhdS0+bWV0YXNfc3RvcmVbU0VRX0RJU1BMQVlfRVhUXTsNCj4+ICsNCj4+ICsJ CQkJCW1lbXNldChzZXFfZGlzcGxheV9leHQsIDAsDQo+PiBzaXplb2YoKnNlcV9kaXNwbGF5X2V4 dCkpOw0KPj4gKwkJCQkJc2VxX2Rpc3BsYXlfZXh0LQ0KPj4+IHZpZGVvX2Zvcm1hdCA9IGdzdF9z ZXFfZGlzcGxheV9leHQudmlkZW9fZm9ybWF0Ow0KPj4gKwkJCQkJc2VxX2Rpc3BsYXlfZXh0LQ0K Pj4+IGNvbG91cl9kZXNjcmlwdGlvbl9mbGFnID0NCj4+IGdzdF9zZXFfZGlzcGxheV9leHQuY29s b3VyX2Rlc2NyaXB0aW9uX2ZsYWc7DQo+PiArCQkJCQlzZXFfZGlzcGxheV9leHQtDQo+Pj4gY29s b3VyX3ByaW1hcmllcyA9IGdzdF9zZXFfZGlzcGxheV9leHQuY29sb3VyX3ByaW1hcmllczsNCj4+ ICsJCQkJCXNlcV9kaXNwbGF5X2V4dC0NCj4+PiB0cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MgPQ0K Pj4gZ3N0X3NlcV9kaXNwbGF5X2V4dC50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3M7DQo+PiArCQkJ CQlzZXFfZGlzcGxheV9leHQtDQo+Pj4gbWF0cml4X2NvZWZmaWNpZW50cyA9IGdzdF9zZXFfZGlz cGxheV9leHQubWF0cml4X2NvZWZmaWNpZW50czsNCj4+ICsJCQkJCXNlcV9kaXNwbGF5X2V4dC0N Cj4+PiBkaXNwbGF5X2hvcml6b250YWxfc2l6ZSA9DQo+PiBnc3Rfc2VxX2Rpc3BsYXlfZXh0LmRp c3BsYXlfaG9yaXpvbnRhbF9zaXplOw0KPj4gKwkJCQkJc2VxX2Rpc3BsYXlfZXh0LQ0KPj4+IGRp c3BsYXlfdmVydGljYWxfc2l6ZSA9IGdzdF9zZXFfZGlzcGxheV9leHQuZGlzcGxheV92ZXJ0aWNh bF9zaXplOw0KPj4gKw0KPj4gKwkJCQkJVjRMMl9MT0coIiVzOiBTRVFVRU5DRQ0KPj4gRElTUExB WSBFWFRFTlNJT05cbiIsIF9fZnVuY19fKTsNCj4+ICsJCQkJCW1ldGFfZm91bmQgPSB0cnVlOw0K Pj4gKwkJCQl9DQo+PiArCQkJCWJyZWFrOw0KPj4gKw0KPj4gKwkJCWNhc2UgR1NUX01QRUdfVklE RU9fUEFDS0VUX0VYVF9RVUFOVF9NQVRSSVg6DQo+PiArCQkJCWlmDQo+PiAoZ3N0X21wZWdfdmlk ZW9fcGFja2V0X3BhcnNlX3F1YW50X21hdHJpeF9leHRlbnNpb24NCj4+ICsJCQkJICAgICgmcGFj a2V0X2RhdGEsDQo+PiAmZ3N0X3NlcV9tYXRyaXhfZXh0KSkgew0KPj4gKwkJCQkJbWV0YXNbKCpu Yl9vZl9tZXRhcykrK10gPQ0KPj4gYXUtPm1ldGFzX3N0b3JlW1NFUV9ESVNQTEFZX0VYVF07DQo+ PiArDQo+PiArCQkJCQltZW1zZXQoc2VxX21hdHJpeF9leHQsIDAsDQo+PiBzaXplb2YoKnNlcV9t YXRyaXhfZXh0KSk7DQo+PiArCQkJCQlzZXFfbWF0cml4X2V4dC0NCj4+PiBsb2FkX2ludHJhX3F1 YW50aXNlcl9tYXRyaXggPQ0KPj4gKwkJCQkJCWdzdF9zZXFfbWF0cml4X2V4dC5sDQo+PiBvYWRf aW50cmFfcXVhbnRpc2VyX21hdHJpeDsNCj4+ICsJCQkJCW1lbWNweSgmc2VxX21hdHJpeF9leHQt DQo+Pj4gaW50cmFfcXVhbnRpc2VyX21hdHJpeCwNCj4+ICsJCQkJCSAgICAgICAmZ3N0X3NlcV9t YXRyaXhfZXh0LmkNCj4+IG50cmFfcXVhbnRpc2VyX21hdHJpeCwNCj4+ICsJCQkJCSAgICAgICBz aXplb2Yoc2VxX21hdHJpeF9leHQNCj4+IC0+aW50cmFfcXVhbnRpc2VyX21hdHJpeCkpOw0KPj4g KwkJCQkJc2VxX21hdHJpeF9leHQtDQo+Pj4gbG9hZF9ub25faW50cmFfcXVhbnRpc2VyX21hdHJp eCA9DQo+PiArCQkJCQkJZ3N0X3NlcV9tYXRyaXhfZXh0LmwNCj4+IG9hZF9ub25faW50cmFfcXVh bnRpc2VyX21hdHJpeDsNCj4+ICsJCQkJCW1lbWNweSgmc2VxX21hdHJpeF9leHQtDQo+Pj4gbm9u X2ludHJhX3F1YW50aXNlcl9tYXRyaXgsDQo+PiArCQkJCQkgICAgICAgJmdzdF9zZXFfbWF0cml4 X2V4dC5uDQo+PiBvbl9pbnRyYV9xdWFudGlzZXJfbWF0cml4LA0KPj4gKwkJCQkJICAgICAgIHNp emVvZihzZXFfbWF0cml4X2V4dA0KPj4gLT5ub25faW50cmFfcXVhbnRpc2VyX21hdHJpeCkpOw0K Pj4gKwkJCQkJc2VxX21hdHJpeF9leHQtDQo+Pj4gbG9hZF9jaHJvbWFfaW50cmFfcXVhbnRpc2Vy X21hdHJpeCA9DQo+PiArCQkJCQkJZ3N0X3NlcV9tYXRyaXhfZXh0LmwNCj4+IG9hZF9jaHJvbWFf aW50cmFfcXVhbnRpc2VyX21hdHJpeDsNCj4+ICsJCQkJCW1lbWNweSgmc2VxX21hdHJpeF9leHQt DQo+Pj4gY2hyb21hX2ludHJhX3F1YW50aXNlcl9tYXRyaXgsDQo+PiArCQkJCQkgICAgICAgJmdz dF9zZXFfbWF0cml4X2V4dC5jDQo+PiBocm9tYV9pbnRyYV9xdWFudGlzZXJfbWF0cml4LA0KPj4g KwkJCQkJICAgICAgIHNpemVvZihzZXFfbWF0cml4X2V4dA0KPj4gLT5jaHJvbWFfaW50cmFfcXVh bnRpc2VyX21hdHJpeCkpOw0KPj4gKwkJCQkJc2VxX21hdHJpeF9leHQtDQo+Pj4gbG9hZF9jaHJv bWFfbm9uX2ludHJhX3F1YW50aXNlcl9tYXRyaXggPQ0KPj4gKwkJCQkJCWdzdF9zZXFfbWF0cml4 X2V4dC5sDQo+PiBvYWRfY2hyb21hX25vbl9pbnRyYV9xdWFudGlzZXJfbWF0cml4Ow0KPj4gKwkJ CQkJbWVtY3B5KCZzZXFfbWF0cml4X2V4dC0NCj4+PiBjaHJvbWFfbm9uX2ludHJhX3F1YW50aXNl cl9tYXRyaXgsDQo+PiArCQkJCQkgICAgICAgJmdzdF9zZXFfbWF0cml4X2V4dC5jDQo+PiBocm9t YV9ub25faW50cmFfcXVhbnRpc2VyX21hdHJpeCwNCj4+ICsJCQkJCSAgICAgICBzaXplb2Yoc2Vx X21hdHJpeF9leHQNCj4+IC0+Y2hyb21hX25vbl9pbnRyYV9xdWFudGlzZXJfbWF0cml4KSk7DQo+ PiArDQo+PiArCQkJCQlWNEwyX0xPRygiJXM6IFNFUVVFTkNFDQo+PiBNQVRSSVggRVhURU5TSU9O XG4iLCBfX2Z1bmNfXyk7DQo+PiArCQkJCQltZXRhX2ZvdW5kID0gdHJ1ZTsNCj4+ICsJCQkJfQ0K Pj4gKwkJCQlicmVhazsNCj4+ICsNCj4+ICsJCQljYXNlDQo+PiBHU1RfTVBFR19WSURFT19QQUNL RVRfRVhUX1NFUVVFTkNFX1NDQUxBQkxFOg0KPj4gKwkJCQkvKiBub3QgaW1wbGVtZW50ZWQgOiBk byBub3RoaW5nICovDQo+PiArCQkJCVY0TDJfTE9HKCIlczogU0VRVUVOQ0UgU0NBTEFCTEUNCj4+ IEVYVEVOU0lPTiwgbm90IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNfXyk7DQo+PiArCQkJCWJyZWFr Ow0KPj4gKw0KPj4gKwkJCWNhc2UgR1NUX01QRUdfVklERU9fUEFDS0VUX0VYVF9QSUNUVVJFOg0K Pj4gKwkJCQlpZg0KPj4gKGdzdF9tcGVnX3ZpZGVvX3BhY2tldF9wYXJzZV9waWN0dXJlX2V4dGVu c2lvbg0KPj4gKwkJCQkgICAgKCZwYWNrZXRfZGF0YSwgJmdzdF9waWNfZXh0KSkgew0KPj4gKwkJ CQkJc3RydWN0DQo+PiB2NGwyX21wZWdfdmlkZW9fbXBlZzJfcGljX2V4dCAqcGljX2V4dCA9IHBp Y19leHRzW3NsaWNlX2luZGV4XTsNCj4+ICsNCj4+ICsJCQkJCW1ldGFzWygqbmJfb2ZfbWV0YXMp KytdID0NCj4+IGF1LT5tZXRhc19zdG9yZVtQSUNfRVhUICsgc2xpY2VfaW5kZXhdOw0KPj4gKw0K Pj4gKwkJCQkJbWVtc2V0KHBpY19leHQsIDAsDQo+PiBzaXplb2YoKnBpY19leHQpKTsNCj4+ICsJ CQkJCW1lbWNweSgmcGljX2V4dC0+Zl9jb2RlLA0KPj4gJmdzdF9waWNfZXh0LmZfY29kZSwgc2l6 ZW9mKHBpY19leHQtPmZfY29kZSkpOw0KPj4gKwkJCQkJcGljX2V4dC0+aW50cmFfZGNfcHJlY2lz aW9uDQo+PiA9IGdzdF9waWNfZXh0LmludHJhX2RjX3ByZWNpc2lvbjsNCj4+ICsJCQkJCXBpY19l eHQtPnBpY3R1cmVfc3RydWN0dXJlID0NCj4+IGdzdF9waWNfZXh0LnBpY3R1cmVfc3RydWN0dXJl Ow0KPj4gKwkJCQkJcGljX2V4dC0+dG9wX2ZpZWxkX2ZpcnN0ID0NCj4+IGdzdF9waWNfZXh0LnRv cF9maWVsZF9maXJzdDsNCj4+ICsJCQkJCXBpY19leHQtDQo+Pj4gZnJhbWVfcHJlZF9mcmFtZV9k Y3QgPSBnc3RfcGljX2V4dC5mcmFtZV9wcmVkX2ZyYW1lX2RjdDsNCj4+ICsJCQkJCXBpY19leHQt DQo+Pj4gY29uY2VhbG1lbnRfbW90aW9uX3ZlY3RvcnMgPSBnc3RfcGljX2V4dC5jb25jZWFsbWVu dF9tb3Rpb25fdmVjdG9yczsNCj4+ICsJCQkJCXBpY19leHQtPnFfc2NhbGVfdHlwZSA9DQo+PiBn c3RfcGljX2V4dC5xX3NjYWxlX3R5cGU7DQo+PiArCQkJCQlwaWNfZXh0LT5pbnRyYV92bGNfZm9y bWF0ID0NCj4+IGdzdF9waWNfZXh0LmludHJhX3ZsY19mb3JtYXQ7DQo+PiArCQkJCQlwaWNfZXh0 LT5hbHRlcm5hdGVfc2NhbiA9DQo+PiBnc3RfcGljX2V4dC5hbHRlcm5hdGVfc2NhbjsNCj4+ICsJ CQkJCXBpY19leHQtPnJlcGVhdF9maXJzdF9maWVsZA0KPj4gPSBnc3RfcGljX2V4dC5yZXBlYXRf Zmlyc3RfZmllbGQ7DQo+PiArCQkJCQlwaWNfZXh0LT5jaHJvbWFfNDIwX3R5cGUgPQ0KPj4gZ3N0 X3BpY19leHQuY2hyb21hXzQyMF90eXBlOw0KPj4gKwkJCQkJcGljX2V4dC0+cHJvZ3Jlc3NpdmVf ZnJhbWUgPQ0KPj4gZ3N0X3BpY19leHQucHJvZ3Jlc3NpdmVfZnJhbWU7DQo+PiArCQkJCQlwaWNf ZXh0LT5jb21wb3NpdGVfZGlzcGxheSA9DQo+PiBnc3RfcGljX2V4dC5jb21wb3NpdGVfZGlzcGxh eTsNCj4+ICsJCQkJCXBpY19leHQtPnZfYXhpcyA9DQo+PiBnc3RfcGljX2V4dC52X2F4aXM7DQo+ PiArCQkJCQlwaWNfZXh0LT5maWVsZF9zZXF1ZW5jZSA9DQo+PiBnc3RfcGljX2V4dC5maWVsZF9z ZXF1ZW5jZTsNCj4+ICsJCQkJCXBpY19leHQtPnN1Yl9jYXJyaWVyID0NCj4+IGdzdF9waWNfZXh0 LnN1Yl9jYXJyaWVyOw0KPj4gKwkJCQkJcGljX2V4dC0+YnVyc3RfYW1wbGl0dWRlID0NCj4+IGdz dF9waWNfZXh0LmJ1cnN0X2FtcGxpdHVkZTsNCj4+ICsJCQkJCXBpY19leHQtPnN1Yl9jYXJyaWVy X3BoYXNlID0NCj4+IGdzdF9waWNfZXh0LnN1Yl9jYXJyaWVyX3BoYXNlOw0KPj4gKw0KPj4gKwkJ CQkJVjRMMl9MT0coIiVzOiBQSUNUVVJFDQo+PiBFWFRFTlNJT04sIHRvcF9maWVsZF9maXJzdD0l ZFxuIiwNCj4+ICsJCQkJCQkgX19mdW5jX18sDQo+PiBwaWNfZXh0c1tzbGljZV9pbmRleF0tPnRv cF9maWVsZF9maXJzdCk7DQo+PiArCQkJCQltZXRhX2ZvdW5kID0gdHJ1ZTsNCj4+ICsJCQkJfQ0K Pj4gKwkJCQlicmVhazsNCj4+ICsNCj4+ICsJCQlkZWZhdWx0Og0KPj4gKwkJCQlicmVhazsNCj4+ ICsJCQl9DQo+PiArCQkJYnJlYWs7DQo+PiArDQo+PiArCQljYXNlIEdTVF9NUEVHX1ZJREVPX1BB Q0tFVF9TRVFVRU5DRV9FTkQ6DQo+PiArCQkJVjRMMl9MT0coIiVzOiBFTkQgT0YgUEFDS0VUIFNF UVVFTkNFXG4iLA0KPj4gX19mdW5jX18pOw0KPj4gKwkJCWJyZWFrOw0KPj4gKw0KPj4gKwkJY2Fz ZSBHU1RfTVBFR19WSURFT19QQUNLRVRfR09QOg0KPj4gKwkJCVY0TDJfTE9HKCIlczogR09QXG4i LCBfX2Z1bmNfXyk7DQo+PiArCQkJYnJlYWs7DQo+PiArDQo+PiArCQlkZWZhdWx0Og0KPj4gKwkJ CVY0TDJfTE9HKCIlczogdW5rbm93bi91bnN1cHBvcnRlZCBoZWFkZXINCj4+ICUwMnhcbiIsDQo+ PiArCQkJCSBfX2Z1bmNfXywgcGFja2V0X2RhdGEudHlwZSk7DQo+PiArCQkJYnJlYWs7DQo+PiAr CQl9DQo+PiArCX0NCj4+ICsNCj4+ICtkb25lOg0KPj4gKwlyZXR1cm4gbWV0YV9mb3VuZDsNCj4+ ICt9DQo+PiArDQo+PiArY29uc3Qgc3RydWN0IG1ldGFfcGFyc2VyIG1wZWcycGFyc2UgPSB7DQo+ PiArCS5uYW1lID0gIm1wZWcyIiwNCj4+ICsJLnN0cmVhbWZvcm1hdCA9IFY0TDJfUElYX0ZNVF9N UEVHMiwNCj4+ICsJLnBhcnNlZGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHMl9QQVJTRUQsDQo+ PiArCS5uYl9vZl9tZXRhcyA9IHNpemVvZihtcGVnMl9tZXRhc19zdG9yZSkgLw0KPj4gc2l6ZW9m KG1wZWcyX21ldGFzX3N0b3JlWzBdKSwNCj4+ICsJLm1ldGFzX3N0b3JlID0gbXBlZzJfbWV0YXNf c3RvcmUsDQo+PiArCS5wYXJzZV9tZXRhcyA9IG1wZWcyX3BhcnNlX21ldGFzLA0KPj4gK307DQo+ PiArDQo+PiArY29uc3Qgc3RydWN0IG1ldGFfcGFyc2VyIG1wZWcxcGFyc2UgPSB7DQo+PiArCS5u YW1lID0gIm1wZWcxIiwNCj4+ICsJLnN0cmVhbWZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHMSwN Cj4+ICsJLnBhcnNlZGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHMV9QQVJTRUQsDQo+PiArCS5u Yl9vZl9tZXRhcyA9IHNpemVvZihtcGVnMl9tZXRhc19zdG9yZSkgLw0KPj4gc2l6ZW9mKG1wZWcy X21ldGFzX3N0b3JlWzBdKSwNCj4+ICsJLm1ldGFzX3N0b3JlID0gbXBlZzJfbWV0YXNfc3RvcmUs DQo+PiArCS5wYXJzZV9tZXRhcyA9IG1wZWcyX3BhcnNlX21ldGFzLA0KPj4gK307DQo+PiBkaWZm IC0tZ2l0IGEvbGliL2xpYnY0bC1jb2RlY3BhcnNlcnMvbGlidjRsLWNwYXJzZXJzLmMgYi9saWIv bGlidjRsLQ0KPj4gY29kZWNwYXJzZXJzL2xpYnY0bC1jcGFyc2Vycy5jDQo+PiBpbmRleCBhZjU5 ZjUwLi40ZThhZTMxIDEwMDY0NA0KPj4gLS0tIGEvbGliL2xpYnY0bC1jb2RlY3BhcnNlcnMvbGli djRsLWNwYXJzZXJzLmMNCj4+ICsrKyBiL2xpYi9saWJ2NGwtY29kZWNwYXJzZXJzL2xpYnY0bC1j cGFyc2Vycy5jDQo+PiBAQCAtNDYsNyArNDYsMTEgQEANCj4+ICAjZW5kaWYNCj4+DQo+PiAgLyog YXZhaWxhYmxlIHBhcnNlcnMgKi8NCj4+ICtleHRlcm4gY29uc3Qgc3RydWN0IG1ldGFfcGFyc2Vy IG1wZWcxcGFyc2U7DQo+PiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBtZXRhX3BhcnNlciBtcGVnMnBh cnNlOw0KPj4gIGNvbnN0IHN0cnVjdCBtZXRhX3BhcnNlciAqcGFyc2Vyc1tdID0gew0KPj4gKwkm bXBlZzFwYXJzZSwNCj4+ICsJJm1wZWcycGFyc2UsDQo+PiAgfTsNCj4+DQo+PiAgc3RhdGljIHZv aWQgKnBsdWdpbl9pbml0KGludCBmZCk=