From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH v2 6/6] drm/i915: expose rcs topology through query uAPI Date: Fri, 12 Jan 2018 14:04:44 +0000 Message-ID: References: <20180111195352.27193-1-lionel.g.landwerlin@intel.com> <20180111195352.27193-7-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 7206D6E762 for ; Fri, 12 Jan 2018 14:04:47 +0000 (UTC) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMTIvMDEvMTggMTI6MjcsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+Cj4gT24gMTEvMDEvMjAx OCAxOTo1MywgTGlvbmVsIExhbmR3ZXJsaW4gd3JvdGU6Cj4+IFdpdGggdGhlIGludHJvZHVjdGlv biBvZiBhc3ltbWV0cmljIHNsaWNlcyBpbiBDTkwsIHdlIGNhbm5vdCByZWx5IG9uCj4+IHRoZSBw cmV2aW91cyBTVUJTTElDRV9NQVNLIGdldHBhcmFtIHRvIHRlbGwgdXNlcnNwYWNlIHdoYXQgc3Vi c2xpY2VzCj4+IGFyZSBhdmFpbGFibGUuIEhlcmUgd2UgaW50cm9kdWNlIGEgbW9yZSBkZXRhaWxl ZCB3YXkgb2YgcXVlcnlpbmcgdGhlCj4+IEdlbidzIEdQVSB0b3BvbG9neSB0aGF0IGRvZXNuJ3Qg YWdncmVnYXRlIG51bWJlcnMuCj4+Cj4+IFRoaXMgaXMgZXNzZW50aWFsIGZvciBtb25pdG9yaW5n IHBhcnRzIG9mIHRoZSBHUFUgd2l0aCB0aGUgT0EgdW5pdCwKPj4gYmVjYXVzZSBjb3VudGVycyBu ZWVkIHRvIGJlIG5vcm1hbGl6ZWQgdG8gdGhlIG51bWJlciBvZgo+PiBFVXMvc3Vic2xpY2VzL3Ns aWNlcy4gVGhlIGN1cnJlbnQgYWdncmVnYXRlZCBudW1iZXJzIGxpa2UgRVVfVE9UQUwgZG8KPj4g bm90IGdpdmVzIHVzIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24uCj4+Cj4+IEFzIGEgYm9udXMgd2Ug Y2FuIGRyYXcgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBHUFUgOgo+Pgo+PiDCoMKgwqDCoMKgwqDC oMKgIGh0dHBzOi8vaW1ndXIuY29tL2EvdnVxcGEKPj4KPj4gdjI6IFJlbmFtZSB1YXBpIHN0cnVj dCBzL19tYXNrL19pbmZvLyAoVHZydGtvKQo+PiDCoMKgwqDCoCBSZXBvcnQgbWF4X3NsaWNlL3N1 YnNsaWNlL2V1c19wZXJfc3Vic2xpY2UgcmF0aGVyIHRoYW4gc3RyaWRlcyAKPj4gKFR2cnRrbykK Pj4gwqDCoMKgwqAgQWRkIHVhcGkgbWFjcm9zIHRvIHJlYWQgZGF0YSBmcm9tICpfaW5mbyBzdHJ1 Y3RzIChUdnJ0a28pCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IExpb25lbCBMYW5kd2VybGluIDxsaW9u ZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4KPj4gLS0tCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcXVlcnkuY8KgwqDCoMKgwqDCoCB8IDEzMyAKPj4gKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcXVlcnlfaW5m by5jIHzCoCA4OCArKysrKysrKysrKysrKysrKysrKysKPj4gwqAgaW5jbHVkZS91YXBpL2RybS9p OTE1X2RybS5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCA1MSArKysrKysrKysrKysKPj4g wqAgMyBmaWxlcyBjaGFuZ2VkLCAyNzIgaW5zZXJ0aW9ucygrKQo+PiDCoCBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcXVlcnlfaW5mby5jCj4+Cj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3F1ZXJ5LmMgCj4+IGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9xdWVyeS5jCj4+IGluZGV4IDU2OTRjZmVhNDU1My4uMWQ5ZjVhMTUz MjNjIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3F1ZXJ5LmMKPj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9xdWVyeS5jCj4+IEBAIC0yNSw4ICsyNSwx MjggQEAKPj4gwqAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4+IMKgICNpbmNsdWRlIDx1YXBpL2Ry bS9pOTE1X2RybS5oPgo+PiDCoCArc3RhdGljIGludCBxdWVyeV9zbGljZXNfaW5mbyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfaXRlbSAqcXVlcnlfaXRlbSkKPj4gK3sKPj4g K8KgwqDCoCBjb25zdCBzdHJ1Y3Qgc3NldV9kZXZfaW5mbyAqc3NldSA9ICZJTlRFTF9JTkZPKGRl dl9wcml2KS0+c3NldTsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfc2xpY2VzX2lu Zm8gc2xpY2VzX2luZm87Cj4+ICvCoMKgwqAgdTMyIGRhdGFfbGVuZ3RoLCBsZW5ndGg7Cj4+ICsK Pj4gK8KgwqDCoCBpZiAoc3NldS0+bWF4X3NsaWNlcyA9PSAwKQo+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FTk9ERVY7Cj4+ICsKPj4gK8KgwqDCoCBkYXRhX2xlbmd0aCA9IHNpemVvZih1OCk7 Cj4KPiBzaXplb2Yoc3NldS0+c2xpY2VfbWFzaykgPwoKU3VyZS4KCj4KPj4gK8KgwqDCoCBsZW5n dGggPSBzaXplb2Yoc2xpY2VzX2luZm8pICsgZGF0YV9sZW5ndGg7Cj4+ICsKPj4gK8KgwqDCoCAv Kgo+PiArwqDCoMKgwqAgKiBJZiB3ZSBldmVyIGNoYW5nZSB0aGUgaW50ZXJuYWwgc2xpY2UgbWFz ayBkYXRhIHR5cGUsIHdlJ2xsIAo+PiBuZWVkIHRvCj4+ICvCoMKgwqDCoCAqIHVwZGF0ZSB0aGlz IGZ1bmN0aW9uLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBCVUlMRF9CVUdfT04oc2l6ZW9m KHU4KSAhPSBzaXplb2Yoc3NldS0+c2xpY2VfbWFzaykpOwo+PiArCj4+ICvCoMKgwqAgaWYgKHF1 ZXJ5X2l0ZW0tPmxlbmd0aCA9PSAwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBxdWVyeV9pdGVtLT5s ZW5ndGggPSBsZW5ndGg7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gK8KgwqDCoCB9 Cj4+ICsKPj4gK8KgwqDCoCBpZiAocXVlcnlfaXRlbS0+bGVuZ3RoICE9IGxlbmd0aCkKPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgbWVtc2V0KCZzbGlj ZXNfaW5mbywgMCwgc2l6ZW9mKHNsaWNlc19pbmZvKSk7Cj4+ICvCoMKgwqAgc2xpY2VzX2luZm8u bWF4X3NsaWNlcyA9IHNzZXUtPm1heF9zbGljZXM7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoY29weV90 b191c2VyKHU2NF90b191c2VyX3B0cihxdWVyeV9pdGVtLT5kYXRhX3B0ciksIAo+PiAmc2xpY2Vz X2luZm8sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKHNsaWNlc19pbmZvKSkp Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVGQVVMVDsKPj4gKwo+PiArwqDCoMKgIGlmIChj b3B5X3RvX3VzZXIodTY0X3RvX3VzZXJfcHRyKHF1ZXJ5X2l0ZW0tPmRhdGFfcHRyICsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2Zmc2V0b2Yoc3RydWN0IGRy bV9pOTE1X3F1ZXJ5X3NsaWNlc19pbmZvLCAKPj4gZGF0YSkpLAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICZzc2V1LT5zbGljZV9tYXNrLCBkYXRhX2xlbmd0aCkpCj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVGQVVMVDsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IHF1ZXJ5X3N1YnNsaWNlc19pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg ZHJtX2k5MTVfcXVlcnlfaXRlbSAqcXVlcnlfaXRlbSkKPj4gK3sKPj4gK8KgwqDCoCBjb25zdCBz dHJ1Y3Qgc3NldV9kZXZfaW5mbyAqc3NldSA9ICZJTlRFTF9JTkZPKGRldl9wcml2KS0+c3NldTsK Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfc3Vic2xpY2VzX2luZm8gc3Vic2xpY2Vz X2luZm87Cj4+ICvCoMKgwqAgdTMyIGRhdGFfbGVuZ3RoLCBsZW5ndGg7Cj4+ICsKPj4gK8KgwqDC oCBpZiAoc3NldS0+bWF4X3NsaWNlcyA9PSAwKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1F Tk9ERVY7Cj4+ICsKPj4gK8KgwqDCoCBtZW1zZXQoJnN1YnNsaWNlc19pbmZvLCAwLCBzaXplb2Yo c3Vic2xpY2VzX2luZm8pKTsKPj4gK8KgwqDCoCBzdWJzbGljZXNfaW5mby5tYXhfc2xpY2VzID0g c3NldS0+bWF4X3NsaWNlczsKPj4gK8KgwqDCoCBzdWJzbGljZXNfaW5mby5tYXhfc3Vic2xpY2Vz ID0gc3NldS0+bWF4X3N1YnNsaWNlczsKPj4gKwo+PiArwqDCoMKgIGRhdGFfbGVuZ3RoID0gc3Vi c2xpY2VzX2luZm8ubWF4X3NsaWNlcyAqCj4+ICvCoMKgwqDCoMKgwqDCoCBESVZfUk9VTkRfVVAo c3Vic2xpY2VzX2luZm8ubWF4X3N1YnNsaWNlcywgQklUU19QRVJfQllURSk7Cj4KPiBzL0JJVFNf UEVSX0JZVEUvc2l6ZW9mKHNzZXUtPnN1YnNsaWNlX21hc2tbMF0pICogQklUU19QRVJfQllURS8g PwoKT2theS4KCj4KPj4gK8KgwqDCoCBsZW5ndGggPSBzaXplb2Yoc3Vic2xpY2VzX2luZm8pICsg ZGF0YV9sZW5ndGg7Cj4+ICsKPj4gK8KgwqDCoCBpZiAocXVlcnlfaXRlbS0+bGVuZ3RoID09IDAp IHsKPj4gK8KgwqDCoMKgwqDCoMKgIHF1ZXJ5X2l0ZW0tPmxlbmd0aCA9IGxlbmd0aDsKPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlmIChx dWVyeV9pdGVtLT5sZW5ndGggIT0gbGVuZ3RoKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1F SU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihx dWVyeV9pdGVtLT5kYXRhX3B0ciksIAo+PiAmc3Vic2xpY2VzX2luZm8sCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc2l6ZW9mKHN1YnNsaWNlc19pbmZvKSkpCj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVGQVVMVDsKPj4gKwo+PiArwqDCoMKgIGlmIChjb3B5X3RvX3VzZXIodTY0X3Rv X3VzZXJfcHRyKHF1ZXJ5X2l0ZW0tPmRhdGFfcHRyICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgb2Zmc2V0b2Yoc3RydWN0IGRybV9pOTE1X3F1ZXJ5X3N1YnNs aWNlc19pbmZvLCAKPj4gZGF0YSkpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUt PnN1YnNsaWNlX21hc2ssIGRhdGFfbGVuZ3RoKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAt RUZBVUxUOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgcXVlcnlfZXVzX2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gKnF1 ZXJ5X2l0ZW0pCj4+ICt7Cj4+ICvCoMKgwqAgY29uc3Qgc3RydWN0IHNzZXVfZGV2X2luZm8gKnNz ZXUgPSAmSU5URUxfSU5GTyhkZXZfcHJpdiktPnNzZXU7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9p OTE1X3F1ZXJ5X2V1c19pbmZvIGV1c19pbmZvOwo+PiArwqDCoMKgIHUzMiBkYXRhX2xlbmd0aCwg bGVuZ3RoOwo+PiArCj4+ICvCoMKgwqAgaWYgKHNzZXUtPm1heF9zbGljZXMgPT0gMCkKPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiAtRU5PREVWOwo+PiArCj4+ICvCoMKgwqAgbWVtc2V0KCZldXNf aW5mbywgMCwgc2l6ZW9mKGV1c19pbmZvKSk7Cj4+ICvCoMKgwqAgZXVzX2luZm8ubWF4X3NsaWNl cyA9IHNzZXUtPm1heF9zbGljZXM7Cj4+ICvCoMKgwqAgZXVzX2luZm8ubWF4X3N1YnNsaWNlcyA9 IHNzZXUtPm1heF9zdWJzbGljZXM7Cj4+ICvCoMKgwqAgZXVzX2luZm8ubWF4X2V1c19wZXJfc3Vi c2xpY2UgPSBzc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZTsKPj4gKwo+PiArwqDCoMKgIGRhdGFf bGVuZ3RoID0gZXVzX2luZm8ubWF4X3NsaWNlcyAqIGV1c19pbmZvLm1heF9zdWJzbGljZXMgKgo+ PiArwqDCoMKgwqDCoMKgwqAgRElWX1JPVU5EX1VQKGV1c19pbmZvLm1heF9ldXNfcGVyX3N1YnNs aWNlLCBCSVRTX1BFUl9CWVRFKTsKPj4gK8KgwqDCoCBsZW5ndGggPSBzaXplb2YoZXVzX2luZm8p ICsgZGF0YV9sZW5ndGg7Cj4+ICsKPj4gK8KgwqDCoCBpZiAocXVlcnlfaXRlbS0+bGVuZ3RoID09 IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHF1ZXJ5X2l0ZW0tPmxlbmd0aCA9IGxlbmd0aDsKPj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlm IChxdWVyeV9pdGVtLT5sZW5ndGggIT0gbGVuZ3RoKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0 cihxdWVyeV9pdGVtLT5kYXRhX3B0ciksICZldXNfaW5mbywKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzaXplb2YoZXVzX2luZm8pKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUZB VUxUOwo+PiArCj4+ICvCoMKgwqAgaWYgKGNvcHlfdG9fdXNlcih1NjRfdG9fdXNlcl9wdHIocXVl cnlfaXRlbS0+ZGF0YV9wdHIgKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBvZmZzZXRvZihzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZXVzX2luZm8sIGRhdGEpKSwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5ldV9tYXNrLCBkYXRhX2xlbmd0aCkp Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVGQVVMVDsKPj4gKwo+PiArwqDCoMKgIHJldHVy biAwOwo+PiArfQo+PiArCj4+IMKgIGludCBpOTE1X3F1ZXJ5X2lvY3RsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCAKPj4gZHJtX2ZpbGUgKmZpbGUpCj4+IMKgIHsK Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRl dik7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGRybV9pOTE1X3F1ZXJ5ICphcmdzID0gZGF0YTsKPj4g wqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfaXRlbSBfX3VzZXIgKnVzZXJfaXRlbV9w dHIgPQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPml0ZW1zX3B0 cik7Cj4+IEBAIC0zNCwxNSArMTU0LDI4IEBAIGludCBpOTE1X3F1ZXJ5X2lvY3RsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIAo+PiB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4+ IMKgIMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IGFyZ3MtPm51bV9pdGVtczsgaSsrLCB1c2Vy X2l0ZW1fcHRyKyspIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9xdWVy eV9pdGVtIGl0ZW07Cj4+ICvCoMKgwqDCoMKgwqDCoCBpbnQgcmV0Owo+PiDCoCDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKGNvcHlfZnJvbV91c2VyKCZpdGVtLCB1c2VyX2l0ZW1fcHRyLCBzaXplb2Yo aXRlbSkpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVGQVVMVDsKPj4g wqAgwqDCoMKgwqDCoMKgwqDCoMKgIHN3aXRjaCAoaXRlbS5xdWVyeV9pZCkgewo+PiArwqDCoMKg wqDCoMKgwqAgY2FzZSBEUk1fSTkxNV9RVUVSWV9JRF9TTElDRVNfSU5GTzoKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0ID0gcXVlcnlfc2xpY2VzX2luZm8oZGV2X3ByaXYsICZpdGVtKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoCBjYXNl IERSTV9JOTE1X1FVRVJZX0lEX1NVQlNMSUNFU19JTkZPOgo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXQgPSBxdWVyeV9zdWJzbGljZXNfaW5mbyhkZXZfcHJpdiwgJml0ZW0pOwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgRFJNX0k5 MTVfUVVFUllfSURfRVVTX0lORk86Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IHF1 ZXJ5X2V1c19pbmZvKGRldl9wcml2LCAmaXRlbSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGJyZWFrOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZGVmYXVsdDoKPj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IMKg ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcmV0Owo+PiArCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoY29weV90b191c2VyKHVzZXJf aXRlbV9wdHIsICZpdGVtLCBzaXplb2YoaXRlbSkpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVGQVVMVDsKPj4gwqDCoMKgwqDCoCB9Cj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9xdWVyeV9pbmZvLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcXVlcnlfaW5mby5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4 IDAwMDAwMDAwMDAwMC4uNzliMDNiZTlmNTFhCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcXVlcnlfaW5mby5jCj4KPiBPb29wcyEKCkFnYWluPz8g V1RIPz8KCj4KPj4gQEAgLTAsMCArMSw4OCBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCDCqSAy MDE3IEludGVsIENvcnBvcmF0aW9uCj4+ICsgKgo+PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gCj4+IG9idGFpbmluZyBhCj4+ ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlIAo+PiAiU29mdHdhcmUiKSwKPj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IAo+PiBsaW1pdGF0aW9uCj4+ ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgCj4+IHN1YmxpY2Vuc2UsCj4+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSAKPj4gdGhlCj4+ICsgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgo+PiArICoKPj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgCj4+IHRoZSBuZXh0Cj4+ICsgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgCj4+ IHBvcnRpb25zIG9mIHRoZQo+PiArICogU29mdHdhcmUuCj4+ICsgKgo+PiArICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIAo+ PiBFWFBSRVNTIE9SCj4+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIAo+PiBNRVJDSEFOVEFCSUxJVFksCj4+ICsgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULsKgIElOIE5PIAo+PiBF VkVOVCBTSEFMTAo+PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgCj4+IE9SIE9USEVSCj4+ICsgKiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgCj4+ IEFSSVNJTkcKPj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IgCj4+IE9USEVSIERFQUxJTkdTCj4+ICsgKiBJTiBUSEUgU09G VFdBUkUuCj4+ICsgKgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+PiAr I2luY2x1ZGUgPHVhcGkvZHJtL2k5MTVfZHJtLmg+Cj4+ICsKPj4gK3N0YXRpYyBpbnQgcXVlcnlf aW5mb19yY3NfdG9wb2xvZ3koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9xdWVy eV9pbmZvICphcmdzKQo+PiArewo+PiArwqDCoMKgIGNvbnN0IHN0cnVjdCBzc2V1X2Rldl9pbmZv ICpzc2V1ID0gJklOVEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1Owo+PiArwqDCoMKgIHN0cnVjdCBk cm1faTkxNV9yY3NfdG9wb2xvZ3lfaW5mbyBfX3VzZXIgKnVzZXJfdG9wb2xvZ3kgPQo+PiArwqDC oMKgwqDCoMKgwqAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPmluZm9fcHRyKTsKPj4gK8KgwqDCoCBz dHJ1Y3QgZHJtX2k5MTVfcmNzX3RvcG9sb2d5X2luZm8gdG9wb2xvZ3k7Cj4+ICvCoMKgwqAgdTMy IGRhdGFfc2l6ZSwgdG90YWxfc2l6ZTsKPj4gK8KgwqDCoCBjb25zdCB1OCAqZGF0YSA9IE5VTEw7 Cj4+ICvCoMKgwqAgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgIC8qIE5vdCBzdXBwb3J0ZWQgb24g Z2VuIDwgOC4gKi8KPj4gK8KgwqDCoCBpZiAoc3NldS0+bWF4X3NsaWNlcyA9PSAwKQo+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9ERVY7Cj4+ICsKPj4gK8KgwqDCoCBzd2l0Y2ggKGFyZ3Mt PnF1ZXJ5X3BhcmFtc1swXSkgewo+PiArwqDCoMKgIGNhc2UgSTkxNV9SQ1NfVE9QT0xPR1lfU0xJ Q0U6Cj4+ICvCoMKgwqDCoMKgwqDCoCB0b3BvbG9neS5wYXJhbXNbMF0gPSBzc2V1LT5tYXhfc2xp Y2VzOwo+PiArwqDCoMKgwqDCoMKgwqAgZGF0YV9zaXplID0gc2l6ZW9mKHNzZXUtPnNsaWNlX21h c2spOwo+PiArwqDCoMKgwqDCoMKgwqAgZGF0YSA9ICZzc2V1LT5zbGljZV9tYXNrOwo+PiArwqDC oMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICsKPj4gK8KgwqDCoCBjYXNlIEk5MTVfUkNTX1RPUE9MT0dZ X1NVQlNMSUNFOgo+PiArwqDCoMKgwqDCoMKgwqAgdG9wb2xvZ3kucGFyYW1zWzBdID0gc3NldS0+ bWF4X3NsaWNlczsKPj4gK8KgwqDCoMKgwqDCoMKgIHRvcG9sb2d5LnBhcmFtc1sxXSA9IEFMSUdO KHNzZXUtPm1heF9zdWJzbGljZXMsIDgpIC8gODsKPj4gK8KgwqDCoMKgwqDCoMKgIGRhdGFfc2l6 ZSA9IHNzZXUtPm1heF9zbGljZXMgKiB0b3BvbG9neS5wYXJhbXNbMV07Cj4+ICvCoMKgwqDCoMKg wqDCoCBkYXRhID0gc3NldS0+c3Vic2xpY2VzX21hc2s7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVh azsKPj4gKwo+PiArwqDCoMKgIGNhc2UgSTkxNV9SQ1NfVE9QT0xPR1lfRVU6Cj4+ICvCoMKgwqDC oMKgwqDCoCB0b3BvbG9neS5wYXJhbXNbMl0gPSBBTElHTihzc2V1LT5tYXhfZXVzX3Blcl9zdWJz bGljZSwgOCkgLyA4Owo+PiArwqDCoMKgwqDCoMKgwqAgdG9wb2xvZ3kucGFyYW1zWzFdID0gc3Nl dS0+bWF4X3N1YnNsaWNlcyAqIHRvcG9sb2d5LnBhcmFtc1syXTsKPj4gK8KgwqDCoMKgwqDCoMKg IHRvcG9sb2d5LnBhcmFtc1swXSA9IHNzZXUtPm1heF9zbGljZXM7Cj4+ICvCoMKgwqDCoMKgwqDC oCBkYXRhX3NpemUgPSBzc2V1LT5tYXhfc2xpY2VzICogdG9wb2xvZ3kucGFyYW1zWzFdOwo+PiAr wqDCoMKgwqDCoMKgwqAgZGF0YSA9IHNzZXUtPmV1X21hc2s7Cj4+ICvCoMKgwqDCoMKgwqDCoCBi cmVhazsKPj4gKwo+PiArwqDCoMKgIGRlZmF1bHQ6Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g LUVJTlZBTDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCB0b3RhbF9zaXplID0gc2l6ZW9m KHRvcG9sb2d5KSArIGRhdGFfc2l6ZTsKPj4gKwo+PiArwqDCoMKgIGlmIChhcmdzLT5pbmZvX3B0 cl9sZW4gPT0gMCkgewo+PiArwqDCoMKgwqDCoMKgwqAgYXJncy0+aW5mb19wdHJfbGVuID0gdG90 YWxfc2l6ZTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArwqDCoMKgIH0KPj4gKwo+ PiArwqDCoMKgIGlmIChhcmdzLT5pbmZvX3B0cl9sZW4gPCB0b3RhbF9zaXplKQo+PiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBjb3B5X3RvX3Vz ZXIodXNlcl90b3BvbG9neSwgJnRvcG9sb2d5LCBzaXplb2YodG9wb2xvZ3kpKTsKPj4gK8KgwqDC oCBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FRkFVTFQ7Cj4+ICsKPj4gK8Kg wqDCoCByZXQgPSBjb3B5X3RvX3VzZXIodXNlcl90b3BvbG9neSArIDEsIGRhdGEsIGRhdGFfc2l6 ZSk7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUZBVUxU Owo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9pbmNsdWRl L3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKPj4gaW5k ZXggMzllOTNmMTBmMmNkLi41YThlMmY3ZDVkYzMgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUvdWFw aS9kcm0vaTkxNV9kcm0uaAo+PiArKysgYi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKPj4g QEAgLTE2MTgsNiArMTYxOCw5IEBAIHN0cnVjdCBkcm1faTkxNV9wZXJmX29hX2NvbmZpZyB7Cj4+ IMKgIMKgIHN0cnVjdCBkcm1faTkxNV9xdWVyeV9pdGVtIHsKPj4gwqDCoMKgwqDCoCBfX3U2NCBx dWVyeV9pZDsKPj4gKyNkZWZpbmUgRFJNX0k5MTVfUVVFUllfSURfU0xJQ0VTX0lORk/CoMKgwqAg MHgwMQo+PiArI2RlZmluZSBEUk1fSTkxNV9RVUVSWV9JRF9TVUJTTElDRVNfSU5GTyAweDAyCj4+ ICsjZGVmaW5lIERSTV9JOTE1X1FVRVJZX0lEX0VVU19JTkZPwqDCoMKgwqDCoMKgIDB4MDMKPj4g wqAgwqDCoMKgwqDCoCAvKgo+PiDCoMKgwqDCoMKgwqAgKiBXaGVuIHNldCB0byB6ZXJvIGJ5IHVz ZXJzcGFjZSwgdGhpcyBpcyBmaWxsZWQgd2l0aCB0aGUgc2l6ZSAKPj4gb2YgdGhlCj4+IEBAIC0x NjQ0LDYgKzE2NDcsNTQgQEAgc3RydWN0IGRybV9pOTE1X3F1ZXJ5IHsKPj4gwqDCoMKgwqDCoCBf X3U2NCBpdGVtc19wdHI7Cj4+IMKgIH07Cj4+IMKgICsvKiBEYXRhIHdyaXR0ZW4gYnkgdGhlIGtl cm5lbCB3aXRoIHF1ZXJ5IAo+PiBEUk1fSTkxNV9RVUVSWV9JRF9TTElDRVNfSU5GTyA6Cj4+ICsg Kgo+PiArICogZGF0YTogZWFjaCBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgYSBzbGljZSBpcyBhdmFp bGFibGUgKDEpIG9yIAo+PiBmdXNlZCBvZmYgKDApLgo+PiArICrCoMKgwqDCoMKgwqAgVXNlIERS TV9JOTE1X1FVRVJZX1NMSUNFX0FWQUlMQUJMRSgpIHRvIHF1ZXJ5IGEgZ2l2ZW4gc2xpY2Uncwo+ PiArICrCoMKgwqDCoMKgwqAgYXZhaWxhYmlsaXR5Lgo+PiArICovCj4+ICtzdHJ1Y3QgZHJtX2k5 MTVfcXVlcnlfc2xpY2VzX2luZm8gewo+PiArwqDCoMKgIF9fdTMyIG1heF9zbGljZXM7Cj4+ICsK Pj4gKyNkZWZpbmUgRFJNX0k5MTVfUVVFUllfU0xJQ0VfQVZBSUxBQkxFKGluZm8sIHNsaWNlKSBc Cj4+ICvCoMKgwqAgKCgoaW5mbyktPmRhdGFbKHNsaWNlKSAvIDhdID4+ICgoc2xpY2UpICUgOCkp ICYgMSkKPgo+IEFsdGVybmF0aXZlbHksIChkYXRhW3NsaWNlIC8gOF0gJiBCSVQoc2xpY2UgJSA4 KSksIGJ1dCBpdCBpcyBwcm9iYWJseSAKPiBhIHBlcnNvbmFsIHByZWZlcmVuY2UgYXMgd2hhdCBp cyBtb3JlIHJlYWRhYmxlLgoKTmljZSwgdGhhbmtzIQoKPgo+PiArwqDCoMKgIF9fdTggZGF0YVtd Owo+PiArfTsKPj4gKwo+PiArLyogRGF0YSB3cml0dGVuIGJ5IHRoZSBrZXJuZWwgd2l0aCBxdWVy eSAKPj4gRFJNX0k5MTVfUVVFUllfSURfU1VCU0xJQ0VTX0lORk8gOgo+PiArICoKPj4gKyAqIGRh dGE6IGVhY2ggYml0IGluZGljYXRlcyB3aGV0aGVyIGEgc3Vic2xpY2UgaXMgYXZhaWxhYmxlICgx KSBvciAKPj4gZnVzZWQgb2ZmCj4+ICsgKsKgwqDCoMKgwqDCoCAoMCkuIFVzZSBEUk1fSTkxNV9R VUVSWV9TVUJTTElDRV9BVkFJTEFCTEUoKSB0byBxdWVyeSBhIGdpdmVuCj4+ICsgKsKgwqDCoMKg wqDCoCBzdWJzbGljZSdzIGF2YWlsYWJpbGl0eS4KPj4gKyAqLwo+PiArc3RydWN0IGRybV9pOTE1 X3F1ZXJ5X3N1YnNsaWNlc19pbmZvIHsKPj4gK8KgwqDCoCBfX3UzMiBtYXhfc2xpY2VzOwo+PiAr wqDCoMKgIF9fdTMyIG1heF9zdWJzbGljZXM7Cj4+ICsKPj4gKyNkZWZpbmUgRFJNX0k5MTVfUVVF UllfU1VCU0xJQ0VfQVZBSUxBQkxFKGluZm8sIHNsaWNlLCBzdWJzbGljZSkgXAo+PiArwqDCoMKg ICgoKGluZm8pLT5kYXRhWyhzbGljZSkgKiBBTElHTigoaW5mbyktPm1heF9zdWJzbGljZXMsIDgp IC8gOCArIFwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHN1YnNsaWNlKSAvIDhd ID4+ICgoc3Vic2xpY2UpICUgOCkpICYgMSkKPj4gK8KgwqDCoCBfX3U4IGRhdGFbXTsKPj4gK307 Cj4+ICsKPj4gKy8qIERhdGEgd3JpdHRlbiBieSB0aGUga2VybmVsIHdpdGggcXVlcnkgRFJNX0k5 MTVfUVVFUllfSURfRVVTX0lORk8gOgo+PiArICoKPj4gKyAqIGRhdGE6IEVhY2ggYml0IGluZGlj YXRlcyB3aGV0aGVyIGEgc3Vic2xpY2UgaXMgYXZhaWxhYmxlICgxKSBvciAKPj4gZnVzZWQgb2Zm Cj4+ICsgKsKgwqDCoMKgwqDCoCAoMCkuIFVzZSBEUk1fSTkxNV9RVUVSWV9FVV9BVkFJTEFCTEUo KSB0byBxdWVyeSBhIGdpdmVuIEVVJ3MKPj4gKyAqwqDCoMKgwqDCoMKgIGF2YWlsYWJpbGl0eS4K Pj4gKyAqLwo+PiArc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2V1c19pbmZvIHsKPj4gK8KgwqDCoCBf X3UzMiBtYXhfc2xpY2VzOwo+PiArwqDCoMKgIF9fdTMyIG1heF9zdWJzbGljZXM7Cj4+ICvCoMKg wqAgX191MzIgbWF4X2V1c19wZXJfc3Vic2xpY2U7Cj4+ICsKPj4gKyNkZWZpbmUgRFJNX0k5MTVf UVVFUllfRVVfQVZBSUxBQkxFKGluZm8sIHNsaWNlLCBzdWJzbGljZSwgZXUpIFwKPj4gK8KgwqDC oCAoKChpbmZvKS0+ZGF0YVsoc2xpY2UpICogQUxJR04oKGluZm8pLT5tYXhfZXVzX3Blcl9zdWJz bGljZSwgOCkgCj4+IC8gOCAqIChpbmZvKS0+bWF4X3N1YnNsaWNlcyArIFwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKHN1YnNsaWNlKSAqIEFMSUdOKChpbmZvKS0+bWF4X2V1c19w ZXJfc3Vic2xpY2UsIDgpIC8gCj4+IDggKyBcCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIChldSkgLyA4XSA+PiAoKGV1KSAlIDgpKSAmIDEpCj4+ICvCoMKgwqAgX191OCBkYXRhW107 Cj4+ICt9Owo+Cj4gVG8gbWFueSBoYXJkY29kZWQgZWlnaHRzIGluIGFsbCBvZiB0aGUgYWJvdmUu IEJ1dCBub3Qgc3VyZSB3aGF0IHRvIAo+IHN1Z2dlc3RzLiBJZiBzb21lb25lIHNheXMgdG8gbG9z ZSB0aGUgemVyby1sZW5ndGggYXJyYXkgb3Igbm90IGl0IHdpbGwgCj4gYmUgc2xpZ2h0bHkgZGlm ZmVyZW50Lgo+Cj4gRG8geW91IHdhbnQgdG8gcHJlZml4IHRoZSBtYWNyb3Mgd2l0aCAhISBzbyB0 aGV5IHJldHVybiAwLzE/CgpTdXJlIDopCgo+Cj4gSXMgdGhlIEFMSUdOKHgsIDgpIC8gOCBwYXR0 ZXJuIGVxdWFsIHRvIERJVl9ST1VORF9VUCh4LCA4KT8gSSB0aGluayBJIAo+IGNvbW1lbnRlZCBh Ym91dCB0aGF0IGFscmVhZHkgc29tZXdoZXJlLgoKSSBhdm9pZGVkIERJVl9ST1VORF9VUCgpIGJl Y2F1c2UgaXQgZG9lc24ndCBsb29rIGxpa2UgaXQncyB1c2VkIGJ5IAphbnlib2R5IGVsc2UgaW4g dWFwaS4KSSB0aGluayB0aGV5J3JlIGVxdWl2YWxlbnQuCgo+Cj4+ICsKPj4gwqAgI2lmIGRlZmlu ZWQoX19jcGx1c3BsdXMpCj4+IMKgIH0KPj4gwqAgI2VuZGlmCj4+Cj4KPiBSZWdhcmRzLAo+Cj4g VHZydGtvCj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=