From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web12.647.1589474296220029093 for ; Thu, 14 May 2020 09:38:16 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=VApJZ762; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: michael.d.kinney@intel.com) IronPort-SDR: YNdE93RxI5z3YzJdySH+bKhuqFyCw27wTRLJeBLChinAnLHy3kuUmalY2O3fD4N11I5tm5WZen eF0yM4o7P+zg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 May 2020 09:38:15 -0700 IronPort-SDR: Sn0I+MfKFUgSZGUX3UCidbCQ+0CDb9o/PfrXgZKpYDlpT3/sJjqurRJ8HLfztwnzaFtl2lyyTg g4ufg1RXNBiQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,392,1583222400"; d="scan'208";a="262894929" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga003.jf.intel.com with ESMTP; 14 May 2020 09:38:15 -0700 Received: from fmsmsx101.amr.corp.intel.com (10.18.124.199) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 14 May 2020 09:38:14 -0700 Received: from FMSEDG001.ED.cps.intel.com (10.1.192.133) by fmsmsx101.amr.corp.intel.com (10.18.124.199) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 14 May 2020 09:38:14 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.170) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 14 May 2020 09:38:14 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S2oyj7omYSNbFxV+m2HVtGKqijhU3Vk449lrqE/CFQInAv8Dv/2oymOe8pKCdOKiLtki7bRFUEYH4lAM/cIOiTglB5WiRvWJReyUNKvltJ7R2B6bhdMXryUjgWVpRX3Od1wD+bgdJzrJRHnEeo3RKIyCmschWiFfAmGyG5WEpSDr7bSBk7Q4KJP1jrAGwxOkhh8HHVoud7YhwhGTC+ceRqnI75P3xy2uqOUavKMfB3MMJclWnKAgb2up91wU4jnoeQEo+t0C6uWfcKzmapmQ+JPLVXi82I34GLhVncbJRH7Hrw/SPhsKI/SoKiLZfc4UvXV6nCucgB1qD9iBHUf+hw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ylom2B049AEDaj1Pq3OMUCqXt/RDR273ignnCAQB8yQ=; b=SOO7+jNXsub1ajwfw3TmyCPe07ITuJBBRx0wxrRCcvbGcASHFr446l4CBq/7kHcMdlviNB89igsTiCTj5w7/d4r0qt+oG+PVA5uvDsMg5M1XuLrchCN/HQpCGSaQ7ryr4x9gCUJpoWUorX9w+CR0usMDJzwvgfZ+UlqQ9hV3I7mbDFyTXl9QbYumPXjTTzVHnd3UBLpTU7hbGWBFCtl+ot8OFKHE3M97Q03zvvdo+uPl1RidaWD0w4rulbnciK/urcl/rd1qBzuKnYUWmq27hNy3EtBiX+B6syXdRqXtzwPv2n8k9P8ZYYOoi0DXP3h4AeBFj55XgqhXfotab1WmAQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ylom2B049AEDaj1Pq3OMUCqXt/RDR273ignnCAQB8yQ=; b=VApJZ762aKQgTu8sD4AAYt4FckHJ0DiQTjOGCq1iggyPCQJUP0VCmC4AcmKD2gRbd/kfBl/PRQJE7RnXgFYBY5FuzKG8KMguqmvGKxo+20KbSyTpFdQb1gLLqyyU+l8vj+2DLF7aqJXUq9+WfdaOhM5RjV4Sf5GCNo+ZurOVBnM= Received: from MN2PR11MB4461.namprd11.prod.outlook.com (2603:10b6:208:192::29) by MN2PR11MB4046.namprd11.prod.outlook.com (2603:10b6:208:13b::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3000.26; Thu, 14 May 2020 16:38:12 +0000 Received: from MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::10bc:1a4e:4745:ffc1]) by MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::10bc:1a4e:4745:ffc1%3]) with mapi id 15.20.2979.033; Thu, 14 May 2020 16:38:12 +0000 From: "Michael D Kinney" To: "devel@edk2.groups.io" , "cheptsov@ispras.ru" , "Kinney, Michael D" CC: Andrew Fish , Ard Biesheuvel , Bret Barkelew , "Brian J . Johnson" , "Chiu, Chasel" , "Justen, Jordan L" , Laszlo Ersek , "Leif Lindholm" , "Gao, Liming" , =?utf-8?B?TWFydmluIEjDpHVzZXI=?= , "Zimmer, Vincent" , "Gao, Zhichao" Subject: Re: [edk2-devel] [PATCH V6 1/1] MdePkg: Fix SafeString performing assertions on runtime checks Thread-Topic: [edk2-devel] [PATCH V6 1/1] MdePkg: Fix SafeString performing assertions on runtime checks Thread-Index: AQHWKdG79diJW4MLoUCbks7DQ+yYi6inyAMg Date: Thu, 14 May 2020 16:38:12 +0000 Message-ID: References: <20200514092537.29609-1-cheptsov@ispras.ru> <20200514092537.29609-2-cheptsov@ispras.ru> In-Reply-To: <20200514092537.29609-2-cheptsov@ispras.ru> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [134.134.136.220] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 496bd75b-8e04-4765-2b31-08d7f82531a5 x-ms-traffictypediagnostic: MN2PR11MB4046: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2657; x-forefront-prvs: 040359335D x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Q+eXQn2GLKIu5VjQQBdwzIgP/ou7U9aijUVQj7Q6LyGrZA6ucJvm7nsihq641Q+1BTZyQQsnd9lBMX1/Kzf+eI2KqnGSl02wPhacvzI85tf6QNQVzDsDoidEx4Q60i2h34DfUJi5fCbgTITrTuXLC68fbQMWdEqSwNT0a35QgTELJaTJjGNPVW8L7dltl9zWrjQhGMKM4AP1zf4wVIiJVRMggFt0Jfgeog9jn5iUIxJrXv9cAoX6fEhhbEQsaJNfhvdJgAXj/OiJ6K18J/mYpQQaeaoMed4KexPJas2ScAguFzJGEMO0ScIY0+ijuabAkIYqoV80DuUn5c38i4T8HYByHh1jZNyqeVLaMBj9jy48SBb5IfRzONGZTw1MWRRGHN1+quw+t1tJI+b4rcIFMWtHmcWoJVMorTDV6P0e4Q4FdVHWXObIfqDePfrYaqV4l6e5MWqbKvTlkRLJREaK3wVmlAXgsds0WiuEN8p/Xc8WGkDBrg+pJEnz2RM28ndjKTYMEDsO7FerG+ndIXfgeQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR11MB4461.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(39860400002)(346002)(396003)(376002)(136003)(366004)(6506007)(53546011)(86362001)(7696005)(8936002)(71200400001)(5660300002)(52536014)(26005)(186003)(107886003)(478600001)(33656002)(8676002)(966005)(55016002)(30864003)(2906002)(4326008)(9686003)(54906003)(76116006)(66946007)(19627235002)(66556008)(66446008)(66476007)(64756008)(66574014)(316002)(110136005)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: C++YxlPoq1XyffCYq/p8YXKZnn2Q0gQxGdZk+lfJViz3nEqhYJFwRDchGSyEoGq5pbPlaOAria0eXtoQSnrRRt/wnFipGM7mZf4QCyedPFM7E1hnhq/sL1/FJA5fJf8QE3wwr6k97plm3LBCPaiQ1I8vNRGJb7YKprs4hklSpvxZ1O2VYmPZTUh8a+loP4+wk8H8upKfEVc+Cuw3wrnE3kIwtpBJqg+vahP6ICXUWHIgjDYncLMdXF5HtYBR+bk8OJKCDRTSUJiJmvn2dT/vUgHJRPmeheT4oBRYJur7pzZvBfQt8nurcfBTJbLDDUiO8b2YjnQ7aYW9CHdq/SieOEbvkWyiPCHzJoaJfXOuFYeHSldbaQ+hsHBi077Xo6X2Y6uewGhkTyJDXm1MMBGMJF2sFCNLYReJEBGOdDQRaKPR9chMHGWZK4yAEoIlKT8k8c80C7L3vWCbZ4CSpqThxzDNA6ahU9KBcDPUBElWileV/0lQeRegqUf+FZvFvzd1 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 496bd75b-8e04-4765-2b31-08d7f82531a5 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 May 2020 16:38:12.5261 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: QqQZjhIXkmjRgDC07fjmsI9Wc/35bECaX7xw+CNkEFSdsHC5ZfDzFRfatpZ5PjN5rEsGht+BXYDLTyyiHPoHK4sk0pQv8R9X/V4m9O/g0hw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4046 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 V2h5IHByZXNlcnZlIHRoZSBBU1NFUlQoKXMgZm9yIGFuIGEgVW5pY29kZSBzdHJpbmdzDQp0aGF0 IGFyZSBub3QgYWxpZ25lZCBpbiBhIDE2LWJpdCBib3VuZGFyeT8NCg0KVGhpcyBpcyBlc3NlbnRp YWxseSB0aGUgc2FtZSBhcyBhbiBpbnZhbGlkIHBvaW50ZXIgdmFsdWUNCmp1c3QgbGlrZSBOVUxM LiAgSWYgTlVMTCBwb2ludGVyIHJldHVybnMgYW4gZXJyb3IgY29kZSwNCnNob3VsZG4ndCBhbmQg aW52YWxpZCBwb2ludGVyIHZhbHVlPw0KDQpUaGFua3MsDQoNCk1pa2UNCg0KPiAtLS0tLU9yaWdp bmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2ZWxAZWRr Mi5ncm91cHMuaW8+IE9uDQo+IEJlaGFsZiBPZiBWaXRhbHkgQ2hlcHRzb3YNCj4gU2VudDogVGh1 cnNkYXksIE1heSAxNCwgMjAyMCAyOjI2IEFNDQo+IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbw0K PiBDYzogQW5kcmV3IEZpc2ggPGFmaXNoQGFwcGxlLmNvbT47IEFyZCBCaWVzaGV1dmVsDQo+IDxh cmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPjsgQnJldCBCYXJrZWxldw0KPiA8YnJldC5iYXJrZWxl d0BtaWNyb3NvZnQuY29tPjsgQnJpYW4gSiAuIEpvaG5zb24NCj4gPGJyaWFuLmpvaG5zb25AaHBl LmNvbT47IENoaXUsIENoYXNlbA0KPiA8Y2hhc2VsLmNoaXVAaW50ZWwuY29tPjsgSnVzdGVuLCBK b3JkYW4gTA0KPiA8am9yZGFuLmwuanVzdGVuQGludGVsLmNvbT47IExhc3psbyBFcnNlaw0KPiA8 bGVyc2VrQHJlZGhhdC5jb20+OyBMZWlmIExpbmRob2xtIDxsZWlmQG51dmlhaW5jLmNvbT47DQo+ IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IE1hcnZpbiBIw6R1c2VyDQo+IDxt aGFldXNlckBvdXRsb29rLmRlPjsgS2lubmV5LCBNaWNoYWVsIEQNCj4gPG1pY2hhZWwuZC5raW5u ZXlAaW50ZWwuY29tPjsgWmltbWVyLCBWaW5jZW50DQo+IDx2aW5jZW50LnppbW1lckBpbnRlbC5j b20+OyBHYW8sIFpoaWNoYW8NCj4gPHpoaWNoYW8uZ2FvQGludGVsLmNvbT4NCj4gU3ViamVjdDog W2VkazItZGV2ZWxdIFtQQVRDSCBWNiAxLzFdIE1kZVBrZzogRml4DQo+IFNhZmVTdHJpbmcgcGVy Zm9ybWluZyBhc3NlcnRpb25zIG9uIHJ1bnRpbWUgY2hlY2tzDQo+IA0KPiBSRUY6DQo+IGh0dHBz Oi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1NA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IFJ1bnRpbWUgY2hlY2tzIHJldHVybmVkIHZpYSBzdGF0dXMgcmV0dXJuIGNv ZGUgc2hvdWxkDQo+IG5vdCB3b3JrIGFzDQo+IA0KPiANCj4gYXNzZXJ0aW9ucyB0byBwZXJtaXQg cGFyc2luZyBub3QgdHJ1c3RlZCBkYXRhIHdpdGgNCj4gU2FmZVN0cmluZw0KPiANCj4gDQo+IGlu dGVyZmFjZXMuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gQ0M6IEFuZHJldyBGaXNoIDxhZmlzaEBh cHBsZS5jb20+DQo+IA0KPiANCj4gQ0M6IEFyZCBCaWVzaGV1dmVsIDxhcmQuYmllc2hldXZlbEBs aW5hcm8ub3JnPg0KPiANCj4gDQo+IENDOiBCcmV0IEJhcmtlbGV3IDxicmV0LmJhcmtlbGV3QG1p Y3Jvc29mdC5jb20+DQo+IA0KPiANCj4gQ0M6IEJyaWFuIEouIEpvaG5zb24gPGJyaWFuLmpvaG5z b25AaHBlLmNvbT4NCj4gDQo+IA0KPiBDQzogQ2hhc2VsIENoaXUgPGNoYXNlbC5jaGl1QGludGVs LmNvbT4NCj4gDQo+IA0KPiBDQzogSm9yZGFuIEp1c3RlbiA8am9yZGFuLmwuanVzdGVuQGludGVs LmNvbT4NCj4gDQo+IA0KPiBDQzogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4g DQo+IA0KPiBDQzogTGVpZiBMaW5kaG9sbSA8bGVpZkBudXZpYWluYy5jb20+DQo+IA0KPiANCj4g Q0M6IExpbWluZyBHYW8gPGxpbWluZy5nYW9AaW50ZWwuY29tPg0KPiANCj4gDQo+IENDOiBNYXJ2 aW4gSMOkdXNlciA8bWhhZXVzZXJAb3V0bG9vay5kZT4NCj4gDQo+IA0KPiBDQzogTWlrZSBLaW5u ZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiANCj4gDQo+IENDOiBWaW5jZW50IFpp bW1lciA8dmluY2VudC56aW1tZXJAaW50ZWwuY29tPg0KPiANCj4gDQo+IENDOiBaaGljaGFvIEdh byA8emhpY2hhby5nYW9AaW50ZWwuY29tPg0KPiANCj4gDQo+IFNpZ25lZC1vZmYtYnk6IFZpdGFs eSBDaGVwdHNvdiA8dml0OTY5NkBwcm90b25tYWlsLmNvbT4NCj4gDQo+IA0KPiAtLS0NCj4gDQo+ IA0KPiAgTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9CYXNlTGliLmggICAgfCAxMjAgKystLS0tLS0t LS0tDQo+IC0tLS0tLS0tDQo+IA0KPiANCj4gIE1kZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvU2FmZVN0 cmluZy5jIHwgIDgwIC0tLS0tLS0tLS0tLQ0KPiAtDQo+IA0KPiANCj4gIDIgZmlsZXMgY2hhbmdl ZCwgNyBpbnNlcnRpb25zKCspLCAxOTMgZGVsZXRpb25zKC0pDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gZGlmZiAtLWdpdCBhL01kZVBrZy9JbmNsdWRlL0xpYnJhcnkvQmFzZUxpYi5oDQo+IGIvTWRl UGtnL0luY2x1ZGUvTGlicmFyeS9CYXNlTGliLmgNCj4gDQo+IA0KPiBpbmRleCBlY2FkZmY4YjIz Li42MmRjMzE1MWJjIDEwMDY0NA0KPiANCj4gDQo+IC0tLSBhL01kZVBrZy9JbmNsdWRlL0xpYnJh cnkvQmFzZUxpYi5oDQo+IA0KPiANCj4gKysrIGIvTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9CYXNl TGliLmgNCj4gDQo+IA0KPiBAQCAtMTg5LDcgKzE4OSw2IEBAIFN0cm5TaXplUyAoDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gICAgSWYgRGVzdGluYXRpb24gaXMgbm90IGFsaWduZWQgb24gYSAxNi1i aXQgYm91bmRhcnksDQo+IHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gICAgSWYgU291cmNlIGlz IG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiAN Cj4gDQo+IC0gIElmIGFuIGVycm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVuIHRoZSBmdW5jdGlv bg0KPiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgSWYgYW4g ZXJyb3IgaXMgcmV0dXJuZWQsIHRoZW4gdGhlIERlc3RpbmF0aW9uIGlzDQo+IHVubW9kaWZpZWQu DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gQEAgLTIyNSw3ICsyMjQsNiBAQCBTdHJDcHlTICgNCj4g DQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBMZW5ndGggPiAwIGFuZCBEZXN0aW5hdGlvbiBpcyBu b3QgYWxpZ25lZCBvbiBhDQo+IDE2LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+ IA0KPiAgICBJZiBMZW5ndGggPiAwIGFuZCBTb3VyY2UgaXMgbm90IGFsaWduZWQgb24gYSAxNi1i aXQNCj4gYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgYW4gZXJyb3Ig d291bGQgYmUgcmV0dXJuZWQsIHRoZW4gdGhlIGZ1bmN0aW9uDQo+IHdpbGwgYWxzbyBBU1NFUlQo KS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBhbiBlcnJvciBpcyByZXR1cm5lZCwgdGhl biB0aGUgRGVzdGluYXRpb24gaXMNCj4gdW5tb2RpZmllZC4NCj4gDQo+IA0KPiANCj4gDQo+IA0K PiBAQCAtMjYzLDcgKzI2MSw2IEBAIFN0cm5DcHlTICgNCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAg ICBJZiBEZXN0aW5hdGlvbiBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwNCj4g dGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAgICBJZiBTb3VyY2UgaXMgbm90IGFsaWduZWQgb24g YSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgYW4g ZXJyb3Igd291bGQgYmUgcmV0dXJuZWQsIHRoZW4gdGhlIGZ1bmN0aW9uDQo+IHdpbGwgYWxzbyBB U1NFUlQoKS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBhbiBlcnJvciBpcyByZXR1cm5l ZCwgdGhlbiB0aGUgRGVzdGluYXRpb24gaXMNCj4gdW5tb2RpZmllZC4NCj4gDQo+IA0KPiANCj4g DQo+IA0KPiBAQCAtMzAzLDcgKzMwMCw2IEBAIFN0ckNhdFMgKA0KPiANCj4gDQo+IA0KPiANCj4g DQo+ICAgIElmIERlc3RpbmF0aW9uIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5 LA0KPiB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+ICAgIElmIFNvdXJjZSBpcyBub3QgYWxpZ25l ZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJ ZiBhbiBlcnJvciB3b3VsZCBiZSByZXR1cm5lZCwgdGhlbiB0aGUgZnVuY3Rpb24NCj4gd2lsbCBh bHNvIEFTU0VSVCgpLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIGFuIGVycm9yIGlzIHJl dHVybmVkLCB0aGVuIHRoZSBEZXN0aW5hdGlvbiBpcw0KPiB1bm1vZGlmaWVkLg0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IEBAIC0zNTAsMTIgKzM0Niw3IEBAIFN0cm5DYXRTICgNCj4gDQo+IA0KPiAg ICBiZSBpZ25vcmVkLiBUaGVuLCB0aGUgZnVuY3Rpb24gc3RvcHMgYXQgdGhlIGZpcnN0DQo+IGNo YXJhY3RlciB0aGF0IGlzIGEgbm90IGENCj4gDQo+IA0KPiAgICB2YWxpZCBkZWNpbWFsIGNoYXJh Y3RlciBvciBhIE51bGwtdGVybWluYXRvciwNCj4gd2hpY2hldmVyIG9uZSBjb21lcyBmaXJzdC4N Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQo KS4NCj4gDQo+IA0KPiAtICBJZiBEYXRhIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiAN Cj4gICAgSWYgU3RyaW5nIGlzIG5vdCBhbGlnbmVkIGluIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVu DQo+IEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElmIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVu Z3RoIGlzIG5vdCB6ZXJvLCBhbmQNCj4gU3RyaW5nIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4g DQo+IC0gIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoIFVuaWNvZGUgY2hhcmFjdGVycywN Cj4gbm90IGluY2x1ZGluZyB0aGUNCj4gDQo+IA0KPiAtICBOdWxsLXRlcm1pbmF0b3IsIHRoZW4g QVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGhhcyBubyB2YWxp ZCBkZWNpbWFsIGRpZ2l0cyBpbiB0aGUgYWJvdmUNCj4gZm9ybWF0LCB0aGVuIDAgaXMgc3RvcmVk DQo+IA0KPiANCj4gICAgYXQgdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgRGF0YS4NCj4gDQo+ IA0KPiBAQCAtNDA2LDEyICszOTcsNyBAQCBTdHJEZWNpbWFsVG9VaW50blMgKA0KPiANCj4gDQo+ ICAgIGJlIGlnbm9yZWQuIFRoZW4sIHRoZSBmdW5jdGlvbiBzdG9wcyBhdCB0aGUgZmlyc3QNCj4g Y2hhcmFjdGVyIHRoYXQgaXMgYSBub3QgYQ0KPiANCj4gDQo+ICAgIHZhbGlkIGRlY2ltYWwgY2hh cmFjdGVyIG9yIGEgTnVsbC10ZXJtaW5hdG9yLA0KPiB3aGljaGV2ZXIgb25lIGNvbWVzIGZpcnN0 Lg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VS VCgpLg0KPiANCj4gDQo+IC0gIElmIERhdGEgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+ IA0KPiAgICBJZiBTdHJpbmcgaXMgbm90IGFsaWduZWQgaW4gYSAxNi1iaXQgYm91bmRhcnksIHRo ZW4NCj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdM ZW5ndGggaXMgbm90IHplcm8sIGFuZA0KPiBTdHJpbmcgY29udGFpbnMgbW9yZSB0aGFuDQo+IA0K PiANCj4gLSAgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggVW5pY29kZSBjaGFyYWN0ZXJz LA0KPiBub3QgaW5jbHVkaW5nIHRoZQ0KPiANCj4gDQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhl biBBU1NFUlQoKS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaGFzIG5vIHZh bGlkIGRlY2ltYWwgZGlnaXRzIGluIHRoZSBhYm92ZQ0KPiBmb3JtYXQsIHRoZW4gMCBpcyBzdG9y ZWQNCj4gDQo+IA0KPiAgICBhdCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBEYXRhLg0KPiAN Cj4gDQo+IEBAIC00NjcsMTIgKzQ1Myw3IEBAIFN0ckRlY2ltYWxUb1VpbnQ2NFMgKA0KPiANCj4g DQo+ICAgIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBpcyBhIG5vdCBhIHZhbGlkDQo+IGhleGFk ZWNpbWFsIGNoYXJhY3RlciBvciBOVUxMLA0KPiANCj4gDQo+ICAgIHdoaWNoZXZlciBvbmUgY29t ZXMgZmlyc3QuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAgSWYgU3RyaW5nIGlzIE5VTEwsIHRo ZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgRGF0YSBpcyBOVUxMLCB0aGVuIEFTU0VSVCgp Lg0KPiANCj4gDQo+ICAgIElmIFN0cmluZyBpcyBub3QgYWxpZ25lZCBpbiBhIDE2LWJpdCBib3Vu ZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBQY2RNYXhpbXVtVW5pY29k ZVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kDQo+IFN0cmluZyBjb250YWlucyBtb3JlIHRo YW4NCj4gDQo+IA0KPiAtICBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBVbmljb2RlIGNo YXJhY3RlcnMsDQo+IG5vdCBpbmNsdWRpbmcgdGhlDQo+IA0KPiANCj4gLSAgTnVsbC10ZXJtaW5h dG9yLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIFN0cmluZyBo YXMgbm8gdmFsaWQgaGV4YWRlY2ltYWwgZGlnaXRzIGluIHRoZQ0KPiBhYm92ZSBmb3JtYXQsIHRo ZW4gMCBpcw0KPiANCj4gDQo+ICAgIHN0b3JlZCBhdCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBi eSBEYXRhLg0KPiANCj4gDQo+IEBAIC01MjgsMTIgKzUwOSw3IEBAIFN0ckhleFRvVWludG5TICgN Cj4gDQo+IA0KPiAgICB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgaXMgYSBub3QgYSB2YWxpZA0K PiBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIgb3IgTlVMTCwNCj4gDQo+IA0KPiAgICB3aGljaGV2ZXIg b25lIGNvbWVzIGZpcnN0Lg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmluZyBpcyBO VUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElmIERhdGEgaXMgTlVMTCwgdGhlbiBB U1NFUlQoKS4NCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaXMgbm90IGFsaWduZWQgaW4gYSAxNi1i aXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgUGNkTWF4aW11 bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZA0KPiBTdHJpbmcgY29udGFpbnMg bW9yZSB0aGFuDQo+IA0KPiANCj4gLSAgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggVW5p Y29kZSBjaGFyYWN0ZXJzLA0KPiBub3QgaW5jbHVkaW5nIHRoZQ0KPiANCj4gDQo+IC0gIE51bGwt dGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBT dHJpbmcgaGFzIG5vIHZhbGlkIGhleGFkZWNpbWFsIGRpZ2l0cyBpbiB0aGUNCj4gYWJvdmUgZm9y bWF0LCB0aGVuIDAgaXMNCj4gDQo+IA0KPiAgICBzdG9yZWQgYXQgdGhlIGxvY2F0aW9uIHBvaW50 ZWQgdG8gYnkgRGF0YS4NCj4gDQo+IA0KPiBAQCAtNjIyLDggKzU5OCw2IEBAIEFzY2lpU3RyblNp emVTICgNCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIg YXMgc3RyY3B5X3MgZGVmaW5lZCBpbiBDMTEuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAgSWYg YW4gZXJyb3Igd291bGQgYmUgcmV0dXJuZWQsIHRoZW4gdGhlIGZ1bmN0aW9uDQo+IHdpbGwgYWxz byBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gICAgSWYgYW4gZXJyb3IgaXMgcmV0 dXJuZWQsIHRoZW4gdGhlIERlc3RpbmF0aW9uIGlzDQo+IHVubW9kaWZpZWQuDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gICAgQHBhcmFtICBEZXN0aW5hdGlvbiAgICAgICAgICAgICAgQSBwb2ludGVy IHRvIGENCj4gTnVsbC10ZXJtaW5hdGVkIEFzY2lpIHN0cmluZy4NCj4gDQo+IA0KPiBAQCAtNjU2 LDggKzYzMCw2IEBAIEFzY2lpU3RyQ3B5UyAoDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgVGhp cyBmdW5jdGlvbiBpcyBzaW1pbGFyIGFzIHN0cm5jcHlfcyBkZWZpbmVkIGluDQo+IEMxMS4NCj4g DQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBhbiBlcnJvciB3b3VsZCBiZSByZXR1cm5lZCwgdGhl biB0aGUgZnVuY3Rpb24NCj4gd2lsbCBhbHNvIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+ IA0KPiAgICBJZiBhbiBlcnJvciBpcyByZXR1cm5lZCwgdGhlbiB0aGUgRGVzdGluYXRpb24gaXMN Cj4gdW5tb2RpZmllZC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBAcGFyYW0gIERlc3RpbmF0 aW9uICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYQ0KPiBOdWxsLXRlcm1pbmF0ZWQgQXNjaWkg c3RyaW5nLg0KPiANCj4gDQo+IEBAIC02OTIsOCArNjY0LDYgQEAgQXNjaWlTdHJuQ3B5UyAoDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gICAgVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIGFzIHN0cmNh dF9zIGRlZmluZWQgaW4gQzExLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIGFuIGVycm9y IHdvdWxkIGJlIHJldHVybmVkLCB0aGVuIHRoZSBmdW5jdGlvbg0KPiB3aWxsIGFsc28gQVNTRVJU KCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+ICAgIElmIGFuIGVycm9yIGlzIHJldHVybmVkLCB0 aGVuIHRoZSBEZXN0aW5hdGlvbiBpcw0KPiB1bm1vZGlmaWVkLg0KPiANCj4gDQo+IA0KPiANCj4g DQo+ICAgIEBwYXJhbSAgRGVzdGluYXRpb24gICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhDQo+ IE51bGwtdGVybWluYXRlZCBBc2NpaSBzdHJpbmcuDQo+IA0KPiANCj4gQEAgLTczMCw4ICs3MDAs NiBAQCBBc2NpaVN0ckNhdFMgKA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIFRoaXMgZnVuY3Rp b24gaXMgc2ltaWxhciBhcyBzdHJuY2F0X3MgZGVmaW5lZCBpbg0KPiBDMTEuDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gLSAgSWYgYW4gZXJyb3Igd291bGQgYmUgcmV0dXJuZWQsIHRoZW4gdGhlIGZ1 bmN0aW9uDQo+IHdpbGwgYWxzbyBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gICAg SWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQsIHRoZW4gdGhlIERlc3RpbmF0aW9uIGlzDQo+IHVubW9k aWZpZWQuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgQHBhcmFtICBEZXN0aW5hdGlvbiAgICAg ICAgICAgICAgQSBwb2ludGVyIHRvIGENCj4gTnVsbC10ZXJtaW5hdGVkIEFzY2lpIHN0cmluZy4N Cj4gDQo+IA0KPiBAQCAtNzc3LDEyICs3NDUsNiBAQCBBc2NpaVN0cm5DYXRTICgNCj4gDQo+IA0K PiAgICBiZSBpZ25vcmVkLiBUaGVuLCB0aGUgZnVuY3Rpb24gc3RvcHMgYXQgdGhlIGZpcnN0DQo+ IGNoYXJhY3RlciB0aGF0IGlzIGEgbm90IGENCj4gDQo+IA0KPiAgICB2YWxpZCBkZWNpbWFsIGNo YXJhY3RlciBvciBhIE51bGwtdGVybWluYXRvciwNCj4gd2hpY2hldmVyIG9uZSBjb21lcyBmaXJz dC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NF UlQoKS4NCj4gDQo+IA0KPiAtICBJZiBEYXRhIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0K PiANCj4gLSAgSWYgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQN Cj4gU3RyaW5nIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4gDQo+IC0gIFBjZE1heGltdW1Bc2Np aVN0cmluZ0xlbmd0aCBBc2NpaSBjaGFyYWN0ZXJzLCBub3QNCj4gaW5jbHVkaW5nIHRoZQ0KPiAN Cj4gDQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+ IA0KPiANCj4gICAgSWYgU3RyaW5nIGhhcyBubyB2YWxpZCBkZWNpbWFsIGRpZ2l0cyBpbiB0aGUg YWJvdmUNCj4gZm9ybWF0LCB0aGVuIDAgaXMgc3RvcmVkDQo+IA0KPiANCj4gICAgYXQgdGhlIGxv Y2F0aW9uIHBvaW50ZWQgdG8gYnkgRGF0YS4NCj4gDQo+IA0KPiAgICBJZiB0aGUgbnVtYmVyIHJl cHJlc2VudGVkIGJ5IFN0cmluZyBleGNlZWRzIHRoZQ0KPiByYW5nZSBkZWZpbmVkIGJ5IFVJTlRO LCB0aGVuDQo+IA0KPiANCj4gQEAgLTgzMiwxMiArNzk0LDYgQEAgQXNjaWlTdHJEZWNpbWFsVG9V aW50blMgKA0KPiANCj4gDQo+ICAgIGJlIGlnbm9yZWQuIFRoZW4sIHRoZSBmdW5jdGlvbiBzdG9w cyBhdCB0aGUgZmlyc3QNCj4gY2hhcmFjdGVyIHRoYXQgaXMgYSBub3QgYQ0KPiANCj4gDQo+ICAg IHZhbGlkIGRlY2ltYWwgY2hhcmFjdGVyIG9yIGEgTnVsbC10ZXJtaW5hdG9yLA0KPiB3aGljaGV2 ZXIgb25lIGNvbWVzIGZpcnN0Lg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmluZyBp cyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElmIERhdGEgaXMgTlVMTCwgdGhl biBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGgg aXMgbm90IHplcm8sIGFuZA0KPiBTdHJpbmcgY29udGFpbnMgbW9yZSB0aGFuDQo+IA0KPiANCj4g LSAgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIEFzY2lpIGNoYXJhY3RlcnMsIG5vdA0KPiBp bmNsdWRpbmcgdGhlDQo+IA0KPiANCj4gLSAgTnVsbC10ZXJtaW5hdG9yLCB0aGVuIEFTU0VSVCgp Lg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaGFzIG5vIHZhbGlkIGRlY2lt YWwgZGlnaXRzIGluIHRoZSBhYm92ZQ0KPiBmb3JtYXQsIHRoZW4gMCBpcyBzdG9yZWQNCj4gDQo+ IA0KPiAgICBhdCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBEYXRhLg0KPiANCj4gDQo+ICAg IElmIHRoZSBudW1iZXIgcmVwcmVzZW50ZWQgYnkgU3RyaW5nIGV4Y2VlZHMgdGhlDQo+IHJhbmdl IGRlZmluZWQgYnkgVUlOVDY0LCB0aGVuDQo+IA0KPiANCj4gQEAgLTg5MSwxMiArODQ3LDYgQEAg QXNjaWlTdHJEZWNpbWFsVG9VaW50NjRTICgNCj4gDQo+IA0KPiAgICBjaGFyYWN0ZXIgdGhhdCBp cyBhIG5vdCBhIHZhbGlkIGhleGFkZWNpbWFsDQo+IGNoYXJhY3RlciBvciBOdWxsLXRlcm1pbmF0 b3IsDQo+IA0KPiANCj4gICAgd2hpY2hldmVyIG9uIGNvbWVzIGZpcnN0Lg0KPiANCj4gDQo+IA0K PiANCj4gDQo+IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+ IC0gIElmIERhdGEgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBQY2RN YXhpbXVtQXNjaWlTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZA0KPiBTdHJpbmcgY29udGFp bnMgbW9yZSB0aGFuDQo+IA0KPiANCj4gLSAgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIEFz Y2lpIGNoYXJhY3RlcnMsIG5vdA0KPiBpbmNsdWRpbmcgdGhlDQo+IA0KPiANCj4gLSAgTnVsbC10 ZXJtaW5hdG9yLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAgICBJZiBT dHJpbmcgaGFzIG5vIHZhbGlkIGhleGFkZWNpbWFsIGRpZ2l0cyBpbiB0aGUNCj4gYWJvdmUgZm9y bWF0LCB0aGVuIDAgaXMNCj4gDQo+IA0KPiAgICBzdG9yZWQgYXQgdGhlIGxvY2F0aW9uIHBvaW50 ZWQgdG8gYnkgRGF0YS4NCj4gDQo+IA0KPiAgICBJZiB0aGUgbnVtYmVyIHJlcHJlc2VudGVkIGJ5 IFN0cmluZyBleGNlZWRzIHRoZQ0KPiByYW5nZSBkZWZpbmVkIGJ5IFVJTlROLCB0aGVuDQo+IA0K PiANCj4gQEAgLTk1MCwxMiArOTAwLDYgQEAgQXNjaWlTdHJIZXhUb1VpbnRuUyAoDQo+IA0KPiAN Cj4gICAgY2hhcmFjdGVyIHRoYXQgaXMgYSBub3QgYSB2YWxpZCBoZXhhZGVjaW1hbA0KPiBjaGFy YWN0ZXIgb3IgTnVsbC10ZXJtaW5hdG9yLA0KPiANCj4gDQo+ICAgIHdoaWNoZXZlciBvbiBjb21l cyBmaXJzdC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhl biBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBEYXRhIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCku DQo+IA0KPiANCj4gLSAgSWYgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJv LCBhbmQNCj4gU3RyaW5nIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4gDQo+IC0gIFBjZE1heGlt dW1Bc2NpaVN0cmluZ0xlbmd0aCBBc2NpaSBjaGFyYWN0ZXJzLCBub3QNCj4gaW5jbHVkaW5nIHRo ZQ0KPiANCj4gDQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0K PiAtDQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGhhcyBubyB2YWxpZCBoZXhhZGVjaW1hbCBkaWdp dHMgaW4gdGhlDQo+IGFib3ZlIGZvcm1hdCwgdGhlbiAwIGlzDQo+IA0KPiANCj4gICAgc3RvcmVk IGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IERhdGEuDQo+IA0KPiANCj4gICAgSWYgdGhl IG51bWJlciByZXByZXNlbnRlZCBieSBTdHJpbmcgZXhjZWVkcyB0aGUNCj4gcmFuZ2UgZGVmaW5l ZCBieSBVSU5UNjQsIHRoZW4NCj4gDQo+IA0KPiBAQCAtMTUwNiwxNiArMTQ1MCw4IEBAIFN0ckhl eFRvVWludDY0ICgNCj4gDQo+IA0KPiAgICAiOjoiIGNhbiBiZSB1c2VkIHRvIGNvbXByZXNzIG9u ZSBvciBtb3JlIGdyb3VwcyBvZiBYDQo+IHdoZW4gWCBjb250YWlucyBvbmx5IDAuDQo+IA0KPiAN Cj4gICAgVGhlICI6OiIgY2FuIG9ubHkgYXBwZWFyIG9uY2UgaW4gdGhlIFN0cmluZy4NCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4g DQo+IA0KPiAtDQo+IA0KPiANCj4gLSAgSWYgQWRkcmVzcyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgp Lg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaXMgbm90IGFsaWduZWQgaW4g YSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gLSAgSWYgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZA0K PiBTdHJpbmcgY29udGFpbnMgbW9yZSB0aGFuDQo+IA0KPiANCj4gLSAgUGNkTWF4aW11bVVuaWNv ZGVTdHJpbmdMZW5ndGggVW5pY29kZSBjaGFyYWN0ZXJzLA0KPiBub3QgaW5jbHVkaW5nIHRoZQ0K PiANCj4gDQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAt DQo+IA0KPiANCj4gICAgSWYgRW5kUG9pbnRlciBpcyBub3QgTlVMTCBhbmQgQWRkcmVzcyBpcyB0 cmFuc2xhdGVkDQo+IGZyb20gU3RyaW5nLCBhIHBvaW50ZXINCj4gDQo+IA0KPiAgICB0byB0aGUg Y2hhcmFjdGVyIHRoYXQgc3RvcHBlZCB0aGUgc2NhbiBpcyBzdG9yZWQgYXQNCj4gdGhlIGxvY2F0 aW9uIHBvaW50ZWQgdG8NCj4gDQo+IA0KPiAgICBieSBFbmRQb2ludGVyLg0KPiANCj4gDQo+IEBA IC0xNTY3LDE1ICsxNTAzLDEwIEBAIFN0clRvSXB2NkFkZHJlc3MgKA0KPiANCj4gDQo+ICAgIFdo ZW4gL1AgaXMgaW4gdGhlIFN0cmluZywgdGhlIGZ1bmN0aW9uIHN0b3BzIGF0IHRoZQ0KPiBmaXJz dCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QNCj4gDQo+IA0KPiAgICBhIHZhbGlkIGRlY2ltYWwgZGln aXQgY2hhcmFjdGVyIGFmdGVyIFAgaXMNCj4gY29udmVydGVkLg0KPiANCj4gDQo+IA0KPiANCj4g DQo+IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4g DQo+IA0KPiAtICBJZiBBZGRyZXNzIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4g LQ0KPiANCj4gDQo+ICAgIElmIFN0cmluZyBpcyBub3QgYWxpZ25lZCBpbiBhIDE2LWJpdCBib3Vu ZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBQY2RN YXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kDQo+IFN0cmluZyBjb250 YWlucyBtb3JlIHRoYW4NCj4gDQo+IA0KPiAgICBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0 aCBVbmljb2RlIGNoYXJhY3RlcnMsDQo+IG5vdCBpbmNsdWRpbmcgdGhlDQo+IA0KPiANCj4gLSAg TnVsbC10ZXJtaW5hdG9yLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAg IElmIEVuZFBvaW50ZXIgaXMgbm90IE5VTEwgYW5kIEFkZHJlc3MgaXMgdHJhbnNsYXRlZA0KPiBm cm9tIFN0cmluZywgYSBwb2ludGVyDQo+IA0KPiANCj4gICAgdG8gdGhlIGNoYXJhY3RlciB0aGF0 IHN0b3BwZWQgdGhlIHNjYW4gaXMgc3RvcmVkIGF0DQo+IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRv DQo+IA0KPiANCj4gQEAgLTE2NDAsOCArMTU3MSw2IEBAIFN0clRvSXB2NEFkZHJlc3MgKA0KPiAN Cj4gDQo+ICAgICAgICAgICAgICAgICAgICBvbyAgICAgICAgICBEYXRhNFs0ODo1NV0NCj4gDQo+ IA0KPiAgICAgICAgICAgICAgICAgICAgcHAgICAgICAgICAgRGF0YTRbNTY6NjNdDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gLSAgSWYgU3RyaW5nIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0K PiANCj4gLSAgSWYgR3VpZCBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+ICAgIElm IFN0cmluZyBpcyBub3QgYWxpZ25lZCBpbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NF UlQoKS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBAcGFyYW0gIFN0cmluZyAgICAgICAgICAg ICAgICAgICBQb2ludGVyIHRvIGEgTnVsbC0NCj4gdGVybWluYXRlZCBVbmljb2RlIHN0cmluZy4N Cj4gDQo+IA0KPiBAQCAtMTY3NiwxNyArMTYwNSw2IEBAIFN0clRvR3VpZCAoDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGlzIG5vdCBhbGlnbmVkIGluIGEgMTYtYml0IGJvdW5k YXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmlu ZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAtICBJZiBC dWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gLSAg SWYgTGVuZ3RoIGlzIG5vdCBtdWx0aXBsZSBvZiAyLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+ IC0NCj4gDQo+IA0KPiAtICBJZiBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBpcyBub3Qg emVybyBhbmQNCj4gTGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbg0KPiANCj4gDQo+IC0gIFBjZE1heGlt dW1Vbmljb2RlU3RyaW5nTGVuZ3RoLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+ IA0KPiAtICBJZiBNYXhCdWZmZXJTaXplIGlzIGxlc3MgdGhhbiAoTGVuZ3RoIC8gMiksIHRoZW4N Cj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+ICAgIEBwYXJhbSAgU3RyaW5nICAg ICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gYSBOdWxsLQ0KPiB0ZXJtaW5hdGVkIFVuaWNvZGUg c3RyaW5nLg0KPiANCj4gDQo+ICAgIEBwYXJhbSAgTGVuZ3RoICAgICAgICAgICAgICAgICAgIFRo ZSBudW1iZXIgb2YNCj4gVW5pY29kZSBjaGFyYWN0ZXJzIHRvIGRlY29kZS4NCj4gDQo+IA0KPiAg ICBAcGFyYW0gIEJ1ZmZlciAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZQ0KPiBjb252 ZXJ0ZWQgYnl0ZXMgYXJyYXkuDQo+IA0KPiANCj4gQEAgLTE3NzcsNyArMTY5NSw2IEBAIFVuaWNv ZGVTdHJUb0FzY2lpU3RyICgNCj4gDQo+IA0KPiAgICB0aGUgdXBwZXIgOCBiaXRzLCB0aGVuIEFT U0VSVCgpLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIFNvdXJjZSBpcyBub3QgYWxpZ25l ZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJ ZiBhbiBlcnJvciB3b3VsZCBiZSByZXR1cm5lZCwgdGhlbiB0aGUgZnVuY3Rpb24NCj4gd2lsbCBh bHNvIEFTU0VSVCgpLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIGFuIGVycm9yIGlzIHJl dHVybmVkLCB0aGVuIHRoZSBEZXN0aW5hdGlvbiBpcw0KPiB1bm1vZGlmaWVkLg0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IEBAIC0xODE4LDIyICsxNzM1LDIzIEBAIFVuaWNvZGVTdHJUb0FzY2lpU3Ry UyAoDQo+IA0KPiANCj4gICAgYml0cyBvZiBlYWNoIFVuaWNvZGUgY2hhcmFjdGVyLiBUaGUgZnVu Y3Rpb24NCj4gdGVybWluYXRlcyB0aGUgQXNjaWkgc3RyaW5nDQo+IA0KPiANCj4gICAgRGVzdGlu YXRpb24gYnkgYXBwZW5kaW5nIGEgTnVsbC10ZXJtaW5hdG9yIGNoYXJhY3Rlcg0KPiBhdCB0aGUg ZW5kLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUg dG8gbWFrZSBzdXJlIERlc3RpbmF0aW9uDQo+IHBvaW50cyB0byBhIGJ1ZmZlciB3aXRoIHNpemUN Cj4gDQo+IA0KPiAtICBlcXVhbCBvciBncmVhdGVyIHRoYW4gKChTdHJMZW4gKFNvdXJjZSkgKyAx KSAqDQo+IHNpemVvZiAoQ0hBUjgpKSBpbiBieXRlcy4NCj4gDQo+IA0KPiArICBUaGUgY2FsbGVy IGlzIHJlc3BvbnNpYmxlIHRvIG1ha2Ugc3VyZSBEZXN0aW5hdGlvbg0KPiBwb2ludHMgdG8gYSBi dWZmZXIgd2l0aA0KPiANCj4gDQo+ICsgIHNpemUgbm90IHNtYWxsZXIgdGhhbiAoKE1JTihTdHJM ZW4oU291cmNlKSwgTGVuZ3RoKQ0KPiArIDEpICogc2l6ZW9mIChDSEFSOCkpDQo+IA0KPiANCj4g KyAgaW4gYnl0ZXMuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgSWYgYW55IFVuaWNvZGUgY2hh cmFjdGVycyBpbiBTb3VyY2UgY29udGFpbiBub24temVybw0KPiB2YWx1ZSBpbiB0aGUgdXBwZXIg OA0KPiANCj4gDQo+ICAgIGJpdHMsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gICAgSWYgU291 cmNlIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgp Lg0KPiANCj4gDQo+IC0gIElmIGFuIGVycm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVuIHRoZSBm dW5jdGlvbg0KPiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAg SWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQsIHRoZW4gdGhlIERlc3RpbmF0aW9uIGlzDQo+IHVubW9k aWZpZWQuDQo+IA0KPiANCj4gKyAgSWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQsIHRoZW4gRGVzdGlu YXRpb24gYW5kDQo+IERlc3RpbmF0aW9uTGVuZ3RoIGFyZQ0KPiANCj4gDQo+ICsgIHVubW9kaWZp ZWQuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgQHBhcmFtICBTb3VyY2UgICAgICAgICAgICAg VGhlIHBvaW50ZXIgdG8gYSBOdWxsLQ0KPiB0ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nLg0KPiAN Cj4gDQo+ICAgIEBwYXJhbSAgTGVuZ3RoICAgICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBv Zg0KPiBVbmljb2RlIGNoYXJhY3RlcnMgdG8NCj4gDQo+IA0KPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb252ZXJ0Lg0KPiANCj4gDQo+ICAgIEBwYXJhbSAgRGVzdGluYXRpb24gICAg ICAgIFRoZSBwb2ludGVyIHRvIGEgTnVsbC0NCj4gdGVybWluYXRlZCBBc2NpaSBzdHJpbmcuDQo+ IA0KPiANCj4gLSAgQHBhcmFtICBEZXN0TWF4ICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVy IG9mDQo+IERlc3RpbmF0aW9uIEFzY2lpDQo+IA0KPiANCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciwgaW5jbHVkaW5nDQo+IHRlcm1pbmF0aW5nIG51bGwgY2hhci4NCj4gDQo+ IA0KPiArICBAcGFyYW0gIERlc3RNYXggICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YN Cj4gRGVzdGluYXRpb24gQXNjaWkgY2hhciwNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbmNsdWRpbmcgdGVybWluYXRpbmcNCj4gbnVsbCBjaGFyLg0KPiANCj4gDQo+ ICAgIEBwYXJhbSAgRGVzdGluYXRpb25MZW5ndGggIFRoZSBudW1iZXIgb2YgVW5pY29kZQ0KPiBj aGFyYWN0ZXJzIGNvbnZlcnRlZC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBAcmV0dmFsIFJF VFVSTl9TVUNDRVNTICAgICAgICAgICAgU3RyaW5nIGlzDQo+IGNvbnZlcnRlZC4NCj4gDQo+IA0K PiBAQCAtMjM4OCwxMCArMjMwNiw2IEBAIEFzY2lpU3RySGV4VG9VaW50NjQgKA0KPiANCj4gDQo+ ICAgICI6OiIgY2FuIGJlIHVzZWQgdG8gY29tcHJlc3Mgb25lIG9yIG1vcmUgZ3JvdXBzIG9mIFgN Cj4gd2hlbiBYIGNvbnRhaW5zIG9ubHkgMC4NCj4gDQo+IA0KPiAgICBUaGUgIjo6IiBjYW4gb25s eSBhcHBlYXIgb25jZSBpbiB0aGUgU3RyaW5nLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElm IFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAt ICBJZiBBZGRyZXNzIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4g DQo+ICAgIElmIEVuZFBvaW50ZXIgaXMgbm90IE5VTEwgYW5kIEFkZHJlc3MgaXMgdHJhbnNsYXRl ZA0KPiBmcm9tIFN0cmluZywgYSBwb2ludGVyDQo+IA0KPiANCj4gICAgdG8gdGhlIGNoYXJhY3Rl ciB0aGF0IHN0b3BwZWQgdGhlIHNjYW4gaXMgc3RvcmVkIGF0DQo+IHRoZSBsb2NhdGlvbiBwb2lu dGVkIHRvDQo+IA0KPiANCj4gICAgYnkgRW5kUG9pbnRlci4NCj4gDQo+IA0KPiBAQCAtMjQ0Mywx MCArMjM1Nyw2IEBAIEFzY2lpU3RyVG9JcHY2QWRkcmVzcyAoDQo+IA0KPiANCj4gICAgV2hlbiAv UCBpcyBpbiB0aGUgU3RyaW5nLCB0aGUgZnVuY3Rpb24gc3RvcHMgYXQgdGhlDQo+IGZpcnN0IGNo YXJhY3RlciB0aGF0IGlzIG5vdA0KPiANCj4gDQo+ICAgIGEgdmFsaWQgZGVjaW1hbCBkaWdpdCBj aGFyYWN0ZXIgYWZ0ZXIgUCBpcw0KPiBjb252ZXJ0ZWQuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g LSAgSWYgU3RyaW5nIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4g DQo+IC0gIElmIEFkZHJlc3MgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+ IA0KPiANCj4gICAgSWYgRW5kUG9pbnRlciBpcyBub3QgTlVMTCBhbmQgQWRkcmVzcyBpcyB0cmFu c2xhdGVkDQo+IGZyb20gU3RyaW5nLCBhIHBvaW50ZXINCj4gDQo+IA0KPiAgICB0byB0aGUgY2hh cmFjdGVyIHRoYXQgc3RvcHBlZCB0aGUgc2NhbiBpcyBzdG9yZWQgYXQNCj4gdGhlIGxvY2F0aW9u IHBvaW50ZWQgdG8NCj4gDQo+IA0KPiAgICBieSBFbmRQb2ludGVyLg0KPiANCj4gDQo+IEBAIC0y NTA4LDkgKzI0MTgsNiBAQCBBc2NpaVN0clRvSXB2NEFkZHJlc3MgKA0KPiANCj4gDQo+ICAgICAg ICAgICAgICAgICAgICBvbyAgICAgICAgICBEYXRhNFs0ODo1NV0NCj4gDQo+IA0KPiAgICAgICAg ICAgICAgICAgICAgcHAgICAgICAgICAgRGF0YTRbNTY6NjNdDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gLSAgSWYgU3RyaW5nIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYg R3VpZCBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAgICBA cGFyYW0gIFN0cmluZyAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGEgTnVsbC0NCj4gdGVy bWluYXRlZCBBU0NJSSBzdHJpbmcuDQo+IA0KPiANCj4gICAgQHBhcmFtICBHdWlkICAgICAgICAg ICAgICAgICAgICAgUG9pbnRlciB0byB0aGUNCj4gY29udmVydGVkIEdVSUQuDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gQEAgLTI1NDEsMTcgKzI0NDgsNiBAQCBBc2NpaVN0clRvR3VpZCAoDQo+IA0K PiANCj4gICAgZGVjb2Rpbmcgc3RvcHMgYWZ0ZXIgTGVuZ3RoIG9mIGNoYXJhY3RlcnMgYW5kDQo+ IG91dHB1dHMgQnVmZmVyIGNvbnRhaW5pbmcNCj4gDQo+IA0KPiAgICAoTGVuZ3RoIC8gMikgYnl0 ZXMuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAgSWYgU3RyaW5nIGlzIE5VTEwsIHRoZW4gQVNT RVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+IC0gIElmIEJ1ZmZlciBpcyBOVUxMLCB0aGVu IEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAtICBJZiBMZW5ndGggaXMgbm90IG11 bHRpcGxlIG9mIDIsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+IC0gIElm IFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBpcyBub3QgemVybyBhbmQNCj4gTGVuZ3RoIGlz IGdyZWF0ZXIgdGhhbg0KPiANCj4gDQo+IC0gIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCwg dGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gLSAgSWYgTWF4QnVmZmVyU2l6 ZSBpcyBsZXNzIHRoYW4gKExlbmd0aCAvIDIpLCB0aGVuDQo+IEFTU0VSVCgpLg0KPiANCj4gDQo+ IC0NCj4gDQo+IA0KPiAgICBAcGFyYW0gIFN0cmluZyAgICAgICAgICAgICAgICAgICBQb2ludGVy IHRvIGEgTnVsbC0NCj4gdGVybWluYXRlZCBBU0NJSSBzdHJpbmcuDQo+IA0KPiANCj4gICAgQHBh cmFtICBMZW5ndGggICAgICAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBBU0NJSQ0KPiBjaGFy YWN0ZXJzIHRvIGRlY29kZS4NCj4gDQo+IA0KPiAgICBAcGFyYW0gIEJ1ZmZlciAgICAgICAgICAg ICAgICAgICBQb2ludGVyIHRvIHRoZQ0KPiBjb252ZXJ0ZWQgYnl0ZXMgYXJyYXkuDQo+IA0KPiAN Cj4gQEAgLTI2MzIsNyArMjUyOCw2IEBAIEFzY2lpU3RyVG9Vbmljb2RlU3RyICgNCj4gDQo+IA0K PiAgICBlcXVhbCBvciBncmVhdGVyIHRoYW4gKChBc2NpaVN0ckxlbiAoU291cmNlKSArIDEpICoN Cj4gc2l6ZW9mIChDSEFSMTYpKSBpbiBieXRlcy4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJ ZiBEZXN0aW5hdGlvbiBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwNCj4gdGhl biBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBhbiBlcnJvciB3b3VsZCBiZSByZXR1cm5lZCwg dGhlbiB0aGUgZnVuY3Rpb24NCj4gd2lsbCBhbHNvIEFTU0VSVCgpLg0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+ICAgIElmIGFuIGVycm9yIGlzIHJldHVybmVkLCB0aGVuIHRoZSBEZXN0aW5hdGlvbiBp cw0KPiB1bm1vZGlmaWVkLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IEBAIC0yNjc4LDcgKzI1NzMs NiBAQCBBc2NpaVN0clRvVW5pY29kZVN0clMgKA0KPiANCj4gDQo+ICAgICgoTUlOKEFzY2lpU3Ry TGVuKFNvdXJjZSksIExlbmd0aCkgKyAxKSAqIHNpemVvZg0KPiAoQ0hBUjgpKSBpbiBieXRlcy4N Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBEZXN0aW5hdGlvbiBpcyBub3QgYWxpZ25lZCBv biBhIDE2LWJpdCBib3VuZGFyeSwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBh biBlcnJvciB3b3VsZCBiZSByZXR1cm5lZCwgdGhlbiB0aGUgZnVuY3Rpb24NCj4gd2lsbCBhbHNv IEFTU0VSVCgpLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIGFuIGVycm9yIGlzIHJldHVy bmVkLCB0aGVuIERlc3RpbmF0aW9uIGFuZA0KPiBEZXN0aW5hdGlvbkxlbmd0aCBhcmUNCj4gDQo+ IA0KPiAgICB1bm1vZGlmaWVkLg0KPiANCj4gDQo+IGRpZmYgLS1naXQgYS9NZGVQa2cvTGlicmFy eS9CYXNlTGliL1NhZmVTdHJpbmcuYw0KPiBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvU2FmZVN0 cmluZy5jDQo+IA0KPiANCj4gaW5kZXggN2RjMDNkMmNhYS4uMWRiNDJhYmIwNSAxMDA2NDQNCj4g DQo+IA0KPiAtLS0gYS9NZGVQa2cvTGlicmFyeS9CYXNlTGliL1NhZmVTdHJpbmcuYw0KPiANCj4g DQo+ICsrKyBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvU2FmZVN0cmluZy5jDQo+IA0KPiANCj4g QEAgLTE0LDcgKzE0LDYgQEANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgI2RlZmluZSBTQUZFX1NU UklOR19DT05TVFJBSU5UX0NIRUNLKEV4cHJlc3Npb24sDQo+IFN0YXR1cykgIFwNCj4gDQo+IA0K PiAgICBkbyB7IFwNCj4gDQo+IA0KPiAtICAgIEFTU0VSVCAoRXhwcmVzc2lvbik7IFwNCj4gDQo+ IA0KPiAgICAgIGlmICghKEV4cHJlc3Npb24pKSB7IFwNCj4gDQo+IA0KPiAgICAgICAgcmV0dXJu IFN0YXR1czsgXA0KPiANCj4gDQo+ICAgICAgfSBcDQo+IA0KPiANCj4gQEAgLTE5Nyw3ICsxOTYs NiBAQCBTdHJuU2l6ZVMgKA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIERlc3RpbmF0aW9u IGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LA0KPiB0aGVuIEFTU0VSVCgpLg0K PiANCj4gDQo+ICAgIElmIFNvdXJjZSBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFy eSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBhbiBlcnJvciB3b3VsZCBiZSBy ZXR1cm5lZCwgdGhlbiB0aGUgZnVuY3Rpb24NCj4gd2lsbCBhbHNvIEFTU0VSVCgpLg0KPiANCj4g DQo+IA0KPiANCj4gDQo+ICAgIElmIGFuIGVycm9yIGlzIHJldHVybmVkLCB0aGVuIHRoZSBEZXN0 aW5hdGlvbiBpcw0KPiB1bm1vZGlmaWVkLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IEBAIC0yNzks NyArMjc3LDYgQEAgU3RyQ3B5UyAoDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgSWYgTGVuZ3Ro ID4gMCBhbmQgRGVzdGluYXRpb24gaXMgbm90IGFsaWduZWQgb24gYQ0KPiAxNi1iaXQgYm91bmRh cnksIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gICAgSWYgTGVuZ3RoID4gMCBhbmQgU291cmNl IGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0DQo+IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLg0K PiANCj4gDQo+IC0gIElmIGFuIGVycm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVuIHRoZSBmdW5j dGlvbg0KPiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgSWYg YW4gZXJyb3IgaXMgcmV0dXJuZWQsIHRoZW4gdGhlIERlc3RpbmF0aW9uIGlzDQo+IHVubW9kaWZp ZWQuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gQEAgLTM3Miw3ICszNjksNiBAQCBTdHJuQ3B5UyAo DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgSWYgRGVzdGluYXRpb24gaXMgbm90IGFsaWduZWQg b24gYSAxNi1iaXQgYm91bmRhcnksDQo+IHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gICAgSWYg U291cmNlIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VS VCgpLg0KPiANCj4gDQo+IC0gIElmIGFuIGVycm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVuIHRo ZSBmdW5jdGlvbg0KPiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g ICAgSWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQsIHRoZW4gdGhlIERlc3RpbmF0aW9uIGlzDQo+IHVu bW9kaWZpZWQuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gQEAgLTQ3Myw3ICs0NjksNiBAQCBTdHJD YXRTICgNCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBEZXN0aW5hdGlvbiBpcyBub3QgYWxp Z25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAg ICBJZiBTb3VyY2UgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4g QVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgYW4gZXJyb3Igd291bGQgYmUgcmV0dXJuZWQsIHRo ZW4gdGhlIGZ1bmN0aW9uDQo+IHdpbGwgYWxzbyBBU1NFUlQoKS4NCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiAgICBJZiBhbiBlcnJvciBpcyByZXR1cm5lZCwgdGhlbiB0aGUgRGVzdGluYXRpb24gaXMN Cj4gdW5tb2RpZmllZC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiBAQCAtNTkwLDEyICs1ODUsNyBA QCBTdHJuQ2F0UyAoDQo+IA0KPiANCj4gICAgYmUgaWdub3JlZC4gVGhlbiwgdGhlIGZ1bmN0aW9u IHN0b3BzIGF0IHRoZSBmaXJzdA0KPiBjaGFyYWN0ZXIgdGhhdCBpcyBhIG5vdCBhDQo+IA0KPiAN Cj4gICAgdmFsaWQgZGVjaW1hbCBjaGFyYWN0ZXIgb3IgYSBOdWxsLXRlcm1pbmF0b3IsDQo+IHdo aWNoZXZlciBvbmUgY29tZXMgZmlyc3QuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAgSWYgU3Ry aW5nIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgRGF0YSBpcyBOVUxM LCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+ICAgIElmIFN0cmluZyBpcyBub3QgYWxpZ25lZCBp biBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBQ Y2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kDQo+IFN0cmluZyBj b250YWlucyBtb3JlIHRoYW4NCj4gDQo+IA0KPiAtICBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xl bmd0aCBVbmljb2RlIGNoYXJhY3RlcnMsDQo+IG5vdCBpbmNsdWRpbmcgdGhlDQo+IA0KPiANCj4g LSAgTnVsbC10ZXJtaW5hdG9yLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ ICAgIElmIFN0cmluZyBoYXMgbm8gdmFsaWQgZGVjaW1hbCBkaWdpdHMgaW4gdGhlIGFib3ZlDQo+ IGZvcm1hdCwgdGhlbiAwIGlzIHN0b3JlZA0KPiANCj4gDQo+ICAgIGF0IHRoZSBsb2NhdGlvbiBw b2ludGVkIHRvIGJ5IERhdGEuDQo+IA0KPiANCj4gQEAgLTcwNSwxMiArNjk1LDcgQEAgU3RyRGVj aW1hbFRvVWludG5TICgNCj4gDQo+IA0KPiAgICBiZSBpZ25vcmVkLiBUaGVuLCB0aGUgZnVuY3Rp b24gc3RvcHMgYXQgdGhlIGZpcnN0DQo+IGNoYXJhY3RlciB0aGF0IGlzIGEgbm90IGENCj4gDQo+ IA0KPiAgICB2YWxpZCBkZWNpbWFsIGNoYXJhY3RlciBvciBhIE51bGwtdGVybWluYXRvciwNCj4g d2hpY2hldmVyIG9uZSBjb21lcyBmaXJzdC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBT dHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBEYXRhIGlzIE5V TEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGlzIG5vdCBhbGlnbmVk IGluIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElm IFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQNCj4gU3RyaW5n IGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4gDQo+IC0gIFBjZE1heGltdW1Vbmljb2RlU3RyaW5n TGVuZ3RoIFVuaWNvZGUgY2hhcmFjdGVycywNCj4gbm90IGluY2x1ZGluZyB0aGUNCj4gDQo+IA0K PiAtICBOdWxsLXRlcm1pbmF0b3IsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gICAgSWYgU3RyaW5nIGhhcyBubyB2YWxpZCBkZWNpbWFsIGRpZ2l0cyBpbiB0aGUgYWJvdmUN Cj4gZm9ybWF0LCB0aGVuIDAgaXMgc3RvcmVkDQo+IA0KPiANCj4gICAgYXQgdGhlIGxvY2F0aW9u IHBvaW50ZWQgdG8gYnkgRGF0YS4NCj4gDQo+IA0KPiBAQCAtODI1LDEyICs4MTAsNyBAQCBTdHJE ZWNpbWFsVG9VaW50NjRTICgNCj4gDQo+IA0KPiAgICB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQg aXMgYSBub3QgYSB2YWxpZA0KPiBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIgb3IgTlVMTCwNCj4gDQo+ IA0KPiAgICB3aGljaGV2ZXIgb25lIGNvbWVzIGZpcnN0Lg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElmIERh dGEgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaXMgbm90 IGFsaWduZWQgaW4gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+IA0KPiAN Cj4gLSAgSWYgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZA0K PiBTdHJpbmcgY29udGFpbnMgbW9yZSB0aGFuDQo+IA0KPiANCj4gLSAgUGNkTWF4aW11bVVuaWNv ZGVTdHJpbmdMZW5ndGggVW5pY29kZSBjaGFyYWN0ZXJzLA0KPiBub3QgaW5jbHVkaW5nIHRoZQ0K PiANCj4gDQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaGFzIG5vIHZhbGlkIGhleGFkZWNpbWFsIGRpZ2l0cyBp biB0aGUNCj4gYWJvdmUgZm9ybWF0LCB0aGVuIDAgaXMNCj4gDQo+IA0KPiAgICBzdG9yZWQgYXQg dGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgRGF0YS4NCj4gDQo+IA0KPiBAQCAtOTU2LDEyICs5 MzYsNyBAQCBTdHJIZXhUb1VpbnRuUyAoDQo+IA0KPiANCj4gICAgdGhlIGZpcnN0IGNoYXJhY3Rl ciB0aGF0IGlzIGEgbm90IGEgdmFsaWQNCj4gaGV4YWRlY2ltYWwgY2hhcmFjdGVyIG9yIE5VTEws DQo+IA0KPiANCj4gICAgd2hpY2hldmVyIG9uZSBjb21lcyBmaXJzdC4NCj4gDQo+IA0KPiANCj4g DQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAt ICBJZiBEYXRhIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gICAgSWYgU3RyaW5n IGlzIG5vdCBhbGlnbmVkIGluIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0K PiANCj4gDQo+IC0gIElmIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJv LCBhbmQNCj4gU3RyaW5nIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4gDQo+IC0gIFBjZE1heGlt dW1Vbmljb2RlU3RyaW5nTGVuZ3RoIFVuaWNvZGUgY2hhcmFjdGVycywNCj4gbm90IGluY2x1ZGlu ZyB0aGUNCj4gDQo+IA0KPiAtICBOdWxsLXRlcm1pbmF0b3IsIHRoZW4gQVNTRVJUKCkuDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGhhcyBubyB2YWxpZCBoZXhhZGVjaW1hbCBk aWdpdHMgaW4gdGhlDQo+IGFib3ZlIGZvcm1hdCwgdGhlbiAwIGlzDQo+IA0KPiANCj4gICAgc3Rv cmVkIGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IERhdGEuDQo+IA0KPiANCj4gQEAgLTE4 NTYsOCArMTgzMSw2IEBAIEFzY2lpU3RyQ3B5UyAoDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAg VGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIGFzIHN0cm5jcHlfcyBkZWZpbmVkIGluDQo+IEMxMS4N Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBhbiBlcnJvciB3b3VsZCBiZSByZXR1cm5lZCwg dGhlbiB0aGUgZnVuY3Rpb24NCj4gd2lsbCBhbHNvIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4g DQo+IA0KPiAgICBJZiBhbiBlcnJvciBpcyByZXR1cm5lZCwgdGhlbiB0aGUgRGVzdGluYXRpb24g aXMNCj4gdW5tb2RpZmllZC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBAcGFyYW0gIERlc3Rp bmF0aW9uICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYQ0KPiBOdWxsLXRlcm1pbmF0ZWQgQXNj aWkgc3RyaW5nLg0KPiANCj4gDQo+IEBAIC0xOTQ0LDggKzE5MTcsNiBAQCBBc2NpaVN0cm5DcHlT ICgNCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgYXMg c3RyY2F0X3MgZGVmaW5lZCBpbiBDMTEuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAgSWYgYW4g ZXJyb3Igd291bGQgYmUgcmV0dXJuZWQsIHRoZW4gdGhlIGZ1bmN0aW9uDQo+IHdpbGwgYWxzbyBB U1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gICAgSWYgYW4gZXJyb3IgaXMgcmV0dXJu ZWQsIHRoZW4gdGhlIERlc3RpbmF0aW9uIGlzDQo+IHVubW9kaWZpZWQuDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gICAgQHBhcmFtICBEZXN0aW5hdGlvbiAgICAgICAgICAgICAgQSBwb2ludGVyIHRv IGENCj4gTnVsbC10ZXJtaW5hdGVkIEFzY2lpIHN0cmluZy4NCj4gDQo+IA0KPiBAQCAtMjA0MCw4 ICsyMDExLDYgQEAgQXNjaWlTdHJDYXRTICgNCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBUaGlz IGZ1bmN0aW9uIGlzIHNpbWlsYXIgYXMgc3RybmNhdF9zIGRlZmluZWQgaW4NCj4gQzExLg0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIGFuIGVycm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVu IHRoZSBmdW5jdGlvbg0KPiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4g DQo+ICAgIElmIGFuIGVycm9yIGlzIHJldHVybmVkLCB0aGVuIHRoZSBEZXN0aW5hdGlvbiBpcw0K PiB1bm1vZGlmaWVkLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIEBwYXJhbSAgRGVzdGluYXRp b24gICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhDQo+IE51bGwtdGVybWluYXRlZCBBc2NpaSBz dHJpbmcuDQo+IA0KPiANCj4gQEAgLTIxNTQsMTIgKzIxMjMsNiBAQCBBc2NpaVN0cm5DYXRTICgN Cj4gDQo+IA0KPiAgICBiZSBpZ25vcmVkLiBUaGVuLCB0aGUgZnVuY3Rpb24gc3RvcHMgYXQgdGhl IGZpcnN0DQo+IGNoYXJhY3RlciB0aGF0IGlzIGEgbm90IGENCj4gDQo+IA0KPiAgICB2YWxpZCBk ZWNpbWFsIGNoYXJhY3RlciBvciBhIE51bGwtdGVybWluYXRvciwNCj4gd2hpY2hldmVyIG9uZSBj b21lcyBmaXJzdC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVMTCwg dGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBEYXRhIGlzIE5VTEwsIHRoZW4gQVNTRVJU KCkuDQo+IA0KPiANCj4gLSAgSWYgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIGlzIG5vdCB6 ZXJvLCBhbmQNCj4gU3RyaW5nIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4gDQo+IC0gIFBjZE1h eGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBBc2NpaSBjaGFyYWN0ZXJzLCBub3QNCj4gaW5jbHVkaW5n IHRoZQ0KPiANCj4gDQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+ IA0KPiAtDQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGhhcyBubyB2YWxpZCBkZWNpbWFsIGRpZ2l0 cyBpbiB0aGUgYWJvdmUNCj4gZm9ybWF0LCB0aGVuIDAgaXMgc3RvcmVkDQo+IA0KPiANCj4gICAg YXQgdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgRGF0YS4NCj4gDQo+IA0KPiAgICBJZiB0aGUg bnVtYmVyIHJlcHJlc2VudGVkIGJ5IFN0cmluZyBleGNlZWRzIHRoZQ0KPiByYW5nZSBkZWZpbmVk IGJ5IFVJTlROLCB0aGVuDQo+IA0KPiANCj4gQEAgLTIyNjYsMTIgKzIyMjksNiBAQCBBc2NpaVN0 ckRlY2ltYWxUb1VpbnRuUyAoDQo+IA0KPiANCj4gICAgYmUgaWdub3JlZC4gVGhlbiwgdGhlIGZ1 bmN0aW9uIHN0b3BzIGF0IHRoZSBmaXJzdA0KPiBjaGFyYWN0ZXIgdGhhdCBpcyBhIG5vdCBhDQo+ IA0KPiANCj4gICAgdmFsaWQgZGVjaW1hbCBjaGFyYWN0ZXIgb3IgYSBOdWxsLXRlcm1pbmF0b3Is DQo+IHdoaWNoZXZlciBvbmUgY29tZXMgZmlyc3QuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAg SWYgU3RyaW5nIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgRGF0YSBp cyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElmIFBjZE1heGltdW1Bc2NpaVN0 cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kDQo+IFN0cmluZyBjb250YWlucyBtb3JlIHRoYW4N Cj4gDQo+IA0KPiAtICBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGggQXNjaWkgY2hhcmFjdGVy cywgbm90DQo+IGluY2x1ZGluZyB0aGUNCj4gDQo+IA0KPiAtICBOdWxsLXRlcm1pbmF0b3IsIHRo ZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+ICAgIElmIFN0cmluZyBoYXMgbm8g dmFsaWQgZGVjaW1hbCBkaWdpdHMgaW4gdGhlIGFib3ZlDQo+IGZvcm1hdCwgdGhlbiAwIGlzIHN0 b3JlZA0KPiANCj4gDQo+ICAgIGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IERhdGEuDQo+ IA0KPiANCj4gICAgSWYgdGhlIG51bWJlciByZXByZXNlbnRlZCBieSBTdHJpbmcgZXhjZWVkcyB0 aGUNCj4gcmFuZ2UgZGVmaW5lZCBieSBVSU5UNjQsIHRoZW4NCj4gDQo+IA0KPiBAQCAtMjM4Miwx MiArMjMzOSw2IEBAIEFzY2lpU3RyRGVjaW1hbFRvVWludDY0UyAoDQo+IA0KPiANCj4gICAgY2hh cmFjdGVyIHRoYXQgaXMgYSBub3QgYSB2YWxpZCBoZXhhZGVjaW1hbA0KPiBjaGFyYWN0ZXIgb3Ig TnVsbC10ZXJtaW5hdG9yLA0KPiANCj4gDQo+ICAgIHdoaWNoZXZlciBvbiBjb21lcyBmaXJzdC4N Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQo KS4NCj4gDQo+IA0KPiAtICBJZiBEYXRhIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiAN Cj4gLSAgSWYgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQNCj4g U3RyaW5nIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4gDQo+IC0gIFBjZE1heGltdW1Bc2NpaVN0 cmluZ0xlbmd0aCBBc2NpaSBjaGFyYWN0ZXJzLCBub3QNCj4gaW5jbHVkaW5nIHRoZQ0KPiANCj4g DQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0K PiANCj4gICAgSWYgU3RyaW5nIGhhcyBubyB2YWxpZCBoZXhhZGVjaW1hbCBkaWdpdHMgaW4gdGhl DQo+IGFib3ZlIGZvcm1hdCwgdGhlbiAwIGlzDQo+IA0KPiANCj4gICAgc3RvcmVkIGF0IHRoZSBs b2NhdGlvbiBwb2ludGVkIHRvIGJ5IERhdGEuDQo+IA0KPiANCj4gICAgSWYgdGhlIG51bWJlciBy ZXByZXNlbnRlZCBieSBTdHJpbmcgZXhjZWVkcyB0aGUNCj4gcmFuZ2UgZGVmaW5lZCBieSBVSU5U TiwgdGhlbg0KPiANCj4gDQo+IEBAIC0yNTA5LDEyICsyNDYwLDYgQEAgQXNjaWlTdHJIZXhUb1Vp bnRuUyAoDQo+IA0KPiANCj4gICAgY2hhcmFjdGVyIHRoYXQgaXMgYSBub3QgYSB2YWxpZCBoZXhh ZGVjaW1hbA0KPiBjaGFyYWN0ZXIgb3IgTnVsbC10ZXJtaW5hdG9yLA0KPiANCj4gDQo+ICAgIHdo aWNoZXZlciBvbiBjb21lcyBmaXJzdC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBTdHJp bmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBEYXRhIGlzIE5VTEws IHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVu Z3RoIGlzIG5vdCB6ZXJvLCBhbmQNCj4gU3RyaW5nIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4g DQo+IC0gIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBBc2NpaSBjaGFyYWN0ZXJzLCBub3QN Cj4gaW5jbHVkaW5nIHRoZQ0KPiANCj4gDQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NF UlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGhhcyBubyB2YWxpZCBo ZXhhZGVjaW1hbCBkaWdpdHMgaW4gdGhlDQo+IGFib3ZlIGZvcm1hdCwgdGhlbiAwIGlzDQo+IA0K PiANCj4gICAgc3RvcmVkIGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IERhdGEuDQo+IA0K PiANCj4gICAgSWYgdGhlIG51bWJlciByZXByZXNlbnRlZCBieSBTdHJpbmcgZXhjZWVkcyB0aGUN Cj4gcmFuZ2UgZGVmaW5lZCBieSBVSU5UNjQsIHRoZW4NCj4gDQo+IA0KPiBAQCAtMjYzNSw3ICsy NTgwLDYgQEAgQXNjaWlTdHJIZXhUb1VpbnQ2NFMgKA0KPiANCj4gDQo+ICAgIHRoZSB1cHBlciA4 IGJpdHMsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgSWYgU291cmNl IGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0K PiANCj4gDQo+IC0gIElmIGFuIGVycm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVuIHRoZSBmdW5j dGlvbg0KPiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgSWYg YW4gZXJyb3IgaXMgcmV0dXJuZWQsIHRoZW4gdGhlIERlc3RpbmF0aW9uIGlzDQo+IHVubW9kaWZp ZWQuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gQEAgLTI3MzUsNyArMjY3OSw2IEBAIFVuaWNvZGVT dHJUb0FzY2lpU3RyUyAoDQo+IA0KPiANCj4gICAgSWYgYW55IFVuaWNvZGUgY2hhcmFjdGVycyBp biBTb3VyY2UgY29udGFpbiBub24temVybw0KPiB2YWx1ZSBpbiB0aGUgdXBwZXIgOA0KPiANCj4g DQo+ICAgIGJpdHMsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gICAgSWYgU291cmNlIGlzIG5v dCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiANCj4g DQo+IC0gIElmIGFuIGVycm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVuIHRoZSBmdW5jdGlvbg0K PiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgSWYgYW4gZXJy b3IgaXMgcmV0dXJuZWQsIHRoZW4gRGVzdGluYXRpb24gYW5kDQo+IERlc3RpbmF0aW9uTGVuZ3Ro IGFyZQ0KPiANCj4gDQo+ICAgIHVubW9kaWZpZWQuDQo+IA0KPiANCj4gQEAgLTI5NDgsNyArMjg5 MSw2IEBAIEFzY2lpU3RyVG9Vbmljb2RlU3RyUyAoDQo+IA0KPiANCj4gICAgKChNSU4oQXNjaWlT dHJMZW4oU291cmNlKSwgTGVuZ3RoKSArIDEpICogc2l6ZW9mDQo+IChDSEFSOCkpIGluIGJ5dGVz Lg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIERlc3RpbmF0aW9uIGlzIG5vdCBhbGlnbmVk IG9uIGEgMTYtYml0IGJvdW5kYXJ5LA0KPiB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElm IGFuIGVycm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVuIHRoZSBmdW5jdGlvbg0KPiB3aWxsIGFs c28gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgSWYgYW4gZXJyb3IgaXMgcmV0 dXJuZWQsIHRoZW4gRGVzdGluYXRpb24gYW5kDQo+IERlc3RpbmF0aW9uTGVuZ3RoIGFyZQ0KPiAN Cj4gDQo+ICAgIHVubW9kaWZpZWQuDQo+IA0KPiANCj4gQEAgLTMwNzIsMTAgKzMwMTQsNiBAQCBB c2NpaVN0cm5Ub1VuaWNvZGVTdHJTICgNCj4gDQo+IA0KPiAgICAiOjoiIGNhbiBiZSB1c2VkIHRv IGNvbXByZXNzIG9uZSBvciBtb3JlIGdyb3VwcyBvZiBYDQo+IHdoZW4gWCBjb250YWlucyBvbmx5 IDAuDQo+IA0KPiANCj4gICAgVGhlICI6OiIgY2FuIG9ubHkgYXBwZWFyIG9uY2UgaW4gdGhlIFN0 cmluZy4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBB U1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gLSAgSWYgQWRkcmVzcyBpcyBOVUxMLCB0 aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAgICBJZiBFbmRQb2ludGVyIGlz IG5vdCBOVUxMIGFuZCBBZGRyZXNzIGlzIHRyYW5zbGF0ZWQNCj4gZnJvbSBTdHJpbmcsIGEgcG9p bnRlcg0KPiANCj4gDQo+ICAgIHRvIHRoZSBjaGFyYWN0ZXIgdGhhdCBzdG9wcGVkIHRoZSBzY2Fu IGlzIHN0b3JlZCBhdA0KPiB0aGUgbG9jYXRpb24gcG9pbnRlZCB0bw0KPiANCj4gDQo+ICAgIGJ5 IEVuZFBvaW50ZXIuDQo+IA0KPiANCj4gQEAgLTMyOTEsMTAgKzMyMjksNiBAQCBBc2NpaVN0clRv SXB2NkFkZHJlc3MgKA0KPiANCj4gDQo+ICAgIFdoZW4gL1AgaXMgaW4gdGhlIFN0cmluZywgdGhl IGZ1bmN0aW9uIHN0b3BzIGF0IHRoZQ0KPiBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QNCj4g DQo+IA0KPiAgICBhIHZhbGlkIGRlY2ltYWwgZGlnaXQgY2hhcmFjdGVyIGFmdGVyIFAgaXMNCj4g Y29udmVydGVkLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0 aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAtICBJZiBBZGRyZXNzIGlzIE5V TEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+ICAgIElmIEVuZFBvaW50 ZXIgaXMgbm90IE5VTEwgYW5kIEFkZHJlc3MgaXMgdHJhbnNsYXRlZA0KPiBmcm9tIFN0cmluZywg YSBwb2ludGVyDQo+IA0KPiANCj4gICAgdG8gdGhlIGNoYXJhY3RlciB0aGF0IHN0b3BwZWQgdGhl IHNjYW4gaXMgc3RvcmVkIGF0DQo+IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvDQo+IA0KPiANCj4g ICAgYnkgRW5kUG9pbnRlci4NCj4gDQo+IA0KPiBAQCAtMzQ0OCw5ICszMzgyLDYgQEAgQXNjaWlT dHJUb0lwdjRBZGRyZXNzICgNCj4gDQo+IA0KPiAgICAgICAgICAgICAgICAgICAgb28gICAgICAg ICAgRGF0YTRbNDg6NTVdDQo+IA0KPiANCj4gICAgICAgICAgICAgICAgICAgIHBwICAgICAgICAg IERhdGE0WzU2OjYzXQ0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmluZyBpcyBOVUxM LCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElmIEd1aWQgaXMgTlVMTCwgdGhlbiBBU1NF UlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gICAgQHBhcmFtICBTdHJpbmcgICAgICAgICAg ICAgICAgICAgUG9pbnRlciB0byBhIE51bGwtDQo+IHRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nLg0K PiANCj4gDQo+ICAgIEBwYXJhbSAgR3VpZCAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8g dGhlDQo+IGNvbnZlcnRlZCBHVUlELg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IEBAIC0zNTUwLDE3 ICszNDgxLDYgQEAgQXNjaWlTdHJUb0d1aWQgKA0KPiANCj4gDQo+ICAgIGRlY29kaW5nIHN0b3Bz IGFmdGVyIExlbmd0aCBvZiBjaGFyYWN0ZXJzIGFuZA0KPiBvdXRwdXRzIEJ1ZmZlciBjb250YWlu aW5nDQo+IA0KPiANCj4gICAgKExlbmd0aCAvIDIpIGJ5dGVzLg0KPiANCj4gDQo+IA0KPiANCj4g DQo+IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4g DQo+IA0KPiAtICBJZiBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAt DQo+IA0KPiANCj4gLSAgSWYgTGVuZ3RoIGlzIG5vdCBtdWx0aXBsZSBvZiAyLCB0aGVuIEFTU0VS VCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAtICBJZiBQY2RNYXhpbXVtQXNjaWlTdHJpbmdM ZW5ndGggaXMgbm90IHplcm8gYW5kDQo+IExlbmd0aCBpcyBncmVhdGVyIHRoYW4NCj4gDQo+IA0K PiAtICBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGgsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiAN Cj4gLQ0KPiANCj4gDQo+IC0gIElmIE1heEJ1ZmZlclNpemUgaXMgbGVzcyB0aGFuIChMZW5ndGgg LyAyKSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gICAgQHBhcmFt ICBTdHJpbmcgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBhIE51bGwtDQo+IHRlcm1pbmF0 ZWQgQVNDSUkgc3RyaW5nLg0KPiANCj4gDQo+ICAgIEBwYXJhbSAgTGVuZ3RoICAgICAgICAgICAg ICAgICAgIFRoZSBudW1iZXIgb2YgQVNDSUkNCj4gY2hhcmFjdGVycyB0byBkZWNvZGUuDQo+IA0K PiANCj4gICAgQHBhcmFtICBCdWZmZXIgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUN Cj4gY29udmVydGVkIGJ5dGVzIGFycmF5Lg0KPiANCj4gDQo+IC0tDQo+IA0KPiANCj4gMi4yNC4y IChBcHBsZSBHaXQtMTI3KQ0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCg0K