From mboxrd@z Thu Jan 1 00:00:00 1970 From: ankitprasad.r.sharma@intel.com Subject: [PATCH 09/12] drm/i915: Migrate stolen objects before hibernation Date: Wed, 20 Apr 2016 16:47:36 +0530 Message-ID: <1461151059-16361-10-git-send-email-ankitprasad.r.sharma@intel.com> References: <1461151059-16361-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 mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 5A3C96E98A for ; Wed, 20 Apr 2016 11:42:55 +0000 (UTC) In-Reply-To: <1461151059-16361-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 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 ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgIHwgIDE3ICsrLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgIDEwICsrCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgfCAyMDIgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jICB8ICA0OSAr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jICAgIHwgICAzICsK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMgICAgICB8ICAgNiArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIHwgICA2ICsKIDggZmlsZXMgY2hhbmdlZCwgMjgzIGlu c2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4 IDE4ZWIzZTYuLjllNDExZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMTAyMCw2ICsx MDIwLDIxIEBAIHN0YXRpYyBpbnQgaTkxNV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikK IAlyZXR1cm4gaTkxNV9kcm1fc3VzcGVuZChkcm1fZGV2KTsKIH0KIAorc3RhdGljIGludCBpOTE1 X3BtX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGk5 MTVfZ2VtX2ZyZWV6ZShwY2lfZ2V0X2RydmRhdGEodG9fcGNpX2RldihkZXYpKSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGk5MTVfcG1fc3VzcGVuZChkZXYpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBpOTE1X3Bt X3N1c3BlbmRfbGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9kZXZpY2Ug KmRybV9kZXYgPSBkZXZfdG9faTkxNShkZXYpLT5kZXY7CkBAIC0xNjY3LDcgKzE2ODIsNyBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaTkxNV9wbV9vcHMgPSB7CiAJICogQHJlc3Rv cmUsIEByZXN0b3JlX2Vhcmx5IDogY2FsbGVkIGFmdGVyIHJlYm9vdGluZyBhbmQgcmVzdG9yaW5n IHRoZQogCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpYmVybmF0aW9uIGltYWdlIFtQ TVNHX1JFU1RPUkVdCiAJICovCi0JLmZyZWV6ZSA9IGk5MTVfcG1fc3VzcGVuZCwKKwkuZnJlZXpl ID0gaTkxNV9wbV9mcmVlemUsCiAJLmZyZWV6ZV9sYXRlID0gaTkxNV9wbV9zdXNwZW5kX2xhdGUs CiAJLnRoYXdfZWFybHkgPSBpOTE1X3BtX3Jlc3VtZV9lYXJseSwKIAkudGhhdyA9IGk5MTVfcG1f cmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZDk5OGY2Yy4uYzdmZTg2MyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0yMTUyLDYgKzIxNTIsMTIgQEAgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgewogCSAqIEFkdmljZTogYXJlIHRoZSBiYWNraW5nIHBhZ2VzIHB1cmdl YWJsZT8KIAkgKi8KIAl1bnNpZ25lZCBpbnQgbWFkdjoyOworCS8qKgorCSAqIFdoZXJlYXMgbWFk diBpcyBmb3IgdXNlcnNwYWNlLCB0aGVyZSBhcmUgY2VydGFpbiBzaXR1YXRpb25zCisJICogd2hl cmUgd2Ugd2FudCBJOTE1X01BRFZfRE9OVE5FRUQgYmVoYXZpb3VyIG9uIGludGVybmFsIG9iamVj dHMKKwkgKiB3aXRob3V0IGNvbmZsYXRpbmcgdGhlIHVzZXJzcGFjZSBzZXR0aW5nLgorCSAqLwor CXVuc2lnbmVkIGludCBpbnRlcm5hbF92b2xhdGlsZToxOwogCiAJLyoqCiAJICogQ3VycmVudCB0 aWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdC4KQEAgLTMxODEsNiArMzE4Nyw5IEBAIGludCBpOTE1 X2dlbV9sM19yZW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwgaW50IHNsaWNl KTsKIHZvaWQgaTkxNV9nZW1faW5pdF9zd2l6emxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 CiB2b2lkIGk5MTVfZ2VtX2NsZWFudXBfZW5naW5lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsK IGludCBfX211c3RfY2hlY2sgaTkxNV9ncHVfaWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsK K2ludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fZnJlZXplKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp OworaW50IF9fbXVzdF9jaGVjaworaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGVfc3RvbGVuX3RvX3No bWVtZnMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CiBpbnQgX19tdXN0X2NoZWNr IGk5MTVfZ2VtX3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIF9faTkxNV9h ZGRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKIAkJCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpiYXRjaF9vYmosCkBAIC0zNDA0LDYgKzM0MTMsNyBAQCBpOTE1 X2dlbV9vYmplY3RfY3JlYXRlX3N0b2xlbl9mb3JfcHJlYWxsb2NhdGVkKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCiAJCQkJCSAgICAgICB1MzIgc3RvbGVuX29mZnNldCwKIAkJCQkJICAgICAgIHUz MiBndHRfb2Zmc2V0LAogCQkJCQkgICAgICAgdTMyIHNpemUpOworaW50IF9fbXVzdF9jaGVjayBp OTE1X2dlbV9zdG9sZW5fZnJlZXplKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKIAog LyogaTkxNV9nZW1fc2hyaW5rZXIuYyAqLwogdW5zaWduZWQgbG9uZyBpOTE1X2dlbV9zaHJpbmso c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK aW5kZXggM2U3MjczNy4uNDg5NTljZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC00NzU3 LDEyICs0NzU3LDI3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9v cHMgaTkxNV9nZW1fb2JqZWN0X29wcyA9IHsKIAkucHV0X3BhZ2VzID0gaTkxNV9nZW1fb2JqZWN0 X3B1dF9wYWdlc19ndHQsCiB9OwogCitzdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKgoraTkx NV9nZW1fc2V0X2lub2RlX2dmcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZmlsZSAq ZmlsZSkKK3sKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGVfaW5vZGUoZmls ZSktPmlfbWFwcGluZzsKKwlnZnBfdCBtYXNrOworCisJbWFzayA9IEdGUF9ISUdIVVNFUiB8IF9f R0ZQX1JFQ0xBSU1BQkxFOworCWlmIChJU19DUkVTVExJTkUoZGV2KSB8fCBJU19CUk9BRFdBVEVS KGRldikpIHsKKwkJLyogOTY1Z20gY2Fubm90IHJlbG9jYXRlIG9iamVjdHMgYWJvdmUgNEdpQi4g Ki8KKwkJbWFzayAmPSB+X19HRlBfSElHSE1FTTsKKwkJbWFzayB8PSBfX0dGUF9ETUEzMjsKKwl9 CisJbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgbWFzayk7CisKKwlyZXR1cm4gbWFwcGlu ZzsKK30KKwogc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmk5MTVfZ2VtX2FsbG9jX29iamVj dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkJICBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBw aW5nOwotCWdmcF90IG1hc2s7CiAJaW50IHJldDsKIAogCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9h bGxvYyhkZXYpOwpAQCAtNDc3NSwxNSArNDc5MCw3IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICppOTE1X2dlbV9hbGxvY19vYmplY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJcmV0 dXJuIEVSUl9QVFIocmV0KTsKIAl9CiAKLQltYXNrID0gR0ZQX0hJR0hVU0VSIHwgX19HRlBfUkVD TEFJTUFCTEU7Ci0JaWYgKElTX0NSRVNUTElORShkZXYpIHx8IElTX0JST0FEV0FURVIoZGV2KSkg ewotCQkvKiA5NjVnbSBjYW5ub3QgcmVsb2NhdGUgb2JqZWN0cyBhYm92ZSA0R2lCLiAqLwotCQlt YXNrICY9IH5fX0dGUF9ISUdITUVNOwotCQltYXNrIHw9IF9fR0ZQX0RNQTMyOwotCX0KLQotCW1h cHBpbmcgPSBmaWxlX2lub2RlKG9iai0+YmFzZS5maWxwKS0+aV9tYXBwaW5nOwotCW1hcHBpbmdf c2V0X2dmcF9tYXNrKG1hcHBpbmcsIG1hc2spOworCWk5MTVfZ2VtX3NldF9pbm9kZV9nZnAoZGV2 LCBvYmotPmJhc2UuZmlscCk7CiAKIAlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmosICZpOTE1X2dl bV9vYmplY3Rfb3BzKTsKIApAQCAtNDk1NSw2ICs0OTYyLDE3OSBAQCBpOTE1X2dlbV9zdG9wX2Vu Z2luZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJZGV2X3ByaXYtPmd0LnN0b3BfZW5naW5l KGVuZ2luZSk7CiB9CiAKK3N0YXRpYyBpbnQKK2NvcHlfY29udGVudChzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAorCQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJc3Ry dWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9 ICZpOTE1LT5nZ3R0OworCXN0cnVjdCBkcm1fbW1fbm9kZSBub2RlOworCWludCByZXQsIGk7CisK KwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4ob2JqLCBmYWxzZSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHN0b2xlbiBvYmplY3RzIGFyZSBhbHJlYWR5 IHBpbm5lZCB0byBwcmV2ZW50IHNocmlua2FnZSAqLworCW1lbXNldCgmbm9kZSwgMCwgc2l6ZW9m KG5vZGUpKTsKKwlyZXQgPSBpbnNlcnRfbWFwcGFibGVfbm9kZShpOTE1LCAmbm9kZSwgUEFHRV9T SVpFKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IG9iai0+ YmFzZS5zaXplIC8gUEFHRV9TSVpFOyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCXZv aWQgKl9faW9tZW0gc3JjOworCQl2b2lkICpkc3Q7CisKKwkJZ2d0dC0+YmFzZS5pbnNlcnRfcGFn ZSgmZ2d0dC0+YmFzZSwKKwkJCQkgICAgICAgaTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVz cyhvYmosIGkpLAorCQkJCSAgICAgICBub2RlLnN0YXJ0LAorCQkJCSAgICAgICBJOTE1X0NBQ0hF X05PTkUsIDApOworCisJCXBhZ2UgPSBzaG1lbV9yZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBp KTsKKwkJaWYgKElTX0VSUihwYWdlKSkgeworCQkJcmV0ID0gUFRSX0VSUihwYWdlKTsKKwkJCWJy ZWFrOworCQl9CisKKwkJc3JjID0gaW9fbWFwcGluZ19tYXBfYXRvbWljX3djKGdndHQtPm1hcHBh YmxlLCBub2RlLnN0YXJ0KTsKKwkJZHN0ID0ga21hcF9hdG9taWMocGFnZSk7CisJCXdtYigpOyAv KiBmbHVzaCBtb2RpZmljYXRpb25zIHRvIHRoZSBHR1RUIChpbnNlcnRfcGFnZSkgKi8KKwkJbWVt Y3B5X2Zyb21pbyhkc3QsIHNyYywgUEFHRV9TSVpFKTsKKwkJd21iKCk7IAkvKiBmbHVzaCB0aGUg d3JpdGUgYmVmb3JlIHdlIG1vZGlmeSB0aGUgR0dUVCAqLworCQlrdW5tYXBfYXRvbWljKGRzdCk7 CisJCWlvX21hcHBpbmdfdW5tYXBfYXRvbWljKHNyYyk7CisKKwkJcHV0X3BhZ2UocGFnZSk7CisJ fQorCisJZ2d0dC0+YmFzZS5jbGVhcl9yYW5nZSgmZ2d0dC0+YmFzZSwKKwkJCSAgICAgICBub2Rl LnN0YXJ0LCBub2RlLnNpemUsCisJCQkgICAgICAgdHJ1ZSk7CisJcmVtb3ZlX21hcHBhYmxlX25v ZGUoJm5vZGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gaTkxNV9nZW1f b2JqZWN0X3NldF90b19jcHVfZG9tYWluKG9iaiwgdHJ1ZSk7Cit9CisKKy8qKgorICogaTkxNV9n ZW1fb2JqZWN0X21pZ3JhdGVfc3RvbGVuX3RvX3NobWVtZnMoKSAtIG1pZ3JhdGVzIGEgc3RvbGVu IGJhY2tlZAorICogb2JqZWN0IHRvIHNobWVtZnMKKyAqIEBvYmo6IHN0b2xlbiBiYWNrZWQgb2Jq ZWN0IHRvIGJlIG1pZ3JhdGVkCisgKgorICogUmV0dXJuczogMCBvbiBzdWNjZXNzZnVsIG1pZ3Jh dGlvbiwgZXJybm8gb24gZmFpbHVyZQorICovCisKK2ludAoraTkxNV9nZW1fb2JqZWN0X21pZ3Jh dGVfc3RvbGVuX3RvX3NobWVtZnMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7 CisJc3RydWN0IGk5MTVfdm1hICp2bWEsICp2bjsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlzdHJ1 Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnN0b2xlbl9wYWdl cywgKnNobWVtZnNfcGFnZXM7CisJaW50IHJldDsKKworCWlmIChXQVJOX09OX09OQ0UoaTkxNV9n ZW1fb2JqZWN0X25lZWRzX2JpdDE3X3N3aXp6bGUob2JqKSkpCisJCXJldHVybiAtRUlOVkFMOwor CisJZmlsZSA9IHNobWVtX2ZpbGVfc2V0dXAoImRybSBtbSBvYmplY3QiLCBvYmotPmJhc2Uuc2l6 ZSwgVk1fTk9SRVNFUlZFKTsKKwlpZiAoSVNfRVJSKGZpbGUpKQorCQlyZXR1cm4gUFRSX0VSUihm aWxlKTsKKwltYXBwaW5nID0gaTkxNV9nZW1fc2V0X2lub2RlX2dmcChvYmotPmJhc2UuZGV2LCBm aWxlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bWEsIHZuLCAmb2JqLT52bWFfbGlz dCwgb2JqX2xpbmspCisJCWlmIChpOTE1X3ZtYV91bmJpbmQodm1hKSkKKwkJCWNvbnRpbnVlOwor CisJaWYgKG9iai0+bWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQgJiYgbGlzdF9lbXB0eSgmb2Jq LT52bWFfbGlzdCkpIHsKKwkJLyogRGlzY2FyZCB0aGUgc3RvbGVuIHJlc2VydmF0aW9uLCBhbmQg cmVwbGFjZSB3aXRoCisJCSAqIGFuIHVucG9wdWxhdGVkIHNobWVtZnMgb2JqZWN0LgorCQkgKi8K KwkJb2JqLT5tYWR2ID0gX19JOTE1X01BRFZfUFVSR0VEOworCX0gZWxzZSB7CisJCXJldCA9IGNv cHlfY29udGVudChvYmosIGk5MTUsIG1hcHBpbmcpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJf ZmlsZTsKKwl9CisKKwlzdG9sZW5fcGFnZXMgPSBvYmotPnBhZ2VzOworCW9iai0+cGFnZXMgPSBO VUxMOworCisJb2JqLT5iYXNlLmZpbHAgPSBmaWxlOworCisJLyogUmVjcmVhdGUgYW55IHBpbm5l ZCBiaW5kaW5nIHdpdGggcG9pbnRlcnMgdG8gdGhlIG5ldyBzdG9yYWdlICovCisJaWYgKCFsaXN0 X2VtcHR5KCZvYmotPnZtYV9saXN0KSkgeworCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3Bh Z2VzX2d0dChvYmopOworCQlpZiAocmV0KSB7CisJCQlvYmotPnBhZ2VzID0gc3RvbGVuX3BhZ2Vz OworCQkJZ290byBlcnJfZmlsZTsKKwkJfQorCisJCW9iai0+Z2V0X3BhZ2Uuc2cgPSBvYmotPnBh Z2VzLT5zZ2w7CisJCW9iai0+Z2V0X3BhZ2UubGFzdCA9IDA7CisKKwkJbGlzdF9mb3JfZWFjaF9l bnRyeSh2bWEsICZvYmotPnZtYV9saXN0LCBvYmpfbGluaykgeworCQkJaWYgKCFkcm1fbW1fbm9k ZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkpCisJCQkJY29udGludWU7CisKKwkJCS8qIEFzIHZtYSBp cyBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgb25seSB0aGUgUFRFcworCQkJICogaGF2ZSB0byBiZSBy ZXByb2dyYW1tZWQsIG1ha2VzIHRoaXMgdm1hX2JpbmQKKwkJCSAqIGNhbGwgZXh0cmVtZWx5IHVu bGlrZWx5IHRvIGZhaWwuCisJCQkgKi8KKwkJCUJVR19PTihpOTE1X3ZtYV9iaW5kKHZtYSwKKwkJ CQkJICAgICAgb2JqLT5jYWNoZV9sZXZlbCwKKwkJCQkJICAgICAgUElOX1VQREFURSkpOworCQl9 CisJfSBlbHNlIHsKKwkJLyogUmVtb3ZlIG9iamVjdCBmcm9tIGdsb2JhbCBsaXN0IGlmIG5vIHJl ZmVyZW5jZSB0byB0aGUKKwkJICogcGFnZXMgaXMgaGVsZC4KKwkJICovCisJCWxpc3RfZGVsKCZv YmotPmdsb2JhbF9saXN0KTsKKwl9CisKKwkvKiBkcm9wIHRoZSBzdG9sZW4gcGluIGFuZCBiYWNr aW5nICovCisJc2htZW1mc19wYWdlcyA9IG9iai0+cGFnZXM7CisJb2JqLT5wYWdlcyA9IHN0b2xl bl9wYWdlczsKKworCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOworCW9iai0+b3Bz LT5wdXRfcGFnZXMob2JqKTsKKwlpZiAob2JqLT5vcHMtPnJlbGVhc2UpCisJCW9iai0+b3BzLT5y ZWxlYXNlKG9iaik7CisKKwlvYmotPm9wcyA9ICZpOTE1X2dlbV9vYmplY3Rfb3BzOworCW9iai0+ cGFnZXMgPSBzaG1lbWZzX3BhZ2VzOworCisJcmV0dXJuIDA7CisKK2Vycl9maWxlOgorCWZwdXQo ZmlsZSk7CisJb2JqLT5iYXNlLmZpbHAgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK2ludAor aTkxNV9nZW1fZnJlZXplKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJLyogQ2FsbGVkIGJl Zm9yZSBpOTE1X2dlbV9zdXNwZW5kKCkgd2hlbiBoaWJlcm5hdGluZyAqLworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBp OTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZShkZXYpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwkvKiBBY3Jvc3MgaGliZXJuYXRpb24sIHRoZSBzdG9sZW4gYXJlYSBpcyBub3QgcHJl c2VydmVkLgorCSAqIEFueXRoaW5nIGluc2lkZSBzdG9sZW4gbXVzdCBjb3BpZWQgYmFjayB0byBu b3JtYWwKKwkgKiBtZW1vcnkgaWYgd2Ugd2lzaCB0byBwcmVzZXJ2ZSBpdC4KKwkgKi8KKwlyZXQg PSBpOTE1X2dlbV9zdG9sZW5fZnJlZXplKGk5MTUpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKwogaW50CiBpOTE1X2dlbV9zdXNwZW5kKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9zdG9sZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xl bi5jCmluZGV4IGI4NTczYTYuLmQ5NzU2ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX3N0b2xlbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X3N0b2xlbi5jCkBAIC04NTEsMyArODUxLDUyIEBAIGVycjoKIAlkcm1fZ2VtX29iamVjdF91bnJl ZmVyZW5jZSgmb2JqLT5iYXNlKTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQorCitpbnQgaTkx NV9nZW1fc3RvbGVuX2ZyZWV6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCAqdG1wOworCXN0cnVjdCBsaXN0X2hlYWQg KnBoYXNlW10gPSB7CisJCSZpOTE1LT5tbS51bmJvdW5kX2xpc3QsICZpOTE1LT5tbS5ib3VuZF9s aXN0LCBOVUxMCisJfSwgKipwOworCWludCByZXQgPSAwOworCisJZm9yIChwID0gcGhhc2U7ICpw OyBwKyspIHsKKwkJc3RydWN0IGxpc3RfaGVhZCBtaWdyYXRlOworCQlpbnQgcmV0OworCisJCUlO SVRfTElTVF9IRUFEKCZtaWdyYXRlKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwg dG1wLCAqcCwgZ2xvYmFsX2xpc3QpIHsKKwkJCWlmIChvYmotPnN0b2xlbiA9PSBOVUxMKQorCQkJ CWNvbnRpbnVlOworCisJCQlpZiAob2JqLT5pbnRlcm5hbF92b2xhdGlsZSkKKwkJCQljb250aW51 ZTsKKworCQkJLyogSW4gdGhlIGdlbmVyYWwgY2FzZSwgdGhpcyBvYmplY3QgbWF5IG9ubHkgYmUg YWxpdmUKKwkJCSAqIGR1ZSB0byBhbiBhY3RpdmUgcmVmZXJlbmNlLCBhbmQgdGhhdCBtYXkgZGlz YXBwZWFyCisJCQkgKiB3aGVuIHdlIHVuYmluZCBhbnkgb2YgdGhlIG9iamVjdHMgKGFuZCBzbyB3 YWl0IHVwb24KKwkJCSAqIHRoZSBHUFUgYW5kIHJldGlyZSByZXF1ZXN0cykuIFRvIHByZXZlbnQg b25lIG9mIHRoZQorCQkJICogb2JqZWN0cyBmcm9tIGRpc2FwcGVhcmluZyBiZW5lYXRoIHVzLCB3 ZSBuZWVkIHRvCisJCQkgKiB0YWtlIGEgcmVmZXJlbmNlIHRvIGVhY2ggYXMgd2UgYnVpbGQgdGhl IG1pZ3JhdGlvbgorCQkJICogbGlzdC4KKwkJCSAqCisJCQkgKiBUaGlzIGlzIHNpbWlsYXIgdG8g dGhlIHN0cmF0ZWd5IHJlcXVpcmVkIHdoaWxzdAorCQkJICogc2hyaW5raW5nIG9yIGV2aWN0aW5n IG9iamVjdHMgKGZvciB0aGUgc2FtZSByZWFzb24pLgorCQkJICovCisJCQlkcm1fZ2VtX29iamVj dF9yZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJCQlsaXN0X21vdmUoJm9iai0+Z2xvYmFsX2xpc3Qs ICZtaWdyYXRlKTsKKwkJfQorCisJCXJldCA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2Fm ZShvYmosIHRtcCwgJm1pZ3JhdGUsIGdsb2JhbF9saXN0KSB7CisJCQlpZiAocmV0ID09IDApCisJ CQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGVfc3RvbGVuX3RvX3NobWVtZnMob2JqKTsK KwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOworCQl9CisJCWxpc3Rf c3BsaWNlKCZtaWdyYXRlLCAqcCk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisKKwlyZXR1 cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxh eS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDY2MDcyYmYu Ljk1YjhkNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTI0NzksNiAr MjQ3OSw5IEBAIGludGVsX2FsbG9jX2luaXRpYWxfcGxhbmVfb2JqKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjLAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCisJLyogTm90IHRvIGJlIHByZXNlcnZlZCBh Y3Jvc3MgaGliZXJuYXRpb24gKi8KKwlvYmotPmludGVybmFsX3ZvbGF0aWxlID0gdHJ1ZTsKKwog CW9iai0+dGlsaW5nX21vZGUgPSBwbGFuZV9jb25maWctPnRpbGluZzsKIAlpZiAob2JqLT50aWxp bmdfbW9kZSA9PSBJOTE1X1RJTElOR19YKQogCQlvYmotPnN0cmlkZSA9IGZiLT5waXRjaGVzWzBd OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKaW5kZXggMTY4NjY4Ny4uMDkxZmI2ZSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jCkBAIC0xNTcsNiArMTU3LDEyIEBAIHN0YXRpYyBp bnQgaW50ZWxmYl9hbGxvYyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAogCQlnb3RvIG91 dDsKIAl9CiAKKwkvKiBEaXNjYXJkIHRoZSBjb250ZW50cyBvZiB0aGUgQklPUyBmYiBhY3Jvc3Mg aGliZXJuYXRpb24uCisJICogV2UgcmVhbGx5IHdhbnQgdG8gY29tcGxldGVseSB0aHJvd2F3YXkg dGhlIGVhcmxpZXIgZmJkZXYKKwkgKiBhbmQgcmVjb25maWd1cmUgaXQgYW55d2F5LgorCSAqLwor CW9iai0+aW50ZXJuYWxfdm9sYXRpbGUgPSB0cnVlOworCiAJZmIgPSBfX2ludGVsX2ZyYW1lYnVm ZmVyX2NyZWF0ZShkZXYsICZtb2RlX2NtZCwgb2JqKTsKIAlpZiAoSVNfRVJSKGZiKSkgewogCQlk cm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9w bS5jCmluZGV4IDIwNzM5ZjMuLjVmYWVhY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwpAQCAt NTM2OCw2ICs1MzY4LDggQEAgc3RhdGljIHZvaWQgdmFsbGV5dmlld19zZXR1cF9wY3R4KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCiAJSTkxNV9XUklURShWTFZfUENCUiwgcGN0eF9wYWRkcik7CiAK IG91dDoKKwkvKiBUaGUgcG93ZXIgY29udGV4dCBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQgYWNyb3Nz IGhpYmVybmF0aW9uICovCisJcGN0eC0+aW50ZXJuYWxfdm9sYXRpbGUgPSB0cnVlOwogCURSTV9E RUJVR19EUklWRVIoIlBDQlI6IDB4JTA4eFxuIiwgSTkxNV9SRUFEKFZMVl9QQ0JSKSk7CiAJZGV2 X3ByaXYtPnZsdl9wY3R4ID0gcGN0eDsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4 KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwppbmRleCBmYzVmOGFlLi5l Mzg3MTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVy LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCkBAIC0yMTY0 LDYgKzIxNjQsMTIgQEAgc3RhdGljIGludCBpbnRlbF9hbGxvY19yaW5nYnVmZmVyX29iaihzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAogCWlmIChJU19FUlIob2JqKSkKIAkJcmV0dXJuIFBUUl9FUlIo b2JqKTsKIAorCS8qIFJpbmdidWZmZXIgb2JqZWN0cyBhcmUgYnkgZGVmaW5pdGlvbiB2b2xhdGls ZSAtIG9ubHkgdGhlIGNvbW1hbmRzCisJICogYmV0d2VlbiBIRUFEIGFuZCBUQUlMIG5lZWQgdG8g YmUgcHJlc2VydmVkIGFuZCB3aGlsc3QgdGhlcmUgYXJlCisJICogYW55IGNvbW1hbmRzIHRoZXJl LCB0aGUgcmluZ2J1ZmZlciBpcyBwaW5uZWQgYnkgYWN0aXZpdHkuCisJICovCisJb2JqLT5pbnRl cm5hbF92b2xhdGlsZSA9IHRydWU7CisKIAkvKiBtYXJrIHJpbmcgYnVmZmVycyBhcyByZWFkLW9u bHkgZnJvbSBHUFUgc2lkZSBieSBkZWZhdWx0ICovCiAJb2JqLT5ndF9ybyA9IDE7CiAKLS0gCjEu OS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK