Received: by 2002:a05:7412:cfc7:b0:fc:a2b0:25d7 with SMTP id by7csp1026858rdb; Mon, 19 Feb 2024 01:34:17 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCUEh7xOnGDaK+gd4n8LTdmgk9hS5MIFc5WaV4oyp7UrB/NrgDvQPCW6cKVHG28BU1Y6dy0xAqT0TogLIclm1ZzW1DpTcGp6/UZnAq9qSw== X-Google-Smtp-Source: AGHT+IGKnK8qUC5hnPsaLgmdikwisPEa2SFea9fyVfQhCpov0n2VbEWThpEJkU7BIOW/azsfXEqg X-Received: by 2002:a05:620a:d4b:b0:785:d8a3:ab84 with SMTP id o11-20020a05620a0d4b00b00785d8a3ab84mr13284824qkl.34.1708335256873; Mon, 19 Feb 2024 01:34:16 -0800 (PST) Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id h15-20020a05620a13ef00b007876f92a852si376903qkl.0.2024.02.19.01.34.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 01:34:16 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-71034-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=mB42vw3Z; dkim=pass header.i=@mediateko365.onmicrosoft.com header.s=selector2-mediateko365-onmicrosoft-com header.b="VAPqn9k/"; arc=fail (signature failed); spf=pass (google.com: domain of linux-kernel+bounces-71034-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71034-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 04DDE1C21227 for ; Mon, 19 Feb 2024 09:34:16 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8C46A23774; Mon, 19 Feb 2024 09:34:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="mB42vw3Z"; dkim=pass (1024-bit key) header.d=mediateko365.onmicrosoft.com header.i=@mediateko365.onmicrosoft.com header.b="VAPqn9k/" Received: from mailgw01.mediatek.com (unknown [60.244.123.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E51B320DFD for ; Mon, 19 Feb 2024 09:34:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=60.244.123.138 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708335249; cv=fail; b=J/jOKv8ft2EUYVss/77sQGz1aCgnad7kXIlfnILN1/K/spoUU1Ll7lyveASUzOVoQ6nWIQioPcwBPajYf66PYq3IP7QxnMu+JFonRl7rqmKDVdekLHXzzU9gu1+WFx9W0R96GsOSgy8BbNC1Se8Scp9TlBa1KV8SN8Dp5rFvylQ= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708335249; c=relaxed/simple; bh=9ikuHT4AXARUJ85JVTXhBTjdAPalh1cyBUb3GYDpQW8=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=CZGRoalb8Bsm5d5OX6Nbq8sNPxW8WBt/ulPogclHRH9ftHExelQhBqsLOJmWYnM+W20ERda0Ghd/ujv3jZtZutklqYsL/8p87QMyBOpK235x9t6wHYWBjVk0o+jgAFXvC8aMG0h4PNfMFkggtbSxC21jcvztRctSt9pTwm2BadE= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com; spf=pass smtp.mailfrom=mediatek.com; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b=mB42vw3Z; dkim=pass (1024-bit key) header.d=mediateko365.onmicrosoft.com header.i=@mediateko365.onmicrosoft.com header.b=VAPqn9k/; arc=fail smtp.client-ip=60.244.123.138 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mediatek.com X-UUID: ff34eef0cf0911ee9e680517dc993faa-20240219 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=9ikuHT4AXARUJ85JVTXhBTjdAPalh1cyBUb3GYDpQW8=; b=mB42vw3Zun6iVgLN3AqBmK3+3YazY5Zh7oD8psnDEtV02waRi3jzGY9XFUsYAk2KFmv35UiRf7wZagy7w2DLZPXChxh2XaT+ZqVRr+HHBwpuSo1fs2eoCww9DOh7S8BKNefCMQtrCc1qRMORuPaCpLuVfyYwQxa4nzpRXkUp4Jw=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.37,REQID:4887c567-f9fd-45b3-8835-08252f35fa80,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:6f543d0,CLOUDID:f43c8e80-4f93-4875-95e7-8c66ea833d57,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:102,TC:nil,Content:0,EDM:-3,IP:nil,U RL:1,File:nil,RT:nil,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0,AV:0,LES:1, SPR:NO,DKR:0,DKP:0,BRR:0,BRE:0 X-CID-BVR: 0 X-CID-BAS: 0,_,0,_ X-CID-FACTOR: TF_CID_SPAM_ULS,TF_CID_SPAM_SNR X-UUID: ff34eef0cf0911ee9e680517dc993faa-20240219 Received: from mtkmbs10n1.mediatek.inc [(172.21.101.34)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1795412894; Mon, 19 Feb 2024 17:33:53 +0800 Received: from mtkmbs10n1.mediatek.inc (172.21.101.34) by mtkmbs13n1.mediatek.inc (172.21.101.193) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.26; Mon, 19 Feb 2024 17:33:52 +0800 Received: from APC01-TYZ-obe.outbound.protection.outlook.com (172.21.101.237) by mtkmbs10n1.mediatek.inc (172.21.101.34) with Microsoft SMTP Server id 15.2.1118.26 via Frontend Transport; Mon, 19 Feb 2024 17:33:52 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iVt/YvuLr2irK7T3wcDi8i0W7CUwsYfmas5c8xQzmWQUzrwAz6edj+Hp395z8+yM7nT6CU5UFLA81x9/OyTfMqYYqYI3/1eiwbK0wICmwo6DEpg7ikrYu47pXm0KARB644n4kmEIsIheDtVJNdZCX9toCvmy/s/gj60Jcps1ofgo7HibBARSK/gqb/gUzmoDD51VlguUSid4OPV6UERbOQYRwaOqPbhofRiJlt/qo0mYo8eTk588T7MvqXCv3BISxYV1SdekVQDdFl170ZQUCHD2A7Ak8tO08VZxD5T1KkZqpNx86WTJSxRsPqnz9ulCDzDrGtCXr66gLMjEz1oqpQ== 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=9ikuHT4AXARUJ85JVTXhBTjdAPalh1cyBUb3GYDpQW8=; b=DaB/vxV0/uaF7eL+meANFw14u1JAMHLhsgYEtslYNwcMq8IaDqT2hg1lPKEoivfP6TjIRTVg47BRLkFPBQOpdExRIJhXSWc5zaVCj/vtMllQCCsYCbkf5jtaTKOp2LVtVb/n36IbquWM4F3bYvLoqlgD81207rgX56+NI27nBJeUyQlcXO+bPwBbDWihXaJR5BTHy+0W0qRRRjHNwfY7f/6gm2MLh5MwSLhklcsMSfRFmboTA/qrA1xc7ZB+a1c+NFjDxwcVu4w+d2UlHROSS4HD/F+YEvR0jhGYueAJwreE80Kke0SRh0IYZWyb3OUYNoYGb/RJLqOb4cpdCseWzw== 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=9ikuHT4AXARUJ85JVTXhBTjdAPalh1cyBUb3GYDpQW8=; b=VAPqn9k/4kFvmWMnFVqME0CSsIL7+9IKEua36ytFkzkIVdwI9GrRePh6ne0CQbQ+TaNvhiA/OKWkyCBPKDjjy5cwBGWdw15bRE0tv+80I2f2IcD+uFkNQTFFmDLzx0kEgggnXCq5NKXAK3au+n7VDwPpDfyrNUKFb96rwX0wJxU= Received: from TYZPR03MB6624.apcprd03.prod.outlook.com (2603:1096:400:1f4::13) by JH0PR03MB9054.apcprd03.prod.outlook.com (2603:1096:990:7e::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.29; Mon, 19 Feb 2024 09:33:50 +0000 Received: from TYZPR03MB6624.apcprd03.prod.outlook.com ([fe80::b705:ea58:46d:e98d]) by TYZPR03MB6624.apcprd03.prod.outlook.com ([fe80::b705:ea58:46d:e98d%4]) with mapi id 15.20.7292.029; Mon, 19 Feb 2024 09:33:49 +0000 From: =?utf-8?B?Q0sgSHUgKOiDoeS/iuWFiSk=?= To: =?utf-8?B?TWFjIFNoZW4gKOayiOS/iik=?= , "chunkuang.hu@kernel.org" , =?utf-8?B?Sml0YW8gU2hpICjnn7PorrDmtpsp?= , "daniel@ffwll.ch" , "p.zabel@pengutronix.de" , "airlied@gmail.com" , "matthias.bgg@gmail.com" , "angelogioacchino.delregno@collabora.com" CC: "dri-devel@lists.freedesktop.org" , "linux-kernel@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "linux-arm-kernel@lists.infradead.org" , =?utf-8?B?U2h1aWppbmcgTGkgKOadjuawtOmdmSk=?= Subject: Re: [PATCH v2 2/3] Subject: [PATCH] drm/mediatek/dp: Add HDCP2.x feature for DisplayPort Thread-Topic: [PATCH v2 2/3] Subject: [PATCH] drm/mediatek/dp: Add HDCP2.x feature for DisplayPort Thread-Index: AQHaV/eVzqRhxdMZlkypH21h174pubERfYyA Date: Mon, 19 Feb 2024 09:33:49 +0000 Message-ID: <97606a5ff68fad6fe1b848f67298f8668e1aa46c.camel@mediatek.com> References: <20240205055055.25340-1-mac.shen@mediatek.com> <20240205055055.25340-3-mac.shen@mediatek.com> In-Reply-To: <20240205055055.25340-3-mac.shen@mediatek.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mediatek.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYZPR03MB6624:EE_|JH0PR03MB9054:EE_ x-ms-office365-filtering-correlation-id: 1ee525c3-4e7c-48d9-4ead-08dc312de110 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: hL/BjsWwe/7xKGosDbsxhzqspl3EEx2SS1HwX8FBMgavm4ZcnvUkwyAnu5X+aqcUNQ0SJqFjTRteSAHig1IEXTv6+Lpae4MDmpIEWhSjJcIljoad/YdTt0OSJdXum1FZ82/HTFZuXA+b8ouQLZOgJSAdvimPzgyA/pG1X9o6mglES2elxj4b2xhn/WaBA5JTv0Vvt2SY1B5wJsWBFi+iBLL+WHA2E5qy98eNLfDBW10NtSuHK/jTvhepeuc4lZvkd/ENA7eOdmSnmPWI8neyrR3/GF0Cwy7oRGGWMsiitZtP8AoCt1l+oDtRTQtpZseuur/HGddRHMpc3p/qYNIXXoC/ROLh3l83r1KrXbIjlsObPExtNpRQDFZV9WBFNkr6DNBeG10R6ucyyhe+JyjRsVOuv/5sEmPjPeod9kxq9VuA9pM9TjUEx6FdSbEethPa3jD+u7NEVRvscer487grGFRNT8eVeuD5kMhGdux+5Gtm/Xp++DDbCR6Lk3d7iOkiDrY80f9iwrp43aRvb939EzRgxWyExVFIMfeLxT2HyPVWXfDpXLexG+duVApVp7PKMdI6jyXC/NiaLUa8x74YzcVUCQ2hPF5y4jF+ZvUGLEg= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYZPR03MB6624.apcprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(136003)(39860400002)(346002)(376002)(366004)(396003)(230922051799003)(451199024)(64100799003)(186009)(1800799012)(86362001)(66476007)(76116006)(64756008)(66446008)(66946007)(66556008)(41300700001)(122000001)(38100700002)(7416002)(2906002)(4326008)(316002)(38070700009)(30864003)(8676002)(8936002)(5660300002)(54906003)(110136005)(83380400001)(85182001)(71200400001)(6506007)(966005)(6512007)(26005)(6486002)(478600001)(2616005)(107886003)(36756003)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZDBqaDk2TDBva3h6aGhVTUxZeHltUWc1YzNWY3lxZEtUME1MSE5UUXg1dGRK?= =?utf-8?B?bEZPUFY3d281WE80dlhEb2ZJK0ZQRHlpN3FBNkJQZUhSNXczY1VuUnF5bnpx?= =?utf-8?B?QkhmT2pNWTRRajIzVFpVRHZvclZBT2QyOEFIbFIyZjRncHVUd0RIUTJranBw?= =?utf-8?B?WWlNY2lPQjJsVjhhMUZsSWNLZnl4R0VKWjFMbkxNYTdPTy8wbEZWeXBkSDJC?= =?utf-8?B?TlRaaWtXQ2ZtRC9NSk56cTRVVWx2K0F4NlBpTzJVWXFJZzRxQWdmQnhtTUNB?= =?utf-8?B?OFNLZytzK3VMQS9RMHZadVJyWjlMc3RweUp0TktDTCtmT0JzbkcyTFhaVzJO?= =?utf-8?B?ZkJIVlZSVXJOK1VmTEt6RW1nU2F5SEZlRkhXNjQ5Z3M5Nlc3RlJIVW8zMGVK?= =?utf-8?B?eE1BeFQwWnZ1ZktVbEI2a1A0MVFMd0hPcXFMWWo5US9IV24wSCs1ejJyY2lN?= =?utf-8?B?czAwdDA0cWNlNjFjemlScDZqR0x4b1JCN1lKallzMGptYnhQNFljZUJsaUQv?= =?utf-8?B?SUQ1emRjNEE4VHhxcGdNQm5PNEMzVUd0Unp0TEtOSVFCRTBtTTkycHVRMUVv?= =?utf-8?B?VEpjR0RFUWVmN0l4YXRtWmVWR1drUWlUMnRKaHoxMzlONHlHNXFpeWxHQzg4?= =?utf-8?B?MGJueFNoYnBZT2dpTDJmcXZ5UVEvUHRYQTFXMTZTdkpZQ0lIQ0kyWHhzc3cr?= =?utf-8?B?WmpBSmpFN1BPcy8yWmU4dFVld1dSYnRiUlMxeFVJZE1vL3BETERLYzBhcTBD?= =?utf-8?B?NkNrUloxeEQwVlhhWjdCZ215bzNQbkZSL001bTg1M1NjLzhQd2VudFBEL1Np?= =?utf-8?B?U1RTOHNaWmdMWTc4ZDZIMjJKemp5UC93aTBiT1dPMUpPWHNhOXd6T1lXcXFO?= =?utf-8?B?UTloaDVhYmVWSCs0NTI0QmZEMjVOdEpQeWpMbjhubXJMVkc4alU1ZTlVUFpV?= =?utf-8?B?S09xVWZQMXl4cjRyYy9vcnJXdkVrWmhaRVdjeDhHcVdPUVRvV2ZxRlk2bFdi?= =?utf-8?B?aUhpQjRYOEdYb3VZb3dSVnNOY0ZPbTMzUWd3QTRKL2ljTnEzeS84T25JTVJK?= =?utf-8?B?NzNYUGZXdUFXRHRodGliV0o5RGNTbTZBdHJ5ZzJmUEdOZ3JmME1IZVhpaUNx?= =?utf-8?B?cW9oOFF3Vkh3RytZWXhROEg0SWtGbzdUcG5VSWFxcVlZZlNDbDVjKzI1NUh3?= =?utf-8?B?anVuNk5OV3drOS9JRHQ2QmhJaVZFZXovTWxrbW5oZDZMZTVJNmk4eitxQTNP?= =?utf-8?B?ZWFpby94TEtTZFRVdVkwanVrV1FoQUlYL1AzRkNlVytpZTN5TmJrWUlRK3pN?= =?utf-8?B?M08yODlrMHgvSUVZVDBva29VdlpBNy9aaXpDblpGcDdYSUZHdS9XNXkwTVJJ?= =?utf-8?B?SENQT3JwelRkZnpCN2RJRDlRd1dVaGN6TTFPVFVmTkpEZUJUQk85MDdvOXM3?= =?utf-8?B?aHkrYjYyMUljRkJiZEF4YllSTUVFTCtqQk1mQ25HYTZiYW4xM3RsbW9JOGJu?= =?utf-8?B?S1VYYlV6aXJOODZUU00ycGphaGZweWFEVHBnQnEvWHU1UzdxYWNEK0hTTlFN?= =?utf-8?B?ZlhXNzFUdUZuZ2hKWldXWDZpSjdUQWVsR2J1TzhWZm5WTW1mSEVpNDNvQmFZ?= =?utf-8?B?Q2ZPd2FOQmJSL1BLaTJoSUdxSTlacFk4OHdwa0VmUERtWDJpZ1hzVktmVXZz?= =?utf-8?B?eTduMklObVFRT2NDM3FGeTFqYWtvdFJueE9vaHcvREFhQUIvNnN0Q0ZRM1RY?= =?utf-8?B?SUhibTJTV2NXb1JCSGZta2NEZ2tjY2diUUczNFVJZUpTSjBybWpiQzRKV1VY?= =?utf-8?B?T0RrMEN3a21CRUdOV2ttZXc5eE9YNEJyRTNJclB5bElIVHBYb05XYlhVM0FF?= =?utf-8?B?YWIyWElUYlVkdkVERFN1RjcwcWVjV2dqZHAycVJFWXZwTDhpOVRIRkQyeTBO?= =?utf-8?B?enpXN1NVbU90MlUyeUI1MmZodDVuR05KYTVpNjBtbVBpSVZRQ243dG8rRVJM?= =?utf-8?B?cHhDRGxhRk1nZVZ1Z2FBb2NzTkpqeSt2Q0d1dFJxbC85Sko1VGZBYlRraFZi?= =?utf-8?B?eHlVRHptUll3YUdNSjhYNy96Nm5IUHNPWjZCb1M4S3hZWG5jeStPbHkwcFJP?= =?utf-8?Q?EW3vlPa9+cxQ6KZ1dGf1QFZ3X?= Content-Type: text/plain; charset="utf-8" Content-ID: <9DDFDA24194FF44CBB446D36FFE3022E@apcprd03.prod.outlook.com> Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR03MB6624.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1ee525c3-4e7c-48d9-4ead-08dc312de110 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Feb 2024 09:33:49.8611 (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: ZuJUoPK8sClZv9QOJjMaSbFD7C9oCJc5HFCOAE1DR0jkVxZQjXOE73JWQ13mtAG0W4ek054E4spnlEMzq19VuA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR03MB9054 SGksIE1hYzoNCg0KT24gTW9uLCAyMDI0LTAyLTA1IGF0IDEzOjUwICswODAwLCBtYWMuc2hlbiB3 cm90ZToNCj4gQWRkIEhEQ1AyLnggZmVhdHVyZSBmb3IgRGlzcGxheVBvcnQuDQo+IFdoZW4gdXNl cnNwYWNlIHJlcXVlc3QgdGhlIGtlcm5lbCBwcm90ZWN0IGZ1dHVyZSBjb250ZW50IGNvbW11bmlj YXRlZA0KPiBvdmVyIHRoZSBsaW5rIHdpdGggQ29udGVudF9Qcm90ZWN0aW9uIHByb3BlcnR5LCB0 aGUgZmVhdHVyZSB3aWxsIGRvDQo+IEhEQ1AyLnggYXV0aGVudGljYXRpb24gaWYgdGhlIHNpbmsg c3VwcG9ydCBIRENQMi5YLg0KPiANCj4gQ2hhbmdlcyBpbiB2MjoNCj4gLSByZW1vdmUgc3dpdGNo IGNhc2UsIGFuZCByZWZpbmUgY29kZSB0byBtYWtlIG1vcmUgY2xlYXINCj4gLSByZW1vdmUgc29t ZSBkZWZpbml0aW9ucywgYW5kIHVzZSB0aGUgZGVmaW5pdGlvbnMgaW4NCj4gICBpbmNsdWRlL2Ry bS9kcm1faGRjcC5oDQo+IC0gdXNlIHRoZSBzdHJ1Y3Qgd2hpY2ggZGVmaW5lZCBpbiBpbmNsdWRl L2RybS9kcm1faGRjcC5oDQo+IC0gZG8gSERDUDIueCBhdXRoZW50aWNhdGlvbiB3aGVuIHVzZXJz cGFjZSByZXF1ZXN0IHRoZQ0KPiAgIGtlcm5lbCBwcm90ZWN0IGZ1dHVyZSBjb250ZW50IGNvbW11 bmljYXRlZA0KPiBwZXIgc3VnZ2VzdGlvbiBmcm9tIHRoZSBwcmV2aW91cyB0aHJlYWQ6DQo+IGh0 dHBzOi8vbG9yZS5rZXJuZWwub3JnL2FsbC84ZmZmNTliNTU2NzQ0OWQ4MjAxZGQxMTM4YzhmYQ0K PiA5MjE4YTU0NWM0Ni5jYW1lbEBtZWRpYXRlay5jb20vDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBt YWMuc2hlbiA8bWFjLnNoZW5AbWVkaWF0ZWsuY29tPg0KPiAtLS0NCg0KW3NuaXBdDQoNCj4gKw0K PiAraW50IGRwX3R4X2hkY3AyX2ZzbShzdHJ1Y3QgbXRrX2hkY3BfaW5mbyAqaGRjcF9pbmZvKQ0K PiArew0KPiArCXN0YXRpYyB1MzIgdGltZW91dF92YWx1ZTsNCj4gKwlzdGF0aWMgdTggcHJlX21h aW47DQo+ICsJc3RhdGljIHU4IHByZV9zdWI7DQo+ICsJc3RhdGljIHUzMiBwcmVfdGltZTsNCj4g KwlpbnQgZXJyX2NvZGUgPSBIRENQX0VSUl9OT05FOw0KPiArCWJvb2wgc3RvcmVkID0gZmFsc2U7 DQo+ICsJdTMyIHRpbWU7DQo+ICsJaW50IHJldCA9IDA7DQo+ICsJYm9vbCB0bXAgPSBmYWxzZTsN Cj4gKw0KPiArCWlmIChwcmVfbWFpbiAhPSBoZGNwX2luZm8tPmhkY3AyX2luZm8uaGRjcF9oYW5k bGVyLm1haW5fc3RhdGUNCj4gfHwNCj4gKwkgICAgaGRjcF9pbmZvLT5oZGNwMl9pbmZvLmhkY3Bf aGFuZGxlci5zdWJfc3RhdGUgIT0gcHJlX3N1Yikgew0KPiArCQlEUFRYSERDUE1TRygiMi54OiBQ b3J0KE0gOiBTKT0gKCVkLCAlZCkiLA0KPiArCQkJICAgIGhkY3BfaW5mby0NCj4gPmhkY3AyX2lu Zm8uaGRjcF9oYW5kbGVyLm1haW5fc3RhdGUsDQo+ICsJCQkgICAgaGRjcF9pbmZvLQ0KPiA+aGRj cDJfaW5mby5oZGNwX2hhbmRsZXIuc3ViX3N0YXRlKTsNCj4gKwkJcHJlX21haW4gPSBoZGNwX2lu Zm8tDQo+ID5oZGNwMl9pbmZvLmhkY3BfaGFuZGxlci5tYWluX3N0YXRlOw0KPiArCQlwcmVfc3Vi ID0gaGRjcF9pbmZvLT5oZGNwMl9pbmZvLmhkY3BfaGFuZGxlci5zdWJfc3RhdGU7DQo+ICsJfQ0K PiArDQo+ICsJc3dpdGNoIChoZGNwX2luZm8tPmhkY3AyX2luZm8uaGRjcF9oYW5kbGVyLm1haW5f c3RhdGUpIHsNCj4gKwljYXNlIEhEQ1AyX01TX0gxUDE6DQo+ICsJCS8qIEhEQ1AyX01TX0gxUDEg Ki8NCj4gKwkJLyogSERDUF8yXzJfQVVUSF9GQUlMICovDQo+ICsJCWlmIChoZGNwX2luZm8tPmhk Y3AyX2luZm8uaGRjcF9oYW5kbGVyLnN1Yl9zdGF0ZSA9PQ0KPiBIRENQXzJfMl9BVVRIX0ZBSUwp IHsNCj4gKwkJCXByX2VycigiMi54OiBBdXRoZW50aWNhdGlvbiBGYWlsIVxuIik7DQo+ICsJCQlk cF90eF9oZGNwMl9lbmFibGVfYXV0aChoZGNwX2luZm8sIGZhbHNlKTsNCj4gKwkJCWhkY3BfaW5m by0+YXV0aF9zdGF0dXMgPSBBVVRIX0ZBSUw7DQo+ICsJCX0NCj4gKwkJYnJlYWs7DQo+ICsNCj4g KwljYXNlIEhEQ1AyX01TX0EwRjA6DQo+ICsJCS8qIEhEQ1AyX01TX0EwRjAgKi8NCj4gKwkJLyog SERDUF8yXzJfTlVMTF9NU0cgKi8NCj4gKwkJaWYgKGhkY3BfaW5mby0+aGRjcDJfaW5mby5oZGNw X2hhbmRsZXIuc3ViX3N0YXRlID09DQo+IEhEQ1BfMl8yX05VTExfTVNHKSB7DQoNCkNvdWxkIHlv dSByZWZlciB0byBpbnRlbCBkcml2ZXIgdG8gZ2V0IHJpZCBvZiB0aGlzIHN0YXRlIG1hY2hpbmU/ IEl0DQpzZWFtcyB0aGlzIGZsb3cgZG9lcyBub3QgbmVlZCBzdGF0ZSBtYWNoaW5lLiBKdXN0IHN0 ZXAgZm9yd2FyZC4gSWYNCmVycm9yIGhhcHBlbiwgYnJlYWsgdGhlIGZsb3cuIElmIHlvdXIgaW1w bGVtZW50IGlzIGxpa2UgaW50ZWwgZHJpdmVyLA0KaXQncyBlYXNpZXIgZm9yIG1lIHRvIGNvbXBh cmUgYW5kIGVhc2llciB0byByZXZpZXcuDQoNClsxXSANCmh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcv cHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdC90cmVlL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfaGRjcC5jP2g9djYuOC1yYzUjbjE4NjgNCg0KUmVn YXJkcywNCkNLDQoNCj4gKwkJCWlmICghaGRjcF9pbmZvLT5oZGNwMl9pbmZvLmVuYWJsZSkgew0K PiArCQkJCWRwX3R4X2hkY3AyX3NldF9zdGF0ZShoZGNwX2luZm8sDQo+IEhEQ1AyX01TX0gxUDEs IEhEQ1BfMl8yX0FVVEhfRkFJTCk7DQo+ICsJCQkJRFBUWEhEQ1BNU0coIjIueDogU2luayBEb2Vz bid0IFN1cHBvcnQNCj4gSGRjcDJ4IVxuIik7DQo+ICsJCQkJYnJlYWs7DQo+ICsJCQl9DQo+ICsN Cj4gKwkJCWRwX3R4X2hkY3AyX2luaXQoaGRjcF9pbmZvKTsNCj4gKwkJCWRwX3R4X2hkY3AyX3Nl dF9zdGF0ZShoZGNwX2luZm8sIEhEQ1AyX01TX0ExRjEsDQo+IEhEQ1BfMl8yX05VTExfTVNHKTsN Cj4gKwkJCURQVFhIRENQTVNHKCIyLng6IFNpbmsgU3VwcG9ydCBIZGNwMnghXG4iKTsNCj4gKwkJ fQ0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgSERDUDJfTVNfQTFGMToNCj4gKwkJLyogSERD UDJfTVNfQTFGMSAqLw0KPiArCQkvKiBIRENQXzJfMl9OVUxMX01TRyAqLw0KPiArCQlpZiAoaGRj cF9pbmZvLT5oZGNwMl9pbmZvLmhkY3BfaGFuZGxlci5zdWJfc3RhdGUgPT0NCj4gSERDUF8yXzJf TlVMTF9NU0cpIHsNCj4gKwkJCWlmIChoZGNwX2luZm8tPmhkY3AyX2luZm8ucmV0cnlfY291bnQg Pj0NCj4gSERDUDJfVFhfUkVUUllfQ05UKSB7DQo+ICsJCQkJZHBfdHhfaGRjcDJfc2V0X3N0YXRl KGhkY3BfaW5mbywNCj4gSERDUDJfTVNfSDFQMSwgSERDUF8yXzJfQVVUSF9GQUlMKTsNCj4gKwkJ CQlwcl9lcnIoIjIueDogVHJ5IE1heCBDb3VudFxuIik7DQo+ICsJCQkJYnJlYWs7DQo+ICsJCQl9 DQo+ICsNCj4gKwkJCWhkY3BfaW5mby0+aGRjcDJfaW5mby5yZXRyeV9jb3VudCsrOw0KPiArCQkJ ZHBfdHhfaGRjcDJfc2V0X3N0YXRlKGhkY3BfaW5mbywgSERDUDJfTVNfQTFGMSwNCj4gSERDUF8y XzJfQUtFX0lOSVQpOw0KPiArCQl9DQo+ICsNCj4gKwkJLyogSERDUDJfTVNfQTFGMSAqLw0KPiAr CQkvKiBIRENQXzJfMl9BS0VfSU5JVCAqLw0KPiArCQlpZiAoaGRjcF9pbmZvLT5oZGNwMl9pbmZv LmhkY3BfaGFuZGxlci5zdWJfc3RhdGUgPT0NCj4gSERDUF8yXzJfQUtFX0lOSVQpIHsNCj4gKwkJ CXRtcCA9IGRwX3R4X2hkY3AyX3dyaXRlX21zZyhoZGNwX2luZm8sDQo+IEhEQ1BfMl8yX0FLRV9J TklUKTsNCj4gKwkJCWlmICghdG1wKSB7DQo+ICsJCQkJZXJyX2NvZGUgPSBIRENQX0VSUl9TRU5E X01TR19GQUlMOw0KPiArCQkJCWRwX3R4X2hkY3AyX2Vycl9oYW5kbGUoaGRjcF9pbmZvLA0KPiBl cnJfY29kZSwgX19MSU5FX18pOw0KPiArCQkJCWJyZWFrOw0KPiArCQkJfQ0KPiArCQkJZHBfdHhf aGRjcDJfcmVzdF92YXJpYWJsZShoZGNwX2luZm8pOw0KPiArCQkJaGRjcF9pbmZvLT5oZGNwMl9p bmZvLnJlYWRfY2VydHJ4ID0gdHJ1ZTsNCj4gKw0KPiArCQkJaGRjcF9pbmZvLQ0KPiA+aGRjcDJf aW5mby5oZGNwX2hhbmRsZXIuc2VuZF9ha2VfaW5pdCA9IHRydWU7DQo+ICsJCQlkcF90eF9oZGNw Ml9zZXRfc3RhdGUoaGRjcF9pbmZvLCBIRENQMl9NU19BMUYxLA0KPiBIRENQXzJfMl9BS0VfU0VO RF9DRVJUKTsNCj4gKwkJCXByZV90aW1lID0gbXRrX2RwX2dldF9zeXN0ZW1fdGltZSgpOw0KPiAr CQl9DQo+ICsNCj4gKwkJLyogSERDUDJfTVNfQTFGMSAqLw0KPiArCQkvKiBIRENQXzJfMl9BS0Vf U0VORF9DRVJUICovDQo+ICsJCWlmIChoZGNwX2luZm8tPmhkY3AyX2luZm8uaGRjcF9oYW5kbGVy LnN1Yl9zdGF0ZSA9PQ0KPiBIRENQXzJfMl9BS0VfU0VORF9DRVJUKSB7DQo+ICsJCQl0aW1lID0g bXRrX2RwX2dldF90aW1lX2RpZmYocHJlX3RpbWUpOw0KPiArCQkJaWYgKHRpbWUgPCBIRENQXzJf Ml9DRVJUX1RJTUVPVVRfTVMpIHsNCj4gKwkJCQltc2xlZXAoMjApOw0KPiArCQkJCWJyZWFrOw0K PiArCQkJfQ0KPiArCQkJaWYgKGhkY3BfaW5mby0+aGRjcDJfaW5mby5yZWFkX2NlcnRyeCkNCj4g KwkJCQlkcF90eF9oZGNwMl9yZWFkX21zZyhoZGNwX2luZm8sDQo+IEhEQ1BfMl8yX0FLRV9TRU5E X0NFUlQpOw0KPiArDQo+ICsJCQlpZiAoIWhkY3BfaW5mby0NCj4gPmhkY3AyX2luZm8uaGRjcF9o YW5kbGVyLnJlY3ZfbXNnKQ0KPiArCQkJCWJyZWFrOw0KPiArDQo+ICsJCQlyZXQgPSB0ZWVfYWtl X2NlcnRpZmljYXRlKGhkY3BfaW5mbywNCj4gKwkJCQkJCSAgKHU4ICopJmhkY3BfaW5mby0NCj4g PmhkY3AyX2luZm8uaGRjcF9yeC5jZXJ0X3J4LA0KPiArCQkJCQkJICAmc3RvcmVkLA0KPiArCQkJ CWhkY3BfaW5mby0NCj4gPmhkY3AyX2luZm8uYWtlX3N0b3JlZF9rbS5lX2toX2ttX20gKw0KPiAr CQkJCUhEQ1BfMl8yX0VfS0hfS01fTEVOLA0KPiArCQkJCWhkY3BfaW5mby0NCj4gPmhkY3AyX2lu Zm8uYWtlX3N0b3JlZF9rbS5lX2toX2ttX20pOw0KPiArDQo+ICsJCQlpZiAocmV0ICE9IFJFVF9D T01QQVJFX1BBU1MpIHsNCj4gKwkJCQllcnJfY29kZSA9IEhEQ1BfRVJSX1BST0NFU1NfRkFJTDsN Cj4gKwkJCQlkcF90eF9oZGNwMl9lcnJfaGFuZGxlKGhkY3BfaW5mbywNCj4gZXJyX2NvZGUsIF9f TElORV9fKTsNCj4gKwkJCQlicmVhazsNCj4gKwkJCX0NCj4gKw0KPiArCQkJaGRjcF9pbmZvLT5o ZGNwMl9pbmZvLmhkY3BfaGFuZGxlci5zdG9yZWRfa20gPQ0KPiBzdG9yZWQ7DQo+ICsJCQloZGNw X2luZm8tPmhkY3AyX2luZm8uaGRjcF9oYW5kbGVyLnJlY3ZfbXNnID0NCj4gZmFsc2U7DQo+ICsJ CQlkcF90eF9oZGNwMl9zZXRfc3RhdGUoaGRjcF9pbmZvLCBIRENQMl9NU19BMUYxLA0KPiArCQkJ CQkgICAgICBoZGNwX2luZm8tDQo+ID5oZGNwMl9pbmZvLmhkY3BfaGFuZGxlci5zdG9yZWRfa20g Pw0KPiArCQkJCQlIRENQXzJfMl9BS0VfU1RPUkVEX0tNIDoNCj4gKwkJCQkJSERDUF8yXzJfQUtF X05PX1NUT1JFRF9LTSk7DQo+ICsJCX0NCj4gKw0KPiArCQkvKiBIRENQMl9NU19BMUYxICovDQo+ ICsJCS8qIEhEQ1BfMl8yX0FLRV9OT19TVE9SRURfS00gKi8NCj4gKwkJaWYgKGhkY3BfaW5mby0+ aGRjcDJfaW5mby5oZGNwX2hhbmRsZXIuc3ViX3N0YXRlID09DQo+IEhEQ1BfMl8yX0FLRV9OT19T VE9SRURfS00pIHsNCj4gKwkJCURQVFhIRENQTVNHKCIyLng6IEdldCBLbSwgZGVyaXZlIEVrcHVi KGttKVxuIik7DQo+ICsNCj4gKwkJCXRlZV9lbmNfcnNhZXNfb2FlcChoZGNwX2luZm8sDQo+ICsJ CQkJCSAgIGhkY3BfaW5mby0NCj4gPmhkY3AyX2luZm8uaGRjcF90eC5ub19zdG9yZWRfa20uZV9r cHViX2ttKTsNCj4gKwkJCS8qIFByZXBhcmUgZV9rcHViX2ttIHRvIHNlbmQgKi8NCj4gKwkJCXRt cCA9IGRwX3R4X2hkY3AyX3dyaXRlX21zZyhoZGNwX2luZm8sDQo+IEhEQ1BfMl8yX0FLRV9OT19T VE9SRURfS00pOw0KPiArCQkJaWYgKCF0bXApIHsNCj4gKwkJCQllcnJfY29kZSA9IEhEQ1BfRVJS X1NFTkRfTVNHX0ZBSUw7DQo+ICsJCQkJZHBfdHhfaGRjcDJfZXJyX2hhbmRsZShoZGNwX2luZm8s DQo+IGVycl9jb2RlLCBfX0xJTkVfXyk7DQo+ICsJCQkJYnJlYWs7DQo+ICsJCQl9DQo+ICsNCj4g KwkJCWRwX3R4X2hkY3AyX3NldF9zdGF0ZShoZGNwX2luZm8sIEhEQ1AyX01TX0ExRjEsDQo+IEhE Q1BfMl8yX0FLRV9TRU5EX0hQUklNRSk7DQo+ICsJCQl0aW1lb3V0X3ZhbHVlID0NCj4gSERDUF8y XzJfSFBSSU1FX05PX1BBSVJFRF9USU1FT1VUX01TOw0KPiArCQkJaGRjcF9pbmZvLT5oZGNwMl9p bmZvLmhkY3BfaGFuZGxlci5yZWN2X21zZyA9DQo+IGZhbHNlOw0KPiArCQkJcHJlX3RpbWUgPSBt dGtfZHBfZ2V0X3N5c3RlbV90aW1lKCk7DQo+ICsJCX0NCj4gKw0KPiArCQkvKiBIRENQMl9NU19B MUYxICovDQo+ICsJCS8qIEhEQ1BfMl8yX0FLRV9TVE9SRURfS00gKi8NCj4gKwkJaWYgKGhkY3Bf aW5mby0+aGRjcDJfaW5mby5oZGNwX2hhbmRsZXIuc3ViX3N0YXRlID09DQo+IEhEQ1BfMl8yX0FL RV9TVE9SRURfS00pIHsNCj4gKwkJCS8qIFByZXBhcmUgZWtoX2ttICYgTSB0byBzZW5kICovDQo+ ICsJCQl0bXAgPSBkcF90eF9oZGNwMl93cml0ZV9tc2coaGRjcF9pbmZvLA0KPiBIRENQXzJfMl9B S0VfU1RPUkVEX0tNKTsNCj4gKwkJCWlmICghdG1wKSB7DQo+ICsJCQkJZXJyX2NvZGUgPSBIRENQ X0VSUl9TRU5EX01TR19GQUlMOw0KPiArCQkJCWRwX3R4X2hkY3AyX2Vycl9oYW5kbGUoaGRjcF9p bmZvLA0KPiBlcnJfY29kZSwgX19MSU5FX18pOw0KPiArCQkJCWJyZWFrOw0KPiArCQkJfQ0KPiAr DQo+ICsJCQllcnJfY29kZSA9IEhEQ1BfRVJSX05PTkU7DQo+ICsJCQlkcF90eF9oZGNwMl9zZXRf c3RhdGUoaGRjcF9pbmZvLCBIRENQMl9NU19BMUYxLA0KPiBIRENQXzJfMl9BS0VfU0VORF9IUFJJ TUUpOw0KPiArCQkJdGltZW91dF92YWx1ZSA9DQo+IEhEQ1BfMl8yX0hQUklNRV9QQUlSRURfVElN RU9VVF9NUzsNCj4gKwkJCWhkY3BfaW5mby0+aGRjcDJfaW5mby5oZGNwX2hhbmRsZXIucmVjdl9t c2cgPQ0KPiBmYWxzZTsNCj4gKwkJCXByZV90aW1lID0gbXRrX2RwX2dldF9zeXN0ZW1fdGltZSgp Ow0KPiArCQl9DQo+ICsNCj4gKwkJLyogSERDUDJfTVNfQTFGMSAqLw0KPiArCQkvKiBIRENQXzJf Ml9BS0VfU0VORF9IUFJJTUUgKi8NCj4gKwkJaWYgKGhkY3BfaW5mby0+aGRjcDJfaW5mby5oZGNw X2hhbmRsZXIuc3ViX3N0YXRlID09DQo+IEhEQ1BfMl8yX0FLRV9TRU5EX0hQUklNRSkgew0KPiAr CQkJaWYgKGhkY3BfaW5mby0+aGRjcDJfaW5mby5yZWFkX2hfcHJpbWUpDQo+ICsJCQkJZHBfdHhf aGRjcDJfcmVhZF9tc2coaGRjcF9pbmZvLA0KPiBIRENQXzJfMl9BS0VfU0VORF9IUFJJTUUpOw0K PiArDQo+ICsJCQl0aW1lID0gbXRrX2RwX2dldF90aW1lX2RpZmYocHJlX3RpbWUpOw0KPiArCQkJ aWYgKHRpbWUgPiB0aW1lb3V0X3ZhbHVlKSB7DQo+ICsJCQkJZXJyX2NvZGUgPSBIRENQX0VSUl9S RVNQT05TRV9USU1FUk9VVDsNCj4gKwkJCQlkcF90eF9oZGNwMl9lcnJfaGFuZGxlKGhkY3BfaW5m bywNCj4gZXJyX2NvZGUsIF9fTElORV9fKTsNCj4gKwkJCQlicmVhazsNCj4gKwkJCX0NCj4gKw0K PiArCQkJaWYgKCFoZGNwX2luZm8tDQo+ID5oZGNwMl9pbmZvLmhkY3BfaGFuZGxlci5yZWN2X21z ZykNCj4gKwkJCQlicmVhazsNCj4gKw0KPiArCQkJcmV0ID0gdGVlX2FrZV9oX3ByaW1lKGhkY3Bf aW5mbywNCj4gKwkJCQkJICAgICAgaGRjcF9pbmZvLQ0KPiA+aGRjcDJfaW5mby5oZGNwX3R4LmFr ZV9pbml0LnJfdHgsDQo+ICsJCQkJCSAgICAgIGhkY3BfaW5mby0NCj4gPmhkY3AyX2luZm8uaGRj cF9yeC5zZW5kX2NlcnQucl9yeCwNCj4gKwkJCQloZGNwX2luZm8tDQo+ID5oZGNwMl9pbmZvLmhk Y3Bfcnguc2VuZF9jZXJ0LnJ4X2NhcHMsDQo+ICsJCQkJKHU4ICopJmhkY3BfaW5mby0NCj4gPmhk Y3AyX2luZm8uaGRjcF90eC50eF9jYXBzLA0KPiArCQkJCWhkY3BfaW5mby0NCj4gPmhkY3AyX2lu Zm8uaGRjcF9yeC5zZW5kX2hwcmltZS5oX3ByaW1lLA0KPiArCQkJCUhEQ1BfMl8yX0hfUFJJTUVf TEVOKTsNCj4gKwkJCWlmIChyZXQgIT0gUkVUX0NPTVBBUkVfUEFTUykgew0KPiArCQkJCWlmICho ZGNwX2luZm8tDQo+ID5oZGNwMl9pbmZvLmhkY3BfaGFuZGxlci5zdG9yZWRfa20pDQo+ICsJCQkJ CXRlZV9jbGVhcl9wYXJpbmcoaGRjcF9pbmZvKTsNCj4gKwkJCQllcnJfY29kZSA9IEhEQ1BfRVJS X1BST0NFU1NfRkFJTDsNCj4gKwkJCQlkcF90eF9oZGNwMl9lcnJfaGFuZGxlKGhkY3BfaW5mbywN Cj4gZXJyX2NvZGUsIF9fTElORV9fKTsNCj4gKwkJCQlicmVhazsNCj4gKwkJCX0NCj4gKw0KPiAr CQkJaWYgKGhkY3BfaW5mby0NCj4gPmhkY3AyX2luZm8uaGRjcF9oYW5kbGVyLnN0b3JlZF9rbSkN Cj4gKwkJCQlkcF90eF9oZGNwMl9zZXRfc3RhdGUoaGRjcF9pbmZvLA0KPiBIRENQMl9NU19BMkYy LCBIRENQXzJfMl9MQ19JTklUKTsNCj4gKwkJCWVsc2UNCj4gKwkJCQlkcF90eF9oZGNwMl9zZXRf c3RhdGUoaGRjcF9pbmZvLA0KPiBIRENQMl9NU19BMUYxLA0KPiArCQkJCQkJICAgICAgSERDUF8y XzJfQUtFX1NFTkQNCj4gX1BBSVJJTkdfSU5GTyk7DQo+ICsNCj4gKwkJCXByZV90aW1lID0gbXRr X2RwX2dldF9zeXN0ZW1fdGltZSgpOw0KPiArCQkJaGRjcF9pbmZvLT5oZGNwMl9pbmZvLmhkY3Bf aGFuZGxlci5yZWN2X21zZyA9DQo+IGZhbHNlOw0KPiArCQl9DQo+ICsNCj4gKwkJLyogSERDUDJf TVNfQTFGMSAqLw0KPiArCQkvKiBIRENQXzJfMl9BS0VfU0VORF9QQUlSSU5HX0lORk8gKi8NCj4g KwkJaWYgKGhkY3BfaW5mby0+aGRjcDJfaW5mby5oZGNwX2hhbmRsZXIuc3ViX3N0YXRlID09DQo+ ICsJCQlIRENQXzJfMl9BS0VfU0VORF9QQUlSSU5HX0lORk8pIHsNCj4gKwkJCWlmIChoZGNwX2lu Zm8tPmhkY3AyX2luZm8ucmVhZF9wYWlyaW5nKQ0KPiArCQkJCWRwX3R4X2hkY3AyX3JlYWRfbXNn KGhkY3BfaW5mbywNCj4gSERDUF8yXzJfQUtFX1NFTkRfUEFJUklOR19JTkZPKTsNCj4gKw0KPiAr CQkJLyogRWtoX0ttIG11c3QgYmUgYXZhaWxhYmxlIGxlc3MgdGhhbiAyMDBtcywNCj4gR2l2ZSBt b2RlIHRpbWUgZm9yIHNvbWUgUnggKi8NCj4gKwkJCXRpbWUgPSBtdGtfZHBfZ2V0X3RpbWVfZGlm ZihwcmVfdGltZSk7DQo+ICsJCQlpZiAodGltZSA+CUhEQ1BfMl8yX1BBSVJJTkdfVElNRU9VVF9N UyAqDQo+IDIpIHsNCj4gKwkJCQllcnJfY29kZSA9IEhEQ1BfRVJSX1JFU1BPTlNFX1RJTUVST1VU Ow0KPiArCQkJCWRwX3R4X2hkY3AyX2Vycl9oYW5kbGUoaGRjcF9pbmZvLA0KPiBlcnJfY29kZSwg X19MSU5FX18pOw0KPiArCQkJCWJyZWFrOw0KPiArCQkJfQ0KPiArDQo+ICsJCQlpZiAoIWhkY3Bf aW5mby0NCj4gPmhkY3AyX2luZm8uaGRjcF9oYW5kbGVyLnJlY3ZfbXNnKQ0KPiArCQkJCWJyZWFr Ow0KPiArDQo+ICsJCQkvKiBTdG9yZSBtLCBrbSwgRWtoKGttKSAqLw0KPiArCQkJdGVlX2FrZV9w YXJpbmcoaGRjcF9pbmZvLA0KPiArCQkJCSAgICAgICBoZGNwX2luZm8tDQo+ID5oZGNwMl9pbmZv LmhkY3BfcngucGFpcmluZ19pbmZvLmVfa2hfa20pOw0KPiArDQo+ICsJCQloZGNwX2luZm8tPmhk Y3AyX2luZm8uaGRjcF9oYW5kbGVyLnNlbmRfcGFpciA9DQo+IHRydWU7DQo+ICsJCQloZGNwX2lu Zm8tPmhkY3AyX2luZm8uaGRjcF9oYW5kbGVyLnJlY3ZfbXNnID0NCj4gZmFsc2U7DQo+ICsJCQlk cF90eF9oZGNwMl9zZXRfc3RhdGUoaGRjcF9pbmZvLCBIRENQMl9NU19BMkYyLA0KPiBIRENQXzJf Ml9MQ19JTklUKTsNCj4gKwkJCXByZV90aW1lID0gbXRrX2RwX2dldF9zeXN0ZW1fdGltZSgpOw0K PiArCQl9DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJY2FzZSBIRENQMl9NU19BMkYyOg0KPiArCQkv KiBIRENQMl9NU19BMkYyICovDQo+ICsJCS8qIEhEQ1BfMl8yX0xDX0lOSVQgKi8NCj4gKwkJaWYg KGhkY3BfaW5mby0+aGRjcDJfaW5mby5oZGNwX2hhbmRsZXIuc3ViX3N0YXRlID09DQo+IEhEQ1Bf Ml8yX0xDX0lOSVQpIHsNCj4gKwkJCS8qIHByZXBhcmUgUm4gdG8gc2VuZCAqLw0KPiArCQkJdG1w ID0gZHBfdHhfaGRjcDJfd3JpdGVfbXNnKGhkY3BfaW5mbywNCj4gSERDUF8yXzJfTENfSU5JVCk7 DQo+ICsJCQlpZiAoIXRtcCkgew0KPiArCQkJCWVycl9jb2RlID0gSERDUF9FUlJfU0VORF9NU0df RkFJTDsNCj4gKwkJCQlkcF90eF9oZGNwMl9lcnJfaGFuZGxlKGhkY3BfaW5mbywNCj4gZXJyX2Nv ZGUsIF9fTElORV9fKTsNCj4gKwkJCQlicmVhazsNCj4gKwkJCX0NCj4gKwkJCWhkY3BfaW5mby0+ aGRjcDJfaW5mby5oZGNwX2hhbmRsZXIuc2VuZF9sY19pbml0IA0KPiA9IHRydWU7DQo+ICsNCj4g KwkJCWRwX3R4X2hkY3AyX3NldF9zdGF0ZShoZGNwX2luZm8sIEhEQ1AyX01TX0EyRjIsDQo+IEhE Q1BfMl8yX0xDX1NFTkRfTFBSSU1FKTsNCj4gKwkJCXByZV90aW1lID0gbXRrX2RwX2dldF9zeXN0 ZW1fdGltZSgpOw0KPiArCQl9DQo+ICsNCj4gKwkJLyogSERDUDJfTVNfQTJGMiAqLw0KPiArCQkv KiBIRENQXzJfMl9MQ19TRU5EX0xQUklNRSAqLw0KPiArCQlpZiAoaGRjcF9pbmZvLT5oZGNwMl9p bmZvLmhkY3BfaGFuZGxlci5zdWJfc3RhdGUgPT0NCj4gSERDUF8yXzJfTENfU0VORF9MUFJJTUUp IHsNCj4gKwkJCXRpbWUgPSBtdGtfZHBfZ2V0X3RpbWVfZGlmZihwcmVfdGltZSk7DQo+ICsJCQlp ZiAodGltZSA8IEhEQ1BfMl8yX0RQX0hQUklNRV9SRUFEX1RJTUVPVVRfTVMpDQo+ICsJCQkJYnJl YWs7DQo+ICsNCj4gKwkJCWlmIChoZGNwX2luZm8tPmhkY3AyX2luZm8ucmVhZF9sX3ByaW1lKQ0K PiArCQkJCWRwX3R4X2hkY3AyX3JlYWRfbXNnKGhkY3BfaW5mbywNCj4gSERDUF8yXzJfTENfU0VO RF9MUFJJTUUpOw0KPiArDQo+ICsJCQlpZiAoIWhkY3BfaW5mby0NCj4gPmhkY3AyX2luZm8uaGRj cF9oYW5kbGVyLnJlY3ZfbXNnKQ0KPiArCQkJCWJyZWFrOw0KPiArDQo+ICsJCQlyZXQgPSB0ZWVf bGNfbF9wcmltZShoZGNwX2luZm8sIGhkY3BfaW5mby0NCj4gPmhkY3AyX2luZm8uaGRjcF90eC5s Y19pbml0LnJfbiwNCj4gKwkJCQkJICAgICBoZGNwX2luZm8tDQo+ID5oZGNwMl9pbmZvLmhkY3Bf cnguc2VuZF9scHJpbWUubF9wcmltZSwNCj4gKwkJCQkJICAgICBIRENQXzJfMl9MX1BSSU1FX0xF Tik7DQo+ICsJCQlpZiAocmV0ICE9IFJFVF9DT01QQVJFX1BBU1MpIHsNCj4gKwkJCQllcnJfY29k ZSA9IEhEQ1BfRVJSX1BST0NFU1NfRkFJTDsNCj4gKwkJCQlkcF90eF9oZGNwMl9lcnJfaGFuZGxl KGhkY3BfaW5mbywNCj4gZXJyX2NvZGUsIF9fTElORV9fKTsNCj4gKwkJCQlicmVhazsNCj4gKwkJ CX0NCj4gKw0KPiArCQkJRFBUWEhEQ1BNU0coIjIueDogTCcgaXMgUEFTUyEhXG4iKTsNCj4gKwkJ CWhkY3BfaW5mby0+aGRjcDJfaW5mby5oZGNwX2hhbmRsZXIucmVjdl9tc2cgPQ0KPiBmYWxzZTsN Cj4gKwkJCWRwX3R4X2hkY3AyX3NldF9zdGF0ZShoZGNwX2luZm8sIEhEQ1AyX01TX0EzRjMsDQo+ IEhEQ1BfMl8yX05VTExfTVNHKTsNCj4gKwkJCXByZV90aW1lID0gbXRrX2RwX2dldF9zeXN0ZW1f dGltZSgpOw0KPiArCQl9DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJY2FzZSBIRENQMl9NU19BM0Yz Og0KPiArCQkvKiBIRENQMl9NU19BM0YzICovDQo+ICsJCS8qIEhEQ1BfMl8yX05VTExfTVNHICov DQo+ICsJCWlmIChoZGNwX2luZm8tPmhkY3AyX2luZm8uaGRjcF9oYW5kbGVyLnN1Yl9zdGF0ZSA9 PQ0KPiBIRENQXzJfMl9OVUxMX01TRykgew0KPiArCQkJdGVlX3NrZV9lbmNfa3MoaGRjcF9pbmZv LCBoZGNwX2luZm8tDQo+ID5oZGNwMl9pbmZvLmhkY3BfdHguc2VuZF9la3Mucml2LA0KPiArCQkJ CSAgICAgICBoZGNwX2luZm8tDQo+ID5oZGNwMl9pbmZvLmhkY3BfdHguc2VuZF9la3MuZV9ka2V5 X2tzKTsNCj4gKw0KPiArCQkJdG1wID0gZHBfdHhfaGRjcDJfd3JpdGVfbXNnKGhkY3BfaW5mbywN Cj4gSERDUF8yXzJfU0tFX1NFTkRfRUtTKTsNCj4gKwkJCWlmICghdG1wKSB7DQo+ICsJCQkJZXJy X2NvZGUgPSBIRENQX0VSUl9TRU5EX01TR19GQUlMOw0KPiArCQkJCWRwX3R4X2hkY3AyX2Vycl9o YW5kbGUoaGRjcF9pbmZvLA0KPiBlcnJfY29kZSwgX19MSU5FX18pOw0KPiArCQkJCWJyZWFrOw0K PiArCQkJfQ0KPiArDQo+ICsJCQlpZiAoIWhkY3BfaW5mby0+aGRjcDJfaW5mby5yZXBlYXRlcikN Cj4gKwkJCQlkcF90eF9oZGNwMl93cml0ZV9tc2coaGRjcF9pbmZvLA0KPiBIRENQXzJfMl9TVFJF QU1fVFlQRSk7DQo+ICsNCj4gKwkJCWRwX3R4X2hkY3AyX3NldF9zdGF0ZShoZGNwX2luZm8sIEhE Q1AyX01TX0EzRjMsDQo+IEhEQ1BfMl8yX1NLRV9TRU5EX0VLUyk7DQo+ICsJCQlwcmVfdGltZSA9 IG10a19kcF9nZXRfc3lzdGVtX3RpbWUoKTsNCj4gKwkJfQ0KPiArDQo+ICsJCS8qIEhEQ1AyX01T X0EzRjMgKi8NCj4gKwkJLyogSERDUF8yXzJfU0tFX1NFTkRfRUtTICovDQo+ICsJCWlmIChoZGNw X2luZm8tPmhkY3AyX2luZm8uaGRjcF9oYW5kbGVyLnN1Yl9zdGF0ZSA9PQ0KPiBIRENQXzJfMl9T S0VfU0VORF9FS1MpIHsNCj4gKwkJCXRpbWUgPSBtdGtfZHBfZ2V0X3RpbWVfZGlmZihwcmVfdGlt ZSk7DQo+ICsJCQlpZiAodGltZSA+PQ0KPiBIRENQXzJfMl9ERUxBWV9CRUZPUkVfRU5DUllQVElP Tl9FTikNCj4gKwkJCQlkcF90eF9oZGNwMl9zZXRfc3RhdGUoaGRjcF9pbmZvLA0KPiBIRENQMl9N U19BNEY0LCBIRENQXzJfMl9OVUxMX01TRyk7DQo+ICsJCX0NCj4gKwkJYnJlYWs7DQo+ICsNCj4g KwljYXNlIEhEQ1AyX01TX0E0RjQ6DQo+ICsJCS8qIEhEQ1AyX01TX0E0RjQgKi8NCj4gKwkJLyog SERDUF8yXzJfTlVMTF9NU0cgKi8NCj4gKwkJaWYgKGhkY3BfaW5mby0+aGRjcDJfaW5mby5oZGNw X2hhbmRsZXIuc3ViX3N0YXRlID09DQo+IEhEQ1BfMl8yX05VTExfTVNHKSB7DQo+ICsJCQlpZiAo IWhkY3BfaW5mby0+aGRjcDJfaW5mby5yZXBlYXRlcikgew0KPiArCQkJCWRwX3R4X2hkY3AyX3Nl dF9zdGF0ZShoZGNwX2luZm8sDQo+IEhEQ1AyX01TX0E1RjUsIEhEQ1BfMl8yX0FVVEhfRE9ORSk7 DQo+ICsJCQkJYnJlYWs7DQo+ICsJCQl9DQo+ICsJCQlkcF90eF9oZGNwMl9zZXRfc3RhdGUoaGRj cF9pbmZvLCBIRENQMl9NU19BNkY2LA0KPiArCQkJCQkgICAgICBIRENQXzJfMl9SRVBfU0VORF9S RUNWSURfDQo+IExJU1QpOw0KPiArCQkJaGRjcF9pbmZvLT5oZGNwMl9pbmZvLmhkY3BfaGFuZGxl ci5yZWN2X21zZyA9DQo+IGZhbHNlOw0KPiArCQkJcHJlX3RpbWUgPSBtdGtfZHBfZ2V0X3N5c3Rl bV90aW1lKCk7DQo+ICsJCX0NCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwljYXNlIEhEQ1AyX01TX0E1 RjU6DQo+ICsJCS8qIEhEQ1AyX01TX0E1RjUgKi8NCj4gKwkJLyogSERDUF8yXzJfQVVUSF9ET05F ICovDQo+ICsJCWlmIChoZGNwX2luZm8tPmhkY3AyX2luZm8uaGRjcF9oYW5kbGVyLnN1Yl9zdGF0 ZSA9PQ0KPiBIRENQXzJfMl9BVVRIX0RPTkUpIHsNCj4gKwkJCURQVFhIRENQTVNHKCIyLng6IEF1 dGhlbnRpY2F0aW9uIGRvbmUhXG4iKTsNCj4gKwkJCWhkY3BfaW5mby0+YXV0aF9zdGF0dXMgPSBB VVRIX1BBU1M7DQo+ICsJCQloZGNwX2luZm8tPmhkY3AyX2luZm8ucmV0cnlfY291bnQgPSAwOw0K PiArCQkJZHBfdHhfaGRjcDJfc2V0X3N0YXRlKGhkY3BfaW5mbywgSERDUDJfTVNfQTVGNSwNCj4g SERDUF8yXzJfTlVMTF9NU0cpOw0KPiArCQkJZHBfdHhfaGRjcDJfZW5hYmxlX2F1dGgoaGRjcF9p bmZvLCB0cnVlKTsNCj4gKwkJfQ0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgSERDUDJfTVNf QTZGNjoNCj4gKwkJLyogSERDUDJfTVNfQTZGNiAqLw0KPiArCQkvKiBIRENQXzJfMl9SRVBfU0VO RF9SRUNWSURfTElTVCAqLw0KPiArCQlpZiAoaGRjcF9pbmZvLT5oZGNwMl9pbmZvLmhkY3BfaGFu ZGxlci5zdWJfc3RhdGUgPT0NCj4gKwkJCUhEQ1BfMl8yX1JFUF9TRU5EX1JFQ1ZJRF9MSVNUKSB7 DQo+ICsJCQlpZiAoaGRjcF9pbmZvLT5oZGNwMl9pbmZvLnJlYWRfdl9wcmltZSkNCj4gKwkJCQlk cF90eF9oZGNwMl9yZWFkX21zZyhoZGNwX2luZm8sDQo+IEhEQ1BfMl8yX1JFUF9TRU5EX1JFQ1ZJ RF9MSVNUKTsNCj4gKw0KPiArCQkJdGltZSA9IG10a19kcF9nZXRfdGltZV9kaWZmKHByZV90aW1l KTsNCj4gKwkJCWlmICh0aW1lID4gSERDUF8yXzJfUkVDVklEX0xJU1RfVElNRU9VVF9NUykgew0K PiArCQkJCWVycl9jb2RlID0gSERDUF9FUlJfUkVTUE9OU0VfVElNRVJPVVQ7DQo+ICsJCQkJZHBf dHhfaGRjcDJfZXJyX2hhbmRsZShoZGNwX2luZm8sDQo+IGVycl9jb2RlLCBfX0xJTkVfXyk7DQo+ ICsJCQkJYnJlYWs7DQo+ICsJCQl9DQo+ICsNCj4gKwkJCWlmICghaGRjcF9pbmZvLQ0KPiA+aGRj cDJfaW5mby5oZGNwX2hhbmRsZXIucmVjdl9tc2cpDQo+ICsJCQkJYnJlYWs7DQo+ICsNCj4gKwkJ CXByZV90aW1lID0gbXRrX2RwX2dldF9zeXN0ZW1fdGltZSgpOw0KPiArCQkJaGRjcF9pbmZvLT5o ZGNwMl9pbmZvLmhkY3BfaGFuZGxlci5yZWN2X21zZyA9DQo+IGZhbHNlOw0KPiArCQkJZHBfdHhf aGRjcDJfc2V0X3N0YXRlKGhkY3BfaW5mbywgSERDUDJfTVNfQTdGNywNCj4gKwkJCQkJICAgICAg SERDUF8yXzJfUkVQX1ZFUklGWV9SRUNWSQ0KPiBEX0xJU1QpOw0KPiArCQl9DQo+ICsJCWJyZWFr Ow0KPiArDQo+ICsJY2FzZSBIRENQMl9NU19BN0Y3Og0KPiArCQkvKiBIRENQMl9NU19BN0Y3ICov DQo+ICsJCS8qIEhEQ1BfMl8yX1JFUF9WRVJJRllfUkVDVklEX0xJU1QgKi8NCj4gKwkJaWYgKGhk Y3BfaW5mby0+aGRjcDJfaW5mby5oZGNwX2hhbmRsZXIuc3ViX3N0YXRlID09DQo+ICsJCQlIRENQ XzJfMl9SRVBfVkVSSUZZX1JFQ1ZJRF9MSVNUKSB7DQo+ICsJCQlpZiAoKGhkY3BfaW5mby0NCj4g PmhkY3AyX2luZm8uaGRjcF9yeC5yZWNlaXZlcmlkX2xpc3QucnhfaW5mb1sxXQ0KPiArCQkJCSYg KEJJVCgyKSB8IEJJVCgzKSkpICE9IDApIHsNCj4gKwkJCQlwcl9lcnIoIjIueDogREVWU19FWENF RURFRCBvcg0KPiBDQVNDQURFX0VYQ0VEREVEIVxuIik7DQo+ICsJCQkJZXJyX2NvZGUgPSBIRENQ X0VSUl9QUk9DRVNTX0ZBSUw7DQo+ICsJCQkJZHBfdHhfaGRjcDJfZXJyX2hhbmRsZShoZGNwX2lu Zm8sDQo+IGVycl9jb2RlLCBfX0xJTkVfXyk7DQo+ICsJCQkJYnJlYWs7DQo+ICsJCQl9DQo+ICsN Cj4gKwkJCS8qIGNoZWNrIHNlcU51bVYgaGVyZSAqLw0KPiArCQkJdG1wID0gZHBfdHhfaGRjcDJf Y2hlY2tfc2VxX251bV92KGhkY3BfaW5mbyk7DQo+ICsJCQlpZiAoIXRtcCkgew0KPiArCQkJCWVy cl9jb2RlID0gSERDUF9FUlJfUFJPQ0VTU19GQUlMOw0KPiArCQkJCWRwX3R4X2hkY3AyX2Vycl9o YW5kbGUoaGRjcF9pbmZvLA0KPiBlcnJfY29kZSwgX19MSU5FX18pOw0KPiArCQkJCWJyZWFrOw0K PiArCQkJfQ0KPiArDQo+ICsJCQl0bXAgPQ0KPiBkcF90eF9oZGNwMl9yZWN2X3JlcF9hdXRoX3Nl bmRfcmVjdl9pZF9saXN0KGhkY3BfaW5mbyk7DQo+ICsJCQlpZiAoIXRtcCkgew0KPiArCQkJCWVy cl9jb2RlID0gSERDUF9FUlJfUFJPQ0VTU19GQUlMOw0KPiArCQkJCWRwX3R4X2hkY3AyX2Vycl9o YW5kbGUoaGRjcF9pbmZvLA0KPiBlcnJfY29kZSwgX19MSU5FX18pOw0KPiArCQkJCWJyZWFrOw0K PiArCQkJfQ0KPiArDQo+ICsJCQlkcF90eF9oZGNwMl9zZXRfc3RhdGUoaGRjcF9pbmZvLCBIRENQ Ml9NU19BOEY4LA0KPiBIRENQXzJfMl9SRVBfU0VORF9BQ0spOw0KPiArCQl9DQo+ICsJCWJyZWFr Ow0KPiArDQo+ICsJY2FzZSBIRENQMl9NU19BOEY4Og0KPiArCQkvKiBIRENQMl9NU19BOEY4ICov DQo+ICsJCS8qIEhEQ1BfMl8yX1JFUF9TRU5EX0FDSyAqLw0KPiArCQlpZiAoaGRjcF9pbmZvLT5o ZGNwMl9pbmZvLmhkY3BfaGFuZGxlci5zdWJfc3RhdGUgPT0NCj4gSERDUF8yXzJfUkVQX1NFTkRf QUNLKSB7DQo+ICsJCQl0bXAgPSBkcF90eF9oZGNwMl93cml0ZV9tc2coaGRjcF9pbmZvLA0KPiBI RENQXzJfMl9SRVBfU0VORF9BQ0spOw0KPiArCQkJaWYgKCF0bXApIHsNCj4gKwkJCQllcnJfY29k ZSA9IEhEQ1BfRVJSX1NFTkRfTVNHX0ZBSUw7DQo+ICsJCQkJZHBfdHhfaGRjcDJfZXJyX2hhbmRs ZShoZGNwX2luZm8sDQo+IGVycl9jb2RlLCBfX0xJTkVfXyk7DQo+ICsJCQkJYnJlYWs7DQo+ICsJ CQl9DQo+ICsNCj4gKwkJCXRpbWUgPSBtdGtfZHBfZ2V0X3RpbWVfZGlmZihwcmVfdGltZSk7DQo+ ICsJCQlpZiAodGltZSA+IEhEQ1AyX1JFUF9TRU5EX0FDSykgew0KPiArCQkJCWVycl9jb2RlID0g SERDUF9FUlJfUkVTUE9OU0VfVElNRVJPVVQ7DQo+ICsJCQkJZHBfdHhfaGRjcDJfZXJyX2hhbmRs ZShoZGNwX2luZm8sDQo+IGVycl9jb2RlLCBfX0xJTkVfXyk7DQo+ICsJCQkJYnJlYWs7DQo+ICsJ CQl9DQo+ICsNCj4gKwkJCWRwX3R4X2hkY3AyX3NldF9zdGF0ZShoZGNwX2luZm8sIEhEQ1AyX01T X0E5RjksDQo+IEhEQ1BfMl8yX1JFUF9TVFJFQU1fTUFOQUdFKTsNCj4gKwkJCWhkY3BfaW5mby0+ aGRjcDJfaW5mby5oZGNwX2hhbmRsZXIucmV0cnlfY250ID0NCj4gMDsNCj4gKwkJfQ0KPiArCQli cmVhazsNCj4gKw0KPiArCWNhc2UgSERDUDJfTVNfQTlGOToNCj4gKwkJLyogSERDUDJfTVNfQTlG OSAqLw0KPiArCQkvKiBIRENQXzJfMl9SRVBfU1RSRUFNX01BTkFHRSAqLw0KPiArCQlpZiAoaGRj cF9pbmZvLT5oZGNwMl9pbmZvLmhkY3BfaGFuZGxlci5zdWJfc3RhdGUgPT0NCj4gSERDUF8yXzJf UkVQX1NUUkVBTV9NQU5BR0UpIHsNCj4gKwkJCXRtcCA9DQo+IGRwX3R4X2hkY3AyX3Byb2Nlc3Nf cmVwX2F1dGhfc3RyZWFtX21hbmFnZShoZGNwX2luZm8pOw0KPiArCQkJaWYgKCF0bXApIHsNCj4g KwkJCQllcnJfY29kZSA9IEhEQ1BfRVJSX1BST0NFU1NfRkFJTDsNCj4gKwkJCQlkcF90eF9oZGNw Ml9lcnJfaGFuZGxlKGhkY3BfaW5mbywNCj4gZXJyX2NvZGUsIF9fTElORV9fKTsNCj4gKwkJCQli cmVhazsNCj4gKwkJCX0NCj4gKw0KPiArCQkJdG1wID0gZHBfdHhfaGRjcDJfd3JpdGVfbXNnKGhk Y3BfaW5mbywNCj4gSERDUF8yXzJfUkVQX1NUUkVBTV9NQU5BR0UpOw0KPiArCQkJaWYgKCF0bXAp IHsNCj4gKwkJCQllcnJfY29kZSA9IEhEQ1BfRVJSX1NFTkRfTVNHX0ZBSUw7DQo+ICsJCQkJZHBf dHhfaGRjcDJfZXJyX2hhbmRsZShoZGNwX2luZm8sDQo+IGVycl9jb2RlLCBfX0xJTkVfXyk7DQo+ ICsJCQkJYnJlYWs7DQo+ICsJCQl9DQo+ICsNCj4gKwkJCXByZV90aW1lID0gbXRrX2RwX2dldF9z eXN0ZW1fdGltZSgpOw0KPiArCQkJaGRjcF9pbmZvLT5oZGNwMl9pbmZvLmhkY3BfaGFuZGxlci5y ZWN2X21zZyA9DQo+IGZhbHNlOw0KPiArCQkJZHBfdHhfaGRjcDJfc2V0X3N0YXRlKGhkY3BfaW5m bywgSERDUDJfTVNfQTlGOSwNCj4gKwkJCQkJICAgICAgSERDUF8yXzJfUkVQX1NUUkVBTV9SRUFE WQ0KPiApOw0KPiArCQl9DQo+ICsNCj4gKwkJLyogSERDUDJfTVNfQTlGOSAqLw0KPiArCQkvKiBI RENQXzJfMl9SRVBfU1RSRUFNX1JFQURZICovDQo+ICsJCWlmIChoZGNwX2luZm8tPmhkY3AyX2lu Zm8uaGRjcF9oYW5kbGVyLnN1Yl9zdGF0ZSA9PQ0KPiBIRENQXzJfMl9SRVBfU1RSRUFNX1JFQURZ KSB7DQo+ICsJCQl0aW1lID0gbXRrX2RwX2dldF90aW1lX2RpZmYocHJlX3RpbWUpOw0KPiArCQkJ aWYgKHRpbWUgPD0gSERDUF8yXzJfU1RSRUFNX1JFQURZX1RJTUVPVVRfTVMgLw0KPiAyKQ0KPiAr CQkJCWJyZWFrOw0KPiArDQo+ICsJCQlkcF90eF9oZGNwMl9yZWFkX21zZyhoZGNwX2luZm8sDQo+ IEhEQ1BfMl8yX1JFUF9TVFJFQU1fUkVBRFkpOw0KPiArDQo+ICsJCQl0aW1lID0gbXRrX2RwX2dl dF90aW1lX2RpZmYocHJlX3RpbWUpOw0KPiArCQkJaWYgKHRpbWUgPiBIRENQXzJfMl9TVFJFQU1f UkVBRFlfVElNRU9VVF9NUykgew0KPiArCQkJCWVycl9jb2RlID0gSERDUF9FUlJfUkVTUE9OU0Vf VElNRVJPVVQ7DQo+ICsJCQkJZHBfdHhfaGRjcDJfZXJyX2hhbmRsZShoZGNwX2luZm8sDQo+IGVy cl9jb2RlLCBfX0xJTkVfXyk7DQo+ICsJCQkJYnJlYWs7DQo+ICsJCQl9DQo+ICsNCj4gKwkJCWlm ICghaGRjcF9pbmZvLQ0KPiA+aGRjcDJfaW5mby5oZGNwX2hhbmRsZXIucmVjdl9tc2cpIHsNCj4g KwkJCQlpZiAoaGRjcF9pbmZvLQ0KPiA+aGRjcDJfaW5mby5oZGNwX2hhbmRsZXIucmV0cnlfY250 DQo+ICsJCQkJCT49DQo+IEhEQ1AyX1NUUkVBTV9NQU5BR0VfUkVUUllfQ05UKSB7DQo+ICsJCQkJ CWVycl9jb2RlID0NCj4gSERDUF9FUlJfUkVTUE9OU0VfVElNRVJPVVQ7DQo+ICsJCQkJCWRwX3R4 X2hkY3AyX2Vycl9oYW5kbGUoaGRjcF9pbmYNCj4gbywgZXJyX2NvZGUsIF9fTElORV9fKTsNCj4g KwkJCQkJYnJlYWs7DQo+ICsJCQkJfQ0KPiArDQo+ICsJCQkJaGRjcF9pbmZvLQ0KPiA+aGRjcDJf aW5mby5oZGNwX2hhbmRsZXIucmV0cnlfY250Kys7DQo+ICsNCj4gKwkJCQlkcF90eF9oZGNwMl9z ZXRfc3RhdGUoaGRjcF9pbmZvLA0KPiBIRENQMl9NU19BOUY5LA0KPiArCQkJCQkJICAgICAgSERD UF8yXzJfUkVQX1NUUkUNCj4gQU1fUkVBRFkpOw0KPiArCQkJCWJyZWFrOw0KPiArCQkJfQ0KPiAr DQo+ICsJCQl0bXAgPQ0KPiBkcF90eF9oZGNwMl9yZWN2X3JlcF9hdXRoX3N0cmVhbV9yZWFkeSho ZGNwX2luZm8pOw0KPiArCQkJaWYgKCF0bXApIHsNCj4gKwkJCQllcnJfY29kZSA9IEhEQ1BfRVJS X1BST0NFU1NfRkFJTDsNCj4gKwkJCQlkcF90eF9oZGNwMl9lcnJfaGFuZGxlKGhkY3BfaW5mbywN Cj4gZXJyX2NvZGUsIF9fTElORV9fKTsNCj4gKwkJCQlicmVhazsNCj4gKwkJCX0NCj4gKw0KPiAr CQkJZHBfdHhfaGRjcDJfc2V0X3N0YXRlKGhkY3BfaW5mbywgSERDUDJfTVNfQTVGNSwNCj4gSERD UF8yXzJfQVVUSF9ET05FKTsNCj4gKwkJfQ0KPiArCQlicmVhazsNCj4gKw0KPiArCWRlZmF1bHQ6 DQo+ICsJCWVycl9jb2RlID0gSERDUF9FUlJfVU5LTk9XTl9TVEFURTsNCj4gKwkJZHBfdHhfaGRj cDJfZXJyX2hhbmRsZShoZGNwX2luZm8sIGVycl9jb2RlLCBfX0xJTkVfXyk7DQo+ICsJCWJyZWFr Ow0KPiArCX0NCj4gKw0KPiArCXJldHVybiBlcnJfY29kZTsNCj4gK30NCj4gKw0K