From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael H. Nguyen" Subject: Re: [PATCH v6 5/5] drm/i915: Tidy up execbuffer command parsing code Date: Tue, 09 Dec 2014 13:35:23 -0800 Message-ID: <54876B1B.90604@intel.com> References: <1418078030-17690-1-git-send-email-michael.h.nguyen@intel.com> <1418078030-17690-6-git-send-email-michael.h.nguyen@intel.com> <20141209132258.GX27182@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 75D5B6E512 for ; Tue, 9 Dec 2014 13:31:18 -0800 (PST) In-Reply-To: <20141209132258.GX27182@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: Brad Volkin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CgpPbiAxMi8wOS8yMDE0IDA1OjIyIEFNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+IE9uIE1vbiwg RGVjIDA4LCAyMDE0IGF0IDAyOjMzOjUwUE0gLTA4MDAsIG1pY2hhZWwuaC5uZ3V5ZW5AaW50ZWwu Y29tIHdyb3RlOgo+PiBGcm9tOiBCcmFkIFZvbGtpbiA8YnJhZGxleS5kLnZvbGtpbkBpbnRlbC5j b20+Cj4+Cj4+IE1vdmUgaXQgdG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzaW5jZSB0aGUgbWFpbiBk b19leGVjYnVmZmVyIGZ1bmN0aW9uCj4+IGFscmVhZHkgaGFzIHNvIG11Y2ggZ29pbmcgb24uCj4+ Cj4+IHYyOgo+PiAtIE1vdmUgcGluL3VucGluIGNhbGxzIGluc2lkZSBpOTE1X3BhcnNlX2NtZHMo KSAoQ2hyaXMgVywgdjQgNy83Cj4+ICAgIGZlZWRiYWNrKQo+Pgo+PiBJc3N1ZTogVklaLTQ3MTkK Pj4gU2lnbmVkLW9mZi1ieTogQnJhZCBWb2xraW4gPGJyYWRsZXkuZC52b2xraW5AaW50ZWwuY29t Pgo+Pgo+PiBDb25mbGljdHM6Cj4+IAlkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVj YnVmZmVyLmMKPgo+IFBsZWFzZSByZW1vdmUgdGhvc2Ugd2hlbiByZWJhc2luZy4gV2hlbiBhY3R1 YWxseSBzb21ldGhpbmcgY2hhbmdlZCBwbGVhc2UKPiBtZW50aW9uIHRoYXQgaW4gdGhlIHBhdGNo IHJldmxvZywgZS5nLgo+Cj4gdjM6IFJlYmFzZSAoY29uZmxpY3RzIHdpdGggcGF0Y2ggImZvbyIg aW4gZXhlY2J1ZiBjb2RlKS4KPgo+IEJ1dCBpZiBpdCdzIGEgYm9yaW5nIHJlYmFzZSB3aXRob3V0 IGFueSBmdW5jdGlvbmFsIGNvbmZsaWN0cyBJIHdvdWxkbid0Cj4gYm90aGVyIHdpdGggYSBjaGFu Z2Vsb2cgZW50cnkuCk5vdGVkLiBJbiB0aGlzIGNhc2UsIGl0cyBib3JpbmcuCgpUaGFua3MsCk1p a2UKPiAtRGFuaWVsCj4KPj4gLS0tCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRf cGFyc2VyLmMgICAgIHwgICA4ICsrCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f ZXhlY2J1ZmZlci5jIHwgMTI2ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCj4+ICAgMiBm aWxlcyBjaGFuZ2VkLCA3NyBpbnNlcnRpb25zKCspLCA1NyBkZWxldGlvbnMoLSkKPj4KPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfY21kX3BhcnNlci5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMKPj4gaW5kZXggMTE4MDc5ZC4uODBiMWIy OCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMK Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMKPj4gQEAgLTEw NDIsMTAgKzEwNDIsMTcgQEAgaW50IGk5MTVfcGFyc2VfY21kcyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nLAo+PiAgIAlzdHJ1Y3QgZHJtX2k5MTVfY21kX2Rlc2NyaXB0b3IgZGVmYXVsdF9k ZXNjID0geyAwIH07Cj4+ICAgCWJvb2wgb2Fjb250cm9sX3NldCA9IGZhbHNlOyAvKiBPQUNPTlRS T0wgdHJhY2tpbmcuIFNlZSBjaGVja19jbWQoKSAqLwo+Pgo+PiArCXJldCA9IGk5MTVfZ2VtX29i al9nZ3R0X3BpbihzaGFkb3dfYmF0Y2hfb2JqLCA0MDk2LCAwKTsKPj4gKwlpZiAocmV0KSB7Cj4+ ICsJCURSTV9ERUJVR19EUklWRVIoIkNNRDogRmFpbGVkIHRvIHBpbiBzaGFkb3cgYmF0Y2hcbiIp Owo+PiArCQlyZXR1cm4gLTE7Cj4+ICsJfQo+PiArCj4+ICAgCWJhdGNoX2Jhc2UgPSBjb3B5X2Jh dGNoKHNoYWRvd19iYXRjaF9vYmosIGJhdGNoX29iaiwKPj4gICAJCQkJYmF0Y2hfc3RhcnRfb2Zm c2V0LCBiYXRjaF9sZW4pOwo+PiAgIAlpZiAoSVNfRVJSKGJhdGNoX2Jhc2UpKSB7Cj4+ICAgCQlE Uk1fREVCVUdfRFJJVkVSKCJDTUQ6IEZhaWxlZCB0byBjb3B5IGJhdGNoXG4iKTsKPj4gKwkJaTkx NV9nZW1fb2JqZWN0X2dndHRfdW5waW4oc2hhZG93X2JhdGNoX29iaik7Cj4+ICAgCQlyZXR1cm4g UFRSX0VSUihiYXRjaF9iYXNlKTsKPj4gICAJfQo+Pgo+PiBAQCAtMTExNiw2ICsxMTIzLDcgQEAg aW50IGk5MTVfcGFyc2VfY21kcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+PiAgIAl9 Cj4+Cj4+ICAgCXZ1bm1hcChiYXRjaF9iYXNlKTsKPj4gKwlpOTE1X2dlbV9vYmplY3RfZ2d0dF91 bnBpbihzaGFkb3dfYmF0Y2hfb2JqKTsKPj4KPj4gICAJcmV0dXJuIHJldDsKPj4gICB9Cj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPj4gaW5kZXggMjA3MTkz OC4uM2QzNjQ2NSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f ZXhlY2J1ZmZlci5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNi dWZmZXIuYwo+PiBAQCAtMTA2OSw2ICsxMDY5LDY1IEBAIGk5MTVfZW1pdF9ib3goc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqcmluZywKPj4gICAJcmV0dXJuIDA7Cj4+ICAgfQo+Pgo+PiArc3RhdGlj IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0Kgo+PiAraTkxNV9nZW1fZXhlY2J1ZmZlcl9wYXJz ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+PiArCQkJICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiAqc2hhZG93X2V4ZWNfZW50cnksCj4+ICsJCQkgIHN0cnVjdCBlYl92 bWFzICplYiwKPj4gKwkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJhdGNoX29iaiwK Pj4gKwkJCSAgdTMyIGJhdGNoX3N0YXJ0X29mZnNldCwKPj4gKwkJCSAgdTMyIGJhdGNoX2xlbiwK Pj4gKwkJCSAgYm9vbCBpc19tYXN0ZXIsCj4+ICsJCQkgIHUzMiAqZmxhZ3MpCj4+ICt7Cj4+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShiYXRjaF9vYmotPmJh c2UuZGV2KTsKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqc2hhZG93X2JhdGNoX29i ajsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJc2hhZG93X2JhdGNoX29iaiA9IGk5MTVfZ2VtX2Jh dGNoX3Bvb2xfZ2V0KCZkZXZfcHJpdi0+bW0uYmF0Y2hfcG9vbCwKPj4gKwkJCQkJCSAgIGJhdGNo X29iai0+YmFzZS5zaXplKTsKPj4gKwlpZiAoSVNfRVJSKHNoYWRvd19iYXRjaF9vYmopKQo+PiAr CQlyZXR1cm4gc2hhZG93X2JhdGNoX29iajsKPj4gKwo+PiArCXJldCA9IGk5MTVfcGFyc2VfY21k cyhyaW5nLAo+PiArCQkJICAgICAgYmF0Y2hfb2JqLAo+PiArCQkJICAgICAgc2hhZG93X2JhdGNo X29iaiwKPj4gKwkJCSAgICAgIGJhdGNoX3N0YXJ0X29mZnNldCwKPj4gKwkJCSAgICAgIGJhdGNo X2xlbiwKPj4gKwkJCSAgICAgIGlzX21hc3Rlcik7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlpZiAo cmV0ID09IC1FQUNDRVMpCj4+ICsJCQlyZXR1cm4gYmF0Y2hfb2JqOwo+PiArCX0gZWxzZSB7Cj4+ ICsJCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+PiArCj4+ICsJCW1lbXNldChzaGFkb3dfZXhlY19l bnRyeSwgMCwgc2l6ZW9mKCpzaGFkb3dfZXhlY19lbnRyeSkpOwo+PiArCj4+ICsJCXZtYSA9IGk5 MTVfZ2VtX29ial90b19nZ3R0KHNoYWRvd19iYXRjaF9vYmopOwo+PiArCQl2bWEtPmV4ZWNfZW50 cnkgPSBzaGFkb3dfZXhlY19lbnRyeTsKPj4gKwkJdm1hLT5leGVjX2VudHJ5LT5mbGFncyA9IF9f RVhFQ19PQkpFQ1RfUFVSR0VBQkxFOwo+PiArCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2UoJnNo YWRvd19iYXRjaF9vYmotPmJhc2UpOwo+PiArCQlsaXN0X2FkZF90YWlsKCZ2bWEtPmV4ZWNfbGlz dCwgJmViLT52bWFzKTsKPj4gKwo+PiArCQlzaGFkb3dfYmF0Y2hfb2JqLT5iYXNlLnBlbmRpbmdf cmVhZF9kb21haW5zID0KPj4gKwkJCWJhdGNoX29iai0+YmFzZS5wZW5kaW5nX3JlYWRfZG9tYWlu czsKPj4gKwo+PiArCQkvKgo+PiArCQkgKiBTZXQgdGhlIERJU1BBVENIX1NFQ1VSRSBiaXQgdG8g cmVtb3ZlIHRoZSBOT05fU0VDVVJFCj4+ICsJCSAqIGJpdCBmcm9tIE1JX0JBVENIX0JVRkZFUl9T VEFSVCBjb21tYW5kcyBpc3N1ZWQgaW4gdGhlCj4+ICsJCSAqIGRpc3BhdGNoX2V4ZWNidWZmZXIg aW1wbGVtZW50YXRpb25zLiBXZSBzcGVjaWZpY2FsbHkKPj4gKwkJICogZG9uJ3Qgd2FudCB0aGF0 IHNldCB3aGVuIHRoZSBjb21tYW5kIHBhcnNlciBpcwo+PiArCQkgKiBlbmFibGVkLgo+PiArCQkg Kgo+PiArCQkgKiBGSVhNRTogd2l0aCBhbGlhc2luZyBwcGd0dCwgYnVmZmVycyB0aGF0IHNob3Vs ZCBvbmx5Cj4+ICsJCSAqIGJlIGluIGdndHQgc3RpbGwgZW5kIHVwIGluIHRoZSBhbGlhc2luZyBw cGd0dC4gcmVtb3ZlCj4+ICsJCSAqIHRoaXMgY2hlY2sgd2hlbiB0aGF0IGlzIGZpeGVkLgo+PiAr CQkgKi8KPj4gKwkJaWYgKFVTRVNfRlVMTF9QUEdUVChkZXYpKQo+PiArCQkJKmZsYWdzIHw9IEk5 MTVfRElTUEFUQ0hfU0VDVVJFOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiByZXQgPyBFUlJfUFRS KHJldCkgOiBzaGFkb3dfYmF0Y2hfb2JqOwo+PiArfQo+Pgo+PiAgIGludAo+PiAgIGk5MTVfZ2Vt X3JpbmdidWZmZXJfc3VibWlzc2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGUsCj4+IEBAIC0xMjg2LDcgKzEzNDUsNiBAQCBpOTE1X2dlbV9kb19leGVjYnVm ZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4+ICAgCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4+ICAgCXN0cnVjdCBl Yl92bWFzICplYjsKPj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJhdGNoX29iajsK Pj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqc2hhZG93X2JhdGNoX29iaiA9IE5VTEw7 Cj4+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIHNoYWRvd19leGVjX2VudHJ5 Owo+PiAgIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwo+PiAgIAlzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY3R4Owo+PiBAQCAtMTQwNiw2MyArMTQ2NCwxNyBAQCBpOTE1X2dlbV9kb19leGVj YnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4+ICAgCX0KPj4KPj4g ICAJaWYgKGk5MTVfbmVlZHNfY21kX3BhcnNlcihyaW5nKSkgewo+PiAtCQlzaGFkb3dfYmF0Y2hf b2JqID0KPj4gLQkJCWk5MTVfZ2VtX2JhdGNoX3Bvb2xfZ2V0KCZkZXZfcHJpdi0+bW0uYmF0Y2hf cG9vbCwKPj4gLQkJCQkJCWJhdGNoX29iai0+YmFzZS5zaXplKTsKPj4gLQkJaWYgKElTX0VSUihz aGFkb3dfYmF0Y2hfb2JqKSkgewo+PiAtCQkJcmV0ID0gUFRSX0VSUihzaGFkb3dfYmF0Y2hfb2Jq KTsKPj4gLQkJCS8qIERvbid0IHRyeSB0byBjbGVhbiB1cCB0aGUgb2JqIGluIHRoZSBlcnJvciBw YXRoICovCj4+IC0JCQlzaGFkb3dfYmF0Y2hfb2JqID0gTlVMTDsKPj4gLQkJCWdvdG8gZXJyOwo+ PiAtCQl9Cj4+IC0KPj4gLQkJc2hhZG93X2JhdGNoX29iai0+bWFkdiA9IEk5MTVfTUFEVl9XSUxM TkVFRDsKPj4gLQo+PiAtCQlyZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9waW4oc2hhZG93X2JhdGNo X29iaiwgNDA5NiwgMCk7Cj4+IC0JCWlmIChyZXQpCj4+ICsJCWJhdGNoX29iaiA9IGk5MTVfZ2Vt X2V4ZWNidWZmZXJfcGFyc2UocmluZywKPj4gKwkJCQkJCSAgICAgICZzaGFkb3dfZXhlY19lbnRy eSwKPj4gKwkJCQkJCSAgICAgIGViLAo+PiArCQkJCQkJICAgICAgYmF0Y2hfb2JqLAo+PiArCQkJ CQkJICAgICAgYXJncy0+YmF0Y2hfc3RhcnRfb2Zmc2V0LAo+PiArCQkJCQkJICAgICAgYXJncy0+ YmF0Y2hfbGVuLAo+PiArCQkJCQkJICAgICAgZmlsZS0+aXNfbWFzdGVyLAo+PiArCQkJCQkJICAg ICAgJmZsYWdzKTsKPj4gKwkJaWYgKElTX0VSUihiYXRjaF9vYmopKSB7Cj4+ICsJCQlyZXQgPSBQ VFJfRVJSKGJhdGNoX29iaik7Cj4+ICAgCQkJZ290byBlcnI7Cj4+IC0KPj4gLQkJcmV0ID0gaTkx NV9wYXJzZV9jbWRzKHJpbmcsCj4+IC0JCQkJICAgICAgYmF0Y2hfb2JqLAo+PiAtCQkJCSAgICAg IHNoYWRvd19iYXRjaF9vYmosCj4+IC0JCQkJICAgICAgYXJncy0+YmF0Y2hfc3RhcnRfb2Zmc2V0 LAo+PiAtCQkJCSAgICAgIGFyZ3MtPmJhdGNoX2xlbiwKPj4gLQkJCQkgICAgICBmaWxlLT5pc19t YXN0ZXIpOwo+PiAtCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihzaGFkb3dfYmF0Y2hfb2Jq KTsKPj4gLQo+PiAtCQlpZiAocmV0KSB7Cj4+IC0JCQlpZiAocmV0ICE9IC1FQUNDRVMpCj4+IC0J CQkJZ290byBlcnI7Cj4+IC0JCX0gZWxzZSB7Cj4+IC0JCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsK Pj4gLQo+PiAtCQkJbWVtc2V0KCZzaGFkb3dfZXhlY19lbnRyeSwgMCwKPj4gLQkJCSAgICAgICBz aXplb2Yoc2hhZG93X2V4ZWNfZW50cnkpKTsKPj4gLQo+PiAtCQkJdm1hID0gaTkxNV9nZW1fb2Jq X3RvX2dndHQoc2hhZG93X2JhdGNoX29iaik7Cj4+IC0JCQl2bWEtPmV4ZWNfZW50cnkgPSAmc2hh ZG93X2V4ZWNfZW50cnk7Cj4+IC0JCQl2bWEtPmV4ZWNfZW50cnktPmZsYWdzID0gX19FWEVDX09C SkVDVF9QVVJHRUFCTEU7Cj4+IC0JCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2UoJnNoYWRvd19i YXRjaF9vYmotPmJhc2UpOwo+PiAtCQkJbGlzdF9hZGRfdGFpbCgmdm1hLT5leGVjX2xpc3QsICZl Yi0+dm1hcyk7Cj4+IC0KPj4gLQkJCXNoYWRvd19iYXRjaF9vYmotPmJhc2UucGVuZGluZ19yZWFk X2RvbWFpbnMgPQo+PiAtCQkJCWJhdGNoX29iai0+YmFzZS5wZW5kaW5nX3JlYWRfZG9tYWluczsK Pj4gLQo+PiAtCQkJYmF0Y2hfb2JqID0gc2hhZG93X2JhdGNoX29iajsKPj4gLQo+PiAtCQkJLyoK Pj4gLQkJCSAqIFNldCB0aGUgRElTUEFUQ0hfU0VDVVJFIGJpdCB0byByZW1vdmUgdGhlIE5PTl9T RUNVUkUKPj4gLQkJCSAqIGJpdCBmcm9tIE1JX0JBVENIX0JVRkZFUl9TVEFSVCBjb21tYW5kcyBp c3N1ZWQgaW4gdGhlCj4+IC0JCQkgKiBkaXNwYXRjaF9leGVjYnVmZmVyIGltcGxlbWVudGF0aW9u cy4gV2Ugc3BlY2lmaWNhbGx5Cj4+IC0JCQkgKiBkb24ndCB3YW50IHRoYXQgc2V0IHdoZW4gdGhl IGNvbW1hbmQgcGFyc2VyIGlzCj4+IC0JCQkgKiBlbmFibGVkLgo+PiAtCQkJICoKPj4gLQkJCSAq IEZJWE1FOiB3aXRoIGFsaWFzaW5nIHBwZ3R0LCBidWZmZXJzIHRoYXQgc2hvdWxkIG9ubHkKPj4g LQkJCSAqIGJlIGluIGdndHQgc3RpbGwgZW5kIHVwIGluIHRoZSBhbGlhc2luZyBwcGd0dC4gcmVt b3ZlCj4+IC0JCQkgKiB0aGlzIGNoZWNrIHdoZW4gdGhhdCBpcyBmaXhlZC4KPj4gLQkJCSAqLwo+ PiAtCQkJaWYgKFVTRVNfRlVMTF9QUEdUVChkZXYpKQo+PiAtCQkJCWZsYWdzIHw9IEk5MTVfRElT UEFUQ0hfU0VDVVJFOwo+PiAgIAkJfQo+PiAgIAl9Cj4+Cj4+IC0tCj4+IDEuOS4xCj4+Cj4+IF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+IEludGVsLWdm eCBtYWlsaW5nIGxpc3QKPj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+PiBodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cj4KX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK