From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.19]) by sourceware.org (Postfix) with ESMTPS id 615773858D20 for ; Wed, 29 May 2024 14:01:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 615773858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 615773858D20 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=198.175.65.19 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1716991294; cv=pass; b=GlaVNyWtgnEJjJbU+F4DT/r9Xg7eU+qkwig/3Dq+NQU+VnMhd+xe0qlztbHmTYQwDfkNvyVooUZskYtHUx7R9XcKggsb+jqh6zSJu+iBvPwBhtG0JotcY3C65BJybThCsUrSo1rz3eVDIO6LvQwt0HndYXNNzDz08bpRbojH2Ew= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1716991294; c=relaxed/simple; bh=C0d+TPvVXJrWBrRZyV7cadXUKheEhRFpsM6PNNjPSaY=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=fYD6FQsAu2VWi5XpStTkt+YlyQb873ktafOorPhm/78KA5fP148pUEf3dRBkNps2+BlzSfV9PZHqVSkZ/jQs+zgkS2Zer6frrDMbnMSTOB6yrTq/FFdnuk6Ts9Roj+Go4uPlznd1kJcOuj/RCXRE/eW7jHPPmkHQoyPRlrmjsYU= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1716991285; x=1748527285; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=C0d+TPvVXJrWBrRZyV7cadXUKheEhRFpsM6PNNjPSaY=; b=Z5EWvB1WFwVLZ1eKinzCo09n1HWY842nngRwCVBLtqsAlbYXc3wuPNRH d45GLNLPgAXMNHMRpTXNTAFEyw4WUWRU4Bv/1kiWYoGl7tvktzFJnPolJ 8VnezEBkd743u5JwaWvq0qqVFdHvKZhg/HYwDC7yRqVemQMCF2TdkCXqs 7CfZcynqNLu8ryZ698jh8DCrGuRMmRPGUJtunro353xM0XGiWqy9c7+O7 u/tJNPpNSCR3B9hkjRnQjct/m9V9bEzyJ9yHrM6NrBFf5Mq5ZyjwZ+3qJ oTKe/6jETOLC9/fcWTftAO/Yg1Y1ok8Bv+E7Iez/p3j5Bejj/SJ3y7pPv g==; X-CSE-ConnectionGUID: l2g6jMkKQKicY+PCKncKNQ== X-CSE-MsgGUID: 92Nl/tk5QPOb22O6hT2Kow== X-IronPort-AV: E=McAfee;i="6600,9927,11087"; a="13244135" X-IronPort-AV: E=Sophos;i="6.08,198,1712646000"; d="scan'208";a="13244135" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by orvoesa111.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 May 2024 07:01:22 -0700 X-CSE-ConnectionGUID: YM6jWaAiRAa8o6thjjzDOw== X-CSE-MsgGUID: G00l9Sq5Ssu/9IEi9mKpjA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,198,1712646000"; d="scan'208";a="35398961" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orviesa010.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 29 May 2024 07:01:23 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 29 May 2024 07:01:21 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39 via Frontend Transport; Wed, 29 May 2024 07:01:21 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.169) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Wed, 29 May 2024 07:00:37 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jCOGLkKP9e5DGMDXQJadMH9/4jRve4Oy106yAh4av/9v3/De3gGdlt5Ycly2XM0vMPlSqPh3CLvoBXgLbd2d/dwYvVotxFh1YzJu2ZnVS8NgePIO4fAYUJNtCuDwGea7RUmbZvbKYAhcrIQqdOh5K/0skjN74uiNBeWg4P9Wnk5Uk3PomW4yhlsdbeyBZnAiuxjRClsamQ47urz0/dRo2q/EQkwHKBfqMuW42F3+hjHxCzxjG5iW5TVfzFO3EXup0JtGn36gTX1bRbC8RaSs4WKGKHkhXPXrFSSenhdDdKcUF5cJAYBadM99L3GvXHgOTnzedo77a7rydt96C1UX3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=C0d+TPvVXJrWBrRZyV7cadXUKheEhRFpsM6PNNjPSaY=; b=ERSH1lnHcg7ARPO4JS2YS8OmVDdX6QZvTIp5r9hMyM0Ee1IJ6BzhuPV/eGg8waS8mdOZefc4o06z9cGqj+Msxz+DdozMafRysWIzt5i336T5BzSeHgWzZw2RhihK37bHuDABRUaei9+npEHP/hGqidm3uiOU0VnksvpkQBG4CY26kvj69G9pKk2aRDRhYYAsVD3hmLJ3EREbeXXC3oXNvTWaejg615LdUwVgpwRDsERxFMBnf1VRj9BZWr7btmuF0r36eXd0nn0DFOh3IX6IIHITLN7YEgm2FfJb3TtFyX0R3MRVg2v/ntUtbhtQmp+vFE8ZwIqnUN+XzrXmlsl+Ig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MW5PR11MB5908.namprd11.prod.outlook.com (2603:10b6:303:194::10) by PH8PR11MB6949.namprd11.prod.outlook.com (2603:10b6:510:227::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7611.30; Wed, 29 May 2024 14:00:33 +0000 Received: from MW5PR11MB5908.namprd11.prod.outlook.com ([fe80::c798:ab3c:1a03:af59]) by MW5PR11MB5908.namprd11.prod.outlook.com ([fe80::c798:ab3c:1a03:af59%3]) with mapi id 15.20.7611.030; Wed, 29 May 2024 14:00:33 +0000 From: "Li, Pan2" To: Richard Biener CC: "gcc-patches@gcc.gnu.org" , "juzhe.zhong@rivai.ai" , "kito.cheng@gmail.com" , "tamar.christina@arm.com" Subject: RE: [PATCH v3] Match: Support more form for scalar unsigned SAT_ADD Thread-Topic: [PATCH v3] Match: Support more form for scalar unsigned SAT_ADD Thread-Index: AQHar/9M/fBgTadbgkKhY4yR59ztmLGuKWcAgAAWzJA= Date: Wed, 29 May 2024 14:00:33 +0000 Message-ID: References: <20240527062949.1942207-1-pan2.li@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW5PR11MB5908:EE_|PH8PR11MB6949:EE_ x-ms-office365-filtering-correlation-id: 883e9ed9-1e68-441f-5d36-08dc7fe7b517 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230031|366007|1800799015|376005|38070700009; x-microsoft-antispam-message-info: =?utf-8?B?eFJCTzJDWkZWTy9BYlR3V1k0WW5sZk9IZXh1eU1KNUFYa3Q1RVZEajNoWHI5?= =?utf-8?B?R2FHdHExVFdUTVk0Z2taNVZmT2MzbDN3dXB5emh5amFucjBpZGJNdXNha3Yz?= =?utf-8?B?bS82Y0NGTHJmNjJMRXFxbnQ0a1dqbjFRSDJTcm1qQmpWQmZYS3owMy81eGpX?= =?utf-8?B?Sms2ZjJ3NElCZ0RHZXJxWGkzelNrM3hNcUcxMkFLYW9tZUM4SjdSeDJFUEtG?= =?utf-8?B?ck1rWW85Q1FaSFFXNDJVTDVucHRQMjlxVGZjSnorMDdqWXJ4K0IxMHlNcGJm?= =?utf-8?B?Y3VZRUFEdk5wVEhWY1dMNTZMdzFycTlqbVNlMWNtSEhWQXdBMmVzVGV2aDdO?= =?utf-8?B?NmZjU2dBN1M5N0haVjFZa3p2M2ZNbmZkV3BrUGtPRVREanhzaUZnUk5vL0I2?= =?utf-8?B?anlXajFaZjlmWHRmK0Z5V1pzMUo0amYvRUhNWXVHNTZjVE1ZdFQ4NlJVSFRO?= =?utf-8?B?UmR4RW1oMEF4QkRYT21NZ3VyaDdVVStvcmpWa2Y5VlVRbFlhOUlVdXprMzRJ?= =?utf-8?B?OC94MEl4Qko5MFNuMW9SUlNpVU1VVEM2b0VIdTdNcEdPdmRpOU5DZXd4U2lR?= =?utf-8?B?UkdqTzZqcHBlYnA3bHBlOURoKzl3ZnJyekVzS2Nvb2lndW1zZjVpMEdJbEpy?= =?utf-8?B?bTY4eWtHajZuaHlRbm5pU1A2RysvRWpFbXY0Rzk2c1UycVMyTG5uUUk0TkFW?= =?utf-8?B?Z2xLL2M1ZmF6QmsvQU1yMXFCR0h3QTlnMk4wWmJvUFBPUWErMEtXRmRTdGpE?= =?utf-8?B?NEpzUHJtbTVGV0o1TVExL1loYlJtZFhNVWZIS3Q2Y2gzNGcyNWFNYXk2YkJo?= =?utf-8?B?M3QvS0VpSU1yYzlOdXBydG9kdkNxVlZFOG1XNWRnRWxtN3dGcGd2aURSOFJN?= =?utf-8?B?SXVBcHF0c1lCMnUrU1hKWkxvWGk5czN2K0VudlpETWRQbmEwbHYxaXpoMkVP?= =?utf-8?B?eVRndDRmV2g4R0JTUUxlYkZ4YXQxdElDbFlXb0VxdnZUMmovSjBxMjk0ZHdQ?= =?utf-8?B?enBaVWE5bHNycThJTk5mSjFhcktrSVl1ZnlQLyt2NWZPQ1ZtWXgwRERwY0tp?= =?utf-8?B?RW16WllkK3krd1k3VE50T1Fza3FFbTJZaHJHdlpkN01wWDF4Nmk1NkZKV3U3?= =?utf-8?B?WlNCeU00c28yWmdBOFduQjdnYVhwd2hzQzZlcXFHaHpXaFUxVUFPTnI1RGo2?= =?utf-8?B?andQMHRPaXQxWmNybTNnWUk1M09VZzZrQUovSEVGTG13ODFaUnh6ajVtK0p4?= =?utf-8?B?RVdLOFVSU0ozb1lETzNhNnhXOCs1OVFyOUxacHFvKzdoMlExdm1WKzI4VERa?= =?utf-8?B?dlQ2WTVFblRzWmpST0JITWcralZxL1g0RzB1REFRQ0FDNnRZZkNFczBFaE44?= =?utf-8?B?N3JRUUdSU1gyS3M5LzVhSXhkdUtUS1lUeUxERWcxLzB5T3lHYWl4cGE2MFZh?= =?utf-8?B?Q1BET3NjZEMxSkt0TkRsNVdPVEJNYm12bmtwQStJUFNENW5TM1hRTE44NmUz?= =?utf-8?B?VEtxa1FrOHUvN3dvelFxWmVWZ0dITnIxQ0J6QWFvRXB3Qm83bTAzOHF1RE02?= =?utf-8?B?S1U5WlM3aTU2MktYT1RhQUUzejRUVi9mNnhRSVljMWlqM2t3U29sNUlxV2FV?= =?utf-8?B?ZGk3TFRLSURlMlkzeUZZaG9yZy9MSUY1VkxFYXFFTmoxRXg1SVlzZkJQNUZq?= =?utf-8?B?cTVYMXF4ZXlPQmtQYmRYdVQ0ODRrUllobTdyd212WVNJRngwK1JhUEYyQXZM?= =?utf-8?B?bm5DNkJhVVlEZ1JiZC9pSWlCazFiRjBRb05uK0s0dHRtV3lvc1R4Zkl0UzVa?= =?utf-8?B?MEFreHNHc1RoMTQ5ejlMZz09?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW5PR11MB5908.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(1800799015)(376005)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?UDZPMUpVM0ZKTzFlT00rSHVWNlJVVmx3emJ2bGcxQmdZdk4yU3d0YTZ6QzlT?= =?utf-8?B?SXpEVXlFY1k0VUFjS3RqTXFPWVZGSFJMMFN3aGZoVHdlYWdlbXdieEY2QkRI?= =?utf-8?B?RzRpQ3pkcUdqNFB3SUYrZE5UTWljYlZWdU0zUFBWTlJrWFRrdlVKK0Z2RUpZ?= =?utf-8?B?YW1BTXhWRld1dUZuS0hzcDYyZlJkaEl3K2N3VCt1Z1psbXpBa1J2UmJTQUNy?= =?utf-8?B?K055N051QjN6MzlKZnRQN3c5Vi85N0ZHZWZmQTZIcm15bGROV21KMjRDYndw?= =?utf-8?B?ZjBqZDlqK1JRc2JRMWdIWS9FNjQzaW5hbkg2RWJtRnF5SmpiTjZ2MlRzT0Ri?= =?utf-8?B?cmZEYllnVXJ1a2RlWGd6QTRUekR6YVlKY2o5T0l2RGpzS3U3ajZyYldXa0gw?= =?utf-8?B?eEtuWVBvWVFMUXU3djBRNWVEa0FWS05qN3JzQ1BHaE0zVzl3Y2RBKzBpM2Vp?= =?utf-8?B?TjVENm9NMDVIRHdLbitRaWdPQWpDWFRnaXRBeU1ZTXNTUXdaVjlmMUN0OE53?= =?utf-8?B?cWhSNTVueEFHdFpNRXJVY3JjRldEdElIVGVrakFqajMybWVjbkVmY2JjRnhE?= =?utf-8?B?NG1rSk9KVXl6c3IzSVBTU25DSE4zU1VFd2tWNWVKTmpzWGNoOVNMQU5CQ0hT?= =?utf-8?B?cUxaZ1YyVlBZYTF4aUxwNHVEN1B1TU03VGg2ZkNmeXRCSzBHRzljY0I5YndW?= =?utf-8?B?L1A3YUFyQ0hpTHc3UWZndnZnc0E1T1Z5ZFU0Vjh5K1JtVmlsUlZVNXFvcktL?= =?utf-8?B?S3lTWjI2RmdFdWdnRnNVN2t3T0tPUG1nbkt4K3NGVVNPN0VmVEF5ZlZjZHo2?= =?utf-8?B?a0srL0tIYlZDY21FTGRtQzlnU1VJTmFBSFBCcDA2ZDlORmFKOUNnazNNcnRY?= =?utf-8?B?Uy9tbmF6WVc3V2xEMEowWE1jeXhqMjhYdGRjbS9ZOS9ZUVlVdnFwQmZ4Qk1C?= =?utf-8?B?amZKNWtwRUlGSlVHVTNOSFI0ZmFuQlp4VkxMeFJDcG1DWDdqZkp6L0FtSS9j?= =?utf-8?B?S2FtOXVEWENUTDUzbFdncjBlSzZUTk1rTHdRWUFSTkZMOE5sWFV4MFlqdmtw?= =?utf-8?B?bm1wYVNPMWxXbFNBYUQvekhrL3g0bG53S1pTaDVXWHZ2NGpkNHFBeVB0cWRX?= =?utf-8?B?KzNxQXZDZEZ6N3FCS2paRXlpbi8wTmQ3Y1JqZisvWUpJb0xKUTZTbTNtaHRZ?= =?utf-8?B?c1RSck5lMTVPbmtMM0wrQkN2cDNDWGp2UU1hRno3SHozN0RiOUV4ZjJmSXYr?= =?utf-8?B?MHU4ZlB1Z3VMcEZrZDNOUGNYV3hLdUNCd212SHRqaXlWWWRocWJCQVhUZWgx?= =?utf-8?B?SldXMXlOWWFDMlpxSytCMGlDcmpJQ2d0d3ZNRmdqWDl3VFNJUWZvTmVKRGFQ?= =?utf-8?B?VU5JRjVtNThBZU9oTkpTYWxlNHRLMHVqRVA5d3BFWHdDUzRwaVE5TzBlYnVz?= =?utf-8?B?RU9PckYvc01iN0V1ekpyN1FwTmxVMm80VW9VTmxvWXRHSHBFQnBDM1REMlNj?= =?utf-8?B?V25SSTlXYWpjVmF4OW1ya2owek9Cdnd1VzNnNWdQNG4wNkh4YVp4ZEE5ci9Y?= =?utf-8?B?YkR5a2hZZWpETTdWNHU0cllzK3ZhdlFSRjZyZ2VFT0lGa3VaaXJzRURuMXlE?= =?utf-8?B?S3V2cGR4ZWRiK29XcW1uTnQzeW9rTGlBbzg0cDFDQ3czbjQvelNrQVFEd3Ri?= =?utf-8?B?L29LVzFNSTZyaG9OWUVjVlNHVGM2Kzl5cGJKN2dabExCU2NDTTRDcXFCYjVs?= =?utf-8?B?VVJyK1loYmVvd3dLSEV0WkJNZ1N1cE5tMkpsdTZsVXQ3N2tpTHQxREhGenQy?= =?utf-8?B?dCtZWHNkZ0g3bW43ckxJVG83TFc5Q2x0U0RtV1VTejBnTzZoNTBUdnRSY1ll?= =?utf-8?B?UFpLUUVJQkpLMmQyQXhvL1lxeGR3RXB0TG1iWXRoa0s3enVCcnhpTUpKc0hI?= =?utf-8?B?WkM1Z2VVR3lxUUlvYllJWmZtTU4rL2k4SGxFUk4rL2VEWU1XOUhLNjBmMXdj?= =?utf-8?B?aHpkaU0xbzB6ZHpGeDNQWi9PQnJ5QTlhLzRVVjhyZVVpOVJVQ1grUlJXbDV3?= =?utf-8?B?aGZEbmZQNTJCY1VxSThObEx1THk5dDJ2allJVjJPbDhRNEdHdmJsNjE2SmZm?= =?utf-8?Q?HPro=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW5PR11MB5908.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 883e9ed9-1e68-441f-5d36-08dc7fe7b517 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 May 2024 14:00:33.1575 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: EUaoTOyzCzxoGfwlUCEubtAHp5KjtqwenA4I55bSv+EMbk8fHdq/PQPlcjNnrGKMX3nOM9nrl/MohXwYIUB4qg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR11MB6949 X-OriginatorOrg: intel.com X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: VGhhbmtzIFJpY2hhcmQgZm9yIHN1Z2dlc3Rpb24gYW5kIHJldmlldy4NCg0KRGlkIHNvbWUgdHJp Y2t5L3VnbHkgcmVzdHJpY3Rpb25zIHYzIGZvciB0aGUgcGhpIGdlbiBhcyB0aGVyZSBhcmUgDQpz b3J0cyBvZiAoY29uZCBpbiBtYXRjaC5wZCwgd2lsbCBoYXZlIGEgdHJ5IHdpdGggeW91ciBwcm9w b3NhbCBpbiB2NC4NClRoYW5rcyBhZ2FpbiBmb3IgaGVscC4NCg0KUGFuDQoNCi0tLS0tT3JpZ2lu YWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBSaWNoYXJkIEJpZW5lciA8cmljaGFyZC5ndWVudGhlckBn bWFpbC5jb20+IA0KU2VudDogV2VkbmVzZGF5LCBNYXkgMjksIDIwMjQgODozNiBQTQ0KVG86IExp LCBQYW4yIDxwYW4yLmxpQGludGVsLmNvbT4NCkNjOiBnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZzsg anV6aGUuemhvbmdAcml2YWkuYWk7IGtpdG8uY2hlbmdAZ21haWwuY29tOyB0YW1hci5jaHJpc3Rp bmFAYXJtLmNvbQ0KU3ViamVjdDogUmU6IFtQQVRDSCB2M10gTWF0Y2g6IFN1cHBvcnQgbW9yZSBm b3JtIGZvciBzY2FsYXIgdW5zaWduZWQgU0FUX0FERA0KDQpPbiBNb24sIE1heSAyNywgMjAyNCBh dCA4OjI54oCvQU0gPHBhbjIubGlAaW50ZWwuY29tPiB3cm90ZToNCj4NCj4gRnJvbTogUGFuIExp IDxwYW4yLmxpQGludGVsLmNvbT4NCj4NCj4gQWZ0ZXIgd2Ugc3VwcG9ydCBvbmUgZ2Fzc2lnbiBm b3JtIG9mIHRoZSB1bnNpZ25lZCAuU0FUX0FERCwgIHdlDQo+IHdvdWxkIGxpa2UgdG8gc3VwcG9y dCBtb3JlIGZvcm1zIGluY2x1ZGluZyBib3RoIHRoZSBicmFuY2ggYW5kDQo+IGJyYW5jaGxlc3Mu ICBUaGVyZSBhcmUgNSBvdGhlciBmb3JtcyBvZiAuU0FUX0FERCwgIGxpc3QgYXMgYmVsb3c6DQo+ DQo+IEZvcm0gMToNCj4gICAjZGVmaW5lIFNBVF9BRERfVV8xKFQpIFwNCj4gICBUIHNhdF9hZGRf dV8xXyMjVChUIHgsIFQgeSkgXA0KPiAgIHsgXA0KPiAgICAgcmV0dXJuIChUKSh4ICsgeSkgPj0g eCA/ICh4ICsgeSkgOiAtMTsgXA0KPiAgIH0NCj4NCj4gRm9ybSAyOg0KPiAgICNkZWZpbmUgU0FU X0FERF9VXzIoVCkgXA0KPiAgIFQgc2F0X2FkZF91XzJfIyNUKFQgeCwgVCB5KSBcDQo+ICAgeyBc DQo+ICAgICBUIHJldDsgXA0KPiAgICAgVCBvdmVyZmxvdyA9IF9fYnVpbHRpbl9hZGRfb3ZlcmZs b3cgKHgsIHksICZyZXQpOyBcDQo+ICAgICByZXR1cm4gKFQpKC1vdmVyZmxvdykgfCByZXQ7IFwN Cj4gICB9DQo+DQo+IEZvcm0gMzoNCj4gICAjZGVmaW5lIFNBVF9BRERfVV8zKFQpIFwNCj4gICBU IHNhdF9hZGRfdV8zXyMjVCAoVCB4LCBUIHkpIFwNCj4gICB7IFwNCj4gICAgIFQgcmV0OyBcDQo+ ICAgICByZXR1cm4gX19idWlsdGluX2FkZF9vdmVyZmxvdyAoeCwgeSwgJnJldCkgPyAtMSA6IHJl dDsgXA0KPiAgIH0NCj4NCj4gRm9ybSA0Og0KPiAgICNkZWZpbmUgU0FUX0FERF9VXzQoVCkgXA0K PiAgIFQgc2F0X2FkZF91XzRfIyNUIChUIHgsIFQgeSkgXA0KPiAgIHsgXA0KPiAgICAgVCByZXQ7 IFwNCj4gICAgIHJldHVybiBfX2J1aWx0aW5fYWRkX292ZXJmbG93ICh4LCB5LCAmcmV0KSA9PSAw ID8gcmV0IDogLTE7IFwNCj4gICB9DQo+DQo+IEZvcm0gNToNCj4gICAjZGVmaW5lIFNBVF9BRERf VV81KFQpIFwNCj4gICBUIHNhdF9hZGRfdV81XyMjVChUIHgsIFQgeSkgXA0KPiAgIHsgXA0KPiAg ICAgcmV0dXJuIChUKSh4ICsgeSkgPCB4ID8gLTEgOiAoeCArIHkpOyBcDQo+ICAgfQ0KPg0KPiBU YWtlIHRoZSBmb3JtcyAzIG9mIGFib3ZlIGFzIGV4YW1wbGU6DQo+DQo+IHVpbnQ2NF90DQo+IHNh dF9hZGQgKHVpbnQ2NF90IHgsIHVpbnQ2NF90IHkpDQo+IHsNCj4gICB1aW50NjRfdCByZXQ7DQo+ ICAgcmV0dXJuIF9fYnVpbHRpbl9hZGRfb3ZlcmZsb3cgKHgsIHksICZyZXQpID8gLTEgOiByZXQ7 DQo+IH0NCj4NCj4gQmVmb3JlIHRoaXMgcGF0Y2g6DQo+IHVpbnQ2NF90IHNhdF9hZGQgKHVpbnQ2 NF90IHgsIHVpbnQ2NF90IHkpDQo+IHsNCj4gICBsb25nIHVuc2lnbmVkIGludCBfMTsNCj4gICBs b25nIHVuc2lnbmVkIGludCBfMjsNCj4gICB1aW50NjRfdCBfMzsNCj4gICBfX2NvbXBsZXhfXyBs b25nIHVuc2lnbmVkIGludCBfNjsNCj4NCj4gOzsgICBiYXNpYyBibG9jayAyLCBsb29wIGRlcHRo IDANCj4gOzsgICAgcHJlZDogICAgICAgRU5UUlkNCj4gICBfNiA9IC5BRERfT1ZFUkZMT1cgKHhf NChEKSwgeV81KEQpKTsNCj4gICBfMiA9IElNQUdQQVJUX0VYUFIgPF82PjsNCj4gICBpZiAoXzIg IT0gMCkNCj4gICAgIGdvdG8gPGJiIDQ+OyBbMzUuMDAlXQ0KPiAgIGVsc2UNCj4gICAgIGdvdG8g PGJiIDM+OyBbNjUuMDAlXQ0KPiA7OyAgICBzdWNjOiAgICAgICA0DQo+IDs7ICAgICAgICAgICAg ICAgIDMNCj4NCj4gOzsgICBiYXNpYyBibG9jayAzLCBsb29wIGRlcHRoIDANCj4gOzsgICAgcHJl ZDogICAgICAgMg0KPiAgIF8xID0gUkVBTFBBUlRfRVhQUiA8XzY+Ow0KPiA7OyAgICBzdWNjOiAg ICAgICA0DQo+DQo+IDs7ICAgYmFzaWMgYmxvY2sgNCwgbG9vcCBkZXB0aCAwDQo+IDs7ICAgIHBy ZWQ6ICAgICAgIDMNCj4gOzsgICAgICAgICAgICAgICAgMg0KPiAgICMgXzMgPSBQSEkgPF8xKDMp LCAxODQ0Njc0NDA3MzcwOTU1MTYxNSgyKT4NCj4gICByZXR1cm4gXzM7DQo+IDs7ICAgIHN1Y2M6 ICAgICAgIEVYSVQNCj4gfQ0KPg0KPiBBZnRlciB0aGlzIHBhdGNoOg0KPiB1aW50NjRfdCBzYXRf YWRkICh1aW50NjRfdCB4LCB1aW50NjRfdCB5KQ0KPiB7DQo+ICAgbG9uZyB1bnNpZ25lZCBpbnQg XzEyOw0KPg0KPiA7OyAgIGJhc2ljIGJsb2NrIDIsIGxvb3AgZGVwdGggMA0KPiA7OyAgICBwcmVk OiAgICAgICBFTlRSWQ0KPiAgIF8xMiA9IC5TQVRfQUREICh4XzQoRCksIHlfNShEKSk7IFt0YWls IGNhbGxdDQo+ICAgcmV0dXJuIF8xMjsNCj4gOzsgICAgc3VjYzogICAgICAgRVhJVA0KPiB9DQo+ DQo+IFRoZSBiZWxvdyB0ZXN0IHN1aXRlcyBhcmUgc3RpbGwgcnVubmluZywgd2lsbCB1cGRhdGUg aXQgbGF0ZXIuDQo+ICogVGhlIHg4NiBib290c3RyYXAgdGVzdC4NCj4gKiBUaGUgeDg2IGZ1bGx5 IHJlZ3Jlc3Npb24gdGVzdC4NCj4gKiBUaGUgcmlzY3YgZnVsbHkgcmVncmVzc2lvbiB0ZXN0Lg0K Pg0KPiBnY2MvQ2hhbmdlTG9nOg0KPg0KPiAgICAgICAgICogZ2VubWF0Y2guY2MgKGR0X25vZGU6 Omdlbl9raWRzKTogQWRkIG5ldyBhcmcgb2YgcHJlZGljYXRlIGlkLg0KPiAgICAgICAgIChhbGxv d19waGlfcHJlZGljYXRlX3ApOiBOZXcgZnVuYyBpbXBsIHRvIGNoZWNrIHRoZSBwaGkNCj4gICAg ICAgICBwcmVkaWNhdGUgaXMgYWxsb3dlZCBvciBub3QuDQo+ICAgICAgICAgKGR0X25vZGU6Omdl bl9raWRzXzEpOiBBZGQgQ09ORF9FWFBSIGdlbiBmb3IgcGhpIG5vZGUgaWYgYWxsb3dlZC4NCj4g ICAgICAgICAoZHRfb3BlcmFuZDo6Z2VuX3BoaV9vbl9jb25kKToNCj4gICAgICAgICAod3JpdGVf cHJlZGljYXRlKTogSW5pdCB0aGUgcHJlZGljYXRlIGlkIGJlZm9yZSBnZW5fa2lkcy4NCj4gICAg ICAgICAqIG1hdGNoLnBkOiBBZGQgbW9yZSBmb3JtcyBvZiB1bnNpZ25lZF9pbnRlZ2VyX3NhdF9h ZGQgYW5kDQo+ICAgICAgICAgY29tbWVudHMuDQo+ICAgICAgICAgKiB0cmVlLXNzYS1tYXRoLW9w dHMuY2MgKG1hdGNoX3NhdHVyYXRpb25fYXJpdGgpOiBSZW5hbWUgZnJvbS4NCj4gICAgICAgICAo bWF0Y2hfYXNzaWduX3NhdHVyYXRpb25fYXJpdGgpOiBSZW5hbWUgdG8uDQo+ICAgICAgICAgKG1h dGNoX3BoaV9zYXR1cmF0aW9uX2FyaXRoKTogTmV3IGZ1bmMgaW1wbCB0byBtYXRjaCBwaGkuDQo+ ICAgICAgICAgKG1hdGhfb3B0c19kb21fd2Fsa2VyOjphZnRlcl9kb21fY2hpbGRyZW4pOiBBZGQg cGhpIG1hdGNoIGZvcg0KPiAgICAgICAgIGVjaG8gYmIuDQo+DQo+IFNpZ25lZC1vZmYtYnk6IFBh biBMaSA8cGFuMi5saUBpbnRlbC5jb20+DQo+IC0tLQ0KPiAgZ2NjL2dlbm1hdGNoLmNjICAgICAg ICAgICB8IDEyMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQ0KPiAgZ2Nj L21hdGNoLnBkICAgICAgICAgICAgICB8ICA0MyArKysrKysrKysrKystDQo+ICBnY2MvdHJlZS1z c2EtbWF0aC1vcHRzLmNjIHwgIDUxICsrKysrKysrKysrKysrKy0NCj4gIDMgZmlsZXMgY2hhbmdl ZCwgMjEwIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pDQo+DQo+IGRpZmYgLS1naXQgYS9n Y2MvZ2VubWF0Y2guY2MgYi9nY2MvZ2VubWF0Y2guY2MNCj4gaW5kZXggZjFlMGU3YWJlMGMuLjgx NmQyZGFmZDIzIDEwMDY0NA0KPiAtLS0gYS9nY2MvZ2VubWF0Y2guY2MNCj4gKysrIGIvZ2NjL2dl bm1hdGNoLmNjDQo+IEBAIC0xNzY3LDYgKzE3NjcsNyBAQCBwdWJsaWM6DQo+ICAgIHVuc2lnbmVk IGxldmVsOw0KPiAgICBkdF9ub2RlICpwYXJlbnQ7DQo+ICAgIHZlYzxkdF9ub2RlICo+IGtpZHM7 DQo+ICsgIGNvbnN0IGNoYXIgKmlkOw0KPg0KPiAgICAvKiBTdGF0aXN0aWNzLiAgKi8NCj4gICAg dW5zaWduZWQgbnVtX2xlYWZzOw0KPiBAQCAtMTc4Niw3ICsxNzg3LDcgQEAgcHVibGljOg0KPiAg ICB2aXJ0dWFsIHZvaWQgZ2VuIChGSUxFICosIGludCwgYm9vbCwgaW50KSB7fQ0KPg0KPiAgICB2 b2lkIGdlbl9raWRzIChGSUxFICosIGludCwgYm9vbCwgaW50KTsNCj4gLSAgdm9pZCBnZW5fa2lk c18xIChGSUxFICosIGludCwgYm9vbCwgaW50LA0KPiArICB2b2lkIGdlbl9raWRzXzEgKEZJTEUg KiwgY29uc3QgY2hhciAqLCBpbnQsIGJvb2wsIGludCwNCj4gICAgICAgICAgICAgICAgICAgIGNv bnN0IHZlYzxkdF9vcGVyYW5kICo+ICYsIGNvbnN0IHZlYzxkdF9vcGVyYW5kICo+ICYsDQo+ICAg ICAgICAgICAgICAgICAgICBjb25zdCB2ZWM8ZHRfb3BlcmFuZCAqPiAmLCBjb25zdCB2ZWM8ZHRf b3BlcmFuZCAqPiAmLA0KPiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjPGR0X29wZXJhbmQg Kj4gJiwgY29uc3QgdmVjPGR0X25vZGUgKj4gJik7DQo+IEBAIC0xODE5LDYgKzE4MjAsNyBAQCBw dWJsaWM6DQo+DQo+ICAgIGNoYXIgKmdldF9uYW1lIChjaGFyICopOw0KPiAgICB2b2lkIGdlbl9v cG5hbWUgKGNoYXIgKiwgdW5zaWduZWQpOw0KPiArICB2b2lkIGdlbl9waGlfb25fY29uZCAoRklM RSAqLCBpbnQsIGJvb2wsIGludCk7DQo+ICB9Ow0KPg0KPiAgLyogTGVhZiBub2RlIG9mIHRoZSBk ZWNpc2lvbiB0cmVlLCB1c2VkIGZvciBEVF9TSU1QTElGWS4gICovDQo+IEBAIC0zMTczLDcgKzMx NzUsNyBAQCBkdF9ub2RlOjpnZW5fa2lkcyAoRklMRSAqZiwgaW50IGluZGVudCwgYm9vbCBnaW1w bGUsIGludCBkZXB0aCkNCj4gICAgICAgICAgICAgIGZvciB3aGF0IHdlIGhhdmUgY29sbGVjdGVk IHNvZmFyLiAgKi8NCj4gICAgICAgICAgIGZucy5xc29ydCAoZm5zX2NtcCk7DQo+ICAgICAgICAg ICBnZW5lcmljX2Zucy5xc29ydCAoZm5zX2NtcCk7DQo+IC0gICAgICAgICBnZW5fa2lkc18xIChm LCBpbmRlbnQsIGdpbXBsZSwgZGVwdGgsIGdpbXBsZV9leHBycywgZ2VuZXJpY19leHBycywNCj4g KyAgICAgICAgIGdlbl9raWRzXzEgKGYsIGlkLCBpbmRlbnQsIGdpbXBsZSwgZGVwdGgsIGdpbXBs ZV9leHBycywgZ2VuZXJpY19leHBycywNCj4gICAgICAgICAgICAgICAgICAgICAgIGZucywgZ2Vu ZXJpY19mbnMsIHByZWRzLCBvdGhlcnMpOw0KPiAgICAgICAgICAgLyogQW5kIG91dHB1dCB0aGUg dHJ1ZSBvcGVyYW5kIGl0c2VsZi4gICovDQo+ICAgICAgICAgICBraWRzW2ldLT5nZW4gKGYsIGlu ZGVudCwgZ2ltcGxlLCBkZXB0aCk7DQo+IEBAIC0zMTkxLDE0ICszMTkzLDIxIEBAIGR0X25vZGU6 Omdlbl9raWRzIChGSUxFICpmLCBpbnQgaW5kZW50LCBib29sIGdpbXBsZSwgaW50IGRlcHRoKQ0K PiAgICAvKiBHZW5lcmF0ZSBjb2RlIGZvciB0aGUgcmVtYWlucy4gICovDQo+ICAgIGZucy5xc29y dCAoZm5zX2NtcCk7DQo+ICAgIGdlbmVyaWNfZm5zLnFzb3J0IChmbnNfY21wKTsNCj4gLSAgZ2Vu X2tpZHNfMSAoZiwgaW5kZW50LCBnaW1wbGUsIGRlcHRoLCBnaW1wbGVfZXhwcnMsIGdlbmVyaWNf ZXhwcnMsDQo+ICsgIGdlbl9raWRzXzEgKGYsIGlkLCBpbmRlbnQsIGdpbXBsZSwgZGVwdGgsIGdp bXBsZV9leHBycywgZ2VuZXJpY19leHBycywNCj4gICAgICAgICAgICAgICBmbnMsIGdlbmVyaWNf Zm5zLCBwcmVkcywgb3RoZXJzKTsNCj4gIH0NCj4NCj4gK3N0YXRpYyBib29sDQo+ICthbGxvd19w aGlfcHJlZGljYXRlX3AgKGNvbnN0IGNoYXIgKmlkKQ0KPiArew0KPiArICByZXR1cm4gaWQgJiYg c3RyY21wIChpZCwgInVuc2lnbmVkX2ludGVnZXJfc2F0X2FkZCIpID09IDA7DQoNCk9mIGNvdXJz ZSB0aGF0J3Mgbm90IE9LLiAgSSBzdWdnZXN0IHRvIGVpdGhlciBjaGVjayAuLi4NCg0KPiArfQ0K PiArDQo+ICAvKiBHZW5lcmF0ZSBtYXRjaGluZyBjb2RlIGZvciB0aGUgY2hpbGRyZW4gb2YgdGhl IGRlY2lzaW9uIHRyZWUgbm9kZS4gICovDQo+DQo+ICB2b2lkDQo+IC1kdF9ub2RlOjpnZW5fa2lk c18xIChGSUxFICpmLCBpbnQgaW5kZW50LCBib29sIGdpbXBsZSwgaW50IGRlcHRoLA0KPiArZHRf bm9kZTo6Z2VuX2tpZHNfMSAoRklMRSAqZiwgY29uc3QgY2hhciAqaWQsIGludCBpbmRlbnQsIGJv b2wgZ2ltcGxlLA0KPiArICAgICAgICAgICAgICAgICAgICBpbnQgZGVwdGgsDQo+ICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHZlYzxkdF9vcGVyYW5kICo+ICZnaW1wbGVfZXhwcnMsDQo+ICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlYzxkdF9vcGVyYW5kICo+ICZnZW5lcmljX2V4cHJz LA0KPiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWM8ZHRfb3BlcmFuZCAqPiAmZm5zLA0K PiBAQCAtMzI1MSw2ICszMjYwLDcgQEAgZHRfbm9kZTo6Z2VuX2tpZHNfMSAoRklMRSAqZiwgaW50 IGluZGVudCwgYm9vbCBnaW1wbGUsIGludCBkZXB0aCwNCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICBkZXB0aCk7DQo+ICAgICAgICAgICBpbmRlbnQgKz0gNDsNCj4gICAgICAgICAgIGZwcmlu dGZfaW5kZW50IChmLCBpbmRlbnQsICJ7XG4iKTsNCj4gKyAgICAgICAgIGJvb2wgY29uZF9leHBy X3AgPSBmYWxzZTsNCj4gICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHByc19s ZW47ICsraSkNCj4gICAgICAgICAgICAgew0KPiAgICAgICAgICAgICAgIGV4cHIgKmUgPSBhc19h IDxleHByICo+IChnaW1wbGVfZXhwcnNbaV0tPm9wKTsNCj4gQEAgLTMyNjIsNiArMzI3Miw3IEBA IGR0X25vZGU6Omdlbl9raWRzXzEgKEZJTEUgKmYsIGludCBpbmRlbnQsIGJvb2wgZ2ltcGxlLCBp bnQgZGVwdGgsDQo+ICAgICAgICAgICAgICAgZWxzZQ0KPiAgICAgICAgICAgICAgICAgew0KPiAg ICAgICAgICAgICAgICAgICBpZF9iYXNlICpvcCA9IGUtPm9wZXJhdGlvbjsNCj4gKyAgICAgICAg ICAgICAgICAgY29uZF9leHByX3AgfD0gKm9wID09IENPTkRfRVhQUjsNCj4gICAgICAgICAgICAg ICAgICAgaWYgKCpvcCA9PSBDT05WRVJUX0VYUFIgfHwgKm9wID09IE5PUF9FWFBSKQ0KPiAgICAg ICAgICAgICAgICAgICAgIGZwcmludGZfaW5kZW50IChmLCBpbmRlbnQsICJDQVNFX0NPTlZFUlQ6 XG4iKTsNCj4gICAgICAgICAgICAgICAgICAgZWxzZQ0KPiBAQCAtMzI3NSw2ICszMjg2LDI3IEBA IGR0X25vZGU6Omdlbl9raWRzXzEgKEZJTEUgKmYsIGludCBpbmRlbnQsIGJvb2wgZ2ltcGxlLCBp bnQgZGVwdGgsDQo+ICAgICAgICAgICBmcHJpbnRmX2luZGVudCAoZiwgaW5kZW50LCAiZGVmYXVs dDo7XG4iKTsNCj4gICAgICAgICAgIGZwcmludGZfaW5kZW50IChmLCBpbmRlbnQsICJ9XG4iKTsN Cj4gICAgICAgICAgIGluZGVudCAtPSA0Ow0KPiArDQo+ICsgICAgICAgICBpZiAoY29uZF9leHBy X3AgJiYgYWxsb3dfcGhpX3ByZWRpY2F0ZV9wIChpZCkpDQoNCi4uLiB0aGlzLT5wYXJlbnQgPT0g bnVsbHB0ciByZXN0cmljdGluZyBQSEkgaGFuZGxpbmcgdG8gdGhlIG91dGVybW9zdA0KQ09ORF9F WFBSLCB3aGljaA0KaXMgcHJvYmFibHkgYSBnb29kIGlkZWEgKGJ1dCB0aGVyZSdzIG5vIHdheSB0 byBzZWUgd2UncmUgaW4gYSBtYXRjaCBvcg0KaW4gYSBzaW1wbGlmeSkuDQpPciBldmVuIGJldHRl ciwgZWl0aGVyIG1hcmsgdGhlIGV4cHJlc3Npb24gbm9kZSB3aXRoIGEgbmV3IGZsYWcgKG1ha2UN CnN1cmUgdG8gbm90DQptZXJnZSBjb25kIHdpdGgvd2l0aG91dCB0aGUgZmxhZyBkdXJpbmcgZGVj aXNpb24gdHJlZSBpbnNlcnQpLCBhZGQgYSBuZXcNCm9wZXJhdGlvbiBjb2RlIGxpa2UgKGNvbmRf b3JfcGhpIC4uLikgYW5kIGVpdGhlciBoYW5kbGUgb3IgbG93ZXIgaXQsDQp3aXRoIGxvd2VyaW5n DQppbnRyb2R1Y2luZyB5ZXQgYW5vdGhlciBvcGVyYXRpb24sIChwaGkgLi4pLiAgRnJvbSBhbGwg b2YgdGhlIGFib3ZlIHNpbXBseSBkb2luZw0KdGhpcy0+cGFyZW50ID09IG51bGxwdHIgYW5kIGFk ZGluZyBhIGdsb2JhbCBmbGFnICJ3cml0aW5nX3ByZWRpY2F0ZSINCnRvIG1ha2Ugc3VyZQ0KdG8g b25seSBjb3ZlciAobWF0Y2ggLi4uKSBpcyB0aGUgc2ltcGxlc3QuICBJIHNvbWV3aGF0IGRpc2xp a2UgYWRkaW5nDQpmYWtlIG9wZXJhdGlvbg0KY29kZXMgc28gYSBmbGFnLCBsaWtlICdeJyAoY29u ZF4gLi4uKSwgd291bGQgYmUgbXkgc2Vjb25kIGNob2ljZSB3aGVyZSBJJ2QgbGltaXQNCnRoYXQg dG8gKG1hdGNoIGFuZCB0aGUgb3V0ZXJtb3N0IGNvbmQgd2l0aGluIHRoYXQgdW5sZXNzIHdlIHNl ZSBuZWVkIGZvciBtb3JlDQpjYXNlcy4gIFRoZXJlIGFyZSBhIGZldyBleGlzdGluZyAobWF0Y2gg KGNvbmQgLi4pKSBwYXR0ZXJucyBzbyB0aGUNCmZsYWcgbG9va3MgbGlrZQ0KdGhlIHNhZmVzdCBv cHRpb24gLSBub3QgYWxsIHVzZXJzIG1pZ2h0IGV4cGVjdCBQSElzLg0KDQo+ICsgICAgICAgICAg IHsNCj4gKyAgICAgICAgICAgICBmcHJpbnRmX2luZGVudCAoZiwgaW5kZW50LA0KPiArICAgICAg ICAgICAgICAgImVsc2UgaWYgKGdwaGkgKl9hJWQgPSBkeW5fY2FzdCA8Z3BoaSAqPiAoX2QlZCkp XG4iLA0KPiArICAgICAgICAgICAgICAgZGVwdGgsIGRlcHRoKTsNCj4gKyAgICAgICAgICAgICBp bmRlbnQgKz0gMjsNCj4gKyAgICAgICAgICAgICBmcHJpbnRmX2luZGVudCAoZiwgaW5kZW50LCAi e1xuIik7DQo+ICsgICAgICAgICAgICAgaW5kZW50ICs9IDI7DQo+ICsNCj4gKyAgICAgICAgICAg ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhwcnNfbGVuOyBpKyspDQo+ICsgICAgICAgICAg ICAgICB7DQo+ICsgICAgICAgICAgICAgICAgIGV4cHIgKmUgPSBhc19hIDxleHByICo+IChnaW1w bGVfZXhwcnNbaV0tPm9wKTsNCj4gKyAgICAgICAgICAgICAgICAgaWYgKCplLT5vcGVyYXRpb24g PT0gQ09ORF9FWFBSKQ0KPiArICAgICAgICAgICAgICAgICAgIGdpbXBsZV9leHByc1tpXS0+Z2Vu X3BoaV9vbl9jb25kIChmLCBpbmRlbnQsIHRydWUsIGRlcHRoKTsNCj4gKyAgICAgICAgICAgICAg IH0NCj4gKw0KPiArICAgICAgICAgICAgIGluZGVudCAtPSAyOw0KPiArICAgICAgICAgICAgIGZw cmludGZfaW5kZW50IChmLCBpbmRlbnQsICJ9XG4iKTsNCj4gKyAgICAgICAgICAgICBpbmRlbnQg LT0gMjsNCj4gKyAgICAgICAgICAgfQ0KPiAgICAgICAgIH0NCj4NCj4gICAgICAgIGlmIChmbnNf bGVuKQ0KPiBAQCAtMzQ4Myw2ICszNTE1LDg3IEBAIGR0X29wZXJhbmQ6OmdlbiAoRklMRSAqZiwg aW50IGluZGVudCwgYm9vbCBnaW1wbGUsIGludCBkZXB0aCkNCj4gICAgICB9DQo+ICB9DQo+DQo+ ICsvKiBHZW5lcmF0ZSBtYXRjaGluZyBjb2RlIGZvciB0aGUgcGhpIHdoZW4gbWVldCBDT05EX0VY UFIuICAqLw0KPiArDQo+ICt2b2lkDQo+ICtkdF9vcGVyYW5kOjpnZW5fcGhpX29uX2NvbmQgKEZJ TEUgKmYsIGludCBpbmRlbnQsIGJvb2wgZ2ltcGxlLCBpbnQgZGVwdGgpDQoNCk5vdGUgdGhpcyBp cyBpbXBsaWNpdGx5ICdnaW1wbGUnLCBubyBuZWVkIHRvIHBhc3MgdGhhdCBmbGFnLg0KDQo+ICt7 DQo+ICsgIGZwcmludGZfaW5kZW50IChmLCBpbmRlbnQsDQo+ICsgICAgImJhc2ljX2Jsb2NrIF9i JWQgPSBnaW1wbGVfYmIgKF9hJWQpO1xuIiwgZGVwdGgsIGRlcHRoKTsNCj4gKw0KPiArICBmcHJp bnRmX2luZGVudCAoZiwgaW5kZW50LA0KPiArICAgICJpZiAoRURHRV9DT1VOVCAoX2IlZC0+cHJl ZHMpID09IDIgJiYgZ2ltcGxlX3BoaV9udW1fYXJncyAoX2ElZCkgPT0gMilcbiIsDQo+ICsgICAg ZGVwdGgsIGRlcHRoKTsNCg0KRWl0aGVyIGlzIHJlZHVuZGFudCAtIHRoZSBudW1iZXIgb2YgcHJl ZHMgYWx3YXlzIG1hdGNoZXMgdGhlIG51bWJlciBvZiBQSEkgYXJncy4NCg0KPiArDQo+ICsgIGlu ZGVudCArPSAyOw0KPiArICBmcHJpbnRmX2luZGVudCAoZiwgaW5kZW50LCAie1xuIik7DQo+ICsg IGluZGVudCArPSAyOw0KPiArDQo+ICsgIGZwcmludGZfaW5kZW50IChmLCBpbmRlbnQsDQo+ICsg ICAgImJhc2ljX2Jsb2NrIF9wYl8wXyVkID0gRURHRV9QUkVEIChfYiVkLCAwKS0+c3JjO1xuIiwg ZGVwdGgsIGRlcHRoKTsNCj4gKyAgZnByaW50Zl9pbmRlbnQgKGYsIGluZGVudCwNCj4gKyAgICAi YmFzaWNfYmxvY2sgX3BiXzFfJWQgPSBFREdFX1BSRUQgKF9iJWQsIDEpLT5zcmM7XG4iLCBkZXB0 aCwgZGVwdGgpOw0KPiArICBmcHJpbnRmX2luZGVudCAoZiwgaW5kZW50LA0KPiArICAgICJiYXNp Y19ibG9jayBfZGJfJWQgPSBzYWZlX2R5bl9jYXN0IDxnY29uZCAqPiAoKmdzaV9sYXN0X2JiIChf cGJfMF8lZCkpID8gIg0KPiArICAgICJfcGJfMF8lZCA6IF9wYl8xXyVkO1xuIiwgZGVwdGgsIGRl cHRoLCBkZXB0aCwgZGVwdGgpOw0KPiArICBmcHJpbnRmX2luZGVudCAoZiwgaW5kZW50LA0KPiAr ICAgICJiYXNpY19ibG9jayBfb3RoZXJfZGJfJWQgPSBzYWZlX2R5bl9jYXN0IDxnY29uZCAqPiAi DQo+ICsgICAgIigqZ3NpX2xhc3RfYmIgKF9wYl8wXyVkKSkgPyBfcGJfMV8lZCA6IF9wYl8wXyVk O1xuIiwNCj4gKyAgICBkZXB0aCwgZGVwdGgsIGRlcHRoLCBkZXB0aCk7DQo+ICsNCj4gKyAgZnBy aW50Zl9pbmRlbnQgKGYsIGluZGVudCwNCj4gKyAgICAiZ2NvbmQgKl9jdF8lZCA9IHNhZmVfZHlu X2Nhc3QgPGdjb25kICo+ICgqZ3NpX2xhc3RfYmIgKF9kYl8lZCkpO1xuICIsDQo+ICsgICAgZGVw dGgsIGRlcHRoKTsNCj4gKyAgZnByaW50Zl9pbmRlbnQgKGYsIGluZGVudCwgImlmIChfY3RfJWQg Ig0KPiArICAgICImJiBFREdFX0NPVU5UIChfb3RoZXJfZGJfJWQtPnByZWRzKSA9PSAxICINCj4g KyAgICAiJiYgRURHRV9DT1VOVCAoX290aGVyX2RiXyVkLT5zdWNjcykgPT0gMSAiDQo+ICsgICAg IiYmIEVER0VfU1VDQyAoX290aGVyX2RiXyVkLCAwKS0+ZGVzdCA9PSBfYiVkKVxuIiwNCj4gKyAg ICBkZXB0aCwgZGVwdGgsIGRlcHRoLCBkZXB0aCwgZGVwdGgpOw0KPiArDQo+ICsgIGluZGVudCAr PSAyOw0KPiArICBmcHJpbnRmX2luZGVudCAoZiwgaW5kZW50LCAie1xuIik7DQo+ICsgIGluZGVu dCArPSAyOw0KDQpJJ20gcXVvdGluZyBnZW5lcmF0ZWQgY29kZSBoZXJlOg0KDQogICAgICAgICAg ZWxzZSBpZiAoZ3BoaSAqX2ExID0gZHluX2Nhc3QgPGdwaGkgKj4gKF9kMSkpDQogICAgICAgICAg ICB7DQogICAgICAgICAgICAgIGJhc2ljX2Jsb2NrIF9iMSA9IGdpbXBsZV9iYiAoX2ExKTsNCiAg ICAgICAgICAgICAgaWYgKEVER0VfQ09VTlQgKF9iMS0+cHJlZHMpID09IDIgJiYgZ2ltcGxlX3Bo aV9udW1fYXJncw0KKF9hMSkgPT0gMikNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg ICAgICBiYXNpY19ibG9jayBfcGJfMF8xID0gRURHRV9QUkVEIChfYjEsIDApLT5zcmM7DQogICAg ICAgICAgICAgICAgICBiYXNpY19ibG9jayBfcGJfMV8xID0gRURHRV9QUkVEIChfYjEsIDEpLT5z cmM7DQogICAgICAgICAgICAgICAgICBiYXNpY19ibG9jayBfZGJfMSA9IHNhZmVfZHluX2Nhc3Qg PGdjb25kICo+DQooKmdzaV9sYXN0X2JiIChfcGJfMF8xKSkgPyBfcGJfMF8xIDogX3BiXzFfMTsN CiAgICAgICAgICAgICAgICAgIGJhc2ljX2Jsb2NrIF9vdGhlcl9kYl8xID0gc2FmZV9keW5fY2Fz dCA8Z2NvbmQgKj4NCigqZ3NpX2xhc3RfYmIgKF9wYl8wXzEpKSA/IF9wYl8xXzEgOiBfcGJfMF8x Ow0KDQpfb3RoZXJfZGJfMSA9IF9kYl8xID09IF9wYl8wXzEgOiBfcGJfMV8xIDogX3BiXzBfMTsN Cg0KICAgICAgICAgICAgICAgICAgZ2NvbmQgKl9jdF8xID0gc2FmZV9keW5fY2FzdCA8Z2NvbmQg Kj4gKCpnc2lfbGFzdF9iYiAoX2RiXzEpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChfY3RfMSAm JiBFREdFX0NPVU5UIChfb3RoZXJfZGJfMS0+cHJlZHMpID09IDEgJiYNCkVER0VfQ09VTlQgKF9v dGhlcl9kYl8xLT5zdWNjcykgPT0gMSAmJiBFREdFX1NVQ0MgKF9vdGhlcl9kYl8xLA0KMCktPmRl c3QgPT0gX2IxKQ0KDQpuZXcgbGluZXMgd2l0aCBpbmRlbnRpbmcgJiYgRURHRV9DT1VOVCBjaGVj a3MgcGxlYXNlLg0KSSB0aGluayAgRURHRV9TVUNDIChfb3RoZXJfZGJfMSwgMCktPmRlc3QgPT0g X2IxIGlzIHBvaW50bGVzcy4gIEluc3RlYWQNCnlvdSB3YW50IHRvIGNoZWNrIEVER0VfUFJFRCAo X290aGVyX2RiXzEsIDApLT5zcmMgPT0gX2RiXzE/DQoNCiAgICAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICAgICAgdHJlZSBfY29uZF9saHNfMSA9IGdpbXBsZV9jb25kX2xocyAo X2N0XzEpOw0KICAgICAgICAgICAgICAgICAgICAgIHRyZWUgX2NvbmRfcmhzXzEgPSBnaW1wbGVf Y29uZF9yaHMgKF9jdF8xKTsNCiAgICAgICAgICAgICAgICAgICAgICB0cmVlIF9wMCA9IGJ1aWxk MiAoZ2ltcGxlX2NvbmRfY29kZSAoX2N0XzEpLA0KYm9vbGVhbl90eXBlX25vZGUsIF9jb25kX2xo c18xLCBfY29uZF9yaHNfMSk7DQogICAgICAgICAgICAgICAgICAgICAgYm9vbCBfYXJnXzBfaXNf dHJ1ZV8xID0gZ2ltcGxlX3BoaV9hcmdfZWRnZQ0KKF9hMSwgMCktPmZsYWdzICAmIEVER0VfVFJV RV9WQUxVRTsNCg0KSG1tLCB5b3UgZG9uJ3Qga25vdyB0aGlzIFBISSBhcmcgZWRnZSBjb21lcyBm cm9tIHRoZSBjb25kIGJsb2NrLCBpdCBjb3VsZCBjb21lDQpmcm9tIHRoZSBtaWRkbGUtYmIuDQoN Ck90aGVyd2lzZSBJIHRoaW5rIHRoaXMgd2lsbCB3b3JrLCBvZiBjb3Vyc2UgaXQgZGVwZW5kcyBv biB1cyBoYW5kbGluZw0KR0VORVJJQyBjb25kaXRpb25zIGluIENPTkRfRVhQUnMuICBOb3QgYnVp bGRpbmcgdGhlIF9wMCBHRU5FUklDIHRyZWUNCndvdWxkIGJlIG5pY2UgYnV0IHRoYXQncyBxdWl0 ZSBkaWZmaWN1bHQgdG8gcHVsbCBvZmYgaGVyZSAoaW1wb3NzaWJsZSBldmVuKS4NCg0KT3ZlcmFs bCBJIGxpa2UgaXQuICBDYW4geW91IHBsZWFzZSB0cnkgbWFraW5nIHRoZSAnXicgZmxhZyB3b3Jr DQppbnN0ZWFkIChhbHNvIGRvY3VtZW50DQppdCBpbiBkb2MvbWF0Y2gtYW5kLXNpbXBsaWZ5LnRl eGkpPw0KDQpUaGFua3MgZm9yIHdvcmtpbmcgb24gdGhpcy4NCg0KUmljaGFyZC4NCg0KICAgICAg ICAgICAgICAgICAgICAgIHRyZWUgX3AxID0gZ2ltcGxlX3BoaV9hcmdfZGVmIChfYTEsDQpfYXJn XzBfaXNfdHJ1ZV8xID8gMCA6IDEpOw0KICAgICAgICAgICAgICAgICAgICAgIHRyZWUgX3AyID0g Z2ltcGxlX3BoaV9hcmdfZGVmIChfYTEsDQpfYXJnXzBfaXNfdHJ1ZV8xID8gMSA6IDApOw0KDQoN Cj4gKyAgZnByaW50Zl9pbmRlbnQgKGYsIGluZGVudCwNCj4gKyAgICAidHJlZSBfY29uZF9saHNf JWQgPSBnaW1wbGVfY29uZF9saHMgKF9jdF8lZCk7XG4iLCBkZXB0aCwgZGVwdGgpOw0KPiArICBm cHJpbnRmX2luZGVudCAoZiwgaW5kZW50LA0KPiArICAgICJ0cmVlIF9jb25kX3Joc18lZCA9IGdp bXBsZV9jb25kX3JocyAoX2N0XyVkKTtcbiIsIGRlcHRoLCBkZXB0aCk7DQo+ICsNCj4gKyAgY2hh ciBvcG5hbWVfMFsyMF07DQo+ICsgIGNoYXIgb3BuYW1lXzFbMjBdOw0KPiArICBjaGFyIG9wbmFt ZV8yWzIwXTsNCj4gKyAgZ2VuX29wbmFtZSAob3BuYW1lXzAsIDApOw0KPiArDQo+ICsgIGZwcmlu dGZfaW5kZW50IChmLCBpbmRlbnQsDQo+ICsgICAgInRyZWUgJXMgPSBidWlsZDIgKGdpbXBsZV9j b25kX2NvZGUgKF9jdF8lZCksICINCj4gKyAgICAiYm9vbGVhbl90eXBlX25vZGUsIF9jb25kX2xo c18lZCwgX2NvbmRfcmhzXyVkKTtcbiIsDQo+ICsgICAgb3BuYW1lXzAsIGRlcHRoLCBkZXB0aCwg ZGVwdGgpOw0KPiArDQo+ICsgIGZwcmludGZfaW5kZW50IChmLCBpbmRlbnQsDQo+ICsgICAgImJv b2wgX2FyZ18wX2lzX3RydWVfJWQgPSBnaW1wbGVfcGhpX2FyZ19lZGdlIChfYSVkLCAwKS0+Zmxh Z3MgIg0KPiArICAgICIgJiBFREdFX1RSVUVfVkFMVUU7XG4iLCBkZXB0aCwgZGVwdGgpOw0KPiAr DQo+ICsgIGdlbl9vcG5hbWUgKG9wbmFtZV8xLCAxKTsNCj4gKyAgZnByaW50Zl9pbmRlbnQgKGYs IGluZGVudCwNCj4gKyAgICAidHJlZSAlcyA9IGdpbXBsZV9waGlfYXJnX2RlZiAoX2ElZCwgX2Fy Z18wX2lzX3RydWVfJWQgPyAwIDogMSk7XG4iLA0KPiArICAgIG9wbmFtZV8xLCBkZXB0aCwgZGVw dGgpOw0KPiArDQo+ICsgIGdlbl9vcG5hbWUgKG9wbmFtZV8yLCAyKTsNCj4gKyAgZnByaW50Zl9p bmRlbnQgKGYsIGluZGVudCwNCj4gKyAgICAidHJlZSAlcyA9IGdpbXBsZV9waGlfYXJnX2RlZiAo X2ElZCwgX2FyZ18wX2lzX3RydWVfJWQgPyAxIDogMCk7XG4iLA0KPiArICAgIG9wbmFtZV8yLCBk ZXB0aCwgZGVwdGgpOw0KPiArDQo+ICsgIGdlbl9raWRzIChmLCBpbmRlbnQsIGdpbXBsZSwgZGVw dGgpOw0KPiArDQo+ICsgIGluZGVudCAtPSAyOw0KPiArICBmcHJpbnRmX2luZGVudCAoZiwgaW5k ZW50LCAifVxuIik7DQo+ICsgIGluZGVudCAtPSAyOw0KPiArDQo+ICsgIGluZGVudCAtPSAyOw0K PiArICBmcHJpbnRmX2luZGVudCAoZiwgaW5kZW50LCAifVxuIik7DQo+ICsgIGluZGVudCAtPSAy Ow0KPiArfQ0KPiArDQo+ICAvKiBFbWl0IGEgbG9nZ2luZyBjYWxsIHRvIHRoZSBkZWJ1ZyBmaWxl IHRvIHRoZSBmaWxlIEYsIHdpdGggdGhlIElOREVOVCBmcm9tDQo+ICAgICBlaXRoZXIgdGhlIFJF U1VMVCBsb2NhdGlvbiBvciB0aGUgUydzIG1hdGNoIGxvY2F0aW9uIGlmIFJFU1VMVCBpcyBudWxs LiAqLw0KPiAgc3RhdGljIHZvaWQNCj4gQEAgLTQyNjMsNiArNDM3Niw4IEBAIHdyaXRlX3ByZWRp Y2F0ZSAoRklMRSAqZiwgcHJlZGljYXRlX2lkICpwLCBkZWNpc2lvbl90cmVlICZkdCwgYm9vbCBn aW1wbGUpDQo+DQo+ICAgIGlmICghZ2ltcGxlKQ0KPiAgICAgIGZwcmludGZfaW5kZW50IChmLCAy LCAiaWYgKFRSRUVfU0lERV9FRkZFQ1RTICh0KSkgcmV0dXJuIGZhbHNlO1xuIik7DQo+ICsNCj4g KyAgZHQucm9vdC0+aWQgPSBwLT5pZDsNCj4gICAgZHQucm9vdC0+Z2VuX2tpZHMgKGYsIDIsIGdp bXBsZSwgMCk7DQo+DQo+ICAgIGZwcmludGZfaW5kZW50IChmLCAyLCAicmV0dXJuIGZhbHNlO1xu Ig0KPiBkaWZmIC0tZ2l0IGEvZ2NjL21hdGNoLnBkIGIvZ2NjL21hdGNoLnBkDQo+IGluZGV4IDAy NGUzMzUwNDY1Li5kZGJkYjdmNzYzOCAxMDA2NDQNCj4gLS0tIGEvZ2NjL21hdGNoLnBkDQo+ICsr KyBiL2djYy9tYXRjaC5wZA0KPiBAQCAtMzA0NiwzMSArMzA0Niw0OCBAQCBERUZJTkVfSU5UX0FO RF9GTE9BVF9ST1VORF9GTiAoUklOVCkNCj4gICAgICAgICYmIHdpOjplcV9wICh3aTo6dG9fd2lk ZSAoaW50X2NzdCksIHdpOjptYXhfdmFsdWUgKGl0eXBlKSkpKSkpDQo+DQo+ICAvKiBVbnNpZ25l ZCBTYXR1cmF0aW9uIEFkZCAqLw0KPiArLyogU0FUX0FERCA9IHVzYWRkX2xlZnRfcGFydF8xIHwg dXNhZGRfcmlnaHRfcGFydF8xLCBha2E6DQo+ICsgICBTQVRfQUREID0gKFggKyBZKSB8IC0oKFgg KyBZKSA8IFgpICAqLw0KPiAgKG1hdGNoICh1c2FkZF9sZWZ0X3BhcnRfMSBAMCBAMSkNCj4gICAo cGx1czpjIEAwIEAxKQ0KPiAgIChpZiAoSU5URUdSQUxfVFlQRV9QICh0eXBlKSAmJiBUWVBFX1VO U0lHTkVEICh0eXBlKQ0KPiAgICAgICAgJiYgdHlwZXNfbWF0Y2ggKHR5cGUsIEAwLCBAMSkpKSkN Cj4NCj4gKy8qIFNBVF9BREQgPSB1c2FkZF9sZWZ0X3BhcnRfMiB8IHVzYWRkX3JpZ2h0X3BhcnRf MiwgYWthOg0KPiArICAgU0FUX0FERCA9IFJFQUxQQVJUX0VYUFIgPC5BRERfT1ZFUkZMT1c+IHwg KElNQUdQQVJUX0VYUFIgPC5BRERfT1ZFUkZMT1c+ICE9IDApICovDQo+ICAobWF0Y2ggKHVzYWRk X2xlZnRfcGFydF8yIEAwIEAxKQ0KPiAgIChyZWFscGFydCAoSUZOX0FERF9PVkVSRkxPVzpjIEAw IEAxKSkNCj4gICAoaWYgKElOVEVHUkFMX1RZUEVfUCAodHlwZSkgJiYgVFlQRV9VTlNJR05FRCAo dHlwZSkNCj4gICAgICAgICYmIHR5cGVzX21hdGNoICh0eXBlLCBAMCwgQDEpKSkpDQo+DQo+ICsv KiBTQVRfQUREID0gdXNhZGRfbGVmdF9wYXJ0XzEgfCB1c2FkZF9yaWdodF9wYXJ0XzEsIGFrYToN Cj4gKyAgIFNBVF9BREQgPSAoWCArIFkpIHwgLSgodHlwZSkoWCArIFkpIDwgWCkgICovDQo+ICAo bWF0Y2ggKHVzYWRkX3JpZ2h0X3BhcnRfMSBAMCBAMSkNCj4gICAobmVnYXRlIChjb252ZXJ0IChs dCAocGx1czpjIEAwIEAxKSBAMCkpKQ0KPiAgIChpZiAoSU5URUdSQUxfVFlQRV9QICh0eXBlKSAm JiBUWVBFX1VOU0lHTkVEICh0eXBlKQ0KPiAgICAgICAgJiYgdHlwZXNfbWF0Y2ggKHR5cGUsIEAw LCBAMSkpKSkNCj4NCj4gKy8qIFNBVF9BREQgPSB1c2FkZF9sZWZ0X3BhcnRfMSB8IHVzYWRkX3Jp Z2h0X3BhcnRfMSwgYWthOg0KPiArICAgU0FUX0FERCA9IChYICsgWSkgfCAtKFggPiAoWCArIFkp KSAgKi8NCj4gIChtYXRjaCAodXNhZGRfcmlnaHRfcGFydF8xIEAwIEAxKQ0KPiAgIChuZWdhdGUg KGNvbnZlcnQgKGd0IEAwIChwbHVzOmMgQDAgQDEpKSkpDQo+ICAgKGlmIChJTlRFR1JBTF9UWVBF X1AgKHR5cGUpICYmIFRZUEVfVU5TSUdORUQgKHR5cGUpDQo+ICAgICAgICAmJiB0eXBlc19tYXRj aCAodHlwZSwgQDAsIEAxKSkpKQ0KPg0KPiArLyogU0FUX0FERCA9IHVzYWRkX2xlZnRfcGFydF8y IHwgdXNhZGRfcmlnaHRfcGFydF8yLCBha2E6DQo+ICsgICBTQVRfQUREID0gUkVBTFBBUlRfRVhQ UiA8LkFERF9PVkVSRkxPVz4gfCAoSU1BR1BBUlRfRVhQUiA8LkFERF9PVkVSRkxPVz4gIT0gMCkg Ki8NCj4gIChtYXRjaCAodXNhZGRfcmlnaHRfcGFydF8yIEAwIEAxKQ0KPiAgIChuZWdhdGUgKGNv bnZlcnQgKG5lIChpbWFncGFydCAoSUZOX0FERF9PVkVSRkxPVzpjIEAwIEAxKSkgaW50ZWdlcl96 ZXJvcCkpKQ0KPiAgIChpZiAoSU5URUdSQUxfVFlQRV9QICh0eXBlKSAmJiBUWVBFX1VOU0lHTkVE ICh0eXBlKQ0KPiAgICAgICAgJiYgdHlwZXNfbWF0Y2ggKHR5cGUsIEAwLCBAMSkpKSkNCj4NCj4g Ky8qIFNBVF9BREQgPSB1c2FkZF9sZWZ0X3BhcnRfMiB8IHVzYWRkX3JpZ2h0X3BhcnRfMiwgYWth Og0KPiArICAgU0FUX0FERCA9IFJFQUxQQVJUX0VYUFIgPC5BRERfT1ZFUkZMT1c+IHwgLUlNQUdQ QVJUX0VYUFIgPC5BRERfT1ZFUkZMT1c+ICovDQo+ICsobWF0Y2ggKHVzYWRkX3JpZ2h0X3BhcnRf MiBAMCBAMSkNCj4gKyAobmVnYXRlIChpbWFncGFydCAoSUZOX0FERF9PVkVSRkxPVzpjIEAwIEAx KSkpDQo+ICsgKGlmIChJTlRFR1JBTF9UWVBFX1AgKHR5cGUpICYmIFRZUEVfVU5TSUdORUQgKHR5 cGUpDQo+ICsgICAgICAmJiB0eXBlc19tYXRjaCAodHlwZSwgQDAsIEAxKSkpKQ0KPiArDQo+ICAv KiBXZSBjYW5ub3QgbWVyZ2Ugb3Igb3ZlcmxvYWQgdXNhZGRfbGVmdF9wYXJ0XzEgYW5kIHVzYWRk X2xlZnRfcGFydF8yDQo+ICAgICBiZWNhdXNlIHRoZSBzdWIgcGFydCBvZiBsZWZ0X3BhcnRfMiBj YW5ub3Qgd29yayB3aXRoIHJpZ2h0X3BhcnRfMS4NCj4gICAgIEZvciBleGFtcGxlLCBsZWZ0X3Bh cnRfMiBwYXR0ZXJuIGZvY3VzIG9uZSAuQUREX09WRVJGTE9XIGJ1dCB0aGUNCj4gQEAgLTMwODIs MTAgKzMwOTksMzQgQEAgREVGSU5FX0lOVF9BTkRfRkxPQVRfUk9VTkRfRk4gKFJJTlQpDQo+ICAo bWF0Y2ggKHVuc2lnbmVkX2ludGVnZXJfc2F0X2FkZCBAMCBAMSkNCj4gICAoYml0X2lvcjpjICh1 c2FkZF9sZWZ0X3BhcnRfMSBAMCBAMSkgKHVzYWRkX3JpZ2h0X3BhcnRfMSBAMCBAMSkpKQ0KPg0K PiAtLyogVW5zaWduZWQgc2F0dXJhdGlvbiBhZGQsIGNhc2UgMiAoYnJhbmNobGVzcyB3aXRoIC5B RERfT1ZFUkZMT1cpLiAgKi8NCj4gKy8qIFVuc2lnbmVkIHNhdHVyYXRpb24gYWRkLCBjYXNlIDIg KGJyYW5jaGxlc3Mgd2l0aCAuQUREX09WRVJGTE9XKToNCj4gKyAgIFNBVF9BREQgPSBSRUFMUEFS VF9FWFBSIDwuQUREX09WRVJGTE9XPiB8IC1JTUFHUEFSVF9FWFBSIDwuQUREX09WRVJGTE9XPiBv cg0KPiArICAgU0FUX0FERCA9IFJFQUxQQVJUX0VYUFIgPC5BRERfT1ZFUkZMT1c+IHwgKElNQUdQ QVJUX0VYUFIgPC5BRERfT1ZFUkZMT1c+ICE9IDApICovDQo+ICAobWF0Y2ggKHVuc2lnbmVkX2lu dGVnZXJfc2F0X2FkZCBAMCBAMSkNCj4gICAoYml0X2lvcjpjICh1c2FkZF9sZWZ0X3BhcnRfMiBA MCBAMSkgKHVzYWRkX3JpZ2h0X3BhcnRfMiBAMCBAMSkpKQ0KPg0KPiArLyogVW5zaWduZWQgc2F0 dXJhdGlvbiBhZGQsIGNhc2UgMyAoYnJhbmNoIHdpdGggZ2UpOg0KPiArICAgU0FUX1VfQUREID0g KFggKyBZKSA+PSB4ID8gKFggKyBZKSA6IC0xLiAgKi8NCj4gKyhtYXRjaCAodW5zaWduZWRfaW50 ZWdlcl9zYXRfYWRkIEAwIEAxKQ0KPiArIChjb25kIChnZSAodXNhZGRfbGVmdF9wYXJ0XzFAMiBA MCBAMSkgQDApIEAyIGludGVnZXJfbWludXNfb25lcCkpDQo+ICsNCj4gKy8qIFVuc2lnbmVkIHNh dHVyYXRpb24gYWRkLCBjYXNlIDQgKGJyYW5jaCB3aXRoIGx0KToNCj4gKyAgIFNBVF9VX0FERCA9 IChYICsgWSkgPCB4ID8gLTEgOiAoWCArIFkpLiAgKi8NCj4gKyhtYXRjaCAodW5zaWduZWRfaW50 ZWdlcl9zYXRfYWRkIEAwIEAxKQ0KPiArIChjb25kIChsdCAodXNhZGRfbGVmdF9wYXJ0XzFAMiBA MCBAMSkgQDApIGludGVnZXJfbWludXNfb25lcCBAMikpDQo+ICsNCj4gKy8qIFVuc2lnbmVkIHNh dHVyYXRpb24gYWRkLCBjYXNlIDUgKGJyYW5jaCB3aXRoIGVxIC5BRERfT1ZFUkZMT1cpOg0KPiAr ICAgU0FUX1VfQUREID0gUkVBTFBBUlRfRVhQUiA8LkFERF9PVkVSRkxPVz4gPT0gMCA/IC5BRERf T1ZFUkZMT1cgOiAtMS4gICovDQo+ICsobWF0Y2ggKHVuc2lnbmVkX2ludGVnZXJfc2F0X2FkZCBA MCBAMSkNCj4gKyAoY29uZCAoZXEgKGltYWdwYXJ0IChJRk5fQUREX09WRVJGTE9XOmMgQDAgQDEp KSBpbnRlZ2VyX3plcm9wKQ0KPiArICAodXNhZGRfbGVmdF9wYXJ0XzIgQDAgQDEpIGludGVnZXJf bWludXNfb25lcCkpDQo+ICsNCj4gKy8qIFVuc2lnbmVkIHNhdHVyYXRpb24gYWRkLCBjYXNlIDYg KGJyYW5jaCB3aXRoIG5lIC5BRERfT1ZFUkZMT1cpOg0KPiArICAgU0FUX1VfQUREID0gUkVBTFBB UlRfRVhQUiA8LkFERF9PVkVSRkxPVz4gIT0gMCA/IC0xIDogLkFERF9PVkVSRkxPVy4gICovDQo+ ICsobWF0Y2ggKHVuc2lnbmVkX2ludGVnZXJfc2F0X2FkZCBAMCBAMSkNCj4gKyAoY29uZCAobmUg KGltYWdwYXJ0IChJRk5fQUREX09WRVJGTE9XOmMgQDAgQDEpKSBpbnRlZ2VyX3plcm9wKQ0KPiAr ICBpbnRlZ2VyX21pbnVzX29uZXAgKHVzYWRkX2xlZnRfcGFydF8yIEAwIEAxKSkpDQo+ICsNCj4g IC8qIHggPiAgeSAgJiYgIHggIT0gWFhYX01JTiAgLS0+ICB4ID4geQ0KPiAgICAgeCA+ICB5ICAm JiAgeCA9PSBYWFhfTUlOICAtLT4gIGZhbHNlIC4gKi8NCj4gIChmb3IgZXFuZSAoZXEgbmUpDQo+ IGRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtbWF0aC1vcHRzLmNjIGIvZ2NjL3RyZWUtc3NhLW1h dGgtb3B0cy5jYw0KPiBpbmRleCA2MmRhMWM1ZWUwOC4uODYyNGQ0MTQzNDcgMTAwNjQ0DQo+IC0t LSBhL2djYy90cmVlLXNzYS1tYXRoLW9wdHMuY2MNCj4gKysrIGIvZ2NjL3RyZWUtc3NhLW1hdGgt b3B0cy5jYw0KPiBAQCAtNDA5OSw3ICs0MDk5LDcgQEAgZXh0ZXJuIGJvb2wgZ2ltcGxlX3Vuc2ln bmVkX2ludGVnZXJfc2F0X2FkZCAodHJlZSwgdHJlZSosIHRyZWUgKCopKHRyZWUpKTsNCj4gICAq ICAgICAgPT4NCj4gICAqICAgICAgXzEyID0gLlNBVF9BREQgKF80LCBfNik7ICAqLw0KPiAgc3Rh dGljIHZvaWQNCj4gLW1hdGNoX3NhdHVyYXRpb25fYXJpdGggKGdpbXBsZV9zdG10X2l0ZXJhdG9y ICpnc2ksIGdhc3NpZ24gKnN0bXQpDQo+ICttYXRjaF9hc3NpZ25fc2F0dXJhdGlvbl9hcml0aCAo Z2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwgZ2Fzc2lnbiAqc3RtdCkNCj4gIHsNCj4gICAgZ2Nh bGwgKmNhbGwgPSBOVUxMOw0KPg0KPiBAQCAtNDExNiw2ICs0MTE2LDQ3IEBAIG1hdGNoX3NhdHVy YXRpb25fYXJpdGggKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksIGdhc3NpZ24gKnN0bXQpDQo+ ICAgICAgfQ0KPiAgfQ0KPg0KPiArLyoNCj4gKyAqIFRyeSB0byBtYXRjaCBzYXR1cmF0aW9uIGFy aXRoIHBhdHRlcm4ocykuDQo+ICsgKiBGcm9tOg0KPiArICogICA8YmIgMj4gOg0KPiArICogICBf MSA9IHhfMyhEKSArIHlfNChEKTsNCj4gKyAqICAgaWYgKF8xID49IHhfMyhEKSkNCj4gKyAqICAg ICBnb3RvIDxiYiAzPjsgW0lOVl0NCj4gKyAqICAgZWxzZQ0KPiArICogICAgIGdvdG8gPGJiIDQ+ OyBbSU5WXQ0KPiArICoNCj4gKyAqICAgPGJiIDM+IDoNCj4gKyAqDQo+ICsgKiAgIDxiYiA0PiA6 DQo+ICsgKiAgICMgXzIgPSBQSEkgPDI1NSgyKSwgXzEoMyk+DQo+ICsgKg0KPiArICogVG86DQo+ ICsgKiAgIDxiYiA0PiBbbG9jYWwgY291bnQ6IDEwNzM3NDE4MjRdOg0KPiArICogICBfMiA9IC5T QVRfQUREICh4XzQoRCksIHlfNShEKSk7ICAqLw0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArbWF0 Y2hfcGhpX3NhdHVyYXRpb25fYXJpdGggKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksIGdwaGkg KnBoaSkNCj4gK3sNCj4gKyAgaWYgKGdpbXBsZV9waGlfbnVtX2FyZ3MgKHBoaSkgIT0gMikNCj4g KyAgICByZXR1cm47DQo+ICsNCj4gKyAgdHJlZSBvcHNbMl07DQo+ICsgIHRyZWUgcGhpX3Jlc3Vs dCA9IGdpbXBsZV9waGlfcmVzdWx0IChwaGkpOw0KPiArDQo+ICsgIGlmIChnaW1wbGVfdW5zaWdu ZWRfaW50ZWdlcl9zYXRfYWRkIChwaGlfcmVzdWx0LCBvcHMsIE5VTEwpDQo+ICsgICAgICAmJiBk aXJlY3RfaW50ZXJuYWxfZm5fc3VwcG9ydGVkX3AgKElGTl9TQVRfQURELCBUUkVFX1RZUEUgKHBo aV9yZXN1bHQpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9Q VElNSVpFX0ZPUl9CT1RIKSkNCj4gKyAgICB7DQo+ICsgICAgICBnY2FsbCAqY2FsbCA9IGdpbXBs ZV9idWlsZF9jYWxsX2ludGVybmFsIChJRk5fU0FUX0FERCwgMiwgb3BzWzBdLCBvcHNbMV0pOw0K PiArICAgICAgZ2ltcGxlX2NhbGxfc2V0X2xocyAoY2FsbCwgcGhpX3Jlc3VsdCk7DQo+ICsgICAg ICBnc2lfaW5zZXJ0X2JlZm9yZSAoZ3NpLCBjYWxsLCBHU0lfU0FNRV9TVE1UKTsNCj4gKw0KPiAr ICAgICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgcHNpID0gZ3NpX2Zvcl9zdG10IChwaGkpOw0KPiAr ICAgICAgcmVtb3ZlX3BoaV9ub2RlICgmcHNpLCBmYWxzZSk7DQo+ICsgICAgfQ0KPiArfQ0KPiAr DQo+ICAvKiBSZWNvZ25pemUgZm9yIHVuc2lnbmVkIHgNCj4gICAgIHggPSB5IC0gejsNCj4gICAg IGlmICh4ID4geSkNCj4gQEAgLTYwMjksNiArNjA3MCwxMiBAQCBtYXRoX29wdHNfZG9tX3dhbGtl cjo6YWZ0ZXJfZG9tX2NoaWxkcmVuIChiYXNpY19ibG9jayBiYikNCj4NCj4gICAgZm1hX2RlZmVy cmluZ19zdGF0ZSBmbWFfc3RhdGUgKHBhcmFtX2F2b2lkX2ZtYV9tYXhfYml0cyA+IDApOw0KPg0K PiArICBmb3IgKGdwaGlfaXRlcmF0b3IgcHNpID0gZ3NpX3N0YXJ0X3BoaXMgKGJiKTsgIWdzaV9l bmRfcCAocHNpKTsgZ3NpX25leHQgKCZwc2kpKQ0KPiArICAgIHsNCj4gKyAgICAgIGdpbXBsZV9z dG10X2l0ZXJhdG9yIGdzaSA9IGdzaV9sYXN0X2JiIChiYik7DQo+ICsgICAgICBtYXRjaF9waGlf c2F0dXJhdGlvbl9hcml0aCAoJmdzaSwgcHNpLnBoaSAoKSk7DQo+ICsgICAgfQ0KPiArDQo+ICAg IGZvciAoZ3NpID0gZ3NpX2FmdGVyX2xhYmVscyAoYmIpOyAhZ3NpX2VuZF9wIChnc2kpOykNCj4g ICAgICB7DQo+ICAgICAgICBnaW1wbGUgKnN0bXQgPSBnc2lfc3RtdCAoZ3NpKTsNCj4gQEAgLTYw NzgsNyArNjEyNSw3IEBAIG1hdGhfb3B0c19kb21fd2Fsa2VyOjphZnRlcl9kb21fY2hpbGRyZW4g KGJhc2ljX2Jsb2NrIGJiKQ0KPiAgICAgICAgICAgICAgIGJyZWFrOw0KPg0KPiAgICAgICAgICAg ICBjYXNlIEJJVF9JT1JfRVhQUjoNCj4gLSAgICAgICAgICAgICBtYXRjaF9zYXR1cmF0aW9uX2Fy aXRoICgmZ3NpLCBhc19hPGdhc3NpZ24gKj4gKHN0bXQpKTsNCj4gKyAgICAgICAgICAgICBtYXRj aF9hc3NpZ25fc2F0dXJhdGlvbl9hcml0aCAoJmdzaSwgYXNfYTxnYXNzaWduICo+IChzdG10KSk7 DQo+ICAgICAgICAgICAgICAgLyogZmFsbC10aHJvdWdoICAqLw0KPiAgICAgICAgICAgICBjYXNl IEJJVF9YT1JfRVhQUjoNCj4gICAgICAgICAgICAgICBtYXRjaF91YWRkY191c3ViYyAoJmdzaSwg c3RtdCwgY29kZSk7DQo+IC0tDQo+IDIuMzQuMQ0KPg0K