From owner-freebsd-acpi@freebsd.org Sat Dec 3 20:12:57 2016 Return-Path: Delivered-To: freebsd-acpi@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 DBF84C651A8 for ; Sat, 3 Dec 2016 20:12:57 +0000 (UTC) (envelope-from oliver.pinter@hardenedbsd.org) Received: from mail-wj0-x230.google.com (mail-wj0-x230.google.com [IPv6:2a00:1450:400c:c01::230]) (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 61DF31A23 for ; Sat, 3 Dec 2016 20:12:57 +0000 (UTC) (envelope-from oliver.pinter@hardenedbsd.org) Received: by mail-wj0-x230.google.com with SMTP id qp4so259003956wjc.3 for ; Sat, 03 Dec 2016 12:12:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hardenedbsd-org.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=lw6RGDeRXuN0KtgadeSCzICi5TByre7EBmLblUkBBhA=; b=C/0dKZnOC9GKg0f/AMpSf+21NSSXeopI6p/OFo2cjQh+D2YU3+RG1lepZulhycZsko 4CU/sJQxP6f7hTyLg96jmpmz8uKjJcQ/AULSxvCP0l59rUDF0OUTVhJc99JiIX3keA3o MuuT8ypM033AKniBx3/TZxVEMx7Lh+wE/GSovkF+P9Qr8U6ny8PeofmdlkxgDyx1MlRs Ljpkq28WO2i+YyVfw3psCLBk+js4oZQAXRAmZc9DO4v+/yftdDOPBEwvDx067IZ4wdKV hhX/eRmU+Hnj5VSs5h+twL3dEjMsjOcTRLJwQUl0v2aZfecWfBkJwFo7/7sEXrhxhhD8 BaQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=lw6RGDeRXuN0KtgadeSCzICi5TByre7EBmLblUkBBhA=; b=XCBXfzWJvDsTpz9D7x7/6SQn5We19rjTMtJM/p66BKGp9zBuXARQo/nfsPuLJ6oNHE gRYA+yG2I3DAa+d4xV0FLuIa8zdk/jQmdyWZH/ZNs/wCEWu0euFOd7AMo8JHjNSY6qAv PXrI2VliKNc01CzNk7xnwNiapavdlc6ra/3xCp9rTkK8Kk54JzI7KJsgqeY+Irr5B5ID 1VjScqWDnnw0t+1welNybbB7FO97LEAyNvwRSin18K8qEI7WpAltI4Q0aJQL+xmboASQ DWrFZiMLjIHTHMsjcWAgq7g+5det8t3ZvHqB64IyzZs0m9YpQEJDithcT8HjOcaOAsxc wkZg== X-Gm-Message-State: AKaTC007yzKfzFNZOE3V8nQXdf1i72b8uLXWXlbcCmlcrfo8wGGAzTOU+ZFyrNO0ytUHec3X7DKZGIlh+RwDnG+b X-Received: by 10.194.0.43 with SMTP id 11mr43765066wjb.218.1480795975113; Sat, 03 Dec 2016 12:12:55 -0800 (PST) MIME-Version: 1.0 Received: by 10.194.253.65 with HTTP; Sat, 3 Dec 2016 12:12:54 -0800 (PST) In-Reply-To: <201612020821.uB28L8s2000195@repo.freebsd.org> References: <201612020821.uB28L8s2000195@repo.freebsd.org> From: Oliver Pinter Date: Sat, 3 Dec 2016 21:12:54 +0100 Message-ID: Subject: Re: svn commit: r309400 - head/sys/dev/acpica To: Hans Petter Selasky Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" , freebsd-acpi@freebsd.org Content-Type: multipart/mixed; boundary=f46d0421a85915aa600542c6ae3f X-BeenThere: freebsd-acpi@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: ACPI and power management development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Dec 2016 20:12:58 -0000 --f46d0421a85915aa600542c6ae3f Content-Type: text/plain; charset=UTF-8 On Fri, Dec 2, 2016 at 9:21 AM, Hans Petter Selasky wrote: > Author: hselasky > Date: Fri Dec 2 08:21:08 2016 > New Revision: 309400 > URL: https://svnweb.freebsd.org/changeset/base/309400 > > Log: > Fix for endless recursion in the ACPI GPE handler during boot. > > When handling a GPE ACPI interrupt object the EcSpaceHandler() > function can be called which checks the EC_EVENT_SCI bit and then > recurse on the EcGpeQueryHandler() function. If there are multiple GPE > events pending the EC_EVENT_SCI bit will be set at the next call to > EcSpaceHandler() causing it to recurse again via the > EcGpeQueryHandler() function. This leads to a slow never ending > recursion during boot which prevents proper system startup, because > the EC_EVENT_SCI bit never gets cleared in this scenario. > > The behaviour is reproducible with the ALASKA AMI in combination with > a newer Skylake based mainboard in the following way: > > Enter BIOS and adjust the clock one hour forward. Save and exit the > BIOS. System fails to boot due to the above mentioned bug in > EcGpeQueryHandler() which was observed recursing multiple times. > > This patch adds a simple recursion guard to the EcGpeQueryHandler() > function and also also adds logic to detect if new GPE events occurred > during the execution of EcGpeQueryHandler() and then loop on this > function instead of recursing. > > Reviewed by: jhb > MFC after: 2 weeks > > Modified: > head/sys/dev/acpica/acpi_ec.c I have similar error since the latest BIOS update on my gigabyte H170N-Wifi board. The curiosity of the BIOS update was after upgrading to this version, there are no possibility to rollback to older version. The other weird thing, is that MFCing back this patch does not help. I get stucked lock in acmtx mutex, as you could see from the attached log. The other interesting is the ACPI error at boot time: [1] ACPI Error: Mutex [0x0] is not acquired, cannot release (20160527/utmutex-386) [1] ACPI Error: Could not release AML Interpreter mutex (20160527/exutils-147) [1] ACPI Error: Mutex [0x0] is not acquired, cannot release (20160527/utmutex-386) [1] ACPI Error: Could not release AML Interpreter mutex (20160527/exutils-147) [1] cpu1: on acpi0 [1] ACPI Error: Mutex [0x0] is not acquired, cannot release (20160527/utmutex-386) [1] ACPI Error: Could not release AML Interpreter mutex (20160527/exutils-147) [1] ACPI Error: Mutex [0x0] is not acquired, cannot release (20160527/utmutex-386) [1] ACPI Error: Could not release AML Interpreter mutex (20160527/exutils-147) (This error is on 10-STABLE.) > > Modified: head/sys/dev/acpica/acpi_ec.c > ============================================================================== > --- head/sys/dev/acpica/acpi_ec.c Fri Dec 2 08:15:52 2016 (r309399) > +++ head/sys/dev/acpica/acpi_ec.c Fri Dec 2 08:21:08 2016 (r309400) > @@ -613,16 +613,14 @@ EcCheckStatus(struct acpi_ec_softc *sc, > } > > static void > -EcGpeQueryHandler(void *Context) > +EcGpeQueryHandlerSub(struct acpi_ec_softc *sc) > { > - struct acpi_ec_softc *sc = (struct acpi_ec_softc *)Context; > UINT8 Data; > ACPI_STATUS Status; > int retry; > char qxx[5]; > > ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__); > - KASSERT(Context != NULL, ("EcGpeQueryHandler called with NULL")); > > /* Serialize user access with EcSpaceHandler(). */ > Status = EcLock(sc); > @@ -647,7 +645,6 @@ EcGpeQueryHandler(void *Context) > EC_EVENT_INPUT_BUFFER_EMPTY))) > break; > } > - sc->ec_sci_pend = FALSE; > if (ACPI_FAILURE(Status)) { > EcUnlock(sc); > device_printf(sc->ec_dev, "GPE query failed: %s\n", > @@ -678,6 +675,29 @@ EcGpeQueryHandler(void *Context) > } > } > > +static void > +EcGpeQueryHandler(void *Context) > +{ > + struct acpi_ec_softc *sc = (struct acpi_ec_softc *)Context; > + int pending; > + > + KASSERT(Context != NULL, ("EcGpeQueryHandler called with NULL")); > + > + do { > + /* Read the current pending count */ > + pending = atomic_load_acq_int(&sc->ec_sci_pend); > + > + /* Call GPE handler function */ > + EcGpeQueryHandlerSub(sc); > + > + /* > + * Try to reset the pending count to zero. If this fails we > + * know another GPE event has occurred while handling the > + * current GPE event and need to loop. > + */ > + } while (!atomic_cmpset_int(&sc->ec_sci_pend, pending, 0)); > +} > + > /* > * The GPE handler is called when IBE/OBF or SCI events occur. We are > * called from an unknown lock context. > @@ -706,13 +726,14 @@ EcGpeHandler(ACPI_HANDLE GpeDevice, UINT > * It will run the query and _Qxx method later, under the lock. > */ > EcStatus = EC_GET_CSR(sc); > - if ((EcStatus & EC_EVENT_SCI) && !sc->ec_sci_pend) { > + if ((EcStatus & EC_EVENT_SCI) && > + atomic_fetchadd_int(&sc->ec_sci_pend, 1) == 0) { > CTR0(KTR_ACPI, "ec gpe queueing query handler"); > Status = AcpiOsExecute(OSL_GPE_HANDLER, EcGpeQueryHandler, Context); > - if (ACPI_SUCCESS(Status)) > - sc->ec_sci_pend = TRUE; > - else > + if (ACPI_FAILURE(Status)) { > printf("EcGpeHandler: queuing GPE query handler failed\n"); > + atomic_store_rel_int(&sc->ec_sci_pend, 0); > + } > } > return (ACPI_REENABLE_GPE); > } > @@ -759,7 +780,8 @@ EcSpaceHandler(UINT32 Function, ACPI_PHY > * we call it directly here since our thread taskq is not active yet. > */ > if (cold || rebooting || sc->ec_suspending) { > - if ((EC_GET_CSR(sc) & EC_EVENT_SCI)) { > + if ((EC_GET_CSR(sc) & EC_EVENT_SCI) && > + atomic_fetchadd_int(&sc->ec_sci_pend, 1) == 0) { > CTR0(KTR_ACPI, "ec running gpe handler directly"); > EcGpeQueryHandler(sc); > } > _______________________________________________ > svn-src-head@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/svn-src-head > To unsubscribe, send any mail to "svn-src-head-unsubscribe@freebsd.org" --f46d0421a85915aa600542c6ae3f Content-Type: application/octet-stream; name="sysctl.lockup" Content-Disposition: attachment; filename="sysctl.lockup" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iw9nn1fp0 cHJvY3N0YXQgLWsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBQSUQgICAgVElEIENPTU0gICAg ICAgICAgICAgVEROQU1FICAgICAgICAgICBLU1RBQ0sgICAgICAgICAgICAgICAgICAgICAgIAo0 NzUzNiAxMDAxNDIgc3lzY3RsICAgICAgICAgICAtICAgICAgICAgICAgICAgIG1pX3N3aXRjaCBz bGVlcHFfc3dpdGNoIHNsZWVwcV9jYXRjaF9zaWduYWxzIHNsZWVwcV93YWl0X3NpZyBfc2xlZXAg QWNwaU9zQWNxdWlyZU11dGV4IEFjcGlVdEFjcXVpcmVNdXRleCBBY3BpRXhFbnRlckludGVycHJl dGVyIEFjcGlOc0V2YWx1YXRlIEFjcGlVdEV2YWx1YXRlT2JqZWN0IEFjcGlVdEV4ZWN1dGVfSElE IEFjcGlHZXRPYmplY3RJbmZvIGFjcGlfY2hpbGRfcG5waW5mb19zdHJfbWV0aG9kIGRldmljZV9z eXNjdGxfaGFuZGxlciBzeXNjdGxfcm9vdCB1c2VybGFuZF9zeXNjdGwgc3lzX19fc3lzY3RsIGFt ZDY0X3N5c2NhbGwgCgpwcm9jc3RhdCAta2sKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClBJRCAg ICBUSUQgQ09NTSAgICAgICAgICAgICBURE5BTUUgICAgICAgICAgIEtTVEFDSyAgICAgICAgICAg ICAgICAgICAgICAgCjQ3NTM2IDEwMDE0MiBzeXNjdGwgICAgICAgICAgIC0gICAgICAgICAgICAg ICAgbWlfc3dpdGNoKzB4MTU5IHNsZWVwcV9zd2l0Y2grMHgxMmUgc2xlZXBxX2NhdGNoX3NpZ25h bHMrMHgyZGMgc2xlZXBxX3dhaXRfc2lnKzB4ZiBfc2xlZXArMHgzMTkgQWNwaU9zQWNxdWlyZU11 dGV4KzB4MTU1IEFjcGlVdEFjcXVpcmVNdXRleCsweDNhIEFjcGlFeEVudGVySW50ZXJwcmV0ZXIr MHhiIEFjcGlOc0V2YWx1YXRlKzB4MWNiIEFjcGlVdEV2YWx1YXRlT2JqZWN0KzB4NGMgQWNwaVV0 RXhlY3V0ZV9ISUQrMHgyNyBBY3BpR2V0T2JqZWN0SW5mbysweGRlIGFjcGlfY2hpbGRfcG5waW5m b19zdHJfbWV0aG9kKzB4MjQgZGV2aWNlX3N5c2N0bF9oYW5kbGVyKzB4MTFiIHN5c2N0bF9yb290 KzB4MWQ5IHVzZXJsYW5kX3N5c2N0bCsweDE5MiBzeXNfX19zeXNjdGwrMHg3NCBhbWQ2NF9zeXNj YWxsKzB4Mjk4IAoKcGNpY29uZgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpob3N0YjBAcGNpMDow OjA6MDoJY2xhc3M9MHgwNjAwMDAgY2FyZD0weDUwMDAxNDU4IGNoaXA9MHgxOTFmODA4NiByZXY9 MHgwNyBoZHI9MHgwMAogICAgdmVuZG9yICAgICA9ICdJbnRlbCBDb3Jwb3JhdGlvbicKICAgIGRl dmljZSAgICAgPSAnU2t5bGFrZSBIb3N0IEJyaWRnZS9EUkFNIFJlZ2lzdGVycycKICAgIGNsYXNz ICAgICAgPSBicmlkZ2UKICAgIHN1YmNsYXNzICAgPSBIT1NULVBDSQpwY2liMUBwY2kwOjA6MTow OgljbGFzcz0weDA2MDQwMCBjYXJkPTB4NTAwMDE0NTggY2hpcD0weDE5MDE4MDg2IHJldj0weDA3 IGhkcj0weDAxCiAgICB2ZW5kb3IgICAgID0gJ0ludGVsIENvcnBvcmF0aW9uJwogICAgZGV2aWNl ICAgICA9ICdTa3lsYWtlIFBDSWUgQ29udHJvbGxlciAoeDE2KScKICAgIGNsYXNzICAgICAgPSBi cmlkZ2UKICAgIHN1YmNsYXNzICAgPSBQQ0ktUENJCnhoY2kwQHBjaTA6MDoyMDowOgljbGFzcz0w eDBjMDMzMCBjYXJkPTB4NTAwNzE0NTggY2hpcD0weGExMmY4MDg2IHJldj0weDMxIGhkcj0weDAw CiAgICB2ZW5kb3IgICAgID0gJ0ludGVsIENvcnBvcmF0aW9uJwogICAgZGV2aWNlICAgICA9ICdT dW5yaXNlIFBvaW50LUggVVNCIDMuMCB4SENJIENvbnRyb2xsZXInCiAgICBjbGFzcyAgICAgID0g c2VyaWFsIGJ1cwogICAgc3ViY2xhc3MgICA9IFVTQgpub25lMEBwY2kwOjA6MjI6MDoJY2xhc3M9 MHgwNzgwMDAgY2FyZD0weDFjM2ExNDU4IGNoaXA9MHhhMTNhODA4NiByZXY9MHgzMSBoZHI9MHgw MAogICAgdmVuZG9yICAgICA9ICdJbnRlbCBDb3Jwb3JhdGlvbicKICAgIGRldmljZSAgICAgPSAn U3VucmlzZSBQb2ludC1IIENTTUUgSEVDSScKICAgIGNsYXNzICAgICAgPSBzaW1wbGUgY29tbXMK YWhjaTBAcGNpMDowOjIzOjA6CWNsYXNzPTB4MDEwNjAxIGNhcmQ9MHhiMDA1MTQ1OCBjaGlwPTB4 YTEwMjgwODYgcmV2PTB4MzEgaGRyPTB4MDAKICAgIHZlbmRvciAgICAgPSAnSW50ZWwgQ29ycG9y YXRpb24nCiAgICBkZXZpY2UgICAgID0gJ1N1bnJpc2UgUG9pbnQtSCBTQVRBIGNvbnRyb2xsZXIg W0FIQ0kgbW9kZV0nCiAgICBjbGFzcyAgICAgID0gbWFzcyBzdG9yYWdlCiAgICBzdWJjbGFzcyAg ID0gU0FUQQpwY2liMkBwY2kwOjA6Mjc6MDoJY2xhc3M9MHgwNjA0MDAgY2FyZD0weDUwMDExNDU4 IGNoaXA9MHhhMTY5ODA4NiByZXY9MHhmMSBoZHI9MHgwMQogICAgdmVuZG9yICAgICA9ICdJbnRl bCBDb3Jwb3JhdGlvbicKICAgIGRldmljZSAgICAgPSAnU3VucmlzZSBQb2ludC1IIFBDSSBSb290 IFBvcnQnCiAgICBjbGFzcyAgICAgID0gYnJpZGdlCiAgICBzdWJjbGFzcyAgID0gUENJLVBDSQpw Y2liM0BwY2kwOjA6Mjc6MzoJY2xhc3M9MHgwNjA0MDAgY2FyZD0weDUwMDExNDU4IGNoaXA9MHhh MTZhODA4NiByZXY9MHhmMSBoZHI9MHgwMQogICAgdmVuZG9yICAgICA9ICdJbnRlbCBDb3Jwb3Jh dGlvbicKICAgIGRldmljZSAgICAgPSAnU3VucmlzZSBQb2ludC1IIFBDSSBSb290IFBvcnQnCiAg ICBjbGFzcyAgICAgID0gYnJpZGdlCiAgICBzdWJjbGFzcyAgID0gUENJLVBDSQpwY2liNEBwY2kw OjA6Mjg6MDoJY2xhc3M9MHgwNjA0MDAgY2FyZD0weDUwMDExNDU4IGNoaXA9MHhhMTEyODA4NiBy ZXY9MHhmMSBoZHI9MHgwMQogICAgdmVuZG9yICAgICA9ICdJbnRlbCBDb3Jwb3JhdGlvbicKICAg IGRldmljZSAgICAgPSAnU3VucmlzZSBQb2ludC1IIFBDSSBFeHByZXNzIFJvb3QgUG9ydCcKICAg IGNsYXNzICAgICAgPSBicmlkZ2UKICAgIHN1YmNsYXNzICAgPSBQQ0ktUENJCnBjaWI1QHBjaTA6 MDoyODo0OgljbGFzcz0weDA2MDQwMCBjYXJkPTB4NTAwMTE0NTggY2hpcD0weGExMTQ4MDg2IHJl dj0weGYxIGhkcj0weDAxCiAgICB2ZW5kb3IgICAgID0gJ0ludGVsIENvcnBvcmF0aW9uJwogICAg ZGV2aWNlICAgICA9ICdTdW5yaXNlIFBvaW50LUggUENJIEV4cHJlc3MgUm9vdCBQb3J0JwogICAg Y2xhc3MgICAgICA9IGJyaWRnZQogICAgc3ViY2xhc3MgICA9IFBDSS1QQ0kKcGNpYjZAcGNpMDow OjI4OjU6CWNsYXNzPTB4MDYwNDAwIGNhcmQ9MHg1MDAxMTQ1OCBjaGlwPTB4YTExNTgwODYgcmV2 PTB4ZjEgaGRyPTB4MDEKICAgIHZlbmRvciAgICAgPSAnSW50ZWwgQ29ycG9yYXRpb24nCiAgICBk ZXZpY2UgICAgID0gJ1N1bnJpc2UgUG9pbnQtSCBQQ0kgRXhwcmVzcyBSb290IFBvcnQnCiAgICBj bGFzcyAgICAgID0gYnJpZGdlCiAgICBzdWJjbGFzcyAgID0gUENJLVBDSQpwY2liN0BwY2kwOjA6 Mjg6NjoJY2xhc3M9MHgwNjA0MDAgY2FyZD0weDUwMDExNDU4IGNoaXA9MHhhMTE2ODA4NiByZXY9 MHhmMSBoZHI9MHgwMQogICAgdmVuZG9yICAgICA9ICdJbnRlbCBDb3Jwb3JhdGlvbicKICAgIGRl dmljZSAgICAgPSAnU3VucmlzZSBQb2ludC1IIFBDSSBFeHByZXNzIFJvb3QgUG9ydCcKICAgIGNs YXNzICAgICAgPSBicmlkZ2UKICAgIHN1YmNsYXNzICAgPSBQQ0ktUENJCnBjaWI4QHBjaTA6MDoy ODo3OgljbGFzcz0weDA2MDQwMCBjYXJkPTB4NTAwMTE0NTggY2hpcD0weGExMTc4MDg2IHJldj0w eGYxIGhkcj0weDAxCiAgICB2ZW5kb3IgICAgID0gJ0ludGVsIENvcnBvcmF0aW9uJwogICAgZGV2 aWNlICAgICA9ICdTdW5yaXNlIFBvaW50LUggUENJIEV4cHJlc3MgUm9vdCBQb3J0JwogICAgY2xh c3MgICAgICA9IGJyaWRnZQogICAgc3ViY2xhc3MgICA9IFBDSS1QQ0kKcGNpYjlAcGNpMDowOjI5 OjA6CWNsYXNzPTB4MDYwNDAwIGNhcmQ9MHg1MDAxMTQ1OCBjaGlwPTB4YTExODgwODYgcmV2PTB4 ZjEgaGRyPTB4MDEKICAgIHZlbmRvciAgICAgPSAnSW50ZWwgQ29ycG9yYXRpb24nCiAgICBkZXZp Y2UgICAgID0gJ1N1bnJpc2UgUG9pbnQtSCBQQ0kgRXhwcmVzcyBSb290IFBvcnQnCiAgICBjbGFz cyAgICAgID0gYnJpZGdlCiAgICBzdWJjbGFzcyAgID0gUENJLVBDSQppc2FiMEBwY2kwOjA6MzE6 MDoJY2xhc3M9MHgwNjAxMDAgY2FyZD0weDUwMDExNDU4IGNoaXA9MHhhMTQ0ODA4NiByZXY9MHgz MSBoZHI9MHgwMAogICAgdmVuZG9yICAgICA9ICdJbnRlbCBDb3Jwb3JhdGlvbicKICAgIGRldmlj ZSAgICAgPSAnU3VucmlzZSBQb2ludC1IIExQQyBDb250cm9sbGVyJwogICAgY2xhc3MgICAgICA9 IGJyaWRnZQogICAgc3ViY2xhc3MgICA9IFBDSS1JU0EKbm9uZTFAcGNpMDowOjMxOjI6CWNsYXNz PTB4MDU4MDAwIGNhcmQ9MHg1MDAxMTQ1OCBjaGlwPTB4YTEyMTgwODYgcmV2PTB4MzEgaGRyPTB4 MDAKICAgIHZlbmRvciAgICAgPSAnSW50ZWwgQ29ycG9yYXRpb24nCiAgICBkZXZpY2UgICAgID0g J1N1bnJpc2UgUG9pbnQtSCBQTUMnCiAgICBjbGFzcyAgICAgID0gbWVtb3J5CmhkYWMxQHBjaTA6 MDozMTozOgljbGFzcz0weDA0MDMwMCBjYXJkPTB4YTE4MjE0NTggY2hpcD0weGExNzA4MDg2IHJl dj0weDMxIGhkcj0weDAwCiAgICB2ZW5kb3IgICAgID0gJ0ludGVsIENvcnBvcmF0aW9uJwogICAg ZGV2aWNlICAgICA9ICdTdW5yaXNlIFBvaW50LUggSEQgQXVkaW8nCiAgICBjbGFzcyAgICAgID0g bXVsdGltZWRpYQogICAgc3ViY2xhc3MgICA9IEhEQQpub25lMkBwY2kwOjA6MzE6NDoJY2xhc3M9 MHgwYzA1MDAgY2FyZD0weDUwMDExNDU4IGNoaXA9MHhhMTIzODA4NiByZXY9MHgzMSBoZHI9MHgw MAogICAgdmVuZG9yICAgICA9ICdJbnRlbCBDb3Jwb3JhdGlvbicKICAgIGRldmljZSAgICAgPSAn U3VucmlzZSBQb2ludC1IIFNNQnVzJwogICAgY2xhc3MgICAgICA9IHNlcmlhbCBidXMKICAgIHN1 YmNsYXNzICAgPSBTTUJ1cwplbTBAcGNpMDowOjMxOjY6CWNsYXNzPTB4MDIwMDAwIGNhcmQ9MHhl MDAwMTQ1OCBjaGlwPTB4MTViODgwODYgcmV2PTB4MzEgaGRyPTB4MDAKICAgIHZlbmRvciAgICAg PSAnSW50ZWwgQ29ycG9yYXRpb24nCiAgICBkZXZpY2UgICAgID0gJ0V0aGVybmV0IENvbm5lY3Rp b24gKDIpIEkyMTktVicKICAgIGNsYXNzICAgICAgPSBuZXR3b3JrCiAgICBzdWJjbGFzcyAgID0g ZXRoZXJuZXQKdmdhcGNpMEBwY2kwOjE6MDowOgljbGFzcz0weDAzMDAwMCBjYXJkPTB4ZTE2NDE3 NGIgY2hpcD0weDY4ZjkxMDAyIHJldj0weDAwIGhkcj0weDAwCiAgICB2ZW5kb3IgICAgID0gJ0Fk dmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gW0FNRC9BVEldJwogICAgZGV2aWNlICAgICA9ICdD ZWRhciBbUmFkZW9uIEhEIDUwMDAvNjAwMC83MzUwLzgzNTAgU2VyaWVzXScKICAgIGNsYXNzICAg ICAgPSBkaXNwbGF5CiAgICBzdWJjbGFzcyAgID0gVkdBCmhkYWMwQHBjaTA6MTowOjE6CWNsYXNz PTB4MDQwMzAwIGNhcmQ9MHhhYTY4MTc0YiBjaGlwPTB4YWE2ODEwMDIgcmV2PTB4MDAgaGRyPTB4 MDAKICAgIHZlbmRvciAgICAgPSAnQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiBbQU1EL0FU SV0nCiAgICBkZXZpY2UgICAgID0gJ0NlZGFyIEhETUkgQXVkaW8gW1JhZGVvbiBIRCA1NDAwLzYz MDAvNzMwMCBTZXJpZXNdJwogICAgY2xhc3MgICAgICA9IG11bHRpbWVkaWEKICAgIHN1YmNsYXNz ICAgPSBIREEKaWdiMEBwY2kwOjU6MDowOgljbGFzcz0weDAyMDAwMCBjYXJkPTB4ZTAwMDE0NTgg Y2hpcD0weDE1Mzk4MDg2IHJldj0weDAzIGhkcj0weDAwCiAgICB2ZW5kb3IgICAgID0gJ0ludGVs IENvcnBvcmF0aW9uJwogICAgZGV2aWNlICAgICA9ICdJMjExIEdpZ2FiaXQgTmV0d29yayBDb25u ZWN0aW9uJwogICAgY2xhc3MgICAgICA9IG5ldHdvcmsKICAgIHN1YmNsYXNzICAgPSBldGhlcm5l dApub25lM0BwY2kwOjY6MDowOgljbGFzcz0weDAyODAwMCBjYXJkPTB4MDAxMDgwODYgY2hpcD0w eDI0ZjM4MDg2IHJldj0weDNhIGhkcj0weDAwCiAgICB2ZW5kb3IgICAgID0gJ0ludGVsIENvcnBv cmF0aW9uJwogICAgZGV2aWNlICAgICA9ICdXaXJlbGVzcyA4MjYwJwogICAgY2xhc3MgICAgICA9 IG5ldHdvcmsKCmRtZXNnCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpbMV0gQ1BVOiBJbnRlbChS KSBDb3JlKFRNKSBpNy02NzAwIENQVSBAIDMuNDBHSHogKDM0MDguMTMtTUh6IEs4LWNsYXNzIENQ VSkKWzFdICAgT3JpZ2luPSJHZW51aW5lSW50ZWwiICBJZD0weDUwNmUzICBGYW1pbHk9MHg2ICBN b2RlbD0weDVlICBTdGVwcGluZz0zClsxXSAgIEZlYXR1cmVzPTB4YmZlYmZiZmY8RlBVLFZNRSxE RSxQU0UsVFNDLE1TUixQQUUsTUNFLENYOCxBUElDLFNFUCxNVFJSLFBHRSxNQ0EsQ01PVixQQVQs UFNFMzYsQ0xGTFVTSCxEVFMsQUNQSSxNTVgsRlhTUixTU0UsU1NFMixTUyxIVFQsVE0sUEJFPgpb MV0gICBGZWF0dXJlczI9MHg3ZmZhZmJmZjxTU0UzLFBDTE1VTFFEUSxEVEVTNjQsTU9OLERTX0NQ TCxWTVgsU01YLEVTVCxUTTIsU1NTRTMsU0RCRyxGTUEsQ1gxNix4VFBSLFBEQ00sUENJRCxTU0U0 LjEsU1NFNC4yLHgyQVBJQyxNT1ZCRSxQT1BDTlQsVFNDRExULEFFU05JLFhTQVZFLE9TWFNBVkUs QVZYLEYxNkMsUkRSQU5EPgpbMV0gICBBTUQgRmVhdHVyZXM9MHgyYzEwMDgwMDxTWVNDQUxMLE5Y LFBhZ2UxR0IsUkRUU0NQLExNPgpbMV0gICBBTUQgRmVhdHVyZXMyPTB4MTIxPExBSEYsQUJNLFBy ZWZldGNoPgpbMV0gICBTdHJ1Y3R1cmVkIEV4dGVuZGVkIEZlYXR1cmVzPTB4MjljNmZiZjxGU0dT QkFTRSxUU0NBREosU0dYLEJNSTEsSExFLEFWWDIsU01FUCxCTUkyLEVSTVMsSU5WUENJRCxSVE0s TkZQVVNHLE1QWCxSRFNFRUQsQURYLFNNQVAsQ0xGTFVTSE9QVCxQUk9DVFJBQ0U+ClsxXSAgIFhT QVZFIEZlYXR1cmVzPTB4ZjxYU0FWRU9QVCxYU0FWRUMsWElOVVNFLFhTQVZFUz4KWzFdICAgVlQt eDogUEFULEhMVCxNVEYsUEFVU0UsRVBULFVHLFZQSUQKWzFdICAgVFNDOiBQLXN0YXRlIGludmFy aWFudCwgcGVyZm9ybWFuY2Ugc3RhdGlzdGljcwpbMV0gcmVhbCBtZW1vcnkgID0gMTcxNzk4Njkx ODQgKDE2Mzg0IE1CKQpbMV0gYXZhaWwgbWVtb3J5ID0gMTY1MzU5ODIwODAgKDE1NzY5IE1CKQpb MV0gRXZlbnQgdGltZXIgIkxBUElDIiBxdWFsaXR5IDYwMApbMV0gQUNQSSBBUElDIFRhYmxlOiA8 QUxBU0tBIEEgTSBJID4KWzFdIEZyZWVCU0QvU01QOiBNdWx0aXByb2Nlc3NvciBTeXN0ZW0gRGV0 ZWN0ZWQ6IDggQ1BVcwpbMV0gRnJlZUJTRC9TTVA6IDEgcGFja2FnZShzKSB4IDQgY29yZShzKSB4 IDIgU01UIHRocmVhZHMKWzFdICBjcHUwIChCU1ApOiBBUElDIElEOiAgMApbMV0gIGNwdTEgKEFQ KTogQVBJQyBJRDogIDEKWzFdICBjcHUyIChBUCk6IEFQSUMgSUQ6ICAyClsxXSAgY3B1MyAoQVAp OiBBUElDIElEOiAgMwpbMV0gIGNwdTQgKEFQKTogQVBJQyBJRDogIDQKWzFdICBjcHU1IChBUCk6 IEFQSUMgSUQ6ICA1ClsxXSAgY3B1NiAoQVApOiBBUElDIElEOiAgNgpbMV0gIGNwdTcgKEFQKTog QVBJQyBJRDogIDcKCi4uLgoKWzFdIGFjcGkwOiA8QUxBU0tBIEEgTSBJID4gb24gbW90aGVyYm9h cmQKWzFdIGFjcGkwOiBQb3dlciBCdXR0b24gKGZpeGVkKQpbMV0gY3B1MDogPEFDUEkgQ1BVPiBv biBhY3BpMApbMV0gQUNQSSBFcnJvcjogTXV0ZXggWzB4MF0gaXMgbm90IGFjcXVpcmVkLCBjYW5u b3QgcmVsZWFzZSAoMjAxNjA1MjcvdXRtdXRleC0zODYpClsxXSBBQ1BJIEVycm9yOiBDb3VsZCBu b3QgcmVsZWFzZSBBTUwgSW50ZXJwcmV0ZXIgbXV0ZXggKDIwMTYwNTI3L2V4dXRpbHMtMTQ3KQpb MV0gQUNQSSBFcnJvcjogTXV0ZXggWzB4MF0gaXMgbm90IGFjcXVpcmVkLCBjYW5ub3QgcmVsZWFz ZSAoMjAxNjA1MjcvdXRtdXRleC0zODYpClsxXSBBQ1BJIEVycm9yOiBDb3VsZCBub3QgcmVsZWFz ZSBBTUwgSW50ZXJwcmV0ZXIgbXV0ZXggKDIwMTYwNTI3L2V4dXRpbHMtMTQ3KQpbMV0gY3B1MTog PEFDUEkgQ1BVPiBvbiBhY3BpMApbMV0gQUNQSSBFcnJvcjogTXV0ZXggWzB4MF0gaXMgbm90IGFj cXVpcmVkLCBjYW5ub3QgcmVsZWFzZSAoMjAxNjA1MjcvdXRtdXRleC0zODYpClsxXSBBQ1BJIEVy cm9yOiBDb3VsZCBub3QgcmVsZWFzZSBBTUwgSW50ZXJwcmV0ZXIgbXV0ZXggKDIwMTYwNTI3L2V4 dXRpbHMtMTQ3KQpbMV0gQUNQSSBFcnJvcjogTXV0ZXggWzB4MF0gaXMgbm90IGFjcXVpcmVkLCBj YW5ub3QgcmVsZWFzZSAoMjAxNjA1MjcvdXRtdXRleC0zODYpClsxXSBBQ1BJIEVycm9yOiBDb3Vs ZCBub3QgcmVsZWFzZSBBTUwgSW50ZXJwcmV0ZXIgbXV0ZXggKDIwMTYwNTI3L2V4dXRpbHMtMTQ3 KQpbMV0gY3B1MjogPEFDUEkgQ1BVPiBvbiBhY3BpMApbMV0gY3B1MzogPEFDUEkgQ1BVPiBvbiBh Y3BpMApbMV0gY3B1NDogPEFDUEkgQ1BVPiBvbiBhY3BpMApbMV0gY3B1NTogPEFDUEkgQ1BVPiBv biBhY3BpMApbMV0gY3B1NjogPEFDUEkgQ1BVPiBvbiBhY3BpMApbMV0gY3B1NzogPEFDUEkgQ1BV PiBvbiBhY3BpMAoKa2VudgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzbWJpb3MuYmlvcy5yZWxk YXRlPSIxMS8xMS8yMDE2IgpzbWJpb3MuYmlvcy52ZW5kb3I9IkFtZXJpY2FuIE1lZ2F0cmVuZHMg SW5jLiIKc21iaW9zLmJpb3MudmVyc2lvbj0iRjIwIgpzbWJpb3MuY2hhc3Npcy5tYWtlcj0iRGVm YXVsdCBzdHJpbmciCnNtYmlvcy5jaGFzc2lzLnNlcmlhbD0iRGVmYXVsdCBzdHJpbmciCnNtYmlv cy5jaGFzc2lzLnRhZz0iRGVmYXVsdCBzdHJpbmciCnNtYmlvcy5jaGFzc2lzLnZlcnNpb249IkRl ZmF1bHQgc3RyaW5nIgpzbWJpb3MubWVtb3J5LmVuYWJsZWQ9IjE2Nzc3MjE2IgpzbWJpb3MucGxh bmFyLmxvY2F0aW9uPSJEZWZhdWx0IHN0cmluZyIKc21iaW9zLnBsYW5hci5tYWtlcj0iR2lnYWJ5 dGUgVGVjaG5vbG9neSBDby4sIEx0ZC4iCnNtYmlvcy5wbGFuYXIucHJvZHVjdD0iSDE3ME4tV0lG SS1DRiIKc21iaW9zLnBsYW5hci5zZXJpYWw9IkRlZmF1bHQgc3RyaW5nIgpzbWJpb3MucGxhbmFy LnRhZz0iRGVmYXVsdCBzdHJpbmciCnNtYmlvcy5wbGFuYXIudmVyc2lvbj0ieC54IgpzbWJpb3Mu c29ja2V0LmVuYWJsZWQ9IjEiCnNtYmlvcy5zb2NrZXQucG9wdWxhdGVkPSIxIgpzbWJpb3Muc3lz dGVtLm1ha2VyPSJHaWdhYnl0ZSBUZWNobm9sb2d5IENvLiwgTHRkLiIKc21iaW9zLnN5c3RlbS5w cm9kdWN0PSJIMTcwTi1XSUZJIgpzbWJpb3Muc3lzdGVtLnNlcmlhbD0iRGVmYXVsdCBzdHJpbmci CnNtYmlvcy5zeXN0ZW0udXVpZD0iWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhY IgpzbWJpb3Muc3lzdGVtLnZlcnNpb249IkRlZmF1bHQgc3RyaW5nIgpzbWJpb3MudmVyc2lvbj0i My4wIgo= --f46d0421a85915aa600542c6ae3f--