From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7EFD3C636D6 for ; Mon, 20 Feb 2023 17:51:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=MLOWyC4s/UWsnLW7IMCo4R1E6WipjADVaF50DRc7cWs=; b=nbslbsFf86XNdO 2y1UWRBRNzClPHJstZBVUYVXLzkga6piOcLxpVkdyIcmaRBLL3Y4dljuW7OBMN5jxfLUZHr2dM/ph Fd4NQN4iEbxVIjnPO4/XvA3AFSOt3nYCGfrYdoGFNk6DwIUZKbFUCmJGROC6ZYJ2mqm8eCggUng/4 n9yRxyprSH5zGPHun+vlO+MHw7G4VrQYPGeR1r8L5x61JJE9h19D/dNeWZbvujOQuQYU3HIPJjO3E P/x36+Hu0+/+5Vwu6TOCzvRhJVn/5lZb7TPvamXKNHpjENTcTGv+kO7qdOjhF4qnYaP2JjxGTmb+W IA+qWemTsmkgHpdKu4vQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pUAJ2-0056yT-JO; Mon, 20 Feb 2023 17:50:29 +0000 Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pUAIM-0056ge-OY; Mon, 20 Feb 2023 17:50:04 +0000 Received: by mail-lj1-x236.google.com with SMTP id h9so1837834ljq.2; Mon, 20 Feb 2023 09:49:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JhssXeqm+u6yl3pDx1ZAyAVMMEL8ZFFRhcJTQvtxCBI=; b=hSUvjOtME4HgSAQKag2+v/BtCpNfKz8hzOD5kqu+liLI1J5DuDG1cxlX9HU0ru5HyJ zH8YRWlNlsUQbzDU19zR0XPL+wan25qyhe5DOVV1Hu4xB5v5m0LgViiEvxHh1OWVlQ0O NsflWNicEeMBKj5DDTWTAyM+A/O9Q/Fe6tXslTKRq4++1sRvgUZbfSJPpx0IKiHo6oh/ nVgUmmDbiSZZ4l2V6BOOt/xkAxUgSNcfl+5kfnkD5VZYV5nj4f3SZ/YxU8X+Vx/I9p91 dIjoEC3tFzjfnYF/Fxnhj7DwnuHVvxzvBwscxKsi3Lnmwmz8r81KxPn3p3k5R8GlR9xE o0OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JhssXeqm+u6yl3pDx1ZAyAVMMEL8ZFFRhcJTQvtxCBI=; b=2qnpgITVdS0RTs5BoTNQK8xd9r3h5H0GmSUWyhMVDEWmh+hba3QuSrTA9BDQ5rCApX XrtAVy1dt+VDuOg6/VSUQ9nGXGGHYn2+cDO0ediZkxDXIrECaX3GQoMs95APDRDHAypi lSO3o+daxncokeBNHRioZip/orTgHCFCZunebxCl2lTWbV5ei5Ictb/Ro2NQn+t6gAKU 9ig1HQ70BBVd2pYzUVRB0PjpzJmqxXMxO2flph6Ug0BGKGiGfK//mlSld2tgfKN2siZg GRGoy9jHQZATindrF03F7c6+YZlJfEPXO6WG3DIMN0Dmvi0N8tzjbZmgpGuoZu85Yfq4 Zp5w== X-Gm-Message-State: AO0yUKVlUbBNMuxwg4oNJrg0IPxZyJaz4tNuh/ySMIS1HUPkY6uXdr7w yLNC5Vq/VL/ysWcNBv2litE= X-Google-Smtp-Source: AK7set9BeWUmq3qyME/gGxXjti3Uxi1/rFzuL0jJolvPeOuhsOqSX9jChGIUxLIWp+xuC4bWBPMK1Q== X-Received: by 2002:a05:651c:1505:b0:293:341f:a62 with SMTP id e5-20020a05651c150500b00293341f0a62mr962640ljf.21.1676915382724; Mon, 20 Feb 2023 09:49:42 -0800 (PST) Received: from localhost.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id u22-20020a2e9f16000000b0029353491df6sm294695ljk.48.2023.02.20.09.49.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Feb 2023 09:49:42 -0800 (PST) From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= To: Srinivas Kandagatla , Rob Herring , Krzysztof Kozlowski Cc: Matthias Brugger , Kunihiko Hayashi , Masami Hiramatsu , linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Subject: [PATCH V3 2/2] nvmem: add generic driver for devices with MMIO access Date: Mon, 20 Feb 2023 18:49:30 +0100 Message-Id: <20230220174930.7440-3-zajec5@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230220174930.7440-1-zajec5@gmail.com> References: <20230220174930.7440-1-zajec5@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230220_094950_035089_09B8EED2 X-CRM114-Status: GOOD ( 25.30 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgoKU29tZSBOVk1FTSBkZXZp Y2VzIGNhbiBiZSBhY2Nlc3NlZCBieSBzaW1wbHkgbWFwcGluZyBtZW1vcnkgYW5kIHJlYWRpbmcK ZnJvbSAvIHdyaXRpbmcgdG8gaXQuIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgYSBnZW5l cmljCiJtbWlvLW52bWVtIiBEVCBiaW5kaW5nIHVzZWQgYnkgc3VjaCBkZXZpY2VzLgoKT25lIG9m IHN1Y2ggZGV2aWNlcyBpcyBCcm9hZGNvbSdzIE5WUkFNLiBJdCdzIGFscmVhZHkgc3VwcG9ydGVk IChzZWUKTlZNRU1fQlJDTV9OVlJBTSkgYnV0IGV4aXN0aW5nIGRyaXZlciBjb3ZlcnMgYm90aDoK MS4gTlZNRU0gZGV2aWNlIGFjY2VzcwoyLiBOVk1FTSBjb250ZW50IHBhcnNpbmcKCk9uY2Ugd2Ug Z2V0IHN1cHBvcnQgZm9yIE5WTUVNIGxheW91dHMgdGhlbiBleGlzdGluZyBOVlJBTSBkcml2ZXIg d2lsbApnZXQgY29udmVydGVkIGludG8gYSBsYXlvdXQgYW5kIGdlbmVyaWMgZHJpdmVyIHdpbGwg dGFrZSBvdmVyCnJlc3BvbnNpYmlsaXR5IGZvciBkYXRhIGFjY2Vzcy4gVGhhdCdzIHdoeSBpdCBj bGFpbXMgImJyY20sbnZyYW0iCihjb25kaXRpb25hbGx5IGZvciBub3cpLgoKU2lnbmVkLW9mZi1i eTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgotLS0KVjM6IFN1cHBvcnQgInJl Zy1pby13aWR0aCIsIGJhc2ljIHdyaXRpbmcgJiAiYnJjbSxudnJhbSIgc3RyaW5nCi0tLQogZHJp dmVycy9udm1lbS9LY29uZmlnICB8ICAxMCArKysrCiBkcml2ZXJzL252bWVtL01ha2VmaWxlIHwg ICAyICsKIGRyaXZlcnMvbnZtZW0vbW1pby5jICAgfCAxMjUgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTM3IGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL252bWVtL21taW8uYwoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbnZtZW0vS2NvbmZpZyBiL2RyaXZlcnMvbnZtZW0vS2NvbmZpZwppbmRleCA2ZGVjMzg4 MDUwNDEuLjE4OWVhODViZDY3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lbS9LY29uZmlnCisr KyBiL2RyaXZlcnMvbnZtZW0vS2NvbmZpZwpAQCAtMTY2LDYgKzE2NiwxNiBAQCBjb25maWcgTlZN RU1fTUlDUk9DSElQX09UUEMKIAkgIFRoaXMgZHJpdmVyIGVuYWJsZSB0aGUgT1RQIGNvbnRyb2xs ZXIgYXZhaWxhYmxlIG9uIE1pY3JvY2hpcCBTQU1BN0c1CiAJICBTb0NzLiBJdCBjb250cm9scyB0 aGUgYWNjZXNzIHRvIHRoZSBPVFAgbWVtb3J5IGNvbm5lY3RlZCB0byBpdC4KIAorY29uZmlnIE5W TUVNX01NSU8KKwl0cmlzdGF0ZSAiTU1JTyBhY2Nlc3MgYmFzZWQgTlZNRU0gc3VwcG9ydCIKKwlk ZXBlbmRzIG9uIEhBU19JT01FTQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBv cnQgZm9yIE5WTUVNIGRldmljZXMgdGhhdCBjYW4gYmUgYWNjZXNzZWQKKwkgIHVzaW5nIE1NSU8u CisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywg dGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbnZtZW0tbW1pby4KKwogY29uZmlnIE5WTUVN X01US19FRlVTRQogCXRyaXN0YXRlICJNZWRpYXRlayBTb0NzIEVGVVNFIHN1cHBvcnQiCiAJZGVw ZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IENPTVBJTEVfVEVTVApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9udm1lbS9NYWtlZmlsZSBiL2RyaXZlcnMvbnZtZW0vTWFrZWZpbGUKaW5kZXggNmExZWZmZmE4 OGYwLi43NjdhOWRiMmJmYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZW0vTWFrZWZpbGUKKysr IGIvZHJpdmVycy9udm1lbS9NYWtlZmlsZQpAQCAtMzUsNiArMzUsOCBAQCBvYmotJChDT05GSUdf TlZNRU1fTUVTT05fTVhfRUZVU0UpCSs9IG52bWVtX21lc29uX214X2VmdXNlLm8KIG52bWVtX21l c29uX214X2VmdXNlLXkJCQk6PSBtZXNvbi1teC1lZnVzZS5vCiBvYmotJChDT05GSUdfTlZNRU1f TUlDUk9DSElQX09UUEMpCSs9IG52bWVtLW1pY3JvY2hpcC1vdHBjLm8KIG52bWVtLW1pY3JvY2hp cC1vdHBjLXkJCQk6PSBtaWNyb2NoaXAtb3RwYy5vCitvYmotJChDT05GSUdfTlZNRU1fTU1JTykJ CSs9IG52bWVtLW1taW8ubworbnZtZW0tbW1pby15CQkJCTo9IG1taW8ubwogb2JqLSQoQ09ORklH X05WTUVNX01US19FRlVTRSkJCSs9IG52bWVtX210ay1lZnVzZS5vCiBudm1lbV9tdGstZWZ1c2Ut eQkJCTo9IG10ay1lZnVzZS5vCiBvYmotJChDT05GSUdfTlZNRU1fTVhTX09DT1RQKQkJKz0gbnZt ZW0tbXhzLW9jb3RwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZW0vbW1pby5jIGIvZHJpdmVy cy9udm1lbS9tbWlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5l MjQ3Yzk0M2VlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL252bWVtL21taW8uYwpAQCAt MCwwICsxLDEyNSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQor LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMyBSYWZhxYIgTWnFgmVja2kgPHJhZmFsQG1pbGVja2ku cGw+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2Rl dmljZXRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgv bnZtZW0tcHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4 L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb3BlcnR5Lmg+CisjaW5jbHVk ZSA8bGludXgvc2xhYi5oPgorCitzdHJ1Y3QgbW1pb19udm1lbSB7CisJdm9pZCBfX2lvbWVtICpi YXNlOworCXUzMiBpb193aWR0aDsKK307CisKK3N0YXRpYyBpbnQgbW1pb19udm1lbV9yZWFkKHZv aWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCBvZmZzZXQsIHZvaWQgKnZhbCwgc2l6ZV90IGJ5dGVz KQoreworCXN0cnVjdCBtbWlvX252bWVtICpwcml2ID0gY29udGV4dDsKKwl1MzIgKmRzdDMyOwor CXUxNiAqZHN0MTY7CisJdTggKmRzdDg7CisKKwlpZiAocHJpdi0+aW9fd2lkdGggJiYgV0FSTl9P TihieXRlcyAlIHByaXYtPmlvX3dpZHRoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2gg KHByaXYtPmlvX3dpZHRoKSB7CisJY2FzZSAxOgorCQlmb3IgKGRzdDggPSB2YWw7IGJ5dGVzOyBi eXRlcyAtPSAxLCBvZmZzZXQgKz0gMSkKKwkJCSpkc3Q4KysgPSByZWFkYihwcml2LT5iYXNlICsg b2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlmb3IgKGRzdDE2ID0gdmFsOyBieXRlczsg Ynl0ZXMgLT0gMiwgb2Zmc2V0ICs9IDIpCisJCQkqZHN0MTYrKyA9IHJlYWR3KHByaXYtPmJhc2Ug KyBvZmZzZXQpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWZvciAoZHN0MzIgPSB2YWw7IGJ5dGVz OyBieXRlcyAtPSA0LCBvZmZzZXQgKz0gNCkKKwkJCSpkc3QzMisrID0gcmVhZGwocHJpdi0+YmFz ZSArIG9mZnNldCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1lbWNweV9mcm9taW8odmFsLCBw cml2LT5iYXNlICsgb2Zmc2V0LCBieXRlcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgbW1pb19udm1lbV93cml0ZSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0 LCB2b2lkICp2YWwsIHNpemVfdCBieXRlcykKK3sKKwlzdHJ1Y3QgbW1pb19udm1lbSAqcHJpdiA9 IGNvbnRleHQ7CisKKwlzd2l0Y2ggKHByaXYtPmlvX3dpZHRoKSB7CisJY2FzZSAxOgorCWNhc2Ug MjoKKwljYXNlIDQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlkZWZhdWx0OgorCQltZW1jcHlf dG9pbyhwcml2LT5iYXNlICsgb2Zmc2V0LCB2YWwsIGJ5dGVzKTsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBtbWlvX252bWVtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJc3RydWN0IG52bWVtX2NvbmZpZyBjb25maWcgPSB7CisJCS5uYW1lID0gIm1t aW8tbnZtZW0iLAorCQkuaWQgPSBOVk1FTV9ERVZJRF9BVVRPLAorCQkucmVhZF9vbmx5ID0gdHJ1 ZSwKKwkJLnJlZ19yZWFkID0gbW1pb19udm1lbV9yZWFkLAorCX07CisJc3RydWN0IGRldmljZSAq ZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbW1pb19udm1lbSAqcHJpdjsKKwlzdHJ1Y3QgcmVz b3VyY2UgKnJlczsKKworCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+YmFz ZSA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsICZyZXMp OworCWlmIChJU19FUlIocHJpdi0+YmFzZSkpCisJCXJldHVybiBQVFJfRVJSKHByaXYtPmJhc2Up OworCisJb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAicmVnLWlvLXdpZHRoIiwg JnByaXYtPmlvX3dpZHRoKTsKKworCWNvbmZpZy5kZXYgPSBkZXY7CisJY29uZmlnLnNpemUgPSBy ZXNvdXJjZV9zaXplKHJlcyk7CisJY29uZmlnLndvcmRfc2l6ZSA9IHByaXYtPmlvX3dpZHRoOwor CWNvbmZpZy5zdHJpZGUgPSBwcml2LT5pb193aWR0aDsKKwljb25maWcucHJpdiA9IHByaXY7CisJ aWYgKCFkZXZpY2VfcHJvcGVydHlfcHJlc2VudChkZXYsICJyZWFkLW9ubHkiKSkKKwkJY29uZmln LnJlZ193cml0ZSA9IG1taW9fbnZtZW1fd3JpdGU7CisKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJP KGRldm1fbnZtZW1fcmVnaXN0ZXIoZGV2LCAmY29uZmlnKSk7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1taW9fbnZtZW1fb2ZfbWF0Y2hfdGFibGVbXSA9IHsKKwl7IC5j b21wYXRpYmxlID0gIm1taW8tbnZtZW0iLCB9LAorCS8qIEN1c3RvbSBiaW5kaW5ncyAqLworI2lm ICFJU19FTkFCTEVEKENPTkZJR19OVk1FTV9CUkNNX05WUkFNKQorCXsgLmNvbXBhdGlibGUgPSAi YnJjbSxudnJhbSIsIH0sCisjZW5kaWYKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIG1taW9fbnZtZW1fZHJpdmVyID0geworCS5wcm9iZSA9IG1taW9fbnZtZW1fcHJv YmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibW1pb19udm1lbSIsCisJCS5vZl9tYXRjaF90 YWJsZSA9IG1taW9fbnZtZW1fb2ZfbWF0Y2hfdGFibGUsCisJfSwKK307CisKK3N0YXRpYyBpbnQg X19pbml0IG1taW9fbnZtZW1faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJf cmVnaXN0ZXIoJm1taW9fbnZtZW1fZHJpdmVyKTsKK30KKworc3Vic3lzX2luaXRjYWxsX3N5bmMo bW1pb19udm1lbV9pbml0KTsKKworTU9EVUxFX0FVVEhPUigiUmFmYcWCIE1pxYJlY2tpIik7CitN T0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtbWlvX252bWVt X29mX21hdGNoX3RhYmxlKTsKLS0gCjIuMzQuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4 LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK