From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 7A4E9427AA for ; Wed, 30 Mar 2022 14:54:33 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9024B68B26C; Wed, 30 Mar 2022 17:54:25 +0300 (EEST) Received: from mail-qk1-f177.google.com (mail-qk1-f177.google.com [209.85.222.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 266EF689CFC for ; Wed, 30 Mar 2022 17:54:19 +0300 (EEST) Received: by mail-qk1-f177.google.com with SMTP id r127so16765616qke.13 for ; Wed, 30 Mar 2022 07:54:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gxqcOcKHZPmPoc1AZG/aPIa3PQ83L6/tli6GD+XaEXo=; b=R90KaU4BjZlAZYXDSR/7V5h9HRtQI4xGptkiz4PnM5O3U/D/xaXmtXeON9EbMxHUI5 hgpnicLiOyi72KxyICeqE83KKt3x2P2MvkGmJcH3E0F3xBIJL1n3L/0wvxZqn3updJ4d gZ6gdeEE/I7HIFtGC2CzsJfqlf30GBLuBdoN66+Px1F5XwXWRpN+tCU7gJprOlOx8FIZ wSTs+zdqTO5AdSh/j/B+Fg5syYq8UGKBda+4PVGXJChC98NszYsfv9e4QUGiXULxJbk/ 4fZMcn1E6H8XPj3m2P0OqF+rYq1gsClk79RKaAiiu3wuyQct8pUZ6VhEjjLlANRstiNo KR5A== 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=gxqcOcKHZPmPoc1AZG/aPIa3PQ83L6/tli6GD+XaEXo=; b=Xqr816LNBkxRqQJC/g9YsMzy9TmETRIdJgD6DHq2gPTZCu/gc8T5cNWuHo+DZkwkZb NeLtScT/ikmua/cit3hqUbCVKbCijzcjN3QdzanlW6zaPlrRV62XWZ8EkVXBewwEwuAL hH9yTh9oyEIvhR1fa6xjPbPyC9HvK2vLaugWXsBJw3ZhpaKT6ljgz+P0V5FK1OkV5SN7 3I/vDjywPA7Fu1gaGDiryqC1qw+z4Dft5k3z0bD4j9Nr+EvmgfaAe7CvVR098YK57/SG 4N9sC4pOMsXmDATuloWXVvKJq7CUzqO6eup3xQzXtueDEIC6ara7hnIynXt/ACGMvPOx MH7A== X-Gm-Message-State: AOAM532LzkrpSF9oNJAlo8MGBEraJUtpQscfIgn99No9uThW4s40nzH+ FC0z/ELMZAcdw83z4MYcdTrj88mc2JY= X-Google-Smtp-Source: ABdhPJxt1y2r8WjXYOTosbdMY1FbvAtWtFLXHMM/rlVpDXGxmE6+X6lTVoLNFQg1vLeKM6twgezZkw== X-Received: by 2002:a05:620a:2688:b0:67e:95f1:7025 with SMTP id c8-20020a05620a268800b0067e95f17025mr24424733qkp.738.1648652057487; Wed, 30 Mar 2022 07:54:17 -0700 (PDT) Received: from gauss.local (c-68-41-54-207.hsd1.mi.comcast.net. [68.41.54.207]) by smtp.gmail.com with ESMTPSA id e15-20020a05622a110f00b002e1ed105652sm18258650qty.2.2022.03.30.07.54.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Mar 2022 07:54:17 -0700 (PDT) From: Leo Izen To: ffmpeg-devel@ffmpeg.org Date: Wed, 30 Mar 2022 10:53:25 -0400 Message-Id: <20220330145328.52279-2-leo.izen@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220330145328.52279-1-leo.izen@gmail.com> References: <20220330145328.52279-1-leo.izen@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v10 2/5] avcodec/libjxl: add Jpeg XL decoding via libjxl X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Leo Izen Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: VGhpcyBjb21taXQgYWRkcyBkZWNvZGluZyBzdXBwb3J0IHRvIGxpYmF2Y29kZWMKZm9yIEpwZWcg WEwgaW1hZ2VzIHZpYSB0aGUgZXh0ZXJuYWwgbGlicmFyeSBsaWJqeGwuCi0tLQogTUFJTlRBSU5F UlMgICAgICAgICAgICAgICB8ICAgMSArCiBjb25maWd1cmUgICAgICAgICAgICAgICAgIHwgICA1 ICsKIGRvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkgfCAgIDcgKwogbGliYXZjb2RlYy9NYWtlZmls ZSAgICAgICB8ICAgMSArCiBsaWJhdmNvZGVjL2FsbGNvZGVjcy5jICAgIHwgICAxICsKIGxpYmF2 Y29kZWMvbGlianhsLmMgICAgICAgfCAgNzAgKysrKysrKysrCiBsaWJhdmNvZGVjL2xpYmp4bC5o ICAgICAgIHwgIDQ4ICsrKysrKwogbGliYXZjb2RlYy9saWJqeGxkZWMuYyAgICB8IDMwMSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA0MzQg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlianhsLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2xpYmp4bC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZjb2RlYy9saWJqeGxkZWMuYwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRB SU5FUlMKaW5kZXggOWFiMDhiYWQ4ZS4uZmQ3OTIzNGQyMyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5F UlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE5NSw2ICsxOTUsNyBAQCBDb2RlY3M6CiAgIGxpYmNv ZGVjMi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9tYXMgSMOkcmRpbgogICBsaWJkaXJh YyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdmlkIENvbnJhZAogICBsaWJkYXZzMi5j ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh1aXdlbiBSZW4KKyAgbGlianhsKi5jLCBsaWJq eGwuaCAgICAgICAgICAgICAgICAgICBMZW8gSXplbgogICBsaWJnc20uYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE1pY2hlbCBCYXJkaWF1eAogICBsaWJrdmF6YWFyLmMgICAgICAgICAg ICAgICAgICAgICAgICAgIEFydHR1IFlsw6QtT3V0aW5lbgogICBsaWJvcGVuaDI2NGVuYy5jICAg ICAgICAgICAgICAgICAgICAgIE1hcnRpbiBTdG9yc2pvLCBMaW5qaWUgRnUKZGlmZiAtLWdpdCBh L2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBlNGQzNmFhNjM5Li45NjliMTNlYmEzIDEwMDc1 NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0yNDAsNiArMjQwLDcgQEAgRXh0 ZXJuYWwgbGlicmFyeSBzdXBwb3J0OgogICAtLWVuYWJsZS1saWJpZWM2MTg4MyAgICAgZW5hYmxl IGllYzYxODgzIHZpYSBsaWJpZWM2MTg4MyBbbm9dCiAgIC0tZW5hYmxlLWxpYmlsYmMgICAgICAg ICBlbmFibGUgaUxCQyBkZS9lbmNvZGluZyB2aWEgbGliaWxiYyBbbm9dCiAgIC0tZW5hYmxlLWxp YmphY2sgICAgICAgICBlbmFibGUgSkFDSyBhdWRpbyBzb3VuZCBzZXJ2ZXIgW25vXQorICAtLWVu YWJsZS1saWJqeGwgICAgICAgICAgZW5hYmxlIEpQRUcgWEwgZGVjb2RpbmcgdmlhIGxpYmp4bCBb bm9dCiAgIC0tZW5hYmxlLWxpYmtsdmFuYyAgICAgICBlbmFibGUgS2VybmVsIExhYnMgVkFOQyBw cm9jZXNzaW5nIFtub10KICAgLS1lbmFibGUtbGlia3ZhemFhciAgICAgIGVuYWJsZSBIRVZDIGVu Y29kaW5nIHZpYSBsaWJrdmF6YWFyIFtub10KICAgLS1lbmFibGUtbGlibGVuc2Z1biAgICAgIGVu YWJsZSBsZW5zZnVuIGxlbnMgY29ycmVjdGlvbiBbbm9dCkBAIC0xODMzLDYgKzE4MzQsNyBAQCBF WFRFUk5BTF9MSUJSQVJZX0xJU1Q9IgogICAgIGxpYmllYzYxODgzCiAgICAgbGliaWxiYwogICAg IGxpYmphY2sKKyAgICBsaWJqeGwKICAgICBsaWJrbHZhbmMKICAgICBsaWJrdmF6YWFyCiAgICAg bGlibW9kcGx1ZwpAQCAtMzMyOSw2ICszMzMxLDcgQEAgbGliZ3NtX21zX2RlY29kZXJfZGVwcz0i bGliZ3NtIgogbGliZ3NtX21zX2VuY29kZXJfZGVwcz0ibGliZ3NtIgogbGliaWxiY19kZWNvZGVy X2RlcHM9ImxpYmlsYmMiCiBsaWJpbGJjX2VuY29kZXJfZGVwcz0ibGliaWxiYyIKK2xpYmp4bF9k ZWNvZGVyX2RlcHM9ImxpYmp4bCBsaWJqeGxfdGhyZWFkcyIKIGxpYmt2YXphYXJfZW5jb2Rlcl9k ZXBzPSJsaWJrdmF6YWFyIgogbGlibW9kcGx1Z19kZW11eGVyX2RlcHM9ImxpYm1vZHBsdWciCiBs aWJtcDNsYW1lX2VuY29kZXJfZGVwcz0ibGlibXAzbGFtZSIKQEAgLTY1NDEsNiArNjU0NCw4IEBA IGVuYWJsZWQgbGliZ3NtICAgICAgICAgICAgJiYgeyBmb3IgZ3NtX2hkciBpbiAiZ3NtLmgiICJn c20vZ3NtLmgiOyBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19s aWIgbGliZ3NtICIke2dzbV9oZHJ9IiBnc21fY3JlYXRlIC1sZ3NtICYmIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgfHwgZGllICJFUlJPUjogbGliZ3NtIG5vdCBm b3VuZCI7IH0KIGVuYWJsZWQgbGliaWxiYyAgICAgICAgICAgJiYgcmVxdWlyZSBsaWJpbGJjIGls YmMuaCBXZWJSdGNJbGJjZml4X0luaXREZWNvZGUgLWxpbGJjICRwdGhyZWFkc19leHRyYWxpYnMK K2VuYWJsZWQgbGlianhsICAgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmp4bCAi bGlianhsID49IDAuNy4wIiBqeGwvZGVjb2RlLmggSnhsRGVjb2RlclZlcnNpb24gJiYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmp4bF90aHJlYWRz ICJsaWJqeGxfdGhyZWFkcyA+PSAwLjcuMCIganhsL3RocmVhZF9wYXJhbGxlbF9ydW5uZXIuaCBK eGxUaHJlYWRQYXJhbGxlbFJ1bm5lcgogZW5hYmxlZCBsaWJrbHZhbmMgICAgICAgICAmJiByZXF1 aXJlIGxpYmtsdmFuYyBsaWJrbHZhbmMvdmFuYy5oIGtsdmFuY19jb250ZXh0X2NyZWF0ZSAtbGts dmFuYwogZW5hYmxlZCBsaWJrdmF6YWFyICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGli a3ZhemFhciAia3ZhemFhciA+PSAwLjguMSIga3ZhemFhci5oIGt2el9hcGlfZ2V0CiBlbmFibGVk IGxpYmxlbnNmdW4gICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJsZW5zZnVuIGxlbnNm dW4gbGVuc2Z1bi5oIGxmX2RiX25ldwpkaWZmIC0tZ2l0IGEvZG9jL2dlbmVyYWxfY29udGVudHMu dGV4aSBiL2RvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkKaW5kZXggZmNkOWRhMWIzNC4uYTg5MzM0 N2ZiZSAxMDA2NDQKLS0tIGEvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQorKysgYi9kb2MvZ2Vu ZXJhbF9jb250ZW50cy50ZXhpCkBAIC0xNzEsNiArMTcxLDEzIEBAIEdvIHRvIEB1cmx7aHR0cHM6 Ly9naXRodWIuY29tL1RpbW90aHlHdS9saWJpbGJjfSBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlv bnMgZm9yCiBpbnN0YWxsaW5nIHRoZSBsaWJyYXJ5LiBUaGVuIHBhc3MgQGNvZGV7LS1lbmFibGUt bGliaWxiY30gdG8gY29uZmlndXJlIHRvCiBlbmFibGUgaXQuCiAKK0BzZWN0aW9uIGxpYmp4bAor CitKUEVHIFhMIGlzIGFuIGltYWdlIGZvcm1hdCBpbnRlbmRlZCB0byBmdWxseSByZXBsYWNlIGxl Z2FjeSBKUEVHIGZvciBhbiBleHRlbmRlZAorcGVyaW9kIG9mIGxpZmUuIFNlZSBAdXJse2h0dHBz Oi8vanBlZ3hsLmluZm8vfSBmb3IgbW9yZSBpbmZvcm1hdGlvbiwgYW5kIHNlZQorQHVybHtodHRw czovL2dpdGh1Yi5jb20vbGlianhsL2xpYmp4bH0gZm9yIHRoZSBsaWJyYXJ5IHNvdXJjZS4gWW91 IGNhbiBwYXNzCitAY29kZXstLWVuYWJsZS1saWJqeGx9IHRvIGNvbmZpZ3VyZSBpbiBvcmRlciBl bmFibGUgdGhlIGxpYmp4bCB3cmFwcGVyLgorCiBAc2VjdGlvbiBsaWJ2cHgKIAogRkZtcGVnIGNh biBtYWtlIHVzZSBvZiB0aGUgbGlidnB4IGxpYnJhcnkgZm9yIFZQOC9WUDkgZGVjb2RpbmcgYW5k IGVuY29kaW5nLgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBiL2xpYmF2Y29kZWMv TWFrZWZpbGUKaW5kZXggMzcyMzYwMWIzZC4uYzAwYjBkMzI0NiAxMDA2NDQKLS0tIGEvbGliYXZj b2RlYy9NYWtlZmlsZQorKysgYi9saWJhdmNvZGVjL01ha2VmaWxlCkBAIC0xMDYwLDYgKzEwNjAs NyBAQCBPQkpTLSQoQ09ORklHX0xJQkdTTV9NU19ERUNPREVSKSAgICAgICAgICArPSBsaWJnc21k ZWMubwogT0JKUy0kKENPTkZJR19MSUJHU01fTVNfRU5DT0RFUikgICAgICAgICAgKz0gbGliZ3Nt ZW5jLm8KIE9CSlMtJChDT05GSUdfTElCSUxCQ19ERUNPREVSKSAgICAgICAgICAgICs9IGxpYmls YmMubwogT0JKUy0kKENPTkZJR19MSUJJTEJDX0VOQ09ERVIpICAgICAgICAgICAgKz0gbGliaWxi Yy5vCitPQkpTLSQoQ09ORklHX0xJQkpYTF9ERUNPREVSKSAgICAgICAgICAgICArPSBsaWJqeGxk ZWMubyBsaWJqeGwubwogT0JKUy0kKENPTkZJR19MSUJLVkFaQUFSX0VOQ09ERVIpICAgICAgICAg Kz0gbGlia3ZhemFhci5vCiBPQkpTLSQoQ09ORklHX0xJQk1QM0xBTUVfRU5DT0RFUikgICAgICAg ICArPSBsaWJtcDNsYW1lLm8KIE9CSlMtJChDT05GSUdfTElCT1BFTkNPUkVfQU1STkJfREVDT0RF UikgICs9IGxpYm9wZW5jb3JlLWFtci5vCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FsbGNvZGVj cy5jIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwppbmRleCAyMmQ1Njc2MGVjLi5hOWNkNjlkZmNl IDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCisrKyBiL2xpYmF2Y29kZWMvYWxs Y29kZWNzLmMKQEAgLTc0OSw2ICs3NDksNyBAQCBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJn c21fbXNfZW5jb2RlcjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYmdzbV9tc19kZWNvZGVy OwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGliaWxiY19lbmNvZGVyOwogZXh0ZXJuIGNvbnN0 IEZGQ29kZWMgZmZfbGliaWxiY19kZWNvZGVyOworZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGli anhsX2RlY29kZXI7CiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJtcDNsYW1lX2VuY29kZXI7 CiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJvcGVuY29yZV9hbXJuYl9lbmNvZGVyOwogZXh0 ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlib3BlbmNvcmVfYW1ybmJfZGVjb2RlcjsKZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvbGlianhsLmMgYi9saWJhdmNvZGVjL2xpYmp4bC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjIwNGQ5MWQ4YTgKLS0tIC9kZXYvbnVsbAorKysg Yi9saWJhdmNvZGVjL2xpYmp4bC5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBKUEVHIFhMIGRl L2VuY29kaW5nIHZpYSBsaWJqeGwsIGNvbW1vbiBzdXBwb3J0IGltcGxlbWVudGF0aW9uCisgKiBD b3B5cmlnaHQgKGMpIDIwMjEgTGVvIEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KKyAqCisgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogSlBFRyBY TCB2aWEgbGlianhsIGNvbW1vbiBzdXBwb3J0IGltcGxlbWVudGF0aW9uCisgKi8KKworI2luY2x1 ZGUgImxpYmF2dXRpbC9jcHUuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisKKyNpbmNs dWRlIDxqeGwvbWVtb3J5X21hbmFnZXIuaD4KKyNpbmNsdWRlICJsaWJqeGwuaCIKKworc2l6ZV90 IGZmX2xpYmp4bF9nZXRfdGhyZWFkY291bnQoaW50IHRocmVhZHMpCit7CisgICAgaWYgKHRocmVh ZHMgPD0gMCkKKyAgICAgICAgcmV0dXJuIGF2X2NwdV9jb3VudCgpOworICAgIGlmICh0aHJlYWRz ID09IDEpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0aHJlYWRzOworfQorCisvKioK KyAqIFdyYXBwZXIgYXJvdW5kIGF2X21hbGxvYyB1c2VkIGFzIGEganBlZ3hsX2FsbG9jX2Z1bmMu CisgKgorICogQHBhcmFtICBvcGFxdWUgb3BhcXVlIHBvaW50ZXIgZm9yIGpwZWd4bF9hbGxvY19m dW5jLCBhbHdheXMgaWdub3JlZAorICogQHBhcmFtICBzaXplIFNpemUgaW4gYnl0ZXMgZm9yIHRo ZSBtZW1vcnkgYmxvY2sgdG8gYmUgYWxsb2NhdGVkCisgKiBAcmV0dXJuIFBvaW50ZXIgdG8gdGhl IGFsbG9jYXRlZCBibG9jaywgb3IgYE5VTExgIGlmIGl0IGNhbm5vdCBiZSBhbGxvY2F0ZWQKKyAq Lworc3RhdGljIHZvaWQgKmxpYmp4bF9hdl9tYWxsb2Modm9pZCAqb3BhcXVlLCBzaXplX3Qgc2l6 ZSkKK3sKKyAgICByZXR1cm4gYXZfbWFsbG9jKHNpemUpOworfQorCisvKioKKyAqIFdyYXBwZXIg YXJvdW5kIGF2X2ZyZWUgdXNlZCBhcyBhIGpwZWd4bF9mcmVlX2Z1bmMuCisgKgorICogQHBhcmFt IG9wYXF1ZSAgb3BhcXVlIHBvaW50ZXIgZm9yIGpwZWd4bF9mcmVlX2Z1bmMsIGFsd2F5cyBpZ25v cmVkCisgKiBAcGFyYW0gYWRkcmVzcyBQb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYmxvY2ssIHRv IGZyZWUuIGBOVUxMYCBwZXJtaXR0ZWQgYXMgYSBuby1vcC4KKyAqLworc3RhdGljIHZvaWQgbGli anhsX2F2X2ZyZWUodm9pZCAqb3BhcXVlLCB2b2lkICphZGRyZXNzKQoreworICAgIGF2X2ZyZWUo YWRkcmVzcyk7Cit9CisKK3ZvaWQgZmZfbGlianhsX2luaXRfbWVtb3J5X21hbmFnZXIoSnhsTWVt b3J5TWFuYWdlciAqbWFuYWdlcikKK3sKKyAgICBtYW5hZ2VyLT5vcGFxdWUgPSBOVUxMOworICAg IG1hbmFnZXItPmFsbG9jID0gJmxpYmp4bF9hdl9tYWxsb2M7CisgICAgbWFuYWdlci0+ZnJlZSA9 ICZsaWJqeGxfYXZfZnJlZTsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbGlianhsLmggYi9s aWJhdmNvZGVjL2xpYmp4bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjUzODdjNDM4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL2xpYmp4bC5oCkBAIC0w LDAgKzEsNDggQEAKKy8qCisgKiBKUEVHIFhMIGRlL2VuY29kaW5nIHZpYSBsaWJqeGwsIGNvbW1v biBzdXBwb3J0IGhlYWRlcgorICogQ29weXJpZ2h0IChjKSAyMDIxIExlbyBJemVuIDxsZW8uaXpl bkBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAq IEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKy8q KgorICogQGZpbGUKKyAqIEpQRUcgWEwgdmlhIGxpYmp4bCBjb21tb24gc3VwcG9ydCBoZWFkZXIK KyAqLworCisjaWZuZGVmIEFWQ09ERUNfTElCSlhMX0gKKyNkZWZpbmUgQVZDT0RFQ19MSUJKWExf SAorCisjaW5jbHVkZSA8anhsL21lbW9yeV9tYW5hZ2VyLmg+CisKKy8qKgorICogVHJhbnNmb3Jt IHRocmVhZGNvdW50IGluIGZmbXBlZyB0byBvbmUgdXNlZCBieSBsaWJqeGwuCisgKgorICogQHBh cmFtICB0aHJlYWRzIGZmbXBlZydzIHRocmVhZHMgQVZPcHRpb24KKyAqIEByZXR1cm4gICAgICAg ICB0aHJlYWQgY291bnQgZm9yIGxpYmp4bCdzIHBhcmFsbGVsIHJ1bm5lcgorICovCitzaXplX3Qg ZmZfbGlianhsX2dldF90aHJlYWRjb3VudChpbnQgdGhyZWFkcyk7CisKKy8qKgorICogSW5pdGlh bGl6ZSBhbmQgcG9wdWxhdGUgYSBKeGxNZW1vcnlNYW5hZ2VyCisgKiB3aXRoIGF2X21hbGxvYygp IGFuZCBhdl9mcmVlKCkgc28gbGlianhsIHdpbGwgdXNlIHRoZXNlCisgKiBmdW5jdGlvbnMuCisg KiBAcGFyYW0gbWFuYWdlciBhIHBvaW50ZXIgdG8gYSBKeGxNZW1vcnlNYW5hZ2VyIHN0cnVjdAor ICovCit2b2lkIGZmX2xpYmp4bF9pbml0X21lbW9yeV9tYW5hZ2VyKEp4bE1lbW9yeU1hbmFnZXIg Km1hbmFnZXIpOworCisjZW5kaWYgLyogQVZDT0RFQ19MSUJKWExfSCAqLwpkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy9saWJqeGxkZWMuYyBiL2xpYmF2Y29kZWMvbGlianhsZGVjLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYTdmZmM3NzViMwotLS0gL2Rldi9udWxsCisr KyBiL2xpYmF2Y29kZWMvbGlianhsZGVjLmMKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBKUEVH IFhMIGRlY29kaW5nIHN1cHBvcnQgdmlhIGxpYmp4bAorICogQ29weXJpZ2h0IChjKSAyMDIxIExl byBJemVuIDxsZW8uaXplbkBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQorICovCisKKy8qKgorICogQGZpbGUKKyAqIEpQRUcgWEwgZGVjb2RlciB1c2luZyBsaWJq eGwKKyAqLworCisjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCisjaW5jbHVkZSAibGli YXZ1dGlsL2J1ZmZlci5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9jb21tb24uaCIKKyNpbmNsdWRl ICJsaWJhdnV0aWwvZXJyb3IuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisjaW5jbHVk ZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4Zm10LmgiCisj aW5jbHVkZSAibGliYXZ1dGlsL2ZyYW1lLmgiCisKKyNpbmNsdWRlICJhdmNvZGVjLmgiCisjaW5j bHVkZSAiY29kZWNfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjaW5jbHVk ZSA8anhsL2RlY29kZS5oPgorI2luY2x1ZGUgPGp4bC90aHJlYWRfcGFyYWxsZWxfcnVubmVyLmg+ CisjaW5jbHVkZSAibGlianhsLmgiCisKK3R5cGVkZWYgc3RydWN0IExpYkp4bERlY29kZUNvbnRl eHQgeworICAgIHZvaWQgKnJ1bm5lcjsKKyAgICBKeGxEZWNvZGVyICpkZWNvZGVyOworICAgIEp4 bEJhc2ljSW5mbyBiYXNpY19pbmZvOworICAgIEp4bFBpeGVsRm9ybWF0IGp4bF9waXhmbXQ7Cisg ICAgSnhsRGVjb2RlclN0YXR1cyBldmVudHM7CisgICAgQVZCdWZmZXJSZWYgKmljY3A7CisgICAg c2l6ZV90IGljY3BfbGVuOworfSBMaWJKeGxEZWNvZGVDb250ZXh0OworCitzdGF0aWMgaW50IGxp Ymp4bF9pbml0X2p4bF9kZWNvZGVyKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBMaWJK eGxEZWNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOworCisgICAgY3R4LT5ldmVu dHMgPSBKWExfREVDX0JBU0lDX0lORk8gfCBKWExfREVDX0ZVTExfSU1BR0UgfCBKWExfREVDX0ZS QU1FIHwgSlhMX0RFQ19DT0xPUl9FTkNPRElORzsKKyAgICBpZiAoSnhsRGVjb2RlclN1YnNjcmli ZUV2ZW50cyhjdHgtPmRlY29kZXIsIGN0eC0+ZXZlbnRzKSAhPSBKWExfREVDX1NVQ0NFU1MpIHsK KyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBzdWJzY3JpYmluZyB0 byBKWEwgZXZlbnRzXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAg fQorCisgICAgaWYgKEp4bERlY29kZXJTZXRQYXJhbGxlbFJ1bm5lcihjdHgtPmRlY29kZXIsIEp4 bFRocmVhZFBhcmFsbGVsUnVubmVyLCBjdHgtPnJ1bm5lcikgIT0gSlhMX0RFQ19TVUNDRVNTKSB7 CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHNldCBKeGxU aHJlYWRQYXJhbGxlbFJ1bm5lclxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFM OworICAgIH0KKworICAgIG1lbXNldCgmY3R4LT5iYXNpY19pbmZvLCAwLCBzaXplb2YoSnhsQmFz aWNJbmZvKSk7CisgICAgbWVtc2V0KCZjdHgtPmp4bF9waXhmbXQsIDAsIHNpemVvZihKeGxQaXhl bEZvcm1hdCkpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgYXZfY29sZCBpbnQgbGlianhs X2RlY29kZV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBMaWJKeGxEZWNvZGVD b250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOworICAgIEp4bE1lbW9yeU1hbmFnZXIgbWFu YWdlcjsKKworICAgIGZmX2xpYmp4bF9pbml0X21lbW9yeV9tYW5hZ2VyKCZtYW5hZ2VyKTsKKyAg ICBjdHgtPmRlY29kZXIgPSBKeGxEZWNvZGVyQ3JlYXRlKCZtYW5hZ2VyKTsKKyAgICBpZiAoIWN0 eC0+ZGVjb2RlcikgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxl ZCB0byBjcmVhdGUgSnhsRGVjb2RlclxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOworICAgIH0KKworICAgIGN0eC0+cnVubmVyID0gSnhsVGhyZWFkUGFyYWxsZWxSdW5uZXJD cmVhdGUoJm1hbmFnZXIsIGZmX2xpYmp4bF9nZXRfdGhyZWFkY291bnQoYXZjdHgtPnRocmVhZF9j b3VudCkpOworICAgIGlmICghY3R4LT5ydW5uZXIpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRlIEp4bFRocmVhZFBhcmFsbGVsUnVubmVyXG4i KTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgcmV0dXJu IGxpYmp4bF9pbml0X2p4bF9kZWNvZGVyKGF2Y3R4KTsKK30KKworc3RhdGljIGVudW0gQVZQaXhl bEZvcm1hdCBsaWJqeGxfZ2V0X3BpeF9mbXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBKeGxCYXNp Y0luZm8gKmJhc2ljX2luZm8sIEp4bFBpeGVsRm9ybWF0ICpmb3JtYXQpCit7CisgICAgZm9ybWF0 LT5lbmRpYW5uZXNzID0gSlhMX05BVElWRV9FTkRJQU47CisgICAgZm9ybWF0LT5udW1fY2hhbm5l bHMgPSBiYXNpY19pbmZvLT5udW1fY29sb3JfY2hhbm5lbHMgKyAoYmFzaWNfaW5mby0+YWxwaGFf Yml0cyA+IDApOworICAgIC8qIGF2X21hbGxvYyBoYW5kbGVzIGFsaWdubWVudCBhbHJlYWR5ICov CisgICAgZm9ybWF0LT5hbGlnbiA9IDE7CisgICAgLyogR3JheSAqLworICAgIGlmIChiYXNpY19p bmZvLT5udW1fY29sb3JfY2hhbm5lbHMgPT0gMSkgeworICAgICAgICBpZiAoYmFzaWNfaW5mby0+ Yml0c19wZXJfc2FtcGxlIDw9IDgpIHsKKyAgICAgICAgICAgIGZvcm1hdC0+ZGF0YV90eXBlID0g SlhMX1RZUEVfVUlOVDg7CisgICAgICAgICAgICByZXR1cm4gYmFzaWNfaW5mby0+YWxwaGFfYml0 cyA/IEFWX1BJWF9GTVRfWUE4IDogQVZfUElYX0ZNVF9HUkFZODsKKyAgICAgICAgfQorICAgICAg ICBpZiAoYmFzaWNfaW5mby0+ZXhwb25lbnRfYml0c19wZXJfc2FtcGxlIHx8IGJhc2ljX2luZm8t PmJpdHNfcGVyX3NhbXBsZSA+IDE2KSB7CisgICAgICAgICAgICBpZiAoYmFzaWNfaW5mby0+YWxw aGFfYml0cykKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZfUElYX0ZNVF9OT05FOworICAgICAg ICAgICAgZm9ybWF0LT5kYXRhX3R5cGUgPSBKWExfVFlQRV9GTE9BVDsKKyAgICAgICAgICAgIHJl dHVybiBBVl9QSVhfRk1UX0dSQVlGMzI7CisgICAgICAgIH0KKyAgICAgICAgZm9ybWF0LT5kYXRh X3R5cGUgPSBKWExfVFlQRV9VSU5UMTY7CisgICAgICAgIHJldHVybiBiYXNpY19pbmZvLT5hbHBo YV9iaXRzID8gQVZfUElYX0ZNVF9ZQTE2IDogQVZfUElYX0ZNVF9HUkFZMTY7CisgICAgfQorICAg IC8qIHJnYiBvbmx5ICovCisgICAgLyogbGlianhsIG9ubHkgc3VwcG9ydHMgcGFja2VkIFJHQiBh bmQgZ3JheSBvdXRwdXQgYXQgdGhlIG1vbWVudCAqLworICAgIGlmIChiYXNpY19pbmZvLT5udW1f Y29sb3JfY2hhbm5lbHMgPT0gMykgeworICAgICAgICBpZiAoYmFzaWNfaW5mby0+Yml0c19wZXJf c2FtcGxlIDw9IDgpIHsKKyAgICAgICAgICAgIGZvcm1hdC0+ZGF0YV90eXBlID0gSlhMX1RZUEVf VUlOVDg7CisgICAgICAgICAgICByZXR1cm4gYmFzaWNfaW5mby0+YWxwaGFfYml0cyA/IEFWX1BJ WF9GTVRfUkdCQSA6IEFWX1BJWF9GTVRfUkdCMjQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJh c2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA+IDE2KQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfV0FSTklORywgIkRvd25zYW1wbGluZyBsYXJnZXIgaW50ZWdlciB0byAxNi1iaXQg dmlhIGxpYmp4bFxuIik7CisgICAgICAgIGlmIChiYXNpY19pbmZvLT5leHBvbmVudF9iaXRzX3Bl cl9zYW1wbGUpCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiRG93 bnNhbXBsaW5nIGZsb2F0IHRvIDE2LWJpdCBpbnRlZ2VyIHZpYSBsaWJqeGxcbiIpOworICAgICAg ICBmb3JtYXQtPmRhdGFfdHlwZSA9IEpYTF9UWVBFX1VJTlQxNjsKKyAgICAgICAgcmV0dXJuIGJh c2ljX2luZm8tPmFscGhhX2JpdHMgPyBBVl9QSVhfRk1UX1JHQkE2NCA6IEFWX1BJWF9GTVRfUkdC NDg7CisgICAgfQorICAgIHJldHVybiBBVl9QSVhfRk1UX05PTkU7Cit9CisKK3N0YXRpYyB2b2lk IGxpYmp4bF9yb3dfZmlsbCh2b2lkICphdmZyYW1lLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVf dCBudW1fcGl4ZWxzLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgQVZGcmFtZSAqZnJhbWUg PSBhdmZyYW1lOworICAgIGludCBieXRlcyA9IGF2X2dldF9wYWRkZWRfYml0c19wZXJfcGl4ZWwo YXZfcGl4X2ZtdF9kZXNjX2dldChmcmFtZS0+Zm9ybWF0KSkgLyA4OworICAgIHNpemVfdCBvZmZz ZXQgPSB5ICogZnJhbWUtPmxpbmVzaXplWzBdICsgeCAqIGJ5dGVzOworICAgIG1lbWNweShmcmFt ZS0+ZGF0YVswXSArIG9mZnNldCwgcGl4ZWxzLCBudW1fcGl4ZWxzICogYnl0ZXMpOworfQorCitz dGF0aWMgaW50IGxpYmp4bF9kZWNvZGVfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCB2b2lk ICphdmZyYW1lLCBpbnQgKmdvdF9mcmFtZSwgQVZQYWNrZXQgKmF2cGt0KQoreworICAgIExpYkp4 bERlY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgdWludDhfdCAqYnVm ID0gYXZwa3QtPmRhdGE7CisgICAgc2l6ZV90IHJlbWFpbmluZyA9IGF2cGt0LT5zaXplOworICAg IEFWRnJhbWUgKmZyYW1lID0gYXZmcmFtZTsKKyAgICBKeGxEZWNvZGVyU3RhdHVzIGpyZXQ7Cisg ICAgaW50IHJldDsKKyAgICAqZ290X2ZyYW1lID0gMDsKKworICAgIHdoaWxlICgxKSB7CisKKyAg ICAgICAganJldCA9IEp4bERlY29kZXJTZXRJbnB1dChjdHgtPmRlY29kZXIsIGJ1ZiwgcmVtYWlu aW5nKTsKKyAgICAgICAgCisgICAgICAgIGlmIChqcmV0ID09IEpYTF9ERUNfRVJST1IpIHsKKyAg ICAgICAgICAgIC8qIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBoZXJlIHVubGVzcyB0aGVyZSdz IGEgYnVnIGluIGxpYmp4bCAqLworICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJVbmtub3duIGxpYmp4bCBkZWNvZGUgZXJyb3JcbiIpOworICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgIH0KKworICAgICAgICBqcmV0ID0gSnhsRGVjb2Rl clByb2Nlc3NJbnB1dChjdHgtPmRlY29kZXIpOworICAgICAgICAvKgorICAgICAgICAgKiBKeGxE ZWNvZGVyUmVsZWFzZUlucHV0IHJldHVybnMgdGhlIG51bWJlcgorICAgICAgICAgKiBvZiBieXRl cyByZW1haW5pbmcgdG8gYmUgcmVhZCwgcmF0aGVyIHRoYW4KKyAgICAgICAgICogdGhlIG51bWJl ciBvZiBieXRlcyB0aGF0IGl0IGRpZCByZWFkCisgICAgICAgICAqLworICAgICAgICByZW1haW5p bmcgPSBKeGxEZWNvZGVyUmVsZWFzZUlucHV0KGN0eC0+ZGVjb2Rlcik7CisgICAgICAgIGJ1ZiA9 IGF2cGt0LT5kYXRhICsgYXZwa3QtPnNpemUgLSByZW1haW5pbmc7CisKKyAgICAgICAgc3dpdGNo KGpyZXQpIHsKKyAgICAgICAgY2FzZSBKWExfREVDX0VSUk9SOgorICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmtub3duIGxpYmp4bCBkZWNvZGUgZXJyb3JcbiIpOwor ICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgIGNhc2UgSlhMX0RF Q19ORUVEX01PUkVfSU5QVVQ6CisgICAgICAgICAgICBpZiAocmVtYWluaW5nID09IDApIHsKKyAg ICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiVW5leHBlY3RlZCBl bmQgb2YgSlhMIGNvZGVzdHJlYW1cbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9S KEVBR0FJTik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19ERUJVRywgIk5FRURfTU9SRV9JTlBVVCBldmVudCBlbWl0dGVkXG4iKTsKKyAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICBjYXNlIEpYTF9ERUNfQkFTSUNfSU5GTzoKKyAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiQkFTSUNfSU5GTyBldmVudCBlbWl0dGVkXG4i KTsKKyAgICAgICAgICAgIGlmIChKeGxEZWNvZGVyR2V0QmFzaWNJbmZvKGN0eC0+ZGVjb2Rlciwg JmN0eC0+YmFzaWNfaW5mbykgIT0gSlhMX0RFQ19TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAg LyoKKyAgICAgICAgICAgICAgICAgKiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4KKyAgICAgICAg ICAgICAgICAgKiBpZiBpdCBkb2VzIGl0IGlzIGxpa2VseSBhIGxpYmp4bCBkZWNvZGVyIGJ1Zwor ICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiQmFkIGxpYmp4bCBiYXNpYyBpbmZvIGV2ZW50XG4iKTsKKyAgICAgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF2 Y3R4LT5waXhfZm10ID0gbGlianhsX2dldF9waXhfZm10KGF2Y3R4LCAmY3R4LT5iYXNpY19pbmZv LCAmY3R4LT5qeGxfcGl4Zm10KTsKKyAgICAgICAgICAgIGlmIChhdmN0eC0+cGl4X2ZtdCA9PSBB Vl9QSVhfRk1UX05PTkUpIHsKKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkJhZCBsaWJqeGwgcGl4ZWwgZm9ybWF0XG4iKTsKKyAgICAgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldCA9IGZm X3NldF9kaW1lbnNpb25zKGF2Y3R4LCBjdHgtPmJhc2ljX2luZm8ueHNpemUsIGN0eC0+YmFzaWNf aW5mby55c2l6ZSk7CisgICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gcmV0OworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFdlIHJld2luZCB0aGUg ZGVjb2RlciBhbmQgYXNrIGZvciBldmVyeXRoaW5nIGFnYWluCisgICAgICAgICAgICAgKiBUaGlz IGZ1dHVyZXByb29mcyB0aGUgZGVjb2RlciBzaW5jZSBpdCB3aWxsIG1ha2UKKyAgICAgICAgICAg ICAqIGFkZGluZyBhIHBhcnNlciBvciBhIGRlZGljYXRlZCBkZW11eGVyIG11Y2ggZWFzaWVyCisg ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGJ1ZiA9IGF2cGt0LT5kYXRhOworICAgICAgICAg ICAgcmVtYWluaW5nID0gYXZwa3QtPnNpemU7CisgICAgICAgICAgICBKeGxEZWNvZGVyUmV3aW5k KGN0eC0+ZGVjb2Rlcik7CisgICAgICAgICAgICBjdHgtPmV2ZW50cyAmPSB+SlhMX0RFQ19CQVNJ Q19JTkZPOworICAgICAgICAgICAgaWYgKEp4bERlY29kZXJTdWJzY3JpYmVFdmVudHMoY3R4LT5k ZWNvZGVyLCBjdHgtPmV2ZW50cykgIT0gSlhMX0RFQ19TVUNDRVNTKSB7CisgICAgICAgICAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBzdWJzY3JpYmluZyB0byBKWEwg ZXZlbnRzIGFmdGVyIHJld2luZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Jf RVhURVJOQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg Y2FzZSBKWExfREVDX0NPTE9SX0VOQ09ESU5HOgorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfREVCVUcsICJDT0xPUl9FTkNPRElORyBldmVudCBlbWl0dGVkXG4iKTsKKyAgICAgICAg ICAgIGpyZXQgPSBKeGxEZWNvZGVyR2V0SUNDUHJvZmlsZVNpemUoY3R4LT5kZWNvZGVyLCAmY3R4 LT5qeGxfcGl4Zm10LCBKWExfQ09MT1JfUFJPRklMRV9UQVJHRVRfT1JJR0lOQUwsICZjdHgtPmlj Y3BfbGVuKTsKKyAgICAgICAgICAgIGlmIChqcmV0ID09IEpYTF9ERUNfU1VDQ0VTUyAmJiBjdHgt PmljY3BfbGVuID4gMCkgeworICAgICAgICAgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmY3R4LT5p Y2NwKTsKKyAgICAgICAgICAgICAgICBhdl9hc3NlcnQyKCFjdHgtPmljY3ApOworICAgICAgICAg ICAgICAgIGN0eC0+aWNjcCA9IGF2X2J1ZmZlcl9hbGxvYyhjdHgtPmljY3BfbGVuKTsKKyAgICAg ICAgICAgICAgICBpZiAoIWN0eC0+aWNjcCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKKyAgICAgICAgICAgICAgICBqcmV0ID0gSnhsRGVjb2RlckdldENvbG9y QXNJQ0NQcm9maWxlKGN0eC0+ZGVjb2RlciwgJmN0eC0+anhsX3BpeGZtdCwgSlhMX0NPTE9SX1BS T0ZJTEVfVEFSR0VUX09SSUdJTkFMLCBjdHgtPmljY3AtPmRhdGEsIGN0eC0+aWNjcF9sZW4pOwor ICAgICAgICAgICAgICAgIGlmIChqcmV0ICE9IEpYTF9ERUNfU1VDQ0VTUykKKyAgICAgICAgICAg ICAgICAgICAgYXZfZnJlZXAoJmN0eC0+aWNjcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBKWExfREVDX0ZSQU1FOgorICAgICAgICBjYXNlIEpY TF9ERUNfTkVFRF9JTUFHRV9PVVRfQlVGRkVSOgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAg ICAqIFdlIGRvbid0IGRvIHRoaXMgYXQgYmFzaWMgaW5mbyB0aW1lCisgICAgICAgICAgICAgKiBi ZWNhdXNlIGl0IHdpbGwgaGFwcGVuIGFnYWluIHdoZW4gd2UKKyAgICAgICAgICAgICAqIHJld2lu ZCBhbnl3YXkKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfREVCVUcsICIlcyBldmVudCBlbWl0dGVkXG4iLCBqcmV0ID09IEpYTF9ERUNfRlJBTUUgPyAi RlJBTUUiIDogIk5FRURfSU1BR0VfT1VUX0JVRkZFUiIpOworICAgICAgICAgICAgcmV0ID0gZmZf Z2V0X2J1ZmZlcihhdmN0eCwgZnJhbWUsIDApOworICAgICAgICAgICAgaWYgKHJldCA8IDApCisg ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIGlmIChKeGxEZWNvZGVyU2V0 SW1hZ2VPdXRDYWxsYmFjayhjdHgtPmRlY29kZXIsICZjdHgtPmp4bF9waXhmbXQsICZsaWJqeGxf cm93X2ZpbGwsIGZyYW1lKSAhPSBKWExfREVDX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkJhZCBsaWJqeGwgZGVjIG5lZWQgaW1hZ2Ugb3V0 IGJ1ZmZlciBldmVudFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJO QUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBK WExfREVDX0ZVTExfSU1BR0U6CisgICAgICAgICAgICAvKiBmdWxsIGltYWdlIGlzIG9uZSBmcmFt ZSwgZXZlbiBpZiBhbmltYXRlZCAqLworICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df REVCVUcsICJGVUxMX0lNQUdFIGV2ZW50IGVtaXR0ZWRcbiIpOworICAgICAgICAgICAgKmdvdF9m cmFtZSA9IDE7CisgICAgICAgICAgICBmcmFtZS0+cGljdF90eXBlID0gQVZfUElDVFVSRV9UWVBF X0k7CisgICAgICAgICAgICBmcmFtZS0+a2V5X2ZyYW1lID0gMTsKKyAgICAgICAgICAgIGlmIChj dHgtPmljY3ApIHsKKyAgICAgICAgICAgICAgICBBVkZyYW1lU2lkZURhdGEgKnNkID0gYXZfZnJh bWVfbmV3X3NpZGVfZGF0YV9mcm9tX2J1ZihmcmFtZSwgQVZfRlJBTUVfREFUQV9JQ0NfUFJPRklM RSwgY3R4LT5pY2NwKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNkKQorICAgICAgICAgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgICAgIC8qIG93bmVyc2hp cCBpcyB0cmFuc2ZlcmVkLCBhbmQgaXQgaXMgbm90IHJlZi1lZCAqLworICAgICAgICAgICAgICAg IGN0eC0+aWNjcCA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXZw a3QtPnNpemUgLSByZW1haW5pbmc7CisgICAgICAgIGNhc2UgSlhMX0RFQ19TVUNDRVNTOgorICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJTVUNDRVNTIGV2ZW50IGVtaXR0 ZWRcbiIpOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFRoZSBmaWxlIGhhcyBmaW5p c2hlZCBkZWNvZGluZworICAgICAgICAgICAgICogcmVzZXQgdGhlIGRlY29kZXIgdG8gbGV0IHVz CisgICAgICAgICAgICAgKiByZXVzZSBpdCBhZ2FpbiBmb3IgdGhlIG5leHQgaW1hZ2UKKyAgICAg ICAgICAgICAqLworICAgICAgICAgICAgSnhsRGVjb2RlclJlc2V0KGN0eC0+ZGVjb2Rlcik7Cisg ICAgICAgICAgICBsaWJqeGxfaW5pdF9qeGxfZGVjb2RlcihhdmN0eCk7CisgICAgICAgICAgICBi dWYgPSBhdnBrdC0+ZGF0YTsKKyAgICAgICAgICAgIHJlbWFpbmluZyA9IGF2cGt0LT5zaXplOwor ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJCYWQgbGlianhsIGV2ZW50OiAlZFxuIiwganJldCk7 CisgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgIH0KKyAgICB9 Cit9CisKK3N0YXRpYyBhdl9jb2xkIGludCBsaWJqeGxfZGVjb2RlX2Nsb3NlKEFWQ29kZWNDb250 ZXh0ICphdmN0eCkKK3sKKyAgICBMaWJKeGxEZWNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJp dl9kYXRhOworICAgIGlmIChjdHgtPnJ1bm5lcikKKyAgICAgICAgSnhsVGhyZWFkUGFyYWxsZWxS dW5uZXJEZXN0cm95KGN0eC0+cnVubmVyKTsKKyAgICBjdHgtPnJ1bm5lciA9IE5VTEw7CisgICAg aWYgKGN0eC0+ZGVjb2RlcikKKyAgICAgICAgSnhsRGVjb2RlckRlc3Ryb3koY3R4LT5kZWNvZGVy KTsKKyAgICBjdHgtPmRlY29kZXIgPSBOVUxMOworICAgIGF2X2J1ZmZlcl91bnJlZigmY3R4LT5p Y2NwKTsKKyAgICByZXR1cm4gMDsKK30KKworY29uc3QgRkZDb2RlYyBmZl9saWJqeGxfZGVjb2Rl ciA9IHsKKyAgICAucC5uYW1lICAgICAgICAgICA9ICJsaWJqeGwiLAorICAgIC5wLmxvbmdfbmFt ZSAgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoImxpYmp4bCBKUEVHIFhMIiksCisgICAgLnAu dHlwZSAgICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgLnAuaWQgICAgICAgICAg ICAgPSBBVl9DT0RFQ19JRF9KUEVHWEwsCisgICAgLnByaXZfZGF0YV9zaXplICAgPSBzaXplb2Yo TGliSnhsRGVjb2RlQ29udGV4dCksCisgICAgLmluaXQgICAgICAgICAgICAgPSBsaWJqeGxfZGVj b2RlX2luaXQsCisgICAgLmRlY29kZSAgICAgICAgICAgPSBsaWJqeGxfZGVjb2RlX2ZyYW1lLAor ICAgIC5jbG9zZSAgICAgICAgICAgID0gbGlianhsX2RlY29kZV9jbG9zZSwKKyAgICAucC5jYXBh YmlsaXRpZXMgICA9IEFWX0NPREVDX0NBUF9EUjEgfCBBVl9DT0RFQ19DQVBfT1RIRVJfVEhSRUFE UywKKyAgICAuY2Fwc19pbnRlcm5hbCAgICA9IEZGX0NPREVDX0NBUF9BVVRPX1RIUkVBRFMgfCBG Rl9DT0RFQ19DQVBfSU5JVF9DTEVBTlVQLAorICAgIC5wLndyYXBwZXJfbmFtZSAgID0gImxpYmp4 bCIsCit9OwotLSAKMi4zNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcu b3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8g dW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1 ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==