From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.81]) by mx.groups.io with SMTP id smtpd.web10.4561.1591127700995133250 for ; Tue, 02 Jun 2020 12:55:01 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=fYgleh0B; spf=pass (domain: redhat.com, ip: 207.211.31.81, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1591127700; h=from:from: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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=v/nMMSCT4VIHYPrZB7LYhlw8fCCa5urSjg2le8H1bTc=; b=fYgleh0BD/d82KZOU+uaLbafk0Fi+iXX0i3meMbyw2rd14GMA+W0yqLSnjPe9Sv0K6dLBe vTpBf1FWNblR+URCCujgdZFS4HsLejWlGf6kAsMuCLXXvrc3xgtrLj94hLrotQrd9mshxG DAb2T93cXx2bmgwz+R1CV0qMd17byys= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-143-mRknKZjsMGK7T_3-GqNU0A-1; Tue, 02 Jun 2020 15:54:53 -0400 X-MC-Unique: mRknKZjsMGK7T_3-GqNU0A-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id EC6371B18BC0; Tue, 2 Jun 2020 19:54:49 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-115-66.ams2.redhat.com [10.36.115.66]) by smtp.corp.redhat.com (Postfix) with ESMTP id B3241A1043; Tue, 2 Jun 2020 19:54:47 +0000 (UTC) Subject: Re: [EXTERNAL] Re: [edk2-devel] [PATCH v4 09/14] MdeModulePkg: Connect VariablePolicy business logic to VariableServices To: Bret Barkelew , "devel@edk2.groups.io" , "bret@corthon.com" Cc: Jian J Wang , Hao A Wu , "liming.gao" References: <20200601163310.1718-1-brbarkel@microsoft.com> <20200601163310.1718-10-brbarkel@microsoft.com> <76b6a35d-bb89-e208-18ae-4be2fb2649c2@redhat.com> <1614C86F19BEB5BC.13152@groups.io> From: "Laszlo Ersek" Message-ID: <823206aa-c87b-5498-bd61-b8bd9bb84d94@redhat.com> Date: Tue, 2 Jun 2020 21:54:46 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: base64 T24gMDYvMDIvMjAgMjA6MTcsIEJyZXQgQmFya2VsZXcgd3JvdGU6DQo+IEFjdHVhbGx5LCB0d28g dGhpbmdzOg0KPiANCj4gICAxLiAgSSB3YXMgcnVubmluZyBvbiB0aGUgd3JvbmcgYnJhbmNoIGFu ZA0KPiAgIDIuICBJIGRvbpJ0IGtub3cgdGhhdCBJIHN1Ym1pdHRlZCB0aGlzIHNlcmllcyB0byBH aXRIdWIgeWV0LCBzbyB0aGUgQ0kgd291bGRuknQgaGF2ZSBjYXVnaHQgaXQuDQoNCkFoIE9LIC0t IEkgdGhvdWdodCB5b3UgaGFkIHJ1biB0aGUgdjQgc2VyaWVzIHRocm91Z2ggYSBwZXJzb25hbCBD SSBidWlsZA0KKD0gUFIgd2l0aG91dCB0aGUgInB1c2giIGxhYmVsKSBvbiBnaXRodWIuY29tLg0K DQooSSBkb24ndCBjbG9zZWx5IG1vbml0b3IgbXkgZ2l0aHViIG5vdGlmaWNhdGlvbnMgZm9sZGVy IGp1c3QgeWV0LCBpLmUuDQpiZWZvcmUgd2UgdHJhbnNpdGlvbiB0byBnaXRodWIuY29tIGZvciBn b29kLCBhbmQgc28gSSBjb3VsZG4ndCBoYXZlDQpyZW1lbWJlcmVkIGVpdGhlciB0aGUgcHJlc2Vu Y2Ugb3IgdGhlIGFic2VuY2Ugb2Ygc3VjaCBhIHBlcnNvbmFsIENJDQpidWlsZCAvIFBSIGluIHRo ZSByZWNlbnQgcGFzdC4pDQoNClRoYW5rcyENCkxhc3psbw0KDQo+IA0KPiBJIHJhbiBpdCB0aHJv dWdoIHRoZSBXaW5kb3dzIENJIG9uIG15IGxvY2FsIG1hY2hpbmUgYmVmb3JlIHY0IHBhdGNoZXMs IGJ1dCBWUyBpcyBsZXNzIHBpY2t5IChmb3IgYmV0dGVyIG9yIFtwcm9iYWJseV0gd29yc2UpIGFi b3V0IHRoaW5ncyBsaWtlIEVGSUFQSSBhbmQgQ09OU1QuDQo+IA0KPiBJIGhhdmUgdGhlc2UgcGF0 Y2hlZCBhbmQgcmVhZHkgZm9yIHY1Lg0KPiANCj4gLSBCcmV0DQo+IA0KPiBGcm9tOiBCcmV0IEJh cmtlbGV3IHZpYSBncm91cHMuaW88bWFpbHRvOmJyZXQuYmFya2VsZXc9bWljcm9zb2Z0LmNvbUBn cm91cHMuaW8+DQo+IFNlbnQ6IFR1ZXNkYXksIEp1bmUgMiwgMjAyMCA5OjU1IEFNDQo+IFRvOiBk ZXZlbEBlZGsyLmdyb3Vwcy5pbzxtYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW8+OyBsZXJzZWtA cmVkaGF0LmNvbTxtYWlsdG86bGVyc2VrQHJlZGhhdC5jb20+OyBicmV0QGNvcnRob24uY29tPG1h aWx0bzpicmV0QGNvcnRob24uY29tPg0KPiBDYzogSmlhbiBKIFdhbmc8bWFpbHRvOmppYW4uai53 YW5nQGludGVsLmNvbT47IEhhbyBBIFd1PG1haWx0bzpoYW8uYS53dUBpbnRlbC5jb20+OyBsaW1p bmcuZ2FvPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtFWFRF Uk5BTF0gUmU6IFtlZGsyLWRldmVsXSBbUEFUQ0ggdjQgMDkvMTRdIE1kZU1vZHVsZVBrZzogQ29u bmVjdCBWYXJpYWJsZVBvbGljeSBidXNpbmVzcyBsb2dpYyB0byBWYXJpYWJsZVNlcnZpY2VzDQo+ IA0KPiBJkm0gYWxzbyBwdXp6bGVkIGJ5IHRoZSBsYWNrIG9mIGVycm9yIGluIENJLiBJIGp1c3Qg dHJpZWQgdG8gbGV2ZXJhZ2UgaXQgdG8gaXRlcmF0ZSBvbiB0aGUgcHJvYmxlbSBhbmQgcmVzb2x2 ZSB0aGUgaXNzdWUgeW91knJlIHNlZWluZywgYnV0IGl0IHdhc26SdCBvZiBhbnkgdXNlLiBXaWxs IHBva2UgYXJvdW5kIGEgbGl0dGxlLCBidXQgYWxzbyBrZWVuIHRvIGhlYXIgZnJvbSBhbnlvbmUg d2l0aCBtb3JlIEdDQzUgZXhwZXJpZW5jZS4NCj4gDQo+IC0gQnJldA0KPiANCj4gRnJvbTogTGFz emxvIEVyc2VrIHZpYSBncm91cHMuaW88bWFpbHRvOmxlcnNlaz1yZWRoYXQuY29tQGdyb3Vwcy5p bz4NCj4gU2VudDogVHVlc2RheSwgSnVuZSAyLCAyMDIwIDg6NDggQU0NCj4gVG86IGRldmVsQGVk azIuZ3JvdXBzLmlvPG1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz47IGJyZXRAY29ydGhvbi5j b208bWFpbHRvOmJyZXRAY29ydGhvbi5jb20+DQo+IENjOiBKaWFuIEogV2FuZzxtYWlsdG86amlh bi5qLndhbmdAaW50ZWwuY29tPjsgSGFvIEEgV3U8bWFpbHRvOmhhby5hLnd1QGludGVsLmNvbT47 IGxpbWluZy5nYW88bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBbRVhU RVJOQUxdIFJlOiBbZWRrMi1kZXZlbF0gW1BBVENIIHY0IDA5LzE0XSBNZGVNb2R1bGVQa2c6IENv bm5lY3QgVmFyaWFibGVQb2xpY3kgYnVzaW5lc3MgbG9naWMgdG8gVmFyaWFibGVTZXJ2aWNlcw0K PiANCj4gSGkgQnJldCwNCj4gDQo+IHRoaXMgcGF0Y2ggY2F1c2VzIGEgYnVpbGQgZmFpbHVyZSB3 aXRoIHRoZSBHQ0M0OCB0b29sY2hhaW4gKGFjdHVhbA0KPiB2ZXJzaW9uOiBnY2MgNC44LjUtMzYg aW4gUkhFTDcpLCBhbmQgYWxzbyB3aXRoIHRoZSBHQ0M1IHRvb2xjaGFpbg0KPiAoYWN0dWFsIHZl cnNpb246ICJSZWQgSGF0IENyb3NzIDYuMS4xLTIiKToNCj4gDQo+IE9uIDA2LzAxLzIwIDE4OjMz LCBCcmV0IEJhcmtlbGV3IHdyb3RlOg0KPj4gaHR0cHM6Ly9uYW0wNi5zYWZlbGlua3MucHJvdGVj dGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJGJTJGYnVnemlsbGEudGlhbm9jb3JlLm9y ZyUyRnNob3dfYnVnLmNnaSUzRmlkJTNEMjUyMiZhbXA7ZGF0YT0wMiU3QzAxJTdDQnJldC5CYXJr ZWxldyU0MG1pY3Jvc29mdC5jb20lN0M0MDU1MmMyYTQ4OTY0NzVlZDlkYTA4ZDgwNzBjNmY1MSU3 QzcyZjk4OGJmODZmMTQxYWY5MWFiMmQ3Y2QwMTFkYjQ3JTdDMSU3QzAlN0M2MzcyNjcwOTcyODUz MzQ3NDYmYW1wO3NkYXRhPVVFZCUyRnlVZWl4cDVjcTJqWHdVUTY4dEl3czlwYkdCbDBtOWNwbnJp amFHYyUzRCZhbXA7cmVzZXJ2ZWQ9MDxodHRwczovL25hbTA2LnNhZmVsaW5rcy5wcm90ZWN0aW9u Lm91dGxvb2suY29tLz91cmw9aHR0cHMlM0ElMkYlMkZidWd6aWxsYS50aWFub2NvcmUub3JnJTJG c2hvd19idWcuY2dpJTNGaWQlM0QyNTIyJmRhdGE9MDIlN0MwMSU3Q2JyZXQuYmFya2VsZXclNDBt aWNyb3NvZnQuY29tJTdDMzViYzBhMGY1YjcwNGQ1MDlhNDgwOGQ4MDcxNWNkMmMlN0M3MmY5ODhi Zjg2ZjE0MWFmOTFhYjJkN2NkMDExZGI0NyU3QzElN0MwJTdDNjM3MjY3MTM3NTI0NTQyNDcyJnNk YXRhPUpwWlZ2cms0SjN1cXY4ejV1Q2NSOURETFhTdTBlTDRTbTJVdGZmVDlOM1UlM0QmcmVzZXJ2 ZWQ9MD4NCj4+DQo+PiBWYXJpYWJsZVBvbGljeSBpcyBhbiB1cGRhdGVkIGludGVyZmFjZSB0bw0K Pj4gcmVwbGFjZSBWYXJMb2NrIGFuZCBWYXJDaGVja1Byb3RvY29sLg0KPj4NCj4+IEFkZCBjb25u ZWN0aXZlIGNvZGUgdG8gcHVibGlzaCB0aGUgVmFyaWFibGVQb2xpY3kgcHJvdG9jb2wNCj4+IGFu ZCB3aXJlIGl0IHRvIGVpdGhlciB0aGUgU01NIGNvbW11bmljYXRpb24gaW50ZXJmYWNlDQo+PiBv ciBkaXJlY3RseSBpbnRvIHRoZSBWYXJpYWJsZVBvbGljeUxpYiBidXNpbmVzcyBsb2dpYy4NCj4+ DQo+PiBDYzogSmlhbiBKIFdhbmcgPGppYW4uai53YW5nQGludGVsLmNvbT4NCj4+IENjOiBIYW8g QSBXdSA8aGFvLmEud3VAaW50ZWwuY29tPg0KPj4gQ2M6IExpbWluZyBHYW8gPGxpbWluZy5nYW9A aW50ZWwuY29tPg0KPj4gQ2M6IEJyZXQgQmFya2VsZXcgPGJyYmFya2VsQG1pY3Jvc29mdC5jb20+ DQo+PiBTaWduZWQtb2ZmLWJ5OiBCcmV0IEJhcmtlbGV3IDxicmJhcmtlbEBtaWNyb3NvZnQuY29t Pg0KPj4gLS0tDQo+PiAgTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9SdW50aW1lRHhl L1ZhcmlhYmxlRHhlLmMgICAgICAgICAgICAgfCAgNTMgKysNCj4+ICBNZGVNb2R1bGVQa2cvVW5p dmVyc2FsL1ZhcmlhYmxlL1J1bnRpbWVEeGUvVmFyaWFibGVQb2xpY3lTbW1EeGUuYyAgICB8IDY0 MiArKysrKysrKysrKysrKysrKysrKw0KPj4gIE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFi bGUvUnVudGltZUR4ZS9WYXJpYWJsZVNtbVJ1bnRpbWVEeGUuYyAgIHwgIDE0ICsNCj4+ICBNZGVN b2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1J1bnRpbWVEeGUvVmFyaWFibGVSdW50aW1lRHhl LmluZiAgICB8ICAgMiArDQo+PiAgTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9SdW50 aW1lRHhlL1ZhcmlhYmxlU21tLmluZiAgICAgICAgICAgfCAgIDMgKw0KPj4gIE1kZU1vZHVsZVBr Zy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4ZS9WYXJpYWJsZVNtbVJ1bnRpbWVEeGUuaW5m IHwgIDEwICsNCj4+ICA2IGZpbGVzIGNoYW5nZWQsIDcyNCBpbnNlcnRpb25zKCspDQo+Pg0KPj4g ZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4ZS9W YXJpYWJsZUR4ZS5jIGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9SdW50aW1lRHhl L1ZhcmlhYmxlRHhlLmMNCj4+IGluZGV4IDdkMmI2YzhlMWZhZC4uZDQwNGQ0NzYzZTU0IDEwMDY0 NA0KPj4gLS0tIGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9SdW50aW1lRHhlL1Zh cmlhYmxlRHhlLmMNCj4+ICsrKyBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVu dGltZUR4ZS9WYXJpYWJsZUR4ZS5jDQo+PiBAQCAtNSwxOCArNSwzNCBAQA0KPj4gIENvcHlyaWdo dCAoQykgMjAxMywgUmVkIEhhdCwgSW5jLg0KPj4gIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTks IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4+ICAoQykgQ29w eXJpZ2h0IDIwMTUgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+ DQo+PiArQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uDQo+PiAgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4+DQo+PiAgKiovDQo+Pg0KPj4g ICNpbmNsdWRlICJWYXJpYWJsZS5oIg0KPj4NCj4+ICsjaW5jbHVkZSA8UHJvdG9jb2wvVmFyaWFi bGVQb2xpY3kuaD4NCj4+ICsjaW5jbHVkZSA8TGlicmFyeS9WYXJpYWJsZVBvbGljeUxpYi5oPg0K Pj4gKw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtQcm90b2NvbElzVmFyaWFibGVQ b2xpY3lFbmFibGVkICgNCj4+ICsgIE9VVCBCT09MRUFOICpTdGF0ZQ0KPj4gKyAgKTsNCj4+ICsN Cj4+ICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICBtSGFuZGxlICAgICAgICAg ICAgICAgICAgICA9IE5VTEw7DQo+PiAgRUZJX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAg ICAgbVZpcnR1YWxBZGRyZXNzQ2hhbmdlRXZlbnQgPSBOVUxMOw0KPj4gIFZPSUQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICptRnR3UmVnaXN0cmF0aW9uICAgICAgICAgID0gTlVMTDsN Cj4+ICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiptVmFyQ2hlY2tBZGRy ZXNzUG9pbnRlciA9IE5VTEw7DQo+PiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbVZhckNoZWNrQWRkcmVzc1BvaW50ZXJDb3VudCA9IDA7DQo+PiAgRURLSUlfVkFSSUFCTEVf TE9DS19QUk9UT0NPTCAgICAgICAgbVZhcmlhYmxlTG9jayAgICAgICAgICAgICAgPSB7IFZhcmlh YmxlTG9ja1JlcXVlc3RUb0xvY2sgfTsNCj4+ICtFREtJSV9WQVJJQUJMRV9QT0xJQ1lfUFJPVE9D T0wgICAgICBtVmFyaWFibGVQb2xpY3lQcm90b2NvbCAgICA9IHsgRURLSUlfVkFSSUFCTEVfUE9M SUNZX1BST1RPQ09MX1JFVklTSU9OLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZVZhcmlhYmxlUG9s aWN5LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2xJc1ZhcmlhYmxlUG9saWN5RW5hYmxlZCwNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyVmFyaWFibGVQb2xpY3ksDQo+IA0KPiAoMSkgImVycm9yOiBp bml0aWFsaXphdGlvbiBmcm9tIGluY29tcGF0aWJsZSBwb2ludGVyIHR5cGUgWy1XZXJyb3JdIg0K PiANCj4gVGhhdCdzIGJlY2F1c2UgUmVnaXN0ZXJWYXJpYWJsZVBvbGljeSgpIGhhcyB0aGUgZm9s bG93aW5nIHByb3RvdHlwZQ0KPiAoZnJvbSAiTWRlTW9kdWxlUGtnL0luY2x1ZGUvTGlicmFyeS9W YXJpYWJsZVBvbGljeUxpYi5oIik6DQo+IA0KPiAgIEVGSV9TVEFUVVMNCj4gICBFRklBUEkNCj4g ICBSZWdpc3RlclZhcmlhYmxlUG9saWN5ICgNCj4gICAgIElOIENPTlNUIFZBUklBQkxFX1BPTElD WV9FTlRSWSAgICAqTmV3UG9saWN5DQo+ICAgICApOw0KPiANCj4gd2hlcmVhcyAiRURLSUlfVkFS SUFCTEVfUE9MSUNZX1BST1RPQ09MLlJlZ2lzdGVyVmFyaWFibGVQb2xpY3kiIGhhcyB0aGUNCj4g Zm9sbG93aW5nIHR5cGUgKGZyb20gIk1kZU1vZHVsZVBrZy9JbmNsdWRlL1Byb3RvY29sL1Zhcmlh YmxlUG9saWN5LmgiKToNCj4gDQo+ICAgdHlwZWRlZg0KPiAgIEVGSV9TVEFUVVMNCj4gICAoRUZJ QVBJICpSRUdJU1RFUl9WQVJJQUJMRV9QT0xJQ1kpKA0KPiAgICAgSU4gVkFSSUFCTEVfUE9MSUNZ X0VOVFJZICpQb2xpY3lFbnRyeQ0KPiAgICAgKTsNCj4gDQo+IFRoZSBsYXR0ZXIgZG9lcyBub3Qg dGFrZSBhIHBvaW50ZXIgdG8gQ09OU1QuDQo+IA0KPiBOb3csIGFzc3VtaW5nIHRoYXQgIkNPTlNU IGlzIGdvb2QiLCBJIGxvY2FsbHkgbW9kaWZpZWQgdGhlDQo+IFJFR0lTVEVSX1ZBUklBQkxFX1BP TElDWSB0eXBlZGVmLCBqdXN0IHRvIHNlZSBpZiB0aGF0IHdvdWxkIGFsbG93IHRoZQ0KPiBidWls ZCB0byBjb21wbGV0ZS4gSXQgZml4ZXMgcHJvYmxlbSAoMSksIGJ1dCBpdCB0cmlnZ2VycyBhIGRp ZmZlcmVudA0KPiBwcm9ibGVtOg0KPiANCj4gDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdW1wVmFyaWFibGVQ b2xpY3ksDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMb2NrVmFyaWFibGVQb2xpY3kgfTsNCj4+ICBFREtJSV9W QVJfQ0hFQ0tfUFJPVE9DT0wgICAgICAgICAgICBtVmFyQ2hlY2sgICAgICAgICAgICAgICAgICA9 IHsgVmFyQ2hlY2tSZWdpc3RlclNldFZhcmlhYmxlQ2hlY2tIYW5kbGVyLA0KPj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVmFyQ2hlY2tWYXJpYWJsZVByb3BlcnR5U2V0LA0KPj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyQ2hlY2tW YXJpYWJsZVByb3BlcnR5R2V0IH07DQo+PiBAQCAtMzAzLDYgKzMxOSw4IEBAIE9uUmVhZHlUb0Jv b3QgKA0KPj4gICAgICB9DQo+PiAgICB9DQo+Pg0KPj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoTG9j a1ZhcmlhYmxlUG9saWN5ICgpKTsNCj4+ICsNCj4+ICAgIGdCUy0+Q2xvc2VFdmVudCAoRXZlbnQp Ow0KPj4gIH0NCj4+DQo+PiBAQCAtNDY2LDYgKzQ4NCwyOCBAQCBGdHdOb3RpZmljYXRpb25FdmVu dCAoDQo+PiAgfQ0KPj4NCj4+DQo+PiArLyoqDQo+PiArICBUaGlzIEFQSSBmdW5jdGlvbiByZXR1 cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwb2xpY3kgZW5naW5lIGlzDQo+PiArICBjdXJyZW50bHkg YmVpbmcgZW5mb3JjZWQuDQo+PiArDQo+PiArICBAcGFyYW1bb3V0XSAgIFN0YXRlICAgICAgIFBv aW50ZXIgdG8gYSByZXR1cm4gdmFsdWUgZm9yIHdoZXRoZXIgdGhlIHBvbGljeSBlbmZvcmNlbWVu dA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkgZW5hYmxlZC4N Cj4+ICsNCj4+ICsgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNTDQo+PiArICBAcmV0dmFsICAgICBP dGhlcnMgICAgICAgIEFuIGVycm9yIGhhcyBwcmV2ZW50ZWQgdGhpcyBjb21tYW5kIGZyb20gY29t cGxldGluZy4NCj4+ICsNCj4+ICsqKi8NCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+PiAr UHJvdG9jb2xJc1ZhcmlhYmxlUG9saWN5RW5hYmxlZCAoDQo+PiArICBPVVQgQk9PTEVBTiAqU3Rh dGUNCj4+ICsgICkNCj4+ICt7DQo+PiArICAqU3RhdGUgPSBJc1ZhcmlhYmxlUG9saWN5RW5hYmxl ZCAoKTsNCj4+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+ICt9DQo+PiArDQo+PiArDQo+PiAg LyoqDQo+PiAgICBWYXJpYWJsZSBEcml2ZXIgbWFpbiBlbnRyeSBwb2ludC4gVGhlIFZhcmlhYmxl IGRyaXZlciBwbGFjZXMgdGhlIDQgRUZJDQo+PiAgICBydW50aW1lIHNlcnZpY2VzIGluIHRoZSBF RkkgU3lzdGVtIFRhYmxlIGFuZCBpbnN0YWxscyBhcmNoIHByb3RvY29scw0KPj4gQEAgLTU3Niw2 ICs2MTYsMTkgQEAgVmFyaWFibGVTZXJ2aWNlSW5pdGlhbGl6ZSAoDQo+PiAgICAgICAgICAgICAg ICAgICAgKTsNCj4+ICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+Pg0KPj4gKyAgLy8g UmVnaXN0ZXIgYW5kIGluaXRpYWxpemUgdGhlIFZhcmlhYmxlUG9saWN5IGVuZ2luZS4NCj4+ICsg IFN0YXR1cyA9IEluaXRWYXJpYWJsZVBvbGljeUxpYiAoVmFyaWFibGVTZXJ2aWNlR2V0VmFyaWFi bGUpOw0KPj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4+ICsgIFN0YXR1cyA9IFZh ckNoZWNrUmVnaXN0ZXJTZXRWYXJpYWJsZUNoZWNrSGFuZGxlciAoVmFsaWRhdGVTZXRWYXJpYWJs ZSk7DQo+PiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPj4gKyAgU3RhdHVzID0gZ0JT LT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPj4gKyAgICAgICAgICAgICAg ICAgICAgJm1IYW5kbGUsDQo+PiArICAgICAgICAgICAgICAgICAgICAmZ0Vka2lpVmFyaWFibGVQ b2xpY3lQcm90b2NvbEd1aWQsDQo+PiArICAgICAgICAgICAgICAgICAgICAmbVZhcmlhYmxlUG9s aWN5UHJvdG9jb2wsDQo+PiArICAgICAgICAgICAgICAgICAgICBOVUxMDQo+PiArICAgICAgICAg ICAgICAgICAgICApOw0KPj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4+ICsNCj4+ ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+ICB9DQo+Pg0KPj4gZGlmZiAtLWdpdCBhL01kZU1v ZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4ZS9WYXJpYWJsZVBvbGljeVNtbUR4 ZS5jIGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9SdW50aW1lRHhlL1ZhcmlhYmxl UG9saWN5U21tRHhlLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAw MDAwMDAuLjNkNzk5MDI1OTgzYQ0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvTWRlTW9kdWxl UGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9SdW50aW1lRHhlL1ZhcmlhYmxlUG9saWN5U21tRHhlLmMN Cj4+IEBAIC0wLDAgKzEsNjQyIEBADQo+PiArLyoqIEBmaWxlIC0tIFZhcmlhYmxlUG9saWN5U21t RHhlLmMNCj4+ICtUaGlzIHByb3RvY29sIGFsbG93cyBjb21tdW5pY2F0aW9uIHdpdGggVmFyaWFi bGUgUG9saWN5IEVuZ2luZS4NCj4+ICsNCj4+ICtDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jw b3JhdGlvbi4NCj4+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVu dA0KPj4gKw0KPj4gKyoqLw0KPj4gKw0KPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4N Cj4+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQo+PiArI2luY2x1ZGUgPExpYnJhcnkv RGVidWdMaWIuaD4NCj4+ICsjaW5jbHVkZSA8TGlicmFyeS9TYWZlSW50TGliLmg+DQo+PiArI2lu Y2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+PiArI2luY2x1ZGUg PExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFs bG9jYXRpb25MaWIuaD4NCj4+ICsNCj4+ICsjaW5jbHVkZSA8UHJvdG9jb2wvVmFyaWFibGVQb2xp Y3kuaD4NCj4+ICsjaW5jbHVkZSA8UHJvdG9jb2wvTW1Db21tdW5pY2F0aW9uMi5oPg0KPj4gKw0K Pj4gKyNpbmNsdWRlIDxHdWlkL1ZhckNoZWNrUG9saWN5TW1pLmg+DQo+PiArDQo+PiArI2luY2x1 ZGUgIlZhcmlhYmxlLmgiDQo+PiArDQo+PiArRURLSUlfVkFSSUFCTEVfUE9MSUNZX1BST1RPQ09M ICBtVmFyaWFibGVQb2xpY3lQcm90b2NvbDsNCj4+ICtFRklfTU1fQ09NTVVOSUNBVElPTjJfUFJP VE9DT0wgICptTW1Db21tdW5pY2F0aW9uOw0KPj4gKw0KPj4gK1ZPSUQgICAgICAqbU1tQ29tbXVu aWNhdGlvbkJ1ZmZlcjsNCj4+ICtVSU5UTiAgICAgbU1tQ29tbXVuaWNhdGlvbkJ1ZmZlclNpemU7 DQo+PiArRUZJX0xPQ0sgIG1NbUNvbW11bmljYXRpb25Mb2NrOw0KPj4gKw0KPj4gKy8qKg0KPj4g KyAgSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnNvbGlkYXRlIGNvbW11bmljYXRpb24g bWV0aG9kLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luLG91dF0gIENvbW1CdWZmZXINCj4+ICsgIEBw YXJhbVtpbixvdXRdICBDb21tU2l6ZSAgICBTaXplIG9mIHRoZSBDb21tQnVmZmVyLg0KPj4gKw0K Pj4gKyAgQHJldHZhbCAgIEVGSV9TVEFUVVMgICAgUmVzdWx0IGZyb20gY29tbXVuaWNhdGlvbiBt ZXRob2QuDQo+PiArDQo+PiArKiovDQo+PiArU1RBVElDDQo+PiArRUZJX1NUQVRVUw0KPj4gK0lu dGVybmFsTW1Db21tdW5pY2F0ZSAoDQo+PiArICBJTiBPVVQgVk9JRCAgICAgICAgICAgICAqQ29t bUJ1ZmZlciwNCj4+ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAgICpDb21tU2l6ZQ0KPj4gKyAg KQ0KPj4gK3sNCj4+ICsgIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KPj4gKyAgaWYgKENvbW1CdWZm ZXIgPT0gTlVMTCB8fCBDb21tU2l6ZSA9PSBOVUxMKSB7DQo+PiArICAgIHJldHVybiBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQo+PiArICB9DQo+PiArICBTdGF0dXMgPSBtTW1Db21tdW5pY2F0aW9u LT5Db21tdW5pY2F0ZSAobU1tQ29tbXVuaWNhdGlvbiwgQ29tbUJ1ZmZlciwgQ29tbUJ1ZmZlciwg Q29tbVNpemUpOw0KPj4gKyAgcmV0dXJuIFN0YXR1czsNCj4+ICt9DQo+PiArDQo+PiArDQo+PiAr LyoqDQo+PiArICBUaGlzIEFQSSBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgdmFyaWFibGUgcG9saWN5 IGVuZm9yY2VtZW50LiBJZiBpdCdzDQo+PiArICBhbHJlYWR5IGJlZW4gY2FsbGVkIG9uY2UsIHdp bGwgcmV0dXJuIEVGSV9BTFJFQURZX1NUQVJURUQuDQo+PiArDQo+PiArICBAcmV0dmFsICAgICBF RklfU1VDQ0VTUw0KPj4gKyAgQHJldHZhbCAgICAgRUZJX0FMUkVBRFlfU1RBUlRFRCAgIEhhcyBh bHJlYWR5IGJlZW4gY2FsbGVkIG9uY2UgdGhpcyBib290Lg0KPj4gKyAgQHJldHZhbCAgICAgRUZJ X1dSSVRFX1BST1RFQ1RFRCAgIEludGVyZmFjZSBoYXMgYmVlbiBsb2NrZWQgdW50aWwgcmVib290 Lg0KPj4gKyAgQHJldHZhbCAgICAgRUZJX1dSSVRFX1BST1RFQ1RFRCAgIEludGVyZmFjZSBvcHRp b24gaXMgZGlzYWJsZWQgYnkgcGxhdGZvcm0gUENELg0KPj4gKw0KPj4gKyoqLw0KPj4gK1NUQVRJ Qw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtQcm90b2NvbERpc2FibGVWYXJpYWJs ZVBvbGljeSAoDQo+PiArICBWT0lEDQo+PiArICApDQo+PiArew0KPj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPj4gKyAgRUZJX01NX0NPTU1VTklDQVRFX0hFQURF UiAgICAgKkNvbW1IZWFkZXI7DQo+PiArICBWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1fSEVBREVSICAq UG9saWN5SGVhZGVyOw0KPj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVy U2l6ZTsNCj4+ICsNCj4+ICsgIC8vIENoZWNrIHRoZSBQQ0QgZm9yIGNvbnZlbmllbmNlLg0KPj4g KyAgLy8gVGhpcyB3b3VsZCBhbHNvIGJlIHJlamVjdGVkIGJ5IHRoZSBsaWIsIGJ1dCB3aHkgZ28g dG8gTU0gaWYgd2UgZG9uJ3QgaGF2ZSB0bz8NCj4+ICsgIGlmICghUGNkR2V0Qm9vbCAoUGNkQWxs b3dWYXJpYWJsZVBvbGljeUVuZm9yY2VtZW50RGlzYWJsZSkpIHsNCj4+ICsgICAgcmV0dXJuIEVG SV9XUklURV9QUk9URUNURUQ7DQo+PiArICB9DQo+PiArDQo+PiArICBBY3F1aXJlTG9ja09ubHlB dEJvb3RUaW1lICgmbU1tQ29tbXVuaWNhdGlvbkxvY2spOw0KPj4gKw0KPj4gKyAgLy8gU2V0IHVw IHRoZSBNTSBjb21tdW5pY2F0aW9uLg0KPj4gKyAgQnVmZmVyU2l6ZSAgICA9IG1NbUNvbW11bmlj YXRpb25CdWZmZXJTaXplOw0KPj4gKyAgQ29tbUhlYWRlciAgICA9IG1NbUNvbW11bmljYXRpb25C dWZmZXI7DQo+PiArICBQb2xpY3lIZWFkZXIgID0gKFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9IRUFE RVIqKSZDb21tSGVhZGVyLT5EYXRhOw0KPj4gKyAgQ29weUd1aWQoICZDb21tSGVhZGVyLT5IZWFk ZXJHdWlkLCAmZ1ZhckNoZWNrUG9saWN5TGliTW1pSGFuZGxlckd1aWQgKTsNCj4+ICsgIENvbW1I ZWFkZXItPk1lc3NhZ2VMZW5ndGggPSBCdWZmZXJTaXplOw0KPj4gKyAgUG9saWN5SGVhZGVyLT5T aWduYXR1cmUgICA9IFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9TSUc7DQo+PiArICBQb2xpY3lIZWFk ZXItPlJldmlzaW9uICAgID0gVkFSX0NIRUNLX1BPTElDWV9DT01NX1JFVklTSU9OOw0KPj4gKyAg UG9saWN5SGVhZGVyLT5Db21tYW5kICAgICA9IFZBUl9DSEVDS19QT0xJQ1lfQ09NTUFORF9ESVNB QkxFOw0KPj4gKw0KPj4gKyAgU3RhdHVzID0gSW50ZXJuYWxNbUNvbW11bmljYXRlIChDb21tSGVh ZGVyLCAmQnVmZmVyU2l6ZSk7DQo+PiArICBERUJVRygoIERFQlVHX1ZFUkJPU0UsICIlYSAtIE1t Q29tbXVuaWNhdGlvbiByZXR1cm5lZCAlci5cbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzICkpOw0K Pj4gKw0KPj4gKyAgUmVsZWFzZUxvY2tPbmx5QXRCb290VGltZSAoJm1NbUNvbW11bmljYXRpb25M b2NrKTsNCj4+ICsNCj4+ICsgIHJldHVybiAoRUZJX0VSUk9SKCBTdGF0dXMgKSkgPyBTdGF0dXMg OiBQb2xpY3lIZWFkZXItPlJlc3VsdDsNCj4+ICt9DQo+PiArDQo+PiArDQo+PiArLyoqDQo+PiAr ICBUaGlzIEFQSSBmdW5jdGlvbiByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwb2xpY3kgZW5n aW5lIGlzDQo+PiArICBjdXJyZW50bHkgYmVpbmcgZW5mb3JjZWQuDQo+PiArDQo+PiArICBAcGFy YW1bb3V0XSAgIFN0YXRlICAgICAgIFBvaW50ZXIgdG8gYSByZXR1cm4gdmFsdWUgZm9yIHdoZXRo ZXIgdGhlIHBvbGljeSBlbmZvcmNlbWVudA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpcyBjdXJyZW50bHkgZW5hYmxlZC4NCj4+ICsNCj4+ICsgIEByZXR2YWwgICAgIEVGSV9TVUND RVNTDQo+PiArICBAcmV0dmFsICAgICBPdGhlcnMgICAgICAgIEFuIGVycm9yIGhhcyBwcmV2ZW50 ZWQgdGhpcyBjb21tYW5kIGZyb20gY29tcGxldGluZy4NCj4+ICsNCj4+ICsqKi8NCj4+ICtTVEFU SUMNCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+PiArUHJvdG9jb2xJc1ZhcmlhYmxlUG9s aWN5RW5hYmxlZCAoDQo+PiArICBPVVQgQk9PTEVBTiAgICAgKlN0YXRlDQo+PiArICApDQo+PiAr ew0KPj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPj4gKyAgRUZJX01NX0NPTU1VTklDQVRFX0hFQURFUiAgICAgICAgICAgICAgICAgKkNvbW1I ZWFkZXI7DQo+PiArICBWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1fSEVBREVSICAgICAgICAgICAgICAq UG9saWN5SGVhZGVyOw0KPj4gKyAgVkFSX0NIRUNLX1BPTElDWV9DT01NX0lTX0VOQUJMRURfUEFS QU1TICAgKkNvbW1hbmRQYXJhbXM7DQo+PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCdWZmZXJTaXplOw0KPj4gKw0KPj4gKyAgaWYgKFN0YXRlID09IE5VTEwp IHsNCj4+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+ICsgIH0NCj4+ICsN Cj4+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtTW1Db21tdW5pY2F0aW9uTG9jayk7 DQo+PiArDQo+PiArICAvLyBTZXQgdXAgdGhlIE1NIGNvbW11bmljYXRpb24uDQo+PiArICBCdWZm ZXJTaXplICAgID0gbU1tQ29tbXVuaWNhdGlvbkJ1ZmZlclNpemU7DQo+PiArICBDb21tSGVhZGVy ICAgID0gbU1tQ29tbXVuaWNhdGlvbkJ1ZmZlcjsNCj4+ICsgIFBvbGljeUhlYWRlciAgPSAoVkFS X0NIRUNLX1BPTElDWV9DT01NX0hFQURFUiopJkNvbW1IZWFkZXItPkRhdGE7DQo+PiArICBDb21t YW5kUGFyYW1zID0gKFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9JU19FTkFCTEVEX1BBUkFNUyopKFBv bGljeUhlYWRlciArIDEpOw0KPj4gKyAgQ29weUd1aWQoICZDb21tSGVhZGVyLT5IZWFkZXJHdWlk LCAmZ1ZhckNoZWNrUG9saWN5TGliTW1pSGFuZGxlckd1aWQgKTsNCj4+ICsgIENvbW1IZWFkZXIt Pk1lc3NhZ2VMZW5ndGggPSBCdWZmZXJTaXplOw0KPj4gKyAgUG9saWN5SGVhZGVyLT5TaWduYXR1 cmUgICA9IFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9TSUc7DQo+PiArICBQb2xpY3lIZWFkZXItPlJl dmlzaW9uICAgID0gVkFSX0NIRUNLX1BPTElDWV9DT01NX1JFVklTSU9OOw0KPj4gKyAgUG9saWN5 SGVhZGVyLT5Db21tYW5kICAgICA9IFZBUl9DSEVDS19QT0xJQ1lfQ09NTUFORF9JU19FTkFCTEVE Ow0KPj4gKw0KPj4gKyAgU3RhdHVzID0gSW50ZXJuYWxNbUNvbW11bmljYXRlIChDb21tSGVhZGVy LCAmQnVmZmVyU2l6ZSk7DQo+PiArICBERUJVRygoIERFQlVHX1ZFUkJPU0UsICIlYSAtIE1tQ29t bXVuaWNhdGlvbiByZXR1cm5lZCAlci5cbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzICkpOw0KPj4g Kw0KPj4gKyAgaWYgKCFFRklfRVJST1IoIFN0YXR1cyApKSB7DQo+PiArICAgIFN0YXR1cyA9IFBv bGljeUhlYWRlci0+UmVzdWx0Ow0KPj4gKyAgICAqU3RhdGUgPSBDb21tYW5kUGFyYW1zLT5TdGF0 ZTsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIFJlbGVhc2VMb2NrT25seUF0Qm9vdFRpbWUgKCZtTW1D b21tdW5pY2F0aW9uTG9jayk7DQo+PiArDQo+PiArICByZXR1cm4gU3RhdHVzOw0KPj4gK30NCj4+ ICsNCj4+ICsNCj4+ICsvKioNCj4+ICsgIFRoaXMgQVBJIGZ1bmN0aW9uIHZhbGlkYXRlcyBhbmQg cmVnaXN0ZXJzIGEgbmV3IHBvbGljeSB3aXRoDQo+PiArICB0aGUgcG9saWN5IGVuZm9yY2VtZW50 IGVuZ2luZS4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gIE5ld1BvbGljeSAgICAgUG9pbnRlciB0 byB0aGUgaW5jb21pbmcgcG9saWN5IHN0cnVjdHVyZS4NCj4+ICsNCj4+ICsgIEByZXR2YWwgICAg IEVGSV9TVUNDRVNTDQo+PiArICBAcmV0dmFsICAgICBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBO ZXdQb2xpY3kgaXMgTlVMTCBvciBpcyBpbnRlcm5hbGx5IGluY29uc2lzdGVudC4NCj4+ICsgIEBy ZXR2YWwgICAgIEVGSV9BTFJFQURZX1NUQVJURUQgICAgIEFuIGlkZW50aWNhbCBtYXRjaGluZyBw b2xpY3kgYWxyZWFkeSBleGlzdHMuDQo+PiArICBAcmV0dmFsICAgICBFRklfV1JJVEVfUFJPVEVD VEVEICAgICBUaGUgaW50ZXJmYWNlIGhhcyBiZWVuIGxvY2tlZCB1bnRpbCB0aGUgbmV4dCByZWJv b3QuDQo+PiArICBAcmV0dmFsICAgICBFRklfVU5TVVBQT1JURUQgICAgICAgICBQb2xpY3kgZW5m b3JjZW1lbnQgaGFzIGJlZW4gZGlzYWJsZWQuIE5vIHJlYXNvbiB0byBhZGQgbW9yZSBwb2xpY2ll cy4NCj4+ICsgIEByZXR2YWwgICAgIEVGSV9BQk9SVEVEICAgICAgICAgICAgIEEgY2FsY3VsYXRp b24gZXJyb3IgaGFzIHByZXZlbnRlZCB0aGlzIGZ1bmN0aW9uIGZyb20gY29tcGxldGluZy4NCj4+ ICsgIEByZXR2YWwgICAgIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIENhbm5vdCBncm93IHRoZSB0 YWJsZSB0byBob2xkIGFueSBtb3JlIHBvbGljaWVzLg0KPj4gKw0KPj4gKyoqLw0KPj4gK1NUQVRJ Qw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtQcm90b2NvbFJlZ2lzdGVyVmFyaWFi bGVQb2xpY3kgKA0KPj4gKyAgSU4gVkFSSUFCTEVfUE9MSUNZX0VOVFJZICAgICpOZXdQb2xpY3kN Cj4+ICsgICkNCj4+ICt7DQo+PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+PiArICBFRklfTU1fQ09NTVVOSUNBVEVfSEVBREVSICAgICAgICAg ICAgICAgICAqQ29tbUhlYWRlcjsNCj4+ICsgIFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9IRUFERVIg ICAgICAgICAgICAgICpQb2xpY3lIZWFkZXI7DQo+PiArICBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqUG9saWN5QnVmZmVyOw0KPj4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZTsNCj4+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkU2l6ZTsNCj4+ICsNCj4+ICsg IGlmIChOZXdQb2xpY3kgPT0gTlVMTCkgew0KPj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KPj4gKyAgfQ0KPj4gKw0KPj4gKyAgLy8gRmlyc3QsIG1ha2Ugc3VyZSB0aGF0IHRo ZSByZXF1aXJlZCBzaXplIGRvZXMgbm90IGV4Y2VlZCB0aGUgY2FwYWJpbGl0aWVzDQo+PiArICAv LyBvZiB0aGUgTW1Db21tdW5pY2F0aW9uIGJ1ZmZlci4NCj4+ICsgIFJlcXVpcmVkU2l6ZSA9IE9G RlNFVF9PRihFRklfTU1fQ09NTVVOSUNBVEVfSEVBREVSLCBEYXRhKSArIHNpemVvZihWQVJfQ0hF Q0tfUE9MSUNZX0NPTU1fSEVBREVSKTsNCj4+ICsgIFN0YXR1cyA9IFNhZmVVaW50bkFkZCggUmVx dWlyZWRTaXplLCBOZXdQb2xpY3ktPlNpemUsICZSZXF1aXJlZFNpemUgKTsNCj4+ICsgIGlmIChF RklfRVJST1IoIFN0YXR1cyApIHx8IFJlcXVpcmVkU2l6ZSA+IG1NbUNvbW11bmljYXRpb25CdWZm ZXJTaXplKSB7DQo+PiArICAgIERFQlVHKCggREVCVUdfRVJST1IsICIlYSAtIFBvbGljeSB0b28g bGFyZ2UgZm9yIGJ1ZmZlciEgJXIsICVkID4gJWQgXG4iLCBfX0ZVTkNUSU9OX18sDQo+PiArICAg ICAgICAgICAgU3RhdHVzLCBSZXF1aXJlZFNpemUsIG1NbUNvbW11bmljYXRpb25CdWZmZXJTaXpl ICkpOw0KPj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+PiArICB9DQo+PiAr DQo+PiArICBBY3F1aXJlTG9ja09ubHlBdEJvb3RUaW1lICgmbU1tQ29tbXVuaWNhdGlvbkxvY2sp Ow0KPj4gKw0KPj4gKyAgLy8gU2V0IHVwIHRoZSBNTSBjb21tdW5pY2F0aW9uLg0KPj4gKyAgQnVm ZmVyU2l6ZSAgICA9IG1NbUNvbW11bmljYXRpb25CdWZmZXJTaXplOw0KPj4gKyAgQ29tbUhlYWRl ciAgICA9IG1NbUNvbW11bmljYXRpb25CdWZmZXI7DQo+PiArICBQb2xpY3lIZWFkZXIgID0gKFZB Ul9DSEVDS19QT0xJQ1lfQ09NTV9IRUFERVIqKSZDb21tSGVhZGVyLT5EYXRhOw0KPj4gKyAgUG9s aWN5QnVmZmVyICA9IChWT0lEKikoUG9saWN5SGVhZGVyICsgMSk7DQo+PiArICBDb3B5R3VpZCgg JkNvbW1IZWFkZXItPkhlYWRlckd1aWQsICZnVmFyQ2hlY2tQb2xpY3lMaWJNbWlIYW5kbGVyR3Vp ZCApOw0KPj4gKyAgQ29tbUhlYWRlci0+TWVzc2FnZUxlbmd0aCA9IEJ1ZmZlclNpemU7DQo+PiAr ICBQb2xpY3lIZWFkZXItPlNpZ25hdHVyZSAgID0gVkFSX0NIRUNLX1BPTElDWV9DT01NX1NJRzsN Cj4+ICsgIFBvbGljeUhlYWRlci0+UmV2aXNpb24gICAgPSBWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1f UkVWSVNJT047DQo+PiArICBQb2xpY3lIZWFkZXItPkNvbW1hbmQgICAgID0gVkFSX0NIRUNLX1BP TElDWV9DT01NQU5EX1JFR0lTVEVSOw0KPj4gKw0KPj4gKyAgLy8gQ29weSB0aGUgcG9saWN5IGlu dG8gcGxhY2UuIFRoaXMgY29weSBpcyBzYWZlIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSB0ZXN0ZWQg YWJvdmUuDQo+PiArICBDb3B5TWVtKCBQb2xpY3lCdWZmZXIsIE5ld1BvbGljeSwgTmV3UG9saWN5 LT5TaXplICk7DQo+PiArDQo+PiArICBTdGF0dXMgPSBJbnRlcm5hbE1tQ29tbXVuaWNhdGUgKENv bW1IZWFkZXIsICZCdWZmZXJTaXplKTsNCj4+ICsgIERFQlVHKCggREVCVUdfVkVSQk9TRSwgIiVh IC0gTW1Db21tdW5pY2F0aW9uIHJldHVybmVkICVyLlxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMg KSk7DQo+PiArDQo+PiArICBSZWxlYXNlTG9ja09ubHlBdEJvb3RUaW1lICgmbU1tQ29tbXVuaWNh dGlvbkxvY2spOw0KPj4gKw0KPj4gKyAgcmV0dXJuIChFRklfRVJST1IoIFN0YXR1cyApKSA/IFN0 YXR1cyA6IFBvbGljeUhlYWRlci0+UmVzdWx0Ow0KPj4gK30NCj4+ICsNCj4+ICsNCj4+ICsvKioN Cj4+ICsgIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgdGhlIG92ZXJoZWFkIG9m IGZvcm1hdHRpbmcsIHNlbmRpbmcsIGFuZCBpbnRlcnByZXRpbmcNCj4+ICsgIHRoZSByZXN1bHRz IGZvciBhIHNpbmdsZSBEdW1wVmFyaWFibGVQb2xpY3kgcmVxdWVzdC4NCj4+ICsNCj4+ICsgIEBw YXJhbVtpbl0gICAgICBQYWdlUmVxdWVzdGVkICAgVGhlIHBhZ2Ugb2YgdGhlIHBhZ2luYXRlZCBy ZXN1bHRzIGZyb20gTU0uIDAgZm9yIG1ldGFkYXRhLg0KPj4gKyAgQHBhcmFtW291dF0gICAgIFRv dGFsU2l6ZSAgICAgICBUaGUgdG90YWwgc2l6ZSBvZiB0aGUgZW50aXJlIGJ1ZmZlci4gUmV0dXJu ZWQgYXMgcGFydCBvZiBtZXRhZGF0YS4NCj4+ICsgIEBwYXJhbVtvdXRdICAgICBQYWdlU2l6ZSAg ICAgICAgVGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgcGFnZSBiZWluZyByZXR1cm5lZC4gTm90IHZh bGlkIGFzIHBhcnQgb2YgbWV0YWRhdGEuDQo+PiArICBAcGFyYW1bb3V0XSAgICAgSGFzTW9yZSAg ICAgICAgIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmUgcGFnZXMgYWZ0 ZXIgdGhpcyBvbmUuDQo+PiArICBAcGFyYW1bb3V0XSAgICAgQnVmZmVyICAgICAgICAgIFRoZSBz dGFydCBvZiB0aGUgY3VycmVudCBwYWdlIGZyb20gTU0uDQo+PiArDQo+PiArICBAcmV0dmFsICAg ICBFRklfU1VDQ0VTUyAgICAgICAgICAgICBPdXRwdXQgcGFyYW1zIGhhdmUgYmVlbiB1cGRhdGVk IChlaXRoZXIgbWV0YWRhdGEgb3IgZHVtcCBwYWdlKS4NCj4+ICsgIEByZXR2YWwgICAgIEVGSV9J TlZBTElEX1BBUkFNRVRFUiAgIE9uZSBvZiB0aGUgb3V0cHV0IHBhcmFtcyBpcyBOVUxMLg0KPj4g KyAgQHJldHZhbCAgICAgT3RoZXJzICAgICAgICAgICAgICAgICAgUmVzcG9uc2UgZnJvbSBNTSBo YW5kbGVyLg0KPj4gKw0KPj4gKyoqLw0KPj4gK1NUQVRJQw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtE dW1wVmFyaWFibGVQb2xpY3lIZWxwZXIgKA0KPj4gKyAgSU4gIFVJTlQzMiAgICAgICAgUGFnZVJl cXVlc3RlZCwNCj4+ICsgIE9VVCBVSU5UMzIgICAgICAgICpUb3RhbFNpemUsDQo+PiArICBPVVQg VUlOVDMyICAgICAgICAqUGFnZVNpemUsDQo+PiArICBPVVQgQk9PTEVBTiAgICAgICAqSGFzTW9y ZSwNCj4+ICsgIE9VVCBVSU5UOCAgICAgICAgICoqQnVmZmVyDQo+PiArICApDQo+PiArew0KPj4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+ICsg IEVGSV9NTV9DT01NVU5JQ0FURV9IRUFERVIgICAgICAgICAgICAgICAqQ29tbUhlYWRlcjsNCj4+ ICsgIFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9IRUFERVIgICAgICAgICAgICAqUG9saWN5SGVhZGVy Ow0KPj4gKyAgVkFSX0NIRUNLX1BPTElDWV9DT01NX0RVTVBfUEFSQU1TICAgICAgICpDb21tYW5k UGFyYW1zOw0KPj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1 ZmZlclNpemU7DQo+PiArDQo+PiArICBpZiAoVG90YWxTaXplID09IE5VTEwgfHwgUGFnZVNpemUg PT0gTlVMTCB8fCBIYXNNb3JlID09IE5VTEwgfHwgQnVmZmVyID09IE5VTEwpIHsNCj4+ICsgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIC8vIFNl dCB1cCB0aGUgTU0gY29tbXVuaWNhdGlvbi4NCj4+ICsgIEJ1ZmZlclNpemUgICAgPSBtTW1Db21t dW5pY2F0aW9uQnVmZmVyU2l6ZTsNCj4+ICsgIENvbW1IZWFkZXIgICAgPSBtTW1Db21tdW5pY2F0 aW9uQnVmZmVyOw0KPj4gKyAgUG9saWN5SGVhZGVyICA9IChWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1f SEVBREVSKikmQ29tbUhlYWRlci0+RGF0YTsNCj4+ICsgIENvbW1hbmRQYXJhbXMgPSAoVkFSX0NI RUNLX1BPTElDWV9DT01NX0RVTVBfUEFSQU1TKikoUG9saWN5SGVhZGVyICsgMSk7DQo+PiArICBD b3B5R3VpZCggJkNvbW1IZWFkZXItPkhlYWRlckd1aWQsICZnVmFyQ2hlY2tQb2xpY3lMaWJNbWlI YW5kbGVyR3VpZCApOw0KPj4gKyAgQ29tbUhlYWRlci0+TWVzc2FnZUxlbmd0aCA9IEJ1ZmZlclNp emU7DQo+PiArICBQb2xpY3lIZWFkZXItPlNpZ25hdHVyZSAgID0gVkFSX0NIRUNLX1BPTElDWV9D T01NX1NJRzsNCj4+ICsgIFBvbGljeUhlYWRlci0+UmV2aXNpb24gICAgPSBWQVJfQ0hFQ0tfUE9M SUNZX0NPTU1fUkVWSVNJT047DQo+PiArICBQb2xpY3lIZWFkZXItPkNvbW1hbmQgICAgID0gVkFS X0NIRUNLX1BPTElDWV9DT01NQU5EX0RVTVA7DQo+PiArDQo+PiArICBDb21tYW5kUGFyYW1zLT5Q YWdlUmVxdWVzdGVkID0gUGFnZVJlcXVlc3RlZDsNCj4+ICsNCj4+ICsgIFN0YXR1cyA9IEludGVy bmFsTW1Db21tdW5pY2F0ZSAoQ29tbUhlYWRlciwgJkJ1ZmZlclNpemUpOw0KPj4gKyAgREVCVUco KCBERUJVR19WRVJCT1NFLCAiJWEgLSBNbUNvbW11bmljYXRpb24gcmV0dXJuZWQgJXIuXG4iLCBf X0ZVTkNUSU9OX18sIFN0YXR1cyApKTsNCj4+ICsNCj4+ICsgIGlmICghRUZJX0VSUk9SKCBTdGF0 dXMgKSkgew0KPj4gKyAgICBTdGF0dXMgPSBQb2xpY3lIZWFkZXItPlJlc3VsdDsNCj4+ICsgICAg KlRvdGFsU2l6ZSA9IENvbW1hbmRQYXJhbXMtPlRvdGFsU2l6ZTsNCj4+ICsgICAgKlBhZ2VTaXpl ID0gQ29tbWFuZFBhcmFtcy0+UGFnZVNpemU7DQo+PiArICAgICpIYXNNb3JlID0gQ29tbWFuZFBh cmFtcy0+SGFzTW9yZTsNCj4+ICsgICAgKkJ1ZmZlciA9IChVSU5UOCopKENvbW1hbmRQYXJhbXMg KyAxKTsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIHJldHVybiBTdGF0dXM7DQo+PiArfQ0KPj4gKw0K Pj4gKw0KPj4gKy8qKg0KPj4gKyAgVGhpcyBBUEkgZnVuY3Rpb24gd2lsbCBkdW1wIHRoZSBlbnRp cmUgY29udGVudHMgb2YgdGhlIHZhcmlhYmxlIHBvbGljeSB0YWJsZS4NCj4+ICsNCj4+ICsgIFNp bWlsYXIgdG8gR2V0VmFyaWFibGUsIHRoZSBmaXJzdCBjYWxsIGNhbiBiZSBtYWRlIHdpdGggYSAw IHNpemUgYW5kIGl0IHdpbGwgcmV0dXJuDQo+PiArICB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHJl cXVpcmVkIHRvIGhvbGQgdGhlIGVudGlyZSB0YWJsZS4NCj4+ICsNCj4+ICsgIEBwYXJhbVtvdXRd ICAgICBQb2xpY3kgIFBvaW50ZXIgdG8gdGhlIHBvbGljeSBidWZmZXIuIENhbiBiZSBOVUxMIGlm IFNpemUgaXMgMC4NCj4+ICsgIEBwYXJhbVtpbixvdXRdICBTaXplICAgIE9uIGlucHV0LCB0aGUg c2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlci4gT24gb3V0cHV0LCB0aGUgc2l6ZQ0KPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGRhdGEgcmV0dXJuZWQuDQo+PiArDQo+PiArICBA cmV0dmFsICAgICBFRklfU1VDQ0VTUyAgICAgICAgICAgICBQb2xpY3kgZGF0YSBpcyBpbiB0aGUg b3V0cHV0IGJ1ZmZlciBhbmQgU2l6ZSBoYXMgYmVlbiB1cGRhdGVkLg0KPj4gKyAgQHJldHZhbCAg ICAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgU2l6ZSBpcyBOVUxMLCBvciBTaXplIGlzIG5vbi16 ZXJvIGFuZCBQb2xpY3kgaXMgTlVMTC4NCj4+ICsgIEByZXR2YWwgICAgIEVGSV9CVUZGRVJfVE9P X1NNQUxMICAgIFNpemUgaXMgaW5zdWZmaWNpZW50IHRvIGhvbGQgcG9saWN5LiBTaXplIHVwZGF0 ZWQgd2l0aCByZXF1aXJlZCBzaXplLg0KPj4gKw0KPj4gKyoqLw0KPj4gK1NUQVRJQw0KPj4gK0VG SV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtQcm90b2NvbER1bXBWYXJpYWJsZVBvbGljeSAoDQo+ PiArICBPVVQgVUlOVDggICAgICAgICAgICAgKlBvbGljeSBPUFRJT05BTCwNCj4+ICsgIElOIE9V VCBVSU5UMzIgICAgICAgICAqU2l6ZQ0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEVGSV9TVEFUVVMg ICAgU3RhdHVzOw0KPj4gKyAgVUlOVDggICAgICAgICAqU291cmNlOw0KPj4gKyAgVUlOVDggICAg ICAgICAqRGVzdGluYXRpb247DQo+PiArICBVSU5UMzIgICAgICAgIFBvbGljeVNpemU7DQo+PiAr ICBVSU5UMzIgICAgICAgIFBhZ2VTaXplOw0KPj4gKyAgQk9PTEVBTiAgICAgICBIYXNNb3JlOw0K Pj4gKyAgVUlOVDMyICAgICAgICBQYWdlSW5kZXg7DQo+PiArDQo+PiArICBpZiAoU2l6ZSA9PSBO VUxMIHx8ICgqU2l6ZSA+IDAgJiYgUG9saWN5ID09IE5VTEwpKSB7DQo+PiArICAgIHJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVI7DQo+PiArICB9DQo+PiArDQo+PiArICBBY3F1aXJlTG9ja09u bHlBdEJvb3RUaW1lICgmbU1tQ29tbXVuaWNhdGlvbkxvY2spOw0KPj4gKw0KPj4gKyAgLy8gUmVw ZWF0IHRoaXMgd2hvbGUgcHJvY2VzcyB1bnRpbCB3ZSBlaXRoZXIgaGF2ZSBhIGZhaWx1cmUgY2Fz ZSBvciBnZXQgdGhlIGVudGlyZSBidWZmZXIuDQo+PiArICBkbyB7DQo+PiArICAgIC8vIEZpcnN0 LCB3ZSBtdXN0IGNoZWNrIHRoZSB6ZXJvIHBhZ2UgdG8gZGV0ZXJtaW5lIHRoZSBidWZmZXIgc2l6 ZSBhbmQNCj4+ICsgICAgLy8gcmVzZXQgdGhlIGludGVybmFsIHN0YXRlLg0KPj4gKyAgICBQb2xp Y3lTaXplID0gMDsNCj4+ICsgICAgUGFnZVNpemUgPSAwOw0KPj4gKyAgICBIYXNNb3JlID0gRkFM U0U7DQo+PiArICAgIFN0YXR1cyA9IER1bXBWYXJpYWJsZVBvbGljeUhlbHBlciAoMCwgJlBvbGlj eVNpemUsICZQYWdlU2l6ZSwgJkhhc01vcmUsICZTb3VyY2UpOw0KPj4gKyAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+PiArICAgICAgYnJlYWs7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsg ICAgLy8gSWYgd2UncmUgZ29vZCwgd2UgY2FuIGF0IGxlYXN0IGNoZWNrIHRoZSByZXF1aXJlZCBz aXplIG5vdy4NCj4+ICsgICAgaWYgKCpTaXplIDwgUG9saWN5U2l6ZSkgew0KPj4gKyAgICAgICpT aXplID0gUG9saWN5U2l6ZTsNCj4+ICsgICAgICBTdGF0dXMgPSBFRklfQlVGRkVSX1RPT19TTUFM TDsNCj4+ICsgICAgICBicmVhazsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICAvLyBPbiBmdXJ0 aGVyIHRob3VnaHQsIGxldCdzIHVwZGF0ZSB0aGUgc2l6ZSBlaXRoZXIgd2F5Lg0KPj4gKyAgICAq U2l6ZSA9IFBvbGljeVNpemU7DQo+PiArICAgIC8vIEFuZCBnZXQgcmVhZHkgdG8gUk9DSy4NCj4+ ICsgICAgRGVzdGluYXRpb24gPSBQb2xpY3k7DQo+PiArDQo+PiArICAgIC8vIEtlZXAgbG9vcGlu ZyBhbmQgY29weWluZyB1bnRpbCB3ZSdyZSBlaXRoZXIgZG9uZSBvciBmcmVhayBvdXQuDQo+PiAr ICAgIGZvciAoUGFnZUluZGV4ID0gMTsgIUVGSV9FUlJPUiAoU3RhdHVzKSAmJiBIYXNNb3JlICYm IFBhZ2VJbmRleCA8IE1BWF9VSU5UMzI7IFBhZ2VJbmRleCsrKSB7DQo+PiArICAgICAgU3RhdHVz ID0gRHVtcFZhcmlhYmxlUG9saWN5SGVscGVyIChQYWdlSW5kZXgsICZQb2xpY3lTaXplLCAmUGFn ZVNpemUsICZIYXNNb3JlLCAmU291cmNlKTsNCj4+ICsgICAgICBpZiAoIUVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPj4gKyAgICAgICAgQ29weU1lbSAoRGVzdGluYXRpb24sIFNvdXJjZSwgUGFnZVNp emUpOw0KPj4gKyAgICAgICAgRGVzdGluYXRpb24gKz0gUGFnZVNpemU7DQo+PiArICAgICAgfQ0K Pj4gKyAgICB9DQo+PiArDQo+PiArICAgIC8vIE5leHQsIHdlIGNoZWNrIHRvIHNlZSB3aGV0aGVy DQo+PiArICB9IHdoaWxlIChTdGF0dXMgPT0gRUZJX1RJTUVPVVQpOw0KPj4gKw0KPj4gKyAgUmVs ZWFzZUxvY2tPbmx5QXRCb290VGltZSAoJm1NbUNvbW11bmljYXRpb25Mb2NrKTsNCj4+ICsNCj4+ ICsgIC8vIFRoZXJlJ3MgY3VycmVudGx5IG5vIHVzZSBmb3IgdGhpcywgYnV0IGl0IHNob3VsZG4n dCBiZSBoYXJkIHRvIGltcGxlbWVudC4NCj4+ICsgIHJldHVybiBTdGF0dXM7DQo+PiArfQ0KPj4g Kw0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgVGhpcyBBUEkgZnVuY3Rpb24gbG9ja3MgdGhlIGludGVy ZmFjZSBzbyB0aGF0IG5vIG1vcmUgcG9saWN5IHVwZGF0ZXMNCj4+ICsgIGNhbiBiZSBwZXJmb3Jt ZWQgb3IgY2hhbmdlcyBtYWRlIHRvIHRoZSBlbmZvcmNlbWVudCB1bnRpbCB0aGUgbmV4dCBib290 Lg0KPj4gKw0KPj4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MNCj4+ICsgIEByZXR2YWwgICAg IE90aGVycyAgICAgICAgQW4gZXJyb3IgaGFzIHByZXZlbnRlZCB0aGlzIGNvbW1hbmQgZnJvbSBj b21wbGV0aW5nLg0KPj4gKw0KPj4gKyoqLw0KPj4gK1NUQVRJQw0KPj4gK0VGSV9TVEFUVVMNCj4+ ICtFRklBUEkNCj4+ICtQcm90b2NvbExvY2tWYXJpYWJsZVBvbGljeSAoDQo+PiArICBWT0lEDQo+ PiArICApDQo+PiArew0KPj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPj4gKyAgRUZJX01NX0NPTU1VTklDQVRFX0hFQURFUiAgICAgKkNvbW1IZWFkZXI7DQo+PiAr ICBWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1fSEVBREVSICAqUG9saWN5SGVhZGVyOw0KPj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZTsNCj4+ICsNCj4+ICsgIEFjcXVp cmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtTW1Db21tdW5pY2F0aW9uTG9jayk7DQo+PiArDQo+PiAr ICAvLyBTZXQgdXAgdGhlIE1NIGNvbW11bmljYXRpb24uDQo+PiArICBCdWZmZXJTaXplICAgID0g bU1tQ29tbXVuaWNhdGlvbkJ1ZmZlclNpemU7DQo+PiArICBDb21tSGVhZGVyICAgID0gbU1tQ29t bXVuaWNhdGlvbkJ1ZmZlcjsNCj4+ICsgIFBvbGljeUhlYWRlciAgPSAoVkFSX0NIRUNLX1BPTElD WV9DT01NX0hFQURFUiopJkNvbW1IZWFkZXItPkRhdGE7DQo+PiArICBDb3B5R3VpZCggJkNvbW1I ZWFkZXItPkhlYWRlckd1aWQsICZnVmFyQ2hlY2tQb2xpY3lMaWJNbWlIYW5kbGVyR3VpZCApOw0K Pj4gKyAgQ29tbUhlYWRlci0+TWVzc2FnZUxlbmd0aCA9IEJ1ZmZlclNpemU7DQo+PiArICBQb2xp Y3lIZWFkZXItPlNpZ25hdHVyZSAgID0gVkFSX0NIRUNLX1BPTElDWV9DT01NX1NJRzsNCj4+ICsg IFBvbGljeUhlYWRlci0+UmV2aXNpb24gICAgPSBWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1fUkVWSVNJ T047DQo+PiArICBQb2xpY3lIZWFkZXItPkNvbW1hbmQgICAgID0gVkFSX0NIRUNLX1BPTElDWV9D T01NQU5EX0xPQ0s7DQo+PiArDQo+PiArICBTdGF0dXMgPSBJbnRlcm5hbE1tQ29tbXVuaWNhdGUg KENvbW1IZWFkZXIsICZCdWZmZXJTaXplKTsNCj4+ICsgIERFQlVHKCggREVCVUdfVkVSQk9TRSwg IiVhIC0gTW1Db21tdW5pY2F0aW9uIHJldHVybmVkICVyLlxuIiwgX19GVU5DVElPTl9fLCBTdGF0 dXMgKSk7DQo+PiArDQo+PiArICBSZWxlYXNlTG9ja09ubHlBdEJvb3RUaW1lICgmbU1tQ29tbXVu aWNhdGlvbkxvY2spOw0KPj4gKw0KPj4gKyAgcmV0dXJuIChFRklfRVJST1IoIFN0YXR1cyApKSA/ IFN0YXR1cyA6IFBvbGljeUhlYWRlci0+UmVzdWx0Ow0KPj4gK30NCj4+ICsNCj4+ICsNCj4+ICsv KioNCj4+ICsgIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGxvY2F0ZXMgdGhlIHNoYXJlZCBjb21tIGJ1 ZmZlciBhbmQgYXNzaWducyBpdCB0byBpbnB1dCBwb2ludGVycy4NCj4+ICsNCj4+ICsgIEBwYXJh bVtpbixvdXRdICBCdWZmZXJTaXplICAgICAgT24gaW5wdXQsIHRoZSBtaW5pbXVtIGJ1ZmZlciBz aXplIHJlcXVpcmVkIElOQ0xVRElORyB0aGUgTU0gY29tbXVuaWNhdGUgaGVhZGVyLg0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSBzaXplIG9mIHRo ZSBtYXRjaGluZyBidWZmZXIgZm91bmQuDQo+PiArICBAcGFyYW1bb3V0XSAgICAgTG9jYXRlZEJ1 ZmZlciAgIEEgcG9pbnRlciB0byB0aGUgbWF0Y2hpbmcgYnVmZmVyLg0KPj4gKw0KPj4gKyAgQHJl dHZhbCAgICAgRUZJX1NVQ0NFU1MNCj4+ICsgIEByZXR2YWwgICAgIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgIE9uZSBvZiB0aGUgb3V0cHV0IHBvaW50ZXJzIHdhcyBOVUxMLg0KPj4gKyAgQHJldHZh bCAgICAgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgTm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2Nh dGUgYSBjb21tIGJ1ZmZlci4NCj4+ICsNCj4+ICsqKi8NCj4+ICtTVEFUSUMNCj4+ICtFRklfU1RB VFVTDQo+PiArSW5pdE1tQ29tbW9uQ29tbUJ1ZmZlciAoDQo+PiArICBJTiBPVVQgIFVJTlROICAg ICAgICpCdWZmZXJTaXplLA0KPj4gKyAgT1VUICAgICBWT0lEICAgICAgICAqKkxvY2F0ZWRCdWZm ZXINCj4+ICsgICkNCj4+ICt7DQo+PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KPj4gKw0KPj4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+PiArDQo+PiArICAvLyBN YWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggZ29vZCBwb2ludGVycy4NCj4+ICsgIGlm IChCdWZmZXJTaXplID09IE5VTEwgfHwgTG9jYXRlZEJ1ZmZlciA9PSBOVUxMKSB7DQo+PiArICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+PiArICB9DQo+PiArDQo+PiArICAvLyBB bGxvY2F0ZSB0aGUgcnVudGltZSBtZW1vcnkgZm9yIHRoZSBjb21tIGJ1ZmZlci4NCj4+ICsgICpM b2NhdGVkQnVmZmVyID0gQWxsb2NhdGVSdW50aW1lUG9vbCAoKkJ1ZmZlclNpemUpOw0KPj4gKyAg aWYgKCpMb2NhdGVkQnVmZmVyID09IE5VTEwpIHsNCj4+ICsgICAgU3RhdHVzID0gRUZJX09VVF9P Rl9SRVNPVVJDRVM7DQo+PiArICAgICpCdWZmZXJTaXplID0gMDsNCj4+ICsgIH0NCj4+ICsNCj4+ ICsgIEVmaUluaXRpYWxpemVMb2NrICgmbU1tQ29tbXVuaWNhdGlvbkxvY2ssIFRQTF9OT1RJRlkp Ow0KPj4gKw0KPj4gKyAgcmV0dXJuIFN0YXR1czsNCj4+ICt9DQo+PiArDQo+PiArDQo+PiArLyoq DQo+PiArICBUaGlzIGhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgdGVsZW1ldHJ5IGFuZCBhbnkg b3RoZXIgYWN0aW9ucyB0aGF0DQo+PiArICBuZWVkIHRvIGJlIHRha2VuIGlmIHRoZSBWYXJpYWJs ZVBvbGljeSBmYWlscyB0byBsb2NrLg0KPj4gKw0KPj4gKyAgTk9URTogSXQncyBwb3NzaWJsZSB0 aGF0IHBhcnRzIG9mIHRoaXMgaGFuZGxpbmcgd2lsbCBuZWVkIHRvIGJlY29tZQ0KPj4gKyAgICAg ICAgcGFydCBvZiBhIHBsYXRmb3JtIHBvbGljeS4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gIEZh aWx1cmVTdGF0dXMgICBUaGUgZmFpbHVyZSB0aGF0IHdhcyByZXBvcnRlZCBieSBMb2NrVmFyaWFi bGVQb2xpY3kNCj4+ICsNCj4+ICsqKi8NCj4+ICtTVEFUSUMNCj4+ICtWT0lEDQo+PiArVmFyaWFi bGVQb2xpY3lIYW5kbGVGYWlsdXJlVG9Mb2NrICgNCj4+ICsgIElOICBFRklfU1RBVFVTICAgICAg RmFpbHVyZVN0YXR1cw0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIC8vIEZvciBub3csIHRoZXJlJ3Mg bm8gYWdyZWVkLXVwb24gcG9saWN5IGZvciB0aGlzLg0KPj4gKyAgcmV0dXJuOw0KPj4gK30NCj4+ ICsNCj4+ICsNCj4+ICsvKioNCj4+ICsgIFJlYWR5VG9Cb290IENhbGxiYWNrDQo+PiArICBMb2Nr IHRoZSBWYXJpYWJsZVBvbGljeSBpbnRlcmZhY2UgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBs b2NrZWQuDQo+PiArDQo+PiArICBAcGFyYW1baW5dICBFdmVudCAgICAgRXZlbnQgd2hvc2Ugbm90 aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQNCj4+ICsgIEBwYXJhbVtpbl0gIENv bnRleHQgICBQb2ludGVyIHRvIHRoZSBub3RpZmljYXRpb24gZnVuY3Rpb24ncyBjb250ZXh0DQo+ PiArDQo+PiArKiovDQo+PiArU1RBVElDDQo+PiArVk9JRA0KPj4gK0VGSUFQSQ0KPj4gK0xvY2tQ b2xpY3lJbnRlcmZhY2VBdFJlYWR5VG9Cb290ICgNCj4+ICsgIElOICAgICAgRUZJX0VWRU5UICAg ICAgICAgICAgICAgICBFdmVudCwNCj4+ICsgIElOICAgICAgVk9JRCAgICAgICAgICAgICAgICAg ICAgICAqQ29udGV4dA0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsN Cj4+ICsNCj4+ICsgIFN0YXR1cyA9IFByb3RvY29sTG9ja1ZhcmlhYmxlUG9saWN5KCk7DQo+PiAr DQo+PiArICBpZiAoRUZJX0VSUk9SKCBTdGF0dXMgKSkgew0KPj4gKyAgICBWYXJpYWJsZVBvbGlj eUhhbmRsZUZhaWx1cmVUb0xvY2soIFN0YXR1cyApOw0KPj4gKyAgfQ0KPj4gKyAgZWxzZSB7DQo+ PiArICAgIGdCUy0+Q2xvc2VFdmVudCggRXZlbnQgKTsNCj4+ICsgIH0NCj4+ICsNCj4+ICt9DQo+ PiArDQo+PiArDQo+PiArLyoqDQo+PiArICBDb252ZXJ0IGludGVybmFsIHBvaW50ZXIgYWRkcmVz c2VzIHRvIHZpcnR1YWwgYWRkcmVzc2VzLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSBFdmVudCAg ICAgIEV2ZW50IHdob3NlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLg0K Pj4gKyAgQHBhcmFtW2luXSBDb250ZXh0ICAgIFRoZSBwb2ludGVyIHRvIHRoZSBub3RpZmljYXRp b24gZnVuY3Rpb24ncyBjb250ZXh0LCB3aGljaA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg IGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4NCj4+ICsqKi8NCj4+ICtTVEFUSUMNCj4+ICtW T0lEDQo+PiArRUZJQVBJDQo+PiArVmFyaWFibGVQb2xpY3lWaXJ0dWFsQWRkcmVzc0NhbGxiYWNr ICgNCj4+ICsgIElOICBFRklfRVZFTlQgICBFdmVudCwNCj4+ICsgIElOICBWT0lEICAgICAgICAq Q29udGV4dA0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEVmaUNvbnZlcnRQb2ludGVyICgwLCAoVk9J RCAqKikmbU1tQ29tbXVuaWNhdGlvbik7DQo+PiArICBFZmlDb252ZXJ0UG9pbnRlciAoMCwgKFZP SUQgKiopJm1NbUNvbW11bmljYXRpb25CdWZmZXIpOw0KPj4gK30NCj4+ICsNCj4+ICsNCj4+ICsv KioNCj4+ICsgIFRoZSBkcml2ZXIncyBlbnRyeSBwb2ludC4NCj4+ICsNCj4+ICsgIEBwYXJhbVtp bl0gSW1hZ2VIYW5kbGUgIFRoZSBmaXJtd2FyZSBhbGxvY2F0ZWQgaGFuZGxlIGZvciB0aGUgRUZJ IGltYWdlLg0KPj4gKyAgQHBhcmFtW2luXSBTeXN0ZW1UYWJsZSAgQSBwb2ludGVyIHRvIHRoZSBF RkkgU3lzdGVtIFRhYmxlLg0KPj4gKw0KPj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhl IGVudHJ5IHBvaW50IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4+ICsgIEByZXR2YWwgb3RoZXIg ICAgICAgICAgIFNvbWUgZXJyb3Igb2NjdXJlZCB3aGVuIGV4ZWN1dGluZyB0aGlzIGVudHJ5IHBv aW50Lg0KPj4gKw0KPj4gKyoqLw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtWYXJp YWJsZVBvbGljeVNtbUR4ZU1haW4gKA0KPj4gKyAgSU4gICAgRUZJX0hBTkRMRSAgICAgICAgICAg ICAgICAgIEltYWdlSGFuZGxlLA0KPj4gKyAgSU4gICAgRUZJX1NZU1RFTV9UQUJMRSAgICAgICAg ICAgICpTeXN0ZW1UYWJsZQ0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEVGSV9TVEFUVVMgICAgICAg ICAgICAgIFN0YXR1czsNCj4+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgIFByb3RvY29sSW5z dGFsbGVkOw0KPj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgQ2FsbGJhY2tSZWdpc3RlcmVk Ow0KPj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgVmlydHVhbEFkZHJlc3NDaGFuZ2VSZWdp c3RlcmVkOw0KPj4gKyAgRUZJX0VWRU5UICAgICAgICAgICAgICAgUmVhZHlUb0Jvb3RFdmVudDsN Cj4+ICsgIEVGSV9FVkVOVCAgICAgICAgICAgICAgIFZpcnR1YWxBZGRyZXNzQ2hhbmdlRXZlbnQ7 DQo+PiArDQo+PiArICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4+ICsgIFByb3RvY29sSW5zdGFs bGVkID0gRkFMU0U7DQo+PiArICBDYWxsYmFja1JlZ2lzdGVyZWQgPSBGQUxTRTsNCj4+ICsgIFZp cnR1YWxBZGRyZXNzQ2hhbmdlUmVnaXN0ZXJlZCA9IEZBTFNFOw0KPj4gKw0KPj4gKyAgLy8gVXBk YXRlIHRoZSBtaW5pbXVtIGJ1ZmZlciBzaXplLg0KPj4gKyAgbU1tQ29tbXVuaWNhdGlvbkJ1ZmZl clNpemUgPSBWQVJfQ0hFQ0tfUE9MSUNZX01NX0NPTU1fQlVGRkVSX1NJWkU7DQo+PiArICAvLyBM b2NhdGUgdGhlIHNoYXJlZCBjb21tIGJ1ZmZlciB0byB1c2UgZm9yIHNlbmRpbmcgTU0gY29tbWFu ZHMuDQo+PiArICBTdGF0dXMgPSBJbml0TW1Db21tb25Db21tQnVmZmVyKCAmbU1tQ29tbXVuaWNh dGlvbkJ1ZmZlclNpemUsICZtTW1Db21tdW5pY2F0aW9uQnVmZmVyICk7DQo+PiArICBpZiAoRUZJ X0VSUk9SKCBTdGF0dXMgKSkgew0KPj4gKyAgICBERUJVRygoREVCVUdfRVJST1IsICIlYSAtIEZh aWxlZCB0byBsb2NhdGUgYSB2aWFibGUgTU0gY29tbSBidWZmZXIhICVyXG4iLCBfX0ZVTkNUSU9O X18sIFN0YXR1cykpOw0KPj4gKyAgICBBU1NFUlRfRUZJX0VSUk9SKCBTdGF0dXMgKTsNCj4+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIC8vIExvY2F0ZSB0aGUgTW1D b21tdW5pY2F0aW9uIHByb3RvY29sLg0KPj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2Nv bCggJmdFZmlNbUNvbW11bmljYXRpb24yUHJvdG9jb2xHdWlkLCBOVUxMLCAoVk9JRCoqKSZtTW1D b21tdW5pY2F0aW9uICk7DQo+PiArICBpZiAoRUZJX0VSUk9SKCBTdGF0dXMgKSkgew0KPj4gKyAg ICBERUJVRygoREVCVUdfRVJST1IsICIlYSAtIEZhaWxlZCB0byBsb2NhdGUgTW1Db21tdW5pY2F0 aW9uIHByb3RvY29sISAlclxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4+ICsgICAgQVNT RVJUX0VGSV9FUlJPUiggU3RhdHVzICk7DQo+PiArICAgIHJldHVybiBTdGF0dXM7DQo+PiArICB9 DQo+PiArDQo+PiArICAvLyBDb25maWd1cmUgdGhlIFZhcmlhYmxlUG9saWN5IHByb3RvY29sIHN0 cnVjdHVyZS4NCj4+ICsgIG1WYXJpYWJsZVBvbGljeVByb3RvY29sLlJldmlzaW9uICAgICAgICAg ICAgICAgID0gRURLSUlfVkFSSUFCTEVfUE9MSUNZX1BST1RPQ09MX1JFVklTSU9OOw0KPj4gKyAg bVZhcmlhYmxlUG9saWN5UHJvdG9jb2wuRGlzYWJsZVZhcmlhYmxlUG9saWN5ICAgPSBQcm90b2Nv bERpc2FibGVWYXJpYWJsZVBvbGljeTsNCj4+ICsgIG1WYXJpYWJsZVBvbGljeVByb3RvY29sLklz VmFyaWFibGVQb2xpY3lFbmFibGVkID0gUHJvdG9jb2xJc1ZhcmlhYmxlUG9saWN5RW5hYmxlZDsN Cj4+ICsgIG1WYXJpYWJsZVBvbGljeVByb3RvY29sLlJlZ2lzdGVyVmFyaWFibGVQb2xpY3kgID0g UHJvdG9jb2xSZWdpc3RlclZhcmlhYmxlUG9saWN5Ow0KPiANCj4gKDIpICJlcnJvcjogYXNzaWdu bWVudCBmcm9tIGluY29tcGF0aWJsZSBwb2ludGVyIHR5cGUgWy1XZXJyb3JdIg0KPiANCj4gQmVj YXVzZSwgd2l0aCBteSBsb2NhbCBtb2RpZmljYXRpb24gZm9yICgxKSwgdGhlIExIUyBub3cgdGFr ZXMgYQ0KPiBwb2ludGVyLXRvLUNPTlNULCBidXQgdGhlIFJIUyBpcyBkZWNsYXJlZCAoaW4gdGhl IHByZXNlbnQgcGF0Y2gpIGFzDQo+IA0KPiAgIFNUQVRJQw0KPiAgIEVGSV9TVEFUVVMNCj4gICBF RklBUEkNCj4gICBQcm90b2NvbFJlZ2lzdGVyVmFyaWFibGVQb2xpY3kgKA0KPiAgICAgSU4gVkFS SUFCTEVfUE9MSUNZX0VOVFJZICAgICpOZXdQb2xpY3kNCj4gICAgICkNCj4gDQo+IFNvIEkgbW9k aWZpZWQgdGhpcyB0b28sIHRvIHRha2UgYSBwb2ludGVyLXRvLUNPTlNULiBUaGF0IGFsbG93ZWQg dGhlDQo+IGJ1aWxkcyB0byBjb21wbGV0ZS4NCj4gDQo+IFRoZXJlZm9yZSBJIHN1Z2dlc3Qgb25l IG9mIHRoZSBmb2xsb3dpbmc6DQo+IA0KPiAoYSkgSWYgQ09OU1QgaXMgbm90IGltcG9ydGFudCBp biB0aGUgUmVnaXN0ZXJWYXJpYWJsZVBvbGljeSgpIGxpYiBjbGFzcw0KPiBBUEksIHRoZW4gcGxl YXNlIHJlbW92ZSBDT05TVCBmcm9tIHRoZXJlIChhbmQgdGhlIGltcGxlbWVudGF0aW9uKHMpIG9m DQo+IHRoYXQgZnVuY3Rpb24pLg0KPiANCj4gKGIpIEFsdGVybmF0aXZlbHksIGlmIENPTlNUIGlz IHByZWZlcnJlZCBpbiB0aGUgbGlicmFyeSwgdGhlbg0KPiANCj4gKGIxKSBwbGVhc2Ugc3F1YXNo IHRoZSBmb2xsb3dpbmcgaHVuazoNCj4gDQo+PiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0lu Y2x1ZGUvUHJvdG9jb2wvVmFyaWFibGVQb2xpY3kuaCBiL01kZU1vZHVsZVBrZy9JbmNsdWRlL1By b3RvY29sL1ZhcmlhYmxlUG9saWN5LmgNCj4+IGluZGV4IDMwZDZjMTU1YWU2YS4uODNiNmE5OTlk ZjA3IDEwMDY0NA0KPj4gLS0tIGEvTWRlTW9kdWxlUGtnL0luY2x1ZGUvUHJvdG9jb2wvVmFyaWFi bGVQb2xpY3kuaA0KPj4gKysrIGIvTWRlTW9kdWxlUGtnL0luY2x1ZGUvUHJvdG9jb2wvVmFyaWFi bGVQb2xpY3kuaA0KPj4gQEAgLTEwMiw3ICsxMDIsNyBAQCBFRklfU1RBVFVTDQo+PiAgdHlwZWRl Zg0KPj4gIEVGSV9TVEFUVVMNCj4+ICAoRUZJQVBJICpSRUdJU1RFUl9WQVJJQUJMRV9QT0xJQ1kp KA0KPj4gLSAgSU4gVkFSSUFCTEVfUE9MSUNZX0VOVFJZICpQb2xpY3lFbnRyeQ0KPj4gKyAgSU4g Q09OU1QgVkFSSUFCTEVfUE9MSUNZX0VOVFJZICpQb2xpY3lFbnRyeQ0KPj4gICAgKTsNCj4+DQo+ PiAgLyoqDQo+IA0KPiBpbnRvIHBhdGNoICJNZGVNb2R1bGVQa2c6IERlZmluZSB0aGUgVmFyaWFi bGVQb2xpY3kgcHJvdG9jb2wgaW50ZXJmYWNlIi4NCj4gDQo+IChiMikgQW5kIHBsZWFzZSBzcXVh c2ggdGhlIGZvbGxvd2luZyBodW5rOg0KPiANCj4+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cv VW5pdmVyc2FsL1ZhcmlhYmxlL1J1bnRpbWVEeGUvVmFyaWFibGVQb2xpY3lTbW1EeGUuYyBiL01k ZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4ZS9WYXJpYWJsZVBvbGljeVNt bUR4ZS5jDQo+PiBpbmRleCAzZDc5OTAyNTk4M2EuLmUyZDRjZjRjZWMxYSAxMDA2NDQNCj4+IC0t LSBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4ZS9WYXJpYWJsZVBv bGljeVNtbUR4ZS5jDQo+PiArKysgYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1J1 bnRpbWVEeGUvVmFyaWFibGVQb2xpY3lTbW1EeGUuYw0KPj4gQEAgLTE3Niw3ICsxNzYsNyBAQCBT VEFUSUMNCj4+ICBFRklfU1RBVFVTDQo+PiAgRUZJQVBJDQo+PiAgUHJvdG9jb2xSZWdpc3RlclZh cmlhYmxlUG9saWN5ICgNCj4+IC0gIElOIFZBUklBQkxFX1BPTElDWV9FTlRSWSAgICAqTmV3UG9s aWN5DQo+PiArICBJTiBDT05TVCBWQVJJQUJMRV9QT0xJQ1lfRU5UUlkgICAgKk5ld1BvbGljeQ0K Pj4gICAgKQ0KPj4gIHsNCj4+ICAgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gDQo+IGludG8gdGhlIHByZXNlbnQgcGF0Y2guDQo+IA0KPiBJJ3Zl IHVzZWQgKGIxKSsoYjIpIGxvY2FsbHksIGFuZCB0aG9zZSB0b2dldGhlciBhbGxvdyB0aGUgYnVp bGRzIHRvDQo+IGNvbXBsZXRlLg0KPiANCj4gDQo+IE5vdywgSSB3b25kZXIgd2h5IHRoZSBHQ0Mg LyBPVk1GIGJ1aWxkKHMpIGluIHRoZSBnaXRodWIuY29tIENJIGRpZCBub3QNCj4gcmVwb3J0IHRo aXMgcHJvYmxlbS4gQWNjb3JkaW5nIHRvIHRoZSBDOTkgc3RhbmRhcmQsICI2LjcuNS4zIEZ1bmN0 aW9uDQo+IGRlY2xhcmF0b3JzIChpbmNsdWRpbmcgcHJvdG90eXBlcykiLCBwYXJhZ3JhcGggMTU6 DQo+IA0KPiAgIEZvciB0d28gZnVuY3Rpb24gdHlwZXMgdG8gYmUgY29tcGF0aWJsZSwgYm90aCBz aGFsbCBzcGVjaWZ5IGNvbXBhdGlibGUNCj4gICByZXR1cm4gdHlwZXMuIFsuLi5dICBNb3Jlb3Zl ciwgdGhlIHBhcmFtZXRlciB0eXBlIGxpc3RzLCBpZiBib3RoIGFyZQ0KPiAgIHByZXNlbnQsIHNo YWxsIGFncmVlIGluIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBhbmQgaW4gdXNlIG9mIHRoZQ0K PiAgIGVsbGlwc2lzIHRlcm1pbmF0b3I7IGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVycyBzaGFsbCBo YXZlIGNvbXBhdGlibGUNCj4gICB0eXBlcy4gWy4uLl0NCj4gDQo+IEZ1cnRoZXJtb3JlLCBmcm9t ICI2LjcuNS4xIFBvaW50ZXIgZGVjbGFyYXRvcnMiLCBwYXJhZ3JhcGggMjoNCj4gDQo+ICAgRm9y IHR3byBwb2ludGVyIHR5cGVzIHRvIGJlIGNvbXBhdGlibGUsIGJvdGggc2hhbGwgYmUgaWRlbnRp Y2FsbHkNCj4gICBxdWFsaWZpZWQgYW5kIGJvdGggc2hhbGwgYmUgcG9pbnRlcnMgdG8gY29tcGF0 aWJsZSB0eXBlcy4NCj4gDQo+IFlldCBmdXJ0aGVyLCBmcm9tICI2LjUuMTYuMSBTaW1wbGUgYXNz aWdubWVudCIsIHBhcmFncmFwaCAxOg0KPiANCj4gICBPbmUgb2YgdGhlIGZvbGxvd2luZyBzaGFs bCBob2xkOg0KPiANCj4gICBbLi4uXQ0KPiANCj4gICAtIGJvdGggb3BlcmFuZHMgYXJlIHBvaW50 ZXJzIHRvIHF1YWxpZmllZCBvciB1bnF1YWxpZmllZCB2ZXJzaW9ucyBvZg0KPiAgICAgY29tcGF0 aWJsZSB0eXBlcywgYW5kIHRoZSB0eXBlIHBvaW50ZWQgdG8gYnkgdGhlIGxlZnQgaGFzIGFsbCB0 aGUNCj4gICAgIHF1YWxpZmllcnMgb2YgdGhlIHR5cGUgcG9pbnRlZCB0byBieSB0aGUgcmlnaHQ7 DQo+IA0KPiAgIFsuLi5dDQo+IA0KPiBTbyB0aGUgdGhvdWdodCBwcm9jZXNzIGlzOg0KPiANCj4g LSAibVZhcmlhYmxlUG9saWN5UHJvdG9jb2wuUmVnaXN0ZXJWYXJpYWJsZVBvbGljeSIgaGFzIHR5 cGUNCj4gDQo+ICAgICBFRklfU1RBVFVTIChFRklBUEkgKikoICAgICAgVkFSSUFCTEVfUE9MSUNZ X0VOVFJZICopDQo+IA0KPiAgIHdoaWxlIGEgcG9pbnRlciB0byBSZWdpc3RlclZhcmlhYmxlUG9s aWN5KCksIGZyb20gdGhlIGxpYnJhcnksIGhhcw0KPiAgIHR5cGUNCj4gDQo+ICAgICBFRklfU1RB VFVTIChFRklBUEkgKikoY29uc3QgVkFSSUFCTEVfUE9MSUNZX0VOVFJZICopDQo+IA0KPiAgIEZv ciB0aGUgYXNzaWdubWVudCwgdGhlc2UgbmVlZCB0byBiZSBjb21wYXRpYmxlLCBwZXIgNi41LjE2 LjFwMS4NCj4gDQo+ICAgQXJlIHRoZXkgY29tcGF0aWJsZT8NCj4gDQo+IC0gUGVyIDYuNy41LjFw MiwgdGhhdCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHBvaW50ZWQtdG8gZnVuY3Rpb24gdHlwZXMN Cj4gICBhcmUgY29tcGF0aWJsZS4NCj4gDQo+ICAgQXJlIHRoZSBwb2ludGVkLXRvIGZ1bmN0aW9u IHR5cGVzIGNvbXBhdGlibGU/DQo+IA0KPiAtIFBlciA2LjcuNS4zcDE1LCB0aGF0IGRlcGVuZHMg b24gd2hldGhlciAoVkFSSUFCTEVfUE9MSUNZX0VOVFJZICopIGFuZA0KPiAgIChjb25zdCBWQVJJ QUJMRV9QT0xJQ1lfRU5UUlkgKikgYXJlIGNvbXBhdGlibGUuDQo+IA0KPiAgIEFyZSB0aG9zZSBw b2ludGVyIHR5cGVzIGNvbXBhdGlibGU/DQo+IA0KPiAtIFRoZXkncmUgbm90LCBiYXNlZCBvbiA2 LjcuNS4xcDIgLS0gdGhleSBhcmUgbm90IGlkZW50aWNhbGx5IHF1YWxpZmllZC4NCj4gDQo+IFNv IElNTyAoYWNjb3JkaW5nIHRvIHRoZSBsYW5ndWFnZSBzdGFuZGFyZCksIHRoZSBjb2RlIHNob3Vs ZCBoYXZlIGJlZW4NCj4gZmxhZ2dlZCBieSBNU1ZDIHRvbzsgYnV0IG1vcmUgaW1wb3J0YW50bHks IEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgdGhlDQo+IEdDQzUgLyBVYnVudHUgYnVpbGRzIHN1Y2Nl ZWRlZCBpbiBDSS4NCj4gDQo+IFRoYW5rcyENCj4gTGFzemxvDQo+IA0KPiANCj4+ICsgIG1WYXJp YWJsZVBvbGljeVByb3RvY29sLkR1bXBWYXJpYWJsZVBvbGljeSAgICAgID0gUHJvdG9jb2xEdW1w VmFyaWFibGVQb2xpY3k7DQo+PiArICBtVmFyaWFibGVQb2xpY3lQcm90b2NvbC5Mb2NrVmFyaWFi bGVQb2xpY3kgICAgICA9IFByb3RvY29sTG9ja1ZhcmlhYmxlUG9saWN5Ow0KPj4gKw0KPj4gKyAg Ly8gUmVnaXN0ZXIgYWxsIHRoZSBwcm90b2NvbHMgYW5kIHJldHVybiB0aGUgc3RhdHVzLg0KPj4g KyAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMoICZJbWFn ZUhhbmRsZSwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZ0Vka2lpVmFyaWFibGVQb2xpY3lQcm90b2NvbEd1aWQsICZtVmFyaWFibGVQb2xp Y3lQcm90b2NvbCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMICk7DQo+PiArICBpZiAoRUZJX0VSUk9SKCBTdGF0dXMgKSkgew0KPj4g KyAgICBERUJVRygoIERFQlVHX0VSUk9SLCAiJWEgLSBGYWlsZWQgdG8gaW5zdGFsbCBwcm90b2Nv bCEgJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzICkpOw0KPj4gKyAgICBnb3RvIEV4aXQ7DQo+ PiArICB9DQo+PiArICBlbHNlIHsNCj4+ICsgICAgUHJvdG9jb2xJbnN0YWxsZWQgPSBUUlVFOw0K Pj4gKyAgfQ0KPj4gKw0KPj4gKyAgLy8NCj4+ICsgIC8vIFJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9y IFJlYWR5VG9Cb290IHNvIHRoYXQgdGhlIGludGVyZmFjZSBpcyBhdCBsZWFzdCBsb2NrZWQgYmVm b3JlDQo+PiArICAvLyBkaXNwYXRjaGluZyBhbnkgYm9vdGxvYWRlcnMgb3IgVUVGSSBhcHBzLg0K Pj4gKyAgU3RhdHVzID0gZ0JTLT5DcmVhdGVFdmVudEV4KCBFVlRfTk9USUZZX1NJR05BTCwNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBMX0NBTExCQUNLLA0KPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NrUG9saWN5SW50ZXJmYWNlQXRSZWFkeVRvQm9v dCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlFdmVudFJlYWR5VG9Cb290R3VpZCwNCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJlYWR5VG9Cb290RXZlbnQgKTsNCj4+ICsg IGlmIChFRklfRVJST1IoIFN0YXR1cyApKSB7DQo+PiArICAgIERFQlVHKCggREVCVUdfRVJST1Is ICIlYSAtIEZhaWxlZCB0byBjcmVhdGUgUmVhZHlUb0Jvb3QgZXZlbnQhICVyXG4iLCBfX0ZVTkNU SU9OX18sIFN0YXR1cyApKTsNCj4+ICsgICAgZ290byBFeGl0Ow0KPj4gKyAgfQ0KPj4gKyAgZWxz ZSB7DQo+PiArICAgIENhbGxiYWNrUmVnaXN0ZXJlZCA9IFRSVUU7DQo+PiArICB9DQo+PiArDQo+ PiArICAvLw0KPj4gKyAgLy8gUmVnaXN0ZXIgYSBWaXJ0dWFsQWRkcmVzc0NoYW5nZSBjYWxsYmFj ayBmb3IgdGhlIE1tQ29tbSBwcm90b2NvbCBhbmQgQ29tbSBidWZmZXIuDQo+PiArICBTdGF0dXMg PSBnQlMtPkNyZWF0ZUV2ZW50RXggKEVWVF9OT1RJRllfU0lHTkFMLA0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVFBMX05PVElGWSwNCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZhcmlhYmxlUG9saWN5VmlydHVhbEFkZHJlc3NDYWxsYmFjaywNCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmZ0VmaUV2ZW50VmlydHVhbEFkZHJlc3NDaGFuZ2VHdWlkLA0KPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlZpcnR1YWxBZGRyZXNzQ2hhbmdlRXZl bnQpOw0KPj4gKyAgaWYgKEVGSV9FUlJPUiggU3RhdHVzICkpIHsNCj4+ICsgICAgREVCVUcoKCBE RUJVR19FUlJPUiwgIiVhIC0gRmFpbGVkIHRvIGNyZWF0ZSBWaXJ0dWFsQWRkcmVzc0NoYW5nZSBl dmVudCEgJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzICkpOw0KPj4gKyAgICBnb3RvIEV4aXQ7 DQo+PiArICB9DQo+PiArICBlbHNlIHsNCj4+ICsgICAgVmlydHVhbEFkZHJlc3NDaGFuZ2VSZWdp c3RlcmVkID0gVFJVRTsNCj4+ICsgIH0NCj4+ICsNCj4+ICsNCj4+ICtFeGl0Og0KPj4gKyAgLy8N Cj4+ICsgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiBhIGZhaWxlZCBzdGF0dXMgKGFuZCB1 bmxvYWQgdGhpcyBkcml2ZXIpLCB3ZSBtdXN0IGZpcnN0IHVuZG8gYW55dGhpbmcgdGhhdA0KPj4g KyAgLy8gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGRvbmUuDQo+PiArICBpZiAoRUZJX0VSUk9SKCBT dGF0dXMgKSkgew0KPj4gKyAgICBpZiAoUHJvdG9jb2xJbnN0YWxsZWQpIHsNCj4+ICsgICAgICBn QlMtPlVuaW5zdGFsbFByb3RvY29sSW50ZXJmYWNlKCAmSW1hZ2VIYW5kbGUsICZnRWRraWlWYXJp YWJsZVBvbGljeVByb3RvY29sR3VpZCwgJm1WYXJpYWJsZVBvbGljeVByb3RvY29sICk7DQo+PiAr ICAgIH0NCj4+ICsgICAgaWYgKENhbGxiYWNrUmVnaXN0ZXJlZCkgew0KPj4gKyAgICAgIGdCUy0+ Q2xvc2VFdmVudCggUmVhZHlUb0Jvb3RFdmVudCApOw0KPj4gKyAgICB9DQo+PiArICAgIGlmIChW aXJ0dWFsQWRkcmVzc0NoYW5nZVJlZ2lzdGVyZWQpIHsNCj4+ICsgICAgICBnQlMtPkNsb3NlRXZl bnQoIFZpcnR1YWxBZGRyZXNzQ2hhbmdlRXZlbnQgKTsNCj4+ICsgICAgfQ0KPj4gKyAgfQ0KPj4g Kw0KPj4gKyAgcmV0dXJuIFN0YXR1czsNCj4+ICt9DQo+PiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxl UGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9SdW50aW1lRHhlL1ZhcmlhYmxlU21tUnVudGltZUR4ZS5j IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9SdW50aW1lRHhlL1ZhcmlhYmxlU21t UnVudGltZUR4ZS5jDQo+PiBpbmRleCA2NjNhMWFhYTEyOGYuLmM0N2U2MTRkODFmNCAxMDA2NDQN Cj4+IC0tLSBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4ZS9WYXJp YWJsZVNtbVJ1bnRpbWVEeGUuYw0KPj4gKysrIGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJp YWJsZS9SdW50aW1lRHhlL1ZhcmlhYmxlU21tUnVudGltZUR4ZS5jDQo+PiBAQCAtNjUsNiArNjUs MTcgQEAgRUZJX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgbVZhcmlhYmxlU2VydmljZXNM b2NrOw0KPj4gIEVES0lJX1ZBUklBQkxFX0xPQ0tfUFJPVE9DT0wgICAgIG1WYXJpYWJsZUxvY2s7 DQo+PiAgRURLSUlfVkFSX0NIRUNLX1BST1RPQ09MICAgICAgICAgbVZhckNoZWNrOw0KPj4NCj4+ ICsvKioNCj4+ICsgIFRoZSBsb2dpYyB0byBpbml0aWFsaXplIHRoZSBWYXJpYWJsZVBvbGljeSBl bmdpbmUgaXMgaW4gaXRzIG93biBmaWxlLg0KPj4gKw0KPj4gKyoqLw0KPj4gK0VGSV9TVEFUVVMN Cj4+ICtFRklBUEkNCj4+ICtWYXJpYWJsZVBvbGljeVNtbUR4ZU1haW4gKA0KPj4gKyAgSU4gICAg RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgIEltYWdlSGFuZGxlLA0KPj4gKyAgSU4gICAgRUZJ X1NZU1RFTV9UQUJMRSAgICAgICAgICAgICpTeXN0ZW1UYWJsZQ0KPj4gKyAgKTsNCj4+ICsNCj4+ ICAvKioNCj4+ICAgIFNvbWUgU2VjdXJlIEJvb3QgUG9saWN5IFZhcmlhYmxlIG1heSB1cGRhdGUg Zm9sbG93aW5nIG90aGVyIHZhcmlhYmxlIGNoYW5nZXMoU2VjdXJlQm9vdCBmb2xsb3dzIFBLIGNo YW5nZSwgZXRjKS4NCj4+ICAgIFJlY29yZCB0aGVpciBpbml0aWFsIFN0YXRlIHdoZW4gdmFyaWFi bGUgd3JpdGUgc2VydmljZSBpcyByZWFkeS4NCj4+IEBAIC0xNzk2LDYgKzE4MDcsOSBAQCBWYXJp YWJsZVNtbVJ1bnRpbWVJbml0aWFsaXplICgNCj4+ICAgICAgICAgICAmbVZpcnR1YWxBZGRyZXNz Q2hhbmdlRXZlbnQNCj4+ICAgICAgICAgICApOw0KPj4NCj4+ICsgIC8vIEluaXRpYWxpemUgdGhl IFZhcmlhYmxlUG9saWN5IHByb3RvY29sIGFuZCBlbmdpbmUuDQo+PiArICBWYXJpYWJsZVBvbGlj eVNtbUR4ZU1haW4gKEltYWdlSGFuZGxlLCBTeXN0ZW1UYWJsZSk7DQo+PiArDQo+PiAgICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+PiAgfQ0KPj4NCj4+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cv VW5pdmVyc2FsL1ZhcmlhYmxlL1J1bnRpbWVEeGUvVmFyaWFibGVSdW50aW1lRHhlLmluZiBiL01k ZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4ZS9WYXJpYWJsZVJ1bnRpbWVE eGUuaW5mDQo+PiBpbmRleCBjZWVhNWQxZmY5YWMuLjQ4YWMxNjc5MDZmNyAxMDA2NDQNCj4+IC0t LSBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4ZS9WYXJpYWJsZVJ1 bnRpbWVEeGUuaW5mDQo+PiArKysgYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1J1 bnRpbWVEeGUvVmFyaWFibGVSdW50aW1lRHhlLmluZg0KPj4gQEAgLTEwLDYgKzEwLDcgQEANCj4+ ICAjICBidWZmZXIgb3ZlcmZsb3cgb3IgaW50ZWdlciBvdmVyZmxvdy4NCj4+ICAjDQo+PiAgIyBD b3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC48QlI+DQo+PiArIyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4N Cj4+ICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+PiAg Iw0KPj4gICMjDQo+PiBAQCAtNjksNiArNzAsNyBAQCBbTGlicmFyeUNsYXNzZXNdDQo+PiAgICBU cG1NZWFzdXJlbWVudExpYg0KPj4gICAgQXV0aFZhcmlhYmxlTGliDQo+PiAgICBWYXJDaGVja0xp Yg0KPj4gKyAgVmFyaWFibGVQb2xpY3lMaWINCj4+DQo+PiAgW1Byb3RvY29sc10NCj4+ICAgIGdF ZmlGaXJtd2FyZVZvbHVtZUJsb2NrUHJvdG9jb2xHdWlkICAgICAgICAgICAjIyBDT05TVU1FUw0K Pj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4 ZS9WYXJpYWJsZVNtbS5pbmYgYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1J1bnRp bWVEeGUvVmFyaWFibGVTbW0uaW5mDQo+PiBpbmRleCBiYzMwMzM1ODhkNDAuLmJiYzhkMjA4MDE5 MyAxMDA2NDQNCj4+IC0tLSBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGlt ZUR4ZS9WYXJpYWJsZVNtbS5pbmYNCj4+ICsrKyBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFy aWFibGUvUnVudGltZUR4ZS9WYXJpYWJsZVNtbS5pbmYNCj4+IEBAIC0xOSw2ICsxOSw3IEBADQo+ PiAgIyAgdGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZpY2UgcHJvdmlkZWQgaW4gdGhpcyBkcml2ZXIg d2lsbCBiZSBicm9rZW4sIGFuZCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLg0KPj4gICMNCj4+ ICAjIENvcHlyaWdodCAoYykgMjAxMCAtIDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLjxCUj4NCj4+ICsjIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0 aW9uLg0KPj4gICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQN Cj4+ICAjDQo+PiAgIyMNCj4+IEBAIC03OCw2ICs3OSw4IEBAIFtMaWJyYXJ5Q2xhc3Nlc10NCj4+ ICAgIEF1dGhWYXJpYWJsZUxpYg0KPj4gICAgVmFyQ2hlY2tMaWINCj4+ICAgIFVlZmlCb290U2Vy dmljZXNUYWJsZUxpYg0KPj4gKyAgVmFyaWFibGVQb2xpY3lMaWINCj4+ICsgIFZhcmlhYmxlUG9s aWN5SGVscGVyTGliDQo+Pg0KPj4gIFtQcm90b2NvbHNdDQo+PiAgICBnRWZpU21tRmlybXdhcmVW b2x1bWVCbG9ja1Byb3RvY29sR3VpZCAgICAgICAgIyMgQ09OU1VNRVMNCj4+IGRpZmYgLS1naXQg YS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1J1bnRpbWVEeGUvVmFyaWFibGVTbW1S dW50aW1lRHhlLmluZiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4 ZS9WYXJpYWJsZVNtbVJ1bnRpbWVEeGUuaW5mDQo+PiBpbmRleCAwMTU2NGU0YzUwNjguLmYyMTc1 MzBiMjk4NSAxMDA2NDQNCj4+IC0tLSBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUv UnVudGltZUR4ZS9WYXJpYWJsZVNtbVJ1bnRpbWVEeGUuaW5mDQo+PiArKysgYi9NZGVNb2R1bGVQ a2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1J1bnRpbWVEeGUvVmFyaWFibGVTbW1SdW50aW1lRHhlLmlu Zg0KPj4gQEAgLTE0LDYgKzE0LDcgQEANCj4+ICAjICB0aGUgYXV0aGVudGljYXRpb24gc2Vydmlj ZSBwcm92aWRlZCBpbiB0aGlzIGRyaXZlciB3aWxsIGJlIGJyb2tlbiwgYW5kIHRoZSBiZWhhdmlv ciBpcyB1bmRlZmluZWQuDQo+PiAgIw0KPj4gICMgQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAxOSwg SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4gKyMgQ29weXJp Z2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uPEJSPg0KPj4gICMgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4+ICAjDQo+PiAgIyMNCj4+IEBAIC00Miw2 ICs0Myw3IEBAIFtTb3VyY2VzXQ0KPj4gICAgVmFyaWFibGVQYXJzaW5nLmMNCj4+ICAgIFZhcmlh YmxlUGFyc2luZy5oDQo+PiAgICBWYXJpYWJsZS5oDQo+PiArICBWYXJpYWJsZVBvbGljeVNtbUR4 ZS5jDQo+Pg0KPj4gIFtQYWNrYWdlc10NCj4+ICAgIE1kZVBrZy9NZGVQa2cuZGVjDQo+PiBAQCAt NTYsNiArNTgsOCBAQCBbTGlicmFyeUNsYXNzZXNdDQo+PiAgICBEeGVTZXJ2aWNlc1RhYmxlTGli DQo+PiAgICBVZWZpRHJpdmVyRW50cnlQb2ludA0KPj4gICAgVHBtTWVhc3VyZW1lbnRMaWINCj4+ ICsgIFNhZmVJbnRMaWINCj4+ICsgIFBjZExpYg0KPj4NCj4+ICBbUHJvdG9jb2xzXQ0KPj4gICAg Z0VmaVZhcmlhYmxlV3JpdGVBcmNoUHJvdG9jb2xHdWlkICAgICAgICAgICAgICMjIFBST0RVQ0VT DQo+PiBAQCAtNjcsMTEgKzcxLDE1IEBAIFtQcm90b2NvbHNdDQo+PiAgICBnRWZpU21tVmFyaWFi bGVQcm90b2NvbEd1aWQNCj4+ICAgIGdFZGtpaVZhcmlhYmxlTG9ja1Byb3RvY29sR3VpZCAgICAg ICAgICAgICAgICAjIyBQUk9EVUNFUw0KPj4gICAgZ0Vka2lpVmFyQ2hlY2tQcm90b2NvbEd1aWQg ICAgICAgICAgICAgICAgICAgICMjIFBST0RVQ0VTDQo+PiArICBnRWRraWlWYXJpYWJsZVBvbGlj eVByb3RvY29sR3VpZCAgICAgICAgICAgICAgIyMgUFJPRFVDRVMNCj4+DQo+PiAgW0ZlYXR1cmVQ Y2RdDQo+PiAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRW5hYmxlVmFyaWFi bGVSdW50aW1lQ2FjaGUgICAgICAgICAgICMjIENPTlNVTUVTDQo+PiAgICBnRWZpTWRlTW9kdWxl UGtnVG9rZW5TcGFjZUd1aWQuUGNkVmFyaWFibGVDb2xsZWN0U3RhdGlzdGljcyAgICAgICAgICAg ICMjIENPTlNVTUVTDQo+Pg0KPj4gK1tQY2RdDQo+PiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWQuUGNkQWxsb3dWYXJpYWJsZVBvbGljeUVuZm9yY2VtZW50RGlzYWJsZSAgICAgIyMg Q09OU1VNRVMNCj4+ICsNCj4+ICBbR3VpZHNdDQo+PiAgICAjIyBQUk9EVUNFUyAgICAgICAgICAg ICAjIyBHVUlEICMgU2lnbmF0dXJlIG9mIFZhcmlhYmxlIHN0b3JlIGhlYWRlcg0KPj4gICAgIyMg Q09OU1VNRVMgICAgICAgICAgICAgIyMgR1VJRCAjIFNpZ25hdHVyZSBvZiBWYXJpYWJsZSBzdG9y ZSBoZWFkZXINCj4+IEBAIC05OSw2ICsxMDcsOCBAQCBbR3VpZHNdDQo+PiAgICAjIyBTT01FVElN RVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpMImRidCINCj4+ICAgIGdFZmlJbWFnZVNlY3VyaXR5 RGF0YWJhc2VHdWlkDQo+Pg0KPj4gKyAgZ1ZhckNoZWNrUG9saWN5TGliTW1pSGFuZGxlckd1aWQN Cj4+ICsNCj4+ICBbRGVwZXhdDQo+PiAgICBnRWZpTW1Db21tdW5pY2F0aW9uMlByb3RvY29sR3Vp ZA0KPj4NCj4+DQo+IA0KPiANCj4gDQo+IA0KPiANCg0K