From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.136; helo=mga12.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) (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 9ADF921127CD3 for ; Mon, 17 Sep 2018 00:13:39 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Sep 2018 00:13:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,384,1531810800"; d="scan'208";a="74874825" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga006.jf.intel.com with ESMTP; 17 Sep 2018 00:13:38 -0700 Received: from FMSMSX110.amr.corp.intel.com (10.18.116.10) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 17 Sep 2018 00:13:37 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx110.amr.corp.intel.com (10.18.116.10) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 17 Sep 2018 00:13:37 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.226]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.205]) with mapi id 14.03.0319.002; Mon, 17 Sep 2018 15:13:35 +0800 From: "Zeng, Star" To: "Ni, Ruiyu" , "edk2-devel@lists.01.org" CC: "Kinney, Michael D" , Younas khan , "Yao, Jiewen" , "Gao, Liming" , "Zeng, Star" Thread-Topic: [edk2] [PATCH V2 1/6] MdePkg UefiLib: Add new EfiLocateXXXAcpiTable() APIs Thread-Index: AQHUS0xjLpKzBHGe60Oeln1YcglDSqTurXMAgAVnGMA= Date: Mon, 17 Sep 2018 07:13:34 +0000 Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103BBBA816@shsmsx102.ccr.corp.intel.com> References: <1536834420-16620-1-git-send-email-star.zeng@intel.com> <1536834420-16620-2-git-send-email-star.zeng@intel.com> <2bfceb92-7940-426c-2615-21d54c9794c5@Intel.com> In-Reply-To: <2bfceb92-7940-426c-2615-21d54c9794c5@Intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH V2 1/6] MdePkg UefiLib: Add new EfiLocateXXXAcpiTable() APIs 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: Mon, 17 Sep 2018 07:13:39 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 UmF5LA0KDQpUaGFua3MgZm9yIHRoZSBnb29kIGZlZWRiYWNrcy4NCkkgY2FuIHJlbW92ZSB0aGUg QVNTRVJUIGFuZCB1cGRhdGUgdGhlIGRlc2NyaXB0aW9uIGluIHRoZSBmdW5jdGlvbiBoZWFkZXIu DQpJIGNhbiBhbHNvIG1lcmdlIFNjYW5UYWJsZUluUlNEVCBhbmQgU2NhblRhYmxlSW5YU0RULg0K DQpUaGFua3MsDQpTdGFyDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogTmksIFJ1 aXl1IA0KU2VudDogRnJpZGF5LCBTZXB0ZW1iZXIgMTQsIDIwMTggMTI6NDEgUE0NClRvOiBaZW5n LCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCkNj OiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBZb3VuYXMg a2hhbiA8cG1keW91bmFza2hhbjc4NkBnbWFpbC5jb20+OyBZYW8sIEppZXdlbiA8amlld2VuLnlh b0BpbnRlbC5jb20+OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+DQpTdWJqZWN0 OiBSZTogW2VkazJdIFtQQVRDSCBWMiAxLzZdIE1kZVBrZyBVZWZpTGliOiBBZGQgbmV3IEVmaUxv Y2F0ZVhYWEFjcGlUYWJsZSgpIEFQSXMNCg0KU3RhciwNCkkgaGF2ZSB0d28gY29tbWVudHMuIHNl ZSBiZWxvdy4NCk9uIDkvMTMvMjAxOCA2OjI2IFBNLCBTdGFyIFplbmcgd3JvdGU6DQo+IGh0dHBz Oi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY3DQo+IFJlcXVlc3Qg dG8gYWRkIGEgbGlicmFyeSBmdW5jdGlvbiBmb3IgR2V0QWNwaVRhYmxlKCkgaW4gb3JkZXIgdG8g Z2V0IA0KPiBBQ1BJIHRhYmxlIHVzaW5nIHNpZ25hdHVyZSBhcyBpbnB1dC4NCj4gDQo+IEFmdGVy IGV2YWx1YXRpb24sIHdlIGZvdW5kIHRoZXJlIGFyZSBtYW55IGR1cGxpY2F0ZWQgY29kZSB0byBm aW5kIEFDUEkgDQo+IHRhYmxlIGJ5IHNpZ25hdHVyZSBpbiBkaWZmZXJlbnQgbW9kdWxlcy4NCj4g DQo+IFRoaXMgcGF0Y2ggYWRkcyBuZXcgRWZpTG9jYXRlWFhYQWNwaVRhYmxlKCkgQVBJcyBpbiBV ZWZpTGliIGZvciB0aGUgDQo+IHJlcXVlc3QgYW5kIGFsc28gdGhlIGZvbGxvd2luZyBwYXRjaCB0 byByZW1vdmUgdGhlIGR1cGxpY2F0ZWQgY29kZS4NCj4gDQo+IENjOiBZb3VuYXMga2hhbiA8cG1k eW91bmFza2hhbjc4NkBnbWFpbC5jb20+DQo+IENjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVs LmQua2lubmV5QGludGVsLmNvbT4NCj4gQ2M6IExpbWluZyBHYW8gPGxpbWluZy5nYW9AaW50ZWwu Y29tPg0KPiBDYzogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+IENvbnRyaWJ1 dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjENCj4gU2lnbmVk LW9mZi1ieTogU3RhciBaZW5nIDxzdGFyLnplbmdAaW50ZWwuY29tPg0KPiAtLS0NCj4gICBNZGVQ a2cvSW5jbHVkZS9MaWJyYXJ5L1VlZmlMaWIuaCAgIHwgIDY4ICsrKysrKw0KPiAgIE1kZVBrZy9M aWJyYXJ5L1VlZmlMaWIvQWNwaS5jICAgICAgfCA0ODggKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKw0KPiAgIE1kZVBrZy9MaWJyYXJ5L1VlZmlMaWIvVWVmaUxpYi5pbmYgfCAg IDMgKw0KPiAgIDMgZmlsZXMgY2hhbmdlZCwgNTU5IGluc2VydGlvbnMoKykNCj4gICBjcmVhdGUg bW9kZSAxMDA2NDQgTWRlUGtnL0xpYnJhcnkvVWVmaUxpYi9BY3BpLmMNCj4gDQo+IGRpZmYgLS1n aXQgYS9NZGVQa2cvSW5jbHVkZS9MaWJyYXJ5L1VlZmlMaWIuaCANCj4gYi9NZGVQa2cvSW5jbHVk ZS9MaWJyYXJ5L1VlZmlMaWIuaA0KPiBpbmRleCBmODAwNjdmMTExMDMuLmNmODJmZjRhOTIwYSAx MDA2NDQNCj4gLS0tIGEvTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9VZWZpTGliLmgNCj4gKysrIGIv TWRlUGtnL0luY2x1ZGUvTGlicmFyeS9VZWZpTGliLmgNCj4gQEAgLTI2LDYgKzI2LDggQEAgV0lU SE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVY UFJFU1MgT1IgSU1QTElFRC4NCj4gICAjaWZuZGVmIF9fVUVGSV9MSUJfSF9fDQo+ICAgI2RlZmlu ZSBfX1VFRklfTElCX0hfXw0KPiAgIA0KPiArI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvQWNw aS5oPg0KPiArDQo+ICAgI2luY2x1ZGUgPFByb3RvY29sL0RyaXZlckJpbmRpbmcuaD4NCj4gICAj aW5jbHVkZSA8UHJvdG9jb2wvRHJpdmVyQ29uZmlndXJhdGlvbi5oPg0KPiAgICNpbmNsdWRlIDxQ cm90b2NvbC9Db21wb25lbnROYW1lLmg+DQo+IEBAIC0xNTk1LDQgKzE1OTcsNzAgQEAgRWZpT3Bl bkZpbGVCeURldmljZVBhdGggKA0KPiAgICAgSU4gICAgIFVJTlQ2NCAgICAgICAgICAgICAgICAg ICAgT3Blbk1vZGUsDQo+ICAgICBJTiAgICAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBdHRy aWJ1dGVzDQo+ICAgICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBsb2NhdGVz IG5leHQgQUNQSSB0YWJsZSBpbiBYU0RUL1JTRFQgYmFzZWQgb24gDQo+ICtTaWduYXR1cmUgYW5k DQo+ICsgIHByZXZpb3VzIHJldHVybmVkIFRhYmxlLg0KPiArDQo+ICsgIElmIFByZXZpb3VzVGFi bGUgaXMgTlVMTDoNCj4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIGxvY2F0ZSB0aGUgZmlyc3QgQUNQ SSB0YWJsZSBpbiBYU0RUL1JTRFQgYmFzZWQgDQo+ICsgb24gIFNpZ25hdHVyZSBpbiBnRWZpQWNw aTIwVGFibGVHdWlkIHN5c3RlbSBjb25maWd1cmF0aW9uIHRhYmxlIA0KPiArIGZpcnN0LCBhbmQg dGhlbiAgZ0VmaUFjcGkxMFRhYmxlR3VpZCBzeXN0ZW0gY29uZmlndXJhdGlvbiB0YWJsZS4NCj4g KyAgVGhpcyBmdW5jdGlvbiB3aWxsIGxvY2F0ZSBpbiBYU0RUIGZpcnN0LCBhbmQgdGhlbiBSU0RU Lg0KPiArICBGb3IgRFNEVCwgdGhpcyBmdW5jdGlvbiB3aWxsIGxvY2F0ZSBYRHNkdCBpbiBGQURU IGZpcnN0LCBhbmQgdGhlbiANCj4gKyBEc2R0IGluICBGQURULg0KPiArICBGb3IgRkFDUywgdGhp cyBmdW5jdGlvbiB3aWxsIGxvY2F0ZSBYRmlybXdhcmVDdHJsIGluIEZBRFQgZmlyc3QsIA0KPiAr IGFuZCB0aGVuICBGaXJtd2FyZUN0cmwgaW4gRkFEVC4NCj4gKw0KPiArICBJZiBQcmV2aW91c1Rh YmxlIGlzIG5vdCBOVUxMOg0KPiArICAxLiBJZiBpdCBjb3VsZCBiZSBsb2NhdGVkIGluIFhTRFQg aW4gZ0VmaUFjcGkyMFRhYmxlR3VpZCBzeXN0ZW0gY29uZmlndXJhdGlvbg0KPiArICAgICB0YWJs ZSwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwganVzdCBsb2NhdGUgbmV4dCB0YWJsZSBpbiBYU0RU IGluDQo+ICsgICAgIGdFZmlBY3BpMjBUYWJsZUd1aWQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdGFi bGUuDQo+ICsgIDIuIElmIGl0IGNvdWxkIGJlIGxvY2F0ZWQgaW4gUlNEVCBpbiBnRWZpQWNwaTIw VGFibGVHdWlkIHN5c3RlbSBjb25maWd1cmF0aW9uDQo+ICsgICAgIHRhYmxlLCB0aGVuIHRoaXMg ZnVuY3Rpb24gd2lsbCBqdXN0IGxvY2F0ZSBuZXh0IHRhYmxlIGluIFJTRFQgaW4NCj4gKyAgICAg Z0VmaUFjcGkyMFRhYmxlR3VpZCBzeXN0ZW0gY29uZmlndXJhdGlvbiB0YWJsZS4NCj4gKyAgMy4g SWYgaXQgY291bGQgYmUgbG9jYXRlZCBpbiBSU0RUIGluIGdFZmlBY3BpMTBUYWJsZUd1aWQgc3lz dGVtIGNvbmZpZ3VyYXRpb24NCj4gKyAgICAgdGFibGUsIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxs IGp1c3QgbG9jYXRlIG5leHQgdGFibGUgaW4gUlNEVCBpbg0KPiArICAgICBnRWZpQWNwaTEwVGFi bGVHdWlkIHN5c3RlbSBjb25maWd1cmF0aW9uIHRhYmxlLg0KPiArDQoNCjEuIEkgZG9uJ3Qgc2Vl IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY2FzZSB3aGVuIFByZXZpb3VzVGFibGUgaXMgTlVMTCBv ciBub3QuIFdlIGRvbid0IG5lZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgdHdvIGNhc2Vz IGluIGFib3ZlIGNvbW1lbnRzLg0KDQoNCj4gKyAgSWYgUHJldmlvdXNUYWJsZSBpcyBub3QgTlVM TCBhbmQgUHJldmlvdXNUYWJsZS0+U2lnbmF0dXJlIGlzIG5vdCBzYW1lIHdpdGgNCj4gKyAgU2ln bmF0dXJlLCB0aGVuIEFTU0VSVC4NCkknZCBzdWdnZXN0IHRvIHJldHVybiBJbnZhbGlkIFBhcmFt ZXRlciBpbnN0ZWFkIG9mIGFzc2VydGlvbi4NCg0KPiArDQo+ICsgIEBwYXJhbSBTaWduYXR1cmUg ICAgICAgICAgQUNQSSB0YWJsZSBzaWduYXR1cmUuDQo+ICsgIEBwYXJhbSBQcmV2aW91c1RhYmxl ICAgICAgUG9pbnRlciB0byBwcmV2aW91cyByZXR1cm5lZCB0YWJsZSB0byBsb2NhdGUgbmV4dA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLCBvciBOVUxMIHRvIGxvY2F0ZSBm aXJzdCB0YWJsZS4NCj4gKw0KPiArICBAcmV0dXJuIE5leHQgQUNQSSB0YWJsZSBvciBOVUxMIGlm IG5vdCBmb3VuZC4NCj4gKw0KPiArKiovDQo+ICtFRklfQUNQSV9DT01NT05fSEVBREVSICoNCj4g K0VGSUFQSQ0KPiArRWZpTG9jYXRlTmV4dEFjcGlUYWJsZSAoDQo+ICsgIElOIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgIFNpZ25hdHVyZSwNCj4gKyAgSU4gRUZJX0FDUElfQ09NTU9OX0hFQURF UiAgICAgKlByZXZpb3VzVGFibGUgT1BUSU9OQUwNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsg IFRoaXMgZnVuY3Rpb24gbG9jYXRlcyBmaXJzdCBBQ1BJIHRhYmxlIGluIFhTRFQvUlNEVCBiYXNl ZCBvbiBTaWduYXR1cmUuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIGxvY2F0ZSB0aGUg Zmlyc3QgQUNQSSB0YWJsZSBpbiBYU0RUL1JTRFQgYmFzZWQgb24NCj4gKyAgU2lnbmF0dXJlIGlu IGdFZmlBY3BpMjBUYWJsZUd1aWQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdGFibGUgZmlyc3QsIGFu ZCB0aGVuDQo+ICsgIGdFZmlBY3BpMTBUYWJsZUd1aWQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdGFi bGUuDQo+ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2NhdGUgaW4gWFNEVCBmaXJzdCwgYW5kIHRo ZW4gUlNEVC4NCj4gKyAgRm9yIERTRFQsIHRoaXMgZnVuY3Rpb24gd2lsbCBsb2NhdGUgWERzZHQg aW4gRkFEVCBmaXJzdCwgYW5kIHRoZW4gRHNkdCBpbg0KPiArICBGQURULg0KPiArICBGb3IgRkFD UywgdGhpcyBmdW5jdGlvbiB3aWxsIGxvY2F0ZSBYRmlybXdhcmVDdHJsIGluIEZBRFQgZmlyc3Qs IGFuZCB0aGVuDQo+ICsgIEZpcm13YXJlQ3RybCBpbiBGQURULg0KPiArDQo+ICsgIEBwYXJhbSBT aWduYXR1cmUgICAgICAgICAgQUNQSSB0YWJsZSBzaWduYXR1cmUuDQo+ICsNCj4gKyAgQHJldHVy biBGaXJzdCBBQ1BJIHRhYmxlIG9yIE5VTEwgaWYgbm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4g K0VGSV9BQ1BJX0NPTU1PTl9IRUFERVIgKg0KPiArRUZJQVBJDQo+ICtFZmlMb2NhdGVGaXJzdEFj cGlUYWJsZSAoDQo+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZQ0K PiArICApOw0KPiArDQo+ICAgI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9NZGVQa2cvTGlicmFyeS9V ZWZpTGliL0FjcGkuYyBiL01kZVBrZy9MaWJyYXJ5L1VlZmlMaWIvQWNwaS5jDQo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMDc5M2JiZGM3ODdmDQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvTWRlUGtnL0xpYnJhcnkvVWVmaUxpYi9BY3BpLmMNCj4gQEAgLTAs MCArMSw0ODggQEANCj4gKy8qKiBAZmlsZQ0KPiArICBUaGlzIG1vZHVsZSBwcm92aWRlcyBoZWxw IGZ1bmN0aW9uIGZvciBmaW5kaW5nIEFDUEkgdGFibGUuDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChj KSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsg IFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gKyAgYXJlIGxp Y2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIEJTRCBMaWNlbnNlDQo+ICsgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0 aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4gKyAg aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4NCj4gKw0KPiAr ICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4g IkFTIElTIiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9O UyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ ICsNCj4gKyNpbmNsdWRlICJVZWZpTGliSW50ZXJuYWwuaCINCj4gKyNpbmNsdWRlIDxJbmR1c3Ry eVN0YW5kYXJkL0FjcGkuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0FjcGkuaD4NCj4gKw0KPiArLyoq DQo+ICsgIFRoaXMgZnVuY3Rpb24gc2NhbnMgQUNQSSB0YWJsZSBpbiBSU0RULg0KPiArDQo+ICsg IEBwYXJhbSBSc2R0ICAgICAgICAgICAgICAgICAgIEFDUEkgUlNEVC4NCj4gKyAgQHBhcmFtIFNp Z25hdHVyZSAgICAgICAgICAgICAgQUNQSSB0YWJsZSBzaWduYXR1cmUuDQo+ICsgIEBwYXJhbSBQ cmV2aW91c1RhYmxlICAgICAgICAgIFBvaW50ZXIgdG8gcHJldmlvdXMgcmV0dXJuZWQgdGFibGUg dG8gbG9jYXRlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgdGFibGUs IG9yIE5VTEwgdG8gbG9jYXRlIGZpcnN0IHRhYmxlLg0KPiArICBAcGFyYW0gUHJldmlvdXNUYWJs ZUxvY2F0ZWQgICBQb2ludGVyIHRvIHRoZSBpbmRpY2F0b3IgYWJvdXQgd2hldGhlciB0aGUNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgcmV0dXJuZWQgdGFibGUg Y291bGQgYmUgbG9jYXRlZCwgb3INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCBpZiBQcmV2aW91c1RhYmxlIGlzIE5VTEwuDQo+ICsNCj4gKyAgSWYgUHJldmlvdXNUYWJs ZSBpcyBOVUxMIGFuZCBQcmV2aW91c1RhYmxlTG9jYXRlZCBpcyBub3QgTlVMTCwgdGhlbiBBU1NF UlQoKS4NCj4gKyAgSWYgUHJldmlvdXNUYWJsZSBpcyBub3QgTlVMTCBhbmQgUHJldmlvdXNUYWJs ZUxvY2F0ZWQgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gKw0KPiArICBAcmV0dXJuIEFDUEkg dGFibGUgb3IgTlVMTCBpZiBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX0FDUElfQ09N TU9OX0hFQURFUiAqDQo+ICtTY2FuVGFibGVJblJTRFQgKA0KPiArICBJTiAgRUZJX0FDUElfREVT Q1JJUFRJT05fSEVBREVSICAgKlJzZHQsDQo+ICsgIElOICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgICBTaWduYXR1cmUsDQo+ICsgIElOICBFRklfQUNQSV9DT01NT05fSEVBREVSICAgICAg ICAqUHJldmlvdXNUYWJsZSwgT1BUSU9OQUwNCj4gKyAgT1VUIEJPT0xFQU4gICAgICAgICAgICAg ICAgICAgICAgICpQcmV2aW91c1RhYmxlTG9jYXRlZCBPUFRJT05BTA0KPiArICApDQo+ICt7DQo+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5Q291bnQ7DQo+ICsgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqRW50cnlQdHI7DQo+ICsgIEVGSV9BQ1BJX0NPTU1PTl9I RUFERVIgICAgICAgICAgICAqVGFibGU7DQo+ICsNCj4gKyAgaWYgKFByZXZpb3VzVGFibGVMb2Nh dGVkICE9IE5VTEwpIHsNCj4gKyAgICBBU1NFUlQgKFByZXZpb3VzVGFibGUgIT0gTlVMTCk7DQo+ ICsgICAgKlByZXZpb3VzVGFibGVMb2NhdGVkID0gRkFMU0U7DQo+ICsgIH0gZWxzZSB7DQo+ICsg ICAgQVNTRVJUIChQcmV2aW91c1RhYmxlID09IE5VTEwpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYg KFJzZHQgPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBOVUxMOw0KPiArICB9DQo+ICsNCj4gKyAg RW50cnlDb3VudCA9IChSc2R0LT5MZW5ndGggLSBzaXplb2YgKEVGSV9BQ1BJX0RFU0NSSVBUSU9O X0hFQURFUikpIC8gc2l6ZW9mKFVJTlQzMik7DQo+ICsNCj4gKyAgRW50cnlQdHIgPSAoVUlOVDMy ICopKFJzZHQgKyAxKTsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgRW50cnlDb3VudDsg SW5kZXggKyssIEVudHJ5UHRyICsrKSB7DQo+ICsgICAgVGFibGUgPSAoRUZJX0FDUElfQ09NTU9O X0hFQURFUiAqKSgoVUlOVE4pKCpFbnRyeVB0cikpOw0KPiArICAgIGlmIChUYWJsZS0+U2lnbmF0 dXJlID09IFNpZ25hdHVyZSkgew0KPiArICAgICAgaWYgKFByZXZpb3VzVGFibGUgIT0gTlVMTCkg ew0KPiArICAgICAgICBpZiAoVGFibGUgPT0gUHJldmlvdXNUYWJsZSkgew0KPiArICAgICAgICAg ICpQcmV2aW91c1RhYmxlTG9jYXRlZCA9IFRSVUU7DQo+ICsgICAgICAgIH0gZWxzZSBpZiAoKlBy ZXZpb3VzVGFibGVMb2NhdGVkKSB7DQo+ICsgICAgICAgICAgLy8NCj4gKyAgICAgICAgICAvLyBS ZXR1cm4gbmV4dCB0YWJsZS4NCj4gKyAgICAgICAgICAvLw0KPiArICAgICAgICAgIHJldHVybiBU YWJsZTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgLy8NCj4g KyAgICAgICAgLy8gUmV0dXJuIGZpcnN0IHRhYmxlLg0KPiArICAgICAgICAvLw0KPiArICAgICAg ICByZXR1cm4gVGFibGU7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAg cmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIHNjYW5z IEFDUEkgdGFibGUgaW4gWFNEVC4NCj4gKw0KPiArICBAcGFyYW0gWHNkdCAgICAgICAgICAgICAg ICAgICBBQ1BJIFhTRFQuDQo+ICsgIEBwYXJhbSBTaWduYXR1cmUgICAgICAgICAgICAgIEFDUEkg dGFibGUgc2lnbmF0dXJlLg0KPiArICBAcGFyYW0gUHJldmlvdXNUYWJsZSAgICAgICAgICBQb2lu dGVyIHRvIHByZXZpb3VzIHJldHVybmVkIHRhYmxlIHRvIGxvY2F0ZQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuZXh0IHRhYmxlLCBvciBOVUxMIHRvIGxvY2F0ZSBmaXJzdCB0 YWJsZS4NCj4gKyAgQHBhcmFtIFByZXZpb3VzVGFibGVMb2NhdGVkICAgUG9pbnRlciB0byB0aGUg aW5kaWNhdG9yIGFib3V0IHdoZXRoZXIgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHByZXZpb3VzIHJldHVybmVkIHRhYmxlIGNvdWxkIGJlIGxvY2F0ZWQsIG9yDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgaWYgUHJldmlvdXNUYWJsZSBpcyBO VUxMLg0KPiArDQo+ICsgIElmIFByZXZpb3VzVGFibGUgaXMgTlVMTCBhbmQgUHJldmlvdXNUYWJs ZUxvY2F0ZWQgaXMgbm90IE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIFByZXZpb3VzVGFi bGUgaXMgbm90IE5VTEwgYW5kIFByZXZpb3VzVGFibGVMb2NhdGVkIGlzIE5VTEwsIHRoZW4gQVNT RVJUKCkuDQo+ICsNCj4gKyAgQHJldHVybiBBQ1BJIHRhYmxlIG9yIE5VTEwgaWYgbm90IGZvdW5k Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9BQ1BJX0NPTU1PTl9IRUFERVIgKg0KPiArU2NhblRhYmxl SW5YU0RUICgNCj4gKyAgSU4gIEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAgICpYc2R0LA0K PiArICBJTiAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlLA0KPiArICBJ TiAgRUZJX0FDUElfQ09NTU9OX0hFQURFUiAgICAgICAgKlByZXZpb3VzVGFibGUsIE9QVElPTkFM DQo+ICsgIE9VVCBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAqUHJldmlvdXNUYWJsZUxv Y2F0ZWQgT1BUSU9OQUwNCj4gKyAgKQ0KDQoyLiBDYW4gd2UgbWVyZ2UgU2NhblRhYmxlSW5SU0RU IGFuZCBTY2FuVGFibGVJblhTRFQ/DQoNCj4gK3sNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEluZGV4Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRW50cnlDb3VudDsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVu dHJ5UHRyOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZVB0cjsN Cj4gKyAgRUZJX0FDUElfQ09NTU9OX0hFQURFUiAgICAgICAgICAgICpUYWJsZTsNCj4gKw0KPiAr ICBpZiAoUHJldmlvdXNUYWJsZUxvY2F0ZWQgIT0gTlVMTCkgew0KPiArICAgIEFTU0VSVCAoUHJl dmlvdXNUYWJsZSAhPSBOVUxMKTsNCj4gKyAgICAqUHJldmlvdXNUYWJsZUxvY2F0ZWQgPSBGQUxT RTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBBU1NFUlQgKFByZXZpb3VzVGFibGUgPT0gTlVMTCk7 DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoWHNkdCA9PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIE5V TEw7DQo+ICsgIH0NCj4gKw0KPiArICBFbnRyeUNvdW50ID0gKFhzZHQtPkxlbmd0aCAtIHNpemVv ZiAoRUZJX0FDUElfREVTQ1JJUFRJT05fSEVBREVSKSkgLyBzaXplb2YoVUlOVDY0KTsNCj4gKw0K PiArICBCYXNlUHRyID0gKFVJTlROKShYc2R0ICsgMSk7DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJ bmRleCA8IEVudHJ5Q291bnQ7IEluZGV4ICsrKSB7DQo+ICsgICAgQ29weU1lbSAoJkVudHJ5UHRy LCAoVk9JRCAqKShCYXNlUHRyICsgSW5kZXggKiBzaXplb2YoVUlOVDY0KSksIHNpemVvZihVSU5U NjQpKTsNCj4gKyAgICBUYWJsZSA9IChFRklfQUNQSV9DT01NT05fSEVBREVSICopKChVSU5UTiko RW50cnlQdHIpKTsNCj4gKyAgICBpZiAoVGFibGUtPlNpZ25hdHVyZSA9PSBTaWduYXR1cmUpIHsN Cj4gKyAgICAgIGlmIChQcmV2aW91c1RhYmxlICE9IE5VTEwpIHsNCj4gKyAgICAgICAgaWYgKFRh YmxlID09IFByZXZpb3VzVGFibGUpIHsNCj4gKyAgICAgICAgICAqUHJldmlvdXNUYWJsZUxvY2F0 ZWQgPSBUUlVFOw0KPiArICAgICAgICB9IGVsc2UgaWYgKCpQcmV2aW91c1RhYmxlTG9jYXRlZCkg ew0KPiArICAgICAgICAgIC8vDQo+ICsgICAgICAgICAgLy8gUmV0dXJuIG5leHQgdGFibGUuDQo+ ICsgICAgICAgICAgLy8NCj4gKyAgICAgICAgICByZXR1cm4gVGFibGU7DQo+ICsgICAgICAgIH0N Cj4gKyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIC8vDQo+ICsgICAgICAgIC8vIFJldHVybiBm aXJzdCB0YWJsZS4NCj4gKyAgICAgICAgLy8NCj4gKyAgICAgICAgcmV0dXJuIFRhYmxlOw0KPiAr ICAgICAgfQ0KPiArDQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIE5VTEw7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUbyBsb2NhdGUgRkFDUyBpbiBGQURULg0KPiArDQo+ICsg IEBwYXJhbSBGYWR0ICAgRkFEVCB0YWJsZSBwb2ludGVyLg0KPiArDQo+ICsgIEByZXR1cm4gRkFD UyB0YWJsZSBwb2ludGVyIG9yIE5VTEwgaWYgbm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0VG SV9BQ1BJX0NPTU1PTl9IRUFERVIgKg0KPiArTG9jYXRlQWNwaUZhY3NGcm9tRmFkdCAoDQo+ICsg IElOIEVGSV9BQ1BJXzJfMF9GSVhFRF9BQ1BJX0RFU0NSSVBUSU9OX1RBQkxFICAqRmFkdA0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9BQ1BJX0NPTU1PTl9IRUFERVIgICAgICAgICAgICAgICAgICAg ICAgICAqRmFjczsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERhdGE2NDsNCj4gKw0KPiArICBpZiAoRmFkdCA9PSBOVUxMKSB7DQo+ICsgICAgcmV0 dXJuIE5VTEw7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoRmFkdC0+SGVhZGVyLlJldmlzaW9uIDwg RUZJX0FDUElfMl8wX0ZJWEVEX0FDUElfREVTQ1JJUFRJT05fVEFCTEVfUkVWSVNJT04pIHsNCj4g KyAgICBGYWNzID0gKEVGSV9BQ1BJX0NPTU1PTl9IRUFERVIgKikoVUlOVE4pRmFkdC0+RmlybXdh cmVDdHJsOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENvcHlNZW0gKCZEYXRhNjQsICZGYWR0LT5Y RmlybXdhcmVDdHJsLCBzaXplb2YoVUlOVDY0KSk7DQo+ICsgICAgaWYgKERhdGE2NCAhPSAwKSB7 DQo+ICsgICAgICBGYWNzID0gKEVGSV9BQ1BJX0NPTU1PTl9IRUFERVIgKikoVUlOVE4pRGF0YTY0 Ow0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBGYWNzID0gKEVGSV9BQ1BJX0NPTU1PTl9IRUFE RVIgKikoVUlOVE4pRmFkdC0+RmlybXdhcmVDdHJsOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArICBy ZXR1cm4gRmFjczsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRvIGxvY2F0ZSBEU0RUIGluIEZB RFQuDQo+ICsNCj4gKyAgQHBhcmFtIEZhZHQgICBGQURUIHRhYmxlIHBvaW50ZXIuDQo+ICsNCj4g KyAgQHJldHVybiBEU0RUIHRhYmxlIHBvaW50ZXIgb3IgTlVMTCBpZiBub3QgZm91bmQuDQo+ICsN Cj4gKyoqLw0KPiArRUZJX0FDUElfQ09NTU9OX0hFQURFUiAqDQo+ICtMb2NhdGVBY3BpRHNkdEZy b21GYWR0ICgNCj4gKyAgSU4gRUZJX0FDUElfMl8wX0ZJWEVEX0FDUElfREVTQ1JJUFRJT05fVEFC TEUgICpGYWR0DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX0FDUElfQ09NTU9OX0hFQURFUiAgICAg ICAgICAgICAgICAgICAgICAgICpEc2R0Ow0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRGF0YTY0Ow0KPiArDQo+ICsgIGlmIChGYWR0ID09IE5VTEwp IHsNCj4gKyAgICByZXR1cm4gTlVMTDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChGYWR0LT5IZWFk ZXIuUmV2aXNpb24gPCBFRklfQUNQSV8yXzBfRklYRURfQUNQSV9ERVNDUklQVElPTl9UQUJMRV9S RVZJU0lPTikgew0KPiArICAgIERzZHQgPSAoRUZJX0FDUElfQ09NTU9OX0hFQURFUiAqKShVSU5U TilGYWR0LT5Ec2R0Ow0KPiArICB9IGVsc2Ugew0KPiArICAgIENvcHlNZW0gKCZEYXRhNjQsICZG YWR0LT5YRHNkdCwgc2l6ZW9mKFVJTlQ2NCkpOw0KPiArICAgIGlmIChEYXRhNjQgIT0gMCkgew0K PiArICAgICAgRHNkdCA9IChFRklfQUNQSV9DT01NT05fSEVBREVSICopKFVJTlROKURhdGE2NDsN Cj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgRHNkdCA9IChFRklfQUNQSV9DT01NT05fSEVBREVS ICopKFVJTlROKUZhZHQtPkRzZHQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsgIHJldHVybiBEc2R0 Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVG8gbG9jYXRlIEFDUEkgdGFibGUgaW4gQUNQSSBD b25maWd1cmF0aW9uVGFibGUuDQo+ICsNCj4gKyAgQHBhcmFtIEFjcGlUYWJsZUd1aWQgICAgICAg ICAgVGhlIEdVSUQgdXNlZCB0byBnZXQgQUNQSSBDb25maWd1cmF0aW9uVGFibGUuDQo+ICsgIEBw YXJhbSBTaWduYXR1cmUgICAgICAgICAgICAgIEFDUEkgdGFibGUgc2lnbmF0dXJlLg0KPiArICBA cGFyYW0gUHJldmlvdXNUYWJsZSAgICAgICAgICBQb2ludGVyIHRvIHByZXZpb3VzIHJldHVybmVk IHRhYmxlIHRvIGxvY2F0ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0 IHRhYmxlLCBvciBOVUxMIHRvIGxvY2F0ZSBmaXJzdCB0YWJsZS4NCj4gKyAgQHBhcmFtIFByZXZp b3VzVGFibGVMb2NhdGVkICAgUG9pbnRlciB0byB0aGUgaW5kaWNhdG9yIHRvIHJldHVybiB3aGV0 aGVyIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyByZXR1 cm5lZCB0YWJsZSBjb3VsZCBiZSBsb2NhdGVkIG9yIG5vdCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb3IgTlVMTCBpZiBQcmV2aW91c1RhYmxlIGlzIE5VTEwuDQo+ICsNCj4g KyAgSWYgUHJldmlvdXNUYWJsZSBpcyBOVUxMIGFuZCBQcmV2aW91c1RhYmxlTG9jYXRlZCBpcyBu b3QgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgUHJldmlvdXNUYWJsZSBpcyBub3QgTlVM TCBhbmQgUHJldmlvdXNUYWJsZUxvY2F0ZWQgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gKyAg SWYgQWNwaUd1aWQgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gKw0KPiArICBAcmV0dXJuIEFD UEkgdGFibGUgb3IgTlVMTCBpZiBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX0FDUElf Q09NTU9OX0hFQURFUiAqDQo+ICtMb2NhdGVBY3BpVGFibGVJbkFjcGlDb25maWd1cmF0aW9uVGFi bGUgKA0KPiArICBJTiAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAqQWNwaUd1aWQsDQo+ICsg IElOICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZSwNCj4gKyAgSU4gIEVGSV9B Q1BJX0NPTU1PTl9IRUFERVIgICAgKlByZXZpb3VzVGFibGUsIE9QVElPTkFMDQo+ICsgIE9VVCBC T09MRUFOICAgICAgICAgICAgICAgICAgICpQcmV2aW91c1RhYmxlTG9jYXRlZCBPUFRJT05BTA0K PiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9BQ1BJX0NPTU1PTl9IRUFERVIgICAgICAgICAgICAg ICAgICAgICAgICAqVGFibGU7DQo+ICsgIEVGSV9BQ1BJXzJfMF9ST09UX1NZU1RFTV9ERVNDUklQ VElPTl9QT0lOVEVSICAqUnNkcDsNCj4gKyAgRUZJX0FDUElfREVTQ1JJUFRJT05fSEVBREVSICAg ICAgICAgICAgICAgICAgICpSc2R0Ow0KPiArICBFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIg ICAgICAgICAgICAgICAgICAgKlhzZHQ7DQo+ICsgIEVGSV9BQ1BJXzJfMF9GSVhFRF9BQ1BJX0RF U0NSSVBUSU9OX1RBQkxFICAgICAqRmFkdDsNCj4gKw0KPiArICBpZiAoUHJldmlvdXNUYWJsZUxv Y2F0ZWQgIT0gTlVMTCkgew0KPiArICAgIEFTU0VSVCAoUHJldmlvdXNUYWJsZSAhPSBOVUxMKTsN Cj4gKyAgICAqUHJldmlvdXNUYWJsZUxvY2F0ZWQgPSBGQUxTRTsNCj4gKyAgfSBlbHNlIHsNCj4g KyAgICBBU1NFUlQgKFByZXZpb3VzVGFibGUgPT0gTlVMTCk7DQo+ICsgIH0NCj4gKw0KPiArICBS c2RwID0gTlVMTDsNCj4gKyAgLy8NCj4gKyAgLy8gR2V0IEFDUEkgQ29uZmlndXJhdGlvblRhYmxl IChSU0RfUFRSKQ0KPiArICAvLw0KPiArICBTdGF0dXMgPSBFZmlHZXRTeXN0ZW1Db25maWd1cmF0 aW9uVGFibGUoQWNwaUd1aWQsIChWT0lEICoqKSZSc2RwKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSB8fCAoUnNkcCA9PSBOVUxMKSkgew0KPiArICAgIHJldHVybiBOVUxMOw0KPiArICB9 DQo+ICsNCj4gKyAgVGFibGUgPSBOVUxMOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFNlYXJjaCBY U0RUDQo+ICsgIC8vDQo+ICsgIGlmIChSc2RwLT5SZXZpc2lvbiA+PSBFRklfQUNQSV8yXzBfUk9P VF9TWVNURU1fREVTQ1JJUFRJT05fUE9JTlRFUl9SRVZJU0lPTikgew0KPiArICAgIFhzZHQgPSAo RUZJX0FDUElfREVTQ1JJUFRJT05fSEVBREVSICopKFVJTlROKSBSc2RwLT5Yc2R0QWRkcmVzczsN Cj4gKyAgICBpZiAoU2lnbmF0dXJlID09IEVGSV9BQ1BJXzJfMF9ESUZGRVJFTlRJQVRFRF9TWVNU RU1fREVTQ1JJUFRJT05fVEFCTEVfU0lHTkFUVVJFKSB7DQo+ICsgICAgICBBU1NFUlQgKFByZXZp b3VzVGFibGUgPT0gTlVMTCk7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gSXQgaXMgdG8gbG9j YXRlIERTRFQsDQo+ICsgICAgICAvLyBuZWVkIHRvIGxvY2F0ZSBGQURUIGZpcnN0Lg0KPiArICAg ICAgLy8NCj4gKyAgICAgIEZhZHQgPSAoRUZJX0FDUElfMl8wX0ZJWEVEX0FDUElfREVTQ1JJUFRJ T05fVEFCTEUgKikgU2NhblRhYmxlSW5YU0RUICgNCj4gKyAgICAgICAgICAgICAgIFhzZHQsDQo+ ICsgICAgICAgICAgICAgICBFRklfQUNQSV8yXzBfRklYRURfQUNQSV9ERVNDUklQVElPTl9UQUJM RV9TSUdOQVRVUkUsDQo+ICsgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAg TlVMTA0KPiArICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgIFRhYmxlID0gTG9jYXRlQWNwaURz ZHRGcm9tRmFkdCAoRmFkdCk7DQo+ICsgICAgfSBlbHNlIGlmIChTaWduYXR1cmUgPT0gRUZJX0FD UElfMl8wX0ZJUk1XQVJFX0FDUElfQ09OVFJPTF9TVFJVQ1RVUkVfU0lHTkFUVVJFKSB7DQo+ICsg ICAgICBBU1NFUlQgKFByZXZpb3VzVGFibGUgPT0gTlVMTCk7DQo+ICsgICAgICAvLw0KPiArICAg ICAgLy8gSXQgaXMgdG8gbG9jYXRlIEZBQ1MsDQo+ICsgICAgICAvLyBuZWVkIHRvIGxvY2F0ZSBG QURUIGZpcnN0Lg0KPiArICAgICAgLy8NCj4gKyAgICAgIEZhZHQgPSAoRUZJX0FDUElfMl8wX0ZJ WEVEX0FDUElfREVTQ1JJUFRJT05fVEFCTEUgKikgU2NhblRhYmxlSW5YU0RUICgNCj4gKyAgICAg ICAgICAgICAgIFhzZHQsDQo+ICsgICAgICAgICAgICAgICBFRklfQUNQSV8yXzBfRklYRURfQUNQ SV9ERVNDUklQVElPTl9UQUJMRV9TSUdOQVRVUkUsDQo+ICsgICAgICAgICAgICAgICBOVUxMLA0K PiArICAgICAgICAgICAgICAgTlVMTA0KPiArICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgIFRh YmxlID0gTG9jYXRlQWNwaUZhY3NGcm9tRmFkdCAoRmFkdCk7DQo+ICsgICAgfSBlbHNlIHsNCj4g KyAgICAgIFRhYmxlID0gU2NhblRhYmxlSW5YU0RUICgNCj4gKyAgICAgICAgICAgICAgICBYc2R0 LA0KPiArICAgICAgICAgICAgICAgIFNpZ25hdHVyZSwNCj4gKyAgICAgICAgICAgICAgICBQcmV2 aW91c1RhYmxlLA0KPiArICAgICAgICAgICAgICAgIFByZXZpb3VzVGFibGVMb2NhdGVkDQo+ICsg ICAgICAgICAgICAgICAgKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoVGFibGUg IT0gTlVMTCkgew0KPiArICAgIHJldHVybiBUYWJsZTsNCj4gKyAgfSBlbHNlIGlmICgoUHJldmlv dXNUYWJsZUxvY2F0ZWQgIT0gTlVMTCkgJiYNCj4gKyAgICAgICAgICAgICAgKlByZXZpb3VzVGFi bGVMb2NhdGVkKSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBQcmV2aW91c1RhYmxlIGNvdWxkIGJl IGxvY2F0ZWQgaW4gWFNEVCwNCj4gKyAgICAvLyBidXQgbmV4dCB0YWJsZSBjb3VsZCBub3QgYmUg bG9jYXRlZCBpbiBYU0RULg0KPiArICAgIC8vDQo+ICsgICAgcmV0dXJuIE5VTEw7DQo+ICsgIH0N Cj4gKw0KPiArICAvLw0KPiArICAvLyBTZWFyY2ggUlNEVA0KPiArICAvLw0KPiArICBSc2R0ID0g KEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAqKShVSU5UTikgUnNkcC0+UnNkdEFkZHJlc3M7 DQo+ICsgIGlmIChTaWduYXR1cmUgPT0gRUZJX0FDUElfMl8wX0RJRkZFUkVOVElBVEVEX1NZU1RF TV9ERVNDUklQVElPTl9UQUJMRV9TSUdOQVRVUkUpIHsNCj4gKyAgICBBU1NFUlQgKFByZXZpb3Vz VGFibGUgPT0gTlVMTCk7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBJdCBpcyB0byBsb2NhdGUgRFNE VCwNCj4gKyAgICAvLyBuZWVkIHRvIGxvY2F0ZSBGQURUIGZpcnN0Lg0KPiArICAgIC8vDQo+ICsg ICAgRmFkdCA9IChFRklfQUNQSV8yXzBfRklYRURfQUNQSV9ERVNDUklQVElPTl9UQUJMRSAqKSBT Y2FuVGFibGVJblJTRFQgKA0KPiArICAgICAgICAgICAgIFJzZHQsDQo+ICsgICAgICAgICAgICAg RUZJX0FDUElfMl8wX0ZJWEVEX0FDUElfREVTQ1JJUFRJT05fVEFCTEVfU0lHTkFUVVJFLA0KPiAr ICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgTlVMTA0KPiArICAgICAgICAgICAg ICk7DQo+ICsgICAgVGFibGUgPSBMb2NhdGVBY3BpRHNkdEZyb21GYWR0IChGYWR0KTsNCj4gKyAg fSBlbHNlIGlmIChTaWduYXR1cmUgPT0gRUZJX0FDUElfMl8wX0ZJUk1XQVJFX0FDUElfQ09OVFJP TF9TVFJVQ1RVUkVfU0lHTkFUVVJFKSB7DQo+ICsgICAgQVNTRVJUIChQcmV2aW91c1RhYmxlID09 IE5VTEwpOw0KPiArICAgIC8vDQo+ICsgICAgLy8gSXQgaXMgdG8gbG9jYXRlIEZBQ1MsDQo+ICsg ICAgLy8gbmVlZCB0byBsb2NhdGUgRkFEVCBmaXJzdC4NCj4gKyAgICAvLw0KPiArICAgIEZhZHQg PSAoRUZJX0FDUElfMl8wX0ZJWEVEX0FDUElfREVTQ1JJUFRJT05fVEFCTEUgKikgU2NhblRhYmxl SW5SU0RUICgNCj4gKyAgICAgICAgICAgICBSc2R0LA0KPiArICAgICAgICAgICAgIEVGSV9BQ1BJ XzJfMF9GSVhFRF9BQ1BJX0RFU0NSSVBUSU9OX1RBQkxFX1NJR05BVFVSRSwNCj4gKyAgICAgICAg ICAgICBOVUxMLA0KPiArICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICApOw0KPiAr ICAgIFRhYmxlID0gTG9jYXRlQWNwaUZhY3NGcm9tRmFkdCAoRmFkdCk7DQo+ICsgIH0gZWxzZSB7 DQo+ICsgICAgVGFibGUgPSBTY2FuVGFibGVJblJTRFQgKA0KPiArICAgICAgICAgICAgICBSc2R0 LA0KPiArICAgICAgICAgICAgICBTaWduYXR1cmUsDQo+ICsgICAgICAgICAgICAgIFByZXZpb3Vz VGFibGUsDQo+ICsgICAgICAgICAgICAgIFByZXZpb3VzVGFibGVMb2NhdGVkDQo+ICsgICAgICAg ICAgICAgICk7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gVGFibGU7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGxvY2F0ZXMgbmV4dCBBQ1BJIHRhYmxlIGluIFhTRFQv UlNEVCBiYXNlZCBvbiBTaWduYXR1cmUgYW5kDQo+ICsgIHByZXZpb3VzIHJldHVybmVkIFRhYmxl Lg0KPiArDQo+ICsgIElmIFByZXZpb3VzVGFibGUgaXMgTlVMTDoNCj4gKyAgVGhpcyBmdW5jdGlv biB3aWxsIGxvY2F0ZSB0aGUgZmlyc3QgQUNQSSB0YWJsZSBpbiBYU0RUL1JTRFQgYmFzZWQgb24N Cj4gKyAgU2lnbmF0dXJlIGluIGdFZmlBY3BpMjBUYWJsZUd1aWQgc3lzdGVtIGNvbmZpZ3VyYXRp b24gdGFibGUgZmlyc3QsIGFuZCB0aGVuDQo+ICsgIGdFZmlBY3BpMTBUYWJsZUd1aWQgc3lzdGVt IGNvbmZpZ3VyYXRpb24gdGFibGUuDQo+ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2NhdGUgaW4g WFNEVCBmaXJzdCwgYW5kIHRoZW4gUlNEVC4NCj4gKyAgRm9yIERTRFQsIHRoaXMgZnVuY3Rpb24g d2lsbCBsb2NhdGUgWERzZHQgaW4gRkFEVCBmaXJzdCwgYW5kIHRoZW4gRHNkdCBpbg0KPiArICBG QURULg0KPiArICBGb3IgRkFDUywgdGhpcyBmdW5jdGlvbiB3aWxsIGxvY2F0ZSBYRmlybXdhcmVD dHJsIGluIEZBRFQgZmlyc3QsIGFuZCB0aGVuDQo+ICsgIEZpcm13YXJlQ3RybCBpbiBGQURULg0K PiArDQo+ICsgIElmIFByZXZpb3VzVGFibGUgaXMgbm90IE5VTEw6DQo+ICsgIDEuIElmIGl0IGNv dWxkIGJlIGxvY2F0ZWQgaW4gWFNEVCBpbiBnRWZpQWNwaTIwVGFibGVHdWlkIHN5c3RlbSBjb25m aWd1cmF0aW9uDQo+ICsgICAgIHRhYmxlLCB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCBqdXN0IGxv Y2F0ZSBuZXh0IHRhYmxlIGluIFhTRFQgaW4NCj4gKyAgICAgZ0VmaUFjcGkyMFRhYmxlR3VpZCBz eXN0ZW0gY29uZmlndXJhdGlvbiB0YWJsZS4NCj4gKyAgMi4gSWYgaXQgY291bGQgYmUgbG9jYXRl ZCBpbiBSU0RUIGluIGdFZmlBY3BpMjBUYWJsZUd1aWQgc3lzdGVtIGNvbmZpZ3VyYXRpb24NCj4g KyAgICAgdGFibGUsIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIGp1c3QgbG9jYXRlIG5leHQgdGFi bGUgaW4gUlNEVCBpbg0KPiArICAgICBnRWZpQWNwaTIwVGFibGVHdWlkIHN5c3RlbSBjb25maWd1 cmF0aW9uIHRhYmxlLg0KPiArICAzLiBJZiBpdCBjb3VsZCBiZSBsb2NhdGVkIGluIFJTRFQgaW4g Z0VmaUFjcGkxMFRhYmxlR3VpZCBzeXN0ZW0gY29uZmlndXJhdGlvbg0KPiArICAgICB0YWJsZSwg dGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwganVzdCBsb2NhdGUgbmV4dCB0YWJsZSBpbiBSU0RUIGlu DQo+ICsgICAgIGdFZmlBY3BpMTBUYWJsZUd1aWQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdGFibGUu DQo+ICsNCj4gKyAgSWYgUHJldmlvdXNUYWJsZSBpcyBub3QgTlVMTCBhbmQgUHJldmlvdXNUYWJs ZS0+U2lnbmF0dXJlIGlzIG5vdCBzYW1lIHdpdGgNCj4gKyAgU2lnbmF0dXJlLCB0aGVuIEFTU0VS VC4NCj4gKw0KPiArICBAcGFyYW0gU2lnbmF0dXJlICAgICAgICAgIEFDUEkgdGFibGUgc2lnbmF0 dXJlLg0KPiArICBAcGFyYW0gUHJldmlvdXNUYWJsZSAgICAgIFBvaW50ZXIgdG8gcHJldmlvdXMg cmV0dXJuZWQgdGFibGUgdG8gbG9jYXRlIG5leHQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0YWJsZSwgb3IgTlVMTCB0byBsb2NhdGUgZmlyc3QgdGFibGUuDQo+ICsNCj4gKyAgQHJl dHVybiBOZXh0IEFDUEkgdGFibGUgb3IgTlVMTCBpZiBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0K PiArRUZJX0FDUElfQ09NTU9OX0hFQURFUiAqDQo+ICtFRklBUEkNCj4gK0VmaUxvY2F0ZU5leHRB Y3BpVGFibGUgKA0KPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmUs DQo+ICsgIElOIEVGSV9BQ1BJX0NPTU1PTl9IRUFERVIgICAgICpQcmV2aW91c1RhYmxlIE9QVElP TkFMDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX0FDUElfQ09NTU9OX0hFQURFUiAgICAgICAgKlRh YmxlOw0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICBUZW1wUHJldmlvdXNUYWJs ZUxvY2F0ZWQ7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICpQcmV2aW91c1Rh YmxlTG9jYXRlZDsNCj4gKw0KPiArICBpZiAoUHJldmlvdXNUYWJsZSAhPSBOVUxMKSB7DQo+ICsg ICAgaWYgKFByZXZpb3VzVGFibGUtPlNpZ25hdHVyZSAhPSBTaWduYXR1cmUpIHsNCj4gKyAgICAg IC8vDQo+ICsgICAgICAvLyBQcmV2aW91c1RhYmxlLT5TaWduYXR1cmUgaXMgbm90IHNhbWUgd2l0 aCBTaWduYXR1cmUuDQo+ICsgICAgICAvLw0KPiArICAgICAgQVNTRVJUIChGQUxTRSk7DQo+ICsg ICAgICByZXR1cm4gTlVMTDsNCj4gKyAgICB9IGVsc2UgaWYgKChTaWduYXR1cmUgPT0gRUZJX0FD UElfMl8wX0ZJWEVEX0FDUElfREVTQ1JJUFRJT05fVEFCTEVfU0lHTkFUVVJFKSB8fA0KPiArICAg ICAgICAgICAgICAgKFNpZ25hdHVyZSA9PSBFRklfQUNQSV8yXzBfRElGRkVSRU5USUFURURfU1lT VEVNX0RFU0NSSVBUSU9OX1RBQkxFX1NJR05BVFVSRSkgfHwNCj4gKyAgICAgICAgICAgICAgIChT aWduYXR1cmUgPT0gRUZJX0FDUElfMl8wX0ZJUk1XQVJFX0FDUElfQ09OVFJPTF9TVFJVQ1RVUkVf U0lHTkFUVVJFKSkgew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIFRoZXJlIGlzIG9ubHkgb25l IEZBRFQvRFNEVC9GQUNTIHRhYmxlLA0KPiArICAgICAgLy8gc28gZG9uJ3QgdHJ5IHRvIGxvY2F0 ZSBuZXh0IG9uZS4NCj4gKyAgICAgIC8vDQo+ICsgICAgICByZXR1cm4gTlVMTDsNCj4gKyAgICB9 DQo+ICsNCj4gKyAgICBQcmV2aW91c1RhYmxlTG9jYXRlZCA9ICZUZW1wUHJldmlvdXNUYWJsZUxv Y2F0ZWQ7DQo+ICsgICAgKlByZXZpb3VzVGFibGVMb2NhdGVkID0gRkFMU0U7DQo+ICsgIH0gZWxz ZSB7DQo+ICsgICAgUHJldmlvdXNUYWJsZUxvY2F0ZWQgPSBOVUxMOw0KPiArICB9DQo+ICsNCj4g KyAgVGFibGUgPSBMb2NhdGVBY3BpVGFibGVJbkFjcGlDb25maWd1cmF0aW9uVGFibGUgKA0KPiAr ICAgICAgICAgICAgJmdFZmlBY3BpMjBUYWJsZUd1aWQsDQo+ICsgICAgICAgICAgICBTaWduYXR1 cmUsDQo+ICsgICAgICAgICAgICBQcmV2aW91c1RhYmxlLA0KPiArICAgICAgICAgICAgUHJldmlv dXNUYWJsZUxvY2F0ZWQNCj4gKyAgICAgICAgICAgICk7DQo+ICsgIGlmIChUYWJsZSAhPSBOVUxM KSB7DQo+ICsgICAgcmV0dXJuIFRhYmxlOw0KPiArICB9IGVsc2UgaWYgKChQcmV2aW91c1RhYmxl TG9jYXRlZCAhPSBOVUxMKSAmJg0KPiArICAgICAgICAgICAgICAqUHJldmlvdXNUYWJsZUxvY2F0 ZWQpIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIFByZXZpb3VzVGFibGUgY291bGQgYmUgbG9jYXRl ZCBpbiBnRWZpQWNwaTIwVGFibGVHdWlkIHN5c3RlbQ0KPiArICAgIC8vIGNvbmZpZ3VyYXRpb24g dGFibGUsIGJ1dCBuZXh0IHRhYmxlIGNvdWxkIG5vdCBiZSBsb2NhdGVkIGluDQo+ICsgICAgLy8g Z0VmaUFjcGkyMFRhYmxlR3VpZCBzeXN0ZW0gY29uZmlndXJhdGlvbiB0YWJsZS4NCj4gKyAgICAv Lw0KPiArICAgIHJldHVybiBOVUxMOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIExvY2F0ZUFj cGlUYWJsZUluQWNwaUNvbmZpZ3VyYXRpb25UYWJsZSAoDQo+ICsgICAgICAgICAgICZnRWZpQWNw aTEwVGFibGVHdWlkLA0KPiArICAgICAgICAgICBTaWduYXR1cmUsDQo+ICsgICAgICAgICAgIFBy ZXZpb3VzVGFibGUsDQo+ICsgICAgICAgICAgIFByZXZpb3VzVGFibGVMb2NhdGVkDQo+ICsgICAg ICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGxvY2F0ZXMg Zmlyc3QgQUNQSSB0YWJsZSBpbiBYU0RUL1JTRFQgYmFzZWQgb24gU2lnbmF0dXJlLg0KPiArDQo+ ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2NhdGUgdGhlIGZpcnN0IEFDUEkgdGFibGUgaW4gWFNE VC9SU0RUIGJhc2VkIG9uDQo+ICsgIFNpZ25hdHVyZSBpbiBnRWZpQWNwaTIwVGFibGVHdWlkIHN5 c3RlbSBjb25maWd1cmF0aW9uIHRhYmxlIGZpcnN0LCBhbmQgdGhlbg0KPiArICBnRWZpQWNwaTEw VGFibGVHdWlkIHN5c3RlbSBjb25maWd1cmF0aW9uIHRhYmxlLg0KPiArICBUaGlzIGZ1bmN0aW9u IHdpbGwgbG9jYXRlIGluIFhTRFQgZmlyc3QsIGFuZCB0aGVuIFJTRFQuDQo+ICsgIEZvciBEU0RU LCB0aGlzIGZ1bmN0aW9uIHdpbGwgbG9jYXRlIFhEc2R0IGluIEZBRFQgZmlyc3QsIGFuZCB0aGVu IERzZHQgaW4NCj4gKyAgRkFEVC4NCj4gKyAgRm9yIEZBQ1MsIHRoaXMgZnVuY3Rpb24gd2lsbCBs b2NhdGUgWEZpcm13YXJlQ3RybCBpbiBGQURUIGZpcnN0LCBhbmQgdGhlbg0KPiArICBGaXJtd2Fy ZUN0cmwgaW4gRkFEVC4NCj4gKw0KPiArICBAcGFyYW0gU2lnbmF0dXJlICAgICAgICAgIEFDUEkg dGFibGUgc2lnbmF0dXJlLg0KPiArDQo+ICsgIEByZXR1cm4gRmlyc3QgQUNQSSB0YWJsZSBvciBO VUxMIGlmIG5vdCBmb3VuZC4NCj4gKw0KPiArKiovDQo+ICtFRklfQUNQSV9DT01NT05fSEVBREVS ICoNCj4gK0VGSUFQSQ0KPiArRWZpTG9jYXRlRmlyc3RBY3BpVGFibGUgKA0KPiArICBJTiBVSU5U MzIgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmUNCj4gKyAgKQ0KPiArew0KPiArICByZXR1 cm4gRWZpTG9jYXRlTmV4dEFjcGlUYWJsZSAoU2lnbmF0dXJlLCBOVUxMKTsNCj4gK30NCj4gZGlm ZiAtLWdpdCBhL01kZVBrZy9MaWJyYXJ5L1VlZmlMaWIvVWVmaUxpYi5pbmYgYi9NZGVQa2cvTGli cmFyeS9VZWZpTGliL1VlZmlMaWIuaW5mDQo+IGluZGV4IGE2YzczOWVmM2Q2ZC4uYWVhMjBmZTY3 MTUzIDEwMDY0NA0KPiAtLS0gYS9NZGVQa2cvTGlicmFyeS9VZWZpTGliL1VlZmlMaWIuaW5mDQo+ ICsrKyBiL01kZVBrZy9MaWJyYXJ5L1VlZmlMaWIvVWVmaUxpYi5pbmYNCj4gQEAgLTQxLDYgKzQx LDcgQEAgW1NvdXJjZXNdDQo+ICAgICBDb25zb2xlLmMNCj4gICAgIFVlZmlMaWIuYw0KPiAgICAg VWVmaUxpYkludGVybmFsLmgNCj4gKyAgQWNwaS5jDQo+ICAgDQo+ICAgDQo+ICAgW1BhY2thZ2Vz XQ0KPiBAQCAtNjIsNiArNjMsOCBAQCBbR3VpZHNdDQo+ICAgICBnRWZpRXZlbnRSZWFkeVRvQm9v dEd1aWQgICAgICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAjIyBFdmVu dA0KPiAgICAgZ0VmaUV2ZW50TGVnYWN5Qm9vdEd1aWQgICAgICAgICAgICAgICAgICAgICAgICMj IFNPTUVUSU1FU19DT05TVU1FUyAgIyMgRXZlbnQNCj4gICAgIGdFZmlHbG9iYWxWYXJpYWJsZUd1 aWQgICAgICAgICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICMjIFZhcmlh YmxlDQo+ICsgIGdFZmlBY3BpMjBUYWJsZUd1aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAj IyBTT01FVElNRVNfQ09OU1VNRVMgICMjIFN5c3RlbVRhYmxlDQo+ICsgIGdFZmlBY3BpMTBUYWJs ZUd1aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICMj IFN5c3RlbVRhYmxlDQo+ICAgDQo+ICAgW1Byb3RvY29sc10NCj4gICAgIGdFZmlEcml2ZXJCaW5k aW5nUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19QUk9EVUNFUw0K PiANCg0KDQotLSANClRoYW5rcywNClJheQ0K