From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 2/8] PM: suspend_block: Add driver to access suspend blockers from user-space Date: Tue, 27 Apr 2010 21:31:53 -0700 Message-ID: <1272429119-12103-3-git-send-email-arve@android.com> References: <1272429119-12103-1-git-send-email-arve@android.com> <1272429119-12103-2-git-send-email-arve@android.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1272429119-12103-2-git-send-email-arve@android.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-pm-bounces@lists.linux-foundation.org Errors-To: linux-pm-bounces@lists.linux-foundation.org To: linux-pm@lists.linux-foundation.org, linux-kernel@vger.kernel.org Cc: Len Brown , Jim Collar , linux-doc@vger.kernel.org, Greg Kroah-Hartman , Oleg Nesterov , Avi Kivity , Ryusuke Konishi , Tejun Heo , Magnus Damm , Andrew Morton List-Id: linux-pm@vger.kernel.org QWRkIGEgbWlzYyBkZXZpY2UsICJzdXNwZW5kX2Jsb2NrZXIiLCB0aGF0IGFsbG93cyB1c2VyLXNw YWNlIHByb2Nlc3Nlcwp0byBibG9jayBhdXRvIHN1c3BlbmQuIFRoZSBkZXZpY2UgaGFzIGlvY3Rs cyB0byBjcmVhdGUgYSBzdXNwZW5kX2Jsb2NrZXIsCmFuZCB0byBibG9jayBhbmQgdW5ibG9jayBz dXNwZW5kLiBUbyBkZWxldGUgdGhlIHN1c3BlbmRfYmxvY2tlciwgY2xvc2UKdGhlIGRldmljZS4K ClNpZ25lZC1vZmYtYnk6IEFydmUgSGrDuG5uZXbDpWcgPGFydmVAYW5kcm9pZC5jb20+Ci0tLQog RG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0ICAgICAgICAgIHwgICAgMyArLQog RG9jdW1lbnRhdGlvbi9wb3dlci9vcHBvcnR1bmlzdGljLXN1c3BlbmQudHh0IHwgICAxNyArKysr CiBpbmNsdWRlL2xpbnV4L3N1c3BlbmRfYmxvY2tfZGV2LmggICAgICAgICAgICAgfCAgIDI1ICsr KysrCiBrZXJuZWwvcG93ZXIvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5 ICsrCiBrZXJuZWwvcG93ZXIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAx ICsKIGtlcm5lbC9wb3dlci91c2VyX3N1c3BlbmRfYmxvY2tlci5jICAgICAgICAgICB8ICAxMjgg KysrKysrKysrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxODIgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L3N1 c3BlbmRfYmxvY2tfZGV2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBrZXJuZWwvcG93ZXIvdXNlcl9z dXNwZW5kX2Jsb2NrZXIuYwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwt bnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAppbmRleCBk ZDU4MDZmLi5lMjQ1OGY3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51 bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CkBAIC0y NTQsNyArMjU0LDggQEAgQ29kZSAgU2VxIyhoZXgpCUluY2x1ZGUgRmlsZQkJQ29tbWVudHMKICdx Jwk4MC1GRglsaW51eC90ZWxlcGhvbnkuaAlJbnRlcm5ldCBQaG9uZUpBQ0ssIEludGVybmV0IExp bmVKQUNLCiAJCWxpbnV4L2l4anVzZXIuaAkJPGh0dHA6Ly93d3cucXVpY2tuZXQubmV0PgogJ3In CTAwLTFGCWxpbnV4L21zZG9zX2ZzLmggYW5kIGZzL2ZhdC9kaXIuYwotJ3MnCWFsbAlsaW51eC9j ZGsuaAorJ3MnCWFsbAlsaW51eC9jZGsuaAljb25mbGljdCEKKydzJwlhbGwJbGludXgvc3VzcGVu ZF9ibG9ja19kZXYuaAljb25mbGljdCEKICd0JwkwMC03RglsaW51eC9pZl9wcHAuaAogJ3QnCTgw LThGCWxpbnV4L2lzZG5fcHBwLmgKICd0Jwk5MAlsaW51eC90b3NoaWJhLmgKZGlmZiAtLWdpdCBh L0RvY3VtZW50YXRpb24vcG93ZXIvb3Bwb3J0dW5pc3RpYy1zdXNwZW5kLnR4dCBiL0RvY3VtZW50 YXRpb24vcG93ZXIvb3Bwb3J0dW5pc3RpYy1zdXNwZW5kLnR4dAppbmRleCAxYTI5ZDEwLi42Mzlk YTczIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL29wcG9ydHVuaXN0aWMtc3VzcGVu ZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9vcHBvcnR1bmlzdGljLXN1c3BlbmQudHh0 CkBAIC0xMTIsMyArMTEyLDIwIEBAIGlmIChsaXN0X2VtcHR5KCZzdGF0ZS0+cGVuZGluZ193b3Jr KSkKIGVsc2UKIAlzdXNwZW5kX2Jsb2NrKCZzdGF0ZS0+c3VzcGVuZF9ibG9ja2VyKTsKIAorVXNl ci1zcGFjZSBBUEkKKz09PT09PT09PT09PT09CisKK1RvIGNyZWF0ZSBhIHN1c3BlbmRfYmxvY2tl ciBmcm9tIHVzZXItc3BhY2UsIG9wZW4gdGhlIHN1c3BlbmRfYmxvY2tlciBkZXZpY2U6CisgICAg ZmQgPSBvcGVuKCIvZGV2L3N1c3BlbmRfYmxvY2tlciIsIE9fUkRXUiB8IE9fQ0xPRVhFQyk7Cit0 aGVuIGNhbGw6CisgICAgaW9jdGwoZmQsIFNVU1BFTkRfQkxPQ0tFUl9JT0NUTF9JTklUKHN0cmxl bihuYW1lKSksIG5hbWUpOworCitUbyBhY3RpdmF0ZSBhIHN1c3BlbmRfYmxvY2tlciBjYWxsOgor ICAgIGlvY3RsKGZkLCBTVVNQRU5EX0JMT0NLRVJfSU9DVExfQkxPQ0spOworCitUbyB1bmJsb2Nr IGNhbGw6CisgICAgaW9jdGwoZmQsIFNVU1BFTkRfQkxPQ0tFUl9JT0NUTF9VTkJMT0NLKTsKKwor VG8gZGVzdHJveSB0aGUgc3VzcGVuZF9ibG9ja2VyLCBjbG9zZSB0aGUgZGV2aWNlOgorICAgIGNs b3NlKGZkKTsKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdXNwZW5kX2Jsb2NrX2Rldi5o IGIvaW5jbHVkZS9saW51eC9zdXNwZW5kX2Jsb2NrX2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjI0YmM1YzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4 L3N1c3BlbmRfYmxvY2tfZGV2LmgKQEAgLTAsMCArMSwyNSBAQAorLyogaW5jbHVkZS9saW51eC9z dXNwZW5kX2Jsb2NrX2Rldi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5j LgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBk aXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NVU1BFTkRfQkxPQ0tfREVW X0gKKyNkZWZpbmUgX0xJTlVYX1NVU1BFTkRfQkxPQ0tfREVWX0gKKworI2luY2x1ZGUgPGxpbnV4 L2lvY3RsLmg+CisKKyNkZWZpbmUgU1VTUEVORF9CTE9DS0VSX0lPQ1RMX0lOSVQobGVuKQkJX0lP QyhfSU9DX1dSSVRFLCAncycsIDAsIGxlbikKKyNkZWZpbmUgU1VTUEVORF9CTE9DS0VSX0lPQ1RM X0JMT0NLCQlfSU8oJ3MnLCAxKQorI2RlZmluZSBTVVNQRU5EX0JMT0NLRVJfSU9DVExfVU5CTE9D SwkJX0lPKCdzJywgMikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvS2NvbmZp ZyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCmluZGV4IDU1YTA2YTEuLmZlNWEyZjIgMTAwNjQ0Ci0t LSBhL2tlcm5lbC9wb3dlci9LY29uZmlnCisrKyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCkBAIC0x NDYsNiArMTQ2LDE1IEBAIGNvbmZpZyBPUFBPUlRVTklTVElDX1NVU1BFTkQKIAkgIGRldGVybWlu ZXMgdGhlIHNsZWVwIHN0YXRlIHRoZSBzeXN0ZW0gd2lsbCBiZSBwdXQgaW50byB3aGVuIHRoZXJl IGFyZQogCSAgbm8gYWN0aXZlIHN1c3BlbmQgYmxvY2tlcnMuCiAKK2NvbmZpZyBVU0VSX1NVU1BF TkRfQkxPQ0tFUlMKKwlib29sICJVc2Vyc3BhY2Ugc3VzcGVuZCBibG9ja2VycyIKKwlkZXBlbmRz IG9uIE9QUE9SVFVOSVNUSUNfU1VTUEVORAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFVz ZXItc3BhY2Ugc3VzcGVuZCBibG9jayBhcGkuIENyZWF0ZXMgYSBtaXNjIGRldmljZSB3aXRoIGlv Y3RscworCSAgdG8gY3JlYXRlLCBibG9jayBhbmQgdW5ibG9jayBhIHN1c3BlbmRfYmxvY2tlci4g VGhlIHN1c3BlbmRfYmxvY2tlcgorCSAgd2lsbCBiZSBkZWxldGVkIHdoZW4gdGhlIGRldmljZSBp cyBjbG9zZWQuCisKIGNvbmZpZyBISUJFUk5BVElPTl9OVlMKIAlib29sCiAKZGlmZiAtLWdpdCBh L2tlcm5lbC9wb3dlci9NYWtlZmlsZSBiL2tlcm5lbC9wb3dlci9NYWtlZmlsZQppbmRleCBlZTUy NzZkLi43OGY3MDNiIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvTWFrZWZpbGUKKysrIGIva2Vy bmVsL3Bvd2VyL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQCBvYmotJChDT05GSUdfUE1fU0xFRVAp CQkrPSBjb25zb2xlLm8KIG9iai0kKENPTkZJR19GUkVFWkVSKQkJKz0gcHJvY2Vzcy5vCiBvYmot JChDT05GSUdfU1VTUEVORCkJCSs9IHN1c3BlbmQubwogb2JqLSQoQ09ORklHX09QUE9SVFVOSVNU SUNfU1VTUEVORCkJKz0gc3VzcGVuZF9ibG9ja2VyLm8KK29iai0kKENPTkZJR19VU0VSX1NVU1BF TkRfQkxPQ0tFUlMpCSs9IHVzZXJfc3VzcGVuZF9ibG9ja2VyLm8KIG9iai0kKENPTkZJR19QTV9U RVNUX1NVU1BFTkQpCSs9IHN1c3BlbmRfdGVzdC5vCiBvYmotJChDT05GSUdfSElCRVJOQVRJT04p CSs9IGhpYmVybmF0ZS5vIHNuYXBzaG90Lm8gc3dhcC5vIHVzZXIubwogb2JqLSQoQ09ORklHX0hJ QkVSTkFUSU9OX05WUykJKz0gaGliZXJuYXRlX252cy5vCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93 ZXIvdXNlcl9zdXNwZW5kX2Jsb2NrZXIuYyBiL2tlcm5lbC9wb3dlci91c2VyX3N1c3BlbmRfYmxv Y2tlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YmU2ZjQKLS0tIC9k ZXYvbnVsbAorKysgYi9rZXJuZWwvcG93ZXIvdXNlcl9zdXNwZW5kX2Jsb2NrZXIuYwpAQCAtMCww ICsxLDEyOCBAQAorLyoga2VybmVsL3Bvd2VyL3VzZXJfc3VzcGVuZF9ibG9jay5jCisgKgorICog Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2Fy ZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwor ICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZp ZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgor I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZF9ibG9ja2VyLmg+ CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZF9ibG9ja19kZXYuaD4KKworZW51bSB7CisJREVCVUdf RkFJTFVSRQk9IEJJVCgwKSwKK307CitzdGF0aWMgaW50IGRlYnVnX21hc2sgPSBERUJVR19GQUlM VVJFOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX21hc2ssIGRlYnVnX21hc2ssIGludCwgU19J UlVHTyB8IFNfSVdVU1IgfCBTX0lXR1JQKTsKKworc3RhdGljIERFRklORV9NVVRFWChpb2N0bF9s b2NrKTsKKworc3RydWN0IHVzZXJfc3VzcGVuZF9ibG9ja2VyIHsKKwlzdHJ1Y3Qgc3VzcGVuZF9i bG9ja2VyCWJsb2NrZXI7CisJY2hhcgkJCW5hbWVbMF07Cit9OworCitzdGF0aWMgaW50IGNyZWF0 ZV91c2VyX3N1c3BlbmRfYmxvY2tlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKm5h bWUsCisJCQkJIHNpemVfdCBuYW1lX2xlbikKK3sKKwlzdHJ1Y3QgdXNlcl9zdXNwZW5kX2Jsb2Nr ZXIgKmJsOworCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpCisJCXJldHVybiAtRUJVU1k7CisJaWYg KG5hbWVfbGVuID4gTkFNRV9NQVgpCisJCXJldHVybiAtRU5BTUVUT09MT05HOworCWJsID0ga3ph bGxvYyhzaXplb2YoKmJsKSArIG5hbWVfbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibCkK KwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGNvcHlfZnJvbV91c2VyKGJsLT5uYW1lLCBuYW1lLCBu YW1lX2xlbikpCisJCWdvdG8gZXJyX2ZhdWx0OworCXN1c3BlbmRfYmxvY2tlcl9pbml0KCZibC0+ YmxvY2tlciwgYmwtPm5hbWUpOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGJsOworCXJldHVybiAw OworCitlcnJfZmF1bHQ6CisJa2ZyZWUoYmwpOworCXJldHVybiAtRUZBVUxUOworfQorCitzdGF0 aWMgbG9uZyB1c2VyX3N1c3BlbmRfYmxvY2tlcl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5z aWduZWQgaW50IGNtZCwKKwkJCQl1bnNpZ25lZCBsb25nIF9hcmcpCit7CisJdm9pZCBfX3VzZXIg KmFyZyA9ICh2b2lkIF9fdXNlciAqKV9hcmc7CisJc3RydWN0IHVzZXJfc3VzcGVuZF9ibG9ja2Vy ICpibDsKKwlsb25nIHJldDsKKworCW11dGV4X2xvY2soJmlvY3RsX2xvY2spOworCWlmICgoY21k ICYgfklPQ1NJWkVfTUFTSykgPT0gU1VTUEVORF9CTE9DS0VSX0lPQ1RMX0lOSVQoMCkpIHsKKwkJ cmV0ID0gY3JlYXRlX3VzZXJfc3VzcGVuZF9ibG9ja2VyKGZpbGUsIGFyZywgX0lPQ19TSVpFKGNt ZCkpOworCQlnb3RvIGRvbmU7CisJfQorCWJsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWlmICgh YmwpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBkb25lOworCX0KKwlzd2l0Y2ggKGNtZCkg eworCWNhc2UgU1VTUEVORF9CTE9DS0VSX0lPQ1RMX0JMT0NLOgorCQlzdXNwZW5kX2Jsb2NrKCZi bC0+YmxvY2tlcik7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgU1VTUEVORF9CTE9DS0VS X0lPQ1RMX1VOQkxPQ0s6CisJCXN1c3BlbmRfdW5ibG9jaygmYmwtPmJsb2NrZXIpOworCQlyZXQg PSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PVFNVUFA7CisJfQorZG9uZToK KwlpZiAocmV0ICYmIGRlYnVnX21hc2sgJiBERUJVR19GQUlMVVJFKQorCQlwcl9lcnIoInVzZXJf c3VzcGVuZF9ibG9ja2VyX2lvY3RsOiBjbWQgJXggZmFpbGVkLCAlbGRcbiIsCisJCQljbWQsIHJl dCk7CisJbXV0ZXhfdW5sb2NrKCZpb2N0bF9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50IHVzZXJfc3VzcGVuZF9ibG9ja2VyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwg c3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzZXJfc3VzcGVuZF9ibG9ja2VyICpibCA9 IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpZiAoIWJsKQorCQlyZXR1cm4gMDsKKwlzdXNwZW5kX2Js b2NrZXJfZGVzdHJveSgmYmwtPmJsb2NrZXIpOworCWtmcmVlKGJsKTsKKwlyZXR1cm4gMDsKK30K KworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2VyX3N1c3BlbmRfYmxvY2tlcl9mb3Bz ID0geworCS5yZWxlYXNlID0gdXNlcl9zdXNwZW5kX2Jsb2NrZXJfcmVsZWFzZSwKKwkudW5sb2Nr ZWRfaW9jdGwgPSB1c2VyX3N1c3BlbmRfYmxvY2tlcl9pb2N0bCwKK307CisKK3N0cnVjdCBtaXNj ZGV2aWNlIHVzZXJfc3VzcGVuZF9ibG9ja2VyX2RldmljZSA9IHsKKwkubWlub3IgPSBNSVNDX0RZ TkFNSUNfTUlOT1IsCisJLm5hbWUgPSAic3VzcGVuZF9ibG9ja2VyIiwKKwkuZm9wcyA9ICZ1c2Vy X3N1c3BlbmRfYmxvY2tlcl9mb3BzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNlcl9zdXNw ZW5kX2Jsb2NrZXJfaW5pdCh2b2lkKQoreworCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZ1c2VyX3N1 c3BlbmRfYmxvY2tlcl9kZXZpY2UpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNlcl9zdXNw ZW5kX2Jsb2NrZXJfZXhpdCh2b2lkKQoreworCW1pc2NfZGVyZWdpc3RlcigmdXNlcl9zdXNwZW5k X2Jsb2NrZXJfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQodXNlcl9zdXNwZW5kX2Jsb2NrZXJf aW5pdCk7Cittb2R1bGVfZXhpdCh1c2VyX3N1c3BlbmRfYmxvY2tlcl9leGl0KTsKLS0gCjEuNi41 LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LXBtIG1haWxpbmcgbGlzdApsaW51eC1wbUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRw czovL2xpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcG0=