From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 19/38] drm/hisilicon: Implement some semblance of vblank event handling Date: Fri, 17 Jun 2016 14:24:49 +0200 Message-ID: <20160617122449.GL23520@phenom.ffwll.local> References: <1464818821-5736-1-git-send-email-daniel.vetter@ffwll.ch> <1464818821-5736-20-git-send-email-daniel.vetter@ffwll.ch> <20160617072358.GH23520@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7DFEF6E367 for ; Fri, 17 Jun 2016 12:24:54 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id 187so16350221wmz.1 for ; Fri, 17 Jun 2016 05:24:54 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Xinliang Liu Cc: Archit Taneja , Daniel Vetter , Intel Graphics Development , DRI Development , Xinwei Kong , Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKdW4gMTcsIDIwMTYgYXQgMDQ6Mzg6MDZQTSArMDgwMCwgWGlubGlhbmcgTGl1IHdy b3RlOgo+IEhpLAo+IAo+IE9uIDE3IEp1bmUgMjAxNiBhdCAxNToyMywgRGFuaWVsIFZldHRlciA8 ZGFuaWVsQGZmd2xsLmNoPiB3cm90ZToKPiA+IE9uIEZyaSwgSnVuIDE3LCAyMDE2IGF0IDEwOjA5 OjUwQU0gKzA4MDAsIFhpbmxpYW5nIExpdSB3cm90ZToKPiA+PiBIaSBEYW5pZWwsCj4gPj4KPiA+ PiBJIGhhdmUgdGVzdGVkIHlvdXIgRGF2aWQncyBkcm0tbmV4dCBicmFuY2hbMV0gd2hpY2ggaW5j bHVkaW5nIHRoaXMgcGF0Y2guCj4gPj4gSW4gbW9zdCB0aW1lIGl0IGlzIG9rLiBCdXQgd2hlbiBz d2l0Y2hpbmcgbW9kZXMgb3IgZGlzYWJsZS9yZS1lbmFibGUKPiA+PiBtb2RlLCBpdCB3aWxsIGVu Y291bnRlciBiZWxsb3cgZXJyb3IgbXNnOgo+ID4+IC0tCj4gPj4gWyAgMzU3Ljk0MDcyOF0gW2Ry bTpkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfY2xlYW51cF9kb25lXSAqRVJST1IqCj4gPj4gW0NS VEM6MjQ6Y3J0Yy0wXSBmbGlwX2RvbmUgdGltZWQgb3V0Cj4gPj4gWyAgMzY4LjAwNDk2Ml0gW2Ry bTpkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfY2xlYW51cF9kb25lXSAqRVJST1IqCj4gPj4gW0NS VEM6MjQ6Y3J0Yy0wXSBmbGlwX2RvbmUgdGltZWQgb3V0Cj4gPj4gWyAgMzk2LjA2NDg3MV0gSU5G TzogcmN1X3ByZWVtcHQgZGV0ZWN0ZWQgc3RhbGxzIG9uIENQVXMvdGFza3M6Cj4gPj4gWyAgMzk2 LjA3MDU0OF0gIDAtLi4uOiAoMyBHUHMgYmVoaW5kKSBpZGxlPWY0Zi8xLzAgc29mdGlycT00MjUz LzQyNTMgZnFzPTE5Cj4gPj4gWyAgMzk2LjA3NzMzNV0gIDctLi4uOiAoMSBHUHMgYmVoaW5kKSBp ZGxlPTcxZi8xNDAwMDAwMDAwMDAwMDAvMAo+ID4+IHNvZnRpcnE9MjQ0NC8yNDUxIGZxcz0xOQo+ ID4+IFsgIDM5Ni4wODUzMzJdICAoZGV0ZWN0ZWQgYnkgMSwgdD02MDI4IGppZmZpZXMsIGc9Mzky NCwgYz0zOTIzLCBxPTI0NikKPiA+PiBbICAzOTYuMDkxNjAwXSBUYXNrIGR1bXAgZm9yIENQVSAw Ogo+ID4+IFsgIDM5Ni4wOTQ4MjFdIHN3YXBwZXIvMCAgICAgICBSICBydW5uaW5nIHRhc2sgICAg ICAgIDAgICAgIDAgICAgICAwIDB4MDAwMDAwMDIKPiA+PiBbICAzOTYuMTAxODcyXSBDYWxsIHRy YWNlOgo+ID4+IFsgIDM5Ni4xMDQzMjNdIFs8ZmZmZjAwMDAwODA4NWJlYz5dIF9fc3dpdGNoX3Rv KzB4YTQvMHhkNAo+ID4+IFsgIDM5Ni4xMDk0NjBdIFs8ZmZmZjAwMDAwOGM4NTAwMD5dIF9fYm9v dF9jcHVfbW9kZSsweDAvMHg4MAo+ID4+IFsgIDM5Ni4xMTQ4NTJdIFRhc2sgZHVtcCBmb3IgQ1BV IDc6Cj4gPj4gWyAgMzk2LjExODA3Ml0gWG9yZyAgICAgICAgICAgIFIgIHJ1bm5pbmcgdGFzayAg ICAgICAgMCAgMTY1OCAgIDE2NDYgMHgwMDAwMDAwMgo+ID4+IFsgIDM5Ni4xMjUxMjFdIENhbGwg dHJhY2U6Cj4gPj4gWyAgMzk2LjEyNzU2Ml0gWzxmZmZmMDAwMDA4MDg1YzEwPl0gX19zd2l0Y2hf dG8rMHhjOC8weGQ0Cj4gPj4gWyAgMzk2LjEzMjY5NV0gWzxmZmZmODAwMDM1NTY3MTEwPl0gMHhm ZmZmODAwMDM1NTY3MTEwCj4gPj4gWyAgMzk2LjEzNzU2OV0gcmN1X3ByZWVtcHQga3RocmVhZCBz dGFydmVkIGZvciAxMDAwIGppZmZpZXMhIGczOTI0Cj4gPj4gYzM5MjMgZjB4MCBSQ1VfR1BfV0FJ VF9GUVMoMykgLT5zdGF0ZT0weDEKPiA+PiBbICAzOTYuMTQ3MTMwXSByY3VfcHJlZW1wdCAgICAg UyBmZmZmMDAwMDA4MDg1YzEwICAgICAwICAgICA3ICAgICAgMiAweDAwMDAwMDAwCj4gPj4gWyAg Mzk2LjE1NDE4MF0gQ2FsbCB0cmFjZToKPiA+PiBbICAzOTYuMTU2NjIwXSBbPGZmZmYwMDAwMDgw ODVjMTA+XSBfX3N3aXRjaF90bysweGM4LzB4ZDQKPiA+PiBbICAzOTYuMTYxNzU4XSBbPGZmZmYw MDAwMDg4MTA0OTA+XSBfX3NjaGVkdWxlKzB4MTg4LzB4NTkwCj4gPj4gWyAgMzk2LjE2Njk3OF0g WzxmZmZmMDAwMDA4ODEwOGQ0Pl0gc2NoZWR1bGUrMHgzYy8weGEwCj4gPj4gWyAgMzk2LjE3MTg1 MV0gWzxmZmZmMDAwMDA4ODEzNjhjPl0gc2NoZWR1bGVfdGltZW91dCsweDEwNC8weDFhNAo+ID4+ IFsgIDM5Ni4xNzc1OTVdIFs8ZmZmZjAwMDAwODEwNTQ5Yz5dIHJjdV9ncF9rdGhyZWFkKzB4NTRj LzB4ODE0Cj4gPj4gWyAgMzk2LjE4MzE2NF0gWzxmZmZmMDAwMDA4MGQzZTVjPl0ga3RocmVhZCsw eGQ0LzB4ZTgKPiA+PiBbICAzOTYuMTg3OTUxXSBbPGZmZmYwMDAwMDgwODRlMTA+XSByZXRfZnJv bV9mb3JrKzB4MTAvMHg0MAo+ID4+IC0tCj4gPj4KPiA+PiBUaGVuIHRoZSBjb25zb2xlIHN0dWNr LiBBbnkgdGlwcyBmb3IgYWRkcmVzc2luZyB0aGlzIGlzc3VlPwo+ID4+IEkgYW0gcnVubmluZyBh IGRlYmlhbiBzeXN0ZW0uCj4gPj4KPiA+PiBbMV0gZ2l0Oi8vcGVvcGxlLmZyZWVkZXNrdG9wLm9y Zy9+YWlybGllZC9saW51eCBkcm0tbmV4dAo+ID4KPiA+IGhpc2lsaWNvbiBkb2Vzbid0IGhhbmRs ZSBjcnRjX3N0YXRlLT5ldmVudCBjb3JyZWN0bHkuIE1vc3QgbGlrZWx5IHdoZW4KPiA+IHNodXR0 aW5nIGRvd24gYSBDUlRDIGlmIGZhaWxzIHRvIHNlbmQgb3V0IHRoYXQgZmxpcCBldmVudCwgd2hp Y2ggbWVhbnMgdGhlCj4gPiB3YWl0aW5nIGZvciBmbGlwX2RvbmUgdGltZXMgb3V0LiBNeSBwYXRj aCB0cmllZCB0byBmaXggdGhhdCAoaXQncyBub3QKPiA+IGNvcnJlY3QsIGJ1dCBpdCBkaWQgd29y ayBvbiBvdGhlciBkcml2ZXJzKS4KPiA+Cj4gPiBGcm9tIGEgcXVpY2sgbG9vayB3aGF0J3Mgd3Jv bmcgd2l0aCBoaXNpbGljb24gdmJsYW5rIGhhbmRsaW5nOgo+ID4gLSBZb3UgZG9uJ3QgY2FsbCBk cm1fY3J0Y192Ymxhbmtfb24vb2ZmLCB3aGljaCBtZWFucyB0aGUgY29yZSB0aGlua3MKPiA+ICAg dmJsYW5rcyB3aWxsIGtlZXAgd29ya2luZyBldmVuIHdoZW4gdGhlIENSVEMgaXMgb2ZmLiBUaGF0 IHRocm93cyBvZmYgdGhlCj4gPiAgIGhhY2sgaW4gbXkgcGF0Y2guIFlvdSBuZWVkIHRvIHB1dCBh IGNhbGwgdG8gZHJtX2NydGNfdmJsYW5rX29mZiBpbnRvCj4gPiAgIGNydGMtPmRpc2FibGUgaG9v aywgYW5kIGRybV9jcnRjX3ZibGFua19vbiBpbnRvIGNydGMtPmVuYWJsZS4KPiAKPiBZZXMsIHRo aXMgaXMgcmVhbGx5IGEgcHJvYmxlbS4gSSB3aWxsIGFkZCBkcm1fY3J0Y192Ymxhbmtfb24vb2Zm IGludG8KPiAgY3J0Yy0+ZGlzYWJsZS9lbmFibGUgaG9vay4KPiBBbmQgdHJ5Lgo+IAo+ID4KPiA+ IC0gV2hpbGUgYXQgaXQgcGxlYXNlIHJldmlldyB0aGF0IHRoZSBldmVudCBzZW5kaW5nIGlzIHBs YWNlZCBjb3JyZWN0bHkgYW5kCj4gPiAgIGNhbid0IHJhY2Ugd2l0aCB0aGUgbmV3IGJ1ZmZlcnMg c2hvd2luZyB1cCBvbiB0aGUgc2NyZWVuLiBUaGUgZXZlbnQKPiA+ICAgc2hvdWxkIGJlIHNpZ25h bGxlZCBhdCBleGFjdGx5IHRoZSB0aW1lIHRoZSBidWZmZXJzIHN0YXJ0IHRvIGdldCBzY2FubmVk Cj4gPiAgIG91dC4gVGhlIGltcG9ydGFudCBiaXQgaXMgdG8gbWFrZSBzdXJlIHRoYXQgZXZlbiBp ZiBzb21ldGhpbmcgcmFjZXMgb3IKPiA+ICAgZ2V0cyBkZWxheWVkIHRoYXQgaXQgc3RpbGwgaGFw cGVucyB0b2dldGhlci4KPiAKPiBPdXIgZGlzcGxheSBjb250cm9sbGVyIGhhcyBhIGludGVycnVw dCB0byBpbmRpY2F0ZSB0aGF0ICBvbmUKPiBjb21taXQvZmxpcCBpcyB0YWtlbiBlZmZlY3QgaW4g aGFyZHdhcmUuCj4gU2hvdWxkIEkgcHV0IHRoZSBzZW5kaW5nIGV2ZW50IGluIHRoaXMgaW50ZXJy dXB0IGhhbmRsZXI/CgpZZXMsIHRoYXQgd291bGQgYmUgcGVyZmVjdC4gU28gaW5zdGVhZCBvZiB0 aGUgZHJtX2NydGNfYXJtX3ZibGFua19ldmVudAp5b3UgcHV0IHRoZSBldmVudCBpbnRvIGEgZHJp dmVyLXByaXZhdGUgc2xvdCB3aGVyZSB0aGUgaXJxIGhhbmRsZXIgY2FuCnBpY2sgaXQgdXAgYW5k IHNlbmQgaXQgb3V0IHVzaW5nIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50LgoKVHdvIGltcG9y dGFudCBkZXRhaWxzOgotIFlvdSBuZWVkIHRvIGFybSB0aGUgZXZlbnQgdGhpcyB3YXkgYmVmb3Jl IHRoZSBodyBjYW4gZmlyZSB0aGlzIHNwZWNpYWwKICBpbnRlcnJ1cHQsIHNvIHByb2JhYmx5IHNv bWV3aGVyZSBpbiBhdG9taWNfYmVnaW4uCi0gdGhlIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50 IG11c3QgYmUgY2FsbGVkIGFmdGVyCiAgZHJtX2NydGNfaGFuZGxlX3ZibGFuaywgYmVjYXVzZSBv dGhlcndpc2UgdGhlIHZibGFuayB0aW1lc3RhbXAgaXNuJ3QKICBwcm9wZXJseSB1cGRhdGVkLgoK Q2hlZXJzLCBEYW5pZWwKCj4gCj4gVGhhbmtzLAo+IC14aW5saWFuZwo+IAo+ID4KPiA+IENoZWVy cywgRGFuaWVsCj4gPj4KPiA+PiBUaGFua3MsCj4gPj4gLXhpbmxpYW5nCj4gPj4KPiA+PiBPbiAy IEp1bmUgMjAxNiBhdCAwNjowNiwgRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5j aD4gd3JvdGU6Cj4gPj4gPiBhdG9taWNfZmx1c2ggc2VlbXMgdG8gYmUgdGhlIHJpZ2h0IHBsYWNl LCBidXQgSSdtIG5vdCBlbnRpcmVseSBzdXJlCj4gPj4gPiB3aGV0aGVyIHRoaXMgd2lsbCBjYXRj aCB0aGVtIGFsbC4gSXQgY291bGQgYmUgdGhhdCB3aGVuIGRpc2FibGluZyB0aGUKPiA+PiA+IGNy dGMgd2UnbGwgbWlzcyB0aGUgdmJsYW5rLgo+ID4+ID4KPiA+PiA+IFdoaWxlIGF0IGl0IG51a2Ug dGhlIGR1bW15IGZ1bmN0aW9ucy4KPiA+PiA+Cj4gPj4gPiB2MjogQmUgbW9yZSByb2J1c3QgYW5k IGVpdGhlciBhcm0sIHdoZW4gdGhlIENSVEMgaXMgb24sIG9yIGp1c3Qgc2VuZAo+ID4+ID4gdGhl IGV2ZW50IG91dCByaWdodCBhd2F5Lgo+ID4+ID4KPiA+PiA+IENjOiBYaW5saWFuZyBMaXUgPHhp bmxpYW5nLmxpdUBsaW5hcm8ub3JnPgo+ID4+ID4gQ2M6IFhpbndlaSBLb25nIDxrb25nLmtvbmd4 aW53ZWlAaGlzaWxpY29uLmNvbT4KPiA+PiA+IENjOiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNv ZGVhdXJvcmEub3JnPgo+ID4+ID4gU2lnbmVkLW9mZi1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVs LnZldHRlckBpbnRlbC5jb20+Cj4gPj4KPiA+PiBBY2tlZC1ieTogWGlubGlhbmcgTGl1IDx4aW5s aWFuZy5saXVAbGluYXJvLm9yZz4KPiA+Pgo+ID4+ID4gLS0tCj4gPj4gPiAgZHJpdmVycy9ncHUv ZHJtL2hpc2lsaWNvbi9raXJpbi9raXJpbl9kcm1fYWRlLmMgfCAyMCArKysrKysrKysrKystLS0t LS0tLQo+ID4+ID4gIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9u cygtKQo+ID4+ID4KPiA+PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29u L2tpcmluL2tpcmluX2RybV9hZGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24va2lyaW4v a2lyaW5fZHJtX2FkZS5jCj4gPj4gPiBpbmRleCBmYmE2MzcyZDA2MGUuLmVkNzZiYWFkNTI1ZiAx MDA2NDQKPiA+PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24va2lyaW4va2lyaW5f ZHJtX2FkZS5jCj4gPj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2tpcmluL2tp cmluX2RybV9hZGUuYwo+ID4+ID4gQEAgLTUwMiwxMyArNTAyLDYgQEAgc3RhdGljIHZvaWQgYWRl X2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPj4gPiAgICAgICAgIGFjcnRj LT5lbmFibGUgPSBmYWxzZTsKPiA+PiA+ICB9Cj4gPj4gPgo+ID4+ID4gLXN0YXRpYyBpbnQgYWRl X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+PiA+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCj4g Pj4gPiAtewo+ID4+ID4gLSAgICAgICAvKiBkbyBub3RoaW5nICovCj4gPj4gPiAtICAgICAgIHJl dHVybiAwOwo+ID4+ID4gLX0KPiA+PiA+IC0KPiA+PiA+ICBzdGF0aWMgdm9pZCBhZGVfY3J0Y19t b2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+PiA+ICB7Cj4gPj4gPiAgICAg ICAgIHN0cnVjdCBhZGVfY3J0YyAqYWNydGMgPSB0b19hZGVfY3J0YyhjcnRjKTsKPiA+PiA+IEBA IC01MzcsNiArNTMwLDcgQEAgc3RhdGljIHZvaWQgYWRlX2NydGNfYXRvbWljX2ZsdXNoKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKPiA+PiA+ICB7Cj4gPj4gPiAgICAgICAgIHN0cnVjdCBhZGVfY3J0 YyAqYWNydGMgPSB0b19hZGVfY3J0YyhjcnRjKTsKPiA+PiA+ICAgICAgICAgc3RydWN0IGFkZV9o d19jdHggKmN0eCA9IGFjcnRjLT5jdHg7Cj4gPj4gPiArICAgICAgIHN0cnVjdCBkcm1fcGVuZGlu Z192YmxhbmtfZXZlbnQgKmV2ZW50ID0gY3J0Yy0+c3RhdGUtPmV2ZW50Owo+ID4+ID4gICAgICAg ICB2b2lkIF9faW9tZW0gKmJhc2UgPSBjdHgtPmJhc2U7Cj4gPj4gPgo+ID4+ID4gICAgICAgICAv KiBvbmx5IGNydGMgaXMgZW5hYmxlZCByZWdzIHRha2UgZWZmZWN0ICovCj4gPj4gPiBAQCAtNTQ1 LDEyICs1MzksMjIgQEAgc3RhdGljIHZvaWQgYWRlX2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKPiA+PiA+ICAgICAgICAgICAgICAgICAvKiBmbHVzaCBhZGUgcmVnaXN0 ZXJzICovCj4gPj4gPiAgICAgICAgICAgICAgICAgd3JpdGVsKEFERV9FTkFCTEUsIGJhc2UgKyBB REVfRU4pOwo+ID4+ID4gICAgICAgICB9Cj4gPj4gPiArCj4gPj4gPiArICAgICAgIGlmIChldmVu dCkgewo+ID4+ID4gKyAgICAgICAgICAgICAgIGNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7Cj4g Pj4gPiArCj4gPj4gPiArICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5l dmVudF9sb2NrKTsKPiA+PiA+ICsgICAgICAgICAgICAgICBpZiAoZHJtX2NydGNfdmJsYW5rX2dl dChjcnRjKSA9PSAwKQo+ID4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZHJtX2NydGNfYXJt X3ZibGFua19ldmVudChjcnRjLCBldmVudCk7Cj4gPj4gPiArICAgICAgICAgICAgICAgZWxzZQo+ ID4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQo Y3J0YywgZXZlbnQpOwo+ID4+ID4gKyAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmY3J0 Yy0+ZGV2LT5ldmVudF9sb2NrKTsKPiA+PiA+ICsgICAgICAgfQo+ID4+ID4gIH0KPiA+PiA+Cj4g Pj4gPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgYWRlX2NydGNf aGVscGVyX2Z1bmNzID0gewo+ID4+ID4gICAgICAgICAuZW5hYmxlICAgICAgICAgPSBhZGVfY3J0 Y19lbmFibGUsCj4gPj4gPiAgICAgICAgIC5kaXNhYmxlICAgICAgICA9IGFkZV9jcnRjX2Rpc2Fi bGUsCj4gPj4gPiAtICAgICAgIC5hdG9taWNfY2hlY2sgICA9IGFkZV9jcnRjX2F0b21pY19jaGVj aywKPiA+PiA+ICAgICAgICAgLm1vZGVfc2V0X25vZmIgID0gYWRlX2NydGNfbW9kZV9zZXRfbm9m YiwKPiA+PiA+ICAgICAgICAgLmF0b21pY19iZWdpbiAgID0gYWRlX2NydGNfYXRvbWljX2JlZ2lu LAo+ID4+ID4gICAgICAgICAuYXRvbWljX2ZsdXNoICAgPSBhZGVfY3J0Y19hdG9taWNfZmx1c2gs Cj4gPj4gPiAtLQo+ID4+ID4gMi44LjEKPiA+PiA+Cj4gPgo+ID4gLS0KPiA+IERhbmllbCBWZXR0 ZXIKPiA+IFNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gaHR0cDovL2Js b2cuZmZ3bGwuY2gKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBD b3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK