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 4F6B2479AB for ; Sat, 27 Jan 2024 17:34:05 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A2C2768D126; Sat, 27 Jan 2024 19:34:03 +0200 (EET) Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AF56568D08F for ; Sat, 27 Jan 2024 19:33:56 +0200 (EET) Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-29080973530so1379720a91.1 for ; Sat, 27 Jan 2024 09:33:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706376834; x=1706981634; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WV1k+qdVSe6j5wlCfb5a2h19ogyOuwUk6vzCIDmqMCg=; b=KnXxPNNipJVp5XjkglkQ0AfoA2HVsi8HjDbfedBKbH7/ss+7cVhFQhgToihws7XQE/ ChE7RQnHbY616iGAFLP/fT0vi42dOC9L3fpQwNdTGEDfVnM5ZHNy39l55MYtRxBBnDdf uk6IVWSXG1vZvUfIFX4PfWnqVTplxIareHXHZORwNQ4i2QbcKZ5nTXgIpOrLt13ZOaVz jxGsfPjS2GSXfncYrJiiNOEvJK8BwzSNMakffGkyQwiuVRFMtRibO+lc49q+SgUEC8O4 jg/StCueQTxhpDWsArQrL2DEVa/+OuhFdyD39Ir/P7U1mPcksbWcXO0te7AriXTH5n1N iZBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706376834; x=1706981634; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WV1k+qdVSe6j5wlCfb5a2h19ogyOuwUk6vzCIDmqMCg=; b=oHiAvbtMuCtMtmEiNBJSakkLqSA/h9i/Cio2sg+uYrX/WgwwKl40vabrVxdHs/Pyil rkhf6l/H1DSxW5kMkVZORe2Q1ZyTu/bbNF/IXvFhs7WgY7kuQOH4PJwnoO5dV5wi3h1j RILO7xWUcX5pXLCdDs0KUVFm/YO2S0IpVaG92BMWxhlzQN1BWVYLr3oWXcaM3tghTlVb whpSnlu0YiyYa9vAcsemGXkfnmUJhV1ehQCqZ0xLCL6De2irTIDn2gGwYbuvr5mdJVL+ vw4ObDk6UzVc7qZnvCWhTPYwsUEcBtntiF/Wj7GvpJcej2ff5kTg+pal6yGboMuFWqEa YHcw== X-Gm-Message-State: AOJu0YxttGA9o6OYU/3jQwiyKke67nRQRdCpe8IXBnef1haQAQDjkHhG Aa8SzpREQqcMW7aRtV8mBswDKR7BQV+p18BrvoN1e7gDlfa8CQ6F4+zQ2gt07Wc= X-Google-Smtp-Source: AGHT+IElR7Tev/IzCh6xE8AOXmoJYns0UdSzcOnHY8Y2ZMnCl/meNehZX17Z04YOosviJtTVVcZEcg== X-Received: by 2002:a17:90a:d80b:b0:28e:79d4:c101 with SMTP id a11-20020a17090ad80b00b0028e79d4c101mr1286485pjv.89.1706376833294; Sat, 27 Jan 2024 09:33:53 -0800 (PST) Received: from arch.home (hwsrv-1088392.hostwindsdns.com. [23.254.253.23]) by smtp.gmail.com with ESMTPSA id g3-20020a17090adac300b0028b845f2890sm5120582pjx.33.2024.01.27.09.33.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Jan 2024 09:33:52 -0800 (PST) From: Chen Yufei To: ffmpeg-devel@ffmpeg.org Date: Sun, 28 Jan 2024 01:27:07 +0800 Message-ID: <20240127173308.227568-2-cyfdecyf@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240127173308.227568-1-cyfdecyf@gmail.com> References: <20240127173308.227568-1-cyfdecyf@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 1/1] avfilter/vf_vpp_qsv: apply 3D LUT from file. 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: haihao.xiang@intel.com, Chen Yufei 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: VXNhZ2U6ICJ2cHBfcXN2PWx1dDNkX2ZpbGU9PHBhdGggdG8gZmlsZT4iCgpSZXF1aXJlcyBvbmVW UEwsIHVzaW5nIHN5c3RlbSBtZW1vcnkgM0QgTFVUIHN1cmZhY2UuCgpTaWduZWQtb2ZmLWJ5OiBD aGVuIFl1ZmVpIDxjeWZkZWN5ZkBnbWFpbC5jb20+Ci0tLQogbGliYXZmaWx0ZXIvTWFrZWZpbGUg ICAgIHwgICA4ICstCiBsaWJhdmZpbHRlci9sdXQzZC5jICAgICAgfCA2NjkgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWJhdmZpbHRlci9sdXQzZC5oICAgICAgfCAg MTMgKwogbGliYXZmaWx0ZXIvdmZfbHV0M2QuYyAgIHwgNTkwICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIGxpYmF2ZmlsdGVyL3ZmX3ZwcF9xc3YuYyB8IDExOSArKysrKystCiA1 IGZpbGVzIGNoYW5nZWQsIDgwNyBpbnNlcnRpb25zKCspLCA1OTIgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvbHV0M2QuYwoKZGlmZiAtLWdpdCBhL2xpYmF2Zmls dGVyL01ha2VmaWxlIGIvbGliYXZmaWx0ZXIvTWFrZWZpbGUKaW5kZXggYmJhMDIxOTg3Ni4uZjY4 MmVhNTNjMiAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbGliYXZmaWx0 ZXIvTWFrZWZpbGUKQEAgLTMzMiw3ICszMzIsNyBAQCBPQkpTLSQoQ09ORklHX0dSQVBITU9OSVRP Ul9GSUxURVIpICAgICAgICAgICArPSBmX2dyYXBobW9uaXRvci5vCiBPQkpTLSQoQ09ORklHX0dS QVlXT1JMRF9GSUxURVIpICAgICAgICAgICAgICArPSB2Zl9ncmF5d29ybGQubwogT0JKUy0kKENP TkZJR19HUkVZRURHRV9GSUxURVIpICAgICAgICAgICAgICAgKz0gdmZfY29sb3Jjb25zdGFuY3ku bwogT0JKUy0kKENPTkZJR19HVUlERURfRklMVEVSKSAgICAgICAgICAgICAgICAgKz0gdmZfZ3Vp ZGVkLm8KLU9CSlMtJChDT05GSUdfSEFMRENMVVRfRklMVEVSKSAgICAgICAgICAgICAgICs9IHZm X2x1dDNkLm8gZnJhbWVzeW5jLm8KK09CSlMtJChDT05GSUdfSEFMRENMVVRfRklMVEVSKSAgICAg ICAgICAgICAgICs9IHZmX2x1dDNkLm8gbHV0M2QubyBmcmFtZXN5bmMubwogT0JKUy0kKENPTkZJ R19IRkxJUF9GSUxURVIpICAgICAgICAgICAgICAgICAgKz0gdmZfaGZsaXAubwogT0JKUy0kKENP TkZJR19IRkxJUF9WVUxLQU5fRklMVEVSKSAgICAgICAgICAgKz0gdmZfZmxpcF92dWxrYW4ubyB2 dWxrYW4ubwogT0JKUy0kKENPTkZJR19ISVNURVFfRklMVEVSKSAgICAgICAgICAgICAgICAgKz0g dmZfaGlzdGVxLm8KQEAgLTM3MCwxMCArMzcwLDEwIEBAIE9CSlMtJChDT05GSUdfTElNSVRESUZG X0ZJTFRFUikgICAgICAgICAgICAgICs9IHZmX2xpbWl0ZGlmZi5vIGZyYW1lc3luYy5vCiBPQkpT LSQoQ09ORklHX0xJTUlURVJfRklMVEVSKSAgICAgICAgICAgICAgICArPSB2Zl9saW1pdGVyLm8K IE9CSlMtJChDT05GSUdfTE9PUF9GSUxURVIpICAgICAgICAgICAgICAgICAgICs9IGZfbG9vcC5v CiBPQkpTLSQoQ09ORklHX0xVTUFLRVlfRklMVEVSKSAgICAgICAgICAgICAgICArPSB2Zl9sdW1h a2V5Lm8KLU9CSlMtJChDT05GSUdfTFVUMURfRklMVEVSKSAgICAgICAgICAgICAgICAgICs9IHZm X2x1dDNkLm8KK09CSlMtJChDT05GSUdfTFVUMURfRklMVEVSKSAgICAgICAgICAgICAgICAgICs9 IHZmX2x1dDNkLm8gbHV0M2QubwogT0JKUy0kKENPTkZJR19MVVRfRklMVEVSKSAgICAgICAgICAg ICAgICAgICAgKz0gdmZfbHV0Lm8KIE9CSlMtJChDT05GSUdfTFVUMl9GSUxURVIpICAgICAgICAg ICAgICAgICAgICs9IHZmX2x1dDIubyBmcmFtZXN5bmMubwotT0JKUy0kKENPTkZJR19MVVQzRF9G SUxURVIpICAgICAgICAgICAgICAgICAgKz0gdmZfbHV0M2QubyBmcmFtZXN5bmMubworT0JKUy0k KENPTkZJR19MVVQzRF9GSUxURVIpICAgICAgICAgICAgICAgICAgKz0gdmZfbHV0M2QubyBsdXQz ZC5vIGZyYW1lc3luYy5vCiBPQkpTLSQoQ09ORklHX0xVVFJHQl9GSUxURVIpICAgICAgICAgICAg ICAgICArPSB2Zl9sdXQubwogT0JKUy0kKENPTkZJR19MVVRZVVZfRklMVEVSKSAgICAgICAgICAg ICAgICAgKz0gdmZfbHV0Lm8KIE9CSlMtJChDT05GSUdfTUFTS0VEQ0xBTVBfRklMVEVSKSAgICAg ICAgICAgICs9IHZmX21hc2tlZGNsYW1wLm8gZnJhbWVzeW5jLm8KQEAgLTU1Myw3ICs1NTMsNyBA QCBPQkpTLSQoQ09ORklHX1ZJRFNUQUJUUkFOU0ZPUk1fRklMVEVSKSAgICAgICArPSB2aWRzdGFi dXRpbHMubyB2Zl92aWRzdGFidHJhbnNmbwogT0JKUy0kKENPTkZJR19WSUZfRklMVEVSKSAgICAg ICAgICAgICAgICAgICAgKz0gdmZfdmlmLm8gZnJhbWVzeW5jLm8KIE9CSlMtJChDT05GSUdfVklH TkVUVEVfRklMVEVSKSAgICAgICAgICAgICAgICs9IHZmX3ZpZ25ldHRlLm8KIE9CSlMtJChDT05G SUdfVk1BRk1PVElPTl9GSUxURVIpICAgICAgICAgICAgICs9IHZmX3ZtYWZtb3Rpb24ubyBmcmFt ZXN5bmMubwotT0JKUy0kKENPTkZJR19WUFBfUVNWX0ZJTFRFUikgICAgICAgICAgICAgICAgKz0g dmZfdnBwX3Fzdi5vCitPQkpTLSQoQ09ORklHX1ZQUF9RU1ZfRklMVEVSKSAgICAgICAgICAgICAg ICArPSB2Zl92cHBfcXN2Lm8gbHV0M2QubwogT0JKUy0kKENPTkZJR19WU1RBQ0tfRklMVEVSKSAg ICAgICAgICAgICAgICAgKz0gdmZfc3RhY2subyBmcmFtZXN5bmMubwogT0JKUy0kKENPTkZJR19X M0ZESUZfRklMVEVSKSAgICAgICAgICAgICAgICAgKz0gdmZfdzNmZGlmLm8KIE9CSlMtJChDT05G SUdfV0FWRUZPUk1fRklMVEVSKSAgICAgICAgICAgICAgICs9IHZmX3dhdmVmb3JtLm8KZGlmZiAt LWdpdCBhL2xpYmF2ZmlsdGVyL2x1dDNkLmMgYi9saWJhdmZpbHRlci9sdXQzZC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjE3Mzk3OWFkY2MKLS0tIC9kZXYvbnVsbAor KysgYi9saWJhdmZpbHRlci9sdXQzZC5jCkBAIC0wLDAgKzEsNjY5IEBACisvKgorICogQ29weXJp Z2h0IChjKSAyMDEzIENsw6ltZW50IELFk3NjaAorICogQ29weXJpZ2h0IChjKSAyMDE4IFBhdWwg QiBNYWhvbAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1w ZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVk ZSAibHV0M2QuaCIKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJsaWJhdnV0aWwv YXZzdHJpbmcuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvZmlsZV9vcGVuLmgiCisKKyNkZWZpbmUg RVhQT05FTlRfTUFTSyAweDdGODAwMDAwCisjZGVmaW5lIE1BTlRJU1NBX01BU0sgMHgwMDdGRkZG RgorI2RlZmluZSBTSUdOX01BU0sgICAgIDB4ODAwMDAwMDAKKworc3RhdGljIGlubGluZSBmbG9h dCBzYW5pdGl6ZWYoZmxvYXQgZikKK3sKKyAgICB1bmlvbiBhdl9pbnRmbG9hdDMyIHQ7CisgICAg dC5mID0gZjsKKworICAgIGlmICgodC5pICYgRVhQT05FTlRfTUFTSykgPT0gRVhQT05FTlRfTUFT SykgeworICAgICAgICBpZiAoKHQuaSAmIE1BTlRJU1NBX01BU0spICE9IDApIHsKKyAgICAgICAg ICAgIC8vIE5BTgorICAgICAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgICAgIH0gZWxzZSBpZiAo dC5pICYgU0lHTl9NQVNLKSB7CisgICAgICAgICAgICAvLyAtSU5GCisgICAgICAgICAgICByZXR1 cm4gLUZMVF9NQVg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyArSU5GCisgICAg ICAgICAgICByZXR1cm4gRkxUX01BWDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZjsK K30KKworc3RhdGljIGlubGluZSBmbG9hdCBsZXJwZihmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0 IGYpCit7CisgICAgcmV0dXJuIHYwICsgKHYxIC0gdjApICogZjsKK30KKworc3RhdGljIGlubGlu ZSBzdHJ1Y3QgcmdidmVjIGxlcnAoY29uc3Qgc3RydWN0IHJnYnZlYyAqdjAsIGNvbnN0IHN0cnVj dCByZ2J2ZWMgKnYxLCBmbG9hdCBmKQoreworICAgIHN0cnVjdCByZ2J2ZWMgdiA9IHsKKyAgICAg ICAgbGVycGYodjAtPnIsIHYxLT5yLCBmKSwgbGVycGYodjAtPmcsIHYxLT5nLCBmKSwgbGVycGYo djAtPmIsIHYxLT5iLCBmKQorICAgIH07CisgICAgcmV0dXJuIHY7Cit9CisKK2ludCBmZl9hbGxv Y2F0ZV8zZGx1dChBVkZpbHRlckNvbnRleHQgKmN0eCwgTFVUM0RDb250ZXh0ICpsdXQzZCwgaW50 IGx1dHNpemUsIGludCBwcmVsdXQpCit7CisgICAgaW50IGk7CisgICAgaWYgKGx1dHNpemUgPCAy IHx8IGx1dHNpemUgPiBNQVhfTEVWRUwpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiVG9vIGxhcmdlIG9yIGludmFsaWQgM0QgTFVUIHNpemVcbiIpOworICAgICAgICByZXR1 cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIGF2X2ZyZWVwKCZsdXQzZC0+bHV0KTsK KyAgICBsdXQzZC0+bHV0ID0gYXZfbWFsbG9jX2FycmF5KGx1dHNpemUgKiBsdXRzaXplICogbHV0 c2l6ZSwgc2l6ZW9mKCpsdXQzZC0+bHV0KSk7CisgICAgaWYgKCFsdXQzZC0+bHV0KQorICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgaWYgKHByZWx1dCkgeworICAgICAgICBs dXQzZC0+cHJlbHV0LnNpemUgPSBQUkVMVVRfU0laRTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IDM7IGkrKykgeworICAgICAgICAgICAgYXZfZnJlZXAoJmx1dDNkLT5wcmVsdXQubHV0W2ldKTsK KyAgICAgICAgICAgIGx1dDNkLT5wcmVsdXQubHV0W2ldID0gYXZfbWFsbG9jX2FycmF5KFBSRUxV VF9TSVpFLCBzaXplb2YoKmx1dDNkLT5wcmVsdXQubHV0WzBdKSk7CisgICAgICAgICAgICBpZiAo IWx1dDNkLT5wcmVsdXQubHV0W2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBsdXQzZC0+cHJlbHV0LnNp emUgPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgICAgICBh dl9mcmVlcCgmbHV0M2QtPnByZWx1dC5sdXRbaV0pOworICAgICAgICB9CisgICAgfQorICAgIGx1 dDNkLT5sdXRzaXplID0gbHV0c2l6ZTsKKyAgICBsdXQzZC0+bHV0c2l6ZTIgPSBsdXRzaXplICog bHV0c2l6ZTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfaWRlbnRpdHlfbWF0 cml4KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBMVVQzRENvbnRleHQgKmx1dDNkLCBpbnQgc2l6ZSkK K3sKKyAgICBpbnQgcmV0LCBpLCBqLCBrOworICAgIGNvbnN0IGludCBzaXplMiA9IHNpemUgKiBz aXplOworICAgIGNvbnN0IGZsb2F0IGMgPSAxLiAvIChzaXplIC0gMSk7CisKKyAgICByZXQgPSBm Zl9hbGxvY2F0ZV8zZGx1dChjdHgsIGx1dDNkLCBzaXplLCAwKTsKKyAgICBpZiAocmV0IDwgMCkK KyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGZvciAoayA9IDA7IGsgPCBzaXplOyBrKyspIHsK KyAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgIHN0cnVjdCByZ2J2ZWMgKnZl YyA9ICZsdXQzZC0+bHV0W2sgKiBzaXplMiArIGogKiBzaXplICsgaV07CisgICAgICAgICAgICAg ICAgdmVjLT5yID0gayAqIGM7CisgICAgICAgICAgICAgICAgdmVjLT5nID0gaiAqIGM7CisgICAg ICAgICAgICAgICAgdmVjLT5iID0gaSAqIGM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBNQVhfTElORV9TSVpFIDUxMgorCitz dGF0aWMgaW50IHNraXBfbGluZShjb25zdCBjaGFyICpwKQoreworICAgIHdoaWxlICgqcCAmJiBh dl9pc3NwYWNlKCpwKSkKKyAgICAgICAgcCsrOworICAgIHJldHVybiAhKnAgfHwgKnAgPT0gJyMn OworfQorCitzdGF0aWMgY2hhciogZmdldF9uZXh0X3dvcmQoY2hhciogZHN0LCBpbnQgbWF4LCBG SUxFKiBmKQoreworICAgIGludCBjOworICAgIGNoYXIgKnAgPSBkc3Q7CisKKyAgICAvKiBmb3Ig bnVsbCAqLworICAgIG1heC0tOworICAgIC8qIHNraXAgdW50aWwgbmV4dCBub24gd2hpdGVzcGFj ZSBjaGFyICovCisgICAgd2hpbGUgKChjID0gZmdldGMoZikpICE9IEVPRikgeworICAgICAgICBp ZiAoYXZfaXNzcGFjZShjKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICpwKysg PSBjOworICAgICAgICBtYXgtLTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogZ2V0 IG1heCBieXRlcyBvciB1cCB1bnRpbCBuZXh0IHdoaXRlc3BhY2UgY2hhciAqLworICAgIGZvciAo OyBtYXggPiAwOyBtYXgtLSkgeworICAgICAgICBpZiAoKGMgPSBmZ2V0YyhmKSkgPT0gRU9GKQor ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGF2X2lzc3BhY2UoYykpCisgICAgICAg ICAgICBicmVhazsKKworICAgICAgICAqcCsrID0gYzsKKyAgICB9CisKKyAgICAqcCA9IDA7Cisg ICAgaWYgKHAgPT0gZHN0KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gcDsKK30K KworCisjZGVmaW5lIE5FWFRfTElORShsb29wX2NvbmQpIGRvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgaWYgKCFmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7ICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuZXhw ZWN0ZWQgRU9GXG4iKTsgICAgICBcCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlIChsb29wX2NvbmQpCisK KyNkZWZpbmUgTkVYVF9MSU5FX09SX0dPVE8obG9vcF9jb25kLCBsYWJlbCkgZG8geyAgICAgICAg ICAgIFwKKyAgICBpZiAoIWZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5leHBlY3Rl ZCBFT0ZcbiIpOyAgICAgIFwKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZ290byBsYWJlbDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKGxvb3BfY29uZCkK KworLyogQmFzaWNhbGx5IHIgZyBhbmQgYiBmbG9hdCB2YWx1ZXMgb24gZWFjaCBsaW5lLCB3aXRo IGEgZmFjdWx0YXRpdmUgM0RMVVRTSVpFCisgKiBkaXJlY3RpdmU7IHNlZW1zIHRvIGJlIGdlbmVy YXRlZCBieSBEYXZpbmNpICovCitzdGF0aWMgaW50IHBhcnNlX2RhdChBVkZpbHRlckNvbnRleHQg KmN0eCwgTFVUM0RDb250ZXh0ICpsdXQzZCwgRklMRSAqZikKK3sKKyAgICBjaGFyIGxpbmVbTUFY X0xJTkVfU0laRV07CisgICAgaW50IHJldCwgaSwgaiwgaywgc2l6ZSwgc2l6ZTI7CisKKyAgICBs dXQzZC0+bHV0c2l6ZSA9IHNpemUgPSAzMzsKKyAgICBzaXplMiA9IHNpemUgKiBzaXplOworCisg ICAgTkVYVF9MSU5FKHNraXBfbGluZShsaW5lKSk7CisgICAgaWYgKCFzdHJuY21wKGxpbmUsICIz RExVVFNJWkUgIiwgMTApKSB7CisgICAgICAgIHNpemUgPSBzdHJ0b2wobGluZSArIDEwLCBOVUxM LCAwKTsKKworICAgICAgICBORVhUX0xJTkUoc2tpcF9saW5lKGxpbmUpKTsKKyAgICB9CisKKyAg ICByZXQgPSBmZl9hbGxvY2F0ZV8zZGx1dChjdHgsIGx1dDNkLCBzaXplLCAwKTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGZvciAoayA9IDA7IGsgPCBzaXpl OyBrKyspIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgIHN0cnVjdCBy Z2J2ZWMgKnZlYyA9ICZsdXQzZC0+bHV0W2sgKiBzaXplMiArIGogKiBzaXplICsgaV07CisgICAg ICAgICAgICAgICAgaWYgKGsgIT0gMCB8fCBqICE9IDAgfHwgaSAhPSAwKQorICAgICAgICAgICAg ICAgICAgICBORVhUX0xJTkUoc2tpcF9saW5lKGxpbmUpKTsKKyAgICAgICAgICAgICAgICBpZiAo YXZfc3NjYW5mKGxpbmUsICIlZiAlZiAlZiIsICZ2ZWMtPnIsICZ2ZWMtPmcsICZ2ZWMtPmIpICE9 IDMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBJcmlk YXMgZm9ybWF0ICovCitzdGF0aWMgaW50IHBhcnNlX2N1YmUoQVZGaWx0ZXJDb250ZXh0ICpjdHgs IExVVDNEQ29udGV4dCAqbHV0M2QsIEZJTEUgKmYpCit7CisgICAgY2hhciBsaW5lW01BWF9MSU5F X1NJWkVdOworICAgIGZsb2F0IG1pblszXSA9IHswLjAsIDAuMCwgMC4wfTsKKyAgICBmbG9hdCBt YXhbM10gPSB7MS4wLCAxLjAsIDEuMH07CisKKyAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9m KGxpbmUpLCBmKSkgeworICAgICAgICBpZiAoIXN0cm5jbXAobGluZSwgIkxVVF8zRF9TSVpFIiwg MTEpKSB7CisgICAgICAgICAgICBpbnQgcmV0LCBpLCBqLCBrOworICAgICAgICAgICAgY29uc3Qg aW50IHNpemUgPSBzdHJ0b2wobGluZSArIDEyLCBOVUxMLCAwKTsKKyAgICAgICAgICAgIGNvbnN0 IGludCBzaXplMiA9IHNpemUgKiBzaXplOworCisgICAgICAgICAgICByZXQgPSBmZl9hbGxvY2F0 ZV8zZGx1dChjdHgsIGx1dDNkLCBzaXplLCAwKTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKQor ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgICAgIGZvciAoayA9IDA7IGsg PCBzaXplOyBrKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisr KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZ2J2ZWMgKnZlYyA9ICZsdXQzZC0+bHV0W2kg KiBzaXplMiArIGogKiBzaXplICsga107CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsK K3RyeV9hZ2FpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUX0xJTkUoMCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJuY21wKGxpbmUsICJET01BSU5fIiwg NykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKnZhbHMgPSBOVUxM OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgICAgICghc3RybmNtcChsaW5l ICsgNywgIk1JTiAiLCA0KSkgdmFscyA9IG1pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZSBpZiAoIXN0cm5jbXAobGluZSArIDcsICJNQVggIiwgNCkpIHZhbHMgPSBtYXg7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFscykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdl9zc2NhbmYobGluZSArIDExLCAiJWYgJWYg JWYiLCB2YWxzLCB2YWxzICsgMSwgdmFscyArIDIpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJtaW46ICVmICVmICVmIHwgbWF4OiAl ZiAlZiAlZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblsw XSwgbWluWzFdLCBtaW5bMl0sIG1heFswXSwgbWF4WzFdLCBtYXhbMl0pOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIHRyeV9hZ2FpbjsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKGxpbmUsICJUSVRMRSIsIDUpKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdHJ5X2FnYWluOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHNraXBfbGlu ZShsaW5lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXZfc3NjYW5mKGxpbmUsICIl ZiAlZiAlZiIsICZ2ZWMtPnIsICZ2ZWMtPmcsICZ2ZWMtPmIpICE9IDMpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGx1dDNkLT5zY2FsZS5yID0gYXZfY2xpcGYo MS4gLyAobWF4WzBdIC0gbWluWzBdKSwgMC5mLCAxLmYpOworICAgIGx1dDNkLT5zY2FsZS5nID0g YXZfY2xpcGYoMS4gLyAobWF4WzFdIC0gbWluWzFdKSwgMC5mLCAxLmYpOworICAgIGx1dDNkLT5z Y2FsZS5iID0gYXZfY2xpcGYoMS4gLyAobWF4WzJdIC0gbWluWzJdKSwgMC5mLCAxLmYpOworCisg ICAgcmV0dXJuIDA7Cit9CisKKy8qIEFzc3VtZSAxN3gxN3gxNyBMVVQgd2l0aCBhIDE2LWJpdCBk ZXB0aAorICogRklYTUU6IGl0IHNlZW1zIHRoZXJlIGFyZSB2YXJpb3VzIDNkbCBmb3JtYXRzICov CitzdGF0aWMgaW50IHBhcnNlXzNkbChBVkZpbHRlckNvbnRleHQgKmN0eCwgTFVUM0RDb250ZXh0 ICpsdXQzZCwgRklMRSAqZikKK3sKKyAgICBjaGFyIGxpbmVbTUFYX0xJTkVfU0laRV07CisgICAg aW50IHJldCwgaSwgaiwgazsKKyAgICBjb25zdCBpbnQgc2l6ZSA9IDE3OworICAgIGNvbnN0IGlu dCBzaXplMiA9IDE3ICogMTc7CisgICAgY29uc3QgZmxvYXQgc2NhbGUgPSAxNioxNioxNjsKKwor ICAgIGx1dDNkLT5sdXRzaXplID0gc2l6ZTsKKworICAgIHJldCA9IGZmX2FsbG9jYXRlXzNkbHV0 KGN0eCwgbHV0M2QsIHNpemUsIDApOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4g cmV0OworCisgICAgTkVYVF9MSU5FKHNraXBfbGluZShsaW5lKSk7CisgICAgZm9yIChrID0gMDsg ayA8IHNpemU7IGsrKykgeworICAgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7Cisg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAg aW50IHIsIGcsIGI7CisgICAgICAgICAgICAgICAgc3RydWN0IHJnYnZlYyAqdmVjID0gJmx1dDNk LT5sdXRbayAqIHNpemUyICsgaiAqIHNpemUgKyBpXTsKKworICAgICAgICAgICAgICAgIE5FWFRf TElORShza2lwX2xpbmUobGluZSkpOworICAgICAgICAgICAgICAgIGlmIChhdl9zc2NhbmYobGlu ZSwgIiVkICVkICVkIiwgJnIsICZnLCAmYikgIT0gMykKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAgICAgdmVjLT5yID0gciAvIHNj YWxlOworICAgICAgICAgICAgICAgIHZlYy0+ZyA9IGcgLyBzY2FsZTsKKyAgICAgICAgICAgICAg ICB2ZWMtPmIgPSBiIC8gc2NhbGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg ICAgcmV0dXJuIDA7Cit9CisKKy8qIFBhbmRvcmEgZm9ybWF0ICovCitzdGF0aWMgaW50IHBhcnNl X20zZChBVkZpbHRlckNvbnRleHQgKmN0eCwgTFVUM0RDb250ZXh0ICpsdXQzZCwgRklMRSAqZikK K3sKKyAgICBmbG9hdCBzY2FsZTsKKyAgICBpbnQgcmV0LCBpLCBqLCBrLCBzaXplLCBzaXplMiwg aW4gPSAtMSwgb3V0ID0gLTE7CisgICAgY2hhciBsaW5lW01BWF9MSU5FX1NJWkVdOworICAgIHVp bnQ4X3QgcmdiX21hcFszXSA9IHswLCAxLCAyfTsKKworICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBz aXplb2YobGluZSksIGYpKSB7CisgICAgICAgIGlmICAgICAgKCFzdHJuY21wKGxpbmUsICJpbiIs ICAyKSkgaW4gID0gc3RydG9sKGxpbmUgKyAyLCBOVUxMLCAwKTsKKyAgICAgICAgZWxzZSBpZiAo IXN0cm5jbXAobGluZSwgIm91dCIsIDMpKSBvdXQgPSBzdHJ0b2wobGluZSArIDMsIE5VTEwsIDAp OworICAgICAgICBlbHNlIGlmICghc3RybmNtcChsaW5lLCAidmFsdWVzIiwgNikpIHsKKyAgICAg ICAgICAgIGNvbnN0IGNoYXIgKnAgPSBsaW5lICsgNjsKKyNkZWZpbmUgU0VUX0NPTE9SKGlkKSBk byB7ICAgICAgICAgICAgICAgICAgXAorICAgIHdoaWxlIChhdl9pc3NwYWNlKCpwKSkgICAgICAg ICAgICAgICAgICBcCisgICAgICAgIHArKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICBzd2l0Y2ggKCpwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNh c2UgJ3InOiByZ2JfbWFwW2lkXSA9IDA7IGJyZWFrOyAgICAgICBcCisgICAgY2FzZSAnZyc6IHJn Yl9tYXBbaWRdID0gMTsgYnJlYWs7ICAgICAgIFwKKyAgICBjYXNlICdiJzogcmdiX21hcFtpZF0g PSAyOyBicmVhazsgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgd2hpbGUgKCpwICYmICFhdl9pc3NwYWNlKCpwKSkgICAgICAgICAgIFwK KyAgICAgICAgcCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAo MCkKKyAgICAgICAgICAgIFNFVF9DT0xPUigwKTsKKyAgICAgICAgICAgIFNFVF9DT0xPUigxKTsK KyAgICAgICAgICAgIFNFVF9DT0xPUigyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9 CisgICAgfQorCisgICAgaWYgKGluID09IC0xIHx8IG91dCA9PSAtMSkgeworICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJpbiBhbmQgb3V0IG11c3QgYmUgZGVmaW5lZFxuIik7Cisg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKyAgICBpZiAoaW4gPCAy IHx8IG91dCA8IDIgfHwKKyAgICAgICAgaW4gID4gTUFYX0xFVkVMKk1BWF9MRVZFTCpNQVhfTEVW RUwgfHwKKyAgICAgICAgb3V0ID4gTUFYX0xFVkVMKk1BWF9MRVZFTCpNQVhfTEVWRUwpIHsKKyAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiaW52YWxpZCBpbiAoJWQpIG9yIG91dCAo JWQpXG4iLCBpbiwgb3V0KTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cisg ICAgfQorICAgIGZvciAoc2l6ZSA9IDE7IHNpemUqc2l6ZSpzaXplIDwgaW47IHNpemUrKyk7Cisg ICAgbHV0M2QtPmx1dHNpemUgPSBzaXplOworICAgIHNpemUyID0gc2l6ZSAqIHNpemU7CisKKyAg ICByZXQgPSBmZl9hbGxvY2F0ZV8zZGx1dChjdHgsIGx1dDNkLCBzaXplLCAwKTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHNjYWxlID0gMS4gLyAob3V0IC0g MSk7CisKKyAgICBmb3IgKGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7CisgICAgICAgIGZvciAoaiA9 IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBp KyspIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgcmdidmVjICp2ZWMgPSAmbHV0M2QtPmx1dFtr ICogc2l6ZTIgKyBqICogc2l6ZSArIGldOworICAgICAgICAgICAgICAgIGZsb2F0IHZhbFszXTsK KworICAgICAgICAgICAgICAgIE5FWFRfTElORSgwKTsKKyAgICAgICAgICAgICAgICBpZiAoYXZf c3NjYW5mKGxpbmUsICIlZiAlZiAlZiIsIHZhbCwgdmFsICsgMSwgdmFsICsgMikgIT0gMykKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAg ICAgICAgdmVjLT5yID0gdmFsW3JnYl9tYXBbMF1dICogc2NhbGU7CisgICAgICAgICAgICAgICAg dmVjLT5nID0gdmFsW3JnYl9tYXBbMV1dICogc2NhbGU7CisgICAgICAgICAgICAgICAgdmVjLT5i ID0gdmFsW3JnYl9tYXBbMl1dICogc2NhbGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVhcmVzdF9zYW1wbGVfaW5kZXgo ZmxvYXQgKmRhdGEsIGZsb2F0IHgsIGludCBsb3csIGludCBoaSkKK3sKKyAgICBpbnQgbWlkOwor ICAgIGlmICh4IDwgZGF0YVtsb3ddKQorICAgICAgICByZXR1cm4gbG93OworCisgICAgaWYgKHgg PiBkYXRhW2hpXSkKKyAgICAgICAgcmV0dXJuIGhpOworCisgICAgZm9yICg7OykgeworICAgICAg ICBhdl9hc3NlcnQwKHggPj0gZGF0YVtsb3ddKTsKKyAgICAgICAgYXZfYXNzZXJ0MCh4IDw9IGRh dGFbaGldKTsKKyAgICAgICAgYXZfYXNzZXJ0MCgoaGktbG93KSA+IDApOworCisgICAgICAgIGlm IChoaSAtIGxvdyA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIGxvdzsKKworICAgICAgICBtaWQg PSAobG93ICsgaGkpIC8gMjsKKworICAgICAgICBpZiAoeCA8IGRhdGFbbWlkXSkKKyAgICAgICAg ICAgIGhpID0gbWlkOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb3cgPSBtaWQ7CisgICAg fQorCisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTkVYVF9GTE9BVF9PUl9HT1RPKHZhbHVl LCBsYWJlbCkgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIWZnZXRfbmV4dF93b3JkKGxp bmUsIHNpemVvZihsaW5lKSAsZikpIHsgICAgICAgICAgIFwKKyAgICAgICAgcmV0ID0gQVZFUlJP Ul9JTlZBTElEREFUQTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZ290byBs YWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICBpZiAoYXZfc3NjYW5mKGxpbmUsICIlZiIsICZ2YWx1ZSkgIT0gMSkgeyAgICAgICAgICAgICAg IFwKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICB9CisKK3N0YXRpYyBpbnQgcGFyc2VfY2luZXNwYWNlKEFWRmls dGVyQ29udGV4dCAqY3R4LCBMVVQzRENvbnRleHQgKmx1dDNkLCBGSUxFICpmKQoreworICAgIGNo YXIgbGluZVtNQVhfTElORV9TSVpFXTsKKyAgICBmbG9hdCBpbl9taW5bM10gID0gezAuMCwgMC4w LCAwLjB9OworICAgIGZsb2F0IGluX21heFszXSAgPSB7MS4wLCAxLjAsIDEuMH07CisgICAgZmxv YXQgb3V0X21pblszXSA9IHswLjAsIDAuMCwgMC4wfTsKKyAgICBmbG9hdCBvdXRfbWF4WzNdID0g ezEuMCwgMS4wLCAxLjB9OworICAgIGludCBpbnNpZGVfbWV0YWRhdGEgPSAwLCBzaXplLCBzaXpl MjsKKyAgICBpbnQgcHJlbHV0ID0gMDsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGludCBwcmVs dXRfc2l6ZXNbM10gPSB7MCwgMCwgMH07CisgICAgZmxvYXQgKmluX3ByZWx1dFszXSAgPSB7TlVM TCwgTlVMTCwgTlVMTH07CisgICAgZmxvYXQgKm91dF9wcmVsdXRbM10gPSB7TlVMTCwgTlVMTCwg TlVMTH07CisKKyAgICBORVhUX0xJTkVfT1JfR09UTyhza2lwX2xpbmUobGluZSksIGVuZCk7Cisg ICAgaWYgKHN0cm5jbXAobGluZSwgIkNTUExVVFYxMDAiLCAxMCkpIHsKKyAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLCAiTm90IGNpbmVTcGFjZSBMVVQgZm9ybWF0XG4iKTsKKyAgICAg ICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAg ICBORVhUX0xJTkVfT1JfR09UTyhza2lwX2xpbmUobGluZSksIGVuZCk7CisgICAgaWYgKHN0cm5j bXAobGluZSwgIjNEIiwgMikpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi Tm90IDNEIExVVCBmb3JtYXRcbiIpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cisg ICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIE5FWFRf TElORV9PUl9HT1RPKHNraXBfbGluZShsaW5lKSwgZW5kKTsKKworICAgICAgICBpZiAoIXN0cm5j bXAobGluZSwgIkJFR0lOIE1FVEFEQVRBIiwgMTQpKSB7CisgICAgICAgICAgICBpbnNpZGVfbWV0 YWRhdGEgPSAxOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg KCFzdHJuY21wKGxpbmUsICJFTkQgTUVUQURBVEEiLCAxMikpIHsKKyAgICAgICAgICAgIGluc2lk ZV9tZXRhZGF0YSA9IDA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoaW5zaWRlX21ldGFkYXRhID09IDApIHsKKyAgICAgICAgICAgIGludCBzaXplX3IsIHNp emVfZywgc2l6ZV9iOworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykg eworICAgICAgICAgICAgICAgIGludCBucG9pbnRzID0gc3RydG9sKGxpbmUsIE5VTEwsIDApOwor CisgICAgICAgICAgICAgICAgaWYgKG5wb2ludHMgPiAyKSB7CisgICAgICAgICAgICAgICAgICAg IGZsb2F0IHYsbGFzdDsKKworICAgICAgICAgICAgICAgICAgICBpZiAobnBvaW50cyA+IFBSRUxV VF9TSVpFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJS T1IsICJQcmVsdXQgc2l6ZSB0b28gbGFyZ2UuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGVuZDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChp bl9wcmVsdXRbaV0gfHwgb3V0X3ByZWx1dFtpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBmaWxlIGhhcyBtdWx0aXBsZSBwcmVs dXRzLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSURE QVRBOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpbl9wcmVsdXRbaV0gID0gKGZsb2F0Kilhdl9t YWxsb2MobnBvaW50cyAqIHNpemVvZihmbG9hdCkpOworICAgICAgICAgICAgICAgICAgICBvdXRf cHJlbHV0W2ldID0gKGZsb2F0Kilhdl9tYWxsb2MobnBvaW50cyAqIHNpemVvZihmbG9hdCkpOwor ICAgICAgICAgICAgICAgICAgICBpZiAoIWluX3ByZWx1dFtpXSB8fCAhb3V0X3ByZWx1dFtpXSkg eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAg ICAgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgICAgICAgICBwcmVsdXRfc2l6ZXNbaV0gPSBucG9pbnRzOworICAgICAgICAgICAg ICAgICAgICBpbl9taW5baV0gPSBGTFRfTUFYOworICAgICAgICAgICAgICAgICAgICBpbl9tYXhb aV0gPSAtRkxUX01BWDsKKyAgICAgICAgICAgICAgICAgICAgb3V0X21pbltpXSA9IEZMVF9NQVg7 CisgICAgICAgICAgICAgICAgICAgIG91dF9tYXhbaV0gPSAtRkxUX01BWDsKKworICAgICAgICAg ICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5wb2ludHM7IGorKykgeworICAgICAgICAg ICAgICAgICAgICAgICAgTkVYVF9GTE9BVF9PUl9HT1RPKHYsIGVuZCkKKyAgICAgICAgICAgICAg ICAgICAgICAgIGluX21pbltpXSA9IEZGTUlOKGluX21pbltpXSwgdik7CisgICAgICAgICAgICAg ICAgICAgICAgICBpbl9tYXhbaV0gPSBGRk1BWChpbl9tYXhbaV0sIHYpOworICAgICAgICAgICAg ICAgICAgICAgICAgaW5fcHJlbHV0W2ldW2pdID0gdjsKKyAgICAgICAgICAgICAgICAgICAgICAg IGlmIChqID4gMCAmJiB2IDwgbGFzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgZmlsZSwgbm9uIGluY3JlYXNpbmcgcHJl bHV0LlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9N RU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHY7CisgICAgICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IG5wb2ludHM7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9GTE9BVF9PUl9H T1RPKHYsIGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9taW5baV0gPSBGRk1JTihv dXRfbWluW2ldLCB2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9tYXhbaV0gPSBGRk1B WChvdXRfbWF4W2ldLCB2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wcmVsdXRbaV1b al0gPSB2OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKG5wb2ludHMgPT0gMikgIHsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9MSU5FX09SX0dP VE8oc2tpcF9saW5lKGxpbmUpLCBlbmQpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXZfc3Nj YW5mKGxpbmUsICIlZiAlZiIsICZpbl9taW5baV0sICZpbl9tYXhbaV0pICE9IDIpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICBORVhUX0xJTkVfT1JfR09UTyhza2lwX2xpbmUobGluZSksIGVuZCk7CisgICAg ICAgICAgICAgICAgICAgIGlmIChhdl9zc2NhbmYobGluZSwgIiVmICVmIiwgJm91dF9taW5baV0s ICZvdXRfbWF4W2ldKSAhPSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVS Uk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAg ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIG51bWJlciBv ZiBwcmUtbHV0IHBvaW50cy5cbiIpOworICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9S X1BBVENIV0VMQ09NRTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAgICAgTkVYVF9MSU5FX09SX0dPVE8oc2tpcF9saW5lKGxp bmUpLCBlbmQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXZfc3NjYW5mKGxp bmUsICIlZCAlZCAlZCIsICZzaXplX3IsICZzaXplX2csICZzaXplX2IpICE9IDMpIHsKKyAgICAg ICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgICAgICAgICAgZ290byBl bmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2l6ZV9yICE9IHNpemVfZyB8fCBz aXplX3IgIT0gc2l6ZV9iKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiVW5zdXBwb3J0ZWQgc2l6ZSBjb21iaW5hdGlvbjogJWR4JWR4JWQuXG4iLCBzaXplX3Is IHNpemVfZywgc2l6ZV9iKTsKKyAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SX1BBVENIV0VM Q09NRTsKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgc2l6ZSA9IHNpemVfcjsKKyAgICAgICAgICAgIHNpemUyID0gc2l6ZSAqIHNpemU7CisK KyAgICAgICAgICAgIGlmIChwcmVsdXRfc2l6ZXNbMF0gJiYgcHJlbHV0X3NpemVzWzFdICYmIHBy ZWx1dF9zaXplc1syXSkKKyAgICAgICAgICAgICAgICBwcmVsdXQgPSAxOworCisgICAgICAgICAg ICByZXQgPSBmZl9hbGxvY2F0ZV8zZGx1dChjdHgsIGx1dDNkLCBzaXplLCBwcmVsdXQpOworICAg ICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAg ICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBzaXplOyBrKyspIHsKKyAgICAgICAgICAgICAg ICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgICAgICAgICBm b3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHJnYnZlYyAqdmVjID0gJmx1dDNkLT5sdXRbaSAqIHNpemUyICsgaiAqIHNpemUgKyBr XTsKKworICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9MSU5FX09SX0dPVE8oc2tpcF9saW5l KGxpbmUpLCBlbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF2X3NzY2FuZihsaW5l LCAiJWYgJWYgJWYiLCAmdmVjLT5yLCAmdmVjLT5nLCAmdmVjLT5iKSAhPSAzKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KworICAgICAgICAgICAgICAgICAgICAgICAgdmVjLT5yICo9IG91dF9tYXhbMF0gLSBvdXRfbWlu WzBdOworICAgICAgICAgICAgICAgICAgICAgICAgdmVjLT5nICo9IG91dF9tYXhbMV0gLSBvdXRf bWluWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgdmVjLT5iICo9IG91dF9tYXhbMl0gLSBv dXRfbWluWzJdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg IGlmIChwcmVsdXQpIHsKKyAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCAzOyBjKyspIHsKKwor ICAgICAgICAgICAgbHV0M2QtPnByZWx1dC5taW5bY10gPSBpbl9taW5bY107CisgICAgICAgICAg ICBsdXQzZC0+cHJlbHV0Lm1heFtjXSA9IGluX21heFtjXTsKKyAgICAgICAgICAgIGx1dDNkLT5w cmVsdXQuc2NhbGVbY10gPSAgKDEuMGYgLyAoZmxvYXQpKGluX21heFtjXSAtIGluX21pbltjXSkp ICogKGx1dDNkLT5wcmVsdXQuc2l6ZSAtIDEpOworCisgICAgICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IGx1dDNkLT5wcmVsdXQuc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgZmxvYXQg bWl4ID0gKGZsb2F0KSBpIC8gKGZsb2F0KShsdXQzZC0+cHJlbHV0LnNpemUgLSAxKTsKKyAgICAg ICAgICAgICAgICBmbG9hdCB4ID0gbGVycGYoaW5fbWluW2NdLCBpbl9tYXhbY10sIG1peCksIGEs IGI7CisKKyAgICAgICAgICAgICAgICBpbnQgaWR4ID0gbmVhcmVzdF9zYW1wbGVfaW5kZXgoaW5f cHJlbHV0W2NdLCB4LCAwLCBwcmVsdXRfc2l6ZXNbY10tMSk7CisgICAgICAgICAgICAgICAgYXZf YXNzZXJ0MChpZHggKyAxIDwgcHJlbHV0X3NpemVzW2NdKTsKKworICAgICAgICAgICAgICAgIGEg ICA9IG91dF9wcmVsdXRbY11baWR4ICsgMF07CisgICAgICAgICAgICAgICAgYiAgID0gb3V0X3By ZWx1dFtjXVtpZHggKyAxXTsKKyAgICAgICAgICAgICAgICBtaXggPSB4IC0gaW5fcHJlbHV0W2Nd W2lkeF07CisKKyAgICAgICAgICAgICAgICBsdXQzZC0+cHJlbHV0Lmx1dFtjXVtpXSA9IHNhbml0 aXplZihsZXJwZihhLCBiLCBtaXgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBsdXQzZC0+c2NhbGUuciA9IDEuMDBmOworICAgICAgICBsdXQzZC0+c2NhbGUuZyA9IDEuMDBm OworICAgICAgICBsdXQzZC0+c2NhbGUuYiA9IDEuMDBmOworCisgICAgfSBlbHNlIHsKKyAgICAg ICAgbHV0M2QtPnNjYWxlLnIgPSBhdl9jbGlwZigxLiAvIChpbl9tYXhbMF0gLSBpbl9taW5bMF0p LCAwLmYsIDEuZik7CisgICAgICAgIGx1dDNkLT5zY2FsZS5nID0gYXZfY2xpcGYoMS4gLyAoaW5f bWF4WzFdIC0gaW5fbWluWzFdKSwgMC5mLCAxLmYpOworICAgICAgICBsdXQzZC0+c2NhbGUuYiA9 IGF2X2NsaXBmKDEuIC8gKGluX21heFsyXSAtIGluX21pblsyXSksIDAuZiwgMS5mKTsKKyAgICB9 CisKK2VuZDoKKyAgICBmb3IgKGludCBjID0gMDsgYyA8IDM7IGMrKykgeworICAgICAgICBhdl9m cmVlcCgmaW5fcHJlbHV0W2NdKTsKKyAgICAgICAgYXZfZnJlZXAoJm91dF9wcmVsdXRbY10pOwor ICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCithdl9jb2xkIGludCBmZl9sdXQzZF9pbml0KEFW RmlsdGVyQ29udGV4dCAqY3R4LCBMVVQzRENvbnRleHQgKmx1dDNkKQoreworICAgIGludCByZXQ7 CisgICAgRklMRSAqZjsKKyAgICBjb25zdCBjaGFyICpleHQ7CisKKyAgICBsdXQzZC0+c2NhbGUu ciA9IGx1dDNkLT5zY2FsZS5nID0gbHV0M2QtPnNjYWxlLmIgPSAxLmY7CisKKyAgICBpZiAoIWx1 dDNkLT5maWxlKSB7CisgICAgICAgIHJldHVybiBzZXRfaWRlbnRpdHlfbWF0cml4KGN0eCwgbHV0 M2QsIDMyKTsKKyAgICB9CisKKyAgICBmID0gYXZwcml2X2ZvcGVuX3V0ZjgobHV0M2QtPmZpbGUs ICJyIik7CisgICAgaWYgKCFmKSB7CisgICAgICAgIHJldCA9IEFWRVJST1IoZXJybm8pOworICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICIlczogJXNcbiIsIGx1dDNkLT5maWxlLCBh dl9lcnIyc3RyKHJldCkpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGV4dCA9 IHN0cnJjaHIobHV0M2QtPmZpbGUsICcuJyk7CisgICAgaWYgKCFleHQpIHsKKyAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGd1ZXNzIHRoZSBmb3JtYXQgZnJvbSB0 aGUgZXh0ZW5zaW9uXG4iKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIGV4dCsrOworCisgICAgaWYgKCFhdl9zdHJjYXNl Y21wKGV4dCwgImRhdCIpKSB7CisgICAgICAgIHJldCA9IHBhcnNlX2RhdChjdHgsIGx1dDNkLCBm KTsKKyAgICB9IGVsc2UgaWYgKCFhdl9zdHJjYXNlY21wKGV4dCwgIjNkbCIpKSB7CisgICAgICAg IHJldCA9IHBhcnNlXzNkbChjdHgsIGx1dDNkLCBmKTsKKyAgICB9IGVsc2UgaWYgKCFhdl9zdHJj YXNlY21wKGV4dCwgImN1YmUiKSkgeworICAgICAgICByZXQgPSBwYXJzZV9jdWJlKGN0eCwgbHV0 M2QsIGYpOworICAgIH0gZWxzZSBpZiAoIWF2X3N0cmNhc2VjbXAoZXh0LCAibTNkIikpIHsKKyAg ICAgICAgcmV0ID0gcGFyc2VfbTNkKGN0eCwgbHV0M2QsIGYpOworICAgIH0gZWxzZSBpZiAoIWF2 X3N0cmNhc2VjbXAoZXh0LCAiY3NwIikpIHsKKyAgICAgICAgcmV0ID0gcGFyc2VfY2luZXNwYWNl KGN0eCwgbHV0M2QsIGYpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwgIlVucmVjb2duaXplZCAnLiVzJyBmaWxlIHR5cGVcbiIsIGV4dCk7CisgICAgICAg IHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBpZiAoIXJldCAmJiAhbHV0M2Qt Pmx1dHNpemUpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiM0QgTFVUIGlz IGVtcHR5XG4iKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisK K2VuZDoKKyAgICBmY2xvc2UoZik7CisgICAgcmV0dXJuIHJldDsKK30KKworYXZfY29sZCB2b2lk IGZmX2x1dDNkX3VuaW5pdChMVVQzRENvbnRleHQgKmx1dDNkKQoreworICAgIGludCBpOworICAg IGF2X2ZyZWVwKCZsdXQzZC0+bHV0KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsK KyAgICAgICAgYXZfZnJlZXAoJmx1dDNkLT5wcmVsdXQubHV0W2ldKTsKKyAgICB9Cit9CmRpZmYg LS1naXQgYS9saWJhdmZpbHRlci9sdXQzZC5oIGIvbGliYXZmaWx0ZXIvbHV0M2QuaAppbmRleCAx NGUzYzdmZWE2Li5iNmFhZWQ4NWYxIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9sdXQzZC5oCisr KyBiL2xpYmF2ZmlsdGVyL2x1dDNkLmgKQEAgLTg0LDQgKzg0LDE3IEBAIHR5cGVkZWYgc3RydWN0 IFRocmVhZERhdGEgewogCiB2b2lkIGZmX2x1dDNkX2luaXRfeDg2KExVVDNEQ29udGV4dCAqcywg Y29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNjKTsKIAoraW50IGZmX2FsbG9jYXRlXzNkbHV0 KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBMVVQzRENvbnRleHQgKmx1dDNkLCBpbnQgbHV0c2l6ZSwg aW50IHByZWx1dCk7CisKKy8qKgorICogTG9hZCAzRCBMVVQgZnJvbSBmaWxlLgorICoKKyAqIEBw YXJhbSBsdXQzZCBMVVQzRENvbnRleHQgTG9hZCAzRCBMVVQgZnJvbSBwYXRoIHNwZWNpZmllZCBi eSBgbHV0M2QtPmZpbGVgLgorICogICAgIElmIGBsdXQzZC0+ZmlsZWAgaXMgTlVMTCwgaW5pdGlh bGl6ZSBhbiBpZGVudGl0eSAzRCBMVVQuCisgKi8KK2ludCBmZl9sdXQzZF9pbml0KEFWRmlsdGVy Q29udGV4dCAqY3R4LCBMVVQzRENvbnRleHQgKmx1dDNkKTsKKworLyoqICBSZWxlYXNlIG1lbW9y eSB1c2VkIHRvIGhvbGQgM0QgTFVULiAqLwordm9pZCBmZl9sdXQzZF91bmluaXQoTFVUM0RDb250 ZXh0ICpsdXQzZCk7CisKICNlbmRpZiAvKiBBVkZJTFRFUl9MVVQzRF9IICovCmRpZmYgLS1naXQg YS9saWJhdmZpbHRlci92Zl9sdXQzZC5jIGIvbGliYXZmaWx0ZXIvdmZfbHV0M2QuYwppbmRleCA0 ZWRjYzJjN2E3Li4xZGE3OThlMjEwIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci92Zl9sdXQzZC5j CisrKyBiL2xpYmF2ZmlsdGVyL3ZmX2x1dDNkLmMKQEAgLTU1MiwzOSArNTUyLDYgQEAgc3RhdGlj IGludCBza2lwX2xpbmUoY29uc3QgY2hhciAqcCkKICAgICByZXR1cm4gISpwIHx8ICpwID09ICcj JzsKIH0KIAotc3RhdGljIGNoYXIqIGZnZXRfbmV4dF93b3JkKGNoYXIqIGRzdCwgaW50IG1heCwg RklMRSogZikKLXsKLSAgICBpbnQgYzsKLSAgICBjaGFyICpwID0gZHN0OwotCi0gICAgLyogZm9y IG51bGwgKi8KLSAgICBtYXgtLTsKLSAgICAvKiBza2lwIHVudGlsIG5leHQgbm9uIHdoaXRlc3Bh Y2UgY2hhciAqLwotICAgIHdoaWxlICgoYyA9IGZnZXRjKGYpKSAhPSBFT0YpIHsKLSAgICAgICAg aWYgKGF2X2lzc3BhY2UoYykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAqcCsr ID0gYzsKLSAgICAgICAgbWF4LS07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8qIGdl dCBtYXggYnl0ZXMgb3IgdXAgdW50aWwgbmV4dCB3aGl0ZXNwYWNlIGNoYXIgKi8KLSAgICBmb3Ig KDsgbWF4ID4gMDsgbWF4LS0pIHsKLSAgICAgICAgaWYgKChjID0gZmdldGMoZikpID09IEVPRikK LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChhdl9pc3NwYWNlKGMpKQotICAgICAg ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgKnArKyA9IGM7Ci0gICAgfQotCi0gICAgKnAgPSAwOwot ICAgIGlmIChwID09IGRzdCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIHA7Ci19 CiAKICNkZWZpbmUgTkVYVF9MSU5FKGxvb3BfY29uZCkgZG8geyAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKICAgICBpZiAoIWZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsgICAgICAg ICAgICAgICAgICAgIFwKQEAgLTU5Myw1MDUgKzU2MCw2IEBAIHN0YXRpYyBjaGFyKiBmZ2V0X25l eHRfd29yZChjaGFyKiBkc3QsIGludCBtYXgsIEZJTEUqIGYpCiAgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlIChsb29w X2NvbmQpCiAKLSNkZWZpbmUgTkVYVF9MSU5FX09SX0dPVE8obG9vcF9jb25kLCBsYWJlbCkgZG8g eyAgICAgICAgICAgIFwKLSAgICBpZiAoIWZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi VW5leHBlY3RlZCBFT0ZcbiIpOyAgICAgIFwKLSAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElE REFUQTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ290byBsYWJlbDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKGxv b3BfY29uZCkKLQotc3RhdGljIGludCBhbGxvY2F0ZV8zZGx1dChBVkZpbHRlckNvbnRleHQgKmN0 eCwgaW50IGx1dHNpemUsIGludCBwcmVsdXQpCi17Ci0gICAgTFVUM0RDb250ZXh0ICpsdXQzZCA9 IGN0eC0+cHJpdjsKLSAgICBpbnQgaTsKLSAgICBpZiAobHV0c2l6ZSA8IDIgfHwgbHV0c2l6ZSA+ IE1BWF9MRVZFTCkgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJUb28gbGFy Z2Ugb3IgaW52YWxpZCAzRCBMVVQgc2l6ZVxuIik7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7Ci0gICAgfQotCi0gICAgYXZfZnJlZXAoJmx1dDNkLT5sdXQpOwotICAgIGx1dDNkLT5s dXQgPSBhdl9tYWxsb2NfYXJyYXkobHV0c2l6ZSAqIGx1dHNpemUgKiBsdXRzaXplLCBzaXplb2Yo Kmx1dDNkLT5sdXQpKTsKLSAgICBpZiAoIWx1dDNkLT5sdXQpCi0gICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7Ci0KLSAgICBpZiAocHJlbHV0KSB7Ci0gICAgICAgIGx1dDNkLT5wcmVsdXQu c2l6ZSA9IFBSRUxVVF9TSVpFOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0g ICAgICAgICAgICBhdl9mcmVlcCgmbHV0M2QtPnByZWx1dC5sdXRbaV0pOwotICAgICAgICAgICAg bHV0M2QtPnByZWx1dC5sdXRbaV0gPSBhdl9tYWxsb2NfYXJyYXkoUFJFTFVUX1NJWkUsIHNpemVv ZigqbHV0M2QtPnByZWx1dC5sdXRbMF0pKTsKLSAgICAgICAgICAgIGlmICghbHV0M2QtPnByZWx1 dC5sdXRbaV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICAg ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGx1dDNkLT5wcmVsdXQuc2l6ZSA9IDA7Ci0gICAg ICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgICAgIGF2X2ZyZWVwKCZsdXQz ZC0+cHJlbHV0Lmx1dFtpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbHV0M2QtPmx1dHNpemUg PSBsdXRzaXplOwotICAgIGx1dDNkLT5sdXRzaXplMiA9IGx1dHNpemUgKiBsdXRzaXplOwotICAg IHJldHVybiAwOwotfQotCi0vKiBCYXNpY2FsbHkgciBnIGFuZCBiIGZsb2F0IHZhbHVlcyBvbiBl YWNoIGxpbmUsIHdpdGggYSBmYWN1bHRhdGl2ZSAzRExVVFNJWkUKLSAqIGRpcmVjdGl2ZTsgc2Vl bXMgdG8gYmUgZ2VuZXJhdGVkIGJ5IERhdmluY2kgKi8KLXN0YXRpYyBpbnQgcGFyc2VfZGF0KEFW RmlsdGVyQ29udGV4dCAqY3R4LCBGSUxFICpmKQotewotICAgIExVVDNEQ29udGV4dCAqbHV0M2Qg PSBjdHgtPnByaXY7Ci0gICAgY2hhciBsaW5lW01BWF9MSU5FX1NJWkVdOwotICAgIGludCByZXQs IGksIGosIGssIHNpemUsIHNpemUyOwotCi0gICAgbHV0M2QtPmx1dHNpemUgPSBzaXplID0gMzM7 Ci0gICAgc2l6ZTIgPSBzaXplICogc2l6ZTsKLQotICAgIE5FWFRfTElORShza2lwX2xpbmUobGlu ZSkpOwotICAgIGlmICghc3RybmNtcChsaW5lLCAiM0RMVVRTSVpFICIsIDEwKSkgewotICAgICAg ICBzaXplID0gc3RydG9sKGxpbmUgKyAxMCwgTlVMTCwgMCk7Ci0KLSAgICAgICAgTkVYVF9MSU5F KHNraXBfbGluZShsaW5lKSk7Ci0gICAgfQotCi0gICAgcmV0ID0gYWxsb2NhdGVfM2RsdXQoY3R4 LCBzaXplLCAwKTsKLSAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgcmV0dXJuIHJldDsKLQotICAg IGZvciAoayA9IDA7IGsgPCBzaXplOyBrKyspIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IHNp emU7IGorKykgewotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAg ICAgICAgICAgICAgIHN0cnVjdCByZ2J2ZWMgKnZlYyA9ICZsdXQzZC0+bHV0W2sgKiBzaXplMiAr IGogKiBzaXplICsgaV07Ci0gICAgICAgICAgICAgICAgaWYgKGsgIT0gMCB8fCBqICE9IDAgfHwg aSAhPSAwKQotICAgICAgICAgICAgICAgICAgICBORVhUX0xJTkUoc2tpcF9saW5lKGxpbmUpKTsK LSAgICAgICAgICAgICAgICBpZiAoYXZfc3NjYW5mKGxpbmUsICIlZiAlZiAlZiIsICZ2ZWMtPnIs ICZ2ZWMtPmcsICZ2ZWMtPmIpICE9IDMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJl dHVybiAwOwotfQotCi0vKiBJcmlkYXMgZm9ybWF0ICovCi1zdGF0aWMgaW50IHBhcnNlX2N1YmUo QVZGaWx0ZXJDb250ZXh0ICpjdHgsIEZJTEUgKmYpCi17Ci0gICAgTFVUM0RDb250ZXh0ICpsdXQz ZCA9IGN0eC0+cHJpdjsKLSAgICBjaGFyIGxpbmVbTUFYX0xJTkVfU0laRV07Ci0gICAgZmxvYXQg bWluWzNdID0gezAuMCwgMC4wLCAwLjB9OwotICAgIGZsb2F0IG1heFszXSA9IHsxLjAsIDEuMCwg MS4wfTsKLQotICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7Ci0gICAg ICAgIGlmICghc3RybmNtcChsaW5lLCAiTFVUXzNEX1NJWkUiLCAxMSkpIHsKLSAgICAgICAgICAg IGludCByZXQsIGksIGosIGs7Ci0gICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9IHN0cnRvbChs aW5lICsgMTIsIE5VTEwsIDApOwotICAgICAgICAgICAgY29uc3QgaW50IHNpemUyID0gc2l6ZSAq IHNpemU7Ci0KLSAgICAgICAgICAgIHJldCA9IGFsbG9jYXRlXzNkbHV0KGN0eCwgc2l6ZSwgMCk7 Ci0gICAgICAgICAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owot Ci0gICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7Ci0gICAgICAgICAgICAg ICAgZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgewotICAgICAgICAgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg cmdidmVjICp2ZWMgPSAmbHV0M2QtPmx1dFtpICogc2l6ZTIgKyBqICogc2l6ZSArIGtdOwotCi0g ICAgICAgICAgICAgICAgICAgICAgICBkbyB7Ci10cnlfYWdhaW46Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgTkVYVF9MSU5FKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm ICghc3RybmNtcChsaW5lLCAiRE9NQUlOXyIsIDcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZsb2F0ICp2YWxzID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgICAgICAoIXN0cm5jbXAobGluZSArIDcsICJNSU4gIiwgNCkpIHZhbHMgPSBtaW47 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJuY21wKGxpbmUg KyA3LCAiTUFYICIsIDQpKSB2YWxzID0gbWF4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoIXZhbHMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YXZfc3NjYW5mKGxpbmUgKyAxMSwgIiVmICVmICVmIiwgdmFscywgdmFscyArIDEsIHZhbHMgKyAy KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RF QlVHLCAibWluOiAlZiAlZiAlZiB8IG1heDogJWYgJWYgJWZcbiIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtaW5bMF0sIG1pblsxXSwgbWluWzJdLCBtYXhbMF0sIG1h eFsxXSwgbWF4WzJdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB0cnlf YWdhaW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RybmNtcChs aW5lLCAiVElUTEUiLCA1KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IHRyeV9hZ2FpbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgICAgICB9IHdoaWxlIChza2lwX2xpbmUobGluZSkpOwotICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGF2X3NzY2FuZihsaW5lLCAiJWYgJWYgJWYiLCAmdmVjLT5yLCAmdmVjLT5nLCAm dmVjLT5iKSAhPSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg ICBsdXQzZC0+c2NhbGUuciA9IGF2X2NsaXBmKDEuIC8gKG1heFswXSAtIG1pblswXSksIDAuZiwg MS5mKTsKLSAgICBsdXQzZC0+c2NhbGUuZyA9IGF2X2NsaXBmKDEuIC8gKG1heFsxXSAtIG1pblsx XSksIDAuZiwgMS5mKTsKLSAgICBsdXQzZC0+c2NhbGUuYiA9IGF2X2NsaXBmKDEuIC8gKG1heFsy XSAtIG1pblsyXSksIDAuZiwgMS5mKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vKiBBc3N1bWUg MTd4MTd4MTcgTFVUIHdpdGggYSAxNi1iaXQgZGVwdGgKLSAqIEZJWE1FOiBpdCBzZWVtcyB0aGVy ZSBhcmUgdmFyaW91cyAzZGwgZm9ybWF0cyAqLwotc3RhdGljIGludCBwYXJzZV8zZGwoQVZGaWx0 ZXJDb250ZXh0ICpjdHgsIEZJTEUgKmYpCi17Ci0gICAgY2hhciBsaW5lW01BWF9MSU5FX1NJWkVd OwotICAgIExVVDNEQ29udGV4dCAqbHV0M2QgPSBjdHgtPnByaXY7Ci0gICAgaW50IHJldCwgaSwg aiwgazsKLSAgICBjb25zdCBpbnQgc2l6ZSA9IDE3OwotICAgIGNvbnN0IGludCBzaXplMiA9IDE3 ICogMTc7Ci0gICAgY29uc3QgZmxvYXQgc2NhbGUgPSAxNioxNioxNjsKLQotICAgIGx1dDNkLT5s dXRzaXplID0gc2l6ZTsKLQotICAgIHJldCA9IGFsbG9jYXRlXzNkbHV0KGN0eCwgc2l6ZSwgMCk7 Ci0gICAgaWYgKHJldCA8IDApCi0gICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICBORVhUX0xJTkUo c2tpcF9saW5lKGxpbmUpKTsKLSAgICBmb3IgKGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7Ci0gICAg ICAgIGZvciAoaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpbnQgciwgZywgYjsKLSAgICAgICAg ICAgICAgICBzdHJ1Y3QgcmdidmVjICp2ZWMgPSAmbHV0M2QtPmx1dFtrICogc2l6ZTIgKyBqICog c2l6ZSArIGldOwotCi0gICAgICAgICAgICAgICAgTkVYVF9MSU5FKHNraXBfbGluZShsaW5lKSk7 Ci0gICAgICAgICAgICAgICAgaWYgKGF2X3NzY2FuZihsaW5lLCAiJWQgJWQgJWQiLCAmciwgJmcs ICZiKSAhPSAzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKLSAgICAgICAgICAgICAgICB2ZWMtPnIgPSByIC8gc2NhbGU7Ci0gICAgICAgICAgICAgICAg dmVjLT5nID0gZyAvIHNjYWxlOwotICAgICAgICAgICAgICAgIHZlYy0+YiA9IGIgLyBzY2FsZTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyog UGFuZG9yYSBmb3JtYXQgKi8KLXN0YXRpYyBpbnQgcGFyc2VfbTNkKEFWRmlsdGVyQ29udGV4dCAq Y3R4LCBGSUxFICpmKQotewotICAgIExVVDNEQ29udGV4dCAqbHV0M2QgPSBjdHgtPnByaXY7Ci0g ICAgZmxvYXQgc2NhbGU7Ci0gICAgaW50IHJldCwgaSwgaiwgaywgc2l6ZSwgc2l6ZTIsIGluID0g LTEsIG91dCA9IC0xOwotICAgIGNoYXIgbGluZVtNQVhfTElORV9TSVpFXTsKLSAgICB1aW50OF90 IHJnYl9tYXBbM10gPSB7MCwgMSwgMn07Ci0KLSAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9m KGxpbmUpLCBmKSkgewotICAgICAgICBpZiAgICAgICghc3RybmNtcChsaW5lLCAiaW4iLCAgMikp IGluICA9IHN0cnRvbChsaW5lICsgMiwgTlVMTCwgMCk7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJu Y21wKGxpbmUsICJvdXQiLCAzKSkgb3V0ID0gc3RydG9sKGxpbmUgKyAzLCBOVUxMLCAwKTsKLSAg ICAgICAgZWxzZSBpZiAoIXN0cm5jbXAobGluZSwgInZhbHVlcyIsIDYpKSB7Ci0gICAgICAgICAg ICBjb25zdCBjaGFyICpwID0gbGluZSArIDY7Ci0jZGVmaW5lIFNFVF9DT0xPUihpZCkgZG8geyAg ICAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAoYXZfaXNzcGFjZSgqcCkpICAgICAgICAgICAg ICAgICAgXAotICAgICAgICBwKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgc3dpdGNoICgqcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlICdy JzogcmdiX21hcFtpZF0gPSAwOyBicmVhazsgICAgICAgXAotICAgIGNhc2UgJ2cnOiByZ2JfbWFw W2lkXSA9IDE7IGJyZWFrOyAgICAgICBcCi0gICAgY2FzZSAnYic6IHJnYl9tYXBbaWRdID0gMjsg YnJlYWs7ICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgIHdoaWxlICgqcCAmJiAhYXZfaXNzcGFjZSgqcCkpICAgICAgICAgICBcCi0gICAg ICAgIHArKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCi0g ICAgICAgICAgICBTRVRfQ09MT1IoMCk7Ci0gICAgICAgICAgICBTRVRfQ09MT1IoMSk7Ci0gICAg ICAgICAgICBTRVRfQ09MT1IoMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg IH0KLQotICAgIGlmIChpbiA9PSAtMSB8fCBvdXQgPT0gLTEpIHsKLSAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiaW4gYW5kIG91dCBtdXN0IGJlIGRlZmluZWRcbiIpOwotICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICB9Ci0gICAgaWYgKGluIDwgMiB8fCBv dXQgPCAyIHx8Ci0gICAgICAgIGluICA+IE1BWF9MRVZFTCpNQVhfTEVWRUwqTUFYX0xFVkVMIHx8 Ci0gICAgICAgIG91dCA+IE1BWF9MRVZFTCpNQVhfTEVWRUwqTUFYX0xFVkVMKSB7Ci0gICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgImludmFsaWQgaW4gKCVkKSBvciBvdXQgKCVkKVxu IiwgaW4sIG91dCk7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgIH0K LSAgICBmb3IgKHNpemUgPSAxOyBzaXplKnNpemUqc2l6ZSA8IGluOyBzaXplKyspOwotICAgIGx1 dDNkLT5sdXRzaXplID0gc2l6ZTsKLSAgICBzaXplMiA9IHNpemUgKiBzaXplOwotCi0gICAgcmV0 ID0gYWxsb2NhdGVfM2RsdXQoY3R4LCBzaXplLCAwKTsKLSAgICBpZiAocmV0IDwgMCkKLSAgICAg ICAgcmV0dXJuIHJldDsKLQotICAgIHNjYWxlID0gMS4gLyAob3V0IC0gMSk7Ci0KLSAgICBmb3Ig KGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCBzaXplOyBq KyspIHsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAg ICAgICAgICBzdHJ1Y3QgcmdidmVjICp2ZWMgPSAmbHV0M2QtPmx1dFtrICogc2l6ZTIgKyBqICog c2l6ZSArIGldOwotICAgICAgICAgICAgICAgIGZsb2F0IHZhbFszXTsKLQotICAgICAgICAgICAg ICAgIE5FWFRfTElORSgwKTsKLSAgICAgICAgICAgICAgICBpZiAoYXZfc3NjYW5mKGxpbmUsICIl ZiAlZiAlZiIsIHZhbCwgdmFsICsgMSwgdmFsICsgMikgIT0gMykKLSAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgICAgICAgICAgdmVjLT5yID0g dmFsW3JnYl9tYXBbMF1dICogc2NhbGU7Ci0gICAgICAgICAgICAgICAgdmVjLT5nID0gdmFsW3Jn Yl9tYXBbMV1dICogc2NhbGU7Ci0gICAgICAgICAgICAgICAgdmVjLT5iID0gdmFsW3JnYl9tYXBb Ml1dICogc2NhbGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBpbnQgbmVhcmVzdF9zYW1wbGVfaW5kZXgoZmxvYXQgKmRhdGEsIGZs b2F0IHgsIGludCBsb3csIGludCBoaSkKLXsKLSAgICBpbnQgbWlkOwotICAgIGlmICh4IDwgZGF0 YVtsb3ddKQotICAgICAgICByZXR1cm4gbG93OwotCi0gICAgaWYgKHggPiBkYXRhW2hpXSkKLSAg ICAgICAgcmV0dXJuIGhpOwotCi0gICAgZm9yICg7OykgewotICAgICAgICBhdl9hc3NlcnQwKHgg Pj0gZGF0YVtsb3ddKTsKLSAgICAgICAgYXZfYXNzZXJ0MCh4IDw9IGRhdGFbaGldKTsKLSAgICAg ICAgYXZfYXNzZXJ0MCgoaGktbG93KSA+IDApOwotCi0gICAgICAgIGlmIChoaSAtIGxvdyA9PSAx KQotICAgICAgICAgICAgcmV0dXJuIGxvdzsKLQotICAgICAgICBtaWQgPSAobG93ICsgaGkpIC8g MjsKLQotICAgICAgICBpZiAoeCA8IGRhdGFbbWlkXSkKLSAgICAgICAgICAgIGhpID0gbWlkOwot ICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb3cgPSBtaWQ7Ci0gICAgfQotCi0gICAgcmV0dXJu IDA7Ci19Ci0KLSNkZWZpbmUgTkVYVF9GTE9BVF9PUl9HT1RPKHZhbHVlLCBsYWJlbCkgICAgICAg ICAgICAgICAgICAgIFwKLSAgICBpZiAoIWZnZXRfbmV4dF93b3JkKGxpbmUsIHNpemVvZihsaW5l KSAsZikpIHsgICAgICAgICAgIFwKLSAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ290byBsYWJlbDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoYXZfc3NjYW5m KGxpbmUsICIlZiIsICZ2YWx1ZSkgIT0gMSkgeyAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0 ID0gQVZFUlJPUl9JTlZBTElEREFUQTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICB9Ci0KLXN0YXRpYyBpbnQgcGFyc2VfY2luZXNwYWNlKEFWRmlsdGVyQ29udGV4dCAqY3R4 LCBGSUxFICpmKQotewotICAgIExVVDNEQ29udGV4dCAqbHV0M2QgPSBjdHgtPnByaXY7Ci0gICAg Y2hhciBsaW5lW01BWF9MSU5FX1NJWkVdOwotICAgIGZsb2F0IGluX21pblszXSAgPSB7MC4wLCAw LjAsIDAuMH07Ci0gICAgZmxvYXQgaW5fbWF4WzNdICA9IHsxLjAsIDEuMCwgMS4wfTsKLSAgICBm bG9hdCBvdXRfbWluWzNdID0gezAuMCwgMC4wLCAwLjB9OwotICAgIGZsb2F0IG91dF9tYXhbM10g PSB7MS4wLCAxLjAsIDEuMH07Ci0gICAgaW50IGluc2lkZV9tZXRhZGF0YSA9IDAsIHNpemUsIHNp emUyOwotICAgIGludCBwcmVsdXQgPSAwOwotICAgIGludCByZXQgPSAwOwotCi0gICAgaW50IHBy ZWx1dF9zaXplc1szXSA9IHswLCAwLCAwfTsKLSAgICBmbG9hdCAqaW5fcHJlbHV0WzNdICA9IHtO VUxMLCBOVUxMLCBOVUxMfTsKLSAgICBmbG9hdCAqb3V0X3ByZWx1dFszXSA9IHtOVUxMLCBOVUxM LCBOVUxMfTsKLQotICAgIE5FWFRfTElORV9PUl9HT1RPKHNraXBfbGluZShsaW5lKSwgZW5kKTsK LSAgICBpZiAoc3RybmNtcChsaW5lLCAiQ1NQTFVUVjEwMCIsIDEwKSkgewotICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJOb3QgY2luZVNwYWNlIExVVCBmb3JtYXRcbiIpOwotICAg ICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgICAgIGdvdG8gZW5kOwotICAgIH0KLQot ICAgIE5FWFRfTElORV9PUl9HT1RPKHNraXBfbGluZShsaW5lKSwgZW5kKTsKLSAgICBpZiAoc3Ry bmNtcChsaW5lLCAiM0QiLCAyKSkgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJOb3QgM0QgTFVUIGZvcm1hdFxuIik7Ci0gICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsK LSAgICAgICAgZ290byBlbmQ7Ci0gICAgfQotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgTkVY VF9MSU5FX09SX0dPVE8oc2tpcF9saW5lKGxpbmUpLCBlbmQpOwotCi0gICAgICAgIGlmICghc3Ry bmNtcChsaW5lLCAiQkVHSU4gTUVUQURBVEEiLCAxNCkpIHsKLSAgICAgICAgICAgIGluc2lkZV9t ZXRhZGF0YSA9IDE7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBp ZiAoIXN0cm5jbXAobGluZSwgIkVORCBNRVRBREFUQSIsIDEyKSkgewotICAgICAgICAgICAgaW5z aWRlX21ldGFkYXRhID0gMDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAg ICAgIGlmIChpbnNpZGVfbWV0YWRhdGEgPT0gMCkgewotICAgICAgICAgICAgaW50IHNpemVfciwg c2l6ZV9nLCBzaXplX2I7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsr KSB7Ci0gICAgICAgICAgICAgICAgaW50IG5wb2ludHMgPSBzdHJ0b2wobGluZSwgTlVMTCwgMCk7 Ci0KLSAgICAgICAgICAgICAgICBpZiAobnBvaW50cyA+IDIpIHsKLSAgICAgICAgICAgICAgICAg ICAgZmxvYXQgdixsYXN0OwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChucG9pbnRzID4gUFJF TFVUX1NJWkUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgIlByZWx1dCBzaXplIHRvbyBsYXJnZS5cbiIpOwotICAgICAgICAgICAgICAgICAgICAg ICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gZW5kOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg KGluX3ByZWx1dFtpXSB8fCBvdXRfcHJlbHV0W2ldKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGZpbGUgaGFzIG11bHRpcGxlIHBy ZWx1dHMuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJ RERBVEE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgICAg ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGluX3ByZWx1dFtpXSAgPSAoZmxvYXQqKWF2 X21hbGxvYyhucG9pbnRzICogc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgICAgIG91 dF9wcmVsdXRbaV0gPSAoZmxvYXQqKWF2X21hbGxvYyhucG9pbnRzICogc2l6ZW9mKGZsb2F0KSk7 Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5fcHJlbHV0W2ldIHx8ICFvdXRfcHJlbHV0W2ld KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g ICAgICAgICAgICAgICAgICAgIHByZWx1dF9zaXplc1tpXSA9IG5wb2ludHM7Ci0gICAgICAgICAg ICAgICAgICAgIGluX21pbltpXSA9IEZMVF9NQVg7Ci0gICAgICAgICAgICAgICAgICAgIGluX21h eFtpXSA9IC1GTFRfTUFYOwotICAgICAgICAgICAgICAgICAgICBvdXRfbWluW2ldID0gRkxUX01B WDsKLSAgICAgICAgICAgICAgICAgICAgb3V0X21heFtpXSA9IC1GTFRfTUFYOwotCi0gICAgICAg ICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnBvaW50czsgaisrKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBORVhUX0ZMT0FUX09SX0dPVE8odiwgZW5kKQotICAgICAgICAgICAg ICAgICAgICAgICAgaW5fbWluW2ldID0gRkZNSU4oaW5fbWluW2ldLCB2KTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGluX21heFtpXSA9IEZGTUFYKGluX21heFtpXSwgdik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBpbl9wcmVsdXRbaV1bal0gPSB2OwotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGogPiAwICYmIHYgPCBsYXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBmaWxlLCBub24gaW5jcmVhc2luZyBw cmVsdXQuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVO T01FTSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gdjsKLSAgICAg ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq IDwgbnBvaW50czsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBORVhUX0ZMT0FUX09S X0dPVE8odiwgZW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0X21pbltpXSA9IEZGTUlO KG91dF9taW5baV0sIHYpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0X21heFtpXSA9IEZG TUFYKG91dF9tYXhbaV0sIHYpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3ByZWx1dFtp XVtqXSA9IHY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAobnBvaW50cyA9PSAyKSAgewotICAgICAgICAgICAgICAgICAgICBORVhUX0xJTkVfT1Jf R09UTyhza2lwX2xpbmUobGluZSksIGVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdl9z c2NhbmYobGluZSwgIiVmICVmIiwgJmluX21pbltpXSwgJmluX21heFtpXSkgIT0gMikgewotICAg ICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgIE5FWFRfTElORV9PUl9HT1RPKHNraXBfbGluZShsaW5lKSwgZW5kKTsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKGF2X3NzY2FuZihsaW5lLCAiJWYgJWYiLCAmb3V0X21pbltp XSwgJm91dF9tYXhbaV0pICE9IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IEFW RVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAg ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgbnVtYmVy IG9mIHByZS1sdXQgcG9pbnRzLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IEFWRVJS T1JfUEFUQ0hXRUxDT01FOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAg ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBORVhUX0xJTkVfT1JfR09UTyhza2lwX2xpbmUo bGluZSksIGVuZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChhdl9zc2NhbmYo bGluZSwgIiVkICVkICVkIiwgJnNpemVfciwgJnNpemVfZywgJnNpemVfYikgIT0gMykgewotICAg ICAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKLSAgICAgICAgICAgICAgICBnb3Rv IGVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzaXplX3IgIT0gc2l6ZV9nIHx8 IHNpemVfciAhPSBzaXplX2IpIHsKLSAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJVbnN1cHBvcnRlZCBzaXplIGNvbWJpbmF0aW9uOiAlZHglZHglZC5cbiIsIHNpemVf ciwgc2l6ZV9nLCBzaXplX2IpOwotICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfUEFUQ0hX RUxDT01FOwotICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgfQotCi0gICAg ICAgICAgICBzaXplID0gc2l6ZV9yOwotICAgICAgICAgICAgc2l6ZTIgPSBzaXplICogc2l6ZTsK LQotICAgICAgICAgICAgaWYgKHByZWx1dF9zaXplc1swXSAmJiBwcmVsdXRfc2l6ZXNbMV0gJiYg cHJlbHV0X3NpemVzWzJdKQotICAgICAgICAgICAgICAgIHByZWx1dCA9IDE7Ci0KLSAgICAgICAg ICAgIHJldCA9IGFsbG9jYXRlXzNkbHV0KGN0eCwgc2l6ZSwgcHJlbHV0KTsKLSAgICAgICAgICAg IGlmIChyZXQgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICAgICAgICAg IGZvciAoaW50IGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChp bnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBy Z2J2ZWMgKnZlYyA9ICZsdXQzZC0+bHV0W2kgKiBzaXplMiArIGogKiBzaXplICsga107Ci0KLSAg ICAgICAgICAgICAgICAgICAgICAgIE5FWFRfTElORV9PUl9HT1RPKHNraXBfbGluZShsaW5lKSwg ZW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdl9zc2NhbmYobGluZSwgIiVmICVm ICVmIiwgJnZlYy0+ciwgJnZlYy0+ZywgJnZlYy0+YikgIT0gMykgewotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg ICAgICAgICAgICAgICAgICAgIHZlYy0+ciAqPSBvdXRfbWF4WzBdIC0gb3V0X21pblswXTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHZlYy0+ZyAqPSBvdXRfbWF4WzFdIC0gb3V0X21pblsxXTsK LSAgICAgICAgICAgICAgICAgICAgICAgIHZlYy0+YiAqPSBvdXRfbWF4WzJdIC0gb3V0X21pblsy XTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJl bHV0KSB7Ci0gICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgMzsgYysrKSB7Ci0KLSAgICAgICAg ICAgIGx1dDNkLT5wcmVsdXQubWluW2NdID0gaW5fbWluW2NdOwotICAgICAgICAgICAgbHV0M2Qt PnByZWx1dC5tYXhbY10gPSBpbl9tYXhbY107Ci0gICAgICAgICAgICBsdXQzZC0+cHJlbHV0LnNj YWxlW2NdID0gICgxLjBmIC8gKGZsb2F0KShpbl9tYXhbY10gLSBpbl9taW5bY10pKSAqIChsdXQz ZC0+cHJlbHV0LnNpemUgLSAxKTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs dXQzZC0+cHJlbHV0LnNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIGZsb2F0IG1peCA9IChm bG9hdCkgaSAvIChmbG9hdCkobHV0M2QtPnByZWx1dC5zaXplIC0gMSk7Ci0gICAgICAgICAgICAg ICAgZmxvYXQgeCA9IGxlcnBmKGluX21pbltjXSwgaW5fbWF4W2NdLCBtaXgpLCBhLCBiOwotCi0g ICAgICAgICAgICAgICAgaW50IGlkeCA9IG5lYXJlc3Rfc2FtcGxlX2luZGV4KGluX3ByZWx1dFtj XSwgeCwgMCwgcHJlbHV0X3NpemVzW2NdLTEpOwotICAgICAgICAgICAgICAgIGF2X2Fzc2VydDAo aWR4ICsgMSA8IHByZWx1dF9zaXplc1tjXSk7Ci0KLSAgICAgICAgICAgICAgICBhICAgPSBvdXRf cHJlbHV0W2NdW2lkeCArIDBdOwotICAgICAgICAgICAgICAgIGIgICA9IG91dF9wcmVsdXRbY11b aWR4ICsgMV07Ci0gICAgICAgICAgICAgICAgbWl4ID0geCAtIGluX3ByZWx1dFtjXVtpZHhdOwot Ci0gICAgICAgICAgICAgICAgbHV0M2QtPnByZWx1dC5sdXRbY11baV0gPSBzYW5pdGl6ZWYobGVy cGYoYSwgYiwgbWl4KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbHV0M2Qt PnNjYWxlLnIgPSAxLjAwZjsKLSAgICAgICAgbHV0M2QtPnNjYWxlLmcgPSAxLjAwZjsKLSAgICAg ICAgbHV0M2QtPnNjYWxlLmIgPSAxLjAwZjsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGx1dDNk LT5zY2FsZS5yID0gYXZfY2xpcGYoMS4gLyAoaW5fbWF4WzBdIC0gaW5fbWluWzBdKSwgMC5mLCAx LmYpOwotICAgICAgICBsdXQzZC0+c2NhbGUuZyA9IGF2X2NsaXBmKDEuIC8gKGluX21heFsxXSAt IGluX21pblsxXSksIDAuZiwgMS5mKTsKLSAgICAgICAgbHV0M2QtPnNjYWxlLmIgPSBhdl9jbGlw ZigxLiAvIChpbl9tYXhbMl0gLSBpbl9taW5bMl0pLCAwLmYsIDEuZik7Ci0gICAgfQotCi1lbmQ6 Ci0gICAgZm9yIChpbnQgYyA9IDA7IGMgPCAzOyBjKyspIHsKLSAgICAgICAgYXZfZnJlZXAoJmlu X3ByZWx1dFtjXSk7Ci0gICAgICAgIGF2X2ZyZWVwKCZvdXRfcHJlbHV0W2NdKTsKLSAgICB9Ci0g ICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBzZXRfaWRlbnRpdHlfbWF0cml4KEFWRmls dGVyQ29udGV4dCAqY3R4LCBpbnQgc2l6ZSkKLXsKLSAgICBMVVQzRENvbnRleHQgKmx1dDNkID0g Y3R4LT5wcml2OwotICAgIGludCByZXQsIGksIGosIGs7Ci0gICAgY29uc3QgaW50IHNpemUyID0g c2l6ZSAqIHNpemU7Ci0gICAgY29uc3QgZmxvYXQgYyA9IDEuIC8gKHNpemUgLSAxKTsKLQotICAg IHJldCA9IGFsbG9jYXRlXzNkbHV0KGN0eCwgc2l6ZSwgMCk7Ci0gICAgaWYgKHJldCA8IDApCi0g ICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICBmb3IgKGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7Ci0g ICAgICAgIGZvciAoaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgcmdidmVjICp2ZWMg PSAmbHV0M2QtPmx1dFtrICogc2l6ZTIgKyBqICogc2l6ZSArIGldOwotICAgICAgICAgICAgICAg IHZlYy0+ciA9IGsgKiBjOwotICAgICAgICAgICAgICAgIHZlYy0+ZyA9IGogKiBjOwotICAgICAg ICAgICAgICAgIHZlYy0+YiA9IGkgKiBjOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg fQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQg cGl4X2ZtdHNbXSA9IHsKICAgICBBVl9QSVhfRk1UX1JHQjI0LCAgQVZfUElYX0ZNVF9CR1IyNCwK ICAgICBBVl9QSVhfRk1UX1JHQkEsICAgQVZfUElYX0ZNVF9CR1JBLApAQCAtMTIzMCw2NiArNjk4 LDE0IEBAIEFWRklMVEVSX0RFRklORV9DTEFTU19FWFQobHV0M2QsICJsdXQzZCIsIGx1dDNkX2hh bGRjbHV0X29wdGlvbnMpOwogCiBzdGF0aWMgYXZfY29sZCBpbnQgbHV0M2RfaW5pdChBVkZpbHRl ckNvbnRleHQgKmN0eCkKIHsKLSAgICBpbnQgcmV0OwotICAgIEZJTEUgKmY7Ci0gICAgY29uc3Qg Y2hhciAqZXh0OwogICAgIExVVDNEQ29udGV4dCAqbHV0M2QgPSBjdHgtPnByaXY7Ci0KLSAgICBs dXQzZC0+c2NhbGUuciA9IGx1dDNkLT5zY2FsZS5nID0gbHV0M2QtPnNjYWxlLmIgPSAxLmY7Ci0K LSAgICBpZiAoIWx1dDNkLT5maWxlKSB7Ci0gICAgICAgIHJldHVybiBzZXRfaWRlbnRpdHlfbWF0 cml4KGN0eCwgMzIpOwotICAgIH0KLQotICAgIGYgPSBhdnByaXZfZm9wZW5fdXRmOChsdXQzZC0+ ZmlsZSwgInIiKTsKLSAgICBpZiAoIWYpIHsKLSAgICAgICAgcmV0ID0gQVZFUlJPUihlcnJubyk7 Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIiVzOiAlc1xuIiwgbHV0M2QtPmZp bGUsIGF2X2VycjJzdHIocmV0KSk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAg ZXh0ID0gc3RycmNocihsdXQzZC0+ZmlsZSwgJy4nKTsKLSAgICBpZiAoIWV4dCkgewotICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZ3Vlc3MgdGhlIGZvcm1hdCBm cm9tIHRoZSBleHRlbnNpb25cbiIpOwotICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRB OwotICAgICAgICBnb3RvIGVuZDsKLSAgICB9Ci0gICAgZXh0Kys7Ci0KLSAgICBpZiAoIWF2X3N0 cmNhc2VjbXAoZXh0LCAiZGF0IikpIHsKLSAgICAgICAgcmV0ID0gcGFyc2VfZGF0KGN0eCwgZik7 Ci0gICAgfSBlbHNlIGlmICghYXZfc3RyY2FzZWNtcChleHQsICIzZGwiKSkgewotICAgICAgICBy ZXQgPSBwYXJzZV8zZGwoY3R4LCBmKTsKLSAgICB9IGVsc2UgaWYgKCFhdl9zdHJjYXNlY21wKGV4 dCwgImN1YmUiKSkgewotICAgICAgICByZXQgPSBwYXJzZV9jdWJlKGN0eCwgZik7Ci0gICAgfSBl bHNlIGlmICghYXZfc3RyY2FzZWNtcChleHQsICJtM2QiKSkgewotICAgICAgICByZXQgPSBwYXJz ZV9tM2QoY3R4LCBmKTsKLSAgICB9IGVsc2UgaWYgKCFhdl9zdHJjYXNlY21wKGV4dCwgImNzcCIp KSB7Ci0gICAgICAgIHJldCA9IHBhcnNlX2NpbmVzcGFjZShjdHgsIGYpOwotICAgIH0gZWxzZSB7 Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVucmVjb2duaXplZCAnLiVzJyBm aWxlIHR5cGVcbiIsIGV4dCk7Ci0gICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKLSAgICB9 Ci0KLSAgICBpZiAoIXJldCAmJiAhbHV0M2QtPmx1dHNpemUpIHsKLSAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiM0QgTFVUIGlzIGVtcHR5XG4iKTsKLSAgICAgICAgcmV0ID0gQVZF UlJPUl9JTlZBTElEREFUQTsKLSAgICB9Ci0KLWVuZDoKLSAgICBmY2xvc2UoZik7Ci0gICAgcmV0 dXJuIHJldDsKKyAgICByZXR1cm4gZmZfbHV0M2RfaW5pdChjdHgsIGx1dDNkKTsKIH0KIAogc3Rh dGljIGF2X2NvbGQgdm9pZCBsdXQzZF91bmluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiB7CiAg ICAgTFVUM0RDb250ZXh0ICpsdXQzZCA9IGN0eC0+cHJpdjsKLSAgICBpbnQgaTsKLSAgICBhdl9m cmVlcCgmbHV0M2QtPmx1dCk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAg ICAgIGF2X2ZyZWVwKCZsdXQzZC0+cHJlbHV0Lmx1dFtpXSk7Ci0gICAgfQorICAgIGZmX2x1dDNk X3VuaW5pdChsdXQzZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBsdXQzZF9pbnB1 dHNbXSA9IHsKQEAgLTE0OTksNyArOTE1LDcgQEAgc3RhdGljIGludCBjb25maWdfY2x1dChBVkZp bHRlckxpbmsgKmlubGluaykKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKICAgICB9 CiAKLSAgICByZXR1cm4gYWxsb2NhdGVfM2RsdXQoY3R4LCBsZXZlbCwgMCk7CisgICAgcmV0dXJu IGZmX2FsbG9jYXRlXzNkbHV0KGN0eCwgbHV0M2QsIGxldmVsLCAwKTsKIH0KIAogc3RhdGljIGlu dCB1cGRhdGVfYXBwbHlfY2x1dChGRkZyYW1lU3luYyAqZnMpCmRpZmYgLS1naXQgYS9saWJhdmZp bHRlci92Zl92cHBfcXN2LmMgYi9saWJhdmZpbHRlci92Zl92cHBfcXN2LmMKaW5kZXggNTM1NjEw M2UwMC4uMGEwMzg0OGQ3ZCAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvdmZfdnBwX3Fzdi5jCisr KyBiL2xpYmF2ZmlsdGVyL3ZmX3ZwcF9xc3YuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg ImludGVybmFsLmgiCiAjaW5jbHVkZSAiYXZmaWx0ZXIuaCIKICNpbmNsdWRlICJmaWx0ZXJzLmgi CisjaW5jbHVkZSAibHV0M2QuaCIKIAogI2luY2x1ZGUgInFzdnZwcC5oIgogI2luY2x1ZGUgInRy YW5zcG9zZS5oIgpAQCAtNjcsNiArNjgsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgVlBQQ29udGV4dHsK ICAgICAvKiogSERSIHBhcmFtZXRlcnMgYXR0YWNoZWQgb24gdGhlIGlucHV0IGZyYW1lICovCiAg ICAgbWZ4RXh0TWFzdGVyaW5nRGlzcGxheUNvbG91clZvbHVtZSBtZGN2X2NvbmY7CiAgICAgbWZ4 RXh0Q29udGVudExpZ2h0TGV2ZWxJbmZvIGNsbGlfY29uZjsKKworICAgIC8qKiBMVVQgcGFyYW1l dGVycyBhdHRhY2hlZCBvbiB0aGUgaW5wdXQgZnJhbWUgKi8KKyAgICBtZnhFeHRWUFAzREx1dCBs dXQzZF9jb25mOworICAgIExVVDNEQ29udGV4dCBsdXQzZDsKKyAgICBtZnhVMTYqIGx1dDNkX3I7 CisgICAgbWZ4VTE2KiBsdXQzZF9nOworICAgIG1meFUxNiogbHV0M2RfYjsKICNlbmRpZgogCiAg ICAgLyoqCkBAIC0zODgsNiArMzk2LDc1IEBAIHN0YXRpYyBtZnhTdGF0dXMgZ2V0X21meF92ZXJz aW9uKGNvbnN0IEFWRmlsdGVyQ29udGV4dCAqY3R4LCBtZnhWZXJzaW9uICptZnhfdmVyCiAgICAg cmV0dXJuIE1GWFF1ZXJ5VmVyc2lvbihkZXZpY2VfaHdjdHgtPnNlc3Npb24sIG1meF92ZXJzaW9u KTsKIH0KIAorI2lmIFFTVl9PTkVWUEwKKy8vIENyZWF0ZSAzRCBMVVQgc3VyZmFjZSB1c2luZyBz eXN0ZW0gbWVtb3J5LgorLy8gUmVmZXJlbmNlIGh0dHBzOi8vaW50ZWwuZ2l0aHViLmlvL2xpYnZw bC9sYXRlc3QvcHJvZ3JhbW1pbmdfZ3VpZGUvVlBMX3ByZ192cHAuaHRtbCN2aWRlby1wcm9jZXNz aW5nLTNkbHV0CitzdGF0aWMgdm9pZCBpbml0XzNkbHV0X3N1cmZhY2UoQVZGaWx0ZXJDb250ZXh0 ICpjdHgpCit7CisgICAgVlBQQ29udGV4dCAqdnBwID0gY3R4LT5wcml2OworICAgIExVVDNEQ29u dGV4dCAqbHV0M2QgPSAmdnBwLT5sdXQzZDsKKyAgICBtZnhFeHRWUFAzREx1dCAqbHV0M2RfY29u ZiA9ICZ2cHAtPmx1dDNkX2NvbmY7CisgICAgaW50IHIsIGcsIGIsIGlkeDsKKyAgICBzdHJ1Y3Qg cmdidmVjICp2ID0gTlVMTDsKKyAgICBpbnQgbHV0X3NpemUgPSBsdXQzZC0+bHV0c2l6ZTsKKyAg ICBpbnQgbHV0X3NpemUyID0gbHV0X3NpemUgKiBsdXRfc2l6ZTsKKyAgICBpbnQgbHV0X3NpemUz ID0gbHV0X3NpemUgKiBsdXRfc2l6ZTI7CisKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcs ICJjcmVhdGUgM0QgTFVUIHN1cmZhY2Ugd2l0aCBzeXN0ZW0gbWVtb3J5LCBMVVQgc2l6ZTogJWQu XG4iLCBsdXRfc2l6ZSk7CisKKyAgICB2cHAtPmx1dDNkX3IgPSBhdl9jYWxsb2MobHV0X3NpemUz LCBzaXplb2YobWZ4VTE2KSk7CisgICAgdnBwLT5sdXQzZF9nID0gYXZfY2FsbG9jKGx1dF9zaXpl Mywgc2l6ZW9mKG1meFUxNikpOworICAgIHZwcC0+bHV0M2RfYiA9IGF2X2NhbGxvYyhsdXRfc2l6 ZTMsIHNpemVvZihtZnhVMTYpKTsKKworICAgIC8vIENvcHkgM0QgTFVUIHRvIHN5c3RlbSBtZW1v cnkgc3VyZmFjZS4KKyAgICBmb3IgKHIgPSAwLCBpZHggPSAwOyByIDwgbHV0X3NpemU7ICsrcikg eworICAgICAgICBmb3IgKGcgPSAwOyBnIDwgbHV0X3NpemU7ICsrZykgeworICAgICAgICAgICAg Zm9yIChiID0gMDsgYiA8IGx1dF9zaXplOyArK2IpIHsKKyAgICAgICAgICAgICAgICB2ID0gJmx1 dDNkLT5sdXRbciAqIGx1dF9zaXplMiArIGcgKiBsdXRfc2l6ZSArIGJdOworCisgICAgICAgICAg ICAgICAgdnBwLT5sdXQzZF9yW2lkeF0gPSAobWZ4VTE2KSh2LT5yICogVUlOVDE2X01BWCk7Cisg ICAgICAgICAgICAgICAgdnBwLT5sdXQzZF9nW2lkeF0gPSAobWZ4VTE2KSh2LT5nICogVUlOVDE2 X01BWCk7CisgICAgICAgICAgICAgICAgdnBwLT5sdXQzZF9iW2lkeF0gPSAobWZ4VTE2KSh2LT5i ICogVUlOVDE2X01BWCk7CisgICAgICAgICAgICAgICAgaWR4Kys7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBtZW1zZXQobHV0M2RfY29uZiwgMCwgc2l6ZW9mKCpsdXQz ZF9jb25mKSk7CisgICAgbHV0M2RfY29uZi0+SGVhZGVyLkJ1ZmZlcklkID0gTUZYX0VYVEJVRkZf VlBQXzNETFVUOworICAgIGx1dDNkX2NvbmYtPkhlYWRlci5CdWZmZXJTeiA9IHNpemVvZigqbHV0 M2RfY29uZik7CisgICAgbHV0M2RfY29uZi0+Q2hhbm5lbE1hcHBpbmcgPSBNRlhfM0RMVVRfQ0hB Tk5FTF9NQVBQSU5HX1JHQl9SR0I7CisgICAgbHV0M2RfY29uZi0+QnVmZmVyVHlwZSA9IE1GWF9S RVNPVVJDRV9TWVNURU1fU1VSRkFDRTsKKworICAgIGx1dDNkX2NvbmYtPlN5c3RlbUJ1ZmZlci5D aGFubmVsWzBdLkRhdGFUeXBlID0gTUZYX0RBVEFfVFlQRV9VMTY7CisgICAgbHV0M2RfY29uZi0+ U3lzdGVtQnVmZmVyLkNoYW5uZWxbMF0uU2l6ZSA9IGx1dF9zaXplOworICAgIGx1dDNkX2NvbmYt PlN5c3RlbUJ1ZmZlci5DaGFubmVsWzBdLkRhdGExNiA9IHZwcC0+bHV0M2RfcjsKKworICAgIGx1 dDNkX2NvbmYtPlN5c3RlbUJ1ZmZlci5DaGFubmVsWzFdLkRhdGFUeXBlID0gTUZYX0RBVEFfVFlQ RV9VMTY7CisgICAgbHV0M2RfY29uZi0+U3lzdGVtQnVmZmVyLkNoYW5uZWxbMV0uU2l6ZSA9IGx1 dF9zaXplOworICAgIGx1dDNkX2NvbmYtPlN5c3RlbUJ1ZmZlci5DaGFubmVsWzFdLkRhdGExNiA9 IHZwcC0+bHV0M2RfZzsKKworICAgIGx1dDNkX2NvbmYtPlN5c3RlbUJ1ZmZlci5DaGFubmVsWzJd LkRhdGFUeXBlID0gTUZYX0RBVEFfVFlQRV9VMTY7CisgICAgbHV0M2RfY29uZi0+U3lzdGVtQnVm ZmVyLkNoYW5uZWxbMl0uU2l6ZSA9IGx1dF9zaXplOworICAgIGx1dDNkX2NvbmYtPlN5c3RlbUJ1 ZmZlci5DaGFubmVsWzJdLkRhdGExNiA9IHZwcC0+bHV0M2RfYjsKK30KKworc3RhdGljIHZvaWQg dW5pbml0XzNkbHV0X3N1cmZhY2UoQVZGaWx0ZXJDb250ZXh0ICpjdHgpIHsKKyAgICBWUFBDb250 ZXh0ICp2cHAgPSBjdHgtPnByaXY7CisgICAgbWZ4RXh0VlBQM0RMdXQgKmx1dDNkX2NvbmYgPSAm dnBwLT5sdXQzZF9jb25mOworCisgICAgaWYgKGx1dDNkX2NvbmYtPkhlYWRlci5CdWZmZXJJZCA9 PSBNRlhfRVhUQlVGRl9WUFBfM0RMVVQpIHsKKyAgICAgICAgYXZfZnJlZSh2cHAtPmx1dDNkX3Ip OworICAgICAgICBhdl9mcmVlKHZwcC0+bHV0M2RfZyk7CisgICAgICAgIGF2X2ZyZWUodnBwLT5s dXQzZF9iKTsKKyAgICAgICAgdnBwLT5sdXQzZF9yID0gTlVMTDsKKyAgICAgICAgdnBwLT5sdXQz ZF9nID0gTlVMTDsKKyAgICAgICAgdnBwLT5sdXQzZF9iID0gTlVMTDsKKyAgICB9CisgICAgbWVt c2V0KGx1dDNkX2NvbmYsIDAsIHNpemVvZigqbHV0M2RfY29uZikpOworfQorI2VuZGlmIC8vIFFT Vl9PTkVWUEwKKwogc3RhdGljIGludCB2cHBfc2V0X2ZyYW1lX2V4dF9wYXJhbXMoQVZGaWx0ZXJD b250ZXh0ICpjdHgsIGNvbnN0IEFWRnJhbWUgKmluLCBBVkZyYW1lICpvdXQsICBRU1ZWUFBGcmFt ZVBhcmFtICpmcCkKIHsKICNpZiBRU1ZfT05FVlBMCkBAIC00OTksNiArNTc2LDEwIEBAIHN0YXRp YyBpbnQgdnBwX3NldF9mcmFtZV9leHRfcGFyYW1zKEFWRmlsdGVyQ29udGV4dCAqY3R4LCBjb25z dCBBVkZyYW1lICppbiwgQVZGCiAgICAgb3V0dnNpX2NvbmYuTWF0cml4Q29lZmZpY2llbnRzICAg ICAgID0gKG91dC0+Y29sb3JzcGFjZSA9PSBBVkNPTF9TUENfVU5TUEVDSUZJRUQpID8gQVZDT0xf U1BDX0JUNzA5IDogb3V0LT5jb2xvcnNwYWNlOwogICAgIG91dHZzaV9jb25mLkNvbG91ckRlc2Ny aXB0aW9uUHJlc2VudCA9IDE7CiAKKyAgICAvLyAzRCBMVVQgZG9lcyBub3QgZGVwZW5kIG9uIGlu L291dCBmcmFtZSwgc28gaW5pdGlhbGl6ZSBqdXN0IG9uY2UuCisgICAgaWYgKCh2cHAtPmx1dDNk X2NvbmYuSGVhZGVyLkJ1ZmZlcklkID09IDApICYmIHZwcC0+bHV0M2QuZmlsZSkKKyAgICAgICAg aW5pdF8zZGx1dF9zdXJmYWNlKGN0eCk7CisKICAgICBpZiAobWVtY21wKCZ2cHAtPmludnNpX2Nv bmYsICZpbnZzaV9jb25mLCBzaXplb2YobWZ4RXh0VmlkZW9TaWduYWxJbmZvKSkgfHwKICAgICAg ICAgbWVtY21wKCZ2cHAtPm1kY3ZfY29uZiwgJm1kY3ZfY29uZiwgc2l6ZW9mKG1meEV4dE1hc3Rl cmluZ0Rpc3BsYXlDb2xvdXJWb2x1bWUpKSB8fAogICAgICAgICBtZW1jbXAoJnZwcC0+Y2xsaV9j b25mLCAmY2xsaV9jb25mLCBzaXplb2YobWZ4RXh0Q29udGVudExpZ2h0TGV2ZWxJbmZvKSkgfHwK QEAgLTUxNiw2ICs1OTcsOSBAQCBzdGF0aWMgaW50IHZwcF9zZXRfZnJhbWVfZXh0X3BhcmFtcyhB VkZpbHRlckNvbnRleHQgKmN0eCwgY29uc3QgQVZGcmFtZSAqaW4sIEFWRgogICAgICAgICB2cHAt PmNsbGlfY29uZiAgICAgICAgICAgICAgICAgICAgID0gY2xsaV9jb25mOwogICAgICAgICBpZiAo Y2xsaV9jb25mLkhlYWRlci5CdWZmZXJJZCkKICAgICAgICAgICAgIGZwLT5leHRfYnVmW2ZwLT5u dW1fZXh0X2J1ZisrXSA9IChtZnhFeHRCdWZmZXIqKSZ2cHAtPmNsbGlfY29uZjsKKworICAgICAg ICBpZiAodnBwLT5sdXQzZF9jb25mLkhlYWRlci5CdWZmZXJJZCkKKyAgICAgICAgICAgIGZwLT5l eHRfYnVmW2ZwLT5udW1fZXh0X2J1ZisrXSA9IChtZnhFeHRCdWZmZXIgKikmdnBwLT5sdXQzZF9j b25mOwogICAgIH0KICNlbmRpZgogCkBAIC03MDMsNiArNzg3LDI2IEBAIHN0YXRpYyBpbnQgY29u ZmlnX291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCiAjdW5kZWYgSU5JVF9NRlhfRVhUQlVG CiAjdW5kZWYgU0VUX01GWF9QQVJBTV9GSUVMRAogCisjaWYgUVNWX09ORVZQTAorICAgIGlmICh2 cHAtPmx1dDNkLmZpbGUpIHsKKyAgICAgICAgaWYgKFFTVl9SVU5USU1FX1ZFUlNJT05fQVRMRUFT VChtZnhfdmVyc2lvbiwgMiwgMTEpKSB7CisgICAgICAgICAgICAvLyBGb3Igb25lVlBMLWludGVs LWdwdSwgbG93ZXN0IHZlcnNpb24gdGhhdCB3b3JrcyBmb3IgYXBwbHlpbmcgM0QgTFVUCisgICAg ICAgICAgICAvLyBpcyAyNC4xLjEgd2hpY2ggaGFzIEFQSSB2ZXJzaW9uIDIuMTAuCisgICAgICAg ICAgICAvLyBCeSByZXF1aXJpbmcgcnVudGltZSB2ZXJzaW9uIDIuMTEsIHdlIGVuc3VyZSB1c2lu ZyBhIHdvcmtpbmcgdmVyc2lvbi4KKyAgICAgICAgICAgIGludCByZXQ7CisgICAgICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIkxvYWQgM0QgTFVUIGZyb20gZmlsZTogJXNcbiIsIHZw cC0+bHV0M2QuZmlsZSk7CisgICAgICAgICAgICByZXQgPSBmZl9sdXQzZF9pbml0KGN0eCwgJnZw cC0+bHV0M2QpOworICAgICAgICAgICAgaWYgKHJldCAhPSAwKQorICAgICAgICAgICAgICAgIHJl dHVybiByZXQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdl9mcmVlKHZwcC0+bHV0 M2QuZmlsZSk7CisgICAgICAgICAgICB2cHAtPmx1dDNkLmZpbGUgPSBOVUxMOworICAgICAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX1dBUk5JTkcsICJUaGUgUVNWIFZQUCAzRCBMVVQgcHJvY2Vz c2luZyBvcHRpb24gIgorICAgICAgICAgICAgICAgICAgICJsdXQzZF9maWxlIGlzIG5vdCBzdXBw b3J0ZWQgd2l0aCB0aGlzIE1TREsgdmVyc2lvbi5cbiIpOworICAgICAgICB9CisgICAgfQorI2Vu ZGlmCisKICAgICBpZiAodnBwLT51c2VfZnJjIHx8IHZwcC0+dXNlX2Nyb3AgfHwgdnBwLT5kZWlu dGVybGFjZSB8fCB2cHAtPmRlbm9pc2UgfHwKICAgICAgICAgdnBwLT5kZXRhaWwgfHwgdnBwLT5w cm9jYW1wIHx8IHZwcC0+cm90YXRlIHx8IHZwcC0+aGZsaXAgfHwKICAgICAgICAgaW5saW5rLT53 ICE9IG91dGxpbmstPncgfHwgaW5saW5rLT5oICE9IG91dGxpbmstPmggfHwgaW5fZm9ybWF0ICE9 IHZwcC0+b3V0X2Zvcm1hdCB8fApAQCAtNzExLDYgKzgxNSw5IEBAIHN0YXRpYyBpbnQgY29uZmln X291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCiAgICAgICAgIHZwcC0+Y29sb3JfdHJhbnNm ZXIgIT0gQVZDT0xfVFJDX1VOU1BFQ0lGSUVEIHx8CiAgICAgICAgIHZwcC0+Y29sb3JfbWF0cml4 ICE9IEFWQ09MX1NQQ19VTlNQRUNJRklFRCB8fAogICAgICAgICB2cHAtPnRvbmVtYXAgfHwKKyNp ZiBRU1ZfT05FVlBMCisgICAgICAgIHZwcC0+bHV0M2QuZmlsZSB8fAorI2VuZGlmCiAgICAgICAg ICF2cHAtPmhhc19wYXNzdGhyb3VnaCkKICAgICAgICAgcmV0dXJuIGZmX3FzdnZwcF9pbml0KGN0 eCwgJnBhcmFtKTsKICAgICBlbHNlIHsKQEAgLTgwMSw2ICs5MDgsMTQgQEAgZW9mOgogCiBzdGF0 aWMgYXZfY29sZCB2b2lkIHZwcF91bmluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiB7CisjaWYg UVNWX09ORVZQTAorICAgIFZQUENvbnRleHQgKnZwcCA9IGN0eC0+cHJpdjsKKworICAgIHVuaW5p dF8zZGx1dF9zdXJmYWNlKGN0eCk7CisgICAgaWYgKHZwcC0+bHV0M2QuZmlsZSkKKyAgICAgICAg ZmZfbHV0M2RfdW5pbml0KCZ2cHAtPmx1dDNkKTsKKyNlbmRpZgorCiAgICAgZmZfcXN2dnBwX2Ns b3NlKGN0eCk7CiB9CiAKQEAgLTkyNCw3ICsxMDM5LDkgQEAgc3RhdGljIGNvbnN0IEFWT3B0aW9u IHZwcF9vcHRpb25zW10gPSB7CiAgICAgICBPRkZTRVQoY29sb3JfdHJhbnNmZXJfc3RyKSwgIEFW X09QVF9UWVBFX1NUUklORywgeyAuc3RyID0gTlVMTCB9LCAuZmxhZ3MgPSBGTEFHUyB9LAogCiAg ICAgeyJ0b25lbWFwIiwgIlBlcmZvcm0gdG9uZW1hcHBpbmcgKDA9ZGlzYWJsZSB0b25lbWFwcGlu ZywgMT1wZXJmb3JtIHRvbmVtYXBwaW5nIGlmIHRoZSBpbnB1dCBoYXMgSERSIG1ldGFkYXRhKSIs IE9GRlNFVCh0b25lbWFwKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDAgfSwgMCwgMSwgLmZs YWdzID0gRkxBR1N9LAotCisjaWYgUVNWX09ORVZQTAorICAgIHsgImx1dDNkX2ZpbGUiLCAiTG9h ZCBhbmQgYXBwbHkgM0QgTFVUIGZpbGUiLCBPRkZTRVQobHV0M2QpICsgb2Zmc2V0b2YoTFVUM0RD b250ZXh0LCBmaWxlKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7IC5zdHIgPSBOVUxMIH0sIC5mbGFn cyA9IEZMQUdTIH0sCisjZW5kaWYKICAgICB7IE5VTEwgfQogfTsKIAotLSAKMi40My4wCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwg bWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsg YWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJq ZWN0ICJ1bnN1YnNjcmliZSIuCg==