From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 712A31B784 for ; Wed, 31 Jan 2018 14:38:36 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 31 Jan 2018 05:38:35 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,440,1511856000"; d="scan'208";a="23850627" Received: from irsmsx105.ger.corp.intel.com ([163.33.3.28]) by FMSMGA003.fm.intel.com with ESMTP; 31 Jan 2018 05:38:34 -0800 Received: from irsmsx103.ger.corp.intel.com ([169.254.3.197]) by irsmsx105.ger.corp.intel.com ([169.254.7.221]) with mapi id 14.03.0319.002; Wed, 31 Jan 2018 13:38:33 +0000 From: "Ananyev, Konstantin" To: Chas Williams <3chas3@gmail.com>, "dev@dpdk.org" CC: "Lu, Wenzhuo" Thread-Topic: [PATCH] net/ixgbe: fix reconfiguration of rx queues Thread-Index: AQHTmRTYE/Umvo2hr02H2/aHNSRnBKOLCIkQgAAHiICAABD7QIAAATbggAAJ/ACAATFAgIAAADHAgAA7U4CAAUNsoIAAAHWg Date: Wed, 31 Jan 2018 13:38:33 +0000 Message-ID: <2601191342CEEE43887BDE71AB97725890566389@IRSMSX103.ger.corp.intel.com> References: <20180129152115.26359-1-3chas3@gmail.com> <2601191342CEEE43887BDE71AB977258905653D7@IRSMSX103.ger.corp.intel.com> <2601191342CEEE43887BDE71AB97725890565545@IRSMSX103.ger.corp.intel.com> <2601191342CEEE43887BDE71AB97725890565566@IRSMSX103.ger.corp.intel.com> <2601191342CEEE43887BDE71AB97725890565AC3@IRSMSX103.ger.corp.intel.com> <2601191342CEEE43887BDE71AB97725890565AE3@IRSMSX103.ger.corp.intel.com> <2601191342CEEE43887BDE71AB977258905662FE@IRSMSX103.ger.corp.intel.com> In-Reply-To: <2601191342CEEE43887BDE71AB977258905662FE@IRSMSX103.ger.corp.intel.com> Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYmUzYTAxOTktYWNmYi00MGIwLWI5YTktNDA4OTRiMDYwNzQ3IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6ImVNOEhtXC9VXC9qQ2llbzFQVE1wKzAzdXRXZlpNUzRjcjZyb0JSMzN5dnA1cz0ifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [163.33.239.182] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH] net/ixgbe: fix reconfiguration of rx queues X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 31 Jan 2018 13:38:37 -0000 DQo+IA0KPiANCj4gPiA+ID4NCj4gPiA+ID4gRnJvbTogIkNoYXJsZXMgKENoYXMpIFdpbGxpYW1z IiA8Y2hhczNAYXR0LmNvbT4NCj4gPiA+ID4NCj4gPiA+ID4gLmRldl9jb25maWd1cmUoKSBtYXkg YmUgY2FsbGVkIGFnYWluIGFmdGVyIFJYIHF1ZXVlcyBoYXZlIGJlZW4gc2V0dXAuDQo+ID4gPiA+ IFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgY2xlYXJpbmcgd2hhdGV2ZXIgc2V0dGluZyB0aGUgUlgg cXVldWVzIG1hZGUgZm9yDQo+ID4gPiA+IHJ4X2J1bGtfYWxsb2NfYWxsb3dlZCBvciByeF92ZWNf YWxsb3dlZC7CoCBPbmx5IHJlc2V0IHRoaXMgY29uZmlndXJhdGlvbg0KPiA+ID4gPiBpcyB0aGVy ZSBhcmVuJ3QgYW55IGN1cnJlbnRseSBhbGxvY2F0ZWQgcXVldWVzLg0KPiA+ID4gPg0KPiA+ID4g PiBGaXhlczogMDFmYTFkNjIxNWZhICgiaXhnYmU6IHVuaWZ5IFJ4IHNldHVwIikNCj4gPiA+ID4N Cj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogQ2hhcyBXaWxsaWFtcyA8Y2hhczNAYXR0LmNvbT4NCj4g PiA+ID4gLS0tDQo+ID4gPiA+wqAgZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRoZGV2LmMgfCAx OCArKysrKysrKysrKysrKysrLS0NCj4gPiA+ID7CoCAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0 aW9ucygrKSwgMiBkZWxldGlvbnMoLSkNCj4gPiA+ID4NCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aGRldi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVf ZXRoZGV2LmMNCj4gPiA+ID4gaW5kZXggMzdlYjY2OC4uYjM5MjQ5YSAxMDA2NDQNCj4gPiA+ID4g LS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRoZGV2LmMNCj4gPiA+ID4gKysrIGIvZHJp dmVycy9uZXQvaXhnYmUvaXhnYmVfZXRoZGV2LmMNCj4gPiA+ID4gQEAgLTIzNDgsNiArMjM0OCw3 IEBAIGl4Z2JlX2Rldl9jb25maWd1cmUoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpDQo+ID4gPiA+ wqAgwqAgwqAgwqBzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9DQo+ID4gPiA+wqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKilkZXYtPmRhdGEtPmRldl9w cml2YXRlOw0KPiA+ID4gPsKgIMKgIMKgIMKgaW50IHJldDsNCj4gPiA+ID4gK8KgIMKgIMKgdWlu dDE2X3QgaTsNCj4gPiA+ID4NCj4gPiA+ID7CoCDCoCDCoCDCoFBNRF9JTklUX0ZVTkNfVFJBQ0Uo KTsNCj4gPiA+ID7CoCDCoCDCoCDCoC8qIG11bHRpcGUgcXVldWUgbW9kZSBjaGVja2luZyAqLw0K PiA+ID4gPiBAQCAtMjM2MywxMSArMjM2NCwxNyBAQCBpeGdiZV9kZXZfY29uZmlndXJlKHN0cnVj dCBydGVfZXRoX2RldiAqZGV2KQ0KPiA+ID4gPg0KPiA+ID4gPsKgIMKgIMKgIMKgLyoNCj4gPiA+ ID7CoCDCoCDCoCDCoCAqIEluaXRpYWxpemUgdG8gVFJVRS4gSWYgYW55IG9mIFJ4IHF1ZXVlcyBk b2Vzbid0IG1lZXQgdGhlIGJ1bGsNCj4gPiA+ID4gLcKgIMKgIMKgICogYWxsb2NhdGlvbiBvciB2 ZWN0b3IgUnggcHJlY29uZGl0aW9ucyB3ZSB3aWxsIHJlc2V0IGl0Lg0KPiA+ID4gPiArwqAgwqAg wqAgKiBhbGxvY2F0aW9uIG9yIHZlY3RvciBSeCBwcmVjb25kaXRpb25zIHdlIHdpbGwgcmVzZXQg aXQuIFdlDQo+ID4gPiA+ICvCoCDCoCDCoCAqIGNhbiBvbmx5IGRvIHRoaXMgaXMgdGhlcmUgYXJl bid0IGFueSBleGlzdGluZyBSWCBxdWV1ZXMuDQo+ID4gPiA+wqAgwqAgwqAgwqAgKi8NCj4gPiA+ ID4gK8KgIMKgIMKgZm9yIChpID0gMDsgaSA8IGRldi0+ZGF0YS0+bmJfcnhfcXVldWVzOyBpKysp IHsNCj4gPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgaWYgKGRldi0+ZGF0YS0+cnhfcXVldWVz W2ldKQ0KPiA+ID4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBnb3RvIG91dDsN Cj4gPiA+ID4gK8KgIMKgIMKgfQ0KPiA+ID4gSSBkb24ndCBzZWUgd2h5IHRoaXMgaXMgbmVlZGVk Lg0KPiA+ID4gSXQgc3VyZWx5IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWNvbmZpZ3VyZSBkZXZp Y2Ugd2l0aCBkaWZmZXJlbnQNCj4gPiA+IG51bWJlciBvZiBxdWV1ZXMuDQo+ID4gPiBLb25zdGFu dGluDQo+ID4gPg0KPiA+ID4gWWVzLCB5b3UgY2FuIGFkZCBuZXcgcXVldWVzIGJ1dCB5b3Ugc2hv dWxkbid0IHJlc2V0IHRoZSBidWxrIGFuZCB2ZWMgc2V0dGluZ3MNCj4gPiA+IHRoYXQgaGF2ZSBh bHJlYWR5IGJlZW4gY2hvc2VuIGJ5IHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBxdWV1ZXMuDQo+ ID4gV2h5IGlzIHRoYXQ/IE1pZ2h0IGJlIGluIG5ldyBxdWV1ZSBzZXR1cCB1c2VyIHdpbGwgY2hh bmdlIHNldHRpbmdzPw0KPiA+DQo+ID4gVGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgdGhhdCB0aGUg dXNlciBhbGxvY2F0ZXMgYWxsIHRoZSBSWCBxdWV1ZXMgaW4gdGhlIHNhbWUgd2F5Lg0KPiA+IFNv bWUgY291bGQgaGF2ZSBhIGRpZmZlcmVudCBudW1iZXJzIG9mIGRlc2NzIHdoaWNoIGlzIG9uZSBv ZiB0aGUgY2hlY2tzIGluDQo+ID4gY2hlY2tfcnhfYnVyc3RfYnVsa19hbGxvY19wcmVjb25kaXRp b25zKCkNCj4gRXhhY3RseS4gVGhhdCdzwqAgd2h5IGFmdGVyIGRldl9jb25maWd1cmUoKSB1c2Vy IGhhcyB0byBjYWxsIHF1ZXVlX3NldHVwKCkgZm9yICphbGwqDQo+IHF1ZXVlcyBoZSBwbGFucyB0 byB1c2UuDQo+IA0KPiBXaGVyZSB0aGUgQVBJIG9yIGRvY3VtZW50YXRpb24gZG9lcyBpdCBzYXkg dGhhdCB0aGlzIGlzIG5lY2Vzc2FyeT/CoCBJZiB0aGlzIHdhcyBhIHJlcXVpcmVtZW50DQo+IHRo ZW4gcnRlX2V0aF9kZXZfY29uZmlndXJlKCkgc2hvdWxkIGRyb3AgZXZlcnkgYWxsb2NhdGVkIHF1 ZXVlLsKgIFNpbmNlIGl0IGRvZXNuJ3QgZG8gdGhpcw0KPiBJIGNhbiBvbmx5IGFzc3VtZSB0aGF0 IHlvdSBhcmUgYWxsb3dlZCB0byBrZWVwIHVzaW5nIHF1ZXVlcyBhZnRlciBjYWxsaW5nIHJ0ZV9l dGhfZGV2X2NvbmZpZ3VyZSgpDQo+IHdpdGhvdXQgaGF2aW5nIHRvIHNldCB0aGVtIHVwIGFnYWlu Lg0KPiANCj4gDQo+ID4NCj4gPg0KPiA+DQo+ID4gPiBJZiB0aG9zZSBxdWV1ZXMNCj4gPiA+IHNl dCByeF9idWxrX2FsbG9jX2FsbG93ZWQgdG8gYmUgZmFsc2UsIHRoZW4gdGhpcyBpcyBnb2luZyB0 byBjYXVzZSBhbiBpc3N1ZSB3aXRoIHF1ZXVlDQo+ID4gPiByZWxlYXNlIGxhdGVyIG9uLg0KPiA+ DQo+ID4gQ291bGQgeW91IGJlIGEgYml0IG1vcmUgc3BlY2lmaWMgaGVyZToNCj4gPiBXaGF0IHlv dSB0aGluayB3aWxsIGJlIGJyb2tlbiBpbiBpeGdiZV9yeF9xdWV1ZV9yZWxlYXNlKCkgaW4gdGhh dCBjYXNlPw0KPiA+DQo+ID4gU29ycnksIEkgbWlzcG9rZS7CoCBJdCdzIHRoaXMgZnVuY3Rpb24s wqBpeGdiZV9yZXNldF9yeF9xdWV1ZSgpLA0KPiA+DQo+ID4gwqAgwqAgwqAgwqAgLyoNCj4gPiDC oCDCoCDCoCDCoCDCoCogQnkgZGVmYXVsdCwgdGhlIFJ4IHF1ZXVlIHNldHVwIGZ1bmN0aW9uIGFs bG9jYXRlcyBlbm91Z2ggbWVtb3J5IGZvcg0KPiA+IMKgIMKgIMKgIMKgIMKgKiBJWEdCRV9NQVhf UklOR19ERVNDLsKgIFRoZSBSeCBCdXJzdCBidWxrIGFsbG9jYXRpb24gZnVuY3Rpb24gcmVxdWly ZXMNCj4gPiDCoCDCoCDCoCDCoCDCoCogZXh0cmEgbWVtb3J5IGF0IHRoZSBlbmQgb2YgdGhlIGRl c2NyaXB0b3IgcmluZyB0byBiZSB6ZXJvJ2Qgb3V0Lg0KPiA+IMKgIMKgIMKgIMKgIMKgKi8NCj4g PiDCoCDCoCDCoCDCoCBpZiAoYWRhcHRlci0+cnhfYnVsa19hbGxvY19hbGxvd2VkKQ0KPiA+IMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8qIHplcm8gb3V0IGV4dHJhIG1lbW9yeSAqLw0KPiA+IMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlbiArPSBSVEVfUE1EX0lYR0JFX1JYX01BWF9CVVJTVDsN Cj4gPg0KPiA+IMKgIMKgIMKgIMKgIC8qDQo+ID4gwqAgwqAgwqAgwqAgwqAqIFplcm8gb3V0IEhX IHJpbmcgbWVtb3J5LiBaZXJvIG91dCBleHRyYSBtZW1vcnkgYXQgdGhlIGVuZCBvZg0KPiA+IMKg IMKgIMKgIMKgIMKgKiB0aGUgSC9XIHJpbmcgc28gbG9vay1haGVhZCBsb2dpYyBpbiBSeCBCdXJz dCBidWxrIGFsbG9jIGZ1bmN0aW9uDQo+ID4gwqAgwqAgwqAgwqAgwqAqIHJlYWRzIGV4dHJhIG1l bW9yeSBhcyB6ZXJvcy4NCj4gPiDCoCDCoCDCoCDCoCDCoCovDQo+ID4gwqAgwqAgwqAgwqAgZm9y IChpID0gMDsgaSA8IGxlbjsgaSsrKSB7DQo+ID4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcnhx LT5yeF9yaW5nW2ldID0gemVyb2VkX2Rlc2M7DQo+ID4gwqAgwqAgwqAgwqAgfQ0KPiA+DQo+ID4g U28geW91IHBvdGVudGlhbGx5IHdyaXRlIHBhc3QgdGhlIHJ4X3JpbmdbXSB5b3UgYWxsb2NhdGVk Lg0KPiANCj4gV2UgYWx3YXlzIGFsbG9jYXRlIHJ4X3JpbmdbXSB0byBtYXhpbXVtIHBvc3NpYmxl IHNpemUgcGx1cyBzcGFjZSBmb3IgZmFrZSBkZXNjcmlwdG9yczoNCj4gDQo+IGRyaXZlcnMvbmV0 L2l4Z2JlL2l4Z2JlX3J4dHguaDoNCj4gI2RlZmluZSBSWF9SSU5HX1NaICgoSVhHQkVfTUFYX1JJ TkdfREVTQyArIFJURV9QTURfSVhHQkVfUlhfTUFYX0JVUlNUKSAqIFwNCj4gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjKSkNCj4gDQo+ IHRoZW4gYXQgaXhnYmVfZGV2X3J4X3F1ZXVlX3NldHVwKC4uLik6DQo+IA0KPiDCoCAvKg0KPiDC oCDCoCAqIEFsbG9jYXRlIFJYIHJpbmcgaGFyZHdhcmUgZGVzY3JpcHRvcnMuIEEgbWVtem9uZSBs YXJnZSBlbm91Z2ggdG8NCj4gwqAgwqAgKiBoYW5kbGUgdGhlIG1heGltdW0gcmluZyBzaXplIGlz IGFsbG9jYXRlZCBpbiBvcmRlciB0byBhbGxvdyBmb3INCj4gwqAgwqAgKiByZXNpemluZyBpbiBs YXRlciBjYWxscyB0byB0aGUgcXVldWUgc2V0dXAgZnVuY3Rpb24uDQo+IMKgIMKgICovDQo+IMKg IMKgIHJ6ID0gcnRlX2V0aF9kbWFfem9uZV9yZXNlcnZlKGRldiwgInJ4X3JpbmciLCBxdWV1ZV9p ZHgsDQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIFJYX1JJTkdfU1osIElYR0JFX0FMSUdOLCBzb2NrZXRfaWQpOw0KPiDCoCDCoCAuLi4N Cj4gwqAgwqAgcnhxLT5yeF9yaW5nID0gKHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICopIHJ6LT5h ZGRyOw0KPiANCj4gV2hhdCBhYm91dCBoZXJlPw0KPiANCj4gwqAgwqAgwqAgwqAgbGVuID0gbmJf ZGVzYzsNCj4gwqAgwqAgwqAgwqAgaWYgKGFkYXB0ZXItPnJ4X2J1bGtfYWxsb2NfYWxsb3dlZCkN Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVuICs9IFJURV9QTURfSVhHQkVfUlhfTUFYX0JV UlNUOw0KPiANCj4gwqAgwqAgwqAgwqAgcnhxLT5zd19yaW5nID0gcnRlX3ptYWxsb2Nfc29ja2V0 KCJyeHEtPnN3X3JpbmciLA0KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzaXplb2Yoc3RydWN0IGl4Z2JlX3J4X2VudHJ5KSAq IGxlbiwNCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgUlRFX0NBQ0hFX0xJTkVfU0laRSwgc29ja2V0X2lkKTsNCj4gDQo+IFRo aXMgaXMgbGF0ZXIgd2Fsa2VkIGFuZCByZXNldCBpbsKgaXhnYmVfcmVzZXRfcnhfcXVldWUoKQ0K PiANCj4gwqAgwqAgwqAgwqAgaWYgKGFkYXB0ZXItPnJ4X2J1bGtfYWxsb2NfYWxsb3dlZCkNCj4g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyogemVybyBvdXQgZXh0cmEgbWVtb3J5ICovDQo+IMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlbiArPSBSVEVfUE1EX0lYR0JFX1JYX01BWF9CVVJTVDsN Cj4gDQo+IMKgIMKgIMKgIMKgIC8qDQo+IMKgIMKgIMKgIMKgIMKgKiBaZXJvIG91dCBIVyByaW5n IG1lbW9yeS4gWmVybyBvdXQgZXh0cmEgbWVtb3J5IGF0IHRoZSBlbmQgb2YNCj4gwqAgwqAgwqAg wqAgwqAqIHRoZSBIL1cgcmluZyBzbyBsb29rLWFoZWFkIGxvZ2ljIGluIFJ4IEJ1cnN0IGJ1bGsg YWxsb2MgZnVuY3Rpb24NCj4gwqAgwqAgwqAgwqAgwqAqIHJlYWRzIGV4dHJhIG1lbW9yeSBhcyB6 ZXJvcy4NCj4gwqAgwqAgwqAgwqAgwqAqLw0KPiDCoCDCoCDCoCDCoCBmb3IgKGkgPSAwOyBpIDwg bGVuOyBpKyspIHsNCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcnhxLT5yeF9yaW5nW2ldID0g emVyb2VkX2Rlc2M7DQo+IMKgIMKgIMKgIMKgIH0NCj4gDQo+IMKgIMKgIMKgIMKgIC8qDQo+IMKg IMKgIMKgIMKgIMKgKiBpbml0aWFsaXplIGV4dHJhIHNvZnR3YXJlIHJpbmcgZW50cmllcy4gU3Bh Y2UgZm9yIHRoZXNlIGV4dHJhDQo+IMKgIMKgIMKgIMKgIMKgKiBlbnRyaWVzIGlzIGFsd2F5cyBh bGxvY2F0ZWQNCj4gwqAgwqAgwqAgwqAgwqAqLw0KPiDCoCDCoCDCoCDCoCBtZW1zZXQoJnJ4cS0+ ZmFrZV9tYnVmLCAweDAsIHNpemVvZihyeHEtPmZha2VfbWJ1ZikpOw0KPiDCoCDCoCDCoCDCoCBm b3IgKGkgPSByeHEtPm5iX3J4X2Rlc2M7IGkgPCBsZW47ICsraSkgew0KPiDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCByeHEtPnN3X3JpbmdbaV0ubWJ1ZiA9ICZyeHEtPmZha2VfbWJ1ZjsNCj4gwqAg wqAgwqAgwqAgfQ0KPiANCg0KQXMgSSBjYW4gc2VlLCByaWdodCBub3cgd2VsbCBiZWhhdmluZyBh cHBsaWNhdGlvbnMNCihvbmUgdGhhdCBhbHdheXMgY2FsbCBxdWV1ZV9zZXR1cCgpIGFmdGVyIGRl dl9jb25maWd1cmUpDQp3b3VsZG4ndCBiZSBhZmZlY3RlZC4NCkJ1dCB5b3UgcmlnaHQgLSBpdCBp cyBhIHBvdGVudGlhbCBpc3N1ZSBhbmQgYmV0dGVyIGJlIGFkZHJlc3NlZC4NClRob3VnaCB0byBm aXggaXQgYWxsIHdlIG5lZWQgaXMgZWl0aGVyIGFsd2F5cyBhbGxvY2F0ZSBzcGFjZSBmb3IgZmFr ZV9tYnVmcyBpbnNpZGUgc3dfcmluZywNCm9yIGp1c3Qgc3RvcmUgbnVtYmVyIG9mIGZha2UgbWJ1 ZnMgaW5zaWRlIHJ4cS4NCg0KPiBDbGVhcmx5LMKgcnhfYnVsa19hbGxvY19hbGxvd2VkIG11c3Qg cmVtYWluIGNvbnNpc3RlbnQgaGVyZS4NCg0KSSBkb24ndCB0aGluayBzbywgc2VlIGFib3ZlLg0K DQo+IA0KPiANCj4gDQo+IA0KPiA+DQo+ID4gWW91IGNhbid0IGNoYW5nZcKgcnhfYnVsa19hbGxv Y19hbGxvd2VkIG9uY2UgaXQgaGFzIGJlZW4gc2V0IGFuZCB5b3UgaGF2ZSBhbGxvY2F0ZWQgcXVl dWVzLg0KPiA+IEluIGZhY3QsIHlvdSBjYW4ndCByZWFsbHkgbGV0IHNvbWUgbGF0ZXIgcXVldWUg Y2hhbmdlIHRoaXMgc2V0dGluZyBhZnRlciB0aGUgZmlyc3QgcXVldWUgZGVjaWRlcw0KPiA+IHdo YXQgSXQgc2hvdWxkIGJlLg0KPiANCj4gU2VlIGFib3ZlLg0KPiANCj4gQWdhaW4sIEkgaGF2ZSBw b2ludGVkIG91dCB3aGVyZSB0aGlzIGlzIGEgcHJvYmxlbS4NCj4gDQoNCkFnYWluLCB0aGlzIGlz IGJhc2VkIG9uIHlvdXIgYXNzdW1wdGlvbiAod3Jvbmcgb25lKSB0aGF0IGl0IGlzIG9rIG5vdCB0 byBjYWxsIHF1ZXVlX3NldHVwKCkNCmFmdGVyIGRldl9jb25maWd1cmUoKS4gDQoNCj4gDQo+ID4N Cj4gPg0KPiA+DQo+ID4gPsKgVGhpcyBicmVha3M6DQo+ID4gPg0KPiA+ID4gcnRlX2V0aF9kZXZf Y29uZmlndXJlKC4uLiwgMSwgMSwgLi4uKTsNCj4gPiA+IHJ4X3F1ZXVlX3NldHVwKDEpDQo+ID4g PiDCoCDCoFtyeF9xdWV1ZV9zZXR1cCBkZWNpZGVzIHRoYXQgaXQgY2FuJ3Qgc3VwcG9ydCByeF9i dWxrX2FsbG9jX2FsbG93ZWRdDQo+ID4gPiAuLg0KPiA+ID4NCj4gPiA+IExhdGVyLCB5b3Ugd2Fu dCB0byBhZGQgc29tZSBtb3JlIHF1ZXVlcyzCoCB5b3UgY2FsbA0KPiA+ID4NCj4gPiA+IGV0aF9l dGhfZGV2X2NvbmZpZ3VyZSguLi4sIDIsIDIsIC4uLik7DQo+ID4NCj4gPiBBZnRlciB5b3UgY2Fs bCBkZXZfY29uZmlndXJlLCB5b3UnbGwgaGF2ZSB0byBkbyBxdWV1ZV9zZXR1cCgpIGZvciBhbGwg eW91ciBxdWV1ZXMuDQo+ID4gZGV2X2NvbmZpZ3VyZSgpIGNhbiBjaGFuZ2VzIHNvbWUgZ2xvYmFs IGRldmljZSBzZXR0aW5ncywgc28gZWFjaCBxdWV1ZSBoYXMgdG8gYmUNCj4gPiByZWNvbmZpZ3Vy ZWQuDQo+ID4gSW4geW91ciBleGFtcGxlIEl0IHNob3VsZCBiZToNCj4gPiBldGhfZXRoX2Rldl9j b25maWd1cmUoLi4uLCAyLCAyLCAuLi4pOw0KPiA+IHJ4X3F1ZXVlX3NldHVwKC4uLiwwLCAuLi4p Ow0KPiA+IHJ4X3F1ZXVlX3NldHVwKC4uLiwxLCAuLi4pOw0KPiA+DQo+ID4gS29uc3RhbnRpbg0K PiA+DQo+ID4NCj4gPiBOb3RoaW5nIGluIHRoZSBBUEkgc2F5cyB0aGlzIG11c3QgaGFwcGVuLsKg IElmIHRoZXJlIHdoZXJlIHRydWUsIHNob3VsZG4ndCBydGVfZXRoX2Rldl9jb25maWd1cmUoKQ0K PiA+IGF1dG9tYXRpY2FsbHkgZHJvcCBhbnkgZXhpc3RpbmcgcXVldWVzPw0KPiANCj4gT25lIG9m IHRoZSBmaXN0cyB0aGluZ3MgdGhhdCBpeGdiZV9kZXZfcnhfcXVldWVfc2V0dXAoKSAtIGNhbGxz IGl4Z2JlX3J4X3F1ZXVlX3JlbGVhc2UoKS4NCj4gSW4gdGhlb3J5IHRoYXQgcHJvYmFibHkgY291 bGQgYmUgbW92ZWQgdG8gcnRlX2V0aF9kZXZfY29uZmlndXJlKCksIGJ1dCBJIHRoaW5rIGN1cnJl bnQgbW9kZWwgaXMgb2sgdG9vLg0KPiANCj4gPlRoZXJlIGlzIGV4aXN0aW5nIGNvZGUgdGhhdCBk b2Vzbid0IGRvIHRoaXMuDQo+IA0KPiBUaGVuIEkgdGhpbmsgaXQgaXMgYSBidWcgaW4gdGhhdCBj b2RlLg0KPiANCj4gPiBTaG93IG1lDQo+ID4gaW4gdGhlIEFQSSB3aGVyZSBJIGFtIHJlcXVpcmVk IHRvIHNldHVwIGFsbCBteSBxdWV1ZXMgX2FnYWluXyBhZnRlciBjYWxsaW5nIHJ0ZV9ldGhfZGV2 X2NvbmZpZ3VyZSgpDQo+IA0KPiBJZiB5b3UgdGhpbmsgdGhlIGRvY3VtZW50YXRpb24gZG9lc24n dCBleHBsYWluIHRoYXQgcHJvcGVybHnCoCAtwqAgZmVlbCBmcmVlIHRvIHJhaXNlIGEgYnVnIGFn YWlucyBkb2MNCj4gYW5kL29yIHByb3ZpZGUgYSBwYXRjaCBmb3IgaXQuDQo+IEFzIEnCoCBleHBs YWluZWQgYWJvdmUgLSBkZXZfY29uZmlndXJlKCkgbWlnaHQgY2hhbmdlIHNvbWUgZ2xvYmFsIHNl dHRpbmdzDQo+IChtYXhfcnhfcGt0LCBmbG93LWRpcmVjdG9yIHNldHRpbmdzLCBldGMuKcKgIHRo YXQgd291bGQgYWZmZWN0IGVhY2ggcXVldWUgaW4gdGhhdCBkZXZpY2UuDQo+IFNvIHF1ZXVlX3Nl dHVwKCkgaXMgbmVjZXNzYXJ5IGFmdGVyIGRldl9jb25maWd1cmUoKSB0byBtYWtlIHN1cmUgaXQg d2lsbCBvcGVyYXRlIHByb3Blcmx5Lg0KPiANCj4gSWYgeW91IHRoaW5rIHRoZSBkb2N1bWVudGF0 aW9uIGlzIHVuY2xlYXIsIHRoZW4gKnlvdSogZmVlbCBmcmVlIHRvIG9wZW4gYSBidWcgdG8gY2xh cmlmeSB3aGF0DQo+IHlvdSBiZWxpZXZlIGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yLsKgIFllcywg cnRlX2V0aF9kZXZfY29uZmlndXJlKCkgaXMgZnJlZSB0byBjaGFuZ2UgZ2xvYmFscy4NCj4gQW55 IG9mIHRoZSBBUEkgcm91dGluZXMgYXJlIGZyZWUgdG8gY2hhbmdlIGdsb2JhbHMuwqAgSXQgaXMg dXAgdG8geW91ciBQTUQgdG8gZGVhbCB3aXRoIHRoZQ0KPiBmYWxsb3V0IGZyb20gY2hhbmdpbmcg c3VjaCBnbG9iYWxzLg0KDQpJdCBpcywgYnV0IGZvciB0aGF0IGFwcGxpY2F0aW9uIGhhdmUgdG8g Zm9sbG93IHRoZSBkZWZpbmVkIHByb2NlZHVyZS4NCkN1cnJlbnQgcHJvY2VkdXJlIGlzOiBkZXZf Y29uZmlndXJlKCk7IHF1ZXVlX3NldHVwKCk7IGRldl9zdGFydCgpLg0KWW91IGNhbid0IHNraXAg c2Vjb25kIHN0ZXAuDQpNb3N0IGRyaXZlcnMgYWxsb2NhdGUgYW5kIGZpbGwgdGhlaXIgcHJpdmF0 ZSBxdWV1ZSBzdHJ1Y3R1cmVzIGhlcmUuDQpTb21lIG9mIHRoZSB2YWx1ZXMgaW5zaWRlIHRoZXNl IHN0cnVjdHVyZXMgYXJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gZGV2X2NvbmYgcGFyYW1ldGVycy4N Ck9idmlvdXNseSBpZiBkZXZpY2UgY29uZmlndXJhdGlvbiBtaWdodCBiZWVuIGNoYW5nZWQgLSB5 b3UgbmVlZCB0byByZWNvbmZpZ3VyZSB5b3VyIHF1ZXVlcyB0b28uDQoNCj7CoCBCb25kaW5nIGFu ZCB2bXhuZXQzIGFyZSBqdXN0IHR3byBleGFtcGxlcyBvZiB0aGlzLg0KDQpJZiBzb21lIFBNRHMg Zm9yIHNvbWUgY2FzZXMgY2FuIHdvcmsgd2l0aG91dCBxdWV1ZSByZWNvbmZpZ3VyYXRpb24gLSBn cmVhdC4NCkJ1dCBpdCBkb2Vzbid0IG1lYW4gdGhhdCBhbGwgIFBNRHMgd291bGQuDQpNb3N0IElu dGVsIFBNRHMgKGl4Z2JlLCBpNDBlLCBmbTEwaykgZG8gZXhwZWN0IHRoYXQgYmVoYXZpb3IuDQpG cm9tIG15IGNvZGUgcmVhZGluZ3MgLSBtbHggYW5kIHFlZGUgdG9vLg0KUHJvYmFibHkgc29tZSBv dGhlciBQTURzIC0gSSBkaWRuJ3QgY2hlY2sgYWxsIG9mIHRoZW0uIA0KDQo+IFRoZSAiZmluYWwi IHF1ZXVlICJzZXR1cCIgaXNuJ3QgZG9uZSB1bnRpbCAuZGV2X3N0YXJ0KCkuwqAgQXQgdGhhdCBw b2ludCwgdGhlIHF1ZXVlcyBhcmUgdXBkYXRlZC4NCg0KSW4gdGhlb3J5LCAgaXQgaXMgcHJvYmFi bHkgcG9zc2libGUgdG8gZG8gdGhpbmdzIGluIGEgd2F5IHlvdSBzdWdnZXN0Og0KbWFrZSBxdWV1 ZV9zZXR1cCgpIGp1c3QgdG8gc3RvcmUgaW5wdXQgcXVldWUgcGFyYW1ldGVycyBhbmQNCm1vdmUg YWxsIHRoZSBhbGxvY2F0aW9uL2NvbmZpZ3VyYXRpb24gam9iIGludG8gZGV2X3N0YXJ0Lg0KVGhv dWdoIGl0IHdvdWxkIHJlcXVpcmUgcXVpdGUgYSBsb3Qgb2YgY2hhbmdlcyBpbiBtYW55IFBNRHMg YW5kIG1pZ2h0IGNvbXBsaWNhdGUgdGhpbmdzLiANClBlcnNvbmFsbHkgSSBkb24ndCBzZWUgYmln IGFkdmFudGFnZSBvZiBzdWNoIGNoYW5nZSwgd2hpbGUgdGhlIHJlcXVpcmVkIGVmZm9ydCB3b3Vs ZCBiZSBzdWJzdGFudGlhbC4gIA0KRXNwZWNpYWxseSBpZiB3ZSBnb2luZyB0byBtb3ZlIHRvIHRo ZSBtb2RlbCB3aXRoIGEgc2VwYXJhdGUgcngvdHggZnVuY3Rpb24gcGVyIHF1ZXVlIGFueXdheS4N Cg0KPiBBZ2FpbiwgdGhlcmUgYXJlIGV4aXN0aW5nIGV4YW1wbGVzIGluIHRoZSBleGlzdGluZyBj b2RlIGJhc2UgdGhhdCBkbyBub3QgZm9sbG93IHlvdXIgaWRlYSBvZg0KPiB3aGF0IHRoZSBBUEkg c2hvdWxkIGRvLsKgIEFyZSB0aGV5IHdyb25nIGFzIHdlbGw/DQoNCkkgdGhpbmsgc28uDQpBcyBJ IHNhaWQgaXQgbWlnaHQgd29yayBmb3Igc29tZSBwYXJ0aWN1bGFyIFBNRCwgYnV0IGlmIGl0IGlz IGEgZ2VuZXJpYyBhcHAsIHRoZW4gaXQgc291bmRzIGxpa2UgYSBidWcgdG8gbWUuDQpXaGF0IHBh cnRpY3VsYXIgYXBwIHdlIGFyZSB0YWxraW5nIGFib3V0Pw0KDQo+wqAgVGhlIHByZXBvbmRlcmFu Y2Ugb2YgdGhlIGV2aWRlbmNlIHNlZW1zDQo+IHRvIGJlIGFnYWluc3QgeW91ciBpZGVhIG9mIHdo YXQgdGhlIEFQSSBzaG91bGQgYmUgZG9pbmcuDQo+IA0KPiBRdWV1ZSBzZXR1cCBpcyBhbiBleHBl bnNpdmUgb3BlcmF0aW9uLsKgIElmIHNvbWUgUE1EIGRvZXNuJ3QgbmVlZCB0byBkcm9wIGFuZCBz ZXR1cCBxdWV1ZXMNCj4gYWdhaW4gYWZ0ZXIgYW4gcnRlX2V0aF9kZXZfY29uZmlndXJlKCkgd2h5 IGFyZSB5b3UgZm9yY2luZyBpdCB0byBkbyBzbz8NCg0KSSBkb24ndCB0aGluayBxdWV1ZV9zZXR1 cCgpIGlzIHRoYXQgZXhwZW5zaXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBwcmljZS4NCldlIGFyZSBp biBjb250cm9sIHBhdGggaGVyZS4NCkJ1dCBJdCBpcyB1cCB0byBQTUQgd2hhdCB0byBwdXQgaW5z aWRlIHRoYXQgcm91dGluZS4NCklmIFBNRCBpcyBzbWFydCBlbm91Z2ggdG8gZGV0ZWN0IHRoYXQg bm90aGluZyByZWFsbHkgY2hhbmdlZCBmcm9tIGxhc3QgaW52b2NhdGlvbg0Kb2YgcXVldWVfc2V0 dXAoKSBhbmQgbm8gZXh0cmEgd29yayByZXF1aXJlZCAtIHRoZW4gaXQgY2FuIGp1c3QgcmV0dXJu IHN1Y2Nlc3Mgc3RyYWlnaHR3YXkuDQpBZ2Fpbiwgbm90aGluZyBwcmV2ZW50cyB1c2VyIHRvIG1h a2Ugc29tZSBzdHViIGxheWVyIG9uIHRvcCBvZiBjdXJyZW50IHJ0ZV9ldGhkZXYgQVBJIHRvDQpt aW5pbWl6ZSBudW1iZXIgb2YgZXRoX3F1ZXVlX3NldHVwKCkgaW52b2NhdGlvbnMuDQoNCj7CoCBJ dCB3YXMgdGhlIGNob2ljZQ0KPiBvZiB0aGUgYXV0aG9yIGluIHRoZSBpeGdiZSBkcml2ZXIgdG8g dXNlIGdsb2JhbHMgdGhlIHdheSB0aGV5IGRpZC4NCj5UaGUgY3VycmVudCBjb2RlIGlzIHN0aWxs DQo+IHNvbWV3aGF0IHdyb25nIGV2ZW4gYWZ0ZXIgdGhlIHBhdGNoIEkgcHJvcG9zZS7CoCBUaGUg Y29uZmlndXJhdGlvbiBvZiBlYWNoIHF1ZXVlIGRlcGVuZHMNCj4gb24gd2hhdCB0aGUgcHJldmlv dXMgcXVldWVzIGRpZC7CoCBTaW5jZSB0aGVyZSBpc24ndCBhIGJ1cnN0IHBlciBxdWV1ZSByb3V0 aW5lLCB0aGVyZSBuZWVkcw0KPiB0byBiZSBhIHNpbmdsZSBkZWNpc2lvbiBtYWRlIGFmdGVyIF9h bGxfIG9mIHRoZSBxdWV1ZXMgYXJlIGNvbmZpZ3VyZWQuwqAgVGhhdCBpcyB0aGUgb25seQ0KPiB0 aW1lIHdoZW4geW91IGhhdmUgY29tcGxldGUga25vd2xlZGdlIHRvIG1ha2UgeW91ciBkZWNpc2lv bnMgYWJvdXQgd2hpY2ggUlggbW9kZSB0byB1c2UuDQo+IA0KPiANCj4gS29uc3RhbnRpbg0KPiAN Cj4gPg0KPiA+DQo+ID4gPiByeF9xdWV1ZV9zZXR1cCgyKQ0KPiA+ID4gwqAgW3J4X3F1ZXVlX3Nl dHVwIGhvcGVmdWxseSBtYWtlcyB0aGUgc2FtZSBjaG9pY2UgYXMgcnhxaWQgPSAxP10NCj4gPiA+ IC4uLg0KPiA+ID4NCj4gPiA+IElzIG9uZSBzdXBwb3NlZCB0byByZWxlYXNlIGFsbCBxdWV1ZXMg YmVmb3JlIGNhbGxpbmcgcnRlX2V0aF9kZXZfY29uZmlndXJlKCk/IElmDQo+ID4gPiB0aGF0IGlz IHRydWUsIGl0IHNlZW1zIGxpa2UgdGhlIGNoYW5nZV9tdHUgZXhhbXBsZXMgSSBzZWUgYXJlIHBv c3NpYmx5IHdyb25nLsKgIEFzDQo+ID4gPiBzdWdnZXN0ZWQgaW4ga2VucmVsX25pY19pbnRlcmZh Y2UucnN0Og0KPiA+ID4NCj4gPiA+DQo+ID4gPiDCoCDCoCDCoCDCoCByZXQgPSBydGVfZXRoX2Rl dl9jb25maWd1cmUocG9ydF9pZCwgMSwgMSwgJmNvbmYpOw0KPiA+ID4gwqAgwqAgwqAgwqAgaWYg KHJldCA8IDApIHsNCj4gPiA+IMKgIMKgIMKgIMKgIMKgIMKgIFJURV9MT0coRVJSLCBBUFAsICJG YWlsIHRvIHJlY29uZmlndXJlIHBvcnQgJWRcbiIsIHBvcnRfaWQpOw0KPiA+ID4gwqAgwqAgwqAg wqAgwqAgwqAgcmV0dXJuIHJldDsNCj4gPiA+IMKgIMKgIMKgIMKgIH0NCj4gPiA+DQo+ID4gPiDC oCDCoCDCoCDCoCAvKiBSZXN0YXJ0IHNwZWNpZmljIHBvcnQgKi8NCj4gPiA+DQo+ID4gPiDCoCDC oCDCoCDCoCByZXQgPSBydGVfZXRoX2Rldl9zdGFydChwb3J0X2lkKTsNCj4gPiA+IMKgIMKgIMKg IMKgIGlmIChyZXQgPCAwKSB7DQo+ID4gPiDCoCDCoCDCoCDCoCDCoCDCoCDCoFJURV9MT0coRVJS LCBBUFAsICJGYWlsIHRvIHJlc3RhcnQgcG9ydCAlZFxuIiwgcG9ydF9pZCk7DQo+ID4gPiDCoCDC oCDCoCDCoCDCoCDCoCByZXR1cm4gcmV0Ow0KPiA+ID4gwqAgwqAgwqAgwqAgfQ0KPiA+ID4NCj4g PiA+IFRoaXMgaXMgd2lsbCBvYnZpb3VzbHkgcmVzZXQgdGhlIHJ4X2J1bGtfYWxsb2NfYWxsb3dl ZCBhbmQgbm90IHJlYWxsb2NhdGVkIHRoZSBSWCBxdWV1ZXMuDQo+ID4gPg0KPiA+ID4NCj4gPiA+ ID7CoCDCoCDCoCDCoGFkYXB0ZXItPnJ4X2J1bGtfYWxsb2NfYWxsb3dlZCA9IHRydWU7DQo+ID4g PiA+wqAgwqAgwqAgwqBhZGFwdGVyLT5yeF92ZWNfYWxsb3dlZCA9IHRydWU7DQo+ID4gPiA+DQo+ ID4gPiA+ICtvdXQ6DQo+ID4gPiA+wqAgwqAgwqAgwqByZXR1cm4gMDsNCj4gPiA+ID7CoCB9DQo+ ID4gPiA+DQo+ID4gPiA+IEBAIC00OTU5LDYgKzQ5NjYsNyBAQCBpeGdiZXZmX2Rldl9jb25maWd1 cmUoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpDQo+ID4gPiA+wqAgwqAgwqAgwqBzdHJ1Y3QgcnRl X2V0aF9jb25mICpjb25mID0gJmRldi0+ZGF0YS0+ZGV2X2NvbmY7DQo+ID4gPiA+wqAgwqAgwqAg wqBzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9DQo+ID4gPiA+wqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKilkZXYtPmRhdGEtPmRl dl9wcml2YXRlOw0KPiA+ID4gPiArwqAgwqAgwqB1aW50MTZfdCBpOw0KPiA+ID4gPg0KPiA+ID4g PsKgIMKgIMKgIMKgUE1EX0lOSVRfTE9HKERFQlVHLCAiQ29uZmlndXJlZCBWaXJ0dWFsIEZ1bmN0 aW9uIHBvcnQgaWQ6ICVkIiwNCj4gPiA+ID7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBk ZXYtPmRhdGEtPnBvcnRfaWQpOw0KPiA+ID4gPiBAQCAtNDk4MSwxMSArNDk4OSwxNyBAQCBpeGdi ZXZmX2Rldl9jb25maWd1cmUoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpDQo+ID4gPiA+DQo+ID4g PiA+wqAgwqAgwqAgwqAvKg0KPiA+ID4gPsKgIMKgIMKgIMKgICogSW5pdGlhbGl6ZSB0byBUUlVF LiBJZiBhbnkgb2YgUnggcXVldWVzIGRvZXNuJ3QgbWVldCB0aGUgYnVsaw0KPiA+ID4gPiAtwqAg wqAgwqAgKiBhbGxvY2F0aW9uIG9yIHZlY3RvciBSeCBwcmVjb25kaXRpb25zIHdlIHdpbGwgcmVz ZXQgaXQuDQo+ID4gPiA+ICvCoCDCoCDCoCAqIGFsbG9jYXRpb24gb3IgdmVjdG9yIFJ4IHByZWNv bmRpdGlvbnMgd2Ugd2lsbCByZXNldCBpdC4gV2UNCj4gPiA+ID4gK8KgIMKgIMKgICogY2FuIG9u bHkgZG8gdGhpcyBpcyB0aGVyZSBhcmVuJ3QgYW55IGV4aXN0aW5nIFJYIHF1ZXVlcy4NCj4gPiA+ ID7CoCDCoCDCoCDCoCAqLw0KPiA+ID4gPiArwqAgwqAgwqBmb3IgKGkgPSAwOyBpIDwgZGV2LT5k YXRhLT5uYl9yeF9xdWV1ZXM7IGkrKykgew0KPiA+ID4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqBp ZiAoZGV2LT5kYXRhLT5yeF9xdWV1ZXNbaV0pDQo+ID4gPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoGdvdG8gb3V0Ow0KPiA+ID4gPiArwqAgwqAgwqB9DQo+ID4gPiA+wqAgwqAg wqAgwqBhZGFwdGVyLT5yeF9idWxrX2FsbG9jX2FsbG93ZWQgPSB0cnVlOw0KPiA+ID4gPsKgIMKg IMKgIMKgYWRhcHRlci0+cnhfdmVjX2FsbG93ZWQgPSB0cnVlOw0KPiA+ID4gPg0KPiA+ID4gPiAr b3V0Og0KPiA+ID4gPsKgIMKgIMKgIMKgcmV0dXJuIDA7DQo+ID4gPiA+wqAgfQ0KPiA+ID4gPg0K PiA+ID4gPiAtLQ0KPiA+ID4gPiAyLjkuNQ0KDQo=