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 694E9446D7 for ; Mon, 24 Oct 2022 14:08:52 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1B50168BC71; Mon, 24 Oct 2022 17:07:50 +0300 (EEST) Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8C2BC68BB70 for ; Mon, 24 Oct 2022 17:07:41 +0300 (EEST) Received: by mail-ed1-f41.google.com with SMTP id a13so31810950edj.0 for ; Mon, 24 Oct 2022 07:07:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spin-digital-com.20210112.gappssmtp.com; s=20210112; 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=D+oa9p1iGqQcqQrVApoh0ws+BldKYrwNquLKngL4v9w=; b=G0DrzEwM+LxAuOXP9vDWBDOMX1Gb0z8dDz5bpUamYg6f9pVrrtro4kbbMS97fxSxY4 roQFFsQEqEg+xOtMM+7zeu3FPFEGjcEWylpsuiwHLIzmvSBfgsHigfW4J8RbovXUdquI 7LK5hUL9yHOZcGABCMR90jsbFlZu6pVDFBz0kr7iE8fxSXdFElguRlbByM2LusJKQufG 9G+1j2PC7Wm8gWsbWrNZggWc4i4DT06O9XlxEqinOLiGWqSZit9CfVhRzG6cWnHAqIHp u0CpggQZnqaYWRv9q5q+opLb6QCAHLVg8O+n7yOF6pH+yiW8V/K22GYsWziOHgaVv8Vm VhJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=D+oa9p1iGqQcqQrVApoh0ws+BldKYrwNquLKngL4v9w=; b=Y7vMLmDGAhboRTTIAQuNGKHa6uv7TSa/6q4hfPRlOx06hpV+3n5iT4M5cracoT601g j6Nf7IN0jUdSPyj5Lh9KU3E9BLFx08qLsmzBPaPrzNiy7r2yOP0S5Yvum/rL4am2or64 SY7UEodWxtxmG5+2cRyI+dPVTQZfYMw+7jXrK5h56IGmewq7Kf7F4R7aTlKJ4mswr/DP Z9BBvCdTF3vbOTu29tGxxDDgd+O8cYmaQiynqH9vV65bP9h3Apa/TPlR0NTttvzaa+hE 428b7QDNJ/VjYwJ8LYixY9IsKzr0Iz+uKuRxLOTSwG29rdB+7m5XSwZyYPxXvh/q1jX+ 69Pw== X-Gm-Message-State: ACrzQf3APzlXX+tqdjfHEXBB1nVTMIe0HUrLcHJfXvvGNc0CL0cDCKXx U5ezsDJP7gFwQ6Bqf356Ei8NNBG44G8pBA== X-Google-Smtp-Source: AMsMyM5KzrgAFYTkibn54KnbAbvfdyJi1HayOiYMteozcoR0i7EtvLJAooMqm9Su5mEaomrQVo0ANQ== X-Received: by 2002:a17:907:3201:b0:741:94f2:aeaf with SMTP id xg1-20020a170907320100b0074194f2aeafmr27182637ejb.505.1666620459937; Mon, 24 Oct 2022 07:07:39 -0700 (PDT) Received: from thomas-win.localdomain ([213.138.44.237]) by smtp.gmail.com with ESMTPSA id s19-20020a170906455300b0079800b81709sm6056436ejq.219.2022.10.24.07.07.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Oct 2022 07:07:39 -0700 (PDT) From: Thomas Siedel To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Oct 2022 16:06:40 +0200 Message-Id: <20221024140645.4945-6-thomas.ff@spin-digital.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221024140645.4945-1-thomas.ff@spin-digital.com> References: <20221024140645.4945-1-thomas.ff@spin-digital.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 05/10] avformat: add demuxer and probe support for H266/VVC 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: Thomas Siedel 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: QWRkIGRlbXV4ZXIgdG8gcHJvYmUgcmF3IHZ2YyBhbmQgcGFyc2UgdnZjYyBieXRlIHN0cmVhbSBm b3JtYXQuCgpTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgU2llZGVsIDx0aG9tYXMuZmZAc3Bpbi1kaWdp dGFsLmNvbT4KLS0tCiBsaWJhdmZvcm1hdC9NYWtlZmlsZSAgICAgfCAgIDEgKwogbGliYXZmb3Jt YXQvYWxsZm9ybWF0cy5jIHwgICAxICsKIGxpYmF2Zm9ybWF0L2RlbXV4LmMgICAgICB8ICAgNyAr LQogbGliYXZmb3JtYXQvdnZjLmMgICAgICAgIHwgOTE5ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogbGliYXZmb3JtYXQvdnZjLmggICAgICAgIHwgIDk5ICsrKysrCiBs aWJhdmZvcm1hdC92dmNkZWMuYyAgICAgfCAgNjEgKysrCiA2IGZpbGVzIGNoYW5nZWQsIDEwODYg aW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZv cm1hdC92dmMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L3Z2Yy5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvdnZjZGVjLmMKCmRpZmYgLS1naXQgYS9saWJhdmZvcm1h dC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCmluZGV4IGQ3ZjE5OGJmMzkuLjAwYWI0 ZGVkODkgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCisrKyBiL2xpYmF2Zm9ybWF0 L01ha2VmaWxlCkBAIC01OTUsNiArNTk1LDcgQEAgT0JKUy0kKENPTkZJR19WT0NfTVVYRVIpICAg ICAgICAgICAgICAgICArPSB2b2NlbmMubyB2b2MubwogT0JKUy0kKENPTkZJR19WUEtfREVNVVhF UikgICAgICAgICAgICAgICArPSB2cGsubwogT0JKUy0kKENPTkZJR19WUExBWUVSX0RFTVVYRVIp ICAgICAgICAgICArPSB2cGxheWVyZGVjLm8gc3VidGl0bGVzLm8KIE9CSlMtJChDT05GSUdfVlFG X0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gdnFmLm8KK09CSlMtJChDT05GSUdfVlZDX0RFTVVY RVIpICAgICAgICAgICAgICAgKz0gdnZjZGVjLm8gcmF3ZGVjLm8KIE9CSlMtJChDT05GSUdfVzY0 X0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gd2F2ZGVjLm8gdzY0Lm8gcGNtLm8KIE9CSlMtJChD T05GSUdfVzY0X01VWEVSKSAgICAgICAgICAgICAgICAgKz0gd2F2ZW5jLm8gdzY0Lm8KIE9CSlMt JChDT05GSUdfV0FWX0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gd2F2ZGVjLm8gcGNtLm8KZGlm ZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1h dHMuYwppbmRleCA0N2M0MTlhMDA5Li5hNGUzODIyNjgxIDEwMDY0NAotLS0gYS9saWJhdmZvcm1h dC9hbGxmb3JtYXRzLmMKKysrIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCkBAIC00NzQsNiAr NDc0LDcgQEAgZXh0ZXJuIGNvbnN0IEFWT3V0cHV0Rm9ybWF0IGZmX3ZvY19tdXhlcjsKIGV4dGVy biBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl92cGtfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBBVklu cHV0Rm9ybWF0ICBmZl92cGxheWVyX2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1h dCAgZmZfdnFmX2RlbXV4ZXI7CitleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfdnZjX2Rl bXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfdzY0X2RlbXV4ZXI7CiBleHRl cm4gY29uc3QgQVZPdXRwdXRGb3JtYXQgZmZfdzY0X211eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5w dXRGb3JtYXQgIGZmX3dhdl9kZW11eGVyOwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvZGVtdXgu YyBiL2xpYmF2Zm9ybWF0L2RlbXV4LmMKaW5kZXggMmRmZDgyYTYzYy4uOGRiZGUyM2ZjZCAxMDA2 NDQKLS0tIGEvbGliYXZmb3JtYXQvZGVtdXguYworKysgYi9saWJhdmZvcm1hdC9kZW11eC5jCkBA IC0xMjAsNiArMTIwLDcgQEAgc3RhdGljIGludCBzZXRfY29kZWNfZnJvbV9wcm9iZV9kYXRhKEFW Rm9ybWF0Q29udGV4dCAqcywgQVZTdHJlYW0gKnN0LAogICAgICAgICB7ICJtcDMiLCAgICAgICAg QVZfQ09ERUNfSURfTVAzLCAgICAgICAgICBBVk1FRElBX1RZUEVfQVVESU8gICAgfSwKICAgICAg ICAgeyAibXBlZ3ZpZGVvIiwgIEFWX0NPREVDX0lEX01QRUcyVklERU8sICAgQVZNRURJQV9UWVBF X1ZJREVPICAgIH0sCiAgICAgICAgIHsgInRydWVoZCIsICAgICBBVl9DT0RFQ19JRF9UUlVFSEQs ICAgICAgIEFWTUVESUFfVFlQRV9BVURJTyAgICB9LAorICAgICAgICB7ICJ2dmMiLCAgICAgICAg QVZfQ09ERUNfSURfVlZDLCAgICAgICAgICBBVk1FRElBX1RZUEVfVklERU8gICAgfSwKICAgICAg ICAgeyAwIH0KICAgICB9OwogICAgIGludCBzY29yZTsKQEAgLTc0Myw3ICs3NDQsOCBAQCBzdGF0 aWMgaW50NjRfdCBzZWxlY3RfZnJvbV9wdHNfYnVmZmVyKEFWU3RyZWFtICpzdCwgaW50NjRfdCAq cHRzX2J1ZmZlciwgaW50NjRfdAogewogICAgIEZGU3RyZWFtICpjb25zdCBzdGkgPSBmZnN0cmVh bShzdCk7CiAgICAgaW50IG9uZWluX29uZW91dCA9IHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0g QVZfQ09ERUNfSURfSDI2NCAmJgotICAgICAgICAgICAgICAgICAgICAgICBzdC0+Y29kZWNwYXIt PmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX0hFVkM7CisgICAgICAgICAgICAgICAgICAgICAgIHN0 LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfSEVWQyAmJgorICAgICAgICAgICAg ICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX1ZWQzsKIAog ICAgIGlmICghb25laW5fb25lb3V0KSB7CiAgICAgICAgIGludCBkZWxheSA9IHN0aS0+YXZjdHgt Pmhhc19iX2ZyYW1lczsKQEAgLTkzMyw3ICs5MzUsOCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX3Br dF9maWVsZHMoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlN0cmVhbSAqc3QsCiAgICAgaW50NjRfdCBv ZmZzZXQ7CiAgICAgQVZSYXRpb25hbCBkdXJhdGlvbjsKICAgICBpbnQgb25laW5fb25lb3V0ID0g c3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9IMjY0ICYmCi0gICAgICAgICAg ICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfSEVWQzsK KyAgICAgICAgICAgICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RF Q19JRF9IRVZDICYmCisgICAgICAgICAgICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNf aWQgIT0gQVZfQ09ERUNfSURfVlZDOwogCiAgICAgaWYgKHMtPmZsYWdzICYgQVZGTVRfRkxBR19O T0ZJTExJTikKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvdnZjLmMg Yi9saWJhdmZvcm1hdC92dmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5iMjdhNTIyMDA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmb3JtYXQvdnZjLmMKQEAgLTAs MCArMSw5MTkgQEAKKy8qCisgKiBWVkMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgbXV4ZXJzCisgKgor ICogQ29weXJpZ2h0IChDKSAyMDIyLCBUaG9tYXMgU2llZGVsCisgKgorICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor ICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2dldF9iaXRzLmgiCisj aW5jbHVkZSAibGliYXZjb2RlYy9nb2xvbWIuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL3Z2Yy5o IgorI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUuaCIKKyNpbmNsdWRlICJhdmMuaCIK KyNpbmNsdWRlICJhdmlvLmgiCisjaW5jbHVkZSAiYXZpb19pbnRlcm5hbC5oIgorI2luY2x1ZGUg InZ2Yy5oIgorCit0eXBlZGVmIHN0cnVjdCBWVkNDTkFMVW5pdEFycmF5IHsKKyAgICB1aW50OF90 ICBhcnJheV9jb21wbGV0ZW5lc3M7CisgICAgdWludDhfdCAgTkFMX3VuaXRfdHlwZTsKKyAgICB1 aW50MTZfdCBudW1fbmFsdXM7CisgICAgdWludDE2X3QgKm5hbF91bml0X2xlbmd0aDsKKyAgICB1 aW50OF90ICAqKm5hbF91bml0OworfSBWVkNDTkFMVW5pdEFycmF5OworCit0eXBlZGVmIHN0cnVj dCBWVkNQVExSZWNvcmQgeworICAgIHVpbnQ4X3QgIG51bV9ieXRlc19jb25zdHJhaW50X2luZm87 CisgICAgdWludDhfdCAgZ2VuZXJhbF9wcm9maWxlX2lkYzsKKyAgICB1aW50OF90ICBnZW5lcmFs X3RpZXJfZmxhZzsKKyAgICB1aW50OF90ICBnZW5lcmFsX2xldmVsX2lkYzsKKyAgICB1aW50OF90 ICBwdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWc7CisgICAgdWludDhfdCAgcHRsX211bHRp bGF5ZXJfZW5hYmxlZF9mbGFnOworICAgIHVpbnQ4X3QgIGdlbmVyYWxfY29uc3RyYWludF9pbmZv WzldOworICAgIHVpbnQ4X3QgICpwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnOworICAg IHVpbnQ4X3QgICpzdWJsYXllcl9sZXZlbF9pZGM7CisgICAgdWludDhfdCAgcHRsX251bV9zdWJf cHJvZmlsZXM7CisgICAgdWludDMyX3QgKmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjOworfSBWVkNQ VExSZWNvcmQ7CisKK3R5cGVkZWYgc3RydWN0IFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3Jk IHsKKyAgICB1aW50OF90ICBsZW5ndGhTaXplTWludXNPbmU7CisgICAgdWludDhfdCAgcHRsX3By ZXNlbnRfZmxhZzsKKyAgICB1aW50MTZfdCBvbHNfaWR4OworICAgIHVpbnQ4X3QgIG51bV9zdWJs YXllcnM7CisgICAgdWludDhfdCAgY29uc3RhbnRfZnJhbWVfcmF0ZTsKKyAgICB1aW50OF90ICBj aHJvbWFfZm9ybWF0X2lkYzsKKyAgICB1aW50OF90ICBiaXRfZGVwdGhfbWludXM4OworICAgIFZW Q1BUTFJlY29yZCBwdGw7CisgICAgdWludDE2X3QgbWF4X3BpY3R1cmVfd2lkdGg7CisgICAgdWlu dDE2X3QgbWF4X3BpY3R1cmVfaGVpZ2h0OworICAgIHVpbnQxNl90IGF2Z19mcmFtZV9yYXRlOwor ICAgIHVpbnQ4X3QgIG51bV9vZl9hcnJheXM7CisgICAgVlZDQ05BTFVuaXRBcnJheSAqYXJyYXk7 Cit9IFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkOworCit0eXBlZGVmIHN0cnVjdCBWVkND UHJvZmlsZVRpZXJMZXZlbCB7CisgICAgdWludDhfdCBwcm9maWxlX2lkYzsKKyAgICB1aW50OF90 IHRpZXJfZmxhZzsKKyAgICB1aW50OF90IGdlbmVyYWxfbGV2ZWxfaWRjOworICAgIHVpbnQ4X3Qg cHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnOworICAgIHVpbnQ4X3QgcHRsX211bHRpbGF5 ZXJfZW5hYmxlZF9mbGFnOworLy8gZ2VuZXJhbF9jb25zdHJhaW50X2luZm8KKyAgICB1aW50OF90 ICBnY2lfcHJlc2VudF9mbGFnOworICAgIHVpbnQ4X3QgIGdjaV9nZW5lcmFsX2NvbnN0cmFpbnRz WzldOworICAgIHVpbnQ4X3QgIGdjaV9udW1fcmVzZXJ2ZWRfYml0czsKKy8vIGVuZCBnZW5lcmFs X2NvbnN0cmFpbnRfaW5mbworICAgIHVpbnQ4X3QgICpwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2Vu dF9mbGFnOworICAgIHVpbnQ4X3QgICpzdWJsYXllcl9sZXZlbF9pZGM7CisgICAgdWludDhfdCAg cHRsX251bV9zdWJfcHJvZmlsZXM7CisgICAgdWludDMyX3QgKmdlbmVyYWxfc3ViX3Byb2ZpbGVf aWRjOworfSBWVkNDUHJvZmlsZVRpZXJMZXZlbDsKKworCitzdGF0aWMgdm9pZCB2dmNjX3VwZGF0 ZV9wdGwoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVlZDQ1Byb2ZpbGVUaWVyTGV2ZWwgKnB0bCkKK3sKKyAgICAvKgorICAg ICAqIFRoZSBsZXZlbCBpbmRpY2F0aW9uIGdlbmVyYWxfbGV2ZWxfaWRjIG11c3QgaW5kaWNhdGUg YSBsZXZlbCBvZgorICAgICAqIGNhcGFiaWxpdHkgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHRo ZSBoaWdoZXN0IGxldmVsIGluZGljYXRlZCBmb3IgdGhlCisgICAgICogaGlnaGVzdCB0aWVyIGlu IGFsbCB0aGUgcGFyYW1ldGVyIHNldHMuCisgICAgICovCisgICAgaWYgKHZ2Y2MtPnB0bC5nZW5l cmFsX3RpZXJfZmxhZyA8IHB0bC0+dGllcl9mbGFnKQorICAgICAgICB2dmNjLT5wdGwuZ2VuZXJh bF9sZXZlbF9pZGMgPSBwdGwtPmdlbmVyYWxfbGV2ZWxfaWRjOworICAgIGVsc2UKKyAgICAgICAg dnZjYy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRjID0gRkZNQVgodnZjYy0+cHRsLmdlbmVyYWxfbGV2 ZWxfaWRjLCBwdGwtPmdlbmVyYWxfbGV2ZWxfaWRjKTsKKworICAgIC8qCisgICAgICogVGhlIHRp ZXIgaW5kaWNhdGlvbiBnZW5lcmFsX3RpZXJfZmxhZyBtdXN0IGluZGljYXRlIGEgdGllciBlcXVh bCB0byBvcgorICAgICAqIGdyZWF0ZXIgdGhhbiB0aGUgaGlnaGVzdCB0aWVyIGluZGljYXRlZCBp biBhbGwgdGhlIHBhcmFtZXRlciBzZXRzLgorICAgICAqLworICAgIHZ2Y2MtPnB0bC5nZW5lcmFs X3RpZXJfZmxhZyA9IEZGTUFYKHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZywgcHRsLT50aWVy X2ZsYWcpOworCisgICAgLyoKKyAgICAgKiBUaGUgcHJvZmlsZSBpbmRpY2F0aW9uIGdlbmVyYWxf cHJvZmlsZV9pZGMgbXVzdCBpbmRpY2F0ZSBhIHByb2ZpbGUgdG8KKyAgICAgKiB3aGljaCB0aGUg c3RyZWFtIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gcmVjb3JkIGNvbmZvcm1z LgorICAgICAqCisgICAgICogSWYgdGhlIHNlcXVlbmNlIHBhcmFtZXRlciBzZXRzIGFyZSBtYXJr ZWQgd2l0aCBkaWZmZXJlbnQgcHJvZmlsZXMsIHRoZW4KKyAgICAgKiB0aGUgc3RyZWFtIG1heSBu ZWVkIGV4YW1pbmF0aW9uIHRvIGRldGVybWluZSB3aGljaCBwcm9maWxlLCBpZiBhbnksIHRoZQor ICAgICAqIGVudGlyZSBzdHJlYW0gY29uZm9ybXMgdG8uIElmIHRoZSBlbnRpcmUgc3RyZWFtIGlz IG5vdCBleGFtaW5lZCwgb3IgdGhlCisgICAgICogZXhhbWluYXRpb24gcmV2ZWFscyB0aGF0IHRo ZXJlIGlzIG5vIHByb2ZpbGUgdG8gd2hpY2ggdGhlIGVudGlyZSBzdHJlYW0KKyAgICAgKiBjb25m b3JtcywgdGhlbiB0aGUgZW50aXJlIHN0cmVhbSBtdXN0IGJlIHNwbGl0IGludG8gdHdvIG9yIG1v cmUKKyAgICAgKiBzdWItc3RyZWFtcyB3aXRoIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gcmVjb3Jk cyBpbiB3aGljaCB0aGVzZSBydWxlcyBjYW4KKyAgICAgKiBiZSBtZXQuCisgICAgICoKKyAgICAg KiBOb3RlOiBzZXQgdGhlIHByb2ZpbGUgdG8gdGhlIGhpZ2hlc3QgdmFsdWUgZm9yIHRoZSBzYWtl IG9mIHNpbXBsaWNpdHkuCisgICAgICovCisgICAgdnZjYy0+cHRsLmdlbmVyYWxfcHJvZmlsZV9p ZGMgPSBGRk1BWCh2dmNjLT5wdGwuZ2VuZXJhbF9wcm9maWxlX2lkYywgcHRsLT5wcm9maWxlX2lk Yyk7CisKKyAgICAvKgorICAgICAqIEVhY2ggYml0IGluIGZsYWdzIG1heSBvbmx5IGJlIHNldCBp ZiBhbGwKKyAgICAgKiB0aGUgcGFyYW1ldGVyIHNldHMgc2V0IHRoYXQgYml0LgorICAgICAqLwor ICAgIHZ2Y2MtPnB0bC5wdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcgJj0gcHRsLT5wdGxf ZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWc7CisgICAgdnZjYy0+cHRsLnB0bF9tdWx0aWxheWVy X2VuYWJsZWRfZmxhZyAmPSBwdGwtPnB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZzsKKworICAg IC8qCisgICAgICogQ29uc3RyYWludHMgSW5mbworICAgICAqLworICAgIGlmKHB0bC0+Z2NpX3By ZXNlbnRfZmxhZykgeworICAgICAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5m byA9IDk7CisgICAgICAgIG1lbWNweSgmdnZjYy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9pbmZv WzBdLCAmcHRsLT5nY2lfZ2VuZXJhbF9jb25zdHJhaW50c1swXSwgc2l6ZW9mKHVpbnQ4X3QpKjkp OworCisgICAgfSBlbHNlIHsKKyAgICAgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50 X2luZm8gPSAxOworICAgICAgICBtZW1zZXQoJnZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRf aW5mb1swXSwgMCwgc2l6ZW9mKHVpbnQ4X3QpKjkpOworICAgIH0KKworICAgIC8qCisgICAgICog RWFjaCBiaXQgaW4gZmxhZ3MgbWF5IG9ubHkgYmUgc2V0IGlmIG9uZSBvZgorICAgICAqIHRoZSBw YXJhbWV0ZXIgc2V0cyBzZXQgdGhhdCBiaXQuCisgICAgICovCisgICAgdnZjYy0+cHRsLnB0bF9z dWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcgPSAodWludDhfdCAqKSBtYWxsb2Moc2l6ZW9mKHVp bnQ4X3QpKnZ2Y2MtPm51bV9zdWJsYXllcnMtMSk7CisgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xl dmVsX2lkYyAgICAgICAgICAgICAgPSAodWludDhfdCAqKSBtYWxsb2Moc2l6ZW9mKHVpbnQ4X3Qp KnZ2Y2MtPm51bV9zdWJsYXllcnMtMSk7CisKKyAgICBtZW1zZXQodnZjYy0+cHRsLnB0bF9zdWJs YXllcl9sZXZlbF9wcmVzZW50X2ZsYWcsIDAsIHNpemVvZih1aW50OF90KSp2dmNjLT5udW1fc3Vi bGF5ZXJzLTEpOworICAgIG1lbXNldCh2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjLCAwLCBz aXplb2YodWludDhfdCkqdnZjYy0+bnVtX3N1YmxheWVycy0xKTsKKworICAgIGZvcihpbnQgaSA9 IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAyOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICAgIHZ2 Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldIHw9IHB0bC0+cHRsX3N1 YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXTsKKyAgICAgICAgaWYodnZjYy0+cHRsLnB0bF9z dWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0peworICAgICAgICAgICAgdnZjYy0+cHRsLnN1 YmxheWVyX2xldmVsX2lkY1tpXSA9IEZGTUFYKHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNb aV0sIHB0bC0+c3VibGF5ZXJfbGV2ZWxfaWRjW2ldKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl eworICAgICAgICAgIGlmKGkgPT0gdnZjYy0+bnVtX3N1YmxheWVycyAtIDEpeworICAgICAgICAg ICAgICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldID0gdnZjYy0+cHRsLmdlbmVyYWxf bGV2ZWxfaWRjOworICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICB2dmNjLT5wdGwuc3Vi bGF5ZXJfbGV2ZWxfaWRjW2ldID0gdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tpKzFdOwor ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1 Yl9wcm9maWxlcyA9IEZGTUFYKHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcywgcHRsLT5w dGxfbnVtX3N1Yl9wcm9maWxlcyk7CisgICAgaWYoIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9m aWxlcyApeworICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGMgPSAodWlu dDMyX3QgKikgbWFsbG9jKHNpemVvZih1aW50MzJfdCkqdnZjYy0+cHRsLnB0bF9udW1fc3ViX3By b2ZpbGVzKTsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHZ2Y2MtPnB0bC5wdGxfbnVtX3N1 Yl9wcm9maWxlczsgaSsrKSB7CisgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJv ZmlsZV9pZGNbaV0gPSBwdGwtPmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldOworICAgICAgICB9 CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJv ZmlsZV9pZGMgPSAodWludDMyX3QgKikgbWFsbG9jKHNpemVvZih1aW50MzJfdCkpOworICAgIH0K K30KKworc3RhdGljIHZvaWQgdnZjY19wYXJzZV9wdGwoR2V0Qml0Q29udGV4dCAqZ2IsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZj YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcm9maWxlVGllclBy ZXNlbnRGbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heF9z dWJfbGF5ZXJzX21pbnVzMSkKK3sKKyAgICBWVkNDUHJvZmlsZVRpZXJMZXZlbCBnZW5lcmFsX3B0 bDsKKyAgICBpbnQgajsKKworICAgIGlmKHByb2ZpbGVUaWVyUHJlc2VudEZsYWcpIHsKKyAgICAg ICAgZ2VuZXJhbF9wdGwucHJvZmlsZV9pZGMgICAgICAgICAgICAgICAgID0gZ2V0X2JpdHMoZ2Is IDcpOworICAgICAgICBnZW5lcmFsX3B0bC50aWVyX2ZsYWcgICAgICAgICAgICAgICAgICAgPSBn ZXRfYml0czEoZ2IpOworICAgIH0KKyAgICBnZW5lcmFsX3B0bC5nZW5lcmFsX2xldmVsX2lkYyAg ICAgICAgICAgICAgICAgICA9IGdldF9iaXRzKGdiLCA4KTsKKworICAgIGdlbmVyYWxfcHRsLnB0 bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgZ2VuZXJh bF9wdGwucHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBp Zihwcm9maWxlVGllclByZXNlbnRGbGFnKSB7ICAvLyBwYXJzZSBjb25zdHJhaW50IGluZm8KKyAg ICAgICAgZ2VuZXJhbF9wdGwuZ2NpX3ByZXNlbnRfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAg ICAgIGlmKGdlbmVyYWxfcHRsLmdjaV9wcmVzZW50X2ZsYWcpIHsKKyAgICAgICAgICAgIGZvciAo aiA9IDA7IGogPCA4OyBqKyspCisgICAgICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX2dlbmVy YWxfY29uc3RyYWludHNbal0gPSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAgICAgICBnZW5lcmFs X3B0bC5nY2lfZ2VuZXJhbF9jb25zdHJhaW50c1s4XSA9IDA7CisgICAgICAgICAgICBnZW5lcmFs X3B0bC5nY2lfZ2VuZXJhbF9jb25zdHJhaW50c1s4XSA9IGdldF9iaXRzKGdiLCA3KTsKKworICAg ICAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX251bV9yZXNlcnZlZF9iaXRzID0gZ2V0X2JpdHMoZ2Is IDgpOworICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBnZW5lcmFsX3B0bC5nY2lfbnVtX3Jlc2Vy dmVkX2JpdHMpOworICAgICAgICB9CisgICAgICAgIHdoaWxlKGdiLT5pbmRleCAlIDggIT0gMCkK KyAgICAgICAgICAgIHNraXBfYml0czEoZ2IpOworICAgIH0KKworICAgIGdlbmVyYWxfcHRsLnB0 bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcgPSAodWludDhfdCAqKSBtYWxsb2Moc2l6ZW9m KHVpbnQ4X3QpKm1heF9zdWJfbGF5ZXJzX21pbnVzMSk7CisgICAgZm9yKGludCBpID0gbWF4X3N1 Yl9sYXllcnNfbWludXMxLTE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIGdlbmVyYWxfcHRsLnB0 bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0gPSBnZXRfYml0czEoZ2IpOworICAgIH0K KyAgICB3aGlsZShnYi0+aW5kZXglOCAhPSAwKQorICAgICAgICBza2lwX2JpdHMxKGdiKTsKKwor ICAgIGdlbmVyYWxfcHRsLnN1YmxheWVyX2xldmVsX2lkYyA9ICh1aW50OF90ICopIG1hbGxvYyhz aXplb2YodWludDhfdCkqbWF4X3N1Yl9sYXllcnNfbWludXMxKTsKKyAgICBmb3IoaW50IGkgPSBt YXhfc3ViX2xheWVyc19taW51czEtMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgaWYoIGdlbmVy YWxfcHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0gKQorICAgICAgICAgICAg Z2VuZXJhbF9wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldID0gZ2V0X2JpdHMoZ2IsIDgpOworICAg IH0KKworICAgIGlmKHByb2ZpbGVUaWVyUHJlc2VudEZsYWcpIHsKKyAgICAgICAgZ2VuZXJhbF9w dGwucHRsX251bV9zdWJfcHJvZmlsZXMgPSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAgIGlmKCBn ZW5lcmFsX3B0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcykgeworICAgICAgICAgICAgZ2VuZXJhbF9w dGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGMgPSAodWludDMyX3QgKikgbWFsbG9jKHNpemVvZih1 aW50MzJfdCkqZ2VuZXJhbF9wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpOworICAgICAgICAgICAg Zm9yKGludCBpID0gMDsgaSA8IGdlbmVyYWxfcHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBpKysp IHsKKyAgICAgICAgICAgICAgICBnZW5lcmFsX3B0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tp XSA9IGdldF9iaXRzX2xvbmcoZ2IsIDMyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdlbmVyYWxfc3Vi X3Byb2ZpbGVfaWRjID0gKHVpbnQzMl90ICopIG1hbGxvYyhzaXplb2YodWludDMyX3QpKTsKKyAg ICAgICAgfQorICAgIH0KKworICAgIHZ2Y2NfdXBkYXRlX3B0bCh2dmNjLCAmZ2VuZXJhbF9wdGwp OworCisgICAgZnJlZShnZW5lcmFsX3B0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFn KTsKKyAgICBmcmVlKGdlbmVyYWxfcHRsLnN1YmxheWVyX2xldmVsX2lkYyk7CisgICAgZnJlZShn ZW5lcmFsX3B0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkYyk7Cit9CisKK3N0YXRpYyBpbnQgdnZj Y19wYXJzZV92cHMoR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAg IFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworICB1bnNpZ25lZCBpbnQg dnBzX21heF9sYXllcnNfbWludXMxOworICB1bnNpZ25lZCBpbnQgdnBzX21heF9zdWJfbGF5ZXJz X21pbnVzMTsKKyAgdW5zaWduZWQgaW50IHZwc19kZWZhdWx0X3B0bF9kcGJfaHJkX21heF90aWRf ZmxhZzsKKyAgdW5zaWduZWQgaW50IHZwc19hbGxfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZzsKKyAg dW5zaWduZWQgaW50IHZwc19lYWNoX2xheWVyX2lzX2FuX29sc19mbGFnOworICB1bnNpZ25lZCBp bnQgdnBzX29sc19tb2RlX2lkYzsKKworICB1bnNpZ25lZCBpbnQgKnZwc19wdF9wcmVzZW50X2Zs YWc7CisgIHVuc2lnbmVkIGludCAqdnBzX3B0bF9tYXhfdGlkOworICB1bnNpZ25lZCBpbnQgdnBz X251bV9wdGxzX21pbnVzMSA9IDA7CisKKworICAgIC8qCisgICAgICogdnBzX3ZpZGVvX3BhcmFt ZXRlcl9zZXRfaWQgdSg0KQorICAgICAqLworICAgIHNraXBfYml0cyhnYiwgNCk7CisKKyAgICB2 cHNfbWF4X2xheWVyc19taW51czEgPSBnZXRfYml0cyhnYiwgNik7CisgICAgdnBzX21heF9zdWJf bGF5ZXJzX21pbnVzMSA9IGdldF9iaXRzKGdiLCAzKTsKKworICAgIC8qCisgICAgICogbnVtVGVt cG9yYWxMYXllcnMgZ3JlYXRlciB0aGFuIDEgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmVhbSB0byB3 aGljaCB0aGlzCisgICAgICogY29uZmlndXJhdGlvbiByZWNvcmQgYXBwbGllcyBpcyB0ZW1wb3Jh bGx5IHNjYWxhYmxlIGFuZCB0aGUgY29udGFpbmVkCisgICAgICogbnVtYmVyIG9mIHRlbXBvcmFs IGxheWVycyAoYWxzbyByZWZlcnJlZCB0byBhcyB0ZW1wb3JhbCBzdWItbGF5ZXIgb3IKKyAgICAg KiBzdWItbGF5ZXIgaW4gSVNPL0lFQyAyMzAwOC0yKSBpcyBlcXVhbCB0byBudW1UZW1wb3JhbExh eWVycy4gVmFsdWUgMQorICAgICAqIGluZGljYXRlcyB0aGF0IHRoZSBzdHJlYW0gaXMgbm90IHRl bXBvcmFsbHkgc2NhbGFibGUuIFZhbHVlIDAgaW5kaWNhdGVzCisgICAgICogdGhhdCBpdCBpcyB1 bmtub3duIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyB0ZW1wb3JhbGx5IHNjYWxhYmxlLgorICAgICAq LworICAgIHZ2Y2MtPm51bV9zdWJsYXllcnMgPSBGRk1BWCh2dmNjLT5udW1fc3VibGF5ZXJzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwc19tYXhfc3ViX2xheWVyc19t aW51czEgKyAxKTsKKworCisgICAgaWYodnBzX21heF9sYXllcnNfbWludXMxID4gMCAmJiB2cHNf bWF4X3N1Yl9sYXllcnNfbWludXMxID4gMCkKKyAgICAgICAgdnBzX2RlZmF1bHRfcHRsX2RwYl9o cmRfbWF4X3RpZF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsgLy92cHNfZGVmYXVsdF9wdGxfZHBiX2hy ZF9tYXhfdGlkX2ZsYWdzCisgICAgaWYodnBzX21heF9sYXllcnNfbWludXMxID4gMCkKKyAgICAg ICAgdnBzX2FsbF9pbmRlcGVuZGFudF9sYXllcl9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKworICAg IGZvcihpbnQgaSA9MDsgaSA8PSB2cHNfbWF4X2xheWVyc19taW51czE7IGkrKykgeworICAgICAg ICBza2lwX2JpdHMoZ2IsIDYpOyAvL3Zwc19kZWZhdWx0X3B0bF9kcGJfaHJkX21heF90aWRfZmxh Z3N2cHNfbGF5ZXJfaWRbaV0KKyAgICAgICAgaWYoaSA+IDAgJiYgIXZwc19hbGxfaW5kZXBlbmRh bnRfbGF5ZXJfZmxhZykgeworICAgICAgICAgICAgaWYoZ2V0X2JpdHMxKGdiKSkgeyAvLyB2cHNf aW5kZXBlbmRhbnRfbGF5ZXJfZmxhZworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2cHNf bWF4X3RpZF9yZWZfcHJlc2VudF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgICAgICAg ICBmb3IgKGludCBqID0wOyBqPGk7IGorKykgeworICAgICAgICAgICAgICAgICAgICBpZih2cHNf bWF4X3RpZF9yZWZfcHJlc2VudF9mbGFnICYmIGdldF9iaXRzMShnYikpIC8vIHZwc19kaXJlY3Rf cmVmX2xheWVyX2ZsYWdbaV1bal0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfYml0cyhn YiwgMyk7IC8vdnBzX21heF90aWRfaWxfcmVmX3BpY3NfcGx1czEKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZih2cHNfbWF4X2xheWVy c19taW51czEgPiAwKSB7CisgICAgICAgIGlmKHZwc19hbGxfaW5kZXBlbmRhbnRfbGF5ZXJfZmxh ZykKKyAgICAgICAgICAgIHZwc19lYWNoX2xheWVyX2lzX2FuX29sc19mbGFnID0gZ2V0X2JpdHMx KGdiKTsKKyAgICAgICAgaWYodnBzX2VhY2hfbGF5ZXJfaXNfYW5fb2xzX2ZsYWcpIHsKKyAgICAg ICAgICAgIGlmKCF2cHNfYWxsX2luZGVwZW5kYW50X2xheWVyX2ZsYWcpCisgICAgICAgICAgICAg ICAgdnBzX29sc19tb2RlX2lkYyA9IGdldF9iaXRzKGdiLCAyKTsKKyAgICAgICAgICAgIGlmKHZw c19vbHNfbW9kZV9pZGMgPT0gMikgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2cHNf bnVtX291dHB1dF9sYXllcl9zZXRzX21pbnVzMiA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICAgICAg ICAgICAgICBmb3IoIGludCBpID0gMTsgaSA8PSB2cHNfbnVtX291dHB1dF9sYXllcl9zZXRzX21p bnVzMiArMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciggaW50IGogPSAwOyBqIDw9 IHZwc19tYXhfbGF5ZXJzX21pbnVzMTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBz a2lwX2JpdHMxKGdiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2cHNfbnVtX3B0bHNfbWludXMxID0g Z2V0X2JpdHMoZ2IsIDgpOworICAgIH0KKworICAgIHZwc19wdF9wcmVzZW50X2ZsYWcgPSAodW5z aWduZWQgaW50ICopIG1hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqICh2cHNfbnVtX3B0bHNf bWludXMxKzEpKTsKKyAgICB2cHNfcHRsX21heF90aWQgPSAodW5zaWduZWQgaW50ICopIG1hbGxv YyhzaXplb2YodW5zaWduZWQgaW50KSAqICh2cHNfbnVtX3B0bHNfbWludXMxKzEpKTsKKyAgICBm b3IoaW50IGkgPSAwOyBpIDw9IHZwc19udW1fcHRsc19taW51czE7IGkrKykgeworICAgICAgICBp ZihpPjApCisJICAgICAgICAgIHZwc19wdF9wcmVzZW50X2ZsYWdbaV0gPSBnZXRfYml0czEoZ2Ip OworICAgICAgICBpZighdnBzX2RlZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3RpZF9mbGFnKQorCSAg ICAgICAgICB2cHNfcHRsX21heF90aWRbaV0gPSBnZXRfYml0cyhnYiwgMyk7CisgICAgfQorCisg ICAgd2hpbGUoZ2ItPmluZGV4JTggIT0gMCkKKyAgICAgICAgc2tpcF9iaXRzMShnYik7CisKKyAg ICBmb3IoaW50IGkgPSAwOyBpIDw9IHZwc19udW1fcHRsc19taW51czE7IGkrKykgeworICAgICAg ICB2dmNjX3BhcnNlX3B0bChnYiwgdnZjYywgdnBzX3B0X3ByZXNlbnRfZmxhZ1tpXSwgdnBzX3B0 bF9tYXhfdGlkW2ldKTsKKyAgICB9CisKKyAgICBmcmVlKHZwc19wdF9wcmVzZW50X2ZsYWcpOwor ICAgIGZyZWUodnBzX3B0bF9tYXhfdGlkKTsKKworICAgIC8qIG5vdGhpbmcgdXNlZnVsIGZvciB2 dmNjIHBhc3QgdGhpcyBwb2ludCAqLworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ2 Y2NfcGFyc2Vfc3BzKEdldEJpdENvbnRleHQgKmdiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICB1bnNpZ25lZCBp bnQgc3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMSwgbG9nMl9jdHVfc2l6ZV9taW51czU7CisgICAg Ly91bnNpZ25lZCBpbnQgbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzLCBudW1fZGVsdGFfcG9j c1tWVkNfTUFYX1JFRl9QSUNfTElTVFNdOworICAgIC8vdW5zaWduZWQgaW50IHNwc19jaHJvbWFf Zm9ybWF0X2lkYzsKKyAgICB1bnNpZ25lZCBpbnQgc3BzX3N1YnBpY19zYW1lX3NpemVfZmxhZywg c3BzX3BpY19oZWlnaHRfbWF4X2luX2x1bWFfc2FtcGxlLCBzcHNfcGljX3dpZHRoX21heF9pbl9s dW1hX3NhbXBsZTsKKyAgICB1bnNpZ25lZCBpbnQgc3BzX2luZGVwZW5kYW50X3N1YnBpY3NfZmxh ZzsKKyAgICB1bnNpZ25lZCBpbnQgZmxhZzsKKworICAgIHNraXBfYml0cyhnYiwgOCk7IC8vIHNw c19zZXFfcGFyYW1ldGVyX3NldF9pZCAmJiBzcHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZAorICAg IHNwc19tYXhfc3ViX2xheWVyc19taW51czEgPSBnZXRfYml0cyAoZ2IsIDMpOworCisgICAgLyoK KyAgICAgKiBudW1UZW1wb3JhbExheWVycyBncmVhdGVyIHRoYW4gMSBpbmRpY2F0ZXMgdGhhdCB0 aGUgc3RyZWFtIHRvIHdoaWNoIHRoaXMKKyAgICAgKiBjb25maWd1cmF0aW9uIHJlY29yZCBhcHBs aWVzIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUgYW5kIHRoZSBjb250YWluZWQKKyAgICAgKiBudW1i ZXIgb2YgdGVtcG9yYWwgbGF5ZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzIHRlbXBvcmFsIHN1Yi1s YXllciBvcgorICAgICAqIHN1Yi1sYXllciBpbiBJU08vSUVDIDIzMDA4LTIpIGlzIGVxdWFsIHRv IG51bVRlbXBvcmFsTGF5ZXJzLiBWYWx1ZSAxCisgICAgICogaW5kaWNhdGVzIHRoYXQgdGhlIHN0 cmVhbSBpcyBub3QgdGVtcG9yYWxseSBzY2FsYWJsZS4gVmFsdWUgMCBpbmRpY2F0ZXMKKyAgICAg KiB0aGF0IGl0IGlzIHVua25vd24gd2hldGhlciB0aGUgc3RyZWFtIGlzIHRlbXBvcmFsbHkgc2Nh bGFibGUuCisgICAgICovCisgICAgdnZjYy0+bnVtX3N1YmxheWVycyA9IEZGTUFYKHZ2Y2MtPm51 bV9zdWJsYXllcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHNfbWF4 X3N1Yl9sYXllcnNfbWludXMxICsgMSk7CisKKyAgICB2dmNjLT5jaHJvbWFfZm9ybWF0X2lkYyA9 IGdldF9iaXRzKGdiLCAyKTsKKyAgICBsb2cyX2N0dV9zaXplX21pbnVzNSA9IGdldF9iaXRzKGdi LCAyKTsKKworICAgIGlmKGdldF9iaXRzMShnYikpIC8vc3BzX3B0bF9kcGJfaHJkX3BhcmFtc19w cmVzZW50X2ZsYWcKKyAgICAgICAgdnZjY19wYXJzZV9wdGwoZ2IsIHZ2Y2MsIDEsIHNwc19tYXhf c3ViX2xheWVyc19taW51czEpOworCisgICAgZmxhZyA9IGdldF9iaXRzKGdiLCAxKTsgLy9za2lw X2JpdHMxKGdiKTsgLy9zcHNfZ2RyX2VuYWJsZWRfZmxhZworICAgIGZsYWcgPSBnZXRfYml0cyhn YiwgMSk7ICAvL3Nwc19yZWZfcGljX3Jlc2FtcGxpbmdfZW5hYmxlZF9mbGFnCisgICAgaWYoZmxh Zyl7IC8vc3BzX3JlZl9waWNfcmVzYW1wbGluZ19lbmFibGVkX2ZsYWcKKyAgICAgICAgZmxhZyA9 IGdldF9iaXRzKGdiLCAxKTsgLy9za2lwX2JpdHMxKGdiKTsgLy9zcHNfcmVzX2NoYW5nZV9pbl9j bHZzX2FsbG93ZWRfZmxhZworICAgIH0KKworICAgIHNwc19waWNfd2lkdGhfbWF4X2luX2x1bWFf c2FtcGxlID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICB2dmNjLT5tYXhfcGljdHVyZV93 aWR0aCA9IEZGTUFYKHZ2Y2MtPm1heF9waWN0dXJlX3dpZHRoICwgc3BzX3BpY193aWR0aF9tYXhf aW5fbHVtYV9zYW1wbGUpOworICAgIHNwc19waWNfaGVpZ2h0X21heF9pbl9sdW1hX3NhbXBsZT0g Z2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICB2dmNjLT5tYXhfcGljdHVyZV9oZWlnaHQgPSBG Rk1BWCh2dmNjLT5tYXhfcGljdHVyZV9oZWlnaHQgLCBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVt YV9zYW1wbGUpOworCisgICAgaWYoZ2V0X2JpdHMxKGdiKSkgeworICAgICAgICBnZXRfdWVfZ29s b21iX2xvbmcoZ2IpOyAvLyBzcHNfY29uZl93aW5fbGVmdF9vZmZzZXQKKyAgICAgICAgZ2V0X3Vl X2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX2NvbmZfd2luX3JpZ2h0X29mZnNldAorICAgICAgICBn ZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNfY29uZl93aW5fdG9wX29mZnNldAorICAgICAg ICBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNfY29uZl93aW5fYm90dG9tX29mZnNldAor ICAgIH0KKworICAgIGlmKGdldF9iaXRzMShnYikpIHsgLy8gc3BzX3N1YnBpY19pbmZvX3ByZXNl bnRfZmxhZworICAgICAgICB1bnNpZ25lZCBpbnQgc3BzX251bV9zdWJwaWNzX21pbnVzMSA9IGdl dF91ZV9nb2xvbWJfbG9uZyhnYik7CisgICAgICAgIGlmKHNwc19udW1fc3VicGljc19taW51czEg PiAwKSB7IC8vIHNwc19udW1fc3VicGljc19taW51czEKKyAgICAgICAgICAgIHNwc19pbmRlcGVu ZGFudF9zdWJwaWNzX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICAgICAgc3BzX3N1YnBp Y19zYW1lX3NpemVfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAgIH0KKyAgICAgICAgZm9y KGludCBpID0gMDsgc3BzX251bV9zdWJwaWNzX21pbnVzMSA+IDAgJiYgaSA8PSBzcHNfbnVtX3N1 YnBpY3NfbWludXMxOyBpKyspIHsKKyAgICAgICAgICAgIGlmKCFzcHNfc3VicGljX3NhbWVfc2l6 ZV9mbGFnIHx8IGkgPT0gMCkgeworICAgICAgICAgICAgICAgIGludCBsZW4gPSBGRk1JTihsb2cy X2N0dV9zaXplX21pbnVzNSArNSwgMTYpOworICAgICAgICAgICAgICAgIGlmKGkgPiAwICYmIHNw c19waWNfd2lkdGhfbWF4X2luX2x1bWFfc2FtcGxlID4gMTI4KQorICAgICAgICAgICAgICAgICAg ICBza2lwX2JpdHMoZ2IsIGxlbik7CisgICAgICAgICAgICAgICAgaWYoaSA+IDAgJiYgc3BzX3Bp Y19oZWlnaHRfbWF4X2luX2x1bWFfc2FtcGxlID4gMTI4KQorICAgICAgICAgICAgICAgICAgICBz a2lwX2JpdHMoZ2IsIGxlbik7CisgICAgICAgICAgICAgICAgaWYoaSA8IHNwc19udW1fc3VicGlj c19taW51czEgJiYgc3BzX3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGUgPiAxMjgpCisgICAg ICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgbGVuKTsKKyAgICAgICAgICAgICAgICBpZihp IDwgc3BzX251bV9zdWJwaWNzX21pbnVzMSAmJiBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9z YW1wbGUgPiAxMjgpCisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgbGVuKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCFzcHNfaW5kZXBlbmRhbnRfc3VicGljc19mbGFn KSB7CisgICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCAyKTsgLy8gc3BzX3N1YnBpY190cmVh dGVkX2FzX3BpY19mbGFnICYmIHNwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc3VicGljX2VuYWJsZWRf ZmxhZworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdldF91ZV9nb2xvbWJfbG9u ZyhnYik7IC8vIHNwc19zdWJwaWNfaWRfbGVuX21pbnVzMQorICAgICAgICBpZihnZXRfYml0czEo Z2IpKSB7IC8vIHNwc19zdWJwaWNfaWRfbWFwcGluZ19leHBsaWNpdGx5X3NpZ25hbGxlZF9mbGFn CisgICAgICAgICAgICBpZihnZXRfYml0czEoZ2IpKSAvLyBzcHNfc3VicGljX2lkX21hcHBpbmdf cHJlc2VudF9mbGFnCisgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDw9IHNwc19udW1fc3Vi cGljc19taW51czE7IGkrKykgeworICAgICAgICAgICAgICAgIHNraXBfYml0czEoZ2IpOyAvLyBz cHNfc3VicGljX2lkW2ldCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgdnZj Yy0+Yml0X2RlcHRoX21pbnVzOCA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7CisKKyAgICAvKiBu b3RoaW5nIHVzZWZ1bCBmb3IgdnZjYyBwYXN0IHRoaXMgcG9pbnQgKi8KKyAgICByZXR1cm4gMDsK K30KKworc3RhdGljIGludCB2dmNjX3BhcnNlX3BwcyhHZXRCaXRDb250ZXh0ICpnYiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2Mp Cit7CisKKyAgICAvLyBOb3RoaW5nIG9mIGltcG9ydGFuY2UgdG8gcGFyc2UgaW4gUFBTCisgICAg Lyogbm90aGluZyB1c2VmdWwgZm9yIHZ2Y2MgcGFzdCB0aGlzIHBvaW50ICovCisgICAgcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIG5hbF91bml0X3BhcnNlX2hlYWRlcihHZXRCaXRDb250ZXh0 ICpnYiwgdWludDhfdCAqbmFsX3R5cGUpCit7CisgICAgLyoKKyAgICAgKiBmb3JiaWRkZW5femVy b19iaXQgICAgdSgxKQorICAgICAqIG51aF9yZXNlcnZlZF96ZXJvX2JpdCB1KDEpCisgICAgICog bnVoX2xheWVyX2lkICAgICAgICAgIHUoNikKKyAgICAgKi8KKyAgICBza2lwX2JpdHMoZ2IsIDgp OworICAgICpuYWxfdHlwZSA9IGdldF9iaXRzKGdiLCA1KTsKKworICAgIC8qCisgICAgICogbnVo X3RlbXBvcmFsX2lkX3BsdXMxIHUoMykKKyAgICAgKi8KKyAgICBza2lwX2JpdHMoZ2IsIDMpOwor fQorCitzdGF0aWMgaW50IHZ2Y2NfYXJyYXlfYWRkX25hbF91bml0KHVpbnQ4X3QgKm5hbF9idWYs IHVpbnQzMl90IG5hbF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50OF90IG5hbF90eXBlLCBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZj YykKK3sKKyAgICBpbnQgcmV0OworICAgIHVpbnQ4X3QgaW5kZXg7CisgICAgdWludDE2X3QgbnVt X25hbHVzOworICAgIFZWQ0NOQUxVbml0QXJyYXkgKmFycmF5OworCisgICAgZm9yIChpbmRleCA9 IDA7IGluZGV4IDwgdnZjYy0+bnVtX29mX2FycmF5czsgaW5kZXgrKykKKyAgICAgICAgaWYgKHZ2 Y2MtPmFycmF5W2luZGV4XS5OQUxfdW5pdF90eXBlID09IG5hbF90eXBlKQorICAgICAgICAgICAg YnJlYWs7CisKKyAgICBpZiAoaW5kZXggPj0gdnZjYy0+bnVtX29mX2FycmF5cykgeworICAgICAg ICB1aW50OF90IGk7CisKKyAgICAgICAgcmV0ID0gYXZfcmVhbGxvY3BfYXJyYXkoJnZ2Y2MtPmFy cmF5LCBpbmRleCArIDEsIHNpemVvZihWVkNDTkFMVW5pdEFycmF5KSk7CisgICAgICAgIGlmIChy ZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICBmb3IgKGkgPSB2dmNj LT5udW1fb2ZfYXJyYXlzOyBpIDw9IGluZGV4OyBpKyspCisgICAgICAgICAgICBtZW1zZXQoJnZ2 Y2MtPmFycmF5W2ldLCAwLCBzaXplb2YoVlZDQ05BTFVuaXRBcnJheSkpOworICAgICAgICB2dmNj LT5udW1fb2ZfYXJyYXlzID0gaW5kZXggKyAxOworICAgIH0KKworICAgIGFycmF5ICAgID0gJnZ2 Y2MtPmFycmF5W2luZGV4XTsKKyAgICBudW1fbmFsdXMgPSBhcnJheS0+bnVtX25hbHVzOworCisg ICAgcmV0ID0gYXZfcmVhbGxvY3BfYXJyYXkoJmFycmF5LT5uYWxfdW5pdCwgbnVtX25hbHVzICsg MSwgc2l6ZW9mKHVpbnQ4X3QqKSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiBy ZXQ7CisKKyAgICByZXQgPSBhdl9yZWFsbG9jcF9hcnJheSgmYXJyYXktPm5hbF91bml0X2xlbmd0 aCwgbnVtX25hbHVzICsgMSwgc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgaWYgKHJldCA8IDApCisg ICAgICAgIHJldHVybiByZXQ7CisKKyAgICBhcnJheS0+bmFsX3VuaXQgICAgICAgW251bV9uYWx1 c10gPSBuYWxfYnVmOworICAgIGFycmF5LT5uYWxfdW5pdF9sZW5ndGhbbnVtX25hbHVzXSA9IG5h bF9zaXplOworICAgIGFycmF5LT5OQUxfdW5pdF90eXBlICAgICAgICAgICAgICA9IG5hbF90eXBl OworICAgIGFycmF5LT5udW1fbmFsdXMrKzsKKworICAgIC8qCisgICAgICogV2hlbiB0aGUgc2Ft cGxlIGVudHJ5IG5hbWUgaXMg4oCYdnZjMeKAmSwgdGhlIGRlZmF1bHQgYW5kIG1hbmRhdG9yeSB2 YWx1ZSBvZgorICAgICAqIGFycmF5X2NvbXBsZXRlbmVzcyBpcyAxIGZvciBhcnJheXMgb2YgYWxs IHR5cGVzIG9mIHBhcmFtZXRlciBzZXRzLCBhbmQgMAorICAgICAqIGZvciBhbGwgb3RoZXIgYXJy YXlzLiBXaGVuIHRoZSBzYW1wbGUgZW50cnkgbmFtZSBpcyDigJhoZXYx4oCZLCB0aGUgZGVmYXVs dAorICAgICAqIHZhbHVlIG9mIGFycmF5X2NvbXBsZXRlbmVzcyBpcyAwIGZvciBhbGwgYXJyYXlz LgorICAgICAqLworICAgIGlmIChuYWxfdHlwZSA9PSBWVkNfVlBTX05VVCB8fCBuYWxfdHlwZSA9 PSBWVkNfU1BTX05VVCB8fCBuYWxfdHlwZSA9PSBWVkNfUFBTX05VVCkKKyAgICAgICAgYXJyYXkt PmFycmF5X2NvbXBsZXRlbmVzcyA9IHBzX2FycmF5X2NvbXBsZXRlbmVzczsKKworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgaW50IHZ2Y2NfYWRkX25hbF91bml0KHVpbnQ4X3QgKm5hbF9idWYs IHVpbnQzMl90IG5hbF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHNf YXJyYXlfY29tcGxldGVuZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNv ZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBH ZXRCaXRDb250ZXh0IGdiYzsKKyAgICB1aW50OF90IG5hbF90eXBlOworICAgIHVpbnQ4X3QgKnJi c3BfYnVmOworICAgIHVpbnQzMl90IHJic3Bfc2l6ZTsKKworICAgIHJic3BfYnVmID0gZmZfbmFs X3VuaXRfZXh0cmFjdF9yYnNwKG5hbF9idWYsIG5hbF9zaXplLCAmcmJzcF9zaXplLCAyKTsKKyAg ICBpZiAoIXJic3BfYnVmKSB7CisgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAg ICAgZ290byBlbmQ7CisgICAgfQorCisgICAgcmV0ID0gaW5pdF9nZXRfYml0czgoJmdiYywgcmJz cF9idWYsIHJic3Bfc2l6ZSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGdvdG8gZW5kOwor CisgICAgbmFsX3VuaXRfcGFyc2VfaGVhZGVyKCZnYmMsICZuYWxfdHlwZSk7CisKKyAgICAvKgor ICAgICAqIE5vdGU6IG9ubHkgJ2RlY2xhcmF0aXZlJyBTRUkgbWVzc2FnZXMgYXJlIGFsbG93ZWQg aW4KKyAgICAgKiB2dmNjLiBQZXJoYXBzIHRoZSBTRUkgcGxheWxvYWQgdHlwZSBzaG91bGQgYmUg Y2hlY2tlZAorICAgICAqIGFuZCBub24tZGVjbGFyYXRpdmUgU0VJIG1lc3NhZ2VzIGRpc2NhcmRl ZD8KKyAgICAgKi8KKyAgICBzd2l0Y2ggKG5hbF90eXBlKSB7CisgICAgY2FzZSBWVkNfT1BJX05V VDoKKyAgICBjYXNlIFZWQ19WUFNfTlVUOgorICAgIGNhc2UgVlZDX1NQU19OVVQ6CisgICAgY2Fz ZSBWVkNfUFBTX05VVDoKKyAgICBjYXNlIFZWQ19QUkVGSVhfU0VJX05VVDoKKyAgICBjYXNlIFZW Q19TVUZGSVhfU0VJX05VVDoKKyAgICAgICAgcmV0ID0gdnZjY19hcnJheV9hZGRfbmFsX3VuaXQo bmFsX2J1ZiwgbmFsX3NpemUsIG5hbF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwc19hcnJheV9jb21wbGV0ZW5lc3MsIHZ2Y2MpOworICAgICAgICBpZiAocmV0 IDwgMCkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBlbHNlIGlmIChuYWxfdHlwZSA9 PSBWVkNfVlBTX05VVCkKKyAgICAgICAgICAgIHJldCA9IHZ2Y2NfcGFyc2VfdnBzKCZnYmMsIHZ2 Y2MpOworICAgICAgICBlbHNlIGlmIChuYWxfdHlwZSA9PSBWVkNfU1BTX05VVCkKKyAgICAgICAg ICAgIHJldCA9IHZ2Y2NfcGFyc2Vfc3BzKCZnYmMsIHZ2Y2MpOworICAgICAgICBlbHNlIGlmIChu YWxfdHlwZSA9PSBWVkNfUFBTX05VVCkKKyAgICAgICAgICAgIHJldCA9IHZ2Y2NfcGFyc2VfcHBz KCZnYmMsIHZ2Y2MpOworICAgICAgICBlbHNlIGlmIChuYWxfdHlwZSA9PSBWVkNfT1BJX05VVCkg eworICAgICAgICAgICAgIC8vIG5vdCB5ZXQgc3VwcG9ydGVkCisgICAgICAgIH0KKyAgICAgICAg aWYgKHJldCA8IDApCisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgYnJlYWs7CisgICAg ZGVmYXVsdDoKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgZ290 byBlbmQ7CisgICAgfQorCitlbmQ6CisgICAgYXZfZnJlZShyYnNwX2J1Zik7CisgICAgcmV0dXJu IHJldDsKK30KKworc3RhdGljIHZvaWQgdnZjY19pbml0KFZWQ0RlY29kZXJDb25maWd1cmF0aW9u UmVjb3JkICp2dmNjKQoreworICAgIG1lbXNldCh2dmNjLCAwLCBzaXplb2YoVlZDRGVjb2RlckNv bmZpZ3VyYXRpb25SZWNvcmQpKTsKKyAgICB2dmNjLT5sZW5ndGhTaXplTWludXNPbmUgICA9IDM7 IC8vIDQgYnl0ZXMKKworICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvID0g MTsKKworICAgIHZ2Y2MtPnB0bF9wcmVzZW50X2ZsYWcgPSAxOworfQorCitzdGF0aWMgdm9pZCB2 dmNjX2Nsb3NlKFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAgIHVp bnQ4X3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpKysp IHsKKyAgICAgICAgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzID0gMDsKKyAgICAgICAgYXZfZnJl ZXAoJnZ2Y2MtPmFycmF5W2ldLm5hbF91bml0KTsKKyAgICAgICAgYXZfZnJlZXAoJnZ2Y2MtPmFy cmF5W2ldLm5hbF91bml0X2xlbmd0aCk7CisgICAgfQorCisgICAgZnJlZSh2dmNjLT5wdGwucHRs X3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZyk7CisgICAgZnJlZSh2dmNjLT5wdGwuc3VibGF5 ZXJfbGV2ZWxfaWRjKTsKKyAgICBmcmVlKHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lk Yyk7CisKKyAgICB2dmNjLT5udW1fb2ZfYXJyYXlzID0gMDsKKyAgICBhdl9mcmVlcCgmdnZjYy0+ YXJyYXkpOworfQorCitzdGF0aWMgaW50IHZ2Y2Nfd3JpdGUoQVZJT0NvbnRleHQgKnBiLCBWVkNE ZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICB1aW50OF90IGk7CisgICAg dWludDE2X3QgaiwgdnBzX2NvdW50ID0gMCwgc3BzX2NvdW50ID0gMCwgcHBzX2NvdW50ID0gMDsK KyAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOworICAgIC8qCisgICAgICogSXQncyB1bmNs ZWFyIGhvdyB0byBwcm9wZXJseSBjb21wdXRlIHRoZXNlIGZpZWxkcywgc28KKyAgICAgKiBsZXQn cyBhbHdheXMgc2V0IHRoZW0gdG8gdmFsdWVzIG1lYW5pbmcgJ3Vuc3BlY2lmaWVkJy4KKyAgICAg Ki8KKyAgICB2dmNjLT5hdmdfZnJhbWVfcmF0ZSAgICAgID0gMDsKKyAgICB2dmNjLT5jb25zdGFu dF9mcmFtZV9yYXRlID0gMTsKKworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAibGVu Z3RoU2l6ZU1pbnVzT25lOiAgICAgICAgICAgICAgICAgICUiUFJJdTgiXG4iLAorICAgICAgICAg ICAgdnZjYy0+bGVuZ3RoU2l6ZU1pbnVzT25lKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RS QUNFLCAgInB0bF9wcmVzZW50X2ZsYWc6ICAgICAgICAgICAgICAgICAgICAlIlBSSXU4IlxuIiwK KyAgICAgICAgICAgIHZ2Y2MtPnB0bF9wcmVzZW50X2ZsYWcpOworICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsICAib2xzX2lkeDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICUiUFJJ dTE2IlxuIiwKKyAgICAgICAgICAgIHZ2Y2MtPm9sc19pZHgpOworICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsICAibnVtX3N1YmxheWVyczogICAgICAgICAgICAgICAgICAgICAgICUiUFJJ dTgiXG4iLAorICAgICAgICAgICAgdnZjYy0+bnVtX3N1YmxheWVycyk7CisgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19UUkFDRSwgICJjb25zdGFudF9mcmFtZV9yYXRlOiAgICAgICAgICAgICAgICAg JSJQUkl1OCJcbiIsCisgICAgICAgICAgICB2dmNjLT5jb25zdGFudF9mcmFtZV9yYXRlKTsKKyAg ICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLCAgImNocm9tYV9mb3JtYXRfaWRjOiAgICAgICAg ICAgICAgICAgICAlIlBSSXU4IlxuIiwKKyAgICAgICAgICAgIHZ2Y2MtPmNocm9tYV9mb3JtYXRf aWRjKTsKKworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAiYml0X2RlcHRoX21pbnVz ODogICAgICAgICAgICAgICAgICAgICUiUFJJdTgiXG4iLAorICAgICAgICAgICAgdnZjYy0+Yml0 X2RlcHRoX21pbnVzOCk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwgICJudW1fYnl0 ZXNfY29uc3RyYWludF9pbmZvOiAgICAgICAgICAgJSJQUkl1OCJcbiIsCisgICAgICAgICAgICB2 dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyk7CisgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19UUkFDRSwgICJnZW5lcmFsX3Byb2ZpbGVfaWRjOiAgICAgICAgICAgICAgICAgJSJQUkl1 OCJcbiIsCisgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9wcm9maWxlX2lkYyk7CisgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwgICJnZW5lcmFsX3RpZXJfZmxhZzogICAgICAgICAg ICAgICAgICAgJSJQUkl1OCJcbiIsCisgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF90aWVy X2ZsYWcpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAiZ2VuZXJhbF9sZXZlbF9p ZGM6ICAgICAgICAgICAgICAgICAgICUiUFJJdTgiXG4iLAorICAgICAgICAgICAgdnZjYy0+cHRs LmdlbmVyYWxfbGV2ZWxfaWRjKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLCAgInB0 bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzogICAgICAlIlBSSXU4IlxuIiwKKyAgICAgICAg ICAgIHZ2Y2MtPnB0bC5wdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcpOworICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAicHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnOiAgICAg ICAgICUiUFJJdTgiXG4iLAorICAgICAgICAgICAgdnZjYy0+cHRsLnB0bF9tdWx0aWxheWVyX2Vu YWJsZWRfZmxhZyk7CisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29u c3RyYWludF9pbmZvOyBpKyspIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwg ICJnZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1slZF06ICAgICAgICAgICUiUFJJdTgiXG4iLAorICAg ICAgICAgICAgICAgaSwgdnZjYy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9pbmZvW2ldKTsKKyAg ICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX3N1YmxheWVycy0xOyBpKyspIHsK KyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwgICJwdGxfc3VibGF5ZXJfbGV2ZWxf cHJlc2VudF9mbGFnWyUiUFJJdTgiXTogICUiUFJJdTgiXG4iLAorICAgICAgICAgICAgICAgIGks IHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKTsKKyAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwgICJzdWJsYXllcl9sZXZlbF9pZGNbJSJQUkl1OCJd OiAlIlBSSXU4IlxuIiwKKyAgICAgICAgICAgICAgICBpLCB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2 ZWxfaWRjW2ldKTsKKyAgICB9CisKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLCAgIm51 bV9zdWJfcHJvZmlsZXM6ICAgICAgICAgICAgICAgICAgICAlIlBSSXU4IlxuIiwKKyAgICAgICAg ICAgIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7CisKKyAgICBmb3IgKGkgPSAwOyBp IDwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBpKyspIHsKKyAgICAgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19UUkFDRSwgICJnZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1slIlBSSXU4Il06 ICAgICAgICAgJSJQUkl4MzIiXG4iLAorICAgICAgICAgICAgICAgIGksIHZ2Y2MtPnB0bC5nZW5l cmFsX3N1Yl9wcm9maWxlX2lkY1tpXSk7CisgICAgfQorCisgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19UUkFDRSwgICJtYXhfcGljdHVyZV93aWR0aDogICAgICAgICAgICAgICAgICAgJSJQUkl1MTYi XG4iLAorICAgICAgICAgICAgdnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgpOworICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfVFJBQ0UsICAibWF4X3BpY3R1cmVfaGVpZ2h0OiAgICAgICAgICAgICAgICAg ICUiUFJJdTE2IlxuIiwKKyAgICAgICAgICAgIHZ2Y2MtPm1heF9waWN0dXJlX2hlaWdodCk7Cisg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwgICJhdmdfZnJhbWVfcmF0ZTogICAgICAgICAg ICAgICAgICAgICAgJSJQUkl1MTYiXG4iLAorICAgICAgICAgICAgdnZjYy0+YXZnX2ZyYW1lX3Jh dGUpOworCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwgICJudW1fb2ZfYXJyYXlzOiAg ICAgICAgICAgICAgICAgICAgICAgJSJQUkl1OCJcbiIsCisgICAgICAgICAgICB2dmNjLT5udW1f b2ZfYXJyYXlzKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsr KSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICJhcnJheV9jb21wbGV0ZW5l c3NbJSJQUkl1OCJdOiAgICAgICAgICAgICAgICUiUFJJdTgiXG4iLAorICAgICAgICAgICAgICAg IGksIHZ2Y2MtPmFycmF5W2ldLmFycmF5X2NvbXBsZXRlbmVzcyk7CisgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfVFJBQ0UsICJOQUxfdW5pdF90eXBlWyUiUFJJdTgiXTogICAgICAgICAgICAg ICAgICAgICUiUFJJdTgiXG4iLAorICAgICAgICAgICAgICAgIGksIHZ2Y2MtPmFycmF5W2ldLk5B TF91bml0X3R5cGUpOworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLCAibnVtX25h bHVzWyUiUFJJdTgiXTogICAgICAgICAgICAgICAgICAgICAgICAlIlBSSXUxNiJcbiIsCisgICAg ICAgICAgICAgICAgaSwgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzKTsKKyAgICAgICAgZm9yIChq ID0gMDsgaiA8IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsgaisrKQorICAgICAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICAgICAgIm5hbF91bml0X2xl bmd0aFslIlBSSXU4Il1bJSJQUkl1MTYiXTogICAgICAgICAgICAgICAlIlBSSXUxNiJcbiIsCisg ICAgICAgICAgICAgICAgICAgIGksIGosIHZ2Y2MtPmFycmF5W2ldLm5hbF91bml0X2xlbmd0aFtq XSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXZSBuZWVkIGF0IGxlYXN0IG9uZSBvZiBlYWNo OiBWUFMgYW5kIFNQUy4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29m X2FycmF5czsgaSsrKQorICAgICAgICBzd2l0Y2ggKHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5 cGUpIHsKKyAgICAgICAgY2FzZSBWVkNfVlBTX05VVDoKKyAgICAgICAgICAgIHZwc19jb3VudCAr PSB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg Y2FzZSBWVkNfU1BTX05VVDoKKyAgICAgICAgICAgIHNwc19jb3VudCArPSB2dmNjLT5hcnJheVtp XS5udW1fbmFsdXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWVkNfUFBTX05V VDoKKyAgICAgICAgICAgIHBwc19jb3VudCArPSB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXM7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisKKyAgICBpZiAoIXNwc19jb3VudCB8fCBzcHNfY291bnQgPiBWVkNfTUFYX1NQ U19DT1VOVCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICAvKiBi aXQoNSkgcmVzZXJ2ZWQgPSDigJgxMTExMeKAmWI7CisgICAgICAgdW5zaWduZWQgaW50ICgyKSBM ZW5ndGhTaXplTWludXNPbmUKKyAgICAgICB1bnNpZ25lZCBpbnQgKDEpIHB0bF9wcmVzZW50X2Zs YWcgKi8KKyAgICBhdmlvX3c4KHBiLCB2dmNjLT5sZW5ndGhTaXplTWludXNPbmUgPDwgMSB8IHZ2 Y2MtPnB0bF9wcmVzZW50X2ZsYWcgfCAweGY4KTsKKworICAgIGlmKHZ2Y2MtPnB0bF9wcmVzZW50 X2ZsYWcpIHsKKyAgICAgICAgLyoKKyAgICAgICAgKiB1bnNpZ25lZCBpbnQoOSkgb2xzX2lkeDsK KyAgICAgICAgKiB1bnNpZ25lZCBpbnQoMykgbnVtX3N1YmxheWVyczsKKyAgICAgICAgKiB1bnNp Z25lZCBpbnQoMikgY29uc3RhbnRfZnJhbWVfcmF0ZTsKKyAgICAgICAgKiB1bnNpZ25lZCBpbnQo MikgY2hyb21hX2Zvcm1hdF9pZGM7ICAgICAqLworICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2Mt Pm9sc19pZHggPDwgNyB8IHZ2Y2MtPm51bV9zdWJsYXllcnMgPDwgNCB8IHZ2Y2MtPmNvbnN0YW50 X2ZyYW1lX3JhdGUgPDwgMiB8IHZ2Y2MtPmNocm9tYV9mb3JtYXRfaWRjKTsKKworICAgICAgICAv KiB1bnNpZ25lZCBpbnQoMykgYml0X2RlcHRoX21pbnVzODsKKyAgICAgICAgICBiaXQoNSkgcmVz ZXJ2ZWQgPSDigJgxMTExMeKAmWI7Ki8KKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+Yml0X2Rl cHRoX21pbnVzOCA8PCA1IHwgMHgxZik7CisKKyAgICAgICAgLy9WVkNQVExSZWNvcmQKKworICAg ICAgICAvKiBiaXQoMikgcmVzZXJ2ZWQgPSDigJgwMOKAmWI7CisgICAgICAgICAgdW5zaWduZWQg aW50ICg2KSBudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvICovCisgICAgICAgIGF2aW9fdzgocGIs IHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvICYgMHgzZik7CisKKyAgICAgICAg LyogdW5zaWduZWQgaW50ICg3KSBnZW5lcmFsX3Byb2ZpbGVfaWRjCisgICAgICAgICAgdW5zaWdu ZWQgaW50ICgxKSBnZW5lcmFsX3RpZXJfZmxhZyAqLworICAgICAgICBhdmlvX3c4KHBiLCB2dmNj LT5wdGwuZ2VuZXJhbF9wcm9maWxlX2lkYyA8PCAxIHwgdnZjYy0+cHRsLmdlbmVyYWxfdGllcl9m bGFnKTsKKworICAgICAgICAvKiB1bnNpZ25lZCBpbnQgKDgpIGdlbmVyYWxfbGV2ZWxfaWRjICov CisgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYyk7CisKKyAg ICAgICAgLyoKKyAgICAgICAgKiB1bnNpZ25lZCBpbnQgKDEpIHB0bF9mcmFtZV9vbmx5X2NvbnN0 cmFpbnRfZmxhZworICAgICAgICAqIHVuc2lnbmVkIGludCAoMSkgcHRsX211bHRpbGF5ZXJfZW5h YmxlZF9mbGFnCisgICAgICAgICogdW5zaWduZWQgaW50ICg4Km51bV9ieXRlc19jb25zdHJhaW50 X2luZm8gLTIpIGdlbmVyYWxfY29uc3RyYWludF9pbmZvICovCisgICAgICAgIGJ1ZiA9ICh1bnNp Z25lZCBjaGFyICopIG1hbGxvYyhzaXplb2YodW5zaWduZWQgY2hhcikgKiB2dmNjLT5wdGwubnVt X2J5dGVzX2NvbnN0cmFpbnRfaW5mbyk7CisgICAgICAgICpidWYgPSB2dmNjLT5wdGwucHRsX2Zy YW1lX29ubHlfY29uc3RyYWludF9mbGFnIDw8IHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWlu dF9pbmZvKjgtMSB8IHZ2Y2MtPnB0bC5wdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWcgPDwgdnZj Yy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8qOC0yIHwgKnZ2Y2MtPnB0bC5nZW5lcmFs X2NvbnN0cmFpbnRfaW5mbyA+PiAyOworICAgICAgICBhdmlvX3dyaXRlKHBiLCBidWYsIHZ2Y2Mt PnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvKTsKKyAgICAgICAgZnJlZShidWYpOworCisg ICAgICAgIGlmKHZ2Y2MtPm51bV9zdWJsYXllcnMgPiAxKSB7CisgICAgICAgICAgdWludDhfdCBw dGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFncyA9IDA7CisgICAgICAgICAgZm9yKGludCBp ID0gdnZjYy0+bnVtX3N1YmxheWVycyAtMjsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIHB0 bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdzID0gKHB0bF9zdWJsYXllcl9sZXZlbF9wcmVz ZW50X2ZsYWdzIDw8IDEgfCB2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxh Z1tpXSk7CisgICAgICAgICAgfQorICAgICAgICAgIGF2aW9fdzgocGIsIHB0bF9zdWJsYXllcl9s ZXZlbF9wcmVzZW50X2ZsYWdzKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvcihpbnQgaSA9IHZ2 Y2MtPm51bV9zdWJsYXllcnMgLTI7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgaWYodnZjYy0+ cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0pCisgICAgICAgICAgICBhdmlv X3c4KHBiLCB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldKTsKKyAgICAgICAgfQorCisg ICAgICAgIC8qIHVuc2lnbmVkIGludCg4KSBudW1fc3ViX3Byb2ZpbGVzOyAqLworICAgICAgICBh dmlvX3c4KHBiLCB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpOworCisgICAgICAgIGZv cihpbnQgaiA9IDA7IGogPCB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXM7IGorKykgewor ICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMzIpIGdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2pdOyAq LworICAgICAgICBhdmlvX3diMzIocGIsIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lk Y1tqXSk7CisgICAgICAgIH0KKworICAgICAgICAvL0VuZCBvZiBWdmNQVExSZWNvcmQKKworICAg ICAgICAvKgorICAgICAgICAqIHVuc2lnbmVkIGludCgxNikgbWF4X3BpY3R1cmVfd2lkdGg7Ki8K KyAgICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5tYXhfcGljdHVyZV93aWR0aCk7CisKKyAgICAg ICAgLyoKKyAgICAgICAgKiB1bnNpZ25lZCBpbnQoMTYpIG1heF9waWN0dXJlX2hlaWdodDsqLwor ICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPm1heF9waWN0dXJlX2hlaWdodCk7CisKKyAgICAg ICAgLyoKKyAgICAgICAgKiB1bnNpZ25lZCBpbnQoMTYpIGF2Z19mcmFtZV9yYXRlOyAqLworICAg ICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPmF2Z19mcmFtZV9yYXRlKTsKKyAgICB9CisKKyAgICAv KiB1bnNpZ25lZCBpbnQoOCkgbnVtX29mX2FycmF5czsgKi8KKyAgICBhdmlvX3c4KHBiLCB2dmNj LT5udW1fb2ZfYXJyYXlzKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5udW1fb2ZfYXJy YXlzOyBpKyspIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogYml0KDEpIGFycmF5X2NvbXBsZXRl bmVzczsKKyAgICAgICAgICogdW5zaWduZWQgaW50KDIpIHJlc2VydmVkID0gMDsKKyAgICAgICAg ICogdW5zaWduZWQgaW50KDUpIE5BTF91bml0X3R5cGU7CisgICAgICAgICAqLworICAgICAgYXZp b193OChwYiwgdnZjYy0+YXJyYXlbaV0uYXJyYXlfY29tcGxldGVuZXNzIDw8IDcgfAorICAgICAg ICAgICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5OQUxfdW5pdF90eXBlICYgMHgxZik7CisgICAg ICAgIC8qIHVuc2lnbmVkIGludCgxNikgbnVtX25hbHVzOyAqLworICAgICAgaWYodnZjYy0+YXJy YXlbaV0uTkFMX3VuaXRfdHlwZSAhPSBWVkNfRENJX05VVCAmJiB2dmNjLT5hcnJheVtpXS5OQUxf dW5pdF90eXBlICE9IFZWQ19PUElfTlVUKQorICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPmFy cmF5W2ldLm51bV9uYWx1cyk7CisgICAgICBmb3IgKGogPSAwOyBqIDwgdnZjYy0+YXJyYXlbaV0u bnVtX25hbHVzOyBqKyspIHsKKyAgICAgICAgLyogdW5zaWduZWQgaW50KDE2KSBuYWxfdW5pdF9s ZW5ndGg7ICovCisgICAgICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRf bGVuZ3RoW2pdKTsKKworICAgICAgICAvKiBiaXQoOCpuYWxfdW5pdF9sZW5ndGgpIG5hbF91bml0 OyAqLworICAgICAgICBhdmlvX3dyaXRlKHBiLCB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdFtqXSwg dnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVuZ3RoW2pdKTsKKyAgICAgIH0KKyAgICB9CisKKyAg ICByZXR1cm4gMDsKK30KKworaW50IGZmX3Z2Y19hbm5leGIybXA0KEFWSU9Db250ZXh0ICpwYiwg Y29uc3QgdWludDhfdCAqYnVmX2luLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwg aW50IGZpbHRlcl9wcywgaW50ICpwc19jb3VudCkKK3sKKyAgICBpbnQgbnVtX3BzID0gMCwgcmV0 ID0gMDsKKyAgICB1aW50OF90ICpidWYsICplbmQsICpzdGFydCA9IE5VTEw7CisKKyAgICBpZiAo IWZpbHRlcl9wcykgeworICAgICAgICByZXQgPSBmZl9hdmNfcGFyc2VfbmFsX3VuaXRzKHBiLCBi dWZfaW4sIHNpemUpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICByZXQgPSBmZl9h dmNfcGFyc2VfbmFsX3VuaXRzX2J1ZihidWZfaW4sICZzdGFydCwgJnNpemUpOworICAgIGlmIChy ZXQgPCAwKQorICAgICAgICBnb3RvIGVuZDsKKworICAgIHJldCA9IDA7CisgICAgYnVmID0gc3Rh cnQ7CisgICAgZW5kID0gc3RhcnQgKyBzaXplOworCisgICAgd2hpbGUgKGVuZCAtIGJ1ZiA+IDQp IHsKKyAgICAgICAgdWludDMyX3QgbGVuID0gRkZNSU4oQVZfUkIzMihidWYpLCBlbmQgLSBidWYg LSA0KTsKKyAgICAgICAgdWludDhfdCB0eXBlID0gKGJ1Zls1XSA+PiAzKTsKKworICAgICAgICBi dWYgKz0gNDsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBWVkNfVlBT X05VVDoKKyAgICAgICAgY2FzZSBWVkNfU1BTX05VVDoKKyAgICAgICAgY2FzZSBWVkNfUFBTX05V VDoKKyAgICAgICAgICAgIG51bV9wcysrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgICByZXQgKz0gNCArIGxlbjsKKyAgICAgICAgICAgIGF2aW9fd2Iz MihwYiwgbGVuKTsKKyAgICAgICAgICAgIGF2aW9fd3JpdGUocGIsIGJ1ZiwgbGVuKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYnVmICs9IGxlbjsKKyAgICB9CisK K2VuZDoKKyAgICBhdl9mcmVlKHN0YXJ0KTsKKyAgICBpZiAocHNfY291bnQpCisgICAgICAgICpw c19jb3VudCA9IG51bV9wczsKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgZmZfdnZjX2FubmV4 YjJtcDRfYnVmKGNvbnN0IHVpbnQ4X3QgKmJ1Zl9pbiwgdWludDhfdCAqKmJ1Zl9vdXQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnNpemUsIGludCBmaWx0ZXJfcHMsIGludCAqcHNf Y291bnQpCit7CisgICAgQVZJT0NvbnRleHQgKnBiOworICAgIGludCByZXQ7CisKKyAgICByZXQg PSBhdmlvX29wZW5fZHluX2J1ZigmcGIpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1 cm4gcmV0OworCisgICAgcmV0ICAgPSBmZl92dmNfYW5uZXhiMm1wNChwYiwgYnVmX2luLCAqc2l6 ZSwgZmlsdGVyX3BzLCBwc19jb3VudCk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgZmZp b19mcmVlX2R5bl9idWYoJnBiKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAq c2l6ZSA9IGF2aW9fY2xvc2VfZHluX2J1ZihwYiwgYnVmX291dCk7CisKKyAgICByZXR1cm4gMDsK K30KKworaW50IGZmX2lzb21fd3JpdGVfdnZjYyhBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4 X3QgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLCBpbnQgcHNfYXJyYXlf Y29tcGxldGVuZXNzKQoreworICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIHZ2Y2M7 CisgICAgdWludDhfdCAqYnVmLCAqZW5kLCAqc3RhcnQ7CisgICAgaW50IHJldDsKKworICAgIGlm IChzaXplIDwgNikgeworICAgICAgICAvKiBXZSBjYW4ndCB3cml0ZSBhIHZhbGlkIHZ2Y2MgZnJv bSB0aGUgcHJvdmlkZWQgZGF0YSAqLworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKKyAgICB9IGVsc2UgaWYgKCpkYXRhID09IDEpIHsKKyAgICAgICAgLyogRGF0YSBpcyBhbHJl YWR5IHZ2Y2MtZm9ybWF0dGVkICovCisgICAgICAgIGF2aW9fd3JpdGUocGIsIGRhdGEsIHNpemUp OworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKCEoQVZfUkIyNChkYXRhKSA9PSAx IHx8IEFWX1JCMzIoZGF0YSkgPT0gMSkpIHsKKyAgICAgICAgLyogTm90IGEgdmFsaWQgQW5uZXgg QiBzdGFydCBjb2RlIHByZWZpeCAqLworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKKyAgICB9CisKKyAgICByZXQgPSBmZl9hdmNfcGFyc2VfbmFsX3VuaXRzX2J1ZihkYXRhLCAm c3RhcnQsICZzaXplKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKwor ICAgIHZ2Y2NfaW5pdCgmdnZjYyk7CisKKyAgICBidWYgPSBzdGFydDsKKyAgICBlbmQgPSBzdGFy dCArIHNpemU7CisKKyAgICB3aGlsZSAoZW5kIC0gYnVmID4gNCkgeworICAgICAgICB1aW50MzJf dCBsZW4gPSBGRk1JTihBVl9SQjMyKGJ1ZiksIGVuZCAtIGJ1ZiAtIDQpOworICAgICAgICB1aW50 OF90IHR5cGUgPSAoYnVmWzVdID4+IDMpOworCisgICAgICAgIGJ1ZiArPSA0OworCisgICAgICAg IHN3aXRjaCAodHlwZSkgeworCWNhc2UgVlZDX09QSV9OVVQ6CisgICAgICAgIGNhc2UgVlZDX1ZQ U19OVVQ6CisgICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6CisgICAgICAgIGNhc2UgVlZDX1BQU19O VVQ6CisgICAgICAgIGNhc2UgVlZDX1BSRUZJWF9TRUlfTlVUOgorICAgICAgICBjYXNlIFZWQ19T VUZGSVhfU0VJX05VVDoKKyAgICAgICAgICAgIHJldCA9IHZ2Y2NfYWRkX25hbF91bml0KGJ1Ziwg bGVuLCBwc19hcnJheV9jb21wbGV0ZW5lc3MsICZ2dmNjKTsKKyAgICAgICAgICAgIGlmIChyZXQg PCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJ1 ZiArPSBsZW47CisgICAgfQorCisgICAgcmV0ID0gdnZjY193cml0ZShwYiwgJnZ2Y2MpOworCitl bmQ6CisgICAgdnZjY19jbG9zZSgmdnZjYyk7CisgICAgYXZfZnJlZShzdGFydCk7CisgICAgcmV0 dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Z2Yy5oIGIvbGliYXZmb3JtYXQv dnZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uY2RmNGY2ZDNmNQot LS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L3Z2Yy5oCkBAIC0wLDAgKzEsOTkgQEAKKy8q CisgKiBWVkMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgbXV4ZXJzCisgKgorICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor ICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQorICovCisKKy8qKgorICogQGZpbGUKKyAqIGludGVybmFsIGhlYWRlciBm b3IgVlZDIChkZSltdXhlciB1dGlsaXRpZXMKKyAqLworCisjaWZuZGVmIEFWRk9STUFUX1ZWQ19I CisjZGVmaW5lIEFWRk9STUFUX1ZWQ19ICisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRl ICJhdmlvLmgiCisKKy8qKgorICogV3JpdGVzIEFubmV4IEIgZm9ybWF0dGVkIFZWQyBOQUwgdW5p dHMgdG8gdGhlIHByb3ZpZGVkIEFWSU9Db250ZXh0LgorICoKKyAqIFRoZSBOQUwgdW5pdHMgYXJl IGNvbnZlcnRlZCB0byBhbiBNUDQtY29tcGF0aWJsZSBmb3JtYXQgKHN0YXJ0IGNvZGUgcHJlZml4 ZXMKKyAqIGFyZSByZXBsYWNlZCBieSA0LWJ5dGUgc2l6ZSBmaWVsZHMsIGFzIHBlciBJU08vSUVD IDE0NDk2LTE1KS4KKyAqCisgKiBJZiBmaWx0ZXJfcHMgaXMgbm9uLXplcm8sIGFueSBWVkMgcGFy YW1ldGVyIHNldHMgZm91bmQgaW4gdGhlIGlucHV0IHdpbGwgYmUKKyAqIGRpc2NhcmRlZCwgYW5k ICpwc19jb3VudCB3aWxsIGJlIHNldCB0byB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZCBQUyBOQUwg dW5pdHMuCisgKgorICogQHBhcmFtIHBiIGFkZHJlc3Mgb2YgdGhlIEFWSU9Db250ZXh0IHdoZXJl IHRoZSBkYXRhIHNoYWxsIGJlIHdyaXR0ZW4KKyAqIEBwYXJhbSBidWZfaW4gYWRkcmVzcyBvZiB0 aGUgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIEBwYXJhbSBzaXplIHNpemUgKGlu IGJ5dGVzKSBvZiB0aGUgaW5wdXQgYnVmZmVyCisgKiBAcGFyYW0gZmlsdGVyX3BzIHdoZXRoZXIg dG8gd3JpdGUgcGFyYW1ldGVyIHNldCBOQUwgdW5pdHMgdG8gdGhlIG91dHB1dCAoMCkKKyAqICAg ICAgICBvciB0byBkaXNjYXJkIHRoZW0gKG5vbi16ZXJvKQorICogQHBhcmFtIHBzX2NvdW50IGFk ZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIHdoZXJlIHRoZSBudW1iZXIgb2YgZGlzY2FyZGVkCisgKiAg ICAgICAgcGFyYW1ldGVyIHNldCBOQUwgdW5pdHMgc2hhbGwgYmUgd3JpdHRlbiwgbWF5IGJlIE5V TEwKKyAqIEByZXR1cm4gdGhlIGFtb3VudCAoaW4gYnl0ZXMpIG9mIGRhdGEgd3JpdHRlbiBpbiBj YXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUKKyAqICAgICAgICAgdmFsdWUgY29ycmVzcG9uZGlu ZyB0byBhbiBBVkVSUk9SIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCisgKi8KK2ludCBmZl92dmNf YW5uZXhiMm1wNChBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4X3QgKmJ1Zl9pbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgaW50IHNpemUsIGludCBmaWx0ZXJfcHMsIGludCAqcHNfY291bnQp OworCisvKioKKyAqIFdyaXRlcyBBbm5leCBCIGZvcm1hdHRlZCBWVkMgTkFMIHVuaXRzIHRvIGEg ZGF0YSBidWZmZXIuCisgKgorICogVGhlIE5BTCB1bml0cyBhcmUgY29udmVydGVkIHRvIGFuIE1Q NC1jb21wYXRpYmxlIGZvcm1hdCAoc3RhcnQgY29kZSBwcmVmaXhlcworICogYXJlIHJlcGxhY2Vk IGJ5IDQtYnl0ZSBzaXplIGZpZWxkcywgYXMgcGVyIElTTy9JRUMgMTQ0OTYtMTUpLgorICoKKyAq IElmIGZpbHRlcl9wcyBpcyBub24temVybywgYW55IFZWQyBwYXJhbWV0ZXIgc2V0cyBmb3VuZCBp biB0aGUgaW5wdXQgd2lsbCBiZQorICogZGlzY2FyZGVkLCBhbmQgKnBzX2NvdW50IHdpbGwgYmUg c2V0IHRvIHRoZSBudW1iZXIgb2YgZGlzY2FyZGVkIFBTIE5BTCB1bml0cy4KKyAqCisgKiBPbiBz dWNjZXNzLCAqc2l6ZSBob2xkcyB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBvdXRwdXQgZGF0 YSBidWZmZXIuCisgKgorICogQHBhcmFtIGJ1Zl9pbiBhZGRyZXNzIG9mIHRoZSBidWZmZXIgaG9s ZGluZyB0aGUgaW5wdXQgZGF0YQorICogQHBhcmFtIHNpemUgYWRkcmVzcyBvZiB0aGUgdmFyaWFi bGUgaG9sZGluZyB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBpbnB1dAorICogICAgICAgIGJ1 ZmZlciAob24gaW5wdXQpIGFuZCBvZiB0aGUgb3V0cHV0IGJ1ZmZlciAob24gc3VjY2VzcykKKyAq IEBwYXJhbSBidWZfb3V0IG9uIHN1Y2Nlc3MsIGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIGhvbGRp bmcgdGhlIGFkZHJlc3Mgb2YKKyAqICAgICAgICB0aGUgb3V0cHV0IGJ1ZmZlcgorICogQHBhcmFt IGZpbHRlcl9wcyB3aGV0aGVyIHRvIHdyaXRlIHBhcmFtZXRlciBzZXQgTkFMIHVuaXRzIHRvIHRo ZSBvdXRwdXQgKDApCisgKiAgICAgICAgb3IgdG8gZGlzY2FyZCB0aGVtIChub24temVybykKKyAq IEBwYXJhbSBwc19jb3VudCBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSB3aGVyZSB0aGUgbnVtYmVy IG9mIGRpc2NhcmRlZAorICogICAgICAgIHBhcmFtZXRlciBzZXQgTkFMIHVuaXRzIHNoYWxsIGJl IHdyaXR0ZW4sIG1heSBiZSBOVUxMCisgKiBAcmV0dXJuIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCBh IG5lZ2F0aXZlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4gQVZFUlJPUgorICogICAgICAgICBj b2RlIGluIGNhc2Ugb2YgZmFpbHVyZQorICogQG5vdGUgKmJ1Zl9vdXQgd2lsbCBiZSB0cmVhdGVk IGFzIHVuaW5pdGlhbGl6ZWQgb24gaW5wdXQgYW5kIHdvbid0IGJlIGZyZWVkLgorICovCitpbnQg ZmZfdnZjX2FubmV4YjJtcDRfYnVmKGNvbnN0IHVpbnQ4X3QgKmJ1Zl9pbiwgdWludDhfdCAqKmJ1 Zl9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnNpemUsIGludCBmaWx0ZXJf cHMsIGludCAqcHNfY291bnQpOworCisvKioKKyAqIFdyaXRlcyBWVkMgZXh0cmFkYXRhIChwYXJh bWV0ZXIgc2V0cywgZGVjbGFyYXRpdmUgU0VJIE5BTCB1bml0cykgdG8gdGhlCisgKiBwcm92aWRl ZCBBVklPQ29udGV4dC4KKyAqCisgKiBJZiB0aGUgZXh0cmFkYXRhIGlzIEFubmV4IEIgZm9ybWF0 LCBpdCBnZXRzIGNvbnZlcnRlZCB0byB2dmNDIGZvcm1hdCBiZWZvcmUKKyAqIHdyaXRpbmcuCisg KgorICogQHBhcmFtIHBiIGFkZHJlc3Mgb2YgdGhlIEFWSU9Db250ZXh0IHdoZXJlIHRoZSB2dmND IHNoYWxsIGJlIHdyaXR0ZW4KKyAqIEBwYXJhbSBkYXRhIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBo b2xkaW5nIHRoZSBkYXRhIG5lZWRlZCB0byB3cml0ZSB0aGUgdnZjQworICogQHBhcmFtIHNpemUg c2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBkYXRhIGJ1ZmZlcgorICogQHBhcmFtIHBzX2FycmF5X2Nv bXBsZXRlbmVzcyB3aGV0aGVyIGFsbCBwYXJhbWV0ZXIgc2V0cyBhcmUgaW4gdGhlIHZ2Y0MgKDEp CisgKiAgICAgICAgb3IgdGhlcmUgbWF5IGJlIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHNldHMgaW4g dGhlIGJpdHN0cmVhbSAoMCkKKyAqIEByZXR1cm4gPj0wIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBu ZWdhdGl2ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIEFWRVJST1IKKyAqICAgICAgICAgY29k ZSBpbiBjYXNlIG9mIGZhaWx1cmUKKyAqLworaW50IGZmX2lzb21fd3JpdGVfdnZjYyhBVklPQ29u dGV4dCAqcGIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIGlu dCBzaXplLCBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNzKTsKKworI2VuZGlmIC8qIEFWRk9STUFU X1ZWQ19IICovCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC92dmNkZWMuYyBiL2xpYmF2Zm9ybWF0 L3Z2Y2RlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjMwNGY5MDA5 NjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC92dmNkZWMuYwpAQCAtMCwwICsxLDYx IEBACisvKgorICogUkFXIFZWQyB2aWRlbyBkZW11eGVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAg TnVvIE1pIDxudW9taTIwMjFAZ21haWwuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBl ZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1w ZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIElu Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMw MSBVU0EKKyAqLworCisjaW5jbHVkZSAibGliYXZjb2RlYy92dmMuaCIKKworI2luY2x1ZGUgImF2 Zm9ybWF0LmgiCisjaW5jbHVkZSAicmF3ZGVjLmgiCisKK3N0YXRpYyBpbnQgdnZjX3Byb2JlKGNv bnN0IEFWUHJvYmVEYXRhICpwKQoreworICAgIHVpbnQzMl90IGNvZGUgPSAtMTsKKyAgICBpbnQg c3BzID0gMCwgcHBzID0gMCwgaXJhcCA9IDA7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAw OyBpIDwgcC0+YnVmX3NpemUgLSAxOyBpKyspIHsKKyAgICAgICAgY29kZSA9IChjb2RlIDw8IDgp ICsgcC0+YnVmW2ldOworICAgICAgICBpZiAoKGNvZGUgJiAweGZmZmZmZjAwKSA9PSAweDEwMCkg eworICAgICAgICAgICAgdWludDhfdCBuYWwyID0gcC0+YnVmW2kgKyAxXTsKKyAgICAgICAgICAg IGludCB0eXBlID0gKG5hbDIgJiAweEY4KSA+PiAzOworCisgICAgICAgICAgICBpZiAoY29kZSAm IDB4ODApIC8vIGZvcmJpZGRlbl96ZXJvX2JpdAorICAgICAgICAgICAgICAgIHJldHVybiAwOwor CisgICAgICAgICAgICBpZiAoKG5hbDIgJiAweDcpID09IDApIC8vIG51aF90ZW1wb3JhbF9pZF9w bHVzMQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBzd2l0Y2ggKHR5 cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6ICAgICAgIHNwcysrOyAgYnJlYWs7 CisgICAgICAgICAgICBjYXNlIFZWQ19QUFNfTlVUOiAgICAgICBwcHMrKzsgIGJyZWFrOworICAg ICAgICAgICAgY2FzZSBWVkNfSURSX05fTFA6CisgICAgICAgICAgICBjYXNlIFZWQ19JRFJfV19S QURMOgorICAgICAgICAgICAgY2FzZSBWVkNfQ1JBX05VVDoKKyAgICAgICAgICAgIGNhc2UgVlZD X0dEUl9OVVQ6ICAgICAgIGlyYXArKzsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICB9CisKKyAgICBpZiAoc3BzICYmIHBwcyAmJiBpcmFwKQorICAgICAgICByZXR1cm4gQVZQ Uk9CRV9TQ09SRV9FWFRFTlNJT04gKyAxOyAvLyAxIG1vcmUgdGhhbiAubXBnCisgICAgcmV0dXJu IDA7Cit9CisKK0ZGX0RFRl9SQVdWSURFT19ERU1VWEVSKHZ2YywgInJhdyBWVkMgdmlkZW8iLCB2 dmNfcHJvYmUsICJoMjY2LDI2Nix2dmMiLCBBVl9DT0RFQ19JRF9WVkMpCi0tIAoyLjI1LjEKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZl bCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3Jn L21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGlu ayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1 YmplY3QgInVuc3Vic2NyaWJlIi4K