From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4B2A7A0548; Fri, 23 Sep 2022 23:55:38 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E955E40156; Fri, 23 Sep 2022 23:55:37 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id EC3AC400D4 for ; Fri, 23 Sep 2022 23:55:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663970136; x=1695506136; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=ikL1SQ1/PTvjLt7YtvVqoFO8cfiWqZJ3y3ogamEY+qQ=; b=X/DG3vv0pAfXYuoaEoH+c/ulUXqA3lvfOO2pCi5ZkrLc2ar9g2+3GdXs q9SyLGPMAdvHF/LFlQZO/iMUqYgscmE+0Yv08/9FZERrI3CRnRcpY2UVz ci5JQ3ugZT1b5YcwhGWdYdrBpbdPug6G8n2YahASGmQy/5PVmO8V7+Vnw QA6BvLuk03pxMgz/Bf4tlX1rhSNZDieSnzfRq8aBNiLL4gVINdVA8iYfK 8piFf1MVJ43kxx7l8Lt1X9WxUnUSuV/ESQd35QOjyhpVnOwgCPAWcmrkT +qd2wRd0FlsoUN7cstBg5FvCOadYIcS+1falR2qhK21usi/VLzfFwhyMq Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10479"; a="280430618" X-IronPort-AV: E=Sophos;i="5.93,340,1654585200"; d="scan'208";a="280430618" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Sep 2022 14:55:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,340,1654585200"; d="scan'208";a="795660787" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga005.jf.intel.com with ESMTP; 23 Sep 2022 14:55:34 -0700 Received: from orsmsx608.amr.corp.intel.com (10.22.229.21) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 23 Sep 2022 14:55:33 -0700 Received: from orsmsx608.amr.corp.intel.com (10.22.229.21) by ORSMSX608.amr.corp.intel.com (10.22.229.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 23 Sep 2022 14:55:33 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx608.amr.corp.intel.com (10.22.229.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Fri, 23 Sep 2022 14:55:33 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.109) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Fri, 23 Sep 2022 14:55:33 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HgAYYAIw+j8Dh7imn3+9zAIWc7u51j7FIOY/m0IgarXb59USft/XiCO6aTbmljuQfntxWw/mqmBpdf2ksOFsnTWYEysOvKKYcZ5p4O8gaPQy26r9E78k8sWQW50zX7qsMlqbWnts0HgcQ3olhmc/GM+S8XVoP2hh1ETtbjTknjfrPyQQv6zmlCXm4AhgYBKN6kNvZAW1b5QDkxgSzl375TYkESXltmA/gFunyElJln5i2wmq8VoI8MfXEI/3z7+9QmXeYMC1n5LrsTRrWZljW7V/6wpz5o7f/dIGS7Qbiwg3KcE9IuHIjTpoflObshZejWCNHV8/75pyCXKfdGtkVw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ikL1SQ1/PTvjLt7YtvVqoFO8cfiWqZJ3y3ogamEY+qQ=; b=SmmAfvNWvKW+tqGdIaU+G5HqVVaGVzcL13krnhwtQRvF8Vp/q9aIUYOR6qtlxDS1IKakqhXhptzxxgOTvv7B8maacuxr4L5t/fnTcPVY8FjN8eoikNWgUXbVgyO7HOyUbgmTtI/G+VW3ztSvJNn7QYotMENKxXTQmQ7Firg30Sqh8innbjE9etY7XKp/IT3i+zN7DyQ6O402TyuHmCg0ivJc2ZlfWdLHfw3CcHOTKV4gSvBxXmbuBCfv178e5qijJ8pF5kUU7BDxOw8+ahcRmZzEEMImxk2BSftwR00G1AUZgC9wsOor2s5KAcXy6yUxlI1cbKM2Cq81act78BlK5Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from BY5PR11MB4451.namprd11.prod.outlook.com (2603:10b6:a03:1cb::30) by SJ1PR11MB6180.namprd11.prod.outlook.com (2603:10b6:a03:459::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5632.18; Fri, 23 Sep 2022 21:55:30 +0000 Received: from BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::e6be:3feb:17fd:bdcf]) by BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::e6be:3feb:17fd:bdcf%7]) with mapi id 15.20.5654.020; Fri, 23 Sep 2022 21:55:29 +0000 From: "Chautru, Nicolas" To: Maxime Coquelin , "dev@dpdk.org" , "thomas@monjalon.net" CC: "trix@redhat.com" , "mdr@ashroe.eu" , "Richardson, Bruce" , "hemant.agrawal@nxp.com" , "david.marchand@redhat.com" , "stephen@networkplumber.org" , "Vargas, Hernan" Subject: RE: [PATCH v4 08/14] baseband/acc: add LDPC processing functions Thread-Topic: [PATCH v4 08/14] baseband/acc: add LDPC processing functions Thread-Index: AQHYzho2wHo5IBPIRkmmEhfvcVfR363ssRYAgADd8kA= Date: Fri, 23 Sep 2022 21:55:29 +0000 Message-ID: References: <1663806460-45162-1-git-send-email-nicolas.chautru@intel.com> <1663806460-45162-9-git-send-email-nicolas.chautru@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.500.17 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BY5PR11MB4451:EE_|SJ1PR11MB6180:EE_ x-ms-office365-filtering-correlation-id: a4a79ef3-1408-4979-d880-08da9dae54cf x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 4fU99YxJlmacu44/y/ACnjLr1e0iBB1EDte3PtaODQfmMSZ9HKO17slwXcM1KuY2NUcWK0oQc5nvV8XRbF8LP4sAYWjjnkz8FF6FbkDMfAarZZgrCZC9CfuhuhLAVNovj/HN+pxgKNPpkTRJwWf8JlcG056s/tr1gERWUZInxQ/u26OPkXkCmRIzECsMCjGTPSwVxJXfGkNRHv9OH6Q5r7leFG7Q1lxSAbZ46mxXEu1rzMrJiQcihGNksOciuCLXs/fYzlo7gywzCVDkJTWbWVcfNsFL9xB0BKcgncNy+7Xwg1Uikw9oUaUsMHnqtpWWQIfFwJ78e3/Hg7pKSCRR4zpga+/KVTYyeImsz5qw5oNHv9MmwUYRCWdEX3dXnzBRcw7ER0JZdt0FKRJ6FlFAcuzrqvaxxEmhKlaL7LUWLJ38/71DFgOI2PJndmu3rO+KgDlo7OpKGBGTnteIftUIsJaYhVWQDsd9fQsW5bG8J0tVYMK1eX7UJPNMtiutE8+UsvwmASkiAK7S7+whilrrPv1A7Ggw0ep1nC3XrWYotf8fnCC/tIy2II0q1egIaOoOniy62Ldjv0PYnbTzH+nRfq/pLgEwrq+GwiQ0bY49cLaMkdx+N/MPXAOObHTy6ABgMeUj5UkUcIKhaOuP356EpypeDl9KNHMrvtm/C4+w7hVMYnoHYDJJCPMbXhgdCO7u/BmhaSv2lhNXn4oZFI7RxizxYrS85rE/crK9c6uy56C/wAS1Tsr8SHD2P4L7giz67PhbNFaa44kepGwItjjXZVAAD7c+DyKt+6nge8nfomA= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BY5PR11MB4451.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(366004)(136003)(396003)(346002)(376002)(39860400002)(451199015)(41300700001)(53546011)(33656002)(107886003)(110136005)(7696005)(6506007)(54906003)(26005)(478600001)(71200400001)(316002)(38100700002)(122000001)(38070700005)(82960400001)(186003)(9686003)(55016003)(86362001)(83380400001)(30864003)(5660300002)(2906002)(8676002)(4326008)(8936002)(52536014)(66446008)(76116006)(66476007)(64756008)(66946007)(66556008)(461764006)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?dmN2SzdaeEc1K0JjbDFnc2hEc28rRmNHSkR3eSt4MW04MDhSeXFUczIrQ3R2?= =?utf-8?B?YWYyRXpFR2NJNlAvQUJlSy84aVNjQ2w5VUZ2NDBjdkdOWXZ3cUt1K0NXTDlM?= =?utf-8?B?RUZDTTVWWnZ4N0tRRURCTzRJYzZHK1Y1a09DYmdCZGI0a3QyYWZOS0NmbTMy?= =?utf-8?B?MzI3cjFGTHVld1dzTnU0VTV2R0hIR1kwYXBjWG9WRzBmeUtQVjBBQlFBc1hH?= =?utf-8?B?QVAwRzA0ZVVsNURwTEppcnhKQTNnNnk0dEEvdFFiUTBqYmJYZEM3VEE3MFFo?= =?utf-8?B?NVE1d1pBNy9oeFhEUjQ2b0hvM2grcDNWN3gzUnkrWlNWT2VRZjNhNkYxd01F?= =?utf-8?B?cDRac25UNUsyQ1NvM2NiSEx4byszbXg5OXh3YzRrZ1lxR0FoNlQ4MUllbnFs?= =?utf-8?B?UGhpd1oxV3o5WGJSQnQrSnNyMHoydkZ2WndIMS9VSExjcDVnQ3JLY0wwRDNE?= =?utf-8?B?SGFyT0c5dGVTWXNkR2gwYmNhaHJzSkppWjMzaDFyRGVvcmJ1RXZWbFJhZHk2?= =?utf-8?B?K0ZJQVBHdVFaOEVaVDgrQWhNcTM4bGxRYnZQWWIyOFRTL1FDWk1WY0k2cXRt?= =?utf-8?B?SVBDaW5raklzK2lDdHhoK3BVMnNibVYzaUpqVG9iUkNuT3ZPM1lDb1dIQk4z?= =?utf-8?B?TDNWT2d1eVlJdFZPT2Qrd2JUWkE2NWFxd1c2MEc1ajZhSnpFRFBOZVFGWDVa?= =?utf-8?B?aHhGRnRBUXkvbTQyUWN5SGVSNGpJeFUxOCtVdEhZQm8xYU5iOExnRTNwRWlI?= =?utf-8?B?d2dYWTlxZWpDdFY0aXNQa05Td3pWRisvQ2UzbWI2dmtDNjRpWm1UN28rcFdU?= =?utf-8?B?bHI5c0pQc2xVUjFDUUM1cGNhbk9HYlFtTlNkS3VyeEEyQjR5MHBMNWVRMHUv?= =?utf-8?B?TlBlN2h1SnFCaFlJaXZOQitCa21BSUV1K1NDcktKTmp3MkFsbUFFVXVidnFC?= =?utf-8?B?TFJLemJmRThSMFNEa2MyUjU1Z2dGSEZVMTcwK2h5S0xiOVFBb2lwUFErdzhO?= =?utf-8?B?NmlUbkJ5MXBVSEN1V0JIbjFMWDNvbGNNU25ncy9kTzd3THNyemQrM1NuNDl2?= =?utf-8?B?ejloYzBJTkFrd2treDFmT3ptM1VFaVNYTG9HdkpxUDRXeHBmMFRjOEkrWENh?= =?utf-8?B?QTVER0dqRnYwUmNUWjJuUFRVakUwdDZmczV0VS9nbHNSQWgyVytDdHdzdm5O?= =?utf-8?B?c0tTTm1XbHNoMnUySkxyVWUwcFM3ZnFYTEpZME9JQmY5SDJWWXQvdENIc212?= =?utf-8?B?U2NQUDQ5KzQ4cGZQQmEvWWRQNTlwRlpjZkFLaWZ5eVF0U28ybWtSRnZHY2pP?= =?utf-8?B?TFlvc0REdGp4SmwrRFRjRHdiYi9vbUU4S0RtTFFjRTgyeUNrMUQwRE9aZ2xG?= =?utf-8?B?V1FaUHh5SGI0SzJuckhocVh0OEdFcnBIZHpSZklQcTdQL20xTVIyanFDdXNo?= =?utf-8?B?T2NwajdTOTU3R3o2aUxhaVdRRXZBRjdrcG81Q21ZN3gwMU5STXczdWtwMmUx?= =?utf-8?B?dEJ6MWZWWm5aZlA4SEVkd1FCMTRPTm8weEdKOXVTR0RzUVlReFV0MS80TTVn?= =?utf-8?B?L21Xa1ZJb2ROTm5Jalc1NzZVVEphNmVkbHFuRldQKzlQeTNIUW01czVJRSt0?= =?utf-8?B?NkxGNUNWVmFhekc4YjBiTmM1Si9qMnRJdmJNMVNwUWU4aHowUGtnZ0xqRDJl?= =?utf-8?B?WnowVnVubUttZ0thdG5mUFpiQVBwaE5YTlJRenpSN2d3SzR0T1RQK1BCd3ZD?= =?utf-8?B?dWFHOThsRjllNlFXYTVJWjRrSVhva2dmMXNmSWpvdGNQNjJlOG5QRFhiSWFV?= =?utf-8?B?V3BpY29TTVBuVDJ4WGhFM1Q3S3B0SUxXd2duU2VJaEJsM3pubGw1TE5VaTM2?= =?utf-8?B?TGtEMER5V0o4OFM3R2FpM1FkYzdQcElYZFlQaVRQd3U2NWdPelhLMklzYVMy?= =?utf-8?B?dEVRaGhpRjdsWEZkQXJtejRHM0NudnZsbEEzZXE1T3hpN2lvcFEweExxOFAy?= =?utf-8?B?eC9qQk1OQytoaDZFVnBtUFVyNW1sOGc1QTFRR1lpeEN0MlowSWV0RDM2bWpJ?= =?utf-8?B?UHB6SVNVeFE3bUcvdU9rSThwNzFjZVRFenNDMzltWmE2Z0tBVHdSeVdYNHhH?= =?utf-8?Q?dYfzCbjObW+h0sm6LmT8W4uhe?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BY5PR11MB4451.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a4a79ef3-1408-4979-d880-08da9dae54cf X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Sep 2022 21:55:29.8655 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: HfCf/FlwXDazszeTqou8K4GNUh9NxJav01+2vrsugx4ffkx9SQpc8M5AmP0+PpF3Tod6yMvbvitzbo6XILRfIBsiHroDhW56S3I1+FwXUfs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR11MB6180 X-OriginatorOrg: intel.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org SGkgTWF4aW1lLCANCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNYXhp bWUgQ29xdWVsaW4gPG1heGltZS5jb3F1ZWxpbkByZWRoYXQuY29tPg0KPiBTZW50OiBGcmlkYXks IFNlcHRlbWJlciAyMywgMjAyMiAxOjMwIEFNDQo+IFRvOiBDaGF1dHJ1LCBOaWNvbGFzIDxuaWNv bGFzLmNoYXV0cnVAaW50ZWwuY29tPjsgZGV2QGRwZGsub3JnOw0KPiB0aG9tYXNAbW9uamFsb24u bmV0DQo+IENjOiB0cml4QHJlZGhhdC5jb207IG1kckBhc2hyb2UuZXU7IFJpY2hhcmRzb24sIEJy dWNlDQo+IDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47IGhlbWFudC5hZ3Jhd2FsQG54cC5j b207DQo+IGRhdmlkLm1hcmNoYW5kQHJlZGhhdC5jb207IHN0ZXBoZW5AbmV0d29ya3BsdW1iZXIu b3JnOyBWYXJnYXMsDQo+IEhlcm5hbiA8aGVybmFuLnZhcmdhc0BpbnRlbC5jb20+DQo+IFN1Ympl Y3Q6IFJlOiBbUEFUQ0ggdjQgMDgvMTRdIGJhc2ViYW5kL2FjYzogYWRkIExEUEMgcHJvY2Vzc2lu ZyBmdW5jdGlvbnMNCj4gDQo+IEhpIE5pY29sYXMsDQo+IA0KPiBJJ20gZmluaXNoaW5nIHJldmll d2luZyB0aGlzIHBhdGNoIGZyb20gdjQgYXMgSSB3YXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUNCj4g cmV2aWV3IHdoZW4geW91IHBvc3RlZCB2NS4gV2lsbCBjb250aW51ZSB0aGUgb3RoZXIgb25lcyBv biB2NS4NCj4gDQo+IE9uIDkvMjIvMjIgMDI6MjcsIE5pYyBDaGF1dHJ1IHdyb3RlOg0KPiA+IEFk ZGluZyBMRFBDIGVuY29kZSBhbmQgZGVjb2RlIHByb2Nlc3NpbmcgZnVuY3Rpb25zLg0KPiA+DQo+ ID4gU2lnbmVkLW9mZi1ieTogTmljIENoYXV0cnUgPG5pY29sYXMuY2hhdXRydUBpbnRlbC5jb20+ DQo+ID4gLS0tDQo+ID4gICBkcml2ZXJzL2Jhc2ViYW5kL2FjYy9hY2NfY29tbW9uLmggICAgIHwg ICA4NCArKw0KPiA+ICAgZHJpdmVycy9iYXNlYmFuZC9hY2MvcnRlX2FjYzIwMF9wbWQuYyB8IDE1 MjYNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystDQo+ID4gICAyIGZpbGVzIGNo YW5nZWQsIDE2MDYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2Jhc2ViYW5kL2FjYy9hY2NfY29tbW9uLmgNCj4gYi9kcml2ZXJzL2Jh c2ViYW5kL2FjYy9hY2NfY29tbW9uLmgNCj4gPiBpbmRleCBhZThkZTllLi5iNDMwYjQ1IDEwMDY0 NA0KPiA+IC0tLSBhL2RyaXZlcnMvYmFzZWJhbmQvYWNjL2FjY19jb21tb24uaA0KPiA+ICsrKyBi L2RyaXZlcnMvYmFzZWJhbmQvYWNjL2FjY19jb21tb24uaA0KPiA+IEBAIC0xMzAwLDQgKzEzMDAs ODggQEAgc3RhdGljIGlubGluZSB1aW50MzJfdCBocV9pbmRleCh1aW50MzJfdCBvZmZzZXQpDQo+ ID4gICAJcmV0dXJuIDA7DQo+ID4gICB9DQo+ID4NCj4gPiArc3RhdGljIGlubGluZSB2b2lkDQo+ ID4gK2FjY19lbnF1ZXVlX3N0YXR1cyhzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0 YSwNCj4gPiArCQllbnVtIHJ0ZV9iYmRldl9lbnF1ZXVlX3N0YXR1cyBzdGF0dXMpDQo+ID4gK3sN Cj4gPiArCXFfZGF0YS0+ZW5xdWV1ZV9zdGF0dXMgPSBzdGF0dXM7DQo+ID4gKwlxX2RhdGEtPnF1 ZXVlX3N0YXRzLmVucXVldWVfc3RhdHVzX2NvdW50W3N0YXR1c10rKzsNCj4gPiArDQo+ID4gKwly dGVfYWNjX2xvZyhXQVJOSU5HLCAiRW5xdWV1ZSBTdGF0dXM6ICVzICUjIlBSSXg2NCIiLA0KPiA+ ICsJCQlydGVfYmJkZXZfZW5xdWV1ZV9zdGF0dXNfc3RyKHN0YXR1cyksDQo+ID4gKwkJCXFfZGF0 YS0NCj4gPnF1ZXVlX3N0YXRzLmVucXVldWVfc3RhdHVzX2NvdW50W3N0YXR1c10pOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gPiArYWNjX2VucXVldWVfaW52YWxp ZChzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSkNCj4gPiArew0KPiA+ICsJYWNj X2VucXVldWVfc3RhdHVzKHFfZGF0YSwNCj4gUlRFX0JCREVWX0VOUV9TVEFUVVNfSU5WQUxJRF9P UCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiA+ICthY2NfZW5x dWV1ZV9yaW5nX2Z1bGwoc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpxX2RhdGEpDQo+ID4g K3sNCj4gPiArCWFjY19lbnF1ZXVlX3N0YXR1cyhxX2RhdGEsDQo+IFJURV9CQkRFVl9FTlFfU1RB VFVTX1JJTkdfRlVMTCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZA0K PiA+ICthY2NfZW5xdWV1ZV9xdWV1ZV9mdWxsKHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAq cV9kYXRhKQ0KPiA+ICt7DQo+ID4gKwlhY2NfZW5xdWV1ZV9zdGF0dXMocV9kYXRhLA0KPiBSVEVf QkJERVZfRU5RX1NUQVRVU19RVUVVRV9GVUxMKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogTnVt YmVyIG9mIGF2YWlsYWJsZSBkZXNjcmlwdG9yIGluIHJpbmcgdG8gZW5xdWV1ZSAqLw0KPiA+ICtz dGF0aWMgaW5saW5lIHVpbnQzMl90DQo+ID4gK2FjY19yaW5nX2F2YWlsX2VucShzdHJ1Y3QgYWNj X3F1ZXVlICpxKQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gKHEtPnN3X3JpbmdfZGVwdGggLSAxICsg cS0+c3dfcmluZ190YWlsIC0gcS0+c3dfcmluZ19oZWFkKSAlDQo+IHEtPnN3X3JpbmdfZGVwdGg7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIE51bWJlciBvZiBhdmFpbGFibGUgZGVzY3JpcHRvciBp biByaW5nIHRvIGRlcXVldWUgKi8NCj4gPiArc3RhdGljIGlubGluZSB1aW50MzJfdA0KPiA+ICth Y2NfcmluZ19hdmFpbF9kZXEoc3RydWN0IGFjY19xdWV1ZSAqcSkNCj4gPiArew0KPiA+ICsJcmV0 dXJuIChxLT5zd19yaW5nX2RlcHRoICsgcS0+c3dfcmluZ19oZWFkIC0gcS0+c3dfcmluZ190YWls KSAlIHEtDQo+ID5zd19yaW5nX2RlcHRoOw0KPiA+ICt9DQo+IA0KPiBNeSB1bmRlcnN0YW5kaW5n IGlzIHRoYXQgdGhlIHJpbmcgc2l6ZSBpcyBhIHBvd2VyIG9mIDIsIGl0IHRoYXQgY29ycmVjdD8N Cj4gSWYgc28sIGluZGVhZCBvZiBkb2luZyBhIG1vZHVsbyBvcGVyYXRpb24sIHlvdSBjb3VsZCBk byBhIEFORCBvcGVyYXRpb24NCj4gd2l0aCB0aGUgcmluZyBtYXNrIHdoaWNoIGlzIGxlc3MgY29z dGx5Lg0KDQpPSw0KDQo+IA0KPiBBbHNvLCBJIHJlaXRlcmF0ZSBteSBjb21tZW50IG9uIHByZXZp b3VzIHJldmlzaW9uLCBpdCBsb29rcyB1bmJhbGFuY2VkDQo+IHRoYXQgZW5xIGFuZCBkZWMgaW1w bGVtZW50YXRpb25zIGFyZSBvZmYtYnktb25lLg0KPiANCg0KSSBkaWQgcmVwbHkgb24gdGhlIG90 aGVyIHJldmlzaW9uLiBUaGVyZSBhcmUgbm90IG9mZiBieSBvbmUsIGJ1dCBxdWFzaS1jb21wbGVt ZW50YXJ5Lg0KDQo+ID4gKw0KPiA+ICsvKiBDaGVjayByb29tIGluIEFRIGZvciB0aGUgZW5xdWV1 ZXMgYmF0Y2hlcyBpbnRvIFFtZ3IgKi8NCj4gPiArc3RhdGljIGlubGluZSBpbnQzMl90DQo+ID4g K2FjY19hcV9hdmFpbChzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwgdWludDE2 X3QgbnVtX29wcykNCj4gPiArew0KPiA+ICsJc3RydWN0IGFjY19xdWV1ZSAqcSA9IHFfZGF0YS0+ cXVldWVfcHJpdmF0ZTsNCj4gPiArCWludDMyX3QgYXFfYXZhaWwgPSBxLT5hcV9kZXB0aCAtDQo+ ID4gKwkJCSgocS0+YXFfZW5xdWV1ZWQgLSBxLT5hcV9kZXF1ZXVlZCArDQo+ID4gKwkJCUFDQ19N QVhfUVVFVUVfREVQVEgpICUNCj4gQUNDX01BWF9RVUVVRV9ERVBUSCkNCj4gPiArCQkJLSAobnVt X29wcyA+PiA3KTsNCj4gPiArCWlmIChhcV9hdmFpbCA8PSAwKQ0KPiA+ICsJCWFjY19lbnF1ZXVl X3F1ZXVlX2Z1bGwocV9kYXRhKTsNCj4gDQo+IFNob3VsZG4ndCB3ZSByYWlzZSBhbiBlcnJvciBp ZiBhcV9hdmFpbCBuZWdhdGl2ZT8NCg0KVGhlIGVycm9yIGlzIG1hbmFnZWQgZXh0ZXJuYWxseSAo IGFuZCB3aWxsIGJlIFBNRCBzcGVjaWZpYykuDQoNCj4gDQo+IEFsc28gdGhpcyBmdW5jdGlvbiBk b2VzIG5vdCBzZWVtIHJlbGF0ZWQgdG8gTERQQyBwcm9jZXNzaW5nLCBzaW5jZSBpdCBpcw0KPiBu b3QgdXNlZCBpbiB0aGF0IHBhdGNoLiBJdCBzaG91bGQgYmVsb25nIHRvIG5leHQgcGF0Y2guDQoN ClRoYW5rcywgdGhlcmUgd2FzIGFuIGlzc3VlIHRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQu IA0KDQo+IA0KPiA+ICsJcmV0dXJuIGFxX2F2YWlsOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBD YWxjdWxhdGVzIG51bWJlciBvZiBDQnMgaW4gcHJvY2Vzc2VkIGVuY29kZXIgVEIgYmFzZWQgb24g J3InIGFuZA0KPiBpbnB1dA0KPiA+ICsgKiBsZW5ndGguDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMg aW5saW5lIHVpbnQ4X3QNCj4gPiArZ2V0X251bV9jYnNfaW5fdGJfbGRwY19lbmMoc3RydWN0IHJ0 ZV9iYmRldl9vcF9sZHBjX2VuYyAqbGRwY19lbmMpDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgYywg ciwgY3JjMjRfYml0cyA9IDA7DQo+ID4gKwl1aW50MTZfdCBrID0gKGxkcGNfZW5jLT5iYXNlZ3Jh cGggPT0gMSA/IDIyIDogMTApICogbGRwY19lbmMtPnpfYw0KPiA+ICsJCS0gbGRwY19lbmMtPm5f ZmlsbGVyOw0KPiA+ICsJdWludDhfdCBjYnNfaW5fdGIgPSAwOw0KPiA+ICsJaW50MzJfdCBsZW5n dGg7DQo+ID4gKw0KPiA+ICsJbGVuZ3RoID0gbGRwY19lbmMtPmlucHV0Lmxlbmd0aDsNCj4gPiAr CXIgPSBsZHBjX2VuYy0+dGJfcGFyYW1zLnI7DQo+ID4gKwljID0gbGRwY19lbmMtPnRiX3BhcmFt cy5jOw0KPiA+ICsJY3JjMjRfYml0cyA9IDA7DQo+ID4gKwlpZiAoY2hlY2tfYml0KGxkcGNfZW5j LT5vcF9mbGFncywNCj4gUlRFX0JCREVWX0xEUENfQ1JDXzI0Ql9BVFRBQ0gpKQ0KPiA+ICsJCWNy YzI0X2JpdHMgPSAyNDsNCj4gPiArCXdoaWxlIChsZW5ndGggPiAwICYmIHIgPCBjKSB7DQo+ID4g KwkJbGVuZ3RoIC09IChrIC0gY3JjMjRfYml0cykgPj4gMzsNCj4gPiArCQlyKys7DQo+ID4gKwkJ Y2JzX2luX3RiKys7DQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4gY2JzX2luX3RiOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICAgI2VuZGlmIC8qIF9BQ0NfQ09NTU9OX0hfICovDQo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvYmFzZWJhbmQvYWNjL3J0ZV9hY2MyMDBfcG1kLmMNCj4gYi9kcml2ZXJzL2Jhc2Vi YW5kL2FjYy9ydGVfYWNjMjAwX3BtZC5jDQo+ID4gaW5kZXggMzU1Y2Y4ZS4uMWM1OTU1OSAxMDA2 NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2Jhc2ViYW5kL2FjYy9ydGVfYWNjMjAwX3BtZC5jDQo+ID4g KysrIGIvZHJpdmVycy9iYXNlYmFuZC9hY2MvcnRlX2FjYzIwMF9wbWQuYw0KPiA+IEBAIC01NTQs MTUgKzU1NCw1MCBAQA0KPiA+ICAgCXJldHVybiAwOw0KPiA+ICAgfQ0KPiA+DQo+ID4gK3N0YXRp YyBpbmxpbmUgdm9pZA0KPiA+ICthY2MyMDBfcHJpbnRfb3Aoc3RydWN0IHJ0ZV9iYmRldl9kZWNf b3AgKm9wLCBlbnVtIHJ0ZV9iYmRldl9vcF90eXBlDQo+IG9wX3R5cGUsDQo+ID4gKwkJdWludDE2 X3QgaW5kZXgpDQo+ID4gK3sNCj4gPiArCWlmIChvcCA9PSBOVUxMKQ0KPiA+ICsJCXJldHVybjsN Cj4gPiArCWlmIChvcF90eXBlID09IFJURV9CQkRFVl9PUF9MRFBDX0RFQykNCj4gPiArCQlydGVf YmJkZXZfbG9nKElORk8sDQo+ID4gKwkJCSIgIE9wIDVHVUwgJWQgJWQgJWQgJWQgJWQgJWQgJWQg JWQgJWQgJWQgJWQNCj4gJWQiLA0KPiA+ICsJCQlpbmRleCwNCj4gPiArCQkJb3AtPmxkcGNfZGVj LmJhc2VncmFwaCwgb3AtPmxkcGNfZGVjLnpfYywNCj4gPiArCQkJb3AtPmxkcGNfZGVjLm5fY2Is IG9wLT5sZHBjX2RlYy5xX20sDQo+ID4gKwkJCW9wLT5sZHBjX2RlYy5uX2ZpbGxlciwgb3AtPmxk cGNfZGVjLmNiX3BhcmFtcy5lLA0KPiA+ICsJCQlvcC0+bGRwY19kZWMub3BfZmxhZ3MsIG9wLT5s ZHBjX2RlYy5ydl9pbmRleCwNCj4gPiArCQkJb3AtPmxkcGNfZGVjLml0ZXJfbWF4LCBvcC0+bGRw Y19kZWMuaXRlcl9jb3VudCwNCj4gPiArCQkJb3AtPmxkcGNfZGVjLmhhcnFfY29tYmluZWRfaW5w dXQubGVuZ3RoDQo+ID4gKwkJCSk7DQo+ID4gKwllbHNlIGlmIChvcF90eXBlID09IFJURV9CQkRF Vl9PUF9MRFBDX0VOQykgew0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfZW5jX29wICpvcF9kbCA9 IChzdHJ1Y3QgcnRlX2JiZGV2X2VuY19vcA0KPiAqKSBvcDsNCj4gPiArCQlydGVfYmJkZXZfbG9n KElORk8sDQo+ID4gKwkJCSIgIE9wIDVHREwgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQiLA0K PiA+ICsJCQlpbmRleCwNCj4gPiArCQkJb3BfZGwtPmxkcGNfZW5jLmJhc2VncmFwaCwgb3BfZGwt PmxkcGNfZW5jLnpfYywNCj4gPiArCQkJb3BfZGwtPmxkcGNfZW5jLm5fY2IsIG9wX2RsLT5sZHBj X2VuYy5xX20sDQo+ID4gKwkJCW9wX2RsLT5sZHBjX2VuYy5uX2ZpbGxlciwgb3BfZGwtDQo+ID5s ZHBjX2VuYy5jYl9wYXJhbXMuZSwNCj4gPiArCQkJb3BfZGwtPmxkcGNfZW5jLm9wX2ZsYWdzLCBv cF9kbC0+bGRwY19lbmMucnZfaW5kZXgNCj4gPiArCQkJKTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ DQo+ID4gICBzdGF0aWMgaW50DQo+ID4gICBhY2NfcXVldWVfc3RvcChzdHJ1Y3QgcnRlX2JiZGV2 ICpkZXYsIHVpbnQxNl90IHF1ZXVlX2lkKQ0KPiA+ICAgew0KPiA+ICAgCXN0cnVjdCBhY2NfcXVl dWUgKnE7DQo+ID4gKwlzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqb3A7DQo+ID4gKwl1aW50MTZf dCBpOw0KPiA+ICAgCXEgPSBkZXYtPmRhdGEtPnF1ZXVlc1txdWV1ZV9pZF0ucXVldWVfcHJpdmF0 ZTsNCj4gPiAgIAlydGVfYmJkZXZfbG9nKElORk8sICJRdWV1ZSBTdG9wICVkIEgvVC9EICVkICVk ICV4IE9wVHlwZSAlZCIsDQo+ID4gICAJCQlxdWV1ZV9pZCwgcS0+c3dfcmluZ19oZWFkLCBxLT5z d19yaW5nX3RhaWwsDQo+ID4gICAJCQlxLT5zd19yaW5nX2RlcHRoLCBxLT5vcF90eXBlKTsNCj4g PiArCWZvciAoaSA9IDA7IGkgPCBxLT5zd19yaW5nX2RlcHRoOyArK2kpIHsNCj4gPiArCQlvcCA9 IChxLT5yaW5nX2FkZHIgKyBpKS0+cmVxLm9wX2FkZHI7DQo+ID4gKwkJYWNjMjAwX3ByaW50X29w KG9wLCBxLT5vcF90eXBlLCBpKTsNCj4gPiArCX0NCj4gPiAgIAkvKiBpZ25vcmUgYWxsIG9wZXJh dGlvbnMgaW4gZmxpZ2h0IGFuZCBjbGVhciBjb3VudGVycyAqLw0KPiA+ICAgCXEtPnN3X3Jpbmdf dGFpbCA9IHEtPnN3X3JpbmdfaGVhZDsNCj4gPiAgIAlxLT5hcV9lbnF1ZXVlZCA9IDA7DQo+ID4g QEAgLTYwNSw2ICs2NDAsNDMgQEANCj4gPiAgIAlzdHJ1Y3QgYWNjX2RldmljZSAqZCA9IGRldi0+ ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+ID4gICAJaW50IGk7DQo+ID4gICAJc3RhdGljIGNvbnN0IHN0 cnVjdCBydGVfYmJkZXZfb3BfY2FwIGJiZGV2X2NhcGFiaWxpdGllc1tdID0gew0KPiA+ICsJCXsN Cj4gPiArCQkJLnR5cGUgICA9IFJURV9CQkRFVl9PUF9MRFBDX0VOQywNCj4gPiArCQkJLmNhcC5s ZHBjX2VuYyA9IHsNCj4gPiArCQkJCS5jYXBhYmlsaXR5X2ZsYWdzID0NCj4gPiArCQkJCQlSVEVf QkJERVZfTERQQ19SQVRFX01BVENIIHwNCj4gPiArDQo+IAlSVEVfQkJERVZfTERQQ19DUkNfMjRC X0FUVEFDSCB8DQo+ID4gKw0KPiAJUlRFX0JCREVWX0xEUENfSU5URVJMRUFWRVJfQllQQVNTLA0K PiA+ICsJCQkJLm51bV9idWZmZXJzX3NyYyA9DQo+ID4gKw0KPiAJUlRFX0JCREVWX0xEUENfTUFY X0NPREVfQkxPQ0tTLA0KPiA+ICsJCQkJLm51bV9idWZmZXJzX2RzdCA9DQo+ID4gKw0KPiAJUlRF X0JCREVWX0xEUENfTUFYX0NPREVfQkxPQ0tTLA0KPiA+ICsJCQl9DQo+ID4gKwkJfSwNCj4gPiAr CQl7DQo+ID4gKwkJCS50eXBlICAgPSBSVEVfQkJERVZfT1BfTERQQ19ERUMsDQo+ID4gKwkJCS5j YXAubGRwY19kZWMgPSB7DQo+ID4gKwkJCS5jYXBhYmlsaXR5X2ZsYWdzID0NCj4gPiArCQkJCVJU RV9CQkRFVl9MRFBDX0NSQ19UWVBFXzI0Ql9DSEVDSyB8DQo+ID4gKwkJCQlSVEVfQkJERVZfTERQ Q19DUkNfVFlQRV8yNEJfRFJPUCB8DQo+ID4gKwkJCQlSVEVfQkJERVZfTERQQ19DUkNfVFlQRV8y NEFfQ0hFQ0sgfA0KPiA+ICsJCQkJUlRFX0JCREVWX0xEUENfQ1JDX1RZUEVfMTZfQ0hFQ0sgfA0K PiA+ICsNCj4gCVJURV9CQkRFVl9MRFBDX0hRX0NPTUJJTkVfSU5fRU5BQkxFIHwNCj4gPiArDQo+ IAlSVEVfQkJERVZfTERQQ19IUV9DT01CSU5FX09VVF9FTkFCTEUgfA0KPiA+ICsNCj4gCVJURV9C QkRFVl9MRFBDX0lURVJBVElPTl9TVE9QX0VOQUJMRSB8DQo+ID4gKwkJCQlSVEVfQkJERVZfTERQ Q19ERUlOVEVSTEVBVkVSX0JZUEFTUw0KPiB8DQo+ID4gKwkJCQlSVEVfQkJERVZfTERQQ19ERUNf U0NBVFRFUl9HQVRIRVIgfA0KPiA+ICsNCj4gCVJURV9CQkRFVl9MRFBDX0hBUlFfNkJJVF9DT01Q UkVTU0lPTiB8DQo+ID4gKwkJCQlSVEVfQkJERVZfTERQQ19MTFJfQ09NUFJFU1NJT04sDQo+ID4g KwkJCS5sbHJfc2l6ZSA9IDgsDQo+ID4gKwkJCS5sbHJfZGVjaW1hbHMgPSAxLA0KPiA+ICsJCQku bnVtX2J1ZmZlcnNfc3JjID0NCj4gPiArDQo+IAlSVEVfQkJERVZfTERQQ19NQVhfQ09ERV9CTE9D S1MsDQo+ID4gKwkJCS5udW1fYnVmZmVyc19oYXJkX291dCA9DQo+ID4gKw0KPiAJUlRFX0JCREVW X0xEUENfTUFYX0NPREVfQkxPQ0tTLA0KPiA+ICsJCQkubnVtX2J1ZmZlcnNfc29mdF9vdXQgPSAw LA0KPiA+ICsJCQl9DQo+ID4gKwkJfSwNCj4gPiAgIAkJUlRFX0JCREVWX0VORF9PRl9DQVBBQklM SVRJRVNfTElTVCgpDQo+ID4gICAJfTsNCj4gPg0KPiA+IEBAIC02MjEsMTMgKzY5MywxNSBAQA0K PiA+ICAgCWRldl9pbmZvLT5udW1fcXVldWVzW1JURV9CQkRFVl9PUF9OT05FXSA9IDA7DQo+ID4g ICAJZGV2X2luZm8tPm51bV9xdWV1ZXNbUlRFX0JCREVWX09QX1RVUkJPX0RFQ10gPSAwOw0KPiA+ ICAgCWRldl9pbmZvLT5udW1fcXVldWVzW1JURV9CQkRFVl9PUF9UVVJCT19FTkNdID0gMDsNCj4g PiAtCWRldl9pbmZvLT5udW1fcXVldWVzW1JURV9CQkRFVl9PUF9MRFBDX0RFQ10gPSAwOw0KPiA+ IC0JZGV2X2luZm8tPm51bV9xdWV1ZXNbUlRFX0JCREVWX09QX0xEUENfRU5DXSA9IDA7DQo+ID4g KwlkZXZfaW5mby0+bnVtX3F1ZXVlc1tSVEVfQkJERVZfT1BfTERQQ19ERUNdID0gZC0NCj4gPmFj Y19jb25mLnFfdWxfNWcubnVtX2Fxc19wZXJfZ3JvdXBzICoNCj4gPiArCQkJZC0+YWNjX2NvbmYu cV91bF81Zy5udW1fcWdyb3VwczsNCj4gPiArCWRldl9pbmZvLT5udW1fcXVldWVzW1JURV9CQkRF Vl9PUF9MRFBDX0VOQ10gPSBkLQ0KPiA+YWNjX2NvbmYucV9kbF81Zy5udW1fYXFzX3Blcl9ncm91 cHMgKg0KPiA+ICsJCQlkLT5hY2NfY29uZi5xX2RsXzVnLm51bV9xZ3JvdXBzOw0KPiA+ICAgCWRl dl9pbmZvLT5udW1fcXVldWVzW1JURV9CQkRFVl9PUF9GRlRdID0gMDsNCj4gPiAgIAlkZXZfaW5m by0+cXVldWVfcHJpb3JpdHlbUlRFX0JCREVWX09QX1RVUkJPX0RFQ10gPSAwOw0KPiA+ICAgCWRl dl9pbmZvLT5xdWV1ZV9wcmlvcml0eVtSVEVfQkJERVZfT1BfVFVSQk9fRU5DXSA9IDA7DQo+ID4g LQlkZXZfaW5mby0+cXVldWVfcHJpb3JpdHlbUlRFX0JCREVWX09QX0xEUENfREVDXSA9IDA7DQo+ ID4gLQlkZXZfaW5mby0+cXVldWVfcHJpb3JpdHlbUlRFX0JCREVWX09QX0xEUENfRU5DXSA9IDA7 DQo+ID4gKwlkZXZfaW5mby0+cXVldWVfcHJpb3JpdHlbUlRFX0JCREVWX09QX0xEUENfREVDXSA9 IGQtDQo+ID5hY2NfY29uZi5xX3VsXzVnLm51bV9xZ3JvdXBzOw0KPiA+ICsJZGV2X2luZm8tPnF1 ZXVlX3ByaW9yaXR5W1JURV9CQkRFVl9PUF9MRFBDX0VOQ10gPSBkLQ0KPiA+YWNjX2NvbmYucV9k bF81Zy5udW1fcWdyb3VwczsNCj4gPiAgIAlkZXZfaW5mby0+cXVldWVfcHJpb3JpdHlbUlRFX0JC REVWX09QX0ZGVF0gPSAwOw0KPiA+ICAgCWRldl9pbmZvLT5tYXhfbnVtX3F1ZXVlcyA9IDA7DQo+ ID4gICAJZm9yIChpID0gUlRFX0JCREVWX09QX05PTkU7IGkgPD0gUlRFX0JCREVWX09QX0ZGVDsg aSsrKQ0KPiA+IEBAIC02NzAsNiArNzQ0LDE0NDYgQEANCj4gPiAgIAl7LmRldmljZV9pZCA9IDB9 LA0KPiA+ICAgfTsNCj4gPg0KPiA+ICsvKiBGaWxsIGluIGEgZnJhbWUgY29udHJvbCB3b3JkIGZv ciBMRFBDIGRlY29kaW5nLiAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gPiArYWNjMjAw X2Zjd19sZF9maWxsKHN0cnVjdCBydGVfYmJkZXZfZGVjX29wICpvcCwgc3RydWN0IGFjY19mY3df bGQgKmZjdywNCj4gPiArCQl1bmlvbiBhY2NfaGFycV9sYXlvdXRfZGF0YSAqaGFycV9sYXlvdXQp DQo+ID4gK3sNCj4gPiArCXVpbnQxNl90IGhhcnFfb3V0X2xlbmd0aCwgaGFycV9pbl9sZW5ndGgs IG5jYl9wLCBrMF9wLA0KPiBwYXJpdHlfb2Zmc2V0Ow0KPiA+ICsJdWludDMyX3QgaGFycV9pbmRl eDsNCj4gPiArCXVpbnQzMl90IGw7DQo+ID4gKw0KPiA+ICsJZmN3LT5xbSA9IG9wLT5sZHBjX2Rl Yy5xX207DQo+ID4gKwlmY3ctPm5maWxsZXIgPSBvcC0+bGRwY19kZWMubl9maWxsZXI7DQo+ID4g KwlmY3ctPkJHID0gKG9wLT5sZHBjX2RlYy5iYXNlZ3JhcGggLSAxKTsNCj4gPiArCWZjdy0+WmMg PSBvcC0+bGRwY19kZWMuel9jOw0KPiA+ICsJZmN3LT5uY2IgPSBvcC0+bGRwY19kZWMubl9jYjsN Cj4gPiArCWZjdy0+azAgPSBnZXRfazAoZmN3LT5uY2IsIGZjdy0+WmMsIG9wLT5sZHBjX2RlYy5i YXNlZ3JhcGgsDQo+ID4gKwkJCW9wLT5sZHBjX2RlYy5ydl9pbmRleCk7DQo+ID4gKwlpZiAob3At PmxkcGNfZGVjLmNvZGVfYmxvY2tfbW9kZSA9PSBSVEVfQkJERVZfQ09ERV9CTE9DSykNCj4gPiAr CQlmY3ctPnJtX2UgPSBvcC0+bGRwY19kZWMuY2JfcGFyYW1zLmU7DQo+ID4gKwllbHNlDQo+ID4g KwkJZmN3LT5ybV9lID0gKG9wLT5sZHBjX2RlYy50Yl9wYXJhbXMuciA8DQo+ID4gKwkJCQlvcC0+ bGRwY19kZWMudGJfcGFyYW1zLmNhYikgPw0KPiA+ICsJCQkJCQlvcC0+bGRwY19kZWMudGJfcGFy YW1zLmVhIDoNCj4gPiArCQkJCQkJb3AtPmxkcGNfZGVjLnRiX3BhcmFtcy5lYjsNCj4gPiArDQo+ ID4gKwlpZiAodW5saWtlbHkoY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPiAr CQkJUlRFX0JCREVWX0xEUENfSFFfQ09NQklORV9JTl9FTkFCTEUpICYmDQo+ID4gKwkJCShvcC0+ bGRwY19kZWMuaGFycV9jb21iaW5lZF9pbnB1dC5sZW5ndGggPT0gMCkpKSB7DQo+ID4gKwkJcnRl X2JiZGV2X2xvZyhXQVJOSU5HLCAiTnVsbCBIQVJRIGlucHV0IHNpemUgcHJvdmlkZWQiKTsNCj4g PiArCQkvKiBEaXNhYmxlIEhBUlEgaW5wdXQgaW4gdGhhdCBjYXNlIHRvIGNhcnJ5IGZvcndhcmQg Ki8NCj4gPiArCQlvcC0+bGRwY19kZWMub3BfZmxhZ3MgXj0NCj4gUlRFX0JCREVWX0xEUENfSFFf Q09NQklORV9JTl9FTkFCTEU7DQo+ID4gKwl9DQo+ID4gKwlpZiAodW5saWtlbHkoZmN3LT5ybV9l ID09IDApKSB7DQo+ID4gKwkJcnRlX2JiZGV2X2xvZyhXQVJOSU5HLCAiTnVsbCBFIGlucHV0IHBy b3ZpZGVkIik7DQo+ID4gKwkJZmN3LT5ybV9lID0gMjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlm Y3ctPmhjaW5fZW4gPSBjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCQlS VEVfQkJERVZfTERQQ19IUV9DT01CSU5FX0lOX0VOQUJMRSk7DQo+ID4gKwlmY3ctPmhjb3V0X2Vu ID0gY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPiArCQkJUlRFX0JCREVWX0xE UENfSFFfQ09NQklORV9PVVRfRU5BQkxFKTsNCj4gPiArCWZjdy0+Y3JjX3NlbGVjdCA9IGNoZWNr X2JpdChvcC0+bGRwY19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJCVJURV9CQkRFVl9MRFBDX0NSQ19U WVBFXzI0Ql9DSEVDSyk7DQo+ID4gKwlmY3ctPmJ5cGFzc19kZWMgPSAwOw0KPiA+ICsJZmN3LT5i eXBhc3NfaW50bHYgPSBjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCQlS VEVfQkJERVZfTERQQ19ERUlOVEVSTEVBVkVSX0JZUEFTUyk7DQo+ID4gKwlpZiAob3AtPmxkcGNf ZGVjLnFfbSA9PSAxKSB7DQo+ID4gKwkJZmN3LT5ieXBhc3NfaW50bHYgPSAxOw0KPiA+ICsJCWZj dy0+cW0gPSAyOw0KPiA+ICsJfQ0KPiA+ICsJZmN3LT5oY2luX2RlY29tcF9tb2RlID0gY2hlY2tf Yml0KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPiArCQkJUlRFX0JCREVWX0xEUENfSEFSUV82 QklUX0NPTVBSRVNTSU9OKTsNCj4gPiArCWZjdy0+aGNvdXRfY29tcF9tb2RlID0gY2hlY2tfYml0 KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPiArCQkJUlRFX0JCREVWX0xEUENfSEFSUV82QklU X0NPTVBSRVNTSU9OKTsNCj4gPiArCWZjdy0+bGxyX3BhY2tfbW9kZSA9IGNoZWNrX2JpdChvcC0+ bGRwY19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJCVJURV9CQkRFVl9MRFBDX0xMUl9DT01QUkVTU0lP Tik7DQo+ID4gKwloYXJxX2luZGV4ID0gaHFfaW5kZXgob3AtPmxkcGNfZGVjLmhhcnFfY29tYmlu ZWRfb3V0cHV0Lm9mZnNldCk7DQo+ID4gKw0KPiA+ICsJaWYgKGZjdy0+aGNpbl9lbiA+IDApIHsN Cj4gPiArCQloYXJxX2luX2xlbmd0aCA9IG9wLT5sZHBjX2RlYy5oYXJxX2NvbWJpbmVkX2lucHV0 Lmxlbmd0aDsNCj4gPiArCQlpZiAoZmN3LT5oY2luX2RlY29tcF9tb2RlID4gMCkNCj4gPiArCQkJ aGFycV9pbl9sZW5ndGggPSBoYXJxX2luX2xlbmd0aCAqIDggLyA2Ow0KPiA+ICsJCWhhcnFfaW5f bGVuZ3RoID0gUlRFX01JTihoYXJxX2luX2xlbmd0aCwgb3AtDQo+ID5sZHBjX2RlYy5uX2NiDQo+ ID4gKwkJCQktIG9wLT5sZHBjX2RlYy5uX2ZpbGxlcik7DQo+ID4gKwkJaGFycV9pbl9sZW5ndGgg PSBSVEVfQUxJR05fQ0VJTChoYXJxX2luX2xlbmd0aCwgNjQpOw0KPiA+ICsJCWZjdy0+aGNpbl9z aXplMCA9IGhhcnFfaW5fbGVuZ3RoOw0KPiA+ICsJCWZjdy0+aGNpbl9vZmZzZXQgPSAwOw0KPiA+ ICsJCWZjdy0+aGNpbl9zaXplMSA9IDA7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWZjdy0+aGNp bl9zaXplMCA9IDA7DQo+ID4gKwkJZmN3LT5oY2luX29mZnNldCA9IDA7DQo+ID4gKwkJZmN3LT5o Y2luX3NpemUxID0gMDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlmY3ctPml0bWF4ID0gb3AtPmxk cGNfZGVjLml0ZXJfbWF4Ow0KPiA+ICsJZmN3LT5pdHN0b3AgPSBjaGVja19iaXQob3AtPmxkcGNf ZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCQlSVEVfQkJERVZfTERQQ19JVEVSQVRJT05fU1RPUF9FTkFC TEUpOw0KPiA+ICsJZmN3LT5jbnVfYWxnbyA9IEFDQ19BTEdPX01TQTsNCj4gPiArCWZjdy0+c3lu ZF9wcmVjb2RlciA9IGZjdy0+aXRzdG9wOw0KPiA+ICsJLyoNCj4gPiArCSAqIFRoZXNlIGFyZSBh bGwgaW1wbGljaXRseSBzZXQNCj4gPiArCSAqIGZjdy0+c3luZF9wb3N0ID0gMDsNCj4gPiArCSAq IGZjdy0+c29fZW4gPSAwOw0KPiA+ICsJICogZmN3LT5zb19ieXBhc3Nfcm0gPSAwOw0KPiA+ICsJ ICogZmN3LT5zb19ieXBhc3NfaW50bHYgPSAwOw0KPiA+ICsJICogZmN3LT5kZWNfY29udmxsciA9 IDA7DQo+ID4gKwkgKiBmY3ctPmhjb3V0X2NvbnZsbHIgPSAwOw0KPiA+ICsJICogZmN3LT5oY291 dF9zaXplMSA9IDA7DQo+ID4gKwkgKiBmY3ctPnNvX2l0ID0gMDsNCj4gPiArCSAqIGZjdy0+aGNv dXRfb2Zmc2V0ID0gMDsNCj4gPiArCSAqIGZjdy0+bmVnc3RvcF90aCA9IDA7DQo+ID4gKwkgKiBm Y3ctPm5lZ3N0b3BfaXQgPSAwOw0KPiA+ICsJICogZmN3LT5uZWdzdG9wX2VuID0gMDsNCj4gPiAr CSAqIGZjdy0+Z2Fpbl9pID0gMTsNCj4gPiArCSAqIGZjdy0+Z2Fpbl9oID0gMTsNCj4gPiArCSAq Lw0KPiA+ICsJaWYgKGZjdy0+aGNvdXRfZW4gPiAwKSB7DQo+ID4gKwkJcGFyaXR5X29mZnNldCA9 IChvcC0+bGRwY19kZWMuYmFzZWdyYXBoID09IDEgPyAyMCA6IDgpDQo+ID4gKwkJCSogb3AtPmxk cGNfZGVjLnpfYyAtIG9wLT5sZHBjX2RlYy5uX2ZpbGxlcjsNCj4gPiArCQlrMF9wID0gKGZjdy0+ azAgPiBwYXJpdHlfb2Zmc2V0KSA/DQo+ID4gKwkJCQlmY3ctPmswIC0gb3AtPmxkcGNfZGVjLm5f ZmlsbGVyIDogZmN3LT5rMDsNCj4gPiArCQluY2JfcCA9IGZjdy0+bmNiIC0gb3AtPmxkcGNfZGVj Lm5fZmlsbGVyOw0KPiA+ICsJCWwgPSBrMF9wICsgZmN3LT5ybV9lOw0KPiA+ICsJCWhhcnFfb3V0 X2xlbmd0aCA9ICh1aW50MTZfdCkgZmN3LT5oY2luX3NpemUwOw0KPiA+ICsJCWhhcnFfb3V0X2xl bmd0aCA9IFJURV9NSU4oUlRFX01BWChoYXJxX291dF9sZW5ndGgsIGwpLA0KPiBuY2JfcCk7DQo+ ID4gKwkJaGFycV9vdXRfbGVuZ3RoID0gUlRFX0FMSUdOX0NFSUwoaGFycV9vdXRfbGVuZ3RoLCA2 NCk7DQo+ID4gKwkJZmN3LT5oY291dF9zaXplMCA9IGhhcnFfb3V0X2xlbmd0aDsNCj4gPiArCQlm Y3ctPmhjb3V0X3NpemUxID0gMDsNCj4gPiArCQlmY3ctPmhjb3V0X29mZnNldCA9IDA7DQo+ID4g KwkJaGFycV9sYXlvdXRbaGFycV9pbmRleF0ub2Zmc2V0ID0gZmN3LT5oY291dF9vZmZzZXQ7DQo+ ID4gKwkJaGFycV9sYXlvdXRbaGFycV9pbmRleF0uc2l6ZTAgPSBmY3ctPmhjb3V0X3NpemUwOw0K PiA+ICsJfSBlbHNlIHsNCj4gPiArCQlmY3ctPmhjb3V0X3NpemUwID0gMDsNCj4gPiArCQlmY3ct Pmhjb3V0X3NpemUxID0gMDsNCj4gPiArCQlmY3ctPmhjb3V0X29mZnNldCA9IDA7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJZmN3LT50Yl9jcmNfc2VsZWN0ID0gMDsNCj4gPiArCWlmIChjaGVja19i aXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCQlSVEVfQkJERVZfTERQQ19DUkNfVFlQ RV8yNEFfQ0hFQ0spKQ0KPiA+ICsJCWZjdy0+dGJfY3JjX3NlbGVjdCA9IDI7DQo+ID4gKwlpZiAo Y2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPiArCQkJUlRFX0JCREVWX0xEUENf Q1JDX1RZUEVfMTZfQ0hFQ0spKQ0KPiA+ICsJCWZjdy0+dGJfY3JjX3NlbGVjdCA9IDE7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ID4gK2FjYzIwMF9kbWFfZGVzY19s ZV9maWxsKHN0cnVjdCBydGVfYmJkZXZfZW5jX29wICpvcCwNCj4gPiArCQlzdHJ1Y3QgYWNjX2Rt YV9yZXFfZGVzYyAqZGVzYywgc3RydWN0IHJ0ZV9tYnVmICoqaW5wdXQsDQo+ID4gKwkJc3RydWN0 IHJ0ZV9tYnVmICpvdXRwdXQsIHVpbnQzMl90ICppbl9vZmZzZXQsDQo+ID4gKwkJdWludDMyX3Qg Km91dF9vZmZzZXQsIHVpbnQzMl90ICpvdXRfbGVuZ3RoLA0KPiA+ICsJCXVpbnQzMl90ICptYnVm X3RvdGFsX2xlZnQsIHVpbnQzMl90ICpzZWdfdG90YWxfbGVmdCkNCj4gPiArew0KPiA+ICsJaW50 IG5leHRfdHJpcGxldCA9IDE7IC8qIEZDVyBhbHJlYWR5IGRvbmUgKi8NCj4gPiArCXVpbnQxNl90 IEssIGluX2xlbmd0aF9pbl9iaXRzLCBpbl9sZW5ndGhfaW5fYnl0ZXM7DQo+ID4gKwlzdHJ1Y3Qg cnRlX2JiZGV2X29wX2xkcGNfZW5jICplbmMgPSAmb3AtPmxkcGNfZW5jOw0KPiA+ICsNCj4gPiAr CWFjY19oZWFkZXJfaW5pdChkZXNjKTsNCj4gPiArCUsgPSAoZW5jLT5iYXNlZ3JhcGggPT0gMSA/ IDIyIDogMTApICogZW5jLT56X2M7DQo+ID4gKwlpbl9sZW5ndGhfaW5fYml0cyA9IEsgLSBlbmMt Pm5fZmlsbGVyOw0KPiA+ICsJaWYgKChlbmMtPm9wX2ZsYWdzICYgUlRFX0JCREVWX0xEUENfQ1JD XzI0QV9BVFRBQ0gpIHx8DQo+ID4gKwkJCShlbmMtPm9wX2ZsYWdzICYNCj4gUlRFX0JCREVWX0xE UENfQ1JDXzI0Ql9BVFRBQ0gpKQ0KPiA+ICsJCWluX2xlbmd0aF9pbl9iaXRzIC09IDI0Ow0KPiA+ ICsJaW5fbGVuZ3RoX2luX2J5dGVzID0gaW5fbGVuZ3RoX2luX2JpdHMgPj4gMzsNCj4gPiArDQo+ ID4gKwlpZiAodW5saWtlbHkoKCptYnVmX3RvdGFsX2xlZnQgPT0gMCkgfHwNCj4gPiArCQkJKCpt YnVmX3RvdGFsX2xlZnQgPCBpbl9sZW5ndGhfaW5fYnl0ZXMpKSkgew0KPiA+ICsJCXJ0ZV9iYmRl dl9sb2coRVJSLA0KPiA+ICsJCQkJIk1pc21hdGNoIGJldHdlZW4gbWJ1ZiBsZW5ndGggYW5kDQo+ IGluY2x1ZGVkIENCIHNpemVzOiBtYnVmIGxlbiAldSwgY2IgbGVuICV1IiwNCj4gPiArCQkJCSpt YnVmX3RvdGFsX2xlZnQsIGluX2xlbmd0aF9pbl9ieXRlcyk7DQo+ID4gKwkJcmV0dXJuIC0xOw0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCW5leHRfdHJpcGxldCA9IGFjY19kbWFfZmlsbF9ibGtfdHlw ZV9pbihkZXNjLCBpbnB1dCwgaW5fb2Zmc2V0LA0KPiA+ICsJCQlpbl9sZW5ndGhfaW5fYnl0ZXMs DQo+ID4gKwkJCXNlZ190b3RhbF9sZWZ0LCBuZXh0X3RyaXBsZXQsDQo+ID4gKwkJCWNoZWNrX2Jp dChvcC0+bGRwY19lbmMub3BfZmxhZ3MsDQo+ID4gKwkJCVJURV9CQkRFVl9MRFBDX0VOQ19TQ0FU VEVSX0dBVEhFUikpOw0KPiA+ICsJaWYgKHVubGlrZWx5KG5leHRfdHJpcGxldCA8IDApKSB7DQo+ ID4gKwkJcnRlX2JiZGV2X2xvZyhFUlIsDQo+ID4gKwkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBkYXRh IHRvIHByb2Nlc3MgYW5kDQo+IG1idWYgZGF0YSBsZW5ndGggaW4gYmJkZXZfb3A6ICVwIiwNCj4g PiArCQkJCW9wKTsNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKwl9DQo+ID4gKwlkZXNjLT5kYXRh X3B0cnNbbmV4dF90cmlwbGV0IC0gMV0ubGFzdCA9IDE7DQo+ID4gKwlkZXNjLT5tMmRsZW4gPSBu ZXh0X3RyaXBsZXQ7DQo+ID4gKwkqbWJ1Zl90b3RhbF9sZWZ0IC09IGluX2xlbmd0aF9pbl9ieXRl czsNCj4gPiArDQo+ID4gKwkvKiBTZXQgb3V0cHV0IGxlbmd0aCAqLw0KPiA+ICsJLyogSW50ZWdl ciByb3VuZCB1cCBkaXZpc2lvbiBieSA4ICovDQo+ID4gKwkqb3V0X2xlbmd0aCA9IChlbmMtPmNi X3BhcmFtcy5lICsgNykgPj4gMzsNCj4gPiArDQo+ID4gKwluZXh0X3RyaXBsZXQgPSBhY2NfZG1h X2ZpbGxfYmxrX3R5cGUoZGVzYywgb3V0cHV0LCAqb3V0X29mZnNldCwNCj4gPiArCQkJKm91dF9s ZW5ndGgsIG5leHRfdHJpcGxldCwNCj4gQUNDX0RNQV9CTEtJRF9PVVRfRU5DKTsNCj4gPiArCW9w LT5sZHBjX2VuYy5vdXRwdXQubGVuZ3RoICs9ICpvdXRfbGVuZ3RoOw0KPiA+ICsJKm91dF9vZmZz ZXQgKz0gKm91dF9sZW5ndGg7DQo+ID4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0IC0g MV0ubGFzdCA9IDE7DQo+ID4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0IC0gMV0uZG1h X2V4dCA9IDA7DQo+ID4gKwlkZXNjLT5kMm1sZW4gPSBuZXh0X3RyaXBsZXQgLSBkZXNjLT5tMmRs ZW47DQo+ID4gKw0KPiA+ICsJZGVzYy0+b3BfYWRkciA9IG9wOw0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludA0KPiA+ICthY2MyMDBf ZG1hX2Rlc2NfbGRfZmlsbChzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqb3AsDQo+ID4gKwkJc3Ry dWN0IGFjY19kbWFfcmVxX2Rlc2MgKmRlc2MsDQo+ID4gKwkJc3RydWN0IHJ0ZV9tYnVmICoqaW5w dXQsIHN0cnVjdCBydGVfbWJ1ZiAqaF9vdXRwdXQsDQo+ID4gKwkJdWludDMyX3QgKmluX29mZnNl dCwgdWludDMyX3QgKmhfb3V0X29mZnNldCwNCj4gPiArCQl1aW50MzJfdCAqaF9vdXRfbGVuZ3Ro LCB1aW50MzJfdCAqbWJ1Zl90b3RhbF9sZWZ0LA0KPiA+ICsJCXVpbnQzMl90ICpzZWdfdG90YWxf bGVmdCwNCj4gPiArCQlzdHJ1Y3QgYWNjX2Zjd19sZCAqZmN3KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgcnRlX2JiZGV2X29wX2xkcGNfZGVjICpkZWMgPSAmb3AtPmxkcGNfZGVjOw0KPiA+ICsJaW50 IG5leHRfdHJpcGxldCA9IDE7IC8qIEZDVyBhbHJlYWR5IGRvbmUgKi8NCj4gPiArCXVpbnQzMl90 IGlucHV0X2xlbmd0aDsNCj4gPiArCXVpbnQxNl90IG91dHB1dF9sZW5ndGgsIGNyYzI0X292ZXJs YXAgPSAwOw0KPiA+ICsJdWludDE2X3Qgc3lzX2NvbHMsIEssIGhfcF9zaXplLCBoX25wX3NpemU7 DQo+ID4gKwlib29sIGhfY29tcCA9IGNoZWNrX2JpdChkZWMtPm9wX2ZsYWdzLA0KPiA+ICsJCQlS VEVfQkJERVZfTERQQ19IQVJRXzZCSVRfQ09NUFJFU1NJT04pOw0KPiA+ICsNCj4gPiArCWFjY19o ZWFkZXJfaW5pdChkZXNjKTsNCj4gPiArDQo+ID4gKwlpZiAoY2hlY2tfYml0KG9wLT5sZHBjX2Rl Yy5vcF9mbGFncywNCj4gPiArCQkJUlRFX0JCREVWX0xEUENfQ1JDX1RZUEVfMjRCX0RST1ApKQ0K PiA+ICsJCWNyYzI0X292ZXJsYXAgPSAyNDsNCj4gPiArDQo+ID4gKwkvKiBDb21wdXRlIHNvbWUg TERQQyBCRyBsZW5ndGhzICovDQo+ID4gKwlpbnB1dF9sZW5ndGggPSBmY3ctPnJtX2U7DQo+ID4g KwlpZiAoY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPiArCQkJUlRFX0JCREVW X0xEUENfTExSX0NPTVBSRVNTSU9OKSkNCj4gPiArCQlpbnB1dF9sZW5ndGggPSAoaW5wdXRfbGVu Z3RoICogMyArIDMpIC8gNDsNCj4gPiArCXN5c19jb2xzID0gKGRlYy0+YmFzZWdyYXBoID09IDEp ID8gMjIgOiAxMDsNCj4gPiArCUsgPSBzeXNfY29scyAqIGRlYy0+el9jOw0KPiA+ICsJb3V0cHV0 X2xlbmd0aCA9IEsgLSBkZWMtPm5fZmlsbGVyIC0gY3JjMjRfb3ZlcmxhcDsNCj4gPiArDQo+ID4g KwlpZiAodW5saWtlbHkoKCptYnVmX3RvdGFsX2xlZnQgPT0gMCkgfHwNCj4gPiArCQkJKCptYnVm X3RvdGFsX2xlZnQgPCBpbnB1dF9sZW5ndGgpKSkgew0KPiA+ICsJCXJ0ZV9iYmRldl9sb2coRVJS LA0KPiA+ICsJCQkJIk1pc21hdGNoIGJldHdlZW4gbWJ1ZiBsZW5ndGggYW5kDQo+IGluY2x1ZGVk IENCIHNpemVzOiBtYnVmIGxlbiAldSwgY2IgbGVuICV1IiwNCj4gPiArCQkJCSptYnVmX3RvdGFs X2xlZnQsIGlucHV0X2xlbmd0aCk7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCW5leHRfdHJpcGxldCA9IGFjY19kbWFfZmlsbF9ibGtfdHlwZV9pbihkZXNjLCBpbnB1 dCwNCj4gPiArCQkJaW5fb2Zmc2V0LCBpbnB1dF9sZW5ndGgsDQo+ID4gKwkJCXNlZ190b3RhbF9s ZWZ0LCBuZXh0X3RyaXBsZXQsDQo+ID4gKwkJCWNoZWNrX2JpdChvcC0+bGRwY19kZWMub3BfZmxh Z3MsDQo+ID4gKwkJCVJURV9CQkRFVl9MRFBDX0RFQ19TQ0FUVEVSX0dBVEhFUikpOw0KPiA+ICsN Cj4gPiArCWlmICh1bmxpa2VseShuZXh0X3RyaXBsZXQgPCAwKSkgew0KPiA+ICsJCXJ0ZV9iYmRl dl9sb2coRVJSLA0KPiA+ICsJCQkJIk1pc21hdGNoIGJldHdlZW4gZGF0YSB0byBwcm9jZXNzIGFu ZA0KPiBtYnVmIGRhdGEgbGVuZ3RoIGluIGJiZGV2X29wOiAlcCIsDQo+ID4gKwkJCQlvcCk7DQo+ ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChjaGVja19iaXQob3At PmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+ICsNCj4gCVJURV9CQkRFVl9MRFBDX0hRX0NPTUJJTkVf SU5fRU5BQkxFKSkgew0KPiA+ICsJCWlmIChvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9pbnB1 dC5kYXRhID09IDApIHsNCj4gPiArCQkJcnRlX2JiZGV2X2xvZyhFUlIsICJIQVJRIGlucHV0IGlz IG5vdCBkZWZpbmVkIik7DQo+ID4gKwkJCXJldHVybiAtMTsNCj4gPiArCQl9DQo+ID4gKwkJaF9w X3NpemUgPSBmY3ctPmhjaW5fc2l6ZTAgKyBmY3ctPmhjaW5fc2l6ZTE7DQo+ID4gKwkJaWYgKGhf Y29tcCkNCj4gPiArCQkJaF9wX3NpemUgPSAoaF9wX3NpemUgKiAzICsgMykgLyA0Ow0KPiA+ICsJ CWlmIChvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9pbnB1dC5kYXRhID09IDApIHsNCj4gPiAr CQkJcnRlX2JiZGV2X2xvZyhFUlIsICJIQVJRIGlucHV0IGlzIG5vdCBkZWZpbmVkIik7DQo+ID4g KwkJCXJldHVybiAtMTsNCj4gPiArCQl9DQo+ID4gKwkJYWNjX2RtYV9maWxsX2Jsa190eXBlKA0K PiA+ICsJCQkJZGVzYywNCj4gPiArCQkJCW9wLT5sZHBjX2RlYy5oYXJxX2NvbWJpbmVkX2lucHV0 LmRhdGEsDQo+ID4gKwkJCQlvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9pbnB1dC5vZmZzZXQs DQo+ID4gKwkJCQloX3Bfc2l6ZSwNCj4gPiArCQkJCW5leHRfdHJpcGxldCwNCj4gPiArCQkJCUFD Q19ETUFfQkxLSURfSU5fSEFSUSk7DQo+ID4gKwkJbmV4dF90cmlwbGV0Kys7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldCAtIDFdLmxhc3QgPSAxOw0K PiA+ICsJZGVzYy0+bTJkbGVuID0gbmV4dF90cmlwbGV0Ow0KPiA+ICsJKm1idWZfdG90YWxfbGVm dCAtPSBpbnB1dF9sZW5ndGg7DQo+ID4gKw0KPiA+ICsJbmV4dF90cmlwbGV0ID0gYWNjX2RtYV9m aWxsX2Jsa190eXBlKGRlc2MsIGhfb3V0cHV0LA0KPiA+ICsJCQkqaF9vdXRfb2Zmc2V0LCBvdXRw dXRfbGVuZ3RoID4+IDMsIG5leHRfdHJpcGxldCwNCj4gPiArCQkJQUNDX0RNQV9CTEtJRF9PVVRf SEFSRCk7DQo+ID4gKw0KPiA+ICsJaWYgKGNoZWNrX2JpdChvcC0+bGRwY19kZWMub3BfZmxhZ3Ms DQo+ID4gKw0KPiAJUlRFX0JCREVWX0xEUENfSFFfQ09NQklORV9PVVRfRU5BQkxFKSkgew0KPiA+ ICsJCWlmIChvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRwdXQuZGF0YSA9PSAwKSB7DQo+ ID4gKwkJCXJ0ZV9iYmRldl9sb2coRVJSLCAiSEFSUSBvdXRwdXQgaXMgbm90IGRlZmluZWQiKTsN Cj4gPiArCQkJcmV0dXJuIC0xOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJLyogUHJ1bmVkIHNp emUgb2YgdGhlIEhBUlEgKi8NCj4gPiArCQloX3Bfc2l6ZSA9IGZjdy0+aGNvdXRfc2l6ZTAgKyBm Y3ctPmhjb3V0X3NpemUxOw0KPiA+ICsJCS8qIE5vbi1QcnVuZWQgc2l6ZSBvZiB0aGUgSEFSUSAq Lw0KPiA+ICsJCWhfbnBfc2l6ZSA9IGZjdy0+aGNvdXRfb2Zmc2V0ID4gMCA/DQo+ID4gKwkJCQlm Y3ctPmhjb3V0X29mZnNldCArIGZjdy0+aGNvdXRfc2l6ZTEgOg0KPiA+ICsJCQkJaF9wX3NpemU7 DQo+ID4gKwkJaWYgKGhfY29tcCkgew0KPiA+ICsJCQloX25wX3NpemUgPSAoaF9ucF9zaXplICog MyArIDMpIC8gNDsNCj4gPiArCQkJaF9wX3NpemUgPSAoaF9wX3NpemUgKiAzICsgMykgLyA0Ow0K PiA+ICsJCX0NCj4gPiArCQlkZWMtPmhhcnFfY29tYmluZWRfb3V0cHV0Lmxlbmd0aCA9IGhfbnBf c2l6ZTsNCj4gPiArCQlhY2NfZG1hX2ZpbGxfYmxrX3R5cGUoDQo+ID4gKwkJCQlkZXNjLA0KPiA+ ICsJCQkJZGVjLT5oYXJxX2NvbWJpbmVkX291dHB1dC5kYXRhLA0KPiA+ICsJCQkJZGVjLT5oYXJx X2NvbWJpbmVkX291dHB1dC5vZmZzZXQsDQo+ID4gKwkJCQloX3Bfc2l6ZSwNCj4gPiArCQkJCW5l eHRfdHJpcGxldCwNCj4gPiArCQkJCUFDQ19ETUFfQkxLSURfT1VUX0hBUlEpOw0KPiA+ICsNCj4g PiArCQluZXh0X3RyaXBsZXQrKzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkqaF9vdXRfbGVuZ3Ro ID0gb3V0cHV0X2xlbmd0aCA+PiAzOw0KPiA+ICsJZGVjLT5oYXJkX291dHB1dC5sZW5ndGggKz0g Kmhfb3V0X2xlbmd0aDsNCj4gPiArCSpoX291dF9vZmZzZXQgKz0gKmhfb3V0X2xlbmd0aDsNCj4g PiArCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXQgLSAxXS5sYXN0ID0gMTsNCj4gPiArCWRl c2MtPmQybWxlbiA9IG5leHRfdHJpcGxldCAtIGRlc2MtPm0yZGxlbjsNCj4gPiArDQo+ID4gKwlk ZXNjLT5vcF9hZGRyID0gb3A7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiA+ICthY2MyMDBfZG1hX2Rlc2NfbGRfdXBkYXRl KHN0cnVjdCBydGVfYmJkZXZfZGVjX29wICpvcCwNCj4gPiArCQlzdHJ1Y3QgYWNjX2RtYV9yZXFf ZGVzYyAqZGVzYywNCj4gPiArCQlzdHJ1Y3QgcnRlX21idWYgKmlucHV0LCBzdHJ1Y3QgcnRlX21i dWYgKmhfb3V0cHV0LA0KPiA+ICsJCXVpbnQzMl90ICppbl9vZmZzZXQsIHVpbnQzMl90ICpoX291 dF9vZmZzZXQsDQo+ID4gKwkJdWludDMyX3QgKmhfb3V0X2xlbmd0aCwNCj4gPiArCQl1bmlvbiBh Y2NfaGFycV9sYXlvdXRfZGF0YSAqaGFycV9sYXlvdXQpDQo+ID4gK3sNCj4gPiArCWludCBuZXh0 X3RyaXBsZXQgPSAxOyAvKiBGQ1cgYWxyZWFkeSBkb25lICovDQo+ID4gKwlkZXNjLT5kYXRhX3B0 cnNbbmV4dF90cmlwbGV0XS5hZGRyZXNzID0NCj4gPiArCQkJcnRlX3BrdG1idWZfaW92YV9vZmZz ZXQoaW5wdXQsICppbl9vZmZzZXQpOw0KPiA+ICsJbmV4dF90cmlwbGV0Kys7DQo+ID4gKw0KPiA+ ICsJaWYgKGNoZWNrX2JpdChvcC0+bGRwY19kZWMub3BfZmxhZ3MsDQo+ID4gKw0KPiAJUlRFX0JC REVWX0xEUENfSFFfQ09NQklORV9JTl9FTkFCTEUpKSB7DQo+ID4gKwkJc3RydWN0IHJ0ZV9iYmRl dl9vcF9kYXRhIGhpID0gb3AtDQo+ID5sZHBjX2RlYy5oYXJxX2NvbWJpbmVkX2lucHV0Ow0KPiA+ ICsJCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmFkZHJlc3MgPQ0KPiA+ICsJCQkJcnRl X3BrdG1idWZfaW92YV9vZmZzZXQoaGkuZGF0YSwgaGkub2Zmc2V0KTsNCj4gPiArCQluZXh0X3Ry aXBsZXQrKzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlw bGV0XS5hZGRyZXNzID0NCj4gPiArCQkJcnRlX3BrdG1idWZfaW92YV9vZmZzZXQoaF9vdXRwdXQs ICpoX291dF9vZmZzZXQpOw0KPiA+ICsJKmhfb3V0X2xlbmd0aCA9IGRlc2MtPmRhdGFfcHRyc1tu ZXh0X3RyaXBsZXRdLmJsZW47DQo+ID4gKwluZXh0X3RyaXBsZXQrKzsNCj4gPiArDQo+ID4gKwlp ZiAoY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPiArDQo+IAlSVEVfQkJERVZf TERQQ19IUV9DT01CSU5FX09VVF9FTkFCTEUpKSB7DQo+ID4gKwkJLyogQWRqdXN0IGJhc2VkIG9u IHByZXZpb3VzIG9wZXJhdGlvbiAqLw0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfZGVjX29wICpw cmV2X29wID0gZGVzYy0+b3BfYWRkcjsNCj4gPiArCQlvcC0+bGRwY19kZWMuaGFycV9jb21iaW5l ZF9vdXRwdXQubGVuZ3RoID0NCj4gPiArCQkJCXByZXZfb3AtDQo+ID5sZHBjX2RlYy5oYXJxX2Nv bWJpbmVkX291dHB1dC5sZW5ndGg7DQo+ID4gKwkJdWludDMyX3QgaGFycV9pZHggPSBocV9pbmRl eCgNCj4gPiArCQkJCW9wLQ0KPiA+bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRwdXQub2Zmc2V0 KTsNCj4gPiArCQl1aW50MzJfdCBwcmV2X2hhcnFfaWR4ID0gaHFfaW5kZXgoDQo+ID4gKwkJCQlw cmV2X29wLQ0KPiA+bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRwdXQub2Zmc2V0KTsNCj4gPiAr CQloYXJxX2xheW91dFtoYXJxX2lkeF0udmFsID0gaGFycV9sYXlvdXRbcHJldl9oYXJxX2lkeF0u dmFsOw0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfb3BfZGF0YSBobyA9DQo+ID4gKwkJCQlvcC0+ bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRwdXQ7DQo+ID4gKwkJZGVzYy0+ZGF0YV9wdHJzW25l eHRfdHJpcGxldF0uYWRkcmVzcyA9DQo+ID4gKwkJCQlydGVfcGt0bWJ1Zl9pb3ZhX29mZnNldCho by5kYXRhLA0KPiBoby5vZmZzZXQpOw0KPiA+ICsJCW5leHRfdHJpcGxldCsrOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCW9wLT5sZHBjX2RlYy5oYXJkX291dHB1dC5sZW5ndGggKz0gKmhfb3V0X2xl bmd0aDsNCj4gPiArCWRlc2MtPm9wX2FkZHIgPSBvcDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyog RW5xdWV1ZSBvbmUgZW5jb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBkZXZpY2UgaW4gQ0IgbW9k ZQ0KPiA+ICsgKiBtdWx0aXBsZXhlZCBvbiB0aGUgc2FtZSBkZXNjcmlwdG9yDQo+ID4gKyAqLw0K PiA+ICtzdGF0aWMgaW5saW5lIGludA0KPiA+ICtlbnF1ZXVlX2xkcGNfZW5jX25fb3BfY2Ioc3Ry dWN0IGFjY19xdWV1ZSAqcSwgc3RydWN0DQo+IHJ0ZV9iYmRldl9lbmNfb3AgKipvcHMsDQo+ID4g KwkJdWludDE2X3QgdG90YWxfZW5xdWV1ZWRfZGVzY3MsIGludDE2X3QgbnVtKQ0KPiA+ICt7DQo+ ID4gKwl1bmlvbiBhY2NfZG1hX2Rlc2MgKmRlc2MgPSBOVUxMOw0KPiA+ICsJdWludDMyX3Qgb3V0 X2xlbmd0aDsNCj4gPiArCXN0cnVjdCBydGVfbWJ1ZiAqb3V0cHV0X2hlYWQsICpvdXRwdXQ7DQo+ ID4gKwlpbnQgaSwgbmV4dF90cmlwbGV0Ow0KPiA+ICsJdWludDE2X3QgIGluX2xlbmd0aF9pbl9i eXRlczsNCj4gPiArCXN0cnVjdCBydGVfYmJkZXZfb3BfbGRwY19lbmMgKmVuYyA9ICZvcHNbMF0t PmxkcGNfZW5jOw0KPiA+ICsNCj4gPiArCXVpbnQxNl90IGRlc2NfaWR4ID0gKChxLT5zd19yaW5n X2hlYWQgKyB0b3RhbF9lbnF1ZXVlZF9kZXNjcykNCj4gPiArCQkJJiBxLT5zd19yaW5nX3dyYXBf bWFzayk7DQo+ID4gKwlkZXNjID0gcS0+cmluZ19hZGRyICsgZGVzY19pZHg7DQo+ID4gKwlhY2Nf ZmN3X2xlX2ZpbGwob3BzWzBdLCAmZGVzYy0+cmVxLmZjd19sZSwgbnVtLCAwKTsNCj4gPiArDQo+ ID4gKwkvKiogVGhpcyBjb3VsZCBiZSBkb25lIGF0IHBvbGxpbmcgKi8NCj4gPiArCWFjY19oZWFk ZXJfaW5pdCgmZGVzYy0+cmVxKTsNCj4gPiArCWRlc2MtPnJlcS5udW1DQnMgPSBudW07DQo+ID4g Kw0KPiA+ICsJaW5fbGVuZ3RoX2luX2J5dGVzID0gb3BzWzBdLT5sZHBjX2VuYy5pbnB1dC5kYXRh LT5kYXRhX2xlbjsNCj4gPiArCW91dF9sZW5ndGggPSAoZW5jLT5jYl9wYXJhbXMuZSArIDcpID4+ IDM7DQo+ID4gKwlkZXNjLT5yZXEubTJkbGVuID0gMSArIG51bTsNCj4gPiArCWRlc2MtPnJlcS5k Mm1sZW4gPSBudW07DQo+ID4gKwluZXh0X3RyaXBsZXQgPSAxOw0KPiA+ICsNCj4gPiArCWZvciAo aSA9IDA7IGkgPCBudW07IGkrKykgew0KPiA+ICsJCWRlc2MtPnJlcS5kYXRhX3B0cnNbbmV4dF90 cmlwbGV0XS5hZGRyZXNzID0NCj4gPiArCQkJcnRlX3BrdG1idWZfaW92YV9vZmZzZXQob3BzW2ld LQ0KPiA+bGRwY19lbmMuaW5wdXQuZGF0YSwgMCk7DQo+ID4gKwkJZGVzYy0+cmVxLmRhdGFfcHRy c1tuZXh0X3RyaXBsZXRdLmJsZW4gPSBpbl9sZW5ndGhfaW5fYnl0ZXM7DQo+ID4gKwkJbmV4dF90 cmlwbGV0Kys7DQo+ID4gKwkJZGVzYy0+cmVxLmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmFkZHJl c3MgPQ0KPiA+ICsJCQkJcnRlX3BrdG1idWZfaW92YV9vZmZzZXQoDQo+ID4gKwkJCQlvcHNbaV0t PmxkcGNfZW5jLm91dHB1dC5kYXRhLCAwKTsNCj4gPiArCQlkZXNjLT5yZXEuZGF0YV9wdHJzW25l eHRfdHJpcGxldF0uYmxlbiA9IG91dF9sZW5ndGg7DQo+ID4gKwkJbmV4dF90cmlwbGV0Kys7DQo+ ID4gKwkJb3BzW2ldLT5sZHBjX2VuYy5vdXRwdXQubGVuZ3RoID0gb3V0X2xlbmd0aDsNCj4gPiAr CQlvdXRwdXRfaGVhZCA9IG91dHB1dCA9IG9wc1tpXS0+bGRwY19lbmMub3V0cHV0LmRhdGE7DQo+ ID4gKwkJbWJ1Zl9hcHBlbmQob3V0cHV0X2hlYWQsIG91dHB1dCwgb3V0X2xlbmd0aCk7DQo+ID4g KwkJb3V0cHV0LT5kYXRhX2xlbiA9IG91dF9sZW5ndGg7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ ZGVzYy0+cmVxLm9wX2FkZHIgPSBvcHNbMF07DQo+ID4gKwkvKiBLZWVwIHRyYWNrIG9mIHBvaW50 ZXJzIGV2ZW4gd2hlbiBtdWx0aXBsZXhlZCBpbiBzaW5nbGUgZGVzY3JpcHRvcg0KPiAqLw0KPiA+ ICsJc3RydWN0IGFjY19wdHJzICpjb250ZXh0X3B0cnMgPSBxLT5jb21wYW5pb25fcmluZ19hZGRy ICsgZGVzY19pZHg7DQo+IA0KPiBEb24ndCBtaXggZGVjbGFyYXRpb25zICYgY29kZS4NCg0KT0sN Cg0KPiANCj4gPiArCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykNCj4gPiArCQljb250ZXh0X3B0 cnMtPnB0cltpXS5vcF9hZGRyID0gb3BzW2ldOw0KPiA+ICsNCj4gPiArI2lmZGVmIFJURV9MSUJS VEVfQkJERVZfREVCVUcNCj4gPiArCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIkZDVyIsICZkZXNjLT5y ZXEuZmN3X2xlLA0KPiA+ICsJCQlzaXplb2YoZGVzYy0+cmVxLmZjd19sZSkgLSA4KTsNCj4gPiAr CXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIlJlcSBEZXNjLiIsIGRlc2MsIHNpemVvZigqZGVzYykpOw0K PiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKwkvKiBPbmUgQ0IgKG9uZSBvcCkgd2FzIHN1Y2Nlc3Nm dWxseSBwcmVwYXJlZCB0byBlbnF1ZXVlICovDQo+IA0KPiBteSB1bmRlcnN0YW5kaW5nIGlzIHRo YXQgaXQgaXMgbnVtIENCLCBub3Qgb25lLg0KDQpUaGFuc2sNCg0KPiANCj4gPiArCXJldHVybiBu dW07DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIEVucXVldWUgb25lIGVuY29kZSBvcGVyYXRpb25z IGZvciBBQ0MyMDAgZGV2aWNlIGZvciBhIHBhcnRpYWwgVEINCj4gPiArICogYWxsIGNvZGVzIGJs b2NrcyBoYXZlIHNhbWUgY29uZmlndXJhdGlvbiBtdWx0aXBsZXhlZCBvbiB0aGUgc2FtZQ0KPiBk ZXNjcmlwdG9yDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gPiArZW5xdWV1 ZV9sZHBjX2VuY19wYXJ0X3RiKHN0cnVjdCBhY2NfcXVldWUgKnEsIHN0cnVjdA0KPiBydGVfYmJk ZXZfZW5jX29wICpvcCwNCj4gPiArCQl1aW50MTZfdCB0b3RhbF9lbnF1ZXVlZF9kZXNjcywgaW50 MTZfdCBudW1fY2JzLCB1aW50MzJfdA0KPiBlLA0KPiA+ICsJCXVpbnQxNl90IGluX2xlbl9CLCB1 aW50MzJfdCBvdXRfbGVuX0IsIHVpbnQzMl90ICppbl9vZmZzZXQsDQo+ID4gKwkJdWludDMyX3Qg Km91dF9vZmZzZXQpDQo+ID4gK3sNCj4gPiArDQo+ID4gKwl1bmlvbiBhY2NfZG1hX2Rlc2MgKmRl c2MgPSBOVUxMOw0KPiA+ICsJc3RydWN0IHJ0ZV9tYnVmICpvdXRwdXRfaGVhZCwgKm91dHB1dDsN Cj4gPiArCWludCBpLCBuZXh0X3RyaXBsZXQ7DQo+ID4gKwlzdHJ1Y3QgcnRlX2JiZGV2X29wX2xk cGNfZW5jICplbmMgPSAmb3AtPmxkcGNfZW5jOw0KPiA+ICsNCj4gPiArDQo+ID4gKwl1aW50MTZf dCBkZXNjX2lkeCA9ICgocS0+c3dfcmluZ19oZWFkICsgdG90YWxfZW5xdWV1ZWRfZGVzY3MpDQo+ ID4gKwkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0KPiA+ICsJZGVzYyA9IHEtPnJpbmdfYWRk ciArIGRlc2NfaWR4Ow0KPiA+ICsJYWNjX2Zjd19sZV9maWxsKG9wLCAmZGVzYy0+cmVxLmZjd19s ZSwgbnVtX2NicywgZSk7DQo+ID4gKw0KPiA+ICsJLyoqIFRoaXMgY291bGQgYmUgZG9uZSBhdCBw b2xsaW5nICovDQo+ID4gKwlhY2NfaGVhZGVyX2luaXQoJmRlc2MtPnJlcSk7DQo+ID4gKwlkZXNj LT5yZXEubnVtQ0JzID0gbnVtX2NiczsNCj4gPiArDQo+ID4gKwlkZXNjLT5yZXEubTJkbGVuID0g MSArIG51bV9jYnM7DQo+ID4gKwlkZXNjLT5yZXEuZDJtbGVuID0gbnVtX2NiczsNCj4gPiArCW5l eHRfdHJpcGxldCA9IDE7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jYnM7IGkr Kykgew0KPiA+ICsJCWRlc2MtPnJlcS5kYXRhX3B0cnNbbmV4dF90cmlwbGV0XS5hZGRyZXNzID0N Cj4gPiArCQkJcnRlX3BrdG1idWZfaW92YV9vZmZzZXQoZW5jLT5pbnB1dC5kYXRhLA0KPiA+ICsJ CQkJCSppbl9vZmZzZXQpOw0KPiA+ICsJCSppbl9vZmZzZXQgKz0gaW5fbGVuX0I7DQo+ID4gKwkJ ZGVzYy0+cmVxLmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmJsZW4gPSBpbl9sZW5fQjsNCj4gPiAr CQluZXh0X3RyaXBsZXQrKzsNCj4gPiArCQlkZXNjLT5yZXEuZGF0YV9wdHJzW25leHRfdHJpcGxl dF0uYWRkcmVzcyA9DQo+ID4gKwkJCQlydGVfcGt0bWJ1Zl9pb3ZhX29mZnNldCgNCj4gPiArCQkJ CQkJZW5jLT5vdXRwdXQuZGF0YSwNCj4gKm91dF9vZmZzZXQpOw0KPiA+ICsJCSpvdXRfb2Zmc2V0 ICs9IG91dF9sZW5fQjsNCj4gPiArCQlkZXNjLT5yZXEuZGF0YV9wdHJzW25leHRfdHJpcGxldF0u YmxlbiA9IG91dF9sZW5fQjsNCj4gPiArCQluZXh0X3RyaXBsZXQrKzsNCj4gPiArCQllbmMtPm91 dHB1dC5sZW5ndGggKz0gb3V0X2xlbl9COw0KPiA+ICsJCW91dHB1dF9oZWFkID0gb3V0cHV0ID0g ZW5jLT5vdXRwdXQuZGF0YTsNCj4gPiArCQltYnVmX2FwcGVuZChvdXRwdXRfaGVhZCwgb3V0cHV0 LCBvdXRfbGVuX0IpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArI2lmZGVmIFJURV9MSUJSVEVfQkJE RVZfREVCVUcNCj4gPiArCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIkZDVyIsICZkZXNjLT5yZXEuZmN3 X2xlLA0KPiA+ICsJCQlzaXplb2YoZGVzYy0+cmVxLmZjd19sZSkgLSA4KTsNCj4gPiArCXJ0ZV9t ZW1kdW1wKHN0ZGVyciwgIlJlcSBEZXNjLiIsIGRlc2MsIHNpemVvZigqZGVzYykpOw0KPiA+ICsj ZW5kaWYNCj4gPiArDQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIEVucXVldWUgb25lIGVuY29kZSBv cGVyYXRpb25zIGZvciBBQ0MyMDAgZGV2aWNlIGluIENCIG1vZGUgKi8NCj4gPiArc3RhdGljIGlu bGluZSBpbnQNCj4gPiArZW5xdWV1ZV9sZHBjX2VuY19vbmVfb3BfY2Ioc3RydWN0IGFjY19xdWV1 ZSAqcSwgc3RydWN0DQo+IHJ0ZV9iYmRldl9lbmNfb3AgKm9wLA0KPiA+ICsJCXVpbnQxNl90IHRv dGFsX2VucXVldWVkX2NicykNCj4gPiArew0KPiA+ICsJdW5pb24gYWNjX2RtYV9kZXNjICpkZXNj ID0gTlVMTDsNCj4gPiArCWludCByZXQ7DQo+ID4gKwl1aW50MzJfdCBpbl9vZmZzZXQsIG91dF9v ZmZzZXQsIG91dF9sZW5ndGgsIG1idWZfdG90YWxfbGVmdCwNCj4gPiArCQlzZWdfdG90YWxfbGVm dDsNCj4gPiArCXN0cnVjdCBydGVfbWJ1ZiAqaW5wdXQsICpvdXRwdXRfaGVhZCwgKm91dHB1dDsN Cj4gPiArDQo+ID4gKwl1aW50MTZfdCBkZXNjX2lkeCA9ICgocS0+c3dfcmluZ19oZWFkICsgdG90 YWxfZW5xdWV1ZWRfY2JzKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiAr CWRlc2MgPSBxLT5yaW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4gPiArCWFjY19mY3dfbGVfZmlsbChv cCwgJmRlc2MtPnJlcS5mY3dfbGUsIDEsIDApOw0KPiA+ICsNCj4gPiArCWlucHV0ID0gb3AtPmxk cGNfZW5jLmlucHV0LmRhdGE7DQo+ID4gKwlvdXRwdXRfaGVhZCA9IG91dHB1dCA9IG9wLT5sZHBj X2VuYy5vdXRwdXQuZGF0YTsNCj4gPiArCWluX29mZnNldCA9IG9wLT5sZHBjX2VuYy5pbnB1dC5v ZmZzZXQ7DQo+ID4gKwlvdXRfb2Zmc2V0ID0gb3AtPmxkcGNfZW5jLm91dHB1dC5vZmZzZXQ7DQo+ ID4gKwlvdXRfbGVuZ3RoID0gMDsNCj4gPiArCW1idWZfdG90YWxfbGVmdCA9IG9wLT5sZHBjX2Vu Yy5pbnB1dC5sZW5ndGg7DQo+ID4gKwlzZWdfdG90YWxfbGVmdCA9IHJ0ZV9wa3RtYnVmX2RhdGFf bGVuKG9wLT5sZHBjX2VuYy5pbnB1dC5kYXRhKQ0KPiA+ICsJCQktIGluX29mZnNldDsNCj4gPiAr DQo+ID4gKwlyZXQgPSBhY2MyMDBfZG1hX2Rlc2NfbGVfZmlsbChvcCwgJmRlc2MtPnJlcSwgJmlu cHV0LCBvdXRwdXQsDQo+ID4gKwkJCSZpbl9vZmZzZXQsICZvdXRfb2Zmc2V0LCAmb3V0X2xlbmd0 aCwNCj4gJm1idWZfdG90YWxfbGVmdCwNCj4gPiArCQkJJnNlZ190b3RhbF9sZWZ0KTsNCj4gPiAr DQo+ID4gKwlpZiAodW5saWtlbHkocmV0IDwgMCkpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiAr DQo+ID4gKwltYnVmX2FwcGVuZChvdXRwdXRfaGVhZCwgb3V0cHV0LCBvdXRfbGVuZ3RoKTsNCj4g PiArDQo+ID4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4gKwlydGVfbWVtZHVt cChzdGRlcnIsICJGQ1ciLCAmZGVzYy0+cmVxLmZjd19sZSwNCj4gPiArCQkJc2l6ZW9mKGRlc2Mt PnJlcS5mY3dfbGUpIC0gOCk7DQo+ID4gKwlydGVfbWVtZHVtcChzdGRlcnIsICJSZXEgRGVzYy4i LCBkZXNjLCBzaXplb2YoKmRlc2MpKTsNCj4gPiArDQo+ID4gKwlpZiAoY2hlY2tfbWJ1Zl90b3Rh bF9sZWZ0KG1idWZfdG90YWxfbGVmdCkgIT0gMCkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g PiArI2VuZGlmDQo+ID4gKwkvKiBPbmUgQ0IgKG9uZSBvcCkgd2FzIHN1Y2Nlc3NmdWxseSBwcmVw YXJlZCB0byBlbnF1ZXVlICovDQo+ID4gKwlyZXR1cm4gMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyogRW5xdWV1ZSBvbmUgZW5jb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBkZXZpY2UgaW4gVEIg bW9kZS4NCj4gPiArICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlc2NzIHVzZWQNCj4gPiArICov DQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ID4gK2VucXVldWVfbGRwY19lbmNfb25lX29wX3Ri KHN0cnVjdCBhY2NfcXVldWUgKnEsIHN0cnVjdA0KPiBydGVfYmJkZXZfZW5jX29wICpvcCwNCj4g PiArCQl1aW50MTZfdCBlbnFfZGVzY3MsIHVpbnQ4X3QgY2JzX2luX3RiKQ0KPiA+ICt7DQo+ID4g Kwl1aW50OF90IG51bV9hLCBudW1fYjsNCj4gPiArCXVpbnQxNl90IGRlc2NfaWR4Ow0KPiA+ICsJ dWludDhfdCByID0gb3AtPmxkcGNfZW5jLnRiX3BhcmFtcy5yOw0KPiA+ICsJdWludDhfdCBjYWIg PSAgb3AtPmxkcGNfZW5jLnRiX3BhcmFtcy5jYWI7DQo+ID4gKwl1bmlvbiBhY2NfZG1hX2Rlc2Mg KmRlc2M7DQo+ID4gKwl1aW50MTZfdCBpbml0X2VucV9kZXNjcyA9IGVucV9kZXNjczsNCj4gPiAr CXVpbnQxNl90IGlucHV0X2xlbl9CID0gKChvcC0+bGRwY19lbmMuYmFzZWdyYXBoID09IDEgPyAy MiA6IDEwKSAqDQo+ID4gKwkJCW9wLT5sZHBjX2VuYy56X2MpID4+IDM7DQo+ID4gKwlpZiAoY2hl Y2tfYml0KG9wLT5sZHBjX2VuYy5vcF9mbGFncywNCj4gUlRFX0JCREVWX0xEUENfQ1JDXzI0Ql9B VFRBQ0gpKQ0KPiA+ICsJCWlucHV0X2xlbl9CIC09IDM7DQo+ID4gKw0KPiA+ICsJaWYgKHIgPCBj YWIpIHsNCj4gPiArCQludW1fYSA9IGNhYiAtIHI7DQo+ID4gKwkJbnVtX2IgPSBjYnNfaW5fdGIg LSBjYWI7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCW51bV9hID0gMDsNCj4gPiArCQludW1fYiA9 IGNic19pbl90YiAtIHI7DQo+ID4gKwl9DQo+ID4gKwl1aW50MzJfdCBpbl9vZmZzZXQgPSAwLCBv dXRfb2Zmc2V0ID0gMDsNCj4gDQo+IERvbid0IG1peCBkZWNsYXJhdGlvbnMgJiBjb2RlLg0KDQpP Sw0KDQo+IA0KPiA+ICsNCj4gPiArCXdoaWxlIChudW1fYSA+IDApIHsNCj4gPiArCQl1aW50MzJf dCBlID0gb3AtPmxkcGNfZW5jLnRiX3BhcmFtcy5lYTsNCj4gPiArCQl1aW50MzJfdCBvdXRfbGVu X0IgPSAoZSArIDcpID4+IDM7DQo+ID4gKwkJdWludDhfdCBlbnEgPSBSVEVfTUlOKG51bV9hLCBB Q0NfTVVYXzVHRExfREVTQyk7DQo+ID4gKwkJbnVtX2EgLT0gZW5xOw0KPiA+ICsJCWVucXVldWVf bGRwY19lbmNfcGFydF90YihxLCBvcCwgZW5xX2Rlc2NzLCBlbnEsIGUsDQo+IGlucHV0X2xlbl9C LA0KPiA+ICsJCQkJb3V0X2xlbl9CLCAmaW5fb2Zmc2V0LCAmb3V0X29mZnNldCk7DQo+ID4gKwkJ ZW5xX2Rlc2NzKys7DQo+ID4gKwl9DQo+ID4gKwl3aGlsZSAobnVtX2IgPiAwKSB7DQo+ID4gKwkJ dWludDMyX3QgZSA9IG9wLT5sZHBjX2VuYy50Yl9wYXJhbXMuZWI7DQo+ID4gKwkJdWludDMyX3Qg b3V0X2xlbl9CID0gKGUgKyA3KSA+PiAzOw0KPiA+ICsJCXVpbnQ4X3QgZW5xID0gUlRFX01JTihu dW1fYiwgQUNDX01VWF81R0RMX0RFU0MpOw0KPiA+ICsJCW51bV9iIC09IGVucTsNCj4gPiArCQll bnF1ZXVlX2xkcGNfZW5jX3BhcnRfdGIocSwgb3AsIGVucV9kZXNjcywgZW5xLCBlLA0KPiBpbnB1 dF9sZW5fQiwNCj4gPiArCQkJCW91dF9sZW5fQiwgJmluX29mZnNldCwgJm91dF9vZmZzZXQpOw0K PiA+ICsJCWVucV9kZXNjcysrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXVpbnQxNl90IHJldHVy bl9kZXNjcyA9IGVucV9kZXNjcyAtIGluaXRfZW5xX2Rlc2NzOw0KPiANCj4gRG9uJ3QgbWl4IGRl Y2xhcmF0aW9ucyAmIGNvZGUuDQoNCk9LDQoNCj4gDQo+ID4gKwkvKiBLZWVwIHRvdGFsIG51bWJl ciBvZiBDQnMgaW4gZmlyc3QgVEIgKi8NCj4gPiArCWRlc2NfaWR4ID0gKChxLT5zd19yaW5nX2hl YWQgKyBpbml0X2VucV9kZXNjcykNCj4gPiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ ID4gKwlkZXNjID0gcS0+cmluZ19hZGRyICsgZGVzY19pZHg7DQo+ID4gKwlkZXNjLT5yZXEuY2Jz X2luX3RiID0gcmV0dXJuX2Rlc2NzOyAvKiogQWN0dWFsIG51bWJlciBvZg0KPiBkZXNjcmlwdG9y cyAqLw0KPiA+ICsJZGVzYy0+cmVxLm9wX2FkZHIgPSBvcDsNCj4gPiArDQo+ID4gKwkvKiBTZXQg U0RvbmUgb24gbGFzdCBDQiBkZXNjcmlwdG9yIGZvciBUQiBtb2RlLiAqLw0KPiA+ICsJZGVzY19p ZHggPSAoKHEtPnN3X3JpbmdfaGVhZCArIGVucV9kZXNjcyAtIDEpDQo+ID4gKwkJCSYgcS0+c3df cmluZ193cmFwX21hc2spOw0KPiA+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciArIGRlc2NfaWR4Ow0K PiA+ICsJZGVzYy0+cmVxLnNkb25lX2VuYWJsZSA9IDE7DQo+ID4gKwlkZXNjLT5yZXEuaXJxX2Vu YWJsZSA9IHEtPmlycV9lbmFibGU7DQo+ID4gKwlkZXNjLT5yZXEub3BfYWRkciA9IG9wOw0KPiA+ ICsJcmV0dXJuIHJldHVybl9kZXNjczsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqIEVucXVldWUg b25lIGRlY29kZSBvcGVyYXRpb25zIGZvciBBQ0MyMDAgZGV2aWNlIGluIENCIG1vZGUgKi8NCj4g PiArc3RhdGljIGlubGluZSBpbnQNCj4gPiArZW5xdWV1ZV9sZHBjX2RlY19vbmVfb3BfY2Ioc3Ry dWN0IGFjY19xdWV1ZSAqcSwgc3RydWN0DQo+IHJ0ZV9iYmRldl9kZWNfb3AgKm9wLA0KPiA+ICsJ CXVpbnQxNl90IHRvdGFsX2VucXVldWVkX2NicywgYm9vbCBzYW1lX29wKQ0KPiA+ICt7DQo+ID4g KwlpbnQgcmV0LCBocV9sZW47DQo+ID4gKwlpZiAob3AtPmxkcGNfZGVjLmNiX3BhcmFtcy5lID09 IDApDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiBEb24ndCBtaXggZGVjbGFyYXRpb25z ICYgY29kZS4NCg0KT0sNCg0KPiANCj4gPiArCXVuaW9uIGFjY19kbWFfZGVzYyAqZGVzYzsNCj4g PiArCXVpbnQxNl90IGRlc2NfaWR4ID0gKChxLT5zd19yaW5nX2hlYWQgKyB0b3RhbF9lbnF1ZXVl ZF9jYnMpDQo+ID4gKwkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0KPiA+ICsJZGVzYyA9IHEt PnJpbmdfYWRkciArIGRlc2NfaWR4Ow0KPiA+ICsJc3RydWN0IHJ0ZV9tYnVmICppbnB1dCwgKmhf b3V0cHV0X2hlYWQsICpoX291dHB1dDsNCj4gDQo+IERvbid0IG1peCBkZWNsYXJhdGlvbnMgJiBj b2RlLg0KPiANCj4gPiArCXVpbnQzMl90IGluX29mZnNldCwgaF9vdXRfb2Zmc2V0LCBtYnVmX3Rv dGFsX2xlZnQsIGhfb3V0X2xlbmd0aCA9IDA7DQo+ID4gKwlpbnB1dCA9IG9wLT5sZHBjX2RlYy5p bnB1dC5kYXRhOw0KPiA+ICsJaF9vdXRwdXRfaGVhZCA9IGhfb3V0cHV0ID0gb3AtPmxkcGNfZGVj LmhhcmRfb3V0cHV0LmRhdGE7DQo+ID4gKwlpbl9vZmZzZXQgPSBvcC0+bGRwY19kZWMuaW5wdXQu b2Zmc2V0Ow0KPiA+ICsJaF9vdXRfb2Zmc2V0ID0gb3AtPmxkcGNfZGVjLmhhcmRfb3V0cHV0Lm9m ZnNldDsNCj4gPiArCW1idWZfdG90YWxfbGVmdCA9IG9wLT5sZHBjX2RlYy5pbnB1dC5sZW5ndGg7 DQo+ID4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4gKwlpZiAodW5saWtlbHko aW5wdXQgPT0gTlVMTCkpIHsNCj4gPiArCQlydGVfYmJkZXZfbG9nKEVSUiwgIkludmFsaWQgbWJ1 ZiBwb2ludGVyIik7DQo+ID4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKwl9DQo+ID4gKyNlbmRp Zg0KPiA+ICsJdW5pb24gYWNjX2hhcnFfbGF5b3V0X2RhdGEgKmhhcnFfbGF5b3V0ID0gcS0+ZC0+ aGFycV9sYXlvdXQ7DQo+ID4NCj4gRG9uJ3QgbWl4IGRlY2xhcmF0aW9ucyAmIGNvZGUuDQoNCk9L DQoNCj4gDQo+ID4gKwlpZiAoc2FtZV9vcCkgew0KPiA+ICsJCXVuaW9uIGFjY19kbWFfZGVzYyAq cHJldl9kZXNjOw0KPiA+ICsJCWRlc2NfaWR4ID0gKChxLT5zd19yaW5nX2hlYWQgKyB0b3RhbF9l bnF1ZXVlZF9jYnMgLSAxKQ0KPiA+ICsJCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4g KwkJcHJldl9kZXNjID0gcS0+cmluZ19hZGRyICsgZGVzY19pZHg7DQo+ID4gKwkJdWludDhfdCAq cHJldl9wdHIgPSAodWludDhfdCAqKSBwcmV2X2Rlc2M7DQo+ID4gKwkJdWludDhfdCAqbmV3X3B0 ciA9ICh1aW50OF90ICopIGRlc2M7DQo+ID4gKwkJLyogQ29weSBmaXJzdCA0IHdvcmRzIGFuZCBC REVTQ3MgKi8NCj4gPiArCQlydGVfbWVtY3B5KG5ld19wdHIsIHByZXZfcHRyLCBBQ0NfNUdVTF9T SVpFXzApOw0KPiA+ICsJCXJ0ZV9tZW1jcHkobmV3X3B0ciArIEFDQ181R1VMX09GRlNFVF8wLA0K PiA+ICsJCQkJcHJldl9wdHIgKyBBQ0NfNUdVTF9PRkZTRVRfMCwNCj4gPiArCQkJCUFDQ181R1VM X1NJWkVfMSk7DQo+ID4gKwkJZGVzYy0+cmVxLm9wX2FkZHIgPSBwcmV2X2Rlc2MtPnJlcS5vcF9h ZGRyOw0KPiA+ICsJCS8qIENvcHkgRkNXICovDQo+ID4gKwkJcnRlX21lbWNweShuZXdfcHRyICsg QUNDX0RFU0NfRkNXX09GRlNFVCwNCj4gPiArCQkJCXByZXZfcHRyICsgQUNDX0RFU0NfRkNXX09G RlNFVCwNCj4gPiArCQkJCUFDQ19GQ1dfTERfQkxFTik7DQo+ID4gKwkJYWNjMjAwX2RtYV9kZXNj X2xkX3VwZGF0ZShvcCwgJmRlc2MtPnJlcSwgaW5wdXQsDQo+IGhfb3V0cHV0LA0KPiA+ICsJCQkJ JmluX29mZnNldCwgJmhfb3V0X29mZnNldCwNCj4gPiArCQkJCSZoX291dF9sZW5ndGgsIGhhcnFf bGF5b3V0KTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJc3RydWN0IGFjY19mY3dfbGQgKmZjdzsN Cj4gPiArCQl1aW50MzJfdCBzZWdfdG90YWxfbGVmdDsNCj4gPiArCQlmY3cgPSAmZGVzYy0+cmVx LmZjd19sZDsNCj4gPiArCQlhY2MyMDBfZmN3X2xkX2ZpbGwob3AsIGZjdywgaGFycV9sYXlvdXQp Ow0KPiA+ICsNCj4gPiArCQkvKiBTcGVjaWFsIGhhbmRsaW5nIHdoZW4gdXNpbmcgbWJ1ZiBvciBu b3QgKi8NCj4gPiArCQlpZiAoY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPiAr CQkJUlRFX0JCREVWX0xEUENfREVDX1NDQVRURVJfR0FUSEVSKSkNCj4gPiArCQkJc2VnX3RvdGFs X2xlZnQgPSBydGVfcGt0bWJ1Zl9kYXRhX2xlbihpbnB1dCkNCj4gPiArCQkJCQktIGluX29mZnNl dDsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXNlZ190b3RhbF9sZWZ0ID0gZmN3LT5ybV9lOw0KPiA+ ICsNCj4gPiArCQlyZXQgPSBhY2MyMDBfZG1hX2Rlc2NfbGRfZmlsbChvcCwgJmRlc2MtPnJlcSwg JmlucHV0LA0KPiBoX291dHB1dCwNCj4gPiArCQkJCSZpbl9vZmZzZXQsICZoX291dF9vZmZzZXQs DQo+ID4gKwkJCQkmaF9vdXRfbGVuZ3RoLCAmbWJ1Zl90b3RhbF9sZWZ0LA0KPiA+ICsJCQkJJnNl Z190b3RhbF9sZWZ0LCBmY3cpOw0KPiA+ICsJCWlmICh1bmxpa2VseShyZXQgPCAwKSkNCj4gPiAr CQkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBIYXJkIG91dHB1dCAqLw0K PiA+ICsJbWJ1Zl9hcHBlbmQoaF9vdXRwdXRfaGVhZCwgaF9vdXRwdXQsIGhfb3V0X2xlbmd0aCk7 DQo+ID4gKwlpZiAob3AtPmxkcGNfZGVjLmhhcnFfY29tYmluZWRfb3V0cHV0Lmxlbmd0aCA+IDAp IHsNCj4gPiArCQkvKiBQdXNoIHRoZSBIQVJRIG91dHB1dCBpbnRvIGhvc3QgbWVtb3J5ICovDQo+ ID4gKwkJc3RydWN0IHJ0ZV9tYnVmICpocV9vdXRwdXRfaGVhZCwgKmhxX291dHB1dDsNCj4gPiAr CQlocV9vdXRwdXRfaGVhZCA9IG9wLQ0KPiA+bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRwdXQu ZGF0YTsNCj4gPiArCQlocV9vdXRwdXQgPSBvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRw dXQuZGF0YTsNCj4gPiArCQlocV9sZW4gPSBvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRw dXQubGVuZ3RoOw0KPiA+ICsJCWlmICh1bmxpa2VseSghbWJ1Zl9hcHBlbmQoaHFfb3V0cHV0X2hl YWQsIGhxX291dHB1dCwNCj4gPiArCQkJCWhxX2xlbikpKSB7DQo+ID4gKwkJCXJ0ZV9iYmRldl9s b2coRVJSLCAiSEFSUSBvdXRwdXQgbWJ1ZiBpc3N1ZSAlZA0KPiAlZFxuIiwNCj4gPiArCQkJCQlo cV9vdXRwdXQtPmJ1Zl9sZW4sDQo+ID4gKwkJCQkJaHFfbGVuKTsNCj4gPiArCQkJcmV0dXJuIC0x Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVW X0RFQlVHDQo+ID4gKwlydGVfbWVtZHVtcChzdGRlcnIsICJGQ1ciLCAmZGVzYy0+cmVxLmZjd19s ZCwNCj4gPiArCQkJc2l6ZW9mKGRlc2MtPnJlcS5mY3dfbGQpIC0gOCk7DQo+ID4gKwlydGVfbWVt ZHVtcChzdGRlcnIsICJSZXEgRGVzYy4iLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsNCj4gPiArI2Vu ZGlmDQo+ID4gKw0KPiA+ICsJLyogT25lIENCIChvbmUgb3ApIHdhcyBzdWNjZXNzZnVsbHkgcHJl cGFyZWQgdG8gZW5xdWV1ZSAqLw0KPiA+ICsJcmV0dXJuIDE7DQo+ID4gK30NCj4gPiArDQo+ID4g Kw0KPiA+ICsvKiBFbnF1ZXVlIG9uZSBkZWNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMjAwIGRldmlj ZSBpbiBUQiBtb2RlICovDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ID4gK2VucXVldWVfbGRw Y19kZWNfb25lX29wX3RiKHN0cnVjdCBhY2NfcXVldWUgKnEsIHN0cnVjdA0KPiBydGVfYmJkZXZf ZGVjX29wICpvcCwNCj4gPiArCQl1aW50MTZfdCB0b3RhbF9lbnF1ZXVlZF9jYnMsIHVpbnQ4X3Qg Y2JzX2luX3RiKQ0KPiA+ICt7DQo+ID4gKwl1bmlvbiBhY2NfZG1hX2Rlc2MgKmRlc2MgPSBOVUxM Ow0KPiA+ICsJdW5pb24gYWNjX2RtYV9kZXNjICpkZXNjX2ZpcnN0ID0gTlVMTDsNCj4gPiArCWlu dCByZXQ7DQo+ID4gKwl1aW50OF90IHIsIGM7DQo+ID4gKwl1aW50MzJfdCBpbl9vZmZzZXQsIGhf b3V0X29mZnNldCwNCj4gPiArCQloX291dF9sZW5ndGgsIG1idWZfdG90YWxfbGVmdCwgc2VnX3Rv dGFsX2xlZnQ7DQo+ID4gKwlzdHJ1Y3QgcnRlX21idWYgKmlucHV0LCAqaF9vdXRwdXRfaGVhZCwg Kmhfb3V0cHV0Ow0KPiA+ICsJdWludDE2X3QgY3VycmVudF9lbnF1ZXVlZF9jYnMgPSAwOw0KPiA+ ICsJdWludDE2X3Qgc3lzX2NvbHMsIHRyYWlsX2xlbiA9IDA7DQo+ID4gKw0KPiA+ICsJdWludDE2 X3QgZGVzY19pZHggPSAoKHEtPnN3X3JpbmdfaGVhZCArIHRvdGFsX2VucXVldWVkX2NicykNCj4g PiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4gKwlkZXNjID0gcS0+cmluZ19hZGRy ICsgZGVzY19pZHg7DQo+ID4gKwlkZXNjX2ZpcnN0ID0gZGVzYzsNCj4gPiArCXVpbnQ2NF90IGZj d19vZmZzZXQgPSAoZGVzY19pZHggPDwgOCkgKyBBQ0NfREVTQ19GQ1dfT0ZGU0VUOw0KPiA+ICsJ dW5pb24gYWNjX2hhcnFfbGF5b3V0X2RhdGEgKmhhcnFfbGF5b3V0ID0gcS0+ZC0+aGFycV9sYXlv dXQ7DQo+ID4gKwlhY2MyMDBfZmN3X2xkX2ZpbGwob3AsICZkZXNjLT5yZXEuZmN3X2xkLCBoYXJx X2xheW91dCk7DQo+ID4gKw0KPiA+ICsJaW5wdXQgPSBvcC0+bGRwY19kZWMuaW5wdXQuZGF0YTsN Cj4gPiArCWhfb3V0cHV0X2hlYWQgPSBoX291dHB1dCA9IG9wLT5sZHBjX2RlYy5oYXJkX291dHB1 dC5kYXRhOw0KPiA+ICsJaW5fb2Zmc2V0ID0gb3AtPmxkcGNfZGVjLmlucHV0Lm9mZnNldDsNCj4g PiArCWhfb3V0X29mZnNldCA9IG9wLT5sZHBjX2RlYy5oYXJkX291dHB1dC5vZmZzZXQ7DQo+ID4g KwloX291dF9sZW5ndGggPSAwOw0KPiA+ICsJbWJ1Zl90b3RhbF9sZWZ0ID0gb3AtPmxkcGNfZGVj LmlucHV0Lmxlbmd0aDsNCj4gPiArCWMgPSBvcC0+bGRwY19kZWMudGJfcGFyYW1zLmM7DQo+ID4g KwlyID0gb3AtPmxkcGNfZGVjLnRiX3BhcmFtcy5yOw0KPiA+ICsJaWYgKGNoZWNrX2JpdChvcC0+ bGRwY19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJCVJURV9CQkRFVl9MRFBDX0NSQ19UWVBFXzI0QV9D SEVDSykpIHsNCj4gPiArCQlzeXNfY29scyA9IChvcC0+bGRwY19kZWMuYmFzZWdyYXBoID09IDEp ID8gMjIgOiAxMDsNCj4gPiArCQl0cmFpbF9sZW4gPSBzeXNfY29scyAqIG9wLT5sZHBjX2RlYy56 X2MgLQ0KPiA+ICsJCQkJb3AtPmxkcGNfZGVjLm5fZmlsbGVyIC0gMjQ7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJd2hpbGUgKG1idWZfdG90YWxfbGVmdCA+IDAgJiYgciA8IGMpIHsNCj4gPiArCQlp ZiAoY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPiArCQkJCVJURV9CQkRFVl9M RFBDX0RFQ19TQ0FUVEVSX0dBVEhFUikpDQo+ID4gKwkJCXNlZ190b3RhbF9sZWZ0ID0gcnRlX3Br dG1idWZfZGF0YV9sZW4oaW5wdXQpDQo+ID4gKwkJCQkJLSBpbl9vZmZzZXQ7DQo+ID4gKwkJZWxz ZQ0KPiA+ICsJCQlzZWdfdG90YWxfbGVmdCA9IG9wLT5sZHBjX2RlYy5pbnB1dC5sZW5ndGg7DQo+ ID4gKwkJLyogU2V0IHVwIERNQSBkZXNjcmlwdG9yICovDQo+ID4gKwkJZGVzY19pZHggPSAoKHEt PnN3X3JpbmdfaGVhZCArIHRvdGFsX2VucXVldWVkX2NicykNCj4gPiArCQkJCSYgcS0+c3dfcmlu Z193cmFwX21hc2spOw0KPiA+ICsJCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4g PiArCQlmY3dfb2Zmc2V0ID0gKGRlc2NfaWR4IDw8IDgpICsgQUNDX0RFU0NfRkNXX09GRlNFVDsN Cj4gPiArCQlkZXNjLT5yZXEuZGF0YV9wdHJzWzBdLmFkZHJlc3MgPSBxLT5yaW5nX2FkZHJfaW92 YSArDQo+ID4gKwkJCQlmY3dfb2Zmc2V0Ow0KPiA+ICsJCWRlc2MtPnJlcS5kYXRhX3B0cnNbMF0u YmxlbiA9IEFDQ19GQ1dfTERfQkxFTjsNCj4gPiArCQlydGVfbWVtY3B5KCZkZXNjLT5yZXEuZmN3 X2xkLCAmZGVzY19maXJzdC0+cmVxLmZjd19sZCwNCj4gPiArCQkJCUFDQ19GQ1dfTERfQkxFTik7 DQo+ID4gKwkJZGVzYy0+cmVxLmZjd19sZC50Yl90cmFpbGVyX3NpemUgPSAoYyAtIHIgLSAxKSAq IHRyYWlsX2xlbjsNCj4gPiArDQo+ID4gKwkJcmV0ID0gYWNjMjAwX2RtYV9kZXNjX2xkX2ZpbGwo b3AsICZkZXNjLT5yZXEsICZpbnB1dCwNCj4gPiArCQkJCWhfb3V0cHV0LCAmaW5fb2Zmc2V0LCAm aF9vdXRfb2Zmc2V0LA0KPiA+ICsJCQkJJmhfb3V0X2xlbmd0aCwNCj4gPiArCQkJCSZtYnVmX3Rv dGFsX2xlZnQsICZzZWdfdG90YWxfbGVmdCwNCj4gPiArCQkJCSZkZXNjLT5yZXEuZmN3X2xkKTsN Cj4gPiArDQo+ID4gKwkJaWYgKHVubGlrZWx5KHJldCA8IDApKQ0KPiA+ICsJCQlyZXR1cm4gcmV0 Ow0KPiA+ICsNCj4gPiArCQkvKiBIYXJkIG91dHB1dCAqLw0KPiA+ICsJCW1idWZfYXBwZW5kKGhf b3V0cHV0X2hlYWQsIGhfb3V0cHV0LCBoX291dF9sZW5ndGgpOw0KPiA+ICsNCj4gPiArCQkvKiBT ZXQgdG90YWwgbnVtYmVyIG9mIENCcyBpbiBUQiAqLw0KPiA+ICsJCWRlc2MtPnJlcS5jYnNfaW5f dGIgPSBjYnNfaW5fdGI7DQo+ID4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4g KwkJcnRlX21lbWR1bXAoc3RkZXJyLCAiRkNXIiwgJmRlc2MtPnJlcS5mY3dfdGQsDQo+ID4gKwkJ CQlzaXplb2YoZGVzYy0+cmVxLmZjd190ZCkgLSA4KTsNCj4gPiArCQlydGVfbWVtZHVtcChzdGRl cnIsICJSZXEgRGVzYy4iLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsNCj4gPiArI2VuZGlmDQo+ID4g KwkJaWYgKGNoZWNrX2JpdChvcC0+bGRwY19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJCQlSVEVfQkJE RVZfTERQQ19ERUNfU0NBVFRFUl9HQVRIRVIpDQo+ID4gKwkJCQkmJiAoc2VnX3RvdGFsX2xlZnQg PT0gMCkpIHsNCj4gPiArCQkJLyogR28gdG8gdGhlIG5leHQgbWJ1ZiAqLw0KPiA+ICsJCQlpbnB1 dCA9IGlucHV0LT5uZXh0Ow0KPiA+ICsJCQlpbl9vZmZzZXQgPSAwOw0KPiA+ICsJCQloX291dHB1 dCA9IGhfb3V0cHV0LT5uZXh0Ow0KPiA+ICsJCQloX291dF9vZmZzZXQgPSAwOw0KPiA+ICsJCX0N Cj4gPiArCQl0b3RhbF9lbnF1ZXVlZF9jYnMrKzsNCj4gPiArCQljdXJyZW50X2VucXVldWVkX2Ni cysrOw0KPiA+ICsJCXIrKzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKyNpZmRlZiBSVEVfTElCUlRF X0JCREVWX0RFQlVHDQo+ID4gKwlpZiAoY2hlY2tfbWJ1Zl90b3RhbF9sZWZ0KG1idWZfdG90YWxf bGVmdCkgIT0gMCkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArI2VuZGlmDQo+ID4gKwkv KiBTZXQgU0RvbmUgb24gbGFzdCBDQiBkZXNjcmlwdG9yIGZvciBUQiBtb2RlICovDQo+ID4gKwlk ZXNjLT5yZXEuc2RvbmVfZW5hYmxlID0gMTsNCj4gPiArCWRlc2MtPnJlcS5pcnFfZW5hYmxlID0g cS0+aXJxX2VuYWJsZTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gY3VycmVudF9lbnF1ZXVlZF9jYnM7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKiBFbnF1ZXVlIGVuY29kZSBvcGVyYXRpb25zIGZvciBB Q0MyMDAgZGV2aWNlIGluIENCIG1vZGUuICovDQo+ID4gK3N0YXRpYyBpbmxpbmUgdWludDE2X3QN Cj4gPiArYWNjMjAwX2VucXVldWVfbGRwY19lbmNfY2Ioc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9k YXRhICpxX2RhdGEsDQo+ID4gKwkJc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKipvcHMsIHVpbnQx Nl90IG51bSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGFjY19xdWV1ZSAqcSA9IHFfZGF0YS0+cXVl dWVfcHJpdmF0ZTsNCj4gPiArCWludDMyX3QgYXZhaWwgPSBhY2NfcmluZ19hdmFpbF9lbnEocSk7 DQo+ID4gKwl1aW50MTZfdCBpID0gMDsNCj4gPiArCXVuaW9uIGFjY19kbWFfZGVzYyAqZGVzYzsN Cj4gPiArCWludCByZXQsIGRlc2NfaWR4ID0gMDsNCj4gPiArCWludDE2X3QgZW5xLCBsZWZ0ID0g bnVtOw0KPiA+ICsNCj4gPiArCXdoaWxlIChsZWZ0ID4gMCkgew0KPiA+ICsJCWlmICh1bmxpa2Vs eShhdmFpbCA8IDEpKSB7DQo+ID4gKwkJCWFjY19lbnF1ZXVlX3JpbmdfZnVsbChxX2RhdGEpOw0K PiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwkJYXZhaWwtLTsNCj4gPiArCQllbnEgPSBS VEVfTUlOKGxlZnQsIEFDQ19NVVhfNUdETF9ERVNDKTsNCj4gPiArCQllbnEgPSBjaGVja19tdXgo Jm9wc1tpXSwgZW5xKTsNCj4gPiArCQlpZiAoZW5xID4gMSkgew0KPiA+ICsJCQlyZXQgPSBlbnF1 ZXVlX2xkcGNfZW5jX25fb3BfY2IocSwgJm9wc1tpXSwNCj4gPiArCQkJCQlkZXNjX2lkeCwgZW5x KTsNCj4gPiArCQkJaWYgKHJldCA8IDApIHsNCj4gPiArCQkJCWFjY19lbnF1ZXVlX2ludmFsaWQo cV9kYXRhKTsNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsJCQl9DQo+ID4gKwkJCWkgKz0gZW5xOw0K PiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCXJldCA9IGVucXVldWVfbGRwY19lbmNfb25lX29wX2Ni KHEsIG9wc1tpXSwNCj4gZGVzY19pZHgpOw0KPiANCj4gTG9va2luZyBhdCB0aGUgY29kZSBvZiBl bnF1ZXVlX2xkcGNfZW5jX29uZV9vcF9jYiBhbmQNCj4gZW5xdWV1ZV9sZHBjX2VuY19uX29wX2Ni LCB0aGVyZSBzaG91bGQgbm90IGJlIG11Y2ggcGVyZm9ybWFuY2UNCj4gZGlmZmVyZW5jZSBieSBv bmx5IHVzaW5nIGVucXVldWVfbGRwY19lbmNfbl9vcF9jYiBldmVuIGZvciBzaW5nbGUgZW5jLg0K PiANCj4gSXQgZXZlbiBsb29rcyBsaWtlIGVucXVldWVfbGRwY19lbmNfb25lX29wX2NiIGlzIGhl YXZpZXIsIGNvdWxkIHlvdQ0KPiBleHBsYWluIHRoZSBkaWZmZXJlbmNlPw0KPiANCj4gSXQgd291 bGQgbWFrZSBtYWludGFpbmFuY2UgZWFzaWVyIHRvIGhhdmUgYSBzaW5nbGUgZnVuY3Rpb24uDQoN ClRoYXQncyBhIGdvb2QgcG9pbnQuIFRoYW5rcy4gDQoNCj4gDQo+ID4gKwkJCWlmIChyZXQgPCAw KSB7DQo+ID4gKwkJCQlhY2NfZW5xdWV1ZV9pbnZhbGlkKHFfZGF0YSk7DQo+ID4gKwkJCQlicmVh azsNCj4gPiArCQkJfQ0KPiA+ICsJCQlpKys7DQo+ID4gKwkJfQ0KPiA+ICsJCWRlc2NfaWR4Kys7 DQo+ID4gKwkJbGVmdCA9IG51bSAtIGk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlr ZWx5KGkgPT0gMCkpDQo+ID4gKwkJcmV0dXJuIDA7IC8qIE5vdGhpbmcgdG8gZW5xdWV1ZSAqLw0K PiA+ICsNCj4gPiArCS8qIFNldCBTRG9uZSBpbiBsYXN0IENCIGluIGVucXVldWVkIG9wcyBmb3Ig Q0IgbW9kZSovDQo+ID4gKwlkZXNjID0gcS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX2hlYWQg KyBkZXNjX2lkeCAtIDEpDQo+ID4gKwkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0KPiA+ICsJ ZGVzYy0+cmVxLnNkb25lX2VuYWJsZSA9IDE7DQo+ID4gKwlkZXNjLT5yZXEuaXJxX2VuYWJsZSA9 IHEtPmlycV9lbmFibGU7DQo+ID4gKw0KPiA+ICsJYWNjX2RtYV9lbnF1ZXVlKHEsIGRlc2NfaWR4 LCAmcV9kYXRhLT5xdWV1ZV9zdGF0cyk7DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIHN0YXRzICov DQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVkX2NvdW50ICs9IGk7DQo+ID4gKwlx X2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVfZXJyX2NvdW50ICs9IG51bSAtIGk7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIGk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIEVucXVldWUgTERQQyBlbmNv ZGUgb3BlcmF0aW9ucyBmb3IgQUNDMjAwIGRldmljZSBpbiBUQiBtb2RlLiAqLw0KPiA+ICtzdGF0 aWMgdWludDE2X3QNCj4gPiArYWNjMjAwX2VucXVldWVfbGRwY19lbmNfdGIoc3RydWN0IHJ0ZV9i YmRldl9xdWV1ZV9kYXRhICpxX2RhdGEsDQo+ID4gKwkJc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3Ag KipvcHMsIHVpbnQxNl90IG51bSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGFjY19xdWV1ZSAqcSA9 IHFfZGF0YS0+cXVldWVfcHJpdmF0ZTsNCj4gPiArCWludDMyX3QgYXZhaWwgPSBhY2NfcmluZ19h dmFpbF9lbnEocSk7DQo+ID4gKwl1aW50MTZfdCBpLCBlbnF1ZXVlZF9kZXNjcyA9IDA7DQo+ID4g Kwl1aW50OF90IGNic19pbl90YjsNCj4gPiArCWludCBkZXNjc191c2VkOw0KPiA+ICsNCj4gPiAr CWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgew0KPiA+ICsJCWNic19pbl90YiA9IGdldF9udW1f Y2JzX2luX3RiX2xkcGNfZW5jKCZvcHNbaV0tDQo+ID5sZHBjX2VuYyk7DQo+ID4gKwkJLyogQ2hl Y2sgaWYgdGhlcmUgYXJlIGF2YWlsYWJsZSBzcGFjZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nICov DQo+ID4gKwkJaWYgKHVubGlrZWx5KChhdmFpbCAtIGNic19pbl90YiA8IDApIHx8IChjYnNfaW5f dGIgPT0gMCkpKSB7DQo+ID4gKwkJCWFjY19lbnF1ZXVlX3JpbmdfZnVsbChxX2RhdGEpOw0KPiA+ ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWRlc2NzX3VzZWQgPSBlbnF1ZXVl X2xkcGNfZW5jX29uZV9vcF90YihxLCBvcHNbaV0sDQo+ID4gKwkJCQllbnF1ZXVlZF9kZXNjcywg Y2JzX2luX3RiKTsNCj4gPiArCQlpZiAoZGVzY3NfdXNlZCA8IDApIHsNCj4gPiArCQkJYWNjX2Vu cXVldWVfaW52YWxpZChxX2RhdGEpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwkJ ZW5xdWV1ZWRfZGVzY3MgKz0gZGVzY3NfdXNlZDsNCj4gPiArCQlhdmFpbCAtPSBkZXNjc191c2Vk Ow0KPiA+ICsJfQ0KPiA+ICsJaWYgKHVubGlrZWx5KGVucXVldWVkX2Rlc2NzID09IDApKQ0KPiA+ ICsJCXJldHVybiAwOyAvKiBOb3RoaW5nIHRvIGVucXVldWUgKi8NCj4gPiArDQo+ID4gKwlhY2Nf ZG1hX2VucXVldWUocSwgZW5xdWV1ZWRfZGVzY3MsICZxX2RhdGEtPnF1ZXVlX3N0YXRzKTsNCj4g PiArDQo+ID4gKwkvKiBVcGRhdGUgc3RhdHMgKi8NCj4gPiArCXFfZGF0YS0+cXVldWVfc3RhdHMu ZW5xdWV1ZWRfY291bnQgKz0gaTsNCj4gPiArCXFfZGF0YS0+cXVldWVfc3RhdHMuZW5xdWV1ZV9l cnJfY291bnQgKz0gbnVtIC0gaTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gaTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyogQ2hlY2sgcm9vbSBpbiBBUSBmb3IgdGhlIGVucXVldWVzIGJhdGNoZXMgaW50 byBRbWdyICovDQo+ID4gK3N0YXRpYyBpbnQzMl90DQo+ID4gK2FjYzIwMF9hcV9hdmFpbChzdHJ1 Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwgdWludDE2X3QNCj4gbnVtX29wcykNCj4g PiArew0KPiA+ICsJc3RydWN0IGFjY19xdWV1ZSAqcSA9IHFfZGF0YS0+cXVldWVfcHJpdmF0ZTsN Cj4gPiArCWludDMyX3QgYXFfYXZhaWwgPSBxLT5hcV9kZXB0aCAtDQo+ID4gKwkJCSgocS0+YXFf ZW5xdWV1ZWQgLSBxLT5hcV9kZXF1ZXVlZCArDQo+ID4gKwkJCUFDQ19NQVhfUVVFVUVfREVQVEgp ICUNCj4gQUNDX01BWF9RVUVVRV9ERVBUSCkNCj4gPiArCQkJLSAobnVtX29wcyA+PiA3KTsNCj4g PiArCWlmIChhcV9hdmFpbCA8PSAwKQ0KPiA+ICsJCWFjY19lbnF1ZXVlX3F1ZXVlX2Z1bGwocV9k YXRhKTsNCj4gPiArCXJldHVybiBhcV9hdmFpbDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogRW5x dWV1ZSBlbmNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMjAwIGRldmljZS4gKi8NCj4gPiArc3RhdGlj IHVpbnQxNl90DQo+ID4gK2FjYzIwMF9lbnF1ZXVlX2xkcGNfZW5jKHN0cnVjdCBydGVfYmJkZXZf cXVldWVfZGF0YSAqcV9kYXRhLA0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfZW5jX29wICoqb3Bz LCB1aW50MTZfdCBudW0pDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBhY2NfcXVldWUgKnEgPSBxX2Rh dGEtPnF1ZXVlX3ByaXZhdGU7DQo+ID4gKwlpbnQzMl90IGFxX2F2YWlsID0gYWNjX3JpbmdfYXZh aWxfZW5xKHEpOw0KPiANCj4gSW50cm9kdWNpbmcgbmV3IGxpbmUgaGVyZSBhbmQgYWZ0ZXIgdGhl IHJldHVybiAwIHdvdWxkIG5vdCBodXJ0IGFuZA0KPiBpbXByb3ZlIHJlYWRhYmlsaXR5Lg0KPiAN Cj4gVGhpcyBpcyBhIGdlbmVyYWwgY29tbWVudCBmb3IgdGhlIHNlcmllcywgd2hpY2ggbGFja3Mg Y29uc2lzdGVuY3kgb24NCj4gdGhpcyBwb2ludC4NCg0KV2VsbCBpcyB0aGVyZSBhbnkgZ2VuZXJh bCByZWNvbW1lbmRhdGlvbiB3ZSBjb3VsZCBwdXQgb24gRFBESyBvbiB0aGF0Pw0KVGhpcyBpcyBx dWl0ZSBzdWJqZWN0aXZlIHJlYWxseSBidXQgaGFwcHkgdG8gZm9sbG93IGFueSBndWlkZWxpbmVz IGlmIHdlIGNhbiBjYXB0dXJlIHRoZW0uIA0KRm9yIHNtYWxsIGZ1bmN0aW9ucyBsaWtlIHRoZXNl IEkgYW0gbm90IHN1cmUgaXQgaGVscHMgcmVhZGFiaWxpdHkuDQoNCj4gDQo+ID4gKwlpZiAodW5s aWtlbHkoKGFxX2F2YWlsIDw9IDApIHx8IChudW0gPT0gMCkpKQ0KPiA+ICsJCXJldHVybiAwOw0K PiA+ICsJaWYgKG9wc1swXS0+bGRwY19lbmMuY29kZV9ibG9ja19tb2RlID09DQo+IFJURV9CQkRF Vl9UUkFOU1BPUlRfQkxPQ0spDQo+ID4gKwkJcmV0dXJuIGFjYzIwMF9lbnF1ZXVlX2xkcGNfZW5j X3RiKHFfZGF0YSwgb3BzLCBudW0pOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXJldHVybiBhY2MyMDBf ZW5xdWV1ZV9sZHBjX2VuY19jYihxX2RhdGEsIG9wcywgbnVtKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyogRW5xdWV1ZSBkZWNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMjAwIGRldmljZSBpbiBUQiBt b2RlICovDQo+ID4gK3N0YXRpYyB1aW50MTZfdA0KPiA+ICthY2MyMDBfZW5xdWV1ZV9sZHBjX2Rl Y190YihzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwNCj4gPiArCQlzdHJ1Y3Qg cnRlX2JiZGV2X2RlY19vcCAqKm9wcywgdWludDE2X3QgbnVtKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgYWNjX3F1ZXVlICpxID0gcV9kYXRhLT5xdWV1ZV9wcml2YXRlOw0KPiA+ICsJaW50MzJfdCBh dmFpbCA9IGFjY19yaW5nX2F2YWlsX2VucShxKTsNCj4gPiArCXVpbnQxNl90IGksIGVucXVldWVk X2NicyA9IDA7DQo+ID4gKwl1aW50OF90IGNic19pbl90YjsNCj4gPiArCWludCByZXQ7DQo+ID4g Kw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7DQo+ID4gKwkJY2JzX2luX3RiID0g Z2V0X251bV9jYnNfaW5fdGJfbGRwY19kZWMoJm9wc1tpXS0NCj4gPmxkcGNfZGVjKTsNCj4gPiAr CQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYXZhaWxhYmxlIHNwYWNlIGZvciBmdXJ0aGVyIHByb2Nl c3NpbmcgKi8NCj4gPiArCQlpZiAodW5saWtlbHkoKGF2YWlsIC0gY2JzX2luX3RiIDwgMCkgfHwN Cj4gPiArCQkJCShjYnNfaW5fdGIgPT0gMCkpKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArCQlhdmFp bCAtPSBjYnNfaW5fdGI7DQo+ID4gKw0KPiA+ICsJCXJldCA9IGVucXVldWVfbGRwY19kZWNfb25l X29wX3RiKHEsIG9wc1tpXSwNCj4gPiArCQkJCWVucXVldWVkX2NicywgY2JzX2luX3RiKTsNCj4g PiArCQlpZiAocmV0IDw9IDApDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWVucXVldWVkX2NicyAr PSByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJYWNjX2RtYV9lbnF1ZXVlKHEsIGVucXVldWVk X2NicywgJnFfZGF0YS0+cXVldWVfc3RhdHMpOw0KPiA+ICsNCj4gPiArCS8qIFVwZGF0ZSBzdGF0 cyAqLw0KPiA+ICsJcV9kYXRhLT5xdWV1ZV9zdGF0cy5lbnF1ZXVlZF9jb3VudCArPSBpOw0KPiA+ ICsJcV9kYXRhLT5xdWV1ZV9zdGF0cy5lbnF1ZXVlX2Vycl9jb3VudCArPSBudW0gLSBpOw0KPiA+ ICsJcmV0dXJuIGk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIEVucXVldWUgZGVjb2RlIG9wZXJh dGlvbnMgZm9yIEFDQzIwMCBkZXZpY2UgaW4gQ0IgbW9kZSAqLw0KPiA+ICtzdGF0aWMgdWludDE2 X3QNCj4gPiArYWNjMjAwX2VucXVldWVfbGRwY19kZWNfY2Ioc3RydWN0IHJ0ZV9iYmRldl9xdWV1 ZV9kYXRhICpxX2RhdGEsDQo+ID4gKwkJc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKipvcHMsIHVp bnQxNl90IG51bSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGFjY19xdWV1ZSAqcSA9IHFfZGF0YS0+ cXVldWVfcHJpdmF0ZTsNCj4gPiArCWludDMyX3QgYXZhaWwgPSBhY2NfcmluZ19hdmFpbF9lbnEo cSk7DQo+ID4gKwl1aW50MTZfdCBpOw0KPiA+ICsJdW5pb24gYWNjX2RtYV9kZXNjICpkZXNjOw0K PiA+ICsJaW50IHJldDsNCj4gPiArCWJvb2wgc2FtZV9vcCA9IGZhbHNlOw0KPiA+ICsJZm9yIChp ID0gMDsgaSA8IG51bTsgKytpKSB7DQo+ID4gKwkJLyogQ2hlY2sgaWYgdGhlcmUgYXJlIGF2YWls YWJsZSBzcGFjZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nICovDQo+ID4gKwkJaWYgKHVubGlrZWx5 KGF2YWlsIDwgMSkpIHsNCj4gPiArCQkJYWNjX2VucXVldWVfcmluZ19mdWxsKHFfZGF0YSk7DQo+ ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCQlhdmFpbCAtPSAxOw0KPiA+ICsjaWZkZWYg QUNDMjAwX0RFU0NfT1BUSU1JWkFUSU9ODQo+ID4gKwkJaWYgKGkgPiAwKQ0KPiA+ICsJCQlzYW1l X29wID0gY21wX2xkcGNfZGVjX29wKCZvcHNbaS0xXSk7DQo+ID4gKyNlbmRpZg0KPiANCj4gSSB0 aGluayBJIG1hZGUgc2FtZSBjb21tZW50IG9uIHRoZSBzZXJpZXMgYWJvdXQgQUNDMTAwIGNoYW5n ZXMgZm9yDQo+IHYyMi4xMS4NCj4gDQo+IFN1Y2ggb3B0aW1pemF0aW9ucyB1bmRlciAjaWZkZWZz IGFyZSBub3Qgd2VsY29tZSwgYXMgZWl0aGVyIHdlIG5lZWQgdG8NCj4gbXVsdGlwbHkgdGhlIG51 bWJlciBvZiBidWlsZCB0ZXN0cyB0byBjb3ZlciBhbGwgdGhlIGNvZGUgaW4gQ0ksIG9yIHdlDQo+ IG5ldmVyIGNvbXBpbGUgdGVzdCB0aGlzIGNvZGUuDQo+IA0KPiBDYW4geW91IGVsbGFib3JhdGUg d2hlbiB5b3UgbmVlZCBpdCwgYW5kIHdoZW4geW91IGRvbid0Pw0KPiBJcyBpdCBzYWZlIHRvIGhh dmUgdGhpcyBvcHRpbWl6YXRpb24gYnkgZGVmYXVsdCwgaWYgbm90IHdoeT8NCj4gDQo+IElmIG5v dCBzYWZlLCB0aGVuIGp1c3QgcmVtb3ZlIGl0LCBpZiBzYWZlLCBtYWtlIGl0IHRoZSBkZWZhdWx0 Lg0KDQpBZ3JlZWQsIHdpbGwgdGFrZSBvdXQuIA0KDQo+IA0KPiA+ICsJCXJ0ZV9iYmRldl9sb2co SU5GTywgIk9wICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkDQo+ICVkICVkXG4iLA0KPiA+ ICsJCQlpLCBvcHNbaV0tPmxkcGNfZGVjLm9wX2ZsYWdzLCBvcHNbaV0tDQo+ID5sZHBjX2RlYy5y dl9pbmRleCwNCj4gPiArCQkJb3BzW2ldLT5sZHBjX2RlYy5pdGVyX21heCwgb3BzW2ldLQ0KPiA+ bGRwY19kZWMuaXRlcl9jb3VudCwNCj4gPiArCQkJb3BzW2ldLT5sZHBjX2RlYy5iYXNlZ3JhcGgs IG9wc1tpXS0+bGRwY19kZWMuel9jLA0KPiA+ICsJCQlvcHNbaV0tPmxkcGNfZGVjLm5fY2IsIG9w c1tpXS0+bGRwY19kZWMucV9tLA0KPiA+ICsJCQlvcHNbaV0tPmxkcGNfZGVjLm5fZmlsbGVyLCBv cHNbaV0tDQo+ID5sZHBjX2RlYy5jYl9wYXJhbXMuZSwNCj4gPiArCQkJc2FtZV9vcCk7DQo+ID4g KwkJcmV0ID0gZW5xdWV1ZV9sZHBjX2RlY19vbmVfb3BfY2IocSwgb3BzW2ldLCBpLCBzYW1lX29w KTsNCj4gPiArCQlpZiAocmV0IDwgMCkgew0KPiA+ICsJCQlhY2NfZW5xdWV1ZV9pbnZhbGlkKHFf ZGF0YSk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlp ZiAodW5saWtlbHkoaSA9PSAwKSkNCj4gPiArCQlyZXR1cm4gMDsgLyogTm90aGluZyB0byBlbnF1 ZXVlICovDQo+ID4gKw0KPiA+ICsJLyogU2V0IFNEb25lIGluIGxhc3QgQ0IgaW4gZW5xdWV1ZWQg b3BzIGZvciBDQiBtb2RlKi8NCj4gPiArCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyAoKHEtPnN3X3Jp bmdfaGVhZCArIGkgLSAxKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gDQo+ IEkgdGhpbmsgaGF2aW5nIGhlbHBlcnMgdG8gZmV0Y2ggZGVzY3JpcHRvcnMgd291bGQgbWFrZSB0 aGUgY29kZSBlYXNpZXINCj4gdG8gcmVhZCBhbmQgYWxzbyB3b3VsZCBlYXNlIG1haW50YWluYW5j ZS4NCg0KVGhpcyBjYW4gYmUgbG9va2VkIGF0IHBvc3QgMjIuMTEgSSBiZWxpZXZlLiBCdXQgbm90 ZWQuDQoNCj4gDQo+ID4gKw0KPiA+ICsJZGVzYy0+cmVxLnNkb25lX2VuYWJsZSA9IDE7DQo+ID4g KwlkZXNjLT5yZXEuaXJxX2VuYWJsZSA9IHEtPmlycV9lbmFibGU7DQo+ID4gKw0KPiA+ICsJYWNj X2RtYV9lbnF1ZXVlKHEsIGksICZxX2RhdGEtPnF1ZXVlX3N0YXRzKTsNCj4gPiArDQo+ID4gKwkv KiBVcGRhdGUgc3RhdHMgKi8NCj4gPiArCXFfZGF0YS0+cXVldWVfc3RhdHMuZW5xdWV1ZWRfY291 bnQgKz0gaTsNCj4gPiArCXFfZGF0YS0+cXVldWVfc3RhdHMuZW5xdWV1ZV9lcnJfY291bnQgKz0g bnVtIC0gaTsNCj4gPiArCXJldHVybiBpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBFbnF1ZXVl IGRlY29kZSBvcGVyYXRpb25zIGZvciBBQ0MyMDAgZGV2aWNlLiAqLw0KPiA+ICtzdGF0aWMgdWlu dDE2X3QNCj4gPiArYWNjMjAwX2VucXVldWVfbGRwY19kZWMoc3RydWN0IHJ0ZV9iYmRldl9xdWV1 ZV9kYXRhICpxX2RhdGEsDQo+ID4gKwkJc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKipvcHMsIHVp bnQxNl90IG51bSkNCj4gPiArew0KPiA+ICsJaW50MzJfdCBhcV9hdmFpbCA9IGFjYzIwMF9hcV9h dmFpbChxX2RhdGEsIG51bSk7DQo+ID4gKwlpZiAodW5saWtlbHkoKGFxX2F2YWlsIDw9IDApIHx8 IChudW0gPT0gMCkpKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJaWYgKG9wc1swXS0+bGRwY19k ZWMuY29kZV9ibG9ja19tb2RlID09DQo+IFJURV9CQkRFVl9UUkFOU1BPUlRfQkxPQ0spDQo+ID4g KwkJcmV0dXJuIGFjYzIwMF9lbnF1ZXVlX2xkcGNfZGVjX3RiKHFfZGF0YSwgb3BzLCBudW0pOw0K PiA+ICsJZWxzZQ0KPiA+ICsJCXJldHVybiBhY2MyMDBfZW5xdWV1ZV9sZHBjX2RlY19jYihxX2Rh dGEsIG9wcywgbnVtKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArDQo+ID4gKy8qIERlcXVldWUgb25l IGVuY29kZSBvcGVyYXRpb25zIGZyb20gQUNDMjAwIGRldmljZSBpbiBDQiBtb2RlDQo+ID4gKyAq Lw0KPiA+ICtzdGF0aWMgaW5saW5lIGludA0KPiA+ICtkZXF1ZXVlX2VuY19vbmVfb3BfY2Ioc3Ry dWN0IGFjY19xdWV1ZSAqcSwgc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3ANCj4gKipyZWZfb3AsDQo+ ID4gKwkJdWludDE2X3QgKmRlcXVldWVkX29wcywgdWludDMyX3QgKmFxX2RlcXVldWVkLA0KPiA+ ICsJCXVpbnQxNl90ICpkZXF1ZXVlZF9kZXNjcykNCj4gPiArew0KPiA+ICsJdW5pb24gYWNjX2Rt YV9kZXNjICpkZXNjLCBhdG9tX2Rlc2M7DQo+ID4gKwl1bmlvbiBhY2NfZG1hX3JzcF9kZXNjIHJz cDsNCj4gPiArCXN0cnVjdCBydGVfYmJkZXZfZW5jX29wICpvcDsNCj4gPiArCWludCBpOw0KPiA+ ICsJaW50IGRlc2NfaWR4ID0gKChxLT5zd19yaW5nX3RhaWwgKyAqZGVxdWV1ZWRfZGVzY3MpDQo+ ID4gKwkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0KPiA+ICsJZGVzYyA9IHEtPnJpbmdfYWRk ciArIGRlc2NfaWR4Ow0KPiA+ICsJYXRvbV9kZXNjLmF0b21faGRyID0gX19hdG9taWNfbG9hZF9u KCh1aW50NjRfdCAqKWRlc2MsDQo+ID4gKwkJCV9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ICsNCj4g PiArCS8qIENoZWNrIGZkb25lIGJpdCAqLw0KPiA+ICsJaWYgKCEoYXRvbV9kZXNjLnJzcC52YWwg JiBBQ0NfRkRPTkUpKQ0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArDQo+ID4gKwlyc3AudmFsID0g YXRvbV9kZXNjLnJzcC52YWw7DQo+ID4gKwlydGVfYmJkZXZfbG9nX2RlYnVnKCJSZXNwLiBkZXNj ICVwOiAleCIsIGRlc2MsIHJzcC52YWwpOw0KPiA+ICsNCj4gPiArCS8qIERlcXVldWUgKi8NCj4g PiArCW9wID0gZGVzYy0+cmVxLm9wX2FkZHI7DQo+ID4gKw0KPiA+ICsJLyogQ2xlYXJpbmcgc3Rh dHVzLCBpdCB3aWxsIGJlIHNldCBiYXNlZCBvbiByZXNwb25zZSAqLw0KPiA+ICsJb3AtPnN0YXR1 cyA9IDA7DQo+ID4gKw0KPiA+ICsJb3AtPnN0YXR1cyB8PSAoKHJzcC5pbnB1dF9lcnIpDQo+ID4g KwkJCT8gKDEgPDwgUlRFX0JCREVWX0RBVEFfRVJST1IpIDogMCk7DQo+ID4gKwlvcC0+c3RhdHVz IHw9ICgocnNwLmRtYV9lcnIpID8gKDEgPDwgUlRFX0JCREVWX0RSVl9FUlJPUikgOiAwKTsNCj4g PiArCW9wLT5zdGF0dXMgfD0gKChyc3AuZmN3X2VycikgPyAoMSA8PCBSVEVfQkJERVZfRFJWX0VS Uk9SKSA6IDApOw0KPiA+ICsNCj4gPiArCWlmIChkZXNjLT5yZXEubGFzdF9kZXNjX2luX2JhdGNo KSB7DQo+ID4gKwkJKCphcV9kZXF1ZXVlZCkrKzsNCj4gPiArCQlkZXNjLT5yZXEubGFzdF9kZXNj X2luX2JhdGNoID0gMDsNCj4gPiArCX0NCj4gPiArCWRlc2MtPnJzcC52YWwgPSBBQ0NfRE1BX0RF U0NfVFlQRTsNCj4gPiArCWRlc2MtPnJzcC5hZGRfaW5mb18wID0gMDsgLypSZXNlcnZlZCBiaXRz ICovDQo+ID4gKwlkZXNjLT5yc3AuYWRkX2luZm9fMSA9IDA7IC8qUmVzZXJ2ZWQgYml0cyAqLw0K PiA+ICsNCj4gPiArCXJlZl9vcFswXSA9IG9wOw0KPiA+ICsJc3RydWN0IGFjY19wdHJzICpjb250 ZXh0X3B0cnMgPSBxLT5jb21wYW5pb25fcmluZ19hZGRyICsgZGVzY19pZHg7DQo+ID4gKwlmb3Ig KGkgPSAxIDsgaSA8IGRlc2MtPnJlcS5udW1DQnM7IGkrKykNCj4gPiArCQlyZWZfb3BbaV0gPSBj b250ZXh0X3B0cnMtPnB0cltpXS5vcF9hZGRyOw0KPiA+ICsNCj4gPiArCS8qIE9uZSBvcCB3YXMg c3VjY2Vzc2Z1bGx5IGRlcXVldWVkICovDQo+ID4gKwkoKmRlcXVldWVkX2Rlc2NzKSsrOw0KPiA+ ICsJKmRlcXVldWVkX29wcyArPSBkZXNjLT5yZXEubnVtQ0JzOw0KPiA+ICsJcmV0dXJuIGRlc2Mt PnJlcS5udW1DQnM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIERlcXVldWUgb25lIExEUEMgZW5j b2RlIG9wZXJhdGlvbnMgZnJvbSBBQ0MyMDAgZGV2aWNlIGluIFRCIG1vZGUNCj4gPiArICogVGhh dCBvcGVyYXRpb24gbWF5IGNvdmVyIG11bHRpcGxlIGRlc2NyaXB0b3JzDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgaW5saW5lIGludA0KPiA+ICtkZXF1ZXVlX2VuY19vbmVfb3BfdGIoc3RydWN0IGFj Y19xdWV1ZSAqcSwgc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3ANCj4gKipyZWZfb3AsDQo+ID4gKwkJ dWludDE2X3QgKmRlcXVldWVkX29wcywgdWludDMyX3QgKmFxX2RlcXVldWVkLA0KPiA+ICsJCXVp bnQxNl90ICpkZXF1ZXVlZF9kZXNjcykNCj4gPiArew0KPiA+ICsJdW5pb24gYWNjX2RtYV9kZXNj ICpkZXNjLCAqbGFzdF9kZXNjLCBhdG9tX2Rlc2M7DQo+ID4gKwl1bmlvbiBhY2NfZG1hX3JzcF9k ZXNjIHJzcDsNCj4gPiArCXN0cnVjdCBydGVfYmJkZXZfZW5jX29wICpvcDsNCj4gPiArCXVpbnQ4 X3QgaSA9IDA7DQo+ID4gKwl1aW50MTZfdCBjdXJyZW50X2RlcXVldWVkX2Rlc2NzID0gMCwgZGVz Y3NfaW5fdGI7DQo+ID4gKw0KPiA+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3dfcmlu Z190YWlsICsgKmRlcXVldWVkX2Rlc2NzKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNr KTsNCj4gPiArCWF0b21fZGVzYy5hdG9tX2hkciA9IF9fYXRvbWljX2xvYWRfbigodWludDY0X3Qg KilkZXNjLA0KPiA+ICsJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiArDQo+ID4gKwkvKiBDaGVj ayBmZG9uZSBiaXQgKi8NCj4gPiArCWlmICghKGF0b21fZGVzYy5yc3AudmFsICYgQUNDX0ZET05F KSkNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKw0KPiA+ICsJLyogR2V0IG51bWJlciBvZiBDQnMg aW4gZGVxdWV1ZWQgVEIgKi8NCj4gPiArCWRlc2NzX2luX3RiID0gZGVzYy0+cmVxLmNic19pbl90 YjsNCj4gPiArCS8qIEdldCBsYXN0IENCICovDQo+ID4gKwlsYXN0X2Rlc2MgPSBxLT5yaW5nX2Fk ZHIgKyAoKHEtPnN3X3JpbmdfdGFpbA0KPiA+ICsJCQkrICpkZXF1ZXVlZF9kZXNjcyArIGRlc2Nz X2luX3RiIC0gMSkNCj4gPiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4gKwkvKiBD aGVjayBpZiBsYXN0IENCIGluIFRCIGlzIHJlYWR5IHRvIGRlcXVldWUgKGFuZCB0aHVzDQo+ID4g KwkgKiB0aGUgd2hvbGUgVEIpIC0gY2hlY2tpbmcgc2RvbmUgYml0LiBJZiBub3QgcmV0dXJuLg0K PiA+ICsJICovDQo+ID4gKwlhdG9tX2Rlc2MuYXRvbV9oZHIgPSBfX2F0b21pY19sb2FkX24oKHVp bnQ2NF90ICopbGFzdF9kZXNjLA0KPiA+ICsJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiArCWlm ICghKGF0b21fZGVzYy5yc3AudmFsICYgQUNDX1NET05FKSkNCj4gPiArCQlyZXR1cm4gLTE7DQo+ ID4gKw0KPiA+ICsJLyogRGVxdWV1ZSAqLw0KPiA+ICsJb3AgPSBkZXNjLT5yZXEub3BfYWRkcjsN Cj4gPiArDQo+ID4gKwkvKiBDbGVhcmluZyBzdGF0dXMsIGl0IHdpbGwgYmUgc2V0IGJhc2VkIG9u IHJlc3BvbnNlICovDQo+ID4gKwlvcC0+c3RhdHVzID0gMDsNCj4gPiArDQo+ID4gKwl3aGlsZSAo aSA8IGRlc2NzX2luX3RiKSB7DQo+ID4gKwkJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3df cmluZ190YWlsDQo+ID4gKwkJCQkrICpkZXF1ZXVlZF9kZXNjcykNCj4gPiArCQkJCSYgcS0+c3df cmluZ193cmFwX21hc2spOw0KPiA+ICsJCWF0b21fZGVzYy5hdG9tX2hkciA9IF9fYXRvbWljX2xv YWRfbigodWludDY0X3QgKilkZXNjLA0KPiA+ICsJCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4g KwkJcnNwLnZhbCA9IGF0b21fZGVzYy5yc3AudmFsOw0KPiA+ICsJCXJ0ZV9iYmRldl9sb2dfZGVi dWcoIlJlc3AuIGRlc2MgJXA6ICV4IiwgZGVzYywNCj4gPiArCQkJCXJzcC52YWwpOw0KPiA+ICsN Cj4gPiArCQlvcC0+c3RhdHVzIHw9ICgocnNwLmlucHV0X2VycikNCj4gPiArCQkJCT8gKDEgPDwg UlRFX0JCREVWX0RBVEFfRVJST1IpIDogMCk7DQo+ID4gKwkJb3AtPnN0YXR1cyB8PSAoKHJzcC5k bWFfZXJyKSA/ICgxIDw8DQo+IFJURV9CQkRFVl9EUlZfRVJST1IpIDogMCk7DQo+ID4gKwkJb3At PnN0YXR1cyB8PSAoKHJzcC5mY3dfZXJyKSA/ICgxIDw8DQo+IFJURV9CQkRFVl9EUlZfRVJST1Ip IDogMCk7DQo+ID4gKw0KPiA+ICsJCWlmIChkZXNjLT5yZXEubGFzdF9kZXNjX2luX2JhdGNoKSB7 DQo+ID4gKwkJCSgqYXFfZGVxdWV1ZWQpKys7DQo+ID4gKwkJCWRlc2MtPnJlcS5sYXN0X2Rlc2Nf aW5fYmF0Y2ggPSAwOw0KPiA+ICsJCX0NCj4gPiArCQlkZXNjLT5yc3AudmFsID0gQUNDX0RNQV9E RVNDX1RZUEU7DQo+ID4gKwkJZGVzYy0+cnNwLmFkZF9pbmZvXzAgPSAwOw0KPiA+ICsJCWRlc2Mt PnJzcC5hZGRfaW5mb18xID0gMDsNCj4gPiArCQkoKmRlcXVldWVkX2Rlc2NzKSsrOw0KPiA+ICsJ CWN1cnJlbnRfZGVxdWV1ZWRfZGVzY3MrKzsNCj4gPiArCQlpKys7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJKnJlZl9vcCA9IG9wOw0KPiA+ICsJKCpkZXF1ZXVlZF9vcHMpKys7DQo+ID4gKwlyZXR1 cm4gY3VycmVudF9kZXF1ZXVlZF9kZXNjczsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogRGVxdWV1 ZSBvbmUgZGVjb2RlIG9wZXJhdGlvbiBmcm9tIEFDQzIwMCBkZXZpY2UgaW4gQ0IgbW9kZSAqLw0K PiA+ICtzdGF0aWMgaW5saW5lIGludA0KPiA+ICtkZXF1ZXVlX2RlY19vbmVfb3BfY2Ioc3RydWN0 IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpxX2RhdGEsDQo+ID4gKwkJc3RydWN0IGFjY19xdWV1ZSAq cSwgc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKipyZWZfb3AsDQo+ID4gKwkJdWludDE2X3QgZGVx dWV1ZWRfY2JzLCB1aW50MzJfdCAqYXFfZGVxdWV1ZWQpDQo+ID4gK3sNCj4gPiArCXVuaW9uIGFj Y19kbWFfZGVzYyAqZGVzYywgYXRvbV9kZXNjOw0KPiA+ICsJdW5pb24gYWNjX2RtYV9yc3BfZGVz YyByc3A7DQo+ID4gKwlzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqb3A7DQo+ID4gKw0KPiA+ICsJ ZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3dfcmluZ190YWlsICsgZGVxdWV1ZWRfY2JzKQ0K PiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiArCWF0b21fZGVzYy5hdG9tX2hk ciA9IF9fYXRvbWljX2xvYWRfbigodWludDY0X3QgKilkZXNjLA0KPiA+ICsJCQlfX0FUT01JQ19S RUxBWEVEKTsNCj4gPiArDQo+ID4gKwkvKiBDaGVjayBmZG9uZSBiaXQgKi8NCj4gPiArCWlmICgh KGF0b21fZGVzYy5yc3AudmFsICYgQUNDX0ZET05FKSkNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4g Kw0KPiA+ICsJcnNwLnZhbCA9IGF0b21fZGVzYy5yc3AudmFsOw0KPiA+ICsJcnRlX2JiZGV2X2xv Z19kZWJ1ZygiUmVzcC4gZGVzYyAlcDogJXhcbiIsIGRlc2MsIHJzcC52YWwpOw0KPiA+ICsNCj4g PiArCS8qIERlcXVldWUgKi8NCj4gPiArCW9wID0gZGVzYy0+cmVxLm9wX2FkZHI7DQo+ID4gKw0K PiA+ICsJLyogQ2xlYXJpbmcgc3RhdHVzLCBpdCB3aWxsIGJlIHNldCBiYXNlZCBvbiByZXNwb25z ZSAqLw0KPiA+ICsJb3AtPnN0YXR1cyA9IDA7DQo+ID4gKwlvcC0+c3RhdHVzIHw9ICgocnNwLmlu cHV0X2VycikNCj4gPiArCQkJPyAoMSA8PCBSVEVfQkJERVZfREFUQV9FUlJPUikgOiAwKTsNCj4g PiArCW9wLT5zdGF0dXMgfD0gKChyc3AuZG1hX2VycikgPyAoMSA8PCBSVEVfQkJERVZfRFJWX0VS Uk9SKSA6IDApOw0KPiA+ICsJb3AtPnN0YXR1cyB8PSAoKHJzcC5mY3dfZXJyKSA/ICgxIDw8IFJU RV9CQkRFVl9EUlZfRVJST1IpIDogMCk7DQo+ID4gKwlpZiAob3AtPnN0YXR1cyAhPSAwKSB7DQo+ ID4gKwkJLyogVGhlc2UgZXJyb3JzIGFyZSBub3QgZXhwZWN0ZWQgKi8NCj4gPiArCQlxX2RhdGEt PnF1ZXVlX3N0YXRzLmRlcXVldWVfZXJyX2NvdW50Kys7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ LyogQ1JDIGludmFsaWQgaWYgZXJyb3IgZXhpc3RzICovDQo+ID4gKwlpZiAoIW9wLT5zdGF0dXMp DQo+ID4gKwkJb3AtPnN0YXR1cyB8PSByc3AuY3JjX3N0YXR1cyA8PCBSVEVfQkJERVZfQ1JDX0VS Uk9SOw0KPiA+ICsJb3AtPnR1cmJvX2RlYy5pdGVyX2NvdW50ID0gKHVpbnQ4X3QpIHJzcC5pdGVy X2NudDsNCj4gPiArCS8qIENoZWNrIGlmIHRoaXMgaXMgdGhlIGxhc3QgZGVzYyBpbiBiYXRjaCAo QXRvbWljIFF1ZXVlKSAqLw0KPiA+ICsJaWYgKGRlc2MtPnJlcS5sYXN0X2Rlc2NfaW5fYmF0Y2gp IHsNCj4gPiArCQkoKmFxX2RlcXVldWVkKSsrOw0KPiA+ICsJCWRlc2MtPnJlcS5sYXN0X2Rlc2Nf aW5fYmF0Y2ggPSAwOw0KPiA+ICsJfQ0KPiA+ICsJZGVzYy0+cnNwLnZhbCA9IEFDQ19ETUFfREVT Q19UWVBFOw0KPiA+ICsJZGVzYy0+cnNwLmFkZF9pbmZvXzAgPSAwOw0KPiA+ICsJZGVzYy0+cnNw LmFkZF9pbmZvXzEgPSAwOw0KPiA+ICsJKnJlZl9vcCA9IG9wOw0KPiA+ICsNCj4gPiArCS8qIE9u ZSBDQiAob3ApIHdhcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQgKi8NCj4gPiArCXJldHVybiAxOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBEZXF1ZXVlIG9uZSBkZWNvZGUgb3BlcmF0aW9ucyBmcm9t IEFDQzIwMCBkZXZpY2UgaW4gQ0IgbW9kZSAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIGludA0KPiA+ ICtkZXF1ZXVlX2xkcGNfZGVjX29uZV9vcF9jYihzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEg KnFfZGF0YSwNCj4gPiArCQlzdHJ1Y3QgYWNjX3F1ZXVlICpxLCBzdHJ1Y3QgcnRlX2JiZGV2X2Rl Y19vcCAqKnJlZl9vcCwNCj4gPiArCQl1aW50MTZfdCBkZXF1ZXVlZF9jYnMsIHVpbnQzMl90ICph cV9kZXF1ZXVlZCkNCj4gPiArew0KPiA+ICsJdW5pb24gYWNjX2RtYV9kZXNjICpkZXNjLCBhdG9t X2Rlc2M7DQo+ID4gKwl1bmlvbiBhY2NfZG1hX3JzcF9kZXNjIHJzcDsNCj4gPiArCXN0cnVjdCBy dGVfYmJkZXZfZGVjX29wICpvcDsNCj4gPiArDQo+ID4gKwlkZXNjID0gcS0+cmluZ19hZGRyICsg KChxLT5zd19yaW5nX3RhaWwgKyBkZXF1ZXVlZF9jYnMpDQo+ID4gKwkJCSYgcS0+c3dfcmluZ193 cmFwX21hc2spOw0KPiA+ICsJYXRvbV9kZXNjLmF0b21faGRyID0gX19hdG9taWNfbG9hZF9uKCh1 aW50NjRfdCAqKWRlc2MsDQo+ID4gKwkJCV9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ICsNCj4gPiAr CS8qIENoZWNrIGZkb25lIGJpdCAqLw0KPiA+ICsJaWYgKCEoYXRvbV9kZXNjLnJzcC52YWwgJiBB Q0NfRkRPTkUpKQ0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArDQo+ID4gKwlyc3AudmFsID0gYXRv bV9kZXNjLnJzcC52YWw7DQo+ID4gKwlydGVfYmJkZXZfbG9nX2RlYnVnKCJSZXNwLiBkZXNjICVw OiAleCAleCAleFxuIiwgZGVzYywNCj4gPiArCQkJcnNwLnZhbCwgZGVzYy0+cnNwLmFkZF9pbmZv XzAsDQo+ID4gKwkJCWRlc2MtPnJzcC5hZGRfaW5mb18xKTsNCj4gPiArDQo+ID4gKwkvKiBEZXF1 ZXVlICovDQo+ID4gKwlvcCA9IGRlc2MtPnJlcS5vcF9hZGRyOw0KPiA+ICsNCj4gPiArCS8qIENs ZWFyaW5nIHN0YXR1cywgaXQgd2lsbCBiZSBzZXQgYmFzZWQgb24gcmVzcG9uc2UgKi8NCj4gPiAr CW9wLT5zdGF0dXMgPSAwOw0KPiA+ICsJb3AtPnN0YXR1cyB8PSByc3AuaW5wdXRfZXJyIDw8IFJU RV9CQkRFVl9EQVRBX0VSUk9SOw0KPiA+ICsJb3AtPnN0YXR1cyB8PSByc3AuZG1hX2VyciA8PCBS VEVfQkJERVZfRFJWX0VSUk9SOw0KPiA+ICsJb3AtPnN0YXR1cyB8PSByc3AuZmN3X2VyciA8PCBS VEVfQkJERVZfRFJWX0VSUk9SOw0KPiA+ICsJaWYgKG9wLT5zdGF0dXMgIT0gMCkNCj4gPiArCQlx X2RhdGEtPnF1ZXVlX3N0YXRzLmRlcXVldWVfZXJyX2NvdW50Kys7DQo+ID4gKw0KPiA+ICsJb3At PnN0YXR1cyB8PSByc3AuY3JjX3N0YXR1cyA8PCBSVEVfQkJERVZfQ1JDX0VSUk9SOw0KPiA+ICsJ aWYgKG9wLT5sZHBjX2RlYy5oYXJkX291dHB1dC5sZW5ndGggPiAwICYmICFyc3Auc3luZF9vaykN Cj4gPiArCQlvcC0+c3RhdHVzIHw9IDEgPDwgUlRFX0JCREVWX1NZTkRST01FX0VSUk9SOw0KPiA+ ICsNCj4gPiArCWlmIChjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCQlS VEVfQkJERVZfTERQQ19DUkNfVFlQRV8yNEFfQ0hFQ0spICB8fA0KPiA+ICsJCQljaGVja19iaXQo b3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCQlSVEVfQkJERVZfTERQQ19DUkNfVFlQRV8x Nl9DSEVDSykpIHsNCj4gPiArCQlpZiAoZGVzYy0+cnNwLmFkZF9pbmZvXzEgIT0gMCkNCj4gPiAr CQkJb3AtPnN0YXR1cyB8PSAxIDw8IFJURV9CQkRFVl9DUkNfRVJST1I7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJb3AtPmxkcGNfZGVjLml0ZXJfY291bnQgPSAodWludDhfdCkgcnNwLml0ZXJfY250 Ow0KPiA+ICsNCj4gPiArCS8qIENoZWNrIGlmIHRoaXMgaXMgdGhlIGxhc3QgZGVzYyBpbiBiYXRj aCAoQXRvbWljIFF1ZXVlKSAqLw0KPiA+ICsJaWYgKGRlc2MtPnJlcS5sYXN0X2Rlc2NfaW5fYmF0 Y2gpIHsNCj4gPiArCQkoKmFxX2RlcXVldWVkKSsrOw0KPiA+ICsJCWRlc2MtPnJlcS5sYXN0X2Rl c2NfaW5fYmF0Y2ggPSAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWRlc2MtPnJzcC52YWwgPSBB Q0NfRE1BX0RFU0NfVFlQRTsNCj4gPiArCWRlc2MtPnJzcC5hZGRfaW5mb18wID0gMDsNCj4gPiAr CWRlc2MtPnJzcC5hZGRfaW5mb18xID0gMDsNCj4gPiArDQo+ID4gKwkqcmVmX29wID0gb3A7DQo+ ID4gKw0KPiA+ICsJLyogT25lIENCIChvcCkgd2FzIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCAqLw0K PiA+ICsJcmV0dXJuIDE7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIERlcXVldWUgb25lIGRlY29k ZSBvcGVyYXRpb25zIGZyb20gQUNDMjAwIGRldmljZSBpbiBUQiBtb2RlLiAqLw0KPiA+ICtzdGF0 aWMgaW5saW5lIGludA0KPiA+ICtkZXF1ZXVlX2RlY19vbmVfb3BfdGIoc3RydWN0IGFjY19xdWV1 ZSAqcSwgc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3ANCj4gKipyZWZfb3AsDQo+ID4gKwkJdWludDE2 X3QgZGVxdWV1ZWRfY2JzLCB1aW50MzJfdCAqYXFfZGVxdWV1ZWQpDQo+ID4gK3sNCj4gPiArCXVu aW9uIGFjY19kbWFfZGVzYyAqZGVzYywgKmxhc3RfZGVzYywgYXRvbV9kZXNjOw0KPiA+ICsJdW5p b24gYWNjX2RtYV9yc3BfZGVzYyByc3A7DQo+ID4gKwlzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAq b3A7DQo+ID4gKwl1aW50OF90IGNic19pbl90YiA9IDEsIGNiX2lkeCA9IDA7DQo+ID4gKwl1aW50 MzJfdCB0Yl9jcmNfY2hlY2sgPSAwOw0KPiA+ICsNCj4gPiArCWRlc2MgPSBxLT5yaW5nX2FkZHIg KyAoKHEtPnN3X3JpbmdfdGFpbCArIGRlcXVldWVkX2NicykNCj4gPiArCQkJJiBxLT5zd19yaW5n X3dyYXBfbWFzayk7DQo+ID4gKwlhdG9tX2Rlc2MuYXRvbV9oZHIgPSBfX2F0b21pY19sb2FkX24o KHVpbnQ2NF90ICopZGVzYywNCj4gPiArCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gKw0KPiA+ ICsJLyogQ2hlY2sgZmRvbmUgYml0ICovDQo+ID4gKwlpZiAoIShhdG9tX2Rlc2MucnNwLnZhbCAm IEFDQ19GRE9ORSkpDQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsNCj4gPiArCS8qIERlcXVldWUg Ki8NCj4gPiArCW9wID0gZGVzYy0+cmVxLm9wX2FkZHI7DQo+ID4gKw0KPiA+ICsJLyogR2V0IG51 bWJlciBvZiBDQnMgaW4gZGVxdWV1ZWQgVEIgKi8NCj4gPiArCWNic19pbl90YiA9IGRlc2MtPnJl cS5jYnNfaW5fdGI7DQo+ID4gKwkvKiBHZXQgbGFzdCBDQiAqLw0KPiA+ICsJbGFzdF9kZXNjID0g cS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX3RhaWwNCj4gPiArCQkJKyBkZXF1ZXVlZF9jYnMg KyBjYnNfaW5fdGIgLSAxKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiAr CS8qIENoZWNrIGlmIGxhc3QgQ0IgaW4gVEIgaXMgcmVhZHkgdG8gZGVxdWV1ZSAoYW5kIHRodXMN Cj4gPiArCSAqIHRoZSB3aG9sZSBUQikgLSBjaGVja2luZyBzZG9uZSBiaXQuIElmIG5vdCByZXR1 cm4uDQo+ID4gKwkgKi8NCj4gPiArCWF0b21fZGVzYy5hdG9tX2hkciA9IF9fYXRvbWljX2xvYWRf bigodWludDY0X3QgKilsYXN0X2Rlc2MsDQo+ID4gKwkJCV9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ ICsJaWYgKCEoYXRvbV9kZXNjLnJzcC52YWwgJiBBQ0NfU0RPTkUpKQ0KPiA+ICsJCXJldHVybiAt MTsNCj4gPiArDQo+ID4gKwkvKiBDbGVhcmluZyBzdGF0dXMsIGl0IHdpbGwgYmUgc2V0IGJhc2Vk IG9uIHJlc3BvbnNlICovDQo+ID4gKwlvcC0+c3RhdHVzID0gMDsNCj4gPiArDQo+ID4gKwkvKiBS ZWFkIHJlbWFpbmluZyBDQnMgaWYgZXhpc3RzICovDQo+ID4gKwl3aGlsZSAoY2JfaWR4IDwgY2Jz X2luX3RiKSB7DQo+ID4gKwkJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3dfcmluZ190YWls ICsgZGVxdWV1ZWRfY2JzKQ0KPiA+ICsJCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4g KwkJYXRvbV9kZXNjLmF0b21faGRyID0gX19hdG9taWNfbG9hZF9uKCh1aW50NjRfdCAqKWRlc2Ms DQo+ID4gKwkJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiArCQlyc3AudmFsID0gYXRvbV9kZXNj LnJzcC52YWw7DQo+ID4gKwkJcnRlX2JiZGV2X2xvZ19kZWJ1ZygiUmVzcC4gZGVzYyAlcDogJXgg JXggJXgiLCBkZXNjLA0KPiA+ICsJCQkJcnNwLnZhbCwgZGVzYy0+cnNwLmFkZF9pbmZvXzAsDQo+ ID4gKwkJCQlkZXNjLT5yc3AuYWRkX2luZm9fMSk7DQo+ID4gKw0KPiA+ICsJCW9wLT5zdGF0dXMg fD0gKChyc3AuaW5wdXRfZXJyKQ0KPiA+ICsJCQkJPyAoMSA8PCBSVEVfQkJERVZfREFUQV9FUlJP UikgOiAwKTsNCj4gPiArCQlvcC0+c3RhdHVzIHw9ICgocnNwLmRtYV9lcnIpID8gKDEgPDwNCj4g UlRFX0JCREVWX0RSVl9FUlJPUikgOiAwKTsNCj4gPiArCQlvcC0+c3RhdHVzIHw9ICgocnNwLmZj d19lcnIpID8gKDEgPDwNCj4gUlRFX0JCREVWX0RSVl9FUlJPUikgOiAwKTsNCj4gPiArDQo+ID4g KwkJaWYgKGNoZWNrX2JpdChvcC0+bGRwY19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJCQlSVEVfQkJE RVZfTERQQ19DUkNfVFlQRV8yNEFfQ0hFQ0spKQ0KPiA+ICsJCQl0Yl9jcmNfY2hlY2sgXj0gZGVz Yy0+cnNwLmFkZF9pbmZvXzE7DQo+ID4gKw0KPiA+ICsJCS8qIENSQyBpbnZhbGlkIGlmIGVycm9y IGV4aXN0cyAqLw0KPiA+ICsJCWlmICghb3AtPnN0YXR1cykNCj4gPiArCQkJb3AtPnN0YXR1cyB8 PSByc3AuY3JjX3N0YXR1cyA8PA0KPiBSVEVfQkJERVZfQ1JDX0VSUk9SOw0KPiA+ICsJCW9wLT50 dXJib19kZWMuaXRlcl9jb3VudCA9IFJURV9NQVgoKHVpbnQ4X3QpIHJzcC5pdGVyX2NudCwNCj4g PiArCQkJCW9wLT50dXJib19kZWMuaXRlcl9jb3VudCk7DQo+ID4gKw0KPiA+ICsJCS8qIENoZWNr IGlmIHRoaXMgaXMgdGhlIGxhc3QgZGVzYyBpbiBiYXRjaCAoQXRvbWljIFF1ZXVlKSAqLw0KPiA+ ICsJCWlmIChkZXNjLT5yZXEubGFzdF9kZXNjX2luX2JhdGNoKSB7DQo+ID4gKwkJCSgqYXFfZGVx dWV1ZWQpKys7DQo+ID4gKwkJCWRlc2MtPnJlcS5sYXN0X2Rlc2NfaW5fYmF0Y2ggPSAwOw0KPiA+ ICsJCX0NCj4gPiArCQlkZXNjLT5yc3AudmFsID0gQUNDX0RNQV9ERVNDX1RZUEU7DQo+ID4gKwkJ ZGVzYy0+cnNwLmFkZF9pbmZvXzAgPSAwOw0KPiA+ICsJCWRlc2MtPnJzcC5hZGRfaW5mb18xID0g MDsNCj4gPiArCQlkZXF1ZXVlZF9jYnMrKzsNCj4gPiArCQljYl9pZHgrKzsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlpZiAoY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPiArCQkJ UlRFX0JCREVWX0xEUENfQ1JDX1RZUEVfMjRBX0NIRUNLKSkgew0KPiA+ICsJCXJ0ZV9iYmRldl9s b2dfZGVidWcoIlRCLUNSQyBDaGVjayAleFxuIiwgdGJfY3JjX2NoZWNrKTsNCj4gPiArCQlpZiAo dGJfY3JjX2NoZWNrID4gMCkNCj4gPiArCQkJb3AtPnN0YXR1cyB8PSAxIDw8IFJURV9CQkRFVl9D UkNfRVJST1I7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJKnJlZl9vcCA9IG9wOw0KPiA+ICsNCj4g PiArCXJldHVybiBjYl9pZHg7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIERlcXVldWUgTERQQyBl bmNvZGUgb3BlcmF0aW9ucyBmcm9tIEFDQzIwMCBkZXZpY2UuICovDQo+ID4gK3N0YXRpYyB1aW50 MTZfdA0KPiA+ICthY2MyMDBfZGVxdWV1ZV9sZHBjX2VuYyhzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVl X2RhdGEgKnFfZGF0YSwNCj4gPiArCQlzdHJ1Y3QgcnRlX2JiZGV2X2VuY19vcCAqKm9wcywgdWlu dDE2X3QgbnVtKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYWNjX3F1ZXVlICpxID0gcV9kYXRhLT5x dWV1ZV9wcml2YXRlOw0KPiA+ICsJdWludDMyX3QgYXZhaWwgPSBhY2NfcmluZ19hdmFpbF9kZXEo cSk7DQo+ID4gKwl1aW50MzJfdCBhcV9kZXF1ZXVlZCA9IDA7DQo+ID4gKwl1aW50MTZfdCBpLCBk ZXF1ZXVlZF9vcHMgPSAwLCBkZXF1ZXVlZF9kZXNjcyA9IDA7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ ICsJc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKm9wOw0KPiA+ICsJaWYgKGF2YWlsID09IDApDQo+ ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwlvcCA9IChxLT5yaW5nX2FkZHIgKyAocS0+c3dfcmluZ190 YWlsICYNCj4gPiArCQkJcS0+c3dfcmluZ193cmFwX21hc2spKS0+cmVxLm9wX2FkZHI7DQo+ID4g KyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4gKwlpZiAodW5saWtlbHkob3BzID09 IE5VTEwgfHwgcSA9PSBOVUxMIHx8IG9wID09IE5VTEwpKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ ICsjZW5kaWYNCj4gPiArCWludCBjYm0gPSBvcC0+bGRwY19lbmMuY29kZV9ibG9ja19tb2RlOw0K PiANCj4gRG9uJ3QgbWl4IGRlY2xhcmF0aW9ucyAmIGNvZGUuDQo+IA0KPiA+ICsJZm9yIChpID0g MDsgaSA8IGF2YWlsOyBpKyspIHsNCj4gPiArCQlpZiAoY2JtID09IFJURV9CQkRFVl9UUkFOU1BP UlRfQkxPQ0spDQo+ID4gKwkJCXJldCA9IGRlcXVldWVfZW5jX29uZV9vcF90YihxLA0KPiAmb3Bz W2RlcXVldWVkX29wc10sDQo+ID4gKwkJCQkJJmRlcXVldWVkX29wcywgJmFxX2RlcXVldWVkLA0K PiA+ICsJCQkJCSZkZXF1ZXVlZF9kZXNjcyk7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQlyZXQgPSBk ZXF1ZXVlX2VuY19vbmVfb3BfY2IocSwNCj4gJm9wc1tkZXF1ZXVlZF9vcHNdLA0KPiA+ICsJCQkJ CSZkZXF1ZXVlZF9vcHMsICZhcV9kZXF1ZXVlZCwNCj4gPiArCQkJCQkmZGVxdWV1ZWRfZGVzY3Mp Ow0KPiA+ICsJCWlmIChyZXQgPCAwKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArCQlpZiAoZGVxdWV1 ZWRfb3BzID49IG51bSkNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcS0+ YXFfZGVxdWV1ZWQgKz0gYXFfZGVxdWV1ZWQ7DQo+ID4gKwlxLT5zd19yaW5nX3RhaWwgKz0gZGVx dWV1ZWRfZGVzY3M7DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIGVucXVldWUgc3RhdHMgKi8NCj4g PiArCXFfZGF0YS0+cXVldWVfc3RhdHMuZGVxdWV1ZWRfY291bnQgKz0gZGVxdWV1ZWRfb3BzOw0K PiA+ICsNCj4gPiArCXJldHVybiBkZXF1ZXVlZF9vcHM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q IERlcXVldWUgZGVjb2RlIG9wZXJhdGlvbnMgZnJvbSBBQ0MyMDAgZGV2aWNlLiAqLw0KPiA+ICtz dGF0aWMgdWludDE2X3QNCj4gPiArYWNjMjAwX2RlcXVldWVfbGRwY19kZWMoc3RydWN0IHJ0ZV9i YmRldl9xdWV1ZV9kYXRhICpxX2RhdGEsDQo+ID4gKwkJc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3Ag KipvcHMsIHVpbnQxNl90IG51bSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGFjY19xdWV1ZSAqcSA9 IHFfZGF0YS0+cXVldWVfcHJpdmF0ZTsNCj4gPiArCXVpbnQxNl90IGRlcXVldWVfbnVtOw0KPiA+ ICsJdWludDMyX3QgYXZhaWwgPSBhY2NfcmluZ19hdmFpbF9kZXEocSk7DQo+ID4gKwl1aW50MzJf dCBhcV9kZXF1ZXVlZCA9IDA7DQo+ID4gKwl1aW50MTZfdCBpOw0KPiA+ICsJdWludDE2X3QgZGVx dWV1ZWRfY2JzID0gMDsNCj4gPiArCXN0cnVjdCBydGVfYmJkZXZfZGVjX29wICpvcDsNCj4gPiAr CWludCByZXQ7DQo+ID4gKw0KPiA+ICsjaWZkZWYgUlRFX0xJQlJURV9CQkRFVl9ERUJVRw0KPiA+ ICsJaWYgKHVubGlrZWx5KG9wcyA9PSAwICYmIHEgPT0gTlVMTCkpDQo+ID4gKwkJcmV0dXJuIDA7 DQo+ID4gKyNlbmRpZg0KPiANCj4gSWYgdGhlcmUgaXMgYSBjaGFuY2Ugb3BzIG9yIHEgbm90IHRv IGJlIHNldCwgdGhpcyBjaGVjayBzaG91bGQgYWx3YXlzIGJlDQo+IGhlcmUuIElmIG5vdCwgdGhl biBqdXN0IHJlbW92ZSB0aGVtLiBUaGUgcSA9PSBOVUxMIHdpbGwgYW55d2F5IGJlDQo+IGNhdGNo ZWQgZWFzaWx5IHNpbmNlIGl0IGlzIGRlcmVmZXJlbmNlZCBiZWxvdy4NCg0KQ2FuIHJlbW92ZSBE RUJVRyBjb2RlLiBJIGRvbuKAmXQgc2VlIHRoZSBoYXJtIGdpdmVuIHRoaXMgd291bGQgbm90IGJl IHVzZWQgZm9yIHByb2R1Y3Rpb24gYnV0IG9rYXkuIA0KDQo+IA0KPiA+ICsNCj4gPiArCWRlcXVl dWVfbnVtID0gUlRFX01JTihhdmFpbCwgbnVtKTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBp IDwgZGVxdWV1ZV9udW07ICsraSkgew0KPiA+ICsJCW9wID0gKHEtPnJpbmdfYWRkciArICgocS0+ c3dfcmluZ190YWlsICsgZGVxdWV1ZWRfY2JzKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9t YXNrKSktPnJlcS5vcF9hZGRyOw0KPiA+ICsJCWlmIChvcC0+bGRwY19kZWMuY29kZV9ibG9ja19t b2RlID09DQo+IFJURV9CQkRFVl9UUkFOU1BPUlRfQkxPQ0spDQo+ID4gKwkJCXJldCA9IGRlcXVl dWVfZGVjX29uZV9vcF90YihxLCAmb3BzW2ldLA0KPiBkZXF1ZXVlZF9jYnMsDQo+ID4gKwkJCQkJ JmFxX2RlcXVldWVkKTsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXJldCA9IGRlcXVldWVfbGRwY19k ZWNfb25lX29wX2NiKA0KPiA+ICsJCQkJCXFfZGF0YSwgcSwgJm9wc1tpXSwgZGVxdWV1ZWRfY2Jz LA0KPiA+ICsJCQkJCSZhcV9kZXF1ZXVlZCk7DQo+ID4gKw0KPiA+ICsJCWlmIChyZXQgPD0gMCkN Cj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJZGVxdWV1ZWRfY2JzICs9IHJldDsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlxLT5hcV9kZXF1ZXVlZCArPSBhcV9kZXF1ZXVlZDsNCj4gPiArCXEtPnN3X3Jp bmdfdGFpbCArPSBkZXF1ZXVlZF9jYnM7DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIGVucXVldWUg c3RhdHMgKi8NCj4gPiArCXFfZGF0YS0+cXVldWVfc3RhdHMuZGVxdWV1ZWRfY291bnQgKz0gaTsN Cj4gPiArDQo+ID4gKwlyZXR1cm4gaTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgIC8qIEluaXRpYWxp emF0aW9uIEZ1bmN0aW9uICovDQo+ID4gICBzdGF0aWMgdm9pZA0KPiA+ICAgYWNjMjAwX2JiZGV2 X2luaXQoc3RydWN0IHJ0ZV9iYmRldiAqZGV2LCBzdHJ1Y3QgcnRlX3BjaV9kcml2ZXIgKmRydikN Cj4gPiBAQCAtNjc3LDYgKzIxOTEsMTAgQEANCj4gPiAgIAlzdHJ1Y3QgcnRlX3BjaV9kZXZpY2Ug KnBjaV9kZXYgPSBSVEVfREVWX1RPX1BDSShkZXYtPmRldmljZSk7DQo+ID4NCj4gPiAgIAlkZXYt PmRldl9vcHMgPSAmYWNjMjAwX2JiZGV2X29wczsNCj4gPiArCWRldi0+ZW5xdWV1ZV9sZHBjX2Vu Y19vcHMgPSBhY2MyMDBfZW5xdWV1ZV9sZHBjX2VuYzsNCj4gPiArCWRldi0+ZW5xdWV1ZV9sZHBj X2RlY19vcHMgPSBhY2MyMDBfZW5xdWV1ZV9sZHBjX2RlYzsNCj4gPiArCWRldi0+ZGVxdWV1ZV9s ZHBjX2VuY19vcHMgPSBhY2MyMDBfZGVxdWV1ZV9sZHBjX2VuYzsNCj4gPiArCWRldi0+ZGVxdWV1 ZV9sZHBjX2RlY19vcHMgPSBhY2MyMDBfZGVxdWV1ZV9sZHBjX2RlYzsNCj4gPg0KPiA+ICAgCSgo c3RydWN0IGFjY19kZXZpY2UgKikgZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZSktPnBmX2RldmljZSA9 DQo+ID4gICAJCQkhc3RyY21wKGRydi0+ZHJpdmVyLm5hbWUsDQoNClRoYW5rcw0K