From mboxrd@z Thu Jan 1 00:00:00 1970 From: ankitprasad.r.sharma@intel.com Subject: [PATCH 09/11] drm/i915: Migrate stolen objects before hibernation Date: Tue, 31 May 2016 11:49:22 +0530 Message-ID: <1464675564-11988-10-git-send-email-ankitprasad.r.sharma@intel.com> References: <1464675564-11988-1-git-send-email-ankitprasad.r.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id ACB716E223 for ; Tue, 31 May 2016 06:45:26 +0000 (UTC) In-Reply-To: <1464675564-11988-1-git-send-email-ankitprasad.r.sharma@intel.com> 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 Cc: akash.goel@intel.com, Ankitprasad Sharma List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpWaWxsZSByZW1p bmRlZCB1cyB0aGF0IHN0b2xlbiBtZW1vcnkgaXMgbm90IHByZXNlcnZlZCBhY3Jvc3MKaGliZXJu YXRpb24sIGFuZCBhIHJlc3VsdCBvZiB0aGlzIHdhcyB0aGF0IGNvbnRleHQgb2JqZWN0cyBub3cg YmVpbmcKYWxsb2NhdGVkIGZyb20gc3RvbGVuIHdlcmUgYmVpbmcgY29ycnVwdGVkIG9uIFM0IGFu ZCBwcm9tcHRseSBoYW5naW5nCnRoZSBHUFUgb24gcmVzdW1lLgoKV2Ugd2FudCB0byB1dGlsaXNl IHN0b2xlbiBmb3IgYXMgbXVjaCBhcyBwb3NzaWJsZSAobm90aGluZyBlbHNlIHdpbGwgdXNlCnRo YXQgd2FzdGVkIG1lbW9yeSBvdGhlcndpc2UpLCBzbyB3ZSBuZWVkIGEgc3RyYXRlZ3kgZm9yIGhh bmRsaW5nCmdlbmVyYWwgb2JqZWN0cyBhbGxvY2F0ZWQgZnJvbSBzdG9sZW4gYW5kIGhpYmVybmF0 aW9uLiBBIHNpbXBsZSBzb2x1dGlvbgppcyB0byBkbyBhIENQVSBjb3B5IHRocm91Z2ggdGhlIEdU VCBvZiB0aGUgc3RvbGVuIG9iamVjdCBpbnRvIGEgZnJlc2gKc2htZW1mcyBiYWNraW5nIHN0b3Jl IGFuZCB0aGVuY2Vmb3J0aCB0cmVhdCBpdCBhcyBhIG5vcm1hbCBvYmplY3RzLiBUaGlzCmNhbiBi ZSByZWZpbmVkIGluIGZ1dHVyZSB0byBlaXRoZXIgdXNlIGEgR1BVIGNvcHkgdG8gYXZvaWQgdGhl IHNsb3cKdW5jYWNoZWQgcmVhZHMgKHRob3VnaCBpdCdzIGhpYmVybmF0aW9uISkgYW5kIHJlY3Jl YXRlIHN0b2xlbiBvYmplY3RzCnVwb24gcmVzdW1lL2ZpcnN0LXVzZS4gRm9yIG5vdywgYSBzaW1w bGUgYXBwcm9hY2ggc2hvdWxkIHN1ZmZpY2UgZm9yCnRlc3RpbmcgdGhlIG9iamVjdCBtaWdyYXRp b24uCgp2MjoKU3dhcCBQVEUgZm9yIHBpbm5lZCBiaW5kaW5ncyBvdmVyIHRvIHRoZSBzaG1lbWZz LiBUaGlzIGFkZHMgYQpjb21wbGljYXRlZCBkYW5jZSwgYnV0IGlzIHJlcXVpcmVkIGFzIG1hbnkg c3RvbGVuIG9iamVjdHMgYXJlIGxpa2VseSB0bwpiZSBwaW5uZWQgZm9yIHVzZSBieSB0aGUgaGFy ZHdhcmUuIFN3YXBwaW5nIHRoZSBQVEVzIHNob3VsZCBub3QgcmVzdWx0CmluIGV4dGVybmFsbHkg dmlzaWJsZSBiZWhhdmlvdXIsIGFzIGVhY2ggUFRFIHVwZGF0ZSBzaG91bGQgYmUgYXRvbWljIGFu ZAp0aGUgdHdvIHBhZ2VzIGlkZW50aWNhbC4gKGRhbnZldCkKCnNhZmUtYnktZGVmYXVsdCwgb3Ig dGhlIHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZS4gV2UgbmVlZCBhIG5ldyBmbGFnCnRvIG1h cmsgb2JqZWN0cyB0aGF0IHdlIGNhbiB3aWxmdWxseSBkaXNjYXJkIGFuZCByZWNyZWF0ZSBhY3Jv c3MKaGliZXJuYXRpb24uIChkYW52ZXQpCgpKdXN0IHVzZSB0aGUgZ2xvYmFsX2xpc3QgcmF0aGVy IHRoYW4gaW52ZW50IGEgbmV3IHN0b2xlbl9saXN0LiBUaGlzIGlzCnRoZSBzbG93cGF0aCBoaWJl cm5hdGUgYW5kIHNvIGFkZGluZyBhIG5ldyBsaXN0IGFuZCB0aGUgYXNzb2NpYXRlZApjb21wbGV4 aXR5IGlzbid0IHdvcnRoIGl0LgoKdjM6IFJlYmFzZWQgb24gZHJtLWludGVsLW5pZ2h0bHkgKEFu a2l0KQoKdjQ6IFVzZSBpbnNlcnRfcGFnZSB0byBtYXAgc3RvbGVuIG1lbW9yeSBiYWNrZWQgcGFn ZXMgZm9yIG1pZ3JhdGlvbiB0bwpzaG1lbSAoQ2hyaXMpCgp2NTogQWNxdWlyZSBtdXRleCBsb2Nr IHdoaWxlIGNvcHlpbmcgc3RvbGVuIGJ1ZmZlciBvYmplY3RzIHRvIHNobWVtIChDaHJpcykKCnY2 OiBIYW5kbGVkIGZpbGUgbGVhaywgU3BsaXR0ZWQgb2JqZWN0IG1pZ3JhdGlvbiBmdW5jdGlvbiwg YWRkZWQga2VybmVsZG9jCmZvciBtaWdyYXRlX3N0b2xlbl90b19zaG1lbWZzKCkgZnVuY3Rpb24g KFR2cnRrbykKVXNlIGk5MTUgd3JhcHBlciBmdW5jdGlvbiBmb3IgZHJtX21tX2luc2VydF9ub2Rl X2luX3JhbmdlKCkKCnY3OiBLZWVwIHRoZSBvYmplY3QgaW4gY3B1IGRvbWFpbiBhZnRlciBnZXRf cGFnZXMsIHJlbW92ZSB0aGUgb2JqZWN0IGZyb20KdGhlIHVuYm91bmQgbGlzdCBvbmx5IHdoZW4g bWFya2VkIFBVUkdFRCwgQ29ycmVjdGVkIHNwbGl0IG9mIG9iamVjdCBtaWdyYXRpb24KZnVuY3Rp b24gKENocmlzKQoKdjg6IFNwbGl0IGk5MTVfZ2VtX2ZyZWV6ZSgpLCByZW1vdmVkIHJlZHVuZGFu dCB1c2Ugb2YgYmFycmllciwgY29ycmVjdGVkCnVzZSBvZiBzZXRfdG9fY3B1X2RvbWFpbigpIChD aHJpcykKCnY5OiBSZXBsYWNlZCBXQVJOX09OIGJ5IEJVR19PTiBhbmQgYWRkZWQgYSBjb21tZW50 IGV4cGxhaW5pbmcgaXQKKERhbmllbC9UdnJ0a28pCgp2MTA6IERvY3VtZW50IHVzZSBvZiBiYXJy aWVycyAoQ2hyaXMpCgp2MTE6IFJlc29sdmVkIGxpc3QgY29ycnVwdGlvbiBkdWUgdG8gbm90IHJl bW92aW5nIG9iaiBmcm9tIGdsb2JhbF9saXN0CmlmIG5vIHJlZmVyZW5jZSB0byBwYWdlcyBpcyBo ZWxkLCBSZWJhc2VkIChBbmtpdCkKCnYxMjogUmViYXNlIChBbmtpdCkKClNpZ25lZC1vZmYtYnk6 IENocmlzIFdpbHNvbiA8Y2hyaXMgYXQgY2hyaXMtd2lsc29uLmNvLnVrPgpTaWduZWQtb2ZmLWJ5 OiBBbmtpdHByYXNhZCBTaGFybWEgPGFua2l0cHJhc2FkLnIuc2hhcm1hQGludGVsLmNvbT4KUmV2 aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgIHwgIDIyICsrKy0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8ICAxMCArKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgIHwgMjA0ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYyAgfCAgNDkg KysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAgICB8ICAgMyAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jICAgICAgfCAgIDYgKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyB8ICAgNiArCiA4IGZpbGVzIGNoYW5nZWQsIDI4NCBp bnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRl eCA5NDNkN2IyLi44MjdhM2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTEwNjYsNiAr MTA2NiwyMiBAQCBzdGF0aWMgaW50IGk5MTVfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYp CiAJcmV0dXJuIGk5MTVfZHJtX3N1c3BlbmQoZHJtX2Rldik7CiB9CiAKKy8qIGZyZWV6ZTogYmVm b3JlIGNyZWF0aW5nIHRoZSBoaWJlcm5hdGlvbl9pbWFnZSAqLworc3RhdGljIGludCBpOTE1X3Bt X2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGk5MTVf Z2VtX2ZyZWV6ZShwY2lfZ2V0X2RydmRhdGEodG9fcGNpX2RldihkZXYpKSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXJldCA9IGk5MTVfcG1fc3VzcGVuZChkZXYpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBpOTE1X3BtX3N1 c3BlbmRfbGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRy bV9kZXYgPSBkZXZfdG9faTkxNShkZXYpLT5kZXY7CkBAIC0xMTE1LDEyICsxMTMxLDYgQEAgc3Rh dGljIGludCBpOTE1X3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJcmV0dXJuIGk5MTVf ZHJtX3Jlc3VtZShkcm1fZGV2KTsKIH0KIAotLyogZnJlZXplOiBiZWZvcmUgY3JlYXRpbmcgdGhl IGhpYmVybmF0aW9uX2ltYWdlICovCi1zdGF0aWMgaW50IGk5MTVfcG1fZnJlZXplKHN0cnVjdCBk ZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gaTkxNV9wbV9zdXNwZW5kKGRldik7Ci19Ci0KIHN0YXRp YyBpbnQgaTkxNV9wbV9mcmVlemVfbGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IHJl dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGQxNWMwMTguLjZiN2U3OTAgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaApAQCAtMjE4MCw2ICsyMTgwLDEyIEBAIHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0IHsKIAkgKiBBZHZpY2U6IGFyZSB0aGUgYmFja2luZyBwYWdlcyBwdXJnZWFibGU/ CiAJICovCiAJdW5zaWduZWQgaW50IG1hZHY6MjsKKwkvKioKKwkgKiBXaGVyZWFzIG1hZHYgaXMg Zm9yIHVzZXJzcGFjZSwgdGhlcmUgYXJlIGNlcnRhaW4gc2l0dWF0aW9ucworCSAqIHdoZXJlIHdl IHdhbnQgSTkxNV9NQURWX0RPTlRORUVEIGJlaGF2aW91ciBvbiBpbnRlcm5hbCBvYmplY3RzCisJ ICogd2l0aG91dCBjb25mbGF0aW5nIHRoZSB1c2Vyc3BhY2Ugc2V0dGluZy4KKwkgKi8KKwl1bnNp Z25lZCBpbnQgaW50ZXJuYWxfdm9sYXRpbGU6MTsKIAogCS8qKgogCSAqIEN1cnJlbnQgdGlsaW5n IG1vZGUgZm9yIHRoZSBvYmplY3QuCkBAIC0zMzE3LDYgKzMzMjMsOSBAQCBpbnQgX19tdXN0X2No ZWNrIGk5MTVfZ2VtX2luaXRfaHcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGk5MTVf Z2VtX2luaXRfc3dpenpsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBpOTE1X2dl bV9jbGVhbnVwX2VuZ2luZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBpbnQgX19tdXN0X2No ZWNrIGk5MTVfZ3B1X2lkbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgX19tdXN0X2No ZWNrIGk5MTVfZ2VtX2ZyZWV6ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBfX211c3Rf Y2hlY2sKK2k5MTVfZ2VtX29iamVjdF9taWdyYXRlX3N0b2xlbl90b19zaG1lbWZzKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwogaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9zdXNw ZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBfX2k5MTVfYWRkX3JlcXVlc3Qoc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCiAJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqYmF0Y2hfb2JqLApAQCAtMzU0Miw2ICszNTUxLDcgQEAgaTkxNV9nZW1fb2JqZWN0X2Ny ZWF0ZV9zdG9sZW5fZm9yX3ByZWFsbG9jYXRlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJ CQkgICAgICAgdTMyIHN0b2xlbl9vZmZzZXQsCiAJCQkJCSAgICAgICB1MzIgZ3R0X29mZnNldCwK IAkJCQkJICAgICAgIHUzMiBzaXplKTsKK2ludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fc3RvbGVu X2ZyZWV6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CiAKIC8qIGk5MTVfZ2VtX3No cmlua2VyLmMgKi8KIHVuc2lnbmVkIGxvbmcgaTkxNV9nZW1fc2hyaW5rKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IGZjYTNmNmQu LmUwYWRiMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtNDc1MywxMiArNDc1MywyNyBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGk5MTVfZ2VtX29i amVjdF9vcHMgPSB7CiAJLnB1dF9wYWdlcyA9IGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNfZ3R0 LAogfTsKIAorc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlICoKK2k5MTVfZ2VtX3NldF9pbm9k ZV9nZnAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3Ry dWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlX2lub2RlKGZpbGUpLT5pX21hcHBpbmc7 CisJZ2ZwX3QgbWFzazsKKworCW1hc2sgPSBHRlBfSElHSFVTRVIgfCBfX0dGUF9SRUNMQUlNQUJM RTsKKwlpZiAoSVNfQ1JFU1RMSU5FKGRldikgfHwgSVNfQlJPQURXQVRFUihkZXYpKSB7CisJCS8q IDk2NWdtIGNhbm5vdCByZWxvY2F0ZSBvYmplY3RzIGFib3ZlIDRHaUIuICovCisJCW1hc2sgJj0g fl9fR0ZQX0hJR0hNRU07CisJCW1hc2sgfD0gX19HRlBfRE1BMzI7CisJfQorCW1hcHBpbmdfc2V0 X2dmcF9tYXNrKG1hcHBpbmcsIG1hc2spOworCisJcmV0dXJuIG1hcHBpbmc7Cit9CisKIHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICppOTE1X2dlbV9vYmplY3RfY3JlYXRlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCi0JCQkJCQkgIHNpemVfdCBzaXplKQorCQkJCQkJICAgc2l6ZV90IHNpemUp CiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKLQlzdHJ1Y3QgYWRkcmVzc19z cGFjZSAqbWFwcGluZzsKLQlnZnBfdCBtYXNrOwogCWludCByZXQ7CiAKIAlvYmogPSBpOTE1X2dl bV9vYmplY3RfYWxsb2MoZGV2KTsKQEAgLTQ3NjksMTUgKzQ3ODQsNyBAQCBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbDsKIAotCW1hc2sgPSBHRlBfSElHSFVTRVIgfCBf X0dGUF9SRUNMQUlNQUJMRTsKLQlpZiAoSVNfQ1JFU1RMSU5FKGRldikgfHwgSVNfQlJPQURXQVRF UihkZXYpKSB7Ci0JCS8qIDk2NWdtIGNhbm5vdCByZWxvY2F0ZSBvYmplY3RzIGFib3ZlIDRHaUIu ICovCi0JCW1hc2sgJj0gfl9fR0ZQX0hJR0hNRU07Ci0JCW1hc2sgfD0gX19HRlBfRE1BMzI7Ci0J fQotCi0JbWFwcGluZyA9IGZpbGVfaW5vZGUob2JqLT5iYXNlLmZpbHApLT5pX21hcHBpbmc7Ci0J bWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgbWFzayk7CisJaTkxNV9nZW1fc2V0X2lub2Rl X2dmcChkZXYsIG9iai0+YmFzZS5maWxwKTsKIAogCWk5MTVfZ2VtX29iamVjdF9pbml0KG9iaiwg Jmk5MTVfZ2VtX29iamVjdF9vcHMpOwogCkBAIC00OTUwLDYgKzQ5NTcsMTc5IEBAIGk5MTVfZ2Vt X3N0b3BfZW5naW5lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCQlkZXZfcHJpdi0+Z3Quc3Rv cF9lbmdpbmUoZW5naW5lKTsKIH0KIAorc3RhdGljIGludAorY29weV9jb250ZW50KHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 LAorCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwlzdHJ1Y3QgaTkxNV9nZ3R0 ICpnZ3R0ID0gJmk5MTUtPmdndHQ7CisJc3RydWN0IGRybV9tbV9ub2RlIG5vZGU7CisJaW50IHJl dCwgaTsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIGZh bHNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogc3RvbGVuIG9iamVjdHMgYXJl IGFscmVhZHkgcGlubmVkIHRvIHByZXZlbnQgc2hyaW5rYWdlICovCisJbWVtc2V0KCZub2RlLCAw LCBzaXplb2Yobm9kZSkpOworCXJldCA9IGluc2VydF9tYXBwYWJsZV9ub2RlKGk5MTUsICZub2Rl LCBQQUdFX1NJWkUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBp IDwgb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkU7IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGFn ZTsKKwkJdm9pZCAqX19pb21lbSBzcmM7CisJCXZvaWQgKmRzdDsKKworCQlnZ3R0LT5iYXNlLmlu c2VydF9wYWdlKCZnZ3R0LT5iYXNlLAorCQkJCSAgICAgICBpOTE1X2dlbV9vYmplY3RfZ2V0X2Rt YV9hZGRyZXNzKG9iaiwgaSksCisJCQkJICAgICAgIG5vZGUuc3RhcnQsCisJCQkJICAgICAgIEk5 MTVfQ0FDSEVfTk9ORSwgMCk7CisKKwkJcGFnZSA9IHNobWVtX3JlYWRfbWFwcGluZ19wYWdlKG1h cHBpbmcsIGkpOworCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHBhZ2Up OworCQkJYnJlYWs7CisJCX0KKworCQlzcmMgPSBpb19tYXBwaW5nX21hcF9hdG9taWNfd2MoZ2d0 dC0+bWFwcGFibGUsIG5vZGUuc3RhcnQpOworCQlkc3QgPSBrbWFwX2F0b21pYyhwYWdlKTsKKwkJ d21iKCk7IC8qIGZsdXNoIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEdHVFQgKGluc2VydF9wYWdlKSAq LworCQltZW1jcHlfZnJvbWlvKGRzdCwgc3JjLCBQQUdFX1NJWkUpOworCQl3bWIoKTsgCS8qIGZs dXNoIHRoZSB3cml0ZSBiZWZvcmUgd2UgbW9kaWZ5IHRoZSBHR1RUICovCisJCWt1bm1hcF9hdG9t aWMoZHN0KTsKKwkJaW9fbWFwcGluZ191bm1hcF9hdG9taWMoc3JjKTsKKworCQlwdXRfcGFnZShw YWdlKTsKKwl9CisKKwlnZ3R0LT5iYXNlLmNsZWFyX3JhbmdlKCZnZ3R0LT5iYXNlLAorCQkJICAg ICAgIG5vZGUuc3RhcnQsIG5vZGUuc2l6ZSwKKwkJCSAgICAgICB0cnVlKTsKKwlyZW1vdmVfbWFw cGFibGVfbm9kZSgmbm9kZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBp OTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4ob2JqLCB0cnVlKTsKK30KKworLyoqCisg KiBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZV9zdG9sZW5fdG9fc2htZW1mcygpIC0gbWlncmF0ZXMg YSBzdG9sZW4gYmFja2VkCisgKiBvYmplY3QgdG8gc2htZW1mcworICogQG9iajogc3RvbGVuIGJh Y2tlZCBvYmplY3QgdG8gYmUgbWlncmF0ZWQKKyAqCisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3Nm dWwgbWlncmF0aW9uLCBlcnJubyBvbiBmYWlsdXJlCisgKi8KKworaW50CitpOTE1X2dlbV9vYmpl Y3RfbWlncmF0ZV9zdG9sZW5fdG9fc2htZW1mcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShvYmotPmJh c2UuZGV2KTsKKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgKnZuOworCXN0cnVjdCBmaWxlICpmaWxl OworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCXN0cnVjdCBzZ190YWJsZSAqc3Rv bGVuX3BhZ2VzLCAqc2htZW1mc19wYWdlczsKKwlpbnQgcmV0OworCisJaWYgKFdBUk5fT05fT05D RShpOTE1X2dlbV9vYmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmopKSkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlmaWxlID0gc2htZW1fZmlsZV9zZXR1cCgiZHJtIG1tIG9iamVjdCIsIG9iai0+ YmFzZS5zaXplLCBWTV9OT1JFU0VSVkUpOworCWlmIChJU19FUlIoZmlsZSkpCisJCXJldHVybiBQ VFJfRVJSKGZpbGUpOworCW1hcHBpbmcgPSBpOTE1X2dlbV9zZXRfaW5vZGVfZ2ZwKG9iai0+YmFz ZS5kZXYsIGZpbGUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZtYSwgdm4sICZvYmot PnZtYV9saXN0LCBvYmpfbGluaykKKwkJaWYgKGk5MTVfdm1hX3VuYmluZCh2bWEpKQorCQkJY29u dGludWU7CisKKwlpZiAob2JqLT5tYWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVFRCAmJiBsaXN0X2Vt cHR5KCZvYmotPnZtYV9saXN0KSkgeworCQkvKiBEaXNjYXJkIHRoZSBzdG9sZW4gcmVzZXJ2YXRp b24sIGFuZCByZXBsYWNlIHdpdGgKKwkJICogYW4gdW5wb3B1bGF0ZWQgc2htZW1mcyBvYmplY3Qu CisJCSAqLworCQlvYmotPm1hZHYgPSBfX0k5MTVfTUFEVl9QVVJHRUQ7CisJfSBlbHNlIHsKKwkJ cmV0ID0gY29weV9jb250ZW50KG9iaiwgaTkxNSwgbWFwcGluZyk7CisJCWlmIChyZXQpCisJCQln b3RvIGVycl9maWxlOworCX0KKworCXN0b2xlbl9wYWdlcyA9IG9iai0+cGFnZXM7CisJb2JqLT5w YWdlcyA9IE5VTEw7CisKKwlvYmotPmJhc2UuZmlscCA9IGZpbGU7CisKKwkvKiBSZWNyZWF0ZSBh bnkgcGlubmVkIGJpbmRpbmcgd2l0aCBwb2ludGVycyB0byB0aGUgbmV3IHN0b3JhZ2UgKi8KKwlp ZiAoIWxpc3RfZW1wdHkoJm9iai0+dm1hX2xpc3QpKSB7CisJCXJldCA9IGk5MTVfZ2VtX29iamVj dF9nZXRfcGFnZXNfZ3R0KG9iaik7CisJCWlmIChyZXQpIHsKKwkJCW9iai0+cGFnZXMgPSBzdG9s ZW5fcGFnZXM7CisJCQlnb3RvIGVycl9maWxlOworCQl9CisKKwkJb2JqLT5nZXRfcGFnZS5zZyA9 IG9iai0+cGFnZXMtPnNnbDsKKwkJb2JqLT5nZXRfcGFnZS5sYXN0ID0gMDsKKworCQlsaXN0X2Zv cl9lYWNoX2VudHJ5KHZtYSwgJm9iai0+dm1hX2xpc3QsIG9ial9saW5rKSB7CisJCQlpZiAoIWRy bV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSkKKwkJCQljb250aW51ZTsKKworCQkJLyog QXMgdm1hIGlzIGFscmVhZHkgYWxsb2NhdGVkIGFuZCBvbmx5IHRoZSBQVEVzCisJCQkgKiBoYXZl IHRvIGJlIHJlcHJvZ3JhbW1lZCwgbWFrZXMgdGhpcyB2bWFfYmluZAorCQkJICogY2FsbCBleHRy ZW1lbHkgdW5saWtlbHkgdG8gZmFpbC4KKwkJCSAqLworCQkJQlVHX09OKGk5MTVfdm1hX2JpbmQo dm1hLAorCQkJCQkgICAgICBvYmotPmNhY2hlX2xldmVsLAorCQkJCQkgICAgICBQSU5fVVBEQVRF KSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBSZW1vdmUgb2JqZWN0IGZyb20gZ2xvYmFsIGxpc3Qg aWYgbm8gcmVmZXJlbmNlIHRvIHRoZQorCQkgKiBwYWdlcyBpcyBoZWxkLgorCQkgKi8KKwkJbGlz dF9kZWwoJm9iai0+Z2xvYmFsX2xpc3QpOworCX0KKworCS8qIGRyb3AgdGhlIHN0b2xlbiBwaW4g YW5kIGJhY2tpbmcgKi8KKwlzaG1lbWZzX3BhZ2VzID0gb2JqLT5wYWdlczsKKwlvYmotPnBhZ2Vz ID0gc3RvbGVuX3BhZ2VzOworCisJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7CisJ b2JqLT5vcHMtPnB1dF9wYWdlcyhvYmopOworCWlmIChvYmotPm9wcy0+cmVsZWFzZSkKKwkJb2Jq LT5vcHMtPnJlbGVhc2Uob2JqKTsKKworCW9iai0+b3BzID0gJmk5MTVfZ2VtX29iamVjdF9vcHM7 CisJb2JqLT5wYWdlcyA9IHNobWVtZnNfcGFnZXM7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZpbGU6 CisJZnB1dChmaWxlKTsKKwlvYmotPmJhc2UuZmlscCA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30K KworaW50CitpOTE1X2dlbV9mcmVlemUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwkvKiBD YWxsZWQgYmVmb3JlIGk5MTVfZ2VtX3N1c3BlbmQoKSB3aGVuIGhpYmVybmF0aW5nICovCisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGRldik7CisJaW50IHJldDsKKwor CXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCS8qIEFjcm9zcyBoaWJlcm5hdGlvbiwgdGhlIHN0b2xlbiBhcmVhIGlz IG5vdCBwcmVzZXJ2ZWQuCisJICogQW55dGhpbmcgaW5zaWRlIHN0b2xlbiBtdXN0IGNvcGllZCBi YWNrIHRvIG5vcm1hbAorCSAqIG1lbW9yeSBpZiB3ZSB3aXNoIHRvIHByZXNlcnZlIGl0LgorCSAq LworCXJldCA9IGk5MTVfZ2VtX3N0b2xlbl9mcmVlemUoaTkxNSk7CisKKwltdXRleF91bmxvY2so JmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCiBpbnQKIGk5MTVfZ2VtX3N1 c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fc3RvbGVuLmMKaW5kZXggMWIxYjljMS4uMjUxOGViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fc3RvbGVuLmMKQEAgLTg1MywzICs4NTMsNTIgQEAgZXJyOgogCWRybV9nZW1fb2Jq ZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CisK K2ludCBpOTE1X2dlbV9zdG9sZW5fZnJlZXplKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosICp0bXA7CisJc3RydWN0IGxp c3RfaGVhZCAqcGhhc2VbXSA9IHsKKwkJJmk5MTUtPm1tLnVuYm91bmRfbGlzdCwgJmk5MTUtPm1t LmJvdW5kX2xpc3QsIE5VTEwKKwl9LCAqKnA7CisJaW50IHJldCA9IDA7CisKKwlmb3IgKHAgPSBw aGFzZTsgKnA7IHArKykgeworCQlzdHJ1Y3QgbGlzdF9oZWFkIG1pZ3JhdGU7CisJCWludCByZXQ7 CisKKwkJSU5JVF9MSVNUX0hFQUQoJm1pZ3JhdGUpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUob2JqLCB0bXAsICpwLCBnbG9iYWxfbGlzdCkgeworCQkJaWYgKG9iai0+c3RvbGVuID09IE5V TEwpCisJCQkJY29udGludWU7CisKKwkJCWlmIChvYmotPmludGVybmFsX3ZvbGF0aWxlKQorCQkJ CWNvbnRpbnVlOworCisJCQkvKiBJbiB0aGUgZ2VuZXJhbCBjYXNlLCB0aGlzIG9iamVjdCBtYXkg b25seSBiZSBhbGl2ZQorCQkJICogZHVlIHRvIGFuIGFjdGl2ZSByZWZlcmVuY2UsIGFuZCB0aGF0 IG1heSBkaXNhcHBlYXIKKwkJCSAqIHdoZW4gd2UgdW5iaW5kIGFueSBvZiB0aGUgb2JqZWN0cyAo YW5kIHNvIHdhaXQgdXBvbgorCQkJICogdGhlIEdQVSBhbmQgcmV0aXJlIHJlcXVlc3RzKS4gVG8g cHJldmVudCBvbmUgb2YgdGhlCisJCQkgKiBvYmplY3RzIGZyb20gZGlzYXBwZWFyaW5nIGJlbmVh dGggdXMsIHdlIG5lZWQgdG8KKwkJCSAqIHRha2UgYSByZWZlcmVuY2UgdG8gZWFjaCBhcyB3ZSBi dWlsZCB0aGUgbWlncmF0aW9uCisJCQkgKiBsaXN0LgorCQkJICoKKwkJCSAqIFRoaXMgaXMgc2lt aWxhciB0byB0aGUgc3RyYXRlZ3kgcmVxdWlyZWQgd2hpbHN0CisJCQkgKiBzaHJpbmtpbmcgb3Ig ZXZpY3Rpbmcgb2JqZWN0cyAoZm9yIHRoZSBzYW1lIHJlYXNvbikuCisJCQkgKi8KKwkJCWRybV9n ZW1fb2JqZWN0X3JlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwkJCWxpc3RfbW92ZSgmb2JqLT5nbG9i YWxfbGlzdCwgJm1pZ3JhdGUpOworCQl9CisKKwkJcmV0ID0gMDsKKwkJbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKG9iaiwgdG1wLCAmbWlncmF0ZSwgZ2xvYmFsX2xpc3QpIHsKKwkJCWlmIChyZXQg PT0gMCkKKwkJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZV9zdG9sZW5fdG9fc2htZW1m cyhvYmopOworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJCX0K KwkJbGlzdF9zcGxpY2UoJm1pZ3JhdGUsICpwKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0K KworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXgg NGJiZGE5Yy4uMWY0ZTRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAt MjUwMCw2ICsyNTAwLDkgQEAgaW50ZWxfYWxsb2NfaW5pdGlhbF9wbGFuZV9vYmooc3RydWN0IGlu dGVsX2NydGMgKmNydGMsCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKKwkvKiBOb3QgdG8gYmUgcHJl c2VydmVkIGFjcm9zcyBoaWJlcm5hdGlvbiAqLworCW9iai0+aW50ZXJuYWxfdm9sYXRpbGUgPSB0 cnVlOworCiAJb2JqLT50aWxpbmdfbW9kZSA9IHBsYW5lX2NvbmZpZy0+dGlsaW5nOwogCWlmIChv YmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1gpCiAJCW9iai0+c3RyaWRlID0gZmItPnBp dGNoZXNbMF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYwppbmRleCBlMDk0MDA1Li5hMGMy ODU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKQEAgLTE1Nyw2ICsxNTcsMTIgQEAg c3RhdGljIGludCBpbnRlbGZiX2FsbG9jKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCiAJ CWdvdG8gb3V0OwogCX0KIAorCS8qIERpc2NhcmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBCSU9TIGZi IGFjcm9zcyBoaWJlcm5hdGlvbi4KKwkgKiBXZSByZWFsbHkgd2FudCB0byBjb21wbGV0ZWx5IHRo cm93YXdheSB0aGUgZWFybGllciBmYmRldgorCSAqIGFuZCByZWNvbmZpZ3VyZSBpdCBhbnl3YXku CisJICovCisJb2JqLT5pbnRlcm5hbF92b2xhdGlsZSA9IHRydWU7CisKIAlmYiA9IF9faW50ZWxf ZnJhbWVidWZmZXJfY3JlYXRlKGRldiwgJm1vZGVfY21kLCBvYmopOwogCWlmIChJU19FUlIoZmIp KSB7CiAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3BtLmMKaW5kZXggMTJhYTM2Zi4uODlkYjA0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9w bS5jCkBAIC01NTQzLDYgKzU1NDMsOCBAQCBzdGF0aWMgdm9pZCB2YWxsZXl2aWV3X3NldHVwX3Bj dHgoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCUk5MTVfV1JJVEUoVkxWX1BD QlIsIHBjdHhfcGFkZHIpOwogCiBvdXQ6CisJLyogVGhlIHBvd2VyIGNvbnRleHQgbmVlZCBub3Qg YmUgcHJlc2VydmVkIGFjcm9zcyBoaWJlcm5hdGlvbiAqLworCXBjdHgtPmludGVybmFsX3ZvbGF0 aWxlID0gdHJ1ZTsKIAlEUk1fREVCVUdfRFJJVkVSKCJQQ0JSOiAweCUwOHhcbiIsIEk5MTVfUkVB RChWTFZfUENCUikpOwogCWRldl9wcml2LT52bHZfcGN0eCA9IHBjdHg7CiAJbXV0ZXhfdW5sb2Nr KCZkZXZfcHJpdi0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cmluZ2J1ZmZlci5jCmluZGV4IDU4NjM2MGIuLmEwZGZjYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9yaW5nYnVmZmVyLmMKQEAgLTIxODQsNiArMjE4NCwxMiBAQCBzdGF0aWMgaW50IGlu dGVsX2FsbG9jX3JpbmdidWZmZXJfb2JqKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaWYgKElT X0VSUihvYmopKQogCQlyZXR1cm4gUFRSX0VSUihvYmopOwogCisJLyogUmluZ2J1ZmZlciBvYmpl Y3RzIGFyZSBieSBkZWZpbml0aW9uIHZvbGF0aWxlIC0gb25seSB0aGUgY29tbWFuZHMKKwkgKiBi ZXR3ZWVuIEhFQUQgYW5kIFRBSUwgbmVlZCB0byBiZSBwcmVzZXJ2ZWQgYW5kIHdoaWxzdCB0aGVy ZSBhcmUKKwkgKiBhbnkgY29tbWFuZHMgdGhlcmUsIHRoZSByaW5nYnVmZmVyIGlzIHBpbm5lZCBi eSBhY3Rpdml0eS4KKwkgKi8KKwlvYmotPmludGVybmFsX3ZvbGF0aWxlID0gdHJ1ZTsKKwogCS8q IG1hcmsgcmluZyBidWZmZXJzIGFzIHJlYWQtb25seSBmcm9tIEdQVSBzaWRlIGJ5IGRlZmF1bHQg Ki8KIAlvYmotPmd0X3JvID0gMTsKIAotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=