From owner-freebsd-arm@freebsd.org Mon Jun 6 04:49:58 2016 Return-Path: Delivered-To: freebsd-arm@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 789DEB6BE53 for ; Mon, 6 Jun 2016 04:49:58 +0000 (UTC) (envelope-from jiashiun@gmail.com) Received: from mail-vk0-x242.google.com (mail-vk0-x242.google.com [IPv6:2607:f8b0:400c:c05::242]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 262D61CF5 for ; Mon, 6 Jun 2016 04:49:58 +0000 (UTC) (envelope-from jiashiun@gmail.com) Received: by mail-vk0-x242.google.com with SMTP id x7so5653063vkf.3 for ; Sun, 05 Jun 2016 21:49:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to; bh=Si7pkEoYZPMLXSuVECXZ0AUtD+tAWCxUemM9EwxYDDc=; b=XX2i9hDybo+DthP+eKiXuNGcL/ghGQsFzfPOFX+wgCx1ESCdd4GmB9eGZbdKqSxrZ3 4RIkQHaYE8B9dI9fDp5aprNUoWLlsrRycK5nAVIX6EmCUCzn0mRKvyWNP0tnS9+9iylk hEs8MO2WW4dfaRovOPRigZjNhURRQAE6qKfXDsF2qG4u/IeGYU94+B+FU6ma0eOZnmp5 50zhdbXlBCmZ6X/TC+XpuTYxy3jvlDIbAzSM4SewYF9mfMLqGtI7C6bWU5gyLUPxItOq 577cMOa3MTNVlnY1IJAcMe1FJRlr95sUtFHkfZFEbuehz6qg1nt1bPo6TtHsb6w3SFOW Y0vQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Si7pkEoYZPMLXSuVECXZ0AUtD+tAWCxUemM9EwxYDDc=; b=aOEz9Q48DisTQ3V81816jmhP7TrMphmC7wf4KfqbJG+N1ac4EyRy4s+UOam76MJAi9 6gd+uX1dcOGjMfU0ZaEnQPUbUY3iSN6iCwGSYXKM/6cafZ9iljAAkQpCKz4bYpw6NiGE TZ8azDTc76Ke/B6oTBLroU/v4TRFd2bmIG/NUrJANauqA8nKh2Ktec2v2TOZETaZ3ZCS nNI0dcayF422W+nVxOrzruXuiO3AjaWwzGPYm2cpjwNDXvBKxT/z7Q+mQ6FkS1p2H5gl dm2JdNeJr42EpuotszxYQAYYvG6uuEeII4av3NV47FWQVl11J5nTauHzajiRVp5Qpbvh Kskw== X-Gm-Message-State: ALyK8tISYg42YoaaDY25NUBa2Y2a61e99kYJRsDEt2qJtcfn/ishlFazK+/jOMmq/z74ADFMd3gjPrH4T5bChg== X-Received: by 10.31.192.194 with SMTP id q185mr7619790vkf.155.1465188597024; Sun, 05 Jun 2016 21:49:57 -0700 (PDT) MIME-Version: 1.0 Received: by 10.176.6.34 with HTTP; Sun, 5 Jun 2016 21:49:27 -0700 (PDT) From: Jia-Shiun Li Date: Mon, 6 Jun 2016 12:49:27 +0800 Message-ID: Subject: Random number generator on rpi To: "freebsd-arm@freebsd.org" Content-Type: multipart/mixed; boundary=001a113739ecdaeb54053494cdcc X-Content-Filtered-By: Mailman/MimeDel 2.1.22 X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: "Porting FreeBSD to ARM processors." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jun 2016 04:49:58 -0000 --001a113739ecdaeb54053494cdcc Content-Type: text/plain; charset=UTF-8 Hi all, I occasionally found that RPi has a mysterious undocumented random number generator and Linux has a driver for it. [1] Out of curiosity I wrote a simple driver according to the Linux one. It is simple enough for me without prior rng knowledge to make it work. Or so it appears. Patch is attached. (Note you need to have the updated dtb file by copying {OBJDIR}/{SRCDIR}/sys/{KERNCONF}/modules/{SRCDIR}/sys/modules/dtb/rpi/rpi{,2}.dtb to your /boot/msdos) Once booted the kernel will output the following line indicating it is working: bcmrng0: mem 0x104000-0x10400f on simplebus0 I only tested it on RPi2. Guess it will work fine on RPi too. I tried to compile rndtest(4) together into the kernel, and it did not output or complain about anything. According to the man page this should mean the rng works fine, right? Or is there any other tools to verify the quality of a rng? [1]: http://scruss.com/blog/2013/06/07/well-that-was-unexpected-the-raspberry-pis-hardware-random-number-generator/ -Jia-Shiun. --001a113739ecdaeb54053494cdcc Content-Type: application/octet-stream; name="rpirng.patch" Content-Disposition: attachment; filename="rpirng.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ip3jfer90 SW5kZXg6IHN5cy9hcm0vYnJvYWRjb20vYmNtMjgzNS9iY20yODM1X3JuZy5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIHN5cy9hcm0vYnJvYWRjb20vYmNtMjgzNS9iY20yODM1X3JuZy5jCShub25leGlzdGVudCkK KysrIHN5cy9hcm0vYnJvYWRjb20vYmNtMjgzNS9iY20yODM1X3JuZy5jCSh3b3JraW5nIGNvcHkp CkBAIC0wLDAgKzEsMTYyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNiBKaWEtU2hpdW4g TGkgPGppYXNoaXVuQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VT IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNs dWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5 cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy93YXRjaGRvZy5oPgorI2luY2x1ZGUgPHN5cy9idXMu aD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2lu Y2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL2NvbmYuaD4KKyNpbmNsdWRlIDxzeXMv bWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL3JhbmRvbS5oPgorCisjaW5jbHVkZSA8ZGV2L3JhbmRv bS9yYW5kb21kZXYuaD4KKyNpbmNsdWRlIDxkZXYvZmR0L2ZkdF9jb21tb24uaD4KKyNpbmNsdWRl IDxkZXYvb2Z3L29wZW5maXJtLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzLmg+CisjaW5j bHVkZSA8ZGV2L29mdy9vZndfYnVzX3N1YnIuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+ CisjaW5jbHVkZSA8bWFjaGluZS9jcHVmdW5jLmg+CisjaW5jbHVkZSA8bWFjaGluZS9tYWNoZGVw Lmg+CisKKyNkZWZpbmUJUkVBRChfc2MsIF9yKSBidXNfc3BhY2VfcmVhZF80KChfc2MpLT5ic3Qs IChfc2MpLT5ic2gsIChfcikpCisjZGVmaW5lCVdSSVRFKF9zYywgX3IsIF92KSBidXNfc3BhY2Vf d3JpdGVfNCgoX3NjKS0+YnN0LCAoX3NjKS0+YnNoLCAoX3IpLCAoX3YpKQorCisjZGVmaW5lIFJO R19SRUdfQ1RSTAkweDAwCisjZGVmaW5lIFJOR19SRUdfU1RBVFVTCTB4MDQKKyNkZWZpbmUgUk5H X1JFR19EQVRBCTB4MDgKKworc3RydWN0IGJjbXJuZ19zb2Z0YyB7CisJZGV2aWNlX3QJCWRldjsK KwlzdHJ1Y3QgcmVzb3VyY2UgKglyZXM7CisJYnVzX3NwYWNlX3RhZ190CQlic3Q7CisJYnVzX3Nw YWNlX2hhbmRsZV90CWJzaDsKKwlzdHJ1Y3QgY2FsbG91dCBzY19jYWxsb3V0OworfTsKKworc3Rh dGljIHVpbnQzMl90IGJjbXJuZ19yZWFkKHN0cnVjdCBiY21ybmdfc29mdGMqIHNjKQoreworCXJl dHVybiBSRUFEKHNjLCBSTkdfUkVHX0RBVEEpOworfQorCisjZGVmaW5lIFJOR19SRUFEX1NJWkUg NAorCitzdGF0aWMgdm9pZCBiY21ybmdfaGFydmVzdCh2b2lkKiBhcmcpCit7CisJc3RydWN0IGJj bXJuZ19zb2Z0Yyogc2MgPSBhcmc7CisJdWludDMyX3QgZW50cm9weVtSTkdfUkVBRF9TSVpFXTsK KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBSTkdfUkVBRF9TSVpFOyBpKyspIHsKKwkgICAg ZW50cm9weVtpXSA9IGJjbXJuZ19yZWFkKHNjKTsKKwkgICAgaWYgKDAgPT0gUkVBRChzYywgUk5H X1JFR19TVEFUVVMpID4+IDI0KSB7CisJCWkrKzsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJcmFu ZG9tX2hhcnZlc3RfcXVldWUoZW50cm9weSwgc2l6ZW9mKGVudHJvcHlbMF0pICogaSwKKwkJc2l6 ZW9mKGVudHJvcHlbMF0pICogaSAqIDggLyAyLCBSQU5ET01fUFVSRV9CQ01STkcpOworCisJY2Fs bG91dF9yZXNldCgmc2MtPnNjX2NhbGxvdXQsIGh6ICogNSwgYmNtcm5nX2hhcnZlc3QsIHNjKTsK K30KKworc3RhdGljIGludAorYmNtcm5nX3Byb2JlKGRldmljZV90IGRldikKK3sKKworCWlmICgh b2Z3X2J1c19zdGF0dXNfb2theShkZXYpKQorCQlyZXR1cm4gKEVOWElPKTsKKworCWlmIChvZndf YnVzX2lzX2NvbXBhdGlibGUoZGV2LCAiYnJvYWRjb20sYmNtMjgzNS1ybmciKSkgeworCQlkZXZp Y2Vfc2V0X2Rlc2MoZGV2LCAiQkNNMjcwOC8yODM1IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIik7 CisJCXJldHVybiAoQlVTX1BST0JFX0RFRkFVTFQpOworCX0KKworCXJldHVybiAoRU5YSU8pOwor fQorCitzdGF0aWMgaW50CitiY21ybmdfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3Qg YmNtcm5nX3NvZnRjICpzYzsKKwlpbnQgcmlkOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl dik7CisJc2MtPmRldiA9IGRldjsKKworCXJpZCA9IDA7CisJc2MtPnJlcyA9IGJ1c19hbGxvY19y ZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX01FTU9SWSwgJnJpZCwgUkZfQUNUSVZFKTsKKwlpZiAo c2MtPnJlcyA9PSBOVUxMKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IGFsbG9j YXRlIG1lbW9yeSByZXNvdXJjZVxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCXNjLT5i c3QgPSBybWFuX2dldF9idXN0YWcoc2MtPnJlcyk7CisJc2MtPmJzaCA9IHJtYW5fZ2V0X2J1c2hh bmRsZShzYy0+cmVzKTsKKworCS8qIGVuYWJsZSBhbmQgd2FybiB1cCAqLworCVdSSVRFKHNjLCBS TkdfUkVHX1NUQVRVUywgMHg0MDAwMCk7CisJV1JJVEUoc2MsIFJOR19SRUdfQ1RSTCwgMHgwMSk7 CisKKwkvKiBpbml0IGNhbGxvdXQgKi8KKwljYWxsb3V0X2luaXQoJnNjLT5zY19jYWxsb3V0LCAx KTsKKwljYWxsb3V0X3Jlc2V0KCZzYy0+c2NfY2FsbG91dCwgaHogKiA1LCBiY21ybmdfaGFydmVz dCwgc2MpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorYmNtcm5nX2RldGFjaChk ZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGJjbXJuZ19zb2Z0YyAqc2M7CisKKwlzYyA9IGRldmlj ZV9nZXRfc29mdGMoZGV2KTsKKwlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfTUVN T1JZLCBybWFuX2dldF9yaWQoc2MtPnJlcyksCisJCQlzYy0+cmVzKTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGRldmljZV9tZXRob2RfdCBiY21ybmdfbWV0aG9kc1tdID0geworCURFVk1FVEhP RChkZXZpY2VfcHJvYmUsIGJjbXJuZ19wcm9iZSksCisJREVWTUVUSE9EKGRldmljZV9hdHRhY2gs IGJjbXJuZ19hdHRhY2gpLAorCURFVk1FVEhPRChkZXZpY2VfZGV0YWNoLCBiY21ybmdfZGV0YWNo KSwKKworCURFVk1FVEhPRF9FTkQKK307CisKK3N0YXRpYyBkcml2ZXJfdCBiY21ybmdfZHJpdmVy ID0geworCSJiY21ybmciLAorCWJjbXJuZ19tZXRob2RzLAorCXNpemVvZihzdHJ1Y3QgYmNtcm5n X3NvZnRjKSwKK307CisKK3N0YXRpYyBkZXZjbGFzc190IGJjbXJuZ19kZXZjbGFzczsKKworRFJJ VkVSX01PRFVMRShiY21ybmcsIHNpbXBsZWJ1cywgYmNtcm5nX2RyaXZlciwgYmNtcm5nX2RldmNs YXNzLCAwLCAwKTsKClByb3BlcnR5IGNoYW5nZXMgb246IHN5cy9hcm0vYnJvYWRjb20vYmNtMjgz NS9iY20yODM1X3JuZy5jCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCAr MSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6IHN2bjpl eGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0 eQpBZGRlZDogc3ZuOmtleXdvcmRzCiMjIC0wLDAgKzEgIyMKK0ZyZWVCU0Q9JUgKXCBObyBuZXds aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMj Cit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IHN5cy9h cm0vYnJvYWRjb20vYmNtMjgzNS9maWxlcy5iY20yODN4Cj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0v YnJvYWRjb20vYmNtMjgzNS9maWxlcy5iY20yODN4CShyZXZpc2lvbiAyOTkwODApCisrKyBzeXMv YXJtL2Jyb2FkY29tL2JjbTI4MzUvZmlsZXMuYmNtMjgzeAkod29ya2luZyBjb3B5KQpAQCAtMTAs NiArMTAsNyBAQAogYXJtL2Jyb2FkY29tL2JjbTI4MzUvYmNtMjgzNV9pbnRyLmMJCXN0YW5kYXJk CiBhcm0vYnJvYWRjb20vYmNtMjgzNS9iY20yODM1X21hY2hkZXAuYwkJc3RhbmRhcmQKIGFybS9i cm9hZGNvbS9iY20yODM1L2JjbTI4MzVfbWJveC5jCQlzdGFuZGFyZAorYXJtL2Jyb2FkY29tL2Jj bTI4MzUvYmNtMjgzNV9ybmcuYwkgICAgCXN0YW5kYXJkCiBhcm0vYnJvYWRjb20vYmNtMjgzNS9i Y20yODM1X3NkaGNpLmMJCW9wdGlvbmFsIHNkaGNpCiBhcm0vYnJvYWRjb20vYmNtMjgzNS9iY20y ODM1X3NwaS5jCQlvcHRpb25hbCBiY20yODM1X3NwaQogYXJtL2Jyb2FkY29tL2JjbTI4MzUvYmNt MjgzNV92Y2lvLmMJCXN0YW5kYXJkCkluZGV4OiBzeXMvYm9vdC9mZHQvZHRzL2FybS9iY20yODM1 LmR0c2kKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gc3lzL2Jvb3QvZmR0L2R0cy9hcm0vYmNtMjgzNS5kdHNpCShy ZXZpc2lvbiAyOTkwODApCisrKyBzeXMvYm9vdC9mZHQvZHRzL2FybS9iY20yODM1LmR0c2kJKHdv cmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsMTIgQEAKIAkJCSAqLwogCQl9OwogCisJCXJuZyB7 CisJCQljb21wYXRpYmxlID0gImJyb2FkY29tLGJjbTI4MzUtcm5nIiwKKwkJCQkgICAgICJicm9h ZGNvbSxiY20yNzA4LXJuZyI7CisJCQlyZWcgPSA8MHgxMDQwMDAgMHgxMD47CisJCX07CisKIAkJ dGltZXIgewogCQkJY29tcGF0aWJsZSA9ICJicm9hZGNvbSxiY20yODM1LXN5c3RlbS10aW1lciIs IAogCQkJCSAgICAgImJyb2FkY29tLGJjbTI3MDgtc3lzdGVtLXRpbWVyIjsKSW5kZXg6IHN5cy9i b290L2ZkdC9kdHMvYXJtL2JjbTI4MzYuZHRzaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYm9vdC9mZHQv ZHRzL2FybS9iY20yODM2LmR0c2kJKHJldmlzaW9uIDI5OTA4MCkKKysrIHN5cy9ib290L2ZkdC9k dHMvYXJtL2JjbTI4MzYuZHRzaQkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiwxMiBAQAog CQkJICovCiAJCX07CiAKKwkJcm5nIHsKKwkJCWNvbXBhdGlibGUgPSAiYnJvYWRjb20sYmNtMjgz NS1ybmciLAorCQkJCSAgICAgImJyb2FkY29tLGJjbTI3MDgtcm5nIjsKKwkJCXJlZyA9IDwweDEw NDAwMCAweDEwPjsKKwkJfTsKKwogCQl3YXRjaGRvZzAgewogCQkJY29tcGF0aWJsZSA9ICJicm9h ZGNvbSxiY20yODM1LXdkdCIsCiAJCQkJICAgICAiYnJvYWRjb20sYmNtMjcwOC13ZHQiOwpJbmRl eDogc3lzL3N5cy9yYW5kb20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvc3lzL3JhbmRvbS5oCShyZXZp c2lvbiAyOTkwODApCisrKyBzeXMvc3lzL3JhbmRvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2 ICs5MCw3IEBACiAJUkFORE9NX1BVUkVfTkVIRU1JQUgsCiAJUkFORE9NX1BVUkVfUk5EVEVTVCwK IAlSQU5ET01fUFVSRV9WSVJUSU8sCisJUkFORE9NX1BVUkVfQkNNUk5HLAogCUVOVFJPUFlTT1VS Q0UKIH07CiAK --001a113739ecdaeb54053494cdcc--