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 lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 2F825C25B74 for ; Thu, 16 May 2024 19:53:59 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s7hAY-0007c6-Rv; Thu, 16 May 2024 15:53:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s7hAR-0007b9-B8 for grub-devel@gnu.org; Thu, 16 May 2024 15:53:31 -0400 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1s7hAP-0003DW-6T for grub-devel@gnu.org; Thu, 16 May 2024 15:53:31 -0400 Received: by mail-ej1-x62d.google.com with SMTP id a640c23a62f3a-a5cec2c2981so64684166b.1 for ; Thu, 16 May 2024 12:53:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1715889207; x=1716494007; darn=gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=3WcgCUWIYZNzAVQbdZsPFSwFHeFlaLeKD7s7YQn+/Nk=; b=V4uVDz/aGrd4aOFQaZNxakoWtLy1SXo2eIB65PzSTGqPSnNIenvN0e5TXcuB1PKjz0 wMfkG1hW8IPKkfV8cM6aTfTw6NlSvA483E+e8F1TPl8VzkMD4D5ld24TDc9E8fUVKLOZ XvayhSkXV32Q5GdPPa7eIMNGykme62WmtxrBpn5ifTcbYdlgbtH5LJ/YD4Kcnud11yZz qnjdUUlNR5TakVYICo+dS4CZTW9MrP/dWhBU0itKg58wE3bqVQa2dO88Al/4zuxzszTE Td/8vU2FEp5eL+T/GjE9R1bfbsbo9DKhnGGTkevKXpBc2gEsFeKMGixccerXyVQwgMY1 hTzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715889207; x=1716494007; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=3WcgCUWIYZNzAVQbdZsPFSwFHeFlaLeKD7s7YQn+/Nk=; b=PULldKGTzQmJ+boSHWUag4AvgNV2AsadQ9XCVZDoQg/K34vWDFwxZFY9Wx7Qg8TELT aQhxzQ9tGABoeNMYBDn0LtIgILZVqK8jKZW4AZUu/CWzU+bX2ONx/e/Q/tqiwAOdkR+q v7x6edMB+Rhkfwt6Mo3phkDe21jqdo1o7rLXgY9/stdgaFpfdu9NxuOfsxamaj0De+BM qdEzKA6WlogTXjJmPFANJ4y7I2dJ2UiJOwhvNG7srrk7tYlmE//x6gUdeYpx9l6XxL4A 66JF0zUQlg8QM6PNL0pVEStIe3shsDYHe5OfjTLM3jK+B8pg9he2zsfeUiEuf12cKugo qH2w== X-Gm-Message-State: AOJu0Yy6Pl7p1Z8slC+zt8O10iyvLf5/DRXJumVQSiMMzRndJB3qkvJk A6UctqGTcUWe8i2o36VOgkty8tS7vdw9FKB1/9zKo25EoC1sOvvoPpZKRmdC X-Google-Smtp-Source: AGHT+IGyjSMklXwn+KsAvY7qhli8qaKaLUbrwhCtZfLwa0/QMBKaIR6xWntYRRGGpJqOPT5cLWFBaw== X-Received: by 2002:a50:9f06:0:b0:572:67d9:6c3b with SMTP id 4fb4d7f45d1cf-5734d67f864mr17631222a12.26.1715889206954; Thu, 16 May 2024 12:53:26 -0700 (PDT) Received: from localhost ([5.253.206.60]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-57509d459desm1218785a12.61.2024.05.16.12.53.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 May 2024 12:53:26 -0700 (PDT) From: Vladimir Serbinenko To: grub-devel@gnu.org Cc: Vladimir Serbinenko Subject: [PATCH] Implement fmap support as used by coreboot Date: Thu, 16 May 2024 22:53:23 +0300 Message-Id: <20240516195323.5565-1-phcoder@gmail.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::62d; envelope-from=phcoder@gmail.com; helo=mail-ej1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org VGhpcyBwYXRjaCBsaW1pdHMgaXRzZWxmIHRvIGZtYXAgY29taW5nIGZyb20gYm9vdGVkIGNvcmVi b290LApub3QgYXMgdXNlZCBpbiBpbWFnZXMuCgpTaWduZWQtb2ZmLWJ5OiBWbGFkaW1pciBTZXJi aW5lbmtvIDxwaGNvZGVyQGdtYWlsLmNvbT4KLS0tCiBncnViLWNvcmUvTWFrZWZpbGUuY29yZS5k ZWYgfCAgIDcgKysKIGdydWItY29yZS9wYXJ0bWFwL2ZtYXAuYyAgICB8IDE3MiArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTc5IGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBncnViLWNvcmUvcGFydG1hcC9mbWFwLmMKCmRpZmYg LS1naXQgYS9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYgYi9ncnViLWNvcmUvTWFrZWZpbGUu Y29yZS5kZWYKaW5kZXggOGUxYjFkOWYzLi4yOGM1ZDkwNTAgMTAwNjQ0Ci0tLSBhL2dydWItY29y ZS9NYWtlZmlsZS5jb3JlLmRlZgorKysgYi9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYKQEAg LTIwMTYsNiArMjAxNiwxMyBAQCBtb2R1bGUgPSB7CiAgIGNvbW1vbiA9IHBhcnRtYXAvYXBwbGUu YzsKIH07CiAKK21vZHVsZSA9IHsKKyAgbmFtZSA9IHBhcnRfZm1hcDsKKyAgY29tbW9uID0gcGFy dG1hcC9mbWFwLmM7CisgIGVuYWJsZSA9IHg4NjsKKyAgZW5hYmxlID0gY29yZWJvb3Q7Cit9Owor CiBtb2R1bGUgPSB7CiAgIG5hbWUgPSBwYXJ0X2dwdDsKICAgY29tbW9uID0gcGFydG1hcC9ncHQu YzsKZGlmZiAtLWdpdCBhL2dydWItY29yZS9wYXJ0bWFwL2ZtYXAuYyBiL2dydWItY29yZS9wYXJ0 bWFwL2ZtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjI2MjVlNGM3 NQotLS0gL2Rldi9udWxsCisrKyBiL2dydWItY29yZS9wYXJ0bWFwL2ZtYXAuYwpAQCAtMCwwICsx LDE3MiBAQAorLyogZ3B0LmMgLSBSZWFkIEdVSUQgUGFydGl0aW9uIFRhYmxlcyAoR1BUKS4gICov CisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmln aHQgKEMpIDIwMjMgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBHUlVC IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg KiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxncnViL2Rpc2suaD4KKyNpbmNsdWRlIDxncnViL21p c2MuaD4KKyNpbmNsdWRlIDxncnViL21tLmg+CisjaW5jbHVkZSA8Z3J1Yi9wYXJ0aXRpb24uaD4K KyNpbmNsdWRlIDxncnViL2RsLmg+CisjaW5jbHVkZSA8Z3J1Yi9pMThuLmg+CisjaW5jbHVkZSA8 Z3J1Yi9jb3JlYm9vdC9sYmlvLmg+CisKK0dSVUJfTU9EX0xJQ0VOU0UgKCJHUEx2MysiKTsKKwor LyogRGVmaW5pdGlvbnMgY29waWVkIGZyb20gZm1hcF9zZXJpYWxpemVkLmggdXNpbmcgQlNETC4g ICovCisjZGVmaW5lIEZNQVBfU0lHTkFUVVJFCQkiX19GTUFQX18iCisjZGVmaW5lIEZNQVBfVkVS X01BSk9SCQkxCS8qIHRoaXMgaGVhZGVyJ3MgRk1BUCBtaW5vciB2ZXJzaW9uICovCisjZGVmaW5l IEZNQVBfVkVSX01JTk9SCQkxCS8qIHRoaXMgaGVhZGVyJ3MgRk1BUCBtaW5vciB2ZXJzaW9uICov CisjZGVmaW5lIEZNQVBfU1RSTEVOCQkzMgkvKiBtYXhpbXVtIGxlbmd0aCBmb3Igc3RyaW5ncywg Ki8KKwkJCQkJLyogaW5jbHVkaW5nIG51bGwtdGVybWluYXRvciAqLworCisvKiBNYXBwaW5nIG9m IHZvbGF0aWxlIGFuZCBzdGF0aWMgcmVnaW9ucyBpbiBmaXJtd2FyZSBiaW5hcnkgKi8KK3N0cnVj dCBncnViX2ZtYXBfZW50cnkgeworICBncnViX3VpbnQzMl90IG9mZnNldDsgICAgICAgICAgICAg ICAgLyogb2Zmc2V0IHJlbGF0aXZlIHRvIGJhc2UgKi8KKyAgZ3J1Yl91aW50MzJfdCBzaXplOyAg ICAgICAgICAgICAgICAgIC8qIHNpemUgaW4gYnl0ZXMgKi8KKyAgZ3J1Yl91aW50OF90ICBuYW1l W0ZNQVBfU1RSTEVOXTsgICAgIC8qIGRlc2NyaXB0aXZlIG5hbWUgKi8KKyAgZ3J1Yl91aW50MTZf dCBmbGFnczsgICAgICAgICAgICAgICAgIC8qIGZsYWdzIGZvciB0aGlzIGFyZWEgKi8KK30gR1JV Ql9QQUNLRUQ7CisKK3N0cnVjdCBncnViX2ZtYXBfaGVhZGVyIHsKKyAgZ3J1Yl91aW50OF90ICBz aWduYXR1cmVbOF07CQkvKiAiX19GTUFQX18iICgweDVGNUY0NjRENDE1MDVGNUYpICovCisgIGdy dWJfdWludDhfdCAgdmVyX21ham9yOwkJLyogbWFqb3IgdmVyc2lvbiAqLworICBncnViX3VpbnQ4 X3QgIHZlcl9taW5vcjsJCS8qIG1pbm9yIHZlcnNpb24gKi8KKyAgZ3J1Yl91aW50NjRfdCBiYXNl OwkJCS8qIGFkZHJlc3Mgb2YgdGhlIGZpcm13YXJlIGJpbmFyeSAqLworICBncnViX3VpbnQzMl90 IHNpemU7CQkJLyogc2l6ZSBvZiBmaXJtd2FyZSBiaW5hcnkgaW4gYnl0ZXMgKi8KKyAgZ3J1Yl91 aW50OF90ICBuYW1lW0ZNQVBfU1RSTEVOXTsJLyogbmFtZSBvZiB0aGlzIGZpcm13YXJlIGJpbmFy eSAqLworICBncnViX3VpbnQxNl90IG5hcmVhczsJCS8qIG51bWJlciBvZiBhcmVhcyBkZXNjcmli ZWQgYnkKKwkJCQkgICBmbWFwX2FyZWFzW10gYmVsb3cgKi8KK30gR1JVQl9QQUNLRUQ7CisKK3N0 YXRpYyBzdHJ1Y3QgZ3J1Yl9wYXJ0aXRpb25fbWFwIGdydWJfZm1hcF9wYXJ0aXRpb25fbWFwOwor CisMCisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX2ZtYXBfaGVhZGVyKHN0cnVjdCBncnViX2ZtYXBf aGVhZGVyICpoZWFkZXIpCit7CisgIGlmIChncnViX21lbWNtcCAoaGVhZGVyLT5zaWduYXR1cmUs IEZNQVBfU0lHTkFUVVJFLCBzaXplb2YgKGhlYWRlci0+c2lnbmF0dXJlKSkgIT0gMCkKKyAgICBy ZXR1cm4gMDsKKyAgaWYgKGhlYWRlci0+dmVyX21ham9yICE9IEZNQVBfVkVSX01BSk9SIHx8IGhl YWRlci0+dmVyX21pbm9yICE9IEZNQVBfVkVSX01JTk9SKQorICAgIHJldHVybiAwOworICByZXR1 cm4gMTsKK30KKworc3RhdGljIGdydWJfdWludDY0X3QgY2Jmc2Rpc2tfZm1hcF9vZmZzZXQgPSAw eGZmZmZmZmZmOworCitzdGF0aWMgaW50IGNidGFibGVfaXRlciAoZ3J1Yl9saW51eGJpb3NfdGFi bGVfaXRlbV90IGl0ZW0sCisJCQkgdm9pZCAqY3R4dF9pbiBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQp KSkKK3sKKyAgaWYgKGl0ZW0tPnRhZyA9PSBHUlVCX0xJTlVYQklPU19NRU1CRVJfQk9PVF9NRURJ QSkKKyAgICB7CisgICAgICBjYmZzZGlza19mbWFwX29mZnNldCA9ICgoc3RydWN0IGdydWJfbGlu dXhiaW9zX3RhYmxlX2Jvb3RfbWVkaWEgKikgKGl0ZW0gKyAxKSktPmZtYXBfb2Zmc2V0OworICAg ICAgcmV0dXJuIDE7CisgICAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZGlz Y292ZXJfY2Jmc2Rpc2tfZm1hcF9vZmZzZXQodm9pZCkKK3sKKyAgc3RhdGljIGludCBkaXNjb3Zl cnlfZG9uZTsKKyAgaWYgKGRpc2NvdmVyeV9kb25lKQorICAgIHJldHVybjsKKyAgIGdydWJfbGlu dXhiaW9zX3RhYmxlX2l0ZXJhdGUgKGNidGFibGVfaXRlciwgTlVMTCk7Cit9CisKKworc3RhdGlj IGdydWJfZXJyX3QKK2dydWJfZm1hcF9wYXJ0aXRpb25fbWFwX2l0ZXJhdGUgKGdydWJfZGlza190 IGRpc2ssCisJCQkJZ3J1Yl9wYXJ0aXRpb25faXRlcmF0ZV9ob29rX3QgaG9vaywKKwkJCQl2b2lk ICpob29rX2RhdGEpCit7CisgIHN0cnVjdCBncnViX3BhcnRpdGlvbiBwYXJ0OworICBzdHJ1Y3Qg Z3J1Yl9mbWFwX2hlYWRlciBoZWFkZXI7CisgIHN0cnVjdCBncnViX2ZtYXBfZW50cnkgZW50cnk7 CisgIHVuc2lnbmVkIGludCBpOworICBncnViX3VpbnQ2NF90IGhlYWRlcl9vZmZzZXQgPSAwOwor ICBncnViX3VpbnQ2NF90IGN1cnJlbnRfb2Zmc2V0ID0gMDsKKworICBpZiAoZGlzay0+ZGV2LT5p ZCA9PSBHUlVCX0RJU0tfREVWSUNFX0NCRlNESVNLX0lEKQorICAgIHsKKyAgICAgIGRpc2NvdmVy X2NiZnNkaXNrX2ZtYXBfb2Zmc2V0KCk7CisgICAgICBoZWFkZXJfb2Zmc2V0ID0gY2Jmc2Rpc2tf Zm1hcF9vZmZzZXQ7CisgICAgICBpZiAoY2Jmc2Rpc2tfZm1hcF9vZmZzZXQgPT0gMHhmZmZmZmZm ZiB8fCBjYmZzZGlza19mbWFwX29mZnNldCA9PSAweGZmZmZmZmZmZmZmZmZmZmZVTEwpCisJcmV0 dXJuIGdydWJfZXJyb3IoR1JVQl9FUlJfQkFEX1BBUlRfVEFCTEUsICJmbWFwIG5vdCBkZWNsYXJl ZCIpOwkKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gZ3J1Yl9lcnJvcihHUlVCX0VSUl9CQURf UEFSVF9UQUJMRSwgImZtYXAgaW4gbm9uLWNiZnMgZGV2aWNlcyBpc24ndCBpbXBsZW1lbnRlZCB5 ZXQiKTsKKworICAvKiBSZWFkIHRoZSBGTUFQIGhlYWRlci4gICovCisgIGlmIChncnViX2Rpc2tf cmVhZCAoZGlzaywgaGVhZGVyX29mZnNldCA+PiBHUlVCX0RJU0tfU0VDVE9SX0JJVFMsIGhlYWRl cl9vZmZzZXQgJiAoR1JVQl9ESVNLX1NFQ1RPUl9TSVpFIC0gMSksIHNpemVvZiAoaGVhZGVyKSwg JmhlYWRlcikpCisJcmV0dXJuIGdydWJfZXJybm87CisKKyAgaWYgKCF2YWxpZGF0ZV9mbWFwX2hl YWRlcigmaGVhZGVyKSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1BBUlRf VEFCTEUsICJubyB2YWxpZCBGTUFQIGhlYWRlciIpOworCisgIGdydWJfZHByaW50ZiAoImZtYXAi LCAiUmVhZCBhIHZhbGlkIEZNQVAgaGVhZGVyXG4iKTsKKworICBjdXJyZW50X29mZnNldCA9IGhl YWRlcl9vZmZzZXQgKyBzaXplb2YoaGVhZGVyKTsKKworICBmb3IgKGkgPSAwOyBpIDwgZ3J1Yl9s ZV90b19jcHUxNiAoaGVhZGVyLm5hcmVhcyk7IGkrKykKKyAgICB7CisgICAgICBpZiAoZ3J1Yl9k aXNrX3JlYWQgKGRpc2ssIGN1cnJlbnRfb2Zmc2V0ID4+IEdSVUJfRElTS19TRUNUT1JfQklUUywg Y3VycmVudF9vZmZzZXQgJiAoR1JVQl9ESVNLX1NFQ1RPUl9TSVpFIC0gMSksCisJCQkgIHNpemVv ZiAoZW50cnkpLCAmZW50cnkpKQorCXJldHVybiBncnViX2Vycm5vOworCisgICAgICAvKiBUT0RP OiBXaGF0IHRvIGRvIGlmIGl0J3Mgbm90IDUxMi1ieXRlcyBhbGlnbmVkPyAgKi8KKyAgICAgIGdy dWJfdWludDY0X3QgZW5kID0gKGdydWJfdWludDY0X3QpIGdydWJfbGVfdG9fY3B1MzIgKGVudHJ5 Lm9mZnNldCkgKyAoZ3J1Yl91aW50NjRfdCkgZ3J1Yl9sZV90b19jcHUzMiAoZW50cnkuc2l6ZSk7 CisgICAgICBwYXJ0LnN0YXJ0ID0gZ3J1Yl9sZV90b19jcHUzMiAoZW50cnkub2Zmc2V0KSA+PiBH UlVCX0RJU0tfU0VDVE9SX0JJVFM7CisgICAgICBwYXJ0LmxlbiA9IChlbmQgPj4gR1JVQl9ESVNL X1NFQ1RPUl9CSVRTKSAtIHBhcnQuc3RhcnQ7CisgICAgICBwYXJ0Lm9mZnNldCA9IGN1cnJlbnRf b2Zmc2V0ID4+IEdSVUJfRElTS19TRUNUT1JfQklUUzsKKyAgICAgIHBhcnQubnVtYmVyID0gaTsK KyAgICAgIHBhcnQuaW5kZXggPSBjdXJyZW50X29mZnNldCAmIChHUlVCX0RJU0tfU0VDVE9SX1NJ WkUgLSAxKTsKKyAgICAgIHBhcnQucGFydG1hcCA9ICZncnViX2ZtYXBfcGFydGl0aW9uX21hcDsK KyAgICAgIHBhcnQucGFyZW50ID0gZGlzay0+cGFydGl0aW9uOworCisgICAgICBncnViX2Rwcmlu dGYgKCJncHQiLCAiRk1BUCBlbnRyeSAlZDogc3RhcnQ9MHglbGx4LCBsZW5ndGg9MHglbGx4XG4i LCBpLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZ3J1Yl9sZV90b19jcHUzMiAoZW50cnku b2Zmc2V0KSwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGdydWJfbGVfdG9fY3B1MzIgKGVu dHJ5LnNpemUpKTsKKworICAgICAgaWYgKGhvb2sgKGRpc2ssICZwYXJ0LCBob29rX2RhdGEpKQor CXJldHVybiBncnViX2Vycm5vOworCisgICAgICBjdXJyZW50X29mZnNldCArPSBzaXplb2YgKGVu dHJ5KTsKKyAgICB9CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKKwwKKy8qIFBhcnRp dGlvbiBtYXAgdHlwZS4gICovCitzdGF0aWMgc3RydWN0IGdydWJfcGFydGl0aW9uX21hcCBncnVi X2ZtYXBfcGFydGl0aW9uX21hcCA9CisgIHsKKyAgICAubmFtZSA9ICJmbWFwIiwKKyAgICAuaXRl cmF0ZSA9IGdydWJfZm1hcF9wYXJ0aXRpb25fbWFwX2l0ZXJhdGUsCisgIH07CisKK0dSVUJfTU9E X0lOSVQocGFydF9mbWFwKQoreworICBncnViX3BhcnRpdGlvbl9tYXBfcmVnaXN0ZXIgKCZncnVi X2ZtYXBfcGFydGl0aW9uX21hcCk7Cit9CisKK0dSVUJfTU9EX0ZJTkkocGFydF9mbWFwKQorewor ICBncnViX3BhcnRpdGlvbl9tYXBfdW5yZWdpc3RlciAoJmdydWJfZm1hcF9wYXJ0aXRpb25fbWFw KTsKK30KLS0gCjIuMzkuMgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkdydWItZGV2ZWwgbWFpbGluZyBsaXN0CkdydWItZGV2ZWxAZ251Lm9yZwpodHRw czovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9ncnViLWRldmVsCg==