From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Anders K. Pedersen | Cohaesio" Subject: Re: [bisected] Forwarded packets occasionally has loopback output interface in Netfilter Date: Mon, 22 Jan 2018 14:54:40 +0000 Message-ID: <1516632871.31073.24.camel@cohaesio.com> References: <1514286320.12738.1.camel@cohaesio.com> <1515691504.1318.9.camel@cohaesio.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "netdev@vger.kernel.org" , "netfilter-devel@vger.kernel.org" To: "weiwan@google.com" Return-path: In-Reply-To: Content-Language: en-US Content-ID: <5ACA75C679BE1347841CE9DA2F9B7AA7@surftown.com> Sender: netdev-owner@vger.kernel.org List-Id: netfilter-devel.vger.kernel.org T24gdG9yLCAyMDE4LTAxLTExIGF0IDEwOjE4IC0wODAwLCBXZWkgV2FuZyB3cm90ZToNCj4gT24g VGh1LCBKYW4gMTEsIDIwMTggYXQgOToyNSBBTSwgQW5kZXJzIEsuIFBlZGVyc2VuIHwgQ29oYWVz aW8NCj4gPGFrcEBjb2hhZXNpby5jb20+IHdyb3RlOg0KPiA+IE9uIHRpciwgMjAxNy0xMi0yNiBh dCAxMjowNSArMDEwMCwgQW5kZXJzIEsuIFBlZGVyc2VuIHwgQ29oYWVzaW8NCj4gPiB3cm90ZToN Cj4gPiA+IEhlbGxvLA0KPiA+ID4gDQo+ID4gPiBPbiBvbmUgb2Ygb3VyIGJvcmRlciByb3V0ZXJz LCBOZXRmaWx0ZXIgaXMgb2NjYXNpb25hbGx5IGxvZ2dpbmcNCj4gPiA+IHBhY2tldHMNCj4gPiA+ IHdpdGggIk9VVD1sbyIgKG91dHB1dCBpbnRlcmZhY2UgbG8pIGV2ZW4gdGhvdWdoIHRoZSBwYWNr ZXQgc2hvdWxkDQo+ID4gPiBiZQ0KPiA+ID4gZ29pbmcgb3V0IHZpYSBhIHJlZ3VsYXIgaW50ZXJm YWNlLiBUaGlzIGJlaGF2aW9yIGlzIHByZXNlbnQgb24NCj4gPiA+IExpbnV4DQo+ID4gPiA0LjEz LjAgdG8gNC4xNC45LCBhbmQgYSBiaXNlY3Rpb24gb2YgdGhlIHByb2JsZW0gcG9pbnRzIHRvDQo+ ID4gPiANCj4gPiA+IFs5NWM0N2Y5Y2Y1ZTAyOGQxYWU3N2RjNmM3NjdjMWVkYzhhMTgwMjViXSBp cHY0OiBjYWxsDQo+ID4gPiBkc3RfZGV2X3B1dCgpIHByb3Blcmx5DQo+ID4gPiANCj4gPiA+IGFz IHRoZSBmaXJzdCBiYWQgY29tbWl0LiBUaGlzIGNvbW1pdCBhZGRzIGRzdF9kZXZfcHV0KCkgY2Fs bHMNCj4gPiA+IGJlZm9yZQ0KPiA+ID4gc29tZSBkc3RfcmVsZWFzZSgpIGNhbGxzLCBhbmQgZHN0 X2Rldl9wdXQoKSBkb2VzDQo+ID4gPiANCj4gPiA+ICAgICBkc3QtPmRldiA9IGRldl9uZXQoZHN0 LT5kZXYpLT5sb29wYmFja19kZXY7DQo+ID4gPiANCj4gPiA+IChhbW9uZyBvdGhlciB0aGluZ3Mp LCB3aGljaCBmaXRzIHRoZSBwcm9ibGVtIHdlJ3JlIHNlZWluZy4NCj4gPiA+IA0KPiA+ID4gVGhl IGVzc2VudGlhbCBwYXJ0IG9mIG91ciBuZnRhYmxlcyBydWxlIHNldCB0aGF0IHNob3dzIHRoaXMN Cj4gPiA+IGJlaGF2aW9yIGlzDQo+ID4gPiANCj4gPiA+IGNoYWluIGZvcndhcmQgew0KPiA+ID4g ICAgICAgICAgICAgICAgIHR5cGUgZmlsdGVyIGhvb2sgZm9yd2FyZCBwcmlvcml0eSAwOw0KPiA+ ID4gDQo+ID4gPiAgICAgICAgICAgICAgICAgbWV0YSBvaWYgeyAkaW50ZXJuYWxfaW50ZXJmYWNl cyB9IGFjY2VwdA0KPiA+ID4gDQo+ID4gPiAgICAgICAgICAgICAgICAgbWV0YSBvaWYgbG8gaXAg ZGFkZHIgIT0gMTI3LjAuMC4wLzggXA0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgbG9n IGdyb3VwIDAgc25hcGxlbiA4MCBwcmVmaXggIm9pZi1sbyINCj4gPiA+IGNvdW50ZXINCj4gPiA+ IA0KPiA+ID4gICAgICAgICAgICAgICAgIGlwIHNhZGRyIHsgJG91cl9pcF9zZXJpZXMgfSBcDQo+ ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICBmbG93IHRhYmxlIGFjY3Rfb3V0IFwNCj4gPiA+ ICAgICAgICAgICAgICAgICAgICAgICAgIHsgbWV0YSBvaWYgLiBydCBuZXh0aG9wIC4gaXAgc2Fk ZHINCj4gPiA+IHRpbWVvdXQgMTJtIGNvdW50ZXIgfSBcDQo+ID4gPiAgICAgICAgICAgICAgICAg ICAgICAgICBhY2NlcHQNCj4gPiA+IA0KPiA+ID4gICAgICAgICAgICAgICAgIGxvZyBncm91cCAw IHNuYXBsZW4gODAgcHJlZml4ICJEUk9QIiBjb3VudGVyIGRyb3ANCj4gPiA+IH0NCj4gPiA+IA0K PiA+ID4gVGhlIHJvdXRlciBvbmx5IGRvZXMgc3RhdGVsZXNzIHBhY2tldCBmaWx0ZXJpbmcgYW5k IG5vDQo+ID4gPiByZWRpcmVjdGlvbiBvcg0KPiA+ID4gcmV3cml0aW5nIG9mIHRoZSBwYWNrZXRz IChjb25uZWN0aW9uIHRyYWNraW5nLCBOQVQsIGlwdnMgZXRjLiBhcmUNCj4gPiA+IG5vdA0KPiA+ ID4gZXZlbiBjb21waWxlZCBmb3IgdGhpcyBrZXJuZWwpLg0KPiA+ID4gDQo+ID4gPiBBcyBhIHJl c3VsdCBvZiB0aGlzIHByb2JsZW0gd2Ugc2VlIHBhY2tldHMgdGhhdCBzaG91bGQgYmUgZ29pbmcN Cj4gPiA+IHRvIGFuDQo+ID4gPiBpbnRlcm5hbCBpbnRlcmZhY2UgKGFuZCB0aHVzIGFjY2VwdGVk IGJ5IHRoZSBmaXJzdCBydWxlIGFib3ZlKQ0KPiA+ID4gYmVpbmcNCj4gPiA+IGxvZ2dlZCBhbmQg ZHJvcHBlZCBieSB0aGUgbGFzdCBydWxlLiBTb21lIGV4YW1wbGVzOg0KPiA+ID4gDQo+ID4gPiBE ZWMgMjIgMTE6NTc6MDIgY2l4NCBvaWYtbG8gSU49ZXRoMTAgT1VUPWxvDQo+ID4gPiBNQUM9OTA6 ZTI6YmE6NWM6YjY6OTU6MTA6ZjM6MTE6Mzg6MDY6Nzc6MDg6MDAgU1JDPTgxLjE3MC4xNjMuMTE4 DQo+ID4gPiBEU1Q9MjEyLjk3LjE1OC4zMyBMRU49MTUwMCBUT1M9MDAgUFJFQz0weDAwIFRUTD0x MTYgSUQ9MjU5MzIgREYNCj4gPiA+IFBST1RPPVRDUCBTUFQ9MzUxMTggRFBUPTg0NDMgU0VRPTYw NDM1ODMzMCBBQ0s9MTE4MjI3ODcwNQ0KPiA+ID4gV0lORE9XPTMyOTUgQUNLIFVSR1A9MCBNQVJL PTANCj4gPiA+IERlYyAyMiAxMTo1NzowMiBjaXg0IERST1AgSU49ZXRoMTAgT1VUPWxvDQo+ID4g PiBNQUM9OTA6ZTI6YmE6NWM6YjY6OTU6MTA6ZjM6MTE6Mzg6MDY6Nzc6MDg6MDAgU1JDPTgxLjE3 MC4xNjMuMTE4DQo+ID4gPiBEU1Q9MjEyLjk3LjE1OC4zMyBMRU49MTUwMCBUT1M9MDAgUFJFQz0w eDAwIFRUTD0xMTYgSUQ9MjU5MzIgREYNCj4gPiA+IFBST1RPPVRDUCBTUFQ9MzUxMTggRFBUPTg0 NDMgU0VRPTYwNDM1ODMzMCBBQ0s9MTE4MjI3ODcwNQ0KPiA+ID4gV0lORE9XPTMyOTUgQUNLIFVS R1A9MCBNQVJLPTANCj4gPiA+IA0KPiA+ID4gRGVjIDIyIDEyOjQ3OjA3IGNpeDQgb2lmLWxvIElO PWV0aDEwIE9VVD1sbw0KPiA+ID4gTUFDPTkwOmUyOmJhOjVjOmI2Ojk1OjBlOjg2OjEwOjI3Ojk5 OmYzOjA4OjAwIFNSQz00MC4xMDEuMzAuMTgNCj4gPiA+IERTVD0yMTIuOTcuMTMwLjMyIExFTj0y NDUgVE9TPTAwIFBSRUM9MHgwMCBUVEw9MTE4IElEPTEwMzcwIERGDQo+ID4gPiBQUk9UTz1UQ1Ag U1BUPTQ0MyBEUFQ9NDQ5ODggU0VRPTExNDE1NDU5MTMgQUNLPTM4NDQ1NzMxMDMNCj4gPiA+IFdJ TkRPVz02NTUzNSBBQ0sgUFNIIFVSR1A9MCBNQVJLPTANCj4gPiA+IERlYyAyMiAxMjo0NzowNyBj aXg0IERST1AgSU49ZXRoMTAgT1VUPWxvDQo+ID4gPiBNQUM9OTA6ZTI6YmE6NWM6YjY6OTU6MGU6 ODY6MTA6Mjc6OTk6ZjM6MDg6MDAgU1JDPTQwLjEwMS4zMC4xOA0KPiA+ID4gRFNUPTIxMi45Ny4x MzAuMzIgTEVOPTI0NSBUT1M9MDAgUFJFQz0weDAwIFRUTD0xMTggSUQ9MTAzNzAgREYNCj4gPiA+ IFBST1RPPVRDUCBTUFQ9NDQzIERQVD00NDk4OCBTRVE9MTE0MTU0NTkxMyBBQ0s9Mzg0NDU3MzEw Mw0KPiA+ID4gV0lORE9XPTY1NTM1IEFDSyBQU0ggVVJHUD0wIE1BUks9MA0KPiA+ID4gDQo+ID4g PiBEZWMgMjIgMTI6NTM6NTYgY2l4NCBvaWYtbG8gSU49ZXRoMTAgT1VUPWxvDQo+ID4gPiBNQUM9 OTA6ZTI6YmE6NWM6YjY6OTU6MGU6ODY6MTA6Mjc6OTk6ZjM6MDg6MDAgU1JDPTQwLjEwMS4xMi4z NA0KPiA+ID4gRFNUPTIxMi45Ny4xMzAuMzIgTEVOPTI0NSBUT1M9MDAgUFJFQz0weDAwIFRUTD0x MTUgSUQ9Mjc3MjggREYNCj4gPiA+IFBST1RPPVRDUCBTUFQ9NDQzIERQVD0zOTcyNCBTRVE9Mzc5 NzE1NjQwNCBBQ0s9Mzk0NDIzNDYxMg0KPiA+ID4gV0lORE9XPTY1NTM1IEFDSyBQU0ggVVJHUD0w IE1BUks9MA0KPiA+ID4gRGVjIDIyIDEyOjUzOjU2IGNpeDQgRFJPUCBJTj1ldGgxMCBPVVQ9bG8N Cj4gPiA+IE1BQz05MDplMjpiYTo1YzpiNjo5NTowZTo4NjoxMDoyNzo5OTpmMzowODowMCBTUkM9 NDAuMTAxLjEyLjM0DQo+ID4gPiBEU1Q9MjEyLjk3LjEzMC4zMiBMRU49MjQ1IFRPUz0wMCBQUkVD PTB4MDAgVFRMPTExNSBJRD0yNzcyOCBERg0KPiA+ID4gUFJPVE89VENQIFNQVD00NDMgRFBUPTM5 NzI0IFNFUT0zNzk3MTU2NDA0IEFDSz0zOTQ0MjM0NjEyDQo+ID4gPiBXSU5ET1c9NjU1MzUgQUNL IFBTSCBVUkdQPTAgTUFSSz0wDQo+ID4gPiANCj4gPiA+IEl0IGFsc28gaGFwcGVucyBmb3Igb3V0 Ym91bmQgdHJhZmZpYywgd2hlcmUgdGhlIHBhY2tldHMgYXJlDQo+ID4gPiBsb2dnZWQgYW5kDQo+ ID4gPiBjb3VudGVkIGluIHRoZSBhY2N0X291dCBmbG93IHRhYmxlIHdpdGggIm1ldGEgb2lmIiA9 ICJsbyIsIGJ1dCBhDQo+ID4gPiBjb3JyZWN0ICJydCBuZXh0aG9wIiAtIGFuIGV4YW1wbGU6DQo+ ID4gPiANCj4gPiA+IERlYyAyMiAxMjoyOToxMyBjaXg0IG9pZi1sbyBJTj10ZWFtMC4yMCBPVVQ9 bG8NCj4gPiA+IE1BQz0zYzpmZDpmZToxNTpkYjphODowMDoyNDphODpmZjpmMDowMDowODowMCBT UkM9MjEyLjk3LjEyOS4yNQ0KPiA+ID4gRFNUPTk1LjE2Ni4xMTkuMTI5IExFTj00MCBUT1M9MDAg UFJFQz0weDAwIFRUTD02MiBJRD0xOTQ4MSBERg0KPiA+ID4gUFJPVE89VENQIFNQVD00NDMgRFBU PTUyNTYwIFNFUT0zMDM0ODI3Mzk2IEFDSz0yODYyODE0OTAxDQo+ID4gPiBXSU5ET1c9MTI2MTgg QUNLIFVSR1A9MCBNQVJLPTANCj4gPiA+IA0KPiA+ID4gIyBuZnQgbGlzdCBmbG93IHRhYmxlIGZp bHRlciBhY2N0X291dHx0ciAnLCcgJ1xuJ3xncmVwIGxvDQo+ID4gPiAgICAgICAgIGZsb3cgdGFi bGUgYWNjdF9vdXQgew0KPiA+ID4gICJsbyIgLiA5NC4xMDEuMjA4LjIxNyAuIDIxMi45Ny4xMjku MjUgZXhwaXJlcyAzbTE3cyA6IGNvdW50ZXINCj4gPiA+IHBhY2tldHMgMSBieXRlcyA0MA0KPiA+ ID4gDQo+ID4gPiBJIGRvbid0IGtub3cgaWYgdGhlc2UgcGFja2V0cyBhcmUgYWN0dWFsbHkgc2Vu dCBvdXQgb24gdGhlDQo+ID4gPiBjb3JyZWN0DQo+ID4gPiBvdXRib3VuZCBpbnRlcmZhY2UgdGhh bmtzIHRvIHRoZSBwcm9wZXIgbmV4dGhvcCAodGhlIE1BQz0NCj4gPiA+IGluZm9ybWF0aW9uDQo+ ID4gPiBpbiB0aGUgTmV0ZmlsdGVyIGxvZyBpcyBmcm9tIHRoZSByZWNlaXZlZCBwYWNrZXQgYW5k IHRodXMgbm90DQo+ID4gPiB1c2VmdWwNCj4gPiA+IGhlcmUpLg0KPiA+ID4gDQo+ID4gPiBJIHRy aWVkIHJ1bm5pbmcgYSB0Y3BkdW1wIG9uIHRoZSBsbyBpbnRlcmZhY2UgdG8gc2VlIGlmIHRoZXNl DQo+ID4gPiBwYWNrZXRzDQo+ID4gPiB3b3VsZCBzaG93IHVwIHRoZXJlLCBidXQgZHVyaW5nIHRo ZSB0aHJlZSBkYXlzIEkgaGFkIGl0IHJ1bm5pbmcsDQo+ID4gPiBpdA0KPiA+ID4gb25seSBsb2dn ZWQgb25lIHN1Y2ggcGFja2V0LCB3aGlsZSBOZXRmaWx0ZXIgbG9ncyAyMCsgb3V0Ym91bmQNCj4g PiA+IHBhY2tldHMNCj4gPiA+IGV2ZXJ5IGRheSwgYW5kIHRoZSBvbmUgcGFja2V0IGxvZ2dlZCBi eSB0Y3BkdW1wIHdhcyAqbm90KiBsb2dnZWQNCj4gPiA+IGJ5DQo+ID4gPiBOZXRmaWx0ZXIuDQo+ ID4gDQo+ID4gRnVydGhlciB0ZXN0aW5nIG9mIHRoZSBpbmRpdmlkdWFsIHBhcnRzIG9mIHRoZSBm aXJzdCBiYWQgY29tbWl0DQo+ID4gc2hvd3MNCj4gPiB0aGF0IHRoZSBmaXZlIGZpcnN0IGFkZGl0 aW9ucyBvZiB0aGUgZHN0X2Rldl9wdXQoKSBjYWxsIGRvZXNuJ3QNCj4gPiB0cmlnZ2VyDQo+ID4g dGhlIHByb2JsZW0sIHdoaWxlIHRoZSBsYXN0IG9uZSBkb2VzIChhbHNvIHdpdGhvdXQgdGhlIGZp cnN0IGZpdmUpLA0KPiA+IHNvDQo+ID4gdGhlIHByb2JsZW1hdGljIHBhcnQgaXM6DQo+ID4gDQo+ ID4gZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jDQo+ID4g aW5kZXggM2RlZTAwNC4uZDk4NmQ4MCAxMDA2NDQNCj4gPiAtLS0gYS9uZXQvaXB2NC9yb3V0ZS5j DQo+ID4gKysrIGIvbmV0L2lwdjQvcm91dGUuYw0KPiA+IEBAIC0xMzY5LDYgKzEzNzIsNyBAQCBz dGF0aWMgYm9vbCBydF9jYWNoZV9yb3V0ZShzdHJ1Y3QgZmliX25oICpuaCwNCj4gPiBzdHJ1Y3Qg cnRhYmxlICpydCkNCj4gPiAgICAgICAgIHByZXYgPSBjbXB4Y2hnKHAsIG9yaWcsIHJ0KTsNCj4g PiAgICAgICAgIGlmIChwcmV2ID09IG9yaWcpIHsNCj4gPiAgICAgICAgICAgICAgICAgaWYgKG9y aWcpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBkc3RfZGV2X3B1dCgmb3JpZy0+ZHN0 KTsNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfcmVsZWFzZSgmb3JpZy0+ZHN0KTsN Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgICBydF9mcmVlKG9yaWcpOw0KPiA+ICAgICAgICAg ICAgICAgICB9DQo+ID4gDQo+IA0KPiBIaSBBbmRlcnMsDQo+IA0KPiBGaXJzdCBvZiBhbGwsIHRo ZSBiYWQgY29tbWl0IHlvdSBwb2ludGVkIHRvIGlzIHBhcnQgb2YgdGhlIGVmZm9ydCB0bw0KPiBy ZW1vdmUgZHN0IGdhcmJhZ2UgY29sbGVjdG9yLiBBbmQgaXQgaXMgZXhwZWN0ZWQgdGhhdCBjZXJ0 YWluIHJvdXRpbmcNCj4gYmVoYXZpb3Igd2lsbCBjaGFuZ2UgYWZ0ZXIgdGhpcyB3aG9sZSBwYXRj aCBzZXQuDQo+IEluIHlvdXIgc3BlY2lmaWMgY2FzZToNCj4gU3BlY2lmaWNhbGx5IGZvciB0aGUg b25lIGxpbmUgY2hhbmdlIHlvdSBwb2ludGVkIGFib3ZlLA0KPiBydF9jYWNoZV9yb3V0ZSgpIGlz IGNhbGxlZCB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGNhY2hlZCByb3V0ZSB3aXRoIGENCj4gbmV3 IG9uZSBiZWNhdXNlIHRoZSBleGlzdGluZyBjYWNoZWQgcm91dGUgaXMgYWxyZWFkeSBpbnZhbGlk LiBBbmQgdGhlDQo+IGNyaXRlcmlhIHRvIGRldGVybWluZSBpZiBpdCBpcyB2YWxpZCBpcyBpbiBy dF9jYWNoZV92YWxpZCgpLiBJZiBhDQo+IHJvdXRlIGJlY29tZXMgaW52YWxpZCwgaXQgbWVhbnMg dGhlIHJvdXRlIGlzIGVpdGhlciBiZWluZyBkZWxldGVkLCBvcg0KPiBhIG5ldyByb3V0ZSBpcyBi ZWluZyBpbnNlcnRlZCB0byB0aGUgc2FtZSB0YWJsZSwgb3IgdGhlcmUgaXMgY2VydGFpbg0KPiBu ZXRkZXYgZXZlbnQgaGFwcGVuaW5nIHRoYXQgY291bGQgbWFrZSB0aGlzIHJvdXRlIHVudXNhYmxl Lg0KDQpIaSBXZWksDQoNCkkgbG9va2VkIGludG8gdGhpcyBhbmQgYWN0aXZhdGVkIGRlYnVnIGxv Z2dpbmcgZm9yIGFsbCByb3V0ZSBjaGFuZ2VzDQpmcm9tIHRoZSBRdWFnZ2EvemVicmEgcm91dGlu ZyBkYWVtb25zLCBhbmQgbm9uZSBvZiB0aGUgbG9nZ2VkIHBhY2tldHMNCndpdGggT1VUPWxvIGhh cHBlbmVkIHdpdGhpbiBhIG1pbnV0ZSBvZiBhIHJvdXRlIGNoYW5nZSBmb3IgYSBwcmVmaXgNCnRo YXQgY292ZXJlZCB0aGUgZGVzdGluYXRpb24gSVAgaW4gdGhlIHBhY2tldC4NCg0KQWxzbywgc29t ZSBvZiB0aGUgbG9nZ2VkIHBhY2tldHMgd2l0aCBPVVQ9bG8gYXJlIGZvciBkZXN0aW5hdGlvbiBJ UHMNCnRoYXQgYXJlIG9uIHRoZSBzdWJuZXQgb2YgYSBkaXJlY3RseSBjb25uZWN0ZWQgaW50ZXJm YWNlIG9uIHRoZSByb3V0ZXIsDQpzbyB0aGVyZSBhcmUgbm8gZHluYW1pYyByb3V0ZSBjaGFuZ2Vz IGFuZCB0aGVyZSBoYXZlbid0IGJlZW4gYW55IGxpbmsNCmNoYW5nZXMgZWl0aGVyLg0KDQpXaGlj aCBvdGhlciAiY2VydGFpbiBuZXRkZXYgZXZlbnQiIGNvdWxkIGNhdXNlIHRoaXM/DQoNCj4gIElu IGFsbA0KPiBjYXNlcywgYSByb3V0ZSByZS1sb29rdXAgaXMgcmVxdWlyZWQuIGRzdF9kZXZfcHV0 KCkgaGVyZSBkb2VzIGNsZWFudXANCj4gd29yayB0byBmcmVlIHVwIHRoZSBkZXZpY2UgcmVmY291 bnQgYW5kIGFsbCBwYWNrZXRzIHVzaW5nIHRoaXMgcm91dGUNCj4gd2lsbCBiZSBkcm9wcGVkLiBB bmQgYXMgeW91IHNhaWQsIHlvdSBkb24ndCByZWFsbHkgc2VlIHRoZSBwYWNrZXRzDQo+IGdvaW5n IG91dCBvZiBsby4NCg0KSSB3cm90ZSB0aGF0IHdlIGRvbid0IHNlZSB0aGUgc2FtZSBwYWNrZXRz IGJlaW5nIGxvZ2dlZCAqYW5kKiBzaG93IHVwDQppbiBhICJ0Y3BkdW1wIC1pIGxvIiwgYnV0IHdl IGRvIHNlZSBwYWNrZXRzIGluIHRoZSB0Y3BkdW1wIHRoYXQgc2hvdWxkDQpoYXZlIGJlZW4gcm91 dGVkIG91dCBhIHJlZ3VsYXIgaW50ZXJmYWNlIC0gaXQncyBqdXN0IG5vdCB0aGUgc2FtZQ0KcGFj a2V0cyB0aGF0IG5ldGZpbHRlciBpcyBsb2dnaW5nIChhbmQgaXQgaGFwcGVucyBsZXNzIGZyZXF1 ZW50bHkpLiBJdA0KbG9va3MgbGlrZSBpdCBkZXBlbmRzIG9uIGhvdyBmYXIgdGhlIHBhY2tldCBp cyBpbiB0aGUgcGF0aCB0aHJvdWdoIHRoZQ0Ka2VybmVsLCB3aGVuIGRzdF9kZXZfcHV0KCkgaXMg Y2FsbGVkLg0KDQo+ID4gQW55IGhlbHAgd2l0aCBmaXhpbmcgdGhpcyB3b3VsZCBiZSBtdWNoIGFw cHJlY2lhdGVkLiBJZiB0aGVyZSdzDQo+ID4gYW55dGhpbmcgSSBzaG91bGQgdHJ5IHRvIGRlYnVn IHRoaXMgZnVydGhlciwgcGxlYXNlIGxldCBtZSBrbm93Lg0KDQpSZWdhcmRzLA0KQW5kZXJzIEsu IFBlZGVyc2Vu