Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp1866533ybb; Thu, 9 Apr 2020 10:26:52 -0700 (PDT) X-Google-Smtp-Source: APiQypLQYTTCEJoGnpesYQzO5OspnPi4xF3ysWBPLyC7FVceUlmAVJKj+CiHdEC7YqqC1kYqYP12 X-Received: by 2002:a37:4f57:: with SMTP id d84mr965451qkb.310.1586453212066; Thu, 09 Apr 2020 10:26:52 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1586453212; cv=pass; d=google.com; s=arc-20160816; b=rCaJy2QTs7kzyQ+U0ZuYzd8G81EeTn1yfHZPGHae1Tf6d+KPC8rq5tNztLAABkPQA+ gVFOhWT+L+W8C0hzQjYoUAZRkg23zK6zZWw/Pc5RgniSVoqYlSCluu46KNdMKSX2jo38 EuL82Hl/3U3qPbKYZB9m+ygrMV1De+Zt90ZWYdi403R3KdQNOuqR/BYAqJ047oet7ESU FWI6UvbDjI0ndSjq054oHnjoyKAqU6ywYuB85upmLUWuHGjmT+WeHOgfRBUr7vNreLaS ZjtAA98qj1OkfoXTKGSkGomg90eA35heSjVjDT+7EuInGd04xatFknOPdFVoPE0Wm7kr JydQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature:dkim-signature; bh=pxnjeIZlC+UUDym3hrQHWP61Ogow1FFZMk1Z6XJJ8to=; b=eRnMkQFerySjOFQjjeqv/n8k5dhpigqMzVMtH6sJT/X0tChgyCL8ls4vNJn69448xw mjlGw3nsuiZdAS0YFOBeAxI6j6ax0ZjAfPLneDV5ZLv9JIbGsSCekpgjjZkrzvKdkgNP VI7ashzs6PwXGbczXbYH61UntWCKFEpT18kvNVfat3JOp3TFu23dW4Q6OxSOpBk0CzjY 2RipX45Il76GQ+fV095bU6hU0iAdKxtSXxIloAdgBf4+9XK1e/obfSB0nCBW493Ab8Ba 5jZE3sF+KnL+tjnQmzzRRzNREooEsktz+PT4LNIxT1skzHbiu/aPMiUzul351iLHZhn4 DRsQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@marvell.com header.s=pfpt0818 header.b=g8uLLQV2; dkim=pass header.i=@marvell.onmicrosoft.com header.s=selector1-marvell-onmicrosoft-com header.b="KL4Lxsy/"; arc=pass (i=1 spf=pass spfdomain=marvell.com dkim=pass dkdomain=marvell.com dmarc=pass fromdomain=marvell.com); spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=marvell.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m129si6171703qke.230.2020.04.09.10.26.37; Thu, 09 Apr 2020 10:26:52 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@marvell.com header.s=pfpt0818 header.b=g8uLLQV2; dkim=pass header.i=@marvell.onmicrosoft.com header.s=selector1-marvell-onmicrosoft-com header.b="KL4Lxsy/"; arc=pass (i=1 spf=pass spfdomain=marvell.com dkim=pass dkdomain=marvell.com dmarc=pass fromdomain=marvell.com); spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=marvell.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728171AbgDIPVI (ORCPT + 99 others); Thu, 9 Apr 2020 11:21:08 -0400 Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:53350 "EHLO mx0b-0016f401.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728102AbgDIPVI (ORCPT ); Thu, 9 Apr 2020 11:21:08 -0400 Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 039FFXW2014764; Thu, 9 Apr 2020 08:20:19 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=pfpt0818; bh=pxnjeIZlC+UUDym3hrQHWP61Ogow1FFZMk1Z6XJJ8to=; b=g8uLLQV2VUYdH9G3Mswa3/2esRVCTscmvQOqyeG/w4KzNJAocmEsvLTBaoDirYZx6kA3 /IBjP896qwUqiB5Sq0PGYRQRiXmuDk9FhfNd0yluILneKcr3TPnCG4HtHEfN3KkT0/9o d8KNByGbQGOYSkmCeQtsI86geWEINLewcNFxXNtGCPEF2Bq3rhOCOvigB7m7G9GJ6tKE cTjUhwFK3P01z/9SZbqblC5vQdAtRo0olRm2mIg2TDGl1p/q6u7DJaoDuc31+tjrfseL x67vP+E7DknujjHw3jlWnbDyjKI5WME9gKpqwbS3rs8XNxkL/gZLM+mVxgt5p/UpGMtz 4g== Received: from sc-exch03.marvell.com ([199.233.58.183]) by mx0a-0016f401.pphosted.com with ESMTP id 3091jwh0jr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 09 Apr 2020 08:20:17 -0700 Received: from SC-EXCH01.marvell.com (10.93.176.81) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 9 Apr 2020 08:20:16 -0700 Received: from NAM04-BN3-obe.outbound.protection.outlook.com (104.47.46.59) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Thu, 9 Apr 2020 08:20:16 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SMnzPgcaCgwGv16RyYeRv93FoTzdPBBfzo47uZPPjSGagp+IOlWHtoYdJ7tL3DVUUXGwYWVSqySZA/3izsenr6cuVaowytGINRz45SMZZhOfRE5v8UybfK6s7eEuARHq+HqwEEoRvvchI5KfxoZvqOv7aAp5UAtGYRLrZeE0qz7clV+bwJ0QG5IFZoIGmg3+Au3mVNdFuhcQ9UwIQrfORgpbROq+WYC8dewHEBVZJaT6X58EeVh3e05XOK39Jl291ixs0OKwWZWg7GIon+h7Xh4t8MMuiPdajHwsBv/wU3aAsuZv4X2Jq0V91gt6zC4GkQM1RZAHwn2n9APgo8XJEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pxnjeIZlC+UUDym3hrQHWP61Ogow1FFZMk1Z6XJJ8to=; b=YEdC5lHw0jme2l5gUI+T1BVXqEdakkj85rYr7ZNABquMeX+FnZGgMEh2YmMzPXnt5ZR1p1Z2V/qxade+BXBEDhA8pYHx0YcC3siGyAL/RvHG7JYlhYBaTRMwRQBpa/q5NcoHlK2VJ02Mpv3K21onUeD84F61rSD+8afeSvkRKj/t0e6NK02ppVUOyHRKe9JT1wyIAn3v8cMKb9DWVZuSUUn8Q9e2AeXrMGlaXTe6LW/mlP67DayrxFDJGDSe9pVCZFpjLXZT7K+FgmqGpyMPZVLMoqGFuTIbhoBTXUL+M5GT06aUUE94kGTp9XT09FE3DUO4gxRmAVpM4LzFaFXPyA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pxnjeIZlC+UUDym3hrQHWP61Ogow1FFZMk1Z6XJJ8to=; b=KL4Lxsy/5izpTo6okLLZ3p/IKb1MvuceBfp2mBc5k03ArCOYlvBTKtt44wDuMKPJXVfyr+AFdramgPSOcsMf0URjn9NkuAiHTroIJcqMPrLm/w9ernpO2y2Ga51ajm3IGik+DfpQgKgdn9V0Saa5EOA76ootsYqKzb4qWvf/EBM= Received: from BYAPR18MB2535.namprd18.prod.outlook.com (2603:10b6:a03:137::17) by BYAPR18MB2616.namprd18.prod.outlook.com (2603:10b6:a03:13c::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.19; Thu, 9 Apr 2020 15:20:13 +0000 Received: from BYAPR18MB2535.namprd18.prod.outlook.com ([fe80::65f8:9bfe:5fa5:1280]) by BYAPR18MB2535.namprd18.prod.outlook.com ([fe80::65f8:9bfe:5fa5:1280%3]) with mapi id 15.20.2878.022; Thu, 9 Apr 2020 15:20:13 +0000 From: Alex Belits To: "frederic@kernel.org" , "rostedt@goodmis.org" CC: Prasun Kapoor , "mingo@kernel.org" , "davem@davemloft.net" , "linux-api@vger.kernel.org" , "peterz@infradead.org" , "linux-arch@vger.kernel.org" , "catalin.marinas@arm.com" , "tglx@linutronix.de" , "will@kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "netdev@vger.kernel.org" Subject: [PATCH v3 04/13] task_isolation: userspace hard isolation from kernel Thread-Topic: [PATCH v3 04/13] task_isolation: userspace hard isolation from kernel Thread-Index: AQHWDoJdcsRcZCPSfE+Nv3J2mTveiQ== Date: Thu, 9 Apr 2020 15:20:12 +0000 Message-ID: <58995f108f1af4d59aa8ccd412cdff92711a9990.camel@marvell.com> References: <4473787e1b6bc3cc226067e8d122092a678b63de.camel@marvell.com> <07c25c246c55012981ec0296eee23e68c719333a.camel@marvell.com> In-Reply-To: <07c25c246c55012981ec0296eee23e68c719333a.camel@marvell.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [173.228.7.197] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a11abd7d-2d7c-427e-2b7c-08d7dc998013 x-ms-traffictypediagnostic: BYAPR18MB2616: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-forefront-prvs: 0368E78B5B x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR18MB2535.namprd18.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(10009020)(4636009)(376002)(136003)(366004)(346002)(39860400002)(396003)(7416002)(8676002)(5660300002)(26005)(71200400001)(2616005)(6486002)(6506007)(86362001)(2906002)(186003)(81156014)(64756008)(30864003)(4326008)(316002)(6512007)(66946007)(81166007)(76116006)(66476007)(66446008)(478600001)(8936002)(54906003)(110136005)(36756003)(66556008)(21314003)(559001)(579004);DIR:OUT;SFP:1101; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: GS84NdoVyoewaNTB4UvAKlRmPbv5KjAqrnaSL4QMxW6q8Y6VANbG3U+hd/eMf6vxC54tu/Sr8AMKWx1BJ1TU2ZuNOiYIRk019TWtbMtNW/ctFx+Z+2kTUbRvgh/bAQJF1vpWdmyvJhZLld/OVvb1qW1qgnuJ1kVuZwnMxSj9maaiiWsiWF2ij+ZGhUWQR6DvlSDQxTimVr1mZBeko8jiTc05BPEokz3WLykxgNEb3regQ18UKO0++c4qKMm754tD+r7EWbwIP+1cO/b636I5e39R9BJSf/lc7f/paegnhyrESbt4+ptf3kDIyRUktpgJpOlC9BMylQ8rmsI+jLplF6B5R3ISgWvJrRFmX1x9DAPAAllkHz3xLncKhBsR1fEs8AdwPg9k1r6pCG8g8Oh816kj8RbbZmPYiMFYPZGSBTxQwl9UYxMMJeRpFR3OA/23YbagRFcXkAepesYSn1rdaTp+xWAUYvnh5e6kuts34dUpTnqwdnH7bJw93r8J5dFD x-ms-exchange-antispam-messagedata: PlbSmEq6O6oy2/NcvwQ4fWOA058OGCLTdzropXtLTYFtHgPMpn+WWVIEYovLu+rTMS0hjDRphg2cOgY+esiJlom/G8eymBbgQC95ouOhAh9mkH46OHDC+xHBM/k0+aeTXzQLqKTz13M2mwNqHp2jtg== Content-Type: text/plain; charset="utf-8" Content-ID: <14A7C0365BC3F045B17445D862106E9C@namprd18.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: a11abd7d-2d7c-427e-2b7c-08d7dc998013 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Apr 2020 15:20:13.1042 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ZmKjwZpGny8vfizVPt2ZoEFKcKLov71udg3lxh7h5lx5YFowQFOyBeD0rH2EU5O2NpYIIsxweUBSQuO4Ln8Dbg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR18MB2616 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.676 definitions=2020-04-09_05:2020-04-07,2020-04-09 signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org VGhlIGV4aXN0aW5nIG5vaHpfZnVsbCBtb2RlIGlzIGRlc2lnbmVkIGFzIGEgInNvZnQiIGlzb2xh dGlvbiBtb2RlDQp0aGF0IG1ha2VzIHRyYWRlb2ZmcyB0byBtaW5pbWl6ZSB1c2Vyc3BhY2UgaW50 ZXJydXB0aW9ucyB3aGlsZQ0Kc3RpbGwgYXR0ZW1wdGluZyB0byBhdm9pZCBvdmVyaGVhZHMgaW4g dGhlIGtlcm5lbCBlbnRyeS9leGl0IHBhdGgsDQp0byBwcm92aWRlIDEwMCUga2VybmVsIHNlbWFu dGljcywgZXRjLg0KDQpIb3dldmVyLCBzb21lIGFwcGxpY2F0aW9ucyByZXF1aXJlIGEgImhhcmQi IGNvbW1pdG1lbnQgZnJvbSB0aGUNCmtlcm5lbCB0byBhdm9pZCBpbnRlcnJ1cHRpb25zLCBpbiBw YXJ0aWN1bGFyIHVzZXJzcGFjZSBkZXZpY2UgZHJpdmVyDQpzdHlsZSBhcHBsaWNhdGlvbnMsIHN1 Y2ggYXMgaGlnaC1zcGVlZCBuZXR3b3JraW5nIGNvZGUuDQoNClRoaXMgY2hhbmdlIGludHJvZHVj ZXMgYSBmcmFtZXdvcmsgdG8gYWxsb3cgYXBwbGljYXRpb25zDQp0byBlbGVjdCB0byBoYXZlIHRo ZSAiaGFyZCIgc2VtYW50aWNzIGFzIG5lZWRlZCwgc3BlY2lmeWluZw0KcHJjdGwoUFJfVEFTS19J U09MQVRJT04sIFBSX1RBU0tfSVNPTEFUSU9OX0VOQUJMRSkgdG8gZG8gc28uDQoNClRoZSBrZXJu ZWwgbXVzdCBiZSBidWlsdCB3aXRoIHRoZSBuZXcgVEFTS19JU09MQVRJT04gS2NvbmZpZyBmbGFn DQp0byBlbmFibGUgdGhpcyBtb2RlLCBhbmQgdGhlIGtlcm5lbCBib290ZWQgd2l0aCBhbiBhcHBy b3ByaWF0ZQ0KImlzb2xjcHVzPW5vaHosZG9tYWluLENQVUxJU1QiIGJvb3QgYXJndW1lbnQgdG8g ZW5hYmxlDQpub2h6X2Z1bGwgYW5kIGlzb2xjcHVzLiBUaGUgInRhc2tfaXNvbGF0aW9uIiBzdGF0 ZSBpcyB0aGVuIGluZGljYXRlZA0KYnkgc2V0dGluZyBhIG5ldyB0YXNrIHN0cnVjdCBmaWVsZCwg dGFza19pc29sYXRpb25fZmxhZywgdG8gdGhlDQp2YWx1ZSBwYXNzZWQgYnkgcHJjdGwoKSwgYW5k IGFsc28gc2V0dGluZyBhIFRJRl9UQVNLX0lTT0xBVElPTg0KYml0IGluIHRoZSB0aHJlYWRfaW5m byBmbGFncy4gV2hlbiB0aGUga2VybmVsIGlzIHJldHVybmluZyB0bw0KdXNlcnNwYWNlIGZyb20g dGhlIHByY3RsKCkgY2FsbCBhbmQgc2VlcyBUSUZfVEFTS19JU09MQVRJT04gc2V0LA0KaXQgY2Fs bHMgdGhlIG5ldyB0YXNrX2lzb2xhdGlvbl9zdGFydCgpIHJvdXRpbmUgdG8gYXJyYW5nZSBmb3IN CnRoZSB0YXNrIHRvIGF2b2lkIGJlaW5nIGludGVycnVwdGVkIGluIHRoZSBmdXR1cmUuDQoNCldp dGggaW50ZXJydXB0cyBkaXNhYmxlZCwgdGFza19pc29sYXRpb25fc3RhcnQoKSBlbnN1cmVzIHRo YXQga2VybmVsDQpzdWJzeXN0ZW1zIHRoYXQgbWlnaHQgY2F1c2UgYSBmdXR1cmUgaW50ZXJydXB0 IGFyZSBxdWllc2NlZC4gSWYgaXQNCmRvZXNuJ3Qgc3VjY2VlZCwgaXQgYWRqdXN0cyB0aGUgc3lz Y2FsbCByZXR1cm4gdmFsdWUgdG8gaW5kaWNhdGUgdGhhdA0KZmFjdCwgYW5kIHVzZXJzcGFjZSBj YW4gcmV0cnkgYXMgZGVzaXJlZC4gSW4gYWRkaXRpb24gdG8gc3RvcHBpbmcNCnRoZSBzY2hlZHVs ZXIgdGljaywgdGhlIGNvZGUgdGFrZXMgYW55IGFjdGlvbnMgdGhhdCBtaWdodCBhdm9pZA0KYSBm dXR1cmUgaW50ZXJydXB0IHRvIHRoZSBjb3JlLCBzdWNoIGFzIGEgd29ya2VyIHRocmVhZCBiZWlu Zw0Kc2NoZWR1bGVkIHRoYXQgY291bGQgYmUgcXVpZXNjZWQgbm93IChlLmcuIHRoZSB2bXN0YXQg d29ya2VyKQ0Kb3IgYSBmdXR1cmUgSVBJIHRvIHRoZSBjb3JlIHRvIGNsZWFuIHVwIHNvbWUgc3Rh dGUgdGhhdCBjb3VsZCBiZQ0KY2xlYW5lZCB1cCBub3cgKGUuZy4gdGhlIG1tIGxydSBwZXItY3B1 IGNhY2hlKS4NCg0KT25jZSB0aGUgdGFzayBoYXMgcmV0dXJuZWQgdG8gdXNlcnNwYWNlIGFmdGVy IGlzc3VpbmcgdGhlIHByY3RsKCksDQppZiBpdCBlbnRlcnMgdGhlIGtlcm5lbCBhZ2FpbiB2aWEg c3lzdGVtIGNhbGwsIHBhZ2UgZmF1bHQsIG9yIGFueQ0Kb3RoZXIgZXhjZXB0aW9uIG9yIGlycSwg dGhlIGtlcm5lbCB3aWxsIGtpbGwgaXQgd2l0aCBTSUdLSUxMLg0KSW4gYWRkaXRpb24gdG8gc2Vu ZGluZyBhIHNpZ25hbCwgdGhlIGNvZGUgc3VwcG9ydHMgYSBrZXJuZWwNCmNvbW1hbmQtbGluZSAi dGFza19pc29sYXRpb25fZGVidWciIGZsYWcgd2hpY2ggY2F1c2VzIGEgc3RhY2sNCmJhY2t0cmFj ZSB0byBiZSBnZW5lcmF0ZWQgd2hlbmV2ZXIgYSB0YXNrIGxvc2VzIGlzb2xhdGlvbi4NCg0KVG8g YWxsb3cgdGhlIHN0YXRlIHRvIGJlIGVudGVyZWQgYW5kIGV4aXRlZCwgdGhlIHN5c2NhbGwgY2hl Y2tpbmcNCnRlc3QgaWdub3JlcyB0aGUgcHJjdGwoUFJfVEFTS19JU09MQVRJT04pIHN5c2NhbGwg c28gdGhhdCB3ZSBjYW4NCmNsZWFyIHRoZSBiaXQgYWdhaW4gbGF0ZXIsIGFuZCBpZ25vcmVzIGV4 aXQvZXhpdF9ncm91cCB0byBhbGxvdw0KZXhpdGluZyB0aGUgdGFzayB3aXRob3V0IGEgcG9pbnRs ZXNzIHNpZ25hbCBiZWluZyBkZWxpdmVyZWQuDQoNClRoZSBwcmN0bCgpIEFQSSBhbGxvd3MgZm9y IHNwZWNpZnlpbmcgYSBzaWduYWwgbnVtYmVyIHRvIHVzZSBpbnN0ZWFkDQpvZiB0aGUgZGVmYXVs dCBTSUdLSUxMLCB0byBhbGxvdyBmb3IgY2F0Y2hpbmcgdGhlIG5vdGlmaWNhdGlvbg0Kc2lnbmFs OyBmb3IgZXhhbXBsZSwgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50LCBpdCBtaWdodCBiZQ0K aGVscGZ1bCB0byBsb2cgaW5mb3JtYXRpb24gdG8gdGhlIGFwcGxpY2F0aW9uIGxvZ2dpbmcgbWVj aGFuaXNtDQpiZWZvcmUgZXhpdGluZy4gT3IsIHRoZSBzaWduYWwgaGFuZGxlciBtaWdodCBjaG9v c2UgdG8gcmVzZXQgdGhlDQpwcm9ncmFtIGNvdW50ZXIgYmFjayB0byB0aGUgY29kZSBzZWdtZW50 IGludGVuZGVkIHRvIGJlIHJ1biBpc29sYXRlZA0KdmlhIHByY3RsKCkgdG8gY29udGludWUgZXhl Y3V0aW9uLg0KDQpJbiBhIG51bWJlciBvZiBjYXNlcyB3ZSBjYW4gdGVsbCBvbiBhIHJlbW90ZSBj cHUgdGhhdCB3ZSBhcmUNCmdvaW5nIHRvIGJlIGludGVycnVwdGluZyB0aGUgY3B1LCBlLmcuIHZp YSBhbiBJUEkgb3IgYSBUTEIgZmx1c2guDQpJbiB0aGF0IGNhc2Ugd2UgZ2VuZXJhdGUgdGhlIGRp YWdub3N0aWMgKGFuZCBvcHRpb25hbCBzdGFjayBkdW1wKQ0Kb24gdGhlIHJlbW90ZSBjb3JlIHRv IGJlIGFibGUgdG8gZGVsaXZlciBiZXR0ZXIgZGlhZ25vc3RpY3MuDQpJZiB0aGUgaW50ZXJydXB0 IGlzIG5vdCBzb21ldGhpbmcgY2F1Z2h0IGJ5IExpbnV4IChlLmcuIGENCmh5cGVydmlzb3IgaW50 ZXJydXB0KSB3ZSBjYW4gYWxzbyByZXF1ZXN0IGEgcmVzY2hlZHVsZSBJUEkgdG8NCmJlIHNlbnQg dG8gdGhlIHJlbW90ZSBjb3JlIHNvIGl0IGNhbiBiZSBzdXJlIHRvIGdlbmVyYXRlIGENCnNpZ25h bCB0byBub3RpZnkgdGhlIHByb2Nlc3MuDQoNClNlcGFyYXRlIHBhdGNoZXMgdGhhdCBmb2xsb3cg cHJvdmlkZSB0aGVzZSBjaGFuZ2VzIGZvciB4ODYsIGFybSwNCmFuZCBhcm02NC4NCg0KU2lnbmVk LW9mZi1ieTogQWxleCBCZWxpdHMgPGFiZWxpdHNAbWFydmVsbC5jb20+DQotLS0NCiAuLi4vYWRt aW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0ICAgICAgICAgfCAgIDYgKw0KIGluY2x1ZGUv bGludXgvaHJ0aW1lci5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArDQogaW5jbHVkZS9s aW51eC9pc29sYXRpb24uaCAgICAgICAgICAgICAgICAgICAgIHwgMjI5ICsrKysrDQogaW5jbHVk ZS9saW51eC9zY2hlZC5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICsNCiBpbmNsdWRl L2xpbnV4L3RpY2suaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKw0KIGluY2x1ZGUv dWFwaS9saW51eC9wcmN0bC5oICAgICAgICAgICAgICAgICAgICB8ICAgNiArDQogaW5pdC9LY29u ZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI4ICsNCiBrZXJuZWwvTWFr ZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKw0KIGtlcm5lbC9jb250 ZXh0X3RyYWNraW5nLmMgICAgICAgICAgICAgICAgICAgICB8ICAgMiArDQoga2VybmVsL2lzb2xh dGlvbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgODMxICsrKysrKysrKysrKysrKysr Kw0KIGtlcm5lbC9zaWduYWwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiAr DQoga2VybmVsL3N5cy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2ICsN CiBrZXJuZWwvdGltZS9ocnRpbWVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjcgKw0K IGtlcm5lbC90aW1lL3RpY2stc2NoZWQuYyAgICAgICAgICAgICAgICAgICAgICB8ICAxOCArDQog MTQgZmlsZXMgY2hhbmdlZCwgMTE2OCBpbnNlcnRpb25zKCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGluY2x1ZGUvbGludXgvaXNvbGF0aW9uLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQga2VybmVsL2lz b2xhdGlvbi5jDQoNCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5l bC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFt ZXRlcnMudHh0DQppbmRleCBjMDc4MTVkMjMwYmMuLmU0YTJkNmUzNzY0NSAxMDA2NDQNCi0tLSBh L0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0DQorKysgYi9E b2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dA0KQEAgLTQ4MDgs NiArNDgwOCwxMiBAQA0KIAkJCW5ldXRyYWxpemUgYW55IGVmZmVjdCBvZiAvcHJvYy9zeXMva2Vy bmVsL3N5c3JxLg0KIAkJCVVzZWZ1bCBmb3IgZGVidWdnaW5nLg0KIA0KKwl0YXNrX2lzb2xhdGlv bl9kZWJ1ZwlbS05MXQ0KKwkJCUluIGtlcm5lbHMgYnVpbHQgd2l0aCBDT05GSUdfVEFTS19JU09M QVRJT04sIHRoaXMNCisJCQlzZXR0aW5nIHdpbGwgZ2VuZXJhdGUgY29uc29sZSBiYWNrdHJhY2Vz IHRvDQorCQkJYWNjb21wYW55IHRoZSBkaWFnbm9zdGljcyBnZW5lcmF0ZWQgYWJvdXQNCisJCQlp bnRlcnJ1cHRpbmcgdGFza3MgcnVubmluZyB3aXRoIHRhc2sgaXNvbGF0aW9uLg0KKw0KIAl0Y3Bt aGFzaF9lbnRyaWVzPSBbS05MLE5FVF0NCiAJCQlTZXQgdGhlIG51bWJlciBvZiB0Y3BfbWV0cmlj c19oYXNoIHNsb3RzLg0KIAkJCURlZmF1bHQgdmFsdWUgaXMgODE5MiBvciAxNjM4NCBkZXBlbmRp bmcgb24gdG90YWwNCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaCBiL2luY2x1 ZGUvbGludXgvaHJ0aW1lci5oDQppbmRleCAxNWM4YWMzMTM2NzguLmU4MTI1MmViNGY5MiAxMDA2 NDQNCi0tLSBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oDQorKysgYi9pbmNsdWRlL2xpbnV4L2hy dGltZXIuaA0KQEAgLTUyOCw2ICs1MjgsMTAgQEAgZXh0ZXJuIHZvaWQgX19pbml0IGhydGltZXJz X2luaXQodm9pZCk7DQogLyogU2hvdyBwZW5kaW5nIHRpbWVyczogKi8NCiBleHRlcm4gdm9pZCBz eXNycV90aW1lcl9saXN0X3Nob3codm9pZCk7DQogDQorI2lmZGVmIENPTkZJR19UQVNLX0lTT0xB VElPTg0KK2V4dGVybiB2b2lkIGtpY2tfaHJ0aW1lcih2b2lkKTsNCisjZW5kaWYNCisNCiBpbnQg aHJ0aW1lcnNfcHJlcGFyZV9jcHUodW5zaWduZWQgaW50IGNwdSk7DQogI2lmZGVmIENPTkZJR19I T1RQTFVHX0NQVQ0KIGludCBocnRpbWVyc19kZWFkX2NwdSh1bnNpZ25lZCBpbnQgY3B1KTsNCmRp ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzb2xhdGlvbi5oIGIvaW5jbHVkZS9saW51eC9pc29s YXRpb24uaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uNmJkNzFj NjdmMTBmDQotLS0gL2Rldi9udWxsDQorKysgYi9pbmNsdWRlL2xpbnV4L2lzb2xhdGlvbi5oDQpA QCAtMCwwICsxLDIyOSBAQA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u bHkgKi8NCisvKg0KKyAqIFRhc2sgaXNvbGF0aW9uIHN1cHBvcnQNCisgKg0KKyAqIEF1dGhvcnM6 DQorICogICBDaHJpcyBNZXRjYWxmIDxjbWV0Y2FsZkBtZWxsYW5veC5jb20+DQorICogICBBbGV4 IEJlbGl0cyA8YWJlbGl0c0BtYXJ2ZWxsLmNvbT4NCisgKiAgIFl1cmkgTm9yb3YgPHlub3JvdkBt YXJ2ZWxsLmNvbT4NCisgKi8NCisjaWZuZGVmIF9MSU5VWF9JU09MQVRJT05fSA0KKyNkZWZpbmUg X0xJTlVYX0lTT0xBVElPTl9IDQorDQorI2luY2x1ZGUgPHN0ZGFyZy5oPg0KKyNpbmNsdWRlIDxs aW51eC9lcnJuby5oPg0KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+DQorI2luY2x1ZGUgPGxp bnV4L3ByY3RsLmg+DQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQorDQorc3RydWN0IHRhc2tf c3RydWN0Ow0KKw0KKyNpZmRlZiBDT05GSUdfVEFTS19JU09MQVRJT04NCisNCitpbnQgdGFza19p c29sYXRpb25fbWVzc2FnZShpbnQgY3B1LCBpbnQgbGV2ZWwsIGJvb2wgc3VwcCwgY29uc3QgY2hh ciAqZm10LCAuLi4pOw0KKw0KKyNkZWZpbmUgcHJfdGFza19pc29sX2VtZXJnKGNwdSwgZm10LCAu Li4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVWRUxfRU1FUkcsIGZh bHNlLCBmbXQsICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xfYWxlcnQoY3B1 LCBmbXQsIC4uLikJCQlcDQorCXRhc2tfaXNvbGF0aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZFTF9B TEVSVCwgZmFsc2UsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisjZGVmaW5lIHByX3Rhc2tfaXNvbF9j cml0KGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9H TEVWRUxfQ1JJVCwgZmFsc2UsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisjZGVmaW5lIHByX3Rhc2tf aXNvbF9lcnIoY3B1LCBmbXQsIC4uLikJCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNw dSwgTE9HTEVWRUxfRVJSLCBmYWxzZSwgZm10LCAjI19fVkFfQVJHU19fKQ0KKyNkZWZpbmUgcHJf dGFza19pc29sX3dhcm4oY3B1LCBmbXQsIC4uLikJCQlcDQorCXRhc2tfaXNvbGF0aW9uX21lc3Nh Z2UoY3B1LCBMT0dMRVZFTF9XQVJOSU5HLCBmYWxzZSwgZm10LCAjI19fVkFfQVJHU19fKQ0KKyNk ZWZpbmUgcHJfdGFza19pc29sX25vdGljZShjcHUsIGZtdCwgLi4uKQkJCVwNCisJdGFza19pc29s YXRpb25fbWVzc2FnZShjcHUsIExPR0xFVkVMX05PVElDRSwgZmFsc2UsIGZtdCwgIyNfX1ZBX0FS R1NfXykNCisjZGVmaW5lIHByX3Rhc2tfaXNvbF9pbmZvKGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0 YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVWRUxfSU5GTywgZmFsc2UsIGZtdCwgIyNf X1ZBX0FSR1NfXykNCisjZGVmaW5lIHByX3Rhc2tfaXNvbF9kZWJ1ZyhjcHUsIGZtdCwgLi4uKQkJ CVwNCisJdGFza19pc29sYXRpb25fbWVzc2FnZShjcHUsIExPR0xFVkVMX0RFQlVHLCBmYWxzZSwg Zm10LCAjI19fVkFfQVJHU19fKQ0KKw0KKyNkZWZpbmUgcHJfdGFza19pc29sX2VtZXJnX3N1cHAo Y3B1LCBmbXQsIC4uLikJCQlcDQorCXRhc2tfaXNvbGF0aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZF TF9FTUVSRywgdHJ1ZSwgZm10LCAjI19fVkFfQVJHU19fKQ0KKyNkZWZpbmUgcHJfdGFza19pc29s X2FsZXJ0X3N1cHAoY3B1LCBmbXQsIC4uLikJCQlcDQorCXRhc2tfaXNvbGF0aW9uX21lc3NhZ2Uo Y3B1LCBMT0dMRVZFTF9BTEVSVCwgdHJ1ZSwgZm10LCAjI19fVkFfQVJHU19fKQ0KKyNkZWZpbmUg cHJfdGFza19pc29sX2NyaXRfc3VwcChjcHUsIGZtdCwgLi4uKQkJCVwNCisJdGFza19pc29sYXRp b25fbWVzc2FnZShjcHUsIExPR0xFVkVMX0NSSVQsIHRydWUsIGZtdCwgIyNfX1ZBX0FSR1NfXykN CisjZGVmaW5lIHByX3Rhc2tfaXNvbF9lcnJfc3VwcChjcHUsIGZtdCwgLi4uKQkJCQlcDQorCXRh c2tfaXNvbGF0aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZFTF9FUlIsIHRydWUsIGZtdCwgIyNfX1ZB X0FSR1NfXykNCisjZGVmaW5lIHByX3Rhc2tfaXNvbF93YXJuX3N1cHAoY3B1LCBmbXQsIC4uLikJ CQlcDQorCXRhc2tfaXNvbGF0aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZFTF9XQVJOSU5HLCB0cnVl LCBmbXQsICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xfbm90aWNlX3N1cHAo Y3B1LCBmbXQsIC4uLikJCQlcDQorCXRhc2tfaXNvbGF0aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZF TF9OT1RJQ0UsIHRydWUsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisjZGVmaW5lIHByX3Rhc2tfaXNv bF9pbmZvX3N1cHAoY3B1LCBmbXQsIC4uLikJCQlcDQorCXRhc2tfaXNvbGF0aW9uX21lc3NhZ2Uo Y3B1LCBMT0dMRVZFTF9JTkZPLCB0cnVlLCBmbXQsICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBw cl90YXNrX2lzb2xfZGVidWdfc3VwcChjcHUsIGZtdCwgLi4uKQkJCVwNCisJdGFza19pc29sYXRp b25fbWVzc2FnZShjcHUsIExPR0xFVkVMX0RFQlVHLCB0cnVlLCBmbXQsICMjX19WQV9BUkdTX18p DQorREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHRza190aHJlYWRfZmxhZ3NfY29weSk7 DQorZXh0ZXJuIGNwdW1hc2tfdmFyX3QgdGFza19pc29sYXRpb25fbWFwOw0KKw0KKy8qKg0KKyAq IHRhc2tfaXNvbGF0aW9uX3JlcXVlc3QoKSAtIHByY3RsIGhvb2sgdG8gcmVxdWVzdCB0YXNrIGlz b2xhdGlvbg0KKyAqIEBmbGFnczoJRmxhZ3MgZnJvbSA8bGludXgvcHJjdGwuaD4gUFJfVEFTS19J U09MQVRJT05feHh4Lg0KKyAqDQorICogVGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgZ2VuZXJpYyBw cmN0bCgpIGNvZGUgZm9yIFBSX1RBU0tfSVNPTEFUSU9OLg0KKyAqDQorICogUmV0dXJuOiBSZXR1 cm5zIDAgd2hlbiB0YXNrIGlzb2xhdGlvbiBlbmFibGVkLCBvdGhlcndpc2UgYSBuZWdhdGl2ZQ0K KyAqIGVycm5vLg0KKyAqLw0KK2V4dGVybiBpbnQgdGFza19pc29sYXRpb25fcmVxdWVzdCh1bnNp Z25lZCBpbnQgZmxhZ3MpOw0KK2V4dGVybiB2b2lkIHRhc2tfaXNvbGF0aW9uX2NwdV9jbGVhbnVw KHZvaWQpOw0KKy8qKg0KKyAqIHRhc2tfaXNvbGF0aW9uX3N0YXJ0KCkgLSBhdHRlbXB0IHRvIGFj dHVhbGx5IHN0YXJ0IHRhc2sgaXNvbGF0aW9uDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIHNob3Vs ZCBiZSBpbnZva2VkIGFzIHRoZSBsYXN0IHRoaW5nIHByaW9yIHRvIHJldHVybmluZyB0bw0KKyAq IHVzZXIgc3BhY2UgaWYgVElGX1RBU0tfSVNPTEFUSU9OIGlzIHNldCBpbiB0aGUgdGhyZWFkX2lu Zm8gZmxhZ3MuICBJdA0KKyAqIHdpbGwgYXR0ZW1wdCB0byBxdWllc2NlIHRoZSBjb3JlIGFuZCBl bnRlciB0YXNrLWlzb2xhdGlvbiBtb2RlLiAgSWYgaXQNCisgKiBmYWlscywgaXQgd2lsbCByZXNl dCB0aGUgc3lzdGVtIGNhbGwgcmV0dXJuIHZhbHVlIHRvIGFuIGVycm9yIGNvZGUgdGhhdA0KKyAq IGluZGljYXRlcyB0aGUgZmFpbHVyZSBtb2RlLg0KKyAqLw0KK2V4dGVybiB2b2lkIHRhc2tfaXNv bGF0aW9uX3N0YXJ0KHZvaWQpOw0KKw0KKy8qKg0KKyAqIGlzX2lzb2xhdGlvbl9jcHUoKSAtIGNo ZWNrIGlmIENQVSBpcyBpbnRlbmRlZCBmb3IgcnVubmluZyBpc29sYXRlZCB0YXNrcy4NCisgKiBA Y3B1OglDUFUgdG8gY2hlY2suDQorICovDQorc3RhdGljIGlubGluZSBib29sIGlzX2lzb2xhdGlv bl9jcHUoaW50IGNwdSkNCit7DQorCXJldHVybiB0YXNrX2lzb2xhdGlvbl9tYXAgIT0gTlVMTCAm Jg0KKwkJY3B1bWFza190ZXN0X2NwdShjcHUsIHRhc2tfaXNvbGF0aW9uX21hcCk7DQorfQ0KKw0K Ky8qKg0KKyAqIHRhc2tfaXNvbGF0aW9uX29uX2NwdSgpIC0gY2hlY2sgaWYgdGhlIGNwdSBpcyBy dW5uaW5nIGlzb2xhdGVkIHRhc2sNCisgKiBAY3B1OglDUFUgdG8gY2hlY2suDQorICovDQorZXh0 ZXJuIGludCB0YXNrX2lzb2xhdGlvbl9vbl9jcHUoaW50IGNwdSk7DQorZXh0ZXJuIHZvaWQgdGFz a19pc29sYXRpb25fY2hlY2tfcnVuX2NsZWFudXAodm9pZCk7DQorDQorLyoqDQorICogdGFza19p c29sYXRpb25fY3B1bWFzaygpIC0gc2V0IENQVXMgY3VycmVudGx5IHJ1bm5pbmcgaXNvbGF0ZWQg dGFza3MNCisgKiBAbWFzazoJTWFzayB0byBtb2RpZnkuDQorICovDQorZXh0ZXJuIHZvaWQgdGFz a19pc29sYXRpb25fY3B1bWFzayhzdHJ1Y3QgY3B1bWFzayAqbWFzayk7DQorDQorLyoqDQorICog dGFza19pc29sYXRpb25fY2xlYXJfY3B1bWFzaygpIC0gY2xlYXIgQ1BVcyBjdXJyZW50bHkgcnVu bmluZyBpc29sYXRlZCB0YXNrcw0KKyAqIEBtYXNrOiAgICAgIE1hc2sgdG8gbW9kaWZ5Lg0KKyAq Lw0KK2V4dGVybiB2b2lkIHRhc2tfaXNvbGF0aW9uX2NsZWFyX2NwdW1hc2soc3RydWN0IGNwdW1h c2sgKm1hc2spOw0KKw0KKy8qKg0KKyAqIHRhc2tfaXNvbGF0aW9uX3N5c2NhbGwoKSAtIHJlcG9y dCBhIHN5c2NhbGwgZnJvbSBhbiBpc29sYXRlZCB0YXNrDQorICogQG5yOgkJVGhlIHN5c2NhbGwg bnVtYmVyLg0KKyAqDQorICogVGhpcyByb3V0aW5lIHNob3VsZCBiZSBpbnZva2VkIGF0IHN5c2Nh bGwgZW50cnkgaWYgVElGX1RBU0tfSVNPTEFUSU9OIGlzDQorICogc2V0IGluIHRoZSB0aHJlYWRf aW5mbyBmbGFncy4gIEl0IGNoZWNrcyBmb3IgdmFsaWQgc3lzY2FsbHMsDQorICogc3BlY2lmaWNh bGx5IHByY3RsKCkgd2l0aCBQUl9UQVNLX0lTT0xBVElPTiwgZXhpdCgpLCBhbmQgZXhpdF9ncm91 cCgpLg0KKyAqIEZvciBhbnkgb3RoZXIgc3lzY2FsbCBpdCB3aWxsIHJhaXNlIGEgc2lnbmFsIGFu ZCByZXR1cm4gZmFpbHVyZS4NCisgKg0KKyAqIFJldHVybjogMCBmb3IgYWNjZXB0YWJsZSBzeXNj YWxscywgLTEgZm9yIGFsbCBvdGhlcnMuDQorICovDQorZXh0ZXJuIGludCB0YXNrX2lzb2xhdGlv bl9zeXNjYWxsKGludCBucik7DQorDQorLyoqDQorICogX3Rhc2tfaXNvbGF0aW9uX2ludGVycnVw dCgpIC0gcmVwb3J0IGFuIGludGVycnVwdCBvZiBhbiBpc29sYXRlZCB0YXNrDQorICogQGZtdDoJ QSBmb3JtYXQgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGludGVycnVwdA0KKyAqIEAuLi46CUZvcm1h dCBhcmd1bWVudHMsIGlmIGFueS4NCisgKg0KKyAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUgaW52 b2tlZCBhdCBhbnkgZXhjZXB0aW9uIG9yIElSUSBpZg0KKyAqIFRJRl9UQVNLX0lTT0xBVElPTiBp cyBzZXQgaW4gdGhlIHRocmVhZF9pbmZvIGZsYWdzLiAgSXQgaXMgbm90IG5lY2Vzc2FyeQ0KKyAq IHRvIGludm9rZSBpdCBpZiB0aGUgZXhjZXB0aW9uIHdpbGwgZ2VuZXJhdGUgYSBzaWduYWwgYW55 d2F5IChlLmcuIGEgYmFkDQorICogcGFnZSBmYXVsdCksIGFuZCBpbiB0aGF0IGNhc2UgaXQgaXMg cHJlZmVyYWJsZSBub3QgdG8gaW52b2tlIGl0IGJ1dCBqdXN0DQorICogcmVseSBvbiB0aGUgc3Rh bmRhcmQgTGludXggc2lnbmFsLiAgVGhlIG1hY3JvIHRhc2tfaXNvbGF0aW9uX3N5c2NhbGwoKQ0K KyAqIHdyYXBzIHRoZSBUSUZfVEFTS19JU09MQVRJT04gZmxhZyB0ZXN0IHRvIHNpbXBsaWZ5IHRo ZSBjYWxsZXIgY29kZS4NCisgKi8NCitleHRlcm4gdm9pZCBfdGFza19pc29sYXRpb25faW50ZXJy dXB0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsNCisjZGVmaW5lIHRhc2tfaXNvbGF0aW9uX2ludGVy cnVwdChmbXQsIC4uLikJCQkJXA0KKwlkbyB7CQkJCQkJCQlcDQorCQlpZiAoY3VycmVudF90aHJl YWRfaW5mbygpLT5mbGFncyAmIF9USUZfVEFTS19JU09MQVRJT04pCVwNCisJCQlfdGFza19pc29s YXRpb25faW50ZXJydXB0KGZtdCwgIyMgX19WQV9BUkdTX18pOwlcDQorCX0gd2hpbGUgKDApDQor DQorLyoqDQorICogdGFza19pc29sYXRpb25fcmVtb3RlKCkgLSByZXBvcnQgYSByZW1vdGUgaW50 ZXJydXB0IG9mIGFuIGlzb2xhdGVkIHRhc2sNCisgKiBAY3B1OglUaGUgcmVtb3RlIGNwdSB0aGF0 IGlzIGFib3V0IHRvIGJlIGludGVycnVwdGVkLg0KKyAqIEBmbXQ6CUEgZm9ybWF0IHN0cmluZyBk ZXNjcmliaW5nIHRoZSBpbnRlcnJ1cHQNCisgKiBALi4uOglGb3JtYXQgYXJndW1lbnRzLCBpZiBh bnkuDQorICoNCisgKiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlIGludm9rZWQgYW55IHRpbWUgYSBy ZW1vdGUgSVBJIG9yIG90aGVyIHR5cGUgb2YNCisgKiBpbnRlcnJ1cHQgaXMgYmVpbmcgZGVsaXZl cmVkIHRvIGFub3RoZXIgY3B1LiBUaGUgZnVuY3Rpb24gd2lsbCBjaGVjayB0bw0KKyAqIHNlZSBp ZiB0aGUgdGFyZ2V0IGNvcmUgaXMgcnVubmluZyBhIHRhc2staXNvbGF0aW9uIHRhc2ssIGFuZCBn ZW5lcmF0ZSBhDQorICogZGlhZ25vc3RpYyBvbiB0aGUgY29uc29sZSBpZiBzbzsgaW4gYWRkaXRp b24sIHdlIHRhZyB0aGUgdGFzayBzbyBpdA0KKyAqIGRvZXNuJ3QgZ2VuZXJhdGUgYW5vdGhlciBk aWFnbm9zdGljIHdoZW4gdGhlIGludGVycnVwdCBhY3R1YWxseSBhcnJpdmVzLg0KKyAqIEdlbmVy YXRpbmcgYSBkaWFnbm9zdGljIHJlbW90ZWx5IHlpZWxkcyBhIGNsZWFyZXIgaW5kaWNhdGlvbiBv ZiB3aGF0DQorICogaGFwcGVuZWQgdGhlbiBqdXN0IHJlcG9ydGluZyBvbmx5IHdoZW4gdGhlIHJl bW90ZSBjb3JlIGlzIGludGVycnVwdGVkLg0KKyAqDQorICovDQorZXh0ZXJuIHZvaWQgdGFza19p c29sYXRpb25fcmVtb3RlKGludCBjcHUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsNCisNCisvKioN CisgKiB0YXNrX2lzb2xhdGlvbl9yZW1vdGVfY3B1bWFzaygpIC0gcmVwb3J0IGludGVycnVwdGlv biBvZiBtdWx0aXBsZSBjcHVzDQorICogQG1hc2s6CVRoZSBzZXQgb2YgcmVtb3RlcyBjcHVzIHRo YXQgYXJlIGFib3V0IHRvIGJlIGludGVycnVwdGVkLg0KKyAqIEBmbXQ6CUEgZm9ybWF0IHN0cmlu ZyBkZXNjcmliaW5nIHRoZSBpbnRlcnJ1cHQNCisgKiBALi4uOglGb3JtYXQgYXJndW1lbnRzLCBp ZiBhbnkuDQorICoNCisgKiBUaGlzIGlzIHRoZSBjcHVtYXNrIHZhcmlhbnQgb2YgX3Rhc2tfaXNv bGF0aW9uX3JlbW90ZSgpLiAgV2UNCisgKiBnZW5lcmF0ZSBhIHNpbmdsZS1saW5lIGRpYWdub3N0 aWMgbWVzc2FnZSBldmVuIGlmIG11bHRpcGxlIHJlbW90ZQ0KKyAqIHRhc2staXNvbGF0aW9uIGNw dXMgYXJlIGJlaW5nIGludGVycnVwdGVkLg0KKyAqLw0KK2V4dGVybiB2b2lkIHRhc2tfaXNvbGF0 aW9uX3JlbW90ZV9jcHVtYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLA0KKwkJCQkJICBj b25zdCBjaGFyICpmbXQsIC4uLik7DQorDQorLyoqDQorICogX3Rhc2tfaXNvbGF0aW9uX3NpZ25h bCgpIC0gZGlzYWJsZSB0YXNrIGlzb2xhdGlvbiB3aGVuIHNpZ25hbCBpcyBwZW5kaW5nDQorICog QHRhc2s6CVRoZSB0YXNrIGZvciB3aGljaCB0byBkaXNhYmxlIGlzb2xhdGlvbi4NCisgKg0KKyAq IFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgZGlhZ25vc3RpYyBhbmQgZGlzYWJsZXMgdGFzayBp c29sYXRpb247IGl0DQorICogc2hvdWxkIGJlIGNhbGxlZCBpZiBUSUZfVEFTS19JU09MQVRJT04g aXMgc2V0IHdoZW4gbm90aWZ5aW5nIGEgdGFzayBvZiBhDQorICogcGVuZGluZyBzaWduYWwuICBU aGUgdGFza19pc29sYXRpb25faW50ZXJydXB0KCkgZnVuY3Rpb24gbm9ybWFsbHkNCisgKiBnZW5l cmF0ZXMgYSBkaWFnbm9zdGljIGZvciBldmVudHMgdGhhdCBqdXN0IGludGVycnVwdCBhIHRhc2sg d2l0aG91dA0KKyAqIGdlbmVyYXRpbmcgYSBzaWduYWw7IGhlcmUgd2UgbmVlZCB0byBob29rIHRo ZSBwYXRocyB0aGF0IGNvcnJlc3BvbmQgdG8NCisgKiBpbnRlcnJ1cHRzIHRoYXQgZG8gZ2VuZXJh dGUgYSBzaWduYWwuICBUaGUgbWFjcm8gdGFza19pc29sYXRpb25fc2lnbmFsKCkNCisgKiB3cmFw cyB0aGUgVElGX1RBU0tfSVNPTEFUSU9OIGZsYWcgdGVzdCB0byBzaW1wbGlmeSB0aGUgY2FsbGVy IGNvZGUuDQorICovDQorZXh0ZXJuIHZvaWQgX3Rhc2tfaXNvbGF0aW9uX3NpZ25hbChzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnRhc2spOw0KKyNkZWZpbmUgdGFza19pc29sYXRpb25fc2lnbmFsKHRhc2sp CQkJCQlcDQorCWRvIHsJCQkJCQkJCVwNCisJCWlmICh0YXNrX3RocmVhZF9pbmZvKHRhc2spLT5m bGFncyAmIF9USUZfVEFTS19JU09MQVRJT04pIFwNCisJCQlfdGFza19pc29sYXRpb25fc2lnbmFs KHRhc2spOwkJCVwNCisJfSB3aGlsZSAoMCkNCisNCisvKioNCisgKiB0YXNrX2lzb2xhdGlvbl91 c2VyX2V4aXQoKSAtIGRlYnVnIGFsbCB1c2VyX2V4aXQgY2FsbHMNCisgKg0KKyAqIEJ5IGRlZmF1 bHQsIHdlIGRvbid0IGdlbmVyYXRlIGFuIGV4Y2VwdGlvbiBpbiB0aGUgbG93LWxldmVsIHVzZXJf ZXhpdCgpDQorICogY29kZSwgYmVjYXVzZSBwcm9ncmFtcyBsb3NlIHRoZSBhYmlsaXR5IHRvIGRp c2FibGUgdGFzayBpc29sYXRpb246IHRoZQ0KKyAqIHVzZXJfZXhpdCgpIGhvb2sgd2lsbCBjYXVz ZSBhIHNpZ25hbCBwcmlvciB0byB0YXNrX2lzb2xhdGlvbl9zeXNjYWxsKCkNCisgKiBkaXNhYmxp bmcgdGFzayBpc29sYXRpb24uICBJbiBhZGRpdGlvbiwgaXQgbWVhbnMgdGhhdCB3ZSBsb3NlIGFs bCB0aGUNCisgKiBkaWFnbm9zdGljIGluZm8gb3RoZXJ3aXNlIGF2YWlsYWJsZSBmcm9tIHRhc2tf aXNvbGF0aW9uX2ludGVycnVwdCgpIGhvb2tzDQorICogbGF0ZXIgaW4gdGhlIGludGVycnVwdC1o YW5kbGluZyBwcm9jZXNzLiAgQnV0IHlvdSBtYXkgZW5hYmxlIGl0IGhlcmUgZm9yDQorICogYSBz cGVjaWFsIGtlcm5lbCBidWlsZCBpZiB5b3UgYXJlIGhhdmluZyB1bmRpYWdub3NlZCB1c2Vyc3Bh Y2Ugaml0dGVyLg0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lzb2xhdGlvbl91c2Vy X2V4aXQodm9pZCkNCit7DQorI2lmZGVmIERFQlVHX1RBU0tfSVNPTEFUSU9ODQorCXRhc2tfaXNv bGF0aW9uX2ludGVycnVwdCgidXNlcl9leGl0Iik7DQorI2VuZGlmDQorfQ0KKw0KKyNlbHNlIC8q ICFDT05GSUdfVEFTS19JU09MQVRJT04gKi8NCitzdGF0aWMgaW5saW5lIGludCB0YXNrX2lzb2xh dGlvbl9yZXF1ZXN0KHVuc2lnbmVkIGludCBmbGFncykgeyByZXR1cm4gLUVJTlZBTDsgfQ0KK3N0 YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lzb2xhdGlvbl9zdGFydCh2b2lkKSB7IH0NCitzdGF0aWMg aW5saW5lIGJvb2wgaXNfaXNvbGF0aW9uX2NwdShpbnQgY3B1KSB7IHJldHVybiAwOyB9DQorc3Rh dGljIGlubGluZSBpbnQgdGFza19pc29sYXRpb25fb25fY3B1KGludCBjcHUpIHsgcmV0dXJuIDA7 IH0NCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19pc29sYXRpb25fY3B1bWFzayhzdHJ1Y3QgY3B1 bWFzayAqbWFzaykgeyB9DQorc3RhdGljIGlubGluZSB2b2lkIHRhc2tfaXNvbGF0aW9uX2NsZWFy X2NwdW1hc2soc3RydWN0IGNwdW1hc2sgKm1hc2spIHsgfQ0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0 YXNrX2lzb2xhdGlvbl9jcHVfY2xlYW51cCh2b2lkKSB7IH0NCitzdGF0aWMgaW5saW5lIHZvaWQg dGFza19pc29sYXRpb25fY2hlY2tfcnVuX2NsZWFudXAodm9pZCkgeyB9DQorc3RhdGljIGlubGlu ZSBpbnQgdGFza19pc29sYXRpb25fc3lzY2FsbChpbnQgbnIpIHsgcmV0dXJuIDA7IH0NCitzdGF0 aWMgaW5saW5lIHZvaWQgdGFza19pc29sYXRpb25faW50ZXJydXB0KGNvbnN0IGNoYXIgKmZtdCwg Li4uKSB7IH0NCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19pc29sYXRpb25fcmVtb3RlKGludCBj cHUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7IH0NCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19p c29sYXRpb25fcmVtb3RlX2NwdW1hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssDQorCQkJ CQkJIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7IH0NCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19p c29sYXRpb25fc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykgeyB9DQorc3RhdGljIGlu bGluZSB2b2lkIHRhc2tfaXNvbGF0aW9uX3VzZXJfZXhpdCh2b2lkKSB7IH0NCisjZW5kaWYNCisN CisjZW5kaWYgLyogX0xJTlVYX0lTT0xBVElPTl9IICovDQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9s aW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oDQppbmRleCAwNDI3ODQ5M2JmMTUu LjUyZmRiMzJhYTNiOSAxMDA2NDQNCi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaA0KKysrIGIv aW5jbHVkZS9saW51eC9zY2hlZC5oDQpAQCAtMTI4MCw2ICsxMjgwLDEwIEBAIHN0cnVjdCB0YXNr X3N0cnVjdCB7DQogCXVuc2lnbmVkIGxvbmcJCQlsb3dlc3Rfc3RhY2s7DQogCXVuc2lnbmVkIGxv bmcJCQlwcmV2X2xvd2VzdF9zdGFjazsNCiAjZW5kaWYNCisjaWZkZWYgQ09ORklHX1RBU0tfSVNP TEFUSU9ODQorCXVuc2lnbmVkIHNob3J0CQkJdGFza19pc29sYXRpb25fZmxhZ3M7ICAvKiBwcmN0 bCAqLw0KKwl1bnNpZ25lZCBzaG9ydAkJCXRhc2tfaXNvbGF0aW9uX3N0YXRlOw0KKyNlbmRpZg0K IA0KIAkvKg0KIAkgKiBOZXcgZmllbGRzIGZvciB0YXNrX3N0cnVjdCBzaG91bGQgYmUgYWRkZWQg YWJvdmUgaGVyZSwgc28gdGhhdA0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGljay5oIGIv aW5jbHVkZS9saW51eC90aWNrLmgNCmluZGV4IDczNDA2MTNjN2VmZi4uMjdjN2MwMzNkNWE4IDEw MDY0NA0KLS0tIGEvaW5jbHVkZS9saW51eC90aWNrLmgNCisrKyBiL2luY2x1ZGUvbGludXgvdGlj ay5oDQpAQCAtMjY4LDYgKzI2OCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2RlcF9jbGVh cl9zaWduYWwoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZ25hbCwNCiBleHRlcm4gdm9pZCB0aWNr X25vaHpfZnVsbF9raWNrX2NwdShpbnQgY3B1KTsNCiBleHRlcm4gdm9pZCBfX3RpY2tfbm9oel90 YXNrX3N3aXRjaCh2b2lkKTsNCiBleHRlcm4gdm9pZCBfX2luaXQgdGlja19ub2h6X2Z1bGxfc2V0 dXAoY3B1bWFza192YXJfdCBjcHVtYXNrKTsNCisjaWZkZWYgQ09ORklHX1RBU0tfSVNPTEFUSU9O DQorZXh0ZXJuIGludCB0cnlfc3RvcF9mdWxsX3RpY2sodm9pZCk7DQorI2VuZGlmDQogI2Vsc2UN CiBzdGF0aWMgaW5saW5lIGJvb2wgdGlja19ub2h6X2Z1bGxfZW5hYmxlZCh2b2lkKSB7IHJldHVy biBmYWxzZTsgfQ0KIHN0YXRpYyBpbmxpbmUgYm9vbCB0aWNrX25vaHpfZnVsbF9jcHUoaW50IGNw dSkgeyByZXR1cm4gZmFsc2U7IH0NCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcHJj dGwuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oDQppbmRleCAwN2I0ZjgxMzFlMzYuLmY0 ODQ4ZWQyYTA2OSAxMDA2NDQNCi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oDQorKysg Yi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaA0KQEAgLTIzOCw0ICsyMzgsMTAgQEAgc3RydWN0 IHByY3RsX21tX21hcCB7DQogI2RlZmluZSBQUl9TRVRfSU9fRkxVU0hFUgkJNTcNCiAjZGVmaW5l IFBSX0dFVF9JT19GTFVTSEVSCQk1OA0KIA0KKy8qIEVuYWJsZSB0YXNrX2lzb2xhdGlvbiBtb2Rl IGZvciBUQVNLX0lTT0xBVElPTiBrZXJuZWxzLiAqLw0KKyNkZWZpbmUgUFJfVEFTS19JU09MQVRJ T04JCTQ4DQorIyBkZWZpbmUgUFJfVEFTS19JU09MQVRJT05fRU5BQkxFCSgxIDw8IDApDQorIyBk ZWZpbmUgUFJfVEFTS19JU09MQVRJT05fU0VUX1NJRyhzaWcpCSgoKHNpZykgJiAweDdmKSA8PCA4 KQ0KKyMgZGVmaW5lIFBSX1RBU0tfSVNPTEFUSU9OX0dFVF9TSUcoYml0cykgKCgoYml0cykgPj4g OCkgJiAweDdmKQ0KKw0KICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqLw0KZGlmZiAtLWdpdCBh L2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZw0KaW5kZXggMjBhNmFjMzM3NjFjLi5lY2RmNTY3 ZjZiZDQgMTAwNjQ0DQotLS0gYS9pbml0L0tjb25maWcNCisrKyBiL2luaXQvS2NvbmZpZw0KQEAg LTU3Niw2ICs1NzYsMzQgQEAgY29uZmlnIENQVV9JU09MQVRJT04NCiANCiBzb3VyY2UgImtlcm5l bC9yY3UvS2NvbmZpZyINCiANCitjb25maWcgSEFWRV9BUkNIX1RBU0tfSVNPTEFUSU9ODQorCWJv b2wNCisNCitjb25maWcgVEFTS19JU09MQVRJT04NCisJYm9vbCAiUHJvdmlkZSBoYXJkIENQVSBp c29sYXRpb24gZnJvbSB0aGUga2VybmVsIG9uIGRlbWFuZCINCisJZGVwZW5kcyBvbiBOT19IWl9G VUxMICYmIEhBVkVfQVJDSF9UQVNLX0lTT0xBVElPTg0KKwloZWxwDQorDQorCUFsbG93IHVzZXJz cGFjZSBwcm9jZXNzZXMgdGhhdCBwbGFjZSB0aGVtc2VsdmVzIG9uIGNvcmVzIHdpdGgNCisJbm9o el9mdWxsIGFuZCBpc29sY3B1cyBlbmFibGVkLCBhbmQgcnVuIHByY3RsKFBSX1RBU0tfSVNPTEFU SU9OKSwNCisJdG8gImlzb2xhdGUiIHRoZW1zZWx2ZXMgZnJvbSB0aGUga2VybmVsLiAgUHJpb3Ig dG8gcmV0dXJuaW5nIHRvDQorCXVzZXJzcGFjZSwgaXNvbGF0ZWQgdGFza3Mgd2lsbCBhcnJhbmdl IHRoYXQgbm8gZnV0dXJlIGtlcm5lbA0KKwlhY3Rpdml0eSB3aWxsIGludGVycnVwdCB0aGUgdGFz ayB3aGlsZSB0aGUgdGFzayBpcyBydW5uaW5nIGluDQorCXVzZXJzcGFjZS4gIEF0dGVtcHRpbmcg dG8gcmUtZW50ZXIgdGhlIGtlcm5lbCB3aGlsZSBpbiB0aGlzIG1vZGUNCisJd2lsbCBjYXVzZSB0 aGUgdGFzayB0byBiZSB0ZXJtaW5hdGVkIHdpdGggYSBzaWduYWw7IHlvdSBtdXN0DQorCWV4cGxp Y2l0bHkgdXNlIHByY3RsKCkgdG8gZGlzYWJsZSB0YXNrIGlzb2xhdGlvbiBiZWZvcmUgcmVzdW1p bmcNCisJbm9ybWFsIHVzZSBvZiB0aGUga2VybmVsLg0KKw0KKwlUaGlzICJoYXJkIiBpc29sYXRp b24gZnJvbSB0aGUga2VybmVsIGlzIHJlcXVpcmVkIGZvciB1c2Vyc3BhY2UNCisJdGFza3MgdGhh dCBhcmUgcnVubmluZyBoYXJkIHJlYWwtdGltZSB0YXNrcyBpbiB1c2Vyc3BhY2UsIHN1Y2ggYXMN CisJYSBoaWdoLXNwZWVkIG5ldHdvcmsgZHJpdmVyIGluIHVzZXJzcGFjZS4gIFdpdGhvdXQgdGhp cyBvcHRpb24sIGJ1dA0KKwl3aXRoIE5PX0haX0ZVTEwgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxs IG1ha2UgYSBiZXN0LWZhaXRoLCAic29mdCINCisJZWZmb3J0IHRvIHNoaWVsZCBhIHNpbmdsZSB1 c2Vyc3BhY2UgcHJvY2VzcyBmcm9tIGludGVycnVwdHMsIGJ1dA0KKwltYWtlcyBubyBndWFyYW50 ZWVzLg0KKw0KKwlZb3Ugc2hvdWxkIHNheSAiTiIgdW5sZXNzIHlvdSBhcmUgaW50ZW5kaW5nIHRv IHJ1biBhDQorCWhpZ2gtcGVyZm9ybWFuY2UgdXNlcnNwYWNlIGRyaXZlciBvciBzaW1pbGFyIHRh c2suDQorDQogY29uZmlnIEJVSUxEX0JJTjJDDQogCWJvb2wNCiAJZGVmYXVsdCBuDQpkaWZmIC0t Z2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlDQppbmRleCA0Y2I0MTMwY2Vk MzIuLjJmMmFlOTFmOTBkNSAxMDA2NDQNCi0tLSBhL2tlcm5lbC9NYWtlZmlsZQ0KKysrIGIva2Vy bmVsL01ha2VmaWxlDQpAQCAtMTIyLDYgKzEyMiw4IEBAIG9iai0kKENPTkZJR19HQ0NfUExVR0lO X1NUQUNLTEVBSykgKz0gc3RhY2tsZWFrLm8NCiBLQVNBTl9TQU5JVElaRV9zdGFja2xlYWsubyA6 PSBuDQogS0NPVl9JTlNUUlVNRU5UX3N0YWNrbGVhay5vIDo9IG4NCiANCitvYmotJChDT05GSUdf VEFTS19JU09MQVRJT04pICs9IGlzb2xhdGlvbi5vDQorDQogJChvYmopL2NvbmZpZ3MubzogJChv YmopL2NvbmZpZ19kYXRhLmd6DQogDQogdGFyZ2V0cyArPSBjb25maWdfZGF0YS5neg0KZGlmZiAt LWdpdCBhL2tlcm5lbC9jb250ZXh0X3RyYWNraW5nLmMgYi9rZXJuZWwvY29udGV4dF90cmFja2lu Zy5jDQppbmRleCAwMjk2YjRiZGE4ZjEuLmU5MjA2NzM2ZjIxOSAxMDA2NDQNCi0tLSBhL2tlcm5l bC9jb250ZXh0X3RyYWNraW5nLmMNCisrKyBiL2tlcm5lbC9jb250ZXh0X3RyYWNraW5nLmMNCkBA IC0yMSw2ICsyMSw3IEBADQogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4NCiAjaW5jbHVkZSA8 bGludXgvZXhwb3J0Lmg+DQogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4NCisjaW5jbHVkZSA8 bGludXgvaXNvbGF0aW9uLmg+DQogDQogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTDQogI2lu Y2x1ZGUgPHRyYWNlL2V2ZW50cy9jb250ZXh0X3RyYWNraW5nLmg+DQpAQCAtMTU3LDYgKzE1OCw3 IEBAIHZvaWQgX19jb250ZXh0X3RyYWNraW5nX2V4aXQoZW51bSBjdHhfc3RhdGUgc3RhdGUpDQog CQkJaWYgKHN0YXRlID09IENPTlRFWFRfVVNFUikgew0KIAkJCQl2dGltZV91c2VyX2V4aXQoY3Vy cmVudCk7DQogCQkJCXRyYWNlX3VzZXJfZXhpdCgwKTsNCisJCQkJdGFza19pc29sYXRpb25fdXNl cl9leGl0KCk7DQogCQkJfQ0KIAkJfQ0KIAkJX190aGlzX2NwdV93cml0ZShjb250ZXh0X3RyYWNr aW5nLnN0YXRlLCBDT05URVhUX0tFUk5FTCk7DQpkaWZmIC0tZ2l0IGEva2VybmVsL2lzb2xhdGlv bi5jIGIva2VybmVsL2lzb2xhdGlvbi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMDAwMDAwLi5iZWM1ODdjZWUyODQNCi0tLSAvZGV2L251bGwNCisrKyBiL2tlcm5lbC9pc29s YXRpb24uYw0KQEAgLTAsMCArMSw4MzEgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5DQorLyoNCisgKiAgbGludXgva2VybmVsL2lzb2xhdGlvbi5jDQorICoNCisg KiAgSW1wbGVtZW50YXRpb24gb2YgdGFzayBpc29sYXRpb24uDQorICoNCisgKiBBdXRob3JzOg0K KyAqICAgQ2hyaXMgTWV0Y2FsZiA8Y21ldGNhbGZAbWVsbGFub3guY29tPg0KKyAqICAgQWxleCBC ZWxpdHMgPGFiZWxpdHNAbWFydmVsbC5jb20+DQorICogICBZdXJpIE5vcm92IDx5bm9yb3ZAbWFy dmVsbC5jb20+DQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L21tLmg+DQorI2luY2x1ZGUgPGxp bnV4L3N3YXAuaD4NCisjaW5jbHVkZSA8bGludXgvdm1zdGF0Lmg+DQorI2luY2x1ZGUgPGxpbnV4 L3NjaGVkLmg+DQorI2luY2x1ZGUgPGxpbnV4L2lzb2xhdGlvbi5oPg0KKyNpbmNsdWRlIDxsaW51 eC9zeXNjYWxscy5oPg0KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4NCisjaW5jbHVkZSA8bGludXgv dGljay5oPg0KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+DQorI2luY2x1ZGUgPGFzbS9zeXNjYWxs Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4NCisNCisvKg0KKyAqIFRoZXNlIHZhbHVl cyBhcmUgc3RvcmVkIGluIHRhc2tfaXNvbGF0aW9uX3N0YXRlLg0KKyAqIE5vdGUgdGhhdCBTVEFU RV9OT1JNQUwgKyBUSUZfVEFTS19JU09MQVRJT04gbWVhbnMgd2UgYXJlIHN0aWxsDQorICogcmV0 dXJuaW5nIGZyb20gc3lzX3ByY3RsKCkgdG8gdXNlcnNwYWNlLg0KKyAqLw0KK2VudW0gew0KKwlT VEFURV9OT1JNQUwgPSAwLAkvKiBOb3QgaXNvbGF0ZWQgKi8NCisJU1RBVEVfSVNPTEFURUQgPSAx CS8qIEluIHVzZXJzcGFjZSwgaXNvbGF0ZWQgKi8NCit9Ow0KKw0KKy8qDQorICogVGhpcyB2YXJp YWJsZSBjb250YWlucyB0aHJlYWQgZmxhZ3MgY29waWVkIGF0IHRoZSBtb21lbnQNCisgKiB3aGVu IHNjaGVkdWxlKCkgc3dpdGNoZWQgdG8gdGhlIHRhc2sgb24gYSBnaXZlbiBDUFUsDQorICogb3Ig MCBpZiBubyB0YXNrIGlzIHJ1bm5pbmcuDQorICovDQorREVGSU5FX1BFUl9DUFUodW5zaWduZWQg bG9uZywgdHNrX3RocmVhZF9mbGFnc19jYWNoZSk7DQorDQorLyoNCisgKiBDb3VudGVyIGZvciBp c29sYXRpb24gc3RhdGUgb24gYSBnaXZlbiBDUFUsIGluY3JlbWVudHMgd2hlbiBlbnRlcmluZw0K KyAqIGlzb2xhdGlvbiBhbmQgZGVjcmVtZW50cyB3aGVuIGV4aXRpbmcgaXNvbGF0aW9uIChiZWZv cmUgb3IgYWZ0ZXIgdGhlDQorICogY2xlYW51cCkuIE11bHRpcGxlIHNpbXVsdGFuZW91c2x5IHJ1 bm5pbmcgcHJvY2VkdXJlcyBlbnRlcmluZyBvcg0KKyAqIGV4aXRpbmcgaXNvbGF0aW9uIGFyZSBw cmV2ZW50ZWQgYnkgY2hlY2tpbmcgdGhlIHJlc3VsdCBvZg0KKyAqIGluY3JlbWVudGluZyBvciBk ZWNyZW1lbnRpbmcgdGhpcyB2YXJpYWJsZS4gVGhpcyB2YXJpYWJsZSBpcyBib3RoDQorICogaW5j cmVtZW50ZWQgYW5kIGRlY3JlbWVudGVkIGJ5IENQVSB0aGF0IGNhdXNlZCBpc29sYXRpb24gZW50 ZXJpbmcgb3INCisgKiBleGl0Lg0KKyAqDQorICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBt dWx0aXBsZSBpc29sYXRpb24tYnJlYWtpbmcgZXZlbnRzIG1heSBoYXBwZW4NCisgKiBhdCBvbmNl IChvciBvbmUgYXMgdGhlIHJlc3VsdCBvZiB0aGUgb3RoZXIpLCBob3dldmVyIGlzb2xhdGlvbiBl eGl0DQorICogbWF5IG9ubHkgaGFwcGVuIG9uY2UgdG8gdHJhbnNpdGlvbiBmcm9tIGlzb2xhdGVk IHRvIG5vbi1pc29sYXRlZCBzdGF0ZS4NCisgKiBUaGVyZWZvcmUsIGlmIGRlY3JlbWVudGluZyB0 aGlzIGNvdW50ZXIgcmVzdWx0cyBpbiBhIHZhbHVlIGxlc3MgdGhhbiAwLA0KKyAqIGlzb2xhdGlv biBleGl0IHByb2NlZHVyZSBjYW4ndCBiZSBzdGFydGVkIC0tIGl0IGFscmVhZHkgaGFwcGVuZWQs IG9yIGlzDQorICogaW4gcHJvZ3Jlc3MsIG9yIGlzb2xhdGlvbiBpcyBub3QgZW50ZXJlZCB5ZXQu DQorICovDQorREVGSU5FX1BFUl9DUFUoYXRvbWljX3QsIGlzb2xfY291bnRlcik7DQorDQorLyoN CisgKiBEZXNjcmlwdGlvbiBvZiB0aGUgbGFzdCB0d28gdGFza3MgdGhhdCByYW4gaXNvbGF0ZWQg b24gYSBnaXZlbiBDUFUuDQorICogVGhpcyBpcyBpbnRlbmRlZCBvbmx5IGZvciBtZXNzYWdlcyBh Ym91dCBpc29sYXRpb24gYnJlYWtpbmcuIFdlDQorICogZG9uJ3Qgd2FudCBhbnkgcmVmZXJlbmNl cyB0byBhY3R1YWwgdGFzayB3aGlsZSBhY2Nlc3NpbmcgdGhpcyBmcm9tDQorICogQ1BVIHRoYXQg Y2F1c2VkIGlzb2xhdGlvbiBicmVha2luZyAtLSB3ZSBrbm93IG5vdGhpbmcgYWJvdXQgdGltaW5n DQorICogYW5kIGRvbid0IHdhbnQgdG8gdXNlIGxvY2tpbmcgb3IgUkNVLg0KKyAqLw0KK3N0cnVj dCBpc29sX3Rhc2tfZGVzYyB7DQorCWF0b21pY190IGN1cnJfaW5kZXg7DQorCWF0b21pY190IGN1 cnJfaW5kZXhfd3I7DQorCWJvb2wJd2FybmVkWzJdOw0KKwlwaWRfdAlwaWRbMl07DQorCXBpZF90 CXRnaWRbMl07DQorCWNoYXIJY29tbVsyXVtUQVNLX0NPTU1fTEVOXTsNCit9Ow0KK3N0YXRpYyBE RUZJTkVfUEVSX0NQVShzdHJ1Y3QgaXNvbF90YXNrX2Rlc2MsIGlzb2xfdGFza19kZXNjcyk7DQor DQorLyoNCisgKiBDb3VudGVyIGZvciBpc29sYXRpb24gZXhpdGluZyBwcm9jZWR1cmVzIChmcm9t IHJlcXVlc3QgdG8gdGhlIHN0YXJ0IG9mDQorICogY2xlYW51cCkgYmVpbmcgYXR0ZW1wdGVkIGF0 IG9uY2Ugb24gYSBDUFUuIE5vcm1hbGx5IGluY3JlbWVudGluZyBvZg0KKyAqIHRoaXMgY291bnRl ciBpcyBwZXJmb3JtZWQgZnJvbSB0aGUgQ1BVIHRoYXQgY2F1c2VkIGlzb2xhdGlvbiBicmVha2lu ZywNCisgKiBob3dldmVyIGRlY3JlbWVudGluZyBpcyBkb25lIGZyb20gdGhlIGNsZWFudXAgcHJv Y2VkdXJlLCBkZWxlZ2F0ZWQgdG8NCisgKiB0aGUgQ1BVIHRoYXQgaXMgZXhpdGluZyBpc29sYXRp b24sIG5vdCBmcm9tIHRoZSBDUFUgdGhhdCBjYXVzZWQgaXNvbGF0aW9uDQorICogYnJlYWtpbmcu DQorICoNCisgKiBJZiBpbmNyZW1lbnRpbmcgdGhpcyBjb3VudGVyIHdoaWxlIHN0YXJ0aW5nIGlz b2xhdGlvbiBleGl0IHByb2NlZHVyZQ0KKyAqIHJlc3VsdHMgaW4gYSB2YWx1ZSBncmVhdGVyIHRo YW4gMCwgaXNvbGF0aW9uIGV4aXRpbmcgaXMgYWxyZWFkeSBpbg0KKyAqIHByb2dyZXNzLCBhbmQg Y2xlYW51cCBkaWQgbm90IHN0YXJ0IHlldC4gVGhpcyBtZWFucywgY291bnRlciBzaG91bGQgYmUN CisgKiBkZWNyZW1lbnRlZCBiYWNrLCBhbmQgaXNvbGF0aW9uIGV4aXQgdGhhdCBpcyBhbHJlYWR5 IGluIHByb2dyZXNzLCBzaG91bGQNCisgKiBiZSBhbGxvd2VkIHRvIGNvbXBsZXRlLiBPdGhlcndp c2UsIGEgbmV3IGlzb2xhdGlvbiBleGl0IHByb2NlZHVyZSBzaG91bGQNCisgKiBiZSBzdGFydGVk Lg0KKyAqLw0KK0RFRklORV9QRVJfQ1BVKGF0b21pY190LCBpc29sX2V4aXRfY291bnRlcik7DQor DQorLyoNCisgKiBEZXNjcmlwdG9yIGZvciBpc29sYXRpb24tYnJlYWtpbmcgU01QIGNhbGxzDQor ICovDQorREVGSU5FX1BFUl9DUFUoY2FsbF9zaW5nbGVfZGF0YV90LCBpc29sX2JyZWFrX2NzZCk7 DQorDQorY3B1bWFza192YXJfdCB0YXNrX2lzb2xhdGlvbl9tYXA7DQorY3B1bWFza192YXJfdCB0 YXNrX2lzb2xhdGlvbl9jbGVhbnVwX21hcDsNCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhc2tf aXNvbGF0aW9uX2NsZWFudXBfbG9jayk7DQorDQorLyogV2UgY2FuIHJ1biBvbiBjcHVzIHRoYXQg YXJlIGlzb2xhdGVkIGZyb20gdGhlIHNjaGVkdWxlciBhbmQgYXJlIG5vaHpfZnVsbC4gKi8NCitz dGF0aWMgaW50IF9faW5pdCB0YXNrX2lzb2xhdGlvbl9pbml0KHZvaWQpDQorew0KKwlhbGxvY19i b290bWVtX2NwdW1hc2tfdmFyKCZ0YXNrX2lzb2xhdGlvbl9jbGVhbnVwX21hcCk7DQorCWlmIChh bGxvY19jcHVtYXNrX3ZhcigmdGFza19pc29sYXRpb25fbWFwLCBHRlBfS0VSTkVMKSkNCisJCS8q DQorCQkgKiBBdCB0aGlzIHBvaW50IHRhc2sgaXNvbGF0aW9uIHNob3VsZCBtYXRjaA0KKwkJICog bm9oel9mdWxsLiBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4NCisJCSAqLw0KKwkJY3B1 bWFza19jb3B5KHRhc2tfaXNvbGF0aW9uX21hcCwgdGlja19ub2h6X2Z1bGxfbWFzayk7DQorCXJl dHVybiAwOw0KK30NCitjb3JlX2luaXRjYWxsKHRhc2tfaXNvbGF0aW9uX2luaXQpDQorDQorLyog RW5hYmxlIHN0YWNrIGJhY2t0cmFjZXMgb2YgYW55IGludGVycnVwdHMgb2YgdGFza19pc29sYXRp b24gY29yZXMuICovDQorc3RhdGljIGJvb2wgdGFza19pc29sYXRpb25fZGVidWc7DQorc3RhdGlj IGludCBfX2luaXQgdGFza19pc29sYXRpb25fZGVidWdfZnVuYyhjaGFyICpzdHIpDQorew0KKwl0 YXNrX2lzb2xhdGlvbl9kZWJ1ZyA9IHRydWU7DQorCXJldHVybiAxOw0KK30NCitfX3NldHVwKCJ0 YXNrX2lzb2xhdGlvbl9kZWJ1ZyIsIHRhc2tfaXNvbGF0aW9uX2RlYnVnX2Z1bmMpOw0KKw0KKy8q DQorICogUmVjb3JkIG5hbWUsIHBpZCBhbmQgZ3JvdXAgcGlkIG9mIHRoZSB0YXNrIGVudGVyaW5n IGlzb2xhdGlvbiBvbg0KKyAqIHRoZSBjdXJyZW50IENQVS4NCisgKi8NCitzdGF0aWMgdm9pZCBy ZWNvcmRfY3Vycl9pc29sYXRlZF90YXNrKHZvaWQpDQorew0KKwlpbnQgaW5kOw0KKwlpbnQgY3B1 ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOw0KKwlzdHJ1Y3QgaXNvbF90YXNrX2Rlc2MgKmRlc2MgPSAm cGVyX2NwdShpc29sX3Rhc2tfZGVzY3MsIGNwdSk7DQorCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFz ayA9IGN1cnJlbnQ7DQorDQorCS8qIEZpbmlzaCBldmVyeXRoaW5nIGJlZm9yZSByZWNvcmRpbmcg Y3VycmVudCB0YXNrICovDQorCXNtcF9tYigpOw0KKwlpbmQgPSBhdG9taWNfaW5jX3JldHVybigm ZGVzYy0+Y3Vycl9pbmRleF93cikgJiAxOw0KKwlkZXNjLT5jb21tW2luZF1bc2l6ZW9mKHRhc2st PmNvbW0pIC0gMV0gPSAnXDAnOw0KKwltZW1jcHkoZGVzYy0+Y29tbVtpbmRdLCB0YXNrLT5jb21t LCBzaXplb2YodGFzay0+Y29tbSkgLSAxKTsNCisJZGVzYy0+cGlkW2luZF0gPSB0YXNrLT5waWQ7 DQorCWRlc2MtPnRnaWRbaW5kXSA9IHRhc2stPnRnaWQ7DQorCWRlc2MtPndhcm5lZFtpbmRdID0g ZmFsc2U7DQorCS8qIFdyaXRlIGV2ZXJ5dGhpbmcsIHRvIGJlIHNlZW4gYnkgb3RoZXIgQ1BVcyAq Lw0KKwlzbXBfbWIoKTsNCisJYXRvbWljX2luYygmZGVzYy0+Y3Vycl9pbmRleCk7DQorCS8qIEV2 ZXJ5b25lIHdpbGwgc2VlIHRoZSBuZXcgcmVjb3JkIGZyb20gdGhpcyBwb2ludCAqLw0KKwlzbXBf bWIoKTsNCit9DQorDQorLyoNCisgKiBQcmludCBtZXNzYWdlIHByZWZpeGVkIHdpdGggdGhlIGRl c2NyaXB0aW9uIG9mIHRoZSBjdXJyZW50IChvcg0KKyAqIGxhc3QpIGlzb2xhdGVkIHRhc2sgb24g YSBnaXZlbiBDUFUuIEludGVuZGVkIGZvciBpc29sYXRpb24gYnJlYWtpbmcNCisgKiBtZXNzYWdl cyB0aGF0IGluY2x1ZGUgdGFyZ2V0IHRhc2sgZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2UuDQor ICoNCisgKiBNZXNzYWdlcyBwcm9kdWNlZCB3aXRoIHRoaXMgZnVuY3Rpb24gbWF5IGhhdmUgb2Jz b2xldGUgdGFzaw0KKyAqIGluZm9ybWF0aW9uIGlmIGlzb2xhdGVkIHRhc2tzIG1hbmFnZWQgdG8g ZXhpdCwgc3RhcnQgYW5kIGVudGVyDQorICogaXNvbGF0aW9uIG11bHRpcGxlIHRpbWVzLCBvciBt dWx0aXBsZSB0YXNrcyB0cmllZCB0byBlbnRlcg0KKyAqIGlzb2xhdGlvbiBvbiB0aGUgc2FtZSBD UFUgYXQgb25jZS4gRm9yIHRob3NlIHVudXN1YWwgY2FzZXMgaXQgd291bGQNCisgKiBjb250YWlu IGEgdmFsaWQgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlIGZvciBpc29sYXRpb24gYnJlYWtpbmcg YW5kDQorICogdGFyZ2V0IENQVSBudW1iZXIsIGp1c3Qgbm90IHRoZSBjb3JyZWN0IGRlc2NyaXB0 aW9uIG9mIHdoaWNoIHRhc2sNCisgKiBlbmRlZCB1cCBsb3NpbmcgaXNvbGF0aW9uLg0KKyAqLw0K K2ludCB0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGludCBjcHUsIGludCBsZXZlbCwgYm9vbCBzdXBw LCBjb25zdCBjaGFyICpmbXQsIC4uLikNCit7DQorCXN0cnVjdCBpc29sX3Rhc2tfZGVzYyAqZGVz YzsNCisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOw0KKwl2YV9saXN0IGFyZ3M7DQorCWNoYXIg YnVmX3ByZWZpeFtUQVNLX0NPTU1fTEVOICsgMjAgKyAzICogMjBdOw0KKwljaGFyIGJ1ZlsyMDBd Ow0KKwlpbnQgY3Vycl9jcHUsIGluZF9jb3VudGVyLCBpbmRfY291bnRlcl9vbGQsIGluZDsNCisN CisJY3Vycl9jcHUgPSBnZXRfY3B1KCk7DQorCWRlc2MgPSAmcGVyX2NwdShpc29sX3Rhc2tfZGVz Y3MsIGNwdSk7DQorCWluZF9jb3VudGVyID0gYXRvbWljX3JlYWQoJmRlc2MtPmN1cnJfaW5kZXgp Ow0KKw0KKwlpZiAoY3Vycl9jcHUgPT0gY3B1KSB7DQorCQkvKg0KKwkJICogTWVzc2FnZSBpcyBm b3IgdGhlIGN1cnJlbnQgQ1BVIHNvIGN1cnJlbnQNCisJCSAqIHRhc2tfc3RydWN0IHNob3VsZCBi ZSB1c2VkIGluc3RlYWQgb2YgY2FjaGVkDQorCQkgKiBpbmZvcm1hdGlvbi4NCisJCSAqDQorCQkg KiBMaWtlIGluIG90aGVyIGRpYWdub3N0aWMgbWVzc2FnZXMsIGlmIGlzc3VlZCBmcm9tDQorCQkg KiBpbnRlcnJ1cHQgY29udGV4dCwgY3VycmVudCB3aWxsIGJlIHRoZSBpbnRlcnJ1cHRlZA0KKwkJ ICogdGFzay4gVW5saWtlIG90aGVyIGRpYWdub3N0aWMgbWVzc2FnZXMsIHRoaXMgaXMNCisJCSAq IGFsd2F5cyByZWxldmFudCBiZWNhdXNlIHRoZSBtZXNzYWdlIGlzIGFib3V0DQorCQkgKiBpbnRl cnJ1cHRpbmcgYSB0YXNrLg0KKwkJICovDQorCQlpbmQgPSBpbmRfY291bnRlciAmIDE7DQorCQlp ZiAoc3VwcCAmJiBkZXNjLT53YXJuZWRbaW5kXSkgew0KKwkJCS8qDQorCQkJICogSWYgc3VwcCBp cyB0cnVlLCBza2lwIHRoZSBtZXNzYWdlIGlmIHRoZQ0KKwkJCSAqIHNhbWUgdGFzayB3YXMgbWVu dGlvbmVkIGluIHRoZSBtZXNzYWdlDQorCQkJICogb3JpZ2luYXRlZCBvbiByZW1vdGUgQ1BVLCBh bmQgaXQgZGlkIG5vdA0KKwkJCSAqIHJlLWVudGVyIGlzb2xhdGVkIHN0YXRlIHNpbmNlIHRoZW4g KHdhcm5lZA0KKwkJCSAqIGlzIHRydWUpLiBPbmx5IGxvY2FsIG1lc3NhZ2VzIGZvbGxvd2luZw0K KwkJCSAqIHJlbW90ZSBtZXNzYWdlcywgbGlrZWx5IGFib3V0IHRoZSBzYW1lDQorCQkJICogaXNv bGF0aW9uIGJyZWFraW5nIGV2ZW50LCBhcmUgc2tpcHBlZCB0bw0KKwkJCSAqIGF2b2lkIGR1cGxp Y2F0aW9uLiBJZiByZW1vdGUgY2F1c2UgaXMNCisJCQkgKiBpbW1lZGlhdGVseSBmb2xsb3dlZCBi eSBhIGxvY2FsIG9uZSBiZWZvcmUNCisJCQkgKiBpc29sYXRpb24gaXMgYnJva2VuLCBsb2NhbCBj YXVzZSBpcyBza2lwcGVkDQorCQkJICogZnJvbSBtZXNzYWdlcy4NCisJCQkgKi8NCisJCQlwdXRf Y3B1KCk7DQorCQkJcmV0dXJuIDA7DQorCQl9DQorCQl0YXNrID0gY3VycmVudDsNCisJCXNucHJp bnRmKGJ1Zl9wcmVmaXgsIHNpemVvZihidWZfcHJlZml4KSwNCisJCQkgImlzb2xhdGlvbiAlcy8l ZC8lZCAoY3B1ICVkKSIsDQorCQkJIHRhc2stPmNvbW0sIHRhc2stPnRnaWQsIHRhc2stPnBpZCwg Y3B1KTsNCisJCXB1dF9jcHUoKTsNCisJfSBlbHNlIHsNCisJCS8qDQorCQkgKiBNZXNzYWdlIGlz IGZvciByZW1vdGUgQ1BVLCB1c2UgY2FjaGVkIGluZm9ybWF0aW9uLg0KKwkJICovDQorCQlwdXRf Y3B1KCk7DQorCQkvKg0KKwkJICogTWFrZSBzdXJlLCBpbmRleCByZW1haW5lZCB1bmNoYW5nZWQg d2hpbGUgZGF0YSB3YXMNCisJCSAqIGNvcGllZC4gSWYgaXQgY2hhbmdlZCwgZGF0YSB0aGF0IHdh cyBjb3BpZWQgbWF5IGJlDQorCQkgKiBpbmNvbnNpc3RlbnQgYmVjYXVzZSB0d28gdXBkYXRlcyBp biBhIHNlcXVlbmNlIGNvdWxkDQorCQkgKiBvdmVyd3JpdGUgdGhlIGRhdGEgd2hpbGUgaXQgd2Fz IGJlaW5nIHJlYWQuDQorCQkgKi8NCisJCWRvIHsNCisJCQkvKiBNYWtlIHN1cmUgd2UgYXJlIHJl YWRpbmcgdXAgdG8gZGF0ZSB2YWx1ZXMgKi8NCisJCQlzbXBfbWIoKTsNCisJCQlpbmQgPSBpbmRf Y291bnRlciAmIDE7DQorCQkJc25wcmludGYoYnVmX3ByZWZpeCwgc2l6ZW9mKGJ1Zl9wcmVmaXgp LA0KKwkJCQkgImlzb2xhdGlvbiAlcy8lZC8lZCAoY3B1ICVkKSIsDQorCQkJCSBkZXNjLT5jb21t W2luZF0sIGRlc2MtPnRnaWRbaW5kXSwNCisJCQkJIGRlc2MtPnBpZFtpbmRdLCBjcHUpOw0KKwkJ CWRlc2MtPndhcm5lZFtpbmRdID0gdHJ1ZTsNCisJCQlpbmRfY291bnRlcl9vbGQgPSBpbmRfY291 bnRlcjsNCisJCQkvKiBSZWNvcmQgdGhlIHdhcm5lZCBmbGFnLCB0aGVuIHJlLXJlYWQgZGVzY3Jp cHRvciAqLw0KKwkJCXNtcF9tYigpOw0KKwkJCWluZF9jb3VudGVyID0gYXRvbWljX3JlYWQoJmRl c2MtPmN1cnJfaW5kZXgpOw0KKwkJCS8qDQorCQkJICogSWYgdGhlIGNvdW50ZXIgY2hhbmdlZCwg c29tZXRoaW5nIHdhcyB1cGRhdGVkLCBzbw0KKwkJCSAqIHJlcGVhdCBldmVyeXRoaW5nIHRvIGdl dCB0aGUgY3VycmVudCBkYXRhDQorCQkJICovDQorCQl9IHdoaWxlIChpbmRfY291bnRlciAhPSBp bmRfY291bnRlcl9vbGQpOw0KKwl9DQorDQorCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7DQorCXZzbnBy aW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFyZ3MpOw0KKwl2YV9lbmQoYXJncyk7DQorDQor CXN3aXRjaCAobGV2ZWwpIHsNCisJY2FzZSBMT0dMRVZFTF9FTUVSRzoNCisJCXByX2VtZXJnKCIl czogJXMiLCBidWZfcHJlZml4LCBidWYpOw0KKwkJYnJlYWs7DQorCWNhc2UgTE9HTEVWRUxfQUxF UlQ6DQorCQlwcl9hbGVydCgiJXM6ICVzIiwgYnVmX3ByZWZpeCwgYnVmKTsNCisJCWJyZWFrOw0K KwljYXNlIExPR0xFVkVMX0NSSVQ6DQorCQlwcl9jcml0KCIlczogJXMiLCBidWZfcHJlZml4LCBi dWYpOw0KKwkJYnJlYWs7DQorCWNhc2UgTE9HTEVWRUxfRVJSOg0KKwkJcHJfZXJyKCIlczogJXMi LCBidWZfcHJlZml4LCBidWYpOw0KKwkJYnJlYWs7DQorCWNhc2UgTE9HTEVWRUxfV0FSTklORzoN CisJCXByX3dhcm4oIiVzOiAlcyIsIGJ1Zl9wcmVmaXgsIGJ1Zik7DQorCQlicmVhazsNCisJY2Fz ZSBMT0dMRVZFTF9OT1RJQ0U6DQorCQlwcl9ub3RpY2UoIiVzOiAlcyIsIGJ1Zl9wcmVmaXgsIGJ1 Zik7DQorCQlicmVhazsNCisJY2FzZSBMT0dMRVZFTF9JTkZPOg0KKwkJcHJfaW5mbygiJXM6ICVz IiwgYnVmX3ByZWZpeCwgYnVmKTsNCisJCWJyZWFrOw0KKwljYXNlIExPR0xFVkVMX0RFQlVHOg0K KwkJcHJfZGVidWcoIiVzOiAlcyIsIGJ1Zl9wcmVmaXgsIGJ1Zik7DQorCQlicmVhazsNCisJZGVm YXVsdDoNCisJCS8qIE5vIG1lc3NhZ2Ugd2l0aG91dCBhIHZhbGlkIGxldmVsICovDQorCQlyZXR1 cm4gMDsNCisJfQ0KKwlyZXR1cm4gMTsNCit9DQorDQorLyoNCisgKiBEdW1wIHN0YWNrIGlmIG5l ZWQgYmUuIFRoaXMgY2FuIGJlIGhlbHBmdWwgZXZlbiBmcm9tIHRoZSBmaW5hbCBleGl0DQorICog dG8gdXNlcm1vZGUgY29kZSBzaW5jZSBzdGFjayB0cmFjZXMgc29tZXRpbWVzIGNhcnJ5IGluZm9y bWF0aW9uIGFib3V0DQorICogd2hhdCBwdXQgeW91IGludG8gdGhlIGtlcm5lbCwgZS5nLiBhbiBp bnRlcnJ1cHQgbnVtYmVyIGVuY29kZWQgaW4NCisgKiB0aGUgaW5pdGlhbCBlbnRyeSBzdGFjayBm cmFtZSB0aGF0IGlzIHN0aWxsIHZpc2libGUgYXQgZXhpdCB0aW1lLg0KKyAqLw0KK3N0YXRpYyB2 b2lkIGRlYnVnX2R1bXBfc3RhY2sodm9pZCkNCit7DQorCWlmICh0YXNrX2lzb2xhdGlvbl9kZWJ1 ZykNCisJCWR1bXBfc3RhY2soKTsNCit9DQorDQorLyoNCisgKiBTZXQgdGhlIGZsYWdzIHdvcmQg YnV0IGRvbid0IHRyeSB0byBhY3R1YWxseSBzdGFydCB0YXNrIGlzb2xhdGlvbiB5ZXQuDQorICog V2Ugd2lsbCBzdGFydCBpdCB3aGVuIGVudGVyaW5nIHVzZXIgc3BhY2UgaW4gdGFza19pc29sYXRp b25fc3RhcnQoKS4NCisgKi8NCitpbnQgdGFza19pc29sYXRpb25fcmVxdWVzdCh1bnNpZ25lZCBp bnQgZmxhZ3MpDQorew0KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdXJyZW50Ow0KKw0K KwkvKg0KKwkgKiBUaGUgdGFzayBpc29sYXRpb24gZmxhZ3Mgc2hvdWxkIGFsd2F5cyBiZSBjbGVh cmVkIGp1c3QgYnkNCisJICogdmlydHVlIG9mIGhhdmluZyBlbnRlcmVkIHRoZSBrZXJuZWwuDQor CSAqLw0KKwlXQVJOX09OX09OQ0UodGVzdF90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1RBU0tf SVNPTEFUSU9OKSk7DQorCVdBUk5fT05fT05DRSh0YXNrLT50YXNrX2lzb2xhdGlvbl9mbGFncyAh PSAwKTsNCisJV0FSTl9PTl9PTkNFKHRhc2stPnRhc2tfaXNvbGF0aW9uX3N0YXRlICE9IFNUQVRF X05PUk1BTCk7DQorDQorCXRhc2stPnRhc2tfaXNvbGF0aW9uX2ZsYWdzID0gZmxhZ3M7DQorCWlm ICghKHRhc2stPnRhc2tfaXNvbGF0aW9uX2ZsYWdzICYgUFJfVEFTS19JU09MQVRJT05fRU5BQkxF KSkNCisJCXJldHVybiAwOw0KKw0KKwkvKiBXZSBhcmUgdHJ5aW5nIHRvIGVuYWJsZSB0YXNrIGlz b2xhdGlvbi4gKi8NCisJc2V0X3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfVEFTS19JU09MQVRJ T04pOw0KKw0KKwkvKg0KKwkgKiBTaHV0IGRvd24gdGhlIHZtc3RhdCB3b3JrZXIgc28gd2UncmUg bm90IGludGVycnVwdGVkIGxhdGVyLg0KKwkgKiBXZSBoYXZlIHRvIHRyeSB0byBkbyB0aGlzIGhl cmUgKHdpdGggaW50ZXJydXB0cyBlbmFibGVkKSBzaW5jZQ0KKwkgKiB3ZSBhcmUgY2FuY2VsaW5n IGRlbGF5ZWQgd29yayBhbmQgd2lsbCBjYWxsIGZsdXNoX3dvcmsoKQ0KKwkgKiAod2hpY2ggZW5h YmxlcyBpbnRlcnJ1cHRzKSBhbmQgcG9zc2libHkgc2NoZWR1bGUoKS4NCisJICovDQorCXF1aWV0 X3Ztc3RhdF9zeW5jKCk7DQorDQorCS8qIFdlIHJldHVybiAwIGhlcmUgYnV0IHdlIG1heSBjaGFu Z2UgdGhhdCBpbiB0YXNrX2lzb2xhdGlvbl9zdGFydCgpLiAqLw0KKwlyZXR1cm4gMDsNCit9DQor DQorLyoNCisgKiBQZXJmb3JtIGFjdGlvbnMgdGhhdCBzaG91bGQgYmUgZG9uZSBpbW1lZGlhdGVs eSBvbiBleGl0IGZyb20gaXNvbGF0aW9uLg0KKyAqLw0KK3N0YXRpYyB2b2lkIGZhc3RfdGFza19p c29sYXRpb25fY3B1X2NsZWFudXAodm9pZCAqaW5mbykNCit7DQorCXVuc2lnbmVkIGxvbmcgZmxh Z3M7DQorDQorCS8qDQorCSAqIFRoaXMgZnVuY3Rpb24gcnVucyBvbiBhIENQVSB0aGF0IHJhbiBp c29sYXRlZCB0YXNrLg0KKwkgKg0KKwkgKiBXZSBkb24ndCB3YW50IHRoaXMgQ1BVIHJ1bm5pbmcg Y29kZSBmcm9tIHRoZSByZXN0IG9mIGtlcm5lbA0KKwkgKiB1bnRpbCBvdGhlciBDUFVzIGtub3cg dGhhdCBpdCBpcyBubyBsb25nZXIgaXNvbGF0ZWQuDQorCSAqIFdoZW4gQ1BVIGlzIHJ1bm5pbmcg aXNvbGF0ZWQgdGFzayB1bnRpbCB0aGlzIHBvaW50IGFueXRoaW5nDQorCSAqIHRoYXQgY2F1c2Vz IGFuIGludGVycnVwdCBvbiB0aGlzIENQVSBtdXN0IGVuZCB1cCBjYWxsaW5nIHRoaXMNCisJICog YmVmb3JlIHRvdWNoaW5nIHRoZSByZXN0IG9mIGtlcm5lbC4gVGhhdCBpcywgSVBJIHRvIHRoaXMN CisJICogZnVuY3Rpb24gb3Igc3RvcF9pc29sYXRpb24oKSBjYWxsaW5nIGl0LiBJZiBhbnkgaW50 ZXJydXB0LA0KKwkgKiBpbmNsdWRpbmcgc2NoZWR1bGluZyB0aW1lciwgYXJyaXZlZiBiZWZvcmUg YSBjYWxsIHRvIHRoaXMNCisJICogZnVuY3Rpb24sIGl0IHdpbGwgc3RpbGwgZW5kIHVwIGhlcmUg ZWFybHkgYWZ0ZXIgZW50ZXJpbmcga2VybmVsLg0KKwkgKiBGcm9tIHRoaXMgcG9pbnQgaW50ZXJy dXB0cyBhcmUgZGlzYWJsZWQgdW50aWwgYWxsIENQVXMgd2lsbCBzZWUNCisJICogdGhhdCB0aGlz IENQVSBpcyBubyBsb25nZXIgcnVubmluZyBpc29sYXRlZCB0YXNrLg0KKwkgKi8NCisJbG9jYWxf aXJxX3NhdmUoZmxhZ3MpOw0KKwlhdG9taWNfZGVjKCZwZXJfY3B1KGlzb2xfZXhpdF9jb3VudGVy LCBzbXBfcHJvY2Vzc29yX2lkKCkpKTsNCisJc21wX21iX19hZnRlcl9hdG9taWMoKTsNCisJLyoN CisJICogQXQgdGhpcyBwb2ludCBicmVha2luZyBpc29sYXRpb24gZnJvbSBvdGhlciBDUFVzIGlz IHBvc3NpYmxlIGFnYWluLA0KKwkgKiBob3dldmVyIGludGVycnVwdHMgd29uJ3QgYXJyaXZlIHVu dGlsIGxvY2FsX2lycV9yZXN0b3JlKCkNCisJICovDQorDQorCS8qDQorCSAqIFRoaXMgdGFzayBp cyBubyBsb25nZXIgaXNvbGF0ZWQgKGFuZCBpZiBieSBhbnkgY2hhbmNlIHRoaXMNCisJICogaXMg dGhlIHdyb25nIHRhc2ssIGl0J3MgYWxyZWFkeSBub3QgaXNvbGF0ZWQpDQorCSAqLw0KKwljdXJy ZW50LT50YXNrX2lzb2xhdGlvbl9mbGFncyA9IDA7DQorCWNsZWFyX3Rza190aHJlYWRfZmxhZyhj dXJyZW50LCBUSUZfVEFTS19JU09MQVRJT04pOw0KKw0KKwkvKiBSdW4gdGhlIHJlc3Qgb2YgY2xl YW51cCBsYXRlciAqLw0KKwlzZXRfdHNrX3RocmVhZF9mbGFnKGN1cnJlbnQsIFRJRl9OT1RJRllf UkVTVU1FKTsNCisNCisJLyogQ29weSBmbGFncyB3aXRoIHRhc2sgaXNvbGF0aW9uIGRpc2FibGVk ICovDQorCXRoaXNfY3B1X3dyaXRlKHRza190aHJlYWRfZmxhZ3NfY2FjaGUsDQorCQkgICAgICAg UkVBRF9PTkNFKHRhc2tfdGhyZWFkX2luZm8oY3VycmVudCktPmZsYWdzKSk7DQorCS8qDQorCSAq IElmIHNvbWV0aGluZyBoYXBwZW5lZCB0aGF0IHJlcXVpcmVzIGEgYmFycmllciB0aGF0IHdvdWxk DQorCSAqIG90aGVyd2lzZSBiZSBjYWxsZWQgZnJvbSByZW1vdGUgQ1BVcyBieSBDUFUga2ljayBw cm9jZWR1cmUsDQorCSAqIHRoaXMgYmFycmllciBydW5zIGluc3RlYWQgb2YgaXQuIEFmdGVyIHRo aXMgYmFycmllciwgQ1BVDQorCSAqIGtpY2sgcHJvY2VkdXJlIHdvdWxkIHNlZSB0aGUgdXBkYXRl ZCB0c2tfdGhyZWFkX2ZsYWdzX2NhY2hlDQorCSAqIGFuZCBydW4gaXRzIG93biBJUEkgdG8gdHJp Z2dlciBhIGJhcnJpZXIuDQorCSAqLw0KKwlzbXBfbWIoKTsNCisJLyoNCisJICogU3luY2hyb25p emUgaW5zdHJ1Y3Rpb25zIC0tIHRoaXMgQ1BVIHdhcyBub3Qga2lja2VkIHdoaWxlDQorCSAqIGlu IGlzb2xhdGVkIG1vZGUsIHNvIGl0IG1pZ2h0IHJlcXVpcmUgc3luY2hyb25pemF0aW9uLg0KKwkg KiBUaGVyZSBtaWdodCBiZSBhbiBJUEkgaWYga2ljayBwcm9jZWR1cmUgaGFwcGVuZWQgYW5kDQor CSAqIHRza190aHJlYWRfZmxhZ3NfY2FjaGUgd2FzIGFscmVhZHkgdXBkYXRlZCB3aGlsZSBpdA0K KwkgKiBhc3NlbWJsZWQgYSBDUFUgbWFzay4gSG93ZXZlciBpZiB0aGlzIGRpZCBub3QgaGFwcGVu LA0KKwkgKiBzeW5jaHJvbml6ZSBldmVyeXRoaW5nIGhlcmUuDQorCSAqLw0KKwlpbWIoKTsNCisJ bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOw0KK30NCisNCisvKiBEaXNhYmxlIHRhc2sgaXNvbGF0 aW9uIGZvciB0aGUgc3BlY2lmaWVkIHRhc2suICovDQorc3RhdGljIHZvaWQgc3RvcF9pc29sYXRp b24oc3RydWN0IHRhc2tfc3RydWN0ICpwKQ0KK3sNCisJaW50IGNwdSwgdGhpc19jcHU7DQorCXVu c2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCXRoaXNfY3B1ID0gZ2V0X2NwdSgpOw0KKwljcHUgPSB0 YXNrX2NwdShwKTsNCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwZXJfY3B1KGlzb2xfZXhpdF9j b3VudGVyLCBjcHUpKSA+IDEpIHsNCisJCS8qIEFscmVhZHkgZXhpdGluZyBpc29sYXRpb24gKi8N CisJCWF0b21pY19kZWMoJnBlcl9jcHUoaXNvbF9leGl0X2NvdW50ZXIsIGNwdSkpOw0KKwkJcHV0 X2NwdSgpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCWlmIChwID09IGN1cnJlbnQpIHsNCisJCXAt PnRhc2tfaXNvbGF0aW9uX3N0YXRlID0gU1RBVEVfTk9STUFMOw0KKwkJZmFzdF90YXNrX2lzb2xh dGlvbl9jcHVfY2xlYW51cChOVUxMKTsNCisJCXRhc2tfaXNvbGF0aW9uX2NwdV9jbGVhbnVwKCk7 DQorCQlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnBlcl9jcHUoaXNvbF9jb3VudGVyLCBjcHUpKSA8 IDApIHsNCisJCQkvKiBJcyBub3QgaXNvbGF0ZWQgYWxyZWFkeSAqLw0KKwkJCWF0b21pY19pbmMo JnBlcl9jcHUoaXNvbF9jb3VudGVyLCBjcHUpKTsNCisJCX0NCisJCXB1dF9jcHUoKTsNCisJfSBl bHNlIHsNCisJCWlmIChhdG9taWNfZGVjX3JldHVybigmcGVyX2NwdShpc29sX2NvdW50ZXIsIGNw dSkpIDwgMCkgew0KKwkJCS8qIElzIG5vdCBpc29sYXRlZCBhbHJlYWR5ICovDQorCQkJYXRvbWlj X2luYygmcGVyX2NwdShpc29sX2NvdW50ZXIsIGNwdSkpOw0KKwkJCWF0b21pY19kZWMoJnBlcl9j cHUoaXNvbF9leGl0X2NvdW50ZXIsIGNwdSkpOw0KKwkJCXB1dF9jcHUoKTsNCisJCQlyZXR1cm47 DQorCQl9DQorCQkvKg0KKwkJICogU2NoZWR1bGUgInNsb3ciIGNsZWFudXAuIFRoaXMgcmVsaWVz IG9uDQorCQkgKiBUSUZfTk9USUZZX1JFU1VNRSBiZWluZyBzZXQNCisJCSAqLw0KKwkJc3Bpbl9s b2NrX2lycXNhdmUoJnRhc2tfaXNvbGF0aW9uX2NsZWFudXBfbG9jaywgZmxhZ3MpOw0KKwkJY3B1 bWFza19zZXRfY3B1KGNwdSwgdGFza19pc29sYXRpb25fY2xlYW51cF9tYXApOw0KKwkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmdGFza19pc29sYXRpb25fY2xlYW51cF9sb2NrLCBmbGFncyk7DQor CQkvKg0KKwkJICogU2V0dGluZyBmbGFncyBpcyBkZWxlZ2F0ZWQgdG8gdGhlIENQVSB3aGVyZQ0K KwkJICogaXNvbGF0ZWQgdGFzayBpcyBydW5uaW5nDQorCQkgKiBpc29sX2V4aXRfY291bnRlciB3 aWxsIGJlIGRlY3JlbWVudGVkIGZyb20gdGhlcmUgYXMgd2VsbC4NCisJCSAqLw0KKwkJcGVyX2Nw dShpc29sX2JyZWFrX2NzZCwgY3B1KS5mdW5jID0NCisJCSAgICBmYXN0X3Rhc2tfaXNvbGF0aW9u X2NwdV9jbGVhbnVwOw0KKwkJcGVyX2NwdShpc29sX2JyZWFrX2NzZCwgY3B1KS5pbmZvID0gTlVM TDsNCisJCXBlcl9jcHUoaXNvbF9icmVha19jc2QsIGNwdSkuZmxhZ3MgPSAwOw0KKwkJc21wX2Nh bGxfZnVuY3Rpb25fc2luZ2xlX2FzeW5jKGNwdSwNCisJCQkJCSAgICAgICAmcGVyX2NwdShpc29s X2JyZWFrX2NzZCwgY3B1KSk7DQorCQlwdXRfY3B1KCk7DQorCX0NCit9DQorDQorLyoNCisgKiBU aGlzIGNvZGUgcnVucyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQganVzdCBiZWZvcmUgdGhlIHJl dHVybiB0bw0KKyAqIHVzZXJzcGFjZSwgYWZ0ZXIgYSBwcmN0bCgpIGhhcyByZXF1ZXN0ZWQgZW5h YmxpbmcgdGFzayBpc29sYXRpb24uDQorICogV2UgdGFrZSB3aGF0ZXZlciBzdGVwcyBhcmUgbmVl ZGVkIHRvIGF2b2lkIGJlaW5nIGludGVycnVwdGVkIGxhdGVyOg0KKyAqIGRyYWluIHRoZSBscnUg cGFnZXMsIHN0b3AgdGhlIHNjaGVkdWxlciB0aWNrLCBldGMuICBNb3JlDQorICogZnVuY3Rpb25h bGl0eSBtYXkgYmUgYWRkZWQgaGVyZSBsYXRlciB0byBhdm9pZCBvdGhlciB0eXBlcyBvZg0KKyAq IGludGVycnVwdHMgZnJvbSBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4NCisgKg0KKyAqIElmIHdl IGNhbid0IGVuYWJsZSB0YXNrIGlzb2xhdGlvbiwgd2UgdXBkYXRlIHRoZSBzeXNjYWxsIHJldHVy bg0KKyAqIHZhbHVlIHdpdGggYW4gYXBwcm9wcmlhdGUgZXJyb3IuDQorICovDQordm9pZCB0YXNr X2lzb2xhdGlvbl9zdGFydCh2b2lkKQ0KK3sNCisJaW50IGVycm9yOw0KKwl1bnNpZ25lZCBsb25n IGZsYWdzOw0KKw0KKwkvKg0KKwkgKiBXZSBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gU1RBVEVf Tk9STUFMIChpc29sYXRpb24gZGlzYWJsZWQpLA0KKwkgKiBvbiBvdXIgd2F5IG91dCBvZiB0aGUg a2VybmVsIGZyb20gdGhlIHByY3RsKCkgdGhhdCB0dXJuZWQgaXQgb24uDQorCSAqIElmIHdlIGFy ZSBleGl0aW5nIGZyb20gdGhlIGtlcm5lbCBpbiBhbm90aGVyIHN0YXRlLCBpdCBtZWFucyB3ZQ0K KwkgKiBtYWRlIGl0IGJhY2sgaW50byB0aGUga2VybmVsIHdpdGhvdXQgZGlzYWJsaW5nIHRhc2sg aXNvbGF0aW9uLA0KKwkgKiBhbmQgd2Ugc2hvdWxkIGludmVzdGlnYXRlIGhvdyAoYW5kIGluIGFu eSBjYXNlIGRpc2FibGUgdGFzaw0KKwkgKiBpc29sYXRpb24gYXQgdGhpcyBwb2ludCkuICBXZSBh cmUgY2xlYXJseSBub3Qgb24gdGhlIHBhdGggYmFjaw0KKwkgKiBmcm9tIHRoZSBwcmN0bCgpIHNv IHdlIGRvbid0IHRvdWNoIHRoZSBzeXNjYWxsIHJldHVybiB2YWx1ZS4NCisJICovDQorCWlmIChX QVJOX09OX09OQ0UoY3VycmVudC0+dGFza19pc29sYXRpb25fc3RhdGUgIT0gU1RBVEVfTk9STUFM KSkgew0KKwkJLyogSW5jcmVtZW50IGNvdW50ZXIsIHRoaXMgd2lsbCBhbGxvdyBpc29sYXRpb24g YnJlYWtpbmcgKi8NCisJCWlmIChhdG9taWNfaW5jX3JldHVybigmcGVyX2NwdShpc29sX2NvdW50 ZXIsDQorCQkJCQkgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpKSA+IDEpIHsNCisJCQlhdG9taWNf ZGVjKCZwZXJfY3B1KGlzb2xfY291bnRlciwgc21wX3Byb2Nlc3Nvcl9pZCgpKSk7DQorCQl9DQor CQlzdG9wX2lzb2xhdGlvbihjdXJyZW50KTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwkvKg0KKwkg KiBNdXN0IGJlIGFmZmluaXRpemVkIHRvIGEgc2luZ2xlIGNvcmUgd2l0aCB0YXNrIGlzb2xhdGlv biBwb3NzaWJsZS4NCisJICogSW4gcHJpbmNpcGxlIHRoaXMgY291bGQgYmUgcmVtb3RlbHkgbW9k aWZpZWQgYmV0d2VlbiB0aGUgcHJjdGwoKQ0KKwkgKiBhbmQgdGhlIHJldHVybiB0byB1c2Vyc3Bh Y2UsIHNvIHdlIGhhdmUgdG8gY2hlY2sgaXQgaGVyZS4NCisJICovDQorCWlmIChjdXJyZW50LT5u cl9jcHVzX2FsbG93ZWQgIT0gMSB8fA0KKwkgICAgIWlzX2lzb2xhdGlvbl9jcHUoc21wX3Byb2Nl c3Nvcl9pZCgpKSkgew0KKwkJZXJyb3IgPSAtRUlOVkFMOw0KKwkJZ290byBlcnJvcjsNCisJfQ0K Kw0KKwkvKiBJZiB0aGUgdm1zdGF0IGRlbGF5ZWQgd29yayBpcyBub3QgY2FuY2VsZWQsIHdlIGhh dmUgdG8gdHJ5IGFnYWluLiAqLw0KKwlpZiAoIXZtc3RhdF9pZGxlKCkpIHsNCisJCWVycm9yID0g LUVBR0FJTjsNCisJCWdvdG8gZXJyb3I7DQorCX0NCisNCisJLyogVHJ5IHRvIHN0b3AgdGhlIGR5 bmFtaWMgdGljay4gKi8NCisJZXJyb3IgPSB0cnlfc3RvcF9mdWxsX3RpY2soKTsNCisJaWYgKGVy cm9yKQ0KKwkJZ290byBlcnJvcjsNCisNCisJLyogRHJhaW4gdGhlIHBhZ2V2ZWNzIHRvIGF2b2lk IHVubmVjZXNzYXJ5IElQSSBmbHVzaGVzIGxhdGVyLiAqLw0KKwlscnVfYWRkX2RyYWluKCk7DQor DQorCS8qDQorCSAqIFRhc2sgaXMgZ29pbmcgdG8gYmUgbWFya2VkIGFzIGlzb2xhdGVkLiBUaGlz IGRpc2FibGVzIElQSXMNCisJICogdXNlZCBmb3Igc3luY2hyb25pemF0aW9uLCBzbyB0byBhdm9p ZCBpbmNvbnNpc3RlbmN5DQorCSAqIGRvbid0IGxldCBhbnl0aGluZyBpbnRlcnJ1cHQgdXMgYW5k IGlzc3VlIGEgYmFycmllciBhdCB0aGUgZW5kLg0KKwkgKi8NCisJbG9jYWxfaXJxX3NhdmUoZmxh Z3MpOw0KKw0KKwkvKiBJbmNyZW1lbnQgY291bnRlciwgdGhpcyB3aWxsIGFsbG93IGlzb2xhdGlv biBicmVha2luZyAqLw0KKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBlcl9jcHUoaXNvbF9jb3Vu dGVyLA0KKwkJCQkgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpKSA+IDEpIHsNCisJCWF0b21pY19k ZWMoJnBlcl9jcHUoaXNvbF9jb3VudGVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpKTsNCisJfQ0KKw0K KwkvKiBSZWNvcmQgaXNvbGF0ZWQgdGFzayBJRHMgYW5kIG5hbWUgKi8NCisJcmVjb3JkX2N1cnJf aXNvbGF0ZWRfdGFzaygpOw0KKw0KKwkvKiBDb3B5IGZsYWdzIHdpdGggdGFzayBpc29sYXRpb24g ZW5hYmxlZCAqLw0KKwl0aGlzX2NwdV93cml0ZSh0c2tfdGhyZWFkX2ZsYWdzX2NhY2hlLA0KKwkJ ICAgICAgIFJFQURfT05DRSh0YXNrX3RocmVhZF9pbmZvKGN1cnJlbnQpLT5mbGFncykpOw0KKwlz bXBfd21iKCk7DQorCS8qIEZyb20gdGhpcyBwb2ludCB0aGlzIGlzIHJlY29nbml6ZWQgYXMgaXNv bGF0ZWQgYnkgb3RoZXIgQ1BVcyAqLw0KKwljdXJyZW50LT50YXNrX2lzb2xhdGlvbl9zdGF0ZSA9 IFNUQVRFX0lTT0xBVEVEOw0KKwlzbXBfbWIoKTsNCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3Mp Ow0KKwkvKg0KKwkgKiBJZiBhbnl0aGluZyBpbnRlcnJ1cHRzIHVzIGF0IHRoaXMgcG9pbnQsIGl0 IHdpbGwgdHJpZ2dlcg0KKwkgKiBpc29sYXRpb24gYnJlYWtpbmcgcHJvY2VkdXJlLg0KKwkgKi8N CisJcmV0dXJuOw0KKw0KK2Vycm9yOg0KKwkvKiBJbmNyZW1lbnQgY291bnRlciwgdGhpcyB3aWxs IGFsbG93IGlzb2xhdGlvbiBicmVha2luZyAqLw0KKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBl cl9jcHUoaXNvbF9jb3VudGVyLA0KKwkJCQkgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpKSA+IDEp IHsNCisJCWF0b21pY19kZWMoJnBlcl9jcHUoaXNvbF9jb3VudGVyLCBzbXBfcHJvY2Vzc29yX2lk KCkpKTsNCisJfQ0KKwlzdG9wX2lzb2xhdGlvbihjdXJyZW50KTsNCisJc3lzY2FsbF9zZXRfcmV0 dXJuX3ZhbHVlKGN1cnJlbnQsIGN1cnJlbnRfcHRfcmVncygpLCBlcnJvciwgMCk7DQorfQ0KKw0K Ky8qIFN0b3AgdGFzayBpc29sYXRpb24gb24gdGhlIHJlbW90ZSB0YXNrIGFuZCBzZW5kIGl0IGEg c2lnbmFsLiAqLw0KK3N0YXRpYyB2b2lkIHNlbmRfaXNvbGF0aW9uX3NpZ25hbChzdHJ1Y3QgdGFz a19zdHJ1Y3QgKnRhc2spDQorew0KKwlpbnQgZmxhZ3MgPSB0YXNrLT50YXNrX2lzb2xhdGlvbl9m bGFnczsNCisJa2VybmVsX3NpZ2luZm9fdCBpbmZvID0gew0KKwkJLnNpX3NpZ25vID0gUFJfVEFT S19JU09MQVRJT05fR0VUX1NJRyhmbGFncykgPzogU0lHS0lMTCwNCisJfTsNCisNCisJc3RvcF9p c29sYXRpb24odGFzayk7DQorCXNlbmRfc2lnX2luZm8oaW5mby5zaV9zaWdubywgJmluZm8sIHRh c2spOw0KK30NCisNCisvKiBPbmx5IGEgZmV3IHN5c2NhbGxzIGFyZSB2YWxpZCBvbmNlIHdlIGFy ZSBpbiB0YXNrIGlzb2xhdGlvbiBtb2RlLiAqLw0KK3N0YXRpYyBib29sIGlzX2FjY2VwdGFibGVf c3lzY2FsbChpbnQgc3lzY2FsbCkNCit7DQorCS8qIE5vIG5lZWQgdG8gaW5jdXIgYW4gaXNvbGF0 aW9uIHNpZ25hbCBpZiB3ZSBhcmUganVzdCBleGl0aW5nLiAqLw0KKwlpZiAoc3lzY2FsbCA9PSBf X05SX2V4aXQgfHwgc3lzY2FsbCA9PSBfX05SX2V4aXRfZ3JvdXApDQorCQlyZXR1cm4gdHJ1ZTsN CisNCisJLyogQ2hlY2sgdG8gc2VlIGlmIGl0J3MgdGhlIHByY3RsIGZvciBpc29sYXRpb24uICov DQorCWlmIChzeXNjYWxsID09IF9fTlJfcHJjdGwpIHsNCisJCXVuc2lnbmVkIGxvbmcgYXJnW1NZ U0NBTExfTUFYX0FSR1NdOw0KKw0KKwkJc3lzY2FsbF9nZXRfYXJndW1lbnRzKGN1cnJlbnQsIGN1 cnJlbnRfcHRfcmVncygpLCBhcmcpOw0KKwkJaWYgKGFyZ1swXSA9PSBQUl9UQVNLX0lTT0xBVElP TikNCisJCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8q DQorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIHN5c2NhbGwgZW50cnksIHByZXZlbnRz IG1vc3Qgc3lzY2FsbHMNCisgKiBmcm9tIGV4ZWN1dGluZywgYW5kIGlmIG5lZWRlZCByYWlzZXMg YSBzaWduYWwgdG8gbm90aWZ5IHRoZSBwcm9jZXNzLg0KKyAqDQorICogTm90ZSB0aGF0IHdlIGhh dmUgdG8gc3RvcCBpc29sYXRpb24gYmVmb3JlIHdlIGV2ZW4gcHJpbnQgYSBtZXNzYWdlDQorICog aGVyZSwgc2luY2Ugb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCByZXBvcnRpbmcgYW4gaW50ZXJy dXB0IGR1ZSB0bw0KKyAqIGtpY2tpbmcgdGhlIHByaW50ayBoYW5kbGluZyBjb2RlLCByYXRoZXIg dGhhbiByZXBvcnRpbmcgdGhlIHRydWUNCisgKiBjYXVzZSBvZiBpbnRlcnJ1cHQgaGVyZS4NCisg Kg0KKyAqIFRoZSBtZXNzYWdlIGlzIG5vdCBzdXBwcmVzc2VkIGJ5IHByZXZpb3VzIHJlbW90ZWx5 IHRyaWdnZXJlZA0KKyAqIG1lc3NhZ2VzLg0KKyAqLw0KK2ludCB0YXNrX2lzb2xhdGlvbl9zeXNj YWxsKGludCBzeXNjYWxsKQ0KK3sNCisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3VycmVu dDsNCisNCisJaWYgKGlzX2FjY2VwdGFibGVfc3lzY2FsbChzeXNjYWxsKSkgew0KKwkJc3RvcF9p c29sYXRpb24odGFzayk7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwlzZW5kX2lzb2xhdGlvbl9z aWduYWwodGFzayk7DQorDQorCXByX3Rhc2tfaXNvbF93YXJuKHNtcF9wcm9jZXNzb3JfaWQoKSwN CisJCQkgICJ0YXNrX2lzb2xhdGlvbiBsb3N0IGR1ZSB0byBzeXNjYWxsICVkXG4iLA0KKwkJCSAg c3lzY2FsbCk7DQorCWRlYnVnX2R1bXBfc3RhY2soKTsNCisNCisJc3lzY2FsbF9zZXRfcmV0dXJu X3ZhbHVlKHRhc2ssIGN1cnJlbnRfcHRfcmVncygpLCAtRVJFU1RBUlROT0lOVFIsIC0xKTsNCisJ cmV0dXJuIC0xOw0KK30NCisNCisvKg0KKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSBh bnkgZXhjZXB0aW9uIG9yIGlycSB0aGF0IGRvZXNuJ3QNCisgKiBvdGhlcndpc2UgdHJpZ2dlciBh IHNpZ25hbCB0byB0aGUgdXNlciBwcm9jZXNzIChlLmcuIHBhZ2UgZmF1bHQpLg0KKyAqDQorICog TWVzc2FnZXMgd2lsbCBiZSBzdXBwcmVzc2VkIGlmIHRoZXJlIGlzIGFscmVhZHkgYSByZXBvcnRl ZCByZW1vdGUNCisgKiBjYXVzZSBmb3IgaXNvbGF0aW9uIGJyZWFraW5nLCBzbyB3ZSBkb24ndCBn ZW5lcmF0ZSBtdWx0aXBsZQ0KKyAqIGNvbmZ1c2luZ2x5IHNpbWlsYXIgbWVzc2FnZXMgYWJvdXQg dGhlIHNhbWUgZXZlbnQuDQorICovDQordm9pZCBfdGFza19pc29sYXRpb25faW50ZXJydXB0KGNv bnN0IGNoYXIgKmZtdCwgLi4uKQ0KK3sNCisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3Vy cmVudDsNCisJdmFfbGlzdCBhcmdzOw0KKwljaGFyIGJ1ZlsxMDBdOw0KKw0KKwkvKiBSQ1Ugc2hv dWxkIGhhdmUgYmVlbiBlbmFibGVkIHByaW9yIHRvIHRoaXMgcG9pbnQuICovDQorCVJDVV9MT0NL REVQX1dBUk4oIXJjdV9pc193YXRjaGluZygpLCAia2VybmVsIGVudHJ5IHdpdGhvdXQgUkNVIik7 DQorDQorCS8qIEFyZSB3ZSBleGl0aW5nIGlzb2xhdGlvbiBhbHJlYWR5PyAqLw0KKwlpZiAoYXRv bWljX3JlYWQoJnBlcl9jcHUoaXNvbF9leGl0X2NvdW50ZXIsIHNtcF9wcm9jZXNzb3JfaWQoKSkp ICE9IDApIHsNCisJCXRhc2stPnRhc2tfaXNvbGF0aW9uX3N0YXRlID0gU1RBVEVfTk9STUFMOw0K KwkJcmV0dXJuOw0KKwl9DQorCS8qDQorCSAqIEF2b2lkIHJlcG9ydGluZyBpbnRlcnJ1cHRzIHRo YXQgaGFwcGVuIGFmdGVyIHdlIGhhdmUgcHJjdGwnZWQNCisJICogdG8gZW5hYmxlIGlzb2xhdGlv biwgYnV0IGJlZm9yZSB3ZSBoYXZlIHJldHVybmVkIHRvIHVzZXJzcGFjZS4NCisJICovDQorCWlm ICh0YXNrLT50YXNrX2lzb2xhdGlvbl9zdGF0ZSA9PSBTVEFURV9OT1JNQUwpDQorCQlyZXR1cm47 DQorDQorCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7DQorCXZzbnByaW50ZihidWYsIHNpemVvZihidWYp LCBmbXQsIGFyZ3MpOw0KKwl2YV9lbmQoYXJncyk7DQorDQorCS8qIEhhbmRsZSBOTUlzIG1pbmlt YWxseSwgc2luY2Ugd2UgY2FuJ3Qgc2VuZCBhIHNpZ25hbC4gKi8NCisJaWYgKGluX25taSgpKSB7 DQorCQlwcl90YXNrX2lzb2xfZXJyKHNtcF9wcm9jZXNzb3JfaWQoKSwNCisJCQkJICJpc29sYXRp b246IGluIE5NSTsgbm90IGRlbGl2ZXJpbmcgc2lnbmFsXG4iKTsNCisJfSBlbHNlIHsNCisJCXNl bmRfaXNvbGF0aW9uX3NpZ25hbCh0YXNrKTsNCisJfQ0KKw0KKwlpZiAocHJfdGFza19pc29sX3dh cm5fc3VwcChzbXBfcHJvY2Vzc29yX2lkKCksDQorCQkJCSAgICJ0YXNrX2lzb2xhdGlvbiBsb3N0 IGR1ZSB0byAlc1xuIiwgYnVmKSkNCisJCWRlYnVnX2R1bXBfc3RhY2soKTsNCit9DQorDQorLyoN CisgKiBDYWxsZWQgYmVmb3JlIHdlIHdha2UgdXAgYSB0YXNrIHRoYXQgaGFzIGEgc2lnbmFsIHRv IHByb2Nlc3MuDQorICogTmVlZHMgdG8gYmUgZG9uZSB0byBoYW5kbGUgaW50ZXJydXB0cyB0aGF0 IHRyaWdnZXIgc2lnbmFscywgd2hpY2gNCisgKiB3ZSBkb24ndCBjYXRjaCB3aXRoIHRhc2tfaXNv bGF0aW9uX2ludGVycnVwdCgpIGhvb2tzLg0KKyAqDQorICogVGhpcyBtZXNzYWdlIGlzIGFsc28g c3VwcHJlc3NlZCBpZiB0aGVyZSB3YXMgYWxyZWFkeSBhIHJlbW90ZWx5DQorICogY2F1c2VkIG1l c3NhZ2UgYWJvdXQgdGhlIHNhbWUgaXNvbGF0aW9uIGJyZWFraW5nIGV2ZW50Lg0KKyAqLw0KK3Zv aWQgX3Rhc2tfaXNvbGF0aW9uX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spDQorew0K KwlzdHJ1Y3QgaXNvbF90YXNrX2Rlc2MgKmRlc2M7DQorCWludCBpbmQsIGNwdTsNCisJYm9vbCBk b193YXJuID0gKHRhc2stPnRhc2tfaXNvbGF0aW9uX3N0YXRlID09IFNUQVRFX0lTT0xBVEVEKTsN CisNCisJY3B1ID0gdGFza19jcHUodGFzayk7DQorCWRlc2MgPSAmcGVyX2NwdShpc29sX3Rhc2tf ZGVzY3MsIGNwdSk7DQorCWluZCA9IGF0b21pY19yZWFkKCZkZXNjLT5jdXJyX2luZGV4KSAmIDE7 DQorCWlmIChkZXNjLT53YXJuZWRbaW5kXSkNCisJCWRvX3dhcm4gPSBmYWxzZTsNCisNCisJc3Rv cF9pc29sYXRpb24odGFzayk7DQorDQorCWlmIChkb193YXJuKSB7DQorCQlwcl93YXJuKCJpc29s YXRpb246ICVzLyVkLyVkIChjcHUgJWQpOiB0YXNrX2lzb2xhdGlvbiBsb3N0IGR1ZSB0byBzaWdu YWxcbiIsDQorCQkJdGFzay0+Y29tbSwgdGFzay0+dGdpZCwgdGFzay0+cGlkLCBjcHUpOw0KKwkJ ZGVidWdfZHVtcF9zdGFjaygpOw0KKwl9DQorfQ0KKw0KKy8qDQorICogR2VuZXJhdGUgYSBzdGFj ayBiYWNrdHJhY2UgaWYgd2UgYXJlIGdvaW5nIHRvIGludGVycnVwdCBhbm90aGVyIHRhc2sNCisg KiBpc29sYXRpb24gcHJvY2Vzcy4NCisgKi8NCit2b2lkIHRhc2tfaXNvbGF0aW9uX3JlbW90ZShp bnQgY3B1LCBjb25zdCBjaGFyICpmbXQsIC4uLikNCit7DQorCXN0cnVjdCB0YXNrX3N0cnVjdCAq Y3Vycl90YXNrOw0KKwl2YV9saXN0IGFyZ3M7DQorCWNoYXIgYnVmWzIwMF07DQorDQorCXNtcF9y bWIoKTsNCisJaWYgKCFpc19pc29sYXRpb25fY3B1KGNwdSkgfHwgIXRhc2tfaXNvbGF0aW9uX29u X2NwdShjcHUpKQ0KKwkJcmV0dXJuOw0KKw0KKwljdXJyX3Rhc2sgPSBjdXJyZW50Ow0KKw0KKwl2 YV9zdGFydChhcmdzLCBmbXQpOw0KKwl2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBh cmdzKTsNCisJdmFfZW5kKGFyZ3MpOw0KKwlpZiAocHJfdGFza19pc29sX3dhcm4oY3B1LA0KKwkJ CSAgICAgICJ0YXNrX2lzb2xhdGlvbiBsb3N0IGR1ZSB0byAlcyBieSAlcy8lZC8lZCBvbiBjcHUg JWRcbiIsDQorCQkJICAgICAgYnVmLA0KKwkJCSAgICAgIGN1cnJfdGFzay0+Y29tbSwgY3Vycl90 YXNrLT50Z2lkLA0KKwkJCSAgICAgIGN1cnJfdGFzay0+cGlkLCBzbXBfcHJvY2Vzc29yX2lkKCkp KQ0KKwkJZGVidWdfZHVtcF9zdGFjaygpOw0KK30NCisNCisvKg0KKyAqIEdlbmVyYXRlIGEgc3Rh Y2sgYmFja3RyYWNlIGlmIGFueSBvZiB0aGUgY3B1cyBpbiAibWFzayIgYXJlIHJ1bm5pbmcNCisg KiB0YXNrIGlzb2xhdGlvbiBwcm9jZXNzZXMuDQorICovDQordm9pZCB0YXNrX2lzb2xhdGlvbl9y ZW1vdGVfY3B1bWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywNCisJCQkJICAgY29uc3Qg Y2hhciAqZm10LCAuLi4pDQorew0KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJfdGFzazsNCisJ Y3B1bWFza192YXJfdCB3YXJuX21hc2s7DQorCXZhX2xpc3QgYXJnczsNCisJY2hhciBidWZbMjAw XTsNCisJaW50IGNwdSwgZmlyc3RfY3B1Ow0KKw0KKwlpZiAodGFza19pc29sYXRpb25fbWFwID09 IE5VTEwgfHwNCisJCSF6YWxsb2NfY3B1bWFza192YXIoJndhcm5fbWFzaywgR0ZQX0tFUk5FTCkp DQorCQlyZXR1cm47DQorDQorCWZpcnN0X2NwdSA9IC0xOw0KKwlzbXBfcm1iKCk7DQorCWZvcl9l YWNoX2NwdV9hbmQoY3B1LCBtYXNrLCB0YXNrX2lzb2xhdGlvbl9tYXApIHsNCisJCWlmICh0YXNr X2lzb2xhdGlvbl9vbl9jcHUoY3B1KSkgew0KKwkJCWlmIChmaXJzdF9jcHUgPCAwKQ0KKwkJCQlm aXJzdF9jcHUgPSBjcHU7DQorCQkJZWxzZQ0KKwkJCQljcHVtYXNrX3NldF9jcHUoY3B1LCB3YXJu X21hc2spOw0KKwkJfQ0KKwl9DQorDQorCWlmIChmaXJzdF9jcHUgPCAwKQ0KKwkJZ290byBkb25l Ow0KKw0KKwljdXJyX3Rhc2sgPSBjdXJyZW50Ow0KKw0KKwl2YV9zdGFydChhcmdzLCBmbXQpOw0K Kwl2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcmdzKTsNCisJdmFfZW5kKGFyZ3Mp Ow0KKw0KKwlpZiAoY3B1bWFza193ZWlnaHQod2Fybl9tYXNrKSA9PSAwKQ0KKwkJcHJfdGFza19p c29sX3dhcm4oZmlyc3RfY3B1LA0KKwkJCQkgICJ0YXNrX2lzb2xhdGlvbiBsb3N0IGR1ZSB0byAl cyBieSAlcy8lZC8lZCBvbiBjcHUgJWRcbiIsDQorCQkJCSAgYnVmLCBjdXJyX3Rhc2stPmNvbW0s IGN1cnJfdGFzay0+dGdpZCwNCisJCQkJICBjdXJyX3Rhc2stPnBpZCwgc21wX3Byb2Nlc3Nvcl9p ZCgpKTsNCisJZWxzZQ0KKwkJcHJfdGFza19pc29sX3dhcm4oZmlyc3RfY3B1LA0KKwkJCQkgICIg YW5kIGNwdXMgJSpwYmw6IHRhc2tfaXNvbGF0aW9uIGxvc3QgZHVlIHRvICVzIGJ5ICVzLyVkLyVk IG9uIGNwdSAlZFxuIiwNCisJCQkJICBjcHVtYXNrX3ByX2FyZ3Mod2Fybl9tYXNrKSwNCisJCQkJ ICBidWYsIGN1cnJfdGFzay0+Y29tbSwgY3Vycl90YXNrLT50Z2lkLA0KKwkJCQkgIGN1cnJfdGFz ay0+cGlkLCBzbXBfcHJvY2Vzc29yX2lkKCkpOw0KKwlkZWJ1Z19kdW1wX3N0YWNrKCk7DQorDQor ZG9uZToNCisJZnJlZV9jcHVtYXNrX3Zhcih3YXJuX21hc2spOw0KK30NCisNCisvKg0KKyAqIENo ZWNrIGlmIGdpdmVuIENQVSBpcyBydW5uaW5nIGlzb2xhdGVkIHRhc2suDQorICovDQoraW50IHRh c2tfaXNvbGF0aW9uX29uX2NwdShpbnQgY3B1KQ0KK3sNCisJcmV0dXJuIHRlc3RfYml0KFRJRl9U QVNLX0lTT0xBVElPTiwNCisJCQkmcGVyX2NwdSh0c2tfdGhyZWFkX2ZsYWdzX2NhY2hlLCBjcHUp KTsNCit9DQorDQorLyoNCisgKiBTZXQgQ1BVcyBjdXJyZW50bHkgcnVubmluZyBpc29sYXRlZCB0 YXNrcyBpbiBDUFUgbWFzay4NCisgKi8NCit2b2lkIHRhc2tfaXNvbGF0aW9uX2NwdW1hc2soc3Ry dWN0IGNwdW1hc2sgKm1hc2spDQorew0KKwlpbnQgY3B1Ow0KKw0KKwlpZiAodGFza19pc29sYXRp b25fbWFwID09IE5VTEwpDQorCQlyZXR1cm47DQorDQorCXNtcF9ybWIoKTsNCisJZm9yX2VhY2hf Y3B1KGNwdSwgdGFza19pc29sYXRpb25fbWFwKQ0KKwkJaWYgKHRhc2tfaXNvbGF0aW9uX29uX2Nw dShjcHUpKQ0KKwkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG1hc2spOw0KK30NCisNCisvKg0KKyAq IENsZWFyIENQVXMgY3VycmVudGx5IHJ1bm5pbmcgaXNvbGF0ZWQgdGFza3MgaW4gQ1BVIG1hc2su DQorICovDQordm9pZCB0YXNrX2lzb2xhdGlvbl9jbGVhcl9jcHVtYXNrKHN0cnVjdCBjcHVtYXNr ICptYXNrKQ0KK3sNCisJaW50IGNwdTsNCisNCisJaWYgKHRhc2tfaXNvbGF0aW9uX21hcCA9PSBO VUxMKQ0KKwkJcmV0dXJuOw0KKw0KKwlzbXBfcm1iKCk7DQorCWZvcl9lYWNoX2NwdShjcHUsIHRh c2tfaXNvbGF0aW9uX21hcCkNCisJCWlmICh0YXNrX2lzb2xhdGlvbl9vbl9jcHUoY3B1KSkNCisJ CQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1hc2spOw0KK30NCisNCisvKg0KKyAqIENsZWFudXAg cHJvY2VkdXJlLiBUaGUgY2FsbCB0byB0aGlzIHByb2NlZHVyZSBtYXkgYmUgZGVsYXllZC4NCisg Ki8NCit2b2lkIHRhc2tfaXNvbGF0aW9uX2NwdV9jbGVhbnVwKHZvaWQpDQorew0KKwlraWNrX2hy dGltZXIoKTsNCit9DQorDQorLyoNCisgKiBDaGVjayBpZiBjbGVhbnVwIGlzIHNjaGVkdWxlZCBv biB0aGUgY3VycmVudCBDUFUsIGFuZCBpZiBzbywgcnVuIGl0Lg0KKyAqIEludGVuZGVkIHRvIGJl IGNhbGxlZCBmcm9tIG5vdGlmeV9yZXN1bWUoKSBvciBhbm90aGVyIHN1Y2ggY2FsbGJhY2sNCisg KiBvbiB0aGUgdGFyZ2V0IENQVS4NCisgKi8NCit2b2lkIHRhc2tfaXNvbGF0aW9uX2NoZWNrX3J1 bl9jbGVhbnVwKHZvaWQpDQorew0KKwlpbnQgY3B1Ow0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0K Kw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGFza19pc29sYXRpb25fY2xlYW51cF9sb2NrLCBmbGFn cyk7DQorDQorCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsNCisNCisJaWYgKGNwdW1hc2tfdGVz dF9jcHUoY3B1LCB0YXNrX2lzb2xhdGlvbl9jbGVhbnVwX21hcCkpIHsNCisJCWNwdW1hc2tfY2xl YXJfY3B1KGNwdSwgdGFza19pc29sYXRpb25fY2xlYW51cF9tYXApOw0KKwkJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmdGFza19pc29sYXRpb25fY2xlYW51cF9sb2NrLCBmbGFncyk7DQorCQl0YXNr X2lzb2xhdGlvbl9jcHVfY2xlYW51cCgpOw0KKwl9IGVsc2UNCisJCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJnRhc2tfaXNvbGF0aW9uX2NsZWFudXBfbG9jaywgZmxhZ3MpOw0KK30NCmRpZmYgLS1n aXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMNCmluZGV4IDViMjM5NjM1MGRk MS4uMWRmNTdlMzhjMzYxIDEwMDY0NA0KLS0tIGEva2VybmVsL3NpZ25hbC5jDQorKysgYi9rZXJu ZWwvc2lnbmFsLmMNCkBAIC00Niw2ICs0Niw3IEBADQogI2luY2x1ZGUgPGxpbnV4L2xpdmVwYXRj aC5oPg0KICNpbmNsdWRlIDxsaW51eC9jZ3JvdXAuaD4NCiAjaW5jbHVkZSA8bGludXgvYXVkaXQu aD4NCisjaW5jbHVkZSA8bGludXgvaXNvbGF0aW9uLmg+DQogDQogI2RlZmluZSBDUkVBVEVfVFJB Q0VfUE9JTlRTDQogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zaWduYWwuaD4NCkBAIC03NTgsNiAr NzU5LDcgQEAgc3RhdGljIGludCBkZXF1ZXVlX3N5bmNocm9ub3VzX3NpZ25hbChrZXJuZWxfc2ln aW5mb190ICppbmZvKQ0KICAqLw0KIHZvaWQgc2lnbmFsX3dha2VfdXBfc3RhdGUoc3RydWN0IHRh c2tfc3RydWN0ICp0LCB1bnNpZ25lZCBpbnQgc3RhdGUpDQogew0KKwl0YXNrX2lzb2xhdGlvbl9z aWduYWwodCk7DQogCXNldF90c2tfdGhyZWFkX2ZsYWcodCwgVElGX1NJR1BFTkRJTkcpOw0KIAkv Kg0KIAkgKiBUQVNLX1dBS0VLSUxMIGFsc28gbWVhbnMgd2FrZSBpdCB1cCBpbiB0aGUgc3RvcHBl ZC90cmFjZWQva2lsbGFibGUNCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lz LmMNCmluZGV4IGY5YmM1YzMwM2UzZi4uMGE0MDU5YThjNGY5IDEwMDY0NA0KLS0tIGEva2VybmVs L3N5cy5jDQorKysgYi9rZXJuZWwvc3lzLmMNCkBAIC00Miw2ICs0Miw3IEBADQogI2luY2x1ZGUg PGxpbnV4L3N5c2NvcmVfb3BzLmg+DQogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4NCiAjaW5j bHVkZSA8bGludXgvY3R5cGUuaD4NCisjaW5jbHVkZSA8bGludXgvaXNvbGF0aW9uLmg+DQogDQog I2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPg0KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPg0K QEAgLTI1MTMsNiArMjUxNCwxMSBAQCBTWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9u LCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLA0KIA0KIAkJZXJyb3Ig PSAoY3VycmVudC0+ZmxhZ3MgJiBQUl9JT19GTFVTSEVSKSA9PSBQUl9JT19GTFVTSEVSOw0KIAkJ YnJlYWs7DQorCWNhc2UgUFJfVEFTS19JU09MQVRJT046DQorCQlpZiAoYXJnMyB8fCBhcmc0IHx8 IGFyZzUpDQorCQkJcmV0dXJuIC1FSU5WQUw7DQorCQllcnJvciA9IHRhc2tfaXNvbGF0aW9uX3Jl cXVlc3QoYXJnMik7DQorCQlicmVhazsNCiAJZGVmYXVsdDoNCiAJCWVycm9yID0gLUVJTlZBTDsN CiAJCWJyZWFrOw0KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2hydGltZXIuYyBiL2tlcm5lbC90 aW1lL2hydGltZXIuYw0KaW5kZXggM2E2MDllNzM0NGYzLi41YmI5OGYzOWJkZTYgMTAwNjQ0DQot LS0gYS9rZXJuZWwvdGltZS9ocnRpbWVyLmMNCisrKyBiL2tlcm5lbC90aW1lL2hydGltZXIuYw0K QEAgLTMwLDYgKzMwLDcgQEANCiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4NCiAjaW5jbHVk ZSA8bGludXgvaW50ZXJydXB0Lmg+DQogI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4NCisjaW5jbHVk ZSA8bGludXgvaXNvbGF0aW9uLmg+DQogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPg0KICNpbmNsdWRl IDxsaW51eC9kZWJ1Z29iamVjdHMuaD4NCiAjaW5jbHVkZSA8bGludXgvc2NoZWQvc2lnbmFsLmg+ DQpAQCAtNzIxLDYgKzcyMiwxOSBAQCBzdGF0aWMgdm9pZCByZXRyaWdnZXJfbmV4dF9ldmVudCh2 b2lkICphcmcpDQogCXJhd19zcGluX3VubG9jaygmYmFzZS0+bG9jayk7DQogfQ0KIA0KKyNpZmRl ZiBDT05GSUdfVEFTS19JU09MQVRJT04NCit2b2lkIGtpY2tfaHJ0aW1lcih2b2lkKQ0KK3sNCisJ dW5zaWduZWQgbG9uZyBmbGFnczsNCisNCisJcHJlZW1wdF9kaXNhYmxlKCk7DQorCWxvY2FsX2ly cV9zYXZlKGZsYWdzKTsNCisJcmV0cmlnZ2VyX25leHRfZXZlbnQoTlVMTCk7DQorCWxvY2FsX2ly cV9yZXN0b3JlKGZsYWdzKTsNCisJcHJlZW1wdF9lbmFibGUoKTsNCit9DQorI2VuZGlmDQorDQog LyoNCiAgKiBTd2l0Y2ggdG8gaGlnaCByZXNvbHV0aW9uIG1vZGUNCiAgKi8NCkBAIC04NjgsOCAr ODgyLDIxIEBAIHN0YXRpYyB2b2lkIGhydGltZXJfcmVwcm9ncmFtKHN0cnVjdCBocnRpbWVyICp0 aW1lciwgYm9vbCByZXByb2dyYW0pDQogdm9pZCBjbG9ja193YXNfc2V0KHZvaWQpDQogew0KICNp ZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTDQorI2lmZGVmIENPTkZJR19UQVNLX0lTT0xBVElP Tg0KKwlzdHJ1Y3QgY3B1bWFzayBtYXNrOw0KKw0KKwljcHVtYXNrX2NsZWFyKCZtYXNrKTsNCisJ dGFza19pc29sYXRpb25fY3B1bWFzaygmbWFzayk7DQorCWNwdW1hc2tfY29tcGxlbWVudCgmbWFz aywgJm1hc2spOw0KKwkvKg0KKwkgKiBSZXRyaWdnZXIgdGhlIENQVSBsb2NhbCBldmVudHMgZXZl cnl3aGVyZSBleGNlcHQgQ1BVcw0KKwkgKiBydW5uaW5nIGlzb2xhdGVkIHRhc2tzLg0KKwkgKi8N CisJb25fZWFjaF9jcHVfbWFzaygmbWFzaywgcmV0cmlnZ2VyX25leHRfZXZlbnQsIE5VTEwsIDEp Ow0KKyNlbHNlDQogCS8qIFJldHJpZ2dlciB0aGUgQ1BVIGxvY2FsIGV2ZW50cyBldmVyeXdoZXJl ICovDQogCW9uX2VhY2hfY3B1KHJldHJpZ2dlcl9uZXh0X2V2ZW50LCBOVUxMLCAxKTsNCisjZW5k aWYNCiAjZW5kaWYNCiAJdGltZXJmZF9jbG9ja193YXNfc2V0KCk7DQogfQ0KZGlmZiAtLWdpdCBh L2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYw0KaW5k ZXggYTc5MmQyMWNhYzY0Li4xZDRkZWM5ZDNlZTcgMTAwNjQ0DQotLS0gYS9rZXJuZWwvdGltZS90 aWNrLXNjaGVkLmMNCisrKyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYw0KQEAgLTg4Miw2ICs4 ODIsMjQgQEAgc3RhdGljIHZvaWQgdGlja19ub2h6X2Z1bGxfdXBkYXRlX3RpY2soc3RydWN0IHRp Y2tfc2NoZWQgKnRzKQ0KICNlbmRpZg0KIH0NCiANCisjaWZkZWYgQ09ORklHX1RBU0tfSVNPTEFU SU9ODQoraW50IHRyeV9zdG9wX2Z1bGxfdGljayh2b2lkKQ0KK3sNCisJaW50IGNwdSA9IHNtcF9w cm9jZXNzb3JfaWQoKTsNCisJc3RydWN0IHRpY2tfc2NoZWQgKnRzID0gdGhpc19jcHVfcHRyKCZ0 aWNrX2NwdV9zY2hlZCk7DQorDQorCS8qIEZvciBhbiB1bnN0YWJsZSBjbG9jaywgd2Ugc2hvdWxk IHJldHVybiBhIHBlcm1hbmVudCBlcnJvciBjb2RlLiAqLw0KKwlpZiAoYXRvbWljX3JlYWQoJnRp Y2tfZGVwX21hc2spICYgVElDS19ERVBfTUFTS19DTE9DS19VTlNUQUJMRSkNCisJCXJldHVybiAt RUlOVkFMOw0KKw0KKwlpZiAoIWNhbl9zdG9wX2Z1bGxfdGljayhjcHUsIHRzKSkNCisJCXJldHVy biAtRUFHQUlOOw0KKw0KKwl0aWNrX25vaHpfc3RvcF9zY2hlZF90aWNrKHRzLCBjcHUpOw0KKwly ZXR1cm4gMDsNCit9DQorI2VuZGlmDQorDQogc3RhdGljIGJvb2wgY2FuX3N0b3BfaWRsZV90aWNr KGludCBjcHUsIHN0cnVjdCB0aWNrX3NjaGVkICp0cykNCiB7DQogCS8qDQotLSANCjIuMjAuMQ0K DQo=