From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Kazlauskas, Nicholas" Subject: Re: [PATCH v2 2/3] drm: Add variable refresh property to DRM CRTC Date: Fri, 5 Oct 2018 12:21:20 -0400 Message-ID: References: <20180924181537.12092-1-nicholas.kazlauskas@amd.com> <20180924181537.12092-3-nicholas.kazlauskas@amd.com> <20180924183826.GX5565@intel.com> <4aa1583c-2be0-8cec-2857-6c3e489965b4@amd.com> <20180924202655.GA9144@intel.com> <20181005111059.1cd71f95@eldfell> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181005111059.1cd71f95@eldfell> Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Pekka Paalanen Cc: nicolai.haehnle-5C7GfCeVMHo@public.gmane.org, michel-otUistvHUpPR7s880joybQ@public.gmane.org, Marek.Olsak-5C7GfCeVMHo@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, manasi.d.navare-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Daniel Vetter , Alexander.Deucher-5C7GfCeVMHo@public.gmane.org, Christian.Koenig-5C7GfCeVMHo@public.gmane.org, =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= T24gMTAvMDUvMjAxOCAwNDoxMCBBTSwgUGVra2EgUGFhbGFuZW4gd3JvdGU6Cj4gSGksCj4gCj4g SSBoYXZlIGEgc29tZXdoYXQgb2YgbXkgb3duIHZpZXcgb24gd2hhdCB3b3VsZCBiZSBpbnZvbHZl ZCB3aXRoIFZSUiwKPiBhbmQgSSdkIGxpa2UgdG8gaGVhciB3aGF0IHlvdSB0aGluayBvZiBpdC4g Q29tbWVudHMgaW5saW5lLgo+IAo+IAo+IE9uIFR1ZSwgMjUgU2VwIDIwMTggMDk6NTE6MzcgLTA0 MDAKPiAiS2F6bGF1c2thcywgTmljaG9sYXMiIDxuaWNob2xhcy5rYXpsYXVza2FzQGFtZC5jb20+ IHdyb3RlOgo+IAo+PiBPbiAwOS8yNC8yMDE4IDA0OjI2IFBNLCBWaWxsZSBTeXJqw6Rsw6Qgd3Jv dGU6Cj4+PiBPbiBNb24sIFNlcCAyNCwgMjAxOCBhdCAwMzowNjowMlBNIC0wNDAwLCBLYXpsYXVz a2FzLCBOaWNob2xhcyB3cm90ZToKPj4+PiBPbiAwOS8yNC8yMDE4IDAyOjM4IFBNLCBWaWxsZSBT eXJqw6Rsw6Qgd3JvdGU6Cj4+Pj4+IE9uIE1vbiwgU2VwIDI0LCAyMDE4IGF0IDAyOjE1OjM2UE0g LTA0MDAsIE5pY2hvbGFzIEthemxhdXNrYXMgd3JvdGU6Cj4+Pj4+PiBWYXJpYWJsZSByZWZyZXNo IHJhdGUgYWxnb3JpdGhtcyBoYXZlIHR5cGljYWxseSBiZWVuIGVuYWJsZWQgb25seQo+Pj4+Pj4g d2hlbiB0aGUgZGlzcGxheSBpcyBjb3ZlcmVkIGJ5IGEgc2luZ2xlIHNvdXJjZSBvZiBjb250ZW50 Lgo+Pj4+Pj4KPj4+Pj4+IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWZhdWx0IENSVEMg cHJvcGVydHkgdGhhdCBoZWxwcwo+Pj4+Pj4gaGludCB0byB0aGUgZHJpdmVyIHdoZW4gdGhlIENS VEMgY29tcG9zaXRpb24gaXMgc3VpdGFibGUgZm9yIHZhcmlhYmxlCj4+Pj4+PiByZWZyZXNoIHJh dGUgYWxnb3JpdGhtcy4gVXNlcnNwYWNlIGNhbiBzZXQgdGhpcyBwcm9wZXJ0eSBkeW5hbWljYWxs eQo+Pj4+Pj4gYXMgdGhlIGNvbXBvc2l0aW9uIGNoYW5nZXMuCj4+Pj4+Pgo+Pj4+Pj4gV2hldGhl ciB0aGUgdmFyaWFibGUgcmVmcmVzaCByYXRlIGFsZ29yaXRobXMgYXJlIGFjdGl2ZSB3aWxsIHN0 aWxsCj4+Pj4+PiBkZXBlbmQgb24gdGhlIENSVEMgYmVpbmcgc3VpdGFibGUgYW5kIHRoZSBjb25u ZWN0b3IgYmVpbmcgY2FwYWJsZQo+Pj4+Pj4gYW5kIGVuYWJsZWQgYnkgdGhlIHVzZXIgZm9yIHZh cmlhYmxlIHJlZnJlc2ggcmF0ZSBzdXBwb3J0Lgo+Pj4+Pj4KPj4+Pj4+IEl0IGlzIHdvcnRoIG5v dGluZyB0aGF0IHdoaWxlIHRoZSBwcm9wZXJ0eSBpcyBhdG9taWMgaXQgaXNuJ3QgZmlsdGVyZWQK Pj4+Pj4+IGZyb20gbGVnYWN5IHVzZXJzcGFjZSBxdWVyaWVzLiBUaGlzIGFsbG93cyBmb3IgWG9y ZyB1c2Vyc3BhY2UgZHJpdmVycwo+Pj4+Pj4gdG8gaW1wbGVtZW50IHN1cHBvcnQgaW4gbm9uLWF0 b21pYyBzZXR1cHMuCj4+Pj4+Pgo+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogTmljaG9sYXMgS2F6bGF1 c2thcyA8bmljaG9sYXMua2F6bGF1c2thc0BhbWQuY29tPgo+IAo+IC4uLgo+IAo+Pj4+PiBBY3R1 YWxseSBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IHRoaXMgcGVyLWNydGMgdGhpbmcgaXMgYmVpbmcg YWRkZWQgYXQKPj4+Pj4gYWxsLiBZb3UgYWxyZWFkeSBoYXZlIHRoZSBwcm9wIG9uIHRoZSBjb25u ZWN0b3IuIFdoeSBkbyB3ZSB3YW50IHRvCj4+Pj4+IG1ha2UgbGlmZSBtb3JlIGRpZmZpY3VsdCBi eSByZXF1aXJpbmcgdGhlIHRoaW5nIHRvIGJlIHNldCBvbiBib3RoIHRoZQo+Pj4+PiBjcnRjIGFu ZCBjb25uZWN0b3I/Cj4+Pj4KPj4+PiBJdCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB3aXRob3V0 IGJvdGguCj4+Pj4KPj4+PiBUaGUgdXNlciBjYW4gZ2xvYmFsbHkgZW5hYmxlIG9yIGRpc2FibGUg dGhlIHZhcmlhYmxlX3JlZnJlc2hfZW5hYmxlZCBvbgo+Pj4+IHRoZSBjb25uZWN0b3IuIFRoaXMg aXMgdGhlIHVzZXIncyBwcmVmZXJlbmNlLgo+Pj4+Cj4+Pj4gV2hhdCB0aGV5IGRvbid0IGNvbnRy b2wgaXMgdGhlIHZhcmlhYmxlX3JlZnJlc2ggLSB0aGUgY29udGVudCBoaW50IHRoYXQKPj4+PiB1 c2Vyc3BhY2Ugc3BlY2lmaWVzIHdoZW4gdGhlIENSVEMgY29udGVudHMgYXJlIHN1aXRhYmxlIGZv ciBlbmFibGluZwo+Pj4+IHZhcmlhYmxlIHJlZnJlc2ggZmVhdHVyZXMgKGxpa2UgYWRhcHRpdmUg c3luYykuIFRoaXMgaXMgdXNlcnNwYWNlJ3MKPj4+PiBwcmVmZXJlbmNlLgo+Pj4KPj4+IEJ5IHVz ZXJzcGFjZSBJIGd1ZXNzIHlvdSBtZWFuIHRoZSBjb21wb3NpdG9yL2Rpc3BsYXkgc2VydmVyLiBJ IGRvbid0Cj4+PiByZWFsbHkgc2VlIHdoeSB0aGUga2VybmVsIGhhcyB0byBiZSBpbnZvbHZlZCBs aWtlIHRoaXMgaW4gYSB1c2Vyc3BhY2UKPj4+IHBvbGljeSBtYXR0ZXIuIElmIHRoZSBjb21wb3Np dG9yIGRvZXNuJ3QgdGhpbmsgdnJyIGlzIGEgZ29vZCBpZGVhIHRoZW4KPj4+IGl0IGNvdWxkIHNp bXBseSBjaG9vc2UgdG8gZGlzYWJsZSB0aGUgcHJvcCBvbiB0aGUgY29ubmVjdG9yIGV2ZW4gd2hl bgo+Pj4gcmVxdWVzdGVkIGJ5IGl0cyBjbGllbnRzLgo+Pgo+PiBUaGUgcHJvcGVydGllcyBhcmUg Ym90aCBhIGtlcm5lbCBhbmQgdXNlcnNwYWNlIEFQSSBzbyBJIHRoaW5rIGl0J3MKPj4gaW1wb3J0 YW50IHRvIHRoaW5rIGFib3V0IHRoZSB1c2VjYXNlIGFuZCBBUEkgdXNhZ2UgZm9yIGJvdGguCj4+ Cj4+IEluIGEgRFJNIGRyaXZlciB0aGUgdmFyaWFibGUgcmVmcmVzaCBjYXBhYmlsaXR5IHdpbGwg YmUgZGV0ZXJtaW5lZCBieQo+PiBjb25uZWN0b3IgdHlwZSBhbmQgdGhlIGRpc3BsYXkgdGhhdCdz IGNvbm5lY3RlZC4gVGhlIGRyaXZlciBuZWVkcyBhIHdheQo+PiB0byB0cmFjayB0aGlzIGlmIGl0 J3MgZ29pbmcgdG8gYmUgc2VuZGluZyBhbnkgc29ydCBvZiBwYWNrZXQgb3ZlciB0aGUKPj4gY29u bmVjdG9yLiBUaGUgY2FwYWJpbGl0eSBwcm9wZXJ0eSBwcm92aWRlcyBhIG1ldGhvZCBmb3IgdGhl IGRyaXZlciB0bwo+PiBkbyB0aGlzIHdoaWxlIGFsc28gZXhwb3NpbmcgdGhpcyBpbmZvcm1hdGlv biB0byB0aGUgdXNlcnNwYWNlIGZvciBxdWVyeWluZy4KPj4KPj4gVGhlIHZhcmlhYmxlX3JlZnJl c2hfZW5hYmxlZCBwcm9wZXJ0eSBleGlzdHMgYmVjYXVzZSBub3QgYWxsIHVzZXJzIHdpbGwKPj4g d2FudCB0aGlzIGZlYXR1cmUgZW5hYmxlZC4gSSB0aGluayBpdCBtYWtlcyBzZW5zZSB0byBwbGFj ZSB0aGlzCj4+IGFsb25nc2lkZSB0aGUgY2FwYWJpbGl0eSBwcm9wZXJ0eSBvbiB0aGUgY29ubmVj dG9yIGJlY2F1c2Ugb2YgdGhlaXIKPj4gcmVsYXRpb24gYW5kIGJlY2F1c2Ugb2YgdGhlIGVhc2Ug b2YgYWNjZXNzIGZvciB0aGUgZW5kIHVzZXIgaW4gZXhpc3RpbmcKPj4gdXNlcnNwYWNlIHN0YWNr cyAtIHhyYW5kciBtYWtlcyB0aGlzIGVhc3kuCj4gCj4gSSdtIG5vdCBzdXJlIEkgdW5kZXJzdG9v ZCB5b3VyIGludGVudGlvbiBoZXJlLiBEbyB5b3UgbWVhbiB0aGF0IHlvdQo+IGV4cGVjdCBnYW1l cyAoZS5nLiB2aWEgTWVzYSkgdG8gdG9nZ2xlIHRoZSBjb25uZWN0b3IgcHJvcGVydHkgdmlhIFJh bmRSCj4gdG8gdGVsbCBpZiB0aGV5IHdpc2ggZm9yIFZSUj8KPiAKPiBUaGUgUmFuZFIgaW50ZXJm YWNlIGlzIGZvciBkaXNwbGF5IGNvbmZpZ3VyYXRpb24gdXRpbGl0aWVzLCBsaWtlIHRoZSBVSXMK PiB0aGF0IGRlc2t0b3AgZW52aXJvbm1lbnRzIHVzZSB0byBjb25maWd1cmUgbW9uaXRvcnMuIEl0 IHNob3VsZCBub3QgYmUKPiB1c2VkIGJ5IGFwcGxpY2F0aW9ucyBsaWtlIGdhbWVzIHRvIG1vZGlm eSBhbnl0aGluZy4gSSBiZWxpZXZlIHRoZXJlIGFyZQo+IGxvdHMgb2YgYXBwcyBvdXQgdGhlcmUg dGhhdCBlbnJhZ2UgdXNlcnMgYnkgYWJ1c2luZyBSYW5kUiwgYnV0IG9uZQo+IHNob3VsZCBub3Qg YmFzZSBhbiBpbnRlcmZhY2UgZGVzaWduIG9uIHN1Y2ggYWJ1c2UuCj4gCj4gSWYgZ2FtZXMgYXJl IG5vdCB1c2luZyBSYW5kUiB0byBjb21tdW5pY2F0ZSB0aGUgd2lzaCBmb3IgVlJSLCB3aGF0IGRv Cj4gdGhleSB1c2U/IERvZXMgdGhlIFgxMSBQcmVzZW50IGV4dGVuc2lvbiBoYXZlIHNvbWV0aGlu ZyBmb3IgaXQ/Cj4gCj4gV2hhdCBpcyB0aGUgYXBwbGljYXRpb24tZmFjaW5nIEFQSSB0byByZXF1 ZXN0IFZSUiwgaXMgaXQgaW4gR0xYLCBFR0wsCj4gVnVsa2FuLCBzb21ldGhpbmcgZWxzZT8KPiAK PiBCdHcuIEkgd291bGQgbm90IGV4cGVjdCB4cmFuZHIgdG8gcXVhbGlmeSBhcyBwcm9wZXIgdXNl cnNwYWNlIHRvCj4gdmFsaWRhdGUgbmV3IGtlcm5lbCBVQUJJLCBsaWtlIG5ldyBwcm9wZXJ0aWVz LiBEaWQgeW91IGhhdmUgc29tZXRoaW5nCj4gZWxzZSBmb3IgdGhlIHVzZXJzcGFjZSBzZXR0YWJs ZSBjb25uZWN0b3IgcHJvcGVydHk/CgpUaGUgdXNlY2FzZSBJIHdhcyBjb25zaWRlcmluZyB3aXRo IHZhcmlhYmxlX3JlZnJlc2hfZW5hYmxlZCB3YXMgYSAKZ3JhcGhpY2FsIFVJIGluIGEgc2V0dGlu Z3MgYXBwIHdpdGhpbiBkZXNrdG9wIGVudmlyb25tZW50IGFmdGVyIHRoZXkndmUgCmNoZWNrZWQg dmFyaWFibGVfcmVmcmVzaF9jYXBhYmxlLiBJIHdhcyB0aGlua2luZyBvZiB0aGlzIGFzIGEgc29y dCBvZiAKInN0YW5kYXJkIiB3YXkgb2YgY29uZmlndXJpbmcgd2hldGhlciB0aGUgdXNlciB3YW50 cyBWUlIgZW5hYmxlZCBidXQgCnlvdSdyZSByaWdodCBhYm91dCB4cmFuZHIgbm90IHJlYWxseSBk ZW1vbnN0cmF0aW5nIHRoaXMuCgpFdmVyeSBkZXNrdG9wIGVudmlyb25tZW50IGFscmVhZHkgaGFz IHRoZWlyIG93biB3YXkgb2YgZGVhbGluZyB3aXRoIApjb25maWd1cmF0aW9uIGFuZCBwZXJzaXN0 aW5nIHNldHRpbmdzIHNvIHRoaXMgZG9lc24ndCBicmluZyBhbnkgYmVuZWZpdCAKaW4gdGhhdCBy ZWdhcmQuCgpJJ20gYWxtb3N0IGZpbmlzaGVkIHdyaXRpbmcgdXAgdjNzIHRoYXQgc2hvdWxkIGFk ZHJlc3MgdGhlIGNvbmNlcm5zIHRoYXQgClZpbGxlLCBEYW5pZWwgYW5kIHlvdSBoYXZlIHJhaXNl ZCByZWdhcmRpbmcgdGhpcy4gVGhleSBkcm9wIHRoZSAKInZhcmlhYmxlX3JlZnJlc2hfZW5hYmxl ZCIgcHJvcGVydHkgb24gdGhlIGNvbm5lY3Rvci4KCj4gCj4+IFRoZSB2YXJpYWJsZV9yZWZyZXNo IENSVEMgcHJvcGVydHkgZXhpc3RzIGZvciBhIGZldyByZWFzb25zLgo+Pgo+PiBVc2Vyc3BhY2Ug bmVlZHMgYSBtZXRob2QgdmlhIHRoZSBhdG9taWMgQVBJIHRvIGxldCBhIERSTSBkcml2ZXIga25v dwo+PiB0aGF0IGl0IHdhbnRzIHZhcmlhYmxlIGZyYW1lIHRpbWluZyB0byBiZSBlbmFibGVkLiBU aGUgY29ubmVjdG9yIGVuYWJsZQo+PiBwcm9wZXJ0eSBjZXJ0YWlubHkgc2F0aXNmaWVzIHRoaXMg Y29uZGl0aW9uIC0gYnV0IEkgdGhpbmsgdGhlcmUgYXJlCj4+IG90aGVyIHRvIHRha2UgaW50byBj b25zaWRlcmF0aW9uIGhlcmUuCj4gCj4gSSBhZ3JlZSB0aGF0IHRoaXMgQ1JUQyBwcm9wZXJ0eSBt YWtlcyBzZW5zZS4KPiAKPj4gV2hlbmV2ZXIgSSBtZW50aW9uZWQgdmFyaWFibGUgcmVmcmVzaCAi ZmVhdHVyZXMiLCB3aGF0IEkgcmVhbGx5IG1lYW50Cj4+IHdhcyBvcGVyYXRpbmcgaW4gb25lIG9m IHR3byBtb2RlczoKPj4KPj4gKDEpIExldHRpbmcgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgYWRq dXN0IHJlZnJlc2ggYXV0b21hdGljYWxseSBiYXNlZAo+PiBvbiB0aGUgZmxpcCByYXRlIG9uIGEg Q1JUQyBmcm9tIGEgc2luZ2xlIGFwcGxpY2F0aW9uCj4+Cj4+ICgyKSBTZXR0aW5nIGEgZml4ZWQg ZnJhbWUgZHVyYXRpb24gYmFzZWQgb24gdGhlIGZsaXAgcmF0ZSBvbiBhIENSVEMgZnJvbQo+PiBh IHNpbmdsZSBhcHBsaWNhdGlvbgo+IAo+IEkgd29uZGVyIGlmIHRoYXQncyB0b28gbXVjaCBtYWdp YyBpbiB0aGUga2VybmVsLi4uIHdoYXQgd291bGQgYmUgd3JvbmcKPiB3aXRoIHNpbXBseSBmbGlw cGluZyBBU0FQIHdoZW4gVlJSIGlzIGFjdGl2ZT8KPiAKPiBIb3cgd2lsbCB1c2Vyc3BhY2UgYmUg YWJsZSB0byBwcmVkaWN0IGNvbWluZyBmbGlwIG9wcG9ydHVuaXRpZXMgaWYgdGhlCj4ga2VybmVs IGRvZXMgc28gbXVjaCBtYWdpYz8KClRoZSBrZXJuZWwgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0byBk byBtdWNoIG1vcmUgdGhhbiBsZXQgdGhlIGhhcmR3YXJlIAprbm93IHRoZSB2YXJpYWJsZSByZWZy ZXNoIHJhbmdlLiBUaGUgIm1hZ2ljIiBpcyBwZXJmb3JtZWQgYnkgaGFyZHdhcmUuCgpNb3N0IGdh bWVzIHdvdWxkIGxpa2UgdG8gcmVuZGVyIGFzIGZhc3QgYXMgcG9zc2libGUgdG8gZGVsaXZlciBh IG1vcmUgCnJlc3BvbnNpdmUgYW5kIHNtb290aGVyIGltYWdlIHRvIHRoZSB1c2VyLiBNYW55IG9m IHRoZXNlIGFyZSBhbHNvIApyZXNvdXJjZSBpbnRlbnNpdmUgYW5kIHdvbid0IGFsd2F5cyBiZSBh YmxlIHRvIHJlbmRlciBhdCB0aGUgZml4ZWQgCnJlZnJlc2ggcmF0ZSBvZiB0aGUgcGFuZWwgKGVz cGVjaWFsbHkgZm9yIGhpZ2hlciByZWZyZXNoIHJhdGVzIGxpa2UgCjE0NEh6KS4gVGhlIHVzZXIg d2lsbCBleHBlcmllbmNlIHN0dXR0ZXJpbmcgaWYgdGhlIGdhbWUgdGFrZXMgdG9vIGxvbmcgCnRv IHJlbmRlciBhbmQgbWlzc2VzIHRoZSB2Ymxhbmsgd2luZG93IGZvciB0aGUgZmxpcC4KCkR5bmFt aWMgVlJSIGFkanVzdG1lbnQgY2FuIHJlc29sdmUgdGhpcyBwcm9ibGVtLiBUaGUgaGFyZHdhcmUg Y2FuIGxvd2VyIAp0aGUgcmVmcmVzaCByYXRlIGFuZCBpbmNyZWFzZSB0aGUgdmJsYW5rIHdpbmRv dyBpbiByZXNwb25zZSB0byB0aGlzIHNvIAp0aGUgdXNlciBkb2Vzbid0IGV4cGVyaWVuY2Ugc3R1 dHRlcmluZyAob3IgbGF0ZW5jeSkuCgpVc2Vyc3BhY2Ugc2hvdWxkbid0IHByZWRpY3QgYW55dGhp bmcuCgo+IAo+PiBJbiBib3RoIGNhc2VzIHRoZSBpbXBvcnRhbnQgdGhpbmcgdG8gbm90ZSBpcyB0 aGF0IHRoZXkncmUgYm90aCBkZXBlbmRlbnQKPj4gb24gaG93IG9mdGVuIGEgQ1JUQyBpcyBmbGlw cGluZy4gVGhlcmUncyBhbHNvIHRoZSAicmVxdWlyZW1lbnQiIGZvcgo+PiBzaW5nbGUgYXBwbGlj YXRpb24gaW4gYm90aCBjYXNlcyAtIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBhcHBsaWNhdGlvbnMK Pj4gaXNzdWluZyBmbGlwcyB0aGVuIHRoZSBoYXJkd2FyZSBjYW4ndCBkZXRlcm1pbmUgdGhlIGNv cnJlY3QgY29udGVudAo+PiByYXRlLiBUaGUgcmVzdWx0aW5nIHVzZXIgZXhwZXJpZW5jZSBpcyBn b2luZyB0byBiZSBuZWdhdGl2ZSBhcyB0aGUKPj4gbW9uaXRvciBzZWVtaW5nbHkgYWRqdXN0cyB0 byBhIHJhbmRvbSByYXRlLgo+Pgo+PiBXaXRoIHRoZSBleGlzdGluZyBrZXJuZWxzcGFjZSBhbmQg dXNlcnNwYWNlIHN0YWNrcyBhIERSTSBkcml2ZXIgY2FuJ3QKPj4gcmVhc29uYWJseSB1bmRlcnN0 YW5kIHdoZXRoZXIgYSBzaW5nbGUgYXBwbGljYXRpb24gaXMgZmxpcHBpbmcgb3Igbm90Cj4+IGFu ZCB3aGF0IHZhcmlhYmxlIHJlZnJlc2ggIm1vZGUiIHRvIG9wZXJhdGUgaW4gLSB0aGVzZSBib3Ro IGRlcGVuZCBvbgo+PiB3aGF0J3MgaGFwcGVuaW5nIGluIHVzZXJzcGFjZS4KPj4KPj4gVGhlc2Ug ZmFjdG9ycyBhcmUgZGVjaWRlZCBpbiB1c2Vyc3BhY2Ugd2hlbiBpbnRlcmZhY2luZyB3aXRoIGEg RFJNIENSVEMuCj4+IFRoZSB1c2Vyc3BhY2UgaW50ZWdyYXRpb24gcGF0Y2hlcyBJJ3ZlIHBvc3Rl ZCBhbG9uZ3NpZGUgdGhpcyBpbnRlcmZhY2UKPj4gZGVtb25zdHJhdGUgdGhpcyB1c2FnZSAtIGNo ZWNrcyBhcmUgZG9uZSBhZ2FpbnN0IGEgQ1JUQyB0byBzZWUgaWYgdGhlCj4+IGFwcGxpY2F0aW9u IGZ1bGx5IGNvdmVycyB0aGUgc3VyZmFjZSBhbmQgdGhlIGF1dG9tYXRpYyBhZGp1c3RtZW50IG1v ZGUKPj4gaXMgb25seSBlbmFibGVkIGZvciB3aGVuIGZsaXBzIGFyZSBpc3N1ZWQgZm9yIHRoZSBD UlRDIG9yaWdpbmF0aW5nIGZyb20KPj4gdGhhdCBhcHBsaWNhdGlvbi4KPj4KPj4gRGV0ZXJtaW5p bmcgd2hpY2ggY29ubmVjdG9ycyB1c2UgdGhlIENSVEMgY2FuIGNlcnRhaW5seSBiZSBkb25lIGFu ZCB0aGUKPj4gcHJvcGVydHkgY291bGQgYmUgY2hhbmdlZCB0aGVyZSwgYnV0IEkgZG9uJ3QgdGhp bmsgdGhpcyBsb2dpY2FsbHkKPj4gZm9sbG93cyBmcm9tIHRoZSBBUEkgdXNhZ2UgZGVzY3JpYmVk IGFib3ZlLgo+Pgo+PiBUaGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGJlaW5nIGEgZGVmYXVsdCBw cm9wZXJ0eSBvbiB0aGUgQ1JUQyBpcyB0aGF0IEkKPj4gZG9uJ3QgdGhpbmsgdXNlcnNwYWNlIHNo b3VsZCBuZWVkIHRvIGtlZXAgdHJhY2sgb2Ygd2hhdCdzIGFjdHVhbGx5Cj4+IGNvbm5lY3RlZCB1 c2luZyB0aGUgQ1JUQy4gQSB1c2VyIGNhbiBob3RwbHVnIGRpc3BsYXlzIGF0IHdpbGwgb3IKPj4g ZW5hYmxlL2Rpc2FibGUgdmFyaWFibGUgcmVmcmVzaCBzdXBwb3J0IHZpYSB0aGVpciBkaXNwbGF5 J3MgT1NELgo+PiBDYXBhYmlsaXRpZXMgY2FuIGNoYW5nZSBhbmQgdGhpcyBpcyBvbmx5IHNvbWV0 aGluZyBhIGRyaXZlciByZWFsbHkgbmVlZHMKPj4gdG8gY29uY2VybiB0aGVtc2VsdmVzIHdpdGgg LSB0aGUgZHJpdmVyIGlzIHdoYXQgc2VuZHMgdGhlIGNvbnRyb2wKPj4gcGFja2V0cyB0byB0aGUg aGFyZHdhcmUuCj4gCj4gVXNlcnNwYWNlIG11c3QgYWxyZWFkeSB0cmFjayBjYXJlZnVsbHkgd2hh dCBpcyBjb25uZWN0ZWQgYW5kIHdoYXQgaXMKPiBkcml2ZW4gdGhyb3VnaCB3aGljaCBDUlRDLCBv dGhlcndpc2UgaXQgY2Fubm90IGRyaXZlIHRoZSBLTVMgQVBJCj4gY29ycmVjdGx5Lgo+IAo+PiBJ IHByb2JhYmx5IGNvdWxkIGhhdmUgZ29uZSBpbnRvIG1vcmUgZGV0YWlsIGFib3V0IHNvbWUgb2Yg dGhpcyBpbiB0aGUKPj4gY292ZXIgbGV0dGVyIGl0c2VsZiBmb3IgdGhlc2UgcGF0Y2hzZXRzLiBU aGVzZSBwYXRjaGVzIHdlcmUgYWN0dWFsbHkgYQo+PiBjb25uZWN0b3Igb25seSBpbnRlcmZhY2Ug b3JpZ2luYWxseSBidXQgZXZvbHZlZCBhZnRlciBkZXZlbG9waW5nIHRoZQo+PiBhY3R1YWwgaW1w bGVtZW50YXRpb24uCj4+Cj4+PiAgICAKPj4+Pgo+Pj4+IFdoZW4gYm90aCBwcmVmZXJlbmNlcyBh Z3JlZSwgb25seSB0aGVuIHdpbGwgdmFyaWFibGUgcmVmcmVzaCBmZWF0dXJlcyBiZQo+Pj4+IGVu YWJsZWQuCj4+Pj4KPj4+PiBUaGUgcmVhc29uaW5nIGZvciB0aGUgc3BsaXQgaXMgYmVjYXVzZSBu b3QgYWxsIGNvbnRlbnQgaXMgc3VpdGFibGUgZm9yCj4+Pj4gdmFyaWFibGUgcmVmcmVzaC4gRGVz a3RvcCBlbnZpcm9ubWVudHMsIHdlYiBicm93c2VycywgZXRjIG9ubHkgdHlwaWNhbGx5Cj4+Pj4g ZmxpcCB3aGVuIG5lZWRlZCAtIHdoaWNoIHdpbGwgcmVzdWx0IGluIGRpc3BsYXkgZmxpY2tlcmlu Zy4KPiAKPiBGbGlja2VyaW5nPyBXaGF0IGRvIHlvdSBtZWFuPwoKVGhpcyBpcyBhIHByb3BlcnR5 IG9mIGhvdyBwYW5lbHMgd29yay4KClRoZSBsdW1pbmFuY2UgZm9yIGEgcGFuZWwgd2lsbCB2YXJ5 IGJhc2VkIG9uIGhvdyBsb25nIHRoZSB2cmVmcmVzaCBpcy4gClNpbmNlIHRoZSB2cmVmcmVzaCBs ZW5ndGggaXMgY2hhbmdpbmcgYXMgcGFydCBvZiBWUlIgeW91J3JlIG1vcmUgbGlrZWx5IAp0byBu b3RpY2UgdGhlIGRpZmZlcmVuY2UgaW4gbHVtaW5hbmNlIHRoZSBiaWdnZXIgdGhlIGRpZmZlcmVu Y2UgaXMuCgpUaGUgZGlmZmVyZW5jZSB3aWxsIGJlIGxhcmdlc3Qgd2hlbiBzd2l0Y2hpbmcgZnJv bSB0aGUgbWluIHZyZWZyZXNoIHRvIAp0aGUgbWF4IHZyZWZyZXNoIGR1cmF0aW9uLgoKTGFyZ2Ug ZGlmZmVyZW5jZXMgY2FuIG9jY3VyIGZvciBhcHBsaWNhdGlvbnMgdGhhdCByZW5kZXIgb24gZGVt YW5kIGxpa2UgCmEgd2ViIGJyb3dzZXIgKGFuZCB3aHkgeW91IHdvdWxkbid0IHdhbnQgVlJSIGVu YWJsZWQgZm9yIHRob3NlKS4gVGhlIApoYXJkd2FyZSB3b3VsZCBjb250aW51b3VzbHkgd2FpdCBm b3IgYSBmbGlwIHRoYXQgaXNuJ3QgY29taW5nLiBUaGVuIGlmIAp0aGUgdXNlciBtb3ZlcyB0aGVp ciBjdXJzb3Igb3IgdGhlIHBhZ2UgdXBkYXRlcyBpdCdzIGdvaW5nIHRvIGhhcHBlbiAKInJhbmRv bWx5IiBpbiB0aGF0IHdpbmRvdyBhbmQgdGhlIGhhcmR3YXJlIHdpbGwgYWRqdXN0IHRvIHRoYXQu Cgo+IAo+Pj4+Cj4+Pj4gVGhlIHVzZXJzcGFjZSBpbnRlZ3JhdGlvbiBhcyBwYXJ0IG9mIHRoZXNl IHBhdGNoZXMgZGVtb25zdHJhdGVzIGVuYWJsaW5nCj4+Pj4gdmFyaWFibGVfcmVmcmVzaCBvbiB0 aGUgQ1JUQyBzZWxlY3RpdmVseS4KPiAKPiAKPiBJIGJlbGlldmUgdGhhdCBWUlIgb24gWDExIHdv dWxkIHByb2JhYmx5IGRlcGVuZCBvbiB0aGVzZSBiaXRzOgo+IAo+IDEuIEhhcmR3YXJlIGNhcGFi aWxpdHkKPiAJV2hldGhlciB0aGUgbW9uaXRvciwgdGhlIENSVEMgaGFyZHdhcmUsIGFuZCB0aGUg a2VybmVsIGRyaXZlcgo+IAlhbGwgYWdyZWUgdGhhdCBWUlIgaXMgcG9zc2libGUuCj4gCj4gMi4g VXNlciBwcmVmZXJlbmNlCj4gCUEgdG9nZ2xlIG9uIHRoZSBkZXNrdG9wIGVudmlyb25tZW50J3Mg ZGlzcGxheSBzZXR0aW5ncwo+IAlhcHBsaWNhdGlvbiB0byBhbGxvdyBvciBkaXNhbGxvdyBWUlIu IEFmdGVyIGFsbCwgdmlkZW8gbW9kZQo+IAljb25maWd1cmF0aW9uIGlzIGhlcmUgdG9vLCBhbmQg aWRlYWxseSBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdAo+IAltZXNzIHdpdGggdGhlIHZpZGVvIG1v ZGUgZGlyZWN0bHkuCj4gCj4gMy4gQXBwbGljYXRpb24gcHJlZmVyZW5jZQo+IAlXaGV0aGVyIHRo ZSBhcHBsaWNhdGlvbiwgZS5nLiBhIGdhbWUsIGlzIHByZXBhcmVkIHRvIGRlYWwgd2l0aAo+IAlW UlIgYW5kIHdpc2hlcyBpdCB0byBiZSBlbmFibGVkLgo+IAo+IDQuIFggc2VydmVyIHNjZW5lZ3Jh cGgKPiAJV2hpY2ggd2luZG93cyBoYXBwZW4gdG8gYmUgc2hvd2luZyBvbiB0aGUgVlJSLWNhcGFi bGUgb3V0cHV0Cj4gCWFuZCBkb2VzIHRoYXQgc2NlbmVncmFwaCBhbGxvdyBlLmcuIGZsaXBwaW5n IHN0cmFpZ2h0IHRvIGNsaWVudAo+IAlidWZmZXJzIGluc3RlYWQgb2YgaGF2aW5nIHRoZSBYIHNl cnZlciBjb3B5IGludG8gZnJhbWVidWZmZXJzCj4gCW9mIGl0cyBvd24uCj4gCj4gWW91IG1lbnRp b25lZCB0aGF0IFZSUiBwcm9iYWJseSBkb2Vzbid0IG1ha2Ugc2Vuc2UgaWYgdGhlcmUgYXJlCj4g bXVsdGlwbGUgd2luZG93cyBzaG93aW5nIGluIHRoZSBzYW1lIG91dHB1dCwgc28gcG9pbnQgNCB3 b3VsZCBjb3Zlcgo+IHRoYXQuIEFsc28gZ2FtZXMgZXRjLiB3b3VsZCBhaW0gdG8gaGl0IHRoZSBk aXJlY3Qgc2Nhbm91dCBwYXRoIHRvIGF2b2lkCj4gd2FzdGluZyB0aW1lIGluIHRoZSBYIHNlcnZl ciBjb3B5LCBzbyBpdCBzZWVtcyB0aGF0IHJlcXVpcmluZyBmbGlwcyB0bwo+IGNsaWVudCBidWZm ZXJzIHdvdWxkIGJlIHJlYXNvbmFibGUgZm9yIGVuYWJsaW5nIFZSUi4gU291bmRzIGxpa2UgdGhh dAo+IGlzIGV4YWN0bHkgaG93IHlvdSBpbXBsZW1lbnRlZCBpdCBpbiB4Zjg2LXZpZGVvLWFtZGdw dSwgaXNuJ3QgaXQ/Cj4gCj4gU2tpbW1pbmcgdGhyb3VnaCB5b3VyIHByb3Bvc2FsLCBpdCBzZWVt cyB5b3UgaGF2ZSBjb3ZlcmVkIDMgb3V0IG9mIDQKPiBwb2ludHMuIERpZCB5b3Ugb3IgSSBtaXNz IHNvbWV0aGluZz8gWW91IGNhbm5vdCBoYXZlIHBvaW50cyAyIGFuZCAzCj4gZmlnaHQgb3ZlciB0 aGUgY29udHJvbCBvZiB0aGUgc2FtZSBwcm9wZXJ0eS4KPiAKPiBIb3cgZG8geW91IGVudmlzaW9u IFZSUiB0byBpbnRlcmFjdCB3aXRoIFgxMSBjb21wb3NpdGluZyBtYW5hZ2Vycz8KPiAKPiBJIHBy ZXN1bWUgY29tcG9zaXRpbmcgbWFuYWdlcnMgYWltIGZvciB0aGUgZGlyZWN0IHNjYW5vdXQgcGF0 aCBpbiB0aGUgWAo+IHNlcnZlciB0byBhdm9pZCB5ZXQgYW5vdGhlciBjb3B5IHRoZXJlLCByaWdo dD8gRG9lcyBwb2ludCA0IG5lZWQgdG8KPiBleGNsdWRlIHRoZSBDb21wb3NpdGUgT3ZlcmxheSBX aW5kb3cgKENPVykgZnJvbSBhbGxvd2VkIFZSUiB3aW5kb3dzPwo+IAo+IAo+IEdpdmVuIGFsbCB0 aGUgYWJvdmUsIEkgd291bGQgbGlrZSB0byBxdWVzdGlvbiB0aGUgY2hvaWNlIG9mIHRyeWluZyB0 bwo+IGFjY29tbW9kYXRlIFgxMSBpbnRlcmZhY2VzIGRpcmVjdGx5IGluIHRoZSBEUk0gVUFCSS4g VGhlcmUgc2VlbXMgdG8gYmUKPiBxdWl0ZSBtYW55IGJpdHMgY29udHJvbGxlZCBieSBkaWZmZXJl bnQgcHJvY2Vzc2VzIGFuZCBWUlIgc2hvdWxkIGJlCj4gYWN0aXZlIG9ubHkgd2hlbiB0aGV5IGFs bCBhZ3JlZS4gVGhlcmVmb3JlLCBpZiB5b3Ugd2FudCBlbmQgdXNlcgo+IGFwcGxpY2F0aW9ucyB0 byByZWx5IG9uIHN0cmFpZ2h0IGNvbm5lY3RvciBwcm9wZXJ0eSBwYXNzLXRocm91Z2ggdmlhCj4g UmFuZFIsIHlvdSBlbmQgdXAgd2l0aCBtb3JlIHByb3BlcnRpZXMgdGhhbiBzdHJpY3RseSBuZWNl c3NhcnksCj4gY29tcGxpY2F0aW5nIHRoZSBVQUJJLgo+IAo+IEluIG90aGVyIHdvcmRzLCBJIGFn cmVlIHdpdGggdGhlIGNyaXRpY2lzbSBoZXJlIGJ5IFZpbGxlIGFuZCBEYW5pZWwKCllvdXIgaW50 ZXJwcmV0YXRpb24gb2YgdGhlIFgxMSBzdGFjayBpcyBtb3N0bHkgdGhlIHNhbWUgYXMgbWluZSB3 aXRoIAptaW5vciBkaWZmZXJlbmNlcyBmb3IgdGhlIDItNC4KCkZvciB0aGUgc2FrZSBvZiB0aGUg ZXhwbGFuYXRpb24gSSdtIGFjdHVhbGx5IGdvaW5nIHRvIGRpc2N1c3Mgd2hhdCdzIApwYXJ0IG9m IHRoZSBwbGFuIGZvciB2MyBoZXJlIHNpbmNlIGl0J3MgYSBsaXR0bGUgc2ltcGxlciBhbmQgc2hv dWxkIAphZGRyZXNzIHlvdXIgY29uY2VybnMuCgpUaGVyZSdzIGEgbGFyZ2UgbGlicmFyeSBvZiBl eGlzdGluZyBnYW1lcyBhbmQgbm8gbW9kaWZpY2F0aW9uIHNob3VsZCBiZSAKbmVlZGVkIGZvciB0 aGVtIHRvIHN1cHBvcnQgdGhlIGR5bmFtaWMgVlJSIGFkanVzdG1lbnQuIFRoZXkgYWxsIHNoYXJl IGEgCmNvbW1vbiByZW5kZXIgc3RhY2sgd2l0aCBHTCBvciBWdWxrYW4uIFNvIG1lc2EgY2FuIGJl IGxldmVyYWdlZCB0byAKIm1hcmsiIHRoZSBhcHBsaWNhdGlvbnMgYXMgc3VpdGFibGUgZm9yIFZS UiAtIHdpdGggYSB3aW5kb3cgcHJvcGVydHkgaW4gCnRoaXMgY2FzZS4gVGhlcmUgYXJlIGxlc3Mg YXBwbGljYXRpb25zIHRoYXQgYXJlIHVuc3VpdGFibGUgdGhhbiB0aGVyZSAKYXJlIHN1aXRhYmxl IHNvIGEgYmxhY2tsaXN0IGFwcHJvYWNoIGlzIGRvbmUgaGVyZSAtIGFuIG9wdC1vdXQgYXBwcm9h Y2ggCmZvciBhcHBsaWNhdGlvbiBwcmVmZXJlbmNlLiBUaGlzIGNvdmVycyAzLgoKVXNlciBwcmVm ZXJlbmNlIGNhbiBiZSBoYW5kbGVkIGFzIHBhcnQgb2YgdGhlIEREWCBkcml2ZXIgd2l0aCBzb21l dGhpbmcgCmxpa2UgYW4gWCBPcHRpb24uIERyb3BwaW5nIHRoZSB2YXJpYWJsZV9yZWZyZXNoX2Vu YWJsZWQgcHJvcGVydHkgaW4gCmZhdm9yIG9mIHRoaXMgd29ya3MuIFRoaXMgY292ZXJzIDIuCgpG b3IgYXBwbGljYXRpb24gc3VpdGFiaWxpdHksIHRoZSBQcmVzZW50IGV4dGVuc2lvbiB3aWxsIGJl IGxldmVyYWdlZCAKaGVyZSBzaW5jZSBpdCBjb3ZlcnMgdGhlIGxvZ2ljYWwgcmVzdHJpY3Rpb25z IChzaW5nbGUgYXBwbGljYXRpb24sIENSVEMgCmNvdmVyZWQpIGZvciB0aGlzIHByb2JsZW0uIElm IHRoZSB3aW5kb3cgaXMgZmxpcHBpbmcgdmlhIHRoZSBleHRlbnNpb24gCnRoZW4gaXQncyBzdWl0 YWJsZS4gVGhpcyBjb3ZlcnMgNC4KClRoZSBDUlRDIFZSUiBlbmFibGUgcHJvcGVydHkgd291bGQg dGhlbiBiZSBzZXQgaW4gdGhlIEREWCBkcml2ZXIgd2hlbiAKdXNlciBwcmVmZXJlbmNlIGFuZCBh cHBsaWNhdGlvbiBzdWl0YWJpbGl0eSBtYXRjaC4KCldoaWNoIHRoZW4gbGVhZHMgaW50byAxIC0g aXQgd2lsbCBvbmx5IGJlIGVuYWJsZWQgd2hlbiB0aGUgaGFyZHdhcmUgaXMgCmNhcGFibGUuCgpN b3N0IGNvbXBvc2l0b3JzIGZ1bmN0aW9uIHdlbGwgdW5kZXIgdGhpcyBzdGFjay4gSXQgd2lsbCB2 YXJ5IGRlcGVuZGluZyAKb24gY29tcG9zaXRvciBzdXBwb3J0IGZvciB3aW5kb3cgdW5yZWRpcmVj dGlvbiB0byBsZXQgdGhlIHdpbmRvdyBmbGlwIAp2aWEgdGhlIFByZXNlbnQgZXh0ZW5zaW9uLiBN dXR0ZXIgaGFuZGxlcyB0aGlzIHdpdGhvdXQgYW55IGNvbmZpZ3VyYXRpb24gCmFuZCBrd2luIGNh biBiZSBjb25maWd1cmVkIHRvIHdvcmsgd2l0aCB0aGVzZSBwYXRjaGVzLiBDb21wdG9uIGNhbiBi ZSAKY29uZmlndXJlZCB0byBzdXBwb3J0IHVucmVkaXJlY3Rpb24gYXMgd2VsbC4KClRoZXNlIChh bW9uZyBvdGhlcnMpIGFyZSBjb3ZlcmVkIGFzIHBhcnQgb2YgdGhlIGJsYWNrbGlzdCBmb3IgdGhl IG1lc2EgCnBhdGNoZXMuIFRoZXkgZG8gbmVlZCB0byBiZSBleHBsaWNpdGx5IGV4Y2x1ZGVkLgoK PiAKPiAKPiBPbiB0aGUgb3RoZXIgaGFuZCwgaW4gV2F5bGFuZCBhcmNoaXRlY3R1cmUsIHRoZXJl IGlzIG9ubHkgb25lIHNpbmdsZQo+IHVzZXJzcGFjZSBwcm9jZXNzIHlvdSBuZWVkIHRvIGNvbnNp ZGVyIGluIHRoZSBEUk0gVUFCSTogdGhlIGRpc3BsYXkKPiBzZXJ2ZXI6Cj4gLSBUaGVyZSBpcyBu byBzZXBhcmF0ZSBjb21wb3NpdGluZyBtYW5hZ2VyIHByb2Nlc3MuCj4gLSBUaGVyZSBpcyBubyBz ZXBhcmF0ZSBhcHBsaWNhdGlvbiB0byBoYW5kbGUgdXNlciBwcmVmZXJlbmNlIChwb2ludCAyKTsK PiAgICB3ZWxsLCBub3QgaW4gdGhlIHNlbnNlIHRoYXQgeW91IHdvdWxkIG5lZWQgdG8gY29uc2lk ZXIgaXQgaW4gdGhlIERSTQo+ICAgIFVBQkksIGJlY2F1c2UgaXQgd2lsbCBnbyB0aHJvdWdoIHRo ZSBkaXNwbGF5IHNlcnZlciB0aGF0IGlzIHBhcnQgb2YKPiAgICB0aGUgZGVza3RvcCByYXRoZXIg dGhhbiBieXBhc3NpbmcgdGhlIGRlc2t0b3AuCj4gLSBUaGVyZSBpcyBubyBEUk0gcHJvcGVydHkg cGFzcy10aHJvdWdoIHRvIGVuZC11c2VyIGFwcGxpY2F0aW9ucywKPiAgICBpbnN0ZWFkIHRoZXJl IHdpbGwgYmUgZGVkaWNhdGVkIHByb3RvY29sIGV4dGVuc2lvbnMgdG8gbGV0IHRoZQo+ICAgIGRp c3BsYXkgc2VydmVyIG1ha2UgdGhlIGZpbmFsIGNhbGwuCj4gCj4gVGhlcmVmb3JlLCBpdCB3b3Vs ZCBiZSBmaW5lIHRvIGhhdmUganVzdCB0d28gYml0czoKPiAKPiAxLiBIYXJkd2FyZSBjYXBhYmls aXR5Cj4gCVdoZXRoZXIgdGhlIG1vbml0b3IsIHRoZSBDUlRDIGhhcmR3YXJlLCBhbmQgdGhlIGtl cm5lbCBkcml2ZXIKPiAJYWxsIGFncmVlIHRoYXQgVlJSIGlzIHBvc3NpYmxlLgo+IAo+IDIuIC0g NC4gV2hldGhlciB1c2Vyc3BhY2UgKGkuZS4gdGhlIGRpc3BsYXkgc2VydmVyKSB3YW50cyB0byB1 c2UgVlJSIG9yCj4gCW5vdC4gVGhpcyB3b3VsZCBiZSB0aGUgQ1JUQyBwcm9wZXJ0eS4KCkkgZGlk IHNvbWUgcHJvdG90eXBpbmcgdXNpbmcgdGhlIGF0b21pYyBBUEkgZGlyZWN0bHkgYW5kIHRoZSB3 YXkgSSB3YXMgCnV0aWxpemluZyB0aGUgcHJvcGVydGllcyB3YXMgZXhhY3RseSBsaWtlIHRoaXMu IEV2ZW4gbW9yZSByZWFzb24gdG8gZ28gCndpdGggdGhlIHR3byBwcm9wZXJ0aWVzIChjb25uZWN0 b3IgY2FwYWJsZSwgQ1JUQyBlbmFibGUpIEkgc3VwcG9zZS4KCj4gCj4gSSBhbHNvIGJlbGlldmUg dGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwgdG8gZXhwb3NlIHZtaW4vdm1heCB0byB1c2Vyc3BhY2UK PiBhcyBwcm9wZXJ0aWVzLCBzbyB0aGF0IGRpc3BsYXkgc2VydmVycyBhbmQgYXBwcyBjYW4gcGxh biBhaGVhZCBvbiB3aGVuCj4gdGhleSB3aWxsIHJlbmRlci4gSSBzdXBwb3NlIHRoYXQgY2FuIGJl IGxlZnQgZm9yIGxhdGVyIHdoZW4gc29tZW9uZQo+IHN0YXJ0cyB3b3JraW5nIG9uIHVzZXJzcGFj ZSB0YWtpbmcgYWR2YW50YWdlIG9mIGl0LCBzbyB0aGF0IHRoZSBwcm9wZXIKPiB1c2Vyc3BhY2Ug cmVxdWlyZW1lbnQgZm9yIG5ldyBVQUJJIGlzIGZ1bGZpbGxlZC4KCktub3dpbmcgdGhlIHZtaW4v dm1heCBjb3VsZCBwb3RlbnRpYWxseSBiZSB1c2VmdWwgZm9yIHRlc3RpbmcgYnV0IG1vc3QgCmFw cGxpY2F0aW9ucyBzaG91bGRuJ3QgYmUgdHJ5aW5nIHRvIHByZWRpY3Qgb3IgYWRqdXN0IHJlbmRl cmluZyBiYXNlZCBvbiAKdGhlc2UuCgpJIGFncmVlIHdpdGggdGhlIGRpc2N1c3Npb24gZm9yIHRo aXMgY29taW5nIGxhdGVyLgoKPiAKPiAKPiBUaGFua3MsCj4gcHEKPiAKCk5pY2hvbGFzIEthemxh dXNrYXMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1k LWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==