From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?B?6rmA7J6s7Je0?= Subject: RE: [PATCH] tc_cgroup : enabling live socket to change its cgroup in a runtime Date: Fri, 8 May 2009 14:28:34 +0900 Message-ID: <4C86297B4AC6554B8BA018F0806590CE01C8A711@email1> References: <166fe7950904291020g50d806dds291d8444530efb4b@mail.gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: To: "Ranjit Manomohan" Return-path: Received: from email1.etri.re.kr ([129.254.16.131]:10468 "EHLO email1.etri.info" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751209AbZEHFnu (ORCPT ); Fri, 8 May 2009 01:43:50 -0400 Content-class: urn:content-classes:message In-Reply-To: <166fe7950904291020g50d806dds291d8444530efb4b@mail.gmail.com> Sender: netdev-owner@vger.kernel.org List-ID: DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IFJhbmppdCBNYW5vbW9oYW4g W21haWx0bzpyYW5qaXRtQGdvb2dsZS5jb21dDQo+U2VudDogVGh1cnNkYXksIEFwcmlsIDMwLCAy MDA5IDI6MjEgQU0NCj5Ubzog6rmA7J6s7Je0DQo+Q2M6IG5ldGRldkB2Z2VyLmtlcm5lbC5vcmcN Cj5TdWJqZWN0OiBSZTogW1BBVENIXSB0Y19jZ3JvdXAgOiBlbmFibGluZyBsaXZlIHNvY2tldCB0 byBjaGFuZ2UgaXRzIGNncm91cA0KPmluIGEgcnVudGltZQ0KPg0KPg0KPk9uIFRodSwgQXByIDIz LCAyMDA5IGF0IDc6MzIgUE0sIENoZWkteW9sIEtpbSA8Z2F1cmlAZXRyaS5yZS5rcj4gd3JvdGU6 DQo+PiBSYW5qaXTigJlzIHRjIGNncm91cCBzdWJzeXN0ZW0gcGF0Y2ggaXMgdXNlZnVsIGFzIGEg bmV0d29yayBjb250cm9sbGVyIG9mDQo+PiBjb250YWluZXIuDQo+PiBCdXQgd2hlbiB0aGUgdGFz ayBoYXZpbmcgYSBzb2NrZXQgY29ubmVjdGlvbiBjaGFuZ2VzIGl0cyBjZ3JvdXAsIHRoZQ0KPnNv Y2tldA0KPj4gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgY2hhbmdlZCBjZ3JvdXAsIGJlY2F1c2Ug dGhlcmUgYXJlIG5vdCBhIHBlcm1hbmVudA0KPj4gbGlua2FnZSBiZXR3ZWVuIHRoZSB0YXNrIGFu ZCBpdHMgc29ja2V0Lg0KPj4gSSBmaXhlZCB0aGlzIGRpc2FkdmFudGFnZSwgc28gd2hlbiB0aGUg dGFza3MgbW92ZSBhbW9uZyBncm91cHMsIHRoZWlyDQo+c29ja2V04oCZcw0KPj4gY2xhc3NpZCB3 aWxsIGJlIGNoYW5nZWQgYWNjb3JkaW5nIHRvIHRoZWlyIG93bmVyIHRhc2suDQo+Pg0KPj4gSSBh bSBwbGFubmluZyB0byBwdXQgdGhlIGFkZGl0aW9uYWwgZnVuY3Rpb24gdG8gdGMgY2dyb3VwLCBt b25pdG9yaW5nDQo+ZWFjaA0KPj4gZ3JvdXDigJlzIG5ldHdvcmsgYmFuZHdpZHRoIHVzYWdlIHdp dGggcmVzX2NvdW50IGZhY2lsaXR5Lg0KPj4gSSBkb27igJl0IHRoaW5rIHRoaXMgam9iIGNvdWxk IGJlIHBvc3NpYmxlIHRvIGV2ZXJ5IHRyYWZmaWMgY29udHJvbA0KPnBvbGljaWVzIGF0DQo+PiB0 aGUgc2FtZSB0aW1lLg0KPj4gRmlyc3QsIEnigJltIGdvaW5nIHRvIHdvcmsgaW4gdGhlIEhUQiwg YmVjYXVzZSBIVEIgaXMgdGhlIG1vc3QgdXNlZnVsIGFuZA0KPj4gZWZmaWNpZW50IHBvbGljeSB0 byBjb250cm9sIG5ldHdvcmsgYmFuZHdpZHRoLg0KPj4NCj4+IEFueSBjb21tZW50cyBhbmQgc3Vn Z2VzdGlvbnMgYXJlIHZlcnkgd2VsY29tLg0KPj4NCj4NCj5DaGVpLXlvbCwNCj4gICAgWW91IG1h eSB3YW50IHRvIHJlLWJhc2UgeW91ciB3b3JrIG9uIFRob21hcyBHcmFmJ3MgY2dyb3VwIHdvcmsg aW4NCj5jb21taXQgaWQgZjQwMDkyMzczNWVjYmI2N2NiZTRhMzYwNmM5NDc5ZjY5NDc1NGY1MS4N Cj4NCj5BcyBzdWNoIHRoZXNlIHBhdGNoZXMgYXJlIG5vdCByZWxldmFudCB0byB0aGUgY3VycmVu dCBpbXBsZW1lbnRhdGlvbg0KPm9mIGNncm91cCBuZXR3b3JrIGNvbnRyb2xsZXJzIGluIHRoZSB0 cmVlLg0KDQpSYW5qaXQsDQpZb3UgbWVhbiBUaG9tYXMncyBwYXRjaCBpcyBhY2NlcHRlZCBieSBu ZXRkZXYgdHJlZSBpbnN0ZWFkIG9mIHlvdXIgdGNfY2dyb3VwIHBhdGNoPw0KSWYgdGhlbiwgd2hl biBpcyBpdCBhY2NlcHRlZCA/LCBhbmQgd2hvIGRlY2lkZWQgaXQ/IE1haW50YWluZXIgPw0KQmVj YXVzZSBJIGNvdWxkbid0IHNlZSB0aGUgY29udmVyc2F0aW9uIGFib3V0IHB1dHRpbmcgdGhlIHBh dGNoIGludG8gdGhlIHRyZWUsDQpTbyBJJ20gY3VyaW91cyBhYm91dCB0aGlzIHJlc3VsdC4NCg0K VGhhbmtzLA0KQ2hlaS15b2wgS2ltDQoNCj4NCj4tVGhhbmtzLA0KPlJhbmppdC4NCj4NCj4+IEJl bG93IHBhdGNoIGNvZGVzIGFyZSBiYXNlZCBvbiB0aGUgUmFuaml04oCZcyB0YyBjZ3JvdXAgY29k ZS4NCj4+DQo+PiAtIENoZWkteW9sIEtpbQ0KPj4NCj4+IC0tLSAuL2xpbnV4LTIuNi4yNy9pbmNs dWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaCAyMDA4LTEwLTEwDQo+MDc6MTM6NTMuMDAwMDAwMDAw DQo+PiArMDkwMA0KPj4gKysrIC4vbGludXgtMi42LjI3LWNvcnNldC1uZXQvaW5jbHVkZS9saW51 eC9jZ3JvdXBfc3Vic3lzLmggMjAwOS0wNC0wMw0KPj4gMTE6Mjc6NTAuMDAwMDAwMDAwICswOTAw DQo+PiBAQCAtNDgsMyArNDgsOSBAQA0KPj4gwqAjZW5kaWYNCj4+DQo+PiDCoC8qICovDQo+PiAr DQo+PiArI2lmZGVmIENPTkZJR19DR1JPVVBfVEMNCj4+ICtTVUJTWVModGMpDQo+PiArI2VuZGlm DQo+PiArDQo+PiArLyogKi8NCj4+IC0tLSAuL2xpbnV4LTIuNi4yNy9pbmNsdWRlL2xpbnV4L2Nn cm91cF90Yy5oIDE5NzAtMDEtMDENCj4wOTowMDowMC4wMDAwMDAwMDANCj4+ICswOTAwDQo+PiAr KysgLi9saW51eC0yLjYuMjctY29yc2V0LW5ldC9pbmNsdWRlL2xpbnV4L2Nncm91cF90Yy5oIDIw MDktMDQtMjMNCj4+IDExOjQ0OjMxLjAwMDAwMDAwMCArMDkwMA0KPj4gQEAgLTAsMCArMSwyMiBA QA0KPj4gKyNpZm5kZWYgX19MSU5VWF9DR1JPVVBfVENfSA0KPj4gKyNkZWZpbmUgX19MSU5VWF9D R1JPVVBfVENfSA0KPj4gKw0KPj4gKy8qIEludGVyZmFjZSB0byBvYnRhaW4gdGFza3MgY2dyb3Vw IGlkZW50aWZpZXIuICovDQo+PiArDQo+PiArI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPg0KPj4g KyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4NCj4+ICsjaW5jbHVkZSA8bmV0L3NvY2suaD4NCj4+ ICsNCj4+ICsjaWZkZWYgQ09ORklHX0NHUk9VUF9UQw0KPj4gKw0KPj4gK3ZvaWQgY2dyb3VwX3Rj X2RvX3NvY2soc3RydWN0IHNvY2sgKnNrKTsNCj4+ICt2b2lkIHRjX2xpc3RfZGVsKHN0cnVjdCBz b2NrICpzayk7DQo+PiArDQo+PiArI2Vsc2UNCj4+ICsNCj4+ICsjZGVmaW5lIGNncm91cF90Y19k b19zb2NrKHNrKQ0KPj4gKyNkZWZpbmUgdGNfbGlzdF9kZWwoc2spDQo+PiArDQo+PiArI2VuZGlm IC8qIENPTkZJR19DR1JPVVBfVEMgKi8NCj4+ICsNCj4+ICsjZW5kaWYgLyogX19MSU5VWF9DR1JP VVBfVENfSCAqLw0KPj4gLS0tIC4vbGludXgtMi42LjI3L2luY2x1ZGUvbGludXgvcGt0X2Nscy5o IDIwMDgtMTAtMTAgMDc6MTM6NTMuMDAwMDAwMDAwDQo+KzA5MDANCj4+ICsrKyAuL2xpbnV4LTIu Ni4yNy1jb3JzZXQtbmV0L2luY2x1ZGUvbGludXgvcGt0X2Nscy5oIDIwMDktMDQtMDMNCj4+IDEx OjI3OjUwLjAwMDAwMDAwMCArMDkwMA0KPj4gQEAgLTM4MCw2ICszODAsMjEgQEANCj4+DQo+PiDC oCNkZWZpbmUgVENBX0ZMT1dfTUFYIChfX1RDQV9GTE9XX01BWCAtIDEpDQo+Pg0KPj4gKy8qIENn cm91cHMgZmlsdGVyICovDQo+PiArDQo+PiArZW51bSB7DQo+PiArIFRDQV9DR1JPVVBfVU5TUEVD LA0KPj4gKyBUQ0FfQ0dST1VQX0NMQVNTSUQsDQo+PiArIFRDQV9DR1JPVVBfTUFTSywNCj4+ICsg VENBX0NHUk9VUF9WQUxVRSwNCj4+ICsgVENBX0NHUk9VUF9BQ1QsDQo+PiArIFRDQV9DR1JPVVBf UE9MSUNFLA0KPj4gKyBUQ0FfQ0dST1VQX0VNQVRDSEVTLA0KPj4gKyBfX1RDQV9DR1JPVVBfTUFY DQo+PiArfTsNCj4+ICsNCj4+ICsjZGVmaW5lIFRDQV9DR1JPVVBfTUFYIChfX1RDQV9DR1JPVVBf TUFYIC0gMSkNCj4+ICsNCj4+IMKgLyogQmFzaWMgZmlsdGVyICovDQo+Pg0KPj4gwqBlbnVtDQo+ PiAtLS0gLi9saW51eC0yLjYuMjcvaW5jbHVkZS9uZXQvc29jay5oIDIwMDgtMTAtMTAgMDc6MTM6 NTMuMDAwMDAwMDAwICswOTAwDQo+PiArKysgLi9saW51eC0yLjYuMjctY29yc2V0LW5ldC9pbmNs dWRlL25ldC9zb2NrLmggMjAwOS0wNC0yMw0KPjEwOjM1OjQ5LjAwMDAwMDAwMA0KPj4gKzA5MDAN Cj4+IEBAIC01Nyw2ICs1Nyw3IEBADQo+PiDCoCNpbmNsdWRlIDxuZXQvZHN0Lmg+DQo+PiDCoCNp bmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4NCj4+DQo+PiArDQo+PiDCoC8qDQo+PiDCoCogVGhpcyBz dHJ1Y3R1cmUgcmVhbGx5IG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAuDQo+PiDCoCogTW9zdCBvZiBp dCBpcyBmb3IgVENQLCBhbmQgbm90IHVzZWQgYnkgYW55IG9mDQo+PiBAQCAtMjcxLDYgKzI3Miwx MSBAQA0KPj4gwqBpbnQgwqAgc2tfd3JpdGVfcGVuZGluZzsNCj4+IMKgdm9pZCDCoCAqc2tfc2Vj dXJpdHk7DQo+PiDCoF9fdTMyIMKgIHNrX21hcms7DQo+PiArI2lmZGVmIENPTkZJR19DR1JPVVBf VEMNCj4+ICsgc3RydWN0IGxpc3RfaGVhZCBza190Y19saXN0OyAvLyBsaW5rIHRvIHNrX2xpc3QN Cj4+ICsgaW50IMKgIHNrX2NpZDsgwqAvLyBjcmVhdG9yIHBpZA0KPj4gKyBfX3UzMiDCoCBza19j Z3JvdXBfY2xhc3NpZDsNCj4+ICsjZW5kaWYNCj4+IMKgLyogWFhYIDQgYnl0ZXMgaG9sZSBvbiA2 NCBiaXQgKi8NCj4+IMKgdm9pZCDCoCAoKnNrX3N0YXRlX2NoYW5nZSkoc3RydWN0IHNvY2sgKnNr KTsNCj4+IMKgdm9pZCDCoCAoKnNrX2RhdGFfcmVhZHkpKHN0cnVjdCBzb2NrICpzaywgaW50IGJ5 dGVzKTsNCj4+IC0tLSAuL2xpbnV4LTIuNi4yNy9pbml0L0tjb25maWcgMjAwOC0xMC0xMCAwNzox Mzo1My4wMDAwMDAwMDAgKzA5MDANCj4+ICsrKyAuL2xpbnV4LTIuNi4yNy1jb3JzZXQtbmV0L2lu aXQvS2NvbmZpZyAyMDA5LTA0LTAzIDExOjI3OjQxLjAwMDAwMDAwMA0KPiswOTAwDQo+PiBAQCAt MjkwLDYgKzI5MCwxNyBAQA0KPj4NCj4+IMKgIMKgU2F5IE4gaWYgdW5zdXJlDQo+Pg0KPj4gK2Nv bmZpZyBDR1JPVVBfVEMNCj4+ICsgYm9vbCAiVHJhZmZpYyBjb250cm9sIGNncm91cCBzdWJzeXN0 ZW0iDQo+PiArIGRlcGVuZHMgb24gQ0dST1VQUw0KPj4gKyBkZWZhdWx0IG4NCj4+ICsgaGVscA0K Pj4gKyDCoCBUaGlzIG9wdGlvbiBlbmFibGVzIGEgc2ltcGxlIGNncm91cCBzdWJzeXN0ZW0gdGhh dA0KPj4gKyDCoCBhbGxvd3MgbmV0d29yayB0cmFmZmljIHRvIGJlIGNsYXNzaWZpZWQgYmFzZWQg b24gdGhlDQo+PiArIMKgIGNncm91cCBvZiB0aGUgdGFzayBvcmlnaW5hdGluZyB0aGUgdHJhZmZp Yy4NCj4+ICsNCj4+ICsgwqAgU2F5IE4gaWYgdW5zdXJlDQo+PiArDQo+PiDCoGNvbmZpZyBDR1JP VVBfTlMNCj4+IMKgIMKgIMKgIMKgIGJvb2wgIk5hbWVzcGFjZSBjZ3JvdXAgc3Vic3lzdGVtIg0K Pj4gwqAgwqAgwqAgwqAgZGVwZW5kcyBvbiBDR1JPVVBTDQo+PiAtLS0gLi9saW51eC0yLjYuMjcv a2VybmVsL01ha2VmaWxlIDIwMDgtMTAtMTAgMDc6MTM6NTMuMDAwMDAwMDAwICswOTAwDQo+PiAr KysgLi9saW51eC0yLjYuMjctY29yc2V0LW5ldC9rZXJuZWwvTWFrZWZpbGUgMjAwOS0wNC0wMw0K PjExOjI4OjAzLjAwMDAwMDAwMA0KPj4gKzA5MDANCj4+IEBAIC01Nyw2ICs1Nyw3IEBADQo+PiDC oG9iai0kKENPTkZJR19DR1JPVVBfREVCVUcpICs9IGNncm91cF9kZWJ1Zy5vDQo+PiDCoG9iai0k KENPTkZJR19DUFVTRVRTKSArPSBjcHVzZXQubw0KPj4gwqBvYmotJChDT05GSUdfQ0dST1VQX05T KSArPSBuc19jZ3JvdXAubw0KPj4gK29iai0kKENPTkZJR19DR1JPVVBfVEMpICs9IHRjX2Nncm91 cC5vDQo+PiDCoG9iai0kKENPTkZJR19VVFNfTlMpICs9IHV0c25hbWUubw0KPj4gwqBvYmotJChD T05GSUdfVVNFUl9OUykgKz0gdXNlcl9uYW1lc3BhY2Uubw0KPj4gwqBvYmotJChDT05GSUdfUElE X05TKSArPSBwaWRfbmFtZXNwYWNlLm8NCj4+IC0tLSAuL2xpbnV4LTIuNi4yNy9rZXJuZWwvdGNf Y2dyb3VwLmMgMTk3MC0wMS0wMSAwOTowMDowMC4wMDAwMDAwMDAgKzA5MDANCj4+ICsrKyAuL2xp bnV4LTIuNi4yNy1jb3JzZXQtbmV0L2tlcm5lbC90Y19jZ3JvdXAuYyAyMDA5LTA0LTIzDQo+MTE6 NDI6MzMuMDAwMDAwMDAwDQo+PiArMDkwMA0KPj4gQEAgLTAsMCArMSwxODMgQEANCj4+ICsvKg0K Pj4gKyAqIHRjX2Nncm91cC5jIC0gdHJhZmZpYyBjb250cm9sIGNncm91cCBzdWJzeXN0ZW0NCj4+ ICsgKg0KPj4gKyAqLw0KPj4gKw0KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4+ICsj aW5jbHVkZSA8bGludXgvY2dyb3VwLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2ZzLmg+DQo+PiAr I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvY2dyb3VwX3RjLmg+ DQo+PiArDQo+PiArI2RlZmluZSBFTlRFUl9GTiBwcmludGsoIiVzOiVpOiBFTlRFUiBcbiIsIF9f RlVOQ1RJT05fXywgX19MSU5FX18pDQo+PiArI2RlZmluZSBPVVRfRk4gwqBwcmludGsoIiVzOiVp OiBPVVQgXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKQ0KPj4gKw0KPj4gK0xJU1RfSEVBRChz a19saXN0KTsNCj4+ICtERUZJTkVfU1BJTkxPQ0soc2tfbGlzdF9sb2NrKTsNCj4+ICsNCj4+ICtF WFBPUlRfU1lNQk9MKHNrX2xpc3QpOw0KPj4gK0VYUE9SVF9TWU1CT0woc2tfbGlzdF9sb2NrKTsN Cj4+ICsNCj4+ICsNCj4+ICtzdHJ1Y3QgdGNfY2dyb3VwIHsNCj4+ICsgc3RydWN0IGNncm91cF9z dWJzeXNfc3RhdGUgY3NzOw0KPj4gKyB1bnNpZ25lZCBpbnQgY2xhc3NpZDsNCj4+ICt9Ow0KPj4g Kw0KPj4gK3N0cnVjdCBjZ3JvdXBfc3Vic3lzIHRjX3N1YnN5czsNCj4+ICsNCj4+ICtzdGF0aWMg aW5saW5lIHN0cnVjdCB0Y19jZ3JvdXAgKmNncm91cF90b190YygNCj4+ICsgwqBzdHJ1Y3QgY2dy b3VwICpjZ3JvdXApDQo+PiArew0KPj4gKyByZXR1cm4gY29udGFpbmVyX29mKGNncm91cF9zdWJz eXNfc3RhdGUoY2dyb3VwLCB0Y19zdWJzeXNfaWQpLA0KPj4gKyDCoCDCoCDCoCBzdHJ1Y3QgdGNf Y2dyb3VwLCBjc3MpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdW5zaWduZWQgaW50IGNncm91 cF90Y19jbGFzc2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQ0KPj4gK3sNCj4+ICsgdW5zaWdu ZWQgaW50IHRjX2NsYXNzaWQ7DQo+PiArDQo+PiArIHJjdV9yZWFkX2xvY2soKTsNCj4+ICsgdGNf Y2xhc3NpZCA9IGNvbnRhaW5lcl9vZih0YXNrX3N1YnN5c19zdGF0ZSh0c2ssIHRjX3N1YnN5c19p ZCksDQo+PiArIMKgIMKgIMKgc3RydWN0IHRjX2Nncm91cCwgY3NzKS0+Y2xhc3NpZDsNCj4+ICsg cmN1X3JlYWRfdW5sb2NrKCk7DQo+PiArIHJldHVybiB0Y19jbGFzc2lkOw0KPj4gK30NCj4+ICsN Cj4+ICt2b2lkIGNncm91cF90Y19zZXRfc29ja19jbGFzc2lkKHN0cnVjdCBzb2NrICpzaykNCj4+ ICt7DQo+PiArIGlmIChzaykNCj4+ICsgwqBzay0+c2tfY2dyb3VwX2NsYXNzaWQgPSBjZ3JvdXBf dGNfY2xhc3NpZChjdXJyZW50KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgY2dyb3Vw X3RjX3NldF9zb2NrX3BpZF9jbGFzc2lkKHN0cnVjdCBzb2NrICpzaykNCj4+ICt7DQo+PiArIHN0 cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsNCj4+ICsNCj4+ICsgaWYoc2spIHsNCj4+ ICsgwqByY3VfcmVhZF9sb2NrKCk7DQo+PiArIMKgc2stPnNrX2Nncm91cF9jbGFzc2lkID0gY29u dGFpbmVyX29mKHRhc2tfc3Vic3lzX3N0YXRlKHRzaywNCj50Y19zdWJzeXNfaWQpLA0KPj4gKyDC oCDCoCDCoHN0cnVjdCB0Y19jZ3JvdXAsIGNzcyktPmNsYXNzaWQ7DQo+PiArIMKgc2stPnNrX2Np ZCA9IHRzay0+cGlkOyDCoC8vIHNvY2tldCBjcmVhdG9yIGlkDQo+PiArIMKgcmN1X3JlYWRfdW5s b2NrKCk7DQo+PiArIH0NCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgY2dyb3VwX3RjX2Fk ZF9za19saXN0KHN0cnVjdCBzb2NrICpzaykNCj4+ICt7DQo+PiArIHNwaW5fbG9jaygmc2tfbGlz dF9sb2NrKTsNCj4+ICsgbG9ja19zb2NrKHNrKTsNCj4+ICsgbGlzdF9hZGRfdGFpbCgmc2stPnNr X3RjX2xpc3QsICZza19saXN0KTsNCj4+ICsgcmVsZWFzZV9zb2NrKHNrKTsNCj4+ICsgc3Bpbl91 bmxvY2soJnNrX2xpc3RfbG9jayk7DQo+PiArfQ0KPj4gKw0KPj4gK3ZvaWQgY2dyb3VwX3RjX2Rv X3NvY2soc3RydWN0IHNvY2sgKnNrKQ0KPj4gK3sNCj4+ICsgaWYoc2spIHsNCj4+ICsgwqBjZ3Jv dXBfdGNfYWRkX3NrX2xpc3Qoc2spOw0KPj4gKyDCoGNncm91cF90Y19zZXRfc29ja19waWRfY2xh c3NpZChzayk7DQo+PiArIH0NCj4+ICt9DQo+PiArDQo+PiArdm9pZCB0Y19saXN0X2RlbChzdHJ1 Y3Qgc29jayAqc2spDQo+PiArew0KPj4gKyBzcGluX2xvY2soJnNrX2xpc3RfbG9jayk7DQo+PiAr IGxpc3RfZGVsKCZzay0+c2tfdGNfbGlzdCk7DQo+PiArIHNwaW5fdW5sb2NrKCZza19saXN0X2xv Y2spOw0KPj4gK30NCj4+ICsNCj4+ICsNCj4+ICtzdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNf c3RhdGUgKnRjX2NyZWF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsDQo+PiArIMKgIMKgIMKg c3RydWN0IGNncm91cCAqY2dyb3VwKQ0KPj4gK3sNCj4+ICsgc3RydWN0IHRjX2Nncm91cCAqdGNf Y2dyb3VwOw0KPj4gKw0KPj4gKyB0Y19jZ3JvdXAgPSBremFsbG9jKHNpemVvZigqdGNfY2dyb3Vw KSwgR0ZQX0tFUk5FTCk7DQo+PiArDQo+PiArIGlmICghdGNfY2dyb3VwKQ0KPj4gKyDCoHJldHVy biBFUlJfUFRSKC1FTk9NRU0pOw0KPj4gKw0KPj4gKyAvKiBDb3B5IHBhcmVudCdzIGNsYXNzIGlk IGlmIHByZXNlbnQgKi8NCj4+ICsgaWYgKGNncm91cC0+cGFyZW50KQ0KPj4gKyDCoHRjX2Nncm91 cC0+Y2xhc3NpZCA9IGNncm91cF90b190YyhjZ3JvdXAtPnBhcmVudCktPmNsYXNzaWQ7DQo+PiAr DQo+PiArIHJldHVybiAmdGNfY2dyb3VwLT5jc3M7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2 b2lkIHRjX2Rlc3Ryb3koc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLA0KPj4gKyDCoCBzdHJ1Y3Qg Y2dyb3VwICpjZ3JvdXApDQo+PiArew0KPj4gKyBrZnJlZShjZ3JvdXBfdG9fdGMoY2dyb3VwKSk7 DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIHRjX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1 YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnAsDQo+PiArIMKgIHN0cnVjdCBjZ3JvdXAgKm9s ZF9jZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykNCj4+ICt7DQo+PiArIHN0cnVjdCBsaXN0 X2hlYWQgKmhlYWQ7DQo+PiArIHN0cnVjdCBzb2NrICpzazsNCj4+ICsgaW50IHBpZDsNCj4+ICsg dW5zaWduZWQgaW50IG9sZF9jbGFzc2lkLCBuZXdfY2xhc3NpZDsNCj4+ICsgaW50IGk9MTsNCj4+ ICsNCj4+ICsgcGlkID0gdHNrLT5waWQ7DQo+PiArIG9sZF9jbGFzc2lkID0gY2dyb3VwX3RvX3Rj KG9sZF9jZ3JwKS0+Y2xhc3NpZDsNCj4+ICsgbmV3X2NsYXNzaWQgPSBjZ3JvdXBfdG9fdGMoY2dy cCktPmNsYXNzaWQ7DQo+PiArDQo+PiArDQo+PiArIHNwaW5fbG9jaygmc2tfbGlzdF9sb2NrKTsN Cj4+ICsgbGlzdF9mb3JfZWFjaChoZWFkLCAmc2tfbGlzdCkgew0KPj4gKyDCoGlmKGhlYWQgPT0g JnNrX2xpc3QpDQo+PiArIMKgIGJyZWFrOw0KPj4gKyDCoHNrID0gY29udGFpbmVyX29mKGhlYWQs IHN0cnVjdCBzb2NrLCBza190Y19saXN0KTsNCj4+ICsNCj4+ICsgwqBpZihzay0+c2tfY2lkID09 IHBpZCkgew0KPj4gKyDCoCBpZihzay0+c2tfY2dyb3VwX2NsYXNzaWQgIT0gb2xkX2NsYXNzaWQp DQo+PiArIMKgIHNrLT5za19jZ3JvdXBfY2xhc3NpZCA9IG5ld19jbGFzc2lkOw0KPj4gKyDCoH0N Cj4+ICsgwqBpKys7DQo+PiArIH0NCj4+ICsgc3Bpbl91bmxvY2soJnNrX2xpc3RfbG9jayk7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgdGNfd3JpdGVfdTY0KHN0cnVjdCBjZ3JvdXAgKmNn cm91cCwgc3RydWN0IGNmdHlwZSAqY2Z0LCB1NjQNCj52YWwpDQo+PiArew0KPj4gKyBzdHJ1Y3Qg dGNfY2dyb3VwICp0YyA9IGNncm91cF90b190YyhjZ3JvdXApOw0KPj4gKw0KPj4gKyBpZiAoIWNn cm91cF9sb2NrX2xpdmVfZ3JvdXAoY2dyb3VwKSkNCj4+ICsgwqByZXR1cm4gLUVOT0RFVjsNCj4+ ICsNCj4+ICsgdGMtPmNsYXNzaWQgPSAodW5zaWduZWQgaW50KSAodmFsICYgMHhmZmZmZmZmZik7 DQo+PiArIGNncm91cF91bmxvY2soKTsNCj4+ICsgcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyB1NjQgdGNfcmVhZF91NjQoc3RydWN0IGNncm91cCAqY2dyb3VwLCBzdHJ1Y3QgY2Z0 eXBlICpjZnQpDQo+PiArew0KPj4gKyBzdHJ1Y3QgdGNfY2dyb3VwICp0YyA9IGNncm91cF90b190 YyhjZ3JvdXApOw0KPj4gKyByZXR1cm4gdGMtPmNsYXNzaWQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRjX2ZpbGVzW10gPSB7DQo+PiArIHsNCj4+ICsgwqAubmFtZSA9 ICJjbGFzc2lkIiwNCj4+ICsgwqAucmVhZF91NjQgPSB0Y19yZWFkX3U2NCwNCj4+ICsgwqAud3Jp dGVfdTY0ID0gdGNfd3JpdGVfdTY0LA0KPj4gKyB9DQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMg aW50IHRjX3BvcHVsYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAq Y2dyb3VwKQ0KPj4gK3sNCj4+ICsgaW50IGVycjsNCj4+ICsgZXJyID0gY2dyb3VwX2FkZF9maWxl cyhjZ3JvdXAsIHNzLCB0Y19maWxlcywgQVJSQVlfU0laRSh0Y19maWxlcykpOw0KPj4gKyByZXR1 cm4gZXJyOw0KPj4gK30NCj4+ICsNCj4+ICtzdHJ1Y3QgY2dyb3VwX3N1YnN5cyB0Y19zdWJzeXMg PSB7DQo+PiArIC5uYW1lID0gInRjIiwNCj4+ICsgLmNyZWF0ZSA9IHRjX2NyZWF0ZSwNCj4+ICsg LmRlc3Ryb3kgwqA9IHRjX2Rlc3Ryb3ksDQo+PiArIC5hdHRhY2ggPSB0Y19hdHRhY2gsDQo+PiAr IC5wb3B1bGF0ZSA9IHRjX3BvcHVsYXRlLA0KPj4gKyAuc3Vic3lzX2lkID0gdGNfc3Vic3lzX2lk LA0KPj4gK307DQo+PiAtLS0gLi9saW51eC0yLjYuMjcvTWFrZWZpbGUgMjAwOC0xMC0xMCAwNzox Mzo1My4wMDAwMDAwMDAgKzA5MDANCj4+ICsrKyAuL2xpbnV4LTIuNi4yNy1jb3JzZXQtbmV0L01h a2VmaWxlIDIwMDktMDQtMDMgMTE6MzA6MDUuMDAwMDAwMDAwDQo+KzA5MDANCj4+IEBAIC0xLDcg KzEsNyBAQA0KPj4gwqBWRVJTSU9OID0gMg0KPj4gwqBQQVRDSExFVkVMID0gNg0KPj4gwqBTVUJM RVZFTCA9IDI3DQo+PiAtRVhUUkFWRVJTSU9OID0NCj4+ICtFWFRSQVZFUlNJT04gPSAtY29yc2V0 LW5ldA0KPj4gwqBOQU1FID0gUm90YXJ5IFdvbWJhdA0KPj4NCj4+IMKgIyAqRE9DVU1FTlRBVElP TioNCj4+IC0tLSAuL2xpbnV4LTIuNi4yNy9uZXQvc2NoZWQvY2xzX2Nncm91cC5jIDE5NzAtMDEt MDEgMDk6MDA6MDAuMDAwMDAwMDAwDQo+KzA5MDANCj4+ICsrKyAuL2xpbnV4LTIuNi4yNy1jb3Jz ZXQtbmV0L25ldC9zY2hlZC9jbHNfY2dyb3VwLmMgMjAwOS0wNC0wMw0KPj4gMTE6Mjc6NTUuMDAw MDAwMDAwICswOTAwDQo+PiBAQCAtMCwwICsxLDMzMCBAQA0KPj4gKy8qDQo+PiArICogbmV0L3Nj aGVkL2Nsc19jZ3JvdXAuYyBTaW1wbGUgcGFja2V0IGNsYXNzaWZpZXIgd2hpY2ggY2FuIGZpbHRl cg0KPj4gKyAqIMKgIMKgIHBhY2tldHMgYmFzZWQgb24gdGhlIGNncm91cHMgdGhleSBiZWxvbmcg dG8uDQo+PiArICoNCj4+ICsgKiDCoFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCj4+ICsgKiDCoG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQo+PiArICogwqBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24NCj4+ ICsgKiDCoDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uDQo+PiArICoNCj4+ICsgKi8NCj4+ICsNCj4+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4NCj4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2Vy cm5vLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPg0KPj4gKyNpbmNsdWRlIDxuZXQv cGt0X2Nscy5oPg0KPj4gKyNpbmNsdWRlIDxuZXQvbmV0bGluay5oPg0KPj4gKyNpbmNsdWRlIDxu ZXQvc29jay5oPg0KPj4gKw0KPj4gK3N0cnVjdCBjZ3JvdXBfaGVhZCB7DQo+PiArIHN0cnVjdCBs aXN0X2hlYWQgZmxpc3Q7IMKgLyogSGVhZCBvZiBmaWx0ZXIgbGlzdCAqLw0KPj4gK307DQo+PiAr DQo+PiArc3RydWN0IGNncm91cF9maWx0ZXIgew0KPj4gKyB1MzIgwqAgaGFuZGxlOyDCoC8qIFVu aXF1ZSBmaWx0ZXIgaGFuZGxlICovDQo+PiArIHN0cnVjdCB0Y2ZfZXh0cyDCoGV4dHM7DQo+PiAr IHN0cnVjdCB0Y2ZfZW1hdGNoX3RyZWUgZW1hdGNoZXM7DQo+PiArIHN0cnVjdCB0Y2ZfcmVzdWx0 IHJlczsNCj4+ICsgc3RydWN0IGxpc3RfaGVhZCBsaW5rOw0KPj4gKyB1MzIgwqAgbWFzazsNCj4+ ICsgdTMyIMKgIHZhbHVlOw0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCB0 Y2ZfZXh0X21hcCBjZ3JvdXBfZXh0X21hcCA9IHsNCj4+ICsgLmFjdGlvbiA9IFRDQV9DR1JPVVBf QUNULA0KPj4gKyAucG9saWNlID0gVENBX0NHUk9VUF9QT0xJQ0UsDQo+PiArfTsNCj4+ICsNCj4+ ICsvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBxZGlzYyB0byBjbGFzc2lmeSBh IHBhcnRpY3VsYXINCj5wYWNrZXQNCj4+ICsgKiBjb250YWluZWQgaW4gdGhlIHNrYiB0byB0aGUg YXBwcm9wcmlhdGUgc3ViLWNsYXNzZXMuIEl0IHJldHVybnMgdGhlDQo+PiArICogY2xhc3NpZCBv ZiB0aGUgdGFyZ2V0IGNsYXNzLiBUaGlzIGZpbHRlciB3aWxsIG1hdGNoIGlmIHRoZQ0KPmNncm91 cF9jbGFzc2lkDQo+PiArICogaW4gdGhlIHNrYiBtYXRjaGVzIHRoZSB2YWx1ZSBpbiB0aGUgZmls dGVyLg0KPj4gKyAqLw0KPj4gK3N0YXRpYyBpbnQgY2dyb3VwX2NsYXNzaWZ5KHN0cnVjdCBza19i dWZmICpza2IsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLA0KPj4gKyDCoCDCoCBzdHJ1Y3QgdGNmX3Jl c3VsdCAqcmVzKQ0KPj4gK3sNCj4+ICsgc3RydWN0IGNncm91cF9oZWFkICpoZWFkID0gKHN0cnVj dCBjZ3JvdXBfaGVhZCAqKXRwLT5yb290Ow0KPj4gKyBzdHJ1Y3QgY2dyb3VwX2ZpbHRlciAqZjsN Cj4+ICsgdWludDMyX3QgY2dyb3VwX2NsYXNzaWQgPSAwOw0KPj4gKyBpbnQgcjsNCj4+ICsNCj4+ ICsjaWZkZWYgQ09ORklHX0NHUk9VUF9UQw0KPj4gKyBpZiAoc2tiLT5zaykNCj4+ICsgwqBjZ3Jv dXBfY2xhc3NpZCA9IMKgc2tiLT5zay0+c2tfY2dyb3VwX2NsYXNzaWQ7DQo+PiArI2VuZGlmDQo+ PiArDQo+PiArIGxpc3RfZm9yX2VhY2hfZW50cnkoZiwgJmhlYWQtPmZsaXN0LCBsaW5rKSB7DQo+ PiArDQo+PiArIMKgaWYgKCF0Y2ZfZW1fdHJlZV9tYXRjaChza2IsICZmLT5lbWF0Y2hlcywgTlVM TCkpDQo+PiArIMKgIGNvbnRpbnVlOw0KPj4gKw0KPj4gKyDCoGlmICgoY2dyb3VwX2NsYXNzaWQg JiBmLT5tYXNrKSA9PSBmLT52YWx1ZSkgew0KPj4gKyDCoCAqcmVzID0gZi0+cmVzOw0KPj4gKyDC oCByID0gdGNmX2V4dHNfZXhlYyhza2IsICZmLT5leHRzLCByZXMpOw0KPj4gKyDCoCBpZiAociA8 IDApDQo+PiArIMKgIMKgY29udGludWU7DQo+PiArIMKgIHJldHVybiByOw0KPj4gKyDCoH0NCj4+ ICsgfQ0KPj4gKyByZXR1cm4gLTE7DQo+PiArfQ0KPj4gKw0KPj4gKy8qIFJldHVybnMgcG9pbnRl ciB0byBmaWx0ZXIgbWF0Y2hpbmcgdGhlIGhhbmRsZSBwYXNzZWQgaW50byB0aGUNCj5mdW5jdGlv bi4qLw0KPj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNncm91cF9nZXQoc3RydWN0IHRjZl9wcm90 byAqdHAsIHUzMiBoYW5kbGUpDQo+PiArew0KPj4gKyB1bnNpZ25lZCBsb25nIGwgPSAwVUw7DQo+ PiArIHN0cnVjdCBjZ3JvdXBfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgY2dyb3VwX2hlYWQgKikgdHAt PnJvb3Q7DQo+PiArIHN0cnVjdCBjZ3JvdXBfZmlsdGVyICpmOw0KPj4gKw0KPj4gKyBpZiAoaGVh ZCA9PSBOVUxMKQ0KPj4gKyDCoHJldHVybiAwVUw7DQo+PiArDQo+PiArIGxpc3RfZm9yX2VhY2hf ZW50cnkoZiwgJmhlYWQtPmZsaXN0LCBsaW5rKQ0KPj4gKyDCoGlmIChmLT5oYW5kbGUgPT0gaGFu ZGxlKQ0KPj4gKyDCoCBsID0gKHVuc2lnbmVkIGxvbmcpIGY7DQo+PiArDQo+PiArIHJldHVybiBs Ow0KPj4gK30NCj4+ICsNCj4+ICsvKiBEb2VzIG5vdCBzZWVtIHRvIGJlIHVzZWQgZm9yIGNsYXNz aWZpZXJzLiAqLw0KPj4gK3N0YXRpYyB2b2lkIGNncm91cF9wdXQoc3RydWN0IHRjZl9wcm90byAq dHAsIHVuc2lnbmVkIGxvbmcgZikNCj4+ICt7DQo+PiArfQ0KPj4gKw0KPj4gKy8qIEluaXRpYWxp emVyIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRwIGlzIGNyZWF0ZWQuICovDQo+PiArc3RhdGljIGlu dCBjZ3JvdXBfaW5pdChzdHJ1Y3QgdGNmX3Byb3RvICp0cCkNCj4+ICt7DQo+PiArIHN0cnVjdCBj Z3JvdXBfaGVhZCAqaGVhZCA9IGt6YWxsb2Moc2l6ZW9mKCpoZWFkKSwgR0ZQX0tFUk5FTCk7DQo+ PiArIGlmIChoZWFkID09IE5VTEwpDQo+PiArIMKgcmV0dXJuIC1FTk9CVUZTOw0KPj4gKw0KPj4g KyBJTklUX0xJU1RfSEVBRCgmaGVhZC0+Zmxpc3QpOw0KPj4gKyB0cC0+cm9vdCA9IGhlYWQ7DQo+ PiArIHJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICsvKiBTaW1wbGUgZGVsZXRlIGZ1bmN0aW9u IGNhbGxlZCB3aGVuIGZpbHRlciBpcyBkZWxldGVkICovDQo+PiArc3RhdGljIGlubGluZSB2b2lk IGNncm91cF9kZWxldGVfZmlsdGVyKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLA0KPj4gKyDCoCDCoCDC oCDCoCDCoCBzdHJ1Y3QgY2dyb3VwX2ZpbHRlciAqZikNCj4+ICt7DQo+PiArIHRjZl91bmJpbmRf ZmlsdGVyKHRwLCAmZi0+cmVzKTsNCj4+ICsgdGNmX2V4dHNfZGVzdHJveSh0cCwgJmYtPmV4dHMp Ow0KPj4gKyB0Y2ZfZW1fdHJlZV9kZXN0cm95KHRwLCAmZi0+ZW1hdGNoZXMpOw0KPj4gKyBrZnJl ZShmKTsNCj4+ICt9DQo+PiArDQo+PiArLyogRGVzdHJveSB0aGUgZW50aXJlIHRwIHN0cnVjdHVy ZS4qLw0KPj4gK3N0YXRpYyB2b2lkIGNncm91cF9kZXN0cm95KHN0cnVjdCB0Y2ZfcHJvdG8gKnRw KQ0KPj4gK3sNCj4+ICsgc3RydWN0IGNncm91cF9oZWFkICpoZWFkID0gKHN0cnVjdCBjZ3JvdXBf aGVhZCAqKSB4Y2hnKCZ0cC0+cm9vdCwgTlVMTCk7DQo+PiArIHN0cnVjdCBjZ3JvdXBfZmlsdGVy ICpmLCAqbjsNCj4+ICsNCj4+ICsgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGYsIG4sICZoZWFk LT5mbGlzdCwgbGluaykgew0KPj4gKyDCoGxpc3RfZGVsKCZmLT5saW5rKTsNCj4+ICsgwqBjZ3Jv dXBfZGVsZXRlX2ZpbHRlcih0cCwgZik7DQo+PiArIH0NCj4+ICsga2ZyZWUoaGVhZCk7DQo+PiAr fQ0KPj4gKw0KPj4gKy8qIERlbGV0ZSBvbmUgZmlsdGVyIGVudHJ5ICovDQo+PiArc3RhdGljIGlu dCBjZ3JvdXBfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGFyZykN Cj4+ICt7DQo+PiArIHN0cnVjdCBjZ3JvdXBfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgY2dyb3VwX2hl YWQgKikgdHAtPnJvb3Q7DQo+PiArIHN0cnVjdCBjZ3JvdXBfZmlsdGVyICp0LCAqZiA9IChzdHJ1 Y3QgY2dyb3VwX2ZpbHRlciAqKSBhcmc7DQo+PiArDQo+PiArIGxpc3RfZm9yX2VhY2hfZW50cnko dCwgJmhlYWQtPmZsaXN0LCBsaW5rKQ0KPj4gKyDCoGlmICh0ID09IGYpIHsNCj4+ICsgwqAgdGNm X3RyZWVfbG9jayh0cCk7DQo+PiArIMKgIGxpc3RfZGVsKCZ0LT5saW5rKTsNCj4+ICsgwqAgdGNm X3RyZWVfdW5sb2NrKHRwKTsNCj4+ICsgwqAgY2dyb3VwX2RlbGV0ZV9maWx0ZXIodHAsIHQpOw0K Pj4gKyDCoCByZXR1cm4gMDsNCj4+ICsgwqB9DQo+PiArDQo+PiArIHJldHVybiAtRU5PRU5UOw0K Pj4gK30NCj4+ICsNCj4+ICsvKiBTZXQgdGhlIG1hc2sgYW5kIHZhbHVlIHBhcmFtZXRlcnMgaW4g dGhlIHRwIHN0cnVjdHVyZS4gKi8NCj4+ICtzdGF0aWMgaW5saW5lIGludCBjZ3JvdXBfc2V0X3Bh cm1zKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLA0KPj4gKyDCoCB1bnNpZ25lZCBsb25nIGJhc2UsDQo+ PiArIMKgIHN0cnVjdCBjZ3JvdXBfZmlsdGVyICpmLCBzdHJ1Y3QgbmxhdHRyICoqdGIpDQo+PiAr ew0KPj4gKyBpbnQgZXJyID0gLUVJTlZBTDsNCj4+ICsNCj4+ICsgaWYgKHRiW1RDQV9DR1JPVVBf TUFTS10pIHsNCj4+ICsgwqBpZiAobmxhX2xlbih0YltUQ0FfQ0dST1VQX01BU0tdKSA8IHNpemVv Zih1MzIpKQ0KPj4gKyDCoCByZXR1cm4gZXJyOw0KPj4gKyDCoGYtPm1hc2sgPSDCoG5sYV9nZXRf dTMyKHRiW1RDQV9DR1JPVVBfTUFTS10pOw0KPj4gKyB9IGVsc2UNCj4+ICsgwqBmLT5tYXNrID0g VUlOVF9NQVg7DQo+PiArDQo+PiArIGlmICh0YltUQ0FfQ0dST1VQX1ZBTFVFXSkgew0KPj4gKyDC oGlmIChubGFfbGVuKHRiW1RDQV9DR1JPVVBfVkFMVUVdKSA8IHNpemVvZih1MzIpKQ0KPj4gKyDC oCByZXR1cm4gZXJyOw0KPj4gKyDCoGYtPnZhbHVlID0gbmxhX2dldF91MzIodGJbVENBX0NHUk9V UF9WQUxVRV0pOw0KPj4gKyB9IGVsc2UNCj4+ICsgwqByZXR1cm4gZXJyOw0KPj4gKw0KPj4gKyBp ZiAodGJbVENBX0NHUk9VUF9DTEFTU0lEXSkgew0KPj4gKyDCoGlmIChubGFfbGVuKHRiW1RDQV9D R1JPVVBfQ0xBU1NJRF0pIDwgc2l6ZW9mKHUzMikpDQo+PiArIMKgIHJldHVybiBlcnI7DQo+PiAr IMKgZi0+cmVzLmNsYXNzaWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfQ0dST1VQX0NMQVNTSURdKTsN Cj4+ICsgwqB0Y2ZfYmluZF9maWx0ZXIodHAsICZmLT5yZXMsIGJhc2UpOw0KPj4gKyB9IGVsc2UN Cj4+ICsgwqByZXR1cm4gZXJyOw0KPj4gKw0KPj4gKyByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+ PiArLyogQ2hhbmdlIHRoZSBtYXNrIGFuZCB2YWx1ZSBwYXJhbWV0ZXJzIGluIHRoZSBjdXJyZW50 IHNldHRpbmdzLiAqLw0KPj4gK3N0YXRpYyBpbnQgY2dyb3VwX2NoYW5nZShzdHJ1Y3QgdGNmX3By b3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzINCj5oYW5kbGUsDQo+PiArIMKgIMKgc3Ry dWN0IG5sYXR0ciAqKnRjYSwgdW5zaWduZWQgbG9uZyAqYXJnKQ0KPj4gK3sNCj4+ICsgaW50IGVy ciA9IC1FSU5WQUw7DQo+PiArIHN0cnVjdCBjZ3JvdXBfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgY2dy b3VwX2hlYWQgKikgdHAtPnJvb3Q7DQo+PiArIHN0cnVjdCBubGF0dHIgKnRiW1RDQV9DR1JPVVBf TUFYXTsNCj4+ICsgc3RydWN0IGNncm91cF9maWx0ZXIgKmYgPSAoc3RydWN0IGNncm91cF9maWx0 ZXIgKikgKmFyZzsNCj4+ICsgc3RydWN0IHRjZl9leHRzIGU7DQo+PiArIHN0cnVjdCB0Y2ZfZW1h dGNoX3RyZWUgdDsNCj4+ICsNCj4+ICsgaWYgKHRjYVtUQ0FfT1BUSU9OU10gPT0gTlVMTCkNCj4+ ICsgwqByZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ICsgaWYgKG5sYV9wYXJzZV9uZXN0ZWQodGIs IFRDQV9DR1JPVVBfTUFYLCB0Y2FbVENBX09QVElPTlNdLCBOVUxMKSA8IDApDQo+PiArIMKgcmV0 dXJuIC1FSU5WQUw7DQo+PiArDQo+PiArIGVyciA9IHRjZl9leHRzX3ZhbGlkYXRlKHRwLCB0Yiwg dGNhW1RDQV9SQVRFXSwgJmUsICZjZ3JvdXBfZXh0X21hcCk7DQo+PiArIGlmIChlcnIgPCAwKQ0K Pj4gKyDCoHJldHVybiBlcnI7DQo+PiArDQo+PiArIGVyciA9IHRjZl9lbV90cmVlX3ZhbGlkYXRl KHRwLCB0YltUQ0FfQ0dST1VQX0VNQVRDSEVTXSwgJnQpOw0KPj4gKyBpZiAoZXJyIDwgMCkNCj4+ ICsgwqBnb3RvIGVycm9yMTsNCj4+ICsNCj4+ICsgaWYgKGYgIT0gTlVMTCkgew0KPj4gKyDCoGlm IChoYW5kbGUgJiYgZi0+aGFuZGxlICE9IGhhbmRsZSkNCj4+ICsgwqAgZ290byBlcnJvcjI7DQo+ PiArIH0gZWxzZSB7DQo+PiArIMKgaWYgKCFoYW5kbGUpDQo+PiArIMKgIGdvdG8gZXJyb3IyOw0K Pj4gKyDCoGYgPSBremFsbG9jKHNpemVvZigqZiksIEdGUF9LRVJORUwpOw0KPj4gKyDCoGlmIChm ID09IE5VTEwpDQo+PiArIMKgIGdvdG8gZXJyb3IyOw0KPj4gKyDCoGYtPmhhbmRsZSA9IGhhbmRs ZTsNCj4+ICsgfQ0KPj4gKw0KPj4gKyBlcnIgPSBjZ3JvdXBfc2V0X3Bhcm1zKHRwLCBiYXNlLCBm LCB0Yik7DQo+PiArIGlmIChlcnIgPCAwKQ0KPj4gKyDCoGdvdG8gZXJyb3IzOw0KPj4gKw0KPj4g KyB0Y2ZfZXh0c19jaGFuZ2UodHAsICZmLT5leHRzLCAmZSk7DQo+PiArIHRjZl9lbV90cmVlX2No YW5nZSh0cCwgJmYtPmVtYXRjaGVzLCAmdCk7DQo+PiArDQo+PiArIGlmICgqYXJnID09IDApIHsN Cj4+ICsgwqB0Y2ZfdHJlZV9sb2NrKHRwKTsNCj4+ICsgwqBsaXN0X2FkZCgmZi0+bGluaywgJmhl YWQtPmZsaXN0KTsNCj4+ICsgwqB0Y2ZfdHJlZV91bmxvY2sodHApOw0KPj4gKyB9DQo+PiArDQo+ PiArICphcmcgPSAodW5zaWduZWQgbG9uZylmOw0KPj4gKyByZXR1cm4gMDsNCj4+ICsNCj4+ICtl cnJvcjM6DQo+PiArIGlmICgqYXJnID09IDApDQo+PiArIMKga2ZyZWUoZik7DQo+PiArZXJyb3Iy Og0KPj4gKyB0Y2ZfZW1fdHJlZV9kZXN0cm95KHRwLCAmdCk7DQo+PiArZXJyb3IxOg0KPj4gKyB0 Y2ZfZXh0c19kZXN0cm95KHRwLCAmZSk7DQo+PiArDQo+PiArIHJldHVybiBlcnI7DQo+PiArfQ0K Pj4gKw0KPj4gKy8qIFdhbGsgdGhlIGZpbHRlciBsaXN0IGZvciB0aGluZ3MgbGlrZSBkaXNwbGF5 aW5nIGNvbnRlbnRzLiovDQo+PiArc3RhdGljIHZvaWQgY2dyb3VwX3dhbGsoc3RydWN0IHRjZl9w cm90byAqdHAsIHN0cnVjdCB0Y2Zfd2Fsa2VyICphcmcpDQo+PiArew0KPj4gKyBzdHJ1Y3QgY2dy b3VwX2hlYWQgKmhlYWQgPSAoc3RydWN0IGNncm91cF9oZWFkICopIHRwLT5yb290Ow0KPj4gKyBz dHJ1Y3QgY2dyb3VwX2ZpbHRlciAqZjsNCj4+ICsNCj4+ICsgbGlzdF9mb3JfZWFjaF9lbnRyeShm LCAmaGVhZC0+Zmxpc3QsIGxpbmspIHsNCj4+ICsgwqBpZiAoYXJnLT5jb3VudCA8IGFyZy0+c2tp cCkNCj4+ICsgwqAgZ290byBza2lwOw0KPj4gKw0KPj4gKyDCoGlmIChhcmctPmZuKHRwLCAodW5z aWduZWQgbG9uZykgZiwgYXJnKSA8IDApIHsNCj4+ICsgwqAgYXJnLT5zdG9wID0gMTsNCj4+ICsg wqAgYnJlYWs7DQo+PiArIMKgfQ0KPj4gK3NraXA6DQo+PiArIMKgYXJnLT5jb3VudCsrOw0KPj4g KyB9DQo+PiArfQ0KPj4gKw0KPj4gKy8qIFJldHJlaXZlIGN1cnJlbnQgc2V0dGluZ3MgaW4gdGhl IGZpbHRlciAqLw0KPj4gK3N0YXRpYyBpbnQgY2dyb3VwX2R1bXAoc3RydWN0IHRjZl9wcm90byAq dHAsIHVuc2lnbmVkIGxvbmcgZmgsDQo+PiArIMKgIMKgIMKgIMKgc3RydWN0IHNrX2J1ZmYgKnNr Yiwgc3RydWN0IHRjbXNnICp0KQ0KPj4gK3sNCj4+ICsgc3RydWN0IGNncm91cF9maWx0ZXIgKmYg PSAoc3RydWN0IGNncm91cF9maWx0ZXIgKikgZmg7DQo+PiArIHN0cnVjdCBubGF0dHIgKm5lc3Q7 DQo+PiArDQo+PiArIGlmIChmID09IE5VTEwpDQo+PiArIMKgcmV0dXJuIHNrYi0+bGVuOw0KPj4g Kw0KPj4gKyB0LT50Y21faGFuZGxlID0gZi0+aGFuZGxlOw0KPj4gKw0KPj4gKyBuZXN0ID0gbmxh X25lc3Rfc3RhcnQoc2tiLCBUQ0FfT1BUSU9OUyk7DQo+PiArIGlmIChuZXN0ID09IE5VTEwpDQo+ PiArIMKgZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+PiArDQo+PiArIE5MQV9QVVRfVTMyKHNrYiwg VENBX0NHUk9VUF9DTEFTU0lELCBmLT5yZXMuY2xhc3NpZCk7DQo+PiArIE5MQV9QVVRfVTMyKHNr YiwgVENBX0NHUk9VUF9NQVNLLCBmLT5tYXNrKTsNCj4+ICsgTkxBX1BVVF9VMzIoc2tiLCBUQ0Ff Q0dST1VQX1ZBTFVFLCBmLT52YWx1ZSk7DQo+PiArDQo+PiArIGlmICh0Y2ZfZXh0c19kdW1wKHNr YiwgJmYtPmV4dHMsICZjZ3JvdXBfZXh0X21hcCkgPCAwKQ0KPj4gKyDCoGdvdG8gbmxhX3B1dF9m YWlsdXJlOw0KPj4gKw0KPj4gKyNpZmRlZiBDT05GSUdfTkVUX0VNQVRDSA0KPj4gKyBpZiAoZi0+ ZW1hdGNoZXMuaGRyLm5tYXRjaGVzICYmDQo+PiArIMKgIHRjZl9lbV90cmVlX2R1bXAoc2tiLCAm Zi0+ZW1hdGNoZXMsIFRDQV9DR1JPVVBfRU1BVENIRVMpIDwgMCkNCj4+ICsgwqBnb3RvIG5sYV9w dXRfZmFpbHVyZTsNCj4+ICsjZW5kaWYNCj4+ICsNCj4+ICsgaWYgKHRjZl9leHRzX2R1bXBfc3Rh dHMoc2tiLCAmZi0+ZXh0cywgJmNncm91cF9leHRfbWFwKSA8IDApDQo+PiArIMKgZ290byBubGFf cHV0X2ZhaWx1cmU7DQo+PiArDQo+PiArIG5sYV9uZXN0X2VuZChza2IsIG5lc3QpOw0KPj4gKyBy ZXR1cm4gc2tiLT5sZW47DQo+PiArDQo+PiArbmxhX3B1dF9mYWlsdXJlOg0KPj4gKyBubGFfbmVz dF9jYW5jZWwoc2tiLCBuZXN0KTsNCj4+ICsgcmV0dXJuIC0xOw0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX2Nncm91cF9vcHMgPSB7DQo+PiArIC5raW5k IMKgPSAiY2dyb3VwIiwNCj4+ICsgLmNsYXNzaWZ5ID0gY2dyb3VwX2NsYXNzaWZ5LA0KPj4gKyAu aW5pdCDCoD0gY2dyb3VwX2luaXQsDQo+PiArIC5kZXN0cm95ID0gY2dyb3VwX2Rlc3Ryb3ksDQo+ PiArIC5nZXQgwqA9IGNncm91cF9nZXQsDQo+PiArIC5wdXQgwqA9IGNncm91cF9wdXQsDQo+PiAr IC5jaGFuZ2UgwqA9IGNncm91cF9jaGFuZ2UsDQo+PiArIC5kZWxldGUgwqA9IGNncm91cF9kZWxl dGUsDQo+PiArIC53YWxrIMKgPSBjZ3JvdXBfd2FsaywNCj4+ICsgLmR1bXAgwqA9IGNncm91cF9k dW1wLA0KPj4gKyAub3duZXIgwqA9IFRISVNfTU9EVUxFLA0KPj4gK307DQo+PiArDQo+PiArc3Rh dGljIGludCBfX2luaXQgaW5pdF9jZ3JvdXAodm9pZCkNCj4+ICt7DQo+PiArIHJldHVybiByZWdp c3Rlcl90Y2ZfcHJvdG9fb3BzKCZjbHNfY2dyb3VwX29wcyk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyB2b2lkIF9fZXhpdCBleGl0X2Nncm91cCh2b2lkKQ0KPj4gK3sNCj4+ICsgdW5yZWdpc3Rl cl90Y2ZfcHJvdG9fb3BzKCZjbHNfY2dyb3VwX29wcyk7DQo+PiArfQ0KPj4gKw0KPj4gK21vZHVs ZV9pbml0KGluaXRfY2dyb3VwKQ0KPj4gK21vZHVsZV9leGl0KGV4aXRfY2dyb3VwKQ0KPj4gK01P RFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4+ICsNCj4+IC0tLSAuL2xpbnV4LTIuNi4yNy9uZXQvc2No ZWQvS2NvbmZpZyAyMDA4LTEwLTEwIDA3OjEzOjUzLjAwMDAwMDAwMCArMDkwMA0KPj4gKysrIC4v bGludXgtMi42LjI3LWNvcnNldC1uZXQvbmV0L3NjaGVkL0tjb25maWcgMjAwOS0wNC0wMw0KPjEx OjI3OjU1LjAwMDAwMDAwMA0KPj4gKzA5MDANCj4+IEBAIC0zMDcsNiArMzA3LDE2IEBADQo+PiDC oCDCoFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUN Cj4+IMKgIMKgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19mbG93Lg0KPj4NCj4+ICtjb25maWcg TkVUX0NMU19DR1JPVVANCj4+ICsgdHJpc3RhdGUgIkNncm91cHMgdGMgY2xhc3NpZmllciINCj4+ ICsgc2VsZWN0IE5FVF9DTFMNCj4+ICsgLS0taGVscC0tLQ0KPj4gKyDCoCBJZiB5b3Ugc2F5IFkg aGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIGJhc2VkIG9uDQo+PiAr IMKgIGNncm91cCBtZW1iZXJzaGlwIG9mIHRoZSB0YXNrIG9yaWdpbmF0aW5nIHRoZSBwYWNrZXQu DQo+PiArDQo+PiArIMKgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2Ug TSBoZXJlOiB0aGUNCj4+ICsgwqAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19jZ3JvdXAuDQo+ PiArDQo+PiDCoGNvbmZpZyBORVRfRU1BVENIDQo+PiDCoGJvb2wgIkV4dGVuZGVkIE1hdGNoZXMi DQo+PiDCoHNlbGVjdCBORVRfQ0xTDQo+PiAtLS0gLi9saW51eC0yLjYuMjcvbmV0L3NjaGVkL01h a2VmaWxlIDIwMDgtMTAtMTAgMDc6MTM6NTMuMDAwMDAwMDAwICswOTAwDQo+PiArKysgLi9saW51 eC0yLjYuMjctY29yc2V0LW5ldC9uZXQvc2NoZWQvTWFrZWZpbGUgMjAwOS0wNC0wMw0KPjExOjI3 OjU1LjAwMDAwMDAwMA0KPj4gKzA5MDANCj4+IEBAIC0zNiw2ICszNiw3IEBADQo+PiDCoG9iai0k KENPTkZJR19ORVRfQ0xTX1JTVlA2KSArPSBjbHNfcnN2cDYubw0KPj4gwqBvYmotJChDT05GSUdf TkVUX0NMU19CQVNJQykgKz0gY2xzX2Jhc2ljLm8NCj4+IMKgb2JqLSQoQ09ORklHX05FVF9DTFNf RkxPVykgKz0gY2xzX2Zsb3cubw0KPj4gK29iai0kKENPTkZJR19ORVRfQ0xTX0NHUk9VUCkgKz0g Y2xzX2Nncm91cC5vDQo+PiDCoG9iai0kKENPTkZJR19ORVRfRU1BVENIKSArPSBlbWF0Y2gubw0K Pj4gwqBvYmotJChDT05GSUdfTkVUX0VNQVRDSF9DTVApICs9IGVtX2NtcC5vDQo+PiDCoG9iai0k KENPTkZJR19ORVRfRU1BVENIX05CWVRFKSArPSBlbV9uYnl0ZS5vDQo+PiAtLS0gLi9saW51eC0y LjYuMjcvbmV0L3NvY2tldC5jIDIwMDgtMTAtMTAgMDc6MTM6NTMuMDAwMDAwMDAwICswOTAwDQo+ PiArKysgLi9saW51eC0yLjYuMjctY29yc2V0LW5ldC9uZXQvc29ja2V0LmMgMjAwOS0wNC0yMyAx MTo0NzowNi4wMDAwMDAwMDANCj4rMDkwMA0KPj4gQEAgLTk2LDYgKzk2LDcgQEANCj4+DQo+PiDC oCNpbmNsdWRlIDxuZXQvc29jay5oPg0KPj4gwqAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+ DQo+PiArI2luY2x1ZGUgPGxpbnV4L2Nncm91cF90Yy5oPg0KPj4NCj4+IMKgc3RhdGljIGludCBz b2NrX25vX29wZW4oc3RydWN0IGlub2RlICppcnJlbGV2YW50LCBzdHJ1Y3QgZmlsZSAqZG9udGNh cmUpOw0KPj4gwqBzdGF0aWMgc3NpemVfdCBzb2NrX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9j YiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsDQo+PiBAQCAtNTI2LDYgKzUyNyw5IEBADQo+Pg0K Pj4gwqB2b2lkIHNvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQ0KPj4gwqB7DQo+PiAr IGlmKHNvY2stPnNrKQ0KPj4gKyDCoHRjX2xpc3RfZGVsKHNvY2stPnNrKTsNCj4+ICsNCj4+IMKg aWYgKHNvY2stPm9wcykgew0KPj4gwqAgc3RydWN0IG1vZHVsZSAqb3duZXIgPSBzb2NrLT5vcHMt Pm93bmVyOw0KPj4NCj4+IEBAIC0xMTczLDYgKzExNzcsOCBAQA0KPj4gwqBpZiAoZXJyIDwgMCkN Cj4+IMKgIGdvdG8gb3V0X21vZHVsZV9wdXQ7DQo+Pg0KPj4gKyBjZ3JvdXBfdGNfZG9fc29jayhz b2NrLT5zayk7DQo+PiArDQo+PiDCoC8qDQo+PiDCoCAqIE5vdyB0byBidW1wIHRoZSByZWZjbnQg b2YgdGhlIFtsb2FkYWJsZV0gbW9kdWxlIHRoYXQgb3ducyB0aGlzDQo+PiDCoCAqIHNvY2tldCBh dCBzb2NrX3JlbGVhc2UgdGltZSB3ZSBkZWNyZW1lbnQgaXRzIHJlZmNudC4NCj4+IEBAIC0xNDc3 LDYgKzE0ODMsOCBAQA0KPj4gwqBpZiAoZXJyIDwgMCkNCj4+IMKgIGdvdG8gb3V0X2ZkOw0KPj4N Cj4+ICsgY2dyb3VwX3RjX2RvX3NvY2sobmV3c29jay0+c2spOw0KPj4gKw0KPj4gwqBpZiAodXBl ZXJfc29ja2FkZHIpIHsNCj4+IMKgIGlmIChuZXdzb2NrLT5vcHMtPmdldG5hbWUobmV3c29jaywg KHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyZXNzLA0KPj4gwqAgwqAgwqAgwqAmbGVuLCAyKSA8IDAp IHsNCj4+DQo+Pg0KPj4gLS0NCj4+IFRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5k IHRoZSBsaW5lICJ1bnN1YnNjcmliZSBuZXRkZXYiIGluDQo+PiB0aGUgYm9keSBvZiBhIG1lc3Nh Z2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZw0KPj4gTW9yZSBtYWpvcmRvbW8gaW5mbyBh dCDCoGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbA0KPj4NCg==