From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: Re: [Intel-gfx] [PATCH 2/3] drm: Create a format/modifier blob Date: Tue, 16 May 2017 14:19:12 -0700 Message-ID: <20170516211912.GA16215@mail.bwidawsk.net> References: <20170503051428.4734-1-ben@bwidawsk.net> <20170503051428.4734-2-ben@bwidawsk.net> <20170503150827.sbnk2whakcrqoznf@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20170503150827.sbnk2whakcrqoznf@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: Intel GFX , "Kristian H . Kristensen" , Daniel Stone , DRI Development List-Id: intel-gfx@lists.freedesktop.org T24gMTctMDUtMDMgMTc6MDg6MjcsIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj5PbiBUdWUsIE1heSAw MiwgMjAxNyBhdCAxMDoxNDoyN1BNIC0wNzAwLCBCZW4gV2lkYXdza3kgd3JvdGU6Cj4+IFVwZGF0 ZWQgYmxvYiBsYXlvdXQgKFJvYiwgRGFuaWVsLCBLcmlzdGlhbiwgeGVycGkpCj4+Cj4+IENjOiBS b2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+Cj4+IENjOiBEYW5pZWwgU3RvbmUgPGRhbmll bHNAY29sbGFib3JhLmNvbT4KPj4gQ2M6IEtyaXN0aWFuIEguIEtyaXN0ZW5zZW4gPGhvZWdzYmVy Z0BnbWFpbC5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3Nr Lm5ldD4KPj4gLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVfY29uZmlnLmMgfCAgIDcg KysrCj4+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX3BsYW5lLmMgICAgICAgfCAxMTkgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIGluY2x1ZGUvZHJtL2RybV9tb2RlX2Nv bmZpZy5oICAgICB8ICAgNiArKwo+PiAgaW5jbHVkZS91YXBpL2RybS9kcm1fbW9kZS5oICAgICAg IHwgIDI2ICsrKysrKysrKwo+PiAgNCBmaWxlcyBjaGFuZ2VkLCAxNTggaW5zZXJ0aW9ucygrKQo+ Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tb2RlX2NvbmZpZy5jIGIvZHJp dmVycy9ncHUvZHJtL2RybV9tb2RlX2NvbmZpZy5jCj4+IGluZGV4IGQ5ODYyMjU5YTJhNy4uNmJm YmMzODM5ZGY1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVfY29uZmln LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tb2RlX2NvbmZpZy5jCj4+IEBAIC0zMzcs NiArMzM3LDEzIEBAIHN0YXRpYyBpbnQgZHJtX21vZGVfY3JlYXRlX3N0YW5kYXJkX3Byb3BlcnRp ZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPj4gIAkJcmV0dXJuIC1FTk9NRU07Cj4+ICAJZGV2 LT5tb2RlX2NvbmZpZy5nYW1tYV9sdXRfc2l6ZV9wcm9wZXJ0eSA9IHByb3A7Cj4+Cj4+ICsJcHJv cCA9IGRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LAo+PiArCQkJCSAgIERSTV9NT0RFX1BST1BfSU1N VVRBQkxFIHwgRFJNX01PREVfUFJPUF9CTE9CLAo+PiArCQkJCSAgICJJTl9GT1JNQVRTIiwgMCk7 Cj4+ICsJaWYgKCFwcm9wKQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwlkZXYtPm1vZGVfY29u ZmlnLm1vZGlmaWVycyA9IHByb3A7Cj4+ICsKPj4gIAlyZXR1cm4gMDsKPj4gIH0KPj4KPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fcGxhbmUuYwo+PiBpbmRleCAyODZlMTgzODkxZTUuLjJlODllMGU3MzQzNSAxMDA2NDQKPj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wbGFuZS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fcGxhbmUuYwo+PiBAQCAtNjIsNiArNjIsMTE3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQg ZHJtX251bV9wbGFuZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPj4gIAlyZXR1cm4gbnVtOwo+ PiAgfQo+Pgo+PiArc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXJfYmxvYiB7Cj4+ICsjZGVmaW5l IEZPUk1BVF9CTE9CX0NVUlJFTlQgMQo+PiArCS8qIFZlcnNpb24gb2YgdGhpcyBibG9iIGZvcm1h dCAqLwo+PiArCXUzMiB2ZXJzaW9uOwo+PiArCj4+ICsJLyogRmxhZ3MgKi8KPj4gKwl1MzIgZmxh Z3M7Cj4+ICsKPj4gKwkvKiBOdW1iZXIgb2YgZm91cmNjIGZvcm1hdHMgc3VwcG9ydGVkICovCj4+ ICsJdTMyIGNvdW50X2Zvcm1hdHM7Cj4+ICsKPj4gKwkvKiBXaGVyZSBpbiB0aGlzIGJsb2IgdGhl IGZvcm1hdHMgZXhpc3QgKGluIGJ5dGVzKSAqLwo+PiArCXUzMiBmb3JtYXRzX29mZnNldDsKPj4g Kwo+PiArCS8qIE51bWJlciBvZiBkcm1fZm9ybWF0X21vZGlmaWVycyAqLwo+PiArCXUzMiBjb3Vu dF9tb2RpZmllcnM7Cj4+ICsKPj4gKwkvKiBXaGVyZSBpbiB0aGlzIGJsb2IgdGhlIG1vZGlmaWVy cyBleGlzdCAoaW4gYnl0ZXMpICovCj4+ICsJdTMyIG1vZGlmaWVyc19vZmZzZXQ7Cj4+ICsKPj4g KwkvKiB1MzIgZm9ybWF0c1tdICovCj4+ICsJLyogc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXIg bW9kaWZpZXJzW10gKi8KPj4gK30gX19wYWNrZWQ7Cj4KPlRoZSBzdHJ1Y3Qgc2hvdWxkIGJlIGlu IHRoZSB1YXBpIGhlYWRlci4gT3RoZXJ3aXNlIGl0IHdvbid0IHNob3cgdXAgaW4KPmxpYmRybSBo ZWFkZXJzIHdoZW4gZm9sbG93aW5nIHRoZSBwcm9wZXIgcHJvY2Vzcy4KPi1EYW5pZWwKPgoKSSBk b24ndCBhZ3JlZSB0aGF0IGJsb2JzIGFyZSBldmVyIHJlYWxseSBwYXJ0IG9mIHRoZSBBUEksIGJ1 dCBpdCBkb2Vzbid0IGh1cnQgdG8KbW92ZSBpdC4uLiBpbiBvdGhlciB3b3JkcywgZG9uZS4KCj4+ ICsKPj4gK3N0YXRpYyBpbmxpbmUgdTMyICoKPj4gK2Zvcm1hdHNfcHRyKHN0cnVjdCBkcm1fZm9y bWF0X21vZGlmaWVyX2Jsb2IgKmJsb2IpCj4+ICt7Cj4+ICsJcmV0dXJuICh1MzIgKikoKChjaGFy ICopYmxvYikgKyBibG9iLT5mb3JtYXRzX29mZnNldCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bmxpbmUgc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXIgKgo+PiArbW9kaWZpZXJzX3B0cihzdHJ1 Y3QgZHJtX2Zvcm1hdF9tb2RpZmllcl9ibG9iICpibG9iKQo+PiArewo+PiArCXJldHVybiAoc3Ry dWN0IGRybV9mb3JtYXRfbW9kaWZpZXIgKikoKChjaGFyICopYmxvYikgKyBibG9iLT5tb2RpZmll cnNfb2Zmc2V0KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBjcmVhdGVfaW5fZm9ybWF0X2Js b2Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4+ICsJ CQkJIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgKmZ1bmNzLAo+PiArCQkJCSBjb25zdCB1 aW50MzJfdCAqZm9ybWF0cywgdW5zaWduZWQgaW50IGZvcm1hdF9jb3VudCwKPj4gKwkJCQkgY29u c3QgdWludDY0X3QgKmZvcm1hdF9tb2RpZmllcnMpCj4+ICt7Cj4+ICsJY29uc3Qgc3RydWN0IGRy bV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7Cj4+ICsJY29uc3QgdWlu dDY0X3QgKnRlbXBfbW9kaWZpZXJzID0gZm9ybWF0X21vZGlmaWVyczsKPj4gKwl1bnNpZ25lZCBp bnQgZm9ybWF0X21vZGlmaWVyX2NvdW50ID0gMDsKPj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Js b2IgKmJsb2IgPSBOVUxMOwo+PiArCXN0cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyICptb2Q7Cj4+ ICsJc2l6ZV90IGJsb2Jfc2l6ZSA9IDAsIGZvcm1hdHNfc2l6ZSwgbW9kaWZpZXJzX3NpemU7Cj4+ ICsJc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXJfYmxvYiAqYmxvYl9kYXRhOwo+PiArCWludCBp LCBqLCByZXQgPSAwOwo+PiArCj4+ICsJaWYgKGZvcm1hdF9tb2RpZmllcnMpCj4+ICsJCXdoaWxl ICgqdGVtcF9tb2RpZmllcnMrKyAhPSBEUk1fRk9STUFUX01PRF9JTlZBTElEKQo+PiArCQkJZm9y bWF0X21vZGlmaWVyX2NvdW50Kys7Cj4+ICsKPj4gKwlmb3JtYXRzX3NpemUgPSBzaXplb2YoX191 MzIpICogZm9ybWF0X2NvdW50Owo+PiArCWlmIChXQVJOX09OKCFmb3JtYXRzX3NpemUpKSB7Cj4+ ICsJCS8qIDAgZm9ybWF0cyBhcmUgbmV2ZXIgZXhwZWN0ZWQgKi8KPj4gKwkJcmV0dXJuIDA7Cj4+ ICsJfQo+PiArCj4+ICsJbW9kaWZpZXJzX3NpemUgPQo+PiArCQlzaXplb2Yoc3RydWN0IGRybV9m b3JtYXRfbW9kaWZpZXIpICogZm9ybWF0X21vZGlmaWVyX2NvdW50Owo+PiArCj4+ICsJYmxvYl9z aXplID0gQUxJR04oc2l6ZW9mKHN0cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyX2Jsb2IpLCA4KTsK Pj4gKwlibG9iX3NpemUgKz0gQUxJR04oZm9ybWF0c19zaXplLCA4KTsKPj4gKwlibG9iX3NpemUg Kz0gbW9kaWZpZXJzX3NpemU7Cj4+ICsKPj4gKwlibG9iID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9i bG9iKGRldiwgYmxvYl9zaXplLCBOVUxMKTsKPj4gKwlpZiAoSVNfRVJSKGJsb2IpKQo+PiArCQly ZXR1cm4gLTE7Cj4+ICsKPj4gKwlibG9iX2RhdGEgPSAoc3RydWN0IGRybV9mb3JtYXRfbW9kaWZp ZXJfYmxvYiAqKWJsb2ItPmRhdGE7Cj4+ICsJYmxvYl9kYXRhLT52ZXJzaW9uID0gRk9STUFUX0JM T0JfQ1VSUkVOVDsKPj4gKwlibG9iX2RhdGEtPmNvdW50X2Zvcm1hdHMgPSBmb3JtYXRfY291bnQ7 Cj4+ICsJYmxvYl9kYXRhLT5mb3JtYXRzX29mZnNldCA9IHNpemVvZihzdHJ1Y3QgZHJtX2Zvcm1h dF9tb2RpZmllcl9ibG9iKTsKPj4gKwlibG9iX2RhdGEtPmNvdW50X21vZGlmaWVycyA9IGZvcm1h dF9tb2RpZmllcl9jb3VudDsKPj4gKwo+PiArCS8qIE1vZGlmaWVycyBvZmZzZXQgaXMgYSBwb2lu dGVyIHRvIGEgc3RydWN0IHdpdGggYSA2NCBiaXQgZmllbGQgc28gaXQKPj4gKwkgKiBzaG91bGQg YmUgbmF0dXJhbGx5IGFsaWduZWQgdG8gOEIuCj4+ICsJICovCj4+ICsJYmxvYl9kYXRhLT5tb2Rp ZmllcnNfb2Zmc2V0ID0KPj4gKwkJQUxJR04oYmxvYl9kYXRhLT5mb3JtYXRzX29mZnNldCArIGZv cm1hdHNfc2l6ZSwgOCk7Cj4+ICsKPj4gKwltZW1jcHkoZm9ybWF0c19wdHIoYmxvYl9kYXRhKSwg Zm9ybWF0cywgZm9ybWF0c19zaXplKTsKPj4gKwo+PiArCS8qIElmIHdlIGNhbid0IGRldGVybWlu ZSBzdXBwb3J0LCBqdXN0IGJhaWwgKi8KPj4gKwlpZiAoIWZ1bmNzLT5mb3JtYXRfbW9kX3N1cHBv cnRlZCkKPj4gKwkJZ290byBkb25lOwo+PiArCj4+ICsJbW9kID0gbW9kaWZpZXJzX3B0cihibG9i X2RhdGEpOwo+PiArCWZvciAoaSA9IDA7IGkgPCBmb3JtYXRfbW9kaWZpZXJfY291bnQ7IGkrKykg ewo+PiArCQlmb3IgKGogPSAwOyBqIDwgZm9ybWF0X2NvdW50OyBqKyspIHsKPj4gKwkJCWlmIChm dW5jcy0+Zm9ybWF0X21vZF9zdXBwb3J0ZWQocGxhbmUsIGZvcm1hdHNbal0sCj4+ICsJCQkJCQkJ Zm9ybWF0X21vZGlmaWVyc1tpXSkpIHsKPj4gKwkJCQltb2QtPmZvcm1hdHMgfD0gMSA8PCBqOwo+ PiArCQkJfQo+PiArCQl9Cj4+ICsKPj4gKwkJbW9kLT5tb2RpZmllciA9IGZvcm1hdF9tb2RpZmll cnNbaV07Cj4+ICsJCW1vZC0+b2Zmc2V0ID0gMDsKPj4gKwkJbW9kLT5wYWQgPSAwOwo+PiArCQlt b2QrKzsKPj4gKwl9Cj4+ICsKPj4gK2RvbmU6Cj4+ICsJZHJtX29iamVjdF9hdHRhY2hfcHJvcGVy dHkoJnBsYW5lLT5iYXNlLCBjb25maWctPm1vZGlmaWVycywKPj4gKwkJCQkgICBibG9iLT5iYXNl LmlkKTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gIC8qKgo+PiAgICogZHJt X3VuaXZlcnNhbF9wbGFuZV9pbml0IC0gSW5pdGlhbGl6ZSBhIG5ldyB1bml2ZXJzYWwgcGxhbmUg b2JqZWN0Cj4+ICAgKiBAZGV2OiBEUk0gZGV2aWNlCj4+IEBAIC0xMzAsNiArMjQxLDEwIEBAIGlu dCBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCj4+ICAJCXJldHVybiAtRU5PTUVNOwo+PiAgCX0KPj4KPj4gKwkv KiBGaXJzdCBkcml2ZXIgdG8gbmVlZCBtb3JlIHRoYW4gNjQgZm9ybWF0cyBuZWVkcyB0byBmaXgg dGhpcyAqLwo+PiArCWlmIChXQVJOX09OKGZvcm1hdF9jb3VudCA+IDY0KSkKPj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4+ICsKPj4gIAlpZiAobmFtZSkgewo+PiAgCQl2YV9saXN0IGFwOwo+Pgo+PiBA QCAtMTc3LDYgKzI5MiwxMCBAQCBpbnQgZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+PiAgCQlkcm1fb2JqZWN0 X2F0dGFjaF9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsIGNvbmZpZy0+cHJvcF9zcmNfaCwgMCk7Cj4+ ICAJfQo+Pgo+PiArCWlmIChjb25maWctPmFsbG93X2ZiX21vZGlmaWVycykKPj4gKwkJY3JlYXRl X2luX2Zvcm1hdF9ibG9iKGRldiwgcGxhbmUsIGZ1bmNzLCBmb3JtYXRzLCBmb3JtYXRfY291bnQs Cj4+ICsJCQkJICAgICAgZm9ybWF0X21vZGlmaWVycyk7Cj4+ICsKPj4gIAlyZXR1cm4gMDsKPj4g IH0KPj4gIEVYUE9SVF9TWU1CT0woZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KTsKPj4gZGlmZiAt LWdpdCBhL2luY2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5oIGIvaW5jbHVkZS9kcm0vZHJtX21v ZGVfY29uZmlnLmgKPj4gaW5kZXggNDI5ODE3MTExODliLi4wMzc3NmU2NTk4MTEgMTAwNjQ0Cj4+ IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5oCj4+ICsrKyBiL2luY2x1ZGUvZHJt L2RybV9tb2RlX2NvbmZpZy5oCj4+IEBAIC03NTcsNiArNzU3LDEyIEBAIHN0cnVjdCBkcm1fbW9k ZV9jb25maWcgewo+PiAgCSAqLwo+PiAgCWJvb2wgYWxsb3dfZmJfbW9kaWZpZXJzOwo+Pgo+PiAr CS8qKgo+PiArCSAqIEBtb2RpZmllcnM6IFBsYW5lIHByb3BlcnR5IHRvIGxpc3Qgc3VwcG9ydCBt b2RpZmllci9mb3JtYXQKPj4gKwkgKiBjb21iaW5hdGlvbi4KPj4gKwkgKi8KPj4gKwlzdHJ1Y3Qg ZHJtX3Byb3BlcnR5ICptb2RpZmllcnM7Cj4+ICsKPj4gIAkvKiBjdXJzb3Igc2l6ZSAqLwo+PiAg CXVpbnQzMl90IGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodDsKPj4KPj4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUu aAo+PiBpbmRleCA4YzY3ZmMwM2Q1M2QuLmRjZGQwNGM1NTc5MiAxMDA2NDQKPj4gLS0tIGEvaW5j bHVkZS91YXBpL2RybS9kcm1fbW9kZS5oCj4+ICsrKyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX21v ZGUuaAo+PiBAQCAtNjY1LDYgKzY2NSwzMiBAQCBzdHJ1Y3QgZHJtX21vZGVfYXRvbWljIHsKPj4g IAlfX3U2NCB1c2VyX2RhdGE7Cj4+ICB9Owo+Pgo+PiArc3RydWN0IGRybV9mb3JtYXRfbW9kaWZp ZXIgewo+PiArICAgICAgIC8qIEJpdG1hc2sgb2YgZm9ybWF0cyBpbiBnZXRfcGxhbmUgZm9ybWF0 IGxpc3QgdGhpcyBpbmZvIGFwcGxpZXMgdG8uIFRoZQo+PiArCSogb2Zmc2V0IGFsbG93cyBhIHNs aWRpbmcgd2luZG93IG9mIHdoaWNoIDY0IGZvcm1hdHMgKGJpdHMpLgo+PiArCSoKPj4gKwkqIFNv bWUgZXhhbXBsZXM6Cj4+ICsJKiBJbiB0b2RheSdzIHdvcmxkIHdpdGggPCA2NSBmb3JtYXRzLCBh bmQgZm9ybWF0cyAwLCBhbmQgMiBhcmUKPj4gKwkqIHN1cHBvcnRlZAo+PiArCSogMHgwMDAwMDAw MDAwMDAwMDA1Cj4+ICsJKgkJICBeLW9mZnNldCA9IDAsIGZvcm1hdHMgPSA1Cj4+ICsJKgo+PiAr CSogSWYgdGhlIG51bWJlciBmb3JtYXRzIGdyZXcgdG8gMTI4LCBhbmQgZm9ybWF0cyA5OC0xMDIg YXJlCj4+ICsJKiBzdXBwb3J0ZWQgd2l0aCB0aGUgbW9kaWZpZXI6Cj4+ICsJKgo+PiArCSogMHgw MDAwMDAzYzAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAKPj4gKwkqCQkgIF4KPj4gKwkqCQkgIHxf X29mZnNldCA9IDY0LCBmb3JtYXRzID0gMHgzYzAwMDAwMDAwCj4+ICsJKgo+PiArCSovCj4+ICsg ICAgICAgdWludDY0X3QgZm9ybWF0czsKPj4gKyAgICAgICB1aW50MzJfdCBvZmZzZXQ7Cj4+ICsg ICAgICAgdWludDMyX3QgcGFkOwo+PiArCj4+ICsgICAgICAgLyogVGhpcyBtb2RpZmllciBjYW4g YmUgdXNlZCB3aXRoIHRoZSBmb3JtYXQgZm9yIHRoaXMgcGxhbmUuICovCj4+ICsgICAgICAgdWlu dDY0X3QgbW9kaWZpZXI7Cj4+ICt9IF9fcGFja2VkOwo+PiArCj4+ICAvKioKPj4gICAqIENyZWF0 ZSBhIG5ldyAnYmxvYicgZGF0YSBwcm9wZXJ0eSwgY29weWluZyBsZW5ndGggYnl0ZXMgZnJvbSBk YXRhIHBvaW50ZXIsCj4+ICAgKiBhbmQgcmV0dXJuaW5nIG5ldyBibG9iIElELgo+PiAtLQo+PiAy LjEyLjIKPj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KPj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+PiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCj4+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cj4KPi0tIAo+RGFuaWVsIFZldHRlcgo+U29mdHdhcmUgRW5naW5lZXIsIEludGVs IENvcnBvcmF0aW9uCj5odHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK