From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.31; helo=mga06.intel.com; envelope-from=eric.dong@intel.com; receiver=edk2-devel@lists.01.org Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 4035821159C83 for ; Tue, 16 Oct 2018 07:44:35 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Oct 2018 07:44:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,388,1534834800"; d="scan'208";a="81648582" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga007.jf.intel.com with ESMTP; 16 Oct 2018 07:44:34 -0700 Received: from fmsmsx115.amr.corp.intel.com (10.18.116.19) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 16 Oct 2018 07:44:34 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx115.amr.corp.intel.com (10.18.116.19) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 16 Oct 2018 07:44:33 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.217]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.245]) with mapi id 14.03.0319.002; Tue, 16 Oct 2018 22:44:32 +0800 From: "Dong, Eric" To: Laszlo Ersek , "edk2-devel@lists.01.org" CC: "Ni, Ruiyu" Thread-Topic: [Patch 4/4] UefiCpuPkg/PiSmmCpuDxeSmm: Add logic to support semaphore type. Thread-Index: AQHUZKpqOKD4m2UYvEaJzbkbVwVRl6Uh5Tpg Date: Tue, 16 Oct 2018 14:44:31 +0000 Message-ID: References: <20181015024948.228-1-eric.dong@intel.com> <20181015024948.228-5-eric.dong@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNDE0MjYyYzAtOTlhMC00NDhlLWFjYjEtNGVlZTdjMTAwYzhmIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiUUFwNlE2dm04XC9hOUpENEpjRnQ1S3VDRUNWeDlpVVcwemsxOXJXRkM2OTRyOHlFK2htdkJvM1dEZDZlSWJWQ2IifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch 4/4] UefiCpuPkg/PiSmmCpuDxeSmm: Add logic to support semaphore type. 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: Tue, 16 Oct 2018 14:44:35 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGFzemxvLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IExhc3ps byBFcnNlayBbbWFpbHRvOmxlcnNla0ByZWRoYXQuY29tXQ0KPiBTZW50OiBUdWVzZGF5LCBPY3Rv YmVyIDE2LCAyMDE4IDE6MTMgQU0NCj4gVG86IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5j b20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiBDYzogTmksIFJ1aXl1IDxydWl5dS5uaUBp bnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUGF0Y2ggNC80XSBVZWZpQ3B1UGtnL1BpU21tQ3B1 RHhlU21tOiBBZGQgbG9naWMgdG8gc3VwcG9ydA0KPiBzZW1hcGhvcmUgdHlwZS4NCj4gDQo+IE9u IDEwLzE1LzE4IDA0OjQ5LCBFcmljIERvbmcgd3JvdGU6DQo+ID4gQmVjYXVzZSB0aGlzIGRyaXZl ciBuZWVkcyB0byBzZXQgTVNScyBzYXZlZCBpbiBub3JtYWwgYm9vdCBwaGFzZSwgc3luYw0KPiA+ IHNlbWFwaG9yZSBsb2dpYyBmcm9tIFJlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIgY29kZSB3aGljaCB1 c2VkIGZvciBub3JtYWwNCj4gYm9vdCBwaGFzZS4NCj4gDQo+IChNeSByZXZpZXcgb2YgdGhpcyBw YXRjaCBpcyBnb2luZyB0byBiZSBzdXBlcmZpY2lhbC4gSSdtIG5vdCB0cnlpbmcgdG8gdmFsaWRh dGUgdGhlDQo+IGFjdHVhbCBhbGdvcml0aG0uIEknbSBtb3N0bHkgc2FuaXR5LWNoZWNraW5nIHRo ZSBjb2RlLCBhbmQgZ2F1Z2luZyB3aGV0aGVyIGl0DQo+IHdpbGwgYnJlYWsgcGxhdGZvcm1zIHRo YXQgdXNlIENwdVMzRGF0YUR4ZS4pDQo+IA0KDQpSZWFzb25hYmxlLCB0aGFua3MgZm9yIHlvdXIg ZWZmb3J0cy4NCg0KPiANCj4gPiBEZXRhaWwgc2VlIGNoYW5nZSBTSEEtMTogZGNkZjE3NzQyMTJk ODdlMmQ3ZmViMzYyODZhNDA4ZWE3NDc1ZmQ3YiBmb3INCj4gPiBSZWdpc3RlckNwdUZlYXR1cmVz TGliLg0KPiANCj4gKDEpIEkgdGhpbmsgaXQgaXMgdmFsaWQgdG8gcmVmZXJlbmNlIG90aGVyIHBh dGNoZXMgaW4gdGhlIHNhbWUgc2VyaWVzLg0KPiBIb3dldmVyLCB0aGUgY29tbWl0IGhhc2hlcyBh cmUgbm90IHN0YWJsZSB5ZXQgLS0gd2hlbiB5b3UgcmViYXNlIHRoZSBzZXJpZXMsDQo+IHRoZSBj b21taXQgaGFzaGVzIHdpbGwgY2hhbmdlLiBUaGVyZWZvcmUsIHdoZW4gd2UgcmVmZXIgdG8gYSBw YXRjaCB0aGF0IGlzIG5vdA0KPiB1cHN0cmVhbSB5ZXQgKGkuZS4gaXQgaXMgcGFydCBvZiB0aGUg c2FtZSBzZXJpZXMpLCBpdCBpcyBiZXN0IHRvIHNwZWxsIG91dCB0aGUgZnVsbA0KPiBzdWJqZWN0 LCBzdWNoIGFzOg0KPiANCj4gVWVmaUNwdVBrZy9SZWdpc3RlckNwdUZlYXR1cmVzTGliOiBBZGQg bG9naWMgdG8gc3VwcG9ydCBzZW1hcGhvcmUgdHlwZS4NCj4gDQoNCkkgYXdhcmUgdGhpcyB2YWx1 ZSBjaGFuZ2Ugd2hlbiBkbyB0aGUgcmViYXNlIGFjdGlvbi4gSSBwbGFuIHRvIHVwZGF0ZSB0aGUg dmFsdWUgd2hlbiBJIGRvIHRoZSByZWJhc2UgYWN0aW9uLiAgWW91ciBzdWdnZXN0aW9uIGlzIGdv b2QuIEkgY2FuIGFsc28gdXNlIHRoZSBjaGFuZ2UgaGVhZGVyIHRvIHNwZWNpZnkgdGhlIGNoYW5n ZS4gSSB3aWxsIHVzZSBpdCBpbiBteSBuZXh0IGNoYW5nZS4NCg0KPiANCj4gPg0KPiA+IENjOiBS dWl5dSBOaSA8cnVpeXUubmlAaW50ZWwuY29tPg0KPiA+IENjOiBMYXN6bG8gRXJzZWsgPGxlcnNl a0ByZWRoYXQuY29tPg0KPiA+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0 aW9uIEFncmVlbWVudCAxLjENCj4gPiBTaWduZWQtb2ZmLWJ5OiBFcmljIERvbmcgPGVyaWMuZG9u Z0BpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gIFVlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vQ3B1 UzMuYyAgICAgICAgICB8IDMxNiArKysrKysrKysrKysrKysrLS0tLS0tLQ0KPiAtLS0tLS0NCj4g PiAgVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9NcFNlcnZpY2UuYyAgICAgIHwgICAzIC0NCj4g PiAgVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9QaVNtbUNwdUR4ZVNtbS5oIHwgICAzICstDQo+ ID4gIDMgZmlsZXMgY2hhbmdlZCwgMTgwIGluc2VydGlvbnMoKyksIDE0MiBkZWxldGlvbnMoLSkN Cj4gPg0KPiA+IGRpZmYgLS1naXQgYS9VZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL0NwdVMzLmMN Cj4gPiBiL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vQ3B1UzMuYw0KPiA+IGluZGV4IDUyZmY5 Njc5ZDUuLjVhMzVmN2E2MzQgMTAwNjQ0DQo+ID4gLS0tIGEvVWVmaUNwdVBrZy9QaVNtbUNwdUR4 ZVNtbS9DcHVTMy5jDQo+ID4gKysrIGIvVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9DcHVTMy5j DQo+ID4gQEAgLTM4LDkgKzM4LDEyIEBAIHR5cGVkZWYgc3RydWN0IHsNCj4gPiAgfSBNUF9BU1NF TUJMWV9BRERSRVNTX01BUDsNCj4gPg0KPiA+ICAvLw0KPiA+IC0vLyBTcGluIGxvY2sgdXNlZCB0 byBzZXJpYWxpemUgTWVtb3J5TWFwcGVkIG9wZXJhdGlvbg0KPiA+ICsvLyBGbGFncyB1c2VkIHdo ZW4gcHJvZ3JhbSB0aGUgcmVnaXN0ZXIuDQo+ID4gIC8vDQo+ID4gLVNQSU5fTE9DSyAgICAgICAg ICAgICAgICAqbU1lbW9yeU1hcHBlZExvY2sgPSBOVUxMOw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7 DQo+ID4gKyAgdm9sYXRpbGUgVUlOVE4gICAgICAgICAgIE1lbW9yeU1hcHBlZExvY2s7ICAgICAv LyBTcGlubG9jayB1c2VkIHRvIHByb2dyYW0NCj4gbW1pbw0KPiA+ICsgIHZvbGF0aWxlIFVJTlQz MiAgICAgICAgICAqU2VtYXBob3JlQ291bnQ7ICAgICAgLy8gU2VtYXBob3JlIHVzZWQgdG8gcHJv Z3JhbQ0KPiBzZW1hcGhvcmUuDQo+ID4gK30gUFJPR1JBTV9DUFVfUkVHSVNURVJfRkxBR1M7DQo+ ID4NCj4gPiAgLy8NCj4gPiAgLy8gU2lnbmFsIHRoYXQgU01NIEJBU0UgcmVsb2NhdGlvbiBpcyBj b21wbGV0ZS4NCj4gPiBAQCAtNjIsMTMgKzY1LDExIEBAIEFzbUdldEFkZHJlc3NNYXAgKA0KPiA+ ICAjZGVmaW5lIExFR0FDWV9SRUdJT05fU0laRSAgICAoMiAqIDB4MTAwMCkNCj4gPiAgI2RlZmlu ZSBMRUdBQ1lfUkVHSU9OX0JBU0UgICAgKDB4QTAwMDAgLSBMRUdBQ1lfUkVHSU9OX1NJWkUpDQo+ ID4NCj4gPiArUFJPR1JBTV9DUFVfUkVHSVNURVJfRkxBR1MgICBtQ3B1RmxhZ3M7DQo+ID4gIEFD UElfQ1BVX0RBVEEgICAgICAgICAgICAgICAgbUFjcGlDcHVEYXRhOw0KPiA+ICB2b2xhdGlsZSBV SU5UMzIgICAgICAgICAgICAgIG1OdW1iZXJUb0ZpbmlzaDsNCj4gPiAgTVBfQ1BVX0VYQ0hBTkdF X0lORk8gICAgICAgICAqbUV4Y2hhbmdlSW5mbzsNCj4gPiAgQk9PTEVBTiAgICAgICAgICAgICAg ICAgICAgICBtUmVzdG9yZVNtbUNvbmZpZ3VyYXRpb25JblMzID0gRkFMU0U7DQo+ID4gLU1QX01T Ul9MT0NLICAgICAgICAgICAgICAgICAgKm1Nc3JTcGluTG9ja3MgPSBOVUxMOw0KPiA+IC1VSU5U TiAgICAgICAgICAgICAgICAgICAgICAgIG1Nc3JTcGluTG9ja0NvdW50Ow0KPiA+IC1VSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgIG1Nc3JDb3VudCA9IDA7DQo+ID4NCj4gPiAgLy8NCj4gPiAg Ly8gUzMgYm9vdCBmbGFnDQo+ID4gQEAgLTkxLDg5ICs5Miw2IEBAIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgICAgbUFwSGx0TG9vcENvZGVUZW1wbGF0ZVtdID0gew0KPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMHhFQiwgMHhGQyAgICAgICAgICAgICAgIC8vIGptcCAkLTIN Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07DQo+ID4NCj4gPiAtLyoqDQo+ ID4gLSAgR2V0IE1TUiBzcGluIGxvY2sgYnkgTVNSIGluZGV4Lg0KPiA+IC0NCj4gPiAtICBAcGFy YW0gIE1zckluZGV4ICAgICAgIE1TUiBpbmRleCB2YWx1ZS4NCj4gPiAtDQo+ID4gLSAgQHJldHVy biBQb2ludGVyIHRvIE1TUiBzcGluIGxvY2suDQo+ID4gLQ0KPiA+IC0qKi8NCj4gPiAtU1BJTl9M T0NLICoNCj4gPiAtR2V0TXNyU3BpbkxvY2tCeUluZGV4ICgNCj4gPiAtICBJTiBVSU5UMzIgICAg ICBNc3JJbmRleA0KPiA+IC0gICkNCj4gPiAtew0KPiA+IC0gIFVJTlROICAgICBJbmRleDsNCj4g PiAtICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBtTXNyQ291bnQ7IEluZGV4KyspIHsNCj4gPiAt ICAgIGlmIChNc3JJbmRleCA9PSBtTXNyU3BpbkxvY2tzW0luZGV4XS5Nc3JJbmRleCkgew0KPiA+ IC0gICAgICByZXR1cm4gbU1zclNwaW5Mb2Nrc1tJbmRleF0uU3BpbkxvY2s7DQo+ID4gLSAgICB9 DQo+ID4gLSAgfQ0KPiA+IC0gIHJldHVybiBOVUxMOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC0vKioN Cj4gPiAtICBJbml0aWFsaXplIE1TUiBzcGluIGxvY2sgYnkgTVNSIGluZGV4Lg0KPiA+IC0NCj4g PiAtICBAcGFyYW0gIE1zckluZGV4ICAgICAgIE1TUiBpbmRleCB2YWx1ZS4NCj4gPiAtDQo+ID4g LSoqLw0KPiA+IC1WT0lEDQo+ID4gLUluaXRNc3JTcGluTG9ja0J5SW5kZXggKA0KPiA+IC0gIElO IFVJTlQzMiAgICAgIE1zckluZGV4DQo+ID4gLSAgKQ0KPiA+IC17DQo+ID4gLSAgVUlOVE4gICAg TXNyU3BpbkxvY2tDb3VudDsNCj4gPiAtICBVSU5UTiAgICBOZXdNc3JTcGluTG9ja0NvdW50Ow0K PiA+IC0gIFVJTlROICAgIEluZGV4Ow0KPiA+IC0gIFVJTlROICAgIEFkZGVkU2l6ZTsNCj4gPiAt DQo+ID4gLSAgaWYgKG1Nc3JTcGluTG9ja3MgPT0gTlVMTCkgew0KPiA+IC0gICAgTXNyU3Bpbkxv Y2tDb3VudCA9DQo+IG1TbW1DcHVTZW1hcGhvcmVzLlNlbWFwaG9yZU1zci5BdmFpbGFibGVDb3Vu dGVyOw0KPiA+IC0gICAgbU1zclNwaW5Mb2NrcyA9IChNUF9NU1JfTE9DSyAqKSBBbGxvY2F0ZVBv b2wgKHNpemVvZiAoTVBfTVNSX0xPQ0spDQo+ICogTXNyU3BpbkxvY2tDb3VudCk7DQo+ID4gLSAg ICBBU1NFUlQgKG1Nc3JTcGluTG9ja3MgIT0gTlVMTCk7DQo+ID4gLSAgICBmb3IgKEluZGV4ID0g MDsgSW5kZXggPCBNc3JTcGluTG9ja0NvdW50OyBJbmRleCsrKSB7DQo+ID4gLSAgICAgIG1Nc3JT cGluTG9ja3NbSW5kZXhdLlNwaW5Mb2NrID0NCj4gPiAtICAgICAgIChTUElOX0xPQ0sgKikoKFVJ TlROKW1TbW1DcHVTZW1hcGhvcmVzLlNlbWFwaG9yZU1zci5Nc3IgKw0KPiBJbmRleCAqIG1TZW1h cGhvcmVTaXplKTsNCj4gPiAtICAgICAgbU1zclNwaW5Mb2Nrc1tJbmRleF0uTXNySW5kZXggPSAo VUlOVDMyKS0xOw0KPiA+IC0gICAgfQ0KPiA+IC0gICAgbU1zclNwaW5Mb2NrQ291bnQgPSBNc3JT cGluTG9ja0NvdW50Ow0KPiA+IC0gICAgbVNtbUNwdVNlbWFwaG9yZXMuU2VtYXBob3JlTXNyLkF2 YWlsYWJsZUNvdW50ZXIgPSAwOw0KPiA+IC0gIH0NCj4gPiAtICBpZiAoR2V0TXNyU3BpbkxvY2tC eUluZGV4IChNc3JJbmRleCkgPT0gTlVMTCkgew0KPiA+IC0gICAgLy8NCj4gPiAtICAgIC8vIElu aXRpYWxpemUgc3BpbiBsb2NrIGZvciBNU1IgcHJvZ3JhbW1pbmcNCj4gPiAtICAgIC8vDQo+ID4g LSAgICBtTXNyU3BpbkxvY2tzW21Nc3JDb3VudF0uTXNySW5kZXggPSBNc3JJbmRleDsNCj4gPiAt ICAgIEluaXRpYWxpemVTcGluTG9jayAobU1zclNwaW5Mb2Nrc1ttTXNyQ291bnRdLlNwaW5Mb2Nr KTsNCj4gPiAtICAgIG1Nc3JDb3VudCArKzsNCj4gPiAtICAgIGlmIChtTXNyQ291bnQgPT0gbU1z clNwaW5Mb2NrQ291bnQpIHsNCj4gPiAtICAgICAgLy8NCj4gPiAtICAgICAgLy8gSWYgTVNSIHNw aW4gbG9jayBidWZmZXIgaXMgZnVsbCwgZW5sYXJnZSBpdA0KPiA+IC0gICAgICAvLw0KPiA+IC0g ICAgICBBZGRlZFNpemUgPSBTSVpFXzRLQjsNCj4gPiAtICAgICAgbVNtbUNwdVNlbWFwaG9yZXMu U2VtYXBob3JlTXNyLk1zciA9DQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRl UGFnZXMgKEVGSV9TSVpFX1RPX1BBR0VTKEFkZGVkU2l6ZSkpOw0KPiA+IC0gICAgICBBU1NFUlQg KG1TbW1DcHVTZW1hcGhvcmVzLlNlbWFwaG9yZU1zci5Nc3IgIT0gTlVMTCk7DQo+ID4gLSAgICAg IE5ld01zclNwaW5Mb2NrQ291bnQgPSBtTXNyU3BpbkxvY2tDb3VudCArIEFkZGVkU2l6ZSAvDQo+ IG1TZW1hcGhvcmVTaXplOw0KPiA+IC0gICAgICBtTXNyU3BpbkxvY2tzID0gUmVhbGxvY2F0ZVBv b2wgKA0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKE1QX01TUl9MT0NLKSAq IG1Nc3JTcGluTG9ja0NvdW50LA0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yg KE1QX01TUl9MT0NLKSAqIE5ld01zclNwaW5Mb2NrQ291bnQsDQo+ID4gLSAgICAgICAgICAgICAg ICAgICAgICAgIG1Nc3JTcGluTG9ja3MNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgKTsN Cj4gPiAtICAgICAgQVNTRVJUIChtTXNyU3BpbkxvY2tzICE9IE5VTEwpOw0KPiA+IC0gICAgICBt TXNyU3BpbkxvY2tDb3VudCA9IE5ld01zclNwaW5Mb2NrQ291bnQ7DQo+ID4gLSAgICAgIGZvciAo SW5kZXggPSBtTXNyQ291bnQ7IEluZGV4IDwgbU1zclNwaW5Mb2NrQ291bnQ7IEluZGV4KyspIHsN Cj4gPiAtICAgICAgICBtTXNyU3BpbkxvY2tzW0luZGV4XS5TcGluTG9jayA9DQo+ID4gLSAgICAg ICAgICAgICAgICAgKFNQSU5fTE9DSyAqKSgoVUlOVE4pbVNtbUNwdVNlbWFwaG9yZXMuU2VtYXBo b3JlTXNyLk1zciArDQo+ID4gLSAgICAgICAgICAgICAgICAgKEluZGV4IC0gbU1zckNvdW50KSAg KiBtU2VtYXBob3JlU2l6ZSk7DQo+ID4gLSAgICAgICAgbU1zclNwaW5Mb2Nrc1tJbmRleF0uTXNy SW5kZXggPSAoVUlOVDMyKS0xOw0KPiA+IC0gICAgICB9DQo+ID4gLSAgICB9DQo+ID4gLSAgfQ0K PiA+IC19DQo+ID4gLQ0KPiA+ICAvKioNCj4gPiAgICBTeW5jIHVwIHRoZSBNVFJSIHZhbHVlcyBm b3IgYWxsIHByb2Nlc3NvcnMuDQo+ID4NCj4gPiBAQCAtMjA0LDQyICsxMjIsODkgQEAgUmV0dXJu czoNCj4gPiAgfQ0KPiA+DQo+ID4gIC8qKg0KPiA+IC0gIFByb2dyYW1zIHJlZ2lzdGVycyBmb3Ig dGhlIGNhbGxpbmcgcHJvY2Vzc29yLg0KPiA+ICsgIEluY3JlbWVudCBzZW1hcGhvcmUgYnkgMS4N Cj4gPg0KPiA+IC0gIFRoaXMgZnVuY3Rpb24gcHJvZ3JhbXMgcmVnaXN0ZXJzIGZvciB0aGUgY2Fs bGluZyBwcm9jZXNzb3IuDQo+ID4gKyAgQHBhcmFtICAgICAgU2VtICAgICAgICAgICAgSU46ICAz Mi1iaXQgdW5zaWduZWQgaW50ZWdlcg0KPiA+DQo+ID4gLSAgQHBhcmFtICBSZWdpc3RlclRhYmxl cyAgICAgICAgUG9pbnRlciB0byByZWdpc3RlciB0YWJsZSBvZiB0aGUgcnVubmluZw0KPiBwcm9j ZXNzb3IuDQo+ID4gLSAgQHBhcmFtICBSZWdpc3RlclRhYmxlQ291bnQgICAgUmVnaXN0ZXIgdGFi bGUgY291bnQuDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK1MzUmVsZWFzZVNlbWFwaG9yZSAo DQo+ID4gKyAgSU4gT1VUICB2b2xhdGlsZSBVSU5UMzIgICAgICAgICAgICpTZW0NCj4gPiArICAp DQo+ID4gK3sNCj4gPiArICBJbnRlcmxvY2tlZEluY3JlbWVudCAoU2VtKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgRGVjcmVtZW50IHRoZSBzZW1hcGhvcmUgYnkgMSBpZiBpdCBp cyBub3QgemVyby4NCj4gPiArDQo+ID4gKyAgUGVyZm9ybXMgYW4gYXRvbWljIGRlY3JlbWVudCBv cGVyYXRpb24gZm9yIHNlbWFwaG9yZS4NCj4gPiArICBUaGUgY29tcGFyZSBleGNoYW5nZSBvcGVy YXRpb24gbXVzdCBiZSBwZXJmb3JtZWQgdXNpbmcgIE1QIHNhZmUNCj4gPiArIG1lY2hhbmlzbXMu DQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgICAgIFNlbSAgICAgICAgICAgIElOOiAgMzItYml0IHVu c2lnbmVkIGludGVnZXINCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK1MzV2FpdEZv clNlbWFwaG9yZSAoDQo+ID4gKyAgSU4gT1VUICB2b2xhdGlsZSBVSU5UMzIgICAgICAgICAgICpT ZW0NCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UMzIgIFZhbHVlOw0KPiA+ICsNCj4gPiAr ICBkbyB7DQo+ID4gKyAgICBWYWx1ZSA9ICpTZW07DQo+ID4gKyAgfSB3aGlsZSAoVmFsdWUgPT0g MCk7DQo+ID4gKw0KPiA+ICsgIEludGVybG9ja2VkRGVjcmVtZW50IChTZW0pOw0KPiA+ICt9DQo+ IA0KPiAoMikgSSB0aGluayB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5vdCBjb3JyZWN0LiBJZiB0 aHJlYWRzIFQxIGFuZCBUMiBhcmUgc3Bpbm5pbmcgaW4NCj4gdGhlIGxvb3AsIGFuZCB0aHJlYWQg VDMgcmVsZWFzZXMgdGhlIHNlbWFwaG9yZSwgdGhlbiBib3RoIFQxIGFuZCBUMiBjb3VsZCBzZWUN Cj4gKFZhbHVlPT0xKS4gVGhleSB3aWxsIGJvdGggZXhpdCB0aGUgbG9vcCwgdGhleSB3aWxsIGJv dGggZGVjcmVtZW50ICgqU2VtKSwgYW5kDQo+IHRoZW4gKCpTZW0pIHdpbGwgd3JhcCBhcm91bmQu DQo+IA0KPiBJbnN0ZWFkLCB3ZSBzaG91bGQgZG86DQo+IA0KPiAgIGZvciAoOzspIHsNCj4gICAg IFZhbHVlID0gKlNlbTsNCj4gICAgIGlmIChWYWx1ZSA9PSAwKSB7DQo+ICAgICAgIGNvbnRpbnVl Ow0KPiAgICAgfQ0KPiAgICAgaWYgKEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlMzIgKFNlbSwg VmFsdWUsIFZhbHVlIC0gMSkgPT0gVmFsdWUpIHsNCj4gICAgICAgYnJlYWs7DQo+ICAgICB9DQo+ ICAgfQ0KPiANCj4gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgcHJvdGVjdGVkIGFnYWluc3Qg dGhlIEFCQSBwcm9ibGVtLCBidXQgdGhhdCdzIGZpbmUuDQo+IE5hbWVseSwgaXQgZG9lc24ndCBt YXR0ZXIgd2hldGhlciwgYW5kIGhvdywgdGhlIHZhbHVlIG9mICgqU2VtKSBmbHVjdHVhdGVzLA0K PiBiZXR3ZWVuIGZldGNoaW5nIGl0IGludG8gVmFsdWUsIGFuZCBzZXR0aW5nIGl0IHRvIChWYWx1 ZS0xKS4NCj4gV2hhdCBtYXR0ZXJzIGlzIHRoYXQgd2UgZWl0aGVyIHBlcmZvcm0gYSB0cmFuc2l0 aW9uIGZyb20gVmFsdWUgdG8gKFZhbHVlLTEpLCBvcg0KPiBub3RoaW5nLg0KPiANCg0KR29vZCBj YXRjaC4gVGhhbmtzIGZvciB5b3VyIHNhbXBsZSBjb2RlLiBJIHdpbGwgdXBkYXRlIHRoZSBjb2Rl IGluIG15IG5leHQgY2hhbmdlcy4NCg0KPiANCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEluaXRp YWxpemUgdGhlIENQVSByZWdpc3RlcnMgZnJvbSBhIHJlZ2lzdGVyIHRhYmxlLg0KPiA+ICsNCj4g PiArICBAcGFyYW1baW5dICBSZWdpc3RlclRhYmxlICAgICAgICAgVGhlIHJlZ2lzdGVyIHRhYmxl IGZvciB0aGlzIEFQLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEFwTG9jYXRpb24gICAgICAgICAgICBB UCBsb2NhdGlvbiBpbmZvIGZvciB0aGlzIGFwLg0KPiA+ICsgIEBwYXJhbVtpbl0gIENwdVN0YXR1 cyAgICAgICAgICAgICBDUFUgc3RhdHVzIGluZm8gZm9yIHRoaXMgQ1BVLg0KPiA+ICsgIEBwYXJh bVtpbl0gIENwdUZsYWdzICAgICAgICAgICAgICBGbGFncyBkYXRhIHN0cnVjdHVyZSB1c2VkIHdo ZW4gcHJvZ3JhbSB0aGUNCj4gcmVnaXN0ZXIuDQo+ID4NCj4gPiArICBAbm90ZSBUaGlzIHNlcnZp Y2UgY291bGQgYmUgY2FsbGVkIGJ5IEJTUC9BUHMuDQo+ID4gICoqLw0KPiA+ICBWT0lEDQo+ID4g LVNldFByb2Nlc3NvclJlZ2lzdGVyICgNCj4gPiAtICBJTiBDUFVfUkVHSVNURVJfVEFCTEUgICAg ICAgICpSZWdpc3RlclRhYmxlcywNCj4gPiAtICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyVGFibGVDb3VudA0KPiA+ICtFRklBUEkNCj4gPiArUHJvZ3JhbVByb2Nlc3NvclJl Z2lzdGVyICgNCj4gPiArICBJTiBDUFVfUkVHSVNURVJfVEFCTEUgICAgICAgICAgICpSZWdpc3Rl clRhYmxlLA0KPiA+ICsgIElOIEVGSV9DUFVfUEhZU0lDQUxfTE9DQVRJT04gICAgKkFwTG9jYXRp b24sDQo+ID4gKyAgSU4gQ1BVX1NUQVRVU19JTkZPUk1BVElPTiAgICAgICAqQ3B1U3RhdHVzLA0K PiA+ICsgIElOIFBST0dSQU1fQ1BVX1JFR0lTVEVSX0ZMQUdTICAgKkNwdUZsYWdzDQo+ID4gICAg KQ0KPiANCj4gKDMpIEFueSBwYXJ0aWN1bGFyIHJlYXNvbiBmb3IgZGVjbGFyaW5nIHRoaXMgZnVu Y3Rpb24gYXMgRUZJQVBJPw0KDQpJIHBsYW4gdG8gZXhwb3J0IHRoaXMgZnVuY3Rpb24gYXMgYW4g QVBJIGZyb20gUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYiwgSSBoYXZlIGRpZCBzb21lIFBPQyBjb2Rl IGNoYW5nZS4gQnV0IHRoaXMgdmVyc2lvbiBjaGFuZ2VzIHdpbGwgbm90IGV4cG9ydCBpdCBhcyBh biBBUEkuIEkgZm9yZ290IHRvIHJlbW92ZSBFRklBUEkgd2hlbiBJIGR1cGxpY2F0ZSB0aGUgY29k ZSBoZXJlLiBXaWxsIHJlbW92ZSBpdCBpbiBteSBuZXh0IHZlcnNpb24gY2hhbmdlcy4NCg0KPiAN Cj4gDQo+ID4gIHsNCj4gPiAgICBDUFVfUkVHSVNURVJfVEFCTEVfRU5UUlkgICpSZWdpc3RlclRh YmxlRW50cnk7DQo+ID4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiAg ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFZhbHVlOw0KPiA+IC0gIFNQSU5fTE9DSyAgICAg ICAgICAgICAgICAgKk1zclNwaW5Mb2NrOw0KPiA+IC0gIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgSW5pdEFwaWNJZDsNCj4gPiAtICBDUFVfUkVHSVNURVJfVEFCTEUgICAgICAgICpSZWdpc3Rl clRhYmxlOw0KPiA+ICsgIENQVV9SRUdJU1RFUl9UQUJMRV9FTlRSWSAgKlJlZ2lzdGVyVGFibGVF bnRyeUhlYWQ7DQo+ID4gKyAgdm9sYXRpbGUgVUlOVDMyICAgICAgICAgICAqU2VtYXBob3JlUHRy Ow0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgQ29yZU9mZnNldDsNCj4gPiArICBV SU5UMzIgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VPZmZzZXQ7DQo+ID4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICBQYWNrYWdlVGhyZWFkc0NvdW50Ow0KPiA+ICsgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgQXBPZmZzZXQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICBQcm9jZXNzb3JJbmRleDsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFwSW5k ZXg7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBWYWxpZEFwQ291bnQ7DQo+ID4N Cj4gPiAtICBJbml0QXBpY0lkID0gR2V0SW5pdGlhbEFwaWNJZCAoKTsNCj4gPiAtICBSZWdpc3Rl clRhYmxlID0gTlVMTDsNCj4gPiAtICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBSZWdpc3RlclRh YmxlQ291bnQ7IEluZGV4KyspIHsNCj4gPiAtICAgIGlmIChSZWdpc3RlclRhYmxlc1tJbmRleF0u SW5pdGlhbEFwaWNJZCA9PSBJbml0QXBpY0lkKSB7DQo+ID4gLSAgICAgIFJlZ2lzdGVyVGFibGUg PSAgJlJlZ2lzdGVyVGFibGVzW0luZGV4XTsNCj4gPiAtICAgICAgYnJlYWs7DQo+ID4gLSAgICB9 DQo+ID4gLSAgfQ0KPiA+IC0gIEFTU0VSVCAoUmVnaXN0ZXJUYWJsZSAhPSBOVUxMKTsNCj4gPiAr ICBBcEluZGV4ID0gQXBMb2NhdGlvbi0+UGFja2FnZSAqIENwdVN0YXR1cy0+Q29yZUNvdW50ICog Q3B1U3RhdHVzLQ0KPiA+VGhyZWFkQ291bnQgXA0KPiA+ICsgICAgICAgICAgICArIEFwTG9jYXRp b24tPkNvcmUgKiBDcHVTdGF0dXMtPlRocmVhZENvdW50IFwNCj4gPiArICAgICAgICAgICAgKyBB cExvY2F0aW9uLT5UaHJlYWQ7DQo+IA0KPiAoNCkgVGhlIGJhY2tzbGFzaGVzIGxvb2sgdXNlbGVz cy4NCj4gDQo+IEluIGFkZGl0aW9uLCB0aGUgcGx1cyBzaWducyBzaG91bGQgYmUgYXQgdGhlIGVu ZHMgb2YgdGhlIGxpbmVzLCBhY2NvcmRpbmcgdG8gdGhlDQo+IGVkazIgc3R5bGUgKG9wZXJhdG9y cyBhdCB0aGUgZW5kKS4NCg0KV2lsbCB1cGRhdGUgdGhlbiBpbiBteSBuZXh0IHZlcnNpb24gY29k ZSBjaGFuZ2VzLg0KDQo+IA0KPiA+DQo+ID4gICAgLy8NCj4gPiAgICAvLyBUcmF2ZXJzZSBSZWdp c3RlciBUYWJsZSBvZiB0aGlzIGxvZ2ljYWwgcHJvY2Vzc29yDQo+ID4gICAgLy8NCj4gPiAtICBS ZWdpc3RlclRhYmxlRW50cnkgPSAoQ1BVX1JFR0lTVEVSX1RBQkxFX0VOVFJZICopIChVSU5UTikN Cj4gPiBSZWdpc3RlclRhYmxlLT5SZWdpc3RlclRhYmxlRW50cnk7DQo+ID4gLSAgZm9yIChJbmRl eCA9IDA7IEluZGV4IDwgUmVnaXN0ZXJUYWJsZS0+VGFibGVMZW5ndGg7IEluZGV4KyssDQo+ID4g UmVnaXN0ZXJUYWJsZUVudHJ5KyspIHsNCj4gPiArICBSZWdpc3RlclRhYmxlRW50cnlIZWFkID0g KENQVV9SRUdJU1RFUl9UQUJMRV9FTlRSWSAqKSAoVUlOVE4pDQo+ID4gKyBSZWdpc3RlclRhYmxl LT5SZWdpc3RlclRhYmxlRW50cnk7DQo+ID4gKw0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8IFJlZ2lzdGVyVGFibGUtPlRhYmxlTGVuZ3RoOyBJbmRleCsrKSB7DQo+IA0KPiAoT0ssIEkg dGhpbmsgdGhpcyBzaG91bGQgY29udGludWUgd29ya2luZyB3aXRoIChUYWJsZUxlbmd0aD09MCks IGZyb20NCj4gQ3B1UzNEYXRhRHhlLikNCj4gDQo+ID4gKw0KPiA+ICsgICAgUmVnaXN0ZXJUYWJs ZUVudHJ5ID0gJlJlZ2lzdGVyVGFibGVFbnRyeUhlYWRbSW5kZXhdOw0KPiA+ICsgICAgREVCVUcg KChERUJVR19JTkZPLCAiUHJvY2Vzc29yID0gJWQsIEVudHJ5IEluZGV4ICVkLCBUeXBlID0NCj4g PiArICVkIVxuIiwgQXBJbmRleCwgSW5kZXgsIFJlZ2lzdGVyVGFibGVFbnRyeS0+UmVnaXN0ZXJU eXBlKSk7DQo+IA0KPiAoNSkgIkFwSW5kZXgiIGFuZCAiSW5kZXgiIGhhdmUgdHlwZSBVSU5UTjsg dGhleSBzaG91bGQgbm90IGJlIHByaW50ZWQgd2l0aA0KPiAiJWQiLiBUaGUgcG9ydGFibGUgd2F5 IHRvIHByaW50IHRoZW0gaXMgdG8gY2FzdCB0aGVtIHRvIFVJTlQ2NCwgYW5kIHVzZSAiJWx1Ii4N Cj4gDQoNCm9rLCB3aWxsIHVwZGF0ZSB0aGVuIGluIG15IG5leHQgdmVyc2lvbiBjb2RlIGNoYW5n ZXMuDQoNCj4gDQo+ID4gKw0KPiA+ICAgICAgLy8NCj4gPiAgICAgIC8vIENoZWNrIHRoZSB0eXBl IG9mIHNwZWNpZmllZCByZWdpc3Rlcg0KPiA+ICAgICAgLy8NCj4gPiBAQCAtMzEwLDEyICsyNzUs NiBAQCBTZXRQcm9jZXNzb3JSZWdpc3RlciAoDQo+ID4gICAgICAgICAgICBSZWdpc3RlclRhYmxl RW50cnktPlZhbHVlDQo+ID4gICAgICAgICAgICApOw0KPiA+ICAgICAgICB9IGVsc2Ugew0KPiA+ IC0gICAgICAgIC8vDQo+ID4gLSAgICAgICAgLy8gR2V0IGxvY2sgdG8gYXZvaWQgUGFja2FnZS9D b3JlIHNjb3BlIE1TUnMgcHJvZ3JhbW1pbmcgaXNzdWUgaW4NCj4gcGFyYWxsZWwgZXhlY3V0aW9u IG1vZGUNCj4gPiAtICAgICAgICAvLyB0byBtYWtlIHN1cmUgTVNSIHJlYWQvd3JpdGUgb3BlcmF0 aW9uIGlzIGF0b21pYy4NCj4gPiAtICAgICAgICAvLw0KPiA+IC0gICAgICAgIE1zclNwaW5Mb2Nr ID0gR2V0TXNyU3BpbkxvY2tCeUluZGV4IChSZWdpc3RlclRhYmxlRW50cnktPkluZGV4KTsNCj4g PiAtICAgICAgICBBY3F1aXJlU3BpbkxvY2sgKE1zclNwaW5Mb2NrKTsNCj4gPiAgICAgICAgICAv Lw0KPiA+ICAgICAgICAgIC8vIFNldCB0aGUgYml0IHNlY3Rpb24gYWNjb3JkaW5nIHRvIGJpdCBz dGFydCBhbmQgbGVuZ3RoDQo+ID4gICAgICAgICAgLy8NCj4gPiBAQCAtMzI1LDIxICsyODQsMjAg QEAgU2V0UHJvY2Vzc29yUmVnaXN0ZXIgKA0KPiA+ICAgICAgICAgICAgUmVnaXN0ZXJUYWJsZUVu dHJ5LT5WYWxpZEJpdFN0YXJ0ICsgUmVnaXN0ZXJUYWJsZUVudHJ5LT5WYWxpZEJpdExlbmd0aCAt DQo+IDEsDQo+ID4gICAgICAgICAgICBSZWdpc3RlclRhYmxlRW50cnktPlZhbHVlDQo+ID4gICAg ICAgICAgICApOw0KPiA+IC0gICAgICAgIFJlbGVhc2VTcGluTG9jayAoTXNyU3BpbkxvY2spOw0K PiA+ICAgICAgICB9DQo+ID4gICAgICAgIGJyZWFrOw0KPiA+ICAgICAgLy8NCj4gPiAgICAgIC8v IE1lbW9yeU1hcHBlZCBvcGVyYXRpb25zDQo+ID4gICAgICAvLw0KPiA+ICAgICAgY2FzZSBNZW1v cnlNYXBwZWQ6DQo+ID4gLSAgICAgIEFjcXVpcmVTcGluTG9jayAobU1lbW9yeU1hcHBlZExvY2sp Ow0KPiA+ICsgICAgICBBY3F1aXJlU3BpbkxvY2sgKCZDcHVGbGFncy0+TWVtb3J5TWFwcGVkTG9j ayk7DQo+ID4gICAgICAgIE1taW9CaXRGaWVsZFdyaXRlMzIgKA0KPiA+ICAgICAgICAgIChVSU5U TikoUmVnaXN0ZXJUYWJsZUVudHJ5LT5JbmRleCB8IExTaGlmdFU2NCAoUmVnaXN0ZXJUYWJsZUVu dHJ5LQ0KPiA+SGlnaEluZGV4LCAzMikpLA0KPiA+ICAgICAgICAgIFJlZ2lzdGVyVGFibGVFbnRy eS0+VmFsaWRCaXRTdGFydCwNCj4gPiAgICAgICAgICBSZWdpc3RlclRhYmxlRW50cnktPlZhbGlk Qml0U3RhcnQgKyBSZWdpc3RlclRhYmxlRW50cnktPlZhbGlkQml0TGVuZ3RoIC0NCj4gMSwNCj4g PiAgICAgICAgICAoVUlOVDMyKVJlZ2lzdGVyVGFibGVFbnRyeS0+VmFsdWUNCj4gPiAgICAgICAg ICApOw0KPiA+IC0gICAgICBSZWxlYXNlU3BpbkxvY2sgKG1NZW1vcnlNYXBwZWRMb2NrKTsNCj4g PiArICAgICAgUmVsZWFzZVNwaW5Mb2NrICgmQ3B1RmxhZ3MtPk1lbW9yeU1hcHBlZExvY2spOw0K PiA+ICAgICAgICBicmVhazsNCj4gPiAgICAgIC8vDQo+ID4gICAgICAvLyBFbmFibGUgb3IgZGlz YWJsZSBjYWNoZQ0KPiA+IEBAIC0zNTUsMTIgKzMxMyw5OSBAQCBTZXRQcm9jZXNzb3JSZWdpc3Rl ciAoDQo+ID4gICAgICAgIH0NCj4gPiAgICAgICAgYnJlYWs7DQo+ID4NCj4gPiArICAgIGNhc2Ug U2VtYXBob3JlOg0KPiA+ICsgICAgICBTZW1hcGhvcmVQdHIgPSBDcHVGbGFncy0+U2VtYXBob3Jl Q291bnQ7DQo+ID4gKyAgICAgIHN3aXRjaCAoUmVnaXN0ZXJUYWJsZUVudHJ5LT5WYWx1ZSkgew0K PiA+ICsgICAgICBjYXNlIENvcmVEZXBUeXBlOg0KPiA+ICsgICAgICAgIENvcmVPZmZzZXQgPSAo QXBMb2NhdGlvbi0+UGFja2FnZSAqIENwdVN0YXR1cy0+Q29yZUNvdW50ICsNCj4gQXBMb2NhdGlv bi0+Q29yZSkgKiBDcHVTdGF0dXMtPlRocmVhZENvdW50Ow0KPiA+ICsgICAgICAgIEFwT2Zmc2V0 ID0gQ29yZU9mZnNldCArIEFwTG9jYXRpb24tPlRocmVhZDsNCj4gPiArICAgICAgICAvLw0KPiA+ ICsgICAgICAgIC8vIEZpcnN0IGluY3JlYXNlIHNlbWFwaG9yZSBjb3VudCBieSAxIGZvciBwcm9j ZXNzb3JzIGluIHRoaXMgY29yZS4NCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAgICAgIGZvciAo UHJvY2Vzc29ySW5kZXggPSAwOyBQcm9jZXNzb3JJbmRleCA8IENwdVN0YXR1cy0+VGhyZWFkQ291 bnQ7DQo+IFByb2Nlc3NvckluZGV4ICsrKSB7DQo+ID4gKyAgICAgICAgICBTM1JlbGVhc2VTZW1h cGhvcmUgKChVSU5UMzIgKikgJlNlbWFwaG9yZVB0cltDb3JlT2Zmc2V0ICsNCj4gPiArIFByb2Nl c3NvckluZGV4XSk7DQo+IA0KPiAoNikgVGhlIGV4cGxpY2l0IChVSU5UMzIqKSBjYXN0IGlzIGNv bmZ1c2luZyBhbmQgdW5uZWVkZWQsIHBsZWFzZSByZW1vdmUgaXQuDQoNCm9rLCB3aWxsIHVwZGF0 ZSB0aGVuIGluIG15IG5leHQgdmVyc2lvbiBjb2RlIGNoYW5nZXMuDQoNCj4gDQo+ID4gKyAgICAg ICAgfQ0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgLy8gU2Vjb25kLCBjaGVjayB3aGV0 aGVyIHRoZSBjb3VudCBoYXMgcmVhY2ggdGhlIGNoZWNrIG51bWJlci4NCj4gPiArICAgICAgICAv Lw0KPiA+ICsgICAgICAgIGZvciAoUHJvY2Vzc29ySW5kZXggPSAwOyBQcm9jZXNzb3JJbmRleCA8 IENwdVN0YXR1cy0+VGhyZWFkQ291bnQ7DQo+IFByb2Nlc3NvckluZGV4ICsrKSB7DQo+ID4gKyAg ICAgICAgICBTM1dhaXRGb3JTZW1hcGhvcmUgKCZTZW1hcGhvcmVQdHJbQXBPZmZzZXRdKTsNCj4g PiArICAgICAgICB9DQo+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICsgICAgICBjYXNl IFBhY2thZ2VEZXBUeXBlOg0KPiA+ICsgICAgICAgIFBhY2thZ2VPZmZzZXQgPSBBcExvY2F0aW9u LT5QYWNrYWdlICogQ3B1U3RhdHVzLT5Db3JlQ291bnQgKg0KPiBDcHVTdGF0dXMtPlRocmVhZENv dW50Ow0KPiA+ICsgICAgICAgIFBhY2thZ2VUaHJlYWRzQ291bnQgPSBDcHVTdGF0dXMtPlRocmVh ZENvdW50ICogQ3B1U3RhdHVzLQ0KPiA+Q29yZUNvdW50Ow0KPiA+ICsgICAgICAgIEFwT2Zmc2V0 ID0gUGFja2FnZU9mZnNldCArIENwdVN0YXR1cy0+VGhyZWFkQ291bnQgKiBBcExvY2F0aW9uLQ0K PiA+Q29yZSArIEFwTG9jYXRpb24tPlRocmVhZDsNCj4gPiArICAgICAgICBWYWxpZEFwQ291bnQg PSBDcHVTdGF0dXMtPlRocmVhZENvdW50ICogQ3B1U3RhdHVzLQ0KPiA+VmFsaWRDb3Jlc0luUGFj a2FnZXNbQXBMb2NhdGlvbi0+UGFja2FnZV07DQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAg ICAvLyBGaXJzdCBpbmNyZWFzZSBzZW1hcGhvcmUgY291bnQgYnkgMSBmb3IgcHJvY2Vzc29ycyBp biB0aGlzIHBhY2thZ2UuDQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAgICBmb3IgKFByb2Nl c3NvckluZGV4ID0gMDsgUHJvY2Vzc29ySW5kZXggPCBQYWNrYWdlVGhyZWFkc0NvdW50IDsNCj4g UHJvY2Vzc29ySW5kZXggKyspIHsNCj4gPiArICAgICAgICAgIFMzUmVsZWFzZVNlbWFwaG9yZSAo KFVJTlQzMiAqKSAmU2VtYXBob3JlUHRyW1BhY2thZ2VPZmZzZXQNCj4gPiArICsgUHJvY2Vzc29y SW5kZXhdKTsNCj4gDQo+ICg3KSBTYW1lIGFzICg2KS4NCg0Kb2ssIHdpbGwgdXBkYXRlIHRoZW4g aW4gbXkgbmV4dCB2ZXJzaW9uIGNvZGUgY2hhbmdlcy4NCg0KPiANCj4gPiArICAgICAgICB9DQo+ ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAgICAvLyBTZWNvbmQsIGNoZWNrIHdoZXRoZXIgdGhl IGNvdW50IGhhcyByZWFjaCB0aGUgY2hlY2sgbnVtYmVyLg0KPiA+ICsgICAgICAgIC8vDQo+ID4g KyAgICAgICAgZm9yIChQcm9jZXNzb3JJbmRleCA9IDA7IFByb2Nlc3NvckluZGV4IDwgVmFsaWRB cENvdW50OyBQcm9jZXNzb3JJbmRleA0KPiArKykgew0KPiA+ICsgICAgICAgICAgUzNXYWl0Rm9y U2VtYXBob3JlICgmU2VtYXBob3JlUHRyW0FwT2Zmc2V0XSk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ ICsgICAgICAgIGJyZWFrOw0KPiA+ICsNCj4gPiArICAgICAgZGVmYXVsdDoNCj4gPiArICAgICAg ICBicmVhazsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgICBicmVhazsNCj4gPiArDQo+ID4gICAg ICBkZWZhdWx0Og0KPiA+ICAgICAgICBicmVhazsNCj4gPiAgICAgIH0NCj4gPiAgICB9DQo+ID4g IH0NCj4gPg0KPiA+ICsvKioNCj4gPiArDQo+ID4gKyAgU2V0IFByb2Nlc3NvciByZWdpc3RlciBm b3Igb25lIEFQLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gICAgIFNtbVByZVJlZ2lzdGVyVGFibGUg ICAgIFVzZSBwcmUgcmVnaXN0ZXIgdGFibGUgb3IgcmVnaXN0ZXIgdGFibGUuDQo+ID4gKw0KPiA+ ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtTZXRSZWdpc3RlciAoDQo+ID4gKyAgSU4gQk9PTEVBTiAg ICAgICAgICAgICAgICAgU21tUHJlUmVnaXN0ZXJUYWJsZQ0KPiANCj4gKDgpIEZvciBjb25zaXN0 ZW5jeSB3aXRoIHRoZSAiUHJlU21tSW5pdFJlZ2lzdGVyVGFibGUiIGZpZWxkIG5hbWUsIEkgdGhp bmsgdGhpcw0KPiBwYXJhbWV0ZXIgc2hvdWxkIGJlIG5hbWVkICJQcmVTbW1SZWdpc3RlclRhYmxl IiAoaW4gdGhlIGxlYWRpbmcgY29tbWVudCBhcw0KPiB3ZWxsKS4NCg0Kb2ssIHdpbGwgdXBkYXRl IHRoZW4gaW4gbXkgbmV4dCB2ZXJzaW9uIGNvZGUgY2hhbmdlcy4NCj4gDQo+IA0KPiA+ICsgICkN Cj4gPiArew0KPiA+ICsgIENQVV9SRUdJU1RFUl9UQUJMRSAgICAgICAgKlJlZ2lzdGVyVGFibGU7 DQo+ID4gKyAgQ1BVX1JFR0lTVEVSX1RBQkxFICAgICAgICAqUmVnaXN0ZXJUYWJsZXM7DQo+ID4g KyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbml0QXBpY0lkOw0KPiA+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgUHJvY0luZGV4Ow0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgSW5kZXg7DQo+ID4gKw0KPiA+ICsgIGlmIChTbW1QcmVSZWdpc3RlclRhYmxlKSB7DQo+ ID4gKyAgICBSZWdpc3RlclRhYmxlcyA9IChDUFVfUkVHSVNURVJfVEFCTEUNCj4gPiArICopKFVJ TlROKW1BY3BpQ3B1RGF0YS5QcmVTbW1Jbml0UmVnaXN0ZXJUYWJsZTsNCj4gPiArICB9IGVsc2Ug ew0KPiA+ICsgICAgUmVnaXN0ZXJUYWJsZXMgPSAoQ1BVX1JFR0lTVEVSX1RBQkxFDQo+ID4gKyAq KShVSU5UTiltQWNwaUNwdURhdGEuUmVnaXN0ZXJUYWJsZTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIEluaXRBcGljSWQgPSBHZXRJbml0aWFsQXBpY0lkICgpOw0KPiA+ICsgIFJlZ2lzdGVyVGFi bGUgPSBOVUxMOw0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1BY3BpQ3B1RGF0YS5O dW1iZXJPZkNwdXM7IEluZGV4KyspIHsNCj4gPiArICAgIGlmIChSZWdpc3RlclRhYmxlc1tJbmRl eF0uSW5pdGlhbEFwaWNJZCA9PSBJbml0QXBpY0lkKSB7DQo+ID4gKyAgICAgIFJlZ2lzdGVyVGFi bGUgPSAgJlJlZ2lzdGVyVGFibGVzW0luZGV4XTsNCj4gDQo+ICg5KSBVbmp1c3RpZmllZCBkb3Vi bGUgc3BhY2UgYWZ0ZXIgdGhlIGVxdWFsIHNpZ24uDQoNCm9rLCB3aWxsIHVwZGF0ZSB0aGVuIGlu IG15IG5leHQgdmVyc2lvbiBjb2RlIGNoYW5nZXMuDQo+IA0KPiANCj4gPiArICAgICAgUHJvY0lu ZGV4ID0gSW5kZXg7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4g PiArICBBU1NFUlQgKFJlZ2lzdGVyVGFibGUgIT0gTlVMTCk7DQo+ID4gKw0KPiA+ICsgIFByb2dy YW1Qcm9jZXNzb3JSZWdpc3RlciAoDQo+ID4gKyAgICBSZWdpc3RlclRhYmxlLA0KPiA+ICsgICAg bUFjcGlDcHVEYXRhLkFwTG9jYXRpb24gKyBQcm9jSW5kZXgsDQo+ID4gKyAgICAmbUFjcGlDcHVE YXRhLkNwdVN0YXR1cywNCj4gPiArICAgICZtQ3B1RmxhZ3MNCj4gPiArICAgICk7DQo+ID4gK30N Cj4gPiArDQo+ID4gIC8qKg0KPiA+ICAgIEFQIGluaXRpYWxpemF0aW9uIGJlZm9yZSB0aGVuIGFm dGVyIFNNQkFTRSByZWxvY2F0aW9uIGluIHRoZSBTMyBib290IHBhdGguDQo+ID4gICoqLw0KPiA+ IEBAIC0zNzQsNyArNDE5LDcgQEAgSW5pdGlhbGl6ZUFwICgNCj4gPg0KPiA+ICAgIExvYWRNdHJy RGF0YSAobUFjcGlDcHVEYXRhLk10cnJUYWJsZSk7DQo+ID4NCj4gPiAtICBTZXRQcm9jZXNzb3JS ZWdpc3RlciAoKENQVV9SRUdJU1RFUl9UQUJMRSAqKSAoVUlOVE4pDQo+ID4gbUFjcGlDcHVEYXRh LlByZVNtbUluaXRSZWdpc3RlclRhYmxlLCBtQWNwaUNwdURhdGEuTnVtYmVyT2ZDcHVzKTsNCj4g PiArICBTZXRSZWdpc3RlciAoVFJVRSk7DQo+ID4NCj4gPiAgICAvLw0KPiA+ICAgIC8vIENvdW50 IGRvd24gdGhlIG51bWJlciB3aXRoIGxvY2sgbWVjaGFuaXNtLg0KPiA+IEBAIC0zOTEsNyArNDM2 LDcgQEAgSW5pdGlhbGl6ZUFwICgNCj4gPiAgICBQcm9ncmFtVmlydHVhbFdpcmVNb2RlICgpOw0K PiA+ICAgIERpc2FibGVMdnRJbnRlcnJ1cHRzICgpOw0KPiA+DQo+ID4gLSAgU2V0UHJvY2Vzc29y UmVnaXN0ZXIgKChDUFVfUkVHSVNURVJfVEFCTEUgKikgKFVJTlROKQ0KPiA+IG1BY3BpQ3B1RGF0 YS5SZWdpc3RlclRhYmxlLCBtQWNwaUNwdURhdGEuTnVtYmVyT2ZDcHVzKTsNCj4gPiArICBTZXRS ZWdpc3RlciAoRkFMU0UpOw0KPiA+DQo+ID4gICAgLy8NCj4gPiAgICAvLyBQbGFjZSBBUCBpbnRv IHRoZSBzYWZlIGNvZGUsIGNvdW50IGRvd24gdGhlIG51bWJlciB3aXRoIGxvY2sgbWVjaGFuaXNt DQo+IGluIHRoZSBzYWZlIGNvZGUuDQo+ID4gQEAgLTQ2Niw3ICs1MTEsNyBAQCBJbml0aWFsaXpl Q3B1QmVmb3JlUmViYXNlICggIHsNCj4gPiAgICBMb2FkTXRyckRhdGEgKG1BY3BpQ3B1RGF0YS5N dHJyVGFibGUpOw0KPiA+DQo+ID4gLSAgU2V0UHJvY2Vzc29yUmVnaXN0ZXIgKChDUFVfUkVHSVNU RVJfVEFCTEUgKikgKFVJTlROKQ0KPiA+IG1BY3BpQ3B1RGF0YS5QcmVTbW1Jbml0UmVnaXN0ZXJU YWJsZSwgbUFjcGlDcHVEYXRhLk51bWJlck9mQ3B1cyk7DQo+ID4gKyAgU2V0UmVnaXN0ZXIgKFRS VUUpOw0KPiA+DQo+ID4gICAgUHJvZ3JhbVZpcnR1YWxXaXJlTW9kZSAoKTsNCj4gPg0KPiA+IEBA IC01MDIsOCArNTQ3LDYgQEAgSW5pdGlhbGl6ZUNwdUFmdGVyUmViYXNlICgNCj4gPiAgICBWT0lE DQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4gLSAgU2V0UHJvY2Vzc29yUmVnaXN0ZXIgKChDUFVfUkVH SVNURVJfVEFCTEUgKikgKFVJTlROKQ0KPiA+IG1BY3BpQ3B1RGF0YS5SZWdpc3RlclRhYmxlLCBt QWNwaUNwdURhdGEuTnVtYmVyT2ZDcHVzKTsNCj4gPiAtDQo+ID4gICAgbU51bWJlclRvRmluaXNo ID0gbUFjcGlDcHVEYXRhLk51bWJlck9mQ3B1cyAtIDE7DQo+ID4NCj4gPiAgICAvLw0KPiA+IEBA IC01MTEsNiArNTU0LDggQEAgSW5pdGlhbGl6ZUNwdUFmdGVyUmViYXNlICgNCj4gPiAgICAvLw0K PiA+ICAgIG1Jbml0QXBzQWZ0ZXJTbW1CYXNlUmVsb2MgPSBUUlVFOw0KPiA+DQo+ID4gKyAgU2V0 UmVnaXN0ZXIgKEZBTFNFKTsNCj4gPiArDQo+ID4gICAgd2hpbGUgKG1OdW1iZXJUb0ZpbmlzaCA+ IDApIHsNCj4gPiAgICAgIENwdVBhdXNlICgpOw0KPiA+ICAgIH0NCj4gDQo+ICgxMCkgSSdtIG5v dCBpbXBseWluZyB0aGlzIGlzIGluY29ycmVjdCwganVzdCBhc2tpbmc6IGNhbiB5b3UgcGxlYXNl IGV4cGxhaW4gd2h5IHRoZQ0KPiBmdW5jdGlvbiBjYWxsIGlzICptb3ZlZCo/DQo+IA0KPiBEb2Vz IGl0IG1lcml0IGEgY29tbWVudCBpbiB0aGUgY29kZSBwZXJoYXBzPw0KDQpZZXMsIHRoaXMgY2hh bmdlIHVzZWQgdG8gbGV0IEFwcyBjb250aW51ZSBpdCBwcm9jZWR1cmUgYmVmb3JlIEJTUCBiZWdp biB0byBzZXQgdGhlIHJlZ2lzdGVyLiBPbGQgbG9naWMgd2lsbCBsZXQgQVAgY29udGludWUgdGhl aXIgdGFza3MgYWZ0ZXIgQlNQIGZpbmlzaGVkIHNldCBpdHMgcmVnaXN0ZXIuIFRoaXMgaXMgYSBt dXN0IGhhdmUgY2hhbmdlIGlmIHRoZSBzZW1hcGhvcmUgbG9naWMgaXMgd29ya2luZy4gQmVjYXVz ZSBpZiB0aGUgZGVwZW5kZW5jZSB0eXBlIGlzIHBhY2thZ2UgdHlwZSwgdGhlIHNlbWFwaG9yZSB3 aWxsIHdhaXQgZm9yIGFsbCBBcHMgaW4gb25lIHBhY2thZ2UgZmluaXNoaW5nIHRoZWlyIHRhc2tz IGJlZm9yZSBzZXQgbmV4dCByZWdpc3RlciBmb3IgYWxsIEFQcy4gSWYgdGhlIEFwcyBub3QgYmVn aW4gaXRzIHRhc2sgZHVyaW5nIEJTUCBkb2luZyBpdHMgdGFzaywgdGhlIEJTUCB0aHJlYWQgd2ls bCBoYW5nIGJlY2F1c2UgaXQgaXMgd2FpdGluZyBmb3Igb3RoZXIgQXBzIGluIHRoZSBzYW1lIHBh Y2thZ2UgZmluaXNoaW5nIHRoZWlyIHRhc2suDQoNCkkgd2lsbCBhZGQgdGhpcyBpbmZvIGluIHRo ZSBjb21tZW50cy4NCg0KPiANCj4gDQo+ID4gQEAgLTU3NCw4ICs2MTksNiBAQCBTbW1SZXN0b3Jl Q3B1ICgNCj4gPg0KPiA+ICAgIG1TbW1TM0ZsYWcgPSBUUlVFOw0KPiA+DQo+ID4gLSAgSW5pdGlh bGl6ZVNwaW5Mb2NrIChtTWVtb3J5TWFwcGVkTG9jayk7DQo+ID4gLQ0KPiA+ICAgIC8vDQo+ID4g ICAgLy8gU2VlIGlmIHRoZXJlIGlzIGVub3VnaCBjb250ZXh0IHRvIHJlc3VtZSBQRUkgUGhhc2UN Cj4gPiAgICAvLw0KPiA+IEBAIC03OTAsNyArODMzLDYgQEAgQ29weVJlZ2lzdGVyVGFibGUgKA0K PiA+ICAgICkNCj4gPiAgew0KPiA+ICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgIEluZGV4 Ow0KPiA+IC0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgIEluZGV4MTsNCj4gPiAgICBDUFVf UkVHSVNURVJfVEFCTEVfRU5UUlkgICAqUmVnaXN0ZXJUYWJsZUVudHJ5Ow0KPiA+DQo+ID4gICAg Q29weU1lbSAoRGVzdGluYXRpb25SZWdpc3RlclRhYmxlTGlzdCwgU291cmNlUmVnaXN0ZXJUYWJs ZUxpc3QsDQo+ID4gTnVtYmVyT2ZDcHVzICogc2l6ZW9mIChDUFVfUkVHSVNURVJfVEFCTEUpKTsg QEAgLTgwMiwxNyArODQ0LDYgQEANCj4gQ29weVJlZ2lzdGVyVGFibGUgKA0KPiA+ICAgICAgICAg ICk7DQo+ID4gICAgICAgIEFTU0VSVCAoUmVnaXN0ZXJUYWJsZUVudHJ5ICE9IE5VTEwpOw0KPiA+ ICAgICAgICBEZXN0aW5hdGlvblJlZ2lzdGVyVGFibGVMaXN0W0luZGV4XS5SZWdpc3RlclRhYmxl RW50cnkgPQ0KPiAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJTlROKVJlZ2lzdGVyVGFibGVFbnRy eTsNCj4gPiAtICAgICAgLy8NCj4gPiAtICAgICAgLy8gR28gdGhvdWdoIGFsbCBNU1JzIGluIHJl Z2lzdGVyIHRhYmxlIHRvIGluaXRpYWxpemUgTVNSIHNwaW4gbG9jaw0KPiA+IC0gICAgICAvLw0K PiA+IC0gICAgICBmb3IgKEluZGV4MSA9IDA7IEluZGV4MSA8IERlc3RpbmF0aW9uUmVnaXN0ZXJU YWJsZUxpc3RbSW5kZXhdLlRhYmxlTGVuZ3RoOw0KPiBJbmRleDErKywgUmVnaXN0ZXJUYWJsZUVu dHJ5KyspIHsNCj4gPiAtICAgICAgICBpZiAoKFJlZ2lzdGVyVGFibGVFbnRyeS0+UmVnaXN0ZXJU eXBlID09IE1zcikgJiYgKFJlZ2lzdGVyVGFibGVFbnRyeS0NCj4gPlZhbGlkQml0TGVuZ3RoIDwg NjQpKSB7DQo+ID4gLSAgICAgICAgICAvLw0KPiA+IC0gICAgICAgICAgLy8gSW5pdGlhbGl6ZSBN U1Igc3BpbiBsb2NrIG9ubHkgZm9yIHRob3NlIE1TUnMgbmVlZCBiaXQgZmllbGQgd3JpdGluZw0K PiA+IC0gICAgICAgICAgLy8NCj4gPiAtICAgICAgICAgIEluaXRNc3JTcGluTG9ja0J5SW5kZXgg KFJlZ2lzdGVyVGFibGVFbnRyeS0+SW5kZXgpOw0KPiA+IC0gICAgICAgIH0NCj4gPiAtICAgICAg fQ0KPiA+ICAgICAgfQ0KPiA+ICAgIH0NCj4gPiAgfQ0KPiA+IEBAIC04MzIsNiArODYzLDcgQEAg R2V0QWNwaUNwdURhdGEgKA0KPiA+ICAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICpHZHRG b3JBcDsNCj4gPiAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAqSWR0Rm9yQXA7DQo+ID4g ICAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgKk1hY2hpbmVDaGVja0hhbmRsZXJGb3JBcDsN Cj4gPiArICBDUFVfU1RBVFVTX0lORk9STUFUSU9OICAgICAqQ3B1U3RhdHVzOw0KPiA+DQo+ID4g ICAgaWYgKCFtQWNwaVMzRW5hYmxlKSB7DQo+ID4gICAgICByZXR1cm47DQo+ID4gQEAgLTkwNiw2 ICs5MzgsMTYgQEAgR2V0QWNwaUNwdURhdGEgKA0KPiA+ICAgIEdkdHItPkJhc2UgPSAoVUlOVE4p R2R0Rm9yQXA7DQo+ID4gICAgSWR0ci0+QmFzZSA9IChVSU5UTilJZHRGb3JBcDsNCj4gPiAgICBt QWNwaUNwdURhdGEuQXBNYWNoaW5lQ2hlY2tIYW5kbGVyQmFzZSA9DQo+ID4gKEVGSV9QSFlTSUNB TF9BRERSRVNTKShVSU5UTilNYWNoaW5lQ2hlY2tIYW5kbGVyRm9yQXA7DQo+ID4gKw0KPiA+ICsg IENwdVN0YXR1cyA9ICZtQWNwaUNwdURhdGEuQ3B1U3RhdHVzOyAgQ29weU1lbSAoQ3B1U3RhdHVz LA0KPiA+ICsgJkFjcGlDcHVEYXRhLT5DcHVTdGF0dXMsIHNpemVvZiAoQ1BVX1NUQVRVU19JTkZP Uk1BVElPTikpOw0KPiA+ICsgQ3B1U3RhdHVzLT5WYWxpZENvcmVzSW5QYWNrYWdlcyA9IEFsbG9j YXRlQ29weVBvb2wgKHNpemVvZiAoVUlOVDMyKQ0KPiA+ICsgKiBDcHVTdGF0dXMtPlBhY2thZ2VD b3VudCwNCj4gPiArIEFjcGlDcHVEYXRhLT5DcHVTdGF0dXMuVmFsaWRDb3Jlc0luUGFja2FnZXMp Ow0KPiANCj4gKDExKSBUaGlzIGxpbmUgaXMgMTQyIGNoYXJhY3RlcnMgbG9uZy4NCj4gDQo+IFBs ZWFzZSBtYWtlIHN1cmUgdGhhdCBhbGwgbmV3IGxpbmVzIGFyZSBhdCBtb3N0IDEyMCBjaGFycyBs b25nLg0KDQpnb3QgaXQsIHdpbGwgcmVmaW5lIHRoZSBjb2RlIGluIG15IG5leHQgY2hhbmdlcy4N Cg0KPiANCj4gDQo+ICgxMikgSSBkb24ndCB1bmRlcnN0YW5kIHRoZSBtdWx0aXBsaWNhdGlvbi4g SW4gdGhlICJWYWxpZENvcmVzSW5QYWNrYWdlcyIgYXJyYXksDQo+IGRvIHdlIGhhdmUgYSBzaW1w bGUgKHNjYWxhcikgY29yZSBjb3VudCwgZm9yIGVhY2ggc29ja2V0Pw0KWWVzLCBWYWxpZENvcmVz SW5QYWNrYWdlcyBpcyBhIHBvaW50ZXIgd2hpY2ggcG9pbnQgdG8gYW4gYXJyYXkuIFRoaXMgYXJy YXkgc2F2ZXMgdmFsaWQgY29yZSBjb3VudCBmb3IgZWFjaCBwYWNrYWdlKHNvY2tldCkgaW4gdGhl IENQVS4gSW4gc2VydmVyIHBsYXRmb3JtLCBpdCBoYXMgbXVsdGlwbGUgcGFja2FnZXMgYW5kIGRp ZmZlcmVudCBwYWNrYWdlcyBtYXkgaGF2ZSBkaWZmZXJlbnQgdmFsaWQgY29yZXMuIFRoaXMgaW5m byBpcyByZXF1aXJlZCBieSBzZW1hcGhvcmUgcmVnaXN0ZXIuDQoNCj4gDQo+IFRoYXQncyB3aGF0 IHRoZSAiVmFsaWRBcENvdW50IiBhc3NpZ25tZW50IGFib3ZlIHN1Z2dlc3RzLiBDYW4gd2UgcGVy aGFwcw0KPiByZW5hbWUgdGhlIGZpZWxkIHNvIHRoYXQgaXQgc2F5cyAiQ291bnQiIHNvbWV3aGVy ZT8NCj4gDQo+IA0KPiAoMTMpIFdpdGhvdXQgbW9kaWZ5aW5nIENwdVMzRGF0YUR4ZSwgdGhpcyBs aW5lIHdpbGwgY3Jhc2guCQ0KWWVzLCBJIG1pc3NlZCB0aGUgY2hhbmdlIGluIENwdVMzRGF0YUR4 ZSwgd2lsbCBpbmNsdWRlIHRoZSBjaGFuZ2UgaW4gbXkgbmV4dCB2ZXJzaW9uLg0KDQo+IA0KPiAN Cj4gPiArICBBU1NFUlQgKENwdVN0YXR1cy0+VmFsaWRDb3Jlc0luUGFja2FnZXMgIT0gTlVMTCk7 DQo+ID4gKyBtQWNwaUNwdURhdGEuQXBMb2NhdGlvbiA9IEFsbG9jYXRlQ29weVBvb2wNCj4gPiAr IChtQWNwaUNwdURhdGEuTnVtYmVyT2ZDcHVzICogc2l6ZW9mIChFRklfQ1BVX1BIWVNJQ0FMX0xP Q0FUSU9OKSwNCj4gPiArIEFjcGlDcHVEYXRhLT5BcExvY2F0aW9uKTsgIEFTU0VSVCAobUFjcGlD cHVEYXRhLkFwTG9jYXRpb24gIT0gTlVMTCk7DQo+IA0KPiAoMTQpIFRoaXMgYWxzbyByZXF1aXJl cyBhIG1vZGlmaWNhdGlvbiB0byBDcHVTM0RhdGFEeGUuDQpZZXMsIEkgbWlzc2VkIHRoZSBjaGFu Z2UgaW4gQ3B1UzNEYXRhRHhlLCB3aWxsIGluY2x1ZGUgdGhlIGNoYW5nZSBpbiBteSBuZXh0IHZl cnNpb24uDQoNCj4gDQo+IA0KPiA+ICsgIEluaXRpYWxpemVTcGluTG9jaygoU1BJTl9MT0NLKikg Jm1DcHVGbGFncy5NZW1vcnlNYXBwZWRMb2NrKTsNCj4gPiArIG1DcHVGbGFncy5TZW1hcGhvcmVD b3VudCA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoVUlOVDMyKSAqDQo+ID4gKyBDcHVTdGF0 dXMtPlBhY2thZ2VDb3VudCAqIENwdVN0YXR1cy0+Q29yZUNvdW50ICoNCj4gPiArIENwdVN0YXR1 cy0+VGhyZWFkQ291bnQpOyAgQVNTRVJUIChtQ3B1RmxhZ3MuU2VtYXBob3JlQ291bnQgIT0gTlVM TCk7DQo+ID4gIH0NCj4gPg0KPiA+ICAvKioNCj4gPiBkaWZmIC0tZ2l0IGEvVWVmaUNwdVBrZy9Q aVNtbUNwdUR4ZVNtbS9NcFNlcnZpY2UuYw0KPiA+IGIvVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNt bS9NcFNlcnZpY2UuYw0KPiA+IGluZGV4IDljZjUwOGE1YzcuLjQyYjA0MDUzMWUgMTAwNjQ0DQo+ ID4gLS0tIGEvVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9NcFNlcnZpY2UuYw0KPiA+ICsrKyBi L1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vTXBTZXJ2aWNlLmMNCj4gPiBAQCAtMTMwMyw4ICsx MzAzLDYgQEAgSW5pdGlhbGl6ZVNtbUNwdVNlbWFwaG9yZXMgKA0KPiA+ICAgIG1TbW1DcHVTZW1h cGhvcmVzLlNlbWFwaG9yZUdsb2JhbC5Db2RlQWNjZXNzQ2hlY2tMb2NrDQo+ID4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAoU1BJTl9MT0NLICop U2VtYXBob3JlQWRkcjsNCj4gPiAgICBTZW1hcGhvcmVBZGRyICs9IFNlbWFwaG9yZVNpemU7DQo+ ID4gLSAgbVNtbUNwdVNlbWFwaG9yZXMuU2VtYXBob3JlR2xvYmFsLk1lbW9yeU1hcHBlZExvY2sN Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9 IChTUElOX0xPQ0sgKilTZW1hcGhvcmVBZGRyOw0KPiA+DQo+ID4gICAgU2VtYXBob3JlQWRkciA9 IChVSU5UTilTZW1hcGhvcmVCbG9jayArIEdsb2JhbFNlbWFwaG9yZXNTaXplOw0KPiA+ICAgIG1T bW1DcHVTZW1hcGhvcmVzLlNlbWFwaG9yZUNwdS5CdXN5ICAgID0gKFNQSU5fTE9DSw0KPiAqKVNl bWFwaG9yZUFkZHI7DQo+ID4gQEAgLTEzMjEsNyArMTMxOSw2IEBAIEluaXRpYWxpemVTbW1DcHVT ZW1hcGhvcmVzICgNCj4gPg0KPiA+ICAgIG1QRkxvY2sgICAgICAgICAgICAgICAgICAgICAgID0g bVNtbUNwdVNlbWFwaG9yZXMuU2VtYXBob3JlR2xvYmFsLlBGTG9jazsNCj4gPiAgICBtQ29uZmln U21tQ29kZUFjY2Vzc0NoZWNrTG9jayA9DQo+IG1TbW1DcHVTZW1hcGhvcmVzLlNlbWFwaG9yZUds b2JhbC5Db2RlQWNjZXNzQ2hlY2tMb2NrOw0KPiA+IC0gIG1NZW1vcnlNYXBwZWRMb2NrICAgICAg ICAgICAgID0NCj4gbVNtbUNwdVNlbWFwaG9yZXMuU2VtYXBob3JlR2xvYmFsLk1lbW9yeU1hcHBl ZExvY2s7DQo+ID4NCj4gPiAgICBtU2VtYXBob3JlU2l6ZSA9IFNlbWFwaG9yZVNpemU7DQo+ID4g IH0NCj4gPiBkaWZmIC0tZ2l0IGEvVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9QaVNtbUNwdUR4 ZVNtbS5oDQo+ID4gYi9VZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL1BpU21tQ3B1RHhlU21tLmgN Cj4gPiBpbmRleCA4YzdmNDk5NmQxLi5lMjk3MDMwOGZlIDEwMDY0NA0KPiA+IC0tLSBhL1VlZmlD cHVQa2cvUGlTbW1DcHVEeGVTbW0vUGlTbW1DcHVEeGVTbW0uaA0KPiA+ICsrKyBiL1VlZmlDcHVQ a2cvUGlTbW1DcHVEeGVTbW0vUGlTbW1DcHVEeGVTbW0uaA0KPiA+IEBAIC01Myw2ICs1Myw3IEBA IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZDQo+IEtJTkQsIEVJ VEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ID4gICNpbmNsdWRlIDxMaWJyYXJ5L1JlcG9ydFN0 YXR1c0NvZGVMaWIuaD4gICNpbmNsdWRlDQo+ID4gPExpYnJhcnkvU21tQ3B1RmVhdHVyZXNMaWIu aD4gICNpbmNsdWRlDQo+ID4gPExpYnJhcnkvUGVDb2ZmR2V0RW50cnlQb2ludExpYi5oPg0KPiA+ ICsjaW5jbHVkZSA8TGlicmFyeS9SZWdpc3RlckNwdUZlYXR1cmVzTGliLmg+DQo+ID4NCj4gPiAg I2luY2x1ZGUgPEFjcGlDcHVEYXRhLmg+DQo+ID4gICNpbmNsdWRlIDxDcHVIb3RQbHVnRGF0YS5o Pg0KPiA+IEBAIC0zNjQsNyArMzY1LDYgQEAgdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICAgIHZvbGF0 aWxlIEJPT0xFQU4gICAgICpBbGxDcHVzSW5TeW5jOw0KPiA+ICAgIFNQSU5fTE9DSyAgICAgICAg ICAgICpQRkxvY2s7DQo+ID4gICAgU1BJTl9MT0NLICAgICAgICAgICAgKkNvZGVBY2Nlc3NDaGVj a0xvY2s7DQo+ID4gLSAgU1BJTl9MT0NLICAgICAgICAgICAgKk1lbW9yeU1hcHBlZExvY2s7DQo+ ID4gIH0gU01NX0NQVV9TRU1BUEhPUkVfR0xPQkFMOw0KPiA+DQo+ID4gIC8vLw0KPiA+IEBAIC00 MDksNyArNDA5LDYgQEAgZXh0ZXJuIFNNTV9DUFVfU0VNQVBIT1JFUw0KPiBtU21tQ3B1U2VtYXBo b3JlczsNCj4gPiAgZXh0ZXJuIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1T ZW1hcGhvcmVTaXplOw0KPiA+ICBleHRlcm4gU1BJTl9MT0NLICAgICAgICAgICAgICAgICAgICAg ICAgICAgKm1QRkxvY2s7DQo+ID4gIGV4dGVybiBTUElOX0xPQ0sgICAgICAgICAgICAgICAgICAg ICAgICAgICAqbUNvbmZpZ1NtbUNvZGVBY2Nlc3NDaGVja0xvY2s7DQo+ID4gLWV4dGVybiBTUElO X0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAqbU1lbW9yeU1hcHBlZExvY2s7DQo+ID4g IGV4dGVybiBFRklfU01SQU1fREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAqbVNtbUNwdVNtcmFt UmFuZ2VzOw0KPiA+ICBleHRlcm4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bVNtbUNwdVNtcmFtUmFuZ2VDb3VudDsNCj4gPiAgZXh0ZXJuIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1QaHlzaWNhbEFkZHJlc3NCaXRzOw0KPiA+DQo+IA0KPiBUaGFua3Ms DQo+IExhc3psbw0K