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 67978C61DA4 for ; Wed, 15 Mar 2023 15:16:37 +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=E38IZhZRnYWwXEBWS5PA7LJ01mRxbju8zbno2mbxdyo=; b=QFAGb6K4ZgT51M EmpHcRIlWoYlCRS6aP7liWZrM+IOW2IbZ5yBwxKvyM7exbiu/muCrNym92q84VRyA+EAxdK+6+9Ik kQva+HVS58/glxtTURidW6jRMoFrFZKGjJYLwKA9unaCBfBOP7nx9g9jnnXKsvhc7769z9rwzAjLK YrhwVEE352psnZvm78KFBx/n5OQTSCVeHYzQvlnKBH25VFdOU0YOn524vYIxNeL4tQnMvCf8AFX+B gFUtKy9S4prXriNTXToITwv+tS5ICK1XKqSFtawPvc4jpK7CHTiYIvl+b+yN58OlMJ6k76VSANYsP QO2Wzge+MT+y2stiofNQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pcSqi-00DpkF-0n; Wed, 15 Mar 2023 15:15:32 +0000 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pcSlL-00Dkua-0H for linux-arm-kernel@lists.infradead.org; Wed, 15 Mar 2023 15:10:08 +0000 Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32FAVgWi020435; Wed, 15 Mar 2023 15:09:21 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=qcppdkim1; bh=o0IGDEH6oHIEAziyMAY+fljaIaIruWV/0diN85kwtqg=; b=Lt3slHtMH8ns+qnrryioMizG7jROBxu9q07qh7tRIxs2fqfwSVOdtNcDbxWTYoVGBp9N j3lSM9Wi4WBpv94lYBMXsgkA+qQdtHIljz7qJFae+6ZjJeyXXnClvIU2pDhPrGZr42TD vp8nnXf/qlgcnPRjnc/t7f6h9G1l+4jSX0DpZzJifG/fsxSTIFd/Dn/3B3g2gDTedPlX SNpMLsJWPDf5umunFXL5Va7rgl5mP8OcSpbdWL+YlULUFZBs4jvF0v/RmD7CdFzKUm2/ MEuo5vGsmvNjlSmEMrG8mpxHAy1wTTl53blTk0Q9Lu4wsg0XdxCHYDWDhP6MDh75FI+1 Hw== Received: from nasanppmta03.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3pb2c89y81-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 15 Mar 2023 15:09:20 +0000 Received: from nasanex01c.na.qualcomm.com (nasanex01c.na.qualcomm.com [10.45.79.139]) by NASANPPMTA03.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 32FF9KHh022004 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 15 Mar 2023 15:09:20 GMT Received: from [10.216.36.238] (10.80.80.8) by nasanex01c.na.qualcomm.com (10.45.79.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Wed, 15 Mar 2023 08:09:14 -0700 Message-ID: Date: Wed, 15 Mar 2023 20:39:10 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: Re: [RFC PATCH 3/6] soc: qcom: Add Qualcomm minidump kernel driver Content-Language: en-US To: Srinivas Kandagatla , , , , , , , , CC: , , , , References: <1676978713-7394-1-git-send-email-quic_mojha@quicinc.com> <1676978713-7394-4-git-send-email-quic_mojha@quicinc.com> <00b37174-f19e-ce59-b520-304891f6e2ef@linaro.org> From: Mukesh Ojha In-Reply-To: <00b37174-f19e-ce59-b520-304891f6e2ef@linaro.org> X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nasanex01c.na.qualcomm.com (10.45.79.139) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: kBjOx0cqD4KbR6xUV8pMT4yjHfAk0H1S X-Proofpoint-ORIG-GUID: kBjOx0cqD4KbR6xUV8pMT4yjHfAk0H1S X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-03-15_08,2023-03-15_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 mlxscore=0 suspectscore=0 mlxlogscore=999 clxscore=1015 malwarescore=0 lowpriorityscore=0 adultscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2302240000 definitions=main-2303150127 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230315_080959_295965_B4B66B1B X-CRM114-Status: GOOD ( 38.69 ) 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 VGhhbmtzIFNyaW5pdmFzIGZvciB0aGUgcmV2aWV3IGFuZCBzdWdnZXN0aW9ucy4KCkkgd2lsbCB0 cnkgdG8gYWRkcmVzcyBtb3N0IG9mIHRoZSBjb21tZW50cyBpbiB0aGUgbmV4dCB2ZXJzaW9uLgoK VGhlcmUgaXMgb25lIHRoaW5nLCBpIHdvdWxkIGxpa2UgdG8gaGlnaGxpZ2h0IGFuZCBzZWVraW5n IHN1Z2dlc3Rpb24Kb24gZG9pbmcgdGhlIHJpZ2h0IHdheSB0byBkbyBpdC4gV2Ugd2FudGVkIGFu eSBjb3JlIGtlcm5lbCBjbGllbnRzCnNob3VsZCBiZSBhYmxlIHRvIHJlZ2lzdGVyIHdpdGggbWlu aWR1bXA7IHNheSBmb3IgZXhhbXBsZSB0byBjb2xsZWN0CnNjaGVkIGluZm8vbWVtc3RhdHMvaXJx c3RhdHMgYW5kIGl0IGNvdWxkIGJlIGFueSBkZWJ1ZyByZWxhdGVkIGRhdGEKd2hpY2ggY291bGQg YmUgaGVscGZ1bCBmb3IgcG9zdG1vcnRlbSBkZWJ1Z2dpbmcuCgpCdXQgZm9yIHRoYXQgSSBjb3Vs ZCBub3QgYWRkIHFjb21fbWluaWR1bXBfcmVhZHkoKSBhbmQgCnFjb21fbWluaWR1bXBfYWRkX3Jl Z2lvbigpIGluIGNvcmUga2VybmVsLgoKT25lIHBvc3NpYmxlIHdheSB0byBjYWNoZSB0aGUgcmVn aXN0cmF0aW9uIG9mIHRoZQpjbGllbnQgaW4gbWluaWR1bXAgZHJpdmVyIGFuZCBkbyBhbGwgdGhl IHJlZ2lzdHJhdGlvbiBvbmNlIG1pbmlkdW1wCmlzIHJlYWR5LgoKCkFueSBzdWdnZXN0aW9uID8K Ck9uIDMvOS8yMDIzIDE6NTIgQU0sIFNyaW5pdmFzIEthbmRhZ2F0bGEgd3JvdGU6Cj4gCj4gCj4g T24gMjEvMDIvMjAyMyAxMToyNSwgTXVrZXNoIE9qaGEgd3JvdGU6Cj4+IE1pbmlkdW1wIGlzIGEg YmVzdCBlZmZvcnQgbWVjaGFuaXNtIHRvIGNvbGxlY3QgdXNlZnVsIGFuZCBwcmVkZWZpbmVkCj4+ IGRhdGEgZm9yIGZpcnN0IGxldmVsIG9mIGRlYnVnZ2luZyBvbiBlbmQgdXNlciBkZXZpY2VzIHJ1 bm5pbmcgb24KPj4gUXVhbGNvbW0gU29Dcy4gSXQgaXMgYnVpbHQgb24gdGhlIHByZW1pc2UgdGhh dCBTeXN0ZW0gb24gQ2hpcCAoU29DKQo+PiBvciBzdWJzeXN0ZW0gcGFydCBvZiBTb0MgY3Jhc2hl cywgZHVlIHRvIGEgcmFuZ2Ugb2YgaGFyZHdhcmUgYW5kCj4+IHNvZnR3YXJlIGJ1Z3MuIEhlbmNl LCB0aGUgYWJpbGl0eSB0byBjb2xsZWN0IGFjY3VyYXRlIGRhdGEgaXMgb25seQo+PiBhIGJlc3Qt ZWZmb3J0LiBUaGUgZGF0YSBjb2xsZWN0ZWQgY291bGQgYmUgaW52YWxpZCBvciBjb3JydXB0ZWQs Cj4+IGRhdGEgY29sbGVjdGlvbiBpdHNlbGYgY291bGQgZmFpbCwgYW5kIHNvIG9uLgo+Pgo+PiBR dWFsY29tbSBkZXZpY2VzIGluIGVuZ2luZWVyaW5nIG1vZGUgcHJvdmlkZXMgYSBtZWNoYW5pc20g Zm9yCj4+IGdlbmVyYXRpbmcgZnVsbCBzeXN0ZW0gcmFtZHVtcHMgZm9yIHBvc3QgbW9ydGVtIGRl YnVnZ2luZy4gQnV0IGluIHNvbWUKPj4gY2FzZXMgaXQncyBob3dldmVyIG5vdCBmZWFzaWJsZSB0 byBjYXB0dXJlIHRoZSBlbnRpcmUgY29udGVudCBvZiBSQU0uCj4+IFRoZSBtaW5pZHVtcCBtZWNo YW5pc20gcHJvdmlkZXMgdGhlIG1lYW5zIGZvciBzZWxlY3RpbmcgcmVnaW9uIHNob3VsZAo+PiBi ZSBpbmNsdWRlZCBpbiB0aGUgcmFtZHVtcC4gVGhlIHNvbHV0aW9uIHN1cHBvcnRzIGV4dHJhY3Rp bmcgdGhlCj4+IHJhbWR1bXAvbWluaWR1bXAgcHJvZHVjZWQgZWl0aGVyIG92ZXIgVVNCIG9yIHN0 b3JlZCB0byBhbiBhdHRhY2hlZAo+PiBzdG9yYWdlIGRldmljZS4KPj4KPj4gVGhlIGNvcmUgb2Yg bWluaWR1bXAgZmVhdHVyZSBpcyBwYXJ0IG9mIFF1YWxjb21tJ3MgYm9vdCBmaXJtd2FyZSBjb2Rl Lgo+PiBJdCBpbml0aWFsaXplcyBzaGFyZWQgbWVtb3J5KFNNRU0pLCB3aGljaCBpcyBhIHBhcnQg b2YgRERSIGFuZAo+PiBhbGxvY2F0ZXMgYSBzbWFsbCBzZWN0aW9uIG9mIGl0IHRvIG1pbmlkdW1w IHRhYmxlIGkuZSBhbHNvIGNhbGxlZAo+PiBnbG9iYWwgdGFibGUgb2YgY29udGVudCAoRy1Ub0Mp LiBFYWNoIHN1YnN5c3RlbSAoQVBTUywgQURTUCwgLi4uKSBoYXMKPj4gdGhlaXIgb3duIHRhYmxl IG9mIHNlZ21lbnRzIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBtaW5pZHVtcCwgYWxsCj4+IHJlZmVy ZW5jZXMgZnJvbSBhIGRlc2NyaXB0b3IgaW4gU01FTSAoRy1Ub0MpLiBFYWNoIHNlZ21lbnQvcmVn aW9uIGhhcwo+PiBzb21lIGRldGFpbHMgbGlrZSBuYW1lLCBwaHlzaWNhbCBhZGRyZXNzIGFuZCBp dCdzIHNpemUgZXRjLiBhbmQgaXQKPj4gY291bGQgYmUgYW55d2hlcmUgc2NhdHRlcmVkIGluIHRo ZSBERFIuCj4+Cj4+IE1pbmlkdW1wIGtlcm5lbCBkcml2ZXIgYWRkcyB0aGUgY2FwYWJpbGl0eSB0 byBhZGQgbGludXggcmVnaW9uIHRvIGJlCj4+IGR1bXBlZCBhcyBwYXJ0IG9mIHJhbSBkdW1wIGNv bGxlY3Rpb24uIEl0IHByb3ZpZGVzIGFwcHJvcHJpYXRlIHN5bWJvbAo+PiB0byBjaGVjayBpdHMg ZW5hYmxlbWVudCBhbmQgcmVnaXN0ZXIgY2xpZW50IHJlZ2lvbnMuCj4+Cj4+IFRvIHNpbXBsaWZ5 IHBvc3QgbW9ydGVtIGRlYnVnZ2luZywgaXQgY3JlYXRlcyBhbmQgbWFpbnRhaW4gYW4gRUxGCj4+ IGhlYWRlciBhcyBmaXJzdCByZWdpb24gdGhhdCBnZXRzIHVwZGF0ZWQgd2l0aCB1cG9uIHJlZ2lz dHJhdGlvbgo+PiBvZiBhIG5ldyByZWdpb24uCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IE11a2VzaCBP amhhIDxxdWljX21vamhhQHF1aWNpbmMuY29tPgo+PiAtLS0KPj4gwqAgZHJpdmVycy9zb2MvcWNv bS9LY29uZmlnwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTQgKysKPj4gwqAgZHJpdmVycy9zb2MvcWNv bS9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+PiDCoCBkcml2ZXJzL3NvYy9xY29t L3Fjb21fbWluaWR1bXAuYyB8IDQ5MCAKPj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPj4gwqAgaW5jbHVkZS9zb2MvcWNvbS9taW5pZHVtcC5owqDCoMKgwqDCoCB8 wqAgNDAgKysrKwo+PiDCoCBpbmNsdWRlL3NvYy9xY29tL3Fjb21fbWluaWR1bXAuaCB8wqAgMjQg Ky0KPj4gwqAgNSBmaWxlcyBjaGFuZ2VkLCA1NjggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zb2MvcWNvbS9xY29tX21pbmlkdW1w LmMKPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvc29jL3Fjb20vbWluaWR1bXAuaAo+ Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvcWNvbS9LY29uZmlnIGIvZHJpdmVycy9zb2Mv cWNvbS9LY29uZmlnCj4+IGluZGV4IGFlNTA0YzQuLjBmYzc2OTggMTAwNjQ0Cj4+IC0tLSBhL2Ry aXZlcnMvc29jL3Fjb20vS2NvbmZpZwo+PiArKysgYi9kcml2ZXJzL3NvYy9xY29tL0tjb25maWcK Pj4gQEAgLTI0OCw0ICsyNDgsMTggQEAgY29uZmlnIFFDT01fSUNDX0JXTU9OCj4+IMKgwqDCoMKg wqDCoMKgIHRoZSBmaXhlZCBiYW5kd2lkdGggdm90ZXMgZnJvbSBjcHVmcmVxIChDUFUgbm9kZXMp IHRodXMgCj4+IGFjaGlldmUgaGlnaAo+PiDCoMKgwqDCoMKgwqDCoCBtZW1vcnkgdGhyb3VnaHB1 dCBldmVuIHdpdGggbG93ZXIgQ1BVIGZyZXF1ZW5jaWVzLgo+PiArY29uZmlnIFFDT01fTUlOSURV TVAKPj4gK8KgwqDCoCBib29sICJRQ09NIE1pbmlkdW1wIFN1cHBvcnQiCj4gCj4gV2h5IGNhbid0 IHRoaXMgYmUgYSBtb2R1bGU/CgpZZXMsIGl0IGNhbiBiZS4uCgo+IAo+IAo+PiArwqDCoMKgIGRl cGVuZHMgb24gQVJDSF9RQ09NIHx8IENPTVBJTEVfVEVTVAo+PiArwqDCoMKgIGRlcGVuZHMgb24g UUNPTV9TTUVNCj4+ICvCoMKgwqAgaGVscAo+PiArwqDCoMKgwqDCoCBFbmFibGVtZW50IG9mIGNv cmUgbWluaWR1bXAgZmVhdHVyZSBpcyBjb250cm9sbGVkIGZyb20gYm9vdCAKPj4gZmlybXdhcmUK Pj4gK8KgwqDCoMKgwqAgc2lkZSwgYW5kIHRoaXMgY29uZmlnIGFsbG93IGxpbnV4IHRvIHF1ZXJ5 IGFuZCBtYW5hZ2VzIEFQUFMgCj4+IG1pbmlkdW1wCj4+ICvCoMKgwqDCoMKgIHRhYmxlLgo+PiAr Cj4+ICvCoMKgwqDCoMKgIENsaWVudCBkcml2ZXJzIGNhbiByZWdpc3RlciB0aGVpciBpbnRlcm5h bCBkYXRhIHN0cnVjdHVyZXMgYW5kIAo+PiBkZWJ1Zwo+PiArwqDCoMKgwqDCoCBtZXNzYWdlcyBh cyBwYXJ0IG9mIHRoZSBtaW5pZHVtcCByZWdpb24gYW5kIHdoZW4gdGhlIFNvQyBpcyAKPj4gY3Jh c2hlZCwKPj4gK8KgwqDCoMKgwqAgdGhlc2Ugc2VsZWN0aXZlIHJlZ2lvbnMgd2lsbCBiZSBkdW1w ZWQgaW5zdGVhZCBvZiB0aGUgZW50aXJlIEREUi4KPj4gK8KgwqDCoMKgwqAgVGhpcyBzYXZlcyBz aWduaWZpY2FudCBhbW91bnQgb2YgdGltZSBhbmQvb3Igc3RvcmFnZSBzcGFjZS4KPj4gKwo+PiDC oCBlbmRtZW51Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9xY29tL01ha2VmaWxlIGIvZHJp dmVycy9zb2MvcWNvbS9NYWtlZmlsZQo+PiBpbmRleCBkNjY2MDRhLi5lMWZmNDkyIDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL3NvYy9xY29tL01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvc29jL3Fj b20vTWFrZWZpbGUKPj4gQEAgLTI5LDMgKzI5LDQgQEAgb2JqLSQoQ09ORklHX1FDT01fUlBNSFBE KSArPSBycG1ocGQubwo+PiDCoCBvYmotJChDT05GSUdfUUNPTV9SUE1QRCkgKz0gcnBtcGQubwo+ PiDCoCBvYmotJChDT05GSUdfUUNPTV9LUllPX0wyX0FDQ0VTU09SUykgKz3CoMKgwqAga3J5by1s Mi1hY2Nlc3NvcnMubwo+PiDCoCBvYmotJChDT05GSUdfUUNPTV9JQ0NfQldNT04pwqDCoMKgICs9 IGljYy1id21vbi5vCj4+ICtvYmotJChDT05GSUdfUUNPTV9NSU5JRFVNUCkgKz0gcWNvbV9taW5p ZHVtcC5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9xY29tL3Fjb21fbWluaWR1bXAuYyAK Pj4gYi9kcml2ZXJzL3NvYy9xY29tL3Fjb21fbWluaWR1bXAuYwo+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+PiBpbmRleCAwMDAwMDAwLi5lYjYzYjc1Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIv ZHJpdmVycy9zb2MvcWNvbS9xY29tX21pbmlkdW1wLmMKPj4gQEAgLTAsMCArMSw0OTAgQEAKPj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPj4gKwo+PiArLyoKPj4g KyAqIENvcHlyaWdodCAoYykgMjAyMyBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBB bGwgcmlnaHRzIAo+PiByZXNlcnZlZC4KPj4gKyAqLwo+PiArCj4+ICsjZGVmaW5lIHByX2ZtdChm bXQpICJNaW5pZHVtcDogIiBmbXQKPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4K Pj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgo+ PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L3ByaW50ay5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3NvYy9xY29tL3Nt ZW0uaD4KPj4gKyNpbmNsdWRlIDxzb2MvcWNvbS9xY29tX21pbmlkdW1wLmg+Cj4+ICsjaW5jbHVk ZSA8c29jL3Fjb20vbWluaWR1bXAuaD4KPj4gKwo+PiArLyoqCj4+ICsgKiBET0M6IE92ZXJ2aWV3 Cj4+ICsgKgo+PiArICrCoMKgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKPj4gKyAqwqDCoCB8wqDCoCBERFLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCArLS0tLS0tLS0tLS0tLSvCoMKgIHwKPj4gKyAqwqDCoCB8wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKg wqDCoMKgwqAgU1MwLVRvQ3zCoMKgIHwKPj4gKyAqwqDCoCB8ICstLS0tLS0tLS0tLS0tLS0tK8Kg wqDCoMKgICstLS0tLS0tLS0tLS0tLS0tKyB8wqDCoCB8Cj4+ICsgKsKgwqAgfCB8U2hhcmVkIG1l bW9yecKgwqAgfMKgwqDCoMKgIHzCoMKgwqDCoMKgwqDCoMKgIFNTMS1Ub0N8IHzCoMKgIHwKPj4g KyAqwqDCoCB8IHwoU01FTSnCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoMKgIHzCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfCB8wqDCoCB8Cj4+ICsgKsKgwqAgfCB8wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHwgKy0tPnwtLS0tLS0tLSvCoMKgwqDCoMKgwqAgfCB8wqDCoCB8 Cj4+ICsgKsKgwqAgfCB8Ry1Ub0PCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IHzCoMKgIHwgU1MtVG9D wqAgXMKgwqDCoMKgwqAgfCB8wqDCoCB8Cj4+ICsgKsKgwqAgfCB8Ky0tLS0tLS0tLS0tLS0rIHwg fMKgwqAgfCArLS0tLS0tLS0tLS0rwqAgfCB8wqDCoCB8Cj4+ICsgKsKgwqAgfCB8fC0tLS0tLS0t LS0tLS18IHwgfMKgwqAgfCB8LS0tLS0tLS0tLS18wqAgfCB8wqDCoCB8Cj4+ICsgKsKgwqAgfCB8 fCBTUzAtVG9DwqDCoMKgwqAgfCB8IHwgKy18PHxTUzEgcmVnaW9uMXzCoCB8IHzCoMKgIHwKPj4g KyAqwqDCoCB8IHx8LS0tLS0tLS0tLS0tLXwgfCB8IHwgfCB8LS0tLS0tLS0tLS18wqAgfCB8wqDC oCB8Cj4+ICsgKsKgwqAgfCB8fCBTUzEtVG9DwqDCoMKgwqAgfC18PisgfCB8IHxTUzEgcmVnaW9u MnzCoCB8IHzCoMKgIHwKPj4gKyAqwqDCoCB8IHx8LS0tLS0tLS0tLS0tLXwgfMKgwqAgfCB8IHwt LS0tLS0tLS0tLXzCoCB8IHzCoMKgIHwKPj4gKyAqwqDCoCB8IHx8IFNTMi1Ub0PCoMKgwqDCoCB8 IHzCoMKgIHwgfCB8wqAgLi4uwqDCoMKgwqDCoCB8wqAgfCB8wqDCoCB8Cj4+ICsgKsKgwqAgfCB8 fC0tLS0tLS0tLS0tLS18IHzCoMKgIHwgfCB8LS0tLS0tLS0tLS18wqAgfCB8wqDCoCB8Cj4+ICsg KsKgwqAgfCB8fMKgIC4uLsKgwqDCoMKgwqDCoMKgIHwgfMKgwqAgfC18PHxTUzEgcmVnaW9uTnzC oCB8IHzCoMKgIHwKPj4gKyAqwqDCoCB8IHx8LS0tLS0tLS0tLS0tLXwgfMKgwqAgfCB8IHwtLS0t LS0tLS0tLXzCoCB8IHzCoMKgIHwKPj4gKyAqwqDCoCB8IHx8IFNTbi1Ub0PCoMKgwqDCoCB8IHzC oMKgIHwgfCArLS0tLS0tLS0tLS0rwqAgfCB8wqDCoCB8Cj4+ICsgKsKgwqAgfCB8Ky0tLS0tLS0t LS0tLS0rIHzCoMKgIHwgfMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IHzCoMKgIHwK Pj4gKyAqwqDCoCB8IHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgfCB8LS0t LS0tLS0tLS0tLS0tLXwgfMKgwqAgfAo+PiArICrCoMKgIHwgfMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB8wqDCoCArPnzCoCByZWdpb25OwqDCoMKgwqDCoMKgIHwgfMKgwqAgfAo+PiAr ICrCoMKgIHwgfMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCB8IHwtLS0tLS0t LS0tLS0tLS0tfCB8wqDCoCB8Cj4+ICsgKsKgwqAgfCArLS0tLS0tLS0tLS0tLS0tLSvCoMKgIHwg fMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IHzCoMKgIHwKPj4gKyAqwqDCoCB8wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgfC0tLS0tLS0tLS0tLS0t LS18IHzCoMKgIHwKPj4gKyAqwqDCoCB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICs+fMKgIHJlZ2lvbjHCoMKgwqDCoMKgwqAgfCB8wqDCoCB8Cj4+ICsgKsKgwqAg fMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfC0tLS0tLS0t LS0tLS0tLS18IHzCoMKgIHwKPj4gKyAqwqDCoCB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgfMKg wqAgfAo+PiArICrCoMKgIHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHwtLS0tLS0tLS0tLS0tLS0tfC0rwqDCoCB8Cj4+ICsgKsKgwqAgfMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIHJlZ2lvbjXCoMKgwqDCoMKg wqAgfMKgwqDCoMKgIHwKPj4gKyAqwqDCoCB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB8LS0tLS0tLS0tLS0tLS0tLXzCoMKgwqDCoCB8Cj4+ICsgKsKgwqAg fMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoMKgwqAgfAo+PiArICrCoMKgIHzCoCBSZWdpb24g aW5mb3JtYXRpb27CoMKgwqAgKy0tLS0tLS0tLS0tLS0tLS0rwqDCoMKgwqAgfAo+PiArICrCoMKg IHwgKy0tLS0tLS0tLS0tLS0tLSvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB8Cj4+ICsgKsKgwqAgfCB8cmVnaW9uIG5hbWXCoMKgwqAgfMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwK Pj4gKyAqwqDCoCB8IHwtLS0tLS0tLS0tLS0tLS18wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfAo+PiArICrCoMKgIHwgfHJlZ2lvbiBhZGRy ZXNzIHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB8Cj4+ICsgKsKgwqAgfCB8LS0tLS0tLS0tLS0tLS0tfMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwKPj4gKyAqwqDCoCB8IHxyZWdp b24gc2l6ZcKgwqDCoCB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfAo+PiArICrCoMKgIHwgKy0tLS0tLS0tLS0tLS0tLSvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8Cj4+ICsgKsKg wqAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+PiAr ICrCoMKgwqDCoMKgwqAgRy1Ub0M6IEdsb2JhbCB0YWJsZSBvZiBjb250ZW50Cj4+ICsgKsKgwqDC oMKgwqDCoCBTUy1Ub0M6IFN1YnN5c3RlbSB0YWJsZSBvZiBjb250ZW50Cj4+ICsgKsKgwqDCoMKg wqDCoCBTUzAtU1NuOiBTdWJzeXN0ZW0gbnVtYmVyZWQgZnJvbSAwIHRvIG4KPj4gKyAqCj4+ICsg KiBUaGUgY29yZSBvZiBtaW5pZHVtcCBmZWF0dXJlIGlzIHBhcnQgb2YgUXVhbGNvbW0ncyBib290 IGZpcm13YXJlIAo+PiBjb2RlLgo+PiArICogSXQgaW5pdGlhbGl6ZXMgc2hhcmVkIG1lbW9yeShT TUVNKSwgd2hpY2ggaXMgYSBwYXJ0IG9mIEREUiBhbmQKPj4gKyAqIGFsbG9jYXRlcyBhIHNtYWxs IHNlY3Rpb24gb2YgaXQgdG8gbWluaWR1bXAgdGFibGUgaS5lIGFsc28gY2FsbGVkCj4+ICsgKiBn bG9iYWwgdGFibGUgb2YgY29udGVudCAoRy1Ub0MpLgo+PiArICoKPj4gKyAqIEVhY2ggc3Vic3lz dGVtIChBUFNTLCBBRFNQLCAuLi4pIGhhcyB0aGVpciBvd24gdGFibGUgb2Ygc2VnbWVudHMgCj4+ IHRvIGJlCj4+ICsgKiBpbmNsdWRlZCBpbiB0aGUgbWluaWR1bXAsIGFsbCByZWZlcmVuY2VzIGZy b20gYSBkZXNjcmlwdG9yIGluIFNNRU0KPj4gKyAqIChHLVRvQykuIEVhY2ggc2VnbWVudC9yZWdp b24gaGFzIHNvbWUgZGV0YWlscyBsaWtlIG5hbWUsIHBoeXNpY2FsCj4+ICsgKiBhZGRyZXNzIGFu ZCBpdCdzIHNpemUgZXRjLiBhbmQgaXQgY291bGQgYmUgYW55d2hlcmUgc2NhdHRlcmVkCj4+ICsg KiBpbiB0aGUgRERSLgo+PiArICoKPj4gKyAqIFF1YWxjb21tIFNvQ3Mgc3VwcG9ydHMgZXh0cmFj dGluZyB0aGUgcmFtZHVtcC9taW5pZHVtcCBwcm9kdWNlZAo+PiArICogZWl0aGVyIG92ZXIgVVNC IG9yIHN0b3JlZCB0byBhbiBhdHRhY2hlZCBzdG9yYWdlIGRldmljZS4KPj4gKyAqCj4gQXJlIHRo ZXJlIGFueSB1c2Vyc3BhY2UgdG9vbHMgdG8gcGFyc2UgdGhlc2UgZHVtcHM/Cj4gCj4gSG93IGNh biBzb21lb25lIGNvbGxlY3QgbWluaWR1bXAgYW5kIHVzZSB0aGlzIGluIHVwc3RyZWFtIHNldHVw LCBkbyB5b3UgCj4gaGF2ZSBhbnkgcXVpY2sgZ3VpZGUgdG8gZG8gdGhpcz8KClNvLCB3aWxsIHRy eSB0byBhZGQgaW4gdjIuCgo+IAo+PiArICovCj4+ICsKPj4gKy8qKgo+PiArICogc3RydWN0IG1p bmlkdW1wX2VsZmhkciAtIE1pbmlkdW1wIHRhYmxlIGVsZiBoZWFkZXIKPj4gKyAqIEBlaGRyOiBF bGYgbWFpbiBoZWFkZXIKPj4gKyAqIEBzaGRyOiBTZWN0aW9uIGhlYWRlcgo+PiArICogQHBoZHI6 IFByb2dyYW0gaGVhZGVyCj4+ICsgKiBAZWxmX29mZnNldDogU2VjdGlvbiBvZmZzZXQgaW4gZWxm Cj4+ICsgKiBAc3RydGFibGVfaWR4OiBTdHJpbmcgdGFibGUgY3VycmVudCBpbmRleCBwb3NpdGlv bgo+PiArICovCj4+ICtzdHJ1Y3QgbWluaWR1bXBfZWxmaGRyIHsKPj4gK8KgwqDCoCBzdHJ1Y3Qg ZWxmaGRywqDCoMKgwqDCoMKgwqAgKmVoZHI7Cj4+ICvCoMKgwqAgc3RydWN0IGVsZl9zaGRywqDC oMKgwqDCoMKgwqAgKnNoZHI7Cj4+ICvCoMKgwqAgc3RydWN0IGVsZl9waGRywqDCoMKgwqDCoMKg wqAgKnBoZHI7Cj4+ICvCoMKgwqAgc2l6ZV90wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbGZfb2Zm c2V0Owo+PiArwqDCoMKgIHNpemVfdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydGFibGVfaWR4 Owo+PiArfTsKPj4gKwo+PiArLyoqCj4+ICsgKiBzdHJ1Y3QgbWluaWR1bXAgLSBNaW5pZHVtcCBk cml2ZXIgcHJpdmF0ZSBkYXRhCj4+ICsgKiBAbWRfZ2JsX3RvY8KgwqDCoMKgIDogR2xvYmFsIFRP QyBwb2ludGVyCj4+ICsgKiBAbWRfc3NfdG9jwqDCoMKgwqAgOiBIaWdoIGxldmVsIE9TIFRPQyBw b2ludGVyCj4+ICsgKiBAbWRfcmVnaW9uc8KgwqDCoMKgIDogSGlnaCBsZXZlbCBPUyByZWdpb24g YmFzZSBwb2ludGVyCj4+ICsgKiBAZWxmwqDCoMKgwqDCoMKgwqDCoCA6IE1pbmlkdW1wIGVsZiBo ZWFkZXIKPj4gKyAqLwo+PiArc3RydWN0IG1pbmlkdW1wIHsKPj4gK8KgwqDCoCBzdHJ1Y3QgbWlu aWR1bXBfZ2xvYmFsX3RvY8KgwqDCoCAqbWRfZ2JsX3RvYzsKPiAKPiBUb3RhbGx5IHVudXNlZC4K ClllcywgdW51c2VkIGF0IHRoaXMgcG9pbnQsIGxldCBtZSB1c2UgdGhpcyB3aXRoIHlvdXIgYmVs b3cgc3VnZ2VzdGlvbi4KCj4gCj4+ICvCoMKgwqAgc3RydWN0IG1pbmlkdW1wX3N1YnN5c3RlbcKg wqDCoCAqbWRfc3NfdG9jOwo+PiArwqDCoMKgIHN0cnVjdCBtaW5pZHVtcF9yZWdpb27CoMKgwqDC oMKgwqDCoCAqbWRfcmVnaW9uczsKPj4gK8KgwqDCoCBzdHJ1Y3QgbWluaWR1bXBfZWxmaGRywqDC oMKgwqDCoMKgwqAgZWxmOwo+PiArfTsKPj4gKwo+PiArLyoKPj4gKyAqIEluIHNvbWUgb2YgdGhl IE9sZCBRdWFsY29tbSBkZXZpY2VzLCBib290IGZpcm13YXJlIHN0YXRpY2FsbHkgCj4+IGFsbG9j YXRlcyAzMDAKPj4gKyAqIGFzIHRvdGFsIG51bWJlciBvZiBzdXBwb3J0ZWQgcmVnaW9uIChpbmNs dWRpbmcgYWxsIGNvLXByb2Nlc3NvcnMpIGluCj4+ICsgKiBtaW5pZHVtcCB0YWJsZSBvdXQgb2Yg d2hpY2ggbGludXggd2FzIHVzaW5nIDIwMC4gSW4gZnV0dXJlLCB0aGlzIAo+PiBsaW1pdGF0aW9u Cj4+ICsgKiBmcm9tIGJvb3QgZmlybXdhcmUgbWlnaHQgZ2V0IHJlbW92ZWQgYnkgYWxsb2NhdGlu ZyB0aGUgcmVnaW9uIAo+PiBkeW5hbWljYWxseS4KPj4gKyAqIFNvLCBrZWVwIGl0IGNvbXBhdGli bGUgd2l0aCBvbGRlciBkZXZpY2VzLCB3ZSBjYW4gdGhlIGN1cnJlbnQgCj4+IGxpbWl0IGZvciBM aW51eAo+PiArICogdG8gMjAwLgo+PiArICovCj4+ICsjZGVmaW5lIE1BWF9OVU1fRU5UUklFU8Kg wqDCoMKgwqAgMjAwCj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgbWluaWR1bXAgbWluaWR1bXA7Cj4+ ICtzdGF0aWMgREVGSU5FX01VVEVYKG1pbmlkdW1wX2xvY2spOwo+PiArCj4gLi4uCj4gCj4+ICsv KiBVcGRhdGUgRUxGIGhlYWRlciAqLwo+PiArc3RhdGljIHZvaWQgbWluaWR1bXBfdXBkYXRlX2Vs Zl9oZWFkZXIoY29uc3Qgc3RydWN0IAo+PiBxY29tX21pbmlkdW1wX3JlZ2lvbiAqcmVnaW9uKQo+ PiArewo+PiArwqDCoMKgIHN0cnVjdCBlbGZoZHIgKmVoZHIgPSBtaW5pZHVtcC5lbGYuZWhkcjsK Pj4gK8KgwqDCoCBzdHJ1Y3QgZWxmX3NoZHIgKnNoZHI7Cj4+ICvCoMKgwqAgc3RydWN0IGVsZl9w aGRyICpwaGRyOwo+PiArCj4+ICvCoMKgwqAgc2hkciA9IGVsZl9zaGRyX2VudHJ5X2FkZHIoZWhk ciwgZWhkci0+ZV9zaG51bSsrKTsKPj4gK8KgwqDCoCBwaGRyID0gZWxmX3BoZHJfZW50cnlfYWRk cihlaGRyLCBlaGRyLT5lX3BobnVtKyspOwo+PiArCj4+ICvCoMKgwqAgc2hkci0+c2hfdHlwZSA9 IFNIVF9QUk9HQklUUzsKPj4gK8KgwqDCoCBzaGRyLT5zaF9uYW1lID0gYXBwZW5kX3N0cl90b19z dHJ0YWJsZShyZWdpb24tPm5hbWUpOwo+PiArwqDCoMKgIHNoZHItPnNoX2FkZHIgPSAoZWxmX2Fk ZHJfdClyZWdpb24tPnZpcnRfYWRkcjsKPj4gK8KgwqDCoCBzaGRyLT5zaF9zaXplID0gcmVnaW9u LT5zaXplOwo+PiArwqDCoMKgIHNoZHItPnNoX2ZsYWdzID0gU0hGX1dSSVRFOwo+PiArwqDCoMKg IHNoZHItPnNoX29mZnNldCA9IG1pbmlkdW1wLmVsZi5lbGZfb2Zmc2V0Owo+PiArwqDCoMKgIHNo ZHItPnNoX2VudHNpemUgPSAwOwo+PiArCj4+ICvCoMKgwqAgcGhkci0+cF90eXBlID0gUFRfTE9B RDsKPj4gK8KgwqDCoCBwaGRyLT5wX29mZnNldCA9IG1pbmlkdW1wLmVsZi5lbGZfb2Zmc2V0Owo+ PiArwqDCoMKgIHBoZHItPnBfdmFkZHIgPSAoZWxmX2FkZHJfdClyZWdpb24tPnZpcnRfYWRkcjsK Pj4gK8KgwqDCoCBwaGRyLT5wX3BhZGRyID0gcmVnaW9uLT5waHlzX2FkZHI7Cj4+ICvCoMKgwqAg cGhkci0+cF9maWxlc3ogPSBwaGRyLT5wX21lbXN6ID0gcmVnaW9uLT5zaXplOwo+PiArwqDCoMKg IHBoZHItPnBfZmxhZ3MgPSBQRl9SIHwgUEZfVzsKPj4gK8KgwqDCoCBtaW5pZHVtcC5lbGYuZWxm X29mZnNldCArPSBzaGRyLT5zaF9zaXplOwo+PiArfQo+PiArCj4+ICsvKiBBZGQgcmVnaW9uIGlu IHN1YnN5c3RlbSBUb0MgKi8KPj4gK3N0YXRpYyB2b2lkIG1pbmlkdW1wX3NzX2FkZF9yZWdpb24o Y29uc3Qgc3RydWN0IHFjb21fbWluaWR1bXBfcmVnaW9uIAo+PiAqcmVnaW9uKQo+PiArewo+PiAr wqDCoMKgIHN0cnVjdCBtaW5pZHVtcF9yZWdpb24gKm1kcjsKPj4gK8KgwqDCoCB1bnNpZ25lZCBp bnQgcmVnaW9uX2NudCA9IAo+PiBsZTMyX3RvX2NwdShtaW5pZHVtcC5tZF9zc190b2MtPnJlZ2lv bl9jb3VudCk7Cj4+ICsKPj4gK8KgwqDCoCBtZHIgPSAmbWluaWR1bXAubWRfcmVnaW9uc1tyZWdp b25fY250XTsKPj4gK8KgwqDCoCBzdHJzY3B5KG1kci0+bmFtZSwgcmVnaW9uLT5uYW1lLCBzaXpl b2YobWRyLT5uYW1lKSk7Cj4+ICvCoMKgwqAgbWRyLT5hZGRyZXNzID0gY3B1X3RvX2xlNjQocmVn aW9uLT5waHlzX2FkZHIpOwo+PiArwqDCoMKgIG1kci0+c2l6ZSA9IGNwdV90b19sZTY0KHJlZ2lv bi0+c2l6ZSk7Cj4+ICvCoMKgwqAgbWRyLT52YWxpZCA9IGNwdV90b19sZTMyKE1JTklEVU1QX1JF R0lPTl9WQUxJRCk7Cj4+ICvCoMKgwqAgcmVnaW9uX2NudCsrOwo+PiArwqDCoMKgIG1pbmlkdW1w Lm1kX3NzX3RvYy0+cmVnaW9uX2NvdW50ID0gY3B1X3RvX2xlMzIocmVnaW9uX2NudCk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBib29sIHFjb21fbWluaWR1bXBfdmFsaWRfcmVnaW9uKGNvbnN0IHN0 cnVjdCAKPj4gcWNvbV9taW5pZHVtcF9yZWdpb24gKnJlZ2lvbikKPj4gK3sKPj4gK8KgwqDCoCBy ZXR1cm4gcmVnaW9uICYmCj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJubGVuKHJlZ2lvbi0+bmFtZSwg TUFYX05BTUVfTEVOR1RIKSA8IE1BWF9OQU1FX0xFTkdUSCAmJgo+PiArwqDCoMKgwqDCoMKgwqAg cmVnaW9uLT52aXJ0X2FkZHIgJiYKPj4gK8KgwqDCoMKgwqDCoMKgIHJlZ2lvbi0+c2l6ZSAmJm1p bmlkdW1wCj4gCj4gbWluZHVtcCBpcyBzdGF0aWMgdmFyaWFibGUsIHdoeSBhcmUgd2UgY2hlY2tp bmcgZm9yIHRoaXM/CgpUaGlzIGlzIGEgbWlzdGFrZSBmcm9tIG15IHNpZGUsIGl0IHdhcyBub3Qg dGhlcmUgaW4gbXkgb3JpZ2luYWwgcGF0Y2guClRoYW5rcyBmb3IgY2F0Y2hpbmcgdGhpcy4KCj4g Cj4+ICvCoMKgwqDCoMKgwqDCoCBJU19BTElHTkVEKHJlZ2lvbi0+c2l6ZSwgNCk7Cj4gCj4gVGhp cyBmdW5jdGlvbiBsb29rcyB2ZXJ5IG11Y2ggdW5yZWFkYWJsZSwgY2FuIHdlIHJlYXJyYWdlIHRo aXMuCj4gCj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUgTUFYX1NUUlRCTF9TSVpFwqDCoMKgwqDCoMKg IChNQVhfTlVNX0VOVFJJRVMgKiBNQVhfUkVHSU9OX05BTUVfTEVOR1RIKQo+IAo+IHBsZWFzZSBt b3ZlIHRvIHRoZSB0b3AuCgo+IAo+PiArc3RhdGljIGludCBtaW5pZHVtcF9hZGRfZWxmX2hlYWRl cih2b2lkKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBxY29tX21pbmlkdW1wX3JlZ2lvbiBlbGZy ZWdpb247Cj4+ICvCoMKgwqAgc3RydWN0IGVsZmhkciAqZWhkcjsKPj4gK8KgwqDCoCBzdHJ1Y3Qg ZWxmX3NoZHIgKnNoZHI7Cj4+ICvCoMKgwqAgc3RydWN0IGVsZl9waGRyICpwaGRyOwo+PiArwqDC oMKgIHVuc2lnbmVkIGludMKgIGVsZmhfc2l6ZTsKPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgc3Ry dGJsX29mZjsKPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgcGhkcl9vZmY7Cj4+ICvCoMKgwqAgY2hh ciAqYmFubmVyOwo+PiArwqDCoMKgIHVuc2lnbmVkIGludCBiYW5uZXJfbGVuOwo+PiArCj4+ICvC oMKgwqAgYmFubmVyX2xlbiA9IHN0cmxlbihsaW51eF9iYW5uZXIpOwo+PiArwqDCoMKgIC8qCj4+ ICvCoMKgwqDCoCAqIEhlYWRlciBidWZmZXIgY29udGFpbnM6Cj4+ICvCoMKgwqDCoCAqIEVMRiBo ZWFkZXIsIChNQVhfTlVNX0VOVFJJRVMgKyA0KSBvZiBTZWN0aW9uIGFuZCBQcm9ncmFtIEVMRiAK Pj4gaGVhZGVycywKPj4gK8KgwqDCoMKgICogd2hlcmUsIDQgYWRkaXRpb25hbCBlbnRyaWVzLCBv bmUgZm9yIGVtcHR5IGhlYWRlciwgb25lIGZvciAKPj4gc3RyaW5nIHRhYmxlCj4+ICvCoMKgwqDC oCAqIG9uZSBmb3IgbWluaWR1bXAgdGFibGUgYW5kIG9uZSBmb3IgbGludXggYmFubmVyLgo+PiAr wqDCoMKgwqAgKgo+PiArwqDCoMKgwqAgKiBMaW51eCBiYW5uZXIgaXMgc3RvcmVkIGluIG1pbmlk dW1wIHRvIGFpZCBwb3N0IG1vcnRlbSB0b29scyB0byAKPj4gZGV0ZXJtaW5lCj4+ICvCoMKgwqDC oCAqIHRoZSBrZXJuZWwgdmVyc2lvbi4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgZWxmaF9z aXplID0gc2l6ZW9mKCplaGRyKTsKPj4gK8KgwqDCoCBlbGZoX3NpemUgKz0gTUFYX1NUUlRCTF9T SVpFOwo+PiArwqDCoMKgIGVsZmhfc2l6ZSArPSBiYW5uZXJfbGVuICsgMTsKPj4gK8KgwqDCoCBl bGZoX3NpemUgKz0gKChzaXplb2YoKnNoZHIpICsgc2l6ZW9mKCpwaGRyKSkgKiAoTUFYX05VTV9F TlRSSUVTIAo+PiArIDQpKTsKPj4gK8KgwqDCoCBlbGZoX3NpemUgPSBBTElHTihlbGZoX3NpemUs IDQpOwo+PiArCj4+ICvCoMKgwqAgbWluaWR1bXAuZWxmLmVoZHIgPSBremFsbG9jKGVsZmhfc2l6 ZSwgR0ZQX0tFUk5FTCk7Cj4gCj4gd2hlbiB3aWxsIHRoaXMgbWVtb3J5IGZyZWVkPwoKVGhpcyBt ZW1vcnkgc2hvdWxkIG5vdCBiZSBmcmVlZC4gU2luY2UgdGhpcyB3aWxsIGJlIGZpcnN0IHJlZ2lv biBhbmQgaXQgCndpbGwgYmUgdXBkYXRlZCBvbiBlYWNoIG1pbmlkdW1wIHJlZ2lzdHJhdGlvbi4K Cj4gCj4+ICvCoMKgwqAgaWYgKCFtaW5pZHVtcC5lbGYuZWhkcikKPj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiAtRU5PTUVNOwo+PiArCj4+ICvCoMKgwqAgLyogUmVnaXN0ZXIgRUxGIGhlYWRlciBh cyBmaXJzdCByZWdpb24gKi8KPj4gK8KgwqDCoCBzdHJzY3B5KGVsZnJlZ2lvbi5uYW1lLCAiS0VM Rl9IRUFERVIiLCBzaXplb2YoZWxmcmVnaW9uLm5hbWUpKTsKPj4gK8KgwqDCoCBlbGZyZWdpb24u dmlydF9hZGRyID0gbWluaWR1bXAuZWxmLmVoZHI7Cj4+ICvCoMKgwqAgZWxmcmVnaW9uLnBoeXNf YWRkciA9IHZpcnRfdG9fcGh5cyhtaW5pZHVtcC5lbGYuZWhkcik7Cj4+ICvCoMKgwqAgZWxmcmVn aW9uLnNpemUgPSBlbGZoX3NpemU7Cj4+ICvCoMKgwqAgbWluaWR1bXBfc3NfYWRkX3JlZ2lvbigm ZWxmcmVnaW9uKTsKPj4gKwo+PiArwqDCoMKgIGVoZHIgPSBtaW5pZHVtcC5lbGYuZWhkcjsKPj4g K8KgwqDCoCAvKiBBc3NpZ24gU2VjdGlvbi9Qcm9ncmFtIGhlYWRlcnMgb2Zmc2V0ICovCj4+ICvC oMKgwqAgbWluaWR1bXAuZWxmLnNoZHIgPSBzaGRyID0gKHN0cnVjdCBlbGZfc2hkciAqKShlaGRy ICsgMSk7Cj4+ICvCoMKgwqAgbWluaWR1bXAuZWxmLnBoZHIgPSBwaGRyID0gKHN0cnVjdCBlbGZf cGhkciAqKShzaGRyICsgCj4+IE1BWF9OVU1fRU5UUklFUyk7Cj4+ICvCoMKgwqAgcGhkcl9vZmYg PSBzaXplb2YoKmVoZHIpICsgKHNpemVvZigqc2hkcikgKiBNQVhfTlVNX0VOVFJJRVMpOwo+PiAr Cj4+ICvCoMKgwqAgbWVtY3B5KGVoZHItPmVfaWRlbnQsIEVMRk1BRywgU0VMRk1BRyk7Cj4+ICvC oMKgwqAgZWhkci0+ZV9pZGVudFtFSV9DTEFTU10gPSBFTEZfQ0xBU1M7Cj4+ICvCoMKgwqAgZWhk ci0+ZV9pZGVudFtFSV9EQVRBXSA9IEVMRl9EQVRBOwo+PiArwqDCoMKgIGVoZHItPmVfaWRlbnRb RUlfVkVSU0lPTl0gPSBFVl9DVVJSRU5UOwo+PiArwqDCoMKgIGVoZHItPmVfaWRlbnRbRUlfT1NB QkldID0gRUxGX09TQUJJOwo+PiArwqDCoMKgIGVoZHItPmVfdHlwZSA9IEVUX0NPUkU7Cj4+ICvC oMKgwqAgZWhkci0+ZV9tYWNoaW5lwqAgPSBFTEZfQVJDSDsKPj4gK8KgwqDCoCBlaGRyLT5lX3Zl cnNpb24gPSBFVl9DVVJSRU5UOwo+PiArwqDCoMKgIGVoZHItPmVfZWhzaXplID0gc2l6ZW9mKCpl aGRyKTsKPj4gK8KgwqDCoCBlaGRyLT5lX3Bob2ZmID0gcGhkcl9vZmY7Cj4+ICvCoMKgwqAgZWhk ci0+ZV9waGVudHNpemUgPSBzaXplb2YoKnBoZHIpOwo+PiArwqDCoMKgIGVoZHItPmVfc2hvZmYg PSBzaXplb2YoKmVoZHIpOwo+PiArwqDCoMKgIGVoZHItPmVfc2hlbnRzaXplID0gc2l6ZW9mKCpz aGRyKTsKPj4gK8KgwqDCoCBlaGRyLT5lX3Noc3RybmR4ID0gMTsKPj4gKwo+PiArwqDCoMKgIG1p bmlkdW1wLmVsZi5lbGZfb2Zmc2V0ID0gZWxmaF9zaXplOwo+PiArCj4+ICvCoMKgwqAgLyoKPj4g K8KgwqDCoMKgICogVGhlIHplcm90aCBpbmRleCBvZiB0aGUgc2VjdGlvbiBoZWFkZXIgaXMgcmVz ZXJ2ZWQgYW5kIGlzIAo+PiByYXJlbHkgdXNlZC4KPj4gK8KgwqDCoMKgICogU2V0IHRoZSBzZWN0 aW9uIGhlYWRlciBhcyBudWxsIChTSE5fVU5ERUYpIGFuZCBtb3ZlIHRvIHRoZSAKPj4gbmV4dCBv bmUuCj4+ICvCoMKgwqDCoCAqIDJuZCBTZWN0aW9uIGlzIFN0cmluZyB0YWJsZS4KPj4gK8KgwqDC oMKgICovCj4+ICvCoMKgwqAgbWluaWR1bXAuZWxmLnN0cnRhYmxlX2lkeCA9IDE7Cj4+ICvCoMKg wqAgc3RydGJsX29mZiA9IHNpemVvZigqZWhkcikgKyAoKHNpemVvZigqcGhkcikgKyBzaXplb2Yo KnNoZHIpKSAqIAo+PiBNQVhfTlVNX0VOVFJJRVMpOwo+PiArwqDCoMKgIHNoZHIrKzsKPj4gK8Kg wqDCoCBzaGRyLT5zaF90eXBlID0gU0hUX1NUUlRBQjsKPj4gK8KgwqDCoCBzaGRyLT5zaF9vZmZz ZXQgPSAoZWxmX2FkZHJfdClzdHJ0Ymxfb2ZmOwo+PiArwqDCoMKgIHNoZHItPnNoX3NpemUgPSBN QVhfU1RSVEJMX1NJWkU7Cj4+ICvCoMKgwqAgc2hkci0+c2hfZW50c2l6ZSA9IDA7Cj4+ICvCoMKg wqAgc2hkci0+c2hfZmxhZ3MgPSAwOwo+PiArwqDCoMKgIHNoZHItPnNoX25hbWUgPSBhcHBlbmRf c3RyX3RvX3N0cnRhYmxlKCJTVFJfVEJMIik7Cj4+ICvCoMKgwqAgc2hkcisrOwo+PiArCj4+ICvC oMKgwqAgLyogM3JkIFNlY3Rpb24gaXMgZm9yIE1pbmlkdW1wX3RhYmxlIFZBLCB1c2VkIGJ5IHBh cnNlcnMgKi8KPj4gK8KgwqDCoCBzaGRyLT5zaF90eXBlID0gU0hUX1BST0dCSVRTOwo+PiArwqDC oMKgIHNoZHItPnNoX2VudHNpemUgPSAwOwo+PiArwqDCoMKgIHNoZHItPnNoX2ZsYWdzID0gMDsK Pj4gK8KgwqDCoCBzaGRyLT5zaF9hZGRyID0gKGVsZl9hZGRyX3QpJm1pbmlkdW1wOwo+PiArwqDC oMKgIHNoZHItPnNoX25hbWUgPSBhcHBlbmRfc3RyX3RvX3N0cnRhYmxlKCJtaW5pZHVtcF90YWJs ZSIpOwo+PiArwqDCoMKgIHNoZHIrKzsKPj4gKwo+PiArwqDCoMKgIC8qIDR0aCBTZWN0aW9uIGlz IExpbnV4IGJhbm5lciAqLwo+PiArwqDCoMKgIGJhbm5lciA9IChjaGFyICopZWhkciArIHN0cnRi bF9vZmYgKyBNQVhfU1RSVEJMX1NJWkU7Cj4+ICvCoMKgwqAgbWVtY3B5KGJhbm5lciwgbGludXhf YmFubmVyLCBiYW5uZXJfbGVuKTsKPj4gKwo+PiArwqDCoMKgIHNoZHItPnNoX3R5cGUgPSBTSFRf UFJPR0JJVFM7Cj4+ICvCoMKgwqAgc2hkci0+c2hfb2Zmc2V0ID0gKGVsZl9hZGRyX3QpKHN0cnRi bF9vZmYgKyBNQVhfU1RSVEJMX1NJWkUpOwo+PiArwqDCoMKgIHNoZHItPnNoX3NpemUgPSBiYW5u ZXJfbGVuICsgMTsKPj4gK8KgwqDCoCBzaGRyLT5zaF9hZGRyID0gKGVsZl9hZGRyX3QpbGludXhf YmFubmVyOwo+PiArwqDCoMKgIHNoZHItPnNoX2VudHNpemUgPSAwOwo+PiArwqDCoMKgIHNoZHIt PnNoX2ZsYWdzID0gU0hGX1dSSVRFOwo+PiArwqDCoMKgIHNoZHItPnNoX25hbWUgPSBhcHBlbmRf c3RyX3RvX3N0cnRhYmxlKCJsaW51eF9iYW5uZXIiKTsKPj4gKwo+PiArwqDCoMKgIHBoZHItPnBf dHlwZSA9IFBUX0xPQUQ7Cj4+ICvCoMKgwqAgcGhkci0+cF9vZmZzZXQgPSAoZWxmX2FkZHJfdCko c3RydGJsX29mZiArIE1BWF9TVFJUQkxfU0laRSk7Cj4+ICvCoMKgwqAgcGhkci0+cF92YWRkciA9 IChlbGZfYWRkcl90KWxpbnV4X2Jhbm5lcjsKPj4gK8KgwqDCoCBwaGRyLT5wX3BhZGRyID0gdmly dF90b19waHlzKGxpbnV4X2Jhbm5lcik7Cj4+ICvCoMKgwqAgcGhkci0+cF9maWxlc3ogPSBwaGRy LT5wX21lbXN6ID0gYmFubmVyX2xlbiArIDE7Cj4+ICvCoMKgwqAgcGhkci0+cF9mbGFncyA9IFBG X1IgfCBQRl9XOwo+PiArCj4+ICvCoMKgwqAgLyogVXBkYXRlIGhlYWRlcnMgY291bnQqLwo+PiAr wqDCoMKgIGVoZHItPmVfcGhudW0gPSAxOwo+PiArwqDCoMKgIGVoZHItPmVfc2hudW0gPSA0Owo+ IENhbiB3ZSBkZWZpbmUgdGhlc2UgbWFnaWMgY29uc3RhbnRzLgoKU3VyZSwgd291bGQgbmVlZCB0 byBmaW5kIHNvbWUgcHJvcGVyIG5hbWUuCgo+IAo+IG5pdCwgYSBuZXcgbGluZSBiZWZvcmUgcmV0 dXJuIHdvdWxkIGJlIG5pY2UuCgpPay4KCj4gCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbnQgcWNvbV9taW5pZHVtcF9pbml0KHZvaWQpCj4+ICt7Cj4+ICvCoMKg wqAgc3RydWN0IG1pbmlkdW1wX3N1YnN5c3RlbSAqbWRzc3RvYzsKPj4gKwo+PiArwqDCoMKgIG1k c3N0b2MgPSBxY29tX21pbmlkdW1wX3N1YnN5c3RlbV9kZXNjKE1JTklEVU1QX0FQU1NfREVTQyk7 Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihtZHNzdG9jKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAtRUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgbWluaWR1bXAubWRfcmVnaW9ucyA9IGtjYWxsb2Mo TUFYX05VTV9FTlRSSUVTLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz aXplb2Yoc3RydWN0IG1pbmlkdW1wX3JlZ2lvbiksIEdGUF9LRVJORUwpOwo+PiArwqDCoMKgIGlm ICghbWluaWR1bXAubWRfcmVnaW9ucykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVN Owo+PiArCj4+ICvCoMKgwqAgbWluaWR1bXAubWRfc3NfdG9jID0gbWRzc3RvYzsKPj4gK8KgwqDC oCAvKiBTaGFyZSBtZW1vcnkgdGFibGUgdXBkYXRlICovCj4+ICvCoMKgwqAgbWRzc3RvYy0+cmVn aW9uc19iYXNlcHRyID0gCj4+IGNwdV90b19sZTY0KHZpcnRfdG9fcGh5cyhtaW5pZHVtcC5tZF9y ZWdpb25zKSk7Cj4+ICvCoMKgwqAgLyogVGVsbCBib290bG9hZGVyIG5vdCB0byBlbmNyeXB0IHRo ZSByZWdpb25zIG9mIHRoaXMgc3Vic3lzdGVtICovCj4+ICvCoMKgwqAgbWRzc3RvYy0+ZW5jcnlw dGlvbl9zdGF0dXMgPSBjcHVfdG9fbGUzMihNSU5JRFVNUF9TU19FTkNSX0RPTkUpOwo+PiArwqDC oMKgIG1kc3N0b2MtPmVuY3J5cHRpb25fcmVxdWlyZWQgPSBjcHVfdG9fbGUzMihNSU5JRFVNUF9T U19FTkNSX05PVFJFUSk7Cj4+ICsKPj4gK8KgwqDCoCBtZHNzdG9jLT5lbmFibGVkID0gY3B1X3Rv X2xlMzIoTUlOSURVTVBfU1NfRU5BQkxFRCk7Cj4+ICvCoMKgwqAgbWRzc3RvYy0+c3RhdHVzID0g Y3B1X3RvX2xlMzIoMSk7Cj4+ICvCoMKgwqAgbWRzc3RvYy0+cmVnaW9uX2NvdW50ID0gY3B1X3Rv X2xlMzIoMCk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ ICsgKiBxY29tX21pbmlkdW1wX3JlYWR5IC0gQ2hlY2ssIGlmIG1pbmlkdW1wIGlzIHJlYWR5IGZv ciBjbGllbnQgCj4+IHJlZ2lzdHJhdGlvbiBvciBub3QuCj4+ICsgKgo+PiArICogUmV0dXJuOiB6 ZXJvIG9uIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIG9uIGZhaWx1cmUuCj4+ICsgKgo+PiArICogUXVh bGNvbW0gbWluaWR1bXAgZmVhdHVyZSBpcyBkZXBlbmRlbnQgb24gUXVhbGNvbW0ncyBzaGFyZWQg bWVtb3J5IAo+PiBhbmQgaXQgaXMKPj4gKyAqIHBvc3NpYmxlIGZvciBhIGFybTY0IHRhcmdldCB0 byBub3QgaGF2ZSBpdCdzIGRldmljZSB0cmVlIGVudHJ5IAo+PiBwcmVzZW50LCBmb3IKPj4gKyAq IHN1Y2ggY2FzZSwgcWNvbV9taW5pZHVtcF9yZWFkeSgpIHJldHVybnMgLUVOT0RFViBhbmQgY2xp ZW50IHNob3VsZCAKPj4gbm90IGZ1cnRoZXIKPj4gKyAqIHRyeSB0byByZWdpc3RlciB0aGVpciBy ZWdpb24gd2l0aCBtaW5pZHVtcCBkcml2ZXIuCj4+ICsgKi8KPj4gK2ludCBxY29tX21pbmlkdW1w X3JlYWR5KHZvaWQpCj4+ICt7Cj4+ICvCoMKgwqAgdm9pZCAqcHRyOwo+PiArwqDCoMKgIHN0cnVj dCBkZXZpY2Vfbm9kZSAqbnA7Cj4+ICvCoMKgwqAgc3RhdGljIGJvb2wgaXNfc21lbV9hdmFpbGFi bGUgPSB0cnVlOwo+PiArCj4+ICvCoMKgwqAgaWYgKCFpc19zbWVtX2F2YWlsYWJsZSB8fCAhKG5w ID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgCj4+IE5VTEwsICJxY29tLHNtZW0iKSkp IHsKPiAKPiBqdXN0IGNoZWNrIGZvciBkdCBub2RlIGhlcmUgZG9lcyBub3QgbWVhbiB0aGF0IHNt ZW0gZGV2aWNlIGlzIGF2YWlsYWJsZSwgCj4geW91IHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiB0 aGUgZGV2aWNlIGlzIGF2YWxpYWJsZSBhc3dlbGwgdXNpbmcgCj4gb2ZfZGV2aWNlX2lzX2F2YWls YWJsZSgpCj4gCj4gCj4gV2Ugc2hvdWxkIHByb2FiYWJseSByZXR1cm4gLUVQUk9CRURFRkVSIGlu Y2FzZSB0aGUgbm9kZSBpcyBwcmVzZW50IGFuZCAKPiBkZXZpY2UgaXMgbm90IHByZXNlbnQuCgpT aW5jZSwgdGhpcyBpcyBhbiBSRkMsIGkgbWF5IGJlIHdyb25nIHdpdGggdGhlIGluaXRpYWwgaWRl YSBvZiBhc2tpbmcgCmV2ZXJ5IGNsaWVudCB0byBkbyBxY29tX21pbmlkdW1wX3JlYWR5KCkgYmVm b3JlIGFjdHVhbCByZWdpc3RyYXRpb24uCgpBbHNvLCBkZWZlcnJpbmcgYSBkcml2ZXIgd2lsbCBu b3QgbG9vayBnb29kIGF0bGVhc3QgZm9yIGFueSBjb3JlIGtlcm5lbCAKY2xpZW50LCBzYXkgZm9y IGUuZyB3aHkgc2hvdWxkIHJhbW9vcHMgZHJpdmVyIHByb2JlIGRlZmVyIGl0c2VsZiBmb3IKbWlu aWR1bXAgd2hpY2ggZG9lcyBub3QgZGVwZW5kcyBvbiBtaW5pZHVtcCBmb3IgaXRzIGNvcmUgZnVu Y3Rpb25hbGl0eS4KCj4gCj4gCj4+ICvCoMKgwqDCoMKgwqDCoCBpc19zbWVtX2F2YWlsYWJsZSA9 IGZhbHNlOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9ERVY7Cj4+ICvCoMKgwqAgfQo+ PiArCj4+ICvCoMKgwqAgb2Zfbm9kZV9wdXQobnApOwo+IAo+IDwtLQo+PiArwqDCoMKgIHB0ciA9 IHFjb21fc21lbV9nZXQoUUNPTV9TTUVNX0hPU1RfQU5ZLCBTQkxfTUlOSURVTVBfU01FTV9JRCwg TlVMTCk7Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihwdHIpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIFBUUl9FUlIocHRyKTsKPiAtLT4KPiAKPiBJZiB3ZSBhcmUgYWxyZWFkeSBjaGVja2luZyBm b3IgZ2xvYmFsIHRvYyBoZXJlLCB3aHkgbm90IGp1c3Qgc2V0IGl0IGluIAo+IG1pbmlkdW1wCj4g bWluaWR1bXAubWRfZ2JsX3RvYyA9IHFjb21fc21lbV9nZXQoUUNPTV9TTUVNX0hPU1RfQU5ZLCAK PiBTQkxfTUlOSURVTVBfU01FTV9JRCwgJnNpemUpOwo+IC4uLgo+IAo+IGFuZCB0aGVuIHN0b3Ag Y2FsbGluZyBxY29tX3NtZW1fZ2V0IHRvIGdldCBnbG9iYWwgdG9jIG9uIGV2ZXJ5IGNhbGwgdG8g Cj4gcWNvbV9taW5pZHVtcF9zdWJzeXN0ZW1fZGVzYygpCj4KCkxldCBtZSBhc3NpZ24gdGhpcyBv biBzdWNjZXNzZnVsIGNhbGwgdG8gcWNvbV9zbWVtX2dldCgpIGFuZCBjYWxsIHRvIApxY29tX3Nt ZW1fZ2V0KCkgaWYgIW1pbmlkdW1wLm1kX2dibF90b2MsIHNpbmNlIHFjb21fbWluaWR1bXAoKSBj YWxsCmZyb20gZHJpdmVyL3JlbW90ZXByb2MvcWNvbV9jb21tb24uYyBhbHNvIHVzZXMgdGhpcyBh bmQgaXQgaXMKaW5kZXBlbmRlbnQgdG8gdGhpcyBkcml2ZXIgYnV0IHNhbWUgaW4gY2FsbGluZyBx Y29tX3NtZW1fZ2V0KCkgZm9yCmdsb2JhbCB0b2MsIHNvIHRoZXkgc2hvdWxkIGdldCBhZHZhbnRh Z2UgZnJvbSBlYWNoIG90aGVyLgoKPiAKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+ PiArRVhQT1JUX1NZTUJPTF9HUEwocWNvbV9taW5pZHVtcF9yZWFkeSk7Cj4+ICsKPj4gKy8qKgo+ PiArICogcWNvbV9taW5pZHVtcF9zdWJzeXN0ZW1fZGVzYygpIC0gR2V0IG1pbmlkdW1wIHN1YnN5 c3RlbSBkZXNjcmlwdG9yLgo+PiArICogQG1pbmlkdW1wX2luZGV4OiBtaW5pZHVtcCBpbmRleCBm b3IgYSBzdWJzeXN0ZW0gaW4gbWluaWR1bXAgdGFibGUKPj4gKyAqCj4+ICsgKiBSZXR1cm46IG1p bmlkdW1wIHN1YnN5c3RlbSBkZXNjcmlwdG9yIGFkZHJlc3Mgb24gc3VjY2VzcyBhbmQgZXJyb3IK Pj4gKyAqIG9uIGZhaWx1cmUKPj4gKyAqLwo+PiArc3RydWN0IG1pbmlkdW1wX3N1YnN5c3RlbSAq cWNvbV9taW5pZHVtcF9zdWJzeXN0ZW1fZGVzYyh1bnNpZ25lZCBpbnQgCj4+IG1pbmlkdW1wX2lu ZGV4KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBtaW5pZHVtcF9nbG9iYWxfdG9jICptZGd0b2M7 Cj4+ICvCoMKgwqAgc2l6ZV90IHNpemU7Cj4+ICsKPj4gK8KgwqDCoCBtZGd0b2MgPSBxY29tX3Nt ZW1fZ2V0KFFDT01fU01FTV9IT1NUX0FOWSwgU0JMX01JTklEVU1QX1NNRU1fSUQsIAo+PiAmc2l6 ZSk7Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihtZGd0b2MpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBw cl9lcnIoIlVuYWJsZSB0byBmaW5kIG1pbmlkdW1wIHNtZW0gaXRlbVxuIik7Cj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gRVJSX0NBU1QobWRndG9jKTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8Kg wqDCoCBpZiAoc2l6ZSA8IHNpemVvZigqbWRndG9jKSB8fCAhbWRndG9jLT5zdGF0dXMpIHsKPj4g K8KgwqDCoMKgwqDCoMKgIHByX2VycigiTWluaWR1bXAgdGFibGUgaXMgbm90IGluaXRpYWxpemVk XG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+PiArwqDC oMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldHVybiAmbWRndG9jLT5zdWJzeXN0ZW1zW21pbmlkdW1w X2luZGV4XTsKPiAKPiBvbmNlIHdlIGZpeCBxY29tX21pbmlkdW1wX3JlYWR5KCkgd2l0aCB0aGUg c3VnZ2VzdGlvbiB0aGVuIHRoaXMgY2FsbCAKPiB3aWxsIGJlCj4gCj4gc3RydWN0IG1pbmlkdW1w X3N1YnN5c3RlbSAqcWNvbV9taW5pZHVtcF9zdWJzeXN0ZW1fZGVzYyguLikKPiB7Cj4gIMKgwqDC oMKgcmV0dXJuICZtaW5pZHVtcC5tZF9nYmxfdG9jLT5zdWJzeXN0ZW1zW21pbmlkdW1wX2luZGV4 XTsKCldpbGwgZG8gYXMgaSBkZXNjcmliZWQgYWJvdmUsIGxldCBtZSBrbm93IGlmIHlvdSBkb24n dCBhZ3JlZS4uCgo+IH0KPiAKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0xfR1BMKHFjb21fbWluaWR1 bXBfc3Vic3lzdGVtX2Rlc2MpOwo+PiArCj4+ICsvKioKPj4gKyAqIHFjb21fbWluaWR1bXBfcmVn aW9uX3JlZ2lzdGVyKCkgLSBSZWdpc3RlciBhIHJlZ2lvbiBpbiBNaW5pZHVtcCAKPj4gdGFibGUu Cj4+ICsgKiBAcmVnaW9uOiBtaW5pZHVtcCByZWdpb24uCj4+ICsgKgo+PiArICogQ2xpZW50IHNo b3VsZCBub3QgY2FsbCB0aGlzIGRpcmVjdGx5IGluc3RlYWQgZmlyc3QgY2FsbCAKPj4gcWNvbV9t aW5pZHVtcF9yZWFkeSgpCj4+ICsgKiB0byBjaGVjayBpZiBtaW5pZHVtcCBpcyByZWFkeSB0byBk byByZWdpc3RyYXRpb24gaWYgeWVzLCB0aGVuIGNhbGwgCj4+IHRoaXMgQVBJLgo+PiArICoKPj4g KyAqIFJldHVybjogT24gc3VjY2VzcywgaXQgcmV0dXJucyByZWdpb24gaW5kZXggaW4gbWluaWR1 bXAgdGFibGUgYW5kIAo+PiBuZWdhdGl2ZQo+PiArICogZXJyb3IgdmFsdWUgb24gZmFpbHVyZS4K Pj4gKyAqLwo+PiAraW50IHFjb21fbWluaWR1bXBfcmVnaW9uX3JlZ2lzdGVyKGNvbnN0IHN0cnVj dCBxY29tX21pbmlkdW1wX3JlZ2lvbiAKPj4gKnJlZ2lvbikKPj4gK3sKPj4gK8KgwqDCoCBzdGF0 aWMgYm9vbCBtaW5pZHVtcF9pbml0X2RvbmU7Cj4gd2h5IG5vdCBtb3ZlIHRoaXMgdHlwZSBvZiBz dGF0aWMgdmFyaWFibGVzIHRvIHN0cnVjdCBtaW5pZHVtcC4KClN1cmUsIHdpbGwgZG8uCgo+IAo+ PiArwqDCoMKgIHVuc2lnbmVkIGludCBudW1fcmVnaW9uOwo+PiArwqDCoMKgIGludCByZXQ7Cj4g Cj4gd2Ugc2hvdWxkIGNoZWNrIHFjb21fbWluaWR1bXBfcmVhZHkoKSBoYXMgYmVlbiBjYWxsZWQg ZWl0aGVyIGJ5IHNldHRpbmcgCj4gYSBmbGFnIGluIHN0cnVjdCBtaW5pZHVtcMKgIGFuZCByZXR1 cm4gZWFybHkgb24gaW4gY2FzZSBpdHMgbm90IHJlYWR5LgoKQWdyZWUsIHRoYXQgd2lsbCBiaW5k IHFjb21fbWluaWR1bXBfcmVhZHkoKSBhbmQgCnFjb21fbWluaWR1bXBfcmVnaW9uX3JlZ2lzdGVy KCkgdG9nZXRoZXIuCgo+IAo+IAo+PiArCj4+ICvCoMKgwqAgLyogSW5pdGlhbGl6ZSBtaW5pZHVt cCBjb250ZXh0IG9uIGZpcnN0IGNhbGwgKi8KPj4gK8KgwqDCoCBtdXRleF9sb2NrKCZtaW5pZHVt cF9sb2NrKTsKPj4gK8KgwqDCoCBpZiAoIW1pbmlkdW1wX2luaXRfZG9uZSkgewo+PiArwqDCoMKg wqDCoMKgwqAgcmV0ID0gcWNvbV9taW5pZHVtcF9pbml0KCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBp ZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIHVubG9jazsKPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqAgbWluaWR1bXBfaW5pdF9kb25lID0gdHJ1ZTsKPj4gK8KgwqDCoMKgwqDC oMKgIC8qIEZpcnN0IGVudHJ5IHdvdWxkIGJlIEVMRiBoZWFkZXIgKi8KPj4gK8KgwqDCoMKgwqDC oMKgIHJldCA9IG1pbmlkdW1wX2FkZF9lbGZfaGVhZGVyKCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBp ZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGtmcmVlKG1pbmlkdW1wLm1kX3Jl Z2lvbnMpOwo+IAo+IHNob3VsZCB3ZSBub3QgcmVzZXQgbWluaWR1bXBfaW5pdF9kb25lID0gZmFs c2U7Cj4gb3IgbW92ZQo+IG1pbmlkdW1wX2luaXRfZG9uZSA9IHRydWU7Cj4gdG8gZW5kIG9mIHRo aXMgbG9vcC4KCk1vdmluZyBpdCBhZnRlciBzdWNjZXNzZnVsIGNhbGwgdG8gbWluaWR1bXBfYWRk X2VsZl9oZWFkZXIoKQppcyBiZXR0ZXIuCgotLSBNdWtlc2gKPiAKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZ290byB1bmxvY2s7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqAgfQo+ PiArCj4+ICvCoMKgwqAgaWYgKCFxY29tX21pbmlkdW1wX3ZhbGlkX3JlZ2lvbihyZWdpb24pKSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUlOVkFMOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290 byB1bmxvY2s7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0ID0gZ2V0X21pbmlkdW1w X3JlZ2lvbl9pbmRleChyZWdpb24pOwo+PiArwqDCoMKgIGlmIChyZXQgPj0gMCkgewo+PiArwqDC oMKgwqDCoMKgwqAgcHJfaW5mbygiJXMgcmVnaW9uIGlzIGFscmVhZHkgcmVnaXN0ZXJlZFxuIiwg cmVnaW9uLT5uYW1lKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IC1FRVhJU1Q7Cj4+ICvCoMKg wqDCoMKgwqDCoCBnb3RvIHVubG9jazsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCAvKiBD aGVjayBpZiB0aGVyZSBpcyBhIHJvb20gZm9yIGEgbmV3IGVudHJ5ICovCj4+ICvCoMKgwqAgcmV0 ID0gbnVtX3JlZ2lvbiA9IGxlMzJfdG9fY3B1KG1pbmlkdW1wLm1kX3NzX3RvYy0+cmVnaW9uX2Nv dW50KTsKPj4gK8KgwqDCoCBpZiAobnVtX3JlZ2lvbiA+PSBNQVhfTlVNX0VOVFJJRVMpIHsKPj4g K8KgwqDCoMKgwqDCoMKgIHByX2VycigibWF4aW11bSByZWdpb24gbGltaXQgJXUgcmVhY2hlZFxu IiwgbnVtX3JlZ2lvbik7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSAtRU5PU1BDOwo+PiArwqDC oMKgwqDCoMKgwqAgZ290byB1bmxvY2s7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgbWlu aWR1bXBfc3NfYWRkX3JlZ2lvbihyZWdpb24pOwo+PiArwqDCoMKgIG1pbmlkdW1wX3VwZGF0ZV9l bGZfaGVhZGVyKHJlZ2lvbik7Cj4+ICt1bmxvY2s6Cj4+ICvCoMKgwqAgbXV0ZXhfdW5sb2NrKCZt aW5pZHVtcF9sb2NrKTsKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArRVhQT1JUX1NZ TUJPTF9HUEwocWNvbV9taW5pZHVtcF9yZWdpb25fcmVnaXN0ZXIpOwo+IAoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFp bGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK