From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2a01:111:f400:fe1e::619; helo=eur01-he1-obe.outbound.protection.outlook.com; envelope-from=sami.mujawar@arm.com; receiver=edk2-devel@lists.01.org Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0619.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::619]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 7DDA921195904 for ; Fri, 21 Dec 2018 10:14:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qL1R9vsr2OvFgEm3xhmjPcBMPbu/h+1PbquPXcrkfY4=; b=cB7aCcvKv+lrUSRJD3RS25HoKD0LonJvzrhi1+pDnyg/ecCaXSOCYd5FuHAIfHA6y1iOu9R5Q6Au2YhfaUPLOPABK8aWdNS0dBBdwDqFKXjjFjXoq6pkPMOoZtfNxBcV/AoIeV6DlNmAK2j5N/ST9HPVS1Jv85260s+dYfm18Xk= Received: from DB6PR0802MB2375.eurprd08.prod.outlook.com (10.172.228.142) by DB6PR0802MB2213.eurprd08.prod.outlook.com (10.172.227.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1446.19; Fri, 21 Dec 2018 18:13:57 +0000 Received: from DB6PR0802MB2375.eurprd08.prod.outlook.com ([fe80::61d7:15a0:e254:728f]) by DB6PR0802MB2375.eurprd08.prod.outlook.com ([fe80::61d7:15a0:e254:728f%9]) with mapi id 15.20.1446.022; Fri, 21 Dec 2018 18:13:56 +0000 From: Sami Mujawar To: Ard Biesheuvel CC: "edk2-devel@lists.01.org" , Arvind Chauhan , Daniil Egranov , Thomas Abraham , Leif Lindholm , "Kinney, Michael D" , Alexei Fedorov , Matteo Carlini , Stephanie Hughes-Fitt , nd Thread-Topic: [PATCH edk2-platforms v1 5/6] Platform/ARM: Add OEM CPU generator for FVP Thread-Index: AQHUmU/FXXxAeRSg1UKs/uOrOTRNfKWJfCjw Date: Fri, 21 Dec 2018 18:13:56 +0000 Message-ID: References: <20181221170021.145024-1-sami.mujawar@arm.com> <20181221170021.145024-6-sami.mujawar@arm.com> In-Reply-To: Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Sami.Mujawar@arm.com; x-originating-ip: [217.140.106.51] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB6PR0802MB2213; 6:Il3UH8G4pjsWUiEPQzv71FwlzA2k3hT3aEfCiCavEaRwa7FPNdg1FLMBAPh4PiIHZlhVQYq859eT5uqDngUjbprUJOTZOoDrzga3v3C9TOobW5tN18+WNaIs0kBIEg3L7UbSOl8+COgL0oYvqTBLB32W9p8l12UJGtICz9+zpYG1QrdrRfF2DAmUbv9Fs6xyrl50YOjxhsDjZaubV1yQvwaOUSpa/EGV1JzjwJcLgqtQhfWEHKyi4uAWVhmTo2JnK+N2utQ/Gi8DmvyW0r7iuxw9cml9NChcnN/heKG51XTIQpOwNN2g64PYhdiUjInIb1r1h2UnYCoZEoOluhQ8r9bCxk+hi/pOt2tuJmMgpVoSfmKJ6n82K5v6tOKu+RCXc+ZjOxoB/qwHsGfd5UopKb9LoKtgSt4UcXB4OXh+swKxB7/jQ0TSvUQBlYd6h/b3VaL/E6s9h3WmyXm78Iq7NQ==; 5:Xiv1CH/pdr+yZLcxyLoel3TIT7iOJBcArl/wHuI7GavE8toEVXvL4+kcwy8JjlMu30QyPHu/jFhrM105DtLtXUPLqqTyUi6xHea2APF8FU6wkx0WWI4qEzuWk2uOh8jHyEKSiUo1laV8isDZHae0nrd/ZBXiJeIzhKmoUjxosSg=; 7:bu7T6e5CSnODxe7tS9AbForCPN8Dz1CulecPlAPOLFve+6JITrl0djAdfL+OSMeqz/4oz4uffv824XXvOFvxF3lTw8apRfEQ8bDybgIhQXU0AxhhU9bXsaNqhWDsnePkuYxkZmj3cMG8IEIg2WPZfw== x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-ms-office365-filtering-correlation-id: 35a83d49-95ac-4a1e-c2bb-08d6677012cc x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:DB6PR0802MB2213; x-ms-traffictypediagnostic: DB6PR0802MB2213: nodisclaimer: True x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(3230021)(999002)(5005026)(6040522)(2401047)(8121501046)(3231475)(944501520)(4982022)(52105112)(93006095)(93001095)(10201501046)(3002001)(6055026)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(20161123558120)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:DB6PR0802MB2213; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0802MB2213; x-forefront-prvs: 0893636978 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(346002)(136003)(39860400002)(376002)(366004)(396003)(13464003)(199004)(189003)(53546011)(6506007)(478600001)(105586002)(8676002)(102836004)(11346002)(71200400001)(71190400001)(6306002)(966005)(575784001)(72206003)(86362001)(305945005)(9686003)(486006)(74316002)(106356001)(14454004)(25786009)(476003)(446003)(14444005)(76176011)(7696005)(66066001)(217873002)(256004)(26005)(4744004)(186003)(7736002)(229853002)(6436002)(316002)(53936002)(53946003)(97736004)(99286004)(15188155005)(54906003)(5660300001)(4326008)(2906002)(6916009)(33656002)(55016002)(16799955002)(6246003)(68736007)(3846002)(53376002)(81166006)(8936002)(6116002)(81156014); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0802MB2213; H:DB6PR0802MB2375.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: pvAqCezxz9UEYEsTX39pvgi2fsENKMnP6knNrQI55JhQNhlCZWkAreGssUGuQnrXZZYEt8AtoFUlv3kMDsZe8aDYb3ksiuc0VKpkahA1E9dQpYF/5YzCVa/grilxNqfP2svxLilaw+2PAQ35xYNxWs0yRi1f3DQBPS1+NTq7FGf1gfQOt8VOwmrcYblxymVswHkljZCzOJ/qgbpvSwGUTNPl08yrRRe++V7UBkjJNuLtg6mHG11sgaGuqr+zaVsE4OPrslVz7tV6woVKJMGJD/FFP3UsutLghgxUq3edYDgeAHeFbsUQ14zf77img40E spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 35a83d49-95ac-4a1e-c2bb-08d6677012cc X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Dec 2018 18:13:56.7680 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0802MB2213 Subject: Re: [PATCH edk2-platforms v1 5/6] Platform/ARM: Add OEM CPU generator for FVP 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: Fri, 21 Dec 2018 18:14:03 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgQXJkLA0KDQpQbGVhc2Ugc2VlIG15IHJlc3BvbnNlIGlubGluZS4NCg0KUmVnYXJkcywNCg0K U2FtaSBNdWphd2FyDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBBcmQgQmll c2hldXZlbCA8YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZz4gDQpTZW50OiAyMSBEZWNlbWJlciAy MDE4IDA1OjA4IFBNDQpUbzogU2FtaSBNdWphd2FyIDxTYW1pLk11amF3YXJAYXJtLmNvbT4NCkNj OiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgQXJ2aW5kIENoYXVoYW4gPEFydmluZC5DaGF1aGFu QGFybS5jb20+OyBEYW5paWwgRWdyYW5vdiA8RGFuaWlsLkVncmFub3ZAYXJtLmNvbT47IFRob21h cyBBYnJhaGFtIDx0aG9tYXMuYWJyYWhhbUBhcm0uY29tPjsgTGVpZiBMaW5kaG9sbSA8bGVpZi5s aW5kaG9sbUBsaW5hcm8ub3JnPjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlA aW50ZWwuY29tPjsgQWxleGVpIEZlZG9yb3YgPEFsZXhlaS5GZWRvcm92QGFybS5jb20+OyBNYXR0 ZW8gQ2FybGluaSA8TWF0dGVvLkNhcmxpbmlAYXJtLmNvbT47IFN0ZXBoYW5pZSBIdWdoZXMtRml0 dCA8U3RlcGhhbmllLkh1Z2hlcy1GaXR0QGFybS5jb20+OyBuZCA8bmRAYXJtLmNvbT4NClN1Ympl Y3Q6IFJlOiBbUEFUQ0ggZWRrMi1wbGF0Zm9ybXMgdjEgNS82XSBQbGF0Zm9ybS9BUk06IEFkZCBP RU0gQ1BVIGdlbmVyYXRvciBmb3IgRlZQDQoNCkhpIFNhbWksDQoNCk9uIEZyaSwgMjEgRGVjIDIw MTggYXQgMTg6MDEsIFNhbWkgTXVqYXdhciA8c2FtaS5tdWphd2FyQGFybS5jb20+IHdyb3RlOg0K Pg0KPiBBZGQgc3VwcG9ydCBmb3IgZHluYW1pYyBnZW5lcmF0aW9uIG9mIEFDUEkgQ1BVIGRldmlj ZSBpbmZvcm1hdGlvbi4NCj4gVGhpcyBnZW5lcmF0b3IgdXNlcyB0aGUgY29tcGlsZWQgZGF0YSBm cm9tIGEgdGVtcGxhdGUgYXNsIGZpbGUgYW5kIA0KPiBwYXRjaGVzIGl0IGF0IHJ1bnRpbWUgdG8g Z2VuZXJhdGUgdGhlIENQVSBpbmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUgDQo+IG51bWJlciBvZiBD UFVzIGFuZCB0aGVpciBBQ1BJIFVJRC4gVGhpcyBwYXRjaGVkIGRhdGEgaXMgdGhlbiBpbnN0YWxs ZWQgDQo+IGFzIGEgU1NEVCB0YWJsZS4NCj4NCj4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29y ZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPiBTaWduZWQtb2ZmLWJ5OiBTYW1pIE11amF3 YXIgPHNhbWkubXVqYXdhckBhcm0uY29tPg0KPiAtLS0NCj4gIFBsYXRmb3JtL0FSTS9WRXhwcmVz c1BrZy9Db25maWd1cmF0aW9uTWFuYWdlci9BY3BpT2VtQ3B1R2VuZXJhdG9yTGliL0FjcGlPZW1D cHVBU0xMaWIuaW5mICAgICAgIHwgIDI3ICsrDQo+ICBQbGF0Zm9ybS9BUk0vVkV4cHJlc3NQa2cv Q29uZmlndXJhdGlvbk1hbmFnZXIvQWNwaU9lbUNwdUdlbmVyYXRvckxpYi9BY3BpT2VtQ3B1R2Vu ZXJhdG9yTGliLmluZiB8ICA0MiArKw0KPiAgUGxhdGZvcm0vQVJNL1ZFeHByZXNzUGtnL0NvbmZp Z3VyYXRpb25NYW5hZ2VyL0FjcGlPZW1DcHVHZW5lcmF0b3JMaWIvT2VtQ3B1R2VuZXJhdG9yLmMg ICAgICAgICAgfCA0MDMgKysrKysrKysrKysrKysrKysrKysNCj4gIFBsYXRmb3JtL0FSTS9WRXhw cmVzc1BrZy9Db25maWd1cmF0aW9uTWFuYWdlci9BY3BpT2VtQ3B1R2VuZXJhdG9yTGliL09lbUNw dUdlbmVyYXRvci5oICAgICAgICAgIHwgIDIzICsrDQo+ICBQbGF0Zm9ybS9BUk0vVkV4cHJlc3NQ a2cvQ29uZmlndXJhdGlvbk1hbmFnZXIvQWNwaU9lbUNwdUdlbmVyYXRvckxpYi9Tc2R0Q3B1VGVt cGxhdGUuYXNsICAgICAgICB8ICAyNSArKw0KPiAgNSBmaWxlcyBjaGFuZ2VkLCA1MjAgaW5zZXJ0 aW9ucygrKQ0KPg0KLi4uDQo+IGRpZmYgLS1naXQgDQo+IGEvUGxhdGZvcm0vQVJNL1ZFeHByZXNz UGtnL0NvbmZpZ3VyYXRpb25NYW5hZ2VyL0FjcGlPZW1DcHVHZW5lcmF0b3JMaWINCj4gL09lbUNw dUdlbmVyYXRvci5jIA0KPiBiL1BsYXRmb3JtL0FSTS9WRXhwcmVzc1BrZy9Db25maWd1cmF0aW9u TWFuYWdlci9BY3BpT2VtQ3B1R2VuZXJhdG9yTGliDQo+IC9PZW1DcHVHZW5lcmF0b3IuYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCANCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uZDU0NDI0NGJmYmQ1NjZjMTI4YjU3ZDgwYjBjOA0KPiBjMmJkYzBj Y2EzNzQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9QbGF0Zm9ybS9BUk0vVkV4cHJlc3NQa2cv Q29uZmlndXJhdGlvbk1hbmFnZXIvQWNwaU9lbUNwdUdlbmVyYXRvDQo+ICsrKyByTGliL09lbUNw dUdlbmVyYXRvci5jDQo+IEBAIC0wLDAgKzEsNDAzIEBADQo+ICsvKiogQGZpbGUNCj4gKyAgT0VN IENQVSBUYWJsZSBHZW5lcmF0b3INCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMTgsIEFSTSBM aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBh Y2NvbXBhbnlpbmcgbWF0ZXJpYWxzICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgDQo+ICsgYXZhaWxh YmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UgIHdo aWNoIA0KPiArIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBv ZiB0aGUgbGljZW5zZSBtYXkgYmUgDQo+ICsgZm91bmQgYXQgIGh0dHA6Ly9vcGVuc291cmNlLm9y Zy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNU UklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiANCj4gK0JBU0lTLA0K PiArICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBF SVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlIDxMaWJy YXJ5L0FjcGlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gKyNpbmNs dWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVn TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+ICNpbmNs dWRlIA0KPiArPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5jbHVk ZSA8UHJvdG9jb2wvQWNwaVRhYmxlLmg+DQo+ICsNCj4gKy8vIE1vZHVsZSBzcGVjaWZpYyBpbmNs dWRlIGZpbGVzLg0KPiArI2luY2x1ZGUgPEFjcGlUYWJsZUdlbmVyYXRvci5oPg0KPiArI2luY2x1 ZGUgPENvbmZpZ3VyYXRpb25NYW5hZ2VyT2JqZWN0Lmg+ICNpbmNsdWRlIA0KPiArPENvbmZpZ3Vy YXRpb25NYW5hZ2VySGVscGVyLmg+ICNpbmNsdWRlIDxMaWJyYXJ5L1RhYmxlSGVscGVyTGliLmg+ IA0KPiArI2luY2x1ZGUgPFByb3RvY29sL0NvbmZpZ3VyYXRpb25NYW5hZ2VyUHJvdG9jb2wuaD4N Cj4gKyNpbmNsdWRlIDxQcm90b2NvbC9EeW5hbWljVGFibGVGYWN0b3J5UHJvdG9jb2wuaD4NCj4g Kw0KPiArI2luY2x1ZGUgPE9lbUNwdUdlbmVyYXRvci5oPg0KPiArDQo+ICsvLyBBTUwgQ29kZSBJ bmNsdWRlIGZpbGVzIGdlbmVyYXRlZCBieSBpQVNMIENvbXBpbGVyICNpbmNsdWRlIA0KPiArPFNz ZHRDcHVUZW1wbGF0ZS5oZXg+DQo+ICsNCj4gKy8vIEFNTCBDb2RlIG9mZnNldHMgZmlsZSBnZW5l cmF0ZWQgYnkgaUFTTCBDb21waWxlciAjaW5jbHVkZSANCj4gKzxTc2R0Q3B1VGVtcGxhdGUub2Zm c2V0Lmg+DQo+ICsNCg0KQXBvbG9naWVzIGlmIEkgc2hvdWxkIGhhdmUgc3BvdHRlZCB0aGlzIGJl Zm9yZSwgYnV0IHRoaXMgaXMgYSBuby1nby4NCldlIGFyZSByZWx5aW5nIG9uIGludGVybWVkaWF0 ZSBvdXRwdXQgb2Ygc29tZSB2ZXJzaW9uIG9mIHRoZSBJQVNMIGNvbXBpbGVyIGhlcmUsIHdoaWNo IFtBRkFJS10gaXMgbm90IGZvcm1hbGx5IHNwZWNpZmllZCBvciBkb2N1bWVudGVkLg0KV2UgY2Fu bm90IGJhc2UgYW4gZWxhYm9yYXRlIGZyYW1ld29yayBsaWtlIER5bmFtaWNUYWJsZXMgb24gdGhp cy4NCg0KSSBndWVzcyB0aGlzIG9ubHkgYWZmZWN0cyBEU0RUL1NTRFQgZ2VuZXJhdGlvbiwgcmln aHQ/DQpbU0FNSV0gWWVzLiBUaGUgbGFzdCAyIHBhdGNoZXMgaW4gdGhpcyBzZXJpZXMgYWRkIHRo aXMgZmVhdHVyZS4gV2UgcHJvYmFibHkgbmVlZCBtb3JlIGRpc2N1c3Npb24gb24gdGhpcyB0b3Bp Yy4NClVudGlsIHRoZW4gY2FuIHdlIHByb2NlZWQgd2l0aCByZXZpZXcgb2YgdGhlIHJlbWFpbmlu ZyBwYXRjaGVzLCBvciBzaG91bGQgSSBzdWJtaXQgYSBuZXcgcGF0Y2ggc2VyaWVzIHRoYXQgZHJv cHMgdGhlIGxhc3QgMiBwYXRjaGVzPw0KDQo+ICtTVEFUSUMgRURLSUlfRFlOQU1JQ19UQUJMRV9G QUNUT1JZX1BST1RPQ09MICAqIG1UYWJsZUZhY3RvcnlQcm90b2NvbCANCj4gKz0gTlVMTDsNCj4g Kw0KPiArLyoqIE9FTSBDUFUgR2VuZXJhdG9yDQo+ICsNCj4gK1JlcXVpcmVtZW50czoNCj4gKyAg VGhlIGZvbGxvd2luZyBDb25maWd1cmF0aW9uIE1hbmFnZXIgT2JqZWN0KHMpIGFyZSByZXF1aXJl ZCBieQ0KPiArICB0aGlzIEdlbmVyYXRvcjoNCj4gKyAgLSBFQXJtT2JqR2ljQ0luZm8NCj4gKyov DQo+ICsNCj4gKy8qKiBUaGlzIG1hY3JvIGV4cGFuZHMgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHJp ZXZlcyB0aGUgR0lDDQo+ICsgICAgQ1BVIGludGVyZmFjZSBJbmZvcm1hdGlvbiBmcm9tIHRoZSBD b25maWd1cmF0aW9uIE1hbmFnZXIuDQo+ICsqLw0KPiArR0VUX09CSkVDVF9MSVNUICgNCj4gKyAg RU9iak5hbWVTcGFjZUFybSwNCj4gKyAgRUFybU9iakdpY0NJbmZvLA0KPiArICBDTV9BUk1fR0lD Q19JTkZPDQo+ICsgICk7DQo+ICsNCj4gK1NUQVRJQw0KPiArQ0hBUjgNCj4gK0FzY2lpRnJvbUhl eCAoDQo+ICsgIFVJTlROIHgNCj4gKyAgKQ0KPiArew0KPiArICBpZiAoeCA8IDEwKSB7DQo+ICsg ICAgcmV0dXJuIHggKyAnMCc7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoeCA8IDE2KSB7DQo+ICsg ICAgcmV0dXJuIHggLSAxMCArICdBJzsNCj4gKyAgfQ0KPiArDQo+ICsgIEFTU0VSVCAoRkFMU0Up Ow0KPiArICByZXR1cm4gLTE7DQo+ICt9DQo+ICsNCj4gKy8qKiBGcmVlIGFueSByZXNvdXJjZXMg YWxsb2NhdGVkIGZvciBjb25zdHJ1Y3RpbmcgdGhlIHRhYmxlcy4NCj4gKw0KPiArICBAcGFyYW0g W2luXSAgICAgIFRoaXMgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIEFDUEkgdGFibGUgZ2VuZXJh dG9yLg0KPiArICBAcGFyYW0gW2luXSAgICAgIEFjcGlUYWJsZUluZm8gIFBvaW50ZXIgdG8gdGhl IEFDUEkgVGFibGUgSW5mby4NCj4gKyAgQHBhcmFtIFtpbl0gICAgICBDZmdNZ3JQcm90b2NvbCBQ b2ludGVyIHRvIHRoZSBDb25maWd1cmF0aW9uIE1hbmFnZXINCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQcm90b2NvbCBJbnRlcmZhY2UuDQo+ICsgIEBwYXJhbSBbaW4sIG91 dF0gVGFibGUgICAgICAgICAgUG9pbnRlciB0byB0aGUgbGlzdCBvZiBBQ1BJIFRhYmxlKHMpLg0K PiArICBAcGFyYW0gW2luXSAgICAgIFRhYmxlQ291bnQgICAgIE51bWJlciBvZiBBQ1BJIHRhYmxl KHMpLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXNvdXJj ZXMgd2VyZSBmcmVlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIFRoZSB0YWJsZSBwb2ludGVyIGlzIE5VTEwgb3IgaW52YWxpZC4NCj4gKyoqLw0KPiAr U1RBVElDDQo+ICtFRklfU1RBVFVTDQo+ICtGcmVlT2VtQ3B1VGFibGVSZXNvdXJjZXNFeCAoDQo+ ICsgIElOICAgICAgQ09OU1QgQUNQSV9UQUJMRV9HRU5FUkFUT1IgICAgICAgICAgICAgICAgICAg KiBDT05TVCBUaGlzLA0KPiArICBJTiAgICAgIENPTlNUIENNX1NURF9PQkpfQUNQSV9UQUJMRV9J TkZPICAgICAgICAgICAgICogQ09OU1QgQWNwaVRhYmxlSW5mbywNCj4gKyAgSU4gICAgICBDT05T VCBFREtJSV9DT05GSUdVUkFUSU9OX01BTkFHRVJfUFJPVE9DT0wgICAqIENPTlNUIENmZ01nclBy b3RvY29sLA0KPiArICBJTiBPVVQgICAgICAgIEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAg ICAgICAgICAqKiogQ09OU1QgVGFibGUsDQo+ICsgIElOICAgICAgQ09OU1QgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZUNvdW50DQo+ICsgICkNCj4g K3sNCj4gKyAgRUZJX0FDUElfREVTQ1JJUFRJT05fSEVBREVSICAgICoqIFRhYmxlTGlzdCA9IE5V TEw7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKw0K PiArICBBU1NFUlQgKFRoaXMgIT0gTlVMTCk7DQo+ICsgIEFTU0VSVCAoQWNwaVRhYmxlSW5mbyAh PSBOVUxMKTsNCj4gKyAgQVNTRVJUIChDZmdNZ3JQcm90b2NvbCAhPSBOVUxMKTsNCj4gKyAgQVNT RVJUIChBY3BpVGFibGVJbmZvLT5UYWJsZUdlbmVyYXRvcklkID09IFRoaXMtPkdlbmVyYXRvcklE KTsgIA0KPiArIEFTU0VSVCAoQWNwaVRhYmxlSW5mby0+QWNwaVRhYmxlU2lnbmF0dXJlID09IA0K PiArIFRoaXMtPkFjcGlUYWJsZVNpZ25hdHVyZSk7DQo+ICsNCj4gKyAgaWYgKChUYWJsZSA9PSBO VUxMKSB8fCAoKlRhYmxlID09IE5VTEwpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwg IkVSUk9SOiBPRU0tQ1BVOiBJbnZhbGlkIFRhYmxlIFBvaW50ZXJcbiIpKTsNCj4gKyAgICBBU1NF UlQgKChUYWJsZSAhPSBOVUxMKSAmJiAoKlRhYmxlICE9IE5VTEwpKTsNCj4gKyAgICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgVGFibGVMaXN0ID0gKlRh YmxlOw0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFRhYmxlQ291bnQ7IEluZGV4 KyspIHsNCj4gKyAgICBpZiAoVGFibGVMaXN0W0luZGV4XSAhPSBOVUxMKSB7DQo+ICsgICAgICAv LyBGcmVlIHRoZSB0YWJsZSBkYXRhDQo+ICsgICAgICBGcmVlUG9vbCAoVGFibGVMaXN0W0luZGV4 XSk7DQo+ICsgICAgICBUYWJsZUxpc3RbSW5kZXhdID0gTlVMTDsNCj4gKyAgICB9DQo+ICsgIH0N Cj4gKw0KPiArICAvLyBGcmVlIHRoZSB0YWJsZSBsaXN0DQo+ICsgIEZyZWVQb29sICgqVGFibGUp Ow0KPiArICAqVGFibGUgPSBOVUxMOw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ ICsNCj4gKy8qKiBDb25zdHJ1Y3QgdGhlIEFDUEkgdGFibGUgdXNpbmcgdGhlIEFDUEkgdGFibGUg ZGF0YSBwcm92aWRlZC4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGludm9rZXMgdGhlIENvbmZp Z3VyYXRpb24gTWFuYWdlciBwcm90b2NvbCBpbnRlcmZhY2UgIA0KPiArIHRvIGdldCB0aGUgcmVx dWlyZWQgaGFyZHdhcmUgaW5mb3JtYXRpb24gZm9yIGdlbmVyYXRpbmcgdGhlIEFDUEkgIA0KPiAr IHRhYmxlLg0KPiArDQo+ICsgIElmIHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGFueSByZXNvdXJj ZXMgdGhlbiB0aGV5IG11c3QgYmUgZnJlZWQgIA0KPiArIGluIHRoZSBGcmVlWFhYWFRhYmxlUmVz b3VyY2VzRXggZnVuY3Rpb24uDQo+ICsNCj4gKyAgQHBhcmFtIFtpbl0gIFRoaXMgICAgICAgICAg IFBvaW50ZXIgdG8gdGhlIHRhYmxlIGdlbmVyYXRvci4NCj4gKyAgQHBhcmFtIFtpbl0gIEFjcGlU YWJsZUluZm8gIFBvaW50ZXIgdG8gdGhlIEFDUEkgVGFibGUgSW5mby4NCj4gKyAgQHBhcmFtIFtp bl0gIENmZ01nclByb3RvY29sIFBvaW50ZXIgdG8gdGhlIENvbmZpZ3VyYXRpb24gTWFuYWdlcg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgSW50ZXJmYWNlLg0KPiAr ICBAcGFyYW0gW291dF0gVGFibGUgICAgICAgICAgUG9pbnRlciB0byBhIGxpc3Qgb2YgZ2VuZXJh dGVkIEFDUEkgdGFibGUocykuDQo+ICsgIEBwYXJhbSBbb3V0XSBUYWJsZUNvdW50ICAgICBOdW1i ZXIgb2YgZ2VuZXJhdGVkIEFDUEkgdGFibGUocykuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgVGFibGUgZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQSBwYXJhbWV0ZXIgaXMgaW52YWxpZC4NCj4gKyoqLw0K PiArU1RBVElDDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0J1aWxkT2VtQ3B1VGFibGVF eCAoDQo+ICsgIElOICBDT05TVCBBQ1BJX1RBQkxFX0dFTkVSQVRPUiAgICAgICAgICAgICAgICAg ICAqICAgICAgIFRoaXMsDQo+ICsgIElOICBDT05TVCBDTV9TVERfT0JKX0FDUElfVEFCTEVfSU5G TyAgICAgICAgICAgICAqIENPTlNUIEFjcGlUYWJsZUluZm8sDQo+ICsgIElOICBDT05TVCBFREtJ SV9DT05GSUdVUkFUSU9OX01BTkFHRVJfUFJPVE9DT0wgICAqIENPTlNUIENmZ01nclByb3RvY29s LA0KPiArICBPVVQgICAgICAgRUZJX0FDUElfREVTQ1JJUFRJT05fSEVBREVSICAgICAgICAgICoq KiAgICAgICBUYWJsZSwNCj4gKyAgT1VUICAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICogQ09OU1QgVGFibGVDb3VudA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHaWNDQ291bnQ7DQo+ICsgIENNX0FSTV9HSUNDX0lORk8gICAg ICAgICAgICAgICAgKiBHaWNDSW5mbzsNCj4gKyAgRUZJX0FDUElfREVTQ1JJUFRJT05fSEVBREVS ICAgICoqIFRhYmxlTGlzdCA9IE5VTEw7DQo+ICsgIENIQVI4ICAgICAgICAgICAgICAgICAgICAg ICAgICAgKiBUYWJsZURhdGE7DQo+ICsgIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgICAg KiBQYXRjaERhdGE7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRl eDsNCj4gKw0KPiArICBBU1NFUlQgKFRoaXMgIT0gTlVMTCk7DQo+ICsgIEFTU0VSVCAoQWNwaVRh YmxlSW5mbyAhPSBOVUxMKTsNCj4gKyAgQVNTRVJUIChDZmdNZ3JQcm90b2NvbCAhPSBOVUxMKTsN Cj4gKyAgQVNTRVJUIChUYWJsZSAhPSBOVUxMKTsNCj4gKyAgQVNTRVJUIChBY3BpVGFibGVJbmZv LT5UYWJsZUdlbmVyYXRvcklkID09IFRoaXMtPkdlbmVyYXRvcklEKTsNCj4gKw0KPiArICAqVGFi bGUgPSBOVUxMOw0KPiArDQo+ICsgIFN0YXR1cyA9IEdldEVBcm1PYmpHaWNDSW5mbyAoDQo+ICsg ICAgICAgICAgICAgQ2ZnTWdyUHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgQ01fTlVMTF9UT0tF TiwNCj4gKyAgICAgICAgICAgICAmR2ljQ0luZm8sDQo+ICsgICAgICAgICAgICAgJkdpY0NDb3Vu dA0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICBERUJVRyAoKA0KPiArICAgICAgREVCVUdfRVJST1IsDQo+ICsgICAgICAiRVJST1I6IE9F TS1DUFU6IEZhaWxlZCB0byBnZXQgR0lDQyBJbmZvLiBTdGF0dXMgPSAlclxuIiwNCj4gKyAgICAg IFN0YXR1cw0KPiArICAgICAgKSk7DQo+ICsgICAgZ290byBlcnJvcl9oYW5kbGVyOw0KPiArICB9 DQo+ICsNCj4gKyAgaWYgKEdpY0NDb3VudCA9PSAwKSB7DQo+ICsgICAgREVCVUcgKCgNCj4gKyAg ICAgIERFQlVHX0VSUk9SLA0KPiArICAgICAgIkVSUk9SOiBPRU0tQ1BVOiBHSUMgQ1BVIEludGVy ZmFjZSBpbmZvcm1hdGlvbiBub3QgcHJvdmlkZWQuXG4iDQo+ICsgICAgICApKTsNCj4gKyAgICBB U1NFUlQgKEdpY0NDb3VudCAhPSAwKTsNCj4gKyAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQo+ICsgICAgZ290byBlcnJvcl9oYW5kbGVyOw0KPiArICB9DQo+ICsNCj4gKyAgLy8g VXBkYXRlIHRoZSB0YWJsZSBjb3VudA0KPiArICAqVGFibGVDb3VudCA9IEdpY0NDb3VudDsNCj4g Kw0KPiArICAvLyBBbGxvY2F0ZSBzdG9yYWdlIGZvciB0aGUgVGFibGUgbGlzdCAgVGFibGVMaXN0 ID0gDQo+ICsgKEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUioqKQ0KPiArICAgICAgICAgICAg ICBBbGxvY2F0ZVplcm9Qb29sICgNCj4gKyAgICAgICAgICAgICAgICAoR2ljQ0NvdW50ICogc2l6 ZW9mIChFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIqKSkNCj4gKyAgICAgICAgICAgICAgICAp Ow0KPiArICBpZiAoVGFibGVMaXN0ID09IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBFRklfT1VU X09GX1JFU09VUkNFUzsNCj4gKyAgICBERUJVRyAoKA0KPiArICAgICAgREVCVUdfRVJST1IsDQo+ ICsgICAgICAiRVJST1I6IE9FTS1DUFU6IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIFRh YmxlIExpc3QsIiBcDQo+ICsgICAgICAiIFN0YXR1cyA9ICVyXG4iLA0KPiArICAgICAgU3RhdHVz DQo+ICsgICAgICApKTsNCj4gKyAgICBnb3RvIGVycm9yX2hhbmRsZXI7DQo+ICsgIH0NCj4gKw0K PiArICAvLyBVcGRhdGUgdGhlIHRhYmxlIGxpc3QgcG9pbnRlcg0KPiArICAqVGFibGUgPSBUYWJs ZUxpc3Q7DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgR2ljQ0NvdW50OyBJbmRl eCsrKSB7DQo+ICsgICAgVUlOVDMyIEFjcGlQcm9jZXNzb3JVaWQgPSBHaWNDSW5mb1tJbmRleF0u QWNwaVByb2Nlc3NvclVpZDsNCj4gKw0KPiArICAgIC8vIFRoaXMgZ2VuZXJhdG9yIGltcGxlbWVu dGF0aW9uIHN1cHBvcnRzIG1heGltdW0gMjU2IENQVXMgKElEUyAwIC0gMjU1KQ0KPiArICAgIGlm IChBY3BpUHJvY2Vzc29yVWlkID4gMHhGRikgew0KPiArICAgICAgU3RhdHVzID0gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPiArICAgICAgZ290byBlcnJvcl9oYW5kbGVyOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIFRhYmxlRGF0YSA9IChDSEFSOCopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChz c2R0Y3B1dGVtcGxhdGVfYW1sX2NvZGUpKTsNCj4gKyAgICBpZiAoVGFibGVEYXRhID09IE5VTEwp IHsNCj4gKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgREVC VUcgKCgNCj4gKyAgICAgICAgREVCVUdfRVJST1IsDQo+ICsgICAgICAgICJFUlJPUjogT0VNLUNQ VTogRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgVGFibGUsIiBcDQo+ICsgICAgICAgICIg U3RhdHVzID0gJXJcbiIsDQo+ICsgICAgICAgIFN0YXR1cw0KPiArICAgICAgICApKTsNCj4gKyAg ICAgIGdvdG8gZXJyb3JfaGFuZGxlcjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLyBTdG9yZSB0 aGUgdGFibGUgZGF0YSBwb2ludGVyIGluIHRoZSBsaXN0DQo+ICsgICAgVGFibGVMaXN0W0luZGV4 XSA9IChFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIqKVRhYmxlRGF0YTsNCj4gKyAgICAvLyBD b3B5IGZyb20gdGVtcGxhdGUNCj4gKyAgICBDb3B5TWVtICgNCj4gKyAgICAgIChWT0lEICopKFVJ TlROKVRhYmxlRGF0YSwNCj4gKyAgICAgIChWT0lEICopKFVJTlROKXNzZHRjcHV0ZW1wbGF0ZV9h bWxfY29kZSwNCj4gKyAgICAgIHNpemVvZiAoc3NkdGNwdXRlbXBsYXRlX2FtbF9jb2RlKQ0KPiAr ICAgICAgKTsNCj4gKw0KPiArICAgIC8vIFVwZGF0ZSByZWxldmVudCBzZWN0aW9ucyBpbiB0aGUg dGFibGUNCj4gKyAgICAvLyAxLiBVcGRhdGUgREVWSUNFIG5hbWUNCj4gKyAgICAvLyB7Il9TQl8u Q1A1QSIsDQo+ICsgICAgLy8gIDB4NUI4MiwgMHgwMDAwMDAyRCwgMHgwMCwgMHgwMDAwMDAwMCwg MHgwMDAwMDAwMDAwMDAwMDAwfQ0KPiArICAgIERFQlVHICgoDQo+ICsgICAgICBERUJVR19JTkZP LA0KPiArICAgICAgIlBhdGhuYW1lID0gJWEsIE5hbWVzZWdPZmZzZXQgPSAweCV4LCBPZmZzZXQg PSAweCV4LCBWYWx1ZSA9IDB4JWx4XG4iLA0KPiArICAgICAgU1NEVF9BUk1fVkVYUF9PZmZzZXRU YWJsZVtPRkZTRVRfVEFCTEVfREVWSUNFX0lOREVYXS5QYXRobmFtZSwNCj4gKyAgICAgIFNTRFRf QVJNX1ZFWFBfT2Zmc2V0VGFibGVbT0ZGU0VUX1RBQkxFX0RFVklDRV9JTkRFWF0uTmFtZXNlZ09m ZnNldCwNCj4gKyAgICAgIFNTRFRfQVJNX1ZFWFBfT2Zmc2V0VGFibGVbT0ZGU0VUX1RBQkxFX0RF VklDRV9JTkRFWF0uT2Zmc2V0LA0KPiArICAgICAgU1NEVF9BUk1fVkVYUF9PZmZzZXRUYWJsZVtP RkZTRVRfVEFCTEVfREVWSUNFX0lOREVYXS5WYWx1ZQ0KPiArICAgICAgKSk7DQo+ICsNCj4gKyAg ICBQYXRjaERhdGEgPSBUYWJsZURhdGEgKw0KPiArICAgICAgU1NEVF9BUk1fVkVYUF9PZmZzZXRU YWJsZVtPRkZTRVRfVEFCTEVfREVWSUNFX0lOREVYXS5OYW1lc2VnT2Zmc2V0Ow0KPiArICAgIC8v IFBhdGNoRGF0YVswXSAtICdDJw0KPiArICAgIC8vIFBhdGNoRGF0YVsxXSAtICdQJw0KPiArICAg IC8vIFBhdGNoRGF0YVsyXSAtIFRlbnMgRGlnaXQNCj4gKyAgICAvLyBQYXRjaERhdGFbM10gLSBV bml0cyBEaWdpdA0KPiArICAgIFBhdGNoRGF0YVsyXSA9IEFzY2lpRnJvbUhleCAoKEFjcGlQcm9j ZXNzb3JVaWQgPj4gNCkgJiAweEYpOw0KPiArICAgIFBhdGNoRGF0YVszXSA9IEFzY2lpRnJvbUhl eCAoQWNwaVByb2Nlc3NvclVpZCAmIDB4Rik7DQo+ICsNCj4gKyAgICAvLyAyLiBVcGRhdGUgVUlE IHZhbHVlDQo+ICsgICAgLy8geyJfU0JfLkNQNUEuX1VJRCIsDQo+ICsgICAgLy8gIDB4MDAwOCwg MHgwMDAwMDA0MSwgMHgwQSwgMHgwMDAwMDA0NiwgMHgwMDAwMDAwMDAwMDAwMEE1fQ0KPiArICAg IERFQlVHICgoDQo+ICsgICAgICBERUJVR19JTkZPLA0KPiArICAgICAgIlBhdGhuYW1lID0gJWEs IE5hbWVzZWdPZmZzZXQgPSAweCV4LCBPZmZzZXQgPSAweCV4LCBWYWx1ZSA9IDB4JWx4XG4iLA0K PiArICAgICAgU1NEVF9BUk1fVkVYUF9PZmZzZXRUYWJsZVtPRkZTRVRfVEFCTEVfVUlEX0lOREVY XS5QYXRobmFtZSwNCj4gKyAgICAgIFNTRFRfQVJNX1ZFWFBfT2Zmc2V0VGFibGVbT0ZGU0VUX1RB QkxFX1VJRF9JTkRFWF0uTmFtZXNlZ09mZnNldCwNCj4gKyAgICAgIFNTRFRfQVJNX1ZFWFBfT2Zm c2V0VGFibGVbT0ZGU0VUX1RBQkxFX1VJRF9JTkRFWF0uT2Zmc2V0LA0KPiArICAgICAgU1NEVF9B Uk1fVkVYUF9PZmZzZXRUYWJsZVtPRkZTRVRfVEFCTEVfVUlEX0lOREVYXS5WYWx1ZQ0KPiArICAg ICAgKSk7DQo+ICsNCj4gKyAgICBQYXRjaERhdGEgPSBUYWJsZURhdGEgKw0KPiArICAgICAgU1NE VF9BUk1fVkVYUF9PZmZzZXRUYWJsZVtPRkZTRVRfVEFCTEVfVUlEX0lOREVYXS5PZmZzZXQ7DQo+ ICsgICAgUGF0Y2hEYXRhWzBdID0gQWNwaVByb2Nlc3NvclVpZDsNCj4gKyAgfSAvLyBmb3INCj4g Kw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArDQo+ICtlcnJvcl9oYW5kbGVyOg0KPiArICAvLyBG cmVlIHVwIHRoZSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGluIGNhc2Ugb2YgYW4gZXJyb3INCj4gKyAg RnJlZU9lbUNwdVRhYmxlUmVzb3VyY2VzRXggKA0KPiArICAgIFRoaXMsDQo+ICsgICAgQWNwaVRh YmxlSW5mbywNCj4gKyAgICBDZmdNZ3JQcm90b2NvbCwNCj4gKyAgICBUYWJsZSwNCj4gKyAgICAq VGFibGVDb3VudA0KPiArICAgICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4g Ky8qKiBUaGlzIG1hY3JvIGRlZmluZXMgdGhlIFJhdyBHZW5lcmF0b3IgcmV2aXNpb24uDQo+ICsq Lw0KPiArI2RlZmluZSBPRU1fQ1BVX0dFTkVSQVRPUl9SRVZJU0lPTiBDUkVBVEVfUkVWSVNJT04g KDEsIDApDQo+ICsNCj4gKy8qKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgUmF3IFRhYmxlIEdlbmVy YXRvci4NCj4gKyovDQo+ICtTVEFUSUMNCj4gK0NPTlNUDQo+ICtBQ1BJX1RBQkxFX0dFTkVSQVRP UiBPZW1DcHVHZW5lcmF0b3IgPSB7DQo+ICsgIC8vIEdlbmVyYXRvciBJRA0KPiArICBDUkVBVEVf T0VNX0FDUElfVEFCTEVfR0VOX0lEIChPRU1fQUNQSV9UQUJMRV9JRF9DUFUpLA0KPiArICAvLyBH ZW5lcmF0b3IgRGVzY3JpcHRpb24NCj4gKyAgTCJBQ1BJLk9FTS5DUFUuR0VORVJBVE9SIiwNCj4g KyAgLy8gQUNQSSBUYWJsZSBTaWduYXR1cmUgLSBVbnVzZWQNCj4gKyAgMCwNCj4gKyAgLy8gQUNQ SSBUYWJsZSBSZXZpc2lvbiAtIFVudXNlZA0KPiArICAwLA0KPiArICAvLyBDcmVhdG9yIElEDQo+ ICsgIFRBQkxFX0dFTkVSQVRPUl9DUkVBVE9SX0lEX0FSTSwNCj4gKyAgLy8gQ3JlYXRvciBSZXZp c2lvbg0KPiArICBPRU1fQ1BVX0dFTkVSQVRPUl9SRVZJU0lPTiwNCj4gKyAgLy8gQnVpbGQgVGFi bGUgZnVuY3Rpb24gbm90IGltcGxlbWVudGVkDQo+ICsgIC8vIGFzIHRoaXMgZ2VuZXJhdG9yIGlt cGxlbWVudHMgdGhlIGV4dGVuZGVkDQo+ICsgIC8vIHZlcnNpb24NCj4gKyAgTlVMTCwNCj4gKyAg TlVMTCwNCj4gKyAgLy8gRXh0ZW5kZWQgYnVpbGQgdGFibGUgZnVuY3Rpb24NCj4gKyAgQnVpbGRP ZW1DcHVUYWJsZUV4LA0KPiArICAvLyBGcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgZXh0ZW5k ZWQgYnVpbGQgdGFibGUgaW50ZXJmYWNlDQo+ICsgIEZyZWVPZW1DcHVUYWJsZVJlc291cmNlc0V4 DQo+ICt9Ow0KPiArDQo+ICsvKiogUmVnaXN0ZXIgdGhlIEdlbmVyYXRvciB3aXRoIHRoZSBBQ1BJ IFRhYmxlIEZhY3RvcnkuDQo+ICsNCj4gKyAgQHBhcmFtIFtpbl0gIEltYWdlSGFuZGxlICBUaGUg aGFuZGxlIHRvIHRoZSBpbWFnZS4NCj4gKyAgQHBhcmFtIFtpbl0gIFN5c3RlbVRhYmxlICBQb2lu dGVyIHRvIHRoZSBTeXN0ZW0gVGFibGUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIEdlbmVyYXRvciBpcyByZWdpc3RlcmVkLg0KPiArICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiBBIHBhcmFtZXRlciBpcyBpbnZhbGlkLg0KPiArICBAcmV0dmFsIEVG SV9BTFJFQURZX1NUQVJURUQgICBUaGUgR2VuZXJhdG9yIGZvciB0aGUgVGFibGUgSUQNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYWxyZWFkeSByZWdpc3RlcmVkLg0KPiAr KiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0FjcGlPZW1DcHVHZW5lcmF0b3JMaWJD b25zdHJ1Y3RvciAoDQo+ICsgIElOIENPTlNUIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgSW1h Z2VIYW5kbGUsDQo+ICsgIElOICAgICAgIEVGSV9TWVNURU1fVEFCTEUgICogQ09OU1QgU3lzdGVt VGFibGUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsgIC8vIExv Y2F0ZSB0aGUgRHluYW1pYyBUYWJsZSBGYWN0b3J5DQo+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRl UHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgJmdFZGtpaUR5bmFtaWNUYWJsZUZhY3Rv cnlQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAg ICAgICAgICAgKFZPSUQqKikmbVRhYmxlRmFjdG9yeVByb3RvY29sDQo+ICsgICAgICAgICAgICAg ICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKCgN Cj4gKyAgICAgIERFQlVHX0VSUk9SLA0KPiArICAgICAgIkVSUk9SOiBGYWlsZWQgdG8gZmluZCBE eW5hbWljIFRhYmxlIEZhY3RvcnkgcHJvdG9jb2wuIiBcDQo+ICsgICAgICAiIFN0YXR1cyA9ICVy XG4iLA0KPiArICAgICAgU3RhdHVzDQo+ICsgICAgICApKTsNCj4gKyAgICByZXR1cm4gU3RhdHVz Ow0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gbVRhYmxlRmFjdG9yeVByb3RvY29sLT5SZWdp c3RlckFjcGlUYWJsZUdlbmVyYXRvciANCj4gKygmT2VtQ3B1R2VuZXJhdG9yKTsNCj4gKyAgREVC VUcgKChERUJVR19JTkZPLCAiT0VNLUNQVTogUmVnaXN0ZXIgR2VuZXJhdG9yLiBTdGF0dXMgPSAl clxuIiwgDQo+ICtTdGF0dXMpKTsNCj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4g KyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqIERlcmVnaXN0ZXIgdGhlIEdlbmVy YXRvciBmcm9tIHRoZSBBQ1BJIFRhYmxlIEZhY3RvcnkuDQo+ICsNCj4gKyAgQHBhcmFtIFtpbl0g IEltYWdlSGFuZGxlICBUaGUgaGFuZGxlIHRvIHRoZSBpbWFnZS4NCj4gKyAgQHBhcmFtIFtpbl0g IFN5c3RlbVRhYmxlICBQb2ludGVyIHRvIHRoZSBTeXN0ZW0gVGFibGUuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIEdlbmVyYXRvciBpcyBkZXJlZ2lzdGVyZWQu DQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEEgcGFyYW1ldGVyIGlzIGludmFs aWQuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBHZW5lcmF0b3IgaXMg bm90IHJlZ2lzdGVyZWQuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQWNw aU9lbUNwdUdlbmVyYXRvckxpYkRlc3RydWN0b3IgKA0KPiArICBJTiBDT05TVCBFRklfSEFORExF ICAgICAgICAgICAgICAgIEltYWdlSGFuZGxlLA0KPiArICBJTiAgICAgICBFRklfU1lTVEVNX1RB QkxFICAqIENPTlNUIFN5c3RlbVRhYmxlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAg U3RhdHVzOw0KPiArICBpZiAobVRhYmxlRmFjdG9yeVByb3RvY29sICE9IE5VTEwpIHsNCj4gKyAg ICBTdGF0dXMgPSBtVGFibGVGYWN0b3J5UHJvdG9jb2wtPkRlcmVnaXN0ZXJBY3BpVGFibGVHZW5l cmF0b3IgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmT2VtQ3B1 R2VuZXJhdG9yDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ ICsgIH0gZWxzZSB7DQo+ICsgICAgU3RhdHVzID0gRUZJX05PVF9GT1VORDsNCj4gKyAgfQ0KPiAr ICBERUJVRyAoKERFQlVHX0lORk8sICJPRU0tQ1BVOiBEZXJlZ2lzdGVyIEdlbmVyYXRvci4gU3Rh dHVzID0gJXJcbiIsIA0KPiArU3RhdHVzKSk7DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1 cyk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+IGRpZmYgLS1naXQgDQo+IGEvUGxhdGZv cm0vQVJNL1ZFeHByZXNzUGtnL0NvbmZpZ3VyYXRpb25NYW5hZ2VyL0FjcGlPZW1DcHVHZW5lcmF0 b3JMaWINCj4gL09lbUNwdUdlbmVyYXRvci5oIA0KPiBiL1BsYXRmb3JtL0FSTS9WRXhwcmVzc1Br Zy9Db25maWd1cmF0aW9uTWFuYWdlci9BY3BpT2VtQ3B1R2VuZXJhdG9yTGliDQo+IC9PZW1DcHVH ZW5lcmF0b3IuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCANCj4gMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDlmNzUyMDI4NDBhZjNlMzdkM2FjNGIz MWE2ZA0KPiA5YjFkOTY3MzA3MmYNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9QbGF0Zm9ybS9B Uk0vVkV4cHJlc3NQa2cvQ29uZmlndXJhdGlvbk1hbmFnZXIvQWNwaU9lbUNwdUdlbmVyYXRvDQo+ ICsrKyByTGliL09lbUNwdUdlbmVyYXRvci5oDQo+IEBAIC0wLDAgKzEsMjMgQEANCj4gKy8qKiBA ZmlsZQ0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAxOCwgQVJNIExpbWl0ZWQuIEFsbCByaWdo dHMgcmVzZXJ2ZWQuDQo+ICsNCj4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5n IG1hdGVyaWFscyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIA0KPiArIGF2YWlsYWJsZSB1bmRlciB0 aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlICB3aGljaCANCj4gKyBh Y2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vu c2UgbWF5IGJlIA0KPiArIGZvdW5kIGF0ICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMv YnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5E RVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgDQo+ICsgQkFTSVMsICBXSVRIT1VUIFdB UlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBP UiBJTVBMSUVELg0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2lmbmRlZiBPRU1DUFVHRU5FUkFUT1Jf SF9fDQo+ICsjZGVmaW5lIE9FTUNQVUdFTkVSQVRPUl9IX18NCj4gKw0KPiArI2RlZmluZSBPRU1f QUNQSV9UQUJMRV9JRF9DUFUgICAgICAgMQ0KPiArDQo+ICsjZGVmaW5lIE9GRlNFVF9UQUJMRV9E RVZJQ0VfSU5ERVggICAxDQo+ICsjZGVmaW5lIE9GRlNFVF9UQUJMRV9VSURfSU5ERVggICAgICAy DQo+ICsNCj4gKyNlbmRpZiAvLyBPRU1DUFVHRU5FUkFUT1JfSF9fDQo+IGRpZmYgLS1naXQgDQo+ IGEvUGxhdGZvcm0vQVJNL1ZFeHByZXNzUGtnL0NvbmZpZ3VyYXRpb25NYW5hZ2VyL0FjcGlPZW1D cHVHZW5lcmF0b3JMaWINCj4gL1NzZHRDcHVUZW1wbGF0ZS5hc2wgDQo+IGIvUGxhdGZvcm0vQVJN L1ZFeHByZXNzUGtnL0NvbmZpZ3VyYXRpb25NYW5hZ2VyL0FjcGlPZW1DcHVHZW5lcmF0b3JMaWIN Cj4gL1NzZHRDcHVUZW1wbGF0ZS5hc2wNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgg DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExZDkwMjUwNDRl MGI4NTNhZjEyZTZjYzNkZDcNCj4gZjNjZmU4N2ExZWNiDQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvUGxhdGZvcm0vQVJNL1ZFeHByZXNzUGtnL0NvbmZpZ3VyYXRpb25NYW5hZ2VyL0FjcGlPZW1D cHVHZW5lcmF0bw0KPiArKysgckxpYi9Tc2R0Q3B1VGVtcGxhdGUuYXNsDQo+IEBAIC0wLDAgKzEs MjUgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBTU0RUIFRlbXBsYXRlIGZvciBDUFUNCj4gKw0KPiAr ICBDb3B5cmlnaHQgKGMpIDIwMTgsIEFSTSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0K PiArICAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgIGFyZSBs aWNlbnNlZCBhbmQgDQo+ICsgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZSAgDQo+ICsgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIA0KPiArIG1heSBiZSBm b3VuZCBhdCAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0K PiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5T RSBPTiBBTiAiQVMgSVMiIA0KPiArIEJBU0lTLCAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJF U0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0K PiArKiovDQo+ICsNCj4gK0RlZmluaXRpb25CbG9jaygiU3NkdENwdS5hbWwiLCAiU1NEVCIsIDEs ICJBUk1MVEQiLCAiQVJNLVZFWFAiLCAxKSB7DQo+ICsgIFNjb3BlKF9TQikgew0KPiArICAgIC8v DQo+ICsgICAgLy8gUHJvY2Vzc29yDQo+ICsgICAgLy8NCj4gKyAgICBEZXZpY2UoQ1A1QSkgew0K PiArICAgICAgTmFtZShfSElELCAiQUNQSTAwMDciKQ0KPiArICAgICAgTmFtZShfVUlELCAweEE1 KQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiAtLQ0KPiAnR3VpZChDRTE2NTY2OS0zRUYzLTQ5 M0YtQjg1RC02MTkwRUU1Qjk3NTkpJw0KPg0KPg0K