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 dpdk.org (Postfix) with ESMTP id A34745677 for ; Wed, 18 Mar 2015 16:14:12 +0100 (CET) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga103.jf.intel.com with ESMTP; 18 Mar 2015 08:09:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,423,1422950400"; d="scan'208";a="693958070" Received: from irsmsx108.ger.corp.intel.com ([163.33.3.3]) by fmsmga002.fm.intel.com with ESMTP; 18 Mar 2015 08:13:11 -0700 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.117]) by IRSMSX108.ger.corp.intel.com ([169.254.11.218]) with mapi id 14.03.0195.001; Wed, 18 Mar 2015 15:13:11 +0000 From: "Ananyev, Konstantin" To: "vadim.suraev@gmail.com" Thread-Topic: [PATCH v2] rte_mbuf: mbuf bulk alloc/free functions added + unittest Thread-Index: AQHQYPpsu9YquxZduU6MoiIW4nRTTp0hU+8AgABgQoCAAErnAIAAACjggAAO94CAAEN1kIAAAD8w Date: Wed, 18 Mar 2015 15:13:10 +0000 Message-ID: <2601191342CEEE43887BDE71AB977258213F7188@irsmsx105.ger.corp.intel.com> References: <1426628169-1735-1-git-send-email-vadim.suraev@gmail.com> <2601191342CEEE43887BDE71AB977258213F6F10@irsmsx105.ger.corp.intel.com> <2601191342CEEE43887BDE71AB977258213F7053@irsmsx105.ger.corp.intel.com> <2601191342CEEE43887BDE71AB977258213F706D@irsmsx105.ger.corp.intel.com> <2601191342CEEE43887BDE71AB977258213F7136@irsmsx105.ger.corp.intel.com> In-Reply-To: <2601191342CEEE43887BDE71AB977258213F7136@irsmsx105.ger.corp.intel.com> Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.180] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH v2] rte_mbuf: mbuf bulk alloc/free functions added + unittest X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 18 Mar 2015 15:14:13 -0000 IA0KPiBGcm9tOiBWYWRpbSBTdXJhZXYgW21haWx0bzp2YWRpbS5zdXJhZXZAZ21haWwuY29tXQ0K PiBTZW50OiBXZWRuZXNkYXksIE1hcmNoIDE4LCAyMDE1IDEwOjQxIEFNDQo+IFRvOiBBbmFueWV2 LCBLb25zdGFudGluDQo+IENjOiBkZXZAZHBkay5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2 Ml0gcnRlX21idWY6IG1idWYgYnVsayBhbGxvYy9mcmVlIGZ1bmN0aW9ucyBhZGRlZCArIHVuaXR0 ZXN0DQo+IA0KPiBIaSwgS29uc3RhbnRpbiwNCj4gDQo+IEdvdCBpdC4gVG8gbWFrZSB0aGUgc2Ft ZSwgbnVsbGluZyB0aGUgbmV4dCBzaG91bGQgYmUgaW5zaWRlIG9mIHRoZSBibG9jayBhcyB5b3Ug c2FpZC4NCj4gT25lIHF1ZXN0aW9uIHJhaXNlcyBoZXJlOiBJZiBhIHNlZ21lbnQgaW4gdGhlIGNo YWluIGhhcyByZWZjbnQgPiAxIChzbyBpdHMgbmV4dCBpcyBub3QgYXNzaWduZWQgTlVMTCksIGFu ZCB0aGUgbmV4dCBzZWdtZW50IGhhcyByZWZjbnQNCj4gPT0gMSAoc28gaXQgaXMgZnJlZWQpLCBk byB5b3UgdGhpbmsgdGhpcyBzY2VuYXJpbyBpcyByZWFsL3Nob3VsZCBiZSBjb25zaWRlcmVkPyBJ ZiBzbywgdGhlIGZvcm1lciBjYW4gYmUgc2FmZWx5IGZyZWVkIG9ubHkgYnkgY2FsbGluZw0KPiBy dGVfcGt0bWJ1Zl9mcmVlX3NlZyB3aGljaCBkb2VzIG5vdCBpdGVyYXRlLiBTbyB3aHkgdG8ga2Vl cCBuZXh0IHBvaW50aW5nIHRvIHNvbWV0aGluZz8NCg0KSSB0aGluayB3ZSBuZWVkIGl0LCBub3Qg anVzdCB0byBrZWVwIHRoaW5ncyB0aGUgc2FtZSB3aXRoICBydGVfcGt0bWJ1Zl9mcmVlKCksIGJ1 dCBiZWNhdXNlIGl0IGlzIGEgcmlnaHQgdGhpbmcgdG8gZG8uDQpMZXQgc2F5IHlvdSBoYXZlIGEg cGFja2V0IGluIDIgbWJ1ZnMgY2hhaW5lZCB0b2dldGhlciwgYm90aCBtYnVmcyBoYXZlIHJlZmNu dD09Mi4NClRoZW46DQpydGVfcGt0bWJ1Zl9mcmVlKGZpcnNfbWJ1Zik7DQpydGVfcGt0bWJ1Zl9m cmVlKGZpcnNfbWJ1Zik7DQoNCldvdWxkIHdvcmsgY29ycmVjdGx5IGFuZCBmcmVlIGJvdGggbWJ1 ZnMgYmFjayB0byB0aGUgbWVtcG9vbC4NCg0KV2hpbGUgYWZ0ZXI6DQpydGVfcGt0bWJ1Zl9mcmVl X2NoYWluKGZpcnN0X21idWYpOw0KcnRlX3BrdG1idWZfZnJlZV9jaGFpbihmaXJzdF9tYnVmKTsN Cg0KV2Ugd291bGQgaGF2ZSBmaXJzdF9tYnVmIGZyZWVkIGJhY2sgaW50byB0aGUgbWVtcG9vbCwg d2hpbGUgc2Vjb25kIHdvdWxkIGdldCBsb3N0KG1lbW9yeSBsZWFraW5nKS4NCkJhc2ljYWxseSBm cmVlKCkgc2hvdWxkbid0IG1vZGlmeSBhbnkgZmlsZWQgaW5zaWRlIG1idWYsIGV4Y2VwdCByZWZj bnQgaWYgcnRlX21idWZfcmVmY250X3VwZGF0ZShtLCAtMSkgPiAwDQoNCkFib3V0IHlvdXIgY2Fz ZSwgd2hlbjogZmlyc3RfbWJ1Zi0+cmVmY250PT0yIGFuZCBzZWNvbmRfbWJ1Zi0+cmVmY250PT0x Lg0KUmlnaHQgbm93LCBydGVfcGt0bWJ1Zl9mcmVlKCkgY2FuJ3QgaGFuZGxlIHN1Y2ggY2FzZXMg cHJvcGVybHksDQphbmQsIGFzIEkga25vdywgc3VjaCBzaXR1YXRpb24gaXMgbm90IGNvbnNpZGVy ZWQgYXMgdmFsaWQgb25lLg0KDQpLb25zdGFudGluDQoNCj4gUmVnYXJkcywNCj4gwqBWYWRpbQ0K PiANCj4gT24gV2VkLCBNYXIgMTgsIDIwMTUgYXQgMTE6NTYgQU0sIEFuYW55ZXYsIEtvbnN0YW50 aW4gPGtvbnN0YW50aW4uYW5hbnlldkBpbnRlbC5jb20+IHdyb3RlOg0KPiANCj4gSGkgVmFkaW0s DQo+IA0KPiANCj4gPiBGcm9tOiBWYWRpbSBTdXJhZXYgW21haWx0bzp2YWRpbS5zdXJhZXZAZ21h aWwuY29tXQ0KPiA+IFNlbnQ6IFdlZG5lc2RheSwgTWFyY2ggMTgsIDIwMTUgNToxOSBBTQ0KPiA+ IFRvOiBBbmFueWV2LCBLb25zdGFudGluDQo+ID4gQ2M6IGRldkBkcGRrLm9yZzsgb2xpdmllci5t YXR6QDZ3aW5kLmNvbTsgc3RlcGhlbkBuZXR3b3JrcGx1bWJlci5vcmcNCj4gPiBTdWJqZWN0OiBS ZTogW1BBVENIIHYyXSBydGVfbWJ1ZjogbWJ1ZiBidWxrIGFsbG9jL2ZyZWUgZnVuY3Rpb25zIGFk ZGVkICsgdW5pdHRlc3QNCj4gPg0KPiA+IEhpLCBLb25zdGFudGluLA0KPiA+DQo+ID4gPlNob3Vs ZG4ndCB0aGUgbGluZSBhYm92ZSBiZSBpbnNpZGUgaWYgKGhlYWQgIT0gTlVMTCkgey4uLn0gYmxv Y2s/DQo+ID4gVGhpcyBpcyByZW1vdmVkIGFzIE9saXZpZXIgY29tbWVudGVkIGJlZm9yZToNCj4g Pg0KPiA+ID4+ICt7DQo+ID4gPiArwqAgwqAgwqBpZiAobGlrZWx5KGhlYWQgIT0gTlVMTCkpIHsN Cj4gPg0KPiA+ID5JIHRoaW5rIHdlIHNob3VsZCByZW1vdmUgdGhpcyB0ZXN0LiBUaGUgb3RoZXIg bWJ1ZiBmdW5jdGlvbnMgZG8gbm90DQo+ID4gPmNoZWNrIHRoaXMuDQo+ID4gUmVnYXJkcywNCj4g PiDCoFZhZGltLg0KPiANCj4gSSBtZWFudCB0aGF0IGluIG15IG9waW5pb24gaXQgc2hvdWxkIGJl Og0KPiANCj4gd2hpbGUgKGhlYWQpIHsNCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqBuZXh0ID0gaGVh ZC0+bmV4dDsNCj4gLcKgIMKgIMKgIMKgIMKgIMKgIMKgaGVhZC0+bmV4dCA9IE5VTEw7DQo+IA0K PiDCoCDCoCDCoCDCoCDCoCDCoCDCoGhlYWQgPSBfX3J0ZV9wa3RtYnVmX3ByZWZyZWVfc2VnKGhl YWQpOw0KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIChsaWtlbHkoaGVhZCAhPSBOVUxMKSkgew0K PiArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaGVhZC0+bmV4dCA9IE5VTEw7DQo+IMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgUlRFX01CVUZfQVNTRVJUKHJ0ZV9tYnVmX3JlZmNu dF9yZWFkKGhlYWQpID09IDApOw0KPiANCj4gU2FtZSBhcyBydGVfcGt0bWJ1Zl9mcmVlKCkgZG9p bmcuDQo+IA0KPiBLb25zdGFudGluDQo+IA0KPiA+DQo+ID4gT24gV2VkLCBNYXIgMTgsIDIwMTUg YXQgMTo0NiBBTSwgQW5hbnlldiwgS29uc3RhbnRpbiA8a29uc3RhbnRpbi5hbmFueWV2QGludGVs LmNvbT4gd3JvdGU6DQo+ID4gSGkgVmFkaW0sDQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQo+ID4gPiBGcm9tOiB2YWRpbS5zdXJhZXZAZ21haWwuY29tIFttYWlsdG86dmFk aW0uc3VyYWV2QGdtYWlsLmNvbV0NCj4gPiA+IFNlbnQ6IFR1ZXNkYXksIE1hcmNoIDE3LCAyMDE1 IDk6MzYgUE0NCj4gPiA+IFRvOiBkZXZAZHBkay5vcmcNCj4gPiA+IENjOiBvbGl2aWVyLm1hdHpA NndpbmQuY29tOyBzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZzsgQW5hbnlldiwgS29uc3RhbnRp bjsgdmFkaW0uc3VyYWV2QGdtYWlsLmNvbQ0KPiA+ID4gU3ViamVjdDogW1BBVENIIHYyXSBydGVf bWJ1ZjogbWJ1ZiBidWxrIGFsbG9jL2ZyZWUgZnVuY3Rpb25zIGFkZGVkICsgdW5pdHRlc3QNCj4g PiA+DQo+ID4gPiBGcm9tOiAidmFkaW0uc3VyYWV2QGdtYWlsLmNvbSIgPHZhZGltLnN1cmFldkBn bWFpbC5jb20+DQo+ID4gPg0KPiA+ID4gVGhpcyBwYXRjaCBhZGRzIG1idWYgYnVsayBhbGxvY2F0 aW9uL2ZyZWVpbmcgZnVuY3Rpb25zIGFuZCB1bml0dGVzdA0KPiA+ID4NCj4gPiA+IFNpZ25lZC1v ZmYtYnk6IFZhZGltIFN1cmFldg0KPiA+ID4gPHZhZGltLnN1cmFldkBnbWFpbC5jb20+DQo+ID4g PiAtLS0NCj4gPiA+IE5ldyBpbiB2MjoNCj4gPiA+wqAgwqAgwqAtIGZ1bmN0aW9uIHJ0ZV9wa3Rt YnVmX2FsbG9jX2J1bGsgYWRkZWQNCj4gPiA+wqAgwqAgwqAtIGZ1bmN0aW9uIHJ0ZV9wa3RtYnVm X2J1bGtfZnJlZSBhZGRlZA0KPiA+ID7CoCDCoCDCoC0gZnVuY3Rpb24gcnRlX3BrdG1idWZfZnJl ZV9jaGFpbiBhZGRlZA0KPiA+ID7CoCDCoCDCoC0gYXBwbGllZCByZXZpZXdlcnMnIGNvbW1lbnRz DQo+ID4gPg0KPiA+ID7CoCBhcHAvdGVzdC90ZXN0X21idWYuY8KgIMKgIMKgIMKgfMKgIMKgOTQg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0NCj4gPiA+wqAgbGli L2xpYnJ0ZV9tYnVmL3J0ZV9tYnVmLmggfMKgIMKgODkgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysNCj4gPiA+wqAgMiBmaWxlcyBjaGFuZ2VkLCAxODIgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKQ0KPiA+ID4NCj4gPiA+IGRpZmYgLS1naXQgYS9hcHAvdGVzdC90 ZXN0X21idWYuYyBiL2FwcC90ZXN0L3Rlc3RfbWJ1Zi5jDQo+ID4gPiBpbmRleCAxZmY2NmNiLi5i MjBjNmE0IDEwMDY0NA0KPiA+ID4gLS0tIGEvYXBwL3Rlc3QvdGVzdF9tYnVmLmMNCj4gPiA+ICsr KyBiL2FwcC90ZXN0L3Rlc3RfbWJ1Zi5jDQo+ID4gPiBAQCAtNzcsNiArNzcsNyBAQA0KPiA+ID7C oCAjZGVmaW5lIFJFRkNOVF9SSU5HX1NJWkXCoCDCoCDCoCDCoCAoUkVGQ05UX01CVUZfTlVNICog UkVGQ05UX01BWF9SRUYpDQo+ID4gPg0KPiA+ID7CoCAjZGVmaW5lIE1BS0VfU1RSSU5HKHgpwqAg wqAgwqAgwqAgwqAgIyB4DQo+ID4gPiArI2RlZmluZSBNQlVGX1BPT0xfTE9DQUxfQ0FDSEVfU0la RSAzMg0KPiA+ID4NCj4gPiA+wqAgc3RhdGljIHN0cnVjdCBydGVfbWVtcG9vbCAqcGt0bWJ1Zl9w b29sID0gTlVMTDsNCj4gPiA+DQo+ID4gPiBAQCAtNDA1LDYgKzQwNiw4NCBAQCB0ZXN0X3BrdG1i dWZfcG9vbCh2b2lkKQ0KPiA+ID7CoCDCoCDCoCDCoHJldHVybiByZXQ7DQo+ID4gPsKgIH0NCj4g PiA+DQo+ID4gPiArLyogdGVzdCBwa3RtYnVmIGJ1bGsgYWxsb2NhdGlvbiBhbmQgZnJlZWluZw0K PiA+ID4gKyovDQo+ID4gPiArc3RhdGljIGludA0KPiA+ID4gK3Rlc3RfcGt0bWJ1Zl9wb29sX2J1 bGsodm9pZCkNCj4gPiA+ICt7DQo+ID4gPiArwqAgwqAgwqB1bnNpZ25lZCBpOw0KPiA+ID4gK8Kg IMKgIMKgLyogc2l6ZSBvZiBtZW1wb29sIC0gc2l6ZSBvZiBsb2NhbCBjYWNoZSwgb3RoZXJ3aXNl IG1heSBmYWlsICovDQo+ID4gPiArwqAgwqAgwqB1bnNpZ25lZCBtYnVmc190b19hbGxvY2F0ZSA9 IE5CX01CVUYgLSBNQlVGX1BPT0xfTE9DQUxfQ0FDSEVfU0laRTsNCj4gPiA+ICvCoCDCoCDCoHN0 cnVjdCBydGVfbWJ1ZiAqbVttYnVmc190b19hbGxvY2F0ZV07DQo+ID4gPiArwqAgwqAgwqBpbnQg cmV0ID0gMDsNCj4gPiA+ICvCoCDCoCDCoHVuc2lnbmVkIG1idWZfY291bnRfYmVmb3JlX2FsbG9j YXRpb24gPSBydGVfbWVtcG9vbF9jb3VudChwa3RtYnVmX3Bvb2wpOw0KPiA+ID4gKw0KPiA+ID4g K8KgIMKgIMKgZm9yIChpID0gMDsgaSA8IG1idWZzX3RvX2FsbG9jYXRlOyBpKyspDQo+ID4gPiAr wqAgwqAgwqAgwqAgwqAgwqAgwqBtW2ldID0gTlVMTDsNCj4gPiA+ICvCoCDCoCDCoC8qIGFsbG9j IE5CX01CVUYtTUJVRl9QT09MX0xPQ0FMX0NBQ0hFX1NJWkUgbWJ1ZnMgKi8NCj4gPiA+ICvCoCDC oCDCoHJldCA9IHJ0ZV9wa3RtYnVmX2FsbG9jX2J1bGsocGt0bWJ1Zl9wb29sLCBtLCBtYnVmc190 b19hbGxvY2F0ZSk7DQo+ID4gPiArwqAgwqAgwqBpZiAocmV0KSB7DQo+ID4gPiArwqAgwqAgwqAg wqAgwqAgwqAgwqBwcmludGYoImNhbm5vdCBhbGxvY2F0ZSAlZCBtYnVmcyBidWxrIG1lbXBvb2xf Y250PSVkIHJldD0lZFxuIiwNCj4gPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oG1idWZzX3RvX2FsbG9jYXRlLA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgcnRlX21lbXBvb2xfY291bnQocGt0bWJ1Zl9wb29sKSwNCj4gPiA+ICvCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHJldCk7DQo+ID4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1 cm4gLTE7DQo+ID4gPiArwqAgwqAgwqB9DQo+ID4gPiArwqAgwqAgwqBpZiAoKHJ0ZV9tZW1wb29s X2NvdW50KHBrdG1idWZfcG9vbCkgKyBtYnVmc190b19hbGxvY2F0ZSkgIT0NCj4gPiA+ICvCoCDC oCDCoCDCoCDCoG1idWZfY291bnRfYmVmb3JlX2FsbG9jYXRpb24pIHsNCj4gPiA+ICvCoCDCoCDC oCDCoCDCoCDCoCDCoHByaW50ZigibWVtcG9vbCBjb3VudCAlZCArIGFsbG9jYXRlZCAlZCAhPSBp bml0aWFsICVkXG4iLA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcnRl X21lbXBvb2xfY291bnQocGt0bWJ1Zl9wb29sKSwNCj4gPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoG1idWZzX3RvX2FsbG9jYXRlLA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgbWJ1Zl9jb3VudF9iZWZvcmVfYWxsb2NhdGlvbik7DQo+ID4gPiArwqAg wqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gLTE7DQo+ID4gPiArwqAgwqAgwqB9DQo+ID4gPiArwqAg wqAgwqAvKiBmcmVlIHRoZW0gKi8NCj4gPiA+ICvCoCDCoCDCoHJ0ZV9wa3RtYnVmX2J1bGtfZnJl ZShtLCBtYnVmc190b19hbGxvY2F0ZSk7DQo+ID4gPiArDQo+ID4gPiArwqAgwqAgwqBpZiAocnRl X21lbXBvb2xfY291bnQocGt0bWJ1Zl9wb29sKcKgICE9IG1idWZfY291bnRfYmVmb3JlX2FsbG9j YXRpb24pIHsNCj4gPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoHByaW50ZigibWVtcG9vbCBjb3Vu dCAlZCAhPSBpbml0aWFsICVkXG4iLA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgcnRlX21lbXBvb2xfY291bnQocGt0bWJ1Zl9wb29sKSwNCj4gPiA+ICvCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoG1idWZfY291bnRfYmVmb3JlX2FsbG9jYXRpb24pOw0KPiA+ ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIC0xOw0KPiA+ID4gK8KgIMKgIMKgfQ0KPiA+ ID4gK8KgIMKgIMKgZm9yIChpID0gMDsgaSA8IG1idWZzX3RvX2FsbG9jYXRlOyBpKyspDQo+ID4g PiArwqAgwqAgwqAgwqAgwqAgwqAgwqBtW2ldID0gTlVMTDsNCj4gPiA+ICsNCj4gPiA+ICvCoCDC oCDCoC8qIGFsbG9jIE5CX01CVUYtTUJVRl9QT09MX0xPQ0FMX0NBQ0hFX1NJWkUgbWJ1ZnMgKi8N Cj4gPiA+ICvCoCDCoCDCoHJldCA9IHJ0ZV9wa3RtYnVmX2FsbG9jX2J1bGsocGt0bWJ1Zl9wb29s LCBtLCBtYnVmc190b19hbGxvY2F0ZSk7DQo+ID4gPiArwqAgwqAgwqBpZiAocmV0KSB7DQo+ID4g PiArwqAgwqAgwqAgwqAgwqAgwqAgwqBwcmludGYoImNhbm5vdCBhbGxvY2F0ZSAlZCBtYnVmcyBi dWxrIG1lbXBvb2xfY250PSVkIHJldD0lZFxuIiwNCj4gPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoG1idWZzX3RvX2FsbG9jYXRlLA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgcnRlX21lbXBvb2xfY291bnQocGt0bWJ1Zl9wb29sKSwNCj4gPiA+ICvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldCk7DQo+ID4gPiArwqAgwqAgwqAgwqAg wqAgwqAgwqByZXR1cm4gLTE7DQo+ID4gPiArwqAgwqAgwqB9DQo+ID4gPiArwqAgwqAgwqBpZiAo KHJ0ZV9tZW1wb29sX2NvdW50KHBrdG1idWZfcG9vbCkgKyBtYnVmc190b19hbGxvY2F0ZSkgIT0N Cj4gPiA+ICvCoCDCoCDCoCDCoCDCoG1idWZfY291bnRfYmVmb3JlX2FsbG9jYXRpb24pIHsNCj4g PiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoHByaW50ZigibWVtcG9vbCBjb3VudCAlZCArIGFsbG9j YXRlZCAlZCAhPSBpbml0aWFsICVkXG4iLA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgcnRlX21lbXBvb2xfY291bnQocGt0bWJ1Zl9wb29sKSwNCj4gPiA+ICvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG1idWZz X3RvX2FsbG9jYXRlLA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbWJ1Zl9jb3VudF9iZWZvcmVfYWxsb2NhdGlvbik7DQo+ ID4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gLTE7DQo+ID4gPiArwqAgwqAgwqB9DQo+ ID4gPiArDQo+ID4gPiArwqAgwqAgwqAvKiBjaGFpbiBpdCAqLw0KPiA+ID4gK8KgIMKgIMKgZm9y IChpID0gMDsgaSA8IG1idWZzX3RvX2FsbG9jYXRlIC0gMTsgaSsrKSB7DQo+ID4gPiArwqAgwqAg wqAgwqAgwqAgwqAgwqBtW2ldLT5uZXh0ID0gbVtpICsgMV07DQo+ID4gPiArwqAgwqAgwqAgwqAg wqAgwqAgwqBtWzBdLT5uYl9zZWdzKys7DQo+ID4gPiArwqAgwqAgwqB9DQo+ID4gPiArwqAgwqAg wqAvKiBmcmVlIHRoZW0gKi8NCj4gPiA+ICvCoCDCoCDCoHJ0ZV9wa3RtYnVmX2ZyZWVfY2hhaW4o bVswXSk7DQo+ID4gPiArDQo+ID4gPiArwqAgwqAgwqBpZiAocnRlX21lbXBvb2xfY291bnQocGt0 bWJ1Zl9wb29sKcKgICE9IG1idWZfY291bnRfYmVmb3JlX2FsbG9jYXRpb24pIHsNCj4gPiA+ICvC oCDCoCDCoCDCoCDCoCDCoCDCoHByaW50ZigibWVtcG9vbCBjb3VudCAlZCAhPSBpbml0aWFsICVk XG4iLA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcnRlX21lbXBvb2xf Y291bnQocGt0bWJ1Zl9wb29sKSwNCj4gPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG1idWZfY291bnRfYmVmb3JlX2FsbG9jYXRp b24pOw0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIC0xOw0KPiA+ID4gK8KgIMKg IMKgfQ0KPiA+ID4gK8KgIMKgIMKgcmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4g PsKgIC8qDQo+ID4gPsKgIMKgKiB0ZXN0IHRoYXQgdGhlIHBvaW50ZXIgdG8gdGhlIGRhdGEgb24g YSBwYWNrZXQgbWJ1ZiBpcyBzZXQgcHJvcGVybHkNCj4gPiA+wqAgwqAqLw0KPiA+ID4gQEAgLTc2 Niw3ICs4NDUsOCBAQCB0ZXN0X21idWYodm9pZCkNCj4gPiA+wqAgwqAgwqAgwqBpZiAocGt0bWJ1 Zl9wb29sID09IE5VTEwpIHsNCj4gPiA+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBwa3RtYnVmX3Bv b2wgPQ0KPiA+ID7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJ0ZV9tZW1wb29s X2NyZWF0ZSgidGVzdF9wa3RtYnVmX3Bvb2wiLCBOQl9NQlVGLA0KPiA+ID4gLcKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE1CVUZfU0la RSwgMzIsDQo+ID4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgTUJVRl9TSVpFLA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE1CVUZfUE9PTF9MT0NBTF9D QUNIRV9TSVpFLA0KPiA+ID7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzaXplb2Yoc3RydWN0IHJ0ZV9wa3RtYnVmX3Bvb2xfcHJp dmF0ZSksDQo+ID4gPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHJ0ZV9wa3RtYnVmX3Bvb2xfaW5pdCwgTlVMTCwNCj4gPiA+wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgcnRlX3BrdG1idWZfaW5pdCwgTlVMTCwNCj4gPiA+IEBAIC03OTAsNiArODcwLDE4IEBAIHRl c3RfbWJ1Zih2b2lkKQ0KPiA+ID7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldHVybiAtMTsNCj4g PiA+wqAgwqAgwqAgwqB9DQo+ID4gPg0KPiA+ID4gK8KgIMKgIMKgLyogdGVzdCBidWxrIGFsbG9j YXRpb24gYW5kIGZyZWVpbmcgKi8NCj4gPiA+ICvCoCDCoCDCoGlmICh0ZXN0X3BrdG1idWZfcG9v bF9idWxrKCkgPCAwKSB7DQo+ID4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqBwcmludGYoInRlc3Rf cGt0bWJ1Zl9wb29sX2J1bGsoKSBmYWlsZWRcbiIpOw0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKg IMKgcmV0dXJuIC0xOw0KPiA+ID4gK8KgIMKgIMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgIMKgIMKg Lyogb25jZSBhZ2FpbiB0byBlbnN1cmUgYWxsIG1idWZzIHdlcmUgZnJlZWQgKi8NCj4gPiA+ICvC oCDCoCDCoGlmICh0ZXN0X3BrdG1idWZfcG9vbF9idWxrKCkgPCAwKSB7DQo+ID4gPiArwqAgwqAg wqAgwqAgwqAgwqAgwqBwcmludGYoInRlc3RfcGt0bWJ1Zl9wb29sX2J1bGsoKSBmYWlsZWRcbiIp Ow0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIC0xOw0KPiA+ID4gK8KgIMKgIMKg fQ0KPiA+ID4gKw0KPiA+ID7CoCDCoCDCoCDCoC8qIHRlc3QgdGhhdCB0aGUgcG9pbnRlciB0byB0 aGUgZGF0YSBvbiBhIHBhY2tldCBtYnVmIGlzIHNldCBwcm9wZXJseSAqLw0KPiA+ID7CoCDCoCDC oCDCoGlmICh0ZXN0X3BrdG1idWZfcG9vbF9wdHIoKSA8IDApIHsNCj4gPiA+wqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBwcmludGYoInRlc3RfcGt0bWJ1Zl9wb29sX3B0cigpIGZhaWxlZFxuIik7DQo+ ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9tYnVmL3J0ZV9tYnVmLmggYi9saWIvbGlicnRl X21idWYvcnRlX21idWYuaA0KPiA+ID4gaW5kZXggMTdiYTc5MS4uOTk1MjM3ZCAxMDA2NDQNCj4g PiA+IC0tLSBhL2xpYi9saWJydGVfbWJ1Zi9ydGVfbWJ1Zi5oDQo+ID4gPiArKysgYi9saWIvbGli cnRlX21idWYvcnRlX21idWYuaA0KPiA+ID4gQEAgLTgyNSw2ICs4MjUsOTUgQEAgc3RhdGljIGlu bGluZSB2b2lkIHJ0ZV9wa3RtYnVmX2ZyZWUoc3RydWN0IHJ0ZV9tYnVmICptKQ0KPiA+ID7CoCB9 DQo+ID4gPg0KPiA+ID7CoCAvKioNCj4gPiA+ICsgKiBBbGxvY2F0ZSBhIGJ1bGsgb2YgbWJ1ZnMs IGluaXRpYXRlIHJlZmNudCBhbmQgcmVzZXRzDQo+ID4gPiArICoNCj4gPiA+ICsgKiBAcGFyYW0g cG9vbA0KPiA+ID4gKyAqwqAgwqAgbWVtb3J5IHBvb2wgdG8gYWxsb2NhdGUgZnJvbQ0KPiA+ID4g KyAqIEBwYXJhbSBtYnVmcw0KPiA+ID4gKyAqwqAgwqAgQXJyYXkgb2YgcG9pbnRlcnMgdG8gbWJ1 Zg0KPiA+ID4gKyAqIEBwYXJhbSBjb3VudA0KPiA+ID4gKyAqwqAgwqAgQXJyYXkgc2l6ZQ0KPiA+ ID4gKyAqLw0KPiA+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHJ0ZV9wa3RtYnVmX2FsbG9jX2J1bGso c3RydWN0IHJ0ZV9tZW1wb29sICpwb29sLA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0cnVjdCBydGVfbWJ1ZiAqKm1idWZz LA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHVuc2lnbmVkIGNvdW50KQ0KPiA+ID4gK3sNCj4gPiA+ICvCoCDCoCDCoHVuc2ln bmVkIGlkeDsNCj4gPiA+ICvCoCDCoCDCoGludCByYyA9IDA7DQo+ID4gPiArDQo+ID4gPiArwqAg wqAgwqByYyA9IHJ0ZV9tZW1wb29sX2dldF9idWxrKHBvb2wsICh2b2lkICoqKW1idWZzLCBjb3Vu dCk7DQo+ID4gPiArwqAgwqAgwqBpZiAodW5saWtlbHkocmMpKQ0KPiA+ID4gK8KgIMKgIMKgIMKg IMKgIMKgIMKgcmV0dXJuIHJjOw0KPiA+ID4gKw0KPiA+ID4gK8KgIMKgIMKgZm9yIChpZHggPSAw OyBpZHggPCBjb3VudDsgaWR4KyspIHsNCj4gPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoFJURV9N QlVGX0FTU0VSVChydGVfbWJ1Zl9yZWZjbnRfcmVhZChtYnVmc1tpZHhdKSA9PSAwKTsNCj4gPiA+ ICvCoCDCoCDCoCDCoCDCoCDCoCDCoHJ0ZV9tYnVmX3JlZmNudF9zZXQobWJ1ZnNbaWR4XSwgMSk7 DQo+ID4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqBydGVfcGt0bWJ1Zl9yZXNldChtYnVmc1tpZHhd KTsNCj4gPiA+ICvCoCDCoCDCoH0NCj4gPiA+ICvCoCDCoCDCoHJldHVybiByYzsNCj4gPiA+ICt9 DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogRnJlZSBhIGJ1bGsgb2YgbWJ1ZnMgaW50 byBpdHMgb3JpZ2luYWwgbWVtcG9vbC4NCj4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMg cmVmY250IGVxdWFscyAxDQo+ID4gPiArICogYXMgd2VsbCBhcyB0aGUgZnJlZWQgbWJ1ZnMgYXJl IGRpcmVjdA0KPiA+IEkgdGhpbmsgeW91ciBmb3Jnb3QgdG8gbWVudGlvbiBpbiBjb21tZW50cyBv bmUgbW9yZSByZXF1aXJlbWVudCBmb3IgdGhhdCBmdW5jdGlvbjoNCj4gPiBhbGwgbWJ1ZnMgaGF2 ZSB0byBiZSBmcm9tIHRoZSBzYW1lIG1lbXBvb2wuDQo+ID4NCj4gPiA+ICsgKg0KPiA+ID4gKyAq IEBwYXJhbSBtYnVmcw0KPiA+ID4gKyAqwqAgwqAgQXJyYXkgb2YgcG9pbnRlcnMgdG8gbWJ1Zg0K PiA+ID4gKyAqIEBwYXJhbSBjb3VudA0KPiA+ID4gKyAqwqAgwqAgQXJyYXkgc2l6ZQ0KPiA+ID4g KyAqLw0KPiA+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBydGVfcGt0bWJ1Zl9idWxrX2ZyZWUoc3Ry dWN0IHJ0ZV9tYnVmICoqbWJ1ZnMsDQo+ID4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdW5zaWduZWQgY291bnQpDQo+ID4gPiArew0K PiA+ID4gK8KgIMKgIMKgdW5zaWduZWQgaWR4Ow0KPiA+ID4gKw0KPiA+ID4gK8KgIMKgIMKgUlRF X01CVUZfQVNTRVJUKGNvdW50ID4gMCk7DQo+ID4gPiArDQo+ID4gPiArwqAgwqAgwqBmb3IgKGlk eCA9IDA7IGlkeCA8IGNvdW50OyBpZHgrKykgew0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKg cnRlX21idWZfcmVmY250X3VwZGF0ZShtYnVmc1tpZHhdLCAtMSk7DQo+ID4NCj4gPiBZb3UgY2Fu IGRvIGp1c3Q6DQo+ID4gcnRlX21idWZfcmVmY250X3NldChtLCAwKTsNCj4gPiBoZXJlIGFuZCBt b3ZlIHlvdXIgYXNzZXJ0IGFib3ZlIGl0Lg0KPiA+IFNvbWV0aGluZyBsaWtlOg0KPiA+IFJURV9N QlVGX0FTU0VSVChydGVfbWJ1Zl9yZWZjbnRfcmVhZChtYnVmc1tpZHhdKSA9PSAxKTsNCj4gPiBy dGVfbWJ1Zl9yZWZjbnRfc2V0KG0sIDApOw0KPiA+DQo+ID4gQWxzbyBwcm9iYWJseSB3b3VsZCBi ZSBhIGdvb2QgdGhpbmcgdG8gYWRkIG9uZSBtb3JlIGFzc2VydCBoZXJlLA0KPiA+IHNvbWV0aGlu ZyBsaWtlOg0KPiA+IFJURV9NQlVGX0FTU0VSVChtYnVmc1tpZHhdLT5wb29sID09IG11ZnNbMF0t PnBvb2wpOw0KPiA+DQo+ID4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqBSVEVfTUJVRl9BU1NFUlQo cnRlX21idWZfcmVmY250X3JlYWQobWJ1ZnNbaWR4XSkgPT0gMCk7DQo+ID4gPiArwqAgwqAgwqB9 DQo+ID4gPiArwqAgwqAgwqBydGVfbWVtcG9vbF9wdXRfYnVsayhtYnVmc1swXS0+cG9vbCwgKHZv aWQgKiopbWJ1ZnMsIGNvdW50KTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4g PiArICogRnJlZSBjaGFpbmVkIChzY2F0dGVyZWQpIG1idWZzIGludG8gaXRzIG9yaWdpbmFsIG1l bXBvb2wocykuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBAcGFyYW0gaGVhZA0KPiA+ID4gKyAqwqAg wqAgVGhlIGhlYWQgb2YgbWJ1ZnMgdG8gYmUgZnJlZWQgY2hhaW4uIE11c3Qgbm90IGJlIE5VTEwN Cj4gPiA+ICsgKi8NCj4gPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgcnRlX3BrdG1idWZfZnJlZV9j aGFpbihzdHJ1Y3QgcnRlX21idWYgKmhlYWQpDQo+ID4gPiArew0KPiA+ID4gK8KgIMKgIMKgc3Ry dWN0IHJ0ZV9tYnVmICptYnVmc1toZWFkLT5uYl9zZWdzXTsNCj4gPiA+ICvCoCDCoCDCoHVuc2ln bmVkIG1idWZzX2NvdW50ID0gMDsNCj4gPiA+ICvCoCDCoCDCoHN0cnVjdCBydGVfbWJ1ZiAqbmV4 dDsNCj4gPiA+ICsNCj4gPiA+ICvCoCDCoCDCoHdoaWxlIChoZWFkKSB7DQo+ID4gPiArwqAgwqAg wqAgwqAgwqAgwqAgwqBuZXh0ID0gaGVhZC0+bmV4dDsNCj4gPiA+ICvCoCDCoCDCoCDCoCDCoCDC oCDCoGhlYWQtPm5leHQgPSBOVUxMOw0KPiA+DQo+ID4gU2hvdWxkbid0IHRoZSBsaW5lIGFib3Zl IGJlIGluc2lkZSBpZiAoaGVhZCAhPSBOVUxMKSB7Li4ufSBibG9jaz8NCj4gPg0KPiA+ID4gK8Kg IMKgIMKgIMKgIMKgIMKgIMKgaGVhZCA9IF9fcnRlX3BrdG1idWZfcHJlZnJlZV9zZWcoaGVhZCk7 DQo+ID4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiAobGlrZWx5KGhlYWQgIT0gTlVMTCkpIHsN Cj4gPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFJURV9NQlVGX0FTU0VSVChy dGVfbWJ1Zl9yZWZjbnRfcmVhZChoZWFkKSA9PSAwKTsNCj4gPg0KPiA+IEkgZG9uJ3QgdGhpbmsg dGhlcmUgaXMgYW55IHVzZSBvZiB0aGUgYXNzZXJ0IGFib3ZlLg0KPiA+IElmIHByZWZyZWVfc2Vn IHJldHVybnMgbm9uLU5VTEwgdmFsdWUsIGl0IHNldHMgcmVmY250IHRvIDAgZm9yIHRoYXQgbWJ1 Zi4NCj4gPg0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgKGxpa2Vs eSgoIW1idWZzX2NvdW50KSB8fA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIChoZWFkLT5wb29sID09IG1idWZzWzBdLT5wb29sKSkpDQo+ID4g PiArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBtYnVmc1ttYnVm c19jb3VudCsrXSA9IGhlYWQ7DQo+ID4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBlbHNlIHsNCj4gPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoHJ0ZV9tZW1wb29sX3B1dF9idWxrKG1idWZzWzBdLT5wb29sLA0KPiA+ID4gK8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgICh2b2lkICoqKW1idWZzLA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG1idWZz X2NvdW50KTsNCj4gPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoG1idWZzX2NvdW50ID0gMDsNCj4gPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoH0NCj4gPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoH0NCj4gPiA+ICvCoCDCoCDCoCDCoCDC oCDCoCDCoGhlYWQgPSBuZXh0Ow0KPiA+ID4gK8KgIMKgIMKgfQ0KPiA+ID4gK8KgIMKgIMKgaWYg KG1idWZzX2NvdW50ID4gMCkNCj4gPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoHJ0ZV9tZW1wb29s X3B1dF9idWxrKG1idWZzWzBdLT5wb29sLA0KPiA+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICh2b2lkICoqKW1idWZzLA0KPiA+ID4gK8KgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG1idWZzX2NvdW50 KTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPsKgIMKgKiBDcmVhdGVzIGEg ImNsb25lIiBvZiB0aGUgZ2l2ZW4gcGFja2V0IG1idWYuDQo+ID4gPsKgIMKgKg0KPiA+ID7CoCDC oCogV2Fsa3MgdGhyb3VnaCBhbGwgc2VnbWVudHMgb2YgdGhlIGdpdmVuIHBhY2tldCBtYnVmLCBh bmQgZm9yIGVhY2ggb2YgdGhlbToNCj4gPiA+IC0tDQo+ID4gPiAxLjcuOS41DQoNCg==