Received: by 2002:a05:6602:18e:0:0:0:0 with SMTP id m14csp2934845ioo; Sun, 29 May 2022 07:47:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz4p/xThFvH/lYVn8MdjKgWQRTfL5bQBEV831zeOiG0QfpubKz9xrgh4eZXox2xQYmO/NmM X-Received: by 2002:a17:902:ecc9:b0:163:e41c:bf12 with SMTP id a9-20020a170902ecc900b00163e41cbf12mr379799plh.164.1653835676615; Sun, 29 May 2022 07:47:56 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1653835676; cv=pass; d=google.com; s=arc-20160816; b=KJo1gc5ZfE5P4/ij4m7UI68eGOigb8R2NHta3TVm2NcgJdYHwTtCYJ5TbMKL4U9Za/ GoQP3l5ycYHoMiPhWqaBDmKsnJmEeIaVUAUian5unbIXP4VcQZkwNgupHpIXChywM9a9 DRPXYNYxGbs/bCLCNKIDNhQvEqracuoMPg8W/vpy+7diX+gPs59qS+soXgRIemlaF419 EMP8gs+qz1Kx+XNnjDwf4eLHSZh7K3bX4mTxG6mealxZjGYcjMJs/whPJPGmPfdHHQdn a2rz7HCVSqOA8AHfkWXQc3UxYwP1tuWj/fYQGRrsgPNSJ7llcRy56++9y2zANiUQwu6U m0SA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=LoYW37JoIhhFN8RsyMjbhQnslcZbtJX0RXda3OaK/bk=; b=b/ug7tVimqEGAYSbE64Vtss84eywHOhz53BsLlByUVSvqk3CuswGWyeKf1IbQWPykT XeTks0NZtvu+S5pveJBzmKee2Oj1j1eVGEBeBMIodPDdo53q4MVhv1Te/p4xC8doJdDy /KHPEjCh6lRIxwF2l0j4EfymWtsFmU7IjE7W/UkCI7wPvFgGK5kTCv1JXQLMH6XlW1F5 9tNFV3Gf0ojkBqVuF0fvQhu00Vs/ieHt9lxXAfWrS2fI8OqY2mXV3XXDGZjTZ3lLVGoO LA6Yjy9YozjfEKpSfoE7WW7WHVS5xCE/GJzlGZY2pMYOyJh4DLnRWf+f7sZbx/+r23tY 38FQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@mediateko365.onmicrosoft.com header.s=selector2-mediateko365-onmicrosoft-com header.b=LopgNnHH; arc=pass (i=1 spf=pass spfdomain=mediatek.com dkim=pass dkdomain=mediatek.com dmarc=pass fromdomain=mediatek.com); spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d22-20020a056a00199600b0050e128eef5csi12538771pfl.154.2022.05.29.07.47.38; Sun, 29 May 2022 07:47:56 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@mediateko365.onmicrosoft.com header.s=selector2-mediateko365-onmicrosoft-com header.b=LopgNnHH; arc=pass (i=1 spf=pass spfdomain=mediatek.com dkim=pass dkdomain=mediatek.com dmarc=pass fromdomain=mediatek.com); spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230293AbiE2N5P (ORCPT + 67 others); Sun, 29 May 2022 09:57:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55336 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230290AbiE2N5N (ORCPT ); Sun, 29 May 2022 09:57:13 -0400 Received: from mailgw02.mediatek.com (unknown [210.61.82.184]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4E2C0192B6 for ; Sun, 29 May 2022 06:56:56 -0700 (PDT) X-UUID: 4456a6169ab64203865f7323b3d5d2ec-20220529 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.5,REQID:f97aff7e-3ef8-4698-82e0-641cf2dd33b4,OB:10,L OB:10,IP:0,URL:5,TC:0,Content:0,EDM:0,RT:0,SF:45,FILE:0,RULE:Release_Ham,A CTION:release,TS:50 X-CID-INFO: VERSION:1.1.5,REQID:f97aff7e-3ef8-4698-82e0-641cf2dd33b4,OB:10,LOB :10,IP:0,URL:5,TC:0,Content:0,EDM:0,RT:0,SF:45,FILE:0,RULE:Release_Ham,ACT ION:release,TS:50 X-CID-META: VersionHash:2a19b09,CLOUDID:fa9adf47-4fb1-496b-8f1d-39e733fed1ea,C OID:34b6d04386dd,Recheck:0,SF:28|17|19|48,TC:nil,Content:4,EDM:-3,IP:nil,U RL:1,File:nil,QS:0,BEC:nil X-UUID: 4456a6169ab64203865f7323b3d5d2ec-20220529 Received: from mtkcas10.mediatek.inc [(172.21.101.39)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 373833109; Sun, 29 May 2022 21:56:48 +0800 Received: from mtkmbs10n1.mediatek.inc (172.21.101.34) by mtkmbs10n1.mediatek.inc (172.21.101.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.792.15; Sun, 29 May 2022 21:56:47 +0800 Received: from APC01-PSA-obe.outbound.protection.outlook.com (172.21.101.239) by mtkmbs10n1.mediatek.com (172.21.101.34) with Microsoft SMTP Server id 15.2.792.15 via Frontend Transport; Sun, 29 May 2022 21:56:46 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ErjLF4vtKNpyK3GjtXk/ppBc8z7Mm99/d/3KTbQXkEohCEvfM5dFBnhBppnU0Wc9BjfnelfEi5XCIOw3As6t2TU1aU00cjh/HuRB/e1vJRbXzbOo/fdmfgdlf2sWI5XCbxrEC19DbS33tLO5/s3O7Rxglxwz/WS3/CAFqE9IgqeByguM13+KlVz+GBydJBme38AuI3hwedO4WwQoZSLJxXjI/QMljZR5Yhk3JXSSvG6XDFpg6lAAT5kbZ8aBzNu0MIY4+1VBObLy0zIJtr3tvy35zQ1umbuynadtyd1qdQ2tncvQ9OOEco93sz3AZuWoFF8zeU+YcOKuGWjXT0vEow== 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=LoYW37JoIhhFN8RsyMjbhQnslcZbtJX0RXda3OaK/bk=; b=Zac5fC+vizT2Ii/VBw49lUCGd/EJ59P+jvoCIdpkCaq9mKMwxR8obxAySbyAU7KJfjjaB2ohPl2wtgQGJpktO2ObrxhpGXpizuLCUGWhdj0YFCrZJh0++h1DYseod7EkbGlxrR8hIaNHHW8WkY9QNa2QxPQyN7xzPVwJfACU0Ahrrd4XnZHZMGTKhrk9B6tCiYkboq+40LjhbbFuHDgU3vkoxpcYiCorGHgntby/9U+Wyria6QjGuocACEzLZ5okV44VzEZbE8GLttpFg68vpsi1XzFbAlOhRi8PMumTnt65NK7nb54f3a2ExKqx+UbxkHEm0qvzSQgEfOBQ1C7pGA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mediatek.com; dmarc=pass action=none header.from=mediatek.com; dkim=pass header.d=mediatek.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mediateko365.onmicrosoft.com; s=selector2-mediateko365-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LoYW37JoIhhFN8RsyMjbhQnslcZbtJX0RXda3OaK/bk=; b=LopgNnHHCj3xbKU2Goa5MCAtgiqIX5m64THE5PnKrkX+6uA3t2mUaWcr1TF/l3ePdkDjQIgknaCl7QTbknfgRPWksQLnmjwwBvCMNpYclYDVH3QY/wf7Z4S7eFucmbR/eYDgINaesgPzOSdd3DyImb59OVibfLXFNrJFfBWVjwQ= Received: from SG2PR03MB4118.apcprd03.prod.outlook.com (2603:1096:4:7e::15) by SG2PR03MB5071.apcprd03.prod.outlook.com (2603:1096:4:dc::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.11; Sun, 29 May 2022 13:56:44 +0000 Received: from SG2PR03MB4118.apcprd03.prod.outlook.com ([fe80::2101:9688:ef3:a26b]) by SG2PR03MB4118.apcprd03.prod.outlook.com ([fe80::2101:9688:ef3:a26b%7]) with mapi id 15.20.5314.010; Sun, 29 May 2022 13:56:44 +0000 From: =?utf-8?B?RXZlbHluIFRzYWkgKOiUoeePiumIuik=?= To: Felix Fietkau , "linux-wireless@vger.kernel.org" CC: =?utf-8?B?VG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2Vu?= Subject: RE: [RFC/RFT v2 2/2] mac80211: rework the airtime fairness implementation Thread-Topic: [RFC/RFT v2 2/2] mac80211: rework the airtime fairness implementation Thread-Index: AQHYc1cLniWSTFnbHkWQo/vUWzSxoq014Sog Date: Sun, 29 May 2022 13:56:44 +0000 Message-ID: References: <20220529122346.59113-1-nbd@nbd.name> <20220529122346.59113-2-nbd@nbd.name> In-Reply-To: <20220529122346.59113-2-nbd@nbd.name> Accept-Language: en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mediatek.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 41e6e8b9-c26a-40db-eff2-08da417b10ed x-ms-traffictypediagnostic: SG2PR03MB5071:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Kw6V6+DTFgIBQpMzTEqr/ZPuK3yRvBES4iqfdYxv+cnrctmaSsfjgeWby/xhSP/Wltp8gbMjDDnxtsfNxuKVHNswq2y3VAt/4Sj07Pno3V8tF5sq5oWcmHRkganSBWWxXbgbitPcGiJWgnQnhZpcHE+UlDz7HwbiAwRdHMD4YA4TunRCH7HzRIy7sfxsewKTdZn+EZa46vJSoP+IuqMsJ2qKXyVkPWTo0/5l0COnY1tC1q6JVVGY+1BVSxpz4l5ZbF2qDJkG6C+WeHg0sUAqm7GNvW0hhnAFjzlKjNabCYHSOxSQvyuD2Gl/jFsCaitto8nvhZrStFyhq4NrGHu2nAxp5yUWn2IzxG1nnEDQPORE/JCcoFsTFhOMx1Tso3lpG/sTJ+dLpuBCVS7zoLYLZlI2yPBfKEXRsknOhe0UGlF4NMs1x+Npxuf5K7JI0VYhYXYr3/eCwNIQKn1UEBzpMKTN1rekMnmxJRtt+9PEeaB03DPQSPiGF7sJOZ5YTDgJZaDLIXdOJWZOoLWwGKAhacUXjioa90uSGroNlOST4b6xNfSpZoiMUD7HA0l3dDzZUjj0wTCYmClfX170PqXvwSCaKoJY80rwfTyDo5KNVKbr6oqxWJdTELDlISUaUgCteWg9qLk9MY8MnfzUMDb8vYp7LvsT30oiIrpyFnwCEDd0KV6x9xgrlyJSe9lVUndQ++n7Ji2mOFp2gfZYGjb0qgVKNBFuGtIvSYMAS9hT9YkbVAlhRPwzekJgF4+jqtuG x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SG2PR03MB4118.apcprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(30864003)(66946007)(66476007)(66556008)(52536014)(38100700002)(55016003)(85182001)(86362001)(316002)(64756008)(110136005)(66446008)(8936002)(76116006)(66574015)(186003)(5660300002)(7696005)(33656002)(2906002)(83380400001)(8676002)(4326008)(122000001)(508600001)(38070700005)(26005)(53546011)(6506007)(9686003)(71200400001)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?RkYrNGJrbk40M0FFNFRrWmpCeXErYjdSTzVIRzlUUFNzeWtJZkNRL3Qyd05k?= =?utf-8?B?bXJnZXdFdkJZOUNncy9Lb2FLSEhiZTVTcWwvbTFkZlMvc08vZlNSd25HQlMy?= =?utf-8?B?MElNcTlHUWgweHd6am9FZS9rR3B2MkNkODNLN1lVS01URGFrVUNuRGwwMURH?= =?utf-8?B?R20vZ0VXVlN0UklETUQzZktEdklKMU5RMkc4eDhzbERRRGU0TzkxaDRDNmlC?= =?utf-8?B?VEw4MnVIUlowbnB1TVNkc1lpTm1nS25wVmQ3MEtkWDExY2NZaUtyZklOZUZB?= =?utf-8?B?L2RjM1JQWXBIbWFyMCs0WVVGVEpkMXQ5ZEd5UDZLTjJRM3hTdkZxTGVSRW1Q?= =?utf-8?B?YVpOZEFna1BZbVNrMWhXT0krTUpXNnM2eHRESzE0MzNqUjJSa3NrRFJQKzNr?= =?utf-8?B?YmtzbnljOU4xUnFCbkU2NmJVSWpVQ0E3NFoxa2M3ZGRpV0RxVG5DRzNzQWxV?= =?utf-8?B?dFF2c3lkRDdFYW1sOVE1ME5iOWNoalplQXpoZTJ2NnVXdmdLSTU5V3hJY1Rh?= =?utf-8?B?VS9WOTc1ZWhzQmZ6Z2VFYnV4TGRMRDYyUEt3Mks3R1ArTkUreGFsWHFYcWQr?= =?utf-8?B?Zk5VTTFuTXFmdzRMU1ozeUxNQURTRFZoMlNzM2lSZmpZR3cweGNld2l4NUhP?= =?utf-8?B?ZkhpUHdDRXZtZUpuK1FXS0QwVTE1VzYzSXNrdjdzRzNLc0ZQY3AyeEV2WXdl?= =?utf-8?B?OTR1SmVpY2dGZzJzTlBGRkxFcGM2MU56bllVY2cwTkhNTjh1aGJZeUFhV2ZY?= =?utf-8?B?M1hXbjlUTk1zbHRNSHZ5UzZCNUpUaW5ZQkM1YTVWa0NRaktCSXE0TklDTDhr?= =?utf-8?B?Y2dTZ2RKazA3RG1IYmJPUVp3R0ViczVFa2NiL1g5cGllQ1hvT0FQcmtISnhr?= =?utf-8?B?M21ZUTRRMDNGTEtqNjVHN1FBYUs4WE4wTG56b2ljRU9iL1AwdWlVbVl3SjNW?= =?utf-8?B?ckFyMTBKYjFVUWxnU3dIQ3UrN3BaeXZJY2hDeFN0Qy95UUhWTXpFOElVV2Jo?= =?utf-8?B?ZFpDVTFGbFRBelBGOXVXRWxLTytGcE94WUxra2NlZFh6UjZPU3hOM3QwS3ht?= =?utf-8?B?NStOR3dyOWJMbjVpdXNkdlliZXNyNWxjRTEyUFcrVk1VTE44R0pXY01obllD?= =?utf-8?B?Y2FuMWNENWFDaUxhTXpxUENxR21Fa2wxTjVCbzQwN2t2SFJGWDB2d3JoR00w?= =?utf-8?B?azN2RUc1cExiOE5odmZ1bVVTdTlnb3pDeEgwT2V3RWxtdW9iT3hadDd2cEhC?= =?utf-8?B?TkJFZjNVL3d0STRQR2prWUpPT3c2SGZ4bDEwSnhyUDNJbnhpRzlwMDlXNHZv?= =?utf-8?B?VldUbFY0MEZ0ME1yYU5UczRxVzNXbW9lUHhkcjFaRUFDdSt6b1c5WlVtdFAx?= =?utf-8?B?VjljeUR0QjZ2MllJYWczYi9MNlFMdUhxMitvN0VON1dYNHZWeHU1cThlL1ps?= =?utf-8?B?UE9qeWRrTkRlMGRyUnQ5L0QzaW5XdmV0dVMyNjl6M1BJYVJlcjR5MXVGbHB2?= =?utf-8?B?Z0ZVaVNYQWh4ajhFdEcrcU56angvMjdNS3VUYW1HQ3dBTDg0ODJ4UTdXcWVi?= =?utf-8?B?NFNuTDc5aTNrSXVwam4waHM0TEVJbUd2WDMrVGpzaCs2YjVaZE0yN3F2cmxV?= =?utf-8?B?R3E4dG9USG4xazB5dko5ODNvSFgveTQ3c0JqdTMveFpnZ1JEVnZ6NjlpKzlH?= =?utf-8?B?OGhwYnV3Z2NBMkdDUkp3Z0daZDg3LzFETFU4c1dlbC9JQ3RPUmFTanI4OVVN?= =?utf-8?B?d0ZsdlNhUm83L2RIaUFla1pFVSs1MU9UQmJkVUVTay9jWmU0K2I4QjVyQUNB?= =?utf-8?B?S2h4SDVBdCtkRjB4dzk3ZWg4MkVsZjdLT3BPUmtUUzRlOTlkR3UyK29BTnZH?= =?utf-8?B?c2hRUHBWZEpyNUhBMEoyTVBjRXRWMU03MFpSdjNQbGVHMGowblZBTitROTl3?= =?utf-8?B?V0dpOTB1SlRJbFhLRVRtaGdIVWxZemc2SEErd2VYdW1qT3RIMkx1aWRKejRh?= =?utf-8?B?K0NBenpiM2xZUVIyV0l1bFdOVDRaRVR5ZEFnOHNTRmM2ODVwenZKZ2Y2Q2RP?= =?utf-8?B?WjFZVnh3eTVLY1QzZ3NyUXM0aXBsYjFaWHNPWlBmTFdOTHYwZXlHOVFTekNK?= =?utf-8?B?Uk1ZbkVjNkZQNHBvYVVuYVBPbTU2cXNVbDBiYVVhVFVxUDRDa1hjc3ZXWTVq?= =?utf-8?B?QVRNV2VkNmxLUytJdC9Jc250ZENFcTR5R3V0VXFMK2NVYTdPY3pPMFhMV292?= =?utf-8?B?MTE4MkpRWDYyRzI3akhtNjRTVnhhSWl5YUZNTlZYZ1ZmM095N3F2TFJzYWF6?= =?utf-8?B?WG1BeFpGMUhzWkhaUWFPRGwzcnhVQVFycUkycVZ2SlIvQk44TGRyUT09?= 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: SG2PR03MB4118.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 41e6e8b9-c26a-40db-eff2-08da417b10ed X-MS-Exchange-CrossTenant-originalarrivaltime: 29 May 2022 13:56:44.6533 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a7687ede-7a6b-4ef6-bace-642f677fbe31 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: OkHqstx6dIpiYgmiM1aGq9c7kKXetExU28kj8qa0+F4KIcxl9B7XVBXUhNDhfbnWgKh2cYU5GgzmX2obNKh1BYKyycTD/7M3H6zPmmRLSVE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2PR03MB5071 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RDNS_NONE,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_TEMPERROR,UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org TmV3IEFURiBBbGdvIGZyb20gRmVsaXgNCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZy b206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4gDQpTZW50OiBTdW5kYXksIE1heSAyOSwg MjAyMiA4OjI0IFBNDQpUbzogbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnDQpDYzogVG9r ZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIDx0b2tlQGtlcm5lbC5vcmc+DQpTdWJqZWN0OiBbUkZDL1JG VCB2MiAyLzJdIG1hYzgwMjExOiByZXdvcmsgdGhlIGFpcnRpbWUgZmFpcm5lc3MgaW1wbGVtZW50 YXRpb24NCg0KVGhlIGN1cnJlbnQgQVRGIGltcGxlbWVudGF0aW9uIGhhcyBhIG51bWJlciBvZiBp c3N1ZXMgd2hpY2ggaGF2ZSBzaG93biB1cCBkdXJpbmcgdGVzdGluZy4gU2luY2UgaXQgZG9lcyBu b3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIEFRTCBidWRnZXQgb2YgcGVuZGluZyBwYWNrZXRzLCB0 aGUgaW1wbGVtZW50YXRpb24gbWlnaHQgcXVldWUgdXAgbGFyZ2UgYW1vdW50cyBvZiBwYWNrZXRz IGZvciBhIHNpbmdsZSB0eHEgdW50aWwgYWlydGltZSBnZXRzIHJlcG9ydGVkIGFmdGVyIHR4IGNv bXBsZXRpb24uDQpUaGUgc2FtZSB0aGVuIGhhcHBlbnMgdG8gdGhlIG5leHQgdHhxIGFmdGVyd2Fy ZHMuIFdoaWxlIHRoZSBlbmQgcmVzdWx0IGNvdWxkIHN0aWxsIGJlIGNvbnNpZGVyZWQgZmFpciwg dGhlIGJ1cnN0eSBiZWhhdmlvciBpbnRyb2R1Y2VzIGEgbGFyZ2UgYW1vdW50IG9mIGxhdGVuY3ku DQpUaGUgY3VycmVudCBjb2RlIGFsc28gdHJpZXMgdG8gYXZvaWQgZnJlcXVlbnQgcmUtc29ydGlu ZyBvZiB0eHEgZW50cmllcyBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgdG8gcmUtYmFsYW5jZSB0 aGUgcmJ0cmVlIG9mdGVuLg0KDQpJbiBvcmRlciB0byBmaXggdGhlc2UgaXNzdWVzLCBpbnRyb2R1 Y2Ugc2tpcCBsaXN0cyBhcyBhIGRhdGEgc3RydWN0dXJlLCB3aGljaCBvZmZlciBzaW1pbGFyIGxv b2t1cC9pbnNlcnQvZGVsZXRlIHRpbWVzIGFzIHJidHJlZSwgYnV0IGF2b2lkcyB0aGUgbmVlZCBm b3IgcmViYWxhY2luZyBieSBiZWluZyBwcm9iYWJpbGlzdGljLg0KVXNlIHRoaXMgdG8ga2VlcCB0 eCBlbnRyaWVzIHNvcnRlZCBieSB2aXJ0dWFsIHRpbWUgKyBwZW5kaW5nIEFRTCBidWRnZXQgYW5k IHJlLXNvcnQgYWZ0ZXIgZWFjaCBpZWVlODAyMTFfcmV0dXJuX3R4cSBjYWxsLg0KDQpTaW5jZSBt dWx0aXBsZSB0eHFzIHNoYXJlIGEgc2luZ2xlIGFpcl90aW1lIHN0cnVjdCB3aXRoIGEgdmlydHVh bCB0aW1lIHZhbHVlLCBzd2l0Y2ggdGhlIGFjdGl2ZV90eHFzIGxpc3QgdG8gcXVldWUgdXAgYWly X3RpbWUgc3RydWN0cyBpbnN0ZWFkIG9mIHF1ZXVlcy4NClRoaXMgaGVscHMgYXZvaWQgaW1iYWxh bmNlIGJldHdlZW4gc2hhcmVkIHR4cXMgYnkgc2VydmljaW5nIHRoZW0gcm91bmQgcm9iaW4uDQoN CmllZWU4MDIxMV9uZXh0X3R4cSBub3cgb25seSBkZXF1ZXVlcyB0aGUgZmlyc3QgZWxlbWVudCBv ZiBhY3RpdmVfdHhxcy4gVG8gbWFrZSB0aGF0IHdvcmsgZm9yIG5vbi1BUUwgb3Igbm9uLUFURiBk cml2ZXJzIGFzIHdlbGwsIGFkZCBlc3RpbWF0ZWQgdHggYWlydGltZSBkaXJlY3RseSB0byBhaXJf aW5mbyB2aXJ0dWFsIHRpbWUgaWYgZWl0aGVyIEFRTCBvciBBVEYgaXMgbm90IHN1cHBvcnRlZC4N Cg0KU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPg0KLS0tDQogaW5j bHVkZS9saW51eC9za2lwbGlzdC5oICAgfCAyNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrDQogbmV0L21hYzgwMjExL2NmZy5jICAgICAgICAgfCAgIDUgLQ0KIG5ldC9tYWM4 MDIxMS9pZWVlODAyMTFfaS5oIHwgIDMzICsrKystDQogbmV0L21hYzgwMjExL21haW4uYyAgICAg ICAgfCAgIDIgKy0NCiBuZXQvbWFjODAyMTEvc3RhX2luZm8uYyAgICB8ICAgMyArLQ0KIG5ldC9t YWM4MDIxMS9zdGFfaW5mby5oICAgIHwgICA2ICstDQogbmV0L21hYzgwMjExL3R4LmMgICAgICAg ICAgfCAyNDQgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIDcgZmlsZXMg Y2hhbmdlZCwgMzk0IGluc2VydGlvbnMoKyksIDE0MSBkZWxldGlvbnMoLSkgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBpbmNsdWRlL2xpbnV4L3NraXBsaXN0LmgNCg0KZGlmZiAtLWdpdCBhL2luY2x1ZGUv bGludXgvc2tpcGxpc3QuaCBiL2luY2x1ZGUvbGludXgvc2tpcGxpc3QuaCBuZXcgZmlsZSBtb2Rl IDEwMDY0NCBpbmRleCAwMDAwMDAwMDAwMDAuLmJkZGMyMTNjMzE0ZA0KLS0tIC9kZXYvbnVsbA0K KysrIGIvaW5jbHVkZS9saW51eC9za2lwbGlzdC5oDQpAQCAtMCwwICsxLDI0MiBAQA0KKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovDQorLyoNCisgKiBBIHNr aXAgbGlzdCBpcyBhIHByb2JhYmlsaXN0aWMgYWx0ZXJuYXRpdmUgdG8gYmFsYW5jZWQgdHJlZXMu IFVubGlrZSANCit0aGUNCisgKiByZWQtYmxhY2sgdHJlZSwgaXQgZG9lcyBub3QgcmVxdWlyZSBy ZWJhbGFuY2luZy4NCisgKg0KKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBvbmx5IHVuaWRp cmVjdGlvbmFsIG5leHQgcG9pbnRlcnMgYW5kIGlzIA0KK29wdGltaXplZA0KKyAqIGZvciB1c2Ug aW4gYSBwcmlvcml0eSBxdWV1ZSB3aGVyZSBlbGVtZW50cyBhcmUgbW9zdGx5IGRlbGV0ZWQgZnJv bSANCit0aGUgZnJvbnQNCisgKiBvZiB0aGUgcXVldWUuDQorICoNCisgKiBXaGVuIHN0b3Jpbmcg dXAgdG8gMl5uIGVsZW1lbnRzIGluIGEgbi1sZXZlbCBza2lwbGlzdC4gbG9va3VwIGFuZCANCitk ZWxldGlvbg0KKyAqIGZvciB0aGUgZmlyc3QgZWxlbWVudCBoYXBwZW5zIGluIE8oMSkgdGltZSwg b3RoZXIgdGhhbiB0aGF0LCANCitpbnNlcnRpb24gYW5kDQorICogZGVsZXRpb24gdGFrZXMgTyhs b2cgbikgdGltZSwgYXNzdW1pbmcgdGhhdCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIA0KK2ZvciBh bg0KKyAqIG4tbGV2ZWwgbGlzdCBkb2VzIG5vdCBleGNlZWQgMl5uLg0KKyAqDQorICogVXNhZ2U6 DQorICogREVDTEFSRV9TS0lQTElTVF9UWVBFKGZvbywgNSkgd2lsbCBkZWZpbmUgdGhlIGRhdGEg dHlwZXMgZm9yIGEgNS1sZXZlbCBsaXN0Og0KKyAqIHN0cnVjdCBmb29fbGlzdDogdGhlIGxpc3Qg ZGF0YSB0eXBlDQorICogc3RydWN0IGZvb19ub2RlOiB0aGUgbm9kZSBkYXRhIGZvciBhbiBlbGVt ZW50IGluIHRoZSBsaXN0DQorICoNCisgKiBERUNMQVJFX1NLSVBMSVNUX0lNUEwoZm9vLCBmb29f Y21wX2ZuLCBmb29fc2VlZF9mbikNCisgKg0KKyAqIEFkZHMgdGhlIHNraXAgbGlzdCBpbXBsZW1l bnRhdGlvbi4gSXQgZGVwZW5kcyBvbiB0d28gcHJvdmlkZWQgZnVuY3Rpb25zOg0KKyAqIGludCBm b29fY21wX2ZuKHN0cnVjdCBmb29fbGlzdCAqbGlzdCwgc3RydWN0IGZvb19ub2RlICpuMSwgc3Ry dWN0IA0KK2Zvb19ub2RlICpuMikNCisgKiBUaGlzIGNvbXBhcmVzIHR3byBlbGVtZW50cyBnaXZl biBieSB0aGVpciBub2RlIHBvaW50ZXJzLCByZXR1cm5pbmcgDQordmFsdWVzIDwwDQorICogaWYg bjEgaXMgbGVzcyB0aGFuIG4yLCA9MCBhbmQgPjAgZm9yIGVxdWFsIG9yIGJpZ2dlciB0aGFuIHJl c3BlY3RpdmVseS4NCisgKg0KKyAqIHUzMiBmb29fc2VlZF9mbihzdHJ1Y3QgZm9vX2xpc3QgKmxp c3QpDQorICogcmV0dXJucyBhIHJhbmRvbSAzMiBiaXQgdmFsdWUuIEl0IGlzIHVzZWQgYnkgdGhl IGxpc3QgaW1wbGVtZW50YXRpb24gDQordG8NCisgKiBkZXRlcm1pbmUgdGhlIGxldmVsIG9mIGEg bmV3bHkgYWRkZWQgbGlzdCBtZW1iZXINCisgKg0KKyAqIFRoaXMgbWFjcm8gaW1wbGVtZW50cyB0 aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgKg0KKyAqIHZvaWQgZm9vX2xpc3RfaW5pdChzdHJ1 Y3QgZm9vX2xpc3QgKmxpc3QpDQorICoJaW5pdGlhbGl6ZXMgdGhlIHNraXAgbGlzdA0KKyAqDQor ICogdm9pZCBmb29fbm9kZV9pbml0KHN0cnVjdCBmb29fbm9kZSAqbm9kZSkNCisgKglpbml0aWFs aXplcyBhIG5vZGUuIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhZGRpbmcgdGhlIG5vZGUgdG8gdGhl IGxpc3QNCisgKg0KKyAqIHN0cnVjdCBmb29fbm9kZSAqZm9vX25vZGVfbmV4dChzdHJ1Y3QgZm9v X25vZGUgKm5vZGUpDQorICoJZ2V0cyB0aGUgbm9kZSBkaXJlY3RseSBhZnRlciB0aGUgcHJvdmlk ZWQgbm9kZSwgb3IgTlVMTCBpZiBpdCB3YXMgdGhlIGxhc3QNCisgKgllbGVtZW50IGluIHRoZSBs aXN0Lg0KKyAqDQorICogYm9vbCBmb29faXNfcXVldWVkKHN0cnVjdCBmb29fbm9kZSAqbm9kZSkN CisgKglyZXR1cm5zIHRydWUgaWYgdGhlIG5vZGUgaXMgb24gYSBsaXN0DQorICoNCisgKiBzdHJ1 Y3QgZm9vX25vZGUgKmZvb19kZXF1ZXVlKHN0cnVjdCBmb29fbGlzdCAqbGlzdCkNCisgKglkZWxl dGVzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBsaXN0IChvciByZXR1cm5z IE5VTEwgaWYgZW1wdHkpDQorICoNCisgKiBzdHJ1Y3QgZm9vX25vZGUgKmZvb19wZWVrKHN0cnVj dCBmb29fbGlzdCAqbGlzdCkNCisgKglyZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBs aXN0DQorICoNCisgKiB2b2lkIGZvb19pbnNlcnQoc3RydWN0IGZvb19saXN0ICpsaXN0LCBzdHJ1 Y3QgZm9vX25vZGUgKm5vZGUpDQorICoJaW5zZXJ0cyB0aGUgbm9kZSBpbnRvIHRoZSBsaXN0LiB0 aGUgbm9kZSBtdXN0IGJlIGluaXRpYWxpemVkIGFuZCBub3Qgb24gYQ0KKyAqCWxpc3QgYWxyZWFk eS4NCisgKg0KKyAqIHZvaWQgZm9vX2RlbGV0ZShzdHJ1Y3QgZm9vX2xpc3QgKmxpc3QsIHN0cnVj dCBmb29fbm9kZSAqbm9kZSkNCisgKglkZWxldGVzIHRoZSBub2RlIGZyb20gdGhlIGxpc3QsIG9y IGRvZXMgbm90aGluZyBpZiBpdCdzIG5vdCBvbiB0aGUgbGlzdA0KKyAqLw0KKyNpZm5kZWYgX19T S0lQTElTVF9IDQorI2RlZmluZSBfX1NLSVBMSVNUX0gNCisNCisjaW5jbHVkZSA8bGludXgvYml0 cy5oPg0KKyNpbmNsdWRlIDxsaW51eC9taW5tYXguaD4NCisjaW5jbHVkZSA8bGludXgvYnVnLmg+ DQorDQorI2RlZmluZSBTS0lQTElTVF9QT0lTT04gKCh2b2lkICopMSkNCisNCisjZGVmaW5lIERF Q0xBUkVfU0tJUExJU1RfVFlQRShuYW1lLCBsZXZlbHMpCQkJCVwNCitzdHJ1Y3QgbmFtZSMjX25v ZGUgewkJCQkJCQlcDQorCXN0cnVjdCBuYW1lIyNfbm9kZSAqbmV4dFtsZXZlbHNdOwkJCQlcDQor fTsJCQkJCQkJCQlcDQorc3RydWN0IG5hbWUjI19saXN0IHsJCQkJCQkJXA0KKwlzdHJ1Y3QgbmFt ZSMjX25vZGUgaGVhZDsJCQkJCVwNCisJdW5zaWduZWQgaW50IG1heF9sZXZlbDsJCQkJCQlcDQor CXVuc2lnbmVkIGludCBjb3VudDsJCQkJCQlcDQorfTsNCisNCisjZGVmaW5lIERFQ0xBUkVfU0tJ UExJU1RfSU1QTChuYW1lLCBjbXBfZm4sIHNlZWRfZm4pCQkJXA0KK3N0YXRpYyBpbmxpbmUgdm9p ZAkJCQkJCQlcDQorbmFtZSMjX2xpc3RfaW5pdChzdHJ1Y3QgbmFtZSMjX2xpc3QgKmxpc3QpCQkJ CVwNCit7CQkJCQkJCQkJXA0KKwltZW1zZXQobGlzdCwgMCwgc2l6ZW9mKCpsaXN0KSk7CQkJCQlc DQorfQkJCQkJCQkJCVwNCitzdGF0aWMgaW5saW5lIHZvaWQJCQkJCQkJXA0KK25hbWUjI19ub2Rl X2luaXQoc3RydWN0IG5hbWUjI19ub2RlICpub2RlKQkJCQlcDQorewkJCQkJCQkJCVwNCisJbm9k ZS0+bmV4dFswXSA9IFNLSVBMSVNUX1BPSVNPTjsJCQkJXA0KK30JCQkJCQkJCQlcDQorc3RhdGlj IGlubGluZSBzdHJ1Y3QgbmFtZSMjX25vZGUgKgkJCQkJXA0KK25hbWUjI19ub2RlX25leHQoc3Ry dWN0IG5hbWUjI19ub2RlICpub2RlKQkJCQlcDQorewkJCQkJCQkJCVwNCisJcmV0dXJuIG5vZGUt Pm5leHRbMF07CQkJCQkJXA0KK30JCQkJCQkJCQlcDQorc3RhdGljIGlubGluZSBib29sCQkJCQkJ CVwNCituYW1lIyNfaXNfcXVldWVkKHN0cnVjdCBuYW1lIyNfbm9kZSAqbm9kZSkJCQkJXA0KK3sJ CQkJCQkJCQlcDQorCXJldHVybiBub2RlLT5uZXh0WzBdICE9IFNLSVBMSVNUX1BPSVNPTjsJCQlc DQorfQkJCQkJCQkJCVwNCitzdGF0aWMgaW5saW5lIGludAkJCQkJCQlcDQorX19za2lwbGlzdF8j I25hbWUjI19jbXBfaW1wbCh2b2lkICpoZWFkLCB2b2lkICpuMSwgdm9pZCAqbjIpCQlcDQorewkJ CQkJCQkJCVwNCisJcmV0dXJuIGNtcF9mbihoZWFkLCBuMSwgbjIpOwkJCQkJXA0KK30JCQkJCQkJ CQlcDQorc3RhdGljIGlubGluZSB2b2lkCQkJCQkJCVwNCitfXyMjbmFtZSMjX2RlbGV0ZShzdHJ1 Y3QgbmFtZSMjX2xpc3QgKmxpc3QpCQkJCVwNCit7CQkJCQkJCQkJXA0KKwlsaXN0LT5jb3VudC0t OwkJCQkJCQlcDQorCXdoaWxlIChsaXN0LT5tYXhfbGV2ZWwgJiYJCQkJCVwNCisJICAgICAgICFs aXN0LT5oZWFkLm5leHRbbGlzdC0+bWF4X2xldmVsXSkJCQlcDQorCQlsaXN0LT5tYXhfbGV2ZWwt LTsJCQkJCVwNCit9CQkJCQkJCQkJXA0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5hbWUjI19ub2Rl ICoJCQkJCVwNCituYW1lIyNfZGVxdWV1ZShzdHJ1Y3QgbmFtZSMjX2xpc3QgKmxpc3QpCQkJCVwN Cit7CQkJCQkJCQkJXA0KKwlzdHJ1Y3QgbmFtZSMjX25vZGUgKnJldDsJCQkJCVwNCisJdW5zaWdu ZWQgaW50IG1heF9sZXZlbCA9IEFSUkFZX1NJWkUobGlzdC0+aGVhZC5uZXh0KSAtIDE7CVwNCisJ cmV0ID0gKHZvaWQgKilfX3NraXBsaXN0X2RlcXVldWUoKHZvaWQgKiopJmxpc3QtPmhlYWQsCQlc DQorCQkJCQkgbWF4X2xldmVsKTsJCQlcDQorCWlmICghcmV0KQkJCQkJCQlcDQorCQlyZXR1cm4g TlVMTDsJCQkJCQlcDQorCV9fIyNuYW1lIyNfZGVsZXRlKGxpc3QpOwkJCQkJXA0KKwlyZXR1cm4g cmV0OwkJCQkJCQlcDQorfQkJCQkJCQkJCVwNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuYW1lIyNf bm9kZSAqCQkJCQlcDQorbmFtZSMjX3BlZWsoc3RydWN0IG5hbWUjI19saXN0ICpsaXN0KQkJCQkJ XA0KK3sJCQkJCQkJCQlcDQorCXJldHVybiBsaXN0LT5oZWFkLm5leHRbMF07CQkJCQlcDQorfQkJ CQkJCQkJCVwNCitzdGF0aWMgaW5saW5lIHZvaWQJCQkJCQkJXA0KK25hbWUjI19pbnNlcnQoc3Ry dWN0IG5hbWUjI19saXN0ICpsaXN0LCBzdHJ1Y3QgbmFtZSMjX25vZGUgKm5vZGUpCVwNCit7CQkJ CQkJCQkJXA0KKwlpbnQgbGV2ZWwgPSBfX3NraXBsaXN0X2xldmVsKEFSUkFZX1NJWkUobGlzdC0+ aGVhZC5uZXh0KSAtIDEsCVwNCisJCQkJICAgICBsaXN0LT5jb3VudCwgc2VlZF9mbihsaXN0KSk7 CVwNCisJbGV2ZWwgPSBtaW5fdChpbnQsIGxldmVsLCBsaXN0LT5tYXhfbGV2ZWwgKyAxKTsJCQlc DQorCV9fc2tpcGxpc3RfaW5zZXJ0KCh2b2lkICopJmxpc3QtPmhlYWQsICh2b2lkICopbm9kZSwg bGV2ZWwsCVwNCisJCQkgIF9fc2tpcGxpc3RfIyNuYW1lIyNfY21wX2ltcGwpOwkJXA0KKwlpZiAo bGV2ZWwgPiBsaXN0LT5tYXhfbGV2ZWwpCQkJCQlcDQorCQlsaXN0LT5tYXhfbGV2ZWwgPSBsZXZl bDsJCQkJXA0KKwlsaXN0LT5jb3VudCsrOwkJCQkJCQlcDQorfQkJCQkJCQkJCVwNCitzdGF0aWMg aW5saW5lIHZvaWQJCQkJCQkJXA0KK25hbWUjI19kZWxldGUoc3RydWN0IG5hbWUjI19saXN0ICps aXN0LCBzdHJ1Y3QgbmFtZSMjX25vZGUgKm5vZGUpCVwNCit7CQkJCQkJCQkJXA0KKwlpZiAobm9k ZS0+bmV4dFswXSA9PSBTS0lQTElTVF9QT0lTT04pCQkJCVwNCisJICAgIHJldHVybjsJCQkJCQkJ XA0KKwlfX3NraXBsaXN0X2RlbGV0ZSgodm9pZCAqKSZsaXN0LT5oZWFkLCAodm9pZCAqKW5vZGUs CQlcDQorCQkJICBBUlJBWV9TSVpFKGxpc3QtPmhlYWQubmV4dCkgLSAxLAkJXA0KKwkJCSAgX19z a2lwbGlzdF8jI25hbWUjI19jbXBfaW1wbCk7CQlcDQorCV9fIyNuYW1lIyNfZGVsZXRlKGxpc3Qp OwkJCQkJXA0KK30NCisNCisNCit0eXBlZGVmIGludCAoKl9fc2tpcGxpc3RfY21wKSh2b2lkICpo ZWFkLCB2b2lkICpuMSwgdm9pZCAqbjIpOw0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCAqDQorX19z a2lwbGlzdF9kZXF1ZXVlKHZvaWQgKipsaXN0LCBpbnQgbWF4X2xldmVsKSB7DQorCXZvaWQgKipu b2RlID0gbGlzdFswXTsNCisJdW5zaWduZWQgaW50IGk7DQorDQorCWlmICghbm9kZSkNCisJCXJl dHVybiBOVUxMOw0KKw0KKwlsaXN0WzBdID0gbm9kZVswXTsNCisJZm9yIChpID0gMTsgaSA8PSBt YXhfbGV2ZWw7IGkrKykgew0KKwkJaWYgKGxpc3RbaV0gIT0gbm9kZSkNCisJCQlicmVhazsNCisN CisJCWxpc3RbaV0gPSBub2RlW2ldOw0KKwl9DQorCW5vZGVbMF0gPSBTS0lQTElTVF9QT0lTT047 DQorDQorCXJldHVybiBub2RlOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQNCitfX3NraXBs aXN0X2luc2VydCh2b2lkICoqbGlzdCwgdm9pZCAqKm5vZGUsIGludCBsZXZlbCwgX19za2lwbGlz dF9jbXAgDQorY21wKSB7DQorCXZvaWQgKipoZWFkID0gbGlzdDsNCisNCisJaWYgKFdBUk4obm9k ZVswXSAhPSBTS0lQTElTVF9QT0lTT04sICJJbnNlcnQgb24gYWxyZWFkeSBpbnNlcnRlZCBvciB1 bmluaXRpYWxpemVkIG5vZGUiKSkNCisJICAgIHJldHVybjsNCisJZm9yICg7IGxldmVsID49IDA7 IGxldmVsLS0pIHsNCisJCXdoaWxlIChsaXN0W2xldmVsXSAmJiBjbXAoaGVhZCwgbGlzdFtsZXZl bF0sIG5vZGUpIDwgMCkNCisJCQlsaXN0ID0gbGlzdFtsZXZlbF07DQorDQorCQlub2RlW2xldmVs XSA9IGxpc3RbbGV2ZWxdOw0KKwkJbGlzdFtsZXZlbF0gPSBub2RlOw0KKwl9DQorfQ0KKw0KKw0K K3N0YXRpYyBpbmxpbmUgdm9pZA0KK19fc2tpcGxpc3RfZGVsZXRlKHZvaWQgKipsaXN0LCB2b2lk ICoqbm9kZSwgaW50IG1heF9sZXZlbCwgDQorX19za2lwbGlzdF9jbXAgY21wKSB7DQorCXZvaWQg KmhlYWQgPSBsaXN0Ow0KKwlpbnQgaTsNCisNCisJZm9yIChpID0gbWF4X2xldmVsOyBpID49IDA7 IGktLSkgew0KKwkJd2hpbGUgKGxpc3RbaV0gJiYgY21wKGhlYWQsIGxpc3RbaV0sIG5vZGUpIDwg MCkNCisJCQlsaXN0ID0gbGlzdFtpXTsNCisNCisJCWlmIChsaXN0W2ldICE9IG5vZGUpDQorCQkJ Y29udGludWU7DQorDQorCQlsaXN0W2ldID0gbm9kZVtpXTsNCisJfQ0KKwlub2RlWzBdID0gU0tJ UExJU1RfUE9JU09OOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludA0KK19fc2tp cGxpc3RfbGV2ZWwodW5zaWduZWQgaW50IG1heF9sZXZlbCwgdW5zaWduZWQgaW50IGNvdW50LCB1 bnNpZ25lZCANCitpbnQgc2VlZCkgew0KKwl1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOw0KKw0KKwlp ZiAobWF4X2xldmVsID49IDE2ICYmICEoc2VlZCAmIEdFTk1BU0soMTUsIDApKSkgew0KKwkJbGV2 ZWwgKz0gMTY7DQorCQlzZWVkID4+PSAxNjsNCisJfQ0KKw0KKwlpZiAobWF4X2xldmVsID49IDgg JiYgIShzZWVkICYgR0VOTUFTSyg3LCAwKSkpIHsNCisJCWxldmVsICs9IDg7DQorCQlzZWVkID4+ PSA4Ow0KKwl9DQorDQorCWlmIChtYXhfbGV2ZWwgPj0gNCAmJiAhKHNlZWQgJiBHRU5NQVNLKDMs IDApKSkgew0KKwkJbGV2ZWwgKz0gNDsNCisJCXNlZWQgPj49IDQ7DQorCX0NCisNCisJaWYgKCEo c2VlZCAmIEdFTk1BU0soMSwgMCkpKSB7DQorCQlsZXZlbCArPSAyOw0KKwkJc2VlZCA+Pj0gMjsN CisJfQ0KKw0KKwlpZiAoIShzZWVkICYgQklUKDApKSkNCisJCWxldmVsKys7DQorDQorCXJldHVy biBtaW4obGV2ZWwsIG1heF9sZXZlbCk7DQorfQ0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL25l dC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuYyBpbmRleCBmNzg5NmYyNTdlMWIu LjkwOTY4NjM2ZGRmYiAxMDA2NDQNCi0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYw0KKysrIGIvbmV0 L21hYzgwMjExL2NmZy5jDQpAQCAtMTU4MCw3ICsxNTgwLDYgQEAgc3RhdGljIHZvaWQgc3RhX2Fw cGx5X2FpcnRpbWVfcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLA0KIAlmb3Ig KGFjID0gMDsgYWMgPCBJRUVFODAyMTFfTlVNX0FDUzsgYWMrKykgew0KIAkJc3RydWN0IGFpcnRp bWVfc2NoZWRfaW5mbyAqYWlyX3NjaGVkID0gJmxvY2FsLT5haXJ0aW1lW2FjXTsNCiAJCXN0cnVj dCBhaXJ0aW1lX2luZm8gKmFpcl9pbmZvID0gJnN0YS0+YWlydGltZVthY107DQotCQlzdHJ1Y3Qg dHhxX2luZm8gKnR4cWk7DQogCQl1OCB0aWQ7DQogDQogCQlzcGluX2xvY2tfYmgoJmFpcl9zY2hl ZC0+bG9jayk7DQpAQCAtMTU5MiwxMCArMTU5MSw2IEBAIHN0YXRpYyB2b2lkIHN0YV9hcHBseV9h aXJ0aW1lX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwNCiANCiAJCQlhaXJ0 aW1lX3dlaWdodF9zZXQoYWlyX2luZm8sIHBhcmFtcy0+YWlydGltZV93ZWlnaHQpOw0KIA0KLQkJ CXR4cWkgPSB0b190eHFfaW5mbyhzdGEtPnN0YS50eHFbdGlkXSk7DQotCQkJaWYgKFJCX0VNUFRZ X05PREUoJnR4cWktPnNjaGVkdWxlX29yZGVyKSkNCi0JCQkJY29udGludWU7DQotDQogCQkJaWVl ZTgwMjExX3VwZGF0ZV9haXJ0aW1lX3dlaWdodChsb2NhbCwgYWlyX3NjaGVkLA0KIAkJCQkJCQkw LCB0cnVlKTsNCiAJCX0NCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBi L25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGluZGV4IDVjYTRjMmM2YWEzYy4uYTg4MTQxMzM2 OTFjIDEwMDY0NA0KLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgNCisrKyBiL25ldC9t YWM4MDIxMS9pZWVlODAyMTFfaS5oDQpAQCAtMjUsNyArMjUsOCBAQA0KICNpbmNsdWRlIDxsaW51 eC9sZWRzLmg+DQogI2luY2x1ZGUgPGxpbnV4L2lkci5oPg0KICNpbmNsdWRlIDxsaW51eC9yaGFz aHRhYmxlLmg+DQotI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9w cmFuZG9tLmg+DQorI2luY2x1ZGUgPGxpbnV4L3NraXBsaXN0Lmg+DQogI2luY2x1ZGUgPG5ldC9p ZWVlODAyMTFfcmFkaW90YXAuaD4NCiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+DQogI2luY2x1 ZGUgPG5ldC9tYWM4MDIxMS5oPg0KQEAgLTg1NSw2ICs4NTYsNyBAQCBlbnVtIHR4cV9pbmZvX2Zs YWdzIHsNCiAJSUVFRTgwMjExX1RYUV9BTVBEVSwNCiAJSUVFRTgwMjExX1RYUV9OT19BTVNEVSwN CiAJSUVFRTgwMjExX1RYUV9TVE9QX05FVElGX1RYLA0KKwlJRUVFODAyMTFfVFhRX0ZPUkNFX0FD VElWRSwNCiB9Ow0KIA0KIC8qKg0KQEAgLTg3MSw3ICs4NzMsNiBAQCBzdHJ1Y3QgdHhxX2luZm8g ew0KIAlzdHJ1Y3QgZnFfdGluIHRpbjsNCiAJc3RydWN0IGNvZGVsX3ZhcnMgZGVmX2N2YXJzOw0K IAlzdHJ1Y3QgY29kZWxfc3RhdHMgY3N0YXRzOw0KLQlzdHJ1Y3QgcmJfbm9kZSBzY2hlZHVsZV9v cmRlcjsNCiANCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBmcmFnczsNCiAJdW5zaWduZWQgbG9uZyBm bGFnczsNCkBAIC0xMTkxLDggKzExOTIsNyBAQCBlbnVtIG1hYzgwMjExX3NjYW5fc3RhdGUgew0K ICAqDQogICogQGxvY2s6IHNwaW5sb2NrIHRoYXQgcHJvdGVjdHMgYWxsIHRoZSBmaWVsZHMgaW4g dGhpcyBzdHJ1Y3QNCiAgKiBAYWN0aXZlX3R4cXM6IHJidHJlZSBvZiBjdXJyZW50bHkgYmFja2xv Z2dlZCBxdWV1ZXMsIHNvcnRlZCBieSB2aXJ0dWFsIHRpbWUNCi0gKiBAc2NoZWR1bGVfcG9zOiB0 aGUgY3VycmVudCBwb3NpdGlvbiBtYWludGFpbmVkIHdoaWxlIGEgZHJpdmVyIHdhbGtzIHRoZSB0 cmVlDQotICogICAgICAgICAgICAgICAgd2l0aCBpZWVlODAyMTFfbmV4dF90eHEoKQ0KKyAqIEBz Y2hlZHVsZV9wb3M6IGxhc3QgdXNlZCBhaXJ0aW1lX2luZm8gbm9kZSB3aGlsZSBhIGRyaXZlciB3 YWxrcyB0aGUgDQorIHRyZWUNCiAgKiBAYWN0aXZlX2xpc3Q6IGxpc3Qgb2Ygc3RydWN0IGFpcnRp bWVfaW5mbyBzdHJ1Y3RzIHRoYXQgd2VyZSBhY3RpdmUgd2l0aGluDQogICogICAgICAgICAgICAg ICB0aGUgbGFzdCBBSVJUSU1FX0FDVElWRV9EVVJBVElPTiAoMTAwIG1zKSwgdXNlZCB0byBjb21w dXRlDQogICogICAgICAgICAgICAgICB3ZWlnaHRfc3VtDQpAQCAtMTIxMyw4ICsxMjEzLDggQEAg ZW51bSBtYWM4MDIxMV9zY2FuX3N0YXRlIHsNCiAgKi8NCiBzdHJ1Y3QgYWlydGltZV9zY2hlZF9p bmZvIHsNCiAJc3BpbmxvY2tfdCBsb2NrOw0KLQlzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgYWN0aXZl X3R4cXM7DQotCXN0cnVjdCByYl9ub2RlICpzY2hlZHVsZV9wb3M7DQorCXN0cnVjdCBhaXJ0aW1l X3NjaGVkX2xpc3QgYWN0aXZlX3R4cXM7DQorCXN0cnVjdCBhaXJ0aW1lX3NjaGVkX25vZGUgKnNj aGVkdWxlX3BvczsNCiAJc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfbGlzdDsNCiAJdTY0IGxhc3Rf d2VpZ2h0X3VwZGF0ZTsNCiAJdTY0IGxhc3Rfc2NoZWR1bGVfYWN0aXZpdHk7DQpAQCAtMTY3NCw2 ICsxNjc0LDI2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFpcnRpbWVfaW5mbyAqdG9fYWlydGlt ZV9pbmZvKHN0cnVjdCBpZWVlODAyMTFfdHhxICp0eHEpDQogCXJldHVybiAmc2RhdGEtPmFpcnRp bWVbdHhxLT5hY107DQogfQ0KIA0KK3N0YXRpYyBpbmxpbmUgaW50DQorYWlydGltZV9zY2hlZF9j bXAoc3RydWN0IGFpcnRpbWVfc2NoZWRfbGlzdCAqbGlzdCwNCisJCSAgc3RydWN0IGFpcnRpbWVf c2NoZWRfbm9kZSAqbjEsIHN0cnVjdCBhaXJ0aW1lX3NjaGVkX25vZGUgKm4yKSB7DQorCXN0cnVj dCBhaXJ0aW1lX2luZm8gKmExLCAqYTI7DQorDQorCWExID0gY29udGFpbmVyX29mKG4xLCBzdHJ1 Y3QgYWlydGltZV9pbmZvLCBzY2hlZHVsZV9vcmRlcik7DQorCWEyID0gY29udGFpbmVyX29mKG4y LCBzdHJ1Y3QgYWlydGltZV9pbmZvLCBzY2hlZHVsZV9vcmRlcik7DQorDQorCXJldHVybiBhMS0+ dl90X2N1ciAtIGEyLT52X3RfY3VyOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGlu dA0KK2FpcnRpbWVfc2NoZWRfc2VlZChzdHJ1Y3QgYWlydGltZV9zY2hlZF9saXN0ICpsaXN0KSB7 DQorCXJldHVybiBwcmFuZG9tX3UzMigpOw0KK30NCisNCitERUNMQVJFX1NLSVBMSVNUX0lNUEwo YWlydGltZV9zY2hlZCwgYWlydGltZV9zY2hlZF9jbXAsIA0KK2FpcnRpbWVfc2NoZWRfc2VlZCk7 DQorDQogLyogVG8gYXZvaWQgZGl2aXNpb25zIGluIHRoZSBmYXN0IHBhdGgsIHdlIGtlZXAgcHJl LWNvbXB1dGVkIHJlY2lwcm9jYWxzIGZvcg0KICAqIGFpcnRpbWUgd2VpZ2h0IGNhbGN1bGF0aW9u cy4gVGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgd2VpZ2h0cyB0byBrZWVwIHRyYWNrDQogICogb2Y6 IFRoZSBwZXItc3RhdGlvbiB3ZWlnaHQgYW5kIHRoZSBzdW0gb2Ygd2VpZ2h0cyBwZXIgcGh5Lg0K QEAgLTE3NjEsNiArMTc4MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2FpcnRpbWVfaW5m byhzdHJ1Y3QgYWlydGltZV9pbmZvICphaXJfaW5mbywNCiAJYWlyX2luZm8tPmFxbF9saW1pdF9o aWdoID0gYWlyX3NjaGVkLT5hcWxfdHhxX2xpbWl0X2hpZ2g7DQogCWFpcnRpbWVfd2VpZ2h0X3Nl dChhaXJfaW5mbywgSUVFRTgwMjExX0RFRkFVTFRfQUlSVElNRV9XRUlHSFQpOw0KIAlJTklUX0xJ U1RfSEVBRCgmYWlyX2luZm8tPmxpc3QpOw0KKwlhaXJ0aW1lX3NjaGVkX25vZGVfaW5pdCgmYWly X2luZm8tPnNjaGVkdWxlX29yZGVyKTsNCiB9DQogDQogc3RhdGljIGlubGluZSBpbnQgaWVlZTgw MjExX2Jzc2lkX21hdGNoKGNvbnN0IHU4ICpyYWRkciwgY29uc3QgdTggKmFkZHIpIGRpZmYgLS1n aXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uYyBpbmRleCA1YTM4 NWQ0MTQ2YjkuLjdkODU1MTY3Y2FmYiAxMDA2NDQNCi0tLSBhL25ldC9tYWM4MDIxMS9tYWluLmMN CisrKyBiL25ldC9tYWM4MDIxMS9tYWluLmMNCkBAIC03MDksNyArNzA5LDcgQEAgc3RydWN0IGll ZWU4MDIxMV9odyAqaWVlZTgwMjExX2FsbG9jX2h3X25tKHNpemVfdCBwcml2X2RhdGFfbGVuLA0K IAlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykgew0KIAkJc3RydWN0IGFp cnRpbWVfc2NoZWRfaW5mbyAqYWlyX3NjaGVkID0gJmxvY2FsLT5haXJ0aW1lW2ldOw0KIA0KLQkJ YWlyX3NjaGVkLT5hY3RpdmVfdHhxcyA9IFJCX1JPT1RfQ0FDSEVEOw0KKwkJYWlydGltZV9zY2hl ZF9saXN0X2luaXQoJmFpcl9zY2hlZC0+YWN0aXZlX3R4cXMpOw0KIAkJSU5JVF9MSVNUX0hFQUQo JmFpcl9zY2hlZC0+YWN0aXZlX2xpc3QpOw0KIAkJc3Bpbl9sb2NrX2luaXQoJmFpcl9zY2hlZC0+ bG9jayk7DQogCQlhaXJfc2NoZWQtPmFxbF90eHFfbGltaXRfbG93ID0gSUVFRTgwMjExX0RFRkFV TFRfQVFMX1RYUV9MSU1JVF9MOw0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5j IGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgaW5kZXggMmYxY2Y5ZDRlNjhkLi45NDgxYTZhYjE0 MDUgMTAwNjQ0DQotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYw0KKysrIGIvbmV0L21hYzgw MjExL3N0YV9pbmZvLmMNCkBAIC0xOTE0LDggKzE5MTQsNyBAQCB2b2lkIGllZWU4MDIxMV9yZWdp c3Rlcl9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfdHhxICp0eHEsDQogCWFpcl9zY2hlZCA9ICZs b2NhbC0+YWlydGltZVt0eHEtPmFjXTsNCiAJYWlyX2luZm8gPSB0b19haXJ0aW1lX2luZm8odHhx KTsNCiANCi0JaWYgKGxvY2FsLT5haXJ0aW1lX2ZsYWdzICYgQUlSVElNRV9VU0VfVFgpDQotCQlh aXJ0aW1lICs9IHR4X2FpcnRpbWU7DQorCWFpcnRpbWUgKz0gdHhfYWlydGltZTsNCiAJaWYgKGxv Y2FsLT5haXJ0aW1lX2ZsYWdzICYgQUlSVElNRV9VU0VfUlgpDQogCQlhaXJ0aW1lICs9IHJ4X2Fp cnRpbWU7DQogDQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmggYi9uZXQvbWFj ODAyMTEvc3RhX2luZm8uaCBpbmRleCAzNWMzOTBiZWRmYmEuLjliODc3NGU4ODlmNSAxMDA2NDQN Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oDQorKysgYi9uZXQvbWFjODAyMTEvc3RhX2lu Zm8uaA0KQEAgLTEzNSwxMSArMTM1LDE0IEBAIGVudW0gaWVlZTgwMjExX2FnZ19zdG9wX3JlYXNv biB7DQogI2RlZmluZSBBSVJUSU1FX1VTRV9UWAkJQklUKDApDQogI2RlZmluZSBBSVJUSU1FX1VT RV9SWAkJQklUKDEpDQogDQorREVDTEFSRV9TS0lQTElTVF9UWVBFKGFpcnRpbWVfc2NoZWQsIDUp Ow0KIA0KIHN0cnVjdCBhaXJ0aW1lX2luZm8gew0KKwlzdHJ1Y3QgYWlydGltZV9zY2hlZF9ub2Rl IHNjaGVkdWxlX29yZGVyOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxWzNdOw0KIAl1NjQg cnhfYWlydGltZTsNCiAJdTY0IHR4X2FpcnRpbWU7DQotCXU2NCB2X3Q7DQorCXU2NCB2X3QsIHZf dF9jdXI7DQogCXU2NCBsYXN0X3NjaGVkdWxlZDsNCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0Ow0K IAlhdG9taWNfdCBhcWxfdHhfcGVuZGluZzsgLyogRXN0aW1hdGVkIGFpcnRpbWUgZm9yIGZyYW1l cyBwZW5kaW5nICovIEBAIC0xNDcsNiArMTUwLDcgQEAgc3RydWN0IGFpcnRpbWVfaW5mbyB7DQog CXUzMiBhcWxfbGltaXRfaGlnaDsNCiAJdTMyIHdlaWdodF9yZWNpcHJvY2FsOw0KIAl1MTYgd2Vp Z2h0Ow0KKwl1OCB0eHFfaWR4Ow0KIH07DQogDQogdm9pZCBpZWVlODAyMTFfc3RhX3VwZGF0ZV9w ZW5kaW5nX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGRpZmYgLS1naXQg YS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jIGluZGV4IDBlNGVmYzA4Yzc2 Mi4uM2E4MTgyOWQyYTdhIDEwMDY0NA0KLS0tIGEvbmV0L21hYzgwMjExL3R4LmMNCisrKyBiL25l dC9tYWM4MDIxMS90eC5jDQpAQCAtMTksNiArMTksNyBAQA0KICNpbmNsdWRlIDxsaW51eC9yY3Vw ZGF0ZS5oPg0KICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4NCiAjaW5jbHVkZSA8bGludXgvdGlt ZWtlZXBpbmcuaD4NCisjaW5jbHVkZSA8bGludXgvcHJhbmRvbS5oPg0KICNpbmNsdWRlIDxuZXQv bmV0X25hbWVzcGFjZS5oPg0KICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+DQog I2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPg0KQEAgLTE0NzcsMTEgKzE0NzgsMTIgQEAgdm9pZCBp ZWVlODAyMTFfdHhxX2luaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsDQog CQkJc3RydWN0IHN0YV9pbmZvICpzdGEsDQogCQkJc3RydWN0IHR4cV9pbmZvICp0eHFpLCBpbnQg dGlkKQ0KIHsNCisJc3RydWN0IGFpcnRpbWVfaW5mbyAqYWlyX2luZm87DQorDQogCWZxX3Rpbl9p bml0KCZ0eHFpLT50aW4pOw0KIAljb2RlbF92YXJzX2luaXQoJnR4cWktPmRlZl9jdmFycyk7DQog CWNvZGVsX3N0YXRzX2luaXQoJnR4cWktPmNzdGF0cyk7DQogCV9fc2tiX3F1ZXVlX2hlYWRfaW5p dCgmdHhxaS0+ZnJhZ3MpOw0KLQlSQl9DTEVBUl9OT0RFKCZ0eHFpLT5zY2hlZHVsZV9vcmRlcik7 DQogDQogCXR4cWktPnR4cS52aWYgPSAmc2RhdGEtPnZpZjsNCiANCkBAIC0xNDkwLDcgKzE0OTIs NyBAQCB2b2lkIGllZWU4MDIxMV90eHFfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRh ICpzZGF0YSwNCiAJCXR4cWktPnR4cS50aWQgPSAwOw0KIAkJdHhxaS0+dHhxLmFjID0gSUVFRTgw MjExX0FDX0JFOw0KIA0KLQkJcmV0dXJuOw0KKwkJZ290byBvdXQ7DQogCX0NCiANCiAJaWYgKHRp ZCA9PSBJRUVFODAyMTFfTlVNX1RJRFMpIHsNCkBAIC0xNTEyLDYgKzE1MTQsMTIgQEAgdm9pZCBp ZWVlODAyMTFfdHhxX2luaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsDQog CXR4cWktPnR4cS5zdGEgPSAmc3RhLT5zdGE7DQogCXR4cWktPnR4cS50aWQgPSB0aWQ7DQogCXN0 YS0+c3RhLnR4cVt0aWRdID0gJnR4cWktPnR4cTsNCisNCitvdXQ6DQorCWFpcl9pbmZvID0gdG9f YWlydGltZV9pbmZvKCZ0eHFpLT50eHEpOw0KKwlhaXJfaW5mby0+dHhxW2Fpcl9pbmZvLT50eHFf aWR4KytdID0gJnR4cWktPnR4cTsNCisJaWYgKGFpcl9pbmZvLT50eHFfaWR4ID09IEFSUkFZX1NJ WkUoYWlyX2luZm8tPnR4cSkpDQorCQlhaXJfaW5mby0+dHhxX2lkeC0tOw0KIH0NCiANCiB2b2lk IGllZWU4MDIxMV90eHFfcHVyZ2Uoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIEBAIC0z NjMyLDYgKzM2NDAsOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX3R4X2RlcXVldWUoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsDQogCXN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSB0eDsNCiAJ aWVlZTgwMjExX3R4X3Jlc3VsdCByOw0KIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gdHhx LT52aWY7DQorCXUzMiBhaXJ0aW1lOw0KKwlib29sIGFtcGR1Ow0KIA0KIAlXQVJOX09OX09OQ0Uo c29mdGlycV9jb3VudCgpID09IDApOw0KIA0KQEAgLTM3OTAsMjEgKzM4MDAsMjYgQEAgc3RydWN0 IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0K IGVuY2FwX291dDoNCiAJSUVFRTgwMjExX1NLQl9DQihza2IpLT5jb250cm9sLnZpZiA9IHZpZjsN CiANCi0JaWYgKHZpZiAmJg0KLQkgICAgd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQobG9jYWwtPmh3 LndpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0FRTCkpIHsNCi0JCWJvb2wgYW1wZHUgPSB0eHEt PmFjICE9IElFRUU4MDIxMV9BQ19WTzsNCi0JCXUzMiBhaXJ0aW1lOw0KLQ0KLQkJYWlydGltZSA9 IGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIHZpZiwgdHhxLT5zdGEsDQot CQkJCQkJCSAgICAgc2tiLT5sZW4sIGFtcGR1KTsNCi0JCWlmIChhaXJ0aW1lKSB7DQotCQkJYWly dGltZSA9IGllZWU4MDIxMV9pbmZvX3NldF90eF90aW1lX2VzdChpbmZvLCBhaXJ0aW1lKTsNCi0J CQlpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHR4LnN0YSwNCi0J CQkJCQkJICAgICB0eHEtPmFjLA0KLQkJCQkJCQkgICAgIGFpcnRpbWUsDQotCQkJCQkJCSAgICAg ZmFsc2UpOw0KLQkJfQ0KLQl9DQorCWlmICghdmlmKQ0KKwkJcmV0dXJuIHNrYjsNCisNCisJYW1w ZHUgPSB0eHEtPmFjICE9IElFRUU4MDIxMV9BQ19WTzsNCisJYWlydGltZSA9IGllZWU4MDIxMV9j YWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIHZpZiwgdHhxLT5zdGEsDQorCQkJCQkJICAgICBz a2ItPmxlbiwgYW1wZHUpOw0KKwlpZiAoIWFpcnRpbWUpDQorCQlyZXR1cm4gc2tiOw0KKw0KKwlp ZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLT5ody53aXBoeSwgTkw4MDIxMV9FWFRf RkVBVFVSRV9BUUwpIHx8DQorCSAgICAhd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQobG9jYWwtPmh3 LndpcGh5LA0KKwkJCQkgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQUlSVElNRV9GQUlSTkVTUykp DQorCQlpZWVlODAyMTFfcmVnaXN0ZXJfYWlydGltZSh0eHEsIGFpcnRpbWUsIDApOw0KKw0KKwlp ZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLT5ody53aXBoeSwgTkw4MDIxMV9FWFRf RkVBVFVSRV9BUUwpKQ0KKwkJcmV0dXJuIHNrYjsNCisNCisJYWlydGltZSA9IGllZWU4MDIxMV9p bmZvX3NldF90eF90aW1lX2VzdChpbmZvLCBhaXJ0aW1lKTsNCisJaWVlZTgwMjExX3N0YV91cGRh dGVfcGVuZGluZ19haXJ0aW1lKGxvY2FsLCB0eC5zdGEsIHR4cS0+YWMsDQorCQkJCQkgICAgIGFp cnRpbWUsIGZhbHNlKTsNCiANCiAJcmV0dXJuIHNrYjsNCiANCkBAIC0zODE1LDg1ICszODMwLDk1 IEBAIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgIH0gIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4X2RlcXVldWUpOw0KIA0KK3N0 YXRpYyB2b2lkDQorYWlydGltZV9pbmZvX25leHRfdHhxX2lkeChzdHJ1Y3QgYWlydGltZV9pbmZv ICphaXJfaW5mbykgew0KKwlhaXJfaW5mby0+dHhxX2lkeCsrOw0KKwlpZiAoYWlyX2luZm8tPnR4 cV9pZHggPj0gQVJSQVlfU0laRShhaXJfaW5mby0+dHhxKSB8fA0KKwkgICAgIWFpcl9pbmZvLT50 eHFbYWlyX2luZm8tPnR4cV9pZHhdKQ0KKwkJYWlyX2luZm8tPnR4cV9pZHggPSAwOw0KK30NCisN CiBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LCB1OCBhYykgIHsNCiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBo d190b19sb2NhbChodyk7DQogCXN0cnVjdCBhaXJ0aW1lX3NjaGVkX2luZm8gKmFpcl9zY2hlZDsN CiAJdTY0IG5vdyA9IGt0aW1lX2dldF9jb2Fyc2VfYm9vdHRpbWVfbnMoKTsNCi0Jc3RydWN0IGll ZWU4MDIxMV90eHEgKnJldCA9IE5VTEw7DQorCXN0cnVjdCBhaXJ0aW1lX3NjaGVkX25vZGUgKm5v ZGUgPSBOVUxMOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxOw0KIAlzdHJ1Y3QgYWlydGlt ZV9pbmZvICphaXJfaW5mbzsNCiAJc3RydWN0IHR4cV9pbmZvICp0eHFpID0gTlVMTDsNCi0Jc3Ry dWN0IHJiX25vZGUgKm5vZGU7DQotCWJvb2wgZmlyc3QgPSBmYWxzZTsNCisJdTggdHhxX2lkeDsN CiANCiAJYWlyX3NjaGVkID0gJmxvY2FsLT5haXJ0aW1lW2FjXTsNCiAJc3Bpbl9sb2NrX2JoKCZh aXJfc2NoZWQtPmxvY2spOw0KIA0KLQlub2RlID0gYWlyX3NjaGVkLT5zY2hlZHVsZV9wb3M7DQot DQogYmVnaW46DQotCWlmICghbm9kZSkgew0KLQkJbm9kZSA9IHJiX2ZpcnN0X2NhY2hlZCgmYWly X3NjaGVkLT5hY3RpdmVfdHhxcyk7DQotCQlmaXJzdCA9IHRydWU7DQotCX0gZWxzZSB7DQotCQlu b2RlID0gcmJfbmV4dChub2RlKTsNCi0JfQ0KKwl0eHEgPSBOVUxMOw0KKwlpZiAoYWlydGltZV9z Y2hlZF9wZWVrKCZhaXJfc2NoZWQtPmFjdGl2ZV90eHFzKSA9PQ0KKwkgICAgYWlyX3NjaGVkLT5z Y2hlZHVsZV9wb3MpDQorCQlnb3RvIG91dDsNCiANCisJbm9kZSA9IGFpcnRpbWVfc2NoZWRfZGVx dWV1ZSgmYWlyX3NjaGVkLT5hY3RpdmVfdHhxcyk7DQogCWlmICghbm9kZSkNCiAJCWdvdG8gb3V0 Ow0KIA0KLQl0eHFpID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCB0eHFfaW5mbywgc2NoZWR1 bGVfb3JkZXIpOw0KLQlhaXJfaW5mbyA9IHRvX2FpcnRpbWVfaW5mbygmdHhxaS0+dHhxKTsNCisJ YWlyX2luZm8gPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGFpcnRpbWVfaW5mbywgc2NoZWR1 bGVfb3JkZXIpOw0KIA0KLQlpZiAoYWlyX2luZm8tPnZfdCA+IGFpcl9zY2hlZC0+dl90ICYmDQot CSAgICAoIWZpcnN0IHx8ICFhaXJ0aW1lX2NhdGNodXBfdl90KGFpcl9zY2hlZCwgYWlyX2luZm8t PnZfdCwgbm93KSkpDQotCQlnb3RvIG91dDsNCi0NCi0JaWYgKCFpZWVlODAyMTFfdHhxX2FpcnRp bWVfY2hlY2soaHcsICZ0eHFpLT50eHEpKSB7DQotCQlmaXJzdCA9IGZhbHNlOw0KKwlhaXJ0aW1l X2luZm9fbmV4dF90eHFfaWR4KGFpcl9pbmZvKTsNCisJdHhxX2lkeCA9IGFpcl9pbmZvLT50eHFf aWR4Ow0KKwl0eHEgPSBhaXJfaW5mby0+dHhxW3R4cV9pZHhdOw0KKwlpZiAoIXR4cSB8fCAhaWVl ZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKGh3LCB0eHEpKQ0KIAkJZ290byBiZWdpbjsNCisNCisJ d2hpbGUgKDEpIHsNCisJCXR4cWkgPSB0b190eHFfaW5mbyh0eHEpOw0KKwkJaWYgKHRlc3RfYW5k X2NsZWFyX2JpdChJRUVFODAyMTFfVFhRX0ZPUkNFX0FDVElWRSwgJnR4cWktPmZsYWdzKSkNCisJ CQlicmVhazsNCisNCisJCWlmICh0eHFfaGFzX3F1ZXVlKHR4cSkpDQorCQkJYnJlYWs7DQorDQor CQlhaXJ0aW1lX2luZm9fbmV4dF90eHFfaWR4KGFpcl9pbmZvKTsNCisJCXR4cSA9IGFpcl9pbmZv LT50eHFbYWlyX2luZm8tPnR4cV9pZHhdOw0KKwkJaWYgKHR4cV9pZHggPT0gYWlyX2luZm8tPnR4 cV9pZHgpDQorCQkJZ290byBiZWdpbjsNCisJfQ0KKw0KKwlpZiAoYWlyX2luZm8tPnZfdF9jdXIg PiBhaXJfc2NoZWQtPnZfdCkgew0KKwkJaWYgKG5vZGUgPT0gYWlydGltZV9zY2hlZF9wZWVrKCZh aXJfc2NoZWQtPmFjdGl2ZV90eHFzKSkNCisJCQlhaXJ0aW1lX2NhdGNodXBfdl90KGFpcl9zY2hl ZCwgYWlyX2luZm8tPnZfdF9jdXIsIG5vdyk7DQogCX0NCiANCiAJYWlyX3NjaGVkLT5zY2hlZHVs ZV9wb3MgPSBub2RlOw0KIAlhaXJfc2NoZWQtPmxhc3Rfc2NoZWR1bGVfYWN0aXZpdHkgPSBub3c7 DQotCXJldCA9ICZ0eHFpLT50eHE7DQogb3V0Og0KIAlzcGluX3VubG9ja19iaCgmYWlyX3NjaGVk LT5sb2NrKTsNCi0JcmV0dXJuIHJldDsNCisJcmV0dXJuIHR4cTsNCiB9DQogRVhQT1JUX1NZTUJP TChpZWVlODAyMTFfbmV4dF90eHEpOw0KIA0KLXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX2luc2Vy dF90eHEoc3RydWN0IHJiX3Jvb3RfY2FjaGVkICpyb290LA0KK3N0YXRpYyB2b2lkIF9faWVlZTgw MjExX2luc2VydF90eHEoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsDQorCQkJCSAgIHN0 cnVjdCBhaXJ0aW1lX3NjaGVkX2luZm8gKmFpcl9zY2hlZCwNCiAJCQkJICAgc3RydWN0IHR4cV9p bmZvICp0eHFpKQ0KIHsNCi0Jc3RydWN0IHJiX25vZGUgKipuZXcgPSAmcm9vdC0+cmJfcm9vdC5y Yl9ub2RlOw0KLQlzdHJ1Y3QgYWlydGltZV9pbmZvICpvbGRfYWlyLCAqbmV3X2FpcjsNCi0Jc3Ry dWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7DQotCXN0cnVjdCB0eHFfaW5mbyAqX190eHFpOw0K LQlib29sIGxlZnRtb3N0ID0gdHJ1ZTsNCi0NCi0Jd2hpbGUgKCpuZXcpIHsNCi0JCXBhcmVudCA9 ICpuZXc7DQotCQlfX3R4cWkgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCB0eHFfaW5mbywgc2No ZWR1bGVfb3JkZXIpOw0KLQkJb2xkX2FpciA9IHRvX2FpcnRpbWVfaW5mbygmX190eHFpLT50eHEp Ow0KLQkJbmV3X2FpciA9IHRvX2FpcnRpbWVfaW5mbygmdHhxaS0+dHhxKTsNCi0NCi0JCWlmIChu ZXdfYWlyLT52X3QgPD0gb2xkX2Fpci0+dl90KSB7DQotCQkJbmV3ID0gJnBhcmVudC0+cmJfbGVm dDsNCi0JCX0gZWxzZSB7DQotCQkJbmV3ID0gJnBhcmVudC0+cmJfcmlnaHQ7DQotCQkJbGVmdG1v c3QgPSBmYWxzZTsNCi0JCX0NCisJc3RydWN0IGFpcnRpbWVfaW5mbyAqYWlyX2luZm8gPSB0b19h aXJ0aW1lX2luZm8oJnR4cWktPnR4cSk7DQorCXUzMiBhcWxfdGltZSA9IDA7DQorDQorCWlmICh3 aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC0+aHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRV UkVfQVFMKSkgew0KKwkgICAgYXFsX3RpbWUgPSBhdG9taWNfcmVhZCgmYWlyX2luZm8tPmFxbF90 eF9wZW5kaW5nKTsNCisJICAgIGFxbF90aW1lICo9IGFpcl9pbmZvLT53ZWlnaHRfcmVjaXByb2Nh bDsNCisJICAgIGFxbF90aW1lID4+PSBJRUVFODAyMTFfUkVDSVBST0NBTF9TSElGVF9TVEEgLSAN CitJRUVFODAyMTFfV0VJR0hUX1NISUZUOw0KIAl9DQogDQotCXJiX2xpbmtfbm9kZSgmdHhxaS0+ c2NoZWR1bGVfb3JkZXIsIHBhcmVudCwgbmV3KTsNCi0JcmJfaW5zZXJ0X2NvbG9yX2NhY2hlZCgm dHhxaS0+c2NoZWR1bGVfb3JkZXIsIHJvb3QsIGxlZnRtb3N0KTsNCisJYWlydGltZV9zY2hlZF9k ZWxldGUoJmFpcl9zY2hlZC0+YWN0aXZlX3R4cXMsICZhaXJfaW5mby0+c2NoZWR1bGVfb3JkZXIp Ow0KKwlhaXJfaW5mby0+dl90X2N1ciA9IGFpcl9pbmZvLT52X3QgKyBhcWxfdGltZTsNCisJYWly dGltZV9zY2hlZF9pbnNlcnQoJmFpcl9zY2hlZC0+YWN0aXZlX3R4cXMsIA0KKyZhaXJfaW5mby0+ c2NoZWR1bGVfb3JkZXIpOw0KIH0NCiANCiB2b2lkIGllZWU4MDIxMV9yZXNvcnRfdHhxKHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LA0KIAkJCSAgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSkNCiB7 DQotCXN0cnVjdCBhaXJ0aW1lX2luZm8gKmFpcl9pbmZvID0gdG9fYWlydGltZV9pbmZvKHR4cSk7 DQogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOw0KIAlz dHJ1Y3QgdHhxX2luZm8gKnR4cWkgPSB0b190eHFfaW5mbyh0eHEpOw0KIAlzdHJ1Y3QgYWlydGlt ZV9zY2hlZF9pbmZvICphaXJfc2NoZWQ7DQpAQCAtMzkwMSw0MSArMzkyNiw3IEBAIHZvaWQgaWVl ZTgwMjExX3Jlc29ydF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQogCWFpcl9zY2hlZCA9 ICZsb2NhbC0+YWlydGltZVt0eHEtPmFjXTsNCiANCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYWly X3NjaGVkLT5sb2NrKTsNCi0NCi0JaWYgKCFSQl9FTVBUWV9OT0RFKCZ0eHFpLT5zY2hlZHVsZV9v cmRlcikpIHsNCi0JCXN0cnVjdCBhaXJ0aW1lX2luZm8gKmFfcHJldiA9IE5VTEwsICphX25leHQg PSBOVUxMOw0KLQkJc3RydWN0IHR4cV9pbmZvICp0X3ByZXYsICp0X25leHQ7DQotCQlzdHJ1Y3Qg cmJfbm9kZSAqbl9wcmV2LCAqbl9uZXh0Ow0KLQ0KLQkJLyogRXJhc2luZyBhIG5vZGUgY2FuIGNh dXNlIGFuIGV4cGVuc2l2ZSByZWJhbGFuY2luZyBvcGVyYXRpb24sDQotCQkgKiBzbyB3ZSBjaGVj ayB0aGUgcHJldmlvdXMgYW5kIG5leHQgbm9kZXMgZmlyc3QgYW5kIG9ubHkgcmVtb3ZlDQotCQkg KiBhbmQgcmUtaW5zZXJ0IGlmIHRoZSBjdXJyZW50IG5vZGUgaXMgbm90IGFscmVhZHkgaW4gdGhl DQotCQkgKiBjb3JyZWN0IHBvc2l0aW9uLg0KLQkJICovDQotCQlpZiAoKG5fcHJldiA9IHJiX3By ZXYoJnR4cWktPnNjaGVkdWxlX29yZGVyKSkgIT0gTlVMTCkgew0KLQkJCXRfcHJldiA9IGNvbnRh aW5lcl9vZihuX3ByZXYsIHN0cnVjdCB0eHFfaW5mbywNCi0JCQkJCSAgICAgIHNjaGVkdWxlX29y ZGVyKTsNCi0JCQlhX3ByZXYgPSB0b19haXJ0aW1lX2luZm8oJnRfcHJldi0+dHhxKTsNCi0JCX0N Ci0NCi0JCWlmICgobl9uZXh0ID0gcmJfbmV4dCgmdHhxaS0+c2NoZWR1bGVfb3JkZXIpKSAhPSBO VUxMKSB7DQotCQkJdF9uZXh0ID0gY29udGFpbmVyX29mKG5fbmV4dCwgc3RydWN0IHR4cV9pbmZv LA0KLQkJCQkJICAgICAgc2NoZWR1bGVfb3JkZXIpOw0KLQkJCWFfbmV4dCA9IHRvX2FpcnRpbWVf aW5mbygmdF9uZXh0LT50eHEpOw0KLQkJfQ0KLQ0KLQkJaWYgKCghYV9wcmV2IHx8IGFfcHJldi0+ dl90IDw9IGFpcl9pbmZvLT52X3QpICYmDQotCQkgICAgKCFhX25leHQgfHwgYV9uZXh0LT52X3Qg PiBhaXJfaW5mby0+dl90KSkNCi0JCQlyZXR1cm47DQotDQotCQlpZiAoYWlyX3NjaGVkLT5zY2hl ZHVsZV9wb3MgPT0gJnR4cWktPnNjaGVkdWxlX29yZGVyKQ0KLQkJCWFpcl9zY2hlZC0+c2NoZWR1 bGVfcG9zID0gbl9wcmV2Ow0KLQ0KLQkJcmJfZXJhc2VfY2FjaGVkKCZ0eHFpLT5zY2hlZHVsZV9v cmRlciwNCi0JCQkJJmFpcl9zY2hlZC0+YWN0aXZlX3R4cXMpOw0KLQkJUkJfQ0xFQVJfTk9ERSgm dHhxaS0+c2NoZWR1bGVfb3JkZXIpOw0KLQkJX19pZWVlODAyMTFfaW5zZXJ0X3R4cSgmYWlyX3Nj aGVkLT5hY3RpdmVfdHhxcywgdHhxaSk7DQotCX0NCisJX19pZWVlODAyMTFfaW5zZXJ0X3R4cShs b2NhbCwgYWlyX3NjaGVkLCB0eHFpKTsNCiB9DQogDQogdm9pZCBpZWVlODAyMTFfdXBkYXRlX2Fp cnRpbWVfd2VpZ2h0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBAQCAtMzk4NCw3ICsz OTc1LDcgQEAgdm9pZCBpZWVlODAyMTFfc2NoZWR1bGVfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LA0KIAl3YXNfYWN0aXZlID0gYWlydGltZV9pc19hY3RpdmUoYWlyX2luZm8sIG5vdyk7DQog CWFpcnRpbWVfc2V0X2FjdGl2ZShhaXJfc2NoZWQsIGFpcl9pbmZvLCBub3cpOw0KIA0KLQlpZiAo IVJCX0VNUFRZX05PREUoJnR4cWktPnNjaGVkdWxlX29yZGVyKSkNCisJaWYgKGFpcnRpbWVfc2No ZWRfaXNfcXVldWVkKCZhaXJfaW5mby0+c2NoZWR1bGVfb3JkZXIpKQ0KIAkJZ290byBvdXQ7DQog DQogCS8qIElmIHRoZSBzdGF0aW9uIGhhcyBiZWVuIGluYWN0aXZlIGZvciBhIHdoaWxlLCBjYXRj aCB1cCBpdHMgdl90IHNvIGl0IEBAIC0zOTk2LDcgKzM5ODcsNyBAQCB2b2lkIGllZWU4MDIxMV9z Y2hlZHVsZV90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQogCQlhaXJfaW5mby0+dl90ID0g YWlyX3NjaGVkLT52X3Q7DQogDQogCWllZWU4MDIxMV91cGRhdGVfYWlydGltZV93ZWlnaHQobG9j YWwsIGFpcl9zY2hlZCwgbm93LCAhd2FzX2FjdGl2ZSk7DQotCV9faWVlZTgwMjExX2luc2VydF90 eHEoJmFpcl9zY2hlZC0+YWN0aXZlX3R4cXMsIHR4cWkpOw0KKwlfX2llZWU4MDIxMV9pbnNlcnRf dHhxKGxvY2FsLCBhaXJfc2NoZWQsIHR4cWkpOw0KIA0KIG91dDoNCiAJc3Bpbl91bmxvY2tfYmgo JmFpcl9zY2hlZC0+bG9jayk7DQpAQCAtNDAyMiwxOSArNDAxMywxMCBAQCBzdGF0aWMgdm9pZCBf X2llZWU4MDIxMV91bnNjaGVkdWxlX3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCiAJCWll ZWU4MDIxMV91cGRhdGVfYWlydGltZV93ZWlnaHQobG9jYWwsIGFpcl9zY2hlZCwgMCwgdHJ1ZSk7 DQogCX0NCiANCi0JaWYgKFJCX0VNUFRZX05PREUoJnR4cWktPnNjaGVkdWxlX29yZGVyKSkNCi0J CXJldHVybjsNCi0NCi0JaWYgKGFpcl9zY2hlZC0+c2NoZWR1bGVfcG9zID09ICZ0eHFpLT5zY2hl ZHVsZV9vcmRlcikNCi0JCWFpcl9zY2hlZC0+c2NoZWR1bGVfcG9zID0gcmJfcHJldigmdHhxaS0+ c2NoZWR1bGVfb3JkZXIpOw0KLQ0KKwlhaXJ0aW1lX3NjaGVkX2RlbGV0ZSgmYWlyX3NjaGVkLT5h Y3RpdmVfdHhxcywgDQorJmFpcl9pbmZvLT5zY2hlZHVsZV9vcmRlcik7DQogCWlmICghcHVyZ2Up DQogCQlhaXJ0aW1lX3NldF9hY3RpdmUoYWlyX3NjaGVkLCBhaXJfaW5mbywNCiAJCQkJICAga3Rp bWVfZ2V0X2NvYXJzZV9ib290dGltZV9ucygpKTsNCi0NCi0JcmJfZXJhc2VfY2FjaGVkKCZ0eHFp LT5zY2hlZHVsZV9vcmRlciwNCi0JCQkmYWlyX3NjaGVkLT5hY3RpdmVfdHhxcyk7DQotCVJCX0NM RUFSX05PREUoJnR4cWktPnNjaGVkdWxlX29yZGVyKTsNCiB9DQogDQogdm9pZCBpZWVlODAyMTFf dW5zY2hlZHVsZV90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIEBAIC00MDU0LDE0ICs0MDM2 LDI0IEBAIHZvaWQgaWVlZTgwMjExX3JldHVybl90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs ICB7DQogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOw0K IAlzdHJ1Y3QgdHhxX2luZm8gKnR4cWkgPSB0b190eHFfaW5mbyh0eHEpOw0KKwlzdHJ1Y3QgYWly dGltZV9zY2hlZF9pbmZvICphaXJfc2NoZWQ7DQorCXN0cnVjdCBhaXJ0aW1lX2luZm8gKmFpcl9p bmZvOw0KIA0KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5haXJ0aW1lW3R4cS0+YWNdLmxvY2spOw0K KwlhaXJfc2NoZWQgPSAmbG9jYWwtPmFpcnRpbWVbdHhxLT5hY107DQorCWFpcl9pbmZvID0gdG9f YWlydGltZV9pbmZvKCZ0eHFpLT50eHEpOw0KIA0KLQlpZiAoIVJCX0VNUFRZX05PREUoJnR4cWkt PnNjaGVkdWxlX29yZGVyKSAmJiAhZm9yY2UgJiYNCi0JICAgICF0eHFfaGFzX3F1ZXVlKHR4cSkp DQotCQlfX2llZWU4MDIxMV91bnNjaGVkdWxlX3R4cShodywgdHhxLCBmYWxzZSk7DQorCWlmIChm b3JjZSkNCisJCXNldF9iaXQoSUVFRTgwMjExX1RYUV9GT1JDRV9BQ1RJVkUsICZ0eHFpLT5mbGFn cyk7DQogDQotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YWlydGltZVt0eHEtPmFjXS5sb2NrKTsN CisJc3Bpbl9sb2NrX2JoKCZhaXJfc2NoZWQtPmxvY2spOw0KKwlpZiAoIWllZWU4MDIxMV90eHFf YWlydGltZV9jaGVjayhodywgJnR4cWktPnR4cSkpDQorCSAgICBhaXJ0aW1lX3NjaGVkX2RlbGV0 ZSgmYWlyX3NjaGVkLT5hY3RpdmVfdHhxcywNCisJCQkJICZhaXJfaW5mby0+c2NoZWR1bGVfb3Jk ZXIpOw0KKwllbHNlIGlmICh0eHFfaGFzX3F1ZXVlKHR4cSkgfHwgZm9yY2UpDQorCQlfX2llZWU4 MDIxMV9pbnNlcnRfdHhxKGxvY2FsLCBhaXJfc2NoZWQsIHR4cWkpOw0KKwllbHNlDQorCQlfX2ll ZWU4MDIxMV91bnNjaGVkdWxlX3R4cShodywgdHhxLCBmYWxzZSk7DQorCXNwaW5fdW5sb2NrX2Jo KCZhaXJfc2NoZWQtPmxvY2spOw0KIH0NCiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yZXR1cm5f dHhxKTsNCiANCkBAIC00MTAwLDQ2ICs0MDkyLDQ4IEBAIEVYUE9SVF9TWU1CT0woaWVlZTgwMjEx X3R4cV9haXJ0aW1lX2NoZWNrKTsNCiBib29sIGllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0KHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKQ0K IHsNCi0Jc3RydWN0IHR4cV9pbmZvICpmaXJzdF90eHFpID0gTlVMTCwgKnR4cWkgPSB0b190eHFf aW5mbyh0eHEpOw0KKwlzdHJ1Y3QgdHhxX2luZm8gKnR4cWkgPSB0b190eHFfaW5mbyh0eHEpOw0K IAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsNCiAJc3Ry dWN0IGFpcnRpbWVfc2NoZWRfaW5mbyAqYWlyX3NjaGVkOw0KKwlzdHJ1Y3QgYWlydGltZV9zY2hl ZF9ub2RlICpub2RlID0gTlVMTDsNCiAJc3RydWN0IGFpcnRpbWVfaW5mbyAqYWlyX2luZm87DQot CXN0cnVjdCByYl9ub2RlICpub2RlID0gTlVMTDsNCiAJYm9vbCByZXQgPSBmYWxzZTsNCisJdTMy IGFxbF9zbGFjazsNCiAJdTY0IG5vdzsNCiANCi0NCiAJaWYgKCFpZWVlODAyMTFfdHhxX2FpcnRp bWVfY2hlY2soaHcsIHR4cSkpDQogCQlyZXR1cm4gZmFsc2U7DQogDQogCWFpcl9zY2hlZCA9ICZs b2NhbC0+YWlydGltZVt0eHEtPmFjXTsNCiAJc3Bpbl9sb2NrX2JoKCZhaXJfc2NoZWQtPmxvY2sp Ow0KIA0KLQlpZiAoUkJfRU1QVFlfTk9ERSgmdHhxaS0+c2NoZWR1bGVfb3JkZXIpKQ0KLQkJZ290 byBvdXQ7DQotDQogCW5vdyA9IGt0aW1lX2dldF9jb2Fyc2VfYm9vdHRpbWVfbnMoKTsNCiANCiAJ LyogTGlrZSBpbiBpZWVlODAyMTFfbmV4dF90eHEoKSwgbWFrZSBzdXJlIHRoZSBmaXJzdCBzdGF0 aW9uIGluIHRoZQ0KIAkgKiBzY2hlZHVsaW5nIG9yZGVyIGlzIGVsaWdpYmxlIGZvciB0cmFuc21p c3Npb24gdG8gYXZvaWQgc3RhcnZhdGlvbi4NCiAJICovDQotCW5vZGUgPSByYl9maXJzdF9jYWNo ZWQoJmFpcl9zY2hlZC0+YWN0aXZlX3R4cXMpOw0KKwlub2RlID0gYWlydGltZV9zY2hlZF9wZWVr KCZhaXJfc2NoZWQtPmFjdGl2ZV90eHFzKTsNCiAJaWYgKG5vZGUpIHsNCi0JCWZpcnN0X3R4cWkg PSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IHR4cV9pbmZvLA0KLQkJCQkJICBzY2hlZHVsZV9v cmRlcik7DQotCQlhaXJfaW5mbyA9IHRvX2FpcnRpbWVfaW5mbygmZmlyc3RfdHhxaS0+dHhxKTsN CisJCWFpcl9pbmZvID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBhaXJ0aW1lX2luZm8sDQor CQkJCQlzY2hlZHVsZV9vcmRlcik7DQogDQogCQlpZiAoYWlyX3NjaGVkLT52X3QgPCBhaXJfaW5m by0+dl90KQ0KIAkJCWFpcnRpbWVfY2F0Y2h1cF92X3QoYWlyX3NjaGVkLCBhaXJfaW5mby0+dl90 LCBub3cpOw0KIAl9DQogDQogCWFpcl9pbmZvID0gdG9fYWlydGltZV9pbmZvKCZ0eHFpLT50eHEp Ow0KLQlpZiAoYWlyX2luZm8tPnZfdCA8PSBhaXJfc2NoZWQtPnZfdCkgew0KKwlhcWxfc2xhY2sg PSBhaXJfaW5mby0+YXFsX2xpbWl0X2xvdzsNCisJYXFsX3NsYWNrICo9IGFpcl9pbmZvLT53ZWln aHRfcmVjaXByb2NhbDsNCisJYXFsX3NsYWNrID4+PSBJRUVFODAyMTFfUkVDSVBST0NBTF9TSElG VF9TVEEgLSBJRUVFODAyMTFfV0VJR0hUX1NISUZUOw0KKwkvKg0KKwkgKiBhZGQgZXh0cmEgc2xh Y2sgb2YgYXFsX2xpbWl0X2xvdyBpbiBvcmRlciB0byBhdm9pZCBxdWV1ZQ0KKwkgKiBzdGFydmF0 aW9uIHdoZW4gYnlwYXNzaW5nIG5vcm1hbCBzY2hlZHVsaW5nIG9yZGVyDQorCSAqLw0KKwlpZiAo YWlyX2luZm8tPnZfdCA8PSBhaXJfc2NoZWQtPnZfdCArIGFxbF9zbGFjaykgew0KIAkJYWlyX3Nj aGVkLT5sYXN0X3NjaGVkdWxlX2FjdGl2aXR5ID0gbm93Ow0KIAkJcmV0ID0gdHJ1ZTsNCiAJfQ0K IA0KLW91dDoNCiAJc3Bpbl91bmxvY2tfYmgoJmFpcl9zY2hlZC0+bG9jayk7DQogCXJldHVybiBy ZXQ7DQogfQ0KQEAgLTQxNTAsOSArNDE0NCw3IEBAIHZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVs ZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpDQogCXN0cnVjdCBpZWVlODAy MTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOw0KIAlzdHJ1Y3QgYWlydGltZV9zY2hl ZF9pbmZvICphaXJfc2NoZWQgPSAmbG9jYWwtPmFpcnRpbWVbYWNdOw0KIA0KLQlzcGluX2xvY2tf YmgoJmFpcl9zY2hlZC0+bG9jayk7DQogCWFpcl9zY2hlZC0+c2NoZWR1bGVfcG9zID0gTlVMTDsN Ci0Jc3Bpbl91bmxvY2tfYmgoJmFpcl9zY2hlZC0+bG9jayk7DQogfQ0KIEVYUE9SVF9TWU1CT0wo aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydCk7DQogDQotLQ0KMi4zNi4xDQoNCg==