From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Weinehall Subject: [PATCH v3 1/1] lib/igt_pm: Lib for power management Date: Thu, 11 Feb 2016 09:25:36 +0200 Message-ID: <1455175536-5080-2-git-send-email-david.weinehall@linux.intel.com> References: <1449564640-6001-1-git-send-email-david.weinehall@linux.intel.com> <1455175536-5080-1-git-send-email-david.weinehall@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 880656E266 for ; Wed, 10 Feb 2016 23:27:19 -0800 (PST) In-Reply-To: <1455175536-5080-1-git-send-email-david.weinehall@linux.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: David Weinehall List-Id: intel-gfx@lists.freedesktop.org TW92ZSBwb3dlciBtYW5hZ2VtZW50IHJlbGF0ZWQgY29kZSB0byBhIHNlcGFyYXRlIGxpYnJhcnku CkluaXRpYWxseSB0aGlzIGlzIGRvbmUgb25seSBmb3Igd29ya2Fyb3VuZHMgdGhhdCBhcHBseSB0 byBleHRlcm5hbApjb21wb25lbnRzLiAgTW9kaWZ5IHRoZSB1c2VycyBvZiBzdWNoIHdvcmthcm91 bmRzIGFjY29yZGluZ2x5LgpUaGlzIGN1cnJlbnRseSBpbnZvbHZlcyBIRCBhdWRpbyBhbmQgU0FU QSBsaW5rIHBvd2VyIG1hbmFnZW1lbnQuCkZvciBTQVRBIGxpbmsgUE0gdGhlcmUncyBhbHNvIGNv ZGUgdG8gc2F2ZSB0aGUgcHJldmlvdXMgc2V0dGluZ3MsCnRvIGFsbG93IGZvciByZXNldHRpbmcg dGhlIHZhbHVlcyBhZnRlciB3ZSd2ZSBmaW5pc2hlZCB0ZXN0aW5nLgoKU2lnbmVkLW9mZi1ieTog RGF2aWQgV2VpbmVoYWxsIDxkYXZpZC53ZWluZWhhbGxAaW50ZWwuY29tPgotLS0KIC4uLi9pbnRl bC1ncHUtdG9vbHMvaW50ZWwtZ3B1LXRvb2xzLWRvY3MueG1sICAgICAgIHwgICAxICsKIGxpYi9N YWtlZmlsZS5zb3VyY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIGxp Yi9pZ3QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IGxpYi9pZ3RfYXV4LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1 ICstCiBsaWIvaWd0X3BtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IDIzMyArKysrKysrKysrKysrKysrKysrKysKIGxpYi9pZ3RfcG0uaCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDMxICsrKwogdGVzdHMvcG1fbHBzcC5jICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjUgKy0tCiB0ZXN0cy9wbV9ycG0uYyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0MCArLS0tCiA4IGZpbGVzIGNoYW5n ZWQsIDI4MSBpbnNlcnRpb25zKCspLCA2NyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWIvaWd0X3BtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X3BtLmgKCmRpZmYgLS1n aXQgYS9kb2NzL3JlZmVyZW5jZS9pbnRlbC1ncHUtdG9vbHMvaW50ZWwtZ3B1LXRvb2xzLWRvY3Mu eG1sIGIvZG9jcy9yZWZlcmVuY2UvaW50ZWwtZ3B1LXRvb2xzL2ludGVsLWdwdS10b29scy1kb2Nz LnhtbAppbmRleCA2MThkYzVmZDcwNzYuLjNlYTM1NjNhMDI5YSAxMDA2NDQKLS0tIGEvZG9jcy9y ZWZlcmVuY2UvaW50ZWwtZ3B1LXRvb2xzL2ludGVsLWdwdS10b29scy1kb2NzLnhtbAorKysgYi9k b2NzL3JlZmVyZW5jZS9pbnRlbC1ncHUtdG9vbHMvaW50ZWwtZ3B1LXRvb2xzLWRvY3MueG1sCkBA IC0yNCw2ICsyNCw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9mYi54bWwiLz4K ICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2F1eC54bWwiLz4KICAgICA8eGk6aW5jbHVk ZSBocmVmPSJ4bWwvaWd0X2d0LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3Rf cG0ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lvY3RsX3dyYXBwZXJzLnhtbCIv PgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pbnRlbF9iYXRjaGJ1ZmZlci54bWwiLz4KICAg ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaW50ZWxfY2hpcHNldC54bWwiLz4KZGlmZiAtLWdpdCBh L2xpYi9NYWtlZmlsZS5zb3VyY2VzIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggNDk5OTg2 ODA1MmIxLi4yZjBlYjIwNzVlMTQgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCisr KyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC02MCw2ICs2MCw4IEBAIGxpYmludGVsX3Rvb2xz X2xhX1NPVVJDRVMgPSAJXAogCWlndF9jb3JlLmgJCVwKIAlpZ3RfZHJhdy5jCQlcCiAJaWd0X2Ry YXcuaAkJXAorCWlndF9wbS5jCVwKKwlpZ3RfcG0uaAlcCiAJJChOVUxMKQogCiAuUEhPTlk6IHZl cnNpb24uaC50bXAKZGlmZiAtLWdpdCBhL2xpYi9pZ3QuaCBiL2xpYi9pZ3QuaAppbmRleCAzYmUy NTUxMWJiNzcuLmQ3NTFmMjQzOWRlMiAxMDA2NDQKLS0tIGEvbGliL2lndC5oCisrKyBiL2xpYi9p Z3QuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgImlndF9mYi5oIgogI2luY2x1ZGUgImln dF9ndC5oIgogI2luY2x1ZGUgImlndF9rbXMuaCIKKyNpbmNsdWRlICJpZ3RfcG0uaCIKICNpbmNs dWRlICJpZ3Rfc3RhdHMuaCIKICNpbmNsdWRlICJpbnN0ZG9uZS5oIgogI2luY2x1ZGUgImludGVs X2JhdGNoYnVmZmVyLmgiCmRpZmYgLS1naXQgYS9saWIvaWd0X2F1eC5jIGIvbGliL2lndF9hdXgu YwppbmRleCBlYmVlMTE5YzQxMWQuLjdkMzU2NjZlYjdmMyAxMDA2NDQKLS0tIGEvbGliL2lndF9h dXguYworKysgYi9saWIvaWd0X2F1eC5jCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiaW50 ZWxfcmVnLmgiCiAjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKICNpbmNsdWRlICJpZ3Rfa21z LmgiCisjaW5jbHVkZSAiaWd0X3BtLmgiCiAKIC8qKgogICogU0VDVElPTjppZ3RfYXV4CkBAIC01 NDQsMTkgKzU0NSw3IEBAIGJvb2wgaWd0X3NldHVwX3J1bnRpbWVfcG0odm9pZCkKIAlpZiAocG1f c3RhdHVzX2ZkID49IDApCiAJCXJldHVybiB0cnVlOwogCi0JLyogVGhlIEF1ZGlvIGRyaXZlciBj YW4gZ2V0IHJ1bnRpbWUgUE0gcmVmZXJlbmNlcywgc28gd2UgbmVlZCB0byBtYWtlCi0JICogc3Vy ZSBpdHMgcnVudGltZSBQTSBpcyBlbmFibGVkLCBzbyBpdCBjYW4gcmVsZWFzZSB0aGUgcmVmcyBh bmQKLQkgKiBhY3R1YWxseSBlbmFibGUgdXMgdG8gcnVudGltZSBzdXNwZW5kLiAqLwotCWZkID0g b3BlbigiL3N5cy9tb2R1bGUvc25kX2hkYV9pbnRlbC9wYXJhbWV0ZXJzL3Bvd2VyX3NhdmUiLCBP X1dST05MWSk7Ci0JaWYgKGZkID49IDApIHsKLQkJaWd0X2Fzc2VydCh3cml0ZShmZCwgIjFcbiIs IDIpID09IDIpOwotCQljbG9zZShmZCk7Ci0JfQotCWZkID0gb3BlbigiL3N5cy9idXMvcGNpL2Rl dmljZXMvMDAwMDowMDowMy4wL3Bvd2VyL2NvbnRyb2wiLCBPX1dST05MWSk7Ci0JaWYgKGZkID49 IDApIHsKLQkJaWd0X2Fzc2VydCh3cml0ZShmZCwgImF1dG9cbiIsIDUpID09IDUpOwotCQljbG9z ZShmZCk7Ci0JfQorCWlndF9wbV9lbmFibGVfYXVkaW9fcnVudGltZV9wbSgpOwogCiAJLyogT3Vy IGltcGxlbWVudGF0aW9uIHVzZXMgYXV0b3N1c3BlbmQuIFRyeSB0byBzZXQgaXQgdG8gMG1zIHNv IHRoZSB0ZXN0CiAJICogc3VpdGUgZ29lcyBmYXN0ZXIgYW5kIHdlIGhhdmUgYSBoaWdoZXIgcHJv YmFiaWxpdHkgb2YgdHJpZ2dlcmluZyByYWNlCmRpZmYgLS1naXQgYS9saWIvaWd0X3BtLmMgYi9s aWIvaWd0X3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yZjU3 NDk2MWQxNzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaWd0X3BtLmMKQEAgLTAsMCArMSwyMzMg QEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxMywgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3Jz OgorICogICAgUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+CisgKiAgICBE YXZpZCBXZWluZWhhbGwgPGRhdmlkLndlaW5laGFsbEBpbnRlbC5jb20+CisgKgorICovCisjaW5j bHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgor I2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0 ZC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNp bmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAiaWd0X3BtLmgiCisKK2VudW0geworCVBPTElD WV9VTktOT1dOID0gLTEsCisJUE9MSUNZX01BWF9QRVJGT1JNQU5DRSA9IDAsCisJUE9MSUNZX01F RElVTV9QT1dFUiA9IDEsCisJUE9MSUNZX01JTl9QT1dFUiA9IDIKK307CisKKyNkZWZpbmUgTUFY X1BFUkZPUk1BTkNFX1NUUgkibWF4X3BlcmZvcm1hbmNlXG4iCisjZGVmaW5lIE1FRElVTV9QT1dF Ul9TVFIJIm1lZGl1bV9wb3dlclxuIgorI2RlZmluZSBNSU5fUE9XRVJfU1RSCQkibWluX3Bvd2Vy XG4iCisvKiBSZW1lbWJlciB0byBmaXggdGhpcyBpZiBhZGRpbmcgbG9uZ2VyIHN0cmluZ3MgKi8K KyNkZWZpbmUgTUFYX1BPTElDWV9TVFJMRU4Jc3RybGVuKE1BWF9QRVJGT1JNQU5DRV9TVFIpCisK Ky8qKgorICogU0VDVElPTjppZ3RfcG0KKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogUG93ZXIgTWFu YWdlbWVudCByZWxhdGVkIGhlbHBlcnMKKyAqIEB0aXRsZTogUG93ZXIgTWFuYWdlbWVudAorICog QGluY2x1ZGU6IGlndC5oCisgKgorICogVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIHZhcmlvdXMgaGVs cGVycyB0byBlbmFibGUgcG93ZXIgbWFuYWdlbWVudCBmb3IsCisgKiBhbmQgaW4gc29tZSBjYXNl cyBzdWJzZXF1ZW50bHkgYWxsb3cgcmVzdG9yaW5nIHRoZSBvbGQgYmVoYXZpb3VyIG9mLAorICog dmFyaW91cyBleHRlcm5hbCBjb21wb25lbnRzIHRoYXQgYnkgZGVmYXVsdCBhcmUgc2V0IHVwIGlu IGEgd2F5CisgKiB0aGF0IGludGVyZmVyZXMgd2l0aCB0aGUgdGVzdGluZyBvZiBvdXIgcG93ZXIg bWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5LgorICovCisvKioKKyAqIGlndF9wbV9lbmFibGVfYXVk aW9fcnVudGltZV9wbToKKyAqCisgKiBXZSBrbm93IHRoYXQgaWYgd2UgZG9uJ3QgZW5hYmxlIGF1 ZGlvIHJ1bnRpbWUgUE0sIHNuZF9oZGFfaW50ZWwgd2lsbCBuZXZlcgorICogcmVsZWFzZSBpdHMg cG93ZXIgd2VsbCByZWZjb3VudCwgYW5kIHdlJ2xsIG5ldmVyIHJlYWNoIHRoZSBMUFNQIHNhdGUu CisgKiBUaGVyZSdzIG5vIGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwgcmVsZWFzZSB0aGUgcG93ZXIg d2VsbCBpZiB3ZSBlbmFibGUKKyAqIHJ1bnRpbWUgUE0sIGJ1dCBhdCBsZWFzdCB3ZSBjYW4gdHJ5 LgorICoKKyAqIFdlIGRvbid0IGhhdmUgYW55IGFzc2VydGlvbnMgb24gb3BlbiBzaW5jZSB0aGUg dXNlciBtYXkgbm90IGV2ZW4gaGF2ZQorICogc25kX2hkYV9pbnRlbCBsb2FkZWQsIHdoaWNoIGlz IG5vdCBhIHByb2JsZW0uCisgKi8KK3ZvaWQgaWd0X3BtX2VuYWJsZV9hdWRpb19ydW50aW1lX3Bt KHZvaWQpCit7CisJaW50IGZkOworCisJZmQgPSBvcGVuKCIvc3lzL21vZHVsZS9zbmRfaGRhX2lu dGVsL3BhcmFtZXRlcnMvcG93ZXJfc2F2ZSIsIE9fV1JPTkxZKTsKKwlpZiAoZmQgPj0gMCkgewor CQlpZ3RfYXNzZXJ0X2VxKHdyaXRlKGZkLCAiMVxuIiwgMiksIDIpOworCQljbG9zZShmZCk7CisJ fQorCWZkID0gb3BlbigiL3N5cy9idXMvcGNpL2RldmljZXMvMDAwMDowMDowMy4wL3Bvd2VyL2Nv bnRyb2wiLCBPX1dST05MWSk7CisJaWYgKGZkID49IDApIHsKKwkJaWd0X2Fzc2VydF9lcSh3cml0 ZShmZCwgImF1dG9cbiIsIDUpLCA1KTsKKwkJY2xvc2UoZmQpOworCX0KKwkvKiBHaXZlIHNvbWUg dGltZSBmb3IgaXQgdG8gcmVhY3QuICovCisJc2xlZXAoMSk7Cit9CisKKy8qKgorICogaWd0X3Bt X2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudDoKKyAqCisgKiBFbmFibGUgdGhlIG1p bl9wb3dlciBwb2xpY3kgZm9yIFNBVEEgbGluayBwb3dlciBtYW5hZ2VtZW50LgorICogV2l0aG91 dCB0aGlzIHdlIGNhbm5vdCByZWFjaCBkZWVwIHJ1bnRpbWUgcG93ZXIgc3RhdGVzLgorICoKKyAq IFdlIGRvbid0IGhhdmUgYW55IGFzc2VydGlvbnMgb24gb3BlbiBzaW5jZSB0aGUgc3lzdGVtIG1p Z2h0IG5vdCBoYXZlCisgKiBhIFNBVEEgaG9zdC4KKyAqCisgKiBSZXR1cm5zOgorICogQW4gb3Bh cXVlIHBvaW50ZXIgdG8gdGhlIGRhdGEgbmVlZGVkIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgdmFs dWVzCisgKiBhZnRlciB0aGUgdGVzdCBoYXMgdGVybWluYXRlZCwgb3IgTlVMTCBpZiBTQVRBIGxp bmsgcG93ZXIgbWFuYWdlbWVudAorICogaXMgbm90IHN1cHBvcnRlZC4gVGhpcyBwb2ludGVyIHNo b3VsZCBiZSBmcmVlZCB3aGVuIG5vIGxvbmdlciB1c2VkCisgKiAodHlwaWNhbGx5IGFmdGVyIGhh dmluZyBjYWxsZWQgcmVzdG9yZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCgpKS4KKyAqLwor aW50OF90ICppZ3RfcG1fZW5hYmxlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KHZvaWQpCit7 CisJaW50IGZkLCBpOworCXNzaXplX3QgbGVuOworCWNoYXIgKmJ1ZjsKKwljaGFyICpmaWxlX25h bWU7CisJaW50OF90ICpsaW5rX3BtX3BvbGljaWVzID0gTlVMTDsKKworCWZpbGVfbmFtZSA9IG1h bGxvYyhQQVRIX01BWCk7CisJYnVmID0gbWFsbG9jKE1BWF9QT0xJQ1lfU1RSTEVOICsgMSk7CisK Kwlmb3IgKGkgPSAwOyA7IGkrKykgeworCQlpbnQ4X3QgcG9saWN5OworCisJCXNucHJpbnRmKGZp bGVfbmFtZSwgUEFUSF9NQVgsCisJCQkgIi9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3QlZC9saW5r X3Bvd2VyX21hbmFnZW1lbnRfcG9saWN5IiwKKwkJCSBpKTsKKworCQlmZCA9IG9wZW4oZmlsZV9u YW1lLCBPX1JEV1IpOworCQlpZiAoZmQgPCAwKQorCQkJYnJlYWs7CisKKwkJbGVuID0gcmVhZChm ZCwgYnVmLCBNQVhfUE9MSUNZX1NUUkxFTik7CisJCWJ1ZltsZW5dID0gJ1wwJzsKKworCQlpZiAo IXN0cm5jbXAoTUFYX1BFUkZPUk1BTkNFX1NUUiwgYnVmLAorCQkJICAgICBzdHJsZW4oTUFYX1BF UkZPUk1BTkNFX1NUUikpKQorCQkJcG9saWN5ID0gUE9MSUNZX01BWF9QRVJGT1JNQU5DRTsKKwkJ ZWxzZSBpZiAoIXN0cm5jbXAoTUVESVVNX1BPV0VSX1NUUiwgYnVmLAorCQkJCSAgc3RybGVuKE1F RElVTV9QT1dFUl9TVFIpKSkKKwkJCXBvbGljeSA9IFBPTElDWV9NRURJVU1fUE9XRVI7CisJCWVs c2UgaWYgKCFzdHJuY21wKE1JTl9QT1dFUl9TVFIsIGJ1ZiwKKwkJCQkgIHN0cmxlbihNSU5fUE9X RVJfU1RSKSkpCisJCQlwb2xpY3kgPSBQT0xJQ1lfTUlOX1BPV0VSOworCQllbHNlCisJCQlwb2xp Y3kgPSBQT0xJQ1lfVU5LTk9XTjsKKworCQlpZiAoIShpICUgMjU2KSkKKwkJCWxpbmtfcG1fcG9s aWNpZXMgPSByZWFsbG9jKGxpbmtfcG1fcG9saWNpZXMsCisJCQkJCQkgICAoaSAvIDI1NiArIDEp ICogMjU2ICsgMSk7CisKKwkJbGlua19wbV9wb2xpY2llc1tpXSA9IHBvbGljeTsKKwkJbGlua19w bV9wb2xpY2llc1tpICsgMV0gPSAwOworCisJCS8qIElmIHRoZSBwb2xpY3kgaXMgc29tZXRoaW5n IHdlIGRvbid0IGtub3cgYWJvdXQsCisJCSAqIGRvbid0IHRvdWNoIGl0LCBzaW5jZSB3ZSBtaWdo dCBwb3RlbnRpYWxseSBicmVhayB0aGluZ3MuCisJCSAqIEFuZCB3ZSBvYnZpb3VzbHkgZG9uJ3Qg bmVlZCB0byB0b3VjaCBhbnl0aGluZyBpZiB0aGUKKwkJICogc2V0dGluZyBpcyBhbHJlYWR5IGNv cnJlY3QuLi4KKwkJICovCisJCWlmIChwb2xpY3kgIT0gUE9MSUNZX1VOS05PV04gJiYKKwkJICAg IHBvbGljeSAhPSBQT0xJQ1lfTUlOX1BPV0VSKSB7CisJCQlsc2VlayhmZCwgMCwgU0VFS19TRVQp OworCQkJaWd0X2Fzc2VydF9lcSh3cml0ZShmZCwgTUlOX1BPV0VSX1NUUiwKKwkJCQkJICAgIHN0 cmxlbihNSU5fUE9XRVJfU1RSKSksCisJCQkJICAgICAgc3RybGVuKE1JTl9QT1dFUl9TVFIpKTsK KwkJfQorCQljbG9zZShmZCk7CisJfQorCWZyZWUoYnVmKTsKKwlmcmVlKGZpbGVfbmFtZSk7CisK KwlyZXR1cm4gbGlua19wbV9wb2xpY2llczsKK30KKworLyoqCisgKiBpZ3RfcG1fcmVzdG9yZV9z YXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudDoKKyAqIEBwbV9kYXRhOiBBbiBvcGFxdWUgcG9pbnRl ciB3aXRoIHNhdmVkIGxpbmsgUE0gcG9saWNpZXM7CisgKiAgICAgICAgICAgSWYgTlVMTCBpcyBw YXNzZWQgd2UgZm9yY2UgZW5hYmxlIHRoZSAibWF4X3BlcmZvcm1hbmNlIiBwb2xpY3kuCisgKgor ICogUmVzdG9yZSB0aGUgbGluayBwb3dlciBtYW5hZ2VtZW50IHBvbGljaWVzIHRvIHRoZSB2YWx1 ZXMKKyAqIHByaW9yIHRvIGVuYWJsaW5nIG1pbl9wb3dlci4KKyAqCisgKiBDYXZlYXQ6IElmIHRo ZSBzeXN0ZW0gc3VwcG9ydHMgaG90cGx1Z2dpbmcgYW5kIGhvdHBsdWdnaW5nIHRha2VzCisgKiAg ICAgICAgIHBsYWNlIGR1cmluZyBvdXIgdGVzdGluZyBzbyB0aGF0IHRoZSBob3N0cyBjaGFuZ2Ug bnVtYmVycworICogICAgICAgICB3ZSBtaWdodCByZXN0b3JlIHRoZSBzZXR0aW5ncyB0byB0aGUg d3JvbmcgaG9zdHMuCisgKi8KK3ZvaWQgaWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21h bmFnZW1lbnQoaW50OF90ICpwbV9kYXRhKQoreworCWludCBmZCwgaTsKKwljaGFyICpmaWxlX25h bWU7CisKKwkvKiBEaXNrIHJ1bnRpbWUgUE0gcG9saWNpZXMuICovCisJZmlsZV9uYW1lID0gbWFs bG9jKFBBVEhfTUFYKTsKKwlmb3IgKGkgPSAwOyA7IGkrKykgeworCQlpbnQ4X3QgcG9saWN5Owor CisJCWlmICghcG1fZGF0YSkKKwkJCXBvbGljeSA9IFBPTElDWV9NQVhfUEVSRk9STUFOQ0U7CisJ CWVsc2UgaWYgKHBtX2RhdGFbaV0gPT0gUE9MSUNZX1VOS05PV04pCisJCQljb250aW51ZTsKKwkJ ZWxzZQorCQkJcG9saWN5ID0gcG1fZGF0YVtpXTsKKworCQlzbnByaW50ZihmaWxlX25hbWUsIFBB VEhfTUFYLAorCQkJICIvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0JWQvbGlua19wb3dlcl9tYW5h Z2VtZW50X3BvbGljeSIsCisJCQkgaSk7CisKKwkJZmQgPSBvcGVuKGZpbGVfbmFtZSwgT19XUk9O TFkpOworCQlpZiAoZmQgPCAwKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoIChwb2xpY3kpIHsKKwkJ ZGVmYXVsdDoKKwkJY2FzZSBQT0xJQ1lfTUFYX1BFUkZPUk1BTkNFOgorCQkJaWd0X2Fzc2VydF9l cSh3cml0ZShmZCwgTUFYX1BFUkZPUk1BTkNFX1NUUiwKKwkJCQkJICAgIHN0cmxlbihNQVhfUEVS Rk9STUFOQ0VfU1RSKSksCisJCQkJICAgICAgc3RybGVuKE1BWF9QRVJGT1JNQU5DRV9TVFIpKTsK KwkJCWJyZWFrOworCisJCWNhc2UgUE9MSUNZX01FRElVTV9QT1dFUjoKKwkJCWlndF9hc3NlcnRf ZXEod3JpdGUoZmQsIE1FRElVTV9QT1dFUl9TVFIsCisJCQkJCSAgICBzdHJsZW4oTUVESVVNX1BP V0VSX1NUUikpLAorCQkJCSAgICAgIHN0cmxlbihNRURJVU1fUE9XRVJfU1RSKSk7CisJCQlicmVh azsKKworCQljYXNlIFBPTElDWV9NSU5fUE9XRVI6CisJCQlpZ3RfYXNzZXJ0X2VxKHdyaXRlKGZk LCBNSU5fUE9XRVJfU1RSLAorCQkJCQkgICAgc3RybGVuKE1JTl9QT1dFUl9TVFIpKSwKKwkJCQkg ICAgICBzdHJsZW4oTUlOX1BPV0VSX1NUUikpOworCQkJYnJlYWs7CisJCX0KKworCQljbG9zZShm ZCk7CisJfQorCWZyZWUoZmlsZV9uYW1lKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9pZ3RfcG0uaCBi L2xpYi9pZ3RfcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmMx NGZmMWY3YTBlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfcG0uaApAQCAtMCwwICsxLDMx IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBJR1Rf UE1fSAorI2RlZmluZSBJR1RfUE1fSAorCit2b2lkIGlndF9wbV9lbmFibGVfYXVkaW9fcnVudGlt ZV9wbSh2b2lkKTsKK2ludDhfdCAqaWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdl bWVudCh2b2lkKTsKK3ZvaWQgaWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1l bnQoaW50OF90ICpwbV9kYXRhKTsKKworI2VuZGlmIC8qIElHVF9QTV9IICovCmRpZmYgLS1naXQg YS90ZXN0cy9wbV9scHNwLmMgYi90ZXN0cy9wbV9scHNwLmMKaW5kZXggYTgyNDIwYmYwNmRlLi40 Y2VkZWZmZmI1NDUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3BtX2xwc3AuYworKysgYi90ZXN0cy9wbV9s cHNwLmMKQEAgLTMxLDI5ICszMSw2IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKIAotLyogV2Ug a25vdyB0aGF0IGlmIHdlIGRvbid0IGVuYWJsZSBhdWRpbyBydW50aW1lIFBNLCBzbmRfaGRhX2lu dGVsIHdpbGwgbmV2ZXIKLSAqIHJlbGVhc2UgaXRzIHBvd2VyIHdlbGwgcmVmY291bnQsIGFuZCB3 ZSdsbCBuZXZlciByZWFjaCB0aGUgTFBTUCBzYXRlLiBPVE9ICi0gKiB0aGVyZSdzIG5vIGd1YXJh bnRlZSB0aGF0IGl0IHdpbGwgcmVsZWFzZSB0aGUgcG93ZXIgd2VsbCBpZiB3ZSBlbmFibGUgcnVu dGltZQotICogUE0sIGJ1dCBhdCBsZWFzdCB3ZSBjYW4gdHJ5LiAgV2UgZG9uJ3QgaGF2ZSBhbnkg YXNzZXJ0aW9ucyBzaW5jZSB0aGUgdXNlciBtYXkKLSAqIG5vdCBldmVuIGhhdmUgc25kX2hkYV9p bnRlbCBsb2FkZWQsIHdoaWNoIGlzIG5vdCBhIHByb2JsZW0uICovCi1zdGF0aWMgdm9pZCBkaXNh YmxlX2F1ZGlvX3J1bnRpbWVfcG0odm9pZCkKLXsKLQlpbnQgZmQ7Ci0KLQlmZCA9IG9wZW4oIi9z eXMvbW9kdWxlL3NuZF9oZGFfaW50ZWwvcGFyYW1ldGVycy9wb3dlcl9zYXZlIiwgT19XUk9OTFkp OwotCWlmIChmZCA+PSAwKSB7Ci0JCWlndF9hc3NlcnRfZXEod3JpdGUoZmQsICIxXG4iLCAyKSwg Mik7Ci0JCWNsb3NlKGZkKTsKLQl9Ci0JZmQgPSBvcGVuKCIvc3lzL2J1cy9wY2kvZGV2aWNlcy8w MDAwOjAwOjAzLjAvcG93ZXIvY29udHJvbCIsIE9fV1JPTkxZKTsKLQlpZiAoZmQgPj0gMCkgewot CQlpZ3RfYXNzZXJ0X2VxKHdyaXRlKGZkLCAiYXV0b1xuIiwgNSksIDUpOwotCQljbG9zZShmZCk7 Ci0JfQotCS8qIEdpdmUgc29tZSB0aW1lIGZvciBpdCB0byByZWFjdC4gKi8KLQlzbGVlcCgxKTsK LX0KLQogc3RhdGljIGJvb2wgc3VwcG9ydHNfbHBzcCh1aW50MzJfdCBkZXZpZCkKIHsKIAlyZXR1 cm4gSVNfSEFTV0VMTChkZXZpZCkgfHwgSVNfQlJPQURXRUxMKGRldmlkKTsKQEAgLTIyNyw3ICsy MDQsNyBAQCBpZ3RfbWFpbgogCQkJZHJtX2Nvbm5lY3RvcnNbaV0gPSBkcm1Nb2RlR2V0Q29ubmVj dG9yQ3VycmVudChkcm1fZmQsCiAJCQkJCQkJZHJtX3Jlcy0+Y29ubmVjdG9yc1tpXSk7CiAKLQkJ ZGlzYWJsZV9hdWRpb19ydW50aW1lX3BtKCk7CisJCWlndF9wbV9lbmFibGVfYXVkaW9fcnVudGlt ZV9wbSgpOwogCiAJCWlndF9yZXF1aXJlKHN1cHBvcnRzX2xwc3AoZGV2aWQpKTsKIApkaWZmIC0t Z2l0IGEvdGVzdHMvcG1fcnBtLmMgYi90ZXN0cy9wbV9ycG0uYwppbmRleCAyMmRjMmI0ZDZkZTQu LjJhYTZjMTAxOGFhMiAxMDA2NDQKLS0tIGEvdGVzdHMvcG1fcnBtLmMKKysrIGIvdGVzdHMvcG1f cnBtLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IMKpIDIwMTMgSW50ZWwgQ29y cG9yYXRpb24KKyAqIENvcHlyaWdodCDCqSAyMDEzLCAyMDE1IEludGVsIENvcnBvcmF0aW9uCiAg KgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGEKICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCkBAIC0xMDksNiArMTA5 LDggQEAgc3RydWN0IG1vZGVzZXRfcGFyYW1zIGxwc3BfbW9kZV9wYXJhbXM7CiBzdHJ1Y3QgbW9k ZXNldF9wYXJhbXMgbm9uX2xwc3BfbW9kZV9wYXJhbXM7CiBzdHJ1Y3QgbW9kZXNldF9wYXJhbXMg KmRlZmF1bHRfbW9kZV9wYXJhbXM7CiAKK3N0YXRpYyBpbnQ4X3QgKnBtX2RhdGEgPSBOVUxMOwor CiAvKiBJZiB0aGUgcmVhZCBmYWlscywgdGhlbiB0aGUgbWFjaGluZSBkb2Vzbid0IHN1cHBvcnQg UEM4KyByZXNpZGVuY2llcy4gKi8KIHN0YXRpYyBib29sIHN1cHBvcnRzX3BjOF9wbHVzX3Jlc2lk ZW5jaWVzKHZvaWQpCiB7CkBAIC02ODUsNDEgKzY4NywxMyBAQCBzdGF0aWMgdm9pZCBzZXR1cF9w Yzgodm9pZCkKIAloYXNfcGM4ID0gdHJ1ZTsKIH0KIAotLyogSWYgd2Ugd2FudCB0byBhY3R1YWxs eSByZWFjaCBQQzgrIHN0YXRlcywgd2UgbmVlZCB0byBwcm9wZXJseSBjb25maWd1cmUgYWxsCi0g KiB0aGUgZGV2aWNlcyBvbiB0aGUgc3lzdGVtIHRvIGFsbG93IHRoaXMuIFRoaXMgZnVuY3Rpb24g d2lsbCB0cnkgdG8gc2V0dXAgdGhlCi0gKiB0aGluZ3Mgd2Uga25vdyB3ZSBuZWVkLCBidXQgd29u J3Qgc2NyZWFtIGluIGNhc2UgYW55dGhpbmcgZmFpbHM6IHdlIGRvbid0Ci0gKiBrbm93IHdoaWNo IGRldmljZXMgYXJlIHByZXNlbnQgb24geW91ciBtYWNoaW5lLCBzbyB3ZSBjYW4ndCByZWFsbHkg ZXhwZWN0Ci0gKiBhbnl0aGluZywganVzdCB0cnkgdG8gaGVscCB3aXRoIHRoZSBtb3JlIGNvbW1v biBwcm9ibGVtcy4gKi8KLXN0YXRpYyB2b2lkIHNldHVwX25vbl9ncmFwaGljc19ydW50aW1lX3Bt KHZvaWQpCi17Ci0JaW50IGZkLCBpOwotCWNoYXIgKmZpbGVfbmFtZTsKLQotCS8qIERpc2sgcnVu dGltZSBQTSBwb2xpY2llcy4gKi8KLQlmaWxlX25hbWUgPSBtYWxsb2MoUEFUSF9NQVgpOwotCWZv ciAoaSA9IDA7IDsgaSsrKSB7Ci0KLQkJc25wcmludGYoZmlsZV9uYW1lLCBQQVRIX01BWCwKLQkJ CSAiL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdCVkL2xpbmtfcG93ZXJfbWFuYWdlbWVudF9wb2xp Y3kiLAotCQkJIGkpOwotCi0JCWZkID0gb3BlbihmaWxlX25hbWUsIE9fV1JPTkxZKTsKLQkJaWYg KGZkIDwgMCkKLQkJCWJyZWFrOwotCi0JCWlndF9hc3NlcnQod3JpdGUoZmQsICJtaW5fcG93ZXJc biIsIDEwKSA9PSAxMCk7Ci0JCWNsb3NlKGZkKTsKLQl9Ci0JZnJlZShmaWxlX25hbWUpOwotfQot CiBzdGF0aWMgdm9pZCBzZXR1cF9lbnZpcm9ubWVudCh2b2lkKQogewogCWRybV9mZCA9IGRybV9v cGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVSX0lOVEVMKTsKIAogCWluaXRfbW9kZV9zZXRfZGF0YSgm bXNfZGF0YSk7CiAKLQlzZXR1cF9ub25fZ3JhcGhpY3NfcnVudGltZV9wbSgpOworCXBtX2RhdGEg PSBpZ3RfcG1fZW5hYmxlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KCk7CiAKIAloYXNfcnVu dGltZV9wbSA9IGlndF9zZXR1cF9ydW50aW1lX3BtKCk7CiAJc2V0dXBfcGM4KCk7CkBAIC03Mjgs MTEgKzcwMiwxNyBAQCBzdGF0aWMgdm9pZCBzZXR1cF9lbnZpcm9ubWVudCh2b2lkKQogCWlndF9p bmZvKCJQQzggcmVzaWRlbmN5IHN1cHBvcnQ6ICVkXG4iLCBoYXNfcGM4KTsKIAogCWlndF9yZXF1 aXJlKGhhc19ydW50aW1lX3BtKTsKK30KIAorc3RhdGljIHZvaWQgcmVzdG9yZV9lbnZpcm9ubWVu dCh2b2lkKQoreworCWlndF9wbV9yZXN0b3JlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KHBt X2RhdGEpOworCWZyZWUocG1fZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlYXJkb3duX2Vudmly b25tZW50KHZvaWQpCiB7CisJcmVzdG9yZV9lbnZpcm9ubWVudCgpOwogCWZpbmlfbW9kZV9zZXRf ZGF0YSgmbXNfZGF0YSk7CiAJZHJtQ2xvc2UoZHJtX2ZkKTsKIAljbG9zZShtc3JfZmQpOwotLSAK Mi43LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=