From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AA70EC433EF for ; Thu, 14 Apr 2022 11:51:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=dqCfNWzbS+rXLpSmcmgnUE/58GW0Icf5ASTRcf86q6s=; b=FloGXnBA6vIqz/ ADcZ7v/Mfcb3I4J7CXpSMmgB7YthOzbzEpSftFKbMwgOhn4HWuNCKZeL+RqjnShjr5k7kwUCX5alt rBp8vQai9Uy7iIUTxk149lQRgdiwXYrNFY2lm2ZCtAZ0DAxekyUmHTi3WmENMMWZAihNIMIn90bYM VyVJzcj5zmTdfA+Ax3D6OCAg3JQuQbu4PHrCc6Z1osSM67PFebm8fvpl07XBH5R1BR3GgX4pr1Iew 097fu2MjnjAAddTEKZgnhrZ+IwBji5HKlx7kZlMqdugrNGqG5OpllxU2f5js1ObbSy5Q/GMxL/hql tzJylog6w6NtucFwX6Rg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nexzL-005KL8-Su; Thu, 14 Apr 2022 11:50:15 +0000 Received: from szxga02-in.huawei.com ([45.249.212.188]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nexzE-005JwL-ES for linux-arm-kernel@lists.infradead.org; Thu, 14 Apr 2022 11:50:13 +0000 Received: from dggpemm500023.china.huawei.com (unknown [172.30.72.54]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4KfHjB4q3QzgYcw; Thu, 14 Apr 2022 19:46:06 +0800 (CST) Received: from dggpemm500002.china.huawei.com (7.185.36.229) by dggpemm500023.china.huawei.com (7.185.36.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Thu, 14 Apr 2022 19:47:57 +0800 Received: from [10.174.178.178] (10.174.178.178) by dggpemm500002.china.huawei.com (7.185.36.229) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Thu, 14 Apr 2022 19:47:55 +0800 Message-ID: <71af92d2-0777-c318-67fb-8f7d52c800bb@huawei.com> Date: Thu, 14 Apr 2022 19:47:54 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.0.3 Subject: Re: [PATCH v10 06/14] mm: multi-gen LRU: minimal implementation To: Yu Zhao , Stephen Rothwell , CC: Andi Kleen , Andrew Morton , Aneesh Kumar , "Barry Song" <21cnbao@gmail.com>, Catalin Marinas , "Dave Hansen" , Hillf Danton , "Jens Axboe" , Jesse Barnes , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , "Mel Gorman" , Michael Larabel , Michal Hocko , Mike Rapoport , "Rik van Riel" , Vlastimil Babka , Will Deacon , Ying Huang , , , , , , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , =?UTF-8?Q?Holger_Hoffst=c3=a4tte?= , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain References: <20220407031525.2368067-1-yuzhao@google.com> <20220407031525.2368067-7-yuzhao@google.com> From: Chen Wandun In-Reply-To: <20220407031525.2368067-7-yuzhao@google.com> X-Originating-IP: [10.174.178.178] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To dggpemm500002.china.huawei.com (7.185.36.229) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220414_045009_052837_B72BC8CE X-CRM114-Status: GOOD ( 35.57 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAyMDIyLzQvNyAxMToxNSwgWXUgWmhhbyB3cm90ZToKPiBUbyBhdm9pZCBjb25mdXNpb24s IHRoZSB0ZXJtcyAicHJvbW90aW9uIiBhbmQgImRlbW90aW9uIiB3aWxsIGJlCj4gYXBwbGllZCB0 byB0aGUgbXVsdGktZ2VuIExSVSwgYXMgYSBuZXcgY29udmVudGlvbjsgdGhlIHRlcm1zCj4gImFj dGl2YXRpb24iIGFuZCAiZGVhY3RpdmF0aW9uIiB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGFjdGl2 ZS9pbmFjdGl2ZQo+IExSVSwgYXMgdXN1YWwuCj4KPiBUaGUgYWdpbmcgcHJvZHVjZXMgeW91bmcg Z2VuZXJhdGlvbnMuIEdpdmVuIGFuIGxydXZlYywgaXQgaW5jcmVtZW50cwo+IG1heF9zZXEgd2hl biBtYXhfc2VxLW1pbl9zZXErMSBhcHByb2FjaGVzIE1JTl9OUl9HRU5TLiBUaGUgYWdpbmcKPiBw cm9tb3RlcyBob3QgcGFnZXMgdG8gdGhlIHlvdW5nZXN0IGdlbmVyYXRpb24gd2hlbiBpdCBmaW5k cyB0aGVtCj4gYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlczsgdGhlIGRlbW90aW9uIG9mIGNv bGQgcGFnZXMgaGFwcGVucwo+IGNvbnNlcXVlbnRseSB3aGVuIGl0IGluY3JlbWVudHMgbWF4X3Nl cS4gVGhlIGFnaW5nIGhhcyB0aGUgY29tcGxleGl0eQo+IE8obnJfaG90X3BhZ2VzKSwgc2luY2Ug aXQgaXMgb25seSBpbnRlcmVzdGVkIGluIGhvdCBwYWdlcy4gUHJvbW90aW9uCj4gaW4gdGhlIGFn aW5nIHBhdGggZG9lcyBub3QgcmVxdWlyZSBhbnkgTFJVIGxpc3Qgb3BlcmF0aW9ucywgb25seSB0 aGUKPiB1cGRhdGVzIG9mIHRoZSBnZW4gY291bnRlciBhbmQgbHJ1Z2VuLT5ucl9wYWdlc1tdOyBk ZW1vdGlvbiwgdW5sZXNzIGFzCj4gdGhlIHJlc3VsdCBvZiB0aGUgaW5jcmVtZW50IG9mIG1heF9z ZXEsIHJlcXVpcmVzIExSVSBsaXN0IG9wZXJhdGlvbnMsCj4gZS5nLiwgbHJ1X2RlYWN0aXZhdGVf Zm4oKS4KPgo+IFRoZSBldmljdGlvbiBjb25zdW1lcyBvbGQgZ2VuZXJhdGlvbnMuIEdpdmVuIGFu IGxydXZlYywgaXQgaW5jcmVtZW50cwo+IG1pbl9zZXEgd2hlbiB0aGUgbGlzdHMgaW5kZXhlZCBi eSBtaW5fc2VxJU1BWF9OUl9HRU5TIGJlY29tZSBlbXB0eS4gQQo+IGZlZWRiYWNrIGxvb3AgbW9k ZWxlZCBhZnRlciB0aGUgUElEIGNvbnRyb2xsZXIgbW9uaXRvcnMgcmVmYXVsdHMgb3Zlcgo+IGFu b24gYW5kIGZpbGUgdHlwZXMgYW5kIGRlY2lkZXMgd2hpY2ggdHlwZSB0byBldmljdCB3aGVuIGJv dGggdHlwZXMKPiBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIHNhbWUgZ2VuZXJhdGlvbi4KPgo+IEVh Y2ggZ2VuZXJhdGlvbiBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgdGllcnMuIFRpZXJzIHJlcHJl c2VudAo+IGRpZmZlcmVudCByYW5nZXMgb2YgbnVtYmVycyBvZiBhY2Nlc3NlcyB0aHJvdWdoIGZp bGUgZGVzY3JpcHRvcnMuIEEKPiBwYWdlIGFjY2Vzc2VkIE4gdGltZXMgdGhyb3VnaCBmaWxlIGRl c2NyaXB0b3JzIGlzIGluIHRpZXIKPiBvcmRlcl9iYXNlXzIoTikuIFRpZXJzIGRvIG5vdCBoYXZl IGRlZGljYXRlZCBscnVnZW4tPmxpc3RzW10sIG9ubHkKPiBiaXRzIGluIGZvbGlvLT5mbGFncy4g SW4gY29udHJhc3QgdG8gbW92aW5nIGFjcm9zcyBnZW5lcmF0aW9ucywgd2hpY2gKPiByZXF1aXJl cyB0aGUgTFJVIGxvY2ssIG1vdmluZyBhY3Jvc3MgdGllcnMgb25seSBpbnZvbHZlcyBvcGVyYXRp b25zIG9uCj4gZm9saW8tPmZsYWdzLiBUaGUgZmVlZGJhY2sgbG9vcCBhbHNvIG1vbml0b3JzIHJl ZmF1bHRzIG92ZXIgYWxsIHRpZXJzCj4gYW5kIGRlY2lkZXMgd2hlbiB0byBwcm90ZWN0IHBhZ2Vz IGluIHdoaWNoIHRpZXJzIChOPjEpLCB1c2luZyB0aGUKPiBmaXJzdCB0aWVyIChOPTAsMSkgYXMg YSBiYXNlbGluZS4gVGhlIGZpcnN0IHRpZXIgY29udGFpbnMgc2luZ2xlLXVzZQo+IHVubWFwcGVk IGNsZWFuIHBhZ2VzLCB3aGljaCBhcmUgbW9zdCBsaWtlbHkgdGhlIGJlc3QgY2hvaWNlcy4gVGhl Cj4gZXZpY3Rpb24gbW92ZXMgYSBwYWdlIHRvIHRoZSBuZXh0IGdlbmVyYXRpb24sIGkuZS4sIG1p bl9zZXErMSwgaWYgdGhlCj4gZmVlZGJhY2sgbG9vcCBkZWNpZGVzIHNvLiBUaGlzIGFwcHJvYWNo IGhhcyB0aGUgZm9sbG93aW5nIGFkdmFudGFnZXM6Cj4gMS4gSXQgcmVtb3ZlcyB0aGUgY29zdCBv ZiBhY3RpdmF0aW9uIGluIHRoZSBidWZmZXJlZCBhY2Nlc3MgcGF0aCBieQo+ICAgICBpbmZlcnJp bmcgd2hldGhlciBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUKPiAg ICAgZGVzY3JpcHRvcnMgYXJlIHN0YXRpc3RpY2FsbHkgaG90IGFuZCB0aHVzIHdvcnRoIHByb3Rl Y3RpbmcgaW4gdGhlCj4gICAgIGV2aWN0aW9uIHBhdGguCj4gMi4gSXQgdGFrZXMgcGFnZXMgYWNj ZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyBpbnRvIGFjY291bnQgYW5kIGF2b2lkcwo+ICAgICBv dmVycHJvdGVjdGluZyBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUK PiAgICAgZGVzY3JpcHRvcnMuIChQYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzIGFy ZSBpbiB0aGUgZmlyc3QKPiAgICAgdGllciwgc2luY2UgTj0wLikKPiAzLiBNb3JlIHRpZXJzIHBy b3ZpZGUgYmV0dGVyIHByb3RlY3Rpb24gZm9yIHBhZ2VzIGFjY2Vzc2VkIG1vcmUgdGhhbgo+ICAg ICB0d2ljZSB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsIHdoZW4gdW5kZXIgaGVhdnkgYnVmZmVy ZWQgSS9PCj4gICAgIHdvcmtsb2Fkcy4KPgo+IFNlcnZlciBiZW5jaG1hcmsgcmVzdWx0czoKPiAg ICBTaW5nbGUgd29ya2xvYWQ6Cj4gICAgICBmaW8gKGJ1ZmZlcmVkIEkvTyk6ICtbNDAsIDQyXSUK PiAgICAgICAgICAgICAgICAgIElPUFMgICAgICAgICBCVwo+ICAgICAgICA1LjE4LXJjMTogMjQ2 M2sgICAgICAgIDk2MjFNaUIvcwo+ICAgICAgICBwYXRjaDEtNjogMzQ4NGsgICAgICAgIDEzLjNH aUIvcwo+Cj4gICAgU2luZ2xlIHdvcmtsb2FkOgo+ICAgICAgbWVtY2FjaGVkIChhbm9uKTogK1s0 NCwgNDZdJQo+ICAgICAgICAgICAgICAgICAgT3BzL3NlYyAgICAgIEtCL3NlYwo+ICAgICAgICA1 LjE4LXJjMTogNzcxNDAzLjI3ICAgIDMwMDA0LjE3Cj4gICAgICAgIHBhdGNoMS02OiAxMTIwNjQz LjcwICAgNDM1ODguMDYKPgo+ICAgIENvbmZpZ3VyYXRpb25zOgo+ICAgICAgQ1BVOiB0d28gWGVv biA2MTU0Cj4gICAgICBNZW06IHRvdGFsIDI1NkcKPgo+ICAgICAgTm9kZSAxIHdhcyBvbmx5IHVz ZWQgYXMgYSByYW0gZGlzayB0byByZWR1Y2UgdGhlIHZhcmlhbmNlIGluIHRoZQo+ICAgICAgcmVz dWx0cy4KPgo+ICAgICAgcGF0Y2ggZHJpdmVycy9ibG9jay9icmQuYyA8PEVPRgo+ICAgICAgOTks MTAwYzk5LDEwMAo+ICAgICAgPCAJZ2ZwX2ZsYWdzID0gR0ZQX05PSU8gfCBfX0dGUF9aRVJPIHwg X19HRlBfSElHSE1FTTsKPiAgICAgIDwgCXBhZ2UgPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7Cj4g ICAgICAtLS0KPiAgICAgID4gCWdmcF9mbGFncyA9IEdGUF9OT0lPIHwgX19HRlBfWkVSTyB8IF9f R0ZQX0hJR0hNRU0gfCBfX0dGUF9USElTTk9ERTsKPiAgICAgID4gCXBhZ2UgPSBhbGxvY19wYWdl c19ub2RlKDEsIGdmcF9mbGFncywgMCk7Cj4gICAgICBFT0YKPgo+ICAgICAgY2F0ID4+L2V0Yy9z eXN0ZW1kL3N5c3RlbS5jb25mIDw8RU9GCj4gICAgICBDUFVBZmZpbml0eT1udW1hCj4gICAgICBO VU1BUG9saWN5PWJpbmQKPiAgICAgIE5VTUFNYXNrPTAKPiAgICAgIEVPRgo+Cj4gICAgICBjYXQg Pj4vZXRjL21lbWNhY2hlZC5jb25mIDw8RU9GCj4gICAgICAtbSAxODQzMjAKPiAgICAgIC1zIC92 YXIvcnVuL21lbWNhY2hlZC9tZW1jYWNoZWQuc29jawo+ICAgICAgLWEgMDc2Ngo+ICAgICAgLXQg MzYKPiAgICAgIC1CIGJpbmFyeQo+ICAgICAgRU9GCj4KPiAgICAgIGNhdCBmaW8uc2gKPiAgICAg IG1vZHByb2JlIGJyZCByZF9ucj0xIHJkX3NpemU9MTEzMjQ2MjA4Cj4gICAgICBzd2Fwb2ZmIC1h Cj4gICAgICBta2ZzLmV4dDQgL2Rldi9yYW0wCj4gICAgICBtb3VudCAtdCBleHQ0IC9kZXYvcmFt MCAvbW50Cj4KPiAgICAgIG1rZGlyIC9zeXMvZnMvY2dyb3VwL3VzZXIuc2xpY2UvdGVzdAo+ICAg ICAgZWNobyAzODY1NDcwNTY2NCA+L3N5cy9mcy9jZ3JvdXAvdXNlci5zbGljZS90ZXN0L21lbW9y eS5tYXgKPiAgICAgIGVjaG8gJCQgPi9zeXMvZnMvY2dyb3VwL3VzZXIuc2xpY2UvdGVzdC9jZ3Jv dXAucHJvY3MKPiAgICAgIGZpbyAtbmFtZT1tZ2xydSAtLW51bWpvYnM9NzIgLS1kaXJlY3Rvcnk9 L21udCAtLXNpemU9MTQwOG0gXAo+ICAgICAgICAtLWJ1ZmZlcmVkPTEgLS1pb2VuZ2luZT1pb191 cmluZyAtLWlvZGVwdGg9MTI4IFwKPiAgICAgICAgLS1pb2RlcHRoX2JhdGNoX3N1Ym1pdD0zMiAt LWlvZGVwdGhfYmF0Y2hfY29tcGxldGU9MzIgXAo+ICAgICAgICAtLXJ3PXJhbmRyZWFkIC0tcmFu ZG9tX2Rpc3RyaWJ1dGlvbj1yYW5kb20gLS1ub3JhbmRvbW1hcCBcCj4gICAgICAgIC0tdGltZV9i YXNlZCAtLXJhbXBfdGltZT0xMG0gLS1ydW50aW1lPTVtIC0tZ3JvdXBfcmVwb3J0aW5nCj4KPiAg ICAgIGNhdCBtZW1jYWNoZWQuc2gKPiAgICAgIG1vZHByb2JlIGJyZCByZF9ucj0xIHJkX3NpemU9 MTEzMjQ2MjA4Cj4gICAgICBzd2Fwb2ZmIC1hCj4gICAgICBta3N3YXAgL2Rldi9yYW0wCj4gICAg ICBzd2Fwb24gL2Rldi9yYW0wCj4KPiAgICAgIG1lbXRpZXJfYmVuY2htYXJrIC1TIC92YXIvcnVu L21lbWNhY2hlZC9tZW1jYWNoZWQuc29jayBcCj4gICAgICAgIC1QIG1lbWNhY2hlX2JpbmFyeSAt biBhbGxrZXlzIC0ta2V5LW1pbmltdW09MSBcCj4gICAgICAgIC0ta2V5LW1heGltdW09NjUwMDAw MDAgLS1rZXktcGF0dGVybj1QOlAgLWMgMSAtdCAzNiBcCj4gICAgICAgIC0tcmF0aW8gMTowIC0t cGlwZWxpbmUgOCAtZCAyMDAwCj4KPiAgICAgIG1lbXRpZXJfYmVuY2htYXJrIC1TIC92YXIvcnVu L21lbWNhY2hlZC9tZW1jYWNoZWQuc29jayBcCj4gICAgICAgIC1QIG1lbWNhY2hlX2JpbmFyeSAt biBhbGxrZXlzIC0ta2V5LW1pbmltdW09MSBcCj4gICAgICAgIC0ta2V5LW1heGltdW09NjUwMDAw MDAgLS1rZXktcGF0dGVybj1SOlIgLWMgMSAtdCAzNiBcCj4gICAgICAgIC0tcmF0aW8gMDoxIC0t cGlwZWxpbmUgOCAtLXJhbmRvbWl6ZSAtLWRpc3RpbmN0LWNsaWVudC1zZWVkCj4KPiBDbGllbnQg YmVuY2htYXJrIHJlc3VsdHM6Cj4gICAga3N3YXBkIHByb2ZpbGVzOgo+ICAgICAgNS4xOC1yYzEK PiAgICAgICAgNDAuNTMlICBwYWdlX3ZtYV9tYXBwZWRfd2Fsawo+ICAgICAgICAyMC4zNyUgIGx6 bzF4XzFfZG9fY29tcHJlc3MgKHJlYWwgd29yaykKPiAgICAgICAgIDYuOTklICBkb19yYXdfc3Bp bl9sb2NrCj4gICAgICAgICAzLjkzJSAgX3Jhd19zcGluX3VubG9ja19pcnEKPiAgICAgICAgIDIu MDglICB2bWFfaW50ZXJ2YWxfdHJlZV9zdWJ0cmVlX3NlYXJjaAo+ICAgICAgICAgMi4wNiUgIHZt YV9pbnRlcnZhbF90cmVlX2l0ZXJfbmV4dAo+ICAgICAgICAgMS45NSUgIGZvbGlvX3JlZmVyZW5j ZWRfb25lCj4gICAgICAgICAxLjkzJSAgYW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0 Cj4gICAgICAgICAxLjUxJSAgcHRlcF9jbGVhcl9mbHVzaAo+ICAgICAgICAgMS4zNSUgIF9fYW5v bl92bWFfaW50ZXJ2YWxfdHJlZV9zdWJ0cmVlX3NlYXJjaAo+Cj4gICAgICBwYXRjaDEtNgo+ICAg ICAgICAzNS45OSUgIGx6bzF4XzFfZG9fY29tcHJlc3MgKHJlYWwgd29yaykKPiAgICAgICAgMTku NDAlICBwYWdlX3ZtYV9tYXBwZWRfd2Fsawo+ICAgICAgICAgNi4zMSUgIF9yYXdfc3Bpbl91bmxv Y2tfaXJxCj4gICAgICAgICAzLjk1JSAgZG9fcmF3X3NwaW5fbG9jawo+ICAgICAgICAgMi4zOSUg IGFub25fdm1hX2ludGVydmFsX3RyZWVfaXRlcl9maXJzdAo+ICAgICAgICAgMi4yNSUgIHB0ZXBf Y2xlYXJfZmx1c2gKPiAgICAgICAgIDEuOTIlICBfX2Fub25fdm1hX2ludGVydmFsX3RyZWVfc3Vi dHJlZV9zZWFyY2gKPiAgICAgICAgIDEuNzAlICBmb2xpb19yZWZlcmVuY2VkX29uZQo+ICAgICAg ICAgMS42OCUgIF9fenJhbV9idmVjX3dyaXRlCj4gICAgICAgICAxLjQzJSAgYW5vbl92bWFfaW50 ZXJ2YWxfdHJlZV9pdGVyX25leHQKPgo+ICAgIENvbmZpZ3VyYXRpb25zOgo+ICAgICAgQ1BVOiBz aW5nbGUgU25hcGRyYWdvbiA3Ywo+ICAgICAgTWVtOiB0b3RhbCA0Rwo+Cj4gICAgICBDaHJvbWUg T1MgTWVtb3J5UHJlc3N1cmUgWzFdCj4KPiBbMV0gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3Vy Y2UuY29tL2Nocm9taXVtb3MvcGxhdGZvcm0vdGFzdC10ZXN0cy8KPgo+IFNpZ25lZC1vZmYtYnk6 IFl1IFpoYW8gPHl1emhhb0Bnb29nbGUuY29tPgo+IEFja2VkLWJ5OiBCcmlhbiBHZWZmb24gPGJn ZWZmb25AZ29vZ2xlLmNvbT4KPiBBY2tlZC1ieTogSmFuIEFsZXhhbmRlciBTdGVmZmVucyAoaGVm dGlnKSA8aGVmdGlnQGFyY2hsaW51eC5vcmc+Cj4gQWNrZWQtYnk6IE9sZWtzYW5kciBOYXRhbGVu a28gPG9sZWtzYW5kckBuYXRhbGVua28ubmFtZT4KPiBBY2tlZC1ieTogU3RldmVuIEJhcnJldHQg PHN0ZXZlbkBsaXF1b3JpeC5uZXQ+Cj4gQWNrZWQtYnk6IFN1bGVpbWFuIFNvdWhsYWwgPHN1bGVp bWFuQGdvb2dsZS5jb20+Cj4gVGVzdGVkLWJ5OiBEYW5pZWwgQnlybmUgPGRqYnlybmVAbXR1LmVk dT4KPiBUZXN0ZWQtYnk6IERvbmFsZCBDYXJyIDxkQGNoYW9zLXJlaW5zLmNvbT4KPiBUZXN0ZWQt Ynk6IEhvbGdlciBIb2Zmc3TDpHR0ZSA8aG9sZ2VyQGFwcGxpZWQtYXN5bmNocm9ueS5jb20+Cj4g VGVzdGVkLWJ5OiBLb25zdGFudGluIEtoYXJsYW1vdiA8SGktQW5nZWxAeWFuZGV4LnJ1Pgo+IFRl c3RlZC1ieTogU2h1YW5nIFpoYWkgPHN6aGFpMkBjcy5yb2NoZXN0ZXIuZWR1Pgo+IFRlc3RlZC1i eTogU29maWEgVHJpbmggPHNvZmlhLnRyaW5oQGVkaS53b3Jrcz4KPiBUZXN0ZWQtYnk6IFZhaWJo YXYgSmFpbiA8dmFpYmhhdkBsaW51eC5pYm0uY29tPgo+IC0tLQo+ICAgaW5jbHVkZS9saW51eC9t bV9pbmxpbmUuaCB8ICAyNCArKwo+ICAgaW5jbHVkZS9saW51eC9tbXpvbmUuaCAgICB8ICA0MSAr Kwo+ICAga2VybmVsL2JvdW5kcy5jICAgICAgICAgICB8ICAgMiArLQo+ICAgbW0vS2NvbmZpZyAg ICAgICAgICAgICAgICB8ICAxMSArCj4gICBtbS9zd2FwLmMgICAgICAgICAgICAgICAgIHwgIDQy ICsrCj4gICBtbS92bXNjYW4uYyAgICAgICAgICAgICAgIHwgODA1ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKystCj4gICBtbS93b3JraW5nc2V0LmMgICAgICAgICAgIHwgMTE5 ICsrKysrLQo+ICAgNyBmaWxlcyBjaGFuZ2VkLCAxMDQwIGluc2VydGlvbnMoKyksIDQgZGVsZXRp b25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1 ZGUvbGludXgvbW1faW5saW5lLmgKPiBpbmRleCA5YWJkNzJhOTU0NjIuLjhhOGY4N2I3MjU0MCAx MDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCj4gKysrIGIvaW5jbHVkZS9s aW51eC9tbV9pbmxpbmUuaAo+IEBAIC0xMTksNiArMTE5LDE5IEBAIHN0YXRpYyBpbmxpbmUgaW50 IGxydV9nZW5fZnJvbV9zZXEodW5zaWduZWQgbG9uZyBzZXEpCj4gICAJcmV0dXJuIHNlcSAlIE1B WF9OUl9HRU5TOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbmxpbmUgaW50IGxydV9oaXN0X2Zyb21f c2VxKHVuc2lnbmVkIGxvbmcgc2VxKQo+ICt7Cj4gKwlyZXR1cm4gc2VxICUgTlJfSElTVF9HRU5T Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJl ZnMpCj4gK3sKPiArCVZNX0JVR19PTihyZWZzID4gQklUKExSVV9SRUZTX1dJRFRIKSk7Cj4gKwo+ ICsJLyogc2VlIHRoZSBjb21tZW50IG9uIE1BWF9OUl9USUVSUyAqLwo+ICsJcmV0dXJuIG9yZGVy X2Jhc2VfMihyZWZzICsgMSk7Cj4gK30KPiArCj4gICBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dl bl9pc19hY3RpdmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKQo+ICAgewo+ICAgCXVu c2lnbmVkIGxvbmcgbWF4X3NlcSA9IGxydXZlYy0+bHJ1Z2VuLm1heF9zZXE7Cj4gQEAgLTE2NCw2 ICsxNzcsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXBkYXRlX3NpemUoc3RydWN0 IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGkKPiAgIAkJX191cGRhdGVfbHJ1X3Np emUobHJ1dmVjLCBscnUsIHpvbmUsIC1kZWx0YSk7Cj4gICAJCXJldHVybjsKPiAgIAl9Cj4gKwo+ ICsJLyogcHJvbW90aW9uICovCj4gKwlpZiAoIWxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgb2xk X2dlbikgJiYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBuZXdfZ2VuKSkgewo+ICsJCV9fdXBk YXRlX2xydV9zaXplKGxydXZlYywgbHJ1LCB6b25lLCAtZGVsdGEpOwo+ICsJCV9fdXBkYXRlX2xy dV9zaXplKGxydXZlYywgbHJ1ICsgTFJVX0FDVElWRSwgem9uZSwgZGVsdGEpOwo+ICsJfQo+ICsK PiArCS8qIGRlbW90aW9uIHJlcXVpcmVzIGlzb2xhdGlvbiwgZS5nLiwgbHJ1X2RlYWN0aXZhdGVf Zm4oKSAqLwo+ICsJVk1fQlVHX09OKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgb2xkX2dlbikg JiYgIWxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgbmV3X2dlbikpOwo+ICAgfQo+ICAgCj4gICBz dGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVj LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1pbmcpCj4gQEAgLTIyOSw2ICsyNTEs OCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAq bHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAo+ICAgCQlnZW4gPSAoKG5ld19mbGFncyAmIExS VV9HRU5fTUFTSykgPj4gTFJVX0dFTl9QR09GRikgLSAxOwo+ICAgCj4gICAJCW5ld19mbGFncyAm PSB+TFJVX0dFTl9NQVNLOwo+ICsJCWlmICghKG5ld19mbGFncyAmIEJJVChQR19yZWZlcmVuY2Vk KSkpCj4gKwkJCW5ld19mbGFncyAmPSB+KExSVV9SRUZTX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7 Cj4gICAJCS8qIGZvciBzaHJpbmtfcGFnZV9saXN0KCkgKi8KPiAgIAkJaWYgKHJlY2xhaW1pbmcp Cj4gICAJCQluZXdfZmxhZ3MgJj0gfihCSVQoUEdfcmVmZXJlbmNlZCkgfCBCSVQoUEdfcmVjbGFp bSkpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51 eC9tbXpvbmUuaAo+IGluZGV4IGJkZTA1NDI3ZTJiYi4uYzhhN2NlZWU3YTBhIDEwMDY0NAo+IC0t LSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5o Cj4gQEAgLTM0NywxMiArMzQ3LDM0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHsKPiAgICNkZWZpbmUg TUlOX05SX0dFTlMJCTJVCj4gICAjZGVmaW5lIE1BWF9OUl9HRU5TCQk0VQo+ICAgCj4gKy8qCj4g KyAqIEVhY2ggZ2VuZXJhdGlvbiBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgdGllcnMuIFRpZXJz IHJlcHJlc2VudCBkaWZmZXJlbnQKPiArICogcmFuZ2VzIG9mIG51bWJlcnMgb2YgYWNjZXNzZXMg dGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLiBBIHBhZ2UgYWNjZXNzZWQgTgo+ICsgKiB0aW1lcyB0 aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgaXMgaW4gdGllciBvcmRlcl9iYXNlXzIoTikuIEEgcGFn ZSBpbiB0aGUKPiArICogZmlyc3QgdGllciAoTj0wLDEpIGlzIG1hcmtlZCBieSBQR19yZWZlcmVu Y2VkIHVubGVzcyBpdCB3YXMgZmF1bHRlZCBpbgo+ICsgKiB0aG91Z2ggcGFnZSB0YWJsZXMgb3Ig cmVhZCBhaGVhZC4gQSBwYWdlIGluIGFueSBvdGhlciB0aWVyIChOPjEpIGlzIG1hcmtlZAo+ICsg KiBieSBQR19yZWZlcmVuY2VkIGFuZCBQR193b3JraW5nc2V0Lgo+ICsgKgo+ICsgKiBJbiBjb250 cmFzdCB0byBtb3ZpbmcgYWNyb3NzIGdlbmVyYXRpb25zIHdoaWNoIHJlcXVpcmVzIHRoZSBMUlUg bG9jaywgbW92aW5nCj4gKyAqIGFjcm9zcyB0aWVycyBvbmx5IHJlcXVpcmVzIG9wZXJhdGlvbnMg b24gZm9saW8tPmZsYWdzIGFuZCB0aGVyZWZvcmUgaGFzIGEKPiArICogbmVnbGlnaWJsZSBjb3N0 IGluIHRoZSBidWZmZXJlZCBhY2Nlc3MgcGF0aC4gSW4gdGhlIGV2aWN0aW9uIHBhdGgsCj4gKyAq IGNvbXBhcmlzb25zIG9mIHJlZmF1bHRlZC8oZXZpY3RlZCtwcm90ZWN0ZWQpIGZyb20gdGhlIGZp cnN0IHRpZXIgYW5kIHRoZQo+ICsgKiByZXN0IGluZmVyIHdoZXRoZXIgcGFnZXMgYWNjZXNzZWQg bXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzCj4gKyAqIGFyZSBzdGF0aXN0 aWNhbGx5IGhvdCBhbmQgdGh1cyB3b3J0aCBwcm90ZWN0aW5nLgo+ICsgKgo+ICsgKiBNQVhfTlJf VElFUlMgaXMgc2V0IHRvIDQgc28gdGhhdCB0aGUgbXVsdGktZ2VuIExSVSBjYW4gc3VwcG9ydCB0 d2ljZSBvZiB0aGUKPiArICogY2F0ZWdvcmllcyBvZiB0aGUgYWN0aXZlL2luYWN0aXZlIExSVSB3 aGVuIGtlZXBpbmcgdHJhY2sgb2YgYWNjZXNzZXMgdGhyb3VnaAo+ICsgKiBmaWxlIGRlc2NyaXB0 b3JzLiBJdCByZXF1aXJlcyBNQVhfTlJfVElFUlMtMiBhZGRpdGlvbmFsIGJpdHMgaW4gZm9saW8t PmZsYWdzLgo+ICsgKi8KPiArI2RlZmluZSBNQVhfTlJfVElFUlMJCTRVCj4gKwo+ICAgI2lmbmRl ZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKPiAgIAo+ICAgc3RydWN0IGxydXZlYzsKPiAgIAo+ICAg I2RlZmluZSBMUlVfR0VOX01BU0sJCSgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgPDwgTFJVX0dF Tl9QR09GRikKPiAgICNkZWZpbmUgTFJVX1JFRlNfTUFTSwkJKChCSVQoTFJVX1JFRlNfV0lEVEgp IC0gMSkgPDwgTFJVX1JFRlNfUEdPRkYpCj4gKyNkZWZpbmUgTFJVX1JFRlNfRkxBR1MJCShCSVQo UEdfcmVmZXJlbmNlZCkgfCBCSVQoUEdfd29ya2luZ3NldCkpCj4gICAKPiAgICNpZmRlZiBDT05G SUdfTFJVX0dFTgo+ICAgCj4gQEAgLTM2MSw2ICszODMsMTYgQEAgZW51bSB7Cj4gICAJTFJVX0dF Tl9GSUxFLAo+ICAgfTsKPiAgIAo+ICsjZGVmaW5lIE1JTl9MUlVfQkFUQ0gJCUJJVFNfUEVSX0xP TkcKPiArI2RlZmluZSBNQVhfTFJVX0JBVENICQkoTUlOX0xSVV9CQVRDSCAqIDEyOCkKPiArCj4g Ky8qIHdoZXRoZXIgdG8ga2VlcCBoaXN0b3JpY2FsIHN0YXRzIGZyb20gZXZpY3RlZCBnZW5lcmF0 aW9ucyAqLwo+ICsjaWZkZWYgQ09ORklHX0xSVV9HRU5fU1RBVFMKPiArI2RlZmluZSBOUl9ISVNU X0dFTlMJCU1BWF9OUl9HRU5TCj4gKyNlbHNlCj4gKyNkZWZpbmUgTlJfSElTVF9HRU5TCQkxVQo+ ICsjZW5kaWYKPiArCj4gICAvKgo+ICAgICogVGhlIHlvdW5nZXN0IGdlbmVyYXRpb24gbnVtYmVy IGlzIHN0b3JlZCBpbiBtYXhfc2VxIGZvciBib3RoIGFub24gYW5kIGZpbGUKPiAgICAqIHR5cGVz IGFzIHRoZXkgYXJlIGFnZWQgb24gYW4gZXF1YWwgZm9vdGluZy4gVGhlIG9sZGVzdCBnZW5lcmF0 aW9uIG51bWJlcnMgYXJlCj4gQEAgLTM4MCw2ICs0MTIsMTUgQEAgc3RydWN0IGxydV9nZW5fc3Ry dWN0IHsKPiAgIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RzW01BWF9OUl9HRU5TXVtBTk9OX0FORF9G SUxFXVtNQVhfTlJfWk9ORVNdOwo+ICAgCS8qIHRoZSBzaXplcyBvZiB0aGUgYWJvdmUgbGlzdHMg Ki8KPiAgIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzW01BWF9OUl9HRU5TXVtBTk9OX0FORF9GSUxF XVtNQVhfTlJfWk9ORVNdOwo+ICsJLyogdGhlIGV4cG9uZW50aWFsIG1vdmluZyBhdmVyYWdlIG9m IHJlZmF1bHRlZCAqLwo+ICsJdW5zaWduZWQgbG9uZyBhdmdfcmVmYXVsdGVkW0FOT05fQU5EX0ZJ TEVdW01BWF9OUl9USUVSU107Cj4gKwkvKiB0aGUgZXhwb25lbnRpYWwgbW92aW5nIGF2ZXJhZ2Ug b2YgZXZpY3RlZCtwcm90ZWN0ZWQgKi8KPiArCXVuc2lnbmVkIGxvbmcgYXZnX3RvdGFsW0FOT05f QU5EX0ZJTEVdW01BWF9OUl9USUVSU107Cj4gKwkvKiB0aGUgZmlyc3QgdGllciBkb2Vzbid0IG5l ZWQgcHJvdGVjdGlvbiwgaGVuY2UgdGhlIG1pbnVzIG9uZSAqLwo+ICsJdW5zaWduZWQgbG9uZyBw cm90ZWN0ZWRbTlJfSElTVF9HRU5TXVtBTk9OX0FORF9GSUxFXVtNQVhfTlJfVElFUlMgLSAxXTsK PiArCS8qIGNhbiBiZSBtb2RpZmllZCB3aXRob3V0IGhvbGRpbmcgdGhlIExSVSBsb2NrICovCj4g KwlhdG9taWNfbG9uZ190IGV2aWN0ZWRbTlJfSElTVF9HRU5TXVtBTk9OX0FORF9GSUxFXVtNQVhf TlJfVElFUlNdOwo+ICsJYXRvbWljX2xvbmdfdCByZWZhdWx0ZWRbTlJfSElTVF9HRU5TXVtBTk9O X0FORF9GSUxFXVtNQVhfTlJfVElFUlNdOwo+ICAgfTsKPiAgIAo+ICAgdm9pZCBscnVfZ2VuX2lu aXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7Cj4gZGlmZiAtLWdpdCBhL2tlcm5lbC9i b3VuZHMuYyBiL2tlcm5lbC9ib3VuZHMuYwo+IGluZGV4IGUwOGZiODlmODdmNC4uMTBkZDllNmIw M2U1IDEwMDY0NAo+IC0tLSBhL2tlcm5lbC9ib3VuZHMuYwo+ICsrKyBiL2tlcm5lbC9ib3VuZHMu Ywo+IEBAIC0yNCw3ICsyNCw3IEBAIGludCBtYWluKHZvaWQpCj4gICAJREVGSU5FKFNQSU5MT0NL X1NJWkUsIHNpemVvZihzcGlubG9ja190KSk7Cj4gICAjaWZkZWYgQ09ORklHX0xSVV9HRU4KPiAg IAlERUZJTkUoTFJVX0dFTl9XSURUSCwgb3JkZXJfYmFzZV8yKE1BWF9OUl9HRU5TICsgMSkpOwo+ IC0JREVGSU5FKExSVV9SRUZTX1dJRFRILCAwKTsKPiArCURFRklORShMUlVfUkVGU19XSURUSCwg TUFYX05SX1RJRVJTIC0gMik7Cj4gICAjZWxzZQo+ICAgCURFRklORShMUlVfR0VOX1dJRFRILCAw KTsKPiAgIAlERUZJTkUoTFJVX1JFRlNfV0lEVEgsIDApOwo+IGRpZmYgLS1naXQgYS9tbS9LY29u ZmlnIGIvbW0vS2NvbmZpZwo+IGluZGV4IDQ1OTVmYzY1NDE4MS4uYzQwNzc3ZDA5OGE4IDEwMDY0 NAo+IC0tLSBhL21tL0tjb25maWcKPiArKysgYi9tbS9LY29uZmlnCj4gQEAgLTkwOSw2ICs5MDks NyBAQCBjb25maWcgQU5PTl9WTUFfTkFNRQo+ICAgCSAgYXJlYSBmcm9tIGJlaW5nIG1lcmdlZCB3 aXRoIGFkamFjZW50IHZpcnR1YWwgbWVtb3J5IGFyZWFzIGR1ZSB0byB0aGUKPiAgIAkgIGRpZmZl cmVuY2UgaW4gdGhlaXIgbmFtZS4KPiAgIAo+ICsjIG11bHRpLWdlbiBMUlUgewo+ICAgY29uZmln IExSVV9HRU4KPiAgIAlib29sICJNdWx0aS1HZW4gTFJVIgo+ICAgCWRlcGVuZHMgb24gTU1VCj4g QEAgLTkxNyw2ICs5MTgsMTYgQEAgY29uZmlnIExSVV9HRU4KPiAgIAloZWxwCj4gICAJICBBIGhp Z2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5Lgo+ ICAgCj4gK2NvbmZpZyBMUlVfR0VOX1NUQVRTCj4gKwlib29sICJGdWxsIHN0YXRzIGZvciBkZWJ1 Z2dpbmciCj4gKwlkZXBlbmRzIG9uIExSVV9HRU4KPiArCWhlbHAKPiArCSAgRG8gbm90IGVuYWJs ZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRz Cj4gKwkgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuCj4g Kwo+ICsJICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBv dmVyaGVhZC4KPiArIyB9Cj4gKwo+ICAgc291cmNlICJtbS9kYW1vbi9LY29uZmlnIgo+ICAgCj4g ICBlbmRtZW51Cj4gZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuYwo+IGluZGV4IGE2 ODcwYmEwYmQ4My4uNmE1MjAzZjE4YjBhIDEwMDY0NAo+IC0tLSBhL21tL3N3YXAuYwo+ICsrKyBi L21tL3N3YXAuYwo+IEBAIC00MDUsNiArNDA1LDQzIEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hl X2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCj4gICAJbG9jYWxfdW5sb2NrKCZs cnVfcHZlY3MubG9jayk7Cj4gICB9Cj4gICAKPiArI2lmZGVmIENPTkZJR19MUlVfR0VOCj4gK3N0 YXRpYyB2b2lkIGZvbGlvX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCj4gK3sKPiArCXVu c2lnbmVkIGxvbmcgcmVmczsKPiArCXVuc2lnbmVkIGxvbmcgb2xkX2ZsYWdzLCBuZXdfZmxhZ3M7 Cj4gKwo+ICsJaWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKQo+ICsJCXJldHVybjsK PiArCj4gKwkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUFYX05SX1RJRVJTICovCj4gKwlkbyB7Cj4g KwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLT5mbGFncyk7Cj4gKwo+ ICsJCWlmICghKG5ld19mbGFncyAmIEJJVChQR19yZWZlcmVuY2VkKSkpIHsKPiArCQkJbmV3X2Zs YWdzIHw9IEJJVChQR19yZWZlcmVuY2VkKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiAr CQlpZiAoIShuZXdfZmxhZ3MgJiBCSVQoUEdfd29ya2luZ3NldCkpKSB7Cj4gKwkJCW5ld19mbGFn cyB8PSBCSVQoUEdfd29ya2luZ3NldCk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCj4gKwkJ cmVmcyA9IG5ld19mbGFncyAmIExSVV9SRUZTX01BU0s7Cj4gKwkJcmVmcyA9IG1pbihyZWZzICsg QklUKExSVV9SRUZTX1BHT0ZGKSwgTFJVX1JFRlNfTUFTSyk7Cj4gKwo+ICsJCW5ld19mbGFncyAm PSB+TFJVX1JFRlNfTUFTSzsKPiArCQluZXdfZmxhZ3MgfD0gcmVmczsKPiArCX0gd2hpbGUgKG5l d19mbGFncyAhPSBvbGRfZmxhZ3MgJiYKPiArCQkgY21weGNoZygmZm9saW8tPmZsYWdzLCBvbGRf ZmxhZ3MsIG5ld19mbGFncykgIT0gb2xkX2ZsYWdzKTsKPiArfQo+ICsjZWxzZQo+ICtzdGF0aWMg dm9pZCBmb2xpb19pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQo+ICt7Cj4gK30KPiArI2Vu ZGlmIC8qIENPTkZJR19MUlVfR0VOICovCj4gKwo+ICAgLyoKPiAgICAqIE1hcmsgYSBwYWdlIGFz IGhhdmluZyBzZWVuIGFjdGl2aXR5Lgo+ICAgICoKPiBAQCAtNDE3LDYgKzQ1NCwxMSBAQCBzdGF0 aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQo+ ICAgICovCj4gICB2b2lkIGZvbGlvX21hcmtfYWNjZXNzZWQoc3RydWN0IGZvbGlvICpmb2xpbykK PiAgIHsKPiArCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkgewo+ICsJCWZvbGlvX2luY19yZWZzKGZv bGlvKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICAgCWlmICghZm9saW9fdGVzdF9yZWZlcmVu Y2VkKGZvbGlvKSkgewo+ICAgCQlmb2xpb19zZXRfcmVmZXJlbmNlZChmb2xpbyk7Cj4gICAJfSBl bHNlIGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkgewo+IGRpZmYgLS1naXQgYS9t bS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCj4gaW5kZXggMzdkZDVkMWMzZDA3Li5iYjNkNzA1YzUy ODIgMTAwNjQ0Cj4gLS0tIGEvbW0vdm1zY2FuLmMKPiArKysgYi9tbS92bXNjYW4uYwo+IEBAIC0x Mjc1LDkgKzEyNzUsMTEgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRy ZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAo+ICAgCj4gICAJaWYgKGZv bGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkgewo+ICAgCQlzd3BfZW50cnlfdCBzd2FwID0gZm9s aW9fc3dhcF9lbnRyeShmb2xpbyk7Cj4gLQkJbWVtX2Nncm91cF9zd2Fwb3V0KGZvbGlvLCBzd2Fw KTsKPiArCj4gKwkJLyogZ2V0IGEgc2hhZG93IGVudHJ5IGJlZm9yZSBtZW1fY2dyb3VwX3N3YXBv dXQoKSBjbGVhcnMgZm9saW9fbWVtY2coKSAqLwo+ICAgCQlpZiAocmVjbGFpbWVkICYmICFtYXBw aW5nX2V4aXRpbmcobWFwcGluZykpCj4gICAJCQlzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9u KGZvbGlvLCB0YXJnZXRfbWVtY2cpOwo+ICsJCW1lbV9jZ3JvdXBfc3dhcG91dChmb2xpbywgc3dh cCk7Cj4gICAJCV9fZGVsZXRlX2Zyb21fc3dhcF9jYWNoZSgmZm9saW8tPnBhZ2UsIHN3YXAsIHNo YWRvdyk7Cj4gICAJCXhhX3VubG9ja19pcnEoJm1hcHBpbmctPmlfcGFnZXMpOwo+ICAgCQlwdXRf c3dhcF9wYWdlKCZmb2xpby0+cGFnZSwgc3dhcCk7Cj4gQEAgLTI2NDksNiArMjY1MSw5IEBAIHN0 YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb3VudChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nh bl9jb250cm9sICpzYykKPiAgIAl1bnNpZ25lZCBsb25nIGZpbGU7Cj4gICAJc3RydWN0IGxydXZl YyAqdGFyZ2V0X2xydXZlYzsKPiAgIAo+ICsJaWYgKGxydV9nZW5fZW5hYmxlZCgpKQo+ICsJCXJl dHVybjsKPiArCj4gICAJdGFyZ2V0X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLT50YXJn ZXRfbWVtX2Nncm91cCwgcGdkYXQpOwo+ICAgCj4gICAJLyoKPiBAQCAtMjk3NCwxMSArMjk3OSwz OCBAQCBzdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpw Z2RhdCwKPiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmQgaGVscGVycwo+ ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KPiAgIAo+ICsjZGVmaW5lIERFRklORV9NQVhfU0VR KGxydXZlYykJCQkJCQlcCj4gKwl1bnNpZ25lZCBsb25nIG1heF9zZXEgPSBSRUFEX09OQ0UoKGxy dXZlYyktPmxydWdlbi5tYXhfc2VxKQo+ICsKPiArI2RlZmluZSBERUZJTkVfTUlOX1NFUShscnV2 ZWMpCQkJCQkJXAo+ICsJdW5zaWduZWQgbG9uZyBtaW5fc2VxW0FOT05fQU5EX0ZJTEVdID0gewkJ CVwKPiArCQlSRUFEX09OQ0UoKGxydXZlYyktPmxydWdlbi5taW5fc2VxW0xSVV9HRU5fQU5PTl0p LAlcCj4gKwkJUkVBRF9PTkNFKChscnV2ZWMpLT5scnVnZW4ubWluX3NlcVtMUlVfR0VOX0ZJTEVd KSwJXAo+ICsJfQo+ICsKPiAgICNkZWZpbmUgZm9yX2VhY2hfZ2VuX3R5cGVfem9uZShnZW4sIHR5 cGUsIHpvbmUpCQkJCVwKPiAgIAlmb3IgKChnZW4pID0gMDsgKGdlbikgPCBNQVhfTlJfR0VOUzsg KGdlbikrKykJCQlcCj4gICAJCWZvciAoKHR5cGUpID0gMDsgKHR5cGUpIDwgQU5PTl9BTkRfRklM RTsgKHR5cGUpKyspCVwKPiAgIAkJCWZvciAoKHpvbmUpID0gMDsgKHpvbmUpIDwgTUFYX05SX1pP TkVTOyAoem9uZSkrKykKPiAgIAo+ICtzdGF0aWMgaW50IGZvbGlvX2xydV9nZW4oc3RydWN0IGZv bGlvICpmb2xpbykKPiArewo+ICsJdW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xp by0+ZmxhZ3MpOwo+ICsKPiArCXJldHVybiAoKGZsYWdzICYgTFJVX0dFTl9NQVNLKSA+PiBMUlVf R0VOX1BHT0ZGKSAtIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZm9saW9fbHJ1X3RpZXIoc3Ry dWN0IGZvbGlvICpmb2xpbykKPiArewo+ICsJaW50IHJlZnM7Cj4gKwl1bnNpZ25lZCBsb25nIGZs YWdzID0gUkVBRF9PTkNFKGZvbGlvLT5mbGFncyk7Cj4gKwo+ICsJcmVmcyA9IChmbGFncyAmIExS VV9SRUZTX0ZMQUdTKSA9PSBMUlVfUkVGU19GTEFHUyA/Cj4gKwkgICAgICAgKChmbGFncyAmIExS VV9SRUZTX01BU0spID4+IExSVV9SRUZTX1BHT0ZGKSArIDEgOiAwOwo+ICsKPiArCXJldHVybiBs cnVfdGllcl9mcm9tX3JlZnMocmVmcyk7Cj4gK30KPiArCj4gICBzdGF0aWMgc3RydWN0IGxydXZl YyBfX21heWJlX3VudXNlZCAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGlu dCBuaWQpCj4gICB7Cj4gICAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShu aWQpOwo+IEBAIC0yOTk5LDYgKzMwMzEsNzU0IEBAIHN0YXRpYyBzdHJ1Y3QgbHJ1dmVjIF9fbWF5 YmVfdW51c2VkICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pCj4g ICAJcmV0dXJuIHBnZGF0ID8gJnBnZGF0LT5fX2xydXZlYyA6IE5VTEw7Cj4gICB9Cj4gICAKPiAr c3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBz Y2FuX2NvbnRyb2wgKnNjKQo+ICt7Cj4gKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2 ZWNfbWVtY2cobHJ1dmVjKTsKPiArCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNf cGdkYXQobHJ1dmVjKTsKPiArCj4gKwlpZiAoIWNhbl9kZW1vdGUocGdkYXQtPm5vZGVfaWQsIHNj KSAmJgo+ICsJICAgIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIDwgTUlOX0xS VV9CQVRDSCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXR1cm4gbWVtX2Nncm91cF9zd2FwcGlu ZXNzKG1lbWNnKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBnZXRfbnJfZ2VucyhzdHJ1Y3QgbHJ1 dmVjICpscnV2ZWMsIGludCB0eXBlKQo+ICt7Cj4gKwlyZXR1cm4gbHJ1dmVjLT5scnVnZW4ubWF4 X3NlcSAtIGxydXZlYy0+bHJ1Z2VuLm1pbl9zZXFbdHlwZV0gKyAxOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVj KQo+ICt7Cj4gKwkvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9zdHJ1Y3QgKi8KPiArCXJl dHVybiBnZXRfbnJfZ2VucyhscnV2ZWMsIExSVV9HRU5fRklMRSkgPj0gTUlOX05SX0dFTlMgJiYK PiArCSAgICAgICBnZXRfbnJfZ2VucyhscnV2ZWMsIExSVV9HRU5fRklMRSkgPD0gZ2V0X25yX2dl bnMobHJ1dmVjLCBMUlVfR0VOX0FOT04pICYmCj4gKwkgICAgICAgZ2V0X25yX2dlbnMobHJ1dmVj LCBMUlVfR0VOX0FOT04pIDw9IE1BWF9OUl9HRU5TOwo+ICt9Cj4gKwo+ICsvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCj4gKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZWZhdWx0IGZlZWRiYWNr IGxvb3AKPiArICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiArCj4gKy8qCj4gKyAqIEEgZmVlZGJh Y2sgbG9vcCBiYXNlZCBvbiBQcm9wb3J0aW9uYWwtSW50ZWdyYWwtRGVyaXZhdGl2ZSAoUElEKSBj b250cm9sbGVyLgo+ICsgKgo+ICsgKiBUaGUgUCB0ZXJtIGlzIHJlZmF1bHRlZC8oZXZpY3RlZCtw cm90ZWN0ZWQpIGZyb20gYSB0aWVyIGluIHRoZSBnZW5lcmF0aW9uCj4gKyAqIGN1cnJlbnRseSBi ZWluZyBldmljdGVkOyB0aGUgSSB0ZXJtIGlzIHRoZSBleHBvbmVudGlhbCBtb3ZpbmcgYXZlcmFn ZSBvZiB0aGUKPiArICogUCB0ZXJtIG92ZXIgdGhlIGdlbmVyYXRpb25zIHByZXZpb3VzbHkgZXZp Y3RlZCwgdXNpbmcgdGhlIHNtb290aGluZyBmYWN0b3IKPiArICogMS8yOyB0aGUgRCB0ZXJtIGlz bid0IHN1cHBvcnRlZC4KPiArICoKPiArICogVGhlIHNldHBvaW50IChTUCkgaXMgYWx3YXlzIHRo ZSBmaXJzdCB0aWVyIG9mIG9uZSB0eXBlOyB0aGUgcHJvY2VzcyB2YXJpYWJsZQo+ICsgKiAoUFYp IGlzIGVpdGhlciBhbnkgdGllciBvZiB0aGUgb3RoZXIgdHlwZSBvciBhbnkgb3RoZXIgdGllciBv ZiB0aGUgc2FtZQo+ICsgKiB0eXBlLgo+ICsgKgo+ICsgKiBUaGUgZXJyb3IgaXMgdGhlIGRpZmZl cmVuY2UgYmV0d2VlbiB0aGUgU1AgYW5kIHRoZSBQVjsgdGhlIGNvcnJlY3Rpb24gaXMKPiArICog dHVybiBvZmYgcHJvdGVjdGlvbiB3aGVuIFNQPlBWIG9yIHR1cm4gb24gcHJvdGVjdGlvbiB3aGVu IFNQPFBWLgo+ICsgKgo+ICsgKiBGb3IgZnV0dXJlIG9wdGltaXphdGlvbnM6Cj4gKyAqIDEuIFRo ZSBEIHRlcm0gbWF5IGRpc2NvdW50IHRoZSBvdGhlciB0d28gdGVybXMgb3ZlciB0aW1lIHNvIHRo YXQgbG9uZy1saXZlZAo+ICsgKiAgICBnZW5lcmF0aW9ucyBjYW4gcmVzaXN0IHN0YWxlIGluZm9y bWF0aW9uLgo+ICsgKi8KPiArc3RydWN0IGN0cmxfcG9zIHsKPiArCXVuc2lnbmVkIGxvbmcgcmVm YXVsdGVkOwo+ICsJdW5zaWduZWQgbG9uZyB0b3RhbDsKPiArCWludCBnYWluOwo+ICt9Owo+ICsK PiArc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0 eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCj4gKwkJCSAgc3RydWN0IGN0cmxfcG9zICpwb3MpCj4g K3sKPiArCXN0cnVjdCBscnVfZ2VuX3N0cnVjdCAqbHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2VuOwo+ ICsJaW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tPm1pbl9zZXFbdHlwZV0pOwo+ ICsKPiArCXBvcy0+cmVmYXVsdGVkID0gbHJ1Z2VuLT5hdmdfcmVmYXVsdGVkW3R5cGVdW3RpZXJd ICsKPiArCQkJIGF0b21pY19sb25nX3JlYWQoJmxydWdlbi0+cmVmYXVsdGVkW2hpc3RdW3R5cGVd W3RpZXJdKTsKPiArCXBvcy0+dG90YWwgPSBscnVnZW4tPmF2Z190b3RhbFt0eXBlXVt0aWVyXSAr Cj4gKwkJICAgICBhdG9taWNfbG9uZ19yZWFkKCZscnVnZW4tPmV2aWN0ZWRbaGlzdF1bdHlwZV1b dGllcl0pOwo+ICsJaWYgKHRpZXIpCj4gKwkJcG9zLT50b3RhbCArPSBscnVnZW4tPnByb3RlY3Rl ZFtoaXN0XVt0eXBlXVt0aWVyIC0gMV07Cj4gKwlwb3MtPmdhaW4gPSBnYWluOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCByZXNldF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0 eXBlLCBib29sIGNhcnJ5b3ZlcikKPiArewo+ICsJaW50IGhpc3QsIHRpZXI7Cj4gKwlzdHJ1Y3Qg bHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKPiArCWJvb2wgY2xlYXIg PSBjYXJyeW92ZXIgPyBOUl9ISVNUX0dFTlMgPT0gMSA6IE5SX0hJU1RfR0VOUyA+IDE7Cj4gKwl1 bnNpZ25lZCBsb25nIHNlcSA9IGNhcnJ5b3ZlciA/IGxydWdlbi0+bWluX3NlcVt0eXBlXSA6IGxy dWdlbi0+bWF4X3NlcSArIDE7Cj4gKwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbHJ1dmVjLT5s cnVfbG9jayk7Cj4gKwo+ICsJaWYgKCFjYXJyeW92ZXIgJiYgIWNsZWFyKQo+ICsJCXJldHVybjsK PiArCj4gKwloaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEoc2VxKTsKPiArCj4gKwlmb3IgKHRpZXIg PSAwOyB0aWVyIDwgTUFYX05SX1RJRVJTOyB0aWVyKyspIHsKPiArCQlpZiAoY2FycnlvdmVyKSB7 Cj4gKwkJCXVuc2lnbmVkIGxvbmcgc3VtOwo+ICsKPiArCQkJc3VtID0gbHJ1Z2VuLT5hdmdfcmVm YXVsdGVkW3R5cGVdW3RpZXJdICsKPiArCQkJICAgICAgYXRvbWljX2xvbmdfcmVhZCgmbHJ1Z2Vu LT5yZWZhdWx0ZWRbaGlzdF1bdHlwZV1bdGllcl0pOwo+ICsJCQlXUklURV9PTkNFKGxydWdlbi0+ YXZnX3JlZmF1bHRlZFt0eXBlXVt0aWVyXSwgc3VtIC8gMik7Cj4gKwo+ICsJCQlzdW0gPSBscnVn ZW4tPmF2Z190b3RhbFt0eXBlXVt0aWVyXSArCj4gKwkJCSAgICAgIGF0b21pY19sb25nX3JlYWQo JmxydWdlbi0+ZXZpY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSk7Cj4gKwkJCWlmICh0aWVyKQo+ICsJ CQkJc3VtICs9IGxydWdlbi0+cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXIgLSAxXTsKPiArCQkJ V1JJVEVfT05DRShscnVnZW4tPmF2Z190b3RhbFt0eXBlXVt0aWVyXSwgc3VtIC8gMik7Cj4gKwkJ fQo+ICsKPiArCQlpZiAoY2xlYXIpIHsKPiArCQkJYXRvbWljX2xvbmdfc2V0KCZscnVnZW4tPnJl ZmF1bHRlZFtoaXN0XVt0eXBlXVt0aWVyXSwgMCk7Cj4gKwkJCWF0b21pY19sb25nX3NldCgmbHJ1 Z2VuLT5ldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdLCAwKTsKPiArCQkJaWYgKHRpZXIpCj4gKwkJ CQlXUklURV9PTkNFKGxydWdlbi0+cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXIgLSAxXSwgMCk7 Cj4gKwkJfQo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2Vycihz dHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQo+ICt7Cj4gKwkvKgo+ICsJ ICogUmV0dXJuIHRydWUgaWYgdGhlIFBWIGhhcyBhIGxpbWl0ZWQgbnVtYmVyIG9mIHJlZmF1bHRz IG9yIGEgbG93ZXIKPiArCSAqIHJlZmF1bHRlZC90b3RhbCB0aGFuIHRoZSBTUC4KPiArCSAqLwo+ ICsJcmV0dXJuIHB2LT5yZWZhdWx0ZWQgPCBNSU5fTFJVX0JBVENIIHx8Cj4gKwkgICAgICAgcHYt PnJlZmF1bHRlZCAqIChzcC0+dG90YWwgKyBNSU5fTFJVX0JBVENIKSAqIHNwLT5nYWluIDw9Cj4g KwkgICAgICAgKHNwLT5yZWZhdWx0ZWQgKyAxKSAqIHB2LT50b3RhbCAqIHB2LT5nYWluOwo+ICt9 Cj4gKwo+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gKyAqICAgICAgICAgICAgICAgICAgICAg ICAgICB0aGUgYWdpbmcKPiArICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiArCj4gK3N0YXRpYyBp bnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9s aW8sIGJvb2wgcmVjbGFpbWluZykKPiArewo+ICsJdW5zaWduZWQgbG9uZyBvbGRfZmxhZ3MsIG5l d19mbGFnczsKPiArCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwo+ICsJc3Ry dWN0IGxydV9nZW5fc3RydWN0ICpscnVnZW4gPSAmbHJ1dmVjLT5scnVnZW47Cj4gKwlpbnQgbmV3 X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLT5taW5fc2VxW3R5cGVdKTsK PiArCj4gKwlkbyB7Cj4gKwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlv LT5mbGFncyk7Cj4gKwkJVk1fQlVHX09OX0ZPTElPKCEobmV3X2ZsYWdzICYgTFJVX0dFTl9NQVNL KSwgZm9saW8pOwo+ICsKPiArCQluZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5T Owo+ICsKPiArCQluZXdfZmxhZ3MgJj0gfkxSVV9HRU5fTUFTSzsKPiArCQluZXdfZmxhZ3MgfD0g KG5ld19nZW4gKyAxVUwpIDw8IExSVV9HRU5fUEdPRkY7Cj4gKwkJbmV3X2ZsYWdzICY9IH4oTFJV X1JFRlNfTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTsKPiArCQkvKiBmb3IgZm9saW9fZW5kX3dyaXRl YmFjaygpICovCj4gKwkJaWYgKHJlY2xhaW1pbmcpCj4gKwkJCW5ld19mbGFncyB8PSBCSVQoUEdf cmVjbGFpbSk7Cj4gKwl9IHdoaWxlIChjbXB4Y2hnKCZmb2xpby0+ZmxhZ3MsIG9sZF9mbGFncywg bmV3X2ZsYWdzKSAhPSBvbGRfZmxhZ3MpOwo+ICsKPiArCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1 dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7Cj4gKwo+ICsJcmV0dXJuIG5ld19nZW47Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYykK PiArewo+ICsJaW50IHR5cGU7Cj4gKwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZs cnV2ZWMtPmxydWdlbjsKPiArCj4gKwlWTV9CVUdfT04oIXNlcV9pc192YWxpZChscnV2ZWMpKTsK PiArCj4gKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgQU5PTl9BTkRfRklMRTsgdHlwZSsrKSB7Cj4g KwkJaWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgIT0gTUFYX05SX0dFTlMpCj4gKwkJCWNv bnRpbnVlOwpJJ20gY29uZnVzZWQgYWJvdXQgcmVsYXRpb24gYmV0d2VlbiBhZ2luZyBhbmQgTFJV IGxpc3Qgb3BlcmF0aW9uLgoKSW4gZnVuY3Rpb24gaW5jX21heF9zZXEswqAgYm90aCBtaW5fc2Vx IGFuZCBtYXhfc2VxIHdpbGwgaW5jcmVhc2XvvIwKdGhlIGxydWdlbi0+bGlzdHNbXSBpbmRleGVk IGJ5IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSArIDEpIG1heQpiZSBub24tZW1wdHk/Cgpmb3Ig ZXhhbXBsZSwKYmVmb3JlIGluY19tYXhfc2VxOgptaW5fc2VxID09IDAsIGxydWdlbi0+bGlzdHNb MF1bdHlwZV1bem9uZV0KbWF4X3NlcSA9PTMsIGxydWdlbi0+bGlzdHNbM11bdHlwZV1bem9uZV0K CmFmdGVyIGluY19tYXhfc2VxOgptaW5fc2VxID09MSwgbHJ1Z2VuLT5saXN0c1sxXVt0eXBlXVt6 b25lXQptYXhfc2VxID09NCwgbHJ1Z2VuLT5saXN0c1swXVt0eXBlXVt6b25lXQoKSWYgbHJ1Z2Vu LT5saXN0c1swXVt0eXBlXVt6b25lXSBpcyBub3QgZW1wdHkgYmVmb3JlIGluY19tYXhfc2VxIGFu ZCBpdCBpcwp0aGUgbW9zdCBpbmFjdGl2ZSBsaXN077yMaG93ZXZlciBsdXJnZW4tPmxpc3RzWzBd W3R5cGVdW3pvbmVdIHdpbGwgYmVjb21lCnRoZSBtb3N0IGFjdGl2ZSBsaXN0IGFmdGVyIGluY19t YXhfc2VxLgoKU28swqAgaW4gdGhpcyBwbGFjZSwKCmlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5 cGUpICE9IE1BWF9OUl9HRU5TKQoJY29udGludWU7CgpzaG91bGQgY2hhbmdlIHRvCgppZiAoZ2V0 X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNQVhfTlJfR0VOUykKCWNvbnRpbnVlOwoKT3IgYW0g SSBtaXNzaW5nIHNvbWV0aGluZz/CoCBNYW55IHRoYW5rcy4KCgo+ICsKPiArCQlyZXNldF9jdHJs X3BvcyhscnV2ZWMsIHR5cGUsIHRydWUpOwo+ICsJCVdSSVRFX09OQ0UobHJ1Z2VuLT5taW5fc2Vx W3R5cGVdLCBscnVnZW4tPm1pbl9zZXFbdHlwZV0gKyAxKTsKPiArCX0KPiArfQo+ICsKPiArc3Rh dGljIGJvb2wgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBj YW5fc3dhcCkKPiArewo+ICsJaW50IGdlbiwgdHlwZSwgem9uZTsKPiArCWJvb2wgc3VjY2VzcyA9 IGZhbHNlOwo+ICsJc3RydWN0IGxydV9nZW5fc3RydWN0ICpscnVnZW4gPSAmbHJ1dmVjLT5scnVn ZW47Cj4gKwlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwo+ICsKPiArCVZNX0JVR19PTighc2VxX2lz X3ZhbGlkKGxydXZlYykpOwo+ICsKPiArCWZvciAodHlwZSA9ICFjYW5fc3dhcDsgdHlwZSA8IEFO T05fQU5EX0ZJTEU7IHR5cGUrKykgewo+ICsJCXdoaWxlIChtaW5fc2VxW3R5cGVdICsgTUlOX05S X0dFTlMgPD0gbHJ1Z2VuLT5tYXhfc2VxKSB7Cj4gKwkJCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEo bWluX3NlcVt0eXBlXSk7Cj4gKwo+ICsJCQlmb3IgKHpvbmUgPSAwOyB6b25lIDwgTUFYX05SX1pP TkVTOyB6b25lKyspIHsKPiArCQkJCWlmICghbGlzdF9lbXB0eSgmbHJ1Z2VuLT5saXN0c1tnZW5d W3R5cGVdW3pvbmVdKSkKPiArCQkJCQlnb3RvIG5leHQ7Cj4gKwkJCX0KPiArCj4gKwkJCW1pbl9z ZXFbdHlwZV0rKzsKPiArCQl9Cj4gK25leHQ6Cj4gKwkJOwo+ICsJfQo+ICsKPiArCS8qIHNlZSB0 aGUgY29tbWVudCBvbiBscnVfZ2VuX3N0cnVjdCAqLwo+ICsJaWYgKGNhbl9zd2FwKSB7Cj4gKwkJ bWluX3NlcVtMUlVfR0VOX0FOT05dID0gbWluKG1pbl9zZXFbTFJVX0dFTl9BTk9OXSwgbWluX3Nl cVtMUlVfR0VOX0ZJTEVdKTsKPiArCQltaW5fc2VxW0xSVV9HRU5fRklMRV0gPSBtYXgobWluX3Nl cVtMUlVfR0VOX0FOT05dLCBscnVnZW4tPm1pbl9zZXFbTFJVX0dFTl9GSUxFXSk7Cj4gKwl9Cj4g Kwo+ICsJZm9yICh0eXBlID0gIWNhbl9zd2FwOyB0eXBlIDwgQU5PTl9BTkRfRklMRTsgdHlwZSsr KSB7Cj4gKwkJaWYgKG1pbl9zZXFbdHlwZV0gPT0gbHJ1Z2VuLT5taW5fc2VxW3R5cGVdKQo+ICsJ CQljb250aW51ZTsKPiArCj4gKwkJcmVzZXRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0cnVlKTsK PiArCQlXUklURV9PTkNFKGxydWdlbi0+bWluX3NlcVt0eXBlXSwgbWluX3NlcVt0eXBlXSk7Cj4g KwkJc3VjY2VzcyA9IHRydWU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHN1Y2Nlc3M7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWdu ZWQgbG9uZyBtYXhfc2VxKQo+ICt7Cj4gKwlpbnQgcHJldiwgbmV4dDsKPiArCWludCB0eXBlLCB6 b25lOwo+ICsJc3RydWN0IGxydV9nZW5fc3RydWN0ICpscnVnZW4gPSAmbHJ1dmVjLT5scnVnZW47 Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmbHJ1dmVjLT5scnVfbG9jayk7Cj4gKwo+ICsJVk1fQlVH X09OKCFzZXFfaXNfdmFsaWQobHJ1dmVjKSk7Cj4gKwo+ICsJaWYgKG1heF9zZXEgIT0gbHJ1Z2Vu LT5tYXhfc2VxKQo+ICsJCWdvdG8gdW5sb2NrOwo+ICsKPiArCWluY19taW5fc2VxKGxydXZlYyk7 Cj4gKwo+ICsJLyoKPiArCSAqIFVwZGF0ZSB0aGUgYWN0aXZlL2luYWN0aXZlIExSVSBzaXplcyBm b3IgY29tcGF0aWJpbGl0eS4gQm90aCBzaWRlcyBvZgo+ICsJICogdGhlIGN1cnJlbnQgbWF4X3Nl cSBuZWVkIHRvIGJlIGNvdmVyZWQsIHNpbmNlIG1heF9zZXErMSBjYW4gb3ZlcmxhcAo+ICsJICog d2l0aCBtaW5fc2VxW0xSVV9HRU5fQU5PTl0gaWYgc3dhcHBpbmcgaXMgY29uc3RyYWluZWQuIEFu ZCBpZiB0aGV5IGRvCj4gKwkgKiBvdmVybGFwLCBjb2xkL2hvdCBpbnZlcnNpb24gaGFwcGVucy4g VGhpcyBjYW4gYmUgc29sdmVkIGJ5IG1vdmluZwo+ICsJICogcGFnZXMgZnJvbSBtaW5fc2VxIHRv IG1pbl9zZXErMSBidXQgaXMgb21pdHRlZCBmb3Igc2ltcGxpY2l0eS4KPiArCSAqLwo+ICsJcHJl diA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLT5tYXhfc2VxIC0gMSk7Cj4gKwluZXh0ID0gbHJ1 X2dlbl9mcm9tX3NlcShscnVnZW4tPm1heF9zZXEgKyAxKTsKPiArCj4gKwlmb3IgKHR5cGUgPSAw OyB0eXBlIDwgQU5PTl9BTkRfRklMRTsgdHlwZSsrKSB7Cj4gKwkJZm9yICh6b25lID0gMDsgem9u ZSA8IE1BWF9OUl9aT05FUzsgem9uZSsrKSB7Cj4gKwkJCWVudW0gbHJ1X2xpc3QgbHJ1ID0gdHlw ZSAqIExSVV9JTkFDVElWRV9GSUxFOwo+ICsJCQlsb25nIGRlbHRhID0gbHJ1Z2VuLT5ucl9wYWdl c1twcmV2XVt0eXBlXVt6b25lXSAtCj4gKwkJCQkgICAgIGxydWdlbi0+bnJfcGFnZXNbbmV4dF1b dHlwZV1bem9uZV07Cj4gKwo+ICsJCQlpZiAoIWRlbHRhKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ ICsJCQlfX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgem9uZSwgZGVsdGEpOwo+ICsJCQlf X3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSArIExSVV9BQ1RJVkUsIHpvbmUsIC1kZWx0YSk7 Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWZvciAodHlwZSA9IDA7IHR5cGUgPCBBTk9OX0FORF9GSUxF OyB0eXBlKyspCj4gKwkJcmVzZXRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBmYWxzZSk7Cj4gKwo+ ICsJLyogbWFrZSBzdXJlIHByZWNlZGluZyBtb2RpZmljYXRpb25zIGFwcGVhciAqLwo+ICsJc21w X3N0b3JlX3JlbGVhc2UoJmxydWdlbi0+bWF4X3NlcSwgbHJ1Z2VuLT5tYXhfc2VxICsgMSk7Cj4g K3VubG9jazoKPiArCXNwaW5fdW5sb2NrX2lycSgmbHJ1dmVjLT5scnVfbG9jayk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBsb25nIGdldF9ucl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1 bnNpZ25lZCBsb25nIG1heF9zZXEsCj4gKwkJCSAgICAgdW5zaWduZWQgbG9uZyAqbWluX3NlcSwg Ym9vbCBjYW5fc3dhcCwgYm9vbCAqbmVlZF9hZ2luZykKPiArewo+ICsJaW50IGdlbiwgdHlwZSwg em9uZTsKPiArCWxvbmcgb2xkID0gMDsKPiArCWxvbmcgeW91bmcgPSAwOwo+ICsJbG9uZyB0b3Rh bCA9IDA7Cj4gKwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdl bjsKPiArCj4gKwlmb3IgKHR5cGUgPSAhY2FuX3N3YXA7IHR5cGUgPCBBTk9OX0FORF9GSUxFOyB0 eXBlKyspIHsKPiArCQl1bnNpZ25lZCBsb25nIHNlcTsKPiArCj4gKwkJZm9yIChzZXEgPSBtaW5f c2VxW3R5cGVdOyBzZXEgPD0gbWF4X3NlcTsgc2VxKyspIHsKPiArCQkJbG9uZyBzaXplID0gMDsK PiArCj4gKwkJCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKPiArCj4gKwkJCWZvciAoem9u ZSA9IDA7IHpvbmUgPCBNQVhfTlJfWk9ORVM7IHpvbmUrKykKPiArCQkJCXNpemUgKz0gUkVBRF9P TkNFKGxydWdlbi0+bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSk7Cj4gKwo+ICsJCQl0b3RhbCAr PSBzaXplOwo+ICsJCQlpZiAoc2VxID09IG1heF9zZXEpCj4gKwkJCQl5b3VuZyArPSBzaXplOwo+ ICsJCQlpZiAoc2VxICsgTUlOX05SX0dFTlMgPT0gbWF4X3NlcSkKPiArCQkJCW9sZCArPSBzaXpl Owo+ICsJCX0KPiArCX0KPiArCj4gKwkvKgo+ICsJICogVGhlIGFnaW5nIGFuZCB0aGUgZXZpY3Rp b24gaXMgYSB0eXBpY2FsIHByb2R1Y2VyLWNvbnN1bWVyIG1vZGVsLiBUaGUKPiArCSAqIGFnaW5n IHRyaWVzIHRvIGJlIGxhenkgdG8gcmVkdWNlIHRoZSB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4gT24g dGhlCj4gKwkgKiBvdGhlciBoYW5kLCB0aGUgZXZpY3Rpb24gc3RhbGxzIHdoZW4gdGhlIG51bWJl ciBvZiBnZW5lcmF0aW9ucwo+ICsJICogcmVhY2hlcyBNSU5fTlJfR0VOUy4gU28gaWRlYWxseSwg dGhlcmUgc2hvdWxkIGJlIE1JTl9OUl9HRU5TKzEKPiArCSAqIGdlbmVyYXRpb25zLCBoZW5jZSB0 aGUgZmlyc3QgdHdvIGlmJ3MuCj4gKwkgKgo+ICsJICogSW4gYWRkaXRpb24sIGl0J3MgaWRlYWwg dG8gc3ByZWFkIHBhZ2VzIG91dCBldmVubHksIG1lYW5pbmcKPiArCSAqIDEvKE1JTl9OUl9HRU5T KzEpIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgZm9yIGVhY2ggZ2VuZXJhdGlvbi4gQQo+ ICsJICogcmVhc29uYWJsZSByYW5nZSBmb3IgdGhpcyBhdmVyYWdlIHBvcnRpb24gd291bGQgWzEv TUlOX05SX0dFTlMsCj4gKwkgKiAxLyhNSU5fTlJfR0VOUysyKV0uIEZyb20gdGhlIGNvbnN1bWVy J3MgUE9WLCB0aGUgZXZpY3Rpb24gb25seSBjYXJlcwo+ICsJICogYWJvdXQgdGhlIGxvd2VyIGJv dW5kIG9mIGNvbGQgcGFnZXMsIGkuZS4sIDEvKE1JTl9OUl9HRU5TKzIpLCB3aGVyZWFzCj4gKwkg KiBmcm9tIHRoZSBwcm9kdWNlcidzIFBPViwgdGhlIGFnaW5nIG9ubHkgY2FyZXMgYWJvdXQgdGhl IHVwcGVyIGJvdW5kCj4gKwkgKiBvZiBob3QgcGFnZXMsIGkuZS4sIDEvTUlOX05SX0dFTlMuCj4g KwkgKi8KPiArCWlmIChtaW5fc2VxW0xSVV9HRU5fRklMRV0gKyBNSU5fTlJfR0VOUyA+IG1heF9z ZXEpCj4gKwkJKm5lZWRfYWdpbmcgPSB0cnVlOwo+ICsJZWxzZSBpZiAobWluX3NlcVtMUlVfR0VO X0ZJTEVdICsgTUlOX05SX0dFTlMgPCBtYXhfc2VxKQo+ICsJCSpuZWVkX2FnaW5nID0gZmFsc2U7 Cj4gKwllbHNlIGlmICh5b3VuZyAqIE1JTl9OUl9HRU5TID4gdG90YWwpCj4gKwkJKm5lZWRfYWdp bmcgPSB0cnVlOwo+ICsJZWxzZSBpZiAob2xkICogKE1JTl9OUl9HRU5TICsgMikgPCB0b3RhbCkK PiArCQkqbmVlZF9hZ2luZyA9IHRydWU7Cj4gKwllbHNlCj4gKwkJKm5lZWRfYWdpbmcgPSBmYWxz ZTsKPiArCj4gKwlyZXR1cm4gdG90YWwgPiAwID8gdG90YWwgOiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBhZ2VfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29u dHJvbCAqc2MpCj4gK3sKPiArCWJvb2wgbmVlZF9hZ2luZzsKPiArCWxvbmcgbnJfdG9fc2NhbjsK PiArCWludCBzd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7Cj4gKwlzdHJ1 Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKPiArCURFRklORV9N QVhfU0VRKGxydXZlYyk7Cj4gKwlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwo+ICsKPiArCW1lbV9j Z3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oTlVMTCwgbWVtY2cpOwo+ICsKPiArCWlmIChtZW1f Y2dyb3VwX2JlbG93X21pbihtZW1jZykpCj4gKwkJcmV0dXJuOwo+ICsKPiArCW5yX3RvX3NjYW4g PSBnZXRfbnJfZXZpY3RhYmxlKGxydXZlYywgbWF4X3NlcSwgbWluX3NlcSwgc3dhcHBpbmVzcywg Jm5lZWRfYWdpbmcpOwo+ICsJaWYgKCFucl90b19zY2FuKQo+ICsJCXJldHVybjsKPiArCj4gKwlu cl90b19zY2FuID4+PSBzYy0+cHJpb3JpdHk7Cj4gKwo+ICsJaWYgKCFtZW1fY2dyb3VwX29ubGlu ZShtZW1jZykpCj4gKwkJbnJfdG9fc2NhbisrOwo+ICsKPiArCWlmIChucl90b19zY2FuICYmIG5l ZWRfYWdpbmcgJiYgKCFtZW1fY2dyb3VwX2JlbG93X2xvdyhtZW1jZykgfHwgc2MtPm1lbWNnX2xv d19yZWNsYWltKSkKPiArCQlpbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQs IHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQo+ICt7Cj4gKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVt Y2c7Cj4gKwo+ICsJVk1fQlVHX09OKCFjdXJyZW50X2lzX2tzd2FwZCgpKTsKPiArCj4gKwltZW1j ZyA9IG1lbV9jZ3JvdXBfaXRlcihOVUxMLCBOVUxMLCBOVUxMKTsKPiArCWRvIHsKPiArCQlzdHJ1 Y3QgbHJ1dmVjICpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOwo+ICsK PiArCQlhZ2VfbHJ1dmVjKGxydXZlYywgc2MpOwo+ICsKPiArCQljb25kX3Jlc2NoZWQoKTsKPiAr CX0gd2hpbGUgKChtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihOVUxMLCBtZW1jZywgTlVMTCkpKTsK PiArfQo+ICsKPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ICsgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlIGV2aWN0aW9uCj4gKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4gKwo+ICtz dGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlv ICpmb2xpbywgaW50IHRpZXJfaWR4KQo+ICt7Cj4gKwlib29sIHN1Y2Nlc3M7Cj4gKwlpbnQgZ2Vu ID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7Cj4gKwlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1 KGZvbGlvKTsKPiArCWludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7Cj4gKwlpbnQgdGll ciA9IGZvbGlvX2xydV90aWVyKGZvbGlvKTsKPiArCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2Vz KGZvbGlvKTsKPiArCXN0cnVjdCBscnVfZ2VuX3N0cnVjdCAqbHJ1Z2VuID0gJmxydXZlYy0+bHJ1 Z2VuOwo+ICsKPiArCVZNX0JVR19PTl9GT0xJTyhnZW4gPj0gTUFYX05SX0dFTlMsIGZvbGlvKTsK PiArCj4gKwlpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpIHsKPiArCQlzdWNjZXNzID0gbHJ1 X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7Cj4gKwkJVk1fQlVHX09OX0ZPTElP KCFzdWNjZXNzLCBmb2xpbyk7Cj4gKwkJZm9saW9fc2V0X3VuZXZpY3RhYmxlKGZvbGlvKTsKPiAr CQlscnV2ZWNfYWRkX2ZvbGlvKGxydXZlYywgZm9saW8pOwo+ICsJCV9fY291bnRfdm1fZXZlbnRz KFVORVZJQ1RBQkxFX1BHQ1VMTEVELCBkZWx0YSk7Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwl9Cj4g Kwo+ICsJaWYgKHR5cGUgPT0gTFJVX0dFTl9GSUxFICYmIGZvbGlvX3Rlc3RfYW5vbihmb2xpbykg JiYgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHsKPiArCQlzdWNjZXNzID0gbHJ1X2dlbl9kZWxf Zm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7Cj4gKwkJVk1fQlVHX09OX0ZPTElPKCFzdWNjZXNz LCBmb2xpbyk7Cj4gKwkJZm9saW9fc2V0X3N3YXBiYWNrZWQoZm9saW8pOwo+ICsJCWxydXZlY19h ZGRfZm9saW9fdGFpbChscnV2ZWMsIGZvbGlvKTsKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCX0KPiAr Cj4gKwlpZiAodGllciA+IHRpZXJfaWR4KSB7Cj4gKwkJaW50IGhpc3QgPSBscnVfaGlzdF9mcm9t X3NlcShscnVnZW4tPm1pbl9zZXFbdHlwZV0pOwo+ICsKPiArCQlnZW4gPSBmb2xpb19pbmNfZ2Vu KGxydXZlYywgZm9saW8sIGZhbHNlKTsKPiArCQlsaXN0X21vdmVfdGFpbCgmZm9saW8tPmxydSwg JmxydWdlbi0+bGlzdHNbZ2VuXVt0eXBlXVt6b25lXSk7Cj4gKwo+ICsJCVdSSVRFX09OQ0UobHJ1 Z2VuLT5wcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllciAtIDFdLAo+ICsJCQkgICBscnVnZW4tPnBy b3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyIC0gMV0gKyBkZWx0YSk7Cj4gKwkJX19tb2RfbHJ1dmVj X3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICsgdHlwZSwgZGVsdGEpOwo+ ICsJCXJldHVybiB0cnVlOwo+ICsJfQo+ICsKPiArCWlmIChmb2xpb190ZXN0X2xvY2tlZChmb2xp bykgfHwgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8Cj4gKwkgICAgKHR5cGUgPT0gTFJV X0dFTl9GSUxFICYmIGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSkgewo+ICsJCWdlbiA9IGZvbGlv X2luY19nZW4obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7Cj4gKwkJbGlzdF9tb3ZlKCZmb2xpby0+bHJ1 LCAmbHJ1Z2VuLT5saXN0c1tnZW5dW3R5cGVdW3pvbmVdKTsKPiArCQlyZXR1cm4gdHJ1ZTsKPiAr CX0KPiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGlzb2xhdGVf Zm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qg c2Nhbl9jb250cm9sICpzYykKPiArewo+ICsJYm9vbCBzdWNjZXNzOwo+ICsKPiArCWlmICghc2Mt Pm1heV91bm1hcCAmJiBmb2xpb19tYXBwZWQoZm9saW8pKQo+ICsJCXJldHVybiBmYWxzZTsKPiAr Cj4gKwlpZiAoIShzYy0+bWF5X3dyaXRlcGFnZSAmJiAoc2MtPmdmcF9tYXNrICYgX19HRlBfSU8p KSAmJgo+ICsJICAgIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fAo+ICsJICAgICAoZm9saW9f dGVzdF9hbm9uKGZvbGlvKSAmJiAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkpCj4gKwkJ cmV0dXJuIGZhbHNlOwo+ICsKPiArCWlmICghZm9saW9fdHJ5X2dldChmb2xpbykpCj4gKwkJcmV0 dXJuIGZhbHNlOwo+ICsKPiArCWlmICghZm9saW9fdGVzdF9jbGVhcl9scnUoZm9saW8pKSB7Cj4g KwkJZm9saW9fcHV0KGZvbGlvKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJc3Vj Y2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpOwo+ICsJVk1fQlVH X09OX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgc2Nhbl9mb2xpb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qg c2Nhbl9jb250cm9sICpzYywKPiArCQkgICAgICAgaW50IHR5cGUsIGludCB0aWVyLCBzdHJ1Y3Qg bGlzdF9oZWFkICpsaXN0KQo+ICt7Cj4gKwlpbnQgZ2VuLCB6b25lOwo+ICsJZW51bSB2bV9ldmVu dF9pdGVtIGl0ZW07Cj4gKwlpbnQgc29ydGVkID0gMDsKPiArCWludCBzY2FubmVkID0gMDsKPiAr CWludCBpc29sYXRlZCA9IDA7Cj4gKwlpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDsKPiAr CXN0cnVjdCBscnVfZ2VuX3N0cnVjdCAqbHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2VuOwo+ICsJc3Ry dWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7Cj4gKwo+ICsJVk1f QlVHX09OKCFsaXN0X2VtcHR5KGxpc3QpKTsKPiArCj4gKwlpZiAoZ2V0X25yX2dlbnMobHJ1dmVj LCB0eXBlKSA9PSBNSU5fTlJfR0VOUykKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlnZW4gPSBscnVf Z2VuX2Zyb21fc2VxKGxydWdlbi0+bWluX3NlcVt0eXBlXSk7Cj4gKwo+ICsJZm9yICh6b25lID0g c2MtPnJlY2xhaW1faWR4OyB6b25lID49IDA7IHpvbmUtLSkgewo+ICsJCUxJU1RfSEVBRChtb3Zl ZCk7Cj4gKwkJaW50IHNraXBwZWQgPSAwOwo+ICsJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAm bHJ1Z2VuLT5saXN0c1tnZW5dW3R5cGVdW3pvbmVdOwo+ICsKPiArCQl3aGlsZSAoIWxpc3RfZW1w dHkoaGVhZCkpIHsKPiArCQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFk KTsKPiArCQkJaW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwo+ICsKPiArCQkJVk1f QlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7Cj4gKwkJ CVZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbyksIGZvbGlvKTsKPiArCQkJ Vk1fQlVHX09OX0ZPTElPKGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAhPSB0eXBlLCBmb2xpbyk7 Cj4gKwkJCVZNX0JVR19PTl9GT0xJTyhmb2xpb196b25lbnVtKGZvbGlvKSAhPSB6b25lLCBmb2xp byk7Cj4gKwo+ICsJCQlzY2FubmVkICs9IGRlbHRhOwo+ICsKPiArCQkJaWYgKHNvcnRfZm9saW8o bHJ1dmVjLCBmb2xpbywgdGllcikpCj4gKwkJCQlzb3J0ZWQgKz0gZGVsdGE7Cj4gKwkJCWVsc2Ug aWYgKGlzb2xhdGVfZm9saW8obHJ1dmVjLCBmb2xpbywgc2MpKSB7Cj4gKwkJCQlsaXN0X2FkZCgm Zm9saW8tPmxydSwgbGlzdCk7Cj4gKwkJCQlpc29sYXRlZCArPSBkZWx0YTsKPiArCQkJfSBlbHNl IHsKPiArCQkJCWxpc3RfbW92ZSgmZm9saW8tPmxydSwgJm1vdmVkKTsKPiArCQkJCXNraXBwZWQg Kz0gZGVsdGE7Cj4gKwkJCX0KPiArCj4gKwkJCWlmICghLS1yZW1haW5pbmcgfHwgbWF4KGlzb2xh dGVkLCBza2lwcGVkKSA+PSBNSU5fTFJVX0JBVENIKQo+ICsJCQkJYnJlYWs7Cj4gKwkJfQo+ICsK PiArCQlpZiAoc2tpcHBlZCkgewo+ICsJCQlsaXN0X3NwbGljZSgmbW92ZWQsIGhlYWQpOwo+ICsJ CQlfX2NvdW50X3ppZF92bV9ldmVudHMoUEdTQ0FOX1NLSVAsIHpvbmUsIHNraXBwZWQpOwo+ICsJ CX0KPiArCj4gKwkJaWYgKCFyZW1haW5pbmcgfHwgaXNvbGF0ZWQgPj0gTUlOX0xSVV9CQVRDSCkK PiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaXRlbSA9IGN1cnJlbnRfaXNfa3N3YXBkKCkgPyBQ R1NDQU5fS1NXQVBEIDogUEdTQ0FOX0RJUkVDVDsKPiArCWlmICghY2dyb3VwX3JlY2xhaW0oc2Mp KSB7Cj4gKwkJX19jb3VudF92bV9ldmVudHMoaXRlbSwgaXNvbGF0ZWQpOwo+ICsJCV9fY291bnRf dm1fZXZlbnRzKFBHUkVGSUxMLCBzb3J0ZWQpOwo+ICsJfQo+ICsJX19jb3VudF9tZW1jZ19ldmVu dHMobWVtY2csIGl0ZW0sIGlzb2xhdGVkKTsKPiArCV9fY291bnRfbWVtY2dfZXZlbnRzKG1lbWNn LCBQR1JFRklMTCwgc29ydGVkKTsKPiArCV9fY291bnRfdm1fZXZlbnRzKFBHU0NBTl9BTk9OICsg dHlwZSwgaXNvbGF0ZWQpOwo+ICsKPiArCS8qCj4gKwkgKiBUaGVyZSBtaWdodCBub3QgYmUgZWxp Z2libGUgcGFnZXMgZHVlIHRvIHJlY2xhaW1faWR4LCBtYXlfdW5tYXAgYW5kCj4gKwkgKiBtYXlf d3JpdGVwYWdlLiBDaGVjayB0aGUgcmVtYWluaW5nIHRvIHByZXZlbnQgbGl2ZWxvY2sgaWYgdGhl cmUgaXMgbm8KPiArCSAqIHByb2dyZXNzLgo+ICsJICovCj4gKwlyZXR1cm4gaXNvbGF0ZWQgfHwg IXJlbWFpbmluZyA/IHNjYW5uZWQgOiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdldF90aWVy X2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQo+ICt7Cj4gKwlpbnQgdGllcjsK PiArCXN0cnVjdCBjdHJsX3BvcyBzcCwgcHY7Cj4gKwo+ICsJLyoKPiArCSAqIFRvIGxlYXZlIGEg bWFyZ2luIGZvciBmbHVjdHVhdGlvbnMsIHVzZSBhIGxhcmdlciBnYWluIGZhY3RvciAoMToyKS4K PiArCSAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQg aGF2ZSBhdCBsZWFzdCB0d2ljZQo+ICsJICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3Qg dGllci4KPiArCSAqLwo+ICsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDEsICZzcCk7 Cj4gKwlmb3IgKHRpZXIgPSAxOyB0aWVyIDwgTUFYX05SX1RJRVJTOyB0aWVyKyspIHsKPiArCQly ZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMiwgJnB2KTsKPiArCQlpZiAoIXBvc2l0 aXZlX2N0cmxfZXJyKCZzcCwgJnB2KSkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IHRpZXIgLSAxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0 IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcywgaW50ICp0aWVyX2lkeCkKPiArewo+ICsJ aW50IHR5cGUsIHRpZXI7Cj4gKwlzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2Owo+ICsJaW50IGdhaW5b QU5PTl9BTkRfRklMRV0gPSB7IHN3YXBwaW5lc3MsIDIwMCAtIHN3YXBwaW5lc3MgfTsKPiArCj4g KwkvKgo+ICsJICogQ29tcGFyZSB0aGUgZmlyc3QgdGllciBvZiBhbm9uIHdpdGggdGhhdCBvZiBm aWxlIHRvIGRldGVybWluZSB3aGljaAo+ICsJICogdHlwZSB0byBzY2FuLiBBbHNvIG5lZWQgdG8g Y29tcGFyZSBvdGhlciB0aWVycyBvZiB0aGUgc2VsZWN0ZWQgdHlwZQo+ICsJICogd2l0aCB0aGUg Zmlyc3QgdGllciBvZiB0aGUgb3RoZXIgdHlwZSB0byBkZXRlcm1pbmUgdGhlIGxhc3QgdGllciAo b2YKPiArCSAqIHRoZSBzZWxlY3RlZCB0eXBlKSB0byBldmljdC4KPiArCSAqLwo+ICsJcmVhZF9j dHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgMCwgZ2FpbltMUlVfR0VOX0FOT05dLCAmc3Ap Owo+ICsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgMCwgZ2FpbltMUlVfR0VO X0ZJTEVdLCAmcHYpOwo+ICsJdHlwZSA9IHBvc2l0aXZlX2N0cmxfZXJyKCZzcCwgJnB2KTsKPiAr Cj4gKwlyZWFkX2N0cmxfcG9zKGxydXZlYywgIXR5cGUsIDAsIGdhaW5bIXR5cGVdLCAmc3ApOwo+ ICsJZm9yICh0aWVyID0gMTsgdGllciA8IE1BWF9OUl9USUVSUzsgdGllcisrKSB7Cj4gKwkJcmVh ZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIGdhaW5bdHlwZV0sICZwdik7Cj4gKwkJaWYg KCFwb3NpdGl2ZV9jdHJsX2Vycigmc3AsICZwdikpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiAr CSp0aWVyX2lkeCA9IHRpZXIgLSAxOwo+ICsKPiArCXJldHVybiB0eXBlOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNj YW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLAo+ICsJCQkgIGludCAqdHlwZV9zY2FubmVk LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQo+ICt7Cj4gKwlpbnQgaTsKPiArCWludCB0eXBlOwo+ ICsJaW50IHNjYW5uZWQ7Cj4gKwlpbnQgdGllciA9IC0xOwo+ICsJREVGSU5FX01JTl9TRVEobHJ1 dmVjKTsKPiArCj4gKwlWTV9CVUdfT04oIXNlcV9pc192YWxpZChscnV2ZWMpKTsKPiArCj4gKwkv Kgo+ICsJICogVHJ5IHRvIG1ha2UgdGhlIG9idmlvdXMgY2hvaWNlIGZpcnN0LiBXaGVuIGFub24g YW5kIGZpbGUgYXJlIGJvdGgKPiArCSAqIGF2YWlsYWJsZSBmcm9tIHRoZSBzYW1lIGdlbmVyYXRp b24sIGludGVycHJldCBzd2FwcGluZXNzIDEgYXMgZmlsZQo+ICsJICogZmlyc3QgYW5kIDIwMCBh cyBhbm9uIGZpcnN0Lgo+ICsJICovCj4gKwlpZiAoIXN3YXBwaW5lc3MpCj4gKwkJdHlwZSA9IExS VV9HRU5fRklMRTsKPiArCWVsc2UgaWYgKG1pbl9zZXFbTFJVX0dFTl9BTk9OXSA8IG1pbl9zZXFb TFJVX0dFTl9GSUxFXSkKPiArCQl0eXBlID0gTFJVX0dFTl9BTk9OOwo+ICsJZWxzZSBpZiAoc3dh cHBpbmVzcyA9PSAxKQo+ICsJCXR5cGUgPSBMUlVfR0VOX0ZJTEU7Cj4gKwllbHNlIGlmIChzd2Fw cGluZXNzID09IDIwMCkKPiArCQl0eXBlID0gTFJVX0dFTl9BTk9OOwo+ICsJZWxzZQo+ICsJCXR5 cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcywgJnRpZXIpOwo+ICsKPiAr CWZvciAoaSA9ICFzd2FwcGluZXNzOyBpIDwgQU5PTl9BTkRfRklMRTsgaSsrKSB7Cj4gKwkJaWYg KHRpZXIgPCAwKQo+ICsJCQl0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7Cj4gKwo+ ICsJCXNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhscnV2ZWMsIHNjLCB0eXBlLCB0aWVyLCBsaXN0KTsK PiArCQlpZiAoc2Nhbm5lZCkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXR5cGUgPSAhdHlwZTsKPiAr CQl0aWVyID0gLTE7Cj4gKwl9Cj4gKwo+ICsJKnR5cGVfc2Nhbm5lZCA9IHR5cGU7Cj4gKwo+ICsJ cmV0dXJuIHNjYW5uZWQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHN0cnVj dCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNz KQo+ICt7Cj4gKwlpbnQgdHlwZTsKPiArCWludCBzY2FubmVkOwo+ICsJaW50IHJlY2xhaW1lZDsK PiArCUxJU1RfSEVBRChsaXN0KTsKPiArCXN0cnVjdCBmb2xpbyAqZm9saW87Cj4gKwllbnVtIHZt X2V2ZW50X2l0ZW0gaXRlbTsKPiArCXN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDsKPiArCXN0cnVj dCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpOwo+ICsJc3RydWN0IHBn bGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwo+ICsKPiArCXNwaW5fbG9j a19pcnEoJmxydXZlYy0+bHJ1X2xvY2spOwo+ICsKPiArCXNjYW5uZWQgPSBpc29sYXRlX2ZvbGlv cyhscnV2ZWMsIHNjLCBzd2FwcGluZXNzLCAmdHlwZSwgJmxpc3QpOwo+ICsKPiArCWlmICh0cnlf dG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKSkKPiArCQlzY2FubmVkKys7Cj4gKwo+ ICsJaWYgKGdldF9ucl9nZW5zKGxydXZlYywgTFJVX0dFTl9GSUxFKSA9PSBNSU5fTlJfR0VOUykK PiArCQlzY2FubmVkID0gMDsKPiArCj4gKwlzcGluX3VubG9ja19pcnEoJmxydXZlYy0+bHJ1X2xv Y2spOwo+ICsKPiArCWlmIChsaXN0X2VtcHR5KCZsaXN0KSkKPiArCQlyZXR1cm4gc2Nhbm5lZDsK PiArCj4gKwlyZWNsYWltZWQgPSBzaHJpbmtfcGFnZV9saXN0KCZsaXN0LCBwZ2RhdCwgc2MsICZz dGF0LCBmYWxzZSk7Cj4gKwo+ICsJLyoKPiArCSAqIFRvIGF2b2lkIGxpdmVsb2NrLCBkb24ndCBh ZGQgcmVqZWN0ZWQgcGFnZXMgYmFjayB0byB0aGUgc2FtZSBsaXN0cwo+ICsJICogdGhleSB3ZXJl IGlzb2xhdGVkIGZyb20uIFNlZSBscnVfZ2VuX2FkZF9mb2xpbygpLgo+ICsJICovCj4gKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGZvbGlvLCAmbGlzdCwgbHJ1KSB7Cj4gKwkJZm9saW9fY2xlYXJfcmVm ZXJlbmNlZChmb2xpbyk7Cj4gKwkJZm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7Cj4gKwo+ ICsJCWlmIChmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pICYmCj4gKwkJICAgIChmb2xpb190ZXN0 X2RpcnR5KGZvbGlvKSB8fCBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpKQo+ICsJCQlmb2xp b19jbGVhcl9hY3RpdmUoZm9saW8pOwo+ICsJCWVsc2UKPiArCQkJZm9saW9fc2V0X2FjdGl2ZShm b2xpbyk7Cj4gKwl9Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmbHJ1dmVjLT5scnVfbG9jayk7Cj4g Kwo+ICsJbW92ZV9wYWdlc190b19scnUobHJ1dmVjLCAmbGlzdCk7Cj4gKwo+ICsJaXRlbSA9IGN1 cnJlbnRfaXNfa3N3YXBkKCkgPyBQR1NURUFMX0tTV0FQRCA6IFBHU1RFQUxfRElSRUNUOwo+ICsJ aWYgKCFjZ3JvdXBfcmVjbGFpbShzYykpCj4gKwkJX19jb3VudF92bV9ldmVudHMoaXRlbSwgcmVj bGFpbWVkKTsKPiArCV9fY291bnRfbWVtY2dfZXZlbnRzKG1lbWNnLCBpdGVtLCByZWNsYWltZWQp Owo+ICsJX19jb3VudF92bV9ldmVudHMoUEdTVEVBTF9BTk9OICsgdHlwZSwgcmVjbGFpbWVkKTsK PiArCj4gKwlzcGluX3VubG9ja19pcnEoJmxydXZlYy0+bHJ1X2xvY2spOwo+ICsKPiArCW1lbV9j Z3JvdXBfdW5jaGFyZ2VfbGlzdCgmbGlzdCk7Cj4gKwlmcmVlX3VucmVmX3BhZ2VfbGlzdCgmbGlz dCk7Cj4gKwo+ICsJc2MtPm5yX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7Cj4gKwo+ICsJcmV0dXJu IHNjYW5uZWQ7Cj4gK30KPiArCj4gK3N0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBs cnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgY2FuX3N3YXApCj4g K3sKPiArCWJvb2wgbmVlZF9hZ2luZzsKPiArCWxvbmcgbnJfdG9fc2NhbjsKPiArCXN0cnVjdCBt ZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpOwo+ICsJREVGSU5FX01BWF9T RVEobHJ1dmVjKTsKPiArCURFRklORV9NSU5fU0VRKGxydXZlYyk7Cj4gKwo+ICsJaWYgKG1lbV9j Z3JvdXBfYmVsb3dfbWluKG1lbWNnKSB8fAo+ICsJICAgIChtZW1fY2dyb3VwX2JlbG93X2xvdyht ZW1jZykgJiYgIXNjLT5tZW1jZ19sb3dfcmVjbGFpbSkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJ bnJfdG9fc2NhbiA9IGdldF9ucl9ldmljdGFibGUobHJ1dmVjLCBtYXhfc2VxLCBtaW5fc2VxLCBj YW5fc3dhcCwgJm5lZWRfYWdpbmcpOwo+ICsJaWYgKCFucl90b19zY2FuKQo+ICsJCXJldHVybiAw Owo+ICsKPiArCS8qIHJlc2V0IHRoZSBwcmlvcml0eSBpZiB0aGUgdGFyZ2V0IGhhcyBiZWVuIG1l dCAqLwo+ICsJbnJfdG9fc2NhbiA+Pj0gc2MtPm5yX3JlY2xhaW1lZCA8IHNjLT5ucl90b19yZWNs YWltID8gc2MtPnByaW9yaXR5IDogREVGX1BSSU9SSVRZOwo+ICsKPiArCWlmICghbWVtX2Nncm91 cF9vbmxpbmUobWVtY2cpKQo+ICsJCW5yX3RvX3NjYW4rKzsKPiArCj4gKwlpZiAoIW5yX3RvX3Nj YW4pCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKCFuZWVkX2FnaW5nKQo+ICsJCXJldHVybiBu cl90b19zY2FuOwo+ICsKPiArCS8qIGxlYXZlIHRoZSB3b3JrIHRvIGxydV9nZW5fYWdlX25vZGUo KSAqLwo+ICsJaWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJ LyogdHJ5IG90aGVyIG1lbWNncyBiZWZvcmUgZ29pbmcgdG8gdGhlIGFnaW5nIHBhdGggKi8KPiAr CWlmICghY2dyb3VwX3JlY2xhaW0oc2MpICYmICFzYy0+Zm9yY2VfZGVhY3RpdmF0ZSkgewo+ICsJ CXNjLT5za2lwcGVkX2RlYWN0aXZhdGUgPSB0cnVlOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsK PiArCWluY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSk7Cj4gKwo+ICsJcmV0dXJuIG5yX3RvX3Nj YW47Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3Qg bHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQo+ICt7Cj4gKwlzdHJ1Y3Qg YmxrX3BsdWcgcGx1ZzsKPiArCWxvbmcgc2Nhbm5lZCA9IDA7Cj4gKwo+ICsJbHJ1X2FkZF9kcmFp bigpOwo+ICsKPiArCWJsa19zdGFydF9wbHVnKCZwbHVnKTsKPiArCj4gKwl3aGlsZSAodHJ1ZSkg ewo+ICsJCWludCBkZWx0YTsKPiArCQlpbnQgc3dhcHBpbmVzczsKPiArCQlsb25nIG5yX3RvX3Nj YW47Cj4gKwo+ICsJCWlmIChzYy0+bWF5X3N3YXApCj4gKwkJCXN3YXBwaW5lc3MgPSBnZXRfc3dh cHBpbmVzcyhscnV2ZWMsIHNjKTsKPiArCQllbHNlIGlmICghY2dyb3VwX3JlY2xhaW0oc2MpICYm IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpKQo+ICsJCQlzd2FwcGluZXNzID0gMTsKPiArCQll bHNlCj4gKwkJCXN3YXBwaW5lc3MgPSAwOwo+ICsKPiArCQlucl90b19zY2FuID0gZ2V0X25yX3Rv X3NjYW4obHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7Cj4gKwkJaWYgKCFucl90b19zY2FuKQo+ICsJ CQlicmVhazsKPiArCj4gKwkJZGVsdGEgPSBldmljdF9mb2xpb3MobHJ1dmVjLCBzYywgc3dhcHBp bmVzcyk7Cj4gKwkJaWYgKCFkZWx0YSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXNjYW5uZWQgKz0g ZGVsdGE7Cj4gKwkJaWYgKHNjYW5uZWQgPj0gbnJfdG9fc2NhbikKPiArCQkJYnJlYWs7Cj4gKwo+ ICsJCWNvbmRfcmVzY2hlZCgpOwo+ICsJfQo+ICsKPiArCWJsa19maW5pc2hfcGx1ZygmcGx1Zyk7 Cj4gK30KPiArCj4gICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gICAgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24KPiAgICAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4g QEAgLTMwNDEsNiArMzgyMSwxNiBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9p ZCkKPiAgIH07Cj4gICBsYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7Cj4gICAKPiArI2Vsc2UK PiArCj4gK3N0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpw Z2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCj4gK3sKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNj YW5fY29udHJvbCAqc2MpCj4gK3sKPiArfQo+ICsKPiAgICNlbmRpZiAvKiBDT05GSUdfTFJVX0dF TiAqLwo+ICAgCj4gICBzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxy dXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCj4gQEAgLTMwNTQsNiArMzg0NCwxMSBAQCBz dGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNj YW5fY29udHJvbCAqc2MpCj4gICAJc3RydWN0IGJsa19wbHVnIHBsdWc7Cj4gICAJYm9vbCBzY2Fu X2FkanVzdGVkOwo+ICAgCj4gKwlpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHsKPiArCQlscnVfZ2Vu X3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiAgIAln ZXRfc2Nhbl9jb3VudChscnV2ZWMsIHNjLCBucik7Cj4gICAKPiAgIAkvKiBSZWNvcmQgdGhlIG9y aWdpbmFsIHNjYW4gdGFyZ2V0IGZvciBwcm9wb3J0aW9uYWwgYWRqdXN0bWVudHMgbGF0ZXIgKi8K PiBAQCAtMzU1OCw2ICs0MzUzLDkgQEAgc3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3Ry dWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdCkKPiAgIAlzdHJ1 Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjOwo+ICAgCXVuc2lnbmVkIGxvbmcgcmVmYXVsdHM7Cj4g ICAKPiArCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkKPiArCQlyZXR1cm47Cj4gKwo+ICAgCXRhcmdl dF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyh0YXJnZXRfbWVtY2csIHBnZGF0KTsKPiAgIAly ZWZhdWx0cyA9IGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIFdPUktJTkdTRVRfQUNU SVZBVEVfQU5PTik7Cj4gICAJdGFyZ2V0X2xydXZlYy0+cmVmYXVsdHNbMF0gPSByZWZhdWx0czsK PiBAQCAtMzkyOCw2ICs0NzI2LDExIEBAIHN0YXRpYyB2b2lkIGFnZV9hY3RpdmVfYW5vbihzdHJ1 Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAo+ICAgCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKPiAg IAlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7Cj4gICAKPiArCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkg ewo+ICsJCWxydV9nZW5fYWdlX25vZGUocGdkYXQsIHNjKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4g Kwo+ICAgCWlmICghY2FuX2FnZV9hbm9uX3BhZ2VzKHBnZGF0LCBzYykpCj4gICAJCXJldHVybjsK PiAgIAo+IGRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmMKPiBp bmRleCA4YTM4MjhhY2MwYmYuLjg5YjQ2YWY3NGVlZiAxMDA2NDQKPiAtLS0gYS9tbS93b3JraW5n c2V0LmMKPiArKysgYi9tbS93b3JraW5nc2V0LmMKPiBAQCAtMTg3LDcgKzE4Nyw2IEBAIHN0YXRp YyB1bnNpZ25lZCBpbnQgYnVja2V0X29yZGVyIF9fcmVhZF9tb3N0bHk7Cj4gICBzdGF0aWMgdm9p ZCAqcGFja19zaGFkb3coaW50IG1lbWNnaWQsIHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxv bmcgZXZpY3Rpb24sCj4gICAJCQkgYm9vbCB3b3JraW5nc2V0KQo+ICAgewo+IC0JZXZpY3Rpb24g Pj49IGJ1Y2tldF9vcmRlcjsKPiAgIAlldmljdGlvbiAmPSBFVklDVElPTl9NQVNLOwo+ICAgCWV2 aWN0aW9uID0gKGV2aWN0aW9uIDw8IE1FTV9DR1JPVVBfSURfU0hJRlQpIHwgbWVtY2dpZDsKPiAg IAlldmljdGlvbiA9IChldmljdGlvbiA8PCBOT0RFU19TSElGVCkgfCBwZ2RhdC0+bm9kZV9pZDsK PiBAQCAtMjEyLDEwICsyMTEsMTE2IEBAIHN0YXRpYyB2b2lkIHVucGFja19zaGFkb3codm9pZCAq c2hhZG93LCBpbnQgKm1lbWNnaWRwLCBwZ19kYXRhX3QgKipwZ2RhdCwKPiAgIAo+ICAgCSptZW1j Z2lkcCA9IG1lbWNnaWQ7Cj4gICAJKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7Cj4gLQkqZXZpY3Rp b25wID0gZW50cnkgPDwgYnVja2V0X29yZGVyOwo+ICsJKmV2aWN0aW9ucCA9IGVudHJ5Owo+ICAg CSp3b3JraW5nc2V0cCA9IHdvcmtpbmdzZXQ7Cj4gICB9Cj4gICAKPiArI2lmZGVmIENPTkZJR19M UlVfR0VOCj4gKwo+ICtzdGF0aWMgaW50IGZvbGlvX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9s aW8pCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tPmZsYWdz KTsKPiArCj4gKwlCVUlMRF9CVUdfT04oTFJVX0dFTl9XSURUSCArIExSVV9SRUZTX1dJRFRIID4g QklUU19QRVJfTE9ORyAtIEVWSUNUSU9OX1NISUZUKTsKPiArCj4gKwkvKiBzZWUgdGhlIGNvbW1l bnQgb24gTUFYX05SX1RJRVJTICovCj4gKwlyZXR1cm4gZmxhZ3MgJiBCSVQoUEdfd29ya2luZ3Nl dCkgPyAoZmxhZ3MgJiBMUlVfUkVGU19NQVNLKSA+PiBMUlVfUkVGU19QR09GRiA6IDA7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkICpscnVfZ2VuX2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8p Cj4gK3sKPiArCWludCBoaXN0LCB0aWVyOwo+ICsJdW5zaWduZWQgbG9uZyB0b2tlbjsKPiArCXVu c2lnbmVkIGxvbmcgbWluX3NlcTsKPiArCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKPiArCXN0cnVj dCBscnVfZ2VuX3N0cnVjdCAqbHJ1Z2VuOwo+ICsJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xy dShmb2xpbyk7Cj4gKwlpbnQgcmVmcyA9IGZvbGlvX2xydV9yZWZzKGZvbGlvKTsKPiArCWludCBk ZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKPiArCWJvb2wgd29ya2luZ3NldCA9IGZvbGlv X3Rlc3Rfd29ya2luZ3NldChmb2xpbyk7Cj4gKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBm b2xpb19tZW1jZyhmb2xpbyk7Cj4gKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9f cGdkYXQoZm9saW8pOwo+ICsKPiArCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBw Z2RhdCk7Cj4gKwlscnVnZW4gPSAmbHJ1dmVjLT5scnVnZW47Cj4gKwltaW5fc2VxID0gUkVBRF9P TkNFKGxydWdlbi0+bWluX3NlcVt0eXBlXSk7Cj4gKwl0b2tlbiA9IChtaW5fc2VxIDw8IExSVV9S RUZTX1dJRFRIKSB8IHJlZnM7Cj4gKwo+ICsJaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKG1pbl9z ZXEpOwo+ICsJdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzICsgd29ya2luZ3NldCk7Cj4g KwlhdG9taWNfbG9uZ19hZGQoZGVsdGEsICZscnVnZW4tPmV2aWN0ZWRbaGlzdF1bdHlwZV1bdGll cl0pOwo+ICsKPiArCXJldHVybiBwYWNrX3NoYWRvdyhtZW1fY2dyb3VwX2lkKG1lbWNnKSwgcGdk YXQsIHRva2VuLCB3b3JraW5nc2V0KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbHJ1X2dlbl9y ZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKPiArewo+ICsJaW50IGhp c3QsIHRpZXIsIHJlZnM7Cj4gKwlpbnQgbWVtY2dfaWQ7Cj4gKwlib29sIHdvcmtpbmdzZXQ7Cj4g Kwl1bnNpZ25lZCBsb25nIHRva2VuOwo+ICsJdW5zaWduZWQgbG9uZyBtaW5fc2VxOwo+ICsJc3Ry dWN0IGxydXZlYyAqbHJ1dmVjOwo+ICsJc3RydWN0IGxydV9nZW5fc3RydWN0ICpscnVnZW47Cj4g KwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7Cj4gKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0 Owo+ICsJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7Cj4gKwlpbnQgZGVsdGEg PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7Cj4gKwo+ICsJdW5wYWNrX3NoYWRvdyhzaGFkb3csICZt ZW1jZ19pZCwgJnBnZGF0LCAmdG9rZW4sICZ3b3JraW5nc2V0KTsKPiArCj4gKwlyZWZzID0gdG9r ZW4gJiAoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpOwo+ICsJaWYgKHJlZnMgJiYgIXdvcmtpbmdz ZXQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmIChmb2xpb19wZ2RhdChmb2xpbykgIT0gcGdkYXQp Cj4gKwkJcmV0dXJuOwo+ICsKPiArCXJjdV9yZWFkX2xvY2soKTsKPiArCW1lbWNnID0gZm9saW9f bWVtY2dfcmN1KGZvbGlvKTsKPiArCWlmIChtZW1fY2dyb3VwX2lkKG1lbWNnKSAhPSBtZW1jZ19p ZCkKPiArCQlnb3RvIHVubG9jazsKPiArCj4gKwl0b2tlbiA+Pj0gTFJVX1JFRlNfV0lEVEg7Cj4g KwlscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOwo+ICsJbHJ1Z2VuID0g JmxydXZlYy0+bHJ1Z2VuOwo+ICsJbWluX3NlcSA9IFJFQURfT05DRShscnVnZW4tPm1pbl9zZXFb dHlwZV0pOwo+ICsJaWYgKHRva2VuICE9IChtaW5fc2VxICYgKEVWSUNUSU9OX01BU0sgPj4gTFJV X1JFRlNfV0lEVEgpKSkKPiArCQlnb3RvIHVubG9jazsKPiArCj4gKwloaXN0ID0gbHJ1X2hpc3Rf ZnJvbV9zZXEobWluX3NlcSk7Cj4gKwl0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMgKyB3 b3JraW5nc2V0KTsKPiArCWF0b21pY19sb25nX2FkZChkZWx0YSwgJmxydWdlbi0+cmVmYXVsdGVk W2hpc3RdW3R5cGVdW3RpZXJdKTsKPiArCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5H U0VUX1JFRkFVTFRfQkFTRSArIHR5cGUsIGRlbHRhKTsKPiArCj4gKwkvKgo+ICsJICogQ291bnQg dGhlIGZvbGxvd2luZyB0d28gY2FzZXMgYXMgc3RhbGxzOgo+ICsJICogMS4gRm9yIHBhZ2VzIGFj Y2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMsIGhvdHRlciBwYWdlcyBwdXNoZWQgb3V0Cj4gKwkg KiAgICBob3QgcGFnZXMgd2hpY2ggcmVmYXVsdGVkIGltbWVkaWF0ZWx5Lgo+ICsJICogMi4gRm9y IHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycywgbnVtYmVycyBvZiBhY2Nl c3Nlcwo+ICsJICogICAgbWlnaHQgaGF2ZSBiZWVuIGJleW9uZCB0aGUgbGltaXQuCj4gKwkgKi8K PiArCWlmIChscnVfZ2VuX2luX2ZhdWx0KCkgfHwgcmVmcyArIHdvcmtpbmdzZXQgPT0gQklUKExS VV9SRUZTX1dJRFRIKSkgewo+ICsJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKPiArCQlt b2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgKyB0eXBlLCBk ZWx0YSk7Cj4gKwl9Cj4gK3VubG9jazoKPiArCXJjdV9yZWFkX3VubG9jaygpOwo+ICt9Cj4gKwo+ ICsjZWxzZQo+ICsKPiArc3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlv ICpmb2xpbykKPiArewo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGxy dV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCj4gK3sKPiAr fQo+ICsKPiArI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCj4gKwo+ICAgLyoqCj4gICAgKiB3 b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudCAtIGFnZSBub24tcmVzaWRlbnQgZW50cmllcyBhcyBM UlUgYWdlcwo+ICAgICogQGxydXZlYzogdGhlIGxydXZlYyB0aGF0IHdhcyBhZ2VkCj4gQEAgLTI2 NCwxMCArMzY5LDE0IEBAIHZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpm b2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZykKPiAgIAlWTV9CVUdfT05fRk9M SU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pOwo+ICAgCVZNX0JVR19PTl9GT0xJTygh Zm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7Cj4gICAKPiArCWlmIChscnVfZ2VuX2Vu YWJsZWQoKSkKPiArCQlyZXR1cm4gbHJ1X2dlbl9ldmljdGlvbihmb2xpbyk7Cj4gKwo+ICAgCWxy dXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHRhcmdldF9tZW1jZywgcGdkYXQpOwo+ICAgCS8qIFhY WDogdGFyZ2V0X21lbWNnIGNhbiBiZSBOVUxMLCBnbyB0aHJvdWdoIGxydXZlYyAqLwo+ICAgCW1l bWNnaWQgPSBtZW1fY2dyb3VwX2lkKGxydXZlY19tZW1jZyhscnV2ZWMpKTsKPiAgIAlldmljdGlv biA9IGF0b21pY19sb25nX3JlYWQoJmxydXZlYy0+bm9ucmVzaWRlbnRfYWdlKTsKPiArCWV2aWN0 aW9uID4+PSBidWNrZXRfb3JkZXI7Cj4gICAJd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1 dmVjLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwo+ICAgCXJldHVybiBwYWNrX3NoYWRvdyhtZW1j Z2lkLCBwZ2RhdCwgZXZpY3Rpb24sCj4gICAJCQkJZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlv KSk7Cj4gQEAgLTI5OCw3ICs0MDcsMTMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0 IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQo+ICAgCWludCBtZW1jZ2lkOwo+ICAgCWxvbmcg bnI7Cj4gICAKPiArCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkgewo+ICsJCWxydV9nZW5fcmVmYXVs dChmb2xpbywgc2hhZG93KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICAgCXVucGFja19zaGFk b3coc2hhZG93LCAmbWVtY2dpZCwgJnBnZGF0LCAmZXZpY3Rpb24sICZ3b3JraW5nc2V0KTsKPiAr CWV2aWN0aW9uIDw8PSBidWNrZXRfb3JkZXI7Cj4gICAKPiAgIAlyY3VfcmVhZF9sb2NrKCk7Cj4g ICAJLyoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps aW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1hcm0ta2VybmVsCg==