From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id AB66F74003A for ; Thu, 14 Dec 2023 11:12:01 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=tP3NrECmP8b/k66TQeNqKjy81ZO60AoVDmTJUXWJ9Ag=; c=relaxed/simple; d=groups.io; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:From:To:CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20140610; t=1702552320; v=1; b=ca6korc8/M+AlLy9k5D8lEwHHEMz7IKWx7vmf4LyKe3xAiyZjsJaVKsilBGjbRNj/z3hNbq1 YpvqFlnT55zug6RjzNlKeb8SlVg0LsOj5ExMiZXwgv5O085GhpFZUaaCgHmqlPjSIstK0jd7zfL wpu988f4+XZYWbtjnrO8sDbU= X-Received: by 127.0.0.2 with SMTP id UAeKYY7687511xZS0O5iZUxe; Thu, 14 Dec 2023 03:12:00 -0800 X-Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) by mx.groups.io with SMTP id smtpd.web10.19595.1702552319459445047 for ; Thu, 14 Dec 2023 03:11:59 -0800 X-IronPort-AV: E=McAfee;i="6600,9927,10923"; a="8501373" X-IronPort-AV: E=Sophos;i="6.04,275,1695711600"; d="scan'208";a="8501373" X-Received: from orviesa001.jf.intel.com ([10.64.159.141]) by fmvoesa102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Dec 2023 03:11:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.04,275,1695711600"; d="scan'208";a="22362215" X-Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by orviesa001.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 14 Dec 2023 03:11:58 -0800 X-Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 14 Dec 2023 03:11:57 -0800 X-Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 14 Dec 2023 03:11:57 -0800 X-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.2507.35 via Frontend Transport; Thu, 14 Dec 2023 03:11:57 -0800 X-Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.101) 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.2507.35; Thu, 14 Dec 2023 03:11:57 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iGSzIaNRVw8JkrjZBVkfyGapAiS98qRog6b47t/icjkOuttdkAdl958Tgfvg1rkMywpqtQKwCfVmsfnYa1HURL/iET78Wk52Xb0To2Ppakl85Fbj8S53TILrt6Yx02DnZrAZikimhMaHGrVu1z43puAJ9H/eaBR/mVlOS8aYM8SQmlSZ+09YhzStgbZ8uxcNNnEI2u+BFDw9ACoNBPmZHW6E/nZDt25DE5Vpqg7Ai5FXTSitduF6KV64Nq7NpPVyJceDMEculT7mmEI8qym5itIRLXZiPDXP9kZMgsTihfzvCQSMoLYVRnp5TN1/15BwgoImXNp7zQfwlaf1i+vDiA== 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=dAefvEa8Lz+Y7uCpGisGJycc6Alhvyj6NrV4q2Om04Y=; b=OWxcUqjs91exVjAUzi4IeqOOxUSm4AuFL7MBOsNL6HKNeHSznFOIxTO39y9oHan7FNQ+4UutGFPlcbQ9AzuFtBYI8awyk6qRMfC/RUmNd9tdjoyDDNpaCpmS9rkduK9iP6FeAotbj0tdFa9ddO7TYbd6P5b2+IftrjEqB8ytP6c75mPX0nn6XUJQRelQs/qIPNtkzmRw4VkoLqM7l6TJ+P8XJ1miMqscio2I7Le33HSfuLALWbrUloTQMruacQZHnw/6xgmfb7yI8E48rEDtKsZUNIuu56ws97eZLLzaBZg/31q2kauNKCGVWkwifz2TVd/5BCJ4zyT5WCrXHt1BQA== 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 X-Received: from MN0PR11MB6158.namprd11.prod.outlook.com (2603:10b6:208:3ca::18) by IA1PR11MB7944.namprd11.prod.outlook.com (2603:10b6:208:3d8::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7091.28; Thu, 14 Dec 2023 11:11:53 +0000 X-Received: from MN0PR11MB6158.namprd11.prod.outlook.com ([fe80::864d:d91a:4674:e0f7]) by MN0PR11MB6158.namprd11.prod.outlook.com ([fe80::864d:d91a:4674:e0f7%7]) with mapi id 15.20.7091.028; Thu, 14 Dec 2023 11:11:53 +0000 From: "Wu, Jiaxin" To: Laszlo Ersek , "devel@edk2.groups.io" CC: "Dong, Eric" , "Ni, Ray" , "Zeng, Star" , Gerd Hoffmann , "Kumar, Rahul R" Subject: Re: [edk2-devel] [PATCH v3 3/6] UefiCpuPkg: Implements SmmCpuSyncLib library instance Thread-Topic: [edk2-devel] [PATCH v3 3/6] UefiCpuPkg: Implements SmmCpuSyncLib library instance Thread-Index: AQHaLdF0QsFHJxUIn0ap8zpRovEEUbCoIymQ Date: Thu, 14 Dec 2023 11:11:52 +0000 Message-ID: References: <20231206100122.8028-1-jiaxin.wu@intel.com> <20231206100122.8028-4-jiaxin.wu@intel.com> <3b31f213-f102-acd4-4af6-d2b77fbde9a9@redhat.com> In-Reply-To: <3b31f213-f102-acd4-4af6-d2b77fbde9a9@redhat.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN0PR11MB6158:EE_|IA1PR11MB7944:EE_ x-ms-office365-filtering-correlation-id: 6f2753c8-af09-404e-4cda-08dbfc9579dd x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: H4AuxxbXeNvCLTsqh4FFEsfTOGTEumHb51pM4khmzPI92xsMhm0QEYU6q2cQFFJqDcGotSr4ZVtEgfpuOi/3c9/jMntXUwTZUzlW+RBW3AFfwnI1TIOPv0mN1wtIUW0UO23l/3mJOzTqEMeLByNv+vwRlhRHf0KRsIYvpXaKn0wTuf2avFzJtuMUKv0q9gGo3H0Fx6LvTSQfs6vghRca5AAugUAYMRk4Ck9AcSPFW5bjfCGm6hRG0TbDEGdzUfNyyFR1cLWFZY/SLnyUknPUmD8HEUgw84nnPOeiU//Qk3p3Yz6ZSAFhCI0GdSdoctg5lOz6x3SW3aGEb8CZm0FB4qEA5ZciUQ4d+Dd17UjJujQqHGo4yF0GPKeVmd/a5UQYG90mdQP85cHXvhzmtUQm+ATip752zBJ288bAuMo4fErHhPIiyaNv9/q88MrdxyugIZbwsIdYP7DnSj6E62Q1BezwWiNBY7PzVZZbUTtrJ3NxaN0NI9X9n1Apsv/oQzzwH1hcQp3AQpHRMVkFm3JmaVYuLaoebPNLLgHL3/iRbFvqG+JRunP0MMTBcHfYTz2ABGvKyObZN9gvQWrIxBBmO7iy8naZirWMqoGa6MBkREq97OOpifUZ2kBOSJQaJCsM x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?blZIcExRcGVENWtXK2x1MEg5TkQ1Q05JZHpjcCtUOVg2QnBsMkVYN3dmS2pv?= =?utf-8?B?S0FaMnd1b3RMK3FFWFdab1FpdWRiQVcxZU5WMXhzelpJM0UyanYyWUo3L21w?= =?utf-8?B?WUMxWnhmakNzekhwNy9yTGJtUnNoY3BXQ1NoZTZYSUR0Q1l2ZmhzRUw2UXhl?= =?utf-8?B?azFQUEx2RHFpSnRBbnRNMzd0Zjl0TmZVenJLNENxd2dsTUFPRnVDbjkyVFVG?= =?utf-8?B?ajlPUWJUS3JhV0lvaUdvYlkvL05rdHBSeXNXc1cxWXhKWVZicDZMVXdxaG1M?= =?utf-8?B?UndzcGZmVTJ4bU9TZFFBMUZrdjVUbFlKcGxzbTZ4OVNFQ1YwRWMyU1V3SG9h?= =?utf-8?B?TGlobEYwSm1kT01saGdpV0tpdEtnelhycHpyZ3NPNURyekZLNklMSURiWXBI?= =?utf-8?B?SG1Vcmk0WCs5SDVNUDk0cTVzQUpnTEMvVDFQUU50VXFtZmRoZGhQVnN1VmMw?= =?utf-8?B?UHhXbi9FaXNOUWtBVG5oTWVrR3o4ekM5RGQwR09nNDZWV2VyclMvZnhpZTRj?= =?utf-8?B?bkZhVk9KR0o0UkY0ZXp0bExQeURGN2JLMVpJWDFJS0FOQlNVRzh6VmJqRnds?= =?utf-8?B?d2ozN0xCYlROaVB2S014QTM5UUMybHRyVVZuTDFRQUNieUp3Ni9Nb1FyWXRU?= =?utf-8?B?ZndpNDRGTURURjUvZTV4cWVZY0x6M1JhWmVxTTJQQnNsSFVSTGZ6cnhWL0sy?= =?utf-8?B?b1FGZ2J3TXVZNkRLTk54OG9hUWUzbms3djFjbTBsQXgrajQ3Ym0yS2Z4ekpJ?= =?utf-8?B?QVYySE9oeWR4OWJ6ZWYwNTJKQzdtdHVmMWE1VzBTazVQZTlpQThUeDlVRWxm?= =?utf-8?B?Zm5jcEswcm9mcUNwbTl2K1pENVdMSHpETmVaYjNBenE1QzkveS9OTGllM2xU?= =?utf-8?B?OFRadWtzRC9EMTdHVG5tMlV6aVRRSXdyTE9KOStLUzk1NERmM0swVGZvQzNL?= =?utf-8?B?Qk5qcHpicndhM3g4Sk5haWs1bzJSOW4xZlRISkNqdW82dEpKZ2szdXdWZUo3?= =?utf-8?B?eWs0L0xtMVRuWkpaRC93Y291M2U5RzlhT2RsOHRDbHZWdUVpdWpzOXRlWDNS?= =?utf-8?B?RWxIbUZ6ZWRSb0M4UUprZWxJMUJjRGtkc08wZTI0bE1JRDNUTGE2Nnpya0M4?= =?utf-8?B?aG13KzhPZ2hZSmtXS2tyaVdJWklBL0ZRQjU3aUFHRDNVK3FXNlNWTXVleVZy?= =?utf-8?B?QTkrVzFUSzlqSjlPUkQ5ZG1pdXBBUitscjlZTVlSZTdJRFVGc2ZUenY5eTRz?= =?utf-8?B?R2pYaFkzU2toOXp5TXdGNnRKdXM3TGZtSGZLSVFIVlBVTGFmTEtNeDBSUGdB?= =?utf-8?B?d3JuTGZidUwzY003TEVOdlRsa3lLSnNaVis0V0I2aGNaZW1yMjA0d1BlRitt?= =?utf-8?B?K2JENVhxVmVJbzByVEZDN3FTN2t0YitEUjJQWjF3cmdGYnpVKzArbzJzM3dL?= =?utf-8?B?Y1pYYXNVbkhpTUR5MmdDMldBVStVdWNHSllqYXkxOExDSjg3Ymp4c2p4OC9l?= =?utf-8?B?TzFVdEIzRExYTDNWdk9XL1g3ekE1N1RFbDhYUW8vQ1poVVJCQkRvUTI2eFlI?= =?utf-8?B?ckliSHNINjZMbER1WXdrdXBJN2NEUVZFd0dVczZZM2tNSlFTcFFINzF4eEpv?= =?utf-8?B?dWJRN3F0dGVXalZIZjd3YVBrQXBhWSthcGtyYVVuSEVDYWg4aVcwUE1vdTNz?= =?utf-8?B?eTVXUDJWdlpMUE5YOWwvc3U5Tm9XdzZKMWMvSWdSQmg4alMzdDJpVlQvbFFW?= =?utf-8?B?TTd2MkRXVmhHZ3drN2tGZ2NtUTdDRkpQaGtwUllBN0JEcDhBNHJ2RFg4VmNj?= =?utf-8?B?czJ6bzdhVEhkMGYzVllpVzJlcCtRQStXYmNaOVJvL1VHQng1c05hUWdIbk92?= =?utf-8?B?dmRnZUF5bTZZNnI0YVljOUFUOFdlNzE2WmM0Z2xRU3NuSUZ2MzljOHRtUmE1?= =?utf-8?B?Zzk4aENJcUgxRkl5amlyR3dXdXVNUEZsYytOZlZFMVJoZFNRaks0OUV0T01w?= =?utf-8?B?ODJzdTcwOGJ0eFB3VWNaYkRBR0VhbVgxMFpWcS9UeEVOUHh6TE5uQ1p1akcz?= =?utf-8?B?S0ZOdTQwQkZBQXE3eFJvYnYyWVlnQ3gxWndSOHVQVG5ONVA3WDFhSFJnSmFU?= =?utf-8?Q?KDvkP00Mcr5ZeKpD3T7+eklvg?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN0PR11MB6158.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6f2753c8-af09-404e-4cda-08dbfc9579dd X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Dec 2023 11:11:52.7887 (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: XehYZuo1d5p1S1r18GqPAhaidrjL1vNgnwJYq1k1BJm2UpaRfoPTBYc89aosp1YohxjiU1nEG642Bfq5HeXrjg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB7944 X-OriginatorOrg: intel.com Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,jiaxin.wu@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: NW6GytUZ79fS4L4RDrWhP3Bux7686176AA= Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=ca6korc8; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=intel.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}") SGkgTGFzemxvLA0KDQpSZWFsbHkgYXBwcmVjaWF0ZSB5b3VyIGNvbW1lbnRzISBJIGNoZWNrZWQg b25lIGJ5IG9uZSBhbmQgZmVlZGJhY2sgYXMgYmVsb3csIHRoYW5rIHlvdSAmIFJheSBhZ2FpbiAm IGFnYWluIGZvciBwYXRjaCByZWZpbmVtZW50ISEhIQ0KDQoNCj4gDQo+ICgxKSBJZiAvIHdoZW4g eW91IHVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBpbiBwYXRjaCMyLCBwbGVhc2UgdXBkYXRlDQo+ IHRoaXMgb25lIGFzIHdlbGwuDQo+IA0KDQpZZXMsIEkgd2lsbCBkbyB0aGUgYWxpZ25tZW50Lg0K DQo+ICgyKSBQbGVhc2Ugc29ydCB0aGUgI2luY2x1ZGUgbGlzdCBhbHBoYWJldGljYWxseS4NCj4g DQo+IChUaGUgaWRlYSBpcyB0aGF0IHRoZSBbTGlicmFyeUNsYXNzZXNdIHNlY3Rpb24gaW4gdGhl IElORiBmaWxlIHNob3VsZCBiZQ0KPiBzb3J0ZWQgYXMgd2VsbCwgYW5kIHRoZW4gd2UgY2FuIGVh c2lseSB2ZXJpZnkgd2hldGhlciB0aG9zZSB0d28gbGlzdHMNCj4gbWF0Y2ggZWFjaCBvdGhlciAt LSBtb2R1bG8gPExpYnJhcnkvU21tQ3B1U3luY0xpYi5oPiwgb2YgY291cnNlLikNCj4gDQoNCkFn cmVlLg0KDQo+ICgzKSBXZSBjYW4gaW1wcm92ZSB0aGlzLCBhcyBmb2xsb3dzOg0KPiANCj4gICB0 eXBlZGVmIHZvbGF0aWxlIFVJTlQzMiBTTU1fQ1BVX1NZTkNfU0VNQVBIT1JFOw0KDQpHb29kIGNv bW1lbnQuIEFncmVlLg0KDQoNCj4gDQo+ICAgdHlwZWRlZiBzdHJ1Y3Qgew0KPiAgICAgU01NX0NQ VV9TWU5DX1NFTUFQSE9SRSAqQ291bnRlcjsNCj4gICB9IFNNTV9DUFVfU1lOQ19TRU1BUEhPUkVf R0xPQkFMOw0KPiANCj4gICB0eXBlZGVmIHN0cnVjdCB7DQo+ICAgICBTTU1fQ1BVX1NZTkNfU0VN QVBIT1JFICpSdW47DQo+ICAgfSBTTU1fQ1BVX1NZTkNfU0VNQVBIT1JFX0NQVTsNCj4gDQo+IEJl Y2F1c2UsIHdoaWxlIGl0ICppbmRlZWQqIG1ha2VzIHNvbWUgc2Vuc2UgdG8gaW50cm9kdWNlIHRo ZXNlIHNlcGFyYXRlDQo+IHdyYXBwZXIgc3RydWN0dXJlcywgd2Ugc2hvdWxkIHN0aWxsIGVuc3Vy ZSB0aGF0IHRoZSBpbnRlcm5hbHMgYXJlDQo+IGlkZW50aWNhbC4gVGhpcyB3aWxsIGNvbWUgaGFu ZHkgbGF0ZXIuDQo+IA0KDQpBZnRlciBjaGVjayB3aXRoIFJheSwgSSBjb252aW5jZWQgd2UgZG9u J3QgbmVlZCB3cmFwcGVyIHRoZSAiQ291bnRlciIgaW50byB0aGUgU01NX0NQVV9TWU5DX1NFTUFQ SE9SRV9HTE9CQUwuIEhlIHRoaW5rcyBpdCdzIG92ZXJkZXNpZ25lZCBzaW5jZSBjdXJyZW50bHkg d2Ugb25seSBoYXZlIG9uZSBHTE9CQUwgc2VtYXBob3JlLiAiQ291bnRlciIgZGVmaW5lcyBpbiB0 aGUgU01NX0NQVV9TWU5DX0NPTlRFWFQgZGlyZWN0bHkgY2FuIGFsc28gbWFrZSAiQ291bnRlciIg aGFzIGl0cyBvd24gQ1BVIGNhY2hlIGxpbmVzLCBhbmQgZG9uJ3QgbmVlZCBjb25zaWRlciB0aGUg ZnV0dXJlIGV4dGVuc2lvbi4gU28sIEkgYWdyZWUgdG8gbW92ZSBDb3VudGVyIGludG8gU01NX0NQ VV9TWU5DX0NPTlRFWFQuIFdoYXQncyB5b3VyIG9waW5pb24/DQoNCkJ1dCBmb3IgdGhlICpSdW4q LCBoZSBpcyBvayB0byB3cmFwIGludG8gdGhlIHN0cnVjdHVyZSBzaW5jZSBpdCdzIGZvciBlYWNo IENQVSwgYW5kIGl0IGNhbiBiZW5lZml0ICYgc2ltcGx5IHRoZSBjb2RpbmcgbG9naWMsIHdoaWNo IGNhbiBlYXNpbHkgaGVscCB1cyBkaXJlY3QgdG8gdGhlIGRpZmZlcmVudCBDUFUgd2l0aCBpbmRl eCBhbmQgbWVldCB0aGUgc2VtYXBob3JlIHNpemUgYWxpZ25tZW50IHJlcXVpcmVtZW50Lg0KDQo+ IA0KPiAoNCkgVGhpcyBpcyB0b28gY29tcGxpY2F0ZWQsIGluIG15IG9waW5pb24uDQo+IA0KPiAo NC4xKSBGaXJzdCBvZiBhbGwsIHBsZWFzZSBhZGQgYSAqY29uc3BpY3VvdXMqIGNvbW1lbnQgdG8g dGhlDQo+IFNNTV9DUFVfU1lOQ19DT05URVhUIGhlcmUsIGV4cGxhaW5pbmcgdGhhdCB0aGUgd2hv bGUgaWRlYSBpcyB0byBwbGFjZQ0KPiB0aGUgQ291bnRlciBhbmQgUnVuIHNlbWFwaG9yZXMgb24g ZGlmZmVyZW50IENQVSBjYWNoZSBsaW5lcywgZm9yIGdvb2QNCj4gcGVyZm9ybWFuY2UuIFRoYXQn cyB0aGUgKmNvcmUqIHByaW5jaXBsZSBvZiB0aGlzIHdob2xlIHN0cnVjdHVyZSAtLQ0KPiB0aGF0 J3Mgd2h5IHdlIGhhdmUgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc2VtYXBob3JlcywgcmF0aGVy IHRoYW4gYW4NCj4gYXJyYXkgb2Ygc2VtYXBob3JlcyBkaXJlY3RseS4NCj4gDQo+IFlvdSBkaWRu J3QgZG9jdW1lbnQgdGhhdCBwcmluY2lwbGUsIGFuZCBJIGhhZCB0byBzcGVuZCBhIGxvdCBvZiB0 aW1lDQo+IGRlZHVjaW5nIHRoYXQgZmFjdCBmcm9tIHRoZSBTbW1DcHVTeW5jQ29udGV4dEluaXQo KSBmdW5jdGlvbi4NCg0KU29ycnkgYWJvdXQgdGhhdCwgSSB3aWxsIGRvY3VtZW50IGZvciB0aGUg U01NX0NQVV9TWU5DX0NPTlRFWFQgZGVmaW5pdGlvbi4NCg0KDQo+IA0KPiAoNC4yKSBUaGUgc3Ry dWN0dXJlIHNob3VsZCBnbyBsaWtlIHRoaXM6DQo+IA0KPiBzdHJ1Y3QgU01NX0NQVV9TWU5DX0NP TlRFWFQgIHsNCj4gICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkNw dXM7DQo+ICAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlNlbUJ1ZmZlcjsNCj4g ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZW1CdWZmZXJQYWdlczsNCj4gICBT TU1fQ1BVX1NZTkNfU0VNQVBIT1JFX0dMT0JBTCAgICBHbG9iYWxTZW07DQo+ICAgU01NX0NQVV9T WU5DX1NFTUFQSE9SRV9DUFUgICAgICAgQ3B1U2VtW107DQo+IH07DQo+IA0KPiBEZXRhaWxzOg0K PiANCj4gLSBtb3ZlIE51bWJlck9mQ3B1cyB0byB0aGUgdG9wDQo+IA0KPiAtIGNoYW5nZSB0aGUg dHlwZSBvZiBTZW1CdWZmZXIgZnJvbSAoVUlOVE4qKSB0byAoVk9JRCopDQo+IA0KPiAtIHJlcGxh Y2UgU2VtQnVmZmVyU2l6ZSB3aXRoIFNlbUJ1ZmZlclBhZ2VzDQoNCk9oPyBMYXpsbywgY291bGQg eW91IGV4cGxhaW4gd2h5IGl0J3MgYmV0dGVyIHRvIGRlZmluZSBpdCBhcyAiU2VtQnVmZmVyUGFn ZXMiIGluc3RlYWQgb2YgIlNlbUJ1ZmZlclNpemUiIGluIGJ5dGVzPw0KDQoNCj4gDQo+IC0gbW92 ZSBHbG9iYWxTZW0gYW5kIENwdVNlbSB0byB0aGUgZW5kDQo+IA0KPiAtIFdlIG5lZWQgZXhhY3Rs eSBvbmUgU01NX0NQVV9TWU5DX1NFTUFQSE9SRV9HTE9CQUwsIHRoZXJlZm9yZQ0KPiBlbWJlZA0K PiBHbG9iYWxTZW0gZGlyZWN0bHkgYXMgYSBmaWVsZCAoaXQgc2hvdWxkIG5vdCBiZSBhIHBvaW50 ZXIpDQo+IA0KPiAtIFdlIGNhbiBtdWNoIHNpbXBsaWZ5IHRoZSBjb2RlIGJ5IHR1cm5pbmcgQ3B1 U2VtIGludG8gYSAqZmxleGlibGUgYXJyYXkNCj4gbWVtYmVyKiAodGhpcyBpcyBhIEM5OSBmZWF0 dXJlIHRoYXQgaXMgYWxyZWFkeSB3aWRlbHkgdXNlZCBpbiBlZGsyKS4NCj4gVGhpcyBpcyB3aHkg d2UgbW92ZSBDcHVTZW0gdG8gdGhlIGVuZCAoYW5kIHRoZW4gd2Uga2VlcCBHbG9iYWxTZW0NCj4g bmVhcmJ5LCBmb3IgY2xhcml0eSkuDQoNCkFncmVlISBUaGUgc2FtZSBjb21tZW50IGZyb20gUmF5 ISBUaGFuayB5b3UgYW5kIFJheSwgYm90aCEhIQ0KDQo+DQoNClJlYWxseSBncmVhdCBjb21tZW50 IGhlcmU6DQoNCkJhc2VkIG9uIG15IGFib3ZlIGV4cGxhbmF0aW9uLCBJIHByb3Bvc2UgdG8gYmVs b3cgZGVmaW5pdGlvbjoNCg0KLy8vDQovLy8gU2hhbGwgcGxhY2UgZWFjaCBzZW1hcGhvcmUgb24g ZXhjbHVzaXZlIGNhY2hlIGxpbmUgZm9yIGdvb2QgcGVyZm9ybWFuY2UuDQovLy8NCnR5cGVkZWYg dm9sYXRpbGUgVUlOVDMyIFNNTV9DUFVfU1lOQ19TRU1BUEhPUkU7DQoNCnR5cGVkZWYgc3RydWN0 IHsNCiAgLy8vDQogIC8vLyBVc2VkIGZvciBjb250cm9sIGVhY2ggQ1BVIGNvbnRpbnVlIHJ1biBv ciB3YWl0IGZvciBzaWduYWwNCiAgLy8vDQogIFNNTV9DUFVfU1lOQ19TRU1BUEhPUkUgICAgKlJ1 bjsNCn0gU01NX0NQVV9TWU5DX1NFTUFQSE9SRV9GT1JfRUFDSF9DUFU7DQoNCnN0cnVjdCBTTU1f Q1BVX1NZTkNfQ09OVEVYVCAgew0KICAvLy8NCiAgLy8vIEluZGljYXRlIGFsbCBDUFVzIGluIHRo ZSBzeXN0ZW0uDQogIC8vLw0KICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOdW1iZXJPZkNwdXM7DQogIC8vLw0KICAvLy8gQWRkcmVzcyBvZiBzZW1hcGhvcmVzDQogIC8v Lw0KICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqU2VtQnVmZmVyOw0K ICAvLy8NCiAgLy8vIFNpemUgaW4gYnl0ZXMgb2Ygc2VtYXBob3Jlcw0KICAvLy8NCiAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VtQnVmZmVyU2l6ZTsgICAgICAtLS0t PiBJIGNhbiBjaGFuZ2UgdG8gcGFnZXMgYmFzZWQgb24geW91ciBmZWVkYmFjazopLg0KICAvLy8N CiAgLy8vIEluZGljYXRlIENQVXMgZW50ZXJlZCBTTU0uDQogIC8vLw0KICBTTU1fQ1BVX1NZTkNf U0VNQVBIT1JFICAgICAgICAgICAgICAgICAqQ3B1Q291bnQ7DQogIC8vLw0KICAvLy8gRGVmaW5l IGFuIGFycmF5IG9mIHN0cnVjdHVyZSBmb3IgZWFjaCBDUFUgc2VtYXBob3JlIGR1ZSB0byB0aGUg c2l6ZSBhbGlnbm1lbnQNCiAgLy8vIHJlcXVpcmVtZW50LiBXaXRoIHRoZSBhcnJheSBvZiBzdHJ1 Y3R1cmUgZm9yIGVhY2ggQ1BVIHNlbWFwaG9yZSwgaXQncyBlYXN5IHRvDQogIC8vLyByZWFjaCB0 aGUgc3BlY2lmaWMgQ1BVIHdpdGggQ1BVIEluZGV4IGZvciBpdHMgb3duIHNlbWFwaG9yZSBhY2Nl c3M6IENwdVNlbVtDcHVJbmRleF0uDQogIC8vLw0KICBTTU1fQ1BVX1NZTkNfU0VNQVBIT1JFX0ZP Ul9FQUNIX0NQVSAgICBDcHVTZW1bXTsNCn07DQoNCg0KPiANCj4gKDUpIFBsZWFzZSBtYWtlIHRo ZXNlIEludGVybmFsIGZ1bmN0aW9ucyBTVEFUSUMuDQo+IA0KPiBCZXR0ZXIgeWV0LCBwbGVhc2Ug bWFrZSAqYWxsKiBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IEVGSUFQSSwgU1RBVElDLg0KDQpBZ3Jl ZS4NCg0KDQo+ID4gKyAgQVNTRVJUIChTbW1DcHVTeW5jQ3R4ICE9IE5VTEwpOw0KPiANCj4gKDYp IFRoaXMgYXNzZXJ0IGlzIHVubmVjZXNzYXJ5IGFuZCB3cm9uZzsgd2UgcGVyZm9ybSBjb3JyZWN0 IGVycm9yDQo+IGNoZWNraW5nIGFscmVhZHkuDQoNCkFncmVlLCBJIHdpbGwgcmVtb3ZlIHRoZSBj aGVjaywgYnV0IGtlZXAgYXNzZXJ0Lg0KDQo+IA0KPiBTbywgc2V2ZXJhbCBjb21tZW50cyBvbiB0 aGlzIHNlY3Rpb246DQo+IA0KPiAoNykgdGhlIHNlcGFyYXRlIE5VTEwgYXNzaWdubWVudCB0byAo KlNtbUNwdVN5bmNDdHgpIGlzIHN1cGVyZmx1b3VzLCB3ZQ0KPiBvdmVyd3JpdGUgdGhlIG9iamVj dCBpbW1lZGlhdGVseSBhZnRlci4NCj4gDQoNCkFncmVlLg0KDQo+ICg4KSB0aGUgQVNTRVJUKCkg aXMgc3VwZXJmbHVvdXMgYW5kIHdyb25nOyB3ZSBhbHJlYWR5IGNoZWNrIGZvciAtLSBhbmQNCj4g cmVwb3J0IC0tIGFsbG9jYXRpb24gZmFpbHVyZSBjb3JyZWN0bHkuDQoNCkFncmVlLCB3aWxsIHJl bW92ZSB0aGUgYXNzZXJ0IGhlcmUuDQoNCg0KPiANCj4gKDkpICpwYWdlKiBhbGxvY2F0aW9uIGlz IHVzZWxlc3MgLyB3YXN0ZWZ1bCBoZXJlOyB0aGUgbWFpbiBzeW5jIGNvbnRleHQNCj4gc3RydWN0 dXJlIGNhbiBiZSBhbGxvY2F0ZWQgZnJvbSAqcG9vbCoNCj4gDQoNCkFncmVlISBUaGUgc2FtZSBj b21tZW50IGZyb20gUmF5ISBBZ2FpbiwgdGhhbmsgeW91IGFuZCBSYXksIGJvdGghISENCg0KDQoN Cj4gKDEwKSBTYWZlSW50TGliIEFQSXMgcmV0dXJuIFJFVFVSTl9TVEFUVVMgKGFuZCBTdGF0dXMg YWxyZWFkeSBoYXMgdHlwZQ0KPiBSRVRVUk5fU1RBVFVTKSwgc28gd2Ugc2hvdWxkIHVzZSBSRVRV Uk5fRVJST1IoKSByYXRoZXIgdGhhbg0KPiBFRklfRVJST1IoKQ0KPiAtLSBpdCdzIG1vcmUgaWRp b21hdGljDQoNCkFncmVlLg0KDQo+IA0KPiAoMTEpIFJlZmVycmluZyBiYWNrIHRvICg0KSwgU01N X0NQVV9TWU5DX1NFTUFQSE9SRV9HTE9CQUwgc2hvdWxkDQo+IG5vdCBiZQ0KPiBjb3VudGVkIChh ZGRlZCkgc2VwYXJhdGVseSwgYmVjYXVzZSBpdCBpcyBlbWJlZGRlZCBpbg0KPiBTTU1fQ1BVX1NZ TkNfQ09OVEVYVCBkaXJlY3RseS4NCj4gDQo+ID4gKw0KPiA+ICsgICgqU21tQ3B1U3luY0N0eCkt Pkdsb2JhbFNlbSAgICA9DQo+IChTTU1fQ1BVX1NZTkNfU0VNQVBIT1JFX0dMT0JBTCAqKSgoVUlO VDggKikoKlNtbUNwdVN5bmNDdHgpICsNCj4gc2l6ZW9mIChTTU1fQ1BVX1NZTkNfQ09OVEVYVCkp Ow0KPiA+ICsgICgqU21tQ3B1U3luY0N0eCktPkNwdVNlbSAgICAgICA9IChTTU1fQ1BVX1NZTkNf U0VNQVBIT1JFX0NQVQ0KPiAqKSgoVUlOVDggKikoKlNtbUNwdVN5bmNDdHgpICsgc2l6ZW9mIChT TU1fQ1BVX1NZTkNfQ09OVEVYVCkgKw0KPiBzaXplb2YgKFNNTV9DUFVfU1lOQ19TRU1BUEhPUkVf R0xPQkFMKSk7DQo+IA0KPiAoMTIpIEFuZCB0aGVuIHRoZXNlIHR3byBhc3NpZ25tZW50cyBzaG91 bGQgYmUgZHJvcHBlZC4NCj4gDQoNClllcywgYWdyZWUsIHdpdGggbXkgcHJvcG9zZWQgZGVmaW5p dGlvbiwgSSB3aWxsIHJlZmluZSBpdC4NCg0KDQo+ID4gKyAgKCpTbW1DcHVTeW5jQ3R4KS0+TnVt YmVyT2ZDcHVzID0gTnVtYmVyT2ZDcHVzOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIENv dW50IHRoZSBUb3RhbFNlbVNpemUNCj4gPiArICAvLw0KPiA+ICsgIE9uZVNlbVNpemUgPSBHZXRT cGluTG9ja1Byb3BlcnRpZXMgKCk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFNhZmVVaW50bk11 bHQgKE9uZVNlbVNpemUsIHNpemVvZg0KPiAoU01NX0NQVV9TWU5DX1NFTUFQSE9SRV9HTE9CQUwp IC8gc2l6ZW9mIChWT0lEICopLCAmR2xvYmFsU2VtU2l6ZSk7DQo+ID4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ICsgICAgZ290byBPTl9FUlJPUjsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIFN0YXR1cyA9IFNhZmVVaW50bk11bHQgKE9uZVNlbVNpemUsIHNpemVvZg0KPiAoU01N X0NQVV9TWU5DX1NFTUFQSE9SRV9DUFUpIC8gc2l6ZW9mIChWT0lEICopLCAmT25lQ3B1U2VtU2l6 ZSk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgZ290byBPTl9F UlJPUjsNCj4gPiArICB9DQo+IA0KPiAoMTMpIEkgZmluZCB0aGlzIG9ic2N1cmUgYW5kIG1pc2xl YWRpbmcuIEhvdyBhYm91dCB0aGlzIG9uZSBpbnN0ZWFkOg0KPiANCj4gICBVSU5UTiAgQ2FjaGVM aW5lU2l6ZTsNCj4gDQo+ICAgQ2FjaGVMaW5lU2l6ZSA9IEdldFNwaW5Mb2NrUHJvcGVydGllcyAo KTsNCj4gICBPbmVTZW1TaXplICAgID0gQUxJR05fVkFMVUUgKHNpemVvZiAoU01NX0NQVV9TWU5D X1NFTUFQSE9SRSksDQo+IENhY2hlTGluZVNpemUpOw0KPiANCj4gYW5kIHRoZW4gZWxpbWluYXRl IEdsb2JhbFNlbVNpemUgYW5kIE9uZUNwdVNlbVNpemUgYWx0b2dldGhlci4NCj4gDQo+IFRoZSBh Ym92ZSBjb25zdHJ1Y3Qgd2lsbCBlbnN1cmUgdGhhdA0KPiANCj4gKGEpIE9uZVNlbVNpemUgaXMg anVzdCBsYXJnZSBlbm91Z2ggZm9yIHBsYWNpbmcgc2VtYXBob3JlcyBvbiBkaWZmZXJlbnQNCj4g Y2FjaGUgbGluZXMsIGFuZCB0aGF0DQo+IA0KPiAoYikgT25lU2VtU2l6ZSBpcyBzdWl0YWJsZSBm b3IgKmJvdGgqDQo+IFNNTV9DUFVfU1lOQ19TRU1BUEhPUkVfR0xPQkFMIGFuZA0KPiBTTU1fQ1BV X1NZTkNfU0VNQVBIT1JFX0NQVS4gVGhpcyBpcyB3aGVyZSB3ZSByZWx5IG9uIHRoZSBjb21tb24N Cj4gaW50ZXJuYWwNCj4gdHlwZSBTTU1fQ1BVX1NZTkNfU0VNQVBIT1JFLg0KPiANCj4gPiArDQo+ ID4gKyAgU3RhdHVzID0gU2FmZVVpbnRuTXVsdCAoTnVtYmVyT2ZDcHVzLCBPbmVDcHVTZW1TaXpl LCAmQ3B1U2VtU2l6ZSk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsg ICAgZ290byBPTl9FUlJPUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFNhZmVV aW50bkFkZCAoR2xvYmFsU2VtU2l6ZSwgQ3B1U2VtU2l6ZSwgJlRvdGFsU2VtU2l6ZSk7DQo+ID4g KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgZ290byBPTl9FUlJPUjsNCj4g PiArICB9DQo+IA0KDQpBZ3JlZSENCg0KDQo+ICgxNCkgVGhpcyBpcyBwcm9iYWJseSBiZXR0ZXIg d3JpdHRlbiBhcw0KPiANCj4gICBVSU5UTiAgTnVtU2VtOw0KPiANCj4gICBTdGF0dXMgPSBTYWZl VWludG5BZGQgKDEsIE51bWJlck9mQ3B1cywgJk51bVNlbSk7DQo+ICAgaWYgKFJFVFVSTl9FUlJP UiAoU3RhdHVzKSkgew0KPiAgICAgZ290byBPTl9FUlJPUjsNCj4gICB9DQo+IA0KPiAgIFN0YXR1 cyA9IFNhZmVVaW50bk11bHQgKE51bVNlbSwgT25lU2VtU2l6ZSwgJlRvdGFsU2VtU2l6ZSk7DQo+ ICAgaWYgKFJFVFVSTl9FUlJPUiAoU3RhdHVzKSkgew0KPiAgICAgZ290byBPTl9FUlJPUjsNCj4g ICB9DQo+IA0KPiBhbmQgcmVtb3ZlIHRoZSB2YXJpYWJsZSBDcHVTZW1TaXplIGFzIHdlbGwuDQo+ IA0KPiA+ICsNCj4gPiArICBERUJVRyAoKERFQlVHX0lORk8sICJbJWFdIC0gT25lIFNlbWFwaG9y ZSBTaXplICAgID0gMHgleFxuIiwNCj4gX19mdW5jX18sIE9uZVNlbVNpemUpKTsNCj4gPiArICBE RUJVRyAoKERFQlVHX0lORk8sICJbJWFdIC0gVG90YWwgU2VtYXBob3JlcyBTaXplID0gMHgleFxu IiwNCj4gX19mdW5jX18sIFRvdGFsU2VtU2l6ZSkpOw0KPiANCj4gKDE1KSBUaGVzZSBhcmUgdXNl ZnVsLCBidXQgJXggaXMgbm90IHN1aXRhYmxlIGZvciBmb3JtYXR0aW5nIFVJTlROLg0KPiBJbnN0 ZWFkLCB1c2UgJUx4LCBhbmQgY2FzdCB0aGUgdmFsdWVzIHRvIFVJTlQ2NDoNCj4gDQo+ICAgREVC VUcgKChERUJVR19JTkZPLCAiWyVhXSAtIE9uZSBTZW1hcGhvcmUgU2l6ZSAgICA9IDB4JUx4XG4i LCBfX2Z1bmNfXywNCj4gKFVJTlQ2NClPbmVTZW1TaXplKSk7DQo+ICAgREVCVUcgKChERUJVR19J TkZPLCAiWyVhXSAtIFRvdGFsIFNlbWFwaG9yZXMgU2l6ZSA9IDB4JUx4XG4iLCBfX2Z1bmNfXywN Cj4gKFVJTlQ2NClUb3RhbFNlbVNpemUpKTsNCj4gDQoNCkFncmVlIQ0KDQo+ID4gKw0KPiA+ICsg IC8vDQo+ID4gKyAgLy8gQWxsb2NhdGUgZm9yIFNlbWFwaG9yZXMgaW4gdGhlICpTbW1DcHVTeW5j Q3R4DQo+ID4gKyAgLy8NCj4gPiArICAoKlNtbUNwdVN5bmNDdHgpLT5TZW1CdWZmZXJTaXplID0g VG90YWxTZW1TaXplOw0KPiA+ICsgICgqU21tQ3B1U3luY0N0eCktPlNlbUJ1ZmZlciAgICAgPSBB bGxvY2F0ZVBhZ2VzIChFRklfU0laRV9UT19QQUdFUw0KPiAoKCpTbW1DcHVTeW5jQ3R4KS0+U2Vt QnVmZmVyU2l6ZSkpOw0KPiANCj4gKDE2KSBJIHN1Z2dlc3QgcmV3b3JraW5nIHRoaXMgYXMgZm9s bG93cyAod2lsbCBiZSBiZW5lZmljaWFsIGxhdGVyKSwgaW4NCj4gYWNjb3JkYW5jZSB3aXRoICg0 KToNCj4gDQo+ICAgKCpTbW1DcHVTeW5jQ3R4KS0+U2VtQnVmZmVyUGFnZXMgPSBFRklfU0laRV9U T19QQUdFUyAoVG90YWxTZW1TaXplKTsNCj4gICAoKlNtbUNwdVN5bmNDdHgpLT5TZW1CdWZmZXIg ICAgICA9IEFsbG9jYXRlUGFnZXMgKA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKlNtbUNwdVN5bmNDdHgpLT5TZW1CdWZmZXJQYWdlcw0KPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiANCj4gPiArICBBU1NFUlQgKCgqU21tQ3B1 U3luY0N0eCktPlNlbUJ1ZmZlciAhPSBOVUxMKTsNCj4gDQo+ICgxNykgQm9ndXMgYXNzZXJ0OyBz YW1lIHJlYXNvbiBhcyBpbiBwb2ludCAoOCkuDQoNCg0KQWdyZWUhDQoNCj4gDQo+ID4gKyAgaWYg KCgqU21tQ3B1U3luY0N0eCktPlNlbUJ1ZmZlciA9PSBOVUxMKSB7DQo+ID4gKyAgICBTdGF0dXMg PSBSRVRVUk5fT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICAgIGdvdG8gT05fRVJST1I7DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICBaZXJvTWVtICgoKlNtbUNwdVN5bmNDdHgpLT5TZW1CdWZmZXIs IFRvdGFsU2VtU2l6ZSk7DQo+IA0KPiAoMTgpIEZpcnN0IGFwcHJvYWNoOiBzaW1wbGlmeSB0aGUg Y29kZSBieSBjYWxsaW5nIEFsbG9jYXRlWmVyb1BhZ2VzKCkNCj4gaW5zdGVhZC4gKEl0IG1heSB6 ZXJvIG1vcmUgYnl0ZXMgdGhhbiBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpdCdzIG5vdCBhDQo+ IGJpZyBkZWFsLCBhbmQgdGhlIGNvZGUgc2ltcGxpZmljYXRpb24gaXMgd29ydGggaXQuKQ0KPiAN Cj4gKDE5KSBTZWNvbmQgYXBwcm9hY2g6IGV2ZW4gYmV0dGVyLCBqdXN0IGRyb3AgdGhpcyBjYWxs LiBUaGVyZSBpcyBubyBuZWVkDQo+IGZvciB6ZXJvaW5nIHRoZSBzZW1hcGhvcmUgYnVmZmVyIGF0 IGFsbCwgYXMgd2UgYXJlIGdvaW5nIHRvIG1hbnVhbGx5IHNldA0KPiBib3RoIHRoZSBDb3VudGVy IGFuZCB0aGUgaW5kaXZpZHVhbCBSdW4gZWxlbWVudHMsIGJlbG93IQ0KPiANCj4gKDIwKSBXaXRo IFplcm9NZW0oKSBnb25lLCBldmFsdWF0ZSBpZiB3ZSBzdGlsbCBkZXBlbmQgb24gdGhlDQo+IEJh c2VNZW1vcnlMaWIgY2xhc3MgKCNpbmNsdWRlIGFuZCBbTGlicmFyeUNsYXNzZXNdKS4NCg0KQWdy ZWUsIEkgd2lsbCBkcm9wIHRoZSB6ZXJvbWVtIQ0KDQoNCj4gDQo+ID4gKw0KPiA+ICsgIC8vDQo+ ID4gKyAgLy8gQXNzaWduIEdsb2JhbCBTZW1hcGhvcmUgcG9pbnRlcg0KPiA+ICsgIC8vDQo+ID4g KyAgU2VtQWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IChVSU5UTikoKlNtbUNw dVN5bmNDdHgpLT5TZW1CdWZmZXI7DQo+ID4gKyAgKCpTbW1DcHVTeW5jQ3R4KS0+R2xvYmFsU2Vt LT5Db3VudGVyICA9IChVSU5UMzIgKilTZW1BZGRyOw0KPiANCj4gKDIxKSBTaWRlIGNvbW1lbnQg KHRoZSBjb21waWxlciB3aWxsIGNhdGNoIGl0IGZvciB5b3UgYW55d2F5KTogaXQncyBub3QNCj4g Ikdsb2JhbFNlbS0+Q291bnRlciIgYnV0ICJHbG9iYWxTZW0uQ291bnRlciIsIGFmdGVyIHBvaW50 ICg0KS4NCj4gDQoNCkkgd2lsbCByZW5hbWUgdGhlIENvdW50ZXIgLS0+IENwdUNvdW50LCBhbmQg bW92ZSB0byBTbW1DcHVTeW5jQ3R4IGRpcmVjdGx5IGJhc2VkIG9uIHRoZSBjb21tZW50IGZyb20g UmF5Lg0KDQoNCj4gKDIyKSBUaGUgZXhwbGljaXQgKFVJTlQzMiAqKSBjYXN0IGlzIHVnbHkuIFdl IHNob3VsZCBjYXN0IHRvDQo+IChTTU1fQ1BVX1NZTkNfU0VNQVBIT1JFICopLg0KPiANCg0KQWdy ZWUhDQoNCj4gPiArICAqKCpTbW1DcHVTeW5jQ3R4KS0+R2xvYmFsU2VtLT5Db3VudGVyID0gMDsN Cj4gPiArICBERUJVRyAoKERFQlVHX0lORk8sICJbJWFdIC0gKCpTbW1DcHVTeW5jQ3R4KS0+R2xv YmFsU2VtLT5Db3VudGVyDQo+IEFkZHJlc3M6IDB4JTA4eFxuIiwgX19mdW5jX18sIChVSU5UTiko KlNtbUNwdVN5bmNDdHgpLT5HbG9iYWxTZW0tDQo+ID5Db3VudGVyKSk7DQo+IA0KPiAoMjMpIHBy b2JsZW1zIHdpdGggdGhpcyBERUJVRyBsaW5lOg0KPiANCj4gKDIzLjEpIG5lZWRsZXNzbHkgdmVy Ym9zZSwNCj4gDQo+ICgyMy4yKSBwcmludHMgVUlOVE4gd2l0aCAleCwNCj4gDQo+ICgyMy4zKSBw YWRzIHRvIDggbmliYmxlcyBldmVuIHRob3VnaCBVSU5UTiBjYW4gYmUgNjQtYml0DQo+IA0KPiBI b3cgYWJvdXQ6DQo+IA0KPiAgIERFQlVHICgoDQo+ICAgICBERUJVR19JTkZPLA0KPiAgICAgIlsl YV0gLSBHbG9iYWxTZW0uQ291bnRlciBAIDB4JTAxNkx4XG4iLA0KPiAgICAgX19mdW5jX18sDQo+ ICAgICAoVUlOVDY0KVNlbUFkZHINCj4gICAgICkpOw0KPiANCj4gPiArDQo+ID4gKyAgU2VtQWRk ciArPSBHbG9iYWxTZW1TaXplOw0KPiANCj4gKDI0KSBTaG91bGQgYmUgIis9IE9uZVNlbVNpemUi Lg0KDQpBZ3JlZSwgZXZlbiBtb3ZlIHRoZSBDb3VudGVyIGluIGNvbnRleHQsIGl0IHNob3VsZCBi ZSBvayB3aXRoICIrPSBPbmVTZW1TaXplIi4NCg0KPiANCj4gPiArDQo+ID4gKyAgLy8NCj4gPiAr ICAvLyBBc3NpZ24gQ1BVIFNlbWFwaG9yZSBwb2ludGVyDQo+ID4gKyAgLy8NCj4gPiArICBmb3Ig KENwdUluZGV4ID0gMDsgQ3B1SW5kZXggPCBOdW1iZXJPZkNwdXM7IENwdUluZGV4KyspIHsNCj4g PiArICAgICgqU21tQ3B1U3luY0N0eCktPkNwdVNlbVtDcHVJbmRleF0uUnVuICA9IChVSU5UMzIg KikoU2VtQWRkciArDQo+IChDcHVTZW1TaXplIC8gTnVtYmVyT2ZDcHVzKSAqIENwdUluZGV4KTsN Cj4gPiArICAgICooKlNtbUNwdVN5bmNDdHgpLT5DcHVTZW1bQ3B1SW5kZXhdLlJ1biA9IDA7DQo+ ID4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJbJWFdIC0gKCpTbW1DcHVTeW5jQ3R4KS0+Q3B1 U2VtWyVkXS5SdW4NCj4gQWRkcmVzczogMHglMDh4XG4iLCBfX2Z1bmNfXywgQ3B1SW5kZXgsIChV SU5UTikoKlNtbUNwdVN5bmNDdHgpLQ0KPiA+Q3B1U2VtW0NwdUluZGV4XS5SdW4pKTsNCj4gPiAr ICB9DQo+IA0KPiAoMjUpIEV4dHJlbWVseSBvdmVyLWNvbXBsaWNhdGVkLg0KPiANCg0KWWVzLCBh Z3JlZSwgbm93IEkgaGF2ZSByZWFsaXplZCB0aGF0LiBUaGFuayB5b3UgYWdhaW4hDQoNCg0KPiAo MjUuMSkgVGhlIHF1b3RpZW50IChDcHVTZW1TaXplIC8gTnVtYmVyT2ZDcHVzKSBpcyBqdXN0IE9u ZUNwdVNlbVNpemUsDQo+IGZyb20gdGhlIHByZXZpb3VzIFNhZmVVaW50bk11bHQoKSBjYWxsLg0K PiANCg0KWWVzLg0KDQo+ICgyNS4yKSBVc2luZyBTZW1BZGRyIGFzIGEgYmFzZSBhZGRyZXNzLCBh bmQgdGhlbiBwZXJmb3JtaW5nIGEgc2VwYXJhdGUNCj4gbXVsdGlwbGljYXRpb24sIGlzIHdhc3Rl ZnVsIC0tIG5vdCBqdXN0IGNvbXB1dGF0aW9uYWxseSwgYnV0DQo+IHNlbWFudGljYWxseS4gV2Ug Y2FuIHNpbXBseSBhZHZhbmNlIFNlbUFkZHIgaGVyZSENCj4gDQoNCkFncmVlLg0KDQo+ICgyNS4z KSB0aGUgZXhwcmVzc2lvbg0KPiANCj4gICAoKlNtbUNwdVN5bmNDdHgpLT5DcHVTZW1bQ3B1SW5k ZXhdLlJ1bg0KPiANCj4gaXMgdGlyZXNvbWUgdG8gcmVhZCwgYW5kIHNvIHdlIHNob3VsZG4ndCBy ZXBhdCBpdCBtdWx0aXBsZSB0aW1lcyENCg0KQWdyZWUNCg0KPiANCj4gKDI1LjQpIHRoZSB1c3Vh bCBwcm9ibGVtcyB3aXRoIHRoZSBERUJVRyBsaW5lOg0KPiANCj4gKDI1LjQuMSkgbmVlZGxlc3Ns eSB2ZXJib3NlDQo+IA0KPiAoMjUuNC4yKSB1c2VzICVkIGZvciBmb3JtYXR0aW5nIENwdUluZGV4 ICh3aGljaCBpcyBVSU5UTikNCj4gDQo+ICgyNS40LjMpIHVzZXMgJXggZm9yIGZvcm1hdHRpbmcg KFVJTlROKVJ1bg0KPiANCj4gKDI1LjQuNCkgcGFkZHMgdG8gOCBuaWJibGVzIGV2ZW4gdGhvdWdo IHRoZSBSdW4gYWRkcmVzcyBjYW4gYmUgNjQtYml0DQo+IA0KPiBTbzoNCj4gDQo+ICAgU01NX0NQ VV9TWU5DX1NFTUFQSE9SRV9DUFUgKkNwdVNlbTsNCj4gDQo+ICAgQ3B1U2VtID0gKCpTbW1DcHVT eW5jQ3R4KS0+Q3B1U2VtOw0KPiAgIGZvciAoQ3B1SW5kZXggPSAwOyBDcHVJbmRleCA8IE51bWJl ck9mQ3B1czsgQ3B1SW5kZXgrKykgew0KPiAgICAgQ3B1U2VtLT5SdW4gID0gKFNNTV9DUFVfU1lO Q19TRU1BUEhPUkUgKilTZW1BZGRyOw0KPiAgICAgKkNwdVNlbS0+UnVuID0gMDsNCj4gDQo+ICAg ICBERUJVRyAoKA0KPiAgICAgICBERUJVR19JTkZPLA0KPiAgICAgICAiWyVhXSAtIENwdVNlbVsl THVdLlJ1biBAIDB4JTAxNkx4XG4iLA0KPiAgICAgICBfX2Z1bmNfXywNCj4gICAgICAgKFVJTlQ2 NClDcHVJbmRleCwNCj4gICAgICAgKFVJTlQ2NClTZW1BZGRyDQo+ICAgICAgICkpOw0KPiANCj4g ICAgIENwdVNlbSsrOw0KPiAgICAgU2VtQWRkciArPSBPbmVTZW1TaXplOw0KPiAgIH0NCj4gDQoN ClJlYWxseSBnb29kLCB0aGFua3MgY29tbWVudHMuIFRvdGFsbHkgYWdyZWUhDQoNCg0KPiA+ICsN Cj4gPiArICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQo+ID4gKw0KPiA+ICtPTl9FUlJPUjoNCj4g PiArICBGcmVlUGFnZXMgKCpTbW1DcHVTeW5jQ3R4LCBFRklfU0laRV9UT19QQUdFUyAoQ3R4U2l6 ZSkpOw0KPiANCj4gKDI2KSBBbmQgdGhlbiB0aGlzIGNhbiBiZQ0KPiANCj4gICBGcmVlUG9vbCAo KlNtbUNwdVN5bmNDdHgpOw0KPiANCg0KWWVzLCBhZ3JlZS4NCg0KPiBwZXIgY29tbWVudCAoOSku DQo+IA0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIERlaW5pdCBhbiBhbGxvY2F0ZWQgU01NIENQVSBTeW5jIGNvbnRleHQuDQo+ID4gKw0KPiA+ ICsgIFNtbUNwdVN5bmNDb250ZXh0RGVpbml0KCkgZnVuY3Rpb24gaXMgdG8gZGVpbml0aWFsaXpl IFNNTSBDUFUgU3luYw0KPiBjb250ZXh0LCB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBpbg0KPiA+ ICsgIFNtbUNwdVN5bmNDb250ZXh0SW5pdCgpIHdpbGwgYmUgZnJlZWQuDQo+ID4gKw0KPiA+ICsg IE5vdGU6IFRoaXMgZnVuY3Rpb24gb25seSBjYW4gYmUgY2FsbGVkIGFmdGVyIFNtbUNwdVN5bmND b250ZXh0SW5pdCgpDQo+IHJldHVybiBzdWNjZXNzLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW4s b3V0XSAgU21tQ3B1U3luY0N0eCAgICAgUG9pbnRlciB0byB0aGUgU01NIENQVSBTeW5jDQo+IGNv bnRleHQgb2JqZWN0IHRvIGJlIGRlaW5pdGlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwg UkVUVVJOX1NVQ0NFU1MgICAgICAgICAgICBUaGUgU01NIENQVSBTeW5jIGNvbnRleHQgd2FzDQo+ IHN1Y2Nlc3NmdWwgZGVpbml0aWFsaXplZC4NCj4gPiArICBAcmV0dmFsIFJFVFVSTl9JTlZBTElE X1BBUkFNRVRFUiAgU21tQ3B1U3luY0N0eCBpcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgUkVUVVJO X1VOU1VQUE9SVEVEICAgICAgICBVbnN1cHBvcnRlZCBvcGVyYXRpb24uDQo+ID4gKw0KPiA+ICsq Ki8NCj4gPiArUkVUVVJOX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU21tQ3B1U3luY0NvbnRl eHREZWluaXQgKA0KPiA+ICsgIElOIE9VVCBTTU1fQ1BVX1NZTkNfQ09OVEVYVCAgKlNtbUNwdVN5 bmNDdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UTiAgU21tQ3B1U3luY0N0eFNpemU7 DQo+ID4gKw0KPiA+ICsgIEFTU0VSVCAoU21tQ3B1U3luY0N0eCAhPSBOVUxMKTsNCj4gDQo+ICgy NykgYm9ndXMgQVNTRVJUDQo+IA0KDQpBY2NvcmRpbmcgb3VyIG9yaWdpbmFsIGRlZmluZSwgSSB3 aWxsIHJlZmluZSB0aGUgaW50ZXJmYWNlLg0KDQo+ID4gKyAgaWYgKFNtbUNwdVN5bmNDdHggPT0g TlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIFNtbUNwdVN5bmNDdHhTaXplID0gc2l6ZW9mIChTTU1fQ1BVX1NZ TkNfQ09OVEVYVCkgKyBzaXplb2YNCj4gKFNNTV9DUFVfU1lOQ19TRU1BUEhPUkVfR0xPQkFMKSAr IHNpemVvZg0KPiAoU01NX0NQVV9TWU5DX1NFTUFQSE9SRV9DUFUpICogKFNtbUNwdVN5bmNDdHgt Pk51bWJlck9mQ3B1cyk7DQo+ID4gKw0KPiA+ICsgIEZyZWVQYWdlcyAoU21tQ3B1U3luY0N0eC0+ U2VtQnVmZmVyLCBFRklfU0laRV9UT19QQUdFUw0KPiAoU21tQ3B1U3luY0N0eC0+U2VtQnVmZmVy U2l6ZSkpOw0KPiANCj4gKDI4KSBQZXIgY29tbWVudCAoMTYpLCB0aGlzIGNhbiBiZSBzaW1wbGlm aWVkIGFzOg0KPiANCj4gICBGcmVlUGFnZXMgKFNtbUNwdVN5bmNDdHgtPlNlbUJ1ZmZlciwgU21t Q3B1U3luY0N0eC0NCj4gPlNlbUJ1ZmZlclBhZ2VzKTsNCj4gDQo+ID4gKw0KPiA+ICsgIEZyZWVQ YWdlcyAoU21tQ3B1U3luY0N0eCwgRUZJX1NJWkVfVE9fUEFHRVMgKFNtbUNwdVN5bmNDdHhTaXpl KSk7DQo+IA0KPiAoMjkpIFBlciBjb21tZW50cyAoOSkgYW5kICgyNiksIHRoaXMgc2hvdWxkIGJl IGp1c3QNCj4gDQo+ICAgRnJlZVBvb2wgKFNtbUNwdVN5bmNDdHgpOw0KPiANCj4gKGFuZCB0aGUg dmFyaWFibGUgIlNtbUNwdVN5bmNDdHhTaXplIiBzaG91bGQgYmUgcmVtb3ZlZCkuDQo+IA0KDQpZ ZXMsIGFncmVlIQ0KDQoNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXNldCBTTU0gQ1BVIFN5bmMgY29udGV4dC4N Cj4gPiArDQo+ID4gKyAgU21tQ3B1U3luY0NvbnRleHRSZXNldCgpIGZ1bmN0aW9uIGlzIHRvIHJl c2V0IFNNTSBDUFUgU3luYyBjb250ZXh0DQo+IHRvIHRoZSBpbml0aWFsaXplZCBzdGF0ZS4NCj4g PiArDQo+ID4gKyAgQHBhcmFtW2luLG91dF0gIFNtbUNwdVN5bmNDdHggICAgIFBvaW50ZXIgdG8g dGhlIFNNTSBDUFUgU3luYw0KPiBjb250ZXh0IG9iamVjdCB0byBiZSByZXNldC4NCj4gPiArDQo+ ID4gKyAgQHJldHZhbCBSRVRVUk5fU1VDQ0VTUyAgICAgICAgICAgIFRoZSBTTU0gQ1BVIFN5bmMg Y29udGV4dCB3YXMNCj4gc3VjY2Vzc2Z1bCByZXNldC4NCj4gPiArICBAcmV0dmFsIFJFVFVSTl9J TlZBTElEX1BBUkFNRVRFUiAgU21tQ3B1U3luY0N0eCBpcyBOVUxMLg0KPiA+ICsNCj4gPiArKiov DQo+ID4gK1JFVFVSTl9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1NtbUNwdVN5bmNDb250ZXh0 UmVzZXQgKA0KPiA+ICsgIElOIE9VVCBTTU1fQ1BVX1NZTkNfQ09OVEVYVCAgKlNtbUNwdVN5bmND dHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKFNtbUNwdVN5bmNDdHggIT0gTlVM TCk7DQo+IA0KPiAoMzApIGJvZ3VzIGFzc2VydA0KPiANCg0KV2lsbCByZWZpbmUgdGhlIGltcGxl bWVudGF0aW9uIGJhc2VkIG9uIHRoZSBsYXRlc3QgaW50ZXJmYWNlLg0KDQo+ID4gKyAgaWYgKFNt bUNwdVN5bmNDdHggPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIFJFVFVSTl9JTlZBTElEX1BB UkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgICpTbW1DcHVTeW5jQ3R4LT5HbG9iYWxT ZW0tPkNvdW50ZXIgPSAwOw0KPiA+ICsNCj4gPiArICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQo+ ID4gK30NCj4gDQo+ICgzMSkgSXMgdGhlcmUgYW55dGhpbmcgdG8gZG8gYWJvdXQgdGhlIFJ1biBz ZW1hcGhvcmVzIGhlcmU/DQo+IA0KDQpObywgUnVuIHNlbWFwaG9yZXMgd2lsbCBuYXR1cmFsbHkg cmVzZXQgaWYgYWxsIGNwdXMgcmVhZHkgdG8gZXhpdCBpZiB0aGUgY2FsbGVyIGZvbGxvdyB0aGUg QVBJIHJlcXVpcmVtZW50IGNhbGxpbmcuDQoNCg0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2V0 IGN1cnJlbnQgbnVtYmVyIG9mIGFycml2ZWQgQ1BVIGluIFNNSS4NCj4gPiArDQo+ID4gKyAgRm9y IHRyYWRpdGlvbmFsIENQVSBzeW5jaHJvbml6YXRpb24gbWV0aG9kLCBCU1AgbWlnaHQgbmVlZCB0 byBrbm93IHRoZQ0KPiBjdXJyZW50IG51bWJlciBvZiBhcnJpdmVkIENQVSBpbg0KPiA+ICsgIFNN SSB0byBtYWtlIHN1cmUgYWxsIEFQcyBpbiBTTUkuIFRoaXMgQVBJIGNhbiBiZSBmb3IgdGhhdCBw dXJwb3NlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgICAgU21tQ3B1U3luY0N0eCAgICAg UG9pbnRlciB0byB0aGUgU01NIENQVSBTeW5jIGNvbnRleHQNCj4gb2JqZWN0Lg0KPiA+ICsgIEBw YXJhbVtpbixvdXRdICBDcHVDb3VudCAgICAgICAgICBDdXJyZW50IGNvdW50IG9mIGFycml2ZWQg Q1BVIGluIFNNSS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBSRVRVUk5fU1VDQ0VTUyAgICAgICAg ICAgIEdldCBjdXJyZW50IG51bWJlciBvZiBhcnJpdmVkIENQVSBpbiBTTUkNCj4gc3VjY2Vzc2Z1 bGx5Lg0KPiA+ICsgIEByZXR2YWwgUkVUVVJOX0lOVkFMSURfUEFSQU1FVEVSICBTbW1DcHVTeW5j Q3R4IG9yIENwdUNvdW50IGlzDQo+IE5VTEwuDQo+ID4gKyAgQHJldHZhbCBSRVRVUk5fVU5TVVBQ T1JURUQgICAgICAgIFVuc3VwcG9ydGVkIG9wZXJhdGlvbi4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICtSRVRVUk5fU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtTbW1DcHVTeW5jR2V0QXJyaXZlZENw dUNvdW50ICgNCj4gPiArICBJTiAgICAgU01NX0NQVV9TWU5DX0NPTlRFWFQgICpTbW1DcHVTeW5j Q3R4LA0KPiA+ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgKkNwdUNvdW50DQo+ID4g KyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJUIChTbW1DcHVTeW5jQ3R4ICE9IE5VTEwgJiYgQ3B1 Q291bnQgIT0gTlVMTCk7DQo+IA0KPiAoMzIpIGJvZ3VzIGFzc2VydA0KPiANCj4gPiArICBpZiAo KFNtbUNwdVN5bmNDdHggPT0gTlVMTCkgfHwgKENwdUNvdW50ID09IE5VTEwpKSB7DQo+ID4gKyAg ICByZXR1cm4gUkVUVVJOX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgaWYgKCpTbW1DcHVTeW5jQ3R4LT5HbG9iYWxTZW0tPkNvdW50ZXIgPCAwKSB7DQo+IA0KPiAo MzMpIFRoZSB0eXBlIG9mIENvdW50ZXIgaXMNCj4gDQo+ICAgdm9sYXRpbGUgVUlOVDMyDQo+IA0K PiB0aGVyZWZvcmUgdGhpcyBjb25kaXRpb24gd2lsbCBuZXZlciBldmFsdWF0ZSB0byB0cnVlLg0K PiANCj4gSWYgeW91IHdhbnQgdG8gY2hlY2sgZm9yIHRoZSBkb29yIGJlaW5nIGxvY2tlZCwgdGhl biBJIHN1Z2dlc3QNCj4gDQo+ICAgKlNtbUNwdVN5bmNDdHgtPkdsb2JhbFNlbS5Db3VudGVyID09 IChVSU5UMzIpLTENCj4gDQo+IG9yDQo+IA0KPiAgICpTbW1DcHVTeW5jQ3R4LT5HbG9iYWxTZW0u Q291bnRlciA9PSBNQVhfVUlOVDMyDQo+IA0KDQpZZXMsIEkgZG8gbmVlZCBjaGVjayB0aGUgbG9j a2VkIG9yIG5vdCwgSSB3aWxsIGZpeCB0aGlzISEhDQoNCg0KRm9yIHRoaXMgQVBJLCBJIHdpbGwg cmV3cml0ZSB0aGUgaW1wbGVtZW50YXRpb24gYWNjb3JkaW5nIHRoZSBpbnRlcmZhY2Ugd2UgYWxp Z25lZC4NCg0KDQoNCj4gPiArICAgIHJldHVybiBSRVRVUk5fVU5TVVBQT1JURUQ7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICAqQ3B1Q291bnQgPSAqU21tQ3B1U3luY0N0eC0+R2xvYmFsU2VtLT5D b3VudGVyOw0KPiA+ICsNCj4gPiArICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFBlcmZvcm1zIGFuIGF0b21pYyBvcGVyYXRpb24gdG8gY2hl Y2sgaW4gQ1BVLg0KPiA+ICsNCj4gPiArICBXaGVuIFNNSSBoYXBwZW5zLCBhbGwgcHJvY2Vzc29y cyBpbmNsdWRpbmcgQlNQIGVudGVyIHRvIFNNTSBtb2RlIGJ5DQo+IGNhbGxpbmcgU21tQ3B1U3lu Y0NoZWNrSW5DcHUoKS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luLG91dF0gIFNtbUNwdVN5bmND dHggICAgIFBvaW50ZXIgdG8gdGhlIFNNTSBDUFUgU3luYw0KPiBjb250ZXh0IG9iamVjdC4NCj4g PiArICBAcGFyYW1baW5dICAgICAgQ3B1SW5kZXggICAgICAgICAgQ2hlY2sgaW4gQ1BVIGluZGV4 Lg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFJFVFVSTl9TVUNDRVNTICAgICAgICAgICAgQ2hlY2sg aW4gQ1BVIChDcHVJbmRleCkgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgUkVUVVJOX0lO VkFMSURfUEFSQU1FVEVSICBTbW1DcHVTeW5jQ3R4IGlzIE5VTEwuDQo+ID4gKyAgQHJldHZhbCBS RVRVUk5fQUJPUlRFRCAgICAgICAgICAgIENoZWNrIGluIENQVSBmYWlsZWQgZHVlIHRvDQo+IFNt bUNwdVN5bmNMb2NrRG9vcigpIGhhcyBiZWVuIGNhbGxlZCBieSBvbmUgZWxlY3RlZCBDUFUuDQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArUkVUVVJOX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU21t Q3B1U3luY0NoZWNrSW5DcHUgKA0KPiA+ICsgIElOIE9VVCBTTU1fQ1BVX1NZTkNfQ09OVEVYVCAg KlNtbUNwdVN5bmNDdHgsDQo+ID4gKyAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICBDcHVJ bmRleA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoU21tQ3B1U3luY0N0eCAhPSBO VUxMKTsNCj4gDQo+ICgzNCkgYm9ndXMgQVNTRVJUDQo+IA0KPiA+ICsgIGlmIChTbW1DcHVTeW5j Q3R4ID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBSRVRVUk5fSU5WQUxJRF9QQVJBTUVURVI7 DQo+ID4gKyAgfQ0KDQpBZ3JlZSwgSSB3aWxsIHJlZmluZSENCg0KPiA+ICsNCj4gPiArICAvLw0K PiA+ICsgIC8vIENoZWNrIHRvIHJldHVybiBpZiBDb3VudGVyIGhhcyBhbHJlYWR5IGJlZW4gbG9j a2VkLg0KPiA+ICsgIC8vDQo+ID4gKyAgaWYgKChJTlQzMilJbnRlcm5hbFJlbGVhc2VTZW1hcGhv cmUgKFNtbUNwdVN5bmNDdHgtPkdsb2JhbFNlbS0NCj4gPkNvdW50ZXIpIDw9IDApIHsNCj4gDQo+ ICgzNSkgVGhlIGNhc3QgYW5kIHRoZSBjb21wYXJpc29uIGFyZSBib2d1cy4NCj4gDQo+IEludGVy bmFsUmVsZWFzZVNlbWFwaG9yZSgpOg0KPiANCj4gLSByZXR1cm5zIDAsIGFuZCBsZWF2ZXMgdGhl IHNlbWFwaG9yZSB1bmNoYW5nZWQsIGlmIHRoZSBjdXJyZW50IHZhbHVlIG9mDQo+IHRoZSBzZW1h cGhvcmUgaXMgTUFYX1VJTlQzMiwNCj4gDQo+IC0gaW5jcmVtZW50cyB0aGUgc2VtYXBob3JlLCBh bmQgcmV0dXJucyB0aGUgaW5jcmVtZW50ZWQgLS0gaGVuY2U6DQo+IHN0cmljdGx5IHBvc2l0aXZl IC0tIFVJTlQzMiB2YWx1ZSwgb3RoZXJ3aXNlLg0KPiANCj4gU28gdGhlIGNvbmRpdGlvbiBmb3IN Cj4gDQo+ICAgc2VtYXBob3JlIHVuY2hhbmdlZCBiZWNhdXNlIGRvb3IgaGFzIGJlZW4gbG9ja2Vk DQo+IA0KPiBpczoNCj4gDQo+ICAgSW50ZXJuYWxSZWxlYXNlU2VtYXBob3JlIChTbW1DcHVTeW5j Q3R4LT5HbG9iYWxTZW0tPkNvdW50ZXIpID09IDANCj4gDQo+IE5vIElOVDMyIGNhc3QsIGFuZCBu byAiPCIuDQo+IA0KDQpBZ3JlZSEgSSB3aWxsIGRvIHRoZSBmaXguIA0KDQoNCj4gDQo+ID4gKyAg ICByZXR1cm4gUkVUVVJOX0FCT1JURUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4g UkVUVVJOX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFBlcmZvcm1z IGFuIGF0b21pYyBvcGVyYXRpb24gdG8gY2hlY2sgb3V0IENQVS4NCj4gPiArDQo+ID4gKyAgQ2hl Y2tPdXRDcHUoKSBjYW4gYmUgY2FsbGVkIGluIGVycm9yIGhhbmRsaW5nIGZsb3cgZm9yIHRoZSBD UFUgd2hvIGNhbGxzDQo+IENoZWNrSW5DcHUoKSBlYXJsaWVyLg0KPiA+ICsNCj4gPiArICBAcGFy YW1baW4sb3V0XSAgU21tQ3B1U3luY0N0eCAgICAgUG9pbnRlciB0byB0aGUgU01NIENQVSBTeW5j DQo+IGNvbnRleHQgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICBDcHVJbmRleCAgICAg ICAgICBDaGVjayBvdXQgQ1BVIGluZGV4Lg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFJFVFVSTl9T VUNDRVNTICAgICAgICAgICAgQ2hlY2sgb3V0IENQVSAoQ3B1SW5kZXgpIHN1Y2Nlc3NmdWxseS4N Cj4gPiArICBAcmV0dmFsIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUiAgU21tQ3B1U3luY0N0eCBp cyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgUkVUVVJOX05PVF9SRUFEWSAgICAgICAgICBUaGUgQ1BV IGlzIG5vdCBjaGVja2VkLWluLg0KPiA+ICsgIEByZXR2YWwgUkVUVVJOX1VOU1VQUE9SVEVEICAg ICAgICBVbnN1cHBvcnRlZCBvcGVyYXRpb24uDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArUkVUVVJO X1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU21tQ3B1U3luY0NoZWNrT3V0Q3B1ICgNCj4gPiAr ICBJTiBPVVQgU01NX0NQVV9TWU5DX0NPTlRFWFQgICpTbW1DcHVTeW5jQ3R4LA0KPiA+ICsgIElO ICAgICBVSU5UTiAgICAgICAgICAgICAgICAgQ3B1SW5kZXgNCj4gPiArICApDQo+ID4gK3sNCj4g PiArICBBU1NFUlQgKFNtbUNwdVN5bmNDdHggIT0gTlVMTCk7DQo+IA0KPiAoMzYpIGJvZ3VzIGFz c2VydA0KPiANCj4gDQo+ID4gKyAgaWYgKFNtbUNwdVN5bmNDdHggPT0gTlVMTCkgew0KPiA+ICsg ICAgcmV0dXJuIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0KDQpU aGUgc2FtZSwgSSB3aWxsIHJlZmluZSBpdC4NCg0KDQoNCg0KDQo+ID4gKyAgaWYgKCpTbW1DcHVT eW5jQ3R4LT5HbG9iYWxTZW0tPkNvdW50ZXIgPT0gMCkgew0KPiA+ICsgICAgcmV0dXJuIFJFVFVS Tl9OT1RfUkVBRFk7DQo+ID4gKyAgfQ0KPiANCj4gKDM3KSBUaGlzIHByZWxpbWluYXJ5IGNoZWNr IGlzIG5vdCBwYXJ0aWN1bGFybHkgdXNlZnVsLg0KPiANCj4gQXNzdW1lIHRoYXQgQ291bnRlciBp cyBjdXJyZW50bHkgMSwgYnV0IC0tIGR1ZSB0byBhIHByb2dyYW1taW5nIGVycm9yDQo+IHNvbWV3 aGVyZSAtLSB0aGVyZSBhcmUgdHdvIEFQcyBleGVjdXRpbmcgU21tQ3B1U3luY0NoZWNrT3V0Q3B1 KCkgaW4NCj4gcGFyYWxsZWwuIEJvdGggbWF5IHBhc3MgdGhpcyBjaGVjayAoZHVlIHRvIENvdW50 ZXIgYmVpbmcgMSksIGFuZCB0aGVuDQo+IG9uZSBvZiB0aGUgQVBzIHdpbGwgY29uc3VtZSB0aGUg c2VtYXBob3JlIGFuZCByZXR1cm4sIGFuZCB0aGUgb3RoZXIgQVANCj4gd2lsbCBoYW5nIGZvcmV2 ZXIuDQo+IA0KPiBTbyB0aGlzIGNoZWNrIGlzICJiZXN0IGVmZm9ydCIuIEl0J3MgZmluZSAtLSBz b21lIHByb2dyYW1taW5nIGVycm9ycw0KPiBqdXN0IGluZXZpdGFibHkgbGVhZCB0byB1bmRlZmlu ZWQgYmVoYXZpb3I7IG5vdCBhbGwgYmFkIHVzYWdlIGNhbiBiZQ0KPiBleHBsaWNpdGx5IGNhdWdo dC4NCj4gDQo+IE1heWJlIGFkZCBhIGNvbW1lbnQ/DQo+IA0KDQoNClllcywgSSB3aWxsIHJlbW92 ZSB0aGUgUkVUVVJOX05PVF9SRUFEWSwgYW5kIGFkZCB0aGUgY29tbWVudCBmb3IgdGhlIEFQSToN Cg0KIlRoZSBjYWxsZXIgc2hhbGwgbWFrZSBzdXJlIHRoZSBDUFUgc3BlY2lmaWVkIGJ5IENwdUlu ZGV4IGhhcyBhbHJlYWR5IGNoZWNrZWQtaW4uIg0KDQoNCg0KPiA+ICsgIGlmICgoSU5UMzIpSW50 ZXJuYWxXYWl0Rm9yU2VtYXBob3JlIChTbW1DcHVTeW5jQ3R4LT5HbG9iYWxTZW0tDQo+ID5Db3Vu dGVyKSA8IDApIHsNCj4gPiArICAgIHJldHVybiBSRVRVUk5fVU5TVVBQT1JURUQ7DQo+ID4gKyAg fQ0KPiANCj4gKDM4KSBUaGlzIGRvZXNuJ3QgbG9vayByaWdodC4gSW50ZXJuYWxXYWl0Rm9yU2Vt YXBob3JlKCkgYmxvY2tzIGZvciBhcw0KPiBsb25nIGFzIHRoZSBzZW1hcGhvcmUgaXMgemVyby4g V2hlbiB0aGUgc2VtYXBob3JlIGlzIG5vbnplcm8sDQo+IEludGVybmFsV2FpdEZvclNlbWFwaG9y ZSgpIGRlY3JlbWVudHMgaXQsIGFuZCByZXR1cm5zIHRoZSBkZWNyZW1lbnRlZA0KPiB2YWx1ZS4g VGh1cywgSW50ZXJuYWxXYWl0Rm9yU2VtYXBob3JlKCkgY2Fubm90IHJldHVybiBuZWdhdGl2ZSB2 YWx1ZXMNCj4gKGl0IHJldHVybnMgVUlOVDMyKSwgYW5kIGl0IGFsc28gY2Fubm90IHJldHVybiBN QVhfVUlOVDMyLg0KPiANCj4gU28gSSBzaW1wbHkgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgcHVycG9z ZSBvZiB0aGlzIGNvZGUuDQoNClRoZSBDb3VudGVyIGNhbiBiZSBsb2NrZWQgYnkgY2FsbGluZyBT bW1DcHVTeW5jTG9ja0Rvb3IoKSwgYWZ0ZXIgdGhhdCwgQ291bnRlciB3aWxsIGJlIChVSU5UMzIp LTEsIGluIHN1Y2ggYSBjYXNlLCAgSW50ZXJuYWxXYWl0Rm9yU2VtYXBob3JlIHdpbGwgY29udGlu dWUgZGVjcmVhc2UgaXQgdG8gKFVJTlQzMiktMiwgdGhpcyBpcyB0byBjYXRjaCB0aGUgbG9jayBj YXNlLiBidXQgYWNjb3JkaW5nIHdlIGFsaWduZWQgZm9yIHRoZSBpbnRlcmZhY2UgYmVsb3c6DQov KioNCiAgUGVyZm9ybXMgYW4gYXRvbWljIG9wZXJhdGlvbiB0byBjaGVjayBvdXQgQ1BVLg0KDQog IFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBpbiBlcnJvciBoYW5kbGluZyBmbG93IGZvciB0 aGUgQ1BVIHdobyBjYWxscyBDaGVja0luQ3B1KCkgZWFybGllci4NCiAgVGhlIGNhbGxlciBzaGFs bCBtYWtlIHN1cmUgdGhlIENQVSBzcGVjaWZpZWQgYnkgQ3B1SW5kZXggaGFzIGFscmVhZHkgY2hl Y2tlZC1pbi4NCg0KICBJZiBDb250ZXh0IGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQogIElmIENw dUluZGV4IGV4Y2VlZHMgdGhlIHJhbmdlIG9mIGFsbCBDUFVzIGluIHRoZSBzeXN0ZW0sIHRoZW4g QVNTRVJUKCkuDQoNCiAgQHBhcmFtW2luLG91dF0gIENvbnRleHQgICAgICAgICAgIFBvaW50ZXIg dG8gdGhlIFNNTSBDUFUgU3luYyBjb250ZXh0IG9iamVjdC4NCiAgQHBhcmFtW2luXSAgICAgIENw dUluZGV4ICAgICAgICAgIENoZWNrIG91dCBDUFUgaW5kZXguDQoNCiAgQHJldHZhbCBSRVRVUk5f U1VDQ0VTUyAgICAgICAgICAgIENoZWNrIG91dCBDUFUgKENwdUluZGV4KSBzdWNjZXNzZnVsbHku DQogIEByZXR2YWwgUkVUVVJOX0FCT1JURUQgICAgICAgICAgICBDaGVjayBvdXQgQ1BVIGZhaWxl ZCBkdWUgdG8gU21tQ3B1U3luY0xvY2tEb29yKCkgaGFzIGJlZW4gY2FsbGVkIGJ5IG9uZSBlbGVj dGVkIENQVS4NCg0KKiovDQpSRVRVUk5fU1RBVFVTDQpFRklBUEkNClNtbUNwdVN5bmNDaGVja091 dENwdSAoDQogIElOIE9VVCBTTU1fQ1BVX1NZTkNfQ09OVEVYVCAgKkNvbnRleHQsDQogIElOICAg ICBVSU5UTiAgICAgICAgICAgICAgICAgQ3B1SW5kZXgNCiAgKTsNCg0KVGhlIGNvZGUgd2lsbCBi ZSBjaGFuZ2VkIHRvOg0KDQogIGlmICgoSU5UMzIpSW50ZXJuYWxXYWl0Rm9yU2VtYXBob3JlIChD b250ZXh0LT5DcHVDb3VudCkgPCAwKSB7DQogICAgcmV0dXJuIFJFVFVSTl9BQk9SVEVEOw0KICB9 DQoNCg0KPiANCj4gQXMgd3JpdHRlbiwgdGhpcyBjb25kaXRpb24gY291bGQgb25seSBmaXJlIGlm IEludGVybmFsV2FpdEZvclNlbWFwaG9yZSgpDQo+IHN1Y2Nlc3NmdWxseSBkZWNyZW1lbnRlZCB0 aGUgc2VtYXBob3JlLCBhbmQgdGhlICpuZXcqIHZhbHVlIG9mIHRoZQ0KPiBzZW1hcGhvcmUgd2Vy ZSA+PTB4ODAwMF8wMDAwLiBCZWNhdXNlIGluIHRoYXQgY2FzZSwgdGhlIElOVDMyIGNhc3QgKD0N Cj4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBiZWhhdmlvcikgd291bGQgcHJvZHVjZSBhIG5lZ2F0 aXZlIHZhbHVlLiBCdXQgZm9yDQo+IHRoYXQsIHdlJ2QgZmlyc3QgaGF2ZSB0byBpbmNyZWFzZSBD b3VudGVyIHRvIDB4ODAwMF8wMDAxIGF0IGxlYXN0LCBhbmQNCj4gdGhhdCBjb3VsZCBuZXZlciBo YXBwZW4gaW4gcHJhY3RpY2UsIElNTy4NCj4gDQo+IFNvIHRoaXMgaXMgYmFzaWNhbGx5IGRlYWQg Y29kZS4gV2hhdCBpcyB0aGUgaW50ZW50Pw0KDQoNCkl0IGNhbiBoYXBwZW4gd2hlbiBsb2NrZWQg dGhlIENvdW50ZXIuDQoNCg0KPiANCj4gPiArDQo+ID4gKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNT Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBQZXJmb3JtcyBhbiBhdG9taWMgb3Bl cmF0aW9uIGxvY2sgZG9vciBmb3IgQ1BVIGNoZWNraW4gb3IgY2hlY2tvdXQuDQo+ID4gKw0KPiA+ ICsgIEFmdGVyIHRoaXMgZnVuY3Rpb24sIENQVSBjYW4gbm90IGNoZWNrIGluIHZpYSBTbW1DcHVT eW5jQ2hlY2tJbkNwdSgpLg0KPiA+ICsNCj4gPiArICBUaGUgQ1BVIHNwZWNpZmllZCBieSBDcHVJ bmRleCBpcyBlbGVjdGVkIHRvIGxvY2sgZG9vci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luLG91 dF0gIFNtbUNwdVN5bmNDdHggICAgIFBvaW50ZXIgdG8gdGhlIFNNTSBDUFUgU3luYw0KPiBjb250 ZXh0IG9iamVjdC4NCj4gPiArICBAcGFyYW1baW5dICAgICAgQ3B1SW5kZXggICAgICAgICAgSW5k aWNhdGUgd2hpY2ggQ1BVIHRvIGxvY2sgZG9vci4NCj4gPiArICBAcGFyYW1baW4sb3V0XSAgQ3B1 Q291bnQgICAgICAgICAgTnVtYmVyIG9mIGFycml2ZWQgQ1BVIGluIFNNSSBhZnRlciBsb29rDQo+ IGRvb3IuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgICAgICBM b2NrIGRvb3IgZm9yIENQVSBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBSRVRVUk5fSU5W QUxJRF9QQVJBTUVURVIgIFNtbUNwdVN5bmNDdHggb3IgQ3B1Q291bnQgaXMNCj4gTlVMTC4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtSRVRVUk5fU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtTbW1D cHVTeW5jTG9ja0Rvb3IgKA0KPiA+ICsgIElOIE9VVCBTTU1fQ1BVX1NZTkNfQ09OVEVYVCAgKlNt bUNwdVN5bmNDdHgsDQo+ID4gKyAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICBDcHVJbmRl eCwNCj4gPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICpDcHVDb3VudA0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoU21tQ3B1U3luY0N0eCAhPSBOVUxMICYmIENwdUNv dW50ICE9IE5VTEwpOw0KPiANCj4gKDM5KSBib2d1cyBhc3NlcnQNCj4gDQo+ID4gKyAgaWYgKChT bW1DcHVTeW5jQ3R4ID09IE5VTEwpIHx8IChDcHVDb3VudCA9PSBOVUxMKSkgew0KPiA+ICsgICAg cmV0dXJuIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg ICpDcHVDb3VudCA9IEludGVybmFsTG9ja2Rvd25TZW1hcGhvcmUgKFNtbUNwdVN5bmNDdHgtDQo+ ID5HbG9iYWxTZW0tPkNvdW50ZXIpOw0KPiA+ICsNCj4gPiArICByZXR1cm4gUkVUVVJOX1NVQ0NF U1M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFVzZWQgYnkgdGhlIEJTUCB0byB3 YWl0IGZvciBBUHMuDQo+ID4gKw0KPiA+ICsgIFRoZSBudW1iZXIgb2YgQVBzIG5lZWQgdG8gYmUg d2FpdGVkIGlzIHNwZWNpZmllZCBieSBOdW1iZXJPZkFQcy4gVGhlDQo+IEJTUCBpcyBzcGVjaWZp ZWQgYnkgQnNwSW5kZXguDQo+ID4gKw0KPiA+ICsgIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgYmxv Y2tpbmcgbW9kZSwgYW5kIGl0IHdpbGwgcmV0dXJuIG9ubHkgYWZ0ZXIgdGhlDQo+IG51bWJlciBv ZiBBUHMgcmVsZWFzZWQgYnkNCj4gPiArICBjYWxsaW5nIFNtbUNwdVN5bmNSZWxlYXNlQnNwKCk6 DQo+ID4gKyAgQlNQOiBXYWl0Rm9yQVBzICAgIDwtLSAgQVA6IFJlbGVhc2VCc3ANCj4gPiArDQo+ ID4gKyAgQHBhcmFtW2luLG91dF0gIFNtbUNwdVN5bmNDdHggICAgIFBvaW50ZXIgdG8gdGhlIFNN TSBDUFUgU3luYw0KPiBjb250ZXh0IG9iamVjdC4NCj4gPiArICBAcGFyYW1baW5dICAgICAgTnVt YmVyT2ZBUHMgICAgICAgTnVtYmVyIG9mIEFQcyBuZWVkIHRvIGJlIHdhaXRlZCBieQ0KPiBCU1Au DQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIEJzcEluZGV4ICAgICAgICAgIFRoZSBCU1AgSW5kZXgg dG8gd2FpdCBmb3IgQVBzLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFJFVFVSTl9TVUNDRVNTICAg ICAgICAgICAgQlNQIHRvIHdhaXQgZm9yIEFQcyBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZh bCBSRVRVUk5fSU5WQUxJRF9QQVJBTUVURVIgIFNtbUNwdVN5bmNDdHggaXMgTlVMTCBvcg0KPiBO dW1iZXJPZkFQcyA+IHRvdGFsIG51bWJlciBvZiBwcm9jZXNzb3JzIGluIHN5c3RlbS4NCj4gPiAr DQo+ID4gKyoqLw0KPiA+ICtSRVRVUk5fU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtTbW1DcHVT eW5jV2FpdEZvckFQcyAoDQo+ID4gKyAgSU4gT1VUIFNNTV9DUFVfU1lOQ19DT05URVhUICAqU21t Q3B1U3luY0N0eCwNCj4gPiArICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICAgIE51bWJlck9m QVBzLA0KPiA+ICsgIElOICAgICBVSU5UTiAgICAgICAgICAgICAgICAgQnNwSW5kZXgNCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKFNtbUNwdVN5bmNDdHggIT0gTlVMTCAmJiBOdW1i ZXJPZkFQcyA8PSBTbW1DcHVTeW5jQ3R4LQ0KPiA+TnVtYmVyT2ZDcHVzKTsNCj4gDQo+ICg0MCkg Ym9ndXMgYXNzZXJ0DQo+IA0KPiA+ICsgIGlmICgoU21tQ3B1U3luY0N0eCA9PSBOVUxMKSB8fCAo TnVtYmVyT2ZBUHMgPiBTbW1DcHVTeW5jQ3R4LQ0KPiA+TnVtYmVyT2ZDcHVzKSkgew0KPiA+ICsg ICAgcmV0dXJuIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+IA0KPiAoNDEp IFF1ZXN0aW9uIGZvciBib3RoIHRoZSBsaWJyYXJ5IGluc3RhbmNlIGFuZCB0aGUgbGlicmFyeSBj bGFzcyAoaS5lLiwNCj4gQVBJIGRvY3VtZW50YXRpb24pOg0KPiANCj4gSXMgaXQgZXZlciB2YWxp ZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCAoTnVtYmVyT2ZBUHMgPT0NCj4gU21tQ3B1U3lu Y0N0eC0+TnVtYmVyT2ZDcHVzKT8NCj4gDQo+IEkgd291bGQgdGhpbmsgbm90LiBOdW1iZXJPZkNw dXMgaXMgc3VwcG9zZWQgdG8gaW5jbHVkZSB0aGUgQlNQIGFuZCB0aGUNCj4gQVBzLiBUaGVyZWZv cmUgdGhlIGhpZ2hlc3QgcGVybWl0dGVkIE51bWJlck9mQVBzIHZhbHVlLCBvbiBpbnB1dCwgaXMN Cj4gKFNtbUNwdVN5bmNDdHgtPk51bWJlck9mQ3B1cyAtIDEpLg0KPiANCj4gU28gSSB0aGluayB3 ZSBzaG91bGQgbW9kaWZ5IHRoZSBsaWIgY2xhc3MgYW5kIHRoZSBsaWIgaW5zdGFuY2UgYm90aC4N Cj4gUkVUVVJOX0lOVkFMSURfUEFSQU1FVEVSIGFwcGxpZXMgdG8gIk51bWJlck9mQVBzICo+PSog dG90YWwgbnVtYmVyDQo+IG9mDQo+IHByb2Nlc3NvcnMgaW4gc3lzdGVtIi4NCj4gDQoNCkdvb2Qg Y2F0Y2ghISEgSSB3aWxsIGZpeCBpdC4NCg0KPiA+ICsNCj4gPiArICB3aGlsZSAoTnVtYmVyT2ZB UHMtLSA+IDApIHsNCj4gPiArICAgIEludGVybmFsV2FpdEZvclNlbWFwaG9yZSAoU21tQ3B1U3lu Y0N0eC0+Q3B1U2VtW0JzcEluZGV4XS5SdW4pOw0KPiA+ICsgIH0NCj4gDQo+ICg0MikgSW4gbXkg b3BpbmlvbiwgdGhpcyBpcyBhbiB1Z2x5IHBhdHRlcm4uDQo+IA0KPiBGaXJzdCwgYWZ0ZXIgdGhl IGxvb3AsIE51bWJlck9mQVBzIHdpbGwgYmUgTUFYX1VJTlROLg0KPiANCj4gU2Vjb25kLCBtb2Rp ZnlpbmcgaW5wdXQgcGFyYW1ldGVycyBpcyBhbHNvIGFuIGFudGktcGF0dGVybi4gQXNzdW1lIHlv dQ0KPiBkZWJ1ZyBhIHByb2JsZW0sIGFuZCBmZXRjaCBhIGJhY2t0cmFjZSB3aGVyZSB0aGUgdHdv IGlubmVybW9zdCBmcmFtZXMNCj4gYXJlIFNtbUNwdVN5bmNXYWl0Rm9yQVBzKCkgYW5kIEludGVy bmFsV2FpdEZvclNlbWFwaG9yZSgpLiBJZiB5b3UgbG9vaw0KPiBhdCB0aGUgc3RhY2sgZnJhbWUg dGhhdCBiZWxvbmdzIHRvIFNtbUNwdVN5bmNXYWl0Rm9yQVBzKCksIHlvdSBtYXkgYmUNCj4gbGVk IHRvIHRoaW5rIHRoYXQgdGhlIGZ1bmN0aW9uIHdhcyAqaW52b2tlZCogd2l0aCBhICpsb3cqIE51 bWJlck9mQVBzDQo+IHZhbHVlLiBXaGVyZWFzIGluIGZhY3QgTnVtYmVyT2ZBUHMgbWF5IGhhdmUg YmVlbiBhIGxhcmdlciB2YWx1ZSBhdCB0aGUNCj4gdGltZSBvZiBjYWxsLCBvbmx5IHRoZSBmdW5j dGlvbiBkZWNyZW1lbnRlZCBOdW1iZXJPZkFQcyBieSB0aGUgdGltZSB0aGUNCj4gc3RhY2sgdHJh Y2Ugd2FzIGZldGNoZWQuDQo+IA0KPiBTbywgcGxlYXNlIGFkZCBhIG5ldyBoZWxwZXIgdmFyaWFi bGUsIGFuZCB3cml0ZSBhIHByb3BlciAiZm9yIiBsb29wLg0KPiANCj4gICBVSU5UTiAgQXJyaXZl ZDsNCj4gDQo+ICAgZm9yIChBcnJpdmVkID0gMDsgQXJyaXZlZCA8IE51bWJlck9mQVBzOyBBcnJp dmVkKyspIHsNCj4gICAgIEludGVybmFsV2FpdEZvclNlbWFwaG9yZSAoU21tQ3B1U3luY0N0eC0+ Q3B1U2VtW0JzcEluZGV4XS5SdW4pOw0KPiAgIH0NCj4gDQoNCkFncmVlLiBUaGFuayB5b3UhDQoN Cg0KPiAoNDMpIEkgbWVudGlvbmVkIHRoaXMgd2hpbGUgcmV2aWV3aW5nIHRoZSBsaWIgY2xhc3Mg aGVhZGVyIChwYXRjaCMyKSwgc28NCj4gbGV0IG1lIHJlcGVhdCBpdCBoZXJlOg0KPiANCj4gQnNw SW5kZXggaXMgdXNlZCBmb3IgaW5kZXhpbmcgdGhlIENwdVNlbSBhcnJheSwgYnV0IHdlIHBlcmZv cm0gbm8gcmFuZ2UNCj4gY2hlY2tpbmcsIGFnYWluc3QgIlNtbUNwdVN5bmNDdHgtPk51bWJlck9m Q3B1cyIuDQo+IA0KPiBUaGF0IGVycm9yIHNob3VsZCBiZSBkb2N1bWVudGVkIChpbiB0aGUgbGli IGNsYXNzIGhlYWRlciksIGFuZA0KPiBjYXVnaHQvcmVwb3J0ZWQgaGVyZS4NCj4gDQoNClllcywg SSB3aWxsIHJlZmluZSB0aGUgcGF0Y2ggYmFzZWQgb24gdGhlIGxpYiBjbGFzcyBoZWFkZXIgd2Ug YWxpZ25lZC4NCg0KDQo+ID4gKw0KPiA+ICsgIHJldHVybiBSRVRVUk5fU1VDQ0VTUzsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVXNlZCBieSB0aGUgQlNQIHRvIHJlbGVhc2Ugb25l IEFQLg0KPiA+ICsNCj4gPiArICBUaGUgQVAgaXMgc3BlY2lmaWVkIGJ5IENwdUluZGV4LiBUaGUg QlNQIGlzIHNwZWNpZmllZCBieSBCc3BJbmRleC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luLG91 dF0gIFNtbUNwdVN5bmNDdHggICAgIFBvaW50ZXIgdG8gdGhlIFNNTSBDUFUgU3luYw0KPiBjb250 ZXh0IG9iamVjdC4NCj4gPiArICBAcGFyYW1baW5dICAgICAgQ3B1SW5kZXggICAgICAgICAgSW5k aWNhdGUgd2hpY2ggQVAgbmVlZCB0byBiZSByZWxlYXNlZC4NCj4gPiArICBAcGFyYW1baW5dICAg ICAgQnNwSW5kZXggICAgICAgICAgVGhlIEJTUCBJbmRleCB0byByZWxlYXNlIEFQLg0KPiA+ICsN Cj4gPiArICBAcmV0dmFsIFJFVFVSTl9TVUNDRVNTICAgICAgICAgICAgQlNQIHRvIHJlbGVhc2Ug b25lIEFQIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsIFJFVFVSTl9JTlZBTElEX1BBUkFN RVRFUiAgU21tQ3B1U3luY0N0eCBpcyBOVUxMIG9yDQo+IENwdUluZGV4IGlzIHNhbWUgYXMgQnNw SW5kZXguDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArUkVUVVJOX1NUQVRVUw0KPiA+ICtFRklBUEkN Cj4gPiArU21tQ3B1U3luY1JlbGVhc2VPbmVBcCAgICgNCj4gPiArICBJTiBPVVQgU01NX0NQVV9T WU5DX0NPTlRFWFQgICpTbW1DcHVTeW5jQ3R4LA0KPiA+ICsgIElOICAgICBVSU5UTiAgICAgICAg ICAgICAgICAgQ3B1SW5kZXgsDQo+ID4gKyAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICBC c3BJbmRleA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoU21tQ3B1U3luY0N0eCAh PSBOVUxMICYmIEJzcEluZGV4ICE9IENwdUluZGV4KTsNCj4gDQo+ICg0NCkgYm9ndXMgYXNzZXJ0 DQo+IA0KPiA+ICsgIGlmICgoU21tQ3B1U3luY0N0eCA9PSBOVUxMKSB8fCAoQnNwSW5kZXggPT0g Q3B1SW5kZXgpKSB7DQo+ID4gKyAgICByZXR1cm4gUkVUVVJOX0lOVkFMSURfUEFSQU1FVEVSOw0K PiA+ICsgIH0NCj4gDQo+ICg0NSkgcmFuZ2UgY2hlY2tzIGZvciBCc3BJbmRleCBhbmQgQ3B1SW5k ZXggbWlzc2luZyAoaW4gYm90aCBsaWIgY2xhc3MNCj4gYW5kIGxpYiBpbnN0YW5jZSkNCj4gDQoN ClRoZSBzYW1lLCBJIHdpbGwgYWxpZ24gdGhlIGNvZGUgd2l0aCB3ZSBhbGlnbmVkIGxpYiBjbGFz cy4NCg0KDQo+ID4gKw0KPiA+ICsgIEludGVybmFsUmVsZWFzZVNlbWFwaG9yZSAoU21tQ3B1U3lu Y0N0eC0+Q3B1U2VtW0NwdUluZGV4XS5SdW4pOw0KPiA+ICsNCj4gPiArICByZXR1cm4gUkVUVVJO X1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFVzZWQgYnkgdGhlIEFQ IHRvIHdhaXQgQlNQLg0KPiA+ICsNCj4gPiArICBUaGUgQVAgaXMgc3BlY2lmaWVkIGJ5IENwdUlu ZGV4LiBUaGUgQlNQIGlzIHNwZWNpZmllZCBieSBCc3BJbmRleC4NCj4gPiArDQo+ID4gKyAgTm90 ZTogVGhpcyBmdW5jdGlvbiBpcyBibG9ja2luZyBtb2RlLCBhbmQgaXQgd2lsbCByZXR1cm4gb25s eSBhZnRlciB0aGUgQVANCj4gcmVsZWFzZWQgYnkNCj4gPiArICBjYWxsaW5nIFNtbUNwdVN5bmNS ZWxlYXNlT25lQXAoKToNCj4gPiArICBCU1A6IFJlbGVhc2VPbmVBcCAgLS0+ICBBUDogV2FpdEZv ckJzcA0KPiA+ICsNCj4gPiArICBAcGFyYW1baW4sb3V0XSAgU21tQ3B1U3luY0N0eCAgICBQb2lu dGVyIHRvIHRoZSBTTU0gQ1BVIFN5bmMgY29udGV4dA0KPiBvYmplY3QuDQo+ID4gKyAgQHBhcmFt W2luXSAgICAgIENwdUluZGV4ICAgICAgICAgSW5kaWNhdGUgd2hpY2ggQVAgd2FpdCBCU1AuDQo+ ID4gKyAgQHBhcmFtW2luXSAgICAgIEJzcEluZGV4ICAgICAgICAgVGhlIEJTUCBJbmRleCB0byBi ZSB3YWl0ZWQuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgICAg ICBBUCB0byB3YWl0IEJTUCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBSRVRVUk5fSU5W QUxJRF9QQVJBTUVURVIgIFNtbUNwdVN5bmNDdHggaXMgTlVMTCBvcg0KPiBDcHVJbmRleCBpcyBz YW1lIGFzIEJzcEluZGV4Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1JFVFVSTl9TVEFUVVMNCj4g PiArRUZJQVBJDQo+ID4gK1NtbUNwdVN5bmNXYWl0Rm9yQnNwICgNCj4gPiArICBJTiBPVVQgU01N X0NQVV9TWU5DX0NPTlRFWFQgICpTbW1DcHVTeW5jQ3R4LA0KPiA+ICsgIElOICAgICBVSU5UTiAg ICAgICAgICAgICAgICAgQ3B1SW5kZXgsDQo+ID4gKyAgSU4gICAgIFVJTlROICAgICAgICAgICAg ICAgICBCc3BJbmRleA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoU21tQ3B1U3lu Y0N0eCAhPSBOVUxMICYmIEJzcEluZGV4ICE9IENwdUluZGV4KTsNCj4gDQo+ICg0NikgYm9ndXMg YXNzZXJ0DQo+IA0KPiA+ICsgIGlmICgoU21tQ3B1U3luY0N0eCA9PSBOVUxMKSB8fCAoQnNwSW5k ZXggPT0gQ3B1SW5kZXgpKSB7DQo+ID4gKyAgICByZXR1cm4gUkVUVVJOX0lOVkFMSURfUEFSQU1F VEVSOw0KPiA+ICsgIH0NCj4gDQo+ICg0NykgcmFuZ2UgY2hlY2tzIG1pc3NpbmcgKGxpYiBjbGFz cyBhbmQgaW5zdGFuY2UpDQo+IA0KDQoNClRoZSBzYW1lLCBJIHdpbGwgYWxpZ24gdGhlIGNvZGUg d2l0aCB3ZSBhbGlnbmVkIGxpYiBjbGFzcy4NCg0KPiA+ICsNCj4gPiArICBJbnRlcm5hbFdhaXRG b3JTZW1hcGhvcmUgKFNtbUNwdVN5bmNDdHgtPkNwdVNlbVtDcHVJbmRleF0uUnVuKTsNCj4gPiAr DQo+ID4gKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBVc2VkIGJ5IHRoZSBBUCB0byByZWxlYXNlIEJTUC4NCj4gPiArDQo+ID4gKyAgVGhl IEFQIGlzIHNwZWNpZmllZCBieSBDcHVJbmRleC4gVGhlIEJTUCBpcyBzcGVjaWZpZWQgYnkgQnNw SW5kZXguDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbixvdXRdICBTbW1DcHVTeW5jQ3R4ICAgICBQ b2ludGVyIHRvIHRoZSBTTU0gQ1BVIFN5bmMNCj4gY29udGV4dCBvYmplY3QuDQo+ID4gKyAgQHBh cmFtW2luXSAgICAgIENwdUluZGV4ICAgICAgICAgIEluZGljYXRlIHdoaWNoIEFQIHJlbGVhc2Ug QlNQLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICBCc3BJbmRleCAgICAgICAgICBUaGUgQlNQIElu ZGV4IHRvIGJlIHJlbGVhc2VkLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFJFVFVSTl9TVUNDRVNT ICAgICAgICAgICAgQVAgdG8gcmVsZWFzZSBCU1Agc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2 YWwgUkVUVVJOX0lOVkFMSURfUEFSQU1FVEVSICBTbW1DcHVTeW5jQ3R4IGlzIE5VTEwgb3INCj4g Q3B1SW5kZXggaXMgc2FtZSBhcyBCc3BJbmRleC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtSRVRV Uk5fU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtTbW1DcHVTeW5jUmVsZWFzZUJzcCAoDQo+ID4g KyAgSU4gT1VUIFNNTV9DUFVfU1lOQ19DT05URVhUICAqU21tQ3B1U3luY0N0eCwNCj4gPiArICBJ TiAgICAgVUlOVE4gICAgICAgICAgICAgICAgIENwdUluZGV4LA0KPiA+ICsgIElOICAgICBVSU5U TiAgICAgICAgICAgICAgICAgQnNwSW5kZXgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NF UlQgKFNtbUNwdVN5bmNDdHggIT0gTlVMTCAmJiBCc3BJbmRleCAhPSBDcHVJbmRleCk7DQo+IA0K PiAoNDgpIGJvZ3VzIGFzc2VydA0KPiANCj4gPiArICBpZiAoKFNtbUNwdVN5bmNDdHggPT0gTlVM TCkgfHwgKEJzcEluZGV4ID09IENwdUluZGV4KSkgew0KPiA+ICsgICAgcmV0dXJuIFJFVFVSTl9J TlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+IA0KPiAoNDkpIHJhbmdlIGNoZWNrcyBtaXNz aW5nIChsaWIgY2xhc3MgYW5kIGluc3RhbmNlKQ0KPiANCg0KVGhlIHNhbWUsIEkgd2lsbCBhbGln biB0aGUgY29kZSB3aXRoIHdlIGFsaWduZWQgbGliIGNsYXNzLg0KDQoNCj4gPiArDQo+ID4gKyAg SW50ZXJuYWxSZWxlYXNlU2VtYXBob3JlIChTbW1DcHVTeW5jQ3R4LT5DcHVTZW1bQnNwSW5kZXhd LlJ1bik7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBSRVRVUk5fU1VDQ0VTUzsNCj4gPiArfQ0KPiA+ IGRpZmYgLS1naXQgYS9VZWZpQ3B1UGtnL0xpYnJhcnkvU21tQ3B1U3luY0xpYi9TbW1DcHVTeW5j TGliLmluZg0KPiBiL1VlZmlDcHVQa2cvTGlicmFyeS9TbW1DcHVTeW5jTGliL1NtbUNwdVN5bmNM aWIuaW5mDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi42 YmIxODk1NTc3DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1VlZmlDcHVQa2cvTGlicmFy eS9TbW1DcHVTeW5jTGliL1NtbUNwdVN5bmNMaWIuaW5mDQo+ID4gQEAgLTAsMCArMSwzOSBAQA0K PiA+ICsjIyBAZmlsZQ0KPiA+ICsjIFNNTSBDUFUgU3luY2hyb25pemF0aW9uIGxpYi4NCj4gPiAr Iw0KPiA+ICsjIFRoaXMgaXMgU01NIENQVSBTeW5jaHJvbml6YXRpb24gbGliIHVzZWQgZm9yIFNN TSBDUFUgc3luYyBvcGVyYXRpb25zLg0KPiA+ICsjDQo+ID4gKyMgQ29weXJpZ2h0IChjKSAyMDIz LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gKyMgU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArIw0KPiA+ICsj Iw0KPiA+ICsNCj4gPiArW0RlZmluZXNdDQo+ID4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAg ICAgICAgID0gMHgwMDAxMDAwNQ0KPiA+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAg ICA9IFNtbUNwdVN5bmNMaWINCj4gPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAg PSAxY2ExYmMxYS0xNmE0LTQ2ZWYtOTU2YS1jYTUwMGZkMzM4MWYNCj4gPiArICBNT0RVTEVfVFlQ RSAgICAgICAgICAgICAgICAgICAgPSBEWEVfU01NX0RSSVZFUg0KPiA+ICsgIExJQlJBUllfQ0xB U1MgICAgICAgICAgICAgICAgICA9IFNtbUNwdVN5bmNMaWJ8RFhFX1NNTV9EUklWRVINCj4gPiAr DQo+ID4gK1tTb3VyY2VzXQ0KPiA+ICsgIFNtbUNwdVN5bmNMaWIuYw0KPiA+ICsNCj4gPiArW1Bh Y2thZ2VzXQ0KPiA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ID4gKyAgTWRlTW9kdWxlUGtnL01k ZU1vZHVsZVBrZy5kZWMNCj4gPiArICBVZWZpQ3B1UGtnL1VlZmlDcHVQa2cuZGVjDQo+ID4gKw0K PiA+ICtbTGlicmFyeUNsYXNzZXNdDQo+ID4gKyAgVWVmaUxpYg0KPiA+ICsgIEJhc2VMaWINCj4g PiArICBEZWJ1Z0xpYg0KPiA+ICsgIFByaW50TGliDQo+ID4gKyAgU2FmZUludExpYg0KPiA+ICsg IFN5bmNocm9uaXphdGlvbkxpYg0KPiA+ICsgIEJhc2VNZW1vcnlMaWINCj4gPiArICBTbW1TZXJ2 aWNlc1RhYmxlTGliDQo+ID4gKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPiANCj4gKDUwKSBQbGVh c2Ugc29ydCB0aGlzIGxpc3QgYWxwaGFiZXRpY2FsbHkgKGNmLiBjb21tZW50ICgyKSkuDQo+IA0K DQpPaywgd2lsbCByZWZpbmUgaXQuDQoNCj4gPiArDQo+ID4gK1tQY2RdDQo+ID4gKw0KPiA+ICtb UHJvdG9jb2xzXQ0KPiANCj4gKDUxKSBVc2VsZXNzIGVtcHR5IElORiBmaWxlIHNlY3Rpb25zOyBw bGVhc2UgcmVtb3ZlIHRoZW0uDQo+IA0KPiA+IGRpZmYgLS1naXQgYS9VZWZpQ3B1UGtnL1VlZmlD cHVQa2cuZHNjIGIvVWVmaUNwdVBrZy9VZWZpQ3B1UGtnLmRzYw0KPiA+IGluZGV4IDA3NGZkNzc0 NjEuLmYyNjQwMzFjNzcgMTAwNjQ0DQo+ID4gLS0tIGEvVWVmaUNwdVBrZy9VZWZpQ3B1UGtnLmRz Yw0KPiA+ICsrKyBiL1VlZmlDcHVQa2cvVWVmaUNwdVBrZy5kc2MNCj4gPiBAQCAtMjMsMTAgKzIz LDExIEBADQo+ID4gICMNCj4gPg0KPiA+ICAhaW5jbHVkZSBNZGVQa2cvTWRlTGlicy5kc2MuaW5j DQo+ID4NCj4gPiAgW0xpYnJhcnlDbGFzc2VzXQ0KPiA+ICsgIFNhZmVJbnRMaWJ8TWRlUGtnL0xp YnJhcnkvQmFzZVNhZmVJbnRMaWIvQmFzZVNhZmVJbnRMaWIuaW5mDQo+ID4gICAgQmFzZUxpYnxN ZGVQa2cvTGlicmFyeS9CYXNlTGliL0Jhc2VMaWIuaW5mDQo+ID4gICAgQmFzZU1lbW9yeUxpYnxN ZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliL0Jhc2VNZW1vcnlMaWIuaW5mDQo+ID4gICAgQ3B1 TGlifE1kZVBrZy9MaWJyYXJ5L0Jhc2VDcHVMaWIvQmFzZUNwdUxpYi5pbmYNCj4gPiAgICBEZWJ1 Z0xpYnxNZGVQa2cvTGlicmFyeS9CYXNlRGVidWdMaWJOdWxsL0Jhc2VEZWJ1Z0xpYk51bGwuaW5m DQo+ID4NCj4gU2VyaWFsUG9ydExpYnxNZGVQa2cvTGlicmFyeS9CYXNlU2VyaWFsUG9ydExpYk51 bGwvQmFzZVNlcmlhbFBvcnRMaWJOdWxsLmluZg0KPiANCj4gKDUyKSBKdXN0IGZyb20gdGhlIGNv bnRleHQgdmlzaWJsZSBoZXJlLCB0aGlzIGxpc3Qgc2VlbXMgYWxwaGFiZXRpY2FsbHkNCj4gc29y dGVkIHByZS1wYXRjaDsgaWYgdGhhdCdzIHRoZSBjYXNlLCBwbGVhc2Ugc3RpY2sgd2l0aCBpdCAo ZG9uJ3QgYnJlYWsNCj4gdGhlIHNvcnQgb3JkZXIpLg0KDQoNCkhvdyBhYm91dCBhZGRpbmcgdGhl IFNhZmVJbnRMaWIgaW4gdGhlIE1kZVBrZy9NZGVMaWJzLmRzYy5pbmM/IGlmIGFncmVlLCBJIHdp bGwgZG8gdGhhdCB3aXRoIHNlcGFyYXRlZCBwYXRjaC4NCg0KDQpUaGFua3MsDQpKaWF4aW4NCg0K DQoKLT0tPS09LT0tPS09LT0tPS09LT0tPS0KR3JvdXBzLmlvIExpbmtzOiBZb3UgcmVjZWl2ZSBh bGwgbWVzc2FnZXMgc2VudCB0byB0aGlzIGdyb3VwLgpWaWV3L1JlcGx5IE9ubGluZSAoIzExMjUy MCk6IGh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC9tZXNzYWdlLzExMjUyMApNdXRlIFRo aXMgVG9waWM6IGh0dHBzOi8vZ3JvdXBzLmlvL210LzEwMzAxMDE2NS83Njg2MTc2Ckdyb3VwIE93 bmVyOiBkZXZlbCtvd25lckBlZGsyLmdyb3Vwcy5pbwpVbnN1YnNjcmliZTogaHR0cHM6Ly9lZGsy Lmdyb3Vwcy5pby9nL2RldmVsL3Vuc3ViIFtyZWJlY2NhQG9wZW5mdy5pb10KLT0tPS09LT0tPS09 LT0tPS09LT0tPS0KCg0K