From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.remote-ip=18.208.22.143 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=fail; t=1792618611; b=bT/QmzNXDIjQTArckOfgY0EWZD9AIxu6tpsScp58rP1kKMnLjCTVC/T9mXa4fD/rNnon po9sz2ERdWJk3rHJN3AuWtU3NiIrQbojVmDlkevLKr9W8bbmNjhl5EX+hQfE/FSHrgPew 9TrDf3aGF3fJCAElJ0LbEppEfmpvN/3P6z8wXrobTDvXB0oc3r8am/BHFJoImlFkJ7eCw uMDLQLrUBPx1K0JTWLpTzYXlV80MB3yS7MDapAfvx+MVfbQKtP+ANyTMS1lzCzhSC/xda APnLDGBiUAeFqO4RRB1LEne1rn81AkEv/KoDADQiBwHkChKSuVveCGGu7z1fV1ep1+g== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792618611; h=DMARC-Filter:Received:X-TM-MAIL-RECEIVED-TIME:X-TM-MAIL-UUID: Received:Received:Received:From:To:CC:Subject:Thread-Topic: Thread-Index:Content-Class:Date:Message-ID:Accept-Language: Content-Language:X-MS-Has-Attach:X-MS-TNEF-Correlator:msip_labels: x-ms-publictraffictype:x-ms-traffictypediagnostic: x-ms-office365-filtering-correlation-id: x-ms-exchange-atpmessageproperties:x-ms-exchange-senderadcheck: x-ms-exchange-antispam-relay:x-microsoft-antispam: x-microsoft-antispam-message-info:x-forefront-antispam-report: x-ms-exchange-antispam-messagedata-chunkcount: x-ms-exchange-antispam-messagedata-0:Content-Type: Content-Transfer-Encoding:MIME-Version: X-Exchange-RoutingPolicyChecked:X-OriginatorOrg: X-MS-Exchange-CrossTenant-AuthAs:X-MS-Exchange-CrossTenant-AuthSource: X-MS-Exchange-CrossTenant-Network-Message-Id: X-MS-Exchange-CrossTenant-originalarrivaltime: X-MS-Exchange-CrossTenant-fromentityheader: X-MS-Exchange-CrossTenant-id:X-MS-Exchange-CrossTenant-mailboxtype: X-MS-Exchange-CrossTenant-userprincipalname: X-MS-Exchange-Transport-CrossTenantHeadersStamped:X-TM-AS-ERS: X-TMASE-Version:X-TMASE-Result:X-TMASE-MatchedRID:X-TMASE-XGENCLOUD: X-TM-Deliver-Signature:X-TM-Addin-Auth:X-TM-Addin-ProductCode: DKIM-Signature; bh=qiDXMmeGgXN3hCKTWV9iezczdW740vagURlrP9mEKrs=; b=IiT9wnKfvaauZkya4wdn6XLci8QGCnU/oMjrpZpIFFO5KbGKQCffuBqIyQm6JZJ7k4Kw EEkSid216q+8ZgODAxLtN7t5vhlvaTx3LnOvOtWAfsVEFxs1+RRD/hbXWMtTAjHmYKO3t 7z+afzxksq8vQurn1AGn1FIfsU7i2PgCHQKC1MUi9eXAqeGywyOGJqJeuewad9VQiDLp1 mIp7E8AJkBcvYJ5aLUgiW5/bI0R6sZCT9p7uA16BcVgZrbwgHNPORFYbXi2fKwDDO7chy sNvIBtqESLkwxtTv2tfsT2EgRyZpGe57fGVwVaI6AT87uxe6YvCk6Gk7i8okKCTa+NA== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass header.from=trendmicro.com; spf=pass smtp.mailfrom=trendmicro.com; dkim=pass header.d=trendmicro.com header.i=@trendmicro.com header.a=rsa-sha256 header.s=TM-DKIM-20260724121021 header.b=qliPL2eq; arc=fail smtp.remote-ip=18.208.22.143 Received: from repost01.tmes.trendmicro.com (repost01.tmes.trendmicro.com [18.208.22.143]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B36BA606A319; Wed, 21 Oct 2026 21:36:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org B36BA606A319 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=trendmicro.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=trendmicro.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=trendmicro.com header.i=@trendmicro.com header.a=rsa-sha256 header.s=TM-DKIM-20260724121021 header.b=qliPL2eq Received: from 52.101.46.35_.trendmicro.com (unknown [192.168.185.236]) by repost01.tmes.trendmicro.com (Postfix) with SMTP id 52B50C0067A9; Wed, 21 Oct 2026 21:36:43 +0000 (UTC) X-TM-MAIL-RECEIVED-TIME: 1792618600.298000 X-TM-MAIL-UUID: c7c8ab8b-fe0f-4334-adea-dc36aef80066 Received: from CO1PR03CU002.outbound.protection.outlook.com (unknown [52.101.46.35]) by repre01.tmes.trendmicro.com (Trend Micro Email Security) with ESMTPS id 48E00C00042B; Wed, 21 Oct 2026 21:36:40 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xQnWrAjECjGsRVbZjkiu62e5juLKya+oPE5AlVRiLDaeRbcfEMnc/Gr2d+aUig7PUYHQWrtPXCbulcToquKTk//VzEG3Gs2JWPwLvLuvvoR5U1tldawMzjPQw5FMlfl32TGu0HazlouEHVO/1SWRseTNltL2VKz6WAHlXl1I58zdkB3sY6ckFMM5Z2DK9Q/3rrvgsOYrfw951/abJwSQkyFGYQhbpzOyXLdub/tALr0qOpzj7XlzYzkPof0YMNAdWOxRsUqcfUjsnBCq0Nztb6L5AJqr4sYuh6o5X63Q2kjq4m+oUttbNZAZAYVC8yJ347pvj/7c2ut+aWEtLxwdFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=V1dijvn/ExYzD31qkM+k3NCUXN51L79ALtzFkUw5+00=; b=cn0c0wCX4YZHwvngWC3/8QTHHDI3/qXa0fpN3c0vJWqRhcGsOsb7uZ2ao6NI0FJQl4DJoB4kXrO2VZHWY3QvLXAWxA386vvJztPdtYHBIhwKJtWWptSsBkIxpOVREShbxP2qqyHhpwYyyoBWv+c6hUtuv/K3pZFc8T4TRzVYp6vXeK5jp6LCGDkwFNJZOfZBTqBU9N60ndXZnZBj3sCaXr9QQr9drpERzDTJBfMjmFNAsf9vd6NnfXBhKbQKq4ysyZlhO4b2blfP+RZyFv8CxV19U52EpaB22VO61CtcaN77gYuilYHOW1OGoXMmFPt0ksgIgedSdVq6qAXuOdzphw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=trendmicro.com; dmarc=pass action=none header.from=trendmicro.com; dkim=pass header.d=trendmicro.com; arc=none Received: from BYAPR01MB3830.prod.exchangelabs.com (2603:10b6:a02:83::21) by PH8PR01MB994561.prod.exchangelabs.com (2603:10b6:510:3a6::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.15; Wed, 21 Oct 2026 21:36:37 +0000 Received: from BYAPR01MB3830.prod.exchangelabs.com ([fe80::29c9:1f31:48fd:8ccf]) by BYAPR01MB3830.prod.exchangelabs.com ([fe80::29c9:1f31:48fd:8ccf%5]) with mapi id 15.21.0522.017; Wed, 21 Oct 2026 21:36:37 +0000 From: "zdi-disclosures@trendmicro.com" To: "security@kernel.org" CC: Namjae Jeon , Sergey Senozhatsky , Tom Talpey , ChenXiaoSong , "open list:KERNEL SMB3 SERVER (KSMBD" , open list Subject: ZDI-CAN-33774: New Vulnerability Report Thread-Topic: ZDI-CAN-33774: New Vulnerability Report Thread-Index: Ad1hpCmUSi20g8ycTXuQ6Ja/ksAm0Q== Content-Class: Date: Wed, 21 Oct 2026 21:36:37 +0000 Message-ID: Accept-Language: en-US, es-ES Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_fb50d67e-2428-41a1-85f0-bee73fd61572_ActionId=bfbc4bfe-dc37-4e28-a0d3-63695a7fac77;MSIP_Label_fb50d67e-2428-41a1-85f0-bee73fd61572_ContentBits=0;MSIP_Label_fb50d67e-2428-41a1-85f0-bee73fd61572_Enabled=true;MSIP_Label_fb50d67e-2428-41a1-85f0-bee73fd61572_Method=Privileged;MSIP_Label_fb50d67e-2428-41a1-85f0-bee73fd61572_Name=Public Information - no protection;MSIP_Label_fb50d67e-2428-41a1-85f0-bee73fd61572_SetDate=2026-10-21T21:35:28Z;MSIP_Label_fb50d67e-2428-41a1-85f0-bee73fd61572_SiteId=3e04753a-ae5b-42d4-a86d-d6f05460f9e4;MSIP_Label_fb50d67e-2428-41a1-85f0-bee73fd61572_Tag=10, 0, 1, 1; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BYAPR01MB3830:EE_|PH8PR01MB994561:EE_ x-ms-office365-filtering-correlation-id: 4bbcd02d-1615-4994-e9b0-08df2fbb62bf x-ms-exchange-atpmessageproperties: SA x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|23010399003|376014|1800799024|366016|6133799003|55112099003|18002099003|261021130227099003|261021121427099003|261021135927099003|3023799007|261021123027099003|11063799006|5023799004|261009223027099003|10067099003|261021133027099003|38070700021|260925022911599003|260925021911599003|260925021311599003|56012099006; x-microsoft-antispam-message-info: wQdQOFwDaHL3gWJlq1F/G0pNIbTapakZd1nd9lPL5FgXqNFwI5EsejhcR50AuntYSm5ghJzelh/wu29O4HyvuTqE1s9oNQTuehE3Te1lJgyjZD7rKW6lT55jNXDazybfDfc8/589nvo6NdLrUPI4cUUMPtDP3YWis9sAgJ3W+VITMnSM5Gjt7dKXezzuocfzA5WG8XEcw+bR4hJI187iMXWF9HgdRDx2ChLUIXJXz9WJFt7ExAs5psjdxbMyseQUeYL2YUp0dKKrdGpIUMOFcnDJL/wkm5H3i1++CnbHX5in68H6Te6BgbyIGzUW3+PbmJ+rhme41VFOMOq278hC0sYlNFOzNj5A+fTrCLsXSsNLrJII1d+8LfBQT10UsrSSJ5RbEUB7Nx9FH66bIisu41UWew0WY4ExeaLyEqoz1SQyxSYVehDBzFDhg0I+GV22fvRmg9GrlSN905ObJyK5BJeDi0VXKIG+cNrRYvHFlEvUVZVGtzQpb77/lyELM6EF+mb08eGfmIubNu5IsYn9YHyiAvHSRO6+GgqWiAVJ7c/XT9I1b6G+7x2g2xqAmqCzEdG71PG8ZYfdfTS/7Yws25j5v/I5E8/8Mbg7W32lHStNffnk2OwrgkNuGJO9ixerG1e2V0JvSsp/byw5wac8q0ZLo3tvuhM43NDL2OxAI6s= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR01MB3830.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(1800799024)(366016)(6133799003)(55112099003)(18002099003)(261021130227099003)(261021121427099003)(261021135927099003)(3023799007)(261021123027099003)(11063799006)(5023799004)(261009223027099003)(10067099003)(261021133027099003)(38070700021)(260925022911599003)(260925021911599003)(260925021311599003)(56012099006);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VDVGY002V1g4ZDRWRHVmWUpMMWVFTzVwb0o3dzZsWm0rSUZCZ2JSVk43SlRp?= =?utf-8?B?NVZ5dTJLY1pVSERVWUd3NUdUS3k1d3l3YWlBL0ZqMkF0UkUwN1AxNFlSNWlu?= =?utf-8?B?VW9FdnRFWUY1cjdiY21oTTAwY1FlMTVNcWIwV0VMV1lZT2U4NURaK2pmcXFV?= =?utf-8?B?N3FiZVB4b0RVdGtHSmJib3U5TDZsK3Jia1M0ZnBYemtjZVNadk9OQXJTSVc5?= =?utf-8?B?cUFHbEZxSkREZnd6Y1czSkFzL3RqRU5WTWdoOHgyRzVzTEgrQVhkRXExTk1q?= =?utf-8?B?b0xkbkdSRExZRHFKRE96NS93aVRzUmxxblh1UytCZWZKQjBaUnlMVFRFNmpC?= =?utf-8?B?TWZHOFBIT1p3ZVRmd1Z4WnhqWndOMDZvR09HS3dHY24zdFpoTHArRFd6N3Ay?= =?utf-8?B?TlN5dUxDcDgxcUZnSU43NVZYV2lpREpCaERkaUIyeFVQc1B5ZWNGOUg0dGZl?= =?utf-8?B?Q2o3bUpockxUWEtkRUpmNGFUTEFKaXlxcHA4Z1JHalgyay80OVRDU2txZ2J5?= =?utf-8?B?bzJEWm84MlU2cm9TNW85NXVEeGxtTFBFdjdzYWQvRVRVdE9zelJFaVBleXdq?= =?utf-8?B?R2dSS29FRlRFdnloc3hLS2lrNE5RVWxnM0FCMHM4K0M1d2llVkJmNG84M3R1?= =?utf-8?B?NjkySGZSNXVUTXVkMUI4a0lmaHFHQkZBRUk3azlBR3ZDVk4waXpEc1VYUDlq?= =?utf-8?B?djVsby9GWVRnb1FFNEhhVWNkUTBYaWpDaVNGL3c3UVlwOFRFcWg1UTVFM01z?= =?utf-8?B?UEVUaTlTOG82VVJvMGtUUGp0ZEFkTWdiZHE3SUtPbkFld3U3ZUw1bXVMTEo1?= =?utf-8?B?eHRPL1dzNHJiRzNnRzlYS3lFQnphdURKR0NBZEZxb2RJK0diL1pVT05TTXdk?= =?utf-8?B?aUNOR05YaGNYcmQ4T0p6NVl4ZVR2bHBHaTQ1QWRqLzdaTk9GbURBdlVpM1I1?= =?utf-8?B?c2wvekRyQkZkbDN0LzhTUzdBVWZId2YvYnVZYnFqVGR4elY0RFZmK2pPaHJ5?= =?utf-8?B?UWNJTXdpZldQSkxMeXk3aktWR2ZBM3UrMG5oMkt3MUxTQmEyRE8vbTZMUk5z?= =?utf-8?B?OTQxK2pBQkQ3WXNGd0htek0zK1lVUzJiYnpyMDR6OU1JWCtFR0N0OUx2a0xy?= =?utf-8?B?YllvTFNEeUtRMG8rY2NGNmFuOGJaOERrQlpkU3paems2TDhNQjNQZ1dkUW5s?= =?utf-8?B?WXd0bllvZG5nZTRlR0I0enBhMWVZRk1WNnpCdk1RcUhWU0ZNa085QVRrc053?= =?utf-8?B?M2pNbUxBcmZ1Y3EzenZIQkxrUmp1YzNUaW85azdGUkpSVHV3NmpjTExUM1lB?= =?utf-8?B?bW5tRmljY0pwMDV0Q09rMG03K0pLcTNaR0pzc1cwL3I2RFR6YlpISmRPMENN?= =?utf-8?B?ZUdMcGY3Qm54SkNvY21Jak1kbkxRaGRDM1dWV0tTeER5VGpndHpWNHNzSUlx?= =?utf-8?B?b3d2eWRTV3dWcXVFbStTei9DYVpsQnZ3bkU1TVBsRkNjNUdWelhFMUhTN0V2?= =?utf-8?B?bktZSkVDZ1FjcGxKWk9kVG5qbFloNkdSUEF5UC9jWXhaVlVjY29HRU5MUmhw?= =?utf-8?B?ZW4xODVjc0pvS2l5VGRIajNvRlVITHFmNGhJVHRRUUxiZkRON29POWJoRU5W?= =?utf-8?B?dXk3Q1VzYkZscVRzTFJzUEJHR1dnSG11K3IxVGRETTdFem9CWFdQVlYzSVdn?= =?utf-8?B?MUIrL0pFcEpXQXdwV1FMN3Q1MnNSbitaQXpBRzQyWndzdVBRRFhsV24vTTZh?= =?utf-8?B?NXFBQTA2SzdjeTNDL3FFKzN5TXRzSzBGZGVPajJkbm1mVGtUd2Z3ZkpJNlJw?= =?utf-8?B?SFp2eXg0dXpsd3lndS9Oc0dJU1YwbjVHRy85bDJEL2hHNWgwS25YOHgxZENK?= =?utf-8?B?WHBHUFg3RUVzYmpMdGh6eXA4a0tldkJSYW4rQVErTE5lK2FkcUhodU9iZkox?= =?utf-8?B?cXh5SzJFRXM4VTRzVnVJUjhQYkpTajEyVU5DS3E1QUkxTlg1VFF6QkYzc2dZ?= =?utf-8?B?aElUODBFNjBYTEFYcFNYRW1qbFYrVU9FWkFBQnRGZGVXaGxRRkFUK25wWndj?= =?utf-8?B?OHQ4KzNLeCs0TFZFT1kwVlI4OUl3WTJWWXYwbFZTbEt5VDJXWUVsYkpFaEFz?= =?utf-8?B?aTVmalRVZXRTczh1QUQ0YldRQThzVnI3YUliMmRUTHhGVE5pUG0yZ25sQlFk?= =?utf-8?B?cERLZkJKQkhtWUFRbXRtcEpod3kvTFRLbG9jY3cxSktscTRpbFlnV1lzNktw?= =?utf-8?B?YVhmSE1lbFhlb0ZlMDYvdUc4TzVPSm9lVXhPVzh4NHE4Ri9XSnJZTWtyZHBk?= =?utf-8?B?czlNOFBpS1N2TWVuN2diMlVXYkY5Q1orb1Vvb3NSc0kvdkhzZmZ6TytYWSs2?= =?utf-8?Q?pTjJ+6aTLWQhNeNg=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: mfd7nLCvcNsvTL9C1buRLrmof8IMJi+8Rb2P73se4QrAn0Y3wHMDVWtSZeO0Am6Ohx/fs8zpQorMk0biw2A6z74FD+g07mwwXiRi7AxPWP900TtcDA3WZC1GTRPR+iQY7YWdeyl5qngBb9m+KmPBbF4iE7nlqiOiUOGfpAPKrZ6Uekhik/id2FC+bz6qk9qWtHmn4z+DOtCHaDD1yRsmx+KDkZ0iWIQaRnYmEMuSWWgj+/Y1MtiKQfVJLSB6NNc933cenbygXNOptVluJJBK87wD7dqe4cg4gVOBGDQZtlQRz16Gzj9CdcRokdjWGy6t8Z80Xp7K0CW3d32quwKbEQ== X-OriginatorOrg: trendmicro.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BYAPR01MB3830.prod.exchangelabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4bbcd02d-1615-4994-e9b0-08df2fbb62bf X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Oct 2026 21:36:37.1338 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3e04753a-ae5b-42d4-a86d-d6f05460f9e4 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: MRvayBZmuoADHZ7SlgPfsEaWAng7JpUcUKjhXOi3ay+ypO+BcYD5otLjBeTYGNGYOrAl4QvDmY/FoKpZnRTN+lA6Dm4cyuCUAiUAqrXt2Lg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR01MB994561 X-TM-AS-ERS: 52.101.46.35-0.0.0.0 X-TMASE-Version: StarCloud-1.3-9.2.1014-30272.002 X-TMASE-Result: 10--25.476800-4.000000 X-TMASE-MatchedRID: 0WFAqoymwqxyv0jrUI8Jl2sl1BC8d8yL8Atv+QYJmLEXv84Om9qSxwKL F8hh0gqc9nrnZ0jbWmAwMDihkJr6qLwNtLed/oQYri/MGNDKD8xgowdYVHDt8QYDI7xQ/B/9lkW KVfNAci+1aDzzQwNtOXnId0PPnUxaX4vfE0o5dZISC+FlVEOQ/TvQG0xdFpDCz2luKw/BloxSIT mUaxn9yH3QMml6kOiAqHvNo8+aBC5kaQL+eDOhAhaZXBDidvSwPOditvCgkROKthRgrEoKfXs2Q VzOfh9pis4IUdhTEbnY6272DZVes30Et4WZNAk54oyonbBBZ2jU0ho7mxaK+LuqI21Eu6EQ1XBU UvuJOJurJjSbTE7N49l+mlxo3GemRddABkTDO/6Uv12EY+2JHUYNeTPwDt2PvP2es7dSq67MOUu GY1/+wHoPUNKZjcWsgXIvyp8+yG+8oqBQXCdn8gQPkcRYJ6tyLCUZCoB5ayj3poNAYVejxYJMeg zjXI9fwVaA0NueJdBY2xhz1V4aPArUyd7F0V7BfEJL4KIPcWqaiywzm/UiQ7SoLnKRrjZETlSOM +BNiL4C8i9PbiYzq5ORqER7Sx2NSlDuWhehUtOoyU19uhaTkbo2KXQsvVZSlNA/bMkIkUwffm57 6Z759FQ07hk/66CatOzB1M63bgiytwYUg1mRNOs5uQtU4//3cQ1FQBMySNh+rvFZ7FWrXM6tJc6 84va3CBjodZULPVA9+1Hs1ajzAtB620mcTuzbcgMncQmX5Oyp4lnMsTvcheuLKunpGCmt++3w2w J7F7RIYGHn2wTZBF4/9bwlWUtV3GF9DZJIOrXeC6pfHCmDCDmoMBkrmuf/mCYM4MaoFU8QSZo0P rLGOq+eCSMeOiOkixsDakoPlQbos2HUYpZYeC9h6tejU7UDH2GXvXCveEJeLyJ2sQfKib/a0nd+ hIFCwPd9fpjXfbBT0PyBnvNi7X4uVrCkHLnlBv3BwF3sroc= X-TMASE-XGENCLOUD: d3af8481-5232-4018-9b7c-6d6cd9a67643-0-0-200-0 X-TM-Deliver-Signature: 530DC22052B0B945AA24668E1E90F0B4 X-TM-Addin-Auth: mtItbf+At2/s24mTJVftKA/5dNGf5tYcmNXZ2UD03FaTDfJda0TTfjUACZy EzINWTo6AgKGaadU/WQFbUkf7Vt52cP0LiN4YdCbXG+2YSF3Ptbcx4IzYszwMoLQbXWon1+vv75 Rli9ohsh615otEwZUksvKEA6ejbO+QLdRZj+yS9183vhspz3FLmyi3EiPE4/eKPGbw7jjjf+LIL C3pDRMhmhon6eBts4Oqxmagkfo9UZBuEC3wi/9DL2IzJbLeOg/TFy8X+SUsWFc4dYa3xPKvgqmh 2QLwHu3bSjKucH6bn5WUF0H92Upxohn9SMGR/+UOx9CcODRpbtpsgfGQMQ==.D6uP2YphP9OFfP HS6yeX+b0ZwxacxaUOXxLInnOxITLmD73HEVrCS1Yo7/Vh7zi4+hQwEUCjrGqYtWCohYBtoE41L om+kzLPVsbLSHHI3adLZw2DbkkFxNL4e0/OC1KMW8DI+NOZGEXVOE4B7f1TSks0PPvhzUv8rOUE hxLiceCss/BC86oyqRwiLEtaOmujXtiAPAx1khsoBfqgtQiZwSY3ayEbwDcAYms3eLEy2ZPsnoe GTTDVty0hWVEsm9Ndf74MTxgrtxn1s2iuXskA5HNQJ7uKmFz1waFUR+Pz9ZYseMdPVpUoRA+Rfc y1111SnxCSngfQwQR2MYQVxJwPYQ== X-TM-Addin-ProductCode: EMS DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=trendmicro.com; s=TM-DKIM-20260724121021; t=1792618603; x=1792791403; bh=qiDXMmeGgXN3hCKTWV9iezczdW740vagURlrP9mEKrs=; h=From:To:Subject:Date:Message-ID:Content-Type:MIME-Version:From:To: Date:Message-ID:Subject:Content-Type:Reply-To:MIME-Version; b=qliPL2eqS4Fz3iUfPg6YQdRHFxtx/vXTbFvGO5hm2IRYjizlxI5zGNQsAVYoCpxm8 GOvbLL/v2kKpQwEcsHlWadEGvi93VDZdVrxEnTVrxwbAETQUfJP261Y7R2LOw5APz/ rmtIu27WkyEhvZJk/XmHCcpflJt9UfpWdZgoM2m4f9StyHdQ3jjhDrkdc+55a68JCG u1AQ7OOjEZuDv84JEx64gyCKOhFV2NPMZVBDkaQ1QFaSXtr5j+VrF5K/qHxKalRrq6 b4teIWqsPR9gNuP2ac9UiKwfBJCpM/tD31MlUlA6XXr982ayjopbcy2bISlWg6IpmV ZRgeJQO9p/hnw== WkRJLUNBTi0zMzc3NDogTGludXggS2VybmVsIEtTTUJEIFByb3RvY29sIERpc3BhdGNoIFJhY2Ug Q29uZGl0aW9uIFJlbW90ZSBDb2RlIEV4ZWN1dGlvbiBWdWxuZXJhYmlsaXR5DQoNCi0tIENWU1Mg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KOS4wOiBBVjpOL0FD OkgvUFI6Ti9VSTpOL1M6Qy9DOkgvSTpIL0E6SA0KDQotLSBBQlNUUkFDVCAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClRyZW5kIE1pY3JvJ3MgWmVybyBEYXkgSW5pdGlh dGl2ZSBoYXMgaWRlbnRpZmllZCBhIHZ1bG5lcmFiaWxpdHkgYWZmZWN0aW5nIHRoZSBmb2xsb3dp bmcgcHJvZHVjdHM6DQpMaW51eCAtIEtlcm5lbCBLU01CRA0KDQotLSBWVUxORVJBQklMSVRZIERF VEFJTFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqIFZlcnNpb24gVGVzdGVkOjcuMy1yYzMN CiogUGxhdGZvcm0gVGVzdGVkOmRlYmlhbiB0cml4aWUNCg0KLS0tDQoNCiMjIyBBbmFseXNpcw0K DQpjb25uLT5vcHMgaXMgc2VsZWN0ZWQgcGVyLVBEVSBhdCBlbnF1ZXVlIHRpbWUgYnV0IGRlcmVm ZXJlbmNlZCBhdCBkZXF1ZXVlIHRpbWUuDQpJdCBjYW4gbGVhZCB0byBhIDQwLWJ5dGUgU01CMSBi dWZmZXIgaXMgcGFyc2VkIGFzIGEgNjQtYnl0ZSBTTUIyIGhlYWRlciB3aXRob3V0IGxlbmd0aCBj aGVjayBhbmQgbGVhayBPT0IgcmVhZCBtZW1vcnkgYmFjayB0byBhdHRhY2tlci4NClRoZXJlIGlz IGFsc28gYSBwYXRoIHRvIE9PQiB3cml0ZSwgc21iMl9zZXRfaW5mbyAtPiBwYXJzZV9zZWNfZGVz Yy4NClRoZSB0cmlnZ2VyIHJlcXVpcmVzIHJhY2UgYW5kIGd1ZXN0IHNoYXJlLg0KDQp+fn5DKysN Ci8vIHNlcnZlci5jIC0gcXVldWVfa3NtYmRfd29yaygpDQogICAga3NtYmRfaW5pdF9zbWJfc2Vy dmVyKGNvbm4pOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoMSkgcmUtcmVhZHMgcmVxdWVz dCBwcm90bywgc2V0cyBjb25uLT5vcHMgcGVyLVBEVQ0KICAgIHdvcmstPnJlcXVlc3RfYnVmID0g Y29ubi0+cmVxdWVzdF9idWY7ICAgICAgICAgICAgICAgLy8gKDIpIGJ1ZmZlciBib3VuZCB0byB3 b3JrLCBvcHMgaXMgTk9UIO+/ve+/ve+/vSBxdWV1ZWQgZm9yIGxhdGVyDQoNCi8vIHNlcnZlci5j IC0gX19oYW5kbGVfa3NtYmRfd29yaygpICAgW2t3b3JrZXIsIGFmdGVyIGZsaXBdDQogICAgY29u bi0+b3BzLT5pbml0X3JzcF9oZHIod29yayk7ICAgICAgICAgICAgICAgICAgICAgICAvLyAoMykg b3BzIHJlYWQgYXQgZGVxdWV1ZSDvv73vv73vv70gU01CMiBoYW5kbGVyIG9uIFNNQjEgYnVmZmVy DQoNCi8vIHNtYjJwZHUuYyAtIGluaXRfc21iMl9yc3BfaGRyKCkNCiAgICByc3BfaGRyLT5TZXNz aW9uSWQgPSByY3ZfaGRyLT5TZXNzaW9uSWQ7ICAgICAgICAgICAgIC8vICg0KSByZWFkcyBvZmZz ZXQgNDArIG9mIGEgNDAtYnl0ZSBrdm1hbGxvYydkIGJ1ZmZlcg0KICAgIG1lbWNweShyc3BfaGRy LT5TaWduYXR1cmUsIHJjdl9oZHItPlNpZ25hdHVyZSwgMTYpOyAgLy8gKDUpIDI4IE9PQiBoZWFw IGJ5dGVzIO+/ve+/ve+/vSBzZW50IGluIDc3LWJ5dGUgZXJyb3IgcmVwbHkNCn5+fg0KDQpGbG93 OiBTTUIxIFBEVSDvv73vv73vv70gY29ubi0+b3BzPXNtYjEg77+977+977+9IHdvcmsgcXVldWVk IO+/ve+/ve+/vSBTTUIyIFBEVSBmbGlwcyBjb25uLT5vcHM9c21iMiDvv73vv73vv70ga3dvcmtl ciBydW5zIHF1ZXVlZCBTTUIxIHdvcmsgd2l0aCBTTUIyIGhhbmRsZXIg77+977+977+9IGluaXRf c21iMl9yc3BfaGRyIHJlYWRzIHBhc3QgdGhlIDQwLWJ5dGUgYWxsb2NhdGlvbiDvv73vv73vv70g MjggaGVhcCBieXRlcyBsZWFrZWQgdG8gYXR0YWNrZXIuDQoNCktBU0FOIHJlcG9ydA0KYGBgDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCkJVRzogS0FTQU46IHNsYWItb3V0LW9mLWJvdW5kcyBpbiBpbml0X3NtYjJfcnNw X2hkcisweDZiZC8weDc5MCAvcm9vdC9saW51eC9mcy9zbWIvc2VydmVyL3NtYjJwZHUuYzo2NjEN ClJlYWQgb2Ygc2l6ZSA0IGF0IGFkZHIgZmZmZjg4ODAyMjJjMmJhOCBieSB0YXNrIGt3b3JrZXIv MjoxLzYxDQoNCkNQVTogMiBVSUQ6IDAgUElEOiA2MSBDb21tOiBrd29ya2VyLzI6MSBOb3QgdGFp bnRlZCA3LjMuMC1yYzMgIzMgUFJFRU1QVChsYXp5KQ0KSGFyZHdhcmUgbmFtZTogUUVNVSBVYnVu dHUgMjUuMTAgUEMgdjIgKGk0NDBGWCArIFBJSVgsICsgMTAuMSBtYWNoaW5lLCAxOTk2KSwgQklP UyAxLjE2LjMtZGViaWFuLTEuMTYuMy0yIDA0LzAxLzIwMTQNCldvcmtxdWV1ZToga3NtYmQtaW8g aGFuZGxlX2tzbWJkX3dvcmsNCkNhbGwgVHJhY2U6DQogPFRBU0s+DQogX19kdW1wX3N0YWNrIC9y b290L2xpbnV4L2xpYi9kdW1wX3N0YWNrLmM6OTQNCiBkdW1wX3N0YWNrX2x2bCsweDEwMC8weDE5 MCAvcm9vdC9saW51eC9saWIvZHVtcF9zdGFjay5jOjEyMA0KIHByaW50X2FkZHJlc3NfZGVzY3Jp cHRpb24gL3Jvb3QvbGludXgvbW0va2FzYW4vcmVwb3J0LmM6Mzc4DQogcHJpbnRfcmVwb3J0KzB4 MTM5LzB4NGFkIC9yb290L2xpbnV4L21tL2thc2FuL3JlcG9ydC5jOjQ4Mg0KIGthc2FuX3JlcG9y dCsweGU0LzB4MWQwIC9yb290L2xpbnV4L21tL2thc2FuL3JlcG9ydC5jOjU5NQ0KIGluaXRfc21i Ml9yc3BfaGRyKzB4NmJkLzB4NzkwIC9yb290L2xpbnV4L2ZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5j OjY2MQ0KIF9faGFuZGxlX2tzbWJkX3dvcmsgL3Jvb3QvbGludXgvZnMvc21iL3NlcnZlci9zZXJ2 ZXIuYzoyMjMNCiBoYW5kbGVfa3NtYmRfd29yaysweDFiMS8weDFmZjAgL3Jvb3QvbGludXgvZnMv c21iL3NlcnZlci9zZXJ2ZXIuYzozNjgNCiBwcm9jZXNzX29uZV93b3JrKzB4YWY3LzB4MWIzMCAv cm9vdC9saW51eC9rZXJuZWwvd29ya3F1ZXVlLmM6MzM5Ng0KIHByb2Nlc3Nfc2NoZWR1bGVkX3dv cmtzIC9yb290L2xpbnV4L2tlcm5lbC93b3JrcXVldWUuYzozNDc5DQogd29ya2VyX3RocmVhZCsw eDVlYi8weGU1MCAvcm9vdC9saW51eC9rZXJuZWwvd29ya3F1ZXVlLmM6MzU2MA0KIGt0aHJlYWQr MHgzNzMvMHg0NTAgL3Jvb3QvbGludXgva2VybmVsL2t0aHJlYWQuYzo0MzYNCiByZXRfZnJvbV9m b3JrKzB4NzJiLzB4ZDMwIC9yb290L2xpbnV4L2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmM6MTU4 DQogcmV0X2Zyb21fZm9ya19hc20rMHgxYS8weDMwIC9yb290L2xpbnV4L2FyY2gveDg2L2VudHJ5 L2VudHJ5XzY0LlM6MjQ1DQogPC9UQVNLPg0KDQpBbGxvY2F0ZWQgYnkgdGFzayA5NTQ5Og0KIGth c2FuX3NhdmVfc3RhY2srMHgzMC8weDUwIC9yb290L2xpbnV4L21tL2thc2FuL2NvbW1vbi5jOjU3 DQoga2FzYW5fc2F2ZV90cmFjaysweDE0LzB4MzAgL3Jvb3QvbGludXgvbW0va2FzYW4vY29tbW9u LmM6NzgNCiBwb2lzb25fa21hbGxvY19yZWR6b25lIC9yb290L2xpbnV4L21tL2thc2FuL2NvbW1v bi5jOjM5OA0KIF9fa2FzYW5fa21hbGxvYysweDlhLzB4YjAgL3Jvb3QvbGludXgvbW0va2FzYW4v Y29tbW9uLmM6NDE1DQoga2FzYW5fa21hbGxvYyAvcm9vdC9saW51eC8uL2luY2x1ZGUvbGludXgv a2FzYW4uaDoyNjMNCiBfX2RvX2ttYWxsb2Nfbm9kZSAvcm9vdC9saW51eC9tbS9zbHViLmM6NTQx NA0KIF9fa3ZtYWxsb2Nfbm9kZV9ub3Byb2YrMHgzNTIvMHg5YTAgL3Jvb3QvbGludXgvbW0vc2x1 Yi5jOjcwMTQNCiBrc21iZF9jb25uX2hhbmRsZXJfbG9vcCsweDY3Yi8weDEyNjAgL3Jvb3QvbGlu dXgvZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmM6Njc5DQoga3RocmVhZCsweDM3My8weDQ1MCAv cm9vdC9saW51eC9rZXJuZWwva3RocmVhZC5jOjQzNg0KIHJldF9mcm9tX2ZvcmsrMHg3MmIvMHhk MzAgL3Jvb3QvbGludXgvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYzoxNTgNCiByZXRfZnJvbV9m b3JrX2FzbSsweDFhLzB4MzAgL3Jvb3QvbGludXgvYXJjaC94ODYvZW50cnkvZW50cnlfNjQuUzoy NDUNCg0KVGhlIGJ1Z2d5IGFkZHJlc3MgYmVsb25ncyB0byB0aGUgb2JqZWN0IGF0IGZmZmY4ODgw MjIyYzJiODANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGJlbG9uZ3MgdG8gdGhl IGNhY2hlIGttYWxsb2MtNjQgb2Ygc2l6ZSA2NA0KVGhlIGJ1Z2d5IGFkZHJlc3MgaXMgbG9jYXRl ZCAwIGJ5dGVzIHRvIHRoZSByaWdodCBvZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxs b2NhdGVkIDQwLWJ5dGUgcmVnaW9uIFtmZmZmODg4MDIyMmMyYjgwLCBmZmZmODg4MDIyMmMyYmE4 KQ0KDQpUaGUgYnVnZ3kgYWRkcmVzcyBiZWxvbmdzIHRvIHRoZSBwaHlzaWNhbCBwYWdlOg0KcGFn ZTogcmVmY291bnQ6MCBtYXBjb3VudDowIG1hcHBpbmc6MDAwMDAwMDAwMDAwMDAwMCBpbmRleDow eDAgcGZuOjB4MjIyYzINCmZsYWdzOiAweGZmZjAwMDAwMDAwMDAwKG5vZGU9MHx6b25lPTF8bGFz dGNwdXBpZD0weDdmZikNCnBhZ2VfdHlwZTogZjUoc2xhYikNCnJhdzogMDBmZmYwMDAwMDAwMDAw MCBmZmZmODg4MDFjNDQyOGMwIGRlYWQwMDAwMDAwMDAxMDAgZGVhZDAwMDAwMDAwMDEyMg0KcmF3 OiAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAyMDAwMjAgMDAwMDAwMDBmNTAwMDAwMCAwMDAw MDAwMDAwMDAwMDAwDQpwYWdlIGR1bXBlZCBiZWNhdXNlOiBrYXNhbjogYmFkIGFjY2VzcyBkZXRl Y3RlZA0KcGFnZV9vd25lciB0cmFja3MgdGhlIHBhZ2UgYXMgYWxsb2NhdGVkDQpwYWdlIGxhc3Qg YWxsb2NhdGVkIHZpYSBvcmRlciAwLCBtaWdyYXRldHlwZSBVbm1vdmFibGUsIGdmcF9tYXNrIDB4 ZDJjYzAoR0ZQX0tFUk5FTHxfX0dGUF9OT1dBUk58X19HRlBfTk9SRVRSWXxfX0dGUF9DT01QfF9f R0ZQX05PTUVNQUxMT0MpLCBwaWQgMSwgdGdpZCAxIChzd2FwcGVyLzApLCB0cyAyMjQwMzM5MjQw DQogc2V0X3BhZ2Vfb3duZXIgL3Jvb3QvbGludXgvLi9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIu aDozMw0KIHBvc3RfYWxsb2NfaG9vaysweGZlLzB4MTQwIC9yb290L2xpbnV4L21tL3BhZ2VfYWxs b2MuYzoxODcxDQogcHJlcF9uZXdfcGFnZSAvcm9vdC9saW51eC9tbS9wYWdlX2FsbG9jLmM6MTg3 OQ0KIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QrMHgxMGM3LzB4MzRkMCAvcm9vdC9saW51eC9tbS9w YWdlX2FsbG9jLmM6Mzk0Mw0KIF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZisweDJkZS8weDMx OTAgL3Jvb3QvbGludXgvbW0vcGFnZV9hbGxvYy5jOjU0MzYNCiBhbGxvY19zbGFiX3BhZ2UgL3Jv b3QvbGludXgvbW0vc2x1Yi5jOjMzNDcNCiBhbGxvY2F0ZV9zbGFiIC9yb290L2xpbnV4L21tL3Ns dWIuYzozNDYyDQogbmV3X3NsYWIrMHhhNy8weDZiMCAvcm9vdC9saW51eC9tbS9zbHViLmM6MzUx Mw0KIHJlZmlsbF9vYmplY3RzKzB4ZWIvMHg0MDAgL3Jvb3QvbGludXgvbW0vc2x1Yi5jOjc0MTcN CiByZWZpbGxfc2hlYWYgL3Jvb3QvbGludXgvbW0vc2x1Yi5jOjI4ODUNCiBfX3Bjc19yZXBsYWNl X2VtcHR5X21haW4rMHgzNzAvMHg2NzAgL3Jvb3QvbGludXgvbW0vc2x1Yi5jOjQ3NzQNCiBhbGxv Y19mcm9tX3BjcyAvcm9vdC9saW51eC9tbS9zbHViLmM6NDg1MA0KIHNsYWJfYWxsb2Nfbm9kZSAv cm9vdC9saW51eC9tbS9zbHViLmM6NDk4NA0KIF9fa21hbGxvY19jYWNoZV9ub3Byb2YrMHg0ZWYv MHg2ZDAgL3Jvb3QvbGludXgvbW0vc2x1Yi5jOjU1NTkNCiBfa21hbGxvY19ub3Byb2YgL3Jvb3Qv bGludXgvLi9pbmNsdWRlL2xpbnV4L3NsYWIuaDo5OTENCiBfX2t0aHJlYWRfY3JlYXRlX29uX25v ZGUrMHhjZS8weDNmMCAvcm9vdC9saW51eC9rZXJuZWwva3RocmVhZC5jOjQ4Mw0KIGt0aHJlYWRf Y3JlYXRlX29uX25vZGUrMHhkMS8weDEwMCAvcm9vdC9saW51eC9rZXJuZWwva3RocmVhZC5jOjU1 OQ0KIGluaXRfamZzX2ZzKzB4MmUyLzB4NWIwIC9yb290L2xpbnV4L2ZzL2pmcy9zdXBlci5jOjEw MDANCiBkb19vbmVfaW5pdGNhbGwrMHgxMTIvMHg2ZDAgL3Jvb3QvbGludXgvaW5pdC9tYWluLmM6 MTM2Mg0KIGRvX2luaXRjYWxsX2xldmVsIC9yb290L2xpbnV4L2luaXQvbWFpbi5jOjE0MjQNCiBk b19pbml0Y2FsbHMgL3Jvb3QvbGludXgvaW5pdC9tYWluLmM6MTQ0MA0KIGRvX2Jhc2ljX3NldHVw IC9yb290L2xpbnV4L2luaXQvbWFpbi5jOjE0NjANCiBrZXJuZWxfaW5pdF9mcmVlYWJsZSsweDZl Yy8weDdiMCAvcm9vdC9saW51eC9pbml0L21haW4uYzoxNjc1DQoga2VybmVsX2luaXQrMHgyMS8w eDFlMCAvcm9vdC9saW51eC9pbml0L21haW4uYzoxNTY1DQogcmV0X2Zyb21fZm9yaysweDcyYi8w eGQzMCAvcm9vdC9saW51eC9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jOjE1OA0KIHJldF9mcm9t X2ZvcmtfYXNtKzB4MWEvMHgzMCAvcm9vdC9saW51eC9hcmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5T OjI0NQ0KcGFnZSBsYXN0IGZyZWUgcGlkIDEgdGdpZCAxIHRzIDIyMzU1NTA0MzAgc3RhY2sgdHJh Y2U6DQogcmVzZXRfcGFnZV9vd25lciAvcm9vdC9saW51eC8uL2luY2x1ZGUvbGludXgvcGFnZV9v d25lci5oOjI2DQogX19mcmVlX3BhZ2VzX3ByZXBhcmUgL3Jvb3QvbGludXgvbW0vcGFnZV9hbGxv Yy5jOjE0MTgNCiBfX2ZyZWVfZnJvemVuX3BhZ2VzKzB4NzkzLzB4MTE0MCAvcm9vdC9saW51eC9t bS9wYWdlX2FsbG9jLmM6Mjk2Mg0KIF9fX2ZyZWVfcGFnZXNfYnVsayAvcm9vdC9saW51eC9tbS9r YXNhbi9zaGFkb3cuYzozMzMNCiBfX2thc2FuX3BvcHVsYXRlX3ZtYWxsb2NfZG8gL3Jvb3QvbGlu dXgvbW0va2FzYW4vc2hhZG93LmM6Mzg1DQogX19rYXNhbl9wb3B1bGF0ZV92bWFsbG9jKzB4MTRk LzB4MWYwIC9yb290L2xpbnV4L21tL2thc2FuL3NoYWRvdy5jOjQyNA0KIGthc2FuX3BvcHVsYXRl X3ZtYWxsb2MgL3Jvb3QvbGludXgvLi9pbmNsdWRlL2xpbnV4L2thc2FuLmg6NTgwDQogYWxsb2Nf dm1hcF9hcmVhKzB4OTY1LzB4MmI0MCAvcm9vdC9saW51eC9tbS92bWFsbG9jLmM6MjE0NQ0KIF9f Z2V0X3ZtX2FyZWFfbm9kZSsweDFlNC8weDM1MCAvcm9vdC9saW51eC9tbS92bWFsbG9jLmM6MzI0 OA0KIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZisweDI1My8weDE0MDAgL3Jvb3QvbGludXgv bW0vdm1hbGxvYy5jOjQwNjQNCiBfX3ZtYWxsb2Nfbm9kZV9ub3Byb2YrMHhhYS8weGYwIC9yb290 L2xpbnV4L21tL3ZtYWxsb2MuYzo0MTY1DQogdHhJbml0LmNvbGQrMHgzMDMvMHg1OGQgL3Jvb3Qv bGludXgvZnMvamZzL2pmc190eG5tZ3IuYzoyOTgNCiBpbml0X2pmc19mcysweDEyZC8weDViMCAv cm9vdC9saW51eC9mcy9qZnMvc3VwZXIuYzo5NzgNCiBkb19vbmVfaW5pdGNhbGwrMHgxMTIvMHg2 ZDAgL3Jvb3QvbGludXgvaW5pdC9tYWluLmM6MTM2Mg0KIGRvX2luaXRjYWxsX2xldmVsIC9yb290 L2xpbnV4L2luaXQvbWFpbi5jOjE0MjQNCiBkb19pbml0Y2FsbHMgL3Jvb3QvbGludXgvaW5pdC9t YWluLmM6MTQ0MA0KIGRvX2Jhc2ljX3NldHVwIC9yb290L2xpbnV4L2luaXQvbWFpbi5jOjE0NjAN CiBrZXJuZWxfaW5pdF9mcmVlYWJsZSsweDZlYy8weDdiMCAvcm9vdC9saW51eC9pbml0L21haW4u YzoxNjc1DQoga2VybmVsX2luaXQrMHgyMS8weDFlMCAvcm9vdC9saW51eC9pbml0L21haW4uYzox NTY1DQogcmV0X2Zyb21fZm9yaysweDcyYi8weGQzMCAvcm9vdC9saW51eC9hcmNoL3g4Ni9rZXJu ZWwvcHJvY2Vzcy5jOjE1OA0KIHJldF9mcm9tX2ZvcmtfYXNtKzB4MWEvMHgzMCAvcm9vdC9saW51 eC9hcmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5TOjI0NQ0KDQpNZW1vcnkgc3RhdGUgYXJvdW5kIHRo ZSBidWdneSBhZGRyZXNzOg0KIGZmZmY4ODgwMjIyYzJhODA6IDAwIDAwIDAwIDAwIDAwIDAwIGZj IGZjIGZjIGZjIGZjIGZjIGZjIGZjIGZjIGZjDQogZmZmZjg4ODAyMjJjMmIwMDogMDAgMDAgMDAg MDAgMDAgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMNCj5mZmZmODg4MDIyMmMyYjgw OiAwMCAwMCAwMCAwMCAwMCBmYyBmYyBmYyBmYyBmYyBmYyBmYyBmYyBmYyBmYyBmYw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4NCiBmZmZmODg4MDIyMmMyYzAwOiAwMCAwMCAw MCAwMCAwMCAwMCAwMCAwMCBmYyBmYyBmYyBmYyBmYyBmYyBmYyBmYw0KIGZmZmY4ODgwMjIyYzJj ODA6IDAwIDAwIDAwIDAwIDAwIDAwIGZjIGZjIGZjIGZjIGZjIGZjIGZjIGZjIGZjIGZjDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCmBgYA0KDQotLS0NCg0KIyBQcm9vZiBvZiBDb25jZXB0OiBwb2MvcG9jLW9wc2ZsaXAu Yw0KDQpgYGBjDQovKg0KICogUHJvb2Ytb2YtY29uY2VwdCBmb3IgdGhlIHZ1bG5lcmFiaWxpdHkg ZGVzY3JpYmVkIGluIHRoaXMgcmVwb3J0Lg0KICoNCiAqIFByZS1hdXRoZW50aWNhdGlvbiBTTUIx L1NNQjIgKm9wcy10YWJsZSogY29uZnVzaW9uIGluIGtzbWJkLg0KICoNCiAqIFRIRSBERUZFQ1Qg VEhJUyBEUklWRVMNCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqIFRoZSBjb25uZWN0aW9u IHRocmVhZCByZS1zZWxlY3RzIHRoZSB3aG9sZSBwZXItY29ubmVjdGlvbiBkaXNwYXRjaCB2ZWN0 b3Igb24NCiAqIEVWRVJZIHJlY2VpdmVkIHJlcXVlc3QsIGZvciBhcyBsb25nIGFzIGNvbm4tPm5l ZWRfbmVnIGlzIHRydWU6DQogKg0KICogICBmcy9zbWIvc2VydmVyL3NlcnZlci5jOjMzNSAgICAg ICAgcXVldWVfa3NtYmRfd29yaygpDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVyciA9IGtzbWJkX2luaXRfc21iX3NlcnZlcihjb25uKTsNCiAqICAgZnMvc21iL3Nl cnZlci9zbWJfY29tbW9uLmM6NDM0LTQ0MiBrc21iZF9pbml0X3NtYl9zZXJ2ZXIoKQ0KICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubi0+bmVlZF9uZWcgPT0g ZmFsc2UpIHsuLi59DQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy b3RvPT1TTUIxID8gaW5pdF9zbWIxX3NlcnZlcigpDQogKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5pdF9zbWIzXzExX3NlcnZlcigpOw0KICog ICBmcy9zbWIvc2VydmVyL3NtYl9jb21tb24uYzo0MTktNDI2IGluaXRfc21iMV9zZXJ2ZXIoKQ0K ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT52YWxzL29wcy9j bWRzL21heF9jbWRzDQogKiAgIGZzL3NtYi9zZXJ2ZXIvc21iMm9wcy5jOjI3OC0yOTcgICAgaW5p dF9zbWIzXzExX3NlcnZlcigpICAgKHNhbWUgZm91cikNCiAqDQogKiBUaGUgYWxyZWFkeS1xdWV1 ZWQgd29ya3MgcmVhZCBjb25uLT5vcHMgTEFURVIsIGluIHRoZSBrc21iZC1pbyBrd29ya2VyOg0K ICoNCiAqICAgZnMvc21iL3NlcnZlci9zZXJ2ZXIuYzoxOTAgIGNvbm4tPm9wcy0+YWxsb2NhdGVf cnNwX2J1Zih3b3JrKQ0KICogICBmcy9zbWIvc2VydmVyL3NlcnZlci5jOjE5MyAgY29ubi0+b3Bz LT5pbml0X3JzcF9oZHIod29yaykgICAgIDwtLSBTSU5LDQogKiAgIGZzL3NtYi9zZXJ2ZXIvc2Vy dmVyLmM6MjAyICBjb25uLT5vcHMtPmNoZWNrX3VzZXJfc2Vzc2lvbih3b3JrKQ0KICogICBmcy9z bWIvc2VydmVyL3NlcnZlci5jOjIxMCAgY29ubi0+b3BzLT5pc19zaWduX3JlcSguLi4pICAgICAg IDwtLSBTSU5LIDIgKE5VTEwpDQogKg0KICogQSB3b3JrIHdob3NlIHJlcXVlc3RfYnVmIGlzIGEg KnNob3J0IFNNQjEqIFBEVSB0aGVyZWZvcmUgZXhlY3V0ZXMNCiAqIGluaXRfc21iMl9yc3BfaGRy KCkgKGZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jOjYzMikgaWYgYSBsYXRlciByZXF1ZXN0IG9uIHRo ZQ0KICogc2FtZSBjb25uZWN0aW9uIGZsaXBwZWQgY29ubi0+b3BzIHRvIHRoZSBTTUIyIHZlY3Rv ciBmaXJzdC4NCiAqDQogKiBUaGUgc2l6ZSBndWFyZHMgYXJlIGFzeW1tZXRyaWMgYW5kIHRoYXQg aXMgdGhlIHdob2xlIGJ1ZzoNCiAqDQogKiAgIGZzL3NtYi9zZXJ2ZXIvY29ubmVjdGlvbi5jOjUw NiAgcGR1X3NpemUgPCBTTUIxX01JTl9TVVBQT1JURURfUERVX1NJWkUgKDM1KQ0KICogICBmcy9z bWIvc2VydmVyL2Nvbm5lY3Rpb24uYzo1NDkgIHByb3RvPT1TTUIyICYmIHBkdV9zaXplIDwgNjYg ICAtPiBicmVhaw0KICogICBmcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uYzo1NTMgIHByb3RvPT1U UkFOU0ZPUk0gJiYgcGR1X3NpemUgPCAuLi4NCiAqDQogKiBpLmUuIDY2IGJ5dGVzIGFyZSBvbmx5 IGRlbWFuZGVkIHdoZW4gdGhlICpidWZmZXIqIHNheXMgU01CMjsgdGhlIGhhbmRsZXIgaXMNCiAq IGNob3NlbiBmcm9tIGNvbm4tPm9wcy4gIGluaXRfc21iMl9yc3BfaGRyKCkgdW5jb25kaXRpb25h bGx5IHJlYWRzDQogKiAgIHJjdl9oZHItPklkLlN5bmNJZC5UcmVlSWQgICAobXNnIG9mZiAzNiAt PiBidWYgaW5kZXggNDApDQogKiAgIHJjdl9oZHItPlNlc3Npb25JZCAgICAgICAgICAobXNnIG9m ZiA0MCAtPiBidWYgaW5kZXggNDQuLjUxKQ0KICogICBtZW1jcHkocnNwLT5TaWduYXR1cmUsIHJj dl9oZHItPlNpZ25hdHVyZSwgMTYpICAobXNnIG9mZiA0OCAtPiA1Mi4uNjcpDQogKiBvdXQgb2Yg YW4gYWxsb2NhdGlvbiBvZiBleGFjdGx5IHBkdV9zaXplICsgNCArIDEgKGNvbm5lY3Rpb24uYzo1 MTEtNTEyKS4NCiAqIFdpdGggLVMgMzUgdGhhdCBhbGxvY2F0aW9uIGlzIDQwIGJ5dGVzIGluIGtt YWxsb2MtNjQ6IDI0IGJ5dGVzIG9mIGluLW9iamVjdA0KICogS0FTQU4gcmVkem9uZSwgYW5kIHRo ZSA0LWJ5dGUgVHJlZUlkIHJlYWQgYXQgaW5kZXggNDAuLjQzIHNpdHMgaW5zaWRlIGl0Lg0KICoN CiAqIEZSRUUgT1JBQ0xFLCBubyBzYW5pdGl6ZXIgbmVlZGVkDQogKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQogKiBUaGUgY29uZnVzZWQgd29yayB0aGVuIGZhaWxzIHNtYjJfY2hl Y2tfdXNlcl9zZXNzaW9uKCkgd2l0aCAtRUlPDQogKiAoZnMvc21iL3NlcnZlci9zbWIycGR1LmM6 NzIzLCAha3NtYmRfY29ubl9nb29kKSBhbmQgc2VydmVyLmM6MjA4IGVtaXRzIGFuDQogKiBTTUIy IGVycm9yIHJlc3BvbnNlIG9mIDQgKyA2NCArIDkgPSA3NyBieXRlcywgd2hpY2ggY2FycmllcyB0 aGUgT09CLXJlYWQNCiAqIFNlc3Npb25JZCAoOCBieXRlcykgYW5kIFNpZ25hdHVyZSAoMTYgYnl0 ZXMpIHN0cmFpZ2h0IGJhY2sgdG8gdGhlIHBlZXINCiAqIChmcy9zbWIvc2VydmVyL3NtYjJwZHUu YzoyOTMtMzExIC0+IHNtYjJwZHUuYzoyMDEtMjI0IC0+IGNvbm5lY3Rpb24uYzozNTMpLg0KICog QSB3b3JrIHRoYXQgd2FzIE5PVCBjb25mdXNlZCBhbnN3ZXJzIG5vdGhpbmcgYXQgYWxsIChzZXRf c21iMV9yc3Bfc3RhdHVzDQogKiBzZXRzIHNlbmRfbm9fcmVzcG9uc2UsIGZzL3NtYi9zZXJ2ZXIv c21iX2NvbW1vbi5jOjM5MykuDQogKg0KICogICA9PiBBTlkgNzctYnl0ZSBTTUIyIGVycm9yIHJl cGx5IG9uIHRoaXMgY29ubmVjdGlvbiA9PSB0aGUgZmxpcCBoYXBwZW5lZA0KICogICAgICBhbmQg MjggYnl0ZXMgcGFzdCB0aGUgYWxsb2NhdGlvbiBqdXN0IHdhbGtlZCBvdXQuDQogKg0KICogSE9X IFRIRSBGTElQIElTIEZPUkNFRCAobm90IGEgdGlnaHQgaW5zdHJ1Y3Rpb24gcmFjZSkNCiAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqIE9u ZSB3cml0ZSgyKSBjYXJyaWVzOiA8YnVyc3Q+IHNob3J0IFNNQjEgUERVcywgdGhlbiBPTkUgU01C MiBFQ0hPICg2OCBieXRlcykuDQogKiBUaGUgY29ubmVjdGlvbiB0aHJlYWQgZHJhaW5zIGFsbCBv ZiB0aGVtIHdpdGhvdXQgZXZlciBibG9ja2luZyBvbiB0aGUgc29ja2V0LA0KICogc28gaXQgcXVl dWVzIHRoZSBTTUIxIHdvcmtzIGFuZCBUSEVOIHJ1bnMgaW5pdF9zbWIzXzExX3NlcnZlcigpIGZv ciB0aGUgRUNITywNCiAqIHdoaWxlIHRoZSBrc21iZC1pbyBrd29ya2VycyAocXVldWVfd29yayB3 aXRoIFdRX1BFUkNQVSBwaWNrcyB0aGUgY29ubmVjdGlvbg0KICogdGhyZWFkJ3Mgb3duIENQVSwg a3NtYmRfd29yay5jOjEwOCkgaGF2ZSBub3QgbmVjZXNzYXJpbHkgYmVlbiBzY2hlZHVsZWQgeWV0 Lg0KICogRXZlcnkgU01CMSB3b3JrIHN0aWxsIHNpdHRpbmcgaW4gdGhlIHF1ZXVlIGF0IHRoYXQg bW9tZW50IHJlYWRzIHRoZSBTTUIyIG9wcy4NCiAqDQogKiBDb21tYW5kIGJ5dGUgb2YgdGhlIFNN QjEgUERVIGlzIDB4MDAsIE5PVCAweDcyOiBrc21iZF92ZXJpZnlfc21iX21lc3NhZ2UoKQ0KICog dGhlbiByZXR1cm5zIC1FSU5WQUwgYXQgZnMvc21iL3NlcnZlci9zbWJfY29tbW9uLmM6MTcxIEJF Rk9SRSB0aGUNCiAqIHdvcmstPmNvbm4tPm91dHN0YW5kaW5nX2NyZWRpdHMrKyBhdCBzbWJfY29t bW9uLmM6MTY3LCBzbyB0aGUgY29ubmVjdGlvbiBkb2VzDQogKiBub3Qgc3RyYW5nbGUgaXRzZWxm IG9uIHNtYjJtaXNjLmM6MzYxIGFmdGVyIHRoZSBmaXJzdCByZXF1ZXN0Lg0KICoNCiAqIEV4aXQg MCBtZWFucyB0aGUgcHJvZ3JhbSByYW4sIE5PVCB0aGF0IGEgYnVnIHdhcyBmb3VuZC4NCiAqLw0K I2RlZmluZSBfR05VX1NPVVJDRQ0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RkbGli Lmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8 ZXJybm8uaD4NCiNpbmNsdWRlIDxzdGRpbnQuaD4NCiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+DQoj aW5jbHVkZSA8c3lzL3dhaXQuaD4NCiNpbmNsdWRlIDxuZXRpbmV0L2luLmg+DQojaW5jbHVkZSA8 bmV0aW5ldC90Y3AuaD4NCiNpbmNsdWRlIDxhcnBhL2luZXQuaD4NCiNpbmNsdWRlIDxwb2xsLmg+ DQojaW5jbHVkZSA8c2lnbmFsLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KDQojZGVmaW5lIFNNQjJf SERSX1NJWkUgICA2NA0KI2RlZmluZSBTTUIyX1BST1RPICAgICAgIlx4ZmVTTUIiDQojZGVmaW5l IFNNQjFfUFJPVE8gICAgICAiXHhmZlNNQiINCiNkZWZpbmUgU01CMl9FQ0hPICAgICAgIDB4MDAw ZA0KDQovKiBmcy9zbWIvY29tbW9uL3NtYjJzdGF0dXMuaDo2NDYgKi8NCiNkZWZpbmUgU1RfVVNF Ul9TRVNTSU9OX0RFTEVURUQgMHhDMDAwMDIwM3UNCg0Kc3RhdGljIHZvaWQgcHV0MTYodWludDhf dCAqcCwgdWludDE2X3QgdikgeyBwWzBdID0gdiAmIDB4ZmY7IHBbMV0gPSB2ID4+IDg7IH0NCnN0 YXRpYyB2b2lkIHB1dDMyKHVpbnQ4X3QgKnAsIHVpbnQzMl90IHYpDQp7DQoJcFswXSA9IHYgJiAw eGZmOyBwWzFdID0gKHYgPj4gOCkgJiAweGZmOw0KCXBbMl0gPSAodiA+PiAxNikgJiAweGZmOyBw WzNdID0gKHYgPj4gMjQpICYgMHhmZjsNCn0NCnN0YXRpYyB1aW50MTZfdCBnZXQxNihjb25zdCB1 aW50OF90ICpwKSB7IHJldHVybiAodWludDE2X3QpKHBbMF0gfCAocFsxXSA8PCA4KSk7IH0NCnN0 YXRpYyB1aW50MzJfdCBnZXQzMihjb25zdCB1aW50OF90ICpwKQ0Kew0KCXJldHVybiAodWludDMy X3QpcFswXSB8ICgodWludDMyX3QpcFsxXSA8PCA4KSB8DQoJICAgICAgICgodWludDMyX3QpcFsy XSA8PCAxNikgfCAoKHVpbnQzMl90KXBbM10gPDwgMjQpOw0KfQ0KDQpzdGF0aWMgdWludDY0X3Qg Z2V0NjQoY29uc3QgdWludDhfdCAqcCkNCnsNCgl1aW50NjRfdCB2ID0gMDsNCglpbnQgaTsNCg0K CWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKQ0KCQl2ID0gKHYgPDwgOCkgfCBwW2ldOw0KCXJldHVy biB2Ow0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICogV0hBVCBpcyBpbiB0aGUgMjggYnl0 ZXMgd2UgbGVhaz8NCiAqDQogKiBUaGUgcmVwbHkgd2luZG93IHNjb3JlZCBoZXJlIGlzIG1zZyBv ZmZzZXRzIDM2Li42MyA9PSByZXF1ZXN0LWJ1ZmZlciBpbmRpY2VzDQogKiA0MC4uNjcgb2YgYSA0 MC1ieXRlIGt2bWFsbG9jIChwZHVfc2l6ZSAzNSArIDUpIHRoYXQgbGl2ZXMgaW4ga21hbGxvYy02 NC4NCiAqIEJ1ZmZlciBpbmRleCAwIGlzIHRoZSBzdGFydCBvZiBhIDY0LWJ5dGUtYWxpZ25lZCBz bGFiIG9iamVjdCwgc28gdGhlIE9OTFkNCiAqIDgtYnl0ZS1hbGlnbmVkIHdvcmRzIGluc2lkZSB0 aGUgd2luZG93IHN0YXJ0IGF0IGJ1ZmZlciA0MCwgNDggYW5kIDU2DQogKiAoPT0gbXNnIDM2LCA0 NCwgNTIpLiBCdWZmZXIgNjQuLjY3IGlzIHRoZSBmaXJzdCBmb3VyIGJ5dGVzIG9mIHRoZSBORVhU DQogKiBvYmplY3QgaW4gdGhlIHNhbWUgc2xhYiBhbmQgaXMgdG9vIHNob3J0IHRvIGNsYXNzaWZ5 IGJ5IHRvcCBiaXRzLCBzbyBpdCBpcw0KICogb25seSBjb3VudGVkLCBuZXZlciBidWNrZXRlZC4N CiAqDQogKiBSYW5nZXMuIFRoZXNlIGJ1Y2tldHMgYXNzdW1lIHRoZSB4ODZfNjQgZGVmYXVsdCBr ZXJuZWwgYWRkcmVzcyBsYXlvdXQuIFVuZGVyDQogKiBDT05GSUdfUkFORE9NSVpFX01FTU9SWSB0 aGUgZGlyZWN0IG1hcCwgdm1hbGxvYyBhbmQgdm1lbW1hcCByZWdpb25zIGFyZSBzaGlmdGVkDQog KiBpbmRlcGVuZGVudGx5IGFuZCB0aGUgYnVja2V0IGxhYmVscyBzdG9wIGhvbGRpbmcg77+977+9 77+9IHZtZW1tYXAgdmFsdWVzIGNhbiBsYW5kIGluDQogKiB0aGUgdm1hbGxvYyB3aW5kb3cgYW5k IGJlIG1pc2xhYmVsbGVkLiBUaGUgcHJlZml4IGhpc3RvZ3JhbSBiZWxvdyBpcyBlbWl0dGVkDQog KiBhbnl3YXkgc28gdGhlIGJ1Y2tldHMgY2FuIGJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgZGF0YSBp bnN0ZWFkIG9mIGJlaW5nIHRha2VuDQogKiBvbiBmYWl0aC4gVGhlIGNsYXNzaWZpY2F0aW9uIGlz IGEgY29udmVuaWVuY2U7IHRoZSByYXcgYnl0ZXMgYXJlIHRoZSBldmlkZW5jZS4NCiAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ICovDQplbnVtIHsgQ19aRVJPLCBDX0tURVhULCBDX0tNT0QsIENfRE1BUCwg Q19WTUFMTE9DLCBDX1ZNRU1NQVAsIENfS09USEVSLA0KICAgICAgIENfTE9XLCBDX09USEVSLCBO Q0xTIH07DQpzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNsc19uYW1lW05DTFNdID0gew0KCSJ6 IiwgImt0IiwgImttIiwgImRtIiwgInZtIiwgInZtZSIsICJrbyIsICJsbyIsICJvdCINCn07DQoN CnN0YXRpYyBpbnQgY2xhc3NpZnlfd29yZCh1aW50NjRfdCB2KQ0Kew0KCWlmICghdikNCgkJcmV0 dXJuIENfWkVSTzsNCglpZiAodiA+PSAweGZmZmZmZmZmODAwMDAwMDB1bGwgJiYgdiA8IDB4ZmZm ZmZmZmZjMDAwMDAwMHVsbCkNCgkJcmV0dXJuIENfS1RFWFQ7CQkJLyoga2VybmVsIGltYWdlIHRl eHQvZGF0YSAqLw0KCWlmICh2ID49IDB4ZmZmZmZmZmZjMDAwMDAwMHVsbCAmJiB2IDwgMHhmZmZm ZmZmZmZlMDAwMDAwdWxsKQ0KCQlyZXR1cm4gQ19LTU9EOwkJCS8qIG1vZHVsZSBtYXBwaW5nICov DQoJaWYgKHYgPj0gMHhmZmZmODg4MDAwMDAwMDAwdWxsICYmIHYgPCAweGZmZmZjODgwMDAwMDAw MDB1bGwpDQoJCXJldHVybiBDX0RNQVA7CQkJLyogZGlyZWN0IG1hcCAoc2xhYi9wYWdlIGhlYXAp ICovDQoJaWYgKHYgPj0gMHhmZmZmYzkwMDAwMDAwMDAwdWxsICYmIHYgPCAweGZmZmZlOTAwMDAw MDAwMDB1bGwpDQoJCXJldHVybiBDX1ZNQUxMT0M7DQoJaWYgKHYgPj0gMHhmZmZmZWEwMDAwMDAw MDAwdWxsICYmIHYgPCAweGZmZmZlYjAwMDAwMDAwMDB1bGwpDQoJCXJldHVybiBDX1ZNRU1NQVA7 CQkvKiBzdHJ1Y3QgcGFnZSAqLw0KCWlmICgodiA+PiA0OCkgPT0gMHhmZmZmdWxsKQ0KCQlyZXR1 cm4gQ19LT1RIRVI7CQkvKiBzb21lIG90aGVyIGtlcm5lbC1oYWxmIGFkZHJlc3MgKi8NCglpZiAo diA8IDB4MDAwMTAwMDAwMDAwMDAwMHVsbCkNCgkJcmV0dXJuIENfTE9XOwkJCS8qIHNtYWxsIGlu dGVnZXIgLyB1c2VyLWhhbGYgKi8NCglyZXR1cm4gQ19PVEhFUjsNCn0NCg0Kc3RhdGljIGludCBp c19rZXJuZWxfY2xzKGludCBjKQ0Kew0KCXJldHVybiBjID49IENfS1RFWFQgJiYgYyA8PSBDX0tP VEhFUjsNCn0NCg0Kc3RhdGljIGludCBjb25uZWN0X3RvKGNvbnN0IGNoYXIgKmhvc3QsIGludCBw b3J0KQ0Kew0KCXN0cnVjdCBzb2NrYWRkcl9pbiBzYTsNCglpbnQgb25lID0gMTsNCglpbnQgcyA9 IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7DQoNCglpZiAocyA8IDApDQoJCXJldHVy biAtMTsNCglzZXRzb2Nrb3B0KHMsIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgJm9uZSwgc2l6 ZW9mKG9uZSkpOw0KCW1lbXNldCgmc2EsIDAsIHNpemVvZihzYSkpOw0KCXNhLnNpbl9mYW1pbHkg PSBBRl9JTkVUOw0KCXNhLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7DQoJaWYgKGluZXRfcHRvbihB Rl9JTkVULCBob3N0LCAmc2Euc2luX2FkZHIpICE9IDEpIHsNCgkJY2xvc2Uocyk7IGVycm5vID0g RUlOVkFMOyByZXR1cm4gLTE7DQoJfQ0KCWlmIChjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIg Kikmc2EsIHNpemVvZihzYSkpIDwgMCkgew0KCQljbG9zZShzKTsgcmV0dXJuIC0xOw0KCX0NCgly ZXR1cm4gczsNCn0NCg0KLyoNCiAqIEEgc2hvcnQgU01CMSByZXF1ZXN0Lg0KICogICBvZmYgMC4u MyAgIFByb3RvY29sICAgMHhGRiAnUycgJ00nICdCJyAgIChjb25uZWN0aW9uLmM6NTQ1IGtzbWJk X3NtYl9yZXF1ZXN0KQ0KICogICBvZmYgNCAgICAgIENvbW1hbmQgICAgMHgwMCAgLT4gc21iX2Nv bW1vbi5jOjE3MSAtRUlOVkFMLCBubyBjcmVkaXQgdGFrZW4NCiAqICAgb2ZmIDEyLi4xMyBQaWRI aWdoICAgID09IHN0cnVjdCBzbWIyX2hkci5Db21tYW5kIHdoZW4gcmVhZCBhcyBTTUIyLg0KICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBOT1QgYmUgMHgwMC8weDAxLzB4MGQgKHRo b3NlIGFyZSB0aGUNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tZnJlZSBv cGNvZGVzIGFuZCB3b3VsZCBjYXJyeSBvbiBpbnRvDQogKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3Byb2Nlc3NfcmVxdWVzdCkgYW5kIG11c3QgTk9UIGJlIDB4MTANCiAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChTTUIyX1FVRVJZX0lORk9fSEUgYmFpbHMgaW4gc21iMl9hbGxv Y2F0ZV9yc3BfYnVmDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCBzbWIycGR1LmM6 Njc2KSBub3IgMHgwYi8weDBlICh0aGV5IGZvcmNlIHRoZQ0KICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGFyZ2Uga3Z6YWxsb2MpLiAweDAwMDIgPSBTTUIyX0xPR09GRl9IRSBpcyBpZGVh bDoNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYjJfY2hlY2tfdXNlcl9zZXNzaW9u KCkgLT4gLUVJTyBpbW1lZGlhdGVseS4NCiAqICAgb2ZmIDIwLi4yMyA9PSBzdHJ1Y3Qgc21iMl9o ZHIuTmV4dENvbW1hbmQ6IGtlZXAgMCBzbyBzbWIyX2FsbG9jYXRlX3JzcF9idWYNCiAqICAgICAg ICAgICAgICAgIGRvZXMgbm90IHRha2UgdGhlIGxhcmdlX3N6IGJyYW5jaCAoc21iMnBkdS5jOjY4 OSkuDQogKiAgIG9mZiAyNC4uMzEgPT0gc3RydWN0IHNtYjJfaGRyLk1lc3NhZ2VJZDogb3VyIHBl ci1QRFUgdGFnLCBlY2hvZWQgYmFjayBieQ0KICogICAgICAgICAgICAgICAgaW5pdF9zbWIyX3Jz cF9oZHIgKHNtYjJwZHUuYzo2NDcpIHNvIHdlIGNhbiBtYXRjaCByZXBsaWVzLg0KICogVG90YWwg bGVuZ3RoIGlzIC1TOyBjb25uZWN0aW9uLmM6NTA2IHJlamVjdHMgPCAzNS4NCiAqLw0Kc3RhdGlj IGludCBidWlsZF9zbWIxX3Nob3J0KHVpbnQ4X3QgKnAsIHVpbnQzMl90IHRvdGFsLCB1aW50MTZf dCBwaWRoaWdoLA0KCQkJICAgIHVpbnQ4X3QgY21kYnl0ZSwgdWludDMyX3QgdGFnLCB1aW50OF90 IGZpbGwpDQp7DQoJbWVtc2V0KHAsIDAsIHRvdGFsKTsNCgkvKiAtRjogcGFpbnQgZXZlcnl0aGlu ZyBmcm9tIFBEVSBvZmZzZXQgMzIgdXAgd2l0aCBhIG1hcmtlciBieXRlLiBGb3INCgkgKiAtUyA2 NCB0aGF0IGNvdmVycyBtc2cgb2Zmc2V0cyAzNi4uNjMgPT0gVHJlZUlkL1Nlc3Npb25JZC9TaWdu YXR1cmUsDQoJICogd2hpY2ggYXJlIHRoZW4gcmVhZCBmcm9tIElOU0lERSB0aGUgYWxsb2NhdGlv bjogYSByZXBseSBjYXJyeWluZyB0aGUNCgkgKiBtYXJrZXIgcHJvdmVzIHRoZSBwbHVtYmluZyBy ZXR1cm5zIHRob3NlIGZpZWxkcyB0byB0aGUgd2lyZS4gRm9yDQoJICogLVMgMzUgb25seSBvZmZz ZXRzIDMyLi4zNCBleGlzdCBhbmQgdGhlIHNhbWUgZmllbGRzIGFyZSBPT0IuICovDQoJaWYgKGZp bGwgJiYgdG90YWwgPiAzMikNCgkJbWVtc2V0KHAgKyAzMiwgZmlsbCwgdG90YWwgLSAzMik7DQoJ bWVtY3B5KHAsIFNNQjFfUFJPVE8sIDQpOw0KCXBbNF0gPSBjbWRieXRlOw0KCWlmICh0b3RhbCA+ IDEzKQ0KCQlwdXQxNihwICsgMTIsIHBpZGhpZ2gpOw0KCWlmICh0b3RhbCA+IDI3KQ0KCQlwdXQz MihwICsgMjQsIHRhZyk7DQoJcmV0dXJuIChpbnQpdG90YWw7DQp9DQoNCi8qDQogKiBNT0RFIDIg KCJudWxsIiwgdGhlIE5VTEwtZGVyZWZlcmVuY2Ugbm90ZSBpbiBzZWN0aW9uIDQpIO+/ve+/ve+/ vSBhIDY4LWJ5dGUgU01CMiByZXF1ZXN0IHdob3NlIENvbW1hbmQgaXMgTk9UIG9uZSBvZg0KICog dGhlIHRocmVlIHNlc3Npb24tZnJlZSBvcGNvZGVzIHswIE5FR09USUFURSwgMSBTRVNTSU9OX1NF VFVQLCAxMyBFQ0hPfS4gU3VjaCBhDQogKiB3b3JrIHJlYWNoZXMgZnMvc21iL3NlcnZlci9zZXJ2 ZXIuYzoyMDIgd2l0aCB0aGUgU01CMiBvcHMgdmVjdG9yIGFuZA0KICogc21iMl9jaGVja191c2Vy X3Nlc3Npb24oKSByZXR1cm5zIC1FSU8gYXQgZnMvc21iL3NlcnZlci9zbWIycGR1LmM6NzIzDQog KiAoIWtzbWJkX2Nvbm5fZ29vZCkuIENvbnRyb2wgdGhlbiBmYWxscyB0bw0KICoNCiAqICAgZnMv c21iL3NlcnZlci9zZXJ2ZXIuYzoyMTANCiAqICAgICAgIGlmIChjb25uLT5vcHMtPmlzX3NpZ25f cmVxKHdvcmssIGNvbm4tPm9wcy0+Z2V0X2NtZF92YWwod29yaykpKSB7DQogKg0KICogd2hpY2gg aXMgdGhlIE9OTFkgdW5ndWFyZGVkIC0+aXNfc2lnbl9yZXEgZGVyZWYgaW4gdGhlIGZpbGUgKHNl cnZlci5jOjE0MiBkb2VzDQogKiBjaGVjayBpdCkuIHNtYjFfc2VydmVyX29wcyAoZnMvc21iL3Nl cnZlci9zbWJfY29tbW9uLmM6Mzk4LTQwNCkgZGVmaW5lcyBleGFjdGx5DQogKiBmaXZlIG1lbWJl cnMgYW5kIC5pc19zaWduX3JlcSBpcyBOT1Qgb25lIG9mIHRoZW0sIHNvIGlmIHRoZSBjb25uZWN0 aW9uIHRocmVhZA0KICogc3RvcmVzIGNvbm4tPm9wcyA9ICZzbWIxX3NlcnZlcl9vcHMgKHNtYl9j b21tb24uYzo0MjIpIGJldHdlZW4gdGhlIGNhbGwgYXQNCiAqIHNlcnZlci5jOjIwMiBhbmQgdGhl IGxvYWQgYXQgc2VydmVyLmM6MjEwLCB0aGUga3dvcmtlciBjYWxscyBOVUxMLg0KICogQWRkZWQg YnkgOWU4YWQ2MjBkZGZkZSAoMjAyNi0wNy0wMik7IHRoZSBwcmUtaW1hZ2UgaGFkIGEgYmFyZSAi Z290byBzZW5kOyIuDQogKi8NCnN0YXRpYyBpbnQgYnVpbGRfc21iMl9jbWQodWludDhfdCAqcCwg dWludDE2X3QgY21kLCB1aW50MTZfdCBjcmVkaXRfcmVxdWVzdCwNCgkJCSAgdWludDY0X3QgbXNn aWQpDQp7DQoJbWVtc2V0KHAsIDAsIFNNQjJfSERSX1NJWkUgKyA0KTsNCgltZW1jcHkocCwgU01C Ml9QUk9UTywgNCk7DQoJcHV0MTYocCArIDQsIFNNQjJfSERSX1NJWkUpOw0KCXB1dDE2KHAgKyAx MiwgY21kKTsNCglwdXQxNihwICsgMTQsIGNyZWRpdF9yZXF1ZXN0KTsNCglwdXQzMihwICsgMjQs ICh1aW50MzJfdCltc2dpZCk7DQoJcHV0MTYocCArIFNNQjJfSERSX1NJWkUsIDQpOw0KCXJldHVy biBTTUIyX0hEUl9TSVpFICsgNDsNCn0NCg0KLyogNjgtYnl0ZSBTTUIyIEVDSE86IGxlZ2FsLCA+ PSBTTUIyX01JTl9TVVBQT1JURURfUERVX1NJWkUoNjYpLCBkaXNwYXRjaGVkIHdpdGgNCiAqIG5v IHNlc3Npb24gKHNtYjJwZHUuYzo3MTQtNzE5KS4gSXRzIG9ubHkgam9iIGlzIHRvIG1ha2UgdGhl IGNvbm5lY3Rpb24gdGhyZWFkDQogKiBydW4gaW5pdF9zbWIzXzExX3NlcnZlcigpIGFuZCBmbGlw IGNvbm4tPm9wcy4gKi8NCnN0YXRpYyBpbnQgYnVpbGRfZWNobyh1aW50OF90ICpwLCB1aW50MTZf dCBjcmVkaXRfcmVxdWVzdCwgdWludDY0X3QgbXNnaWQpDQp7DQoJbWVtc2V0KHAsIDAsIFNNQjJf SERSX1NJWkUgKyA0KTsNCgltZW1jcHkocCwgU01CMl9QUk9UTywgNCk7DQoJcHV0MTYocCArIDQs IFNNQjJfSERSX1NJWkUpOw0KCXB1dDE2KHAgKyAxNCwgY3JlZGl0X3JlcXVlc3QpOyAgICAgICAg ICAvKiBDcmVkaXRSZXF1ZXN0ICovDQoJcHV0MTYocCArIDEyLCBTTUIyX0VDSE8pOw0KCXB1dDMy KHAgKyAyNCwgKHVpbnQzMl90KW1zZ2lkKTsNCglwdXQxNihwICsgU01CMl9IRFJfU0laRSwgNCk7 ICAgICAgICAgICAgLyogU3RydWN0dXJlU2l6ZSAqLw0KCXJldHVybiBTTUIyX0hEUl9TSVpFICsg NDsNCn0NCg0Kc3RhdGljIHNpemVfdCBmcmFtZSh1aW50OF90ICpvdXQsIGNvbnN0IHVpbnQ4X3Qg KnBkdSwgdWludDMyX3QgbGVuKQ0Kew0KCW91dFswXSA9IDA7DQoJb3V0WzFdID0gKGxlbiA+PiAx NikgJiAweGZmOw0KCW91dFsyXSA9IChsZW4gPj4gOCkgJiAweGZmOw0KCW91dFszXSA9IGxlbiAm IDB4ZmY7DQoJbWVtY3B5KG91dCArIDQsIHBkdSwgbGVuKTsNCglyZXR1cm4gbGVuICsgNDsNCn0N Cg0KLyoNCiAqIFBIQVNFIFRBRyBhbmQgUEFJTlQgTUFSS0VSIChydW5uZXIsIEFSTSBBIHN0ZXAg MykuDQogKg0KICogVGhlIGJ5dGVzIGluaXRfc21iMl9yc3BfaGRyKCkgcmVhZHMgYXQgcmVxdWVz dC1idWZmZXIgaW5kaWNlcyA0MC4uNjcgYXJlLA0KICogZm9yIGEgNDAtYnl0ZSBhbGxvY2F0aW9u IG91dCBvZiBrbWFsbG9jLTY0LCAoYSkgaW5kaWNlcyA0MC4uNjMgPSB0aGUgdW51c2VkDQogKiB0 YWlsIG9mIHRoZSBvYmplY3QncyBvd24gNjQtYnl0ZSBzbG90IGFuZCAoYikgaW5kaWNlcyA2NC4u NjcgPSBwYXN0IHRoZSBzbG90Lg0KICogTm90aGluZyBpbiB0aGlzIHByb2dyYW0ncyBvd24gdHJh ZmZpYyBldmVyIHdyaXRlcyAoYSksIHNvIGEgcnVuIHRoYXQgc2VuZHMgb25seQ0KICogMzUtYnl0 ZSBQRFVzIGRpc2Nsb3NlcyB6ZXJvZXMgYW5kIHByb3ZlcyBub3RoaW5nIGFib3V0ICp3aG9zZSog bWVtb3J5IGl0IGlzLg0KICoNCiAqIFBoYXNlIFAzIHRoZXJlZm9yZSBwYWludHMga21hbGxvYy02 NCBmaXJzdC4gQSBwYWludGVyIGNvbm5lY3Rpb24gc2VuZHMgU01CMQ0KICogUERVcyBvZiBsZW5n dGggNTk6IGNvbm5lY3Rpb24uYzo1MTEgbWFrZXMgdGhhdCBhIDU5KzQrMSA9IDY0IGJ5dGUga3Zt YWxsb2MsDQogKiBpLmUuIGEgd2hvbGUga21hbGxvYy02NCBzbG90LCBhbmQgdGhlIGtlcm5lbCBj b3BpZXMgdGhlIHBhaW50ZXIncyA2MyBieXRlcw0KICogaW50byBpdC4gZ2V0X3NtYjFfY21kX3Zh bCgpIChzbWJfY29tbW9uLmM6MzI1KSBhbHdheXMgcmV0dXJucw0KICogU01CX0NPTV9ORUdPVElB VEVfRVggc28gc21iMV9jaGVja191c2VyX3Nlc3Npb24oKSByZXR1cm5zIDAsIF9fcHJvY2Vzc19y ZXF1ZXN0DQogKiB0aGVuIGZhaWxzIGtzbWJkX3ZlcmlmeV9zbWJfbWVzc2FnZSgpIGFuZCBzZXRf c21iMV9yc3Bfc3RhdHVzKCkgc2V0cw0KICogc2VuZF9ub19yZXNwb25zZTogdGhlIHBhaW50ZXIg Z2V0cyBubyByZXBseSBhbmQgdGhlIHNsb3QgaXMgZnJlZWQgc3RpbGwNCiAqIGhvbGRpbmcgaXRz IGJ5dGVzLiBBIGxlYWtlcidzIGxhdGVyIDQwLWJ5dGUgcmVxdWVzdCBidWZmZXIgY2FuIGxhbmQg dGhlcmUuDQogKg0KICogQSBsZWFrZWQgd2luZG93IGNvbnRhaW5pbmcgTUFSSyBpcyB0aGVuIG1l bW9yeSB0aGUgbGVha2luZyBjb25uZWN0aW9uIG5ldmVyDQogKiBvd25lZCDvv73vv73vv70gaXQg YmVsb25nZWQgdG8gYSBkaWZmZXJlbnQgY29ubmVjdGlvbiwgb24gYSBkaWZmZXJlbnQgc29ja2V0 Lg0KICovDQpzdGF0aWMgY29uc3QgdWludDhfdCBNQVJLWzRdID0geyAweGNhLCAweGZlLCAweGJh LCAweGJlIH07DQpzdGF0aWMgY29uc3QgY2hhciAqZ190YWcgPSAiUDAiOw0Kc3RhdGljIGludCBn X2NpOw0KDQovKg0KICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAqIEFSTSBCIChydW5uZXIsIDIwMjYt MDgtMTkpIO+/ve+/ve+/vSBTRUxGLURFU0NSSUJJTkcgUEFJTlQuDQogKg0KICogVGhlIHN0YXRp YyBjaGFpbiBwcmVkaWN0cyBhbiBFWEFDVCBtYXBwaW5nOiBpbml0X3NtYjJfcnNwX2hkcigpIGNv cGllcw0KICogcmVxdWVzdC1idWZmZXIgaW5kZXggaSB0byByZXNwb25zZSBpbmRleCBpLCBmb3Ig aSBpbiA0MC4uNjcsIHdpdGggbm8gc2hpZnQuDQogKiBNQVJLICg0IGlkZW50aWNhbCByZXBlYXRp bmcgYnl0ZXMpIGNhbm5vdCBkaXN0aW5ndWlzaCBpbmRleCBpIGZyb20gaW5kZXgNCiAqIGkrLTQs IHNvIGl0IGNhbm5vdCB0ZXN0IHRoZSBtYXBwaW5nIO+/ve+/ve+/vSBpdCBvbmx5IHRlc3RzIG93 bmVyc2hpcC4NCiAqDQogKiBCSUQgcGFpbnQgdGhlcmVmb3JlIHdyaXRlcywgYXQgcmVxdWVzdC1i dWZmZXIgaW5kZXggaSwgVEhFIFZBTFVFIGkuDQogKiBBIHBhaW50ZXIgUERVIG9mIFJGQzEwMDIg bGVuZ3RoIDU5IGFsbG9jYXRlcyA1OSs0KzEgPT0gNjQgPT0gZXhhY3RseSBvbmUNCiAqIGttYWxs b2MtNjQgc2xvdCAoY29ubmVjdGlvbi5jOjUxMS01MTIpIGFuZCB0aGUga2VybmVsIGNvcGllcyB0 aGUgcGFpbnRlcidzDQogKiA1OSBQRFUgYnl0ZXMgaW50byBidWZmZXIgaW5kaWNlcyA0Li42Mi4g QnVmZmVyIDAuLjMgaXMgdGhlIFJGQzEwMDIgbGVuZ3RoDQogKiB0aGUga2VybmVsIG1lbWNweSgp cyBpbiBpdHNlbGYgYW5kIDQuLjcgbXVzdCBzdGF5IDB4RkYgJ1MnICdNJyAnQicgZm9yDQogKiBr c21iZF9zbWJfcmVxdWVzdCgpIChzbWJfY29tbW9uLmM6MTgwKSB0byBhY2NlcHQgdGhlIGZyYW1l LCBzbyB0aGUgcGFpbnRlcg0KICogY2FuIGF1dGhvciBidWZmZXIgOC4uNjIuIEJ1ZmZlciA2MyBp cyB0aGUgIisxIGZvciBpbXBsaWVkIGJjY1swXSIgc3BhcmUgYW5kDQogKiBOTyBwYWludGVyIGNh biBhdXRob3IgaXQg77+977+977+9IGt2bWFsbG9jIGRvZXMgbm90IHplcm8gYW5kIG5vdGhpbmcg d3JpdGVzIHRoZXJlLg0KICoNCiAqIEEgbGVha2VyIHRoZW4gYWxsb2NhdGVzIDM1KzQrMSA9PSA0 MCBieXRlcyBvdXQgb2YgdGhlIHNhbWUga21hbGxvYy02NCBzbG90Lg0KICogSWYgdGhlIG1hcHBp bmcgaXMgYnVmZmVyW2ldIC0+IHJlcGx5W2ldIHdpdGggbm8gc2hpZnQsIHJlcGx5IGluZGV4IGkg bXVzdA0KICogZXF1YWwgaSBmb3IgaSBpbiA0MC4uNjIuDQogKg0KICogQ291bnRlZCBwZXIgaW5k ZXg6IGV4YWN0IChyZXBseVtpXT09aSksIGFuZCB0aGUgdHdvIG5laWdoYm91cmluZyBzaGlmdHMN CiAqIChyZXBseVtpXT09aS0xLCByZXBseVtpXT09aSsxKSBzbyBhbiBvZmYtYnktb25lIHNob3dz IHVwIGFzIGEgZGlzcGxhY2VkDQogKiBwZWFrIGluc3RlYWQgb2YgYXMgYSBzaWxlbnQgemVyby4N CiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQogKi8NCiNkZWZpbmUgQklEX0xPICA0MA0KI2RlZmluZSBC SURfSEkgIDY3DQojZGVmaW5lIEJJRF9OICAgKEJJRF9ISSAtIEJJRF9MTyArIDEpDQpzdGF0aWMg aW50IGdfYmlkOwkJCS8qIDEgPSBwcmludCB0aGUgQklEIGhpc3RvZ3JhbSAqLw0KDQpzdHJ1Y3Qg cmJ1Y2tldCB7DQoJdWludDMyX3Qgc3RhdHVzOw0KCXVpbnQzMl90IHBsZW47DQoJdWludDhfdCAg cHJvdG9bNF07DQoJdW5zaWduZWQgbG9uZyBuOw0KCXVuc2lnbmVkIGxvbmcgbno7CS8qIHJlcGxp ZXMgb2YgdGhpcyBzaGFwZSB3aXRoIGEgbm9uLXplcm8gYnl0ZSBpbiA0MC4uNjMgKi8NCn07DQoN CiNkZWZpbmUgTkJVQ0sgMTYNCg0Kc3RydWN0IHN0YXRzIHsNCgl1bnNpZ25lZCBsb25nIHNlbnRf c21iMSwgcmVwbGllcywgbGVha3MsIG5vbnplcm9fbGVhazsNCgl1bnNpZ25lZCBsb25nIHNob3J0 X3JlcGx5OwkvKiBmcmFtZSBzaG9ydGVyIHRoYW4gYW4gU01CMiBoZWFkZXIgKi8NCgl1bnNpZ25l ZCBsb25nIG1hcmtlcjsJCS8qIGxlYWtlZCB3aW5kb3cgY29udGFpbmVkIE1BUksgKi8NCgl1bnNp Z25lZCBsb25nIGJ1Y2tldF9vdmVyZmxvdzsNCgl1bnNpZ25lZCBpbnQgIG5idWNrLCBuc2FtcDsN CglzdHJ1Y3QgcmJ1Y2tldCBidWNrW05CVUNLXTsNCg0KCS8qIC0tLS0gY29udGVudCBjbGFzc2lm aWNhdGlvbiBvZiB0aGUgbGVha2VkIHdpbmRvdyAtLS0tICovDQoJdW5zaWduZWQgbG9uZyBjX3Jl cDsJCS8qIHdpbmRvd3MgY2xhc3NpZmllZCAqLw0KCXVuc2lnbmVkIGxvbmcgY19hbGx6ZXJvOwkv KiBhbGwgMjggYnl0ZXMgemVybyAqLw0KCXVuc2lnbmVkIGxvbmcgY19hbnlwdHI7CQkvKiA+PTEg YWxpZ25lZCB3b3JkIGlzIGEga2VybmVsIGFkZHJlc3MgKi8NCgl1bnNpZ25lZCBsb25nIGNfa3Rl eHQ7CQkvKiA+PTEgYWxpZ25lZCB3b3JkIGluIGtlcm5lbCB0ZXh0IHJhbmdlICovDQoJdW5zaWdu ZWQgbG9uZyBjX2FzY2lpOwkJLyogPj00IHByaW50YWJsZSBieXRlcyBpbiBhIHJvdyAqLw0KCXVu c2lnbmVkIGxvbmcgY191cHRyOwkJLyoga2VybmVsIGFkZHJlc3MgZm91bmQgT05MWSB1bmFsaWdu ZWQgKi8NCgl1bnNpZ25lZCBsb25nIGNfc2FtZXByZXY7CS8qIHdpbmRvdyBpZGVudGljYWwgdG8g dGhlIHByZXZpb3VzIG9uZSAqLw0KCXVuc2lnbmVkIGxvbmcgY190YWlsNG56OwkvKiBidWZmZXIg NjQuLjY3IChuZXh0IG9iamVjdCkgbm9uLXplcm8gKi8NCgl1bnNpZ25lZCBsb25nIHdjbHNbM11b TkNMU107DQoJdWludDY0X3QgICAgICBjc2FtcFtOQ0xTXTsJLyogZmlyc3QgdmFsdWUgc2VlbiBw ZXIgY2xhc3MgKi8NCgl1bnNpZ25lZCBpbnQgIG5rdDsJCS8qIGRpc3RpbmN0IGtlcm5lbC1JTUFH RSB2YWx1ZXMga2VwdCAqLw0KCXVuc2lnbmVkIGxvbmcga3Rfb3ZmOw0KCXN0cnVjdCB7IHVpbnQ2 NF90IHY7IHVuc2lnbmVkIGxvbmcgbjsgfSBrdFsxNl07DQoJdWludDY0X3QgICAgICBwcmV2X2g7 DQoJaW50ICAgICAgICAgICBoYXZlX3ByZXY7DQoJdW5zaWduZWQgaW50ICBuaGFzaDsNCgl1bnNp Z25lZCBsb25nIGhhc2hfb3ZmOw0KCXN0cnVjdCB7IHVpbnQ2NF90IGg7IHVuc2lnbmVkIGxvbmcg bjsgfSBodGFiWzUxMl07DQoJdW5zaWduZWQgaW50ICBucGZ4Ow0KCXVuc2lnbmVkIGxvbmcgcGZ4 X292ZjsNCglzdHJ1Y3QgeyB1aW50MzJfdCBwOyB1bnNpZ25lZCBsb25nIG47IH0gcGZ4WzIwXTsJ LyogdG9wIDI0IGJpdHMgb2YgdiAqLw0KDQoJLyogLS0tLSBBUk0gQjogcGVyLWluZGV4IHNlbGYt ZGVzY3JpYmluZy1wYWludCBtYXRjaCBoaXN0b2dyYW0gLS0tLSAqLw0KCXVuc2lnbmVkIGxvbmcg YmlkX3JlcDsJCQkvKiB3aW5kb3dzIGV4YW1pbmVkICovDQoJdW5zaWduZWQgbG9uZyBiaWRfbVtC SURfTl07CQkvKiByZXBseVtpXSA9PSBpICAgICAgICAgICovDQoJdW5zaWduZWQgbG9uZyBiaWRf bW0xW0JJRF9OXTsJCS8qIHJlcGx5W2ldID09IGktMSAoc2hpZnQpICovDQoJdW5zaWduZWQgbG9u ZyBiaWRfbXAxW0JJRF9OXTsJCS8qIHJlcGx5W2ldID09IGkrMSAoc2hpZnQpICovDQoJdW5zaWdu ZWQgbG9uZyBiaWRfZnVsbDsJCQkvKiBBTEwgb2YgNDAuLjYyIG1hdGNoZWQgICovDQoJdW5zaWdu ZWQgbG9uZyBiaWRfYW55OwkJCS8qID49MSBvZiA0MC4uNjIgbWF0Y2hlZCAgKi8NCgl1bnNpZ25l ZCBsb25nIGJpZF90YWlscGFpbnQ7CQkvKiA+PTEgb2YgNjQuLjY3IG1hdGNoZWQgICovDQp9Ow0K DQovKg0KICogRElBR05PU1RJQyBBRERJVElPTiAyMDI2LTA4LTE5IChydW5uZXIsIEFSTSBBIHN0 ZXAgMSkuDQogKg0KICogUm91bmQgMSBvZiB0aGlzIGhhcm5lc3Mgc2NvcmVkIGEgcmVwbHkgYXMg YSBsZWFrIG9ubHkgaWYNCiAqICAgICBtZW1jbXAobSwgIlx4ZmVTTUIiLCA0KSA9PSAwICYmIGdl dDMyKG0gKyA4KSA9PSBTVEFUVVNfVVNFUl9TRVNTSU9OX0RFTEVURUQNCiAqIGFuZCByZXBvcnRl ZCBMRUFLUz0wIHdoaWxlIEtBU0FOIGZpcmVkIDE5Mjg4IHRpbWVzLiAgVGhlIHByb3RvY29sIHRl c3QgaXMgdGhlDQogKiBzdXNwZWN0OiBpbml0X3NtYjJfcnNwX2hkcigpIChmcy9zbWIvc2VydmVy L3NtYjJwZHUuYzo2MzgpIGNvcGllcw0KICogICAgIHJzcF9oZHItPlByb3RvY29sSWQgPSByY3Zf aGRyLT5Qcm90b2NvbElkOw0KICogaS5lLiB0aGUgcmVzcG9uc2UgaW5oZXJpdHMgdGhlICpyZXF1 ZXN0J3MqIG1hZ2ljLCB3aGljaCBmb3IgYSBjb25mdXNlZCBTTUIxDQogKiB3b3JrIGlzIDB4RkYg J1MnICdNJyAnQicuICBTbyB0aGlzIGZ1bmN0aW9uIG5vIGxvbmdlciBkZWNpZGVzIGFueXRoaW5n IGZyb20NCiAqIHRoZSBtYWdpYzogaXQgYmlucyBFVkVSWSByZXBseSBieSAocHJvdG8sIHJmYzEw MDIgbGVuZ3RoLCBTdGF0dXMpIGFuZCBwcmludHMNCiAqIHRoZSBiaW5zLiAgSW50ZXJwcmV0YXRp b24gaGFwcGVucyBhZnRlcndhcmRzLCBvbiB0aGUgbnVtYmVycy4NCiAqLw0Kc3RhdGljIHZvaWQg YnVtcChzdHJ1Y3Qgc3RhdHMgKnN0LCBjb25zdCB1aW50OF90ICptLCB1aW50MzJfdCBwbGVuLCBp bnQgbnopDQp7DQoJdWludDMyX3Qgc3RhdHVzID0gcGxlbiA+PSAxMiA/IGdldDMyKG0gKyA4KSA6 IDB4ZmZmZmZmZmZ1Ow0KCXVuc2lnbmVkIGludCBpOw0KDQoJZm9yIChpID0gMDsgaSA8IHN0LT5u YnVjazsgaSsrKSB7DQoJCWlmIChzdC0+YnVja1tpXS5zdGF0dXMgPT0gc3RhdHVzICYmIHN0LT5i dWNrW2ldLnBsZW4gPT0gcGxlbiAmJg0KCQkgICAgIW1lbWNtcChzdC0+YnVja1tpXS5wcm90bywg bSwgNCkpIHsNCgkJCXN0LT5idWNrW2ldLm4rKzsNCgkJCXN0LT5idWNrW2ldLm56ICs9ICh1bnNp Z25lZCluejsNCgkJCXJldHVybjsNCgkJfQ0KCX0NCglpZiAoc3QtPm5idWNrID09IE5CVUNLKSB7 DQoJCXN0LT5idWNrZXRfb3ZlcmZsb3crKzsNCgkJcmV0dXJuOw0KCX0NCglpID0gc3QtPm5idWNr Kys7DQoJc3QtPmJ1Y2tbaV0uc3RhdHVzID0gc3RhdHVzOw0KCXN0LT5idWNrW2ldLnBsZW4gPSBw bGVuOw0KCW1lbWNweShzdC0+YnVja1tpXS5wcm90bywgbSwgNCk7DQoJc3QtPmJ1Y2tbaV0ubiA9 IDE7DQoJc3QtPmJ1Y2tbaV0ubnogPSAodW5zaWduZWQpbno7DQp9DQoNCi8qDQogKiBjbGFzc2lm eSgpIO+/ve+/ve+/vSBjYWxsZWQgZm9yIGV2ZXJ5IFNNQjIgZXJyb3IgcmVwbHkgd2hvc2UgZnJh bWUgaXMgYXQgbGVhc3QNCiAqIGEgZnVsbCA2NC1ieXRlIGhlYWRlciwgaS5lLiBldmVyeSByZXBs eSB0aGF0IGNhcnJpZXMgdGhlIHdpbmRvdy4gRXZlcnl0aGluZyBpcw0KICogY291bnRlZCBJTiBQ Uk9DRVNTIGFuZCBwcmludGVkIG9uY2UgcGVyIGNoaWxkLCBiZWNhdXNlIHRoZSBndWVzdCBjb25z b2xlDQogKiBpbnRlcmxlYXZlcyBoYXJuZXNzIHN0ZG91dCB3aXRoIGtlcm5lbCBvdXRwdXQgY2hh cmFjdGVyIGJ5IGNoYXJhY3RlciBhbmQgbG9uZw0KICogcGVyLXNhbXBsZSBsaW5lcyBkbyBub3Qg c3Vydml2ZS4NCiAqLw0Kc3RhdGljIHZvaWQgY2xhc3NpZnkoc3RydWN0IHN0YXRzICpzdCwgY29u c3QgdWludDhfdCAqbSkNCnsNCgljb25zdCB1aW50OF90ICp3ID0gbSArIDM2OwkJLyogYnVmZmVy IGluZGV4IDQwICovDQoJdWludDY0X3QgdlszXSwgaCA9IDE0Njk1OTgxMDM5MzQ2NjU2MDN1bGw7 DQoJaW50IGksIGssIGFueWsgPSAwLCBrdCA9IDAsIHJ1biA9IDAsIGFzY2lpID0gMCwgYWxpZ25l ZF9rID0gMCwgdW5hbF9rID0gMDsNCgl1bnNpZ25lZCBpbnQgYjsNCg0KCXN0LT5jX3JlcCsrOw0K DQoJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgew0KCQl2W2ldID0gZ2V0NjQodyArIDggKiBpKTsN CgkJayA9IGNsYXNzaWZ5X3dvcmQodltpXSk7DQoJCXN0LT53Y2xzW2ldW2tdKys7DQoJCWlmICgh c3QtPmNzYW1wW2tdKQ0KCQkJc3QtPmNzYW1wW2tdID0gdltpXTsNCgkJaWYgKGlzX2tlcm5lbF9j bHMoaykpIHsNCgkJCWFueWsgPSAxOw0KCQkJYWxpZ25lZF9rID0gMTsNCgkJCWlmIChrID09IENf S1RFWFQpIHsNCgkJCQlrdCA9IDE7DQoJCQkJZm9yIChiID0gMDsgYiA8IHN0LT5ua3Q7IGIrKykN CgkJCQkJaWYgKHN0LT5rdFtiXS52ID09IHZbaV0pDQoJCQkJCQlicmVhazsNCgkJCQlpZiAoYiA8 IHN0LT5ua3QpDQoJCQkJCXN0LT5rdFtiXS5uKys7DQoJCQkJZWxzZSBpZiAoc3QtPm5rdCA8IDE2 KSB7DQoJCQkJCXN0LT5rdFtzdC0+bmt0XS52ID0gdltpXTsNCgkJCQkJc3QtPmt0W3N0LT5ua3Rd Lm4gPSAxOw0KCQkJCQlzdC0+bmt0Kys7DQoJCQkJfSBlbHNlIHsNCgkJCQkJc3QtPmt0X292Zisr Ow0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlpZiAodltpXSkgew0KCQkJdWludDMyX3QgcGsgPSAodWlu dDMyX3QpKHZbaV0gPj4gNDApOw0KDQoJCQlmb3IgKGIgPSAwOyBiIDwgc3QtPm5wZng7IGIrKykN CgkJCQlpZiAoc3QtPnBmeFtiXS5wID09IHBrKSB7DQoJCQkJCXN0LT5wZnhbYl0ubisrOw0KCQkJ CQlicmVhazsNCgkJCQl9DQoJCQlpZiAoYiA9PSBzdC0+bnBmeCkgew0KCQkJCWlmIChzdC0+bnBm eCA8IDIwKSB7DQoJCQkJCXN0LT5wZnhbc3QtPm5wZnhdLnAgPSBwazsNCgkJCQkJc3QtPnBmeFtz dC0+bnBmeF0ubiA9IDE7DQoJCQkJCXN0LT5ucGZ4Kys7DQoJCQkJfSBlbHNlIHsNCgkJCQkJc3Qt PnBmeF9vdmYrKzsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKiB1bmFsaWduZWQgc3dlZXA6 IGEga2VybmVsIGFkZHJlc3MgYXQgYW4gb2Zmc2V0IHRoZSBvYmplY3QgbGF5b3V0IHdvdWxkDQoJ ICogbm90IG5vcm1hbGx5IHB1dCBvbmUgYXQuIE9ubHkgY291bnRlZCB3aGVuIE5PIGFsaWduZWQg d29yZCBoYWQgb25lLiAqLw0KCWZvciAoaSA9IDE7IGkgPD0gMjA7IGkrKykgew0KCQlpZiAoaSAl IDggPT0gMCkNCgkJCWNvbnRpbnVlOw0KCQlpZiAoaXNfa2VybmVsX2NscyhjbGFzc2lmeV93b3Jk KGdldDY0KHcgKyBpKSkpKQ0KCQkJdW5hbF9rID0gMTsNCgl9DQoNCglpZiAoYW55aykNCgkJc3Qt PmNfYW55cHRyKys7DQoJaWYgKGt0KQ0KCQlzdC0+Y19rdGV4dCsrOw0KCWlmICghYWxpZ25lZF9r ICYmIHVuYWxfaykNCgkJc3QtPmNfdXB0cisrOw0KDQoJLyogZnVsbCAyOC1ieXRlIHdpbmRvdzog YWxsLXplcm8sIGFzY2lpIHJ1biwgdGFpbCwgaGFzaCAqLw0KCXsNCgkJaW50IGFsbHogPSAxOw0K DQoJCWZvciAoaSA9IDA7IGkgPCAyODsgaSsrKSB7DQoJCQlpZiAod1tpXSkNCgkJCQlhbGx6ID0g MDsNCgkJCWlmICh3W2ldID49IDB4MjAgJiYgd1tpXSA8PSAweDdlKSB7DQoJCQkJaWYgKCsrcnVu ID49IDQpDQoJCQkJCWFzY2lpID0gMTsNCgkJCX0gZWxzZSB7DQoJCQkJcnVuID0gMDsNCgkJCX0N CgkJCWggPSAoaCBeIHdbaV0pICogMTA5OTUxMTYyODIxMXVsbDsNCgkJfQ0KCQlpZiAoYWxseikN CgkJCXN0LT5jX2FsbHplcm8rKzsNCgkJaWYgKGFzY2lpKQ0KCQkJc3QtPmNfYXNjaWkrKzsNCgl9 DQoJaWYgKGdldDMyKG0gKyA2MCkpCQkJLyogYnVmZmVyIDY0Li42NyA9PSBuZXh0IG9iamVjdCAq Lw0KCQlzdC0+Y190YWlsNG56Kys7DQoNCglpZiAoc3QtPmhhdmVfcHJldiAmJiBzdC0+cHJldl9o ID09IGgpDQoJCXN0LT5jX3NhbWVwcmV2Kys7DQoJc3QtPnByZXZfaCA9IGg7DQoJc3QtPmhhdmVf cHJldiA9IDE7DQoNCglmb3IgKGIgPSAwOyBiIDwgc3QtPm5oYXNoOyBiKyspDQoJCWlmIChzdC0+ aHRhYltiXS5oID09IGgpIHsNCgkJCXN0LT5odGFiW2JdLm4rKzsNCgkJCXJldHVybjsNCgkJfQ0K CWlmIChzdC0+bmhhc2ggPCA1MTIpIHsNCgkJc3QtPmh0YWJbc3QtPm5oYXNoXS5oID0gaDsNCgkJ c3QtPmh0YWJbc3QtPm5oYXNoXS5uID0gMTsNCgkJc3QtPm5oYXNoKys7DQoJfSBlbHNlIHsNCgkJ c3QtPmhhc2hfb3ZmKys7DQoJfQ0KfQ0KDQovKg0KICogYmlkX3Njb3JlKCkg77+977+977+9IEFS TSBCLiBtIHBvaW50cyBhdCB0aGUgU01CMiByZXNwb25zZSBoZWFkZXIsIGkuZS4gcmVwbHkgaW5k ZXggNA0KICogPT0gYnVmZmVyIGluZGV4IDQsIHNvIGJ1ZmZlciBpbmRleCBpIGlzIG1baSAtIDRd LiBDYWxsZWQgZm9yIGV2ZXJ5IHJlcGx5IHRoYXQNCiAqIGNhcnJpZXMgYSBmdWxsIDY0LWJ5dGUg aGVhZGVyLg0KICovDQpzdGF0aWMgdm9pZCBiaWRfc2NvcmUoc3RydWN0IHN0YXRzICpzdCwgY29u c3QgdWludDhfdCAqbSkNCnsNCglpbnQgaSwgYW55ID0gMCwgYWxsID0gMSwgdGFpbCA9IDA7DQoN CglzdC0+YmlkX3JlcCsrOw0KCWZvciAoaSA9IEJJRF9MTzsgaSA8PSBCSURfSEk7IGkrKykgew0K CQl1aW50OF90IGdvdCA9IG1baSAtIDRdOw0KDQoJCWlmIChnb3QgPT0gKHVpbnQ4X3QpaSkgew0K CQkJc3QtPmJpZF9tW2kgLSBCSURfTE9dKys7DQoJCQlpZiAoaSA8PSA2MikNCgkJCQlhbnkgPSAx Ow0KCQkJaWYgKGkgPj0gNjQpDQoJCQkJdGFpbCA9IDE7DQoJCX0gZWxzZSBpZiAoaSA8PSA2Mikg ew0KCQkJYWxsID0gMDsNCgkJfQ0KCQlpZiAoZ290ID09ICh1aW50OF90KShpIC0gMSkpDQoJCQlz dC0+YmlkX21tMVtpIC0gQklEX0xPXSsrOw0KCQlpZiAoZ290ID09ICh1aW50OF90KShpICsgMSkp DQoJCQlzdC0+YmlkX21wMVtpIC0gQklEX0xPXSsrOw0KCX0NCglpZiAoYW55KQ0KCQlzdC0+Ymlk X2FueSsrOw0KCWlmIChhbGwpDQoJCXN0LT5iaWRfZnVsbCsrOw0KCWlmICh0YWlsKQ0KCQlzdC0+ YmlkX3RhaWxwYWludCsrOw0KfQ0KDQpzdGF0aWMgdm9pZCBkcmFpbl9hbmRfc2NvcmUoaW50IHMs IHN0cnVjdCBzdGF0cyAqc3QsIGludCB2ZXJib3NlLCBpbnQgdGltZW91dF9tcykNCnsNCglzdGF0 aWMgdWludDhfdCByeFsxIDw8IDE2XTsNCglzdGF0aWMgc2l6ZV90IGhhdmU7DQoJc3RydWN0IHBv bGxmZCBwZmQgPSB7IC5mZCA9IHMsIC5ldmVudHMgPSBQT0xMSU4gfTsNCg0KCWZvciAoOzspIHsN CgkJc2l6ZV90IG9mZiA9IDA7DQoJCXNzaXplX3QgbjsNCg0KCQlpZiAoaGF2ZSA9PSBzaXplb2Yo cngpKQkJLyogbmV2ZXIgY2FsbCByZWN2KCkgd2l0aCBsZW4gMCAqLw0KCQkJaGF2ZSA9IDA7DQoJ CWlmIChwb2xsKCZwZmQsIDEsIHRpbWVvdXRfbXMpIDw9IDApDQoJCQlyZXR1cm47DQoJCW4gPSBy ZWN2KHMsIHJ4ICsgaGF2ZSwgc2l6ZW9mKHJ4KSAtIGhhdmUsIE1TR19ET05UV0FJVCk7DQoJCWlm IChuIDw9IDApDQoJCQlyZXR1cm47DQoJCWhhdmUgKz0gKHNpemVfdCluOw0KDQoJCXdoaWxlICho YXZlIC0gb2ZmID49IDQpIHsNCgkJCXVpbnQzMl90IHBsZW4gPSAoKHVpbnQzMl90KXJ4W29mZiAr IDFdIDw8IDE2KSB8DQoJCQkJCSgodWludDMyX3Qpcnhbb2ZmICsgMl0gPDwgOCkgfCByeFtvZmYg KyAzXTsNCgkJCWNvbnN0IHVpbnQ4X3QgKm0gPSByeCArIG9mZiArIDQ7DQoJCQlpbnQgaSwgbnog PSAwOw0KDQoJCQlpZiAoaGF2ZSAtIG9mZiA8IHBsZW4gKyA0KQ0KCQkJCWJyZWFrOw0KCQkJc3Qt PnJlcGxpZXMrKzsNCgkJCWlmIChwbGVuIDwgU01CMl9IRFJfU0laRSkgew0KCQkJCXN0LT5zaG9y dF9yZXBseSsrOw0KCQkJCWlmIChwbGVuID49IDQpDQoJCQkJCWJ1bXAoc3QsIG0sIHBsZW4sIDAp Ow0KCQkJCW9mZiArPSBwbGVuICsgNDsNCgkJCQljb250aW51ZTsNCgkJCX0NCgkJCS8qIG0rMzYu LjM5IFRyZWVJZCwgbSs0MC4uNDcgU2Vzc2lvbklkLCBtKzQ4Li42MyBTaWduYXR1cmU6DQoJCQkg KiBmb3IgLVMgMzUgYWxsIHRocmVlIGFyZSBjb3BpZWQgYnkgaW5pdF9zbWIyX3JzcF9oZHIoKQ0K CQkJICogZnJvbSBQQVNUIHRoZSBlbmQgb2YgdGhlIHJlcXVlc3QgYWxsb2NhdGlvbi4NCgkJCSAq IFRoaXMgY291bnRlciBzY29yZXMgbVs0MC4uNjNdLCB0aGUgbGFzdCAyNCBvZiB0aGUgMjgNCgkJ CSAqIGRpc2Nsb3NlZCBieXRlczogdGhlIFRyZWVJZCB3b3JkIGlzIG5vdCBzY29yZWQsIHNvIGV2 ZXJ5DQoJCQkgKiAnbm9uemVybycgZmlndXJlIGlzIGEgbG93ZXIgYm91bmQuIFRoZSBhdHRhY2hl ZCBsb2dzIHdlcmUNCgkJCSAqIHByb2R1Y2VkIHdpdGggZXhhY3RseSB0aGlzIHNjb3JpbmcuICov DQoJCQlmb3IgKGkgPSA0MDsgaSA8IDY0OyBpKyspDQoJCQkJaWYgKG1baV0pDQoJCQkJCW56ID0g MTsNCgkJCWJ1bXAoc3QsIG0sIHBsZW4sIG56KTsNCgkJCXsNCgkJCQlpbnQgbWsgPSAwOw0KDQoJ CQkJZm9yIChpID0gNDA7IGkgPD0gNjA7IGkrKykNCgkJCQkJaWYgKCFtZW1jbXAobSArIGksIE1B UkssIDQpKQ0KCQkJCQkJbWsgPSAxOw0KCQkJCWlmIChtaykgew0KCQkJCQlzdC0+bWFya2VyKys7 DQoJCQkJCWlmIChzdC0+bnNhbXAgPCAxMikgew0KCQkJCQkJc3QtPm5zYW1wKys7DQoJCQkJCQlw cmludGYoIksxUklHOk1BUks6dGFnPSVzOnBsZW49JXU6Ig0KCQkJCQkJICAgICAgICJzdD0lMDh4 OmJ5dGVzPSIsIGdfdGFnLCBwbGVuLA0KCQkJCQkJICAgICAgIGdldDMyKG0gKyA4KSk7DQoJCQkJ CQlmb3IgKGkgPSAzNjsgaSA8IDY0OyBpKyspDQoJCQkJCQkJcHJpbnRmKCIlMDJ4IiwgbVtpXSk7 DQoJCQkJCQlwcmludGYoIjpFTkRcbiIpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KDQoJCQlpZiAo Z2V0MzIobSArIDgpID09IFNUX1VTRVJfU0VTU0lPTl9ERUxFVEVEKSB7DQoJCQkJc3QtPmxlYWtz Kys7DQoJCQkJaWYgKG56KQ0KCQkJCQlzdC0+bm9uemVyb19sZWFrKys7DQoJCQkJY2xhc3NpZnko c3QsIG0pOw0KCQkJCWlmIChnX2JpZCkNCgkJCQkJYmlkX3Njb3JlKHN0LCBtKTsNCgkJCQlpZiAo c3QtPm5zYW1wIDwgMTYgJiYgKG56IHx8IHN0LT5uc2FtcCA8IDIpKSB7DQoJCQkJCXN0LT5uc2Ft cCsrOw0KCQkJCQlwcmludGYoIksxUklHOlNBTVA6dGFnPSVzOnByb3RvPSUwMnglMDJ4JTAyeCUw Mng6Ig0KCQkJCQkgICAgICAgInBsZW49JXU6Y21kPSV1Om1pZD0lMDh4OnRyZWU9JTA4eDoiDQoJ CQkJCSAgICAgICAic2Vzcz0lMDE2bGx4OnNpZz0iLA0KCQkJCQkgICAgICAgZ190YWcsIG1bMF0s IG1bMV0sIG1bMl0sIG1bM10sIHBsZW4sDQoJCQkJCSAgICAgICBnZXQxNihtICsgMTIpLCBnZXQz MihtICsgMjQpLA0KCQkJCQkgICAgICAgZ2V0MzIobSArIDM2KSwNCgkJCQkJICAgICAgICh1bnNp Z25lZCBsb25nIGxvbmcpZ2V0MzIobSArIDQwKSB8DQoJCQkJCSAgICAgICAoKHVuc2lnbmVkIGxv bmcgbG9uZylnZXQzMihtICsgNDQpIDw8IDMyKSk7DQoJCQkJCWZvciAoaSA9IDQ4OyBpIDwgNjQ7 IGkrKykNCgkJCQkJCXByaW50ZigiJTAyeCIsIG1baV0pOw0KCQkJCQkvKiByYXcgPSBtc2cgb2Zm c2V0cyAzNi4uNjMgZXhhY3RseSBhcyB0aGV5DQoJCQkJCSAqIGNhbWUgb2ZmIHRoZSB3aXJlLCBu byBieXRlLW9yZGVyIGdhbWVzLiAqLw0KCQkJCQlwcmludGYoIjpyYXc9Iik7DQoJCQkJCWZvciAo aSA9IDM2OyBpIDwgNjQ7IGkrKykNCgkJCQkJCXByaW50ZigiJTAyeCIsIG1baV0pOw0KCQkJCQlw cmludGYoIjpFTkRcbiIpOw0KCQkJCX0NCgkJCQlpZiAodmVyYm9zZSkgew0KCQkJCQlwcmludGYo IksxUklHOkxFQUs6dGFnPSV1OmJ5dGVzPSIsDQoJCQkJCSAgICAgICBnZXQzMihtICsgMjQpKTsN CgkJCQkJLyogdGhlIGRpc2Nsb3NlZCB3aW5kb3cgaXMgbVszNi4uNjNdOyBtWzY0Li5dIGlzIHRo ZQ0KCQkJCQkgKiBlcnJvci1yZXNwb25zZSBib2R5IHRoZSBrZXJuZWwgd3JpdGVzIGl0c2VsZi4g Ki8NCgkJCQkJZm9yIChpID0gMzY7IGkgPCA2NDsgaSsrKQ0KCQkJCQkJcHJpbnRmKCIlMDJ4Iiwg bVtpXSk7DQoJCQkJCXByaW50ZigiOkVORFxuIik7DQoJCQkJfQ0KCQkJfQ0KCQkJb2ZmICs9IHBs ZW4gKyA0Ow0KCQl9DQoJCWlmIChvZmYpIHsNCgkJCW1lbW1vdmUocngsIHJ4ICsgb2ZmLCBoYXZl IC0gb2ZmKTsNCgkJCWhhdmUgLT0gb2ZmOw0KCQl9DQoJfQ0KfQ0KDQpzdGF0aWMgdm9sYXRpbGUg c2lnX2F0b21pY190IGdfc3RvcDsNCnN0YXRpYyB2b2lkIG9uX2FsYXJtKGludCBzaWcpIHsgKHZv aWQpc2lnOyBnX3N0b3AgPSAxOyB9DQoNCi8qDQogKiBQQUlOVEVSIChwaGFzZSBQMykuIEZpbGxz IGttYWxsb2MtNjQgc2xvdHMgd2l0aCBNQVJLIGFuZCBuZXZlciByZWFkcy4NCiAqIHNtYjFfbGVu IGlzIGZpeGVkIGF0IDU5IGJ5IHRoZSBjYWxsZXI6IDU5ICsgNCArIDEgPT0gNjQgPT0gdGhlIHdo b2xlIHNsb3QuDQogKi8NCnN0YXRpYyBpbnQgY2hpbGRfcGFpbnQoY29uc3QgY2hhciAqaG9zdCwg aW50IHBvcnQsIHVpbnQzMl90IHNtYjFfbGVuLA0KCQkgICAgICAgdWludDMyX3Qgc2Vjb25kcywg aW50IHBhaW50X2lkLCB1bnNpZ25lZCBsb25nICpzZW50KQ0Kew0KCXN0YXRpYyB1aW50OF90IGJ1 ZlsxIDw8IDE2XTsNCgl1aW50OF90IG9uZVs0MDk2XTsNCgl1aW50MzJfdCBpOw0KCWludCBzOw0K DQoJcyA9IGNvbm5lY3RfdG8oaG9zdCwgcG9ydCk7DQoJaWYgKHMgPCAwKQ0KCQlyZXR1cm4gMjsN CglzaWduYWwoU0lHQUxSTSwgb25fYWxhcm0pOw0KCWFsYXJtKHNlY29uZHMpOw0KDQoJd2hpbGUg KCFnX3N0b3ApIHsNCgkJc2l6ZV90IGxlbiA9IDA7DQoNCgkJZm9yIChpID0gMDsgaSA8IDY0OyBp KyspIHsNCgkJCXVpbnQzMl90IGs7DQoNCgkJCW1lbXNldChvbmUsIDAsIHNtYjFfbGVuKTsNCgkJ CW1lbWNweShvbmUsIFNNQjFfUFJPVE8sIDQpOw0KCQkJb25lWzRdID0gMHgwMDsNCgkJCS8qIHBh aW50X2lkOiBQRFUgaW5kZXggayBpcyBidWZmZXIgaW5kZXggays0LCBhbmQgdGhlDQoJCQkgKiB2 YWx1ZSB3cml0dGVuIElTIHRoYXQgYnVmZmVyIGluZGV4IO+/ve+/ve+/vSB0aGUgdmFsdWUNCgkJ CSAqIGVuY29kZXMgaXRzIG93biBvZmZzZXQuIE1BUksgY2Fubm90IGRvIHRoaXMuICovDQoJCQlm b3IgKGsgPSA4OyBrIDwgc21iMV9sZW47IGsrKykNCgkJCQlvbmVba10gPSBwYWludF9pZCA/ICh1 aW50OF90KShrICsgNCkNCgkJCQkJCSAgOiBNQVJLW2sgJiAzXTsNCgkJCWlmIChsZW4gKyBzbWIx X2xlbiArIDQgPiBzaXplb2YoYnVmKSkNCgkJCQlicmVhazsNCgkJCWxlbiArPSBmcmFtZShidWYg KyBsZW4sIG9uZSwgc21iMV9sZW4pOw0KCQkJKCpzZW50KSsrOw0KCQl9DQoJCWlmICh3cml0ZShz LCBidWYsIGxlbikgIT0gKHNzaXplX3QpbGVuKQ0KCQkJYnJlYWs7DQoJfQ0KCWNsb3NlKHMpOw0K CXJldHVybiAwOw0KfQ0KDQpzdGF0aWMgaW50IGNoaWxkKGNvbnN0IGNoYXIgKmhvc3QsIGludCBw b3J0LCB1aW50MzJfdCBpdGVycywgdWludDMyX3QgYnVyc3QsDQoJCSB1aW50MzJfdCBzbWIxX2xl biwgdWludDE2X3QgcGlkaGlnaCwgdWludDhfdCBjbWRieXRlLA0KCQkgdWludDE2X3QgY3JlZGl0 X3JlcXVlc3QsIGludCB2ZXJib3NlLCB1aW50OF90IGZpbGwsDQoJCSB1aW50MzJfdCB3YWl0bXMs IHVpbnQzMl90IGVjaG9lcywgc3RydWN0IHN0YXRzICpzdCkNCnsNCgl1aW50OF90IG9uZVs0MDk2 XTsNCglzdGF0aWMgdWludDhfdCBidWZbMSA8PCAyMF07DQoJdWludDMyX3QgaSwgajsNCglpbnQg czsNCg0KCXMgPSBjb25uZWN0X3RvKGhvc3QsIHBvcnQpOw0KCWlmIChzIDwgMCkNCgkJcmV0dXJu IDI7DQoNCglmb3IgKGkgPSAwOyBpIDwgaXRlcnM7IGkrKykgew0KCQlzaXplX3QgbGVuID0gMDsN Cg0KCQlmb3IgKGogPSAwOyBqIDwgYnVyc3Q7IGorKykgew0KCQkJYnVpbGRfc21iMV9zaG9ydChv bmUsIHNtYjFfbGVuLCBwaWRoaWdoLCBjbWRieXRlLA0KCQkJCQkgaSAqIGJ1cnN0ICsgaiwgZmls bCk7DQoJCQlpZiAobGVuICsgc21iMV9sZW4gKyA0ID4gc2l6ZW9mKGJ1ZikpDQoJCQkJYnJlYWs7 DQoJCQlsZW4gKz0gZnJhbWUoYnVmICsgbGVuLCBvbmUsIHNtYjFfbGVuKTsNCgkJCXN0LT5zZW50 X3NtYjErKzsNCgkJfQ0KCQkvKiBUSEUgRkxJUDogb25lIGxlZ2FsIFNNQjIgRUNITy4gSXRzIGFy cml2YWwgbWFrZXMgdGhlIGNvbm5lY3Rpb24NCgkJICogdGhyZWFkIHJ1biBzbWJfY29tbW9uLmM6 NDQyIGluaXRfc21iM18xMV9zZXJ2ZXIoKSwgd2hpY2ggc3RvcmVzDQoJCSAqIHRoZSBTTUIyIGNv bm4tPm9wcyB0aGF0IGV2ZXJ5IHN0aWxsLXF1ZXVlZCBTTUIxIHdvcmsgYWJvdmUgd2lsbA0KCQkg KiByZWFkIGF0IHNlcnZlci5jOjE5MC8xOTMuICovDQoJCXsNCgkJCXVpbnQzMl90IGs7DQoNCgkJ CWZvciAoayA9IDA7IGsgPCBlY2hvZXM7IGsrKykgew0KCQkJCWludCBlbCA9IGJ1aWxkX2VjaG8o b25lLCBjcmVkaXRfcmVxdWVzdCwgaSk7DQoNCgkJCQlpZiAobGVuICsgKHNpemVfdCllbCArIDQg PiBzaXplb2YoYnVmKSkNCgkJCQkJYnJlYWs7DQoJCQkJbGVuICs9IGZyYW1lKGJ1ZiArIGxlbiwg b25lLCAodWludDMyX3QpZWwpOw0KCQkJfQ0KCQl9DQoJCWlmICh3cml0ZShzLCBidWYsIGxlbikg IT0gKHNzaXplX3QpbGVuKQ0KCQkJYnJlYWs7DQoJCS8qIC1XOiBob2xkIHN0aWxsIGFmdGVyIHRo ZSBmbGlwLiBXaGlsZSB0aGUgcGVlciBzZW5kcyBub3RoaW5nLA0KCQkgKiB0aGUgY29ubmVjdGlv biB0aHJlYWQgYmxvY2tzIGluIHRoZSByZWNlaXZlIGxvb3AgYW5kIGNhbm5vdA0KCQkgKiBydW4g aW5pdF9zbWIxX3NlcnZlcigpIGFnYWluLCBzbyBldmVyeSBxdWV1ZWQgU01CMSB3b3JrIGlzDQoJ CSAqIGRlcXVldWVkIHdpdGggY29ubi0+b3BzIHN0aWxsIHBvaW50aW5nIGF0IHRoZSBTTUIyIHZl Y3RvciDvv73vv73vv70NCgkJICogd2hpY2ggaXMgd2hhdCBjYXJyaWVzIHRoZSBlcnJvciByZXBs eSBiYWNrIG91dC4gKi8NCgkJaWYgKHdhaXRtcykNCgkJCWRyYWluX2FuZF9zY29yZShzLCBzdCwg dmVyYm9zZSwgKGludCl3YWl0bXMpOw0KCQllbHNlDQoJCQlkcmFpbl9hbmRfc2NvcmUocywgc3Qs IHZlcmJvc2UsIChpICUgNjQpID8gMCA6IDIwKTsNCgl9DQoJLyogMjAwMG1zLCBub3QgMjAwOiB3 aXRob3V0IHRoZSBLQVNBTiBjb25zb2xlIHRocm90dGxlIChwaGFzZXMgUDIvUDMpIHRoZQ0KCSAq IGNoaWxkIGZpbmlzaGVzIGl0cyB3cml0ZXMgbG9uZyBiZWZvcmUgdGhlIHNlcnZlciBoYXMgYW5z d2VyZWQgdGhlbSwgYW5kDQoJICogYSBzaG9ydCBmaW5hbCBkcmFpbiBzY29yZXMgcmVwPTAgb24g YSBjb25uZWN0aW9uIHRoYXQgZGlkIHJlcGx5LiAqLw0KCWRyYWluX2FuZF9zY29yZShzLCBzdCwg dmVyYm9zZSwgMjAwMCk7DQoJZHJhaW5fYW5kX3Njb3JlKHMsIHN0LCB2ZXJib3NlLCAyMDAwKTsN CgljbG9zZShzKTsNCglyZXR1cm4gMDsNCn0NCg0KLyoNCiAqIE1PREUgIm51bGwiICh0aGUgTlVM TC1kZXJlZmVyZW5jZSBub3RlIGluIHNlY3Rpb24gNCkuIE9uZSBwYWlyIHBlciBpdGVyYXRpb24s IHNlbnQgYXMgdHdvIHNlcGFyYXRlIHdyaXRlKDIpcw0KICogc28gdGhlIGNvbm5lY3Rpb24gdGhy ZWFkIGlzIGZvcmNlZCB0byBnbyByb3VuZCB0aGUgcmVjZWl2ZSBsb29wIGJldHdlZW4gdGhlbToN CiAqICAgMS4gU01CMiBjb21tYW5kIC1YMiAoZGVmYXVsdCAzID0gVFJFRV9DT05ORUNUKTogcXVl dWVkIHdpdGggdGhlIFNNQjIgb3BzLg0KICogICAyLiBzaG9ydCBTTUIxIFBEVTogbWFrZXMgdGhl IGNvbm5lY3Rpb24gdGhyZWFkIHJ1bg0KICogICAgICBmcy9zbWIvc2VydmVyL3NtYl9jb21tb24u Yzo0NDEgaW5pdF9zbWIxX3NlcnZlcigpLCBzdG9yaW5nDQogKiAgICAgIGNvbm4tPm9wcyA9ICZz bWIxX3NlcnZlcl9vcHMuDQogKiBUaGUgd2luZG93IHRoYXQgbXVzdCBiZSBoaXQgaXMgYmV0d2Vl biBzZXJ2ZXIuYzoyMDIgKGNhbGwgcmV0dXJucyAtRUlPKSBhbmQNCiAqIHNlcnZlci5jOjIxMCAo bG9hZCBvZiBjb25uLT5vcHMgZm9yIC0+aXNfc2lnbl9yZXEpLiBJdCBpcyBhIGZldyBodW5kcmVk DQogKiBuYW5vc2Vjb25kcyB3aWRlOyBzd2VlcCAtQyBhbmQgLUkuDQogKiBUaGUgb3JhY2xlIGZv ciB0aGlzIG1vZGUgaXMgTk9UIHRoZSByZXNwb25zZSBhbmQgTk9UIEtBU0FOIO+/ve+/ve+/vSBp dCBpcyBhbiBvb3BzDQogKiAoIkJVRzoga2VybmVsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSIs IGluc3RydWN0aW9uIGZldGNoIGF0IDB4MCkgaW4gdGhlDQogKiBzZXJpYWwgbG9nLCBwbHVzIGEg cGVybWFuZW50bHkgc3R1Y2sgY29ubmVjdGlvbiB0aHJlYWQgYmVjYXVzZQ0KICoga3NtYmRfY29u bl9yX2NvdW50X2RlYygpIChzZXJ2ZXIuYzozMjApIG5ldmVyIHJ1bnMgYW5kIGNvbm5lY3Rpb24u Yzo1NjgNCiAqIHdhaXRfZXZlbnQocl9jb3VudCA9PSAwKSB0aGVuIG5ldmVyIGNvbXBsZXRlcy4N CiAqLw0Kc3RhdGljIGludCBjaGlsZF9udWxsKGNvbnN0IGNoYXIgKmhvc3QsIGludCBwb3J0LCB1 aW50MzJfdCBpdGVycywNCgkJICAgICAgdWludDMyX3Qgc21iMV9sZW4sIHVpbnQxNl90IHNtYjJf Y21kLCB1aW50OF90IGNtZGJ5dGUsDQoJCSAgICAgIHVpbnQxNl90IGNyZWRpdF9yZXF1ZXN0LCBz dHJ1Y3Qgc3RhdHMgKnN0KQ0Kew0KCXVpbnQ4X3Qgb25lWzQwOTZdLCBmcls0MjAwXTsNCgl1aW50 MzJfdCBpOw0KCWludCBzLCBsOw0KDQoJcyA9IGNvbm5lY3RfdG8oaG9zdCwgcG9ydCk7DQoJaWYg KHMgPCAwKQ0KCQlyZXR1cm4gMjsNCg0KCWZvciAoaSA9IDA7IGkgPCBpdGVyczsgaSsrKSB7DQoJ CXNpemVfdCBuOw0KDQoJCWwgPSBidWlsZF9zbWIyX2NtZChvbmUsIHNtYjJfY21kLCBjcmVkaXRf cmVxdWVzdCwgaSk7DQoJCW4gPSBmcmFtZShmciwgb25lLCAodWludDMyX3QpbCk7DQoJCWlmICh3 cml0ZShzLCBmciwgbikgIT0gKHNzaXplX3QpbikNCgkJCWJyZWFrOw0KDQoJCWJ1aWxkX3NtYjFf c2hvcnQob25lLCBzbWIxX2xlbiwgMiwgY21kYnl0ZSwgaSwgMCk7DQoJCW4gPSBmcmFtZShmciwg b25lLCBzbWIxX2xlbik7DQoJCWlmICh3cml0ZShzLCBmciwgbikgIT0gKHNzaXplX3QpbikNCgkJ CWJyZWFrOw0KCQlzdC0+c2VudF9zbWIxKys7DQoNCgkJaWYgKChpICYgMHgzZikgPT0gMCkNCgkJ CWRyYWluX2FuZF9zY29yZShzLCBzdCwgMCwgMCk7DQoJfQ0KCWRyYWluX2FuZF9zY29yZShzLCBz dCwgMCwgMTAwKTsNCgljbG9zZShzKTsNCglyZXR1cm4gMDsNCn0NCg0KLyoNCiAqIENsYXNzaWZp Y2F0aW9uIG91dHB1dC4gT25lIHNob3J0IGxpbmUgcGVyIGZhY3QsIGV2ZXJ5IGxpbmUgc2VsZi1p ZGVudGlmeWluZywgc28gdGhhdCBhDQogKiBsaW5lIHRoZSBjb25zb2xlIHNocmVkcyBpcyBkcm9w cGVkIGJ5IHRoZSBleHRyYWN0b3IgaW5zdGVhZCBvZiBjb3JydXB0aW5nIGENCiAqIGNvdW50LiBO b3RoaW5nIGhlcmUgaXMgaW50ZXJwcmV0ZWQgaW4gdGhlIGd1ZXN0Lg0KICovDQpzdGF0aWMgdm9p ZCBjbHNfcmVwb3J0KHN0cnVjdCBzdGF0cyAqc3QpDQp7DQoJdW5zaWduZWQgaW50IGksIGIsIGs7 DQoJdW5zaWduZWQgbG9uZyB0b3AgPSAwOw0KDQoJcHJpbnRmKCJLMVJJRzpDTFM6dGFnPSVzOmM9 JWQ6cmVwPSVsdTphbGx6PSVsdTphbnlwdHI9JWx1Omt0ZXh0PSVsdToiDQoJICAgICAgICJhc2Np aT0lbHU6dXB0cj0lbHU6dDRuej0lbHU6RU5EXG4iLCBnX3RhZywgZ19jaSwgc3QtPmNfcmVwLA0K CSAgICAgICBzdC0+Y19hbGx6ZXJvLCBzdC0+Y19hbnlwdHIsIHN0LT5jX2t0ZXh0LCBzdC0+Y19h c2NpaSwNCgkgICAgICAgc3QtPmNfdXB0ciwgc3QtPmNfdGFpbDRueik7DQoJZm9yIChpID0gMDsg aSA8IDM7IGkrKykNCgkJcHJpbnRmKCJLMVJJRzpDTFc6dGFnPSVzOmM9JWQ6dz0ldTpvZmY9JXU6 ej0lbHU6a3Q9JWx1OmttPSVsdToiDQoJCSAgICAgICAiZG09JWx1OnZtPSVsdTp2bWU9JWx1Omtv PSVsdTpsbz0lbHU6b3Q9JWx1OkVORFxuIiwNCgkJICAgICAgIGdfdGFnLCBnX2NpLCBpLCA0MCAr IDggKiBpLA0KCQkgICAgICAgc3QtPndjbHNbaV1bQ19aRVJPXSwgc3QtPndjbHNbaV1bQ19LVEVY VF0sDQoJCSAgICAgICBzdC0+d2Nsc1tpXVtDX0tNT0RdLCBzdC0+d2Nsc1tpXVtDX0RNQVBdLA0K CQkgICAgICAgc3QtPndjbHNbaV1bQ19WTUFMTE9DXSwgc3QtPndjbHNbaV1bQ19WTUVNTUFQXSwN CgkJICAgICAgIHN0LT53Y2xzW2ldW0NfS09USEVSXSwgc3QtPndjbHNbaV1bQ19MT1ddLA0KCQkg ICAgICAgc3QtPndjbHNbaV1bQ19PVEhFUl0pOw0KCWZvciAoYiA9IDA7IGIgPCBzdC0+bmhhc2g7 IGIrKykNCgkJaWYgKHN0LT5odGFiW2JdLm4gPiB0b3ApDQoJCQl0b3AgPSBzdC0+aHRhYltiXS5u Ow0KCXByaW50ZigiSzFSSUc6Q0xGOnRhZz0lczpjPSVkOmRpc3RpbmN0PSV1OmhvdmY9JWx1OnNh bWVwcmV2PSVsdTp0b3A9JWx1OkVORFxuIiwNCgkgICAgICAgZ190YWcsIGdfY2ksIHN0LT5uaGFz aCwgc3QtPmhhc2hfb3ZmLCBzdC0+Y19zYW1lcHJldiwgdG9wKTsNCgkvKiBzZWxlY3Rpb24gc29y dCB0aGUgcHJlZml4IHRhYmxlLCBwcmludCB0aGUgYnVzaWVzdCA4ICovDQoJZm9yIChpID0gMDsg aSA8IHN0LT5ucGZ4ICYmIGkgPCA4OyBpKyspIHsNCgkJdW5zaWduZWQgaW50IGJlc3QgPSBpOw0K DQoJCWZvciAoYiA9IGkgKyAxOyBiIDwgc3QtPm5wZng7IGIrKykNCgkJCWlmIChzdC0+cGZ4W2Jd Lm4gPiBzdC0+cGZ4W2Jlc3RdLm4pDQoJCQkJYmVzdCA9IGI7DQoJCWlmIChiZXN0ICE9IGkpIHsN CgkJCXVpbnQzMl90IHRwID0gc3QtPnBmeFtpXS5wOw0KCQkJdW5zaWduZWQgbG9uZyB0biA9IHN0 LT5wZnhbaV0ubjsNCg0KCQkJc3QtPnBmeFtpXSA9IHN0LT5wZnhbYmVzdF07DQoJCQlzdC0+cGZ4 W2Jlc3RdLnAgPSB0cDsNCgkJCXN0LT5wZnhbYmVzdF0ubiA9IHRuOw0KCQl9DQoJCXByaW50Zigi SzFSSUc6Q0xQOnRhZz0lczpjPSVkOnBmeD0lMDZ4Om49JWx1OkVORFxuIiwNCgkJICAgICAgIGdf dGFnLCBnX2NpLCBzdC0+cGZ4W2ldLnAsIHN0LT5wZnhbaV0ubik7DQoJfQ0KCXByaW50ZigiSzFS SUc6Q0xQTzp0YWc9JXM6Yz0lZDpucGZ4PSV1Om92Zj0lbHU6RU5EXG4iLA0KCSAgICAgICBnX3Rh ZywgZ19jaSwgc3QtPm5wZngsIHN0LT5wZnhfb3ZmKTsNCglmb3IgKGkgPSAwOyBpIDwgc3QtPm5r dDsgaSsrKQ0KCQlwcmludGYoIksxUklHOkNMS1Q6dGFnPSVzOmM9JWQ6dj0lMDE2bGx4Om49JWx1 OkVORFxuIiwNCgkJICAgICAgIGdfdGFnLCBnX2NpLCAodW5zaWduZWQgbG9uZyBsb25nKXN0LT5r dFtpXS52LCBzdC0+a3RbaV0ubik7DQoJcHJpbnRmKCJLMVJJRzpDTEtUTzp0YWc9JXM6Yz0lZDpu a3Q9JXU6b3ZmPSVsdTpFTkRcbiIsDQoJICAgICAgIGdfdGFnLCBnX2NpLCBzdC0+bmt0LCBzdC0+ a3Rfb3ZmKTsNCglmb3IgKGsgPSBDX0tURVhUOyBrIDwgTkNMUzsgaysrKQ0KCQlpZiAoc3QtPmNz YW1wW2tdKQ0KCQkJcHJpbnRmKCJLMVJJRzpDTFY6dGFnPSVzOmM9JWQ6az0lczp2PSUwMTZsbHg6 RU5EXG4iLA0KCQkJICAgICAgIGdfdGFnLCBnX2NpLCBjbHNfbmFtZVtrXSwNCgkJCSAgICAgICAo dW5zaWduZWQgbG9uZyBsb25nKXN0LT5jc2FtcFtrXSk7DQp9DQoNCnN0YXRpYyB2b2lkIGJpZF9y ZXBvcnQoc3RydWN0IHN0YXRzICpzdCkNCnsNCglpbnQgaTsNCg0KCXByaW50ZigiSzFSSUc6QklE Uzp0YWc9JXM6Yz0lZDpyZXA9JWx1OmZ1bGw9JWx1OmFueT0lbHU6dGFpbD0lbHU6RU5EXG4iLA0K CSAgICAgICBnX3RhZywgZ19jaSwgc3QtPmJpZF9yZXAsIHN0LT5iaWRfZnVsbCwgc3QtPmJpZF9h bnksDQoJICAgICAgIHN0LT5iaWRfdGFpbHBhaW50KTsNCglmb3IgKGkgPSBCSURfTE87IGkgPD0g QklEX0hJOyBpKyspDQoJCXByaW50ZigiSzFSSUc6QklEOnRhZz0lczpjPSVkOmk9JWQ6bT0lbHU6 bW0xPSVsdTptcDE9JWx1OkVORFxuIiwNCgkJICAgICAgIGdfdGFnLCBnX2NpLCBpLCBzdC0+Ymlk X21baSAtIEJJRF9MT10sDQoJCSAgICAgICBzdC0+YmlkX21tMVtpIC0gQklEX0xPXSwgc3QtPmJp ZF9tcDFbaSAtIEJJRF9MT10pOw0KfQ0KDQpzdGF0aWMgdm9pZCByZXBvcnQoc3RydWN0IHN0YXRz ICpzdCkNCnsNCgl1bnNpZ25lZCBpbnQgYjsNCg0KCXByaW50ZigiSzFSSUc6IENISUxEIHNlbnRf c21iMT0lbHUgcmVwbGllcz0lbHUgTEVBS1M9JWx1IG5vbnplcm89JWx1XG4iLA0KCSAgICAgICBz dC0+c2VudF9zbWIxLCBzdC0+cmVwbGllcywgc3QtPmxlYWtzLCBzdC0+bm9uemVyb19sZWFrKTsN CglwcmludGYoIksxUklHOkNISUxEMjp0YWc9JXM6c2VudD0lbHU6cmVwPSVsdTpsZWFrcz0lbHU6 bno9JWx1Om1hcms9JWx1OiINCgkgICAgICAgInNob3J0PSVsdTpvdmY9JWx1OmJpbnM9JXU6RU5E XG4iLCBnX3RhZywgc3QtPnNlbnRfc21iMSwNCgkgICAgICAgc3QtPnJlcGxpZXMsIHN0LT5sZWFr cywgc3QtPm5vbnplcm9fbGVhaywgc3QtPm1hcmtlciwNCgkgICAgICAgc3QtPnNob3J0X3JlcGx5 LCBzdC0+YnVja2V0X292ZXJmbG93LCBzdC0+bmJ1Y2spOw0KCWZvciAoYiA9IDA7IGIgPCBzdC0+ bmJ1Y2s7IGIrKykNCgkJcHJpbnRmKCJLMVJJRzpCSU46dGFnPSVzOnByb3RvPSUwMnglMDJ4JTAy eCUwMng6cGxlbj0ldTpzdD0lMDh4OiINCgkJICAgICAgICJuPSVsdTpuej0lbHU6RU5EXG4iLCBn X3RhZywNCgkJICAgICAgIHN0LT5idWNrW2JdLnByb3RvWzBdLCBzdC0+YnVja1tiXS5wcm90b1sx XSwNCgkJICAgICAgIHN0LT5idWNrW2JdLnByb3RvWzJdLCBzdC0+YnVja1tiXS5wcm90b1szXSwN CgkJICAgICAgIHN0LT5idWNrW2JdLnBsZW4sIHN0LT5idWNrW2JdLnN0YXR1cywNCgkJICAgICAg IHN0LT5idWNrW2JdLm4sIHN0LT5idWNrW2JdLm56KTsNCgljbHNfcmVwb3J0KHN0KTsNCglpZiAo Z19iaWQpDQoJCWJpZF9yZXBvcnQoc3QpOw0KfQ0KDQovKg0KICogT25lIHBoYXNlID0gbnBhaW50 IHBhaW50ZXIgY29ubmVjdGlvbnMgKHBoYXNlIFAzIG9ubHkpIHBsdXMgbmNvbm4gbGVha2VyDQog KiBjb25uZWN0aW9ucywgYWxsIGZvcmtlZCwgYWxsIHdhaXRlZCBmb3IuDQogKi8NCnN0YXRpYyB2 b2lkIHBoYXNlKGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqaG9zdCwgaW50IHBvcnQsIHVp bnQzMl90IGNvbm5zLA0KCQkgIHVpbnQzMl90IGl0ZXJzLCB1aW50MzJfdCBidXJzdCwgdWludDMy X3Qgc21iMV9sZW4sDQoJCSAgdWludDE2X3QgcGlkaGlnaCwgdWludDhfdCBjbWRieXRlLCB1aW50 MTZfdCBjcmVkaXRfcmVxdWVzdCwNCgkJICBpbnQgdmVyYm9zZSwgdWludDhfdCBmaWxsLCB1aW50 MzJfdCB3YWl0bXMsIHVpbnQzMl90IGVjaG9lcywNCgkJICB1aW50MzJfdCBucGFpbnQsIHVpbnQz Ml90IHBhaW50X3NlY3MsIGludCBwYWludF9pZCkNCnsNCgl1aW50MzJfdCBpOw0KDQoJcHJpbnRm KCJLMVJJRzpQSEFTRTp0YWc9JXM6Y29ubnM9JXU6aXRlcnM9JXU6YnVyc3Q9JXU6c21iMWxlbj0l dToiDQoJICAgICAgICJhbGxvYz0ldTpmaWxsPSUwMng6cGFpbnRlcnM9JXU6RU5EXG4iLCB0YWcs IGNvbm5zLCBpdGVycywgYnVyc3QsDQoJICAgICAgIHNtYjFfbGVuLCBzbWIxX2xlbiArIDUsIGZp bGwsIG5wYWludCk7DQoJcHJpbnRmKCJLMVJJRzpQSEFTRUI6dGFnPSVzOnBhaW50X2lkPSVkOmJp ZD0lZDpFTkRcbiIsIHRhZywgcGFpbnRfaWQsIGdfYmlkKTsNCg0KCWZvciAoaSA9IDA7IGkgPCBu cGFpbnQ7IGkrKykgew0KCQlwaWRfdCBwaWQgPSBmb3JrKCk7DQoNCgkJaWYgKHBpZCA9PSAwKSB7 DQoJCQl1bnNpZ25lZCBsb25nIHNlbnQgPSAwOw0KDQoJCQlnX3RhZyA9IHRhZzsNCgkJCWNoaWxk X3BhaW50KGhvc3QsIHBvcnQsIDU5LCBwYWludF9zZWNzLCBwYWludF9pZCwgJnNlbnQpOw0KCQkJ cHJpbnRmKCJLMVJJRzpQQUlOVDp0YWc9JXM6c2VudD0lbHU6RU5EXG4iLCB0YWcsIHNlbnQpOw0K CQkJX2V4aXQoMCk7DQoJCX0NCgl9DQoJZm9yIChpID0gMDsgaSA8IGNvbm5zOyBpKyspIHsNCgkJ cGlkX3QgcGlkID0gZm9yaygpOw0KDQoJCWlmIChwaWQgPT0gMCkgew0KCQkJc3RydWN0IHN0YXRz IHN0Ow0KDQoJCQlnX3RhZyA9IHRhZzsNCgkJCWdfY2kgPSAoaW50KWk7DQoJCQltZW1zZXQoJnN0 LCAwLCBzaXplb2Yoc3QpKTsNCgkJCWNoaWxkKGhvc3QsIHBvcnQsIGl0ZXJzLCBidXJzdCwgc21i MV9sZW4sIHBpZGhpZ2gsDQoJCQkgICAgICBjbWRieXRlLCBjcmVkaXRfcmVxdWVzdCwgdmVyYm9z ZSwgZmlsbCwgd2FpdG1zLA0KCQkJICAgICAgZWNob2VzLCAmc3QpOw0KCQkJcmVwb3J0KCZzdCk7 DQoJCQlfZXhpdCgwKTsNCgkJfSBlbHNlIGlmIChwaWQgPCAwKSB7DQoJCQlwcmludGYoIksxUklH OiBGQUlMIGZvcms6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOw0KCQkJYnJlYWs7DQoJCX0NCgl9 DQoJd2hpbGUgKHdhaXQoTlVMTCkgPiAwKQ0KCQk7DQoJcHJpbnRmKCJLMVJJRzpQSEFTRURPTkU6 dGFnPSVzOkVORFxuIiwgdGFnKTsNCn0NCg0KLyoNCiAqIFJlZmVyZW5jZSBhZGRyZXNzZXMgcmVh ZCBvbmNlIGZyb20gdGhlIExPQ0FMIC9wcm9jL2thbGxzeW1zIO+/ve+/ve+/vSBpLmUuIHRoZSBr ZXJuZWwgb2YNCiAqIHRoZSBob3N0IHRoaXMgcHJvZ3JhbSBydW5zIG9uLCB3aGljaCBpcyB0aGUg dGFyZ2V0IG9ubHkgd2hlbiB0aGUgcHJvZ3JhbSBpcyBydW4NCiAqIG9uIHRoZSB0YXJnZXQgaXRz ZWxmLiBUaGVpciBqb2IgaXMgdG8gbGV0IHRoZSBjbGFzc2lmaWVyJ3MgcmFuZ2VzIGJlIGNoZWNr ZWQNCiAqIGFnYWluc3QgYSByZWFsIGtlcm5lbCBpbnN0ZWFkIG9mIGFnYWluc3QgYSB0YWJsZS4g VGhleSBzYXkgbm90aGluZyBhYm91dCBhDQogKiByZW1vdGUgdGFyZ2V0LCBhbmQgbW9zdCBzeXN0 ZW1zIHJldHVybiB6ZXJvZXMgaGVyZSB0byBhbiB1bnByaXZpbGVnZWQgcmVhZGVyLg0KICovDQpz dGF0aWMgdm9pZCBwcmludF9rcmVmKHZvaWQpDQp7DQoJc3RhdGljIGNvbnN0IGNoYXIgKndhbnRb XSA9IHsgIl9zdGV4dCIsICJfZXRleHQiLCAiX19zdGFydF9yb2RhdGEiLA0KCQkJCSAgICAgICJf X2VuZF9yb2RhdGEiLCAiX2VkYXRhIiwgIl9lbmQiLA0KCQkJCSAgICAgICJpbml0X3NtYjJfcnNw X2hkciIsDQoJCQkJICAgICAgImtzbWJkX2Nvbm5faGFuZGxlcl9sb29wIiwgTlVMTCB9Ow0KCWNo YXIgbGluZVs1MTJdOw0KCUZJTEUgKmYgPSBmb3BlbigiL3Byb2Mva2FsbHN5bXMiLCAiciIpOw0K CWludCBpOw0KDQoJaWYgKCFmKSB7DQoJCXByaW50ZigiSzFSSUc6S1JFRjpsb2NhbDpub25lOkVO RFxuIik7DQoJCXJldHVybjsNCgl9DQoJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwg ZikpIHsNCgkJY2hhciBhZGRyWzMyXSwgdHlwZSwgbmFtZVsyNTZdOw0KDQoJCWlmIChzc2NhbmYo bGluZSwgIiUzMXMgJWMgJTI1NXMiLCBhZGRyLCAmdHlwZSwgbmFtZSkgIT0gMykNCgkJCWNvbnRp bnVlOw0KCQlmb3IgKGkgPSAwOyB3YW50W2ldOyBpKyspDQoJCQlpZiAoIXN0cmNtcChuYW1lLCB3 YW50W2ldKSkNCgkJCQlwcmludGYoIksxUklHOktSRUY6bG9jYWw6JXM9JXM6RU5EXG4iLCBuYW1l LCBhZGRyKTsNCgl9DQoJZmNsb3NlKGYpOw0KfQ0KDQpzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBj aGFyICptZSkNCnsNCglwcmludGYoDQoiVXNhZ2U6ICVzIC1oIDxob3N0PiBbLXAgcG9ydF0gWy1D IGNvbm5zXSBbLUkgaXRlcnNdIFstQiBidXJzdF0gWy1TIHNtYjFsZW5dXG4iDQoiICAgICAgICAg IFstWCBwaWRoaWdoXSBbLWMgY21kYnl0ZV0gWy1SIGNyZWRpdHJlcV0gWy1NIG1vZGVdIFstWSBz bWIyY21kXSBbLXZdXG4iDQoiXG4iDQoiICAtaCBIT1NUICAgdGFyZ2V0IElQdjQgYWRkcmVzcywg bGl0ZXJhbCBvbmx5ICAgICAgICAgICAgICAocmVxdWlyZWQpXG4iDQoiICAtcCBQT1JUICAgdGFy Z2V0IHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA0NDUp XG4iDQoiICAtQyBDT05OUyAgcGFyYWxsZWwgY29ubmVjdGlvbnMsIG9uZSBmb3JrZWQgY2hpbGQg ZWFjaCAgICAoZGVmYXVsdCA0KVxuIg0KIiAgLUkgSVRFUlMgIGJ1cnN0cyBwZXIgY29ubmVjdGlv biAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgMjAwMClcbiINCiIgIC1CIEJVUlNU ICBzaG9ydCBTTUIxIFBEVXMgcGVyIGJ1cnN0LCBiZWZvcmUgdGhlIEVDSE8gICAgIChkZWZhdWx0 IDY0KVxuIg0KIiAgLVMgTEVOICAgIFJGQzEwMDIgbGVuZ3RoIG9mIGVhY2ggU01CMSBQRFUgICAg ICAgICAgICAgICAgKGRlZmF1bHQgMzUpXG4iDQoiICAgICAgICAgICAgY29ubmVjdGlvbi5jOjUw NiByZWplY3RzIDwgMzUgKHNpemVvZihzdHJ1Y3Qgc21iX2hkcikrMikuXG4iDQoiICAgICAgICAg ICAgREVURUNUQUJJTElUWTogYWxsb2NhdGlvbiBpcyBMRU4rNS5cbiINCiIgICAgICAgICAgICAg IExFTiAzNSAtPiA0MCBieXRlcyBpbiBrbWFsbG9jLTY0LCByZWR6b25lIDI0LCB0aGUgNC1ieXRl XG4iDQoiICAgICAgICAgICAgICAgICAgICAgICAgVHJlZUlkIHJlYWQgYXQgaW5kZXggNDAuLjQz IGlzIGZ1bGx5IGluc2lkZSBpdC4gQkVTVC5cbiINCiIgICAgICAgICAgICAgIExFTiAzNi4uNTgg LT4gc3RpbGwga21hbGxvYy02NCwgcmVkem9uZSA2NC0oTEVOKzUpID4gMC5cbiINCiIgICAgICAg ICAgICAgIExFTiA1OSAtPiBhbGxvYyA2NCA9PSBleGFjdCBidWNrZXQsIHJlZHpvbmUgWkVSTywg dGhlIHJlYWRcbiINCiIgICAgICAgICAgICAgICAgICAgICAgICBsYW5kcyBpbiBhIGxpdmUgbmVp Z2hib3VyLiBBIE5PLUNSQVNIIHRoZXJlIGlzIHZvaWQuXG4iDQoiICAgICAgICAgICAgICBMRU4g Pj0gNjQgLT4gbm8gb3ZlcnJ1biBhdCBhbGw7IHVzZSBhcyB0aGUgbmVnYXRpdmUgY29udHJvbC5c biINCiIgIC1YIFBJRCAgICBTTUIxIFBpZEhpZ2gsIGkuZS4gc21iMl9oZHIuQ29tbWFuZCBmb3Ig dGhlIGNvbmZ1c2VkIHJlYWRlclxuIg0KIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgMj1MT0dPRkYpXG4iDQoiICAgICAg ICAgICAgQXZvaWQgMCwxLDEzIChzZXNzaW9uLWZyZWUgb3Bjb2RlcyksIDE2IChRVUVSWV9JTkZP IGJhaWxzIGF0XG4iDQoiICAgICAgICAgICAgc21iMnBkdS5jOjY3NiksIDExIGFuZCAxNCAoZm9y Y2UgdGhlIGxhcmdlIHJlc3BvbnNlIGFsbG9jKS5cbiINCiIgIC1jIEJZVEUgICBTTUIxIENvbW1h bmQgYnl0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IDB4MDApXG4iDQoi ICAgICAgICAgICAgMHgwMCBrZWVwcyBrc21iZF92ZXJpZnlfc21iX21lc3NhZ2UoKSBzaG9ydCBv ZiB0aGVcbiINCiIgICAgICAgICAgICBvdXRzdGFuZGluZ19jcmVkaXRzKysgYXQgc21iX2NvbW1v bi5jOjE2Ny4gMHg3MiByZXN0b3JlcyB0aGVcbiINCiIgICAgICAgICAgICByb3VuZC0xIGJlaGF2 aW91ciBhbmQgd2lsbCBzdHJhbmdsZSB0aGUgY29ubmVjdGlvbi5cbiINCiIgIC1SIE4gICAgICBD cmVkaXRSZXF1ZXN0IG9uIHRoZSBFQ0hPICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IDUx MilcbiINCiIgIC1NIE1PREUgICAwID0gb3BzZmxpcCAgKHRoaXMgcmVwb3J0LCBPT0IgcmVhZCAr IHdpcmUgbGVhaykgIChkZWZhdWx0IDApXG4iDQoiICAgICAgICAgICAgMSA9IG51bGwgICAgICh0 aGUgTlVMTC1kZXJlZmVyZW5jZSBub3RlIGluIHNlY3Rpb24gNCwgTlVMTCAtPmlzX3NpZ25fcmVx IGF0IHNlcnZlci5jOjIxMClcbiINCiIgICAgICAgICAgICA0ID0gc3VpdGUgICAgUDEgLVMgMzUg cG9zaXRpdmUsIFAyIC1TIDY0IHBhaW50ZWQgcGx1bWJpbmdcbiINCiIgICAgICAgICAgICAgICAg ICAgICAgICAgY29udHJvbCwgUDMgLVMgMzUgd2l0aCBrbWFsbG9jLTY0IHBhaW50ZXJzXG4iDQoi ICAgICAgICAgICAgNSA9IGJ5dGVpZCAgIEFSTSBCLiBCMCB1bnBhaW50ZWQgYmFzZWxpbmUgdGhl biBCMSB3aXRoIHBhaW50ZXJzXG4iDQoiICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd3Jp dGUgYnVmZmVyW2ldID0gaS4gUGVyLWluZGV4IG1hdGNoIGhpc3RvZ3JhbVxuIg0KIiAgICAgICAg ICAgICAgICAgICAgICAgICBvdmVyIHJlcGx5IGluZGljZXMgNDAuLjY3IChLMVJJRzpCSUQgbGlu ZXMpLlxuIg0KIiAgLVkgQ01EICAgIG1vZGUgMSBvbmx5OiBTTUIyIENvbW1hbmQgb2YgdGhlIHJh Y2luZyByZXF1ZXN0IChkZWZhdWx0IDMpXG4iDQoiICAgICAgICAgICAgbXVzdCBOT1QgYmUgMCwg MSBvciAxMyAoc21iMnBkdS5jOjcxOCByZXR1cm5zIDAgZm9yIHRob3NlKS5cbiINCiIgIC1GIEJZ VEUgICBwYWludCBTTUIxIFBEVSBvZmZzZXRzIDMyLi4gd2l0aCBCWVRFICgwID0gbGVhdmUgemVy bywgZGVmYXVsdClcbiINCiIgICAgICAgICAgICB3aXRoIC1TIDY0IHRoaXMgY292ZXJzIG1zZyAz Ni4uNjMgYW5kIHByb3ZlcyB0aGUgcGx1bWJpbmcuXG4iDQoiICAtVyBNUyAgICAgYWZ0ZXIgdGhl IGZsaXAsIHdhaXQgTVMgbXMgZHJhaW5pbmcgYmVmb3JlIHRoZSBuZXh0IGJ1cnN0LlxuIg0KIiAg ICAgICAgICAgIDAgKGRlZmF1bHQpID0gcm91bmQtMSBjYWRlbmNlLCBuZXZlciBpZGxlLlxuIg0K IiAgLUUgTiAgICAgIHRyYWlsaW5nIFNNQjIgRUNIT2VzIHBlciBidXJzdCAgICAgICAgICAgICAg ICAgIChkZWZhdWx0IDEpXG4iDQoiICAtRCBTRUNTICAgcGhhc2UgUDMgcGFpbnRlciBsaWZldGlt ZSAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgMTIwKVxuIg0KIiAgLXYgICAgICAgIHBy aW50IGV2ZXJ5IGxlYWtlZCAyOC1ieXRlIGRpc2Nsb3NlZCB3aW5kb3dcbiINCiJcbiINCiJPcmFj bGVzLCBpbiBvcmRlciBvZiBzdHJlbmd0aDpcbiINCiIgIDEuIHVzZXJzcGFjZSAgOiBhbnkgJ0xF QUtTJyA+IDAgbGluZSBtZWFucyBhbiBTTUIxIHdvcmsgd2FzIGV4ZWN1dGVkIHdpdGhcbiINCiIg ICAgICAgICAgICAgICAgICB0aGUgU01CMiBvcHMgdmVjdG9yIGFuZCAyOCBieXRlcyBwYXN0IHRo ZSBhbGxvY2F0aW9uIGNhbWUgYmFja1xuIg0KIiAgICAgICAgICAgICAgICAgIG9uIHRoZSB3aXJl LiBObyBzYW5pdGl6ZXIgbmVlZGVkLlxuIg0KIiAgMi4gS0FTQU4gICAgICA6IHNsYWItb3V0LW9m LWJvdW5kcyBSRUFEIGluIGluaXRfc21iMl9yc3BfaGRyLCBvYmplY3RcbiINCiIgICAgICAgICAg ICAgICAgICBrbWFsbG9jLTY0IGFsbG9jYXRlZCBpbiBrc21iZF9jb25uX2hhbmRsZXJfbG9vcC5c biINCiIgIDMuIE5VTEwgZGVyZWYgOiBpZiBzZXJ2ZXIuYzoyMTAgbG9hZHMgdGhlIFNNQjEgb3Bz IGFmdGVyIHNlcnZlci5jOjIwMiBsb2FkZWRcbiINCiIgICAgICAgICAgICAgICAgICB0aGUgU01C MiBvbmVzLCBjb25uLT5vcHMtPmlzX3NpZ25fcmVxIGlzIE5VTEwgYW5kIHRoZSBrd29ya2VyXG4i DQoiICAgICAgICAgICAgICAgICAgb29wc2VzLiBSYXJlcjsgc2FtZSBydW4gcHJvZHVjZXMgaXQu XG4iDQoiXG4iDQoiRXhhbXBsZXM6XG4iDQoiICAlcyAtaCAxMC4wLjIuMTUgLUMgNCAtSSAyMDAw IC1CIDY0IC1TIDM1XG4iDQoiICAlcyAtaCAxMC4wLjIuMTUgLUMgOCAtSSA1MDAwIC1CIDEyOCAt UyAzNSAtdlxuIg0KIiAgJXMgLWggMTAuMC4yLjE1IC1DIDQgLUkgMjAwMCAtQiA2NCAtUyA2NCAg ICAgICMgbmVnYXRpdmUgY29udHJvbFxuIiwNCgltZSwgbWUsIG1lLCBtZSk7DQp9DQoNCmludCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCnsNCgljb25zdCBjaGFyICpob3N0ID0gTlVMTDsN Cgl1aW50MzJfdCBjb25ucyA9IDQsIGl0ZXJzID0gMjAwMCwgYnVyc3QgPSA2NCwgc21iMV9sZW4g PSAzNTsNCgl1aW50MTZfdCBwaWRoaWdoID0gMiwgY3JlZGl0X3JlcXVlc3QgPSA1MTI7DQoJdWlu dDhfdCBjbWRieXRlID0gMHgwMDsNCgl1aW50MTZfdCBzbWIyX2NtZCA9IDM7ICAgICAgICAgIC8q IFNNQjJfVFJFRV9DT05ORUNUX0hFICovDQoJdWludDhfdCBmaWxsID0gMDsNCgl1aW50MzJfdCB3 YWl0bXMgPSAwLCBlY2hvZXMgPSAxLCBwYWludF9zZWNzID0gMTIwOw0KCWludCBwb3J0ID0gNDQ1 LCB2ZXJib3NlID0gMCwgbW9kZSA9IDAsIGM7DQoJdWludDMyX3QgaTsNCg0KCXdoaWxlICgoYyA9 IGdldG9wdChhcmdjLCBhcmd2LCAiaDpwOkM6STpCOlM6WDpjOlI6TTpZOkY6VzpFOkQ6dj8iKSkg IT0gLTEpIHsNCgkJc3dpdGNoIChjKSB7DQoJCWNhc2UgJ2gnOiBob3N0ID0gb3B0YXJnOyBicmVh azsNCgkJY2FzZSAncCc6IHBvcnQgPSBhdG9pKG9wdGFyZyk7IGJyZWFrOw0KCQljYXNlICdDJzog Y29ubnMgPSAodWludDMyX3Qpc3RydG91bChvcHRhcmcsIE5VTEwsIDApOyBicmVhazsNCgkJY2Fz ZSAnSSc6IGl0ZXJzID0gKHVpbnQzMl90KXN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsgYnJlYWs7 DQoJCWNhc2UgJ0InOiBidXJzdCA9ICh1aW50MzJfdClzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7 IGJyZWFrOw0KCQljYXNlICdTJzogc21iMV9sZW4gPSAodWludDMyX3Qpc3RydG91bChvcHRhcmcs IE5VTEwsIDApOyBicmVhazsNCgkJY2FzZSAnWCc6IHBpZGhpZ2ggPSAodWludDE2X3Qpc3RydG91 bChvcHRhcmcsIE5VTEwsIDApOyBicmVhazsNCgkJY2FzZSAnYyc6IGNtZGJ5dGUgPSAodWludDhf dClzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7IGJyZWFrOw0KCQljYXNlICdSJzogY3JlZGl0X3Jl cXVlc3QgPSAodWludDE2X3Qpc3RydG91bChvcHRhcmcsIE5VTEwsIDApOyBicmVhazsNCgkJY2Fz ZSAnTSc6IG1vZGUgPSBhdG9pKG9wdGFyZyk7IGJyZWFrOw0KCQljYXNlICdZJzogc21iMl9jbWQg PSAodWludDE2X3Qpc3RydG91bChvcHRhcmcsIE5VTEwsIDApOyBicmVhazsNCgkJY2FzZSAnRic6 IGZpbGwgPSAodWludDhfdClzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7IGJyZWFrOw0KCQljYXNl ICdXJzogd2FpdG1zID0gKHVpbnQzMl90KXN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsgYnJlYWs7 DQoJCWNhc2UgJ0UnOiBlY2hvZXMgPSAodWludDMyX3Qpc3RydG91bChvcHRhcmcsIE5VTEwsIDAp OyBicmVhazsNCgkJY2FzZSAnRCc6IHBhaW50X3NlY3MgPSAodWludDMyX3Qpc3RydG91bChvcHRh cmcsIE5VTEwsIDApOyBicmVhazsNCgkJY2FzZSAndic6IHZlcmJvc2UgPSAxOyBicmVhazsNCgkJ ZGVmYXVsdDogdXNhZ2UoYXJndlswXSk7IHJldHVybiAwOw0KCQl9DQoJfQ0KCWlmIChhcmdjID09 IDEgfHwgIWhvc3QpIHsNCgkJdXNhZ2UoYXJndlswXSk7DQoJCXJldHVybiBhcmdjID09IDEgPyAw IDogMjsNCgl9DQoJaWYgKG1vZGUgIT0gNCAmJiAoc21iMV9sZW4gPCAzNSB8fCBzbWIxX2xlbiA+ IDQwOTYpKSB7DQoJCXByaW50ZigiSzFSSUc6IEZBSUwgLVMgbXVzdCBiZSA+PSAzNSAoY29ubmVj dGlvbi5jOjUwNikgYW5kIDw9IDQwOTZcbiIpOw0KCQlyZXR1cm4gMjsNCgl9DQoJaWYgKGNvbm5z ID09IDApDQoJCWNvbm5zID0gMTsNCg0KCXNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDAp Ow0KCXByaW50X2tyZWYoKTsNCglwcmludGYoIksxUklHOiBTVEFSVCBob3N0PSVzIHBvcnQ9JWQg bW9kZT0lc1xuIiwgaG9zdCwgcG9ydCwNCgkgICAgICAgbW9kZSA/ICJudWxsKHRoZSBOVUxMLWRl cmVmZXJlbmNlIG5vdGUgaW4gc2VjdGlvbiA0KSIgOiAib3BzZmxpcCh0aGlzIHJlcG9ydCkiKTsN CglwcmludGYoIksxUklHOiBQTEFOIGNvbm5zPSV1IGl0ZXJzPSV1IGJ1cnN0PSV1IHNtYjFfbGVu PSV1IGFsbG9jPSV1ICINCgkgICAgICAgImJ1Y2tldD0lcyBwaWRoaWdoPTB4JTA0eCBjbWRieXRl PTB4JTAyeFxuIiwNCgkgICAgICAgY29ubnMsIGl0ZXJzLCBidXJzdCwgc21iMV9sZW4sIHNtYjFf bGVuICsgNSwNCgkgICAgICAgKHNtYjFfbGVuICsgNSkgPD0gNjQgPyAia21hbGxvYy02NCIgOiAi a21hbGxvYy0xMjgiLA0KCSAgICAgICBwaWRoaWdoLCBjbWRieXRlKTsNCglwcmludGYoIksxUklH OiBQTEFOIHNpbms9aW5pdF9zbWIyX3JzcF9oZHIgKHNtYjJwZHUuYzo2MzIpIHJlYWRzIG1zZyBv ZmYgIg0KCSAgICAgICAiMzYuLjYzID09IGJ1ZiBpbmRleCAldS4uJXUgb2YgYSAldS1ieXRlIGFs bG9jYXRpb25cbiIsDQoJICAgICAgIDQwdSwgNjd1LCBzbWIxX2xlbiArIDUpOw0KCXByaW50Zigi SzFSSUc6IFBMQU4gZmxpcD1pbml0X3NtYjNfMTFfc2VydmVyIChzbWJfY29tbW9uLmM6NDQxKSBk cml2ZW4gYnkgIg0KCSAgICAgICAiJXUgNjgtYnl0ZSBTTUIyIEVDSE8gYXQgdGhlIHRhaWwgb2Yg ZXZlcnkgYnVyc3RcbiIsIGVjaG9lcyk7DQoJcHJpbnRmKCJLMVJJRzpQTEFOMjpmaWxsPSUwMng6 d2FpdG1zPSV1OmVjaG9lcz0ldTpzbWIxbGVuPSV1OkVORFxuIiwNCgkgICAgICAgZmlsbCwgd2Fp dG1zLCBlY2hvZXMsIHNtYjFfbGVuKTsNCg0KCWlmIChtb2RlID09IDUpIHsNCgkJLyogQVJNIEIg 77+977+977+9IGJ5dGUtZm9yLWJ5dGUgbWFwcGluZyB0ZXN0Lg0KCQkgKiBCMCBydW5zIEZJUlNU IGFuZCB3aXRoIE5PIHBhaW50ZXJzOiBpdCBtZWFzdXJlcyB0aGUNCgkJICogYWNjaWRlbnRhbC1t YXRjaCBiYXNlbGluZSAoYSByYW5kb20gYnl0ZSBlcXVhbHMgaXRzIG93biBpbmRleA0KCQkgKiB3 aXRoIHAgPSAxLzI1NikuIEIxIGlzIHRoZSBzYW1lIGxlYWtlcnMgd2l0aCBzZWxmLWRlc2NyaWJp bmcNCgkJICogcGFpbnRlcnMgcnVubmluZy4gT3JkZXIgbWF0dGVyczogcGFpbnRlZCBtZW1vcnkg bGVmdCBieSBCMQ0KCQkgKiB3b3VsZCBjb250YW1pbmF0ZSBhIEIwIHRoYXQgcmFuIGFmdGVyIGl0 LiAqLw0KCQlnX2JpZCA9IDE7DQoJCXBoYXNlKCJCMCIsIGhvc3QsIHBvcnQsIGNvbm5zLCBpdGVy cywgYnVyc3QsIDM1LCBwaWRoaWdoLA0KCQkgICAgICBjbWRieXRlLCBjcmVkaXRfcmVxdWVzdCwg dmVyYm9zZSwgMCwgd2FpdG1zLCBlY2hvZXMsDQoJCSAgICAgIDAsIDAsIDApOw0KCQlwaGFzZSgi QjEiLCBob3N0LCBwb3J0LCBjb25ucywgaXRlcnMsIGJ1cnN0LCAzNSwgcGlkaGlnaCwNCgkJICAg ICAgY21kYnl0ZSwgY3JlZGl0X3JlcXVlc3QsIHZlcmJvc2UsIDAsIHdhaXRtcywgZWNob2VzLA0K CQkgICAgICBjb25ucywgcGFpbnRfc2VjcywgMSk7DQoJCXByaW50ZigiSzFSSUc6IEJZVEVJRCBk b25lXG4iKTsNCgkJcHJpbnRmKCJLMVJJRzogUlVOLUNPTVBMRVRFXG4iKTsNCgkJcmV0dXJuIDA7 DQoJfQ0KDQoJaWYgKG1vZGUgPT0gNCkgew0KCQkvKiBQMSBwb3NpdGl2ZSA6IC1TIDM1LCB0aGUg c2hhcGUgdGhpcyByZXBvcnQgaXMgQ09ORklSTUVEIGF0Lg0KCQkgKiBQMiBwbHVtYmluZyA6IC1T IDY0IHBhaW50ZWQgMHhBQS4gU2FtZSBjb2RlIHBhdGgsIGJ1dCBtc2cNCgkJICogICAgICAgICAg ICAgICAzNi4uNjMgaXMgSU5TSURFIHRoZSBhbGxvY2F0aW9uLCBzbyBhIHJlcGx5DQoJCSAqICAg ICAgICAgICAgICAgY2FycnlpbmcgMHhBQSBwcm92ZXMgdGhvc2UgZmllbGRzIHJlYWNoIHRoZQ0K CQkgKiAgICAgICAgICAgICAgIHdpcmUsIGFuZCAwIG5ldyBLQVNBTiByZXBvcnRzIHByb3ZlcyB0 aGUgLVMgMzUNCgkJICogICAgICAgICAgICAgICB3aW5kb3cgcmVhbGx5IHdhcyBvdXQgb2YgYm91 bmRzLg0KCQkgKiBQMyBncm9vbWVkICA6IC1TIDM1IHdpdGggcGFpbnRlciBjb25uZWN0aW9ucyBm aWxsaW5nDQoJCSAqICAgICAgICAgICAgICAga21hbGxvYy02NCB3aXRoIE1BUksgZmlyc3QuICov DQoJCXBoYXNlKCJQMSIsIGhvc3QsIHBvcnQsIGNvbm5zLCBpdGVycywgYnVyc3QsIDM1LCBwaWRo aWdoLA0KCQkgICAgICBjbWRieXRlLCBjcmVkaXRfcmVxdWVzdCwgdmVyYm9zZSwgMCwgd2FpdG1z LCBlY2hvZXMsIDAsIDAsIDApOw0KCQlwaGFzZSgiUDIiLCBob3N0LCBwb3J0LCBjb25ucywgaXRl cnMsIGJ1cnN0LCA2MywgcGlkaGlnaCwNCgkJICAgICAgY21kYnl0ZSwgY3JlZGl0X3JlcXVlc3Qs IHZlcmJvc2UsIDB4YWEsIHdhaXRtcywgZWNob2VzLCAwLCAwLCAwKTsNCgkJcGhhc2UoIlAzIiwg aG9zdCwgcG9ydCwgY29ubnMsIGl0ZXJzLCBidXJzdCwgMzUsIHBpZGhpZ2gsDQoJCSAgICAgIGNt ZGJ5dGUsIGNyZWRpdF9yZXF1ZXN0LCB2ZXJib3NlLCAwLCB3YWl0bXMsIGVjaG9lcywNCgkJICAg ICAgY29ubnMsIHBhaW50X3NlY3MsIDApOw0KCQlwcmludGYoIksxUklHOiBPUFNGTElQIGRvbmVc biIpOw0KCQlwcmludGYoIksxUklHOiBSVU4tQ09NUExFVEVcbiIpOw0KCQlyZXR1cm4gMDsNCgl9 DQoNCglmb3IgKGkgPSAwOyBpIDwgY29ubnM7IGkrKykgew0KCQlwaWRfdCBwaWQgPSBmb3JrKCk7 DQoNCgkJaWYgKHBpZCA9PSAwKSB7DQoJCQlzdHJ1Y3Qgc3RhdHMgc3Q7DQoNCgkJCWdfY2kgPSAo aW50KWk7DQoJCQltZW1zZXQoJnN0LCAwLCBzaXplb2Yoc3QpKTsNCgkJCWludCByID0gbW9kZSA/ DQoJCQkJY2hpbGRfbnVsbChob3N0LCBwb3J0LCBpdGVycywgc21iMV9sZW4sDQoJCQkJCSAgIHNt YjJfY21kLCBjbWRieXRlLCBjcmVkaXRfcmVxdWVzdCwNCgkJCQkJICAgJnN0KSA6DQoJCQkJY2hp bGQoaG9zdCwgcG9ydCwgaXRlcnMsIGJ1cnN0LCBzbWIxX2xlbiwNCgkJCQkgICAgICBwaWRoaWdo LCBjbWRieXRlLCBjcmVkaXRfcmVxdWVzdCwNCgkJCQkgICAgICB2ZXJib3NlLCBmaWxsLCB3YWl0 bXMsIGVjaG9lcywgJnN0KTsNCg0KCQkJcmVwb3J0KCZzdCk7DQoJCQlfZXhpdChyKTsNCgkJfSBl bHNlIGlmIChwaWQgPCAwKSB7DQoJCQlwcmludGYoIksxUklHOiBGQUlMIGZvcms6ICVzXG4iLCBz dHJlcnJvcihlcnJubykpOw0KCQkJYnJlYWs7DQoJCX0NCgl9DQoJd2hpbGUgKHdhaXQoTlVMTCkg PiAwKQ0KCQk7DQoJcHJpbnRmKCJLMVJJRzogT1BTRkxJUCBkb25lXG4iKTsNCglwcmludGYoIksx UklHOiBSVU4tQ09NUExFVEVcbiIpOw0KCXJldHVybiAwOw0KfQ0KDQpgYGANCg0KLS0tDQoNCiMg UmVwcm9kdWN0aW9uIERyaXZlcjogcmVwcm9kdWNlLnNoDQoNCmBgYGJhc2gNCiMhL2Jpbi9iYXNo DQojIHJlcHJvZHVjZS5zaCDvv73vv73vv70gaG9zdC1zaWRlIGRyaXZlciBmb3IgdGhlIGtzbWJk IG9wcy1mbGlwIE9PQiByZWFkIHJlcHJvZHVjdGlvbi4NCiMNCiMgUmVwcm9kdWNlcyByZXBvcnQu dHh0IChrc21iZCBwcm90b2NvbC1kaXNwYXRjaCByYWNlLCBPT0IgcmVhZCBpbg0KIyBpbml0X3Nt YjJfcnNwX2hkcikgaW5zaWRlIHRoZSBRRU1VIFZNIHByb3ZpZGVkIGJ5IC9yb290L2ltYWdlL3J1 bi12bS5zaC4NCiMNCiMgU3RlcHMgKHJlcG9ydCBzZWN0aW9uIDUuMik6DQojICAgMS4gQm9vdCB0 aGUgVk0gKGtlcm5lbCA3LjMtcmMzLCBDT05GSUdfU01CX1NFUlZFUj15LCBDT05GSUdfS0FTQU49 eSkNCiMgICAgICB2aWEgL3Jvb3QvaW1hZ2UvcnVuLXZtLnNoLCBpbWFnZSBoYXMga3NtYmQtdG9v bHMgKyB0Y3BkdW1wIGluc3RhbGxlZC4NCiMgICAyLiBEcml2ZSB0aGUgZ3Vlc3Qgb3ZlciBTU0gg KGhvc3Rmd2QgMTI3LjAuMC4xOjEwMDIxIC0+IGd1ZXN0OjIyKToNCiMgICAgICAgIC0gbWluaW1h bCBrc21iZC5jb25mIChyZXBvcnQgc2VjdGlvbiA0LjUpOiBuZXRiaW9zIG5hbWUgKyAvc3J2L3No YXJlDQojICAgICAgICAtIHN0YXJ0IGtzbWJkLm1vdW50ZA0KIyAgICAgICAgLSBzdGFydCB0Y3Bk dW1wIG9uIHBvcnQgNDQ1IChyZW1vdGUgYXR0YWNrIHZlY3RvciAtPiBwY2FwKQ0KIyAgICAgICAg LSBydW4gUG9DIHBvc2l0aXZlIGNhc2U6ICAuL3BvYyAtaCAxMjcuMC4wLjEgLUMgOCAtSSA0MDAg LUIgNjQgLVMgMzUNCiMgICAgICAgIC0gcnVuIFBvQyBuZWdhdGl2ZSBjb250cm9sOiAuL3BvYyAt aCAxMjcuMC4wLjEgLUMgOCAtSSA0MDAgLUIgNjQgLVMgNjQNCiMgICAgICAgIC0gY29sbGVjdCBk bWVzZyAoS0FTQU4gcmVwb3J0cykNCiMgICAzLiBDb3B5IGFydGlmYWN0cyBiYWNrIHRvIGhvc3Q6 DQojICAgICAgICByZXByb2R1Y2Utc3Rkb3V0LmxvZyAgIO+/ve+/ve+/vSBmdWxsIHN0ZG91dCBv ZiB0aGlzIHNjcmlwdCArIGd1ZXN0IHJ1bg0KIyAgICAgICAga2FzYW4tcmVwb3J0LnR4dCAgICAg ICDvv73vv73vv70gZG1lc2cgd2l0aCBLQVNBTiBzbGFiLW91dC1vZi1ib3VuZHMgcmVwb3J0cw0K IyAgICAgICAgYXR0YWNrLWNhcHR1cmUucGNhcCAgICDvv73vv73vv70gcG9ydC00NDUgdHJhZmZp YyBjYXB0dXJlZCBkdXJpbmcgdGhlIGF0dGFjaw0KIyAgIDQuIFNodXQgdGhlIFZNIGRvd24uDQoj DQojIEFsbCBob3N0LXZpc2libGUgb3V0cHV0IGlzIHRlZSdkIHRvIHJlcHJvZHVjZS1zdGRvdXQu bG9nLg0KDQpzZXQgLXUNCg0KVk1JTUc9L3Jvb3QvaW1hZ2UvdHJpeGllLmltZw0KUlVOVk09L3Jv b3QvaW1hZ2UvcnVuLXZtLnNoDQpTU0hLRVk9L3Jvb3QvaW1hZ2UvdHJpeGllLmlkX3JzYQ0KU1NI UE9SVD0xMDAyMQ0KR1VFU1RfRElSPS9yb290L29wc2ZsaXAtcmVwcm8NCk9VVERJUj0vcm9vdC96 ZGkvcmVwcm8tb3V0DQpWTVRJTUVPVVQ9MTgwDQoNCm1rZGlyIC1wICIkT1VURElSIg0KDQplY2hv ICI9PT0ga3NtYmQgb3BzLWZsaXAgcmVwcm9kdWN0aW9uICQoZGF0ZSkgPT09Ig0KDQojIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gYm9vdCB0aGUgVk0NCmVjaG8gIltob3N0XSBzdGFydGluZyBWTSB2aWEgJFJVTlZNIChiYWNr Z3JvdW5kKSINCnJtIC1mIC9yb290L2ltYWdlL3ZtLnBpZA0Kc2V0c2lkICIkUlVOVk0iID4gIiRP VVRESVIvdm0tY29uc29sZS5sb2ciIDI+JjEgJg0KVk1QSUQ9JCENCmVjaG8gIltob3N0XSBydW4t dm0uc2ggd3JhcHBlciBwaWQgJFZNUElEIg0KDQpjbGVhbnVwKCkgew0KICAgIGxvY2FsIHJjPSQ/ DQogICAgZWNobyAiW2hvc3RdIGNsZWFudXA6IHNodXR0aW5nIFZNIGRvd24iDQogICAgc3NoIC1w ICRTU0hQT1JUIC1pICIkU1NIS0VZIiAtbyBTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8gXA0KICAg ICAgICAtbyBVc2VyS25vd25Ib3N0c0ZpbGU9L2Rldi9udWxsIC1vIENvbm5lY3RUaW1lb3V0PTEw IHJvb3RAMTI3LjAuMC4xIFwNCiAgICAgICAgJ25vaHVwIHNoIC1jICJzeXN0ZW1jdGwgcG93ZXJv ZmYiID4vZGV2L251bGwgMj4mMSAmJyAyPi9kZXYvbnVsbA0KICAgIHNsZWVwIDUNCiAgICBpZiBb IC1mIC9yb290L2ltYWdlL3ZtLnBpZCBdOyB0aGVuDQogICAgICAgIGtpbGwgIiQoY2F0IC9yb290 L2ltYWdlL3ZtLnBpZCkiIDI+L2Rldi9udWxsDQogICAgZmkNCiAgICBraWxsICIkVk1QSUQiIDI+ L2Rldi9udWxsDQogICAgcGtpbGwgLWYgJ3FlbXUtc3lzdGVtLXg4Nl82NC4qdHJpeGllLmltZycg Mj4vZGV2L251bGwNCiAgICBleGl0ICRyYw0KfQ0KdHJhcCBjbGVhbnVwIEVYSVQgSU5UIFRFUk0N Cg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IHdhaXQgZm9yIFNTSCB0byBjb21lIHVwDQplY2hvICJbaG9zdF0gd2FpdGluZyBmb3IgZ3Vlc3Qg U1NIICh1cCB0byAke1ZNVElNRU9VVH1zKSINCnVwPTANCmZvciBpIGluICQoc2VxIDEgJFZNVElN RU9VVCk7IGRvDQogICAgaWYgc3NoIC1wICRTU0hQT1JUIC1pICIkU1NIS0VZIiAtbyBTdHJpY3RI b3N0S2V5Q2hlY2tpbmc9bm8gXA0KICAgICAgICAtbyBVc2VyS25vd25Ib3N0c0ZpbGU9L2Rldi9u dWxsIC1vIENvbm5lY3RUaW1lb3V0PTUgLW8gQmF0Y2hNb2RlPXllcyBcDQogICAgICAgIHJvb3RA MTI3LjAuMC4xICd0cnVlJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4NCiAgICAgICAgdXA9MQ0KICAg ICAgICBicmVhaw0KICAgIGZpDQogICAgc2xlZXAgMQ0KZG9uZQ0KaWYgWyAiJHVwIiAhPSAxIF07 IHRoZW4NCiAgICBlY2hvICJbaG9zdF0gRkFUQUw6IGd1ZXN0IFNTSCBuZXZlciBjYW1lIHVwOyBz ZWUgJE9VVERJUi92bS1jb25zb2xlLmxvZyINCiAgICBleGl0IDENCmZpDQplY2hvICJbaG9zdF0g Z3Vlc3QgU1NIIGlzIHVwIGFmdGVyIH4ke2l9cyINCg0KR1VFU1Q9InNzaCAtcCAkU1NIUE9SVCAt aSAkU1NIS0VZIC1vIFN0cmljdEhvc3RLZXlDaGVja2luZz1ubyBcDQogICAgLW8gVXNlcktub3du SG9zdHNGaWxlPS9kZXYvbnVsbCAtbyBDb25uZWN0VGltZW91dD0xNSByb290QDEyNy4wLjAuMSIN Cg0KJEdVRVNUICd1bmFtZSAtYTsgaWQ7IGxzIC9yb290L29wc2ZsaXAtcmVwcm8vJw0KDQojIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSBydW4gaW4gdGhlIGd1ZXN0DQplY2hvICJbaG9zdF0gbGF1bmNoaW5nIGd1ZXN0LXNpZGUgcnVu IHNjcmlwdCINCiRHVUVTVCAiYmFzaCAkR1VFU1RfRElSL2d1ZXN0LXJ1bi5zaCIgMj4mMSB8IHRl ZSAiJE9VVERJUi9ndWVzdC1ydW4ub3V0Ig0KZWNobyAiW2hvc3RdIGd1ZXN0IHJ1biBmaW5pc2hl ZCINCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSBmZXRjaCBhcnRpZmFjdHMNCmVjaG8gIltob3N0XSBmZXRjaGluZyBhcnRp ZmFjdHMiDQokR1VFU1QgImNhdCAkR1VFU1RfRElSL2thc2FuLXJlcG9ydC50eHQiID4gIiRPVVRE SVIva2FzYW4tcmVwb3J0LnR4dCIgMj4mMQ0KJEdVRVNUICJjYXQgJEdVRVNUX0RJUi9tb3VudGQu bG9nIiAgICAgID4gIiRPVVRESVIvbW91bnRkLmxvZyIgMj4mMQ0KJEdVRVNUICJjYXQgJEdVRVNU X0RJUi9ydW4tc3Rkb3V0LmxvZyIgID4gL2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQ0KDQojIHBjYXAg Y2FuIGJlIGJpZzsgZ3ppcCBpbiBndWVzdCBpZiBzY3Agbm90IGF2YWlsYWJsZSwgZWxzZSBqdXN0 IHNjcA0KaWYgc2NwIC1QICRTU0hQT1JUIC1pICIkU1NIS0VZIiAtbyBTdHJpY3RIb3N0S2V5Q2hl Y2tpbmc9bm8gXA0KICAgIC1vIFVzZXJLbm93bkhvc3RzRmlsZT0vZGV2L251bGwgXA0KICAgICJy b290QDEyNy4wLjAuMTokR1VFU1RfRElSL2F0dGFjay1jYXB0dXJlLnBjYXAiIFwNCiAgICAiJE9V VERJUi9hdHRhY2stY2FwdHVyZS5wY2FwIiAyPi9kZXYvbnVsbDsgdGhlbg0KICAgIGVjaG8gIlto b3N0XSBwY2FwIGZldGNoZWQgdmlhIHNjcCINCmVsc2UNCiAgICBlY2hvICJbaG9zdF0gc2NwIGZh aWxlZCwgdHJ5aW5nIGJhc2U2NCBvdmVyIHNzaCINCiAgICAkR1VFU1QgImJhc2U2NCAtdzAgJEdV RVNUX0RJUi9hdHRhY2stY2FwdHVyZS5wY2FwIiA+ICIkT1VURElSL3BjYXAuYjY0IiBcDQogICAg ICAgICYmIGJhc2U2NCAtZCAiJE9VVERJUi9wY2FwLmI2NCIgPiAiJE9VVERJUi9hdHRhY2stY2Fw dHVyZS5wY2FwIiBcDQogICAgICAgICYmIHJtIC1mICIkT1VURElSL3BjYXAuYjY0IiBcDQogICAg ICAgICYmIGVjaG8gIltob3N0XSBwY2FwIGZldGNoZWQgdmlhIGJhc2U2NCINCmZpDQoNCiMgYWxz byBrZWVwIHRoZSByYXcgUG9DIHN0ZG91dCBmcm9tIHRoZSBndWVzdA0KJEdVRVNUICJjYXQgJEdV RVNUX0RJUi9ndWVzdC1wb2Mtc3Rkb3V0LmxvZyIgPiAiJE9VVERJUi9ndWVzdC1wb2Mtc3Rkb3V0 LmxvZyIgMj4mMSB8fCB0cnVlDQoNCmVjaG8NCmVjaG8gIj09PSBzdW1tYXJ5ID09PSINCmVjaG8g Ii0tLSBLQVNBTiBzbGFiLW91dC1vZi1ib3VuZHMgaW4gaW5pdF9zbWIyX3JzcF9oZHI6ICQoZ3Jl cCAtYyAnc2xhYi1vdXQtb2YtYm91bmRzIGluIGluaXRfc21iMl9yc3BfaGRyJyAiJE9VVERJUi9r YXNhbi1yZXBvcnQudHh0IiAyPi9kZXYvbnVsbCB8fCBlY2hvIDApIg0KZWNobyAiLS0tIHRvdGFs IEJVRzogS0FTQU4gbGluZXM6ICQoZ3JlcCAtYyAnQlVHOiBLQVNBTicgIiRPVVRESVIva2FzYW4t cmVwb3J0LnR4dCIgMj4vZGV2L251bGwgfHwgZWNobyAwKSINCmxzIC1sYSAiJE9VVERJUiINCmVj aG8gIj09PSByZXByb2R1Y3Rpb24gZHJpdmVyIGNvbXBsZXRlID09PSINCg0KYGBgDQoNCg0KLS0g Q1JFRElUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KVGhpcyB2dWxu ZXJhYmlsaXR5IHdhcyBkaXNjb3ZlcmVkIGJ5Og0KSHllb250YWUgTGVlIHdvcmtpbmcgd2l0aCBU cmVuZEFJIFplcm8gRGF5IEluaXRpYXRpdmUNCg0KLS0gRlVSVEhFUiBERVRBSUxTIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpTdXBwb3J0aW5nIGZpbGVzOg0KDQoNCklmIHN1cHBv cnRpbmcgZmlsZXMgd2VyZSBjb250YWluZWQgd2l0aCB0aGlzIHJlcG9ydCB0aGV5IGFyZSBwcm92 aWRlZCB3aXRoaW4gYSBwYXNzd29yZCBwcm90ZWN0ZWQgWklQIGZpbGUuIFRoZSBwYXNzd29yZCBp cyB0aGUgWkRJIGNhbmRpZGF0ZSBudW1iZXIgaW4gdGhlIGZvcm06IFpESS1DQU4tWFhYWCB3aGVy ZSBYWFhYIGlzIHRoZSBJRCBudW1iZXIuDQoNClBsZWFzZSBjb25maXJtIHJlY2VpcHQgb2YgdGhp cyByZXBvcnQuIFdlIGV4cGVjdCBhbGwgdmVuZG9ycyB0byByZW1lZGlhdGUgWkRJIHZ1bG5lcmFi aWxpdGllcyB3aXRoaW4gMTIwIGRheXMgb2YgdGhlIHJlcG9ydGVkIGRhdGUuIElmIHlvdSBhcmUg cmVhZHkgdG8gcmVsZWFzZSBhIHBhdGNoIGF0IGFueSBwb2ludCBsZWFkaW5nIHVwIHRvIHRoZSBk ZWFkbGluZSwgcGxlYXNlIGNvb3JkaW5hdGUgd2l0aCB1cyBzbyB0aGF0IHdlIG1heSByZWxlYXNl IG91ciBhZHZpc29yeSBkZXRhaWxpbmcgdGhlIGlzc3VlLiBJZiB0aGUgMTIwLWRheSBkZWFkbGlu ZSBpcyByZWFjaGVkIGFuZCBubyBwYXRjaCBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB3ZSB3aWxs IHJlbGVhc2UgYSBsaW1pdGVkIHB1YmxpYyBhZHZpc29yeSB3aXRoIG91ciBvd24gbWl0aWdhdGlv bnMsIHNvIHRoYXQgdGhlIHB1YmxpYyBjYW4gcHJvdGVjdCB0aGVtc2VsdmVzIGluIHRoZSBhYnNl bmNlIG9mIGEgcGF0Y2guIFBsZWFzZSBrZWVwIHVzIHVwZGF0ZWQgcmVnYXJkaW5nIHRoZSBzdGF0 dXMgb2YgdGhpcyBpc3N1ZSBhbmQgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMgYXQgYW55IHRpbWU6 DQoNClplcm8gRGF5IEluaXRpYXRpdmUNCnpkaS1kaXNjbG9zdXJlc0B0cmVuZG1pY3JvLmNvbQ0K DQpUaGUgUEdQIGtleSB1c2VkIGZvciBhbGwgWkRJIHZlbmRvciBjb21tdW5pY2F0aW9ucyBpcyBh dmFpbGFibGUgZnJvbToNCg0KICBodHRwOi8vd3d3Lnplcm9kYXlpbml0aWF0aXZlLmNvbS9kb2N1 bWVudHMvZGlzY2xvc3VyZXMtcGdwLWtleS5hc2MNCg0KLS0gSU5GT1JNQVRJT04gQUJPVVQgVEhF IFpESSAtLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRXN0YWJsaXNoZWQgYnkgVGlwcGluZ1BvaW50IGFu ZCBhY3F1aXJlZCBieSBUcmVuZCBNaWNybywgdGhlIFplcm8gRGF5IEluaXRpYXRpdmUgKFpESSkg bmVpdGhlciByZS1zZWxscyB2dWxuZXJhYmlsaXR5IGRldGFpbHMgbm9yIGV4cGxvaXQgY29kZS4g SW5zdGVhZCwgdXBvbiBub3RpZnlpbmcgdGhlIGFmZmVjdGVkIHByb2R1Y3QgdmVuZG9yLCB0aGUg WkRJIHByb3ZpZGVzIGl0cyBUcmVuZCBNaWNybyBUaXBwaW5nUG9pbnQgY3VzdG9tZXJzIHdpdGgg emVybyBkYXkgcHJvdGVjdGlvbiB0aHJvdWdoIGl0cyBpbnRydXNpb24gcHJldmVudGlvbiB0ZWNo bm9sb2d5LiBFeHBsaWNpdCBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgc3BlY2lmaWNzIG9mIHRoZSB2 dWxuZXJhYmlsaXR5IGFyZSBub3QgZXhwb3NlZCB0byBhbnkgcGFydGllcyB1bnRpbCBhbiBvZmZp Y2lhbCB2ZW5kb3IgcGF0Y2ggaXMgcHVibGljbHkgYXZhaWxhYmxlLg0KDQpQbGVhc2UgY29udGFj dCB1cyBmb3IgZnVydGhlciBkZXRhaWxzIG9yIHJlZmVyIHRvOg0KDQogIGh0dHA6Ly93d3cuemVy b2RheWluaXRpYXRpdmUuY29tDQoNCi0tIERJU0NMT1NVUkUgUE9MSUNZIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCg0KT3VyIHZ1bG5lcmFiaWxpdHkgZGlzY2xvc3VyZSBwb2xpY3kgaXMg YXZhaWxhYmxlIG9ubGluZSBhdDoNCg0KICBodHRwOi8vd3d3Lnplcm9kYXlpbml0aWF0aXZlLmNv bS9hZHZpc29yaWVzL2Rpc2Nsb3N1cmVfcG9saWN5Lw0KICAgIA0KDQpUUkVORCBNSUNSTyBFTUFJ TCBOT1RJQ0UNClRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBlbWFpbCBhbmQgYW55 IGF0dGFjaG1lbnRzIGlzIGNvbmZpZGVudGlhbA0KYW5kIG1heSBiZSBzdWJqZWN0IHRvIGNvcHly aWdodCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcHJvdGVjdGlvbi4NCklmIHlvdSBh cmUgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQsIHlvdSBhcmUgbm90IGF1dGhvcml6ZWQgdG8g dXNlIG9yDQpkaXNjbG9zZSB0aGlzIGluZm9ybWF0aW9uLCBhbmQgd2UgcmVxdWVzdCB0aGF0IHlv dSBub3RpZnkgdXMgYnkgcmVwbHkgbWFpbCBvcg0KdGVsZXBob25lIGFuZCBkZWxldGUgdGhlIG9y aWdpbmFsIG1lc3NhZ2UgZnJvbSB5b3VyIG1haWwgc3lzdGVtLg0KRm9yIGRldGFpbHMgYWJvdXQg d2hhdCBwZXJzb25hbCBpbmZvcm1hdGlvbiB3ZSBjb2xsZWN0IGFuZCB3aHksIHBsZWFzZSBzZWUg b3VyIFByaXZhY3kgTm90aWNlIG9uIG91ciB3ZWJzaXRlIGF0OiBbIGh0dHBzOi8vd3d3LnRyZW5k bWljcm8uY29tL3ByaXZhY3ld