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 B9F09425C4; Sun, 17 Sep 2023 18:47:44 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 47D5F40291; Sun, 17 Sep 2023 18:47:44 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id F2AF84025E; Sun, 17 Sep 2023 18:47:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1694969262; x=1726505262; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=shWvXSE5CaRpipE7BUbg5/pkbcNX2VtFpZTUYAjF7VI=; b=dtPQUmWBk2SIfmoVwjuVtX3dQ+Td+fqRz+/iAASfajBCW4bNCMlNBp3K 3xHJeKjMJL28Lt5PrBiFNCizPqrIHTv2cfuhH7yGmISvbwgdcHnSwSLkB iAR3vf5hULsSOgwQfOP+TCf0rS6JGWC5HYEEMf9GbtNYwtJkd4Mx4useg E0NAYflIKoyoTT1+oDmfiUFy3XyOfJhHZoxAZMbR5JBL0xMa0oiJojYZN SGFIUobXAvjE4x5YLQJkh+J91kBoyjzI7jNfT0nambuyKn4coM87Y/L/0 QGgby5eBG2Yj32DIKeZm0r103V+u1XeperZpU3BmqhRGjhSvmZCq6jry9 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10836"; a="358922768" X-IronPort-AV: E=Sophos;i="6.02,154,1688454000"; d="scan'208";a="358922768" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Sep 2023 09:47:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10836"; a="780655803" X-IronPort-AV: E=Sophos;i="6.02,154,1688454000"; d="scan'208";a="780655803" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by orsmga001.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 17 Sep 2023 09:47:39 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32; Sun, 17 Sep 2023 09:47:39 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32 via Frontend Transport; Sun, 17 Sep 2023 09:47:39 -0700 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (104.47.73.174) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.32; Sun, 17 Sep 2023 09:47:39 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cSAqlCw2AD8jsO+3NrLPgwaCwtuMt5bYtZhf+6kFj/eEyl5o96oVneWiB3O40/Kzw9JPEXxvYIzxzGJ6EPB/cMUmeRCSH1m9n2gL+i4knDtVI2z6QyxhyyqdjzDa7bH83q9hWzcaWMgAxW1sWK4NIQgKK6iJz6cXcKQI8kBSv6YQ1ti1jVfhPULKJDiwu23iwrBq+49eigYtcWWbwrfItR9b3vfyyZ11xZuMYyD8gPnNAnmZAW0ojr0a1Hd/45bSS9ZDTwSaKYbO9NPombJ5APGGK2w+7bUBFz0sbaOU6dPdt8RVWDEcTnwWr7Q12BIuy4L4zLgmILp1K3RLFtR26A== 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=shWvXSE5CaRpipE7BUbg5/pkbcNX2VtFpZTUYAjF7VI=; b=AjLLQHUP9cE5wCLaiwz15tfdzJaWndHkdj7CUhcrSoEV6KA6aI8wJ5YYmrxpEaxzx5xAhrvmphiXc/JgVWhg6P5EOZAQ0pqxg/DnaYmfhYqzslI1jfYGIurTDuOj8ofa0YkkXyP4DfvO/rjJT+um0WkeP2AkhM6j3HO7z4l4UNi2hPczqPpY8bZDn90vD90A8V9RabMqWlJV2oDBYdO9SD5FX6h4+eEyPNlB9RUd7PfX1Hs9P74uGKEo1wuITImHcB6Dky2aPFVNuSHicFHlU9KuFdPOuGbc4gfFV328j3pcVUOYnhGwAippqrfshJ7N/V8IQW2s+pnfVdasQbcwRQ== 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 DM6PR11MB3868.namprd11.prod.outlook.com (2603:10b6:5:19f::13) by MW4PR11MB7055.namprd11.prod.outlook.com (2603:10b6:303:22b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.24; Sun, 17 Sep 2023 16:46:40 +0000 Received: from DM6PR11MB3868.namprd11.prod.outlook.com ([fe80::ea65:2100:3091:875a]) by DM6PR11MB3868.namprd11.prod.outlook.com ([fe80::ea65:2100:3091:875a%7]) with mapi id 15.20.6792.024; Sun, 17 Sep 2023 16:46:40 +0000 From: "Naga Harish K, S V" To: mattias.ronnblom , "dev@dpdk.org" CC: Jerin Jacob , "techboard@dpdk.org" , "Van Haaren, Harry" , "hofors@lysator.liu.se" , "Nilsson, Peter" , Heng Wang , "Pavan Nikhilesh" , "Gujjar, Abhinandan S" , "Carrillo, Erik G" , Shijith Thotton , "Hemant Agrawal" , Sachin Saxena , Liang Ma , "Mccarthy, Peter" , "Yan, Zhirun" , mattias.ronnblom Subject: RE: [PATCH v3 1/3] lib: introduce dispatcher library Thread-Topic: [PATCH v3 1/3] lib: introduce dispatcher library Thread-Index: AQHZ3zEFWjX+hk46dEKV8Z0r2eMwKrAaHtFQ Date: Sun, 17 Sep 2023 16:46:40 +0000 Message-ID: References: <20230616074041.159675-2-mattias.ronnblom@ericsson.com> <20230904130313.327809-1-mattias.ronnblom@ericsson.com> <20230904130313.327809-2-mattias.ronnblom@ericsson.com> In-Reply-To: <20230904130313.327809-2-mattias.ronnblom@ericsson.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: 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: DM6PR11MB3868:EE_|MW4PR11MB7055:EE_ x-ms-office365-filtering-correlation-id: d7603e36-eeba-4f3c-9da0-08dbb79daaa8 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: qIOzVr73pXa/r+XzNIoN/oLhJRRRKn3n4eVmewecPYr/VOt/MsC88U2RP7Nz+Wtkw7TwAYLqXOB0JytDSut5mRcokgI2i/U4QpVUBUVnl6lgxMURfcbuq7+ZbtuEvHEDiOyHVAwoAPSLyVe1K1vL+io4P3I8TgfCGy2N2HISjoYgyjDgdHzUZrV+arEYmLWQqgE4FLtwp2W3fvrGo1beofQZEv9xrIpGQti3y3Ba+hZmYEVY1WZo0CKEt1XPqEG8Zuu1EgmQL7hsOl7q/PRcHfFUbKpXb/uK2bEgDwXwx/GsB9IUsaBDJY1wETttUAFlgykee/MqZtFfoFoeuAsnw2j4eqHASeWWpi9YMdQYqg+rvDyTgZeTGqbNQXc+Rjhmp/LKSICNE4Xei93QCE8O1w9s9+6Cp9QIgPKm+SUEDss5pPsngZ/IKwSYMgqvrFr3uvD2eOJZVEaB+fdZaontL4XBtPbpIIeKIv6hLHRDpyAOSFrMW2/yvKPL4JojnmOM6ELvmNUJOQ+tet2hM9PgfpxI7byGg3yHf+IJx5XIRHbhghaZ6trzqUDySrEo50RJRuobDIA3TFiKpgV7evB0xBX3H98Qf9tc8KXbloyzaXSinZyZQAWWyYY4oZESSwfD x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR11MB3868.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(39860400002)(396003)(366004)(346002)(376002)(136003)(451199024)(186009)(1800799009)(76116006)(66946007)(53546011)(7696005)(6506007)(66476007)(66446008)(66556008)(64756008)(54906003)(110136005)(9686003)(316002)(41300700001)(478600001)(71200400001)(4326008)(8936002)(8676002)(52536014)(5660300002)(26005)(33656002)(38070700005)(38100700002)(122000001)(82960400001)(55016003)(66574015)(83380400001)(2906002)(7416002)(86362001)(30864003)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cVFUUEJKYjRJbms4RkJmWHJIU1A3ajlzZ0VEdXJlR0dJc0RnQXFTVS9ydndZ?= =?utf-8?B?UVJlOURjV2pzQ3c2RC9jdE5oQVg5VVhMQXRnblI2SlJvU0hKeWFSK1pGdkpQ?= =?utf-8?B?UUR6M1BFQjE2alFvNmxYZDEzZWt0WDFmOFhUZ3JVYkdwanZaU0pVY0xvQ0tJ?= =?utf-8?B?a0Q0VjN2dzlsb0hSVXEzS3lFNnlQc2VUaUZkTXhTZGVwejY3VFVVUDArRTdO?= =?utf-8?B?N3UwUjdiZXJNWWlqQmxRTHpFNmVnRUJQZit2QVNXeUhweVk3cjBFdGdmVTJ0?= =?utf-8?B?azB5RkRLR1hOdmVWYitvK3k2emM5cUFHZXNPSHZNTWdxckNBR25vTFYveGR1?= =?utf-8?B?U3ozcmd0SU5SQ1dIa2wrQnFsbDRUUjFyenhuNkhra3lMWVZiUmYwd0UwanRt?= =?utf-8?B?UWZ6SmVFRnZRNjVJc0ROMXJNU3F6bHlxWTNvMU53ZEV4RGdnVkRWMlhiOEZW?= =?utf-8?B?bjB5cUJ4djkvZ2hSMzFrMnlXeEkwNXZ2WllRKzdFSXowbm9JbTJ1SFJ3bHFq?= =?utf-8?B?M0NrTFdGaHZTSnpJd3hoR2R0UmEybkhuL3BHWUtySDhGTlVVWW5hVzdaZDVn?= =?utf-8?B?MVhmZDFpTnRJdktabWdnQWZlWjQ4K0NuVU5wSk9LM2VENWJFK0V6TUdiVVZl?= =?utf-8?B?NjNDYXhTUFEzQ29FVHBNcmdxMmZ4Y0xGWWQvTHY2WGJIbGIxcE5TbFJzdEJs?= =?utf-8?B?UDBjdXFwK2lVMWRJRGIyNDFzeDQyU0w0OHB2TFVFTDVoTzVSYTk3SERSVkdJ?= =?utf-8?B?YW0xNUp3elcvOFZYdUZNWVhhTEhrNitrQ2NWcG5jQ3lwN01PNHBDUldXZnk4?= =?utf-8?B?ODliMjhLUHpaWmlhMzhWZHhodjFGeGVxSzUraGFRTG1Ca1FJSmtHb20xeUhI?= =?utf-8?B?YXY5bHdnQnozbmtScSszdzFud2xhM3ptNzJQSGwxYk85UkpCTEo0WTJTZ1JB?= =?utf-8?B?Q0FJWUUvU3VhU3RtZ1djWEpNbGVVZzUwc1NwelQvaXo0V1ZCc1AxNTA3Mnd3?= =?utf-8?B?QjF0OG1lcnk5OFZUV0RENFYwWS90SzRGUUhFSDdXdEV0aC9ZZU5Ib2tpUEtC?= =?utf-8?B?aTYrMWMvSDJFbUpCSnovQ25XWnUrc2p5RGJUTkE2ZktTWmM3aDlBOENlWjBD?= =?utf-8?B?TTJUcndPS0F4WHg5VlVJaWp3UXNjK0ZuU1hjdThrSmZmNnZsQU9yVmFSdkZx?= =?utf-8?B?N1hQV3M1cGtrZVZvbDJzWVlyZDBkMitMRkpJa05kOTFZYVR5UGhxb3ErQ2t1?= =?utf-8?B?bVR6QmQ5K3BRWEhBeFcrd29KckJtUTNGVDVkY1N3ZVovdGQ0YVh6OFpIT3hF?= =?utf-8?B?dVhNT2hnTlk0RnlvSFV3SlV4allMWThkTkRtU3hkQVR4MU9RaExmcVNDb3Rn?= =?utf-8?B?SFNJcWE5QkpCL3UreXlaQmRXT0wwRHZtZStrdG14M3AxMHhscm5YNHBRZzU5?= =?utf-8?B?cjZOeS9pZTUxdGVyRDU3QWNoMXNXeUJsNFBrZkZjb3A5cy9pNm5DL1BlOG4z?= =?utf-8?B?Y0dmVXhyZ3pwcWI2Qjl6SWI5TnQvOG5vUUZpMmd2MmVCUDZKK29tdFB1dFBh?= =?utf-8?B?VXYwQUxiTnZ3Q1RHMHkzQXprQXN1d2JUZVFFY28veGxrdE53dDNLVHVnSmxy?= =?utf-8?B?aUx0bFYzc002d3pZTXhZWjI2ZGNhUFEvZUVUWTJqQXY5eVp3b0tYci9ZVzhR?= =?utf-8?B?U3NTTHdJVHdqRUV2MkJMT3Y3THMvd05MQkt5YjlPSmRTWnhWcUNRbFlsTklQ?= =?utf-8?B?RGIvMGZLNmRoYVRZR2xuV3l5U0JqT1ZYRkQ1ZE1jbE03WVp1MmNCRmhuWXNC?= =?utf-8?B?anA3R2hRd3dvM3A4SUJxOU8vb2syY3dZTDRlc0lydHNEV2R4Z3EwUkh4Qi80?= =?utf-8?B?TnNZZ0Y5MTFxL3hPS1dEMUR5UWhPNVh6bTU2a3NXMGhGeGpmSlJCTWhTYW01?= =?utf-8?B?QzBjenltQ3cxblFxYzJsWENBcVlDWWNwRnpGS1J0NFVmSWwvVGYrdk1OeEp3?= =?utf-8?B?Z1JFU2ppMENPaVFab1VmUWxUUFFONWY2UVBMOHdNdGR2STlEMUV5bzlvYjE3?= =?utf-8?B?TFFOZG54aDIyZDdMSS92L01LOEZBRGc5REc4bm0vS2RPdUVUNklGUGJqc0s1?= =?utf-8?B?c2Zsb21ja3A5TGx0WktnUmdwaWZFL3hzKzJjMkZMcGFuZWVEaXg4YUFGK25l?= =?utf-8?B?cEE9PQ==?= 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: DM6PR11MB3868.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d7603e36-eeba-4f3c-9da0-08dbb79daaa8 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Sep 2023 16:46:40.3865 (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: rwNX1vAbmQh7IOdgdAd+1EBwSOB9j7+xF391T/vV174QFA/UZcj8hVlDXECabcsXETa7PddKRMoN611plS2Uq8ifMn1DuOnRsEFmyqY2xtQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR11MB7055 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 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWF0dGlhcyBSw7ZubmJs b20gPG1hdHRpYXMucm9ubmJsb21AZXJpY3Nzb24uY29tPg0KPiBTZW50OiBNb25kYXksIFNlcHRl bWJlciA0LCAyMDIzIDY6MzMgUE0NCj4gVG86IGRldkBkcGRrLm9yZw0KPiBDYzogSmVyaW4gSmFj b2IgPGplcmluakBtYXJ2ZWxsLmNvbT47IHRlY2hib2FyZEBkcGRrLm9yZzsgVmFuIEhhYXJlbiwN Cj4gSGFycnkgPGhhcnJ5LnZhbi5oYWFyZW5AaW50ZWwuY29tPjsgaG9mb3JzQGx5c2F0b3IubGl1 LnNlOyBOaWxzc29uLCBQZXRlcg0KPiA8cGV0ZXIuai5uaWxzc29uQGVyaWNzc29uLmNvbT47IEhl bmcgV2FuZyA8aGVuZy53YW5nQGVyaWNzc29uLmNvbT47DQo+IE5hZ2EgSGFyaXNoIEssIFMgViA8 cy52Lm5hZ2EuaGFyaXNoLmtAaW50ZWwuY29tPjsgUGF2YW4gTmlraGlsZXNoDQo+IDxwYmhhZ2F2 YXR1bGFAbWFydmVsbC5jb20+OyBHdWpqYXIsIEFiaGluYW5kYW4gUw0KPiA8YWJoaW5hbmRhbi5n dWpqYXJAaW50ZWwuY29tPjsgQ2FycmlsbG8sIEVyaWsgRyA8RXJpay5HLkNhcnJpbGxvQGludGVs LmNvbT47DQo+IFNoaWppdGggVGhvdHRvbiA8c3Rob3R0b25AbWFydmVsbC5jb20+OyBIZW1hbnQg QWdyYXdhbA0KPiA8aGVtYW50LmFncmF3YWxAbnhwLmNvbT47IFNhY2hpbiBTYXhlbmEgPHNhY2hp bi5zYXhlbmFAb3NzLm54cC5jb20+Ow0KPiBMaWFuZyBNYSA8bGlhbmdtYUBsaWFuZ2JpdC5jb20+ OyBNY2NhcnRoeSwgUGV0ZXINCj4gPFBldGVyLk1jY2FydGh5QGludGVsLmNvbT47IFlhbiwgWmhp cnVuIDxaaGlydW4uWWFuQGludGVsLmNvbT47DQo+IG1hdHRpYXMucm9ubmJsb20gPG1hdHRpYXMu cm9ubmJsb21AZXJpY3Nzb24uY29tPg0KPiBTdWJqZWN0OiBbUEFUQ0ggdjMgMS8zXSBsaWI6IGlu dHJvZHVjZSBkaXNwYXRjaGVyIGxpYnJhcnkNCj4gDQo+IFRoZSBwdXJwb3NlIG9mIHRoZSBkaXNw YXRjaGVyIGxpYnJhcnkgaXMgdG8gaGVscCByZWR1Y2UgY291cGxpbmcgaW4gYW4NCj4gRXZlbnRk ZXYtYmFzZWQgRFBESyBhcHBsaWNhdGlvbi4NCj4gDQo+IEluIGFkZGl0aW9uLCB0aGUgZGlzcGF0 Y2hlciBhbHNvIHByb3ZpZGVzIGEgY29udmVuaWVudCBhbmQgZmxleGlibGUgd2F5IGZvciB0aGUN Cj4gYXBwbGljYXRpb24gdG8gdXNlIHNlcnZpY2UgY29yZXMgZm9yIGFwcGxpY2F0aW9uLWxldmVs IHByb2Nlc3NpbmcuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBNYXR0aWFzIFLDtm5uYmxvbSA8bWF0 dGlhcy5yb25uYmxvbUBlcmljc3Nvbi5jb20+DQo+IFRlc3RlZC1ieTogUGV0ZXIgTmlsc3NvbiA8 cGV0ZXIuai5uaWxzc29uQGVyaWNzc29uLmNvbT4NCj4gUmV2aWV3ZWQtYnk6IEhlbmcgV2FuZyA8 aGVuZy53YW5nQGVyaWNzc29uLmNvbT4NCj4gDQo+IC0tDQo+IA0KPiBQQVRDSCB2MzoNCj4gIG8g VG8gdW5kZXJsaW5lIGl0cyBvcHRpb25hbCBjaGFyYWN0ZXIgYW5kIHNpbmNlIGl0IGRvZXMgbm90 IHByb3ZpZGUNCj4gICAgaGFyZHdhcmUgYWJzdHJhY3Rpb24sIHRoZSBldmVudCBkaXNwYXRjaGVy IGlzIG5vdyBhIHNlcGFyYXRlDQo+ICAgIGxpYnJhcnkuDQo+ICBvIENoYW5nZSBuYW1lIGZyb20g cnRlX2V2ZW50X2Rpc3BhdGNoZXIgLT4gcnRlX2Rpc3BhdGNoZXIsIHRvIG1ha2UgaXQNCj4gICAg c2hvcnRlciBhbmQgdG8gYXZvaWQgdGhlIHJ0ZV9ldmVudF8qIG5hbWVzcGFjZS4NCj4gDQoNClJ0 ZV9kaXNwYXRjaGVyIGlzIGJhc2ljYWxseSBkaXNwYXRjaGluZyBldmVudHMgYnV0IGl0IGZlZWxz IGxpa2UgdGhlIG5hbWUgZG9lcyBub3QgY29udmV5IHRoYXQuDQpBbHNvLCBpdCBpcyBsaWtlIGFu eSBvdGhlciBhZGFwdGVyIHNlcnZpY2UgdGhhdCBjYW4gcmVzaWRlIHdpdGhpbiB0aGUgZXZlbnRk ZXYgZGlyZWN0b3J5Lg0KDQpJIGNhbiBzZWUgc29tZSBkaXNjdXNzaW9uIGluIHByZXZpb3VzIHRo cmVhZHMgcmVsYXRlZCB0byB0aGUgcGxhY2VtZW50IG9mIHRoZSBkaXNwYXRjaGVyIGxpYnJhcnku DQoNCkl0IGlzIGFuIG9wdGlvbmFsIGV2ZW50ZGV2IGFwcGxpY2F0aW9uIHNlcnZpY2UsIG5vdCBl bmZvcmNpbmcgdGhpcyBwcm9ncmFtbWluZyBtb2RlbCB0byB0aGUgYXBwbGljYXRpb24uDQpUaGUg ZG9jdW1lbnRhdGlvbiBtYXkgbmVlZCB0byBiZSB1cGRhdGVkIGFuZCBtZW50aW9uIHRoYXQgdGhp cyBpcyBvcHRpb25hbC4NCg0KSWYgYW55IGhhcmR3YXJlIGNvbWVzIHVwIHdpdGggdGhlIGRpc3Bh dGNoZXIgZmVhdHVyZSwgdGhlbiB0aGlzIGxpYnJhcnkgbWF5IG5lZWQgdG8gYmUgbW92ZWQgaW5z aWRlIGV2ZW50ZGV2IGxpYnJhcnkgbGF0ZXIuDQoNClNvLCBJdCBtYWtlcyBzZW5zZSB0byBrZWVw IHRoaXMgb3B0aW9uYWwgc2VydmljZSBpbiB0aGUgZXZlbnRkZXYgZm9sZGVyIGFzIGFuIG9wdGlv bmFsIGZlYXR1cmUuDQoNCj4gUEFUQ0ggdjI6DQo+ICBvIEFkZCBkZXF1ZXVlIGJhdGNoIGNvdW50 IHN0YXRpc3RpYy4NCj4gIG8gQWRkIHN0YXRpc3RpY3MgcmVzZXQgZnVuY3Rpb24gdG8gQVBJLg0K PiAgbyBDbGFyaWZ5IE1UIHNhZmV0eSBndWFyYW50ZWVzIChvciBsYWNrIHRoZXJlb2YpIGluIHRo ZSBBUEkgZG9jdW1lbnRhdGlvbi4NCj4gIG8gQ2hhbmdlIGxvb3AgdmFyaWFibGUgdHlwZSBpbiBl dmRfbGNvcmVfZ2V0X2hhbmRsZXJfYnlfaWQoKSB0byB1aW50MTZfdCwNCj4gICAgdG8gYmUgY29u c2lzdGVudCB3aXRoIHNpbWlsYXIgbG9vcHMgZWxzZXdoZXJlIGluIHRoZSBkaXNwYXRjaGVyLg0K PiAgbyBGaXggdmFyaWFibGUgbmFtZXMgaW4gZmluYWxpemVyIHVucmVnaXN0ZXIgZnVuY3Rpb24u DQo+IA0KPiBQQVRDSDoNCj4gIG8gQ2hhbmdlIHByZWZpeCBmcm9tIFJFRCB0byBFVkQsIHRvIGF2 b2lkIGNvbmZ1c2lvbiB3aXRoIHJhbmRvbQ0KPiAgICBlYXJseSBkZXRlY3Rpb24uDQo+IA0KPiBS RkMgdjQ6DQo+ICBvIE1vdmUgaGFuZGxlcnMgdG8gcGVyLWxjb3JlIGRhdGEgc3RydWN0dXJlcy4N Cj4gIG8gSW50cm9kdWNlIG1lY2hhbmlzbSB3aGljaCByZWFycmFuZ2VzIGhhbmRsZXJzIHNvIHRo YXQgb2Z0ZW4tdXNlZA0KPiAgICBoYW5kbGVycyB0ZW5kIHRvIGJlIHRyaWVkIGZpcnN0Lg0KPiAg byBUZXJtaW5hdGUgZGlzcGF0Y2ggbG9vcCBpbiBjYXNlIGFsbCBldmVudHMgYXJlIGRlbGl2ZXJl ZC4NCj4gIG8gVG8gYXZvaWQgdGhlIGRpc3BhdGNoZXIncyBzZXJ2aWNlIGZ1bmN0aW9uIGhvZ2dp bmcgdGhlIENQVSwgcHJvY2Vzcw0KPiAgICBvbmx5IG9uZSBiYXRjaCBwZXIgY2FsbC4NCj4gIG8g SGF2ZSBzZXJ2aWNlIGZ1bmN0aW9uIHJldHVybiAtRUFHQUlOIGlmIG5vIHdvcmsgaXMgcGVyZm9y bWVkLg0KPiAgbyBFdmVudHMgZGVsaXZlcmVkIGluIHRoZSBwcm9jZXNzIGZ1bmN0aW9uIGlzIG5v IGxvbmdlciBtYXJrZWQgJ2NvbnN0JywNCj4gICAgc2luY2UgbW9kaWZ5aW5nIHRoZW0gbWF5IGJl IHVzZWZ1bCBmb3IgdGhlIGFwcGxpY2F0aW9uIGFuZCBjYXVzZQ0KPiAgICBubyBkaWZmaWN1bHRp ZXMgZm9yIHRoZSBkaXNwYXRjaGVyLg0KPiAgbyBWYXJpb3VzIG1pbm9yIEFQSSBkb2N1bWVudGF0 aW9uIGltcHJvdmVtZW50cy4NCj4gDQo+IFJGQyB2MzoNCj4gIG8gQWRkIHN0YXRzX2dldCgpIGZ1 bmN0aW9uIHRvIHRoZSB2ZXJzaW9uLm1hcCBmaWxlLg0KPiAtLS0NCj4gIE1BSU5UQUlORVJTICAg ICAgICAgICAgICAgICAgICAgfCAgIDMgKw0KPiAgbGliL2Rpc3BhdGNoZXIvbWVzb24uYnVpbGQg ICAgICB8ICAxNyArDQo+ICBsaWIvZGlzcGF0Y2hlci9ydGVfZGlzcGF0Y2hlci5jIHwgNzkxDQo+ ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrICBsaWIvZGlzcGF0Y2hlci9ydGVfZGlz cGF0Y2hlci5oIHwNCj4gNDgwICsrKysrKysrKysrKysrKysrKysNCj4gIGxpYi9kaXNwYXRjaGVy L3ZlcnNpb24ubWFwICAgICAgfCAgMjAgKw0KPiAgbGliL21lc29uLmJ1aWxkICAgICAgICAgICAg ICAgICB8ICAgMiArDQo+ICA2IGZpbGVzIGNoYW5nZWQsIDEzMTMgaW5zZXJ0aW9ucygrKQ0KPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9kaXNwYXRjaGVyL21lc29uLmJ1aWxkICBjcmVhdGUgbW9k ZSAxMDA2NDQNCj4gbGliL2Rpc3BhdGNoZXIvcnRlX2Rpc3BhdGNoZXIuYyAgY3JlYXRlIG1vZGUg MTAwNjQ0DQo+IGxpYi9kaXNwYXRjaGVyL3J0ZV9kaXNwYXRjaGVyLmggIGNyZWF0ZSBtb2RlIDEw MDY0NA0KPiBsaWIvZGlzcGF0Y2hlci92ZXJzaW9uLm1hcA0KPiANCj4gZGlmZiAtLWdpdCBhL01B SU5UQUlORVJTIGIvTUFJTlRBSU5FUlMNCj4gaW5kZXggYTkyNjE1NWYyNi4uNjcwNGNkNWIyYyAx MDA2NDQNCj4gLS0tIGEvTUFJTlRBSU5FUlMNCj4gKysrIGIvTUFJTlRBSU5FUlMNCj4gQEAgLTE3 MjYsNiArMTcyNiw5IEBAIE06IE5pdGhpbiBEYWJpbHB1cmFtDQo+IDxuZGFiaWxwdXJhbUBtYXJ2 ZWxsLmNvbT4NCj4gIE06IFBhdmFuIE5pa2hpbGVzaCA8cGJoYWdhdmF0dWxhQG1hcnZlbGwuY29t Pg0KPiAgRjogbGliL25vZGUvDQo+IA0KPiArRGlzcGF0Y2hlciAtIEVYUEVSSU1FTlRBTA0KPiAr TTogTWF0dGlhcyBSw7ZubmJsb20gPG1hdHRpYXMucm9ubmJsb21AZXJpY3Nzb24uY29tPg0KPiAr RjogbGliL2Rpc3BhdGNoZXIvDQo+IA0KPiAgVGVzdCBBcHBsaWNhdGlvbnMNCj4gIC0tLS0tLS0t LS0tLS0tLS0tDQo+IGRpZmYgLS1naXQgYS9saWIvZGlzcGF0Y2hlci9tZXNvbi5idWlsZCBiL2xp Yi9kaXNwYXRjaGVyL21lc29uLmJ1aWxkIG5ldyBmaWxlDQo+IG1vZGUgMTAwNjQ0IGluZGV4IDAw MDAwMDAwMDAuLmM2MDU0YTNhNWQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9saWIvZGlzcGF0 Y2hlci9tZXNvbi5idWlsZA0KPiBAQCAtMCwwICsxLDE3IEBADQo+ICsjIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgIyBDb3B5cmlnaHQoYykgMjAyMyBFcmljc3NvbiBBQg0K PiArDQo+ICtpZiBpc193aW5kb3dzDQo+ICsgICAgYnVpbGQgPSBmYWxzZQ0KPiArICAgIHJlYXNv biA9ICdub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MnDQo+ICsgICAgc3ViZGlyX2RvbmUoKQ0KPiAr ZW5kaWYNCj4gKw0KPiArc291cmNlcyA9IGZpbGVzKA0KPiArICAgICAgICAncnRlX2Rpc3BhdGNo ZXIuYycsDQo+ICspDQo+ICtoZWFkZXJzID0gZmlsZXMoDQo+ICsgICAgICAgICdydGVfZGlzcGF0 Y2hlci5oJywNCj4gKykNCj4gKw0KPiArZGVwcyArPSBbJ2V2ZW50ZGV2J10NCj4gZGlmZiAtLWdp dCBhL2xpYi9kaXNwYXRjaGVyL3J0ZV9kaXNwYXRjaGVyLmMgYi9saWIvZGlzcGF0Y2hlci9ydGVf ZGlzcGF0Y2hlci5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAuLjMz MTlmZTA5ZjINCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9saWIvZGlzcGF0Y2hlci9ydGVfZGlz cGF0Y2hlci5jDQo+IEBAIC0wLDAgKzEsNzkxIEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyMyBFcmljc3NvbiBBQg0K PiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxzdGRib29sLmg+DQo+ICsjaW5jbHVkZSA8c3RkaW50 Lmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxydGVfYnJhbmNoX3ByZWRpY3Rpb24uaD4NCj4gKyNpbmNs dWRlIDxydGVfY29tbW9uLmg+DQo+ICsjaW5jbHVkZSA8cnRlX2xjb3JlLmg+DQo+ICsjaW5jbHVk ZSA8cnRlX3JhbmRvbS5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9zZXJ2aWNlX2NvbXBvbmVudC5oPg0K PiArDQo+ICsjaW5jbHVkZSAiZXZlbnRkZXZfcG1kLmgiDQo+ICsNCj4gKyNpbmNsdWRlIDxydGVf ZGlzcGF0Y2hlci5oPg0KPiArDQo+ICsjZGVmaW5lIEVWRF9NQVhfUE9SVFNfUEVSX0xDT1JFIDQN Cj4gKyNkZWZpbmUgRVZEX01BWF9IQU5ETEVSUyAzMg0KPiArI2RlZmluZSBFVkRfTUFYX0ZJTkFM SVpFUlMgMTYNCj4gKyNkZWZpbmUgRVZEX0FWR19QUklPX0lOVEVSVkFMIDIwMDANCj4gKw0KPiAr c3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xjb3JlX3BvcnQgew0KPiArCXVpbnQ4X3QgcG9ydF9pZDsN Cj4gKwl1aW50MTZfdCBiYXRjaF9zaXplOw0KPiArCXVpbnQ2NF90IHRpbWVvdXQ7DQo+ICt9Ow0K PiArDQo+ICtzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfaGFuZGxlciB7DQo+ICsJaW50IGlkOw0KPiAr CXJ0ZV9kaXNwYXRjaGVyX21hdGNoX3QgbWF0Y2hfZnVuOw0KPiArCXZvaWQgKm1hdGNoX2RhdGE7 DQo+ICsJcnRlX2Rpc3BhdGNoZXJfcHJvY2Vzc190IHByb2Nlc3NfZnVuOw0KPiArCXZvaWQgKnBy b2Nlc3NfZGF0YTsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBydGVfZGlzcGF0Y2hlcl9maW5hbGl6 ZXIgew0KPiArCWludCBpZDsNCj4gKwlydGVfZGlzcGF0Y2hlcl9maW5hbGl6ZV90IGZpbmFsaXpl X2Z1bjsNCj4gKwl2b2lkICpmaW5hbGl6ZV9kYXRhOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IHJ0 ZV9kaXNwYXRjaGVyX2xjb3JlIHsNCj4gKwl1aW50OF90IG51bV9wb3J0czsNCj4gKwl1aW50MTZf dCBudW1faGFuZGxlcnM7DQo+ICsJaW50MzJfdCBwcmlvX2NvdW50Ow0KPiArCXN0cnVjdCBydGVf ZGlzcGF0Y2hlcl9sY29yZV9wb3J0DQo+IHBvcnRzW0VWRF9NQVhfUE9SVFNfUEVSX0xDT1JFXTsN Cj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfaGFuZGxlciBoYW5kbGVyc1tFVkRfTUFYX0hBTkRM RVJTXTsNCj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfc3RhdHMgc3RhdHM7DQo+ICt9IF9fcnRl X2NhY2hlX2FsaWduZWQ7DQo+ICsNCj4gK3N0cnVjdCBydGVfZGlzcGF0Y2hlciB7DQo+ICsJdWlu dDhfdCBpZDsNCj4gKwl1aW50OF90IGV2ZW50X2Rldl9pZDsNCj4gKwlpbnQgc29ja2V0X2lkOw0K PiArCXVpbnQzMl90IHNlcnZpY2VfaWQ7DQo+ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xjb3Jl IGxjb3Jlc1tSVEVfTUFYX0xDT1JFXTsNCj4gKwl1aW50MTZfdCBudW1fZmluYWxpemVyczsNCj4g KwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfZmluYWxpemVyIGZpbmFsaXplcnNbRVZEX01BWF9GSU5B TElaRVJTXTsgfTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBydGVfZGlzcGF0Y2hlciAqZGlzcGF0 Y2hlcnNbVUlOVDhfTUFYXTsNCj4gKw0KPiArc3RhdGljIGJvb2wNCj4gK2V2ZF9oYXNfZGlzcGF0 Y2hlcih1aW50OF90IGlkKQ0KPiArew0KPiArCXJldHVybiBkaXNwYXRjaGVyc1tpZF0gIT0gTlVM TDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBydGVfZGlzcGF0Y2hlciAqDQo+ICtldmRf Z2V0X2Rpc3BhdGNoZXIodWludDhfdCBpZCkNCj4gK3sNCj4gKwlyZXR1cm4gZGlzcGF0Y2hlcnNb aWRdOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArZXZkX3NldF9kaXNwYXRjaGVyKHVp bnQ4X3QgaWQsIHN0cnVjdCBydGVfZGlzcGF0Y2hlciAqZGlzcGF0Y2hlcikgew0KPiArCWRpc3Bh dGNoZXJzW2lkXSA9IGRpc3BhdGNoZXI7DQo+ICt9DQo+ICsNCj4gKyNkZWZpbmUgRVZEX1ZBTElE X0lEX09SX1JFVF9FSU5WQUwoaWQpDQo+IAlcDQo+ICsJZG8gewkJCQkJCQkJXA0KPiArCQlpZiAo dW5saWtlbHkoIWV2ZF9oYXNfZGlzcGF0Y2hlcihpZCkpKSB7CQlcDQo+ICsJCQlSVEVfRURFVl9M T0dfRVJSKCJJbnZhbGlkIGRpc3BhdGNoZXIgaWQgJWRcbiIsIGlkKTsNCj4gXA0KPiArCQkJcmV0 dXJuIC1FSU5WQUw7CQkJCQlcDQo+ICsJCX0JCQkJCQkJXA0KPiArCX0gd2hpbGUgKDApDQo+ICsN Cj4gK3N0YXRpYyBpbnQNCj4gK2V2ZF9sb29rdXBfaGFuZGxlcl9pZHgoc3RydWN0IHJ0ZV9kaXNw YXRjaGVyX2xjb3JlICpsY29yZSwNCj4gKwkJICAgICAgIGNvbnN0IHN0cnVjdCBydGVfZXZlbnQg KmV2ZW50KSB7DQo+ICsJdWludDE2X3QgaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBsY29y ZS0+bnVtX2hhbmRsZXJzOyBpKyspIHsNCj4gKwkJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2hhbmRs ZXIgKmhhbmRsZXIgPQ0KPiArCQkJJmxjb3JlLT5oYW5kbGVyc1tpXTsNCj4gKw0KPiArCQlpZiAo aGFuZGxlci0+bWF0Y2hfZnVuKGV2ZW50LCBoYW5kbGVyLT5tYXRjaF9kYXRhKSkNCj4gKwkJCXJl dHVybiBpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAtMTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IHZvaWQNCj4gK2V2ZF9wcmlvcml0aXplX2hhbmRsZXIoc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xj b3JlICpsY29yZSwNCj4gKwkJICAgICAgIGludCBoYW5kbGVyX2lkeCkNCj4gK3sNCj4gKwlzdHJ1 Y3QgcnRlX2Rpc3BhdGNoZXJfaGFuZGxlciB0bXA7DQo+ICsNCj4gKwlpZiAoaGFuZGxlcl9pZHgg PT0gMCkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJLyogTGV0IHRoZSBsdWNreSBoYW5kbGVyICJi dWJibGUiIHVwIHRoZSBsaXN0ICovDQo+ICsNCj4gKwl0bXAgPSBsY29yZS0+aGFuZGxlcnNbaGFu ZGxlcl9pZHggLSAxXTsNCj4gKw0KPiArCWxjb3JlLT5oYW5kbGVyc1toYW5kbGVyX2lkeCAtIDFd ID0gbGNvcmUtPmhhbmRsZXJzW2hhbmRsZXJfaWR4XTsNCj4gKw0KPiArCWxjb3JlLT5oYW5kbGVy c1toYW5kbGVyX2lkeF0gPSB0bXA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0K PiArZXZkX2NvbnNpZGVyX3ByaW9yaXRpemVfaGFuZGxlcihzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJf bGNvcmUgKmxjb3JlLA0KPiArCQkJCWludCBoYW5kbGVyX2lkeCwgdWludDE2X3QgaGFuZGxlcl9l dmVudHMpIHsNCj4gKwlsY29yZS0+cHJpb19jb3VudCAtPSBoYW5kbGVyX2V2ZW50czsNCj4gKw0K PiArCWlmICh1bmxpa2VseShsY29yZS0+cHJpb19jb3VudCA8PSAwKSkgew0KPiArCQlldmRfcHJp b3JpdGl6ZV9oYW5kbGVyKGxjb3JlLCBoYW5kbGVyX2lkeCk7DQo+ICsNCj4gKwkJLyoNCj4gKwkJ ICogUmFuZG9taXplIHRoZSBpbnRlcnZhbCBpbiB0aGUgdW5saWtlbHkgY2FzZQ0KPiArCQkgKiB0 aGUgdHJhZmZpYyBmb2xsb3cgc29tZSB2ZXJ5IHN0cmljdCBwYXR0ZXJuLg0KPiArCQkgKi8NCj4g KwkJbGNvcmUtPnByaW9fY291bnQgPQ0KPiArCQkJcnRlX3JhbmRfbWF4KEVWRF9BVkdfUFJJT19J TlRFUlZBTCkgKw0KPiArCQkJRVZEX0FWR19QUklPX0lOVEVSVkFMIC8gMjsNCj4gKwl9DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiArZXZkX2Rpc3BhdGNoX2V2ZW50cyhzdHJ1 Y3QgcnRlX2Rpc3BhdGNoZXIgKmRpc3BhdGNoZXIsDQo+ICsJCSAgICBzdHJ1Y3QgcnRlX2Rpc3Bh dGNoZXJfbGNvcmUgKmxjb3JlLA0KPiArCQkgICAgc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xjb3Jl X3BvcnQgKnBvcnQsDQo+ICsJCSAgICBzdHJ1Y3QgcnRlX2V2ZW50ICpldmVudHMsIHVpbnQxNl90 IG51bV9ldmVudHMpIHsNCj4gKwlpbnQgaTsNCj4gKwlzdHJ1Y3QgcnRlX2V2ZW50IGJ1cnN0c1tF VkRfTUFYX0hBTkRMRVJTXVtudW1fZXZlbnRzXTsNCj4gKwl1aW50MTZfdCBidXJzdF9sZW5zW0VW RF9NQVhfSEFORExFUlNdID0geyAwIH07DQo+ICsJdWludDE2X3QgZHJvcF9jb3VudCA9IDA7DQo+ ICsJdWludDE2X3QgZGlzcGF0Y2hfY291bnQ7DQo+ICsJdWludDE2X3QgZGlzcGF0Y2hlZCA9IDA7 DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2V2ZW50czsgaSsrKSB7DQo+ICsJCXN0cnVj dCBydGVfZXZlbnQgKmV2ZW50ID0gJmV2ZW50c1tpXTsNCj4gKwkJaW50IGhhbmRsZXJfaWR4Ow0K PiArDQo+ICsJCWhhbmRsZXJfaWR4ID0gZXZkX2xvb2t1cF9oYW5kbGVyX2lkeChsY29yZSwgZXZl bnQpOw0KPiArDQo+ICsJCWlmICh1bmxpa2VseShoYW5kbGVyX2lkeCA8IDApKSB7DQo+ICsJCQlk cm9wX2NvdW50Kys7DQo+ICsJCQljb250aW51ZTsNCj4gKwkJfQ0KPiArDQo+ICsJCWJ1cnN0c1to YW5kbGVyX2lkeF1bYnVyc3RfbGVuc1toYW5kbGVyX2lkeF1dID0gKmV2ZW50Ow0KPiArCQlidXJz dF9sZW5zW2hhbmRsZXJfaWR4XSsrOw0KPiArCX0NCj4gKw0KPiArCWRpc3BhdGNoX2NvdW50ID0g bnVtX2V2ZW50cyAtIGRyb3BfY291bnQ7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbGNvcmUt Pm51bV9oYW5kbGVycyAmJg0KPiArCQkgZGlzcGF0Y2hlZCA8IGRpc3BhdGNoX2NvdW50OyBpKysp IHsNCj4gKwkJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2hhbmRsZXIgKmhhbmRsZXIgPQ0KPiArCQkJ Jmxjb3JlLT5oYW5kbGVyc1tpXTsNCj4gKwkJdWludDE2X3QgbGVuID0gYnVyc3RfbGVuc1tpXTsN Cj4gKw0KPiArCQlpZiAobGVuID09IDApDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQloYW5k bGVyLT5wcm9jZXNzX2Z1bihkaXNwYXRjaGVyLT5ldmVudF9kZXZfaWQsIHBvcnQtDQo+ID5wb3J0 X2lkLA0KPiArCQkJCSAgICAgYnVyc3RzW2ldLCBsZW4sIGhhbmRsZXItPnByb2Nlc3NfZGF0YSk7 DQo+ICsNCj4gKwkJZGlzcGF0Y2hlZCArPSBsZW47DQo+ICsNCj4gKwkJLyoNCj4gKwkJICogU2Fm ZSwgc2luY2UgYW55IHJlc2h1ZmZsaW5nIHdpbGwgb25seSBpbnZvbHZlDQo+ICsJCSAqIGFscmVh ZHktcHJvY2Vzc2VkIGhhbmRsZXJzLg0KPiArCQkgKi8NCj4gKwkJZXZkX2NvbnNpZGVyX3ByaW9y aXRpemVfaGFuZGxlcihsY29yZSwgaSwgbGVuKTsNCj4gKwl9DQo+ICsNCj4gKwlsY29yZS0+c3Rh dHMuZXZfYmF0Y2hfY291bnQrKzsNCj4gKwlsY29yZS0+c3RhdHMuZXZfZGlzcGF0Y2hfY291bnQg Kz0gZGlzcGF0Y2hfY291bnQ7DQo+ICsJbGNvcmUtPnN0YXRzLmV2X2Ryb3BfY291bnQgKz0gZHJv cF9jb3VudDsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBkaXNwYXRjaGVyLT5udW1fZmluYWxp emVyczsgaSsrKSB7DQo+ICsJCXN0cnVjdCBydGVfZGlzcGF0Y2hlcl9maW5hbGl6ZXIgKmZpbmFs aXplciA9DQo+ICsJCQkmZGlzcGF0Y2hlci0+ZmluYWxpemVyc1tpXTsNCj4gKw0KPiArCQlmaW5h bGl6ZXItPmZpbmFsaXplX2Z1bihkaXNwYXRjaGVyLT5ldmVudF9kZXZfaWQsDQo+ICsJCQkJCXBv cnQtPnBvcnRfaWQsDQo+ICsJCQkJCWZpbmFsaXplci0+ZmluYWxpemVfZGF0YSk7DQo+ICsJfQ0K PiArfQ0KPiArDQo+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1aW50MTZfdA0KPiArZXZk X3BvcnRfZGVxdWV1ZShzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXIgKmRpc3BhdGNoZXIsDQo+ICsJCSBz dHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUgKmxjb3JlLA0KPiArCQkgc3RydWN0IHJ0ZV9kaXNw YXRjaGVyX2xjb3JlX3BvcnQgKnBvcnQpIHsNCj4gKwl1aW50MTZfdCBiYXRjaF9zaXplID0gcG9y dC0+YmF0Y2hfc2l6ZTsNCj4gKwlzdHJ1Y3QgcnRlX2V2ZW50IGV2ZW50c1tiYXRjaF9zaXplXTsN Cj4gKwl1aW50MTZfdCBuOw0KPiArDQo+ICsJbiA9IHJ0ZV9ldmVudF9kZXF1ZXVlX2J1cnN0KGRp c3BhdGNoZXItPmV2ZW50X2Rldl9pZCwgcG9ydC0NCj4gPnBvcnRfaWQsDQo+ICsJCQkJICAgIGV2 ZW50cywgYmF0Y2hfc2l6ZSwgcG9ydC0+dGltZW91dCk7DQo+ICsNCj4gKwlpZiAobGlrZWx5KG4g PiAwKSkNCj4gKwkJZXZkX2Rpc3BhdGNoX2V2ZW50cyhkaXNwYXRjaGVyLCBsY29yZSwgcG9ydCwg ZXZlbnRzLCBuKTsNCj4gKw0KPiArCWxjb3JlLT5zdGF0cy5wb2xsX2NvdW50Kys7DQo+ICsNCj4g KwlyZXR1cm4gbjsNCj4gK30NCj4gKw0KPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWlu dDE2X3QNCj4gK2V2ZF9sY29yZV9wcm9jZXNzKHN0cnVjdCBydGVfZGlzcGF0Y2hlciAqZGlzcGF0 Y2hlciwNCj4gKwkJICBzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUgKmxjb3JlKSB7DQo+ICsJ dWludDE2X3QgaTsNCj4gKwl1aW50MTZfdCBldmVudF9jb3VudCA9IDA7DQo+ICsNCj4gKwlmb3Ig KGkgPSAwOyBpIDwgbGNvcmUtPm51bV9wb3J0czsgaSsrKSB7DQo+ICsJCXN0cnVjdCBydGVfZGlz cGF0Y2hlcl9sY29yZV9wb3J0ICpwb3J0ID0NCj4gKwkJCSZsY29yZS0+cG9ydHNbaV07DQo+ICsN Cj4gKwkJZXZlbnRfY291bnQgKz0gZXZkX3BvcnRfZGVxdWV1ZShkaXNwYXRjaGVyLCBsY29yZSwg cG9ydCk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIGV2ZW50X2NvdW50Ow0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50MzJfdA0KPiArZXZkX3Byb2Nlc3Modm9pZCAqdXNlcmRhdGEpDQo+ICt7DQo+ ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICpkaXNwYXRjaGVyID0gdXNlcmRhdGE7DQo+ICsJdW5z aWduZWQgaW50IGxjb3JlX2lkID0gcnRlX2xjb3JlX2lkKCk7DQo+ICsJc3RydWN0IHJ0ZV9kaXNw YXRjaGVyX2xjb3JlICpsY29yZSA9DQo+ICsJCSZkaXNwYXRjaGVyLT5sY29yZXNbbGNvcmVfaWRd Ow0KPiArCXVpbnQ2NF90IGV2ZW50X2NvdW50Ow0KPiArDQo+ICsJZXZlbnRfY291bnQgPSBldmRf bGNvcmVfcHJvY2VzcyhkaXNwYXRjaGVyLCBsY29yZSk7DQo+ICsNCj4gKwlpZiAodW5saWtlbHko ZXZlbnRfY291bnQgPT0gMCkpDQo+ICsJCXJldHVybiAtRUFHQUlOOw0KPiArDQo+ICsJcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2V2ZF9zZXJ2aWNlX3JlZ2lzdGVyKHN0 cnVjdCBydGVfZGlzcGF0Y2hlciAqZGlzcGF0Y2hlcikgew0KPiArCXN0cnVjdCBydGVfc2Vydmlj ZV9zcGVjIHNlcnZpY2UgPSB7DQo+ICsJCS5jYWxsYmFjayA9IGV2ZF9wcm9jZXNzLA0KPiArCQku Y2FsbGJhY2tfdXNlcmRhdGEgPSBkaXNwYXRjaGVyLA0KPiArCQkuY2FwYWJpbGl0aWVzID0gUlRF X1NFUlZJQ0VfQ0FQX01UX1NBRkUsDQo+ICsJCS5zb2NrZXRfaWQgPSBkaXNwYXRjaGVyLT5zb2Nr ZXRfaWQNCj4gKwl9Ow0KPiArCWludCByYzsNCj4gKw0KPiArCXNucHJpbnRmKHNlcnZpY2UubmFt ZSwgUlRFX1NFUlZJQ0VfTkFNRV9NQVggLSAxLCAiZXZkXyVkIiwNCj4gKwkJIGRpc3BhdGNoZXIt PmlkKTsNCj4gKw0KPiArCXJjID0gcnRlX3NlcnZpY2VfY29tcG9uZW50X3JlZ2lzdGVyKCZzZXJ2 aWNlLA0KPiArJmRpc3BhdGNoZXItPnNlcnZpY2VfaWQpOw0KPiArDQo+ICsJaWYgKHJjKQ0KPiAr CQlSVEVfRURFVl9MT0dfRVJSKCJSZWdpc3RyYXRpb24gb2YgZGlzcGF0Y2hlciBzZXJ2aWNlICIN Cj4gKwkJCQkgIiVzIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsDQo+ICsJCQkJIHNlcnZp Y2UubmFtZSwgcmMpOw0KPiArDQo+ICsJcmV0dXJuIHJjOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW50DQo+ICtldmRfc2VydmljZV91bnJlZ2lzdGVyKHN0cnVjdCBydGVfZGlzcGF0Y2hlciAqZGlz cGF0Y2hlcikgew0KPiArCWludCByYzsNCj4gKw0KPiArCXJjID0gcnRlX3NlcnZpY2VfY29tcG9u ZW50X3VucmVnaXN0ZXIoZGlzcGF0Y2hlci0+c2VydmljZV9pZCk7DQo+ICsNCj4gKwlpZiAocmMp DQo+ICsJCVJURV9FREVWX0xPR19FUlIoIlVucmVnaXN0cmF0aW9uIG9mIGRpc3BhdGNoZXIgc2Vy dmljZSAiDQo+ICsJCQkJICJmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCByYyk7DQo+ICsN Cj4gKwlyZXR1cm4gcmM7DQo+ICt9DQo+ICsNCj4gK2ludA0KPiArcnRlX2Rpc3BhdGNoZXJfY3Jl YXRlKHVpbnQ4X3QgaWQsIHVpbnQ4X3QgZXZlbnRfZGV2X2lkKSB7DQo+ICsJaW50IHNvY2tldF9p ZDsNCj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXIgKmRpc3BhdGNoZXI7DQo+ICsJaW50IHJjOw0K PiArDQo+ICsJaWYgKGV2ZF9oYXNfZGlzcGF0Y2hlcihpZCkpIHsNCj4gKwkJUlRFX0VERVZfTE9H X0VSUigiRGlzcGF0Y2hlciB3aXRoIGlkICVkIGFscmVhZHkgZXhpc3RzXG4iLA0KPiArCQkJCSBp ZCk7DQo+ICsJCXJldHVybiAtRUVYSVNUOw0KPiArCX0NCj4gKw0KPiArCXNvY2tldF9pZCA9IHJ0 ZV9ldmVudF9kZXZfc29ja2V0X2lkKGV2ZW50X2Rldl9pZCk7DQo+ICsNCj4gKwlkaXNwYXRjaGVy ID0NCj4gKwkJcnRlX21hbGxvY19zb2NrZXQoImRpc3BhdGNoZXIiLCBzaXplb2Yoc3RydWN0IHJ0 ZV9kaXNwYXRjaGVyKSwNCj4gKwkJCQkgIFJURV9DQUNIRV9MSU5FX1NJWkUsIHNvY2tldF9pZCk7 DQo+ICsNCj4gKwlpZiAoZGlzcGF0Y2hlciA9PSBOVUxMKSB7DQo+ICsJCVJURV9FREVWX0xPR19F UlIoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yDQo+IGRpc3BhdGNoZXJcbiIpOw0KPiAr CQlyZXR1cm4gLUVOT01FTTsNCj4gKwl9DQo+ICsNCj4gKwkqZGlzcGF0Y2hlciA9IChzdHJ1Y3Qg cnRlX2Rpc3BhdGNoZXIpIHsNCj4gKwkJLmlkID0gaWQsDQo+ICsJCS5ldmVudF9kZXZfaWQgPSBl dmVudF9kZXZfaWQsDQo+ICsJCS5zb2NrZXRfaWQgPSBzb2NrZXRfaWQNCj4gKwl9Ow0KPiArDQo+ ICsJcmMgPSBldmRfc2VydmljZV9yZWdpc3RlcihkaXNwYXRjaGVyKTsNCj4gKw0KPiArCWlmIChy YyA8IDApIHsNCj4gKwkJcnRlX2ZyZWUoZGlzcGF0Y2hlcik7DQo+ICsJCXJldHVybiByYzsNCj4g Kwl9DQo+ICsNCj4gKwlldmRfc2V0X2Rpc3BhdGNoZXIoaWQsIGRpc3BhdGNoZXIpOw0KPiArDQo+ ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK2ludA0KPiArcnRlX2Rpc3BhdGNoZXJfZnJlZSh1 aW50OF90IGlkKQ0KPiArew0KPiArCXN0cnVjdCBydGVfZGlzcGF0Y2hlciAqZGlzcGF0Y2hlcjsN Cj4gKwlpbnQgcmM7DQo+ICsNCj4gKwlFVkRfVkFMSURfSURfT1JfUkVUX0VJTlZBTChpZCk7DQo+ ICsJZGlzcGF0Y2hlciA9IGV2ZF9nZXRfZGlzcGF0Y2hlcihpZCk7DQo+ICsNCj4gKwlyYyA9IGV2 ZF9zZXJ2aWNlX3VucmVnaXN0ZXIoZGlzcGF0Y2hlcik7DQo+ICsNCj4gKwlpZiAocmMpDQo+ICsJ CXJldHVybiByYzsNCj4gKw0KPiArCWV2ZF9zZXRfZGlzcGF0Y2hlcihpZCwgTlVMTCk7DQo+ICsN Cj4gKwlydGVfZnJlZShkaXNwYXRjaGVyKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiAr DQo+ICtpbnQNCj4gK3J0ZV9kaXNwYXRjaGVyX3NlcnZpY2VfaWRfZ2V0KHVpbnQ4X3QgaWQsIHVp bnQzMl90ICpzZXJ2aWNlX2lkKSB7DQo+ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICpkaXNwYXRj aGVyOw0KPiArDQo+ICsJRVZEX1ZBTElEX0lEX09SX1JFVF9FSU5WQUwoaWQpOw0KPiArCWRpc3Bh dGNoZXIgPSBldmRfZ2V0X2Rpc3BhdGNoZXIoaWQpOw0KPiArDQoNClNlcnZpY2VfaWQgcG9pbnRl ciBuZWVkcyB0byBiZSB2YWxpZGF0ZWQgZm9yIE5VTEwgYmVmb3JlIGFjY2Vzc2luZw0KDQoNCj4g Kwkqc2VydmljZV9pZCA9IGRpc3BhdGNoZXItPnNlcnZpY2VfaWQ7DQo+ICsNCj4gKwlyZXR1cm4g MDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArbGNvcmVfcG9ydF9pbmRleChzdHJ1Y3Qg cnRlX2Rpc3BhdGNoZXJfbGNvcmUgKmxjb3JlLA0KPiArCQkgdWludDhfdCBldmVudF9wb3J0X2lk KQ0KPiArew0KPiArCXVpbnQxNl90IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbGNvcmUt Pm51bV9wb3J0czsgaSsrKSB7DQo+ICsJCXN0cnVjdCBydGVfZGlzcGF0Y2hlcl9sY29yZV9wb3J0 ICpwb3J0ID0NCj4gKwkJCSZsY29yZS0+cG9ydHNbaV07DQo+ICsNCj4gKwkJaWYgKHBvcnQtPnBv cnRfaWQgPT0gZXZlbnRfcG9ydF9pZCkNCj4gKwkJCXJldHVybiBpOw0KPiArCX0NCj4gKw0KPiAr CXJldHVybiAtMTsNCj4gK30NCj4gKw0KPiAraW50DQo+ICtydGVfZGlzcGF0Y2hlcl9iaW5kX3Bv cnRfdG9fbGNvcmUodWludDhfdCBpZCwgdWludDhfdCBldmVudF9wb3J0X2lkLA0KPiArCQkJCQl1 aW50MTZfdCBiYXRjaF9zaXplLCB1aW50NjRfdA0KPiB0aW1lb3V0LA0KPiArCQkJCQl1bnNpZ25l ZCBpbnQgbGNvcmVfaWQpDQo+ICt7DQo+ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICpkaXNwYXRj aGVyOw0KPiArCXN0cnVjdCBydGVfZGlzcGF0Y2hlcl9sY29yZSAqbGNvcmU7DQo+ICsJc3RydWN0 IHJ0ZV9kaXNwYXRjaGVyX2xjb3JlX3BvcnQgKnBvcnQ7DQo+ICsNCj4gKwlFVkRfVkFMSURfSURf T1JfUkVUX0VJTlZBTChpZCk7DQo+ICsJZGlzcGF0Y2hlciA9IGV2ZF9nZXRfZGlzcGF0Y2hlcihp ZCk7DQo+ICsNCj4gKwlsY29yZSA9CSZkaXNwYXRjaGVyLT5sY29yZXNbbGNvcmVfaWRdOw0KPiAr DQo+ICsJaWYgKGxjb3JlLT5udW1fcG9ydHMgPT0gRVZEX01BWF9QT1JUU19QRVJfTENPUkUpDQo+ ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJaWYgKGxjb3JlX3BvcnRfaW5kZXgobGNvcmUs IGV2ZW50X3BvcnRfaWQpID49IDApDQo+ICsJCXJldHVybiAtRUVYSVNUOw0KPiArDQo+ICsJcG9y dCA9ICZsY29yZS0+cG9ydHNbbGNvcmUtPm51bV9wb3J0c107DQo+ICsNCj4gKwkqcG9ydCA9IChz dHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmVfcG9ydCkgew0KPiArCQkucG9ydF9pZCA9IGV2ZW50 X3BvcnRfaWQsDQo+ICsJCS5iYXRjaF9zaXplID0gYmF0Y2hfc2l6ZSwNCj4gKwkJLnRpbWVvdXQg PSB0aW1lb3V0DQo+ICsJfTsNCj4gKw0KPiArCWxjb3JlLT5udW1fcG9ydHMrKzsNCj4gKw0KPiAr CXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtpbnQNCj4gK3J0ZV9kaXNwYXRjaGVyX3VuYmluZF9w b3J0X2Zyb21fbGNvcmUodWludDhfdCBpZCwgdWludDhfdCBldmVudF9wb3J0X2lkLA0KPiArCQkJ CQkgICAgdW5zaWduZWQgaW50IGxjb3JlX2lkKQ0KPiArew0KPiArCXN0cnVjdCBydGVfZGlzcGF0 Y2hlciAqZGlzcGF0Y2hlcjsNCj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUgKmxjb3Jl Ow0KPiArCWludCBwb3J0X2lkeDsNCj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmVfcG9y dCAqcG9ydDsNCj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmVfcG9ydCAqbGFzdDsNCj4g Kw0KPiArCUVWRF9WQUxJRF9JRF9PUl9SRVRfRUlOVkFMKGlkKTsNCj4gKwlkaXNwYXRjaGVyID0g ZXZkX2dldF9kaXNwYXRjaGVyKGlkKTsNCj4gKw0KPiArCWxjb3JlID0JJmRpc3BhdGNoZXItPmxj b3Jlc1tsY29yZV9pZF07DQo+ICsNCj4gKwlwb3J0X2lkeCA9IGxjb3JlX3BvcnRfaW5kZXgobGNv cmUsIGV2ZW50X3BvcnRfaWQpOw0KPiArDQo+ICsJaWYgKHBvcnRfaWR4IDwgMCkNCj4gKwkJcmV0 dXJuIC1FTk9FTlQ7DQo+ICsNCj4gKwlwb3J0ID0gJmxjb3JlLT5wb3J0c1twb3J0X2lkeF07DQo+ ICsJbGFzdCA9ICZsY29yZS0+cG9ydHNbbGNvcmUtPm51bV9wb3J0cyAtIDFdOw0KPiArDQo+ICsJ aWYgKHBvcnQgIT0gbGFzdCkNCj4gKwkJKnBvcnQgPSAqbGFzdDsNCj4gKw0KPiArCWxjb3JlLT5u dW1fcG9ydHMtLTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3Ry dWN0IHJ0ZV9kaXNwYXRjaGVyX2hhbmRsZXIqDQo+ICtldmRfbGNvcmVfZ2V0X2hhbmRsZXJfYnlf aWQoc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xjb3JlICpsY29yZSwNCj4gKwkJCSAgICBpbnQgaGFu ZGxlcl9pZCkNCj4gK3sNCj4gKwl1aW50MTZfdCBpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8 IGxjb3JlLT5udW1faGFuZGxlcnM7IGkrKykgew0KPiArCQlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJf aGFuZGxlciAqaGFuZGxlciA9DQo+ICsJCQkmbGNvcmUtPmhhbmRsZXJzW2ldOw0KPiArDQo+ICsJ CWlmIChoYW5kbGVyLT5pZCA9PSBoYW5kbGVyX2lkKQ0KPiArCQkJcmV0dXJuIGhhbmRsZXI7DQo+ ICsJfQ0KPiArDQo+ICsJcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4g K2V2ZF9hbGxvY19oYW5kbGVyX2lkKHN0cnVjdCBydGVfZGlzcGF0Y2hlciAqZGlzcGF0Y2hlcikg ew0KPiArCWludCBoYW5kbGVyX2lkID0gMDsNCj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNv cmUgKnJlZmVyZW5jZV9sY29yZSA9DQo+ICsJCSZkaXNwYXRjaGVyLT5sY29yZXNbMF07DQo+ICsN Cj4gKwlpZiAocmVmZXJlbmNlX2xjb3JlLT5udW1faGFuZGxlcnMgPT0gRVZEX01BWF9IQU5ETEVS UykNCj4gKwkJcmV0dXJuIC0xOw0KPiArDQo+ICsJd2hpbGUgKGV2ZF9sY29yZV9nZXRfaGFuZGxl cl9ieV9pZChyZWZlcmVuY2VfbGNvcmUsIGhhbmRsZXJfaWQpICE9DQo+IE5VTEwpDQo+ICsJCWhh bmRsZXJfaWQrKzsNCj4gKw0KPiArCXJldHVybiBoYW5kbGVyX2lkOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZA0KPiArZXZkX2xjb3JlX2luc3RhbGxfaGFuZGxlcihzdHJ1Y3QgcnRlX2Rpc3Bh dGNoZXJfbGNvcmUgKmxjb3JlLA0KPiArCQkgICAgY29uc3Qgc3RydWN0IHJ0ZV9kaXNwYXRjaGVy X2hhbmRsZXIgKmhhbmRsZXIpIHsNCj4gKwlpbnQgaGFuZGxlcl9pZHggPSBsY29yZS0+bnVtX2hh bmRsZXJzOw0KPiArDQo+ICsJbGNvcmUtPmhhbmRsZXJzW2hhbmRsZXJfaWR4XSA9ICpoYW5kbGVy Ow0KPiArCWxjb3JlLT5udW1faGFuZGxlcnMrKzsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQN Cj4gK2V2ZF9pbnN0YWxsX2hhbmRsZXIoc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICpkaXNwYXRjaGVy LA0KPiArCQkgICAgY29uc3Qgc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2hhbmRsZXIgKmhhbmRsZXIp IHsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBSVEVfTUFYX0xDT1JFOyBp KyspIHsNCj4gKwkJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xjb3JlICpsY29yZSA9DQo+ICsJCQkm ZGlzcGF0Y2hlci0+bGNvcmVzW2ldOw0KPiArCQlldmRfbGNvcmVfaW5zdGFsbF9oYW5kbGVyKGxj b3JlLCBoYW5kbGVyKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK2ludA0KPiArcnRlX2Rpc3BhdGNo ZXJfcmVnaXN0ZXIodWludDhfdCBpZCwNCj4gKwkJCSAgICAgIHJ0ZV9kaXNwYXRjaGVyX21hdGNo X3QgbWF0Y2hfZnVuLA0KPiArCQkJICAgICAgdm9pZCAqbWF0Y2hfZGF0YSwNCj4gKwkJCSAgICAg IHJ0ZV9kaXNwYXRjaGVyX3Byb2Nlc3NfdCBwcm9jZXNzX2Z1biwNCj4gKwkJCSAgICAgIHZvaWQg KnByb2Nlc3NfZGF0YSkNCj4gK3sNCj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXIgKmRpc3BhdGNo ZXI7DQo+ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2hhbmRsZXIgaGFuZGxlciA9IHsNCj4gKwkJ Lm1hdGNoX2Z1biA9IG1hdGNoX2Z1biwNCj4gKwkJLm1hdGNoX2RhdGEgPSBtYXRjaF9kYXRhLA0K DQpXZSBjYW4gaGF2ZSBhIGRlZmF1bHQgZnVuY3Rpb24gd2hpY2ggdXNlcyBxdWV1ZV9pZCBhcyBt YXRjaGluZyBkYXRhLg0KVGhpcyByZWR1Y2VzIHRoZSBhcHBsaWNhdGlvbiBsb2FkIHRvIHByb3Zp ZGUgdHdvIGNhbGxiYWNrcywgb25lIGZvciBtYXRjaGluZyBhbmQgb25lIGZvciBwcm9jZXNzaW5n IHRoZSBldmVudC4NCkFwcGxpY2F0aW9uIGNhbiBwYXNzIE5VTEwgcGFyYW1ldGVyIGZvciAibWF0 Y2hfZnVuIiwgaW4gdGhhdCBjYXNlIGRlZmF1bHQgZnVuY3Rpb24gcG9pbnRlciBjYW4gYmUgdXNl ZCBoZXJlLg0KDQoNCj4gKwkJLnByb2Nlc3NfZnVuID0gcHJvY2Vzc19mdW4sDQo+ICsJCS5wcm9j ZXNzX2RhdGEgPSBwcm9jZXNzX2RhdGENCj4gKwl9Ow0KPiArDQo+ICsJRVZEX1ZBTElEX0lEX09S X1JFVF9FSU5WQUwoaWQpOw0KPiArCWRpc3BhdGNoZXIgPSBldmRfZ2V0X2Rpc3BhdGNoZXIoaWQp Ow0KPiArDQo+ICsJaGFuZGxlci5pZCA9IGV2ZF9hbGxvY19oYW5kbGVyX2lkKGRpc3BhdGNoZXIp Ow0KPiArDQo+ICsJaWYgKGhhbmRsZXIuaWQgPCAwKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4g Kw0KPiArCWV2ZF9pbnN0YWxsX2hhbmRsZXIoZGlzcGF0Y2hlciwgJmhhbmRsZXIpOw0KPiArDQo+ ICsJcmV0dXJuIGhhbmRsZXIuaWQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2V2ZF9s Y29yZV91bmluc3RhbGxfaGFuZGxlcihzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUgKmxjb3Jl LA0KPiArCQkJICAgIGludCBoYW5kbGVyX2lkKQ0KPiArew0KPiArCXN0cnVjdCBydGVfZGlzcGF0 Y2hlcl9oYW5kbGVyICp1bnJlZ19oYW5kbGVyOw0KPiArCWludCBoYW5kbGVyX2lkeDsNCj4gKwl1 aW50MTZfdCBsYXN0X2lkeDsNCj4gKw0KPiArCXVucmVnX2hhbmRsZXIgPSBldmRfbGNvcmVfZ2V0 X2hhbmRsZXJfYnlfaWQobGNvcmUsIGhhbmRsZXJfaWQpOw0KPiArDQo+ICsJaWYgKHVucmVnX2hh bmRsZXIgPT0gTlVMTCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCg0KU2hvdWxkbid0IHRo ZSBsb2dpYyBiZSAiIGhhbmRsZXJfaWR4ID0gdW5yZWdfaGFuZGxlciAtICZsY29yZS0+aGFuZGxl cnNbMF07Ig0KQmVjYXVzZSwgdW5yZWdfaGFuZGxlciB3aWxsIGJlIGEgaGlnaGVyIG9yIGVxdWFs IGFkZHJlc3MgdG8gdGhlIGhhbmRsZXIgYmFzZSBhZGRyZXNzICgmbGNvcmUtPmhhbmRsZXJzWzBd KQ0KDQoNCj4gKwloYW5kbGVyX2lkeCA9ICZsY29yZS0+aGFuZGxlcnNbMF0gLSB1bnJlZ19oYW5k bGVyOw0KPiArDQo+ICsJbGFzdF9pZHggPSBsY29yZS0+bnVtX2hhbmRsZXJzIC0gMTsNCj4gKw0K PiArCWlmIChoYW5kbGVyX2lkeCAhPSBsYXN0X2lkeCkgew0KPiArCQkvKiBtb3ZlIGFsbCBoYW5k bGVycyB0byBtYWludGFpbiBoYW5kbGVyIG9yZGVyICovDQo+ICsJCWludCBuID0gbGFzdF9pZHgg LSBoYW5kbGVyX2lkeDsNCj4gKwkJbWVtbW92ZSh1bnJlZ19oYW5kbGVyLCB1bnJlZ19oYW5kbGVy ICsgMSwNCj4gKwkJCXNpemVvZihzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfaGFuZGxlcikgKiBuKTsN Cj4gKwl9DQo+ICsNCj4gKwlsY29yZS0+bnVtX2hhbmRsZXJzLS07DQo+ICsNCj4gKwlyZXR1cm4g MDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArZXZkX3VuaW5zdGFsbF9oYW5kbGVyKHN0 cnVjdCBydGVfZGlzcGF0Y2hlciAqZGlzcGF0Y2hlciwNCj4gKwkJICAgICAgaW50IGhhbmRsZXJf aWQpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IGxjb3JlX2lkOw0KPiArDQo+ICsJZm9yIChsY29y ZV9pZCA9IDA7IGxjb3JlX2lkIDwgUlRFX01BWF9MQ09SRTsgbGNvcmVfaWQrKykgew0KPiArCQlz dHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUgKmxjb3JlID0NCj4gKwkJCSZkaXNwYXRjaGVyLT5s Y29yZXNbbGNvcmVfaWRdOw0KPiArCQlpbnQgcmM7DQo+ICsNCj4gKwkJcmMgPSBldmRfbGNvcmVf dW5pbnN0YWxsX2hhbmRsZXIobGNvcmUsIGhhbmRsZXJfaWQpOw0KPiArDQo+ICsJCWlmIChyYyA8 IDApDQo+ICsJCQlyZXR1cm4gcmM7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gK2ludA0KPiArcnRlX2Rpc3BhdGNoZXJfdW5yZWdpc3Rlcih1aW50OF90IGlkLCBpbnQg aGFuZGxlcl9pZCkgew0KPiArCXN0cnVjdCBydGVfZGlzcGF0Y2hlciAqZGlzcGF0Y2hlcjsNCj4g KwlpbnQgcmM7DQo+ICsNCj4gKwlFVkRfVkFMSURfSURfT1JfUkVUX0VJTlZBTChpZCk7DQo+ICsJ ZGlzcGF0Y2hlciA9IGV2ZF9nZXRfZGlzcGF0Y2hlcihpZCk7DQo+ICsNCj4gKwlyYyA9IGV2ZF91 bmluc3RhbGxfaGFuZGxlcihkaXNwYXRjaGVyLCBoYW5kbGVyX2lkKTsNCj4gKw0KPiArCXJldHVy biByYzsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBydGVfZGlzcGF0Y2hlcl9maW5hbGl6 ZXIqIGV2ZF9nZXRfZmluYWxpemVyX2J5X2lkKHN0cnVjdA0KPiArcnRlX2Rpc3BhdGNoZXIgKmRp c3BhdGNoZXIsDQo+ICsJCSAgICAgICBpbnQgaGFuZGxlcl9pZCkNCj4gK3sNCj4gKwlpbnQgaTsN Cj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBkaXNwYXRjaGVyLT5udW1fZmluYWxpemVyczsgaSsr KSB7DQo+ICsJCXN0cnVjdCBydGVfZGlzcGF0Y2hlcl9maW5hbGl6ZXIgKmZpbmFsaXplciA9DQo+ ICsJCQkmZGlzcGF0Y2hlci0+ZmluYWxpemVyc1tpXTsNCj4gKw0KPiArCQlpZiAoZmluYWxpemVy LT5pZCA9PSBoYW5kbGVyX2lkKQ0KPiArCQkJcmV0dXJuIGZpbmFsaXplcjsNCj4gKwl9DQo+ICsN Cj4gKwlyZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArZXZkX2FsbG9j X2ZpbmFsaXplcl9pZChzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXIgKmRpc3BhdGNoZXIpIHsNCj4gKwlp bnQgZmluYWxpemVyX2lkID0gMDsNCj4gKw0KPiArCXdoaWxlIChldmRfZ2V0X2ZpbmFsaXplcl9i eV9pZChkaXNwYXRjaGVyLCBmaW5hbGl6ZXJfaWQpICE9IE5VTEwpDQo+ICsJCWZpbmFsaXplcl9p ZCsrOw0KPiArDQo+ICsJcmV0dXJuIGZpbmFsaXplcl9pZDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IHN0cnVjdCBydGVfZGlzcGF0Y2hlcl9maW5hbGl6ZXIgKiBldmRfYWxsb2NfZmluYWxpemVyKHN0 cnVjdA0KPiArcnRlX2Rpc3BhdGNoZXIgKmRpc3BhdGNoZXIpIHsNCj4gKwlpbnQgZmluYWxpemVy X2lkeDsNCj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfZmluYWxpemVyICpmaW5hbGl6ZXI7DQo+ ICsNCj4gKwlpZiAoZGlzcGF0Y2hlci0+bnVtX2ZpbmFsaXplcnMgPT0gRVZEX01BWF9GSU5BTEla RVJTKQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKw0KPiArCWZpbmFsaXplcl9pZHggPSBkaXNwYXRj aGVyLT5udW1fZmluYWxpemVyczsNCj4gKwlmaW5hbGl6ZXIgPSAmZGlzcGF0Y2hlci0+ZmluYWxp emVyc1tmaW5hbGl6ZXJfaWR4XTsNCj4gKw0KPiArCWZpbmFsaXplci0+aWQgPSBldmRfYWxsb2Nf ZmluYWxpemVyX2lkKGRpc3BhdGNoZXIpOw0KPiArDQo+ICsJZGlzcGF0Y2hlci0+bnVtX2ZpbmFs aXplcnMrKzsNCj4gKw0KPiArCXJldHVybiBmaW5hbGl6ZXI7DQo+ICt9DQo+ICsNCj4gK2ludA0K PiArcnRlX2Rpc3BhdGNoZXJfZmluYWxpemVfcmVnaXN0ZXIodWludDhfdCBpZCwNCj4gKwkJCSAg ICAgIHJ0ZV9kaXNwYXRjaGVyX2ZpbmFsaXplX3QgZmluYWxpemVfZnVuLA0KPiArCQkJICAgICAg dm9pZCAqZmluYWxpemVfZGF0YSkNCj4gK3sNCj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXIgKmRp c3BhdGNoZXI7DQo+ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2ZpbmFsaXplciAqZmluYWxpemVy Ow0KPiArDQo+ICsJRVZEX1ZBTElEX0lEX09SX1JFVF9FSU5WQUwoaWQpOw0KPiArCWRpc3BhdGNo ZXIgPSBldmRfZ2V0X2Rpc3BhdGNoZXIoaWQpOw0KPiArDQo+ICsJZmluYWxpemVyID0gZXZkX2Fs bG9jX2ZpbmFsaXplcihkaXNwYXRjaGVyKTsNCj4gKw0KPiArCWlmIChmaW5hbGl6ZXIgPT0gTlVM TCkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlmaW5hbGl6ZXItPmZpbmFsaXplX2Z1 biA9IGZpbmFsaXplX2Z1bjsNCj4gKwlmaW5hbGl6ZXItPmZpbmFsaXplX2RhdGEgPSBmaW5hbGl6 ZV9kYXRhOw0KPiArDQo+ICsJcmV0dXJuIGZpbmFsaXplci0+aWQ7DQo+ICt9DQo+ICsNCj4gK2lu dA0KPiArcnRlX2Rpc3BhdGNoZXJfZmluYWxpemVfdW5yZWdpc3Rlcih1aW50OF90IGlkLCBpbnQg aGFuZGxlcl9pZCkgew0KPiArCXN0cnVjdCBydGVfZGlzcGF0Y2hlciAqZGlzcGF0Y2hlcjsNCj4g KwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfZmluYWxpemVyICp1bnJlZ19maW5hbGl6ZXI7DQo+ICsJ aW50IGZpbmFsaXplcl9pZHg7DQo+ICsJdWludDE2X3QgbGFzdF9pZHg7DQo+ICsNCj4gKwlFVkRf VkFMSURfSURfT1JfUkVUX0VJTlZBTChpZCk7DQo+ICsJZGlzcGF0Y2hlciA9IGV2ZF9nZXRfZGlz cGF0Y2hlcihpZCk7DQo+ICsNCj4gKwl1bnJlZ19maW5hbGl6ZXIgPSBldmRfZ2V0X2ZpbmFsaXpl cl9ieV9pZChkaXNwYXRjaGVyLCBoYW5kbGVyX2lkKTsNCj4gKw0KPiArCWlmICh1bnJlZ19maW5h bGl6ZXIgPT0gTlVMTCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCg0KU2FtZSBhcyBhYm92 ZSBjb21tZW50IGluIHJ0ZV9kaXNwYXRjaGVyX3VucmVnaXN0ZXIsIGJhc2UgYWRkcmVzcyBuZWVk cyB0byBiZSBzdWJ0cmFjdGVkIGZyb20gdW5yZWdfZmluYWxpemVyDQoNCg0KPiArCWZpbmFsaXpl cl9pZHggPSAmZGlzcGF0Y2hlci0+ZmluYWxpemVyc1swXSAtIHVucmVnX2ZpbmFsaXplcjsNCj4g Kw0KPiArCWxhc3RfaWR4ID0gZGlzcGF0Y2hlci0+bnVtX2ZpbmFsaXplcnMgLSAxOw0KPiArDQo+ ICsJaWYgKGZpbmFsaXplcl9pZHggIT0gbGFzdF9pZHgpIHsNCj4gKwkJLyogbW92ZSBhbGwgZmlu YWxpemVycyB0byBtYWludGFpbiBvcmRlciAqLw0KPiArCQlpbnQgbiA9IGxhc3RfaWR4IC0gZmlu YWxpemVyX2lkeDsNCj4gKwkJbWVtbW92ZSh1bnJlZ19maW5hbGl6ZXIsIHVucmVnX2ZpbmFsaXpl ciArIDEsDQo+ICsJCQlzaXplb2Yoc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2ZpbmFsaXplcikgKiBu KTsNCj4gKwl9DQo+ICsNCj4gKwlkaXNwYXRjaGVyLT5udW1fZmluYWxpemVycy0tOw0KPiArDQo+ ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2V2ZF9zZXRfc2Vydmlj ZV9ydW5zdGF0ZSh1aW50OF90IGlkLCBpbnQgc3RhdGUpIHsNCj4gKwlzdHJ1Y3QgcnRlX2Rpc3Bh dGNoZXIgKmRpc3BhdGNoZXI7DQo+ICsJaW50IHJjOw0KPiArDQo+ICsJRVZEX1ZBTElEX0lEX09S X1JFVF9FSU5WQUwoaWQpOw0KPiArCWRpc3BhdGNoZXIgPSBldmRfZ2V0X2Rpc3BhdGNoZXIoaWQp Ow0KPiArDQo+ICsJcmMgPSBydGVfc2VydmljZV9jb21wb25lbnRfcnVuc3RhdGVfc2V0KGRpc3Bh dGNoZXItPnNlcnZpY2VfaWQsDQo+ICsJCQkJCQlzdGF0ZSk7DQo+ICsNCj4gKwlpZiAocmMgIT0g MCkgew0KPiArCQlSVEVfRURFVl9MT0dfRVJSKCJVbmV4cGVjdGVkIGVycm9yICVkIG9jY3VycmVk IHdoaWxlDQo+IHNldHRpbmcgIg0KPiArCQkJCSAic2VydmljZSBjb21wb25lbnQgcnVuIHN0YXRl IHRvICVkXG4iLCByYywNCj4gKwkJCQkgc3RhdGUpOw0KPiArCQlSVEVfQVNTRVJUKDApOw0KPiAr CX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtpbnQNCj4gK3J0ZV9kaXNwYXRj aGVyX3N0YXJ0KHVpbnQ4X3QgaWQpDQo+ICt7DQo+ICsJcmV0dXJuIGV2ZF9zZXRfc2VydmljZV9y dW5zdGF0ZShpZCwgMSk7IH0NCj4gKw0KPiAraW50DQo+ICtydGVfZGlzcGF0Y2hlcl9zdG9wKHVp bnQ4X3QgaWQpDQo+ICt7DQo+ICsJcmV0dXJuIGV2ZF9zZXRfc2VydmljZV9ydW5zdGF0ZShpZCwg MCk7IH0NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK2V2ZF9hZ2dyZWdhdGVfc3RhdHMoc3RydWN0 IHJ0ZV9kaXNwYXRjaGVyX3N0YXRzICpyZXN1bHQsDQo+ICsJCSAgICBjb25zdCBzdHJ1Y3QgcnRl X2Rpc3BhdGNoZXJfc3RhdHMgKnBhcnQpIHsNCj4gKwlyZXN1bHQtPnBvbGxfY291bnQgKz0gcGFy dC0+cG9sbF9jb3VudDsNCj4gKwlyZXN1bHQtPmV2X2JhdGNoX2NvdW50ICs9IHBhcnQtPmV2X2Jh dGNoX2NvdW50Ow0KPiArCXJlc3VsdC0+ZXZfZGlzcGF0Y2hfY291bnQgKz0gcGFydC0+ZXZfZGlz cGF0Y2hfY291bnQ7DQo+ICsJcmVzdWx0LT5ldl9kcm9wX2NvdW50ICs9IHBhcnQtPmV2X2Ryb3Bf Y291bnQ7IH0NCj4gKw0KPiAraW50DQo+ICtydGVfZGlzcGF0Y2hlcl9zdGF0c19nZXQodWludDhf dCBpZCwNCj4gKwkJCSAgICAgICBzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfc3RhdHMgKnN0YXRzKSB7 DQo+ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICpkaXNwYXRjaGVyOw0KPiArCXVuc2lnbmVkIGlu dCBsY29yZV9pZDsNCj4gKw0KPiArCUVWRF9WQUxJRF9JRF9PUl9SRVRfRUlOVkFMKGlkKTsNCj4g KwlkaXNwYXRjaGVyID0gZXZkX2dldF9kaXNwYXRjaGVyKGlkKTsNCj4gKw0KDQpTdGF0cyBwb2lu dGVyIG5lZWRzIHRvIGJlIHZhbGlkYXRlZCBmb3IgTlVMTCBiZWZvcmUgYWNjZXNzaW5nDQoNCg0K PiArCSpzdGF0cyA9IChzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfc3RhdHMpIHt9Ow0KPiArDQo+ICsJ Zm9yIChsY29yZV9pZCA9IDA7IGxjb3JlX2lkIDwgUlRFX01BWF9MQ09SRTsgbGNvcmVfaWQrKykg ew0KPiArCQlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUgKmxjb3JlID0NCj4gKwkJCSZkaXNw YXRjaGVyLT5sY29yZXNbbGNvcmVfaWRdOw0KPiArDQo+ICsJCWV2ZF9hZ2dyZWdhdGVfc3RhdHMo c3RhdHMsICZsY29yZS0+c3RhdHMpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0K PiArDQo+ICtpbnQNCj4gK3J0ZV9kaXNwYXRjaGVyX3N0YXRzX3Jlc2V0KHVpbnQ4X3QgaWQpDQo+ ICt7DQo+ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICpkaXNwYXRjaGVyOw0KPiArCXVuc2lnbmVk IGludCBsY29yZV9pZDsNCj4gKw0KPiArCUVWRF9WQUxJRF9JRF9PUl9SRVRfRUlOVkFMKGlkKTsN Cj4gKwlkaXNwYXRjaGVyID0gZXZkX2dldF9kaXNwYXRjaGVyKGlkKTsNCj4gKw0KPiArDQo+ICsJ Zm9yIChsY29yZV9pZCA9IDA7IGxjb3JlX2lkIDwgUlRFX01BWF9MQ09SRTsgbGNvcmVfaWQrKykg ew0KPiArCQlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUgKmxjb3JlID0NCj4gKwkJCSZkaXNw YXRjaGVyLT5sY29yZXNbbGNvcmVfaWRdOw0KPiArDQo+ICsJCWxjb3JlLT5zdGF0cyA9IChzdHJ1 Y3QgcnRlX2Rpc3BhdGNoZXJfc3RhdHMpIHt9Ow0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0K PiArDQo+ICt9DQo+IGRpZmYgLS1naXQgYS9saWIvZGlzcGF0Y2hlci9ydGVfZGlzcGF0Y2hlci5o IGIvbGliL2Rpc3BhdGNoZXIvcnRlX2Rpc3BhdGNoZXIuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NCBpbmRleCAwMDAwMDAwMDAwLi42NzEyNjg3YTA4DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIv bGliL2Rpc3BhdGNoZXIvcnRlX2Rpc3BhdGNoZXIuaA0KPiBAQCAtMCwwICsxLDQ4MCBAQA0KPiAr LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiArICogQ29weXJpZ2h0 KGMpIDIwMjMgRXJpY3Nzb24gQUINCj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIF9fUlRFX0RJU1BB VENIRVJfSF9fDQo+ICsjZGVmaW5lIF9fUlRFX0RJU1BBVENIRVJfSF9fDQo+ICsNCj4gKy8qKg0K PiArICogQGZpbGUNCj4gKyAqDQo+ICsgKiBSVEUgRGlzcGF0Y2hlcg0KPiArICoNCj4gKyAqIFRo ZSBwdXJwb3NlIG9mIHRoZSBkaXNwYXRjaGVyIGlzIHRvIGhlbHAgZGVjb3VwbGUgZGlmZmVyZW50 IHBhcnRzDQo+ICsgKiBvZiBhbiBhcHBsaWNhdGlvbiAoZS5nLiwgbW9kdWxlcyksIHNoYXJpbmcg dGhlIHNhbWUgdW5kZXJseWluZw0KPiArICogZXZlbnQgZGV2aWNlLg0KPiArICovDQo+ICsNCj4g KyNpZmRlZiBfX2NwbHVzcGx1cw0KPiArZXh0ZXJuICJDIiB7DQo+ICsjZW5kaWYNCj4gKw0KPiAr I2luY2x1ZGUgPHJ0ZV9ldmVudGRldi5oPg0KPiArDQo+ICsvKioNCj4gKyAqIEZ1bmN0aW9uIHBy b3RvdHlwZSBmb3IgbWF0Y2ggY2FsbGJhY2tzLg0KPiArICoNCj4gKyAqIE1hdGNoIGNhbGxiYWNr cyBhcmUgdXNlZCBieSBhbiBhcHBsaWNhdGlvbiB0byBkZWNpZGUgaG93IHRoZQ0KPiArICogZGlz cGF0Y2hlciBkaXN0cmlidXRlcyBldmVudHMgdG8gZGlmZmVyZW50IHBhcnRzIG9mIHRoZQ0KPiAr ICogYXBwbGljYXRpb24uDQo+ICsgKg0KPiArICogVGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBleHBl Y3RlZCB0byBwcm9jZXNzIHRoZSBldmVudCBhdCB0aGUgcG9pbnQNCj4gKyAqIG9mIHRoZSBtYXRj aCBjYWxsLiBTdWNoIG1hdHRlcnMgc2hvdWxkIGJlIGRlZmVycmVkIHRvIHRoZSBwcm9jZXNzDQo+ ICsgKiBjYWxsYmFjayBpbnZvY2F0aW9uLg0KPiArICoNCj4gKyAqIFRoZSBtYXRjaCBjYWxsYmFj ayBtYXkgYmUgdXNlZCBhcyBhbiBvcHBvcnR1bml0eSB0byBwcmVmZXRjaCBkYXRhLg0KPiArICoN Cj4gKyAqIEBwYXJhbSBldmVudA0KPiArICogIFBvaW50ZXIgdG8gZXZlbnQNCj4gKyAqDQo+ICsg KiBAcGFyYW0gY2JfZGF0YQ0KPiArICogIFRoZSBwb2ludGVyIHN1cHBsaWVkIGJ5IHRoZSBhcHBs aWNhdGlvbiBpbg0KPiArICogIHJ0ZV9kaXNwYXRjaGVyX3JlZ2lzdGVyKCkuDQo+ICsgKg0KPiAr ICogQHJldHVybg0KPiArICogICBSZXR1cm5zIHRydWUgaW4gY2FzZSB0aGlzIGV2ZW50cyBzaG91 bGQgYmUgZGVsaXZlcmVkICh2aWENCj4gKyAqICAgdGhlIHByb2Nlc3MgY2FsbGJhY2spLCBhbmQg ZmFsc2Ugb3RoZXJ3aXNlLg0KPiArICovDQo+ICt0eXBlZGVmIGJvb2wNCj4gKygqcnRlX2Rpc3Bh dGNoZXJfbWF0Y2hfdCkoY29uc3Qgc3RydWN0IHJ0ZV9ldmVudCAqZXZlbnQsIHZvaWQNCj4gKypj Yl9kYXRhKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBGdW5jdGlvbiBwcm90b3R5cGUgZm9yIHByb2Nl c3MgY2FsbGJhY2tzLg0KPiArICoNCj4gKyAqIFRoZSBwcm9jZXNzIGNhbGxiYWNrcyBhcmUgdXNl ZCBieSB0aGUgZGlzcGF0Y2hlciB0byBkZWxpdmVyDQo+ICsgKiBldmVudHMgZm9yIHByb2Nlc3Np bmcuDQo+ICsgKg0KPiArICogQHBhcmFtIGV2ZW50X2Rldl9pZA0KPiArICogIFRoZSBvcmlnaW5h dGluZyBldmVudCBkZXZpY2UgaWQuDQo+ICsgKg0KPiArICogQHBhcmFtIGV2ZW50X3BvcnRfaWQN Cj4gKyAqICBUaGUgb3JpZ2luYXRpbmcgZXZlbnQgcG9ydC4NCj4gKyAqDQo+ICsgKiBAcGFyYW0g ZXZlbnRzDQo+ICsgKiAgUG9pbnRlciB0byBhbiBhcnJheSBvZiBldmVudHMuDQo+ICsgKg0KPiAr ICogQHBhcmFtIG51bQ0KPiArICogIFRoZSBudW1iZXIgb2YgZXZlbnRzIGluIHRoZSBAcCBldmVu dHMgYXJyYXkuDQo+ICsgKg0KPiArICogQHBhcmFtIGNiX2RhdGENCj4gKyAqICBUaGUgcG9pbnRl ciBzdXBwbGllZCBieSB0aGUgYXBwbGljYXRpb24gaW4NCj4gKyAqICBydGVfZGlzcGF0Y2hlcl9y ZWdpc3RlcigpLg0KPiArICovDQo+ICsNCj4gK3R5cGVkZWYgdm9pZA0KPiArKCpydGVfZGlzcGF0 Y2hlcl9wcm9jZXNzX3QpKHVpbnQ4X3QgZXZlbnRfZGV2X2lkLCB1aW50OF90IGV2ZW50X3BvcnRf aWQsDQo+ICsJCQkJICBzdHJ1Y3QgcnRlX2V2ZW50ICpldmVudHMsIHVpbnQxNl90IG51bSwNCj4g KwkJCQkgIHZvaWQgKmNiX2RhdGEpOw0KPiArDQo+ICsvKioNCj4gKyAqIEZ1bmN0aW9uIHByb3Rv dHlwZSBmb3IgZmluYWxpemUgY2FsbGJhY2tzLg0KPiArICoNCj4gKyAqIFRoZSBmaW5hbGl6ZSBj YWxsYmFja3MgYXJlIHVzZWQgYnkgdGhlIGRpc3BhdGNoZXIgdG8gbm90aWZ5IHRoZQ0KPiArICog YXBwbGljYXRpb24gaXQgaGFzIGRlbGl2ZXJlZCBhbGwgZXZlbnRzIGZyb20gYSBwYXJ0aWN1bGFy IGJhdGNoDQo+ICsgKiBkZXF1ZXVlZCBmcm9tIHRoZSBldmVudCBkZXZpY2UuDQo+ICsgKg0KPiAr ICogQHBhcmFtIGV2ZW50X2Rldl9pZA0KPiArICogIFRoZSBvcmlnaW5hdGluZyBldmVudCBkZXZp Y2UgaWQuDQo+ICsgKg0KPiArICogQHBhcmFtIGV2ZW50X3BvcnRfaWQNCj4gKyAqICBUaGUgb3Jp Z2luYXRpbmcgZXZlbnQgcG9ydC4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gY2JfZGF0YQ0KPiArICog IFRoZSBwb2ludGVyIHN1cHBsaWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBpbg0KPiArICogIHJ0ZV9k aXNwYXRjaGVyX2ZpbmFsaXplX3JlZ2lzdGVyKCkuDQo+ICsgKi8NCj4gKw0KPiArdHlwZWRlZiB2 b2lkDQo+ICsoKnJ0ZV9kaXNwYXRjaGVyX2ZpbmFsaXplX3QpKHVpbnQ4X3QgZXZlbnRfZGV2X2lk LCB1aW50OF90IGV2ZW50X3BvcnRfaWQsDQo+ICsJCQkJICAgdm9pZCAqY2JfZGF0YSk7DQo+ICsN Cj4gKy8qKg0KPiArICogRGlzcGF0Y2hlciBzdGF0aXN0aWNzDQo+ICsgKi8NCj4gK3N0cnVjdCBy dGVfZGlzcGF0Y2hlcl9zdGF0cyB7DQo+ICsJdWludDY0X3QgcG9sbF9jb3VudDsNCj4gKwkvKio8 IE51bWJlciBvZiBldmVudCBkZXF1ZXVlIGNhbGxzIG1hZGUgdG93YXJkIHRoZSBldmVudCBkZXZp Y2UuICovDQo+ICsJdWludDY0X3QgZXZfYmF0Y2hfY291bnQ7DQo+ICsJLyoqPCBOdW1iZXIgb2Yg bm9uLWVtcHR5IGV2ZW50IGJhdGNoZXMgZGVxdWV1ZWQgZnJvbSBldmVudA0KPiBkZXZpY2UuKi8N Cj4gKwl1aW50NjRfdCBldl9kaXNwYXRjaF9jb3VudDsNCj4gKwkvKio8IE51bWJlciBvZiBldmVu dHMgZGlzcGF0Y2hlZCB0byBhIGhhbmRsZXIuKi8NCj4gKwl1aW50NjRfdCBldl9kcm9wX2NvdW50 Ow0KPiArCS8qKjwgTnVtYmVyIG9mIGV2ZW50cyBkcm9wcGVkIGJlY2F1c2Ugbm8gaGFuZGxlciB3 YXMgZm91bmQuICovIH07DQo+ICsNCj4gKy8qKg0KPiArICogQ3JlYXRlIGEgZGlzcGF0Y2hlciB3 aXRoIHRoZSBzcGVjaWZpZWQgaWQuDQo+ICsgKg0KPiArICogQHBhcmFtIGlkDQo+ICsgKiAgQW4g YXBwbGljYXRpb24tc3BlY2lmaWVkLCB1bmlxdWUgKGFjcm9zcyBhbGwgZGlzcGF0Y2hlcg0KPiAr ICogIGluc3RhbmNlcykgaWRlbnRpZmllci4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gZXZlbnRfZGV2 X2lkDQo+ICsgKiAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGV2ZW50IGRldmljZSBmcm9tIHdoaWNo IHRoaXMgZGlzcGF0Y2hlcg0KPiArICogIHdpbGwgZGVxdWV1ZSBldmVudHMuDQo+ICsgKg0KPiAr ICogQHJldHVybg0KPiArICogICAtIDA6IFN1Y2Nlc3MNCj4gKyAqICAgLSA8MDogRXJyb3IgY29k ZSBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiAraW50DQo+ICty dGVfZGlzcGF0Y2hlcl9jcmVhdGUodWludDhfdCBpZCwgdWludDhfdCBldmVudF9kZXZfaWQpOw0K PiArDQo+ICsvKioNCj4gKyAqIEZyZWUgYSBkaXNwYXRjaGVyLg0KPiArICoNCj4gKyAqIEBwYXJh bSBpZA0KPiArICogIFRoZSBkaXNwYXRjaGVyIGlkZW50aWZpZXIuDQo+ICsgKg0KPiArICogQHJl dHVybg0KPiArICogIC0gMDogU3VjY2Vzcw0KPiArICogIC0gPDA6IEVycm9yIGNvZGUgb24gZmFp bHVyZQ0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK2ludA0KPiArcnRlX2Rpc3Bh dGNoZXJfZnJlZSh1aW50OF90IGlkKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBSZXRyaWV2ZSB0aGUg c2VydmljZSBpZGVudGlmaWVyIG9mIGEgZGlzcGF0Y2hlci4NCj4gKyAqDQo+ICsgKiBAcGFyYW0g aWQNCj4gKyAqICBUaGUgZGlzcGF0Y2hlciBpZGVudGlmaWVyLg0KPiArICoNCj4gKyAqIEBwYXJh bSBbb3V0XSBzZXJ2aWNlX2lkDQo+ICsgKiAgQSBwb2ludGVyIHRvIGEgY2FsbGVyLXN1cHBsaWVk IGJ1ZmZlciB3aGVyZSB0aGUgZGlzcGF0Y2hlcidzDQo+ICsgKiAgc2VydmljZSBpZCB3aWxsIGJl IHN0b3JlZC4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgLSAwOiBTdWNjZXNzDQo+ICsg KiAgLSA8MDogRXJyb3IgY29kZSBvbiBmYWlsdXJlLg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmlt ZW50YWwNCj4gK2ludA0KPiArcnRlX2Rpc3BhdGNoZXJfc2VydmljZV9pZF9nZXQodWludDhfdCBp ZCwgdWludDMyX3QgKnNlcnZpY2VfaWQpOw0KPiArDQo+ICsvKioNCj4gKyAqIEJpbmRzIGFuIGV2 ZW50IGRldmljZSBwb3J0IHRvIGEgc3BlY2lmaWMgbGNvcmUgb24gdGhlIHNwZWNpZmllZA0KPiAr ICogZGlzcGF0Y2hlci4NCj4gKyAqDQo+ICsgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhl IGV2ZW50IHBvcnQgaWQgdG8gYmUgdXNlZCBieSB0aGUgZXZlbnQNCj4gKyAqIGRpc3BhdGNoZXIg c2VydmljZSwgaWYgcnVuIG9uIHRoZSBzcGVjaWZpZWQgbGNvcmUuDQo+ICsgKg0KPiArICogTXVs dGlwbGUgZXZlbnQgZGV2aWNlIHBvcnRzIG1heSBiZSBib3VuZCB0byB0aGUgc2FtZSBsY29yZS4g QQ0KPiArICogcGFydGljdWxhciBwb3J0IG11c3Qgbm90IGJlIGJvdW5kIHRvIG1vcmUgdGhhbiBv bmUgbGNvcmUuDQo+ICsgKg0KPiArICogSWYgdGhlIGRpc3BhdGNoZXIgc2VydmljZSBpcyBtYXBw ZWQgKHdpdGgNCj4gK3J0ZV9zZXJ2aWNlX21hcF9sY29yZV9zZXQoKSkNCj4gKyAqIHRvIGEgbGNv cmUgdG8gd2hpY2ggbm8gcG9ydHMgYXJlIGJvdW5kLCB0aGUgc2VydmljZSBmdW5jdGlvbiB3aWxs IGJlDQo+ICthDQo+ICsgKiBuby1vcGVyYXRpb24uDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlv biBtYXkgYmUgY2FsbGVkIGJ5IGFueSB0aHJlYWQgKGluY2x1ZGluZyB1bnJlZ2lzdGVyZWQNCj4g KyAqIG5vbi1FQUwgdGhyZWFkcyksIGJ1dCBub3Qgd2hpbGUgdGhlIGRpc3BhdGNoZXIgaXMgcnVu bmluZyBvbiBsY29yZQ0KPiArICogc3BlY2lmaWVkIGJ5IEBjIGxjb3JlX2lkLg0KPiArICoNCj4g KyAqIEBwYXJhbSBpZA0KPiArICogIFRoZSBkaXNwYXRjaGVyIGlkZW50aWZpZXIuDQo+ICsgKg0K PiArICogQHBhcmFtIGV2ZW50X3BvcnRfaWQNCj4gKyAqICBUaGUgZXZlbnQgZGV2aWNlIHBvcnQg aWRlbnRpZmllci4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gYmF0Y2hfc2l6ZQ0KPiArICogIFRoZSBi YXRjaCBzaXplIHRvIHVzZSBpbiBydGVfZXZlbnRfZGVxdWV1ZV9idXJzdCgpLCBmb3IgdGhlDQo+ ICsgKiAgY29uZmlndXJlZCBldmVudCBkZXZpY2UgcG9ydCBhbmQgbGNvcmUuDQo+ICsgKg0KPiAr ICogQHBhcmFtIHRpbWVvdXQNCj4gKyAqICBUaGUgdGltZW91dCBwYXJhbWV0ZXIgdG8gdXNlIGlu IHJ0ZV9ldmVudF9kZXF1ZXVlX2J1cnN0KCksIGZvciB0aGUNCj4gKyAqICBjb25maWd1cmVkIGV2 ZW50IGRldmljZSBwb3J0IGFuZCBsY29yZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gbGNvcmVfaWQN Cj4gKyAqICBUaGUgbGNvcmUgYnkgd2hpY2ggdGhpcyBldmVudCBwb3J0IHdpbGwgYmUgdXNlZC4N Cj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgLSAwOiBTdWNjZXNzDQo+ICsgKiAgLSAtRU5P TUVNOiBVbmFibGUgdG8gYWxsb2NhdGUgc3VmZmljaWVudCByZXNvdXJjZXMuDQo+ICsgKiAgLSAt RUVYSVNUUzogRXZlbnQgcG9ydCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQuDQo+ICsgKiAgLSAtRUlO VkFMOiBJbnZhbGlkIGFyZ3VtZW50cy4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ ICtpbnQNCj4gK3J0ZV9kaXNwYXRjaGVyX2JpbmRfcG9ydF90b19sY29yZSh1aW50OF90IGlkLCB1 aW50OF90IGV2ZW50X3BvcnRfaWQsDQo+ICsJCQkJCXVpbnQxNl90IGJhdGNoX3NpemUsIHVpbnQ2 NF90DQo+IHRpbWVvdXQsDQo+ICsJCQkJCXVuc2lnbmVkIGludCBsY29yZV9pZCk7DQo+ICsNCj4g Ky8qKg0KPiArICogVW5iaW5kIGFuIGV2ZW50IGRldmljZSBwb3J0IGZyb20gYSBzcGVjaWZpYyBs Y29yZS4NCj4gKyAqDQo+ICsgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYnkgYW55IHRo cmVhZCAoaW5jbHVkaW5nIHVucmVnaXN0ZXJlZA0KPiArICogbm9uLUVBTCB0aHJlYWRzKSwgYnV0 IG5vdCB3aGlsZSB0aGUgZGlzcGF0Y2hlciBpcyBydW5uaW5nIG9uDQo+ICsgKiBsY29yZSBzcGVj aWZpZWQgYnkgQGMgbGNvcmVfaWQuDQo+ICsgKg0KPiArICogQHBhcmFtIGlkDQo+ICsgKiAgVGhl IGRpc3BhdGNoZXIgaWRlbnRpZmllci4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gZXZlbnRfcG9ydF9p ZA0KPiArICogIFRoZSBldmVudCBkZXZpY2UgcG9ydCBpZGVudGlmaWVyLg0KPiArICoNCj4gKyAq IEBwYXJhbSBsY29yZV9pZA0KPiArICogIFRoZSBsY29yZSB3aGljaCB3YXMgdXNpbmcgdGhpcyBl dmVudCBwb3J0Lg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAtIDA6IFN1Y2Nlc3MNCj4g KyAqICAtIC1FSU5WQUw6IEludmFsaWQgQGMgaWQuDQo+ICsgKiAgLSAtRU5PRU5UOiBFdmVudCBw b3J0IGlkIG5vdCBib3VuZCB0byB0aGlzIEBjIGxjb3JlX2lkLg0KPiArICovDQo+ICtfX3J0ZV9l eHBlcmltZW50YWwNCj4gK2ludA0KPiArcnRlX2Rpc3BhdGNoZXJfdW5iaW5kX3BvcnRfZnJvbV9s Y29yZSh1aW50OF90IGlkLCB1aW50OF90IGV2ZW50X3BvcnRfaWQsDQo+ICsJCQkJCSAgICB1bnNp Z25lZCBpbnQgbGNvcmVfaWQpOw0KPiArDQo+ICsvKioNCj4gKyAqIFJlZ2lzdGVyIGFuIGV2ZW50 IGhhbmRsZXIuDQo+ICsgKg0KPiArICogVGhlIG1hdGNoIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHVz ZWQgdG8gc2VsZWN0IGlmIGEgcGFydGljdWxhciBldmVudA0KPiArICogc2hvdWxkIGJlIGRlbGl2 ZXJlZCwgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcHJvY2VzcyBjYWxsYmFjaw0KPiArICogZnVu Y3Rpb24uDQo+ICsgKg0KPiArICogVGhlIHJlYXNvbiBmb3IgaGF2aW5nIHR3byBkaXN0aW5jdCBz dGVwcyBpcyB0byBhbGxvdyB0aGUgZGlzcGF0Y2hlcg0KPiArICogdG8gZGVsaXZlciBhbGwgZXZl bnRzIGFzIGEgYmF0Y2guIFRoaXMgaW4gdHVybiB3aWxsIGNhdXNlDQo+ICsgKiBwcm9jZXNzaW5n IG9mIGEgcGFydGljdWxhciBraW5kIG9mIGV2ZW50cyB0byBoYXBwZW4gaW4gYQ0KPiArICogYmFj ay10by1iYWNrIG1hbm5lciwgaW1wcm92aW5nIGNhY2hlIGxvY2FsaXR5Lg0KPiArICoNCj4gKyAq IFRoZSBsaXN0IG9mIGhhbmRsZXIgY2FsbGJhY2sgZnVuY3Rpb25zIGlzIHNoYXJlZCBhbW9uZyBh bGwgbGNvcmVzLA0KPiArICogYnV0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBsY29yZXMgd2hp Y2ggaGFzIGFuIGV2ZW50ZGV2IHBvcnQNCj4gKyAqIGJvdW5kIHRvIHRoZW0sIGFuZCB3aGljaCBh cmUgcnVubmluZyB0aGUgZGlzcGF0Y2hlciBzZXJ2aWNlLg0KPiArICoNCj4gKyAqIEFuIGV2ZW50 IGlzIGRlbGl2ZXJlZCB0byBhdCBtb3N0IG9uZSBoYW5kbGVyLiBFdmVudHMgd2hlcmUgbm8NCj4g KyAqIGhhbmRsZXIgaXMgZm91bmQgYXJlIGRyb3BwZWQuDQo+ICsgKg0KPiArICogVGhlIGFwcGxp Y2F0aW9uIG11c3Qgbm90IGRlcGVuZCBvbiB0aGUgb3JkZXIgb2Ygd2hpY2ggdGhlIG1hdGNoDQo+ ICsgKiBmdW5jdGlvbnMgYXJlIGludm9rZWQuDQo+ICsgKg0KPiArICogT3JkZXJpbmcgb2YgZXZl bnRzIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIG1haW50YWluZWQgYmV0d2Vlbg0KPiArICogZGlm ZmVyZW50IGRlbGl2ZXIgY2FsbGJhY2tzLiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGVyZSBhcmUg dHdvDQo+ICsgKiBjYWxsYmFja3MgcmVnaXN0ZXJlZCwgbWF0Y2hpbmcgZGlmZmVyZW50IHN1YnNl dHMgb2YgZXZlbnRzIGFycml2aW5nDQo+ICsgKiBvbiBhbiBhdG9taWMgcXVldWUuIEEgYmF0Y2gg b2YgZXZlbnRzIFtldjAsIGV2MSwgZXYyXSBhcmUgZGVxdWV1ZWQNCj4gKyAqIG9uIGEgcGFydGlj dWxhciBwb3J0LCBhbGwgcGVydGFpbmluZyB0byB0aGUgc2FtZSBmbG93LiBUaGUgbWF0Y2gNCj4g KyAqIGNhbGxiYWNrIGZvciByZWdpc3RyYXRpb24gQSByZXR1cm5zIHRydWUgZm9yIGV2MCBhbmQg ZXYyLCBhbmQgdGhlDQo+ICsgKiBtYXRjaGluZyBmdW5jdGlvbiBmb3IgcmVnaXN0cmF0aW9uIEIg Zm9yIGV2MS4gSW4gdGhhdCBzY2VuYXJpbywgdGhlDQo+ICsgKiBkaXNwYXRjaGVyIG1heSBjaG9v c2UgdG8gZGVsaXZlciBmaXJzdCBbZXYwLCBldjJdIHVzaW5nIEEncyBkZWxpdmVyDQo+ICsgKiBm dW5jdGlvbiwgYW5kIHRoZW4gW2V2MV0gdG8gQiAtIG9yIHZpY2UgdmVyc2EuDQo+ICsgKg0KPiAr ICogcnRlX2Rpc3BhdGNoZXJfcmVnaXN0ZXIoKSBtYXkgYmUgY2FsbGVkIGJ5IGFueSB0aHJlYWQN Cj4gKyAqIChpbmNsdWRpbmcgdW5yZWdpc3RlcmVkIG5vbi1FQUwgdGhyZWFkcyksIGJ1dCBub3Qg d2hpbGUgdGhlIGV2ZW50DQo+ICsgKiBkaXNwYXRjaGVyIGlzIHJ1bm5pbmcgb24gYW55IHNlcnZp Y2UgbGNvcmUuDQo+ICsgKg0KPiArICogQHBhcmFtIGlkDQo+ICsgKiAgVGhlIGRpc3BhdGNoZXIg aWRlbnRpZmllci4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gbWF0Y2hfZnVuDQo+ICsgKiAgVGhlIG1h dGNoIGNhbGxiYWNrIGZ1bmN0aW9uLg0KPiArICoNCj4gKyAqIEBwYXJhbSBtYXRjaF9jYl9kYXRh DQo+ICsgKiAgQSBwb2ludGVyIHRvIHNvbWUgYXBwbGljYXRpb24tc3BlY2lmaWMgb3BhcXVlIGRh dGEgKG9yIE5VTEwpLA0KPiArICogIHdoaWNoIGlzIHN1cHBsaWVkIGJhY2sgdG8gdGhlIGFwcGxp Y2F0aW9uIHdoZW4gbWF0Y2hfZnVuIGlzDQo+ICsgKiAgY2FsbGVkLg0KPiArICoNCj4gKyAqIEBw YXJhbSBwcm9jZXNzX2Z1bg0KPiArICogIFRoZSBwcm9jZXNzIGNhbGxiYWNrIGZ1bmN0aW9uLg0K PiArICoNCj4gKyAqIEBwYXJhbSBwcm9jZXNzX2NiX2RhdGENCj4gKyAqICBBIHBvaW50ZXIgdG8g c29tZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBvcGFxdWUgZGF0YSAob3IgTlVMTCksDQo+ICsgKiAg d2hpY2ggaXMgc3VwcGxpZWQgYmFjayB0byB0aGUgYXBwbGljYXRpb24gd2hlbiBwcm9jZXNzX2Z1 biBpcw0KPiArICogIGNhbGxlZC4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgLSA+PSAw OiBUaGUgaWRlbnRpZmllciBmb3IgdGhpcyByZWdpc3RyYXRpb24uDQo+ICsgKiAgLSAtRU5PTUVN OiBVbmFibGUgdG8gYWxsb2NhdGUgc3VmZmljaWVudCByZXNvdXJjZXMuDQo+ICsgKi8NCj4gK19f cnRlX2V4cGVyaW1lbnRhbA0KPiAraW50DQo+ICtydGVfZGlzcGF0Y2hlcl9yZWdpc3Rlcih1aW50 OF90IGlkLA0KPiArCQkJICAgICAgcnRlX2Rpc3BhdGNoZXJfbWF0Y2hfdCBtYXRjaF9mdW4sDQo+ ICsJCQkgICAgICB2b2lkICptYXRjaF9jYl9kYXRhLA0KPiArCQkJICAgICAgcnRlX2Rpc3BhdGNo ZXJfcHJvY2Vzc190IHByb2Nlc3NfZnVuLA0KPiArCQkJICAgICAgdm9pZCAqcHJvY2Vzc19jYl9k YXRhKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBVbnJlZ2lzdGVyIGFuIGV2ZW50IGhhbmRsZXIuDQo+ ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGJ5IGFueSB0aHJlYWQgKGlu Y2x1ZGluZyB1bnJlZ2lzdGVyZWQNCj4gKyAqIG5vbi1FQUwgdGhyZWFkcyksIGJ1dCBub3Qgd2hp bGUgdGhlIGRpc3BhdGNoZXIgaXMgcnVubmluZyBvbg0KPiArICogYW55IHNlcnZpY2UgbGNvcmUu DQo+ICsgKg0KPiArICogQHBhcmFtIGlkDQo+ICsgKiAgVGhlIGRpc3BhdGNoZXIgaWRlbnRpZmll ci4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gaGFuZGxlcl9pZA0KPiArICogIFRoZSBoYW5kbGVyIHJl Z2lzdHJhdGlvbiBpZCByZXR1cm5lZCBieSB0aGUgb3JpZ2luYWwNCj4gKyAqICBydGVfZGlzcGF0 Y2hlcl9yZWdpc3RlcigpIGNhbGwuDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogIC0gMDog U3VjY2Vzcw0KPiArICogIC0gLUVJTlZBTDogVGhlIEBjIGlkIGFuZC9vciB0aGUgQGMgaGFuZGxl cl9pZCBwYXJhbWV0ZXIgd2FzIGludmFsaWQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRh bA0KPiAraW50DQo+ICtydGVfZGlzcGF0Y2hlcl91bnJlZ2lzdGVyKHVpbnQ4X3QgaWQsIGludCBo YW5kbGVyX2lkKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBSZWdpc3RlciBhIGZpbmFsaXplIGNhbGxi YWNrIGZ1bmN0aW9uLg0KPiArICoNCj4gKyAqIEFuIGFwcGxpY2F0aW9uIG1heSBvcHRpb25hbGx5 IGluc3RhbGwgb25lIG9yIG1vcmUgZmluYWxpemUNCj4gKyAqIGNhbGxiYWNrcy4NCj4gKyAqDQo+ ICsgKiBBbGwgZmluYWxpemUgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGJ5IHRoZSBkaXNwYXRjaGVy IHdoZW4gYQ0KPiArICogY29tcGxldGUgYmF0Y2ggb2YgZXZlbnRzIChyZXRyaWV2ZSB1c2luZyBy dGVfZXZlbnRfZGVxdWV1ZV9idXJzdCgpKQ0KPiArICogaGF2ZSBiZWVuIGRlbGl2ZXJlZCB0byB0 aGUgYXBwbGljYXRpb24gKG9yIGhhdmUgYmVlbiBkcm9wcGVkKS4NCj4gKyAqDQo+ICsgKiBUaGUg ZmluYWxpemUgY2FsbGJhY2sgaXMgbm90IHRpZWQgdG8gYW55IHBhcnRpY3VsYXIgaGFuZGxlci4N Cj4gKyAqDQo+ICsgKiBUaGUgZmluYWxpemUgY2FsbGJhY2sgcHJvdmlkZXMgYW4gb3Bwb3J0dW5p dHkgZm9yIHRoZSBhcHBsaWNhdGlvbg0KPiArICogdG8gZG8gcGVyLWJhdGNoIHByb2Nlc3Npbmcu IE9uZSBjYXNlIHdoZXJlIHRoaXMgbWF5IGJlIHVzZWZ1bCBpcyBpZg0KPiArICogYW4gZXZlbnQg b3V0cHV0IGJ1ZmZlciBpcyB1c2VkLCBhbmQgaXMgc2hhcmVkIGFtb25nIHNldmVyYWwNCj4gKyAq IGhhbmRsZXJzLiBJbiBzdWNoIGEgY2FzZSwgcHJvcGVyIG91dHB1dCBidWZmZXIgZmx1c2hpbmcg bWF5IGJlDQo+ICsgKiBhc3N1cmVkIHVzaW5nIGEgZmluYWxpemUgY2FsbGJhY2suDQo+ICsgKg0K PiArICogcnRlX2Rpc3BhdGNoZXJfZmluYWxpemVfcmVnaXN0ZXIoKSBtYXkgYmUgY2FsbGVkIGJ5 IGFueSB0aHJlYWQNCj4gKyAqIChpbmNsdWRpbmcgdW5yZWdpc3RlcmVkIG5vbi1FQUwgdGhyZWFk cyksIGJ1dCBub3Qgd2hpbGUgdGhlDQo+ICsgKiBkaXNwYXRjaGVyIGlzIHJ1bm5pbmcgb24gYW55 IHNlcnZpY2UgbGNvcmUuDQo+ICsgKg0KPiArICogQHBhcmFtIGlkDQo+ICsgKiAgVGhlIGRpc3Bh dGNoZXIgaWRlbnRpZmllci4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gZmluYWxpemVfZnVuDQo+ICsg KiAgVGhlIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciBjb21wbGV0aW5nIHRoZSBwcm9jZXNzaW5nIG9m IGENCj4gKyAqICBkZXF1ZXVlIGJhdGNoLg0KPiArICoNCj4gKyAqIEBwYXJhbSBmaW5hbGl6ZV9k YXRhDQo+ICsgKiAgQSBwb2ludGVyIHRvIHNvbWUgYXBwbGljYXRpb24tc3BlY2lmaWMgb3BhcXVl IGRhdGEgKG9yIE5VTEwpLA0KPiArICogIHdoaWNoIGlzIHN1cHBsaWVkIGJhY2sgdG8gdGhlIGFw cGxpY2F0aW9uIHdoZW4gQGMgZmluYWxpemVfZnVuIGlzDQo+ICsgKiAgY2FsbGVkLg0KPiArICoN Cj4gKyAqIEByZXR1cm4NCj4gKyAqICAtID49IDA6IFRoZSBpZGVudGlmaWVyIGZvciB0aGlzIHJl Z2lzdHJhdGlvbi4NCj4gKyAqICAtIC1FTk9NRU06IFVuYWJsZSB0byBhbGxvY2F0ZSBzdWZmaWNp ZW50IHJlc291cmNlcy4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ICtpbnQNCj4g K3J0ZV9kaXNwYXRjaGVyX2ZpbmFsaXplX3JlZ2lzdGVyKHVpbnQ4X3QgaWQsDQo+ICsJCQkJIHJ0 ZV9kaXNwYXRjaGVyX2ZpbmFsaXplX3QgZmluYWxpemVfZnVuLA0KPiArCQkJCSB2b2lkICpmaW5h bGl6ZV9kYXRhKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBVbnJlZ2lzdGVyIGEgZmluYWxpemUgY2Fs bGJhY2suDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGJ5IGFueSB0 aHJlYWQgKGluY2x1ZGluZyB1bnJlZ2lzdGVyZWQNCj4gKyAqIG5vbi1FQUwgdGhyZWFkcyksIGJ1 dCBub3Qgd2hpbGUgdGhlIGRpc3BhdGNoZXIgaXMgcnVubmluZyBvbg0KPiArICogYW55IHNlcnZp Y2UgbGNvcmUuDQo+ICsgKg0KPiArICogQHBhcmFtIGlkDQo+ICsgKiAgVGhlIGRpc3BhdGNoZXIg aWRlbnRpZmllci4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gcmVnX2lkDQo+ICsgKiAgVGhlIGZpbmFs aXplIHJlZ2lzdHJhdGlvbiBpZCByZXR1cm5lZCBieSB0aGUgb3JpZ2luYWwNCj4gKyAqICBydGVf ZGlzcGF0Y2hlcl9maW5hbGl6ZV9yZWdpc3RlcigpIGNhbGwuDQo+ICsgKg0KPiArICogQHJldHVy bg0KPiArICogIC0gMDogU3VjY2Vzcw0KPiArICogIC0gLUVJTlZBTDogVGhlIEBjIGlkIGFuZC9v ciB0aGUgQGMgcmVnX2lkIHBhcmFtZXRlciB3YXMgaW52YWxpZC4NCj4gKyAqLw0KPiArX19ydGVf ZXhwZXJpbWVudGFsDQo+ICtpbnQNCj4gK3J0ZV9kaXNwYXRjaGVyX2ZpbmFsaXplX3VucmVnaXN0 ZXIodWludDhfdCBpZCwgaW50IHJlZ19pZCk7DQo+ICsNCj4gKy8qKg0KPiArICogU3RhcnQgYSBk aXNwYXRjaGVyIGluc3RhbmNlLg0KPiArICoNCj4gKyAqIEVuYWJsZXMgdGhlIGRpc3BhdGNoZXIg c2VydmljZS4NCj4gKyAqDQo+ICsgKiBUaGUgdW5kZXJseWluZyBldmVudCBkZXZpY2UgbXVzdCBo YXZlIGJlZW4gc3RhcnRlZCBwcmlvciB0byBjYWxsaW5nDQo+ICsgKiBydGVfZGlzcGF0Y2hlcl9z dGFydCgpLg0KPiArICoNCj4gKyAqIEZvciB0aGUgZGlzcGF0Y2hlciB0byBhY3R1YWxseSBwZXJm b3JtIHdvcmsgKGkuZS4sIGRpc3BhdGNoDQo+ICsgKiBldmVudHMpLCBpdHMgc2VydmljZSBtdXN0 IGhhdmUgYmVlbiBtYXBwZWQgdG8gb25lIG9yIG1vcmUgc2VydmljZQ0KPiArICogbGNvcmVzLCBh bmQgaXRzIHNlcnZpY2UgcnVuIHN0YXRlIHNldCB0byAnMScuIEEgZGlzcGF0Y2hlcidzDQo+ICsg KiBzZXJ2aWNlIGlzIHJldHJpZXZlZCB1c2luZyBydGVfZGlzcGF0Y2hlcl9zZXJ2aWNlX2lkX2dl dCgpLg0KPiArICoNCj4gKyAqIEVhY2ggc2VydmljZSBsY29yZSB0byB3aGljaCB0aGUgZGlzcGF0 Y2hlciBpcyBtYXBwZWQgc2hvdWxkDQo+ICsgKiBoYXZlIGF0IGxlYXN0IG9uZSBldmVudCBwb3J0 IGNvbmZpZ3VyZWQuIFN1Y2ggY29uZmlndXJhdGlvbiBpcw0KPiArICogcGVyZm9ybWVkIGJ5IGNh bGxpbmcgcnRlX2Rpc3BhdGNoZXJfYmluZF9wb3J0X3RvX2xjb3JlKCksIHByaW9yIHRvDQo+ICsg KiBzdGFydGluZyB0aGUgZGlzcGF0Y2hlci4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gaWQNCj4gKyAq ICBUaGUgZGlzcGF0Y2hlciBpZGVudGlmaWVyLg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAq ICAtIDA6IFN1Y2Nlc3MNCj4gKyAqICAtIC1FSU5WQUw6IEludmFsaWQgQGMgaWQuDQo+ICsgKi8N Cj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiAraW50DQo+ICtydGVfZGlzcGF0Y2hlcl9zdGFydCh1 aW50OF90IGlkKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBTdG9wIGEgcnVubmluZyBkaXNwYXRjaGVy IGluc3RhbmNlLg0KPiArICoNCj4gKyAqIERpc2FibGVzIHRoZSBkaXNwYXRjaGVyIHNlcnZpY2Uu DQo+ICsgKg0KPiArICogQHBhcmFtIGlkDQo+ICsgKiAgVGhlIGRpc3BhdGNoZXIgaWRlbnRpZmll ci4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgLSAwOiBTdWNjZXNzDQo+ICsgKiAgLSAt RUlOVkFMOiBJbnZhbGlkIEBjIGlkLg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4g K2ludA0KPiArcnRlX2Rpc3BhdGNoZXJfc3RvcCh1aW50OF90IGlkKTsNCj4gKw0KPiArLyoqDQo+ ICsgKiBSZXRyaWV2ZSBzdGF0aXN0aWNzIGZvciBhIGRpc3BhdGNoZXIgaW5zdGFuY2UuDQo+ICsg Kg0KPiArICogVGhpcyBmdW5jdGlvbiBpcyBNVCBzYWZlIGFuZCBtYXkgYmUgY2FsbGVkIGJ5IGFu eSB0aHJlYWQNCj4gKyAqIChpbmNsdWRpbmcgdW5yZWdpc3RlcmVkIG5vbi1FQUwgdGhyZWFkcyku DQo+ICsgKg0KPiArICogQHBhcmFtIGlkDQo+ICsgKiAgVGhlIGRpc3BhdGNoZXIgaWRlbnRpZmll ci4NCj4gKyAqIEBwYXJhbVtvdXRdIHN0YXRzDQo+ICsgKiAgIEEgcG9pbnRlciB0byBhIHN0cnVj dHVyZSB0byBmaWxsIHdpdGggc3RhdGlzdGljcy4NCj4gKyAqIEByZXR1cm4NCj4gKyAqICAtIDA6 IFN1Y2Nlc3MNCj4gKyAqICAtIC1FSU5WQUw6IFRoZSBAYyBpZCBwYXJhbWV0ZXIgd2FzIGludmFs aWQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiAraW50DQo+ICtydGVfZGlzcGF0 Y2hlcl9zdGF0c19nZXQodWludDhfdCBpZCwNCj4gKwkJCSAgICAgICBzdHJ1Y3QgcnRlX2Rpc3Bh dGNoZXJfc3RhdHMgKnN0YXRzKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBSZXNldCBzdGF0aXN0aWNz IGZvciBhIGRpc3BhdGNoZXIgaW5zdGFuY2UuDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiBt YXkgYmUgY2FsbGVkIGJ5IGFueSB0aHJlYWQgKGluY2x1ZGluZyB1bnJlZ2lzdGVyZWQNCj4gKyAq IG5vbi1FQUwgdGhyZWFkcyksIGJ1dCBtYXkgbm90IHByb2R1Y2UgdGhlIGNvcnJlY3QgcmVzdWx0 IGlmIHRoZQ0KPiArICogZGlzcGF0Y2hlciBpcyBydW5uaW5nIG9uIGFueSBzZXJ2aWNlIGxjb3Jl Lg0KPiArICoNCj4gKyAqIEBwYXJhbSBpZA0KPiArICogIFRoZSBkaXNwYXRjaGVyIGlkZW50aWZp ZXIuDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogIC0gMDogU3VjY2Vzcw0KPiArICogIC0g LUVJTlZBTDogVGhlIEBjIGlkIHBhcmFtZXRlciB3YXMgaW52YWxpZC4NCj4gKyAqLw0KPiArX19y dGVfZXhwZXJpbWVudGFsDQo+ICtpbnQNCj4gK3J0ZV9kaXNwYXRjaGVyX3N0YXRzX3Jlc2V0KHVp bnQ4X3QgaWQpOw0KPiArDQo+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gK30NCj4gKyNlbmRpZg0K PiArDQo+ICsjZW5kaWYgLyogX19SVEVfRElTUEFUQ0hFUl9fICovDQo+IGRpZmYgLS1naXQgYS9s aWIvZGlzcGF0Y2hlci92ZXJzaW9uLm1hcCBiL2xpYi9kaXNwYXRjaGVyL3ZlcnNpb24ubWFwIG5l dyBmaWxlDQo+IG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAuLjhmOWFkOTY1MjINCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi9saWIvZGlzcGF0Y2hlci92ZXJzaW9uLm1hcA0KPiBAQCAtMCww ICsxLDIwIEBADQo+ICtFWFBFUklNRU5UQUwgew0KPiArCWdsb2JhbDoNCj4gKw0KPiArCSMgYWRk ZWQgaW4gMjMuMTENCj4gKwlydGVfZGlzcGF0Y2hlcl9jcmVhdGU7DQo+ICsJcnRlX2Rpc3BhdGNo ZXJfZnJlZTsNCj4gKwlydGVfZGlzcGF0Y2hlcl9zZXJ2aWNlX2lkX2dldDsNCj4gKwlydGVfZGlz cGF0Y2hlcl9iaW5kX3BvcnRfdG9fbGNvcmU7DQo+ICsJcnRlX2Rpc3BhdGNoZXJfdW5iaW5kX3Bv cnRfZnJvbV9sY29yZTsNCj4gKwlydGVfZGlzcGF0Y2hlcl9yZWdpc3RlcjsNCj4gKwlydGVfZGlz cGF0Y2hlcl91bnJlZ2lzdGVyOw0KPiArCXJ0ZV9kaXNwYXRjaGVyX2ZpbmFsaXplX3JlZ2lzdGVy Ow0KPiArCXJ0ZV9kaXNwYXRjaGVyX2ZpbmFsaXplX3VucmVnaXN0ZXI7DQo+ICsJcnRlX2Rpc3Bh dGNoZXJfc3RhcnQ7DQo+ICsJcnRlX2Rpc3BhdGNoZXJfc3RvcDsNCj4gKwlydGVfZGlzcGF0Y2hl cl9zdGF0c19nZXQ7DQo+ICsJcnRlX2Rpc3BhdGNoZXJfc3RhdHNfcmVzZXQ7DQo+ICsNCj4gKwls b2NhbDogKjsNCj4gK307DQo+IGRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVz b24uYnVpbGQgaW5kZXgNCj4gMDk5YjBlZDE4YS4uMzA5M2IzMzhkMiAxMDA2NDQNCj4gLS0tIGEv bGliL21lc29uLmJ1aWxkDQo+ICsrKyBiL2xpYi9tZXNvbi5idWlsZA0KPiBAQCAtMzUsNiArMzUs NyBAQCBsaWJyYXJpZXMgPSBbDQo+ICAgICAgICAgICdkaXN0cmlidXRvcicsDQo+ICAgICAgICAg ICdlZmQnLA0KPiAgICAgICAgICAnZXZlbnRkZXYnLA0KPiArICAgICAgICAnZGlzcGF0Y2hlcics ICMgZGlzcGF0Y2hlciBkZXBlbmRzIG9uIGV2ZW50ZGV2DQo+ICAgICAgICAgICdncHVkZXYnLA0K PiAgICAgICAgICAnZ3JvJywNCj4gICAgICAgICAgJ2dzbycsDQo+IEBAIC04MSw2ICs4Miw3IEBA IG9wdGlvbmFsX2xpYnMgPSBbDQo+ICAgICAgICAgICdjZmdmaWxlJywNCj4gICAgICAgICAgJ2Nv bXByZXNzZGV2JywNCj4gICAgICAgICAgJ2NyeXB0b2RldicsDQo+ICsgICAgICAgICdkaXNwYXRj aGVyJywNCj4gICAgICAgICAgJ2Rpc3RyaWJ1dG9yJywNCj4gICAgICAgICAgJ2RtYWRldicsDQo+ ICAgICAgICAgICdlZmQnLA0KPiAtLQ0KPiAyLjM0LjENCg0K