From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 6/9] drm/i915: add frontbuffer tracking to FBC Date: Mon, 9 Feb 2015 20:05:02 +0100 Message-ID: <20150209190502.GI24485@phenom.ffwll.local> References: <1423500395-1787-1-git-send-email-przanoni@gmail.com> <1423500395-1787-7-git-send-email-przanoni@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-we0-f169.google.com (mail-we0-f169.google.com [74.125.82.169]) by gabe.freedesktop.org (Postfix) with ESMTP id B8F406E58A for ; Mon, 9 Feb 2015 11:04:06 -0800 (PST) Received: by mail-we0-f169.google.com with SMTP id k48so7866478wev.0 for ; Mon, 09 Feb 2015 11:04:05 -0800 (PST) Content-Disposition: inline In-Reply-To: <1423500395-1787-7-git-send-email-przanoni@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Paulo Zanoni Cc: intel-gfx@lists.freedesktop.org, Paulo Zanoni , Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBGZWIgMDksIDIwMTUgYXQgMDI6NDY6MzJQTSAtMDIwMCwgUGF1bG8gWmFub25pIHdy b3RlOgo+IEZyb206IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgo+IAo+ IEtpbGwgdGhlIGJsdC9yZW5kZXIgdHJhY2tpbmcgd2UgY3VycmVudGx5IGhhdmUgYW5kIHVzZSB0 aGUgZnJvbnRidWZmZXIKPiB0cmFja2luZyBpbmZyYXN0cnVjdHVyZS4KPiAKPiBEb24ndCBlbmFi bGUgdGhpbmdzIGJ5IGRlZmF1bHQgeWV0Lgo+IAo+IHYyOiAoUm9kcmlnbykgRml4IHNtYWxsIGNv bmZsaWN0IG9uIHJlYmFzZSBhbmQgdHlwbyBhdCBzdWJqZWN0Lgo+IHYzOiAoUGF1bG8pIFJlYmFz ZSBvbiBSRU5ERVJfQ1MgY2hhbmdlLgo+IHY0OiAoUGF1bG8pIFJlYmFzZS4KPiAKPiBSZXZpZXdl ZC1ieTogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPiAodjIpCj4gU2lnbmVk LW9mZi1ieTogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgo+IFNpZ25lZC1v ZmYtYnk6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgo+IC0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgIHwgICA5ICstLQo+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgICAgIHwgICA2ICstCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2ZiYy5jICAgICAgICAgfCAxMDcgKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mcm9udGJ1ZmZlci5j IHwgIDE0ICstLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jICB8 ICA0MSArLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZl ci5oICB8ICAgMSAtCj4gIDYgZmlsZXMgY2hhbmdlZCwgODAgaW5zZXJ0aW9ucygrKSwgOTggZGVs ZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggZDU3ODIxMS4uZGMw MDJkZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC03ODIsNiArNzgyLDcgQEAg c3RydWN0IGk5MTVfZmJjIHsKPiAgCXVuc2lnbmVkIGxvbmcgdW5jb21wcmVzc2VkX3NpemU7Cj4g IAl1bnNpZ25lZCB0aHJlc2hvbGQ7Cj4gIAl1bnNpZ25lZCBpbnQgZmJfaWQ7Cj4gKwl1bnNpZ25l ZCBpbnQgcG9zc2libGVfZnJhbWVidWZmZXJfYml0czsKPiAgCXN0cnVjdCBpbnRlbF9jcnRjICpj cnRjOwo+ICAJaW50IHk7Cj4gIAo+IEBAIC03OTQsMTQgKzc5NSw2IEBAIHN0cnVjdCBpOTE1X2Zi YyB7Cj4gIAkgKiBwb3NzaWJsZS4gKi8KPiAgCWJvb2wgZW5hYmxlZDsKPiAgCj4gLQkvKiBPbiBn ZW44IHNvbWUgcmluZ3MgY2Fubm9udCBwZXJmb3JtIGZiYyBjbGVhbiBvcGVyYXRpb24gc28gZm9y IG5vdwo+IC0JICogd2UgYXJlIGRvaW5nIHRoaXMgb24gU1cgd2l0aCBtbWlvLgo+IC0JICogVGhp cyB2YXJpYWJsZSB3b3JrcyBpbiB0aGUgb3Bwb3NpdGUgaW5mb3JtYXRpb24gZGlyZWN0aW9uCj4g LQkgKiBvZiByaW5nLT5mYmNfZGlydHkgdGVsbGluZyBzb2Z0d2FyZSBvbiBmcm9udGJ1ZmZlciB0 cmFja2luZwo+IC0JICogdG8gcGVyZm9ybSB0aGUgY2FjaGUgY2xlYW4gb24gc3cgc2lkZS4KPiAt CSAqLwo+IC0JYm9vbCBuZWVkX3N3X2NhY2hlX2NsZWFuOwo+IC0KPiAgCXN0cnVjdCBpbnRlbF9m YmNfd29yayB7Cj4gIAkJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwo+ICAJCXN0cnVjdCBkcm1f Y3J0YyAqY3J0YzsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IGluZGV4IGE3M2QwOTEuLmVk ODVkZjggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IEBAIC0xMTAxLDcgKzExMDEs MTEgQEAgYm9vbCBpbnRlbF9mYmNfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAg dm9pZCBpbnRlbF9mYmNfdXBkYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICB2b2lkIGlu dGVsX2ZiY19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIHZvaWQg aW50ZWxfZmJjX2Rpc2FibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gLXZvaWQgYmR3X2Zi Y19zd19mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgdmFsdWUpOwo+ICt2b2lkIGlu dGVsX2ZiY19pbnZhbGlkYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAr CQkJICB1bnNpZ25lZCBpbnQgZnJvbnRidWZmZXJfYml0cywKPiArCQkJICBlbnVtIGZiX29wX29y aWdpbiBvcmlnaW4pOwo+ICt2b2lkIGludGVsX2ZiY19mbHVzaChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gKwkJICAgICB1bnNpZ25lZCBpbnQgZnJvbnRidWZmZXJfYml0cywg ZW51bSBmYl9vcF9vcmlnaW4gb3JpZ2luKTsKPiAgCj4gIC8qIGludGVsX2hkbWkuYyAqLwo+ICB2 b2lkIGludGVsX2hkbWlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaGRtaV9yZWcs IGVudW0gcG9ydCBwb3J0KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZmJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmMuYwo+IGluZGV4IDczNDFl ODcuLjI2YzRmOWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJj LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmMuYwo+IEBAIC0xNzQsMjkg KzE3NCwxMCBAQCBzdGF0aWMgYm9vbCBnNHhfZmJjX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKPiAgCXJldHVybiBJOTE1X1JFQUQoRFBGQ19DT05UUk9MKSAmIERQRkNfQ1RMX0VOOwo+ ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBzbmJfZmJjX2JsaXRfdXBkYXRlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4gK3N0YXRpYyB2b2lkIGludGVsX2ZiY19udWtlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXUzMiBibHRfZWNvc2twZDsKPiAtCj4gLQkvKiBN YWtlIHN1cmUgYmxpdHRlciBub3RpZmllcyBGQkMgb2Ygd3JpdGVzICovCj4gLQo+IC0JLyogQmxp dHRlciBpcyBwYXJ0IG9mIE1lZGlhIHBvd2Vyd2VsbCBvbiBWTFYuIE5vIGltcGFjdCBvZgo+IC0J ICogaGlzIHBhcmFtIGluIG90aGVyIHBsYXRmb3JtcyBmb3Igbm93ICovCj4gLQlpbnRlbF91bmNv cmVfZm9yY2V3YWtlX2dldChkZXZfcHJpdiwgRk9SQ0VXQUtFX01FRElBKTsKPiAtCj4gLQlibHRf ZWNvc2twZCA9IEk5MTVfUkVBRChHRU42X0JMSVRURVJfRUNPU0tQRCk7Cj4gLQlibHRfZWNvc2tw ZCB8PSBHRU42X0JMSVRURVJfRkJDX05PVElGWSA8PAo+IC0JCUdFTjZfQkxJVFRFUl9MT0NLX1NI SUZUOwo+IC0JSTkxNV9XUklURShHRU42X0JMSVRURVJfRUNPU0tQRCwgYmx0X2Vjb3NrcGQpOwo+ IC0JYmx0X2Vjb3NrcGQgfD0gR0VONl9CTElUVEVSX0ZCQ19OT1RJRlk7Cj4gLQlJOTE1X1dSSVRF KEdFTjZfQkxJVFRFUl9FQ09TS1BELCBibHRfZWNvc2twZCk7Cj4gLQlibHRfZWNvc2twZCAmPSB+ KEdFTjZfQkxJVFRFUl9GQkNfTk9USUZZIDw8Cj4gLQkJCSBHRU42X0JMSVRURVJfTE9DS19TSElG VCk7Cj4gLQlJOTE1X1dSSVRFKEdFTjZfQkxJVFRFUl9FQ09TS1BELCBibHRfZWNvc2twZCk7Cj4g LQlQT1NUSU5HX1JFQUQoR0VONl9CTElUVEVSX0VDT1NLUEQpOwo+IC0KPiAtCWludGVsX3VuY29y ZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfTUVESUEpOwo+ICsJSTkxNV9XUklU RShNU0dfRkJDX1JFTkRfU1RBVEUsIEZCQ19SRU5EX05VS0UpOwo+ICsJUE9TVElOR19SRUFEKE1T R19GQkNfUkVORF9TVEFURSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGlsa19mYmNfZW5hYmxl KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiBAQCAtMjM5LDkgKzIyMCwxMCBAQCBzdGF0aWMgdm9p ZCBpbGtfZmJjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIAkJSTkxNV9XUklURShT TkJfRFBGQ19DVExfU0EsCj4gIAkJCSAgIFNOQl9DUFVfRkVOQ0VfRU5BQkxFIHwgb2JqLT5mZW5j ZV9yZWcpOwo+ICAJCUk5MTVfV1JJVEUoRFBGQ19DUFVfRkVOQ0VfT0ZGU0VULCBjcnRjLT55KTsK PiAtCQlzbmJfZmJjX2JsaXRfdXBkYXRlKGRldik7Cj4gIAl9Cj4gIAo+ICsJaW50ZWxfZmJjX251 a2UoZGV2X3ByaXYpOwo+ICsKPiAgCURSTV9ERUJVR19LTVMoImVuYWJsZWQgZmJjIG9uIHBsYW5l ICVjXG4iLCBwbGFuZV9uYW1lKGludGVsX2NydGMtPnBsYW5lKSk7Cj4gIH0KPiAgCj4gQEAgLTMy MCw3ICszMDIsNyBAQCBzdGF0aWMgdm9pZCBnZW43X2ZiY19lbmFibGUoc3RydWN0IGRybV9jcnRj ICpjcnRjKQo+ICAJCSAgIFNOQl9DUFVfRkVOQ0VfRU5BQkxFIHwgb2JqLT5mZW5jZV9yZWcpOwo+ ICAJSTkxNV9XUklURShEUEZDX0NQVV9GRU5DRV9PRkZTRVQsIGNydGMtPnkpOwo+ICAKPiAtCXNu Yl9mYmNfYmxpdF91cGRhdGUoZGV2KTsKPiArCWludGVsX2ZiY19udWtlKGRldl9wcml2KTsKPiAg Cj4gIAlEUk1fREVCVUdfS01TKCJlbmFibGVkIGZiYyBvbiBwbGFuZSAlY1xuIiwgcGxhbmVfbmFt ZShpbnRlbF9jcnRjLT5wbGFuZSkpOwo+ICB9Cj4gQEAgLTM0MCwxOSArMzIyLDYgQEAgYm9vbCBp bnRlbF9mYmNfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJcmV0dXJuIGRldl9w cml2LT5mYmMuZW5hYmxlZDsKPiAgfQo+ICAKPiAtdm9pZCBiZHdfZmJjX3N3X2ZsdXNoKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCj4gLQlpZiAoIUlTX0dFTjgo ZGV2KSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JaWYgKCFpbnRlbF9mYmNfZW5hYmxlZChkZXYpKQo+ IC0JCXJldHVybjsKPiAtCj4gLQlJOTE1X1dSSVRFKE1TR19GQkNfUkVORF9TVEFURSwgdmFsdWUp Owo+IC19Cj4gLQo+ICBzdGF0aWMgdm9pZCBpbnRlbF9mYmNfd29ya19mbihzdHJ1Y3Qgd29ya19z dHJ1Y3QgKl9fd29yaykKPiAgewo+ICAJc3RydWN0IGludGVsX2ZiY193b3JrICp3b3JrID0KPiBA QCAtNjU4LDYgKzYyNyw2MyBAQCBvdXRfZGlzYWJsZToKPiAgCWk5MTVfZ2VtX3N0b2xlbl9jbGVh bnVwX2NvbXByZXNzaW9uKGRldik7Cj4gIH0KPiAgCj4gK3ZvaWQgaW50ZWxfZmJjX2ludmFsaWRh dGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkgIHVuc2lnbmVkIGlu dCBmcm9udGJ1ZmZlcl9iaXRzLAo+ICsJCQkgIGVudW0gZmJfb3Bfb3JpZ2luIG9yaWdpbikKPiAr ewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7Cj4gKwl1bnNpZ25l ZCBpbnQgZmJjX2JpdHM7Cj4gKwo+ICsJaWYgKG9yaWdpbiA9PSBPUklHSU5fR1RUKQo+ICsJCXJl dHVybjsKPiArCj4gKwlpZiAoZGV2X3ByaXYtPmZiYy5lbmFibGVkKQo+ICsJCWZiY19iaXRzID0g SU5URUxfRlJPTlRCVUZGRVJfUFJJTUFSWShkZXZfcHJpdi0+ZmJjLmNydGMtPnBpcGUpOwo+ICsJ ZWxzZSBpZiAoZGV2X3ByaXYtPmZiYy5mYmNfd29yaykKPiArCQlmYmNfYml0cyA9IElOVEVMX0ZS T05UQlVGRkVSX1BSSU1BUlkoCj4gKwkJCXRvX2ludGVsX2NydGMoZGV2X3ByaXYtPmZiYy5mYmNf d29yay0+Y3J0YyktPnBpcGUpOwo+ICsJZWxzZQo+ICsJCWZiY19iaXRzID0gZGV2X3ByaXYtPmZi Yy5wb3NzaWJsZV9mcmFtZWJ1ZmZlcl9iaXRzOwo+ICsKPiArCWlmICgoZmJjX2JpdHMgJiBmcm9u dGJ1ZmZlcl9iaXRzKSA9PSAwKQo+ICsJCXJldHVybjsKClRoZSBmYmMgY29kZSBzaG91bGQgc3Rv cmUgYWxsIHRoZSBjdXJyZW50bHkgaW52YWxpZGF0ZSBmYl9iaXRzIHNvbWV3aGVyZSwKc28gdGhh dCBpdCBrbm93cyB3aGVuIGl0IGNhbiByZWVuYWJsZSBmYmMuIENvcHlwYXN0aW5nIGZyb20gdGhl IHBzciBjb2RlOgoKZGV2X3ByaXYtPmZiYy5idXN5X2Zyb250YnVmZmVyX2JpdHMgfD0gZmJjX2Jp dHMgJiBmcm9udGJ1ZmZlcl9iaXRzOwoKT2YgY291cnNlIHRoZXJlIHNob3VsZCBvbmx5IGV2ZXIg YmUgb25lIGJpdCAoZm9yIHRoZSBwcmltYXJ5IHBsYW5lIG9uIHRoZQpjcnRjIGZiYyBpcyBlbmFi bGVkIG9uKSwgc28gYSBib29sZWFuIHNob3VsZCBiZSBlbm91Z2guIEJ1dCB3ZSBjb3VsZCB1c2UK dGhlIGFkZGl0aW9uYWwgYml0cyBmb3IgYSBiaXQgb2YgY29uc2lzdGVuY3kgY2hlY2tzLgoKPiAr Cj4gKwlpbnRlbF9mYmNfZGlzYWJsZShkZXYpOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2ZiY19m bHVzaChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJICAgICB1bnNpZ25l ZCBpbnQgZnJvbnRidWZmZXJfYml0cywKPiArCQkgICAgIGVudW0gZmJfb3Bfb3JpZ2luIG9yaWdp bikKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7Cj4gKwl1 bnNpZ25lZCBpbnQgZmJjX2JpdHMgPSAwOwo+ICsJYm9vbCBmYmNfZW5hYmxlZDsKPiArCj4gKwlp ZiAoZGV2X3ByaXYtPmZiYy5lbmFibGVkKQo+ICsJCWZiY19iaXRzID0gSU5URUxfRlJPTlRCVUZG RVJfUFJJTUFSWShkZXZfcHJpdi0+ZmJjLmNydGMtPnBpcGUpOwo+ICsJZWxzZQo+ICsJCWZiY19i aXRzID0gZGV2X3ByaXYtPmZiYy5wb3NzaWJsZV9mcmFtZWJ1ZmZlcl9iaXRzOwo+ICsKPiArCS8q IFRoZXNlIGFyZSBub3QgdGhlIHBsYW5lcyB5b3UgYXJlIGxvb2tpbmcgZm9yLiAqLwo+ICsJaWYg KChmcm9udGJ1ZmZlcl9iaXRzICYgZmJjX2JpdHMpID09IDApCj4gKwkJcmV0dXJuOwo+ICsKPiAr CWZiY19lbmFibGVkID0gaW50ZWxfZmJjX2VuYWJsZWQoZGV2KTsKPiArCj4gKwlpZiAoKGRldl9w cml2LT5mYl90cmFja2luZy5idXN5X2JpdHMgJiBmcm9udGJ1ZmZlcl9iaXRzICYKPiArCSAgICAg ZmJjX2JpdHMpID09IDApIHsKPiArCQlpZiAoZmJjX2VuYWJsZWQpIHsKPiArCQkJaWYgKG9yaWdp biA9PSBPUklHSU5fQ1MgfHwgb3JpZ2luID09IE9SSUdJTl9DUFUpCj4gKwkJCQlpbnRlbF9mYmNf bnVrZShkZXZfcHJpdik7Cj4gKwkJfSBlbHNlIHsKPiArCQkJaW50ZWxfZmJjX3VwZGF0ZShkZXYp Owo+ICsJCX0KCk9rLCBoZXJlIGNvbWVzIHRoZSBnaXN0IG9mIHdoYXQgbmVlZHMgdG8gYmUgY2hh bmdlZC4KLSBZb3UgbmVlZCB0byBjaGVjayB0aGUgZmJjLXByaXZhdGUgY29weSBvZiBidXN5IGJp dHMsIG90aGVyd2lzZSB0aGUKICBmaWx0ZXJpbmcgZm9yIHRoZSBHVFQgb3JpZ2luIHdvbid0IHdv cmsuIFdlIHdhbnQgdG8ga2VlcCBmYmMgZW5hYmxlZCAob3IKICByZW5hYmxlKSBldmVuIHdoZW4g Z3R0IGlzIHN0aWxsIGludmFsaWRhdGVkIHNvbWVob3cuCi0gVGhhdCBtZWFucyB3aGVuIHlvdSBk ZWNpZGUgdG8gcmVlbmFibGUgZmJjIChpLmUuCiAgZGV2X3ByaXYtPmZiYy5idXN5X2Zyb250YnVm ZmVyX2JpdHMgPT0gMCkgdGhlbiBpdCdzIGd1cmFudGVlZCB0aGF0IGZiYwogIGlzIGFscmVhZHkg ZGlzYWJsZWQsIGFuZCBhIHBsYWluIGludGVsX2ZiY19lbmFibGUgaXMgZ29vZCBlbm91Z2guCi0g bnVrZSBpbiBmbHVzaCBpcyBub3QgZW5vdWdoIGFuZCB0b28gbGF0ZSAtIHRoZSBmcm9udGJ1ZmZl ciByZW5kZXJpbmcKICBjb3VsZCBoYXZlIGJlZW4gZ29pbmcgb24gZm9yIGEgd2hpbGUgc2luY2Ug eW91J3ZlIHNlZW4gdGhlIGludmFsaWRhdGUsCiAgdGhlIGZsdXNoIG9ubHkgaGFwcGVucyB3aGVu IGV2ZXJ5dGhpbmcgaXMgcXVpZXQgYWdhaW4uIEEgbnVrZSBhdCB0aGUgZW5kCiAgaXMgaGVuY2Ug dG9vIGxhdGUgYW5kIG5vdCBlbm91Z2guCgpUaGlzIHdheSB5b3UgZG9uJ3QgbmVlZCB0aGUgb3Jp Z2luIGluZm9ybWF0aW9uIGluIHRoZSBmbHVzaCBoZWxwZXIuCgpPbmUgYml0IEknbSBub3QgeWV0 IHN1cmUgb2ZmIGlzIHdoZXJlIHRvIHB1dCBpbnRlbF9mYmNfdXBkYXRlIHRvCnJlYWxsb2NhdGUg YnVmZmVycyBvdmVyIHBhZ2VmbGlwcy4gVGhlIGNvbXBsaWNhdGlvbiBzaW5jZSB5b3UndmUgd3Jp dHRlbgp0aGVzZSBwYXRjaGVzIGlzIHRoZSBhdG9taWMgZmxpcHMsIHdoaWNoIGNhbiBub3cgYXN5 bmNocm9ub3VzbHkgdXBkYXRlIHRoZQpwcmltYXJ5IHBsYW5lIChhbmQgY2hhbmdlIHRoZSBwaXhl bCBmb3JtYXQpLCBidXQgZGlmZmVyZW50IGZyb20gdGhlCnBhZ2VmbGlwIGNvZGUgdGhlIGF0b21p YyBwYXRocyBkb24ndCBkaXNhYmxlL2VuYWJsZSBmYmMgb3ZlciBhIGZsaXAuCgpXaGljaCBtZWFu cyB0aGF0IGRvaW5nIHRoZSBpbnRlbF9mYmNfdXBkYXRlIGp1c3Qgc29tZXdoZXJlIGluIGJldHdl ZW4gdGhlCmRpc2FibGUgYW5kIGVuYWJsZSB3b24ndCBiZSBlbm91Z2ggdG8ga2VlcCBldmVyeXRo aW5nIGluIHN5bmMuCgpJIHRoaW5rIHdoYXQgd2UgdWx0aW1hdGVseSBuZWVkIGlzIGEgYml0IG9m IGxvZ2ljIGluIHRoZSBhdG9taWNfY2hlY2sgcGFydAp3aGljaCBkZWNpZGVzIHdoZXRoZXIgZmJj IG11c3QgYmUgZGlzYWJsZWQvZW5hYmxlZCAoZS5nLiB3aGVuIHdlIG5lZWQgdG8KcmVhbGxvYyB0 aGUgY2ZiKSBhcm91bmQgdGhlIHVwZGF0ZS4gQW5kIHRoZW4gd2UnbGwgcGxhY2UgZXhwbGljaXQK aW50ZWxfZmJjX2Rpc2FibGUvZW5hYmxlIGNhbGxzIGluIHRoZSBhdG9taWNfYmVnaW4vZmx1c2gg Y2FsbGJhY2tzLgoKVGhlIG90aGVyIGNhc2UgaXMganVzdCB1cGRhdGluZyB0aGUgZ3R0IGZlbmNl IGRhdGEuIEF0IGxlYXN0IG9uIGc0eCsgd2UKc2hvdWxkIHRyeSBub3QgdG8gZGlzYWJsZSBmYmMg YnV0IGtlZXAgaXQgZ29pbmcgb3ZlciBwYWdlZmxpcHMuIFdoaWNoCm1lYW5zIHRoZXJlIGNvdWxk IGJlIGludGVyZXN0aW5nIHJhY2VzIGJldHdlZW4gdGhlIGZsaXAgYW5kIGd0dCB3cml0ZXMKcmln aHQgYWZ0ZXJ3YXJkcyAod2hpY2ggYXJlbid0IHN5bmNocm9uaXplZCBpbiBhbnkgd2F5KS4KCkkg c2VlIHR3byBvcHRpb25zOgotIFdlIHVwZGF0ZSB0aGUgZmVuY2UgcmVnaXN0ZXIgd2hlbmV2ZXIg d2Ugd2FudCwgYnV0IHdoaWxlIGEgcGFnZWZsaXAgaXMKICBwZW5kaW5nIHdlIGRvbid0IGZpbHRl ciBvdXQgZ3R0IGludmFsaWRhdGVzIChzaW5jZSB3ZSBraW5kYSBkb24ndCBrbm93CiAgd2hldGhl ciB0aGUgaHcgaW52YWxpZGF0ZSB3aWxsIGhpdCBiZWZvcmUvYWZ0ZXIgdGhlIGZsaXAgaGFwcGVu cykuIFRoaXMKICBvbmUgaXMgYSBiaXQgdHJpY2t5LCB3ZSdkIG5lZWQgdG8gYWRkIGZiYyBjYWxs YmFja3MgdG8KICBpbnRlbF9mcm9udGJ1ZmZlcl9mbGlwX3ByZXBhcmUvY29tcGxldGUuCi0gV2Ug ZG8gYSBtYW51YWwgbnVrZSBhZnRlciBlYWNoIGZsaXAgYnkgYWRkaW5nIGNhbGxzIHRvIGludGVs X2ZiY19mbGlwIHRvCiAgaW50ZWxfZnJvbnRidWZmZXJfZmxpcCBhbmQgZmxpcF9jb21wbGV0ZS4g VGhpcyBvbmUgaGFzIHRoZSBkb3duc2lkZSB0aGF0CiAgcHJvcGVyIHVzZXJzcGFjZSB3aGljaCBk b2Vzbid0IGRvIGd0dCB3cml0ZXMgd2lsbCBnZXQgaHVydCBieSBudWtpbmcgdGhlCiAgZmJjIHR3 aWNlOiBPbmNlIGZvciB0aGUgZmxpcCBhbmQgb25jZSByaWdodCBhZnRlcndhcmRzLgoKQ2hlZXJz LCBEYW5pZWwKPiArCX0gZWxzZSB7Cj4gKwkJaWYgKGZiY19lbmFibGVkKQo+ICsJCQlpbnRlbF9m YmNfZGlzYWJsZShkZXYpOwo+ICsJfQo+ICt9Cj4gKwo+ICAvKioKPiAgICogaW50ZWxfZmJjX2lu aXQgLSBJbml0aWFsaXplIEZCQwo+ICAgKiBAZGV2X3ByaXY6IHRoZSBpOTE1IGRldmljZQo+IEBA IC02NjYsMTIgKzY5MiwxOSBAQCBvdXRfZGlzYWJsZToKPiAgICovCj4gIHZvaWQgaW50ZWxfZmJj X2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4gKwllbnVtIHBp cGUgcGlwZTsKPiArCj4gIAlpZiAoIUhBU19GQkMoZGV2X3ByaXYpKSB7Cj4gIAkJZGV2X3ByaXYt PmZiYy5lbmFibGVkID0gZmFsc2U7Cj4gIAkJZGV2X3ByaXYtPmZiYy5ub19mYmNfcmVhc29uID0g RkJDX1VOU1VQUE9SVEVEOwo+ICAJCXJldHVybjsKPiAgCX0KPiAgCj4gKwkvKiBUT0RPOiBzb21l IHBsYXRmb3JtcyBoYXZlIEZCQyB0aWVkIHRvIGEgc3BlY2lmaWMgcGxhbmUhICovCj4gKwlmb3Jf ZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKQo+ICsJCWRldl9wcml2LT5mYmMucG9zc2libGVfZnJh bWVidWZmZXJfYml0cyB8PQo+ICsJCQkJSU5URUxfRlJPTlRCVUZGRVJfUFJJTUFSWShwaXBlKTsK PiArCj4gIAlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA3KSB7Cj4gIAkJZGV2X3By aXYtPmRpc3BsYXkuZmJjX2VuYWJsZWQgPSBpbGtfZmJjX2VuYWJsZWQ7Cj4gIAkJZGV2X3ByaXYt PmRpc3BsYXkuZW5hYmxlX2ZiYyA9IGdlbjdfZmJjX2VuYWJsZTsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZnJvbnRidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Zyb250YnVmZmVyLmMKPiBpbmRleCAwYTc3Mzk4MS4uMmZjMDU5YyAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mcm9udGJ1ZmZlci5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZnJvbnRidWZmZXIuYwo+IEBAIC0xMTgsOCArMTE4 LDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfbWFya19mYl9idXN5KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAgCQlpbnRlbF9pbmNyZWFzZV9wbGxjbG9jayhkZXYs IHBpcGUpOwo+IC0JCWlmIChyaW5nICYmIGludGVsX2ZiY19lbmFibGVkKGRldikpCj4gLQkJCXJp bmctPmZiY19kaXJ0eSA9IHRydWU7Cj4gIAl9Cj4gIH0KPiAgCj4gQEAgLTE2MCw2ICsxNTgsNyBA QCB2b2lkIGludGVsX2ZiX29ial9pbnZhbGlkYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCj4gIAo+ICAJaW50ZWxfcHNyX2ludmFsaWRhdGUoZGV2LCBvYmotPmZyb250YnVmZmVy X2JpdHMpOwo+ICAJaW50ZWxfZWRwX2RycnNfaW52YWxpZGF0ZShkZXYsIG9iai0+ZnJvbnRidWZm ZXJfYml0cyk7Cj4gKwlpbnRlbF9mYmNfaW52YWxpZGF0ZShkZXZfcHJpdiwgb2JqLT5mcm9udGJ1 ZmZlcl9iaXRzLCBvcmlnaW4pOwo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtMTg5LDE2ICsxODgsNyBA QCB2b2lkIGludGVsX2Zyb250YnVmZmVyX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4g IAo+ICAJaW50ZWxfZWRwX2RycnNfZmx1c2goZGV2LCBmcm9udGJ1ZmZlcl9iaXRzKTsKPiAgCWlu dGVsX3Bzcl9mbHVzaChkZXYsIGZyb250YnVmZmVyX2JpdHMpOwo+IC0KPiAtCS8qCj4gLQkgKiBG SVhNRTogVW5jb25kaXRpb25hbCBmYmMgZmx1c2hpbmcgaGVyZSBpcyBhIHJhdGhlciBncm9zcyBo YWNrIGFuZAo+IC0JICogbmVlZHMgdG8gYmUgcmV3b3JrZWQgaW50byBhIHByb3BlciBmcm9udGJ1 ZmZlciB0cmFja2luZyBzY2hlbWUgbGlrZQo+IC0JICogcHNyIGVtcGxveXMuCj4gLQkgKi8KPiAt CWlmIChkZXZfcHJpdi0+ZmJjLm5lZWRfc3dfY2FjaGVfY2xlYW4pIHsKPiAtCQlkZXZfcHJpdi0+ ZmJjLm5lZWRfc3dfY2FjaGVfY2xlYW4gPSBmYWxzZTsKPiAtCQliZHdfZmJjX3N3X2ZsdXNoKGRl diwgRkJDX1JFTkRfQ0FDSEVfQ0xFQU4pOwo+IC0JfQo+ICsJaW50ZWxfZmJjX2ZsdXNoKGRldl9w cml2LCBmcm9udGJ1ZmZlcl9iaXRzLCBvcmlnaW4pOwo+ICB9Cj4gIAo+ICAvKioKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4gaW5kZXggNTczYjgwZi4uNDhkZDhhMiAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPiBAQCAtMzE3LDI5 ICszMTcsNiBAQCBnZW43X3JlbmRlcl9yaW5nX2NzX3N0YWxsX3dhKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcpCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBnZW43X3Jp bmdfZmJjX2ZsdXNoKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsIHUzMiB2YWx1ZSkKPiAt ewo+IC0JaW50IHJldDsKPiAtCj4gLQlpZiAoIXJpbmctPmZiY19kaXJ0eSkKPiAtCQlyZXR1cm4g MDsKPiAtCj4gLQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDYpOwo+IC0JaWYgKHJldCkK PiAtCQlyZXR1cm4gcmV0Owo+IC0JLyogV2FGYmNOdWtlT24zREJsdDppdmIvaHN3ICovCj4gLQlp bnRlbF9yaW5nX2VtaXQocmluZywgTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSkpOwo+IC0JaW50ZWxf cmluZ19lbWl0KHJpbmcsIE1TR19GQkNfUkVORF9TVEFURSk7Cj4gLQlpbnRlbF9yaW5nX2VtaXQo cmluZywgdmFsdWUpOwo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX1NUT1JFX1JFR0lTVEVS X01FTSgxKSB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVCk7Cj4gLQlpbnRlbF9yaW5nX2VtaXQocmlu ZywgTVNHX0ZCQ19SRU5EX1NUQVRFKTsKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCByaW5nLT5z Y3JhdGNoLmd0dF9vZmZzZXQgKyAyNTYpOwo+IC0JaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+ IC0KPiAtCXJpbmctPmZiY19kaXJ0eSA9IGZhbHNlOwo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4g IHN0YXRpYyBpbnQKPiAgZ2VuN19yZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nLAo+ICAJCSAgICAgICB1MzIgaW52YWxpZGF0ZV9kb21haW5zLCB1MzIgZmx1c2hf ZG9tYWlucykKPiBAQCAtMzk4LDkgKzM3NSw2IEBAIGdlbjdfcmVuZGVyX3JpbmdfZmx1c2goc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAgCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsK PiAgCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKPiAgCj4gLQlpZiAoIWludmFsaWRhdGVfZG9t YWlucyAmJiBmbHVzaF9kb21haW5zKQo+IC0JCXJldHVybiBnZW43X3JpbmdfZmJjX2ZsdXNoKHJp bmcsIEZCQ19SRU5EX05VS0UpOwo+IC0KPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IEBAIC00NjIs OSArNDM2LDYgQEAgZ2VuOF9yZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nLAo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCWlmICghaW52YWxp ZGF0ZV9kb21haW5zICYmIGZsdXNoX2RvbWFpbnMpCj4gLQkJcmV0dXJuIGdlbjdfcmluZ19mYmNf Zmx1c2gocmluZywgRkJDX1JFTkRfTlVLRSk7Cj4gLQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4g QEAgLTIzODIsNyArMjM1Myw2IEBAIHN0YXRpYyBpbnQgZ2VuNl9yaW5nX2ZsdXNoKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gIAkJCSAgIHUzMiBpbnZhbGlkYXRlLCB1MzIgZmx1c2gp Cj4gIHsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICAJdWludDMy X3QgY21kOwo+ICAJaW50IHJldDsKPiAgCj4gQEAgLTIzOTEsNyArMjM2MSw3IEBAIHN0YXRpYyBp bnQgZ2VuNl9yaW5nX2ZsdXNoKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gIAkJcmV0 dXJuIHJldDsKPiAgCj4gIAljbWQgPSBNSV9GTFVTSF9EVzsKPiAtCWlmIChJTlRFTF9JTkZPKHJp bmctPmRldiktPmdlbiA+PSA4KQo+ICsJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDgpCj4g IAkJY21kICs9IDE7Cj4gIAkvKgo+ICAJICogQnNwZWMgdm9sIDFjLjMgLSBibGl0dGVyIGVuZ2lu ZSBjb21tYW5kIHN0cmVhbWVyOgo+IEBAIC0yNDA0LDcgKzIzNzQsNyBAQCBzdGF0aWMgaW50IGdl bjZfcmluZ19mbHVzaChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICAJCQlNSV9GTFVT SF9EV19PUF9TVE9SRURXOwo+ICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIGNtZCk7Cj4gIAlpbnRl bF9yaW5nX2VtaXQocmluZywgSTkxNV9HRU1fSFdTX1NDUkFUQ0hfQUREUiB8IE1JX0ZMVVNIX0RX X1VTRV9HVFQpOwo+IC0JaWYgKElOVEVMX0lORk8ocmluZy0+ZGV2KS0+Z2VuID49IDgpIHsKPiAr CWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA4KSB7Cj4gIAkJaW50ZWxfcmluZ19lbWl0KHJp bmcsIDApOyAvKiB1cHBlciBhZGRyICovCj4gIAkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOyAv KiB2YWx1ZSAqLwo+ICAJfSBlbHNlICB7Cj4gQEAgLTI0MTMsMTMgKzIzODMsNiBAQCBzdGF0aWMg aW50IGdlbjZfcmluZ19mbHVzaChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICAJfQo+ ICAJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+ICAKPiAtCWlmICghaW52YWxpZGF0ZSAmJiBm bHVzaCkgewo+IC0JCWlmIChJU19HRU43KGRldikpCj4gLQkJCXJldHVybiBnZW43X3JpbmdfZmJj X2ZsdXNoKHJpbmcsIEZCQ19SRU5EX0NBQ0hFX0NMRUFOKTsKPiAtCQllbHNlIGlmIChJU19CUk9B RFdFTEwoZGV2KSkKPiAtCQkJZGV2X3ByaXYtPmZiYy5uZWVkX3N3X2NhY2hlX2NsZWFuID0gdHJ1 ZTsKPiAtCX0KPiAtCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcmluZ2J1ZmZlci5oCj4gaW5kZXggNzE0ZjNmZC4uZjhkYzBjNiAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiBAQCAtMjY3LDcgKzI2Nyw2IEBAIHN0 cnVjdCAgaW50ZWxfZW5naW5lX2NzIHsKPiAgCSAqLwo+ICAJc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpvdXRzdGFuZGluZ19sYXp5X3JlcXVlc3Q7Cj4gIAlib29sIGdwdV9jYWNoZXNfZGly dHk7Cj4gLQlib29sIGZiY19kaXJ0eTsKPiAgCj4gIAl3YWl0X3F1ZXVlX2hlYWRfdCBpcnFfcXVl dWU7Cj4gIAo+IC0tIAo+IDIuMS40Cj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVy LCBJbnRlbCBDb3Jwb3JhdGlvbgorNDEgKDApIDc5IDM2NSA1NyA0OCAtIGh0dHA6Ly9ibG9nLmZm d2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==