From mboxrd@z Thu Jan 1 00:00:00 1970 From: frederik@ofb.net Subject: Re: [alsa-devel] ALSA -> pulseaudio channel mapping, what is it (and why?) Date: Mon, 6 May 2019 17:48:54 -0700 Message-ID: <20190507004854.dqhnp4fr5hc2fxy3@localhost> References: <20190503180521.gtfv64hel5427dx7@localhost> <491dc670d9aaa8a9a72a6f0aaf5071be935a1aca.camel@iki.fi> Reply-To: General PulseAudio Discussion Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <491dc670d9aaa8a9a72a6f0aaf5071be935a1aca.camel@iki.fi> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: pulseaudio-discuss-bounces@lists.freedesktop.org Sender: "pulseaudio-discuss" To: Tanu Kaskinen Cc: alsa-devel@alsa-project.org, pulseaudio-discuss@lists.freedesktop.org List-Id: alsa-devel@alsa-project.org RGVhciBUYW51LAoKVGhhbmtzIGZvciB5b3VyIHJlcGx5LiBJIG1hZGUgY29tbWVudHMgaW5saW5l OgoKT24gTW9uLCBNYXkgMDYsIDIwMTkgYXQgMDI6MDQ6MzdQTSArMDMwMCwgVGFudSBLYXNraW5l biB3cm90ZToKPk9uIEZyaSwgMjAxOS0wNS0wMyBhdCAxMTowNSAtMDcwMCwgZnJlZGVyaWtAb2Zi Lm5ldCB3cm90ZToKPj4gRGVhciBBTFNBIGRldmVsb3BlcnMsCj4+Cj4+IEkgcmFuIGludG8gYSBw cm9ibGVtIHdoaWNoIHNlZW1zIHRvIGJlIGNhdXNlZCBieSBzb21lIGxpbmVzIGluCj4+ICJhbHNh LXBsdWdpbnMtMS4xLjgvcHVsc2UvcGNtX3B1bHNlLmMiLgo+Pgo+PiBUaGUgcHJvYmxlbSBpcyB0 aGF0IGlmIEkgY3JlYXRlIGEgNi1jaGFubmVsIFB1bHNlQXVkaW8gZGV2aWNlLCBhbmQKPj4gdGhl biBJIGNvbmZpZ3VyZSBhbiBBTFNBIGRldmljZSBpbiB+Ly5hc291bmRyYyB0byBvdXRwdXQgdG8g dGhlCj4+IFB1bHNlQXVkaW8gZGV2aWNlLCB0aGUgY2hhbm5lbHMgb2YgdGhlIEFMU0EgZGV2aWNl IGFyZSBtaXhlZCB0b2dldGhlcgo+PiBpbiB2YXJpb3VzIHdheXMgYW5kIGRvbid0IGNvcnJlc3Bv bmQgMS0xIHdpdGggdGhlIGNoYW5uZWxzIG9mIHRoZQo+PiBQdWxzZUF1ZGlvIGRldmljZS4KPj4K Pj4gSSBmaW5kIHRoaXMgdG8gYmUgY291bnRlci1pbnR1aXRpdmUuIElmIEkgd2FudGVkIGNoYW5u ZWxzIHRvIGJlIG1peGVkCj4+IGFuZCByZW1hcHBlZCBpbiB2YXJpb3VzIHdheXMsIEkgd291bGQg dXNlIHRoZSBQdWxzZUF1ZGlvIG1vZHVsZQo+PiBtb2R1bGUtcmVtYXAtc2luayBvbiB0aGUgUHVs c2VBdWRpbyBzaWRlLCBzaW5jZSBBRkFJQ1QgQUxTQSBkb2VzIG5vdAo+PiBzdXBwb3J0IG5hbWVk IGNoYW5uZWxzLgo+Cj5UaGVyZSBpcyBhbiBBUEkgZm9yIHF1ZXJ5aW5nIGFuZCBjb25maWd1cmlu ZyBQQ00gZGV2aWNlIGNoYW5uZWwgbWFwcy4KPnBjbV9wdWxzZS5jIGRvZXNuJ3Qgc2VlbSB0byBp bXBsZW1lbnQgdGhhdCBBUEksIHRob3VnaCwgc28gYXBwbGljYXRpb25zCj5hcmUgZXhwZWN0ZWQg dG8gdXNlIHRoZSBkZWZhdWx0IGNoYW5uZWwgbWFwLCBhbmQgaWYgdGhhdCBkb2Vzbid0IG1hdGNo Cj50aGUgc2luayBjaGFubmVsIG1hcCwgdGhlbiBQdWxzZUF1ZGlvIHdpbGwgZG8gdGhlIHJlbWFw cGluZyAoYW5kCj5wb3NzaWJseSByZW1peGluZywgaWYgdGhlIGNoYW5uZWwgbWFwcyBkaWZmZXIg aW4gb3RoZXIgd2F5cyB0aGFuIGp1c3QKPmNoYW5uZWwgb3JkZXIpLgo+Cj4+IEkgd291bGQgbm90 IGV4cGVjdCByZW1peGluZyB0byBoYXBwZW4gaW4gdGhlCj4+IEFMU0EtPlB1bHNlIGJyaWRnZSwg c2luY2UgdGhlIHJlbGV2YW50IFBDTSBwbHVnaW4gY29udGFpbnMgbm8gY2hhbm5lbAo+PiBtYXAg cGFyYW1ldGVyLgo+Cj5UaGUgcmVtaXhpbmcgaGFwcGVucyBpbiBQdWxzZUF1ZGlvLCBub3QgaW4g cGNtX3B1bHNlLmMuIHBjbV9wdWxzZS5jCj5qdXN0IHRlbGxzIFB1bHNlQXVkaW8gdGhlIGNoYW5u ZWwgbWFwIHRoYXQgdGhlIHN0cmVhbSB1c2VzLgoKWWVzLCBJIHVuZGVyc3RhbmQgdGhhdCBtdWNo LgoKPj4gSSBkb24ndCBldmVuIGtub3cgd2hhdCBjaGFubmVsIG1hcCBJIHNob3VsZCBnaXZlIHRo ZSBQdWxzZUF1ZGlvIGRldmljZQo+PiBpbiBvcmRlciB0byBwcmV2ZW50IHJlbWl4aW5nIGZyb20g b2NjdXJyaW5nLiBUaGUgZmlsZSBwY21fcHVsc2UuYwo+PiBjb250YWlucyB0aGUgbGluZXM6Cj4+ Cj4+ICAgICAgICAgZm9yIChjID0gcGNtLT5zcy5jaGFubmVsczsgYyA+IDA7IGMtLSkKPj4gICAg ICAgICAgICAgICAgIGlmIChwYV9jaGFubmVsX21hcF9pbml0X2F1dG8oJm1hcCwgYywgUEFfQ0hB Tk5FTF9NQVBfQUxTQSkpCj4+ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Pgo+PiBU aGlzIHJlZmVycyB0byBhIG1hY3JvIGluIC91c3IvaW5jbHVkZS9wdWxzZS9jaGFubmVsbWFwLmg6 Cj4+Cj4+ICAgICAvKiogXGNvbmQgZnVsbGRvY3MgKi8KPj4gICAgICAgICBQQV9DSEFOTkVMX01B UF9BTFNBLAo+PiAgICAgICAgIC8qKjwgVGhlIGRlZmF1bHQgbWFwcGluZyB1c2VkIGJ5IEFMU0Eu IFRoaXMgbWFwcGluZyBpcyBwcm9iYWJseQo+PiAgICAgICAgICAqIG5vdCB0b28gdXNlZnVsIHNp bmNlIEFMU0EncyBkZWZhdWx0IGNoYW5uZWwgbWFwcGluZyBkZXBlbmRzIG9uCj4+ICAgICAgICAg ICogdGhlIGRldmljZSBzdHJpbmcgdXNlZC4gKi8KPj4gICAgIC8qKiBcZW5kY29uZCAqLwo+Pgo+ PiBUaGUgY29tbWVudCBzYXlzIHRoYXQgdGhlIEFMU0EgbWFwcGluZyBpcyAibm90IHRvbyB1c2Vm dWwiIC0gc28gd2h5Cj4+IGFyZSB3ZSB1c2luZyBpdD8KPgo+cGNtX3B1bHNlLmMgaGFzIHRvIHNw ZWNpZnkgc29tZSBjaGFubmVsIG1hcC4gRG8geW91IGhhdmUgYmV0dGVyCj5wcm9wb3NhbHMgdGhh biBQQV9DSEFOTkVMX01BUF9BTFNBPwoKV2hhdCdzIHdyb25nIHdpdGggdXNpbmcgdGhlIGNoYW5u ZWwgbWFwIG9mIHRoZSB1bmRlcmx5aW5nIFB1bHNlQXVkaW8Kc2luaz8gTWF5YmUgdGhhdCdzIGFu b3RoZXIgd2F5IG9mIHBocmFzaW5nIHdoYXQgSSB3YXMgdHJ5aW5nIHRvCmNvbW11bmljYXRlIGlu IG15IGZpcnN0IGVtYWlsLiBJIGp1c3Qgd2FudCB0aGUgY2hhbm5lbHMgdG8gZ28gc3RyYWlnaHQK dGhyb3VnaC4KCk9idmlvdXNseSB0aGlzIHdvdWxkIGhhdmUgdG8gYmUgc29tZXRoaW5nIHRoYXQg dXNlcnMgd291bGQgZW5hYmxlIHdpdGgKYW4gb3B0aW9uIChpbiB0aGUgQUxTQSBjb25maWcpLCB0 byBwcmVzZXJ2ZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwKYnV0IEkgZG9uJ3Qgc2VlIHdoYXQn cyB1bmRlc2lyYWJsZSBhYm91dCBpdC4KCj4+IEFsc28sIGhvdyBkbyBJIGZpbmQgb3V0IHdoYXQg aXQgaXMsIGlmIGl0ICJkZXBlbmRzIG9uCj4+IHRoZSBkZXZpY2Ugc3RyaW5nIHVzZWQiPwo+Cj5U aGVyZSdzIGN1cnJlbnRseSBubyB3YXkgdG8gcXVlcnkgdGhlIHNpbmsgY2hhbm5lbCBtYXAgdGhy b3VnaCB0aGUgQUxTQQo+QVBJLiBUaGVyZSdzIHNuZF9wY21fZ2V0X2NobWFwKCkgdGhhdCBwY21f cHVsc2UuYyBjb3VsZCBtYXliZQo+aW1wbGVtZW50LiBUaGVyZSdzIHRoZSBjb21wbGljYXRpb24g dGhhdCB1c3VhbGx5IHRoZSBwdWxzZSBQQ00gdXNlcyB0aGUKPmRlZmF1bHQgc2luaywgYW5kIHRo ZSBkZWZhdWx0IHNpbmsgY2FuIGNoYW5nZSBhdCBhbnkgdGltZSwgc28gdGhlCj5jaGFubmVsIG1h cCBjYW4gY2hhbmdlIGF0IGFueSB0aW1lIHRvbywgYnV0IHRoYXQncyBwcm9iYWJseSBub3QgYSBo dWdlCj5wcm9ibGVtIGluIHByYWN0aWNlLgo+Cj4+IE15IHByZWZlcmVuY2Ugd291bGQgc2ltcGx5 IGJlIHRvIGhhdmUgYSAxLTEgY2hhbm5lbCBtYXAgaW4gcGNtX3B1bHNlLAo+PiBzbyB0aGF0IGEg UHVsc2VBdWRpbyBkZXZpY2Ugd2l0aCA2IGNoYW5uZWxzIHdpbGwgdHVybiBpbnRvIGFuIEFMU0EK Pj4gZGV2aWNlIHdpdGggVEhFIFNBTUUgNiBDSEFOTkVMUy4gTm8gbWl4aW5nLiBNaXhpbmcgaXMg Y29uZnVzaW5nIGluCj4+IHRoaXMgY29udGV4dCwgYW5kIHNlZW1zIHVuZG9jdW1lbnRlZCBvdXRz aWRlIG9mIHRoZSBjb2RlLgo+Cj5SZW1hcHBpbmcvcmVtaXhpbmcgaXMgdmVyeSBtdWNoIGV4cGVj dGVkIGluIHVzdWFsIG1lZGlhIHBsYXliYWNrIGNhc2VzLgo+SWYgeW91IGhhdmUgYSA1LjEgbW92 aWUsIGl0J3MgZWFzaWVyIGZvciB0aGUgcGxheWVyIGFwcGxpY2F0aW9uIHRvIHBsYXkKPnRoZSBh dWRpbyBpbiB3aGF0ZXZlciBjaGFubmVsIG9yZGVyIGl0IHdhbnRzIGFuZCBsZXQgdGhlIHNvdW5k IHNlcnZlcgo+dG8gcmVtYXAgYW5kIHJlbWl4IGFzIG5lY2Vzc2FyeS4KCkRvZXMgdGhpcyBjdXJy ZW50bHkgaGFwcGVuIGNvcnJlY3RseSB3aXRoIHBjbV9wdWxzZT8gRm9yIGV4YW1wbGUgaWYgSQpw bGF5IGEgbW92aWUgd2l0aCA2LWNoYW5uZWwgKGUuZy4gNS4xKSBzb3VuZCB0aHJvdWdoIGFuIEFM U0EgInB1bHNlIgpQQ00sIGRvIHRoZSBjaGFubmVscyBnZXQgZGVsaXZlcmVkIGNvcnJlY3RseSB0 byBQdWxzZUF1ZGlvPyBIb3cgZG9lcwpBTFNBIGtub3cgd2hpY2ggb25lcyBhcmUgd2hpY2g/CgpJ J20gYXNraW5nIGJlY2F1c2UgeW91IHNhaWQgIml0J3MgZWFzaWVyIiwgYnV0IHRoYXQgd291bGQg b25seSBiZSB0aGUKY2FzZSBpZiBpdCB3b3Jrcy4gV2hhdCBoYXBwZW5zIHdoZW4gbXkgbWVkaWEg cGxheWVyIHRyaWVzIHRvIHBsYXkgYQo0LWNoYW5uZWwgZmlsZSwgd2l0aCBuYW1lZCBjaGFubmVs cywgdG8gdGhlIDYtY2hhbm5lbCBBTFNBIGRldmljZT8KRG9lcyAidGhlIHNvdW5kIHNlcnZlciBb Li5dIHJlbWFwIGFuZCByZW1peCBhcyBuZWNlc3NhcnkiIGluIHRoaXMKY2FzZT8gSSBrbm93IFB1 bHNlQXVkaW8gZG9lcyBpdCwgYnV0IEkgd2Fzbid0IGF3YXJlIGFib3V0IEFMU0EuCgo+PiBJIHRy aWVkIHVzaW5nIGF1eDAgdGhydSBhdXg1IGFzIHRoZSBQdWxzZUF1ZGlvIGNoYW5uZWwgbWFwLCB0 byBwcmV2ZW50Cj4+IGdlb21ldHJ5LWJhc2VkIHJlbWl4aW5nLiBIb3dldmVyLCB0aGlzIHJlc3Vs dHMgaW4gc2lsZW5jZSAtIGFwcGFyZW50bHkKPj4gbm9uZSBvZiB0aGUgNiBBTFNBIGNoYW5uZWxz IGVuZCB1cCBnb2luZyBhbnl3aGVyZS4gVGhhdCB3YXMgYWxzbwo+PiB1bmV4cGVjdGVkLiBTaW5j ZSBJIGFtIHBsYXlpbmcgNi1jaGFubmVsIGF1ZGlvIHRvIGEgNi1jaGFubmVsIGRldmljZSwKPj4g d2hpY2ggZW11bGF0ZXMgYW5vdGhlciA2LWNoYW5uZWwgZGV2aWNlLCBJIHdvdWxkIGhhdmUgdGhv dWdodCB0aGF0IHRoZQo+PiBjaGFubmVsIG1hcHBpbmcgd291bGRuJ3QgYmUgY29tcGxpY2F0ZWQu IEluc3RlYWQsIGl0IGFwcGVhcnMgdGhhdCB0aGUKPj4gUHVsc2VBdWRpbyBzaW5rIG5lZWRzIHRv IGhhdmUgY2hhbm5lbHMgd2l0aCBzcGVjaWZpYyBuYW1lcyBpbiBvcmRlciB0bwo+PiByZWNlaXZl IGRhdGEgZnJvbSBBTFNBLgo+Pgo+PiBDYW4gd2UgZml4IHRoaXMsIG9yIGltcHJvdmUgdGhlIHVz ZXIgZXhwZXJpZW5jZT8KPgo+V2hhdCdzIHRoZSBzaW5rIGNoYW5uZWwgbWFwIGluIFB1bHNlQXVk aW8gYW5kIHdoYXQncyB5b3VyIGFwcGxpY2F0aW9uJ3MKPmNoYW5uZWwgbWFwPyBBcHBhcmVudGx5 IG9uZSBvZiB0aGVtIGlzIG5vdCB1c2luZyB0aGUgZGVmYXVsdCBBTFNBIG1hcAo+Zm9yIDYgY2hh bm5lbHMuCj4KPklmIHlvdXIgYXBwbGljYXRpb24gaXMgbm90IHVzaW5nIHRoZSBkZWZhdWx0IGNo YW5uZWwgbWFwLCB3aHkgbm90PwoKV2VsbCwgYXMgSSBtZW50aW9uZWQgSSBkb24ndCBrbm93IHdo YXQgdGhlIGRlZmF1bHQgbWFwIGlzLCBJIGRvbid0Cmtub3cgd2hlcmUgaXQncyBkb2N1bWVudGVk IGFuZCBJIGRvbid0IGtub3cgaG93IHRvIGxvb2sgaXQgdXAgb3IgcXVlcnkKaXQuIEkgb25seSBr bm93IGl0IGV4aXN0cyBiZWNhdXNlIG9mIC91c3IvaW5jbHVkZS9wdWxzZS9jaGFubmVsbWFwLmgu CgpPSyBJIGZvdW5kICJwYV9jaGFubmVsX21hcF9pbml0X2F1dG8iIGluCnB1bHNlYXVkaW8vc3Jj L3B1bHNlL2NoYW5uZWxtYXAuYy4gTWF5YmUgdGhlIHBjbV9wdWxzZSBkb2N1bWVudGF0aW9uCih3 aGljaCBpcyB3aGVyZSBvbiBteSBoYXJkIGRyaXZlPykgc2hvdWxkIHBvaW50IHRvIHRoaXMgZmls ZSwgb3IKUkZDMzU1MSB3aGljaCBpcyBtZW50aW9uZWQgaW4gdGhlIGNvbW1lbnRzPyBIb3BlIHRo aXMgaXMgbWFraW5nIHNlbnNlLgoKPklmIHRoZSBzaW5rIGlzIG5vdCB1c2luZyB0aGUgZGVmYXVs dCBjaGFubmVsIG1hcCwgdGhlbiBpdCdzIGV4cGVjdGVkCj50aGF0IFB1bHNlQXVkaW8gc2h1ZmZs ZXMgdGhlIGNoYW5uZWxzIGFyb3VuZCwgb3RoZXJ3aXNlIGF1ZGlvIG1lYW50IGZvcgo+dGhlIGZy b250IGxlZnQgc3BlYWtlciBjb3VsZCBlbmQgdXAgaW4gdGhlIHJlYXIgcmlnaHQgc3BlYWtlciwg Zm9yCj5leGFtcGxlLgoKSSdtIHBsYXlpbmcgNi1jaGFubmVsIGF1ZGlvIHRvIGEgNi1jaGFubmVs IHNpbmsuIEl0J3MgYQoibW9kdWxlLWNvbWJpbmUtc2luayIgd2l0aCAzIHN0ZXJlbyBzaW5rcyBm cm9tIFVTQiBzb3VuZGNhcmRzLiBJCnNwZWNpZmllZCB0aGUgY2hhbm5lbCBtYXAgc2ltcGx5IGJl Y2F1c2UgSSBuZWVkIHRvIHNheSB3aGljaCBjaGFubmVscwpnbyB0byB3aGljaCBvZiB0aGUgZGV2 aWNlcy4gSWYgSSBjb3VsZCBjYWxsIHRoZSBjaGFubmVscyBhLGIsYyxkLGUsZgp0aGVuIEkgd291 bGQgZG8gdGhhdC4gSWYgSSBrbmV3IHdoYXQgdGhlIGRlZmF1bHQgbWFwIHdhcyB0aGVuIG1heWJl CnRoYXQgd291bGQgYmUgYSBiZXR0ZXIgc29sdXRpb247IGhvd2V2ZXIgY3VycmVudGx5IHRoZSB3 aG9sZSB0aGluZyBpcwpjb25maWd1cmVkIGJ5IGEgc2NyaXB0LCBzbyBJIHdvdWxkIGhhdmUgdG8g aGF2ZSB0byBrbm93IHRoZSBkZWZhdWx0Cm1hcCBmb3Igbm90IGp1c3QgNiBjaGFubmVscyBidXQg OCwgMTAsIDEyLCBldGMuLCBkZXBlbmRpbmcgb24gaG93IG1hbnkKc3BlYWtlcnMgdGhlIHVzZXIg ZGVjaWRlZCB0byBjb25uZWN0LiBBbHNvLCB0aGVyZSBpcyBubyAic3Vid29vZmVyIiBzbwpJJ20g bm90IHN1cmUgdGhhdCBJIHdhbnQgUEFfQ0hBTk5FTF9QT1NJVElPTl9MRkUgdG8gYmUgb25lIG9m IHRoZQpjaGFubmVscywgSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IHNwZWNpYWwg cHJvY2Vzc2luZyB0aGF0IGlzCmFwcGxpZWQgdG8gTEZFIGNoYW5uZWxzPwoKT2J2aW91c2x5IEkg c29tZXRpbWVzIHdhbnQgdG8gdXBtaXggc3RlcmVvIHRvIG15IDYgc3BlYWtlcnMsIGJ1dAp0aGF0 J3Mgc29tZXRoaW5nIHRoYXQgSSdkIHJhdGhlciBjb25maWd1cmUgc2VwYXJhdGVseSwgcmF0aGVy IHRoYW4KdXNpbmcgZGVmYXVsdCBjaGFubmVsIGRlZmluaXRpb25zLiBGb3IgZXhhbXBsZSBpZiBJ IGhhdmUgdHdvCm1pY3JvcGhvbmVzLCB0aGVuIEkgY291bGQgd3JpdGUgYSBzY3JpcHQgdGhhdCBw bGF5cyBzb3VuZCB0aHJvdWdoIGVhY2gKY2hhbm5lbCBhbmQgdXNlcyB0aGUgbWljcyB0byBmaWd1 cmUgb3V0IGdvb2QgdXBtaXggY29lZmZpY2llbnRzIGZyb20KbGVmdCBhbmQgcmlnaHQgc3RlcmVv LgoKPiBEbyB5b3UgaGF2ZSBhIHVzZSBjYXNlIGZvciBpZ25vcmluZyB0aGUgY2hhbm5lbCBtYXA/ IE1heWJlIHRoZQo+IFNORF9QQ01fTk9fQVVUT19DSEFOTkVMUyBmbGFnIGNvdWxkIGJlIHVzZWQg aW4gcGNtX3B1bHNlLmMgdG8KPiBkaXNhYmxlIGNoYW5uZWwgcmVtYXBwaW5nIChJJ20gbm90IHZv bHVudGVlcmluZyB0byBpbXBsZW1lbnQgdGhhdCwKPiB0aG91Z2gpLgoKV2hhdCBpcyBTTkRfUENN X05PX0FVVE9fQ0hBTk5FTFMsIEkgc2VlIGl0IGluCmFsc2EtbGliLTEuMS4xL3NyYy9wY20vcGNt X3BsdWcuYyBidXQgSSBkb24ndCB1bmRlcnN0YW5kIHdoYXQgaXQgaXMuIEkKZG9uJ3QgdW5kZXJz dGFuZCBob3cgQUxTQSBkb2VzIGF1dG9tYXRpYyBjb252ZXJzaW9uIGJldHdlZW4gUENNcyB3aXRo CmRpZmZlcmVudCBjaGFubmVsIGNvdW50cy4gSSB3b3VsZCBoYXZlIHRob3VnaHQgdGhhdCB5b3Ug bmVlZCBhbgoidXBtaXgiIG9yICJtdWx0aSIgZGV2aWNlLiBJIGRpZG4ndCBldmVuIHJlYWxpemUg dGhhdCBBTFNBIGhhcyBuYW1lZApjaGFubmVsIG1hcHMsIGFsdGhvdWdoIEkgc2VlIHRoYXQgeW91 IG1lbnRpb25lZCBlYXJsaWVyIHRoYXQgdGhlcmUgaXMKYW4gQVBJIGZvciB0aGlzLgoKVGhhbmsg eW91IGZvciB5b3VyIHRpbWUuCgpGcmVkZXJpY2sKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KcHVsc2VhdWRpby1kaXNjdXNzIG1haWxpbmcgbGlzdApwdWxz ZWF1ZGlvLWRpc2N1c3NAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vcHVsc2VhdWRpby1kaXNjdXNz