From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20069.outbound.protection.outlook.com [40.107.2.69]) by dpdk.org (Postfix) with ESMTP id 6E9151C868 for ; Wed, 4 Apr 2018 20:10:48 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=EJT6Vs/1A2fb13hHQrRmWY4tFOtFVuhZSMXaGZKzgKM=; b=lo2f1AU6tEJp6EWOmNEvaq8tKXTT7NB1WO0xzj85KWdT+d4BJj8gqRxeZA1t5MwKfXv5pbtIIhld/bZtpr14Wgf3LjQmvXDhoD/0gcJrceUB8nuG6O0R5+kT/5kNqu/+5Z0kecyFLYxe3uzyXbqvnj6BH0mjvNInq3u+nnafO1U= Received: from AM4PR0501MB2657.eurprd05.prod.outlook.com (10.172.215.19) by AM4PR0501MB2225.eurprd05.prod.outlook.com (10.165.82.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.653.12; Wed, 4 Apr 2018 18:10:46 +0000 Received: from AM4PR0501MB2657.eurprd05.prod.outlook.com ([fe80::6885:c169:afcb:37e6]) by AM4PR0501MB2657.eurprd05.prod.outlook.com ([fe80::6885:c169:afcb:37e6%7]) with mapi id 15.20.0653.012; Wed, 4 Apr 2018 18:10:46 +0000 From: Matan Azrad To: Pavan Nikhilesh , "jerin.jacob@caviumnetworks.com" , "keith.wiles@intel.com" , Thomas Monjalon CC: "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH v3 1/2] eal: add API to align integer to previous power of 2 Thread-Index: AQHTy/4PDze0s6BzekuJxdjllw+CNqPwxeaQgAAJ2wCAAAOT4IAAD++AgAACtMA= Date: Wed, 4 Apr 2018 18:10:46 +0000 Message-ID: References: <20180217104934.17291-1-pbhagavatula@caviumnetworks.com> <20180404101606.5156-1-pbhagavatula@caviumnetworks.com> <20180404164207.GA21153@ltp-pvn> <20180404175156.GA5416@ltp-pvn> In-Reply-To: <20180404175156.GA5416@ltp-pvn> Accept-Language: en-US, he-IL Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=matan@mellanox.com; x-originating-ip: [85.64.136.190] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM4PR0501MB2225; 7:p61urnRpFBFR+1DQbROe9Lf/HyC5Gk8oceHiEoA5RJX3dCFd/kbHBK4BbVZ02dlNEdsa4R6mkfrYfGeJx4yPSq0J4FTeLR213mFkE0n+nNY+8n6PDjcqna4FrzpGFkj5NrlZznasCHCJRh6rn1BLl2FQozSrLsSdF6eUZzUr2M1E6RBGS5Q5HSseQebaFaXLZWAA5/9XXUnbjuHNW0iVEB7ZklmnUTDiqsBZCZK47DigOnz69RqldVzPKFCfPDEm x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 949ae06d-0dc2-49e8-1e5c-08d59a576384 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(3008032)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:AM4PR0501MB2225; x-ms-traffictypediagnostic: AM4PR0501MB2225: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(244540007438412)(189930954265078)(45079756050767); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(10201501046)(93006095)(93001095)(3002001)(3231221)(944501327)(52105095)(6055026)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123558120)(20161123562045)(6072148)(201708071742011); SRVR:AM4PR0501MB2225; BCL:0; PCL:0; RULEID:; SRVR:AM4PR0501MB2225; x-forefront-prvs: 0632519F33 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(366004)(39380400002)(376002)(396003)(346002)(189003)(199004)(55016002)(2501003)(25786009)(8676002)(7736002)(74316002)(2201001)(6306002)(97736004)(229853002)(2900100001)(81166006)(305945005)(93886005)(9686003)(476003)(86362001)(486006)(316002)(4326008)(478600001)(81156014)(53936002)(966005)(110136005)(105586002)(8936002)(6506007)(6436002)(33656002)(26005)(446003)(11346002)(186003)(99286004)(7696005)(14454004)(102836004)(106356001)(3846002)(66066001)(68736007)(2906002)(5250100002)(6116002)(3660700001)(6246003)(5660300001)(76176011)(3280700002)(45080400002)(357404004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR0501MB2225; H:AM4PR0501MB2657.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: w8BSJ8cifxo1upFMdy96bzM5O+p82kTFnAdendZIXgYLRmvcsPYjBtj2F0Gly5UT6VJacFdHkBbSyeZ0k8lihb0ruZWQsjjvW8jjxHI4X7ykw2p5vO5HzacoiU8wxFsUxfsQuDAK/1qgZiFmpR4q//1VelK0vZXPnagK0vuAXPcJK10rl5W+ZOmzRpNhah6Xh6TFBM6gLz9RE4/2QkWhKSLnuno3mGbTnVgGz8Bww1DzDSG0qX6/VbzibANFMTEUHEBcAl+afX6X9M16FI2ILUA3eAl3MNlKRUQcdPiNp+RMG7sKyT6aUeM/tVCFZOJy0lUAYCUMo8FooYxaIVwwgfWQNUZVGs9M+LKoNFsTV3sTJukYUFXP8M/wSTfgygIM+DongFZF1O/3Q2R0WdLViOvDulogw1I/Eh4D2fM4R9s= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 949ae06d-0dc2-49e8-1e5c-08d59a576384 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Apr 2018 18:10:46.4134 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0501MB2225 Subject: Re: [dpdk-dev] [PATCH v3 1/2] eal: add API to align integer to previous power of 2 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, 04 Apr 2018 18:10:48 -0000 SGkgUGF2YW4NCg0KRnJvbTogUGF2YW4gTmlraGlsZXNoLCBXZWRuZXNkYXksIEFwcmlsIDQsIDIw MTggODo1MiBQTQ0KPiBPbiBXZWQsIEFwciAwNCwgMjAxOCBhdCAwNToxMToyMlBNICswMDAwLCBN YXRhbiBBenJhZCB3cm90ZToNCj4gPg0KPiA+DQo+ID4gRnJvbTogUGF2YW4gTmlraGlsZXNoLCBX ZWRuZXNkYXksIEFwcmlsIDQsIDIwMTggNzo0MiBQTQ0KPiA+ID4gSGkgTWF0YW4sDQo+ID4gPg0K PiA+ID4gT24gV2VkLCBBcHIgMDQsIDIwMTggYXQgMDQ6MTA6MzZQTSArMDAwMCwgTWF0YW4gQXpy YWQgd3JvdGU6DQo+ID4gPiA+IEhpIFBhdmFuDQo+ID4gPiA+DQo+ID4gPiA+IFNob3VsZG4ndCB0 aGUgbmV3IEFQSXMgYmUgdGFnZ2VkIHdpdGggdGhlIGV4cGVyaW1lbnRhbCB0YWcgYXMgYWdyZWVk Pw0KPiA+ID4NCj4gPiA+IENhbid0IHRhZyBpdCBleHBlcmltZW50YWwgYXMgaXQgY2F1c2VzIGN5 Y2xpYyBkZXBlbmRlbmN5IChuZWVkIHRvDQo+ID4gPiBpbmNsdWRlIHJ0ZV9jb21wYWN0LmgpLg0K PiA+DQo+ID4gWW91IHByb2JhYmx5IG1lYW4gcnRlX2NvbXBhdC5oLg0KPiA+DQo+ID4gSXQgaXMg b2sgdG8gYWRkIGl0LCB3aGF0IGlzIHRoZSBpc3N1ZSB3aXRoIHRoYXQ/DQo+IA0KPiBDaGFuZ2Ug c2V0Og0KPiANCj4gLS0tIGEvbGliL2xpYnJ0ZV9lYWwvY29tbW9uL2luY2x1ZGUvcnRlX2NvbW1v bi5oDQo+ICsrKyBiL2xpYi9saWJydGVfZWFsL2NvbW1vbi9pbmNsdWRlL3J0ZV9jb21tb24uaA0K PiBAQCAtMjMsNiArMjMsNyBAQCBleHRlcm4gIkMiIHsNCj4gICNpbmNsdWRlIDxsaW1pdHMuaD4N Cj4gDQo+ICAjaW5jbHVkZSA8cnRlX2NvbmZpZy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9jb21wYXQu aD4NCj4gDQo+ICAjaWZuZGVmIHR5cGVvZg0KPiAgI2RlZmluZSB0eXBlb2YgX190eXBlb2ZfXw0K PiBAQCAtMjMzLDcgKzIzNCw3IEBAIGV4dGVybiBpbnQgUlRFX0JVSUxEX0JVR19PTl9kZXRlY3Rl ZF9lcnJvcjsNCj4gICAqIEByZXR1cm4NCj4gICAqICAgIFRoZSBjb21iaW5lZCB2YWx1ZS4NCj4g ICAqLw0KPiAtc3RhdGljIGlubGluZSB1aW50MzJfdA0KPiArc3RhdGljIGlubGluZSB1aW50MzJf dCBfX3J0ZV9leHBlcmltZW50YWwNCj4gIHJ0ZV9jb21iaW5lMzJtczFiKHJlZ2lzdGVyIHVpbnQz Ml90IHgpDQo+ICB7DQo+ICAgICAgICAgeCB8PSB4ID4+IDE7DQo+IEBAIC0yNDUsNiArMjQ2LDEw IEBAIHJ0ZV9jb21iaW5lMzJtczFiKHJlZ2lzdGVyIHVpbnQzMl90IHgpDQo+ICAgICAgICAgcmV0 dXJuIHg7DQo+ICB9DQo+IA0KPiBDYXVzZXM6DQo+IA0KPiBJbiBmaWxlIGluY2x1ZGVkIGZyb20N Cj4gL2hvbWUvcGF2YW4vV29yay9jbGVhbi9kcGRrL2J1aWxkL2luY2x1ZGUvcnRlX2NvbXBhdC5o Ojg6MCwNCj4gICAgICAgICAgICAgICAgICBmcm9tDQo+IC9ob21lL3BhdmFuL1dvcmsvY2xlYW4v ZHBkay9saWIvbGlicnRlX2VhbC9saW51eGFwcC9lYWwvZWFsLmM6Mjc6DQo+IC9ob21lL3BhdmFu L1dvcmsvY2xlYW4vZHBkay9idWlsZC9pbmNsdWRlL3J0ZV9jb21tb24uaDoyMzg6MTogZXJyb3I6 DQo+IGV4cGVjdGVkIOKAmD3igJksIOKAmCzigJksIOKAmDvigJksIOKAmGFzbeKAmSBvciDigJhf X2F0dHJpYnV0ZV9f4oCZIGJlZm9yZSDigJhydGVfY29tYmluZTMybXMxYuKAmQ0KPiAgcnRlX2Nv bWJpbmUzMm1zMWIocmVnaXN0ZXIgdWludDMyX3QgeCkNCj4gIF5+fn5+fn5+fn5+fn5+fn5+DQo+ IC9ob21lL3BhdmFuL1dvcmsvY2xlYW4vZHBkay9idWlsZC9pbmNsdWRlL3J0ZV9jb21tb24uaDog SW4gZnVuY3Rpb24NCj4g4oCYcnRlX2FsaWduMzJwb3cy4oCZOg0KPiAvaG9tZS9wYXZhbi9Xb3Jr L2NsZWFuL2RwZGsvYnVpbGQvaW5jbHVkZS9ydGVfY29tbW9uLmg6MzAzOjY6IGVycm9yOg0KPiBp bXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiDigJhydGVfY29tYmluZTMybXMxYuKAmTsg ZGlkIHlvdSBtZWFuDQo+IOKAmHJ0ZV9jb21iaW5lNjRtczFi4oCZPyBbLVdlcnJvcj1pbXBsaWNp dC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0NCj4gICB4ID0gcnRlX2NvbWJpbmUzMm1zMWIoeCk7DQo+ ICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+DQo+ICAgICAgIHJ0ZV9jb21iaW5lNjRtczFiDQo+IC9o b21lL3BhdmFuL1dvcmsvY2xlYW4vZHBkay9idWlsZC9pbmNsdWRlL3J0ZV9jb21tb24uaDozMDM6 NjogZXJyb3I6DQo+IG5lc3RlZCBleHRlcm4gZGVjbGFyYXRpb24gb2Yg4oCYcnRlX2NvbWJpbmUz Mm1zMWLigJkgWy1XZXJyb3I9bmVzdGVkLQ0KPiBleHRlcm5zXQ0KPiANCj4gQ2F1c2U6DQo+IA0K PiAtLS0gYS9saWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9ydGVfY29tbW9uLmgNCj4gKysr IGIvbGliL2xpYnJ0ZV9lYWwvY29tbW9uL2luY2x1ZGUvcnRlX2NvbW1vbi5oDQo+IEBAIC0yNDUs NiArMjQ2LDEwIEBAIHJ0ZV9jb21iaW5lMzJtczFiKHJlZ2lzdGVyIHVpbnQzMl90IHgpDQo+ICAg ICAgICAgcmV0dXJuIHg7DQo+ICB9DQo+IA0KPiArI2lmbmRlZiBfX3J0ZV9leHBlcmltZW50YWwN Cj4gKyNlcnJvciAiX19ydGVfZXhwZXJpbWVudGFsIGlzIG5vdCBkZWZpbmVkISINCj4gKyNlbmRp Zg0KPiArDQo+IA0KPiAvaG9tZS9wYXZhbi9Xb3JrL2NsZWFuL2RwZGsvYnVpbGQvaW5jbHVkZS9y dGVfY29tbW9uLmg6MjUwOjk6IGVycm9yOg0KPiAjZXJyb3IgIl9fcnRlX2V4cGVyaW1lbnRhbCBp cyBub3QgZGVmaW5lZCEiDQo+IA0KPiA+DQo+ID4gPiBCZXNpZGVzIGl0J3MgYSBzaW1wbGUgcHJv dmVuIG1hdGggQVBJIEkgZG9uJ3QgdGhpbmsgaXQgd2lsbCBjaGFuZ2UNCj4gPiA+IGFueXRpbWUg c29vbi4NCj4gPg0KPiA+IEl0IGhhcyBhbHJlYWR5IGRpc2N1c3NlZDoNCj4gPg0KPiBodHRwczov L2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJG JTJGZHANCj4gZA0KPiA+DQo+IGsub3JnJTJGZGV2JTJGcGF0Y2h3b3JrJTJGcGF0Y2glMkYzNTIx MSUyRiZkYXRhPTAyJTdDMDElN0NtYXRhDQo+IG4lNDBtZWxsDQo+ID4NCj4gYW5veC5jb20lN0Nm OTQwYmEyNDg0MTM0OTYxNDM1NzA4ZDU5YTU0Y2U0MSU3Q2E2NTI5NzFjN2QyZTRkOWJhNg0KPiBh NGQxNDkNCj4gPg0KPiAyNTZmNDYxYiU3QzAlN0MwJTdDNjM2NTg0NjExMzk0OTgxMDA3JnNkYXRh PWpPN2dMa1JoWlZ2NmdTcVR5enNLDQo+IEsyTGIzag0KPiA+IDl2c1VnMiUyRlBLWkRzMlhkYWcl M0QmcmVzZXJ2ZWQ9MA0KPiA+DQo+ID4gSSB0aGluayB5b3UgbmVlZCB0byBhZGQgaXQgYW55d2F5 Lg0KPiA+DQo+ID4gPiBUaGFua3MsDQo+ID4gPiBQYXZhbg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ ID4gQmVzaWRlcyB0aGF0LA0KPiA+ID4gPiBBY2tlZC1ieTogTWF0YW4gQXpyYWQgPG1hdGFuQG1l bGxhbm94LmNvbT4NCj4gPiA+ID4NCj4gPiA+ID4gRnJvbTogUGF2YW4gTmlraGlsZXNoLCBXZWRu ZXNkYXksIEFwcmlsIDQsIDIwMTggMToxNiBQTQ0KPiA+ID4gPiA+IEFkZCAzMmIgYW5kIDY0YiBB UEkncyB0byBhbGlnbiB0aGUgZ2l2ZW4gaW50ZWdlciB0byB0aGUgcHJldmlvdXMNCj4gPiA+ID4g PiBwb3dlciBvZg0KPiA+ID4gMi4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6 IFBhdmFuIE5pa2hpbGVzaA0KPiA8cGJoYWdhdmF0dWxhQGNhdml1bW5ldHdvcmtzLmNvbT4NCj4g PiA+ID4gPiAtLS0NCj4gPiA+ID4gPiAgdjMgQ2hhbmdlczoNCj4gPiA+ID4gPiAgLSBNb3ZlIGNv bW1vbmx5IHVzZWQgY29kZSB0byBydGVfY29tYmluZSgzMi82NCltczFiIHNvIHRoYXQgaXQNCj4g PiA+ID4gPiBjYW4gYmUgcmV1c2VkLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIHYyIENoYW5nZXM6 DQo+ID4gPiA+ID4gIC0gTW9kaWZpZWQgYXBpIG5hbWUgdG8gYHJ0ZV9hbGlnbigzMi82NClwcmV2 cG93MmAgZnJvbQ0KPiA+ID4gPiA+IGBydGVfYWxpZ24oMzIvNjQpbG93cG93MmAuDQo+ID4gPiA+ ID4gIC0gY29ycmVjdGVkIGZ1Y3Rpb24gdG8gcmV0dXJuIGlmIHRoZSBpbnRlZ2VyIGlzIGFscmVh ZHkgYWxpZ25lZA0KPiA+ID4gPiA+IHRvICBwb3dlciBvZg0KPiA+ID4gMi4NCj4gPiA+ID4gPg0K PiA+ID4gPiA+ICBsaWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9ydGVfY29tbW9uLmggfCA5 Mg0KPiA+ID4gPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQ0KPiA+ID4gPiA+ICAx IGZpbGUgY2hhbmdlZCwgODEgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pDQo+ID4gPiA+ ID4NCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9lYWwvY29tbW9uL2luY2x1ZGUv cnRlX2NvbW1vbi5oDQo+ID4gPiA+ID4gYi9saWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9y dGVfY29tbW9uLmgNCj4gPiA+ID4gPiBpbmRleCBjNzgwM2U0MWMuLjdlMTQ3ZGNmMiAxMDA2NDQN Cj4gPiA+ID4gPiAtLS0gYS9saWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9ydGVfY29tbW9u LmgNCj4gPiA+ID4gPiArKysgYi9saWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9ydGVfY29t bW9uLmgNCj4gPiA+ID4gPiBAQCAtMjIzLDYgKzIyMyw1MSBAQCBleHRlcm4gaW50DQo+ID4gPiBS VEVfQlVJTERfQlVHX09OX2RldGVjdGVkX2Vycm9yOyAgfQ0KPiA+ID4gPiA+IHdoaWxlKDApICAj ZW5kaWYNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICsvKioNCj4gPiA+ID4gPiArICogQ29tYmluZXMg MzJiIGlucHV0cyBtb3N0IHNpZ25pZmljYW50IHNldCBiaXRzIGludG8gdGhlIGxlYXN0DQo+ID4g PiA+ID4gKyAqIHNpZ25pZmljYW50IGJpdHMgdG8gY29uc3RydWN0IGEgdmFsdWUgd2l0aCB0aGUg c2FtZSBNU0JzIGFzDQo+ID4gPiA+ID4gK3gNCj4gPiA+ID4gPiArICogYnV0IGFsbCAxJ3MgdW5k ZXIgaXQuDQo+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSB4DQo+ID4gPiA+ID4g KyAqICAgIFRoZSBpbnRlZ2VyIHdob3NlIE1TQnMgbmVlZCB0byBiZSBjb21iaW5lZCB3aXRoIGl0 cyBMU0JzDQo+ID4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gPiArICogICAgVGhlIGNvbWJp bmVkIHZhbHVlLg0KPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiArc3RhdGljIGlubGluZSB1aW50 MzJfdA0KPiA+ID4gPiA+ICtydGVfY29tYmluZTMybXMxYihyZWdpc3RlciB1aW50MzJfdCB4KSB7 DQo+ID4gPiA+ID4gKwl4IHw9IHggPj4gMTsNCj4gPiA+ID4gPiArCXggfD0geCA+PiAyOw0KPiA+ ID4gPiA+ICsJeCB8PSB4ID4+IDQ7DQo+ID4gPiA+ID4gKwl4IHw9IHggPj4gODsNCj4gPiA+ID4g PiArCXggfD0geCA+PiAxNjsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlyZXR1cm4geDsNCj4g PiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4gKyAqIENv bWJpbmVzIDY0YiBpbnB1dHMgbW9zdCBzaWduaWZpY2FudCBzZXQgYml0cyBpbnRvIHRoZSBsZWFz dA0KPiA+ID4gPiA+ICsgKiBzaWduaWZpY2FudCBiaXRzIHRvIGNvbnN0cnVjdCBhIHZhbHVlIHdp dGggdGhlIHNhbWUgTVNCcyBhcw0KPiA+ID4gPiA+ICt4DQo+ID4gPiA+ID4gKyAqIGJ1dCBhbGwg MSdzIHVuZGVyIGl0Lg0KPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gdg0KPiA+ ID4gPiA+ICsgKiAgICBUaGUgaW50ZWdlciB3aG9zZSBNU0JzIG5lZWQgdG8gYmUgY29tYmluZWQg d2l0aCBpdHMgTFNCcw0KPiA+ID4gPiA+ICsgKiBAcmV0dXJuDQo+ID4gPiA+ID4gKyAqICAgIFRo ZSBjb21iaW5lZCB2YWx1ZS4NCj4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gK3N0YXRpYyBpbmxp bmUgdWludDY0X3QNCj4gPiA+ID4gPiArcnRlX2NvbWJpbmU2NG1zMWIocmVnaXN0ZXIgdWludDY0 X3Qgdikgew0KPiA+ID4gPiA+ICsJdiB8PSB2ID4+IDE7DQo+ID4gPiA+ID4gKwl2IHw9IHYgPj4g MjsNCj4gPiA+ID4gPiArCXYgfD0gdiA+PiA0Ow0KPiA+ID4gPiA+ICsJdiB8PSB2ID4+IDg7DQo+ ID4gPiA+ID4gKwl2IHw9IHYgPj4gMTY7DQo+ID4gPiA+ID4gKwl2IHw9IHYgPj4gMzI7DQo+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ICsJcmV0dXJuIHY7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gIC8qKioqKioqKioqKiBNYWNyb3MgdG8gd29yayB3aXRoIHBvd2VycyBvZiAy ICoqKioqKioqLw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIC8qKg0KPiA+ID4gPiA+IEBAIC0yNTAs MTUgKzI5NSwyOCBAQCBzdGF0aWMgaW5saW5lIHVpbnQzMl90DQo+ID4gPiA+ID4gcnRlX2FsaWdu MzJwb3cyKHVpbnQzMl90DQo+ID4gPiB4KSAgew0KPiA+ID4gPiA+ICAJeC0tOw0KPiA+ID4gPiA+ IC0JeCB8PSB4ID4+IDE7DQo+ID4gPiA+ID4gLQl4IHw9IHggPj4gMjsNCj4gPiA+ID4gPiAtCXgg fD0geCA+PiA0Ow0KPiA+ID4gPiA+IC0JeCB8PSB4ID4+IDg7DQo+ID4gPiA+ID4gLQl4IHw9IHgg Pj4gMTY7DQo+ID4gPiA+ID4gKwl4ID0gcnRlX2NvbWJpbmUzMm1zMWIoeCk7DQo+ID4gPiA+ID4N Cj4gPiA+ID4gPiAgCXJldHVybiB4ICsgMTsNCj4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+DQo+ID4g PiA+ID4gKy8qKg0KPiA+ID4gPiA+ICsgKiBBbGlnbnMgaW5wdXQgcGFyYW1ldGVyIHRvIHRoZSBw cmV2aW91cyBwb3dlciBvZiAyDQo+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSB4 DQo+ID4gPiA+ID4gKyAqICAgVGhlIGludGVnZXIgdmFsdWUgdG8gYWxnaW4NCj4gPiA+ID4gPiAr ICoNCj4gPiA+ID4gPiArICogQHJldHVybg0KPiA+ID4gPiA+ICsgKiAgIElucHV0IHBhcmFtZXRl ciBhbGlnbmVkIHRvIHRoZSBwcmV2aW91cyBwb3dlciBvZiAyDQo+ID4gPiA+ID4gKyAqLw0KPiA+ ID4gPiA+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90DQo+ID4gPiA+ID4gK3J0ZV9hbGlnbjMycHJl dnBvdzIodWludDMyX3QgeCkgew0KPiA+ID4gPiA+ICsJeCA9IHJ0ZV9jb21iaW5lMzJtczFiKHgp Ow0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCXJldHVybiB4IC0gKHggPj4gMSk7DQo+ID4gPiA+ ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gIC8qKg0KPiA+ID4gPiA+ICAgKiBBbGlnbnMg NjRiIGlucHV0IHBhcmFtZXRlciB0byB0aGUgbmV4dCBwb3dlciBvZiAyDQo+ID4gPiA+ID4gICAq DQo+ID4gPiA+ID4gQEAgLTI3MiwxNiArMzMwLDI4IEBAIHN0YXRpYyBpbmxpbmUgdWludDY0X3QN Cj4gPiA+ID4gPiBydGVfYWxpZ242NHBvdzIodWludDY0X3QNCj4gPiA+IHYpICB7DQo+ID4gPiA+ ID4gIAl2LS07DQo+ID4gPiA+ID4gLQl2IHw9IHYgPj4gMTsNCj4gPiA+ID4gPiAtCXYgfD0gdiA+ PiAyOw0KPiA+ID4gPiA+IC0JdiB8PSB2ID4+IDQ7DQo+ID4gPiA+ID4gLQl2IHw9IHYgPj4gODsN Cj4gPiA+ID4gPiAtCXYgfD0gdiA+PiAxNjsNCj4gPiA+ID4gPiAtCXYgfD0gdiA+PiAzMjsNCj4g PiA+ID4gPiArCXYgPSBydGVfY29tYmluZTY0bXMxYih2KTsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ ICAJcmV0dXJuIHYgKyAxOw0KPiA+ID4gPiA+ICB9DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiArLyoq DQo+ID4gPiA+ID4gKyAqIEFsaWducyA2NGIgaW5wdXQgcGFyYW1ldGVyIHRvIHRoZSBwcmV2aW91 cyBwb3dlciBvZiAyDQo+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSB2DQo+ID4g PiA+ID4gKyAqICAgVGhlIDY0YiB2YWx1ZSB0byBhbGlnbg0KPiA+ID4gPiA+ICsgKg0KPiA+ID4g PiA+ICsgKiBAcmV0dXJuDQo+ID4gPiA+ID4gKyAqICAgSW5wdXQgcGFyYW1ldGVyIGFsaWduZWQg dG8gdGhlIHByZXZpb3VzIHBvd2VyIG9mIDINCj4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gK3N0 YXRpYyBpbmxpbmUgdWludDY0X3QNCj4gPiA+ID4gPiArcnRlX2FsaWduNjRwcmV2cG93Mih1aW50 NjRfdCB2KSB7DQo+ID4gPiA+ID4gKwl2ID0gcnRlX2NvbWJpbmU2NG1zMWIodik7DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsJcmV0dXJuIHYgLSAodiA+PiAxKTsNCj4gPiA+ID4gPiArfQ0KPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiAgLyoqKioqKioqKioqIE1hY3JvcyBmb3IgY2FsY3VsYXRpbmcg bWluIGFuZCBtYXggKioqKioqKioqKi8NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICAvKioNCj4gPiA+ ID4gPiAtLQ0KPiA+ID4gPiA+IDIuMTYuMw0KPiA+ID4gPg0KDQoNCkdvdCB5b3UuIA0KTG9va3Mg bGlrZSB5b3UgZm91bmQgaXNzdWUgaGVyZS4uLg0KVGhlIGV4cGVyaW1lbnRhbCB0YWcgcHJvYmFi bHkgc2hvdWxkIGJlIGluIGEgcm9vdCAuaCBmaWxlLg0KUHJvYmFibHksIG5lZWQgYSBmaXggcGF0 Y2ggdG8gbW92ZSBpdCBmb3IgYSBkaWZmZXJlbnRcbmV3IC5oIGZpbGUuDQoNCldoYXQgZG8geW91 IHRoaW5rPyANCg0KDQoNCg0K