From mboxrd@z Thu Jan 1 00:00:00 1970 From: Smilen Dimitrov Subject: Re: Questions about virtual ALSA driver (dummy), PortAudio and full-duplex drops (playback) Date: Wed, 14 Aug 2013 16:30:31 +0200 Message-ID: <520B9487.7070709@imi.aau.dk> References: <51EF41C8.2040701@imi.aau.dk> <201307241403.28873.gineera@aspect135.co.uk> <51F07150.1060004@imi.aau.dk> <51F0E3C5.4020400@ladisch.de> Reply-To: alsa-devel@alsa-project.org Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from asmtp.www1.dk (asmtp.www1.dk [91.144.243.214]) by alsa0.perex.cz (Postfix) with ESMTP id AB2382654D2 for ; Wed, 14 Aug 2013 16:30:38 +0200 (CEST) Received: from [31.193.237.139] (helo=cp6.danhost.dk) by asmtp.www1.dk with esmtps (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.80 (FreeBSD)) (envelope-from ) id 1V9c5u-000DGr-DT for alsa-devel@alsa-project.org; Wed, 14 Aug 2013 16:30:38 +0200 Received: from [62.199.57.204] (port=56431 helo=[192.168.1.12]) by cp6.danhost.dk with esmtpa (Exim 4.80.1) (envelope-from ) id 1V9c5u-0000Xn-2l for alsa-devel@alsa-project.org; Wed, 14 Aug 2013 16:30:38 +0200 In-Reply-To: <51F0E3C5.4020400@ladisch.de> 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: alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org SGkgYWxsLAoKU2luY2UgdGhlIFBvcnRBdWRpbyBmdWxsLWR1cGxleCBwcm9ibGVtIEkgaGF2ZSwg ZGVwZW5kcyBvbiBib3RoIHRoZSBjYXB0dXJlIGFuZCBwbGF5YmFjayBkaXJlY3Rpb24gLSBJIHRo b3VnaHQgSSdkIGFsc28gbG9vayBpbnRvIHBsYXliYWNrLCBhZ2FpbiBieSBjb21wYXJpbmcgdGhl IGBoZGFfaW50ZWxgIGFuZCBgZHVtbXlgIEFMU0EgZHJpdmVycywgYW5kIHBvc3QgYSB3cml0ZXVw IG9uIGl0IChnaXZlbiB0aGF0IG9ubHkgdGhlIGNhcHR1cmUgZGlyZWN0aW9uIHdhcyBkaXNjdXNz ZWQgc28gZmFyKS4gSXQgd291bGQgZGVmaW5pdGVseSBiZSBuaWNlIHRvIGdldCBzb21lIGZlZWRi YWNrIG9uIGl0LCBzbyBJIGtub3cgd2hlcmUgYW0gSSBnb2luZyB3cm9uZyB3aXRoIHRoaXMgLSBh bmQgYXBvbG9naWVzIGFnYWluIGZvciB0aGUgdmVyYm9zaXR5LgoKVGhpcyB3YXMgZ3JlYXRseSBt b3RpdmF0ZWQgYnkgdGhlIGZvbGxvd2luZyBlc3NlbnRpYWwgY29tbWVudCBieSBDbGVtZW5zLCBl YXJsaWVyIGluIHRoZSB0aHJlYWQ6Cgo+Pj4gT24gMjAxMy0wNy0yNSAxMDozNywgQ2xlbWVucyBM YWRpc2NoIHdyb3RlOgo+Pj4+IFlvdXIgZHJpdmVyJ3MgLnBvaW50ZXIgY2FsbGJhY2sgbXVzdCBy ZXBvcnQgdGhlICphY3R1YWwqIHBvc2l0aW9uIGF0Cj4+Pj4gd2hpY2ggdGhlIGhhcmR3YXJlIGhh cyBmaW5pc2hlZCByZWFkaW5nIGZyb20gdGhlIGJ1ZmZlcgo+PiAuLi4gZm9yIGEgcGxheWJhY2sg c3RyZWFtLCBvciBmaW5pc2hlZCByZWFkaW5nLCBmb3IgYSBjYXB0dXJlIHN0cmVhbS4KCkkgd291 bGQgcmVzdGF0ZSB0aGF0IGNvbW1lbnQgaW4gYSBzbGlnaHRseSBzdHJvbmdlciBsYW5ndWFnZTog dGhlIHBsYXliYWNrIGFuZCBjYXB0dXJlIG9wZXJhdGlvbnMsIGFsdGhvdWdoIHNpbWlsYXIgaW4g bWFueSByZXNwZWN0cywgYXJlICoqZnVuZGFtZW50YWxseSoqIGRpZmZlcmVudC4gSSwgdW5mb3J0 dW5hdGVseSwgY291bGRuJ3QgYXBwcmVjaWF0ZSB0aGUgY29tbWVudCBpbiBpdHMgZnVsbG5lc3Ms IHVudGlsIEkgaGFkIHNvbWUgY29kZSBmb3IgdGVzdHMsIGFuZCByZXN1bHRpbmcgcGljdHVyZXMg dG8gbG9vayBhdCA6KSBUaGVzZSB0ZXN0IHNjcmlwdHMgYW5kIGltYWdlcywgd2hpY2ggd2lsbCBi ZSByZWZlcnJlZCB0byBiZWxvdywgYXJlIGFnYWluIHBvc3RlZCBhdCB0aGUgbGluayBiZWxvdyAo c2VlIHRoZSBzbGlnaHRseSB1cGRhdGVkIFJlYWRtZSB0aGVyZSk6CgogICAgaHR0cDovL3NkYWF1 YmNrcC5zb3VyY2Vmb3JnZS5uZXQvcG9zdC9hbHNhLWNhcHR0ZXN0LwoKCk9uZSBvZiB0aGUgbWlz Y29uY2VwdGlvbnMgdGhhdCBJIGhhZCBlYXJsaWVyLCB3YXMgdGhhdCBpbiBBTFNBLCB0aGUgcHJv cGVyIHN0cmVhbWluZyBvcGVyYXRpb24gZXNzZW50aWFsbHkgYm9pbHMgZG93biB0byBfb25seV8g d2hhdCB0aGUgLnBvaW50ZXIgZnVuY3Rpb24gcmV0dXJucyBmb3IgZWFjaCBzdHJlYW1pbmcgZGly ZWN0aW9uLiBUaGF0IGlzIHByb2JhYmx5IHN0aWxsIGNvcnJlY3QgaW4gYSBzZW5zZSAtIGJ1dCBJ IGd1ZXNzLCBpdCBpcyBtb3JlIGNvcnJlY3QgdG8gc2F5LCB0aGF0OiB0aGUgcHJvcGVyIHN0cmVh bWluZyBvcGVyYXRpb24gaW4gQUxTQSBpcyBlc3NlbnRpYWxseSBkZXRlcm1pbmVkIGJ5IHRocmVl IHZhcmlhYmxlcy9wYXJhbWV0ZXJzL3Byb3BlcnRpZXM6CgoqIHRoZSB2YWx1ZSByZXR1cm5lZCBi eSB0aGUgLnBvaW50ZXIgZnVuY3Rpb24gKHRoZSAucG9pbnRlciBwb3NpdGlvbik7CiogdGhlIGh3 X3B0cjsgYW5kCiogdGhlIGFwcGxfcHRyCgouLi4gb2YgZWFjaCBzdHJlYW07IGFsbCBvZiB0aGVt IGV4cHJlc3NlZCBpbiB1bml0cyBvZiBmcmFtZXMuIEkgdGhpbmsgSSBpbXBsaWNpdGx5IHRvb2sg dGhlbSB0byBtZWFuIHRoZSBzYW1lLCBiZWNhdXNlIHRoZXkgYXJlIG5hbWVkIHRoZSBzYW1lIC0g aG93ZXZlciwgc2luY2UgdGhlIHBsYXliYWNrIGFuZCBjYXB0dXJlIGRpcmVjdGlvbiBhcmUgKmZ1 bmRhbWVudGFsbHkqIGRpZmZlcmVudCwgc28gaXMgdGhlIG1lYW5pbmcgb2YgdGhlc2UgdmFyaWFi bGVzLCBkZXBlbmRpbmcgb24gd2hpY2ggc3RyZWFtIGRpcmVjdGlvbiB0aGV5IGFyZSBhdHRyaWJ1 dGVkIHRvOgoKKiBjYXB0dXJlOgoqKiAucG9pbnRlciAtIGFjdHVhbCBwb3NpdGlvbiBhdCB3aGlj aCB0aGUgaGFyZHdhcmUgaGFzIGNvbXBsZXRlZCBjYXB0dXJpbmcgKGZpbmlzaGVkIHJlYWRpbmcp CioqIGh3X3B0ciAgIC0gZm9sbG93cyAucG9pbnRlciAtIGJ1dCBsYXRlOiBvbmx5IGFmdGVyIGEg Y2FsbCB0byBgc25kX3BjbV91cGRhdGVfaHdfcHRyMGAKKiogYXBwbF9wdHIgLSBmb2xsb3dzIGh3 X3B0ciAtIGJ1dCBsYXRlcjogb25seSBhZnRlciBgc25kX3BjbV9yZWFkaWAgKG9yIGl0cyBpb2N0 bCkgaGFzIHJldHVybmVkIHRoZSBnaXZlbiBhbW91bnQgb2YgYnl0ZXMgdG8gdXNlcnNwYWNlCiog cGxheWJhY2s6CioqIGFwcGxfcHRyIC0gaG93IG1hbnkgZnJhbWVzIGhhcyBhcHBsaWNhdGlvbiBh bHJlYWR5IHdyaXR0ZW4gdG8gQUxTQSAoYWZ0ZXIgYHNuZF9wY21fd3JpdGVpYCByZXR1cm5zKQoq KiAucG9pbnRlciAtIGFjdHVhbCBwb3NpdGlvbiBhdCB3aGljaCB0aGUgaGFyZHdhcmUgaGFzIGZp bmlzaGVkIHJlYWRpbmcgZnJvbSBBTFNBIHBsYXliYWNrIGJ1ZmZlciAoYS5rLmEuIG51bWJlciBv ZiBzYW1wbGVzIGFscmVhZHkgcGxheWVkIGJhY2spCioqIGh3X3B0ciAgIC0gZm9sbG93cyAucG9p bnRlciAtIGJ1dCBsYXRlOiBvbmx5IGFmdGVyIGEgY2FsbCB0byBgc25kX3BjbV91cGRhdGVfaHdf cHRyMGAKCkFsc28sIC5wb2ludGVyIGlzIGEgdmFyaWFibGUgdGhhdCB3cmFwcyBhdCBQQ00gYnVm ZmVyX3NpemUgKGluIGZyYW1lcyk7IGh3X3B0ciBhbmQgYXBwbF9wdHIgYXJlIGN1bXVsYXRpdmUg KGFsdGhvdWdoIHRoZXknZCBvZiBjb3Vyc2Ugd3JhcCB0b28sIGlmIHRoZXkgaGl0IHRoZSBzaXpl IG9mIHRoZSB1bnNpZ25lZCBsb25nIGludGVnZXIgdGhleSBhcmUgc3RvcmVkIGluKS4gQWRkaXRp b25hbGx5LCBmb3IgZWl0aGVyIGRpcmVjdGlvbiwgdGhlc2Uga2VybmVsL2RyaXZlciB2YXJpYWJs ZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBgc25kX3BjbV9kZWxheWAgYW5kIGBzbmRf cGNtX2F2YWlsYCBmdW5jdGlvbnMvdmFyaWFibGVzIChhbHRob3VnaCBpdCBzZWVtcyBwb3NzaWJs ZSB0byByZXRyaWV2ZSBod19wdHIgYW5kIGFwcGxfcHRyIGRpcmVjdGx5IGJ5IGNhbGxpbmcgdGhl IGBzbmRfcGNtX3N0YXR1cygpYCBmdW5jdGlvbiwgYW5kIHJldHJpZXZpbmcgYHNuZF9wY21fc3Rh dHVzX3RgL2BzbmRfcGNtX3N0YXR1c2Agc3RydWN0dXJlKS4KCgpJdCBzaG91bGQgYmUgbWVudGlv bmVkIGhlcmUsIHRoYXQgdXNpbmcgYHNuZF9wY21fcmVhZGlgL2BzbmRfcGNtX3dyaXRlaWAgaXMg anVzdCBvbmUgd2F5L21ldGhvZCBvZiBpbnRlcmFjdGluZyB3aXRoIEFMU0EgZnJvbSB1c2Vyc3Bh Y2U7IHRoZXJlIGFyZSwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgYXQgbGVhc3QgZml2ZS4gSSBmaXJz dCBiZWNhbWUgYXdhcmUgb2YgdGhpcyBzdHVtYmxpbmcgdXBvbiBodHRwOi8vYWx1bW5vcy5lbG8u dXRmc20uY2wvfnlhbmV6L2Fsc2Etc2FtcGxlLXByb2dyYW1zLyAsIHdoaWNoIG1lbnRpb25zIE1F VEhPRF9ESVJFQ1RfUlcsIE1FVEhPRF9ESVJFQ1RfTU1BUCwgTUVUSE9EX0FTWU5DX1JXLCBNRVRI T0RfQVNZTkNfTU1BUCwgTUVUSE9EX1JXX0FORF9QT0xMLiBCdXQgdGhlbiwgSSByZWFsaXplZCB0 aGVyZSBpcyBhIHVzZXJzcGFjZSBwcm9ncmFtIGluIGBhbHNhLWxpYi90ZXN0L3BjbS5jYCwgd2hp Y2ggcmVmZXJzIHRvIG1ldGhvZHM6ICJ3cml0ZSIsICJ3cml0ZV9hbmRfcG9sbCIsICJhc3luYyIs ICJhc3luY19kaXJlY3QiLCAiZGlyZWN0X2ludGVybGVhdmVkIiwgImRpcmVjdF9ub25pbnRlcmxl YXZlZCIsIGFuZCAiZGlyZWN0X3dyaXRlIjsgd2hlcmUgYWxsIGJ1dCB0aGUgZmlyc3QgdGhyZWUg YXJlIG1tYXAtYmFzZWQuIEkgaGF2ZSBjaG9zZW4gYHNuZF9wY21fcmVhZGlgL2BzbmRfcGNtX3dy aXRlaWAgZm9yIHRoZSB0ZXN0cywgaW4gb3JkZXIgdG8ga2VlcCB0aGUga2VybmVsIGRlYnVnIGxv ZyBhY3F1aXNpdGlvbnMgYXMgc2hvcnQgYW5kIHNpbXBsZSBhcyBwb3NzaWJsZSAoc28gYXMgdG8g bWFrZSB0aGVpciBmaWx0ZXJpbmcgZm9yIHBsb3R0aW5nIGVhc2llcikgLSBob3dldmVyLCBpdCdz IG5vdGFibGUgdGhhdCBQb3J0QXVkaW8gdXNlcyBhIHBvbGwtYmFzZWQgYXBwcm9hY2ggaW5zdGVh ZC4KCklnbm9yaW5nIHRoZXNlIG90aGVyIGFwcHJvYWNoZXMgZm9yIG5vdyAtIHdoZW4gdXNpbmcg YHNuZF9wY21fcmVhZGlgL2BzbmRfcGNtX3dyaXRlaWAsIEkgZ3Vlc3MgdGhlIG9ubHkgaGludCB0 aGF0IHRoZSBhcHBsaWNhdGlvbiBoYXMgb2YgLnBvaW50ZXIvaHdfcHRyL2FwcGxfcHRyIGFzIGEg d2hvbGUsIGlzIHRocm91Z2ggdGhlIG51bWJlciBvZiBmcmFtZXMgcmV0dXJuZWQgZm9yIHRoYXQg cmVxdWVzdC4gU28sIHNheSB3ZSBoYXZlIHRoaXMgZm9yIGNhcHR1cmU6CgogICAgcmV0X2ZyYW1l cyA9IHNuZF9wY21fcmVhZGkoY2FwdHVyZV9wY21faGFuZGxlLCBhdWRpb2J1ZiwgMzIpOwoKV2l0 aCB0aGlzLCB1c2Vyc3BhY2UgaGFzIHJlcXVlc3RlZCAzMiBjYXB0dXJlL3JlY29yZCBmcmFtZXMg ZnJvbSBBTFNBLiBXaGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zLCB0aGUgcmV0dXJuZWQgYHJldF9m cmFtZXNgIGNhbiBiZToKCiogcmV0X2ZyYW1lcyA9IDMyICAgICAgIC0gZXhhY3RseSB0aGUgYW1v dW50IHdoaWNoIHdhcyByZXF1ZXN0ZWQ7IHdoaWNoIG1lYW5zIG5vIHByb2JsZW0KKiAwIDw9IHJl dF9mcmFtZXMgPCAzMiAgLSBsZXNzIHRoYW4gcmVxdWVzdGVkIDMyOyB3aGljaCBtZWFucyB0aGF0 IGFuIGlucHV0IHVuZGVyZmxvdywgb3IgY2FwdHVyZSB1bmRlcnJ1biwgaGFzIGhhcHBlbmVkIC0g d2hpY2ggbWF5IGJlIHBvc3NpYmxlIHRvIGNvcnJlY3QgbGF0ZXIKKiByZXRfZnJhbWVzIDwgMCAg ICAgICAgLSBhIG5lZ2F0aXZlIG51bWJlcjsgd2hpY2ggbWVhbnMgYW4gb3V0cmlnaHQgZXJyb3Ig aGFzIGhhcHBlbmVkLCB3aGljaCBpcyB1bnJlY292ZXJhYmxlCgpXaGVuIHdlIGxvb2sgYXQgcGxh eWJhY2s6CgogICAgcmV0X2ZyYW1lcyA9IHNuZF9wY21fd3JpdGVpKHBsYXliYWNrX3BjbV9oYW5k bGUsIGF1ZGlvYnVmLCAzMik7CgouLi4gdGhlIG1lYW5pbmcgb2YgdGhlIHJldHVybmVkIGByZXRf ZnJhbWVzYCBpcyBuZWFybHkgdGhlIHNhbWUgYXMgaW4gdGhlIGNhcHR1cmUgY2FzZSAtIGV4Y2Vw dCBoZXJlLCBmb3IgcGxheWJhY2ssIDAgPD0gcmV0X2ZyYW1lcyA8IDMyIG1lYW5zIHRoYXQ6Cgoq IHRoZSB1c2Vyc3BhY2UgYXBwIHJlcXVlc3RzIHRvIHdyaXRlIDMyIGZyYW1lcyB0byBBTFNBJ3Mg cGxheWJhY2sgYnVmZmVyOwoqIEFMU0EgbWFuYWdlZCB0byB3cml0ZSwgc2F5LCAxNiBmcmFtZXMg b2YgdGhlIDMyLCBhbmQgdGhlIGJ1ZmZlciBlbmRlZCB1cCBmdWxsIC0gc28gQUxTQSByZXR1cm5z IDE2IGFzIGByZXRfZnJhbWVzYDsKKiBzaW5jZSBpbiB0aGlzIGNhc2UsIHVzZXJzcGFjZSB3cm90 ZSBfbW9yZV8gZnJhbWVzIHRoYW4gQUxTQSBjb3VsZCBoYW5kbGUsIHRoaXMgaXMgYW4gb3V0cHV0 IG92ZXJmbG93LCBvciBwbGF5YmFjayBvdmVycnVuLCBjb25kaXRpb24uCgpGb3IgY29tcGxldGlv biwgMCA8PSByZXRfZnJhbWVzIDwgMzIgZm9yIHRoZSBjYXB0dXJlIGNhc2UgbWVhbnMgdGhhdDoK CiogdGhlIHVzZXJzcGFjZSBhcHAgcmVxdWVzdHMgdG8gcmVhZCAzMiBmcmFtZXMgZnJvbSBBTFNB J3MgY2FwdHVyZSBidWZmZXI7CiogQUxTQSBtYW5hZ2VkIHRvIHJlYWQsIHNheSwgb25seSAxNiBm cmFtZXMsIGFuZCBpdCBoaXQgdGhlIGxpbWl0cyBvZiB0aGUgYnVmZmVyLCBiZXlvbmQgd2hpY2gg dGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvIHJlYWQgLSBzbyBBTFNBIHJldHVybnMgMTYgYXMgYHJl dF9mcmFtZXNgOwoqIHNpbmNlIGluIHRoaXMgY2FzZSwgdXNlcnNwYWNlIGdvdCBfbGVzc18gZnJh bWVzIGZyb20gQUxTQSB0aGFuIGl0IHJlcXVlc3RlZCwgdGhpcyBpcyBhbiBpbnB1dCB1bmRlcmZs b3csIG9yIGNhcHR1cmUgdW5kZXJydW4sIGNvbmRpdGlvbi4KCk5vdGUgdGhhdCBoZXJlLCBpdCBp cyBsaWtlbHkgdGhhdCBBTFNBIGRlY2lkZXMgd2hhdCB0byByZXR1cm4gYXMgYHJldF9mcmFtZXNg LCBiYXNlZCBvbiBwcmV2aW91cyBhcHBsX3B0ciBhbmQgLnBvaW50ZXIvaHdfcHRyOyBob3dldmVy LCB0aGUgdmFsdWUgdGhhdCBpcyByZXR1cm5lZCBhcyBgcmV0X2ZyYW1lc2AsIHNvb24gZW5vdWdo IGFsc28gYmVjb21lcyB0aGUgbmV3IHZhbHVlIG9mIGFwcGxfcHRyLCBmb3IgYSBnaXZlbiBzdHJl YW0gZGlyZWN0aW9uIChwbGF5YmFjayBvciBjYXB0dXJlKS4KCgpXaXRoIHRoaXMgaW4gbWluZCwg aGVyZSBpcyBteSBleHBlcmllbmNlIHRyeWluZyB0byBwcm9maWxlIHRoZSBwbGF5YmFjayBvcGVy YXRpb24uIEkgd2FzIHVzaW5nIHRoZSBgcGxheW1pbmkuY2AgZmlsZSBpbiB0aGUgYGFsc2EtY2Fw dHRlc3RgIGZvbGRlciwgYWdhaW4gcmFuIGJ5IGBydW4tYWxzYS1jYXB0dGVzdC5zaGAgdG8gb2J0 YWluIGtlcm5lbCBkZWJ1ZyBsb2dzIGFuZCBwbG90cy4gSSBmaXJzdCBzdGFydGVkIHRoZSBzYW1l IHdheSBhcyBJIGRpZCBpbiBgY2FwdG1pbmkuY2AgLSB0aGF0IGlzIChlc3NlbnRpYWxseSk6Cgog IC4uLiAvLyBlbmFibGUgZnRyYWNlIGxvZ2dpbmcKICByZXQxID0gc25kX3BjbV93cml0ZWkocGxh eWJhY2tfcGNtX2hhbmRsZSwgYXVkaW9idWYsIHBlcmlvZF9jaHVua3NpemVfZnJhbWVzKTsKICBy ZXQyID0gc25kX3BjbV93cml0ZWkocGxheWJhY2tfcGNtX2hhbmRsZSwgYXVkaW9idWYsIHBlcmlv ZF9jaHVua3NpemVfZnJhbWVzKTsKICAuLi4gLy8gZGlzYWJsZSBmdHJhY2UgbG9nZ2luZwoKQnV0 LCB0aGF0IHJlc3VsdGVkIHdpdGggYWNxdWlzaXRpb25zIHdoaWNoIGFyZSByYXRoZXIgc2hvcnQg LSBhbmQgb25seSBhIHNpbmdsZSAucG9pbnRlciBmaXJpbmcgd291bGQgYmUgY2FwdHVyZWQsIGUu Zy4gYXMgb24KCiAgICBodHRwOi8vc2RhYXViY2twLnNmLm5ldC9wb3N0L2Fsc2EtY2FwdHRlc3Qv X2NhcHBpY3MwNC9jYXB0dXJlcy0yMDEzLTA4LTEwLTAyLTI1LTQ2LXNocC10cmFjZS1ib3RoLnBk ZgoKVGhlIGJsdWUgbGluZXMsIHNob3dpbmcgdGhlIGNhbGxzIGZyb20gdXNlcnNwYWNlLCBpbmRp Y2F0ZSB0aGF0IGBzbmRfcGNtX3dyaXRlaWAgY291bGQgcmV0dXJuIGluIDE1MCDOvHMgKGZvciBg ZHVtbXktcGF0ZXN0YCwgbXkgdmVyc2lvbiBvZiBgZHVtbXlgKSB0byAyOTAgzrxzIChmb3IgYGhk YS1pbnRlbGApOyB0aGlzIGlzIGZhciBzaG9ydGVyIHRoYW4gdGhlIGV4cGVjdGVkIHBlcmlvZCBv ZiAzMi80NDEwMCB+PSA3MjYgzrxzIC0gd2hpY2ggb3RoZXJ3aXNlIHNlZW1zIHRvIGhhdmUgYmVl biB0aGUgKGF2ZXJhZ2UgYXBwcm94aW1hdGUpIHRpbWUgdGFrZW4gYnkgYHNuZF9wY21fcmVhZGlg IHRvIHJldHVybiAoaW4gdGhlIGNhcHR1cmUgZGlyZWN0aW9uIGNhc2UpISBOb3csIHdoYXQgaXMg Y29uZnVzaW5nIHRvIG1lIGhlcmUsIGlzIHRoZSBpc3N1ZSBvZiBibG9ja2luZzsgbm90ZSB0aGUg ZG9jcyBzYXk6CgogICAgQUxTQSBwcm9qZWN0IC0gdGhlIEMgbGlicmFyeSByZWZlcmVuY2U6IFBD TSAoZGlnaXRhbCBhdWRpbykgaW50ZXJmYWNlCiAgICBodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5v cmcvYWxzYS1kb2MvYWxzYS1saWIvcGNtLmh0bWwKCiAgICA+IEluIGJsb2NrZWQgYmVoYXZpb3Vy LCB0aGVzZSBJL08gZnVuY3Rpb25zIHN0b3AgYW5kIHdhaXQgdW50aWwgdGhlcmUgaXMKICAgID4g YSByb29tIGluIHRoZSByaW5nIGJ1ZmZlciAocGxheWJhY2spIG9yIHVudGlsIHRoZXJlIGFyZSBh IG5ldyBzYW1wbGVzCiAgICA+IChjYXB0dXJlKS4KICAgID4KICAgID4gVGhlIEFMU0EgUENNIEFQ SSB1c2VzIGEgZGlmZmVyZW50IGJlaGF2aW91ciB3aGVuIHRoZSBkZXZpY2UgaXMgb3BlbmVkCiAg ICA+IHdpdGggYmxvY2tlZCBvciBub24tYmxvY2tlZCBtb2RlLiBUaGUgbW9kZSBjYW4gYmUgc3Bl Y2lmaWVkIHdpdGggbW9kZQogICAgPiBhcmd1bWVudCBpbiBzbmRfcGNtX29wZW4oKSBmdW5jdGlv bi4gVGhlIGJsb2NrZWQgbW9kZSBpcyB0aGUgZGVmYXVsdAogICAgPiAod2l0aG91dCBTTkRfUENN X05PTkJMT0NLIG1vZGUpLgoKQXQgZmlyc3QgcmVhZCwgdG8gbWUgdGhpcyB3b3VsZCBtZWFuLCB0 aGF0IGJvdGggYHNuZF9wY21fd3JpdGVpYCBhbmQgYHNuZF9wY21fcmVhZGlgIHdvdWxkIGJsb2Nr LCB1bnRpbCB0aGVpciByZXF1ZXN0IGZvciBOIChzYXksIHBlcmlvZF9zaXplLCBoZXJlIDMyKSBm cmFtZXMgKGVpdGhlciBmb3Igd3JpdGluZyBvciBmb3IgcmVhZGluZykgaGFzIGJlZW4gaG9ub3Jl ZDsgb3IgaW4gb3RoZXIgd29yZHMsIHRoZXkgc2hvdWxkIGJvdGggYmxvY2sgZm9yIGFwcHJveGlt YXRlbHkgdGhlIHBlcmlvZF9zaXplIHRpbWUgKDcyNiDOvHMgZm9yIDMyIGZyYW1lcyBAIENELXF1 YWxpdHkpLiBIb3dldmVyLCB0aGUgZGVidWcgbG9ncyBzaG93IHRoYXQgYHNuZF9wY21fd3JpdGVp YCBjYW4gcmV0dXJuIGluIGZhciBsZXNzIHRpbWUgLSBpbiBuZWFybHkgYSBmaWZ0aCBwYXJ0IG9m IHRoZSBwZXJpb2Q7IHNvIHF1aXRlIG9idmlvdXNseSwgYHNuZF9wY21fd3JpdGVpYCBkb2Vzbid0 IGJsb2NrIGZvciB0aGUgZW50aXJlIHBlcmlvZF9zaXplIHRpbWUuCgpBdCBzZWNvbmQgZ2xhbmNl LCBpdCBkb2VzIHNheSAidW50aWwgdGhlcmUgaXMgcm9vbSBpbiB0aGUgcmluZyBidWZmZXIgKHBs YXliYWNrKSIuIEluIG90aGVyIHdvcmRzLCB0aGlzICJyaW5nIGJ1ZmZlciIgcHJvYmFibHkgcmVm ZXJzIHRvIHRoZSBgZG1hX2FyZWFgIG9mIHRoZSBwbGF5YmFjayBzdHJlYW0uIEluIGVmZmVjdCwg d2hhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGhlcmUgaXMgYmxvY2tpbmcgdW50aWwgZGF0YSBmcm9t IHVzZXJzcGFjZSBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgQUxTQSBkcml2ZXIncyBgZG1hX2FyZWFg LiBBbmQgdGhpcyBgZG1hX2FyZWFgIGlzIHVsdGltYXRlbHkga2VybmVsIHNwYWNlIG9mIHRoZSBz YW1lIFBDLCBhbmQgc28gYSBjb3B5IGZyb20gdXNlcnNwYWNlIHRvIGtlcm5lbHNwYWNlLCBpcyBp bmRlZWQgbGlrZWx5IHRvIGNvbXBsZXRlIHJlbGF0aXZlbHkgZmFzdCAtIHNpbmNlIGZvciB0aGlz IGRpcmVjdGlvbiAocGxheWJhY2spLCBpdCBkb2Vzbid0IG5lZWQgdG8gcmVmZXIgdG8gdGhlIGNh cmQgKGV4dGVybmFsIGhhcmR3YXJlKSBhdCBhbGwhIEluIG90aGVyIHdvcmRzOgoKKiBVc2Vyc3Bh Y2Ugc3RhcnRzIHdpdGggYHNuZF9wY21fd3JpdGVpYAoqIGBzbmRfcGNtX3dyaXRlaWAgc3RhcnRz IGJsb2NraW5nCioqIEtlcm5lbCByZWNlaXZlcyB0aGUgYHNuZF9wY21fd3JpdGVpYCAvIHBsYXli YWNrIGlvY3RsLCBjaGVja3MgYW5kIHNlZXMgdGhhdCAoc2F5KSB0aGUgcGxheWJhY2sgYGRtYV9h cmVhYCBpcyBlbXB0eSwKKiogdGh1cyBrZXJuZWwgYWNjZXB0cyB0aGUgYnl0ZXMgZnJvbSB1c2Vy c3BhY2UsIHdyaXRpbmcgdGhlbSBpbnRvIGBkbWFfYXJlYWAKKiogR2l2ZW4gdGhhdCBgZG1hX2Fy ZWFgIGlzIHBhcnQgb2YgdGhlIHNhbWUga2VybmVsLCB0aGlzIGNvcHkgY29tcGxldGVzIHJlbGF0 aXZlbHkgZmFzdAoqIGBzbmRfcGNtX3dyaXRlaWAgc3RvcHMgYmxvY2tpbmcsIGFuZCByZXR1cm5z IHRoZSBjb3BpZWQgYW1vdW50IG9mIGZyYW1lcwoKSW4gY29udHJhc3QsIGluIHRoZSBjYXB0dXJl IGRpcmVjdGlvbiwgYHNuZF9wY21fcmVhZGlgIGJsb2NrcyB1bnRpbCBOIChzYXkgMzIpIGZyYW1l cyBhcmUgYXZhaWxhYmxlIC0gYnV0IHdoZXRoZXIgdGhvc2UgZnJhbWVzIGFyZSBhdmFpbGFibGUs IGRlcGVuZHMgdWx0aW1hdGVseSBvbiB0aGUgY2FyZCBoYXJkd2FyZTsgYW5kIHNpbmNlIHdlIGhh dmUgYSBzYW1wbGluZyByYXRlIHNwZWNpZmljYXRpb24sIHRob3NlIGZyYW1lcyBjYW5ub3QgYmUg ZGVsaXZlcmVkIGJ5IHRoZSBjYXJkIGFueSBmYXN0ZXIgdGhhbiBwZXJpb2RfdGltZT1wZXJpb2Rf c2l6ZS9yYXRlOyB0aHVzIGJsb2NraW5nIGZvciBhdCBsZWFzdCBwZXJpb2RfdGltZSBpbiB0aGUg Y2FwdHVyZSBkaXJlY3Rpb24gaXMgaW1wbGllZCBieSBkZWZhdWx0LgoKClNvLCBhc3N1bWluZyB0 aGUgYWJvdmUgaXMgY29ycmVjdCwgSSBmaXJzdCB0cmllZCBhIGJpdCB3aXRoIGBzbmRfcGNtX3dh aXRgLCBmb3Igd2hpY2ggdGhlIGRvY3Mgc2F5OgoKICAgIGh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0 Lm9yZy9hbHNhLWRvYy9hbHNhLWxpYi9ncm91cF9fX3BfY19tLmh0bWwKICAgIFdhaXQgZm9yIGEg UENNIHRvIGJlY29tZSByZWFkeS4KCkJ1dCwgYXBwYXJlbnRseSwgdGhlICJQQ00gdG8gYmVjb21l IHJlYWR5IiBmb3IgdGhlIHBsYXliYWNrIGRpcmVjdGlvbiwgYWdhaW4gaXMgaW4gcmVmZXJlbmNl IHRvIHdoZXRoZXIgdGhlcmUgaXMgc3BhY2UgaW4gYGRtYV9hcmVhYC4gU28gaWYgeW91IHN0YXJ0 IHdpdGggYnVmZmVyX3NpemUgNjQgZnJhbWVzOyBhbmQgeW91IGRvIGEgZmlyc3QgYHNuZF9wY21f d3JpdGVpYCBzdWNjZXNzZnVsbHkgd2l0aCAzMiBmcmFtZXM7IHlvdSdyZSBzdGlsbCBsZWZ0IHdp dGggc3BhY2Ugb2YgMzIgZnJhbWVzIHRvIHdyaXRlIGludG8gaW4gdGhlIHBsYXliYWNrIGJ1ZmZl ci4gU28gaWYgeW91IHJ1biBgc25kX3BjbV93YWl0YCBoZXJlLCBpdCByZXR1cm5zIGZhc3QgLSBi ZWNhdXNlIHRoZXJlIGlzIHNwYWNlIGluIHRoZSBidWZmZXI7IGl0IGRvZXNuJ3Qgd2FpdCBmb3Ig dGhlIGJ1ZmZlciB0byBmaW5pc2ggcGxheWluZyEgU28gdGhpcyBzdGlsbCBkaWRuJ3QgaGVscCBt ZSBnZXQgYSBiZXR0ZXIgZGVidWcgYWNxdWlzaXRpb24gLSB0aGlzIGlzIChzb21ld2hhdCkgZG9j dW1lbnRlZCBpbiB0aGUgYGRvUGxheWJhY2tfdjAxKClgIGZ1bmN0aW9uIGluIGBwbGF5bWluaS5j YCwgd2hpY2ggaXMgdGhlIHNvdXJjZSBmb3IgdGhpcyAuZ2lmOgoKICAgIGh0dHA6Ly9zZGFhdWJj a3Auc291cmNlZm9yZ2UubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9jYXB0dGVzdF8wNF9zaHAuZ2lm CgpTbywgdGhlIHR5cGljYWwgcmVzcG9uc2UgSSdkIGdldCBmcm9tIHRoZSBgcGxheW1pbmkuY2Ag cHJvZ3JhbSwgZm9yIHR3byBjb25zZWN1dGl2ZSBgc25kX3BjbV93cml0ZWlgLCB3b3VsZCBiZSB0 aGF0IHRoZSBmaXJzdCAzMiBmcmFtZXMgb2YgYHdyaXRlaWAgd2VyZSBPSywgdGhlIHNlY29uZCB3 ZXJlICJCcm9rZW4gcGlwZSIgKC0zMik7IHRoaXMgYmVpbmcgZm9yIHRoZSBgaGRhX2ludGVsYCBk cml2ZXIgKG5vdGUgdGhhdCBvbiB0aGUgZ2lmcy9wZGZzLCB0aGUgYGR1bW15YCBkaWFncmFtIGlz IG9uIHRvcCwgYGhkYV9pbnRlbGAgb24gYm90dG9tIC0gYnV0IG9uIHRoZSB0ZXh0IG92ZXJsYXks IGl0cyB0aGUgb3Bwb3NpdGU6IHRoZSBmaXJzdCB0d28gbGluZXMgYXJlIGZvciBgaGRhX2ludGVs YCwgYW5kIHRoZSBzZWNvbmQgbGluZXMgZm9yIGBkdW1teWApLiBBbmQgZHVyaW5nIHRoZXNlIHRl c3RzLCB0aGUgYGR1bW15X3BhdGVzdGAgZHJpdmVyIHdvdWxkIHJldHVybiAzMi9PSyBmb3IgYm90 aCBgX3dyaXRlaWAgY2FsbHMgLSBidXQgZXZlbiB0aGlzIGNhdXNlZCBjYXB0dXJlcyBzbyBzaG9y dCwgdGhhdCBJIGNhbm5vdCBzZWUgdGhlIHRpbWVyIGZ1bmN0aW9uIHJ1biBldmVuIG9uY2UgKHdo aWNoIG1hZGUgdGhpbmdzIHJlYWxseSBjb25mdXNpbmcgZm9yIG1lLCBpbiB0aGUgc2Vuc2UgdGhh dDogaWYgYm90aCBgd3JpdGVpYHMgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LCBiZWZvcmUgdGhlIHRp bWVyIGZ1bmN0aW9uIGV2ZW4gaGFkIGEgY2hhbmNlIHRvIGluY3JlYXNlIC5wb2ludGVyIC0gd2hh dCBtYWRlIHRoZW0gY29tcGxldGUgd2l0aCBzdWNjZXNzIHRoZW4/KS4gTm90ZSB0aGF0IG1vcmUg Y29tcGxleCB1c2Vyc3BhY2UgQUxTQSBjb2RlIChsaWtlIHRoZSBvbmUgaW4gUG9ydEF1ZGlvKSB1 c3VhbGx5IHBlcmZvcm1zIGEgd3JpdGUsIGZvbGxvd2VkIGJ5IGEgcG9sbCBvZiB0aGUgZmlsZSBk ZXNjcmlwdG9yIC0gbmV2ZXIgdHdvIHcKcml0ZXMgb25lIGltbWVkaWF0ZWx5IGFmdGVyIGFub3Ro ZXIsIGxpa2UgYXR0ZW1wdGVkIGhlcmUuCgpJdCdzIGFsc28gbm90YWJsZSB0aGF0IHRoZSBwbGF5 YmFjayBzdHJlYW0gZ2V0cyBzdGFydGVkICJmb3IgcmVhbCIgb25seSB1cG9uIHRoZSBmaXJzdCBg d3JpdGVpYCBjb21tYW5kIC0gb25seSB0aGVuIGRvZXMgdGhlIF9rZXJuZWxfIGBzbmRfcGNtX3N0 YXJ0KClgIGZ1bmN0aW9uIGdldCBjYWxsZWQuIElmIHdlIHRyeSB0byBjYWxsIGBzbmRfcGNtX3N0 YXJ0KHBsYXliY2tfcGNtX2hhbmRsZSlgIGZyb20gdXNlcnNwYWNlIGJlZm9yZSB0aGUgZmlyc3Qg YHdyaXRlaWAsIHRoYXQgb25lIHdpbGwgc2ltcGx5IGNhbGwgc29tZXRoaW5nIGxpa2UgYHNuZF9w Y21fcHJlX3N0YXJ0YCBpbiB0aGUga2VybmVsLCAoc2VlIHRoZSAuY3N2IHNvdXJjZSBmb3IgZS5n LjoKCiAgICBodHRwOi8vc2RhYXViY2twLnNmLm5ldC9wb3N0L2Fsc2EtY2FwdHRlc3QvX2NhcHBp Y3MwNC9jYXB0dXJlcy0yMDEzLTA4LTEwLTA5LTU2LTM0LXNocC1hZHN3cy10cmFjZS1ib3RoLnBk ZgoKKSAtIGFuZCB0aGVuIHdhaXQgdW50aWwgdGhlIGZpcnN0IGB3cml0ZWlgLCB0byBjYWxsIHRo ZSBrZXJuZWwgYHNuZF9wY21fc3RhcnQoKWAuCgoKQnkgdHJpYWwgYW5kIGVycm9yLCBJIGV2ZW50 dWFsbHkgcmVhbGl6ZWQgdGhhdCBhIHNwZWNpZmljIGRlbGF5IChmaXJzdCBpbnRyb2R1Y2VkIGJ5 IG11bHRpcGxlIGBmcHJpbnRmJ3NgKSBiZXR3ZWVuIHRoZSB0d28gYHNuZF9wY21fd3JpdGVpYHMs IG1ha2VzIHRoZSBgcGxheW1pbmkuY2AgbXVjaCBtb3JlIGxpa2VseSB0byBjb21wbGV0ZSBib3Ro IHdyaXRlcyB3aXRoIHN1Y2Nlc3MuIFNvIEkgdGhvdWdodCBJJ2QgbG9vayBpbnRvIHRoYXQgLSBh bmQgd2hpbGUgYXQgZmlyc3QgSSB0aG91Z2h0IEknZCBoYXZlIHRvIHNvbWVob3cgInRyaWdnZXIi IC5wb2ludGVyIHVwZGF0ZXMgZnJvbSB1c2Vyc3BhY2UgKHNheSBieSBjYWxsaW5nIGBzbmRfcGNt X2F2YWlsX2RlbGF5YCksIGl0IHR1cm5zIG91dCB0aGF0IGp1c3QgYSBkZWxheSAtIGhlcmUgZG9u ZSB2aWEgYG5hbm9zbGVlcGAgLSBpcyBlbm91Z2guIFNvIEkgdXNlZCB0aGUgZnVuY3Rpb24gYGRv UGxheWJhY2tfdjAyKClgIGluIGBwbGF5bWluaS5jYCwgYW5kIGFkZGl0aW9uYWxseSB1c2VkIHRo ZSBzY3JpcHQgYHBsYXlkZWxheS5zaGAgdG8gcmUtcnVuIDEwMCB0ZXN0cyBvZiBwbGF5bWluaS5j IGFuZCBsb2cgaG93IG1hbnkgb2YgdGhlbSBmYWlsIC0gZm9yIGVhY2ggZGVsYXkgc3RlcCBvZiAx MCDOvHMgdXAgdG8gMSBtczsgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGltYWdlIGxvb2tzIGxpa2Ug dGhpczoKCiAgICBodHRwOi8vc2RhYXViY2twLnNmLm5ldC9wb3N0L2Fsc2EtY2FwdHRlc3QvcGxh eWRlbGF5LWhkYS1pbnRlbF92MDIucG5nCgpUaGlzIGltYWdlIGFsc28gc2hvd3MgdGhlIG1lYW4g YW5kIG1lZGlhbiBvZiBwbGF5YmFja3MnIGBhdmFpbGAgZnJhbWVzOyB0aGUgbWVkaWFuIHBiX2F2 YWlsIGZyYW1lcyB2YWx1ZXMgYXJlOiAzNywgMzMsIDQxLCA0OSwgNTcsIFswXSAtIGl0J3Mgdmlz aWJsZSB0aGF0IHRoZSBtZWFuIGF0dGVtcHRzIHRvIHRyYWNrIHRoaXMgc2VxdWVuY2UgdG9vLiBB ICJzd2VldCBzcG90IiBmb3IgdGhlIGBuYW5vc2xlZXBgIGJldHdlZW4gdGhlIHR3byBgc25kX3Bj bV93cml0ZWlgIGNvbW1hbmRzLCB3aGVyZSB0aGUgbnVtYmVyIG9mIGVycm9ycyBpcyBtaW5pbWFs IChoZXJlIDEgZXJyb3IgaW4gMTAwIHJ1bnMpLCBpcyB2aXNpYmxlIC0gYW5kIGl0ICJtb3ZlcyIg c2xpZ2h0bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYHNuZF9wY21fYXZhaWxfZGVsYXlgIHdhcyB1 c2VkICgyODAgzrxzIC0gYXMgYWJvdmUpIG9yIG5vdCAoMzEwIM68cyAtIG5vdGFibHkgY2xvc2Ug dG8gMzYzIM68cywgd2hpY2ggaXMgaGFsZiB0aGUgcGVyaW9kIHRpbWUgZm9yIHRoaXMgY2FzZSwg NzI2IM68cyk6CgogICAgaHR0cDovL3NkYWF1YmNrcC5zZi5uZXQvcG9zdC9hbHNhLWNhcHR0ZXN0 L3BsYXlkZWxheS1oZGEtaW50ZWxfdjAzLnBuZwoKLi4uIHdoaWNoLCBpbiB0dXJuLCBpbXBsaWVz IHRoYXQgYHNuZF9wY21fYXZhaWxfZGVsYXlgIGNvc3RzIGFib3V0IDMwIM68cyBvbiB0aGlzIHBs YXRmb3JtLiBJIGFsc28gbm90aWNlZCBoZXJlLCB0aGF0IGV2ZXJ5IHRpbWUgc29tZXRoaW5nIGxp a2UgYHNuZF9wY21fYXZhaWxfZGVsYXlgIG9yIGBzbmRfcGNtX3N0YXR1c2AgaXMgdXNlZCBlaXRo ZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAic3dlZXQgc3BvdCIgem9uZSwgaXQgd2lsbCB0cmlnZ2Vy IGFuIFhSVU4sIHdoaWNoIGFmdGVyd2FyZHMgcHJvcGFnYXRlcyB0byBhbGwgc3Vic2VxdWVudCBB TFNBIGNhbGxzOyB0aGUgb25seSBjb21tYW5kIHRoYXQgZG9lc24ndCBkbyB0aGlzIGlzIGBzbmRf cGNtX2F2YWlsX3VwZGF0ZWAsIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgZG9jcyBhcyAibGln aHQiOiAiVGhlIHBvc2l0aW9uIGlzIG5vdCBzeW5jZWQgd2l0aCBoYXJkd2FyZSAoZHJpdmVyKSBw b3NpdGlvbiBpbiB0aGUgc291bmQgcmluZyBidWZmZXIgaW4gdGhpcyBmdW5jdGlvbi4gVGhpcyBm dW5jdGlvbiBpcyBhIGxpZ2h0IHZlcnNpb24gb2Ygc25kX3BjbV9hdmFpbCgpLiIgSW4gcmVsYXRp b24gdG8gdGhpcywgSSBhbHNvIGZvdW5kIHRoaXMgKG1hc3NpdmUpIGFsc2EtZGV2ZWwgdGhyZWFk IGZyb20gMjAwODoKCiAgICAiUmU6IFdoYXQgZG9lcyBzbmRfcGNtX2RlbGF5KCkgYWN0dWFsbHkg cmV0dXJuPyIKICAgIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmxpbnV4LmFsc2EuZGV2 ZWwvNTM4NDEvZm9jdXM9NTQwNTAKCiAgICA+IFRoZSBwZXJpb2QtYmFzZWQgcmVmcmVzaCBtYWtl cyBpdCBoYXJkIHRvIHVzZSB0aGUgZmlmbyBlZmZlY3RpdmVseS4gIElmCiAgICA+IHRoZSBjYXJk IGZpZm8gaXMgYWxsb3dlZCB0byAnc3VjaycgYWxsIHRoZSBkYXRhIGZyb20gdGhlIHJpbmdidWZm ZXIgdGhlbgogICAgPiBpdCBtYWtlcyBpdCBsb29rIGxpa2UgYW4gdW5kZXJydW4uIEFsc28gaXQg bWFrZXMgdGltZSBhcHBlYXIgdG8gcnVuIGZhc3QKICAgID4gdW50aWwgdGhlIGZpZm8gaXMgZmls bGVkIHVwLgogICAgPgogICAgPiBUaGUgJ2Zhc3QgdGltZScgY3JlYXRlcyBwcm9ibGVtcyBmb3Ig QUxTQSBvbiBwbGF5YmFjayBzdGFydCwgYmVjYXVzZQogICAgPiBhbHNhIGFzc3VtZXMgdGhhdCBp dCB3aWxsIHRha2UgYSB3aG9sZSBwZXJpb2QgZm9yIGEgcGVyaW9kIG9mIGRhdGEgdG8gYmUKICAg ID4gY29uc3VtZWQsIHdoaWxlIHRoZSBkcml2ZXIgaXMgY2FwYWJsZSBvZiBjb25zdW1pbmcgbXVs dGlwbGUgcGVyaW9kcwogICAgPiBhbG1vc3QgaW5zdGFudGx5LiAgSW4gbXkgZHJpdmVyIEkgaGF2 ZSB0byB0aHJvdHRsZSB0aGUgcmF0ZSB0aGF0IGRhdGEgaXMKICAgID4gdHJhbnNmZXJyZWQgdG8g dGhlIGNhcmQgZmlmb3MuCgogICAgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUubGludXgu YWxzYS5kZXZlbC81Mzg0MS9mb2N1cz01Mzk4NAoKICAgID4gWWVzLCB0aGlzIGlzIGV4YWN0bHkg d2hhdCBJIGFtIGV4cGVyaWVuY2luZy4gQXQgc3RyZWFtIHN0YXJ0IG15CiAgICA+IGVzdGltYXRp b25zIChiYXNlZCBvbiB1cGRhdGVfYXZhaWwpIGFyZSB3YXkgb2ZmLiBBZnRlcndhcmRzIGV2ZXJ5 dGhpbmcKICAgID4gaXMgZmluZS4gQXMgYSBkaXJ0eSB3b3JrYXJvdW5kIHRvIGZpeCB0aGlzIEkg aGFsdmUgdGhlIGluaXRpYWwgc2xlZXAKICAgID4gdGltZSBhbHdheXMgc28gdGhhdCBJIGNhbiBt YWtlIHN1cmUgSSBkb24ndCBzbGVlcCBmb3IgdG9vIGxvbmcgYW5kIGdldAogICAgPiBhbiB4cnVu LiBCdXQgdGhhdCdzIHJlYWxseSB1Z2x5LCBiZWNhdXNlIGhhbHZpbmcgaXQgaXMganVzdCBhIHdp bGQKICAgID4gZ3Vlc3MgYW5kIGl0IGlzbid0IGV2ZW4gbmVjZXNzYXJ5IG9uIFBDSSBoYXJkd2Fy ZS4KCkl0IHNlZW1zIHRoZXNlIHF1b3RlcyByZWZlciB0byBzb21ldGhpbmcgc2ltaWxhciB0aGF0 IEknbSBzZWVpbmcgd2l0aCB0d28gYHdyaXRlaWAncyBpbiBhIHJvdyAobmVlZCBmb3IgYSBzcGVj aWZpYyBzbGVlcCwgcG9zc2libHkgaGFsZiBhIHBlcmlvZCwgdG8gZ2V0IHRvIHRoZSAic3dlZXQg c3BvdCIpOyBidXQgSSBjYW5ub3QgdGVsbCBmb3Igc3VyZSByaWdodCBub3cuCgoKQW55d2F5cywg a25vd2luZyB0aGlzIGRlbGF5LCBJIGZpbmFsbHkgY2FtZSB0byB0aGlzIHBpZWNlIG9mIChoZXJl LCBwc2V1ZG8pIGNvZGU6CgogIC4uLiAvLyBlbmFibGUgZnRyYWNlIGxvZ2dpbmcKICByZXQxID0g c25kX3BjbV93cml0ZWkocGxheWJhY2tfcGNtX2hhbmRsZSwgYXVkaW9idWYsIHBlcmlvZF9jaHVu a3NpemVfZnJhbWVzPTMyKTsKICBuYW5vc2xlZXAoMzEwIM68cyAsIC4uLik7CiAgcmV0MiA9IHNu ZF9wY21fd3JpdGVpKHBsYXliYWNrX3BjbV9oYW5kbGUsIGF1ZGlvYnVmLCBwZXJpb2RfY2h1bmtz aXplX2ZyYW1lcz0zMik7CiAgc25kX3BjbV9kcmFpbihwbGF5YmNrX3BjbV9oYW5kbGUpOwogIC4u LiAvLyBkaXNhYmxlIGZ0cmFjZSBsb2dnaW5nCgouLi4gd2hpY2ggcmVwcmVzZW50cyB0aGUgZXNz ZW5jZSBvZiB0aGUgYGRvUGxheWJhY2tfdjAzKClgIGZ1bmN0aW9uIGluIGBwbGF5bWluaS5jYCwg dXNlZCB0byBvYnRhaW4gbW9zdCBvZiB0aGUgb3RoZXIgcGxheWJhY2sgcmVsYXRlZCBhY3F1aXNp dGlvbnMvcGxvdHMuIFRvIGJlZ2luIHdpdGgsIGhlcmUgaXMgYW4gYW5pbWF0aW9uIG9mIGFsbCB0 aG9zZSBgcGxheW1pbmlgIHRlc3QgcnVucywgd2hpY2ggY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBm b3IgYm90aCBgZHVtbXktcGF0ZXN0YCBhbmQgYGhkYS1pbnRlbGAgZHJpdmVyczoKCiAgICBodHRw Oi8vc2RhYXViY2twLnNmLm5ldC9wb3N0L2Fsc2EtY2FwdHRlc3QvY2FwdHRlc3RfMDQuZ2lmCgpC YXNpY2FsbHksIGluIHRoZSBhYm92ZSBjb2RlLCB3ZSBrbm93IHRoYXQgdGhlIGZpcnN0IGB3cml0 ZWlgIGNhbGwgd2lsbCBzdWNjZWVkIGZvciBzdXJlIC0gYmVjYXVzZSBpdCdzIHRoZSBmaXJzdCBj YWxsLCBhbmQgYXQgdGhhdCB0aW1lLCB0aGUgcGxheWJhY2sgYGRtYV9hcmVhYCBpcyBlbXB0eSAt IGFuZCB3aWxsIHJldHVybiBxdWlja2x5LiBXaXRoIHRoZSBgbmFub3NsZWVwYCB3ZSBlbnN1cmUg dGhhdCB0aGUgc2Vjb25kIGB3cml0ZWlgIGNhbGwgd2lsbCBiZSBpbiB0aGUgInN3ZWV0IHNwb3Qi IC0gYW5kIGhvcGVmdWxseSwgYWxzbyBzdWNjZWVkLCBhbmQgdGh1cyByZXR1cm4gcXVpY2tseS4g U2luY2Ugd2UgaGF2ZSBubyBpbnRlbnRpb24gb2Ygd3JpdGluZyBhbnkgZnVydGhlciBkYXRhLCB3 ZSBsZXQgQUxTQSBrbm93IHRoYXQgYnkgY2FsbGluZyBgc25kX3BjbV9kcmFpbmAsIGZvciB3aGlj aCB0aGUgZG9jcyBub3RlOiAiRm9yIHBsYXliYWNrIHdhaXQgZm9yIGFsbCBwZW5kaW5nIGZyYW1l cyB0byBiZSBwbGF5ZWQgYW5kIHRoZW4gc3RvcCB0aGUgUENNLiIuIEl0IHdhcyBhbHNvIGNhbGxl ZCBpbiB0aGUgY29kZSBiZWZvcmUgLSBidXQgaGVyZSBpdCBpcyBzcGVjaWZpY2FsbHkgYWRkZWQs IHNvIGl0IGJsb2NrcyB1bnRpbCBjYXJkIGhhcyBmaW5pc2hlZCBwbGF5YmFjayBiZWZvcmUgc3Rv cHBpbmcgZnRyYWNlIGxvZ2dpbmcgLSBzbyB3ZSBjYW4gb2J0YWluIGEgY29tcGxldGUgZGVidWcg bG9nIGFjcXVpc2l0aW9uIG9mIHRoZSBwbGF5YmFjayBwcm9jZXNzLiBBbmQsIGl0IGRvZXMgd29y ayBpbmRlZWQgLSBiZWNhdXNlLCBhdCBsZWFzdCwgd2Ugc3RhcnQgZ2V0dGluZyB0aW1lcnMvaW50 ZXJydXB0cyBmaXJpbmcgaW4gdGhlIGRlYnVnIGxvZ3MsIGFzIHNob3duIGluIHRoZSBgY2FwdHRl c3RfMDQuZ2lmYC4KCkkgZm91bmQgdGhlIGJlaGF2aW9yIG9mIHBsYXliYWNrIGZvciBgaGRhLWlu dGVsYCBzb21ld2hhdCBzdXJwcmlzaW5nIGF0IGZpcnN0LCBiZWNhdXNlIGl0IGlzIHF1aXRlIGRp ZmZlcmVudCBmcm9tIHRoZSBjYXB0dXJlIGNhc2U7IGNvbXBhcmUgdGhlIGNhc2VzIG9mOgoKICAg IGh0dHA6Ly9zZGFhdWJja3Auc2YubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9jYXB0dGVzdC5naWYg ICAgIChjYXB0dXJlICAtIGBoZGEtaW50ZWxgOiBib3R0b20gcGxvdCkKICAgIGh0dHA6Ly9zZGFh dWJja3Auc2YubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9jYXB0dGVzdF8wNC5naWYgIChwbGF5YmFj ayAtIGBoZGEtaW50ZWxgOiBib3R0b20gcGxvdCkKCkluIHRoZSBjYXB0dXJlIGNhc2UsIHRoZXJl IGFyZSB0aHJlZSBJUlFzIGZpcmVkOyBzdGFydGluZyBhbG1vc3QgaW1tZWRpYXRlbHkgYWZ0ZXIg YHJlYWRpYCwgdGhleSBiYXNpY2FsbHkgZGVsaW5lYXRlIHRoZSB0aW1lIHRha2VuIGJ5IHR3byBw ZXJpb2RzLiBJbiB0aGUgcGxheWJhY2sgY2FzZSwgd2UgaGF2ZSBmb3VyIElSUXMgZmlyZWQ6IGFn YWluIHRoZSBmaXJzdCBvbmUgZmlyZXMgc29vbiBhZnRlciB0aGUgZmlyc3QgYHdyaXRlaWAgLSBi dXQgdGhlIHNlY29uZCBmaXJlcyBhZnRlciBvbmx5IF9oYWxmXyBhIHBlcmlvZCwgbm90IGFmdGVy IGEgcGVyaW9kIGxpa2UgaW4gdGhlIGZpcnN0IGNhc2UhIEZyb20gdGhpcyBwb2ludCBvbiwgaG93 ZXZlciwgdGhlIDNyZCBhbmQgNHRoIElSUSBfZG9fIGZpcmUgYWZ0ZXIgYSBwZXJpb2QhCgoKU28s IG9uZSBvZiB0aGVzZSBwbGF5YmFjayB0ZXN0IHJ1biBhY3F1aXNpdGlvbnMvbG9ncyAoY2FwdHVy ZXMtMjAxMy0wOC0xMS0wNS0xNS0yMSkgd2FzIHRha2VuIHRvIGJlIHRoZSBzb3VyY2Ugb2YgeWV0 IGFub3RoZXIgYW5ub3RhdGVkIG1vbnRhZ2U7IGZpcnN0LCBmb3IgdGhlIGBoZGEtaW50ZWxgIGRy aXZlciBpdCBpczoKCiAgICBodHRwOi8vc2RhYXViY2twLnNmLm5ldC9wb3N0L2Fsc2EtY2FwdHRl c3QvbW9udGFnZS1oZGEtaW50ZWwtcC5wbmcgIChhbHNvIC5wZGYpCgpXaGlsZSBJIGhhdmUgbGVh cm5lZCB0aGF0IG1vZGVybiBjYXJkcyBkbyBub3QgaGF2ZSBvbi1ib2FyZCBidWZmZXJzLCBJIGhh dmUgc3RpbGwgZHJhd24gYW4gImludGVybiBwbGF5YmFjayIgIGJ1ZmZlciBmb3IgdGhlICJDYXJk IFRpbWUiIGF4aXMsIGJlY2F1c2UgSSB0aGluayBpdCBjb3VsZCBiZSBhIHVzZWZ1bCB0b29sIGlu IHVuZGVyc3RhbmRpbmcgd2hhdCBzaG91bGQgaGFwcGVuLiBIZXJlJ3MgbXkgc3BlY3VsYXRpdmUg YnJlYWtkb3duLCBvbiB3aGF0IChJIHRoaW5rKSBoYXBwZW5zIGhlcmU6CgoqIFRoZSBmaXJzdCBg c25kX3BjbV93cml0ZWlgIGZpcmVzOyByaWdodCBiZWZvcmUgaXQsIHRoZSBwbGF5YmFjayBgZG1h X2FyZWFgIGlzICJlbXB0eSIKKiBBTFNBIHRoZW4gc3RhcnRzIHRoZSBwcm9jZXNzIHZpYSBrZXJu ZWwgYHNuZF9wY21fc3RhcnRgIHNvb24gYWZ0ZXIKKiBBcHByb3ggNTAgzrxzIGFmdGVyIHRoYXQg KG9yIGFib3V0IDEwMCDOvHMgYWZ0ZXIgYHdyaXRlaWAgZmlyc3QgZmlyZWQpLCBjYXJkIHJlc3Bv bmRzIHdpdGggYW4gSVJRCioqIFN0cmFuZ2VseSBlbm91Z2gsIHRoaXMgZmlyc3QgSVJRIGRvZXMg Km5vdCogdHJpZ2dlciBhIC5wb2ludGVyICEKKiBBdCBhYm91dCB0aGUgc2FtZSB0aW1lLCBgc25k X3BjbV93cml0ZWlgIHByb2JhYmx5IHJldHVybmVkIHdpdGggMzIgZnJhbWVzIHdyaXR0ZW47Cioq IHNvIGFscmVhZHkgYXQgYWJvdXQgdGhpcyB0aW1lLCB3ZSBjYW4gY291bnQgb24gYXBwbF9wdHIg YmVpbmcgc2V0IHRvIDMyIChvciBgZG1hX2FyZWFgIGlzICJoYWxmIGZ1bGwiOyBoZW5jZSBhbm90 aGVyIGRyYXdpbmcgb2YgdGhlICJidWZmZXIiKQoqKiBBbHNvIGFib3V0IHRoaXMgdGltZSwgdGhl IGBuYW5vc2xlZXBgIChub3QgZHJhd24pIGluIHVzZXJzcGFjZSBzaG91bGQgc3RhcnQKKiBTb21l IDMzMiDOvHMgKGFwcHJveCBoYWxmIGEgcGVyaW9kIHRpbWUsIHdoaWNoIGlzIDcyNi8yID0gMzYz IM68cykgYWZ0ZXIgdGhlIGZpcnN0IGNhcmQgSVJRLCB0aGUgc2Vjb25kIGNhcmQgSVJRIGZpcmVz CioqIHRoaXMgb25lIGFwcGFyZW50bHkgaW5mb3JtcyBBTFNBIHRoYXQgcGxheWJhY2sgaGFzIHN0 YXJ0ZWQgKHNvIC5wb2ludGVyIHdvdWxkIGJlIGF0IDAgaGVyZSkgLSBiZWNhdXNlIGFsc28gaGVy ZSwgLnBvaW50ZXIgaXMgX25vdF8gZmlyZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIElSUSBoYW5k bGVyCiogVGltZSBnb2VzIGJ5LCBgbmFub3NsZWVwYCBoYXMgZXhwaXJlZCwgYW5kIHRoZSBzZWNv bmQgYHNuZF9wY21fd3JpdGVpYCBpcyBmaXJlZCBpbiB1c2Vyc3BhY2UKKiBTb29uIGFmdGVyIHRo YXQsIC5wb2ludGVyIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUsIGluIHRoZSBjb250ZXh0 IG9mIHRoZSBwbGF5YmFjayBpb2N0bCBoYW5kbGVyCioqIFRoZSB2YWx1ZXMgc2VlbiBieSB0aGUg Zmlyc3QgcG9pbnRlciBhcmUgKGluIGZyYW1lcyk6IGh3X3B0ciA9IDAsIC5wb2ludGVyID0gMTcs IGFwcGxfcHRyID0gMzI7IGVuZ2luZSBzZWVzIGh3X3B0ciA8IC5wb2ludGVyIDwgYXBwbF9wdHIg PSAzMgoqKiBod19wdHIgd291bGQgYmVjb21lID0gLnBvaW50ZXIgKD0xNykgdmVyeSBzb29uIGFm dGVyCioqIHNvIGF0IHRoaXMgcG9pbnQsIGVuZ2luZSBzZWVzIDAgPCBod19wdHI9MTcgPCBhcHBs X3B0cj0zMiAtIHdoaWNoIGlzIHByb2JhYmx5IHNlZW4gYXMgYSBnb29kIHNpZ246IGh3X3B0ciBp cyB3aGVyZSBpdCdzIHN1cHBvc2VkIHRvIGJlIGFmdGVyIGFwcHJveCBoYWxmIGEgcGVyaW9kOyBp dCBzdGlsbCBoYXNuJ3QgZ29uZSBvdmVyIGFwcGxfcHRyIHlldCwgc28gcGxheWJhY2sgaXMgc3Rp bGwgYWN0aXZlCioqIGFuZCBzaW5jZSB0aGVyZSBpcyBzdGlsbCBzcGFjZSBpbiB0aGUgcGxheWJh Y2sgYGRtYV9hcmVhYCBidWZmZXIsIHRoZSBpb2N0bCBhbGxvd3MgYF93cml0ZWlgIHRvIGNvbXBs ZXRlIHN1Y2Nlc3NmdWxseSBpbiB1c2Vyc3BhY2UKKiBgd3JpdGVpYCBjb21wbGV0ZXMgaW4gdXNl cnNwYWNlLCByZXR1cm5pbmcgMzIgbW9yZSBmcmFtZXM7IG5vdyBhcHBsX3B0ciBzaG91bGQgYmUg YXQgNjQgKHRoZSBgZG1hX2FyZWFgIGJ1ZmZlciBpcyBjdXJyZW50bHkgZnVsbCAtIG1lYW5pbmcg aWYgdGhlcmUgd2FzIGEgbmV4dCB3cml0ZSwgaXQgd291bGQgd3JhcCkKKiBgc25kX3BjbV9kcmFp bmAgZmlyZXMgYWZ0ZXJ3YXJkIGluIHVzZXJzcGFjZSAtIHRyaWdnZXJyaW5nIGFnYWluIHRoZSBw bGF5YmFjayBpb2N0bAoqIGBzbmRfcGNtX2RyYWluYCBpcyBmaXJlZCBpbiBrZXJuZWwgc3BhY2Ug c29vbiBhZnRlciwgYXBwYXJlbnRseSB3YWl0aW5nIGZvciB0aGUgcGxheWJhY2sgdG8gY29tcGxl dGUKKiBTb21lIDczOCDOvHMgKGFwcHJveCB0aGUgcGVyaW9kIHRpbWUgb2YgNzI2IM68cykgYWZ0 ZXIgdGhlIHNlY29uZCBJUlEsIHRoZSB0aGlyZCBjYXJkIElSUSBmaXJlcwoqIFNvb24gYWZ0ZXIs IC5wb2ludGVyIGlzIGNhbGxlZCBmb3IgdGhlIHNlY29uZCB0aW1lLCBpbiBjb250ZXh0IG9mIHRo aXMgdGhpcmQgY2FyZCBJUlEKKiogVGhlIHZhbHVlcyBzZWVuIGJ5IHRoZSBzZWNvbmQgcG9pbnRl ciBhcmUgKGluIGZyYW1lcyk6IGh3X3B0ciA9IDE3LCAucG9pbnRlciA9IDMzLCBhcHBsX3B0ciA9 IDY0CioqIEVuZ2luZSBhZ2FpbiBzZWVzIGh3X3B0ciA8IC5wb2ludGVyIDwgYXBwbF9wdHIgLSBh bmQgdWx0aW1hdGVseSwgMCA8IGh3X3B0ciA9IDMzIDwgYXBwbF9wdHIgPSA2NCAtIGFnYWluIHBy b2JhYmx5IHNlZW4gYXMgYSBnb29kIHNpZ24KKiBUaW1lIGdvZXMgYnkgLSBTb21lIDc2MyDOvHMg KGFnYWluIGFwcHJveCB0aGUgcGVyaW9kIHRpbWUgb2YgNzI2IM68cykgYWZ0ZXIgdGhlIHRoaXJk IElSUSwgdGhlIGZvdXJ0aCBjYXJkIElSUSBmaXJlcwoqIFNvb24gYWZ0ZXIsIC5wb2ludGVyIGlz IGNhbGxlZCBmb3IgdGhlIHRoaXJkIHRpbWUsIGluIGNvbnRleHQgb2YgdGhpcyBmb3VydGggY2Fy ZCBJUlEKKiogVGhlIHZhbHVlcyBzZWVuIGJ5IHRoZSBzZWNvbmQgcG9pbnRlciBhcmUgKGluIGZy YW1lcyk6IGh3X3B0ciA9IDMzLCAucG9pbnRlciA9IDEsIGFwcGxfcHRyID0gNjQKKiogdGhpcyBt ZWFucyBod19wdHIgaGFzIHdyYXBwZWQgLSBzbyBhbGwgNjQgcmVxdWVzdGVkIChhcHBsX3B0cikg ZnJhbWVzIGhhdmUgZmluaXNoZWQgcGxheWluZwoqKiBlbmdpbmUgdGh1cyBkZXRlcm1pbmVzIGBz bmRfcGNtX2RyYWluX2RvbmUoKWAgaW4ga2VybmVsc3BhY2UKKiBTb29uIGFmdGVyLCBgc25kX3Bj bV9kcmFpbigpYCBleGl0cyBpbiB1c2Vyc3BhY2UgLSBhbmQgdGhlIGRlYnVnIGFjcXVpc2l0aW9u IGNvbXBsZXRlcwoqICgodGhlcmUgaXMgYSAiZ2hvc3QgYnVmZmVyIiBhdCB0aGUgZW5kIG9mIGNh cHR1cmUgaW4gIkNhcmQgVGltZSIsIHRvIGluZGljYXRlIHdoZXJlIC5wb2ludGVyIHdvdWxkIGhh dmUgdG8gYmUgLSBhdCBhcHByb3ggcXVhcnRlciBidWZmZXIgc2l6ZSAtIF9oYWRfIHRoZSBwbGF5 YmFjayBjb250aW51ZWQ7IHdoaWNoIGl0IGRvZXNuJ3QgaW4gdGhpcyBjYXNlKSkKCgpTbywgdGhp cyB0ZWxscyBtZSB0aGVyZSBpcyBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBhIGNvbmRpdGlvbiwg b2YgZWl0aGVyIChod19wdHIgPCBhcHBsX3B0cikgYWZ0ZXIgYSAucG9pbnRlciBjYWxsIC0gb3Ig KGh3X3B0ciA8IC5wb2ludGVyIDwgYXBwbF9wdHIpIHJpZ2h0IGJlZm9yZS9kdXJpbmcgYSAucG9p bnRlciBjYWxsIC0gKHdpdGggd3JhcHBpbmcgaGFuZGxlZCBpbiBib3RoIGNhc2VzKSwgd2hpY2gg bmVlZHMgdG8gYmUgc2F0aXNmaWVkLCBzbyB0aGF0IHRoZSBBTFNBIGVuZ2luZSBkZXRlcm1pbmVz IHRoYXQgYSBwbGF5YmFjayBzdHJlYW0gaXMgcHJvY2VlZGluZyBhcyBleHBlY3RlZC4gSSdtIG5v dCByZWFsbHkgc3VyZSwgd2hpY2ggb2YgdGhlc2Ugd291bGQgYmUgdGhlIHN0cm9uZ2VyIGNvbmRp dGlvbi4gV2UgY2FuIGFsc28gbG9vayBhdCBzb21lIGFjcXVpc2l0aW9ucyB3aGVyZSBgaGRhX2lu dGVsYCBmYWlscyAodnMuIGBkdW1teS1wYXRlc3RgLCB3aGljaCBkb2Vzbid0KToKCiAgICBodHRw Oi8vc2RhYXViY2twLnNmLm5ldC9wb3N0L2Fsc2EtY2FwdHRlc3QvY2FwdHRlc3RfMDRfYmhkYS5n aWYgKHBsYXliYWNrIC0gYGhkYS1pbnRlbGA6IGJvdHRvbSBwbG90KQoKSW4gbW9zdCBvZiB0aGVz ZSwgLnBvaW50ZXIgZmFpbHMgdG8gYmUgZmlyZWQgYWZ0ZXIgdGhlIHNlY29uZCBjYXJkIElSUSAo YWx0aG91Z2gsIG9uZSBvZiB0aGVzZSBkaWRuJ3QgZ2V0IHRvIGFjcXVpcmUgYW55IGNhcmQgSVJR cyBhdCBhbGwpLiBXaGVuIC5wb2ludGVyIGlzIGZpcmVkIGJldHdlZW4gc2Vjb25kIGFuZCB0aGly ZCBjYXJkIElSUSwgZS5nIGFzIGluOgoKICAgIGh0dHA6Ly9zZGFhdWJja3Auc2YubmV0L3Bvc3Qv YWxzYS1jYXB0dGVzdC9fY2FwcGljczA0L2NhcHR1cmVzLTIwMTMtMDgtMTEtMTEtNTYtMzgtYmhk YS10cmFjZS1ib3RoLnBkZgoKLi4uIGF0IHRoYXQgcG9pbnQgLnBvaW50ZXIgcmVhZHM6IGh3X3B0 ciA9IDAsIC5wb2ludGVyID0gMSwgYXBwbF9wdHIgPSAzMjsgLnBvaW50ZXIgaGVyZSBzaG91bGQg YmUgMTcuIFRoZSBzZWNvbmQgLnBvaW50ZXIgd2UgaGF2ZTogaHdfcHRyID0gMSwgLnBvaW50ZXIg PSAzMywgYXBwbF9wdHIgPSAzMiAodnMuIGh3X3B0ciA9IDE3LCAucG9pbnRlciA9IDMzLCBhcHBs X3B0ciA9IDY0KTsgdGhpcyBpcyBhcHBhcmVudGx5IGEgY2F1c2UgZm9yIGEgY2FsbCB0byBgYXp4 X3BjbV90cmlnZ2VyYCB0byBzdG9wIHN0cmVhbSAod2hpY2ggb3RoZXJ3aXNlIGhhcHBlbnMgZmly c3QgYXQgYHNuZF9wY21fZHJhaW5fZG9uZSgpYCk7IGFuZCBhZnRlciB0aGF0LCB0aGUgYHNuZF9w Y21fZHJhaW4oKWAgY2FsbCBleGl0cyBxdWlja2x5IChnaXZlbiBkZWJ1ZyBhY3F1aXNpdGlvbiBm aW5pc2hlcyBzb29uIGFmdGVyLCBhbmQgbm8gZnVydGhlciBldmVudHMgYXJlIHJlcG9ydGVkIG9u IHRoYXQgcGxvdCkuIE5vdywgdGhlIHNlY29uZCAucG9pbnRlciBjZXJ0YWlubHkgZG9lc24ndCBz YXRpc2Z5IChod19wdHIgPCAucG9pbnRlciA8IGFwcGxfcHRyKSwgbm9yIGFyZSB0aGUgdmFsdWVz IG9mIC5wb2ludGVyIHRoZXJlIHdoZXJlIHRoZXkgc2hvdWxkIGJlIGFjY29yZGluZyB0byB0aW1l IGV4cGlyZWQgc2luY2Ugc3RhcnQgb2YgcGxheWJhY2sgLSBidXQgSSBzdGlsbCBjYW5ub3QgdGVs bCBmb3Igc3VyZSwgaWYgdGhpcyBpcyB0aGUgZXhhY3QgY29uZGl0aW9uIHRoYXQgY2F1c2VzIHRo ZSBmYWlsdXJlIG9mIHRoZSBzZWNvbmQgdXNlcnNwYWNlIGB3cml0ZWlgIGNhbGwuCgoKQW55d2F5 cywgd2UgY2FuIG5vdyB0YWtlIGEgbG9vayBhdCB0aGUgYGR1bW15LXBhdGVzdGAgZHJpdmVyIGlu IHRoZSBwbGF5YmFjayBkaXJlY3Rpb24sIHdob3NlIG1vbnRhZ2Ugb2Ygc3VjY2Vzc2Z1bCBydW4g aXMgYXQ6CgogICAgaHR0cDovL3NkYWF1YmNrcC5zZi5uZXQvcG9zdC9hbHNhLWNhcHR0ZXN0L21v bnRhZ2UtZHVtbXktcC5wbmcgIChhbHNvIC5wZGYpCgpUaGlzIGltYWdlIGNvbnRhaW5zIHNvbWV0 aW1lcyBhICJnaG9zdCBjb3B5IiBvZiB0aGUgYnVmZmVyIGluIHRoZSBDUFUxIGxhbmUsIGJlY2F1 c2UgdGhlcmUgaXMgYSBiaXQgb2Ygc3BhY2UgdGhlcmUgSSBjb3VsZCB1c2U7IGl0IGlzIHNpbXBs eSBtZWFudCBhcyBhIHZpc3VhbCB0b29sLCB0byBzZWUgd2hhdCBBTFNBIHdvdWxkICJ0aGluayIg YWJvdXQgdGhlICJjYXJkIHBsYXliYWNrIGJ1ZmZlciIgcG9zaXRpb24gKHdoaWNoIGluIHRoaXMg Y2FzZSwgZm9yIGEgdmlydHVhbCBkcml2ZXIgd2l0aCBubyBoYXJkd2FyZSwgaXMgc2ltdWxhdGVk IGJ5IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgLnBvaW50ZXIsIGNhbGN1bGF0ZWQgYmFzZWQgb24g dGltZSBkZWx0YSBpbiB0aGUgdGltZXIgdGFza2xldCkuIEFueXdheXMsIGEgYnJpZWYgc3BlY3Vs YXRpdmUgYnJlYWtkb3duIHdvdWxkIGJlOgoKKiBUaGUgZmlyc3QgYHNuZF9wY21fd3JpdGVpYCBm aXJlczsgcmlnaHQgYmVmb3JlIGl0LCB0aGUgcGxheWJhY2sgYGRtYV9hcmVhYCBpcyAiZW1wdHki CiogQUxTQSB0aGVuIHN0YXJ0cyB0aGUgcHJvY2VzcyB2aWEgYHNuZF9wY21fc3RhcnRgIHNvb24g YWZ0ZXIKKiogV2l0aGluIHRoaXMsIHRoZSB0aW1lciBmdW5jdGlvbiBpcyBzY2hlZHVsZWQgdG8g ZmlyZSBhZnRlciBhIHBlcmlvZF9zaXplIHRpbWUgLSBidXQgdGhlcmUgaXMgbm8gZmlyaW5nIG9m ICJmaXJzdCIgdGltZXIgbGlrZSBpbiB0aGUgYGhkYV9pbnRlbGAgY2FzZQoqIFNvb24gYWZ0ZXIs IGBzbmRfcGNtX3dyaXRlaWAgcHJvYmFibHkgcmV0dXJuZWQgd2l0aCAzMiBmcmFtZXMgd3JpdHRl bjsKKiogc28gYWxyZWFkeSBhdCBhYm91dCB0aGlzIHRpbWUsIHdlIGNhbiBjb3VudCBvbiBhcHBs X3B0ciBiZWluZyBzZXQgdG8gMzIgKG9yIGBkbWFfYXJlYWAgaXMgImhhbGYgZnVsbCI7IGhlbmNl IGFub3RoZXIgZHJhd2luZyBvZiB0aGUgImJ1ZmZlciIpCioqIEFsc28gYWJvdXQgdGhpcyB0aW1l LCB0aGUgYG5hbm9zbGVlcGAgKG5vdCBkcmF3bikgaW4gdXNlcnNwYWNlIHNob3VsZCBzdGFydAoq IFNvbWUgdGltZSBnb2VzIGJ5IC0gYW5kIHRoZSBzZWNvbmQgYHNuZF9wY21fd3JpdGVpYCBtYW5h Z2VzIHRvIGZpcmUgaW4gdXNlcnNwYWNlIF9iZWZvcmVfIHRoZSB0aW1lciBmdW5jdGlvbiBldmVu IGZpcmVzCiogYnV0IHRoZW4sIHRoZSB0aW1lciBmdW5jdGlvbnMgaW50ZXJydXB0cyBvbiBDUFUw LCByaWdodCBiZWZvcmUuLi4KKiAuLi4gdGhlIHBsYXliYWNrX2lvY3RsIGhhbmRsZXIgaXMgcmFp c2VkIG9uIENQVTEhCioqIFRoZSBmaXJzdCAucG9pbnRlciBpcyBjYWxsZWQgaW4gY29udGV4dCBv ZiB0aGUgcGxheWJhY2tfaW9jdGw7CioqIFRoZSB2YWx1ZXMgc2VlbiBieSB0aGUgZmlyc3QgcG9p bnRlciBhcmUgKGluIGZyYW1lcyk6IGh3X3B0ciA9IDAsIC5wb2ludGVyID0gMCwgYXBwbF9wdHIg PSAzMjsgdGhpcyBpcyBhcHBhcmVudGx5IHNlZW4gYXMgZ29vZCBzaWduIGJ5IHRoZSBlbmdpbmUs IGFzIGBfd3JpdGVpYCBpcyBhbGxvd2VkIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4uCiogYHdy aXRlaWAgY29tcGxldGVzIGluIHVzZXJzcGFjZSwgcmV0dXJuaW5nIDMyIG1vcmUgZnJhbWVzOyBu b3cgYXBwbF9wdHIgc2hvdWxkIGJlIGF0IDY0ICh0aGUgYGRtYV9hcmVhYCBidWZmZXIgaXMgY3Vy cmVudGx5IGZ1bGwgLSBtZWFuaW5nIGlmIHRoZXJlIHdhcyBhIG5leHQgd3JpdGUsIGl0IHdvdWxk IHdyYXApCiogYHNuZF9wY21fZHJhaW5gIGZpcmVzIGFmdGVyd2FyZCBpbiB1c2Vyc3BhY2UgLSB0 cmlnZ2VyaW5nIGFnYWluIHRoZSBwbGF5YmFjayBpb2N0bAoqIGBzbmRfcGNtX2RyYWluYCBpcyBm aXJlZCBpbiBrZXJuZWwgc3BhY2Ugc29vbiBhZnRlciwgYXBwYXJlbnRseSB3YWl0aW5nIGZvciB0 aGUgcGxheWJhY2sgdG8gY29tcGxldGUKKiBTb29uIGFmdGVyLCAucG9pbnRlciBpcyBjYWxsZWQg Zm9yIHRoZSBzZWNvbmQgdGltZSwgaW4gY29udGV4dCBvZiB0aGUgX2RyYWluIHBsYXliYWNrX2lv Y3RsIGhhbmRsZXIKKiogVGhlIHZhbHVlcyBzZWVuIGJ5IHRoZSBzZWNvbmQgcG9pbnRlciBhcmUg KGluIGZyYW1lcyk6IGh3X3B0ciA9IDAsIC5wb2ludGVyID0gMzgsIGFwcGxfcHRyID0gNjQ7IHRo aXMgaXMgYXBwYXJlbnRseSBzdGlsbCBnb29kCiogU29vbiBhZnRlciwgdGhlIHNlY29uZCB0aW1l ciBmdW5jdGlvbiBpcyBjYWxsZWQKKiBTb29uIGFmdGVyLCAucG9pbnRlciBpcyBjYWxsZWQgZm9y IHRoZSB0aGlyZCB0aW1lLCBpbiB0aGUgY29udGV4dCBvZiB0aGUgc2Vjb25kIHRpbWVyIGZ1bmN0 aW9uCioqIFRoZSB2YWx1ZXMgc2VlbiBieSB0aGUgc2Vjb25kIHBvaW50ZXIgYXJlIChpbiBmcmFt ZXMpOiBod19wdHIgPSAzOCwgLnBvaW50ZXIgPSAxMCwgYXBwbF9wdHIgPSA2NDsgdGhpcyBpcyBh cHBhcmVudGx5IGdvb2QgLSBpbmRpY2F0aW5nIC5wb2ludGVyIGhhcyB3cmFwcGVkLi4uIGJ1dCB0 aGVuLCBpdCB3cmFwcGVkIGF0IDEwIGZyYW1lcyBvdmVyLCBtZWFuaW5nICJjYXJkIiBwbGF5ZWQg X21vcmVfIHNhbXBsZXMgdGhhbiByZXF1ZXN0ZWQ7IGJ1dCB0aGF0IHNlZW1zIG5vdCB0byBiZSBh IGNhdXNlIG9mIGNvbmNlcm4KKiogZW5naW5lIHRodXMgZGV0ZXJtaW5lcyBgc25kX3BjbV9kcmFp bl9kb25lKClgIGluIGtlcm5lbHNwYWNlCioqIGBkdW1teV9wY21fdHJpZ2dlcmAgaXMgY2FsbGVk IHNvb24gYWZ0ZXIgdG8gc3RvcCB0aGUgc3RyZWFtOwoqIFNvb24gYWZ0ZXIsIGBzbmRfcGNtX2Ry YWluKClgIGV4aXRzIGluIHVzZXJzcGFjZSAtIGFuZCB0aGUgZGVidWcgYWNxdWlzaXRpb24gY29t cGxldGVzCgpXZSBjYW4gYWxzbyBsb29rIGF0IHNvbWUgYWNxdWlzaXRpb25zIHdoZXJlIGBkdW1t eS1wYXRlc3RgIGZhaWxzICh2cy4gYGhkYV9pbnRlbGAsIHdoaWNoIGRvZXNuJ3QpOgoKICAgIGh0 dHA6Ly9zZGFhdWJja3Auc2YubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9jYXB0dGVzdF8wNF9iZHVt LmdpZgoKQSBxdWljayBzY2FuIG9mIHRoZSB0b3Agb2YgdGhhdCBhbmltYXRlZCBwbG90LCB0ZWxs cyB1cyB0aGF0IGluIHRob3NlIGBkdW1teS1wYXRlc3RgIGFjcXVpc2l0aW9ucywgdGhlIHNlY29u ZCB0aW1lciBmdW5jdGlvbiBkb2Vzbid0IGV2ZW4gZmlyZTsgaW1wbHlpbmcgdGhhdCB0aGUgc3Ry ZWFtIHdhcyBzdG9wcGVkIGFscmVhZHkgYXQgdGhlIGZpcnN0IGZpcmluZyBvZiBwb2ludGVyIChv ciB0aGUgc2Vjb25kIGB3cml0ZWlgKS4gT25lIG9mIHRob3NlIGFjcXVpc2l0aW9ucyBpczoKCiAg ICBodHRwOi8vc2RhYXViY2twLnNmLm5ldC9wb3N0L2Fsc2EtY2FwdHRlc3QvX2NhcHBpY3MwNC9j YXB0dXJlcy0yMDEzLTA4LTExLTExLTQwLTQ0LWJkdW0tdHJhY2UtYm90aC5wZGYKCkhlcmUgd2Ug Y2FuIHNlZSB0aGF0IGFsc28gLnBvaW50ZXIgZmlyZXMgb25seSBvbmNlLCBhbmQgaXQgc2VlcyB2 YWx1ZXMgaHdfcHRyID0gMCwgLnBvaW50ZXIgPSAzNywgYXBwbF9wdHIgPSAzMjsgYW5kIGFzIHdl IGNhbm5vdCBoYXZlIHBsYXllZCBtb3JlIGZyYW1lcyB0aGFuIHJlcXVlc3RlZCBhZnRlciBhIHNp bmdsZSBgX3dyaXRlaWAsIHRoZSBlbmdpbmUgcmlnaHRseSBkZWNpZGVzIHNvbWV0aGluZyBpcyB3 cm9uZyBoZXJlIC0gYW5kIHJpZ2h0bHkgaXNzdWVzIGEgYF90cmlnZ2VyYCB0byBzdG9wIGltbWVk aWF0ZWx5IGFmdGVyd2FyZHMuCgoKQWxzbywgd2UgY2FuIGhhdmUgYSBicmllZiBsb29rIGF0IHRo ZSBvcmlnaW5hbCBkdW1teSBkcml2ZXIuIEZpcnN0LCByZWNhbGwgdGhhdCB3aGVuIHdlIGNvbXBh cmUgdGhlIGNhcHR1cmUgb3BlcmF0aW9uIGluIHRoZSBvcmlnaW5hbCBgZHVtbXlgIHZzLiBgZHVt bXktcGF0ZXN0YDoKCiAgICBodHRwOi8vc2RhYXViY2twLnNmLm5ldC9wb3N0L2Fsc2EtY2FwdHRl c3QvY2FwdHRlc3QuZ2lmICAgICAoY2FwdHVyZSAgLSBgZHVtbXktcGF0ZXN0YDogdG9wIHBsb3Qp CiAgICBodHRwOi8vc2RhYXViY2twLnNmLm5ldC9wb3N0L2Fsc2EtY2FwdHRlc3QvY2FwdHRlc3Rf MDMuZ2lmICAoY2FwdHVyZSAgLSAgb3JpZyBgZHVtbXlgIDogdG9wIHBsb3QpCgouLi4gdGhlIG9y aWdpbmFsIGBkdW1teWAsIGJlaW5nIGFibGUgdG8gcHJvdmlkZSBhIC5wb2ludGVyIHRoYXQgaW5j cmVhc2VzIGVhY2ggZnJhbWUsIGNhbiB0cmlnZ2VyIGBzbmRfcGNtX3VwZGF0ZV9od19wdHIwYCAo YW5kIHRodXMgdGhlIC5wb2ludGVyIGZ1bmN0aW9uKSB0byByZXBlYXRlZGx5IHVwZGF0ZSBtdWx0 aXBsZSB0aW1lczsgYGR1bW15LXBhdGVzdGAsIHdoaWNoIGNhbGN1bGF0ZXMgLnBvaW50ZXIgcG9z aXRpb24gb25seSBvbmNlIGluIHRoZSB0aW1lciB0YXNrbGV0LCBkb2Vzbid0IHRyaWdnZXIgYSBg c25kX3BjbV91cGRhdGVfaHdfcHRyMGAgKGFuZCB0aGUgY29ycmVzcG9uZGluZyAucG9pbnRlcikg dXBkYXRlIG1vcmUgdGhhbiB0d2ljZSBpbiBhIHJvdy4KClRoZSBpbnRlcmVzdGluZyB0aGluZyBp cywgdGhhdCBpbiB0aGUgcGxheWJhY2sgZGlyZWN0aW9uLCB0aGVyZSBpcyBubyBzdWNoIGRpc3Rp bmN0aW9uOgoKICAgIGh0dHA6Ly9zZGFhdWJja3Auc2YubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9j YXB0dGVzdF8wNC5naWYgICAgIChwbGF5YmFjayAtIGBkdW1teS1wYXRlc3RgOiB0b3AgcGxvdCkK ICAgIGh0dHA6Ly9zZGFhdWJja3Auc2YubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9jYXB0dGVzdF8w NF9vci5naWYgIChwbGF5YmFjayAtICBvcmlnIGBkdW1teWAgOiB0b3AgcGxvdCkKCkluIGJvdGgg Y2FzZXMsIHRoZSAucG9pbnRlciBpbiBjb250ZXh0IG9mIGBzbmRfcGNtX3VwZGF0ZV9od19wdHIw YCBpcyBjYWxsZWQgYXQgcHJldHR5IG11Y2ggdGhlIHNhbWUgdGltZXMuIEkgd291bGQgZ3Vlc3Ms IHRoYXQgdGhpcyBpcyBiZWNhdXNlIG9mIHRoZSBmdW5kYW1lbnRhbCBkaWZmZXJlbmNlIGJldHdl ZW4gdGhlIGNhcHR1cmUgYW5kIHBsYXliYWNrIGRpcmVjdGlvbiAtIGluIHRoZSBjYXB0dXJlIGRp cmVjdGlvbiwgdGhlIGNhcmQgaXMgdGhlIGluaXRpYXRvciBvZiBkZWxpdmVyaW5nIGZyYW1lcyB0 byB0aGUgUEMsIGFuZCAucG9pbnRlciBpbmRpY2F0ZXMgdGhlIHBvc2l0aW9uIHRoYXQgdGhlIGNh cmQgaGFzIHJlYWNoZWQgaW4gY2FwdHVyaW5nIC0gYW5kIGl0J3MgaW4gdGhlIGJlc3QgaW50ZXJl c3Qgb2YgQUxTQSB0byBoYXZlIHRoZSBsYXRlc3QgLnBvaW50ZXIgcG9zaXRpb24gc3RvcmVkIGlu IGh3X3B0cjsgdGh1cyBpZiBBTFNBIGtlZXBzIG9uIGdldHRpbmcgbmV3IHZhbHVlcyBpbiAucG9p bnRlciwgaXQgd2lsbCByZXBlYXRlZGx5IHRyeSB0byB1cGRhdGUgdG8gdGhlbS4gQnV0LCBpbiB0 aGUgcGxheWJhY2sgZGlyZWN0aW9uLCB1c2Vyc3BhY2UgaXMgdGhlIGluaXRpYXRvciBvZiBkZWxp dmVyaW5nIGZyYW1lcyB0byB0aGUgY2FyZCwgYW5kIGFzIHN1Y2ggQUxTQSBkb2Vzbid0IG5lZWQg dG8gY29udGludW91c2x5IHVwZGF0ZSB0byBoYXZlIHRoZSBsYXRlc3QgLnBvaW50ZXIgc2hvdWxk IGl0IGNoYW5nZSAtIGl0IGNhbiBtYWtlIGRvLCBhcHBhcmVudGx5IHNpbXBseSBieSBjaGVja2lu ZyAucG9pbnRlciAib25jZSBpbiBhIHdoaWxlIiwgYW5kIG1ha2luZyBzdXJlIHRoZSBjYXJkIGtl ZXBzIHRyYWNrIHdpdGggcGxheWJhY2sgYXMgZGVtYW5kZWQgYnkgdXNlcnNwYWNlLgoKCkJlZm9y ZSBJIHdyYXAgdXAsIGhlcmUgaXMgYSBzbWFsbCAoYW5kIGNydWRlKSBBU0NJSSB0YWJsZSwgc3Vt bWFyaXppbmcgdGhlIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3IgYmV0d2VlbiB0aGUgYGhkYS1pbnRl bGAgYW5kIGBkdW1teWAgZHJpdmVycyAoaGVyZSBgZHVtbXlgIHJlZmVycyBib3RoIHRvIHRoZSBv cmlnaW5hbCBhbmQgYGR1bW15LXBhdGVzdGAsIHNpbmNlIHRoZXkgYm90aCBzY2hlZHVsZSB0aGVp ciB0aW1lciBmdW5jdGlvbnMgdGhlIHNhbWUgd2F5KSBpbiB0aGUgY29udGV4dCBvZiBgY2FwdG1p bmlgL2BwbGF5bWluaWAgdGVzdHMsIGFzIEkgc2VlIGl0IHNvIGZhcjoKCiAgICAgICAgICAgaGRh LWludGVsICAgICAgICAgICAgICAgZHVtbXkKICAgIDAgICByZWFkaSAgICAgd3JpdGVpICAgfCAg IHJlYWRpICAgICB3cml0ZWkKICAgIDEgICBJUlEucC8wICAgSVJRICAgICAgfAogICAgMTYgICAg ICAgICAgICBJUlEvMCAgICB8CiAgICAzMiAgSVJRLnAvMzIgICAgICAgICAgIHwgICBUbXIucC8z MiAgVG1yLnAvMzIKICAgIDQ4ICAgICAgICAgICAgSVJRLnAvMzIgfAogICAgNjQgIElSUS5wICAg ICAgICAgICAgICB8ICAgVG1yLnAgICAgIFRtci5wCiAgICAxNiAgICAgICAgICAgIElSUS5wICAg IHwKICAgIC4uLgoKSGVyZSB0aW1lIGlzIHNob3duIHRocm91Z2ggZnJhbWVzLCBhc3N1bWluZyBw ZXJpb2Rfc2l6ZSBpcyAzMiAoc28gaGFsZiBhIHBlcmlvZCBpcyAxNiwgdHdvIHBlcmlvZHMgaXMg NjQgLSB3aGljaCBpcyBhbHNvIGJ1ZmZlcl9zaXplKS4gVGhlIHRhYmxlIHNob3dzIGEgY29tcGFy aXNvbiBvZiB0aGUgZmlyaW5nIG9mICJwZXJpb2QgcHVsc2VzIjogaW4gY2FzZSBvZiBgaGRhLWlu dGVsYCBwcm92aWRlZCBieSBhIGNhcmQgSVJROyBpbiBjYXNlIG9mIHRoZSB2aXJ0dWFsIGBkdW1t eWAgZHJpdmVyIHByb3ZpZGVkIGJ5IHRpbWVyIGZ1bmN0aW9ucy4gVGhlIGAucGAsIHdoZXJlIHBy ZXNlbnQsIG1lYW5zIHRoYXQgLnBvaW50ZXIgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGluIGNv bnRleHQgb2YgdGhhdCBjYWxsYmFjay4gVGhlIHByZXNlbmNlIG9mIElSUSBhdCAiMSIgZm9yIGBo ZGEtaW50ZWxgIG1lYW5zICJhY2tub3dsZWRnbWVudCIgaW50ZXJydXB0cyBhcmUgZmlyZWQgaW1t ZWRpYXRlbHkgYWZ0ZXIgdGhlIGZpcnN0IGNvbW1hbmQgaXMgaXNzdWVkIC0gd2hpY2ggZG9lc24n dCBoYXBwZW4gaW4gYGR1bW15YC4gVGhlIHNsYXNoIHdpdGggbnVtYmVyICgvMCwgLzMyKSwgd2hl cmUgcHJlc2VudCwgcmVmZXJzIHRvIHdoYXQgLnBvaW50ZXIgcG9zaXRpb24gaXMgZXhwZWN0ZWQg dG8gYmUgcmVwb3J0ZWQgYXQgdGhhdCB0aW1lLiBUaGlzIHNob3VsZCBoZWxwIG1ha2UgdmlzaWJs ZSB0aGF0IHRoZSBwbGF5YmFjayBzdHJlYW0gZm9yIGBoZGEtaW50ZWxgIGlzICJvZmZzZXQiIGZv ciBoYWxmIGEgcGVyaW9kIGluIHJlc3BlY3QgdG8gdGhlIGNhcHR1cmUgb25lIC0gd2hpY2ggYWdh aW4gZG9lc24ndCBoYXBwZW4gZm9yIGBkdW1teWAuIEkgdGhpbmsgaXQgd2lsbCBiZSBwb3NzaWJs ZSB0byBhZGQgc29tZSB2YXJpYWJsZXMgdG8gYGR1bW15YCwgYW5kIGZvcmNlIGl0IHRvIGZpcmUg aXRzIHRpbWVyIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lCiBhc3ltbWV0cmljIGNhcHR1cmUvcGxh eWJhY2sgcGF0dGVybiBhcyBgaGRhLWludGVsYCAtIHdoZXRoZXIgdGhpcyB3aWxsIGZpeCB0aGUg UG9ydEF1ZGlvIGZ1bGwtZHVwbGV4IGRyb3AsIHJlbWFpbnMgdG8gYmUgc2Vlbi4uLgoKCldlbGws IHRoYXQgaXMgYXMgbXVjaCBJIGNhbiBmaXQgaW50byBhbiBlbWFpbCB0aGlzIHRpbWUgOikKTWFu eSB0aGFua3MgZm9yIGFueSBjb21tZW50cyAtIGVzcGVjaWFsbHkgaWYgYW55b25lIHNlZXMgYW55 dGhpbmcgd3JvbmcgaW4gdGhpcyBhbmFseXNpcywKQ2hlZXJzIQpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBbHNhLWRldmVsIG1haWxpbmcgbGlzdApBbHNh LWRldmVsQGFsc2EtcHJvamVjdC5vcmcKaHR0cDovL21haWxtYW4uYWxzYS1wcm9qZWN0Lm9yZy9t YWlsbWFuL2xpc3RpbmZvL2Fsc2EtZGV2ZWwK