From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DEEBBC11F64 for ; Mon, 28 Jun 2021 19:32:25 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 73AB761159 for ; Mon, 28 Jun 2021 19:32:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 73AB761159 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B62036E529; Mon, 28 Jun 2021 19:32:23 +0000 (UTC) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id A06F26E529; Mon, 28 Jun 2021 19:32:22 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10029"; a="187707535" X-IronPort-AV: E=Sophos;i="5.83,306,1616482800"; d="scan'208";a="187707535" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2021 12:32:22 -0700 X-IronPort-AV: E=Sophos;i="5.83,306,1616482800"; d="scan'208";a="641027457" Received: from danielmi-mobl2.ger.corp.intel.com (HELO [10.249.254.242]) ([10.249.254.242]) by fmsmga006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2021 12:32:21 -0700 To: "Ruhl, Michael J" , "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" References: <20210628144626.76126-1-thomas.hellstrom@linux.intel.com> <20210628144626.76126-3-thomas.hellstrom@linux.intel.com> <1cd06e51484c44a985e4a467007d1752@intel.com> <661d41530ae0406b89d07286e0cb384e@intel.com> From: =?UTF-8?Q?Thomas_Hellstr=c3=b6m?= Message-ID: Date: Mon, 28 Jun 2021 21:32:19 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <661d41530ae0406b89d07286e0cb384e@intel.com> Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH v3 2/5] drm/i915/gem: Introduce a selftest for the gem object migrate functionality X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Auld, Matthew" Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Ck9uIDYvMjgvMjEgOToyNyBQTSwgUnVobCwgTWljaGFlbCBKIHdyb3RlOgo+PiAtLS0tLU9yaWdp bmFsIE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLmhlbGxz dHJvbUBsaW51eC5pbnRlbC5jb20+Cj4+IFNlbnQ6IE1vbmRheSwgSnVuZSAyOCwgMjAyMSAzOjE1 IFBNCj4+IFRvOiBSdWhsLCBNaWNoYWVsIEogPG1pY2hhZWwuai5ydWhsQGludGVsLmNvbT47IGlu dGVsLQo+PiBnZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnOyBkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCj4+IENjOiBBdWxkLCBNYXR0aGV3IDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgo+ PiBTdWJqZWN0OiBSZTogW0ludGVsLWdmeF0gW1BBVENIIHYzIDIvNV0gZHJtL2k5MTUvZ2VtOiBJ bnRyb2R1Y2UgYSBzZWxmdGVzdCBmb3IKPj4gdGhlIGdlbSBvYmplY3QgbWlncmF0ZSBmdW5jdGlv bmFsaXR5Cj4+Cj4+IE9uIE1vbiwgMjAyMS0wNi0yOCBhdCAxODo1MyArMDAwMCwgUnVobCwgTWlj aGFlbCBKIHdyb3RlOgo+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+Pj4gRnJvbTog SW50ZWwtZ2Z4IDxpbnRlbC1nZngtYm91bmNlc0BsaXN0cy5mcmVlZGVza3RvcC5vcmc+IE9uIEJl aGFsZgo+Pj4+IE9mCj4+Pj4gVGhvbWFzIEhlbGxzdHLDtm0KPj4+PiBTZW50OiBNb25kYXksIEp1 bmUgMjgsIDIwMjEgMTA6NDYgQU0KPj4+PiBUbzogaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZzsKPj4+PiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+Pj4gQ2M6IFRob21h cyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT47IEF1bGQsCj4+ Pj4gTWF0dGhldwo+Pj4+IDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgo+Pj4+IFN1YmplY3Q6IFtJ bnRlbC1nZnhdIFtQQVRDSCB2MyAyLzVdIGRybS9pOTE1L2dlbTogSW50cm9kdWNlIGEKPj4+PiBz ZWxmdGVzdCBmb3IgdGhlCj4+Pj4gZ2VtIG9iamVjdCBtaWdyYXRlIGZ1bmN0aW9uYWxpdHkKPj4+ Pgo+Pj4+IEZyb206IE1hdHRoZXcgQXVsZCA8bWF0dGhldy5hdWxkQGludGVsLmNvbT4KPj4+Pgo+ Pj4+IEEgc2VsZnRlc3QgZm9yIHRoZSBnZW0gb2JqZWN0IG1pZ3JhdGUgZnVuY3Rpb25hbGl0eS4g U2xpZ2h0bHkKPj4+PiBhZGFwdGVkCj4+Pj4gZnJvbSB0aGUgb3JpZ2luYWwgYnkgTWF0dGhldyB0 byB0aGUgbmV3IGludGVyZmFjZSBhbmQgbmV3IGZpbGwgYmxpdAo+Pj4+IGNvZGUuCj4+Pj4KPj4+ PiBDby1kZXZlbG9wZWQtYnk6IFRob21hcyBIZWxsc3Ryw7ZtCj4+Pj4gPHRob21hcy5oZWxsc3Ry b21AbGludXguaW50ZWwuY29tPgo+Pj4+IFNpZ25lZC1vZmYtYnk6IFRob21hcyBIZWxsc3Ryw7Zt IDx0aG9tYXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBN YXR0aGV3IEF1bGQgPG1hdHRoZXcuYXVsZEBpbnRlbC5jb20+Cj4+Pj4gLS0tCj4+Pj4gZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jwqDCoMKgIHzCoMKgIDEgKwo+Pj4+ IC4uLi9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYyB8IDIzNwo+Pj4+ ICsrKysrKysrKysrKysrKysrKwo+Pj4+IC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZl X3NlbGZ0ZXN0cy5owqAgfMKgwqAgMSArCj4+Pj4gMyBmaWxlcyBjaGFuZ2VkLCAyMzkgaW5zZXJ0 aW9ucygrKQo+Pj4+IGNyZWF0ZSBtb2RlIDEwMDY0NAo+Pj4+IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jCj4+Pj4KPj4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jCj4+Pj4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMKPj4+PiBpbmRleCAxYzE4YmUwNjdi NTguLmZmMTQ3ZmQ1OTg3NCAxMDA2NDQKPj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fb2JqZWN0LmMKPj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fb2JqZWN0LmMKPj4+PiBAQCAtNjQ5LDYgKzY0OSw3IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3MKPj4+PiBpOTE1X2dlbV9vYmplY3RfZnVuY3MgPSB7 Cj4+Pj4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNUKQo+Pj4+ICNpbmNs dWRlICJzZWxmdGVzdHMvaHVnZV9nZW1fb2JqZWN0LmMiCj4+Pj4gI2luY2x1ZGUgInNlbGZ0ZXN0 cy9odWdlX3BhZ2VzLmMiCj4+Pj4gKyNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0 ZS5jIgo+Pj4+ICNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0LmMiCj4+Pj4gI2lu Y2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X2dlbV9jb2hlcmVuY3kuYyIKPj4+PiAjZW5kaWYKPj4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9t aWdyYXRlLmMKPj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9n ZW1fbWlncmF0ZS5jCj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+PiBpbmRleCAwMDAwMDAw MDAwMDAuLmE0MzdiNjZmNjRkOQo+Pj4+IC0tLSAvZGV2L251bGwKPj4+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYwo+Pj4+IEBAIC0w LDAgKzEsMjM3IEBACj4+Pj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPj4+PiAr LyoKPj4+PiArICogQ29weXJpZ2h0IMKpIDIwMjAtMjAyMSBJbnRlbCBDb3Jwb3JhdGlvbgo+Pj4+ ICsgKi8KPj4+PiArCj4+Pj4gKyNpbmNsdWRlICJndC9pbnRlbF9taWdyYXRlLmgiCj4+Pj4gKwo+ Pj4+ICtzdGF0aWMgaW50IGlndF9zbWVtX2NyZWF0ZV9taWdyYXRlKHZvaWQgKmFyZykKPj4+PiAr ewo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBhcmc7Cj4+Pj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBndC0+aTkxNTsKPj4+ PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBpOTE1X2dlbV93d19jdHggd3c7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgaW50IGVyciA9IDA7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoC8qIFN3aXRjaCBvYmpl Y3QgYmFja2luZy1zdG9yZSBvbiBjcmVhdGUgKi8KPj4+PiArwqDCoMKgwqDCoMKgwqBvYmogPSBp OTE1X2dlbV9vYmplY3RfY3JlYXRlX2xtZW0oaTkxNSwgUEFHRV9TSVpFLCAwKTsKPj4+PiArwqDC oMKgwqDCoMKgwqBpZiAoSVNfRVJSKG9iaikpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiBQVFJfRVJSKG9iaik7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGZv cl9pOTE1X2dlbV93dygmd3csIGVyciwgdHJ1ZSkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBlcnIgPSBpOTE1X2dlbV9vYmplY3RfbG9jayhvYmosICZ3dyk7Cj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChlcnIpCj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsKPj4+PiArCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghaTkxNV9nZW1fb2JqZWN0X2Nhbl9taWdy YXRlKG9iaiwKPj4+PiBJTlRFTF9SRUdJT05fU01FTSkpIHsKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IC1FSU5WQUw7Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsKPj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZXJyID0gaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGUob2JqLCAmd3cs Cj4+Pj4gSU5URUxfUkVHSU9OX1NNRU0pOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAoZXJyKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgY29udGludWU7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBlcnIgPSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChlcnIpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChpOTE1X2dlbV9vYmplY3RfY2FuX21pZ3JhdGUob2Jq LAo+Pj4+IElOVEVMX1JFR0lPTl9MTUVNKSkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IC1FSU5WQUw7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2JqKTsK Pj4+PiArwqDCoMKgwqDCoMKgwqB9Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgaTkxNV9nZW1fb2JqZWN0 X3B1dChvYmopOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gZXJyOwo+Pj4+ICt9 Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGlndF9sbWVtX2NyZWF0ZV9taWdyYXRlKHZvaWQgKmFy ZykKPj4+PiArewo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBhcmc7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBndC0+ aTkxNTsKPj4+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq Owo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpOTE1X2dlbV93d19jdHggd3c7Cj4+Pj4gK8Kg wqDCoMKgwqDCoMKgaW50IGVyciA9IDA7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoC8qIFN3 aXRjaCBvYmplY3QgYmFja2luZy1zdG9yZSBvbiBjcmVhdGUgKi8KPj4+PiArwqDCoMKgwqDCoMKg wqBvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGk5MTUsIFBBR0VfU0laRSk7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihvYmopKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gUFRSX0VSUihvYmopOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDC oMKgwqBmb3JfaTkxNV9nZW1fd3coJnd3LCBlcnIsIHRydWUpIHsKPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZXJyID0gaTkxNV9nZW1fb2JqZWN0X2xvY2sob2JqLCAmd3cpOwo+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZXJyKQo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4+Pj4gKwo+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWk5MTVfZ2VtX29iamVjdF9j YW5fbWlncmF0ZShvYmosCj4+Pj4gSU5URUxfUkVHSU9OX0xNRU0pKSB7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSAtRUlOVkFMOwo+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPj4+PiArCj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IGk5MTVfZ2VtX29iamVjdF9taWdyYXRlKG9i aiwgJnd3LAo+Pj4+IElOVEVMX1JFR0lPTl9MTUVNKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKGVycikKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZXJyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZXJyKQo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4+Pj4gKwo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoaTkxNV9nZW1fb2JqZWN0X2Nhbl9taWdy YXRlKG9iaiwKPj4+PiBJTlRFTF9SRUdJT05fU01FTSkpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSAtRUlOVkFMOwo+Pj4+ICsKPj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2Vz KG9iaik7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgfQo+Pj4+ICvCoMKgwqDCoMKgwqDCoGk5MTVfZ2Vt X29iamVjdF9wdXQob2JqKTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGVycjsK Pj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGludCBsbWVtX3BhZ2VzX21pZ3JhdGVfb25lKHN0 cnVjdCBpOTE1X2dlbV93d19jdHggKnd3LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopCj4+Pj4gK3sKPj4+PiArwqDCoMKgwqDCoMKgwqBpbnQgZXJyOwo+Pj4+ ICsKPj4+PiArwqDCoMKgwqDCoMKgwqBlcnIgPSBpOTE1X2dlbV9vYmplY3RfbG9jayhvYmosIHd3 KTsKPj4+PiArwqDCoMKgwqDCoMKgwqBpZiAoZXJyKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gZXJyOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqBlcnIgPSBp OTE1X2dlbV9vYmplY3Rfd2FpdChvYmosCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBJOTE1X1dBSVRfSU5URVJS VVBUSUJMRSB8Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBJOTE1X1dBSVRfUFJJT1JJVFkgfAo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgSTkxNV9XQUlUX0FMTCwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE1BWF9TQ0hFRFVMRV9USU1FT1VU KTsKPj4+PiArwqDCoMKgwqDCoMKgwqBpZiAoZXJyKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gZXJyOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqBpZiAoaTkx NV9nZW1fb2JqZWN0X2lzX2xtZW0ob2JqKSkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoIWk5MTVfZ2VtX29iamVjdF9jYW5fbWlncmF0ZShvYmosCj4+Pj4gSU5URUxf UkVHSU9OX1NNRU0pKSB7Cj4+PiBJIGRvbid0IHNlZSBhbnnCoCB0ZXN0aW5nIG9mIHRoZSBwYXJh bWV0ZXIgbnVtX2FsbG93ZWQuCj4+Pgo+Pj4gSXMgdGhhdCBkb25lIHNvbWV3aGVyZSBlbHNlPwo+ Pj4KPj4+IE1pa2UKPj4gVGhhdCdzIGEgdXNlci1zcGFjZSBzdWJtaXR0ZWQgcGFyYW1ldGVyIG9u bHksIGRpY3RhdGluZyB3aGF0IHJlZ2lvbiB0aGUKPj4gb2JqZWN0IGlzIGFsbG93ZWQgaW4gd2hl biBib3VuZCB0byB0aGUgR1BVLiBJdCdzIG5vdCBleGVyY2lzZWQgaW4gdGhpcwo+PiBzZWxmdGVz dC4KPiBHb3QgaXQuCj4KPiBSZXZpZXdlZC1ieTogTWljaGFlbCBKLiBSdWhsIDxtaWNoYWVsLmou cnVobEBpbnRlbC5jb20+Cj4KPiBNCgpUaGFua3MhCgpUaG9tYXMKCgo+PiBUaGFua3MsCj4+IFRo b21hcwo+PgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK