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.43; helo=mga05.intel.com; envelope-from=ruiyu.ni@intel.com; receiver=edk2-devel@lists.01.org Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (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 26D0B2237A4C1 for ; Fri, 2 Feb 2018 21:55:03 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Feb 2018 22:00:42 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,453,1511856000"; d="scan'208";a="24380467" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga003.jf.intel.com with ESMTP; 02 Feb 2018 22:00:42 -0800 Received: from fmsmsx114.amr.corp.intel.com (10.18.116.8) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 2 Feb 2018 22:00:41 -0800 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by FMSMSX114.amr.corp.intel.com (10.18.116.8) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 2 Feb 2018 22:00:41 -0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.125]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.253]) with mapi id 14.03.0319.002; Sat, 3 Feb 2018 14:00:39 +0800 From: "Ni, Ruiyu" To: Ard Biesheuvel , "Rothman, Michael A" CC: "Guo Heyi , Dong Wei" , "Dong, Eric" , "edk2-devel@lists.01.org" , linaro-uefi , "Kinney, Michael D" , "Zeng, Star" Thread-Topic: [edk2] [RFC] MdeModulePkg/PciHostBridgeDxe: Add support for address translation Thread-Index: AQHTjg+65ExkB2uTz0aBTGBgh27idKN3lvUAgAC9lYCABvOlAIAK0fcAgAT9yQCAAEhqgIAA/kHg///9AwCAAfDDgA== Date: Sat, 3 Feb 2018 06:00:38 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5BB845A2@SHSMSX104.ccr.corp.intel.com> References: <1516027600-32172-1-git-send-email-heyi.guo@linaro.org> <20180118012639.GA113567@SZX1000114654> <20180129085020.GA127987@SZX1000114654> <685b27a9-e620-e7e7-e0fb-8cebe16e7b1a@Intel.com> <734D49CCEBEEF84792F5B80ED585239D5BB73CBF@SHSMSX104.ccr.corp.intel.com> In-Reply-To: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZjk0ZjE2NmItYzU2Ni00ZGU5LWI3NDEtM2JiY2VmZTk2NGE1IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjIuNS4xOCIsIlRydXN0ZWRMYWJlbEhhc2giOiJzMldvMFhlRjdIbjZFQkphUVRMVFp5T2tHcStNa3BBOWpCU2hxeVlnRjF4TExcL0p6VnE2bThUdFp3emxoTmUrMiJ9 x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [RFC] MdeModulePkg/PciHostBridgeDxe: Add support for address translation X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Feb 2018 05:55:04 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQXJkIEJpZXNoZXV2ZWwg W21haWx0bzphcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnXQ0KPiBTZW50OiBGcmlkYXksIEZlYnJ1 YXJ5IDIsIDIwMTggNDoyMiBQTQ0KPiBUbzogTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+ DQo+IENjOiBHdW8gSGV5aSA8aGV5aS5ndW9AbGluYXJvLm9yZz4sRG9uZyBXZWkgPERvbmcuV2Vp QGFybS5jb20+OyBEb25nLA0KPiBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPjsgZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmc7IGxpbmFyby11ZWZpIDxsaW5hcm8tDQo+IHVlZmlAbGlzdHMubGluYXJv Lm9yZz47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IFpl bmcsDQo+IFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMl0g W1JGQ10gTWRlTW9kdWxlUGtnL1BjaUhvc3RCcmlkZ2VEeGU6IEFkZCBzdXBwb3J0IGZvcg0KPiBh ZGRyZXNzIHRyYW5zbGF0aW9uDQo+IA0KPiBPbiAyIEZlYnJ1YXJ5IDIwMTggYXQgMDA6MzQsIE5p LCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPiB3cm90ZToNCj4gPg0KPiA+DQo+ID4+IC0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+IEZyb206IEFyZCBCaWVzaGV1dmVsIFttYWlsdG86 YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZ10NCj4gPj4gU2VudDogRnJpZGF5LCBGZWJydWFyeSAy LCAyMDE4IDE6MjMgQU0NCj4gPj4gVG86IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPg0K PiA+PiBDYzogR3VvIEhleWkgPGhleWkuZ3VvQGxpbmFyby5vcmc+LERvbmcgV2VpIDxEb25nLldl aUBhcm0uY29tPjsNCj4gRG9uZywNCj4gPj4gRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT47IGVk azItZGV2ZWxAbGlzdHMuMDEub3JnOyBsaW5hcm8tdWVmaQ0KPiA+PiA8bGluYXJvLSB1ZWZpQGxp c3RzLmxpbmFyby5vcmc+OyBLaW5uZXksIE1pY2hhZWwgRA0KPiA+PiA8bWljaGFlbC5kLmtpbm5l eUBpbnRlbC5jb20+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPg0KPiA+PiBTdWJq ZWN0OiBSZTogW2VkazJdIFtSRkNdIE1kZU1vZHVsZVBrZy9QY2lIb3N0QnJpZGdlRHhlOiBBZGQg c3VwcG9ydA0KPiA+PiBmb3IgYWRkcmVzcyB0cmFuc2xhdGlvbg0KPiA+Pg0KPiA+PiBPbiAxIEZl YnJ1YXJ5IDIwMTggYXQgMDU6MDMsIE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPiB3cm90 ZToNCj4gPj4gPiBPbiAxLzI5LzIwMTggNDo1MCBQTSwgR3VvIEhleWkgd3JvdGU6DQo+ID4+ID4+ DQo+ID4+ID4+IFNvcnJ5IGZvciB0aGUgbGF0ZTsgSSBjYXVnaHQgY29sZCBhbmQgZGlkbid0IHdv cmsgZm9yIHNldmVyYWwgZGF5cw0KPiA+PiA+PiBsYXN0IHdlZWsgOiggUGxlYXNlIHNlZSBteSBj b21tZW50cyBiZWxvdzoNCj4gPj4gPj4NCj4gPj4gPj4NCj4gPj4gPj4gT24gTW9uLCBKYW4gMjIs IDIwMTggYXQgMTE6MzY6MTRBTSArMDgwMCwgTmksIFJ1aXl1IHdyb3RlOg0KPiA+PiA+Pj4NCj4g Pj4gPj4+IE9uIDEvMTgvMjAxOCA5OjI2IEFNLCBHdW8gSGV5aSB3cm90ZToNCj4gPj4gPj4+Pg0K PiA+PiA+Pj4+IE9uIFdlZCwgSmFuIDE3LCAyMDE4IGF0IDAyOjA4OjA2UE0gKzAwMDAsIEFyZCBC aWVzaGV1dmVsIHdyb3RlOg0KPiA+PiA+Pj4+Pg0KPiA+PiA+Pj4+PiBPbiAxNSBKYW51YXJ5IDIw MTggYXQgMTQ6NDYsIEhleWkgR3VvIDxoZXlpLmd1b0BsaW5hcm8ub3JnPiB3cm90ZToNCj4gPj4g Pj4+Pj4+DQo+ID4+ID4+Pj4+PiBUaGlzIGlzIHRoZSBkcmFmdCBwYXRjaCBmb3IgdGhlIGRpc2N1 c3Npb24gcG9zdGVkIGluDQo+ID4+ID4+Pj4+PiBlZGsyLWRldmVsIG1haWxpbmcgbGlzdDoNCj4g Pj4gPj4+Pj4+IGh0dHBzOi8vbGlzdHMuMDEub3JnL3BpcGVybWFpbC9lZGsyLWRldmVsLzIwMTct RGVjZW1iZXIvMDE5Mjg5DQo+ID4+ID4+Pj4+PiAuaHQNCj4gPj4gPj4+Pj4+IG1sDQo+ID4+ID4+ Pj4+Pg0KPiA+PiA+Pj4+Pj4gQXMgZGlzY3Vzc2VkIGluIHRoZSBtYWlsaW5nIGxpc3QsIHdlJ2Qg bGlrZSB0byBhZGQgc3VwcG9ydCBmb3INCj4gPj4gPj4+Pj4+IFBDSSBhZGRyZXNzIHRyYW5zbGF0 aW9uIHdoaWNoIGlzIG5lY2Vzc2FyeSBmb3Igc29tZSBub24teDg2DQo+ID4+ID4+Pj4+PiBwbGF0 Zm9ybXMuIEkgYWxzbyB3YW50IHRvIG1pbmltaXplIHRoZSBjaGFuZ2VzIHRvIHRoZSBnZW5lcmlj DQo+ID4+ID4+Pj4+PiBob3N0IGJyaWRnZSBkcml2ZXIgYW5kIHBsYXRmb3JtIFBjaUhvc3RCcmlk Z2VMaWINCj4gPj4gPj4+Pj4+IGltcGxlbWV0YXRpb25zLCBzbyBhZGRpdGlvbmFsIHR3byBpbnRl cmZhY2VzIGFyZSBhZGRlZCB0bw0KPiA+PiA+Pj4+Pj4gZXhwb3NlIHRyYW5zbGF0aW9uIGluZm9y bWF0aW9uIG9mIHRoZSBwbGF0Zm9ybS4gVG8gYmUgZ2VuZXJpYywNCj4gPj4gPj4+Pj4+IEkgYWRk IHRyYW5zbGF0aW9uIGZvciBlYWNoIHR5cGUgb2YgSU8gb3IgbWVtb3J5IHJlc291cmNlcy4NCj4g Pj4gPj4+Pj4+DQo+ID4+ID4+Pj4+PiBUaGUgcGF0Y2ggaXMgc3RpbGwgYSBSRkMsIHNvIEkgb25s eSBwYXNzZWQgdGhlIGJ1aWxkIGZvcg0KPiA+PiA+Pj4+Pj4gcWVtdTY0IGFuZCB0aGUgZnVuY3Rp b24gaGFzIG5vdCBiZWVuIHRlc3RlZCB5ZXQuDQo+ID4+ID4+Pj4+Pg0KPiA+PiA+Pj4+Pj4gUGxl YXNlIGxldCBtZSBrbm93IHlvdXIgY29tbWVudHMgYWJvdXQgaXQuDQo+ID4+ID4+Pj4+Pg0KPiA+ PiA+Pj4+Pj4gVGhhbmtzLg0KPiA+PiA+Pj4+Pj4NCj4gPj4gPj4+Pj4+IENvbnRyaWJ1dGVkLXVu ZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjENCj4gPj4gPj4+Pj4+IFNp Z25lZC1vZmYtYnk6IEhleWkgR3VvIDxoZXlpLmd1b0BsaW5hcm8ub3JnPg0KPiA+PiA+Pj4+Pj4g Q2M6IFJ1aXl1IE5pIDxydWl5dS5uaUBpbnRlbC5jb20+DQo+ID4+ID4+Pj4+PiBDYzogQXJkIEJp ZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+DQo+ID4+ID4+Pj4+PiBDYzogU3Rh ciBaZW5nIDxzdGFyLnplbmdAaW50ZWwuY29tPg0KPiA+PiA+Pj4+Pj4gQ2M6IEVyaWMgRG9uZyA8 ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gPj4gPj4+Pj4+IC0tLQ0KPiA+PiA+Pj4+Pj4gICAuLi4v RmR0UGNpSG9zdEJyaWRnZUxpYi9GZHRQY2lIb3N0QnJpZGdlTGliLmMgICAgICB8ICAxOSArKysr DQo+ID4+ID4+Pj4+PiAgIC4uLi9CdXMvUGNpL1BjaUhvc3RCcmlkZ2VEeGUvUGNpSG9zdEJyaWRn ZS5jICAgICAgIHwgIDUzICsrKysrKysrLS0tDQo+ID4+ID4+Pj4+PiAgIC4uLi9CdXMvUGNpL1Bj aUhvc3RCcmlkZ2VEeGUvUGNpUm9vdEJyaWRnZS5oICAgICAgIHwgICA4ICstDQo+ID4+ID4+Pj4+ PiAgIC4uLi9CdXMvUGNpL1BjaUhvc3RCcmlkZ2VEeGUvUGNpUm9vdEJyaWRnZUlvLmMgICAgIHwg MTAxDQo+ID4+ID4+Pj4+PiArKysrKysrKysrKysrKysrKystLS0NCj4gPj4gPj4+Pj4+ICAgTWRl TW9kdWxlUGtnL0luY2x1ZGUvTGlicmFyeS9QY2lIb3N0QnJpZGdlTGliLmggICAgfCAgMzYNCj4g KysrKysrKysNCj4gPj4gPj4+Pj4+ICAgNSBmaWxlcyBjaGFuZ2VkLCAxOTIgaW5zZXJ0aW9ucygr KSwgMjUgZGVsZXRpb25zKC0pDQo+ID4+ID4+Pj4+Pg0KPiA+PiA+Pj4+Pj4gZGlmZiAtLWdpdA0K PiA+PiA+Pj4+Pj4gYS9Bcm1WaXJ0UGtnL0xpYnJhcnkvRmR0UGNpSG9zdEJyaWRnZUxpYi9GZHRQ Y2lIb3N0QnJpZGdlTGliLmMNCj4gPj4gPj4+Pj4+IGIvQXJtVmlydFBrZy9MaWJyYXJ5L0ZkdFBj aUhvc3RCcmlkZ2VMaWIvRmR0UGNpSG9zdEJyaWRnZUxpYi5jDQo+ID4+ID4+Pj4+PiBpbmRleCA1 YjljODg3Li4wYzgzNzFhIDEwMDY0NA0KPiA+PiA+Pj4+Pj4gLS0tDQo+ID4+ID4+Pj4+PiBhL0Fy bVZpcnRQa2cvTGlicmFyeS9GZHRQY2lIb3N0QnJpZGdlTGliL0ZkdFBjaUhvc3RCcmlkZ2VMaWIu Yw0KPiA+PiA+Pj4+Pj4gKysrIGIvQXJtVmlydFBrZy9MaWJyYXJ5L0ZkdFBjaUhvc3RCcmlkZ2VM aWIvRmR0UGNpSG9zdEJyaWRnZUxpYi4NCj4gPj4gPj4+Pj4+ICsrKyBjDQo+ID4+ID4+Pj4+PiBA QCAtMzYwLDYgKzM2MCwxNiBAQCBQY2lIb3N0QnJpZGdlR2V0Um9vdEJyaWRnZXMgKA0KPiA+PiA+ Pj4+Pj4gICAgIHJldHVybiAmbVJvb3RCcmlkZ2U7DQo+ID4+ID4+Pj4+PiAgIH0NCj4gPj4gPj4+ Pj4+DQo+ID4+ID4+Pj4+PiArUENJX1JPT1RfQlJJREdFX1RSQU5TTEFUSU9OICogRUZJQVBJDQo+ ID4+ID4+Pj4+PiArUGNpSG9zdEJyaWRnZUdldFRyYW5zbGF0aW9ucyAoDQo+ID4+ID4+Pj4+PiAr ICBVSU5UTiAqQ291bnQNCj4gPj4gPj4+Pj4+ICsgICkNCj4gPj4gPj4+Pj4+ICt7DQo+ID4+ID4+ Pj4+PiArICAqQ291bnQgPSAwOw0KPiA+PiA+Pj4+Pj4gKyAgcmV0dXJuIE5VTEw7DQo+ID4+ID4+ Pj4+PiArfQ0KPiA+PiA+Pj4+Pj4gKw0KPiA+PiA+Pj4+Pj4gICAvKioNCj4gPj4gPj4+Pj4+ICAg ICBGcmVlIHRoZSByb290IGJyaWRnZSBpbnN0YW5jZXMgYXJyYXkgcmV0dXJuZWQgZnJvbQ0KPiA+ PiA+Pj4+Pj4gICAgIFBjaUhvc3RCcmlkZ2VHZXRSb290QnJpZGdlcygpLg0KPiA+PiA+Pj4+Pj4g QEAgLTM3Nyw2ICszODcsMTUgQEAgUGNpSG9zdEJyaWRnZUZyZWVSb290QnJpZGdlcyAoDQo+ID4+ ID4+Pj4+PiAgICAgQVNTRVJUIChDb3VudCA9PSAxKTsNCj4gPj4gPj4+Pj4+ICAgfQ0KPiA+PiA+ Pj4+Pj4NCj4gPj4gPj4+Pj4+ICtWT0lEDQo+ID4+ID4+Pj4+PiArRUZJQVBJDQo+ID4+ID4+Pj4+ PiArUGNpSG9zdEJyaWRnZUZyZWVUcmFuc2xhdGlvbnMgKA0KPiA+PiA+Pj4+Pj4gKyAgUENJX1JP T1RfQlJJREdFX1RSQU5TTEFUSU9OICpUcmFuc2xhdGlvbnMsDQo+ID4+ID4+Pj4+PiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgQ291bnQNCj4gPj4gPj4+Pj4+ICsgICkNCj4gPj4gPj4+ Pj4+ICt7DQo+ID4+ID4+Pj4+PiArfQ0KPiA+PiA+Pj4+Pj4gKw0KPiA+PiA+Pj4+Pj4gICAvKioN Cj4gPj4gPj4+Pj4+ICAgICBJbmZvcm0gdGhlIHBsYXRmb3JtIHRoYXQgdGhlIHJlc291cmNlIGNv bmZsaWN0IGhhcHBlbnMuDQo+ID4+ID4+Pj4+Pg0KPiA+PiA+Pj4+Pj4gZGlmZiAtLWdpdA0KPiA+ PiA+Pj4+Pj4gYXNhbWUvTWRlTW9kdWxlUGtnL0J1cy9QY2kvUGNpSG9zdEJyaWRnZUR4ZS9QY2lI b3N0QnJpZGdlLmMNCj4gPj4gPj4+Pj4+IGIvTWRlTW9kdWxlUGtnL0J1cy9QY2kvUGNpSG9zdEJy aWRnZUR4ZS9QY2lIb3N0QnJpZGdlLmMNCj4gPj4gPj4+Pj4+IGluZGV4IDE0OTQ4NDguLjgzNWU0 MTEgMTAwNjQ0DQo+ID4+ID4+Pj4+PiAtLS0gYS9NZGVNb2R1bGVQa2cvQnVzL1BjaS9QY2lIb3N0 QnJpZGdlRHhlL1BjaUhvc3RCcmlkZ2UuYw0KPiA+PiA+Pj4+Pj4gKysrIGIvTWRlTW9kdWxlUGtn L0J1cy9QY2kvUGNpSG9zdEJyaWRnZUR4ZS9QY2lIb3N0QnJpZGdlLmMNCj4gPj4gPj4+Pj4+IEBA IC0zNjAsMTggKzM2MCwzOCBAQCBJbml0aWFsaXplUGNpSG9zdEJyaWRnZSAoDQo+ID4+ID4+Pj4+ PiAgICAgUENJX0hPU1RfQlJJREdFX0lOU1RBTkNFICAgICpIb3N0QnJpZGdlOw0KPiA+PiA+Pj4+ Pj4gICAgIFBDSV9ST09UX0JSSURHRV9JTlNUQU5DRSAgICAqUm9vdEJyaWRnZTsNCj4gPj4gPj4+ Pj4+ICAgICBQQ0lfUk9PVF9CUklER0UgICAgICAgICAgICAgKlJvb3RCcmlkZ2VzOw0KPiA+PiA+ Pj4+Pj4gKyAgUENJX1JPT1RfQlJJREdFX1RSQU5TTEFUSU9OICpUcmFuc2xhdGlvbnM7DQo+ID4+ ID4+Pj4+PiAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIFJvb3RCcmlkZ2VDb3VudDsN Cj4gPj4gPj4+Pj4+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbkNv dW50Ow0KPiA+PiA+Pj4+Pj4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsN Cj4gPj4gPj4+Pj4+ICAgICBQQ0lfUk9PVF9CUklER0VfQVBFUlRVUkUgICAgKk1lbUFwZXJ0dXJl c1s0XTsNCj4gPj4gPj4+Pj4NCj4gPj4gPj4+Pj4NCj4gPj4gPj4+Pj4gV291bGRuJ3QgaXQgYmUg bXVjaCBiZXR0ZXIgdG8gYWRkIGEgJ3RyYW5zbGF0aW9uJyBtZW1iZXIgdG8NCj4gPj4gPj4+Pj4g UENJX1JPT1RfQlJJREdFX0FQRVJUVVJFPyBUaGF0IHdheSwgZXhpc3RpbmcgY29kZSBqdXN0IGRl ZmF1bHQNCj4gPj4gPj4+Pj4gdG8gYSB0cmFuc2xhdGlvbiBvZiAwLCBhbmQgYWxsIHRoZSBoYW5k bGluZyBvZiB0aGUgc2VwYXJhdGUNCj4gPj4gPj4+Pj4gYXJyYXkgY2FuIGJlIGRyb3BwZWQuDQo+ ID4+ID4+Pj4+DQo+ID4+ID4+Pj4gQWN0dWFsbHkgbXkgZmlyc3QgaWRlYSB3YXMgdGhlIHNhbWUs IGJ1dCB3aGVuIEkgbG9va2VkIGF0IHRoZQ0KPiA+PiA+Pj4+IGltcGxlbWVudGF0aW9uIG9mIFBj aUhvc3RCcmlkZ2VMaWIgb2YgT3ZtZiwgSSBmb3VuZCBpdCBhIGxpdHRsZQ0KPiA+PiA+Pj4+IHRl ZGlvdXMgdG8gY2hhbmdlIHRoZSBleGlzdGluZyBjb2RlIGluIHRoaXMgd2F5LiBXZSdsbCBuZWVk IHRvDQo+ID4+ID4+Pj4gY2hlY2sgZXZlcnl3aGVyZSBQQ0lfUk9PVF9CUklER0VfQVBFUlRVUkUg b3INCj4gUENJX1JPT1RfQlJJREdFIGlzDQo+ID4+ID4+Pj4gdXNlZCwgdG8gbWFrZSBzdXJlIHRo ZSB0cmFuc2xhdGlvbiBmaWVsZCBpcyBpbml0aWFsaXplZCB0byBiZQ0KPiA+PiA+Pj4+IHplcm8s IGUuZy4gbGluZSAyMzV+MjQ1Lg0KPiA+PiA+Pj4+DQo+ID4+ID4+Pj4gV2hhdCBJIGRpZCBpbiB0 aGlzIFJGQyBpcyBub3Qgc28gc3RyYWlnaHRmb3J3YXJkIGluZGVlZC4gU28gSQ0KPiA+PiA+Pj4+ IGNhbiBjaGFuZ2UgdGhlIGNvZGUgaWYgd2UgYWxsIGFncmVlIHRvIGFkZCBUcmFuc2xhdGlvbiBm aWVsZA0KPiA+PiA+Pj4+IGludG8gUENJX1JPT1RfQlJJREdFX0FQRVJUVVJFIGRpcmVjdGx5Lg0K PiA+PiA+Pj4+DQo+ID4+ID4+Pj4gVGhhbmtzLA0KPiA+PiA+Pj4+DQo+ID4+ID4+Pj4gR2FyeSAo SGV5aSBHdW8pDQo+ID4+ID4+Pg0KPiA+PiA+Pj4NCj4gPj4gPj4+IEkgYWxzbyBhZ3JlZSB0byBw dXQgdGhlIHRyYW5zbGF0aW9uIGZpZWxkcyBpbnRvIHRoZQ0KPiA+PiA+Pj4gUENJX1JPT1RfQlJJ REdFX0FQRVJUVVJFLg0KPiA+PiA+Pj4NCj4gPj4gPj4+DQo+ID4+ID4+PiBCdXQgSSB0aGluayB3 ZSBtYXkgaGF2ZSBkaWZmZXJlbnQgdW5kZXJzdGFuZGluZ3MgdG8gdGhlIGFkZHJlc3MNCj4gPj4g Pj4+IHRyYW5zbGF0aW9uLg0KPiA+PiA+Pj4gTXkgdW5kZXJzdGFuZGluZyB0byB0aGUgd2hvbGUg dHJhbnNsYXRpb246DQo+ID4+ID4+PiAxLiBQY2lIb3N0QnJpZHNhbWVzYW1lZ2UuR2V0UHJvcG9z ZWRSZXNvdXJjZXMgKCkgcmV0dXJucyByZXNvdXJjZQ0KPiA+PiBpbmZvcm1hdGlvbg0KPiA+PiA+ Pj4gICAgIGZvciBhIHNpbmdsZSByb290IGJyaWRnZS4gSXQgb25seSBjYXJyaWVzIHRoZSBhZGRy ZXNzIHJhbmdlIGluIFBDSQ0KPiA+PiA+Pj4gICAgIHZpZXcuDQo+ID4+ID4+PiAgICAgVGhlIGFk ZHJlc3MgcmFuZ2UvcmVzb3VyY2UgaXMgcmVwb3J0ZWQvc3VibWl0dGVkIGJ5IFBjaUhvc3RCcmlk Z2VMaWIuDQo+ID4+ID4+PiAgICAgQmVmb3JlIHRoZSBjaGFuZ2UsIENQVSB2aWV3IGVxdWFscyB0 byBQQ0kgdmlldy4gU28gUGNpSG9zdEJyaWRnZUR4ZQ0KPiA+PiA+Pj4gICAgIGRyaXZlciBkaXJl Y3RseSBhZGRzIHRoZSByZXNvdXJjZSB0byBHQ0QuDQo+ID4+ID4+PiAgICAgSW4geW91ciBjaGFu Z2UsIFBjaUhvc3RCcmlkZ2VEeGUgYXNzdW1lcyB0aGUgc291cmNlIGlzIGluIFBDSSB2aWV3DQo+ ID4+ID4+PiAgICAgYW5kIGl0IGFkZHMgb2Zmc2V0IHRvIGNvbnZlcnQgdG8gQ1BVIHZpZXcuDQo+ ID4+ID4+PiAgICAgQ1BVLWFkZHJlc3MgPSBQQ0ktYWRkcmVzcyArIG9mZnNldC4gPC0tIEVxdWF0 aW9uICNBDQo+ID4+ID4+Pg0KPiA+PiA+Pj4NCj4gPj4gPj4+IDIuIFBjaVJvb3RCcmlkZ2VJby5D b25maWd1cmF0aW9uKCkgcmV0dXJucyB0aGUgcmVzb3VyY2UgaW5mb3JtYXRpb24NCj4gPj4gPj4+ ICAgICBmb3IgYSBzaW5nbGUgcm9vdCBicmlkZ2UuIEl0IGNhcnJpZXMgdGhlIGFkZHJlc3MgcmFu Z2UgaW4gQ1BVIHZpZXcsDQo+ID4+ID4+PiAgICAgYW5kIHRoZSB0cmFuc2xhdGlvbiBvZmZzZXQu DQo+ID4+ID4+PiAgICAgSG93ZXZlciwgcGVyIFVFRkkgc3BlYywgIkFkZHJlc3MgVHJhbnNsYXRp b24gT2Zmc2V0LiBPZmZzZXQgdG8gYXBwbHkNCj4gPj4gPj4+ICAgICB0byB0aGUgU3RhcnRpbmcg YWRkcmVzcyBvZiBhIEJBUiB0byBjb252ZXJ0IGl0IHRvIGEgUENJIGFkZHJlc3MuICINCj4gPj4g Pj4+ICAgICBQQ0ktYWRkcmVzcyA9IENQVS1hZGRyZXNzICsgb2Zmc2V0LiA8LS0gRXF1YXRpb24g I0INCj4gPj4gPj4NCj4gPj4gPj4NCj4gPj4gPj4gSWYgd2UgZ2V0IEVxdWF0aW9uICNCIGZyb20g dGhlIHN0YXRlbWVudCBpbiBVRUZJIHNwZWMsIGRvZXMgaXQNCj4gPj4gPj4gYWxzbyBpbXBseSBT dGFydGluZyBhZGRyZXNzIGlzICJBZGRyZXNzIFJhbmdlIE1pbmltdW0iIGFuZCBzbyBpdA0KPiA+ PiA+PiBpcyBDUFUgdmlldw0KPiA+PiBhZGRyZXNzPw0KPiA+PiA+Pg0KPiA+PiA+PiBJZiB3ZSB1 c2UgRXF1YXRpb24gI0IsIGNhbiBvZmZzZXQgYmUgYSBuZWdhdGl2ZSB2YWx1ZT8gSWYgaXQgaXMN Cj4gPj4gPj4gbm90LCB0aGVuIGl0IHdpbGwgbWFrZSB0cmFuc2xhdGlvbiB1c2VsZXNzLCBzaW5j ZSB3ZSBjYW5ub3QgY2hhbmdlDQo+ID4+ID4+IENQVSBhZGRyZXNzIGFib3ZlIDRHIGludG8gUENJ IGFkZHJlc3MgdW5kZXIgNEcgZm9yIGxlZ2FjeSBjb21wYXRpYmlsaXR5Lg0KPiA+PiA+Pg0KPiA+ PiA+PiBFcXVhdGlvbiAjQiBpcyBhbHNvIG5vdCBjb25zaXN0ZW50IHdpdGggaG93IE9TIHRyZWF0 cyBhZGRyZXNzDQo+ID4+ID4+IHRyYW5zbGF0aW9uOyBwbGVhc2Ugc2VlIHRoZSBBQ1BJIEFTTCBj b2RlIHdoaWNoIHdvcmtzIHdlbGwgZm9yIE9TOg0KPiA+PiA+Pg0KPiA+PiA+PiBodHRwczovL2dp dGh1Yi5jb20vdGlhbm9jb3JlL2VkazItcGxhdGZvcm1zL2Jsb2IvbWFzdGVyL1NpbGljb24vSGkN Cj4gPj4gPj4gc2lsDQo+ID4+ID4+IGljb24vSGkxNjE2L0QwNUFjcGlUYWJsZXMvRHNkdC9EMDVQ Y2kuYXNsI0wyMDENCj4gPj4gPg0KPiA+PiA+DQo+ID4+ID4gSSBhZ3JlZSB3aXRoIHlvdXIgc3Rh dGVtZW50IGFib3V0IHRoZSBBU0wgY29kZS4NCj4gPj4gPiBJIGNvcGllZCB0aGUgZm9sbG93aW5n IHdvcmRpbmdzIGZyb20gQUNQSSBzcGVjOg0KPiA+PiA+DQo+ID4+ID4gQnl0ZSAxNCBBZGRyZXNz IHJhbmdlIG1pbmltdW0sDQo+ID4+ID4gX01JTiBiaXRzWzc6MF0NCj4gPj4gPiBGb3IgYnJpZGdl cyB0aGF0IHRyYW5zbGF0ZSBhZGRyZXNzZXMsIHRoaXMgaXMgdGhlIGFkZHJlc3Mgc3BhY2Ugb24N Cj4gPj4gPiB0aGUgc2Vjb25kYXJ5IHNpZGUgb2YgdGhlIGJyaWRnZS4NCj4gPj4gPg0KPiA+PiA+ IEJ5dGUgMzAgQWRkcmVzcyBUcmFuc2xhdGlvbg0KPiA+PiA+IG9mZnNldCwgX1RSQSBiaXRzWzc6 MF0NCj4gPj4gPiBGb3IgYnJpZGdlcyB0aGF0IHRyYW5zbGF0ZSBhZGRyZXNzZXMgYWNyb3NzIHRo ZSBicmlkZ2UsIHRoaXMgaXMgdGhlDQo+ID4+ID4gb2Zmc2V0IHRoYXQgbXVzdCBiZSBhZGRlZCB0 byB0aGUgYWRkcmVzcyBvbiB0aGUgc2Vjb25kYXJ5IHNpZGUgdG8NCj4gPj4gPiBvYnRhaW4gdGhl IGFkZHJlc3Mgb24gdGhlIHByaW1hcnkgc2lkZS4gTm9uLWJyaWRnZSBkZXZpY2VzIG11c3QNCj4g Pj4gPiBsaXN0IDAgZm9yIGFsbCBBZGRyZXNzIFRyYW5zbGF0aW9uIG9mZnNldCBiaXRzLg0KPiA+ PiA+DQo+ID4+ID4gSXQgc2VlbXMgVUVGSSBTcGVjIGNvbmZsaWN0cyB3aXRoIEFDUEkgU3BlYy4N Cj4gPj4gPiBVRUZJIFNwZWM6IEFkZHJlc3NSYW5nZU1pbiA9IENQVS12aWV3IGFkZHJlc3MgQUNQ SSBTcGVjOg0KPiA+PiA+IEFkZHJlc3NSYW5nZU1pbiA9IFBDSS12aWV3IGFkZHJlc3MNCj4gPj4g Pg0KPiA+PiA+IEkgcmVtZW1iZXJlZCB0aGF0IHRoaXMgdG9waWMgd2FzIGRpc2N1c3NlZCBsb25n IHRpbWUgYWdvIGFuZA0KPiA+PiA+IHJlLWRpc2N1c3NlZCBpbiB5ZWFyIDIwMTcuDQo+ID4+ID4g VGhlcmUgaXMgbm8gY29uY2x1c2lvbi4NCj4gPj4gPg0KPiA+PiA+IEkgdGVuZCB0byBhZ3JlZSB0 byBhbGlnbiB0byBBQ1BJIHNwZWMuDQo+ID4+ID4gQnV0IEkgYW0gbm90IHN1cmUgd2hhdCBpbXBh Y3QgaXQgbWF5IGNhdXNlLg0KPiA+PiA+DQo+ID4+ID4gQWN0dWFsbHkgdGhpcyBDUFUvUENJIGFk ZHJlc3MgdG9waWMgd2FzIGRpc2N1c3NlZCBsb25nIHRpbWUgYWdvIGFuZA0KPiA+PiA+IHJlLWRp c2N1c3NlZCBpbiBwYXRjaCBtYWlsOg0KPiA+PiA+IGh0dHBzOi8vbGlzdHMuMDEub3JnL3BpcGVy bWFpbC9lZGsyLWRldmVsLzIwMTctU2VwdGVtYmVyLzAxNDQyNS5odG0NCj4gPj4gPiBsIE5vIGNv bmNsdXNpb24gc28gdGhlIHBhdGNoIHdhcyBhbHNvIG5vdCBjaGVja2VkIGluLg0KPiA+PiA+DQo+ ID4+ID4gV2l0aCB5b3VyIHByb3Bvc2VkIHBhdGNoIChtYXliZSByZWZpbmUgb3IgYWRkcmVzcyB0 cmFuc2xhdGlvbiBsb2dpYw0KPiA+PiA+IHVwZGF0ZXMgYXJlIG5lZWRlZCksIEkgdGhpbmsgaXQn cyBhIGdvb2Qgb3Bwb3J0dW5pdHkgZm9yIHVzIHRvDQo+ID4+ID4gcmV2aWV3IHRoZSB3aG9sZSBQ Q0kgcmVzb3VyY2UgYWxsb2NhdGlvbiBsb2dpYyBpbg0KPiA+PiA+IFBjaUhvc3RCcmlkZ2UvUGNp QnVzIC9HQ0QsIGFuZCBwcm9wb3NlIGEgY29uc2lzdGVudC9jbGVhciBzb2x1dGlvbi4NCj4gPj4g Pg0KPiA+PiA+DQo+ID4+DQo+ID4+IFRoaXMgaGFzIGluZGVlZCBiZWVuIGRpc2N1c3NlZCBtYW55 IHRpbWVzLCBidXQgdGhlIFVFRkkgc3BlYyBpcyBxdWl0ZQ0KPiA+PiBjbGVhciB0aGF0IGl0cyBk ZWZpbml0aW9uIG9mIHRoZSBRV09SRCBhZGRyZXNzIHNwYWNlIGRlc2NyaXB0b3INCj4gPj4gc3Vw ZXJzZWRlcyB0aGUgb25lIGluIHRoZSBBQ1BJIHNwZWMuDQo+ID4+DQo+ID4+IEdpdmVuIHRoYXQg YW4gb2Zmc2V0IGNhbiBiZSBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSwgaXQgaXMNCj4gPj4g cmVhc29uYWJsZSB0byBhc3N1bWUgdGhhdCB0aGlzIGZpZWxkIG1heSBiZSBpbnRlcnByZXRlZCBh cyBzaWduZWQNCj4gPj4gYW5kL29yIG1heSBiZSB0cnVuY2F0ZWQgb24gNjQtYml0IG92ZXJmbG93 ICh3aGljaCBjb21lIGRvd24gdG8gdGhlDQo+ID4+IHNhbWUgdGhpbmcpDQo+ID4+DQo+ID4+IEkg d291bGQgcmF0aGVyIG5vdCBwYXJrIHRoaXMgZGlzY3Vzc2lvbiBhZ2Fpbi4gVGhlIFVFRkkgc3Bl YyBtYXkgYmUNCj4gPj4gcXVpcmt5IGluIHRoaXMgcmVnYXJkLCBidXQgaXQgaXMgcGVyZmVjdGx5 IGNsZWFyLg0KPiA+DQo+ID4gQXJkLA0KPiA+IEluIG15IG9waW5pb24sIHRvIGFsaWduIFVFRkkg U3BlYyB0byBBQ1BJIHNwZWMgb24gdGhpcyBzb3VuZHMgbGlrZSByZWFzb25hYmxlLg0KPiA+IERv IHlvdSBzZWUgYW55IHJlYWwgcHJvYmxlbSBpZiB3ZSBjaGFuZ2UgdGhlIG1lZXRpbmcgb2YgQWRk cmVzc1JhbmdlTWluPw0KPiA+DQo+IA0KPiBJIGFncmVlIGl0IHdvdWxkIGJlIGJlc3QgdG8gZml4 IHRoZSBzcGVjLCBidXQgb25seSBpZiBpdCBhcHBsaWVzIHJldHJvYWN0aXZlbHksIGkuZS4sIGlm DQo+IGl0IGlzIGluY29ycG9yYXRlZCBhcyBhbiBlcnJhdHVtIGludG8gdGhlIGN1cnJlbnQgdmVy c2lvbi4NCg0KQ29weSBNaWtlIGZvciBvcGluaW9ucy4NCg==