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 2D7BF411BD for ; Sun, 17 Apr 2022 13:23:35 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CED0568B2FD; Sun, 17 Apr 2022 16:22:57 +0300 (EEST) Received: from mail-qv1-f48.google.com (mail-qv1-f48.google.com [209.85.219.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 609DA68B2C7 for ; Sun, 17 Apr 2022 16:22:50 +0300 (EEST) Received: by mail-qv1-f48.google.com with SMTP id a10so9386306qvm.8 for ; Sun, 17 Apr 2022 06:22:50 -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=DyXZlKBLlWnKsgCqQx+CM+QRiFG149oIefMgq9kg20A=; b=kpu9l1Vb7EAnix1gIEDq69eVxwjAsWGCuILn2kNwn4FycVs3iJ3E0sXtXR64XGZ0Q2 08zFfqjOh/FPhTvQFGlrsGGzU8+qBL+Euex50ZeC8lGa7MFJZ/UKTe8XfPT7XZSOoMfp UlAl/TXDRHC4peQbDMNP6RCLxJcj7skaQanKPSnPTnrk7kstpEuftWRUb71HMI1jdETm q4Tc2mOHTANz8ZY90cht9BLiZYQE2jBAg2VFPdDiu7bQrNmv6w1DTwuzyIzUlb2xD71y g1QbIEyO8Y7CUkBBClUWENgFFisHF7HPh4GvqSua1WiWCUaD4CWEcvKwxRU4OfEgNPc8 Ce3Q== 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=DyXZlKBLlWnKsgCqQx+CM+QRiFG149oIefMgq9kg20A=; b=L4gYzosX4yjurTdbXA4TLahSVJdBLWAoPSZHO7B280f2nJs8rZ9j1duuRKwEWfdPAJ OIFrtoY/SmIYk9WOIw1Yw4+YBnQ06YSxLG+F800m3MsDEFP6g/EkiYHR3MdqJcjttgaA HtolKM4u/b7Wz3gdqwHqTY7pC2Qhnrj64jP5sFqOl8HqOAzrOWMsyC39yxo5RcY8USig ZMDA61CA85ZhgNlNACRIXAT6Z77573ZjShDaoj9/AsVNYQx26OilIHQ0vffHmLI0GOgR ncZxp4Wz3AmxCT35bjJ0K13zj/Ssf6CUlPMQK90MJfbh+n8oQ4YrYdcU4UoPxvRM7G+x zHEg== X-Gm-Message-State: AOAM532L1oqhb2qrmmlIQwJtSOeqAOwe4U5Ey8ss0sXNlL1UXEhEWUZA sng5CQB7XJ5vRMSvBBkJnPffCN7uRCs= X-Google-Smtp-Source: ABdhPJysmt15eXSKcgAh2aP/NpFIyvpE574j4ujTS5XPkQh2ciUkCXcRIFvmYmZ4nR5GqqvfAQZqtg== X-Received: by 2002:a05:6214:500c:b0:435:6b7d:5bc3 with SMTP id jo12-20020a056214500c00b004356b7d5bc3mr5010791qvb.92.1650201768970; Sun, 17 Apr 2022 06:22:48 -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 s195-20020a37a9cc000000b0069ca29ab6f4sm3903381qke.26.2022.04.17.06.22.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Apr 2022 06:22:48 -0700 (PDT) From: Leo Izen To: ffmpeg-devel@ffmpeg.org Date: Sun, 17 Apr 2022 09:22:36 -0400 Message-Id: <20220417132236.200239-5-leo.izen@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220417132236.200239-1-leo.izen@gmail.com> References: <20220417132236.200239-1-leo.izen@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v15 4/4] avformat/image2: add Jpeg XL as image2 format 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: VGhpcyBjb21taXQgYWRkcyBzdXBwb3J0IHRvIGxpYmF2Zm9ybWF0IGZvciBtdXhpbmcKYW5kIGRl bXV4aW5nIEpwZWcgWEwgaW1hZ2VzIGFzIGltYWdlMiBzdHJlYW1zLgotLS0KIE1BSU5UQUlORVJT ICAgICAgICAgICAgICAgIHwgICAxICsKIGxpYmF2Zm9ybWF0L01ha2VmaWxlICAgICAgIHwgICAx ICsKIGxpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyAgIHwgICAxICsKIGxpYmF2Zm9ybWF0L2ltZzIu YyAgICAgICAgIHwgICAxICsKIGxpYmF2Zm9ybWF0L2ltZzJkZWMuYyAgICAgIHwgIDIwICsrCiBs aWJhdmZvcm1hdC9pbWcyZW5jLmMgICAgICB8ICAgNiArLQogbGliYXZmb3JtYXQvanBlZ3hsX3By b2JlLmMgfCAzOTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliYXZm b3JtYXQvanBlZ3hsX3Byb2JlLmggfCAgMzIgKysrCiBsaWJhdmZvcm1hdC9tb3YuYyAgICAgICAg ICB8ICAgMSArCiA5IGZpbGVzIGNoYW5nZWQsIDQ1MyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L2pwZWd4bF9wcm9iZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvanBlZ3hsX3Byb2JlLmgKCmRpZmYgLS1naXQgYS9N QUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGZhZWE4NGViZjEuLjQ2NzIzOTcyZGMgMTAw NjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC00MzksNiArNDM5LDcg QEAgTXV4ZXJzL0RlbXV4ZXJzOgogICBpcG1vdmllLmMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1pa2UgTWVsYW5zb24KICAgaXJjYW0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQYXVsIEIgTWFob2wKICAgaXNzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT dGVmYW4gR2VocmVyCisgIGpwZWd4bF9wcm9iZS4qICAgICAgICAgICAgICAgICAgICAgICAgTGVv IEl6ZW4KICAganZkZWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZXRlciBSb3Nz CiAgIGt2YWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWmFuZSB2YW4gSXBlcmVu CiAgIGxpYm1vZHBsdWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2zDqW1lbnQgQsWTc2No CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxl CmluZGV4IGUzMjMzZmQ3YWMuLmYxNjYzNGE0MTggMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L01h a2VmaWxlCisrKyBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCkBAIC0yNzIsNiArMjcyLDcgQEAgT0JK Uy0kKENPTkZJR19JTUFHRV9HSUZfUElQRV9ERU1VWEVSKSAgICAgKz0gaW1nMmRlYy5vIGltZzIu bwogT0JKUy0kKENPTkZJR19JTUFHRV9KMktfUElQRV9ERU1VWEVSKSAgICAgKz0gaW1nMmRlYy5v IGltZzIubwogT0JKUy0kKENPTkZJR19JTUFHRV9KUEVHX1BJUEVfREVNVVhFUikgICAgKz0gaW1n MmRlYy5vIGltZzIubwogT0JKUy0kKENPTkZJR19JTUFHRV9KUEVHTFNfUElQRV9ERU1VWEVSKSAg Kz0gaW1nMmRlYy5vIGltZzIubworT0JKUy0kKENPTkZJR19JTUFHRV9KUEVHWExfUElQRV9ERU1V WEVSKSAgKz0gaW1nMmRlYy5vIGltZzIubyBqcGVneGxfcHJvYmUubwogT0JKUy0kKENPTkZJR19J TUFHRV9QQU1fUElQRV9ERU1VWEVSKSAgICAgKz0gaW1nMmRlYy5vIGltZzIubwogT0JKUy0kKENP TkZJR19JTUFHRV9QQk1fUElQRV9ERU1VWEVSKSAgICAgKz0gaW1nMmRlYy5vIGltZzIubwogT0JK Uy0kKENPTkZJR19JTUFHRV9QQ1hfUElQRV9ERU1VWEVSKSAgICAgKz0gaW1nMmRlYy5vIGltZzIu bwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIGIvbGliYXZmb3JtYXQvYWxs Zm9ybWF0cy5jCmluZGV4IDdjMWQwYWMzOGYuLjYzODc2YzQ2OGYgMTAwNjQ0Ci0tLSBhL2xpYmF2 Zm9ybWF0L2FsbGZvcm1hdHMuYworKysgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKQEAgLTUx MCw2ICs1MTAsNyBAQCBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaW1hZ2VfZ2lmX3Bp cGVfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9pbWFnZV9qMmtfcGlw ZV9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2ltYWdlX2pwZWdfcGlw ZV9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2ltYWdlX2pwZWdsc19w aXBlX2RlbXV4ZXI7CitleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaW1hZ2VfanBlZ3hs X3BpcGVfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9pbWFnZV9wYW1f cGlwZV9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2ltYWdlX3BibV9w aXBlX2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaW1hZ2VfcGN4X3Bp cGVfZGVtdXhlcjsKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2ltZzIuYyBiL2xpYmF2Zm9ybWF0 L2ltZzIuYwppbmRleCBmZTJjYTdiZmZmLi41NjZlZjg3M2NhIDEwMDY0NAotLS0gYS9saWJhdmZv cm1hdC9pbWcyLmMKKysrIGIvbGliYXZmb3JtYXQvaW1nMi5jCkBAIC04OCw2ICs4OCw3IEBAIGNv bnN0IElkU3RyTWFwIGZmX2ltZ190YWdzW10gPSB7CiAgICAgeyBBVl9DT0RFQ19JRF9HRU0sICAg ICAgICAieGltZyIgICAgIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9HRU0sICAgICAgICAidGltZyIg ICAgIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9WQk4sICAgICAgICAidmJuIiAgICAgIH0sCisgICAg eyBBVl9DT0RFQ19JRF9KUEVHWEwsICAgICAianhsIiAgICAgIH0sCiAgICAgeyBBVl9DT0RFQ19J RF9OT05FLCAgICAgICBOVUxMICAgICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L2ltZzJkZWMuYyBiL2xpYmF2Zm9ybWF0L2ltZzJkZWMuYwppbmRleCA1NTFiOWQ1MDhlLi41Zjlk MWYwOTRmIDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9pbWcyZGVjLmMKKysrIGIvbGliYXZmb3Jt YXQvaW1nMmRlYy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYXZpb19pbnRlcm5hbC5o IgogI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAiaW1nMi5oIgorI2luY2x1ZGUgImpw ZWd4bF9wcm9iZS5oIgogI2luY2x1ZGUgImxpYmF2Y29kZWMvbWpwZWcuaCIKICNpbmNsdWRlICJs aWJhdmNvZGVjL3Zibi5oIgogI2luY2x1ZGUgImxpYmF2Y29kZWMveHdkLmgiCkBAIC04MzcsNiAr ODM4LDI0IEBAIHN0YXRpYyBpbnQganBlZ2xzX3Byb2JlKGNvbnN0IEFWUHJvYmVEYXRhICpwKQog ICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGpwZWd4bF9wcm9iZShjb25zdCBBVlByb2Jl RGF0YSAqcCkKK3sKKyAgICBjb25zdCB1aW50OF90ICpiID0gcC0+YnVmOworCisgICAgLyogSVNP Qk1GRi1iYXNlZCBjb250YWluZXIgKi8KKyAgICAvKiAweDRhNTg0YzIwID09ICJKWEwgIiAqLwor ICAgIGlmIChBVl9STDY0KGIpID09IEZGX0pQRUdYTF9DT05UQUlORVJfU0lHTkFUVVJFX0xFKQor ICAgICAgICByZXR1cm4gQVZQUk9CRV9TQ09SRV9FWFRFTlNJT04gKyAxOworICAgIC8qIFJhdyBj b2Rlc3RyZWFtcyBhbGwgc3RhcnQgd2l0aCAweGZmMGEgKi8KKyAgICBpZiAoQVZfUkwxNihiKSAh PSBGRl9KUEVHWExfQ09ERVNUUkVBTV9TSUdOQVRVUkVfTEUpCisgICAgICAgIHJldHVybiAwOwor I2lmIENPTkZJR19JTUFHRV9KUEVHWExfUElQRV9ERU1VWEVSCisgICAgaWYgKGZmX2pwZWd4bF92 ZXJpZnlfY29kZXN0cmVhbV9oZWFkZXIocC0+YnVmLCBwLT5idWZfc2l6ZSkgPj0gMCkKKyAgICAg ICAgcmV0dXJuIEFWUFJPQkVfU0NPUkVfTUFYIC0gMjsKKyNlbmRpZgorICAgIHJldHVybiAwOwor fQorCiBzdGF0aWMgaW50IHBjeF9wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkKIHsKICAgICBj b25zdCB1aW50OF90ICpiID0gcC0+YnVmOwpAQCAtMTE3Niw2ICsxMTk1LDcgQEAgSU1BR0VBVVRP X0RFTVVYRVIoZ2lmLCAgICAgICBHSUYpCiBJTUFHRUFVVE9fREVNVVhFUl9FWFQoajJrLCAgIEpQ RUcyMDAwLCBKMkspCiBJTUFHRUFVVE9fREVNVVhFUl9FWFQoanBlZywgIE1KUEVHLCBKUEVHKQog SU1BR0VBVVRPX0RFTVVYRVIoanBlZ2xzLCAgICBKUEVHTFMpCitJTUFHRUFVVE9fREVNVVhFUihq cGVneGwsICAgIEpQRUdYTCkKIElNQUdFQVVUT19ERU1VWEVSKHBhbSwgICAgICAgUEFNKQogSU1B R0VBVVRPX0RFTVVYRVIocGJtLCAgICAgICBQQk0pCiBJTUFHRUFVVE9fREVNVVhFUihwY3gsICAg ICAgIFBDWCkKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2ltZzJlbmMuYyBiL2xpYmF2Zm9ybWF0 L2ltZzJlbmMuYwppbmRleCBhZTM1MTk2M2Q5Li41ZWQ5N2JiODMzIDEwMDY0NAotLS0gYS9saWJh dmZvcm1hdC9pbWcyZW5jLmMKKysrIGIvbGliYXZmb3JtYXQvaW1nMmVuYy5jCkBAIC0yNjMsOSAr MjYzLDkgQEAgc3RhdGljIGNvbnN0IEFWQ2xhc3MgaW1nMm11eF9jbGFzcyA9IHsKIGNvbnN0IEFW T3V0cHV0Rm9ybWF0IGZmX2ltYWdlMl9tdXhlciA9IHsKICAgICAubmFtZSAgICAgICAgICAgPSAi aW1hZ2UyIiwKICAgICAubG9uZ19uYW1lICAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiaW1h Z2UyIHNlcXVlbmNlIiksCi0gICAgLmV4dGVuc2lvbnMgICAgID0gImJtcCxkcHgsZXhyLGpscyxq cGVnLGpwZyxsanBnLHBhbSxwYm0scGN4LHBmbSxwZ20scGdteXV2LHBuZywiCi0gICAgICAgICAg ICAgICAgICAgICAgInBwbSxzZ2ksdGdhLHRpZix0aWZmLGpwMixqMmMsajJrLHh3ZCxzdW4scmFz LHJzLGltMSxpbTgsaW0yNCwiCi0gICAgICAgICAgICAgICAgICAgICAgInN1bnJhcyx2Ym4seGJt LHhmYWNlLHBpeCx5IiwKKyAgICAuZXh0ZW5zaW9ucyAgICAgPSAiYm1wLGRweCxleHIsamxzLGpw ZWcsanBnLGp4bCxsanBnLHBhbSxwYm0scGN4LHBmbSxwZ20scGdteXV2LCIKKyAgICAgICAgICAg ICAgICAgICAgICAicG5nLHBwbSxzZ2ksdGdhLHRpZix0aWZmLGpwMixqMmMsajJrLHh3ZCxzdW4s cmFzLHJzLGltMSxpbTgsIgorICAgICAgICAgICAgICAgICAgICAgICJpbTI0LHN1bnJhcyx2Ym4s eGJtLHhmYWNlLHBpeCx5IiwKICAgICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoVmlkZW9NdXhE YXRhKSwKICAgICAudmlkZW9fY29kZWMgICAgPSBBVl9DT0RFQ19JRF9NSlBFRywKICAgICAud3Jp dGVfaGVhZGVyICAgPSB3cml0ZV9oZWFkZXIsCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9qcGVn eGxfcHJvYmUuYyBiL2xpYmF2Zm9ybWF0L2pwZWd4bF9wcm9iZS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjkyNGI1MjlhZDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJh dmZvcm1hdC9qcGVneGxfcHJvYmUuYwpAQCAtMCwwICsxLDM5MyBAQAorLyoKKyAqIEpwZWcgWEwg aGVhZGVyIHZlcmlmaWNhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDIyIExlbyBJemVuIDxsZW8u aXplbkBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoK KyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisK KyNpbmNsdWRlICJqcGVneGxfcHJvYmUuaCIKKworI2RlZmluZSBCSVRTVFJFQU1fUkVBREVSX0xF CisjaW5jbHVkZSAibGliYXZjb2RlYy9nZXRfYml0cy5oIgorCitlbnVtIEpwZWdYTEV4dHJhQ2hh bm5lbFR5cGUgeworICAgIEZGX0pQRUdYTF9DVF9BTFBIQSA9IDAsCisgICAgRkZfSlBFR1hMX0NU X0RFUFRILAorICAgIEZGX0pQRUdYTF9DVF9TUE9UX0NPTE9SLAorICAgIEZGX0pQRUdYTF9DVF9T RUxFQ1RJT05fTUFTSywKKyAgICBGRl9KUEVHWExfQ1RfQkxBQ0ssCisgICAgRkZfSlBFR1hMX0NU X0NGQSwKKyAgICBGRl9KUEVHWExfQ1RfVEhFUk1BTCwKKyAgICBGRl9KUEVHWExfQ1RfTk9OX09Q VElPTkFMID0gMTUsCisgICAgRkZfSlBFR1hMX0NUX09QVElPTkFMCit9OworCitlbnVtIEpwZWdY TENvbG9yU3BhY2UgeworICAgIEZGX0pQRUdYTF9DU19SR0IgPSAwLAorICAgIEZGX0pQRUdYTF9D U19HUkFZLAorICAgIEZGX0pQRUdYTF9DU19YWUIsCisgICAgRkZfSlBFR1hMX0NTX1VOS05PV04K K307CisKK2VudW0gSnBlZ1hMV2hpdGVQb2ludCB7CisgICAgRkZfSlBFR1hMX1dQX0Q2NSA9IDEs CisgICAgRkZfSlBFR1hMX1dQX0NVU1RPTSwKKyAgICBGRl9KUEVHWExfV1BfRSA9IDEwLAorICAg IEZGX0pQRUdYTF9XUF9EQ0kgPSAxMQorfTsKKworZW51bSBKcGVnWExQcmltYXJpZXMgeworICAg IEZGX0pQRUdYTF9QUl9TUkdCID0gMSwKKyAgICBGRl9KUEVHWExfUFJfQ1VTVE9NLAorICAgIEZG X0pQRUdYTF9QUl8yMTAwID0gOSwKKyAgICBGRl9KUEVHWExfUFJfUDMgPSAxMSwKK307CisKKyNk ZWZpbmUganhsX2JpdHMobikgZ2V0X2JpdHNfbG9uZyhnYiwgKG4pKQorI2RlZmluZSBqeGxfYml0 c19za2lwKG4pIHNraXBfYml0c19sb25nKGdiLCAobikpCisjZGVmaW5lIGp4bF91MzIoYzAsIGMx LCBjMiwgYzMsIHUwLCB1MSwgdTIsIHUzKSBqcGVneGxfdTMyKGdiLCBcCisgICAgKGNvbnN0IHVp bnQzMl90W10pe2MwLCBjMSwgYzIsIGMzfSwgKGNvbnN0IHVpbnQzMl90W10pe3UwLCB1MSwgdTIs IHUzfSkKKyNkZWZpbmUganhsX3U2NCgpIGpwZWd4bF91NjQoZ2IpCisjZGVmaW5lIGp4bF9lbnVt KCkganhsX3UzMigwLCAxLCAyLCAxOCwgMCwgMCwgNCwgNikKKworLyogcmVhZCBhIFUzMihjX2kg KyB1KHVfaSkpICovCitzdGF0aWMgdWludDMyX3QganBlZ3hsX3UzMihHZXRCaXRDb250ZXh0ICpn YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGNvbnN0YW50c1s0 XSwgY29uc3QgdWludDMyX3QgdWJpdHNbNF0pCit7CisgICAgdWludDMyX3QgcmV0LCBjaG9pY2Ug PSBqeGxfYml0cygyKTsKKworICAgIHJldCA9IGNvbnN0YW50c1tjaG9pY2VdOworICAgIGlmICh1 Yml0c1tjaG9pY2VdKQorICAgICAgICByZXQgKz0ganhsX2JpdHModWJpdHNbY2hvaWNlXSk7CisK KyAgICByZXR1cm4gcmV0OworfQorCisvKiByZWFkIGEgVTY0KCkgKi8KK3N0YXRpYyB1aW50NjRf dCBqcGVneGxfdTY0KEdldEJpdENvbnRleHQgKmdiKQoreworICAgIHVpbnQ2NF90IHNoaWZ0ID0g MTIsIHJldDsKKworICAgIHN3aXRjaCAoanhsX2JpdHMoMikpIHsKKyAgICBjYXNlIDA6CisgICAg ICAgIHJldCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgcmV0ID0g MSArIGp4bF9iaXRzKDQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIHJl dCA9IDE3ICsganhsX2JpdHMoOCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAg ICAgcmV0ID0ganhsX2JpdHMoMTIpOworICAgICAgICB3aGlsZSAoanhsX2JpdHMoMSkpIHsKKyAg ICAgICAgICAgIGlmIChzaGlmdCA8IDYwKSB7CisgICAgICAgICAgICAgICAgcmV0IHw9IGp4bF9i aXRzKDgpIDw8IHNoaWZ0OworICAgICAgICAgICAgICAgIHNoaWZ0ICs9IDg7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldCB8PSBqeGxfYml0cyg0KSA8PCBzaGlmdDsK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDMyX3Qg anBlZ3hsX3dpZHRoX2Zyb21fcmF0aW8odWludDMyX3QgaGVpZ2h0LCBpbnQgcmF0aW8pCit7Cisg ICAgdWludDY0X3QgaGVpZ2h0NjQgPSBoZWlnaHQ7IC8qIGF2b2lkIGludGVnZXIgb3ZlcmZsb3cg Ki8KKyAgICBzd2l0Y2ggKHJhdGlvKSB7CisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gaGVp Z2h0OworICAgIGNhc2UgMjoKKyAgICAgICAgcmV0dXJuICh1aW50MzJfdCkoKGhlaWdodDY0ICog MTIpIC8gMTApOworICAgIGNhc2UgMzoKKyAgICAgICAgcmV0dXJuICh1aW50MzJfdCkoKGhlaWdo dDY0ICogNCkgLyAzKTsKKyAgICBjYXNlIDQ6CisgICAgICAgIHJldHVybiAodWludDMyX3QpKCho ZWlnaHQ2NCAqIDMpIC8gMik7CisgICAgY2FzZSA1OgorICAgICAgICByZXR1cm4gKHVpbnQzMl90 KSgoaGVpZ2h0NjQgKiAxNikgLyA5KTsKKyAgICBjYXNlIDY6CisgICAgICAgIHJldHVybiAodWlu dDMyX3QpKChoZWlnaHQ2NCAqIDUpIC8gNCk7CisgICAgY2FzZSA3OgorICAgICAgICByZXR1cm4g KHVpbnQzMl90KShoZWlnaHQ2NCAqIDIpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor ICAgIH0KKworICAgIHJldHVybiAwOyAvKiBtYW51YWwgd2lkdGggKi8KK30KKworLyoqCisgKiB2 YWxpZGF0ZSBhIEpwZWcgWEwgU2l6ZSBIZWFkZXIKKyAqIEByZXR1cm4gPj0gMCB1cG9uIHZhbGlk IHNpemUsIDwgMCB1cG9uIGludmFsaWQgc2l6ZSBmb3VuZAorICovCitzdGF0aWMgaW50IGpwZWd4 bF9yZWFkX3NpemVfaGVhZGVyKEdldEJpdENvbnRleHQgKmdiKQoreworICAgIHVpbnQzMl90IHdp ZHRoLCBoZWlnaHQ7CisKKyAgICBpZiAoanhsX2JpdHMoMSkpIHsKKyAgICAgICAgLyogc21hbGwg c2l6ZSBoZWFkZXIgKi8KKyAgICAgICAgaGVpZ2h0ID0gKGp4bF9iaXRzKDUpICsgMSkgPDwgMzsK KyAgICAgICAgd2lkdGggPSBqcGVneGxfd2lkdGhfZnJvbV9yYXRpbyhoZWlnaHQsIGp4bF9iaXRz KDMpKTsKKyAgICAgICAgaWYgKCF3aWR0aCkKKyAgICAgICAgICAgIHdpZHRoID0gKGp4bF9iaXRz KDUpICsgMSkgPDwgMzsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBsYXJnZSBzaXplIGhlYWRl ciAqLworICAgICAgICBoZWlnaHQgPSAxICsganhsX3UzMigwLCAwLCAwLCAwLCA5LCAxMywgMTgs IDMwKTsKKyAgICAgICAgd2lkdGggPSBqcGVneGxfd2lkdGhfZnJvbV9yYXRpbyhoZWlnaHQsIGp4 bF9iaXRzKDMpKTsKKyAgICAgICAgaWYgKCF3aWR0aCkKKyAgICAgICAgICAgIHdpZHRoID0gMSAr IGp4bF91MzIoMCwgMCwgMCwgMCwgOSwgMTMsIDE4LCAzMCk7CisgICAgfQorICAgIGlmICh3aWR0 aCA+ICgxIDw8IDE4KSB8fCBoZWlnaHQgPiAoMSA8PCAxOCkKKyAgICAgICAgfHwgKHdpZHRoID4+ IDQpICogKGhlaWdodCA+PiA0KSA+ICgxIDw8IDIwKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisg ICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogdmFsaWRhdGUgYSBKcGVnIFhMIFByZXZpZXcgSGVh ZGVyCisgKiBAcmV0dXJuID49IDAgdXBvbiB2YWxpZCBzaXplLCA8IDAgdXBvbiBpbnZhbGlkIHNp emUgZm91bmQKKyAqLworc3RhdGljIGludCBqcGVneGxfcmVhZF9wcmV2aWV3X2hlYWRlcihHZXRC aXRDb250ZXh0ICpnYikKK3sKKyAgICB1aW50MzJfdCB3aWR0aCwgaGVpZ2h0OworCisgICAgaWYg KGp4bF9iaXRzKDEpKSB7CisgICAgICAgIC8qIGNvZGVkIGhlaWdodCBhbmQgd2lkdGggZGl2aWRl ZCBieSBlaWdodCAqLworICAgICAgICBoZWlnaHQgPSBqeGxfdTMyKDE2LCAzMiwgMSwgMzMsIDAs IDAsIDUsIDkpIDw8IDM7CisgICAgICAgIHdpZHRoID0ganBlZ3hsX3dpZHRoX2Zyb21fcmF0aW8o aGVpZ2h0LCBqeGxfYml0cygzKSk7CisgICAgICAgIGlmICghd2lkdGgpCisgICAgICAgICAgICB3 aWR0aCA9IGp4bF91MzIoMTYsIDMyLCAxLCAzMywgMCwgMCwgNSwgOSkgPDwgMzsKKyAgICB9IGVs c2UgeworICAgICAgICAvKiBmdWxsIGhlaWdodCBhbmQgd2lkdGggY29kZWQgKi8KKyAgICAgICAg aGVpZ2h0ID0ganhsX3UzMigxLCA2NSwgMzIxLCAxMzQ1LCA2LCA4LCAxMCwgMTIpOworICAgICAg ICB3aWR0aCA9IGpwZWd4bF93aWR0aF9mcm9tX3JhdGlvKGhlaWdodCwganhsX2JpdHMoMykpOwor ICAgICAgICBpZiAoIXdpZHRoKQorICAgICAgICAgICAgd2lkdGggPSBqeGxfdTMyKDEsIDY1LCAz MjEsIDEzNDUsIDYsIDgsIDEwLCAxMik7CisgICAgfQorICAgIGlmICh3aWR0aCA+IDQwOTYgfHwg aGVpZ2h0ID4gNDA5NikKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisK Ky8qKgorICogc2tpcCBhIEpwZWcgWEwgQml0RGVwdGggSGVhZGVyLiBUaGVzZSBjYW5ub3QgYmUg aW52YWxpZC4KKyAqLworc3RhdGljIHZvaWQganBlZ3hsX3NraXBfYml0X2RlcHRoKEdldEJpdENv bnRleHQgKmdiKQoreworICAgIGlmIChqeGxfYml0cygxKSkgeworICAgICAgICAvKiBmbG9hdCBz YW1wbGVzICovCisgICAgICAgIGp4bF91MzIoMzIsIDE2LCAyNCwgMSwgMCwgMCwgMCwgNik7IC8q IG1hbnRpc3NhICovCisgICAgICAgIGp4bF9iaXRzX3NraXAoNCk7IC8qIGV4cG9uZW50ICovCisg ICAgfSBlbHNlIHsKKyAgICAgICAgLyogaW50ZWdlciBzYW1wbGVzICovCisgICAgICAgIGp4bF91 MzIoOCwgMTAsIDEyLCAxLCAwLCAwLCAwLCA2KTsKKyAgICB9Cit9CisKKy8qKgorICogdmFsaWRh dGUgYSBKcGVnIFhMIEV4dHJhIENoYW5uZWwgSW5mbyBidW5kbGUKKyAqIEByZXR1cm4gPj0gMCB1 cG9uIHZhbGlkLCA8IDAgdXBvbiBpbnZhbGlkCisgKi8KK3N0YXRpYyBpbnQganBlZ3hsX3JlYWRf ZXh0cmFfY2hhbm5lbF9pbmZvKEdldEJpdENvbnRleHQgKmdiKQoreworICAgIGludCBhbGxfZGVm YXVsdCA9IGp4bF9iaXRzKDEpOworICAgIHVpbnQzMl90IHR5cGUsIG5hbWVfbGVuID0gMDsKKwor ICAgIGlmICghYWxsX2RlZmF1bHQpIHsKKyAgICAgICAgdHlwZSA9IGp4bF9lbnVtKCk7CisgICAg ICAgIGlmICh0eXBlID4gNjMpCisgICAgICAgICAgICByZXR1cm4gLTE7IC8qIGVudW0gdHlwZXMg Y2Fubm90IGJlIDY0KyAqLworICAgICAgICBpZiAodHlwZSA9PSBGRl9KUEVHWExfQ1RfQkxBQ0sp CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGpwZWd4bF9za2lwX2JpdF9kZXB0aChn Yik7CisgICAgICAgIGp4bF91MzIoMCwgMywgNCwgMSwgMCwgMCwgMCwgMyk7IC8qIGRpbS1zaGlm dCAqLworICAgICAgICAvKiBtYXggb2YgbmFtZV9sZW4gaXMgMTA3MSA9IDQ4ICsgMl4xMCAtIDEg Ki8KKyAgICAgICAgbmFtZV9sZW4gPSBqeGxfdTMyKDAsIDAsIDE2LCA0OCwgMCwgNCwgNSwgMTAp OworICAgIH0gZWxzZSB7CisgICAgICAgIHR5cGUgPSBGRl9KUEVHWExfQ1RfQUxQSEE7CisgICAg fQorCisgICAgLyogc2tpcCBvdmVyIHRoZSBuYW1lICovCisgICAganhsX2JpdHNfc2tpcCg4ICog bmFtZV9sZW4pOworCisgICAgaWYgKCFhbGxfZGVmYXVsdCAmJiB0eXBlID09IEZGX0pQRUdYTF9D VF9BTFBIQSkKKyAgICAgICAganhsX2JpdHNfc2tpcCgxKTsKKworICAgIGlmICh0eXBlID09IEZG X0pQRUdYTF9DVF9TUE9UX0NPTE9SKQorICAgICAgICBqeGxfYml0c19za2lwKDE2ICogNCk7CisK KyAgICBpZiAodHlwZSA9PSBGRl9KUEVHWExfQ1RfQ0ZBKQorICAgICAgICBqeGxfdTMyKDEsIDAs IDMsIDE5LCAwLCAyLCA0LCA4KTsKKworICAgIHJldHVybiAwOworfQorCisvKiB2ZXJpZnkgdGhh dCBhIGNvZGVzdHJlYW0gaGVhZGVyIGlzIHZhbGlkICovCitpbnQgZmZfanBlZ3hsX3ZlcmlmeV9j b2Rlc3RyZWFtX2hlYWRlcihjb25zdCB1aW50OF90ICpidWYsIGludCBidWZsZW4pCit7CisgICAg R2V0Qml0Q29udGV4dCBnYmksICpnYiA9ICZnYmk7CisgICAgaW50IGFsbF9kZWZhdWx0LCBleHRy YV9maWVsZHMgPSAwOworICAgIGludCB4eWJfZW5jb2RlZCA9IDEsIGhhdmVfaWNjX3Byb2ZpbGUg PSAwOworICAgIHVpbnQzMl90IG51bV9leHRyYV9jaGFubmVsczsKKyAgICB1aW50NjRfdCBleHRl bnNpb25zOworCisgICAgaW5pdF9nZXRfYml0czgoZ2IsIGJ1ZiwgYnVmbGVuKTsKKworICAgIGlm IChqeGxfYml0cygxNikgIT0gRkZfSlBFR1hMX0NPREVTVFJFQU1fU0lHTkFUVVJFX0xFKQorICAg ICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoanBlZ3hsX3JlYWRfc2l6ZV9oZWFkZXIoZ2IpIDwg MCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgYWxsX2RlZmF1bHQgPSBqeGxfYml0cygxKTsK KyAgICBpZiAoIWFsbF9kZWZhdWx0KQorICAgICAgICBleHRyYV9maWVsZHMgPSBqeGxfYml0cygx KTsKKworICAgIGlmIChleHRyYV9maWVsZHMpIHsKKyAgICAgICAganhsX2JpdHNfc2tpcCgzKTsg Lyogb3JpZW50YXRpb24gKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBpbnRyaW5zdGljIHNp emUKKyAgICAgICAgICogYW55IHNpemUgaGVhZGVyIGhlcmUgaXMgdmFsaWQsIGJ1dCBhcyBpdAor ICAgICAgICAgKiBpcyB2YXJpYWJsZSBsZW5ndGggd2UgaGF2ZSB0byByZWFkIGl0CisgICAgICAg ICAqLworICAgICAgICBpZiAoanhsX2JpdHMoMSkpCisgICAgICAgICAgICBqcGVneGxfcmVhZF9z aXplX2hlYWRlcihnYik7CisKKyAgICAgICAgLyogcHJldmlldyBoZWFkZXIgKi8KKyAgICAgICAg aWYgKGp4bF9iaXRzKDEpKSB7CisgICAgICAgICAgICBpZiAoanBlZ3hsX3JlYWRfcHJldmlld19o ZWFkZXIoZ2IpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKwor ICAgICAgICAvKiBhbmltYXRpb24gaGVhZGVyICovCisgICAgICAgIGlmIChqeGxfYml0cygxKSkg eworICAgICAgICAgICAganhsX3UzMigxMDAsIDEwMDAsIDEsIDEsIDAsIDAsIDEwLCAzMCk7Cisg ICAgICAgICAgICBqeGxfdTMyKDEsIDEwMDEsIDEsIDEsIDAsIDAsIDgsIDEwKTsKKyAgICAgICAg ICAgIGp4bF91MzIoMCwgMCwgMCwgMCwgMCwgMywgMTYsIDMyKTsKKyAgICAgICAgICAgIGp4bF9i aXRzX3NraXAoMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWFsbF9kZWZhdWx0KSB7 CisgICAgICAgIGpwZWd4bF9za2lwX2JpdF9kZXB0aChnYik7CisKKyAgICAgICAgLyogbW9kdWxh cl8xNmJpdF9idWZmZXJzIG11c3QgZXF1YWwgMSAqLworICAgICAgICBpZiAoIWp4bF9iaXRzKDEp KQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIG51bV9leHRyYV9jaGFubmVscyA9 IGp4bF91MzIoMCwgMSwgMiwgMSwgMCwgMCwgNCwgMTIpOworICAgICAgICBpZiAobnVtX2V4dHJh X2NoYW5uZWxzID4gNCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgZm9yICh1aW50 MzJfdCBpID0gMDsgaSA8IG51bV9leHRyYV9jaGFubmVsczsgaSsrKSB7CisgICAgICAgICAgICBp ZiAoanBlZ3hsX3JlYWRfZXh0cmFfY2hhbm5lbF9pbmZvKGdiKSA8IDApCisgICAgICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgeHliX2VuY29kZWQgPSBqeGxfYml0 cygxKTsKKworICAgICAgICAvKiBjb2xvciBlbmNvZGluZyBidW5kbGUgKi8KKyAgICAgICAgaWYg KCFqeGxfYml0cygxKSkgeworICAgICAgICAgICAgdWludDMyX3QgY29sb3Jfc3BhY2U7CisgICAg ICAgICAgICBoYXZlX2ljY19wcm9maWxlID0ganhsX2JpdHMoMSk7CisgICAgICAgICAgICBjb2xv cl9zcGFjZSA9IGp4bF9lbnVtKCk7CisgICAgICAgICAgICBpZiAoY29sb3Jfc3BhY2UgPiA2MykK KyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIGlmICghaGF2ZV9pY2Nf cHJvZmlsZSkgeworICAgICAgICAgICAgICAgIGlmIChjb2xvcl9zcGFjZSAhPSBGRl9KUEVHWExf Q1NfWFlCKSB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdoaXRlX3BvaW50ID0ganhs X2VudW0oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdoaXRlX3BvaW50ID4gNjMpCisgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIGlmICh3 aGl0ZV9wb2ludCA9PSBGRl9KUEVHWExfV1BfQ1VTVE9NKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAvKiB1eCBhbmQgdXkgdmFsdWVzICovCisgICAgICAgICAgICAgICAgICAgICAgICBqeGxf dTMyKDAsIDUyNDI4OCwgMTA0ODU3NiwgMjA5NzE1MiwgMTksIDE5LCAyMCwgMjEpOworICAgICAg ICAgICAgICAgICAgICAgICAganhsX3UzMigwLCA1MjQyODgsIDEwNDg1NzYsIDIwOTcxNTIsIDE5 LCAxOSwgMjAsIDIxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICBpZiAoY29sb3Jfc3BhY2UgIT0gRkZfSlBFR1hMX0NTX0dSQVkpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHByaW1hcmllcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy X3QgcHJpbWFyaWVzID0ganhsX2VudW0oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw cmltYXJpZXMgPiA2MykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWFyaWVzID09IEZGX0pQRUdYTF9QUl9DVVNU T00pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1eC91eSB2YWx1ZXMgZm9yIHIs ZyxiICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2 OyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp4bF91MzIoMCwgNTI0Mjg4 LCAxMDQ4NTc2LCAyMDk3MTUyLCAxOSwgMTksIDIwLCAyMSk7CisgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgICAvKiB0cmFuc2ZlciBjaGFyYWN0ZXJpc3RpY3MgKi8KKyAgICAgICAgICAgICAg ICBpZiAoanhsX2JpdHMoMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogZ2FtbWEgKi8KKyAg ICAgICAgICAgICAgICAgICAganhsX2JpdHNfc2tpcCgyNCk7CisgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyogdHJhbnNmZXIgZnVuY3Rpb24gKi8KKyAgICAg ICAgICAgICAgICAgICAgaWYgKGp4bF9lbnVtKCkgPiA2MykKKyAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBy ZW5kZXJpbmcgaW50ZW50ICovCisgICAgICAgICAgICAgICAgaWYgKGp4bF9lbnVtKCkgPiA2MykK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9 CisKKyAgICAgICAgLyogdG9uZSBtYXBwaW5nIGJ1bmRsZSAqLworICAgICAgICBpZiAoZXh0cmFf ZmllbGRzICYmICFqeGxfYml0cygxKSkKKyAgICAgICAgICAgIGp4bF9iaXRzX3NraXAoMTYgKyAx NiArIDEgKyAxNik7CisKKyAgICAgICAgZXh0ZW5zaW9ucyA9IGp4bF91NjQoKTsKKyAgICAgICAg aWYgKGV4dGVuc2lvbnMpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7IGkr KykgeworICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zICYgKFVJTlQ2NF9DKDEpIDw8IGkp KQorICAgICAgICAgICAgICAgICAgICBqeGxfdTY0KCk7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9CisKKyAgICAvKiBkZWZhdWx0IHRyYW5zZm9ybSAqLworICAgIGlmICghanhsX2Jp dHMoMSkpIHsKKyAgICAgICAgLyogb3BzaW4gaW52ZXJzZSBtYXRyaXggKi8KKyAgICAgICAgaWYg KHh5Yl9lbmNvZGVkICYmICFqeGxfYml0cygxKSkKKyAgICAgICAgICAgIGp4bF9iaXRzX3NraXAo MTYgKiAxNik7CisgICAgICAgIC8qIGN3X21hc2sgYW5kIGRlZmF1bHQgd2VpZ2h0cyAqLworICAg ICAgICBpZiAoanhsX2JpdHMoMSkpCisgICAgICAgICAgICBqeGxfYml0c19za2lwKDE2ICogMTUp OworICAgICAgICBpZiAoanhsX2JpdHMoMSkpCisgICAgICAgICAgICBqeGxfYml0c19za2lwKDE2 ICogNTUpOworICAgICAgICBpZiAoanhsX2JpdHMoMSkpCisgICAgICAgICAgICBqeGxfYml0c19z a2lwKDE2ICogMjEwKTsKKyAgICB9CisKKyAgICBpZiAoIWhhdmVfaWNjX3Byb2ZpbGUpIHsKKyAg ICAgICAgaW50IGJpdHNfcmVtYWluaW5nID0gNyAtIChnZXRfYml0c19jb3VudChnYikgLSAxKSAl IDg7CisgICAgICAgIGlmIChiaXRzX3JlbWFpbmluZyAmJiBqeGxfYml0cyhiaXRzX3JlbWFpbmlu ZykpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGdldF9iaXRzX2xl ZnQoZ2IpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYg LS1naXQgYS9saWJhdmZvcm1hdC9qcGVneGxfcHJvYmUuaCBiL2xpYmF2Zm9ybWF0L2pwZWd4bF9w cm9iZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjI5NjBlODFlMTEK LS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC9qcGVneGxfcHJvYmUuaApAQCAtMCwwICsx LDMyIEBACisvKgorICogSnBlZyBYTCBoZWFkZXIgdmVyaWZpY2F0aW9uCisgKiBDb3B5cmlnaHQg KGMpIDIwMjIgTGVvIEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUg aXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBv ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25n IHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3Vu ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBBVkZPUk1BVF9KUEVHWExfUFJPQkVfSAor I2RlZmluZSBBVkZPUk1BVF9KUEVHWExfUFJPQkVfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisK KyNkZWZpbmUgRkZfSlBFR1hMX0NPREVTVFJFQU1fU0lHTkFUVVJFX0xFIDB4MGFmZgorI2RlZmlu ZSBGRl9KUEVHWExfQ09OVEFJTkVSX1NJR05BVFVSRV9MRSAweDIwNGM1ODRhMGMwMDAwMDAKKwor aW50IGZmX2pwZWd4bF92ZXJpZnlfY29kZXN0cmVhbV9oZWFkZXIoY29uc3QgdWludDhfdCAqYnVm LCBpbnQgYnVmbGVuKTsKKworI2VuZGlmIC8qIEFWRk9STUFUX0pQRUdYTF9QUk9CRV9IICovCmRp ZmYgLS1naXQgYS9saWJhdmZvcm1hdC9tb3YuYyBiL2xpYmF2Zm9ybWF0L21vdi5jCmluZGV4IDZj ODQ3ZGUxNjQuLmM0Yjg4NzNiMGEgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L21vdi5jCisrKyBi L2xpYmF2Zm9ybWF0L21vdi5jCkBAIC03Njk3LDYgKzc2OTcsNyBAQCBzdGF0aWMgaW50IG1vdl9w cm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkKICAgICAgICAgICAgIGlmICh0YWcgPT0gTUtUQUco J2YnLCd0JywneScsJ3AnKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAoICAgQVZfUkwzMihw LT5idWYgKyBvZmZzZXQgKyA4KSA9PSBNS1RBRygnaicsJ3AnLCcyJywnICcpCiAgICAgICAgICAg ICAgICAgICAgICAgICB8fCBBVl9STDMyKHAtPmJ1ZiArIG9mZnNldCArIDgpID09IE1LVEFHKCdq JywncCcsJ3gnLCcgJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IEFWX1JMMzIocC0+YnVm ICsgb2Zmc2V0ICsgOCkgPT0gTUtUQUcoJ2onLCd4JywnbCcsJyAnKQogICAgICAgICAgICAgICAg ICAgICApKSB7CiAgICAgICAgICAgICAgICAgc2NvcmUgPSBGRk1BWChzY29yZSwgNSk7CiAgICAg ICAgICAgICB9IGVsc2UgewotLSAKMi4zNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZl bEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1k ZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1k ZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==