From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 24718 invoked from network); 13 Jan 2021 23:52:19 -0000 Received: from mother.openwall.net (195.42.179.200) by inbox.vuxu.org with ESMTPUTF8; 13 Jan 2021 23:52:19 -0000 Received: (qmail 25971 invoked by uid 550); 13 Jan 2021 23:52:16 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 25953 invoked from network); 13 Jan 2021 23:52:15 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=stiwjL3PWPCsjOq+DV0u5yrkr9XKIVxpTlBr90lAenA=; b=thtIlGd1QT7VDfIbkag9IOFGhVMvb1QGnpAydlLhQM9qriqulo7dakJ9tGTpUIWJWp fDBohPa40Y6Z+M8718oPlBWU9DpgPoO8tZABZvNthI2w5ltpJKyevRATjo90pl/0stRv 93TMyyf8awSeRUfkSJzqMUjRvczBe40U/iXKZONp/l6r+/0OLdiYU4KQoVfdkn6BPhrO pKYzFAED6V0uP0MZkOQZC16rx1SCJ4GSruOn3DngHpA6kTgYqn3UbmoWk8DCMwdX9MSS +PsKXb8WnxB35J3+DDNO8ZwDBAAtL2oE2kkYCxO3IYK7yYqywsk6UCIikL0odjG9FcTA 8Hng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=stiwjL3PWPCsjOq+DV0u5yrkr9XKIVxpTlBr90lAenA=; b=sdI/azIIQu9Z2goHzN4Wz1uz30AF5yWeVKR5yP4cknKXCfkjmJJovr0lcxFvL/CZht JIUPSM7Nq+68DSIEwHA7dvV3hK5EDnTzwifLZ96KZaxCC0Wr33MScN2SfzgqAelGAYHh t1Goi1upxdvBc6KbKlua8DqqL4ejgQQzOmNk+q20eVt/GWd7/mkjf0nfl0uGsEDoZSii HvZJtDroJKsyqIBEP5VJW0jAqNFIgw2KueKX14x69pgS2UdApJkT9tSG3Xe8qVNMjTFX 9mykP/ibrJU4F29EfngXME0h608e0VlFPGkNLr7o2TsnL8m9ZpEfy2haZ2EAiDQJHzcG WhiQ== X-Gm-Message-State: AOAM530iZb4VXFhpGEiMMBR/ddNeGiVSOl7ZmtR5IRjMekmVNFAaOfMW g9dAxGGut57U5nkHqasrmLBen6DeWRhWBcC3yCqJtDhZ X-Google-Smtp-Source: ABdhPJxNci9/zdIumCGDtsTRQAgqZBQkbVwQpkUhw3UJsGyohiLfFC4R2vEZfY61ReRVjUs7sk8+DR6mMr1m6qAtL7w= X-Received: by 2002:a92:d8cc:: with SMTP id l12mr4288992ilo.225.1610581923213; Wed, 13 Jan 2021 15:52:03 -0800 (PST) MIME-Version: 1.0 References: <20201217002348.GO534@brightrain.aerifal.cx> In-Reply-To: From: Jesse DeGuire Date: Wed, 13 Jan 2021 18:51:52 -0500 Message-ID: To: musl@lists.openwall.com Cc: Patrick Oppenlander Content-Type: multipart/mixed; boundary="0000000000006a4c9405b8d0d373" Subject: Re: [musl] Musl on Cortex-M Devices --0000000000006a4c9405b8d0d373 Content-Type: text/plain; charset="UTF-8" This version fixes a few warnings, fixes some CRLF line endings, and changes the syscall variant of "__a_gettp" to a C function that uses the __syscall() macro instead of hardcoded assembly. That last change was done to better take advantage of what Musl already provides and because it will let me more easily handle the thread pointer should I make a "baremetal" target. On another note, I notice that other thread subjects are tagged with things like "[musl]" or "[patch]". Am I supposed to add those or is OpenWall supposed to do that? The former seems rather redundant to me, but the latter does make sense. On Tue, Jan 5, 2021 at 11:01 PM Patrick Oppenlander wrote: > > On Wed, Jan 6, 2021 at 2:25 PM Jesse DeGuire wrote: > > > > > > Sorry, I missed this reply. > > > > > > qemu-user refuses to translate the instruction because cp15 is not > > > implemented on armv7-m, exactly the same issue as is being discussed > > > here. If you run the same executable but tell qemu to emulate an A > > > profile core instead it happily runs it. > > > > > > Linux will probably kill the executable with SIGILL or something like > > > that (I haven't tried, just guessing). > > > > > > It's related to this discussion as changing musl to use the syscall > > > will likely result in qemu-user working too. > > > > > > I would personally prefer to see a solution which doesn't use the > > > syscall. It's possible to implement the trap-and-emulate much more > > > efficiently than the syscall as it can quite easily be done without > > > preserving any more registers than the core pushes on exception entry > > > anyway. https://github.com/apexrtos/apex/blob/master/sys/arch/arm/v7m/emulate.S > > > is what I came up with. That implementation could be even tighter as > > > it can never run from handler mode, so the stack detection at the > > > beginning is unnecessary. However, I haven't considered v6-m or v8-m. > > > > > > trap-and-emulate also gracefully degrades when running the same > > > executable on A vs M cores. > > > > > > Patrick > > > > Any thoughts on what's shown in this patch? For your RTOS and v7m/v8m, > > I'm thinking you'd be able to get the behavior you want by setting the > > HWCAP_TLS flag early in your startup code. For my purposes, I plan to > > use the syscall because I intend to eventually make a "baremetal" arch > > in Musl that turns syscalls into simple function calls. Therefore, I'd > > clear the flag in my startup code. > > What you've proposed (using HWCAP_TLS) sounds good to me. Apex tries > very hard to look like Linux to userspace, so anything that works for > Linux will work for it. As an aside, I also use a forked and reduced > musl as the kernel libc - a baremetal target could be handy there. > > It might be nice to have a configure option to disable the syscall > fallback completely (compile time constant test of some kind?) to > allow inlining of the mrc instruction. If such an executable ever > tried to run on an unsupported platform it would be killed with an > invalid instruction exception. > > If it's acceptable to have that type of configure-time tuning we can > also disable mutex & rwlock spins (set spins to 0) as an optimisation > for uniprocessor targets. > > Patrick I still need to figure out how I want to really handle a baremetal target, though it does seem like Musl makes adding targets relatively easy to add. I also don't mind adding more compile-time configuration options, but I'll leave whether I should or not up to others. I noticed that Musl doesn't really have those (except when needed to figure out architecture variants), so I'm not sure if avoiding such checks is part of an overall policy for Musl. -Jesse --0000000000006a4c9405b8d0d373 Content-Type: application/x-patch; name="musl_cortexm_v4.patch" Content-Disposition: attachment; filename="musl_cortexm_v4.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kjw0si820 ZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2F0b21pY19hcmNoLmggYi9hcmNoL2FybS9hdG9taWNfYXJj aC5oCmluZGV4IDllMzkzN2NjLi41NGI3NDNiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYXRvbWlj X2FyY2guaAorKysgYi9hcmNoL2FybS9hdG9taWNfYXJjaC5oCkBAIC0yNywxNiArMjcsNiBAQCBz dGF0aWMgaW5saW5lIGludCBhX3NjKHZvbGF0aWxlIGludCAqcCwgaW50IHYpCiAJcmV0dXJuICFy OwogfQogCi0jaWYgX19BUk1fQVJDSF83QV9fIHx8IF9fQVJNX0FSQ0hfN1JfXyB8fCAgX19BUk1f QVJDSCA+PSA3Ci0KLSNkZWZpbmUgYV9iYXJyaWVyIGFfYmFycmllcgotc3RhdGljIGlubGluZSB2 b2lkIGFfYmFycmllcigpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJkbWIgaXNoIiA6IDog OiAibWVtb3J5Iik7Ci19Ci0KLSNlbmRpZgotCiAjZGVmaW5lIGFfcHJlX2xsc2MgYV9iYXJyaWVy CiAjZGVmaW5lIGFfcG9zdF9sbHNjIGFfYmFycmllcgogCkBAIC02MiwxMyArNTIsMjIgQEAgc3Rh dGljIGlubGluZSBpbnQgYV9jYXModm9sYXRpbGUgaW50ICpwLCBpbnQgdCwgaW50IHMpCiAKICNl bmRpZgogCi0jaWZuZGVmIGFfYmFycmllcgogI2RlZmluZSBhX2JhcnJpZXIgYV9iYXJyaWVyCisj aWYgX19BUk1fQVJDSF83QV9fIHx8IF9fQVJNX0FSQ0hfN1JfXyB8fCBfX0FSTV9BUkNIID49IDcg fHwgX19BUk1fQVJDSF9QUk9GSUxFID09ICdNJworCitzdGF0aWMgaW5saW5lIHZvaWQgYV9iYXJy aWVyKCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImRtYiBpc2giIDogOiA6ICJtZW1vcnki KTsKK30KKworI2Vsc2UKKwogc3RhdGljIGlubGluZSB2b2lkIGFfYmFycmllcigpCiB7CiAJcmVn aXN0ZXIgdWludHB0cl90IGlwIF9fYXNtX18oImlwIikgPSBfX2FfYmFycmllcl9wdHI7CiAJX19h c21fXyBfX3ZvbGF0aWxlX18oIEJMWCAiIGlwIiA6ICIrciIoaXApIDogOiAibWVtb3J5IiwgImNj IiwgImxyIiApOwogfQorCiAjZW5kaWYKIAogI2RlZmluZSBhX2NyYXNoIGFfY3Jhc2gKZGlmZiAt LWdpdCBhL2FyY2gvYXJtL2NydF9hcmNoLmggYi9hcmNoL2FybS9jcnRfYXJjaC5oCmluZGV4IDk5 NTA4YjFkLi42NjA4MDQyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3J0X2FyY2guaAorKysgYi9h cmNoL2FybS9jcnRfYXJjaC5oCkBAIC0zLDEzICszLDE1IEBAIF9fYXNtX18oCiAiLmdsb2JhbCAi IFNUQVJUICIgXG4iCiAiLnR5cGUgIiBTVEFSVCAiLCVmdW5jdGlvbiBcbiIKIFNUQVJUICI6IFxu IgotIgltb3YgZnAsICMwIFxuIgotIgltb3YgbHIsICMwIFxuIgorIgltb3ZzIGEzLCAjMCBcbiIK KyIJbW92IGZwLCBhMyBcbiIKKyIJbW92IGxyLCBhMyBcbiIKICIJbGRyIGEyLCAxZiBcbiIKICIJ YWRkIGEyLCBwYywgYTIgXG4iCiAiCW1vdiBhMSwgc3AgXG4iCi0iMjoJYW5kIGlwLCBhMSwgIy0x NiBcbiIKLSIJbW92IHNwLCBpcCBcbiIKKyIyOglzdWJzIGEzLCAjMTYgXG4iCisiCWFuZHMgYTEs IGEzIFxuIgorIgltb3Ygc3AsIGExIFxuIgogIglibCAiIFNUQVJUICJfYyBcbiIKICIud2VhayBf RFlOQU1JQyBcbiIKICIuaGlkZGVuIF9EWU5BTUlDIFxuIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0v cHRocmVhZF9hcmNoLmggYi9hcmNoL2FybS9wdGhyZWFkX2FyY2guaAppbmRleCBlNjg5ZWEyMS4u OTE1NWI5YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3B0aHJlYWRfYXJjaC5oCisrKyBiL2FyY2gv YXJtL3B0aHJlYWRfYXJjaC5oCkBAIC0xLDUgKzEsNSBAQAogI2lmICgoX19BUk1fQVJDSF82S19f IHx8IF9fQVJNX0FSQ0hfNktaX18gfHwgX19BUk1fQVJDSF82WktfXykgJiYgIV9fdGh1bWJfXykg XAotIHx8IF9fQVJNX0FSQ0hfN0FfXyB8fCBfX0FSTV9BUkNIXzdSX18gfHwgX19BUk1fQVJDSCA+ PSA3CisgfHwgX19BUk1fQVJDSF83QV9fIHx8IF9fQVJNX0FSQ0hfN1JfXyB8fCAoX19BUk1fQVJD SCA+PSA3ICYmIF9fQVJNX0FSQ0hfUFJPRklMRSAhPSAnTScpCiAKIHN0YXRpYyBpbmxpbmUgcHRo cmVhZF90IF9fcHRocmVhZF9zZWxmKCkKIHsKZGlmZiAtLWdpdCBhL2NydC9hcm0vY3J0bi5zIGIv Y3J0L2FybS9jcnRuLnMKaW5kZXggZGMwMjBmOTIuLjU0N2U2NGI3IDEwMDY0NAotLS0gYS9jcnQv YXJtL2NydG4ucworKysgYi9jcnQvYXJtL2NydG4ucwpAQCAtMSw5ICsxLDkgQEAKIC5zeW50YXgg dW5pZmllZAogCiAuc2VjdGlvbiAuaW5pdAotCXBvcCB7cjAsbHJ9Ci0JYnggbHIKKwlwb3Age3Iw LHIxfQorCWJ4IHIxCiAKIC5zZWN0aW9uIC5maW5pCi0JcG9wIHtyMCxscn0KLQlieCBscgorCXBv cCB7cjAscjF9CisJYnggcjEKZGlmZiAtLWdpdCBhL3NyYy9sZHNvL2FybS90bHNkZXNjLlMgYi9z cmMvbGRzby9hcm0vdGxzZGVzYy5TCmluZGV4IDNhZTEzM2M5Li4zMzIxNjIwMCAxMDA2NDQKLS0t IGEvc3JjL2xkc28vYXJtL3Rsc2Rlc2MuUworKysgYi9zcmMvbGRzby9hcm0vdGxzZGVzYy5TCkBA IC0xMiwxMyArMTIsMTMgQEAgX190bHNkZXNjX3N0YXRpYzoKIC5oaWRkZW4gX190bHNkZXNjX2R5 bmFtaWMKIC50eXBlIF9fdGxzZGVzY19keW5hbWljLCVmdW5jdGlvbgogX190bHNkZXNjX2R5bmFt aWM6Ci0JcHVzaCB7cjIscjMsaXAsbHJ9CisJcHVzaCB7cjIscjMscjQsbHJ9CiAJbGRyIHIxLFty MF0KIAlsZHIgcjIsW3IxLCM0XSAgLy8gcjIgPSBvZmZzZXQKIAlsZHIgcjEsW3IxXSAgICAgLy8g cjEgPSBtb2RpZAogCiAjaWYgKChfX0FSTV9BUkNIXzZLX18gfHwgX19BUk1fQVJDSF82S1pfXyB8 fCBfX0FSTV9BUkNIXzZaS19fKSAmJiAhX190aHVtYl9fKSBcCi0gfHwgX19BUk1fQVJDSF83QV9f IHx8IF9fQVJNX0FSQ0hfN1JfXyB8fCBfX0FSTV9BUkNIID49IDcKKyB8fCBfX0FSTV9BUkNIXzdB X18gfHwgX19BUk1fQVJDSF83Ul9fIHx8IChfX0FSTV9BUkNIID49IDcgJiYgX19BUk1fQVJDSF9Q Uk9GSUxFICE9ICdNJykKIAltcmMgcDE1LDAscjAsYzEzLGMwLDMKICNlbHNlCiAJbGRyIHIwLDFm CkBAIC0zNiwxOSArMzYsMjggQEAgX190bHNkZXNjX2R5bmFtaWM6CiAJYnggcjAKICNlbmRpZgog I2VuZGlmCisjaWYgZGVmaW5lZChfX3RodW1iMl9fKSAgfHwgICFkZWZpbmVkKF9fdGh1bWJfXykK IAlsZHIgcjMsW3IwLCMtNF0gLy8gcjMgPSBkdHYKLQlsZHIgaXAsW3IzLHIxLExTTCAjMl0KLQlz dWIgcjAsaXAscjAKKwlsZHIgcjQsW3IzLHIxLExTTCAjMl0KKwlzdWIgcjAscjQscjAKKyNlbHNl CisJbW92IHI0LHIwCisJc3VicyByNCwjNAorCWxkciByMyxbcjRdCisJbHNscyByNCxyMSwjMgor CWxkciByNCxbcjMscjRdCisJc3VicyByMCxyNCxyMAorI2VuZGlmCiAJYWRkIHIwLHIwLHIyICAg IC8vIHIwID0gcjNbcjFdLXIwK3IyCiAjaWYgX19BUk1fQVJDSCA+PSA1Ci0JcG9wIHtyMixyMyxp cCxwY30KKwlwb3Age3IyLHIzLHI0LHBjfQogI2Vsc2UKLQlwb3Age3IyLHIzLGlwLGxyfQorCXBv cCB7cjIscjMscjQsbHJ9CiAJYnggbHIKICNlbmRpZgogCiAjaWYgKChfX0FSTV9BUkNIXzZLX18g fHwgX19BUk1fQVJDSF82S1pfXyB8fCBfX0FSTV9BUkNIXzZaS19fKSAmJiAhX190aHVtYl9fKSBc Ci0gfHwgX19BUk1fQVJDSF83QV9fIHx8IF9fQVJNX0FSQ0hfN1JfXyB8fCBfX0FSTV9BUkNIID49 IDcKKyB8fCBfX0FSTV9BUkNIXzdBX18gfHwgX19BUk1fQVJDSF83Ul9fIHx8IChfX0FSTV9BUkNI ID49IDcgJiYgX19BUk1fQVJDSF9QUk9GSUxFICE9ICdNJykKICNlbHNlCiAJLmFsaWduIDIKIDE6 CS53b3JkIF9fYV9nZXR0cF9wdHIgLSAyYgpkaWZmIC0tZ2l0IGEvc3JjL3Byb2Nlc3MvYXJtL3Zm b3JrLnMgYi9zcmMvcHJvY2Vzcy9hcm0vdmZvcmsucwppbmRleCBkN2VjNDFiMy4uYjZmMDI2MGUg MTAwNjQ0Ci0tLSBhL3NyYy9wcm9jZXNzL2FybS92Zm9yay5zCisrKyBiL3NyYy9wcm9jZXNzL2Fy bS92Zm9yay5zCkBAIC0zLDcgKzMsNyBAQAogLnR5cGUgdmZvcmssJWZ1bmN0aW9uCiB2Zm9yazoK IAltb3YgaXAsIHI3Ci0JbW92IHI3LCAxOTAKKwltb3ZzIHI3LCAxOTAKIAlzdmMgMAogCW1vdiBy NywgaXAKIAkuaGlkZGVuIF9fc3lzY2FsbF9yZXQKZGlmZiAtLWdpdCBhL3NyYy9zZXRqbXAvYXJt L2xvbmdqbXAuUyBiL3NyYy9zZXRqbXAvYXJtL2xvbmdqbXAuUwppbmRleCA4ZGYwYjgxOS4uYTI2 NDFiOTIgMTAwNjQ0Ci0tLSBhL3NyYy9zZXRqbXAvYXJtL2xvbmdqbXAuUworKysgYi9zcmMvc2V0 am1wL2FybS9sb25nam1wLlMKQEAgLTcsMTYgKzcsMzIgQEAgX2xvbmdqbXA6CiBsb25nam1wOgog CW1vdiBpcCxyMAogCW1vdnMgcjAscjEKKyNpZiBkZWZpbmVkKF9fdGh1bWIyX18pICB8fCAgIWRl ZmluZWQoX190aHVtYl9fKQogCW1vdmVxIHIwLCMxCiAJbGRtaWEgaXAhLCB7djEsdjIsdjMsdjQs djUsdjYsc2wsZnB9CiAJbGRtaWEgaXAhLCB7cjIsbHJ9CiAJbW92IHNwLHIyCi0KKyNlbHNlCisJ Ym5lIDRmCisJbW92cyByMCwjMQorNDoJbW92IHIxLGlwCisJYWRkcyByMSwjMTYKKwlsZG1pYSBy MSEsIHtyMi1yN30KKwltb3YgbHIscjcKKwltb3Ygc3AscjYKKwltb3YgcjExLHI1CisJbW92IHIx MCxyNAorCW1vdiByOSxyMworCW1vdiByOCxyMgorCW1vdiBpcCxyMQorCXN1YnMgcjEsIzQwCisJ bGRtaWEgcjEhLCB7cjQtcjd9CisjZW5kaWYKIAlhZHIgcjEsMWYKIAlsZHIgcjIsMWYKIAlsZHIg cjEsW3IxLHIyXQogCi0jaWYgX19BUk1fQVJDSCA8IDgKKyNpZiBfX0FSTV9BUkNIX1BST0ZJTEUg IT0gJ00nICYmIF9fQVJNX0FSQ0ggPCA4CiAJdHN0IHIxLCMweDI2MAogCWJlcSAzZgogCS8vIEhX Q0FQX0FSTV9GUEEKQEAgLTI0LDE0ICs0MCwxNSBAQCBsb25nam1wOgogCWJlcSAyZgogCWxkYyBw MiwgY3I0LCBbaXBdLCAjNDgKICNlbmRpZgotMjoJdHN0IHIxLCMweDQwCisyOgltb3ZzIHIyLCMw eDQwCisJdHN0IHIxLHIyCiAJYmVxIDJmCiAJLmZwdSB2ZnAKIAl2bGRtaWEgaXAhLCB7ZDgtZDE1 fQogCS5mcHUgc29mdHZmcAogCS5lYWJpX2F0dHJpYnV0ZSAxMCwgMAogCS5lYWJpX2F0dHJpYnV0 ZSAyNywgMAotI2lmIF9fQVJNX0FSQ0ggPCA4CisjaWYgX19BUk1fQVJDSF9QUk9GSUxFICE9ICdN JyAmJiBfX0FSTV9BUkNIIDwgOAogCS8vIEhXQ0FQX0FSTV9JV01NWFQKIDI6CXRzdCByMSwjMHgy MDAKIAliZXEgM2YKZGlmZiAtLWdpdCBhL3NyYy9zZXRqbXAvYXJtL3NldGptcC5TIGIvc3JjL3Nl dGptcC9hcm0vc2V0am1wLlMKaW5kZXggNDU3MzFkMjIuLjdjYTUxODg2IDEwMDY0NAotLS0gYS9z cmMvc2V0am1wL2FybS9zZXRqbXAuUworKysgYi9zcmMvc2V0am1wL2FybS9zZXRqbXAuUwpAQCAt OCwxNyArOCwyOCBAQAogX19zZXRqbXA6CiBfc2V0am1wOgogc2V0am1wOgorI2lmIGRlZmluZWQo X190aHVtYjJfXykgIHx8ICAhZGVmaW5lZChfX3RodW1iX18pCiAJbW92IGlwLHIwCiAJc3RtaWEg aXAhLHt2MSx2Mix2Myx2NCx2NSx2NixzbCxmcH0KIAltb3YgcjIsc3AKIAlzdG1pYSBpcCEse3Iy LGxyfQotCW1vdiByMCwjMAotCisjZWxzZQorCXN0bWlhIHIwISx7cjQtcjd9CisJbW92IHIxLHI4 CisJbW92IHIyLHI5CisJbW92IHIzLHIxMAorCW1vdiByNCxyMTEKKwltb3YgcjUsc3AKKwltb3Yg cjYsbHIKKwlzdG1pYSByMCEse3IxLXI2fQorCW1vdiBpcCxyMAorI2VuZGlmCisJbW92cyByMCwj MAogCWFkciByMSwxZgogCWxkciByMiwxZgogCWxkciByMSxbcjEscjJdCiAKLSNpZiBfX0FSTV9B UkNIIDwgOAorI2lmIF9fQVJNX0FSQ0hfUFJPRklMRSAhPSAnTScgJiYgX19BUk1fQVJDSCA8IDgK IAl0c3QgcjEsIzB4MjYwCiAJYmVxIDNmCiAJLy8gSFdDQVBfQVJNX0ZQQQpAQCAtMjYsMTQgKzM3 LDE1IEBAIHNldGptcDoKIAliZXEgMmYKIAlzdGMgcDIsIGNyNCwgW2lwXSwgIzQ4CiAjZW5kaWYK LTI6CXRzdCByMSwjMHg0MAorMjoJbW92cyByMiwjMHg0MAorCXRzdCByMSxyMgogCWJlcSAyZgog CS5mcHUgdmZwCiAJdnN0bWlhIGlwISwge2Q4LWQxNX0KIAkuZnB1IHNvZnR2ZnAKIAkuZWFiaV9h dHRyaWJ1dGUgMTAsIDAKIAkuZWFiaV9hdHRyaWJ1dGUgMjcsIDAKLSNpZiBfX0FSTV9BUkNIIDwg OAorI2lmIF9fQVJNX0FSQ0hfUFJPRklMRSAhPSAnTScgJiYgX19BUk1fQVJDSCA8IDgKIAkvLyBI V0NBUF9BUk1fSVdNTVhUCiAyOgl0c3QgcjEsIzB4MjAwCiAJYmVxIDNmCmRpZmYgLS1naXQgYS9z cmMvc2lnbmFsL2FybS9yZXN0b3JlLnMgYi9zcmMvc2lnbmFsL2FybS9yZXN0b3JlLnMKaW5kZXgg ZmIwODZkOWIuLjJiNzYyMWIxIDEwMDY0NAotLS0gYS9zcmMvc2lnbmFsL2FybS9yZXN0b3JlLnMK KysrIGIvc3JjL3NpZ25hbC9hcm0vcmVzdG9yZS5zCkBAIC00LDEyICs0LDEyIEBACiAuaGlkZGVu IF9fcmVzdG9yZQogLnR5cGUgX19yZXN0b3JlLCVmdW5jdGlvbgogX19yZXN0b3JlOgotCW1vdiBy NywjMTE5CisJbW92cyByNywjMTE5CiAJc3dpIDB4MAogCiAuZ2xvYmFsIF9fcmVzdG9yZV9ydAog LmhpZGRlbiBfX3Jlc3RvcmVfcnQKIC50eXBlIF9fcmVzdG9yZV9ydCwlZnVuY3Rpb24KIF9fcmVz dG9yZV9ydDoKLQltb3YgcjcsIzE3MworCW1vdnMgcjcsIzE3MwogCXN3aSAweDAKZGlmZiAtLWdp dCBhL3NyYy9zaWduYWwvYXJtL3NpZ3NldGptcC5zIGIvc3JjL3NpZ25hbC9hcm0vc2lnc2V0am1w LnMKaW5kZXggNjllYmJmNDkuLjhlZjUxZGUzIDEwMDY0NAotLS0gYS9zcmMvc2lnbmFsL2FybS9z aWdzZXRqbXAucworKysgYi9zcmMvc2lnbmFsL2FybS9zaWdzZXRqbXAucwpAQCAtOSwxNiArOSwy MCBAQCBfX3NpZ3NldGptcDoKIAlibmUgMWYKIAliIHNldGptcAogCi0xOglzdHIgbHIsW3IwLCMy NTZdCi0Jc3RyIHI0LFtyMCwjMjYwKzhdCisxOgltb3YgcjIsbHIKKwlhZGRzIHIwLCMyMDAKKwlz dHIgcjIsW3IwLCM1Nl0KKwlzdHIgcjQsW3IwLCM2MCs4XQogCW1vdiByNCxyMAogCiAJYmwgc2V0 am1wCiAKIAltb3YgcjEscjAKIAltb3YgcjAscjQKLQlsZHIgbHIsW3IwLCMyNTZdCi0JbGRyIHI0 LFtyMCwjMjYwKzhdCisJbGRyIHIyLFtyMCwjNTZdCisJbW92IGxyLHIyCisJbGRyIHI0LFtyMCwj NjArOF0KKwlzdWJzIHIwLCMyMDAKIAogLmhpZGRlbiBfX3NpZ3NldGptcF90YWlsCiAJYiBfX3Np Z3NldGptcF90YWlsCmRpZmYgLS1naXQgYS9zcmMvc3RyaW5nL2FybS9tZW1jcHkuUyBiL3NyYy9z dHJpbmcvYXJtL21lbWNweS5TCmluZGV4IDg2OWUzNDQ4Li4yZWIyOGVlYyAxMDA2NDQKLS0tIGEv c3JjL3N0cmluZy9hcm0vbWVtY3B5LlMKKysrIGIvc3JjL3N0cmluZy9hcm0vbWVtY3B5LlMKQEAg LTQzLDYgKzQzLDggQEAKICAqIGJ1aWxkaW5nIGFzIHRodW1iIDIgYW5kIGJpZy1lbmRpYW4uCiAg Ki8KIAorI2lmIGRlZmluZWQoX190aHVtYjJfXykgIHx8ICAhZGVmaW5lZChfX3RodW1iX18pCisK IC5zeW50YXggdW5pZmllZAogCiAuZ2xvYmFsIG1lbWNweQpAQCAtNDc3LDMgKzQ3OSw0IEBAIGNv cHlfbGFzdF8zX2FuZF9yZXR1cm46CiAJbGRtZmQgICBzcCEsIHtyMCwgcjQsIGxyfQogCWJ4ICAg ICAgbHIKIAorI2VuZGlmIC8qIGRlZmluZWQoX190aHVtYjJfXykgIHx8ICAhZGVmaW5lZChfX3Ro dW1iX18pICovCmRpZmYgLS1naXQgYS9zcmMvc3RyaW5nL2FybS9tZW1jcHlfdGh1bWIxLmMgYi9z cmMvc3RyaW5nL2FybS9tZW1jcHlfdGh1bWIxLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg MDAwMDAwMDAuLmY4Y2EzZjEzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0cmluZy9hcm0vbWVt Y3B5X3RodW1iMS5jCkBAIC0wLDAgKzEsNSBAQAorI2lmIGRlZmluZWQoX190aHVtYl9fKSAgJiYg ICFkZWZpbmVkKF9fdGh1bWIyX18pCisKKyNpbmNsdWRlICIuLi9tZW1jcHkuYyIKKworI2VuZGlm CmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL2FybS9fX3NldF90aHJlYWRfYXJlYS5jIGIvc3JjL3Ro cmVhZC9hcm0vX19zZXRfdGhyZWFkX2FyZWEuYwppbmRleCAwOWRlNjVhYS4uYTRmYjJjYmIgMTAw NjQ0Ci0tLSBhL3NyYy90aHJlYWQvYXJtL19fc2V0X3RocmVhZF9hcmVhLmMKKysrIGIvc3JjL3Ro cmVhZC9hcm0vX19zZXRfdGhyZWFkX2FyZWEuYwpAQCAtNiwyNyArNiw1NCBAQAogI2RlZmluZSBI V0NBUF9UTFMgKDEgPDwgMTUpCiAKIGV4dGVybiBoaWRkZW4gY29uc3QgdW5zaWduZWQgY2hhcgot CV9fYV9iYXJyaWVyX29sZGt1c2VyW10sIF9fYV9iYXJyaWVyX3Y2W10sIF9fYV9iYXJyaWVyX3Y3 W10sCi0JX19hX2Nhc192NltdLCBfX2FfY2FzX3Y3W10sCi0JX19hX2dldHRwX2NwMTVbXTsKKwlf X2FfYmFycmllcl9vbGRrdXNlcltdLCBfX2FfYmFycmllcl92NltdLCBfX2FfYmFycmllcl92N1td LCBfX2FfYmFycmllcl9tW10sCisJX19hX2Nhc192NltdLCBfX2FfY2FzX3Y3W10sIF9fYV9jYXNf bVtdLCBfX2FfY2FzX2ludG1hc2tfbVtdLAorCV9fYV9nZXR0cF9jcDE1W10sIF9fYV9nZXR0cF9j cDE1X21bXTsKIAogI2RlZmluZSBfX2FfYmFycmllcl9rdXNlciAweGZmZmYwZmEwCiAjZGVmaW5l IF9fYV9iYXJyaWVyX29sZGt1c2VyICh1aW50cHRyX3QpX19hX2JhcnJpZXJfb2xka3VzZXIKICNk ZWZpbmUgX19hX2JhcnJpZXJfdjYgKHVpbnRwdHJfdClfX2FfYmFycmllcl92NgogI2RlZmluZSBf X2FfYmFycmllcl92NyAodWludHB0cl90KV9fYV9iYXJyaWVyX3Y3CisjZGVmaW5lIF9fYV9iYXJy aWVyX20gKHVpbnRwdHJfdClfX2FfYmFycmllcl9tCiAKICNkZWZpbmUgX19hX2Nhc19rdXNlciAw eGZmZmYwZmMwCiAjZGVmaW5lIF9fYV9jYXNfdjYgKHVpbnRwdHJfdClfX2FfY2FzX3Y2CiAjZGVm aW5lIF9fYV9jYXNfdjcgKHVpbnRwdHJfdClfX2FfY2FzX3Y3CisjZGVmaW5lIF9fYV9jYXNfbSAo dWludHB0cl90KV9fYV9jYXNfbQorI2RlZmluZSBfX2FfY2FzX2ludG1hc2tfbSAodWludHB0cl90 KV9fYV9jYXNfaW50bWFza19tCiAKICNkZWZpbmUgX19hX2dldHRwX2t1c2VyIDB4ZmZmZjBmZTAK ICNkZWZpbmUgX19hX2dldHRwX2NwMTUgKHVpbnRwdHJfdClfX2FfZ2V0dHBfY3AxNQorI2RlZmlu ZSBfX2FfZ2V0dHBfY3AxNV9tICh1aW50cHRyX3QpX19hX2dldHRwX2NwMTVfbQogCiBleHRlcm4g aGlkZGVuIHVpbnRwdHJfdCBfX2FfYmFycmllcl9wdHIsIF9fYV9jYXNfcHRyLCBfX2FfZ2V0dHBf cHRyOwogCitzdGF0aWMgbG9uZyBfX2FfZ2V0dHBfc3lzY2FsbCh2b2lkKQoreworCXJldHVybiBf X3N5c2NhbGwoX19BUk1fTlJfZ2V0X3Rscyk7Cit9CisKIGludCBfX3NldF90aHJlYWRfYXJlYSh2 b2lkICpwKQogewotI2lmICFfX0FSTV9BUkNIXzdBX18gJiYgIV9fQVJNX0FSQ0hfN1JfXyAmJiBf X0FSTV9BUkNIIDwgNworI2lmIF9fQVJNX0FSQ0hfUFJPRklMRSA9PSAnTScKKwlfX2FfY2FzX3B0 ciA9IF9fYV9jYXNfbTsKKwlfX2FfYmFycmllcl9wdHIgPSBfX2FfYmFycmllcl9tOworCisJaWYg KF9faHdjYXAgJiBIV0NBUF9UTFMpIHsKKwkJX19hX2dldHRwX3B0ciA9IF9fYV9nZXR0cF9jcDE1 X207CisJfSBlbHNlIHsKKwkJc2l6ZV90ICphdXg7CisJCV9fYV9nZXR0cF9wdHIgPSBfX2FfZ2V0 dHBfc3lzY2FsbDsKKwkJZm9yIChhdXg9bGliYy5hdXh2OyAqYXV4OyBhdXgrPTIpIHsKKwkJCWlm ICgqYXV4ICE9IEFUX1BMQVRGT1JNKSBjb250aW51ZTsKKwkJCWNvbnN0IGNoYXIgKnMgPSAodm9p ZCAqKWF1eFsxXTsKKwkJCWlmIChzWzBdPT0ndicgJiYgc1sxXT09JzYnKSB7CisJCQkJX19hX2Nh c19wdHIgPSBfX2FfY2FzX2ludG1hc2tfbTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKyNl bGlmICFfX0FSTV9BUkNIXzdBX18gJiYgIV9fQVJNX0FSQ0hfN1JfXyAmJiBfX0FSTV9BUkNIIDwg NwogCWlmIChfX2h3Y2FwICYgSFdDQVBfVExTKSB7CiAJCXNpemVfdCAqYXV4OwogCQlfX2FfY2Fz X3B0ciA9IF9fYV9jYXNfdjc7CmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL2FybS9fX3VubWFwc2Vs Zi5jIGIvc3JjL3RocmVhZC9hcm0vX191bm1hcHNlbGYuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp bmRleCAwMDAwMDAwMC4uZDIyYTc2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhyZWFkL2Fy bS9fX3VubWFwc2VsZi5jCkBAIC0wLDAgKzEsMjEgQEAKKyNpZiBfX0FSTV9BUkNIX1BST0ZJTEUg IT0gJ00nCisKKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCIKKwordm9pZCBfX3VubWFwc2VsZih2 b2lkICpiYXNlLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZWdpc3RlciB2b2lkICpyMCBfX2FzbV9fKCJy MCIpID0gYmFzZTsKKwlyZWdpc3RlciBzaXplX3QgcjEgX19hc21fXygicjEiKSA9IHNpemU7CisJ X19hc21fXyBfX3ZvbGF0aWxlX18gKAorCSIJbW92cyByNywjOTEgXG4iCisJIglzdmMgMCBcbiIK KwkiCW1vdnMgcjcsIzEgXG4iCisJIglzdmMgMCBcbiIKKwk6OiAiciIocjApLCAiciIocjEpKTsK K30KKworI2Vsc2UKKworI2luY2x1ZGUgIi4uL19fdW5tYXBzZWxmLmMiCisKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvc3JjL3RocmVhZC9hcm0vX191bm1hcHNlbGYucyBiL3NyYy90aHJlYWQvYXJtL19f dW5tYXBzZWxmLnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YzJkMDdiLi4wMDAw MDAwMAotLS0gYS9zcmMvdGhyZWFkL2FybS9fX3VubWFwc2VsZi5zCisrKyAvZGV2L251bGwKQEAg LTEsOSArMCwwIEBACi0uc3ludGF4IHVuaWZpZWQKLS50ZXh0Ci0uZ2xvYmFsIF9fdW5tYXBzZWxm Ci0udHlwZSAgIF9fdW5tYXBzZWxmLCVmdW5jdGlvbgotX191bm1hcHNlbGY6Ci0JbW92IHI3LCM5 MQotCXN2YyAwCi0JbW92IHI3LCMxCi0Jc3ZjIDAKZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvYXJt L2F0b21pY3MucyBiL3NyYy90aHJlYWQvYXJtL2F0b21pY3MucwppbmRleCBkYTUwNTA4ZC4uNWZk NzdhZDkgMTAwNjQ0Ci0tLSBhL3NyYy90aHJlYWQvYXJtL2F0b21pY3MucworKysgYi9zcmMvdGhy ZWFkL2FybS9hdG9taWNzLnMKQEAgLTExLDYgKzExLDggQEAgX19hX2JhcnJpZXJfZHVtbXk6CiAu aGlkZGVuIF9fYV9iYXJyaWVyX29sZGt1c2VyCiAudHlwZSBfX2FfYmFycmllcl9vbGRrdXNlciwl ZnVuY3Rpb24KIF9fYV9iYXJyaWVyX29sZGt1c2VyOgorCS5hcmNoIGFybXY2CisJLmFybQogCXB1 c2gge3IwLHIxLHIyLHIzLGlwLGxyfQogCW1vdiByMSxyMAogCW1vdiByMixzcApAQCAtMjUsNiAr MjcsNyBAQCBfX2FfYmFycmllcl9vbGRrdXNlcjoKIC50eXBlIF9fYV9iYXJyaWVyX3Y2LCVmdW5j dGlvbgogX19hX2JhcnJpZXJfdjY6CiAJLmFyY2ggYXJtdjZ0MgorCS5hcm0KIAltY3IgcDE1LDAs cjAsYzcsYzEwLDUKIAlieCBscgogCkBAIC0zMywyNCArMzYsMzggQEAgX19hX2JhcnJpZXJfdjY6 CiAudHlwZSBfX2FfYmFycmllcl92NywlZnVuY3Rpb24KIF9fYV9iYXJyaWVyX3Y3OgogCS5hcmNo IGFybXY3LWEKKwkuYXJtCiAJZG1iIGlzaAogCWJ4IGxyCiAKKy5nbG9iYWwgX19hX2JhcnJpZXJf bQorLmhpZGRlbiBfX2FfYmFycmllcl9tCisudHlwZSBfX2FfYmFycmllcl9tLCVmdW5jdGlvbgor X19hX2JhcnJpZXJfbToKKwkudGh1bWIKKwkuYXJjaCBhcm12Ni1tCisJZG1iCisJYnggbHIKKwog Lmdsb2JhbCBfX2FfY2FzX2R1bW15CiAuaGlkZGVuIF9fYV9jYXNfZHVtbXkKIC50eXBlIF9fYV9j YXNfZHVtbXksJWZ1bmN0aW9uCiBfX2FfY2FzX2R1bW15OgorCS5hcmNoIGFybXY3LWEKKwkuYXJt CiAJbW92IHIzLHIwCiAJbGRyIHIwLFtyMl0KIAlzdWJzIHIwLHIzLHIwCi0Jc3RyZXEgcjEsW3Iy XQotCWJ4IGxyCisJYm5lIDFmCisJc3RyIHIxLFtyMl0KKzE6CWJ4IGxyCiAKIC5nbG9iYWwgX19h X2Nhc192NgogLmhpZGRlbiBfX2FfY2FzX3Y2CiAudHlwZSBfX2FfY2FzX3Y2LCVmdW5jdGlvbgog X19hX2Nhc192NjoKIAkuYXJjaCBhcm12NnQyCisJLmFybQogCW1vdiByMyxyMAogCW1jciBwMTUs MCxyMCxjNyxjMTAsNQogMToJbGRyZXggcjAsW3IyXQpAQCAtNjYsNiArODMsNyBAQCBfX2FfY2Fz X3Y2OgogLnR5cGUgX19hX2Nhc192NywlZnVuY3Rpb24KIF9fYV9jYXNfdjc6CiAJLmFyY2ggYXJt djctYQorCS5hcm0KIAltb3YgcjMscjAKIAlkbWIgaXNoCiAxOglsZHJleCByMCxbcjJdCkBAIC03 NiwxMCArOTQsNTUgQEAgX19hX2Nhc192NzoKIAlkbWIgaXNoCiAJYnggbHIKIAorLmdsb2JhbCBf X2FfY2FzX20KKy5oaWRkZW4gX19hX2Nhc19tCisudHlwZSBfX2FfY2FzX20sJWZ1bmN0aW9uCitf X2FfY2FzX206CisJLnRodW1iCisJLmFyY2ggYXJtdjctbQorCW1vdiByMyxyMAorCWRtYgorMToJ bGRyZXggcjAsW3IyXQorCXN1YnMgcjAscjMscjAKKwlibmUgMWIKKwlzdHJleCByMCxyMSxbcjJd CisJdHN0IHIwLHIwCisJYm5lIDFiCisJZG1iCisJYnggbHIKKworLmdsb2JhbCBfX2FfY2FzX2lu dG1hc2tfbQorLmhpZGRlbiBfX2FfY2FzX2ludG1hc2tfbQorLnR5cGUgX19hX2Nhc19pbnRtYXNr X20sJWZ1bmN0aW9uCitfX2FfY2FzX2ludG1hc2tfbToKKwkudGh1bWIKKwkuYXJjaCBhcm12Ni1t CisJbW92IHIzLHIwCisJZG1iCisJY3BzaWQgaQorMToJbGRyIHIwLFtyMl0KKwlzdWJzIHIwLHIz LHIwCisJYm5lIDFiCisJc3RyIHIxLFtyMl0KKwljcHNpZSBpCisJZG1iCisJYnggbHIKKwogLmds b2JhbCBfX2FfZ2V0dHBfY3AxNQogLmhpZGRlbiBfX2FfZ2V0dHBfY3AxNQogLnR5cGUgX19hX2dl dHRwX2NwMTUsJWZ1bmN0aW9uCiBfX2FfZ2V0dHBfY3AxNToKKwkuYXJjaCBhcm12NgorCS5hcm0K KwltcmMgcDE1LDAscjAsYzEzLGMwLDMKKwlieCBscgorCisuZ2xvYmFsIF9fYV9nZXR0cF9jcDE1 X20KKy5oaWRkZW4gX19hX2dldHRwX2NwMTVfbQorLnR5cGUgX19hX2dldHRwX2NwMTVfbSwlZnVu Y3Rpb24KK19fYV9nZXR0cF9jcDE1X206CisJLnRodW1iCisJLmFyY2ggYXJtdjctbQogCW1yYyBw MTUsMCxyMCxjMTMsYzAsMwogCWJ4IGxyCiAKZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvYXJtL2Ns b25lLnMgYi9zcmMvdGhyZWFkL2FybS9jbG9uZS5zCmluZGV4IGJiMDk2NWRhLi4zM2MyZTU5YiAx MDA2NDQKLS0tIGEvc3JjL3RocmVhZC9hcm0vY2xvbmUucworKysgYi9zcmMvdGhyZWFkL2FybS9j bG9uZS5zCkBAIC00LDI0ICs0LDI2IEBACiAuaGlkZGVuIF9fY2xvbmUKIC50eXBlICAgX19jbG9u ZSwlZnVuY3Rpb24KIF9fY2xvbmU6Ci0Jc3RtZmQgc3AhLHtyNCxyNSxyNixyN30KLQltb3Ygcjcs IzEyMAorCXB1c2gge3I0LHI1LHI2LHI3fQorCW1vdnMgcjcsIzEyMAogCW1vdiByNixyMwogCW1v diByNSxyMAogCW1vdiByMCxyMgotCWFuZCByMSxyMSwjLTE2CisJbW92cyByMiwjMAorCXN1YnMg cjIsIzE2CisJYW5kcyByMSxyMgogCWxkciByMixbc3AsIzE2XQogCWxkciByMyxbc3AsIzIwXQog CWxkciByNCxbc3AsIzI0XQogCXN2YyAwCiAJdHN0IHIwLHIwCiAJYmVxIDFmCi0JbGRtZmQgc3Ah LHtyNCxyNSxyNixyN30KKwlwb3Age3I0LHI1LHI2LHI3fQogCWJ4IGxyCiAKIDE6CW1vdiByMCxy NgogCWJsIDNmCi0yOgltb3YgcjcsIzEKKzI6CW1vdnMgcjcsIzEKIAlzdmMgMAogCWIgMmIKIApk aWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9hcm0vc3lzY2FsbF9jcC5zIGIvc3JjL3RocmVhZC9hcm0v c3lzY2FsbF9jcC5zCmluZGV4IGU2MDdkZDQyLi40MjFlNjRmNCAxMDA2NDQKLS0tIGEvc3JjL3Ro cmVhZC9hcm0vc3lzY2FsbF9jcC5zCisrKyBiL3NyYy90aHJlYWQvYXJtL3N5c2NhbGxfY3AucwpA QCAtMTEsNyArMTEsNyBAQAogLnR5cGUgX19zeXNjYWxsX2NwX2FzbSwlZnVuY3Rpb24KIF9fc3lz Y2FsbF9jcF9hc206CiAJbW92IGlwLHNwCi0Jc3RtZmQgc3AhLHtyNCxyNSxyNixyN30KKwlwdXNo IHtyNCxyNSxyNixyN30KIF9fY3BfYmVnaW46CiAJbGRyIHIwLFtyMF0KIAljbXAgcjAsIzAKQEAg LTE5LDExICsxOSwxMiBAQCBfX2NwX2JlZ2luOgogCW1vdiByNyxyMQogCW1vdiByMCxyMgogCW1v diByMSxyMwotCWxkbWZkIGlwLHtyMixyMyxyNCxyNSxyNn0KKwltb3YgcjIsaXAKKwlsZG1mZCBy Mix7cjIscjMscjQscjUscjZ9CiAJc3ZjIDAKIF9fY3BfZW5kOgotCWxkbWZkIHNwISx7cjQscjUs cjYscjd9CisJcG9wIHtyNCxyNSxyNixyN30KIAlieCBscgogX19jcF9jYW5jZWw6Ci0JbGRtZmQg c3AhLHtyNCxyNSxyNixyN30KKwlwb3Age3I0LHI1LHI2LHI3fQogCWIgX19jYW5jZWwK --0000000000006a4c9405b8d0d373--