From mboxrd@z Thu Jan 1 00:00:00 1970 From: ankitprasad.r.sharma@intel.com Subject: [PATCH 09/10] drm/i915: Migrate stolen objects before hibernation Date: Mon, 29 Feb 2016 13:09:38 +0530 Message-ID: <1456731579-25584-10-git-send-email-ankitprasad.r.sharma@intel.com> References: <1456731579-25584-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 1FEE088E5B for ; Mon, 29 Feb 2016 08:03:40 +0000 (UTC) In-Reply-To: <1456731579-25584-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: Ankitprasad Sharma , akash.goel@intel.com, shashidhar.hiremath@intel.com 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 ZWxkLCBSZWJhc2VkIChBbmtpdCkKClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXMg YXQgY2hyaXMtd2lsc29uLmNvLnVrPgpTaWduZWQtb2ZmLWJ5OiBBbmtpdHByYXNhZCBTaGFybWEg PGFua2l0cHJhc2FkLnIuc2hhcm1hQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IFR2cnRrbyBVcnN1 bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYyAgICAgICAgIHwgIDE3ICsrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCAgICAgICAgIHwgIDEwICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAg ICAgICAgfCAyMDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jICB8ICA0OSArKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2ZiZGV2LmMgICAgICB8ICAgNiArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9w bS5jICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZl ci5jIHwgICA2ICsKIDggZmlsZXMgY2hhbmdlZCwgMjgzIGluc2VydGlvbnMoKyksIDEyIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IDIwZTgyMDAuLmViMDE5OTEgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMTAwMCw2ICsxMDAwLDIxIEBAIHN0YXRpYyBpbnQg aTkxNV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAlyZXR1cm4gaTkxNV9kcm1fc3Vz cGVuZChkcm1fZGV2KTsKIH0KIAorc3RhdGljIGludCBpOTE1X3BtX2ZyZWV6ZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGk5MTVfZ2VtX2ZyZWV6ZShwY2lfZ2V0 X2RydmRhdGEodG9fcGNpX2RldihkZXYpKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXJldCA9IGk5MTVfcG1fc3VzcGVuZChkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBpOTE1X3BtX3N1c3BlbmRfbGF0ZShzdHJ1Y3Qg ZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkZXZfdG9faTkx NShkZXYpLT5kZXY7CkBAIC0xNjQ3LDcgKzE2NjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRl dl9wbV9vcHMgaTkxNV9wbV9vcHMgPSB7CiAJICogQHJlc3RvcmUsIEByZXN0b3JlX2Vhcmx5IDog Y2FsbGVkIGFmdGVyIHJlYm9vdGluZyBhbmQgcmVzdG9yaW5nIHRoZQogCSAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGhpYmVybmF0aW9uIGltYWdlIFtQTVNHX1JFU1RPUkVdCiAJICovCi0J LmZyZWV6ZSA9IGk5MTVfcG1fc3VzcGVuZCwKKwkuZnJlZXplID0gaTkxNV9wbV9mcmVlemUsCiAJ LmZyZWV6ZV9sYXRlID0gaTkxNV9wbV9zdXNwZW5kX2xhdGUsCiAJLnRoYXdfZWFybHkgPSBpOTE1 X3BtX3Jlc3VtZV9lYXJseSwKIAkudGhhdyA9IGk5MTVfcG1fcmVzdW1lLApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKaW5kZXggYzAxZThmNy4uMjc3MjUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o CkBAIC0yMTQyLDYgKzIxNDIsMTIgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgewogCSAq IEFkdmljZTogYXJlIHRoZSBiYWNraW5nIHBhZ2VzIHB1cmdlYWJsZT8KIAkgKi8KIAl1bnNpZ25l ZCBpbnQgbWFkdjoyOworCS8qKgorCSAqIFdoZXJlYXMgbWFkdiBpcyBmb3IgdXNlcnNwYWNlLCB0 aGVyZSBhcmUgY2VydGFpbiBzaXR1YXRpb25zCisJICogd2hlcmUgd2Ugd2FudCBJOTE1X01BRFZf RE9OVE5FRUQgYmVoYXZpb3VyIG9uIGludGVybmFsIG9iamVjdHMKKwkgKiB3aXRob3V0IGNvbmZs YXRpbmcgdGhlIHVzZXJzcGFjZSBzZXR0aW5nLgorCSAqLworCXVuc2lnbmVkIGludCBpbnRlcm5h bF92b2xhdGlsZToxOwogCiAJLyoqCiAJICogQ3VycmVudCB0aWxpbmcgbW9kZSBmb3IgdGhlIG9i amVjdC4KQEAgLTMwOTgsNiArMzEwNCw5IEBAIGludCBpOTE1X2dlbV9sM19yZW1hcChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwgaW50IHNsaWNlKTsKIHZvaWQgaTkxNV9nZW1faW5p dF9zd2l6emxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGk5MTVfZ2VtX2NsZWFu dXBfcmluZ2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGludCBfX211c3RfY2hlY2sg aTkxNV9ncHVfaWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBfX211c3RfY2hlY2sg aTkxNV9nZW1fZnJlZXplKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IF9fbXVzdF9jaGVj aworaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGVfc3RvbGVuX3RvX3NobWVtZnMoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaik7CiBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX3N1c3BlbmQo c3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIF9faTkxNV9hZGRfcmVxdWVzdChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKIAkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpiYXRjaF9vYmosCkBAIC0zMzIwLDYgKzMzMjksNyBAQCBpOTE1X2dlbV9vYmplY3RfY3JlYXRl X3N0b2xlbl9mb3JfcHJlYWxsb2NhdGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAg ICAgICB1MzIgc3RvbGVuX29mZnNldCwKIAkJCQkJICAgICAgIHUzMiBndHRfb2Zmc2V0LAogCQkJ CQkgICAgICAgdTMyIHNpemUpOworaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9zdG9sZW5fZnJl ZXplKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKIAogLyogaTkxNV9nZW1fc2hyaW5r ZXIuYyAqLwogdW5zaWduZWQgbG9uZyBpOTE1X2dlbV9zaHJpbmsoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggOGNiZTQyNi4uOWFh YjBhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC00NzI0LDEyICs0NzI0LDI3IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgaTkxNV9nZW1fb2JqZWN0 X29wcyA9IHsKIAkucHV0X3BhZ2VzID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlc19ndHQsCiB9 OwogCitzdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKgoraTkxNV9nZW1fc2V0X2lub2RlX2dm cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qg YWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGVfaW5vZGUoZmlsZSktPmlfbWFwcGluZzsKKwln ZnBfdCBtYXNrOworCisJbWFzayA9IEdGUF9ISUdIVVNFUiB8IF9fR0ZQX1JFQ0xBSU1BQkxFOwor CWlmIChJU19DUkVTVExJTkUoZGV2KSB8fCBJU19CUk9BRFdBVEVSKGRldikpIHsKKwkJLyogOTY1 Z20gY2Fubm90IHJlbG9jYXRlIG9iamVjdHMgYWJvdmUgNEdpQi4gKi8KKwkJbWFzayAmPSB+X19H RlBfSElHSE1FTTsKKwkJbWFzayB8PSBfX0dGUF9ETUEzMjsKKwl9CisJbWFwcGluZ19zZXRfZ2Zw X21hc2sobWFwcGluZywgbWFzayk7CisKKwlyZXR1cm4gbWFwcGluZzsKK30KKwogc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKmk5MTVfZ2VtX2FsbG9jX29iamVjdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAogCQkJCQkJICBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwotCWdmcF90IG1hc2s7 CiAJaW50IHJldDsKIAogCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9hbGxvYyhkZXYpOwpAQCAtNDc0 MiwxNSArNDc1Nyw3IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICppOTE1X2dlbV9hbGxv Y19vYmplY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsK IAl9CiAKLQltYXNrID0gR0ZQX0hJR0hVU0VSIHwgX19HRlBfUkVDTEFJTUFCTEU7Ci0JaWYgKElT X0NSRVNUTElORShkZXYpIHx8IElTX0JST0FEV0FURVIoZGV2KSkgewotCQkvKiA5NjVnbSBjYW5u b3QgcmVsb2NhdGUgb2JqZWN0cyBhYm92ZSA0R2lCLiAqLwotCQltYXNrICY9IH5fX0dGUF9ISUdI TUVNOwotCQltYXNrIHw9IF9fR0ZQX0RNQTMyOwotCX0KLQotCW1hcHBpbmcgPSBmaWxlX2lub2Rl KG9iai0+YmFzZS5maWxwKS0+aV9tYXBwaW5nOwotCW1hcHBpbmdfc2V0X2dmcF9tYXNrKG1hcHBp bmcsIG1hc2spOworCWk5MTVfZ2VtX3NldF9pbm9kZV9nZnAoZGV2LCBvYmotPmJhc2UuZmlscCk7 CiAKIAlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmosICZpOTE1X2dlbV9vYmplY3Rfb3BzKTsKIApA QCAtNDkyMiw2ICs0OTI5LDE3OSBAQCBpOTE1X2dlbV9zdG9wX3JpbmdidWZmZXJzKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCiAJCWRldl9wcml2LT5ndC5zdG9wX3JpbmcocmluZyk7CiB9CiAKK3N0 YXRpYyBpbnQKK2NvcHlfY29udGVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAor CQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2Ug Km1hcHBpbmcpCit7CisJc3RydWN0IGRybV9tbV9ub2RlIG5vZGU7CisJaW50IHJldCwgaTsKKwor CXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIGZhbHNlKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogc3RvbGVuIG9iamVjdHMgYXJlIGFscmVhZHkg cGlubmVkIHRvIHByZXZlbnQgc2hyaW5rYWdlICovCisJbWVtc2V0KCZub2RlLCAwLCBzaXplb2Yo bm9kZSkpOworCXJldCA9IGluc2VydF9tYXBwYWJsZV9ub2RlKGk5MTUsICZub2RlLCBQQUdFX1NJ WkUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgb2JqLT5i YXNlLnNpemUgLyBQQUdFX1NJWkU7IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJdm9p ZCAqX19pb21lbSBzcmM7CisJCXZvaWQgKmRzdDsKKworCQlpOTE1LT5ndHQuYmFzZS5pbnNlcnRf cGFnZSgmaTkxNS0+Z3R0LmJhc2UsCisJCQkJCSAgIGk5MTVfZ2VtX29iamVjdF9nZXRfZG1hX2Fk ZHJlc3Mob2JqLCBpKSwKKwkJCQkJICAgbm9kZS5zdGFydCwKKwkJCQkJICAgSTkxNV9DQUNIRV9O T05FLAorCQkJCQkgICAwKTsKKworCQlwYWdlID0gc2htZW1fcmVhZF9tYXBwaW5nX3BhZ2UobWFw cGluZywgaSk7CisJCWlmIChJU19FUlIocGFnZSkpIHsKKwkJCXJldCA9IFBUUl9FUlIocGFnZSk7 CisJCQlicmVhazsKKwkJfQorCisJCXNyYyA9IGlvX21hcHBpbmdfbWFwX2F0b21pY193YyhpOTE1 LT5ndHQubWFwcGFibGUsIG5vZGUuc3RhcnQpOworCQlkc3QgPSBrbWFwX2F0b21pYyhwYWdlKTsK KwkJd21iKCk7IC8qIGZsdXNoIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEdHVFQgKGluc2VydF9wYWdl KSAqLworCQltZW1jcHlfZnJvbWlvKGRzdCwgc3JjLCBQQUdFX1NJWkUpOworCQl3bWIoKTsgCS8q IGZsdXNoIHRoZSB3cml0ZSBiZWZvcmUgd2UgbW9kaWZ5IHRoZSBHR1RUICovCisJCWt1bm1hcF9h dG9taWMoZHN0KTsKKwkJaW9fbWFwcGluZ191bm1hcF9hdG9taWMoc3JjKTsKKworCQlwYWdlX2Nh Y2hlX3JlbGVhc2UocGFnZSk7CisJfQorCisJaTkxNS0+Z3R0LmJhc2UuY2xlYXJfcmFuZ2UoJmk5 MTUtPmd0dC5iYXNlLAorCQkJCSAgIG5vZGUuc3RhcnQsIG5vZGUuc2l6ZSwKKwkJCQkgICB0cnVl KTsKKwlyZW1vdmVfbWFwcGFibGVfbm9kZSgmbm9kZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXJldHVybiBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4ob2JqLCB0cnVl KTsKK30KKworLyoqCisgKiBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZV9zdG9sZW5fdG9fc2htZW1m cygpIC0gbWlncmF0ZXMgYSBzdG9sZW4gYmFja2VkCisgKiBvYmplY3QgdG8gc2htZW1mcworICog QG9iajogc3RvbGVuIGJhY2tlZCBvYmplY3QgdG8gYmUgbWlncmF0ZWQKKyAqCisgKiBSZXR1cm5z OiAwIG9uIHN1Y2Nlc3NmdWwgbWlncmF0aW9uLCBlcnJubyBvbiBmYWlsdXJlCisgKi8KKworaW50 CitpOTE1X2dlbV9vYmplY3RfbWlncmF0ZV9zdG9sZW5fdG9fc2htZW1mcyhzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g dG9faTkxNShvYmotPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgKnZuOworCXN0 cnVjdCBmaWxlICpmaWxlOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCXN0cnVj dCBzZ190YWJsZSAqc3RvbGVuX3BhZ2VzLCAqc2htZW1mc19wYWdlczsKKwlpbnQgcmV0OworCisJ aWYgKFdBUk5fT05fT05DRShpOTE1X2dlbV9vYmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmop KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmaWxlID0gc2htZW1fZmlsZV9zZXR1cCgiZHJtIG1t IG9iamVjdCIsIG9iai0+YmFzZS5zaXplLCBWTV9OT1JFU0VSVkUpOworCWlmIChJU19FUlIoZmls ZSkpCisJCXJldHVybiBQVFJfRVJSKGZpbGUpOworCW1hcHBpbmcgPSBpOTE1X2dlbV9zZXRfaW5v ZGVfZ2ZwKG9iai0+YmFzZS5kZXYsIGZpbGUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KHZtYSwgdm4sICZvYmotPnZtYV9saXN0LCBvYmpfbGluaykKKwkJaWYgKGk5MTVfdm1hX3VuYmlu ZCh2bWEpKQorCQkJY29udGludWU7CisKKwlpZiAob2JqLT5tYWR2ICE9IEk5MTVfTUFEVl9XSUxM TkVFRCAmJiBsaXN0X2VtcHR5KCZvYmotPnZtYV9saXN0KSkgeworCQkvKiBEaXNjYXJkIHRoZSBz dG9sZW4gcmVzZXJ2YXRpb24sIGFuZCByZXBsYWNlIHdpdGgKKwkJICogYW4gdW5wb3B1bGF0ZWQg c2htZW1mcyBvYmplY3QuCisJCSAqLworCQlvYmotPm1hZHYgPSBfX0k5MTVfTUFEVl9QVVJHRUQ7 CisJfSBlbHNlIHsKKwkJcmV0ID0gY29weV9jb250ZW50KG9iaiwgaTkxNSwgbWFwcGluZyk7CisJ CWlmIChyZXQpCisJCQlnb3RvIGVycl9maWxlOworCX0KKworCXN0b2xlbl9wYWdlcyA9IG9iai0+ cGFnZXM7CisJb2JqLT5wYWdlcyA9IE5VTEw7CisKKwlvYmotPmJhc2UuZmlscCA9IGZpbGU7CisK KwkvKiBSZWNyZWF0ZSBhbnkgcGlubmVkIGJpbmRpbmcgd2l0aCBwb2ludGVycyB0byB0aGUgbmV3 IHN0b3JhZ2UgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJm9iai0+dm1hX2xpc3QpKSB7CisJCXJldCA9 IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfZ3R0KG9iaik7CisJCWlmIChyZXQpIHsKKwkJCW9i ai0+cGFnZXMgPSBzdG9sZW5fcGFnZXM7CisJCQlnb3RvIGVycl9maWxlOworCQl9CisKKwkJb2Jq LT5nZXRfcGFnZS5zZyA9IG9iai0+cGFnZXMtPnNnbDsKKwkJb2JqLT5nZXRfcGFnZS5sYXN0ID0g MDsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm9iai0+dm1hX2xpc3QsIG9ial9saW5r KSB7CisJCQlpZiAoIWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSkKKwkJCQljb250 aW51ZTsKKworCQkJLyogQXMgdm1hIGlzIGFscmVhZHkgYWxsb2NhdGVkIGFuZCBvbmx5IHRoZSBQ VEVzCisJCQkgKiBoYXZlIHRvIGJlIHJlcHJvZ3JhbW1lZCwgbWFrZXMgdGhpcyB2bWFfYmluZAor CQkJICogY2FsbCBleHRyZW1lbHkgdW5saWtlbHkgdG8gZmFpbC4KKwkJCSAqLworCQkJQlVHX09O KGk5MTVfdm1hX2JpbmQodm1hLAorCQkJCQkgICAgICBvYmotPmNhY2hlX2xldmVsLAorCQkJCQkg ICAgICBQSU5fVVBEQVRFKSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBSZW1vdmUgb2JqZWN0IGZy b20gZ2xvYmFsIGxpc3QgaWYgbm8gcmVmZXJlbmNlIHRvIHRoZQorCQkgKiBwYWdlcyBpcyBoZWxk LgorCQkgKi8KKwkJbGlzdF9kZWwoJm9iai0+Z2xvYmFsX2xpc3QpOworCX0KKworCS8qIGRyb3Ag dGhlIHN0b2xlbiBwaW4gYW5kIGJhY2tpbmcgKi8KKwlzaG1lbWZzX3BhZ2VzID0gb2JqLT5wYWdl czsKKwlvYmotPnBhZ2VzID0gc3RvbGVuX3BhZ2VzOworCisJaTkxNV9nZW1fb2JqZWN0X3VucGlu X3BhZ2VzKG9iaik7CisJb2JqLT5vcHMtPnB1dF9wYWdlcyhvYmopOworCWlmIChvYmotPm9wcy0+ cmVsZWFzZSkKKwkJb2JqLT5vcHMtPnJlbGVhc2Uob2JqKTsKKworCW9iai0+b3BzID0gJmk5MTVf Z2VtX29iamVjdF9vcHM7CisJb2JqLT5wYWdlcyA9IHNobWVtZnNfcGFnZXM7CisKKwlyZXR1cm4g MDsKKworZXJyX2ZpbGU6CisJZnB1dChmaWxlKTsKKwlvYmotPmJhc2UuZmlscCA9IE5VTEw7CisJ cmV0dXJuIHJldDsKK30KKworaW50CitpOTE1X2dlbV9mcmVlemUoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKK3sKKwkvKiBDYWxsZWQgYmVmb3JlIGk5MTVfZ2VtX3N1c3BlbmQoKSB3aGVuIGhpYmVy bmF0aW5nICovCisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGRldik7 CisJaW50IHJldDsKKworCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEFjcm9zcyBoaWJlcm5hdGlvbiwgdGhl IHN0b2xlbiBhcmVhIGlzIG5vdCBwcmVzZXJ2ZWQuCisJICogQW55dGhpbmcgaW5zaWRlIHN0b2xl biBtdXN0IGNvcGllZCBiYWNrIHRvIG5vcm1hbAorCSAqIG1lbW9yeSBpZiB3ZSB3aXNoIHRvIHBy ZXNlcnZlIGl0LgorCSAqLworCXJldCA9IGk5MTVfZ2VtX3N0b2xlbl9mcmVlemUoaTkxNSk7CisK KwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCiBp bnQKIGk5MTVfZ2VtX3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKaW5kZXggZTQyYjhmMS4uNjI0NGRhZSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKQEAgLTg0NSwzICs4NDUsNTIgQEAgZXJy OgogCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogCXJldHVybiBFUlJf UFRSKHJldCk7CiB9CisKK2ludCBpOTE1X2dlbV9zdG9sZW5fZnJlZXplKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosICp0 bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqcGhhc2VbXSA9IHsKKwkJJmk5MTUtPm1tLnVuYm91bmRf bGlzdCwgJmk5MTUtPm1tLmJvdW5kX2xpc3QsIE5VTEwKKwl9LCAqKnA7CisJaW50IHJldCA9IDA7 CisKKwlmb3IgKHAgPSBwaGFzZTsgKnA7IHArKykgeworCQlzdHJ1Y3QgbGlzdF9oZWFkIG1pZ3Jh dGU7CisJCWludCByZXQ7CisKKwkJSU5JVF9MSVNUX0hFQUQoJm1pZ3JhdGUpOworCQlsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUob2JqLCB0bXAsICpwLCBnbG9iYWxfbGlzdCkgeworCQkJaWYgKG9i ai0+c3RvbGVuID09IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCWlmIChvYmotPmludGVybmFs X3ZvbGF0aWxlKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBJbiB0aGUgZ2VuZXJhbCBjYXNlLCB0 aGlzIG9iamVjdCBtYXkgb25seSBiZSBhbGl2ZQorCQkJICogZHVlIHRvIGFuIGFjdGl2ZSByZWZl cmVuY2UsIGFuZCB0aGF0IG1heSBkaXNhcHBlYXIKKwkJCSAqIHdoZW4gd2UgdW5iaW5kIGFueSBv ZiB0aGUgb2JqZWN0cyAoYW5kIHNvIHdhaXQgdXBvbgorCQkJICogdGhlIEdQVSBhbmQgcmV0aXJl IHJlcXVlc3RzKS4gVG8gcHJldmVudCBvbmUgb2YgdGhlCisJCQkgKiBvYmplY3RzIGZyb20gZGlz YXBwZWFyaW5nIGJlbmVhdGggdXMsIHdlIG5lZWQgdG8KKwkJCSAqIHRha2UgYSByZWZlcmVuY2Ug dG8gZWFjaCBhcyB3ZSBidWlsZCB0aGUgbWlncmF0aW9uCisJCQkgKiBsaXN0LgorCQkJICoKKwkJ CSAqIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgc3RyYXRlZ3kgcmVxdWlyZWQgd2hpbHN0CisJCQkg KiBzaHJpbmtpbmcgb3IgZXZpY3Rpbmcgb2JqZWN0cyAoZm9yIHRoZSBzYW1lIHJlYXNvbikuCisJ CQkgKi8KKwkJCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwkJCWxpc3Rf bW92ZSgmb2JqLT5nbG9iYWxfbGlzdCwgJm1pZ3JhdGUpOworCQl9CisKKwkJcmV0ID0gMDsKKwkJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgdG1wLCAmbWlncmF0ZSwgZ2xvYmFsX2xpc3Qp IHsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZV9z dG9sZW5fdG9fc2htZW1mcyhvYmopOworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9i ai0+YmFzZSk7CisJCX0KKwkJbGlzdF9zcGxpY2UoJm1pZ3JhdGUsICpwKTsKKwkJaWYgKHJldCkK KwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k aXNwbGF5LmMKaW5kZXggODk2MmI4Yy4uZjVkNTIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYwpAQCAtMjU2NSw2ICsyNTY1LDkgQEAgaW50ZWxfYWxsb2NfaW5pdGlhbF9wbGFu ZV9vYmooc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKKwkv KiBOb3QgdG8gYmUgcHJlc2VydmVkIGFjcm9zcyBoaWJlcm5hdGlvbiAqLworCW9iai0+aW50ZXJu YWxfdm9sYXRpbGUgPSB0cnVlOworCiAJb2JqLT50aWxpbmdfbW9kZSA9IHBsYW5lX2NvbmZpZy0+ dGlsaW5nOwogCWlmIChvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1gpCiAJCW9iai0+ c3RyaWRlID0gZmItPnBpdGNoZXNbMF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYwppbmRl eCBlMWJmZjA4Li44OTVmYzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9mYmRldi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKQEAgLTE1 Niw2ICsxNTYsMTIgQEAgc3RhdGljIGludCBpbnRlbGZiX2FsbG9jKHN0cnVjdCBkcm1fZmJfaGVs cGVyICpoZWxwZXIsCiAJCWdvdG8gb3V0OwogCX0KIAorCS8qIERpc2NhcmQgdGhlIGNvbnRlbnRz IG9mIHRoZSBCSU9TIGZiIGFjcm9zcyBoaWJlcm5hdGlvbi4KKwkgKiBXZSByZWFsbHkgd2FudCB0 byBjb21wbGV0ZWx5IHRocm93YXdheSB0aGUgZWFybGllciBmYmRldgorCSAqIGFuZCByZWNvbmZp Z3VyZSBpdCBhbnl3YXkuCisJICovCisJb2JqLT5pbnRlcm5hbF92b2xhdGlsZSA9IHRydWU7CisK IAlmYiA9IF9faW50ZWxfZnJhbWVidWZmZXJfY3JlYXRlKGRldiwgJm1vZGVfY21kLCBvYmopOwog CWlmIChJU19FUlIoZmIpKSB7CiAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJh c2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKaW5kZXggZWZlZTUzMS4uMTVmOTRhNiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9wbS5jCkBAIC01Mjk1LDYgKzUyOTUsOCBAQCBzdGF0aWMgdm9pZCB2YWxs ZXl2aWV3X3NldHVwX3BjdHgoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlJOTE1X1dSSVRFKFZM Vl9QQ0JSLCBwY3R4X3BhZGRyKTsKIAogb3V0OgorCS8qIFRoZSBwb3dlciBjb250ZXh0IG5lZWQg bm90IGJlIHByZXNlcnZlZCBhY3Jvc3MgaGliZXJuYXRpb24gKi8KKwlwY3R4LT5pbnRlcm5hbF92 b2xhdGlsZSA9IHRydWU7CiAJRFJNX0RFQlVHX0RSSVZFUigiUENCUjogMHglMDh4XG4iLCBJOTE1 X1JFQUQoVkxWX1BDQlIpKTsKIAlkZXZfcHJpdi0+dmx2X3BjdHggPSBwY3R4OwogCW11dGV4X3Vu bG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5jCmluZGV4IGZiYWFiYTEuLjkyMjY2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9yaW5nYnVmZmVyLmMKQEAgLTIxNTUsNiArMjE1NSwxMiBAQCBzdGF0aWMgaW50IGludGVsX2Fs bG9jX3JpbmdidWZmZXJfb2JqKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaWYgKElTX0VSUihv YmopKQogCQlyZXR1cm4gUFRSX0VSUihvYmopOwogCisJLyogUmluZ2J1ZmZlciBvYmplY3RzIGFy ZSBieSBkZWZpbml0aW9uIHZvbGF0aWxlIC0gb25seSB0aGUgY29tbWFuZHMKKwkgKiBiZXR3ZWVu IEhFQUQgYW5kIFRBSUwgbmVlZCB0byBiZSBwcmVzZXJ2ZWQgYW5kIHdoaWxzdCB0aGVyZSBhcmUK KwkgKiBhbnkgY29tbWFuZHMgdGhlcmUsIHRoZSByaW5nYnVmZmVyIGlzIHBpbm5lZCBieSBhY3Rp dml0eS4KKwkgKi8KKwlvYmotPmludGVybmFsX3ZvbGF0aWxlID0gdHJ1ZTsKKwogCS8qIG1hcmsg cmluZyBidWZmZXJzIGFzIHJlYWQtb25seSBmcm9tIEdQVSBzaWRlIGJ5IGRlZmF1bHQgKi8KIAlv YmotPmd0X3JvID0gMTsKIAotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=