Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp2310035rwd; Fri, 9 Jun 2023 09:20:38 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6jcdKMOuqSdAWCK2y2rofV8hU0cG0CxXiTWE1kFTg8sfwz0iKKvJUiP231enoerlZIRJ3Y X-Received: by 2002:aa7:88c2:0:b0:65c:2ea:2c5e with SMTP id k2-20020aa788c2000000b0065c02ea2c5emr2038412pff.29.1686327637646; Fri, 09 Jun 2023 09:20:37 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1686327637; cv=pass; d=google.com; s=arc-20160816; b=rRbubYfjz9sNNpvN+oA1xgVxrqgKJNXgQ1uxHlkypfBMHEUqo7mtrly1SAaXmZbkcx Y43HljzE0KB9dI4/xpaCi3FzYD1EbbUxO4RgiKDI1zHXo1VjYzBr102yojbuzfSZDyHT jzkehcaI4P4aTcF2VV1YUR6Tqhmta0N7tw3P856h+dce8GqH0lSMFP7DdziV+VeCyvwY mK+JcL755cxvFDLjd0gcjDWK1/Oqk9uDawoy0jrxKmenTZPEEhbFsQcx1Vucjcs5lb+a N+vxALJdFu3GrTuuTSTIs0HTKSgLRB22CIUEj29hDJnqRiIP7FHbLo8T68gFCvD7wu2L ddYA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature:dkim-signature; bh=tKZ5CDO0wwZt+BtEAvhYQz1v8Dgf0rgJ3nBGEAKS0kI=; b=KiIh0qtmoRAowu7202he78BTDy17Z64DFlv8kZnG6iYST1a1IG4Xk3vXP1qAu9yU6B kUdnhjCSUOchLlCbFpB8T+RubO4/R7UOAhETi65CRDdMvssJE/YqyciVDX7gUwzBQfG8 f9UHAf2F/3TAc85ujhB0jKPJWK/E/VMCO30Hp8w6niQWDN9bNfWC3d8vJ36vGNbnskzt MIchMLy6L+eTbo1eQSJltskP1f+1vZ3shfBJdB78WEYPwVhE/QxrqJKHks+gbxVnSkNo vTLIvfZtZE+iPxjuJGK9/5MThdCh1dVzc3ShzkX7hZp1T6D8ArLHYMqz3iDJ+RzYSYa7 JTyg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=TajaDpCi; dkim=pass header.i=@mediateko365.onmicrosoft.com header.s=selector2-mediateko365-onmicrosoft-com header.b=ZxlvaaiZ; 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=pass (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 v5-20020a637a05000000b0050309caf60esi2828994pgc.750.2023.06.09.09.20.27; Fri, 09 Jun 2023 09:20:37 -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=@mediatek.com header.s=dk header.b=TajaDpCi; dkim=pass header.i=@mediateko365.onmicrosoft.com header.s=selector2-mediateko365-onmicrosoft-com header.b=ZxlvaaiZ; 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=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231828AbjFIQPu (ORCPT + 61 others); Fri, 9 Jun 2023 12:15:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60732 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231739AbjFIQPs (ORCPT ); Fri, 9 Jun 2023 12:15:48 -0400 Received: from mailgw02.mediatek.com (unknown [210.61.82.184]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3C19535AD for ; Fri, 9 Jun 2023 09:15:43 -0700 (PDT) X-UUID: de4f169e06e011eeb20a276fd37b9834-20230610 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=MIME-Version:Content-Transfer-Encoding:Content-ID:Content-Type:In-Reply-To:References:Message-ID:Date:Subject:CC:To:From; bh=tKZ5CDO0wwZt+BtEAvhYQz1v8Dgf0rgJ3nBGEAKS0kI=; b=TajaDpCiVWItzr/TBfcsm7sTbjIAiZhXSJ7DKC/t7+UAbkzx3khqaeekkSZtf/nQr2MRA4/SXexV0ZvrYKXoE2JfnEtuB4tpL0l93pw/QpfIOIpRo9lLpmOImRX6sq+SbPca05PNAZsqUz+hULua/zsJcQAa3vfoBKr0+mxQdvc=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.26,REQID:d7b4ebf4-d35a-4423-a017-36e8899e865b,IP:0,U RL:0,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION: release,TS:0 X-CID-META: VersionHash:cb9a4e1,CLOUDID:0a37f33d-de1e-4348-bc35-c96f92f1dcbb,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:102,TC:nil,Content:0,EDM:-3,IP:nil,U RL:11|1,File:nil,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0,AV:0,LES:1,SPR: NO X-CID-BVR: 0,NGT X-CID-BAS: 0,NGT,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR,TF_CID_SPAM_ULN X-UUID: de4f169e06e011eeb20a276fd37b9834-20230610 Received: from mtkmbs13n2.mediatek.inc [(172.21.101.108)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1334052352; Sat, 10 Jun 2023 00:15:36 +0800 Received: from mtkmbs10n2.mediatek.inc (172.21.101.183) by mtkmbs11n1.mediatek.inc (172.21.101.185) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.26; Sat, 10 Jun 2023 00:15:35 +0800 Received: from APC01-TYZ-obe.outbound.protection.outlook.com (172.21.101.237) by mtkmbs10n2.mediatek.inc (172.21.101.183) with Microsoft SMTP Server id 15.2.1118.26 via Frontend Transport; Sat, 10 Jun 2023 00:15:35 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lGTPAYpb7ZuY56ymaW9DuLZlfLToFsZDi+JVHI+EFW9WqueJRtN3Mxc9HvEb3GU6DyA03dE7CldK6CkU9yrCMN+vzMOljSce10jgCrVqFkjr0RVnR6yS07Rr45FI/VFPn+cyFB8Bnvi+0Jrl62M9HAtqnLn2Vcl+YWSTsBESZkeG/gcFfE8c2Z/8pzCduIULssqtQg8ImKYHVWS6/NW+Vs2kVmoMiZJFBaY87oNOZoeJI74j/8R3xwsdrDt7bJLQnG9R/J2vKio9i5mZTciFJEyAvyFtsg4NMfR8ZOKYpYPectxLnRRS6XH0pEqldYY5NF37c69YkQd0Zh5TlGm0Gg== 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=tKZ5CDO0wwZt+BtEAvhYQz1v8Dgf0rgJ3nBGEAKS0kI=; b=hH9cu+2HyNTM6RFNmlBoWUREklM+ki5uOaghQCzkkoucTvTVq8MQPhBQ2ZzFYgJDopaduNBMoQ5ul3wnDE2GLHGu37FK+zR4jd1jD+clIE17xC6vqLKg25K8XTtFO3DwWaRiB7f/pb8Li1mjxYcBxpM2vSF8xYnwqe+ntGh5Mt4/xl7by+droKZNpmXl6nzZtW0W3qAoDx+3DLhBmmO/q9K+I9AONFEIOu+CtSSFHc6mOGnbGwyzlO4SrRyTM3YLXXrOe7ribgp4ESdhWvhY11WQkerDcJQlx+LbWT8XxxOoxKH2GnR8bkjsfjWrf+Qf0NQG+4yzpqyf/Yppthkt5w== 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=tKZ5CDO0wwZt+BtEAvhYQz1v8Dgf0rgJ3nBGEAKS0kI=; b=ZxlvaaiZypai+J0sFHvEaCVxeFVVtE21KjW7qASoi6B6r0DC7a9wyXopDPII4zYrWrkFuMKfi2YKyFhgAGTt304dUx63xQvbjdQTgbxQ6aCp+y/bGRuxNtitlTDUG36hDSXBJ841flUR3h7F+bLGRH//FP1Oh7JpNd447pCip0I= Received: from TY0PR03MB6354.apcprd03.prod.outlook.com (2603:1096:400:14a::9) by SEZPR03MB8063.apcprd03.prod.outlook.com (2603:1096:101:17d::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.31; Fri, 9 Jun 2023 16:15:32 +0000 Received: from TY0PR03MB6354.apcprd03.prod.outlook.com ([fe80::7f66:e6d5:9578:c978]) by TY0PR03MB6354.apcprd03.prod.outlook.com ([fe80::7f66:e6d5:9578:c978%2]) with mapi id 15.20.6477.016; Fri, 9 Jun 2023 16:15:32 +0000 From: Ryder Lee To: "nbd@nbd.name" , "lorenzo@kernel.org" CC: "lorenzo.bianconi@redhat.com" , "linux-wireless@vger.kernel.org" Subject: Re: [PATCH v2 15/15] wifi: mt76: connac: add connac3 mac library Thread-Topic: [PATCH v2 15/15] wifi: mt76: connac: add connac3 mac library Thread-Index: AQHZmqriDZefVRx/SEe6qlAreeLN3a+CpeOA Date: Fri, 9 Jun 2023 16:15:32 +0000 Message-ID: <5010e5e508e89041451288659390fde5ded94db5.camel@mediatek.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mediatek.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TY0PR03MB6354:EE_|SEZPR03MB8063:EE_ x-ms-office365-filtering-correlation-id: e2ecbbcf-614c-44a7-974a-08db6904c00d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Okpzbp5BHqg6rwJ9r4qKDioHLWC8p6TvKxErBAoNnSjhFWgQsBJsUxwOzid8cYmCrl0uSyCYJIlimd09uvOEJh0pNVbK1XtXKdy5ErPw8g5RZwfppyPtW9nSk5euVZ9Xq9+KXGAt2SzdJSmsaVYuVbJCB9rxboMkF/pHL7F2t/FFimVij+5QjzVeq+mqHZQkVH5IeFMtmJz7nkk3scrHVQU+OR8/+TADfzelnvdysG+v9wbW0hFqmgNMH8528TVhIuYBJOCmNAdlA4izEvuLbSSsQfg10x6loEm6Fz+3VPN+W2ZQN4jHa+s4WimWoLm0iWzc50PBQOQ2orebllVrZy129La/DTuECpzjT2K775vGva7TXvIJIvRSYRHZ/eW//ykKsOwPqx+kyukwShACOphmmS/q/+7oezFke54xPhqOdJysYUn24tP74i7/rZ6ro5TYB/AIOG+XuiUuvSOb/92RHbDYEnX11Dx9dyZJiOtu8wU9ESvtjr4cTlGXzNXOrnI+lUFh6plTMiN1Rs6vRpT+bTRMb8hhGq6zCW++yFfhpO0IicQEI9QxAFJKB35/nd+gp7S6MAxONfRHBdcF3odvE91DfelXAza/zwBbxgpBDyd3pzt5wU87awq48S6M4FtaHQktl9D9RAuhiTgiTWge3xAy7M0Orh3iDV3Ox+NjIdOjy27sxpgHuctojRQA x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY0PR03MB6354.apcprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(136003)(396003)(39860400002)(366004)(376002)(346002)(451199021)(2906002)(30864003)(478600001)(41300700001)(316002)(5660300002)(54906003)(110136005)(71200400001)(66476007)(6486002)(66946007)(64756008)(66556008)(76116006)(4326008)(8676002)(8936002)(66446008)(6512007)(6506007)(26005)(2616005)(186003)(36756003)(83380400001)(38070700005)(38100700002)(86362001)(122000001)(579004)(559001)(309714004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?OHIzT25SN0ZXL1dzS1E5a2NXclV3Y3JWVFJ6M0pQV2xMMVBING9uWGFnVTd1?= =?utf-8?B?Vm0yOVZEczN6dks4VGJZMmQyczN4U3RDdTJiY1VjdUxQemI4QVkzTXFka1Vh?= =?utf-8?B?UHdJMDNqbVNNaDMya2Z1a0xqNUZJdEtOeDZ6Q3BTR1ZVTGo5R01iQUtSK2Jh?= =?utf-8?B?RUJwTzNNSDJ2b1lwV0dJOS82Ni9CZzRQeXJEYys4bjY4Nkl5Z2swZTRWNThK?= =?utf-8?B?enhBZGZpME1jTGNyQ1VRNWZxRThUbldGMW0vWHZzRGo1c09lN204R2JtL3lq?= =?utf-8?B?bGFHSFk0Q3lNL3JCb3l4MzNTd2JsNFhaUDBzM09IMFZQeVN0OFB2c3h0K3pF?= =?utf-8?B?Uk4vTUVKZm9GRVpOY2JHczdHOWVkQlFSelpkQ2IybExsb3RqSGo5MlNqbFBm?= =?utf-8?B?NG1SdE4rOER2Ui9qSjV2OWd4MXA2MGtHU3hMUU5YdDZlN1FlME12eHUzV2ho?= =?utf-8?B?c1RDa0pWNmdKVlhZWWJlNFFhaytFTEZKRnFiYms3byt3aldwNnIvRkwyVVVH?= =?utf-8?B?OGhGR1Y5ZTIxZDBMUlpySUprT21iaUxRNm9FVkVITTNsSzlZUnE1VHdZd21l?= =?utf-8?B?MjJtN3M5ekY2YUZ0Z0trMkNQR3dDZmNuSE5HQUw0ZTFRTE8wQ1VROWRrNUI4?= =?utf-8?B?bXhXM04zTkJsUDlDbDM3MWMvRERsNFBOTDhiQkxUTzcxdjNkbW8zT0gxcW92?= =?utf-8?B?QjcweVJDTFpIaUJ1TWZLNm1abnZKOWc5L2RZOCtzcjZEaFpCeWx0SkdOS0tt?= =?utf-8?B?ZHJMVGNDVnFiMDdPdGJYK0I2WmVJbitSK2ZwbFNNZzNqOE9ERENRZmVCVWdj?= =?utf-8?B?bDlRN0E5aEwxU0pqSjNyVkVQLzF5THdpYVAxQzU4UEFMZXVNZlB5ZjF3a0s2?= =?utf-8?B?cmFTSzFIRWRYWUVxWjFaUlhGTkdzREc3R2FlNzA4UkRGUitsWlJLZG5nTFZF?= =?utf-8?B?aWxxV1p6b2tQM0hGUEFuZmllMWxTRDZYMWx4UWFKY0pQeUMrL1gzSENjUXBZ?= =?utf-8?B?TWFCeTY5V1BUTEszczl0NkxIOTdWYkhLaHJXN1Q3eW5LVWRRcThmUkNid1p1?= =?utf-8?B?TEIweE5iRWhmSEZHcUJnTlIyNGowT1lTVFMzbjFpS0VlakZtVFFUQktzT0pm?= =?utf-8?B?Z0RkQmJqS3BMWXBaNUdZNUVnRWVwZXNUbVNiS21hOUoya0Q2aElrYitoUTd6?= =?utf-8?B?alFBSUNOR2hkdVJuM3BZTGx1UzA4ZjRMa2p4ZGkrblhGc3J3YW1MOXEwQzlx?= =?utf-8?B?ZTdzMVZKNG16bGhHTHAvUExsZ1R4dGkyeXZ5RGlWY0FyMjA3alltNXFZQzM1?= =?utf-8?B?ajNsK0YzdThJL2FKN0t0dTR4aENybkJyY0g3UEt1TzRhcm4yQTlmdDhQWjlt?= =?utf-8?B?bWxkTit2bHNsSTZaK3A3L1p3WVlXM1Bzc3NxYnRKbXp2L1ZHSnU0cU56TFhF?= =?utf-8?B?SDdTZGI0TzNackdZYUROWWIyUlA4UzlvaWliNjl6clc5S1VjS0puVTJnL2pZ?= =?utf-8?B?OTEvL0xkT2x0S0hCVjc2VnZpdjFVSnlHaUdGbDYvM0ZlTXk2bURRQ1BDUUNy?= =?utf-8?B?bUpkTWVjK2IvWktXeUNUNElSY1U2ZnpYdDl3TTZ4am95QXpTZEF0NGxBR2wy?= =?utf-8?B?L203djFjbkt6VFZ4MEFSZGc3emxWS0JoQzlZMFNncmUzYXJPRHdUdm5tZVBO?= =?utf-8?B?VCs4ZmtleVFNSThuOVk1V2JTTWlrWWxmVE03eWRIamRBUmg5dW54N242NEt0?= =?utf-8?B?bHVhZlBwTzVteU0xKzEwV2pqVEhoQ1llZVAvTHd3MU5MaFNjaGRGWW4wazNk?= =?utf-8?B?NTQ5R2RIV01KaDZJKzJkdEZTM1VWVjRSTW1kY3h5bUoyNHhGd0hjbklVV1l0?= =?utf-8?B?R2RNYTZJSFVMRDR3d3RFbzFrMFlHeHd5NkYwZTRRSWRFRWpNL2lSYzlCemRS?= =?utf-8?B?bVJtdDM3ckl0TVNpb0h1RDMrQmJIZ0xqL2JpbWVzVnlpQWxUZ3lZQXFpOExa?= =?utf-8?B?c2U0QUMvakxhNnZtckdNODVZcWlEMnBvS05welB6RCsrMzRGeEUvb0Q3ejJs?= =?utf-8?B?TTRuU1BmM3hNOTRldkNNbENPZ0pDT0hJdUlCYzZXaWlNR1ViTGs4b3dFQ1lv?= =?utf-8?B?c25vMlpJUTFrU3pBVGlJOGpCWFhCRW5lNVJoQ3h3WlBhWW9ZdzZuTjBVbXRt?= =?utf-8?B?SWc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <9A47662E9D0A194EAEDF694BAB0B7885@apcprd03.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TY0PR03MB6354.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e2ecbbcf-614c-44a7-974a-08db6904c00d X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Jun 2023 16:15:32.5761 (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: FbNhVOEn2GjQ8ySGD8lK8rrxdSEFK/+4a6G1MmQhqgXFe/nT0GIuIFyM4gEeSu4WgUC9XTvC635rGQ3XCMfCuQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR03MB8063 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY,URIBL_BLOCKED autolearn=ham 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 T24gRnJpLCAyMDIzLTA2LTA5IGF0IDEwOjE1ICswMjAwLCBMb3JlbnpvIEJpYW5jb25pIHdyb3Rl Og0KPiAgCSANCj4gRXh0ZXJuYWwgZW1haWwgOiBQbGVhc2UgZG8gbm90IGNsaWNrIGxpbmtzIG9y IG9wZW4gYXR0YWNobWVudHMgdW50aWwNCj4geW91IGhhdmUgdmVyaWZpZWQgdGhlIHNlbmRlciBv ciB0aGUgY29udGVudC4NCj4gIEludHJvZHVjZSBjb25uYWMzX21hYyBpbiBtdDc2X2Nvbm5hYyBs aWJyYXJ5IHRvIHJldXNlIG1hYyBjb2RlDQo+IHNoYXJlZA0KPiBiZXR3ZWVuIFdpRmk3IGNoaXBz ZXRzLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogTG9yZW56byBCaWFuY29uaSA8bG9yZW56b0BrZXJu ZWwub3JnPg0KPiAtLS0NCj4gIGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFr ZWZpbGUgICB8ICAgMiArLQ0KPiAgLi4uL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZf Y29ubmFjLmggIHwgIDE5ICsNCj4gIC4uLi93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29u bmFjM19tYWMuYyB8IDc0Mg0KPiArKysrKysrKysrKysrKysrKw0KPiAgLi4uL3dpcmVsZXNzL21l ZGlhdGVrL210NzYvbXQ3Nl9jb25uYWMzX21hYy5oIHwgIDE4ICsNCj4gIC4uLi9uZXQvd2lyZWxl c3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvaW5pdC5jICB8ICAgNCArLQ0KPiAgLi4uL25ldC93aXJl bGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tYWMuYyAgIHwgNzYxICstLS0tLS0tLS0tLS0tLS0N Cj4gLS0NCj4gIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWFpbi5jICB8 ICAgOCArLQ0KPiAgLi4uL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYyAg IHwgICA5ICstDQo+ICAuLi4vd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbXQ3OTk2Lmgg ICAgfCAgMjggKy0NCj4gIDkgZmlsZXMgY2hhbmdlZCwgODA3IGluc2VydGlvbnMoKyksIDc4NCBk ZWxldGlvbnMoLSkNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBkcml2ZXJzL25ldC93aXJlbGVz cy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjM19tYWMuYw0KPiANCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGUNCj4gYi9kcml2ZXJzL25l dC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L01ha2VmaWxlDQo+IGluZGV4IDg0Yzk5YjdlNTdmOS4u ZDhlODA3OWM4YjU0IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRl ay9tdDc2L01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210 NzYvTWFrZWZpbGUNCj4gQEAgLTI3LDcgKzI3LDcgQEAgbXQ3NngwMi1saWIteSA6PSBtdDc2eDAy X3V0aWwubyBtdDc2eDAyX21hYy5vDQo+IG10NzZ4MDJfbWN1Lm8gXA0KPiAgDQo+ICBtdDc2eDAy LXVzYi15IDo9IG10NzZ4MDJfdXNiX21jdS5vIG10NzZ4MDJfdXNiX2NvcmUubw0KPiAgDQo+IC1t dDc2LWNvbm5hYy1saWIteSA6PSBtdDc2X2Nvbm5hY19tY3UubyBtdDc2X2Nvbm5hY19tYWMubw0K PiArbXQ3Ni1jb25uYWMtbGliLXkgOj0gbXQ3Nl9jb25uYWNfbWN1Lm8gbXQ3Nl9jb25uYWNfbWFj Lm8NCj4gbXQ3Nl9jb25uYWMzX21hYy5vDQo+ICANCj4gIG9iai0kKENPTkZJR19NVDc2eDBfQ09N TU9OKSArPSBtdDc2eDAvDQo+ICBvYmotJChDT05GSUdfTVQ3NngyX0NPTU1PTikgKz0gbXQ3Nngy Lw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2 X2Nvbm5hYy5oDQo+IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nv bm5hYy5oDQo+IGluZGV4IDY4YmRlYWRhMTQyMS4uMjAxMTE2Nzg1MzdiIDEwMDY0NA0KPiAtLS0g YS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjLmgNCj4gKysr IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hYy5oDQo+IEBA IC00MTUsNCArNDE1LDIzIEBAIHZvaWQgbXQ3Nl9jb25uYWMyX3R4d2lfZnJlZShzdHJ1Y3QgbXQ3 Nl9kZXYNCj4gKmRldiwgc3RydWN0IG10NzZfdHh3aV9jYWNoZSAqdCwNCj4gIAkJCSAgICBzdHJ1 Y3QgbGlzdF9oZWFkICpmcmVlX2xpc3QpOw0KPiAgdm9pZCBtdDc2X2Nvbm5hYzJfdHhfdG9rZW5f cHV0KHN0cnVjdCBtdDc2X2RldiAqZGV2KTsNCj4gIA0KPiArLyogY29ubmFjMyAqLw0KPiArdm9p ZCBtdDc2X2Nvbm5hYzNfdHhfY2hlY2tfYWdncihzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBf X2xlMzINCj4gKnR4d2kpOw0KPiArdm9pZCBtdDc2X2Nvbm5hYzNfbWFjX2RlY29kZV9oZV9yYWRp b3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2xlMzINCj4gKnJ4diwNCj4gKwkJCQkJIHU4IG1v ZGUpOw0KPiAraW50IG10NzZfY29ubmFjM19tYWNfZmlsbF9yeF9yYXRlKHN0cnVjdCBtdDc2X2Rl diAqZGV2LA0KPiArCQkJCSAgc3RydWN0IG10NzZfcnhfc3RhdHVzICpzdGF0dXMsDQo+ICsJCQkJ ICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kDQo+ICpzYmFuZCwNCj4gKwkJCQkgIF9f bGUzMiAqcnh2LCB1OCAqbW9kZSk7DQo+ICt2b2lkIG10NzZfY29ubmFjM19tYWNfd3JpdGVfdHh3 aShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgX19sZTMyICp0eHdpLA0KPiArCQkJCSBzdHJ1Y3Qgc2tf YnVmZiAqc2tiLCBzdHJ1Y3QgbXQ3Nl93Y2lkDQo+ICp3Y2lkLA0KPiArCQkJCSBzdHJ1Y3QgaWVl ZTgwMjExX2tleV9jb25mICprZXksIGludA0KPiBwaWQsDQo+ICsJCQkJIGVudW0gbXQ3Nl90eHFf aWQgcWlkLCB1MzIgY2hhbmdlZCk7DQo+ICt2b2lkIG10NzZfY29ubmFjM190eHdpX2ZyZWUoc3Ry dWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdA0KPiBtdDc2X3R4d2lfY2FjaGUgKnQsDQo+ICsJCQkg ICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwNCj4gKwkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFk ICpmcmVlX2xpc3QpOw0KPiArdm9pZCBtdDc2X2Nvbm5hYzNfbWFjX2FkZF90eHMoc3RydWN0IG10 NzZfZGV2ICpkZXYsIHZvaWQgKmRhdGEsDQo+ICsJCQkgICAgICB1MzIgbWF4X3d0Ymxfc2l6ZSk7 DQo+ICt2b2lkIG10NzZfY29ubmFjM190eF90b2tlbl9wdXQoc3RydWN0IG10NzZfZGV2ICpkZXYp Ow0KPiArDQo+ICAjZW5kaWYgLyogX19NVDc2X0NPTk5BQ19IICovDQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjM19tYWMuYw0KPiBi L2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWMzX21hYy5jDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNGI3NDViYjc0Y2Ew DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsv bXQ3Ni9tdDc2X2Nvbm5hYzNfbWFjLmMNCj4gQEAgLTAsMCArMSw3NDIgQEANCj4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBJU0MNCj4gKy8qIENvcHlyaWdodCAoQykgMjAyMyBNZWRpYVRl ayBJbmMuICovDQo+ICsNCj4gKyNpbmNsdWRlICJtdDc2X2Nvbm5hYy5oIg0KPiArI2luY2x1ZGUg Im10NzZfY29ubmFjM19tYWMuaCINCj4gKyNpbmNsdWRlICJkbWEuaCINCj4gKw0KPiArI2RlZmlu ZSBIRV9CSVRTKGYpCQljcHVfdG9fbGUxNihJRUVFODAyMTFfUkFESU9UQVBfSEVfIyNmKQ0KPiAr I2RlZmluZSBIRV9QUkVQKGYsIG0sIHYpCWxlMTZfZW5jb2RlX2JpdHMobGUzMl9nZXRfYml0cyh2 LA0KPiBNVF9DUlhWX0hFXyMjbSksXA0KPiArCQkJCQkJIElFRUU4MDIxMV9SQURJT1RBUF9IRV8N Cj4gIyNmKQ0KPiArDQo+ICt2b2lkIG10NzZfY29ubmFjM190eF9jaGVja19hZ2dyKHN0cnVjdCBp ZWVlODAyMTFfc3RhICpzdGEsIF9fbGUzMg0KPiAqdHh3aSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbXQ3 Nl93Y2lkICp3Y2lkOw0KPiArCXUxNiBmYywgdGlkOw0KPiArCXUzMiB2YWw7DQo+ICsNCj4gKwlp ZiAoIXN0YSB8fA0KPiArCSAgICAhKHN0YS0+ZGVmbGluay5odF9jYXAuaHRfc3VwcG9ydGVkIHx8 IHN0YS0NCj4gPmRlZmxpbmsuaGVfY2FwLmhhc19oZSkpDQo+ICsJCXJldHVybjsNCj4gKw0KPiAr CXRpZCA9IGxlMzJfZ2V0X2JpdHModHh3aVsxXSwgTVRfVFhEMV9USUQpOw0KPiArCWlmICh0aWQg Pj0gNikgLyogc2tpcCBWTyBxdWV1ZSAqLw0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwl2YWwgPSBs ZTMyX3RvX2NwdSh0eHdpWzJdKTsNCj4gKwlmYyA9IEZJRUxEX0dFVChNVF9UWEQyX0ZSQU1FX1RZ UEUsIHZhbCkgPDwgMiB8DQo+ICsJICAgICBGSUVMRF9HRVQoTVRfVFhEMl9TVUJfVFlQRSwgdmFs KSA8PCA0Ow0KPiArCWlmICh1bmxpa2VseShmYyAhPSAoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfA0K PiBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEpKSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJd2Np ZCA9IChzdHJ1Y3QgbXQ3Nl93Y2lkICopc3RhLT5kcnZfcHJpdjsNCj4gKwlpZiAoIXRlc3RfYW5k X3NldF9iaXQodGlkLCAmd2NpZC0+YW1wZHVfc3RhdGUpKQ0KPiArCQlpZWVlODAyMTFfc3RhcnRf dHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgMCk7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTCht dDc2X2Nvbm5hYzNfdHhfY2hlY2tfYWdncik7DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICttdDc2 X2Nvbm5hYzNfbWFjX2RlY29kZV9oZV9yYWRpb3RhcF9ydShzdHJ1Y3QgbXQ3Nl9yeF9zdGF0dXMN Cj4gKnN0YXR1cywNCj4gKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZQ0K PiAqaGUsDQo+ICsJCQkJICAgICAgIF9fbGUzMiAqcnh2KQ0KPiArew0KPiArCXUzMiBydSA9IGxl MzJfZ2V0X2JpdHMocnh2WzBdLCBNVF9QUlhWX0hFX1JVX0FMTE9DKSwgb2ZmcyA9IDA7DQo+ICsN Cj4gKwlzdGF0dXMtPmJ3ID0gUkFURV9JTkZPX0JXX0hFX1JVOw0KPiArDQo+ICsJc3dpdGNoIChy dSkgew0KPiArCWNhc2UgMCAuLi4gMzY6DQo+ICsJCXN0YXR1cy0+aGVfcnUgPSBOTDgwMjExX1JB VEVfSU5GT19IRV9SVV9BTExPQ18yNjsNCj4gKwkJb2ZmcyA9IHJ1Ow0KPiArCQlicmVhazsNCj4g KwljYXNlIDM3IC4uLiA1MjoNCj4gKwkJc3RhdHVzLT5oZV9ydSA9IE5MODAyMTFfUkFURV9JTkZP X0hFX1JVX0FMTE9DXzUyOw0KPiArCQlvZmZzID0gcnUgLSAzNzsNCj4gKwkJYnJlYWs7DQo+ICsJ Y2FzZSA1MyAuLi4gNjA6DQo+ICsJCXN0YXR1cy0+aGVfcnUgPSBOTDgwMjExX1JBVEVfSU5GT19I RV9SVV9BTExPQ18xMDY7DQo+ICsJCW9mZnMgPSBydSAtIDUzOw0KPiArCQlicmVhazsNCj4gKwlj YXNlIDYxIC4uLiA2NDoNCj4gKwkJc3RhdHVzLT5oZV9ydSA9IE5MODAyMTFfUkFURV9JTkZPX0hF X1JVX0FMTE9DXzI0MjsNCj4gKwkJb2ZmcyA9IHJ1IC0gNjE7DQo+ICsJCWJyZWFrOw0KPiArCWNh c2UgNjUgLi4uIDY2Og0KPiArCQlzdGF0dXMtPmhlX3J1ID0gTkw4MDIxMV9SQVRFX0lORk9fSEVf UlVfQUxMT0NfNDg0Ow0KPiArCQlvZmZzID0gcnUgLSA2NTsNCj4gKwkJYnJlYWs7DQo+ICsJY2Fz ZSA2NzoNCj4gKwkJc3RhdHVzLT5oZV9ydSA9IE5MODAyMTFfUkFURV9JTkZPX0hFX1JVX0FMTE9D Xzk5NjsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSA2ODoNCj4gKwkJc3RhdHVzLT5oZV9ydSA9IE5M ODAyMTFfUkFURV9JTkZPX0hFX1JVX0FMTE9DXzJ4OTk2Ow0KPiArCQlicmVhazsNCj4gKwl9DQo+ ICsNCj4gKwloZS0+ZGF0YTEgfD0gSEVfQklUUyhEQVRBMV9CV19SVV9BTExPQ19LTk9XTik7DQo+ ICsJaGUtPmRhdGEyIHw9IEhFX0JJVFMoREFUQTJfUlVfT0ZGU0VUX0tOT1dOKSB8DQo+ICsJCSAg ICAgbGUxNl9lbmNvZGVfYml0cyhvZmZzLA0KPiArCQkJCSAgICAgIElFRUU4MDIxMV9SQURJT1RB UF9IRV9EQVRBMl9SVV9PRg0KPiBGU0VUKTsNCj4gK30NCj4gKw0KPiArI2RlZmluZSBNVV9QUkVQ KGYsIHYpCWxlMTZfZW5jb2RlX2JpdHModiwNCj4gSUVFRTgwMjExX1JBRElPVEFQX0hFX01VXyMj ZikNCj4gK3N0YXRpYyB2b2lkDQo+ICttdDc2X2Nvbm5hYzNfbWFjX2RlY29kZV9oZV9tdV9yYWRp b3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2xlMzINCj4gKnJ4dikNCj4gK3sNCj4gKwlzdHJ1 Y3QgbXQ3Nl9yeF9zdGF0dXMgKnN0YXR1cyA9IChzdHJ1Y3QgbXQ3Nl9yeF9zdGF0dXMgKilza2It DQo+ID5jYjsNCj4gKwlzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZV9t dSBtdV9rbm93biA9IHsNCj4gKwkJLmZsYWdzMSA9IEhFX0JJVFMoTVVfRkxBR1MxX1NJR19CX01D U19LTk9XTikgfA0KPiArCQkJICBIRV9CSVRTKE1VX0ZMQUdTMV9TSUdfQl9EQ01fS05PV04pIHwN Cj4gKwkJCSAgSEVfQklUUyhNVV9GTEFHUzFfQ0gxX1JVX0tOT1dOKSB8DQo+ICsJCQkgIEhFX0JJ VFMoTVVfRkxBR1MxX1NJR19CX1NZTVNfVVNFUlNfS05PV04pLA0KPiArCQkuZmxhZ3MyID0gSEVf QklUUyhNVV9GTEFHUzJfQldfRlJPTV9TSUdfQV9CV19LTk9XTiksDQo+ICsJfTsNCj4gKwlzdHJ1 Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlX211ICpoZV9tdTsNCj4gKw0KPiArCXN0YXR1cy0+Zmxh ZyB8PSBSWF9GTEFHX1JBRElPVEFQX0hFX01VOw0KPiArDQo+ICsJaGVfbXUgPSBza2JfcHVzaChz a2IsIHNpemVvZihtdV9rbm93bikpOw0KPiArCW1lbWNweShoZV9tdSwgJm11X2tub3duLCBzaXpl b2YobXVfa25vd24pKTsNCj4gKw0KPiArCWhlX211LT5mbGFnczEgfD0gTVVfUFJFUChGTEFHUzFf U0lHX0JfTUNTLCBzdGF0dXMtPnJhdGVfaWR4KTsNCj4gKwlpZiAoc3RhdHVzLT5oZV9kY20pDQo+ ICsJCWhlX211LT5mbGFnczEgfD0gTVVfUFJFUChGTEFHUzFfU0lHX0JfRENNLCBzdGF0dXMtDQo+ ID5oZV9kY20pOw0KPiArDQo+ICsJaGVfbXUtPmZsYWdzMiB8PSBNVV9QUkVQKEZMQUdTMl9CV19G Uk9NX1NJR19BX0JXLCBzdGF0dXMtPmJ3KSB8DQo+ICsJCQkgTVVfUFJFUChGTEFHUzJfU0lHX0Jf U1lNU19VU0VSUywNCj4gKwkJCQkgbGUzMl9nZXRfYml0cyhyeHZbNF0sDQo+IE1UX0NSWFZfSEVf TlVNX1VTRVIpKTsNCj4gKw0KPiArCWhlX211LT5ydV9jaDFbMF0gPSBsZTMyX2dldF9iaXRzKHJ4 dlsxNl0sIE1UX0NSWFZfSEVfUlUwKSAmDQo+IDB4ZmY7DQo+ICsNCj4gKwlpZiAoc3RhdHVzLT5i dyA+PSBSQVRFX0lORk9fQldfNDApIHsNCj4gKwkJaGVfbXUtPmZsYWdzMSB8PSBIRV9CSVRTKE1V X0ZMQUdTMV9DSDJfUlVfS05PV04pOw0KPiArCQloZV9tdS0+cnVfY2gyWzBdID0gbGUzMl9nZXRf Yml0cyhyeHZbMTZdLA0KPiBNVF9DUlhWX0hFX1JVMSkgJiAweGZmOw0KPiArCX0NCj4gKw0KPiAr CWlmIChzdGF0dXMtPmJ3ID49IFJBVEVfSU5GT19CV184MCkgew0KPiArCQl1MzIgcnVfaCwgcnVf bDsNCj4gKw0KPiArCQloZV9tdS0+cnVfY2gxWzFdID0gbGUzMl9nZXRfYml0cyhyeHZbMTZdLA0K PiBNVF9DUlhWX0hFX1JVMikgJiAweGZmOw0KPiArDQo+ICsJCXJ1X2wgPSBsZTMyX2dldF9iaXRz KHJ4dlsxNl0sIE1UX0NSWFZfSEVfUlUzX0wpOw0KPiArCQlydV9oID0gbGUzMl9nZXRfYml0cyhy eHZbMTddLCBNVF9DUlhWX0hFX1JVM19IKSAmIDB4NzsNCj4gKwkJaGVfbXUtPnJ1X2NoMlsxXSA9 ICh1OCkocnVfbCB8IHJ1X2ggPDwgNCk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICt2b2lkIG10NzZf Y29ubmFjM19tYWNfZGVjb2RlX2hlX3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsIF9fbGUz Mg0KPiAqcnh2LA0KPiArCQkJCQkgdTggbW9kZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbXQ3Nl9yeF9z dGF0dXMgKnN0YXR1cyA9IChzdHJ1Y3QgbXQ3Nl9yeF9zdGF0dXMgKilza2ItDQo+ID5jYjsNCj4g KwlzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZSBrbm93biA9IHsNCj4g KwkJLmRhdGExID0gSEVfQklUUyhEQVRBMV9EQVRBX01DU19LTk9XTikgfA0KPiArCQkJIEhFX0JJ VFMoREFUQTFfREFUQV9EQ01fS05PV04pIHwNCj4gKwkJCSBIRV9CSVRTKERBVEExX1NUQkNfS05P V04pIHwNCj4gKwkJCSBIRV9CSVRTKERBVEExX0NPRElOR19LTk9XTikgfA0KPiArCQkJIEhFX0JJ VFMoREFUQTFfTERQQ19YU1lNU0VHX0tOT1dOKSB8DQo+ICsJCQkgSEVfQklUUyhEQVRBMV9ET1BQ TEVSX0tOT1dOKSB8DQo+ICsJCQkgSEVfQklUUyhEQVRBMV9TUFRMX1JFVVNFX0tOT1dOKSB8DQo+ ICsJCQkgSEVfQklUUyhEQVRBMV9CU1NfQ09MT1JfS05PV04pLA0KPiArCQkuZGF0YTIgPSBIRV9C SVRTKERBVEEyX0dJX0tOT1dOKSB8DQo+ICsJCQkgSEVfQklUUyhEQVRBMl9UWEJGX0tOT1dOKSB8 DQo+ICsJCQkgSEVfQklUUyhEQVRBMl9QRV9ESVNBTUJJR19LTk9XTikgfA0KPiArCQkJIEhFX0JJ VFMoREFUQTJfVFhPUF9LTk9XTiksDQo+ICsJfTsNCj4gKwl1MzIgbHRmX3NpemUgPSBsZTMyX2dl dF9iaXRzKHJ4dls0XSwgTVRfQ1JYVl9IRV9MVEZfU0laRSkgKyAxOw0KPiArCXN0cnVjdCBpZWVl ODAyMTFfcmFkaW90YXBfaGUgKmhlOw0KPiArDQo+ICsJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdf UkFESU9UQVBfSEU7DQo+ICsNCj4gKwloZSA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKGtub3duKSk7 DQo+ICsJbWVtY3B5KGhlLCAma25vd24sIHNpemVvZihrbm93bikpOw0KPiArDQo+ICsJaGUtPmRh dGEzID0gSEVfUFJFUChEQVRBM19CU1NfQ09MT1IsIEJTU19DT0xPUiwgcnh2WzldKSB8DQo+ICsJ CSAgICBIRV9QUkVQKERBVEEzX0xEUENfWFNZTVNFRywgTERQQ19FWFRfU1lNLCByeHZbNF0pOw0K PiArCWhlLT5kYXRhNCA9IEhFX1BSRVAoREFUQTRfU1VfTVVfU1BUTF9SRVVTRSwgU1JfTUFTSywg cnh2WzEzXSk7DQo+ICsJaGUtPmRhdGE1ID0gSEVfUFJFUChEQVRBNV9QRV9ESVNBTUJJRywgUEVf RElTQU1CSUcsIHJ4dls1XSkgfA0KPiArCQkgICAgbGUxNl9lbmNvZGVfYml0cyhsdGZfc2l6ZSwN Cj4gKwkJCQkgICAgIElFRUU4MDIxMV9SQURJT1RBUF9IRV9EQVRBNV9MVEZfU0kNCj4gWkUpOw0K PiArCWlmIChsZTMyX3RvX2NwdShyeHZbMF0pICYgTVRfUFJYVl9UWEJGKQ0KPiArCQloZS0+ZGF0 YTUgfD0gSEVfQklUUyhEQVRBNV9UWEJGKTsNCj4gKwloZS0+ZGF0YTYgPSBIRV9QUkVQKERBVEE2 X1RYT1AsIFRYT1BfRFVSLCByeHZbOV0pIHwNCj4gKwkJICAgIEhFX1BSRVAoREFUQTZfRE9QUExF UiwgRE9QUExFUiwgcnh2WzldKTsNCj4gKw0KPiArCXN3aXRjaCAobW9kZSkgew0KPiArCWNhc2Ug TVRfUEhZX1RZUEVfSEVfU1U6DQo+ICsJCWhlLT5kYXRhMSB8PSBIRV9CSVRTKERBVEExX0ZPUk1B VF9TVSkgfA0KPiArCQkJICAgICBIRV9CSVRTKERBVEExX1VMX0RMX0tOT1dOKSB8DQo+ICsJCQkg ICAgIEhFX0JJVFMoREFUQTFfQkVBTV9DSEFOR0VfS05PV04pIHwNCj4gKwkJCSAgICAgSEVfQklU UyhEQVRBMV9CV19SVV9BTExPQ19LTk9XTik7DQo+ICsNCj4gKwkJaGUtPmRhdGEzIHw9IEhFX1BS RVAoREFUQTNfQkVBTV9DSEFOR0UsIEJFQU1fQ0hORywNCj4gcnh2WzhdKSB8DQo+ICsJCQkgICAg IEhFX1BSRVAoREFUQTNfVUxfREwsIFVQTElOSywgcnh2WzVdKTsNCj4gKwkJYnJlYWs7DQo+ICsJ Y2FzZSBNVF9QSFlfVFlQRV9IRV9FWFRfU1U6DQo+ICsJCWhlLT5kYXRhMSB8PSBIRV9CSVRTKERB VEExX0ZPUk1BVF9FWFRfU1UpIHwNCj4gKwkJCSAgICAgSEVfQklUUyhEQVRBMV9VTF9ETF9LTk9X TikgfA0KPiArCQkJICAgICBIRV9CSVRTKERBVEExX0JXX1JVX0FMTE9DX0tOT1dOKTsNCj4gKw0K PiArCQloZS0+ZGF0YTMgfD0gSEVfUFJFUChEQVRBM19VTF9ETCwgVVBMSU5LLCByeHZbNV0pOw0K PiArCQlicmVhazsNCj4gKwljYXNlIE1UX1BIWV9UWVBFX0hFX01VOg0KPiArCQloZS0+ZGF0YTEg fD0gSEVfQklUUyhEQVRBMV9GT1JNQVRfTVUpIHwNCj4gKwkJCSAgICAgSEVfQklUUyhEQVRBMV9V TF9ETF9LTk9XTik7DQo+ICsNCj4gKwkJaGUtPmRhdGEzIHw9IEhFX1BSRVAoREFUQTNfVUxfREws IFVQTElOSywgcnh2WzVdKTsNCj4gKwkJaGUtPmRhdGE0IHw9IEhFX1BSRVAoREFUQTRfTVVfU1RB X0lELCBNVV9BSUQsIHJ4dls4XSk7DQo+ICsNCj4gKwkJbXQ3Nl9jb25uYWMzX21hY19kZWNvZGVf aGVfcmFkaW90YXBfcnUoc3RhdHVzLCBoZSwNCj4gcnh2KTsNCj4gKwkJbXQ3Nl9jb25uYWMzX21h Y19kZWNvZGVfaGVfbXVfcmFkaW90YXAoc2tiLCByeHYpOw0KPiArCQlicmVhazsNCj4gKwljYXNl IE1UX1BIWV9UWVBFX0hFX1RCOg0KPiArCQloZS0+ZGF0YTEgfD0gSEVfQklUUyhEQVRBMV9GT1JN QVRfVFJJRykgfA0KPiArCQkJICAgICBIRV9CSVRTKERBVEExX1NQVExfUkVVU0UyX0tOT1dOKSB8 DQo+ICsJCQkgICAgIEhFX0JJVFMoREFUQTFfU1BUTF9SRVVTRTNfS05PV04pIHwNCj4gKwkJCSAg ICAgSEVfQklUUyhEQVRBMV9TUFRMX1JFVVNFNF9LTk9XTik7DQo+ICsNCj4gKwkJaGUtPmRhdGE0 IHw9IEhFX1BSRVAoREFUQTRfVEJfU1BUTF9SRVVTRTEsIFNSX01BU0ssDQo+IHJ4dlsxM10pIHwN Cj4gKwkJCSAgICAgSEVfUFJFUChEQVRBNF9UQl9TUFRMX1JFVVNFMiwgU1IxX01BU0ssDQo+IHJ4 dlsxM10pIHwNCj4gKwkJCSAgICAgSEVfUFJFUChEQVRBNF9UQl9TUFRMX1JFVVNFMywgU1IyX01B U0ssDQo+IHJ4dlsxM10pIHwNCj4gKwkJCSAgICAgSEVfUFJFUChEQVRBNF9UQl9TUFRMX1JFVVNF NCwgU1IzX01BU0ssDQo+IHJ4dlsxM10pOw0KPiArDQo+ICsJCW10NzZfY29ubmFjM19tYWNfZGVj b2RlX2hlX3JhZGlvdGFwX3J1KHN0YXR1cywgaGUsDQo+IHJ4dik7DQo+ICsJCWJyZWFrOw0KPiAr CWRlZmF1bHQ6DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xfR1BM KG10NzZfY29ubmFjM19tYWNfZGVjb2RlX2hlX3JhZGlvdGFwKTsNCj4gKw0KPiAraW50IG10NzZf Y29ubmFjM19tYWNfZmlsbF9yeF9yYXRlKHN0cnVjdCBtdDc2X2RldiAqZGV2LA0KPiArCQkJCSAg c3RydWN0IG10NzZfcnhfc3RhdHVzICpzdGF0dXMsDQo+ICsJCQkJICBzdHJ1Y3QgaWVlZTgwMjEx X3N1cHBvcnRlZF9iYW5kDQo+ICpzYmFuZCwNCj4gKwkJCQkgIF9fbGUzMiAqcnh2LCB1OCAqbW9k ZSkNCj4gK3sNCj4gKwl1OCBzdGJjLCBnaSwgYncsIGRjbSwgbnNzOw0KPiArCWJvb2wgY2NrID0g ZmFsc2U7DQo+ICsJdTMyIHYwLCB2MjsNCj4gKwlpbnQgaSwgaWR4Ow0KPiArDQo+ICsJdjAgPSBs ZTMyX3RvX2NwdShyeHZbMF0pOw0KPiArCXYyID0gbGUzMl90b19jcHUocnh2WzJdKTsNCj4gKw0K PiArCWlkeCA9IEZJRUxEX0dFVChNVF9QUlhWX1RYX1JBVEUsIHYwKTsNCj4gKwlpID0gaWR4Ow0K PiArCW5zcyA9IEZJRUxEX0dFVChNVF9QUlhWX05TVFMsIHYwKSArIDE7DQo+ICsNCj4gKwlzdGJj ID0gRklFTERfR0VUKE1UX1BSWFZfSFRfU1RCQywgdjIpOw0KPiArCWdpID0gRklFTERfR0VUKE1U X1BSWFZfSFRfU0hPUlRfR0ksIHYyKTsNCj4gKwkqbW9kZSA9IEZJRUxEX0dFVChNVF9QUlhWX1RY X01PREUsIHYyKTsNCj4gKwlkY20gPSBGSUVMRF9HRVQoTVRfUFJYVl9EQ00sIHYyKTsNCj4gKwli dyA9IEZJRUxEX0dFVChNVF9QUlhWX0ZSQU1FX01PREUsIHYyKTsNCj4gKw0KPiArCXN3aXRjaCAo Km1vZGUpIHsNCj4gKwljYXNlIE1UX1BIWV9UWVBFX0NDSzoNCj4gKwkJY2NrID0gdHJ1ZTsNCj4g KwkJZmFsbHRocm91Z2g7DQo+ICsJY2FzZSBNVF9QSFlfVFlQRV9PRkRNOg0KPiArCQlpID0gbXQ3 Nl9nZXRfcmF0ZShkZXYsIHNiYW5kLCBpLCBjY2spOw0KPiArCQlicmVhazsNCj4gKwljYXNlIE1U X1BIWV9UWVBFX0hUX0dGOg0KPiArCWNhc2UgTVRfUEhZX1RZUEVfSFQ6DQo+ICsJCXN0YXR1cy0+ ZW5jb2RpbmcgPSBSWF9FTkNfSFQ7DQo+ICsJCWlmIChnaSkNCj4gKwkJCXN0YXR1cy0+ZW5jX2Zs YWdzIHw9IFJYX0VOQ19GTEFHX1NIT1JUX0dJOw0KPiArCQlpZiAoaSA+IDMxKQ0KPiArCQkJcmV0 dXJuIC1FSU5WQUw7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgTVRfUEhZX1RZUEVfVkhUOg0KPiAr CQlzdGF0dXMtPm5zcyA9IG5zczsNCj4gKwkJc3RhdHVzLT5lbmNvZGluZyA9IFJYX0VOQ19WSFQ7 DQo+ICsJCWlmIChnaSkNCj4gKwkJCXN0YXR1cy0+ZW5jX2ZsYWdzIHw9IFJYX0VOQ19GTEFHX1NI T1JUX0dJOw0KPiArCQlpZiAoaSA+IDExKQ0KPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJCWJy ZWFrOw0KPiArCWNhc2UgTVRfUEhZX1RZUEVfSEVfTVU6DQo+ICsJY2FzZSBNVF9QSFlfVFlQRV9I RV9TVToNCj4gKwljYXNlIE1UX1BIWV9UWVBFX0hFX0VYVF9TVToNCj4gKwljYXNlIE1UX1BIWV9U WVBFX0hFX1RCOg0KPiArCQlzdGF0dXMtPm5zcyA9IG5zczsNCj4gKwkJc3RhdHVzLT5lbmNvZGlu ZyA9IFJYX0VOQ19IRTsNCj4gKwkJaSAmPSBHRU5NQVNLKDMsIDApOw0KPiArDQo+ICsJCWlmIChn aSA8PSBOTDgwMjExX1JBVEVfSU5GT19IRV9HSV8zXzIpDQo+ICsJCQlzdGF0dXMtPmhlX2dpID0g Z2k7DQo+ICsNCj4gKwkJc3RhdHVzLT5oZV9kY20gPSBkY207DQo+ICsJCWJyZWFrOw0KPiArCWNh c2UgTVRfUEhZX1RZUEVfRUhUX1NVOg0KPiArCWNhc2UgTVRfUEhZX1RZUEVfRUhUX1RSSUc6DQo+ ICsJY2FzZSBNVF9QSFlfVFlQRV9FSFRfTVU6DQo+ICsJCXN0YXR1cy0+bnNzID0gbnNzOw0KPiAr CQlzdGF0dXMtPmVuY29kaW5nID0gUlhfRU5DX0VIVDsNCj4gKwkJaSAmPSBHRU5NQVNLKDMsIDAp Ow0KPiArDQo+ICsJCWlmIChnaSA8PSBOTDgwMjExX1JBVEVfSU5GT19FSFRfR0lfM18yKQ0KPiAr CQkJc3RhdHVzLT5laHQuZ2kgPSBnaTsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArCXN0YXR1cy0+cmF0ZV9pZHggPSBpOw0KPiArDQo+ ICsJc3dpdGNoIChidykgew0KPiArCWNhc2UgSUVFRTgwMjExX1NUQV9SWF9CV18yMDoNCj4gKwkJ YnJlYWs7DQo+ICsJY2FzZSBJRUVFODAyMTFfU1RBX1JYX0JXXzQwOg0KPiArCQlpZiAoKm1vZGUg JiBNVF9QSFlfVFlQRV9IRV9FWFRfU1UgJiYNCj4gKwkJICAgIChpZHggJiBNVF9QUlhWX1RYX0VS X1NVXzEwNlQpKSB7DQo+ICsJCQlzdGF0dXMtPmJ3ID0gUkFURV9JTkZPX0JXX0hFX1JVOw0KPiAr CQkJc3RhdHVzLT5oZV9ydSA9DQo+ICsJCQkJTkw4MDIxMV9SQVRFX0lORk9fSEVfUlVfQUxMT0Nf MTA2Ow0KPiArCQl9IGVsc2Ugew0KPiArCQkJc3RhdHVzLT5idyA9IFJBVEVfSU5GT19CV180MDsN Cj4gKwkJfQ0KPiArCQlicmVhazsNCj4gKwljYXNlIElFRUU4MDIxMV9TVEFfUlhfQldfODA6DQo+ ICsJCXN0YXR1cy0+YncgPSBSQVRFX0lORk9fQldfODA7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2Ug SUVFRTgwMjExX1NUQV9SWF9CV18xNjA6DQo+ICsJCXN0YXR1cy0+YncgPSBSQVRFX0lORk9fQldf MTYwOw0KPiArCQlicmVhazsNCj4gKwljYXNlIElFRUU4MDIxMV9TVEFfUlhfQldfMzIwOg0KPiAr CQlzdGF0dXMtPmJ3ID0gUkFURV9JTkZPX0JXXzMyMDsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVs dDoNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJc3RhdHVzLT5lbmNfZmxh Z3MgfD0gUlhfRU5DX0ZMQUdfU1RCQ19NQVNLICogc3RiYzsNCj4gKwlpZiAoKm1vZGUgPCBNVF9Q SFlfVFlQRV9IRV9TVSAmJiBnaSkNCj4gKwkJc3RhdHVzLT5lbmNfZmxhZ3MgfD0gUlhfRU5DX0ZM QUdfU0hPUlRfR0k7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xf R1BMKG10NzZfY29ubmFjM19tYWNfZmlsbF9yeF9yYXRlKTsNCj4gKw0KPiArc3RhdGljIHZvaWQN Cj4gK210NzZfY29ubmFjM19tYWNfd3JpdGVfdHh3aV84MDIzKF9fbGUzMiAqdHh3aSwgc3RydWN0 IHNrX2J1ZmYgKnNrYiwNCj4gKwkJCQkgc3RydWN0IG10NzZfd2NpZCAqd2NpZCkNCj4gK3sNCj4g Kwl1OCB0aWQgPSBza2ItPnByaW9yaXR5ICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7DQo+ ICsJdTggZmNfdHlwZSwgZmNfc3R5cGU7DQo+ICsJdTE2IGV0aGVydHlwZTsNCj4gKwlib29sIHdt bSA9IGZhbHNlOw0KPiArCXUzMiB2YWw7DQo+ICsNCj4gKwlpZiAod2NpZC0+c3RhKSB7DQo+ICsJ CXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7DQo+ICsNCj4gKwkJc3RhID0gY29udGFpbmVyX29m KCh2b2lkICopd2NpZCwgc3RydWN0IGllZWU4MDIxMV9zdGEsDQo+IGRydl9wcml2KTsNCj4gKwkJ d21tID0gc3RhLT53bWU7DQo+ICsJfQ0KPiArDQo+ICsJdmFsID0gRklFTERfUFJFUChNVF9UWEQx X0hEUl9GT1JNQVQsIE1UX0hEUl9GT1JNQVRfODAyXzMpIHwNCj4gKwkgICAgICBGSUVMRF9QUkVQ KE1UX1RYRDFfVElELCB0aWQpOw0KPiArDQo+ICsJZXRoZXJ0eXBlID0gZ2V0X3VuYWxpZ25lZF9i ZTE2KCZza2ItPmRhdGFbMTJdKTsNCj4gKwlpZiAoZXRoZXJ0eXBlID49IEVUSF9QXzgwMl8zX01J TikNCj4gKwkJdmFsIHw9IE1UX1RYRDFfRVRIXzgwMl8zOw0KPiArDQo+ICsJdHh3aVsxXSB8PSBj cHVfdG9fbGUzMih2YWwpOw0KPiArDQo+ICsJZmNfdHlwZSA9IElFRUU4MDIxMV9GVFlQRV9EQVRB ID4+IDI7DQo+ICsJZmNfc3R5cGUgPSB3bW0gPyBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEgPj4g NCA6IDA7DQo+ICsNCj4gKwl2YWwgPSBGSUVMRF9QUkVQKE1UX1RYRDJfRlJBTUVfVFlQRSwgZmNf dHlwZSkgfA0KPiArCSAgICAgIEZJRUxEX1BSRVAoTVRfVFhEMl9TVUJfVFlQRSwgZmNfc3R5cGUp Ow0KPiArDQo+ICsJdHh3aVsyXSB8PSBjcHVfdG9fbGUzMih2YWwpOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZA0KPiArbXQ3Nl9jb25uYWMzX21hY193cml0ZV90eHdpXzgwMjExKHN0cnVjdCBt dDc2X2RldiAqZGV2LCBfX2xlMzINCj4gKnR4d2ksDQo+ICsJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAq c2tiLA0KPiArCQkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQ0KPiArew0KPiAr CXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2It PmRhdGE7DQo+ICsJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAy MTFfbWdtdCAqKXNrYi0NCj4gPmRhdGE7DQo+ICsJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpp bmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOw0KPiArCWJvb2wgbXVsdGljYXN0ID0gaXNfbXVs dGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSk7DQo+ICsJdTggdGlkID0gc2tiLT5wcmlvcml0 eSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOw0KPiArCV9fbGUxNiBmYyA9IGhkci0+ZnJh bWVfY29udHJvbDsNCj4gKwl1OCBmY190eXBlLCBmY19zdHlwZTsNCj4gKwl1MzIgdmFsOw0KPiAr DQo+ICsJaWYgKGllZWU4MDIxMV9pc19hY3Rpb24oZmMpICYmDQo+ICsJICAgIG1nbXQtPnUuYWN0 aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfQkFDSyAmJg0KPiArCSAgICBtZ210LT51LmFj dGlvbi51LmFkZGJhX3JlcS5hY3Rpb25fY29kZSA9PQ0KPiBXTEFOX0FDVElPTl9BRERCQV9SRVEp DQo+ICsJCXRpZCA9IE1UX1RYX0FEREJBOw0KPiArCWVsc2UgaWYgKGllZWU4MDIxMV9pc19tZ210 KGhkci0+ZnJhbWVfY29udHJvbCkpDQo+ICsJCXRpZCA9IE1UX1RYX05PUk1BTDsNCj4gKw0KPiAr CXZhbCA9IEZJRUxEX1BSRVAoTVRfVFhEMV9IRFJfRk9STUFULCBNVF9IRFJfRk9STUFUXzgwMl8x MSkgfA0KPiArCSAgICAgIEZJRUxEX1BSRVAoTVRfVFhEMV9IRFJfSU5GTywNCj4gKwkJCSBpZWVl ODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpIC8gMikgfA0KPiArCSAgICAgIEZJRUxEX1BS RVAoTVRfVFhEMV9USUQsIHRpZCk7DQo+ICsNCj4gKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGZj KSB8fCBtdWx0aWNhc3QgfHwNCj4gKwkgICAgaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RM X1VTRV9NSU5SQVRFKQ0KPiArCQl2YWwgfD0gTVRfVFhEMV9GSVhFRF9SQVRFOw0KPiArDQo+ICsJ aWYgKGtleSAmJiBtdWx0aWNhc3QgJiYgaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKHNr YikgJiYNCj4gKwkgICAga2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMp IHsNCj4gKwkJdmFsIHw9IE1UX1RYRDFfQklQOw0KPiArCQl0eHdpWzNdICY9IH5jcHVfdG9fbGUz MihNVF9UWEQzX1BST1RFQ1RfRlJBTUUpOw0KPiArCX0NCj4gKw0KPiArCXR4d2lbMV0gfD0gY3B1 X3RvX2xlMzIodmFsKTsNCj4gKw0KPiArCWZjX3R5cGUgPSAobGUxNl90b19jcHUoZmMpICYgSUVF RTgwMjExX0ZDVExfRlRZUEUpID4+IDI7DQo+ICsJZmNfc3R5cGUgPSAobGUxNl90b19jcHUoZmMp ICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID4+IDQ7DQo+ICsNCj4gKwl2YWwgPSBGSUVMRF9QUkVQ KE1UX1RYRDJfRlJBTUVfVFlQRSwgZmNfdHlwZSkgfA0KPiArCSAgICAgIEZJRUxEX1BSRVAoTVRf VFhEMl9TVUJfVFlQRSwgZmNfc3R5cGUpOw0KPiArDQo+ICsJdHh3aVsyXSB8PSBjcHVfdG9fbGUz Mih2YWwpOw0KPiArDQo+ICsJdHh3aVszXSB8PSBjcHVfdG9fbGUzMihGSUVMRF9QUkVQKE1UX1RY RDNfQkNNLCBtdWx0aWNhc3QpKTsNCj4gKwlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpIHsN Cj4gKwkJdHh3aVszXSAmPSB+Y3B1X3RvX2xlMzIoTVRfVFhEM19TV19QT1dFUl9NR01UKTsNCj4g KwkJdHh3aVszXSB8PSBjcHVfdG9fbGUzMihNVF9UWEQzX1JFTV9UWF9DT1VOVCk7DQo+ICsJfQ0K PiArDQo+ICsJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkgew0K PiArCQl1MTYgc2Vxbm8gPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKTsNCj4gKw0KPiArCQlp ZiAoaWVlZTgwMjExX2lzX2JhY2tfcmVxKGhkci0+ZnJhbWVfY29udHJvbCkpIHsNCj4gKwkJCXN0 cnVjdCBpZWVlODAyMTFfYmFyICpiYXI7DQo+ICsNCj4gKwkJCWJhciA9IChzdHJ1Y3QgaWVlZTgw MjExX2JhciAqKXNrYi0+ZGF0YTsNCj4gKwkJCXNlcW5vID0gbGUxNl90b19jcHUoYmFyLT5zdGFy dF9zZXFfbnVtKTsNCj4gKwkJfQ0KPiArDQo+ICsJCXZhbCA9IE1UX1RYRDNfU05fVkFMSUQgfA0K PiArCQkgICAgICBGSUVMRF9QUkVQKE1UX1RYRDNfU0VRLA0KPiBJRUVFODAyMTFfU0VRX1RPX1NO KHNlcW5vKSk7DQo+ICsJCXR4d2lbM10gfD0gY3B1X3RvX2xlMzIodmFsKTsNCj4gKwkJdHh3aVsz XSAmPSB+Y3B1X3RvX2xlMzIoTVRfVFhEM19IV19BTVNEVSk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ ICt2b2lkIG10NzZfY29ubmFjM19tYWNfd3JpdGVfdHh3aShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwg X19sZTMyICp0eHdpLA0KPiArCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbXQ3Nl93 Y2lkDQo+ICp3Y2lkLA0KPiArCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksIGlu dA0KPiBwaWQsDQo+ICsJCQkJIGVudW0gbXQ3Nl90eHFfaWQgcWlkLCB1MzIgY2hhbmdlZCkNCj4g K3sNCj4gKwl1MzIgdmFsLCBzel90eGQgPSBtdDc2X2lzX21taW8oZGV2KSA/IE1UX1RYRF9TSVpF IDoNCj4gTVRfU0RJT19UWERfU0laRTsNCj4gKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmlu Zm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7DQo+ICsJc3RydWN0IGllZWU4MDIxMV92aWYgKnZp ZiA9IGluZm8tPmNvbnRyb2wudmlmOw0KPiArCXU4IGJhbmRfaWR4ID0gKGluZm8tPmh3X3F1ZXVl ICYgTVRfVFhfSFdfUVVFVUVfUEhZKSA+PiAyOw0KPiArCXU4IHBfZm10LCBxX2lkeCwgb21hY19p ZHggPSAwLCB3bW1faWR4ID0gMDsNCj4gKwlib29sIGlzXzgwMjMgPSBpbmZvLT5mbGFncyAmIElF RUU4MDIxMV9UWF9DVExfSFdfODAyMTFfRU5DQVA7DQo+ICsJc3RydWN0IG10NzZfdmlmICptdmlm Ow0KPiArCXUxNiB0eF9jb3VudCA9IDE1Ow0KPiArCWJvb2wgYmVhY29uID0gISEoY2hhbmdlZCAm IChCU1NfQ0hBTkdFRF9CRUFDT04gfA0KPiArCQkJCSAgICBCU1NfQ0hBTkdFRF9CRUFDT05fRU5B QkxFRCkpOw0KPiArCWJvb2wgaW5iYW5kX2Rpc2MgPSAhIShjaGFuZ2VkICYNCj4gKEJTU19DSEFO R0VEX1VOU09MX0JDQVNUX1BST0JFX1JFU1AgfA0KPiArCQkJCQkgQlNTX0NIQU5HRURfRklMU19E SVNDT1ZFUlkpKTsNCj4gKw0KPiArCW12aWYgPSB2aWYgPyAoc3RydWN0IG10NzZfdmlmICopdmlm LT5kcnZfcHJpdiA6IE5VTEw7DQo+ICsJaWYgKG12aWYpIHsNCj4gKwkJb21hY19pZHggPSBtdmlm LT5vbWFjX2lkeDsNCj4gKwkJd21tX2lkeCA9IG12aWYtPndtbV9pZHg7DQo+ICsJCWJhbmRfaWR4 ID0gbXZpZi0+YmFuZF9pZHg7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGluYmFuZF9kaXNjKSB7DQo+ ICsJCXBfZm10ID0gTVRfVFhfVFlQRV9GVzsNCj4gKwkJcV9pZHggPSBNVF9MTUFDX0FMVFgwOw0K PiArCX0gZWxzZSBpZiAoYmVhY29uKSB7DQo+ICsJCXBfZm10ID0gTVRfVFhfVFlQRV9GVzsNCj4g KwkJcV9pZHggPSBNVF9MTUFDX0JDTjA7DQo+ICsJfSBlbHNlIGlmIChxaWQgPj0gTVRfVFhRX1BT RCkgew0KPiArCQlwX2ZtdCA9IG10NzZfaXNfbW1pbyhkZXYpID8gTVRfVFhfVFlQRV9DVCA6DQo+ IE1UX1RYX1RZUEVfU0Y7DQo+ICsJCXFfaWR4ID0gTVRfTE1BQ19BTFRYMDsNCj4gKwl9IGVsc2Ug ew0KPiArCQlwX2ZtdCA9IG10NzZfaXNfbW1pbyhkZXYpID8gTVRfVFhfVFlQRV9DVCA6DQo+IE1U X1RYX1RZUEVfU0Y7DQo+ICsJCXFfaWR4ID0gd21tX2lkeCAqIE1UNzZfQ09OTkFDX01BWF9XTU1f U0VUUyArDQo+ICsJCQltdDc2X2Nvbm5hY19sbWFjX21hcHBpbmcoc2tiX2dldF9xdWV1ZV9tYXBw aW5nKA0KPiBza2IpKTsNCj4gKwl9DQo+ICsNCj4gKwl2YWwgPSBGSUVMRF9QUkVQKE1UX1RYRDBf VFhfQllURVMsIHNrYi0+bGVuICsgc3pfdHhkKSB8DQo+ICsJICAgICAgRklFTERfUFJFUChNVF9U WEQwX1BLVF9GTVQsIHBfZm10KSB8DQo+ICsJICAgICAgRklFTERfUFJFUChNVF9UWEQwX1FfSURY LCBxX2lkeCk7DQo+ICsJdHh3aVswXSA9IGNwdV90b19sZTMyKHZhbCk7DQo+ICsNCj4gKwl2YWwg PSBGSUVMRF9QUkVQKE1UX1RYRDFfV0xBTl9JRFgsIHdjaWQtPmlkeCkgfA0KPiArCSAgICAgIEZJ RUxEX1BSRVAoTVRfVFhEMV9PV05fTUFDLCBvbWFjX2lkeCk7DQo+ICsNCj4gKwlpZiAoYmFuZF9p ZHgpDQo+ICsJCXZhbCB8PSBGSUVMRF9QUkVQKE1UX1RYRDFfVEdJRCwgYmFuZF9pZHgpOw0KPiAr DQo+ICsJdHh3aVsxXSA9IGNwdV90b19sZTMyKHZhbCk7DQo+ICsJdHh3aVsyXSA9IDA7DQo+ICsN Cj4gKwl2YWwgPSBNVF9UWEQzX1NXX1BPV0VSX01HTVQgfA0KPiArCSAgICAgIEZJRUxEX1BSRVAo TVRfVFhEM19SRU1fVFhfQ09VTlQsIHR4X2NvdW50KTsNCj4gKwlpZiAoa2V5KQ0KPiArCQl2YWwg fD0gTVRfVFhEM19QUk9URUNUX0ZSQU1FOw0KPiArCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIx MV9UWF9DVExfTk9fQUNLKQ0KPiArCQl2YWwgfD0gTVRfVFhEM19OT19BQ0s7DQo+ICsJaWYgKHdj aWQtPmFtc2R1KQ0KPiArCQl2YWwgfD0gTVRfVFhEM19IV19BTVNEVTsNCj4gKw0KPiArCXR4d2lb M10gPSBjcHVfdG9fbGUzMih2YWwpOw0KPiArCXR4d2lbNF0gPSAwOw0KPiArDQo+ICsJdmFsID0g RklFTERfUFJFUChNVF9UWEQ1X1BJRCwgcGlkKTsNCj4gKwlpZiAocGlkID49IE1UX1BBQ0tFVF9J RF9GSVJTVCkNCj4gKwkJdmFsIHw9IE1UX1RYRDVfVFhfU1RBVFVTX0hPU1Q7DQo+ICsJdHh3aVs1 XSA9IGNwdV90b19sZTMyKHZhbCk7DQo+ICsNCj4gKwl2YWwgPSBNVF9UWEQ2X0RJU19NQVQgfCBN VF9UWEQ2X0RBUyB8DQo+ICsJICAgICAgRklFTERfUFJFUChNVF9UWEQ2X01TRFVfQ05ULCAxKTsN Cj4gKwl0eHdpWzZdID0gY3B1X3RvX2xlMzIodmFsKTsNCj4gKwl0eHdpWzddID0gMDsNCj4gKw0K PiArCWlmIChpc184MDIzKQ0KPiArCQltdDc2X2Nvbm5hYzNfbWFjX3dyaXRlX3R4d2lfODAyMyh0 eHdpLCBza2IsIHdjaWQpOw0KPiArCWVsc2UNCj4gKwkJbXQ3Nl9jb25uYWMzX21hY193cml0ZV90 eHdpXzgwMjExKGRldiwgdHh3aSwgc2tiLCBrZXkpOw0KPiArDQo+ICsJaWYgKHR4d2lbMV0gJiBj cHVfdG9fbGUzMihNVF9UWEQxX0ZJWEVEX1JBVEUpKSB7DQo+ICsJCXN0cnVjdCBpZWVlODAyMTFf aGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHINCj4gKilza2ItPmRhdGE7DQo+ICsJCWJv b2wgbWNhc3QgPSBpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmDQo+ICsJ CQkgICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpOw0KPiArCQl1OCBpZHgg PSBNVDc2X0NPTk5BQzNfQkFTSUNfUkFURVNfVEJMOw0KPiArDQo+ICsJCWlmIChtdmlmKSB7DQo+ ICsJCQlpZiAobWNhc3QgJiYgbXZpZi0+bWNhc3RfcmF0ZXNfaWR4KQ0KPiArCQkJCWlkeCA9IG12 aWYtPm1jYXN0X3JhdGVzX2lkeDsNCj4gKwkJCWVsc2UgaWYgKGJlYWNvbiAmJiBtdmlmLT5iZWFj b25fcmF0ZXNfaWR4KQ0KPiArCQkJCWlkeCA9IG12aWYtPmJlYWNvbl9yYXRlc19pZHg7DQo+ICsJ CQllbHNlDQo+ICsJCQkJaWR4ID0gbXZpZi0+YmFzaWNfcmF0ZXNfaWR4Ow0KPiArCQl9DQo+ICsN Cj4gKwkJdHh3aVs2XSB8PSBjcHVfdG9fbGUzMihGSUVMRF9QUkVQKE1UX1RYRDZfVFhfUkFURSwN Cj4gaWR4KSk7DQo+ICsJCXR4d2lbM10gfD0gY3B1X3RvX2xlMzIoTVRfVFhEM19CQV9ESVNBQkxF KTsNCj4gKwl9DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChtdDc2X2Nvbm5hYzNfbWFjX3dy aXRlX3R4d2kpOw0KPiArDQo+ICt2b2lkIG10NzZfY29ubmFjM190eHdpX2ZyZWUoc3RydWN0IG10 NzZfZGV2ICpkZXYsIHN0cnVjdA0KPiBtdDc2X3R4d2lfY2FjaGUgKnQsDQo+ICsJCQkgICAgc3Ry dWN0IGllZWU4MDIxMV9zdGEgKnN0YSwNCj4gKwkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpmcmVl X2xpc3QpDQo+ICt7DQo+ICsJX19sZTMyICp0eHdpOw0KPiArCXUxNiB3Y2lkX2lkeDsNCj4gKw0K PiArCW10NzZfY29ubmFjX3R4cF9za2JfdW5tYXAoZGV2LCB0KTsNCj4gKwlpZiAoIXQtPnNrYikN Cj4gKwkJZ290byBvdXQ7DQo+ICsNCj4gKwl0eHdpID0gKF9fbGUzMiAqKW10NzZfZ2V0X3R4d2lf cHRyKGRldiwgdCk7DQo+ICsJaWYgKHN0YSkgew0KPiArCQlzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lk ID0gKHN0cnVjdCBtdDc2X3djaWQgKilzdGEtDQo+ID5kcnZfcHJpdjsNCj4gKw0KPiArCQl3Y2lk X2lkeCA9IHdjaWQtPmlkeDsNCj4gKwkJaWYgKGxpa2VseSh0LT5za2ItPnByb3RvY29sICE9IGNw dV90b19iZTE2KEVUSF9QX1BBRSkpKQ0KPiArCQkJbXQ3Nl9jb25uYWMzX3R4X2NoZWNrX2FnZ3Io c3RhLCB0eHdpKTsNCj4gKwl9IGVsc2Ugew0KPiArCQl3Y2lkX2lkeCA9IGxlMzJfZ2V0X2JpdHMo dHh3aVsxXSwgTVRfVFhEMV9XTEFOX0lEWCk7DQo+ICsJfQ0KPiArDQo+ICsJX19tdDc2X3R4X2Nv bXBsZXRlX3NrYihkZXYsIHdjaWRfaWR4LCB0LT5za2IsIGZyZWVfbGlzdCk7DQo+ICtvdXQ6DQo+ ICsJdC0+c2tiID0gTlVMTDsNCj4gKwltdDc2X3B1dF90eHdpKGRldiwgdCk7DQo+ICt9DQo+ICtF WFBPUlRfU1lNQk9MX0dQTChtdDc2X2Nvbm5hYzNfdHh3aV9mcmVlKTsNCj4gKw0KPiArc3RhdGlj IGJvb2wNCj4gK210NzZfY29ubmFjM19tYWNfYWRkX3R4c19za2Ioc3RydWN0IG10NzZfZGV2ICpk ZXYsIHN0cnVjdCBtdDc2X3djaWQNCj4gKndjaWQsDQo+ICsJCQkgICAgIGludCBwaWQsIF9fbGUz MiAqdHhzX2RhdGEpDQo+ICt7DQo+ICsJc3RydWN0IG10NzZfc3RhX3N0YXRzICpzdGF0cyA9ICZ3 Y2lkLT5zdGF0czsNCj4gKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsN Cj4gKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87DQo+ICsJdTMyIHR4cmF0ZSwgdHhz LCBtb2RlLCBzdGJjOw0KPiArCXN0cnVjdCByYXRlX2luZm8gcmF0ZSA9IHt9Ow0KPiArCXN0cnVj dCBza19idWZmX2hlYWQgbGlzdDsNCj4gKwlzdHJ1Y3QgbXQ3Nl9waHkgKm1waHk7DQo+ICsJc3Ry dWN0IHNrX2J1ZmYgKnNrYjsNCj4gKwlib29sIGNjayA9IGZhbHNlOw0KPiArDQo+ICsJbXQ3Nl90 eF9zdGF0dXNfbG9jayhkZXYsICZsaXN0KTsNCj4gKwlza2IgPSBtdDc2X3R4X3N0YXR1c19za2Jf Z2V0KGRldiwgd2NpZCwgcGlkLCAmbGlzdCk7DQo+ICsJaWYgKCFza2IpDQo+ICsJCWdvdG8gb3V0 X25vX3NrYjsNCj4gKw0KPiArCXR4cyA9IGxlMzJfdG9fY3B1KHR4c19kYXRhWzBdKTsNCj4gKw0K PiArCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7DQo+ICsJaWYgKCEodHhzICYgTVRfVFhT MF9BQ0tfRVJST1JfTUFTSykpDQo+ICsJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFU X0FDSzsNCj4gKw0KPiArCWluZm8tPnN0YXR1cy5hbXBkdV9sZW4gPSAxOw0KPiArCWluZm8tPnN0 YXR1cy5hbXBkdV9hY2tfbGVuID0gISEoaW5mby0+ZmxhZ3MgJg0KPiArCQkJCQlJRUVFODAyMTFf VFhfU1RBVF9BQ0spOw0KPiArCWluZm8tPnN0YXR1cy5yYXRlc1swXS5pZHggPSAtMTsNCj4gKw0K PiArCXR4cmF0ZSA9IEZJRUxEX0dFVChNVF9UWFMwX1RYX1JBVEUsIHR4cyk7DQo+ICsNCj4gKwly YXRlLm1jcyA9IEZJRUxEX0dFVChNVF9UWF9SQVRFX0lEWCwgdHhyYXRlKTsNCj4gKwlyYXRlLm5z cyA9IEZJRUxEX0dFVChNVF9UWF9SQVRFX05TUywgdHhyYXRlKSArIDE7DQo+ICsJc3RiYyA9IGxl MzJfZ2V0X2JpdHModHhzX2RhdGFbM10sIE1UX1RYUzNfUkFURV9TVEJDKTsNCj4gKw0KPiArCWlm IChzdGJjICYmIHJhdGUubnNzID4gMSkNCj4gKwkJcmF0ZS5uc3MgPj49IDE7DQo+ICsNCj4gKwlp ZiAocmF0ZS5uc3MgLSAxIDwgQVJSQVlfU0laRShzdGF0cy0+dHhfbnNzKSkNCj4gKwkJc3RhdHMt PnR4X25zc1tyYXRlLm5zcyAtIDFdKys7DQo+ICsJaWYgKHJhdGUubWNzIDwgQVJSQVlfU0laRShz dGF0cy0+dHhfbWNzKSkNCj4gKwkJc3RhdHMtPnR4X21jc1tyYXRlLm1jc10rKzsNCj4gKw0KPiAr CW1vZGUgPSBGSUVMRF9HRVQoTVRfVFhfUkFURV9NT0RFLCB0eHJhdGUpOw0KPiArCXN3aXRjaCAo bW9kZSkgew0KPiArCWNhc2UgTVRfUEhZX1RZUEVfQ0NLOg0KPiArCQljY2sgPSB0cnVlOw0KPiAr CQlmYWxsdGhyb3VnaDsNCj4gKwljYXNlIE1UX1BIWV9UWVBFX09GRE06DQo+ICsJCW1waHkgPSBt dDc2X2Rldl9waHkoZGV2LCB3Y2lkLT5waHlfaWR4KTsNCj4gKw0KPiArCQlpZiAobXBoeS0+Y2hh bmRlZi5jaGFuLT5iYW5kID09IE5MODAyMTFfQkFORF81R0haKQ0KPiArCQkJc2JhbmQgPSAmbXBo eS0+c2JhbmRfNWcuc2JhbmQ7DQo+ICsJCWVsc2UgaWYgKG1waHktPmNoYW5kZWYuY2hhbi0+YmFu ZCA9PSBOTDgwMjExX0JBTkRfNkdIWikNCj4gKwkJCXNiYW5kID0gJm1waHktPnNiYW5kXzZnLnNi YW5kOw0KPiArCQllbHNlDQo+ICsJCQlzYmFuZCA9ICZtcGh5LT5zYmFuZF8yZy5zYmFuZDsNCj4g Kw0KPiArCQlyYXRlLm1jcyA9IG10NzZfZ2V0X3JhdGUobXBoeS0+ZGV2LCBzYmFuZCwgcmF0ZS5t Y3MsDQo+IGNjayk7DQo+ICsJCXJhdGUubGVnYWN5ID0gc2JhbmQtPmJpdHJhdGVzW3JhdGUubWNz XS5iaXRyYXRlOw0KPiArCQlicmVhazsNCj4gKwljYXNlIE1UX1BIWV9UWVBFX0hUOg0KPiArCWNh c2UgTVRfUEhZX1RZUEVfSFRfR0Y6DQo+ICsJCWlmIChyYXRlLm1jcyA+IDMxKQ0KPiArCQkJZ290 byBvdXQ7DQo+ICsNCj4gKwkJcmF0ZS5mbGFncyA9IFJBVEVfSU5GT19GTEFHU19NQ1M7DQo+ICsJ CWlmICh3Y2lkLT5yYXRlLmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTX1NIT1JUX0dJKQ0KPiArCQkJ cmF0ZS5mbGFncyB8PSBSQVRFX0lORk9fRkxBR1NfU0hPUlRfR0k7DQo+ICsJCWJyZWFrOw0KPiAr CWNhc2UgTVRfUEhZX1RZUEVfVkhUOg0KPiArCQlpZiAocmF0ZS5tY3MgPiA5KQ0KPiArCQkJZ290 byBvdXQ7DQo+ICsNCj4gKwkJcmF0ZS5mbGFncyA9IFJBVEVfSU5GT19GTEFHU19WSFRfTUNTOw0K PiArCQlicmVhazsNCj4gKwljYXNlIE1UX1BIWV9UWVBFX0hFX1NVOg0KPiArCWNhc2UgTVRfUEhZ X1RZUEVfSEVfRVhUX1NVOg0KPiArCWNhc2UgTVRfUEhZX1RZUEVfSEVfVEI6DQo+ICsJY2FzZSBN VF9QSFlfVFlQRV9IRV9NVToNCj4gKwkJaWYgKHJhdGUubWNzID4gMTEpDQo+ICsJCQlnb3RvIG91 dDsNCj4gKw0KPiArCQlyYXRlLmhlX2dpID0gd2NpZC0+cmF0ZS5oZV9naTsNCj4gKwkJcmF0ZS5o ZV9kY20gPSBGSUVMRF9HRVQoTVRfVFhfUkFURV9EQ00sIHR4cmF0ZSk7DQo+ICsJCXJhdGUuZmxh Z3MgPSBSQVRFX0lORk9fRkxBR1NfSEVfTUNTOw0KPiArCQlicmVhazsNCj4gKwljYXNlIE1UX1BI WV9UWVBFX0VIVF9TVToNCj4gKwljYXNlIE1UX1BIWV9UWVBFX0VIVF9UUklHOg0KPiArCWNhc2Ug TVRfUEhZX1RZUEVfRUhUX01VOg0KPiArCQlpZiAocmF0ZS5tY3MgPiAxMykNCj4gKwkJCWdvdG8g b3V0Ow0KPiArDQo+ICsJCXJhdGUuZWh0X2dpID0gd2NpZC0+cmF0ZS5laHRfZ2k7DQo+ICsJCXJh dGUuZmxhZ3MgPSBSQVRFX0lORk9fRkxBR1NfRUhUX01DUzsNCj4gKwkJYnJlYWs7DQo+ICsJZGVm YXVsdDoNCj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0KPiArDQo+ICsJc3RhdHMtPnR4X21vZGVbbW9k ZV0rKzsNCj4gKw0KPiArCXN3aXRjaCAoRklFTERfR0VUKE1UX1RYUzBfQlcsIHR4cykpIHsNCj4g KwljYXNlIElFRUU4MDIxMV9TVEFfUlhfQldfMzIwOg0KPiArCQlyYXRlLmJ3ID0gUkFURV9JTkZP X0JXXzMyMDsNCj4gKwkJc3RhdHMtPnR4X2J3WzRdKys7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2Ug SUVFRTgwMjExX1NUQV9SWF9CV18xNjA6DQo+ICsJCXJhdGUuYncgPSBSQVRFX0lORk9fQldfMTYw Ow0KPiArCQlzdGF0cy0+dHhfYndbM10rKzsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBJRUVFODAy MTFfU1RBX1JYX0JXXzgwOg0KPiArCQlyYXRlLmJ3ID0gUkFURV9JTkZPX0JXXzgwOw0KPiArCQlz dGF0cy0+dHhfYndbMl0rKzsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBJRUVFODAyMTFfU1RBX1JY X0JXXzQwOg0KPiArCQlyYXRlLmJ3ID0gUkFURV9JTkZPX0JXXzQwOw0KPiArCQlzdGF0cy0+dHhf YndbMV0rKzsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmF0ZS5idyA9IFJBVEVf SU5GT19CV18yMDsNCj4gKwkJc3RhdHMtPnR4X2J3WzBdKys7DQo+ICsJCWJyZWFrOw0KPiArCX0N Cj4gKwl3Y2lkLT5yYXRlID0gcmF0ZTsNCj4gKw0KPiArb3V0Og0KPiArCW10NzZfdHhfc3RhdHVz X3NrYl9kb25lKGRldiwgc2tiLCAmbGlzdCk7DQo+ICsNCj4gK291dF9ub19za2I6DQo+ICsJbXQ3 Nl90eF9zdGF0dXNfdW5sb2NrKGRldiwgJmxpc3QpOw0KPiArDQo+ICsJcmV0dXJuICEhc2tiOw0K PiArfQ0KPiArDQo+ICt2b2lkIG10NzZfY29ubmFjM19tYWNfYWRkX3R4cyhzdHJ1Y3QgbXQ3Nl9k ZXYgKmRldiwgdm9pZCAqZGF0YSwNCj4gKwkJCSAgICAgIHUzMiBtYXhfd3RibF9zaXplKQ0KPiAr ew0KPiArCXN0cnVjdCBtdDc2X3djaWQgKndjaWQ7DQo+ICsJX19sZTMyICp0eHNfZGF0YSA9IGRh dGE7DQo+ICsJdTE2IHdjaWR4Ow0KPiArCXU4IHBpZDsNCj4gKw0KPiArCWlmIChsZTMyX2dldF9i aXRzKHR4c19kYXRhWzBdLCBNVF9UWFMwX1RYU19GT1JNQVQpID4gMSkNCj4gKwkJcmV0dXJuOw0K PiArDQo+ICsJd2NpZHggPSBsZTMyX2dldF9iaXRzKHR4c19kYXRhWzJdLCBNVF9UWFMyX1dDSUQp Ow0KPiArCXBpZCA9IGxlMzJfZ2V0X2JpdHModHhzX2RhdGFbM10sIE1UX1RYUzNfUElEKTsNCj4g Kw0KPiArCWlmIChwaWQgPCBNVF9QQUNLRVRfSURfRklSU1QpDQo+ICsJCXJldHVybjsNCj4gKw0K PiArCWlmICh3Y2lkeCA+PSBtYXhfd3RibF9zaXplKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwly Y3VfcmVhZF9sb2NrKCk7DQo+ICsNCj4gKwl3Y2lkID0gcmN1X2RlcmVmZXJlbmNlKGRldi0+d2Np ZFt3Y2lkeF0pOw0KPiArCWlmICghd2NpZCkNCj4gKwkJZ290byBvdXQ7DQo+ICsNCj4gKwltdDc2 X2Nvbm5hYzNfbWFjX2FkZF90eHNfc2tiKGRldiwgd2NpZCwgcGlkLCB0eHNfZGF0YSk7DQo+ICsJ aWYgKCF3Y2lkLT5zdGEpDQo+ICsJCWdvdG8gb3V0Ow0KPiArDQo+ICsJc3Bpbl9sb2NrX2JoKCZk ZXYtPnN0YV9wb2xsX2xvY2spOw0KPiArCWlmIChsaXN0X2VtcHR5KCZ3Y2lkLT5wb2xsX2xpc3Qp KQ0KPiArCQlsaXN0X2FkZF90YWlsKCZ3Y2lkLT5wb2xsX2xpc3QsICZkZXYtPnN0YV9wb2xsX2xp c3QpOw0KPiArCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnN0YV9wb2xsX2xvY2spOw0KPiArDQo+ICtv dXQ6DQo+ICsJcmN1X3JlYWRfdW5sb2NrKCk7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTCht dDc2X2Nvbm5hYzNfbWFjX2FkZF90eHMpOw0KPiArDQo+ICt2b2lkIG10NzZfY29ubmFjM190eF90 b2tlbl9wdXQoc3RydWN0IG10NzZfZGV2ICpkZXYpDQo+ICt7DQo+ICsJc3RydWN0IG10NzZfdHh3 aV9jYWNoZSAqdHh3aTsNCj4gKwlpbnQgaWQ7DQo+ICsNCj4gKwlzcGluX2xvY2tfYmgoJmRldi0+ dG9rZW5fbG9jayk7DQo+ICsJaWRyX2Zvcl9lYWNoX2VudHJ5KCZkZXYtPnRva2VuLCB0eHdpLCBp ZCkgew0KPiArCQltdDc2X2Nvbm5hYzNfdHh3aV9mcmVlKGRldiwgdHh3aSwgTlVMTCwgTlVMTCk7 DQo+ICsJCWRldi0+dG9rZW5fY291bnQtLTsNCj4gKwl9DQo+ICsJc3Bpbl91bmxvY2tfYmgoJmRl di0+dG9rZW5fbG9jayk7DQo+ICsJaWRyX2Rlc3Ryb3koJmRldi0+dG9rZW4pOw0KPiArfQ0KPiAr RVhQT1JUX1NZTUJPTF9HUEwobXQ3Nl9jb25uYWMzX3R4X3Rva2VuX3B1dCk7DQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjM19tYWMu aA0KPiBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWMzX21h Yy5oDQo+IGluZGV4IDY2NjNhMGI0NjU0MS4uYmNjMWQ5NzZiMmIwIDEwMDY0NA0KPiAtLS0gYS9k cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjM19tYWMuaA0KPiAr KysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjM19tYWMu aA0KPiBAQCAtNCw2ICs0LDI0IEBADQo+ICAjaWZuZGVmIF9fTVQ3Nl9DT05OQUMzX01BQ19IDQo+ ICAjZGVmaW5lIF9fTVQ3Nl9DT05OQUMzX01BQ19IDQo+ICANCj4gKy8qIE5PVEU6IHVzZWQgdG8g bWFwIG10NzZfcmF0ZXMuIGlkeCBtYXkgY2hhbmdlIGlmIGZpcm13YXJlIGV4cGFuZHMNCj4gdGFi bGUgKi8NCj4gKyNkZWZpbmUgTVQ3Nl9DT05OQUMzX0JBU0lDX1JBVEVTX1RCTAkxMQ0KPiArI2Rl ZmluZSBNVDc2X0NPTk5BQzNfQkVBQ09OX1JBVEVTX1RCTAkyNQ0KPiANCg0KRGlmZmVyZW50IGRl dmljZXMgbWF5IGhhdmUgZGlmZmVyZW50IGRlZmluZWQgdmFsdWUuIA0KDQpJJ20gdGhpbmtpbmcg aWYgaXQncyB0b28gZWFybHkgdG8gY3JlYXRlIHRoaXMgcGF0Y2ggZm9yIGp1c3QgbW92aW5nDQpt dDc5OTYgdG8gY29ubmFjM19saWI/DQoNClJ5ZGVyDQoNCg==