From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=63.128.21.162; helo=us-smtp-delivery-162.mimecast.com; envelope-from=eugene@hp.com; receiver=edk2-devel@lists.01.org Received: from us-smtp-delivery-162.mimecast.com (us-smtp-delivery-162.mimecast.com [63.128.21.162]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 1905C2118B661 for ; Wed, 14 Nov 2018 06:58:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hp.com; s=mimecast20180716; t=1542207517; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PKXueufOAP45zvxRcch7hREmaROfvD4+FBxGGwExF4Q=; b=dTUim7TKtHUO+paxEY21Gezmuukm0kaHYr5WhkSoeJxVLhnWmK3JnKkN4s82l2bYWSlxMvkZBfTc37g6REoxxtef8rQDFY/VaSe97p0Ua0bhe/EZMBW3bEYZusz+nxx4hC4e9dIGJoV014RMgnSV+YUAKznj6Hb/lysrLzab7b4= Received: from NAM04-SN1-obe.outbound.protection.outlook.com (mail-sn1nam04lp0083.outbound.protection.outlook.com [216.32.180.83]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-84-eoCIebKNPPyhPuspPleDcw-1; Wed, 14 Nov 2018 09:58:35 -0500 Received: from CS1PR8401MB1189.NAMPRD84.PROD.OUTLOOK.COM (10.169.97.20) by CS1PR8401MB0776.NAMPRD84.PROD.OUTLOOK.COM (10.169.15.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.23; Wed, 14 Nov 2018 14:58:33 +0000 Received: from CS1PR8401MB1189.NAMPRD84.PROD.OUTLOOK.COM ([fe80::d41f:6ad6:8b6f:26ca]) by CS1PR8401MB1189.NAMPRD84.PROD.OUTLOOK.COM ([fe80::d41f:6ad6:8b6f:26ca%4]) with mapi id 15.20.1294.045; Wed, 14 Nov 2018 14:58:32 +0000 From: "Cohen, Eugene" To: "Zhang, Chao B" , "Kinney, Michael D" , "edk2-devel@lists.01.org" , "Yao, Jiewen" CC: =?ks_c_5601-1987?B?QmluLCBTdW5nLVVrICi687y6v+0p?= Thread-Topic: [PATCH 3/4] SecurityPkg: add TpmIoLibMmio instance Thread-Index: AdR7nYTa2kHXzqxsRUyIavAWgtxLkAABiLTgAACfbXAAAtyyEAACXJPAABpUw/A= Date: Wed, 14 Nov 2018 14:58:31 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [174.27.212.255] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; CS1PR8401MB0776; 6:WNcdxXh9/58adBugW+B/QgLpyfIp0vekpO7F8HBeEZeKIfKBDkjebw5csVDvFkZg2EmrPN0RtXO7Jb3XTSh8iyecGlpJ1tww54mTpOfkC3FUhVw4CoyC5nQ8JuhfeHS9FYbQq8HYvkQ6ISk8BTlCQAfwW6V4Z50BWhwISRVb0I6mUsyhSMQKP7LnUiGPEDIkoONnRYrsdY90EOpFVA09Plw/dh6S+PPyGaEUQZGf9pbRmit927P+il0srvJIabLwArC4erF/N71l3WKlw4Sm+sm1a2E9cqhoX4Nb2KEJTCci5iXJytxi4LfGxt10nIa8PWyvIgQG5pwRDBXaOr09kDimEMOua8N6YjePU7fzNqGy7ji38bRT74hUAC7zpMRMHMFecoBcTGlDKOY49QAjr2zZkL7b7tFLCcxrvM6HdMagepTWzNwe+FdQUH6PwNvFOo5EQUbMDkxkuilRn5OL/Q==; 5:g8cPMhA1swrhcLMhbfmUHoTygVRMTNfN9tT7SHCZsP6BzAW7WVZr1cJbFsPB/PpYxjBCV+wi8m1xCJBP7vdW+nGTV2OQ2bbTqcz90jmfOH+O199ate9cCl7Pvffe03RKukfn0L3engsZ54M2JwFEfAHVXyY/NGCG5Qs3LZOjVLg=; 7:k6I+8ikYzu4y4Wbrku5MaXmfVtekdGorhMfRCz//PxdqfFh/JN9km4BzHFBDQxlo9Ev+JZxRw2n2FW4yG6H/Vz+f9WzSspR8Xy9ze3fgCCqFv4l2fMdfy6P0Wi89jKe3FplkAeUWG5ULM4iRwYZyZA== x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-forefront-antispam-report: =?ks_c_5601-1987?B?U0ZWOlNLSTtTQ0w6LTE7U0ZWOk5TUE07U0ZTOigxMDAxOTAyMCko?= =?ks_c_5601-1987?B?OTc5MDAyKSg2MDI5MDAxKSgzOTYwMDMpKDM0NjAwMikoMTM2MDAz?= =?ks_c_5601-1987?B?KSgzOTg2MDQwMDAwMikoMzY2MDA0KSgzNzYwMDIpKDY2MDIwMDMp?= =?ks_c_5601-1987?B?KDUwMTYyNDAwMykoNTM3NTQwMDYpKDE5OTAwNCkoMTg5MDAzKSg1?= =?ks_c_5601-1987?B?MTQ0NDAwMykoMTM0NjQwMDMpKDM4NDYwMDIpKDcxMTA1MDAwMDEp?= =?ks_c_5601-1987?B?KDc5MDcwMDAwMSkoNjExNjAwMikoMjI5ODUzMDAyKSg0NzYwMDMp?= =?ks_c_5601-1987?B?KDQzMjYwMDgpKDY2MDY2MDAxKSg0ODYwMDYpKDI1NjAwNCkoNzQz?= =?ks_c_5601-1987?B?MTYwMDIpKDE0NDQ0MDA1KSg0NDYwMDMpKDExMzQ2MDAyKSgxMTAx?= =?ks_c_5601-1987?B?MzYwMDUpKDE4NjAwMykoMjYwMDUpKDE2Nzk5OTU1MDAyKSg3MTE5?= =?ks_c_5601-1987?B?MDQwMDAwMSkoNTM1NDYwMTEpKDY1MDYwMDcpKDEwMjgzNjAwNCko?= =?ks_c_5601-1987?B?NzEyMDA0MDAwMDEpKDMzNjU2MDAyKSgyNTc4NjAwOSkoMTUxODgx?= =?ks_c_5601-1987?B?NTUwMDUpKDQ3NDQwMDQpKDY4NzM2MDA3KSg5OTI4NjAwNCkoMTA1?= =?ks_c_5601-1987?B?NTg2MDAyKSg0Nzg2MDAwMDEpKDI1MDEwMDMpKDg5MzYwMDIpKDE0?= =?ks_c_5601-1987?B?NDU0MDA0KSg2NDM2MDAyKSg1Mzk0NjAwMykoNTM5MzYwMDIpKDI0?= =?ks_c_5601-1987?B?MjA0MDAwMDcpKDU2NjAzMDAwMDEpKDE1NjUwNTAwMDAxKSgyMzYw?= =?ks_c_5601-1987?B?MDUpKDk2ODYwMDMpKDU1MDE2MDAyKSg2MzA2MDAyKSg2MjQ2MDAz?= =?ks_c_5601-1987?B?KSg1NDg5NjAwMikoODYzNjIwMDEpKDg2NzYwMDIpKDgxMTU2MDE0?= =?ks_c_5601-1987?B?KSg3Njk2MDA1KSgxMDcxMDUwMDAwNykoMjkwNjAwMikoNzYxNzYw?= =?ks_c_5601-1987?B?MTEpKDU3NTc4NDAwMSkoNzczNjAwMikoMjkwMDEwMDAwMSkoOTY2?= =?ks_c_5601-1987?B?MDA1KSg5NzczNjAwNCkoOTM4ODYwMDUpKDgxMTY2MDA2KSgzMTYw?= =?ks_c_5601-1987?B?MDIpKDYwNjAwNikoNTMzNzYwMDIpKDEwNjM1NjAwMSkoNzc1NjAw?= =?ks_c_5601-1987?B?NCkoMTUzOTg2MjUwMDIpKDU3OTAwNCkoOTY5MDAzKSg5ODkwMDEp?= =?ks_c_5601-1987?B?KDk5OTAwMSkoMTAwOTAwMSkoMTAxOTAwMSk7RElSOk9VVDtTRlA6?= =?ks_c_5601-1987?B?MTEwMjtTQ0w6MTtTUlZSOkNTMVBSODQwMU1CMDc3NjtIOkNTMVBS?= =?ks_c_5601-1987?B?ODQwMU1CMTE4OS5OQU1QUkQ4NC5QUk9ELk9VVExPT0suQ09NO0ZQ?= =?ks_c_5601-1987?B?Ujo7U1BGOk5vbmU7TEFORzplbjtQVFI6SW5mb05vUmVjb3JkcztB?= =?ks_c_5601-1987?Q?:1;MX:1;?= x-ms-office365-filtering-correlation-id: 720246ca-3df6-4622-4955-08d64a41a4fd x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:CS1PR8401MB0776; x-ms-traffictypediagnostic: CS1PR8401MB0776: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(111885846020525)(131327999870524)(228905959029699)(73583498263828)(162533806227266)(17755550239193)(21748063052155)(28532068793085)(190501279198761)(227612066756510); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3231410)(944501410)(4982022)(52105112)(10201501046)(3002001)(148016)(149066)(150057)(6041310)(20161123560045)(20161123564045)(20161123558120)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095); SRVR:CS1PR8401MB0776; BCL:0; PCL:0; RULEID:; SRVR:CS1PR8401MB0776; x-forefront-prvs: 085634EFF4 x-microsoft-antispam-message-info: ippugQDtLeWsbK9qi4mlMZGm8hg+rzATznNQYFKR/CAjKzJMfpMUcPli6tVe4/Pgi9hFv+mBR3By8/ZHHP/ufRtedV0voKjTyNehZkWtYCx/1SKwWmyu2ALMlFFzkAsKS+BfFoZC6vB29o5juV3AVnLXW7ar6l3/lyxoCNWjZogWIaYCdEWT+9THjDjPopVhfyNMEpEFg8Bfl9RF46/bybzX8EWAps0bCJQK7o0NDTdlukVvnRe/QMIMV+Lfm1NgbGl4JoI6AuwQrwOJ2si3GkR4KtzY+OG0ItkuTrtlDzcJSgm3REZoAluc4ZMVV191C5X5UkrjQYThydGBH4Cw2iNP+ZJcZHkQkAECx3Sppi0= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: hp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 720246ca-3df6-4622-4955-08d64a41a4fd X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Nov 2018 14:58:31.9635 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: ca7981a2-785a-463d-b82a-3db87dfc3ce6 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0776 X-MC-Unique: eoCIebKNPPyhPuspPleDcw-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [PATCH 3/4] SecurityPkg: add TpmIoLibMmio instance X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Nov 2018 14:58:39 -0000 Content-Language: en-US Content-Type: text/plain; charset=KS_C_5601-1987 Content-Transfer-Encoding: base64 TWlrZSwgQ2hhbywgSmlld2VuDQoNCg0KICAqICAgW0NoYW9dIEluZmluZW9uIGNoaXAgbWVudGlv bmVkIGJ5IE1pa2UgaXMgYW4gZXhhbXBsZSBidXQgaXRzIHJlZ2lzdGVyIHNwYWNlIGRvZXNuoa90 IGNvbXBseSB0byBQVFAgc3BlYw0KICAqICAgW01pa2VdIE15IGV4cGVyaWVuY2UgaXMgd2l0aCBE VFBNIGFuZCBzb21lIEkyQyBUUE1zIGF0IDEuMiBsZXZlbC4NCg0KV2UgaGF2ZSBleHBlcmllbmNl IHdpdGggdGhlIFRQTSAxLjIgSW5maW5lb24gSTJDIGRldmljZSBhbmQgdXNlZCBhIGNvbXBsZXRl bHkgY3VzdG9tIHNvbHV0aW9uLiAgQnV0IEkgdGhpbmsgdGhhdCBtYXkgYmUgYSAxLjIgdmVyc3Vz IDIuMCBkaWZmZXJlbmNlLiAgSSBnZXQgdGhlIGltcHJlc3Npb24gdGhhdCBUQ0cgY2xlYW5lZCB1 cCB0aGVpciBhY3QgYSBiaXQgZm9yIHRoZSAyLjAgc3BlYyAtIGluIGZhY3Qgd2UgY2FuIHNlZSB0 ZXh0IHRvIHRoaXMgZWZmZWN0IGluIHRoZSBQVFAgMS4wMyBzcGVjPGh0dHBzOi8vdHJ1c3RlZGNv bXB1dGluZ2dyb3VwLm9yZy93cC1jb250ZW50L3VwbG9hZHMvVENHX1BDX0NsaWVudF9QbGF0Zm9y bV9UUE1fUHJvZmlsZV9QVFBfMi4wX3IxLjAzX3YyMi5wZGY+IFNlY2l0b24gMi4zOg0KDQpUaGUg Q1JCIEludGVyZmFjZSBpcyBpbnRlbmRlZCB0byBiZSBwaHlzaWNhbC1idXMgYWdub3N0aWMsIHNv IHRoYXQgaXQgY291bGQNCmJlIGltcGxlbWVudGVkIG9uIGFuIExQQyBvciBTUEkgaW50ZXJmYWNl LCBhcyBzcGVjaWZpZWQgaW4gdGhpcyBzcGVjaWZpY2F0aW9uIG9yIG9uDQphbm90aGVyIHBoeXNp Y2FsIGludGVyZmFjZSBub3Qgc3BlY2lmaWVkLg0KDQpSZWFkaW5nIGEgYml0IGRlZXBlciBpbiB0 aGUgUFRQIHNwZWMgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgdHdvIHJlZ2lzdGVyIGxheW91dHMg YnV0IG5vdCBkcml2ZW4gYnkgdGhlIHBoeXNpY2FsIGJ1cyAoTFBDLCBTUEksIEkyQykgYnV0IHJh dGhlciB0aGUgYWNjZXNzIG1ldGhvZCAoRklGTyBvciBDUkIgYWNjZXNzIG1vZGUpIC0gc2VlIHNl Y3Rpb24gNS4zLjIgY2FsbGVkICJSZWdpc3RlciBTcGFjZSBBZGRyZXNzZXMiIHRvIHNlZSB0aGUg RklGTyBhbmQgQ1JCIHJlZ2lzdGVyIGxheW91dHMganV4dGFwb3NlZC4NCg0KTG9va2luZyBhdCBJ MkMgaW4gdGhlIFBUUCBzcGVjIEkgY2FuIG5vdyBzZWUgdGhlIHNpdHVhdGlvbiBpcyB0b3RhbGx5 IGRpZmZlcmVudCAtIEkyQyB1c2VzIGEgdmFyaWF0aW9uIG9mIEZJRk8gbW9kZSBhbmQgaGFzIGEg c2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgbGF5b3V0IG9mIHJlZ2lzdGVycywgY29tcGFyaW5nIFRh YmxlIDEwIHRvIFRhYmxlIDQ4IGluIHRoZSBQVFAgc3BlYy4gIFNvIG5vdyBJIHNlZSB3aGVyZSB5 b3UncmUgY29taW5nIGZyb20gKGFuZCB3aHkgd2UgZGlkbid0IGluaXRpYWxseSB1bmRlcnN0YW5k IHRoZSBjb25jZXJuKS4NCg0KDQpHaXZlbiB0aGF0IEhQJ3MgdXNlIGNhc2UgaXMgU1BJIGFuZCBT UEkgaXMgYWxpZ25lZCB0byBMUEMsIHdlIGJlbGlldmUgZ29pbmcgZm9yd2FyZCB3aXRoIHRoZSBU cG1Jb0xpYiBhYnN0cmFjdGlvbiBpcyBzdGlsbCBxdWl0ZSB1c2VmdWwuICBXaGVuZXZlciBzb21l Ym9keSBuZWVkcyB0byBzdXBwb3J0IEkyQyBUUE0yIGRldmljZXMgdGhlbiB0aGV5IHdpbGwgbmVl ZCB0byBhdXRob3IgYW5vdGhlciBEZXZpY2VMaWIgaW5zdGFuY2Ugc2luY2UgdGhlIHJlZ2lzdGVy IGxheW91dCBpcyBkaWZmZXJlbnQuICAoV2lsbCB0aGVyZSBldmVyIGJlIGEgUXVhcmsgd2l0aCBh biBJMkMgVFBNMj8pDQoNClRQTSBleHBlcnRzLCBJJ2QgYXBwcmVjaWF0ZSBpZiB5b3UgY291bGQg Y29uZmlybSB0aGF0IG15IGFuYWx5c2lzIG9mIExQQy9JMkMvU1BJIGFuZCBDUkIvRklGTyBpcyBj b3JyZWN0Lg0KDQoNCg0KICAqICAgW01pa2VdIEkgd291bGQgcmVjb21tZW5kIHRoYXQgYSBmdWxs IGltcGxlbWVudGF0aW9uIG9mIFRwbUlvTGliIGZvciBhIGZldyBub24gTU1JTyBUUE0gZGV2aWNl cyBiZSBjb21wbGV0ZWQgYW5kIHBhc3MgdmFsaWRhdGlvbiBiZWZvcmUgd2UgY29uc2lkZXIgYWRk aW5nIG5ldyBsaWIgY2xhc3MgdG8gZWRrMi4gIFBlcmhhcHMgdXNpbmcgYW4gZWRrMi1zdGFnaW5n IGJyYW5jaCB3b3VsZCBiZSBhIGJldHRlciBwbGFjZSB0byBzdGFydCBhbmQgeW91IGNhbiBkb2N1 bWVudCBpbiB0aGUgUmVhZG1lLm1kIHRoZSBjcml0ZXJpYSB0aGF0IG11c3QgYmUgbWV0IGJlZm9y ZSB0aGUgbmV3IGxpYiBjbGFzcyBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBlZGsyL21hc3Rl ci4NCg0KVGhpcyBwbGFuIGlzIGZpbmUgYnkgbWUgLSBvdXIgaW50ZW50IGluIHRoZSBvcmlnaW5h bCBSZXF1ZXN0IGZvciBDb21tZW50IGVtYWlscyB3YXMgdG8gdW5kZXJzdGFuZCBpZiBhIFRwbUlv TGliIHN0eWxlIGFic3RyYWN0aW9uIHdvdWxkIGJlIGFjY2VwdGFibGUgdG8gc2F2ZSB1cyB0aGUg d29yayBvZiBnb2luZyBkb3duIGEgcGF0aCB0aGF0IGNhbid0IGJlIHVwc3RyZWFtZWQgYW5kIGhh dmluZyB0byBmaXggaXQgbGF0ZXIuICBJIHRoaW5rIHRoZSBhbnN3ZXIgeW91IGFyZSBnaXZpbmcg aXMgInllcywgYXMgbG9uZyBhcyBpdCByZWFsbHkgd29ya3MiLiAgV2UgYXJlIGRldmVsb3Bpbmcg YW5kIHZhbGlkYXRpbmcgdGhpcyBzdXBwb3J0IHJpZ2h0IG5vdyBzbyBhcyBsb25nIGFzIHRoZSBU UE0gc3RhY2sgZG9lc24ndCBjaGFuZ2Ugb3V0IGZyb20gdW5kZXIgdXMgb24gZWRrMi9tYXN0ZXIg d2hpbGUgd2UgYXJlIGRldmVsb3BpbmcgaXQgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZCB0byB1 cHN0cmVhbSB0aGUgcG9ydGlvbnMgd2UgY2FuIHNoYXJlIGFuZCB0aGUgcmVzdWx0cywgc28gbG9u ZyBhcyBpdCBpcyB1bmRlcnN0b29kIHRoYXQgd2UgY2Fubm90IHVwc3RyZWFtIHRoZSBmdWxsIHN0 YWNrIGR1ZSB0byB0aGUgcHJvcHJpZXRhcnkgSFcgZWxlbWVudHMgLSBhcyBzdWNoIEknbSBub3Qg c3VyZSBob3cgdXNlZnVsIHRoZSBzdGFnaW5nIGJyYW5jaCB3b3VsZCBiZSBhbHRob3VnaCBJIGRv bid0IG1pbmQgZG9pbmcgaXQuICAoSW4gZmFjdCBJIHRoaW5rIGJyYW5jaC1iYXNlZCBwdWxsIHJl cXVlc3RzIGFyZSBtb3JlIHJldmlld2FibGUgdGhhbiBlbWFpbCBwYXRjaHNldHMgYnV0IEkgdGhp bmsgSSBtYXkgYmUgaW4gdGhlIG1pbm9yaXR5IG9uIHRoaXMgbWFpbGluZyBsaXN0KS4NCg0KVGhh bmtzLA0KDQpFdWdlbmUNCg0KDQpGcm9tOiBaaGFuZywgQ2hhbyBCIDxjaGFvLmIuemhhbmdAaW50 ZWwuY29tPg0KU2VudDogVHVlc2RheSwgTm92ZW1iZXIgMTMsIDIwMTggNjo1MyBQTQ0KVG86IEtp bm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IENvaGVuLCBFdWdl bmUgPGV1Z2VuZUBocC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgWWFvLCBKaWV3ZW4g PGppZXdlbi55YW9AaW50ZWwuY29tPg0KQ2M6IEJpbiwgU3VuZy1VayAouvO8ur/tKSA8c3VuZ3Vr LWJpbkBocC5jb20+DQpTdWJqZWN0OiBSRTogW1BBVENIIDMvNF0gU2VjdXJpdHlQa2c6IGFkZCBU cG1Jb0xpYk1taW8gaW5zdGFuY2UNCg0KSGkgQWxsOg0KICAgUFRQIDEuMyBzcGVjIGFscmVhZHkg aW5jbHVkZSBJMkMgc3VwcG9ydC4gSXQgc2VlcyBJMkMgVFBNIGNvbW11bmljYXRpb24gaW50byAz IGxheWVycw0KICAgICAgQXBwbGljYXRpb24gIExheWVyICAtPiBBbHJlYWR5IGltcGxlbWVudGVk IFRDRyBQRUkvVENHIERYRQ0KICAgICAgVENHLUkyQyAgICAgICAgICAgICAgICAgICAtPiAgTm90 IGltcGxlbWVudGVkIGJ5IFVFRkkgVENHIChJbmZpbmVvbiBjaGlwIG1lbnRpb25lZCBieSBNaWtl IGlzIGFuIGV4YW1wbGUgYnV0IGl0cyByZWdpc3RlciBzcGFjZSBkb2VzbqGvdCBjb21wbHkgdG8g UFRQIHNwZWMpDQogICAgICAgIEkyQyAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFdoYXQg VHBtSW9MaWIgYWxzbyBuZWVkIHRvIGFkZHJlc3MNCiAgIEl0IHdpbGwgYmUgZ29vZCB0byBoYXZl IG1vcmUgdXNlIGNhc2VzIHRvIHNlZSBpZiBUcG1Jb0xpYiBpcyBzdWZmaWNpZW50bHkgZGVzaWdu ZWQgdG8gbWVldCBnZW5lcmljIFRQTSBkZXZpY2VzIGNvdmVyZWQgYnkgVENHIHNwZWMuDQoNCg0K RnJvbTogS2lubmV5LCBNaWNoYWVsIEQNClNlbnQ6IFdlZG5lc2RheSwgTm92ZW1iZXIgMTQsIDIw MTggODo0NCBBTQ0KVG86IENvaGVuLCBFdWdlbmUgPGV1Z2VuZUBocC5jb208bWFpbHRvOmV1Z2Vu ZUBocC5jb20+PjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlz dHMuMDEub3JnPjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3 ZW4ueWFvQGludGVsLmNvbT4+OyBaaGFuZywgQ2hhbyBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29t PG1haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tPj47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNo YWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+ Pg0KQ2M6IEJpbiwgU3VuZy1VayAoPz8/KSA8c3VuZ3VrLWJpbkBocC5jb208bWFpbHRvOnN1bmd1 ay1iaW5AaHAuY29tPj4NClN1YmplY3Q6IFJFOiBbUEFUQ0ggMy80XSBTZWN1cml0eVBrZzogYWRk IFRwbUlvTGliTW1pbyBpbnN0YW5jZQ0KDQpIaSBFdWdlbmUsDQoNCk15IGV4cGVyaWVuY2UgaXMg d2l0aCBEVFBNIGFuZCBzb21lIEkyQyBUUE1zIGF0IDEuMiBsZXZlbC4NCg0KT25lIG9mIHRoZSBJ MkMgVFBNcyB3YXMgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQsIHNvIHRoZSBUcG1Jb0xpYiBjb25j ZXB0IGRvZXMgbm90IGFwcGx5Lg0KDQpRdWFya1BsYXRmb3JtUGtnXExpYnJhcnlcVHBtMTJEZXZp Y2VMaWJBdG1lbEkyYw0KDQpUaGUgb3RoZXIgY291bGQgcG90ZW50aWFsbHkgdXNlIHNvbWV0aGlu ZyBsaWtlIFRwbUlvTGliLCBidXQgbWF5IHJlcXVpcmUgc29tZSBkaWZmZXJlbnQgZGVsYXlzIGFu ZCB0aW1lb3V0IHZhbHVlcyB0aGFuIERUUE0uDQoNClF1YXJrUGxhdGZvcm1Qa2dcTGlicmFyeVxU cG0xMkRldmljZUxpYkluZmluZW9uSTJjDQoNClNvIG1heWJlIHdlIG9mZmVyIDIgbWV0aG9kcyB0 byBwb3J0IGEgVFBNLiAgT25jZSBpcyBUcG1Jb0xpYiBpZiB0aGUgcmVnaXN0ZXIgbGF5b3V0IGFu ZCByZXF1aXJlZCBkZWxheXMgYXJlIHRoZSBzYW1lIGFzIERUUE0gd2l0aCBwb3RlbnRpYWxseSBh IGRpZmZlcmVudCBiYXNlLCBhbmQgdGhlIG90aGVyIGlzIHRvIGp1c3QgaW1wbGVtZW50IHRoZSBE ZXZpY2VMaWIuDQoNCkkgd291bGQgcmVjb21tZW5kIHRoYXQgYSBmdWxsIGltcGxlbWVudGF0aW9u IG9mIFRwbUlvTGliIGZvciBhIGZldyBub24gTU1JTyBUUE0gZGV2aWNlcyBiZSBjb21wbGV0ZWQg YW5kIHBhc3MgdmFsaWRhdGlvbiBiZWZvcmUgd2UgY29uc2lkZXIgYWRkaW5nIG5ldyBsaWIgY2xh c3MgdG8gZWRrMi4gIFBlcmhhcHMgdXNpbmcgYW4gZWRrMi1zdGFnaW5nIGJyYW5jaCB3b3VsZCBi ZSBhIGJldHRlciBwbGFjZSB0byBzdGFydCBhbmQgeW91IGNhbiBkb2N1bWVudCBpbiB0aGUgUmVh ZG1lLm1kIHRoZSBjcml0ZXJpYSB0aGF0IG11c3QgYmUgbWV0IGJlZm9yZSB0aGUgbmV3IGxpYiBj bGFzcyBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBlZGsyL21hc3Rlci4NCg0KTWlrZQ0KDQpG cm9tOiBDb2hlbiwgRXVnZW5lIFttYWlsdG86ZXVnZW5lQGhwLmNvbV0NClNlbnQ6IFR1ZXNkYXks IE5vdmVtYmVyIDEzLCAyMDE4IDM6MjQgUE0NClRvOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFl bC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47 IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz47 IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRl bC5jb20+PjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hh by5iLnpoYW5nQGludGVsLmNvbT4+DQpDYzogQmluLCBTdW5nLVVrICi687y6v+0pIDxzdW5ndWst YmluQGhwLmNvbTxtYWlsdG86c3VuZ3VrLWJpbkBocC5jb20+Pg0KU3ViamVjdDogUkU6IFtQQVRD SCAzLzRdIFNlY3VyaXR5UGtnOiBhZGQgVHBtSW9MaWJNbWlvIGluc3RhbmNlDQoNCk1pa2UsDQoN ClRoZXJlIGlzIGEgcHJldmFsZW5jZSBvZiBiYXNlIGFkZHJlc3Mgbm9tZW5jbGF0dXJlIGluIHRo ZSBEVFBNIGxpYnJhcnkgbGlrZToNCg0KICAgICAgICAgICAgICAgIHJldHVybiBUaXNQY1JlcXVl c3RVc2VUcG0gKChUSVNfUENfUkVHSVNURVJTX1BUUikgKFVJTlROKSBQY2RHZXQ2NCAoUGNkVHBt QmFzZUFkZHJlc3MpKTsNCg0KbGlrZSBmcm9tIFRwbTJUaXMuYy4NCg0KDQogICogICBzaG91bGRu oa90IHRoZSBBZGRyZXNzIGJlIHRoZSByZWxhdGl2ZSBhZGRyZXNzIGZyb20gYSBiYXNlPw0KDQpJ IHRoaW5rIGl0IGlzLCB0byB0aGUgZXh0ZW50IHRoYXQgdGhlIFBjZFRwbUJhc2VBZGRyZXNzIGFs cmVhZHkgZXhpc3RzLg0KDQoNCiAgKiAgIE9yIGFyZSB5b3UgdXNpbmcgdGhlIGZ1bGwgRFRQTSBN TUlPIGFkZHJlc3Mgb24gcHVycG9zZSBhbmQgeW91IGV4cGVjdCBub24gRFRQTSBNTUlPIGltcGxl bWVudGF0aW9ucyB0byB0cmFuc2xhdGUgZnJvbSB0aGUgRFRQTSBNTUlPIGFkZHJlc3MgdG8gdGhl IGVxdWl2YWxlbnQgcmVnaXN0ZXIgYWNjZXNzIGluIG9uIGFuIGFsdGVybmF0ZSBidXMgdHlwZT8N Cg0KTXkgdGhvdWdodCBpcyB0aGF0IHRoZSBQY2RUcG1CYXNlQWRkcmVzcyBjb3VsZCBiZSBzZXQg dG8gemVybyAob3Igd2hhdGV2ZXIgbm9uLU1NSU8gb2Zmc2V0IG1ha2VzIHNlbnNlKS4NCg0KDQog ICogICBXb3VsZG4ndCBpdCBiZSBiZXR0ZXIgdG8gaGF2ZSBhbiBhYnN0cmFjdGlvbiBmb3IgZGlm ZmVyZW50IFRQTSByZWdpc3RlcnMgYW5kIHRoZSBEVFBNIGltcGxlbWVudGF0aW9uIHdvdWxkIGNv bnZlcnQgdG8gYSBmdWxsIE1NSU8gYWRkcmVzcyBpbiB0aGUgbGliIGltcGxlbWVudGF0aW9uPw0K DQpJJ3ZlIGJlZW4gbGVkIHRvIHVuZGVyc3RhbmQgdGhhdCB0aGUgVFBNIHJlZ2lzdGVycyBhcmUg dGhlIHNhbWUgaW4gYm90aCBjYXNlcy4gIEkgaGF2ZW4ndCB2ZXJpZmllZCB0aGlzIG15c2VsZiAt IGJ1dCBpZiB5b3UgaGF2ZSBkYXRhIHRvIHRoZSBjb250cmFyeSBwbGVhc2UgbGV0IHVzIGtub3cg c28gd2Ugc3RvcCBnb2luZyBkb3duIHRoaXMgcGF0aC4NCg0KTXkgbWFpbiByZWFzb24gZm9yIHJl c2lzdGluZyBjcmVhdGluZyBhIG5ldyBsaWJyYXJ5IGF0IHRoZSBUcG0yRGV2aWNlTGliIGxheWVy IGJlY2F1c2UgdGhlIERUUE0gbGlicmFyeSBjb250YWlucyBhIGxvdCBvZiBsb2dpYyBhcm91bmQg aG93IHRvIHRhbGsgdG8gdGhlIFRQTSB0aGF0IGV4dGVuZHMgd2VsbCBiZXlvbmQgdGhlIGFjY2Vz cyBtZWNoYW5pc20gdGhhdCB3ZSB3b3VsZCBub3Qgd2FudCB0byBkdXBsaWNhdGUgdG8gYW5vdGhl ciBsaWJyYXJ5IGluc3RhbmNlLiAgSSdtIGxvb2tpbmcgaW5zaWRlIFRwbTJUaXMuYyBhbmQgVHBt MlB0cC5jIHRvIGdldCB0aGlzIHBlcnNwZWN0aXZlLg0KDQpUaGFua3MsDQoNCkV1Z2VuZQ0KDQpG cm9tOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRv Om1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj4NClNlbnQ6IFR1ZXNkYXksIE5vdmVtYmVyIDEz LCAyMDE4IDM6NTggUE0NClRvOiBDb2hlbiwgRXVnZW5lIDxldWdlbmVAaHAuY29tPG1haWx0bzpl dWdlbmVAaHAuY29tPj47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVs QGxpc3RzLjAxLm9yZz47IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86 amlld2VuLnlhb0BpbnRlbC5jb20+PjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVs LmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+OyBLaW5uZXksIE1pY2hhZWwgRCA8 bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwu Y29tPj4NCkNjOiBCaW4sIFN1bmctVWsgKLrzvLq/7SkgPHN1bmd1ay1iaW5AaHAuY29tPG1haWx0 bzpzdW5ndWstYmluQGhwLmNvbT4+DQpTdWJqZWN0OiBSRTogW1BBVENIIDMvNF0gU2VjdXJpdHlQ a2c6IGFkZCBUcG1Jb0xpYk1taW8gaW5zdGFuY2UNCg0KRXVnZW5lLA0KDQpJdCBhcHBlYXJzIHlv dSBhcmUgZXhwZWN0aW5nIHRoZSBBZGRyZXNzIHBhcmFtZXRlcg0KdG8gYmUgdGhlIGZ1bGwgTU1J TyBhZGRyZXNzIGZvciBEVFBNLiBJZiB5b3UgYXJlDQp3YW50aW5nIHRoaXMgbGliIGNsYXNzIHRv IGFic3RyYWN0IHRoZSBhY2Nlc3MgZm9yDQpkaWZmZXJlbnQgYnVzIHR5cGVzLCBzaG91bGRuoa90 IHRoZSBBZGRyZXNzIGJlIHRoZQ0KcmVsYXRpdmUgYWRkcmVzcyBmcm9tIGEgYmFzZT8NCg0KT3Ig YXJlIHlvdSB1c2luZyB0aGUgZnVsbCBEVFBNIE1NSU8gYWRkcmVzcyBvbg0KcHVycG9zZSBhbmQg eW91IGV4cGVjdCBub24gRFRQTSBNTUlPIGltcGxlbWVudGF0aW9ucw0KdG8gdHJhbnNsYXRlIGZy b20gdGhlIERUUE0gTU1JTyBhZGRyZXNzIHRvIHRoZQ0KZXF1aXZhbGVudCByZWdpc3RlciBhY2Nl c3MgaW4gb24gYW4gYWx0ZXJuYXRlIGJ1cw0KdHlwZT8NCg0KV291bGRuJ3QgaXQgYmUgYmV0dGVy IHRvIGhhdmUgYW4gYWJzdHJhY3Rpb24gZm9yDQpkaWZmZXJlbnQgVFBNIHJlZ2lzdGVycyBhbmQg dGhlIERUUE0gaW1wbGVtZW50YXRpb24NCndvdWxkIGNvbnZlcnQgdG8gYSBmdWxsIE1NSU8gYWRk cmVzcyBpbiB0aGUgbGliDQppbXBsZW1lbnRhdGlvbj8NCg0KVGhhbmtzLA0KDQpNaWtlDQoNCg0K PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBlZGsyLWRldmVsIFttYWlsdG86 ZWRrMi1kZXZlbC0NCj4gYm91bmNlc0BsaXN0cy4wMS5vcmc8bWFpbHRvOmJvdW5jZXNAbGlzdHMu MDEub3JnPl0gT24gQmVoYWxmIE9mIENvaGVuLCBFdWdlbmUNCj4gU2VudDogVHVlc2RheSwgTm92 ZW1iZXIgMTMsIDIwMTggMjoxMyBQTQ0KPiBUbzogZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFp bHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPjsgWWFvLCBKaWV3ZW4NCj4gPGppZXdlbi55YW9A aW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+OyBaaGFuZywgQ2hhbyBCDQo+ IDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tPj4N Cj4gQ2M6IEJpbiwgU3VuZy1VayAouvO8ur/tKSA8c3VuZ3VrLWJpbkBocC5jb208bWFpbHRvOnN1 bmd1ay1iaW5AaHAuY29tPj4NCj4gU3ViamVjdDogW2VkazJdIFtQQVRDSCAzLzRdIFNlY3VyaXR5 UGtnOiBhZGQNCj4gVHBtSW9MaWJNbWlvIGluc3RhbmNlDQo+DQo+IFNlY3VyaXR5UGtnOiBhZGQg VHBtSW9MaWJNbWlvIGluc3RhbmNlDQo+DQo+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUg Q29udHJpYnV0aW9uIEFncmVlbWVudCAxLjENCj4gQ2M6IENoYW8gWmhhbmcgPGNoYW8uYi56aGFu Z0BpbnRlbC5jb208bWFpbHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5jb20+Pg0KPiBDYzogSmlld2Vu IFlhbyA8amlld2VuLnlhb0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50ZWwuY29tPj4N Cj4gU2lnbmVkLW9mZi1ieTogRXVnZW5lIENvaGVuIDxldWdlbmVAaHAuY29tPG1haWx0bzpldWdl bmVAaHAuY29tPj4NCj4gLS0tDQo+IFNlY3VyaXR5UGtnL0xpYnJhcnkvVHBtSW9MaWJNbWlvL1Rw bUlvTGliTW1pby5jIHwNCj4gMjIxICsrKysrKysrKysrKysrKysrKysrDQo+IFNlY3VyaXR5UGtn L0xpYnJhcnkvVHBtSW9MaWJNbWlvL1RwbUlvTGliTW1pby5pbmYgfA0KPiA0MSArKysrDQo+IDIg ZmlsZXMgY2hhbmdlZCwgMjYyIGluc2VydGlvbnMoKykNCj4NCj4gZGlmZiAtLWdpdA0KPiBhL1Nl Y3VyaXR5UGtnL0xpYnJhcnkvVHBtSW9MaWJNbWlvL1RwbUlvTGliTW1pby5jDQo+IGIvU2VjdXJp dHlQa2cvTGlicmFyeS9UcG1Jb0xpYk1taW8vVHBtSW9MaWJNbWlvLmMNCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uNTZmMzE4Nw0KPiAtLS0gL2Rldi9udWxsDQo+ICsr KyBiL1NlY3VyaXR5UGtnL0xpYnJhcnkvVHBtSW9MaWJNbWlvL1RwbUlvTGliTW1pby5jDQo+IEBA IC0wLDAgKzEsMjIxIEBADQo+ICsvKiogQGZpbGUNCj4gKyBUaGlzIGxpYnJhcnkgaXMgdG8gYWJz dHJhY3QgVFBNMiByZWdpc3RlciBhY2Nlc3Nlcw0KPiBzbyB0aGF0IGEgY29tbW9uDQo+ICsgaW50 ZXJmYWNlIGNhbiBiZSB1c2VkIGZvciBtdWx0aXBsZSB1bmRlcmx5aW5nIGJ1c3Nlcw0KPiBzdWNo IGFzIFRQTSwNCj4gKyBTUEksIG9yIEkyQyBhY2Nlc3MuDQo+ICsNCj4gK0NvcHlyaWdodCAoYykg MjAxOCBIUCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuDQo+ICtUaGlzIHByb2dyYW0gYW5kIHRo ZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICthcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxh YmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQNCj4gY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UN Cj4gK3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9m DQo+IHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KPiAraHR0cDovL29wZW5zb3VyY2Uub3Jn L2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocDxodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMv YnNkLWxpY2Vuc2UucGhwPg0KPiArDQo+ICtUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRF UiBUSEUgQlNEIExJQ0VOU0UgT04gQU4NCj4gIkFTIElTIiBCQVNJUywNCj4gK1dJVEhPVVQgV0FS UkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsDQo+IEVJVEhFUiBFWFBSRVNT IE9SIElNUExJRUQuDQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSA8QmFzZS5oPg0KPiAr DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9UcG1Jb0xpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkv SW9MaWIuaD4NCj4gKw0KPiArDQo+ICsNCj4gKy8qKg0KPiArIFJlYWRzIGFuIDgtYml0IFRQTSBy ZWdpc3Rlci4NCj4gKw0KPiArIFJlYWRzIHRoZSA4LWJpdCBUUE0gcmVnaXN0ZXIgc3BlY2lmaWVk IGJ5IEFkZHJlc3MuDQo+IFRoZSA4LWJpdCByZWFkIHZhbHVlIGlzDQo+ICsgcmV0dXJuZWQuIFRo aXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgVFBNDQo+IHJlYWQgYW5kIHdyaXRl DQo+ICsgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCj4gKw0KPiArIElmIDgtYml0IFRQTSBy ZWdpc3RlciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLA0KPiB0aGVuIEFTU0VSVCgpLg0K PiArDQo+ICsgQHBhcmFtIEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0byByZWFkLg0KPiArDQo+ ICsgQHJldHVybiBUaGUgdmFsdWUgcmVhZC4NCj4gKw0KPiArKiovDQo+ICtVSU5UOA0KPiArRUZJ QVBJDQo+ICtUcG1SZWFkOCAoDQo+ICsgSU4gVUlOVE4gQWRkcmVzcw0KPiArICkNCj4gK3sNCj4g KyByZXR1cm4gTW1pb1JlYWQ4IChBZGRyZXNzKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgV3Jp dGVzIGFuIDgtYml0IFRQTSByZWdpc3Rlci4NCj4gKw0KPiArIFdyaXRlcyB0aGUgOC1iaXQgVFBN IHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzDQo+IHdpdGggdGhlIHZhbHVlIHNwZWNpZmll ZA0KPiArIGJ5IFZhbHVlIGFuZCByZXR1cm5zIFZhbHVlLiBUaGlzIGZ1bmN0aW9uIG11c3QNCj4g Z3VhcmFudGVlIHRoYXQgYWxsIFRQTSByZWFkDQo+ICsgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJl IHNlcmlhbGl6ZWQuDQo+ICsNCj4gKyBJZiA4LWJpdCBUUE0gcmVnaXN0ZXIgb3BlcmF0aW9ucyBh cmUgbm90IHN1cHBvcnRlZCwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gKw0KPiArIEBwYXJhbSBBZGRy ZXNzIFRoZSBUUE0gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ICsgQHBhcmFtIFZhbHVlIFRoZSB2YWx1 ZSB0byB3cml0ZSB0byB0aGUgVFBNDQo+IHJlZ2lzdGVyLg0KPiArDQo+ICsgQHJldHVybiBWYWx1 ZS4NCj4gKw0KPiArKiovDQo+ICtVSU5UOA0KPiArRUZJQVBJDQo+ICtUcG1Xcml0ZTggKA0KPiAr IElOIFVJTlROIEFkZHJlc3MsDQo+ICsgSU4gVUlOVDggVmFsdWUNCj4gKyApDQo+ICt7DQo+ICsg cmV0dXJuIE1taW9Xcml0ZTggKEFkZHJlc3MsIFZhbHVlKTsNCj4gK30NCj4gKw0KPiArDQo+ICsv KioNCj4gKyBSZWFkcyBhIDE2LWJpdCBUUE0gcmVnaXN0ZXIuDQo+ICsNCj4gKyBSZWFkcyB0aGUg MTYtYml0IFRQTSByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4NCj4gVGhlIDE2LWJpdCBy ZWFkIHZhbHVlIGlzDQo+ICsgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUg dGhhdCBhbGwgVFBNDQo+IHJlYWQgYW5kIHdyaXRlDQo+ICsgb3BlcmF0aW9ucyBhcmUgc2VyaWFs aXplZC4NCj4gKw0KPiArIElmIDE2LWJpdCBUUE0gcmVnaXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90 IHN1cHBvcnRlZCwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gKyBJZiBBZGRyZXNzIGlzIG5vdCBhbGln bmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiArDQo+ICsgQHBh cmFtIEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0byByZWFkLg0KPiArDQo+ICsgQHJldHVybiBU aGUgdmFsdWUgcmVhZC4NCj4gKw0KPiArKiovDQo+ICtVSU5UMTYNCj4gK0VGSUFQSQ0KPiArVHBt UmVhZDE2ICgNCj4gKyBJTiBVSU5UTiBBZGRyZXNzDQo+ICsgKQ0KPiArew0KPiArIHJldHVybiBN bWlvUmVhZDE2IChBZGRyZXNzKTsNCj4gK30NCj4gKw0KPiArDQo+ICsvKioNCj4gKyBXcml0ZXMg YSAxNi1iaXQgVFBNIHJlZ2lzdGVyLg0KPiArDQo+ICsgV3JpdGVzIHRoZSAxNi1iaXQgVFBNIHJl Z2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzDQo+IHdpdGggdGhlIHZhbHVlIHNwZWNpZmllZA0K PiArIGJ5IFZhbHVlIGFuZCByZXR1cm5zIFZhbHVlLiBUaGlzIGZ1bmN0aW9uIG11c3QNCj4gZ3Vh cmFudGVlIHRoYXQgYWxsIFRQTSByZWFkDQo+ICsgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNl cmlhbGl6ZWQuDQo+ICsNCj4gKyBJZiAxNi1iaXQgVFBNIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJl IG5vdCBzdXBwb3J0ZWQsDQo+IHRoZW4gQVNTRVJUKCkuDQo+ICsgSWYgQWRkcmVzcyBpcyBub3Qg YWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gKw0KPiAr IEBwYXJhbSBBZGRyZXNzIFRoZSBUUE0gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ICsgQHBhcmFtIFZh bHVlIFRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgVFBNDQo+IHJlZ2lzdGVyLg0KPiArDQo+ICsg QHJldHVybiBWYWx1ZS4NCj4gKw0KPiArKiovDQo+ICtVSU5UMTYNCj4gK0VGSUFQSQ0KPiArVHBt V3JpdGUxNiAoDQo+ICsgSU4gVUlOVE4gQWRkcmVzcywNCj4gKyBJTiBVSU5UMTYgVmFsdWUNCj4g KyApDQo+ICt7DQo+ICsgcmV0dXJuIE1taW9Xcml0ZTE2IChBZGRyZXNzLCBWYWx1ZSk7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArIFJlYWRzIGEgMzItYml0IFRQTSByZWdpc3Rlci4NCj4gKw0KPiAr IFJlYWRzIHRoZSAzMi1iaXQgVFBNIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLg0KPiBU aGUgMzItYml0IHJlYWQgdmFsdWUgaXMNCj4gKyByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbiBtdXN0 IGd1YXJhbnRlZSB0aGF0IGFsbCBUUE0NCj4gcmVhZCBhbmQgd3JpdGUNCj4gKyBvcGVyYXRpb25z IGFyZSBzZXJpYWxpemVkLg0KPiArDQo+ICsgSWYgMzItYml0IFRQTSByZWdpc3RlciBvcGVyYXRp b25zIGFyZSBub3Qgc3VwcG9ydGVkLA0KPiB0aGVuIEFTU0VSVCgpLg0KPiArIElmIEFkZHJlc3Mg aXMgbm90IGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ ICsNCj4gKyBAcGFyYW0gQWRkcmVzcyBUaGUgVFBNIHJlZ2lzdGVyIHRvIHJlYWQuDQo+ICsNCj4g KyBAcmV0dXJuIFRoZSB2YWx1ZSByZWFkLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQzMg0KPiArRUZJ QVBJDQo+ICtUcG1SZWFkMzIgKA0KPiArIElOIFVJTlROIEFkZHJlc3MNCj4gKyApDQo+ICt7DQo+ ICsgcmV0dXJuIE1taW9SZWFkMzIgKEFkZHJlc3MpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyBX cml0ZXMgYSAzMi1iaXQgVFBNIHJlZ2lzdGVyLg0KPiArDQo+ICsgV3JpdGVzIHRoZSAzMi1iaXQg VFBNIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzDQo+IHdpdGggdGhlIHZhbHVlIHNwZWNp ZmllZA0KPiArIGJ5IFZhbHVlIGFuZCByZXR1cm5zIFZhbHVlLiBUaGlzIGZ1bmN0aW9uIG11c3QN Cj4gZ3VhcmFudGVlIHRoYXQgYWxsIFRQTSByZWFkDQo+ICsgYW5kIHdyaXRlIG9wZXJhdGlvbnMg YXJlIHNlcmlhbGl6ZWQuDQo+ICsNCj4gKyBJZiAzMi1iaXQgVFBNIHJlZ2lzdGVyIG9wZXJhdGlv bnMgYXJlIG5vdCBzdXBwb3J0ZWQsDQo+IHRoZW4gQVNTRVJUKCkuDQo+ICsgSWYgQWRkcmVzcyBp cyBub3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4g Kw0KPiArIEBwYXJhbSBBZGRyZXNzIFRoZSBUUE0gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ICsgQHBh cmFtIFZhbHVlIFRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgVFBNDQo+IHJlZ2lzdGVyLg0KPiAr DQo+ICsgQHJldHVybiBWYWx1ZS4NCj4gKw0KPiArKiovDQo+ICtVSU5UMzINCj4gK0VGSUFQSQ0K PiArVHBtV3JpdGUzMiAoDQo+ICsgSU4gVUlOVE4gQWRkcmVzcywNCj4gKyBJTiBVSU5UMzIgVmFs dWUNCj4gKyApDQo+ICt7DQo+ICsgcmV0dXJuIE1taW9Xcml0ZTMyIChBZGRyZXNzLCBWYWx1ZSk7 DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgUmVhZHMgYSA2NC1iaXQgVFBNIHJlZ2lzdGVy Lg0KPiArDQo+ICsgUmVhZHMgdGhlIDY0LWJpdCBUUE0gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFk ZHJlc3MuDQo+IFRoZSA2NC1iaXQgcmVhZCB2YWx1ZSBpcw0KPiArIHJldHVybmVkLiBUaGlzIGZ1 bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFRQTQ0KPiByZWFkIGFuZCB3cml0ZQ0KPiAr IG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQo+ICsNCj4gKyBJZiA2NC1iaXQgVFBNIHJlZ2lz dGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsDQo+IHRoZW4gQVNTRVJUKCkuDQo+ICsg SWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDY0LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBB U1NFUlQoKS4NCj4gKw0KPiArIEBwYXJhbSBBZGRyZXNzIFRoZSBUUE0gcmVnaXN0ZXIgdG8gcmVh ZC4NCj4gKw0KPiArIEByZXR1cm4gVGhlIHZhbHVlIHJlYWQuDQo+ICsNCj4gKyoqLw0KPiArVUlO VDY0DQo+ICtFRklBUEkNCj4gK1RwbVJlYWQ2NCAoDQo+ICsgSU4gVUlOVE4gQWRkcmVzcw0KPiAr ICkNCj4gK3sNCj4gKyByZXR1cm4gTW1pb1JlYWQ2NCAoQWRkcmVzcyk7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArIFdyaXRlcyBhIDY0LWJpdCBUUE0gcmVnaXN0ZXIuDQo+ICsNCj4gKyBXcml0ZXMg dGhlIDY0LWJpdCBUUE0gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MNCj4gd2l0aCB0aGUg dmFsdWUgc3BlY2lmaWVkDQo+ICsgYnkgVmFsdWUgYW5kIHJldHVybnMgVmFsdWUuIFRoaXMgZnVu Y3Rpb24gbXVzdA0KPiBndWFyYW50ZWUgdGhhdCBhbGwgVFBNIHJlYWQNCj4gKyBhbmQgd3JpdGUg b3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCj4gKw0KPiArIElmIDY0LWJpdCBUUE0gcmVnaXN0 ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gKyBJ ZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgNjQtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFT U0VSVCgpLg0KPiArDQo+ICsgQHBhcmFtIEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0byB3cml0 ZS4NCj4gKyBAcGFyYW0gVmFsdWUgVGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBUUE0NCj4gcmVn aXN0ZXIuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDY0DQo+ICtFRklBUEkNCj4gK1RwbVdyaXRlNjQg KA0KPiArIElOIFVJTlROIEFkZHJlc3MsDQo+ICsgSU4gVUlOVDY0IFZhbHVlDQo+ICsgKQ0KPiAr ew0KPiArIHJldHVybiBNbWlvV3JpdGU2NCAoQWRkcmVzcywgVmFsdWUpOw0KPiArfQ0KPiBkaWZm IC0tZ2l0DQo+IGEvU2VjdXJpdHlQa2cvTGlicmFyeS9UcG1Jb0xpYk1taW8vVHBtSW9MaWJNbWlv LmluZg0KPiBiL1NlY3VyaXR5UGtnL0xpYnJhcnkvVHBtSW9MaWJNbWlvL1RwbUlvTGliTW1pby5p bmYNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uYTQwZjkwZQ0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKyBiL1NlY3VyaXR5UGtnL0xpYnJhcnkvVHBtSW9MaWJNbWlvL1Rw bUlvTGliTW1pby5pbmYNCj4gQEAgLTAsMCArMSw0MSBAQA0KPiArIyMgQGZpbGUNCj4gKyMgUHJv dmlkZXMgQmFzZUNyeXB0byBTSEExIGhhc2ggc2VydmljZQ0KPiArIw0KPiArIyBUaGlzIGxpYnJh cnkgaXMgdG8gYWJzdHJhY3QgVFBNMiByZWdpc3RlciBhY2Nlc3Nlcw0KPiBzbyB0aGF0IGEgY29t bW9uDQo+ICsjIGludGVyZmFjZSBjYW4gYmUgdXNlZCBmb3IgbXVsdGlwbGUgdW5kZXJseWluZw0K PiBidXNzZXMgc3VjaCBhcyBUUE0sDQo+ICsjIFNQSSwgb3IgSTJDIGFjY2Vzcy4NCj4gKyMNCj4g KyMgQ29weXJpZ2h0IChjKSAyMDE4IEhQIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4NCj4gKyMg VGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArIyBhcmUgbGlj ZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQNCj4gY29uZGl0aW9u cyBvZiB0aGUgQlNEIExpY2Vuc2UNCj4gKyMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmli dXRpb24uIFRoZSBmdWxsIHRleHQNCj4gb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQo+ ICsjIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHA8aHR0cDov L29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocD4NCj4gKyMgVEhFIFBST0dS QU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9ODQo+IEFOICJBUyBJUyIg QkFTSVMsDQo+ICsjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5Z IEtJTkQsDQo+IEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsjDQo+ICsjIw0KPiArDQo+ ICtbRGVmaW5lc10NCj4gKyBJTkZfVkVSU0lPTiA9IDB4MDAwMTAwMDUNCj4gKyBCQVNFX05BTUUg PSBUcG1Jb0xpYk1taW8NCj4gKyBGSUxFX0dVSUQgPSBCNTFERTBDNi04QTQ4LTRBRjktDQo+IEJG ODgtNUE0NkNDODUzRkM4DQo+ICsgTU9EVUxFX1RZUEUgPSBCQVNFDQo+ICsgVkVSU0lPTl9TVFJJ TkcgPSAxLjANCj4gKyBMSUJSQVJZX0NMQVNTID0gTlVMTA0KPiArDQo+ICsjDQo+ICsjIFRoZSBm b2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgZm9yIHJlZmVyZW5jZSBvbmx5IGFuZA0KPiBub3QgcmVx dWlyZWQgYnkgdGhlIGJ1aWxkIHRvb2xzLg0KPiArIw0KPiArIyBWQUxJRF9BUkNISVRFQ1RVUkVT ID0gSUEzMiBYNjQgQVJNDQo+IEFBUkNINjQNCj4gKyMNCj4gKw0KPiArW1NvdXJjZXNdDQo+ICsg VHBtSW9MaWJNbWlvLmMNCj4gKw0KPiArW1BhY2thZ2VzXQ0KPiArIE1kZVBrZy9NZGVQa2cuZGVj DQo+ICsgU2VjdXJpdHlQa2cvU2VjdXJpdHlQa2cuZGVjDQo+ICsNCj4gK1tMaWJyYXJ5Q2xhc3Nl c10NCj4gKyBCYXNlTGliDQo+ICsgSW9MaWINCj4gLS0NCj4gMi43LjQNCj4NCj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gZWRrMi1kZXZlbCBtYWls aW5nIGxpc3QNCj4gZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlz dHMuMDEub3JnPg0KPiBodHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2VkazIt ZGV2ZWw8aHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9lZGsyLWRldmVsPg0K