From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: Re: [PATCH] drm/i915: Move frontbuffer CS write tracking from ggtt vma to object Date: Wed, 16 Nov 2016 17:52:43 -0200 Message-ID: <1479325963.2382.12.camel@intel.com> References: <20161116190704.5293-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id BB4516E241 for ; Wed, 16 Nov 2016 19:52:47 +0000 (UTC) In-Reply-To: <20161116190704.5293-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RW0gUXVhLCAyMDE2LTExLTE2IMOgcyAxOTowNyArMDAwMCwgQ2hyaXMgV2lsc29uIGVzY3JldmV1 Ogo+IEkgdHJpZWQgdG8gYXZvaWQgaGF2aW5nIHRvIHRyYWNrIHRoZSB3cml0ZSBmb3IgZXZlcnkg Vk1BIGJ5IG9ubHkKPiB0cmFja2luZyB3cml0ZXMgdG8gdGhlIGdndHQuIEhvd2V2ZXIsIGZvciB0 aGUgcHVycG9zZXMgb2YgZnJvbnRidWZmZXIKPiB0cmFja2luZyB0aGlzIGlzIGluc3VmZmljaWVu dCBhcyB3ZSBuZWVkIHRvIGludmFsaWRhdGUgYXJvdW5kIHdyaXRlcwo+IG5vdAo+IGp1c3QgdG8g dGhlIHRoZSBnZ3R0IGJ1dCBhbGwgYWxpYXNlZCBwcGd0dCB2aWV3cyBvZiB0aGUgZnJhbWVidWZm ZXIuCj4gQnkKPiBtb3ZpbmcgdGhlIGNyaXRpY2FsIHNlY3Rpb24gdG8gdGhlIG9iamVjdCBhbmQg b25seSBkb2luZyBzbyBmb3IKPiBmcmFtZWJ1ZmZlciB3cml0ZXMgd2UgY2FuIHJlZHVjZSB0aGUg dHJhY2tpbmcgZXZlbiBmdXJ0aGVyIGJ5IG9ubHkKPiB3YXRjaGluZyBmcmFtZWJ1ZmZlcnMgYW5k IG5vdCB2bWEuCgpUaGF0IGZpeGVzIHRoZSB0ZXN0IGZhaWx1cmVzIEkgd2FzIHNlZWluZy4gVGhh bmtzIQoKVGVzdGVkLWJ5OiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4K ClRlc3RjYXNlOiBpZ3Qva21zX2Zyb250YnVmZmVyX3RyYWNraW5nL2ZiYy0xcC1wcmltc2Nybi1w cmktaW5kZmItZHJhdy0KYmx0IChhbmQgYSBmZXcgb3RoZXJzKQoKSSBkaWRuJ3QgdHJ5IGJpc2Vj dGluZywgYnV0IG1heWJlIHdlIGNvdWxkIGFkZDoKRml4ZXM6IGQwN2YwZTU5YjJjNyAoImRybS9p OTE1OiBNb3ZlIEdFTSBhY3Rpdml0eSB0cmFja2luZyBpbnRvIGEKY29tbW9uIHN0cnVjdCByZXNl cnZhdGlvbl9vYmplY3QiKQoKQnV0IHdoaWxlIHJ1bm5pbmcga21zX2Zyb250YnVmZmVyX3RyYWNr aW5nIEknbSBzdGlsbCBzZWVpbmcgYSBmZXcgZG1lc2cKV0FSTnMgdGhhdCB3ZXJlIG5vdCBwcmVz ZW50IGEgZmV3IHdlZWtzIGFnbzoKCldBUk5JTkc6IENQVTogMyBQSUQ6IDU2IGF0IGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xyYy5jOjcwNgpleGVjbGlzdHNfc2NoZWR1bGUrMHgzMmQvMHgz NTAgW2k5MTVdCgpXQVJOX09OKGRlYnVnX2xvY2tzICYmICFsb2NrX2lzX2hlbGQoJigmcmVxdWVz dC0+aTkxNS0KPmRybS5zdHJ1Y3RfbXV0ZXgpLT5kZXBfbWFwKSkKCltkcm06ZHJtX2ZyYW1lYnVm ZmVyX3JlbW92ZSBbZHJtXV0gKkVSUk9SKiBmYWlsZWQgdG8gcmVzZXQgY3J0YwpmZmZmODgwMTYz ODVlN2U4IHdoZW4gZmIgd2FzIGRlbGV0ZWQKCih0aGUgbG9ja2RlcCBvbmVzIGFyZSBkdXJpbmcg cGFnZSBmbGlwIHN1YnRlc3RzKQoKPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNo cmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBDYzogUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9u aUBpbnRlbC5jb20+Cj4gLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgfCAxMSArKysrKysrKysrKwo+IMKgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIHzCoMKgNSArKy0tLQo+IMKgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmjCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmPCoMKgwqDCoMKgwqB8wqDCoDQgKystLQo+IMKg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwg MTIgLS0tLS0tLS0tLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5owqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxIC0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Zyb250YnVmZmVyLmjCoMKgwqB8wqDCoDUgKysrLS0KPiDCoDcgZmlsZXMgY2hhbmdlZCwgMTkg aW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKPiBpbmRleCA3YzU3YmE5ZWQyZWEuLjIwZDQwMmU3NTk0MyAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYwo+IEBAIC0zOTYzLDYgKzM5NjMsMTYgQEAgaTkxNV9nZW1fbWFkdmlzZV9pb2N0 bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IHZvaWQgKmRhdGEsCj4gwqAJcmV0dXJuIGVycjsK PiDCoH0KPiDCoAo+ICtzdGF0aWMgdm9pZAo+ICtmcm9udGJ1ZmZlcl9yZXRpcmUoc3RydWN0IGk5 MTVfZ2VtX2FjdGl2ZSAqYWN0aXZlLAo+ICsJCcKgwqDCoHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxdWVzdCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9 Cj4gKwkJY29udGFpbmVyX29mKGFjdGl2ZSwgdHlwZW9mKCpvYmopLAo+IGZyb250YnVmZmVyX3dy aXRlKTsKPiArCj4gKwlpbnRlbF9mYl9vYmpfZmx1c2gob2JqLCB0cnVlLCBPUklHSU5fQ1MpOwo+ ICt9Cj4gKwo+IMKgdm9pZCBpOTE1X2dlbV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAo+IMKgCQkJwqDCoGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 X29wcyAqb3BzKQo+IMKgewo+IEBAIC0zOTgwLDYgKzM5OTAsNyBAQCB2b2lkIGk5MTVfZ2VtX29i amVjdF9pbml0KHN0cnVjdAo+IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiDCoAlvYmotPnJl c3YgPSAmb2JqLT5fX2J1aWx0aW5fcmVzdjsKPiDCoAo+IMKgCW9iai0+ZnJvbnRidWZmZXJfZ2d0 dF9vcmlnaW4gPSBPUklHSU5fR1RUOwo+ICsJaW5pdF9yZXF1ZXN0X2FjdGl2ZSgmb2JqLT5mcm9u dGJ1ZmZlcl93cml0ZSwKPiBmcm9udGJ1ZmZlcl9yZXRpcmUpOwo+IMKgCj4gwqAJb2JqLT5tbS5t YWR2ID0gSTkxNV9NQURWX1dJTExORUVEOwo+IMKgCUlOSVRfUkFESVhfVFJFRSgmb2JqLT5tbS5n ZXRfcGFnZS5yYWRpeCwgR0ZQX0tFUk5FTCB8Cj4gX19HRlBfTk9XQVJOKTsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiBpbmRleCBkODQ1YTU0MzYwYTcu LjNjYTEyZTZjYmZhNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9leGVjYnVmZmVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVj YnVmZmVyLmMKPiBAQCAtMTI4Miw5ICsxMjgyLDggQEAgdm9pZCBpOTE1X3ZtYV9tb3ZlX3RvX2Fj dGl2ZShzdHJ1Y3QgaTkxNV92bWEKPiAqdm1hLAo+IMKgCWxpc3RfbW92ZV90YWlsKCZ2bWEtPnZt X2xpbmssICZ2bWEtPnZtLT5hY3RpdmVfbGlzdCk7Cj4gwqAKPiDCoAlpZiAoZmxhZ3MgJiBFWEVD X09CSkVDVF9XUklURSkgewo+IC0JCWk5MTVfZ2VtX2FjdGl2ZV9zZXQoJnZtYS0+bGFzdF93cml0 ZSwgcmVxKTsKPiAtCj4gLQkJaW50ZWxfZmJfb2JqX2ludmFsaWRhdGUob2JqLCBPUklHSU5fQ1Mp Owo+ICsJCWlmIChpbnRlbF9mYl9vYmpfaW52YWxpZGF0ZShvYmosIE9SSUdJTl9DUykpCj4gKwkJ CWk5MTVfZ2VtX2FjdGl2ZV9zZXQoJm9iai0+ZnJvbnRidWZmZXJfd3JpdGUsIAo+IHJlcSk7Cj4g wqAKPiDCoAkJLyogdXBkYXRlIGZvciB0aGUgaW1wbGljaXQgZmx1c2ggYWZ0ZXIgYSBiYXRjaCAq Lwo+IMKgCQlvYmotPmJhc2Uud3JpdGVfZG9tYWluICY9IH5JOTE1X0dFTV9HUFVfRE9NQUlOUzsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmgKPiBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oCj4gaW5kZXggNDQwNTMwYjIw ZmZhLi4xNWQ5NjU5NGJiN2UgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fb2JqZWN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmpl Y3QuaAo+IEBAIC0xMDMsNiArMTAzLDcgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qgewo+ IMKgCj4gwqAJYXRvbWljX3QgZnJvbnRidWZmZXJfYml0czsKPiDCoAl1bnNpZ25lZCBpbnQgZnJv bnRidWZmZXJfZ2d0dF9vcmlnaW47IC8qIHdyaXRlIG9uY2UgKi8KPiArCXN0cnVjdCBpOTE1X2dl bV9hY3RpdmUgZnJvbnRidWZmZXJfd3JpdGU7Cj4gwqAKPiDCoAkvKiogQ3VycmVudCB0aWxpbmcg c3RyaWRlIGZvciB0aGUgb2JqZWN0LCBpZiBpdCdzIHRpbGVkLiAqLwo+IMKgCXVuc2lnbmVkIGlu dCB0aWxpbmdfYW5kX3N0cmlkZTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9ncHVfZXJyb3IuYwo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3Iu Ywo+IGluZGV4IDVkNjIwYmQ1ZGQyMi4uMmNhNzE4ODY4YjM3IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dwdV9lcnJvci5jCj4gQEAgLTg4Nyw4ICs4ODcsOCBAQCBzdGF0aWMgdm9pZCBj YXB0dXJlX2JvKHN0cnVjdAo+IGRybV9pOTE1X2Vycm9yX2J1ZmZlciAqZXJyLAo+IMKgCj4gwqAJ Zm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX0VOR0lORVM7IGkrKykKPiDCoAkJZXJyLT5yc2Vxbm9b aV0gPSBfX2FjdGl2ZV9nZXRfc2Vxbm8oJnZtYS0KPiA+bGFzdF9yZWFkW2ldKTsKPiAtCWVyci0+ d3NlcW5vID0gX19hY3RpdmVfZ2V0X3NlcW5vKCZ2bWEtPmxhc3Rfd3JpdGUpOwo+IC0JZXJyLT5l bmdpbmUgPSBfX2FjdGl2ZV9nZXRfZW5naW5lX2lkKCZ2bWEtPmxhc3Rfd3JpdGUpOwo+ICsJZXJy LT53c2Vxbm8gPSBfX2FjdGl2ZV9nZXRfc2Vxbm8oJm9iai0+ZnJvbnRidWZmZXJfd3JpdGUpOwo+ ICsJZXJyLT5lbmdpbmUgPSBfX2FjdGl2ZV9nZXRfZW5naW5lX2lkKCZvYmotCj4gPmZyb250YnVm ZmVyX3dyaXRlKTsKPiDCoAo+IMKgCWVyci0+Z3R0X29mZnNldCA9IHZtYS0+bm9kZS5zdGFydDsK PiDCoAllcnItPnJlYWRfZG9tYWlucyA9IG9iai0+YmFzZS5yZWFkX2RvbWFpbnM7Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmMKPiBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfdm1hLmMKPiBpbmRleCA0NDU4NTMwMGZkZmYuLmZkNTViYzhmMWM2MSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYwo+IEBAIC03NCwxNiArNzQsNiBAQCBpOTE1X3ZtYV9y ZXRpcmUoc3RydWN0IGk5MTVfZ2VtX2FjdGl2ZSAqYWN0aXZlLAo+IMKgCX0KPiDCoH0KPiDCoAo+ IC1zdGF0aWMgdm9pZAo+IC1pOTE1X2dndHRfcmV0aXJlX193cml0ZShzdHJ1Y3QgaTkxNV9nZW1f YWN0aXZlICphY3RpdmUsCj4gLQkJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVz dCkKPiAtewo+IC0Jc3RydWN0IGk5MTVfdm1hICp2bWEgPQo+IC0JCWNvbnRhaW5lcl9vZihhY3Rp dmUsIHN0cnVjdCBpOTE1X3ZtYSwgbGFzdF93cml0ZSk7Cj4gLQo+IC0JaW50ZWxfZmJfb2JqX2Zs dXNoKHZtYS0+b2JqLCB0cnVlLCBPUklHSU5fQ1MpOwo+IC19Cj4gLQo+IMKgc3RhdGljIHN0cnVj dCBpOTE1X3ZtYSAqCj4gwqBfX2k5MTVfdm1hX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLAo+IMKgCQnCoMKgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gQEAg LTEwMiw4ICs5Miw2IEBAIF9faTkxNV92bWFfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCj4gwqAJSU5JVF9MSVNUX0hFQUQoJnZtYS0+ZXhlY19saXN0KTsKPiDCoAlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bWEtPmxhc3RfcmVhZCk7IGkrKykKPiDCoAkJaW5pdF9y ZXF1ZXN0X2FjdGl2ZSgmdm1hLT5sYXN0X3JlYWRbaV0sCj4gaTkxNV92bWFfcmV0aXJlKTsKPiAt CWluaXRfcmVxdWVzdF9hY3RpdmUoJnZtYS0+bGFzdF93cml0ZSwKPiAtCQkJwqDCoMKgwqBpOTE1 X2lzX2dndHQodm0pID8KPiBpOTE1X2dndHRfcmV0aXJlX193cml0ZSA6IE5VTEwpOwo+IMKgCWlu aXRfcmVxdWVzdF9hY3RpdmUoJnZtYS0+bGFzdF9mZW5jZSwgTlVMTCk7Cj4gwqAJbGlzdF9hZGQo JnZtYS0+dm1fbGluaywgJnZtLT51bmJvdW5kX2xpc3QpOwo+IMKgCXZtYS0+dm0gPSB2bTsKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuaAo+IGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV92bWEuaAo+IGluZGV4IDJlNDlmNWRkNjEwNy4uODU0NDZmMGIwYjNm IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmgKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5oCj4gQEAgLTgwLDcgKzgwLDYgQEAgc3RydWN0 IGk5MTVfdm1hIHsKPiDCoAo+IMKgCXVuc2lnbmVkIGludCBhY3RpdmU7Cj4gwqAJc3RydWN0IGk5 MTVfZ2VtX2FjdGl2ZSBsYXN0X3JlYWRbSTkxNV9OVU1fRU5HSU5FU107Cj4gLQlzdHJ1Y3QgaTkx NV9nZW1fYWN0aXZlIGxhc3Rfd3JpdGU7Cj4gwqAJc3RydWN0IGk5MTVfZ2VtX2FjdGl2ZSBsYXN0 X2ZlbmNlOwo+IMKgCj4gwqAJLyoqCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Zyb250YnVmZmVyLmgKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Zyb250 YnVmZmVyLmgKPiBpbmRleCA3NmNlYjUzOWY5ZjAuLjdiYWI0MTIxOGNmNyAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mcm9udGJ1ZmZlci5oCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZnJvbnRidWZmZXIuaAo+IEBAIC01MywxNiArNTMsMTcgQEAg dm9pZCBfX2ludGVsX2ZiX29ial9mbHVzaChzdHJ1Y3QKPiBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCj4gwqAgKiB1bnRpbCB0aGUgcmVuZGVyaW5nIGNvbXBsZXRlcyBvciBhIGZsaXAgb24gdGhp cyBmcm9udGJ1ZmZlciBwbGFuZQo+IGlzCj4gwqAgKiBzY2hlZHVsZWQuCj4gwqAgKi8KPiAtc3Rh dGljIGlubGluZSB2b2lkIGludGVsX2ZiX29ial9pbnZhbGlkYXRlKHN0cnVjdAo+IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKPiArc3RhdGljIGlubGluZSBib29sIGludGVsX2ZiX29ial9pbnZh bGlkYXRlKHN0cnVjdAo+IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiDCoAkJCQkJwqDCoMKg ZW51bSBmYl9vcF9vcmlnaW4gb3JpZ2luKQo+IMKgewo+IMKgCXVuc2lnbmVkIGludCBmcm9udGJ1 ZmZlcl9iaXRzOwo+IMKgCj4gwqAJZnJvbnRidWZmZXJfYml0cyA9IGF0b21pY19yZWFkKCZvYmot PmZyb250YnVmZmVyX2JpdHMpOwo+IMKgCWlmICghZnJvbnRidWZmZXJfYml0cykKPiAtCQlyZXR1 cm47Cj4gKwkJcmV0dXJuIGZhbHNlOwo+IMKgCj4gwqAJX19pbnRlbF9mYl9vYmpfaW52YWxpZGF0 ZShvYmosIG9yaWdpbiwgZnJvbnRidWZmZXJfYml0cyk7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiDCoH0K PiDCoAo+IMKgLyoqCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=