From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Hurley Subject: Re: [Intel-gfx] [PATCH] drm/vblank: Fixup and document timestamp update/read barriers Date: Thu, 07 May 2015 07:56:49 -0400 Message-ID: <554B5301.5030905@hurleysoftware.com> References: <1429082222-20820-1-git-send-email-daniel.vetter@ffwll.ch> <552E60D4.3070307@hurleysoftware.com> <20150415173153.GA6092@phenom.ffwll.local> <552FAB7F.4040707@hurleysoftware.com> <20150416130323.GG5082@phenom.ffwll.local> <5546FB02.4010508@gmail.com> <5548D568.3050109@hurleysoftware.com> <20150505154206.GB30184@phenom.ffwll.local> <5548E876.4010706@hurleysoftware.com> <20150506085640.GH30184@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20150506085640.GH30184@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: Daniel Vetter , =?UTF-8?B?TWljaGVsIETDpG56ZXI=?= , DRI Development , Daniel Vetter , Intel Graphics Development List-Id: intel-gfx@lists.freedesktop.org T24gMDUvMDYvMjAxNSAwNDo1NiBBTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiBPbiBUdWUsIE1h eSAwNSwgMjAxNSBhdCAxMTo1Nzo0MkFNIC0wNDAwLCBQZXRlciBIdXJsZXkgd3JvdGU6Cj4+IE9u IDA1LzA1LzIwMTUgMTE6NDIgQU0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4+PiBPbiBUdWUsIE1h eSAwNSwgMjAxNSBhdCAxMDozNjoyNEFNIC0wNDAwLCBQZXRlciBIdXJsZXkgd3JvdGU6Cj4+Pj4g T24gMDUvMDQvMjAxNSAxMjo1MiBBTSwgTWFyaW8gS2xlaW5lciB3cm90ZToKPj4+Pj4gT24gMDQv MTYvMjAxNSAwMzowMyBQTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPj4+Pj4+IE9uIFRodSwgQXBy IDE2LCAyMDE1IGF0IDA4OjMwOjU1QU0gLTA0MDAsIFBldGVyIEh1cmxleSB3cm90ZToKPj4+Pj4+ PiBPbiAwNC8xNS8yMDE1IDAxOjMxIFBNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+Pj4+Pj4+PiBP biBXZWQsIEFwciAxNSwgMjAxNSBhdCAwOTowMDowNEFNIC0wNDAwLCBQZXRlciBIdXJsZXkgd3Jv dGU6Cj4+Pj4+Pj4+PiBIaSBEYW5pZWwsCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gT24gMDQvMTUvMjAx NSAwMzoxNyBBTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPj4+Pj4+Pj4+PiBUaGlzIHdhcyBhIGJp dCB0b28gbXVjaCBjYXJnby1jdWx0ZWQsIHNvIGxldHMgbWFrZSBpdCBzb2xpZDoKPj4+Pj4+Pj4+ PiAtIHZibGFuay0+Y291bnQgZG9lc24ndCBuZWVkIHRvIGJlIGFuIGF0b21pYywgd3JpdGVzIGFy ZSBhbHdheXMgZG9uZQo+Pj4+Pj4+Pj4+ICAgIHVuZGVyIHRoZSBwcm90ZWN0aW9uIG9mIGRldi0+ dmJsYW5rX3RpbWVfbG9jay4gU3dpdGNoIHRvIGFuIHVuc2lnbmVkCj4+Pj4+Pj4+Pj4gICAgbG9u ZyBpbnN0ZWFkIGFuZCB1cGRhdGUgY29tbWVudHMuIE5vdGUgdGhhdCBhdG9taWNfcmVhZCBpcyBq dXN0IGEKPj4+Pj4+Pj4+PiAgICBub3JtYWwgcmVhZCBvZiBhIHZvbGF0aWxlIHZhcmlhYmxlLCBz byBubyBuZWVkIHRvIGF1ZGl0IGFsbCB0aGUKPj4+Pj4+Pj4+PiAgICByZWFkLXNpZGUgYWNjZXNz IHNwZWNpZmljYWxseS4KPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IC0gVGhlIGJhcnJpZXJzIGZvciB0 aGUgdmJsYW5rIGNvdW50ZXIgc2VxbG9jayB3ZXJlbid0IGNvbXBsZXRlOiBUaGUKPj4+Pj4+Pj4+ PiAgICByZWFkLXNpZGUgd2FzIG1pc3NpbmcgdGhlIGZpcnN0IGJhcnJpZXIgYmV0d2VlbiB0aGUg Y291bnRlciByZWFkIGFuZAo+Pj4+Pj4+Pj4+ICAgIHRoZSB0aW1lc3RhbXAgcmVhZCwgaXQgb25s eSBoYWQgYSBiYXJyaWVyIGJldHdlZW4gdGhlIHRzIGFuZCB0aGUKPj4+Pj4+Pj4+PiAgICBjb3Vu dGVyIHJlYWQuIFdlIG5lZWQgYm90aC4KPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IC0gQmFycmllcnMg d2VyZW4ndCBwcm9wZXJseSBkb2N1bWVudGVkLiBTaW5jZSBiYXJyaWVycyBvbmx5IHdvcmsgaWYK Pj4+Pj4+Pj4+PiAgICB5b3UgaGF2ZSB0aGVtIG9uIGJvdGhzIHNpZGVzIG9mIHRoZSB0cmFuc2Fj dGlvbiBpdCdzIHBydWRlbnQgdG8KPj4+Pj4+Pj4+PiAgICByZWZlcmVuY2Ugd2hlcmUgdGhlIG90 aGVyIHNpZGUgaXMuIFRvIGF2b2lkIGR1cGxpY2F0aW5nIHRoZQo+Pj4+Pj4+Pj4+ICAgIHdyaXRl LXNpZGUgY29tbWVudCAzIHRpbWVzIGV4dHJhY3QgYSBsaXR0bGUgc3RvcmVfdmJsYW5rKCkgaGVs cGVyLgo+Pj4+Pj4+Pj4+ICAgIEluIHRoYXQgaGVscGVyIGFsc28gYXNzZXJ0IHRoYXQgd2UgZG8g aW5kZWVkIGhvbGQKPj4+Pj4+Pj4+PiAgICBkZXYtPnZibGFua190aW1lX2xvY2ssIHNpbmNlIGlu IHNvbWUgY2FzZXMgdGhlIGxvY2sgaXMgYWNxdWlyZWQgYQo+Pj4+Pj4+Pj4+ICAgIGZldyBmdW5j dGlvbnMgdXAgaW4gdGhlIGNhbGxjaGFpbi4KPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IFNwb3R0ZWQg d2hpbGUgcmV2aWV3aW5nIGEgcGF0Y2ggZnJvbSBDaHJpcyBXaWxzb24gdG8gYWRkIGEgZmFzdHBh dGggdG8KPj4+Pj4+Pj4+PiB0aGUgdmJsYW5rX3dhaXQgaW9jdGwuCj4+Pj4+Pj4+Pj4KPj4+Pj4+ Pj4+PiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4+Pj4+Pj4+ Pj4gQ2M6IE1hcmlvIEtsZWluZXIgPG1hcmlvLmtsZWluZXIuZGVAZ21haWwuY29tPgo+Pj4+Pj4+ Pj4+IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ Pj4+Pj4+Pj4+IENjOiBNaWNoZWwgRMOkbnplciA8bWljaGVsQGRhZW56ZXIubmV0Pgo+Pj4+Pj4+ Pj4+IFNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29t Pgo+Pj4+Pj4+Pj4+IC0tLQo+Pj4+Pj4+Pj4+ICAgZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyB8 IDkyICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+Pj4+ Pj4+Pj4gICBpbmNsdWRlL2RybS9kcm1QLmggICAgICAgIHwgIDggKysrLS0KPj4+Pj4+Pj4+PiAg IDIgZmlsZXMgY2hhbmdlZCwgNTQgaW5zZXJ0aW9ucygrKSwgNDYgZGVsZXRpb25zKC0pCj4+Pj4+ Pj4+Pj4KPj4+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKPj4+Pj4+Pj4+PiBpbmRleCBjOGEzNDQ3NjU3MGEu LjIzYmZiYzYxYTQ5NCAxMDA2NDQKPj4+Pj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJt X2lycS5jCj4+Pj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwo+Pj4+Pj4+ Pj4+IEBAIC03NCw2ICs3NCwzMyBAQCBtb2R1bGVfcGFyYW1fbmFtZWQodmJsYW5rb2ZmZGVsYXks IGRybV92Ymxhbmtfb2ZmZGVsYXksIGludCwgMDYwMCk7Cj4+Pj4+Pj4+Pj4gICBtb2R1bGVfcGFy YW1fbmFtZWQodGltZXN0YW1wX3ByZWNpc2lvbl91c2VjLCBkcm1fdGltZXN0YW1wX3ByZWNpc2lv biwgaW50LCAwNjAwKTsKPj4+Pj4+Pj4+PiAgIG1vZHVsZV9wYXJhbV9uYW1lZCh0aW1lc3RhbXBf bW9ub3RvbmljLCBkcm1fdGltZXN0YW1wX21vbm90b25pYywgaW50LCAwNjAwKTsKPj4+Pj4+Pj4+ Pgo+Pj4+Pj4+Pj4+ICtzdGF0aWMgdm9pZCBzdG9yZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgaW50IGNydGMsCj4+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICB1bnNpZ25lZCB2Ymxhbmtf Y291bnRfaW5jLAo+Pj4+Pj4+Pj4+ICsgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKnRfdmJs YW5rKQo+Pj4+Pj4+Pj4+ICt7Cj4+Pj4+Pj4+Pj4gKyAgICBzdHJ1Y3QgZHJtX3ZibGFua19jcnRj ICp2YmxhbmsgPSAmZGV2LT52YmxhbmtbY3J0Y107Cj4+Pj4+Pj4+Pj4gKyAgICB1MzIgdHNsb3Q7 Cj4+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4+ICsgICAgYXNzZXJ0X3NwaW5fbG9ja2VkKCZkZXYtPnZi bGFua190aW1lX2xvY2spOwo+Pj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+PiArICAgIGlmICh0X3ZibGFu aykgewo+Pj4+Pj4+Pj4+ICsgICAgICAgIHRzbG90ID0gdmJsYW5rLT5jb3VudCArIHZibGFua19j b3VudF9pbmM7Cj4+Pj4+Pj4+Pj4gKyAgICAgICAgdmJsYW5rdGltZXN0YW1wKGRldiwgY3J0Yywg dHNsb3QpID0gKnRfdmJsYW5rOwo+Pj4+Pj4+Pj4+ICsgICAgfQo+Pj4+Pj4+Pj4+ICsKPj4+Pj4+ Pj4+PiArICAgIC8qCj4+Pj4+Pj4+Pj4gKyAgICAgKiB2YmxhbmsgdGltZXN0YW1wIHVwZGF0ZXMg YXJlIHByb3RlY3RlZCBvbiB0aGUgd3JpdGUgc2lkZSB3aXRoCj4+Pj4+Pj4+Pj4gKyAgICAgKiB2 YmxhbmtfdGltZV9sb2NrLCBidXQgb24gdGhlIHJlYWQgc2lkZSBkb25lIGxvY2tsZXNzbHkgdXNp bmcgYQo+Pj4+Pj4+Pj4+ICsgICAgICogc2VxdWVuY2UtbG9jayBvbiB0aGUgdmJsYW5rIGNvdW50 ZXIuIEVuc3VyZSBjb3JyZWN0IG9yZGVyaW5nIHVzaW5nCj4+Pj4+Pj4+Pj4gKyAgICAgKiBtZW1v cnkgYmFycnJpZXJzLiBXZSBuZWVkIHRoZSBiYXJyaWVyIGJvdGggYmVmb3JlIGFuZCBhbHNvIGFm dGVyIHRoZQo+Pj4+Pj4+Pj4+ICsgICAgICogY291bnRlciB1cGRhdGUgdG8gc3luY2hyb25pemUg d2l0aCB0aGUgbmV4dCB0aW1lc3RhbXAgd3JpdGUuCj4+Pj4+Pj4+Pj4gKyAgICAgKiBUaGUgcmVh ZC1zaWRlIGJhcnJpZXJzIGZvciB0aGlzIGFyZSBpbiBkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1l Lgo+Pj4+Pj4+Pj4+ICsgICAgICovCj4+Pj4+Pj4+Pj4gKyAgICBzbXBfd21iKCk7Cj4+Pj4+Pj4+ Pj4gKyAgICB2YmxhbmstPmNvdW50ICs9IHZibGFua19jb3VudF9pbmM7Cj4+Pj4+Pj4+Pj4gKyAg ICBzbXBfd21iKCk7Cj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gVGhlIGNvbW1lbnQgYW5kIHRoZSBjb2Rl IGFyZSBlYWNoIHNlbGYtY29udHJhZGljdG9yeS4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+PiBJZiB2Ymxh bmstPmNvdW50IHdyaXRlcyBhcmUgYWx3YXlzIHByb3RlY3RlZCBieSB2YmxhbmtfdGltZV9sb2Nr IChzb21ldGhpbmcgSQo+Pj4+Pj4+Pj4gZGlkIG5vdCB2ZXJpZnkgYnV0IHRoYXQgdGhlIGNvbW1l bnQgYWJvdmUgYXNzZXJ0cyksIHRoZW4gdGhlIHRyYWlsaW5nIHdyaXRlCj4+Pj4+Pj4+PiBiYXJy aWVyIGlzIG5vdCByZXF1aXJlZCAoYW5kIHRoZSBhc3NlcnRpb24gdGhhdCBpdCBpcyBpbiB0aGUg Y29tbWVudCBpcyBpbmNvcnJlY3QpLgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IEEgc3BpbiB1bmxvY2sg b3BlcmF0aW9uIGlzIGFsd2F5cyBhIHdyaXRlIGJhcnJpZXIuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IEht IHllYWguIE90b2ggdG8gbWUgdGhhdCdzIGJvcmRlcmluZyBvbiAiY29kZSB0b28gY2xldmVyIGZv ciBteSBvd24gZ29vZCIuCj4+Pj4+Pj4+IFRoYXQgdGhlIHNwaW5sb2NrIGlzIGhlbGQgSSBjYW4g YXNzdXJlLiBUaGF0IG5vIG9uZSBnb2VzIGFyb3VuZCBhbmQgZG9lcwo+Pj4+Pj4+PiBtdWx0aXBs ZSB2YmxhbmsgdXBkYXRlcyAoYmVjYXVzZSBzb21laG93IHRoYXQgY29kZSByYWNlZCB3aXRoIHRo ZSBodwo+Pj4+Pj4+PiBpdHNlbGYpIEkgY2FuJ3QgZWFzaWx5IGFzc3VyZSB3aXRoIGEgc2ltcGxl IGFzc2VydCBvciBzb21ldGhpbmcgc2ltaWxhci4KPj4+Pj4+Pj4gSXQncyBub3QgdGhlIGNhc2Ug cmlnaHQgbm93LCBidXQgdGhhdCBjYW4gY2hhbmdlcy4KPj4+Pj4+Pgo+Pj4+Pj4+IFRoZSBhbGdv cml0aG0gd291bGQgYmUgYnJva2VuIGlmIG11bHRpcGxlIHVwZGF0ZXMgZm9yIHRoZSBzYW1lIHZi bGFuawo+Pj4+Pj4+IGNvdW50IHdlcmUgYWxsb3dlZDsgdGhhdCdzIHdoeSBpdCBjaGVja3MgdG8g c2VlIGlmIHRoZSB2YmxhbmsgY291bnQgaGFzCj4+Pj4+Pj4gbm90IGFkdmFuY2VkIGJlZm9yZSBz dG9yaW5nIGEgbmV3IHRpbWVzdGFtcC4KPj4+Pj4+Pgo+Pj4+Pj4+IE90aGVyd2lzZSwgdGhlIHJl YWQgc2lkZSB3b3VsZCBub3QgYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhhdCB0aGUKPj4+Pj4+PiB0 aW1lc3RhbXAgaXMgdmFsaWQgYnkgZG91YmxlLWNoZWNraW5nIHRoYXQgdGhlIHZibGFuayBjb3Vu dCBoYXMgbm90Cj4+Pj4+Pj4gY2hhbmdlZC4KPj4+Pj4+Pgo+Pj4+Pj4+IEFuZCBiZXNpZGVzLCBl dmVuIGlmIHRoZSBjb2RlIGxvb3BlZCB3aXRob3V0IGRyb3BwaW5nIHRoZSBzcGlubG9jaywKPj4+ Pj4+PiB0aGUgY29ycmVjdCB3cml0ZSBvcmRlciB3b3VsZCBzdGlsbCBiZSBvYnNlcnZlZCBiZWNh dXNlIGl0IHdvdWxkIHN0aWxsCj4+Pj4+Pj4gYmUgZXhlY3V0aW5nIG9uIHRoZSBzYW1lIGNwdS4K Pj4+Pj4+Pgo+Pj4+Pj4+IE15IG9iamVjdGlvbiB0byB0aGUgd3JpdGUgbWVtb3J5IGJhcnJpZXIg aXMgbm90IGFib3V0IG9wdGltaXphdGlvbjsKPj4+Pj4+PiBpdCdzIGFib3V0IGNvcnJlY3QgY29k ZS4KPj4+Pj4+Cj4+Pj4+PiBXZWxsIGRpZmY9MCBpcyBub3QgYWxsb3dlZCwgSSBndWVzcyBJIGNv dWxkIGVuZm9yY2UgdGhpcyB3aXRoIHNvbWUKPj4+Pj4+IFdBUk5fT04uIEFuZCBJIHN0aWxsIHRo aW5rIG15IHBvaW50IG9mIG5vbi1sb2NhbCBjb3JyZWN0bmVzcyBpcyBzb2xpZC4KPj4+Pj4+IFdp dGggdGhlIHNtcF93bWIoKSByZW1vdmVkIHRoZSBmb2xsb3dpbmcgc3RpbGwgd29ya3MgY29ycmVj dGx5Ogo+Pj4+Pj4KPj4+Pj4+IHNwaW5fbG9jayh2YmxhbmtfdGltZV9sb2NrKTsKPj4+Pj4+IHN0 b3JlX3ZibGFuayhkZXYsIGNydGMsIDEsIHRzMSk7Cj4+Pj4+PiBzcGluX3VubG9jayh2Ymxhbmtf dGltZV9sb2NrKTsKPj4+Pj4+Cj4+Pj4+PiBzcGluX2xvY2sodmJsYW5rX3RpbWVfbG9jayk7Cj4+ Pj4+PiBzdG9yZV92YmxhbmsoZGV2LCBjcnRjLCAxLCB0czIpOwo+Pj4+Pj4gc3Bpbl91bmxvY2so dmJsYW5rX3RpbWVfbG9jayk7Cj4+Pj4+Pgo+Pj4+Pj4gQnV0IHdpdGggdGhlIHNtcF93bWIoKTsg cmVtb3ZlZCB0aGUgZm9sbG93aW5nIHdvdWxkIGJlIGJyb2tlbjoKPj4+Pj4+Cj4+Pj4+PiBzcGlu X2xvY2sodmJsYW5rX3RpbWVfbG9jayk7Cj4+Pj4+PiBzdG9yZV92YmxhbmsoZGV2LCBjcnRjLCAx LCB0czEpOwo+Pj4+Pj4gc3RvcmVfdmJsYW5rKGRldiwgY3J0YywgMSwgdHMyKTsKPj4+Pj4+IHNw aW5fdW5sb2NrKHZibGFua190aW1lX2xvY2spOwo+Pj4+Pj4KPj4+Pj4+IGJlY2F1c2UgdGhlIGNv bXBpbGVyL2NwdSBpcyBmcmVlIHRvIHJlb3JkZXIgdGhlIHN0b3JlIGZvciB2YmxhbmstPmNvdW50 Cj4+Pj4+PiBfYWhlYWRfIG9mIHRoZSBzdG9yZSBmb3IgdGhlIHRpbWVzdGFtcC4gQW5kIHRoYXQg d291bGQgdHJpY2sgcmVhZGVycyBpbnRvCj4+Pj4+PiBiZWxpZXZpbmcgdGhhdCB0aGV5IGhhdmUg YSB2YWxpZCB0aW1lc3RhbXAgd2hlbiB0aGV5IHBvdGVudGlhbGx5IHJhY2VkLgo+Pj4+Pj4KPj4+ Pj4+IE5vdyB5b3UncmUgY29ycmVjdCB0aGF0IHJpZ2h0IG5vdyB0aGVyZSdzIG5vIHN1Y2ggdGhp bmcgZ29pbmcgb24sIGFuZCBpdCdzCj4+Pj4+PiB1bmxpa2VseSB0byBoYXBwZW4gKGdpdmVuIHRo ZSBuYXR1cmUgb2YgdmJsYW5rIHVwZGF0ZXMpLiBCdXQgbXkgcG9pbnQgaXMKPj4+Pj4+IHRoYXQg aWYgd2Ugb3B0aW1pemUgdGhpcyB0aGVuIHRoZSBjb3JyZWN0bmVzcyBjYW4ndCBiZSBwcm92ZW4g bG9jYWxseQo+Pj4+Pj4gYW55bW9yZSBieSBqdXN0IGxvb2tpbmcgYXQgc3RvcmVfdmJsYW5rLCBi dXQgaW5zdGVhZCB5b3UgbXVzdCBhdWRpdCBhbGwKPj4+Pj4+IHRoZSBjYWxsZXJzLiBBbmQgbGVh a2luZyBsb2NraW5nL2JhcnJpZXJzIGxpa2UgdGhhdCBpcyB0b28gZnJhZ2lsZSBkZXNpZ24KPj4+ Pj4+IGZvciBteSB0YXN0ZS4KPj4+Pj4+Cj4+Pj4+PiBCdXQgeW91IGluc2lzdCB0aGF0IG15IGFw cHJvYWNoIGlzIGJyb2tlbiBzb21laG93IGFuZCBkcm9wcGluZyB0aGUgc21wX3dtYgo+Pj4+Pj4g aXMgbmVlZGVkIGZvciBjb3JyZWN0bmVzcy4gSSBkb24ndCBzZWUgaG93IHRoYXQncyB0aGUgY2Fz ZSBhdCBhbGwuCj4+Pj4KPj4+PiBEYW5pZWwsCj4+Pj4KPj4+PiBJJ3ZlIGJlZW4gcmVhbGx5IGJ1 c3kgdGhpcyBsYXN0IHdlZWs7IG15IGFwb2xvZ2llcyBmb3Igbm90IHJlcGx5aW5nIHByb21wdGx5 Lgo+Pj4+Cj4+Pj4+IEZ3aXcsIGkgc3BlbnQgc29tZSB0aW1lIHJlZWR1Y2F0aW5nIG15c2VsZiBh Ym91dCBtZW1vcnkgYmFycmllcnMgKHRoYW5rcyBmb3IgeW91ciBleHBsYW5hdGlvbnMpIGFuZCB0 aGlua2luZyBhYm91dCB0aGlzLCBhbmQgdGhlIGxhc3QgdmVyc2lvbiBvZiB5b3VyIHBhdGNoIGxv b2tzIGdvb2QgdG8gbWUuIEl0IGFsc28gbWFrZXMgc2Vuc2UgdG8gbWUgdG8gbGVhdmUgdGhhdCBs YXN0IHNtYl93bWIoKSBpbiBwbGFjZSB0byBtYWtlIGZ1dHVyZSB1c2Ugb2YgdGhlIGhlbHBlciBy b2J1c3QgLSBmb3Igbm9uLWxvY2FsIGNvcnJlY3RuZXNzLCB0byBhdm9pZCBoYXZpbmcgdG8gYXVk aXQgYWxsIGZ1dHVyZSBjYWxsZXJzIG9mIHRoYXQgaGVscGVyLgo+Pj4+Cj4+Pj4gTXkgY29uY2Vy biB3cnQgdG8gdW5uZWNlc3NhcnkgYmFycmllcnMgaW4gdGhpcyBhbGdvcml0aG0gaXMgdGhhdCB0 aGUgdHJhaWxpbmcKPj4+PiBiYXJyaWVyIG5vdyBhcHBlYXJzIG1hbmRhdG9yeSwgd2hlbiBpbiBm YWN0IGl0IGlzIG5vdC4KPj4+Pgo+Pj4+IE1vcmVvdmVyLCB0aGlzIGFsZ29yaXRobSBpcywgaW4g Z2VuZXJhbCwgZnJhZ2lsZSBhbmQgbm90IGRlc2lnbmVkIHRvIGhhbmRsZQo+Pj4+IHJhbmRvbSBv ciBwb29ybHktcmVzZWFyY2hlZCBjaGFuZ2VzLgo+Pj4KPj4+IExlc3MgZnJhZ2lsaXR5IGlzIGV4 YWN0bHkgd2h5IEkgd2FudCB0aGF0IHN1cnBsdXMgYmFycmllci4gQnV0IEkndmUgcnVuCj4+PiBv dXQgb2YgbmV3IGlkZWFzIGZvciBob3cgdG8gZXhwbGFpbiB0aGF0IC4uLgo+Pj4KPj4+PiBGb3Ig ZXhhbXBsZSwgaWYgb25seSB0aGUgcmVhZCBhbmQgc3RvcmUgb3BlcmF0aW9ucyBhcmUgY29uc2lk ZXJlZCwgaXQncyBvYnZpb3VzbHkKPj4+PiB1bnNhZmUsIHNpbmNlIGEgcmVhZCBtYXkgdW53aXR0 aW5nbHkgcmV0cmlldmUgYW4gc3RvcmUgaW4gcHJvZ3Jlc3MuCj4+Pj4KPj4+Pgo+Pj4+IENQVSAw ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENQVSAxCj4+Pj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPj4+PiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHZibGFuay0+Y291bnQgPT0gMCAqLwo+Pj4+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8Cj4+Pj4gZHJtX3ZibGFua19jb3VudF9hbmRfdGltZSgp ICAgICAgICAgICAgIHwgc3RvcmVfdmJsYW5rKC4uLCBpbmMgPSAyLCAuLi4pCj4+Pj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPj4+PiAgIGN1cl92YmxhbmsgPD0g TE9BRCB2YmxhbmstPmNvdW50ICAgICAgfAo+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgdHNsb3QgPSB2YmxhbmstPmNvdW50ICsgMgo+Pj4+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgLyogdHNsb3QgPT0gMiAqLwo+Pj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgU1RPUkUgdmJsYW5r dGltZVswXQo+Pj4KPj4+IFRoaXMgbGluZSBoZXJlIGlzIHdyb25nLCBpdCBzaG91bGQgYmUgIlNU T1JFIHZibGFua3RpbWVbMl0iCj4+Pgo+Pj4gVGhlICJTVE9SRSB2Ymxhbmt0aW1lWzBdIiBoYXBw ZW5lZCB3YXkgZWFybGllciwgYmVmb3JlIDIgc21wX3dtYiBhbmQgdGhlCj4+PiBwcmV2aW91cyB1 cGRhdGluZyBvZiB2YmxhbmstPmNvdW50Lgo+Pgo+PiAmdmJsYW5rdGltZVswXSA9PSAmdmJsYW5r dGltZVsyXQo+Pgo+PiBUaGF0J3Mgd2h5IEkga2VlcCB0cnlpbmcgdG8gZXhwbGFpbiB5b3UgYWN0 dWFsbHkgaGF2ZSB0byBsb29rIGF0IGFuZAo+PiB1bmRlcnN0YW5kIHRoZSBhbGdvcml0aG0gYmVm b3JlIGJsaW5kbHkgYXNzdW1pbmcgbG9jYWwgYmVoYXZpb3IgaXMKPj4gc3VmZmljaWVudC4KPiAK PiBPayBub3cgSSB0aGluayBJIGdvdCBpdCwgdGhlIGlzc3VlIGlzIHdoZW4gdGhlIGFycmF5ICh3 aGljaCBpcyBvbmx5IDIKPiBlbGVtZW50cyBiaWcpIHdyYXBzIGFyb3VuZC4gQW5kIHRoYXQncyBy YWN5IGJlY2F1c2Ugd2UgZG9uJ3QgdG91Y2ggdGhlCj4gaW5jcmVtZW50IGJlZm9yZSBfYW5kXyBh ZnRlciB0aGUgd3JpdGUgc2lkZSB1cGRhdGUuIEJ1dCB0aGF0IHNlZW1zIGxpa2UgYQo+IGJ1ZyB0 aGF0J3MgYWx3YXlzIGJlZW4gdGhlcmU/CgpJJ20gbm90IHN1cmUgaWYgdGhvc2UgY29uZGl0aW9u cyBjYW4gYWN0dWFsbHkgb2NjdXI7IGl0J3MgYmVlbiBhIGxvbmcgdGltZQpzaW5jZSBJIGFuYWx5 emVkIHZibGFuayB0aW1lc3RhbXBpbmcuCiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg==