From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750845AbXAEXLi (ORCPT ); Fri, 5 Jan 2007 18:11:38 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750847AbXAEXLi (ORCPT ); Fri, 5 Jan 2007 18:11:38 -0500 Received: from wx-out-0506.google.com ([66.249.82.234]:10663 "EHLO wx-out-0506.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750845AbXAEXLg (ORCPT ); Fri, 5 Jan 2007 18:11:36 -0500 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:from:to:subject:date:mime-version:content-type:x-priority:x-msmail-priority:x-mailer:x-mimeole; b=c4JJ0XhiIAeQiHYJCsHX5lWzsCMPi2W+3ZhYNKvZsEoDDCIUyCt8lUKzn0U3vWesoekP2kcvw2CiYXbSz5gfD+svmp/M21yVhsBLQVRPRlgB4JbwXnD6MElrqI2e46gPmSkITP7dmiF1lz+EYbHALDHDbhW7m7H3FNyZERHzpsM= Message-ID: <000a01c7311e$ca8c4a00$ec10480a@IBMF0038A435B7> From: "zyf.zeroos" To: Subject: Re: [PATCH 2.6.16.29 1/1] memory: enhance Linux swap subsystem Date: Sat, 6 Jan 2007 07:10:28 +0800 MIME-Version: 1.0 Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=SHA1; boundary="----=_NextPart_000_0007_01C73161.BECC3070" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.3028 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028 Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. ------=_NextPart_000_0007_01C73161.BECC3070 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 VGVzdCBtYWlsIHdpdGggbXkgc2lnbmF0dXJlLCBtYWlsIGNvbnRlbnQgaXMgYmFzZWQgb24gdGhl IHNlY29uZCBxdWlsdCBwYXRjaCAoTGludXggMi42LjE2LjI5KSwgb25seSB0d28ga2V5IGZpbGVz IGFyZSByZS1zZW50IDEpIERvY3VtZW50YXRpb24vdm1fcHBzLnR4dCAyKSBtbS92bXNjYW4uYw0K DQpJbmRleDogdGVzdC5zaWduYXR1cmUvRG9jdW1lbnRhdGlvbi92bV9wcHMudHh0DQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gL2Rldi9udWxsIDE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwDQor KysgdGVzdC5zaWduYXR1cmUvRG9jdW1lbnRhdGlvbi92bV9wcHMudHh0IDIwMDctMDEtMDYgMDc6 MDA6MTguMTQ2NDgwNTg0ICswODAwDQpAQCAtMCwwICsxLDIxNCBAQA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICBQdXJlIFByaXZhdGUgUGFnZSBTeXN0ZW0gKHBwcykNCisgICAgICAgICAgICAg ICAgICAgICBDb3B5cmlnaHQgYnkgWXVuZmVuZyBaaGFuZyBvbiBHRkRMIDEuMg0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHp5Zi56ZXJvb3NAZ21haWwuY29tDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRGVjZW1iZXIgMjQtMjYsIDIwMDYNCisNCisvLyBQdXJwb3NlIDwo W3sNCitUaGUgZmlsZSBpcyB1c2VkIHRvIGRvY3VtZW50IHRoZSBpZGVhIHdoaWNoIGlzIHB1Ymxp c2hlZCBmaXJzdGx5IGF0DQoraHR0cDovL3d3dy51c3NnLml1LmVkdS9oeXBlcm1haWwvbGludXgv a2VybmVsLzA2MDcuMi8wNDUxLmh0bWwsIGFzIGEgcGFydCBvZiBteQ0KK09TIC0tIG1haW4gcGFn ZSBodHRwOi8vYmxvZy5jaGluYXVuaXgubmV0L3UvMjE3NjQvaW5kZXgucGhwLiBJbiBicmllZiwg dGhlDQorcGF0Y2ggb2YgdGhlIGRvY3VtZW50IGlzIGZvciBlbmNoYW5jaW5nIHRoZSBwZXJmb3Jt YW5jZSBvZiBMaW51eCBzd2FwDQorc3Vic3lzdGVtLiBZb3UgY2FuIGZpbmQgdGhlIG92ZXJ2aWV3 IG9mIHRoZSBpZGVhIGluIHNlY3Rpb24gPEhvdyB0byBSZWNsYWltDQorUGFnZXMgbW9yZSBFZmZp Y2llbnRseT4gYW5kIGhvdyBJIHBhdGNoIGl0IGludG8gTGludXggMi42LjE2LjI5IGluIHNlY3Rp b24NCis8UHVyZSBQcml2YXRlIFBhZ2UgU3lzdGVtIC0tIHBwcz4uDQorLy8gfV0pPg0KKw0KKy8v IEhvdyB0byBSZWNsYWltIFBhZ2VzIG1vcmUgRWZmaWNpZW50bHkgPChbew0KK0dvb2QgaWRlYSBv cmlnaW5hdGVzIGZyb20gb3ZlcmFsbCBkZXNpZ24gYW5kIG1hbmFnZW1lbnQgYWJpbGl0eSwgd2hl biB5b3UgbG9vaw0KK2Rvd24gZnJvbSBhIG1hbmFnZXIgdmlldywgeW91IHdpbGwgcmVsaWVmIHlv dXJzZWxmIGZyb20gZGlzb3JkZXJlZCBjb2RlIGFuZA0KK2ZpbmQgc29tZSBwcm9ibGVtIGltbWVk aWF0ZWx5Lg0KKw0KK09LISB0byBtb2Rlcm4gT1MsIGl0cyBtZW1vcnkgc3Vic3lzdGVtIGNhbiBi ZSBkaXZpZGVkIGludG8gdGhyZWUgbGF5ZXJzDQorMSkgU3BhY2UgbGF5ZXIgKElub2RlU3BhY2Us IFVzZXJTcGFjZSBhbmQgQ29yZVNwYWNlKS4NCisyKSBWTUEgbGF5ZXIgKFByaXZhdGVWTUEgYW5k IFNoYXJlZFZNQSwgbWVtb3J5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBsYXllcikuDQorMykg UFRFLCB6b25lL21lbW9yeSBpbm9kZSBsYXllciAoYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCkuDQor NCkgTWF5YmUgaXQgbWFrZXMgeW91IHNlbnNlIHRoYXQgUGFnZSBzaG91bGQgYmUgcGxhY2VkIG9u IHRoZSAzcmQgbGF5ZXIsIGJ1dA0KKyAgIGhlcmUsIGl0J3MgcGxhY2VkIG9uIHRoZSAybmQgbGF5 ZXIgc2luY2UgaXQncyB0aGUgYmFzaWMgdW5pdCBvZiBWTUEuDQorDQorU2luY2UgdGhlIDJuZCBs YXllciBhc3NlbWJsZXMgdGhlIG11Y2ggc3RhdGlzdGljIG9mIHBhZ2UtYWNlc3MgaW5mb3JtYXRp b24sIHNvDQoraXQncyBuYXR1cmUgdGhhdCBzd2FwIHN1YnN5c3RlbSBzaG91bGQgYmUgZGVwbG95 ZWQgYW5kIGltcGxlbWVudGVkIG9uIHRoZSAybmQNCitsYXllci4NCisNCitVbmRvdWJ0ZWRseSwg dGhlcmUgYXJlIHNvbWUgdmlydHVlcyBhYm91dCBpdA0KKzEpIFN3YXBEYWVtb24gY2FuIGNvbGxl Y3QgdGhlIHN0YXRpc3RpYyBvZiBwcm9jZXNzIGFjZXNzaW5nIHBhZ2VzIGFuZCBieSBpdA0KKyAg IHVubWFwcyBwdGVzLCBTTVAgc3BlY2lhbGx5IGJlbmVmaXRzIGZyb20gaXQgZm9yIHdlIGNhbiB1 c2UgZmx1c2hfdGxiX3JhbmdlDQorICAgdG8gdW5tYXAgcHRlcyBiYXRjaGx5IHJhdGhlciB0aGFu IGZyZXF1ZW50bHkgVExCIElQSSBpbnRlcnJ1cHQgcGVyIGEgcGFnZSBpbg0KKyAgIGN1cnJlbnQg TGludXggbGVnYWN5IHN3YXAgc3Vic3lzdGVtLg0KKzIpIFBhZ2UtZmF1bHQgY2FuIGlzc3VlIGJl dHRlciByZWFkYWhlYWQgcmVxdWVzdHMgc2luY2UgaGlzdG9yeSBkYXRhIHNob3dzIGFsbA0KKyAg IHJlbGF0ZWQgcGFnZXMgaGF2ZSBjb25nbG9tZXJhdGluZyBhZmZpbml0eS4gSW4gY29udHJhc3Qs IExpbnV4IHBhZ2UtZmF1bHQNCisgICByZWFkYWhlYWRzIHRoZSBwYWdlcyByZWxhdGl2ZSB0byB0 aGUgU3dhcFNwYWNlIHBvc2l0aW9uIG9mIGN1cnJlbnQNCisgICBwYWdlLWZhdWx0IHBhZ2UuDQor MykgSXQncyBjb25mb3JtYWJsZSB0byBQT1NJWCBtYWR2aXNlIEFQSSBmYW1pbHkuDQorDQorVW5m b3J0dW5hdGVseSwgTGludXggMi42LjE2LjI5IHN3YXAgc3Vic3lzdGVtIGlzIGJhc2VkIG9uIHRo ZSAzcmQgbGF5ZXIgLS0gYQ0KK3N5c3RlbSBvbiB6b25lOjphY3RpdmVfbGlzdC9pbmFjdGl2ZV9s aXN0Lg0KKw0KK0kndmUgZmluaXNoZWQgYSBwYXRjaCwgc2VlIHNlY3Rpb24gPFB1cmUgUHJpdmF0 ZSBQYWdlIFN5c3RlbSAtLSBwcHM+LiBOb3RlLCBpdA0KK0lTTidUIHBlcmZlY3QuDQorLy8gfV0p Pg0KKw0KKy8vIFB1cmUgUHJpdmF0ZSBQYWdlIFN5c3RlbSAtLSBwcHMgIDwoW3sNCitBcyBJJ3Zl IHJlZmVycmVkIGluIHByZXZpb3VzIHNlY3Rpb24sIHBlcmZlY3RseSBhcHBseWluZyBteSBpZGVh IG5lZWQgdG8gdW5yb290DQorcGFnZS1zdXJyb3VuZ2luZyBzd2FwIHN1YnN5c3RlbSB0byBtaWdy YXRlIGl0IG9uIFZNQSwgYnV0IGEgaHVnZSBnYXAgaGFzDQorZGVmZWF0ZWQgbWUgLS0gYWN0aXZl X2xpc3QgYW5kIGluYWN0aXZlX2xpc3QuIEluIGZhY3QsIHlvdSBjYW4gZmluZA0KK2xydV9hZGRf YWN0aXZlIGNvZGUgYW55d2hlcmUgLi4uIEl0J3MgSU1QT1NTSUJMRSB0byBtZSB0byBjb21wbGV0 ZSBpdCBvbmx5IGJ5DQorbXlzZWxmLiBJdCdzIGFsc28gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBt eSBkZXNpZ24gYW5kIExpbnV4LCBpbiBteSBPUywgcGFnZSBpcw0KK3RoZSBjaGFyZ2Ugb2YgaXRz IG5ldyBvd25lciB0b3RhbGx5LCBob3dldmVyLCB0byBMaW51eCwgcGFnZSBtYW5hZ2VtZW50IHN5 c3RlbQ0KK2lzIHN0aWxsIHRyYWNpbmcgaXQgYnkgUEdfYWN0aXZlIGZsYWcuDQorDQorU28gSSBj b25jZWl2ZSBhbm90aGVyIHNvbHV0aW9uOikgVGhhdCBpcywgc2V0IHVwIGFuIGluZGVwZW5kZW50 IHBhZ2UtcmVjeWNsZQ0KK3N5c3RlbSByb290ZWQgb24gTGludXggbGVnYWN5IHBhZ2Ugc3lzdGVt IC0tIHBwcywgaW50ZXJjZXB0IGFsbCBwcml2YXRlIHBhZ2VzDQorYmVsb25naW5nIHRvIFByaXZh dGVWTUEgdG8gcHBzLCB0aGVuIHVzZSBteSBwcHMgdG8gY3ljbGUgdGhlbS4gIEJ5IHRoZSB3YXks IHRoZQ0KK3dob2xlIGpvYiBzaG91bGQgYmUgY29uc2lzdCBvZiB0d28gcGFydHMsIGhlcmUgaXMg dGhlIGZpcnN0IC0tDQorUHJpdmF0ZVZNQS1vcmllbnRlZCAoUFBTKSwgb3RoZXIgaXMgU2hhcmVk Vk1BLW9yaWVudGVkIChzaG91bGQgYmUgY2FsbGVkIFNQUykNCitzY2hlZHVsZWQgaW4gZnV0dXJl LiBPZiBjb3Vyc2UsIGlmIGFsbCBhcmUgZG9uZSwgaXQgd2lsbCBlbXB0eSBMaW51eCBsZWdhY3kN CitwYWdlIHN5c3RlbS4NCisNCitJbiBmYWN0LCBwcHMgaXMgY2VudGVyZWQgb24gaG93IHRvIGJl dHRlciBjb2xsZWN0IGFuZCB1bm1hcCBwcm9jZXNzIHByaXZhdGUNCitwYWdlcyBpbiBTd2FwRGFl bW9uIG1tL3Ztc2Nhbi5jOnNocmlua19wcml2YXRlX3ZtYSwgdGhlIHdob2xlIHByb2Nlc3MgaXMN CitkaXZpZGVkIGludG8gc2l4IHN0YWdlcyAtLSA8U3RhZ2UgRGVmaW5pdGlvbj4uIE90aGVyIHNl Y3Rpb25zIHNob3cgdGhlIHJlbWFpbg0KK2FzcGVjdHMgb2YgcHBzDQorMSkgPERhdGEgRGVmaW5p dGlvbj4gaXMgYmFzaWMgZGF0YSBkZWZpbml0aW9uLg0KKzIpIDxDb25jdXJyZW50IHJhY2VycyBv ZiBTaHJpbmtpbmcgcHBzPiBpcyBmb2N1c2VkIG9uIHN5bmNocm9uaXphdGlvbi4NCiszKSA8UHJp dmF0ZSBQYWdlIExpZmVjeWNsZSBvZiBwcHM+IC0tIGhvdyBwcml2YXRlIHBhZ2VzIGVudGVyIGlu L2dvIG9mZiBwcHMuDQorNCkgPFZNQSBMaWZlY3ljbGUgb2YgcHBzPiB3aGljaCBWTUEgaXMgYmVs b25naW5nIHRvIHBwcy4NCisNCitQUFMgdXNlcyBpbml0X21tLm1tX2xpc3QgbGlzdCB0byBlbnVt ZXJhdGUgYWxsIHN3YXBwYWJsZSBVc2VyU3BhY2UNCisoc2hyaW5rX3ByaXZhdGVfdm1hKS4NCisN CitBIG5ldyBrZXJuZWwgdGhyZWFkIC0tIGtwcHNkIGlzIGludHJvZHVjZWQgaW4gbW0vdm1zY2Fu LmMsIGl0cyB0YXNrIGlzIHRvDQorZXhlY3V0ZSB0aGUgc3RhZ2VzIG9mIHBwcyBwZXJpb2RpY2Fs bHksIG5vdGUgYW4gYXBwcm9wcmlhdGUgdGltZW91dCB0aWNrcyBpcw0KK25lY2Vzc2FyeSBzbyB3 ZSBjYW4gZ2l2ZSBhcHBsaWNhdGlvbiBhIGNoYW5jZSB0byByZS1tYXAgYmFjayBpdHMgUHJpdmF0 ZVBhZ2UNCitmcm9tIFVubWFwcGVkUFRFIHRvIFBURSwgdGhhdCBpcywgc2hvdyB0aGVpciBjb25n bG9tZXJhdGlvbiBhZmZpbml0eS4NCitzY2FuX2NvbnRyb2w6OnBwc19jbWQgZmllbGQgaXMgdXNl ZCB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiBrcHBzZCwgPSAxIGZvcg0KK2FjY2VsZXJhdGlu ZyBzY2FubmluZyBwcm9jZXNzIGFuZCByZWNsYWltaW5nIHBhZ2VzLCBpdCdzIHVzZWQgaW4gYmFs YW5jZV9wZ2RhdC4NCisNCitQUFMgc3RhdGlzdGljIGRhdGEgaXMgYXBwZW5kZWQgdG8gL3Byb2Mv bWVtaW5mbyBlbnRyeSwgaXRzIHByb3RvdHlwZSBpcyBpbg0KK2luY2x1ZGUvbGludXgvbW0uaC4N CisNCitJJ20gYWxzbyBnbGFkIHRvIGhpZ2hsaWdodCBteSBhIG5ldyBpZGVhIC0tIGRmdGxiIHdo aWNoIGlzIGRlc2NyaWJlZCBpbg0KK3NlY3Rpb24gPERlbGF5IHRvIEZsdXNoIFRMQj4uDQorLy8g fV0pPg0KKw0KKy8vIERlbGF5IHRvIEZsdXNoIFRMQiAoZGZ0bGIpIDwoW3sNCitEZWxheSB0byBm bHVzaCBUTEIgaXMgaW5zdHJvZHVjZWQgYnkgbWUgdG8gZW5oYW5jZSBmbHVzaGluZyBUTEIgZWZm aWNpZW5jeSwgaW4NCiticmllZiwgd2hlbiB3ZSB3YW50IHRvIHVubWFwIGEgcGFnZSBmcm9tIHRo ZSBwYWdlIHRhYmxlIG9mIGEgcHJvY2Vzcywgd2h5IHdlDQorc2VuZCBUTEIgSVBJIHRvIG90aGVy IENQVXMgaW1tZWRpYXRlbHksIHNpbmNlIGV2ZXJ5IENQVSBoYXMgdGltZXIgaW50ZXJydXB0LCB3 ZQ0KK2NhbiBpbnNlcnQgZmx1c2hpbmcgdGFza3MgaW50byB0aW1lciBpbnRlcnJ1cHQgcm91dGUg dG8gaW1wbGVtZW50IGENCitmcmVlLWNoYXJnZWQgVExCIGZsdXNoaW5nLg0KKw0KK1RoZSB0cmlj ayBpcyBpbXBsZW1lbnRlZCBpbg0KKzEpIFRMQiBmbHVzaGluZyB0YXNrIGlzIGFkZGVkIGluIGZp bGxfaW5fdGxiX3Rhc2sgb2YgbW0vdm1zY2FuLmMuDQorMikgdGltZXJfZmx1c2hfdGxiX3Rhc2tz IG9mIGtlcm5lbC90aW1lci5jIGlzIHVzZWQgYnkgb3RoZXIgQ1BVcyB0byBleGVjdXRlDQorICAg Zmx1c2hpbmcgdGFza3MuDQorMykgYWxsIGRhdGEgYXJlIGRlZmluZWQgaW4gaW5jbHVkZS9saW51 eC9tbS5oLg0KKw0KK1RoZSByZXN0cmljdGlvbiBvZiBkZnRsYi4gRm9sbG93aW5nIGNvbmRpdGlv bnMgbXVzdCBiZSBtZXQNCisxKSBhdG9taWMgY21weGNoZyBpbnN0cnVjdGlvbi4NCisyKSBhdG9t aWNhbGx5IHNldCB0aGUgYWNjZXNzIGJpdCBhZnRlciB0aGV5IHRvdWNoIGEgcHRlIGZpcnN0bHku DQorMykgVG8gc29tZSBhcmNoaXRlY3R1cmVzLCB2bWEgcGFyYW1ldGVyIG9mIGZsdXNoX3RsYl9y YW5nZSBpcyBtYXliZSBpbXBvcnRhbnQsDQorICAgaWYgaXQncyB0cnVlLCBzaW5jZSBpdCdzIHBv c3NpYmxlIHRoYXQgdGhlIHZtYSBvZiBhIFRMQiBmbHVzaGluZyB0YXNrIGhhcw0KKyAgIGdvbmUg d2hlbiBhIENQVSBzdGFydHMgdG8gZXhlY3V0ZSB0aGUgdGFzayBpbiB0aW1lciBpbnRlcnJ1cHQs IHNvIGRvbid0IHVzZQ0KKyAgIGRmdGxiLg0KK2NvbWJpbmUgc3RhZ2UgMSB3aXRoIHN0YWdlIDIs IGFuZCBzZW5kIElQSSBpbW1lZGlhdGVseSBpbiBmaWxsX2luX3RsYl90YXNrcy4NCisNCitkZnRs YiBpbmNyZWFzZXMgbW1fc3RydWN0OjptbV91c2VycyB0byBwcmV2ZW50IHRoZSBtbSBmcm9tIGJl aW5nIGZyZWVkIHdoZW4NCitvdGhlciBDUFUgd29ya3Mgb24gaXQuDQorLy8gfV0pPg0KKw0KKy8v IFN0YWdlIERlZmluaXRpb24gPChbew0KK1RoZSB3aG9sZSBwcm9jZXNzIG9mIHByaXZhdGUgcGFn ZSBwYWdlLW91dCBpcyBkaXZpZGVkIGludG8gc2l4IHN0YWdlcywgYXMNCitzaG93ZWQgaW4gc2hy aW5rX3B2bWFfc2Nhbl9wdGVzIG9mIG1tL3Ztc2Nhbi5jLCB0aGUgY29kZSBncm91cHMgdGhlIHNp bWlsYXINCitwYWdlcyB0byBhIHNlcmllcy4NCisxKSBQVEUgdG8gdW50b3VjaGVkIFBURSAoYWNj ZXNzIGJpdCBpcyBjbGVhcmVkKSwgYXBwZW5kIGZsdXNoaW5nIHRhc2tzIHRvIGRmdGxiLg0KKzIp IENvbnZlcnQgdW50b3VjaGVkIFBURSB0byBVbm1hcHBlZFBURS4NCiszKSBMaW5rIFN3YXBFbnRy eSB0byBldmVyeSBVbm1hcHBlZFBURS4NCis0KSBGbHVzaCBQcml2YXRlUGFnZSBvZiBVbm1hcHBl ZFBURSB0byBpdHMgZGlzayBTd2FwUGFnZS4NCis1KSBSZWNsYWltZWQgdGhlIHBhZ2UgYW5kIHNo aWZ0IFVubWFwcGVkUFRFIHRvIFN3YXBwZWRQVEUuDQorNikgU3dhcHBlZFBURSBzdGFnZS4NCisv LyB9XSk+DQorDQorLy8gRGF0YSBEZWZpbml0aW9uIDwoW3sNCitOZXcgVk1BIGZsYWcgKFZNX1BV UkVfUFJJVkFURSkgaXMgYXBwZW5kZWQgaW50byBWTUEgaW4gaW5jbHVkZS9saW51eC9tbS5oLg0K Kw0KK05ldyBQVEUgdHlwZSAoVW5tYXBwZWRQVEUpIGlzIGFwcGVuZGVkIGludG8gUFRFIHN5c3Rl bSBpbg0KK2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS5oLiBJdHMgcHJvdG90eXBlIGlzDQorc3Ry dWN0IFVubWFwcGVkUFRFIHsNCisgICAgaW50IHByZXNlbnQgOiAxOyAvLyBtdXN0IGJlIDAuDQor ICAgIC4uLg0KKyAgICBpbnQgcGFnZU51bSA6IDIwOw0KK307DQorVGhlIG5ldyBQVEUgaGFzIGEg ZmVhdHVyZSwgaXQga2VlcHMgYSBsaW5rIHRvIGl0cyBQcml2YXRlUGFnZSBhbmQgcHJldmVudCB0 aGUNCitwYWdlIGZyb20gYmVpbmcgdmlzaXRlZCBieSBDUFUsIHNvIHlvdSBjYW4gdXNlIGl0IGlu IDxTdGFnZSBEZWZpbml0aW9uPiBhcyBhDQorbWlkZGxld2FyZS4NCisvLyB9XSk+DQorDQorLy8g Q29uY3VycmVudCBSYWNlcnMgb2YgU2hyaW5raW5nIHBwcyA8KFt7DQorc2hyaW5rX3ByaXZhdGVf dm1hIG9mIG1tL3Ztc2Nhbi5jIHVzZXMgaW5pdF9tbS5tbWxpc3QgdG8gc2NhbiBhbGwgc3dhcHBh YmxlDQorbW1fc3RydWN0IGluc3RhbmNlcywgZHVyaW5nIHRoZSBwcm9jZXNzIG9mIHNjYW5pbmcg YW5kIHJlY2xhaW1pbmcgcHJvY2VzcywgaXQNCityZWFkbG9ja2VzIGV2ZXJ5IG1tX3N0cnVjdCBv YmplY3QsIHdoaWNoIGJyaW5ncyBzb21lIHBvdGVudGlhbCBjb25jdXJyZW50DQorcmFjZXJzDQor MSkgbW0vc3dhcGZpbGUuYyAgICBwcHNfc3dhcG9mZiAoc3dhcG9mZiBBUEkpLg0KKzIpIG1tL21l bW9yeS5jICBkb193cF9wYWdlLCBoYW5kbGVfcHRlX2ZhdWx0Ojp1bm1hcHBlZF9wdGUsIGRvX2Fu b255bW91c19wYWdlDQorICAgKHBhZ2UtZmF1bHQpLg0KKw0KK1RoZSBWTUFzIG9mIHBwcyBjYW4g Y29leGlzdCB3aXRoIG1hZHZpc2UsIG1sb2NrLCBtcHJvdGVjdCwgbW1hcCBhbmQgbXVubWFwLA0K K3RoYXQgaXMgd2h5IG5ldyBWTUEgY3JlYXRlZCBmcm9tIG1tYXAuYzpzcGxpdF92bWEgY2FuIHJl LWVudGVyIGludG8gcHBzLg0KKy8vIH1dKT4NCisNCisvLyBQcml2YXRlIFBhZ2UgTGlmZWN5Y2xl IG9mIHBwcyA8KFt7DQorQWxsIHBhZ2VzIGJlbG9uZ2luZyB0byBwcHMgYXJlIGNhbGxlZCBhcyBw dXJlIHByaXZhdGUgcGFnZSwgaXRzIFBURSB0eXBlIGlzIFBURQ0KK29yIFVubWFwcGVkUFRFLg0K Kw0KK0lOIChOT1RFLCB3aGVuIGEgcHVyZSBwcml2YXRlIHBhZ2UgZW50ZXJzIGludG8gcHBzLCBp dCdzIGFsc28gdHJpbW1lZCBmcm9tDQorTGludXggbGVnYWN5IHBhZ2Ugc3lzdGVtIGJ5IGNvbW1l dGluZyBscnVfY2FjaGVfYWRkX2FjdGl2ZSBjbGF1c2UpDQorMSkgZnMvZXhlYy5jIGluc3RhbGxf YXJnX3BhZ2VzIChhcmd1bWVudCBwYWdlcykuDQorMikgbW0vbWVtb3J5IGRvX2Fub255bW91c19w YWdlLCBkb193cF9wYWdlLCBkb19zd2FwX3BhZ2UgKHBhZ2UgZmF1bHQpLg0KKzMpIG1tL3N3YXBf c3RhdGUuYyByZWFkX3N3YXBfY2FjaGVfYXN5bmMgKHN3YXAgcGFnZXMpLg0KKw0KK09VVA0KKzEp IG1tL3Ztc2Nhbi5jICBzaHJpbmtfcHZtYV9zY2FuX3B0ZXMgICAoc3RhZ2UgNiwgcmVjbGFpbSBh IHByaXZhdGUgcGFnZSkuDQorMikgbW0vbWVtb3J5ICAgIHphcF9wdGVfcmFuZ2UgICAoZnJlZSBh IHBhZ2UpLg0KKzMpIGtlcm5lbC9mb3JrLmMgZHVwX21tYXAgKGlmIHNvbWVvbmUgdXNlcyBmb3Jr LCBtaWdyYXRlIGFsbCBwcHMgcGFnZXMNCisgICBiYWNrIHRvIGxldCBMaW51eCBsZWdhY3kgcGFn ZSBzeXN0ZW0gbWFuYWdlIHRoZW0pLg0KKw0KK1doZW4gYSBwdXJlIHByaXZhdGUgcGFnZSBpcyBp biBwcHMsIGl0IGNhbiBiZSB2aXNpdGVkIHNpbXVsdGFuZW91c2x5IGJ5DQorcGFnZS1mYXVsdCBh bmQgU3dhcERhZW1vbi4NCisvLyB9XSk+DQorDQorLy8gVk1BIExpZmVjeWNsZSBvZiBwcHMgPChb ew0KK1doZW4gYSBQcml2YXRlVk1BIGVudGVycyBpbnRvIHBwcywgaXQncyBvci1lZCBhIG5ldyBm bGFnIC0tIFZNX1BVUkVfUFJJVkFURSBpbg0KK21lbW9yeS5jOmVudGVyX3BwcywgeW91IGNhbiBh bHNvIGZpbmQgd2hpY2ggVk1BIGlzIGZpdCB3aXRoIHBwcyBpbiBpdCwgdGhlIGZsYWcNCitpcyB1 c2VkIGluIHRoZSBzaHJpbmtfcHJpdmF0ZV92bWEgb2YgbW0vdm1zY2FuLmMuICBPdGhlciBmaWVs ZHMgYXJlIGxlZnQNCit1bnRvdWNoZWQuDQorDQorSU4uDQorMSkgZnMvZXhlYy5jIHNldHVwX2Fy Z19wYWdlcyAoU3RhY2tWTUEpLg0KKzIpIG1tL21tYXAuYyBkb19tbWFwX3Bnb2ZmLCBkb19icmsg KERhdGFWTUEpLg0KKzMpIG1tL21tYXAuYyBzcGxpdF92bWEsIGNvcHlfdm1hIChpbiBzb21lIGNh c2VzLCB3ZSBuZWVkIGNvcHkgYSBWTUEgZnJvbSBhbg0KKyAgIGV4aXN0IFZNQSkuDQorDQorT1VU Lg0KKzEpIGtlcm5lbC9mb3JrLmMgZHVwX21tYXAgKGlmIHNvbWVvbmUgdXNlcyBmb3JrLCByZXR1 cm4gdGhlIHZtYSBiYWNrIHRvDQorICAgTGludXggbGVnYWN5IHN5c3RlbSkuDQorMikgbW0vbW1h cC5jIHJlbW92ZV92bWEsIHZtYV9hZGp1c3QgKGRlc3Ryb3kgVk1BKS4NCiszKSBtbS9tbWFwLmMg ZG9fbW1hcF9wZ29mZiAoZGVsZXRlIFZNQSB3aGVuIHNvbWUgZXJyb3JzIG9jY3VyKS4NCisvLyB9 XSk+DQorDQorLy8gUG9zdHNjcmlwdCA8KFt7DQorTm90ZSwgc29tZSBjaXJjdW1zdGFuY2VzIGFy ZW4ndCB0ZXN0ZWQgZHVlIHRvIGhhcmR3YXJlIHJlc3RyaWN0aW9uIGUuZy4gU01QDQorZGZ0bGIu DQorDQorSGVyZSBhcmUgc29tZSBpbXByb3ZlbWVudHMgYWJvdXQgcHBzDQorMSkgSW4gZmFjdCwg SSByZWNvbW1lbmQgb25lLXRvLW9uZSBwcml2YXRlIG1vZGVsIC0tIFByaXZhdGVWTUEsIChQVEUs DQorICAgVW5tYXBwZWRQVEUpIGFuZCBQcml2YXRlUGFnZSAoU3dhcFBhZ2UpIHdoaWNoIGlzIGRl c2NyaWJlZCBpbiBteSBPUyBhbmQgdGhlDQorICAgYWJvdmVkIGh5cGVybGluayBvZiBMaW51eCBr ZXJuZWwgbWFpbCBsaXN0LiBTbyBpdCdzIGEgY29tcHJvbWlzZSB0byB1c2UNCisgICBMaW51eCBs ZWdhY3kgU3dhcENhY2hlIGluIG15IHBwcy4NCisyKSBTd2FwU3BhY2Ugc2hvdWxkIHByb3ZpZGUg bW9yZSBmbGV4aWJsZSBpbnRlcmZhY2VzLCBzaHJpbmtfcHZtYV9zY2FuX3B0ZXMNCisgICBuZWVk IGFsbG9jYXRlIHN3YXAgZW50cmllcyBpbiBiYXRjaCwgZXhhY3RseSwgYWxsb2NhdGUgYSBiYXRj aCBvZiBmYWtlDQorICAgY29udGludWFsIHN3YXAgZW50cmllcywgc2VlIG1tL3Bwc19zd2FwaW5f cmVhZGFoZWFkLg0KKw0KK0lmIExpbnV4IGtlcm5lbCBncm91cCBjYW4ndCBtYWtlIGEgc2NoZWR1 bGUgdG8gcmUtd3JpdGUgdGhlaXIgbWVtb3J5IGNvZGUsDQoraG93ZXZlciwgcHBzIG1heWJlIGlz IHRoZSBiZXN0IHNvbHV0aW9uIHVudGlsIG5vdy4NCisvLyB9XSk+DQorLy8gdmltOiBmb2xkbWFy a2VyPTwoW3ssfV0pPiBmb2xkbWV0aG9kPW1hcmtlciBldA0KSW5kZXg6IHRlc3Quc2lnbmF0dXJl L21tL3Ztc2Nhbi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdGVzdC5zaWduYXR1cmUub3JpZy9tbS92bXNj YW4uYyAyMDA3LTAxLTA2IDA3OjAwOjExLjc5OTQ0NTQ4MCArMDgwMA0KKysrIHRlc3Quc2lnbmF0 dXJlL21tL3Ztc2Nhbi5jIDIwMDctMDEtMDYgMDc6MDA6MjMuMzI2NjkzMDcyICswODAwDQpAQCAt NzksNiArNzksOSBAQA0KICAgKiBJbiB0aGlzIGNvbnRleHQsIGl0IGRvZXNuJ3QgbWF0dGVyIHRo YXQgd2Ugc2NhbiB0aGUNCiAgICogd2hvbGUgbGlzdCBhdCBvbmNlLiAqLw0KICBpbnQgc3dhcF9j bHVzdGVyX21heDsNCisNCisgLyogcHBzIGNvbnRyb2wgY29tbWFuZCwgMDogZG8gc3RhZ2UgMS00 LCBrcHBzZCBvbmx5OyAxOiBmdWxsIHN0YWdlcy4gKi8NCisgaW50IHBwc19jbWQ7DQogfTsNCiAN CiAvKg0KQEAgLTE1MTQsNiArMTUxNyw0MjggQEANCiAgcmV0dXJuIHJldDsNCiB9DQogDQorLy8g cHBzIGZpZWxkcy4NCitzdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3Qga3Bwc2Rfd2FpdDsNCitzdGF0 aWMgc3RydWN0IHNjYW5fY29udHJvbCB3YWtldXBfc2M7DQorc3RydWN0IHBwc19pbmZvIHBwc19p bmZvID0gew0KKyAudG90YWwgPSBBVE9NSUNfSU5JVCgwKSwNCisgLnB0ZV9jb3VudCA9IEFUT01J Q19JTklUKDApLCAvLyBzdGFnZSAxIGFuZCAyLg0KKyAudW5tYXBwZWRfY291bnQgPSBBVE9NSUNf SU5JVCgwKSwgLy8gc3RhZ2UgMyBhbmQgNC4NCisgLnN3YXBwZWRfY291bnQgPSBBVE9NSUNfSU5J VCgwKSAvLyBzdGFnZSA2Lg0KK307DQorLy8gcHBzIGVuZC4NCisNCitzdHJ1Y3Qgc2VyaWVzX3Qg ew0KKyBwdGVfdCBvcmlnX3B0ZXNbTUFYX1NFUklFU19MRU5HVEhdOw0KKyBwdGVfdCogcHRlc1tN QVhfU0VSSUVTX0xFTkdUSF07DQorIHN0cnVjdCBwYWdlKiBwYWdlc1tNQVhfU0VSSUVTX0xFTkdU SF07DQorIGludCBzZXJpZXNfbGVuZ3RoOw0KKyBpbnQgc2VyaWVzX3N0YWdlOw0KK30gc2VyaWVz Ow0KKw0KK3N0YXRpYyBpbnQgZ2V0X3Nlcmllc19zdGFnZShwdGVfdCogcHRlLCBpbnQgaW5kZXgp DQorew0KKyBzZXJpZXMub3JpZ19wdGVzW2luZGV4XSA9ICpwdGU7DQorIHNlcmllcy5wdGVzW2lu ZGV4XSA9IHB0ZTsNCisgaWYgKHB0ZV9wcmVzZW50KHNlcmllcy5vcmlnX3B0ZXNbaW5kZXhdKSkg ew0KKyAgc3RydWN0IHBhZ2UqIHBhZ2UgPSBwZm5fdG9fcGFnZShwdGVfcGZuKHNlcmllcy5vcmln X3B0ZXNbaW5kZXhdKSk7DQorICBzZXJpZXMucGFnZXNbaW5kZXhdID0gcGFnZTsNCisgIGlmIChw YWdlID09IFpFUk9fUEFHRShhZGRyKSkgLy8gcmVzZXJ2ZWQgcGFnZSBpcyBleGNsdXNpdmUgZnJv bSB1cy4NCisgICByZXR1cm4gNzsNCisgIGlmIChwdGVfeW91bmcoc2VyaWVzLm9yaWdfcHRlc1tp bmRleF0pKSB7DQorICAgcmV0dXJuIDE7DQorICB9IGVsc2UNCisgICByZXR1cm4gMjsNCisgfSBl bHNlIGlmIChwdGVfdW5tYXBwZWQoc2VyaWVzLm9yaWdfcHRlc1tpbmRleF0pKSB7DQorICBzdHJ1 Y3QgcGFnZSogcGFnZSA9IHBmbl90b19wYWdlKHB0ZV9wZm4oc2VyaWVzLm9yaWdfcHRlc1tpbmRl eF0pKTsNCisgIHNlcmllcy5wYWdlc1tpbmRleF0gPSBwYWdlOw0KKyAgaWYgKCFQYWdlU3dhcENh Y2hlKHBhZ2UpKQ0KKyAgIHJldHVybiAzOw0KKyAgZWxzZSB7DQorICAgaWYgKFBhZ2VXcml0ZWJh Y2socGFnZSkgfHwgUGFnZURpcnR5KHBhZ2UpKQ0KKyAgICByZXR1cm4gNDsNCisgICBlbHNlDQor ICAgIHJldHVybiA1Ow0KKyAgfQ0KKyB9IGVsc2UgLy8gcHRlX3N3YXBwZWQgLS0gU3dhcHBlZFBU RQ0KKyAgcmV0dXJuIDY7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGZpbmRfc2VyaWVzKHB0ZV90Kiog c3RhcnQsIHVuc2lnbmVkIGxvbmcqIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQ0KK3sNCisgaW50 IGk7DQorIGludCBzZXJpZXNfc3RhZ2UgPSBnZXRfc2VyaWVzX3N0YWdlKCgqc3RhcnQpKyssIDAp Ow0KKyAqYWRkciArPSBQQUdFX1NJWkU7DQorDQorIGZvciAoaSA9IDE7IGkgPCBNQVhfU0VSSUVT X0xFTkdUSCAmJiAqYWRkciA8IGVuZDsgaSsrLCAoKnN0YXJ0KSsrLCAqYWRkciArPSBQQUdFX1NJ WkUpIHsNCisgIGlmIChzZXJpZXNfc3RhZ2UgIT0gZ2V0X3Nlcmllc19zdGFnZSgqc3RhcnQsIGkp KQ0KKyAgIGJyZWFrOw0KKyB9DQorIHNlcmllcy5zZXJpZXNfc3RhZ2UgPSBzZXJpZXNfc3RhZ2U7 DQorIHNlcmllcy5zZXJpZXNfbGVuZ3RoID0gaTsNCit9DQorDQorc3RydWN0IGRlbGF5X3RsYl90 YXNrIGRlbGF5X3RsYl90YXNrc1szMl0gPSB7IFswIC4uLiAzMV0gPSB7MH0gfTsNCisNCit2b2lk IHRpbWVyX2ZsdXNoX3RsYl90YXNrcyh2b2lkKiBkYXRhKQ0KK3sNCisgaW50IGk7DQorI2lmZGVm IENPTkZJR19YODYNCisgaW50IGZsYWcgPSAwOw0KKyNlbmRpZg0KKyBmb3IgKGkgPSAwOyBpIDwg MzI7IGkrKykgew0KKyAgaWYgKGRlbGF5X3RsYl90YXNrc1tpXS5tbSAhPSBOVUxMICYmDQorICAg IGNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGRlbGF5X3RsYl90YXNrc1tpXS5tbS0+Y3B1 X3ZtX21hc2spICYmDQorICAgIGNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGRlbGF5X3Rs Yl90YXNrc1tpXS5jcHVfbWFzaykpIHsNCisjaWZkZWYgQ09ORklHX1g4Ng0KKyAgIGZsYWcgPSAx Ow0KKyNlbGlmDQorICAgLy8gc21wOjpsb2NhbF9mbHVzaF90bGJfcmFuZ2UoZGVsYXlfdGxiX3Rh c2tzW2ldKTsNCisjZW5kaWYNCisgICBjcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBkZWxh eV90bGJfdGFza3NbaV0uY3B1X21hc2spOw0KKyAgfQ0KKyB9DQorI2lmZGVmIENPTkZJR19YODYN CisgaWYgKGZsYWcpDQorICBsb2NhbF9mbHVzaF90bGIoKTsNCisjZW5kaWYNCit9DQorDQorc3Rh dGljIHN0cnVjdCBkZWxheV90bGJfdGFzayogZGVsYXlfdGFzayA9IE5VTEw7DQorc3RhdGljIGlu dCB2bWFfaW5kZXggPSAwOw0KKw0KK3N0YXRpYyBzdHJ1Y3QgZGVsYXlfdGxiX3Rhc2sqIHNlYXJj aF9mcmVlX3RsYl90YXNrc19zbG90KHZvaWQpDQorew0KKyBzdHJ1Y3QgZGVsYXlfdGxiX3Rhc2sq IHJldCA9IE5VTEw7DQorIGludCBpOw0KK2FnYWluOg0KKyBmb3IgKGkgPSAwOyBpIDwgMzI7IGkr Kykgew0KKyAgaWYgKGRlbGF5X3RsYl90YXNrc1tpXS5tbSAhPSBOVUxMKSB7DQorICAgaWYgKGNw dXNfZW1wdHkoZGVsYXlfdGxiX3Rhc2tzW2ldLmNwdV9tYXNrKSkgew0KKyAgICBtbXB1dChkZWxh eV90bGJfdGFza3NbaV0ubW0pOw0KKyAgICBkZWxheV90bGJfdGFza3NbaV0ubW0gPSBOVUxMOw0K KyAgICByZXQgPSAmZGVsYXlfdGxiX3Rhc2tzW2ldOw0KKyAgIH0NCisgIH0gZWxzZQ0KKyAgIHJl dCA9ICZkZWxheV90bGJfdGFza3NbaV07DQorIH0NCisgaWYgKCFyZXQpIHsgLy8gRm9yY2UgZmx1 c2ggVExCcy4NCisgIG9uX2VhY2hfY3B1KHRpbWVyX2ZsdXNoX3RsYl90YXNrcywgTlVMTCwgMCwg MSk7DQorICBnb3RvIGFnYWluOw0KKyB9DQorIHJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIGluaXRfZGVsYXlfdGFzayhzdHJ1Y3QgbW1fc3RydWN0KiBtbSkNCit7DQorIGNwdXNfY2xl YXIoZGVsYXlfdGFzay0+Y3B1X21hc2spOw0KKyB2bWFfaW5kZXggPSAwOw0KKyBkZWxheV90YXNr LT5tbSA9IG1tOw0KK30NCisNCisvKg0KKyAqIFdlIHdpbGwgYmUgd29ya2luZyBvbiB0aGUgbW0s IHNvIGxldCdzIGZvcmNlIHRvIGZsdXNoIGl0IGlmIG5lY2Vzc2FyeS4NCisgKi8NCitzdGF0aWMg dm9pZCBzdGFydF90bGJfdGFza3Moc3RydWN0IG1tX3N0cnVjdCogbW0pDQorew0KKyBpbnQgaSwg ZmxhZyA9IDA7DQorYWdhaW46DQorIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7DQorICBpZiAo ZGVsYXlfdGxiX3Rhc2tzW2ldLm1tID09IG1tKSB7DQorICAgaWYgKGNwdXNfZW1wdHkoZGVsYXlf dGxiX3Rhc2tzW2ldLmNwdV9tYXNrKSkgew0KKyAgICBtbXB1dChkZWxheV90bGJfdGFza3NbaV0u bW0pOw0KKyAgICBkZWxheV90bGJfdGFza3NbaV0ubW0gPSBOVUxMOw0KKyAgIH0gZWxzZQ0KKyAg ICBmbGFnID0gMTsNCisgIH0NCisgfQ0KKyBpZiAoZmxhZykgeyAvLyBGb3JjZSBmbHVzaCBUTEJz Lg0KKyAgb25fZWFjaF9jcHUodGltZXJfZmx1c2hfdGxiX3Rhc2tzLCBOVUxMLCAwLCAxKTsNCisg IGdvdG8gYWdhaW47DQorIH0NCisgQlVHX09OKGRlbGF5X3Rhc2sgIT0gTlVMTCk7DQorIGRlbGF5 X3Rhc2sgPSBzZWFyY2hfZnJlZV90bGJfdGFza3Nfc2xvdCgpOw0KKyBpbml0X2RlbGF5X3Rhc2so bW0pOw0KK30NCisNCitzdGF0aWMgdm9pZCBlbmRfdGxiX3Rhc2tzKHZvaWQpDQorew0KKyBhdG9t aWNfaW5jKCZkZWxheV90YXNrLT5tbS0+bW1fdXNlcnMpOw0KKyBkZWxheV90YXNrLT5jcHVfbWFz ayA9IGRlbGF5X3Rhc2stPm1tLT5jcHVfdm1fbWFzazsNCisgZGVsYXlfdGFzayA9IE5VTEw7DQor I2lmbmRlZiBDT05GSUdfU01QDQorIHRpbWVyX2ZsdXNoX3RsYl90YXNrcyhOVUxMKTsNCisjZW5k aWYNCit9DQorDQorc3RhdGljIHZvaWQgZmlsbF9pbl90bGJfdGFza3Moc3RydWN0IHZtX2FyZWFf c3RydWN0KiB2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwNCisgIHVuc2lnbmVkIGxvbmcgZW5kKQ0K K3sNCisgc3RydWN0IG1tX3N0cnVjdCogbW07DQorIC8vIEZpcnN0LCB0cnkgdG8gY29tYmluZSB0 aGUgdGFzayB3aXRoIHRoZSBwcmV2aW91cy4NCisgaWYgKHZtYV9pbmRleCAhPSAwICYmIGRlbGF5 X3Rhc2stPnZtYVt2bWFfaW5kZXggLSAxXSA9PSB2bWEgJiYNCisgICBkZWxheV90YXNrLT5lbmRb dm1hX2luZGV4IC0gMV0gPT0gYWRkcikgew0KKyAgZGVsYXlfdGFzay0+ZW5kW3ZtYV9pbmRleCAt IDFdID0gZW5kOw0KKyAgcmV0dXJuOw0KKyB9DQorZmlsbF9pdDoNCisgaWYgKHZtYV9pbmRleCAh PSAzMikgew0KKyAgZGVsYXlfdGFzay0+dm1hW3ZtYV9pbmRleF0gPSB2bWE7DQorICBkZWxheV90 YXNrLT5zdGFydFt2bWFfaW5kZXhdID0gYWRkcjsNCisgIGRlbGF5X3Rhc2stPmVuZFt2bWFfaW5k ZXhdID0gZW5kOw0KKyAgdm1hX2luZGV4Kys7DQorICByZXR1cm47DQorIH0NCisgbW0gPSBkZWxh eV90YXNrLT5tbTsNCisgZW5kX3RsYl90YXNrcygpOw0KKw0KKyBkZWxheV90YXNrID0gc2VhcmNo X2ZyZWVfdGxiX3Rhc2tzX3Nsb3QoKTsNCisgaW5pdF9kZWxheV90YXNrKG1tKTsNCisgZ290byBm aWxsX2l0Ow0KK30NCisNCitzdGF0aWMgdm9pZCBzaHJpbmtfcHZtYV9zY2FuX3B0ZXMoc3RydWN0 IHNjYW5fY29udHJvbCogc2MsIHN0cnVjdCBtbV9zdHJ1Y3QqDQorICBtbSwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0KiB2bWEsIHBtZF90KiBwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwNCisgIHVuc2ln bmVkIGxvbmcgZW5kKQ0KK3sNCisgaW50IGksIHN0YXRpc3RpYzsNCisgc3BpbmxvY2tfdCogcHRs ID0gcHRlX2xvY2twdHIobW0sIHBtZCk7DQorIHB0ZV90KiBwdGUgPSBwdGVfb2Zmc2V0X21hcChw bWQsIGFkZHIpOw0KKyBpbnQgYW5vbl9yc3MgPSAwOw0KKyBzdHJ1Y3QgcGFnZXZlYyBmcmVlZF9w dmVjOw0KKyBpbnQgbWF5X2VudGVyX2ZzID0gKHNjLT5nZnBfbWFzayAmIChfX0dGUF9GUyB8IF9f R0ZQX0lPKSk7DQorIHN0cnVjdCBhZGRyZXNzX3NwYWNlKiBtYXBwaW5nID0gJnN3YXBwZXJfc3Bh Y2U7DQorDQorIHBhZ2V2ZWNfaW5pdCgmZnJlZWRfcHZlYywgMSk7DQorIGRvIHsNCisgIG1lbXNl dCgmc2VyaWVzLCAwLCBzaXplb2Yoc3RydWN0IHNlcmllc190KSk7DQorICBmaW5kX3Nlcmllcygm cHRlLCAmYWRkciwgZW5kKTsNCisgIGlmIChzYy0+cHBzX2NtZCA9PSAwICYmIHNlcmllcy5zZXJp ZXNfc3RhZ2UgPT0gNSkNCisgICBjb250aW51ZTsNCisgIHN3aXRjaCAoc2VyaWVzLnNlcmllc19z dGFnZSkgew0KKyAgIGNhc2UgMTogLy8gUFRFIC0tIHVudG91Y2hlZCBQVEUuDQorICAgIGZvciAo aSA9IDA7IGkgPCBzZXJpZXMuc2VyaWVzX2xlbmd0aDsgaSsrKSB7DQorICAgICBzdHJ1Y3QgcGFn ZSogcGFnZSA9IHNlcmllcy5wYWdlc1tpXTsNCisgICAgIGxvY2tfcGFnZShwYWdlKTsNCisgICAg IHNwaW5fbG9jayhwdGwpOw0KKyAgICAgaWYgKHVubGlrZWx5KHB0ZV9zYW1lKCpzZXJpZXMucHRl c1tpXSwgc2VyaWVzLm9yaWdfcHRlc1tpXSkpKSB7DQorICAgICAgaWYgKHB0ZV9kaXJ0eSgqc2Vy aWVzLnB0ZXNbaV0pKQ0KKyAgICAgICBzZXRfcGFnZV9kaXJ0eShwYWdlKTsNCisgICAgICBzZXRf cHRlX2F0KG1tLCBhZGRyICsgaSAqIFBBR0VfU0laRSwgc2VyaWVzLnB0ZXNbaV0sDQorICAgICAg ICBwdGVfbWtvbGQocHRlX21rY2xlYW4oKnNlcmllcy5wdGVzW2ldKSkpOw0KKyAgICAgfQ0KKyAg ICAgc3Bpbl91bmxvY2socHRsKTsNCisgICAgIHVubG9ja19wYWdlKHBhZ2UpOw0KKyAgICB9DQor ICAgIGZpbGxfaW5fdGxiX3Rhc2tzKHZtYSwgYWRkciwgYWRkciArIChQQUdFX1NJWkUgKiBzZXJp ZXMuc2VyaWVzX2xlbmd0aCkpOw0KKyAgICBicmVhazsNCisgICBjYXNlIDI6IC8vIHVudG91Y2hl ZCBQVEUgLS0gVW5tYXBwZWRQVEUuDQorICAgIC8qDQorICAgICAqIE5vdGUgaW4gc3RhZ2UgMSwg d2UndmUgZmx1c2hlZCBUTEIgaW4gZmlsbF9pbl90bGJfdGFza3MsIHNvDQorICAgICAqIGlmIGl0 J3Mgc3RpbGwgY2xlYXIgaGVyZSwgd2UgY2FuIHNoaWZ0IGl0IHRvIFVubWFwcGVkIHR5cGUuDQor ICAgICAqDQorICAgICAqIElmIHNvbWUgYXJjaGl0ZWN0dXJlIGRvZXNuJ3Qgc3VwcG9ydCBhdG9t aWMgY21weGNoZw0KKyAgICAgKiBpbnN0cnVjdGlvbiBvciBjYW4ndCBhdG9taWNhbGx5IHNldCB0 aGUgYWNjZXNzIGJpdCBhZnRlcg0KKyAgICAgKiB0aGV5IHRvdWNoIGEgcHRlIGF0IGZpcnN0LCBj b21iaW5lIHN0YWdlIDEgd2l0aCBzdGFnZSAyLCBhbmQNCisgICAgICogc2VuZCBJUEkgaW1tZWRp YXRlbHkgaW4gZmlsbF9pbl90bGJfdGFza3MuDQorICAgICAqLw0KKyAgICBzcGluX2xvY2socHRs KTsNCisgICAgc3RhdGlzdGljID0gMDsNCisgICAgZm9yIChpID0gMDsgaSA8IHNlcmllcy5zZXJp ZXNfbGVuZ3RoOyBpKyspIHsNCisgICAgIGlmICh1bmxpa2VseShwdGVfc2FtZSgqc2VyaWVzLnB0 ZXNbaV0sIHNlcmllcy5vcmlnX3B0ZXNbaV0pKSkgew0KKyAgICAgIHB0ZV90IHB0ZV91bm1hcHBl ZCA9IHNlcmllcy5vcmlnX3B0ZXNbaV07DQorICAgICAgcHRlX3VubWFwcGVkLnB0ZV9sb3cgJj0g fl9QQUdFX1BSRVNFTlQ7DQorICAgICAgcHRlX3VubWFwcGVkLnB0ZV9sb3cgfD0gX1BBR0VfVU5N QVBQRUQ7DQorICAgICAgaWYgKGNtcHhjaGcoJnNlcmllcy5wdGVzW2ldLT5wdGVfbG93LA0KKyAg ICAgICAgIHNlcmllcy5vcmlnX3B0ZXNbaV0ucHRlX2xvdywNCisgICAgICAgICBwdGVfdW5tYXBw ZWQucHRlX2xvdykgIT0NCisgICAgICAgIHNlcmllcy5vcmlnX3B0ZXNbaV0ucHRlX2xvdykNCisg ICAgICAgY29udGludWU7DQorICAgICAgcGFnZV9yZW1vdmVfcm1hcChzZXJpZXMucGFnZXNbaV0p Ow0KKyAgICAgIGFub25fcnNzLS07DQorICAgICAgc3RhdGlzdGljKys7DQorICAgICB9DQorICAg IH0NCisgICAgYXRvbWljX2FkZChzdGF0aXN0aWMsICZwcHNfaW5mby51bm1hcHBlZF9jb3VudCk7 DQorICAgIGF0b21pY19zdWIoc3RhdGlzdGljLCAmcHBzX2luZm8ucHRlX2NvdW50KTsNCisgICAg c3Bpbl91bmxvY2socHRsKTsNCisgICAgYnJlYWs7DQorICAgY2FzZSAzOiAvLyBBdHRhY2ggU3dh cFBhZ2UgdG8gUHJpdmF0ZVBhZ2UuDQorICAgIC8qDQorICAgICAqIEEgYmV0dGVyIGFyaXRobWV0 aWMgc2hvdWxkIGJlIGFwcGxpZWQgdG8gTGludXggU3dhcERldmljZSB0bw0KKyAgICAgKiBhbGxv Y2F0ZSBmYWtlIGNvbnRpbnVhbCBTd2FwUGFnZXMgd2hpY2ggYXJlIGNsb3NlIHRvIGVhY2gNCisg ICAgICogb3RoZXIsIHRoZSBvZmZzZXQgYmV0d2VlbiB0d28gY2xvc2UgU3dhcFBhZ2VzIGlzIGxl c3MgdGhhbiA4Lg0KKyAgICAgKi8NCisgICAgaWYgKHNjLT5tYXlfc3dhcCkgew0KKyAgICAgZm9y IChpID0gMDsgaSA8IHNlcmllcy5zZXJpZXNfbGVuZ3RoOyBpKyspIHsNCisgICAgICBsb2NrX3Bh Z2Uoc2VyaWVzLnBhZ2VzW2ldKTsNCisgICAgICBpZiAoIVBhZ2VTd2FwQ2FjaGUoc2VyaWVzLnBh Z2VzW2ldKSkgew0KKyAgICAgICBpZiAoIWFkZF90b19zd2FwKHNlcmllcy5wYWdlc1tpXSwgR0ZQ X0FUT01JQykpIHsNCisgICAgICAgIHVubG9ja19wYWdlKHNlcmllcy5wYWdlc1tpXSk7DQorICAg ICAgICBicmVhazsNCisgICAgICAgfQ0KKyAgICAgIH0NCisgICAgICB1bmxvY2tfcGFnZShzZXJp ZXMucGFnZXNbaV0pOw0KKyAgICAgfQ0KKyAgICB9DQorICAgIGJyZWFrOw0KKyAgIGNhc2UgNDog Ly8gU3dhcFBhZ2UgaXNuJ3QgY29uc2lzdGVudCB3aXRoIFByaXZhdGVQYWdlLg0KKyAgICAvKg0K KyAgICAgKiBBIG1pbmkgdmVyc2lvbiBwYWdlb3V0KCkuDQorICAgICAqDQorICAgICAqIEN1cnJl bnQgc3dhcCBzcGFjZSBjYW4ndCBjb21taXQgbXVsdGlwbGUgcGFnZXMgdG9nZXRoZXI6KA0KKyAg ICAgKi8NCisgICAgaWYgKHNjLT5tYXlfd3JpdGVwYWdlICYmIG1heV9lbnRlcl9mcykgew0KKyAg ICAgZm9yIChpID0gMDsgaSA8IHNlcmllcy5zZXJpZXNfbGVuZ3RoOyBpKyspIHsNCisgICAgICBz dHJ1Y3QgcGFnZSogcGFnZSA9IHNlcmllcy5wYWdlc1tpXTsNCisgICAgICBpbnQgcmVzOw0KKw0K KyAgICAgIGlmICghbWF5X3dyaXRlX3RvX3F1ZXVlKG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8p KQ0KKyAgICAgICBicmVhazsNCisgICAgICBsb2NrX3BhZ2UocGFnZSk7DQorICAgICAgaWYgKCFQ YWdlRGlydHkocGFnZSkgfHwgUGFnZVdyaXRlYmFjayhwYWdlKSkgew0KKyAgICAgICB1bmxvY2tf cGFnZShwYWdlKTsNCisgICAgICAgY29udGludWU7DQorICAgICAgfQ0KKyAgICAgIGNsZWFyX3Bh Z2VfZGlydHlfZm9yX2lvKHBhZ2UpOw0KKyAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3 YmMgPSB7DQorICAgICAgIC5zeW5jX21vZGUgPSBXQl9TWU5DX05PTkUsDQorICAgICAgIC5ucl90 b193cml0ZSA9IFNXQVBfQ0xVU1RFUl9NQVgsDQorICAgICAgIC5ub25ibG9ja2luZyA9IDEsDQor ICAgICAgIC5mb3JfcmVjbGFpbSA9IDEsDQorICAgICAgfTsNCisgICAgICBwYWdlX2NhY2hlX2dl dChwYWdlKTsNCisgICAgICBTZXRQYWdlUmVjbGFpbShwYWdlKTsNCisgICAgICByZXMgPSBzd2Fw X3dyaXRlcGFnZShwYWdlLCAmd2JjKTsNCisgICAgICBpZiAocmVzIDwgMCkgew0KKyAgICAgICBo YW5kbGVfd3JpdGVfZXJyb3IobWFwcGluZywgcGFnZSwgcmVzKTsNCisgICAgICAgQ2xlYXJQYWdl UmVjbGFpbShwYWdlKTsNCisgICAgICAgcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOw0KKyAgICAg ICBicmVhazsNCisgICAgICB9DQorICAgICAgaWYgKCFQYWdlV3JpdGViYWNrKHBhZ2UpKQ0KKyAg ICAgICBDbGVhclBhZ2VSZWNsYWltKHBhZ2UpOw0KKyAgICAgIHBhZ2VfY2FjaGVfcmVsZWFzZShw YWdlKTsNCisgICAgIH0NCisgICAgfQ0KKyAgICBicmVhazsNCisgICBjYXNlIDU6IC8vIFVubWFw cGVkUFRFIC0tIFN3YXBwZWRQVEUsIHJlY2xhaW0gUHJpdmF0ZVBhZ2UuDQorICAgIHN0YXRpc3Rp YyA9IDA7DQorICAgIGZvciAoaSA9IDA7IGkgPCBzZXJpZXMuc2VyaWVzX2xlbmd0aDsgaSsrKSB7 DQorICAgICBzdHJ1Y3QgcGFnZSogcGFnZSA9IHNlcmllcy5wYWdlc1tpXTsNCisgICAgIGxvY2tf cGFnZShwYWdlKTsNCisgICAgIHNwaW5fbG9jayhwdGwpOw0KKyAgICAgaWYgKHVubGlrZWx5KCFw dGVfc2FtZSgqc2VyaWVzLnB0ZXNbaV0sIHNlcmllcy5vcmlnX3B0ZXNbaV0pKSkgew0KKyAgICAg IHNwaW5fdW5sb2NrKHB0bCk7DQorICAgICAgdW5sb2NrX3BhZ2UocGFnZSk7DQorICAgICAgY29u dGludWU7DQorICAgICB9DQorICAgICBzdGF0aXN0aWMrKzsNCisgICAgIHN3cF9lbnRyeV90IGVu dHJ5ID0geyAudmFsID0gcGFnZV9wcml2YXRlKHBhZ2UpIH07DQorICAgICBzd2FwX2R1cGxpY2F0 ZShlbnRyeSk7DQorICAgICBwdGVfdCBwdGVfc3dwID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7 DQorICAgICBzZXRfcHRlX2F0KG1tLCBhZGRyICsgaSAqIFBBR0VfU0laRSwgc2VyaWVzLnB0ZXNb aV0sIHB0ZV9zd3ApOw0KKyAgICAgc3Bpbl91bmxvY2socHRsKTsNCisgICAgIGlmIChQYWdlU3dh cENhY2hlKHBhZ2UpICYmICFQYWdlV3JpdGViYWNrKHBhZ2UpKQ0KKyAgICAgIGRlbGV0ZV9mcm9t X3N3YXBfY2FjaGUocGFnZSk7DQorICAgICB1bmxvY2tfcGFnZShwYWdlKTsNCisNCisgICAgIGlm ICghcGFnZXZlY19hZGQoJmZyZWVkX3B2ZWMsIHBhZ2UpKQ0KKyAgICAgIF9fcGFnZXZlY19yZWxl YXNlX25vbmxydSgmZnJlZWRfcHZlYyk7DQorICAgICBzYy0+bnJfcmVjbGFpbWVkKys7DQorICAg IH0NCisgICAgYXRvbWljX2FkZChzdGF0aXN0aWMsICZwcHNfaW5mby5zd2FwcGVkX2NvdW50KTsN CisgICAgYXRvbWljX3N1YihzdGF0aXN0aWMsICZwcHNfaW5mby51bm1hcHBlZF9jb3VudCk7DQor ICAgIGF0b21pY19zdWIoc3RhdGlzdGljLCAmcHBzX2luZm8udG90YWwpOw0KKyAgICBicmVhazsN CisgICBjYXNlIDY6DQorICAgIC8vIE5VTEwgb3BlcmF0aW9uIQ0KKyAgICBicmVhazsNCisgIH0N CisgfSB3aGlsZSAoYWRkciA8IGVuZCk7DQorIGFkZF9tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcywg YW5vbl9yc3MpOw0KKyBpZiAocGFnZXZlY19jb3VudCgmZnJlZWRfcHZlYykpDQorICBfX3BhZ2V2 ZWNfcmVsZWFzZV9ub25scnUoJmZyZWVkX3B2ZWMpOw0KK30NCisNCitzdGF0aWMgdm9pZCBzaHJp bmtfcHZtYV9wbWRfcmFuZ2Uoc3RydWN0IHNjYW5fY29udHJvbCogc2MsIHN0cnVjdCBtbV9zdHJ1 Y3QqDQorICBtbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0KiB2bWEsIHB1ZF90KiBwdWQsIHVuc2ln bmVkIGxvbmcgYWRkciwNCisgIHVuc2lnbmVkIGxvbmcgZW5kKQ0KK3sNCisgdW5zaWduZWQgbG9u ZyBuZXh0Ow0KKyBwbWRfdCogcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOw0KKyBkbyB7DQor ICBuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7DQorICBpZiAocG1kX25vbmVfb3JfY2xl YXJfYmFkKHBtZCkpDQorICAgY29udGludWU7DQorICBzaHJpbmtfcHZtYV9zY2FuX3B0ZXMoc2Ms IG1tLCB2bWEsIHBtZCwgYWRkciwgbmV4dCk7DQorIH0gd2hpbGUgKHBtZCsrLCBhZGRyID0gbmV4 dCwgYWRkciAhPSBlbmQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBzaHJpbmtfcHZtYV9wdWRfcmFu Z2Uoc3RydWN0IHNjYW5fY29udHJvbCogc2MsIHN0cnVjdCBtbV9zdHJ1Y3QqDQorICBtbSwgc3Ry dWN0IHZtX2FyZWFfc3RydWN0KiB2bWEsIHBnZF90KiBwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwN CisgIHVuc2lnbmVkIGxvbmcgZW5kKQ0KK3sNCisgdW5zaWduZWQgbG9uZyBuZXh0Ow0KKyBwdWRf dCogcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOw0KKyBkbyB7DQorICBuZXh0ID0gcHVkX2Fk ZHJfZW5kKGFkZHIsIGVuZCk7DQorICBpZiAocHVkX25vbmVfb3JfY2xlYXJfYmFkKHB1ZCkpDQor ICAgY29udGludWU7DQorICBzaHJpbmtfcHZtYV9wbWRfcmFuZ2Uoc2MsIG1tLCB2bWEsIHB1ZCwg YWRkciwgbmV4dCk7DQorIH0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQp Ow0KK30NCisNCitzdGF0aWMgdm9pZCBzaHJpbmtfcHZtYV9wZ2RfcmFuZ2Uoc3RydWN0IHNjYW5f Y29udHJvbCogc2MsIHN0cnVjdCBtbV9zdHJ1Y3QqDQorICBtbSwgc3RydWN0IHZtX2FyZWFfc3Ry dWN0KiB2bWEpDQorew0KKyB1bnNpZ25lZCBsb25nIG5leHQ7DQorIHVuc2lnbmVkIGxvbmcgYWRk ciA9IHZtYS0+dm1fc3RhcnQ7DQorIHVuc2lnbmVkIGxvbmcgZW5kID0gdm1hLT52bV9lbmQ7DQor IHBnZF90KiBwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTsNCisgZG8gew0KKyAgbmV4dCA9IHBn ZF9hZGRyX2VuZChhZGRyLCBlbmQpOw0KKyAgaWYgKHBnZF9ub25lX29yX2NsZWFyX2JhZChwZ2Qp KQ0KKyAgIGNvbnRpbnVlOw0KKyAgc2hyaW5rX3B2bWFfcHVkX3JhbmdlKHNjLCBtbSwgdm1hLCBw Z2QsIGFkZHIsIG5leHQpOw0KKyB9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0g ZW5kKTsNCit9DQorDQorc3RhdGljIHZvaWQgc2hyaW5rX3ByaXZhdGVfdm1hKHN0cnVjdCBzY2Fu X2NvbnRyb2wqIHNjKQ0KK3sNCisgc3RydWN0IHZtX2FyZWFfc3RydWN0KiB2bWE7DQorIHN0cnVj dCBsaXN0X2hlYWQgKnBvczsNCisgc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgKm1tOw0KKw0KKyBw cmV2ID0gbW0gPSAmaW5pdF9tbTsNCisgcG9zID0gJmluaXRfbW0ubW1saXN0Ow0KKyBhdG9taWNf aW5jKCZwcmV2LT5tbV91c2Vycyk7DQorIHNwaW5fbG9jaygmbW1saXN0X2xvY2spOw0KKyB3aGls ZSAoKHBvcyA9IHBvcy0+bmV4dCkgIT0gJmluaXRfbW0ubW1saXN0KSB7DQorICBtbSA9IGxpc3Rf ZW50cnkocG9zLCBzdHJ1Y3QgbW1fc3RydWN0LCBtbWxpc3QpOw0KKyAgaWYgKCFhdG9taWNfYWRk X3VubGVzcygmbW0tPm1tX3VzZXJzLCAxLCAwKSkNCisgICBjb250aW51ZTsNCisgIHNwaW5fdW5s b2NrKCZtbWxpc3RfbG9jayk7DQorICBtbXB1dChwcmV2KTsNCisgIHByZXYgPSBtbTsNCisgIHN0 YXJ0X3RsYl90YXNrcyhtbSk7DQorICBpZiAoZG93bl9yZWFkX3RyeWxvY2soJm1tLT5tbWFwX3Nl bSkpIHsNCisgICBmb3IgKHZtYSA9IG1tLT5tbWFwOyB2bWEgIT0gTlVMTDsgdm1hID0gdm1hLT52 bV9uZXh0KSB7DQorICAgIGlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9QVVJFX1BSSVZBVEUpKQ0K KyAgICAgY29udGludWU7DQorICAgIGlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQ0KKyAg ICAgY29udGludWU7DQorICAgIHNocmlua19wdm1hX3BnZF9yYW5nZShzYywgbW0sIHZtYSk7DQor ICAgfQ0KKyAgIHVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7DQorICB9DQorICBlbmRfdGxiX3Rhc2tz KCk7DQorICBzcGluX2xvY2soJm1tbGlzdF9sb2NrKTsNCisgfQ0KKyBzcGluX3VubG9jaygmbW1s aXN0X2xvY2spOw0KKyBtbXB1dChwcmV2KTsNCit9DQorDQogLyoNCiAgKiBGb3Iga3N3YXBkLCBi YWxhbmNlX3BnZGF0KCkgd2lsbCB3b3JrIGFjcm9zcyBhbGwgdGhpcyBub2RlJ3Mgem9uZXMgdW50 aWwNCiAgKiB0aGV5IGFyZSBhbGwgYXQgcGFnZXNfaGlnaC4NCkBAIC0xNTU3LDYgKzE5ODIsMTAg QEANCiAgc2MubWF5X3N3YXAgPSAxOw0KICBzYy5ucl9tYXBwZWQgPSByZWFkX3BhZ2Vfc3RhdGUo bnJfbWFwcGVkKTsNCiANCisgd2FrZXVwX3NjID0gc2M7DQorIHdha2V1cF9zYy5wcHNfY21kID0g MTsNCisgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZrcHBzZF93YWl0KTsNCisNCiAgaW5jX3BhZ2Vf c3RhdGUocGFnZW91dHJ1bik7DQogDQogIGZvciAoaSA9IDA7IGkgPCBwZ2RhdC0+bnJfem9uZXM7 IGkrKykgew0KQEAgLTE2OTMsNiArMjEyMiwzMyBAQA0KICByZXR1cm4gdG90YWxfcmVjbGFpbWVk Ow0KIH0NCiANCitzdGF0aWMgaW50IGtwcHNkKHZvaWQqIHApDQorew0KKyBzdHJ1Y3QgdGFza19z dHJ1Y3QgKnRzayA9IGN1cnJlbnQ7DQorIGludCB0aW1lb3V0Ow0KKyBERUZJTkVfV0FJVCh3YWl0 KTsNCisgZGFlbW9uaXplKCJrcHBzZCIpOw0KKyB0c2stPmZsYWdzIHw9IFBGX01FTUFMTE9DIHwg UEZfU1dBUFdSSVRFOw0KKyBzdHJ1Y3Qgc2Nhbl9jb250cm9sIGRlZmF1bHRfc2M7DQorIGRlZmF1 bHRfc2MuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMOw0KKyBkZWZhdWx0X3NjLm1heV93cml0ZXBhZ2Ug PSAxOw0KKyBkZWZhdWx0X3NjLm1heV9zd2FwID0gMTsNCisgZGVmYXVsdF9zYy5wcHNfY21kID0g MDsNCisNCisgd2hpbGUgKDEpIHsNCisgIHRyeV90b19mcmVlemUoKTsNCisgIHByZXBhcmVfdG9f d2FpdCgma3Bwc2Rfd2FpdCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7DQorICB0aW1lb3V0 ID0gc2NoZWR1bGVfdGltZW91dCgyMDAwKTsNCisgIGZpbmlzaF93YWl0KCZrcHBzZF93YWl0LCAm d2FpdCk7DQorDQorICBpZiAodGltZW91dCkNCisgICBzaHJpbmtfcHJpdmF0ZV92bWEoJndha2V1 cF9zYyk7DQorICBlbHNlDQorICAgc2hyaW5rX3ByaXZhdGVfdm1hKCZkZWZhdWx0X3NjKTsNCisg fQ0KKyByZXR1cm4gMDsNCit9DQorDQogLyoNCiAgKiBUaGUgYmFja2dyb3VuZCBwYWdlb3V0IGRh ZW1vbiwgc3RhcnRlZCBhcyBhIGtlcm5lbCB0aHJlYWQNCiAgKiBmcm9tIHRoZSBpbml0IHByb2Nl c3MuIA0KQEAgLTE4MzcsNiArMjI5MywxNSBAQA0KIH0NCiAjZW5kaWYgLyogQ09ORklHX0hPVFBM VUdfQ1BVICovDQogDQorc3RhdGljIGludCBfX2luaXQga3Bwc2RfaW5pdCh2b2lkKQ0KK3sNCisg aW5pdF93YWl0cXVldWVfaGVhZCgma3Bwc2Rfd2FpdCk7DQorIGtlcm5lbF90aHJlYWQoa3Bwc2Qs IE5VTEwsIENMT05FX0tFUk5FTCk7DQorIHJldHVybiAwOw0KK30NCisNCittb2R1bGVfaW5pdChr cHBzZF9pbml0KQ0KKw0KIHN0YXRpYyBpbnQgX19pbml0IGtzd2FwZF9pbml0KHZvaWQpDQogew0K ICBwZ19kYXRhX3QgKnBnZGF0Ow0K ------=_NextPart_000_0007_01C73161.BECC3070 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIIzDCCAmQw ggHNoAMCAQICEGMzNDkxOTNlZTE0YzY4NmQwDQYJKoZIhvcNAQEEBQAwYTEdMBsGA1UEChMUaVRy dXNjaGluYSBDby4sIEx0ZC4xHjAcBgNVBAsTFUNoaW5lc2UgVHJ1c3QgTmV0d29yazEgMB4GA1UE AxMXaVRydXNjaGluYSBDTiBSb290IENBLTEwHhcNMDExMDAxMDAwMDAwWhcNMTEwOTMwMjM1OTU5 WjBhMR0wGwYDVQQKExRpVHJ1c2NoaW5hIENvLiwgTHRkLjEeMBwGA1UECxMVQ2hpbmVzZSBUcnVz dCBOZXR3b3JrMSAwHgYDVQQDExdpVHJ1c2NoaW5hIENOIFJvb3QgQ0EtMTCBnzANBgkqhkiG9w0B AQEFAAOBjQAwgYkCgYEAzf+TP/emoMVdkXzmul2+Z8jCwDwScQiCyYQJkFEabxVvulo+uuqBpsPZ FZxeA4Jsd9ojsNc4VR6FKgaNXLcQc4V6oReeeba6Y8nPZsSFBtVb7PsSI6fZPK3WMrDHR/6dW/+p KjiL7oa4m5PnaNNgbCfarVGsL7+wRmgLKF3snDUCAwEAAaMdMBswDAYDVR0TBAUwAwEB/zALBgNV HQ8EBAMCAQYwDQYJKoZIhvcNAQEEBQADgYEAMNc5IAsdOoyEhAnwVHwUtPhRio54ckSUs/TsXKRW AeSF3VwG6Lc/9wgG7iS7sUNXS7UbeaTv5yG7JTJT8gU8R9yo4IqSV4lCmwCigclWtseWe12NgTZt v0z7wJYFCvZKFFl95wxA+XsICKgwCkxlHKflX+Om3QW8QvcNQ6cbYJ0wggMBMIICaqADAgECAhUA r4O5Y87E+kdjdEJZTwXPYF5QpMwwDQYJKoZIhvcNAQEFBQAwYTEdMBsGA1UEChMUaVRydXNjaGlu YSBDby4sIEx0ZC4xHjAcBgNVBAsTFUNoaW5lc2UgVHJ1c3QgTmV0d29yazEgMB4GA1UEAxMXaVRy dXNjaGluYSBDTiBSb290IENBLTEwHhcNMDUwMjAxMDAwMDAwWhcNMTEwMTMxMjM1OTU5WjCBvTEd MBsGA1UEChMUaVRydXNjaGluYSBDby4sIEx0ZC4xHjAcBgNVBAsTFUNoaW5lc2UgVHJ1c3QgTmV0 d29yazFAMD4GA1UECxM3VGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3Lml0cnVzLmNvbS5jbi9j dG5ycGEgKGMpMjAwNDE6MDgGA1UEAxMxaVRydXNjaGluYSBDTiBDb25zdW1lciBJbmRpdmlkdWFs IFN1YnNjcmliZXIgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtbWmP6Ab+Xgr6XkI xNQYjVevs+kwf5V8HxEd9/6RYR4CwstMRtF1yY//TWxw/8zog6kU1R+A9cFO4ycd96+nty/3Tg06 xFN+tGpTMbynGrBPQqLs2wyZns2fiebQojtaoRF+Rq9LXNR4BqPpJceqMkvxtikEMwNSwPI9ECyq P5MCAwEAAaNYMFYwDwYDVR0TBAgwBgEB/wIBADARBglghkgBhvhCAQEEBAMCAQYwCwYDVR0PBAQD AgEGMCMGA1UdEQQcMBqkGDAWMRQwEgYDVQQDEwtPbmxpbmVDQS0yNDANBgkqhkiG9w0BAQUFAAOB gQDA6x3nzASl5crpQYyXnnp7vxF2qVy0/+/1weO2e2oyOW9hC1iBcyUfLtHRmvAi4fmmV+CzFk4M bCrLANzSoOiLIic2keMUTtrMNnO/5EBUYIFae4Bu9JCWrodEvN0zW+u5s7vYXYr/70JEE+WYEWcK OEy2n/3wPP/dwBJawurLsDCCA1swggLEoAMCAQICFHDaaPwFPrAMJ1x2lIzNnkUQLwYAMA0GCSqG SIb3DQEBBQUAMIG9MR0wGwYDVQQKExRpVHJ1c2NoaW5hIENvLiwgTHRkLjEeMBwGA1UECxMVQ2hp bmVzZSBUcnVzdCBOZXR3b3JrMUAwPgYDVQQLEzdUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cu aXRydXMuY29tLmNuL2N0bnJwYSAoYykyMDA0MTowOAYDVQQDEzFpVHJ1c2NoaW5hIENOIENvbnN1 bWVyIEluZGl2aWR1YWwgU3Vic2NyaWJlciBDQS0xMB4XDTA3MDEwNTAwMDAwMFoXDTA3MDMwNTIz NTk1OVowgYYxHTAbBgNVBAoMFGlUcnVzY2hpbmEgQ28uLCBMdGQuMSwwKgYDVQQLDCNDb25zdW1l ciBTZXJ2aWNlcyBDZW50ZXIgRnJlZSBFbWFpbDESMBAGA1UEAwwJ5byg5LqR5bOwMSMwIQYJKoZI hvcNAQkBFhR6eWYuemVyb29zQGdtYWlsLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA sw+16yed5qTtMq96BQKzgwD9K12QKTc+Zc/PazOMHk/bq9Do6slnc7kqZ8wuBiE8CgKrl15/Sm9Z Vx4hyvocgXSyp5QCkIbzqnXv0JewSYcr44tqqNee3tBvUR3qjrVIvIuGWt63dAA20yLe0dzdQnU3 xdjoEqsIEDwN11isgM0CAwEAAaOBjDCBiTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIFoDBvBgNVHR8E aDBmMGSgYqBghl5odHRwOi8vaWNhLXB1YmxpYy5pdHJ1cy5jb20uY24vY2dpLWJpbi9pdHJ1c2Ny bC5wbD9DQT1BRjgzQjk2M0NFQzRGQTQ3NjM3NDQyNTk0RjA1Q0Y2MDVFNTBBNENDMA0GCSqGSIb3 DQEBBQUAA4GBAI5SiC0hQME11DKDoVJVWBcHv2fAlAhFyeWOgrcEZoKXMfBSNpJ5d+n7qvLHi42h gu1Jo1C+Mnmd6MRyXQi10vrLdnSRwso2wlvGVt0ErKC0AEOvouOmjIGdzfCoO5f+PwNGFnLT9Nv3 vnK3kOvvl+9GL/pBMLhGJdGuNguaYmmTMYICOjCCAjYCAQEwgdYwgb0xHTAbBgNVBAoTFGlUcnVz Y2hpbmEgQ28uLCBMdGQuMR4wHAYDVQQLExVDaGluZXNlIFRydXN0IE5ldHdvcmsxQDA+BgNVBAsT N1Rlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy5pdHJ1cy5jb20uY24vY3RucnBhIChjKTIwMDQx OjA4BgNVBAMTMWlUcnVzY2hpbmEgQ04gQ29uc3VtZXIgSW5kaXZpZHVhbCBTdWJzY3JpYmVyIENB LTECFHDaaPwFPrAMJ1x2lIzNnkUQLwYAMAkGBSsOAwIaBQCggbowGAYJKoZIhvcNAQkDMQsGCSqG SIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDcwMTA1MjMxMDI4WjAjBgkqhkiG9w0BCQQxFgQUu6Pd 1+Ud4Qt+MaT+ApQKMAw80AowWwYJKoZIhvcNAQkPMU4wTDAKBggqhkiG9w0DBzAOBggqhkiG9w0D AgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgwBwYFKw4DAh0wDQYJ KoZIhvcNAQEBBQAEgYCSXR31ijMgRKmKzpEUMz5cg1kCBIXRH9GX9njqY5hPwTB78artjqRcENOs JhZAmjUxPft1CAxWC0Y7Ly3iqC9aZQkdxD5LJWTest0E97aN2PStlL+MftGlJGvZODX9mWt2IAHT /65Ii425vZbj3Fa51V6bTT+jS1WmMZUeyhJWdAAAAAAAAA== ------=_NextPart_000_0007_01C73161.BECC3070--