From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Szyprowski Subject: Re: [RFC] handling of alpha mode (pre-multiplied/straight) in ARGB modes Date: Mon, 18 Jan 2016 11:14:41 +0100 Message-ID: <569CBB11.7000408@samsung.com> References: <5693B9C4.2040209@samsung.com> <20160111150749.GY8076@phenom.ffwll.local> <20160111152221.GB23290@intel.com> <56965B8F.4010701@samsung.com> <20160113145804.GH23290@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by gabe.freedesktop.org (Postfix) with ESMTPS id B01FD6E4E0 for ; Mon, 18 Jan 2016 02:14:44 -0800 (PST) Received: from eucpsbgm2.samsung.com (unknown [203.254.199.245]) by mailout1.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0O1500L5O8GISOA0@mailout1.w1.samsung.com> for dri-devel@lists.freedesktop.org; Mon, 18 Jan 2016 10:14:42 +0000 (GMT) In-reply-to: <20160113145804.GH23290@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= Cc: DRI mailing list , Bartlomiej Zolnierkiewicz List-Id: dri-devel@lists.freedesktop.org SGVsbG8sCgpPbiAyMDE2LTAxLTEzIDE1OjU4LCBWaWxsZSBTeXJqw6Rsw6Qgd3JvdGU6Cj4gT24g V2VkLCBKYW4gMTMsIDIwMTYgYXQgMDM6MTM6MzVQTSArMDEwMCwgTWFyZWsgU3p5cHJvd3NraSB3 cm90ZToKPj4gT24gMjAxNi0wMS0xMSAxNjoyMiwgVmlsbGUgU3lyasOkbMOkIHdyb3RlOgo+Pj4g T24gTW9uLCBKYW4gMTEsIDIwMTYgYXQgMDQ6MDc6NTBQTSArMDEwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPj4+PiBPbiBNb24sIEphbiAxMSwgMjAxNiBhdCAwMzoxODo0NFBNICswMTAwLCBNYXJl ayBTenlwcm93c2tpIHdyb3RlOgo+Pj4+PiBEZWFyIEFsbCwKPj4+Pj4KPj4+Pj4gSSB3b3VsZCBs aWtlIHRvIGFkZCBzdXBwb3J0IGZvciBjb25maWd1cmluZyBhbHBoYSBtb2Rlczogc3RyYWlnaHQg YW5kCj4+Pj4+IHByZS1tdWx0aXBsaWVkIGZvciBibGVuZGluZyB0byBFeHlub3MgRFJNIGRyaXZl ci4gRm9yIHRob3NlIHdobyBzZWUgdGhvc2UKPj4+Pj4gdGVybXMgZm9yIHRoZSBmaXJzdCB0aW1l Ogo+Pj4+PiAxLiBzdHJhaWdodCBhbHBoYSBtb2RlIG1lYW5zIG1lYW5zIHRoYXQgYWxsIEEgYW5k IFJHQiB2YWx1ZXMgYXJlIGZyb20gZnVsbAo+Pj4+PiAwLjI1NSByYW5nZSwKPj4+Pj4gMi4gcHJl LW11bHRpcGxpZWQgYWxwaGEgbW9kZSBtZWFucyB0aGF0IEEgaXMgZnJvbSAwLi4yNTUgcmFuZ2Ug YW5kIFJHQgo+Pj4+PiB2YWx1ZXMgYXJlIHNjYWxlZCB0byAwLi5BTFBIQSByYW5nZSAod2hlcmUg QUxQSEEgaXMgdGhlIEEgdmFsdWUgZm9yIHRoZQo+Pj4+PiBnaXZlbiBwaXhlbCkuCj4+Pj4+IFRo ZSBwcmUtbXVsdGlwbGllZCBtb2RlIGlzIHF1aXRlIGNvbW1vbiBpbiB0ZXh0dXJlIHByb2Nlc3Np bmcuCj4+Pj4+Cj4+Pj4+IEkgZGlkIGEgbGl0dGxlIHJlc2VhcmNoIGFuZCBmb3VuZCB0aGF0IHRo ZXJlIGlzIG5vIGNvbW1vbiBhcHByb2FjaCBmb3IKPj4+Pj4gZGVmaW5pbmcgc3RyYWlnaHQgb3Ig cHJlLW11bHRpcGxpZWQgYWxwaGEgbW9kZXMgZm9yIEFSR0IgZnJhbWVidWZmZXJzLgo+Pj4+Pgo+ Pj4+PiA+RnJvbSByZWFkaW5nIHRoZSBzb3VyY2VzIGFuZCB0aGUgcmVnaXN0ZXIgbmFtZXMgSSBm b3VuZCB0aGF0IGZvbGxvd2luZwo+Pj4+PiBkcml2ZXJzIHVzZSBwcmUtbXVsdGlwbGllZCBtb2Rl cyBmb3IgQVJHQiBmcmFtZWJ1ZmZlcnM6Cj4+Pj4+IHJhZGVvbiAoYXQgbGVhc3QgZm9yIEFSR0Ig Y3Vyc29ycyksCj4+Pj4+IGFtZGdwdSAoY3Vyc29yKSwKPj4+Pj4gaW50ZWwgKGFsbCBBUkdCIHBs YW5lcyksCj4+Pj4+IHJvY2sgY2hpcC4KPj4+Pj4KPj4+Pj4gT24gdGhlIG90aGVyIGhhbmQsIHRo ZXJlIGFyZSBkcm0gZHJpdmVycyB3aGljaCBzdXBwb3J0IEFSR0IgbW9kZXMgYW5kIHVzZQo+Pj4+ PiBzdHJhaWdodCBhbHBoYSBtb2RlczoKPj4+Pj4gb21hcCwKPj4+Pj4gbXNtLgo+Pj4+Pgo+Pj4+ PiBGb3IgdGhlIHJlc3Qgb2YgZHJpdmVycywgd2hpY2ggbWlnaHQgZGVhbCB3aXRoIHBlci1waXhl bCBhbHBoYSwgSSB3YXMgbm90Cj4+Pj4+IGFibGUgdG8gZGV0ZXJtaW5lIGZyb20gdGhlIGNvZGUg aWYgdGhlIHBpeGVsIFJHQiB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzCj4+Pj4+IHBlci1tdWx0 aXBsaWVkIG9yIHN0cmFpZ2h0Ogo+Pj4+PiBhdG1lbF9obGNkYywKPj4+Pj4gc3RpLAo+Pj4+PiBt ZHA1LAo+Pj4+PiBzaG1vYmlsZSwKPj4+Pj4gcmNhciwKPj4+Pj4gdmM0LAo+Pj4+PiBpbXguCj4+ Pj4gSW1vIGluIGNhc2Ugb2YgZG91YnQvbWl4ZWQgZGVmaW5pdGlvbnMgdGhlIHNlbWFudGljcyBv ZiB0aGUgYmlnIGRlc2t0b3AKPj4+PiBkcml2ZXJzIHNob3VsZCB3aW4uIFRydWUgZ2VuZXJpYyB1 c2Vyc3BhY2UgaXMgbW9zdCBsaWtlbHkgZGV2ZWxvcGVkIG9uCj4+Pj4gdGhvc2UsIGV2ZXJ5dGhp bmcgZWxzZSBzaG91bGQganVzdCBhZGp1c3QuIEFuZCBpbiBtb3N0IGNhc2VzIHdlIGNhbiBnZXQK Pj4+PiBhd2F5IHdpdGggdGhhdCBvbiBhcm0gZHJpdmVycyBzaW5jZSB0aGV5IHRlbmQgdG8gc2hp cCB1c2Vyc3BhY2UgYW5kIGtlcm5lbAo+Pj4+IGluIGxvY2tzdGVwLiBBdCBsZWFzdCB3aGVyZSBp dCByZWFsbHkgbWF0dGVycy4KPj4+Pgo+Pj4+PiBFeHlub3MgRFJNIGRyaXZlciBub3cgbWl4ZXMg cHJlLW11bHRpcGxpZWQgYW5kIHN0cmFpZ2h0IG1vZGVzLCBkZXBlbmRpbmcgb24KPj4+Pj4gdGhl IENSVEMgc3ViLWRyaXZlci4KPj4+Pj4KPj4+Pj4gV2hpbGUgY2hlY2tpbmcgdGhlIGNvZGUgSSBm b3VuZCBhIGZvbGxvd2luZyBjb21tZW50IGluCj4+Pj4+IGRybS9pOTE1L2ludGVsX2Rpc3BsYXku YyBpbiBza2xfcGxhbmVfY3RsX2Zvcm1hdCgpIGZ1bmN0aW9uOgo+Pj4+PiAvKgo+Pj4+PiAgICAq IFhYWDogRm9yIEFSQkcvQUJHUiBmb3JtYXRzIHdlIGRlZmF1bHQgdG8gZXhwZWN0aW5nIHNjYW5v dXQgYnVmZmVycwo+Pj4+PiAgICAqIHRvIGJlIGFscmVhZHkgcHJlLW11bHRpcGxpZWQuIFdlIG5l ZWQgdG8gYWRkIGEga25vYiAob3IgYSBkaWZmZXJlbnQKPj4+Pj4gICAgKiBEUk1fRk9STUFUKSBm b3IgdXNlci1zcGFjZSB0byBjb25maWd1cmUgdGhhdC4KPj4+Pj4gICAgKi8KPj4+Pj4KPj4+Pj4g VGhlIHF1ZXN0aW9uIGlzIGhvdyB0byBjbGVhbnVwIHRoaXMgYW1iaWd1aXRpZXMgYW5kIGxldCBn ZW5lcmljIHVzZXJzcGFjZSB0bwo+Pj4+PiBwcm9wZXJseSB1c2UgQVJHQi9BUkdCIG1vZGVzIHdp dGggcHJvcGVyIGJsZW5kaW5nIG1vZGUuIEkgY2FtZSB1cCB3aXRoIHRoZQo+Pj4+PiBmb2xsb3dp bmcgMyBzb2x1dGlvbnM6Cj4+Pj4+Cj4+Pj4+IDEuIERlZmluZSBuZXcgZm91cmNjIHZhbHVlcyBm b3IgcHJlLW11bHRpcGxpZWQgKG9yL2FuZCBzdHJhaWdodCkgYWxwaGEKPj4+Pj4gbW9kZXMsCj4+ Pj4+IDIuIEludHJvZHVjZSBhIG5ldyBmcmFtZWJ1ZmZlciBmbGFnIGZvciBwcmUtbXVsdGlwbGll ZCBvciBzdHJhaWdodCBhbHBoYSAob3IKPj4+Pj4gYm90aCksCj4+Pj4+IDMuIEludHJvZHVjZSBh IG5ldyBwbGFuZSBwcm9wZXJ0eSBmb3IgY29udHJvbGxpbmcgYWxwaGEgYmxlbmRpbmcgbW9kZS4K Pj4+Pj4KPj4+Pj4gVGhlIGZpcnN0IHNvbHV0aW9uIGhhcyBzZXJpb3VzIGNvbXBhdGliaWxpdHkg cHJvYmxlbSwgYmVjYXVzZSB3ZSBjYW4gZWl0aGVyCj4+Pj4+IG1hcCBleGlzdGluZyBmb3VyY2Mg dG8gcHJlLW11bHRpcGxpZWQgKHRvIGZvbGxvdyByYWRlb24vYW1kZ3B1LCBpbnRlbCBhbmQKPj4+ Pj4gcm9ja2NoaXAgYmVoYXZpb3IpIG9yIHN0cmFpZ2h0IG1vZGUuIEJvdGggd2F5cyBpdCB3aWxs IGJyZWFrIHNvbWUgZXhpc3RpbmcKPj4+Pj4gYXBwbGljYXRpb25zLiBUbyBhdm9pZCBjb21wYXRp YmlsaXR5IHByb2JsZW0gd2Ugd291bGQgbmVlZCB0byBhZGQgMiBtb3JlCj4+Pj4+IHNldHMgb2Yg Zm91cmNjIGFuZCBsZWF2ZSBleGlzdGluZyBBUkdCIG1vZGVzIGFzICdkcml2ZXIgZGVwZW5kZW50 Jy4KPj4+Pj4KPj4+Pj4gVGhlIHNlY29uZCBzb2x1dGlvbiBpcyBwcm9iYWJseSBhIGJpdCBsZXNz IGludHJ1c2l2ZSwgYnV0IGl0IHN1ZmZlcnMgZm9yIHRoZQo+Pj4+PiBzaW1pbGFyIGNvbXBhdGli aWxpdHkgcHJvYmxlbS4gVG8gbWFrZSB0aGlzIGZlYXR1cmUgY29tcGF0aWJsZSB3aXRoIGV4aXN0 aW5nCj4+Pj4+IGNvZGUsIHByb2JhYmx5IDIgZmxhZ3Mgd2lsbCBiZSBuZWVkZWQ6IERSTV9NT0RF X0ZCX0FMUEhBX0ZPUkNFX1BSRU1VTFRJUExJRUQKPj4+Pj4gYW5kIERSTV9NT0RFX0ZCX0FMUEhB X0ZPUkNFX1NUUkFJR0hULiBUaGlzIHdheSB3aGVuIHVzZXJzcGFjZSBwcm92aWRlcyBubwo+Pj4+ PiBmbGFnLCB0aGUgZHJpdmVyIGNhbiB1c2UgaXRzIGRlZmF1bHQgbW9kZS4KPj4+Pj4KPj4+Pj4g VGhpcmQgc29sdXRpb24gKGFkZGl0aW9uYWwgcGxhbmUgcHJvcGVydHkpIGhhcyBiZWVuIGFscmVh ZHkgcHJvcG9zZWQ6Cj4+Pj4+IGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDE1LzYvMTkvMzMwLCBo b3dldmVyIEkgZm91bmQgbm8gZm9sbG93LXVwIG5vcgo+Pj4+PiBjb21tZW50cy4gU2VwYXJhdGUg cHJvcGVydHkgbGV0cyBhdCBsZWFzdCBkcml2ZXJzIHRvIG5vdGlmeSB1c2Vyc3BhY2UgYWJvdXQK Pj4+Pj4gZHJpdmVyJ3MgZGVmYXVsdCBhbHBoYSBtb2RlIGFuZCBsZXRzIGdlbmVyaWMgYXBwbGlj YXRpb24gdG8gcHJvcGVybHkgc2V0IHRoZQo+Pj4+PiByZXF1ZXN0ZWQgbW9kZS4gVGhlIG9ubHkg cHJvYmxlbSBpcyB0aGF0IHRoZSBhbHBoYSBtb2RlIGlzIG5vdCBkaXJlY3RseQo+Pj4+PiBjb25m aWd1cmVkIG9uIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QsIHdoZXJlIGluIG15IG9waW5pb24gaXQg c2hvdWxkIGJlCj4+Pj4+IHN0b3JlZC4KPj4+Pj4KPj4+Pj4gUGxlYXNlIGxldCBtZSBrbm93IHdo aWNoIGFwcHJvYWNoIFlvdSBsaWtlIGJlc3QgYW5kIHdoaWNoIHNob3VsZCBJIHRha2UgZm9yCj4+ Pj4+IGludHJvZHVjaW5nIGdlbmVyaWMgd2F5IG9mIGNvbmZpZ3VyaW5nIGFscGhhIG1vZGUuCj4+ Pj4gT25lIGlkZWEgdGhhdCB3YXMgdG9zc2VkIGFyb3VuZCBhIGZldyB0aW1lcyBpcyB0byBnbyBm dWxsIGdlbmVyaWMgYW5kCj4+Pj4gaW1wbGVtZW50IHNvbWV0aGluZyBsaWtlIGdsQmxlbmRGdW5j IGZvciBwbGFuZXMsIGV4Y2VwdCB0aGF0IHdlJ2QgYWxzbwo+Pj4+IHByZS1tdWx0aXBsaWVkL3N0 cmFpZ2h0IHZlcnNpb25zIHdoZXJlIGl0IG1ha2VzIHNlbnNlLiBGb3IgZHJpdmVycyB0aGF0Cj4+ Pj4gY2FuJ3Qgc3VwcG9ydCBwcmUtbXVsdGlwbGllZCBhbHBoYSB0aGV5IGNvdWxkIHNpbXBseSBs ZWF2ZSBvdXQgdGhlc2UKPj4+PiB2YWx1ZXMgZnJvbSB0aGUgYmxlbmQtZnVuYyBwcm9wZXJ0eSAo bGlrZSB3ZSBhbHJlYWR5IGFsbG93IHdpdGggZS5nLgo+Pj4+IHJvdGF0aW9uLCB3aGVuIGEgZHJp dmVyIGNhbid0IGRvIDkwLzI3MMKwKS4KPj4+Pgo+Pj4+IFdydCBiYWNrd2FyZHMgY29tcGF0IGEg cHJvcGVydHkgd291bGQgd29yayB3ZWxsIHRvbzogSWYgaXQncyBub3QgdGhlcmUKPj4+PiB0aGVu IHVzZXJzcGFjZSBzaG91bGQgYXNzdW1lIG9sZCBiZWhhdmlvdXIgKHdoaWNoIHNob3VsZCBiZSBw cmUtbXVsdGlwbGllZAo+Pj4+IHJlYWxseSwgYnV0IG1pZ2h0IGJlIHNvbWV3aGF0IGJyb2tlbiBv biBzb21lIGRyaXZlcnMva2VybmVsKS4KPj4+Pgo+Pj4+IERhbWllbiBoYWQgc29tZSBSRkMgYWJv dXQgYWxsIHRoaXMgd2F5IGJhY2ssIGJ1dCBjYW4ndCBmaW5kIGl0IHJpZ2h0IG5vdy4KPj4+IEkg cmVtZW1iZSBoZSBzYWlkIGhlIHdhbnRlZCB0byB3b3JrIG9uIGl0LCBidXQgSSBkb24ndCByZW1l bWJlciBzZWVpbmcKPj4+IGFueXRoaW5nIGNvbWUgb3V0IG9mIHRoYXQuIEkgZ3Vlc3MgaGUgZ290 IHN3YWxsb3dlZCBieSBwYXRjaHdvcmssIG9yIEkKPj4+IGp1c3QgbWlzc2VkIHRoZSBwYXRjaC4K Pj4+Cj4+PiBUaGlzIG1haWwgbWlnaHQgaW5jbHVkZSBzb21lIG9mIG15IG1vcmUgcmVjZW50IHRo b3VnaHRzIG9uIHRoaXMgbWF0dGVyCj4+PiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL2Fy Y2hpdmVzL2ludGVsLWdmeC8yMDE0LUFwcmlsLzA0Mjk1Ni5odG1sCj4+IEkgYWxzbyBmb3VuZCB0 aGlzIHBhdGNoOiBodHRwOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9wYXRjaC8yMzAwMC8K Pj4KPj4gSG93ZXZlciBJIHN0aWxsIGRvbid0IGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgaG93IGl0 IHdvdWxkIHdvcmsuIElmIEkgZ290IGl0Cj4+IHJpZ2h0LCB0aGUgcmVhbCBibGVuZGluZyBmdW5j dGlvbiBpcyBkZWZpbmVkIGJ5IGEgcGFpciBvZiB0aGUgdmFsdWVzCj4+IGZyb20gdGhlCj4+IHBy b3Bvc2VkIGVudW1zLCB3aGVyZSBvbmUgYXBwbGllcyB0byB0aGUgYmFja2dyb3VuZCAodGhlIGJs ZW5kaW5nIHJlc3VsdCBvZgo+PiBkZWVwZXIgcGxhbmVzKSBhbmQgdGhlIHNlY29uZCBhcHBsaWVz IHRvIHRoZSBwcm9jZXNzZWQgcGxhbmUuIFNvbWUKPj4gY29tYmluYXRpb25zIG9mIHRoZSBwcm9w b3NlZCBlbnVtcyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSAoYW5kIGVzcGVjaWFsbHkKPj4gY2hh bmdpbmcgdGhlIGNvbnN0YW50IHplcm8gYW5kIG9uZSBtZWFucyBzaW1wbHkgY2hhbmdpbmcgdGhl IG9yZGVyIG9mIHRoZQo+PiBwbGFuZXMpLCBzbyBJIHdvbmRlciBpZiBpdCBtaWdodCBiZSBlYXNp ZXIgdG8gc2ltcGx5IGNyZWF0ZSBhbiBlbnVtIHdpdGgKPj4gYWxsIHNhbmUgdmFsdWVzIGZvciBi bGVuZGluZyBhbmQgZG9jdW1lbnQgaXQgcmVhbGx5IHdlbGw/IFRoaXMgd2F5IGRyaXZlcnMKPj4g d2lsbCBzaW1wbHkgaW5pdGlhbGl6ZSBvbmx5IHRoZSBzdXBwb3J0ZWQgYmxlbmRpbmcgbW9kZXMu Cj4gVGhhdCB3YXMgbXkgaWRlYSBtb3JlIG9yIGxlc3MgdG9vLiBXZSdkIHN0aWxsIG1vZGVsIHRo aW5ncyBiYXNlZCBvbiB0aGUKPiBHTCBzdHVmZiwgYnV0IHdlIG9ubHkgYWR2ZXJ0aXplIHNwZWNp ZmljIHNyYytkc3QgYmxlbmQgZmFjdG9yCj4gY29tYmluYXRpb25zLiBJZS4gYSBzaW5nbGUgZW51 bSBwcm9wZXJ0eSB3aGVyZSBlYWNoIHZhbHVlIGNvbnRhaW5zIGJvdGgKPiB0aGUgc3JjIGFuZCBk c3QgYmxlbmQgZmFjdG9yLgoKT2theSwgSSd2ZSBkaWQgc29tZSBhbmFseXNpcyBvZiB3aGF0IEV4 eW5vcyBoYXJkd2FyZSBjYW4gZG8gYW5kIGl0IAp0dXJuZWQgb3V0IHRoYXQgdGhlcmUgb25seSBh IGZldyBtb2RlcyB3aGljaCByZWFsbHkgbWFrZXMgc2Vuc2UuIApBc3N1bWluZyB0aGF0IHRoZSBv cmRlciBvZiBwbGFuZXMgaXMgZmlyc3QgZGV0ZXJtaW5lZCBieSB6cG9zIApwcm9wZXJ0aWVzLCB3 ZSBhbHJlYWR5IGhhdmUgd2VsbCBkZWZpbmVkIHdoYXQgaXMgYmFja2dyb3VuZCAocmVzdWx0IG9m IApibGVuZGluZyBvZiBhbGwgZGVlcGVyIHBsYW5lcykgYW5kIHdoYXQgaXMgYmxlbmRlZCBwbGFu ZSAodGhlIHRlcm1zIApzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHVzZWQgaW4gcHJldmlvdXMgZGlz Y3Vzc2lvbiBhYm91dCBibGVuZGluZyBhcmUgCm5vdCB2ZXJ5IGludHVpdGl2ZSBmb3IgbWUpLgoK Tm93IGxldHMgY29uc2lkZXIgdGhlIGJhc2ljIGJsZW5kaW5nIGVxdWF0aW9uOgpSZXN1bHRSR0Ig PSBBICogYmFja2dyb3VuZFJHQiArIEIgKiBwbGFuZVJHQgoKd2hlcmU6CnBsYW5lUkdCIGlzIFJH QiBwaXhlbCB2YWx1ZXMgb2YgYmxlbmRlZCBwbGFuZQpiYWNrZ3JvdW5kUkdCIGlzIFJHQiBwaXhl bCB2YWx1ZXMgb2YgcGxhbmUncyBiYWNrZ3JvdW5kIChpLmUuIHJlc3VsdCBvZiAKcHJldmlvdXMg YmxlbmRpbmcgb3IgUkdCIHBpeGVsIHZhbHVlcyBvZiBkZWVwZXIgcGxhbmUpCgp3aGVyZSBBIGFu ZCBCIGNhbiBiZSBvbmUgb2Y6ClpFUk8sIE9ORSwgQ09OU1RfQUxQSEEgKGNvbnN0YW50IHBsYW5l IHByb3BlcnR5KSwgKDEtQ09OU1RfQUxQSEEpLCAKUElYRUxfQUxQSEEgKGFscGhhIHZhbHVlIGZy b20gZ2l2ZW4gcGl4ZWwpLCAoMS1QSVhFTF9BTFBIQSksIApQSVhFTF9DT05TVF9BTFBIQSAoQ09O U1RfQUxQSEEgKiBQSVhFTF9BTFBIQSksICgxLVBJWEVMX0NPTlNUX0FMUEhBKQoKVGhpcyBnaXZl cyBmb2xsb3dpbmcgdXNlZnVsIG1vZGVzOgoxLiBOT19CTEVORElORzogQT1aRVJPLCBCPU9ORSAt IG5vIGJsZW5kaW5nLCBnbG9iYWwgYW5kIHBlci1waXhlbCBhbHBoYSAKaWdub3JlZCAocmVnYXJk bGVzcyBzZWxlY3RlZCBmb3VyY2MgbW9kZSkKMi4gQ09OU1RfQUxQSEFfQkxFTkQ6IEE9KDEtQ09O U1RfQUxQSEEpLCBCPUNPTlNUX0FMUEhBIC0gYmxlbmRpbmcgd2l0aCAKZ2xvYmFsIHBsYW5lIGFs cGhhLCBwZXItcGl4ZWwgYWxwaGEgaWdub3JlZCAocmVnYXJkbGVzcyBzZWxlY3RlZCBmb3VyY2Mg Cm1vZGUpCjMuIFBJWEVMX0FMUEhBX0JMRU5EOiBBPSgxLVBJWEVMX0FMUEhBKSwgQj1QSVhFTF9B TFBIQSAtIGJsZW5kaW5nIHdpdGggCnBlci1waXhlbCBhbHBoYSwgYXNzdW1pbmcgcGxhbmUgd2l0 aCBhbHBoYSBwcmUtbXVsdGlwbGllZCBSR0IgcGl4ZWwgCnZhbHVlcyAoZ2xvYmFsIGFscGhhIGln bm9yZWQsIG5lZWRzIGZvdXJjYyBtb2RlIHdpdGggYWxwaGEgY2hhbm5lbCAKb3RoZXJ3aXNlIHNh bWUgYXMgMSkKNC4gUElYRUxfQ09OU1RfQUxQSEFfQkxFTkQ6IEE9KDEtUElYRUxfQ09OU1RfQUxQ SEEpLCBCPVBJWEVMX0NPTlNUX0FMUEhBIAotIGJsZW5kaW5nIHdpdGggYm90aCBnbG9iYWwgYW5k IHBlci1waXhlbCBhbHBoYSBtdWx0aXBsaWVkLCBhc3N1bWluZyAKcGxhbmUgd2l0aCBhbHBoYSBw cmUtbXVsdGlwbGllZCBSR0IgcGl4ZWwgdmFsdWVzIChuZWVkcyBmb3VyY2MgbW9kZSB3aXRoIAph bHBoYSBjaGFubmVsIG90aGVyd2lzZSBzYW1lIGFzIDIpCgpJZiB3ZSB3YW50IHRvIHNvbHZlIHBy ZS1tdWx0aXBsaWVkL3N0cmFpZ2h0IGFscGhhIG1vZGVzIGlzc3VlIGJ5IAppbnRyb2R1Y2luZyBh ZGRpdGlvbmFsIGJsZW5kaW5nIG1vZGUsIHdlIHNob3VsZCBjb25zaWRlciBmb2xsb3dpbmc6CjUu IFBJWEVMX0FMUEhBX0JMRU5EX1NUUkFJR0hUOiBBPSgxLVBJWEVMX0FMUEhBKSwgQj1QSVhFTF9B TFBIQSAtIApibGVuZGluZyB3aXRoIHBlci1waXhlbCBhbHBoYSwgYXNzdW1pbmcgcGxhbmUgd2l0 aCBzdHJhaWdodCBSR0IgcGl4ZWwgCnZhbHVlcyAodG8gYmUgbXVsdGlwbGllZCBieSBwaXhlbCBh bHBoYSB2YWx1ZSksCjYuIFBJWEVMX0NPTlNUX0FMUEhBX0JMRU5EX1NUUkFJR0hUOiBBPSgxLUNP TlNUX1BJWEVMX0FMUEhBKSwgCkI9Q09OU1RfUElYRUxfQUxQSEEgLSBibGVuZGluZyB3aXRoIGJv dGggZ2xvYmFsIGFuZCBwZXItcGl4ZWwgYWxwaGEsIAphc3N1bWluZyBwbGFuZSB3aXRoIHN0cmFp Z2h0IFJHQiBwaXhlbCB2YWx1ZXMgKHRvIGJlIG11bHRpcGxpZWQgYnkgcGl4ZWwgCmFscGhhIHZh bHVlKQoKQXJlIHRoZXJlIGFueSBvdGhlciB1c2VmdWwgbW9kZXMgaW1wbGVtZW50ZWQgYnkgeW91 ciBoYXJkd2FyZT8gVGhlIGFib3ZlIApkZWZpbmVkIG1vZGVzIGFyZSBxdWl0ZSBlYXN5IHRvIGdl dCBlbWJlZGRlZCBpbnRvIHNpbmdsZSBlbnVtIGFuZCBoYXZlIAp3ZWxsIGRlZmluZWQgYmVoYXZp b3IuCgo+PiBJIGFzc3VtZSB0aGF0IHRoaXMgd2F5IGFsc28gdGhlIHNlcGFyYXRlIGVudW1zIGNh biBiZSBkZWZpbmVkIGZvciBzdHJhaWdodAo+PiBhbmQgcHJlLW11bHRpcGxpZWQgYWxwaGEgYmxl bmRpbmcgbW9kZXMuCj4+Cj4+IFRoZSBvdGhlciBwcm9ibGVtIG1lbnRpb25lZCBzb21ld2hlcmUg aXMgd2hlcmUgdG8gYXR0YWNoIHRoZSBibGVuZGluZwo+PiBwcm9wZXJ0eS4gU29tZSBwYXJhbWV0 ZXJzIChsaWtlIHN0cmFpZ2h0L3ByZS1tdWx0aXBsaWVkIG9yIGVuYWJsaW5nIGdsb2JhbAo+PiBh bHBoYSkgY2FuIGJlIHNldCBvbiBwZXItcGxhbmUgYmFzaXMsIGJ1dCBJIGNhbiBpbWFnaW5lIHRo YXQgc29tZSBwYXJhbWV0ZXJzCj4+IGFyZSBnbG9iYWwgZm9yIHRoZSBnaXZlbiBjcnRjLgo+IEkn bSBxdWl0ZSBjb252aW5jZWQgdGhlc2UgZGF5cyB0aGF0IHdlIG5lZWQgdG8gZ28gZm9yIGEgcGVy LXBsYW5lIHByb3BlcnR5Lgo+IFRoaXMgb2YgY291cnNlIG1lYW5zIHRoYXQgd2hlbiBkZWFsaW5n IHdpdGggbXVsdGlwbGUgcGxhbmVzIHRoZSB1c2VyIG1heQo+IHN0aWxsIGVuZCB1cCByZXF1ZXN0 aW5nIGEgc2V0IG9mIGJsZW5kIGVxdWF0aW9ucyB0aGF0IGNhbid0IGJlIHN1cHBvcnRlZCwKPiBi dXQgSSBkb24ndCBzZWUgYW55IHJlYWwgd2F5IHRvIGF2b2lkIHRoYXQuCgpSaWdodCwgZXNwZWNp YWxseSBpZiBzdHJhaWdodC9wcmUtbXVsdGlwbGllZCBhbHBoYSB3aWxsIGJlIHNlbGVjdGVkIGJ5 IApibGVuZGluZyBtb2RlLCBpdCBtdXN0IGJlIHBlci1wbGFuZS4KCj4+IFRoZSBhbm90aGVyIGl0 ZW0gcmVsYXRlZCB0byBibGVuZGluZyBpcyBjb2xvciBrZXlpbmcuIEl0IHdhcyBub3QgbWVudGlv bmVkCj4+IGluIHRoZSBhYm92ZSBwcm9wb3NhbCBhdCBhbGwsIGJ1dCBzb21lIGhhcmR3YXJlIGNh biBkbyB0aGF0LiBJJ3ZlIG5vdGljZWQKPj4gdGhhdCBzb21lIGhhcmR3YXJlIGFsc28gaXMgYWJs ZSB0byBkbyBjb2xvciBrZXlpbmcgb25seSBmb3IgZXhhY3QgUkdCKEEpCj4+IHZhbHVlcyBhbmQg c29tZSBoYXZlIHNlcGFyYXRlIHJlZ2lzdGVycyB0byBzZXQgUkdCIHRvbGVyYW5jZS4gVGhpcyBh bHNvCj4+IG5lZWQgdG8gYmUgc3RhbmRhcmRpemVkIHNvbWVob3cuCj4gWWVhaCwgSSB0aGluayB0 eXBpY2FsbHkgeW91IGhhdmUgdmFsdWUrbWFzaywgbWluK21heCttYXNrLCBvciBqdXN0Cj4gbWlu K21heC4gSXQncyBhbHNvIGhhcmR3YXJlIGRlcGVuZGVudCB3aGV0aGVyIHRob3NlIGFyZSBhcHBs aWVkIGFnYWluc3QKPiB0aGUgcmF3IHBpeGVsIHZhbHVlLCBvciBwZXJoYXBzIHNvbWUgcmFuZ2Ug ZXhwYW5kZWQgdmFsdWUsIG9yIGV2ZW4gY29sb3IKPiBzcGFjZSBjb252ZXJ0ZWQgdmFsdWUuIEFu b3RoZXIgaGFyZHdhcmUgZGVwZW5kZW50IGZhY3QgaXMgZXhhY3RseSB3aGljaAo+IHBsYW5lcyB0 YWtlIHBhcnQgaW4gdGhlIGNvbG9yIGtleWluZy4gSSBzdXBwb3NlIHNvdXJjZSBrZXlpbmcgc2hv dWxkIGJlCj4gZWFzeSBzaW5jZSBpdCBzaG91bGQgYXBwbHkgdG8gYSBzaW5nbGUgcGxhbmUsIGJ1 dCBkZXN0aW5hdGlvbiBrZXlpbmcgYXQKPiBsZWFzdCBjYW4gb25seSBiZSBlZmZlY3RpdmUgYmV0 d2VlbiBhIHNwZWNpZmljIHN1YnNldCBvZiBwbGFuZXMgKHdoaWNoCj4gY2FuIGNoYW5nZSBkZXBl bmRpbmcgb24gd2hpY2ggcGxhbmVzIGFyZSBhY3R1YWxseSBlbmFibGVkKS4gQWxzbyB0aGUKPiBw bGFuZSB6IG9yZGVyIG1heSBiZSBhZmZlY3RlZCBieSBkZXN0aW5hdGlvbiBrZXlpbmcuCj4KPiBT byB0aGVyZSBhcmUgcXVpdGUgYSBmZXcgaGFyZHdhcmUgZGVwZW5lbnQgdmFyaWFibGVzIGluIHRo ZSBtaXgsIGFuZCBzbwo+IEknbSBub3Qgc3VyZSB0aGVyZSdzIGFueSByZWFzb25hYmxlIHdheSB0 byBhYnN0cmFjdCBpdCBhbGwuCj4KPiBNYXliZSBpdCdzIGJlc3QgaWYgd2UganVzdCBkZWZpbmUg YSBzZXQgb2Ygc3RhbmRhcmRpc2ggcHJvcGVydGllcyBhbmQKPiBlYWNoIGRyaXZlciBjYW4gcGlj ayB3aGljaGV2ZXIgb25lcyBpdCBjYW4gZG8sIGFuZCB3ZSBqdXN0IGlnbm9yZSBhbGwKPiB0aGUg b3RoZXIgaGFyZHdhcmUgZGVwZW5kZW50IGRldGFpbHMuIFNvIHdlIGNvdWxkIGhhdmUgc29tZXRo aW5nIGxpa2U6Cj4gZHN0LWNvbG9yLWtleS1taW4sIGRzdC1jb2xvci1rZXktbWF4LCBkc3QtY29s b3Ita2V5LXZhbHVlLAo+IGRzdC1jb2xvci1rZXktbWFzawo+IGFuZCB0aGUgc2FtZSBmb3Igc291 cmNlIGtleWluZy4gQW5kIHdlIGNhbiBkZWZpbmUgdGhhdCB0aGUgdmFsdWVzIGJlCj4gZW5jb2Rl ZCBhcyBzb21ldGhpbmcgbGlrZSAxNjoxNjoxNjoxNiBBUkdCL0FZQ2JDciAod2VsbCBJIGd1ZXNz IHdlJ2QKPiBsZWF2ZSBvdXQgdGhlIGFscGhhIGZyb20gY29sb3Iga2V5aW5nIHZhbHVlcyksIHRo ZSBkcml2ZXIgYmVpbmcgZnJlZQo+IHRvIGlnbm9yZSBhcyBtYW55IGxvdyBiaXRzIGFzIGl0IHdh bnRzLgoKSHVoLCBJIHdhc24ndCBhd2FyZSBvZiB0aG9zZSBzb3VyY2UvZGVzdGluYXRpb24ga2V5 aW5nIG1vZGVzLgoKQmVzdCByZWdhcmRzCi0tIApNYXJlayBTenlwcm93c2tpLCBQaEQKU2Ftc3Vu ZyBSJkQgSW5zdGl0dXRlIFBvbGFuZAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwK