From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 31F2445954; Tue, 10 Sep 2024 11:32:11 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1C81A427B6; Tue, 10 Sep 2024 11:32:11 +0200 (CEST) Received: from dkmailrelay1.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id DE4A7402A1 for ; Tue, 10 Sep 2024 11:32:09 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesys.local [192.168.4.10]) by dkmailrelay1.smartsharesystems.com (Postfix) with ESMTP id DF5242097B; Tue, 10 Sep 2024 11:32:08 +0200 (CEST) Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Subject: RE: [PATCH 1/6] eal: add static per-lcore memory allocation facility Date: Tue, 10 Sep 2024 11:32:07 +0200 X-MimeOLE: Produced By Microsoft Exchange V6.5 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35E9F6C4@smartserver.smartshare.dk> In-Reply-To: <20240910070344.699183-2-mattias.ronnblom@ericsson.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH 1/6] eal: add static per-lcore memory allocation facility Thread-Index: AdsDUOZ7doVJYfp0S6eZjBCjzN2h0AABm8Ug References: <20240506082721.120666-2-mattias.ronnblom@ericsson.com> <20240910070344.699183-1-mattias.ronnblom@ericsson.com> <20240910070344.699183-2-mattias.ronnblom@ericsson.com> From: =?UTF-8?B?TW9ydGVuIEJyw7hydXA=?= To: =?UTF-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , Cc: , "Stephen Hemminger" , "Konstantin Ananyev" , "David Marchand" X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org PiBGcm9tOiBNYXR0aWFzIFLDtm5uYmxvbSBbbWFpbHRvOm1hdHRpYXMucm9ubmJsb21AZXJpY3Nz b24uY29tXQ0KPiBTZW50OiBUdWVzZGF5LCAxMCBTZXB0ZW1iZXIgMjAyNCAwOS4wNA0KPiANCj4g SW50cm9kdWNlIERQREsgcGVyLWxjb3JlIGlkIHZhcmlhYmxlcywgb3IgbGNvcmUgdmFyaWFibGVz IGZvciBzaG9ydC4NCg0KVGhyb3VnaG91dCB0aGUgZGVzY3JpcHRpb25zIGFuZCBjb21tZW50cywN CnBsZWFzZSByZXBsYWNlICJsY29yZSBpZCIgd2l0aCAibGNvcmUiIChlLmcuICJwZXItbGNvcmUg dmFyaWFibGVzIiksDQp3aGVuIHJlZmVycmluZyB0byB0aGUgbGNvcmUsIGFuZCBub3QgdGhlIGlu ZGV4IG9mIHRoZSBsY29yZS4NCihZb3VyIGludGVudGlvbiBtaWdodCBiZSB0byBoaWdobGlnaHQg dGhhdCBpdCBvbmx5IGNvdmVycyB0aHJlYWRzIHdpdGggYW4gbGNvcmUgaWQsDQpidXQgaWYgdGhh dCB3YXNuJ3QgdGhlIGNhc2UsIHlvdSB3b3VsZCByZWZlciB0byB0aGVtIGFzICJ0aHJlYWRzIiBu b3QgImxjb3JlcyIuKQ0KRXhjZXB0LCBvZiBjb3Vyc2UsIHdoZW4gcmVmZXJyaW5nIHRvIGFuIGFj dHVhbCBsY29yZSBpZCwgZS5nLiBsY29yZV9pZCBmdW5jdGlvbiBwYXJhbWV0ZXJzLg0KDQpQYXJh cGhyYXNpbmc6DQpDb25zaWRlciB0aGUgdHlwZSBvZiB3aGF0IHlvdSBhcmUgcmVmZXJyaW5nIHRv Ow0KdXNlICJsY29yZSIgaWYgaXRzIHR5cGUgaXMgInRocmVhZCIsIGFuZA0KdXNlICJsY29yZSBp ZCIgaWYgaXRzIHR5cGUgaXMgImludCIuDQoNCkkgbWlnaHQgYmUgd3JvbmcgaGVyZSwgYnV0IHBs ZWFzZSB0aGluayBoYXJkIGFib3V0IGl0Lg0KDQo+IA0KPiBBbiBsY29yZSB2YXJpYWJsZSBoYXMg b25lIHZhbHVlIGZvciBldmVyeSBjdXJyZW50IGFuZCBmdXR1cmUgbGNvcmUNCj4gaWQtZXF1aXBw ZWQgdGhyZWFkLg0KPiANCj4gVGhlIHByaW1hcnkgPHJ0ZV9sY29yZV92YXIuaD4gdXNlIGNhc2Ug aXMgZm9yIHN0YXRpY2FsbHkgYWxsb2NhdGluZw0KPiBzbWFsbCwgZnJlcXVlbnRseS1hY2Nlc3Nl ZCBkYXRhIHN0cnVjdHVyZXMsIGZvciB3aGljaCBvbmUgaW5zdGFuY2UNCj4gc2hvdWxkIGV4aXN0 IGZvciBlYWNoIGxjb3JlLg0KPiANCj4gTGNvcmUgdmFyaWFibGVzIGFyZSBzaW1pbGFyIHRvIHRo cmVhZC1sb2NhbCBzdG9yYWdlIChUTFMsIGUuZy4sIEMxMQ0KPiBfVGhyZWFkX2xvY2FsKSwgYnV0 IGRlY291cGxpbmcgdGhlIHZhbHVlcycgbGlmZSB0aW1lIHdpdGggdGhhdCBvZiB0aGUNCj4gdGhy ZWFkcy4NCj4gDQo+IExjb3JlIHZhcmlhYmxlcyBhcmUgYWxzbyBzaW1pbGFyIGluIHRlcm1zIG9m IGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkNCj4gRnJlZUJTRCBrZXJuZWwncyBEUENQVV8qKCkg ZmFtaWx5IG9mIG1hY3JvcyBhbmQgdGhlIGFzc29jaWF0ZWQNCj4gYnVpbGQtdGltZSBtYWNoaW5l cnkuIERQQ1BVIHVzZXMgbGlua2VyIHNjcmlwdHMsIHdoaWNoIGVmZmVjdGl2ZWx5DQo+IHByZXZl bnRzIHRoZSByZXVzZSBvZiBpdHMsIG90aGVyd2lzZSBzZWVtaW5nbHkgdmlhYmxlLCBhcHByb2Fj aC4NCj4gDQo+IFRoZSBjdXJyZW50bHktcHJldmFpbGluZyB3YXkgdG8gc29sdmUgdGhlIHNhbWUg cHJvYmxlbSBhcyBsY29yZQ0KPiB2YXJpYWJsZXMgaXMgdG8ga2VlcCBhIG1vZHVsZSdzIHBlci1s Y29yZSBkYXRhIGFzIFJURV9NQVhfTENPUkUtc2l6ZWQNCj4gYXJyYXkgb2YgY2FjaGUtYWxpZ25l ZCwgUlRFX0NBQ0hFX0dVQVJEZWQgc3RydWN0cy4gVGhlIGJlbmVmaXQgb2YNCj4gbGNvcmUgdmFy aWFibGVzIG92ZXIgdGhpcyBhcHByb2FjaCBpcyB0aGF0IGRhdGEgcmVsYXRlZCB0byB0aGUgc2Ft ZQ0KPiBsY29yZSBub3cgaXMgY2xvc2UgKHNwYXRpYWxseSwgaW4gbWVtb3J5KSwgcmF0aGVyIHRo YW4gZGF0YSB1c2VkIGJ5DQo+IHRoZSBzYW1lIG1vZHVsZSwgd2hpY2ggaW4gdHVybiBhdm9pZCBl eGNlc3NpdmUgdXNlIG9mIHBhZGRpbmcsDQo+IHBvbGx1dGluZyBjYWNoZXMgd2l0aCB1bnVzZWQg ZGF0YS4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IE1hdHRpYXMgUsO2bm5ibG9tIDxtYXR0aWFzLnJv bm5ibG9tQGVyaWNzc29uLmNvbT4NCj4gQWNrZWQtYnk6IE1vcnRlbiBCcsO4cnVwIDxtYkBzbWFy dHNoYXJlc3lzdGVtcy5jb20+DQo+IA0KPiAtLQ0KDQo+ICsrKyBiL2RvYy9hcGkvZG94eS1hcGkt aW5kZXgubWQNCj4gQEAgLTk5LDYgKzk5LDcgQEAgVGhlIHB1YmxpYyBBUEkgaGVhZGVycyBhcmUg Z3JvdXBlZCBieSB0b3BpY3M6DQo+ICAgIFtpbnRlcnJ1cHRzXShAcmVmIHJ0ZV9pbnRlcnJ1cHRz LmgpLA0KPiAgICBbbGF1bmNoXShAcmVmIHJ0ZV9sYXVuY2guaCksDQo+ICAgIFtsY29yZV0oQHJl ZiBydGVfbGNvcmUuaCksDQo+ICsgIFtsY29yZS12YXJpYmxlXShAcmVmIHJ0ZV9sY29yZV92YXIu aCksDQoNClR5cG86IHZhcmlibGUgLT4gdmFyaWFibGUNCg0KDQo+ICsrKyBiL2RvYy9ndWlkZXMv cmVsX25vdGVzL3JlbGVhc2VfMjRfMTEucnN0DQo+IEBAIC01NSw2ICs1NSwyMCBAQCBOZXcgRmVh dHVyZXMNCj4gICAgICAgQWxzbywgbWFrZSBzdXJlIHRvIHN0YXJ0IHRoZSBhY3R1YWwgdGV4dCBh dCB0aGUgbWFyZ2luLg0KPiAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQo+IA0KPiArKiAqKkFkZGVkIEVBTCBwZXItbGNvcmUgc3Rh dGljIG1lbW9yeSBhbGxvY2F0aW9uIGZhY2lsaXR5LioqDQo+ICsNCj4gKyAgICBBZGRlZCBFQUwg QVBJIDxydGVfbGNvcmVfdmFyLmg+IGZvciBzdGF0aWNhbGx5IGFsbG9jYXRpbmcgc21hbGwsDQo+ ICsgICAgZnJlcXVlbnRseS1hY2Nlc3NlZCBkYXRhIHN0cnVjdHVyZXMsIGZvciB3aGljaCBvbmUg aW5zdGFuY2Ugc2hvdWxkDQo+ICsgICAgZXhpc3QgZm9yIGVhY2ggbGNvcmUuDQo+ICsNCj4gKyAg ICBXaXRoIGxjb3JlIHZhcmlhYmxlcywgZGF0YSBpcyBvcmdhbml6ZWQgc3BhdGlhbGx5IG9uIGEg cGVyLWxjb3JlDQo+ICsgICAgYmFzaXMsIHJhdGhlciB0aGFuIHBlciBsaWJyYXJ5IG9yIFBNRCwg YXZvaWRpbmcgdGhlIG5lZWQgZm9yIGNhY2hlDQo+ICsgICAgYWxpZ25pbmcgKG9yIFJURV9DQUNI RV9HVUFSRGluZykgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpbiB0dXJuDQo+ICsgICAgcmVkdWNl cyBDUFUgY2FjaGUgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiwgaW1wcm92aW5nIHBlcmZvcm1hbmNl Lg0KPiArDQo+ICsgICAgTGNvcmUgdmFyaWFibGVzIGFyZSBzaW1pbGFyIHRvIHRocmVhZC1sb2Nh bCBzdG9yYWdlIChUTFMsIGUuZy4sDQo+ICsgICAgQzExIF9UaHJlYWRfbG9jYWwpLCBidXQgZGVj b3VwbGluZyB0aGUgdmFsdWVzJyBsaWZlIHRpbWUgZnJvbSB0aGF0DQo+ICsgICAgb2YgdGhlIHRo cmVhZHMuDQoNCldoZW4gcmVmZXJyaW5nIHRvIFRMUywgeW91IG1pZ2h0IHdhbnQgdG8gY2xhcmlm eSB0aGF0IGxjb3JlIHZhcmlhYmxlcyBhcmUgbm90IGluc3RhbnRpYXRlZCBmb3IgdW5yZWdpc3Rl cmVkIHRocmVhZHMuDQoNCg0KPiArc3RhdGljIHZvaWQgKmxjb3JlX2J1ZmZlcjsNCj4gK3N0YXRp YyBzaXplX3Qgb2Zmc2V0ID0gUlRFX01BWF9MQ09SRV9WQVI7DQo+ICsNCj4gK3N0YXRpYyB2b2lk ICoNCj4gK2xjb3JlX3Zhcl9hbGxvYyhzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKQ0KPiArew0K PiArCXZvaWQgKmhhbmRsZTsNCj4gKwl2b2lkICp2YWx1ZTsNCj4gKw0KPiArCW9mZnNldCA9IFJU RV9BTElHTl9DRUlMKG9mZnNldCwgYWxpZ24pOw0KPiArDQo+ICsJaWYgKG9mZnNldCArIHNpemUg PiBSVEVfTUFYX0xDT1JFX1ZBUikgew0KPiArCQlsY29yZV9idWZmZXIgPSBhbGlnbmVkX2FsbG9j KFJURV9DQUNIRV9MSU5FX1NJWkUsDQo+ICsJCQkJCSAgICAgTENPUkVfQlVGRkVSX1NJWkUpOw0K PiArCQlSVEVfVkVSSUZZKGxjb3JlX2J1ZmZlciAhPSBOVUxMKTsNCj4gKw0KPiArCQlvZmZzZXQg PSAwOw0KPiArCX0NCg0KVG8gZGV0ZXJtaW5lIGlmIHRoZSBsY29yZV9idWZmZXIgbWVtb3J5IHNo b3VsZCBiZSBhbGxvY2F0ZWQsIHdoeSBub3QganVzdCBjaGVjayBpZiBsY29yZV9idWZmZXIgPT0g TlVMTD8NClRoZW4gb2Zmc2V0IHdvdWxkbid0IG5lZWQgYW4gaW5pdGlhbCB2YWx1ZSBvZiBSVEVf TUFYX0xDT1JFX1ZBUi4NCg0KPiArDQo+ICsJaGFuZGxlID0gUlRFX1BUUl9BREQobGNvcmVfYnVm ZmVyLCBvZmZzZXQpOw0KPiArDQo+ICsJb2Zmc2V0ICs9IHNpemU7DQo+ICsNCj4gKwlSVEVfTENP UkVfVkFSX0ZPUkVBQ0hfVkFMVUUodmFsdWUsIGhhbmRsZSkNCj4gKwkJbWVtc2V0KHZhbHVlLCAw LCBzaXplKTsNCj4gKw0KPiArCUVBTF9MT0coREVCVUcsICJBbGxvY2F0ZWQgJSJQUkl1UFRSIiBi eXRlcyBvZiBwZXItbGNvcmUgZGF0YSB3aXRoIGEgIg0KPiArCQkiJSJQUkl1UFRSIi1ieXRlIGFs aWdubWVudCIsIHNpemUsIGFsaWduKTsNCj4gKw0KPiArCXJldHVybiBoYW5kbGU7DQo+ICt9DQoN Cg0KPiArLyoqDQo+ICsgKiBAZmlsZQ0KPiArICoNCj4gKyAqIFJURSBQZXItbGNvcmUgaWQgdmFy aWFibGVzDQoNClN1Z2dlc3QgbWVudGlvbmluZyB0aGUgc2hvcnQgZm9ybSB0b28sIGUuZy46DQoi UlRFIFBlci1sY29yZSBpZCB2YXJpYWJsZXMgKFJURSBMY29yZSB2YXJpYWJsZXMpIg0KDQo+ICsg Kg0KPiArICogVGhpcyBBUEkgcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gY3JlYXRlIGFuZCBhY2Nl c3MgcGVyLWxjb3JlIGlkDQo+ICsgKiB2YXJpYWJsZXMgaW4gYSBzcGFjZS0gYW5kIGN5Y2xlLWVm ZmljaWVudCBtYW5uZXIuDQo+ICsgKg0KPiArICogQSBwZXItbGNvcmUgaWQgdmFyaWFibGUgKG9y IGxjb3JlIHZhcmlhYmxlIGZvciBzaG9ydCkgaGFzIG9uZSB2YWx1ZQ0KPiArICogZm9yIGVhY2gg RUFMIHRocmVhZCBhbmQgcmVnaXN0ZXJlZCBub24tRUFMIHRocmVhZC4NCg0KQW5kIHNlcnZpY2Ug dGhyZWFkLg0KDQo+ICsgKiBUaGVyZSBpcyBvbmUNCj4gKyAqIGNvcHkgZm9yIGVhY2ggY3VycmVu dCBhbmQgZnV0dXJlIGxjb3JlIGlkLWVxdWlwcGVkIHRocmVhZCwgd2l0aCB0aGUNCg0KIm9uZSBj b3B5IiAtPiAib25lIGluc3RhbmNlIg0KDQo+ICsgKiB0b3RhbCBudW1iZXIgb2YgY29waWVzIGFt b3VudGluZyB0byBAYyBSVEVfTUFYX0xDT1JFLiBUaGUgdmFsdWUgb2YNCg0KImNvcGllcyIgLT4g Imluc3RhbmNlcyINCg0KPiArICogYW4gbGNvcmUgdmFyaWFibGUgZm9yIGEgcGFydGljdWxhciBs Y29yZSBpZCBpcyBpbmRlcGVuZGVudCBmcm9tDQo+ICsgKiBvdGhlciB2YWx1ZXMgKGZvciBvdGhl ciBsY29yZSBpZHMpIHdpdGhpbiB0aGUgc2FtZSBsY29yZSB2YXJpYWJsZS4NCj4gKyAqDQo+ICsg KiBJbiBvcmRlciB0byBhY2Nlc3MgdGhlIHZhbHVlcyBvZiBhbiBsY29yZSB2YXJpYWJsZSwgYSBo YW5kbGUgaXMNCj4gKyAqIHVzZWQuIFRoZSB0eXBlIG9mIHRoZSBoYW5kbGUgaXMgYSBwb2ludGVy IHRvIHRoZSB2YWx1ZSdzIHR5cGUNCj4gKyAqIChlLmcuLCBmb3IgQGMgdWludDMyX3QgbGNvcmUg dmFyaWFibGUsIHRoZSBoYW5kbGUgaXMgYQ0KPiArICogPGNvZGU+dWludDMyX3QgKjwvY29kZT4u IFRoZSBoYW5kbGVyIHR5cGUgaXMgdXNlZCB0byBpbmZvcm0gdGhlDQoNClR5cG86ICJoYW5kbGVy IiAtPiAiaGFuZGxlIiwgSSB0aGluayA6LS8NCkZvdW5kIHRoaXMgdHlwbyBtdWx0aXBsZSB0aW1l czsgc2VhcmNoLXJlcGxhY2UuDQoNCj4gKyAqIGFjY2VzcyBtYWNyb3MgdGhlIHR5cGUgb2YgdGhl IHZhbHVlcy4gQSBoYW5kbGUgbWF5IGJlIHBhc3NlZA0KPiArICogYmV0d2VlbiBtb2R1bGVzIGFu ZCB0aHJlYWRzIGp1c3QgbGlrZSBhbnkgcG9pbnRlciwgYnV0IGl0cyB2YWx1ZQ0KPiArICogbXVz dCBiZSB0cmVhdGVkIGFzIGEgYW4gb3BhcXVlIGlkZW50aWZpZXIuIEFuIGFsbG9jYXRlZCBoYW5k bGUNCj4gKyAqIG5ldmVyIGhhcyB0aGUgdmFsdWUgTlVMTC4NCj4gKyAqDQo+ICsgKiBAYiBDcmVh dGlvbg0KPiArICoNCj4gKyAqIEFuIGxjb3JlIHZhcmlhYmxlIGlzIGNyZWF0ZWQgaW4gdHdvIHN0 ZXBzOg0KPiArICogIDEuIERlZmluZSBhIGxjb3JlIHZhcmlhYmxlIGhhbmRsZSBieSB1c2luZyBA cmVmIFJURV9MQ09SRV9WQVJfSEFORExFLg0KPiArICogIDIuIEFsbG9jYXRlIGxjb3JlIHZhcmlh YmxlIHN0b3JhZ2UgYW5kIGluaXRpYWxpemUgdGhlIGhhbmRsZSB3aXRoDQo+ICsgKiAgICAgYSB1 bmlxdWUgaWRlbnRpZmllciBieSBAcmVmIFJURV9MQ09SRV9WQVJfQUxMT0Mgb3INCj4gKyAqICAg ICBAcmVmIFJURV9MQ09SRV9WQVJfSU5JVC4gQWxsb2NhdGlvbiBnZW5lcmFsbHkgb2NjdXJzIHRo ZSB0aW1lIG9mDQo+ICsgKiAgICAgbW9kdWxlIGluaXRpYWxpemF0aW9uLCBidXQgbWF5IGJlIGRv bmUgYXQgYW55IHRpbWUuDQo+ICsgKg0KPiArICogQW4gbGNvcmUgdmFyaWFibGUgaXMgbm90IHRp ZWQgdG8gdGhlIG93bmluZyB0aHJlYWQncyBsaWZldGltZS4gSXQncw0KPiArICogYXZhaWxhYmxl IGZvciB1c2UgYnkgYW55IHRocmVhZCBpbW1lZGlhdGVseSBhZnRlciBoYXZpbmcgYmVlbg0KPiAr ICogYWxsb2NhdGVkLCBhbmQgY29udGludWVzIHRvIGJlIGF2YWlsYWJsZSB0aHJvdWdob3V0IHRo ZSBsaWZldGltZSBvZg0KPiArICogdGhlIEVBTC4NCj4gKyAqDQo+ICsgKiBMY29yZSB2YXJpYWJs ZXMgY2Fubm90IGFuZCBuZWVkIG5vdCBiZSBmcmVlZC4NCj4gKyAqDQo+ICsgKiBAYiBBY2Nlc3MN Cj4gKyAqDQo+ICsgKiBUaGUgdmFsdWUgb2YgYW55IGxjb3JlIHZhcmlhYmxlIGZvciBhbnkgbGNv cmUgaWQgbWF5IGJlIGFjY2Vzc2VkDQo+ICsgKiBmcm9tIGFueSB0aHJlYWQgKGluY2x1ZGluZyB1 bnJlZ2lzdGVyZWQgdGhyZWFkcyksIGJ1dCBpdCBzaG91bGQNCj4gKyAqIG9ubHkgYmUgKmZyZXF1 ZW50bHkqIHJlYWQgZnJvbSBvciB3cml0dGVuIHRvIGJ5IHRoZSBvd25lci4NCj4gKyAqDQo+ICsg KiBWYWx1ZXMgb2YgdGhlIHNhbWUgbGNvcmUgdmFyaWFibGUgYnV0IG93bmVkIGJ5IHRvIGRpZmZl cmVudCBsY29yZQ0KDQpUeXBvOiB0byAtPiB0d28NCg0KPiArICogaWRzIG1heSBiZSBmcmVxdWVu dGx5IHJlYWQgb3Igd3JpdHRlbiBieSB0aGUgb3duZXJzIHdpdGhvdXQgcmlza2luZw0KPiArICog ZmFsc2Ugc2hhcmluZy4NCj4gKyAqDQo+ICsgKiBBbiBhcHByb3ByaWF0ZSBzeW5jaHJvbml6YXRp b24gbWVjaGFuaXNtIChlLmcuLCBhdG9taWMgbG9hZHMgYW5kDQo+ICsgKiBzdG9yZXMpIHNob3Vs ZCBlbXBsb3llZCB0byBhc3N1cmUgdGhlcmUgYXJlIG5vIGRhdGEgcmFjZXMgYmV0d2Vlbg0KPiAr ICogdGhlIG93bmluZyB0aHJlYWQgYW5kIGFueSBub24tb3duZXIgdGhyZWFkcyBhY2Nlc3Npbmcg dGhlIHNhbWUNCj4gKyAqIGxjb3JlIHZhcmlhYmxlIGluc3RhbmNlLg0KPiArICoNCj4gKyAqIFRo ZSB2YWx1ZSBvZiB0aGUgbGNvcmUgdmFyaWFibGUgZm9yIGEgcGFydGljdWxhciBsY29yZSBpZCBp cw0KPiArICogYWNjZXNzZWQgdXNpbmcgQHJlZiBSVEVfTENPUkVfVkFSX0xDT1JFX1ZBTFVFLg0K PiArICoNCj4gKyAqIEEgY29tbW9uIHBhdHRlcm4gaXMgZm9yIGFuIEVBTCB0aHJlYWQgb3IgYSBy ZWdpc3RlcmVkIG5vbi1FQUwNCj4gKyAqIHRocmVhZCB0byBhY2Nlc3MgaXRzIG93biBsY29yZSB2 YXJpYWJsZSB2YWx1ZS4gRm9yIHRoaXMgcHVycG9zZSwgYQ0KPiArICogc2hvcnQtaGFuZCBleGlz dHMgaW4gdGhlIGZvcm0gb2YgQHJlZiBSVEVfTENPUkVfVkFSX1ZBTFVFLg0KPiArICoNCj4gKyAq IEFsdGhvdWdoIHRoZSBoYW5kbGUgKGFzIGRlZmluZWQgYnkgQHJlZiBSVEVfTENPUkVfVkFSX0hB TkRMRSkgaXMgYQ0KPiArICogcG9pbnRlciB3aXRoIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHZhbHVl LCBpdCBtYXkgbm90IGJlIGRpcmVjdGx5DQo+ICsgKiBkZXJlZmVyZW5jZWQgYW5kIG11c3QgYmUg dHJlYXRlZCBhcyBhbiBvcGFxdWUgaWRlbnRpZmllci4NCj4gKyAqDQo+ICsgKiBMY29yZSB2YXJp YWJsZSBoYW5kbGVzIGFuZCB2YWx1ZSBwb2ludGVycyBtYXkgYmUgZnJlZWx5IHBhc3NlZA0KPiAr ICogYmV0d2VlbiBkaWZmZXJlbnQgdGhyZWFkcy4NCj4gKyAqDQo+ICsgKiBAYiBTdG9yYWdlDQo+ ICsgKg0KPiArICogQW4gbGNvcmUgdmFyaWFibGUncyB2YWx1ZXMgbWF5IGJ5IG9mIGEgcHJpbWl0 aXZlIHR5cGUgbGlrZSBAYyBpbnQsDQoNClR3byB0eXBvczogInZhbHVlcyBtYXkgYnkiIC0+ICJ2 YWx1ZSBtYXkgYmUiDQoNCj4gKyAqIGJ1dCB3b3VsZCBtb3JlIHR5cGljYWxseSBiZSBhIEBjIHN0 cnVjdC4NCj4gKyAqDQo+ICsgKiBUaGUgbGNvcmUgdmFyaWFibGUgaGFuZGxlIGludHJvZHVjZXMg YSBwZXItdmFyaWFibGUgKG5vdA0KPiArICogcGVyLXZhbHVlL3Blci1sY29yZSBpZCkgb3Zlcmhl YWQgb2YgQGMgc2l6ZW9mKHZvaWQgKikgYnl0ZXMsIHNvDQo+ICsgKiB0aGVyZSBhcmUgc29tZSBt ZW1vcnkgZm9vdHByaW50IGdhaW5zIHRvIGJlIG1hZGUgYnkgb3JnYW5pemluZyBhbGwNCj4gKyAq IHBlci1sY29yZSBpZCBkYXRhIGZvciBhIHBhcnRpY3VsYXIgbW9kdWxlIGFzIG9uZSBsY29yZSB2 YXJpYWJsZQ0KPiArICogKGUuZy4sIGFzIGEgc3RydWN0KS4NCj4gKyAqDQo+ICsgKiBBbiBhcHBs aWNhdGlvbiBtYXkgY2hvb3NlIHRvIGRlZmluZSBhbiBsY29yZSB2YXJpYWJsZSBoYW5kbGUsIHdo aWNoDQo+ICsgKiBpdCB0aGVuIGl0IGdvZXMgb24gdG8gbmV2ZXIgYWxsb2NhdGUuDQo+ICsgKg0K PiArICogVGhlIHNpemUgb2YgYSBsY29yZSB2YXJpYWJsZSdzIHZhbHVlIG11c3QgYmUgbGVzcyB0 aGFuIHRoZSBEUERLDQo+ICsgKiBidWlsZC10aW1lIGNvbnN0YW50IEBjIFJURV9NQVhfTENPUkVf VkFSLg0KPiArICoNCj4gKyAqIFRoZSBsY29yZSB2YXJpYWJsZSBhcmUgc3RvcmVkIGluIGEgc2Vy aWVzIG9mIGxjb3JlIGJ1ZmZlcnMsIHdoaWNoDQo+ICsgKiBhcmUgYWxsb2NhdGVkIGZyb20gdGhl IGxpYmMgaGVhcC4gSGVhcCBhbGxvY2F0aW9uIGZhaWx1cmVzIGFyZQ0KPiArICogdHJlYXRlZCBh cyBmYXRhbC4NCj4gKyAqDQo+ICsgKiBMY29yZSB2YXJpYWJsZXMgc2hvdWxkIGdlbmVyYWxseSAq bm90KiBiZSBAcmVmIF9fcnRlX2NhY2hlX2FsaWduZWQNCj4gKyAqIGFuZCBuZWVkICpub3QqIGlu Y2x1ZGUgYSBAcmVmIFJURV9DQUNIRV9HVUFSRCBmaWVsZCwgc2luY2UgdGhlIHVzZQ0KPiArICog b2YgdGhlc2UgY29uc3RydWN0cyBhcmUgZGVzaWduZWQgdG8gYXZvaWQgZmFsc2Ugc2hhcmluZy4g SW4gdGhlDQo+ICsgKiBjYXNlIG9mIGFuIGxjb3JlIHZhcmlhYmxlIGluc3RhbmNlLCB0aGUgdGhy ZWFkIG1vc3QgcmVjZW50bHkNCj4gKyAqIGFjY2Vzc2luZyBuZWFyYnkgZGF0YSBzdHJ1Y3R1cmVz IHNob3VsZCBhbG1vc3QtYWx3YXlzIHRoZSBsY29yZQ0KDQpNaXNzaW5nIHdvcmQ6IHNob3VsZCBh bG1vc3QtYWx3YXlzICpiZSogdGhlIGxjb3JlIHZhcmlhYmxlcycgb3duZXIuDQoNCg0KPiArICog dmFyaWFibGVzJyBvd25lci4gQWRkaW5nIHBhZGRpbmcgd2lsbCBpbmNyZWFzZSB0aGUgZWZmZWN0 aXZlIG1lbW9yeQ0KPiArICogd29ya2luZyBzZXQgc2l6ZSwgcG90ZW50aWFsbHkgcmVkdWNpbmcg cGVyZm9ybWFuY2UuDQo+ICsgKg0KPiArICogTGNvcmUgdmFyaWFibGUgdmFsdWVzIHRha2Ugb24g YW4gaW5pdGlhbCB2YWx1ZSBvZiB6ZXJvLg0KPiArICoNCj4gKyAqIEBiIEV4YW1wbGUNCj4gKyAq DQo+ICsgKiBCZWxvdyBpcyBhbiBleGFtcGxlIG9mIHRoZSB1c2Ugb2YgYW4gbGNvcmUgdmFyaWFi bGU6DQo+ICsgKg0KPiArICogQGNvZGV7LmN9DQo+ICsgKiBzdHJ1Y3QgZm9vX2xjb3JlX3N0YXRl IHsNCj4gKyAqICAgICAgICAgaW50IGE7DQo+ICsgKiAgICAgICAgIGxvbmcgYjsNCj4gKyAqIH07 DQo+ICsgKg0KPiArICogc3RhdGljIFJURV9MQ09SRV9WQVJfSEFORExFKHN0cnVjdCBmb29fbGNv cmVfc3RhdGUsIGxjb3JlX3N0YXRlcyk7DQo+ICsgKg0KPiArICogbG9uZyBmb29fZ2V0X2FfcGx1 c19iKHZvaWQpDQo+ICsgKiB7DQo+ICsgKiAgICAgICAgIHN0cnVjdCBmb29fbGNvcmVfc3RhdGUg KnN0YXRlID0gUlRFX0xDT1JFX1ZBUl9WQUxVRShsY29yZV9zdGF0ZXMpOw0KPiArICoNCj4gKyAq ICAgICAgICAgcmV0dXJuIHN0YXRlLT5hICsgc3RhdGUtPmI7DQo+ICsgKiB9DQo+ICsgKg0KPiAr ICogUlRFX0lOSVQocnRlX2Zvb19pbml0KQ0KPiArICogew0KPiArICogICAgICAgICBSVEVfTENP UkVfVkFSX0FMTE9DKGxjb3JlX3N0YXRlcyk7DQo+ICsgKg0KPiArICogICAgICAgICBzdHJ1Y3Qg Zm9vX2xjb3JlX3N0YXRlICpzdGF0ZTsNCj4gKyAqICAgICAgICAgUlRFX0xDT1JFX1ZBUl9GT1JF QUNIX1ZBTFVFKHN0YXRlLCBsY29yZV9zdGF0ZXMpIHsNCj4gKyAqICAgICAgICAgICAgICAgICAo aW5pdGlhbGl6ZSAnc3RhdGUnKQ0KDQpDb25zaWRlcjogKGluaXRpYWxpemUgJ3N0YXRlJykgLT4g LyogaW5pdGlhbGl6ZSAnc3RhdGUnICovDQoNCj4gKyAqICAgICAgICAgfQ0KPiArICoNCj4gKyAq ICAgICAgICAgKG90aGVyIGluaXRpYWxpemF0aW9uKQ0KDQpDb25zaWRlcjogKG90aGVyIGluaXRp YWxpemF0aW9uKSAtPiAvKiBvdGhlciBpbml0aWFsaXphdGlvbiAqLw0KDQo+ICsgKiB9DQo+ICsg KiBAZW5kY29kZQ0KPiArICoNCj4gKyAqDQo+ICsgKiBAYiBBbHRlcm5hdGl2ZXMNCj4gKyAqDQo+ ICsgKiBMY29yZSB2YXJpYWJsZXMgYXJlIGRlc2lnbmVkIHRvIHJlcGxhY2UgYSBwYXR0ZXJuIGV4 ZW1wbGlmaWVkIGJlbG93Og0KPiArICogQGNvZGV7LmN9DQo+ICsgKiBzdHJ1Y3QgX19ydGVfY2Fj aGVfYWxpZ25lZCBmb29fbGNvcmVfc3RhdGUgew0KPiArICogICAgICAgICBpbnQgYTsNCj4gKyAq ICAgICAgICAgbG9uZyBiOw0KPiArICogICAgICAgICBSVEVfQ0FDSEVfR1VBUkQ7DQo+ICsgKiB9 Ow0KPiArICoNCj4gKyAqIHN0YXRpYyBzdHJ1Y3QgZm9vX2xjb3JlX3N0YXRlIGxjb3JlX3N0YXRl c1tSVEVfTUFYX0xDT1JFXTsNCj4gKyAqIEBlbmRjb2RlDQo+ICsgKg0KPiArICogVGhpcyBzY2hl bWUgaXMgc2ltcGxlIGFuZCBlZmZlY3RpdmUsIGJ1dCBoYXMgb25lIGRyYXdiYWNrOiB0aGUgZGF0 YQ0KPiArICogaXMgb3JnYW5pemVkIHNvIHRoYXQgb2JqZWN0cyByZWxhdGVkIHRvIGFsbCBsY29y ZXMgZm9yIGEgcGFydGljdWxhcg0KPiArICogbW9kdWxlIGlzIGtlcHQgY2xvc2UgaW4gbWVtb3J5 LiBBdCBhIGJhcmUgbWluaW11bSwgdGhpcyBmb3JjZXMgdGhlDQo+ICsgKiB1c2Ugb2YgY2FjaGUt bGluZSBhbGlnbm1lbnQgdG8gYXZvaWQgZmFsc2Ugc2hhcmluZy4gV2l0aCBDUFUNCg0KQ29uc2lk ZXIgYWRkaW5nOiB1c2Ugb2YgKnBhZGRpbmcgdG8qIGNhY2hlLWxpbmUgYWxpZ25tZW50DQpNeSBw b2ludCBoZXJlIGlzOg0KVGhpcyBzZW50ZW5jZSBzaG91bGQgc29tZWhvdyBpbmNsdWRlIHRoZSB3 b3JkICJwYWRkaW5nIi4NClRoaXMgcGFyYWdyYXBoIGlzIG5vdCBvbmx5IGFib3VkIGNhY2hlIGxp bmUgYWxpZ25tZW50LCBpdCBpcyBwcmltYXJpbHkgYWJvdXQgcGFkZGluZy4NCg0KPiArICogaGFy ZHdhcmUgcHJlZmV0Y2hpbmcgYW5kIG1lbW9yeSBsb2FkcyByZXN1bHRpbmcgZnJvbSBzcGVjdWxh dGl2ZQ0KPiArICogZXhlY3V0aW9uIChmdW5jdGlvbnMgd2hpY2ggc2VlbWluZ2x5IGFyZSBnZXR0 aW5nIG1vcmUgZWFnZXIgZmFzdGVyDQo+ICsgKiB0aGFuIHRoZXkgYXJlIGdldHRpbmcgbW9yZSBp bnRlbGxpZ2VudCksIG9uZSBvciBtb3JlICJndWFyZCIgY2FjaGUNCj4gKyAqIGxpbmVzIG1heSBi ZSByZXF1aXJlZCB0byBzZXBhcmF0ZSBvbmUgbGNvcmUncyBkYXRhIGZyb20gYW5vdGhlcidzLg0K PiArICoNCj4gKyAqIExjb3JlIHZhcmlhYmxlcyBoYXMgdGhlIHVwc2lkZSBvZiB3b3JraW5nIHdp dGgsIG5vdCBhZ2FpbnN0LCB0aGUNCg0KVHlwbzogaGFzIC0+IGhhdmUNCg0KPiArICogQ1BVJ3Mg YXNzdW1wdGlvbnMgYW5kIGZvciBleGFtcGxlIG5leHQtbGluZSBwcmVmZXRjaGVycyBtYXkgd2Vs bA0KPiArICogd29yayB0aGUgd2F5IGl0cyBkZXNpZ25lcnMgaW50ZW5kZWQgKGkuZS4sIHRvIHRo ZSBiZW5lZml0LCBub3QNCj4gKyAqIGRldHJpbWVudCwgb2Ygc3lzdGVtIHBlcmZvcm1hbmNlKS4N Cj4gKyAqDQo+ICsgKiBBbm90aGVyIGFsdGVybmF0aXZlIHRvIEByZWYgcnRlX2xjb3JlX3Zhci5o IGlzIHRoZSBAcmVmDQo+ICsgKiBydGVfcGVyX2xjb3JlLmggQVBJLCB3aGljaCBtYWtlIHVzZSBv ZiB0aHJlYWQtbG9jYWwgc3RvcmFnZSAoVExTLA0KDQpUeXBvOiBtYWtlIC0+IG1ha2VzDQoNCj4g KyAqIGUuZy4sIEdDQyBfX3RocmVhZCBvciBDMTEgX1RocmVhZF9sb2NhbCkuIFRoZSBtYWluIGRp ZmZlcmVuY2VzDQo+ICsgKiBiZXR3ZWVuIGJ5IHVzaW5nIHRoZSB2YXJpb3VzIGZvcm1zIG9mIFRM UyAoZS5nLiwgQHJlZg0KPiArICogUlRFX0RFRklORV9QRVJfTENPUkUgb3IgX1RocmVhZF9sb2Nh bCkgYW5kIHRoZSB1c2Ugb2YgbGNvcmUNCj4gKyAqIHZhcmlhYmxlcyBhcmU6DQo+ICsgKg0KPiAr ICogICAqIFRoZSBleGlzdGVuY2UgYW5kIG5vbi1leGlzdGVuY2Ugb2YgYSB0aHJlYWQtbG9jYWwg dmFyaWFibGUNCj4gKyAqICAgICBpbnN0YW5jZSBmb2xsb3cgdGhhdCBvZiBwYXJ0aWN1bGFyIHRo cmVhZCdzLiBUaGUgZGF0YSBjYW5ub3QgYmUNCg0KVHlwbzogInRocmVhZCdzIiAtPiAidGhyZWFk cyIsIEkgdGhpbmsuIDotLw0KDQo+ICsgKiAgICAgYWNjZXNzZWQgYmVmb3JlIHRoZSB0aHJlYWQg aGFzIGJlZW4gY3JlYXRlZCwgbm9yIGFmdGVyIGl0IGhhcw0KPiArICogICAgIGV4aXRlZC4gQXMg YSByZXN1bHQsIHRocmVhZC1sb2NhbCB2YXJpYWJsZXMgbXVzdCBpbml0aWFsaXplZCBpbg0KDQpN aXNzaW5nIHdvcmQ6IG11c3QgKmJlKiBpbml0aWFsaXplZA0KDQo+ICsgKiAgICAgYSAibGF6eSIg bWFubmVyIChlLmcuLCBhdCB0aGUgcG9pbnQgb2YgdGhyZWFkIGNyZWF0aW9uKS4gTGNvcmUNCj4g KyAqICAgICB2YXJpYWJsZXMgbWF5IGJlIGFjY2Vzc2VkIGltbWVkaWF0ZWx5IGFmdGVyIGhhdmlu ZyBiZWVuDQo+ICsgKiAgICAgYWxsb2NhdGVkICh3aGljaCBtYXkgYmUgcHJpb3IgYW55IHRocmVh ZCBiZXlvbmQgdGhlIG1haW4NCj4gKyAqICAgICB0aHJlYWQgaXMgcnVubmluZykuDQo+ICsgKiAg ICogQSB0aHJlYWQtbG9jYWwgdmFyaWFibGUgaXMgZHVwbGljYXRlZCBhY3Jvc3MgYWxsIHRocmVh ZHMgaW4gdGhlDQo+ICsgKiAgICAgcHJvY2VzcywgaW5jbHVkaW5nIHVucmVnaXN0ZXJlZCBub24t RUFMIHRocmVhZHMgKGkuZS4sDQo+ICsgKiAgICAgInJlZ3VsYXIiIHRocmVhZHMpLiBGb3IgRFBE SyBhcHBsaWNhdGlvbnMgaGVhdmlseSByZWx5aW5nIG9uDQo+ICsgKiAgICAgbXVsdGktdGhyZWFk aW5nIChpbiBjb25qdW5jdGlvbiB0byBEUERLJ3MgIm9uZSB0aHJlYWQgcGVyIGNvcmUiDQo+ICsg KiAgICAgcGF0dGVybiksIGVpdGhlciBieSBoYXZpbmcgbWFueSBjb25jdXJyZW50IHRocmVhZHMg b3INCj4gKyAqICAgICBjcmVhdGluZy9kZXN0cm95aW5nIHRocmVhZHMgYXQgYSBoaWdoIHJhdGUs IGFuIGV4Y2Vzc2l2ZSB1c2Ugb2YNCj4gKyAqICAgICB0aHJlYWQtbG9jYWwgdmFyaWFibGVzIG1h eSBjYXVzZSBpbmVmZmljaWVuY2llcyAoZS5nLiwNCj4gKyAqICAgICBpbmNyZWFzZWQgdGhyZWFk IGNyZWF0aW9uIG92ZXJoZWFkIGR1ZSB0byB0aHJlYWQtbG9jYWwgc3RvcmFnZQ0KPiArICogICAg IGluaXRpYWxpemF0aW9uIG9yIGluY3JlYXNlZCB0b3RhbCBSQU0gZm9vdHByaW50IHVzYWdlKS4g TGNvcmUNCj4gKyAqICAgICB2YXJpYWJsZXMgKm9ubHkqIGV4aXN0IGZvciB0aHJlYWRzIHdpdGgg YW4gbGNvcmUgaWQuDQo+ICsgKiAgICogSWYgZGF0YSBpbiB0aHJlYWQtbG9jYWwgc3RvcmFnZSBt YXkgYmUgc2hhcmVkIGJldHdlZW4gdGhyZWFkcw0KPiArICogICAgIChpLmUuLCBjYW4gYSBwb2lu dGVyIHRvIGEgdGhyZWFkLWxvY2FsIHZhcmlhYmxlIGJlIHBhc3NlZCB0bw0KPiArICogICAgIGFu ZCBzdWNjZXNzZnVsbHkgZGVyZWZlcmVuY2VkIGJ5IG5vbi1vd25pbmcgdGhyZWFkKSBkZXBlbmRz IG9uDQo+ICsgKiAgICAgdGhlIGRldGFpbHMgb2YgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbi4gV2l0 aCBHQ0MgX190aHJlYWQgYW5kDQo+ICsgKiAgICAgR0NDIF9UaHJlYWRfbG9jYWwsIHN1Y2ggZGF0 YSBzaGFyaW5nIGlzIHN1cHBvcnRlZC4gSW4gdGhlIEMxMQ0KPiArICogICAgIHN0YW5kYXJkLCB0 aGUgcmVzdWx0IG9mIGFjY2Vzc2luZyBhbm90aGVyIHRocmVhZCdzDQo+ICsgKiAgICAgX1RocmVh ZF9sb2NhbCBvYmplY3QgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4gTGNvcmUgdmFyaWFibGUN Cj4gKyAqICAgICBpbnN0YW5jZXMgbWF5IGJlIGFjY2Vzc2VkIHJlbGlhYmx5IGJ5IGFueSB0aHJl YWQuDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPHN0ZGRlZi5oPg0KPiArI2luY2x1ZGUgPHN0 ZGFsaWduLmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxydGVfY29tbW9uLmg+DQo+ICsjaW5jbHVkZSA8 cnRlX2NvbmZpZy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9sY29yZS5oPg0KPiArDQo+ICsjaWZkZWYg X19jcGx1c3BsdXMNCj4gK2V4dGVybiAiQyIgew0KPiArI2VuZGlmDQo+ICsNCj4gKy8qKg0KPiAr ICogR2l2ZW4gdGhlIGxjb3JlIHZhcmlhYmxlIHR5cGUsIHByb2R1Y2VzIHRoZSB0eXBlIG9mIHRo ZSBsY29yZQ0KPiArICogdmFyaWFibGUgaGFuZGxlLg0KPiArICovDQo+ICsjZGVmaW5lIFJURV9M Q09SRV9WQVJfSEFORExFX1RZUEUodHlwZSkJCVwNCj4gKwl0eXBlICoNCj4gKw0KPiArLyoqDQo+ ICsgKiBEZWZpbmUgYSBsY29yZSB2YXJpYWJsZSBoYW5kbGUuDQoNClR5cG86ICJhIGxjb3JlIiAt PiAiYW4gbGNvcmUiDQpGb3VuZCB0aGlzIHR5cG8gbXVsdGlwbGUgdGltZXM7IHNlYXJjaC1yZXBs YWNlICJhIGxjb3JlIi4NCg0KPiArICoNCj4gKyAqIFRoaXMgbWFjcm8gZGVmaW5lcyBhIHZhcmlh YmxlIHdoaWNoIGlzIHVzZWQgYXMgYSBoYW5kbGUgdG8gYWNjZXNzDQo+ICsgKiB0aGUgdmFyaW91 cyBwZXItbGNvcmUgaWQgaW5zdGFuY2VzIG9mIGEgcGVyLWxjb3JlIGlkIHZhcmlhYmxlLg0KDQpT dWdnZXN0Og0KInRoZSB2YXJpb3VzIHBlci1sY29yZSBpZCBpbnN0YW5jZXMgb2YgYSBwZXItbGNv cmUgaWQgdmFyaWFibGUiIC0+DQoidGhlIHZhcmlvdXMgaW5zdGFuY2VzIG9mIGEgcGVyLWxjb3Jl IGlkIHZhcmlhYmxlIg0KDQo+ICsgKg0KPiArICogVGhlIGFpbSB3aXRoIHRoaXMgbWFjcm8gaXMg dG8gbWFrZSBjbGVhciBhdCB0aGUgcG9pbnQgb2YNCj4gKyAqIGRlY2xhcmF0aW9uIHRoYXQgdGhp cyBpcyBhbiBsY29yZSBoYW5kbGVyLCByYXRoZXIgdGhhbiBhIHJlZ3VsYXINCj4gKyAqIHBvaW50 ZXIuDQo+ICsgKg0KPiArICogQWRkIEBiIHN0YXRpYyBhcyBhIHByZWZpeCBpbiBjYXNlIHRoZSBs Y29yZSB2YXJpYWJsZSBhcmUgb25seSB0byBiZQ0KDQpUeXBvOiBhcmUgLT4gaXMNCg0KPiArICog YWNjZXNzZWQgZnJvbSBhIHBhcnRpY3VsYXIgdHJhbnNsYXRpb24gdW5pdC4NCj4gKyAqLw0KPiAr I2RlZmluZSBSVEVfTENPUkVfVkFSX0hBTkRMRSh0eXBlLCBuYW1lKQlcDQo+ICsJUlRFX0xDT1JF X1ZBUl9IQU5ETEVfVFlQRSh0eXBlKSBuYW1lDQo+ICsNCj4gKy8qKg0KPiArICogQWxsb2NhdGUg c3BhY2UgZm9yIGFuIGxjb3JlIHZhcmlhYmxlLCBhbmQgaW5pdGlhbGl6ZSBpdHMgaGFuZGxlLg0K PiArICoNCj4gKyAqIFRoZSB2YWx1ZXMgb2YgdGhlIGxjb3JlIHZhcmlhYmxlIGFyZSBpbml0aWFs aXplZCB0byB6ZXJvLg0KDQpDb25zaWRlciBhZGRpbmc6ICJ0aGUgbGNvcmUgdmFyaWFibGUgKmlu c3RhbmNlcyogYXJlIGluaXRpYWxpemVkIg0KRm91bmQgdGhpcyB0eXBvIG11bHRpcGxlIHRpbWVz OyBzZWFyY2gtcmVwbGFjZS4NCg0KPiArICovDQo+ICsjZGVmaW5lIFJURV9MQ09SRV9WQVJfQUxM T0NfU0laRV9BTElHTihoYW5kbGUsIHNpemUsIGFsaWduKQlcDQo+ICsJaGFuZGxlID0gcnRlX2xj b3JlX3Zhcl9hbGxvYyhzaXplLCBhbGlnbikNCj4gKw0KPiArLyoqDQo+ICsgKiBBbGxvY2F0ZSBz cGFjZSBmb3IgYW4gbGNvcmUgdmFyaWFibGUsIGFuZCBpbml0aWFsaXplIGl0cyBoYW5kbGUsDQo+ ICsgKiB3aXRoIHZhbHVlcyBhbGlnbmVkIGZvciBhbnkgdHlwZSBvZiBvYmplY3QuDQo+ICsgKg0K PiArICogVGhlIHZhbHVlcyBvZiB0aGUgbGNvcmUgdmFyaWFibGUgYXJlIGluaXRpYWxpemVkIHRv IHplcm8uDQo+ICsgKi8NCj4gKyNkZWZpbmUgUlRFX0xDT1JFX1ZBUl9BTExPQ19TSVpFKGhhbmRs ZSwgc2l6ZSkJXA0KPiArCVJURV9MQ09SRV9WQVJfQUxMT0NfU0laRV9BTElHTihoYW5kbGUsIHNp emUsIDApDQo+ICsNCj4gKy8qKg0KPiArICogQWxsb2NhdGUgc3BhY2UgZm9yIGFuIGxjb3JlIHZh cmlhYmxlIG9mIHRoZSBzaXplIGFuZCBhbGlnbm1lbnQNCj4gcmVxdWlyZW1lbnRzDQo+ICsgKiBz dWdnZXN0ZWQgYnkgdGhlIGhhbmRsZXIgcG9pbnRlciB0eXBlLCBhbmQgaW5pdGlhbGl6ZSBpdHMg aGFuZGxlLg0KPiArICoNCj4gKyAqIFRoZSB2YWx1ZXMgb2YgdGhlIGxjb3JlIHZhcmlhYmxlIGFy ZSBpbml0aWFsaXplZCB0byB6ZXJvLg0KPiArICovDQo+ICsjZGVmaW5lIFJURV9MQ09SRV9WQVJf QUxMT0MoaGFuZGxlKQkJCQkJXA0KPiArCVJURV9MQ09SRV9WQVJfQUxMT0NfU0laRV9BTElHTiho YW5kbGUsIHNpemVvZigqKGhhbmRsZSkpLAlcDQo+ICsJCQkJICAgICAgIGFsaWdub2YodHlwZW9m KCooaGFuZGxlKSkpKQ0KPiArDQo+ICsvKioNCj4gKyAqIEFsbG9jYXRlIGFuIGV4cGxpY2l0bHkt c2l6ZWQsIGV4cGxpY2l0bHktYWxpZ25lZCBsY29yZSB2YXJpYWJsZSBieQ0KPiArICogbWVhbnMg b2YgYSBAcmVmIFJURV9JTklUIGNvbnN0cnVjdG9yLg0KPiArICoNCj4gKyAqIFRoZSB2YWx1ZXMg b2YgdGhlIGxjb3JlIHZhcmlhYmxlIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvLg0KPiArICovDQo+ ICsjZGVmaW5lIFJURV9MQ09SRV9WQVJfSU5JVF9TSVpFX0FMSUdOKG5hbWUsIHNpemUsIGFsaWdu KQkJXA0KPiArCVJURV9JTklUKHJ0ZV9sY29yZV92YXJfaW5pdF8gIyMgbmFtZSkJCQkJXA0KPiAr CXsJCQkJCQkJCVwNCj4gKwkJUlRFX0xDT1JFX1ZBUl9BTExPQ19TSVpFX0FMSUdOKG5hbWUsIHNp emUsIGFsaWduKTsJXA0KPiArCX0NCj4gKw0KPiArLyoqDQo+ICsgKiBBbGxvY2F0ZSBhbiBleHBs aWNpdGx5LXNpemVkIGxjb3JlIHZhcmlhYmxlIGJ5IG1lYW5zIG9mIGEgQHJlZg0KPiArICogUlRF X0lOSVQgY29uc3RydWN0b3IuDQo+ICsgKg0KPiArICogVGhlIHZhbHVlcyBvZiB0aGUgbGNvcmUg dmFyaWFibGUgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uDQo+ICsgKi8NCj4gKyNkZWZpbmUgUlRF X0xDT1JFX1ZBUl9JTklUX1NJWkUobmFtZSwgc2l6ZSkJCVwNCj4gKwlSVEVfTENPUkVfVkFSX0lO SVRfU0laRV9BTElHTihuYW1lLCBzaXplLCAwKQ0KPiArDQo+ICsvKioNCj4gKyAqIEFsbG9jYXRl IGFuIGxjb3JlIHZhcmlhYmxlIGJ5IG1lYW5zIG9mIGEgQHJlZiBSVEVfSU5JVCBjb25zdHJ1Y3Rv ci4NCj4gKyAqDQo+ICsgKiBUaGUgdmFsdWVzIG9mIHRoZSBsY29yZSB2YXJpYWJsZSBhcmUgaW5p dGlhbGl6ZWQgdG8gemVyby4NCj4gKyAqLw0KPiArI2RlZmluZSBSVEVfTENPUkVfVkFSX0lOSVQo bmFtZSkJCQkJCVwNCj4gKwlSVEVfSU5JVChydGVfbGNvcmVfdmFyX2luaXRfICMjIG5hbWUpCQkJ CVwNCj4gKwl7CQkJCQkJCQlcDQo+ICsJCVJURV9MQ09SRV9WQVJfQUxMT0MobmFtZSk7CQkJCVwN Cj4gKwl9DQo+ICsNCj4gKy8qKg0KPiArICogR2V0IHZvaWQgcG9pbnRlciB0byBsY29yZSB2YXJp YWJsZSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQNCj4gKyAqIGxjb3JlIGlkLg0KPiArICoN Cj4gKyAqIEBwYXJhbSBsY29yZV9pZA0KPiArICogICBUaGUgbGNvcmUgaWQgc3BlY2lmeWluZyB3 aGljaCBvZiB0aGUgQGMgUlRFX01BWF9MQ09SRSB2YWx1ZQ0KPiArICogICBpbnN0YW5jZXMgc2hv dWxkIGJlIGFjY2Vzc2VkLiBUaGUgbGNvcmUgaWQgbmVlZCBub3QgYmUgdmFsaWQNCj4gKyAqICAg KGUuZy4sIG1heSBiZSBAcmVmIExDT1JFX0lEX0FOWSksIGJ1dCBpbiBzdWNoIGEgY2FzZSwgdGhl IHBvaW50ZXINCj4gKyAqICAgaXMgYWxzbyBub3QgdmFsaWQgKGFuZCB0aHVzIHNob3VsZCBub3Qg YmUgZGVyZWZlcmVuY2VkKS4NCj4gKyAqIEBwYXJhbSBoYW5kbGUNCj4gKyAqICAgVGhlIGxjb3Jl IHZhcmlhYmxlIGhhbmRsZS4NCj4gKyAqLw0KPiArc3RhdGljIGlubGluZSB2b2lkICoNCj4gK3J0 ZV9sY29yZV92YXJfbGNvcmVfcHRyKHVuc2lnbmVkIGludCBsY29yZV9pZCwgdm9pZCAqaGFuZGxl KQ0KPiArew0KPiArCXJldHVybiBSVEVfUFRSX0FERChoYW5kbGUsIGxjb3JlX2lkICogUlRFX01B WF9MQ09SRV9WQVIpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIEdldCBwb2ludGVyIHRvIGxj b3JlIHZhcmlhYmxlIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBsY29yZSBpZC4NCj4gKyAq DQo+ICsgKiBAcGFyYW0gbGNvcmVfaWQNCj4gKyAqICAgVGhlIGxjb3JlIGlkIHNwZWNpZnlpbmcg d2hpY2ggb2YgdGhlIEBjIFJURV9NQVhfTENPUkUgdmFsdWUNCj4gKyAqICAgaW5zdGFuY2VzIHNo b3VsZCBiZSBhY2Nlc3NlZC4gVGhlIGxjb3JlIGlkIG5lZWQgbm90IGJlIHZhbGlkDQo+ICsgKiAg IChlLmcuLCBtYXkgYmUgQHJlZiBMQ09SRV9JRF9BTlkpLCBidXQgaW4gc3VjaCBhIGNhc2UsIHRo ZSBwb2ludGVyDQo+ICsgKiAgIGlzIGFsc28gbm90IHZhbGlkIChhbmQgdGh1cyBzaG91bGQgbm90 IGJlIGRlcmVmZXJlbmNlZCkuDQo+ICsgKiBAcGFyYW0gaGFuZGxlDQo+ICsgKiAgIFRoZSBsY29y ZSB2YXJpYWJsZSBoYW5kbGUuDQo+ICsgKi8NCj4gKyNkZWZpbmUgUlRFX0xDT1JFX1ZBUl9MQ09S RV9WQUxVRShsY29yZV9pZCwgaGFuZGxlKQkJCVwNCj4gKwkoKHR5cGVvZihoYW5kbGUpKXJ0ZV9s Y29yZV92YXJfbGNvcmVfcHRyKGxjb3JlX2lkLCBoYW5kbGUpKQ0KPiArDQo+ICsvKioNCj4gKyAq IEdldCBwb2ludGVyIHRvIGxjb3JlIHZhcmlhYmxlIGluc3RhbmNlIG9mIHRoZSBjdXJyZW50IHRo cmVhZC4NCj4gKyAqDQo+ICsgKiBNYXkgb25seSBiZSB1c2VkIGJ5IEVBTCB0aHJlYWRzIGFuZCBy ZWdpc3RlcmVkIG5vbi1FQUwgdGhyZWFkcy4NCj4gKyAqLw0KPiArI2RlZmluZSBSVEVfTENPUkVf VkFSX1ZBTFVFKGhhbmRsZSkgXA0KPiArCVJURV9MQ09SRV9WQVJfTENPUkVfVkFMVUUocnRlX2xj b3JlX2lkKCksIGhhbmRsZSkNCj4gKw0KPiArLyoqDQo+ICsgKiBJdGVyYXRlIG92ZXIgZWFjaCBs Y29yZSBpZCdzIHZhbHVlIGZvciBhIGxjb3JlIHZhcmlhYmxlLg0KPiArICoNCj4gKyAqIEBwYXJh bSB2YWx1ZQ0KPiArICogICBBIHBvaW50ZXIgc2V0IHN1Y2Nlc3Npdmx5IHNldCB0byBwb2ludCB0 byBsY29yZSB2YXJpYWJsZSB2YWx1ZQ0KDQoic2V0IHN1Y2Nlc3Npdmx5IHNldCIgLT4gInN1Y2Nl c3Npdmx5IHNldCINCg0KVGhpbmtpbmcgb3V0IGxvdWQsIGlnbm9yZSBhdCB5b3VyIHByZWZlcmVu Y2U6DQpEdXJpbmcgdGhlIFJGQyBkaXNjdXNzaW9ucywgdGhlIHRlcm0gdXNlZCBmb3IgcmVmZXJy aW5nIHRvIGFuIGxjb3JlIHZhcmlhYmxlIHdhcyBkaXNjdXNzZWQ7DQp3ZSBjb25zaWRlcmVkICJw b2ludGVyIiwgYnV0IHNldHRsZWQgZm9yICJ2YWx1ZSIuDQpQZXJoYXBzICJpbnN0YW5jZSIgd291 bGQgYmUgdXNhYmxlIGluIGNvbW1lbnRzIGxpa2UgbGlrZSB0aGUgb25lIGRlc2NyaWJpbmcgdGhp cyBmdW5jdGlvbi4uLg0KIkEgcG9pbnRlciBzZXQgc3VjY2Vzc2l2bHkgc2V0IHRvIHBvaW50IHRv IGxjb3JlIHZhcmlhYmxlIHZhbHVlIiAtPg0KIkEgcG9pbnRlciBzZXQgc3VjY2Vzc2l2bHkgc2V0 IHRvIHBvaW50IHRvIGxjb3JlIHZhcmlhYmxlIGluc3RhbmNlIi4NCkkgZG9uJ3Qga25vdy4NCg0K DQo+ICsgKiAgIGNvcnJlc3BvbmRpbmcgdG8gZXZlcnkgbGNvcmUgaWQgKHVwIHRvIEBjIFJURV9N QVhfTENPUkUpLg0KPiArICogQHBhcmFtIGhhbmRsZQ0KPiArICogICBUaGUgbGNvcmUgdmFyaWFi bGUgaGFuZGxlLg0KPiArICovDQo+ICsjZGVmaW5lIFJURV9MQ09SRV9WQVJfRk9SRUFDSF9WQUxV RSh2YWx1ZSwgaGFuZGxlKQkJCVwNCj4gKwlmb3IgKHVuc2lnbmVkIGludCBsY29yZV9pZCA9CQkJ CQlcDQo+ICsJCSAgICAgKCgodmFsdWUpID0gUlRFX0xDT1JFX1ZBUl9MQ09SRV9WQUxVRSgwLCBo YW5kbGUpKSwgMCk7IFwNCj4gKwkgICAgIGxjb3JlX2lkIDwgUlRFX01BWF9MQ09SRTsJCQkJCVwN Cj4gKwkgICAgIGxjb3JlX2lkKyssICh2YWx1ZSkgPSBSVEVfTENPUkVfVkFSX0xDT1JFX1ZBTFVF KGxjb3JlX2lkLCBoYW5kbGUpKQ0KPiArDQo+ICsvKioNCj4gKyAqIEFsbG9jYXRlIHNwYWNlIGlu IHRoZSBwZXItbGNvcmUgaWQgYnVmZmVycyBmb3IgYSBsY29yZSB2YXJpYWJsZS4NCj4gKyAqDQo+ ICsgKiBUaGUgcG9pbnRlciByZXR1cm5lZCBpcyBvbmx5IGFuIG9wYXF1ZSBpZGVudGlmZXIgb2Yg dGhlIHZhcmlhYmxlLiBUbw0KPiArICogZ2V0IGFuIGFjdHVhbCBwb2ludGVyIHRvIGEgcGFydGlj dWxhciBpbnN0YW5jZSBvZiB0aGUgdmFyaWFibGUgdXNlDQo+ICsgKiBAcmVmIFJURV9MQ09SRV9W QVJfVkFMVUUgb3IgQHJlZiBSVEVfTENPUkVfVkFSX0xDT1JFX1ZBTFVFLg0KPiArICoNCj4gKyAq IFRoZSBsY29yZSB2YXJpYWJsZSB2YWx1ZXMnIG1lbW9yeSBpcyBzZXQgdG8gemVyby4NCj4gKyAq DQo+ICsgKiBUaGUgYWxsb2NhdGlvbiBpcyBhbHdheXMgc3VjY2Vzc2Z1bCwgYmFycmluZyBhIGZh dGFsIGV4aGF1c3Rpb24gb2YNCj4gKyAqIHRoZSBwZXItbGNvcmUgaWQgYnVmZmVyIHNwYWNlLg0K PiArICoNCj4gKyAqIHJ0ZV9sY29yZV92YXJfYWxsb2MoKSBpcyBub3QgbXVsdGktdGhyZWFkIHNh ZmUuDQo+ICsgKg0KPiArICogQHBhcmFtIHNpemUNCj4gKyAqICAgVGhlIHNpemUgKGluIGJ5dGVz KSBvZiB0aGUgdmFyaWFibGUncyBwZXItbGNvcmUgaWQgdmFsdWUuIE11c3QgYmUgPiAwLg0KPiAr ICogQHBhcmFtIGFsaWduDQo+ICsgKiAgIElmIDAsIHRoZSB2YWx1ZXMgd2lsbCBiZSBzdWl0YWJs eSBhbGlnbmVkIGZvciBhbnkga2luZCBvZiB0eXBlDQo+ICsgKiAgIChpLmUuLCBhbGlnbm9mKG1h eF9hbGlnbl90KSkuIE90aGVyd2lzZSwgdGhlIHZhbHVlcyB3aWxsIGJlIGFsaWduZWQNCj4gKyAq ICAgb24gYSBtdWx0aXBsZSBvZiAqYWxpZ24qLCB3aGljaCBtdXN0IGJlIGEgcG93ZXIgb2YgMiBh bmQgZXF1YWwgb3INCj4gKyAqICAgbGVzcyB0aGFuIEBjIFJURV9DQUNIRV9MSU5FX1NJWkUuDQo+ ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSBpZCBvZiB0aGUgdmFyaWFibGUsIHN0b3JlZCBpbiBh IHZvaWQgcG9pbnRlciB2YWx1ZS4gVGhlIHZhbHVlDQoNCiJpZCIgLT4gImhhbmRsZSINCg0KPiAr ICogICBpcyBhbHdheXMgbm9uLU5VTEwuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0K PiArdm9pZCAqDQo+ICtydGVfbGNvcmVfdmFyX2FsbG9jKHNpemVfdCBzaXplLCBzaXplX3QgYWxp Z24pOw0KPiArDQo+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gK30NCj4gKyNlbmRpZg0KPiArDQo+ ICsjZW5kaWYgLyogX1JURV9MQ09SRV9WQVJfSF8gKi8NCj4gZGlmZiAtLWdpdCBhL2xpYi9lYWwv dmVyc2lvbi5tYXAgYi9saWIvZWFsL3ZlcnNpb24ubWFwDQo+IGluZGV4IGUzZmY0MTI2ODMuLjVm NWEzNTIyYzAgMTAwNjQ0DQo+IC0tLSBhL2xpYi9lYWwvdmVyc2lvbi5tYXANCj4gKysrIGIvbGli L2VhbC92ZXJzaW9uLm1hcA0KPiBAQCAtMzk2LDYgKzM5Niw5IEBAIEVYUEVSSU1FTlRBTCB7DQo+ IA0KPiAgCSMgYWRkZWQgaW4gMjQuMDMNCj4gIAlydGVfdmZpb19nZXRfZGV2aWNlX2luZm87ICMg V0lORE9XU19OT19FWFBPUlQNCj4gKw0KPiArCXJ0ZV9sY29yZV92YXJfYWxsb2M7DQo+ICsJcnRl X2xjb3JlX3ZhcjsNCg0KTm8gc3VjaCBmdW5jdGlvbjogcnRlX2xjb3JlX3Zhcg0KDQo+ICB9Ow0K PiANCj4gIElOVEVSTkFMIHsNCj4gLS0NCj4gMi4zNC4xDQoNCg==