From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web10.10946.1660616712530820776 for ; Mon, 15 Aug 2022 19:25:12 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=IUZ98zMY; spf=pass (domain: intel.com, ip: 134.134.136.20, mailfrom: ray.ni@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1660616712; x=1692152712; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=7h0AzEPDop61Xxwfv6mRqi/orJORC9a+U/nXx7z9OFo=; b=IUZ98zMYlyi+0t94qebj2r4zHWHGI08lYTu21LqRStMnqpXKDcbKXbdt spIJLPrZkqxndXSyDl0YlPQR55KCrLb5jLG9bxExA8kPVeG4kYuMz/RtS 0tPuwgj+pUAk1N1yuCqkchoCSEFDGyp7sh5QtcyyQRjWfoH/gDqQUvAOc H5j+2jevzttmodObvZBlbc+0xpsNS+T43I9izs3hVGfEdDWiTwdE/AIKd YjVQARMdJ6Ovcns5lTCrBycyi3VgkTnxj9cb1fQSJ40x5NmK8CwrQjLkV d2QxBBk1D3HH+Cc3wLNd8RPACKk3ngj5x7L6OOoRCCLFkrE3GxYiOsxPn w==; X-IronPort-AV: E=McAfee;i="6400,9594,10440"; a="279067833" X-IronPort-AV: E=Sophos;i="5.93,240,1654585200"; d="scan'208";a="279067833" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Aug 2022 19:25:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,240,1654585200"; d="scan'208";a="934707631" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga005.fm.intel.com with ESMTP; 15 Aug 2022 19:25:11 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Mon, 15 Aug 2022 19:25:11 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) 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.2375.28 via Frontend Transport; Mon, 15 Aug 2022 19:25:11 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.170) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.28; Mon, 15 Aug 2022 19:25:10 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MrGU4+Dmvjx00vMKa4QclrALhn8fy5lA8OKP+TD8JQNpfZt09xg6ocWhOd4Y854vs23sE9EIXdSfHYLYBdDIPOxYVwtg4KfQ8OYngqAs2OS1CRPvVo+BLWkQHnzVRs9sugdVEiaHm3kqLB72CMtGCw8jGJXIJP6VkKd7dTMYoPfqmjdcofd7PB8bcfYU68v+zFu2EmaEn0rDnJFzvTU4vNOej+RsPO6k6EI72ofFSClnppiPwUQW7rotMX8YV/j0lxO7DNHhtvAzs5HCI8ORQ1Ej4kcIZ51txF6ipn2px6zIyphGOLIMrTKDVc0Hu9h9dtQO+HwQoatpWGKnqWZudA== 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=7h0AzEPDop61Xxwfv6mRqi/orJORC9a+U/nXx7z9OFo=; b=WkdJoKmxtzQIA6Y2aMjE+tTiOp+Nky6A2qZtJbAS2jCHqXliy67rraCZ6AZwLBQI7bk46EkdrMmE7Wr6Kz9JHZQE1gTbj9GJt9hHJrzGCk/DIKBAZyzjien08UeA87/td/MiZyNupzzbtuI5tOJLilX2KhnVG16vufmuvjiCQWboorRM2fhblcLbg6AEPtenei5/WBhShhWqd719ndHV5yZfjjz31f0FEWJyLhyKPZCm3OIy/SOEAqTnnXwhSTTmmKjgmdvYzSH0UNNGPSsst+NgRA9Xqx/vD3rJJbSFVZzzd16svlp1rNxqE9hdoUpB2H3xLi5ZtKiaC1s1Dl8PBQ== 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 MWHPR11MB1631.namprd11.prod.outlook.com (2603:10b6:301:10::10) by BL0PR11MB3442.namprd11.prod.outlook.com (2603:10b6:208:68::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.19; Tue, 16 Aug 2022 02:25:07 +0000 Received: from MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::958b:cc9d:ac3:288a]) by MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::958b:cc9d:ac3:288a%10]) with mapi id 15.20.5504.027; Tue, 16 Aug 2022 02:25:07 +0000 From: "Ni, Ray" To: Tom Lendacky , "devel@edk2.groups.io" CC: "Dong, Eric" Subject: Re: [edk2-devel] [PATCH 01/10] UefiCpuPkg: Create CpuPageTableLib for manipulating X86 paging structs Thread-Topic: [edk2-devel] [PATCH 01/10] UefiCpuPkg: Create CpuPageTableLib for manipulating X86 paging structs Thread-Index: AQHYsMNpJJZcmdoSwUGWOE9mk0nmm62wxpzQ Date: Tue, 16 Aug 2022 02:25:07 +0000 Message-ID: References: <20220718131831.660-1-ray.ni@intel.com> <20220718131831.660-2-ray.ni@intel.com> <342c8728-be82-8469-e7a1-aed7e5b88028@amd.com> In-Reply-To: <342c8728-be82-8469-e7a1-aed7e5b88028@amd.com> Accept-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-office365-filtering-correlation-id: 431121c7-85be-4493-7b18-08da7f2e893e x-ms-traffictypediagnostic: BL0PR11MB3442:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: mle06sMvLhCQ0OkzGEHF3ZaNBiliae3KAaeJQWD4FAndH06MTdGfgLss7H+Kb1Mvrh1sV/7OI5PlqJUZFa+YS+asjicYk7nYbS+4y//QjuGL5GENSJQG3NqyC33ijtt9mDJPT2O+QQ6cev0UheSbt8NAQKOwUzsEhMMIEPjJ7Wsgxh350w9qnbJ+2YgLYYzh3eoc1rXTCO6qMppGExacqEaZyCYSQdtLi5W5BGJdySncnJ46tVR5k3L1p2cB8Zh4lEhRfTRBljmo1GdeF+P765T7bqHQysvZ57zNQuqkEQInDefQUPwy4cVwjIsjbBdaXJ1jMg+YF8ck940K3aRHBtZ3pSF2GkVOY8g6sXtfbjeBaR44akXG49AxZPuYrtsE1a7MjRTD912K+RSCagTQ4F0pqFcrAU8iES0jjEXjvW7BO8a9jg3ni9zS5ucB1l2k7SRu+6aMpt95MJETF10r/jt9RvQ/X6WuRtcBQKquAkMxRYt9G9D9jJuVlyj+8B3w3M4F9448ZAf0cV408U+rFqPTxV86tiPs6N71lyndIe56zgXMfPjZtqs4+9TbLyDfFb1m85sPrXA4CNoN10+b9z5LhvTbdXQYLyduOV4BiW6cixIrfeKBA+t4h+mxUEe8BsHsMt8WVZLkoROZeLS2mGYBqI7k8cKLY2F0RPvdN6ynPGyE5OikCwAiY0ODp8FHtoAjD3WNBa8NFkXyMAGJ+M7016OnVWZaa7lz6HDdMTc5/+/ZxyuarO7J47DRqnHwSiBKMx2JUb6goUA1vXD64tAEdD/OTCH4duHscgxZS38= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1631.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(366004)(376002)(136003)(396003)(39860400002)(346002)(82960400001)(41300700001)(26005)(6506007)(71200400001)(9686003)(7696005)(53546011)(38070700005)(478600001)(86362001)(33656002)(186003)(107886003)(19627235002)(83380400001)(8676002)(66946007)(55016003)(5660300002)(64756008)(66446008)(66476007)(66556008)(110136005)(316002)(4326008)(76116006)(122000001)(8936002)(2906002)(52536014)(38100700002)(30864003)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?b0t4NEFLUGJDWXcxeWFjRkhlajlzSDdONG1Pb2owcUhlUXFFZk1RLzBWR3k0?= =?utf-8?B?NGNYUm5ndC9wZisvNHlkSlhqMFdWa1hPNHNvRlJzd2lZY0JJTVo4Z1dwYWdj?= =?utf-8?B?MXp4ZkNTOGNMQm9hMGFmVFdTRHVWelpCdHFUNFk4elZkTDg3aVJWRk81a2FU?= =?utf-8?B?VjFkaHBmVVNxWVVtQXREMkxmcmRuTjMyK1RSZG56QVQ4UkhNQXJxT2NRV2Mr?= =?utf-8?B?RlVUY3RPM0V6UnpOTStpVSthNXM5RElLMkhSZ2VaNU5zcGFiWm42Y3JjRjY2?= =?utf-8?B?cUszQU5YTzRQNU42T01IRCtPWmtyR1hkVmFmZGtneWVqV3FGWjJCbW5ZZDA5?= =?utf-8?B?YXB1MFJZVlp1OGtyamFLOW5aRTZIVm0yZjcreTYxa1FPdkNVOHZwWTZuckN1?= =?utf-8?B?YWptT2V2d0ZZeTBoQXQ1Q3hOaHl4T1A1ZHZFQjZTSmpVMWV2eE9HSUEvUURy?= =?utf-8?B?Qkl1MHp5VUdjWCtsVnovTHR3ZDR5VGF2RjFyWUdHM3pyV2paQ0s1YUJIYmk1?= =?utf-8?B?OW9Xd29qM3B3K2V1N0FpYnY4VWwyM0c1RjJJYmo2d281dkszRmZ6ZG9QdG9X?= =?utf-8?B?WUxISUErZUhPKytEaHg2ZkdpT2U1VUIrWHRXc1pJdEtJSmZZZlpudkQ5YStJ?= =?utf-8?B?a3NhN1ZlSFhQR3JZSVBxNUx5TUdJbDliNHlMUEpEa0NubDFxK09CRFNTRHZO?= =?utf-8?B?YmVMWFdwQkxYR28vZUV6djJOaFhycEJIUDhXbndFbGcvUkpqR25pbi96THBx?= =?utf-8?B?RWdBSER1dE9PQ0dFN2VSNVpReGJYejNONG9haWhsNGVaeU9TTFdaL0ZnMkJW?= =?utf-8?B?TVR5WWI2OEtGZ2FlR1RsMDFONDBEaFdtN0xxY1A2VG9pYzRTbHJCcHorUVM4?= =?utf-8?B?MFE0M3pqbDhSVEVaek4ybC9abEZtUHB0ZlJyZ0M2K1UzNFZjVTBuY25rTVk2?= =?utf-8?B?dTlZQ1VqRWo1MnlDY0tJL0FUb2ROS1RQUE9NOEtCQisyc05EbDhzSDVHajFx?= =?utf-8?B?Rk1mUlNLdGVBS2o5V3Z5dkdaM3VHQ1ZiMERUOU96b0UxNTROT2ZlQnlUMm5k?= =?utf-8?B?UGprSlVrTXg0T29DZzNVcVBxQWMraGtHWHNqT3NwTEcvMEJqQzlFMytiTlFS?= =?utf-8?B?NWI4dzFFa0xzTW9XWWNFZXUxL05QS3VpcVVSV1BNT0V0TEdRTmErWk83d254?= =?utf-8?B?OG5KNHhzUVlsL1EvVE1GSzcra1E1WWhIZmdhRmRnSmkzTzBEdnFaUzVTTDhF?= =?utf-8?B?VkF3NlcxQlUyMFZoTmRFNURiZnBYTzFtN0N3WXZZeWw5czhUQXpiUnhNQ0tW?= =?utf-8?B?ZFVCcDdIVkUzeWJOUzJLeHFsSzEyRVR6bkcrS3lJMjhOcmQweGNJRmpQY051?= =?utf-8?B?UER0c1FiQnBYekJCY1hIUkFpeForTG8wVTdDVVdpNlZZZGQxRFBWNDJENlNF?= =?utf-8?B?M0wyY0JPZTN3SUg4ZHd2aGN3aVhnczZGUDhrR2VxWE4vQjhMK3RUV3ArSVV1?= =?utf-8?B?TG9QTEIxUHArbU1NdnpGODZCSk04bEVZT25BeEZyeUkyY0RzR2xJY0xFNEJo?= =?utf-8?B?Z05BWXdFaEJ0cndZbWpzSTEyclV4N3plYnZhVGZBNnNaa0ZhQzhzK1VvS3U0?= =?utf-8?B?OWl2aEg3elpOcE8vL2M1WXQzNnNoMkhpTnU0OVBqMG81NzFTR0FzbmVIQzVp?= =?utf-8?B?aVBuU2xKaWdFS1BoZ05OSGRNbGdOUkpUZnpONWJlRGJ0MEdqOXZnWkZuT1Rw?= =?utf-8?B?c09MQ2k2VzVrOCttV0cvNlBjZ2lwQ3l1QjZablFtSFI0eVRCeXZlSmd1OGZT?= =?utf-8?B?MDNndmxNb2Zldkg3eU1FKzVpUzAxNFVCeFBwN1VBWlhnRzZFd0wwNG1HTnVp?= =?utf-8?B?VjE2bG0rdDVvRHpveUZ2a1BLdDNQK3dZZFkrN241d0ZYTjlNd0VZY0VLUXhX?= =?utf-8?B?VzJURnQ5MGxuTXEvb1J6bUJXeldJckcyMUluQzNOVXlaL0NJc2dwWEdXdW4v?= =?utf-8?B?eEs3eFF5ekZiN2k0R0VqSGxiYU42cnZrQmlCZ0duV1JzNjRwM2QyaCsrK3ZK?= =?utf-8?B?Wm5tdGZZNVE3TWNRVUdPMndzeDhMdTMwR3d5cmZGUmNzUHRwVk1xblJVR0VM?= =?utf-8?Q?v1cPhiP+GoN/p+l5hA1m8nKMr?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR11MB1631.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 431121c7-85be-4493-7b18-08da7f2e893e X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Aug 2022 02:25:07.3986 (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: HyqHhqdncqy1MxrZaz+E7NNqNe1kFVUeN9LSFoPMWHUokEr3uYopH6OG8wnxbbfK+q8PUeAIvRRwnGEJuBtbkQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR11MB3442 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VG9tLA0KWWVzLiBJIGV4cGVjdCBjYWxsZXIgc2V0cy9jbGVhcnMgdGhlIGFwcHJvcHJpYXRlIGJp dHMgaW4gdGhlIFBhZ2VUYWJsZUJhc2VBZGRyZXNzIGJpdC1maWVsZC4NCg0KV2l0aCB0aGlzIHdh eSwgdGhlIFBhZ2VUYWJsZUxpYiBjYW4gYmUgc3RhYmxlIGVub3VnaCBhbmQgZG9lc24ndCBuZWVk IHRvIGNoYW5nZSBmb3INCmRpZmZlcmVudCAoSW50ZWwvQU1ELy4uLikgeDg2IGZlYXR1cmVzIHRv ZGF5IChvciBmdXR1cmUpIHRoYXQgcmVwdXJwb3NlIHNvbWUgYml0cyBpbg0KdGhlIHBhZ2UgdGFi bGUgZW50cnkuDQoNClRvIGJlIHNwZWNpZmljLCBURFggdXNlcyB0aGUgaGlnaGVzdCBiaXQgYXMg YSBpbmRpY2F0b3IgZm9yIHNoYXJlZCBtZW1vcnkuIFNvIHRoZSBjYWxsZXIgb2YgdGhpcyBsaWIN Cm5lZWRzIHRvIHNldCB0aGUgaGlnaGVzdCBiaXQgaW4gUGFnZVRhYmxlQmFzZUFkZHJlc3MgZm9y IHNoYXJlZCBtZW1vcnkgaW4gVERYIGNhc2UuDQoNCkkgZ3Vlc3MgU0VWIGNvZGUgY2FuIHVzZSB0 aGUgc2ltaWxhciB3YXkuDQoNClRoYW5rcywNClJheQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQo+IEZyb206IFRvbSBMZW5kYWNreSA8dGhvbWFzLmxlbmRhY2t5QGFtZC5jb20+DQo+ IFNlbnQ6IFR1ZXNkYXksIEF1Z3VzdCAxNiwgMjAyMiAxMjoyNCBBTQ0KPiBUbzogZGV2ZWxAZWRr Mi5ncm91cHMuaW87IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+DQo+IENjOiBEb25nLCBFcmlj IDxlcmljLmRvbmdAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSZTogW2VkazItZGV2ZWxdIFtQQVRD SCAwMS8xMF0gVWVmaUNwdVBrZzogQ3JlYXRlDQo+IENwdVBhZ2VUYWJsZUxpYiBmb3IgbWFuaXB1 bGF0aW5nIFg4NiBwYWdpbmcgc3RydWN0cw0KPiANCj4gT24gNy8xOC8yMiAwODoxOCwgTmksIFJh eSB2aWEgZ3JvdXBzLmlvIHdyb3RlOg0KPiANCj4gSGkgUmF5LA0KPiANCj4gSG93IGRvIHlvdSBl bnZpc2lvbiB0aGlzIGxpYnJhcnkgd29ya2luZyB3aXRoIFNFViBhbmQvb3IgVERYIHdoaWNoIHVz ZSB0aGUNCj4gb25lIG9mIHRoZSBiaXRzIGluIFBhZ2VUYWJsZUJhc2VBZGRyZXNzIHRvIGluZGlj YXRlIHdoZXRoZXIgdGhlIHBhZ2UgaXMNCj4gZW5jcnlwdGVkIG9yIHNoYXJlZD8gRm9yIFNFViwg dGhlIGVuY3J5cHRpb24gbWFzayBpcyBzZXQgaW4gdGhlDQo+IFBjZFB0ZU1lbW9yeUVuY3J5cHRp b25BZGRyZXNzT3JNYXNrIFBDRCwgYXJlIHlvdSBwbGFubmluZyBvbiB1c2luZw0KPiB0aGF0IGF0 DQo+IGFsbCBvciBpcyBpdCBleHBlY3RlZCB0aGF0IGNhbGxlciB3aWxsIHNldC9jbGVhciB0aGUg YXBwcm9wcmlhdGUgYml0cyBpbg0KPiB0aGUgUGFnZVRhYmxlQmFzZUFkZHJlc3MgZmllbGQ/DQo+ IA0KPiBUaGFua3MsDQo+IFRvbQ0KPiANCj4gPiAtLS0NCj4gPiAgIFVlZmlDcHVQa2cvSW5jbHVk ZS9MaWJyYXJ5L0NwdVBhZ2VUYWJsZUxpYi5oICB8IDEyOSArKysrKw0KPiA+ICAgLi4uL0xpYnJh cnkvQ3B1UGFnZVRhYmxlTGliL0NwdVBhZ2VUYWJsZS5oICAgIHwgMjA0ICsrKysrKysNCj4gPiAg IC4uLi9DcHVQYWdlVGFibGVMaWIvQ3B1UGFnZVRhYmxlTGliLmluZiAgICAgICB8ICAzNSArKw0K PiA+ICAgLi4uL0xpYnJhcnkvQ3B1UGFnZVRhYmxlTGliL0NwdVBhZ2VUYWJsZU1hcC5jIHwgNTQz DQo+ICsrKysrKysrKysrKysrKysrKw0KPiA+ICAgLi4uL0NwdVBhZ2VUYWJsZUxpYi9DcHVQYWdl VGFibGVQYXJzZS5jICAgICAgIHwgMzMwICsrKysrKysrKysrDQo+ID4gICBVZWZpQ3B1UGtnL1Vl ZmlDcHVQa2cuZGVjICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKw0KPiA+ICAgVWVmaUNwdVBr Zy9VZWZpQ3B1UGtnLmRzYyAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstDQo+ID4gICA3IGZp bGVzIGNoYW5nZWQsIDEyNDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiA+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0IFVlZmlDcHVQa2cvSW5jbHVkZS9MaWJyYXJ5L0NwdVBhZ2VUYWJsZUxp Yi5oDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gVWVmaUNwdVBrZy9MaWJyYXJ5L0NwdVBh Z2VUYWJsZUxpYi9DcHVQYWdlVGFibGUuaA0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IFVl ZmlDcHVQa2cvTGlicmFyeS9DcHVQYWdlVGFibGVMaWIvQ3B1UGFnZVRhYmxlTGliLmluZg0KPiA+ ICAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IFVlZmlDcHVQa2cvTGlicmFyeS9DcHVQYWdlVGFibGVM aWIvQ3B1UGFnZVRhYmxlTWFwLmMNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBVZWZpQ3B1 UGtnL0xpYnJhcnkvQ3B1UGFnZVRhYmxlTGliL0NwdVBhZ2VUYWJsZVBhcnNlLmMNCj4gPg0KPiA+ IGRpZmYgLS1naXQgYS9VZWZpQ3B1UGtnL0luY2x1ZGUvTGlicmFyeS9DcHVQYWdlVGFibGVMaWIu aA0KPiBiL1VlZmlDcHVQa2cvSW5jbHVkZS9MaWJyYXJ5L0NwdVBhZ2VUYWJsZUxpYi5oDQo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi4yZGM5YjdkMThlDQo+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1VlZmlDcHVQa2cvSW5jbHVkZS9MaWJyYXJ5L0Nw dVBhZ2VUYWJsZUxpYi5oDQo+ID4gQEAgLTAsMCArMSwxMjkgQEANCj4gPiArLyoqIEBmaWxlDQo+ ID4gKyAgUHVibGljIGluY2x1ZGUgZmlsZSBmb3IgUGFnZVRhYmxlTGliIGxpYnJhcnkuDQo+ID4g Kw0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAyMiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgUEFHRV9U QUJMRV9MSUJfSF8NCj4gPiArI2RlZmluZSBQQUdFX1RBQkxFX0xJQl9IXw0KPiA+ICsNCj4gPiAr dHlwZWRlZiB1bmlvbiB7DQo+ID4gKyAgc3RydWN0IHsNCj4gPiArICAgIFVJTlQ2NCAgICBQcmVz ZW50ICAgICAgICAgICAgICA6IDE7IC8vIDAgPSBOb3QgcHJlc2VudCBpbiBtZW1vcnksIDEgPSBQ cmVzZW50IGluDQo+IG1lbW9yeQ0KPiA+ICsgICAgVUlOVDY0ICAgIFJlYWRXcml0ZSAgICAgICAg ICAgIDogMTsgLy8gMCA9IFJlYWQtT25seSwgMT0gUmVhZC9Xcml0ZQ0KPiA+ICsgICAgVUlOVDY0 ICAgIFVzZXJTdXBlcnZpc29yICAgICAgIDogMTsgLy8gMCA9IFN1cGVydmlzb3IsIDE9VXNlcg0K PiA+ICsgICAgVUlOVDY0ICAgIFdyaXRlVGhyb3VnaCAgICAgICAgIDogMTsgLy8gMCA9IFdyaXRl LUJhY2sgY2FjaGluZywgMT1Xcml0ZS0NCj4gVGhyb3VnaCBjYWNoaW5nDQo+ID4gKyAgICBVSU5U NjQgICAgQ2FjaGVEaXNhYmxlZCAgICAgICAgOiAxOyAvLyAwID0gQ2FjaGVkLCAxPU5vbi1DYWNo ZWQNCj4gPiArICAgIFVJTlQ2NCAgICBBY2Nlc3NlZCAgICAgICAgICAgICA6IDE7IC8vIDAgPSBO b3QgYWNjZXNzZWQsIDEgPSBBY2Nlc3NlZCAoc2V0IGJ5DQo+IENQVSkNCj4gPiArICAgIFVJTlQ2 NCAgICBEaXJ0eSAgICAgICAgICAgICAgICA6IDE7IC8vIDAgPSBOb3QgZGlydHksIDEgPSBEaXJ0 eSAoc2V0IGJ5IENQVSkNCj4gPiArICAgIFVJTlQ2NCAgICBQYXQgICAgICAgICAgICAgICAgICA6 IDE7IC8vIFBBVA0KPiA+ICsNCj4gPiArICAgIFVJTlQ2NCAgICBHbG9iYWwgICAgICAgICAgICAg ICA6IDE7IC8vIDAgPSBOb3QgZ2xvYmFsLCAxID0gR2xvYmFsIChpZiBDUjQuUEdFID0gMSkNCj4g PiArICAgIFVJTlQ2NCAgICBSZXNlcnZlZDEgICAgICAgICAgICA6IDM7IC8vIElnbm9yZWQNCj4g PiArDQo+ID4gKyAgICBVSU5UNjQgICAgUGFnZVRhYmxlQmFzZUFkZHJlc3MgOiA0MDsgLy8gUGFn ZSBUYWJsZSBCYXNlIEFkZHJlc3MNCj4gPiArICAgIFVJTlQ2NCAgICBSZXNlcnZlZDIgICAgICAg ICAgICA6IDc7ICAvLyBJZ25vcmVkDQo+ID4gKyAgICBVSU5UNjQgICAgUHJvdGVjdGlvbktleSAg ICAgICAgOiA0OyAgLy8gUHJvdGVjdGlvbiBrZXkNCj4gPiArICAgIFVJTlQ2NCAgICBOeCAgICAg ICAgICAgICAgICAgICA6IDE7ICAvLyBObyBFeGVjdXRlIGJpdA0KPiA+ICsgIH0gQml0czsNCj4g PiArICBVSU5UNjQgICAgVWludDY0Ow0KPiA+ICt9IElBMzJfTUFQX0FUVFJJQlVURTsNCj4gPiAr DQo+ID4gKyNkZWZpbmUgSUEzMl9NQVBfQVRUUklCVVRFX1BBR0VfVEFCTEVfQkFTRV9BRERSRVNT X01BU0sNCj4gMHhGRkZGRkZGRkZGMDAwdWxsDQo+ID4gKyNkZWZpbmUgSUEzMl9NQVBfQVRUUklC VVRFX1BBR0VfVEFCTEVfQkFTRV9BRERSRVNTKHBhKSAgKChwYSktDQo+ID5VaW50NjQgJiBJQTMy X01BUF9BVFRSSUJVVEVfUEFHRV9UQUJMRV9CQVNFX0FERFJFU1NfTUFTSykNCj4gPiArI2RlZmlu ZSBJQTMyX01BUF9BVFRSSUJVVEVfQVRUUklCVVRFUyhwYSkgICAgICAgICAgICAgICAoKHBhKS0+ VWludDY0ICYNCj4gfklBMzJfTUFQX0FUVFJJQlVURV9QQUdFX1RBQkxFX0JBU0VfQUREUkVTU19N QVNLKQ0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gQmVsb3cgZW51bSBmb2xsb3dzICI0LjEuMSBG b3VyIFBhZ2luZyBNb2RlcyIgaW4gQ2hhcHRlciA0IFBhZ2luZyBvZg0KPiBTRE0gVm9sdW1lIDMu DQo+ID4gKy8vIFBhZ2UxR0IgaXMgb25seSBzdXBwb3J0ZWQgaW4gNC1sZXZlbCBhbmQgNS1sZXZl bC4NCj4gPiArLy8NCj4gPiArdHlwZWRlZiBlbnVtIHsNCj4gPiArICBQYWdpbmczMmJpdCwNCj4g PiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBIaWdoIGJ5dGUgaW4gcGFnaW5nIG1vZGUgaW5kaWNh dGVzIHRoZSBtYXggbGV2ZWxzIG9mIHRoZSBwYWdlIHRhYmxlLg0KPiA+ICsgIC8vIExvdyBieXRl IGluIHBhZ2luZyBtb2RlIGluZGljYXRlcyB0aGUgbWF4IGxldmVsIHRoYXQgY2FuIGJlIGEgbGVh Zg0KPiBlbnRyeS4NCj4gPiArICAvLw0KPiA+ICsgIFBhZ2luZ1BhZSA9IDB4MDMwMiwNCj4gPiAr DQo+ID4gKyAgUGFnaW5nNExldmVsICAgID0gMHgwNDAyLA0KPiA+ICsgIFBhZ2luZzRMZXZlbDFH QiA9IDB4MDQwMywNCj4gPiArDQo+ID4gKyAgUGFnaW5nNUxldmVsICAgID0gMHgwNTAyLA0KPiA+ ICsgIFBhZ2luZzVMZXZlbDFHQiA9IDB4MDUwMywNCj4gPiArDQo+ID4gKyAgUGFnaW5nTW9kZU1h eA0KPiA+ICt9IFBBR0lOR19NT0RFOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ3JlYXRlIG9y IHVwZGF0ZSBwYWdlIHRhYmxlIHRvIG1hcCBbTGluZWFyQWRkcmVzcywgTGluZWFyQWRkcmVzcyAr DQo+IExlbmd0aCkgd2l0aCBzcGVjaWZpZWQgYXR0cmlidXRlLg0KPiA+ICsNCj4gPiArICBAcGFy YW1baW4sIG91dF0gUGFnZVRhYmxlICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIHBhZ2UgdGFibGUg dG8gdXBkYXRlLA0KPiBvciBwb2ludGVyIHRvIE5VTEwgaWYgYSBuZXcgcGFnZSB0YWJsZSBpcyB0 byBiZSBjcmVhdGVkLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICBQYWdpbmdNb2RlICAgICBUaGUg cGFnaW5nIG1vZGUuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIEJ1ZmZlciAgICAgICAgIFRoZSBm cmVlIGJ1ZmZlciB0byBiZSB1c2VkIGZvciBwYWdlIHRhYmxlDQo+IGNyZWF0aW9uL3VwZGF0aW5n Lg0KPiA+ICsgIEBwYXJhbVtpbiwgb3V0XSBCdWZmZXJTaXplICAgICBUaGUgYnVmZmVyIHNpemUu DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIHJldHVybiwgdGhlIHJl bWFpbmluZyBidWZmZXIgc2l6ZS4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVGhlIGZyZWUgYnVmZmVyIGlzIHVzZWQgZnJvbSB0aGUgZW5kIHNvIGNhbGxlciBjYW4gc3Vw cGx5DQo+IHRoZSBzYW1lIEJ1ZmZlciBwb2ludGVyIHdpdGggYW4gdXBkYXRlZA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJTaXplIGluIHRoZSBzZWNvbmQgY2Fs bCB0byB0aGlzIEFQSS4NCj4gPiArICBAcGFyYW1baW5dICAgICAgTGluZWFyQWRkcmVzcyAgVGhl IHN0YXJ0IG9mIHRoZSBsaW5lYXIgYWRkcmVzcyByYW5nZS4NCj4gPiArICBAcGFyYW1baW5dICAg ICAgTGVuZ3RoICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgbGluZWFyIGFkZHJlc3MgcmFuZ2Uu DQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIEF0dHJpYnV0ZSAgICAgIFRoZSBhdHRyaWJ1dGUgb2Yg dGhlIGxpbmVhciBhZGRyZXNzIHJhbmdlLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBbGwgbm9uLXJlc2VydmVkIGZpZWxkcyBpbiBJQTMyX01BUF9BVFRSSUJVVEUgYXJl DQo+IHN1cHBvcnRlZCB0byBzZXQgaW4gdGhlIHBhZ2UgdGFibGUuDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgdGFibGUgZW50cmllcyB0aGF0IG1hcCB0aGUgbGlu ZWFyIGFkZHJlc3MgcmFuZ2UgYXJlDQo+IHJlc2V0IHRvIDAgYmVmb3JlIHNldCB0byB0aGUgbmV3 IGF0dHJpYnV0ZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGEg bmV3IHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBpcyBzZXQuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAg IE1hc2sgICAgICAgICAgIFRoZSBtYXNrIHVzZWQgZm9yIGF0dHJpYnV0ZS4gVGhlDQo+IGNvcnJl c3BvbmRpbmcgZmllbGQgaW4gQXR0cmlidXRlIGlzIGlnbm9yZWQgaWYgdGhhdCBpbiBNYXNrIGlz IDAuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgUkVUVVJOX1VOU1VQUE9SVEVEICAgICAgICBQYWdp bmdNb2RlIGlzIG5vdCBzdXBwb3J0ZWQuDQo+ID4gKyAgQHJldHZhbCBSRVRVUk5fSU5WQUxJRF9Q QVJBTUVURVIgIFBhZ2VUYWJsZSwgQnVmZmVyU2l6ZSwNCj4gQXR0cmlidXRlIG9yIE1hc2sgaXMg TlVMTC4NCj4gPiArICBAcmV0dmFsIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUiAgKkJ1ZmZlclNp emUgaXMgbm90IG11bHRpcGxlIG9mDQo+IDRLQi4NCj4gPiArICBAcmV0dmFsIFJFVFVSTl9CVUZG RVJfVE9PX1NNQUxMICAgVGhlIGJ1ZmZlciBpcyB0b28gc21hbGwgZm9yIHBhZ2UNCj4gdGFibGUg Y3JlYXRpb24vdXBkYXRpbmcuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEJ1ZmZlclNpemUgaXMgdXBkYXRlZCB0byBpbmRpY2F0ZSB0aGUgZXhwZWN0ZWQgYnVmZmVy DQo+IHNpemUuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxl ciBtYXkgc3RpbGwgZ2V0IFJFVFVSTl9CVUZGRVJfVE9PX1NNQUxMIHdpdGgNCj4gdGhlIG5ldyBC dWZmZXJTaXplLg0KPiA+ICsgIEByZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgICAgICBQYWdl VGFibGUgaXMgY3JlYXRlZC91cGRhdGVkDQo+IHN1Y2Nlc3NmdWxseS4NCj4gPiArKiovDQo+ID4g K1JFVFVSTl9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1BhZ2VUYWJsZU1hcCAoDQo+ID4gKyAg SU4gT1VUIFVJTlROICAgICAgICAgICAgICAgKlBhZ2VUYWJsZSAgT1BUSU9OQUwsDQo+ID4gKyAg SU4gICAgIFBBR0lOR19NT0RFICAgICAgICAgUGFnaW5nTW9kZSwNCj4gPiArICBJTiAgICAgVk9J RCAgICAgICAgICAgICAgICAqQnVmZmVyLA0KPiA+ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAg ICAgICpCdWZmZXJTaXplLA0KPiA+ICsgIElOICAgICBVSU5UNjQgICAgICAgICAgICAgIExpbmVh ckFkZHJlc3MsDQo+ID4gKyAgSU4gICAgIFVJTlQ2NCAgICAgICAgICAgICAgTGVuZ3RoLA0KPiA+ ICsgIElOICAgICBJQTMyX01BUF9BVFRSSUJVVEUgICpBdHRyaWJ1dGUsDQo+ID4gKyAgSU4gICAg IElBMzJfTUFQX0FUVFJJQlVURSAgKk1hc2sNCj4gPiArICApOw0KPiA+ICsNCj4gPiArdHlwZWRl ZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICBMaW5lYXJBZGRyZXNzOw0K PiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICBMZW5ndGg7DQo+ID4gKyAgSUEzMl9NQVBfQVRU UklCVVRFICAgIEF0dHJpYnV0ZTsNCj4gPiArfSBJQTMyX01BUF9FTlRSWTsNCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIFBhcnNlIHBhZ2UgdGFibGUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0g ICAgICBQYWdlVGFibGUgIFBvaW50ZXIgdG8gdGhlIHBhZ2UgdGFibGUuDQo+ID4gKyAgQHBhcmFt W2luXSAgICAgIFBhZ2luZ01vZGUgVGhlIHBhZ2luZyBtb2RlLg0KPiA+ICsgIEBwYXJhbVtvdXRd ICAgICBNYXAgICAgICAgIFJldHVybiBhbiBhcnJheSB0aGF0IGRlc2NyaWJlcyBtdWx0aXBsZSBs aW5lYXINCj4gYWRkcmVzcyByYW5nZXMuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdIE1hcENvdW50 ICAgT24gaW5wdXQsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzDQo+IHRoYXQgTWFwIGNh biBob2xkLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIG91dHB1dCwgdGhl IG51bWJlciBvZiBlbnRyaWVzIGluIE1hcC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBSRVRVUk5f VU5TVVBQT1JURUQgICAgICAgUGFnZUxldmVsIGlzIG5vdCA1IG9yIDQuDQo+ID4gKyAgQHJldHZh bCBSRVRVUk5fSU5WQUxJRF9QQVJBTUVURVIgTWFwQ291bnQgaXMgTlVMTC4NCj4gPiArICBAcmV0 dmFsIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUiAqTWFwQ291bnQgaXMgbm90IDAgYnV0IE1hcCBp cw0KPiBOVUxMLg0KPiA+ICsgIEByZXR2YWwgUkVUVVJOX0JVRkZFUl9UT09fU01BTEwgICpNYXBD b3VudCBpcyB0b28gc21hbGwuDQo+ID4gKyAgQHJldHZhbCBSRVRVUk5fU1VDQ0VTUyAgICAgICAg ICAgUGFnZSB0YWJsZSBpcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsqKi8NCj4gPiArUkVU VVJOX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArUGFnZVRhYmxlUGFyc2UgKA0KPiA+ICsgIElO ICAgICBVSU5UTiAgICAgICAgICAgUGFnZVRhYmxlLA0KPiA+ICsgIElOICAgICBQQUdJTkdfTU9E RSAgICAgUGFnaW5nTW9kZSwNCj4gPiArICBJTiAgICAgSUEzMl9NQVBfRU5UUlkgICpNYXAsDQo+ ID4gKyAgSU4gT1VUIFVJTlROICAgICAgICAgICAqTWFwQ291bnQNCj4gPiArICApOw0KPiA+ICsN Cj4gPiArI2VuZGlmDQo+ID4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvTGlicmFyeS9DcHVQYWdl VGFibGVMaWIvQ3B1UGFnZVRhYmxlLmgNCj4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvQ3B1UGFnZVRh YmxlTGliL0NwdVBhZ2VUYWJsZS5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRl eCAwMDAwMDAwMDAwLi5jMDQxZWEzZjU2DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1Vl ZmlDcHVQa2cvTGlicmFyeS9DcHVQYWdlVGFibGVMaWIvQ3B1UGFnZVRhYmxlLmgNCj4gPiBAQCAt MCwwICsxLDIwNCBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBJbnRlcm5hbCBoZWFkZXIgZm9y IENwdVBhZ2VUYWJsZUxpYi4NCj4gPiArDQo+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIyLCBJbnRl bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gKyAgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICsNCj4gPiArI2lmbmRlZiBDUFVfUEFHRV9UQUJMRV9IXw0KPiA+ICsjZGVmaW5lIENQVV9QQUdF X1RBQkxFX0hfDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8QmFzZS5oPg0KPiA+ICsjaW5jbHVkZSA8 TGlicmFyeS9CYXNlTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIu aD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExp YnJhcnkvQ3B1UGFnZVRhYmxlTGliLmg+DQo+ID4gKw0KPiA+ICsjZGVmaW5lIElBMzJfUEVfQkFT RV9BRERSRVNTX01BU0tfNDAgIDB4RkZGRkZGRkZGRjAwMHVsbA0KPiA+ICsjZGVmaW5lIElBMzJf UEVfQkFTRV9BRERSRVNTX01BU0tfMzkgIDB4RkZGRkZGRkZGRTAwMHVsbA0KPiA+ICsNCj4gPiAr I2RlZmluZSBSRUdJT05fTEVOR1RIKGwpICBMU2hpZnRVNjQgKDEsIChsKSAqIDkgKyAzKQ0KPiA+ ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQ2NCAgICBQcmVzZW50IDogMTsg ICAgICAgICAgICAgIC8vIDAgPSBOb3QgcHJlc2VudCBpbiBtZW1vcnksIDEgPSBQcmVzZW50IGlu DQo+IG1lbW9yeQ0KPiA+ICt9IElBMzJfUEFHRV9DT01NT05fRU5UUlk7DQo+ID4gKw0KPiA+ICsv Ly8NCj4gPiArLy8vIEZvcm1hdCBvZiBhIG5vbi1sZWFmIGVudHJ5IHRoYXQgcmVmZXJlbmNlcyBh IHBhZ2UgdGFibGUgZW50cnkNCj4gPiArLy8vDQo+ID4gK3R5cGVkZWYgdW5pb24gew0KPiA+ICsg IHN0cnVjdCB7DQo+ID4gKyAgICBVSU5UNjQgICAgUHJlc2VudCAgICAgICAgICAgICAgOiAxOyAv LyAwID0gTm90IHByZXNlbnQgaW4gbWVtb3J5LCAxID0gUHJlc2VudCBpbg0KPiBtZW1vcnkNCj4g PiArICAgIFVJTlQ2NCAgICBSZWFkV3JpdGUgICAgICAgICAgICA6IDE7IC8vIDAgPSBSZWFkLU9u bHksIDE9IFJlYWQvV3JpdGUNCj4gPiArICAgIFVJTlQ2NCAgICBVc2VyU3VwZXJ2aXNvciAgICAg ICA6IDE7IC8vIDAgPSBTdXBlcnZpc29yLCAxPVVzZXINCj4gPiArICAgIFVJTlQ2NCAgICBXcml0 ZVRocm91Z2ggICAgICAgICA6IDE7IC8vIDAgPSBXcml0ZS1CYWNrIGNhY2hpbmcsIDE9V3JpdGUt DQo+IFRocm91Z2ggY2FjaGluZw0KPiA+ICsgICAgVUlOVDY0ICAgIENhY2hlRGlzYWJsZWQgICAg ICAgIDogMTsgLy8gMCA9IENhY2hlZCwgMT1Ob24tQ2FjaGVkDQo+ID4gKyAgICBVSU5UNjQgICAg QWNjZXNzZWQgICAgICAgICAgICAgOiAxOyAvLyAwID0gTm90IGFjY2Vzc2VkLCAxID0gQWNjZXNz ZWQgKHNldCBieQ0KPiBDUFUpDQo+ID4gKyAgICBVSU5UNjQgICAgQXZhaWxhYmxlMCAgICAgICAg ICAgOiAxOyAvLyBJZ25vcmVkDQo+ID4gKyAgICBVSU5UNjQgICAgTXVzdEJlWmVybyAgICAgICAg ICAgOiAxOyAvLyBNdXN0IEJlIFplcm8NCj4gPiArDQo+ID4gKyAgICBVSU5UNjQgICAgQXZhaWxh YmxlMiAgICAgICAgICAgOiA0OyAvLyBJZ25vcmVkDQo+ID4gKw0KPiA+ICsgICAgVUlOVDY0ICAg IFBhZ2VUYWJsZUJhc2VBZGRyZXNzIDogNDA7IC8vIFBhZ2UgVGFibGUgQmFzZSBBZGRyZXNzDQo+ ID4gKyAgICBVSU5UNjQgICAgQXZhaWxhYmxlMyAgICAgICAgICAgOiAxMTsgLy8gSWdub3JlZA0K PiA+ICsgICAgVUlOVDY0ICAgIE54ICAgICAgICAgICAgICAgICAgIDogMTsgIC8vIE5vIEV4ZWN1 dGUgYml0DQo+ID4gKyAgfSBCaXRzOw0KPiA+ICsgIFVJTlQ2NCAgICBVaW50NjQ7DQo+ID4gK30g SUEzMl9QQUdFX05PTl9MRUFGX0VOVFJZOw0KPiA+ICsNCj4gPiArI2RlZmluZSBJQTMyX1BOTEVf UEFHRV9UQUJMRV9CQVNFX0FERFJFU1MocGEpICAoKHBhKS0+VWludDY0ICYNCj4gSUEzMl9QRV9C QVNFX0FERFJFU1NfTUFTS180MCkNCj4gPiArDQo+ID4gKy8vLw0KPiA+ICsvLy8gRm9ybWF0IG9m IGEgUE1MNSBFbnRyeSAoUE1MNUUpIHRoYXQgUmVmZXJlbmNlcyBhIFBNTDQgVGFibGUNCj4gPiAr Ly8vDQo+ID4gK3R5cGVkZWYgSUEzMl9QQUdFX05PTl9MRUFGX0VOVFJZIElBMzJfUE1MNUU7DQo+ ID4gKw0KPiA+ICsvLy8NCj4gPiArLy8vIEZvcm1hdCBvZiBhIFBNTDQgRW50cnkgKFBNTDRFKSB0 aGF0IFJlZmVyZW5jZXMgYSBQYWdlLURpcmVjdG9yeS0NCj4gUG9pbnRlciBUYWJsZQ0KPiA+ICsv Ly8NCj4gPiArdHlwZWRlZiBJQTMyX1BBR0VfTk9OX0xFQUZfRU5UUlkgSUEzMl9QTUw0RTsNCj4g PiArDQo+ID4gKy8vLw0KPiA+ICsvLy8gRm9ybWF0IG9mIGEgUGFnZS1EaXJlY3RvcnktUG9pbnRl ci1UYWJsZSBFbnRyeSAoUERQVEUpIHRoYXQNCj4gUmVmZXJlbmNlcyBhIFBhZ2UgRGlyZWN0b3J5 DQo+ID4gKy8vLw0KPiA+ICt0eXBlZGVmIElBMzJfUEFHRV9OT05fTEVBRl9FTlRSWSBJQTMyX1BE UFRFOw0KPiA+ICsNCj4gPiArLy8vDQo+ID4gKy8vLyBGb3JtYXQgb2YgYSBQYWdlLURpcmVjdG9y eSBFbnRyeSB0aGF0IFJlZmVyZW5jZXMgYSBQYWdlIFRhYmxlDQo+ID4gKy8vLw0KPiA+ICt0eXBl ZGVmIElBMzJfUEFHRV9OT05fTEVBRl9FTlRSWSBJQTMyX1BERTsNCj4gPiArDQo+ID4gKy8vLw0K PiA+ICsvLy8gRm9ybWF0IG9mIGEgbGVhZiBlbnRyeSB0aGF0IE1hcHMgYSAxLUdieXRlIG9yIDIt TUJ5dGUgUGFnZQ0KPiA+ICsvLy8NCj4gPiArdHlwZWRlZiB1bmlvbiB7DQo+ID4gKyAgc3RydWN0 IHsNCj4gPiArICAgIFVJTlQ2NCAgICBQcmVzZW50ICAgICAgICAgICAgICA6IDE7IC8vIDAgPSBO b3QgcHJlc2VudCBpbiBtZW1vcnksIDEgPSBQcmVzZW50IGluDQo+IG1lbW9yeQ0KPiA+ICsgICAg VUlOVDY0ICAgIFJlYWRXcml0ZSAgICAgICAgICAgIDogMTsgLy8gMCA9IFJlYWQtT25seSwgMT0g UmVhZC9Xcml0ZQ0KPiA+ICsgICAgVUlOVDY0ICAgIFVzZXJTdXBlcnZpc29yICAgICAgIDogMTsg Ly8gMCA9IFN1cGVydmlzb3IsIDE9VXNlcg0KPiA+ICsgICAgVUlOVDY0ICAgIFdyaXRlVGhyb3Vn aCAgICAgICAgIDogMTsgLy8gMCA9IFdyaXRlLUJhY2sgY2FjaGluZywgMT1Xcml0ZS0NCj4gVGhy b3VnaCBjYWNoaW5nDQo+ID4gKyAgICBVSU5UNjQgICAgQ2FjaGVEaXNhYmxlZCAgICAgICAgOiAx OyAvLyAwID0gQ2FjaGVkLCAxPU5vbi1DYWNoZWQNCj4gPiArICAgIFVJTlQ2NCAgICBBY2Nlc3Nl ZCAgICAgICAgICAgICA6IDE7IC8vIDAgPSBOb3QgYWNjZXNzZWQsIDEgPSBBY2Nlc3NlZCAoc2V0 IGJ5DQo+IENQVSkNCj4gPiArICAgIFVJTlQ2NCAgICBEaXJ0eSAgICAgICAgICAgICAgICA6IDE7 IC8vIDAgPSBOb3QgZGlydHksIDEgPSBEaXJ0eSAoc2V0IGJ5IENQVSkNCj4gPiArICAgIFVJTlQ2 NCAgICBNdXN0QmVPbmUgICAgICAgICAgICA6IDE7IC8vIFBhZ2UgU2l6ZS4gTXVzdCBCZSBPbmUN Cj4gPiArDQo+ID4gKyAgICBVSU5UNjQgICAgR2xvYmFsICAgICAgICAgICAgICAgOiAxOyAvLyAw ID0gTm90IGdsb2JhbCwgMSA9IEdsb2JhbCAoaWYgQ1I0LlBHRSA9IDEpDQo+ID4gKyAgICBVSU5U NjQgICAgQXZhaWxhYmxlMSAgICAgICAgICAgOiAzOyAvLyBJZ25vcmVkDQo+ID4gKyAgICBVSU5U NjQgICAgUGF0ICAgICAgICAgICAgICAgICAgOiAxOyAvLyBQQVQNCj4gPiArDQo+ID4gKyAgICBV SU5UNjQgICAgUGFnZVRhYmxlQmFzZUFkZHJlc3MgOiAzOTsgLy8gUGFnZSBUYWJsZSBCYXNlIEFk ZHJlc3MNCj4gPiArICAgIFVJTlQ2NCAgICBBdmFpbGFibGUzICAgICAgICAgICA6IDc7ICAvLyBJ Z25vcmVkDQo+ID4gKyAgICBVSU5UNjQgICAgUHJvdGVjdGlvbktleSAgICAgICAgOiA0OyAgLy8g UHJvdGVjdGlvbiBrZXkNCj4gPiArICAgIFVJTlQ2NCAgICBOeCAgICAgICAgICAgICAgICAgICA6 IDE7ICAvLyBObyBFeGVjdXRlIGJpdA0KPiA+ICsgIH0gQml0czsNCj4gPiArICBVSU5UNjQgICAg VWludDY0Ow0KPiA+ICt9IElBMzJfUEFHRV9MRUFGX0VOVFJZX0JJR19QQUdFU0laRTsNCj4gPiAr I2RlZmluZSBJQTMyX1BMRUJfUEFHRV9UQUJMRV9CQVNFX0FERFJFU1MocGEpICAoKHBhKS0+VWlu dDY0ICYNCj4gSUEzMl9QRV9CQVNFX0FERFJFU1NfTUFTS18zOSkNCj4gPiArDQo+ID4gKy8vLw0K PiA+ICsvLy8gRm9ybWF0IG9mIGEgUGFnZS1EaXJlY3RvcnkgRW50cnkgdGhhdCBNYXBzIGEgMi1N Qnl0ZSBQYWdlDQo+ID4gKy8vLw0KPiA+ICt0eXBlZGVmIElBMzJfUEFHRV9MRUFGX0VOVFJZX0JJ R19QQUdFU0laRSBJQTMyX1BERV8yTTsNCj4gPiArDQo+ID4gKy8vLw0KPiA+ICsvLy8gRm9ybWF0 IG9mIGEgUGFnZS1EaXJlY3RvcnktUG9pbnRlci1UYWJsZSBFbnRyeSAoUERQVEUpIHRoYXQgTWFw cyBhIDEtDQo+IEdCeXRlIFBhZ2UNCj4gPiArLy8vDQo+ID4gK3R5cGVkZWYgSUEzMl9QQUdFX0xF QUZfRU5UUllfQklHX1BBR0VTSVpFIElBMzJfUERQVEVfMUc7DQo+ID4gKw0KPiA+ICsvLy8NCj4g PiArLy8vIEZvcm1hdCBvZiBhIFBhZ2UtVGFibGUgRW50cnkgdGhhdCBNYXBzIGEgNC1LQnl0ZSBQ YWdlDQo+ID4gKy8vLw0KPiA+ICt0eXBlZGVmIHVuaW9uIHsNCj4gPiArICBzdHJ1Y3Qgew0KPiA+ ICsgICAgVUlOVDY0ICAgIFByZXNlbnQgICAgICAgICAgICAgIDogMTsgLy8gMCA9IE5vdCBwcmVz ZW50IGluIG1lbW9yeSwgMSA9IFByZXNlbnQgaW4NCj4gbWVtb3J5DQo+ID4gKyAgICBVSU5UNjQg ICAgUmVhZFdyaXRlICAgICAgICAgICAgOiAxOyAvLyAwID0gUmVhZC1Pbmx5LCAxPSBSZWFkL1dy aXRlDQo+ID4gKyAgICBVSU5UNjQgICAgVXNlclN1cGVydmlzb3IgICAgICAgOiAxOyAvLyAwID0g U3VwZXJ2aXNvciwgMT1Vc2VyDQo+ID4gKyAgICBVSU5UNjQgICAgV3JpdGVUaHJvdWdoICAgICAg ICAgOiAxOyAvLyAwID0gV3JpdGUtQmFjayBjYWNoaW5nLCAxPVdyaXRlLQ0KPiBUaHJvdWdoIGNh Y2hpbmcNCj4gPiArICAgIFVJTlQ2NCAgICBDYWNoZURpc2FibGVkICAgICAgICA6IDE7IC8vIDAg PSBDYWNoZWQsIDE9Tm9uLUNhY2hlZA0KPiA+ICsgICAgVUlOVDY0ICAgIEFjY2Vzc2VkICAgICAg ICAgICAgIDogMTsgLy8gMCA9IE5vdCBhY2Nlc3NlZCwgMSA9IEFjY2Vzc2VkIChzZXQgYnkNCj4g Q1BVKQ0KPiA+ICsgICAgVUlOVDY0ICAgIERpcnR5ICAgICAgICAgICAgICAgIDogMTsgLy8gMCA9 IE5vdCBkaXJ0eSwgMSA9IERpcnR5IChzZXQgYnkgQ1BVKQ0KPiA+ICsgICAgVUlOVDY0ICAgIFBh dCAgICAgICAgICAgICAgICAgIDogMTsgLy8gUEFUDQo+ID4gKw0KPiA+ICsgICAgVUlOVDY0ICAg IEdsb2JhbCAgICAgICAgICAgICAgIDogMTsgLy8gMCA9IE5vdCBnbG9iYWwsIDEgPSBHbG9iYWwg KGlmIENSNC5QR0UgPSAxKQ0KPiA+ICsgICAgVUlOVDY0ICAgIEF2YWlsYWJsZTEgICAgICAgICAg IDogMzsgLy8gSWdub3JlZA0KPiA+ICsNCj4gPiArICAgIFVJTlQ2NCAgICBQYWdlVGFibGVCYXNl QWRkcmVzcyA6IDQwOyAvLyBQYWdlIFRhYmxlIEJhc2UgQWRkcmVzcw0KPiA+ICsgICAgVUlOVDY0 ICAgIEF2YWlsYWJsZTMgICAgICAgICAgIDogNzsgIC8vIElnbm9yZWQNCj4gPiArICAgIFVJTlQ2 NCAgICBQcm90ZWN0aW9uS2V5ICAgICAgICA6IDQ7ICAvLyBQcm90ZWN0aW9uIGtleQ0KPiA+ICsg ICAgVUlOVDY0ICAgIE54ICAgICAgICAgICAgICAgICAgIDogMTsgIC8vIE5vIEV4ZWN1dGUgYml0 DQo+ID4gKyAgfSBCaXRzOw0KPiA+ICsgIFVJTlQ2NCAgICBVaW50NjQ7DQo+ID4gK30gSUEzMl9Q VEVfNEs7DQo+ID4gKyNkZWZpbmUgSUEzMl9QVEU0S19QQUdFX1RBQkxFX0JBU0VfQUREUkVTUyhw YSkgICgocGEpLT5VaW50NjQgJg0KPiBJQTMyX1BFX0JBU0VfQUREUkVTU19NQVNLXzQwKQ0KPiA+ ICsNCj4gPiArLy8vDQo+ID4gKy8vLyBGb3JtYXQgb2YgYSBQYWdlLURpcmVjdG9yeS1Qb2ludGVy LVRhYmxlIEVudHJ5IChQRFBURSkgdGhhdA0KPiBSZWZlcmVuY2VzIGEgUGFnZSBEaXJlY3Rvcnkg KDMyYml0IFBBRSBzcGVjaWZpYykNCj4gPiArLy8vDQo+ID4gK3R5cGVkZWYgdW5pb24gew0KPiA+ ICsgIHN0cnVjdCB7DQo+ID4gKyAgICBVSU5UNjQgICAgUHJlc2VudCAgICAgICAgICAgICAgOiAx OyAvLyAwID0gTm90IHByZXNlbnQgaW4gbWVtb3J5LCAxID0gUHJlc2VudCBpbg0KPiBtZW1vcnkN Cj4gPiArICAgIFVJTlQ2NCAgICBNdXN0QmVaZXJvICAgICAgICAgICA6IDI7IC8vIE11c3QgQmUg WmVybw0KPiA+ICsgICAgVUlOVDY0ICAgIFdyaXRlVGhyb3VnaCAgICAgICAgIDogMTsgLy8gMCA9 IFdyaXRlLUJhY2sgY2FjaGluZywgMT1Xcml0ZS0NCj4gVGhyb3VnaCBjYWNoaW5nDQo+ID4gKyAg ICBVSU5UNjQgICAgQ2FjaGVEaXNhYmxlZCAgICAgICAgOiAxOyAvLyAwID0gQ2FjaGVkLCAxPU5v bi1DYWNoZWQNCj4gPiArICAgIFVJTlQ2NCAgICBNdXN0QmVaZXJvMiAgICAgICAgICA6IDQ7IC8v IE11c3QgQmUgWmVybw0KPiA+ICsNCj4gPiArICAgIFVJTlQ2NCAgICBBdmFpbGFibGUgICAgICAg ICAgICA6IDM7IC8vIElnbm9yZWQNCj4gPiArDQo+ID4gKyAgICBVSU5UNjQgICAgUGFnZVRhYmxl QmFzZUFkZHJlc3MgOiA0MDsgLy8gUGFnZSBUYWJsZSBCYXNlIEFkZHJlc3MNCj4gPiArICAgIFVJ TlQ2NCAgICBNdXN0QmVaZXJvMyAgICAgICAgICA6IDEyOyAvLyBNdXN0IEJlIFplcm8NCj4gPiAr ICB9IEJpdHM7DQo+ID4gKyAgVUlOVDY0ICAgIFVpbnQ2NDsNCj4gPiArfSBJQTMyX1BEUFRFX1BB RTsNCj4gPiArDQo+ID4gK3R5cGVkZWYgdW5pb24gew0KPiA+ICsgIElBMzJfUEFHRV9OT05fTEVB Rl9FTlRSWSAgICAgICAgICAgICBQbmxlOyAvLyBUbyBhY2Nlc3MgUG1sNSwgUG1sNCwNCj4gUGRw dGUgYW5kIFBkZS4NCj4gPiArICBJQTMyX1BNTDVFICAgICAgICAgICAgICAgICAgICAgICAgICAg UG1sNTsNCj4gPiArICBJQTMyX1BNTDRFICAgICAgICAgICAgICAgICAgICAgICAgICAgUG1sNDsN Cj4gPiArICBJQTMyX1BEUFRFICAgICAgICAgICAgICAgICAgICAgICAgICAgUGRwdGU7DQo+ID4g KyAgSUEzMl9QREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBkZTsNCj4gPiArDQo+ID4g KyAgSUEzMl9QQUdFX0xFQUZfRU5UUllfQklHX1BBR0VTSVpFICAgIFBsZUI7IC8vIHRvIGFjY2Vz cyBQZHB0ZTFHDQo+IGFuZCBQZGUyTS4NCj4gPiArICBJQTMyX1BEUFRFXzFHICAgICAgICAgICAg ICAgICAgICAgICAgUGRwdGUxRzsNCj4gPiArICBJQTMyX1BERV8yTSAgICAgICAgICAgICAgICAg ICAgICAgICAgUGRlMk07DQo+ID4gKw0KPiA+ICsgIElBMzJfUFRFXzRLICAgICAgICAgICAgICAg ICAgICAgICAgICBQdGU0SzsNCj4gPiArDQo+ID4gKyAgSUEzMl9QRFBURV9QQUUgICAgICAgICAg ICAgICAgICAgICAgIFBkcHRlUGFlOw0KPiA+ICsgIElBMzJfUEFHRV9DT01NT05fRU5UUlkgICAg ICAgICAgICAgICBQY2U7IC8vIFRvIGFjY2VzcyBhbGwgY29tbW9uIGJpdHMNCj4gaW4gYWJvdmUg ZW50cmllcy4NCj4gPiArDQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFVpbnQ2NDsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VWludG47DQo+ID4gK30gSUEzMl9QQUdJTkdfRU5UUlk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICBSZXR1cm4gVFJVRSB3aGVuIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIGEgbGVhZiBlbnRyeSB0 aGF0IHBvaW50cyB0byB0aGUNCj4gcGh5c2ljYWwgYWRkcmVzcyBtZW1vcnkuDQo+ID4gKyAgUmV0 dXJuIEZBTFNFIHdoZW4gdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgYSBub24tbGVhZiBlbnRyeSB0 aGF0IHBvaW50cyB0bw0KPiB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dIFBhZ2luZ0VudHJ5IFBvaW50ZXIgdG8gdGhlIHBhZ2UgdGFibGUgZW50cnkuDQo+ ID4gKyAgQHBhcmFtW2luXSBMZXZlbCAgICAgICBQYWdlIGxldmVsIHdoZXJlIHRoZSBwYWdlIHRh YmxlIGVudHJ5IHJlc2lkZXMgaW4uDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgSXQncyBh IGxlYWYgZW50cnkuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSBJdCdzIGEgbm9uLWxlYWYgZW50cnku DQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0lzUGxlICgNCj4gPiArICBJTiAgICAgSUEz Ml9QQUdJTkdfRU5UUlkgICpQYWdpbmdFbnRyeSwNCj4gPiArICBJTiAgICAgVUlOVE4gICAgICAg ICAgICAgIExldmVsDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJldHVybiB0 aGUgYXR0cmlidXRlIG9mIGEgMk0vMUcgcGFnZSB0YWJsZSBlbnRyeS4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSBQbGVCICAgICAgICAgICAgICAgUG9pbnRlciB0byBhIDJNLzFHIHBhZ2UgdGFi bGUgZW50cnkuDQo+ID4gKyAgQHBhcmFtW2luXSBQYXJlbnRNYXBBdHRyaWJ1dGUgUG9pbnRlciB0 byB0aGUgcGFyZW50IGF0dHJpYnV0ZS4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBBdHRyaWJ1dGUg b2YgdGhlIDJNLzFHIHBhZ2UgdGFibGUgZW50cnkuDQo+ID4gKyoqLw0KPiA+ICtVSU5UNjQNCj4g PiArUGFnZVRhYmxlTGliR2V0UGxlQk1hcEF0dHJpYnV0ZSAoDQo+ID4gKyAgSU4gSUEzMl9QQUdF X0xFQUZfRU5UUllfQklHX1BBR0VTSVpFICAqUGxlQiwNCj4gPiArICBJTiBJQTMyX01BUF9BVFRS SUJVVEUgICAgICAgICAgICAgICAgICpQYXJlbnRNYXBBdHRyaWJ1dGUNCj4gPiArICApOw0KPiA+ ICsNCj4gPiArI2VuZGlmDQo+ID4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvTGlicmFyeS9DcHVQ YWdlVGFibGVMaWIvQ3B1UGFnZVRhYmxlTGliLmluZg0KPiBiL1VlZmlDcHVQa2cvTGlicmFyeS9D cHVQYWdlVGFibGVMaWIvQ3B1UGFnZVRhYmxlTGliLmluZg0KPiA+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uZTRlYWQ3NDQxYw0KPiA+IC0tLSAvZGV2L251bGwN Cj4gPiArKysgYi9VZWZpQ3B1UGtnL0xpYnJhcnkvQ3B1UGFnZVRhYmxlTGliL0NwdVBhZ2VUYWJs ZUxpYi5pbmYNCj4gPiBAQCAtMCwwICsxLDM1IEBADQo+ID4gKyMjIEBmaWxlDQo+ID4gKyMgIFRo aXMgbGlicmFyeSBpbXBsZW1lbnRzIENwdVBhZ2VUYWJsZUxpYiB0aGF0IGFyZSBnZW5lcmljIGZv ciBJQTMyDQo+IGZhbWlseSBDUFUuDQo+ID4gKyMNCj4gPiArIyAgQ29weXJpZ2h0IChjKSAyMDIy LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gKyMgIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKyMNCj4gPiAr IyMNCj4gPiArDQo+ID4gK1tEZWZpbmVzXQ0KPiA+ICsgIElORl9WRVJTSU9OICAgICAgICAgICAg ICAgICAgICA9IDB4MDAwMTAwMDUNCj4gPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAg ICAgPSBDcHVQYWdlVGFibGVMaWINCj4gPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAg ICAgPSA1MjRlZDZhMS1mNjYxLTQ1MWItOTI5Yi1iNTRkNzU1YzkxNGENCj4gPiArICBNT0RVTEVf VFlQRSAgICAgICAgICAgICAgICAgICAgPSBCQVNFDQo+ID4gKyAgVkVSU0lPTl9TVFJJTkcgICAg ICAgICAgICAgICAgID0gMS4wDQo+ID4gKyAgTElCUkFSWV9DTEFTUyAgICAgICAgICAgICAgICAg ID0gQ3B1UGFnZVRhYmxlTGliDQo+ID4gKw0KPiA+ICsjDQo+ID4gKyMgVGhlIGZvbGxvd2luZyBp bmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5kIG5vdCByZXF1aXJlZCBieSB0aGUN Cj4gYnVpbGQgdG9vbHMuDQo+ID4gKyMNCj4gPiArIyAgVkFMSURfQVJDSElURUNUVVJFUyAgICAg ICAgICAgPSBJQTMyIFg2NA0KPiA+ICsjDQo+ID4gKw0KPiA+ICtbU291cmNlc10NCj4gPiArICBD cHVQYWdlVGFibGVNYXAuYw0KPiA+ICsgIENwdVBhZ2VUYWJsZVBhcnNlLmMNCj4gPiArICBDcHVQ YWdlVGFibGUuaA0KPiA+ICsNCj4gPiArW1BhY2thZ2VzXQ0KPiA+ICsgIE1kZVBrZy9NZGVQa2cu ZGVjDQo+ID4gKyAgVWVmaUNwdVBrZy9VZWZpQ3B1UGtnLmRlYw0KPiA+ICsNCj4gPiArW0xpYnJh cnlDbGFzc2VzXQ0KPiA+ICsgIEJhc2VMaWINCj4gPiArICBCYXNlTWVtb3J5TGliDQo+ID4gKyAg RGVidWdMaWINCj4gPiBkaWZmIC0tZ2l0IGEvVWVmaUNwdVBrZy9MaWJyYXJ5L0NwdVBhZ2VUYWJs ZUxpYi9DcHVQYWdlVGFibGVNYXAuYw0KPiBiL1VlZmlDcHVQa2cvTGlicmFyeS9DcHVQYWdlVGFi bGVMaWIvQ3B1UGFnZVRhYmxlTWFwLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGlu ZGV4IDAwMDAwMDAwMDAuLjI1ZTEzYTZmNmYNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIv VWVmaUNwdVBrZy9MaWJyYXJ5L0NwdVBhZ2VUYWJsZUxpYi9DcHVQYWdlVGFibGVNYXAuYw0KPiA+ IEBAIC0wLDAgKzEsNTQzIEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsgIFRoaXMgbGlicmFyeSBp bXBsZW1lbnRzIENwdVBhZ2VUYWJsZUxpYiB0aGF0IGFyZSBnZW5lcmljIGZvciBJQTMyIGZhbWls eQ0KPiBDUFUuDQo+ID4gKw0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAyMiwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArDQo+ID4g KyNpbmNsdWRlICJDcHVQYWdlVGFibGUuaCINCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFNldCB0 aGUgSUEzMl9QVEVfNEsuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gUHRlNEsgICAgIFBvaW50 ZXIgdG8gSUEzMl9QVEVfNEsuDQo+ID4gKyAgQHBhcmFtW2luXSBPZmZzZXQgICAgVGhlIG9mZnNl dCB3aXRoaW4gdGhlIGxpbmVhciBhZGRyZXNzIHJhbmdlLg0KPiA+ICsgIEBwYXJhbVtpbl0gQXR0 cmlidXRlIFRoZSBhdHRyaWJ1dGUgb2YgdGhlIGxpbmVhciBhZGRyZXNzIHJhbmdlLg0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIEFsbCBub24tcmVzZXJ2ZWQgZmllbGRzIGluIElBMzJfTUFQ X0FUVFJJQlVURSBhcmUNCj4gc3VwcG9ydGVkIHRvIHNldCBpbiB0aGUgcGFnZSB0YWJsZS4NCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBQYWdlIHRhYmxlIGVudHJ5IGlzIHJlc2V0IHRvIDAg YmVmb3JlIHNldCB0byB0aGUgbmV3IGF0dHJpYnV0ZQ0KPiB3aGVuIGEgbmV3IHBoeXNpY2FsIGJh c2UgYWRkcmVzcyBpcyBzZXQuDQo+ID4gKyAgQHBhcmFtW2luXSBNYXNrICAgICAgVGhlIG1hc2sg dXNlZCBmb3IgYXR0cmlidXRlLiBUaGUgY29ycmVzcG9uZGluZw0KPiBmaWVsZCBpbiBBdHRyaWJ1 dGUgaXMgaWdub3JlZCBpZiB0aGF0IGluIE1hc2sgaXMgMC4NCj4gPiArKiovDQo+ID4gK1ZPSUQN Cj4gPiArUGFnZVRhYmxlTGliU2V0UHRlNEsgKA0KPiA+ICsgIElOIElBMzJfUFRFXzRLICAgICAg ICAgKlB0ZTRLLA0KPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgT2Zmc2V0LA0KPiA+ICsg IElOIElBMzJfTUFQX0FUVFJJQlVURSAgKkF0dHJpYnV0ZSwNCj4gPiArICBJTiBJQTMyX01BUF9B VFRSSUJVVEUgICpNYXNrDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgaWYgKE1hc2stPkJpdHMu UGFnZVRhYmxlQmFzZUFkZHJlc3MpIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBSZXNldCBh bGwgYXR0cmlidXRlcyB3aGVuIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzIGNoYW5nZWQuDQo+ID4g KyAgICAvLw0KPiA+ICsgICAgUHRlNEstPlVpbnQ2NCA9IElBMzJfTUFQX0FUVFJJQlVURV9QQUdF X1RBQkxFX0JBU0VfQUREUkVTUw0KPiAoQXR0cmlidXRlKSArIE9mZnNldDsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIGlmIChNYXNrLT5CaXRzLlByZXNlbnQpIHsNCj4gPiArICAgIFB0ZTRLLT5C aXRzLlByZXNlbnQgPSBBdHRyaWJ1dGUtPkJpdHMuUHJlc2VudDsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIGlmIChNYXNrLT5CaXRzLlJlYWRXcml0ZSkgew0KPiA+ICsgICAgUHRlNEstPkJpdHMu UmVhZFdyaXRlID0gQXR0cmlidXRlLT5CaXRzLlJlYWRXcml0ZTsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIGlmIChNYXNrLT5CaXRzLlVzZXJTdXBlcnZpc29yKSB7DQo+ID4gKyAgICBQdGU0Sy0+ Qml0cy5Vc2VyU3VwZXJ2aXNvciA9IEF0dHJpYnV0ZS0+Qml0cy5Vc2VyU3VwZXJ2aXNvcjsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChNYXNrLT5CaXRzLldyaXRlVGhyb3VnaCkgew0KPiA+ ICsgICAgUHRlNEstPkJpdHMuV3JpdGVUaHJvdWdoID0gQXR0cmlidXRlLT5CaXRzLldyaXRlVGhy b3VnaDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChNYXNrLT5CaXRzLkNhY2hlRGlzYWJs ZWQpIHsNCj4gPiArICAgIFB0ZTRLLT5CaXRzLkNhY2hlRGlzYWJsZWQgPSBBdHRyaWJ1dGUtPkJp dHMuQ2FjaGVEaXNhYmxlZDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChNYXNrLT5CaXRz LkFjY2Vzc2VkKSB7DQo+ID4gKyAgICBQdGU0Sy0+Qml0cy5BY2Nlc3NlZCA9IEF0dHJpYnV0ZS0+ Qml0cy5BY2Nlc3NlZDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChNYXNrLT5CaXRzLkRp cnR5KSB7DQo+ID4gKyAgICBQdGU0Sy0+Qml0cy5EaXJ0eSA9IEF0dHJpYnV0ZS0+Qml0cy5EaXJ0 eTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChNYXNrLT5CaXRzLlBhdCkgew0KPiA+ICsg ICAgUHRlNEstPkJpdHMuUGF0ID0gQXR0cmlidXRlLT5CaXRzLlBhdDsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIGlmIChNYXNrLT5CaXRzLkdsb2JhbCkgew0KPiA+ICsgICAgUHRlNEstPkJpdHMu R2xvYmFsID0gQXR0cmlidXRlLT5CaXRzLkdsb2JhbDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IGlmIChNYXNrLT5CaXRzLlByb3RlY3Rpb25LZXkpIHsNCj4gPiArICAgIFB0ZTRLLT5CaXRzLlBy b3RlY3Rpb25LZXkgPSBBdHRyaWJ1dGUtPkJpdHMuUHJvdGVjdGlvbktleTsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIGlmIChNYXNrLT5CaXRzLk54KSB7DQo+ID4gKyAgICBQdGU0Sy0+Qml0cy5O eCA9IEF0dHJpYnV0ZS0+Qml0cy5OeDsNCj4gPiArICB9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFNldCB0aGUgSUEzMl9QRFBURV8xRyBvciBJQTMyX1BERV8yTS4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtW2luXSBQbGVCICAgICAgUG9pbnRlciB0byBQRFBURV8xRyBvciBQREVfMk0u IEJvdGggc2hhcmUgdGhlDQo+IHNhbWUgc3RydWN0dXJlIGRlZmluaXRpb24uDQo+ID4gKyAgQHBh cmFtW2luXSBPZmZzZXQgICAgVGhlIG9mZnNldCB3aXRoaW4gdGhlIGxpbmVhciBhZGRyZXNzIHJh bmdlLg0KPiA+ICsgIEBwYXJhbVtpbl0gQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb2YgdGhlIGxp bmVhciBhZGRyZXNzIHJhbmdlLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIEFsbCBub24t cmVzZXJ2ZWQgZmllbGRzIGluIElBMzJfTUFQX0FUVFJJQlVURSBhcmUNCj4gc3VwcG9ydGVkIHRv IHNldCBpbiB0aGUgcGFnZSB0YWJsZS4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBQYWdl IHRhYmxlIGVudHJ5IGlzIHJlc2V0IHRvIDAgYmVmb3JlIHNldCB0byB0aGUgbmV3IGF0dHJpYnV0 ZQ0KPiB3aGVuIGEgbmV3IHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBpcyBzZXQuDQo+ID4gKyAgQHBh cmFtW2luXSBNYXNrICAgICAgVGhlIG1hc2sgdXNlZCBmb3IgYXR0cmlidXRlLiBUaGUgY29ycmVz cG9uZGluZw0KPiBmaWVsZCBpbiBBdHRyaWJ1dGUgaXMgaWdub3JlZCBpZiB0aGF0IGluIE1hc2sg aXMgMC4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArUGFnZVRhYmxlTGliU2V0UGxlQiAoDQo+ ID4gKyAgSU4gSUEzMl9QQUdFX0xFQUZfRU5UUllfQklHX1BBR0VTSVpFICAqUGxlQiwNCj4gPiAr ICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCwNCj4gPiArICBJ TiBJQTMyX01BUF9BVFRSSUJVVEUgICAgICAgICAgICAgICAgICpBdHRyaWJ1dGUsDQo+ID4gKyAg SU4gSUEzMl9NQVBfQVRUUklCVVRFICAgICAgICAgICAgICAgICAqTWFzaw0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIGlmIChNYXNrLT5CaXRzLlBhZ2VUYWJsZUJhc2VBZGRyZXNzKSB7DQo+ID4g KyAgICAvLw0KPiA+ICsgICAgLy8gUmVzZXQgYWxsIGF0dHJpYnV0ZXMgd2hlbiB0aGUgcGh5c2lj YWwgYWRkcmVzcyBpcyBjaGFuZ2VkLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIFBsZUItPlVpbnQ2 NCA9IElBMzJfTUFQX0FUVFJJQlVURV9QQUdFX1RBQkxFX0JBU0VfQUREUkVTUw0KPiAoQXR0cmli dXRlKSArIE9mZnNldDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFBsZUItPkJpdHMuTXVzdEJl T25lID0gMTsNCj4gPiArDQo+ID4gKyAgaWYgKE1hc2stPkJpdHMuUHJlc2VudCkgew0KPiA+ICsg ICAgUGxlQi0+Qml0cy5QcmVzZW50ID0gQXR0cmlidXRlLT5CaXRzLlByZXNlbnQ7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICBpZiAoTWFzay0+Qml0cy5SZWFkV3JpdGUpIHsNCj4gPiArICAgIFBs ZUItPkJpdHMuUmVhZFdyaXRlID0gQXR0cmlidXRlLT5CaXRzLlJlYWRXcml0ZTsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIGlmIChNYXNrLT5CaXRzLlVzZXJTdXBlcnZpc29yKSB7DQo+ID4gKyAg ICBQbGVCLT5CaXRzLlVzZXJTdXBlcnZpc29yID0gQXR0cmlidXRlLT5CaXRzLlVzZXJTdXBlcnZp c29yOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKE1hc2stPkJpdHMuV3JpdGVUaHJvdWdo KSB7DQo+ID4gKyAgICBQbGVCLT5CaXRzLldyaXRlVGhyb3VnaCA9IEF0dHJpYnV0ZS0+Qml0cy5X cml0ZVRocm91Z2g7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoTWFzay0+Qml0cy5DYWNo ZURpc2FibGVkKSB7DQo+ID4gKyAgICBQbGVCLT5CaXRzLkNhY2hlRGlzYWJsZWQgPSBBdHRyaWJ1 dGUtPkJpdHMuQ2FjaGVEaXNhYmxlZDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChNYXNr LT5CaXRzLkFjY2Vzc2VkKSB7DQo+ID4gKyAgICBQbGVCLT5CaXRzLkFjY2Vzc2VkID0gQXR0cmli dXRlLT5CaXRzLkFjY2Vzc2VkOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKE1hc2stPkJp dHMuRGlydHkpIHsNCj4gPiArICAgIFBsZUItPkJpdHMuRGlydHkgPSBBdHRyaWJ1dGUtPkJpdHMu RGlydHk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoTWFzay0+Qml0cy5QYXQpIHsNCj4g PiArICAgIFBsZUItPkJpdHMuUGF0ID0gQXR0cmlidXRlLT5CaXRzLlBhdDsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIGlmIChNYXNrLT5CaXRzLkdsb2JhbCkgew0KPiA+ICsgICAgUGxlQi0+Qml0 cy5HbG9iYWwgPSBBdHRyaWJ1dGUtPkJpdHMuR2xvYmFsOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgaWYgKE1hc2stPkJpdHMuUHJvdGVjdGlvbktleSkgew0KPiA+ICsgICAgUGxlQi0+Qml0cy5Q cm90ZWN0aW9uS2V5ID0gQXR0cmlidXRlLT5CaXRzLlByb3RlY3Rpb25LZXk7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBpZiAoTWFzay0+Qml0cy5OeCkgew0KPiA+ICsgICAgUGxlQi0+Qml0cy5O eCA9IEF0dHJpYnV0ZS0+Qml0cy5OeDsNCj4gPiArICB9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFNldCB0aGUgSUEzMl9QRFBURV8xRywgSUEzMl9QREVfMk0gb3IgSUEzMl9QVEVf NEsuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gTGV2ZWwgICAgIDMsIDIgb3IgMS4NCj4gPiAr ICBAcGFyYW1baW5dIFBsZSAgICAgICBQb2ludGVyIHRvIFBEUFRFXzFHLCBQREVfMk0gb3IgSUEz Ml9QVEVfNEssDQo+IGRlcGVuZGluZyBvbiB0aGUgTGV2ZWwuDQo+ID4gKyAgQHBhcmFtW2luXSBP ZmZzZXQgICAgVGhlIG9mZnNldCB3aXRoaW4gdGhlIGxpbmVhciBhZGRyZXNzIHJhbmdlLg0KPiA+ ICsgIEBwYXJhbVtpbl0gQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb2YgdGhlIGxpbmVhciBhZGRy ZXNzIHJhbmdlLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIEFsbCBub24tcmVzZXJ2ZWQg ZmllbGRzIGluIElBMzJfTUFQX0FUVFJJQlVURSBhcmUNCj4gc3VwcG9ydGVkIHRvIHNldCBpbiB0 aGUgcGFnZSB0YWJsZS4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBQYWdlIHRhYmxlIGVu dHJ5IGlzIHJlc2V0IHRvIDAgYmVmb3JlIHNldCB0byB0aGUgbmV3IGF0dHJpYnV0ZQ0KPiB3aGVu IGEgbmV3IHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBpcyBzZXQuDQo+ID4gKyAgQHBhcmFtW2luXSBN YXNrICAgICAgVGhlIG1hc2sgdXNlZCBmb3IgYXR0cmlidXRlLiBUaGUgY29ycmVzcG9uZGluZw0K PiBmaWVsZCBpbiBBdHRyaWJ1dGUgaXMgaWdub3JlZCBpZiB0aGF0IGluIE1hc2sgaXMgMC4NCj4g PiArKiovDQo+ID4gK1ZPSUQNCj4gPiArUGFnZVRhYmxlTGliU2V0UGxlICgNCj4gPiArICBJTiBV SU5UTiAgICAgICAgICAgICAgIExldmVsLA0KPiA+ICsgIElOIElBMzJfUEFHSU5HX0VOVFJZICAg KlBsZSwNCj4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgIE9mZnNldCwNCj4gPiArICBJTiBJ QTMyX01BUF9BVFRSSUJVVEUgICpBdHRyaWJ1dGUsDQo+ID4gKyAgSU4gSUEzMl9NQVBfQVRUUklC VVRFICAqTWFzaw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIGlmIChMZXZlbCA9PSAxKSB7DQo+ ID4gKyAgICBQYWdlVGFibGVMaWJTZXRQdGU0SyAoJlBsZS0+UHRlNEssIE9mZnNldCwgQXR0cmli dXRlLCBNYXNrKTsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgQVNTRVJUIChMZXZlbCA9PSAy IHx8IExldmVsID09IDMpOw0KPiA+ICsgICAgUGFnZVRhYmxlTGliU2V0UGxlQiAoJlBsZS0+UGxl QiwgT2Zmc2V0LCBBdHRyaWJ1dGUsIE1hc2spOw0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAgU2V0IHRoZSBJQTMyX1BNTDUsIElBMzJfUE1MNCwgSUEzMl9QRFBURSBv ciBJQTMyX1BERS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSBQbmxlICAgICAgUG9pbnRlciB0 byBJQTMyX1BNTDUsIElBMzJfUE1MNCwgSUEzMl9QRFBURSBvcg0KPiBJQTMyX1BERS4gQWxsIHNo YXJlIHRoZSBzYW1lIHN0cnVjdHVyZSBkZWZpbml0aW9uLg0KPiA+ICsgIEBwYXJhbVtpbl0gQXR0 cmlidXRlIFRoZSBhdHRyaWJ1dGUgb2YgdGhlIHBhZ2UgZGlyZWN0b3J5IHJlZmVyZW5jZWQgYnkN Cj4gdGhlIG5vbi1sZWFmLg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtQYWdlVGFibGVMaWJT ZXRQbmxlICgNCj4gPiArICBJTiBJQTMyX1BBR0VfTk9OX0xFQUZfRU5UUlkgICpQbmxlLA0KPiA+ ICsgIElOIElBMzJfTUFQX0FUVFJJQlVURSAgICAgICAgKkF0dHJpYnV0ZQ0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIFBubGUtPkJpdHMuUHJlc2VudCAgICAgICAgPSBBdHRyaWJ1dGUtPkJpdHMu UHJlc2VudDsNCj4gPiArICBQbmxlLT5CaXRzLlJlYWRXcml0ZSAgICAgID0gQXR0cmlidXRlLT5C aXRzLlJlYWRXcml0ZTsNCj4gPiArICBQbmxlLT5CaXRzLlVzZXJTdXBlcnZpc29yID0gQXR0cmli dXRlLT5CaXRzLlVzZXJTdXBlcnZpc29yOw0KPiA+ICsgIFBubGUtPkJpdHMuTnggICAgICAgICAg ICAgPSBBdHRyaWJ1dGUtPkJpdHMuTng7DQo+ID4gKyAgUG5sZS0+Qml0cy5BY2Nlc3NlZCAgICAg ICA9IDA7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gU2V0IHRoZSBhdHRyaWJ1dGVzIChX VCwgQ0QsIEEpIHRvIDAuDQo+ID4gKyAgLy8gV1QgYW5kIENEIGRldGVybWluIHRoZSBtZW1vcnkg dHlwZSB1c2VkIHRvIGFjY2VzcyB0aGUgNEsgcGFnZQ0KPiBkaXJlY3RvcnkgcmVmZXJlbmNlZCBi eSB0aGlzIGVudHJ5Lg0KPiA+ICsgIC8vIFNvLCBpdCBpbXBsaWN0bHkgcmVxdWlyZXMgUEFUWzBd IGlzIFdyaXRlIEJhY2suDQo+ID4gKyAgLy8gQ3JlYXRlIGEgbmV3IHBhcmFtZXRlciBpZiBjYWxs ZXIgcmVxdWlyZXMgdG8gdXNlIGEgZGlmZmVyZW50IG1lbW9yeQ0KPiB0eXBlIGZvciBhY2Nlc3Np bmcgcGFnZSBkaXJlY3Rvcmllcy4NCj4gPiArICAvLw0KPiA+ICsgIFBubGUtPkJpdHMuV3JpdGVU aHJvdWdoICA9IDA7DQo+ID4gKyAgUG5sZS0+Qml0cy5DYWNoZURpc2FibGVkID0gMDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVXBkYXRlIHBhZ2UgdGFibGUgdG8gbWFwIFtMaW5l YXJBZGRyZXNzLCBMaW5lYXJBZGRyZXNzICsgTGVuZ3RoKSB3aXRoDQo+IHNwZWNpZmllZCBhdHRy aWJ1dGUgaW4gdGhlIHNwZWNpZmllZCBsZXZlbC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAg ICAgIFBhcmVudFBhZ2luZ0VudHJ5IFRoZSBwb2ludGVyIHRvIHRoZSBwYWdlIHRhYmxlIGVudHJ5 IHRvDQo+IHVwZGF0ZS4NCj4gPiArICBAcGFyYW1baW5dICAgICAgTW9kaWZ5ICAgICAgICAgICAg RkFMU0UgdG8gaW5kaWNhdGUgQnVmZmVyIGlzIG5vdCB1c2VkIGFuZA0KPiBCdWZmZXJTaXplIGlz IGluY3JlYXNlZCBieSB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUuDQo+ID4gKyAgQHBhcmFtW2lu XSAgICAgIEJ1ZmZlciAgICAgICAgICAgIFRoZSBmcmVlIGJ1ZmZlciB0byBiZSB1c2VkIGZvciBw YWdlIHRhYmxlDQo+IGNyZWF0aW9uL3VwZGF0aW5nLg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBXaGVuIE1vZGlmeSBpcyBUUlVFLCBpdCdzIHVzZWQgZnJvbSB0aGUg ZW5kLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIE1vZGlm eSBpcyBGQUxTRSwgaXQncyBpZ25vcmVkLg0KPiA+ICsgIEBwYXJhbVtpbiwgb3V0XSBCdWZmZXJT aXplICAgICAgICBUaGUgYXZhaWxhYmxlIGJ1ZmZlciBzaXplLg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm4gdGhlIHJlbWFpbmluZyBidWZmZXIgc2l6ZS4N Cj4gPiArICBAcGFyYW1baW5dICAgICAgTGV2ZWwgICAgICAgICAgICAgUGFnZSB0YWJsZSBsZXZl bC4gQ291bGQgYmUgNSwgNCwgMywgMiwgb3IgMS4NCj4gPiArICBAcGFyYW1baW5dICAgICAgTWF4 TGVhZkxldmVsICAgICAgTWF4aW11bSBsZXZlbCB0aGF0IGNhbiBiZSBhIGxlYWYgZW50cnkuDQo+ IENvdWxkIGJlIDEsIDIgb3IgMyAoaWYgUGFnZSAxRyBpcyBzdXBwb3J0ZWQpLg0KPiA+ICsgIEBw YXJhbVtpbl0gICAgICBMaW5lYXJBZGRyZXNzICAgICBUaGUgc3RhcnQgb2YgdGhlIGxpbmVhciBh ZGRyZXNzIHJhbmdlLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICBMZW5ndGggICAgICAgICAgICBU aGUgbGVuZ3RoIG9mIHRoZSBsaW5lYXIgYWRkcmVzcyByYW5nZS4NCj4gPiArICBAcGFyYW1baW5d ICAgICAgT2Zmc2V0ICAgICAgICAgICAgVGhlIG9mZnNldCB3aXRoaW4gdGhlIGxpbmVhciBhZGRy ZXNzIHJhbmdlLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICBBdHRyaWJ1dGUgICAgICAgICBUaGUg YXR0cmlidXRlIG9mIHRoZSBsaW5lYXIgYWRkcmVzcyByYW5nZS4NCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG5vbi1yZXNlcnZlZCBmaWVsZHMgaW4gSUEzMl9N QVBfQVRUUklCVVRFIGFyZQ0KPiBzdXBwb3J0ZWQgdG8gc2V0IGluIHRoZSBwYWdlIHRhYmxlLg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWdlIHRhYmxlIGVudHJp ZXMgdGhhdCBtYXAgdGhlIGxpbmVhciBhZGRyZXNzIHJhbmdlIGFyZQ0KPiByZXNldCB0byAwIGJl Zm9yZSBzZXQgdG8gdGhlIG5ldyBhdHRyaWJ1dGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2hlbiBhIG5ldyBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgaXMgc2V0Lg0K PiA+ICsgIEBwYXJhbVtpbl0gICAgICBNYXNrICAgICAgICAgICAgICBUaGUgbWFzayB1c2VkIGZv ciBhdHRyaWJ1dGUuIFRoZQ0KPiBjb3JyZXNwb25kaW5nIGZpZWxkIGluIEF0dHJpYnV0ZSBpcyBp Z25vcmVkIGlmIHRoYXQgaW4gTWFzayBpcyAwLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFJFVFVS Tl9TVUNDRVNTICAgICAgICAgICAgUGFnZVRhYmxlIGlzIGNyZWF0ZWQvdXBkYXRlZA0KPiBzdWNj ZXNzZnVsbHkuDQo+ID4gKyoqLw0KPiA+ICtSRVRVUk5fU1RBVFVTDQo+ID4gK1BhZ2VUYWJsZUxp Yk1hcEluTGV2ZWwgKA0KPiA+ICsgIElOICAgICBJQTMyX1BBR0lOR19FTlRSWSAgICpQYXJlbnRQ YWdpbmdFbnRyeSwNCj4gPiArICBJTiAgICAgQk9PTEVBTiAgICAgICAgICAgICBNb2RpZnksDQo+ ID4gKyAgSU4gICAgIFZPSUQgICAgICAgICAgICAgICAgKkJ1ZmZlciwNCj4gPiArICBJTiBPVVQg SU5UTiAgICAgICAgICAgICAgICAqQnVmZmVyU2l6ZSwNCj4gPiArICBJTiAgICAgVUlOVE4gICAg ICAgICAgICAgICBMZXZlbCwNCj4gPiArICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICBNYXhM ZWFmTGV2ZWwsDQo+ID4gKyAgSU4gICAgIFVJTlQ2NCAgICAgICAgICAgICAgTGluZWFyQWRkcmVz cywNCj4gPiArICBJTiAgICAgVUlOVDY0ICAgICAgICAgICAgICBMZW5ndGgsDQo+ID4gKyAgSU4g ICAgIFVJTlQ2NCAgICAgICAgICAgICAgT2Zmc2V0LA0KPiA+ICsgIElOICAgICBJQTMyX01BUF9B VFRSSUJVVEUgICpBdHRyaWJ1dGUsDQo+ID4gKyAgSU4gICAgIElBMzJfTUFQX0FUVFJJQlVURSAg Kk1hc2sNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBSRVRVUk5fU1RBVFVTICAgICAgIFN0YXR1 czsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgIEJpdFN0YXJ0Ow0KPiA+ICsgIFVJTlROICAg ICAgICAgICAgICAgSW5kZXg7DQo+ID4gKyAgSUEzMl9QQUdJTkdfRU5UUlkgICAqUGFnaW5nRW50 cnk7DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICBSZWdpb25MZW5ndGg7DQo+ID4gKyAgVUlO VDY0ICAgICAgICAgICAgICBTdWJMZW5ndGg7DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICBT dWJPZmZzZXQ7DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICBSZWdpb25NYXNrOw0KPiA+ICsg IFVJTlQ2NCAgICAgICAgICAgICAgUmVnaW9uU3RhcnQ7DQo+ID4gKyAgSUEzMl9NQVBfQVRUUklC VVRFICBBbGxPbmVNYXNrOw0KPiA+ICsgIElBMzJfTUFQX0FUVFJJQlVURSAgUGxlQkF0dHJpYnV0 ZTsNCj4gPiArICBJQTMyX01BUF9BVFRSSUJVVEUgIE5vcEF0dHJpYnV0ZTsNCj4gPiArICBCT09M RUFOICAgICAgICAgICAgIENyZWF0ZU5ldzsNCj4gPiArICBJQTMyX1BBR0lOR19FTlRSWSAgIE9u ZU9mUGFnaW5nRW50cnk7DQo+ID4gKw0KPiA+ICsgIEFTU0VSVCAoTGV2ZWwgIT0gMCk7DQo+ID4g KyAgQVNTRVJUICgoQXR0cmlidXRlICE9IE5VTEwpICYmIChNYXNrICE9IE5VTEwpKTsNCj4gPiAr DQo+ID4gKyAgQ3JlYXRlTmV3ICAgICAgICAgPSBGQUxTRTsNCj4gPiArICBBbGxPbmVNYXNrLlVp bnQ2NCA9IH4wdWxsOw0KPiA+ICsNCj4gPiArICBOb3BBdHRyaWJ1dGUuVWludDY0ICAgICAgICAg ICAgICA9IDA7DQo+ID4gKyAgTm9wQXR0cmlidXRlLkJpdHMuUHJlc2VudCAgICAgICAgPSAxOw0K PiA+ICsgIE5vcEF0dHJpYnV0ZS5CaXRzLlJlYWRXcml0ZSAgICAgID0gMTsNCj4gPiArICBOb3BB dHRyaWJ1dGUuQml0cy5Vc2VyU3VwZXJ2aXNvciA9IDE7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4g KyAgLy8gUGFyZW50UGFnaW5nRW50cnkgT05MWSBpcyBkZWZlcmVuY2VkIGZvciBjaGVja2luZyBQ cmVzZW50IGFuZA0KPiBNdXN0QmVPbmUgYml0cw0KPiA+ICsgIC8vIHdoZW4gTW9kaWZ5IGlzIEZB TFNFLg0KPiA+ICsgIC8vDQo+ID4gKw0KPiA+ICsgIGlmIChQYXJlbnRQYWdpbmdFbnRyeS0+UGNl LlByZXNlbnQgPT0gMCkgew0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIFRoZSBwYXJlbnQgZW50 cnkgaXMgQ1IzIG9yIFBNTDVFL1BNTDRFL1BEUFRFL1BERS4NCj4gPiArICAgIC8vIEl0IGRvZXMg Tk9UIHBvaW50IHRvIGFuIGV4aXN0aW5nIHBhZ2UgZGlyZWN0b3J5Lg0KPiA+ICsgICAgLy8NCj4g PiArICAgIEFTU0VSVCAoQnVmZmVyID09IE5VTEwgfHwgKkJ1ZmZlclNpemUgPj0gU0laRV80S0Ip Ow0KPiA+ICsgICAgQ3JlYXRlTmV3ICAgID0gVFJVRTsNCj4gPiArICAgICpCdWZmZXJTaXplIC09 IFNJWkVfNEtCOw0KPiA+ICsNCj4gPiArICAgIGlmIChNb2RpZnkpIHsNCj4gPiArICAgICAgUGFy ZW50UGFnaW5nRW50cnktPlVpbnRuID0gKFVJTlROKUJ1ZmZlciArICpCdWZmZXJTaXplOw0KPiA+ ICsgICAgICBaZXJvTWVtICgoVk9JRCAqKVBhcmVudFBhZ2luZ0VudHJ5LT5VaW50biwgU0laRV80 S0IpOw0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBTZXQgZGVmYXVsdCBhdHRyaWJ1dGUg Yml0cyBmb3IgUE1MNUUvUE1MNEUvUERQVEUvUERFLg0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAg ICBQYWdlVGFibGVMaWJTZXRQbmxlICgmUGFyZW50UGFnaW5nRW50cnktPlBubGUsICZOb3BBdHRy aWJ1dGUpOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8g SnVzdCBtYWtlIHN1cmUgUHJlc2VudCBhbmQgTXVzdEJlWmVybyAoUGFnZVNpemUpIGJpdHMgYXJl IGFjY3VyYXRlLg0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICBPbmVPZlBhZ2luZ0VudHJ5LlBu bGUuVWludDY0ID0gMDsNCj4gPiArICAgIH0NCj4gPiArICB9IGVsc2UgaWYgKElzUGxlIChQYXJl bnRQYWdpbmdFbnRyeSwgTGV2ZWwgKyAxKSkgew0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIFRo ZSBwYXJlbnQgZW50cnkgaXMgYSBQRFBURV8xRyBvciBQREVfMk0uIFNwbGl0IHRvIDJNIG9yIDRL IHBhZ2VzLg0KPiA+ICsgICAgLy8gTm90ZTogaXQncyBpbXBvc3NpYmxlIHRoZSBwYXJlbnQgZW50 cnkgaXMgYSBQVEVfNEsuDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIFVz ZSBOT1AgYXR0cmlidXRlcyBhcyB0aGUgYXR0cmlidXRlIG9mIGdyYW5kLXBhcmVudHMgYmVjYXVz ZSBDUFUNCj4gd2lsbCBjb25zaWRlcg0KPiA+ICsgICAgLy8gdGhlIGFjdHVhbCBhdHRyaWJ1dGVz IG9mIGdyYW5kLXBhcmVudHMgd2hlbiBkZXRlcm1pbmcgdGhlIG1lbW9yeQ0KPiB0eXBlLg0KPiA+ ICsgICAgLy8NCj4gPiArICAgIFBsZUJBdHRyaWJ1dGUuVWludDY0ID0gUGFnZVRhYmxlTGliR2V0 UGxlQk1hcEF0dHJpYnV0ZQ0KPiAoJlBhcmVudFBhZ2luZ0VudHJ5LT5QbGVCLCAmTm9wQXR0cmli dXRlKTsNCj4gPiArICAgIGlmICgoSUEzMl9NQVBfQVRUUklCVVRFX0FUVFJJQlVURVMgKCZQbGVC QXR0cmlidXRlKSAmDQo+IElBMzJfTUFQX0FUVFJJQlVURV9BVFRSSUJVVEVTIChNYXNrKSkNCj4g PiArICAgICAgICA9PSBJQTMyX01BUF9BVFRSSUJVVEVfQVRUUklCVVRFUyAoQXR0cmlidXRlKSkN Cj4gPiArICAgIHsNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8gVGhpcyBmdW5jdGlvbiBp cyBjYWxsZWQgd2hlbiB0aGUgbWVtb3J5IGxlbmd0aCBpcyBsZXNzIHRoYW4gdGhlDQo+IHJlZ2lv biBsZW5ndGggb2YgdGhlIHBhcmVudCBsZXZlbC4NCj4gPiArICAgICAgLy8gTm8gbmVlZCB0byBz cGxpdCB0aGUgcGFnZSB3aGVuIHRoZSBhdHRyaWJ1dGVzIGVxdWFsLg0KPiA+ICsgICAgICAvLw0K PiA+ICsgICAgICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ ICsgICAgQVNTRVJUIChCdWZmZXIgPT0gTlVMTCB8fCAqQnVmZmVyU2l6ZSA+PSBTSVpFXzRLQik7 DQo+ID4gKyAgICBDcmVhdGVOZXcgICAgPSBUUlVFOw0KPiA+ICsgICAgKkJ1ZmZlclNpemUgLT0g U0laRV80S0I7DQo+ID4gKyAgICBQYWdlVGFibGVMaWJTZXRQbGUgKExldmVsLCAmT25lT2ZQYWdp bmdFbnRyeSwgMCwgJlBsZUJBdHRyaWJ1dGUsDQo+ICZBbGxPbmVNYXNrKTsNCj4gPiArICAgIGlm IChNb2RpZnkpIHsNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8gQ3JlYXRlIDUxMiBjaGls ZC1sZXZlbCBlbnRyaWVzIHRoYXQgbWFwIHRvIDJNLzRLLg0KPiA+ICsgICAgICAvLw0KPiA+ICsg ICAgICBQYXJlbnRQYWdpbmdFbnRyeS0+VWludG4gPSAoVUlOVE4pQnVmZmVyICsgKkJ1ZmZlclNp emU7DQo+ID4gKyAgICAgIFplcm9NZW0gKChWT0lEICopUGFyZW50UGFnaW5nRW50cnktPlVpbnRu LCBTSVpFXzRLQik7DQo+ID4gKw0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBTZXQgTk9Q IGF0dHJpYnV0ZXMNCj4gPiArICAgICAgLy8gTm90ZTogU2hvdWxkIE5PVCBpbmhlcml0IHRoZSBh dHRyaWJ1dGVzIGZyb20gdGhlIG9yaWdpbmFsIGVudHJ5DQo+IGJlY2F1c2UgYSB6ZXJvIFJXIGJp dA0KPiA+ICsgICAgICAvLyAgICAgICB3aWxsIG1ha2UgdGhlIGVudGlyZSByZWdpb24gcmVhZC1v bmx5IGV2ZW4gdGhlIGNoaWxkIGVudHJpZXMgc2V0DQo+IHRoZSBSVyBiaXQuDQo+ID4gKyAgICAg IC8vDQo+ID4gKyAgICAgIFBhZ2VUYWJsZUxpYlNldFBubGUgKCZQYXJlbnRQYWdpbmdFbnRyeS0+ UG5sZSwgJk5vcEF0dHJpYnV0ZSk7DQo+ID4gKw0KPiA+ICsgICAgICBSZWdpb25MZW5ndGggPSBS RUdJT05fTEVOR1RIIChMZXZlbCk7DQo+ID4gKyAgICAgIFBhZ2luZ0VudHJ5ICA9IChJQTMyX1BB R0lOR19FTlRSWQ0KPiAqKShVSU5UTilJQTMyX1BOTEVfUEFHRV9UQUJMRV9CQVNFX0FERFJFU1Mg KCZQYXJlbnRQYWdpbmdFbnRyeS0NCj4gPlBubGUpOw0KPiA+ICsgICAgICBmb3IgKFN1Yk9mZnNl dCA9IDAsIEluZGV4ID0gMDsgSW5kZXggPCA1MTI7IEluZGV4KyspIHsNCj4gPiArICAgICAgICBQ YWdpbmdFbnRyeVtJbmRleF0uVWludDY0ID0gT25lT2ZQYWdpbmdFbnRyeS5VaW50NjQgKyBTdWJP ZmZzZXQ7DQo+ID4gKyAgICAgICAgU3ViT2Zmc2V0ICAgICAgICAgICAgICAgICs9IFJlZ2lvbkxl bmd0aDsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg Ly8NCj4gPiArICAvLyBSZWdpb25MZW5ndGg6IDI1NlQgKDEgPDwgNDgpIDUxMkcgKDEgPDwgMzkp LCAxRyAoMSA8PCAzMCksIDJNICgxIDw8IDIxKQ0KPiBvciA0SyAoMSA8PCAxMikuDQo+ID4gKyAg Ly8gUmVnaW9uU3RhcnQ6ICBwb2ludHMgdG8gdGhlIGxpbmVhciBhZGRyZXNzIHRoYXQncyBhbGln bmVkIG9uDQo+IFJlZ2lvbkxlbmd0aCBhbmQgbG93ZXIgdGhhbiAoTGluZWFyQWRkcmVzcyArIE9m ZnNldCkuDQo+ID4gKyAgLy8NCj4gPiArICBCaXRTdGFydCAgICAgPSAxMiArIChMZXZlbCAtIDEp ICogOTsNCj4gPiArICBJbmRleCAgICAgICAgPSBCaXRGaWVsZFJlYWQ2NCAoTGluZWFyQWRkcmVz cyArIE9mZnNldCwgQml0U3RhcnQsIEJpdFN0YXJ0ICsgOSAtDQo+IDEpOw0KPiA+ICsgIFJlZ2lv bkxlbmd0aCA9IExTaGlmdFU2NCAoMSwgQml0U3RhcnQpOw0KPiA+ICsgIFJlZ2lvbk1hc2sgICA9 IFJlZ2lvbkxlbmd0aCAtIDE7DQo+ID4gKyAgUmVnaW9uU3RhcnQgID0gKExpbmVhckFkZHJlc3Mg KyBPZmZzZXQpICYgflJlZ2lvbk1hc2s7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gQXBw bHkgdGhlIGF0dHJpYnV0ZS4NCj4gPiArICAvLw0KPiA+ICsgIFBhZ2luZ0VudHJ5ID0gKElBMzJf UEFHSU5HX0VOVFJZDQo+ICopKFVJTlROKUlBMzJfUE5MRV9QQUdFX1RBQkxFX0JBU0VfQUREUkVT UyAoJlBhcmVudFBhZ2luZ0VudHJ5LQ0KPiA+UG5sZSk7DQo+ID4gKyAgd2hpbGUgKE9mZnNldCA8 IExlbmd0aCAmJiBJbmRleCA8IDUxMikgew0KPiA+ICsgICAgU3ViTGVuZ3RoID0gTUlOIChMZW5n dGggLSBPZmZzZXQsIFJlZ2lvblN0YXJ0ICsgUmVnaW9uTGVuZ3RoIC0NCj4gKExpbmVhckFkZHJl c3MgKyBPZmZzZXQpKTsNCj4gPiArICAgIGlmICgoTGV2ZWwgPD0gTWF4TGVhZkxldmVsKSAmJiAo TGluZWFyQWRkcmVzcyArIE9mZnNldCA9PSBSZWdpb25TdGFydCkNCj4gJiYgKFN1Ykxlbmd0aCA9 PSBSZWdpb25MZW5ndGgpKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIENyZWF0ZSBv bmUgZW50cnkgbWFwcGluZyB0aGUgZW50aXJlIHJlZ2lvbiAoMUcsIDJNIG9yIDRLKS4NCj4gPiAr ICAgICAgLy8NCj4gPiArICAgICAgaWYgKE1vZGlmeSkgew0KPiA+ICsgICAgICAgIFBhZ2VUYWJs ZUxpYlNldFBsZSAoTGV2ZWwsICZQYWdpbmdFbnRyeVtJbmRleF0sIE9mZnNldCwgQXR0cmlidXRl LA0KPiBNYXNrKTsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAg Ly8NCj4gPiArICAgICAgLy8gUmVjdXJzaXZlbHkgY2FsbCB0byBjcmVhdGUgcGFnZSB0YWJsZS4N Cj4gPiArICAgICAgLy8gVGhlcmUgYXJlIDMgY2FzZXM6DQo+ID4gKyAgICAgIC8vICAgYS4gTGV2 ZWwgY2Fubm90IGJlIGEgbGVhZiBlbnRyeSB3aGljaCBwb2ludHMgdG8gcGh5c2ljYWwgbWVtb3J5 Lg0KPiA+ICsgICAgICAvLyAgIGEuIExldmVsIGNhbiBiZSBhIGxlYWYgZW50cnkgYnV0IChMaW5l YXJBZGRyZXNzICsgT2Zmc2V0KSBpcyBOT1QNCj4gYWxpZ25lZCBvbiB0aGUgUmVnaW9uU3RhcnQu DQo+ID4gKyAgICAgIC8vICAgYi4gTGV2ZWwgY2FuIGJlIGEgbGVhZiBlbnRyeSBhbmQgKExpbmVh ckFkZHJlc3MgKyBPZmZzZXQpIGlzIGFsaWduZWQNCj4gb24gUmVnaW9uU3RhcnQsDQo+ID4gKyAg ICAgIC8vICAgICAgYnV0IHRoZSBsZW5ndGggaXMgU01BTExFUiB0aGFuIHRoZSBSZWdpb25MZW5n dGguDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIFN0YXR1cyA9IFBhZ2VUYWJsZUxpYk1hcElu TGV2ZWwgKA0KPiA+ICsgICAgICAgICAgICAgICAgICghTW9kaWZ5ICYmIENyZWF0ZU5ldykgPyAm T25lT2ZQYWdpbmdFbnRyeSA6DQo+ICZQYWdpbmdFbnRyeVtJbmRleF0sDQo+ID4gKyAgICAgICAg ICAgICAgICAgTW9kaWZ5LA0KPiA+ICsgICAgICAgICAgICAgICAgIEJ1ZmZlciwNCj4gPiArICAg ICAgICAgICAgICAgICBCdWZmZXJTaXplLA0KPiA+ICsgICAgICAgICAgICAgICAgIExldmVsIC0g MSwNCj4gPiArICAgICAgICAgICAgICAgICBNYXhMZWFmTGV2ZWwsDQo+ID4gKyAgICAgICAgICAg ICAgICAgTGluZWFyQWRkcmVzcywNCj4gPiArICAgICAgICAgICAgICAgICBMZW5ndGgsDQo+ID4g KyAgICAgICAgICAgICAgICAgT2Zmc2V0LA0KPiA+ICsgICAgICAgICAgICAgICAgIEF0dHJpYnV0 ZSwNCj4gPiArICAgICAgICAgICAgICAgICBNYXNrDQo+ID4gKyAgICAgICAgICAgICAgICAgKTsN Cj4gPiArICAgICAgaWYgKFJFVFVSTl9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICAgIHJl dHVybiBTdGF0dXM7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBP ZmZzZXQgICAgICArPSBTdWJMZW5ndGg7DQo+ID4gKyAgICBSZWdpb25TdGFydCArPSBSZWdpb25M ZW5ndGg7DQo+ID4gKyAgICBJbmRleCsrOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJu IFJFVFVSTl9TVUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDcmVhdGUg b3IgdXBkYXRlIHBhZ2UgdGFibGUgdG8gbWFwIFtMaW5lYXJBZGRyZXNzLCBMaW5lYXJBZGRyZXNz ICsNCj4gTGVuZ3RoKSB3aXRoIHNwZWNpZmllZCBhdHRyaWJ1dGUuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtpbiwgb3V0XSBQYWdlVGFibGUgICAgICBUaGUgcG9pbnRlciB0byB0aGUgcGFnZSB0YWJs ZSB0byB1cGRhdGUsDQo+IG9yIHBvaW50ZXIgdG8gTlVMTCBpZiBhIG5ldyBwYWdlIHRhYmxlIGlz IHRvIGJlIGNyZWF0ZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIFBhZ2luZ01vZGUgICAgIFRo ZSBwYWdpbmcgbW9kZS4NCj4gPiArICBAcGFyYW1baW5dICAgICAgQnVmZmVyICAgICAgICAgVGhl IGZyZWUgYnVmZmVyIHRvIGJlIHVzZWQgZm9yIHBhZ2UgdGFibGUNCj4gY3JlYXRpb24vdXBkYXRp bmcuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdIEJ1ZmZlclNpemUgICAgIFRoZSBidWZmZXIgc2l6 ZS4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gcmV0dXJuLCB0aGUg cmVtYWluaW5nIGJ1ZmZlciBzaXplLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBUaGUgZnJlZSBidWZmZXIgaXMgdXNlZCBmcm9tIHRoZSBlbmQgc28gY2FsbGVyIGNhbiBz dXBwbHkNCj4gdGhlIHNhbWUgQnVmZmVyIHBvaW50ZXIgd2l0aCBhbiB1cGRhdGVkDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemUgaW4gdGhlIHNlY29uZCBj YWxsIHRvIHRoaXMgQVBJLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICBMaW5lYXJBZGRyZXNzICBU aGUgc3RhcnQgb2YgdGhlIGxpbmVhciBhZGRyZXNzIHJhbmdlLg0KPiA+ICsgIEBwYXJhbVtpbl0g ICAgICBMZW5ndGggICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBsaW5lYXIgYWRkcmVzcyByYW5n ZS4NCj4gPiArICBAcGFyYW1baW5dICAgICAgQXR0cmlidXRlICAgICAgVGhlIGF0dHJpYnV0ZSBv ZiB0aGUgbGluZWFyIGFkZHJlc3MgcmFuZ2UuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFsbCBub24tcmVzZXJ2ZWQgZmllbGRzIGluIElBMzJfTUFQX0FUVFJJQlVURSBh cmUNCj4gc3VwcG9ydGVkIHRvIHNldCBpbiB0aGUgcGFnZSB0YWJsZS4NCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUGFnZSB0YWJsZSBlbnRyaWVzIHRoYXQgbWFwIHRoZSBs aW5lYXIgYWRkcmVzcyByYW5nZSBhcmUNCj4gcmVzZXQgdG8gMCBiZWZvcmUgc2V0IHRvIHRoZSBu ZXcgYXR0cmlidXRlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4g YSBuZXcgcGh5c2ljYWwgYmFzZSBhZGRyZXNzIGlzIHNldC4NCj4gPiArICBAcGFyYW1baW5dICAg ICAgTWFzayAgICAgICAgICAgVGhlIG1hc2sgdXNlZCBmb3IgYXR0cmlidXRlLiBUaGUNCj4gY29y cmVzcG9uZGluZyBmaWVsZCBpbiBBdHRyaWJ1dGUgaXMgaWdub3JlZCBpZiB0aGF0IGluIE1hc2sg aXMgMC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBSRVRVUk5fVU5TVVBQT1JURUQgICAgICAgIFBh Z2luZ01vZGUgaXMgbm90IHN1cHBvcnRlZC4NCj4gPiArICBAcmV0dmFsIFJFVFVSTl9JTlZBTElE X1BBUkFNRVRFUiAgUGFnZVRhYmxlLCBCdWZmZXJTaXplLA0KPiBBdHRyaWJ1dGUgb3IgTWFzayBp cyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgUkVUVVJOX0lOVkFMSURfUEFSQU1FVEVSICAqQnVmZmVy U2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YNCj4gNEtCLg0KPiA+ICsgIEByZXR2YWwgUkVUVVJOX0JV RkZFUl9UT09fU01BTEwgICBUaGUgYnVmZmVyIGlzIHRvbyBzbWFsbCBmb3IgcGFnZQ0KPiB0YWJs ZSBjcmVhdGlvbi91cGRhdGluZy4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQnVmZmVyU2l6ZSBpcyB1cGRhdGVkIHRvIGluZGljYXRlIHRoZSBleHBlY3RlZCBidWZm ZXINCj4gc2l6ZS4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fs bGVyIG1heSBzdGlsbCBnZXQgUkVUVVJOX0JVRkZFUl9UT09fU01BTEwgd2l0aA0KPiB0aGUgbmV3 IEJ1ZmZlclNpemUuDQo+ID4gKyAgQHJldHZhbCBSRVRVUk5fU1VDQ0VTUyAgICAgICAgICAgIFBh Z2VUYWJsZSBpcyBjcmVhdGVkL3VwZGF0ZWQNCj4gc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsqKi8NCj4g PiArUkVUVVJOX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArUGFnZVRhYmxlTWFwICgNCj4gPiAr ICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAqUGFnZVRhYmxlICBPUFRJT05BTCwNCj4gPiAr ICBJTiAgICAgUEFHSU5HX01PREUgICAgICAgICBQYWdpbmdNb2RlLA0KPiA+ICsgIElOICAgICBW T0lEICAgICAgICAgICAgICAgICpCdWZmZXIsDQo+ID4gKyAgSU4gT1VUIFVJTlROICAgICAgICAg ICAgICAgKkJ1ZmZlclNpemUsDQo+ID4gKyAgSU4gICAgIFVJTlQ2NCAgICAgICAgICAgICAgTGlu ZWFyQWRkcmVzcywNCj4gPiArICBJTiAgICAgVUlOVDY0ICAgICAgICAgICAgICBMZW5ndGgsDQo+ ID4gKyAgSU4gICAgIElBMzJfTUFQX0FUVFJJQlVURSAgKkF0dHJpYnV0ZSwNCj4gPiArICBJTiAg ICAgSUEzMl9NQVBfQVRUUklCVVRFICAqTWFzaw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFJF VFVSTl9TVEFUVVMgICAgICBTdGF0dXM7DQo+ID4gKyAgSUEzMl9QQUdJTkdfRU5UUlkgIFRvcFBh Z2luZ0VudHJ5Ow0KPiA+ICsgIElOVE4gICAgICAgICAgICAgICBSZXF1aXJlZFNpemU7DQo+ID4g KyAgVUlOVDY0ICAgICAgICAgICAgIE1heExpbmVhckFkZHJlc3M7DQo+ID4gKyAgVUlOVE4gICAg ICAgICAgICAgIE1heExldmVsOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICBNYXhMZWFmTGV2 ZWw7DQo+ID4gKw0KPiA+ICsgIGlmICgoUGFnaW5nTW9kZSA9PSBQYWdpbmczMmJpdCkgfHwgKFBh Z2luZ01vZGUgPT0gUGFnaW5nUGFlKSB8fA0KPiAoUGFnaW5nTW9kZSA+PSBQYWdpbmdNb2RlTWF4 KSkgew0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIDMyYml0IHBhZ2luZyBpcyBuZXZlciBzdXBw b3J0ZWQuDQo+ID4gKyAgICAvLyBQQUUgcGFnaW5nIHdpbGwgYmUgc3VwcG9ydGVkIGxhdGVyLg0K PiA+ICsgICAgLy8NCj4gPiArICAgIHJldHVybiBSRVRVUk5fVU5TVVBQT1JURUQ7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICBpZiAoKFBhZ2VUYWJsZSA9PSBOVUxMKSB8fCAoQnVmZmVyU2l6ZSA9 PSBOVUxMKSB8fCAoQXR0cmlidXRlID09IE5VTEwpDQo+IHx8IChNYXNrID09IE5VTEwpKSB7DQo+ ID4gKyAgICByZXR1cm4gUkVUVVJOX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgaWYgKCpCdWZmZXJTaXplICUgU0laRV80S0IgIT0gMCkgew0KPiA+ICsgICAgLy8N Cj4gPiArICAgIC8vIEJ1ZmZlclNpemUgc2hvdWxkIGJlIG11bHRpcGxlIG9mIDRLLg0KPiA+ICsg ICAgLy8NCj4gPiArICAgIHJldHVybiBSRVRVUk5fSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICBpZiAoKCpCdWZmZXJTaXplICE9IDApICYmIChCdWZmZXIgPT0gTlVM TCkpIHsNCj4gPiArICAgIHJldHVybiBSRVRVUk5fSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICBNYXhMZWFmTGV2ZWwgICAgID0gKFVJTlQ4KVBhZ2luZ01vZGU7DQo+ ID4gKyAgTWF4TGV2ZWwgICAgICAgICA9IChVSU5UOCkoUGFnaW5nTW9kZSA+PiA4KTsNCj4gPiAr ICBNYXhMaW5lYXJBZGRyZXNzID0gTFNoaWZ0VTY0ICgxLCAxMiArIE1heExldmVsICogOSk7DQo+ ID4gKw0KPiA+ICsgIGlmICgoTGluZWFyQWRkcmVzcyA+IE1heExpbmVhckFkZHJlc3MpIHx8IChM ZW5ndGggPiBNYXhMaW5lYXJBZGRyZXNzIC0NCj4gTGluZWFyQWRkcmVzcykpIHsNCj4gPiArICAg IC8vDQo+ID4gKyAgICAvLyBNYXhpbXVtIGxpbmVhciBhZGRyZXNzIGlzICgxIDw8IDQ4KSBvciAo MSA8PCA1NykNCj4gPiArICAgIC8vDQo+ID4gKyAgICByZXR1cm4gUkVUVVJOX0lOVkFMSURfUEFS QU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgVG9wUGFnaW5nRW50cnkuVWludG4gPSAq UGFnZVRhYmxlOw0KPiA+ICsgIGlmIChUb3BQYWdpbmdFbnRyeS5VaW50biAhPSAwKSB7DQo+ID4g KyAgICBUb3BQYWdpbmdFbnRyeS5QY2UuUHJlc2VudCA9IDE7DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICAvLw0KPiA+ICsgIC8vIFF1ZXJ5IHRoZSByZXF1aXJlZCBidWZmZXIgc2l6ZSB3aXRob3V0 IG1vZGlmeWluZyB0aGUgcGFnZSB0YWJsZS4NCj4gPiArICAvLw0KPiA+ICsgIFJlcXVpcmVkU2l6 ZSA9IDA7DQo+ID4gKyAgU3RhdHVzICAgICAgID0gUGFnZVRhYmxlTGliTWFwSW5MZXZlbCAoDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAmVG9wUGFnaW5nRW50cnksDQo+ID4gKyAgICAgICAgICAg ICAgICAgICBGQUxTRSwNCj4gPiArICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAmUmVxdWlyZWRTaXplLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgTWF4 TGV2ZWwsDQo+ID4gKyAgICAgICAgICAgICAgICAgICBNYXhMZWFmTGV2ZWwsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICBMaW5lYXJBZGRyZXNzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgTGVu Z3RoLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgMCwNCj4gPiArICAgICAgICAgICAgICAgICAg IEF0dHJpYnV0ZSwNCj4gPiArICAgICAgICAgICAgICAgICAgIE1hc2sNCj4gPiArICAgICAgICAg ICAgICAgICAgICk7DQo+ID4gKyAgaWYgKFJFVFVSTl9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFJlcXVpcmVkU2l6ZSA9 IC1SZXF1aXJlZFNpemU7DQo+ID4gKw0KPiA+ICsgIGlmICgoVUlOVE4pUmVxdWlyZWRTaXplID4g KkJ1ZmZlclNpemUpIHsNCj4gPiArICAgICpCdWZmZXJTaXplID0gUmVxdWlyZWRTaXplOw0KPiA+ ICsgICAgcmV0dXJuIFJFVFVSTl9CVUZGRVJfVE9PX1NNQUxMOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgaWYgKChSZXF1aXJlZFNpemUgIT0gMCkgJiYgKEJ1ZmZlciA9PSBOVUxMKSkgew0KPiA+ ICsgICAgcmV0dXJuIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIC8vDQo+ID4gKyAgLy8gVXBkYXRlIHRoZSBwYWdlIHRhYmxlIHdoZW4gdGhlIHN1cHBs aWVkIGJ1ZmZlciBpcyBzdWZmaWNpZW50Lg0KPiA+ICsgIC8vDQo+ID4gKyAgU3RhdHVzID0gUGFn ZVRhYmxlTGliTWFwSW5MZXZlbCAoDQo+ID4gKyAgICAgICAgICAgICAmVG9wUGFnaW5nRW50cnks DQo+ID4gKyAgICAgICAgICAgICBUUlVFLA0KPiA+ICsgICAgICAgICAgICAgQnVmZmVyLA0KPiA+ ICsgICAgICAgICAgICAgQnVmZmVyU2l6ZSwNCj4gPiArICAgICAgICAgICAgIE1heExldmVsLA0K PiA+ICsgICAgICAgICAgICAgTWF4TGVhZkxldmVsLA0KPiA+ICsgICAgICAgICAgICAgTGluZWFy QWRkcmVzcywNCj4gPiArICAgICAgICAgICAgIExlbmd0aCwNCj4gPiArICAgICAgICAgICAgIDAs DQo+ID4gKyAgICAgICAgICAgICBBdHRyaWJ1dGUsDQo+ID4gKyAgICAgICAgICAgICBNYXNrDQo+ ID4gKyAgICAgICAgICAgICApOw0KPiA+ICsgIGlmICghUkVUVVJOX0VSUk9SIChTdGF0dXMpKSB7 DQo+ID4gKyAgICAqUGFnZVRhYmxlID0gKFVJTlROKShUb3BQYWdpbmdFbnRyeS5VaW50biAmDQo+ IElBMzJfUEVfQkFTRV9BRERSRVNTX01BU0tfNDApOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg cmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9VZWZpQ3B1UGtnL0xpYnJh cnkvQ3B1UGFnZVRhYmxlTGliL0NwdVBhZ2VUYWJsZVBhcnNlLmMNCj4gYi9VZWZpQ3B1UGtnL0xp YnJhcnkvQ3B1UGFnZVRhYmxlTGliL0NwdVBhZ2VUYWJsZVBhcnNlLmMNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLmU2Njk2MWUxMjINCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrIGIvVWVmaUNwdVBrZy9MaWJyYXJ5L0NwdVBhZ2VUYWJsZUxpYi9DcHVQ YWdlVGFibGVQYXJzZS5jDQo+ID4gQEAgLTAsMCArMSwzMzAgQEANCj4gPiArLyoqIEBmaWxlDQo+ ID4gKyAgVGhpcyBsaWJyYXJ5IGltcGxlbWVudHMgQ3B1UGFnZVRhYmxlTGliIHRoYXQgYXJlIGdl bmVyaWMgZm9yIElBMzIgZmFtaWx5DQo+IENQVS4NCj4gPiArDQo+ID4gKyAgQ29weXJpZ2h0IChj KSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4g KyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArDQo+ ID4gKyoqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIkNwdVBhZ2VUYWJsZS5oIg0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAgUmV0dXJuIHRoZSBhdHRyaWJ1dGUgb2YgYSAyTS8xRyBwYWdlIHRhYmxl IGVudHJ5Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dIFBsZUIgICAgICAgICAgICAgICBQb2lu dGVyIHRvIGEgMk0vMUcgcGFnZSB0YWJsZSBlbnRyeS4NCj4gPiArICBAcGFyYW1baW5dIFBhcmVu dE1hcEF0dHJpYnV0ZSBQb2ludGVyIHRvIHRoZSBwYXJlbnQgYXR0cmlidXRlLg0KPiA+ICsNCj4g PiArICBAcmV0dXJuIEF0dHJpYnV0ZSBvZiB0aGUgMk0vMUcgcGFnZSB0YWJsZSBlbnRyeS4NCj4g PiArKiovDQo+ID4gK1VJTlQ2NA0KPiA+ICtQYWdlVGFibGVMaWJHZXRQbGVCTWFwQXR0cmlidXRl ICgNCj4gPiArICBJTiBJQTMyX1BBR0VfTEVBRl9FTlRSWV9CSUdfUEFHRVNJWkUgICpQbGVCLA0K PiA+ICsgIElOIElBMzJfTUFQX0FUVFJJQlVURSAgICAgICAgICAgICAgICAgKlBhcmVudE1hcEF0 dHJpYnV0ZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIElBMzJfTUFQX0FUVFJJQlVURSAgTWFw QXR0cmlidXRlOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFBhZ2VUYWJsZUJhc2VBZGRy ZXNzIGNhbm5vdCBiZSBhc3NpZ25lZCBmaWVsZCB0byBmaWVsZA0KPiA+ICsgIC8vIGJlY2F1c2Ug dGhlaXIgYml0IHBvc2l0aW9ucyBhcmUgZGlmZmVyZW50IGluIElBMzJfTUFQX0FUVFJJQlVURSBh bmQNCj4gSUEzMl9QQUdFX0xFQUZfRU5UUllfQklHX1BBR0VTSVpFLg0KPiA+ICsgIC8vDQo+ID4g KyAgTWFwQXR0cmlidXRlLlVpbnQ2NCA9IElBMzJfUExFQl9QQUdFX1RBQkxFX0JBU0VfQUREUkVT UyAoUGxlQik7DQo+ID4gKw0KPiA+ICsgIE1hcEF0dHJpYnV0ZS5CaXRzLlByZXNlbnQgICAgICAg ID0gUGFyZW50TWFwQXR0cmlidXRlLT5CaXRzLlByZXNlbnQgJg0KPiBQbGVCLT5CaXRzLlByZXNl bnQ7DQo+ID4gKyAgTWFwQXR0cmlidXRlLkJpdHMuUmVhZFdyaXRlICAgICAgPSBQYXJlbnRNYXBB dHRyaWJ1dGUtPkJpdHMuUmVhZFdyaXRlDQo+ICYgUGxlQi0+Qml0cy5SZWFkV3JpdGU7DQo+ID4g KyAgTWFwQXR0cmlidXRlLkJpdHMuVXNlclN1cGVydmlzb3IgPSBQYXJlbnRNYXBBdHRyaWJ1dGUt DQo+ID5CaXRzLlVzZXJTdXBlcnZpc29yICYgUGxlQi0+Qml0cy5Vc2VyU3VwZXJ2aXNvcjsNCj4g PiArICBNYXBBdHRyaWJ1dGUuQml0cy5OeCAgICAgICAgICAgICA9IFBhcmVudE1hcEF0dHJpYnV0 ZS0+Qml0cy5OeCB8IFBsZUItDQo+ID5CaXRzLk54Ow0KPiA+ICsgIE1hcEF0dHJpYnV0ZS5CaXRz LldyaXRlVGhyb3VnaCAgID0gUGxlQi0+Qml0cy5Xcml0ZVRocm91Z2g7DQo+ID4gKyAgTWFwQXR0 cmlidXRlLkJpdHMuQ2FjaGVEaXNhYmxlZCAgPSBQbGVCLT5CaXRzLkNhY2hlRGlzYWJsZWQ7DQo+ ID4gKyAgTWFwQXR0cmlidXRlLkJpdHMuQWNjZXNzZWQgICAgICAgPSBQbGVCLT5CaXRzLkFjY2Vz c2VkOw0KPiA+ICsNCj4gPiArICBNYXBBdHRyaWJ1dGUuQml0cy5QYXQgICAgICAgICAgID0gUGxl Qi0+Qml0cy5QYXQ7DQo+ID4gKyAgTWFwQXR0cmlidXRlLkJpdHMuRGlydHkgICAgICAgICA9IFBs ZUItPkJpdHMuRGlydHk7DQo+ID4gKyAgTWFwQXR0cmlidXRlLkJpdHMuR2xvYmFsICAgICAgICA9 IFBsZUItPkJpdHMuR2xvYmFsOw0KPiA+ICsgIE1hcEF0dHJpYnV0ZS5CaXRzLlByb3RlY3Rpb25L ZXkgPSBQbGVCLT5CaXRzLlByb3RlY3Rpb25LZXk7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBNYXBB dHRyaWJ1dGUuVWludDY0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXR1cm4g dGhlIGF0dHJpYnV0ZSBvZiBhIDRLIHBhZ2UgdGFibGUgZW50cnkuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtpbl0gUHRlNEsgICAgICAgICAgICAgIFBvaW50ZXIgdG8gYSA0SyBwYWdlIHRhYmxlIGVu dHJ5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gUGFyZW50TWFwQXR0cmlidXRlIFBvaW50ZXIgdG8gdGhl IHBhcmVudCBhdHRyaWJ1dGUuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gQXR0cmlidXRlIG9mIHRo ZSA0SyBwYWdlIHRhYmxlIGVudHJ5Lg0KPiA+ICsqKi8NCj4gPiArVUlOVDY0DQo+ID4gK1BhZ2VU YWJsZUxpYkdldFB0ZTRLTWFwQXR0cmlidXRlICgNCj4gPiArICBJTiBJQTMyX1BURV80SyAgICAg ICAgICpQdGU0SywNCj4gPiArICBJTiBJQTMyX01BUF9BVFRSSUJVVEUgICpQYXJlbnRNYXBBdHRy aWJ1dGUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBJQTMyX01BUF9BVFRSSUJVVEUgIE1hcEF0 dHJpYnV0ZTsNCj4gPiArDQo+ID4gKyAgTWFwQXR0cmlidXRlLlVpbnQ2NCA9IElBMzJfUFRFNEtf UEFHRV9UQUJMRV9CQVNFX0FERFJFU1MNCj4gKFB0ZTRLKTsNCj4gPiArDQo+ID4gKyAgTWFwQXR0 cmlidXRlLkJpdHMuUHJlc2VudCAgICAgICAgPSBQYXJlbnRNYXBBdHRyaWJ1dGUtPkJpdHMuUHJl c2VudCAmDQo+IFB0ZTRLLT5CaXRzLlByZXNlbnQ7DQo+ID4gKyAgTWFwQXR0cmlidXRlLkJpdHMu UmVhZFdyaXRlICAgICAgPSBQYXJlbnRNYXBBdHRyaWJ1dGUtPkJpdHMuUmVhZFdyaXRlDQo+ICYg UHRlNEstPkJpdHMuUmVhZFdyaXRlOw0KPiA+ICsgIE1hcEF0dHJpYnV0ZS5CaXRzLlVzZXJTdXBl cnZpc29yID0gUGFyZW50TWFwQXR0cmlidXRlLQ0KPiA+Qml0cy5Vc2VyU3VwZXJ2aXNvciAmIFB0 ZTRLLT5CaXRzLlVzZXJTdXBlcnZpc29yOw0KPiA+ICsgIE1hcEF0dHJpYnV0ZS5CaXRzLk54ICAg ICAgICAgICAgID0gUGFyZW50TWFwQXR0cmlidXRlLT5CaXRzLk54IHwgUHRlNEstDQo+ID5CaXRz Lk54Ow0KPiA+ICsgIE1hcEF0dHJpYnV0ZS5CaXRzLldyaXRlVGhyb3VnaCAgID0gUHRlNEstPkJp dHMuV3JpdGVUaHJvdWdoOw0KPiA+ICsgIE1hcEF0dHJpYnV0ZS5CaXRzLkNhY2hlRGlzYWJsZWQg ID0gUHRlNEstPkJpdHMuQ2FjaGVEaXNhYmxlZDsNCj4gPiArICBNYXBBdHRyaWJ1dGUuQml0cy5B Y2Nlc3NlZCAgICAgICA9IFB0ZTRLLT5CaXRzLkFjY2Vzc2VkOw0KPiA+ICsNCj4gPiArICBNYXBB dHRyaWJ1dGUuQml0cy5QYXQgICAgICAgICAgID0gUHRlNEstPkJpdHMuUGF0Ow0KPiA+ICsgIE1h cEF0dHJpYnV0ZS5CaXRzLkRpcnR5ICAgICAgICAgPSBQdGU0Sy0+Qml0cy5EaXJ0eTsNCj4gPiAr ICBNYXBBdHRyaWJ1dGUuQml0cy5HbG9iYWwgICAgICAgID0gUHRlNEstPkJpdHMuR2xvYmFsOw0K PiA+ICsgIE1hcEF0dHJpYnV0ZS5CaXRzLlByb3RlY3Rpb25LZXkgPSBQdGU0Sy0+Qml0cy5Qcm90 ZWN0aW9uS2V5Ow0KPiA+ICsNCj4gPiArICByZXR1cm4gTWFwQXR0cmlidXRlLlVpbnQ2NDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmV0dXJuIHRoZSBhdHRyaWJ1dGUgb2YgYSBu b24tbGVhZiBwYWdlIHRhYmxlIGVudHJ5Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dIFBubGUg ICAgICAgICAgICAgICBQb2ludGVyIHRvIGEgbm9uLWxlYWYgcGFnZSB0YWJsZSBlbnRyeS4NCj4g PiArICBAcGFyYW1baW5dIFBhcmVudE1hcEF0dHJpYnV0ZSBQb2ludGVyIHRvIHRoZSBwYXJlbnQg YXR0cmlidXRlLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIEF0dHJpYnV0ZSBvZiB0aGUgbm9uLWxl YWYgcGFnZSB0YWJsZSBlbnRyeS4NCj4gPiArKiovDQo+ID4gK1VJTlQ2NA0KPiA+ICtQYWdlVGFi bGVMaWJHZXRQbmxlTWFwQXR0cmlidXRlICgNCj4gPiArICBJTiBJQTMyX1BBR0VfTk9OX0xFQUZf RU5UUlkgICpQbmxlLA0KPiA+ICsgIElOIElBMzJfTUFQX0FUVFJJQlVURSAgICAgICAgKlBhcmVu dE1hcEF0dHJpYnV0ZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIElBMzJfTUFQX0FUVFJJQlVU RSAgTWFwQXR0cmlidXRlOw0KPiA+ICsNCj4gPiArICBNYXBBdHRyaWJ1dGUuVWludDY0ID0gUG5s ZS0+VWludDY0Ow0KPiA+ICsNCj4gPiArICBNYXBBdHRyaWJ1dGUuQml0cy5QcmVzZW50ICAgICAg ICA9IFBhcmVudE1hcEF0dHJpYnV0ZS0+Qml0cy5QcmVzZW50ICYNCj4gUG5sZS0+Qml0cy5QcmVz ZW50Ow0KPiA+ICsgIE1hcEF0dHJpYnV0ZS5CaXRzLlJlYWRXcml0ZSAgICAgID0gUGFyZW50TWFw QXR0cmlidXRlLT5CaXRzLlJlYWRXcml0ZQ0KPiAmIFBubGUtPkJpdHMuUmVhZFdyaXRlOw0KPiA+ ICsgIE1hcEF0dHJpYnV0ZS5CaXRzLlVzZXJTdXBlcnZpc29yID0gUGFyZW50TWFwQXR0cmlidXRl LQ0KPiA+Qml0cy5Vc2VyU3VwZXJ2aXNvciAmIFBubGUtPkJpdHMuVXNlclN1cGVydmlzb3I7DQo+ ID4gKyAgTWFwQXR0cmlidXRlLkJpdHMuTnggICAgICAgICAgICAgPSBQYXJlbnRNYXBBdHRyaWJ1 dGUtPkJpdHMuTnggfCBQbmxlLQ0KPiA+Qml0cy5OeDsNCj4gPiArICBNYXBBdHRyaWJ1dGUuQml0 cy5Xcml0ZVRocm91Z2ggICA9IFBubGUtPkJpdHMuV3JpdGVUaHJvdWdoOw0KPiA+ICsgIE1hcEF0 dHJpYnV0ZS5CaXRzLkNhY2hlRGlzYWJsZWQgID0gUG5sZS0+Qml0cy5DYWNoZURpc2FibGVkOw0K PiA+ICsgIE1hcEF0dHJpYnV0ZS5CaXRzLkFjY2Vzc2VkICAgICAgID0gUG5sZS0+Qml0cy5BY2Nl c3NlZDsNCj4gPiArICByZXR1cm4gTWFwQXR0cmlidXRlLlVpbnQ2NDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgUmV0dXJuIFRSVUUgd2hlbiB0aGUgcGFnZSB0YWJsZSBlbnRyeSBp cyBhIGxlYWYgZW50cnkgdGhhdCBwb2ludHMgdG8gdGhlDQo+IHBoeXNpY2FsIGFkZHJlc3MgbWVt b3J5Lg0KPiA+ICsgIFJldHVybiBGQUxTRSB3aGVuIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIGEg bm9uLWxlYWYgZW50cnkgdGhhdCBwb2ludHMgdG8NCj4gdGhlIHBhZ2UgdGFibGUgZW50cmllcy4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSBQYWdpbmdFbnRyeSBQb2ludGVyIHRvIHRoZSBwYWdl IHRhYmxlIGVudHJ5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gTGV2ZWwgICAgICAgUGFnZSBsZXZlbCB3 aGVyZSB0aGUgcGFnZSB0YWJsZSBlbnRyeSByZXNpZGVzIGluLg0KPiA+ICsNCj4gPiArICBAcmV0 dmFsIFRSVUUgIEl0J3MgYSBsZWFmIGVudHJ5Lg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgSXQncyBh IG5vbi1sZWFmIGVudHJ5Lg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtJc1BsZSAoDQo+ ID4gKyAgSU4gSUEzMl9QQUdJTkdfRU5UUlkgICpQYWdpbmdFbnRyeSwNCj4gPiArICBJTiBVSU5U TiAgICAgICAgICAgICAgTGV2ZWwNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICAvLw0KPiA+ICsg IC8vIFBNTDVFIGFuZCBQTUw0RSBhcmUgYWx3YXlzIG5vbi1sZWFmIGVudHJpZXMuDQo+ID4gKyAg Ly8NCj4gPiArICBpZiAoTGV2ZWwgPT0gMSkgew0KPiA+ICsgICAgcmV0dXJuIFRSVUU7DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoKChMZXZlbCA9PSAzKSB8fCAoTGV2ZWwgPT0gMikpKSB7 DQo+ID4gKyAgICBpZiAoUGFnaW5nRW50cnktPlBsZUIuQml0cy5NdXN0QmVPbmUgPT0gMSkgew0K PiA+ICsgICAgICByZXR1cm4gVFJVRTsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVjdXJz aXZlbHkgcGFyc2UgdGhlIG5vbi1sZWFmIHBhZ2UgdGFibGUgZW50cmllcy4NCj4gPiArDQo+ID4g KyAgQHBhcmFtW2luXSAgICAgIFBhZ2VUYWJsZUJhc2VBZGRyZXNzIFRoZSBiYXNlIGFkZHJlc3Mg b2YgdGhlIDUxMiBub24tDQo+IGxlYWYgcGFnZSB0YWJsZSBlbnRyaWVzIGluIHRoZSBzcGVjaWZp ZWQgbGV2ZWwuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIExldmVsICAgICAgICAgICAgICAgIFBh Z2UgbGV2ZWwuIENvdWxkIGJlIDUsIDQsIDMsIDIsIDEuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAg IFJlZ2lvblN0YXJ0ICAgICAgICAgIFRoZSBiYXNlIGxpbmVhciBhZGRyZXNzIG9mIHRoZSByZWdp b24NCj4gY292ZXJlZCBieSB0aGUgbm9uLWxlYWYgcGFnZSB0YWJsZSBlbnRyaWVzLg0KPiA+ICsg IEBwYXJhbVtpbl0gICAgICBQYXJlbnRNYXBBdHRyaWJ1dGUgICBUaGUgbWFwcGluZyBhdHRyaWJ1 dGUgb2YgdGhlIHBhcmVudA0KPiBlbnRyaWVzLg0KPiA+ICsgIEBwYXJhbVtpbiwgb3V0XSBNYXAg ICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGFuIGFycmF5IHRoYXQgZGVzY3JpYmVzIG11bHRp cGxlDQo+IGxpbmVhciBhZGRyZXNzIHJhbmdlcy4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gTWFw Q291bnQgICAgICAgICAgICAgUG9pbnRlciB0byBhIFVJTlROIHRoYXQgaG9sZCB0aGUgYWN0dWFs DQo+IG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBNYXAuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAg IE1hcENhcGFjaXR5ICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIHRoZQ0K PiBNYXAgY2FuIGhvbGQuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIExhc3RFbnRyeSAgICAgICAg ICAgIFBvaW50ZXIgdG8gbGFzdCBtYXAgZW50cnkuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIE9u ZUVudHJ5ICAgICAgICAgICAgIFBvaW50ZXIgdG8gYSBsaWJyYXJ5IGludGVybmFsIHN0b3JhZ2Ug dGhhdA0KPiBob2xkcyBvbmUgbWFwIGVudHJ5Lg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJdCdzIHVzZWQgd2hlbiBNYXAgYXJyYXkgaXMgdXNlZCB1cC4NCj4g PiArKiovDQo+ID4gK1ZPSUQNCj4gPiArUGFnZVRhYmxlTGliUGFyc2VQbmxlICgNCj4gPiArICBJ TiAgICAgVUlOVDY0ICAgICAgICAgICAgICBQYWdlVGFibGVCYXNlQWRkcmVzcywNCj4gPiArICBJ TiAgICAgVUlOVE4gICAgICAgICAgICAgICBMZXZlbCwNCj4gPiArICBJTiAgICAgVUlOVDY0ICAg ICAgICAgICAgICBSZWdpb25TdGFydCwNCj4gPiArICBJTiAgICAgSUEzMl9NQVBfQVRUUklCVVRF ICAqUGFyZW50TWFwQXR0cmlidXRlLA0KPiA+ICsgIElOIE9VVCBJQTMyX01BUF9FTlRSWSAgICAg ICpNYXAsDQo+ID4gKyAgSU4gT1VUIFVJTlROICAgICAgICAgICAgICAgKk1hcENvdW50LA0KPiA+ ICsgIElOICAgICBVSU5UTiAgICAgICAgICAgICAgIE1hcENhcGFjaXR5LA0KPiA+ICsgIElOICAg ICBJQTMyX01BUF9FTlRSWSAgICAgICoqTGFzdEVudHJ5LA0KPiA+ICsgIElOICAgICBJQTMyX01B UF9FTlRSWSAgICAgICpPbmVFbnRyeQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIElBMzJfUEFH SU5HX0VOVFJZICAgKlBhZ2luZ0VudHJ5Ow0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgSW5k ZXg7DQo+ID4gKyAgSUEzMl9NQVBfQVRUUklCVVRFICBNYXBBdHRyaWJ1dGU7DQo+ID4gKyAgVUlO VDY0ICAgICAgICAgICAgICBSZWdpb25MZW5ndGg7DQo+ID4gKw0KPiA+ICsgIEFTU0VSVCAoT25l RW50cnkgIT0gTlVMTCk7DQo+ID4gKw0KPiA+ICsgIFBhZ2luZ0VudHJ5ICA9IChJQTMyX1BBR0lO R19FTlRSWSAqKShVSU5UTilQYWdlVGFibGVCYXNlQWRkcmVzczsNCj4gPiArICBSZWdpb25MZW5n dGggPSBSRUdJT05fTEVOR1RIIChMZXZlbCk7DQo+ID4gKw0KPiA+ICsgIGZvciAoSW5kZXggPSAw OyBJbmRleCA8IDUxMjsgSW5kZXgrKywgUmVnaW9uU3RhcnQgKz0gUmVnaW9uTGVuZ3RoKSB7DQo+ ID4gKyAgICBpZiAoUGFnaW5nRW50cnlbSW5kZXhdLlBjZS5QcmVzZW50ID09IDApIHsNCj4gPiAr ICAgICAgY29udGludWU7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKElzUGxlICgm UGFnaW5nRW50cnlbSW5kZXhdLCBMZXZlbCkpIHsNCj4gPiArICAgICAgQVNTRVJUIChMZXZlbCA9 PSAxIHx8IExldmVsID09IDIgfHwgTGV2ZWwgPT0gMyk7DQo+ID4gKw0KPiA+ICsgICAgICBpZiAo TGV2ZWwgPT0gMSkgew0KPiA+ICsgICAgICAgIE1hcEF0dHJpYnV0ZS5VaW50NjQgPSBQYWdlVGFi bGVMaWJHZXRQdGU0S01hcEF0dHJpYnV0ZQ0KPiAoJlBhZ2luZ0VudHJ5W0luZGV4XS5QdGU0Sywg UGFyZW50TWFwQXR0cmlidXRlKTsNCj4gPiArICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICBN YXBBdHRyaWJ1dGUuVWludDY0ID0gUGFnZVRhYmxlTGliR2V0UGxlQk1hcEF0dHJpYnV0ZQ0KPiAo JlBhZ2luZ0VudHJ5W0luZGV4XS5QbGVCLCBQYXJlbnRNYXBBdHRyaWJ1dGUpOw0KPiA+ICsgICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgICBpZiAoKCpMYXN0RW50cnkgIT0gTlVMTCkgJiYNCj4gPiAr ICAgICAgICAgICgoKkxhc3RFbnRyeSktPkxpbmVhckFkZHJlc3MgKyAoKkxhc3RFbnRyeSktPkxl bmd0aCA9PSBSZWdpb25TdGFydCkNCj4gJiYNCj4gPiArICAgICAgICAgIChJQTMyX01BUF9BVFRS SUJVVEVfUEFHRV9UQUJMRV9CQVNFX0FERFJFU1MNCj4gKCYoKkxhc3RFbnRyeSktPkF0dHJpYnV0 ZSkgKyAoKkxhc3RFbnRyeSktPkxlbmd0aA0KPiA+ICsgICAgICAgICAgID09IElBMzJfTUFQX0FU VFJJQlVURV9QQUdFX1RBQkxFX0JBU0VfQUREUkVTUw0KPiAoJk1hcEF0dHJpYnV0ZSkpICYmDQo+ ID4gKyAgICAgICAgICAoSUEzMl9NQVBfQVRUUklCVVRFX0FUVFJJQlVURVMgKCYoKkxhc3RFbnRy eSktPkF0dHJpYnV0ZSkgPT0NCj4gSUEzMl9NQVBfQVRUUklCVVRFX0FUVFJJQlVURVMgKCZNYXBB dHRyaWJ1dGUpKQ0KPiA+ICsgICAgICAgICAgKQ0KPiA+ICsgICAgICB7DQo+ID4gKyAgICAgICAg Ly8NCj4gPiArICAgICAgICAvLyBFeHRlbmQgTGFzdEVudHJ5Lg0KPiA+ICsgICAgICAgIC8vDQo+ ID4gKyAgICAgICAgKCpMYXN0RW50cnkpLT5MZW5ndGggKz0gUmVnaW9uTGVuZ3RoOw0KPiA+ICsg ICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIGlmICgqTWFwQ291bnQgPCBNYXBDYXBhY2l0eSkg ew0KPiA+ICsgICAgICAgICAgLy8NCj4gPiArICAgICAgICAgIC8vIExhc3RFbnRyeSBwb2ludHMg dG8gbmV4dCBtYXAgZW50cnkgaW4gdGhlIGFycmF5Lg0KPiA+ICsgICAgICAgICAgLy8NCj4gPiAr ICAgICAgICAgICpMYXN0RW50cnkgPSAmTWFwWypNYXBDb3VudF07DQo+ID4gKyAgICAgICAgfSBl bHNlIHsNCj4gPiArICAgICAgICAgIC8vDQo+ID4gKyAgICAgICAgICAvLyBMYXN0RW50cnkgcG9p bnRzIHRvIGxpYnJhcnkgaW50ZXJuYWwgbWFwIGVudHJ5Lg0KPiA+ICsgICAgICAgICAgLy8NCj4g PiArICAgICAgICAgICpMYXN0RW50cnkgPSBPbmVFbnRyeTsNCj4gPiArICAgICAgICB9DQo+ID4g Kw0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgLy8gU2V0IExhc3RFbnRyeS4NCj4gPiAr ICAgICAgICAvLw0KPiA+ICsgICAgICAgICgqTGFzdEVudHJ5KS0+TGluZWFyQWRkcmVzcyAgICA9 IFJlZ2lvblN0YXJ0Ow0KPiA+ICsgICAgICAgICgqTGFzdEVudHJ5KS0+TGVuZ3RoICAgICAgICAg ICA9IFJlZ2lvbkxlbmd0aDsNCj4gPiArICAgICAgICAoKkxhc3RFbnRyeSktPkF0dHJpYnV0ZS5V aW50NjQgPSBNYXBBdHRyaWJ1dGUuVWludDY0Ow0KPiA+ICsgICAgICAgICgqTWFwQ291bnQpKys7 DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIE1hcEF0dHJpYnV0 ZS5VaW50NjQgPSBQYWdlVGFibGVMaWJHZXRQbmxlTWFwQXR0cmlidXRlDQo+ICgmUGFnaW5nRW50 cnlbSW5kZXhdLlBubGUsIFBhcmVudE1hcEF0dHJpYnV0ZSk7DQo+ID4gKyAgICAgIFBhZ2VUYWJs ZUxpYlBhcnNlUG5sZSAoDQo+ID4gKyAgICAgICAgSUEzMl9QTkxFX1BBR0VfVEFCTEVfQkFTRV9B RERSRVNTICgmUGFnaW5nRW50cnlbSW5kZXhdLlBubGUpLA0KPiA+ICsgICAgICAgIExldmVsIC0g MSwNCj4gPiArICAgICAgICBSZWdpb25TdGFydCwNCj4gPiArICAgICAgICAmTWFwQXR0cmlidXRl LA0KPiA+ICsgICAgICAgIE1hcCwNCj4gPiArICAgICAgICBNYXBDb3VudCwNCj4gPiArICAgICAg ICBNYXBDYXBhY2l0eSwNCj4gPiArICAgICAgICBMYXN0RW50cnksDQo+ID4gKyAgICAgICAgT25l RW50cnkNCj4gPiArICAgICAgICApOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgUGFyc2UgcGFnZSB0YWJsZS4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSAgICAgIFBhZ2VUYWJsZSAgUG9pbnRlciB0byB0aGUgcGFnZSB0YWJsZS4NCj4gPiAr ICBAcGFyYW1baW5dICAgICAgUGFnaW5nTW9kZSBUaGUgcGFnaW5nIG1vZGUuDQo+ID4gKyAgQHBh cmFtW291dF0gICAgIE1hcCAgICAgICAgUmV0dXJuIGFuIGFycmF5IHRoYXQgZGVzY3JpYmVzIG11 bHRpcGxlIGxpbmVhcg0KPiBhZGRyZXNzIHJhbmdlcy4NCj4gPiArICBAcGFyYW1baW4sIG91dF0g TWFwQ291bnQgICBPbiBpbnB1dCwgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMNCj4gdGhh dCBNYXAgY2FuIGhvbGQuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0 cHV0LCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gTWFwLg0KPiA+ICsNCj4gPiArICBAcmV0dmFs IFJFVFVSTl9VTlNVUFBPUlRFRCAgICAgICBQYWdlTGV2ZWwgaXMgbm90IDUgb3IgNC4NCj4gPiAr ICBAcmV0dmFsIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUiBNYXBDb3VudCBpcyBOVUxMLg0KPiA+ ICsgIEByZXR2YWwgUkVUVVJOX0lOVkFMSURfUEFSQU1FVEVSICpNYXBDb3VudCBpcyBub3QgMCBi dXQgTWFwIGlzDQo+IE5VTEwuDQo+ID4gKyAgQHJldHZhbCBSRVRVUk5fQlVGRkVSX1RPT19TTUFM TCAgKk1hcENvdW50IGlzIHRvbyBzbWFsbC4NCj4gPiArICBAcmV0dmFsIFJFVFVSTl9TVUNDRVNT ICAgICAgICAgICBQYWdlIHRhYmxlIGlzIHBhcnNlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyoqLw0K PiA+ICtSRVRVUk5fU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtQYWdlVGFibGVQYXJzZSAoDQo+ ID4gKyAgSU4gICAgIFVJTlROICAgICAgICAgUGFnZVRhYmxlLA0KPiA+ICsgIElOICAgICBQQUdJ TkdfTU9ERSAgIFBhZ2luZ01vZGUsDQo+ID4gKyAgT1VUICBJQTMyX01BUF9FTlRSWSAgKk1hcCwN Cj4gPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAqTWFwQ291bnQNCj4gPiArICApDQo+ID4gK3sN Cj4gPiArICBVSU5UTiAgICAgICAgICAgICAgIE1hcENhcGFjaXR5Ow0KPiA+ICsgIElBMzJfTUFQ X0FUVFJJQlVURSAgTm9wQXR0cmlidXRlOw0KPiA+ICsgIElBMzJfTUFQX0VOVFJZICAgICAgKkxh c3RFbnRyeTsNCj4gPiArICBJQTMyX01BUF9FTlRSWSAgICAgIE9uZUVudHJ5Ow0KPiA+ICsgIFVJ TlROICAgICAgICAgICAgICAgTWF4TGV2ZWw7DQo+ID4gKw0KPiA+ICsgIGlmICgoUGFnaW5nTW9k ZSA9PSBQYWdpbmczMmJpdCkgfHwgKFBhZ2luZ01vZGUgPT0gUGFnaW5nUGFlKSB8fA0KPiAoUGFn aW5nTW9kZSA+PSBQYWdpbmdNb2RlTWF4KSkgew0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIDMy Yml0IHBhZ2luZyBpcyBuZXZlciBzdXBwb3J0ZWQuDQo+ID4gKyAgICAvLyBQQUUgcGFnaW5nIHdp bGwgYmUgc3VwcG9ydGVkIGxhdGVyLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIHJldHVybiBSRVRV Uk5fVU5TVVBQT1JURUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoTWFwQ291bnQgPT0g TlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIGlmICgoKk1hcENvdW50ICE9IDApICYmIChNYXAgPT0gTlVMTCkp IHsNCj4gPiArICAgIHJldHVybiBSRVRVUk5fSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBpZiAoUGFnZVRhYmxlID09IDApIHsNCj4gPiArICAgICpNYXBDb3VudCA9 IDA7DQo+ID4gKyAgICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICAvLw0KPiA+ICsgIC8vIFBhZ2UgdGFibGUgbGF5b3V0IGlzIGFzIGJlbG93Og0KPiA+ICsg IC8vDQo+ID4gKyAgLy8gW0lBMzJfQ1IzXQ0KPiA+ICsgIC8vICAgICB8DQo+ID4gKyAgLy8gICAg IHwNCj4gPiArICAvLyAgICAgVg0KPiA+ICsgIC8vIFtJQTMyX1BNTDVFXQ0KPiA+ICsgIC8vIC4u Lg0KPiA+ICsgIC8vIFtJQTMyX1BNTDVFXSAtLT4gW0lBMzJfUE1MNEVdDQo+ID4gKyAgLy8gICAg ICAgICAgICAgICAgICAuLi4NCj4gPiArICAvLyAgICAgICAgICAgICAgICAgIFtJQTMyX1BNTDRF XSAtLT4gW0lBMzJfUERQVEVfMUddIC0tPiAxRyBhbGlnbmVkIHBoeXNpY2FsDQo+IGFkZHJlc3MN Cj4gPiArICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uDQo+ID4gKyAg Ly8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtJQTMyX1BEUFRFXSAtLT4gW0lB MzJfUERFXzJNXSAtLT4gMk0gYWxpZ25lZA0KPiBwaHlzaWNhbCBhZGRyZXNzDQo+ID4gKyAgLy8g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uDQo+ ID4gKyAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgW0lBMzJfUERFXSAtLT4gW0lBMzJfUFRFXzRLXSAgLS0+IDRLIGFsaWduZWQNCj4gcGh5c2lj YWwgYWRkcmVzcw0KPiA+ICsgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLg0KPiA+ICsgIC8vICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtJ QTMyX1BURV80S10gIC0tPiA0SyBhbGlnbmVkIHBoeXNpY2FsDQo+IGFkZHJlc3MNCj4gPiArICAv Lw0KPiA+ICsNCj4gPiArICBOb3BBdHRyaWJ1dGUuVWludDY0ICAgICAgICAgICAgICA9IDA7DQo+ ID4gKyAgTm9wQXR0cmlidXRlLkJpdHMuUHJlc2VudCAgICAgICAgPSAxOw0KPiA+ICsgIE5vcEF0 dHJpYnV0ZS5CaXRzLlJlYWRXcml0ZSAgICAgID0gMTsNCj4gPiArICBOb3BBdHRyaWJ1dGUuQml0 cy5Vc2VyU3VwZXJ2aXNvciA9IDE7DQo+ID4gKw0KPiA+ICsgIE1heExldmVsICAgID0gKFVJTlQ4 KShQYWdpbmdNb2RlID4+IDgpOw0KPiA+ICsgIE1hcENhcGFjaXR5ID0gKk1hcENvdW50Ow0KPiA+ ICsgICpNYXBDb3VudCAgID0gMDsNCj4gPiArICBMYXN0RW50cnkgICA9IE5VTEw7DQo+ID4gKyAg UGFnZVRhYmxlTGliUGFyc2VQbmxlICgoVUlOVDY0KVBhZ2VUYWJsZSwgTWF4TGV2ZWwsIDAsDQo+ ICZOb3BBdHRyaWJ1dGUsIE1hcCwgTWFwQ291bnQsIE1hcENhcGFjaXR5LCAmTGFzdEVudHJ5LCAm T25lRW50cnkpOw0KPiA+ICsNCj4gPiArICBpZiAoKk1hcENvdW50ID4gTWFwQ2FwYWNpdHkpIHsN Cj4gPiArICAgIHJldHVybiBSRVRVUk5fQlVGRkVSX1RPT19TTUFMTDsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIHJldHVybiBSRVRVUk5fU1VDQ0VTUzsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQg YS9VZWZpQ3B1UGtnL1VlZmlDcHVQa2cuZGVjIGIvVWVmaUNwdVBrZy9VZWZpQ3B1UGtnLmRlYw0K PiA+IGluZGV4IDE5NTFlYjI5NGMuLjRmZTc5Y2VjYmYgMTAwNjQ0DQo+ID4gLS0tIGEvVWVmaUNw dVBrZy9VZWZpQ3B1UGtnLmRlYw0KPiA+ICsrKyBiL1VlZmlDcHVQa2cvVWVmaUNwdVBrZy5kZWMN Cj4gPiBAQCAtNjIsNiArNjIsOSBAQA0KPiA+ICAgICAjIyAgQGxpYnJhcnljbGFzcyAgUHJvdmlk ZXMgZnVuY3Rpb24gZm9yIGxvYWRpbmcgbWljcm9jb2RlLg0KPiA+ICAgICBNaWNyb2NvZGVMaWJ8 SW5jbHVkZS9MaWJyYXJ5L01pY3JvY29kZUxpYi5oDQo+ID4NCj4gPiArICAjIyAgQGxpYnJhcnlj bGFzcyAgUHJvdmlkZXMgZnVuY3Rpb24gZm9yIG1hbmlwdWxhdGluZyB4ODYgcGFnaW5nDQo+IHN0 cnVjdHVyZXMuDQo+ID4gKyAgQ3B1UGFnZVRhYmxlTGlifEluY2x1ZGUvTGlicmFyeS9DcHVQYWdl VGFibGVMaWIuaA0KPiA+ICsNCj4gPiAgIFtHdWlkc10NCj4gPiAgICAgZ1VlZmlDcHVQa2dUb2tl blNwYWNlR3VpZCAgICAgID0geyAweGFjMDViZjMzLCAweDk5NWEsIDB4NGVkNCwgeyAweGFhLA0K PiAweGI4LCAweGVmLCAweDdhLCAweGU4LCAweGYsIDB4NWMsIDB4YjAgfX0NCj4gPiAgICAgZ01z ZWdTbXJhbUd1aWQgICAgICAgICAgICAgICAgID0geyAweDU4MDJiY2U0LCAweGVlZWUsIDB4NGUz MywgeyAweGExLCAweDMwLA0KPiAweGViLCAweGFkLCAweDI3LCAweGYwLCAweGU0LCAweDM5IH19 DQo+ID4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvVWVmaUNwdVBrZy5kc2MgYi9VZWZpQ3B1UGtn L1VlZmlDcHVQa2cuZHNjDQo+ID4gaW5kZXggYTBiYmRlOTk4NS4uZjY5NGIzYTc3YyAxMDA2NDQN Cj4gPiAtLS0gYS9VZWZpQ3B1UGtnL1VlZmlDcHVQa2cuZHNjDQo+ID4gKysrIGIvVWVmaUNwdVBr Zy9VZWZpQ3B1UGtnLmRzYw0KPiA+IEBAIC0xLDcgKzEsNyBAQA0KPiA+ICAgIyMgQGZpbGUNCj4g PiAgICMgIFVlZmlDcHVQa2cgUGFja2FnZQ0KPiA+ICAgIw0KPiA+IC0jICBDb3B5cmlnaHQgKGMp IDIwMDcgLSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ DQo+ID4gKyMgIENvcHlyaWdodCAoYykgMjAwNyAtIDIwMjIsIEludGVsIENvcnBvcmF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgICMNCj4gPiAgICMgIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gICAjDQo+ID4gQEAgLTYyLDYgKzYy LDcgQEANCj4gPiAgICAgVm1nRXhpdExpYnxVZWZpQ3B1UGtnL0xpYnJhcnkvVm1nRXhpdExpYk51 bGwvVm1nRXhpdExpYk51bGwuaW5mDQo+ID4gICAgIE1pY3JvY29kZUxpYnxVZWZpQ3B1UGtnL0xp YnJhcnkvTWljcm9jb2RlTGliL01pY3JvY29kZUxpYi5pbmYNCj4gPg0KPiBTbW1DcHVSZW5kZXp2 b3VzTGlifFVlZmlDcHVQa2cvTGlicmFyeS9TbW1DcHVSZW5kZXp2b3VzTGliL1NtbQ0KPiBDcHVS ZW5kZXp2b3VzTGliLmluZg0KPiA+ICsNCj4gQ3B1UGFnZVRhYmxlTGlifFVlZmlDcHVQa2cvTGli cmFyeS9DcHVQYWdlVGFibGVMaWIvQ3B1UGFnZVRhYmxlTGliLmluZg0KPiA+DQo+ID4gICBbTGli cmFyeUNsYXNzZXMuY29tbW9uLlNFQ10NCj4gPg0KPiBQbGF0Zm9ybVNlY0xpYnxVZWZpQ3B1UGtn L0xpYnJhcnkvUGxhdGZvcm1TZWNMaWJOdWxsL1BsYXRmb3JtU2VjTGliTnVsbC5pDQo+IG5mDQo+ ID4gQEAgLTE3NSw2ICsxNzYsNyBAQA0KPiA+ICAgICBVZWZpQ3B1UGtnL1VuaXZlcnNhbC9BY3Bp L1MzUmVzdW1lMlBlaS9TM1Jlc3VtZTJQZWkuaW5mDQo+ID4gICAgIFVlZmlDcHVQa2cvUmVzZXRW ZWN0b3IvVnRmMC9CaW4vUmVzZXRWZWN0b3IuaW5mDQo+ID4gICAgIFVlZmlDcHVQa2cvTGlicmFy eS9TbW1DcHVSZW5kZXp2b3VzTGliL1NtbUNwdVJlbmRlenZvdXNMaWIuaW5mDQo+ID4gKyAgVWVm aUNwdVBrZy9MaWJyYXJ5L0NwdVBhZ2VUYWJsZUxpYi9DcHVQYWdlVGFibGVMaWIuaW5mDQo+ID4N Cj4gPiAgIFtCdWlsZE9wdGlvbnNdDQo+ID4gICAgICpfKl8qX0NDX0ZMQUdTID0gLUQgRElTQUJM RV9ORVdfREVQUkVDQVRFRF9JTlRFUkZBQ0VTDQo=