From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 41702A04DE; Fri, 23 Oct 2020 12:07:36 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 40106A93A; Fri, 23 Oct 2020 12:07:22 +0200 (CEST) Received: from mailgw01.pantheon.sk (mailgw01.pantheon.sk [46.229.239.26]) by dpdk.org (Postfix) with ESMTP id 66EC672DF for ; Fri, 23 Oct 2020 12:07:19 +0200 (CEST) Received: from mailgw01.pantheon.sk (localhost.localdomain [127.0.0.1]) by mailgw01.pantheon.sk (Proxmox) with ESMTP id 145A220265A; Fri, 23 Oct 2020 12:07:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pantheon.tech; h=cc:cc:content-transfer-encoding:content-type:content-type :date:from:from:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=dkim; bh=BBx98AyFxWtvQpB7WbCa 1B4kPwrztp+jDpQOjLNwmHc=; b=xWN/BjhXmz9gnK1QZeUI9250WiA6F9/gU51d Az6s+vO/qFNAPZAJYWA3H8S5gFs0fD9D65ieSj15iambJJb8yMgIAANc3o9115eA 49eZNsMc38mTpYzbkOhFPpOWfcvx/cl7HWO1UOgZvu/pDoFKVbNULZvv6FW2QkXb 1/EOAu12dK/on1DSx4WB/RItgx9E2XYm+HD1cSzy4/Hstc1RlvAyxSLqw9VgQucJ Mw7GTajMSgQo1NVUIaH5SlyDM3XZsGqP8Ed9fX4w/AgoNiG9s5h1TU5uLHizDe0P eig7joUeLJQwKH2DKPg69KnQGWMxOJWl/Ju5kshICuwaAMM5Og== From: =?utf-8?B?SnVyYWogTGlua2XFoQ==?= To: Bruce Richardson CC: "Ruifeng.Wang@arm.com" , "Honnappa.Nagarahalli@arm.com" , "Phil.Yang@arm.com" , "vcchunga@amazon.com" , "Dharmik.Thakkar@arm.com" , "jerinjacobk@gmail.com" , "hemant.agrawal@nxp.com" , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [RFC PATCH v3 3/6] build: automatic NUMA and cpu counts detection Thread-Index: AQHWp56fojjDhTEMUUC082zv7zxFhKmh00kAgAAlvLD///7dgIAABBKAgALnsfA= Date: Fri, 23 Oct 2020 10:07:17 +0000 Message-ID: <03c562b977de41b3bf759a6d12e79015@pantheon.tech> References: <1602600882-695-1-git-send-email-juraj.linkes@pantheon.tech> <1603280261-20206-1-git-send-email-juraj.linkes@pantheon.tech> <1603280261-20206-4-git-send-email-juraj.linkes@pantheon.tech> <20201021120220.GC592@bricha3-MOBL.ger.corp.intel.com> <54e20244e1e841148669eb93b6b8876c@pantheon.tech> <20201021141319.GD592@bricha3-MOBL.ger.corp.intel.com> <20201021142753.GE592@bricha3-MOBL.ger.corp.intel.com> In-Reply-To: <20201021142753.GE592@bricha3-MOBL.ger.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.101.4.10] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC PATCH v3 3/6] build: automatic NUMA and cpu counts detection 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQnJ1Y2UgUmljaGFyZHNv biA8YnJ1Y2UucmljaGFyZHNvbkBpbnRlbC5jb20+DQo+IFNlbnQ6IFdlZG5lc2RheSwgT2N0b2Jl ciAyMSwgMjAyMCA0OjI4IFBNDQo+IFRvOiBKdXJhaiBMaW5rZcWhIDxqdXJhai5saW5rZXNAcGFu dGhlb24udGVjaD4NCj4gQ2M6IFJ1aWZlbmcuV2FuZ0Bhcm0uY29tOyBIb25uYXBwYS5OYWdhcmFo YWxsaUBhcm0uY29tOw0KPiBQaGlsLllhbmdAYXJtLmNvbTsgdmNjaHVuZ2FAYW1hem9uLmNvbTsg RGhhcm1pay5UaGFra2FyQGFybS5jb207DQo+IGplcmluamFjb2JrQGdtYWlsLmNvbTsgaGVtYW50 LmFncmF3YWxAbnhwLmNvbTsgZGV2QGRwZGsub3JnDQo+IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZd IFtSRkMgUEFUQ0ggdjMgMy82XSBidWlsZDogYXV0b21hdGljIE5VTUEgYW5kIGNwdQ0KPiBjb3Vu dHMgZGV0ZWN0aW9uDQo+IA0KPiBPbiBXZWQsIE9jdCAyMSwgMjAyMCBhdCAwMzoxMzoxOVBNICsw MTAwLCBCcnVjZSBSaWNoYXJkc29uIHdyb3RlOg0KPiA+IE9uIFdlZCwgT2N0IDIxLCAyMDIwIGF0 IDAxOjAxOjQxUE0gKzAwMDAsIEp1cmFqIExpbmtlxaEgd3JvdGU6DQo+ID4gPg0KPiA+ID4NCj4g PiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gRnJvbTogQnJ1Y2UgUmlj aGFyZHNvbiA8YnJ1Y2UucmljaGFyZHNvbkBpbnRlbC5jb20+DQo+ID4gPiA+IFNlbnQ6IFdlZG5l c2RheSwgT2N0b2JlciAyMSwgMjAyMCAyOjAyIFBNDQo+ID4gPiA+IFRvOiBKdXJhaiBMaW5rZcWh IDxqdXJhai5saW5rZXNAcGFudGhlb24udGVjaD4NCj4gPiA+ID4gQ2M6IFJ1aWZlbmcuV2FuZ0Bh cm0uY29tOyBIb25uYXBwYS5OYWdhcmFoYWxsaUBhcm0uY29tOw0KPiA+ID4gPiBQaGlsLllhbmdA YXJtLmNvbTsgdmNjaHVuZ2FAYW1hem9uLmNvbTsNCj4gRGhhcm1pay5UaGFra2FyQGFybS5jb207 DQo+ID4gPiA+IGplcmluamFjb2JrQGdtYWlsLmNvbTsgaGVtYW50LmFncmF3YWxAbnhwLmNvbTsg ZGV2QGRwZGsub3JnDQo+ID4gPiA+IFN1YmplY3Q6IFJlOiBbUkZDIFBBVENIIHYzIDMvNl0gYnVp bGQ6IGF1dG9tYXRpYyBOVU1BIGFuZCBjcHUNCj4gPiA+ID4gY291bnRzIGRldGVjdGlvbg0KPiA+ ID4gPg0KPiA+ID4gPiBPbiBXZWQsIE9jdCAyMSwgMjAyMCBhdCAwMTozNzozOFBNICswMjAwLCBK dXJhaiBMaW5rZcWhIHdyb3RlOg0KPiA+ID4gPiA+IFRoZSBidWlsZCBtYWNoaW5lJ3MgbnVtYmVy IG9mIGNwdXMgYW5kIG51bWEgbm9kZXMgdmFyeSwNCj4gPiA+ID4gPiByZXN1bHRpbmcgaW4gbWlz bWF0Y2hlZCBjb3VudHMgb2YgUlRFX01BWF9MQ09SRSBhbmQNCj4gPiA+ID4gPiBSVEVfTUFYX05V TUFfTk9ERVMgZm9yDQo+ID4gPiA+IG1hbnkNCj4gPiA+ID4gPiBidWlsZHMuIEF1dG9tYXRpY2Fs bHkgZGlzY292ZXIgdGhlIGhvc3QncyBudW1hIGFuZCBjcHUgY291bnRzIHRvDQo+ID4gPiA+ID4g cmVtb3ZlIHRoaXMgbWlzbWF0Y2ggZm9yIG5hdGl2ZSBidWlsZHMuIFVzZSBjdXJyZW50IGRlZmF1 bHRzIGZvciBkZWZhdWx0DQo+IGJ1aWxkcy4NCj4gPiA+ID4gPiBGb3JjZSB0aGUgdXNlcnMgdG8g c3BlY2lmeSB0aGUgY291bnRzIGZvciBjcm9zcyBidWlsZCBpbiBjcm9zcw0KPiA+ID4gPiA+IGZp bGVzIG9yIG9uIHRoZSBjb21tYW5kIGxpbmUuDQo+ID4gPiA+ID4gR2l2ZSB1c2VycyB0aGUgb3B0 aW9uIHRvIG92ZXJyaWRlIHRoZSBkaXNjb3Zlcnkgb3IgdmFsdWVzIGZyb20NCj4gPiA+ID4gPiBj cm9zcyBmaWxlcyBieSBzcGVjaWZ5aW5nIHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoDQo+ ID4gPiA+ID4gLURtYXhfbGNvcmVzIGFuZCAtRG1heF9udW1hX25vZGVzLg0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogSnVyYWogTGlua2XFoSA8anVyYWoubGlua2VzQHBhbnRo ZW9uLnRlY2g+DQo+ID4gPiA+ID4gLS0tDQo+ID4gPiA+ID4gIGJ1aWxkdG9vbHMvZ2V0X2NwdV9j b3VudC5weSAgfCAgNyArKysrKysNCj4gPiA+ID4gPiBidWlsZHRvb2xzL2dldF9udW1hX2NvdW50 LnB5IHwgMjIgKysrKysrKysrKysrKysrKysrKw0KPiA+ID4gPiA+ICBidWlsZHRvb2xzL21lc29u LmJ1aWxkICAgICAgIHwgIDIgKysNCj4gPiA+ID4gPiAgY29uZmlnL21lc29uLmJ1aWxkICAgICAg ICAgICB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystDQo+IC0NCj4gPiA+ ID4gPiAgbWVzb25fb3B0aW9ucy50eHQgICAgICAgICAgICB8ICA4ICsrKy0tLS0NCj4gPiA+ID4g PiAgNSBmaWxlcyBjaGFuZ2VkLCA3NSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKSAgY3Jl YXRlIG1vZGUNCj4gPiA+ID4gPiAxMDA2NDQgYnVpbGR0b29scy9nZXRfY3B1X2NvdW50LnB5ICBj cmVhdGUgbW9kZSAxMDA2NDQNCj4gPiA+ID4gPiBidWlsZHRvb2xzL2dldF9udW1hX2NvdW50LnB5 DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvYnVpbGR0b29scy9nZXRfY3B1X2Nv dW50LnB5DQo+ID4gPiA+ID4gYi9idWlsZHRvb2xzL2dldF9jcHVfY291bnQucHkgbmV3IGZpbGUg bW9kZSAxMDA2NDQgaW5kZXgNCj4gPiA+ID4gPiAwMDAwMDAwMDAuLjM4NmY4NWY4Yg0KPiA+ID4g PiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gPiArKysgYi9idWlsZHRvb2xzL2dldF9jcHVfY291 bnQucHkNCj4gPiA+ID4gPiBAQCAtMCwwICsxLDcgQEANCj4gPiA+ID4gPiArIyEvdXNyL2Jpbi9w eXRob24zDQo+ID4gPiA+ID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVz ZSAjIENvcHlyaWdodCAoYykgMjAyMA0KPiA+ID4gPiA+ICtQQU5USEVPTi50ZWNoIHMuci5vLg0K PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAraW1wb3J0IG9zDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICtwcmludChvcy5jcHVfY291bnQoKSkNCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvYnVpbGR0b29s cy9nZXRfbnVtYV9jb3VudC5weQ0KPiA+ID4gPiA+IGIvYnVpbGR0b29scy9nZXRfbnVtYV9jb3Vu dC5weSBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleA0KPiA+ID4gPiA+IDAwMDAwMDAwMC4uZjBj NDk5NzNhDQo+ID4gPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gPiA+ICsrKyBiL2J1aWxkdG9v bHMvZ2V0X251bWFfY291bnQucHkNCj4gPiA+ID4gPiBAQCAtMCwwICsxLDIyIEBADQo+ID4gPiA+ ID4gKyMhL3Vzci9iaW4vcHl0aG9uMw0KPiA+ID4gPiA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMy1DbGF1c2UgIyBDb3B5cmlnaHQgKGMpIDIwMjANCj4gPiA+ID4gPiArUEFOVEhF T04udGVjaCBzLnIuby4NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK2ltcG9ydCBjdHlwZXMNCj4g PiA+ID4gPiAraW1wb3J0IGdsb2INCj4gPiA+ID4gPiAraW1wb3J0IG9zDQo+ID4gPiA+ID4gK2lt cG9ydCBzdWJwcm9jZXNzDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtpZiBvcy5uYW1lID09ICdw b3NpeCc6DQo+ID4gPiA+ID4gKyAgICBpZiBvcy5wYXRoLmlzZGlyKCcvc3lzL2RldmljZXMvc3lz dGVtL25vZGUnKToNCj4gPiA+ID4gPiArICAgICAgICBwcmludChsZW4oZ2xvYi5nbG9iKCcvc3lz L2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSonKSkpDQo+ID4gPiA+ID4gKyAgICBlbHNlOg0KPiA+ ID4gPiA+ICsgICAgICAgIHByaW50KHN1YnByb2Nlc3MucnVuKFsnc3lzY3RsJywgJ3ZtLm5kb21h aW5zJ10sDQo+ID4gPiA+ID4gK2NhcHR1cmVfb3V0cHV0PVRydWUpLnN0ZG91dCkNCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gK2VsaWYgb3MubmFtZSA9PSAnbnQnOg0KPiA+ID4gPiA+ICsgICAgbGli a2VybmVsMzIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICsgICAgY291bnQgPSBjdHlwZXMuY191bG9uZygpDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsg ICAgbGlia2VybmVsMzIuR2V0TnVtYUhpZ2hlc3ROb2RlTnVtYmVyKGN0eXBlcy5wb2ludGVyKGNv dW50KSkNCj4gPiA+ID4gPiArICAgIHByaW50KGNvdW50LnZhbHVlICsgMSkNCj4gPiA+ID4gPiBk aWZmIC0tZ2l0IGEvYnVpbGR0b29scy9tZXNvbi5idWlsZCBiL2J1aWxkdG9vbHMvbWVzb24uYnVp bGQNCj4gPiA+ID4gPiBpbmRleA0KPiA+ID4gPiA+IDA0ODA4ZGFiYy4uOTI1ZTczM2IxIDEwMDY0 NA0KPiA+ID4gPiA+IC0tLSBhL2J1aWxkdG9vbHMvbWVzb24uYnVpbGQNCj4gPiA+ID4gPiArKysg Yi9idWlsZHRvb2xzL21lc29uLmJ1aWxkDQo+ID4gPiA+ID4gQEAgLTE3LDMgKzE3LDUgQEAgZWxz ZQ0KPiA+ID4gPiA+ICBlbmRpZg0KPiA+ID4gPiA+ICBtYXBfdG9fd2luX2NtZCA9IHB5MyArIGZp bGVzKCdtYXBfdG9fd2luLnB5JykgIHNwaGlueF93cmFwcGVyID0NCj4gPiA+ID4gPiBweTMgKw0K PiA+ID4gPiA+IGZpbGVzKCdjYWxsLXNwaGlueC1idWlsZC5weScpDQo+ID4gPiA+ID4gK2dldF9j cHVfY291bnRfY21kID0gcHkzICsgZmlsZXMoJ2dldF9jcHVfY291bnQucHknKQ0KPiA+ID4gPiA+ ICtnZXRfbnVtYV9jb3VudF9jbWQgPSBweTMgKyBmaWxlcygnZ2V0X251bWFfY291bnQucHknKQ0K PiA+ID4gPiA+IGRpZmYgLS1naXQgYS9jb25maWcvbWVzb24uYnVpbGQgYi9jb25maWcvbWVzb24u YnVpbGQgaW5kZXgNCj4gPiA+ID4gPiBhNTdjOGFlOWUuLmM0NDc3Zjk3NyAxMDA2NDQNCj4gPiA+ ID4gPiAtLS0gYS9jb25maWcvbWVzb24uYnVpbGQNCj4gPiA+ID4gPiArKysgYi9jb25maWcvbWVz b24uYnVpbGQNCj4gPiA+ID4gPiBAQCAtNzQsNyArNzQsMTEgQEAgZW5kaWYNCj4gPiA+ID4gPiAg IyBzdGlsbCBiZWluZyBhYmxlIHRvIHN1cHBvcnQgdGhlIENQVSBmZWF0dXJlcyByZXF1aXJlZCBm b3IgRFBESy4NCj4gPiA+ID4gPiAgIyBUaGlzIGNhbiBiZSBidW1wZWQgdXAgYnkgdGhlIERQREsg cHJvamVjdCwgYnV0IGl0IGNhbiBuZXZlcg0KPiA+ID4gPiA+IGJlIGFuICMgaW52YXJpYW50IGxp a2UgJ25hdGl2ZScNCj4gPiA+ID4gPiArbWF4X2xjb3JlcyA9IGdldF9vcHRpb24oJ21heF9sY29y ZXMnKSBtYXhfbnVtYV9ub2RlcyA9DQo+ID4gPiA+ID4gK2dldF9vcHRpb24oJ21heF9udW1hX25v ZGVzJykNCj4gPiA+ID4gPiAgaWYgbWFjaGluZSA9PSAnZGVmYXVsdCcNCj4gPiA+ID4gPiArCW1h eF9udW1hX25vZGVzID0gNA0KPiA+ID4gPiA+ICsJbWF4X2xjb3JlcyA9IDEyOA0KPiA+ID4gPg0K PiA+ID4gPiBUaGlzIGRvZXNuJ3Qgc2VlbSByaWdodCwgc2luY2UgeW91IGFyZSBvdmVycmlkaW5n IHRoZQ0KPiA+ID4gPiB1c2VyLXNwZWNpZmllZCB2YWx1ZXMgd2l0aCBoYXJkLWNvZGVkIG9uZXMu DQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4gSSB1bmRlcnN0YW5kIHdlJ3JlIHVzaW5nIHRoZSBkZWZh dWx0IGJ1aWxkL2dlbmVyaWMgdG8gYnVpbGQgcG9ydGFsYmUgZHBkaw0KPiBkaXN0cm8gcGFja2Fn ZXMsIG1lYW5pbmcgdGhlIHNldHRpbmdzIGZvciB0aG9zZSBwYWNrYWdlcyBzaG91bGQgYWx3YXlz IGJlIHRoZQ0KPiBzYW1lLCBubz8gSWYgbm90LCB3aGF0IHNob3VsZCB0aGUgZGVmYXVsdC9nZW5l cmljIGJ1aWxkIGJlPyBBbmQgd2hlbiB3b3VsZA0KPiBzb21lb25lIGRvIGEgZGVmYXVsdC9nZW5l cmljIGJ1aWxkIHdpdGggdGhlaXIgdmFsdWVzPyBJdCB3b3VsZG4ndCBiZSBhDQo+IGRlZmF1bHQv Z2VuZXJpYyBhbnltb3JlLCByaWdodD8NCj4gPiA+DQo+ID4gPiA+ID4gIAlpZiBob3N0X21hY2hp bmUuY3B1X2ZhbWlseSgpLnN0YXJ0c3dpdGgoJ3g4NicpDQo+ID4gPiA+ID4gIAkJIyBtYXRjaGVz IHRoZSBvbGQgcHJlLW1lc29uIGJ1aWxkIHN5c3RlbXMgZGVmYXVsdA0KPiA+ID4gPiA+ICAJCW1h Y2hpbmUgPSAnY29yZWk3Jw0KPiA+ID4gPiA+IEBAIC04Myw2ICs4NywyMiBAQCBpZiBtYWNoaW5l ID09ICdkZWZhdWx0Jw0KPiA+ID4gPiA+ICAJZWxpZiBob3N0X21hY2hpbmUuY3B1X2ZhbWlseSgp LnN0YXJ0c3dpdGgoJ3BwYycpDQo+ID4gPiA+ID4gIAkJbWFjaGluZSA9ICdwb3dlcjgnDQo+ID4g PiA+ID4gIAllbmRpZg0KPiA+ID4gPiA+ICtlbGlmIG5vdCBtZXNvbi5pc19jcm9zc19idWlsZCgp DQo+ID4gPiA+ID4gKwkjIGZpbmQgaG9zdCBjb3JlIGNvdW50IGFuZCBudW1hIG5vZGUgY291bnQg Zm9yIG5hdGl2ZSBidWlsZHMNCj4gPiA+ID4gPiArCWlmIG1heF9sY29yZXMgPT0gMA0KPiA+ID4g PiA+ICsJCW1heF9sY29yZXMgPQ0KPiA+ID4gPiBydW5fY29tbWFuZChnZXRfY3B1X2NvdW50X2Nt ZCkuc3Rkb3V0KCkudG9faW50KCkNCj4gPiA+ID4gPiArCQltaW5fbGNvcmVzID0gMg0KPiA+ID4g PiA+ICsJCWlmIG1heF9sY29yZXMgPCBtaW5fbGNvcmVzDQo+ID4gPiA+ID4gKwkJCW1lc3NhZ2Uo J0ZvdW5kIGxlc3MgdGhhbiBAMEAgY29yZXMsIGJ1aWxkaW5nDQo+IGZvcg0KPiA+ID4gPiBAMEAg Y29yZXMnLmZvcm1hdChtaW5fbGNvcmVzKSkNCj4gPiA+ID4gPiArCQkJbWF4X2xjb3JlcyA9IG1p bl9sY29yZXMNCj4gPiA+ID4gPiArCQllbHNlDQo+ID4gPiA+ID4gKwkJCW1lc3NhZ2UoJ0ZvdW5k IEAwQA0KPiBjb3JlcycuZm9ybWF0KG1heF9sY29yZXMpKQ0KPiA+ID4gPiA+ICsJCWVuZGlmDQo+ ID4gPiA+ID4gKwllbmRpZg0KPiA+ID4gPiA+ICsJaWYgbWF4X251bWFfbm9kZXMgPT0gMA0KPiA+ ID4gPiA+ICsJCW1heF9udW1hX25vZGVzID0NCj4gPiA+ID4gcnVuX2NvbW1hbmQoZ2V0X251bWFf Y291bnRfY21kKS5zdGRvdXQoKS50b19pbnQoKQ0KPiA+ID4gPiA+ICsJCW1lc3NhZ2UoJ0ZvdW5k IEAwQCBudW1hDQo+IG5vZGVzJy5mb3JtYXQobWF4X251bWFfbm9kZXMpKQ0KPiA+ID4gPiA+ICsJ ZW5kaWYNCj4gPiA+ID4gPiAgZW5kaWYNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICBkcGRrX2NvbmYu c2V0KCdSVEVfTUFDSElORScsIG1hY2hpbmUpIEBAIC0yMjcsOCArMjQ3LDEwIEBADQo+ID4gPiA+ ID4gZm9yZWFjaA0KPiA+ID4gPiA+IGFyZzogd2FybmluZ19mbGFncyAgZW5kZm9yZWFjaA0KPiA+ ID4gPiA+DQo+ID4gPiA+ID4gICMgc2V0IG90aGVyIHZhbHVlcyBwdWxsZWQgZnJvbSB0aGUgYnVp bGQgb3B0aW9ucw0KPiA+ID4gPiA+IC1kcGRrX2NvbmYuc2V0KCdSVEVfTUFYX0xDT1JFJywgZ2V0 X29wdGlvbignbWF4X2xjb3JlcycpKQ0KPiA+ID4gPiA+IC1kcGRrX2NvbmYuc2V0KCdSVEVfTUFY X05VTUFfTk9ERVMnLA0KPiA+ID4gPiA+IGdldF9vcHRpb24oJ21heF9udW1hX25vZGVzJykpDQo+ ID4gPiA+ID4gK2lmIG5vdCBtZXNvbi5pc19jcm9zc19idWlsZCgpDQo+ID4gPiA+ID4gKwlkcGRr X2NvbmYuc2V0KCdSVEVfTUFYX0xDT1JFJywgbWF4X2xjb3JlcykNCj4gPiA+ID4gPiArCWRwZGtf Y29uZi5zZXQoJ1JURV9NQVhfTlVNQV9OT0RFUycsIG1heF9udW1hX25vZGVzKQ0KPiBlbmRpZg0K PiA+ID4gPg0KPiA+ID4gPiBSYXRoZXIgdGhhbiBjb25kaXRpb25hbGx5IHNldHRpbmcgdGhlIHZh bHVlIGhlcmUsIHlvdSBzaG91bGQgbW92ZQ0KPiA+ID4gPiB0aGUgY2hlY2tzIGJlbG93IHVwIGFi b3ZlIHRoaXMgdG8gc2ltcGxpZnkgdGhpbmdzLg0KPiA+ID4gPg0KPiA+ID4NCj4gPiA+IERvIHlv dSBtZWFuIHRoZSBjcm9zcyBidWlsZCBjaGVja3M/IFRob3NlIGhhdmUgdG8gYmUgYWZ0ZXINCj4g c3ViZGlyKGFyY2hfc3ViZGlyKSBzbyB0aGF0IHdlIGNhbiBvdmVycmlkZSB0aGUgdmFsdWVzIGZy b20gY3Jvc3MgZmlsZXMgKGFzIHRoZQ0KPiBjb21taXQgbWVzc2FnZSBzYXlzKS4NCj4gPiA+DQo+ ID4gPiA+ID4gIGRwZGtfY29uZi5zZXQoJ1JURV9NQVhfRVRIUE9SVFMnLCBnZXRfb3B0aW9uKCdt YXhfZXRocG9ydHMnKSkNCj4gPiA+ID4gPiBkcGRrX2NvbmYuc2V0KCdSVEVfTElCRUFMX1VTRV9I UEVUJywgZ2V0X29wdGlvbigndXNlX2hwZXQnKSkNCj4gPiA+ID4gPiBkcGRrX2NvbmYuc2V0KCdS VEVfRU5BQkxFX1RSQUNFX0ZQJywNCj4gPiA+ID4gPiBnZXRfb3B0aW9uKCdlbmFibGVfdHJhY2Vf ZnAnKSkgQEANCj4gPiA+ID4gPiAtMjQ3LDYgKzI2OSwyMiBAQCBjb21waWxlX3RpbWVfY3B1Zmxh Z3MgPSBbXQ0KPiA+ID4gPiA+ICBzdWJkaXIoYXJjaF9zdWJkaXIpDQo+ID4gPiA+ID4gIGRwZGtf Y29uZi5zZXQoJ1JURV9DT01QSUxFX1RJTUVfQ1BVRkxBR1MnLA0KPiA+ID4gPiA+ICcsJy5qb2lu KGNvbXBpbGVfdGltZV9jcHVmbGFncykpDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiArIyBjaGVjayB0 aGF0IGNwdSBhbmQgbnVtYSBjb3VudCBpcyBzZXQgaW4gY3Jvc3MgYnVpbGRzIGlmDQo+ID4gPiA+ ID4gK21lc29uLmlzX2Nyb3NzX2J1aWxkKCkNCj4gPiA+ID4gPiArICAgIAlpZiBtYXhfbGNvcmVz ID4gMA0KPiA+ID4gPiA+ICsJCSMgc3BlY2lmaWVkIG9uIHRoZSBjbWRsaW5lDQo+ID4gPiA+ID4g KwkJZHBka19jb25mLnNldCgnUlRFX01BWF9MQ09SRScsIG1heF9sY29yZXMpDQo+ID4gPiA+ID4g KwllbGlmIG5vdCBkcGRrX2NvbmYuaGFzKCdSVEVfTUFYX0xDT1JFJykNCj4gPiA+ID4gPiArCQll cnJvcignTnVtYmVyIG9mIGNvcmVzIGZvciBjcm9zcyBidWlsZCBub3Qgc3BlY2lmaWVkIGluDQo+ IEAwQA0KPiA+ID4gPiBzdWJkaXIgKGUuZy4gaW4gYSBjcm9zcy1maWxlKSBub3Igb24gdGhlDQo+ ID4gPiA+IGNtZGxpbmUnLmZvcm1hdChhcmNoX3N1YmRpcikpDQo+ID4gPiA+ID4gKwllbmRpZg0K PiA+ID4gPiA+ICsJaWYgbWF4X251bWFfbm9kZXMgPiAwDQo+ID4gPiA+ID4gKwkJIyBzcGVjaWZp ZWQgb24gdGhlIGNtZGxpbmUNCj4gPiA+ID4gPiArCQlkcGRrX2NvbmYuc2V0KCdSVEVfTUFYX05V TUFfTk9ERVMnLA0KPiBtYXhfbnVtYV9ub2RlcykNCj4gPiA+ID4gPiArCWVsaWYgbm90IGRwZGtf Y29uZi5oYXMoJ1JURV9NQVhfTlVNQV9OT0RFUycpDQo+ID4gPiA+ID4gKwkJZXJyb3IoJ051bWJl ciBvZiBudW1hIG5vZGVzIGZvciBjcm9zcyBidWlsZCBub3QNCj4gc3BlY2lmaWVkIGluDQo+ID4g PiA+IEAwQCBzdWJkaXIgKGUuZy4gaW4gYSBjcm9zcy1maWxlKSBub3Igb24gdGhlDQo+ID4gPiA+ IGNtZGxpbmUnLmZvcm1hdChhcmNoX3N1YmRpcikpDQo+ID4gPiA+ID4gKwllbmRpZg0KPiA+ID4g PiA+ICtlbmRpZg0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAgIyBzZXQgdGhlIGluc3RhbGwgcGF0 aCBmb3IgdGhlIGRyaXZlcnMNCj4gPiA+ID4gPiBkcGRrX2NvbmYuc2V0X3F1b3RlZCgnUlRFX0VB TF9QTURfUEFUSCcsIGVhbF9wbWRfcGF0aCkNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IGRpZmYgLS1n aXQgYS9tZXNvbl9vcHRpb25zLnR4dCBiL21lc29uX29wdGlvbnMudHh0IGluZGV4DQo+ID4gPiA+ ID4gOWJmMThhYjZiLi4wMWIwYzQ1YzMgMTAwNjQ0DQo+ID4gPiA+ID4gLS0tIGEvbWVzb25fb3B0 aW9ucy50eHQNCj4gPiA+ID4gPiArKysgYi9tZXNvbl9vcHRpb25zLnR4dA0KPiA+ID4gPiA+IEBA IC0yNiwxMCArMjYsMTAgQEAgb3B0aW9uKCdtYWNoaW5lJywgdHlwZTogJ3N0cmluZycsIHZhbHVl OiAnbmF0aXZlJywNCj4gPiA+ID4gPiAgCWRlc2NyaXB0aW9uOiAnc2V0IHRoZSB0YXJnZXQgbWFj aGluZSB0eXBlJykNCj4gPiA+ID4gPiBvcHRpb24oJ21heF9ldGhwb3J0cycsDQo+ID4gPiA+ID4g dHlwZTogJ2ludGVnZXInLCB2YWx1ZTogMzIsDQo+ID4gPiA+ID4gIAlkZXNjcmlwdGlvbjogJ21h eGltdW0gbnVtYmVyIG9mIEV0aGVybmV0IGRldmljZXMnKQ0KPiA+ID4gPiA+IC1vcHRpb24oJ21h eF9sY29yZXMnLCB0eXBlOiAnaW50ZWdlcicsIHZhbHVlOiAxMjgsDQo+ID4gPiA+ID4gLQlkZXNj cmlwdGlvbjogJ21heGltdW0gbnVtYmVyIG9mIGNvcmVzL3RocmVhZHMgc3VwcG9ydGVkIGJ5DQo+ IEVBTCcpDQo+ID4gPiA+ID4gLW9wdGlvbignbWF4X251bWFfbm9kZXMnLCB0eXBlOiAnaW50ZWdl cicsIHZhbHVlOiA0LA0KPiA+ID4gPiA+IC0JZGVzY3JpcHRpb246ICdtYXhpbXVtIG51bWJlciBv ZiBOVU1BIG5vZGVzIHN1cHBvcnRlZCBieQ0KPiBFQUwnKQ0KPiA+ID4gPiA+ICtvcHRpb24oJ21h eF9sY29yZXMnLCB0eXBlOiAnaW50ZWdlcicsIHZhbHVlOiAwLA0KPiA+ID4gPiA+ICsJZGVzY3Jp cHRpb246ICdtYXhpbXVtIG51bWJlciBvZiBjb3Jlcy90aHJlYWRzIHN1cHBvcnRlZCBieQ0KPiBF QUwuDQo+ID4gPiA+ID4gK1ZhbHVlIDAgbWVhbnMgdGhlIG51bWJlciBvZiBjcHVzIG9uIHRoZSBo b3N0IHdpbGwgYmUgdXNlZC4gRm9yDQo+ID4gPiA+ID4gK2Nyb3NzIGJ1aWxkLA0KPiA+ID4gPiBz ZXQgdG8gbm9uLXplcm8gdG8gb3ZlcndyaXRlIHRoZSBjcm9zcy1maWxlIHZhbHVlLicpDQo+ID4g PiA+IG9wdGlvbignbWF4X251bWFfbm9kZXMnLA0KPiA+ID4gPiB0eXBlOiAnaW50ZWdlcicsIHZh bHVlOiAwLA0KPiA+ID4gPiA+ICsJZGVzY3JpcHRpb246ICdtYXhpbXVtIG51bWJlciBvZiBOVU1B IG5vZGVzIHN1cHBvcnRlZCBieQ0KPiBFQUwuDQo+ID4gPiA+ID4gK1ZhbHVlDQo+ID4gPiA+IDAN Cj4gPiA+ID4gPiArbWVhbnMgdGhlIG51bWJlciBvZiBudW1hIG5vZGVzIG9uIHRoZSBob3N0IHdp bGwgYmUgdXNlZC4gRm9yDQo+ID4gPiA+ID4gK2Nyb3NzIGJ1aWxkLCBzZXQgdG8gbm9uLXplcm8g dG8gb3ZlcndyaXRlIHRoZSBjcm9zcy1maWxlDQo+ID4gPiA+ID4gK3ZhbHVlLicpDQo+ID4gPiA+ DQo+ID4gPiA+IEkgZG9uJ3QgbGlrZSB0aGlzIGNoYW5nZSwgYmVjYXVzZSBpdCB2ZXJ5IG11Y2gg YXNzdW1lcyBmb3INCj4gPiA+ID4gbm9uLWNyb3NzLWNvbXBpbGVzIHRoYXQgcGVvcGxlIHdpbGwg YmUgcnVubmluZyBEUERLIG9uIHRoZSBzeXN0ZW0NCj4gPiA+ID4gdGhleSBidWlsZCBpdCBvbi4g VGhhdCdzIGEgdmVyeSwgdmVyeSBiaWcgYXNzdW1wdGlvbiENCj4gPiA+DQo+ID4gPiBJJ2xsIGJl IHVzaW5nIGRlZmluaXRpb25zIGZyb20gaHR0cHM6Ly9tZXNvbmJ1aWxkLmNvbS9Dcm9zcy0NCj4g Y29tcGlsYXRpb24uaHRtbC4NCj4gPiA+IEkgdW5kZXJzdGFuZCBjcm9zcyBjb21waWxhdGlvbiB0 byBiZSBidWlsZGluZyBmb3IgYSBkaWZmZW50IGhvc3QgbWFjaGluZSB0aGFuDQo+IHRoZSBidWls ZCBtYWNoaW5lICh3aGljaCBpcyBhbGlnbmVkIHdpdGggcHJldHR5IG11Y2ggZXZlcnkgZGVmaW5p dGlvbiBJIGZvdW5kKS4gSQ0KPiB1bmRlcnN0YW5kIHRoaXMgdG8gYmUgdHJ1ZSBub3Qgb25seSBm b3IgYnVpbGRzIGJldHdlZW4gYXJjaGl0ZWN0dXJlcywgYnV0IGFsc28NCj4gd2l0aGluIGFuIGFy Y2hpdGVjdHVyZSAoZS5nLiB4ODZfNjQgYnVpbGQgbWFjaGluZSBidWlsZGluZyBmb3IgeDg2XzY0 IGhvc3QNCj4gbWFjaGluZSkuDQo+ID4gPiBTbyB5ZXMsIHdoZW4gc29tZW9uZSBkb2VzIGEgbmF0 aXZlIGJ1aWxkLCBpdCBzdGFuZHMgdG8gcmVhc29uIHRoZXkgd2FudCB0bw0KPiB1c2UgaXQgb24g dGhlIGJ1aWxkIG1hY2hpbmUuIElmIHRoZXkgd2FudGVkIHRvIHVzZSBpdCBlbHNld2hlcmUsIHRo ZXkgd291bGQgY3Jvc3MNCj4gY29tcGlsZS4NCj4gPiA+IEFub3RoZXIgdGhpbmcgaXMgdGhlIGN1 cnJlbnQgYnVpbGQgcGhpbG9zb3BoeSBpcyB0byBkZXRlY3QgYXMgbXVjaCBhcyBwb3NzaWJsZQ0K PiAobm90IGhhdmluZyBzdGF0aWNhbGx5IGRlZmluZWQgY29uZmlndXJhdGlvbiwgYXMgeW91IG1l bnRpb25lZCBpbiB0aGUgcGFzdCkuDQo+IERldGVjdGluZyB0aGUgbnVtYmVyIG9mIGNvcmVzIGFu ZCBudW1hIG5vZGVzIGZpdHMgdGhpcyBwZXJmZWN0bHkuDQo+ID4gPiBBbmQgeWV0IGFub3RoZXIg dGhpbmcgaXMgdGhhdCB0aGUgYXNzdW1wdGlvbiBzZWVtcyB0byBiZSBhbHJlYWR5IHByZXNlbnQg aW4NCj4gdGhlIGJ1aWxkIHN5c3RlbSAtIGl0IGFscmVhZHkgZGV0ZWN0cyBhIGxvdCB0aGluZ3Ms IHNvbWUgb2Ygd2hpY2ggbWF5IG5vdCBiZQ0KPiBzYXRpc2ZpZWQgb24gbWFjaGluZXMgb3RoZXIg dGhhbiB0aGUgYnVpbGQgbWFjaGluZS4gSSBtYXkgYmUgd3JvbmcgYWJvdXQgdGhpcy4NCj4gPiA+ DQo+ID4gPiA+IEknbSBvayB3aXRoIGhhdmluZyB6ZXJvIGFzIGEgImRldGVjdCIgb3B0aW9uLCBh bmQgaGF2aW5nIHRoZQ0KPiA+ID4gPiB2YWx1ZXMgb3ZlcnJpZGRlbiBmcm9tIGNyb3NzLWZpbGVz LCBidXQgbm90IHdpdGggZGV0ZWN0aW9uIGFzIHRoZQ0KPiA+ID4gPiBkZWZhdWx0IG91dC0gb2Yt dGhlLWJveCBvcHRpb24hIExvdHMgb2YgdXNlcnMgbWF5IHB1bGwgYnVpbGRzIGZyb20NCj4gPiA+ ID4gYSBDSSBiYXNlZCBvbiBWTXMgd2l0aCBqdXN0IGEgZmV3IGNvcmVzLCBmb3IgaW5zdGFuY2Uu DQo+ID4gPg0KPiA+ID4gSWYgbm90IGhhdmluZyB0aGUgYXV0b21hdGljIGRldGVjdGlvbiBpcyBh IGNvbmNlcm4gYmVjYXVzZSBvZiB1c2VycyB1c2luZyBDSQ0KPiBidWlsZHMsIHRoZW4gd2UgKGlm IGl0J3MgZnJvbSBvdXIgQ0kpIGNhbiBjaGFuZ2Ugd2hhdCB3ZSdyZSBidWlsZGluZyBpbiBDSSAt IHRoZQ0KPiBkZWZhdWx0L2dlbmVyaWMgYnVpbGQgc2VlbXMgbGlrZSBhIGdvb2QgZml0IGJlY2F1 c2UgaXQncyBzdXBwb3NlZCB0byB3b3JrIG9uIGENCj4gdmFyaWV0eSBvZiBzeXN0ZW1zLiBFeHBl Y3RpbmcgdGhhdCBuYXRpdmUgYnVpbGQgZnJvbSByYW5kb20gVk1zIHdvdWxkIHdvcmsNCj4gYW55 d2hlcmUgZG9lc24ndCBzZWVuIHZlcnkgcmVhbGlzdGljIC0gaXQncyBiZWVuIGJ1aWxkIGZvciB0 aGF0IFZNIGVudmlyb25tZW50DQo+IChiZWNhdXNlIGl0J3MgYSBuYXRpdmUgYnVpbGQpLg0KPiA+ ID4NCj4gPiA+IEhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9uIHdoaWNoIHRoZSBjdXJyZW50IHZl cnNpb24gaXMgYmFzZWQ6DQo+ID4gPiAxLiBTaW5jZSB3ZSB3YW50IHRvIGdldCBhd2F5IGZyb20g aGF2aW5nIHN0YXRpY2FsbHkgZGVmaW5lZCBjb25maWd1cmF0aW9uLA0KPiBudW1hIGFuZCBjb3Jl IGNvdW50IGRpc2NvdmVyeSBpcyBleGFjdGx5IHdoYXQgd2Ugc2hvdWxkIGhhdmUgaW4gdGhlIGJ1 aWxkDQo+IHN5c3RlbS4gU2luY2UgZGlzY29yZXJ5IGlzIGN1cnJlbnRseSB0aGUgZGVmYXVsdCBm b3IgbGliL2RyaXZlcnMsIGl0IHN0YW5kcyB0byByZWFzb24NCj4gaXQgc2hvdWxkIGJlIGRlZmF1 bHQgZm9yIGV2ZXJ5dGhpbmcgZWxzZSwgaWYgcG9zc2libGUuDQo+ID4gPiAyLiBOYXRpdmUgYnVp bGQgc2hvdWxkIHByb2R1Y2UgYmluYXJpZXMgbWF0Y2hpbmcgdGhlIGJ1aWxkIG1hY2hpbmUgYXMg d2VsbCBhcw0KPiBwb3NzaWJsZS4NCj4gPiA+IDMuIERlZmF1bHQvZ2VuZXJpYyBidWlsZCBzaG91 bGQgcHJvZHVjZSBiaW5hcmllcyBleGVjdXRhYmxlIG9uIGEgcmFuZ2Ugb2YNCj4gc3lzdGVtcyAo aWRlYWxseSBhbGwgc3lzdGVtcyBvZiBhIGdpdmVuIGFyY2hpdGVjdHVyZSkuDQo+ID4gPiA0LiBP dGhlciBidWlsZHMsIHRoYXQgaXMgbm9uLW5hdGl2ZSBidWlsZHMsIGFyZSBjcm9zcy1jb21waWxh dGlvbiwgc2luY2Ugd2UncmUNCj4gYnVpbGRpbmcgZm9yIGhvc3QgbWFjaGluZSBvdGhlciB0aGF0 IHRoZSBidWlsZCBtYWNoaW5lLg0KPiA+ID4NCj4gPiA+IFdoYXQgSSBoYXZlbid0IHRha2VuIGlu dG8gYWNjb3VudCBpcyB1c2VycyB1c2luZyBDSSBidWlsZHMuIFRoYXQgY291bGQgYmUNCj4gcmVt ZWRpZWQgYnkgbW9kaWZ5aW5nIHRoZSBDSSBhIGJpdCB3aGlsZSBiZWluZyBjb25zaXN0ZW50IHdp dGggd2hhdA0KPiBuYXRpdmUvZGVmYXVsdC9nZW5lcmljL2Nyb3NzIGJ1aWxkcyBhcmUgKG9yIHNo b3VsZCBiZSkuIEFuZCBpbiBhbnkgY2FzZSwgaWYgd2UncmUNCj4gbm90IGludGVyZXN0ZWQgaW4g dGVzdGluZyB0aGUgZXhhY3QgQ0kgZW52aXJvbm1lbnQgKHdoaWNoIHdlIGFyZW4ndCwgc2luY2Ug d2UNCj4gZG9uJ3Qgd2FudCB0byB1c2UgMiBjb3JlcyB3aXRoIDEgbnVtYSksIHdlIHJlYWxseSBz aG91bGRuJ3QgYmUgZG9pbmcgbmF0aXZlDQo+IGJ1aWxkcyB0aGVyZS4NCj4gPiA+DQo+ID4gPiBJ J20gaW50ZXJlc3RlZCBpbiBoZWFyaW5nIHdoZXJlIG15IHRoaW5raW5nIGRldmlhdGVzIGZyb20g eW91cnMuDQo+ID4gPg0KPiA+DQo+ID4gVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBvaW50cyBpbiB3 aGljaCB3ZSBkaWZmZXIsIEkgdGhpbmsuDQo+ID4NCj4gPiBGaXJzdGx5LCB0aGUgdXNlIG9mICJu YXRpdmUiIGFuZCAiZGVmYXVsdC9nZW5lcmljIiBmb3IgdGhlICJtYWNoaW5lIg0KPiA+IHBhcmFt ZXRlciByZWZlcnMgb25seSB0byB0aGUgaW5zdHJ1Y3Rpb24tc2V0IGxldmVsIGZyb20gdGhlIGNv bXBpbGVyLA0KPiA+IGFuZCBzaG91bGQgbm90IGFmZmVjdCBhbnkgb3RoZXIgc2V0dGluZ3MsIHNp bmNlIGFsbCBzZXR0aW5ncyBhcmUgaW5kZXBlbmRlbnQuDQoNCkl0IHNlZW1zIHRoYXQgd2hhdCB5 b3UncmUgc2F5aW5nIG1heSBiZSB0cnVlIGZyb20gdGhlIHg4NiBwb2ludCBvZiB2aWV3LCBidXQg aXMgbm90IHRydWUgZnJvbSBhcm0gcG9pbnQgb2YgdmlldyBhbmQgdGh1cyBub3QgdHJ1ZSBpbiBn ZW5lcmFsLg0KSXQncyBub3QgdHJ1ZSB0aGF0IGFsbCBzZXR0aW5nIGFyZSBpbmRlcGVuZGVudCBm b3IgYXJtIGJ1aWxkLiBXaGVuIGJ1aWxkaW5nIHdpdGggbWFjaGluZT1uYXRpdmUgd2UncmUgZGlz Y292ZXJpbmcgd2hhdCBtYWNoaW5lIHdlJ3JlIGJ1aWxkaW5nIG9uIGFuZCBzZXR0aW5nIHNvbWUg c2V0dGluZ3MgKG90aGVyIHRoYW4gbnVtYSBhbmQgY29yZSBjb3VudCkgYXJlIGJhc2VkIG9uIHRo YXQuIEZvciBtYWNoaW5lPWdlbmVyaWMgd2UgYWxzbyBoYXZlIGEgc2V0IG9mIHZhbHVlcyB0aGF0 IGJ1aWxkIHRoZSBnZW5lcmljIGJpbmFyaWVzIHlvdSBkZXNjcmliZSBiZWxvdy4gTW9yZSBvbiB0 aGlzIGluIHRoYXQgc2VjdGlvbi4NCg0KPiA+IFRoZXJlZm9yZSwgc2V0dGluZyAibWFjaGluZSIg dG8gIm5hdGl2ZSIgZG9lcyBub3QgbWVhbiB0aGF0IHdlIHNob3VsZA0KPiA+IGRldGVjdCBjb3Jl cyBhbmQgbnVtYSBub2RlcywgYW5kIHNpbWlsYXJseSBzZXR0aW5nIGl0IHRvICJkZWZhdWx0Ig0K PiA+IGRvZXMgbm90IG1lYW4gdGhhdCB3ZSBzaG91bGQgaWdub3JlIHRoZSBzZXR0aW5ncyBmb3Ig dGhlc2UgdmFsdWVzIGFuZA0KPiA+IHBpY2sgb3VyIG93biBjaG9zZW4gZGVmYXVsdCB2YWx1ZXMu DQo+ID4NCg0KSSBkb24ndCB0aGluayB0aGlzIGZvbGxvd3MgKGlmIGFsbCBzZXR0aW5ncyBhcmUg aW5kZXBlbmRlbnQsIHRoZW4gc2V0dGluZyBtYWNoaW5lIHRvIG5hdGl2ZSBvciBhbnl0aGluZyBl bHNlIGltcGxpZXMgbm90aGluZyBmb3Igb3RoZXIgc2V0dGluZ3MpLiBCdXQgSSB0aGluayBpdCBk b2VzIGZvbGxvdyBmcm9tIHRoZSB3aGF0IHlvdSB3cml0ZSBuZXh0Lg0KDQpIb3dldmVyLCBzaW5j ZSBtYWNoaW5lPSJkZWZhdWx0L2dlbmVyaWMiIGRvZXMgbm90IHNwZWNpZnkgYSB0eXBlIG9mIGJ1 aWxkLCBidXQgcmF0aGVyIGp1c3Qgb25lIGNvbmZpZ3VyYXRpb24gb3B0aW9uIChvciBhIHNtYWxs IHN1YnNldCBmb3IgYXJtIGJ1aWxkcyksIHJlbW92aW5nIHRoZSBhYmlsaXR5IHRvIG92ZXJ3cml0 ZSB0aGUgZGVmYXVsdCB2YWx1ZXMgd2hlbiBtYWNoaW5lPSJkZWZhdWx0L2dlbmVyaWMiIGlzIG5v dCB3YXJyYW50ZWQuDQoNCj4gPiBTZWNvbmRseSwgdGhlIHVzZSBvZiBjcm9zcy1jb21waWxhdGlv biBvbmx5IGFwcGxpZXMgd2hlbiB5b3UgYXJlDQo+ID4gY29tcGlsaW5nIGZvciBhIGRpZmZlcmVu dCBhcmNoaXRlY3R1cmUgb3IgZW52aXJvbm1lbnQgKGUuZy4gT1MpIHRvDQo+ID4gd2hhdCB5b3Ug YXJlIGJ1aWxkaW5nIG9uLiBCdWlsZGluZyBvbiBhIDQtY29yZSB4ODYgbWFjaGluZSB0byBydW4g b24gYQ0KPiA+IGR1YWwtc29ja2V0LCAzMi1jb3JlIHg4NiBtYWNoaW5lIGlzIG5vdCBjcm9zcy1j b21waWxpbmcsIGJ1dCBzdGlsbA0KPiA+IG5lZWRzIHRvIHdvcmsgYnkgZGVmYXVsdC4NCg0KV2Ug KHRoZSBhcm0gY29tbXVuaXR5LCBvciBhdCBsZWFzdCBhIHBhcnQgb2YgaXQpIGZyZXF1ZW50bHkg cmVmZXIgdG8gYWFyY2g2NCAtPiBhYXJjaDY0IGNyb3NzLWNvbXBpbGF0aW9uIHdoZW4gd2UncmUg YnVpbGRpbmcgZm9yIGEgc3BlY2lmaWMgU29DICh1c3VhbGx5IHNtYWxsL3Nsb3cpIG9uIGEgZmFz dCBzZXJ2ZXIgZ3JhZGUgYWFyY2g2NCBtYWNoaW5lLiBUaGlzIGlzIHByb2JhYmx5IGJlIGJlY2F1 c2Ugd2UncmUgY29uZmxhdGluZyB3aGF0IG1vc3QgcGVvcGxlIGNvbnNpZGVyIGNyb3NzLWNvbXBp bGF0aW9uIHRvIGJlIChidWlsZGluZyBmb3IgYSBkaWZmZXJlbnQgYXJjaCBvciBPUykgd2l0aCB3 aGF0IG1lc29uIGNyb3NzIGNvbXBpbGF0aW9uIGlzICh1c2luZyBhIGNyb3NzLWZpbGUpLiBBcm0g U29DcyB2YXJ5IGdyZWF0bHkgYW5kIHdlIHdhbnQgdG8gY2FwdHVyZSB0aGF0IHZhcmlhdGlvbiBp biBjcm9zcyBmaWxlcyBhbmQgdXNlIHRoZSBjcm9zcyBmaWxlcyBldmVuIG9uIHRoZSBzYW1lIGFy Y2hpdGVjdHVyZSAob3IgcmF0aGVyLCB3ZSB3YW50IHVzZXJzIHRvIGJlIGFibGUgdG8pLiBGcm9t IG5vdyBvbiB3aGVuIHRhbGtpbmcgYWJvdXQgY3Jvc3MgY29tcGlsYXRpb24gSSdsbCBtZWFuIG1l c29uIGNyb3NzIGNvbXBpbGF0aW9uIChpLmUuIHVzaW5nIGEgY3Jvc3MgZmlsZSkuDQoNCj4gPiBT b21ldGhpbmcgbGlrZSBidWlsZGluZyBhIDMyLWJpdCBiaW5hcnkgb24gYQ0KPiA+IDY0LWJpdCBP UyBpcyBpbiBtb3N0IGNhc2VzIG5vdCBkb25lIGJ5IGNyb3NzLWNvbXBpbGF0aW9uIGVpdGhlciwg YnV0DQo+ID4gaXMgcmF0aGVyIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZSBkaXNjdXNzaW9uLCBl eGNlcHQgYXMgYSByZWZlcmVuY2UNCj4gPiBwb2ludCB0byBzaG93IHRoZSBzY29wZSBvZiBkaWZm ZXJlbmNlcyB3aGljaCBjYW4gYmUgYWNjb21vZGF0ZWQgYXMgIm5hdGl2ZQ0KPiBidWlsZHMiLg0K PiA+DQo+ID4gSW4gdGVybXMgb2YgZHluYW1pYyBjb25maWd1cmF0aW9uIGZvciB0aGluZ3MgbGlr ZSBjb3JlcyBhbmQgbnVtYQ0KPiA+IG5vZGVzLCB0aGUgaWRlYWwgZW5kIHN0YXRlIGhlcmUgaXMg bm90IHRvIGhhdmUgdGhlbSBkZXRlY3RlZCBhdCBidWlsZA0KPiA+IHRpbWUgb24gdGhlIGhvc3Qg c3lzdGVtLCBidXQgaW5zdGVhZCB0byBoYXZlIHRoZW0gZGV0ZWN0ZWQgYXQgcnVudGltZSBhbmQN Cj4gc2l6ZWQgZHluYW1pY2FsbHkuDQoNClRoaXMgd291bGQgc2ltcGxpZnkgZXZlcnl0aGluZywg ZnJvbSBidWlsZGluZyB0byB1c2VycyBub3QgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IG9uZSBtb3Jl IHRoaW5nIC0gd291bGQgdGhpcyBiZSBoYXJkL3RpbWUgY29uc3VtaW5nIHRvIGltcGxlbWVudD8N Cg0KPiA+IEluIHRoZSBhYnNlbnNlIG9mIHRoYXQsIHRoZXNlIHZhbHVlcyBzaG91bGQgYmUgc2V0 IHRvIHJlYXNvbmFibGUNCj4gPiBkZWZhdWx0cyBzbyB0aGF0IHdoZW4gYSB1c2VyIGNvbXBpbGVz IHVwIGEgYmluYXJ5IHdpdGhvdXQgc2V0dGluZ3MNCj4gPiB0aGVzZSBleHBsaWNpdGx5IGl0IHNo b3VsZCBydW4gb24gOTUlKyBvZiBzeXN0ZW1zIG9mIHRoYXQgdHlwZS4NCj4gPg0KDQpUaGlzLCBj b3VwbGVkIHdpdGggdGhlIHBhcmFncmFwaCBhYm91dCBjcm9zcy1jb21waWxhdGlvbiBpbXBseSB0 aGF0IHdlIHNob3VsZG4ndCBkZWZhdWx0IHRvIGRpc2NvdmVyaW5nIHRoZSB2YWx1ZXMgYW5kIEkg dGhpbmsgdGhhdCdzIHJlYXNvbmFibGUuIEhhdmluZyB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IHRo ZXNlIG9uIHRoZSBjb21tYW5kIGxpbmUsIHVzaW5nIGFuIG9wdGlvbmFsIGRpc2NvdmVyeSBtZWNo YW5pc20gYW5kIHNwZWNpZnlpbmcgdGhlc2UgaW4gYSBjcm9zcyBmaWxlIHNob3VsZCBjb3ZlciBv dXIgKGFybSkgbmVlZHMuDQoNCj4gPiBUaGlzIGlzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGlz c3VlcywgYW55d2F5LiA6LSkNCj4gPg0KPiBXaGF0IGNvdWxkIHBvc3NpYmx5IHdvcmsgaXMgdG8g c2V0IHRoZSBkZWZhdWx0cyBmb3IgdGhlc2UgdG8gIjAiIGFzIGRvbmUgaW4geW91cg0KPiBwYXRj aCwgYnV0IHRoZXJlYWZ0ZXIgaGF2ZSB0aGUgcmVzdWx0aW5nIGRlZmF1bHRzIHNldCBwZXItYXJj aGl0ZWN0dXJlLCByYXRoZXINCj4gdGhhbiBnbG9iYWxseS4gVGhhdCB3b3VsZCBhbGxvdyB4ODYg dG8gdHVuZSB0aGluZ3MgbW9yZSBmb3IgbmF0aXZlLXN0eWxlIGJ1aWxkcywNCj4gd2hpbGUgaW4g YWxsIGNhc2VzIGFsbG93aW5nIHVzZXIgdG8gb3ZlcnJpZGUuDQo+IA0KPiAvQnJ1Y2UNCg0KSSds bCBjaGFuZ2UgaXQgc28gdGhhdCBwZXItYXJjaCAoYW5kIGZvciBhcm0sIHBlciBwcm9jZXNzb3Ig dHlwZSkgZGVmYXVsdHMgYXJlIHRoZSBkZWZhdWx0cyB0aGF0IHdpbGwgYmUgdXNlZCAod2hlbiBz ZXQgdG8gMCkuIEknZCBsaWtlIHRvIGdpdmUgdXNlcnMgdGhlIG9wdGlvbiB0byB1c2UgdGhlIGRp c2NvdmVyeSBtZWNoYW5pc20gLSBJIHRoaW5rIHdlJ2xsIGhhdmUgdG8gdXNlIGFub3RoZXIgdmFs dWUgd2l0aCBzcGVjaWZpYyBtZWFuaW5nIGFuZCB3ZSBjYW4ndCB1c2UgcG9zaXRpdmUgaW50ZWdl cnMgc28gSSBndWVzcyB0aGUgYmVzdCB3ZSBjYW4gZG8gaXMgdXNlIC0xIGZvciB0aGlzLg0KDQpK dXJhag0K