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 B4C70402F8 for ; Wed, 23 Mar 2022 10:40:50 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B821768B174; Wed, 23 Mar 2022 12:40:40 +0200 (EET) Received: from mail-qk1-f175.google.com (mail-qk1-f175.google.com [209.85.222.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 00A7168B10D for ; Wed, 23 Mar 2022 12:40:33 +0200 (EET) Received: by mail-qk1-f175.google.com with SMTP id g8so704701qke.2 for ; Wed, 23 Mar 2022 03:40:33 -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=gePovDyQ4Xd1v8aIMiZUWIdSkp//XOOu4vUmsam+z5I=; b=FkNtmDKEQwnyMwpekASkCqreRcsPdFNRKGUWdCCODkFTIY6xAc2tqQNEjVPRVCL/pi iOAm77Xy7CWmEVX/p1Sbq6Whiho96o8JCScXtKD1hpMBI1WIS5iL5RDP4sVzvvwEVlhH fa0C5I+WtQFIpzBem4Cd8jkdpb+4uaD8WLzlrQ9BjcLK8rei0weDRjAJb6kdlPugJUrR Zz9G6jsVpFgmfOyYx3jmZMCI/EZZBOnHRXKKNVRNuMCStJ6F091aNThPrKWBEFe45X8K wLALWfRhkAC94h3gQEVEwHwMc582QrNKAohB9DCJv00AAxDZsLzslVtHRGkyqeVUXcis l2aw== 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=gePovDyQ4Xd1v8aIMiZUWIdSkp//XOOu4vUmsam+z5I=; b=kFooOctuYmrFXS9knl4y3AcgCpjl8idCF3MugN06mDPKm3KAx7qzmTL1p3+gQ6US2L jrBOs76vtlxfaAyHHbGSLsL+MO5QahQKGOsEakL8OSKT895KghLi404KZ+VUkEQQw8eQ U+6PZgdaIx5cMX/16dDnUPTW518mYxs0ihsDT2NPdaNuNupReMFJBLn043/4YdxcbF2/ orGBiOBfvxfAD5PCemp7cDGl9x2ItP0/LegBvAETCENktw5s9dhyuJYMIalsroRstdYk ZCHd3GhukU8QTiwYHzc9fYqoFDwYYxr9T6TsXiybgwdWGdgZHf1cwEoiQrQGqjtu6wkR Q08Q== X-Gm-Message-State: AOAM5304dZhXyEp8Ny5u2ZbdGfN0N6Ya049+MEnbYduWWplrOPzh185Y WXlrJcq0UiOZXvYDPa8Zy14JjmEyi5I= X-Google-Smtp-Source: ABdhPJwyhgMWOQBbT3m1VltKuum+WDPV+l6Me6F/AIvpoyXiBb8XdWp3MthGj3MWUJHTwxzFgn7jcg== X-Received: by 2002:a37:a845:0:b0:67d:213c:9541 with SMTP id r66-20020a37a845000000b0067d213c9541mr18106043qke.32.1648032032230; Wed, 23 Mar 2022 03:40:32 -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 d12-20020a05620a158c00b00648ec3fcbdfsm9918274qkk.72.2022.03.23.03.40.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Mar 2022 03:40:31 -0700 (PDT) From: Leo Izen To: ffmpeg-devel@ffmpeg.org Date: Wed, 23 Mar 2022 06:40:00 -0400 Message-Id: <20220323104003.2906-2-leo.izen@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220323104003.2906-1-leo.izen@gmail.com> References: <20220323104003.2906-1-leo.izen@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v8 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 ICAgICAgIHwgIDQ4ICsrKysrKwogbGliYXZjb2RlYy9saWJqeGxkZWMuYyAgICB8IDMwMiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA0MzUg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlianhsLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2xpYmp4bC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZjb2RlYy9saWJqeGxkZWMuYwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRB SU5FUlMKaW5kZXggMmUwZGU5ZTIyNC4uODc1ZDI1Y2E4OSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5F UlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE5NSw2ICsxOTUsNyBAQCBDb2RlY3M6CiAgIGxpYmNv ZGVjMi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9tYXMgSMOkcmRpbgogICBsaWJkaXJh YyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdmlkIENvbnJhZAogICBsaWJkYXZzMi5j ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh1aXdlbiBSZW4KKyAgbGlianhsKi5jLCBsaWJq eGwuaCAgICAgICAgICAgICAgICAgICBMZW8gSXplbgogICBsaWJnc20uYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE1pY2hlbCBCYXJkaWF1eAogICBsaWJrdmF6YWFyLmMgICAgICAgICAg ICAgICAgICAgICAgICAgIEFydHR1IFlsw6QtT3V0aW5lbgogICBsaWJvcGVuaDI2NGVuYy5jICAg ICAgICAgICAgICAgICAgICAgIE1hcnRpbiBTdG9yc2pvLCBMaW5qaWUgRnUKZGlmZiAtLWdpdCBh L2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBhNzk1M2ZmYzE2Li40ZTI4MTE0ZDljIDEwMDc1 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 bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYWQyMjk3MWZiYgotLS0gL2Rldi9udWxsCisr KyBiL2xpYmF2Y29kZWMvbGlianhsZGVjLmMKQEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBKUEVH IFhMIGRlY29kaW5nIHN1cHBvcnQgdmlhIGxpYmp4bAorICogQ29weXJpZ2h0IChjKSAyMDIxIExl byBJemVuIDxsZW8uaXplbkBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQorICovCisKKy8qKgorICogQGZpbGUKKyAqIEpQRUcgWEwgZGVjb2RlciB1c2luZyBsaWJq eGwKKyAqLworCisjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCisjaW5jbHVkZSAibGli YXZ1dGlsL2NvbW1vbi5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9lcnJvci5oIgorI2luY2x1ZGUg ImxpYmF2dXRpbC9tZW0uaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCisjaW5jbHVkZSAi bGliYXZ1dGlsL3BpeGRlc2MuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4Zm10LmgiCisjaW5j bHVkZSAibGliYXZ1dGlsL2ZyYW1lLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL3ZlcnNpb24uaCIK KworI2luY2x1ZGUgImF2Y29kZWMuaCIKKyNpbmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIgorI2lu Y2x1ZGUgImludGVybmFsLmgiCisKKyNpbmNsdWRlIDxqeGwvZGVjb2RlLmg+CisjaW5jbHVkZSA8 anhsL3RocmVhZF9wYXJhbGxlbF9ydW5uZXIuaD4KKyNpbmNsdWRlICJsaWJqeGwuaCIKKwordHlw ZWRlZiBzdHJ1Y3QgTGliSnhsRGVjb2RlQ29udGV4dCB7CisgICAgdm9pZCAqcnVubmVyOworICAg IEp4bERlY29kZXIgKmRlY29kZXI7CisgICAgSnhsQmFzaWNJbmZvIGJhc2ljX2luZm87CisgICAg SnhsUGl4ZWxGb3JtYXQganhsX3BpeGZtdDsKKyAgICBKeGxEZWNvZGVyU3RhdHVzIGV2ZW50czsK KyAgICB1aW50OF90ICppY2NwOworICAgIHNpemVfdCBpY2NwX2xlbjsKK30gTGliSnhsRGVjb2Rl Q29udGV4dDsKKworc3RhdGljIGludCBsaWJqeGxfaW5pdF9qeGxfZGVjb2RlcihBVkNvZGVjQ29u dGV4dCAqYXZjdHgpCit7CisgICAgTGliSnhsRGVjb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnBy aXZfZGF0YTsKKworICAgIGN0eC0+ZXZlbnRzID0gSlhMX0RFQ19CQVNJQ19JTkZPIHwgSlhMX0RF Q19GVUxMX0lNQUdFIHwgSlhMX0RFQ19GUkFNRSB8IEpYTF9ERUNfQ09MT1JfRU5DT0RJTkc7Cisg ICAgaWYgKEp4bERlY29kZXJTdWJzY3JpYmVFdmVudHMoY3R4LT5kZWNvZGVyLCBjdHgtPmV2ZW50 cykgIT0gSlhMX0RFQ19TVUNDRVNTKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiRXJyb3Igc3Vic2NyaWJpbmcgdG8gSlhMIGV2ZW50c1xuIik7CisgICAgICAgIHJldHVy biBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIGlmIChKeGxEZWNvZGVyU2V0UGFyYWxs ZWxSdW5uZXIoY3R4LT5kZWNvZGVyLCBKeGxUaHJlYWRQYXJhbGxlbFJ1bm5lciwgY3R4LT5ydW5u ZXIpICE9IEpYTF9ERUNfU1VDQ0VTUykgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkZhaWxlZCB0byBzZXQgSnhsVGhyZWFkUGFyYWxsZWxSdW5uZXJcbiIpOworICAgICAg ICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICBtZW1zZXQoJmN0eC0+YmFz aWNfaW5mbywgMCwgc2l6ZW9mKEp4bEJhc2ljSW5mbykpOworICAgIG1lbXNldCgmY3R4LT5qeGxf cGl4Zm10LCAwLCBzaXplb2YoSnhsUGl4ZWxGb3JtYXQpKTsKKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIGF2X2NvbGQgaW50IGxpYmp4bF9kZWNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZj dHgpCit7CisgICAgTGliSnhsRGVjb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsK KyAgICBKeGxNZW1vcnlNYW5hZ2VyIG1hbmFnZXI7CisKKyAgICBmZl9saWJqeGxfaW5pdF9tZW1v cnlfbWFuYWdlcigmbWFuYWdlcik7CisgICAgY3R4LT5kZWNvZGVyID0gSnhsRGVjb2RlckNyZWF0 ZSgmbWFuYWdlcik7CisgICAgaWYgKCFjdHgtPmRlY29kZXIpIHsKKyAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRlIEp4bERlY29kZXJcbiIpOworICAg ICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICBjdHgtPnJ1bm5lciA9 IEp4bFRocmVhZFBhcmFsbGVsUnVubmVyQ3JlYXRlKCZtYW5hZ2VyLCBmZl9saWJqeGxfZ2V0X3Ro cmVhZGNvdW50KGF2Y3R4LT50aHJlYWRfY291bnQpKTsKKyAgICBpZiAoIWN0eC0+cnVubmVyKSB7 CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBK eGxUaHJlYWRQYXJhbGxlbFJ1bm5lclxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOworICAgIH0KKworICAgIHJldHVybiBsaWJqeGxfaW5pdF9qeGxfZGVjb2RlcihhdmN0eCk7 Cit9CisKK3N0YXRpYyBlbnVtIEFWUGl4ZWxGb3JtYXQgbGlianhsX2dldF9waXhfZm10KEFWQ29k ZWNDb250ZXh0ICphdmN0eCwgSnhsQmFzaWNJbmZvICpiYXNpY19pbmZvLCBKeGxQaXhlbEZvcm1h dCAqZm9ybWF0KQoreworICAgIGZvcm1hdC0+ZW5kaWFubmVzcyA9IEpYTF9OQVRJVkVfRU5ESUFO OworICAgIGZvcm1hdC0+bnVtX2NoYW5uZWxzID0gYmFzaWNfaW5mby0+bnVtX2NvbG9yX2NoYW5u ZWxzICsgKGJhc2ljX2luZm8tPmFscGhhX2JpdHMgPiAwKTsKKyAgICAvKiBhdl9tYWxsb2MgaGFu ZGxlcyBhbGlnbm1lbnQgYWxyZWFkeSAqLworICAgIGZvcm1hdC0+YWxpZ24gPSAxOworICAgIC8q IEdyYXkgKi8KKyAgICBpZiAoYmFzaWNfaW5mby0+bnVtX2NvbG9yX2NoYW5uZWxzID09IDEpIHsK KyAgICAgICAgaWYgKGJhc2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA8PSA4KSB7CisgICAgICAg ICAgICBmb3JtYXQtPmRhdGFfdHlwZSA9IEpYTF9UWVBFX1VJTlQ4OworICAgICAgICAgICAgcmV0 dXJuIGJhc2ljX2luZm8tPmFscGhhX2JpdHMgPyBBVl9QSVhfRk1UX1lBOCA6IEFWX1BJWF9GTVRf R1JBWTg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJhc2ljX2luZm8tPmV4cG9uZW50X2JpdHNf cGVyX3NhbXBsZSB8fCBiYXNpY19pbmZvLT5iaXRzX3Blcl9zYW1wbGUgPiAxNikgeworICAgICAg ICAgICAgaWYgKGJhc2ljX2luZm8tPmFscGhhX2JpdHMpCisgICAgICAgICAgICAgICAgcmV0dXJu IEFWX1BJWF9GTVRfTk9ORTsKKyAgICAgICAgICAgIGZvcm1hdC0+ZGF0YV90eXBlID0gSlhMX1RZ UEVfRkxPQVQ7CisgICAgICAgICAgICByZXR1cm4gQVZfUElYX0ZNVF9HUkFZRjMyOworICAgICAg ICB9CisgICAgICAgIGZvcm1hdC0+ZGF0YV90eXBlID0gSlhMX1RZUEVfVUlOVDE2OworICAgICAg ICByZXR1cm4gYmFzaWNfaW5mby0+YWxwaGFfYml0cyA/IEFWX1BJWF9GTVRfWUExNiA6IEFWX1BJ WF9GTVRfR1JBWTE2OworICAgIH0KKyAgICAvKiByZ2Igb25seSAqLworICAgIC8qIGxpYmp4bCBv bmx5IHN1cHBvcnRzIHBhY2tlZCBSR0IgYW5kIGdyYXkgb3V0cHV0IGF0IHRoZSBtb21lbnQgKi8K KyAgICBpZiAoYmFzaWNfaW5mby0+bnVtX2NvbG9yX2NoYW5uZWxzID09IDMpIHsKKyAgICAgICAg aWYgKGJhc2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA8PSA4KSB7CisgICAgICAgICAgICBmb3Jt YXQtPmRhdGFfdHlwZSA9IEpYTF9UWVBFX1VJTlQ4OworICAgICAgICAgICAgcmV0dXJuIGJhc2lj X2luZm8tPmFscGhhX2JpdHMgPyBBVl9QSVhfRk1UX1JHQkEgOiBBVl9QSVhfRk1UX1JHQjI0Owor ICAgICAgICB9CisgICAgICAgIGlmIChiYXNpY19pbmZvLT5iaXRzX3Blcl9zYW1wbGUgPiAxNikK KyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJEb3duc2FtcGxpbmcg bGFyZ2VyIGludGVnZXIgdG8gMTYtYml0IHZpYSBsaWJqeGxcbiIpOworICAgICAgICBpZiAoYmFz aWNfaW5mby0+ZXhwb25lbnRfYml0c19wZXJfc2FtcGxlKQorICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfV0FSTklORywgIkRvd25zYW1wbGluZyBmbG9hdCB0byAxNi1iaXQgaW50ZWdl ciB2aWEgbGlianhsXG4iKTsKKyAgICAgICAgZm9ybWF0LT5kYXRhX3R5cGUgPSBKWExfVFlQRV9V SU5UMTY7CisgICAgICAgIHJldHVybiBiYXNpY19pbmZvLT5hbHBoYV9iaXRzID8gQVZfUElYX0ZN VF9SR0JBNjQgOiBBVl9QSVhfRk1UX1JHQjQ4OworICAgIH0KKyAgICByZXR1cm4gQVZfUElYX0ZN VF9OT05FOworfQorCitzdGF0aWMgdm9pZCBsaWJqeGxfcm93X2ZpbGwodm9pZCAqYXZmcmFtZSwg c2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3QgbnVtX3BpeGVscywgY29uc3Qgdm9pZCAqcGl4ZWxz KQoreworICAgIEFWRnJhbWUgKmZyYW1lID0gYXZmcmFtZTsKKyAgICBpbnQgYnl0ZXMgPSBhdl9n ZXRfcGFkZGVkX2JpdHNfcGVyX3BpeGVsKGF2X3BpeF9mbXRfZGVzY19nZXQoZnJhbWUtPmZvcm1h dCkpIC8gODsKKyAgICBzaXplX3Qgb2Zmc2V0ID0geSAqIGZyYW1lLT5saW5lc2l6ZVswXSArIHgg KiBieXRlczsKKyAgICBtZW1jcHkoZnJhbWUtPmRhdGFbMF0gKyBvZmZzZXQsIHBpeGVscywgbnVt X3BpeGVscyAqIGJ5dGVzKTsKK30KKworc3RhdGljIGludCBsaWJqeGxfZGVjb2RlX2ZyYW1lKEFW Q29kZWNDb250ZXh0ICphdmN0eCwgdm9pZCAqYXZmcmFtZSwgaW50ICpnb3RfZnJhbWUsIEFWUGFj a2V0ICphdnBrdCkKK3sKKyAgICBMaWJKeGxEZWNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJp dl9kYXRhOworICAgIHVpbnQ4X3QgKmJ1ZiA9IGF2cGt0LT5kYXRhOworICAgIHNpemVfdCByZW1h aW5pbmcgPSBhdnBrdC0+c2l6ZTsKKyAgICBBVkZyYW1lICpmcmFtZSA9IGF2ZnJhbWU7CisgICAg SnhsRGVjb2RlclN0YXR1cyBzdGF0dXM7CisgICAgaW50IGZmX3N0YXR1czsKKyAgICAqZ290X2Zy YW1lID0gMDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGl0IG9u bHkgcmV0dXJucyBKWExfREVDX0VSUk9SIGhlcmUgaWYgdGhlIGlucHV0CisgICAgICAgICAqIHdh cyBub3QgcmVsZWFzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGlzIHdhcyBjYWxsZWQKKyAgICAg ICAgICogaWYgdGhpcyBoYXBwZW5zLCBpdCdzIGEgcHJvZ3JhbW1lciBlcnJvcgorICAgICAgICAg Ki8KKyAgICAgICAgc3RhdHVzID0gSnhsRGVjb2RlclNldElucHV0KGN0eC0+ZGVjb2RlciwgYnVm LCByZW1haW5pbmcpOworICAgICAgICBhdl9hc3NlcnQwKHN0YXR1cyAhPSBKWExfREVDX0VSUk9S KTsKKworICAgICAgICBzdGF0dXMgPSBKeGxEZWNvZGVyUHJvY2Vzc0lucHV0KGN0eC0+ZGVjb2Rl cik7CisgICAgICAgIC8qCisgICAgICAgICAqIEp4bERlY29kZXJSZWxlYXNlSW5wdXQgcmV0dXJu cyB0aGUgbnVtYmVyCisgICAgICAgICAqIG9mIGJ5dGVzIHJlbWFpbmluZyB0byBiZSByZWFkLCBy YXRoZXIgdGhhbgorICAgICAgICAgKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaXQgZGlkIHJl YWQKKyAgICAgICAgICovCisgICAgICAgIHJlbWFpbmluZyA9IEp4bERlY29kZXJSZWxlYXNlSW5w dXQoY3R4LT5kZWNvZGVyKTsKKyAgICAgICAgYnVmID0gYXZwa3QtPmRhdGEgKyBhdnBrdC0+c2l6 ZSAtIHJlbWFpbmluZzsKKworICAgICAgICBzd2l0Y2goc3RhdHVzKSB7CisgICAgICAgIGNhc2Ug SlhMX0RFQ19FUlJPUjoKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi VW5rbm93biBsaWJqeGwgZGVjb2RlIGVycm9yXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SX0VYVEVSTkFMOworICAgICAgICBjYXNlIEpYTF9ERUNfTkVFRF9NT1JFX0lOUFVUOgorICAg ICAgICAgICAgaWYgKHJlbWFpbmluZyA9PSAwKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfV0FSTklORywgIlVuZXhwZWN0ZWQgZW5kIG9mIEpYTCBjb2Rlc3RyZWFtXG4i KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFQUdBSU4pOworICAgICAgICAgICAg fQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJORUVEX01PUkVfSU5Q VVQgZXZlbnQgZW1pdHRlZFxuIik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2Fz ZSBKWExfREVDX0JBU0lDX0lORk86CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19E RUJVRywgIkJBU0lDX0lORk8gZXZlbnQgZW1pdHRlZFxuIik7CisgICAgICAgICAgICBpZiAoSnhs RGVjb2RlckdldEJhc2ljSW5mbyhjdHgtPmRlY29kZXIsICZjdHgtPmJhc2ljX2luZm8pICE9IEpY TF9ERUNfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICog dGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuCisgICAgICAgICAgICAgICAgICogaWYgaXQgZG9lcyBp dCBpcyBsaWtlbHkgYSBsaWJqeGwgZGVjb2RlciBidWcKKyAgICAgICAgICAgICAgICAgKi8KKyAg ICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkJhZCBsaWJqeGwgYmFz aWMgaW5mbyBldmVudFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJO QUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdmN0eC0+cGl4X2ZtdCA9IGxpYmp4bF9n ZXRfcGl4X2ZtdChhdmN0eCwgJmN0eC0+YmFzaWNfaW5mbywgJmN0eC0+anhsX3BpeGZtdCk7Cisg ICAgICAgICAgICBpZiAoYXZjdHgtPnBpeF9mbXQgPT0gQVZfUElYX0ZNVF9OT05FKSB7CisgICAg ICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJCYWQgbGlianhsIHBpeGVs IGZvcm1hdFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBmZl9zdGF0dXMgPSBmZl9zZXRfZGltZW5zaW9ucyhh dmN0eCwgY3R4LT5iYXNpY19pbmZvLnhzaXplLCBjdHgtPmJhc2ljX2luZm8ueXNpemUpOworICAg ICAgICAgICAgaWYgKGZmX3N0YXR1cyA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGZmX3N0 YXR1czsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBXZSByZXdpbmQgdGhlIGRlY29k ZXIgYW5kIGFzayBmb3IgZXZlcnl0aGluZyBhZ2FpbgorICAgICAgICAgICAgICogVGhpcyBmdXR1 cmVwcm9vZnMgdGhlIGRlY29kZXIgc2luY2UgaXQgd2lsbCBtYWtlCisgICAgICAgICAgICAgKiBh ZGRpbmcgYSBwYXJzZXIgb3IgYSBkZWRpY2F0ZWQgZGVtdXhlciBtdWNoIGVhc2llcgorICAgICAg ICAgICAgICovCisgICAgICAgICAgICBidWYgPSBhdnBrdC0+ZGF0YTsKKyAgICAgICAgICAgIHJl bWFpbmluZyA9IGF2cGt0LT5zaXplOworICAgICAgICAgICAgSnhsRGVjb2RlclJld2luZChjdHgt PmRlY29kZXIpOworICAgICAgICAgICAgY3R4LT5ldmVudHMgJj0gfkpYTF9ERUNfQkFTSUNfSU5G TzsKKyAgICAgICAgICAgIGlmIChKeGxEZWNvZGVyU3Vic2NyaWJlRXZlbnRzKGN0eC0+ZGVjb2Rl ciwgY3R4LT5ldmVudHMpICE9IEpYTF9ERUNfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRXJyb3Igc3Vic2NyaWJpbmcgdG8gSlhMIGV2ZW50 cyBhZnRlciByZXdpbmRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2Ug SlhMX0RFQ19DT0xPUl9FTkNPRElORzoKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0RFQlVHLCAiQ09MT1JfRU5DT0RJTkcgZXZlbnQgZW1pdHRlZFxuIik7CisgICAgICAgICAgICBz dGF0dXMgPSBKeGxEZWNvZGVyR2V0SUNDUHJvZmlsZVNpemUoY3R4LT5kZWNvZGVyLCAmY3R4LT5q eGxfcGl4Zm10LCBKWExfQ09MT1JfUFJPRklMRV9UQVJHRVRfT1JJR0lOQUwsICZjdHgtPmljY3Bf bGVuKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gSlhMX0RFQ19TVUNDRVNTICYmIGN0eC0+ aWNjcF9sZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGN0eC0+aWNjcCkKKyAgICAgICAg ICAgICAgICAgICAgYXZfZnJlZXAoJmN0eC0+aWNjcCk7CisgICAgICAgICAgICAgICAgY3R4LT5p Y2NwID0gYXZfbWFsbG9jKGN0eC0+aWNjcF9sZW4pOworICAgICAgICAgICAgICAgIGlmICghY3R4 LT5pY2NwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAg ICAgICAgICAgICAgIHN0YXR1cyA9IEp4bERlY29kZXJHZXRDb2xvckFzSUNDUHJvZmlsZShjdHgt PmRlY29kZXIsICZjdHgtPmp4bF9waXhmbXQsIEpYTF9DT0xPUl9QUk9GSUxFX1RBUkdFVF9PUklH SU5BTCwgY3R4LT5pY2NwLCBjdHgtPmljY3BfbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoc3Rh dHVzICE9IEpYTF9ERUNfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgICAgYXZfZnJlZXAoJmN0 eC0+aWNjcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg Y2FzZSBKWExfREVDX0ZSQU1FOgorICAgICAgICBjYXNlIEpYTF9ERUNfTkVFRF9JTUFHRV9PVVRf QlVGRkVSOgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFdlIGRvbid0IGRvIHRoaXMg YXQgYmFzaWMgaW5mbyB0aW1lCisgICAgICAgICAgICAgKiBiZWNhdXNlIGl0IHdpbGwgaGFwcGVu IGFnYWluIHdoZW4gd2UKKyAgICAgICAgICAgICAqIHJld2luZCBhbnl3YXkKKyAgICAgICAgICAg ICAqLworICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICIlcyBldmVudCBl bWl0dGVkXG4iLCBzdGF0dXMgPT0gSlhMX0RFQ19GUkFNRSA/ICJGUkFNRSIgOiAiTkVFRF9JTUFH RV9PVVRfQlVGRkVSIik7CisgICAgICAgICAgICBmZl9zdGF0dXMgPSBmZl9nZXRfYnVmZmVyKGF2 Y3R4LCBmcmFtZSwgMCk7CisgICAgICAgICAgICBpZiAoZmZfc3RhdHVzIDwgMCkKKyAgICAgICAg ICAgICAgICByZXR1cm4gZmZfc3RhdHVzOworICAgICAgICAgICAgaWYgKEp4bERlY29kZXJTZXRJ bWFnZU91dENhbGxiYWNrKGN0eC0+ZGVjb2RlciwgJmN0eC0+anhsX3BpeGZtdCwgJmxpYmp4bF9y b3dfZmlsbCwgZnJhbWUpICE9IEpYTF9ERUNfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQmFkIGxpYmp4bCBkZWMgbmVlZCBpbWFnZSBvdXQg YnVmZmVyIGV2ZW50XG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5B TDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIEpY TF9ERUNfRlVMTF9JTUFHRToKKyAgICAgICAgICAgIC8qIGZ1bGwgaW1hZ2UgaXMgb25lIGZyYW1l LCBldmVuIGlmIGFuaW1hdGVkICovCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19E RUJVRywgIkZVTExfSU1BR0UgZXZlbnQgZW1pdHRlZFxuIik7CisgICAgICAgICAgICAqZ290X2Zy YW1lID0gMTsKKyAgICAgICAgICAgIGZyYW1lLT5waWN0X3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVf STsKKyAgICAgICAgICAgIGZyYW1lLT5rZXlfZnJhbWUgPSAxOworICAgICAgICAgICAgaWYgKGN0 eC0+aWNjcCkgeworICAgICAgICAgICAgICAgIEFWRnJhbWVTaWRlRGF0YSAqc2QgPSBhdl9mcmFt ZV9uZXdfc2lkZV9kYXRhKGZyYW1lLCBBVl9GUkFNRV9EQVRBX0lDQ19QUk9GSUxFLCBjdHgtPmlj Y3BfbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNkKQorICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgICAgIG1lbWNweShzZC0+ZGF0YSwg Y3R4LT5pY2NwLCBjdHgtPmljY3BfbGVuKTsKKyAgICAgICAgICAgICAgICBhdl9kaWN0X3NldCgm c2QtPm1ldGFkYXRhLCAibmFtZSIsICIiLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHJldHVybiBhdnBrdC0+c2l6ZSAtIHJlbWFpbmluZzsKKyAgICAgICAgY2FzZSBKWExfREVDX1NV Q0NFU1M6CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIlNVQ0NFU1Mg ZXZlbnQgZW1pdHRlZFxuIik7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGhlIGZp bGUgaGFzIGZpbmlzaGVkIGRlY29kaW5nCisgICAgICAgICAgICAgKiByZXNldCB0aGUgZGVjb2Rl ciB0byBsZXQgdXMKKyAgICAgICAgICAgICAqIHJldXNlIGl0IGFnYWluIGZvciB0aGUgbmV4dCBp bWFnZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBKeGxEZWNvZGVyUmVzZXQoY3R4LT5k ZWNvZGVyKTsKKyAgICAgICAgICAgIGxpYmp4bF9pbml0X2p4bF9kZWNvZGVyKGF2Y3R4KTsKKyAg ICAgICAgICAgIGJ1ZiA9IGF2cGt0LT5kYXRhOworICAgICAgICAgICAgcmVtYWluaW5nID0gYXZw a3QtPnNpemU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkJhZCBsaWJqeGwgZXZlbnQ6ICVk XG4iLCBzdGF0dXMpOworICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAg ICAgICB9CisgICAgfQorfQorCitzdGF0aWMgYXZfY29sZCBpbnQgbGlianhsX2RlY29kZV9jbG9z ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCit7CisgICAgTGliSnhsRGVjb2RlQ29udGV4dCAqY3R4 ID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBpZiAoY3R4LT5ydW5uZXIpCisgICAgICAgIEp4bFRo cmVhZFBhcmFsbGVsUnVubmVyRGVzdHJveShjdHgtPnJ1bm5lcik7CisgICAgY3R4LT5ydW5uZXIg PSBOVUxMOworICAgIGlmIChjdHgtPmRlY29kZXIpCisgICAgICAgIEp4bERlY29kZXJEZXN0cm95 KGN0eC0+ZGVjb2Rlcik7CisgICAgY3R4LT5kZWNvZGVyID0gTlVMTDsKKyAgICBpZiAoY3R4LT5p Y2NwKQorICAgICAgICBhdl9mcmVlcCgmY3R4LT5pY2NwKTsKKyAgICByZXR1cm4gMDsKK30KKwor Y29uc3QgRkZDb2RlYyBmZl9saWJqeGxfZGVjb2RlciA9IHsKKyAgICAucC5uYW1lICAgICAgICAg ICA9ICJsaWJqeGwiLAorICAgIC5wLmxvbmdfbmFtZSAgICAgID0gTlVMTF9JRl9DT05GSUdfU01B TEwoImxpYmp4bCBKUEVHIFhMIiksCisgICAgLnAudHlwZSAgICAgICAgICAgPSBBVk1FRElBX1RZ UEVfVklERU8sCisgICAgLnAuaWQgICAgICAgICAgICAgPSBBVl9DT0RFQ19JRF9KUEVHWEwsCisg ICAgLnByaXZfZGF0YV9zaXplICAgPSBzaXplb2YoTGliSnhsRGVjb2RlQ29udGV4dCksCisgICAg LmluaXQgICAgICAgICAgICAgPSBsaWJqeGxfZGVjb2RlX2luaXQsCisgICAgLmRlY29kZSAgICAg ICAgICAgPSBsaWJqeGxfZGVjb2RlX2ZyYW1lLAorICAgIC5jbG9zZSAgICAgICAgICAgID0gbGli anhsX2RlY29kZV9jbG9zZSwKKyAgICAucC5jYXBhYmlsaXRpZXMgICA9IEFWX0NPREVDX0NBUF9E UjEgfCBBVl9DT0RFQ19DQVBfT1RIRVJfVEhSRUFEUywKKyAgICAuY2Fwc19pbnRlcm5hbCAgICA9 IEZGX0NPREVDX0NBUF9BVVRPX1RIUkVBRFMgfCBGRl9DT0RFQ19DQVBfSU5JVF9DTEVBTlVQLAor ICAgIC5wLndyYXBwZXJfbmFtZSAgID0gImxpYmp4bCIsCit9OwotLSAKMi4zNS4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFp bGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJv dmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0 ICJ1bnN1YnNjcmliZSIuCg==