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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 19C8EC433F5 for ; Thu, 18 Nov 2021 18:51:28 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id D44BC61AFD for ; Thu, 18 Nov 2021 18:51:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org D44BC61AFD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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=idPmB/juqLiHLX6MldLaT2E6a+67Nuc90KkWN09GIdc=; b=AYRfTV/yxNlNoO K537K0UE72gHr31CYkzQ5fGWgyh/yYWAJWeVMUd5vOzcI3mKsIARWp7P+l6RETmmHHkHt7Va2clfL uI2AQXnz27W7TnCdD8fGsCr7Rv9G+XLrTNrdSGOh1ZtS64QfnppXE59xtzBEgPOm5LwaqmDXYHzUN Vamo1H4SF7D28vRRXcWsyzRKzDtrIfdTc/6toZ0c+K5NmoP1Ee9xnZTB3Mi5PRUM4qLdWh/hmjJ2a mwkKfxcSMof0EuC5z8OfFNT5XDjRwzbSPhFYQN6Y/BdafQtKLtgQR6zE52MuRZ498cUDusAuMkvuA EFxYgBcz/MsEnajoul3A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mnmTk-008e3k-BE; Thu, 18 Nov 2021 18:49:48 +0000 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mnmR7-008cwy-7X for linux-arm-kernel@lists.infradead.org; Thu, 18 Nov 2021 18:47:07 +0000 Received: by mail-wm1-x32f.google.com with SMTP id p3-20020a05600c1d8300b003334fab53afso8451161wms.3 for ; Thu, 18 Nov 2021 10:47:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hk3bzlKoxpZyDrrCE6PtbaVaXFgnlPYcxwsdlufAHz0=; b=I43S0rspR+9J8s4VPXSwP0qyAG5XgbNXHbzEd835vMuI7wuTMavLxF7tWdRLqOMS0y e59iO9k++LXYhBppdh31y+jrY77McfWBpeFfblKi+SHAMwp3O9C6UfOFH2vWzw99n0W2 Fdw7EYaEqtfZtIObXsnYWMYOdEn3gM0oiW0glfAzGKRuEETBfs0Tx1h3d/14eoL0Ah5G FGAOyCY3DSA6KazwWqVGE8YkG9pPRxJ1OhHQDVURFTtMPz37nA1d3MZV7ZQOjebdFXu/ 2TNnrkru4w3C8CiMDUm+zUGlIZyl5WZpJOINtNhePY8GX7fsplROp928dF2Qr7yKuRlB IE/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hk3bzlKoxpZyDrrCE6PtbaVaXFgnlPYcxwsdlufAHz0=; b=Yaf/Un+Ye1yawPIrQwXp4U12J8iwa6jRSnkQ14auxpfF87wmBrfevaJ4hYGmRQkI42 Lu2QoyEc5gAbBXhpybaqWeGtAru9xBYkOvpPAjBBLIblJ/0JUzDosdoHTPKPxLHu/XKg 5cyyE31gABvfL4Kaluoxt66/F5YirrGjoZ1YESoeF9trrNuANF8PmiNeRjLasMKmYSF6 /xvv2EjiykM6U78gztL7N90jus90chxEgudAMkKuM3mEQ5xJYkRuq/tXXrSyZgDyszlB P6YmsR2ByHgc/3DP48CPoxoT3tAfEJ/7mp0woEk4hFzsreQOv55LU916gUV9PHBCEB6L A+NA== X-Gm-Message-State: AOAM530D89yYvuAlGAGXb6ziZFZDKk0rUBxnhHOQDOc83i1zUj8R0P0A 6geQZvjE9rF+H3zf3Mu2EWqufA== X-Google-Smtp-Source: ABdhPJwenmIb9vjZ9kptMGO/3EYwW5+5ywUMVFwd1C+3xnaj5wrhMgI/Yra/+F6z1kZFHXsAdH4uSw== X-Received: by 2002:a7b:c257:: with SMTP id b23mr12531384wmj.67.1637261223275; Thu, 18 Nov 2021 10:47:03 -0800 (PST) Received: from zen.linaroharston ([51.148.130.216]) by smtp.gmail.com with ESMTPSA id s8sm697055wra.9.2021.11.18.10.46.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Nov 2021 10:46:55 -0800 (PST) Received: from zen.lan (localhost [127.0.0.1]) by zen.linaroharston (Postfix) with ESMTP id 64ADB1FF9C; Thu, 18 Nov 2021 18:46:50 +0000 (GMT) From: =?UTF-8?q?Alex=20Benn=C3=A9e?= To: kvm@vger.kernel.org Cc: idan.horowitz@gmail.com, qemu-arm@nongnu.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, christoffer.dall@arm.com, maz@kernel.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Timothy B . Terriberry" , Andrew Jones Subject: [kvm-unit-tests PATCH v8 05/10] lib: add isaac prng library from CCAN Date: Thu, 18 Nov 2021 18:46:45 +0000 Message-Id: <20211118184650.661575-6-alex.bennee@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211118184650.661575-1-alex.bennee@linaro.org> References: <20211118184650.661575-1-alex.bennee@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211118_104705_366645_49DF556D X-CRM114-Status: GOOD ( 25.08 ) 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 SXQncyBvZnRlbiB1c2VmdWwgdG8gaW50cm9kdWNlIHNvbWUgc29ydCBvZiByYW5kb20gdmFyaWF0 aW9uIHdoZW4KdGVzdGluZyBzZXZlcmFsIHJhY2luZyBDUFUgY29uZGl0aW9ucy4gSW5zdGVhZCBv ZiBlYWNoIHRlc3QgaW1wbGVtZW50aW5nCnNvbWUgaGFsZi1hcnNlZCBQUk5HIGJyaW5nIGluIGEg YSBkZWNlbnQgb25lIHdoaWNoIGhhcyBnb29kIHN0YXRpc3RpY2FsCnJhbmRvbW5lc3MuIE9idmlv dXNseSBpdCBpcyBkZXRlcm1pbmlzdGljIGZvciBhIGdpdmVuIHNlZWQgdmFsdWUgd2hpY2gKaXMg bGlrZWx5IHRoZSBiZWhhdmlvdXIgeW91IHdhbnQuCgpJJ3ZlIHB1bGxlZCBpbiB0aGUgSVNBQUMg bGlicmFyeSBmcm9tIENDQU46CgogICAgaHR0cDovL2Njb2RlYXJjaGl2ZS5uZXQvaW5mby9pc2Fh Yy5odG1sCgpJIHNoYXZlZCBvZmYgdGhlIGZsb2F0IHJlbGF0ZWQgc3R1ZmYgd2hpY2ggaXMgbGVz cyB1c2VmdWwgZm9yIHVuaXQKdGVzdGluZyBhbmQgcmUtaW5kZW50ZWQgdG8gZml0IHRoZSBzdHls ZS4gVGhlIG9yaWdpbmFsIGxpY2Vuc2Ugd2FzCkNDMCAoUHVibGljIERvbWFpbikgd2hpY2ggaXMg Y29tcGF0aWJsZSB3aXRoIHRoZSBMR1BMIHYyIG9mCmt2bS11bml0LXRlc3RzLgoKU2lnbmVkLW9m Zi1ieTogQWxleCBCZW5uw6llIDxhbGV4LmJlbm5lZUBsaW5hcm8ub3JnPgpDQzogVGltb3RoeSBC LiBUZXJyaWJlcnJ5IDx0dGVycmliZUB4aXBoLm9yZz4KQWNrZWQtYnk6IEFuZHJldyBKb25lcyA8 ZHJqb25lc0ByZWRoYXQuY29tPgotLS0KIGFybS9NYWtlZmlsZS5jb21tb24gfCAgIDEgKwogbGli L3BybmcuaCAgICAgICAgICB8ICA4MiArKysrKysrKysrKysrKysrKysrKysrCiBsaWIvcHJuZy5j ICAgICAgICAgIHwgMTYyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiAzIGZpbGVzIGNoYW5nZWQsIDI0NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliL3BybmcuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9wcm5nLmMKCmRpZmYgLS1naXQg YS9hcm0vTWFrZWZpbGUuY29tbW9uIGIvYXJtL01ha2VmaWxlLmNvbW1vbgppbmRleCAzODM4NWUw Li45OWJjZjNmIDEwMDY0NAotLS0gYS9hcm0vTWFrZWZpbGUuY29tbW9uCisrKyBiL2FybS9NYWtl ZmlsZS5jb21tb24KQEAgLTQ0LDYgKzQ0LDcgQEAgY2ZsYXRvYmpzICs9IGxpYi9wY2ktdGVzdGRl di5vCiBjZmxhdG9ianMgKz0gbGliL3ZpcnRpby5vCiBjZmxhdG9ianMgKz0gbGliL3ZpcnRpby1t bWlvLm8KIGNmbGF0b2JqcyArPSBsaWIvY2hyLXRlc3RkZXYubworY2ZsYXRvYmpzICs9IGxpYi9w cm5nLm8KIGNmbGF0b2JqcyArPSBsaWIvYXJtL2lvLm8KIGNmbGF0b2JqcyArPSBsaWIvYXJtL3Nl dHVwLm8KIGNmbGF0b2JqcyArPSBsaWIvYXJtL21tdS5vCmRpZmYgLS1naXQgYS9saWIvcHJuZy5o IGIvbGliL3BybmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjU3NzZk Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3BybmcuaApAQCAtMCwwICsxLDgyIEBACisvKgorICog UFJORyBIZWFkZXIKKyAqLworI2lmbmRlZiBfX1BSTkdfSF9fCisjZGVmaW5lIF9fUFJOR19IX18K KworIyBpbmNsdWRlIDxzdGRpbnQuaD4KKworCisKK3R5cGVkZWYgc3RydWN0IGlzYWFjX2N0eCBp c2FhY19jdHg7CisKKworCisvKlRoaXMgdmFsdWUgbWF5IGJlIGxvd2VyZWQgdG8gcmVkdWNlIG1l bW9yeSB1c2FnZSBvbiBlbWJlZGRlZCBwbGF0Zm9ybXMsIGF0CisgIHRoZSBjb3N0IG9mIHJlZHVj aW5nIHNlY3VyaXR5IGFuZCBpbmNyZWFzaW5nIGJpYXMuCisgIFF1b3RpbmcgQm9iIEplbmtpbnM6 ICJUaGUgY3VycmVudCBiZXN0IGd1ZXNzIGlzIHRoYXQgYmlhcyBpcyBkZXRlY3RhYmxlIGFmdGVy CisgIDIqKjM3IHZhbHVlcyBmb3IgW0lTQUFDX1NaX0xPR109MywgMioqNDUgZm9yIDQsIDIqKjUz IGZvciA1LCAyKio2MSBmb3IgNiwKKyAgMioqNjkgZm9yIDcsIGFuZCAyKio3NyB2YWx1ZXMgZm9y IFtJU0FBQ19TWl9MT0ddPTguIiovCisjZGVmaW5lIElTQUFDX1NaX0xPRyAgICAgICg4KQorI2Rl ZmluZSBJU0FBQ19TWiAgICAgICAgICAoMTw8SVNBQUNfU1pfTE9HKQorI2RlZmluZSBJU0FBQ19T RUVEX1NaX01BWCAoSVNBQUNfU1o8PDIpCisKKworCisvKklTQUFDIGlzIHRoZSBtb3N0IGFkdmFu Y2VkIG9mIGEgc2VyaWVzIG9mIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMKKyAgZGVz aWduZWQgYnkgUm9iZXJ0IEouIEplbmtpbnMgSnIuIGluIDE5OTYuCisgIGh0dHA6Ly93d3cuYnVy dGxlYnVydGxlLm5ldC9ib2IvcmFuZC9pc2FhYy5odG1sCisgIFRvIHF1b3RlOgorICBObyBlZmZp Y2llbnQgbWV0aG9kIGlzIGtub3duIGZvciBkZWR1Y2luZyB0aGVpciBpbnRlcm5hbCBzdGF0ZXMu CisgIElTQUFDIHJlcXVpcmVzIGFuIGFtb3J0aXplZCAxOC43NSBpbnN0cnVjdGlvbnMgdG8gcHJv ZHVjZSBhIDMyLWJpdCB2YWx1ZS4KKyAgVGhlcmUgYXJlIG5vIGN5Y2xlcyBpbiBJU0FBQyBzaG9y dGVyIHRoYW4gMioqNDAgdmFsdWVzLgorICBUaGUgZXhwZWN0ZWQgY3ljbGUgbGVuZ3RoIGlzIDIq KjgyOTUgdmFsdWVzLiovCitzdHJ1Y3QgaXNhYWNfY3R4eworCXVuc2lnbmVkIG47CisJdWludDMy X3QgcltJU0FBQ19TWl07CisJdWludDMyX3QgbVtJU0FBQ19TWl07CisJdWludDMyX3QgYTsKKwl1 aW50MzJfdCBiOworCXVpbnQzMl90IGM7Cit9OworCisKKy8qKgorICogaXNhYWNfaW5pdCAtIElu aXRpYWxpemUgYW4gaW5zdGFuY2Ugb2YgdGhlIElTQUFDIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9y LgorICogQF9jdHg6ICAgVGhlIGluc3RhbmNlIHRvIGluaXRpYWxpemUuCisgKiBAX3NlZWQ6ICBU aGUgc3BlY2lmaWVkIHNlZWQgYnl0ZXMuCisgKiAgICAgICAgICBUaGlzIG1heSBiZSBOVUxMIGlm IF9uc2VlZCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAqIEBfbnNlZWQ6IFRoZSBu dW1iZXIgb2YgYnl0ZXMgdG8gdXNlIGZvciB0aGUgc2VlZC4KKyAqICAgICAgICAgIElmIHRoaXMg aXMgZ3JlYXRlciB0aGFuIElTQUFDX1NFRURfU1pfTUFYLCB0aGUgZXh0cmEgYnl0ZXMgYXJlCisg KiAgICAgICAgICAgaWdub3JlZC4KKyAqLwordm9pZCBpc2FhY19pbml0KGlzYWFjX2N0eCAqX2N0 eCxjb25zdCB1bnNpZ25lZCBjaGFyICpfc2VlZCxpbnQgX25zZWVkKTsKKworLyoqCisgKiBpc2Fh Y19yZXNlZWQgLSBNaXggYSBuZXcgYmF0Y2ggb2YgZW50cm9weSBpbnRvIHRoZSBjdXJyZW50IHN0 YXRlLgorICogVG8gcmVzZXQgSVNBQUMgdG8gYSBrbm93biBzdGF0ZSwgY2FsbCBpc2FhY19pbml0 KCkgYWdhaW4gaW5zdGVhZC4KKyAqIEBfY3R4OiAgIFRoZSBpbnN0YW5jZSB0byByZXNlZWQuCisg KiBAX3NlZWQ6ICBUaGUgc3BlY2lmaWVkIHNlZWQgYnl0ZXMuCisgKiAgICAgICAgICBUaGlzIG1h eSBiZSBOVUxMIGlmIF9uc2VlZCBpcyB6ZXJvLgorICogQF9uc2VlZDogVGhlIG51bWJlciBvZiBi eXRlcyB0byB1c2UgZm9yIHRoZSBzZWVkLgorICogICAgICAgICAgSWYgdGhpcyBpcyBncmVhdGVy IHRoYW4gSVNBQUNfU0VFRF9TWl9NQVgsIHRoZSBleHRyYSBieXRlcyBhcmUKKyAqICAgICAgICAg ICBpZ25vcmVkLgorICovCit2b2lkIGlzYWFjX3Jlc2VlZChpc2FhY19jdHggKl9jdHgsY29uc3Qg dW5zaWduZWQgY2hhciAqX3NlZWQsaW50IF9uc2VlZCk7CisvKioKKyAqIGlzYWFjX25leHRfdWlu dDMyIC0gUmV0dXJuIHRoZSBuZXh0IHJhbmRvbSAzMi1iaXQgdmFsdWUuCisgKiBAX2N0eDogVGhl IElTQUFDIGluc3RhbmNlIHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSB3aXRoLgorICovCit1aW50MzJf dCBpc2FhY19uZXh0X3VpbnQzMihpc2FhY19jdHggKl9jdHgpOworLyoqCisgKiBpc2FhY19uZXh0 X3VpbnQgLSBVbmlmb3JtIHJhbmRvbSBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgZ2l2ZW4gdmFsdWUu CisgKiBAX2N0eDogVGhlIElTQUFDIGluc3RhbmNlIHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSB3aXRo LgorICogQF9uOiAgIFRoZSB1cHBlciBib3VuZCBvbiB0aGUgcmFuZ2Ugb2YgbnVtYmVycyByZXR1 cm5lZCAobm90IGluY2x1c2l2ZSkuCisgKiAgICAgICAgVGhpcyBtdXN0IGJlIGdyZWF0ZXIgdGhh biB6ZXJvIGFuZCBsZXNzIHRoYW4gMioqMzIuCisgKiAgICAgICAgVG8gcmV0dXJuIGludGVnZXJz IGluIHRoZSBmdWxsIHJhbmdlIDAuLi4yKiozMi0xLCB1c2UKKyAqICAgICAgICAgaXNhYWNfbmV4 dF91aW50MzIoKSBpbnN0ZWFkLgorICogUmV0dXJuOiBBbiBpbnRlZ2VyIHVuaWZvcm1seSBkaXN0 cmlidXRlZCBiZXR3ZWVuIDAgYW5kIF9uLTEgKGluY2x1c2l2ZSkuCisgKi8KK3VpbnQzMl90IGlz YWFjX25leHRfdWludChpc2FhY19jdHggKl9jdHgsdWludDMyX3QgX24pOworCisjZW5kaWYKZGlm ZiAtLWdpdCBhL2xpYi9wcm5nLmMgYi9saWIvcHJuZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmViZDZkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHJuZy5jCkBAIC0w LDAgKzEsMTYyIEBACisvKgorICogUHNldWRvIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yCisgKgor ICogTGlmdGVkIGZyb20gY2NhbiBtb2R1bGVzIGlsb2cvaXNhYWMgdW5kZXIgQ0MwCisgKiAgIC0g aHR0cDovL2Njb2RlYXJjaGl2ZS5uZXQvaW5mby9pc2FhYy5odG1sCisgKiAgIC0gaHR0cDovL2Nj b2RlYXJjaGl2ZS5uZXQvaW5mby9pbG9nLmh0bWwKKyAqCisgKiBBbmQgbGlnaHRseSBoYWNrZWQg dG8gY29tcGlsZSB1bmRlciB0aGUgS1ZNIHVuaXQgdGVzdCBlbnZpcm9ubWVudC4KKyAqIFRoaXMg cHJvdmlkZXMgYSBoYW5keSBSTkcgZm9yIHRvcnR1cmUgdGVzdHMgdGhhdCB3YW50IHRvIHZhcnkK KyAqIGRlbGF5cyBhbmQgdGhlIGxpa2UuCisgKgorICovCisKKy8qV3JpdHRlbiBieSBUaW1vdGh5 IEIuIFRlcnJpYmVycnkgKHR0ZXJyaWJlQHhpcGgub3JnKSAxOTk5LTIwMDkuCisgIENDMCAoUHVi bGljIGRvbWFpbikgLSBzZWUgTElDRU5TRSBmaWxlIGZvciBkZXRhaWxzCisgIEJhc2VkIG9uIHRo ZSBwdWJsaWMgZG9tYWluIGltcGxlbWVudGF0aW9uIGJ5IFJvYmVydCBKLiBKZW5raW5zIEpyLiov CisKKyNpbmNsdWRlICJsaWJjZmxhdC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVk ZSAicHJuZy5oIgorCisjZGVmaW5lIElTQUFDX01BU0sgICAgICAgICgweEZGRkZGRkZGVSkKKwor LyogRXh0cmFjdCBJU0FBQ19TWl9MT0cgYml0cyAoc3RhcnRpbmcgYXQgYml0IDIpLiAqLworc3Rh dGljIGlubGluZSB1aW50MzJfdCBsb3dlcl9iaXRzKHVpbnQzMl90IHgpCit7CisJcmV0dXJuICh4 ICYgKChJU0FBQ19TWi0xKSA8PCAyKSkgPj4gMjsKK30KKworLyogRXh0cmFjdCBuZXh0IElTQUFD X1NaX0xPRyBiaXRzIChzdGFydGluZyBhdCBiaXQgSVNBQUNfU1pfTE9HKzIpLiAqLworc3RhdGlj IGlubGluZSB1aW50MzJfdCB1cHBlcl9iaXRzKHVpbnQzMl90IHkpCit7CisJcmV0dXJuICh5ID4+ IChJU0FBQ19TWl9MT0crMikpICYgKElTQUFDX1NaLTEpOworfQorCitzdGF0aWMgdm9pZCBpc2Fh Y191cGRhdGUoaXNhYWNfY3R4ICpfY3R4KXsKKwl1aW50MzJfdCAqbTsKKwl1aW50MzJfdCAqcjsK Kwl1aW50MzJfdCAgYTsKKwl1aW50MzJfdCAgYjsKKwl1aW50MzJfdCAgeDsKKwl1aW50MzJfdCAg eTsKKwlpbnQgICAgICAgaTsKKwltPV9jdHgtPm07CisJcj1fY3R4LT5yOworCWE9X2N0eC0+YTsK KwliPV9jdHgtPmIrKCsrX2N0eC0+Yyk7CisJZm9yKGk9MDtpPElTQUFDX1NaLzI7aSsrKXsKKwkJ eD1tW2ldOworCQlhPShhXmE8PDEzKSttW2krSVNBQUNfU1ovMl07CisJCW1baV09eT1tW2xvd2Vy X2JpdHMoeCldK2ErYjsKKwkJcltpXT1iPW1bdXBwZXJfYml0cyh5KV0reDsKKwkJeD1tWysraV07 CisJCWE9KGFeYT4+NikrbVtpK0lTQUFDX1NaLzJdOworCQltW2ldPXk9bVtsb3dlcl9iaXRzKHgp XSthK2I7CisJCXJbaV09Yj1tW3VwcGVyX2JpdHMoeSldK3g7CisJCXg9bVsrK2ldOworCQlhPShh XmE8PDIpK21baStJU0FBQ19TWi8yXTsKKwkJbVtpXT15PW1bbG93ZXJfYml0cyh4KV0rYStiOwor CQlyW2ldPWI9bVt1cHBlcl9iaXRzKHkpXSt4OworCQl4PW1bKytpXTsKKwkJYT0oYV5hPj4xNikr bVtpK0lTQUFDX1NaLzJdOworCQltW2ldPXk9bVtsb3dlcl9iaXRzKHgpXSthK2I7CisJCXJbaV09 Yj1tW3VwcGVyX2JpdHMoeSldK3g7CisJfQorCWZvcihpPUlTQUFDX1NaLzI7aTxJU0FBQ19TWjtp KyspeworCQl4PW1baV07CisJCWE9KGFeYTw8MTMpK21baS1JU0FBQ19TWi8yXTsKKwkJbVtpXT15 PW1bbG93ZXJfYml0cyh4KV0rYStiOworCQlyW2ldPWI9bVt1cHBlcl9iaXRzKHkpXSt4OworCQl4 PW1bKytpXTsKKwkJYT0oYV5hPj42KSttW2ktSVNBQUNfU1ovMl07CisJCW1baV09eT1tW2xvd2Vy X2JpdHMoeCldK2ErYjsKKwkJcltpXT1iPW1bdXBwZXJfYml0cyh5KV0reDsKKwkJeD1tWysraV07 CisJCWE9KGFeYTw8MikrbVtpLUlTQUFDX1NaLzJdOworCQltW2ldPXk9bVtsb3dlcl9iaXRzKHgp XSthK2I7CisJCXJbaV09Yj1tW3VwcGVyX2JpdHMoeSldK3g7CisJCXg9bVsrK2ldOworCQlhPShh XmE+PjE2KSttW2ktSVNBQUNfU1ovMl07CisJCW1baV09eT1tW2xvd2VyX2JpdHMoeCldK2ErYjsK KwkJcltpXT1iPW1bdXBwZXJfYml0cyh5KV0reDsKKwl9CisJX2N0eC0+Yj1iOworCV9jdHgtPmE9 YTsKKwlfY3R4LT5uPUlTQUFDX1NaOworfQorCitzdGF0aWMgdm9pZCBpc2FhY19taXgodWludDMy X3QgX3hbOF0peworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFNISUZUWzhdPXsxMSwyLDgs MTYsMTAsNCw4LDl9OworCWludCBpOworCWZvcihpPTA7aTw4O2krKyl7CisJCV94W2ldXj1feFso aSsxKSY3XTw8U0hJRlRbaV07CisJCV94WyhpKzMpJjddKz1feFtpXTsKKwkJX3hbKGkrMSkmN10r PV94WyhpKzIpJjddOworCQlpKys7CisJCV94W2ldXj1feFsoaSsxKSY3XT4+U0hJRlRbaV07CisJ CV94WyhpKzMpJjddKz1feFtpXTsKKwkJX3hbKGkrMSkmN10rPV94WyhpKzIpJjddOworCX0KK30K KworCit2b2lkIGlzYWFjX2luaXQoaXNhYWNfY3R4ICpfY3R4LGNvbnN0IHVuc2lnbmVkIGNoYXIg Kl9zZWVkLGludCBfbnNlZWQpeworCV9jdHgtPmE9X2N0eC0+Yj1fY3R4LT5jPTA7CisJbWVtc2V0 KF9jdHgtPnIsMCxzaXplb2YoX2N0eC0+cikpOworCWlzYWFjX3Jlc2VlZChfY3R4LF9zZWVkLF9u c2VlZCk7Cit9CisKK3ZvaWQgaXNhYWNfcmVzZWVkKGlzYWFjX2N0eCAqX2N0eCxjb25zdCB1bnNp Z25lZCBjaGFyICpfc2VlZCxpbnQgX25zZWVkKXsKKwl1aW50MzJfdCAqbTsKKwl1aW50MzJfdCAq cjsKKwl1aW50MzJfdCAgeFs4XTsKKwlpbnQgICAgICAgaTsKKwlpbnQgICAgICAgajsKKwltPV9j dHgtPm07CisJcj1fY3R4LT5yOworCWlmKF9uc2VlZD5JU0FBQ19TRUVEX1NaX01BWClfbnNlZWQ9 SVNBQUNfU0VFRF9TWl9NQVg7CisJZm9yKGk9MDtpPF9uc2VlZD4+MjtpKyspeworCQlyW2ldXj0o dWludDMyX3QpX3NlZWRbaTw8MnwzXTw8MjR8KHVpbnQzMl90KV9zZWVkW2k8PDJ8Ml08PDE2fAor CQkJKHVpbnQzMl90KV9zZWVkW2k8PDJ8MV08PDh8X3NlZWRbaTw8Ml07CisJfQorCV9uc2VlZC09 aTw8MjsKKwlpZihfbnNlZWQ+MCl7CisJCXVpbnQzMl90IHJpOworCQlyaT1fc2VlZFtpPDwyXTsK KwkJZm9yKGo9MTtqPF9uc2VlZDtqKyspcml8PSh1aW50MzJfdClfc2VlZFtpPDwyfGpdPDwoajw8 Myk7CisJCXJbaSsrXV49cmk7CisJfQorCXhbMF09eFsxXT14WzJdPXhbM109eFs0XT14WzVdPXhb Nl09eFs3XT0weDlFMzc3OUI5VTsKKwlmb3IoaT0wO2k8NDtpKyspaXNhYWNfbWl4KHgpOworCWZv cihpPTA7aTxJU0FBQ19TWjtpKz04KXsKKwkJZm9yKGo9MDtqPDg7aisrKXhbal0rPXJbaStqXTsK KwkJaXNhYWNfbWl4KHgpOworCQltZW1jcHkobStpLHgsc2l6ZW9mKHgpKTsKKwl9CisJZm9yKGk9 MDtpPElTQUFDX1NaO2krPTgpeworCQlmb3Ioaj0wO2o8ODtqKyspeFtqXSs9bVtpK2pdOworCQlp c2FhY19taXgoeCk7CisJCW1lbWNweShtK2kseCxzaXplb2YoeCkpOworCX0KKwlpc2FhY191cGRh dGUoX2N0eCk7Cit9CisKK3VpbnQzMl90IGlzYWFjX25leHRfdWludDMyKGlzYWFjX2N0eCAqX2N0 eCl7CisJaWYoIV9jdHgtPm4paXNhYWNfdXBkYXRlKF9jdHgpOworCXJldHVybiBfY3R4LT5yWy0t X2N0eC0+bl07Cit9CisKK3VpbnQzMl90IGlzYWFjX25leHRfdWludChpc2FhY19jdHggKl9jdHgs dWludDMyX3QgX24peworCXVpbnQzMl90IHI7CisJdWludDMyX3QgdjsKKwl1aW50MzJfdCBkOwor CWRveworCQlyPWlzYWFjX25leHRfdWludDMyKF9jdHgpOworCQl2PXIlX247CisJCWQ9ci12Owor CX0KKwl3aGlsZSgoKGQrX24tMSkmSVNBQUNfTUFTSyk8ZCk7CisJcmV0dXJuIHY7Cit9Ci0tIAoy LjMwLjIKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps aW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1hcm0ta2VybmVsCg==