From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Alexander E. Patrakov" Subject: Re: On non-rewindability of resamplers Date: Sat, 10 May 2014 19:16:20 +0600 Message-ID: <536E26A4.1060002@gmail.com> References: <5356A9B6.9060405@gmail.com> <5358FCF0.2040701@ladisch.de> <53597BA2.8080201@gmail.com> <5359FE72.8050605@canonical.com> <535A6C96.7040109@gmail.com> <535B83E4.5050303@gmail.com> <535E908C.4030509@gmail.com> <535FDEA8.7010206@gmail.com> <5364CE4D.7040506@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail-la0-f42.google.com (mail-la0-f42.google.com [209.85.215.42]) by alsa0.perex.cz (Postfix) with ESMTP id EFB242608C7 for ; Sat, 10 May 2014 15:19:43 +0200 (CEST) Received: by mail-la0-f42.google.com with SMTP id el20so670889lab.1 for ; Sat, 10 May 2014 06:19:43 -0700 (PDT) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Raymond Yau , launchpad-andrex@sneakemail.com Cc: ALSA Development Mailing List , Clemens Ladisch , David Henningsson List-Id: alsa-devel@alsa-project.org MTAuMDUuMjAxNCAwNjo0NiwgUmF5bW9uZCBZYXUgd3JvdGU6Cj4gID4KPiAgPgo+ICA+IEkgYWNr bm93bGVkZ2UgdGhhdCB0aGVyZSB3YXMgc29tZSBjb25mdXNpb24gcmVnYXJkaW5nIHRoZSBwcmVj aXNlCj4gbWVhbmluZyBvZiB0aGUgZmxhZyAoZXNwZWNpYWxseSBnaXZlbiB0aHJlZSBwb3NzaWJs ZSBzaXR1YXRpb25zIC0KPiBhY2N1cmF0ZSB0byBqdXN0IG9uZSBwZXJpb2QsIGFjY3VyYXRlIHRv IGJldHRlciB0aGFuIG9uZSBwZXJpb2QgYnV0Cj4gd29yc2UgdGhhbiBvbmUgc2FtcGxlLCBhY2N1 cmF0ZSB0byBvbmUgc2FtcGxlKSwgYW5kIEkgYW0gbm90IHRoZQo+IGF1dGhvcml0eSBoZXJlLgo+ Cj4gQ2FuIHRoaXMgZ3JhbnVsYXJpdHkgYmUgbWVhc3VyZWQgYnkKPgo+IDEpIG9wZW4gYSBwbGF5 YmFjayBzdHJlYW0gd2l0aCAyIG9yIG1vcmUgcGVyaW9kcwo+IDIpIGZpbGwgdGhlIGZ1bGwgYnVm ZmVyIGFuZCBzdGFydCBwbGF5YmFjawo+IDMpIGNoZWNrIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBz bmRfcGNtX3Jld2luZGFibGUgKCkgaXMgaGFsZiBvZiBwZXJpb2QKPiBhdCBoYWxmIHBlcmlvZCB0 aW1lIGludGVydmFsCj4gNCkgcmVwZWF0IHRoZSB0ZXN0IHdpdGggMS80ICwgMS84LC4uLiwgcGVy aW9kIHRpbWUgaW50ZXJ2YWwKClllcyBhbmQgbm8uCgpJbnN0ZWFkIG9mIHdoYXQgeW91IGFyZSBw cm9wb3NpbmcgYWJvdmUsIEkgd3JvdGUgYSBsb29wIHRoYXQgcmVwZWF0ZWRseSAKY2FsbHMgc25k X3BjbV9yZXdpbmRhYmxlKCkgNzAwMDAwMCB0aW1lcyBhbmQgcHJpbnRzIHRoZSByZXN1bHQgaWYg aXQgCmRpZmZlcnMgZnJvbSB0aGUgcHJldmlvdXMgb25lLiBXaXRoIHNuZC1oZGEtaW50ZWwgKFBD SCksIGh3IHBsdWdpbiwgCnN0ZXJlbywgUzE2X0xFLCA0OCBrSHosIDYgcGVyaW9kcywgYW5kIGEg cGVyaW9kIHNpemUgb2YgMTAyNCwgSSBnZXQgdGhpczoKClJld2luZGFibGU6IDYxMTksIGxvb3Ag aXRlcmF0aW9uOiAwClJld2luZGFibGU6IDUxMTksIGxvb3AgaXRlcmF0aW9uOiA1Mzg5NDM0CgpT byBzbmRfcGNtX3Jld2luZGFibGUoKSBjYW4gcmV0dXJuIHdlaXJkIHZhbHVlcyB0aGF0IGFyZSB1 cGRhdGVkIGV2ZXJ5IApwZXJpb2Qgc2l6ZSBvciBzby4gQXMgc3VjaCwgSSB3b3VsZG4ndCBiZWxp ZXZlIGl0cyByZXR1cm4gdmFsdWUgb3V0IG9mIAp0aGUgYm94IGV2ZW4gZm9yIGh3IGRldmljZXMu IEF0IGxvb3AgaXRlcmF0aW9uIDUzODk0MzMsIHRoZSBDUFUgY2hld2VkIAplbm91Z2ggdGltZSBm b3IgYWxtb3N0IG9uZSBwZXJpb2QsIGJ1dCBzbmRfcGNtX3Jld2luZGFibGUoKSBzYWlkIHRoYXQg CmFsbW9zdCA2IHBlcmlvZHMgYXJlIHJld2luZGFibGUuIFByb2JhYmx5IGEgbWlzc2luZyBzeW5j X3B0cigpIApzb21ld2hlcmUsIG9yIGEgZG9jdW1lbnRhdGlvbiBidWcuCgpXaXRoIHNuZF9wY21f YXZhaWwoKSBpbnNlcnRlZCAod2hpY2ggZG9lcyBzeW5jaHJvbml6ZSB0aGUgcG9zaXRpb24pIApi ZWZvcmUgZWFjaCBjYWxsIHRvIHNuZF9wY21fcmV3aW5kYWJsZSgpLCBJIGdldDoKClJld2luZGFi bGU6IDYxMTksIGxvb3AgaXRlcmF0aW9uOiAwClJld2luZGFibGU6IDYxMTIsIGxvb3AgaXRlcmF0 aW9uOiAyClJld2luZGFibGU6IDYxMDQsIGxvb3AgaXRlcmF0aW9uOiA0MgpSZXdpbmRhYmxlOiA2 MDk2LCBsb29wIGl0ZXJhdGlvbjogNzYKUmV3aW5kYWJsZTogNjA4OCwgbG9vcCBpdGVyYXRpb246 IDEyNQpSZXdpbmRhYmxlOiA2MDgwLCBsb29wIGl0ZXJhdGlvbjogMTczClJld2luZGFibGU6IDYw NzIsIGxvb3AgaXRlcmF0aW9uOiAyMjIKUmV3aW5kYWJsZTogNjA2NCwgbG9vcCBpdGVyYXRpb246 IDI3MAoKKGFuZCBhbiB1bmRlcnJ1biBpbiB0aGUgZW5kKS4KCldpdGggNCBjaGFubmVsczoKClJl d2luZGFibGU6IDYxMTIsIGxvb3AgaXRlcmF0aW9uOiAwClJld2luZGFibGU6IDYxMDgsIGxvb3Ag aXRlcmF0aW9uOiAyClJld2luZGFibGU6IDYxMDQsIGxvb3AgaXRlcmF0aW9uOiAxNApSZXdpbmRh YmxlOiA2MTAwLCBsb29wIGl0ZXJhdGlvbjogMzYKUmV3aW5kYWJsZTogNjA5NiwgbG9vcCBpdGVy YXRpb246IDU4ClJld2luZGFibGU6IDYwOTIsIGxvb3AgaXRlcmF0aW9uOiA2MwoKV2l0aCA4IGNo YW5uZWxzOgoKUmV3aW5kYWJsZTogNjEwNCwgbG9vcCBpdGVyYXRpb246IDAKUmV3aW5kYWJsZTog NjA5OCwgbG9vcCBpdGVyYXRpb246IDEKUmV3aW5kYWJsZTogNjA5NiwgbG9vcCBpdGVyYXRpb246 IDIKUmV3aW5kYWJsZTogNjA5NCwgbG9vcCBpdGVyYXRpb246IDkKUmV3aW5kYWJsZTogNjA5Miwg bG9vcCBpdGVyYXRpb246IDI0ClJld2luZGFibGU6IDYwOTAsIGxvb3AgaXRlcmF0aW9uOiAzMgpS ZXdpbmRhYmxlOiA2MDg4LCBsb29wIGl0ZXJhdGlvbjogNDEKClNvIG9uIG15IHNuZC1oZGEtaW50 ZWwsIHRoZSBncmFudWxhcml0eSBvZiB0aGUgcG9pbnRlciBpcyAzMiBieXRlcy4KCkZvciBIYXN3 ZWxsIEhETUkgKG9uIGFub3RoZXIgc25kLWhkYS1pbnRlbCksIHN0ZXJlbywgUzE2X0xFOgoKUmV3 aW5kYWJsZTogNjEyOCwgbG9vcCBpdGVyYXRpb246IDAKUmV3aW5kYWJsZTogNjExMiwgbG9vcCBp dGVyYXRpb246IDEyOQpSZXdpbmRhYmxlOiA2MDk2LCBsb29wIGl0ZXJhdGlvbjogMzM5ClJld2lu ZGFibGU6IDYwODAsIGxvb3AgaXRlcmF0aW9uOiA1NTEKUmV3aW5kYWJsZTogNjA2NCwgbG9vcCBp dGVyYXRpb246IDc1MwpSZXdpbmRhYmxlOiA2MDQ4LCBsb29wIGl0ZXJhdGlvbjogOTY2ClJld2lu ZGFibGU6IDYwMzIsIGxvb3AgaXRlcmF0aW9uOiAxMTgwCgpzbyB0aGUgcmVzdWx0aW5nIGdyYW51 bGFyaXR5IGlzIDY0IGJ5dGVzLgoKQW4gdW5mb3J0dW5hdGUgb2JzZXJ2YXRpb24gaXMgdGhhdCwg d2l0aG91dCBzbmRfcGNtX2F2YWlsKCksIGV2ZW4gb24gaHcgCmp1c3QgYWZ0ZXIgYW4gdW5kZXJy dW4gc25kX3BjbV9yZXdpbmRhYmxlKCkgY2FuIHJldHVybiBuZWdhdGl2ZSBudW1iZXJzIApzdWNo IGFzIC0xNiBvciAtMjUgdGhhdCBsZWFkIHRvIG5vbnNlbnNlIGVycm9yIGNvZGVzIChFQlVTWSBv ciBFTk9UVFkpLgoKPiAgPiBJbiBhZGRpdGlvbiwgdGhlcmUgc2VlbXMgdG8gYmUgc29tZSBjb25m dXNpb24gaGVyZSBiZXR3ZWVuIHRoZQo+IGhhcmR3YXJlIHBlcmlvZHMgKHdoaWNoIGFyZSBhbHdh eXMgMjU2IHNhbXBsZXMpIGFuZCB0aGUgcGVyaW9kIHNpemUgaW4KPiBodyBwYXJhbXMuIElmIEkg dW5kZXJzdGFuZCB0aGUgb3RoZXIgZW1haWxzIGNvcnJlY3RseSwgcmVnYXJkbGVzcyBvZgo+IHdo YXQgdGhlIHVzZXIgc2V0IGluIGh3X3BhcmFtcywgdGhlIHJlcG9ydGVkIHBvc2l0aW9uIG9uIHlt ZnBjaSB3aWxsIGJlCj4gYWNjdXJhdGUgdG8gd2l0aGluIDI1NiBzYW1wbGVzLgo+ICA+Cj4KPiBo dHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmcvfnRpd2FpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIv Y2gwNXMwNi5odG1sI3BjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXBvaW50ZXItY2FsbGJhY2sKPgo+ IFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIFBDTSBtaWRkbGUgbGF5ZXIgaW5xdWly ZXMgdGhlIGN1cnJlbnQKPiBoYXJkd2FyZSBwb3NpdGlvbiBvbiB0aGUgYnVmZmVyLiBUaGUgcG9z aXRpb24gbXVzdCBiZSByZXR1cm5lZCBpbgo+IGZyYW1lcywgcmFuZ2luZyBmcm9tIDAgdG8gYnVm ZmVyX3NpemUgLSAxLgo+Cj4gVGhpcyBkb2VzIG5vdCBpbXBsaWVzIGFsbCBkcml2ZXJzIG11c3Qg Z2l2ZSBhY2N1cmF0ZSBwb3NpdGlvbiBhdCBhbnkKPiB0aW1lLCBzb21lIGRyaXZlcnMgbWF5IHVz ZSB0aW1lciBpbnRlcnJ1cHQgYW5kIGluY3JlYXNlIHRoZSBwb2ludGVyIGJ5Cj4gb25lIHBlcmlv ZHMKClRoYXQncyB3aHkgd2UgaGF2ZSBzbmRfcGNtX2h0aW1lc3RhbXAoKS4KCj4KPiBodHRwOi8v d3d3LmFsc2EtcHJvamVjdC5vcmcvfnRpd2FpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIvY2gwNXMw Ny5odG1sI3BjbS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXItYm91bmRhcnkKPgo+IEhpZ2gg ZnJlcXVlbmN5IHRpbWVyIGludGVycnVwdHMKPgo+IFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJk d2FyZSBkb2Vzbid0IGdlbmVyYXRlIGludGVycnVwdHMgYXQgdGhlIHBlcmlvZAo+IGJvdW5kYXJ5 IGJ1dCBpc3N1ZXMgdGltZXIgaW50ZXJydXB0cyBhdCBhIGZpeGVkIHRpbWVyIHJhdGUgKGUuZy4g ZXMxOTY4Cj4gb3IgeW1mcGNpIGRyaXZlcnMpLiBJbiB0aGlzIGNhc2UsIHlvdSBuZWVkIHRvIGNo ZWNrIHRoZSBjdXJyZW50IGhhcmR3YXJlCj4gcG9zaXRpb24gYW5kIGFjY3VtdWxhdGUgdGhlIHBy b2Nlc3NlZCBzYW1wbGUgbGVuZ3RoIGF0IGVhY2ggaW50ZXJydXB0Lgo+IFdoZW4gdGhlIGFjY3Vt dWxhdGVkIHNpemUgZXhjZWVkcyB0aGUgcGVyaW9kIHNpemUsIGNhbGwKPiBzbmRfcGNtX3Blcmlv ZF9lbGFwc2VkKCkgYW5kIHJlc2V0IHRoZSBhY2N1bXVsYXRvci4KClRoaXMgY2xlYXJzIHRoZSBj b25mdXNpb24uCgo+Cj4gSSBhbSBhbHNvIGNvbmZ1c2UgYWJvdXQgeW1mcGNpIHJlYWxseSB1c2Ug dGltZXIgaW50ZXJydXB0cy4KCldlbGwsIHRoYXQncyBlYXN5LiBBY2NvcmRpbmcgdG8geW91ciBv d24gd29yZHMsIHRoZSBjYXJkIHNlbmRzIGFuIAppbnRlcnJ1cHQgZXZlcnkgMjU2IHNhbXBsZXMg YW5kIGhhcyBubyByZWFsIG5vdGlvbiBvZiB0aGUgdXNlci1kZWZpbmVkIApwZXJpb2Qgc2l6ZS4g RnJvbSBBTFNBIHZpZXdwb2ludCwgdGhpcyAyNTYtc2FtcGxlIGludGVycnVwdCBpcyBqdXN0IGEg CnRpbWVyIChidXQgbm90IGEgdGltZXIgdGhhdCBpcyBtYW5hZ2VkIHRocm91Z2ggZnVuY3Rpb25z IHRoYXQgaGF2ZSAKInRpbWVyIiBpbiB0aGUgbmFtZSkuCgo8c25pcCBpbmZvcm1hdGlvbiBvbiB0 aGUgT1NTIERTUF9DQVBfUkVBTFRJTUUgYW5kIERTUF9DQVBfQkFUQ0ggCmNhcGFiaWxpdHkgYml0 cz4KCgo+IGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmxpbnV4LmFsc2EuZGV2ZWwvNTU5 NwoKSW50ZXJlc3RpbmcsIGJ1dCBkb2VzIG5vdCByZWFsbHkgY2xhcmlmeSBhbnl0aGluZy4KCj4g ID4gaHdfcHRyIGdyYW51bGFyaXR5IGlzIGRlZmluZWQgb25seSBieSBwZXJpb2RfYnl0ZXNfbWlu IChhbmQKPiBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzIGlmIGFueSkuCgpXZWxsLCB0aGlzIGRpc2Fn cmVlcyB3aXRoIG15IGV4cGVyaW1lbnRzLiBGb3IgUzE2X0xFIHN0ZXJlbywgCnNuZF9wY21faHdf cGFyYW1zX2dldF9wZXJpb2Rfc2l6ZV9taW4oKSBzYXlzIDMyIHNhbXBsZXMgZm9yIGJvdGggUENI IGFuZCAKSERNSSwgd2hpbGUgdGhlIG1lYXN1cmVkIGdyYW51bGFyaXR5IGlzIGRpZmZlcmVudCAo OCBhbmQgMTYgc2FtcGxlcykuCgo+Cj4gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9jZ2l0L2xpbnV4 L2tlcm5lbC9naXQvdGl3YWkvc291bmQuZ2l0L2NvbW1pdC9zb3VuZC9zb2M/aWQ9YzBkZTQyYmY1 OTUyMzhlOWRkNTkzNDA1ZWJjMjk5MmNjODQ3MDczMgo+Cj4gaHcucGVyaW9kX2J5dGVzX21pbiA9 IDI1NjsKPiBody5maWZvX3NpemUgPSBkbWFfZGF0YS0+Zmlmb19zaXplOwo+Cj4gRG9lcyBzb2Mg ZHJpdmVycyB0cmFuc2ZlciBhdWRpbyBpbiAyNTYgYnl0ZXMgPwo+Cj4gc2VlbSB0d2ljZSB0aGUg dmFsdWVzIG9mIHNuZC1oZGEtSW50ZWwgKHBjaWUgYnVzKQoKTm8gY29tbWVudCBvbiB0aGlzLCBJ IGFtIG5vdCBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLgoKPiAgPgo+ICA+IFB1bHNlQXVkaW8gaGFz IHRoZSBmb2xsb3dpbmcgY29uc2lkZXJhdGlvbiBoZXJlOiBpZiB0aGUgY2FyZCBjYW5ub3QKPiBy ZXBvcnQgdGhlIHBvc2l0aW9uIGFjY3VyYXRlbHksIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgdGlt ZXN0YW1wLWJhc2VkCj4gc2NoZWR1bGluZywgYXMgdGhpcyBicmVha3MgbW9kdWxlLWNvbWJpbmUt c2luayAob3IgYW55IHN1Y2Nlc3NvciBvZiBpdCksCj4gYmVjYXVzZSBpdCByZWxpZXMgb24gdmVy eSBhY2N1cmF0ZSBlc3RpbWF0aW9ucyBvZiB0aGUgYWN0dWFsIHNhbXBsZSByYXRlCj4gcmF0aW8g YmV0d2VlbiB0d28gbm9uLWlkZW50aWNhbCBjYXJkcy4KPiAgPgo+Cj4gaHR0cHM6Ly9idWdzLmZy ZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc4OTkKClRoaXMgaXMgc29tZXRoaW5nIHRv IGludmVzdGlnYXRlLCBJIGFtIG5vdCByZWFkeSB0byBwcm92aWRlIGFueSB1c2VmdWwgCmNvbW1l bnQuIEFsdGhvdWdoIGluIGNvbW1lbnQgIzIgYmx1ZXRvb3RoIGlzIG1lbnRpb25lZCwgYW5kIHRo aXMgaXMgCmluZGVlZCBhbiBleGFtcGxlIHdoZXJlIGV2ZW4gc29tZXdoYXQgYWNjdXJhdGUgdGlt aW5nIGluZm9ybWF0aW9uIGlzIG5vdCAKYXZhaWxhYmxlLgoKPiBpZiB5b3Ugd2FudCB0byBoZWFy IHNvdW5kIGZyb20gdHdvIHNuZC1oZGEtaW50ZWwgYXQgdGhlIHNhbWUgdGltZSB1c2luZwo+IGNv bWJpbmVkIHNpbmssIHlvdSBtYXkgbmVlZCBkcml2ZXIgcHJvdmlkZSB0aGUgb3V0cHV0IGRlbGF5 IGluIGhkYSBjb2RlYwo+Cj4gNy4zLjQuNSBBdWRpbyBGdW5jdGlvbiBHcm91cCBDYXBhYmlsaXRp ZXMKPgo+IE91dHB1dCBEZWxheSBpcyBhIGZvdXIgYml0IHZhbHVlIHJlcHJlc2VudGluZyB0aGUg bnVtYmVyIG9mIHNhbXBsZXMKPiBiZXR3ZWVuIHdoZW4gdGhlIHNhbXBsZSBpcyByZWNlaXZlZCBm cm9tIHRoZSBMaW5rIGFuZCB3aGVuIGl0IGFwcGVhcnMgYXMKPiBhbiBhbmFsb2cgc2lnbmFsIGF0 IHRoZSBwaW4uIFRoaXMgbWF5IGJlIGEg4oCcdHlwaWNhbOKAnSB2YWx1ZS4gSWYgdGhpcyBpcwo+ IDAsIHRoZSB3aWRnZXRzIGFsb25nIHRoZSBjcml0aWNhbCBwYXRoIHNob3VsZCBiZSBxdWVyaWVk LCBhbmQgZWFjaAo+IGluZGl2aWR1YWwgd2lkZ2V0IG11c3QgcmVwb3J0IGl0cyBpbmRpdmlkdWFs IGRlbGF5Lgo+Cj4gRmlndXJlIDg1LiBBdWRpbyBGdW5jdGlvbiBHcm91cCBDYXBhYmlsaXRpZXMg UmVzcG9uc2UgRm9ybWF0Cj4KPiA3LjMuNC42IEF1ZGlvIFdpZGdldCBDYXBhYmlsaXRpZXMKPgo+ IERlbGF5IGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHNhbXBsZSBkZWxheXMgdGhyb3VnaCB0aGUg d2lkZ2V0LiBUaGlzIG1heQo+IGJlIDAgaWYgdGhlIGRlbGF5IHZhbHVlIGluIHRoZSBBdWRpbyBG dW5jdGlvbiBQYXJhbWV0ZXJzIGlzIHN1cHBsaWVkIHRvCj4gcmVwcmVzZW50IHRoZSBlbnRpcmUg cGF0aC4KPgo+IGh0dHA6Ly9naXQua2VybmVsLm9yZy9jZ2l0L2xpbnV4L2tlcm5lbC9naXQvdGl3 YWkvaGRhLWVtdS5naXQvdHJlZS9jb2RlY3MKPgo+IHNvbWUgaGRhIGNvZGVjcyByZXBvcnQgZGVs YXkgaW4gYXVkaW8gb3V0cHV0L2lucHV0IHdpZGdldHMgYW5kIHRoZQo+IHJhbmdlcyBvZiBkZWxh eSB2YXJ5IGZyb20gMyB0byAxMyBzYW1wbGVzLCBoZGFfcHJvYy5jIGRpZCBub3Qgc2hvdwo+IG91 dHB1dC9pbnB1dCBkZWxheSBpbiB0aGUgYXVkaW8gZnVuY3Rpb24gZ3JvdXAKCkludGVyZXN0aW5n LCBpbXBsZW1lbnRhYmxlIGZvciBzb21lb25lIHdpdGggdGhlIHNraWxscyBpbiB0aGlzIGFyZWEs IGJ1dCAKcHJvYmFibHkgbm90IHJlbGV2YW50IGZvciB0aGUgYWJvdmUgZnJlZWRlc2t0b3AgYnVn LiBXaGF0IHlvdSBhcmUgCnRhbGtpbmcgYWJvdXQgaXMganVzdCBhIGNvbnN0YW50IG9mZnNldCBp biB0aGUgc25kX3BjbV9kZWxheSgpIHJldHVybiAKdmFsdWVzLiBUaGF0J3MgYmFkLCBidXQgSSBn dWVzcyBub3QgYmFkIGVub3VnaCBmb3IgUHVsc2VBdWRpbyB0byAKc3R1dHRlci4gV2hhdCBQdWxz ZUF1ZGlvIGRvZXNuJ3QgdG9sZXJhdGUgaXMgaml0dGVyLgoKPgo+IERvZXMgaXQgbWVhbiB0aGF0 IHB1bHNlYXVkaW8gbmVlZCB0byBhZGQgYmFjayB0aGUgZGlmZmVyZW5jZSBvZiBvdXRwdXQKPiBk ZWxheSBvZiB0d28gaGRhIGNvZGVjcyA/CgpZZXMuCgo+Cj4gSWYgeWVzLCB0aGlzIGxvb2sgbGlr ZSBjb21iaW5lZCBzaW5rIGlzIGFsc28gbm90IHJld2luZGFibGUgdG9vIHdoZW4KPiBkaWZmZXJl bmNlIG9mICBvdXRwdXQgZGVsYXkgaXMgbm90IHplcm8KCkluZGVlZCwgaXQgaXMgbm90IGZ1bGx5 IHJld2luZGFibGUuIEJ1dCB3aGF0J3Mgd29yc2UgaXMgdGhhdCB0aGUgCmNvbWJpbmVkIHNpbmsg Y29udGFpbnMgYSB2YXJpYWJsZS1yYXRlIHJlc2FtcGxlciB0aGF0IGlzIHVzZWQgaW4gb3JkZXIg CnRvIGNvbXBlbnNhdGUgYWRhcHRpdmVseSBmb3Igc2xpZ2h0bHkgZGlmZmVyZW50IHNhbXBsZSBy YXRlcyBvZiB0aGUgdHdvIApjYXJkcy4KCj4KPiBodHRwOi8vZ2l0LmFsc2EtcHJvamVjdC5vcmcv P3A9YWxzYS1wbHVnaW5zLmdpdDthPWJsb2I7Zj1kb2MvdXBtaXgudHh0O2hiPUhFQUQKPgo+IGZv ciB1cG1peCBwbHVnaW4sIHRoaXMgbWVhbiB0aGF0IHNuZF9wY21fcmV3aW5kYWJsZSBtYXkgbmVl ZCB0byByZXR1cm4KPiB6ZXJvIHdoZW4gdXNlciBzcGVjaWZ5IGRlbGF5ID4gMCBpZiB5b3Ugd2Fu dCAiZ2xpdGNoIGZyZWUiIHJld2luZAoKQWJzb2x1dGVseSBjb3JyZWN0LgoKPiBPdGhlciBwdWxz ZWF1ZGlvIG1vZHVsZXMgc2VlbiBkb2VzIG5vdCBzdXBwb3J0IHJld2luZCAoZS5nLiBqYWNrLAo+ IHR1bm5lbCwgQmx1ZXRvb3RoLC4uLgo+Cj4gaHR0cDovL2dpdC5hbHNhLXByb2plY3Qub3JnLz9w PWFsc2EtcGx1Z2lucy5naXQ7YT10cmVlCj4KPiBPdGhlciBhbHNhIHBsdWdpbnMgKGUuZy4gSmFj aywgb3NzLC4uLikgc2VlbSBub3Qgc3VwcG9ydCByZXdpbmQKCkphY2sgaXMgaW50ZXJlc3Rpbmcg aGVyZTogaXQgaXMgdGhlIG9ubHkgaW9wbHVnLWJhc2VkIHBsdWdpbiB3aGljaCBzZXRzIAptbWFw X3J3ID0gMS4gQXMgc3VjaCwgQUxTQSB0cmVhdHMgaXQgYXMgc29tZXRoaW5nIHRoYXQgaGFzIG1t YXBwZWQgCmJ1ZmZlciB3aXRoIHRoZSBzYW1lIHNlbWFudGljcyBhcyBhbiBvcmRpbmFyeSBoYXJk d2FyZSBzb3VuZCBjYXJkLCBhbmQgCnBlcmZvcm1zIHJld2luZHMgdXNpbmcgdGhpcyBidWZmZXIu IFRoZXJlIGlzIGFsc28gYSAiaGFyZHdhcmUiIHBvc2l0aW9uIApjYWxsYmFjay4gVGhlIGFjdHVh bCB0cmFuc2ZlciBvZiBzYW1wbGVzIGZyb20gdGhhdCBidWZmZXIgdG8gSkFDSyBpcyAKcGVyZm9y bWVkIGluIGEgc2VwYXJhdGUgcmVhbHRpbWUgdGhyZWFkIHdoaWNoIGlzIGltcGxpY2l0bHkgY3Jl YXRlZCBpbiAKamFja19hY3RpdmF0ZSgpLiBUaGUgcG9yaXRpb24gaXMgdXBkYXRlZCBldmVyeSBK QUNLIHBlcmlvZC4KClRoZSB3aG9sZSBjb25zdHJ1Y3Rpb24gc2hvdWxkIHN1cHBvcnQgcmV3aW5k cywgd2l0aCB0aGUgbm9uLXJld2luZGFibGUgCnJlbWFpbmRlciBiZWluZyBvbmUgSkFDSyBwZXJp b2QgKHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZnJvbSBvbmUgQUxTQSAKcGVyaW9kKS4gSWYgdGhl IEpBQ0sgcGVyaW9kIGlzIDI1NiBzYW1wbGVzLCB0aGlzIHBsdWdpbiBzaG91bGQgYmVoYXZlIAp2 ZXJ5IG11Y2ggbGlrZSBvbmUgdm9pY2Ugb2YgeW1mcGNpLgoKSG93ZXZlciwgdGhlcmUgaXMgc3Rp bGwgYSBidWcgKHBvc3NpYmx5IGZpeGFibGUpLiBXaGlsZSBydW5uaW5nIG15IHRlc3QgCnByb2dy YW0gb3ZlciB0aGlzIHBsdWdpbiBkb2VzIHByb2R1Y2Ugc2lsZW5jZSwgaXQgcHJvZHVjZXMgYSB3 cm9uZyAKYW1vdW50IG9mIHNpbGVuY2UuIEFzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyB3 aXRoIApzbmRfcGNtX2phY2tfcG9sbF9yZXZlbnRzKCkgb3Igc25kX3BjbV9qYWNrX3BvaW50ZXIo KS4gSSBoYXZlIG5vdCB0ZXN0ZWQgCnRoaXMgcGF0Y2ggeWV0LCBhbHRob3VnaCBJIHNob3VsZDoK Cmh0dHA6Ly9jb21tZW50cy5nbWFuZS5vcmcvZ21hbmUubGludXguYWxzYS5kZXZlbC8xMjI1NTQK CkFzIGZvciBpb3BsdWctYmFzZWQgcGx1Z2lucyB3aXRoIG1tYXBfcncgPSAwLCB0aGV5IGFyZSBp bmRlZWQgbm90IApyZXdpbmRhYmxlIGF0IGFsbC4KCj4KPiBIb3cgYWJvdXQgcm91dGUgYW5kIHBs dWcgcGx1Z2lucyA/CgpSb3V0ZSBzaG91bGQgaW4gdGhlb3J5IHN1cHBvcnQgcmV3aW5kLCBidXQg dGhlcmUgbWF5IGJlIGJ1Z3MuIFRoZSBiZXN0IAp3YXkgdG8gdGVzdCBpcyB0byBydW4gYSBwcm9n cmFtIHRoYXQgSSBhdHRhY2hlZCB0byBhbiBlYXJsaWVyIG1lc3NhZ2UgaW4gCnRoaXMgdGhyZWFk IGFuZCBsaXN0ZW4gLSBhbnkgbm9uLXNpbGVuY2UgaW5kaWNhdGVzIGEgbm9uLXJld2luZGFibGUg cGx1Z2luLgoKUGx1ZyBpcyBub3QgcmVhbGx5IGEgcGx1Z2luLCBpdCBqdXN0IGluc2VydHMgb3Ro ZXIgcGx1Z2lucyBhbmQgdGhlbiAKZGlzYXBwZWFycy4gSXQgY2FuIGluc2VydCBhZHBjbSBhbmQg cmF0ZSBwbHVnaW5zIHdoaWNoIGFyZSBub3QgcmVhbGx5IApyZXdpbmRhYmxlLgoKPgo+ICA+Cj4g ID4gRm9yIGNhcmRzIHRoYXQgYXJlIG5vdCBiYXRjaCwgaXQgd2lsbCBhdHRlbXB0IHRvIHNldCBi b3RoIHRoZSBwZXJpb2QKPiBzaXplIGFuZCB0aGUgYnVmZmVyIHNpemUgdG8gc29tZXRoaW5nIGxh cmdlICh0c2NoZWRfc2l6ZSwgdGhlIGRlZmF1bHQgaXMKPiAycykgYW5kIGxldCB0aGUgZHJpdmVy IGFkanVzdCB0aGF0IHRvIHNvbWV0aGluZyBtb3JlIHNlbnNpYmxlIGZvciB0aGUKPiBjYXJkLiBJ IHRoaW5rIHRoYXQgaW4gcHJhY3RpY2UgdGhpcyBtZWFucyBwZXJpb2RzX21pbiwgYWx0aG91Z2gg aXQgaXMKPiBuZXZlciBtZW50aW9uZWQgZXhwbGljaXRseSBpbiBQdWxzZUF1ZGlvIHNvdXJjZS4K Pgo+IGl0IGRvZXMgbm90ICBtZWFuIGFsbCBkcml2ZXJzIHVzZXMgcGVyaW9kc19taW4gd2hlbiBh cHBsaWNhaXRpb24gZGlkIG5vdAo+IGV4cGxpY2l0bHkgc2V0ICBwZXJpb2QgLCBwZXJpb2QgdGlt ZSBvciBwZXJpb2QgYnl0ZXMKPgo+IGh0dHA6Ly9naXQuYWxzYS1wcm9qZWN0Lm9yZy8/cD1hbHNh LWxpYi5naXQ7YT1jb21taXQ7aD0wOTg3OWE0YmI1ODE5OWY2NGFiY2I4ZGY1MDZmOTE3YzhlZmMy MzgzCj4KPiBTb21lIGRyaXZlciAncyBwZXJpb2RfYnl0ZXNfbWF4IGNhbiBiZSBsZXNzIHRoYW4g KGJ1ZmZlcl9ieXRlc19tYXggLwo+IHBlcmlvZHNfbWluKQoKUGxlYXNlIHNlZSB0aGlzIGNvZGUg YW5kIG1ha2UgeW91ciBvd24gY29uY2x1c2lvbnMuCgpodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5v cmcvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL3RyZWUvc3JjL21vZHVsZXMvYWxzYS9hbHNhLXV0aWwu YyNuMjk4CgpQdWxzZUF1ZGlvIGRvZXMgdHJ5IHNldmVyYWwgc3RyYXRlZ2llcywgYW1vbmcgdGhv c2UgaXMgInNldCBub3RoaW5nIGF0IAphbGwgaWYgZXZlcnl0aGluZyBlbHNlIGZhaWxlZCIuCgo+ Cj4gID4KPiAgPiBGb3IgYmF0Y2ggY2FyZHMsIHRoZSBkZXNpcmVkIHBlcmlvZCAob3IsIGluIFBB IHNwZWFrLCAiZnJhZ21lbnQiKQo+IHRpbWUgYW5kIHRoZSBudW1iZXIgb2YgcGVyaW9kcyBjb21l IGZyb20gdGhlIGNvbmZpZywgb2YgY291cnNlIHN1YmplY3QKPiB0byBhZGp1c3RtZW50cyBtYWRl IGJ5IHRoZSBBTFNBIGxpYnJhcnkgdG8gZml0IHRoZSBoYXJkd2FyZSByZXF1aXJlbWVudHMuCj4K PiBhcyBsb25nIGFzIHRoZSBhcHBsaWNhdGlvbiB1c2UgdHdvIHBlcmlvZHMgLCBubyBzYWZlIHJl d2luZCBpcyBwb3NzaWJsZQo+IGFzIHRoZSBhcHBsaWNhdGlvbiBuZWVkIHRvIGtlZXAgYXQgbGVh c3QgdHdvIHBlcmlvZHMgZmlsbCBpbiB0aGUgYnVmZmVyCj4gaWYgdGhlIHBvaW50ZXIgaXMgbm90 IGFjY3VyYXRlLgoKQ29ycmVjdCBpZiB3ZSB1c2UgdGhlIHZpZXdwb2ludCB0aGF0IHRoZSBwb2lu dGVyIGdyYW51bGFyaXR5IGlzIG9uZSAKcGVyaW9kIGZvciBzdWNoIGNhcmRzLiBXaGljaCBpcyBu b3QgdGhlIGNhc2UgZm9yIHltZnBjaSBhbmQgZm9yIFVTQiBhdWRpby4KCj4KPiBkbyB5b3UgbWVh biB0aGF0IHB1bHNlYXVkaW8gc3RpbGwgcGVyZm9ybSByZXdpbmQgd2hlbiB1c2luZyBBQzMKPiBw YXNzdGhyb3VnaCBvbiBEaWRpdGFsIHBsYXliYWNrIGRldmljZSA/CgpJIGRvbid0IGtub3cuCgo+ Cj4gaWYgbm90ICwgdGhlIHZhbHVlIG9mIHNuZF9wY21fcmV3aW5kYWJsZSgpIG9mIGRpZ2l0YWwg cGxheWJhY2sgZGV2aWNlCj4gZGVwZW5kcyBvbiB3aGV0aGVyICBubyBhdWRpbyAgYml0IGlzIHNl dCBvciBub3QKCldoaWxlIEkgdW5kZXJzdGFuZCB0aGUgaWRlYSwgSSB3b3VsZCBsaWtlIHRvIHNl ZSBtb3JlIGRldGFpbHMuIFRoZSBvbmx5IApjb25zaWRlcmF0aW9uIHRoYXQgY29tZXMgdG8gbXkg bWluZCBpcyB0aGF0IGl0IHNob3VsZCBub3QgYmUgcG9zc2libGUgdG8gCnJld2luZCBpbnRvIHRo ZSBtaWRkbGUgb2YgdGhlIGN1cnJlbnRseSBwbGF5aW5nIElFQyA2MTkzNyBmcmFtZS4gQnV0IAp0 aGVyZSBhcmUgYWxzbyBzdHVwaWQgcmVjZWl2ZXJzIChlLmcuIEpWQyBUSC1BMjUpIHRoYXQgbXV0 ZSB0aGVpciAKb3V0cHV0cyBpZiBhIG5vbi1JRUMtd3JhcHBlZCBEVFMgc3RyZWFtIChhcyBmb3Vu ZCBvbiBEVFMgQ0RzKSBpcyBjb21pbmcgCndpdGggQUVTMCA9IDYuCgo+Cj4gID5UaGUgZGVmYXVs dHMgYXJlOgo+ICA+Cj4gID4gOyBkZWZhdWx0LWZyYWdtZW50cyA9IDQKPiAgPiA7IGRlZmF1bHQt ZnJhZ21lbnQtc2l6ZS1tc2VjID0gMjUKPiAgPgo+ICA+Cj4gRG9lcyB0aGlzIG1lYW4gdGhhdCBw dWxzZWF1ZGlvIHVzZSB0aGlzIHZhbHVlcyBmb3IgYWxsIHNvdW5kIGNhcmQKPiBpbmNsdWRpbmcg aGRhIHdoZW4gdXNlciBzcGVjaWZ5IHRoaXMgdmFsdWUgPwoKVGhpcyBpcyB0aGUgZGVmYXVsdCBm b3IgYWxsIGNhcmRzIHRoYXQgYXJlIGF1dG9kZXRlY3RlZCBhcyBpbmNvbXBhdGlibGUgCndpdGgg dHNjaGVkIG9yIHdoZXJlIHRoZSB1c2VyIGNvbmZpZ3VyZWQgdHNjaGVkPTAuIFRoZXNlIGRlZmF1 bHRzIGNhbiAKc3RpbGwgYmUgb3ZlcnJpZGRlbiB3aXRoIG1vZHVsZS1hbHNhLWNhcmQgcGFyYW1l dGVycy4KCj4gU2VlbSB0aGUgdmFsdWVzIGFyZSBjb21tZW50IG91dCBhbmQgbm90IHVzZWQgYnkg cHVsc2VhdWRpbyBhcyBkZWZhdWx0ICwKPiB1c2VycyBoYXZlIHRvIGV4cGxpY2l0bHkgc2V0IHRo ZXNlIGluIHRoZSBmb2xsb3dpbmcgcmVwb3J0CgpUaGUgY29tbWVudGVkLW91dCB2YWx1ZXMgYXJl IHVzZWQgYnkgZGVmYXVsdCB3aGVuIFB1bHNlQXVkaW8gZGVjaWRlcyAKdGhhdCBpdCBuZWVkcyBh IHRyYWRpdGlvbmFsIChub3QgdHNjaGVkIGJhc2VkKSBwbGF5YmFjayBtb2RlbC4gVGhleSBhcmUg CmluIHRoZSBzb3VyY2U6CgpodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvcHVsc2VhdWRpby9w dWxzZWF1ZGlvL3RyZWUvc3JjL2RhZW1vbi9kYWVtb24tY29uZi5jI245OAoKPiBodHRwczovL2J1 Z3MubGF1bmNocGFkLm5ldC91YnVudHUvK3NvdXJjZS9wdWxzZWF1ZGlvLytidWcvNDI4NjE5L2Nv bW1lbnRzLzk2Cj4KClRoZSBrZXkgaW4gdGhhdCBjb21tZW50IGlzIHRoZSBleHBsaWNpdCB0c2No ZWQ9MC4gV2l0aG91dCB0c2NoZWQ9MCwgCnRoZXNlIHNldHRpbmdzIGFyZSBub3QgdXNlZC4KCi0t IApBbGV4YW5kZXIgRS4gUGF0cmFrb3YKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KQWxzYS1kZXZlbCBtYWlsaW5nIGxpc3QKQWxzYS1kZXZlbEBhbHNhLXBy b2plY3Qub3JnCmh0dHA6Ly9tYWlsbWFuLmFsc2EtcHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m by9hbHNhLWRldmVsCg==