From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 17C6EC433E3 for ; Mon, 3 Aug 2020 17:11:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CEE9822B49 for ; Mon, 3 Aug 2020 17:11:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="NLyVXoop"; dkim=pass (1024-bit key) header.d=microchiptechnology.onmicrosoft.com header.i=@microchiptechnology.onmicrosoft.com header.b="gSKd4AIS" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728178AbgHCRLv (ORCPT ); Mon, 3 Aug 2020 13:11:51 -0400 Received: from esa5.microchip.iphmx.com ([216.71.150.166]:65090 "EHLO esa5.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726878AbgHCRLu (ORCPT ); Mon, 3 Aug 2020 13:11:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1596474709; x=1628010709; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=42NwSFb6r4FK/vYSe1P8wKVOSQSImsMxBLVWvRRg1L8=; b=NLyVXoopEDCB1fDEqjdNC3mFWSdiLaaQuu7vK0d9/FfWcTovKS8hDCYm /Q5cTv3J7jct1l0QCQUekOanDzzNejkmiqes02zs6S/M1LVQ7+GavpSir OT8X1OkXwmgC51n/gF4uo5oCEJBPDzw/+7Kk2JD6/nMIuLHByMY0hTYrt mAKWip++kTnhF6Rj278Pg2pGX/1U5wB/WSIB+Pdg6NjOc3AxQy9dAPBkP tcREVaUMub165vMSjX8J5nsPu0SyaQ2uBkCD+HRpOsTlv0Cz+de6Jh6wU QoPRt4ZTZ1aTd6StmuYPJjvpQHCgg5RCxOSeJ0NzOEU1EP6wS0yHN+sht A==; IronPort-SDR: A5K5EveHeXrAT0bFgY4VfNgT7YcmmTzFkcRNnqYTyAUbW0hGLFRTWfDAZanabFSZ6sqv+Nkiu4 HOVv1hmvW9XxlWlH4Vx0At47VeoKvFBnWVorSSoOeIs4UOZpLDTgy4kxLlB65yDHj0TbEX0dli boFv7TLyQhcZrFsGuddrSd6m4fd3urK40RP2K/qMD0hZlYxRinP+pTxryfHcv54vC2iCFJvS3K UewlrupyJoVgrSEddVMHTOoFfxwGqc6vN50aSlVTX5ty4YnByHxAePzJCPp+wAeuoL5PAh/46O JAk= X-IronPort-AV: E=Sophos;i="5.75,430,1589266800"; d="scan'208";a="85672610" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa5.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 03 Aug 2020 10:11:43 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.85.144) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1979.3; Mon, 3 Aug 2020 10:11:37 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1979.3 via Frontend Transport; Mon, 3 Aug 2020 10:11:37 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dUlqPJJHTyPsNn802MNZ/t+5HLILFqs1VsxSsLmZ7ckF/3v5Ku/Zcfz9VfTsK5jF8cTP79a43+lurEq+Iq4cLtnIZBB14/jPHPpqxyyoa3ASveHT+o1rhCFlhwLaKBWRXqgOjo/jinQ5uFiflUPPZl8/oea9M20D7ySJ1FZRP/S3wdLAa4bV+vuK/nX1eKU3CWqAhpuw5x3VS+mVIS9q+tR1GUpSckA/CsS1pBbizbszIXSMVjsGEkDfoZQWcTtJytpIwNdm1v8FOqJD61XbyrCJ0Bv7JbpDypB08HtsPHbOgfge4ecmgFwvA6Y9sfb/ylBxG7cWoTo1NO+RMvamZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=42NwSFb6r4FK/vYSe1P8wKVOSQSImsMxBLVWvRRg1L8=; b=LtLqT6PPmSfrCeV+6XRAv36X3L0TmMYd0ga910WC7uCtmkC+tDlJcRgZ8xQn8FUJApKEOQ5gkG2ykLsY1UQlvBo4pFYfrwcSOUqaU9IppDsmQBvIuOxfIe38ZQDXcBF4xtN98rilJenUeQ+uhy8MgAVLuFngIMP9LD1fzQ6/OusPDldY/C+gIzeQyd3JlH/6ma9XP8RvB/0ioKu4m56toMOuNXAM6OvzLzu58yU4K+eHzHPZyWRWGeiZvyh0a1a/pdQxgyxpd1cpQE/rOE1m5FSZgcJlL00g+D0y2kMmUGvZrPmtHFTwWgFOwOIPweJ2zuzLNC18uMG6M5shPG3m2A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microchip.com; dmarc=pass action=none header.from=microchip.com; dkim=pass header.d=microchip.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector2-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=42NwSFb6r4FK/vYSe1P8wKVOSQSImsMxBLVWvRRg1L8=; b=gSKd4AISTJFTs784m+MIMr/ui95NDqbBPtOEBWqGYc2VU4YI6Pts0oZ5Ns3u3aGX22y/CNo97MLf80J5eghAtuGsE90pUoKYPrs3AMkexAcR1FvDUi6i3S2HCkHubyKGNF+O2LiU5CPgtURdTq5o9eICNWApKJ3clcbrQl9AtyY= Received: from DM6PR11MB3420.namprd11.prod.outlook.com (2603:10b6:5:69::31) by DM6PR11MB2860.namprd11.prod.outlook.com (2603:10b6:5:c1::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3239.20; Mon, 3 Aug 2020 17:11:40 +0000 Received: from DM6PR11MB3420.namprd11.prod.outlook.com ([fe80::e8b2:1d82:49d9:f4b]) by DM6PR11MB3420.namprd11.prod.outlook.com ([fe80::e8b2:1d82:49d9:f4b%6]) with mapi id 15.20.3239.021; Mon, 3 Aug 2020 17:11:40 +0000 From: To: , , , , CC: , , , , , , Subject: Re: [PATCH v3 2/2] ASoC: mchp-spdiftx: add driver for S/PDIF TX Controller Thread-Topic: [PATCH v3 2/2] ASoC: mchp-spdiftx: add driver for S/PDIF TX Controller Thread-Index: AQHWaZb2Xv4RISU33E+0BkyOzrgC0g== Date: Mon, 3 Aug 2020 17:11:40 +0000 Message-ID: <8a0cb78d-d22d-eb29-8650-67c033b57446@microchip.com> References: <20200803081851.102570-1-codrin.ciubotariu@microchip.com> <20200803081851.102570-2-codrin.ciubotariu@microchip.com> <4d009743-733a-9578-71b2-d320fdca9331@microchip.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 authentication-results: microchip.com; dkim=none (message not signed) header.d=none;microchip.com; dmarc=none action=none header.from=microchip.com; x-originating-ip: [213.233.108.165] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ba806294-2a42-4255-a5b7-08d837d049d9 x-ms-traffictypediagnostic: DM6PR11MB2860: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-bypassexternaltag: True x-ms-oob-tlc-oobclassifiers: OLM:568; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: idZhbYMA1LQdWNsMhIyVtn6/vsGqhWzwEQ7BxVMBEHkSvExTMwDdM6U+PKcu4siJTm2IupXFDD+/EVI1uB2t7NlqPq1K1tPA3O5v+z0ak5Va0WmTc2yC6863roJp2/k7whJXuSe1+C4R/+CzRxa8WRrLHVZbZ7Ojdh9h+KpAqsuZTv8i+i1LxJUDlU+YGNdCfTfD8ESaRbtXFa9VX4rKHZes/yPLpa5b42HlNNrOOefHJZUY3I2qqo/1fGRY5IB+SCR+qr6FXNvSTSVPaduR/NdHR8BI44Y1e+Co55xLRwS8yO2PVu6kMFJY8whGNWhjJpi096luch4mAU2gOVwBQYjAxBFStU3glm6JMQQRnbgrCV0ZWXD9i17IguiCvbHu x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR11MB3420.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(39860400002)(376002)(136003)(396003)(346002)(366004)(6486002)(66946007)(91956017)(64756008)(66446008)(66556008)(66476007)(31686004)(76116006)(26005)(2616005)(6512007)(8676002)(30864003)(8936002)(2906002)(186003)(4326008)(86362001)(71200400001)(5660300002)(54906003)(36756003)(316002)(478600001)(31696002)(53546011)(83380400001)(7416002)(6506007)(110136005)(43740500002)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: 5XSa+s/TxOsG7lxxTulPj6pxJxpXqe+dvBc6tUbGNaByaY7ZzYXef6bNgo9r1AVZa0ZsxD22bQXRIHBPmaWOsm8gsSpgE5PgLixToX4sJ86mD16L4ZmlYkToaza7wbfxoPPMdZTrzL0Js2xcVIyMos/Zihjc/tAQovfOXqRyv4VVGW9RxghICK4oseoclmS3E6mftdh8KMg0FfYgiGJBa4nUW2TAsYbmegBeDZC98v5gbgJfxu10RGWEL6ypcctHxbfJr9ReAiUnVc6+sSHKvxCKLt7gQK0z3A6imnmGUroGF7MoruKF9AM6D6c4HQ3wLzYpdtWZtPTmhCvddaxXU5R4TVuK1QYtFhZMIBV8vYQzOZWgv323AxLg20t3101xtfvQH2kwZ8kcBtLxlaY2IyRI5qkMTCEwt1Ukx6tulK229UgTo3H3Do+W+hsbpNNwWL7GnZXkyoVSCyPNjQUPf5Yd3qrFLfOoSJnqppWquqe7dAQk6evfidcOV6cx6Olmx+So4vphShp0qEm/yscNV6s1sZzGtSIozd2TLYrZmx7aNYOZ4kN5I7nn6IpG2ndJ3tI9r/j9lS+RGnVKu5E4vjI5NGJ38VQ10v997aIG+FvleX2q/Rb8iEM2Yop4dmVEjZ71y0vypuO/sf/uVk4H8Q== Content-Type: text/plain; charset="utf-8" Content-ID: <082E92BDE9F5A342BF0E666085EE28C1@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB3420.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ba806294-2a42-4255-a5b7-08d837d049d9 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Aug 2020 17:11:40.4191 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: IrJXcV2MIxQoNe7+P1gyTilWHbp7AISDBOc6EF0AxXHTtaJOkcPTG5O40kvMRfZXKH7+dfGrkXvrrpZ0KOIV/OgTV0jq4pdhfK1Yeg4nCXU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB2860 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org DQoNCk9uIDAzLjA4LjIwMjAgMTk6MTEsIENvZHJpbiBDaXVib3Rhcml1IC0gTTE5OTQwIHdyb3Rl Og0KPiBPbiAwMy4wOC4yMDIwIDE2OjA2LCBDbGF1ZGl1IEJlem5lYSAtIE0xODA2MyB3cm90ZToN Cj4+DQo+Pg0KPj4gT24gMDMuMDguMjAyMCAxMToxOCwgQ29kcmluIENpdWJvdGFyaXUgd3JvdGU6 DQo+Pj4gVGhlIG5ldyBTUERJRiBUWCBjb250cm9sbGVyIGlzIGEgc2VyaWFsIHBvcnQgY29tcGxp YW50IHdpdGggdGhlIElFQy0NCj4+PiA2MDk1OCBzdGFuZGFyZC4gSXQgYWxzbyBzdXBwb3J0cyBw cm9ncmFtbWFibGUgVXNlciBEYXRhIGFuZCBDaGFubmVsDQo+Pj4gU3RhdHVzIGZpZWxkcy4NCj4+ Pg0KPj4+IFRoaXMgSVAgaXMgZW1iZWRkZWQgaW4gTWljcm9jaGlwJ3Mgc2FtYTdnNSBTb0MuDQo+ Pj4NCj4+PiBTaWduZWQtb2ZmLWJ5OiBDb2RyaW4gQ2l1Ym90YXJpdSA8Y29kcmluLmNpdWJvdGFy aXVAbWljcm9jaGlwLmNvbT4NCj4+PiAtLS0NCj4+Pg0KPj4+IENoYW5nZXMgaW4gdjIsIHYzOg0K Pj4+ICAgLSBub25lOw0KPj4+DQo+Pj4gICBzb3VuZC9zb2MvYXRtZWwvS2NvbmZpZyAgICAgICAg fCAgMTIgKw0KPj4+ICAgc291bmQvc29jL2F0bWVsL01ha2VmaWxlICAgICAgIHwgICAyICsNCj4+ PiAgIHNvdW5kL3NvYy9hdG1lbC9tY2hwLXNwZGlmdHguYyB8IDg2NCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysNCj4+PiAgIDMgZmlsZXMgY2hhbmdlZCwgODc4IGluc2VydGlvbnMo KykNCj4+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2MvYXRtZWwvbWNocC1zcGRpZnR4 LmMNCj4+Pg0KPj4+IGRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvS2NvbmZpZyBiL3NvdW5k L3NvYy9hdG1lbC9LY29uZmlnDQo+Pj4gaW5kZXggNzFmMmQ0MjE4OGM0Li45M2JlYjdkNjcwYTMg MTAwNjQ0DQo+Pj4gLS0tIGEvc291bmQvc29jL2F0bWVsL0tjb25maWcNCj4+PiArKysgYi9zb3Vu ZC9zb2MvYXRtZWwvS2NvbmZpZw0KPj4+IEBAIC0xMzIsNCArMTMyLDE2IEBAIGNvbmZpZyBTTkRf TUNIUF9TT0NfSTJTX01DQw0KPj4+ICAgCSAgYW5kIHN1cHBvcnRzIGEgVGltZSBEaXZpc2lvbiBN dWx0aXBsZXhlZCAoVERNKSBpbnRlcmZhY2Ugd2l0aA0KPj4+ICAgCSAgZXh0ZXJuYWwgbXVsdGkt Y2hhbm5lbCBhdWRpbyBjb2RlY3MuDQo+Pj4gICANCj4+PiArY29uZmlnIFNORF9NQ0hQX1NPQ19T UERJRlRYDQo+Pj4gKwl0cmlzdGF0ZSAiTWljcm9jaGlwIEFTb0MgZHJpdmVyIGZvciBib2FyZHMg dXNpbmcgUy9QRElGIFRYIg0KPj4+ICsJZGVwZW5kcyBvbiBPRiAmJiAoQVJDSF9BVDkxIHx8IENP TVBJTEVfVEVTVCkNCj4+PiArCXNlbGVjdCBTTkRfU09DX0dFTkVSSUNfRE1BRU5HSU5FX1BDTQ0K Pj4+ICsJc2VsZWN0IFJFR01BUF9NTUlPDQo+Pj4gKwloZWxwDQo+Pj4gKwkgIFNheSBZIG9yIE0g aWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIE1pY3JvY2hpcCBTL1BESUYgVFggQVNvYw0K Pj4+ICsJICBkcml2ZXIgb24gdGhlIGZvbGxvd2luZyBNaWNyb2NoaXAgcGxhdGZvcm1zOg0KPj4+ ICsJICAtIHNhbWE3ZzUNCj4+PiArDQo+Pj4gKwkgIFRoaXMgUy9QRElGIFRYIGRyaXZlciBpcyBj b21wbGlhbnQgd2l0aCBJRUMtNjA5NTggc3RhbmRhcmQgYW5kDQo+Pj4gKwkgIGluY2x1ZGVzIHBy b2dyYW1hYmxlIFVzZXIgRGF0YSBhbmQgQ2hhbm5lbCBTdGF0dXMgZmllbGRzLg0KPj4+ICAgZW5k aWYNCj4+PiBkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL01ha2VmaWxlIGIvc291bmQvc29j L2F0bWVsL01ha2VmaWxlDQo+Pj4gaW5kZXggYzdkMjk4OTc5MWJlLi4zZmQ4OWEwMDYzZGYgMTAw NjQ0DQo+Pj4gLS0tIGEvc291bmQvc29jL2F0bWVsL01ha2VmaWxlDQo+Pj4gKysrIGIvc291bmQv c29jL2F0bWVsL01ha2VmaWxlDQo+Pj4gQEAgLTUsNiArNSw3IEBAIHNuZC1zb2MtYXRtZWwtcGNt LWRtYS1vYmpzIDo9IGF0bWVsLXBjbS1kbWEubw0KPj4+ICAgc25kLXNvYy1hdG1lbF9zc2NfZGFp LW9ianMgOj0gYXRtZWxfc3NjX2RhaS5vDQo+Pj4gICBzbmQtc29jLWF0bWVsLWkycy1vYmpzIDo9 IGF0bWVsLWkycy5vDQo+Pj4gICBzbmQtc29jLW1jaHAtaTJzLW1jYy1vYmpzIDo9IG1jaHAtaTJz LW1jYy5vDQo+Pj4gK3NuZC1zb2MtbWNocC1zcGRpZnR4LW9ianMgOj0gbWNocC1zcGRpZnR4Lm8N Cj4+PiAgIA0KPj4+ICAgIyBwZGMgYW5kIGRtYSBuZWVkIHRvIGJvdGggYmUgYnVpbHQtaW4gaWYg YW55IHVzZXIgb2YNCj4+PiAgICMgc3NjIGlzIGJ1aWx0LWluLg0KPj4+IEBAIC0xNyw2ICsxOCw3 IEBAIGVuZGlmDQo+Pj4gICBvYmotJChDT05GSUdfU05EX0FUTUVMX1NPQ19TU0MpICs9IHNuZC1z b2MtYXRtZWxfc3NjX2RhaS5vDQo+Pj4gICBvYmotJChDT05GSUdfU05EX0FUTUVMX1NPQ19JMlMp ICs9IHNuZC1zb2MtYXRtZWwtaTJzLm8NCj4+PiAgIG9iai0kKENPTkZJR19TTkRfTUNIUF9TT0Nf STJTX01DQykgKz0gc25kLXNvYy1tY2hwLWkycy1tY2Mubw0KPj4+ICtvYmotJChDT05GSUdfU05E X01DSFBfU09DX1NQRElGVFgpICs9IHNuZC1zb2MtbWNocC1zcGRpZnR4Lm8NCj4+PiAgIA0KPj4+ ICAgIyBBVDkxIE1hY2hpbmUgU3VwcG9ydA0KPj4+ICAgc25kLXNvYy1zYW05ZzIwLXdtODczMS1v YmpzIDo9IHNhbTlnMjBfd204NzMxLm8NCj4+PiBkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVs L21jaHAtc3BkaWZ0eC5jIGIvc291bmQvc29jL2F0bWVsL21jaHAtc3BkaWZ0eC5jDQo+Pj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjczOGY2Nzg4MjEyZQ0K Pj4+IC0tLSAvZGV2L251bGwNCj4+PiArKysgYi9zb3VuZC9zb2MvYXRtZWwvbWNocC1zcGRpZnR4 LmMNCj4+PiBAQCAtMCwwICsxLDg2NCBAQA0KPj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMA0KPj4+ICsvLw0KPj4+ICsvLyBEcml2ZXIgZm9yIE1pY3JvY2hpcCBTL1BESUYg VFggQ29udHJvbGxlcg0KPj4+ICsvLw0KPj4+ICsvLyBDb3B5cmlnaHQgKEMpIDIwMjAgTWljcm9j aGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcw0KPj4+ICsvLw0KPj4+ICsv LyBBdXRob3I6IENvZHJpbiBDaXVib3Rhcml1IDxjb2RyaW4uY2l1Ym90YXJpdUBtaWNyb2NoaXAu Y29tPg0KPj4+ICsNCj4+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPj4+ICsjaW5jbHVkZSA8 bGludXgvaW8uaD4NCj4+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPj4+ICsjaW5jbHVk ZSA8bGludXgvc3BpbmxvY2suaD4NCj4+PiArDQo+Pj4gKyNpbmNsdWRlIDxzb3VuZC9hc291bmRl Zi5oPg0KPj4+ICsjaW5jbHVkZSA8c291bmQvZG1hZW5naW5lX3BjbS5oPg0KPj4+ICsjaW5jbHVk ZSA8c291bmQvcGNtX3BhcmFtcy5oPg0KPj4+ICsjaW5jbHVkZSA8c291bmQvc29jLmg+DQo+Pj4g Kw0KPj4+ICsvKg0KPj4+ICsgKiAtLS0tIFMvUERJRiBUcmFuc21pdHRlciBDb250cm9sbGVyIFJl Z2lzdGVyIG1hcCAtLS0tDQo+Pj4gKyAqLw0KPj4+ICsjZGVmaW5lIFNQRElGVFhfQ1IJCQkweDAw CS8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCj4+PiArI2RlZmluZSBTUERJRlRYX01SCQkJMHgwNAkv KiBNb2RlIFJlZ2lzdGVyICovDQo+Pg0KPj4gVGhpcyByZWdpc3RlciBpcyByZWFkL3dyaXRlIGVp dGhlciBpbiBhdG9taWMgYW5kIG5vbi1hdG9taWMgY29udGV4dGVzIGJ1dA0KPj4gbm90IHByb3Rl Y3RlZCBldmVyeXdoZXJlIHRoZSBzYW1lIHdheS4NCj4gDQo+IEkgb25seSBuZWVkIHRoZSBUWEVO IGJpdCBmcm9tIHRoaXMgcmVnaXN0ZXIgaW4gYW4gYXRvbWljIGNvbnRleHQsIHRoaXMgDQo+IGlz IHdoeSB0aGVyZSBhcmUgYWxzbyBub24tYXRvbWljIGNvbnRleHRzLg0KPiANCj4+DQo+Pj4gKyNk ZWZpbmUgU1BESUZUWF9DRFIJCQkweDBDCS8qIENvbW1vbiBEYXRhIFJlZ2lzdGVyICovDQo+Pj4g Kw0KPj4+ICsjZGVmaW5lIFNQRElGVFhfSUVSCQkJMHgxNAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJl Z2lzdGVyICovDQo+Pj4gKyNkZWZpbmUgU1BESUZUWF9JRFIJCQkweDE4CS8qIEludGVycnVwdCBE aXNhYmxlIFJlZ2lzdGVyICovDQo+Pj4gKyNkZWZpbmUgU1BESUZUWF9JTVIJCQkweDFDCS8qIElu dGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQo+Pj4gKyNkZWZpbmUgU1BESUZUWF9JU1IJCQkweDIw CS8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCj4+PiArDQo+Pj4gKyNkZWZpbmUgU1BE SUZUWF9DSDFVRChyZWcpCSgweDUwICsgKHJlZykgKiA0KQkvKiBVc2VyIERhdGEgMSBSZWdpc3Rl ciB4ICovDQo+Pj4gKyNkZWZpbmUgU1BESUZUWF9DSDFTKHJlZykJKDB4ODAgKyAocmVnKSAqIDQp CS8qIENoYW5uZWwgU3RhdHVzIDEgUmVnaXN0ZXIgeCAqLw0KPj4+ICsNCj4+PiArI2RlZmluZSBT UERJRlRYX1ZFUlNJT04JCQkweEYwDQo+Pj4gKw0KPj4+ICsvKg0KPj4+ICsgKiAtLS0tIENvbnRy b2wgUmVnaXN0ZXIgKFdyaXRlLW9ubHkpIC0tLS0NCj4+PiArICovDQo+Pj4gKyNkZWZpbmUgU1BE SUZUWF9DUl9TV1JTVAkJQklUKDApCS8qIFNvZnR3YXJlIFJlc2V0ICovDQo+Pj4gKyNkZWZpbmUg U1BESUZUWF9DUl9GQ0xSCQkJQklUKDEpCS8qIEZJRk8gY2xlYXIgKi8NCj4+PiArDQo+Pj4gKy8q DQo+Pj4gKyAqIC0tLS0gTW9kZSBSZWdpc3RlciAoUmVhZC9Xcml0ZSkgLS0tLQ0KPj4+ICsgKi8N Cj4+PiArLyogVHJhbnNtaXQgRW5hYmxlICovDQo+Pj4gKyNkZWZpbmUgU1BESUZUWF9NUl9UWEVO X01BU0sJCUdFTk1BU0soMCwgMCkNCj4+PiArI2RlZmluZSBTUERJRlRYX01SX1RYRU5fRElTQUJM RQkJKDAgPDwgMCkNCj4+PiArI2RlZmluZSBTUERJRlRYX01SX1RYRU5fRU5BQkxFCQkoMSA8PCAw KQ0KPj4+ICsNCj4+PiArLyogTXVsdGljaGFubmVsIFRyYW5zZmVyICovDQo+Pj4gKyNkZWZpbmUg U1BESUZUWF9NUl9NVUxUSUNIX01BU0sJCUdFTkFNU0soMSwgMSkNCj4+PiArI2RlZmluZSBTUERJ RlRYX01SX01VTFRJQ0hfTU9OTwkJKDAgPDwgMSkNCj4+PiArI2RlZmluZSBTUERJRlRYX01SX01V TFRJQ0hfRFVBTAkJKDEgPDwgMSkNCj4+PiArDQo+Pj4gKy8qIERhdGEgV29yZCBFbmRpYW4gTW9k ZSAqLw0KPj4+ICsjZGVmaW5lIFNQRElGVFhfTVJfRU5ESUFOX01BU0sJCUdFTk1BU0soMiwgMikN Cj4+PiArI2RlZmluZSBTUERJRlRYX01SX0VORElBTl9MSVRUTEUJKDAgPDwgMikNCj4+PiArI2Rl ZmluZSBTUERJRlRYX01SX0VORElBTl9CSUcJCSgxIDw8IDIpDQo+Pj4gKw0KPj4+ICsvKiBEYXRh IEp1c3RpZmljYXRpb24gKi8NCj4+PiArI2RlZmluZSBTUERJRlRYX01SX0pVU1RJRllfTUFTSwkJ R0VOTUFTSygzLCAzKQ0KPj4+ICsjZGVmaW5lIFNQRElGVFhfTVJfSlVTVElGWV9MU0IJCSgwIDw8 IDMpDQo+Pj4gKyNkZWZpbmUgU1BESUZUWF9NUl9KVVNUSUZZX01TQgkJKDEgPDwgMykNCj4+PiAr DQo+Pj4gKy8qIENvbW1vbiBBdWRpbyBSZWdpc3RlciBUcmFuc2ZlciBNb2RlICovDQo+Pj4gKyNk ZWZpbmUgU1BESUZUWF9NUl9DTU9ERV9NQVNLCQkJR0VOTUFTSyg1LCA0KQ0KPj4+ICsjZGVmaW5l IFNQRElGVFhfTVJfQ01PREVfSU5ERVhfQUNDRVNTCQkoMCA8PCA0KQ0KPj4+ICsjZGVmaW5lIFNQ RElGVFhfTVJfQ01PREVfVE9HR0xFX0FDQ0VTUwkJKDEgPDwgNCkNCj4+PiArI2RlZmluZSBTUERJ RlRYX01SX0NNT0RFX0lOVEVSTFZEX0FDQ0VTUwkoMiA8PCA0KQ0KPj4+ICsNCj4+PiArLyogVmFs aWQgQml0cyBwZXIgU2FtcGxlICovDQo+Pj4gKyNkZWZpbmUgU1BESUZUWF9NUl9WQlBTX01BU0sJ CUdFTk1BU0soMTMsIDgpDQo+Pj4gKyNkZWZpbmUgU1BESUZUWF9NUl9WQlBTKGJwcykJCSgoKGJw cykgPDwgOCkgJiBTUERJRlRYX01SX1ZCUFNfTUFTSykNCj4+PiArDQo+Pj4gKy8qIENodW5rIFNp emUgKi8NCj4+PiArI2RlZmluZSBTUERJRlRYX01SX0NIVU5LX01BU0sJCUdFTk1BU0soMTksIDE2 KQ0KPj4+ICsjZGVmaW5lIFNQRElGVFhfTVJfQ0hVTksoc2l6ZSkJCSgoKHNpemUpIDw8IDE2KSAm IFNQRElGVFhfTVJfQ0hVTktfTUFTSykNCj4+PiArDQo+Pj4gKy8qIFZhbGlkaXR5IEJpdHMgZm9y IENoYW5uZWxzIDEgYW5kIDIgKi8NCj4+PiArI2RlZmluZSBTUERJRlRYX01SX1ZBTElEMQkJCUJJ VCgyNCkNCj4+PiArI2RlZmluZSBTUERJRlRYX01SX1ZBTElEMgkJCUJJVCgyNSkNCj4+PiArDQo+ Pj4gKy8qIERpc2FibGUgTnVsbCBGcmFtZSBvbiB1bmRlcnJydW4gKi8NCj4+PiArI2RlZmluZSBT UERJRlRYX01SX0RORlJfTUFTSwkJR0VOTUFTSygyNywgMjcpDQo+Pj4gKyNkZWZpbmUgU1BESUZU WF9NUl9ETkZSX0lOVkFMSUQJCSgwIDw8IDI3KQ0KPj4+ICsjZGVmaW5lIFNQRElGVFhfTVJfRE5G Ul9WQUxJRAkJKDEgPDwgMjcpDQo+Pj4gKw0KPj4+ICsvKiBCeXRlcyBwZXIgU2FtcGxlICovDQo+ Pj4gKyNkZWZpbmUgU1BESUZUWF9NUl9CUFNfTUFTSwkJR0VOTUFTSygyOSwgMjgpDQo+Pj4gKyNk ZWZpbmUgU1BESUZUWF9NUl9CUFMoYnl0ZXMpIFwNCj4+PiArCSgoKChieXRlcykgLSAxKSA8PCAy OCkgJiBTUERJRlRYX01SX0JQU19NQVNLKQ0KPj4+ICsNCj4+PiArLyoNCj4+PiArICogLS0tLSBJ bnRlcnJ1cHQgRW5hYmxlL0Rpc2FibGUvTWFzay9TdGF0dXMgUmVnaXN0ZXIgKFdyaXRlL1JlYWQt b25seSkgLS0tLQ0KPj4+ICsgKi8NCj4+PiArI2RlZmluZSBTUERJRlRYX0lSX1RYUkRZCQlCSVQo MCkNCj4+PiArI2RlZmluZSBTUERJRlRYX0lSX1RYRU1QVFkJCUJJVCgxKQ0KPj4+ICsjZGVmaW5l IFNQRElGVFhfSVJfVFhGVUxMCQlCSVQoMikNCj4+PiArI2RlZmluZSBTUERJRlRYX0lSX1RYQ0hV TksJCUJJVCgzKQ0KPj4+ICsjZGVmaW5lIFNQRElGVFhfSVJfVFhVRFIJCUJJVCg0KQ0KPj4+ICsj ZGVmaW5lIFNQRElGVFhfSVJfVFhPVlIJCUJJVCg1KQ0KPj4+ICsjZGVmaW5lIFNQRElGVFhfSVJf Q1NSRFkJCUJJVCg2KQ0KPj4+ICsjZGVmaW5lIFNQRElGVFhfSVJfVURSRFkJCUJJVCg3KQ0KPj4+ ICsjZGVmaW5lIFNQRElGVFhfSVJfVFhSRFlDSChjaCkJCUJJVCgoY2gpICsgOCkNCj4+PiArI2Rl ZmluZSBTUERJRlRYX0lSX1NFQ0UJCQlCSVQoMTApDQo+Pj4gKyNkZWZpbmUgU1BESUZUWF9JUl9U WFVEUkNIKGNoKQkJQklUKChjaCkgKyAxMSkNCj4+PiArI2RlZmluZSBTUERJRlRYX0lSX0JFTkQJ CQlCSVQoMTMpDQo+Pj4gKw0KPj4+ICtzdGF0aWMgYm9vbCBtY2hwX3NwZGlmdHhfcmVhZGFibGVf cmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykNCj4+PiArew0KPj4+ICsJ c3dpdGNoIChyZWcpIHsNCj4+PiArCWNhc2UgU1BESUZUWF9NUjoNCj4+PiArCWNhc2UgU1BESUZU WF9JTVI6DQo+Pj4gKwljYXNlIFNQRElGVFhfSVNSOg0KPj4+ICsJY2FzZSBTUERJRlRYX0NIMVVE KDApOg0KPj4+ICsJY2FzZSBTUERJRlRYX0NIMVVEKDEpOg0KPj4+ICsJY2FzZSBTUERJRlRYX0NI MVVEKDIpOg0KPj4+ICsJY2FzZSBTUERJRlRYX0NIMVVEKDMpOg0KPj4+ICsJY2FzZSBTUERJRlRY X0NIMVVEKDQpOg0KPj4+ICsJY2FzZSBTUERJRlRYX0NIMVVEKDUpOg0KPj4+ICsJY2FzZSBTUERJ RlRYX0NIMVMoMCk6DQo+Pj4gKwljYXNlIFNQRElGVFhfQ0gxUygxKToNCj4+PiArCWNhc2UgU1BE SUZUWF9DSDFTKDIpOg0KPj4+ICsJY2FzZSBTUERJRlRYX0NIMVMoMyk6DQo+Pj4gKwljYXNlIFNQ RElGVFhfQ0gxUyg0KToNCj4+PiArCWNhc2UgU1BESUZUWF9DSDFTKDUpOg0KPj4+ICsJCXJldHVy biB0cnVlOw0KPj4+ICsJZGVmYXVsdDoNCj4+PiArCQlyZXR1cm4gZmFsc2U7DQo+Pj4gKwl9DQo+ Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBib29sIG1jaHBfc3BkaWZ0eF93cml0ZWFibGVfcmVn KHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykNCj4+PiArew0KPj4+ICsJc3dp dGNoIChyZWcpIHsNCj4+PiArCWNhc2UgU1BESUZUWF9DUjoNCj4+PiArCWNhc2UgU1BESUZUWF9N UjoNCj4+PiArCWNhc2UgU1BESUZUWF9DRFI6DQo+Pj4gKwljYXNlIFNQRElGVFhfSUVSOg0KPj4+ ICsJY2FzZSBTUERJRlRYX0lEUjoNCj4+PiArCWNhc2UgU1BESUZUWF9DSDFVRCgwKToNCj4+PiAr CWNhc2UgU1BESUZUWF9DSDFVRCgxKToNCj4+PiArCWNhc2UgU1BESUZUWF9DSDFVRCgyKToNCj4+ PiArCWNhc2UgU1BESUZUWF9DSDFVRCgzKToNCj4+PiArCWNhc2UgU1BESUZUWF9DSDFVRCg0KToN Cj4+PiArCWNhc2UgU1BESUZUWF9DSDFVRCg1KToNCj4+PiArCWNhc2UgU1BESUZUWF9DSDFTKDAp Og0KPj4+ICsJY2FzZSBTUERJRlRYX0NIMVMoMSk6DQo+Pj4gKwljYXNlIFNQRElGVFhfQ0gxUygy KToNCj4+PiArCWNhc2UgU1BESUZUWF9DSDFTKDMpOg0KPj4+ICsJY2FzZSBTUERJRlRYX0NIMVMo NCk6DQo+Pj4gKwljYXNlIFNQRElGVFhfQ0gxUyg1KToNCj4+PiArCQlyZXR1cm4gdHJ1ZTsNCj4+ PiArCWRlZmF1bHQ6DQo+Pj4gKwkJcmV0dXJuIGZhbHNlOw0KPj4+ICsJfQ0KPj4+ICt9DQo+Pj4g Kw0KPj4+ICtzdGF0aWMgYm9vbCBtY2hwX3NwZGlmdHhfcHJlY2lvdXNfcmVnKHN0cnVjdCBkZXZp Y2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykNCj4+PiArew0KPj4+ICsJc3dpdGNoIChyZWcpIHsN Cj4+PiArCWNhc2UgU1BESUZUWF9DRFI6DQo+Pj4gKwljYXNlIFNQRElGVFhfSVNSOg0KPj4+ICsJ CXJldHVybiB0cnVlOw0KPj4+ICsJZGVmYXVsdDoNCj4+PiArCQlyZXR1cm4gZmFsc2U7DQo+Pj4g Kwl9DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZp ZyBtY2hwX3NwZGlmdHhfcmVnbWFwX2NvbmZpZyA9IHsNCj4+PiArCS5yZWdfYml0cyA9IDMyLA0K Pj4+ICsJLnJlZ19zdHJpZGUgPSA0LA0KPj4+ICsJLnZhbF9iaXRzID0gMzIsDQo+Pj4gKwkubWF4 X3JlZ2lzdGVyID0gU1BESUZUWF9WRVJTSU9OLA0KPj4+ICsJLnJlYWRhYmxlX3JlZyA9IG1jaHBf c3BkaWZ0eF9yZWFkYWJsZV9yZWcsDQo+Pj4gKwkud3JpdGVhYmxlX3JlZyA9IG1jaHBfc3BkaWZ0 eF93cml0ZWFibGVfcmVnLA0KPj4+ICsJLnByZWNpb3VzX3JlZyA9IG1jaHBfc3BkaWZ0eF9wcmVj aW91c19yZWcsDQo+Pj4gK307DQo+Pj4gKw0KPj4+ICsjZGVmaW5lIFNQRElGVFhfR0NMS19SQVRJ TwkxMjgNCj4+PiArDQo+Pj4gKyNkZWZpbmUgU1BESUZUWF9DU19CSVRTCQkxOTINCj4+PiArI2Rl ZmluZSBTUERJRlRYX1VEX0JJVFMJCTE5Mg0KPj4+ICsNCj4+PiArc3RydWN0IG1jaHBfc3BkaWZ0 eF9taXhlcl9jb250cm9sIHsNCj4+PiArCXVuc2lnbmVkIGNoYXIJCQkJY2hfc3RhdFtTUERJRlRY X0NTX0JJVFMgLyA4XTsNCj4+PiArCXVuc2lnbmVkIGNoYXIJCQkJdXNlcl9kYXRhW1NQRElGVFhf VURfQklUUyAvIDhdOw0KPj4+ICsJc3BpbmxvY2tfdAkJCQlsb2NrOw0KPj4+ICt9Ow0KPj4+ICsN Cj4+PiArc3RydWN0IG1jaHBfc3BkaWZ0eF9kZXYgew0KPj4+ICsJc3RydWN0IG1jaHBfc3BkaWZ0 eF9taXhlcl9jb250cm9sCWNvbnRyb2w7DQo+Pj4gKwlzdHJ1Y3Qgc25kX2RtYWVuZ2luZV9kYWlf ZG1hX2RhdGEJcGxheWJhY2s7DQo+Pj4gKwlzdHJ1Y3QgZGV2aWNlCQkJCSpkZXY7DQo+Pj4gKwlz dHJ1Y3QgcmVnbWFwCQkJCSpyZWdtYXA7DQo+Pj4gKwlzdHJ1Y3QgY2xrCQkJCSpwY2xrOw0KPj4+ ICsJc3RydWN0IGNsawkJCQkqZ2NsazsNCj4+PiArCXVuc2lnbmVkIGludAkJCQlmbXQ7DQo+Pj4g Kwljb25zdCBzdHJ1Y3QgbWNocF9pMnNfY2FwcwkJKmNhcHM7DQo+Pj4gKwlpbnQJCQkJCWdjbGtf ZW5hYmxlZDoxOw0KPj4+ICt9Ow0KPj4+ICsNCj4+PiArc3RhdGljIGlubGluZSBpbnQgbWNocF9z cGRpZnR4X2lzX3J1bm5pbmcoc3RydWN0IG1jaHBfc3BkaWZ0eF9kZXYgKmRldikNCj4+PiArew0K Pj4+ICsJdTMyIG1yOw0KPj4+ICsNCj4+PiArCXJlZ21hcF9yZWFkKGRldi0+cmVnbWFwLCBTUERJ RlRYX01SLCAmbXIpOw0KPj4+ICsJcmV0dXJuICEhKG1yICYgU1BESUZUWF9NUl9UWEVOX0VOQUJM RSk7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyB2b2lkIG1jaHBfc3BkaWZ0eF9jaGFubmVs X3N0YXR1c193cml0ZShzdHJ1Y3QgbWNocF9zcGRpZnR4X2RldiAqZGV2KQ0KPj4+ICt7DQo+Pj4g KwlzdHJ1Y3QgbWNocF9zcGRpZnR4X21peGVyX2NvbnRyb2wgKmN0cmwgPSAmZGV2LT5jb250cm9s Ow0KPj4+ICsJdTMyIHZhbDsNCj4+PiArCWludCBpOw0KPj4+ICsNCj4+PiArCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGN0cmwtPmNoX3N0YXQpIC8gNDsgaSsrKSB7DQo+Pj4gKwkJdmFsID0g KGN0cmwtPmNoX3N0YXRbKGkgKiA0KSArIDBdIDw8IDApIHwNCj4+PiArCQkgICAgICAoY3RybC0+ Y2hfc3RhdFsoaSAqIDQpICsgMV0gPDwgOCkgfA0KPj4+ICsJCSAgICAgIChjdHJsLT5jaF9zdGF0 WyhpICogNCkgKyAyXSA8PCAxNikgfA0KPj4+ICsJCSAgICAgIChjdHJsLT5jaF9zdGF0WyhpICog NCkgKyAzXSA8PCAyNCk7DQo+Pj4gKw0KPj4+ICsJCXJlZ21hcF93cml0ZShkZXYtPnJlZ21hcCwg U1BESUZUWF9DSDFTKGkpLCB2YWwpOw0KPj4+ICsJfQ0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0 aWMgdm9pZCBtY2hwX3NwZGlmdHhfdXNlcl9kYXRhX3dyaXRlKHN0cnVjdCBtY2hwX3NwZGlmdHhf ZGV2ICpkZXYpDQo+Pj4gK3sNCj4+PiArCXN0cnVjdCBtY2hwX3NwZGlmdHhfbWl4ZXJfY29udHJv bCAqY3RybCA9ICZkZXYtPmNvbnRyb2w7DQo+Pj4gKwl1MzIgdmFsOw0KPj4+ICsJaW50IGk7DQo+ Pj4gKw0KPj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3RybC0+dXNlcl9kYXRhKSAv IDQ7IGkrKykgew0KPj4+ICsJCXZhbCA9IChjdHJsLT51c2VyX2RhdGFbKGkgKiA0KSArIDBdIDw8 IDApIHwNCj4+PiArCQkgICAgICAoY3RybC0+dXNlcl9kYXRhWyhpICogNCkgKyAxXSA8PCA4KSB8 DQo+Pj4gKwkJICAgICAgKGN0cmwtPnVzZXJfZGF0YVsoaSAqIDQpICsgMl0gPDwgMTYpIHwNCj4+ PiArCQkgICAgICAoY3RybC0+dXNlcl9kYXRhWyhpICogNCkgKyAzXSA8PCAyNCk7DQo+Pj4gKw0K Pj4+ICsJCXJlZ21hcF93cml0ZShkZXYtPnJlZ21hcCwgU1BESUZUWF9DSDFVRChpKSwgdmFsKTsN Cj4+PiArCX0NCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIGlycXJldHVybl90IG1jaHBfc3Bk aWZ0eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1 Y3QgbWNocF9zcGRpZnR4X2RldiAqZGV2ID0gZGV2X2lkOw0KPj4+ICsJc3RydWN0IG1jaHBfc3Bk aWZ0eF9taXhlcl9jb250cm9sICpjdHJsID0gJmRldi0+Y29udHJvbDsNCj4+PiArCXUzMiBzciwg aW1yLCBwZW5kaW5nLCBpZHIgPSAwOw0KPj4+ICsNCj4+PiArCXJlZ21hcF9yZWFkKGRldi0+cmVn bWFwLCBTUERJRlRYX0lTUiwgJnNyKTsNCj4+PiArCXJlZ21hcF9yZWFkKGRldi0+cmVnbWFwLCBT UERJRlRYX0lNUiwgJmltcik7DQo+Pj4gKwlwZW5kaW5nID0gc3IgJiBpbXI7DQo+Pj4gKw0KPj4+ ICsJaWYgKCFwZW5kaW5nKQ0KPj4+ICsJCXJldHVybiBJUlFfTk9ORTsNCj4+PiArDQo+Pj4gKwlp ZiAocGVuZGluZyAmIFNQRElGVFhfSVJfVFhVRFIpIHsNCj4+PiArCQlkZXZfd2FybihkZXYtPmRl diwgInVuZGVyZmxvdyBkZXRlY3RlZFxuIik7DQo+Pj4gKwkJaWRyIHw9IFNQRElGVFhfSVJfVFhV RFI7DQo+Pj4gKwl9DQo+Pj4gKw0KPj4+ICsJaWYgKHBlbmRpbmcgJiBTUERJRlRYX0lSX1RYT1ZS KSB7DQo+Pj4gKwkJZGV2X3dhcm4oZGV2LT5kZXYsICJvdmVyZmxvdyBkZXRlY3RlZFxuIik7DQo+ Pj4gKwkJaWRyIHw9IFNQRElGVFhfSVJfVFhPVlI7DQo+Pj4gKwl9DQo+Pj4gKw0KPj4+ICsJaWYg KHBlbmRpbmcgJiBTUERJRlRYX0lSX1VEUkRZKSB7DQo+Pj4gKwkJc3Bpbl9sb2NrKCZjdHJsLT5s b2NrKTsNCj4+PiArCQltY2hwX3NwZGlmdHhfdXNlcl9kYXRhX3dyaXRlKGRldik7DQo+Pj4gKwkJ c3Bpbl91bmxvY2soJmN0cmwtPmxvY2spOw0KPj4+ICsJCWlkciB8PSBTUERJRlRYX0lSX1VEUkRZ Ow0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCWlmIChwZW5kaW5nICYgU1BESUZUWF9JUl9DU1JEWSkg ew0KPj4+ICsJCXNwaW5fbG9jaygmY3RybC0+bG9jayk7DQo+Pj4gKwkJbWNocF9zcGRpZnR4X2No YW5uZWxfc3RhdHVzX3dyaXRlKGRldik7DQo+Pj4gKwkJc3Bpbl91bmxvY2soJmN0cmwtPmxvY2sp Ow0KPj4+ICsJCWlkciB8PSBTUERJRlRYX0lSX0NTUkRZOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiAr CXJlZ21hcF93cml0ZShkZXYtPnJlZ21hcCwgU1BESUZUWF9JRFIsIGlkcik7DQo+Pj4gKw0KPj4+ ICsJcmV0dXJuIElSUV9IQU5ETEVEOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0aWMgaW50IG1j aHBfc3BkaWZ0eF9kYWlfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVh bSwNCj4+PiArCQkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkNCj4+PiArew0KPj4+ICsJ c3RydWN0IG1jaHBfc3BkaWZ0eF9kZXYgKmRldiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRh aSk7DQo+Pj4gKwlpbnQgZXJyOw0KPj4+ICsNCj4+PiArCWVyciA9IGNsa19wcmVwYXJlX2VuYWJs ZShkZXYtPnBjbGspOw0KPj4+ICsJaWYgKGVycikgew0KPj4+ICsJCWRldl9lcnIoZGV2LT5kZXYs DQo+Pj4gKwkJCSJmYWlsZWQgdG8gZW5hYmxlIHRoZSBwZXJpcGhlcmFsIGNsb2NrOiAlZFxuIiwg ZXJyKTsNCj4+PiArCQlyZXR1cm4gZXJyOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCS8qIFNvZnR3 YXJlIHJlc2V0IHRoZSBJUCAqLw0KPj4+ICsJcmVnbWFwX3dyaXRlKGRldi0+cmVnbWFwLCBTUERJ RlRYX0NSLA0KPj4+ICsJCSAgICAgU1BESUZUWF9DUl9TV1JTVCB8IFNQRElGVFhfQ1JfRkNMUik7 DQo+Pj4gKw0KPj4+ICsJcmV0dXJuIDA7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyB2b2lk IG1jaHBfc3BkaWZ0eF9kYWlfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJz dHJlYW0sDQo+Pj4gKwkJCQkgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkNCj4+PiArew0K Pj4+ICsJc3RydWN0IG1jaHBfc3BkaWZ0eF9kZXYgKmRldiA9IHNuZF9zb2NfZGFpX2dldF9kcnZk YXRhKGRhaSk7DQo+Pj4gKw0KPj4+ICsJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovDQo+Pj4gKwly ZWdtYXBfd3JpdGUoZGV2LT5yZWdtYXAsIFNQRElGVFhfSURSLCAweGZmZmZmZmZmKTsNCj4+PiAr DQo+Pj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGV2LT5wY2xrKTsNCj4+PiArfQ0KPj4+ICsN Cj4+PiArc3RhdGljIGludCBtY2hwX3NwZGlmdHhfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJz dHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwNCj4+PiArCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAq ZGFpKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1Y3QgbWNocF9zcGRpZnR4X2RldiAqZGV2ID0gc25kX3Nv Y19kYWlfZ2V0X2RydmRhdGEoZGFpKTsNCj4+PiArCXN0cnVjdCBtY2hwX3NwZGlmdHhfbWl4ZXJf Y29udHJvbCAqY3RybCA9ICZkZXYtPmNvbnRyb2w7DQo+Pj4gKwl1MzIgbXI7DQo+Pj4gKwlpbnQg cnVubmluZzsNCj4+PiArCWludCByZXQ7DQo+Pj4gKw0KPj4+ICsJLyogZG8gbm90IHN0YXJ0L3N0 b3Agd2hpbGUgY2hhbm5lbCBzdGF0dXMgb3IgdXNlciBkYXRhIGlzIHVwZGF0ZWQgKi8NCj4+PiAr CXNwaW5fbG9jaygmY3RybC0+bG9jayk7DQo+Pj4gKwlyZWdtYXBfcmVhZChkZXYtPnJlZ21hcCwg U1BESUZUWF9NUiwgJm1yKTsNCj4+DQo+PiBIZXJlLCBhdG9taWMsIGZvciBpbnN0YW5jZS4NCj4g DQo+IFRoaXMgaXMgd2hlcmUgSSBjaGVjayBhbmQgY2hhbmdlIGZvciBUWEVOLiBUaGUgSVAgbXVz dCBub3QgYmUgc3RhcnRlZCANCj4gd2hpbGUgdGhlIHVzZXJzcGFjZSB1cGRhdGVzIHRoZSBTUERJ RlRYX0NIMVVEeCBvciBTUERJRlRYX0NIMVN4IHJlZ2lzdGVycy4NCj4gDQo+Pg0KPj4+ICsJcnVu bmluZyA9ICEhKG1yICYgU1BESUZUWF9NUl9UWEVOX0VOQUJMRSk7DQo+Pj4gKw0KPj4+ICsJc3dp dGNoIChjbWQpIHsNCj4+PiArCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6DQo+Pj4gKwlj YXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToNCj4+PiArCWNhc2UgU05EUlZfUENNX1RSSUdH RVJfUEFVU0VfUkVMRUFTRToNCj4+PiArCQlpZiAoIXJ1bm5pbmcpIHsNCj4+PiArCQkJbXIgJj0g flNQRElGVFhfTVJfVFhFTl9NQVNLOw0KPj4+ICsJCQltciB8PSBTUERJRlRYX01SX1RYRU5fRU5B QkxFOw0KPj4+ICsJCX0NCj4+PiArCQlicmVhazsNCj4+PiArCWNhc2UgU05EUlZfUENNX1RSSUdH RVJfU1RPUDoNCj4+PiArCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoNCj4+PiArCWNh c2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoNCj4+PiArCQlpZiAocnVubmluZykgew0K Pj4+ICsJCQltciAmPSB+U1BESUZUWF9NUl9UWEVOX01BU0s7DQo+Pj4gKwkJCW1yIHw9IFNQRElG VFhfTVJfVFhFTl9ESVNBQkxFOw0KPj4+ICsJCX0NCj4+PiArCQlicmVhazsNCj4+PiArCWRlZmF1 bHQ6DQo+Pj4gKwkJc3Bpbl91bmxvY2soJmN0cmwtPmxvY2spOw0KPj4+ICsJCXJldHVybiAtRUlO VkFMOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCXJldCA9IHJlZ21hcF93cml0ZShkZXYtPnJlZ21h cCwgU1BESUZUWF9NUiwgbXIpOw0KPj4+ICsJc3Bpbl91bmxvY2soJmN0cmwtPmxvY2spOw0KPj4+ ICsJaWYgKHJldCkgew0KPj4+ICsJCWRldl9lcnIoZGV2LT5kZXYsICJ1bmFibGUgdG8gZGlzYWJs ZSBUWDogJWRcbiIsIHJldCk7DQo+Pj4gKwkJcmV0dXJuIHJldDsNCj4+PiArCX0NCj4+PiArDQo+ Pj4gKwlyZXR1cm4gMDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIGludCBtY2hwX3NwZGlm dHhfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLA0KPj4+ICsJ CQkJICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywNCj4+PiArCQkJCSAgc3RydWN0 IHNuZF9zb2NfZGFpICpkYWkpDQo+Pj4gK3sNCj4+PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ Pj4gKwlzdHJ1Y3QgbWNocF9zcGRpZnR4X2RldiAqZGV2ID0gc25kX3NvY19kYWlfZ2V0X2RydmRh dGEoZGFpKTsNCj4+PiArCXN0cnVjdCBtY2hwX3NwZGlmdHhfbWl4ZXJfY29udHJvbCAqY3RybCA9 ICZkZXYtPmNvbnRyb2w7DQo+Pj4gKwl1MzIgbXI7DQo+Pj4gKwl1bnNpZ25lZCBpbnQgYnBzID0g cGFyYW1zX3BoeXNpY2FsX3dpZHRoKHBhcmFtcykgLyA4Ow0KPj4+ICsJaW50IHJldDsNCj4+PiAr DQo+Pj4gKwlkZXZfZGJnKGRldi0+ZGV2LCAiJXMoKSByYXRlPSV1IGZvcm1hdD0lI3ggd2lkdGg9 JXUgY2hhbm5lbHM9JXVcbiIsDQo+Pj4gKwkJX19mdW5jX18sIHBhcmFtc19yYXRlKHBhcmFtcyks IHBhcmFtc19mb3JtYXQocGFyYW1zKSwNCj4+PiArCQlwYXJhbXNfd2lkdGgocGFyYW1zKSwgcGFy YW1zX2NoYW5uZWxzKHBhcmFtcykpOw0KPj4+ICsNCj4+PiArCWlmIChzdWJzdHJlYW0tPnN0cmVh bSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpIHsNCj4+PiArCQlkZXZfZXJyKGRldi0+ZGV2 LCAiQ2FwdHVyZSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsNCj4+PiArCQlyZXR1cm4gLUVJTlZBTDsN Cj4+PiArCX0NCj4+PiArDQo+Pj4gKwlyZWdtYXBfcmVhZChkZXYtPnJlZ21hcCwgU1BESUZUWF9N UiwgJm1yKTsNCj4+DQo+PiBIZXJlIG5vbi1hdG9taWMuDQo+IA0KPiBUWEVOIGlzIG5vdCB0b3V0 Y2hlZCBoZXJlIGFuZCBod19wYXJhbXMoKSBhbmQgdHJpZ2dlcigpIGNhbGxiYWNrcyBjYW4ndCAN Cj4gYmUgY2FsbGVkIGF0IHRoZSBzYW1lIHRpbWUuIA0KDQpDYW4gbWNocF9zcGRpZnR4X2h3X3Bh cmFtcygpIGJlIHN1c3BlbmRlZCByaWdodCBhZnRlciB0aGlzIHJlZ21hcF9yZWFkKCkNCnRoZW4g bWNocF9zcGRpZnR4X3RyaWdnZXIoKSB0byBiZSBzY2hlZHVsZWQsIHRvIHNldCB0aGUgZW5hYmxl IGJpdCwgdGhlbg0KbWNocF9zcGRpZnR4X2h3X3BhcmFtcygpIHRvIGJlIHJlc2NoZWR1bGVkIGFu ZCBhZnRlciB0aGlzIHRoZSBlbmFibGUgYml0IHRvDQpiZSBhY3R1YWxseSBzZXQgaW4gdGhlIHJl Z2lzdGVycyBidXQgbWNocF9zcGRpZnR4X2h3X3BhcmFtcygpIHRvIHdvcmsgd2l0aA0KdGhlIG9s ZCB2YWx1ZT8gV291bGQgaXQgYmUgYW4gaXNzdWUgaWYgdGhpcyBjb3VsZCBoYXBwZW4/DQoNCj4g VGhlIGNvbmN1cmVuY3kgY2FuIGJlIG9ubHkgd2l0aCB0aGUgY29udHJvbHMgDQo+IGZ1bmN0aW9u cywgd2hvIGRvbid0IHRvdWNoIHRoZSBTUERJRlRYX01SIHJlZ2lzdGVyIGF0IGFsbC4NCj4gDQo+ Pg0KPj4+ICsNCj4+PiArCWlmIChtciAmIFNQRElGVFhfTVJfVFhFTl9FTkFCTEUpIHsNCj4+PiAr CQlkZXZfZXJyKGRldi0+ZGV2LCAiUENNIGFscmVhZHkgcnVubmluZ1xuIik7DQo+Pj4gKwkJcmV0 dXJuIC1FQlVTWTsNCj4+PiArCX0NCj4+PiArDQo+Pj4gKwkvKiBEZWZhdWx0czogVG9nZ2xlIG1v ZGUsIGp1c3RpZnkgdG8gTFNCLCBjaHVua3NpemUgMSAqLw0KPj4+ICsJbXIgPSBTUERJRlRYX01S X0NNT0RFX1RPR0dMRV9BQ0NFU1MgfCBTUERJRlRYX01SX0pVU1RJRllfTFNCOw0KPj4+ICsJZGV2 LT5wbGF5YmFjay5tYXhidXJzdCA9IDE7DQo+Pj4gKwlzd2l0Y2ggKHBhcmFtc19jaGFubmVscyhw YXJhbXMpKSB7DQo+Pj4gKwljYXNlIDE6DQo+Pj4gKwkJbXIgfD0gU1BESUZUWF9NUl9NVUxUSUNI X01PTk87DQo+Pj4gKwkJYnJlYWs7DQo+Pj4gKwljYXNlIDI6DQo+Pj4gKwkJbXIgfD0gU1BESUZU WF9NUl9NVUxUSUNIX0RVQUw7DQo+Pj4gKwkJaWYgKGJwcyA+IDIpDQo+Pj4gKwkJCWRldi0+cGxh eWJhY2subWF4YnVyc3QgPSAyOw0KPj4+ICsJCWJyZWFrOw0KPj4+ICsJZGVmYXVsdDoNCj4+PiAr CQlkZXZfZXJyKGRldi0+ZGV2LCAidW5zdXBwb3J0ZWQgbnVtYmVyIG9mIGNoYW5uZWxzOiAlZFxu IiwNCj4+PiArCQkJcGFyYW1zX2NoYW5uZWxzKHBhcmFtcykpOw0KPj4+ICsJCXJldHVybiAtRUlO VkFMOw0KPj4+ICsJfQ0KPj4+ICsJbXIgfD0gU1BESUZUWF9NUl9DSFVOSyhkZXYtPnBsYXliYWNr Lm1heGJ1cnN0KTsNCj4+PiArDQo+Pj4gKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkg ew0KPj4+ICsJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1M4Og0KPj4+ICsJCW1yIHw9IFNQRElGVFhf TVJfVkJQUyg4KTsNCj4+PiArCQlicmVhazsNCj4+PiArCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9T MTZfQkU6DQo+Pj4gKwkJbXIgfD0gU1BESUZUWF9NUl9FTkRJQU5fQklHOw0KPj4+ICsJCWZhbGx0 aHJvdWdoOw0KPj4+ICsJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToNCj4+PiArCQltciB8 PSBTUERJRlRYX01SX1ZCUFMoMTYpOw0KPj4+ICsJCWJyZWFrOw0KPj4+ICsJY2FzZSBTTkRSVl9Q Q01fRk9STUFUX1MxOF8zQkU6DQo+Pj4gKwkJbXIgfD0gU1BESUZUWF9NUl9FTkRJQU5fQklHOw0K Pj4+ICsJCWZhbGx0aHJvdWdoOw0KPj4+ICsJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxOF8zTEU6 DQo+Pj4gKwkJbXIgfD0gU1BESUZUWF9NUl9WQlBTKDE4KTsNCj4+PiArCQlicmVhazsNCj4+PiAr CWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0JFOg0KPj4+ICsJCW1yIHw9IFNQRElGVFhfTVJf RU5ESUFOX0JJRzsNCj4+PiArCQlmYWxsdGhyb3VnaDsNCj4+PiArCWNhc2UgU05EUlZfUENNX0ZP Uk1BVF9TMjBfM0xFOg0KPj4+ICsJCW1yIHw9IFNQRElGVFhfTVJfVkJQUygyMCk7DQo+Pj4gKwkJ YnJlYWs7DQo+Pj4gKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0XzNCRToNCj4+PiArCQltciB8 PSBTUERJRlRYX01SX0VORElBTl9CSUc7DQo+Pj4gKwkJZmFsbHRocm91Z2g7DQo+Pj4gKwljYXNl IFNORFJWX1BDTV9GT1JNQVRfUzI0XzNMRToNCj4+PiArCQltciB8PSBTUERJRlRYX01SX1ZCUFMo MjQpOw0KPj4+ICsJCWJyZWFrOw0KPj4+ICsJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9CRToN Cj4+PiArCQltciB8PSBTUERJRlRYX01SX0VORElBTl9CSUc7DQo+Pj4gKwkJZmFsbHRocm91Z2g7 DQo+Pj4gKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOg0KPj4+ICsJCW1yIHw9IFNQRElG VFhfTVJfVkJQUygyNCk7DQo+Pj4gKwkJYnJlYWs7DQo+Pj4gKwljYXNlIFNORFJWX1BDTV9GT1JN QVRfUzMyX0JFOg0KPj4+ICsJCW1yIHw9IFNQRElGVFhfTVJfRU5ESUFOX0JJRzsNCj4+PiArCQlm YWxsdGhyb3VnaDsNCj4+PiArCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6DQo+Pj4gKwkJ bXIgfD0gU1BESUZUWF9NUl9WQlBTKDMyKTsNCj4+PiArCQlicmVhazsNCj4+PiArCWRlZmF1bHQ6 DQo+Pj4gKwkJZGV2X2VycihkZXYtPmRldiwgInVuc3VwcG9ydGVkIFBDTSBmb3JtYXQ6ICVkXG4i LA0KPj4+ICsJCQlwYXJhbXNfZm9ybWF0KHBhcmFtcykpOw0KPj4+ICsJCXJldHVybiAtRUlOVkFM Ow0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCW1yIHw9IFNQRElGVFhfTVJfQlBTKGJwcyk7DQo+Pj4g Kw0KPj4+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmN0cmwtPmxvY2ssIGZsYWdzKTsNCj4+PiArCWN0 cmwtPmNoX3N0YXRbM10gJj0gfklFQzk1OF9BRVMzX0NPTl9GUzsNCj4+PiArCXN3aXRjaCAocGFy YW1zX3JhdGUocGFyYW1zKSkgew0KPj4+ICsJY2FzZSAyMjA1MDoNCj4+PiArCQljdHJsLT5jaF9z dGF0WzNdIHw9IElFQzk1OF9BRVMzX0NPTl9GU18yMjA1MDsNCj4+PiArCQlicmVhazsNCj4+PiAr CWNhc2UgMjQwMDA6DQo+Pj4gKwkJY3RybC0+Y2hfc3RhdFszXSB8PSBJRUM5NThfQUVTM19DT05f RlNfMjQwMDA7DQo+Pj4gKwkJYnJlYWs7DQo+Pj4gKwljYXNlIDMyMDAwOg0KPj4+ICsJCWN0cmwt PmNoX3N0YXRbM10gfD0gSUVDOTU4X0FFUzNfQ09OX0ZTXzMyMDAwOw0KPj4+ICsJCWJyZWFrOw0K Pj4+ICsJY2FzZSA0NDEwMDoNCj4+PiArCQljdHJsLT5jaF9zdGF0WzNdIHw9IElFQzk1OF9BRVMz X0NPTl9GU180NDEwMDsNCj4+PiArCQlicmVhazsNCj4+PiArCWNhc2UgNDgwMDA6DQo+Pj4gKwkJ Y3RybC0+Y2hfc3RhdFszXSB8PSBJRUM5NThfQUVTM19DT05fRlNfNDgwMDA7DQo+Pj4gKwkJYnJl YWs7DQo+Pj4gKwljYXNlIDg4MjAwOg0KPj4+ICsJCWN0cmwtPmNoX3N0YXRbM10gfD0gSUVDOTU4 X0FFUzNfQ09OX0ZTXzg4MjAwOw0KPj4+ICsJCWJyZWFrOw0KPj4+ICsJY2FzZSA5NjAwMDoNCj4+ PiArCQljdHJsLT5jaF9zdGF0WzNdIHw9IElFQzk1OF9BRVMzX0NPTl9GU185NjAwMDsNCj4+PiAr CQlicmVhazsNCj4+PiArCWNhc2UgMTc2NDAwOg0KPj4+ICsJCWN0cmwtPmNoX3N0YXRbM10gfD0g SUVDOTU4X0FFUzNfQ09OX0ZTXzE3NjQwMDsNCj4+PiArCQlicmVhazsNCj4+PiArCWNhc2UgMTky MDAwOg0KPj4+ICsJCWN0cmwtPmNoX3N0YXRbM10gfD0gSUVDOTU4X0FFUzNfQ09OX0ZTXzE5MjAw MDsNCj4+PiArCQlicmVhazsNCj4+PiArCWNhc2UgODAwMDoNCj4+PiArCWNhc2UgMTEwMjU6DQo+ Pj4gKwljYXNlIDE2MDAwOg0KPj4+ICsJY2FzZSA2NDAwMDoNCj4+PiArCQljdHJsLT5jaF9zdGF0 WzNdIHw9IElFQzk1OF9BRVMzX0NPTl9GU19OT1RJRDsNCj4+PiArCQlicmVhazsNCj4+PiArCWRl ZmF1bHQ6DQo+Pj4gKwkJZGV2X2VycihkZXYtPmRldiwgInVuc3VwcG9ydGVkIHNhbXBsZSBmcmVx dWVuY3k6ICV1XG4iLA0KPj4+ICsJCQlwYXJhbXNfcmF0ZShwYXJhbXMpKTsNCj4+PiArCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZjdHJsLT5sb2NrLCBmbGFncyk7DQo+Pj4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+Pj4gKwl9DQo+Pj4gKwltY2hwX3NwZGlmdHhfY2hhbm5lbF9zdGF0dXNfd3JpdGUo ZGV2KTsNCj4+PiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0cmwtPmxvY2ssIGZsYWdzKTsN Cj4+PiArCW1yIHw9IFNQRElGVFhfTVJfVkFMSUQxIHwgU1BESUZUWF9NUl9WQUxJRDI7DQo+Pj4g Kw0KPj4+ICsJaWYgKGRldi0+Z2Nsa19lbmFibGVkKSB7DQo+Pj4gKwkJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGRldi0+Z2Nsayk7DQo+Pj4gKwkJZGV2LT5nY2xrX2VuYWJsZWQgPSAwOw0KPj4+ICsJ fQ0KPj4+ICsJcmV0ID0gY2xrX3NldF9yYXRlKGRldi0+Z2NsaywgcGFyYW1zX3JhdGUocGFyYW1z KSAqDQo+Pj4gKwkJCQkgICAgICBTUERJRlRYX0dDTEtfUkFUSU8pOw0KPj4+ICsJaWYgKHJldCkg ew0KPj4+ICsJCWRldl9lcnIoZGV2LT5kZXYsDQo+Pj4gKwkJCSJ1bmFibGUgdG8gY2hhbmdlIGdj bGsgcmF0ZSB0bzogcmF0ZSAldSAqIHJhdGlvICV1XG4iLA0KPj4+ICsJCQlwYXJhbXNfcmF0ZShw YXJhbXMpLCBTUERJRlRYX0dDTEtfUkFUSU8pOw0KPj4+ICsJCXJldHVybiByZXQ7DQo+Pj4gKwl9 DQo+Pj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZGV2LT5nY2xrKTsNCj4+PiArCWlmIChy ZXQpIHsNCj4+PiArCQlkZXZfZXJyKGRldi0+ZGV2LCAidW5hYmxlIHRvIGVuYWJsZSBnY2xrOiAl ZFxuIiwgcmV0KTsNCj4+PiArCQlyZXR1cm4gcmV0Ow0KPj4+ICsJfQ0KPj4+ICsJZGV2LT5nY2xr X2VuYWJsZWQgPSAxOw0KPj4+ICsJZGV2X2RiZyhkZXYtPmRldiwgIiVzKCk6IEdDTEsgc2V0IHRv ICVkXG4iLCBfX2Z1bmNfXywNCj4+PiArCQlwYXJhbXNfcmF0ZShwYXJhbXMpICogU1BESUZUWF9H Q0xLX1JBVElPKTsNCj4+PiArDQo+Pj4gKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLw0KPj4+ICsJ cmVnbWFwX3dyaXRlKGRldi0+cmVnbWFwLCBTUERJRlRYX0lFUiwNCj4+PiArCQkgICAgIFNQRElG VFhfSVJfVFhVRFIgfCBTUERJRlRYX0lSX1RYT1ZSKTsNCj4+PiArDQo+Pj4gKwlyZWdtYXBfd3Jp dGUoZGV2LT5yZWdtYXAsIFNQRElGVFhfTVIsIG1yKTsNCj4+DQo+PiBTYW1lIGhlcmUuDQo+IA0K PiBJIGV4cGxhaW5lZCBhYm92ZS4gRXZlbiBpZiBNUiByZWdpc3RlciBpcyBjaGFuZ2VkIGhlcmUs IHRoZSBUWEVOIGJpdCBpcyANCj4gbm90IGNoYW5nZWQgYW5kIHRoZSBwcmV2aW91cyB2YWx1ZSBp cyBrZXB0Lg0KPiANCj4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBsb2NrIGlzIHRvIGFzc3VyZSB0aGF0 IHRoZSBJUCB3b24ndCBjaGFuZ2UgaXRzIHN0YXRlIA0KPiAoVFhFTiBjaGFuZ2VkKSB3aGlsZSBT UERJRlRYX0NIMVVEeCBvciBTUERJRlRYX0NIMVN4IHJlZ2lzdGVycyBhcmUgDQo+IHVwZGF0ZWQu IFRoZSBsb2NrIGlzIG5vdCB0byBwcm90ZWN0IGFsbCB0aGUgdmFsdWVzIGZyb20gdGhlIE1SIHJl Z2lzdGVyLiANCj4gSWYgeW91IGZvdW5kIGEgY2FzZSBpbiB3aGljaCB0aGlzIGlzIG5vdCBhY2hp ZXZlZCwgcGxlYXNlIGxldCBtZSBrbm93Lg0KPiANCj4gVGhhbmsgeW91IGZvciB5b3VyIHJldmll dyENCj4gDQo+IEJlc3QgcmVnYXJkcywNCj4gQ29kcmluDQo+IA0KPj4NCj4+PiArDQo+Pj4gKwly ZXR1cm4gMDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIGludCBtY2hwX3NwZGlmdHhfaHdf ZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwNCj4+PiArCQkJCXN0cnVj dCBzbmRfc29jX2RhaSAqZGFpKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1Y3QgbWNocF9zcGRpZnR4X2Rl diAqZGV2ID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsNCj4+PiArDQo+Pj4gKwlyZWdt YXBfd3JpdGUoZGV2LT5yZWdtYXAsIFNQRElGVFhfSURSLA0KPj4+ICsJCSAgICAgU1BESUZUWF9J Ul9UWFVEUiB8IFNQRElGVFhfSVJfVFhPVlIpOw0KPj4+ICsJaWYgKGRldi0+Z2Nsa19lbmFibGVk KSB7DQo+Pj4gKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRldi0+Z2Nsayk7DQo+Pj4gKwkJZGV2 LT5nY2xrX2VuYWJsZWQgPSAwOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCXJldHVybiByZWdtYXBf d3JpdGUoZGV2LT5yZWdtYXAsIFNQRElGVFhfQ1IsDQo+Pj4gKwkJCSAgICBTUERJRlRYX0NSX1NX UlNUIHwgU1BESUZUWF9DUl9GQ0xSKTsNCj4+PiArfQ0KPj4+ICsNCj4+PiArDQo+Pj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG1jaHBfc3BkaWZ0eF9kYWlfb3BzID0gew0K Pj4+ICsJLnN0YXJ0dXAJPSBtY2hwX3NwZGlmdHhfZGFpX3N0YXJ0dXAsDQo+Pj4gKwkuc2h1dGRv d24JPSBtY2hwX3NwZGlmdHhfZGFpX3NodXRkb3duLA0KPj4+ICsJLnRyaWdnZXIJPSBtY2hwX3Nw ZGlmdHhfdHJpZ2dlciwNCj4+PiArCS5od19wYXJhbXMJPSBtY2hwX3NwZGlmdHhfaHdfcGFyYW1z LA0KPj4+ICsJLmh3X2ZyZWUJPSBtY2hwX3NwZGlmdHhfaHdfZnJlZSwNCj4+PiArfTsNCj4+PiAr DQo+Pj4gKyNkZWZpbmUgTUNIUF9TUERJRlRYX1JBVEVTCVNORFJWX1BDTV9SQVRFXzgwMDBfMTky MDAwDQo+Pj4gKw0KPj4+ICsjZGVmaW5lIE1DSFBfU1BESUZUWF9GT1JNQVRTCShTTkRSVl9QQ01f Rk1UQklUX1M4IHwJCVwNCj4+PiArCQkJCSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CVwNCj4+ PiArCQkJCSBTTkRSVl9QQ01fRk1UQklUX1UxNl9CRSB8CVwNCj4+PiArCQkJCSBTTkRSVl9QQ01f Rk1UQklUX1MxOF8zTEUgfAlcDQo+Pj4gKwkJCQkgU05EUlZfUENNX0ZNVEJJVF9TMThfM0JFIHwJ XA0KPj4+ICsJCQkJIFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8CVwNCj4+PiArCQkJCSBTTkRS Vl9QQ01fRk1UQklUX1MyMF8zQkUgfAlcDQo+Pj4gKwkJCQkgU05EUlZfUENNX0ZNVEJJVF9TMjRf M0xFIHwJXA0KPj4+ICsJCQkJIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNCRSB8CVwNCj4+PiArCQkJ CSBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8CVwNCj4+PiArCQkJCSBTTkRSVl9QQ01fRk1UQklU X1MyNF9CRSB8CVwNCj4+PiArCQkJCSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8CVwNCj4+PiAr CQkJCSBTTkRSVl9QQ01fRk1UQklUX1MzMl9CRQlcDQo+Pj4gKwkJCQkgKQ0KPj4+ICsNCj4+PiAr c3RhdGljIGludCBtY2hwX3NwZGlmdHhfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJv bCwNCj4+PiArCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQ0KPj4+ICt7 DQo+Pj4gKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSUVDOTU4Ow0KPj4+ICsJ dWluZm8tPmNvdW50ID0gMTsNCj4+PiArDQo+Pj4gKwlyZXR1cm4gMDsNCj4+PiArfQ0KPj4+ICsN Cj4+PiArc3RhdGljIGludCBtY2hwX3NwZGlmdHhfY3NfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wg Kmtjb250cm9sLA0KPj4+ICsJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdXZh bHVlKQ0KPj4+ICt7DQo+Pj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPj4+ICsJc3RydWN0IHNu ZF9zb2NfZGFpICpkYWkgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7DQo+Pj4gKwlzdHJ1 Y3QgbWNocF9zcGRpZnR4X2RldiAqZGV2ID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsN Cj4+PiArCXN0cnVjdCBtY2hwX3NwZGlmdHhfbWl4ZXJfY29udHJvbCAqY3RybCA9ICZkZXYtPmNv bnRyb2w7DQo+Pj4gKw0KPj4+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmN0cmwtPmxvY2ssIGZsYWdz KTsNCj4+PiArCW1lbWNweSh1dmFsdWUtPnZhbHVlLmllYzk1OC5zdGF0dXMsIGN0cmwtPmNoX3N0 YXQsDQo+Pj4gKwkgICAgICAgc2l6ZW9mKGN0cmwtPmNoX3N0YXQpKTsNCj4+PiArCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmN0cmwtPmxvY2ssIGZsYWdzKTsNCj4+PiArDQo+Pj4gKwlyZXR1cm4g MDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIGludCBtY2hwX3NwZGlmdHhfY3NfcHV0KHN0 cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLA0KPj4+ICsJCQkgICAgICAgc3RydWN0IHNuZF9j dGxfZWxlbV92YWx1ZSAqdXZhbHVlKQ0KPj4+ICt7DQo+Pj4gKwl1bnNpZ25lZCBsb25nIGZsYWdz Ow0KPj4+ICsJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29u dHJvbCk7DQo+Pj4gKwlzdHJ1Y3QgbWNocF9zcGRpZnR4X2RldiAqZGV2ID0gc25kX3NvY19kYWlf Z2V0X2RydmRhdGEoZGFpKTsNCj4+PiArCXN0cnVjdCBtY2hwX3NwZGlmdHhfbWl4ZXJfY29udHJv bCAqY3RybCA9ICZkZXYtPmNvbnRyb2w7DQo+Pj4gKwlpbnQgY2hhbmdlZCA9IDA7DQo+Pj4gKwlp bnQgaTsNCj4+PiArDQo+Pj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3RybC0+bG9jaywgZmxhZ3Mp Ow0KPj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3RybC0+Y2hfc3RhdCk7IGkrKykg ew0KPj4+ICsJCWlmIChjdHJsLT5jaF9zdGF0W2ldICE9IHV2YWx1ZS0+dmFsdWUuaWVjOTU4LnN0 YXR1c1tpXSkNCj4+PiArCQkJY2hhbmdlZCA9IDE7DQo+Pj4gKwkJY3RybC0+Y2hfc3RhdFtpXSA9 IHV2YWx1ZS0+dmFsdWUuaWVjOTU4LnN0YXR1c1tpXTsNCj4+PiArCX0NCj4+PiArDQo+Pj4gKwlp ZiAoY2hhbmdlZCkgew0KPj4+ICsJCS8qIGRvbid0IGVuYWJsZSBJUCB3aGlsZSB3ZSBjb3B5IHRo ZSBjaGFubmVsIHN0YXR1cyAqLw0KPj4+ICsJCWlmIChtY2hwX3NwZGlmdHhfaXNfcnVubmluZyhk ZXYpKSB7DQo+Pj4gKwkJCS8qDQo+Pj4gKwkJCSAqIGlmIFNQRElGIGlzIHJ1bm5pbmcsIHdhaXQg Zm9yIGludGVycnVwdCB0byB3cml0ZQ0KPj4+ICsJCQkgKiBjaGFubmVsIHN0YXR1cw0KPj4+ICsJ CQkgKi8NCj4+PiArCQkJcmVnbWFwX3dyaXRlKGRldi0+cmVnbWFwLCBTUERJRlRYX0lFUiwNCj4+ PiArCQkJCSAgICAgU1BESUZUWF9JUl9DU1JEWSk7DQo+Pj4gKwkJfSBlbHNlIHsNCj4+PiArCQkJ bWNocF9zcGRpZnR4X2NoYW5uZWxfc3RhdHVzX3dyaXRlKGRldik7DQo+Pj4gKwkJfQ0KPj4+ICsJ fQ0KPj4+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RybC0+bG9jaywgZmxhZ3MpOw0KPj4+ ICsNCj4+PiArCXJldHVybiBjaGFuZ2VkOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0aWMgaW50 IG1jaHBfc3BkaWZ0eF9jc19tYXNrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLA0KPj4+ ICsJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdXZhbHVlKQ0KPj4+ICt7DQo+Pj4gKwlt ZW1zZXQodXZhbHVlLT52YWx1ZS5pZWM5NTguc3RhdHVzLCAweGZmLA0KPj4+ICsJICAgICAgIHNp emVvZih1dmFsdWUtPnZhbHVlLmllYzk1OC5zdGF0dXMpKTsNCj4+PiArDQo+Pj4gKwlyZXR1cm4g MDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIGludCBtY2hwX3NwZGlmdHhfc3ViY29kZV9n ZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsDQo+Pj4gKwkJCQkgICAgc3RydWN0IHNu ZF9jdGxfZWxlbV92YWx1ZSAqdXZhbHVlKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1Y3Qgc25kX3NvY19k YWkgKmRhaSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsNCj4+PiArCXN0cnVjdCBtY2hw X3NwZGlmdHhfZGV2ICpkZXYgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOw0KPj4+ICsJ c3RydWN0IG1jaHBfc3BkaWZ0eF9taXhlcl9jb250cm9sICpjdHJsID0gJmRldi0+Y29udHJvbDsN Cj4+PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+Pj4gKw0KPj4+ICsJc3Bpbl9sb2NrX2lycXNh dmUoJmN0cmwtPmxvY2ssIGZsYWdzKTsNCj4+PiArCW1lbWNweSh1dmFsdWUtPnZhbHVlLmllYzk1 OC5zdWJjb2RlLCBjdHJsLT51c2VyX2RhdGEsDQo+Pj4gKwkgICAgICAgc2l6ZW9mKGN0cmwtPnVz ZXJfZGF0YSkpOw0KPj4+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RybC0+bG9jaywgZmxh Z3MpOw0KPj4+ICsNCj4+PiArCXJldHVybiAwOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0aWMg aW50IG1jaHBfc3BkaWZ0eF9zdWJjb2RlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJv bCwNCj4+PiArCQkJCSAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1dmFsdWUpDQo+Pj4g K3sNCj4+PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+Pj4gKwlzdHJ1Y3Qgc25kX3NvY19kYWkg KmRhaSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsNCj4+PiArCXN0cnVjdCBtY2hwX3Nw ZGlmdHhfZGV2ICpkZXYgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOw0KPj4+ICsJc3Ry dWN0IG1jaHBfc3BkaWZ0eF9taXhlcl9jb250cm9sICpjdHJsID0gJmRldi0+Y29udHJvbDsNCj4+ PiArCWludCBjaGFuZ2VkID0gMDsNCj4+PiArCWludCBpOw0KPj4+ICsNCj4+PiArCXNwaW5fbG9j a19pcnFzYXZlKCZjdHJsLT5sb2NrLCBmbGFncyk7DQo+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShjdHJsLT51c2VyX2RhdGEpOyBpKyspIHsNCj4+PiArCQlpZiAoY3RybC0+dXNlcl9k YXRhW2ldICE9IHV2YWx1ZS0+dmFsdWUuaWVjOTU4LnN1YmNvZGVbaV0pDQo+Pj4gKwkJCWNoYW5n ZWQgPSAxOw0KPj4+ICsNCj4+PiArCQljdHJsLT51c2VyX2RhdGFbaV0gPSB1dmFsdWUtPnZhbHVl LmllYzk1OC5zdWJjb2RlW2ldOw0KPj4+ICsJfQ0KPj4+ICsJaWYgKGNoYW5nZWQpIHsNCj4+PiAr CQlpZiAobWNocF9zcGRpZnR4X2lzX3J1bm5pbmcoZGV2KSkgew0KPj4+ICsJCQkvKg0KPj4+ICsJ CQkgKiBpZiBTUERJRiBpcyBydW5uaW5nLCB3YWl0IGZvciBpbnRlcnJ1cHQgdG8gd3JpdGUNCj4+ PiArCQkJICogdXNlciBkYXRhDQo+Pj4gKwkJCSAqLw0KPj4+ICsJCQlyZWdtYXBfd3JpdGUoZGV2 LT5yZWdtYXAsIFNQRElGVFhfSUVSLA0KPj4+ICsJCQkJICAgICBTUERJRlRYX0lSX1VEUkRZKTsN Cj4+PiArCQl9IGVsc2Ugew0KPj4+ICsJCQltY2hwX3NwZGlmdHhfdXNlcl9kYXRhX3dyaXRlKGRl dik7DQo+Pj4gKwkJfQ0KPj4+ICsJfQ0KPj4+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Ry bC0+bG9jaywgZmxhZ3MpOw0KPj4+ICsNCj4+PiArCXJldHVybiBjaGFuZ2VkOw0KPj4+ICt9DQo+ Pj4gKw0KPj4+ICtzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbWNocF9zcGRpZnR4X2N0 cmxzW10gPSB7DQo+Pj4gKwkvKiBDaGFubmVsIHN0YXR1cyBjb250cm9sbGVyICovDQo+Pj4gKwl7 DQo+Pj4gKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLA0KPj4+ICsJCS5uYW1l ID0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLCBQTEFZQkFDSywgREVGQVVMVCksDQo+Pj4gKwkJ LmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfA0KPj4+ICsJCQlTTkRS Vl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsDQo+Pj4gKwkJLmluZm8gPSBtY2hwX3NwZGlmdHhf aW5mbywNCj4+PiArCQkuZ2V0ID0gbWNocF9zcGRpZnR4X2NzX2dldCwNCj4+PiArCQkucHV0ID0g bWNocF9zcGRpZnR4X2NzX3B1dCwNCj4+PiArCX0sDQo+Pj4gKwl7DQo+Pj4gKwkJLmlmYWNlID0g U05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLA0KPj4+ICsJCS5uYW1lID0gU05EUlZfQ1RMX05BTUVf SUVDOTU4KCIiLCBQTEFZQkFDSywgTUFTSyksDQo+Pj4gKwkJLmFjY2VzcyA9IFNORFJWX0NUTF9F TEVNX0FDQ0VTU19SRUFELA0KPj4+ICsJCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUs DQo+Pj4gKwkJLmluZm8gPSBtY2hwX3NwZGlmdHhfaW5mbywNCj4+PiArCQkuZ2V0ID0gbWNocF9z cGRpZnR4X2NzX21hc2ssDQo+Pj4gKwl9LA0KPj4+ICsJLyogVXNlciBiaXRzIGNvbnRyb2xsZXIg Ki8NCj4+PiArCXsNCj4+PiArCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sDQo+ Pj4gKwkJLm5hbWUgPSAiSUVDOTU4IFN1YmNvZGUgUGxheWJhY2sgRGVmYXVsdCIsDQo+Pj4gKwkJ LmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsDQo+Pj4gKwkJLmluZm8g PSBtY2hwX3NwZGlmdHhfaW5mbywNCj4+PiArCQkuZ2V0ID0gbWNocF9zcGRpZnR4X3N1YmNvZGVf Z2V0LA0KPj4+ICsJCS5wdXQgPSBtY2hwX3NwZGlmdHhfc3ViY29kZV9wdXQsDQo+Pj4gKwl9LA0K Pj4+ICt9Ow0KPj4+ICsNCj4+PiArc3RhdGljIGludCBtY2hwX3NwZGlmdHhfZGFpX3Byb2JlKHN0 cnVjdCBzbmRfc29jX2RhaSAqZGFpKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1Y3QgbWNocF9zcGRpZnR4 X2RldiAqZGV2ID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsNCj4+PiArDQo+Pj4gKwlz bmRfc29jX2RhaV9pbml0X2RtYV9kYXRhKGRhaSwgJmRldi0+cGxheWJhY2ssIE5VTEwpOw0KPj4+ ICsNCj4+PiArCS8qIEFkZCBjb250cm9scyAqLw0KPj4+ICsJc25kX3NvY19hZGRfZGFpX2NvbnRy b2xzKGRhaSwgbWNocF9zcGRpZnR4X2N0cmxzLA0KPj4+ICsJCQkJIEFSUkFZX1NJWkUobWNocF9z cGRpZnR4X2N0cmxzKSk7DQo+Pj4gKw0KPj4+ICsJcmV0dXJuIDA7DQo+Pj4gK30NCj4+PiArDQo+ Pj4gK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIG1jaHBfc3BkaWZ0eF9kYWkgPSB7 DQo+Pj4gKwkubmFtZSA9ICJtY2hwLXNwZGlmdHgiLA0KPj4+ICsJLnByb2JlCT0gbWNocF9zcGRp ZnR4X2RhaV9wcm9iZSwNCj4+PiArCS5wbGF5YmFjayA9IHsNCj4+PiArCQkuc3RyZWFtX25hbWUg PSAiUy9QRElGIFRYIFBsYXliYWNrIiwNCj4+PiArCQkuY2hhbm5lbHNfbWluID0gMSwNCj4+PiAr CQkuY2hhbm5lbHNfbWF4ID0gMiwNCj4+PiArCQkucmF0ZXMgPSBNQ0hQX1NQRElGVFhfUkFURVMs DQo+Pj4gKwkJLmZvcm1hdHMgPSBNQ0hQX1NQRElGVFhfRk9STUFUUywNCj4+PiArCX0sDQo+Pj4g Kwkub3BzID0gJm1jaHBfc3BkaWZ0eF9kYWlfb3BzLA0KPj4+ICt9Ow0KPj4+ICsNCj4+PiArc3Rh dGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudF9kcml2ZXIgbWNocF9zcGRpZnR4X2Nv bXBvbmVudCA9IHsNCj4+PiArCS5uYW1lCQk9ICJtY2hwLXNwZGlmdHgiLA0KPj4+ICt9Ow0KPj4+ ICsNCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWNocF9zcGRpZnR4X2R0 X2lkc1tdID0gew0KPj4+ICsJew0KPj4+ICsJCS5jb21wYXRpYmxlID0gIm1pY3JvY2hpcCxzYW1h N2c1LXNwZGlmdHgiLA0KPj4+ICsJfSwNCj4+PiArCXsgLyogc2VudGluZWwgKi8gfQ0KPj4+ICt9 Ow0KPj4+ICsNCj4+PiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbWNocF9zcGRpZnR4X2R0X2lk cyk7DQo+Pj4gK3N0YXRpYyBpbnQgbWNocF9zcGRpZnR4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpDQo+Pj4gK3sNCj4+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2 LT5kZXYub2Zfbm9kZTsNCj4+PiArCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOw0K Pj4+ICsJc3RydWN0IG1jaHBfc3BkaWZ0eF9kZXYgKmRldjsNCj4+PiArCXN0cnVjdCByZXNvdXJj ZSAqbWVtOw0KPj4+ICsJc3RydWN0IHJlZ21hcCAqcmVnbWFwOw0KPj4+ICsJdm9pZCBfX2lvbWVt ICpiYXNlOw0KPj4+ICsJc3RydWN0IG1jaHBfc3BkaWZ0eF9taXhlcl9jb250cm9sICpjdHJsOw0K Pj4+ICsJaW50IGlycTsNCj4+PiArCWludCBlcnI7DQo+Pj4gKw0KPj4+ICsJLyogR2V0IG1lbW9y eSBmb3IgZHJpdmVyIGRhdGEuICovDQo+Pj4gKwlkZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRl diwgc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsNCj4+PiArCWlmICghZGV2KQ0KPj4+ICsJCXJl dHVybiAtRU5PTUVNOw0KPj4+ICsNCj4+PiArCS8qIEdldCBoYXJkd2FyZSBjYXBhYmlsaXRpZXMu ICovDQo+Pj4gKwltYXRjaCA9IG9mX21hdGNoX25vZGUobWNocF9zcGRpZnR4X2R0X2lkcywgbnAp Ow0KPj4+ICsJaWYgKG1hdGNoKQ0KPj4+ICsJCWRldi0+Y2FwcyA9IG1hdGNoLT5kYXRhOw0KPj4+ ICsNCj4+PiArCS8qIE1hcCBJL08gcmVnaXN0ZXJzLiAqLw0KPj4+ICsJYmFzZSA9IGRldm1fcGxh dGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsICZtZW0pOw0KPj4+ICsJaWYg KElTX0VSUihiYXNlKSkNCj4+PiArCQlyZXR1cm4gUFRSX0VSUihiYXNlKTsNCj4+PiArDQo+Pj4g KwlyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oJnBkZXYtPmRldiwgYmFzZSwNCj4+PiAr CQkJCSAgICAgICAmbWNocF9zcGRpZnR4X3JlZ21hcF9jb25maWcpOw0KPj4+ICsJaWYgKElTX0VS UihyZWdtYXApKQ0KPj4+ICsJCXJldHVybiBQVFJfRVJSKHJlZ21hcCk7DQo+Pj4gKw0KPj4+ICsJ LyogUmVxdWVzdCBJUlEgKi8NCj4+PiArCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7 DQo+Pj4gKwlpZiAoaXJxIDwgMCkNCj4+PiArCQlyZXR1cm4gaXJxOw0KPj4+ICsNCj4+PiArCWVy ciA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxLCBtY2hwX3NwZGlmdHhfaW50ZXJy dXB0LCAwLA0KPj4+ICsJCQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIGRldik7DQo+Pj4g KwlpZiAoZXJyKQ0KPj4+ICsJCXJldHVybiBlcnI7DQo+Pj4gKw0KPj4+ICsJLyogR2V0IHRoZSBw ZXJpcGhlcmFsIGNsb2NrICovDQo+Pj4gKwlkZXYtPnBjbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYt PmRldiwgInBjbGsiKTsNCj4+PiArCWlmIChJU19FUlIoZGV2LT5wY2xrKSkgew0KPj4+ICsJCWVy ciA9IFBUUl9FUlIoZGV2LT5wY2xrKTsNCj4+PiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsDQo+Pj4g KwkJCSJmYWlsZWQgdG8gZ2V0IHRoZSBwZXJpcGhlcmFsIGNsb2NrOiAlZFxuIiwgZXJyKTsNCj4+ PiArCQlyZXR1cm4gZXJyOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCS8qIEdldCB0aGUgZ2VuZXJp YyBjbG9jayAqLw0KPj4+ICsJZGV2LT5nY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJn Y2xrIik7DQo+Pj4gKwlpZiAoSVNfRVJSKGRldi0+Z2NsaykpIHsNCj4+PiArCQllcnIgPSBQVFJf RVJSKGRldi0+Z2Nsayk7DQo+Pj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LA0KPj4+ICsJCQkiZmFp bGVkIHRvIGdldCB0aGUgUE1DIGdlbmVyaWMgY2xvY2s6ICVkXG4iLCBlcnIpOw0KPj4+ICsJCXJl dHVybiBlcnI7DQo+Pj4gKwl9DQo+Pj4gKw0KPj4+ICsJY3RybCA9ICZkZXYtPmNvbnRyb2w7DQo+ Pj4gKwlzcGluX2xvY2tfaW5pdCgmY3RybC0+bG9jayk7DQo+Pj4gKw0KPj4+ICsJLyogSW5pdCBj aGFubmVsIHN0YXR1cyAqLw0KPj4+ICsJY3RybC0+Y2hfc3RhdFswXSA9IElFQzk1OF9BRVMwX0NP Tl9OT1RfQ09QWVJJR0hUIHwNCj4+PiArCQkJICAgSUVDOTU4X0FFUzBfQ09OX0VNUEhBU0lTX05P TkU7DQo+Pj4gKw0KPj4+ICsJZGV2LT5kZXYgPSAmcGRldi0+ZGV2Ow0KPj4+ICsJZGV2LT5yZWdt YXAgPSByZWdtYXA7DQo+Pj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOw0KPj4+ ICsNCj4+PiArCWRldi0+cGxheWJhY2suYWRkciA9IChkbWFfYWRkcl90KW1lbS0+c3RhcnQgKyBT UERJRlRYX0NEUjsNCj4+PiArCWRldi0+cGxheWJhY2suYWRkcl93aWR0aCA9IERNQV9TTEFWRV9C VVNXSURUSF80X0JZVEVTOw0KPj4+ICsNCj4+PiArCWVyciA9IGRldm1fc25kX2RtYWVuZ2luZV9w Y21fcmVnaXN0ZXIoJnBkZXYtPmRldiwgTlVMTCwgMCk7DQo+Pj4gKwlpZiAoZXJyKSB7DQo+Pj4g KwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIFBNQzogJWRcbiIsIGVy cik7DQo+Pj4gKwkJcmV0dXJuIGVycjsNCj4+PiArCX0NCj4+PiArDQo+Pj4gKwllcnIgPSBkZXZt X3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KCZwZGV2LT5kZXYsDQo+Pj4gKwkJCQkJICAgICAg Jm1jaHBfc3BkaWZ0eF9jb21wb25lbnQsDQo+Pj4gKwkJCQkJICAgICAgJm1jaHBfc3BkaWZ0eF9k YWksIDEpOw0KPj4+ICsJaWYgKGVycikgew0KPj4+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgImZh aWxlZCB0byByZWdpc3RlciBjb21wb25lbnQ6ICVkXG4iLCBlcnIpOw0KPj4+ICsJCXJldHVybiBl cnI7DQo+Pj4gKwl9DQo+Pj4gKw0KPj4+ICsJcmV0dXJuIDA7DQo+Pj4gK30NCj4+PiArDQo+Pj4g K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1jaHBfc3BkaWZ0eF9kcml2ZXIgPSB7DQo+ Pj4gKwkucHJvYmUJPSBtY2hwX3NwZGlmdHhfcHJvYmUsDQo+Pj4gKwkuZHJpdmVyCT0gew0KPj4+ ICsJCS5uYW1lCT0gIm1jaHBfc3BkaWZ0eCIsDQo+Pj4gKwkJLm9mX21hdGNoX3RhYmxlID0gb2Zf bWF0Y2hfcHRyKG1jaHBfc3BkaWZ0eF9kdF9pZHMpLA0KPj4+ICsJfSwNCj4+PiArfTsNCj4+PiAr DQo+Pj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobWNocF9zcGRpZnR4X2RyaXZlcik7DQo+Pj4g Kw0KPj4+ICtNT0RVTEVfQVVUSE9SKCJDb2RyaW4gQ2l1Ym90YXJpdSA8Y29kcmluLmNpdWJvdGFy aXVAbWljcm9jaGlwLmNvbT4iKTsNCj4+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJNaWNyb2NoaXAg Uy9QRElGIFRYIENvbnRyb2xsZXIgRHJpdmVyIik7DQo+Pj4gK01PRFVMRV9MSUNFTlNFKCJHUEwg djIiKTsNCj4g