From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=104.47.2.62; helo=eur01-db5-obe.outbound.protection.outlook.com; envelope-from=evan.lloyd@arm.com; receiver=edk2-devel@lists.01.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0062.outbound.protection.outlook.com [104.47.2.62]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 435D922183C8D for ; Fri, 1 Dec 2017 08:29:08 -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; bh=fSfX1KU3hIP/yU2WXGryL7RWHOSWqTLwXdjeU7lFljs=; b=I5Z3L7XFD0lnoBTTQAHt9/7oVot96m78lJIJY3Q2vxzj+fa4/HOyPYQ62ep5v6xxAdY4m2JYkJ+rZOa5sucN6WDUhOGxOaaOtrZbzyhCbrNeaeRPvLjZQb/+5as5iWbK2uY1W2nuW7Jr82UwSNcQB3s2VZyn0Vp7kXg73/96sjg= Received: from AM4PR0801MB1444.eurprd08.prod.outlook.com (10.168.5.24) by AM4PR0801MB1443.eurprd08.prod.outlook.com (10.168.5.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.282.5; Fri, 1 Dec 2017 16:33:32 +0000 Received: from AM4PR0801MB1444.eurprd08.prod.outlook.com ([fe80::2953:37dd:2fcb:a418]) by AM4PR0801MB1444.eurprd08.prod.outlook.com ([fe80::2953:37dd:2fcb:a418%14]) with mapi id 15.20.0260.007; Fri, 1 Dec 2017 16:33:31 +0000 From: Evan Lloyd To: Ard Biesheuvel CC: "edk2-devel@lists.01.org" , "\"ard.biesheuvel@linaro.org\"@arm.com" <"ard.biesheuvel@linaro.org"@arm.com>, "\"leif.lindholm@linaro.org\"@arm.com" <"leif.lindholm@linaro.org"@arm.com>, "\"Matteo.Carlini@arm.com\"@arm.com" <"Matteo.Carlini@arm.com"@arm.com>, "\"nd@arm.com\"@arm.com" <"nd@arm.com"@arm.com> Thread-Topic: [PATCH 04/19] ArmPlatformPkg: LcdGraphicsOurputDxe: Add debug asserts Thread-Index: AQHTQ/WEa5djh95Z3ECbte6hBaR2naMu+GyQ Date: Fri, 1 Dec 2017 16:33:31 +0000 Message-ID: References: <20170926201529.11644-1-evan.lloyd@arm.com> <20170926201529.11644-5-evan.lloyd@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=Evan.Lloyd@arm.com; x-originating-ip: [217.140.96.140] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM4PR0801MB1443; 6:0r127AMbhL0vm5XL3QW0siJI7R4rY3LH9hmiVjsb7MJyZHdJ6XTJDffR5mpmar+5oNQTk5mB1ZRnG0Wtozq6ID4WGiVnzSnKLv5+GzACtiWGuIledkeHKHtuviJ6Kg7wOBj5/mDTGP8RzAWc3/IV9fj7moRVCU5EfrHW/T8jPQ+H6lVl0hT8FtXII0VhL5YxcLTY031k4ayDxU/GwuoXgKTgreUck3yBP6lY8OPA1UJomrxnek1+r8lzbNsWC7Wbnhlx/rAuhPRBc0qGG+XGZ0AHq84H2roapuvpXYfraCIb7EDicOViKvbRuCPY+ULkCPLy3ILj/B4LELk3KWcqd+qteVTra0zUN34/UyPC8jI=; 5:82SbtMy332igR76HeyxRXjoiG8qLPiG9oOMKGfVbfH+JbW2kj91/cQ0h2SM4M7/tbDuQL8WNrALHFNFzOYEDrvvpBJTLUQR3iDh7vcTcGQWilaP8H6AJk3JBNDCtxocGFKmhuha6dS357r1H8185l4hV4moC5VN9gprRi4qRN0Q=; 24:GqWB6LF+XoKoKn2ro/1Y0MV/3RhHsX0h3i4E17eem0JyPpfEO14OmORzB9sEcj0zLnTrLnk72tQjpJmIvSj8wXB0Qx8G1wP5sIDHdcsM0SQ=; 7:ebF8u+OKUMENQm1gsZ+IiEkygArCHtH4kTtgKgOvDbJmZ5I3AH5nCrpqXaIsp6e8i2iLaZWvlSgmDSjWQzzPmPIK0GujYVQj9YYXB4zi5wVdxP5u9g0rbZaLC8JQ95c37WaZjutRUQS31pdL2oFoPInrb4rdhhQ2nxtgy/HoN2ZJv6wRXsSpVY5nu0FigQYQC59vre41mycESkcQpHWukWFckeUVQxJREr7eGetp+1ovBWZJSdl4+W9R+rvHsW7k x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-correlation-id: 5374b7c2-5e57-4406-86fa-08d538d942a5 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(5600026)(4604075)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603286); SRVR:AM4PR0801MB1443; x-ms-traffictypediagnostic: AM4PR0801MB1443: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(162533806227266)(17755550239193); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231022)(93006095)(93001095)(6055026)(6041248)(20161123560025)(20161123555025)(20161123562025)(20161123558100)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:AM4PR0801MB1443; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM4PR0801MB1443; x-forefront-prvs: 05087F0C24 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(979002)(6009001)(39860400002)(376002)(346002)(366004)(199003)(189002)(24454002)(40434004)(13464003)(106356001)(105586002)(54356011)(478600001)(99286004)(76176011)(101416001)(9686003)(6506006)(6436002)(8936002)(53936002)(6246003)(97736004)(72206003)(14454004)(33656002)(7696005)(229853002)(81156014)(81166006)(8676002)(4326008)(66066001)(53546010)(2900100001)(575784001)(86362001)(5660300001)(74316002)(5890100001)(68736007)(25786009)(7736002)(2950100002)(6916009)(305945005)(189998001)(3660700001)(2906002)(316002)(55016002)(3280700002)(6116002)(3846002)(102836003)(5250100002)(19627235001)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR0801MB1443; H:AM4PR0801MB1444.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5374b7c2-5e57-4406-86fa-08d538d942a5 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Dec 2017 16:33:31.9058 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0801MB1443 Subject: Re: [PATCH 04/19] ArmPlatformPkg: LcdGraphicsOurputDxe: Add debug asserts X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 Dec 2017 16:29:09 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 UmVzcG9uc2VzIGlubGluZToNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9t OiBBcmQgQmllc2hldXZlbCBbbWFpbHRvOmFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmddDQo+IFNl bnQ6IDEzIE9jdG9iZXIgMjAxNyAwODozMw0KPiBUbzogRXZhbiBMbG95ZCA8RXZhbi5MbG95ZEBh cm0uY29tPg0KPiBDYzogZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc7ICJhcmQuYmllc2hldXZlbEBs aW5hcm8ub3JnIkBhcm0uY29tOw0KPiAibGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnIkBhcm0uY29t Ow0KPiAiTWF0dGVvLkNhcmxpbmlAYXJtLmNvbSJAYXJtLmNvbTsgIm5kQGFybS5jb20iQGFybS5j b20NCj4gU3ViamVjdDogUmU6IFtQQVRDSCAwNC8xOV0gQXJtUGxhdGZvcm1Qa2c6IExjZEdyYXBo aWNzT3VycHV0RHhlOiBBZGQNCj4gZGVidWcgYXNzZXJ0cw0KPg0KPiBPbiAyNiBTZXB0ZW1iZXIg MjAxNyBhdCAyMToxNSwgIDxldmFuLmxsb3lkQGFybS5jb20+IHdyb3RlOg0KPiA+IEZyb206IEdp cmlzaCBQYXRoYWsgPGdpcmlzaC5wYXRoYWtAYXJtLmNvbT4NCj4gPg0KPiA+IFRoaXMgY2hhbmdl IGFkZHMgc29tZSBkZWJ1ZyBhc3NlcnRpb25zIGUuZyB0byBjYXRjaCBOVUxMIHBvaW50ZXINCj4g PiBlcnJvcnMgbWlzc2luZyBpbiBQTDExTGNkIGFuZCBIZExjZCBtb2R1bGVzLg0KPiA+DQo+ID4g VGhpcyBjaGFuZ2UgYWxzbyBpbXByb3ZlcyByZWxhdGVkIGVycm9yIGhhbmRsaW5nIGNvZGUuDQo+ ID4NCj4gPiBDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBBZ3JlZW1l bnQgMS4xDQo+ID4gU2lnbmVkLW9mZi1ieTogR2lyaXNoIFBhdGhhayA8Z2lyaXNoLnBhdGhha0Bh cm0uY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEV2YW4gTGxveWQgPGV2YW4ubGxveWRAYXJtLmNv bT4NCj4gPiAtLS0NCj4gPg0KPiBBcm1QbGF0Zm9ybVBrZy9Bcm1WRXhwcmVzc1BrZy9MaWJyYXJ5 L0hkTGNkQXJtVkV4cHJlc3NMaWIvSGRMY2RBcg0KPiBtVkV4cHJlc3MuYyAgICAgICB8IDQ0ICsr KysrKysrKysrKysrKysrKy0tDQo+ID4NCj4gQXJtUGxhdGZvcm1Qa2cvQXJtVkV4cHJlc3NQa2cv TGlicmFyeS9QTDExMUxjZEFybVZFeHByZXNzTGliL1BMMTENCj4gMUxjZEFybVZFeHByZXNzLmMg fCA0MyArKysrKysrKysrKysrKysrKystDQo+ID4gIEFybVBsYXRmb3JtUGtnL0RyaXZlcnMvTGNk R3JhcGhpY3NPdXRwdXREeGUvSGRMY2QuYw0KPiB8ICA4ICsrLS0NCj4gPiAgQXJtUGxhdGZvcm1Q a2cvRHJpdmVycy9MY2RHcmFwaGljc091dHB1dER4ZS9QTDExMUxjZC5jDQo+IHwgIDggKystLQ0K PiA+ICA0IGZpbGVzIGNoYW5nZWQsIDkwIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQ0K PiA+DQo+ID4gZGlmZiAtLWdpdA0KPiA+DQo+IGEvQXJtUGxhdGZvcm1Qa2cvQXJtVkV4cHJlc3NQ a2cvTGlicmFyeS9IZExjZEFybVZFeHByZXNzTGliL0hkTGNkDQo+IEFybVZFDQo+ID4geHByZXNz LmMNCj4gPg0KPiBiL0FybVBsYXRmb3JtUGtnL0FybVZFeHByZXNzUGtnL0xpYnJhcnkvSGRMY2RB cm1WRXhwcmVzc0xpYi9IZExjZA0KPiBBcm1WRQ0KPiA+IHhwcmVzcy5jIGluZGV4DQo+ID4NCj4g Yjk4NTlhNTY5ODhmN2U1YmUwYWRiYWE0OTA0OGE2ODNmZTU4NmJmZS4uNThkZDlmMGM3N2UxYmM5 YWY1NTlhDQo+IDcxZDBjN2MNCj4gPiBjZTcyZDcxYzZkYTUgMTAwNjQ0DQo+ID4gLS0tDQo+ID4N Cj4gYS9Bcm1QbGF0Zm9ybVBrZy9Bcm1WRXhwcmVzc1BrZy9MaWJyYXJ5L0hkTGNkQXJtVkV4cHJl c3NMaWIvSGRMY2QNCj4gQXJtVkUNCj4gPiB4cHJlc3MuYw0KPiA+ICsrKw0KPiBiL0FybVBsYXRm b3JtUGtnL0FybVZFeHByZXNzUGtnL0xpYnJhcnkvSGRMY2RBcm1WRXhwcmVzc0xpYi9IZExjZA0K PiBBDQo+ID4gKysrIHJtVkV4cHJlc3MuYw0KPiA+IEBAIC0xNDAsNiArMTQwLDcgQEAgTGNkUGxh dGZvcm1Jbml0aWFsaXplRGlzcGxheSAoDQo+ID4gICAgKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJ1ZmZlciBpbiBieXRlcw0KPiA+ICAgICoNCj4gPiAgICAqIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICAgRnJhbWUgYnVmZmVyIG1lbW9yeSBhbGxvY2F0aW9uIHN1Y2Nl c3MuDQo+ID4gKyAgKiBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIFZyYW1CYXNlQWRk cmVzcyBvciBWcmFtU2l6ZQ0KPiBhcmUgTlVMTC4NCj4gPiAgICAqIEByZXR2YWwgIShFRklfU1VD Q0VTUykgICAgICAgICAgT3RoZXIgZXJyb3JzLg0KPiA+ICAqKi8NCj4gPiAgRUZJX1NUQVRVUw0K PiA+IEBAIC0xNTEsNiArMTUyLDEzIEBAIExjZFBsYXRmb3JtR2V0VnJhbSAoDQo+ID4gICAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICAgIEVGSV9BTExPQ0FURV9UWVBFICAg ICAgIEFsbG9jYXRpb25UeXBlOw0KPiA+DQo+ID4gKyAgLy8gQ2hlY2sgVnJhbUJhc2VBZGRyZXNz IGFuZCBWcmFtU2l6ZSBhcmUgbm90IE5VTEwuDQo+ID4gKyAgaWYgKFZyYW1CYXNlQWRkcmVzcyA9 PSBOVUxMIHx8IFZyYW1TaXplID09IE5VTEwpIHsNCj4gPiArICAgIEFTU0VSVCAoVnJhbUJhc2VB ZGRyZXNzICE9IE5VTEwpOw0KPiA+ICsgICAgQVNTRVJUIChWcmFtU2l6ZSAhPSBOVUxMKTsNCj4g PiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiAgICAvLyBTZXQgdGhlIHZyYW0gc2l6ZQ0KPiA+ICAgICpWcmFtU2l6ZSA9IExDRF9WUkFNX1NJ WkU7DQo+ID4NCj4gPiBAQCAtMTY5LDYgKzE3Nyw3IEBAIExjZFBsYXRmb3JtR2V0VnJhbSAoDQo+ ID4gICAgICAgICAgICAgICAgICAgIFZyYW1CYXNlQWRkcmVzcw0KPiA+ICAgICAgICAgICAgICAg ICAgICApOw0KPiA+ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIEFTU0VS VF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgIH0N Cj4gPg0KPiA+IEBAIC0xNzksOCArMTg4LDggQEAgTGNkUGxhdGZvcm1HZXRWcmFtICgNCj4gPiAg ICAgICAgICAgICAgICAgICAgKlZyYW1TaXplLA0KPiA+ICAgICAgICAgICAgICAgICAgICBFRklf TUVNT1JZX1dDDQo+ID4gICAgICAgICAgICAgICAgICAgICk7DQo+ID4gLSAgQVNTRVJUX0VGSV9F UlJPUiAoU3RhdHVzKTsNCj4gPiAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAg ICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPg0KPiBXaGF0IGlzIHRoZSBwb2ludCBvZiB0 aGlzIGNoYW5nZT8NCltbRXZhbiBMbG95ZF1dIEl0IGlzIGEgbWlub3IgZWZmaWNpZW5jeSBpbXBy b3ZlbWVudC4gIFNpbmNlIHRoZSBBU1NFUlQgY2FuIG9ubHkgZmlyZSB3aGVuIHRoZSBpZiBjb25k aXRpb24gaXMgdHJ1ZSwgaXQgcmVtb3ZlcyBhIGR1cGxpY2F0ZWQgdGVzdCBmcm9tIHRoZSBtYWlu IChub24tZXJyb3IpIGNvZGUgZmxvdy4gIFRoaXMgaXMgaXJyZWxldmFudCBvbiBoYXJkd2FyZSwg YnV0IGFjdHVhbGx5IHNpZ25pZmljYW50IHdoZW4gcnVubmluZyBkZWJ1ZyBidWlsZHMgb24gYW4g ZW11bGF0b3IgZW52aXJvbm1lbnQuDQoNCj4NCj4gPiAgICAgIGdCUy0+RnJlZVBhZ2VzICgqVnJh bUJhc2VBZGRyZXNzLCBFRklfU0laRV9UT19QQUdFUyAoKlZyYW1TaXplKSk7DQo+ID4gICAgICBy ZXR1cm4gU3RhdHVzOw0KPiA+ICAgIH0NCj4gPiBAQCAtMjE1LDYgKzIyNCw3IEBAIExjZFBsYXRm b3JtU2V0TW9kZSAoDQo+ID4gICAgRUZJX1NUQVRVUyAgICAgICAgICAgIFN0YXR1czsNCj4gPg0K PiA+ICAgIGlmIChNb2RlTnVtYmVyID49IExjZFBsYXRmb3JtR2V0TWF4TW9kZSAoKSkgew0KPiA+ ICsgICAgQVNTRVJUIChNb2RlTnVtYmVyIDwgTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpKTsNCj4g PiAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgfQ0KPiA+DQo+ID4g QEAgLTI2NCw2ICsyNzQsNyBAQCBMY2RQbGF0Zm9ybVNldE1vZGUgKA0KPiA+ICAgICoNCj4gPiAg ICAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgU3VjY2VzcyBpZiB0aGUgcmVxdWVz dGVkIG1vZGUgaXMgZm91bmQuDQo+ID4gICAgKiBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiAgIFJlcXVlc3RlZCBtb2RlIG5vdCBmb3VuZC4NCj4gPiArICAqIEByZXR2YWwgRUZJX0lOVkFM SURfUEFSQU1FVEVSICAgSW5mbyBpcyBOVUxMLg0KPiA+ICAqKi8NCj4gPiAgRUZJX1NUQVRVUw0K PiA+ICBMY2RQbGF0Zm9ybVF1ZXJ5TW9kZSAoDQo+ID4gQEAgLTI3MSw3ICsyODIsOSBAQCBMY2RQ bGF0Zm9ybVF1ZXJ5TW9kZSAoDQo+ID4gICAgT1VUIEVGSV9HUkFQSElDU19PVVRQVVRfTU9ERV9J TkZPUk1BVElPTiAqIENPTlNUICBJbmZvDQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4gLSAgaWYgKE1v ZGVOdW1iZXIgPj0gTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpKSB7DQo+ID4gKyAgaWYgKE1vZGVO dW1iZXIgPj0gTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpIHx8IEluZm8gPT0gTlVMTCkgew0KPiA+ ICsgICAgQVNTRVJUIChNb2RlTnVtYmVyIDwgTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpKTsNCj4N Cj4gUGxlYXNlIGRvbid0IHB1dCBhbnl0aGluZyB0aGF0IG1heSBoYXZlIGEgc2lkZSBlZmZlY3Qg aW5zaWRlIEFTU0VSVCAoKSwgc2luY2UNCj4gdGhleSBhcmUgZHJvcHBlZCBmcm9tIFJFTEVBU0Ug YnVpbGRzLiBZb3UgY2FuIGp1c3QgdXNlIEFTU0VSVCAoRkFMU0UpDQo+IGhlcmUsIG9yIHVzZSBh IHRlbXAgdmFyaWFibGUuDQoNCiBbW0V2YW4gTGxveWRdXSBBZ3JlZWQNCg0KPg0KPg0KPiA+ICsg ICAgQVNTRVJUIChJbmZvICE9IE5VTEwpOw0KPiA+ICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4gPiAgICB9DQo+ID4NCj4gPiBAQCAtMzM0LDYgKzM0NywyOCBAQCBMY2RQbGF0 Zm9ybUdldFRpbWluZ3MgKA0KPiA+ICAgICkNCj4gPiAgew0KPiA+ICAgIGlmIChNb2RlTnVtYmVy ID49IExjZFBsYXRmb3JtR2V0TWF4TW9kZSAoKSkgew0KPiA+ICsgICAgQVNTRVJUIChNb2RlTnVt YmVyIDwgTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpKTsNCj4NCj4gc2FtZSBoZXJlDQpbW0V2YW4g TGxveWRdXSBBZ3JlZWQNCj4NCj4gPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoSFJlcyA9PSBOVUxMDQo+ID4gKyAgICB8fCBI U3luYyA9PSBOVUxMDQo+ID4gKyAgICB8fCBIQmFja1BvcmNoID09IE5VTEwNCj4gPiArICAgIHx8 IEhGcm9udFBvcmNoID09IE5VTEwNCj4gPiArICAgIHx8IFZSZXMgPT0gTlVMTA0KPiA+ICsgICAg fHwgVlN5bmMgPT0gTlVMTA0KPiA+ICsgICAgfHwgVkJhY2tQb3JjaCA9PSBOVUxMDQo+ID4gKyAg ICB8fCBWRnJvbnRQb3JjaCA9PSBOVUxMKQ0KPiA+ICsgIHsNCj4gPiArICAgIC8vIE9uZSBvZiB0 aGUgcG9pbnRlcnMgaXMgTlVMTA0KPiA+ICsgICAgQVNTRVJUIChIUmVzICE9IE5VTEwpOw0KPiA+ ICsgICAgQVNTRVJUIChIU3luYyAhPSBOVUxMKTsNCj4gPiArICAgIEFTU0VSVCAoSEJhY2tQb3Jj aCAhPSBOVUxMKTsNCj4gPiArICAgIEFTU0VSVCAoSEZyb250UG9yY2ggIT0gTlVMTCk7DQo+ID4g KyAgICBBU1NFUlQgKFZSZXMgIT0gTlVMTCk7DQo+ID4gKyAgICBBU1NFUlQgKFZTeW5jICE9IE5V TEwpOw0KPiA+ICsgICAgQVNTRVJUIChWQmFja1BvcmNoICE9IE5VTEwpOw0KPiA+ICsgICAgQVNT RVJUIChWRnJvbnRQb3JjaCAhPSBOVUxMKTsNCj4gPiAgICAgIHJldHVybiBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQo+ID4gICAgfQ0KPiA+DQo+ID4gQEAgLTM1Niw2ICszOTEsNyBAQCBMY2RQbGF0 Zm9ybUdldFRpbWluZ3MgKA0KPiA+ICAgICoNCj4gPiAgICAqIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICAgVGhlIHJlcXVlc3RlZCBtb2RlIGlzIGZvdW5kLg0KPiA+ICAgICogQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBSZXF1ZXN0ZWQgbW9kZSBub3QgZm91bmQuDQo+ID4g KyAgKiBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIEJwcCBpcyBOVUxMLg0KPiA+ICAq Ki8NCj4gPiAgRUZJX1NUQVRVUw0KPiA+ICBMY2RQbGF0Zm9ybUdldEJwcCAoDQo+ID4gQEAgLTM2 Myw3ICszOTksOSBAQCBMY2RQbGF0Zm9ybUdldEJwcCAoDQo+ID4gICAgT1VUIExDRF9CUFAgKiBD T05TVCAgICAgICAgICAgICAgICAgICAgQnBwDQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4gLSAgaWYg KE1vZGVOdW1iZXIgPj0gTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpKSB7DQo+ID4gKyAgaWYgKE1v ZGVOdW1iZXIgPj0gTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpIHx8IEJwcCA9PSBOVUxMKSB7DQo+ ID4gKyAgICBBU1NFUlQgKE1vZGVOdW1iZXIgPCBMY2RQbGF0Zm9ybUdldE1heE1vZGUgKCkpOw0K PiA+ICsgICAgQVNTRVJUIChCcHAgIT0gTlVMTCk7DQo+ID4gICAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPiA+ICAgIH0NCj4gPg0KPiA+IGRpZmYgLS1naXQNCj4gPg0KPiBhL0Fy bVBsYXRmb3JtUGtnL0FybVZFeHByZXNzUGtnL0xpYnJhcnkvUEwxMTFMY2RBcm1WRXhwcmVzc0xp Yi9QTDENCj4gMTFMYw0KPiA+IGRBcm1WRXhwcmVzcy5jDQo+ID4NCj4gYi9Bcm1QbGF0Zm9ybVBr Zy9Bcm1WRXhwcmVzc1BrZy9MaWJyYXJ5L1BMMTExTGNkQXJtVkV4cHJlc3NMaWIvUEwxDQo+IDEx TGMNCj4gPiBkQXJtVkV4cHJlc3MuYyBpbmRleA0KPiA+DQo+IDZhZTEzZjA2ZDhiMzk2ZWExYzY3 ZjBiY2Q3MzVhOWQ3MGY0NzY0MDAuLjVhNGFiZDRjNmY5ZTg0ZDNkNjkwYQ0KPiBmNzIzM2MxDQo+ ID4gY2ViZmUxYWQzMzliIDEwMDY0NA0KPiA+IC0tLQ0KPiA+DQo+IGEvQXJtUGxhdGZvcm1Qa2cv QXJtVkV4cHJlc3NQa2cvTGlicmFyeS9QTDExMUxjZEFybVZFeHByZXNzTGliL1BMMQ0KPiAxMUxj DQo+ID4gZEFybVZFeHByZXNzLmMNCj4gPiArKysNCj4gYi9Bcm1QbGF0Zm9ybVBrZy9Bcm1WRXhw cmVzc1BrZy9MaWJyYXJ5L1BMMTExTGNkQXJtVkV4cHJlc3NMaWIvUEwxDQo+ID4gKysrIDExTGNk QXJtVkV4cHJlc3MuYw0KPiA+IEBAIC0xOTEsNiArMTkxLDcgQEAgTGNkUGxhdGZvcm1Jbml0aWFs aXplRGlzcGxheSAoDQo+ID4gICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1 ZmZlciBpbiBieXRlcw0KPiA+ICAgICoNCj4gPiAgICAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICAgRnJhbWUgYnVmZmVyIG1lbW9yeSBhbGxvY2F0aW9uIHN1Y2Nlc3MuDQo+ID4gKyAg KiBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIFZyYW1CYXNlQWRkcmVzcyBvciBWcmFt U2l6ZSBpcw0KPiBOVUxMLg0KPiA+ICAgICogQHJldHZhbCAhKEVGSV9TVUNDRVNTKSAgICAgICAg ICBPdGhlciBlcnJvcnMuDQo+ID4gICoqLw0KPiA+ICBFRklfU1RBVFVTDQo+ID4gQEAgLTIwMyw2 ICsyMDQsMTMgQEAgTGNkUGxhdGZvcm1HZXRWcmFtICgNCj4gPg0KPiA+ICAgIFN0YXR1cyA9IEVG SV9TVUNDRVNTOw0KPiA+DQo+ID4gKyAgLy8gQ2hlY2sgVnJhbUJhc2VBZGRyZXNzIGFuZCBWcmFt U2l6ZSBhcmUgbm90IE5VTEwuDQo+ID4gKyAgaWYgKFZyYW1CYXNlQWRkcmVzcyA9PSBOVUxMIHx8 IFZyYW1TaXplID09IE5VTEwpIHsNCj4gPiArICAgIEFTU0VSVCAoVnJhbUJhc2VBZGRyZXNzICE9 IE5VTEwpOw0KPiA+ICsgICAgQVNTRVJUIChWcmFtU2l6ZSAhPSBOVUxMKTsNCj4gPiArICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAgICAvLyBJ cyBpdCBvbiB0aGUgbW90aGVyYm9hcmQgb3Igb24gdGhlIGRhdWdodGVyYm9hcmQ/DQo+ID4gICAg c3dpdGNoIChQTDExMV9DTENEX1NJVEUpIHsNCj4gPg0KPiA+IEBAIC0yMjMsNiArMjMxLDcgQEAg TGNkUGxhdGZvcm1HZXRWcmFtICgNCj4gPiAgICAgICAgICAgICAgICAgICAgICBWcmFtQmFzZUFk ZHJlc3MNCj4gPiAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ ICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICAgfQ0KPiA+DQo+ID4gQEAgLTIzMyw4ICsy NDIsOCBAQCBMY2RQbGF0Zm9ybUdldFZyYW0gKA0KPiA+ICAgICAgICAgICAgICAgICAgICAgICpW cmFtU2l6ZSwNCj4gPiAgICAgICAgICAgICAgICAgICAgICBFRklfTUVNT1JZX1dDDQo+ID4gICAg ICAgICAgICAgICAgICAgICAgKTsNCj4gPiAtICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7 DQo+ID4gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIEFTU0VSVF9F RklfRVJST1IgKFN0YXR1cyk7DQo+DQo+IFBsZWFzZSBkcm9wIHRoaXMgY2hhbmdlDQoNCiBbW0V2 YW4gTGxveWRdXSBBcyBzdGF0ZWQgYWJvdmUsIHRoaXMgaXMgbm90IGluY29uc2VxdWVudGlhbCBm b3Igc29tZSB1c2UgY2FzZXMuICBUaGUgQVNTRVJUIGNhbiBvbmx5IGZpcmUgd2hlbiB0aGUgaWYg aXMgc2F0aXNmaWVkLCBzbyBtb3ZpbmcgdGhlIEFTU0VSVCByZWR1Y2VzIHRoZSBudW1iZXIgb2Yg dGVzdHMgZXhlY3V0ZWQgaW4gbm9ybWFsIGV4ZWN1dGlvbiAoZGVwZW5kaW5nIG9uIG9wdGltaXNh dGlvbiBsZXZlbCkuDQoNCj4NCj4gPiAgICAgICAgZ0JTLT5GcmVlUGFnZXMgKCpWcmFtQmFzZUFk ZHJlc3MsIEVGSV9TSVpFX1RPX1BBR0VTDQo+ICgqVnJhbVNpemUpKTsNCj4gPiAgICAgICAgcmV0 dXJuIFN0YXR1czsNCj4gPiAgICAgIH0NCj4gPiBAQCAtMjkzLDYgKzMwMiw3IEBAIExjZFBsYXRm b3JtU2V0TW9kZSAoDQo+ID4gICAgVUlOVDMyICAgICAgICAgICAgICAgIFN5c0lkOw0KPiA+DQo+ ID4gICAgaWYgKE1vZGVOdW1iZXIgPj0gTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpKSB7DQo+ID4g KyAgICBBU1NFUlQgKE1vZGVOdW1iZXIgPCBMY2RQbGF0Zm9ybUdldE1heE1vZGUgKCkpOw0KPg0K PiBObyBmdW5jdGlvbiBjYWxscyBpbnNpZGUgQVNTRVJUICgpIHBsZWFzZQ0KW1tFdmFuIExsb3lk XV0gQWdyZWVkDQoNCj4NCj4gPiAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ ID4gICAgfQ0KPiA+DQo+ID4gQEAgLTM1OSw2ICszNjksNyBAQCBMY2RQbGF0Zm9ybVNldE1vZGUg KA0KPiA+ICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob24gc3VjY2Vzcyku DQo+ID4gICAgKg0KPiA+ICAgICogQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBTdWNj ZXNzIGlmIHRoZSByZXF1ZXN0ZWQgbW9kZSBpcyBmb3VuZC4NCj4gPiArICAqIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSICAgSW5mbyBpcyBOVUxMLg0KPiA+ICAgICogQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgICBSZXF1ZXN0ZWQgbW9kZSBub3QgZm91bmQuDQo+ID4gICoqLw0K PiA+ICBFRklfU1RBVFVTDQo+ID4gQEAgLTM2Nyw3ICszNzgsOSBAQCBMY2RQbGF0Zm9ybVF1ZXJ5 TW9kZSAoDQo+ID4gICAgT1VUIEVGSV9HUkFQSElDU19PVVRQVVRfTU9ERV9JTkZPUk1BVElPTiAq IENPTlNUIEluZm8NCj4gPiAgICApDQo+ID4gIHsNCj4gPiAtICBpZiAoTW9kZU51bWJlciA+PSBM Y2RQbGF0Zm9ybUdldE1heE1vZGUgKCkpIHsNCj4gPiArICBpZiAoTW9kZU51bWJlciA+PSBMY2RQ bGF0Zm9ybUdldE1heE1vZGUgKCkgfHwgSW5mbyA9PSBOVUxMKSB7DQo+ID4gKyAgICBBU1NFUlQg KE1vZGVOdW1iZXIgPCBMY2RQbGF0Zm9ybUdldE1heE1vZGUgKCkpOw0KPiA+ICsgICAgQVNTRVJU IChJbmZvICE9IE5VTEwpOw0KPiA+ICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4gPiAgICB9DQo+ID4NCj4gPiBAQCAtNDE1LDYgKzQyOCw3IEBAIExjZFBsYXRmb3JtUXVlcnlN b2RlICgNCj4gPiAgICAqDQo+ID4gICAgKiBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg IFN1Y2Nlc3MgaWYgdGhlIHJlcXVlc3RlZCBtb2RlIGlzIGZvdW5kLg0KPiA+ICAgICogQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBSZXF1ZXN0ZWQgbW9kZSBub3QgZm91bmQuDQo+ID4g KyAgKiBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIE9uZSBvZiB0aGUgT1VUIHBhcmFt ZXRlcnMgaXMNCj4gTlVMTC4NCj4gPiAgKiovDQo+ID4gIEVGSV9TVEFUVVMNCj4gPiAgTGNkUGxh dGZvcm1HZXRUaW1pbmdzICgNCj4gPiBAQCAtNDMwLDYgKzQ0NCwyOCBAQCBMY2RQbGF0Zm9ybUdl dFRpbWluZ3MgKA0KPiA+ICAgICkNCj4gPiAgew0KPiA+ICAgIGlmIChNb2RlTnVtYmVyID49IExj ZFBsYXRmb3JtR2V0TWF4TW9kZSAoKSkgew0KPiA+ICsgICAgQVNTRVJUIChNb2RlTnVtYmVyIDwg TGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpKTsNCj4gPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoSFJlcyA9PSBOVUxMDQo+ID4g KyAgICB8fCBIU3luYyA9PSBOVUxMDQo+ID4gKyAgICB8fCBIQmFja1BvcmNoID09IE5VTEwNCj4g PiArICAgIHx8IEhGcm9udFBvcmNoID09IE5VTEwNCj4gPiArICAgIHx8IFZSZXMgPT0gTlVMTA0K PiA+ICsgICAgfHwgVlN5bmMgPT0gTlVMTA0KPiA+ICsgICAgfHwgVkJhY2tQb3JjaCA9PSBOVUxM DQo+ID4gKyAgICB8fCBWRnJvbnRQb3JjaCA9PSBOVUxMKQ0KPiA+ICsgIHsNCj4gPiArICAgIC8v IE9uZSBvZiB0aGUgcG9pbnRlcnMgaXMgTlVMTA0KPiA+ICsgICAgQVNTRVJUIChIUmVzICE9IE5V TEwpOw0KPiA+ICsgICAgQVNTRVJUIChIU3luYyAhPSBOVUxMKTsNCj4gPiArICAgIEFTU0VSVCAo SEJhY2tQb3JjaCAhPSBOVUxMKTsNCj4gPiArICAgIEFTU0VSVCAoSEZyb250UG9yY2ggIT0gTlVM TCk7DQo+ID4gKyAgICBBU1NFUlQgKFZSZXMgIT0gTlVMTCk7DQo+ID4gKyAgICBBU1NFUlQgKFZT eW5jICE9IE5VTEwpOw0KPiA+ICsgICAgQVNTRVJUIChWQmFja1BvcmNoICE9IE5VTEwpOw0KPiA+ ICsgICAgQVNTRVJUIChWRnJvbnRQb3JjaCAhPSBOVUxMKTsNCj4gPiAgICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgfQ0KPiA+DQo+ID4gQEAgLTQ1Miw2ICs0ODgsNyBA QCBMY2RQbGF0Zm9ybUdldFRpbWluZ3MgKA0KPiA+ICAgICoNCj4gPiAgICAqIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICAgVGhlIHJlcXVlc3RlZCBtb2RlIGlzIGZvdW5kLg0KPiA+ICAg ICogQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBSZXF1ZXN0ZWQgbW9kZSBub3QgZm91 bmQuDQo+ID4gKyAgKiBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIEJwcCBpcyBOVUxM Lg0KPiA+ICAqKi8NCj4gPiAgRUZJX1NUQVRVUw0KPiA+ICBMY2RQbGF0Zm9ybUdldEJwcCAoDQo+ ID4gQEAgLTQ2MCw2ICs0OTcsOCBAQCBMY2RQbGF0Zm9ybUdldEJwcCAoDQo+ID4gICAgKQ0KPiA+ ICB7DQo+ID4gICAgaWYgKE1vZGVOdW1iZXIgPj0gTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpKSB7 DQo+ID4gKyAgICBBU1NFUlQgKE1vZGVOdW1iZXIgPCBMY2RQbGF0Zm9ybUdldE1heE1vZGUgKCkp Ow0KPiA+ICsgICAgQVNTRVJUIChCcHAgIT0gTlVMTCk7DQo+ID4gICAgICByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KPiA+ICAgIH0NCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9Bcm1QbGF0 Zm9ybVBrZy9Ecml2ZXJzL0xjZEdyYXBoaWNzT3V0cHV0RHhlL0hkTGNkLmMNCj4gPiBiL0FybVBs YXRmb3JtUGtnL0RyaXZlcnMvTGNkR3JhcGhpY3NPdXRwdXREeGUvSGRMY2QuYw0KPiA+IGluZGV4 DQo+ID4NCj4gNWY5NTA1Nzk3MjBmYjY5ZTBhNDgxZjY5N2E1Y2M0MDM4MTU4YjQwOS4uYTI2NjY3 MWEyNmYwMWQzMWU4ZGQNCj4gYjBjZjdjYmYNCj4gPiBlNTlkMmY0ZGM0OWMgMTAwNjQ0DQo+ID4g LS0tIGEvQXJtUGxhdGZvcm1Qa2cvRHJpdmVycy9MY2RHcmFwaGljc091dHB1dER4ZS9IZExjZC5j DQo+ID4gKysrIGIvQXJtUGxhdGZvcm1Qa2cvRHJpdmVycy9MY2RHcmFwaGljc091dHB1dER4ZS9I ZExjZC5jDQo+ID4gQEAgLTEwOSwxNSArMTA5LDE1IEBAIExjZFNldE1vZGUgKA0KPiA+ICAgICAg ICAgICAgICAgJlZCYWNrUG9yY2gsDQo+ID4gICAgICAgICAgICAgICAmVkZyb250UG9yY2gNCj4g PiAgICAgICAgICAgICAgICk7DQo+ID4gLSAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4g PiAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gLSAgICByZXR1cm4gRUZJX0RFVklD RV9FUlJPUjsNCj4gPiArICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiA+ICAgIH0NCj4gPg0KPiA+ICAgIFN0YXR1cyA9IExjZFBsYXRmb3Jt R2V0QnBwIChNb2RlTnVtYmVyLCAmTGNkQnBwKTsNCj4gPiAtICBBU1NFUlRfRUZJX0VSUk9SIChT dGF0dXMpOw0KPiA+ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAtICAgIHJldHVy biBFRklfREVWSUNFX0VSUk9SOw0KPiA+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsN Cj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgfQ0KPiA+DQo+ID4gICAgQnl0ZXNQZXJQ aXhlbCA9IEdldEJ5dGVzUGVyUGl4ZWwgKExjZEJwcCk7IGRpZmYgLS1naXQNCj4gPiBhL0FybVBs YXRmb3JtUGtnL0RyaXZlcnMvTGNkR3JhcGhpY3NPdXRwdXREeGUvUEwxMTFMY2QuYw0KPiA+IGIv QXJtUGxhdGZvcm1Qa2cvRHJpdmVycy9MY2RHcmFwaGljc091dHB1dER4ZS9QTDExMUxjZC5jDQo+ ID4gaW5kZXgNCj4gPg0KPiAzODZlNjE0MGE2OWIwNDVmNzdlZTdmYTYwYzQ1ODdkOGJmNGU3ZDU0 Li5mNDMyYzhkODAyNjE0ZThhMGU0ZGQNCj4gYWIzODk4Zg0KPiA+IDZlMGRiZjlhMTU3MiAxMDA2 NDQNCj4gPiAtLS0gYS9Bcm1QbGF0Zm9ybVBrZy9Ecml2ZXJzL0xjZEdyYXBoaWNzT3V0cHV0RHhl L1BMMTExTGNkLmMNCj4gPiArKysgYi9Bcm1QbGF0Zm9ybVBrZy9Ecml2ZXJzL0xjZEdyYXBoaWNz T3V0cHV0RHhlL1BMMTExTGNkLmMNCj4gPiBAQCAtMTEwLDE1ICsxMTAsMTUgQEAgTGNkU2V0TW9k ZSAoDQo+ID4gICAgICAgICAgICAgICAmVkJhY2tQb3JjaCwNCj4gPiAgICAgICAgICAgICAgICZW RnJvbnRQb3JjaA0KPiA+ICAgICAgICAgICAgICAgKTsNCj4gPiAtICBBU1NFUlRfRUZJX0VSUk9S IChTdGF0dXMpOw0KPiA+ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAtICAgIHJl dHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiA+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVz KTsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgfQ0KPiA+DQo+ID4gICAgU3RhdHVz ID0gTGNkUGxhdGZvcm1HZXRCcHAgKE1vZGVOdW1iZXIsICZMY2RCcHApOw0KPiA+IC0gIEFTU0VS VF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiA+IC0gICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ID4gKyAgICBBU1NFUlRfRUZJX0VS Uk9SIChTdGF0dXMpOw0KPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICB9DQo+ID4NCj4g PiAgICAvLyBEaXNhYmxlIHRoZSBDTENEX0xjZEVuIGJpdA0KPiA+IC0tDQo+ID4gR3VpZCgiQ0Ux NjU2NjktM0VGMy00OTNGLUI4NUQtNjE5MEVFNUI5NzU5IikNCj4gPg0KSU1QT1JUQU5UIE5PVElD RTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUgY29u ZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUg aW50ZW5kZWQgcmVjaXBpZW50LCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkg YW5kIGRvIG5vdCBkaXNjbG9zZSB0aGUgY29udGVudHMgdG8gYW55IG90aGVyIHBlcnNvbiwgdXNl IGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3RvcmUgb3IgY29weSB0aGUgaW5mb3JtYXRpb24gaW4g YW55IG1lZGl1bS4gVGhhbmsgeW91Lg0K