Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp1269577pxu; Mon, 23 Nov 2020 16:35:13 -0800 (PST) X-Google-Smtp-Source: ABdhPJzjLqMsnetvXHfS1pXQ9Z0To22OzlsflSxWIRBkB6RXzcmSyKok0bMaDCtnxi3jpY+Sipn5 X-Received: by 2002:a17:906:11d0:: with SMTP id o16mr1927847eja.25.1606178113275; Mon, 23 Nov 2020 16:35:13 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1606178113; cv=pass; d=google.com; s=arc-20160816; b=ybBmUX2X6qv7KB1TvmusDQ4/v9X2o+06VRLDFE/rH4xg3FTI6G85Qb2PFA0fF1MZI6 Ov8bljUdWnPwNTNl/Ufpqs0PjIjyGUd0ZPifC0uTjlxYmVVq99EPn0MjX2t6r6bfwdlr 0PisXnKSzextt5Sw/LsoVEHOhzua/lWBB0FhxhiUhFApVOpt3xb1LPuczHek91Ds6Yph Wv1F3W7Dx7xP1KaFaXNWDV7i6n8GlM0SdxjXlZXnK3nHTTmri04HU1UlTiCJIlKn3oKp j9QU212Le2mh+cclZ727oX5kV7I7O0U7D997abH+ajlWfXvP4ZzNtSmVVpD6aq1hAT5u 0VBg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence: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=tHoReLszDAI3jmxrNXdt2HKxSY04a9TR7emfXGJgwVg=; b=H6uC9K7CWYSzAwE4+48HABC9dEovygVf2wwNCx1knY8UkTl92JpRXdN/EsTNPzr2Te ZPMVlqy/ihxyNyW1ByYdF9qbXjqw1SXjOyloOXV8WxtXGtkEOtkCewKT/SSlq5BcRQnB MMX4iePaaOCPn+MQ1mRxxWfl59IKM1mtMzqVJrycJ9tdeuxkPZdaBaXAqmjxVXvNj+NL yMUpYqakuqaZCYqaC7nNpmgwJS9QMDW3pe2cMJ4CScGwXJVsIWJb8oIeJhYMcG/wJRXJ rL1e1Z9fFJ6Tmy/z4thiQ2ahJX9VRs8PakC25H6VcFdzTyrrJhLd6qFsyH6CKvp8tudY +cmA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@marvell.com header.s=pfpt0220 header.b=aeZYU5qN; dkim=pass header.i=@marvell.onmicrosoft.com header.s=selector1-marvell-onmicrosoft-com header.b=mjxvVrk1; arc=pass (i=1 spf=pass spfdomain=marvell.com dkim=pass dkdomain=marvell.com dmarc=pass fromdomain=marvell.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=marvell.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i22si7320197ejv.693.2020.11.23.16.34.49; Mon, 23 Nov 2020 16:35:13 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@marvell.com header.s=pfpt0220 header.b=aeZYU5qN; dkim=pass header.i=@marvell.onmicrosoft.com header.s=selector1-marvell-onmicrosoft-com header.b=mjxvVrk1; arc=pass (i=1 spf=pass spfdomain=marvell.com dkim=pass dkdomain=marvell.com dmarc=pass fromdomain=marvell.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=marvell.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390494AbgKWR54 (ORCPT + 99 others); Mon, 23 Nov 2020 12:57:56 -0500 Received: from mx0b-0016f401.pphosted.com ([67.231.156.173]:48386 "EHLO mx0b-0016f401.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731411AbgKWR5z (ORCPT ); Mon, 23 Nov 2020 12:57:55 -0500 Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 0ANHsit1021505; Mon, 23 Nov 2020 09:56:59 -0800 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=pfpt0220; bh=tHoReLszDAI3jmxrNXdt2HKxSY04a9TR7emfXGJgwVg=; b=aeZYU5qNVtHqaRZEblgxmftWskIHmcZ29KKSfut1zlIx1ZVolBdqwcv1LsSlhZqsig/2 LTg6bo2XrF38Pd0HvS+R6E22RrMBIEVbCTwSovb28Z5a2HTHik/L8ziBnPZyf7a4Jfjg KPGLusgooemggFl15AYlIYBCHMCD8uggccFIh6psldDubrRJ6xlieLNMxxjzxrriGoiU rJ1ry2qZn2T+M+dnxA7eHHcRL0+H4CDZlsuZhe7XsLG7WHf7jGBmC41zf4XR/JpFRxyQ 2Rx3JSSfttL6DChGoqANxBbfgqwddZc2gxZwav5P7mFaxtRzVrmi/1XA9tFXpTPCHdEf Ew== Received: from sc-exch03.marvell.com ([199.233.58.183]) by mx0b-0016f401.pphosted.com with ESMTP id 34y39r6df5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 23 Nov 2020 09:56:58 -0800 Received: from SC-EXCH02.marvell.com (10.93.176.82) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Nov 2020 09:56:56 -0800 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.173) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Mon, 23 Nov 2020 09:56:56 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hRznavdMedllgthbkewSXmpD3tRHdFKjWYTrelp6vWzeq/wi/7NO2JqlIQ2NHMHLPjI7QizhTbNKIvPkIYmXpq0RqwnMesbGh/twvJiJESmFn8kn0/ye2NyVMzSto0rLsKE1ne3upCmfZDHe3iNHhXWxVJQO8DMHLVZpoGuzF479cBroF0kMkUKF7XVs0jS2Hl/76GAJ06AF59XwoPKb9J9csTRCFnqJStByFZzeL9ie5QQqlPGiJEbZ0IlU7ox0wWpbcQEh/NQJ2vSSBO3WSCtd7rpU+oi3/09PTomOoR5am9NPWdL3MGQDokldrrV/JwB/bWKWliw4Et948s/DoA== 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=tHoReLszDAI3jmxrNXdt2HKxSY04a9TR7emfXGJgwVg=; b=I0ESK90kiz1VcdqOrIr5lMyujfxCQ4WhoRwd8swGEOLXTsnIUofrE18Ly9nlGHw2DJbnxAS7hH3nAeswsoFbPGF8XKpsvfmH4ptFMCGrzAcUdDp3YI2SB8lYQvahMjttzgQPakjyB4iVq+NhSsYlP6hQOeqrv3V4cizNziAPCYPlNEwi2wn4GRf9svrgx6JKnNchL1srmwJCNdUHHjI2X2u6OXMJCbO90s6uPweTcXToegp4wfB/+ZhqZxNmVHyARQGTGTgb/G53kdX4Ggdic4NjDCm7p+kOIvHQBNM9ZplJxSlHzBFQt/2kFJuOVHtB0k8jWnRkOROhnDoqgij8Fw== 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=tHoReLszDAI3jmxrNXdt2HKxSY04a9TR7emfXGJgwVg=; b=mjxvVrk1/TaFzhe6yXJIzOsFOJkp6AIb/FLReWkSswt9b1rVr6A+ZqlmyWjJx0V37cBKlNzva0HWuTH80isMo6EnLRQZdmEJUFZBAVT0wksy6RhEa1jVEJUDasdUDfpFLN4dA7rcRNvkGaYEuBNmqIACXW7JEw2pQL2J1EPFjJo= Received: from MW2PR18MB2267.namprd18.prod.outlook.com (2603:10b6:907:3::11) by MW3PR18MB3530.namprd18.prod.outlook.com (2603:10b6:303:55::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3589.22; Mon, 23 Nov 2020 17:56:53 +0000 Received: from MW2PR18MB2267.namprd18.prod.outlook.com ([fe80::e17f:37fb:4eb3:c703]) by MW2PR18MB2267.namprd18.prod.outlook.com ([fe80::e17f:37fb:4eb3:c703%4]) with mapi id 15.20.3564.039; Mon, 23 Nov 2020 17:56:53 +0000 From: Alex Belits To: "nitesh@redhat.com" , "frederic@kernel.org" CC: Prasun Kapoor , "linux-api@vger.kernel.org" , "davem@davemloft.net" , "trix@redhat.com" , "mingo@kernel.org" , "catalin.marinas@arm.com" , "rostedt@goodmis.org" , "linux-kernel@vger.kernel.org" , "peterx@redhat.com" , "tglx@linutronix.de" , "linux-arch@vger.kernel.org" , "mtosatti@redhat.com" , "will@kernel.org" , "peterz@infradead.org" , "leon@sidebranch.com" , "linux-arm-kernel@lists.infradead.org" , "pauld@redhat.com" , "netdev@vger.kernel.org" Subject: [PATCH v5 3/9] task_isolation: userspace hard isolation from kernel Thread-Topic: [PATCH v5 3/9] task_isolation: userspace hard isolation from kernel Thread-Index: AQHWwcIGq3rxbUiOxUqcMTxtbX7+zg== Date: Mon, 23 Nov 2020 17:56:53 +0000 Message-ID: <5d882681867ed43636e22d265d61afbbac1b5a62.camel@marvell.com> References: <8d887e59ca713726f4fcb25a316e1e932b02823e.camel@marvell.com> In-Reply-To: <8d887e59ca713726f4fcb25a316e1e932b02823e.camel@marvell.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=marvell.com; x-originating-ip: [173.228.7.197] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ba117b05-d7e9-49f1-fe10-08d88fd92924 x-ms-traffictypediagnostic: MW3PR18MB3530: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: WJqQ2c9jHsGcO9UOsg1dYA3ZiI7Yog7kccYYsQnogCn7BFS1RMUJaoDDpjZDzDncee51i1hamv1wZ6VZyBbatib4fVg9EN+84lgRlT3NGZRjayJa9my/qwtgDqbyZZe1VwLf+q7NXn3SYLFCjfVvUoTd5+gRlmcXk/vfuklofXZF/nKeRHkL3iQQeQJYlCvb2VQkBMWstHDLjOB34gd/oGjJ8vTTT7sHmHuyNGOjRdi/xi6JmACwGog+cesGtlongEp2dLkqmWlXCHl5OfFgLUAXUDlu2ihi/zjdY/gtpYHCFA537s7GYlNyskg/H6Xd/qhRcpuEo8pU6t0m9o1ZFoCrXYtdgwqvAETgFqWEAQPsimmyjTuFQ3k+ooNcMXs0 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW2PR18MB2267.namprd18.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(346002)(376002)(39860400002)(136003)(396003)(2906002)(2616005)(71200400001)(5660300002)(6512007)(83380400001)(110136005)(26005)(54906003)(6486002)(186003)(6506007)(36756003)(66946007)(8676002)(316002)(478600001)(8936002)(86362001)(30864003)(7416002)(66476007)(66556008)(64756008)(66446008)(91956017)(76116006)(4326008)(21314003)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: AHbBNo0lsI/gROTs2xbV1vanGr8iu4Lv4FDuKRoDnL23USYPr/csy2vAMwaOz9P2jSasmXrLEDKv3J5dGIrBIv9FhqpHfqvVYAkfBcmuWvbL6YK4UomXo+qQmQJyCQNut48jMU42bxRqziLEeEgQFeYZ/3b8Uw0oSflQaXYVUp1fhcoXqrqQm7KdqusgwD/NYA0pUPkwnOeaHrcZrn0jcESdFV7Z3OoaNuTQtopzYgs6PKeUgUbbqSImhOZbx4HIv3I4O7CkTGuJHjw7hNDW4pMnRwWNlT9/8kV1SZ5q7pmXSzoyhhNXSnvOk7mjIgJ+/H8KMKcOPJr6rdC9D5rNoXe2+CLUD7Lw8QOXpP1JMArG6eyJilEAeJ2n+DmxupxAH7AReDGexwz1Amo8PHlpf5yofuaKtGqrRL0PQhXn4/uTp1263oLekJBu1Djqn2f/z36TimxA9UK59nacibpRdkrJe6XQ0ocQ0HIjk6Bx6Ut9kUiqR2WP9tZkKvIGb38Q+FK9iU2aqRljLUu7Fo17+gir3XDfWyDrAHd3S9gGNCr9Yoqnwj4RHjhawqSyCjAFww0VVZOeNhNea7JKwiL7E0YjSsBRAL6H5QaWi+Hb4wM5P0aIOUDnCnnVwjxzHu1cjUdyW82uFPsQUIyyAo6VVFeaMgM82i81CChsUtHpLFWZzzuhMTZjBAomWt2lDh/wLUvC653BUZEtnTS8U73AvUwsDLIuwklpa9dB/dPy6NJyFyhRXennwHmjxqDhN/jbnUo4tDHC2Ri6HHqov4M6J2zhEFfmrl+1BokXaY/s7MKg/2vwZH790nhfY86IkwlFm2pRtlmTG7y0qZCv8vUNO3BBeFopbf/Q+Q29k9N4GYJsxvsqiBMweQaBSKOYVP8/ATaix/Y1kVDpVHElxWowNA== Content-Type: text/plain; charset="utf-8" Content-ID: <00891653461773498D363F8473253E3D@namprd18.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW2PR18MB2267.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ba117b05-d7e9-49f1-fe10-08d88fd92924 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Nov 2020 17:56:53.1751 (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: SHeDtkcgZnaw457HgA/jnFpYByfMYbIggmAkuPNSZSD/KPl8/zj1K4hKIqiJfedHu+fPj/aCbJuJyqaSntJlJQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR18MB3530 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.312,18.0.737 definitions=2020-11-23_17:2020-11-23,2020-11-23 signatures=0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org VGhlIGV4aXN0aW5nIG5vaHpfZnVsbCBtb2RlIGlzIGRlc2lnbmVkIGFzIGEgInNvZnQiIGlzb2xh dGlvbiBtb2RlDQp0aGF0IG1ha2VzIHRyYWRlb2ZmcyB0byBtaW5pbWl6ZSB1c2Vyc3BhY2UgaW50 ZXJydXB0aW9ucyB3aGlsZQ0Kc3RpbGwgYXR0ZW1wdGluZyB0byBhdm9pZCBvdmVyaGVhZHMgaW4g dGhlIGtlcm5lbCBlbnRyeS9leGl0IHBhdGgsDQp0byBwcm92aWRlIDEwMCUga2VybmVsIHNlbWFu dGljcywgZXRjLg0KDQpIb3dldmVyLCBzb21lIGFwcGxpY2F0aW9ucyByZXF1aXJlIGEgImhhcmQi IGNvbW1pdG1lbnQgZnJvbSB0aGUNCmtlcm5lbCB0byBhdm9pZCBpbnRlcnJ1cHRpb25zLCBpbiBw YXJ0aWN1bGFyIHVzZXJzcGFjZSBkZXZpY2UgZHJpdmVyDQpzdHlsZSBhcHBsaWNhdGlvbnMsIHN1 Y2ggYXMgaGlnaC1zcGVlZCBuZXR3b3JraW5nIGNvZGUuDQoNClRoaXMgY2hhbmdlIGludHJvZHVj ZXMgYSBmcmFtZXdvcmsgdG8gYWxsb3cgYXBwbGljYXRpb25zDQp0byBlbGVjdCB0byBoYXZlIHRo ZSAiaGFyZCIgc2VtYW50aWNzIGFzIG5lZWRlZCwgc3BlY2lmeWluZw0KcHJjdGwoUFJfVEFTS19J U09MQVRJT04sIFBSX1RBU0tfSVNPTEFUSU9OX0VOQUJMRSwgMCwgMCwgMCkgdG8gZG8NCnNvLg0K DQpUaGUga2VybmVsIG11c3QgYmUgYnVpbHQgd2l0aCB0aGUgbmV3IFRBU0tfSVNPTEFUSU9OIEtj b25maWcgZmxhZw0KdG8gZW5hYmxlIHRoaXMgbW9kZSwgYW5kIHRoZSBrZXJuZWwgYm9vdGVkIHdp dGggYW4gYXBwcm9wcmlhdGUNCiJpc29sY3B1cz1ub2h6LGRvbWFpbixDUFVMSVNUIiBib290IGFy Z3VtZW50IHRvIGVuYWJsZQ0Kbm9oel9mdWxsIGFuZCBpc29sY3B1cy4gVGhlICJ0YXNrX2lzb2xh dGlvbiIgc3RhdGUgaXMgdGhlbiBpbmRpY2F0ZWQNCmJ5IHNldHRpbmcgYSBuZXcgdGFzayBzdHJ1 Y3QgZmllbGQsIHRhc2tfaXNvbGF0aW9uX2ZsYWcsIHRvIHRoZQ0KdmFsdWUgcGFzc2VkIGJ5IHBy Y3RsKCksIGFuZCBhbHNvIHNldHRpbmcgYSBUSUZfVEFTS19JU09MQVRJT04NCmJpdCBpbiB0aGUg dGhyZWFkX2luZm8gZmxhZ3MuIFdoZW4gdGhlIGtlcm5lbCBpcyByZXR1cm5pbmcgdG8NCnVzZXJz cGFjZSBmcm9tIHRoZSBwcmN0bCgpIGNhbGwgYW5kIHNlZXMgVElGX1RBU0tfSVNPTEFUSU9OIHNl dCwNCml0IGNhbGxzIHRoZSBuZXcgdGFza19pc29sYXRpb25fc3RhcnQoKSByb3V0aW5lIHRvIGFy cmFuZ2UgZm9yDQp0aGUgdGFzayB0byBhdm9pZCBiZWluZyBpbnRlcnJ1cHRlZCBpbiB0aGUgZnV0 dXJlLg0KDQpXaXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHRhc2tfaXNvbGF0aW9uX3N0YXJ0KCkg ZW5zdXJlcyB0aGF0IGtlcm5lbA0Kc3Vic3lzdGVtcyB0aGF0IG1pZ2h0IGNhdXNlIGEgZnV0dXJl IGludGVycnVwdCBhcmUgcXVpZXNjZWQuIElmIGl0DQpkb2Vzbid0IHN1Y2NlZWQsIGl0IGFkanVz dHMgdGhlIHN5c2NhbGwgcmV0dXJuIHZhbHVlIHRvIGluZGljYXRlIHRoYXQNCmZhY3QsIGFuZCB1 c2Vyc3BhY2UgY2FuIHJldHJ5IGFzIGRlc2lyZWQuIEluIGFkZGl0aW9uIHRvIHN0b3BwaW5nDQp0 aGUgc2NoZWR1bGVyIHRpY2ssIHRoZSBjb2RlIHRha2VzIGFueSBhY3Rpb25zIHRoYXQgbWlnaHQg YXZvaWQNCmEgZnV0dXJlIGludGVycnVwdCB0byB0aGUgY29yZSwgc3VjaCBhcyBhIHdvcmtlciB0 aHJlYWQgYmVpbmcNCnNjaGVkdWxlZCB0aGF0IGNvdWxkIGJlIHF1aWVzY2VkIG5vdyAoZS5nLiB0 aGUgdm1zdGF0IHdvcmtlcikNCm9yIGEgZnV0dXJlIElQSSB0byB0aGUgY29yZSB0byBjbGVhbiB1 cCBzb21lIHN0YXRlIHRoYXQgY291bGQgYmUNCmNsZWFuZWQgdXAgbm93IChlLmcuIHRoZSBtbSBs cnUgcGVyLWNwdSBjYWNoZSkuDQoNClRoZSBsYXN0IHN0YWdlIG9mIGVuYWJsaW5nIHRhc2sgaXNv bGF0aW9uIGhhcHBlbnMgaW4NCnRhc2tfaXNvbGF0aW9uX2V4aXRfdG9fdXNlcl9tb2RlKCkgdGhh dCBydW5zIGxhc3QgYmVmb3JlIHJldHVybmluZw0KdG8gdXNlcnNwYWNlIGFuZCBjaGFuZ2VzIGxs X2lzb2xfZmxhZ3MgKHNlZSBsYXRlcikgdG8gcHJldmVudCBvdGhlcg0KQ1BVcyBmcm9tIGludGVy ZmVyaW5nIHdpdGggaXNvbGF0ZWQgdGFzay4NCg0KT25jZSB0aGUgdGFzayBoYXMgcmV0dXJuZWQg dG8gdXNlcnNwYWNlIGFmdGVyIGlzc3VpbmcgdGhlIHByY3RsKCksDQppZiBpdCBlbnRlcnMgdGhl IGtlcm5lbCBhZ2FpbiB2aWEgc3lzdGVtIGNhbGwsIHBhZ2UgZmF1bHQsIG9yIGFueQ0Kb3RoZXIg ZXhjZXB0aW9uIG9yIGlycSwgdGhlIGtlcm5lbCB3aWxsIHNlbmQgaXQgYSBzaWduYWwgdG8gaW5k aWNhdGUNCmlzb2xhdGlvbiBsb3NzLiBJbiBhZGRpdGlvbiB0byBzZW5kaW5nIGEgc2lnbmFsLCB0 aGUgY29kZSBzdXBwb3J0cyBhDQprZXJuZWwgY29tbWFuZC1saW5lICJ0YXNrX2lzb2xhdGlvbl9k ZWJ1ZyIgZmxhZyB3aGljaCBjYXVzZXMgYSBzdGFjaw0KYmFja3RyYWNlIHRvIGJlIGdlbmVyYXRl ZCB3aGVuZXZlciBhIHRhc2sgbG9zZXMgaXNvbGF0aW9uLg0KDQpUbyBhbGxvdyB0aGUgc3RhdGUg dG8gYmUgZW50ZXJlZCBhbmQgZXhpdGVkLCB0aGUgc3lzY2FsbCBjaGVja2luZw0KdGVzdCBpZ25v cmVzIHRoZSBwcmN0bChQUl9UQVNLX0lTT0xBVElPTikgc3lzY2FsbCBzbyB0aGF0IHdlIGNhbg0K Y2xlYXIgdGhlIGJpdCBhZ2FpbiBsYXRlciwgYW5kIGlnbm9yZXMgZXhpdC9leGl0X2dyb3VwIHRv IGFsbG93DQpleGl0aW5nIHRoZSB0YXNrIHdpdGhvdXQgYSBwb2ludGxlc3Mgc2lnbmFsIGJlaW5n IGRlbGl2ZXJlZC4NCg0KVGhlIHByY3RsKCkgQVBJIGFsbG93cyBmb3Igc3BlY2lmeWluZyBhIHNp Z25hbCBudW1iZXIgdG8gdXNlIGluc3RlYWQNCm9mIHRoZSBkZWZhdWx0IFNJR0tJTEwsIHRvIGFs bG93IGZvciBjYXRjaGluZyB0aGUgbm90aWZpY2F0aW9uDQpzaWduYWw7IGZvciBleGFtcGxlLCBp biBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIGl0IG1pZ2h0IGJlDQpoZWxwZnVsIHRvIGxvZyBp bmZvcm1hdGlvbiB0byB0aGUgYXBwbGljYXRpb24gbG9nZ2luZyBtZWNoYW5pc20NCmJlZm9yZSBl eGl0aW5nLiBPciwgdGhlIHNpZ25hbCBoYW5kbGVyIG1pZ2h0IGNob29zZSB0byByZXNldCB0aGUN CnByb2dyYW0gY291bnRlciBiYWNrIHRvIHRoZSBjb2RlIHNlZ21lbnQgaW50ZW5kZWQgdG8gYmUg cnVuIGlzb2xhdGVkDQp2aWEgcHJjdGwoKSB0byBjb250aW51ZSBleGVjdXRpb24uDQoNCklzb2xh dGlvbiBhbHNvIGRpc2FibGVzIENQVSBzdGF0ZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0 aGF0DQphcmUuIG5vcm1hbGx5IGRvbmUgYnkgSVBJLiBJbiB0aGUgZnV0dXJlLCBtb3JlIHN5bmNo cm9uaXphdGlvbg0KbWVjaGFuaXNtcywgc3VjaCBhcyBUTEIgZmx1c2hlcywgbWF5IGJlIGRpc2Fi bGVkIGZvciBpc29sYXRlZCB0YXNrcy4NClRoaXMgcmVxdWlyZXMgY2FyZWZ1bCBoYW5kbGluZyBv ZiBrZXJuZWwgZW50cnkgZnJvbSBpc29sYXRlZCB0YXNrIC0tDQpyZW1vdGUgc3luY2hyb25pemF0 aW9uIHJlcXVlc3RzIG11c3QgYmUgcmUtZW5hYmxlZCBhbmQNCnN5bmNocm9uaXphdGlvbiBwcm9j ZWR1cmUgdHJpZ2dlcmVkLCBiZWZvcmUgYW55dGhpbmcgb3RoZXIgdGhhbg0KbG93LWxldmVsIGtl cm5lbCBlbnRyeSBjb2RlIGlzIGNhbGxlZC4gU2FtZSBhcHBsaWVzIHRvIGV4aXRpbmcgZnJvbQ0K a2VybmVsIHRvIHVzZXJzcGFjZSBhZnRlciBpc29sYXRpb24gaXMgZW5hYmxlZC4NCg0KRm9yIHRo aXMgcHVycG9zZSwgcGVyLUNQVSBsb3ctbGV2ZWwgZmxhZ3MgbGxfaXNvbF9mbGFncyBhcmUgdXNl ZCB0bw0KaW5kaWNhdGUgaXNvbGF0aW9uIHN0YXRlLCBhbmQgdGFza19pc29sYXRpb25fa2VybmVs X2VudGVyKCkgaXMgdXNlZA0KdG8gc2FmZWx5IGNsZWFyIHRoZW0gZWFybHkgaW4ga2VybmVsIGVu dHJ5LiBDUFUgbWFzayBjb3JyZXNwb25kaW5nDQp0byBpc29sYXRpb24gYml0IGluIGxsX2lzb2xf ZmxhZ3MgaXMgdmlzaWJsZSB0byB1c2Vyc3BhY2UgYXMNCi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1 L2lzb2xhdGlvbl9ydW5uaW5nLCBhbmQgY2FuIGJlIHVzZWQgZm9yDQptb25pdG9yaW5nLg0KDQpT aWduZWQtb2ZmLWJ5OiBDaHJpcyBNZXRjYWxmIDxjbWV0Y2FsZkBtZWxsYW5veC5jb20+DQpTaWdu ZWQtb2ZmLWJ5OiBBbGV4IEJlbGl0cyA8YWJlbGl0c0BtYXJ2ZWxsLmNvbT4NCi0tLQ0KIC4uLi9h ZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgICAgICAgICB8ICAgNiArDQogZHJpdmVy cy9iYXNlL2NwdS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIzICsNCiBpbmNsdWRl L2xpbnV4L2hydGltZXIuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKw0KIGluY2x1ZGUv bGludXgvaXNvbGF0aW9uLmggICAgICAgICAgICAgICAgICAgICB8IDMyNiArKysrKysrKw0KIGlu Y2x1ZGUvbGludXgvc2NoZWQuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSArDQogaW5j bHVkZS9saW51eC90aWNrLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzICsNCiBpbmNs dWRlL3VhcGkvbGludXgvcHJjdGwuaCAgICAgICAgICAgICAgICAgICAgfCAgIDYgKw0KIGluaXQv S2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyNyArDQoga2VybmVs L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsNCiBrZXJuZWwv aXNvbGF0aW9uLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3MTQgKysrKysrKysrKysr KysrKysrDQoga2VybmVsL3NpZ25hbC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAyICsNCiBrZXJuZWwvc3lzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDYgKw0KIGtlcm5lbC90aW1lL2hydGltZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAy NyArDQoga2VybmVsL3RpbWUvdGljay1zY2hlZC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDE4 ICsNCiAxNCBmaWxlcyBjaGFuZ2VkLCAxMTY5IGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAx MDA2NDQgaW5jbHVkZS9saW51eC9pc29sYXRpb24uaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBrZXJu ZWwvaXNvbGF0aW9uLmMNCg0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUv a2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwt cGFyYW1ldGVycy50eHQNCmluZGV4IDQ0ZmRlMjViYjIyMS4uNGIyOGYyMDIyYzk4IDEwMDY0NA0K LS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQNCisr KyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0DQpAQCAt NTI1MCw2ICs1MjUwLDEyIEBADQogCQkJbmV1dHJhbGl6ZSBhbnkgZWZmZWN0IG9mIC9wcm9jL3N5 cy9rZXJuZWwvc3lzcnEuDQogCQkJVXNlZnVsIGZvciBkZWJ1Z2dpbmcuDQogDQorCXRhc2tfaXNv bGF0aW9uX2RlYnVnCVtLTkxdDQorCQkJSW4ga2VybmVscyBidWlsdCB3aXRoIENPTkZJR19UQVNL X0lTT0xBVElPTiwgdGhpcw0KKwkJCXNldHRpbmcgd2lsbCBnZW5lcmF0ZSBjb25zb2xlIGJhY2t0 cmFjZXMgdG8NCisJCQlhY2NvbXBhbnkgdGhlIGRpYWdub3N0aWNzIGdlbmVyYXRlZCBhYm91dA0K KwkJCWludGVycnVwdGluZyB0YXNrcyBydW5uaW5nIHdpdGggdGFzayBpc29sYXRpb24uDQorDQog CXRjcG1oYXNoX2VudHJpZXM9IFtLTkwsTkVUXQ0KIAkJCVNldCB0aGUgbnVtYmVyIG9mIHRjcF9t ZXRyaWNzX2hhc2ggc2xvdHMuDQogCQkJRGVmYXVsdCB2YWx1ZSBpcyA4MTkyIG9yIDE2Mzg0IGRl cGVuZGluZyBvbiB0b3RhbA0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jcHUuYyBiL2RyaXZl cnMvYmFzZS9jcHUuYw0KaW5kZXggOGYxZDY1Njk1NjRjLi5hZmE2MTYzMjAzYzcgMTAwNjQ0DQot LS0gYS9kcml2ZXJzL2Jhc2UvY3B1LmMNCisrKyBiL2RyaXZlcnMvYmFzZS9jcHUuYw0KQEAgLTI4 NCw2ICsyODQsMjYgQEAgc3RhdGljIHNzaXplX3QgcHJpbnRfY3B1c19pc29sYXRlZChzdHJ1Y3Qg ZGV2aWNlICpkZXYsDQogfQ0KIHN0YXRpYyBERVZJQ0VfQVRUUihpc29sYXRlZCwgMDQ0NCwgcHJp bnRfY3B1c19pc29sYXRlZCwgTlVMTCk7DQogDQorI2lmZGVmIENPTkZJR19UQVNLX0lTT0xBVElP Tg0KK3N0YXRpYyBzc2l6ZV90IGlzb2xhdGlvbl9ydW5uaW5nX3Nob3coc3RydWN0IGRldmljZSAq ZGV2LA0KKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVm KQ0KK3sNCisJaW50IG47DQorCWNwdW1hc2tfdmFyX3QgaXNvbGF0aW9uX3J1bm5pbmc7DQorDQor CWlmICghemFsbG9jX2NwdW1hc2tfdmFyKCZpc29sYXRpb25fcnVubmluZywgR0ZQX0tFUk5FTCkp DQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJdGFza19pc29sYXRpb25fY3B1bWFzayhpc29sYXRp b25fcnVubmluZyk7DQorCW4gPSBzcHJpbnRmKGJ1ZiwgIiUqcGJsXG4iLCBjcHVtYXNrX3ByX2Fy Z3MoaXNvbGF0aW9uX3J1bm5pbmcpKTsNCisNCisJZnJlZV9jcHVtYXNrX3Zhcihpc29sYXRpb25f cnVubmluZyk7DQorDQorCXJldHVybiBuOw0KK30NCitzdGF0aWMgREVWSUNFX0FUVFJfUk8oaXNv bGF0aW9uX3J1bm5pbmcpOw0KKyNlbmRpZg0KKw0KICNpZmRlZiBDT05GSUdfTk9fSFpfRlVMTA0K IHN0YXRpYyBzc2l6ZV90IHByaW50X2NwdXNfbm9oel9mdWxsKHN0cnVjdCBkZXZpY2UgKmRldiwN CiAJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpDQpAQCAt NDcxLDYgKzQ5MSw5IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjcHVfcm9vdF9hdHRyc1td ID0gew0KICNpZmRlZiBDT05GSUdfTk9fSFpfRlVMTA0KIAkmZGV2X2F0dHJfbm9oel9mdWxsLmF0 dHIsDQogI2VuZGlmDQorI2lmZGVmIENPTkZJR19UQVNLX0lTT0xBVElPTg0KKwkmZGV2X2F0dHJf aXNvbGF0aW9uX3J1bm5pbmcuYXR0ciwNCisjZW5kaWYNCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNf Q1BVX0FVVE9QUk9CRQ0KIAkmZGV2X2F0dHJfbW9kYWxpYXMuYXR0ciwNCiAjZW5kaWYNCmRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaCBiL2luY2x1ZGUvbGludXgvaHJ0aW1lci5o DQppbmRleCAxMDdjZWRkNzAxOWEuLjlhNmM5Y2U5NTA4MCAxMDA2NDQNCi0tLSBhL2luY2x1ZGUv bGludXgvaHJ0aW1lci5oDQorKysgYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaA0KQEAgLTUyOSw2 ICs1MjksMTAgQEAgZXh0ZXJuIHZvaWQgX19pbml0IGhydGltZXJzX2luaXQodm9pZCk7DQogLyog U2hvdyBwZW5kaW5nIHRpbWVyczogKi8NCiBleHRlcm4gdm9pZCBzeXNycV90aW1lcl9saXN0X3No b3codm9pZCk7DQogDQorI2lmZGVmIENPTkZJR19UQVNLX0lTT0xBVElPTg0KK2V4dGVybiB2b2lk IGtpY2tfaHJ0aW1lcih2b2lkKTsNCisjZW5kaWYNCisNCiBpbnQgaHJ0aW1lcnNfcHJlcGFyZV9j cHUodW5zaWduZWQgaW50IGNwdSk7DQogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQ0KIGludCBo cnRpbWVyc19kZWFkX2NwdSh1bnNpZ25lZCBpbnQgY3B1KTsNCmRpZmYgLS1naXQgYS9pbmNsdWRl L2xpbnV4L2lzb2xhdGlvbi5oIGIvaW5jbHVkZS9saW51eC9pc29sYXRpb24uaA0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uZWI2Yzk5YmQyZGI0DQotLS0gL2Rldi9u dWxsDQorKysgYi9pbmNsdWRlL2xpbnV4L2lzb2xhdGlvbi5oDQpAQCAtMCwwICsxLDMyNiBAQA0K Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8NCisvKg0KKyAqIFRh c2sgaXNvbGF0aW9uIHN1cHBvcnQNCisgKg0KKyAqIEF1dGhvcnM6DQorICogICBDaHJpcyBNZXRj YWxmIDxjbWV0Y2FsZkBtZWxsYW5veC5jb20+DQorICogICBBbGV4IEJlbGl0cyA8YWJlbGl0c0Bt YXJ2ZWxsLmNvbT4NCisgKiAgIFl1cmkgTm9yb3YgPHlub3JvdkBtYXJ2ZWxsLmNvbT4NCisgKi8N CisjaWZuZGVmIF9MSU5VWF9JU09MQVRJT05fSA0KKyNkZWZpbmUgX0xJTlVYX0lTT0xBVElPTl9I DQorDQorI2luY2x1ZGUgPHN0ZGFyZy5oPg0KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPg0KKyNp bmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPg0KKyNp bmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPg0KKyNpbmNsdWRlIDxsaW51eC9wcmN0bC5oPg0KKyNp bmNsdWRlIDxsaW51eC90eXBlcy5oPg0KKw0KK3N0cnVjdCB0YXNrX3N0cnVjdDsNCisNCisjaWZk ZWYgQ09ORklHX1RBU0tfSVNPTEFUSU9ODQorDQorLyoNCisgKiBMb2dnaW5nDQorICovDQoraW50 IHRhc2tfaXNvbGF0aW9uX21lc3NhZ2UoaW50IGNwdSwgaW50IGxldmVsLCBib29sIHN1cHAsIGNv bnN0IGNoYXIgKmZtdCwgLi4uKTsNCisNCisjZGVmaW5lIHByX3Rhc2tfaXNvbF9lbWVyZyhjcHUs IGZtdCwgLi4uKQkJCVwNCisJdGFza19pc29sYXRpb25fbWVzc2FnZShjcHUsIExPR0xFVkVMX0VN RVJHLCBmYWxzZSwgZm10LCAjI19fVkFfQVJHU19fKQ0KKyNkZWZpbmUgcHJfdGFza19pc29sX2Fs ZXJ0KGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9H TEVWRUxfQUxFUlQsIGZhbHNlLCBmbXQsICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNr X2lzb2xfY3JpdChjcHUsIGZtdCwgLi4uKQkJCVwNCisJdGFza19pc29sYXRpb25fbWVzc2FnZShj cHUsIExPR0xFVkVMX0NSSVQsIGZhbHNlLCBmbXQsICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBw cl90YXNrX2lzb2xfZXJyKGNwdSwgZm10LCAuLi4pCQkJCVwNCisJdGFza19pc29sYXRpb25fbWVz c2FnZShjcHUsIExPR0xFVkVMX0VSUiwgZmFsc2UsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisjZGVm aW5lIHByX3Rhc2tfaXNvbF93YXJuKGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlv bl9tZXNzYWdlKGNwdSwgTE9HTEVWRUxfV0FSTklORywgZmFsc2UsIGZtdCwgIyNfX1ZBX0FSR1Nf XykNCisjZGVmaW5lIHByX3Rhc2tfaXNvbF9ub3RpY2UoY3B1LCBmbXQsIC4uLikJCQlcDQorCXRh c2tfaXNvbGF0aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZFTF9OT1RJQ0UsIGZhbHNlLCBmbXQsICMj X19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xfaW5mbyhjcHUsIGZtdCwgLi4uKQkJ CVwNCisJdGFza19pc29sYXRpb25fbWVzc2FnZShjcHUsIExPR0xFVkVMX0lORk8sIGZhbHNlLCBm bXQsICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xfZGVidWcoY3B1LCBmbXQs IC4uLikJCQlcDQorCXRhc2tfaXNvbGF0aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZFTF9ERUJVRywg ZmFsc2UsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisNCisjZGVmaW5lIHByX3Rhc2tfaXNvbF9lbWVy Z19zdXBwKGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwg TE9HTEVWRUxfRU1FUkcsIHRydWUsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisjZGVmaW5lIHByX3Rh c2tfaXNvbF9hbGVydF9zdXBwKGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9t ZXNzYWdlKGNwdSwgTE9HTEVWRUxfQUxFUlQsIHRydWUsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisj ZGVmaW5lIHByX3Rhc2tfaXNvbF9jcml0X3N1cHAoY3B1LCBmbXQsIC4uLikJCQlcDQorCXRhc2tf aXNvbGF0aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZFTF9DUklULCB0cnVlLCBmbXQsICMjX19WQV9B UkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xfZXJyX3N1cHAoY3B1LCBmbXQsIC4uLikJCQkJ XA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVWRUxfRVJSLCB0cnVlLCBmbXQs ICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xfd2Fybl9zdXBwKGNwdSwgZm10 LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVWRUxfV0FSTklO RywgdHJ1ZSwgZm10LCAjI19fVkFfQVJHU19fKQ0KKyNkZWZpbmUgcHJfdGFza19pc29sX25vdGlj ZV9zdXBwKGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwg TE9HTEVWRUxfTk9USUNFLCB0cnVlLCBmbXQsICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90 YXNrX2lzb2xfaW5mb19zdXBwKGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9t ZXNzYWdlKGNwdSwgTE9HTEVWRUxfSU5GTywgdHJ1ZSwgZm10LCAjI19fVkFfQVJHU19fKQ0KKyNk ZWZpbmUgcHJfdGFza19pc29sX2RlYnVnX3N1cHAoY3B1LCBmbXQsIC4uLikJCQlcDQorCXRhc2tf aXNvbGF0aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZFTF9ERUJVRywgdHJ1ZSwgZm10LCAjI19fVkFf QVJHU19fKQ0KKw0KKyNkZWZpbmUgQklUX0xMX1RBU0tfSVNPTEFUSU9OCQkoMCkNCisjZGVmaW5l IEJJVF9MTF9UQVNLX0lTT0xBVElPTl9CUk9LRU4JKDEpDQorI2RlZmluZSBCSVRfTExfVEFTS19J U09MQVRJT05fUkVRVUVTVAkoMikNCisjZGVmaW5lIEZMQUdfTExfVEFTS19JU09MQVRJT04JCSgx IDw8IEJJVF9MTF9UQVNLX0lTT0xBVElPTikNCisjZGVmaW5lIEZMQUdfTExfVEFTS19JU09MQVRJ T05fQlJPS0VOCSgxIDw8IEJJVF9MTF9UQVNLX0lTT0xBVElPTl9CUk9LRU4pDQorI2RlZmluZSBG TEFHX0xMX1RBU0tfSVNPTEFUSU9OX1JFUVVFU1QJKDEgPDwgQklUX0xMX1RBU0tfSVNPTEFUSU9O X1JFUVVFU1QpDQorDQorREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGxsX2lzb2xfZmxh Z3MpOw0KK2V4dGVybiBjcHVtYXNrX3Zhcl90IHRhc2tfaXNvbGF0aW9uX21hcDsNCisNCisvKioN CisgKiB0YXNrX2lzb2xhdGlvbl9yZXF1ZXN0KCkgLSBwcmN0bCBob29rIHRvIHJlcXVlc3QgdGFz ayBpc29sYXRpb24NCisgKiBAZmxhZ3M6CUZsYWdzIGZyb20gPGxpbnV4L3ByY3RsLmg+IFBSX1RB U0tfSVNPTEFUSU9OX3h4eC4NCisgKg0KKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGdlbmVy aWMgcHJjdGwoKSBjb2RlIGZvciBQUl9UQVNLX0lTT0xBVElPTi4NCisgKg0KKyAqIFJldHVybjog UmV0dXJucyAwIHdoZW4gdGFzayBpc29sYXRpb24gZW5hYmxlZCwgb3RoZXJ3aXNlIGEgbmVnYXRp dmUNCisgKiBlcnJuby4NCisgKi8NCitleHRlcm4gaW50IHRhc2tfaXNvbGF0aW9uX3JlcXVlc3Qo dW5zaWduZWQgaW50IGZsYWdzKTsNCisNCisvKioNCisgKiB0YXNrX2lzb2xhdGlvbl9rZXJuZWxf ZW50ZXIoKSAtIGNsZWFyIGxvdy1sZXZlbCB0YXNrIGlzb2xhdGlvbiBmbGFnDQorICoNCisgKiBU aGlzIHNob3VsZCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZW50ZXJpbmcga2VybmVsLiBJ dCBtdXN0DQorICogYmUgaW5saW5lLCBhbmQgc3VpdGFibGUgZm9yIHJ1bm5pbmcgYWZ0ZXIgbGVh dmluZyBpc29sYXRlZA0KKyAqIHVzZXJzcGFjZSBpbiBhICJzdGFsZSIgc3RhdGUgd2hlbiBzeW5j aHJvbml6YXRpb24gaXMgcmVxdWlyZWQNCisgKiBiZWZvcmUgdGhlIENQVSBjYW4gc2FmZWx5IGVu dGVyIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwuDQorICovDQorc3RhdGljIF9fYWx3YXlzX2lubGlu ZSB2b2lkIHRhc2tfaXNvbGF0aW9uX2tlcm5lbF9lbnRlcih2b2lkKQ0KK3sNCisJdW5zaWduZWQg bG9uZyBmbGFnczsNCisNCisJLyoNCisJICogVGhpcyBmdW5jdGlvbiBydW5zIG9uIGEgQ1BVIHRo YXQgcmFuIGlzb2xhdGVkIHRhc2suDQorCSAqDQorCSAqIFdlIGRvbid0IHdhbnQgdGhpcyBDUFUg cnVubmluZyBjb2RlIGZyb20gdGhlIHJlc3Qgb2Yga2VybmVsDQorCSAqIHVudGlsIG90aGVyIENQ VXMga25vdyB0aGF0IGl0IGlzIG5vIGxvbmdlciBpc29sYXRlZC4gIFdoZW4NCisJICogQ1BVIGlz IHJ1bm5pbmcgaXNvbGF0ZWQgdGFzayB1bnRpbCB0aGlzIHBvaW50IGFueXRoaW5nIHRoYXQNCisJ ICogY2F1c2VzIGFuIGludGVycnVwdCBvbiB0aGlzIENQVSBtdXN0IGVuZCB1cCBjYWxsaW5nIHRo aXMNCisJICogYmVmb3JlIHRvdWNoaW5nIHRoZSByZXN0IG9mIGtlcm5lbC4gVGhhdCBpcywgdGhp cyBmdW5jdGlvbg0KKwkgKiBvciBmYXN0X3Rhc2tfaXNvbGF0aW9uX2NwdV9jbGVhbnVwKCkgb3Ig c3RvcF9pc29sYXRpb24oKQ0KKwkgKiBjYWxsaW5nIGl0LiBJZiBhbnkgaW50ZXJydXB0LCBpbmNs dWRpbmcgc2NoZWR1bGluZyB0aW1lciwNCisJICogYXJyaXZlcywgaXQgd2lsbCBzdGlsbCBlbmQg dXAgaGVyZSBlYXJseSBhZnRlciBlbnRlcmluZw0KKwkgKiBrZXJuZWwuICBGcm9tIHRoaXMgcG9p bnQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdW50aWwgYWxsDQorCSAqIENQVXMgd2lsbCBzZWUg dGhhdCB0aGlzIENQVSBpcyBubyBsb25nZXIgcnVubmluZyBpc29sYXRlZA0KKwkgKiB0YXNrLg0K KwkgKg0KKwkgKiBTZWUgYWxzbyBmYXN0X3Rhc2tfaXNvbGF0aW9uX2NwdV9jbGVhbnVwKCkuDQor CSAqLw0KKwlpZiAoKHRoaXNfY3B1X3JlYWQobGxfaXNvbF9mbGFncykgJiBGTEFHX0xMX1RBU0tf SVNPTEFUSU9OKSA9PSAwKQ0KKwkJcmV0dXJuOw0KKw0KKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxh Z3MpOw0KKw0KKwkvKiBDaGFuZ2UgbG93LWxldmVsIGZsYWdzIHRvIGluZGljYXRlIGJyb2tlbiBp c29sYXRpb24gKi8NCisJdGhpc19jcHVfd3JpdGUobGxfaXNvbF9mbGFncywgRkxBR19MTF9UQVNL X0lTT0xBVElPTl9CUk9LRU4pOw0KKw0KKwkvKg0KKwkgKiBJZiBzb21ldGhpbmcgaGFwcGVuZWQg dGhhdCByZXF1aXJlcyBhIGJhcnJpZXIgdGhhdCB3b3VsZA0KKwkgKiBvdGhlcndpc2UgYmUgY2Fs bGVkIGZyb20gcmVtb3RlIENQVXMgYnkgQ1BVIGtpY2sgcHJvY2VkdXJlLA0KKwkgKiB0aGlzIGJh cnJpZXIgcnVucyBpbnN0ZWFkIG9mIGl0LiBBZnRlciB0aGlzIGJhcnJpZXIsIENQVQ0KKwkgKiBr aWNrIHByb2NlZHVyZSB3b3VsZCBzZWUgdGhlIHVwZGF0ZWQgbGxfaXNvbF9mbGFncywgc28gaXQN CisJICogd2lsbCBydW4gaXRzIG93biBJUEkgdG8gdHJpZ2dlciBhIGJhcnJpZXIuDQorCSAqLw0K KwlzbXBfbWIoKTsNCisJLyoNCisJICogU3luY2hyb25pemUgaW5zdHJ1Y3Rpb25zIC0tIHRoaXMg Q1BVIHdhcyBub3Qga2lja2VkIHdoaWxlDQorCSAqIGluIGlzb2xhdGVkIG1vZGUsIHNvIGl0IG1p Z2h0IHJlcXVpcmUgc3luY2hyb25pemF0aW9uLg0KKwkgKiBUaGVyZSBtaWdodCBiZSBhbiBJUEkg aWYga2ljayBwcm9jZWR1cmUgaGFwcGVuZWQgYW5kDQorCSAqIGxsX2lzb2xfZmxhZ3Mgd2FzIGFs cmVhZHkgdXBkYXRlZCB3aGlsZSBpdCBhc3NlbWJsZWQgYSBDUFUNCisJICogbWFzay4gSG93ZXZl ciBpZiB0aGlzIGRpZCBub3QgaGFwcGVuLCBzeW5jaHJvbml6ZSBldmVyeXRoaW5nDQorCSAqIGhl cmUuDQorCSAqLw0KKwlpbnN0cl9zeW5jKCk7DQorCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFn cyk7DQorfQ0KKw0KKy8qKg0KKyAqIHRhc2tfaXNvbGF0aW9uX2V4aXRfdG9fdXNlcl9tb2RlKCkg LSBzZXQgbG93LWxldmVsIHRhc2sgaXNvbGF0aW9uIGZsYWcNCisgKiBpZiB0YXNrIGlzb2xhdGlv biBpcyByZXF1ZXN0ZWQNCisgKg0KKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBpbW1lZGlhdGVs eSBiZWZvcmUgZXhpdGluZyBrZXJuZWwuIEl0IG11c3QNCisgKiBiZSBpbmxpbmUsIGFuZCB0aGUg c3RhdGUgb2YgQ1BJIG1heSBiZWNvbWUgInN0YWxlIiBiZXR3ZWVuIHNldHRpbmcNCisgKiB0aGUg ZmxhZyBhbmQgcmV0dXJuaW5nIHRvIHRoZSB1c2Vyc3BhY2UuDQorICovDQorc3RhdGljIF9fYWx3 YXlzX2lubGluZSB2b2lkIHRhc2tfaXNvbGF0aW9uX2V4aXRfdG9fdXNlcl9tb2RlKHZvaWQpDQor ew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKw0KKwkvKiBDaGVjayBpZiB0aGlzIHRhc2sgaXMg ZW50ZXJpbmcgaXNvbGF0aW9uICovDQorCWlmICgodGhpc19jcHVfcmVhZChsbF9pc29sX2ZsYWdz KSAmIEZMQUdfTExfVEFTS19JU09MQVRJT05fUkVRVUVTVCkNCisJICAgID09IDApDQorCQlyZXR1 cm47DQorCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7DQorDQorCS8qIFNldCBsb3ctbGV2ZWwg ZmxhZ3MgKi8NCisJdGhpc19jcHVfd3JpdGUobGxfaXNvbF9mbGFncywgRkxBR19MTF9UQVNLX0lT T0xBVElPTik7DQorCS8qDQorCSAqIEFmdGVyIHRoaXMgYmFycmllciB0aGUgcmVzdCBvZiB0aGUg c3lzdGVtIHN0b3BzIHVzaW5nIElQSXMNCisJICogdG8gc3luY2hyb25pemUgdGhpcyBDUFUgc3Rh dGUuIFNpbmNlIG9ubHkgZXhpdCB0byB1c2Vyc3BhY2UNCisJICogZm9sbG93cywgdGhpcyBpcyBz YWZlLiBTeW5jaHJvbml6YXRpb24gd2lsbCBoYXBwZW4gYWdhaW4gaW4NCisJICogdGFza19pc29s YXRpb25fZW50ZXIoKSB3aGVuIHRoaXMgQ1BVIHdpbGwgZW50ZXIga2VybmVsLg0KKwkgKi8NCisJ c21wX21iKCk7DQorCS8qDQorCSAqIEZyb20gdGhpcyBwb2ludCB0aGlzIGlzIHJlY29nbml6ZWQg YXMgaXNvbGF0ZWQgYnkNCisJICogb3RoZXIgQ1BVcw0KKwkgKi8NCisJcmF3X2xvY2FsX2lycV9y ZXN0b3JlKGZsYWdzKTsNCit9DQorDQorZXh0ZXJuIHZvaWQgdGFza19pc29sYXRpb25fY3B1X2Ns ZWFudXAodm9pZCk7DQorLyoqDQorICogdGFza19pc29sYXRpb25fc3RhcnQoKSAtIGF0dGVtcHQg dG8gYWN0dWFsbHkgc3RhcnQgdGFzayBpc29sYXRpb24NCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24g c2hvdWxkIGJlIGludm9rZWQgYXMgdGhlIGxhc3QgdGhpbmcgcHJpb3IgdG8gcmV0dXJuaW5nIHRv DQorICogdXNlciBzcGFjZSBpZiBUSUZfVEFTS19JU09MQVRJT04gaXMgc2V0IGluIHRoZSB0aHJl YWRfaW5mbyBmbGFncy4gIEl0DQorICogd2lsbCBhdHRlbXB0IHRvIHF1aWVzY2UgdGhlIGNvcmUg YW5kIGVudGVyIHRhc2staXNvbGF0aW9uIG1vZGUuICBJZiBpdA0KKyAqIGZhaWxzLCBpdCB3aWxs IHJlc2V0IHRoZSBzeXN0ZW0gY2FsbCByZXR1cm4gdmFsdWUgdG8gYW4gZXJyb3IgY29kZSB0aGF0 DQorICogaW5kaWNhdGVzIHRoZSBmYWlsdXJlIG1vZGUuDQorICovDQorZXh0ZXJuIHZvaWQgdGFz a19pc29sYXRpb25fc3RhcnQodm9pZCk7DQorDQorLyoqDQorICogaXNfaXNvbGF0aW9uX2NwdSgp IC0gY2hlY2sgaWYgQ1BVIGlzIGludGVuZGVkIGZvciBydW5uaW5nIGlzb2xhdGVkIHRhc2tzLg0K KyAqIEBjcHU6CUNQVSB0byBjaGVjay4NCisgKi8NCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfaXNv bGF0aW9uX2NwdShpbnQgY3B1KQ0KK3sNCisJcmV0dXJuIHRhc2tfaXNvbGF0aW9uX21hcCAhPSBO VUxMICYmDQorCQljcHVtYXNrX3Rlc3RfY3B1KGNwdSwgdGFza19pc29sYXRpb25fbWFwKTsNCit9 DQorDQorLyoqDQorICogdGFza19pc29sYXRpb25fb25fY3B1KCkgLSBjaGVjayBpZiB0aGUgY3B1 IGlzIHJ1bm5pbmcgaXNvbGF0ZWQgdGFzaw0KKyAqIEBjcHU6CUNQVSB0byBjaGVjay4NCisgKi8N CitzdGF0aWMgaW5saW5lIGludCB0YXNrX2lzb2xhdGlvbl9vbl9jcHUoaW50IGNwdSkNCit7DQor CXJldHVybiB0ZXN0X2JpdChCSVRfTExfVEFTS19JU09MQVRJT04sICZwZXJfY3B1KGxsX2lzb2xf ZmxhZ3MsIGNwdSkpOw0KK30NCisNCisvKioNCisgKiB0YXNrX2lzb2xhdGlvbl9jcHVtYXNrKCkg LSBzZXQgQ1BVcyBjdXJyZW50bHkgcnVubmluZyBpc29sYXRlZCB0YXNrcw0KKyAqIEBtYXNrOglN YXNrIHRvIG1vZGlmeS4NCisgKi8NCitleHRlcm4gdm9pZCB0YXNrX2lzb2xhdGlvbl9jcHVtYXNr KHN0cnVjdCBjcHVtYXNrICptYXNrKTsNCisNCisvKioNCisgKiB0YXNrX2lzb2xhdGlvbl9jbGVh cl9jcHVtYXNrKCkgLSBjbGVhciBDUFVzIGN1cnJlbnRseSBydW5uaW5nIGlzb2xhdGVkIHRhc2tz DQorICogQG1hc2s6ICAgICAgTWFzayB0byBtb2RpZnkuDQorICovDQorZXh0ZXJuIHZvaWQgdGFz a19pc29sYXRpb25fY2xlYXJfY3B1bWFzayhzdHJ1Y3QgY3B1bWFzayAqbWFzayk7DQorDQorLyoq DQorICogdGFza19pc29sYXRpb25fc3lzY2FsbCgpIC0gcmVwb3J0IGEgc3lzY2FsbCBmcm9tIGFu IGlzb2xhdGVkIHRhc2sNCisgKiBAbnI6CQlUaGUgc3lzY2FsbCBudW1iZXIuDQorICoNCisgKiBU aGlzIHJvdXRpbmUgc2hvdWxkIGJlIGludm9rZWQgYXQgc3lzY2FsbCBlbnRyeSBpZiBUSUZfVEFT S19JU09MQVRJT04gaXMNCisgKiBzZXQgaW4gdGhlIHRocmVhZF9pbmZvIGZsYWdzLiAgSXQgY2hl Y2tzIGZvciB2YWxpZCBzeXNjYWxscywNCisgKiBzcGVjaWZpY2FsbHkgcHJjdGwoKSB3aXRoIFBS X1RBU0tfSVNPTEFUSU9OLCBleGl0KCksIGFuZCBleGl0X2dyb3VwKCkuDQorICogRm9yIGFueSBv dGhlciBzeXNjYWxsIGl0IHdpbGwgcmFpc2UgYSBzaWduYWwgYW5kIHJldHVybiBmYWlsdXJlLg0K KyAqDQorICogUmV0dXJuOiAwIGZvciBhY2NlcHRhYmxlIHN5c2NhbGxzLCAtMSBmb3IgYWxsIG90 aGVycy4NCisgKi8NCitleHRlcm4gaW50IHRhc2tfaXNvbGF0aW9uX3N5c2NhbGwoaW50IG5yKTsN CisNCisvKioNCisgKiB0YXNrX2lzb2xhdGlvbl9iZWZvcmVfcGVuZGluZ193b3JrX2NoZWNrKCkg LSBjaGVjayBmb3IgaXNvbGF0aW9uIGJyZWFraW5nDQorICoNCisgKiBUaGlzIHJvdXRpbmUgaXMg Y2FsbGVkIGZyb20gdGhlIGNvZGUgcmVzcG9uc2libGUgZm9yIGV4aXRpbmcgdG8gdXNlciBtb2Rl LA0KKyAqIGJlZm9yZSB0aGUgcG9pbnQgd2hlbiB0aHJlYWQgZmxhZ3MgYXJlIGNoZWNrZWQgZm9y IHBlbmRpbmcgd29yay4NCisgKiBUaGF0IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGlmIHRoZSBj dXJyZW50IHRhc2sgaXMgaXNvbGF0ZWQsIGJlY2F1c2UNCisgKiBUSUZfVEFTS19JU09MQVRJT04g bXVzdCB0cmlnZ2VyIGEgY2FsbCB0byBpdC4NCisgKi8NCit2b2lkIHRhc2tfaXNvbGF0aW9uX2Jl Zm9yZV9wZW5kaW5nX3dvcmtfY2hlY2sodm9pZCk7DQorDQorLyoqDQorICogX3Rhc2tfaXNvbGF0 aW9uX2ludGVycnVwdCgpIC0gcmVwb3J0IGFuIGludGVycnVwdCBvZiBhbiBpc29sYXRlZCB0YXNr DQorICogQGZtdDoJQSBmb3JtYXQgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGludGVycnVwdA0KKyAq IEAuLi46CUZvcm1hdCBhcmd1bWVudHMsIGlmIGFueS4NCisgKg0KKyAqIFRoaXMgcm91dGluZSBz aG91bGQgYmUgaW52b2tlZCBhdCBhbnkgZXhjZXB0aW9uIG9yIElSUSBpZg0KKyAqIFRJRl9UQVNL X0lTT0xBVElPTiBpcyBzZXQgaW4gdGhlIHRocmVhZF9pbmZvIGZsYWdzLiAgSXQgaXMgbm90IG5l Y2Vzc2FyeQ0KKyAqIHRvIGludm9rZSBpdCBpZiB0aGUgZXhjZXB0aW9uIHdpbGwgZ2VuZXJhdGUg YSBzaWduYWwgYW55d2F5IChlLmcuIGEgYmFkDQorICogcGFnZSBmYXVsdCksIGFuZCBpbiB0aGF0 IGNhc2UgaXQgaXMgcHJlZmVyYWJsZSBub3QgdG8gaW52b2tlIGl0IGJ1dCBqdXN0DQorICogcmVs eSBvbiB0aGUgc3RhbmRhcmQgTGludXggc2lnbmFsLiAgVGhlIG1hY3JvIHRhc2tfaXNvbGF0aW9u X3N5c2NhbGwoKQ0KKyAqIHdyYXBzIHRoZSBUSUZfVEFTS19JU09MQVRJT04gZmxhZyB0ZXN0IHRv IHNpbXBsaWZ5IHRoZSBjYWxsZXIgY29kZS4NCisgKi8NCitleHRlcm4gdm9pZCBfdGFza19pc29s YXRpb25faW50ZXJydXB0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsNCisjZGVmaW5lIHRhc2tfaXNv bGF0aW9uX2ludGVycnVwdChmbXQsIC4uLikJCQkJXA0KKwlkbyB7CQkJCQkJCQlcDQorCQlpZiAo Y3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncyAmIF9USUZfVEFTS19JU09MQVRJT04pCVwNCisJ CQlfdGFza19pc29sYXRpb25faW50ZXJydXB0KGZtdCwgIyMgX19WQV9BUkdTX18pOwlcDQorCX0g d2hpbGUgKDApDQorDQorLyoqDQorICogdGFza19pc29sYXRpb25fcmVtb3RlKCkgLSByZXBvcnQg YSByZW1vdGUgaW50ZXJydXB0IG9mIGFuIGlzb2xhdGVkIHRhc2sNCisgKiBAY3B1OglUaGUgcmVt b3RlIGNwdSB0aGF0IGlzIGFib3V0IHRvIGJlIGludGVycnVwdGVkLg0KKyAqIEBmbXQ6CUEgZm9y bWF0IHN0cmluZyBkZXNjcmliaW5nIHRoZSBpbnRlcnJ1cHQNCisgKiBALi4uOglGb3JtYXQgYXJn dW1lbnRzLCBpZiBhbnkuDQorICoNCisgKiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlIGludm9rZWQg YW55IHRpbWUgYSByZW1vdGUgSVBJIG9yIG90aGVyIHR5cGUgb2YNCisgKiBpbnRlcnJ1cHQgaXMg YmVpbmcgZGVsaXZlcmVkIHRvIGFub3RoZXIgY3B1LiBUaGUgZnVuY3Rpb24gd2lsbCBjaGVjayB0 bw0KKyAqIHNlZSBpZiB0aGUgdGFyZ2V0IGNvcmUgaXMgcnVubmluZyBhIHRhc2staXNvbGF0aW9u IHRhc2ssIGFuZCBnZW5lcmF0ZSBhDQorICogZGlhZ25vc3RpYyBvbiB0aGUgY29uc29sZSBpZiBz bzsgaW4gYWRkaXRpb24sIHdlIHRhZyB0aGUgdGFzayBzbyBpdA0KKyAqIGRvZXNuJ3QgZ2VuZXJh dGUgYW5vdGhlciBkaWFnbm9zdGljIHdoZW4gdGhlIGludGVycnVwdCBhY3R1YWxseSBhcnJpdmVz Lg0KKyAqIEdlbmVyYXRpbmcgYSBkaWFnbm9zdGljIHJlbW90ZWx5IHlpZWxkcyBhIGNsZWFyZXIg aW5kaWNhdGlvbiBvZiB3aGF0DQorICogaGFwcGVuZWQgdGhlbiBqdXN0IHJlcG9ydGluZyBvbmx5 IHdoZW4gdGhlIHJlbW90ZSBjb3JlIGlzIGludGVycnVwdGVkLg0KKyAqDQorICovDQorZXh0ZXJu IHZvaWQgdGFza19pc29sYXRpb25fcmVtb3RlKGludCBjcHUsIGNvbnN0IGNoYXIgKmZtdCwgLi4u KTsNCisNCisvKioNCisgKiB0YXNrX2lzb2xhdGlvbl9yZW1vdGVfY3B1bWFzaygpIC0gcmVwb3J0 IGludGVycnVwdGlvbiBvZiBtdWx0aXBsZSBjcHVzDQorICogQG1hc2s6CVRoZSBzZXQgb2YgcmVt b3RlcyBjcHVzIHRoYXQgYXJlIGFib3V0IHRvIGJlIGludGVycnVwdGVkLg0KKyAqIEBmbXQ6CUEg Zm9ybWF0IHN0cmluZyBkZXNjcmliaW5nIHRoZSBpbnRlcnJ1cHQNCisgKiBALi4uOglGb3JtYXQg YXJndW1lbnRzLCBpZiBhbnkuDQorICoNCisgKiBUaGlzIGlzIHRoZSBjcHVtYXNrIHZhcmlhbnQg b2YgX3Rhc2tfaXNvbGF0aW9uX3JlbW90ZSgpLiAgV2UNCisgKiBnZW5lcmF0ZSBhIHNpbmdsZS1s aW5lIGRpYWdub3N0aWMgbWVzc2FnZSBldmVuIGlmIG11bHRpcGxlIHJlbW90ZQ0KKyAqIHRhc2st aXNvbGF0aW9uIGNwdXMgYXJlIGJlaW5nIGludGVycnVwdGVkLg0KKyAqLw0KK2V4dGVybiB2b2lk IHRhc2tfaXNvbGF0aW9uX3JlbW90ZV9jcHVtYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNr LA0KKwkJCQkJICBjb25zdCBjaGFyICpmbXQsIC4uLik7DQorDQorLyoqDQorICogX3Rhc2tfaXNv bGF0aW9uX3NpZ25hbCgpIC0gZGlzYWJsZSB0YXNrIGlzb2xhdGlvbiB3aGVuIHNpZ25hbCBpcyBw ZW5kaW5nDQorICogQHRhc2s6CVRoZSB0YXNrIGZvciB3aGljaCB0byBkaXNhYmxlIGlzb2xhdGlv bi4NCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgZGlhZ25vc3RpYyBhbmQgZGlz YWJsZXMgdGFzayBpc29sYXRpb247DQorICogaXQgc2hvdWxkIGJlIGNhbGxlZCBpZiBUSUZfVEFT S19JU09MQVRJT04gaXMgc2V0IHdoZW4gbm90aWZ5aW5nIGENCisgKiB0YXNrIG9mIGEgcGVuZGlu ZyBzaWduYWwuIFRoZSB0YXNrX2lzb2xhdGlvbl9pbnRlcnJ1cHQoKSBmdW5jdGlvbg0KKyAqIG5v cm1hbGx5IGdlbmVyYXRlcyBhIGRpYWdub3N0aWMgZm9yIGV2ZW50cyB0aGF0IGp1c3QgaW50ZXJy dXB0IGENCisgKiB0YXNrIHdpdGhvdXQgZ2VuZXJhdGluZyBhIHNpZ25hbDsgaGVyZSB3ZSBuZWVk IHRvIGhvb2sgdGhlIHBhdGhzDQorICogdGhhdCBjb3JyZXNwb25kIHRvIGludGVycnVwdHMgdGhh dCBkbyBnZW5lcmF0ZSBhIHNpZ25hbC4gIFRoZSBtYWNybw0KKyAqIHRhc2tfaXNvbGF0aW9uX3Np Z25hbCgpIHdyYXBzIHRoZSBUSUZfVEFTS19JU09MQVRJT04gZmxhZyB0ZXN0IHRvDQorICogc2lt cGxpZnkgdGhlIGNhbGxlciBjb2RlLg0KKyAqLw0KK2V4dGVybiB2b2lkIF90YXNrX2lzb2xhdGlv bl9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsNCisjZGVmaW5lIHRhc2tfaXNvbGF0 aW9uX3NpZ25hbCh0YXNrKQkJCQkJXA0KKwlkbyB7CQkJCQkJCQlcDQorCQlpZiAodGFza190aHJl YWRfaW5mbyh0YXNrKS0+ZmxhZ3MgJiBfVElGX1RBU0tfSVNPTEFUSU9OKSBcDQorCQkJX3Rhc2tf aXNvbGF0aW9uX3NpZ25hbCh0YXNrKTsJCQlcDQorCX0gd2hpbGUgKDApDQorDQorI2Vsc2UgLyog IUNPTkZJR19UQVNLX0lTT0xBVElPTiAqLw0KK3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfaXNvbGF0 aW9uX3JlcXVlc3QodW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9DQorc3Rh dGljIGlubGluZSB2b2lkIHRhc2tfaXNvbGF0aW9uX2tlcm5lbF9lbnRlcih2b2lkKSB7fQ0KK3N0 YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lzb2xhdGlvbl9leGl0X3RvX3VzZXJfbW9kZSh2b2lkKSB7 fQ0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lzb2xhdGlvbl9zdGFydCh2b2lkKSB7IH0NCitz dGF0aWMgaW5saW5lIGJvb2wgaXNfaXNvbGF0aW9uX2NwdShpbnQgY3B1KSB7IHJldHVybiAwOyB9 DQorc3RhdGljIGlubGluZSBpbnQgdGFza19pc29sYXRpb25fb25fY3B1KGludCBjcHUpIHsgcmV0 dXJuIDA7IH0NCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19pc29sYXRpb25fY3B1bWFzayhzdHJ1 Y3QgY3B1bWFzayAqbWFzaykgeyB9DQorc3RhdGljIGlubGluZSB2b2lkIHRhc2tfaXNvbGF0aW9u X2NsZWFyX2NwdW1hc2soc3RydWN0IGNwdW1hc2sgKm1hc2spIHsgfQ0KK3N0YXRpYyBpbmxpbmUg dm9pZCB0YXNrX2lzb2xhdGlvbl9jcHVfY2xlYW51cCh2b2lkKSB7IH0NCitzdGF0aWMgaW5saW5l IGludCB0YXNrX2lzb2xhdGlvbl9zeXNjYWxsKGludCBucikgeyByZXR1cm4gMDsgfQ0KK3N0YXRp YyBpbmxpbmUgdm9pZCB0YXNrX2lzb2xhdGlvbl9iZWZvcmVfcGVuZGluZ193b3JrX2NoZWNrKHZv aWQpIHsgfQ0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lzb2xhdGlvbl9zaWduYWwoc3RydWN0 IHRhc2tfc3RydWN0ICp0YXNrKSB7IH0NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0xJTlVYX0lT T0xBVElPTl9IICovDQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVk ZS9saW51eC9zY2hlZC5oDQppbmRleCAwNjNjZDEyMGI0NTkuLjVkOGIxN2FhNTQ0YiAxMDA2NDQN Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaA0KKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5o DQpAQCAtMTMxNiw2ICsxMzE2LDExIEBAIHN0cnVjdCB0YXNrX3N0cnVjdCB7DQogCXVuc2lnbmVk IGxvbmcJCQlwcmV2X2xvd2VzdF9zdGFjazsNCiAjZW5kaWYNCiANCisjaWZkZWYgQ09ORklHX1RB U0tfSVNPTEFUSU9ODQorCXVuc2lnbmVkIHNob3J0CQkJdGFza19pc29sYXRpb25fZmxhZ3M7IC8q IHByY3RsICovDQorCXVuc2lnbmVkIHNob3J0CQkJdGFza19pc29sYXRpb25fc3RhdGU7DQorI2Vu ZGlmDQorDQogI2lmZGVmIENPTkZJR19YODZfTUNFDQogCXZvaWQgX191c2VyCQkJKm1jZV92YWRk cjsNCiAJX191NjQJCQkJbWNlX2tmbGFnczsNCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Rp Y2suaCBiL2luY2x1ZGUvbGludXgvdGljay5oDQppbmRleCA3MzQwNjEzYzdlZmYuLjI3YzdjMDMz ZDVhOCAxMDA2NDQNCi0tLSBhL2luY2x1ZGUvbGludXgvdGljay5oDQorKysgYi9pbmNsdWRlL2xp bnV4L3RpY2suaA0KQEAgLTI2OCw2ICsyNjgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19k ZXBfY2xlYXJfc2lnbmFsKHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWduYWwsDQogZXh0ZXJuIHZv aWQgdGlja19ub2h6X2Z1bGxfa2lja19jcHUoaW50IGNwdSk7DQogZXh0ZXJuIHZvaWQgX190aWNr X25vaHpfdGFza19zd2l0Y2godm9pZCk7DQogZXh0ZXJuIHZvaWQgX19pbml0IHRpY2tfbm9oel9m dWxsX3NldHVwKGNwdW1hc2tfdmFyX3QgY3B1bWFzayk7DQorI2lmZGVmIENPTkZJR19UQVNLX0lT T0xBVElPTg0KK2V4dGVybiBpbnQgdHJ5X3N0b3BfZnVsbF90aWNrKHZvaWQpOw0KKyNlbmRpZg0K ICNlbHNlDQogc3RhdGljIGlubGluZSBib29sIHRpY2tfbm9oel9mdWxsX2VuYWJsZWQodm9pZCkg eyByZXR1cm4gZmFsc2U7IH0NCiBzdGF0aWMgaW5saW5lIGJvb2wgdGlja19ub2h6X2Z1bGxfY3B1 KGludCBjcHUpIHsgcmV0dXJuIGZhbHNlOyB9DQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xp bnV4L3ByY3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaA0KaW5kZXggN2YwODI3NzA1 YzlhLi5iZjcyYWZiMDM2NGYgMTAwNjQ0DQotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwu aA0KKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgNCkBAIC0yNDcsNCArMjQ3LDEwIEBA IHN0cnVjdCBwcmN0bF9tbV9tYXAgew0KICNkZWZpbmUgUFJfU0VUX0lPX0ZMVVNIRVIJCTU3DQog I2RlZmluZSBQUl9HRVRfSU9fRkxVU0hFUgkJNTgNCiANCisvKiBFbmFibGUgdGFza19pc29sYXRp b24gbW9kZSBmb3IgVEFTS19JU09MQVRJT04ga2VybmVscy4gKi8NCisjZGVmaW5lIFBSX1RBU0tf SVNPTEFUSU9OCQk0OA0KKyMgZGVmaW5lIFBSX1RBU0tfSVNPTEFUSU9OX0VOQUJMRQkoMSA8PCAw KQ0KKyMgZGVmaW5lIFBSX1RBU0tfSVNPTEFUSU9OX1NFVF9TSUcoc2lnKQkoKChzaWcpICYgMHg3 ZikgPDwgOCkNCisjIGRlZmluZSBQUl9UQVNLX0lTT0xBVElPTl9HRVRfU0lHKGJpdHMpCSgoKGJp dHMpID4+IDgpICYgMHg3ZikNCisNCiAjZW5kaWYgLyogX0xJTlVYX1BSQ1RMX0ggKi8NCmRpZmYg LS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcNCmluZGV4IGM5NDQ2OTExY2Y0MS4u ZjcwODU4MGZiNTZkIDEwMDY0NA0KLS0tIGEvaW5pdC9LY29uZmlnDQorKysgYi9pbml0L0tjb25m aWcNCkBAIC02NDgsNiArNjQ4LDMzIEBAIGNvbmZpZyBDUFVfSVNPTEFUSU9ODQogDQogc291cmNl ICJrZXJuZWwvcmN1L0tjb25maWciDQogDQorY29uZmlnIEhBVkVfQVJDSF9UQVNLX0lTT0xBVElP Tg0KKwlib29sDQorDQorY29uZmlnIFRBU0tfSVNPTEFUSU9ODQorCWJvb2wgIlByb3ZpZGUgaGFy ZCBDUFUgaXNvbGF0aW9uIGZyb20gdGhlIGtlcm5lbCBvbiBkZW1hbmQiDQorCWRlcGVuZHMgb24g Tk9fSFpfRlVMTCAmJiBIQVZFX0FSQ0hfVEFTS19JU09MQVRJT04NCisJaGVscA0KKwkgIEFsbG93 IHVzZXJzcGFjZSBwcm9jZXNzZXMgdGhhdCBwbGFjZSB0aGVtc2VsdmVzIG9uIGNvcmVzIHdpdGgN CisJICBub2h6X2Z1bGwgYW5kIGlzb2xjcHVzIGVuYWJsZWQsIGFuZCBydW4gcHJjdGwoUFJfVEFT S19JU09MQVRJT04pLA0KKwkgIHRvICJpc29sYXRlIiB0aGVtc2VsdmVzIGZyb20gdGhlIGtlcm5l bC4gIFByaW9yIHRvIHJldHVybmluZyB0bw0KKwkgIHVzZXJzcGFjZSwgaXNvbGF0ZWQgdGFza3Mg d2lsbCBhcnJhbmdlIHRoYXQgbm8gZnV0dXJlIGtlcm5lbA0KKwkgIGFjdGl2aXR5IHdpbGwgaW50 ZXJydXB0IHRoZSB0YXNrIHdoaWxlIHRoZSB0YXNrIGlzIHJ1bm5pbmcgaW4NCisJICB1c2Vyc3Bh Y2UuICBBdHRlbXB0aW5nIHRvIHJlLWVudGVyIHRoZSBrZXJuZWwgd2hpbGUgaW4gdGhpcyBtb2Rl DQorCSAgd2lsbCBjYXVzZSB0aGUgdGFzayB0byBiZSB0ZXJtaW5hdGVkIHdpdGggYSBzaWduYWw7 IHlvdSBtdXN0DQorCSAgZXhwbGljaXRseSB1c2UgcHJjdGwoKSB0byBkaXNhYmxlIHRhc2sgaXNv bGF0aW9uIGJlZm9yZSByZXN1bWluZw0KKwkgIG5vcm1hbCB1c2Ugb2YgdGhlIGtlcm5lbC4NCisN CisJICBUaGlzICJoYXJkIiBpc29sYXRpb24gZnJvbSB0aGUga2VybmVsIGlzIHJlcXVpcmVkIGZv ciB1c2Vyc3BhY2UNCisJICB0YXNrcyB0aGF0IGFyZSBydW5uaW5nIGhhcmQgcmVhbC10aW1lIHRh c2tzIGluIHVzZXJzcGFjZSwgc3VjaCBhcw0KKwkgIGEgaGlnaC1zcGVlZCBuZXR3b3JrIGRyaXZl ciBpbiB1c2Vyc3BhY2UuICBXaXRob3V0IHRoaXMgb3B0aW9uLCBidXQNCisJICB3aXRoIE5PX0ha X0ZVTEwgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIG1ha2UgYSBiZXN0LWZhaXRoLCAic29mdCIN CisJICBlZmZvcnQgdG8gc2hpZWxkIGEgc2luZ2xlIHVzZXJzcGFjZSBwcm9jZXNzIGZyb20gaW50 ZXJydXB0cywgYnV0DQorCSAgbWFrZXMgbm8gZ3VhcmFudGVlcy4NCisNCisJICBZb3Ugc2hvdWxk IHNheSAiTiIgdW5sZXNzIHlvdSBhcmUgaW50ZW5kaW5nIHRvIHJ1biBhDQorCSAgaGlnaC1wZXJm b3JtYW5jZSB1c2Vyc3BhY2UgZHJpdmVyIG9yIHNpbWlsYXIgdGFzay4NCisNCiBjb25maWcgQlVJ TERfQklOMkMNCiAJYm9vbA0KIAlkZWZhdWx0IG4NCmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZp bGUgYi9rZXJuZWwvTWFrZWZpbGUNCmluZGV4IGFmNjAxYjliZGEwZS4uOGE4YTM2MWRjMWE1IDEw MDY0NA0KLS0tIGEva2VybmVsL01ha2VmaWxlDQorKysgYi9rZXJuZWwvTWFrZWZpbGUNCkBAIC0x MzMsNiArMTMzLDggQEAgS0NPVl9JTlNUUlVNRU5UX3N0YWNrbGVhay5vIDo9IG4NCiANCiBvYmot JChDT05GSUdfU0NGX1RPUlRVUkVfVEVTVCkgKz0gc2NmdG9ydHVyZS5vDQogDQorb2JqLSQoQ09O RklHX1RBU0tfSVNPTEFUSU9OKSArPSBpc29sYXRpb24ubw0KKw0KICQob2JqKS9jb25maWdzLm86 ICQob2JqKS9jb25maWdfZGF0YS5neg0KIA0KIHRhcmdldHMgKz0gY29uZmlnX2RhdGEuZ3oNCmRp ZmYgLS1naXQgYS9rZXJuZWwvaXNvbGF0aW9uLmMgYi9rZXJuZWwvaXNvbGF0aW9uLmMNCm5ldyBm aWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjEyN2IyYTFjYjBjYg0KLS0tIC9k ZXYvbnVsbA0KKysrIGIva2VybmVsL2lzb2xhdGlvbi5jDQpAQCAtMCwwICsxLDcxNCBAQA0KKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCisvKg0KKyAqICBJbXBsZW1l bnRhdGlvbiBvZiB0YXNrIGlzb2xhdGlvbi4NCisgKg0KKyAqIEF1dGhvcnM6DQorICogICBDaHJp cyBNZXRjYWxmIDxjbWV0Y2FsZkBtZWxsYW5veC5jb20+DQorICogICBBbGV4IEJlbGl0cyA8YWJl bGl0c0BtYXJ2ZWxsLmNvbT4NCisgKiAgIFl1cmkgTm9yb3YgPHlub3JvdkBtYXJ2ZWxsLmNvbT4N CisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvbW0uaD4NCisjaW5jbHVkZSA8bGludXgvc3dhcC5o Pg0KKyNpbmNsdWRlIDxsaW51eC92bXN0YXQuaD4NCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4N CisjaW5jbHVkZSA8bGludXgvaXNvbGF0aW9uLmg+DQorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxz Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPg0KKyNpbmNsdWRlIDxsaW51eC90aWNrLmg+DQor I2luY2x1ZGUgPGFzbS91bmlzdGQuaD4NCisjaW5jbHVkZSA8YXNtL3N5c2NhbGwuaD4NCisjaW5j bHVkZSA8bGludXgvaHJ0aW1lci5oPg0KKw0KKy8qDQorICogVGhlc2UgdmFsdWVzIGFyZSBzdG9y ZWQgaW4gdGFza19pc29sYXRpb25fc3RhdGUuDQorICogTm90ZSB0aGF0IFNUQVRFX05PUk1BTCAr IFRJRl9UQVNLX0lTT0xBVElPTiBtZWFucyB3ZSBhcmUgc3RpbGwNCisgKiByZXR1cm5pbmcgZnJv bSBzeXNfcHJjdGwoKSB0byB1c2Vyc3BhY2UuDQorICovDQorZW51bSB7DQorCVNUQVRFX05PUk1B TCA9IDAsCS8qIE5vdCBpc29sYXRlZCAqLw0KKwlTVEFURV9JU09MQVRFRCA9IDEJLyogSW4gdXNl cnNwYWNlLCBpc29sYXRlZCAqLw0KK307DQorDQorLyoNCisgKiBMb3ctbGV2ZWwgaXNvbGF0aW9u IGZsYWdzLg0KKyAqIFRob3NlIGZsYWdzIGFyZSB1c2VkIGJ5IGxvdy1sZXZlbCBpc29sYXRpb24g c2V0L2NsZWFyL2NoZWNrIHJvdXRpbmVzLg0KKyAqIFRob3NlIGZsYWdzIHNob3VsZCBiZSBzZXQg bGFzdCBiZWZvcmUgcmV0dXJuIHRvIHVzZXJzcGFjZSBhbmQgY2xlYXJlZA0KKyAqIGZpcnN0IHVw b24ga2VybmVsIGVudHJ5LCBhbmQgc3luY2hyb25pemVkIHRvIGFsbG93IGlzb2xhdGlvbiBicmVh a2luZw0KKyAqIGRldGVjdGlvbiBiZWZvcmUgdG91Y2hpbmcgcG90ZW50aWFsbHkgdW5zeW5jaHJv bml6ZWQgcGFydHMgb2Yga2VybmVsLg0KKyAqIElzb2xhdGVkIHRhc2sgZG9lcyBub3QgcmVjZWl2 ZSBzeW5jaHJvbml6YXRpb24gZXZlbnRzIG9mIGFueSBraW5kLCBzbw0KKyAqIGF0IHRoZSB0aW1l IG9mIHRoZSBmaXJzdCBlbnRyeSBpbnRvIGtlcm5lbCBpdCBtaWdodCBub3QgYmUgcmVhZHkgdG8N CisgKiBydW4gbW9zdCBvZiB0aGUga2VybmVsIGNvZGUuIEhvd2V2ZXIgdG8gcGVyZm9ybSBzeW5j aHJvbml6YXRpb24NCisgKiBwcm9wZXJseSwga2VybmVsIGVudHJ5IGNvZGUgc2hvdWxkIGFsc28g ZW5hYmxlIHN5bmNocm9uaXphdGlvbiBldmVudHMNCisgKiBhdCB0aGUgc2FtZSB0aW1lLiBUaGlz IHByZXNlbnRzIGEgcHJvYmxlbSBiZWNhdXNlIG1vcmUga2VybmVsIGNvZGUNCisgKiBzaG91bGQg cnVuIHRvIGRldGVybWluZSB0aGUgY2F1c2Ugb2YgaXNvbGF0aW9uIGJyZWFraW5nLCBzaWduYWxz IG1heQ0KKyAqIGhhdmUgdG8gYmUgZ2VuZXJhdGVkLCBldGMuIFNvIHNvbWUgZmxhZyBjbGVhcmlu ZyBhbmQgc3luY2hyb25pemF0aW9uDQorICogc2hvdWxkIGhhcHBlbiBpbiAibG93LWxldmVsIiBl bnRyeSBjb2RlIGJ1dCBwcm9jZXNzaW5nIG9mIGlzb2xhdGlvbg0KKyAqIGJyZWFraW5nIHNob3Vs ZCBoYXBwZW4gaW4gImhpZ2gtbGV2ZWwiIGNvZGUuIExvdy1sZXZlbCBpc29sYXRpb24gZmxhZ3MN CisgKiBzaG91bGQgYmUgc2V0IGluIHRoYXQgbG93LWxldmVsIGNvZGUsIHBvc3NpYmx5IGxvbmcg YmVmb3JlIHRoZSBjYXVzZQ0KKyAqIG9mIGlzb2xhdGlvbiBicmVha2luZyBpcyBrbm93bi4gU3lt bWV0cmljYWxseSwgZW50ZXJpbmcgaXNvbGF0aW9uDQorICogc2hvdWxkIGRpc2FibGUgc3luY2hy b25pemF0aW9uIGV2ZW50cyBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXJzcGFjZQ0KKyAqIGJ1dCBh ZnRlciBhbGwgcG90ZW50aWFsbHkgdm9sYXRpbGUgY29kZSBpcyBmaW5pc2hlZC4NCisgKi8NCitE RUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBsbF9pc29sX2ZsYWdzKTsNCisNCisvKg0KKyAq IERlc2NyaXB0aW9uIG9mIHRoZSBsYXN0IHR3byB0YXNrcyB0aGF0IHJhbiBpc29sYXRlZCBvbiBh IGdpdmVuIENQVS4NCisgKiBUaGlzIGlzIGludGVuZGVkIG9ubHkgZm9yIG1lc3NhZ2VzIGFib3V0 IGlzb2xhdGlvbiBicmVha2luZy4gV2UNCisgKiBkb24ndCB3YW50IGFueSByZWZlcmVuY2VzIHRv IGFjdHVhbCB0YXNrIHdoaWxlIGFjY2Vzc2luZyB0aGlzIGZyb20NCisgKiBDUFUgdGhhdCBjYXVz ZWQgaXNvbGF0aW9uIGJyZWFraW5nIC0tIHdlIGtub3cgbm90aGluZyBhYm91dCB0aW1pbmcNCisg KiBhbmQgZG9uJ3Qgd2FudCB0byB1c2UgbG9ja2luZyBvciBSQ1UuDQorICovDQorc3RydWN0IGlz b2xfdGFza19kZXNjIHsNCisJYXRvbWljX3QgY3Vycl9pbmRleDsNCisJYXRvbWljX3QgY3Vycl9p bmRleF93cjsNCisJYm9vbAl3YXJuZWRbMl07DQorCXBpZF90CXBpZFsyXTsNCisJcGlkX3QJdGdp ZFsyXTsNCisJY2hhcgljb21tWzJdW1RBU0tfQ09NTV9MRU5dOw0KK307DQorc3RhdGljIERFRklO RV9QRVJfQ1BVKHN0cnVjdCBpc29sX3Rhc2tfZGVzYywgaXNvbF90YXNrX2Rlc2NzKTsNCisNCisv Kg0KKyAqIENvdW50ZXIgZm9yIGlzb2xhdGlvbiBleGl0aW5nIHByb2NlZHVyZXMgKGZyb20gcmVx dWVzdCB0byB0aGUgc3RhcnQgb2YNCisgKiBjbGVhbnVwKSBiZWluZyBhdHRlbXB0ZWQgYXQgb25j ZSBvbiBhIENQVS4gTm9ybWFsbHkgaW5jcmVtZW50aW5nIG9mDQorICogdGhpcyBjb3VudGVyIGlz IHBlcmZvcm1lZCBmcm9tIHRoZSBDUFUgdGhhdCBjYXVzZWQgaXNvbGF0aW9uIGJyZWFraW5nLA0K KyAqIGhvd2V2ZXIgZGVjcmVtZW50aW5nIGlzIGRvbmUgZnJvbSB0aGUgY2xlYW51cCBwcm9jZWR1 cmUsIGRlbGVnYXRlZCB0bw0KKyAqIHRoZSBDUFUgdGhhdCBpcyBleGl0aW5nIGlzb2xhdGlvbiwg bm90IGZyb20gdGhlIENQVSB0aGF0IGNhdXNlZCBpc29sYXRpb24NCisgKiBicmVha2luZy4NCisg Kg0KKyAqIElmIGluY3JlbWVudGluZyB0aGlzIGNvdW50ZXIgd2hpbGUgc3RhcnRpbmcgaXNvbGF0 aW9uIGV4aXQgcHJvY2VkdXJlDQorICogcmVzdWx0cyBpbiBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAw LCBpc29sYXRpb24gZXhpdGluZyBpcyBhbHJlYWR5IGluDQorICogcHJvZ3Jlc3MsIGFuZCBjbGVh bnVwIGRpZCBub3Qgc3RhcnQgeWV0LiBUaGlzIG1lYW5zLCBjb3VudGVyIHNob3VsZCBiZQ0KKyAq IGRlY3JlbWVudGVkIGJhY2ssIGFuZCBpc29sYXRpb24gZXhpdCB0aGF0IGlzIGFscmVhZHkgaW4g cHJvZ3Jlc3MsIHNob3VsZA0KKyAqIGJlIGFsbG93ZWQgdG8gY29tcGxldGUuIE90aGVyd2lzZSwg YSBuZXcgaXNvbGF0aW9uIGV4aXQgcHJvY2VkdXJlIHNob3VsZA0KKyAqIGJlIHN0YXJ0ZWQuDQor ICovDQorREVGSU5FX1BFUl9DUFUoYXRvbWljX3QsIGlzb2xfZXhpdF9jb3VudGVyKTsNCisNCisv Kg0KKyAqIERlc2NyaXB0b3IgZm9yIGlzb2xhdGlvbi1icmVha2luZyBTTVAgY2FsbHMNCisgKi8N CitERUZJTkVfUEVSX0NQVShjYWxsX3NpbmdsZV9kYXRhX3QsIGlzb2xfYnJlYWtfY3NkKTsNCisN CitjcHVtYXNrX3Zhcl90IHRhc2tfaXNvbGF0aW9uX21hcDsNCitjcHVtYXNrX3Zhcl90IHRhc2tf aXNvbGF0aW9uX2NsZWFudXBfbWFwOw0KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFza19pc29s YXRpb25fY2xlYW51cF9sb2NrKTsNCisNCisvKiBXZSBjYW4gcnVuIG9uIGNwdXMgdGhhdCBhcmUg aXNvbGF0ZWQgZnJvbSB0aGUgc2NoZWR1bGVyIGFuZCBhcmUgbm9oel9mdWxsLiAqLw0KK3N0YXRp YyBpbnQgX19pbml0IHRhc2tfaXNvbGF0aW9uX2luaXQodm9pZCkNCit7DQorCWFsbG9jX2Jvb3Rt ZW1fY3B1bWFza192YXIoJnRhc2tfaXNvbGF0aW9uX2NsZWFudXBfbWFwKTsNCisJaWYgKGFsbG9j X2NwdW1hc2tfdmFyKCZ0YXNrX2lzb2xhdGlvbl9tYXAsIEdGUF9LRVJORUwpKQ0KKwkJLyoNCisJ CSAqIEF0IHRoaXMgcG9pbnQgdGFzayBpc29sYXRpb24gc2hvdWxkIG1hdGNoDQorCQkgKiBub2h6 X2Z1bGwuIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLg0KKwkJICovDQorCQljcHVtYXNr X2NvcHkodGFza19pc29sYXRpb25fbWFwLCB0aWNrX25vaHpfZnVsbF9tYXNrKTsNCisJcmV0dXJu IDA7DQorfQ0KK2NvcmVfaW5pdGNhbGwodGFza19pc29sYXRpb25faW5pdCkNCisNCisvKiBFbmFi bGUgc3RhY2sgYmFja3RyYWNlcyBvZiBhbnkgaW50ZXJydXB0cyBvZiB0YXNrX2lzb2xhdGlvbiBj b3Jlcy4gKi8NCitzdGF0aWMgYm9vbCB0YXNrX2lzb2xhdGlvbl9kZWJ1ZzsNCitzdGF0aWMgaW50 IF9faW5pdCB0YXNrX2lzb2xhdGlvbl9kZWJ1Z19mdW5jKGNoYXIgKnN0cikNCit7DQorCXRhc2tf aXNvbGF0aW9uX2RlYnVnID0gdHJ1ZTsNCisJcmV0dXJuIDE7DQorfQ0KK19fc2V0dXAoInRhc2tf aXNvbGF0aW9uX2RlYnVnIiwgdGFza19pc29sYXRpb25fZGVidWdfZnVuYyk7DQorDQorLyoNCisg KiBSZWNvcmQgbmFtZSwgcGlkIGFuZCBncm91cCBwaWQgb2YgdGhlIHRhc2sgZW50ZXJpbmcgaXNv bGF0aW9uIG9uDQorICogdGhlIGN1cnJlbnQgQ1BVLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHJlY29y ZF9jdXJyX2lzb2xhdGVkX3Rhc2sodm9pZCkNCit7DQorCWludCBpbmQ7DQorCWludCBjcHUgPSBz bXBfcHJvY2Vzc29yX2lkKCk7DQorCXN0cnVjdCBpc29sX3Rhc2tfZGVzYyAqZGVzYyA9ICZwZXJf Y3B1KGlzb2xfdGFza19kZXNjcywgY3B1KTsNCisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0g Y3VycmVudDsNCisNCisJLyogRmluaXNoIGV2ZXJ5dGhpbmcgYmVmb3JlIHJlY29yZGluZyBjdXJy ZW50IHRhc2sgKi8NCisJc21wX21iKCk7DQorCWluZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkZXNj LT5jdXJyX2luZGV4X3dyKSAmIDE7DQorCWRlc2MtPmNvbW1baW5kXVtzaXplb2YodGFzay0+Y29t bSkgLSAxXSA9ICdcMCc7DQorCW1lbWNweShkZXNjLT5jb21tW2luZF0sIHRhc2stPmNvbW0sIHNp emVvZih0YXNrLT5jb21tKSAtIDEpOw0KKwlkZXNjLT5waWRbaW5kXSA9IHRhc2stPnBpZDsNCisJ ZGVzYy0+dGdpZFtpbmRdID0gdGFzay0+dGdpZDsNCisJZGVzYy0+d2FybmVkW2luZF0gPSBmYWxz ZTsNCisJLyogV3JpdGUgZXZlcnl0aGluZywgdG8gYmUgc2VlbiBieSBvdGhlciBDUFVzICovDQor CXNtcF9tYigpOw0KKwlhdG9taWNfaW5jKCZkZXNjLT5jdXJyX2luZGV4KTsNCisJLyogRXZlcnlv bmUgd2lsbCBzZWUgdGhlIG5ldyByZWNvcmQgZnJvbSB0aGlzIHBvaW50ICovDQorCXNtcF9tYigp Ow0KK30NCisNCisvKg0KKyAqIFByaW50IG1lc3NhZ2UgcHJlZml4ZWQgd2l0aCB0aGUgZGVzY3Jp cHRpb24gb2YgdGhlIGN1cnJlbnQgKG9yDQorICogbGFzdCkgaXNvbGF0ZWQgdGFzayBvbiBhIGdp dmVuIENQVS4gSW50ZW5kZWQgZm9yIGlzb2xhdGlvbiBicmVha2luZw0KKyAqIG1lc3NhZ2VzIHRo YXQgaW5jbHVkZSB0YXJnZXQgdGFzayBmb3IgdGhlIHVzZXIncyBjb252ZW5pZW5jZS4NCisgKg0K KyAqIE1lc3NhZ2VzIHByb2R1Y2VkIHdpdGggdGhpcyBmdW5jdGlvbiBtYXkgaGF2ZSBvYnNvbGV0 ZSB0YXNrDQorICogaW5mb3JtYXRpb24gaWYgaXNvbGF0ZWQgdGFza3MgbWFuYWdlZCB0byBleGl0 LCBzdGFydCBhbmQgZW50ZXINCisgKiBpc29sYXRpb24gbXVsdGlwbGUgdGltZXMsIG9yIG11bHRp cGxlIHRhc2tzIHRyaWVkIHRvIGVudGVyDQorICogaXNvbGF0aW9uIG9uIHRoZSBzYW1lIENQVSBh dCBvbmNlLiBGb3IgdGhvc2UgdW51c3VhbCBjYXNlcyBpdCB3b3VsZA0KKyAqIGNvbnRhaW4gYSB2 YWxpZCBkZXNjcmlwdGlvbiBvZiB0aGUgY2F1c2UgZm9yIGlzb2xhdGlvbiBicmVha2luZyBhbmQN CisgKiB0YXJnZXQgQ1BVIG51bWJlciwganVzdCBub3QgdGhlIGNvcnJlY3QgZGVzY3JpcHRpb24g b2Ygd2hpY2ggdGFzaw0KKyAqIGVuZGVkIHVwIGxvc2luZyBpc29sYXRpb24uDQorICovDQoraW50 IHRhc2tfaXNvbGF0aW9uX21lc3NhZ2UoaW50IGNwdSwgaW50IGxldmVsLCBib29sIHN1cHAsIGNv bnN0IGNoYXIgKmZtdCwgLi4uKQ0KK3sNCisJc3RydWN0IGlzb2xfdGFza19kZXNjICpkZXNjOw0K KwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7DQorCXZhX2xpc3QgYXJnczsNCisJY2hhciBidWZf cHJlZml4W1RBU0tfQ09NTV9MRU4gKyAyMCArIDMgKiAyMF07DQorCWNoYXIgYnVmWzIwMF07DQor CWludCBjdXJyX2NwdSwgaW5kX2NvdW50ZXIsIGluZF9jb3VudGVyX29sZCwgaW5kOw0KKw0KKwlj dXJyX2NwdSA9IGdldF9jcHUoKTsNCisJLyogQmFycmllciB0byBzeW5jaHJvbml6ZSB3aXRoIHJl Y29yZGluZyBpc29sYXRlZCB0YXNrIGluZm9ybWF0aW9uICovDQorCXNtcF9ybWIoKTsNCisJZGVz YyA9ICZwZXJfY3B1KGlzb2xfdGFza19kZXNjcywgY3B1KTsNCisJaW5kX2NvdW50ZXIgPSBhdG9t aWNfcmVhZCgmZGVzYy0+Y3Vycl9pbmRleCk7DQorDQorCWlmIChjdXJyX2NwdSA9PSBjcHUpIHsN CisJCS8qDQorCQkgKiBNZXNzYWdlIGlzIGZvciB0aGUgY3VycmVudCBDUFUgc28gY3VycmVudA0K KwkJICogdGFza19zdHJ1Y3Qgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBjYWNoZWQNCisJCSAq IGluZm9ybWF0aW9uLg0KKwkJICoNCisJCSAqIExpa2UgaW4gb3RoZXIgZGlhZ25vc3RpYyBtZXNz YWdlcywgaWYgaXNzdWVkIGZyb20NCisJCSAqIGludGVycnVwdCBjb250ZXh0LCBjdXJyZW50IHdp bGwgYmUgdGhlIGludGVycnVwdGVkDQorCQkgKiB0YXNrLiBVbmxpa2Ugb3RoZXIgZGlhZ25vc3Rp YyBtZXNzYWdlcywgdGhpcyBpcw0KKwkJICogYWx3YXlzIHJlbGV2YW50IGJlY2F1c2UgdGhlIG1l c3NhZ2UgaXMgYWJvdXQNCisJCSAqIGludGVycnVwdGluZyBhIHRhc2suDQorCQkgKi8NCisJCWlu ZCA9IGluZF9jb3VudGVyICYgMTsNCisJCWlmIChzdXBwICYmIGRlc2MtPndhcm5lZFtpbmRdKSB7 DQorCQkJLyoNCisJCQkgKiBJZiBzdXBwIGlzIHRydWUsIHNraXAgdGhlIG1lc3NhZ2UgaWYgdGhl DQorCQkJICogc2FtZSB0YXNrIHdhcyBtZW50aW9uZWQgaW4gdGhlIG1lc3NhZ2UNCisJCQkgKiBv cmlnaW5hdGVkIG9uIHJlbW90ZSBDUFUsIGFuZCBpdCBkaWQgbm90DQorCQkJICogcmUtZW50ZXIg aXNvbGF0ZWQgc3RhdGUgc2luY2UgdGhlbiAod2FybmVkDQorCQkJICogaXMgdHJ1ZSkuIE9ubHkg bG9jYWwgbWVzc2FnZXMgZm9sbG93aW5nDQorCQkJICogcmVtb3RlIG1lc3NhZ2VzLCBsaWtlbHkg YWJvdXQgdGhlIHNhbWUNCisJCQkgKiBpc29sYXRpb24gYnJlYWtpbmcgZXZlbnQsIGFyZSBza2lw cGVkIHRvDQorCQkJICogYXZvaWQgZHVwbGljYXRpb24uIElmIHJlbW90ZSBjYXVzZSBpcw0KKwkJ CSAqIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgbG9jYWwgb25lIGJlZm9yZQ0KKwkJCSAqIGlz b2xhdGlvbiBpcyBicm9rZW4sIGxvY2FsIGNhdXNlIGlzIHNraXBwZWQNCisJCQkgKiBmcm9tIG1l c3NhZ2VzLg0KKwkJCSAqLw0KKwkJCXB1dF9jcHUoKTsNCisJCQlyZXR1cm4gMDsNCisJCX0NCisJ CXRhc2sgPSBjdXJyZW50Ow0KKwkJc25wcmludGYoYnVmX3ByZWZpeCwgc2l6ZW9mKGJ1Zl9wcmVm aXgpLA0KKwkJCSAiaXNvbGF0aW9uICVzLyVkLyVkIChjcHUgJWQpIiwNCisJCQkgdGFzay0+Y29t bSwgdGFzay0+dGdpZCwgdGFzay0+cGlkLCBjcHUpOw0KKwkJcHV0X2NwdSgpOw0KKwl9IGVsc2Ug ew0KKwkJLyoNCisJCSAqIE1lc3NhZ2UgaXMgZm9yIHJlbW90ZSBDUFUsIHVzZSBjYWNoZWQgaW5m b3JtYXRpb24uDQorCQkgKi8NCisJCXB1dF9jcHUoKTsNCisJCS8qDQorCQkgKiBNYWtlIHN1cmUs IGluZGV4IHJlbWFpbmVkIHVuY2hhbmdlZCB3aGlsZSBkYXRhIHdhcw0KKwkJICogY29waWVkLiBJ ZiBpdCBjaGFuZ2VkLCBkYXRhIHRoYXQgd2FzIGNvcGllZCBtYXkgYmUNCisJCSAqIGluY29uc2lz dGVudCBiZWNhdXNlIHR3byB1cGRhdGVzIGluIGEgc2VxdWVuY2UgY291bGQNCisJCSAqIG92ZXJ3 cml0ZSB0aGUgZGF0YSB3aGlsZSBpdCB3YXMgYmVpbmcgcmVhZC4NCisJCSAqLw0KKwkJZG8gew0K KwkJCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgcmVhZGluZyB1cCB0byBkYXRlIHZhbHVlcyAqLw0KKwkJ CXNtcF9tYigpOw0KKwkJCWluZCA9IGluZF9jb3VudGVyICYgMTsNCisJCQlzbnByaW50ZihidWZf cHJlZml4LCBzaXplb2YoYnVmX3ByZWZpeCksDQorCQkJCSAiaXNvbGF0aW9uICVzLyVkLyVkIChj cHUgJWQpIiwNCisJCQkJIGRlc2MtPmNvbW1baW5kXSwgZGVzYy0+dGdpZFtpbmRdLA0KKwkJCQkg ZGVzYy0+cGlkW2luZF0sIGNwdSk7DQorCQkJZGVzYy0+d2FybmVkW2luZF0gPSB0cnVlOw0KKwkJ CWluZF9jb3VudGVyX29sZCA9IGluZF9jb3VudGVyOw0KKwkJCS8qIFJlY29yZCB0aGUgd2FybmVk IGZsYWcsIHRoZW4gcmUtcmVhZCBkZXNjcmlwdG9yICovDQorCQkJc21wX21iKCk7DQorCQkJaW5k X2NvdW50ZXIgPSBhdG9taWNfcmVhZCgmZGVzYy0+Y3Vycl9pbmRleCk7DQorCQkJLyoNCisJCQkg KiBJZiB0aGUgY291bnRlciBjaGFuZ2VkLCBzb21ldGhpbmcgd2FzIHVwZGF0ZWQsIHNvDQorCQkJ ICogcmVwZWF0IGV2ZXJ5dGhpbmcgdG8gZ2V0IHRoZSBjdXJyZW50IGRhdGENCisJCQkgKi8NCisJ CX0gd2hpbGUgKGluZF9jb3VudGVyICE9IGluZF9jb3VudGVyX29sZCk7DQorCX0NCisNCisJdmFf c3RhcnQoYXJncywgZm10KTsNCisJdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJn cyk7DQorCXZhX2VuZChhcmdzKTsNCisNCisJc3dpdGNoIChsZXZlbCkgew0KKwljYXNlIExPR0xF VkVMX0VNRVJHOg0KKwkJcHJfZW1lcmcoIiVzOiAlcyIsIGJ1Zl9wcmVmaXgsIGJ1Zik7DQorCQli cmVhazsNCisJY2FzZSBMT0dMRVZFTF9BTEVSVDoNCisJCXByX2FsZXJ0KCIlczogJXMiLCBidWZf cHJlZml4LCBidWYpOw0KKwkJYnJlYWs7DQorCWNhc2UgTE9HTEVWRUxfQ1JJVDoNCisJCXByX2Ny aXQoIiVzOiAlcyIsIGJ1Zl9wcmVmaXgsIGJ1Zik7DQorCQlicmVhazsNCisJY2FzZSBMT0dMRVZF TF9FUlI6DQorCQlwcl9lcnIoIiVzOiAlcyIsIGJ1Zl9wcmVmaXgsIGJ1Zik7DQorCQlicmVhazsN CisJY2FzZSBMT0dMRVZFTF9XQVJOSU5HOg0KKwkJcHJfd2FybigiJXM6ICVzIiwgYnVmX3ByZWZp eCwgYnVmKTsNCisJCWJyZWFrOw0KKwljYXNlIExPR0xFVkVMX05PVElDRToNCisJCXByX25vdGlj ZSgiJXM6ICVzIiwgYnVmX3ByZWZpeCwgYnVmKTsNCisJCWJyZWFrOw0KKwljYXNlIExPR0xFVkVM X0lORk86DQorCQlwcl9pbmZvKCIlczogJXMiLCBidWZfcHJlZml4LCBidWYpOw0KKwkJYnJlYWs7 DQorCWNhc2UgTE9HTEVWRUxfREVCVUc6DQorCQlwcl9kZWJ1ZygiJXM6ICVzIiwgYnVmX3ByZWZp eCwgYnVmKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJLyogTm8gbWVzc2FnZSB3aXRob3V0 IGEgdmFsaWQgbGV2ZWwgKi8NCisJCXJldHVybiAwOw0KKwl9DQorCXJldHVybiAxOw0KK30NCisN CisvKg0KKyAqIER1bXAgc3RhY2sgaWYgbmVlZCBiZS4gVGhpcyBjYW4gYmUgaGVscGZ1bCBldmVu IGZyb20gdGhlIGZpbmFsIGV4aXQNCisgKiB0byB1c2VybW9kZSBjb2RlIHNpbmNlIHN0YWNrIHRy YWNlcyBzb21ldGltZXMgY2FycnkgaW5mb3JtYXRpb24gYWJvdXQNCisgKiB3aGF0IHB1dCB5b3Ug aW50byB0aGUga2VybmVsLCBlLmcuIGFuIGludGVycnVwdCBudW1iZXIgZW5jb2RlZCBpbg0KKyAq IHRoZSBpbml0aWFsIGVudHJ5IHN0YWNrIGZyYW1lIHRoYXQgaXMgc3RpbGwgdmlzaWJsZSBhdCBl eGl0IHRpbWUuDQorICovDQorc3RhdGljIHZvaWQgZGVidWdfZHVtcF9zdGFjayh2b2lkKQ0KK3sN CisJaWYgKHRhc2tfaXNvbGF0aW9uX2RlYnVnKQ0KKwkJZHVtcF9zdGFjaygpOw0KK30NCisNCisv Kg0KKyAqIFNldCB0aGUgZmxhZ3Mgd29yZCBidXQgZG9uJ3QgdHJ5IHRvIGFjdHVhbGx5IHN0YXJ0 IHRhc2sgaXNvbGF0aW9uIHlldC4NCisgKiBXZSB3aWxsIHN0YXJ0IGl0IHdoZW4gZW50ZXJpbmcg dXNlciBzcGFjZSBpbiB0YXNrX2lzb2xhdGlvbl9zdGFydCgpLg0KKyAqLw0KK2ludCB0YXNrX2lz b2xhdGlvbl9yZXF1ZXN0KHVuc2lnbmVkIGludCBmbGFncykNCit7DQorCXN0cnVjdCB0YXNrX3N0 cnVjdCAqdGFzayA9IGN1cnJlbnQ7DQorDQorCS8qDQorCSAqIFRoZSB0YXNrIGlzb2xhdGlvbiBm bGFncyBzaG91bGQgYWx3YXlzIGJlIGNsZWFyZWQganVzdCBieQ0KKwkgKiB2aXJ0dWUgb2YgaGF2 aW5nIGVudGVyZWQgdGhlIGtlcm5lbC4NCisJICovDQorCVdBUk5fT05fT05DRSh0ZXN0X3Rza190 aHJlYWRfZmxhZyh0YXNrLCBUSUZfVEFTS19JU09MQVRJT04pKTsNCisJV0FSTl9PTl9PTkNFKHRh c2stPnRhc2tfaXNvbGF0aW9uX2ZsYWdzICE9IDApOw0KKwlXQVJOX09OX09OQ0UodGFzay0+dGFz a19pc29sYXRpb25fc3RhdGUgIT0gU1RBVEVfTk9STUFMKTsNCisNCisJdGFzay0+dGFza19pc29s YXRpb25fZmxhZ3MgPSBmbGFnczsNCisJaWYgKCEodGFzay0+dGFza19pc29sYXRpb25fZmxhZ3Mg JiBQUl9UQVNLX0lTT0xBVElPTl9FTkFCTEUpKQ0KKwkJcmV0dXJuIDA7DQorDQorCS8qIFdlIGFy ZSB0cnlpbmcgdG8gZW5hYmxlIHRhc2sgaXNvbGF0aW9uLiAqLw0KKwlzZXRfdHNrX3RocmVhZF9m bGFnKHRhc2ssIFRJRl9UQVNLX0lTT0xBVElPTik7DQorDQorCS8qDQorCSAqIFNodXQgZG93biB0 aGUgdm1zdGF0IHdvcmtlciBzbyB3ZSdyZSBub3QgaW50ZXJydXB0ZWQgbGF0ZXIuDQorCSAqIFdl IGhhdmUgdG8gdHJ5IHRvIGRvIHRoaXMgaGVyZSAod2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQpIHNp bmNlDQorCSAqIHdlIGFyZSBjYW5jZWxpbmcgZGVsYXllZCB3b3JrIGFuZCB3aWxsIGNhbGwgZmx1 c2hfd29yaygpDQorCSAqICh3aGljaCBlbmFibGVzIGludGVycnVwdHMpIGFuZCBwb3NzaWJseSBz Y2hlZHVsZSgpLg0KKwkgKi8NCisJcXVpZXRfdm1zdGF0X3N5bmMoKTsNCisNCisJLyogV2UgcmV0 dXJuIDAgaGVyZSBidXQgd2UgbWF5IGNoYW5nZSB0aGF0IGluIHRhc2tfaXNvbGF0aW9uX3N0YXJ0 KCkuICovDQorCXJldHVybiAwOw0KK30NCisNCisvKg0KKyAqIFBlcmZvcm0gYWN0aW9ucyB0aGF0 IHNob3VsZCBiZSBkb25lIGltbWVkaWF0ZWx5IG9uIGV4aXQgZnJvbSBpc29sYXRpb24uDQorICov DQorc3RhdGljIHZvaWQgZmFzdF90YXNrX2lzb2xhdGlvbl9jcHVfY2xlYW51cCh2b2lkICppbmZv KQ0KK3sNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisNCisJLyoNCisJICogVGhpcyBmdW5jdGlv biBydW5zIG9uIGEgQ1BVIHRoYXQgcmFuIGlzb2xhdGVkIHRhc2suDQorCSAqIEl0IHNob3VsZCBi ZSBjYWxsZWQgZWl0aGVyIGRpcmVjdGx5IHdoZW4gaXNvbGF0aW9uIGJyZWFraW5nIGlzDQorCSAq IGJlaW5nIHByb2Nlc3NlZCwgb3IgdXNpbmcgSVBJIGZyb20gYW5vdGhlciBDUFUgd2hlbiBpdCBp bnRlbmRzDQorCSAqIHRvIGJyZWFrIGlzb2xhdGlvbiBvbiB0aGUgZ2l2ZW4gQ1BVLg0KKwkgKg0K KwkgKiBXZSBkb24ndCB3YW50IHRoaXMgQ1BVIHJ1bm5pbmcgY29kZSBmcm9tIHRoZSByZXN0IG9m IGtlcm5lbA0KKwkgKiB1bnRpbCBvdGhlciBDUFVzIGtub3cgdGhhdCBpdCBpcyBubyBsb25nZXIg aXNvbGF0ZWQuIEFueQ0KKwkgKiBlbnRyeSBpbnRvIGtlcm5lbCB3aWxsIGNhbGwgdGFza19pc29s YXRpb25fa2VybmVsX2VudGVyKCkNCisJICogYmVmb3JlIGNhbGxpbmcgdGhpcywgc28gdGhpcyB3 aWxsIGJlIGFscmVhZHkgZG9uZSBieQ0KKwkgKiBzZXR0aW5nIHBlci1jcHUgZmxhZ3MgYW5kIHN5 bmNocm9uaXppbmcgaW4gdGhhdCBmdW5jdGlvbi4NCisJICoNCisJICogRm9yIGRldmVsb3BtZW50 IHB1cnBvc2VzIGl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGlmIGl0IHdhcw0KKwkgKiBkb25lLCBi ZWNhdXNlIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCBzb21lIGVudHJ5IHBvaW50cw0KKwkg KiB3ZXJlIGxlZnQgdW5ndWFyZGVkLiBUaGF0IHdvdWxkIGJlIGNsZWFybHkgYSBidWcgYmVjYXVz ZSBpdA0KKwkgKiB3aWxsIG1lYW4gdGhhdCByZWd1bGFyIGtlcm5lbCBjb2RlIGlzIHJ1bm5pbmcg d2l0aCBubw0KKwkgKiBzeW5jaHJvbml6YXRpb24uDQorCSAqLw0KKwlsb2NhbF9pcnFfc2F2ZShm bGFncyk7DQorCWF0b21pY19kZWMoJnBlcl9jcHUoaXNvbF9leGl0X2NvdW50ZXIsIHNtcF9wcm9j ZXNzb3JfaWQoKSkpOw0KKwkvKiBCYXJyaWVyIHRvIHN5bmMgd2l0aCByZXF1ZXN0aW5nIGEgdGFz ayBpc29sYXRpb24gYnJlYWtpbmcgKi8NCisJc21wX21iX19hZnRlcl9hdG9taWMoKTsNCisJLyoN CisJICogQXQgdGhpcyBwb2ludCBicmVha2luZyBpc29sYXRpb24gd2lsbCBiZSB0cmVhdGVkIGFz IGENCisJICogc2VwYXJhdGUgaXNvbGF0aW9uLWJyZWFraW5nIGV2ZW50LCBob3dldmVyIGludGVy cnVwdHMgd29uJ3QNCisJICogYXJyaXZlIHVudGlsIGxvY2FsX2lycV9yZXN0b3JlKCkNCisJICov DQorDQorCS8qDQorCSAqIENoZWNrIGZvciB0aGUgYWJvdmUgbWVudGlvbmVkIGVudHJ5IHdpdGhv dXQgYSBjYWxsIHRvDQorCSAqIHRhc2tfaXNvbGF0aW9uX2tlcm5lbF9lbnRlcigpDQorCSAqLw0K KwlpZiAoKHRoaXNfY3B1X3JlYWQobGxfaXNvbF9mbGFncykgJiBGTEFHX0xMX1RBU0tfSVNPTEFU SU9OKSkgew0KKwkJLyoNCisJCSAqIElmIGl0IGRpZCBoYXBwZW4sIGNhbGwgdGhlIGZ1bmN0aW9u IGhlcmUsIHRvDQorCQkgKiBwcmV2ZW50IGZ1cnRoZXIgcHJvYmxlbXMgZnJvbSBydW5uaW5nIGlu DQorCQkgKiB1bi1zeW5jaHJvbml6ZWQgc3RhdGUNCisJCSAqLw0KKwkJdGFza19pc29sYXRpb25f a2VybmVsX2VudGVyKCk7DQorCQkvKiBSZXBvcnQgdGhlIHByb2JsZW0gKi8NCisJCXByX3Rhc2tf aXNvbF9lbWVyZyhzbXBfcHJvY2Vzc29yX2lkKCksDQorCQkiSXNvbGF0aW9uIGJyZWFraW5nIHdh cyBub3QgZGV0ZWN0ZWQgb24ga2VybmVsIGVudHJ5XG4iKTsNCisJfQ0KKwkvKg0KKwkgKiBUaGlz IHRhc2sgaXMgbm8gbG9uZ2VyIGlzb2xhdGVkIChhbmQgaWYgYnkgYW55IGNoYW5jZSB0aGlzDQor CSAqIGlzIHRoZSB3cm9uZyB0YXNrLCBpdCdzIGFscmVhZHkgbm90IGlzb2xhdGVkKQ0KKwkgKi8N CisJY3VycmVudC0+dGFza19pc29sYXRpb25fZmxhZ3MgPSAwOw0KKwljbGVhcl90c2tfdGhyZWFk X2ZsYWcoY3VycmVudCwgVElGX1RBU0tfSVNPTEFUSU9OKTsNCisNCisJLyogUnVuIHRoZSByZXN0 IG9mIGNsZWFudXAgbGF0ZXIgKi8NCisJc2V0X3Rza190aHJlYWRfZmxhZyhjdXJyZW50LCBUSUZf Tk9USUZZX1JFU1VNRSk7DQorDQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsNCit9DQorDQor LyogRGlzYWJsZSB0YXNrIGlzb2xhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCB0YXNrLiAqLw0KK3N0 YXRpYyB2b2lkIHN0b3BfaXNvbGF0aW9uKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkNCit7DQorCWlu dCBjcHUsIHRoaXNfY3B1Ow0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKw0KKwl0aGlzX2NwdSA9 IGdldF9jcHUoKTsNCisJY3B1ID0gdGFza19jcHUocCk7DQorCWlmIChhdG9taWNfaW5jX3JldHVy bigmcGVyX2NwdShpc29sX2V4aXRfY291bnRlciwgY3B1KSkgPiAxKSB7DQorCQkvKiBBbHJlYWR5 IGV4aXRpbmcgaXNvbGF0aW9uICovDQorCQlhdG9taWNfZGVjKCZwZXJfY3B1KGlzb2xfZXhpdF9j b3VudGVyLCBjcHUpKTsNCisJCXB1dF9jcHUoKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlpZiAo cCA9PSBjdXJyZW50KSB7DQorCQlwLT50YXNrX2lzb2xhdGlvbl9zdGF0ZSA9IFNUQVRFX05PUk1B TDsNCisJCWZhc3RfdGFza19pc29sYXRpb25fY3B1X2NsZWFudXAoTlVMTCk7DQorCQl0YXNrX2lz b2xhdGlvbl9jcHVfY2xlYW51cCgpOw0KKwkJcHV0X2NwdSgpOw0KKwl9IGVsc2Ugew0KKwkJLyoN CisJCSAqIFNjaGVkdWxlICJzbG93IiBjbGVhbnVwLiBUaGlzIHJlbGllcyBvbg0KKwkJICogVElG X05PVElGWV9SRVNVTUUgYmVpbmcgc2V0DQorCQkgKi8NCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0 YXNrX2lzb2xhdGlvbl9jbGVhbnVwX2xvY2ssIGZsYWdzKTsNCisJCWNwdW1hc2tfc2V0X2NwdShj cHUsIHRhc2tfaXNvbGF0aW9uX2NsZWFudXBfbWFwKTsNCisJCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnRhc2tfaXNvbGF0aW9uX2NsZWFudXBfbG9jaywgZmxhZ3MpOw0KKwkJLyoNCisJCSAqIFNl dHRpbmcgZmxhZ3MgaXMgZGVsZWdhdGVkIHRvIHRoZSBDUFUgd2hlcmUNCisJCSAqIGlzb2xhdGVk IHRhc2sgaXMgcnVubmluZw0KKwkJICogaXNvbF9leGl0X2NvdW50ZXIgd2lsbCBiZSBkZWNyZW1l bnRlZCBmcm9tIHRoZXJlIGFzIHdlbGwuDQorCQkgKi8NCisJCXBlcl9jcHUoaXNvbF9icmVha19j c2QsIGNwdSkuZnVuYyA9DQorCQkgICAgZmFzdF90YXNrX2lzb2xhdGlvbl9jcHVfY2xlYW51cDsN CisJCXBlcl9jcHUoaXNvbF9icmVha19jc2QsIGNwdSkuaW5mbyA9IE5VTEw7DQorCQlwZXJfY3B1 KGlzb2xfYnJlYWtfY3NkLCBjcHUpLmZsYWdzID0gMDsNCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3Np bmdsZV9hc3luYyhjcHUsDQorCQkJCQkgICAgICAgJnBlcl9jcHUoaXNvbF9icmVha19jc2QsIGNw dSkpOw0KKwkJcHV0X2NwdSgpOw0KKwl9DQorfQ0KKw0KKy8qDQorICogVGhpcyBjb2RlIHJ1bnMg d2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIGp1c3QgYmVmb3JlIHRoZSByZXR1cm4gdG8NCisgKiB1 c2Vyc3BhY2UsIGFmdGVyIGEgcHJjdGwoKSBoYXMgcmVxdWVzdGVkIGVuYWJsaW5nIHRhc2sgaXNv bGF0aW9uLg0KKyAqIFdlIHRha2Ugd2hhdGV2ZXIgc3RlcHMgYXJlIG5lZWRlZCB0byBhdm9pZCBi ZWluZyBpbnRlcnJ1cHRlZCBsYXRlcjoNCisgKiBkcmFpbiB0aGUgbHJ1IHBhZ2VzLCBzdG9wIHRo ZSBzY2hlZHVsZXIgdGljaywgZXRjLiBNb3JlDQorICogZnVuY3Rpb25hbGl0eSBtYXkgYmUgYWRk ZWQgaGVyZSBsYXRlciB0byBhdm9pZCBvdGhlciB0eXBlcyBvZg0KKyAqIGludGVycnVwdHMgZnJv bSBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gVGhpcywgaG93ZXZlciwgbWF5IHN0aWxsIG5vdA0K KyAqIGhhdmUgdGhlIGludGVuZGVkIHJlc3VsdCwgc28gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSB0 YWtlcyBpbnRvIGFjY291bnQNCisgKiB0aGUgcG9zc2liaWxpdHkgb2YgcmVjZWl2aW5nIGFuIGlu dGVycnVwdCBhbmQgaXNvbGF0aW9uIGJyZWFraW5nIGxhdGVyLg0KKyAqDQorICogSWYgd2UgY2Fu J3QgZW5hYmxlIHRhc2sgaXNvbGF0aW9uLCB3ZSB1cGRhdGUgdGhlIHN5c2NhbGwgcmV0dXJuDQor ICogdmFsdWUgd2l0aCBhbiBhcHByb3ByaWF0ZSBlcnJvci4NCisgKg0KKyAqIFRoaXMsIGhvd2V2 ZXIsIGRvZXMgbm90IGVuYWJsZSBpc29sYXRpb24geWV0LCBhcyBmYXIgYXMgbG93LWxldmVsDQor ICogZmxhZ3MgYXJlIGNvbmNlcm5lZC4gU28gaWYgaW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQs IGl0J3Mgc3RpbGwNCisgKiBwb3NzaWJsZSBmb3IgdGhlIHRhc2sgdG8gYmUgaW50ZXJydXB0ZWQu IFRoZSBjYWxsIHRvDQorICogdGFza19pc29sYXRpb25fZXhpdF90b191c2VyX21vZGUoKSBzaG91 bGQgZmluYWxseSBlbmFibGUgdGFzaw0KKyAqIGlzb2xhdGlvbiBhZnRlciB0aGlzIGZ1bmN0aW9u IHNldCBGTEFHX0xMX1RBU0tfSVNPTEFUSU9OX1JFUVVFU1QuDQorICovDQordm9pZCB0YXNrX2lz b2xhdGlvbl9zdGFydCh2b2lkKQ0KK3sNCisJaW50IGVycm9yOw0KKwl1bnNpZ25lZCBsb25nIGZs YWdzOw0KKw0KKwkvKg0KKwkgKiBXZSBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gU1RBVEVfTk9S TUFMIChpc29sYXRpb24NCisJICogZGlzYWJsZWQpLCBvbiBvdXIgd2F5IG91dCBvZiB0aGUga2Vy bmVsIGZyb20gdGhlIHByY3RsKCkNCisJICogdGhhdCB0dXJuZWQgaXQgb24uICBJZiB3ZSBhcmUg ZXhpdGluZyBmcm9tIHRoZSBrZXJuZWwgaW4NCisJICogYW5vdGhlciBzdGF0ZSwgaXQgbWVhbnMg d2UgbWFkZSBpdCBiYWNrIGludG8gdGhlIGtlcm5lbA0KKwkgKiB3aXRob3V0IGRpc2FibGluZyB0 YXNrIGlzb2xhdGlvbiwgYW5kIHdlIHNob3VsZCBpbnZlc3RpZ2F0ZQ0KKwkgKiBob3cgKGFuZCBp biBhbnkgY2FzZSBkaXNhYmxlIHRhc2sgaXNvbGF0aW9uIGF0IHRoaXMNCisJICogcG9pbnQpLiBX ZSBhcmUgY2xlYXJseSBub3Qgb24gdGhlIHBhdGggYmFjayBmcm9tIHRoZQ0KKwkgKiBwcmN0bCgp IHNvIHdlIGRvbid0IHRvdWNoIHRoZSBzeXNjYWxsIHJldHVybiB2YWx1ZS4NCisJICovDQorCWlm IChXQVJOX09OX09OQ0UoY3VycmVudC0+dGFza19pc29sYXRpb25fc3RhdGUgIT0gU1RBVEVfTk9S TUFMKSkgew0KKwkJc3RvcF9pc29sYXRpb24oY3VycmVudCk7DQorCQkvKiBSZXBvcnQgdGhlIHBy b2JsZW0gKi8NCisJCXByX3Rhc2tfaXNvbF9lbWVyZyhzbXBfcHJvY2Vzc29yX2lkKCksDQorCQki SXNvbGF0aW9uIHN0YXJ0IHJlcXVlc3RlZCB3aGlsZSBub3QgaW4gdGhlIG5vcm1hbCBzdGF0ZVxu Iik7DQorCQlyZXR1cm47DQorCX0NCisNCisJLyoNCisJICogTXVzdCBiZSBhZmZpbml0aXplZCB0 byBhIHNpbmdsZSBjb3JlIHdpdGggdGFzayBpc29sYXRpb24gcG9zc2libGUuDQorCSAqIEluIHBy aW5jaXBsZSB0aGlzIGNvdWxkIGJlIHJlbW90ZWx5IG1vZGlmaWVkIGJldHdlZW4gdGhlIHByY3Rs KCkNCisJICogYW5kIHRoZSByZXR1cm4gdG8gdXNlcnNwYWNlLCBzbyB3ZSBoYXZlIHRvIGNoZWNr IGl0IGhlcmUuDQorCSAqLw0KKwlpZiAoY3VycmVudC0+bnJfY3B1c19hbGxvd2VkICE9IDEgfHwN CisJICAgICFpc19pc29sYXRpb25fY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkpIHsNCisJCWVycm9y ID0gLUVJTlZBTDsNCisJCWdvdG8gZXJyb3I7DQorCX0NCisNCisJLyogSWYgdGhlIHZtc3RhdCBk ZWxheWVkIHdvcmsgaXMgbm90IGNhbmNlbGVkLCB3ZSBoYXZlIHRvIHRyeSBhZ2Fpbi4gKi8NCisJ aWYgKCF2bXN0YXRfaWRsZSgpKSB7DQorCQllcnJvciA9IC1FQUdBSU47DQorCQlnb3RvIGVycm9y Ow0KKwl9DQorDQorCS8qIFRyeSB0byBzdG9wIHRoZSBkeW5hbWljIHRpY2suICovDQorCWVycm9y ID0gdHJ5X3N0b3BfZnVsbF90aWNrKCk7DQorCWlmIChlcnJvcikNCisJCWdvdG8gZXJyb3I7DQor DQorCS8qIERyYWluIHRoZSBwYWdldmVjcyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBJUEkgZmx1c2hl cyBsYXRlci4gKi8NCisJbHJ1X2FkZF9kcmFpbigpOw0KKw0KKwlsb2NhbF9pcnFfc2F2ZShmbGFn cyk7DQorDQorCS8qIFJlY29yZCBpc29sYXRlZCB0YXNrIElEcyBhbmQgbmFtZSAqLw0KKwlyZWNv cmRfY3Vycl9pc29sYXRlZF90YXNrKCk7DQorDQorCWN1cnJlbnQtPnRhc2tfaXNvbGF0aW9uX3N0 YXRlID0gU1RBVEVfSVNPTEFURUQ7DQorCXRoaXNfY3B1X3dyaXRlKGxsX2lzb2xfZmxhZ3MsIEZM QUdfTExfVEFTS19JU09MQVRJT05fUkVRVUVTVCk7DQorCS8qIEJhcnJpZXIgdG8gc3luY2hyb25p emUgd2l0aCByZWFkaW5nIG9mIGZsYWdzICovDQorCXNtcF9tYigpOw0KKwlsb2NhbF9pcnFfcmVz dG9yZShmbGFncyk7DQorCXJldHVybjsNCisNCitlcnJvcjoNCisJc3RvcF9pc29sYXRpb24oY3Vy cmVudCk7DQorCXN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShjdXJyZW50LCBjdXJyZW50X3B0X3Jl Z3MoKSwgZXJyb3IsIDApOw0KK30NCisNCisvKiBTdG9wIHRhc2sgaXNvbGF0aW9uIG9uIHRoZSBy ZW1vdGUgdGFzayBhbmQgc2VuZCBpdCBhIHNpZ25hbC4gKi8NCitzdGF0aWMgdm9pZCBzZW5kX2lz b2xhdGlvbl9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQ0KK3sNCisJaW50IGZsYWdz ID0gdGFzay0+dGFza19pc29sYXRpb25fZmxhZ3M7DQorCWtlcm5lbF9zaWdpbmZvX3QgaW5mbyA9 IHsNCisJCS5zaV9zaWdubyA9IFBSX1RBU0tfSVNPTEFUSU9OX0dFVF9TSUcoZmxhZ3MpID86IFNJ R0tJTEwsDQorCX07DQorDQorCWlmICgoZmxhZ3MgJiBQUl9UQVNLX0lTT0xBVElPTl9FTkFCTEUp ID09IDApDQorCQlyZXR1cm47DQorDQorCXN0b3BfaXNvbGF0aW9uKHRhc2spOw0KKwlzZW5kX3Np Z19pbmZvKGluZm8uc2lfc2lnbm8sICZpbmZvLCB0YXNrKTsNCit9DQorDQorLyogT25seSBhIGZl dyBzeXNjYWxscyBhcmUgdmFsaWQgb25jZSB3ZSBhcmUgaW4gdGFzayBpc29sYXRpb24gbW9kZS4g Ki8NCitzdGF0aWMgYm9vbCBpc19hY2NlcHRhYmxlX3N5c2NhbGwoaW50IHN5c2NhbGwpDQorew0K KwkvKiBObyBuZWVkIHRvIGluY3VyIGFuIGlzb2xhdGlvbiBzaWduYWwgaWYgd2UgYXJlIGp1c3Qg ZXhpdGluZy4gKi8NCisJaWYgKHN5c2NhbGwgPT0gX19OUl9leGl0IHx8IHN5c2NhbGwgPT0gX19O Ul9leGl0X2dyb3VwKQ0KKwkJcmV0dXJuIHRydWU7DQorDQorCS8qIENoZWNrIHRvIHNlZSBpZiBp dCdzIHRoZSBwcmN0bCBmb3IgaXNvbGF0aW9uLiAqLw0KKwlpZiAoc3lzY2FsbCA9PSBfX05SX3By Y3RsKSB7DQorCQl1bnNpZ25lZCBsb25nIGFyZ1tTWVNDQUxMX01BWF9BUkdTXTsNCisNCisJCXN5 c2NhbGxfZ2V0X2FyZ3VtZW50cyhjdXJyZW50LCBjdXJyZW50X3B0X3JlZ3MoKSwgYXJnKTsNCisJ CWlmIChhcmdbMF0gPT0gUFJfVEFTS19JU09MQVRJT04pDQorCQkJcmV0dXJuIHRydWU7DQorCX0N CisNCisJcmV0dXJuIGZhbHNlOw0KK30NCisNCisvKg0KKyAqIFRoaXMgcm91dGluZSBpcyBjYWxs ZWQgZnJvbSBzeXNjYWxsIGVudHJ5LCBwcmV2ZW50cyBtb3N0IHN5c2NhbGxzDQorICogZnJvbSBl eGVjdXRpbmcsIGFuZCBpZiBuZWVkZWQgcmFpc2VzIGEgc2lnbmFsIHRvIG5vdGlmeSB0aGUgcHJv Y2Vzcy4NCisgKg0KKyAqIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIHN0b3AgaXNvbGF0aW9uIGJlZm9y ZSB3ZSBldmVuIHByaW50IGEgbWVzc2FnZQ0KKyAqIGhlcmUsIHNpbmNlIG90aGVyd2lzZSB3ZSBt aWdodCBlbmQgdXAgcmVwb3J0aW5nIGFuIGludGVycnVwdCBkdWUgdG8NCisgKiBraWNraW5nIHRo ZSBwcmludGsgaGFuZGxpbmcgY29kZSwgcmF0aGVyIHRoYW4gcmVwb3J0aW5nIHRoZSB0cnVlDQor ICogY2F1c2Ugb2YgaW50ZXJydXB0IGhlcmUuDQorICoNCisgKiBUaGUgbWVzc2FnZSBpcyBub3Qg c3VwcHJlc3NlZCBieSBwcmV2aW91cyByZW1vdGVseSB0cmlnZ2VyZWQNCisgKiBtZXNzYWdlcy4N CisgKi8NCitpbnQgdGFza19pc29sYXRpb25fc3lzY2FsbChpbnQgc3lzY2FsbCkNCit7DQorCXN0 cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN1cnJlbnQ7DQorDQorCS8qDQorCSAqIENoZWNrIGlm IGJ5IGFueSBjaGFuY2Ugc3lzY2FsbCBpcyBiZWluZyBwcm9jZXNzZWQgZnJvbQ0KKwkgKiBpc29s YXRlZCBzdGF0ZSB3aXRob3V0IGEgY2FsbCB0bw0KKwkgKiB0YXNrX2lzb2xhdGlvbl9rZXJuZWxf ZW50ZXIoKSBoYXBwZW5pbmcgb24gZW50cnkNCisJICovDQorCWlmICgodGhpc19jcHVfcmVhZChs bF9pc29sX2ZsYWdzKSAmIEZMQUdfTExfVEFTS19JU09MQVRJT04pKSB7DQorCQkvKg0KKwkJICog SWYgaXQgZGlkIGhhcHBlbiwgY2FsbCB0aGUgZnVuY3Rpb24gaGVyZSwgdG8NCisJCSAqIHByZXZl bnQgZnVydGhlciBwcm9ibGVtcyBmcm9tIHJ1bm5pbmcgaW4NCisJCSAqIHVuLXN5bmNocm9uaXpl ZCBzdGF0ZQ0KKwkJICovDQorCQl0YXNrX2lzb2xhdGlvbl9rZXJuZWxfZW50ZXIoKTsNCisJCS8q IFJlcG9ydCB0aGUgcHJvYmxlbSAqLw0KKwkJcHJfdGFza19pc29sX2VtZXJnKHNtcF9wcm9jZXNz b3JfaWQoKSwNCisJCQkiSXNvbGF0aW9uIGJyZWFraW5nIHdhcyBub3QgZGV0ZWN0ZWQgb24gc3lz Y2FsbFxuIik7DQorCQl9DQorCS8qDQorCSAqIENsZWFyIGxvdy1sZXZlbCBpc29sYXRpb24gZmxh Z3MgdG8gYXZvaWQgdHJpZ2dlcmluZw0KKwkgKiBhIHNpZ25hbCBvbiByZXR1cm4gdG8gdXNlcnNw YWNlDQorCSAqLw0KKwl0aGlzX2NwdV93cml0ZShsbF9pc29sX2ZsYWdzLCAwKTsNCisNCisJaWYg KGlzX2FjY2VwdGFibGVfc3lzY2FsbChzeXNjYWxsKSkgew0KKwkJc3RvcF9pc29sYXRpb24odGFz ayk7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwlzZW5kX2lzb2xhdGlvbl9zaWduYWwodGFzayk7 DQorDQorCXByX3Rhc2tfaXNvbF93YXJuKHNtcF9wcm9jZXNzb3JfaWQoKSwNCisJCQkgICJ0YXNr X2lzb2xhdGlvbiBsb3N0IGR1ZSB0byBzeXNjYWxsICVkXG4iLA0KKwkJCSAgc3lzY2FsbCk7DQor CWRlYnVnX2R1bXBfc3RhY2soKTsNCisNCisJc3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKHRhc2ss IGN1cnJlbnRfcHRfcmVncygpLCAtRVJFU1RBUlROT0lOVFIsIC0xKTsNCisJcmV0dXJuIC0xOw0K K30NCisNCisvKg0KKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSB0aGUgY29kZSByZXNw b25zaWJsZSBmb3IgZXhpdGluZyB0byB1c2VyIG1vZGUsDQorICogYmVmb3JlIHRoZSBwb2ludCB3 aGVuIHRocmVhZCBmbGFncyBhcmUgY2hlY2tlZCBmb3IgcGVuZGluZyB3b3JrLg0KKyAqIFRoYXQg ZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBpc29sYXRlZCwg YmVjYXVzZQ0KKyAqIFRJRl9UQVNLX0lTT0xBVElPTiBtdXN0IHRyaWdnZXIgYSBjYWxsIHRvIGl0 Lg0KKyAqLw0KK3ZvaWQgdGFza19pc29sYXRpb25fYmVmb3JlX3BlbmRpbmdfd29ya19jaGVjayh2 b2lkKQ0KK3sNCisJaW50IGNwdTsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisNCisJLyogSGFu ZGxlIGlzb2xhdGlvbiBicmVha2luZyAqLw0KKwlpZiAoKGN1cnJlbnQtPnRhc2tfaXNvbGF0aW9u X3N0YXRlICE9IFNUQVRFX05PUk1BTCkNCisJICAgICYmICgodGhpc19jcHVfcmVhZChsbF9pc29s X2ZsYWdzKSAmIEZMQUdfTExfVEFTS19JU09MQVRJT05fQlJPS0VOKQ0KKwkgICAgICAgICE9IDAp KSB7DQorCQkvKg0KKwkJICogQ2xlYXIgbG93LWxldmVsIGlzb2xhdGlvbiBmbGFncyB0byBhdm9p ZCB0cmlnZ2VyaW5nDQorCQkgKiBhIHNpZ25hbCBhZ2Fpbg0KKwkJICovDQorCQl0aGlzX2NwdV93 cml0ZShsbF9pc29sX2ZsYWdzLCAwKTsNCisJCS8qIFNlbmQgc2lnbmFsIHRvIG5vdGlmeSBhYm91 dCBpc29sYXRpb24gYnJlYWtpbmcgKi8NCisJCXNlbmRfaXNvbGF0aW9uX3NpZ25hbChjdXJyZW50 KTsNCisJCS8qIFByb2R1Y2UgZ2VuZXJpYyBtZXNzYWdlIGFib3V0IGxvc3QgaXNvbGF0aW9uICov DQorCQlwcl90YXNrX2lzb2xfd2FybihzbXBfcHJvY2Vzc29yX2lkKCksICJ0YXNrX2lzb2xhdGlv biBsb3N0XG4iKTsNCisJCWRlYnVnX2R1bXBfc3RhY2soKTsNCisJfQ0KKw0KKwkvKg0KKwkgKiBJ ZiB0aGlzIENQVSBpcyBpbiB0aGUgbWFwIG9mIENQVXMgd2l0aCBjbGVhbnVwIHBlbmRpbmcsDQor CSAqIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAgYW5kIGNhbGwgY2xlYW51cA0KKwkgKi8NCisJc3Bp bl9sb2NrX2lycXNhdmUoJnRhc2tfaXNvbGF0aW9uX2NsZWFudXBfbG9jaywgZmxhZ3MpOw0KKw0K KwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7DQorDQorCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNw dSwgdGFza19pc29sYXRpb25fY2xlYW51cF9tYXApKSB7DQorCQljcHVtYXNrX2NsZWFyX2NwdShj cHUsIHRhc2tfaXNvbGF0aW9uX2NsZWFudXBfbWFwKTsNCisJCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnRhc2tfaXNvbGF0aW9uX2NsZWFudXBfbG9jaywgZmxhZ3MpOw0KKwkJdGFza19pc29sYXRp b25fY3B1X2NsZWFudXAoKTsNCisJfSBlbHNlDQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0 YXNrX2lzb2xhdGlvbl9jbGVhbnVwX2xvY2ssIGZsYWdzKTsNCit9DQorDQorLyoNCisgKiBDYWxs ZWQgYmVmb3JlIHdlIHdha2UgdXAgYSB0YXNrIHRoYXQgaGFzIGEgc2lnbmFsIHRvIHByb2Nlc3Mu DQorICogTmVlZHMgdG8gYmUgZG9uZSB0byBoYW5kbGUgaW50ZXJydXB0cyB0aGF0IHRyaWdnZXIg c2lnbmFscywgd2hpY2gNCisgKiB3ZSBkb24ndCBjYXRjaCB3aXRoIHRhc2tfaXNvbGF0aW9uX2lu dGVycnVwdCgpIGhvb2tzLg0KKyAqDQorICogVGhpcyBtZXNzYWdlIGlzIGFsc28gc3VwcHJlc3Nl ZCBpZiB0aGVyZSB3YXMgYWxyZWFkeSBhIHJlbW90ZWx5DQorICogY2F1c2VkIG1lc3NhZ2UgYWJv dXQgdGhlIHNhbWUgaXNvbGF0aW9uIGJyZWFraW5nIGV2ZW50Lg0KKyAqLw0KK3ZvaWQgX3Rhc2tf aXNvbGF0aW9uX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spDQorew0KKwlzdHJ1Y3Qg aXNvbF90YXNrX2Rlc2MgKmRlc2M7DQorCWludCBpbmQsIGNwdTsNCisJYm9vbCBkb193YXJuID0g KHRhc2stPnRhc2tfaXNvbGF0aW9uX3N0YXRlID09IFNUQVRFX0lTT0xBVEVEKTsNCisNCisJY3B1 ID0gdGFza19jcHUodGFzayk7DQorCWRlc2MgPSAmcGVyX2NwdShpc29sX3Rhc2tfZGVzY3MsIGNw dSk7DQorCWluZCA9IGF0b21pY19yZWFkKCZkZXNjLT5jdXJyX2luZGV4KSAmIDE7DQorCWlmIChk ZXNjLT53YXJuZWRbaW5kXSkNCisJCWRvX3dhcm4gPSBmYWxzZTsNCisNCisJc3RvcF9pc29sYXRp b24odGFzayk7DQorDQorCWlmIChkb193YXJuKSB7DQorCQlwcl93YXJuKCJpc29sYXRpb246ICVz LyVkLyVkIChjcHUgJWQpOiB0YXNrX2lzb2xhdGlvbiBsb3N0IGR1ZSB0byBzaWduYWxcbiIsDQor CQkJdGFzay0+Y29tbSwgdGFzay0+dGdpZCwgdGFzay0+cGlkLCBjcHUpOw0KKwkJZGVidWdfZHVt cF9zdGFjaygpOw0KKwl9DQorfQ0KKw0KKy8qDQorICogU2V0IENQVXMgY3VycmVudGx5IHJ1bm5p bmcgaXNvbGF0ZWQgdGFza3MgaW4gQ1BVIG1hc2suDQorICovDQordm9pZCB0YXNrX2lzb2xhdGlv bl9jcHVtYXNrKHN0cnVjdCBjcHVtYXNrICptYXNrKQ0KK3sNCisJaW50IGNwdTsNCisNCisJaWYg KHRhc2tfaXNvbGF0aW9uX21hcCA9PSBOVUxMKQ0KKwkJcmV0dXJuOw0KKw0KKwkvKiBCYXJyaWVy IHRvIHN5bmNocm9uaXplIHdpdGggd3JpdGluZyB0YXNrIGlzb2xhdGlvbiBmbGFncyAqLw0KKwlz bXBfcm1iKCk7DQorCWZvcl9lYWNoX2NwdShjcHUsIHRhc2tfaXNvbGF0aW9uX21hcCkNCisJCWlm ICh0YXNrX2lzb2xhdGlvbl9vbl9jcHUoY3B1KSkNCisJCQljcHVtYXNrX3NldF9jcHUoY3B1LCBt YXNrKTsNCit9DQorDQorLyoNCisgKiBDbGVhciBDUFVzIGN1cnJlbnRseSBydW5uaW5nIGlzb2xh dGVkIHRhc2tzIGluIENQVSBtYXNrLg0KKyAqLw0KK3ZvaWQgdGFza19pc29sYXRpb25fY2xlYXJf Y3B1bWFzayhzdHJ1Y3QgY3B1bWFzayAqbWFzaykNCit7DQorCWludCBjcHU7DQorDQorCWlmICh0 YXNrX2lzb2xhdGlvbl9tYXAgPT0gTlVMTCkNCisJCXJldHVybjsNCisNCisJLyogQmFycmllciB0 byBzeW5jaHJvbml6ZSB3aXRoIHdyaXRpbmcgdGFzayBpc29sYXRpb24gZmxhZ3MgKi8NCisJc21w X3JtYigpOw0KKwlmb3JfZWFjaF9jcHUoY3B1LCB0YXNrX2lzb2xhdGlvbl9tYXApDQorCQlpZiAo dGFza19pc29sYXRpb25fb25fY3B1KGNwdSkpDQorCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBt YXNrKTsNCit9DQorDQorLyoNCisgKiBDbGVhbnVwIHByb2NlZHVyZS4gVGhlIGNhbGwgdG8gdGhp cyBwcm9jZWR1cmUgbWF5IGJlIGRlbGF5ZWQuDQorICovDQordm9pZCB0YXNrX2lzb2xhdGlvbl9j cHVfY2xlYW51cCh2b2lkKQ0KK3sNCisJa2lja19ocnRpbWVyKCk7DQorfQ0KZGlmZiAtLWdpdCBh L2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYw0KaW5kZXggZWY4ZjJhMjhkMzdjLi4y NTI4ODZlNmFhNzYgMTAwNjQ0DQotLS0gYS9rZXJuZWwvc2lnbmFsLmMNCisrKyBiL2tlcm5lbC9z aWduYWwuYw0KQEAgLTQ2LDYgKzQ2LDcgQEANCiAjaW5jbHVkZSA8bGludXgvbGl2ZXBhdGNoLmg+ DQogI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPg0KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPg0K KyNpbmNsdWRlIDxsaW51eC9pc29sYXRpb24uaD4NCiANCiAjZGVmaW5lIENSRUFURV9UUkFDRV9Q T0lOVFMNCiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3NpZ25hbC5oPg0KQEAgLTc1OSw2ICs3NjAs NyBAQCBzdGF0aWMgaW50IGRlcXVldWVfc3luY2hyb25vdXNfc2lnbmFsKGtlcm5lbF9zaWdpbmZv X3QgKmluZm8pDQogICovDQogdm9pZCBzaWduYWxfd2FrZV91cF9zdGF0ZShzdHJ1Y3QgdGFza19z dHJ1Y3QgKnQsIHVuc2lnbmVkIGludCBzdGF0ZSkNCiB7DQorCXRhc2tfaXNvbGF0aW9uX3NpZ25h bCh0KTsNCiAJc2V0X3Rza190aHJlYWRfZmxhZyh0LCBUSUZfU0lHUEVORElORyk7DQogCS8qDQog CSAqIFRBU0tfV0FLRUtJTEwgYWxzbyBtZWFucyB3YWtlIGl0IHVwIGluIHRoZSBzdG9wcGVkL3Ry YWNlZC9raWxsYWJsZQ0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYw0K aW5kZXggYTczMGMwM2VlNjA3Li4wZGEwMDdjZTg2NjYgMTAwNjQ0DQotLS0gYS9rZXJuZWwvc3lz LmMNCisrKyBiL2tlcm5lbC9zeXMuYw0KQEAgLTQyLDYgKzQyLDcgQEANCiAjaW5jbHVkZSA8bGlu dXgvc3lzY29yZV9vcHMuaD4NCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPg0KICNpbmNsdWRl IDxsaW51eC9jdHlwZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9pc29sYXRpb24uaD4NCiANCiAjaW5j bHVkZSA8bGludXgvY29tcGF0Lmg+DQogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+DQpAQCAt MjUzMCw2ICsyNTMxLDExIEBAIFNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVu c2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsDQogDQogCQllcnJvciA9IChj dXJyZW50LT5mbGFncyAmIFBSX0lPX0ZMVVNIRVIpID09IFBSX0lPX0ZMVVNIRVI7DQogCQlicmVh azsNCisJY2FzZSBQUl9UQVNLX0lTT0xBVElPTjoNCisJCWlmIChhcmczIHx8IGFyZzQgfHwgYXJn NSkNCisJCQlyZXR1cm4gLUVJTlZBTDsNCisJCWVycm9yID0gdGFza19pc29sYXRpb25fcmVxdWVz dChhcmcyKTsNCisJCWJyZWFrOw0KIAlkZWZhdWx0Og0KIAkJZXJyb3IgPSAtRUlOVkFMOw0KIAkJ YnJlYWs7DQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvaHJ0aW1lci5jIGIva2VybmVsL3RpbWUv aHJ0aW1lci5jDQppbmRleCAzODdiNGJlZjdkZDEuLjI3ZmVkZGRjMjcyOSAxMDA2NDQNCi0tLSBh L2tlcm5lbC90aW1lL2hydGltZXIuYw0KKysrIGIva2VybmVsL3RpbWUvaHJ0aW1lci5jDQpAQCAt MzAsNiArMzAsNyBAQA0KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPg0KICNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4NCiAjaW5jbHVkZSA8bGludXgvdGljay5oPg0KKyNpbmNsdWRlIDxs aW51eC9pc29sYXRpb24uaD4NCiAjaW5jbHVkZSA8bGludXgvZXJyLmg+DQogI2luY2x1ZGUgPGxp bnV4L2RlYnVnb2JqZWN0cy5oPg0KICNpbmNsdWRlIDxsaW51eC9zY2hlZC9zaWduYWwuaD4NCkBA IC03MjAsNiArNzIxLDE5IEBAIHN0YXRpYyB2b2lkIHJldHJpZ2dlcl9uZXh0X2V2ZW50KHZvaWQg KmFyZykNCiAJcmF3X3NwaW5fdW5sb2NrKCZiYXNlLT5sb2NrKTsNCiB9DQogDQorI2lmZGVmIENP TkZJR19UQVNLX0lTT0xBVElPTg0KK3ZvaWQga2lja19ocnRpbWVyKHZvaWQpDQorew0KKwl1bnNp Z25lZCBsb25nIGZsYWdzOw0KKw0KKwlwcmVlbXB0X2Rpc2FibGUoKTsNCisJbG9jYWxfaXJxX3Nh dmUoZmxhZ3MpOw0KKwlyZXRyaWdnZXJfbmV4dF9ldmVudChOVUxMKTsNCisJbG9jYWxfaXJxX3Jl c3RvcmUoZmxhZ3MpOw0KKwlwcmVlbXB0X2VuYWJsZSgpOw0KK30NCisjZW5kaWYNCisNCiAvKg0K ICAqIFN3aXRjaCB0byBoaWdoIHJlc29sdXRpb24gbW9kZQ0KICAqLw0KQEAgLTg2Nyw4ICs4ODEs MjEgQEAgc3RhdGljIHZvaWQgaHJ0aW1lcl9yZXByb2dyYW0oc3RydWN0IGhydGltZXIgKnRpbWVy LCBib29sIHJlcHJvZ3JhbSkNCiB2b2lkIGNsb2NrX3dhc19zZXQodm9pZCkNCiB7DQogI2lmZGVm IENPTkZJR19ISUdIX1JFU19USU1FUlMNCisjaWZkZWYgQ09ORklHX1RBU0tfSVNPTEFUSU9ODQor CXN0cnVjdCBjcHVtYXNrIG1hc2s7DQorDQorCWNwdW1hc2tfY2xlYXIoJm1hc2spOw0KKwl0YXNr X2lzb2xhdGlvbl9jcHVtYXNrKCZtYXNrKTsNCisJY3B1bWFza19jb21wbGVtZW50KCZtYXNrLCAm bWFzayk7DQorCS8qDQorCSAqIFJldHJpZ2dlciB0aGUgQ1BVIGxvY2FsIGV2ZW50cyBldmVyeXdo ZXJlIGV4Y2VwdCBDUFVzDQorCSAqIHJ1bm5pbmcgaXNvbGF0ZWQgdGFza3MuDQorCSAqLw0KKwlv bl9lYWNoX2NwdV9tYXNrKCZtYXNrLCByZXRyaWdnZXJfbmV4dF9ldmVudCwgTlVMTCwgMSk7DQor I2Vsc2UNCiAJLyogUmV0cmlnZ2VyIHRoZSBDUFUgbG9jYWwgZXZlbnRzIGV2ZXJ5d2hlcmUgKi8N CiAJb25fZWFjaF9jcHUocmV0cmlnZ2VyX25leHRfZXZlbnQsIE5VTEwsIDEpOw0KKyNlbmRpZg0K ICNlbmRpZg0KIAl0aW1lcmZkX2Nsb2NrX3dhc19zZXQoKTsNCiB9DQpkaWZmIC0tZ2l0IGEva2Vy bmVsL3RpbWUvdGljay1zY2hlZC5jIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jDQppbmRleCA4 MTYzMmNkNWUzYjcuLmEyMTM5NTI1NDFkYiAxMDA2NDQNCi0tLSBhL2tlcm5lbC90aW1lL3RpY2st c2NoZWQuYw0KKysrIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jDQpAQCAtODk2LDYgKzg5Niwy NCBAQCBzdGF0aWMgdm9pZCB0aWNrX25vaHpfZnVsbF91cGRhdGVfdGljayhzdHJ1Y3QgdGlja19z Y2hlZCAqdHMpDQogI2VuZGlmDQogfQ0KIA0KKyNpZmRlZiBDT05GSUdfVEFTS19JU09MQVRJT04N CitpbnQgdHJ5X3N0b3BfZnVsbF90aWNrKHZvaWQpDQorew0KKwlpbnQgY3B1ID0gc21wX3Byb2Nl c3Nvcl9pZCgpOw0KKwlzdHJ1Y3QgdGlja19zY2hlZCAqdHMgPSB0aGlzX2NwdV9wdHIoJnRpY2tf Y3B1X3NjaGVkKTsNCisNCisJLyogRm9yIGFuIHVuc3RhYmxlIGNsb2NrLCB3ZSBzaG91bGQgcmV0 dXJuIGEgcGVybWFuZW50IGVycm9yIGNvZGUuICovDQorCWlmIChhdG9taWNfcmVhZCgmdGlja19k ZXBfbWFzaykgJiBUSUNLX0RFUF9NQVNLX0NMT0NLX1VOU1RBQkxFKQ0KKwkJcmV0dXJuIC1FSU5W QUw7DQorDQorCWlmICghY2FuX3N0b3BfZnVsbF90aWNrKGNwdSwgdHMpKQ0KKwkJcmV0dXJuIC1F QUdBSU47DQorDQorCXRpY2tfbm9oel9zdG9wX3NjaGVkX3RpY2sodHMsIGNwdSk7DQorCXJldHVy biAwOw0KK30NCisjZW5kaWYNCisNCiBzdGF0aWMgYm9vbCBjYW5fc3RvcF9pZGxlX3RpY2soaW50 IGNwdSwgc3RydWN0IHRpY2tfc2NoZWQgKnRzKQ0KIHsNCiAJLyoNCi0tIA0KMi4yMC4xDQoNCg==