From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 55/62] drm/i915: i915_vma_move_to_active prep patch Date: Fri, 3 Jun 2016 17:37:20 +0100 Message-ID: <1464971847-15809-56-git-send-email-chris@chris-wilson.co.uk> References: <1464971847-15809-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 715646EE2F for ; Fri, 3 Jun 2016 16:38:27 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id e3so611968wme.2 for ; Fri, 03 Jun 2016 09:38:27 -0700 (PDT) In-Reply-To: <1464971847-15809-1-git-send-email-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: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhpcyBwYXRjaCBpcyBicm9rZW4gb3V0IG9mIHRoZSBuZXh0IGp1c3QgdG8gcmVtb3ZlIHRoZSBj b2RlIG1vdGlvbiBmcm9tCnRoYXQgcGF0Y2ggYW5kIG1ha2UgaXQgbW9yZSByZWFkYWJsZS4gV2hh dCB3ZSBkbyBoZXJlIGlzIG1vdmUgdGhlCmk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKCkgdG8gaTkx NV9nZW1fZXhlY2J1ZmZlci5jIGFuZCBwdXQgdGhlIHRocmVlCnN0YWdlcyAocmVhZCwgd3JpdGUs IGZlbmNlZCkgdG9nZXRoZXIgc28gdGhhdCBmdXR1cmUgbW9kaWZpY2F0aW9ucyB0bwphY3RpdmUg aGFuZGxpbmcgYXJlIGFsbCBsb2NhdGVkIGluIHRoZSBzYW1lIHNwb3QuIFRoZSBpbXBvcnRhbmNl IG9mIHRoaXMKaXMgc28gdGhhdCB3ZSBjYW4gbW9yZSBzaW1wbHkgY29udHJvbCB0aGUgb3JkZXIg aW4gd2hpY2ggdGhlIHJlcXVlc3RzCmFyZSBwbGFjZSBpbiB0aGUgcmV0aXJlbWVudCBsaXN0IChp LmUuIGNvbnRyb2wgdGhlIG9yZGVyIGF0IHdoaWNoIHdlCnJldGlyZSBhbmQgc28gY29udHJvbCB0 aGUgbGlmZXRpbWVzIHRvIGF2b2lkIGhhdmluZyB0byBob2xkIG9udG8KcmVmZXJlbmNlcykuCgpT aWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAgICB8ICAzICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAgICB8IDE2IC0tLS0tLS0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyAgICAgIHwgIDkgKystLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jICAgfCA2NCArKysrKysr KysrKysrKysrKystLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZW5k ZXJfc3RhdGUuYyB8ICAyICstCiA1IGZpbGVzIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKyksIDQ0 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDkyY2QzNzQ0NzgzYy4u OTEyZDU0YjY5OThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTMwNDUsNyArMzA0NSw4 IEBAIGludCBfX211c3RfY2hlY2sgaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldik7CiBpbnQgaTkxNV9nZW1fb2JqZWN0X3N5bmMoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnRv KTsKIHZvaWQgaTkxNV92bWFfbW92ZV90b19hY3RpdmUoc3RydWN0IGk5MTVfdm1hICp2bWEsCi0J CQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKTsKKwkJCSAgICAgc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCisJCQkgICAgIHVuc2lnbmVkIGZsYWdzKTsKIGlu dCBpOTE1X2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCSBz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAq YXJncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCBiNTFkMjBhNGYxZWEuLmNhNmI1NWY1 MmY4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0yMDY2LDIyICsyMDY2LDYgQEAgdm9p ZCAqaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKIAlyZXR1cm4gb2JqLT5tYXBwaW5nOwogfQogCi12b2lkIGk5MTVfdm1hX21vdmVfdG9fYWN0 aXZlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAotCQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdm1hLT5v Ymo7Ci0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gcmVxLT5lbmdpbmU7Ci0KLQkv KiBBZGQgYSByZWZlcmVuY2UgaWYgd2UncmUgbmV3bHkgZW50ZXJpbmcgdGhlIGFjdGl2ZSBsaXN0 LiAqLwotCWlmIChvYmotPmFjdGl2ZSA9PSAwKQotCQlpOTE1X2dlbV9vYmplY3RfZ2V0KG9iaik7 Ci0Jb2JqLT5hY3RpdmUgfD0gaW50ZWxfZW5naW5lX2ZsYWcoZW5naW5lKTsKLQotCWk5MTVfZ2Vt X2FjdGl2ZV9zZXQoJm9iai0+bGFzdF9yZWFkW2VuZ2luZS0+aWRdLCByZXEpOwotCi0JbGlzdF9t b3ZlX3RhaWwoJnZtYS0+dm1fbGluaywgJnZtYS0+dm0tPmFjdGl2ZV9saXN0KTsKLX0KLQogc3Rh dGljIHZvaWQKIGk5MTVfZ2VtX29iamVjdF9yZXRpcmVfX2ZlbmNlKHN0cnVjdCBpOTE1X2dlbV9h Y3RpdmUgKmFjdGl2ZSwKIAkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVx KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCmluZGV4IGE2NDlmNmVhYmY5 OC4uY2FjZTg1OTk4MjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9jb250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5j CkBAIC03NzUsOCArNzc1LDggQEAgc3RhdGljIGludCBkb19yY3Nfc3dpdGNoKHN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqcmVxKQogCSAqIE1JX1NFVF9DT05URVhUIGluc3RlYWQgb2Ygd2hl biB0aGUgbmV4dCBzZXFubyBoYXMgY29tcGxldGVkLgogCSAqLwogCWlmIChmcm9tICE9IE5VTEwp IHsKLQkJZnJvbS0+ZW5naW5lW1JDU10uc3RhdGUtPmJhc2UucmVhZF9kb21haW5zID0gSTkxNV9H RU1fRE9NQUlOX0lOU1RSVUNUSU9OOwotCQlpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShpOTE1X2dl bV9vYmpfdG9fZ2d0dChmcm9tLT5lbmdpbmVbUkNTXS5zdGF0ZSksIHJlcSk7CisJCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBmcm9tLT5lbmdpbmVbUkNTXS5zdGF0ZTsKKwogCQkv KiBBcyBsb25nIGFzIE1JX1NFVF9DT05URVhUIGlzIHNlcmlhbGl6aW5nLCBpZS4gaXQgZmx1c2hl cyB0aGUKIAkJICogd2hvbGUgZGFtbiBwaXBlbGluZSwgd2UgZG9uJ3QgbmVlZCB0byBleHBsaWNp dGx5IG1hcmsgdGhlCiAJCSAqIG9iamVjdCBkaXJ0eS4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHRo YXQgdGhlIGNvbnRleHQgbXVzdCBiZQpAQCAtNzg0LDEwICs3ODQsMTEgQEAgc3RhdGljIGludCBk b19yY3Nfc3dpdGNoKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQogCQkgKiBhYmxl IHRvIGRlZmVyIGRvaW5nIHRoaXMgdW50aWwgd2Uga25vdyB0aGUgb2JqZWN0IHdvdWxkIGJlCiAJ CSAqIHN3YXBwZWQsIGJ1dCB0aGVyZSBpcyBubyB3YXkgdG8gZG8gdGhhdCB5ZXQuCiAJCSAqLwot CQlmcm9tLT5lbmdpbmVbUkNTXS5zdGF0ZS0+ZGlydHkgPSAxOworCQlvYmotPmJhc2UucmVhZF9k b21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OOworCQlpOTE1X3ZtYV9tb3ZlX3Rv X2FjdGl2ZShpOTE1X2dlbV9vYmpfdG9fZ2d0dChvYmopLCByZXEsIDApOwogCiAJCS8qIG9iaiBp cyBrZXB0IGFsaXZlIHVudGlsIHRoZSBuZXh0IHJlcXVlc3QgYnkgaXRzIGFjdGl2ZSByZWYgKi8K LQkJaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4oZnJvbS0+ZW5naW5lW1JDU10uc3RhdGUpOwor CQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihvYmopOwogCQlpOTE1X2dlbV9jb250ZXh0X3B1 dChmcm9tKTsKIAl9CiAJZW5naW5lLT5sYXN0X2NvbnRleHQgPSBpOTE1X2dlbV9jb250ZXh0X2dl dCh0byk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVm ZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKaW5kZXgg NmZhMTNjNjE4YTZiLi5lMDk5MDgwYjNiNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9leGVjYnVmZmVyLmMKQEAgLTExMTAsNDMgKzExMTAsNjMgQEAgaTkxNV9nZW1fdmFsaWRh dGVfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUs CiAJcmV0dXJuIGN0eDsKIH0KIAordm9pZCBpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3Qg aTkxNV92bWEgKnZtYSwKKwkJCSAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEs CisJCQkgICAgIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmogPSB2bWEtPm9iajsKKwljb25zdCB1bnNpZ25lZCBpZHggPSByZXEtPmVuZ2luZS0+aWQ7 CisKKwlHRU1fQlVHX09OKCFkcm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkpOworCisJ b2JqLT5kaXJ0eSA9IDE7IC8qIGJlIHBhcmFub2lkICAqLworCisJLyogQWRkIGEgcmVmZXJlbmNl IGlmIHdlJ3JlIG5ld2x5IGVudGVyaW5nIHRoZSBhY3RpdmUgbGlzdC4gKi8KKwlpZiAob2JqLT5h Y3RpdmUgPT0gMCkKKwkJaTkxNV9nZW1fb2JqZWN0X2dldChvYmopOworCW9iai0+YWN0aXZlIHw9 IDEgPDwgaWR4OworCWk5MTVfZ2VtX2FjdGl2ZV9zZXQoJm9iai0+bGFzdF9yZWFkW2lkeF0sIHJl cSk7CisKKwlpZiAoZmxhZ3MgJiBFWEVDX09CSkVDVF9XUklURSkgeworCQlpOTE1X2dlbV9hY3Rp dmVfc2V0KCZvYmotPmxhc3Rfd3JpdGUsIHJlcSk7CisKKwkJaW50ZWxfZmJfb2JqX2ludmFsaWRh dGUob2JqLCBPUklHSU5fQ1MpOworCisJCS8qIHVwZGF0ZSBmb3IgdGhlIGltcGxpY2l0IGZsdXNo IGFmdGVyIGEgYmF0Y2ggKi8KKwkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmPSB+STkxNV9HRU1f R1BVX0RPTUFJTlM7CisJfQorCisJaWYgKGZsYWdzICYgRVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0Up IHsKKwkJaTkxNV9nZW1fYWN0aXZlX3NldCgmb2JqLT5sYXN0X2ZlbmNlLCByZXEpOworCQlpZiAo ZmxhZ3MgJiBfX0VYRUNfT0JKRUNUX0hBU19GRU5DRSkgeworCQkJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gcmVxLT5pOTE1OworCQkJbGlzdF9tb3ZlX3RhaWwoJmRldl9wcml2 LT5mZW5jZV9yZWdzW29iai0+ZmVuY2VfcmVnXS5scnVfbGlzdCwKKwkJCQkgICAgICAgJmRldl9w cml2LT5tbS5mZW5jZV9saXN0KTsKKwkJfQorCX0KKworCWxpc3RfbW92ZV90YWlsKCZ2bWEtPnZt X2xpbmssICZ2bWEtPnZtLT5hY3RpdmVfbGlzdCk7Cit9CisKIHN0YXRpYyB2b2lkCiBpOTE1X2dl bV9leGVjYnVmZmVyX21vdmVfdG9fYWN0aXZlKHN0cnVjdCBsaXN0X2hlYWQgKnZtYXMsCiAJCQkJ ICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCiB7Ci0Jc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lID0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfZW5naW5lKHJlcSk7CiAJc3Ry dWN0IGk5MTVfdm1hICp2bWE7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgdm1hcywgZXhl Y19saXN0KSB7Ci0JCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSA9IHZt YS0+ZXhlY19lbnRyeTsKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+ b2JqOwogCQl1MzIgb2xkX3JlYWQgPSBvYmotPmJhc2UucmVhZF9kb21haW5zOwogCQl1MzIgb2xk X3dyaXRlID0gb2JqLT5iYXNlLndyaXRlX2RvbWFpbjsKIAotCQlvYmotPmRpcnR5ID0gMTsgLyog YmUgcGFyYW5vaWQgICovCiAJCW9iai0+YmFzZS53cml0ZV9kb21haW4gPSBvYmotPmJhc2UucGVu ZGluZ193cml0ZV9kb21haW47Ci0JCWlmIChvYmotPmJhc2Uud3JpdGVfZG9tYWluID09IDApCisJ CWlmIChvYmotPmJhc2Uud3JpdGVfZG9tYWluKQorCQkJdm1hLT5leGVjX2VudHJ5LT5mbGFncyB8 PSBFWEVDX09CSkVDVF9XUklURTsKKwkJZWxzZQogCQkJb2JqLT5iYXNlLnBlbmRpbmdfcmVhZF9k b21haW5zIHw9IG9iai0+YmFzZS5yZWFkX2RvbWFpbnM7CiAJCW9iai0+YmFzZS5yZWFkX2RvbWFp bnMgPSBvYmotPmJhc2UucGVuZGluZ19yZWFkX2RvbWFpbnM7CiAKLQkJaTkxNV92bWFfbW92ZV90 b19hY3RpdmUodm1hLCByZXEpOwotCQlpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFpbikgewotCQkJ aTkxNV9nZW1fYWN0aXZlX3NldCgmb2JqLT5sYXN0X3dyaXRlLCByZXEpOwotCi0JCQlpbnRlbF9m Yl9vYmpfaW52YWxpZGF0ZShvYmosIE9SSUdJTl9DUyk7Ci0KLQkJCS8qIHVwZGF0ZSBmb3IgdGhl IGltcGxpY2l0IGZsdXNoIGFmdGVyIGEgYmF0Y2ggKi8KLQkJCW9iai0+YmFzZS53cml0ZV9kb21h aW4gJj0gfkk5MTVfR0VNX0dQVV9ET01BSU5TOwotCQl9Ci0JCWlmIChlbnRyeS0+ZmxhZ3MgJiBF WEVDX09CSkVDVF9ORUVEU19GRU5DRSkgewotCQkJaTkxNV9nZW1fYWN0aXZlX3NldCgmb2JqLT5s YXN0X2ZlbmNlLCByZXEpOwotCQkJaWYgKGVudHJ5LT5mbGFncyAmIF9fRVhFQ19PQkpFQ1RfSEFT X0ZFTkNFKSB7Ci0JCQkJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5l LT5pOTE1OwotCQkJCWxpc3RfbW92ZV90YWlsKCZkZXZfcHJpdi0+ZmVuY2VfcmVnc1tvYmotPmZl bmNlX3JlZ10ubHJ1X2xpc3QsCi0JCQkJCSAgICAgICAmZGV2X3ByaXYtPm1tLmZlbmNlX2xpc3Qp OwotCQkJfQotCQl9Ci0KKwkJaTkxNV92bWFfbW92ZV90b19hY3RpdmUodm1hLCByZXEsIHZtYS0+ ZXhlY19lbnRyeS0+ZmxhZ3MpOwogCQl0cmFjZV9pOTE1X2dlbV9vYmplY3RfY2hhbmdlX2RvbWFp bihvYmosIG9sZF9yZWFkLCBvbGRfd3JpdGUpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fcmVuZGVyX3N0YXRlLmMKaW5kZXggODU4N2RiYzMwMmUwLi5jMGFiZTlhMjIx MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlbmRlcl9zdGF0 ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5jCkBA IC0yMzIsNyArMjMyLDcgQEAgaW50IGk5MTVfZ2VtX3JlbmRlcl9zdGF0ZV9pbml0KHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQogCQkJZ290byBvdXQ7CiAJfQogCi0JaTkxNV92bWFf bW92ZV90b19hY3RpdmUoaTkxNV9nZW1fb2JqX3RvX2dndHQoc28ub2JqKSwgcmVxKTsKKwlpOTE1 X3ZtYV9tb3ZlX3RvX2FjdGl2ZShpOTE1X2dlbV9vYmpfdG9fZ2d0dChzby5vYmopLCByZXEsIDAp Owogb3V0OgogCXJlbmRlcl9zdGF0ZV9maW5pKCZzbyk7CiAJcmV0dXJuIHJldDsKLS0gCjIuOC4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK