From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Hurley Subject: Re: [PATCH] drm/vblank: Fixup and document timestamp update/read barriers Date: Tue, 05 May 2015 10:36:24 -0400 Message-ID: <5548D568.3050109@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> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qk0-f171.google.com (mail-qk0-f171.google.com [209.85.220.171]) by gabe.freedesktop.org (Postfix) with ESMTP id 2E0EA6E55C for ; Tue, 5 May 2015 07:36:28 -0700 (PDT) Received: by qkgx75 with SMTP id x75so107134013qkg.1 for ; Tue, 05 May 2015 07:36:28 -0700 (PDT) In-Reply-To: <5546FB02.4010508@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Mario Kleiner , Daniel Vetter Cc: Daniel Vetter , Intel Graphics Development , =?UTF-8?B?TWljaGVsIETDpG56ZXI=?= , DRI Development , Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gMDUvMDQvMjAxNSAxMjo1MiBBTSwgTWFyaW8gS2xlaW5lciB3cm90ZToKPiBPbiAwNC8xNi8y MDE1IDAzOjAzIFBNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+PiBPbiBUaHUsIEFwciAxNiwgMjAx NSBhdCAwODozMDo1NUFNIC0wNDAwLCBQZXRlciBIdXJsZXkgd3JvdGU6Cj4+PiBPbiAwNC8xNS8y MDE1IDAxOjMxIFBNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+Pj4+IE9uIFdlZCwgQXByIDE1LCAy MDE1IGF0IDA5OjAwOjA0QU0gLTA0MDAsIFBldGVyIEh1cmxleSB3cm90ZToKPj4+Pj4gSGkgRGFu aWVsLAo+Pj4+Pgo+Pj4+PiBPbiAwNC8xNS8yMDE1IDAzOjE3IEFNLCBEYW5pZWwgVmV0dGVyIHdy b3RlOgo+Pj4+Pj4gVGhpcyB3YXMgYSBiaXQgdG9vIG11Y2ggY2FyZ28tY3VsdGVkLCBzbyBsZXRz IG1ha2UgaXQgc29saWQ6Cj4+Pj4+PiAtIHZibGFuay0+Y291bnQgZG9lc24ndCBuZWVkIHRvIGJl IGFuIGF0b21pYywgd3JpdGVzIGFyZSBhbHdheXMgZG9uZQo+Pj4+Pj4gICAgdW5kZXIgdGhlIHBy b3RlY3Rpb24gb2YgZGV2LT52YmxhbmtfdGltZV9sb2NrLiBTd2l0Y2ggdG8gYW4gdW5zaWduZWQK Pj4+Pj4+ICAgIGxvbmcgaW5zdGVhZCBhbmQgdXBkYXRlIGNvbW1lbnRzLiBOb3RlIHRoYXQgYXRv bWljX3JlYWQgaXMganVzdCBhCj4+Pj4+PiAgICBub3JtYWwgcmVhZCBvZiBhIHZvbGF0aWxlIHZh cmlhYmxlLCBzbyBubyBuZWVkIHRvIGF1ZGl0IGFsbCB0aGUKPj4+Pj4+ICAgIHJlYWQtc2lkZSBh Y2Nlc3Mgc3BlY2lmaWNhbGx5Lgo+Pj4+Pj4KPj4+Pj4+IC0gVGhlIGJhcnJpZXJzIGZvciB0aGUg dmJsYW5rIGNvdW50ZXIgc2VxbG9jayB3ZXJlbid0IGNvbXBsZXRlOiBUaGUKPj4+Pj4+ICAgIHJl YWQtc2lkZSB3YXMgbWlzc2luZyB0aGUgZmlyc3QgYmFycmllciBiZXR3ZWVuIHRoZSBjb3VudGVy IHJlYWQgYW5kCj4+Pj4+PiAgICB0aGUgdGltZXN0YW1wIHJlYWQsIGl0IG9ubHkgaGFkIGEgYmFy cmllciBiZXR3ZWVuIHRoZSB0cyBhbmQgdGhlCj4+Pj4+PiAgICBjb3VudGVyIHJlYWQuIFdlIG5l ZWQgYm90aC4KPj4+Pj4+Cj4+Pj4+PiAtIEJhcnJpZXJzIHdlcmVuJ3QgcHJvcGVybHkgZG9jdW1l bnRlZC4gU2luY2UgYmFycmllcnMgb25seSB3b3JrIGlmCj4+Pj4+PiAgICB5b3UgaGF2ZSB0aGVt IG9uIGJvdGhzIHNpZGVzIG9mIHRoZSB0cmFuc2FjdGlvbiBpdCdzIHBydWRlbnQgdG8KPj4+Pj4+ ICAgIHJlZmVyZW5jZSB3aGVyZSB0aGUgb3RoZXIgc2lkZSBpcy4gVG8gYXZvaWQgZHVwbGljYXRp bmcgdGhlCj4+Pj4+PiAgICB3cml0ZS1zaWRlIGNvbW1lbnQgMyB0aW1lcyBleHRyYWN0IGEgbGl0 dGxlIHN0b3JlX3ZibGFuaygpIGhlbHBlci4KPj4+Pj4+ICAgIEluIHRoYXQgaGVscGVyIGFsc28g YXNzZXJ0IHRoYXQgd2UgZG8gaW5kZWVkIGhvbGQKPj4+Pj4+ICAgIGRldi0+dmJsYW5rX3RpbWVf bG9jaywgc2luY2UgaW4gc29tZSBjYXNlcyB0aGUgbG9jayBpcyBhY3F1aXJlZCBhCj4+Pj4+PiAg ICBmZXcgZnVuY3Rpb25zIHVwIGluIHRoZSBjYWxsY2hhaW4uCj4+Pj4+Pgo+Pj4+Pj4gU3BvdHRl ZCB3aGlsZSByZXZpZXdpbmcgYSBwYXRjaCBmcm9tIENocmlzIFdpbHNvbiB0byBhZGQgYSBmYXN0 cGF0aCB0bwo+Pj4+Pj4gdGhlIHZibGFua193YWl0IGlvY3RsLgo+Pj4+Pj4KPj4+Pj4+IENjOiBD aHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPj4+Pj4+IENjOiBNYXJpbyBL bGVpbmVyIDxtYXJpby5rbGVpbmVyLmRlQGdtYWlsLmNvbT4KPj4+Pj4+IENjOiBWaWxsZSBTeXJq w6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+Pj4+Pj4gQ2M6IE1pY2hlbCBE w6RuemVyIDxtaWNoZWxAZGFlbnplci5uZXQ+Cj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwg VmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNvbT4KPj4+Pj4+IC0tLQo+Pj4+Pj4gICBkcml2 ZXJzL2dwdS9kcm0vZHJtX2lycS5jIHwgOTIgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KPj4+Pj4+ICAgaW5jbHVkZS9kcm0vZHJtUC5oICAgICAgICB8ICA4 ICsrKy0tCj4+Pj4+PiAgIDIgZmlsZXMgY2hhbmdlZCwgNTQgaW5zZXJ0aW9ucygrKSwgNDYgZGVs ZXRpb25zKC0pCj4+Pj4+Pgo+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f aXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCj4+Pj4+PiBpbmRleCBjOGEzNDQ3NjU3 MGEuLjIzYmZiYzYxYTQ5NCAxMDA2NDQKPj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f aXJxLmMKPj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKPj4+Pj4+IEBAIC03 NCw2ICs3NCwzMyBAQCBtb2R1bGVfcGFyYW1fbmFtZWQodmJsYW5rb2ZmZGVsYXksIGRybV92Ymxh bmtfb2ZmZGVsYXksIGludCwgMDYwMCk7Cj4+Pj4+PiAgIG1vZHVsZV9wYXJhbV9uYW1lZCh0aW1l c3RhbXBfcHJlY2lzaW9uX3VzZWMsIGRybV90aW1lc3RhbXBfcHJlY2lzaW9uLCBpbnQsIDA2MDAp Owo+Pj4+Pj4gICBtb2R1bGVfcGFyYW1fbmFtZWQodGltZXN0YW1wX21vbm90b25pYywgZHJtX3Rp bWVzdGFtcF9tb25vdG9uaWMsIGludCwgMDYwMCk7Cj4+Pj4+Pgo+Pj4+Pj4gK3N0YXRpYyB2b2lk IHN0b3JlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKPj4+Pj4+ICsg ICAgICAgICAgICAgdW5zaWduZWQgdmJsYW5rX2NvdW50X2luYywKPj4+Pj4+ICsgICAgICAgICAg ICAgc3RydWN0IHRpbWV2YWwgKnRfdmJsYW5rKQo+Pj4+Pj4gK3sKPj4+Pj4+ICsgICAgc3RydWN0 IGRybV92YmxhbmtfY3J0YyAqdmJsYW5rID0gJmRldi0+dmJsYW5rW2NydGNdOwo+Pj4+Pj4gKyAg ICB1MzIgdHNsb3Q7Cj4+Pj4+PiArCj4+Pj4+PiArICAgIGFzc2VydF9zcGluX2xvY2tlZCgmZGV2 LT52YmxhbmtfdGltZV9sb2NrKTsKPj4+Pj4+ICsKPj4+Pj4+ICsgICAgaWYgKHRfdmJsYW5rKSB7 Cj4+Pj4+PiArICAgICAgICB0c2xvdCA9IHZibGFuay0+Y291bnQgKyB2YmxhbmtfY291bnRfaW5j Owo+Pj4+Pj4gKyAgICAgICAgdmJsYW5rdGltZXN0YW1wKGRldiwgY3J0YywgdHNsb3QpID0gKnRf dmJsYW5rOwo+Pj4+Pj4gKyAgICB9Cj4+Pj4+PiArCj4+Pj4+PiArICAgIC8qCj4+Pj4+PiArICAg ICAqIHZibGFuayB0aW1lc3RhbXAgdXBkYXRlcyBhcmUgcHJvdGVjdGVkIG9uIHRoZSB3cml0ZSBz aWRlIHdpdGgKPj4+Pj4+ICsgICAgICogdmJsYW5rX3RpbWVfbG9jaywgYnV0IG9uIHRoZSByZWFk IHNpZGUgZG9uZSBsb2NrbGVzc2x5IHVzaW5nIGEKPj4+Pj4+ICsgICAgICogc2VxdWVuY2UtbG9j ayBvbiB0aGUgdmJsYW5rIGNvdW50ZXIuIEVuc3VyZSBjb3JyZWN0IG9yZGVyaW5nIHVzaW5nCj4+ Pj4+PiArICAgICAqIG1lbW9yeSBiYXJycmllcnMuIFdlIG5lZWQgdGhlIGJhcnJpZXIgYm90aCBi ZWZvcmUgYW5kIGFsc28gYWZ0ZXIgdGhlCj4+Pj4+PiArICAgICAqIGNvdW50ZXIgdXBkYXRlIHRv IHN5bmNocm9uaXplIHdpdGggdGhlIG5leHQgdGltZXN0YW1wIHdyaXRlLgo+Pj4+Pj4gKyAgICAg KiBUaGUgcmVhZC1zaWRlIGJhcnJpZXJzIGZvciB0aGlzIGFyZSBpbiBkcm1fdmJsYW5rX2NvdW50 X2FuZF90aW1lLgo+Pj4+Pj4gKyAgICAgKi8KPj4+Pj4+ICsgICAgc21wX3dtYigpOwo+Pj4+Pj4g KyAgICB2YmxhbmstPmNvdW50ICs9IHZibGFua19jb3VudF9pbmM7Cj4+Pj4+PiArICAgIHNtcF93 bWIoKTsKPj4+Pj4KPj4+Pj4gVGhlIGNvbW1lbnQgYW5kIHRoZSBjb2RlIGFyZSBlYWNoIHNlbGYt Y29udHJhZGljdG9yeS4KPj4+Pj4KPj4+Pj4gSWYgdmJsYW5rLT5jb3VudCB3cml0ZXMgYXJlIGFs d2F5cyBwcm90ZWN0ZWQgYnkgdmJsYW5rX3RpbWVfbG9jayAoc29tZXRoaW5nIEkKPj4+Pj4gZGlk IG5vdCB2ZXJpZnkgYnV0IHRoYXQgdGhlIGNvbW1lbnQgYWJvdmUgYXNzZXJ0cyksIHRoZW4gdGhl IHRyYWlsaW5nIHdyaXRlCj4+Pj4+IGJhcnJpZXIgaXMgbm90IHJlcXVpcmVkIChhbmQgdGhlIGFz c2VydGlvbiB0aGF0IGl0IGlzIGluIHRoZSBjb21tZW50IGlzIGluY29ycmVjdCkuCj4+Pj4+Cj4+ Pj4+IEEgc3BpbiB1bmxvY2sgb3BlcmF0aW9uIGlzIGFsd2F5cyBhIHdyaXRlIGJhcnJpZXIuCj4+ Pj4KPj4+PiBIbSB5ZWFoLiBPdG9oIHRvIG1lIHRoYXQncyBib3JkZXJpbmcgb24gImNvZGUgdG9v IGNsZXZlciBmb3IgbXkgb3duIGdvb2QiLgo+Pj4+IFRoYXQgdGhlIHNwaW5sb2NrIGlzIGhlbGQg SSBjYW4gYXNzdXJlLiBUaGF0IG5vIG9uZSBnb2VzIGFyb3VuZCBhbmQgZG9lcwo+Pj4+IG11bHRp cGxlIHZibGFuayB1cGRhdGVzIChiZWNhdXNlIHNvbWVob3cgdGhhdCBjb2RlIHJhY2VkIHdpdGgg dGhlIGh3Cj4+Pj4gaXRzZWxmKSBJIGNhbid0IGVhc2lseSBhc3N1cmUgd2l0aCBhIHNpbXBsZSBh c3NlcnQgb3Igc29tZXRoaW5nIHNpbWlsYXIuCj4+Pj4gSXQncyBub3QgdGhlIGNhc2UgcmlnaHQg bm93LCBidXQgdGhhdCBjYW4gY2hhbmdlcy4KPj4+Cj4+PiBUaGUgYWxnb3JpdGhtIHdvdWxkIGJl IGJyb2tlbiBpZiBtdWx0aXBsZSB1cGRhdGVzIGZvciB0aGUgc2FtZSB2YmxhbmsKPj4+IGNvdW50 IHdlcmUgYWxsb3dlZDsgdGhhdCdzIHdoeSBpdCBjaGVja3MgdG8gc2VlIGlmIHRoZSB2Ymxhbmsg Y291bnQgaGFzCj4+PiBub3QgYWR2YW5jZWQgYmVmb3JlIHN0b3JpbmcgYSBuZXcgdGltZXN0YW1w Lgo+Pj4KPj4+IE90aGVyd2lzZSwgdGhlIHJlYWQgc2lkZSB3b3VsZCBub3QgYmUgYWJsZSB0byBk ZXRlcm1pbmUgdGhhdCB0aGUKPj4+IHRpbWVzdGFtcCBpcyB2YWxpZCBieSBkb3VibGUtY2hlY2tp bmcgdGhhdCB0aGUgdmJsYW5rIGNvdW50IGhhcyBub3QKPj4+IGNoYW5nZWQuCj4+Pgo+Pj4gQW5k IGJlc2lkZXMsIGV2ZW4gaWYgdGhlIGNvZGUgbG9vcGVkIHdpdGhvdXQgZHJvcHBpbmcgdGhlIHNw aW5sb2NrLAo+Pj4gdGhlIGNvcnJlY3Qgd3JpdGUgb3JkZXIgd291bGQgc3RpbGwgYmUgb2JzZXJ2 ZWQgYmVjYXVzZSBpdCB3b3VsZCBzdGlsbAo+Pj4gYmUgZXhlY3V0aW5nIG9uIHRoZSBzYW1lIGNw dS4KPj4+Cj4+PiBNeSBvYmplY3Rpb24gdG8gdGhlIHdyaXRlIG1lbW9yeSBiYXJyaWVyIGlzIG5v dCBhYm91dCBvcHRpbWl6YXRpb247Cj4+PiBpdCdzIGFib3V0IGNvcnJlY3QgY29kZS4KPj4KPj4g V2VsbCBkaWZmPTAgaXMgbm90IGFsbG93ZWQsIEkgZ3Vlc3MgSSBjb3VsZCBlbmZvcmNlIHRoaXMg d2l0aCBzb21lCj4+IFdBUk5fT04uIEFuZCBJIHN0aWxsIHRoaW5rIG15IHBvaW50IG9mIG5vbi1s b2NhbCBjb3JyZWN0bmVzcyBpcyBzb2xpZC4KPj4gV2l0aCB0aGUgc21wX3dtYigpIHJlbW92ZWQg dGhlIGZvbGxvd2luZyBzdGlsbCB3b3JrcyBjb3JyZWN0bHk6Cj4+Cj4+IHNwaW5fbG9jayh2Ymxh bmtfdGltZV9sb2NrKTsKPj4gc3RvcmVfdmJsYW5rKGRldiwgY3J0YywgMSwgdHMxKTsKPj4gc3Bp bl91bmxvY2sodmJsYW5rX3RpbWVfbG9jayk7Cj4+Cj4+IHNwaW5fbG9jayh2YmxhbmtfdGltZV9s b2NrKTsKPj4gc3RvcmVfdmJsYW5rKGRldiwgY3J0YywgMSwgdHMyKTsKPj4gc3Bpbl91bmxvY2so dmJsYW5rX3RpbWVfbG9jayk7Cj4+Cj4+IEJ1dCB3aXRoIHRoZSBzbXBfd21iKCk7IHJlbW92ZWQg dGhlIGZvbGxvd2luZyB3b3VsZCBiZSBicm9rZW46Cj4+Cj4+IHNwaW5fbG9jayh2YmxhbmtfdGlt ZV9sb2NrKTsKPj4gc3RvcmVfdmJsYW5rKGRldiwgY3J0YywgMSwgdHMxKTsKPj4gc3RvcmVfdmJs YW5rKGRldiwgY3J0YywgMSwgdHMyKTsKPj4gc3Bpbl91bmxvY2sodmJsYW5rX3RpbWVfbG9jayk7 Cj4+Cj4+IGJlY2F1c2UgdGhlIGNvbXBpbGVyL2NwdSBpcyBmcmVlIHRvIHJlb3JkZXIgdGhlIHN0 b3JlIGZvciB2YmxhbmstPmNvdW50Cj4+IF9haGVhZF8gb2YgdGhlIHN0b3JlIGZvciB0aGUgdGlt ZXN0YW1wLiBBbmQgdGhhdCB3b3VsZCB0cmljayByZWFkZXJzIGludG8KPj4gYmVsaWV2aW5nIHRo YXQgdGhleSBoYXZlIGEgdmFsaWQgdGltZXN0YW1wIHdoZW4gdGhleSBwb3RlbnRpYWxseSByYWNl ZC4KPj4KPj4gTm93IHlvdSdyZSBjb3JyZWN0IHRoYXQgcmlnaHQgbm93IHRoZXJlJ3Mgbm8gc3Vj aCB0aGluZyBnb2luZyBvbiwgYW5kIGl0J3MKPj4gdW5saWtlbHkgdG8gaGFwcGVuIChnaXZlbiB0 aGUgbmF0dXJlIG9mIHZibGFuayB1cGRhdGVzKS4gQnV0IG15IHBvaW50IGlzCj4+IHRoYXQgaWYg d2Ugb3B0aW1pemUgdGhpcyB0aGVuIHRoZSBjb3JyZWN0bmVzcyBjYW4ndCBiZSBwcm92ZW4gbG9j YWxseQo+PiBhbnltb3JlIGJ5IGp1c3QgbG9va2luZyBhdCBzdG9yZV92YmxhbmssIGJ1dCBpbnN0 ZWFkIHlvdSBtdXN0IGF1ZGl0IGFsbAo+PiB0aGUgY2FsbGVycy4gQW5kIGxlYWtpbmcgbG9ja2lu Zy9iYXJyaWVycyBsaWtlIHRoYXQgaXMgdG9vIGZyYWdpbGUgZGVzaWduCj4+IGZvciBteSB0YXN0 ZS4KPj4KPj4gQnV0IHlvdSBpbnNpc3QgdGhhdCBteSBhcHByb2FjaCBpcyBicm9rZW4gc29tZWhv dyBhbmQgZHJvcHBpbmcgdGhlIHNtcF93bWIKPj4gaXMgbmVlZGVkIGZvciBjb3JyZWN0bmVzcy4g SSBkb24ndCBzZWUgaG93IHRoYXQncyB0aGUgY2FzZSBhdCBhbGwuCgpEYW5pZWwsCgpJJ3ZlIGJl ZW4gcmVhbGx5IGJ1c3kgdGhpcyBsYXN0IHdlZWs7IG15IGFwb2xvZ2llcyBmb3Igbm90IHJlcGx5 aW5nIHByb21wdGx5LgoKPiBGd2l3LCBpIHNwZW50IHNvbWUgdGltZSByZWVkdWNhdGluZyBteXNl bGYgYWJvdXQgbWVtb3J5IGJhcnJpZXJzICh0aGFua3MgZm9yIHlvdXIgZXhwbGFuYXRpb25zKSBh bmQgdGhpbmtpbmcgYWJvdXQgdGhpcywgYW5kIHRoZSBsYXN0IHZlcnNpb24gb2YgeW91ciBwYXRj aCBsb29rcyBnb29kIHRvIG1lLiBJdCBhbHNvIG1ha2VzIHNlbnNlIHRvIG1lIHRvIGxlYXZlIHRo YXQgbGFzdCBzbWJfd21iKCkgaW4gcGxhY2UgdG8gbWFrZSBmdXR1cmUgdXNlIG9mIHRoZSBoZWxw ZXIgcm9idXN0IC0gZm9yIG5vbi1sb2NhbCBjb3JyZWN0bmVzcywgdG8gYXZvaWQgaGF2aW5nIHRv IGF1ZGl0IGFsbCBmdXR1cmUgY2FsbGVycyBvZiB0aGF0IGhlbHBlci4KCk15IGNvbmNlcm4gd3J0 IHRvIHVubmVjZXNzYXJ5IGJhcnJpZXJzIGluIHRoaXMgYWxnb3JpdGhtIGlzIHRoYXQgdGhlIHRy YWlsaW5nCmJhcnJpZXIgbm93IGFwcGVhcnMgbWFuZGF0b3J5LCB3aGVuIGluIGZhY3QgaXQgaXMg bm90LgoKTW9yZW92ZXIsIHRoaXMgYWxnb3JpdGhtIGlzLCBpbiBnZW5lcmFsLCBmcmFnaWxlIGFu ZCBub3QgZGVzaWduZWQgdG8gaGFuZGxlCnJhbmRvbSBvciBwb29ybHktcmVzZWFyY2hlZCBjaGFu Z2VzLgoKRm9yIGV4YW1wbGUsIGlmIG9ubHkgdGhlIHJlYWQgYW5kIHN0b3JlIG9wZXJhdGlvbnMg YXJlIGNvbnNpZGVyZWQsIGl0J3Mgb2J2aW91c2x5CnVuc2FmZSwgc2luY2UgYSByZWFkIG1heSB1 bndpdHRpbmdseSByZXRyaWV2ZSBhbiBzdG9yZSBpbiBwcm9ncmVzcy4KCgpDUFUgMCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDUFUgMQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZibGFu ay0+Y291bnQgPT0gMCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fApkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1lKCkgICAgICAgICAgICAgfCBzdG9yZV92Ymxhbmso Li4sIGluYyA9IDIsIC4uLikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKICBjdXJfdmJsYW5rIDw9IExPQUQgdmJsYW5rLT5jb3VudCAgICAgIHwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB0c2xvdCA9IHZibGFuay0+Y291bnQgKyAy CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgLyogdHNsb3QgPT0g MiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIFNUT1JFIHZi bGFua3RpbWVbMF0KICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSBz bXBfd21iKCkgLSAtIC0gLSAtIC0gLSAtIC0gLQogIC8qIGN1cl92YmxhbmsgPT0gMCAqLyAgICAg ICAgICAgICAgICAgfAogIGxvY2FsIDw9IExPQUQgdmJsYW5rdGltZVswXSAgICAgICAgICAgfAog IHNtcF9ybWIgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fAogKiBjcHUgaGFzIGxvYWRlZCB0aGUgd3JvbmcgdGltZXN0YW1wICogfAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogIGxvY2FsIDw9IExPQUQgdmJsYW5rLT5jb3Vu dCAgICAgICAgICAgfAogIGN1cl92YmxhbmsgPT0gbG9jYWw/ICAgICAgICAgICAgICAgICAgfAog IHllcyAtIGV4aXQgbG9vcCAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHZibGFuay0+Y291bnQgKz0gMgogIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIHNtcF93bWIoKSAtIC0gLSAtIC0gLSAt IC0gLSAtCgpSZWdhcmRzLApQZXRlciBIdXJsZXkKCgo+IEkgYWxzbyB0ZXN0ZWQgeW91ciBwYXRj aCArIGEgc2xpZ2h0bHkgbW9kaWZpZWQgdmVyc2lvbiBvZiBDaHJpcyB2YmxhbmsgZGVsYXllZCBk aXNhYmxlIC8gaW5zdGFudCBxdWVyeSBwYXRjaGVzICsgbXkgZml4ZXMgdXNpbmcgbXkgb3duIHN0 cmVzcyB0ZXN0cyBhbmQgaGFyZHdhcmUgdGltaW5nIHRlc3QgZXF1aXBtZW50IG9uIGJvdGggaW50 ZWwgYW5kIG5vdXZlYXUsIGFuZCBldmVyeXRoaW5nIHNlZW1zIHRvIHdvcmsgZmluZS4KPgo+IFNv IGknbSBhbGwgZm9yIGluY2x1ZGluZyB0aGlzIHBhdGNoIGFuZCBpdCBoYXMgbXkKPiAKPiBSZXZp ZXdlZC1hbmQtdGVzdGVkLWJ5OiBNYXJpbyBLbGVpbmVyIDxtYXJpby5rbGVpbmVyLmRlQGdtYWls LmNvbT4KPiAKPiBJIGp1c3Qgc2VudCBvdXQgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIG15IHBhdGNo ZXMsIHNvIHRoZXkgZG9uJ3QgY29uZmxpY3Qgd2l0aCB0aGlzIG9uZSBhbmQgYWxzbyBmaXggYSBj b21waWxlIGZhaWx1cmUgb2YgZHJtL3F4bCB3aXRoIHlvdXJzLgo+IAo+IFRoYW5rcywKPiAtbWFy aW8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==