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 5B05C44EFD for ; Sat, 29 Apr 2023 05:45:28 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9E98B68BEF9; Sat, 29 Apr 2023 08:45:24 +0300 (EEST) Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4279668BEE0 for ; Sat, 29 Apr 2023 08:45:17 +0300 (EEST) Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-63b4a64c72bso578021b3a.0 for ; Fri, 28 Apr 2023 22:45:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=superfashi-com.20221208.gappssmtp.com; s=20221208; t=1682747116; x=1685339116; 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=Qn78Zx6vgeHZuY8/dkCt71/wNGgZS6bhfKu/oIIceMs=; b=w6KRYQCHYXIRJGFYnjN55G0IInvpKnnfn0Q/BCS7iRcIOMYBJWatX0Cu7t9aevi6sh vuC8XAk+31kG5IUQ70ZyKblShOMS9LdtkIotyXvYoydJp+SL817eejBIeSDWZk1+vHqg r7ihjg2DerJUTm1rPRnKNaPV2jFVNaupqTMbjd69alsd53jycWCNZtgCLJUS1lIXHf0c hklzBWAnu4hBOQwuNa/nAkhfkIkXiREQw8Y2uLsd8fLaIAIJYkjAhhql9qjJ+zag4BEO Nyfnvcig1jZaOOWGmZH3z21GLI0oWQutagg9WulV/G4jfwmg04UCAvvIgJ9OyFBEelzy sVFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682747116; x=1685339116; 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=Qn78Zx6vgeHZuY8/dkCt71/wNGgZS6bhfKu/oIIceMs=; b=epxBm4B1KmefALR1nwmmQtzThYSWYcPGRbf21Dzk6//d5EdOjB5O8iM0trhvv0QRh/ XKx66CPikkPXk/S/al8EpNf6IJs4W9DsP6xLizKVV4hMxpk+dEgo7iXVZ0EioO3JcGC4 BpJgaaV55EPKtpYEy4f2Xbtxf24lZuBB0dCi1F/FRRbrBUHDRTDleMFBVxTPLqafJuGH BzZi/RxCwJd2lF+ZXnHxpvoJu+3AiHBv3VCbtxyOyasLGfbpsheBCi6YfS3SgseWtFBE ldnoYFDJf4xdHBTHH7Ofl/7TYQ7nCHKPrdoxUYdRGf0T7j6PzBOTgR7eYCFfmLZbWfuM VaBQ== X-Gm-Message-State: AC+VfDyTwUZXH9/jNuVu3tYvev2p0j0cSGKPEWoRHgmZOwNHTU/oKgKV QGOa6+ITNxF9jjSIVbItUukm3o7leLvOahob02c= X-Google-Smtp-Source: ACHHUZ4VPY6o9x+R/Osl/vHSkMlcaZjZXw8RKYYntCngzT+FvdBrdYnUJ2bOj+A3lo07/QyoKqkXPw== X-Received: by 2002:a05:6a00:1ac9:b0:641:558:8e2e with SMTP id f9-20020a056a001ac900b0064105588e2emr10758504pfv.15.1682747114819; Fri, 28 Apr 2023 22:45:14 -0700 (PDT) Received: from localhost.localdomain ([2404:7a80:800:5e00:61c0:c7fd:4d76:8aca]) by smtp.gmail.com with ESMTPSA id f195-20020a6238cc000000b0063b8428b0d8sm15993842pfa.152.2023.04.28.22.45.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 22:45:14 -0700 (PDT) From: SuperFashi To: ffmpeg-devel@ffmpeg.org Date: Sat, 29 Apr 2023 14:44:23 +0900 Message-Id: <20230429054423.4404-1-admin@superfashi.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230428173128.21074-1-admin@superfashi.com> References: <20230428173128.21074-1-admin@superfashi.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avformat: add MMTP parser and MMT/TLV demuxer 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: SuperFashi 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: djAgLT4gdjE6IFJlZmFjdG9yIHVzaW5nIEdldEJ5dGVDb250ZXh0OyBGaXggY29tcGlsZSBlcnJv ci4KClRoaXMgcGF0Y2ggYWRkcyBhbiBNUEVHIE1lZGlhIFRyYW5zcG9ydCBQcm90b2NvbCAoTU1U UCkgcGFyc2VyLCBhcyBkZWZpbmVkIGluIElTTy9JRUMgMjMwMDgtMSwgYW5kIGFuIE1NVCBwcm90 b2NvbCBvdmVyIFRMViBwYWNrZXRzIChNTVQvVExWKSBkZW11eGVyLCBhcyBkZWZpbmVkIGluIEFS SUIgU1RELUIzMi4gQ3VycmVudGx5LCBpdCBzdXBwb3J0cyBIRVZDLCBBQUMgTEFUTSwgYW5kIEFS SUItVFRNTCBkZW11eGluZy4KClNpbmNlIE1NVFAgaXMgZGVzaWduZWQgdG8gdHJhbnNtaXQgb3Zl ciBJUCwgdGhlcmUgaXMgbm8gc2l6ZSBpbmZvcm1hdGlvbiB3aXRoaW4gZWFjaCBNTVRQIHBhY2tl dCwgYW5kIHRoZXJlIGlzIG5vIGZpbGVzeXN0ZW0gZm9ybWF0IGRlZmluZWQgYWxvbmdzaWRlIHRo ZSBwcm90b2NvbC4gT25lIGluZHVzdHJpYWwgc29sdXRpb24gaXMgYSBzaW1wbGUgY29udGFpbmVy IGZvcm1hdCB1c2luZyB0eXBl4oCTbGVuZ3Ro4oCTdmFsdWUgcGFja2V0cywgd2hpY2ggaXMgZGVm aW5lZCBpbiBBUklCIFNURC1CMzIuCgpBbm90aGVyIGtub3duIGNvbnRhaW5lciBmb3JtYXQgZm9y IE1NVFAgaXMgdXNpbmcgcGFja2V0IGNhcHR1cmUgKHBjYXApIGZpbGVzIHdoaWNoIHJlY29yZHMg bmV0d29yayBwYWNrZXRzLiBUaGlzIHBhdGNoIGRvZXMgbm90IGluY2x1ZGUgdGhlIGRlbXV4ZXIg Zm9yIHRoaXMgY29udGFpbmVyIGZvcm1hdC4KClNpZ25lZC1vZmYtYnk6IFN1cGVyRmFzaGkgPGFk bWluQHN1cGVyZmFzaGkuY29tPgotLS0KIENoYW5nZWxvZyAgICAgICAgICAgICAgICB8ICAgIDEg KwogZG9jL2RlbXV4ZXJzLnRleGkgICAgICAgIHwgICAgNCArCiBsaWJhdmZvcm1hdC9NYWtlZmls ZSAgICAgfCAgICAxICsKIGxpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyB8ICAgIDEgKwogbGliYXZm b3JtYXQvbW10cC5jICAgICAgIHwgMTM3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogbGliYXZmb3JtYXQvbW10cC5oICAgICAgIHwgICA2MSArKwogbGliYXZmb3JtYXQv bW10dGx2LmMgICAgIHwgIDMyNCArKysrKysrKysKIGxpYmF2Zm9ybWF0L3ZlcnNpb24uaCAgICB8 ICAgIDIgKy0KIDggZmlsZXMgY2hhbmdlZCwgMTc2OCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9u KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvbW10cC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgbGliYXZmb3JtYXQvbW10cC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQv bW10dGx2LmMKCmRpZmYgLS1naXQgYS9DaGFuZ2Vsb2cgYi9DaGFuZ2Vsb2cKaW5kZXggYjZmNjY4 MjkwNC4uMjQ4M2ZkZDU0NyAxMDA2NDQKLS0tIGEvQ2hhbmdlbG9nCisrKyBiL0NoYW5nZWxvZwpA QCAtNiw2ICs2LDcgQEAgdmVyc2lvbiA8bmV4dD46CiAtIFBsYXlkYXRlIHZpZGVvIGRlY29kZXIg YW5kIGRlbXV4ZXIKIC0gRXh0ZW5kIFZBQVBJIHN1cHBvcnQgZm9yIGxpYnZhLXdpbjMyIG9uIFdp bmRvd3MKIC0gYWZpcmVxc3JjIGF1ZGlvIHNvdXJjZSBmaWx0ZXIKKy0gTU1UUCBwYXJzZXIgYW5k IE1NVC9UTFYgZGVtdXhlcgogCiB2ZXJzaW9uIDYuMDoKIC0gUmFkaWFuY2UgSERSIGltYWdlIHN1 cHBvcnQKZGlmZiAtLWdpdCBhL2RvYy9kZW11eGVycy50ZXhpIGIvZG9jL2RlbXV4ZXJzLnRleGkK aW5kZXggMmQzM2I0N2E1Ni4uNTZhYWIyNTFiMiAxMDA2NDQKLS0tIGEvZG9jL2RlbXV4ZXJzLnRl eGkKKysrIGIvZG9jL2RlbXV4ZXJzLnRleGkKQEAgLTY4OSw2ICs2ODksMTAgQEAgU2V0IHRoZSBz YW1wbGUgcmF0ZSBmb3IgbGlib3Blbm1wdCB0byBvdXRwdXQuCiBSYW5nZSBpcyBmcm9tIDEwMDAg dG8gSU5UX01BWC4gVGhlIHZhbHVlIGRlZmF1bHQgaXMgNDgwMDAuCiBAZW5kIHRhYmxlCiAKK0Bz ZWN0aW9uIG1tdHRsdgorCitEZW11eGVyIGZvciBNTVQgcHJvdG9jb2wgb3ZlciBUTFYgcGFja2V0 cyAoTU1UL1RMViksIGFzIGRlZmluZWQgaW4gQVJJQiBTVEQtQjMyLgorCiBAc2VjdGlvbiBtb3Yv bXA0LzNncAogCiBEZW11eGVyIGZvciBRdWlja3RpbWUgRmlsZSBGb3JtYXQgJiBJU08vSUVDIEJh c2UgTWVkaWEgRmlsZSBGb3JtYXQgKElTTy9JRUMgMTQ0OTYtMTIgb3IgTVBFRy00IFBhcnQgMTIs IElTTy9JRUMgMTU0NDQtMTIgb3IgSlBFRyAyMDAwIFBhcnQgMTIpLgpkaWZmIC0tZ2l0IGEvbGli YXZmb3JtYXQvTWFrZWZpbGUgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQppbmRleCBmOGFkN2M2YTEx Li5lMzJkNmU3MWEzIDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQorKysgYi9saWJh dmZvcm1hdC9NYWtlZmlsZQpAQCAtMzU0LDYgKzM1NCw3IEBAIE9CSlMtJChDT05GSUdfTUxWX0RF TVVYRVIpICAgICAgICAgICAgICAgKz0gbWx2ZGVjLm8gcmlmZmRlYy5vCiBPQkpTLSQoQ09ORklH X01NX0RFTVVYRVIpICAgICAgICAgICAgICAgICs9IG1tLm8KIE9CSlMtJChDT05GSUdfTU1GX0RF TVVYRVIpICAgICAgICAgICAgICAgKz0gbW1mLm8KIE9CSlMtJChDT05GSUdfTU1GX01VWEVSKSAg ICAgICAgICAgICAgICAgKz0gbW1mLm8gcmF3ZW5jLm8KK09CSlMtJChDT05GSUdfTU1UVExWX0RF TVVYRVIpICAgICAgICAgICAgKz0gbW10cC5vIG1tdHRsdi5vCiBPQkpTLSQoQ09ORklHX01PRFNf REVNVVhFUikgICAgICAgICAgICAgICs9IG1vZHMubwogT0JKUy0kKENPTkZJR19NT0ZMRVhfREVN VVhFUikgICAgICAgICAgICArPSBtb2ZsZXgubwogT0JKUy0kKENPTkZJR19NT1ZfREVNVVhFUikg ICAgICAgICAgICAgICArPSBtb3YubyBtb3ZfY2hhbi5vIG1vdl9lc2RzLm8gXApkaWZmIC0tZ2l0 IGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCmlu ZGV4IGVmZGIzNGUyOWQuLmQ1ZjRmNTY4MGUgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L2FsbGZv cm1hdHMuYworKysgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKQEAgLTI3MCw2ICsyNzAsNyBA QCBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfbWx2X2RlbXV4ZXI7CiBleHRlcm4gY29u c3QgQVZJbnB1dEZvcm1hdCAgZmZfbW1fZGVtdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9y bWF0ICBmZl9tbWZfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBGRk91dHB1dEZvcm1hdCBmZl9tbWZf bXV4ZXI7CitleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfbW10dGx2X2RlbXV4ZXI7CiBl eHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfbW9kc19kZW11eGVyOwogZXh0ZXJuIGNvbnN0 IEFWSW5wdXRGb3JtYXQgIGZmX21vZmxleF9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRG b3JtYXQgIGZmX21vdl9kZW11eGVyOwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW10cC5jIGIv bGliYXZmb3JtYXQvbW10cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmEyZjk4ZTM5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC9tbXRwLmMKQEAgLTAs MCArMSwxMzc1IEBACisvKgorICogTVBFRyBNZWRpYSBUcmFuc3BvcnQgUHJvdG9jb2wgKE1NVFAp IHBhcnNlciwgYXMgZGVmaW5lZCBpbiBJU08vSUVDIDIzMDA4LTEuCisgKiBDb3B5cmlnaHQgKGMp IDIwMjMgU3VwZXJGYXNoaQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAq CisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLwor I2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQu aCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCisjaW5jbHVkZSAibGliYXZj b2RlYy9ieXRlc3RyZWFtLmgiCisjaW5jbHVkZSAibmV0d29yay5oIgorI2luY2x1ZGUgIm1tdHAu aCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImRlbXV4LmgiCisKKyNpbmNsdWRl IDxzdGRib29sLmg+CisKKyNkZWZpbmUgQVZFUlJPUl9JTlZBTElEREFUQSAoYWJvcnQoKSwgMCkK KworI2RlZmluZSBFTlNVUkVfQlNfTEVGVChicywgc2l6ZSkgaWYgKGJ5dGVzdHJlYW0yX2dldF9i eXRlc19sZWZ0KGJzKSA8IChzaXplKSkgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEEKKworc3Ry dWN0IE1NVEdlbmVyYWxMb2NhdGlvbkluZm8geworICAgIHVpbnQ4X3QgbG9jYXRpb25fdHlwZTsK KyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1aW50MTZfdCBwYWNr ZXRfaWQ7CisgICAgICAgIH0gdHlwZTA7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBz dHJ1Y3QgaW5fYWRkciBpcHY0X3NyY19hZGRyOworICAgICAgICAgICAgc3RydWN0IGluX2FkZHIg aXB2NF9kc3RfYWRkcjsKKyAgICAgICAgICAgIGluX3BvcnRfdCAgICAgIGRzdF9wb3J0OworICAg ICAgICAgICAgdWludDE2X3QgICAgICAgcGFja2V0X2lkOworICAgICAgICB9IHR5cGUxOworICAg ICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgc3RydWN0IGluNl9hZGRyIGlwdjZfc3JjX2FkZHI7 CisgICAgICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgaXB2Nl9kc3RfYWRkcjsKKyAgICAgICAgICAg IGluX3BvcnRfdCAgICAgICBkc3RfcG9ydDsKKyAgICAgICAgICAgIHVpbnQxNl90ICAgICAgICBw YWNrZXRfaWQ7CisgICAgICAgIH0gdHlwZTI7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg ICB1aW50MTZfdCBuZXR3b3JrX2lkOworICAgICAgICAgICAgdWludDE2X3QgTVBFR18yX3RyYW5z cG9ydF9zdHJlYW1faWQ7CisgICAgICAgICAgICB1aW50MTZfdCBNUEVHXzJfUElEOiAxMzsKKyAg ICAgICAgfSB0eXBlMzsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHN0cnVjdCBpbjZf YWRkciBpcHY2X3NyY19hZGRyOworICAgICAgICAgICAgc3RydWN0IGluNl9hZGRyIGlwdjZfZHN0 X2FkZHI7CisgICAgICAgICAgICBpbl9wb3J0X3QgICAgICAgZHN0X3BvcnQ7CisgICAgICAgICAg ICB1aW50MTZfdCAgICAgICAgTVBFR18yX1BJRDogMTM7CisgICAgICAgIH0gdHlwZTQ7CisgICAg ICAgIHN0cnVjdCB7CisgICAgICAgICAgICBjaGFyIFVSTFsweDEwMCArIDFdOworICAgICAgICB9 IHR5cGU1OworICAgIH07Cit9OworCitzdGF0aWMgaW5saW5lIGludCBwYXJzZV9tbXRfZ2VuZXJh bF9sb2NhdGlvbl9pbmZvKHN0cnVjdCBNTVRHZW5lcmFsTG9jYXRpb25JbmZvICppbmZvLCBHZXRC eXRlQ29udGV4dCAqZ2JjKSB7CisgICAgdWludDhfdCB1cmxfc2l6ZTsKKworICAgIEVOU1VSRV9C U19MRUZUKGdiYywgMSk7CisgICAgc3dpdGNoIChpbmZvLT5sb2NhdGlvbl90eXBlID0gYnl0ZXN0 cmVhbTJfZ2V0X2J5dGV1KGdiYykpIHsKKyAgICBjYXNlIDB4MDA6CisgICAgICAgIEVOU1VSRV9C U19MRUZUKGdiYywgMik7CisgICAgICAgIGluZm8tPnR5cGUwLnBhY2tldF9pZCA9IGJ5dGVzdHJl YW0yX2dldF9iZTE2dShnYmMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4MDE6CisgICAg ICAgIEVOU1VSRV9CU19MRUZUKGdiYywgKDMyICsgMzIgKyAxNiArIDE2KSAvIDgpOworICAgICAg ICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydShnYmMsICh1aW50OF90ICopICZpbmZvLT50eXBlMS5p cHY0X3NyY19hZGRyLCA0KTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoZ2JjLCAo dWludDhfdCAqKSAmaW5mby0+dHlwZTEuaXB2NF9kc3RfYWRkciwgNCk7CisgICAgICAgIGluZm8t PnR5cGUxLmRzdF9wb3J0ICA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOworICAgICAgICBp bmZvLT50eXBlMS5wYWNrZXRfaWQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSAweDAyOgorICAgICAgICBFTlNVUkVfQlNfTEVGVChnYmMsICgx MjggKyAxMjggKyAxNiArIDE2KSAvIDgpOworICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVy dShnYmMsICh1aW50OF90ICopICZpbmZvLT50eXBlMi5pcHY2X3NyY19hZGRyLCAxNik7CisgICAg ICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KGdiYywgKHVpbnQ4X3QgKikgJmluZm8tPnR5cGUy LmlwdjZfZHN0X2FkZHIsIDE2KTsKKyAgICAgICAgaW5mby0+dHlwZTIuZHN0X3BvcnQgID0gYnl0 ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgICAgIGluZm8tPnR5cGUyLnBhY2tldF9pZCA9 IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4 MDM6CisgICAgICAgIEVOU1VSRV9CU19MRUZUKGdiYywgKDE2ICsgMTYgKyAzICsgMTMpIC8gOCk7 CisgICAgICAgIGluZm8tPnR5cGUzLm5ldHdvcmtfaWQgICAgICAgICAgICAgICAgID0gYnl0ZXN0 cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgICAgIGluZm8tPnR5cGUzLk1QRUdfMl90cmFuc3Bv cnRfc3RyZWFtX2lkID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgICAgIGluZm8t PnR5cGUzLk1QRUdfMl9QSUQgICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1 KGdiYykgJiAwYjExMTExMTExMTExMTE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgwNDoK KyAgICAgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCAoMTI4ICsgMTI4ICsgMTYgKyAzICsgMTMpIC8g OCk7CisgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KGdiYywgKHVpbnQ4X3QgKikgJmlu Zm8tPnR5cGU0LmlwdjZfc3JjX2FkZHIsIDE2KTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1 ZmZlcnUoZ2JjLCAodWludDhfdCAqKSAmaW5mby0+dHlwZTQuaXB2Nl9kc3RfYWRkciwgMTYpOwor ICAgICAgICBpbmZvLT50eXBlNC5kc3RfcG9ydCAgID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdi Yyk7CisgICAgICAgIGluZm8tPnR5cGU0Lk1QRUdfMl9QSUQgPSBieXRlc3RyZWFtMl9nZXRfYmUx NnUoZ2JjKSAmIDBiMTExMTExMTExMTExMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDA1 OgorICAgICAgICB1cmxfc2l6ZSA9IGJ5dGVzdHJlYW0yX2dldF9ieXRlKGdiYyk7CisgICAgICAg IGJ5dGVzdHJlYW0yX2dldF9idWZmZXIoZ2JjLCAodWludDhfdCAqKSBpbmZvLT50eXBlNS5VUkws IHVybF9zaXplKTsKKyAgICAgICAgaW5mby0+dHlwZTUuVVJMW3VybF9zaXplXSA9ICdcMCc7Cisg ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCitzdHJ1Y3QgU3RyZWFtcyB7Cisg ICAgQVZTdHJlYW0gKnN0cmVhbTsKKworICAgIGludCBudW1fdGltZXN0YW1wX2Rlc2NyaXB0b3Jz OworICAgIHN0cnVjdCBNUFVUaW1lc3RhbXBEZXNjcmlwdG9yIHsKKyAgICAgICAgdWludDMyX3Qg c2VxdWVuY2VfbnVtYmVyOworICAgICAgICBpbnQ2NF90ICBwcmVzZW50YXRpb25fdGltZTsKKyAg ICB9ICp0aW1lc3RhbXBfZGVzY3JpcHRvcjsKKworICAgIGludCBudW1fZXh0X3RpbWVzdGFtcF9k ZXNjcmlwdG9yczsKKyAgICBzdHJ1Y3QgTVBVRXh0ZW5kZWRUaW1lc3RhbXBEZXNjcmlwdG9yIHsK KyAgICAgICAgdWludDMyX3Qgc2VxdWVuY2VfbnVtYmVyOworICAgICAgICB1aW50MTZfdCBkZWNv ZGluZ190aW1lX29mZnNldDsKKyAgICAgICAgdWludDhfdCAgbnVtX29mX2F1OworICAgICAgICBz dHJ1Y3QgeworICAgICAgICAgICAgdWludDE2X3QgZHRzX3B0c19vZmZzZXQ7CisgICAgICAgICAg ICB1aW50MTZfdCBwdHNfb2Zmc2V0OworICAgICAgICB9IGF1WzB4MTAwXTsKKyAgICB9ICpleHRf dGltZXN0YW1wX2Rlc2NyaXB0b3I7CisKKyAgICB1aW50MzJfdCAgICBsYXN0X3NlcXVlbmNlX251 bWJlcjsKKyAgICB1aW50MTZfdCAgICBhdV9jb3VudDsKKyAgICBBVkJ1ZmZlclJlZiAqcGVuZGlu Z19idWZmZXI7CisgICAgaW50NjRfdCAgICAgb2Zmc2V0OworICAgIGludCAgICAgICAgIGZsYWdz OworCisgICAgc3RydWN0IFN0cmVhbXMgKm5leHQ7Cit9OworCitzdHJ1Y3QgTU1UUENvbnRleHQg eworICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzZW1ibGVyOworICAgIHN0cnVjdCBT dHJlYW1zICAgICAgICAgICAqc3RyZWFtczsKKyAgICBBVlByb2dyYW0gICAgICAgICAgICAgICAg KnByb2dyYW07CisgICAgLy8gc3RydWN0IE1NVEdlbmVyYWxMb2NhdGlvbkluZm8gbXB0X2xvY2F0 aW9uOyBUT0RPCisKKyAgICAvLyBiZWxvdyBhcmUgdGVtcG9yYXJ5IGZpZWxkcyBhdmFpbGFibGUg Zm9yIHRoZSBzY29wZSBvZiBhIHNpbmdsZSBwYWNrZXQKKyAgICBBVkZvcm1hdENvbnRleHQgKnM7 CisgICAgQVZQYWNrZXQgICAgICAgICpwa3Q7CisgICAgdWludDE2X3QgICAgICAgIGN1cnJlbnRf cGlkOworICAgIGJvb2wgaXNfcmFwOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgU3RyZWFt cyAqZmluZF9jdXJyZW50X3N0cmVhbShzdHJ1Y3QgTU1UUENvbnRleHQgKmN0eCkgeworICAgIHN0 cnVjdCBTdHJlYW1zICpzdHJlYW1zOworICAgIGZvciAoc3RyZWFtcyA9IGN0eC0+c3RyZWFtczsg c3RyZWFtcyAhPSBOVUxMOyBzdHJlYW1zID0gc3RyZWFtcy0+bmV4dCkKKyAgICAgICAgaWYgKHN0 cmVhbXMtPnN0cmVhbS0+aWQgPT0gY3R4LT5jdXJyZW50X3BpZCkKKyAgICAgICAgICAgIHJldHVy biBzdHJlYW1zOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBT dHJlYW1zICpmaW5kX29yX2FsbG9jYXRlX3N0cmVhbShzdHJ1Y3QgTU1UUENvbnRleHQgKmN0eCwg dWludDE2X3QgcGlkKSB7CisgICAgQVZTdHJlYW0gICAgICAgKnN0cmVhbTsKKyAgICBzdHJ1Y3Qg U3RyZWFtcyAqc3RyZWFtczsKKyAgICBmb3IgKHN0cmVhbXMgPSBjdHgtPnN0cmVhbXM7IHN0cmVh bXMgIT0gTlVMTDsgc3RyZWFtcyA9IHN0cmVhbXMtPm5leHQpCisgICAgICAgIGlmIChzdHJlYW1z LT5zdHJlYW0tPmlkID09IHBpZCkgeworICAgICAgICAgICAgZmZzdHJlYW0oc3RyZWFtcy0+c3Ry ZWFtKS0+bmVlZF9jb250ZXh0X3VwZGF0ZSA9IDE7CisgICAgICAgICAgICByZXR1cm4gc3RyZWFt czsKKyAgICAgICAgfQorCisgICAgc3RyZWFtID0gYXZmb3JtYXRfbmV3X3N0cmVhbShjdHgtPnMs IE5VTEwpOworICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisgICAgc3RyZWFt LT5pZCA9IHBpZDsKKyAgICBhdl9wcm9ncmFtX2FkZF9zdHJlYW1faW5kZXgoY3R4LT5zLCBjdHgt PnByb2dyYW0tPmlkLCBzdHJlYW0tPmluZGV4KTsKKworICAgIHN0cmVhbXMgPSBhdl9tYWxsb2N6 KHNpemVvZihzdHJ1Y3QgU3RyZWFtcykpOworICAgIGlmIChzdHJlYW1zID09IE5VTEwpIHJldHVy biBOVUxMOworICAgIHN0cmVhbXMtPnN0cmVhbSA9IHN0cmVhbTsKKyAgICBzdHJlYW1zLT5uZXh0 ICAgPSBjdHgtPnN0cmVhbXM7CisgICAgc3RyZWFtcy0+b2Zmc2V0ID0gLTE7CisgICAgY3R4LT5z dHJlYW1zICAgID0gc3RyZWFtczsKKyAgICByZXR1cm4gc3RyZWFtczsKK30KKworZW51bSB7Cisg ICAgTU1UX1BBQ0tBR0VfVEFCTEVfSUQgID0gMHgyMCwKKyAgICBQQUNLQUdFX0xJU1RfVEFCTEVf SUQgPSAweDgwLAorfTsKKworZW51bSB7CisgICAgTVBVX1RJTUVTVEFNUF9ERVNDUklQVE9SICAg ICAgICAgID0gMHgwMDAxLAorICAgIFZJREVPX0NPTVBPTkVOVF9ERVNDUklQVE9SICAgICAgICA9 IDB4ODAxMCwKKyAgICBNSF9TVFJFQU1fSURFTlRJRklFUl9ERVNDUklQVE9SICAgPSAweDgwMTEs CisgICAgTUhfQVVESU9fQ09NUE9ORU5UX0RFU0NSSVBUT1IgICAgID0gMHg4MDE0LAorICAgIE1I X0RBVEFfQ09NUE9ORU5UX0RFU0NSSVBUT1IgICAgICA9IDB4ODAyMCwKKyAgICBNUFVfRVhURU5E RURfVElNRVNUQU1QX0RFU0NSSVBUT1IgPSAweDgwMjYsCit9OworCitzdGF0aWMgaW5saW5lIGlu dCBwYXJzZV92aWRlb19jb21wb25lbnRfZGVzY3JpcHRvcihBVlN0cmVhbSAqc3RyZWFtLCBHZXRC eXRlQ29udGV4dCAqZ2JjKSB7CisgICAgdWludDhfdCBkZXNjcmlwdG9yX2xlbmd0aDsKKyAgICB1 aW50OF90IGxhbmd1YWdlX2NvZGVbNF07CisKKyAgICBFTlNVUkVfQlNfTEVGVChnYmMsICgxNiAr IDggKyA0ICsgNCArIDEgKyAyICsgNSArIDE2ICsgNCArIDQgKyAyNCkgLyA4KTsKKyAgICBpZiAo Ynl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0gVklERU9fQ09NUE9ORU5UX0RFU0NSSVBUT1Ip CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGRlc2NyaXB0b3JfbGVu Z3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisKKyAgICBFTlNVUkVfQlNfTEVGVChn YmMsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKKyAgICB7CisgICAgICAgIEdldEJ5dGVDb250ZXh0IG5n YmM7CisgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBkZXNjcmlw dG9yX2xlbmd0aCk7CisgICAgICAgIC8qCisgICAgICAgICAqIHNraXA6CisgICAgICAgICAqIC0g dmlkZW9fcmVzb2x1dGlvbgorICAgICAgICAgKiAtIHZpZGVvX2FzcGVjdF9yYXRpbworICAgICAg ICAgKiAtIHZpZGVvX3NjYW5fZmxhZworICAgICAgICAgKiAtIHJlc2VydmVkCisgICAgICAgICAq IC0gdmlkZW9fZnJhbWVfcmF0ZQorICAgICAgICAgKiAtIGNvbXBvbmVudF90YWcKKyAgICAgICAg ICogLSB2aWRlb190cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MKKyAgICAgICAgICogLSByZXNlcnZl ZAorICAgICAgICAgKi8KKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgKDQgKyA0ICsg MSArIDIgKyA1ICsgMTYgKyA0ICsgNCkgLyA4KTsKKworICAgICAgICBFTlNVUkVfQlNfTEVGVCgm bmdiYywgMyk7CisgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KCZuZ2JjLCBsYW5ndWFn ZV9jb2RlLCAzKTsKKyAgICAgICAgbGFuZ3VhZ2VfY29kZVszXSA9ICdcMCc7CisgICAgfQorICAg IGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgZGVzY3JpcHRvcl9sZW5ndGgpOworCisgICAgcmV0dXJu IGF2X2RpY3Rfc2V0KCZzdHJlYW0tPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBsYW5ndWFnZV9jb2Rl LCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGFyc2VfbWhfYXVkaW9fY29tcG9uZW50X2Rl c2NyaXB0b3IoQVZTdHJlYW0gKnN0cmVhbSwgR2V0Qnl0ZUNvbnRleHQgKmdiYykgeworICAgIHVp bnQ4X3QgZGVzY3JpcHRvcl9sZW5ndGg7CisgICAgdWludDhfdCBzdHJlYW1fY29udGVudDsKKyAg ICB1aW50OF90IHN0cmVhbV90eXBlOworICAgIHVpbnQ4X3QgbGFuZ3VhZ2VfY29kZVs0XTsKKwor ICAgIEVOU1VSRV9CU19MRUZUKGdiYywgKDE2ICsgOCArIDQgKyA0ICsgOCArIDE2ICsgOCArIDgg KyAxICsgMSArIDIgKyAzICsgMSArIDI0KSAvIDgpOworICAgIGlmIChieXRlc3RyZWFtMl9nZXRf YmUxNnUoZ2JjKSAhPSBNSF9BVURJT19DT01QT05FTlRfREVTQ1JJUFRPUikKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3Ry ZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKworICAgIEVOU1VSRV9CU19MRUZUKGdiYywgZGVzY3JpcHRv cl9sZW5ndGgpOworICAgIHsKKyAgICAgICAgdWludDhfdCBieXRlOworICAgICAgICBib29sIEVT X211bHRpX2xpbmd1YWxfZmxhZzsKKworICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOworICAg ICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgZGVzY3JpcHRvcl9sZW5n dGgpOworCisgICAgICAgIGJ5dGUgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZu Z2JjKTsKKyAgICAgICAgc3RyZWFtX2NvbnRlbnQgPSBieXRlICYgMGIxMTExOworCisgICAgICAg IC8qCisgICAgICAgICAqIHNraXA6CisgICAgICAgICAqIC0gY29tcG9uZW50X3R5cGUKKyAgICAg ICAgICogLSBjb21wb25lbnRfdGFnCisgICAgICAgICAqLworICAgICAgICBieXRlc3RyZWFtMl9z a2lwdSgmbmdiYywgMyk7CisgICAgICAgIHN0cmVhbV90eXBlID0gYnl0ZXN0cmVhbTJfZ2V0X2J5 dGV1KCZuZ2JjKTsKKworICAgICAgICAvLyBza2lwOiBzaW11bGNhc3RfZ3JvdXBfdGFnCisgICAg ICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCAxKTsKKworICAgICAgICBieXRlICAgICAgICAg ICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOworICAgICAgICBFU19tdWx0 aV9saW5ndWFsX2ZsYWcgPSBieXRlID4+IDc7CisKKyAgICAgICAgRU5TVVJFX0JTX0xFRlQoJm5n YmMsIDMpOworICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydSgmbmdiYywgbGFuZ3VhZ2Vf Y29kZSwgMyk7CisgICAgICAgIGxhbmd1YWdlX2NvZGVbM10gPSAnXDAnOworCisgICAgICAgIGlm IChFU19tdWx0aV9saW5ndWFsX2ZsYWcpIHsKKyAgICAgICAgICAgIEVOU1VSRV9CU19MRUZUKCZu Z2JjLCAzKTsKKyAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCAzKTsKKyAgICAg ICAgfQorICAgIH0KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGRlc2NyaXB0b3JfbGVuZ3Ro KTsKKworICAgIHN3aXRjaCAoc3RyZWFtX2NvbnRlbnQpIHsKKyAgICBjYXNlIDB4MzoKKyAgICAg ICAgc3dpdGNoIChzdHJlYW1fdHlwZSkgeworICAgICAgICBjYXNlIDB4MTE6CisgICAgICAgICAg ICBzdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFWX0NPREVDX0lEX0FBQ19MQVRNOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgxYzoKKyAgICAgICAgICAgIHN0cmVhbS0+ Y29kZWNwYXItPmNvZGVjX2lkID0gQVZfQ09ERUNfSURfQUFDOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDQ6CisgICAgICAgIHN0cmVh bS0+Y29kZWNwYXItPmNvZGVjX2lkID0gQVZfQ09ERUNfSURfTVA0QUxTOworICAgICAgICBicmVh azsKKyAgICB9CisKKyAgICByZXR1cm4gYXZfZGljdF9zZXQoJnN0cmVhbS0+bWV0YWRhdGEsICJs YW5ndWFnZSIsIGxhbmd1YWdlX2NvZGUsIDApOzsKK30KKworI2RlZmluZSBNQVhfTlVNX1RJTUVT VEFNUF9ERVNDUklQVE9SIDMyCisjZGVmaW5lIERJRkYoYSwgYikgKChhKSA+IChiKSA/ICgoYSkg LSAoYikpIDogKChiKSAtIChhKSkpCisKK3N0YXRpYyBpbmxpbmUgaW50IHBhcnNlX21wdV90aW1l c3RhbXBfZGVzY3JpcHRvcihzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFtcywgR2V0Qnl0ZUNvbnRleHQg KmdiYykgeworICAgIHVpbnQ4X3QgZGVzY3JpcHRvcl9sZW5ndGg7CisKKyAgICBFTlNVUkVfQlNf TEVGVChnYmMsICgxNiArIDgpIC8gOCk7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1 KGdiYykgIT0gTVBVX1RJTUVTVEFNUF9ERVNDUklQVE9SKQorICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICBkZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9i eXRldShnYmMpOworCisgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7 CisgICAgeworICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOworICAgICAgICBieXRlc3RyZWFt Ml9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgZGVzY3JpcHRvcl9sZW5ndGgpOworCisgICAgICAg IHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPiAwKSB7CisgICAgICAg ICAgICB1aW50NjRfdCBtcHVfc2VxX251bTsKKyAgICAgICAgICAgIGludDY0X3QgIG1wdV9wcmVz ZW50YXRpb25fdGltZTsKKworICAgICAgICAgICAgRU5TVVJFX0JTX0xFRlQoJm5nYmMsICgzMiAr IDY0KSAvIDgpOworICAgICAgICAgICAgbXB1X3NlcV9udW0gICAgICAgICAgID0gYnl0ZXN0cmVh bTJfZ2V0X2JlMzJ1KCZuZ2JjKTsKKyAgICAgICAgICAgIG1wdV9wcmVzZW50YXRpb25fdGltZSA9 IGZmX3BhcnNlX250cF90aW1lKGJ5dGVzdHJlYW0yX2dldF9iZTY0dSgmbmdiYykpIC0gTlRQX09G RlNFVF9VUzsKKworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHN0cnVjdCBNUFVU aW1lc3RhbXBEZXNjcmlwdG9yICpkZXNjOworICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAg ICAgICAgICAgICAgICAgIGk7CisKKyAgICAgICAgICAgICAgICBpZiAobXB1X3NlcV9udW0gPCBz dHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlcikgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBm b3IgKGkgPSAwOyBpIDwgc3RyZWFtcy0+bnVtX3RpbWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKQor ICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0u c2VxdWVuY2VfbnVtYmVyID09IG1wdV9zZXFfbnVtKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBkZXNjID0gc3RyZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3IgKyBpOworICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBlbmQyOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyZWFtcy0+bnVtX3RpbWVzdGFtcF9kZXNjcmlwdG9y czsgKytpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtcy0+dGltZXN0YW1wX2Rlc2Ny aXB0b3JbaV0uc2VxdWVuY2VfbnVtYmVyIDwgc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgPSBzdHJlYW1zLT50aW1lc3RhbXBfZGVz Y3JpcHRvciArIGk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDE7CisgICAgICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzdHJlYW1zLT5udW1fdGltZXN0 YW1wX2Rlc2NyaXB0b3JzICsgMSA+IE1BWF9OVU1fVElNRVNUQU1QX0RFU0NSSVBUT1IpIHsKKyAg ICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbGwgZGVzY3JpcHRvcnMgbGFyZ2VyIHRoYW4g dGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNh bid0IGFkZCBtb3JlLCBzbyB3ZSBzaG91bGQgZXZpY3QgdGhlIG9uZSB3aXRoIHRoZSBsYXJnZXN0 IGRpc3RhbmNlCisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1heF9kaXN0ID0gMDsKKyAg ICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV90aW1lc3RhbXBf ZGVzY3JpcHRvcnM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChESUZGKHN0cmVh bXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcXVlbmNlX251bWJlciwgbXB1X3NlcV9udW0p ID4gbWF4X2Rpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjICAgICA9IHN0 cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYXhfZGlzdCA9IERJRkYoc3RyZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2Vx dWVuY2VfbnVtYmVyLCBtcHVfc2VxX251bSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIGF2X2Fzc2VydDEoZGVzYyAhPSBOVUxMKTsgLy8gc2hvdWxkIG5l dmVyIGZhaWwKKyAgICAgICAgICAgICAgICAgICAgZ290byBlbmQxOworICAgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgICAgIGRlc2MgPSBhdl9keW5hcnJheTJfYWRkKAorICAgICAgICAg ICAgICAgICAgICAodm9pZCAqKikgJnN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yLCAmc3Ry ZWFtcy0+bnVtX3RpbWVzdGFtcF9kZXNjcmlwdG9ycywKKyAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mKHN0cnVjdCBNUFVUaW1lc3RhbXBEZXNjcmlwdG9yKSwgTlVMTCk7CisgICAgICAgICAgICAg ICAgaWYgKGRlc2MgPT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgICAgICAg ICAgICAgIGVuZDE6CisgICAgICAgICAgICAgICAgZGVzYy0+c2VxdWVuY2VfbnVtYmVyICAgPSBt cHVfc2VxX251bTsKKyAgICAgICAgICAgICAgICBlbmQyOgorICAgICAgICAgICAgICAgIGRlc2Mt PnByZXNlbnRhdGlvbl90aW1lID0gbXB1X3ByZXNlbnRhdGlvbl90aW1lOworICAgICAgICAgICAg fSB3aGlsZSAoMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2Jj LCBkZXNjcmlwdG9yX2xlbmd0aCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGlu ZSBpbnQgcGFyc2VfbXB1X2V4dGVuZGVkX3RpbWVzdGFtcF9kZXNjcmlwdG9yKHN0cnVjdCBTdHJl YW1zICpzdHJlYW1zLCBHZXRCeXRlQ29udGV4dCAqZ2JjKSB7CisgICAgdWludDhfdCBkZXNjcmlw dG9yX2xlbmd0aDsKKworICAgIEFWU3RyZWFtICpzdHJlYW0gPSBzdHJlYW1zLT5zdHJlYW07CisK KyAgICBFTlNVUkVfQlNfTEVGVChnYmMsICgxNiArIDggKyA1ICsgMiArIDEpIC8gOCk7CisgICAg aWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICE9IE1QVV9FWFRFTkRFRF9USU1FU1RBTVBf REVTQ1JJUFRPUikKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgZGVz Y3JpcHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKworICAgIEVOU1VS RV9CU19MRUZUKGdiYywgZGVzY3JpcHRvcl9sZW5ndGgpOworICAgIHsKKyAgICAgICAgdWludDhf dCAgYnl0ZTsKKyAgICAgICAgdWludDhfdCAgcHRzX29mZnNldF90eXBlOworICAgICAgICBib29s IHRpbWVzY2FsZV9mbGFnOworICAgICAgICB1aW50MTZfdCBkZWZhdWx0X3B0c19vZmZzZXQgPSAw OworCisgICAgICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7CisgICAgICAgIGJ5dGVzdHJlYW0yX2lu aXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisKKyAgICAgICAgRU5T VVJFX0JTX0xFRlQoJm5nYmMsICg1ICsgMiArIDEpIC8gOCk7CisgICAgICAgIGJ5dGUgICAgICAg ICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRlKCZuZ2JjKTsKKyAgICAgICAgcHRzX29mZnNldF90 eXBlID0gKGJ5dGUgPj4gMSkgJiAwYjExOworICAgICAgICB0aW1lc2NhbGVfZmxhZyAgPSBieXRl ICYgMTsKKworICAgICAgICBpZiAodGltZXNjYWxlX2ZsYWcpIHsKKyAgICAgICAgICAgIEVOU1VS RV9CU19MRUZUKCZuZ2JjLCA0KTsKKyAgICAgICAgICAgIHN0cmVhbS0+dGltZV9iYXNlLm51bSA9 IDE7CisgICAgICAgICAgICBzdHJlYW0tPnRpbWVfYmFzZS5kZW4gPSBieXRlc3RyZWFtMl9nZXRf YmUzMnUoJm5nYmMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHB0c19vZmZzZXRfdHlwZSA9 PSAxKSB7CisgICAgICAgICAgICBFTlNVUkVfQlNfTEVGVCgmbmdiYywgMik7CisgICAgICAgICAg ICBkZWZhdWx0X3B0c19vZmZzZXQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoJm5nYmMpOworICAg ICAgICB9CisKKyAgICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2Jj KSA+IDApIHsKKyAgICAgICAgICAgIHNpemVfdCAgIGk7CisgICAgICAgICAgICB1aW50OF90ICBu dW1fb2ZfYXU7CisgICAgICAgICAgICB1aW50MTZfdCBkZWNvZGluZ190aW1lX29mZnNldDsKKyAg ICAgICAgICAgIHVpbnQ2NF90IG1wdV9zZXFfbnVtOworCisgICAgICAgICAgICBzdHJ1Y3QgTVBV RXh0ZW5kZWRUaW1lc3RhbXBEZXNjcmlwdG9yICpkZXNjID0gTlVMTDsKKworICAgICAgICAgICAg aWYgKHB0c19vZmZzZXRfdHlwZSA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X1BBVENIV0VMQ09NRTsgIC8vIHdlIGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSB0aGlzCisKKyAg ICAgICAgICAgIEVOU1VSRV9CU19MRUZUKCZuZ2JjLCAoMzIgKyAyICsgNiArIDE2ICsgOCkgLyA4 KTsKKyAgICAgICAgICAgIG1wdV9zZXFfbnVtID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzJ1KCZuZ2Jj KTsKKyAgICAgICAgICAgIC8vIHNraXA6IGxlYXBfaW5kaWNhdG9yCisgICAgICAgICAgICBieXRl c3RyZWFtMl9za2lwKCZuZ2JjLCAoMiArIDYpIC8gOCk7CisgICAgICAgICAgICBkZWNvZGluZ190 aW1lX29mZnNldCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdiYyk7CisgICAgICAgICAgICBu dW1fb2ZfYXUgICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAg ICAgICAgICAgIGlmIChtcHVfc2VxX251bSA+PSBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJl cikgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJlYW1zLT5udW1fZXh0X3Rp bWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFt cy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcXVlbmNlX251bWJlciA9PSBtcHVfc2Vx X251bSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyA9IHN0cmVhbXMtPmV4dF90aW1l c3RhbXBfZGVzY3JpcHRvciArIGk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDI7 CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg PCBzdHJlYW1zLT5udW1fZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKQorICAgICAgICAg ICAgICAgICAgICBpZiAoc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcXVl bmNlX251bWJlciA8IHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBkZXNjID0gc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yICsg aTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kMTsKKyAgICAgICAgICAgICAgICAg ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMtPm51bV9leHRfdGltZXN0YW1wX2Rl c2NyaXB0b3JzICsgMSA+IE1BWF9OVU1fVElNRVNUQU1QX0RFU0NSSVBUT1IpIHsKKyAgICAgICAg ICAgICAgICAgICAgdWludDY0X3QgbWF4X2RpZmYgPSAwOworICAgICAgICAgICAgICAgICAgICBm b3IgKGkgPSAwOyBpIDwgc3RyZWFtcy0+bnVtX2V4dF90aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsr aSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChESUZGKHN0cmVhbXMtPmV4dF90aW1lc3Rh bXBfZGVzY3JpcHRvcltpXS5zZXF1ZW5jZV9udW1iZXIsIG1wdV9zZXFfbnVtKSA+IG1heF9kaWZm KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyAgICAgPSBzdHJlYW1zLT5leHRf dGltZXN0YW1wX2Rlc2NyaXB0b3IgKyBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h eF9kaWZmID0gRElGRihzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxdWVu Y2VfbnVtYmVyLCBtcHVfc2VxX251bSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIGF2X2Fzc2VydDEoZGVzYyAhPSBOVUxMKTsKKyAgICAgICAgICAgICAg ICAgICAgZ290byBlbmQxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRl c2MgPSBhdl9keW5hcnJheTJfYWRkKAorICAgICAgICAgICAgICAgICAgICAodm9pZCAqKikgJnN0 cmVhbXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvciwgJnN0cmVhbXMtPm51bV9leHRfdGltZXN0 YW1wX2Rlc2NyaXB0b3JzLAorICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IE1QVUV4 dGVuZGVkVGltZXN0YW1wRGVzY3JpcHRvciksIE5VTEwpOworICAgICAgICAgICAgICAgIGlmIChk ZXNjID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 CisKKyAgICAgICAgICAgICAgICBlbmQxOgorICAgICAgICAgICAgICAgIGRlc2MtPnNlcXVlbmNl X251bWJlciAgICAgID0gbXB1X3NlcV9udW07CisgICAgICAgICAgICAgICAgZW5kMjoKKyAgICAg ICAgICAgICAgICBkZXNjLT5kZWNvZGluZ190aW1lX29mZnNldCA9IGRlY29kaW5nX3RpbWVfb2Zm c2V0OworICAgICAgICAgICAgICAgIGRlc2MtPm51bV9vZl9hdSAgICAgICAgICAgID0gbnVtX29m X2F1OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX29m X2F1OyArK2kpIHsKKyAgICAgICAgICAgICAgICBFTlNVUkVfQlNfTEVGVCgmbmdiYywgMik7Cisg ICAgICAgICAgICAgICAgaWYgKGRlc2MgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZGVz Yy0+YXVbaV0uZHRzX3B0c19vZmZzZXQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoJm5nYmMpOwor ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tp cHUoJm5nYmMsIDIpOworCisgICAgICAgICAgICAgICAgaWYgKHB0c19vZmZzZXRfdHlwZSA9PSAy KSB7CisgICAgICAgICAgICAgICAgICAgIEVOU1VSRV9CU19MRUZUKCZuZ2JjLCAyKTsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKGRlc2MgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAg IGRlc2MtPmF1W2ldLnB0c19vZmZzZXQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoJm5nYmMpOwor ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBieXRlc3Ry ZWFtMl9za2lwdSgmbmdiYywgMik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXNjICE9 IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzYy0+YXVbaV0ucHRzX29mZnNldCA9IGRl ZmF1bHRfcHRzX29mZnNldDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0 aCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGFyc2VfYWRkaXRp b25hbF9hcmliX3N1YnRpdGxlX2luZm8oQVZTdHJlYW0gKnN0cmVhbSwgR2V0Qnl0ZUNvbnRleHQg KmdiYykgeworICAgIGJvb2wgICAgc3RhcnRfbXB1X3NlcXVlbmNlX251bWJlcl9mbGFnOworICAg IGNoYXIgICAgbGFuZ3VhZ2VfY29kZVs0XTsKKyAgICB1aW50OF90IHN1YnRpdGxlX2Zvcm1hdDsK KworICAgIEVOU1VSRV9CU19MRUZUKGdiYywgKDggKyA0ICsgMSArIDMgKyAyNCArIDIgKyA0ICsg MiArIDQgKyA0ICsgNCArIDQpIC8gOCk7CisgICAgLy8gc2tpcDogc3VidGl0bGVfdGFnCisgICAg Ynl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAxKTsKKyAgICBzdGFydF9tcHVfc2VxdWVuY2VfbnVtYmVy X2ZsYWcgPSAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYykgPj4gMykgJiAxOworICAgIGJ5dGVz dHJlYW0yX2dldF9idWZmZXJ1KGdiYywgbGFuZ3VhZ2VfY29kZSwgMyk7CisgICAgbGFuZ3VhZ2Vf Y29kZVszXSA9ICdcMCc7CisgICAgc3VidGl0bGVfZm9ybWF0ID0gKGJ5dGVzdHJlYW0yX2dldF9i eXRldShnYmMpID4+IDIpICYgMGIxMTExOworICAgIC8qCisgICAgICogc2tpcDoKKyAgICAgKiAt IFRNRAorICAgICAqIC0gRE1GCisgICAgICogLSByZXNvbHV0aW9uCisgICAgICogLSBjb21wcmVz c2lvbl90eXBlCisgICAgICovCisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAoNCArIDQgKyA0 ICsgNCkgLyA4KTsKKworICAgIGlmIChzdGFydF9tcHVfc2VxdWVuY2VfbnVtYmVyX2ZsYWcpCisg ICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoZ2JjLCAzMik7CisKKyAgICBzd2l0Y2ggKHN1YnRpdGxl X2Zvcm1hdCkgeworICAgIGNhc2UgMGIwMDAwOgorICAgICAgICBzdHJlYW0tPmNvZGVjcGFyLT5j b2RlY19pZCA9IEFWX0NPREVDX0lEX1RUTUw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg IHJldHVybiBhdl9kaWN0X3NldCgmc3RyZWFtLT5tZXRhZGF0YSwgImxhbmd1YWdlIiwgbGFuZ3Vh Z2VfY29kZSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBhcnNlX21oX2RhdGFfY29tcG9u ZW50X2Rlc2NyaXB0b3IoQVZTdHJlYW0gKnN0cmVhbSwgR2V0Qnl0ZUNvbnRleHQgKmdiYykgewor ICAgIHVpbnQ4X3QgZGVzY3JpcHRvcl9sZW5ndGg7CisKKyAgICBFTlNVUkVfQlNfTEVGVChnYmMs ICgxNiArIDggKyAxNikgLyA4KTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykg IT0gTUhfREFUQV9DT01QT05FTlRfREVTQ1JJUFRPUikKKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7CisgICAgZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0 ZXUoZ2JjKTsKKworICAgIEVOU1VSRV9CU19MRUZUKGdiYywgZGVzY3JpcHRvcl9sZW5ndGgpOwor ICAgIHsKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKKyAgICAgICAgYnl0ZXN0cmVhbTJf aW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKKyAgICAgICAgYnl0 ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisKKyAgICAgICAgc3dpdGNo IChieXRlc3RyZWFtMl9nZXRfYmUxNnUoJm5nYmMpKSB7CisgICAgICAgIGNhc2UgMHgwMDIwOiAv LyBhZGRpdGlvbmFsIEFSSUIgc3VidGl0bGUgaW5mbyAoVGFibGUgNy03NCwgQVJJQiBTVEQtQjYw LCBWZXJzaW9uIDEuMTQtRTEpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VfYWRkaXRpb25hbF9h cmliX3N1YnRpdGxlX2luZm8oc3RyZWFtLCAmbmdiYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGFyc2Vfc3RyZWFtX2lkZW50aWZp ZXJfZGVzY3JpcHRvcihBVlN0cmVhbSAqc3RyZWFtLCBHZXRCeXRlQ29udGV4dCAqZ2JjKSB7Cisg ICAgdWludDhfdCBkZXNjcmlwdG9yX2xlbmd0aDsKKworICAgIEVOU1VSRV9CU19MRUZUKGdiYywg KDE2ICsgOCArIDE2KSAvIDgpOworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAh PSBNSF9TVFJFQU1fSURFTlRJRklFUl9ERVNDUklQVE9SKQorICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICBkZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9i eXRldShnYmMpOworCisgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7 CisgICAgeworICAgICAgICAvLyBubyBuZWVkIGZvciBub3cKKyAgICB9CisgICAgYnl0ZXN0cmVh bTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisKKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBwYXJzZV9kZXNjcmlwdG9yKHN0cnVjdCBTdHJlYW1zICpzdHJlYW1zLCBHZXRC eXRlQ29udGV4dCAqZ2JjKSB7CisgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCAzKTsKKyAgICBzd2l0 Y2ggKGJ5dGVzdHJlYW0yX3BlZWtfYmUxNnUoZ2JjKSkgeworICAgIGNhc2UgTVBVX1RJTUVTVEFN UF9ERVNDUklQVE9SOgorICAgICAgICByZXR1cm4gcGFyc2VfbXB1X3RpbWVzdGFtcF9kZXNjcmlw dG9yKHN0cmVhbXMsIGdiYyk7CisgICAgY2FzZSBWSURFT19DT01QT05FTlRfREVTQ1JJUFRPUjoK KyAgICAgICAgcmV0dXJuIHBhcnNlX3ZpZGVvX2NvbXBvbmVudF9kZXNjcmlwdG9yKHN0cmVhbXMt PnN0cmVhbSwgZ2JjKTsKKyAgICBjYXNlIE1IX1NUUkVBTV9JREVOVElGSUVSX0RFU0NSSVBUT1I6 CisgICAgICAgIHJldHVybiBwYXJzZV9zdHJlYW1faWRlbnRpZmllcl9kZXNjcmlwdG9yKHN0cmVh bXMtPnN0cmVhbSwgZ2JjKTsKKyAgICBjYXNlIE1IX0FVRElPX0NPTVBPTkVOVF9ERVNDUklQVE9S OgorICAgICAgICByZXR1cm4gcGFyc2VfbWhfYXVkaW9fY29tcG9uZW50X2Rlc2NyaXB0b3Ioc3Ry ZWFtcy0+c3RyZWFtLCBnYmMpOworICAgIGNhc2UgTUhfREFUQV9DT01QT05FTlRfREVTQ1JJUFRP UjoKKyAgICAgICAgcmV0dXJuIHBhcnNlX21oX2RhdGFfY29tcG9uZW50X2Rlc2NyaXB0b3Ioc3Ry ZWFtcy0+c3RyZWFtLCBnYmMpOworICAgIGNhc2UgTVBVX0VYVEVOREVEX1RJTUVTVEFNUF9ERVND UklQVE9SOgorICAgICAgICByZXR1cm4gcGFyc2VfbXB1X2V4dGVuZGVkX3RpbWVzdGFtcF9kZXNj cmlwdG9yKHN0cmVhbXMsIGdiYyk7CisgICAgfQorICAgIGF2X2xvZyhzdHJlYW1zLT5zdHJlYW0s IEFWX0xPR19JTkZPLCAiVW5rbm93biBkZXNjcmlwdG9yOiAweCUwNHhcbiIsIGJ5dGVzdHJlYW0y X3BlZWtfYmUxNnUoZ2JjKSk7CisgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworfQor CitzdGF0aWMgaW5saW5lIGludCBwYXJzZV9tbXRfcGFja2FnZV90YWJsZShNTVRQQ29udGV4dCAq Y3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKSB7CisgICAgdWludDE2X3QgbGVuZ3RoOworCisgICAg RU5TVVJFX0JTX0xFRlQoZ2JjLCAoOCArIDggKyAxNiArIDYgKyAyICsgOCkgLyA4KTsKKyAgICBp ZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYykgIT0gTU1UX1BBQ0tBR0VfVEFCTEVfSUQpCisg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIC8vIHNraXA6IHZlcnNpb24K KyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIDEpOworICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0y X2dldF9iZTE2dShnYmMpOworCisgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCBsZW5ndGgpOworICAg IHsKKyAgICAgICAgc2l6ZV90ICAgaSwgajsKKyAgICAgICAgdWludDhfdCAgcGFja2FnZV9pZF9s ZW5ndGg7CisgICAgICAgIHVpbnQxNl90IGRlc2NyaXB0b3JzX2xlbmd0aDsKKyAgICAgICAgdWlu dDhfdCAgbnVtYmVyX29mX2Fzc2V0czsKKworICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOwor ICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgbGVuZ3RoKTsKKwor ICAgICAgICAvLyBza2lwOiBNUFRfbW9kZQorICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdi YywgMSk7CisKKyAgICAgICAgcGFja2FnZV9pZF9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0 ZXUoJm5nYmMpOworICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZuZ2JjLCBwYWNrYWdlX2lkX2xl bmd0aCk7CisKKyAgICAgICAgZGVzY3JpcHRvcnNfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2Jl MTYoJm5nYmMpOworICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZuZ2JjLCBkZXNjcmlwdG9yc19s ZW5ndGgpOworCisgICAgICAgIEVOU1VSRV9CU19MRUZUKCZuZ2JjLCAxKTsKKyAgICAgICAgbnVt YmVyX29mX2Fzc2V0cyA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IG51bWJlcl9vZl9hc3NldHM7ICsraSkgeworICAgICAgICAgICAgaW50 IGVycjsKKworICAgICAgICAgICAgdWludDhfdCAgYXNzZXRfaWRfbGVuZ3RoOworICAgICAgICAg ICAgdWludDhfdCAgbG9jYXRpb25fY291bnQ7CisgICAgICAgICAgICB1aW50MTZfdCBhc3NldF9k ZXNjcmlwdG9yc19sZW5ndGg7CisgICAgICAgICAgICB1aW50MzJfdCBhc3NldF90eXBlOworCisg ICAgICAgICAgICBzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFtID0gTlVMTDsKKworICAgICAgICAgICAg c3RydWN0IE1NVEdlbmVyYWxMb2NhdGlvbkluZm8gaW5mbzsKKworICAgICAgICAgICAgRU5TVVJF X0JTX0xFRlQoJm5nYmMsICg4ICsgMzIgKyA4KSAvIDgpOworICAgICAgICAgICAgLyoKKyAgICAg ICAgICAgICAqIHNraXA6CisgICAgICAgICAgICAgKiAtIGlkZW50aWZpZXJfdHlwZQorICAgICAg ICAgICAgICogLSBhc3NldF9pZF9zY2hlbWUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAg Ynl0ZXN0cmVhbTJfc2tpcHUoJm5nYmMsICg4ICsgMzIpIC8gOCk7CisKKyAgICAgICAgICAgIGFz c2V0X2lkX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisgICAgICAgICAg ICBieXRlc3RyZWFtMl9za2lwKCZuZ2JjLCBhc3NldF9pZF9sZW5ndGgpOworCisgICAgICAgICAg ICBhc3NldF90eXBlID0gYnl0ZXN0cmVhbTJfZ2V0X2xlMzIoJm5nYmMpOworCisgICAgICAgICAg ICAvLyBza2lwOiBhc3NldF9jbG9ja19yZWxhdGlvbl9mbGFnCisgICAgICAgICAgICBieXRlc3Ry ZWFtMl9za2lwKCZuZ2JjLCAxKTsKKworICAgICAgICAgICAgRU5TVVJFX0JTX0xFRlQoJm5nYmMs IDEpOworICAgICAgICAgICAgbG9jYXRpb25fY291bnQgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUo Jm5nYmMpOworCisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbG9jYXRpb25fY291bnQ7ICsr aikKKyAgICAgICAgICAgICAgICBpZiAoKGVyciA9IHBhcnNlX21tdF9nZW5lcmFsX2xvY2F0aW9u X2luZm8oJmluZm8sICZuZ2JjKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy OworCisgICAgICAgICAgICBzd2l0Y2ggKGFzc2V0X3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2Ug TUtUQUcoJ2gnLCAnZScsICd2JywgJzEnKToKKyAgICAgICAgICAgICAgICBpZiAoaW5mby5sb2Nh dGlvbl90eXBlICE9IDB4MDApIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICAgICAg ICAgICAgICBzdHJlYW0gPSBmaW5kX29yX2FsbG9jYXRlX3N0cmVhbShjdHgsIGluZm8udHlwZTAu cGFja2V0X2lkKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyZWFtID09IE5VTEwpIHJldHVybiBB VkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW0tPmNvZGVjcGFy LT5jb2RlY190eXBlID0gQVZNRURJQV9UWVBFX1ZJREVPOworICAgICAgICAgICAgICAgIHN0cmVh bS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgICA9IEFWX0NPREVDX0lEX0hFVkM7CisgICAg ICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW0tPmNvZGVjcGFyLT5jb2RlY190YWcgID0gYXNzZXRf dHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTUtUQUcoJ20n LCAncCcsICc0JywgJ2EnKToKKyAgICAgICAgICAgICAgICBpZiAoaW5mby5sb2NhdGlvbl90eXBl ICE9IDB4MDApIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICAgICAgICAgICAgICBz dHJlYW0gPSBmaW5kX29yX2FsbG9jYXRlX3N0cmVhbShjdHgsIGluZm8udHlwZTAucGFja2V0X2lk KTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyZWFtID09IE5VTEwpIHJldHVybiBBVkVSUk9SKEVO T01FTSk7CisgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW0tPmNvZGVjcGFyLT5jb2RlY190 eXBlID0gQVZNRURJQV9UWVBFX0FVRElPOworICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFt LT5jb2RlY3Bhci0+Y29kZWNfdGFnICA9IGFzc2V0X3R5cGU7CisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICBjYXNlIE1LVEFHKCdzJywgJ3QnLCAncCcsICdwJyk6CisgICAgICAg ICAgICAgICAgaWYgKGluZm8ubG9jYXRpb25fdHlwZSA9PSAweDAwKSB7CisgICAgICAgICAgICAg ICAgICAgIHN0cmVhbSA9IGZpbmRfb3JfYWxsb2NhdGVfc3RyZWFtKGN0eCwgaW5mby50eXBlMC5w YWNrZXRfaWQpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtID09IE5VTEwpIHJldHVy biBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5j b2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9TVUJUSVRMRTsKKyAgICAgICAgICAg ICAgICAgICAgc3RyZWFtLT5zdHJlYW0tPmNvZGVjcGFyLT5jb2RlY190YWcgID0gYXNzZXRfdHlw ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICBjYXNlIE1LVEFHKCdhJywgJ2EnLCAncCcsICdwJyk6CisgICAgICAgICAgICBjYXNlIE1LVEFH KCdhJywgJ3MnLCAnZycsICdkJyk6CisgICAgICAgICAgICBjYXNlIE1LVEFHKCdhJywgJ2EnLCAn ZycsICdkJyk6CisgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFRPRE8KKyAgICAgICAgICAgIH0K KworICAgICAgICAgICAgRU5TVVJFX0JTX0xFRlQoJm5nYmMsIDIpOworICAgICAgICAgICAgYXNz ZXRfZGVzY3JpcHRvcnNfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2JjKTsKKyAg ICAgICAgICAgIEVOU1VSRV9CU19MRUZUKCZuZ2JjLCBhc3NldF9kZXNjcmlwdG9yc19sZW5ndGgp OworICAgICAgICAgICAgaWYgKHN0cmVhbSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgR2V0 Qnl0ZUNvbnRleHQgbm5nYmM7CisgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbm5n YmMsIG5nYmMuYnVmZmVyLCBhc3NldF9kZXNjcmlwdG9yc19sZW5ndGgpOworCisgICAgICAgICAg ICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZubmdiYykgPiAwKQorICAg ICAgICAgICAgICAgICAgICBpZiAoKGVyciA9IHBhcnNlX2Rlc2NyaXB0b3Ioc3RyZWFtLCAmbm5n YmMpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoJm5nYmMsIGFzc2V0X2Rlc2NyaXB0 b3JzX2xlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2Jj LCBsZW5ndGgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBhcnNl X3BhY2thZ2VfbGlzdF90YWJsZShNTVRQQ29udGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2Jj KSB7CisgICAgc2l6ZV90ICAgaTsKKyAgICB1aW50MzJfdCBsZW5ndGg7CisKKyAgICBFTlNVUkVf QlNfTEVGVChnYmMsICg4ICsgOCArIDE2ICsgOCkgLyA4KTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJf Z2V0X2J5dGV1KGdiYykgIT0gUEFDS0FHRV9MSVNUX1RBQkxFX0lEKQorICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAvLyBza2lwOiB2ZXJzaW9uCisgICAgYnl0ZXN0cmVh bTJfc2tpcHUoZ2JjLCAxKTsKKyAgICBsZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2Jj KTsKKworICAgIEVOU1VSRV9CU19MRUZUKGdiYywgbGVuZ3RoKTsKKyAgICB7CisgICAgICAgIGlu dCAgICAgZXJyOworICAgICAgICB1aW50OF90IG51bV9vZl9wYWNrYWdlOworICAgICAgICB1aW50 OF90IG51bV9vZl9pcF9kZWxpdmVyeTsKKworICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOwor ICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgbGVuZ3RoKTsKKwor ICAgICAgICBudW1fb2ZfcGFja2FnZSA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7Cisg ICAgICAgIGZvciAoaSAgICAgICAgID0gMDsgaSA8IG51bV9vZl9wYWNrYWdlOyArK2kpIHsKKyAg ICAgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfaWRfbGVuZ3Ro OworICAgICAgICAgICAgc3RydWN0IE1NVEdlbmVyYWxMb2NhdGlvbkluZm8gaW5mbzsKKworICAg ICAgICAgICAgcGFja2FnZV9pZF9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZSgmbmdiYyk7 CisgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZuZ2JjLCBwYWNrYWdlX2lkX2xlbmd0aCk7 CisKKyAgICAgICAgICAgIGlmICgoZXJyID0gcGFyc2VfbW10X2dlbmVyYWxfbG9jYXRpb25faW5m bygmaW5mbywgJm5nYmMpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAg ICAgfQorCisgICAgICAgIEVOU1VSRV9CU19MRUZUKCZuZ2JjLCAxKTsKKyAgICAgICAgbnVtX29m X2lwX2RlbGl2ZXJ5ID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKKyAgICAgICAgZm9y IChpICAgICAgICAgICAgID0gMDsgaSA8IG51bV9vZl9pcF9kZWxpdmVyeTsgKytpKQorICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgIH0KKyAgICBieXRlc3RyZWFt Ml9za2lwdShnYmMsIGxlbmd0aCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBw YXJzZV90YWJsZShNTVRQQ29udGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKSB7CisgICAg RU5TVVJFX0JTX0xFRlQoZ2JjLCAyKTsKKyAgICBzd2l0Y2ggKGJ5dGVzdHJlYW0yX3BlZWtfYnl0 ZXUoZ2JjKSkgeworICAgIGNhc2UgTU1UX1BBQ0tBR0VfVEFCTEVfSUQ6CisgICAgICAgIHJldHVy biBwYXJzZV9tbXRfcGFja2FnZV90YWJsZShjdHgsIGdiYyk7CisgICAgY2FzZSBQQUNLQUdFX0xJ U1RfVEFCTEVfSUQ6CisgICAgICAgIHJldHVybiBwYXJzZV9wYWNrYWdlX2xpc3RfdGFibGUoY3R4 LCBnYmMpOworICAgIH0KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGJ5dGVzdHJlYW0yX2dl dF9ieXRlc19sZWZ0KGdiYykpOyAvLyBUT0RPCisgICAgcmV0dXJuIDA7Cit9CisKK2VudW0gewor ICAgIFBBX01FU1NBR0VfSUQgPSAweDAwMDAsCit9OworCitzdGF0aWMgaW5saW5lIGludCBwYXJz ZV9wYV9tZXNzYWdlKE1NVFBDb250ZXh0ICpjdHgsIEdldEJ5dGVDb250ZXh0ICpnYmMpIHsKKyAg ICB1aW50MzJfdCBsZW5ndGg7CisKKyAgICBFTlNVUkVfQlNfTEVGVChnYmMsICgxNiArIDggKyAz MiArIDgpIC8gOCk7CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICE9IFBBX01F U1NBR0VfSUQpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIC8vIHNr aXA6IHZlcnNpb24KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIDEpOworICAgIGxlbmd0aCA9 IGJ5dGVzdHJlYW0yX2dldF9iZTMydShnYmMpOworCisgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCBs ZW5ndGgpOworICAgIHsKKyAgICAgICAgc2l6ZV90ICBpOworICAgICAgICB1aW50OF90IG51bV9v Zl90YWJsZXM7CisKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKKyAgICAgICAgYnl0ZXN0 cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGxlbmd0aCk7CisKKyAgICAgICAgbnVtX29m X3RhYmxlcyA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisgICAgICAgIGZvciAoaSAg ICAgICAgPSAwOyBpIDwgbnVtX29mX3RhYmxlczsgKytpKSB7CisgICAgICAgICAgICBieXRlc3Ry ZWFtMl9za2lwKCZuZ2JjLCAoOCArIDggKyAxNikgLyA4KTsKKyAgICAgICAgfQorCisgICAgICAg IHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPiAwKSB7CisgICAgICAg ICAgICBpbnQgZXJyID0gcGFyc2VfdGFibGUoY3R4LCAmbmdiYyk7CisgICAgICAgICAgICBpZiAo ZXJyIDwgMCkgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgIH0KKyAgICBieXRlc3RyZWFtMl9z a2lwdShnYmMsIGxlbmd0aCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJz ZV9zaWduYWxsaW5nX21lc3NhZ2UoTU1UUENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdi YykgeworICAgIEVOU1VSRV9CU19MRUZUKGdiYywgNCk7CisgICAgc3dpdGNoIChieXRlc3RyZWFt Ml9wZWVrX2JlMTZ1KGdiYykpIHsKKyAgICBjYXNlIFBBX01FU1NBR0VfSUQ6CisgICAgICAgIHJl dHVybiBwYXJzZV9wYV9tZXNzYWdlKGN0eCwgZ2JjKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9 CisKK2VudW0gRnJhZ21lbnRhdGlvbkluZGljYXRvciB7CisgICAgTk9UX0ZSQUdNRU5URUQgID0g MGIwMCwKKyAgICBGSVJTVF9GUkFHTUVOVCAgPSAwYjAxLAorICAgIE1JRERMRV9GUkFHTUVOVCA9 IDBiMTAsCisgICAgTEFTVF9GUkFHTUVOVCAgID0gMGIxMSwKK307CisKK3N0cnVjdCBGcmFnbWVu dEFzc2VtYmxlciB7CisgICAgdWludDE2X3QgICAgICAgICAgICAgICAgIHBpZDsKKyAgICBzdHJ1 Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKm5leHQ7CisKKyAgICB1aW50OF90ICpkYXRhOworICAgIHNp emVfdCAgc2l6ZSwgY2FwOworCisgICAgdWludDMyX3QgbGFzdF9zZXE7CisKKyAgICBlbnVtIHsK KyAgICAgICAgSU5JVCA9IDAsCisgICAgICAgIE5PVF9TVEFSVEVELAorICAgICAgICBJTl9GUkFH TUVOVCwKKyAgICAgICAgU0tJUCwKKyAgICB9ICAgICAgICBzdGF0ZTsKK307CisKK2lubGluZSBz dGF0aWMgaW50IGFwcGVuZF9kYXRhKHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqY3R4LCBjb25z dCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBzaXplKSB7CisgICAgaWYgKGN0eC0+c2l6ZSArIHNp emUgPiBVSU5UMzJfTUFYKSByZXR1cm4gQVZFUlJPUihFT1ZFUkZMT1cpOworICAgIGlmIChjdHgt PmNhcCA8IGN0eC0+c2l6ZSArIHNpemUpIHsKKyAgICAgICAgdm9pZCAgICpuZXdfZGF0YTsKKyAg ICAgICAgc2l6ZV90IG5ld19jYXAgPSBjdHgtPmNhcCA9PSAwID8gMTAyNCA6IGN0eC0+Y2FwICog MjsKKyAgICAgICAgd2hpbGUgKG5ld19jYXAgPCBjdHgtPnNpemUgKyBzaXplKSBuZXdfY2FwICo9 IDI7CisKKyAgICAgICAgbmV3X2RhdGEgPSBhdl9yZWFsbG9jKGN0eC0+ZGF0YSwgbmV3X2NhcCk7 CisgICAgICAgIGlmIChuZXdfZGF0YSA9PSBOVUxMKSByZXR1cm4gQVZFUlJPUihlcnJubyk7Cisg ICAgICAgIGN0eC0+ZGF0YSA9IG5ld19kYXRhOworICAgICAgICBjdHgtPmNhcCAgPSBuZXdfY2Fw OworICAgIH0KKyAgICBtZW1jcHkoY3R4LT5kYXRhICsgY3R4LT5zaXplLCBkYXRhLCBzaXplKTsK KyAgICBjdHgtPnNpemUgKz0gc2l6ZTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGlu ZSBpbnQgY2hlY2tfc3RhdGUoTU1UUENvbnRleHQgKmN0eCwgc3RydWN0IEZyYWdtZW50QXNzZW1i bGVyICphc3MsIHVpbnQzMl90IHNlcV9udW0pIHsKKyAgICBpZiAoYXNzLT5zdGF0ZSA9PSBJTklU KSB7CisgICAgICAgIGFzcy0+c3RhdGUgPSBTS0lQOworICAgIH0gZWxzZSBpZiAoc2VxX251bSAh PSBhc3MtPmxhc3Rfc2VxICsgMSkgeworICAgICAgICBpZiAoYXNzLT5zaXplICE9IDApIHsKKyAg ICAgICAgICAgIGF2X2xvZyhjdHgtPnMsIEFWX0xPR19XQVJOSU5HLAorICAgICAgICAgICAgICAg ICAgICJQYWNrZXQgc2VxdWVuY2UgbnVtYmVyIGp1bXA6ICV1ICsgMSAhPSAldSwgZHJvcCAlenUg Ynl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgYXNzLT5sYXN0X3NlcSwgc2VxX251bSwgYXNz LT5zaXplKTsKKyAgICAgICAgICAgIGFzcy0+c2l6ZSA9IDA7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBhdl9sb2coY3R4LT5zLCBBVl9MT0dfV0FSTklORywgIlBhY2tldCBzZXF1ZW5j ZSBudW1iZXIganVtcDogJXUgKyAxICE9ICV1XG4iLAorICAgICAgICAgICAgICAgICAgIGFzcy0+ bGFzdF9zZXEsIHNlcV9udW0pOworICAgICAgICB9CisgICAgICAgIGFzcy0+c3RhdGUgPSBTS0lQ OworICAgIH0KKyAgICBhc3MtPmxhc3Rfc2VxID0gc2VxX251bTsKKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBhc3NlbWJsZV9mcmFnbWVudCgKKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3Nl bWJsZXIgKmN0eCwgdWludDMyX3Qgc2VxX251bSwgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9y IGluZGljYXRvciwKKyAgICBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBzaXplLCBpbnQg KCpwYXJzZXIpKE1NVFBDb250ZXh0ICosIEdldEJ5dGVDb250ZXh0ICopLAorICAgIE1NVFBDb250 ZXh0ICpvcGFxdWUpIHsKKyAgICBHZXRCeXRlQ29udGV4dCBnYmM7CisgICAgaW50ICAgICAgICAg ICAgZXJyOworCisgICAgaWYgKGluZGljYXRvciA9PSBOT1RfRlJBR01FTlRFRCkgeworICAgICAg ICBpZiAoY3R4LT5zdGF0ZSA9PSBJTl9GUkFHTUVOVCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgICAgIGN0eC0+c3RhdGUgPSBOT1RfU1RBUlRFRDsKKyAgICAgICAgYnl0ZXN0cmVh bTJfaW5pdCgmZ2JjLCBkYXRhLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlcihvcGFxdWUs ICZnYmMpOworICAgIH0KKworICAgIGlmIChpbmRpY2F0b3IgPT0gRklSU1RfRlJBR01FTlQpIHsK KyAgICAgICAgaWYgKGN0eC0+c3RhdGUgPT0gSU5fRlJBR01FTlQpIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOworICAgICAgICBjdHgtPnN0YXRlID0gSU5fRlJBR01FTlQ7CisgICAgICAgIHJl dHVybiBhcHBlbmRfZGF0YShjdHgsIGRhdGEsIHNpemUpOworICAgIH0KKworICAgIGlmIChpbmRp Y2F0b3IgPT0gTUlERExFX0ZSQUdNRU5UKSB7CisgICAgICAgIGlmIChjdHgtPnN0YXRlID09IFNL SVApIHsKKyAgICAgICAgICAgIGF2X2xvZyhvcGFxdWUtPnMsIEFWX0xPR19WRVJCT1NFLCAiRHJv cCBwYWNrZXQgJXVcbiIsIHNlcV9udW0pOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg IH0KKyAgICAgICAgaWYgKGN0eC0+c3RhdGUgIT0gSU5fRlJBR01FTlQpIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworICAgICAgICByZXR1cm4gYXBwZW5kX2RhdGEoY3R4LCBkYXRhLCBzaXpl KTsKKyAgICB9CisKKyAgICBpZiAoaW5kaWNhdG9yID09IExBU1RfRlJBR01FTlQpIHsKKyAgICAg ICAgaWYgKGN0eC0+c3RhdGUgPT0gU0tJUCkgeworICAgICAgICAgICAgYXZfbG9nKG9wYXF1ZS0+ cywgQVZfTE9HX1ZFUkJPU0UsICJEcm9wIHBhY2tldCAldVxuIiwgc2VxX251bSk7CisgICAgICAg ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3R4LT5zdGF0ZSAhPSBJTl9G UkFHTUVOVCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGlmICgoZXJyID0g YXBwZW5kX2RhdGEoY3R4LCBkYXRhLCBzaXplKSkgPCAwKSByZXR1cm4gZXJyOworCisgICAgICAg IGJ5dGVzdHJlYW0yX2luaXQoJmdiYywgY3R4LT5kYXRhLCBjdHgtPnNpemUpOworICAgICAgICBl cnIgPSBwYXJzZXIob3BhcXVlLCAmZ2JjKTsKKworICAgICAgICBjdHgtPnNpemUgID0gMDsKKyAg ICAgICAgY3R4LT5zdGF0ZSA9IE5PVF9TVEFSVEVEOworICAgICAgICByZXR1cm4gZXJyOworICAg IH0KKworICAgIHJldHVybiBBVkVSUk9SX09QVElPTl9OT1RfRk9VTkQ7Cit9CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICpmaW5kX29yX2FsbG9jYXRlX2Fzc2VtYmxl cihNTVRQQ29udGV4dCAqY3R4LCB1aW50MTZfdCBwaWQpIHsKKyAgICBzdHJ1Y3QgRnJhZ21lbnRB c3NlbWJsZXIgKmFzczsKKyAgICBmb3IgKGFzcyA9IGN0eC0+YXNzZW1ibGVyOyBhc3MgIT0gTlVM TDsgYXNzID0gYXNzLT5uZXh0KQorICAgICAgICBpZiAoYXNzLT5waWQgPT0gcGlkKQorICAgICAg ICAgICAgcmV0dXJuIGFzczsKKworICAgIGFzcyA9IGF2X21hbGxvY3ooc2l6ZW9mKHN0cnVjdCBG cmFnbWVudEFzc2VtYmxlcikpOworICAgIGlmIChhc3MgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Cisg ICAgYXNzLT5waWQgICAgICAgICAgICAgID0gcGlkOworICAgIGFzcy0+bmV4dCAgICAgICAgICAg ICA9IGN0eC0+YXNzZW1ibGVyOworICAgIHJldHVybiBjdHgtPmFzc2VtYmxlciA9IGFzczsKK30K Kworc3RhdGljIGlubGluZSBpbnQgcGFyc2Vfc2lnbmFsbGluZ19tZXNzYWdlcyhNTVRQQ29udGV4 dCAqY3R4LCB1aW50MzJfdCBzZXFfbnVtLCBHZXRCeXRlQ29udGV4dCAqZ2JjKSB7CisgICAgaW50 ICAgICAgICAgICAgICAgICAgICAgICAgIGVycjsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAg ICAgICAgYnl0ZTsKKyAgICBlbnVtIEZyYWdtZW50YXRpb25JbmRpY2F0b3IgZnJhZ21lbnRhdGlv bl9pbmRpY2F0b3I7CisgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aF9leHRl bnNpb25fZmxhZzsKKyAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRpb25f ZmxhZzsKKworICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzZW1ibGVyID0gZmluZF9v cl9hbGxvY2F0ZV9hc3NlbWJsZXIoY3R4LCBjdHgtPmN1cnJlbnRfcGlkKTsKKyAgICBpZiAoYXNz ZW1ibGVyID09IE5VTEwpIHJldHVybiBBVkVSUk9SKGVycm5vKTsKKworICAgIEVOU1VSRV9CU19M RUZUKGdiYywgKDIgKyA0ICsgMSArIDEgKyA4KSAvIDgpOworICAgIGJ5dGUgICAgICAgICAgICAg ICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisgICAgZnJhZ21lbnRhdGlvbl9p bmRpY2F0b3IgPSBieXRlID4+IDY7CisgICAgbGVuZ3RoX2V4dGVuc2lvbl9mbGFnICAgPSAoYnl0 ZSA+PiAxKSAmIDE7CisgICAgYWdncmVnYXRpb25fZmxhZyAgICAgICAgPSBieXRlICYgMTsKKwor ICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgMSk7CisKKyAgICBpZiAoKGVyciA9IGNoZWNrX3N0 YXRlKGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVtKSkgPCAwKQorICAgICAgICByZXR1cm4gZXJyOwor CisgICAgaWYgKCFhZ2dyZWdhdGlvbl9mbGFnKQorICAgICAgICByZXR1cm4gYXNzZW1ibGVfZnJh Z21lbnQoCisgICAgICAgICAgICBhc3NlbWJsZXIsIHNlcV9udW0sIGZyYWdtZW50YXRpb25faW5k aWNhdG9yLAorICAgICAgICAgICAgZ2JjLT5idWZmZXIsIGJ5dGVzdHJlYW0yX2dldF9ieXRlc19s ZWZ0KGdiYyksCisgICAgICAgICAgICBwYXJzZV9zaWduYWxsaW5nX21lc3NhZ2UsIGN0eCk7CisK KyAgICBpZiAoZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3IgIT0gTk9UX0ZSQUdNRU5URUQpCisgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOyAvLyBjYW5ub3QgYmUgYm90aCBmcmFnbWVu dGVkIGFuZCBhZ2dyZWdhdGVkCisKKyAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xl ZnQoZ2JjKSA+IDApIHsKKyAgICAgICAgdWludDMyX3QgbGVuZ3RoOworCisgICAgICAgIGlmIChs ZW5ndGhfZXh0ZW5zaW9uX2ZsYWcpCisgICAgICAgICAgICBsZW5ndGggPSBieXRlc3RyZWFtMl9n ZXRfYmUzMihnYmMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsZW5ndGggPSBieXRlc3Ry ZWFtMl9nZXRfYmUxNihnYmMpOworCisgICAgICAgIEVOU1VSRV9CU19MRUZUKGdiYywgbGVuZ3Ro KTsKKyAgICAgICAgaWYgKChlcnIgPSBhc3NlbWJsZV9mcmFnbWVudCgKKyAgICAgICAgICAgIGFz c2VtYmxlciwgc2VxX251bSwgTk9UX0ZSQUdNRU5URUQsCisgICAgICAgICAgICBnYmMtPmJ1ZmZl ciwgbGVuZ3RoLCBwYXJzZV9zaWduYWxsaW5nX21lc3NhZ2UsIGN0eCkpIDwgMCkKKyAgICAgICAg ICAgIHJldHVybiBlcnI7CisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgbGVuZ3RoKTsK KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZmlsbF9wdHNf ZHRzKE1NVFBDb250ZXh0ICpjdHgsIHN0cnVjdCBTdHJlYW1zICpzKSB7CisgICAgc3RydWN0IE1Q VVRpbWVzdGFtcERlc2NyaXB0b3IgICAgICAgICAqZGVzYyAgICAgPSBOVUxMOworICAgIHN0cnVj dCBNUFVFeHRlbmRlZFRpbWVzdGFtcERlc2NyaXB0b3IgKmV4dF9kZXNjID0gTlVMTDsKKyAgICBp bnQ2NF90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aW1lOworICAgIHNpemVfdCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgajsKKworICAgIGZvciAoaSA9IDA7IGkg PCBzLT5udW1fdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpIHsKKyAgICAgICAgaWYgKHMtPnRp bWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcXVlbmNlX251bWJlciA9PSBzLT5sYXN0X3NlcXVlbmNl X251bWJlcikgeworICAgICAgICAgICAgZGVzYyA9IHMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yICsg aTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpID0g MDsgaSA8IHMtPm51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpIHsKKyAgICAgICAg aWYgKHMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXF1ZW5jZV9udW1iZXIgPT0gcy0+ bGFzdF9zZXF1ZW5jZV9udW1iZXIpIHsKKyAgICAgICAgICAgIGV4dF9kZXNjID0gcy0+ZXh0X3Rp bWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg ICAgfQorCisgICAgaWYgKGRlc2MgPT0gTlVMTCB8fCBleHRfZGVzYyA9PSBOVUxMKSByZXR1cm4g RkZFUlJPUl9SRURPOworICAgIHB0aW1lID0gYXZfcmVzY2FsZShkZXNjLT5wcmVzZW50YXRpb25f dGltZSwgcy0+c3RyZWFtLT50aW1lX2Jhc2UuZGVuLCAxMDAwMDAwbGwgKiBzLT5zdHJlYW0tPnRp bWVfYmFzZS5udW0pOworCisgICAgaWYgKHMtPmF1X2NvdW50ID49IGV4dF9kZXNjLT5udW1fb2Zf YXUpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgY3R4LT5wa3Qt PmR0cyA9IHB0aW1lIC0gZXh0X2Rlc2MtPmRlY29kaW5nX3RpbWVfb2Zmc2V0OworCisgICAgZm9y IChqID0gMDsgaiA8IHMtPmF1X2NvdW50OyArK2opCisgICAgICAgIGN0eC0+cGt0LT5kdHMgKz0g ZXh0X2Rlc2MtPmF1W2pdLnB0c19vZmZzZXQ7CisKKyAgICBjdHgtPnBrdC0+cHRzID0gY3R4LT5w a3QtPmR0cyArIGV4dF9kZXNjLT5hdVtzLT5hdV9jb3VudF0uZHRzX3B0c19vZmZzZXQ7CisKKyAg ICArK3MtPmF1X2NvdW50OworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBl bWl0X2Nsb3NlZF9jYXB0aW9uX21mdShNTVRQQ29udGV4dCAqY3R4LCBzdHJ1Y3QgU3RyZWFtcyAq c3QsIEdldEJ5dGVDb250ZXh0ICpnYmMpIHsKKyAgICB1aW50OF90ICBkYXRhX3R5cGUsIHN1YnNh bXBsZV9udW1iZXIsIGxhc3Rfc3Vic2FtcGxlX251bWJlciwgYnl0ZTsKKyAgICB1aW50MzJfdCBk YXRhX3NpemU7CisgICAgc2l6ZV90ICAgaTsKKyAgICBpbnQgICAgICBlcnI7CisgICAgYm9vbCAg ICAgbGVuZ3RoX2V4dF9mbGFnLCBzdWJzYW1wbGVfaW5mb19saXN0X2ZsYWc7CisKKyAgICBhdl9h c3NlcnQwKGN0eC0+cGt0ICE9IE5VTEwpOworCisgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCAoOCAr IDggKyA4ICsgOCArIDQgKyAxICsgMSArIDIpIC8gOCk7CisKKyAgICAvKgorICAgICAqIHNraXA6 CisgICAgICogLSBzdWJ0aXRsZV90YWcKKyAgICAgKiAtIHN1YnRpdGxlX3NlcXVlbmNlX251bWJl cgorICAgICAqLworICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgKDggKyA4KSAvIDgpOworCisg ICAgc3Vic2FtcGxlX251bWJlciAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7Cisg ICAgbGFzdF9zdWJzYW1wbGVfbnVtYmVyID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisK KyAgICBieXRlICAgICAgICAgICAgICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2Jj KTsKKyAgICBkYXRhX3R5cGUgICAgICAgICAgICAgICAgPSBieXRlID4+IDQ7CisgICAgbGVuZ3Ro X2V4dF9mbGFnICAgICAgICAgID0gKGJ5dGUgPj4gMykgJiAxOworICAgIHN1YnNhbXBsZV9pbmZv X2xpc3RfZmxhZyA9IChieXRlID4+IDIpICYgMTsKKworICAgIGlmIChkYXRhX3R5cGUgIT0gMGIw MDAwKSByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7CisKKyAgICBpZiAobGVuZ3RoX2V4dF9m bGFnKQorICAgICAgICBkYXRhX3NpemUgPSBieXRlc3RyZWFtMl9nZXRfYmUzMihnYmMpOworICAg IGVsc2UKKyAgICAgICAgZGF0YV9zaXplID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTYoZ2JjKTsKKwor ICAgIGlmIChzdWJzYW1wbGVfbnVtYmVyID09IDAgJiYgbGFzdF9zdWJzYW1wbGVfbnVtYmVyID4g MCAmJiBzdWJzYW1wbGVfaW5mb19saXN0X2ZsYWcpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IGxhc3Rfc3Vic2FtcGxlX251bWJlcjsgKytpKSB7CisgICAgICAgICAgICAvLyBza2lwOiBzdWJz YW1wbGVfaV9kYXRhX3R5cGUKKyAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoZ2JjLCAoNCAr IDQpIC8gOCk7CisgICAgICAgICAgICAvLyBza2lwOiBzdWJzYW1wbGVfaV9kYXRhX3NpemUKKyAg ICAgICAgICAgIGlmIChsZW5ndGhfZXh0X2ZsYWcpIHsKKyAgICAgICAgICAgICAgICBieXRlc3Ry ZWFtMl9za2lwKGdiYywgMzIgLyA4KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsIDE2IC8gOCk7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBFTlNVUkVfQlNfTEVGVChnYmMsIGRhdGFfc2l6ZSk7CisgICAg aWYgKChlcnIgPSBhdl9uZXdfcGFja2V0KGN0eC0+cGt0LCBkYXRhX3NpemUpKSA8IDApIHJldHVy biBlcnI7CisgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoZ2JjLCBjdHgtPnBrdC0+ZGF0YSwg ZGF0YV9zaXplKTsKKworICAgIGN0eC0+cGt0LT5zdHJlYW1faW5kZXggPSBzdC0+c3RyZWFtLT5p bmRleDsKKyAgICBjdHgtPnBrdC0+ZmxhZ3MgfD0gc3QtPmZsYWdzOworICAgIGN0eC0+cGt0LT5w b3MgICAgICAgICAgPSBzdC0+b2Zmc2V0OworICAgIGN0eC0+cGt0ICAgICAgICAgICAgICAgPSBO VUxMOworCisgICAgc3QtPmZsYWdzICA9IDA7CisgICAgc3QtPm9mZnNldCA9IC0xOworICAgIHJl dHVybiAwOworfQorCitzdGF0aWMgaW50IGVtaXRfcGFja2V0KE1NVFBDb250ZXh0ICpjdHgsIHN0 cnVjdCBTdHJlYW1zICpzdCwgQVZCdWZmZXJSZWYgKmJ1ZikgeworICAgIGludCBlcnI7CisgICAg YXZfYXNzZXJ0MChjdHgtPnBrdCAhPSBOVUxMKTsKKyAgICBhdl9wYWNrZXRfdW5yZWYoY3R4LT5w a3QpOworICAgIGlmICgoZXJyID0gZmlsbF9wdHNfZHRzKGN0eCwgc3QpKSA8IDApIHsKKyAgICAg ICAgYXZfYnVmZmVyX3VucmVmKCZidWYpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAg ICBjdHgtPnBrdC0+YnVmICAgICAgICAgID0gYnVmOworICAgIGN0eC0+cGt0LT5kYXRhICAgICAg ICAgPSBidWYtPmRhdGE7CisgICAgY3R4LT5wa3QtPnNpemUgICAgICAgICA9IGJ1Zi0+c2l6ZSAt IEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkU7CisgICAgY3R4LT5wa3QtPnN0cmVhbV9pbmRl eCA9IHN0LT5zdHJlYW0tPmluZGV4OworICAgIGN0eC0+cGt0LT5mbGFncyB8PSBzdC0+ZmxhZ3M7 CisgICAgY3R4LT5wa3QtPnBvcyAgICAgICAgICA9IHN0LT5vZmZzZXQ7CisgICAgY3R4LT5wa3Qg ICAgICAgICAgICAgICA9IE5VTEw7CisKKyAgICBzdC0+ZmxhZ3MgID0gMDsKKyAgICBzdC0+b2Zm c2V0ID0gLTE7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29uc3VtZV9tZnUoTU1U UENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdiYykgeworICAgIGludCAgICAgICAgICAg IGVycjsKKyAgICBBVkJ1ZmZlclJlZiAgICAqYnVmX3JlZjsKKyAgICB1bnNpZ25lZCBpbnQgICBz aXplOworICAgIHVpbnQ4X3QgICAgICAgIGJ5dGU7CisgICAgc2l6ZV90ICAgICAgICAgb2xkX3Np emU7CisgICAgc3RydWN0IFN0cmVhbXMgKnN0ID0gZmluZF9jdXJyZW50X3N0cmVhbShjdHgpOwor ICAgIGF2X2Fzc2VydDAoc3QgIT0gTlVMTCk7CisKKyAgICBzd2l0Y2ggKHN0LT5zdHJlYW0tPmNv ZGVjcGFyLT5jb2RlY19pZCkgeworICAgIGNhc2UgQVZfQ09ERUNfSURfSEVWQzoKKyAgICAgICAg c2l6ZSA9IGJ5dGVzdHJlYW0yX2dldF9iZTMyKGdiYyk7CisgICAgICAgIGlmIChzaXplICE9IGJ5 dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OworICAgICAgICBpZiAoc2l6ZSA8IDEpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOyAvLyB3 ZSBleHBlY3QgdG8gZXh0cmFjdCBOQUwgdW5pdCBoZWFkZXIgdHlwZSBiZWxvdworICAgICAgICBi eXRlID0gYnl0ZXN0cmVhbTJfcGVla19ieXRldShnYmMpOworICAgICAgICBpZiAoKGJ5dGUgPj4g NykgIT0gMCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7IC8vIGZvcmJpZGRlbl96ZXJvX2Jp dAorCisgICAgICAgIG9sZF9zaXplID0gc3QtPnBlbmRpbmdfYnVmZmVyID09IE5VTEwgPyAwIDog KHN0LT5wZW5kaW5nX2J1ZmZlci0+c2l6ZSAtIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUp OworICAgICAgICBpZiAoKGVyciA9IGF2X2J1ZmZlcl9yZWFsbG9jKCZzdC0+cGVuZGluZ19idWZm ZXIsIG9sZF9zaXplICsgc2l6ZSArIDQgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKSkg PCAwKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgLy8gZml4IHN0YXJ0IGNvZGUg KDAwIDAwIDAwIDAxKQorICAgICAgICBBVl9XQjMyKHN0LT5wZW5kaW5nX2J1ZmZlci0+ZGF0YSAr IG9sZF9zaXplLCAxKTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoZ2JjLCBzdC0+ cGVuZGluZ19idWZmZXItPmRhdGEgKyBvbGRfc2l6ZSArIDQsIHNpemUpOworICAgICAgICBpZiAo KChieXRlID4+IDEpICYgMGIxMTExMTEpIDwgMHgyMCkgeyAvLyBhIFZDTCBOQUwgdW5pdAorICAg ICAgICAgICAgLy8gQmVjYXVzZSB3ZSBjYW4ndCBlbWl0IGEgcGFja2V0IHdpdGhvdXQgYSB2YWxp ZCBQVFMsIHdlIG5lZWQgdG8KKyAgICAgICAgICAgIC8vIGFnZ3JlZ2F0ZSB0aGUgbm9uLVZDTCBO QUwgdW5pdHMgd2l0aCBWQ0wgb25lcy4gQWx0aG91Z2ggd2UgZGlkbid0CisgICAgICAgICAgICAv LyB0ZWNobmljYWxseSBpZGVudGlmeSBhbiBhY2Nlc3MgdW5pdCBoZXJlLCB0aGlzIHdvcmtzIGZv ciBhbGwgc2FtcGxlcworICAgICAgICAgICAgLy8gd2UgaGF2ZS4KKyAgICAgICAgICAgIGJ1Zl9y ZWYgPSBzdC0+cGVuZGluZ19idWZmZXI7CisgICAgICAgICAgICBzdC0+cGVuZGluZ19idWZmZXIg PSBOVUxMOworCisgICAgICAgICAgICBtZW1zZXQoYnVmX3JlZi0+ZGF0YSArIG9sZF9zaXplICsg c2l6ZSArIDQsIDAsIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpOworICAgICAgICAgICAg cmV0dXJuIGVtaXRfcGFja2V0KGN0eCwgc3QsIGJ1Zl9yZWYpOworICAgICAgICB9CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgQVZfQ09ERUNfSURfQUFDX0xBVE06CisgICAgICAgIHNpemUgPSBi eXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpOworICAgICAgICBpZiAoc2l6ZSA+PiAxMykg cmV0dXJuIEFWRVJST1IoRU9WRVJGTE9XKTsKKyAgICAgICAgaWYgKChidWZfcmVmID0gYXZfYnVm ZmVyX2FsbG9jKHNpemUgKyAzICsgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSkpID09IE5V TEwpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBidWZfcmVm LT5kYXRhWzBdID0gMHg1NjsKKyAgICAgICAgYnVmX3JlZi0+ZGF0YVsxXSA9IDB4ZTAgfCAoc2l6 ZSA+PiA4KTsKKyAgICAgICAgYnVmX3JlZi0+ZGF0YVsyXSA9IHNpemUgJiAweGZmOworICAgICAg ICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydShnYmMsIGJ1Zl9yZWYtPmRhdGEgKyAzLCBzaXplKTsK KyAgICAgICAgbWVtc2V0KGJ1Zl9yZWYtPmRhdGEgKyAzICsgc2l6ZSwgMCwgQVZfSU5QVVRfQlVG RkVSX1BBRERJTkdfU0laRSk7CisgICAgICAgIHJldHVybiBlbWl0X3BhY2tldChjdHgsIHN0LCBi dWZfcmVmKTsKKyAgICBjYXNlIEFWX0NPREVDX0lEX1RUTUw6CisgICAgICAgIHJldHVybiBlbWl0 X2Nsb3NlZF9jYXB0aW9uX21mdShjdHgsIHN0LCBnYmMpOworICAgIGRlZmF1bHQ6CisgICAgICAg IHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIGlubGluZSBpbnQgcGFyc2VfbWZ1X3RpbWVkX2RhdGEoCisgICAgTU1UUENvbnRl eHQgKmN0eCwgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3NlbWJsZXIsCisgICAgdWludDMy X3Qgc2VxX251bSwgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIGluZGljYXRvciwgR2V0Qnl0 ZUNvbnRleHQgKmdiYykgeworICAgIGJ5dGVzdHJlYW0yX3NraXAoZ2JjLCAoMzIgKyAzMiArIDMy ICsgOCArIDgpIC8gOCk7CisgICAgcmV0dXJuIGFzc2VtYmxlX2ZyYWdtZW50KAorICAgICAgICBh c3NlbWJsZXIsIHNlcV9udW0sIGluZGljYXRvciwKKyAgICAgICAgZ2JjLT5idWZmZXIsIGJ5dGVz dHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYyksCisgICAgICAgIGNvbnN1bWVfbWZ1LCBjdHgpOwor fQorCitzdGF0aWMgaW5saW5lIGludCBwYXJzZV9tZnVfbm9uX3RpbWVkX2RhdGEoCisgICAgTU1U UENvbnRleHQgKmN0eCwgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3NlbWJsZXIsCisgICAg dWludDMyX3Qgc2VxX251bSwgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIGluZGljYXRvciwg R2V0Qnl0ZUNvbnRleHQgKmdiYykgeworICAgIGJ5dGVzdHJlYW0yX3NraXAoZ2JjLCAzMiAvIDgp OworICAgIHJldHVybiBhc3NlbWJsZV9mcmFnbWVudCgKKyAgICAgICAgYXNzZW1ibGVyLCBzZXFf bnVtLCBpbmRpY2F0b3IsCisgICAgICAgIGdiYy0+YnVmZmVyLCBieXRlc3RyZWFtMl9nZXRfYnl0 ZXNfbGVmdChnYmMpLAorICAgICAgICBjb25zdW1lX21mdSwgY3R4KTsKK30KKworc3RhdGljIGlu bGluZSBpbnQgcGFyc2VfbXB1KE1NVFBDb250ZXh0ICpjdHgsIHVpbnQzMl90IHNlcV9udW0sIEdl dEJ5dGVDb250ZXh0ICpnYmMpIHsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgZXJy OworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICBieXRlLCBmcmFnbWVudF90eXBlOwor ICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICB0aW1lZF9mbGFnOworICAgIGVudW0gRnJh Z21lbnRhdGlvbkluZGljYXRvciBmcmFnbWVudGF0aW9uX2luZGljYXRvcjsKKyAgICBib29sICAg ICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRpb25fZmxhZzsKKyAgICB1aW50MTZfdCAgICAg ICAgICAgICAgICAgICAgbGVuZ3RoOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBt cHVfc2VxdWVuY2VfbnVtYmVyOworICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAgICAqYXNz ZW1ibGVyOworICAgIHN0cnVjdCBTdHJlYW1zICAgICAgICAgICAgICAqc3RyZWFtczsKKworICAg IHN0cmVhbXMgPSBmaW5kX2N1cnJlbnRfc3RyZWFtKGN0eCk7CisgICAgaWYgKHN0cmVhbXMgPT0g TlVMTCkgcmV0dXJuIDA7CisgICAgaWYgKHN0cmVhbXMtPnN0cmVhbS0+ZGlzY2FyZCA+PSBBVkRJ U0NBUkRfQUxMKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGFzc2VtYmxlciA9IGZpbmRfb3Jf YWxsb2NhdGVfYXNzZW1ibGVyKGN0eCwgY3R4LT5jdXJyZW50X3BpZCk7CisgICAgaWYgKGFzc2Vt YmxlciA9PSBOVUxMKSByZXR1cm4gQVZFUlJPUihlcnJubyk7CisKKyAgICBFTlNVUkVfQlNfTEVG VChnYmMsICgxNiArIDQgKyAxICsgMiArIDEgKyA4ICsgMzIpIC8gOCk7CisKKyAgICBsZW5ndGgg PSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKyAgICBpZiAobGVuZ3RoICE9IGJ5dGVzdHJl YW0yX2dldF9ieXRlc19sZWZ0KGdiYykpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworCisgICAgYnl0ZSAgICAgICAgICAgICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0 ZXUoZ2JjKTsKKyAgICBmcmFnbWVudF90eXBlICAgICAgICAgICA9IGJ5dGUgPj4gNDsKKyAgICB0 aW1lZF9mbGFnICAgICAgICAgICAgICA9IChieXRlID4+IDMpICYgMTsKKyAgICBmcmFnbWVudGF0 aW9uX2luZGljYXRvciA9IChieXRlID4+IDEpICYgMGIxMTsKKyAgICBhZ2dyZWdhdGlvbl9mbGFn ICAgICAgICA9IGJ5dGUgJiAxOworCisgICAgLy8gc2tpcDogZnJhZ21lbnRfY291bnRlcgorICAg IGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgMSk7CisKKyAgICBtcHVfc2VxdWVuY2VfbnVtYmVyID0g Ynl0ZXN0cmVhbTJfZ2V0X2JlMzJ1KGdiYyk7CisKKyAgICBpZiAoYWdncmVnYXRpb25fZmxhZyAm JiBmcmFnbWVudGF0aW9uX2luZGljYXRvciAhPSBOT1RfRlJBR01FTlRFRCkKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7IC8vIGNhbm5vdCBiZSBib3RoIGZyYWdtZW50ZWQgYW5k IGFnZ3JlZ2F0ZWQKKworICAgIGlmIChmcmFnbWVudF90eXBlICE9IDIpIHJldHVybiAwOworCisg ICAgaWYgKGFzc2VtYmxlci0+c3RhdGUgPT0gSU5JVCAmJiAhY3R4LT5pc19yYXApIHsKKyAgICAg ICAgLy8gd2FpdCBmb3IgdGhlIGZpcnN0IFJBUAorICAgICAgICByZXR1cm4gRkZFUlJPUl9SRURP OworICAgIH0KKworICAgIGlmIChhc3NlbWJsZXItPnN0YXRlID09IElOSVQpIHsKKyAgICAgICAg c3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIgPSBtcHVfc2VxdWVuY2VfbnVtYmVyOworICAg IH0gZWxzZSBpZiAobXB1X3NlcXVlbmNlX251bWJlciA9PSBzdHJlYW1zLT5sYXN0X3NlcXVlbmNl X251bWJlciArIDEpIHsKKyAgICAgICAgc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIgPSBt cHVfc2VxdWVuY2VfbnVtYmVyOworICAgICAgICBzdHJlYW1zLT5hdV9jb3VudCAgICAgICAgICAg ICA9IDA7CisgICAgfSBlbHNlIGlmIChtcHVfc2VxdWVuY2VfbnVtYmVyICE9IHN0cmVhbXMtPmxh c3Rfc2VxdWVuY2VfbnVtYmVyKSB7CisgICAgICAgIGF2X2xvZyhzdHJlYW1zLT5zdHJlYW0sIEFW X0xPR19FUlJPUiwgIk1QVSBzZXF1ZW5jZSBudW1iZXIganVtcDogJXUgKyAxICE9ICV1XG4iLAor ICAgICAgICAgICAgICAgc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIsIG1wdV9zZXF1ZW5j ZV9udW1iZXIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisK KyAgICBpZiAoKGVyciA9IGNoZWNrX3N0YXRlKGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVtKSkgPCAw KQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgaWYgKGZyYWdtZW50YXRpb25faW5kaWNhdG9y ID09IE5PVF9GUkFHTUVOVEVEIHx8IGZyYWdtZW50YXRpb25faW5kaWNhdG9yID09IEZJUlNUX0ZS QUdNRU5UKQorICAgICAgICBzdHJlYW1zLT5vZmZzZXQgPSBjdHgtPnBrdC0+cG9zOworCisgICAg aWYgKGN0eC0+aXNfcmFwKQorICAgICAgICBzdHJlYW1zLT5mbGFncyB8PSBBVl9QS1RfRkxBR19L RVk7CisKKyAgICBpZiAodGltZWRfZmxhZykgeworICAgICAgICBpZiAoYWdncmVnYXRpb25fZmxh ZykgeworICAgICAgICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykg PiAwKSB7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTYoZ2Jj KTsKKyAgICAgICAgICAgICAgICBFTlNVUkVfQlNfTEVGVChnYmMsIGxlbmd0aCk7CisgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOworICAg ICAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgbGVu Z3RoKTsKKworICAgICAgICAgICAgICAgICAgICBlcnIgPSBwYXJzZV9tZnVfdGltZWRfZGF0YShj dHgsIGFzc2VtYmxlciwgc2VxX251bSwgTk9UX0ZSQUdNRU5URUQsICZuZ2JjKTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKGVyciA8IDApIHJldHVybiBlcnI7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgbGVuZ3RoKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZV9tZnVfdGlt ZWRfZGF0YShjdHgsIGFzc2VtYmxlciwgc2VxX251bSwgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3Is IGdiYyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYWdncmVnYXRpb25f ZmxhZykgeworICAgICAgICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdi YykgPiAwKSB7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTYo Z2JjKTsKKyAgICAgICAgICAgICAgICBFTlNVUkVfQlNfTEVGVChnYmMsIGxlbmd0aCk7CisgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOwor ICAgICAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwg bGVuZ3RoKTsKKworICAgICAgICAgICAgICAgICAgICBlcnIgPSBwYXJzZV9tZnVfbm9uX3RpbWVk X2RhdGEoY3R4LCBhc3NlbWJsZXIsIHNlcV9udW0sIE5PVF9GUkFHTUVOVEVELCAmbmdiYyk7Cisg ICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKSByZXR1cm4gZXJyOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGxlbmd0aCk7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2Vf bWZ1X25vbl90aW1lZF9kYXRhKGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVtLCBmcmFnbWVudGF0aW9u X2luZGljYXRvciwgZ2JjKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQor CitNTVRQQ29udGV4dCAqYXZwcml2X21tdHBfcGFyc2Vfb3BlbihBVlByb2dyYW0gKnByb2dyYW0p IHsKKyAgICBNTVRQQ29udGV4dCAqY3R4ID0gYXZfbWFsbG9jeihzaXplb2YoTU1UUENvbnRleHQp KTsKKyAgICBpZiAoY3R4ID09IE5VTEwpIHJldHVybiBOVUxMOworICAgIGN0eC0+cHJvZ3JhbSA9 IHByb2dyYW07CisgICAgcmV0dXJuIGN0eDsKK30KKworaW50IGF2cHJpdl9tbXRwX3BhcnNlX3Bh Y2tldChNTVRQQ29udGV4dCAqY3R4LCBBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3Qs IGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDE2X3Qgc2l6ZSkgeworICAgIGJvb2wgICAgIHBhY2tl dF9jb3VudGVyX2ZsYWc7CisgICAgYm9vbCAgICAgZXh0ZW5zaW9uX2hlYWRlcl9mbGFnOworICAg IHVpbnQ4X3QgIHBheWxvYWRfdHlwZTsKKyAgICB1aW50MzJfdCBwYWNrZXRfc2VxdWVuY2VfbnVt YmVyOworICAgIHVpbnQ4X3QgIGJ5dGU7CisgICAgaW50ICAgICAgZXJyID0gMDsKKworICAgIEdl dEJ5dGVDb250ZXh0IGdiYzsKKworICAgIGN0eC0+cyAgID0gczsKKyAgICBjdHgtPnBrdCA9IHBr dDsKKworICAgIGJ5dGVzdHJlYW0yX2luaXQoJmdiYywgYnVmLCBzaXplKTsKKyAgICBFTlNVUkVf QlNfTEVGVCgmZ2JjLCAoMiArIDEgKyAyICsgMSArIDEgKyAxICsgMiArIDYgKyAxNiArIDMyICsg MzIpIC8gOCk7CisKKyAgICBieXRlICAgICAgICAgICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRf Ynl0ZXUoJmdiYyk7CisgICAgcGFja2V0X2NvdW50ZXJfZmxhZyAgID0gKGJ5dGUgPj4gNSkgJiAx OworICAgIGV4dGVuc2lvbl9oZWFkZXJfZmxhZyA9IChieXRlID4+IDEpICYgMTsKKyAgICBjdHgt PmlzX3JhcCAgICAgICAgICAgPSBieXRlICYgMTsKKworICAgIGJ5dGUgICAgICAgICA9IGJ5dGVz dHJlYW0yX2dldF9ieXRldSgmZ2JjKTsKKyAgICBwYXlsb2FkX3R5cGUgPSBieXRlICYgMGIxMTEx MTE7CisKKyAgICBjdHgtPmN1cnJlbnRfcGlkID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZnYmMp OworCisgICAgLy8gc2tpcDogZGlzdHJpYnV0ZV90aW1lc3RhbXAKKyAgICBieXRlc3RyZWFtMl9z a2lwdSgmZ2JjLCA0KTsKKworICAgIHBhY2tldF9zZXF1ZW5jZV9udW1iZXIgPSBieXRlc3RyZWFt Ml9nZXRfYmUzMnUoJmdiYyk7CisKKyAgICBpZiAocGFja2V0X2NvdW50ZXJfZmxhZykKKyAgICAg ICAgYnl0ZXN0cmVhbTJfc2tpcCgmZ2JjLCA0KTsKKworICAgIGlmIChleHRlbnNpb25faGVhZGVy X2ZsYWcpIHsKKyAgICAgICAgdWludDE2X3QgZXh0ZW5zaW9uX2hlYWRlcl9sZW5ndGg7CisgICAg ICAgIC8vIHNraXA6IGV4dGVuc2lvbl90eXBlCisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJmdi YywgMik7CisgICAgICAgIGV4dGVuc2lvbl9oZWFkZXJfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0 X2JlMTYoJmdiYyk7CisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJmdiYywgZXh0ZW5zaW9uX2hl YWRlcl9sZW5ndGgpOworICAgIH0KKworICAgIHN3aXRjaCAocGF5bG9hZF90eXBlKSB7CisgICAg Y2FzZSAweDAwOiAvLyBNUFUKKyAgICAgICAgaWYgKHBrdCAhPSBOVUxMKQorICAgICAgICAgICAg ZXJyID0gcGFyc2VfbXB1KGN0eCwgcGFja2V0X3NlcXVlbmNlX251bWJlciwgJmdiYyk7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgMHgwMjogLy8gc2lnbmFsbGluZyBtZXNzYWdlcworICAgICAg ICBlcnIgPSBwYXJzZV9zaWduYWxsaW5nX21lc3NhZ2VzKGN0eCwgcGFja2V0X3NlcXVlbmNlX251 bWJlciwgJmdiYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoZXJyIDwgMCkgcmV0 dXJuIGVycjsKKyAgICByZXR1cm4gY3R4LT5wa3QgPT0gTlVMTCA/IDAgOiBGRkVSUk9SX1JFRE87 Cit9CisKK3ZvaWQgYXZwcml2X21tdHBfcmVzZXRfc3RhdGUoTU1UUENvbnRleHQgKmN0eCkgewor ICAgIHN0cnVjdCBTdHJlYW1zICAgICAgICAgICAqc3RyZWFtczsKKyAgICBzdHJ1Y3QgRnJhZ21l bnRBc3NlbWJsZXIgKmFzc2VtYmxlcjsKKworICAgIGZvciAoYXNzZW1ibGVyID0gY3R4LT5hc3Nl bWJsZXI7IGFzc2VtYmxlciAhPSBOVUxMOyBhc3NlbWJsZXIgPSBhc3NlbWJsZXItPm5leHQpIHsK KyAgICAgICAgYXNzZW1ibGVyLT5zdGF0ZSA9IElOSVQ7CisgICAgICAgIGFzc2VtYmxlci0+c2l6 ZSAgPSAwOworICAgIH0KKyAgICBmb3IgKHN0cmVhbXMgPSBjdHgtPnN0cmVhbXM7IHN0cmVhbXMg IT0gTlVMTDsgc3RyZWFtcyA9IHN0cmVhbXMtPm5leHQpIHsKKyAgICAgICAgc3RyZWFtcy0+bGFz dF9zZXF1ZW5jZV9udW1iZXIgPSAwOworICAgICAgICBzdHJlYW1zLT5hdV9jb3VudCAgICAgICAg ICAgICA9IDA7CisgICAgICAgIHN0cmVhbXMtPmZsYWdzICAgICAgICAgICAgICAgID0gMDsKKyAg ICAgICAgc3RyZWFtcy0+b2Zmc2V0ICAgICAgICAgICAgICAgPSAtMTsKKyAgICAgICAgYXZfYnVm ZmVyX3VucmVmKCZzdHJlYW1zLT5wZW5kaW5nX2J1ZmZlcik7CisgICAgfQorfQorCit2b2lkIGF2 cHJpdl9tbXRwX3BhcnNlX2Nsb3NlKE1NVFBDb250ZXh0ICpjdHgpIHsKKyAgICBzdHJ1Y3QgRnJh Z21lbnRBc3NlbWJsZXIgKmFzczsKKyAgICBzdHJ1Y3QgU3RyZWFtcyAgICAgICAgICAgKnN0cmVh bXM7CisKKyAgICBmb3IgKGFzcyA9IGN0eC0+YXNzZW1ibGVyOyBhc3MgIT0gTlVMTDspIHsKKyAg ICAgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICpuZXh0ID0gYXNzLT5uZXh0OworICAgICAg ICBpZiAoYXNzLT5kYXRhICE9IE5VTEwpCisgICAgICAgICAgICBhdl9mcmVlKGFzcy0+ZGF0YSk7 CisgICAgICAgIGF2X2ZyZWUoYXNzKTsKKyAgICAgICAgYXNzID0gbmV4dDsKKyAgICB9CisKKyAg ICBmb3IgKHN0cmVhbXMgPSBjdHgtPnN0cmVhbXM7IHN0cmVhbXMgIT0gTlVMTDspIHsKKyAgICAg ICAgc3RydWN0IFN0cmVhbXMgKm5leHQgPSBzdHJlYW1zLT5uZXh0OworICAgICAgICBpZiAoc3Ry ZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3IgIT0gTlVMTCkKKyAgICAgICAgICAgIGF2X2ZyZWUo c3RyZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3IpOworICAgICAgICBpZiAoc3RyZWFtcy0+ZXh0 X3RpbWVzdGFtcF9kZXNjcmlwdG9yICE9IE5VTEwpCisgICAgICAgICAgICBhdl9mcmVlKHN0cmVh bXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvcik7CisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigm c3RyZWFtcy0+cGVuZGluZ19idWZmZXIpOworICAgICAgICBhdl9mcmVlKHN0cmVhbXMpOworICAg ICAgICBzdHJlYW1zID0gbmV4dDsKKyAgICB9CisKKyAgICBhdl9mcmVlKGN0eCk7Cit9CmRpZmYg LS1naXQgYS9saWJhdmZvcm1hdC9tbXRwLmggYi9saWJhdmZvcm1hdC9tbXRwLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTRlMjRjNjA2OQotLS0gL2Rldi9udWxsCisr KyBiL2xpYmF2Zm9ybWF0L21tdHAuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogTVBFRyBNZWRp YSBUcmFuc3BvcnQgUHJvdG9jb2wgKE1NVFApIHBhcnNlciwgYXMgZGVmaW5lZCBpbiBJU08vSUVD IDIzMDA4LTEuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjMgU3VwZXJGYXNoaQorICoKKyAqIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug YWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv biwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworI2lmbmRlZiBBVkZPUk1BVF9NTVRQX0gKKyNkZWZp bmUgQVZGT1JNQVRfTU1UUF9ICisKKyNpbmNsdWRlICJhdmZvcm1hdC5oIgorCit0eXBlZGVmIHN0 cnVjdCBNTVRQQ29udGV4dCBNTVRQQ29udGV4dDsKKworLyoqCisgKiBPcGVuIGFuIE1NVCBwcm90 b2NvbCBwYXJzZXIgY29udGV4dC4KKyAqIEBwYXJhbSBwcm9ncmFtIFRoZSBBVlByb2dyYW0gdGhp cyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aC4KKyAqIEByZXR1cm4gQSBuZXcgTU1UUENvbnRl eHQsIG9yIE5VTEwgb24gYWxsb2NhdGlvbiBlcnJvci4KKyAqLworTU1UUENvbnRleHQgKmF2cHJp dl9tbXRwX3BhcnNlX29wZW4oQVZQcm9ncmFtICpwcm9ncmFtKTsKKworLyoqCisgKiBQYXJzZSBh biBNTVQgcHJvdG9jb2wgcGFja2V0LgorICoKKyAqIEBwYXJhbSBjdHggVGhlIE1NVCBwcm90b2Nv bCBwYXJzZXIgY29udGV4dC4KKyAqIEBwYXJhbSBzIFRoZSBBVkZvcm1hdENvbnRleHQuCisgKiBA cGFyYW0gcGt0IFRoZSBBVlBhY2tldCB0byBmaWxsLgorICogQHBhcmFtIGJ1ZiBUaGUgcGFja2V0 IGRhdGEuCisgKiBAcGFyYW0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgcGFja2V0IGRhdGEuCisgKiBA cmV0dXJuIDAgaWYgYSBuZXcgQVZQYWNrZXQgaXMgZW1pdHRlZCwgRkZFUlJPUl9SRURPIGlmIHRo ZSBuZXh0IHBhY2tldCBpcyBuZWVkZWQsIG9yIGFub3RoZXIgbmVnYXRpdmUgdmFsdWUgb24gZXJy b3IuCisgKi8KK2ludCBhdnByaXZfbW10cF9wYXJzZV9wYWNrZXQoTU1UUENvbnRleHQgKmN0eCwg QVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0LCBjb25zdCB1aW50OF90ICpidWYsIHVp bnQxNl90IHNpemUpOworCisvKioKKyAqIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgTU1UUCBwYXJz ZXIuIFVzZWZ1bCB3aGVuIHNlZWtpbmcuCisgKgorICogQHBhcmFtIGN0eCBUaGUgTU1UIHByb3Rv Y29sIHBhcnNlciBjb250ZXh0LgorICovCit2b2lkIGF2cHJpdl9tbXRwX3Jlc2V0X3N0YXRlKE1N VFBDb250ZXh0ICpjdHgpOworCisvKioKKyAqIENsb3NlIGFuIE1NVCBwcm90b2NvbCBwYXJzZXIg Y29udGV4dCwgZnJlZXMgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICoKKyAqIEBwYXJhbSBj dHggVGhlIE1NVCBwcm90b2NvbCBwYXJzZXIgY29udGV4dC4KKyAqLwordm9pZCBhdnByaXZfbW10 cF9wYXJzZV9jbG9zZShNTVRQQ29udGV4dCAqY3R4KTsKKworI2VuZGlmIC8qIEFWRk9STUFUX01N VFBfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW10dGx2LmMgYi9saWJhdmZvcm1hdC9t bXR0bHYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jMGIyNWRmN2Fm Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmb3JtYXQvbW10dGx2LmMKQEAgLTAsMCArMSwzMjQg QEAKKy8qCisgKiBNTVQgcHJvdG9jb2wgb3ZlciBUTFYgcGFja2V0cyAoTU1UL1RMVikgZGVtdXhl ciwgYXMgZGVmaW5lZCBpbiBBUklCIFNURC1CMzIuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjMgU3Vw ZXJGYXNoaQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1w ZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVk ZSAibGliYXZ1dGlsL2ludHJlYWR3cml0ZS5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2Vy dC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImF2aW9faW50 ZXJuYWwuaCIKKyNpbmNsdWRlICJhdmZvcm1hdC5oIgorI2luY2x1ZGUgIm1tdHAuaCIKKyNpbmNs dWRlICJkZW11eC5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNkZWZpbmUgSEVBREVSX0JZ VEUgMGIwMTExMTExMQorCitlbnVtIHsKKyAgICBVTkRFRklORURfUEFDS0VUICAgICAgICAgICAg PSAweDAwLAorICAgIElQVjRfUEFDS0VUICAgICAgICAgICAgICAgICA9IDB4MDEsCisgICAgSVBW Nl9QQUNLRVQgICAgICAgICAgICAgICAgID0gMHgwMiwKKyAgICBIRUFERVJfQ09NUFJFU1NFRF9J UF9QQUNLRVQgPSAweDAzLAorICAgIFRSQU5TTUlTU0lPTl9DT05UUk9MX1BBQ0tFVCA9IDB4RkUs CisgICAgTlVMTF9QQUNLRVQgICAgICAgICAgICAgICAgID0gMHhGRiwKK307CisKK2VudW0gewor ICAgIENPTlRFWFRfSURFTlRJRklDQVRJT05fUEFSVElBTF9JUFY0X0FORF9QQVJUSUFMX1VEUF9I RUFERVIgPSAweDIwLAorICAgIENPTlRFWFRfSURFTlRJRklDQVRJT05fSVBWNF9IRUFERVIgICAg ICAgICAgICAgICAgICAgICAgICAgPSAweDIxLAorICAgIENPTlRFWFRfSURFTlRJRklDQVRJT05f UEFSVElBTF9JUFY2X0FORF9QQVJUSUFMX1VEUF9IRUFERVIgPSAweDYwLAorICAgIENPTlRFWFRf SURFTlRJRklDQVRJT05fTk9fQ09NUFJFU1NFRF9IRUFERVIgICAgICAgICAgICAgICAgPSAweDYx LAorfTsKKworc3RhdGljIGludCBtbXR0bHZfcHJvYmUoY29uc3QgQVZQcm9iZURhdGEgKnApIHsK KyAgICBzaXplX3QgICBpLCBqOworICAgIHVpbnQ4X3QgIHBhY2tldF90eXBlOworICAgIHVpbnQx Nl90IGRhdGFfbGVuZ3RoOworCisgICAgaW50IHByb2Nlc3NlZCAgPSAwOworICAgIGludCByZWNv Z25pemVkID0gMDsKKworICAgIGZvciAoaSA9IDA7IGkgKyA0IDwgcC0+YnVmX3NpemUgJiYgcHJv Y2Vzc2VkIDwgMTAwOyArK3Byb2Nlc3NlZCkgeworICAgICAgICBpZiAocC0+YnVmW2ldICE9IEhF QURFUl9CWVRFKSByZXR1cm4gMDsKKworICAgICAgICBwYWNrZXRfdHlwZSA9IHAtPmJ1ZltpICsg MV07CisgICAgICAgIGRhdGFfbGVuZ3RoID0gQVZfUkIxNihwLT5idWYgKyBpICsgMik7CisgICAg ICAgIGkgKz0gNDsKKworICAgICAgICBpZiAocGFja2V0X3R5cGUgPT0gSEVBREVSX0NPTVBSRVNT RURfSVBfUEFDS0VUKSB7CisgICAgICAgICAgICBpZiAoZGF0YV9sZW5ndGggPCAzIHx8IGkgKyAy ID49IHAtPmJ1Zl9zaXplKSBnb3RvIHNraXA7CisgICAgICAgICAgICBzd2l0Y2ggKHAtPmJ1Zltp ICsgMl0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9QQVJUSUFM X0lQVjRfQU5EX1BBUlRJQUxfVURQX0hFQURFUjoKKyAgICAgICAgICAgIGNhc2UgQ09OVEVYVF9J REVOVElGSUNBVElPTl9JUFY0X0hFQURFUjoKKyAgICAgICAgICAgIGNhc2UgQ09OVEVYVF9JREVO VElGSUNBVElPTl9QQVJUSUFMX0lQVjZfQU5EX1BBUlRJQUxfVURQX0hFQURFUjoKKyAgICAgICAg ICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9OT19DT01QUkVTU0VEX0hFQURFUjoKKyAg ICAgICAgICAgICAgICArK3JlY29nbml6ZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz ZSBpZiAocGFja2V0X3R5cGUgPT0gTlVMTF9QQUNLRVQpIHsKKyAgICAgICAgICAgIC8vIG51bGwg cGFja2V0cyBzaG91bGQgY29udGFpbiBhbGwgMHhGRnMKKyAgICAgICAgICAgIGZvciAoaiA9IGk7 IGogPCBpICsgZGF0YV9sZW5ndGggJiYgaiA8IHAtPmJ1Zl9zaXplOyArK2opIHsKKyAgICAgICAg ICAgICAgICBpZiAocC0+YnVmW2pdICE9IDB4RkYpIGdvdG8gc2tpcDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgICsrcmVjb2duaXplZDsKKyAgICAgICAgfQorCisgICAgICAgIHNraXA6Cisg ICAgICAgIGkgKz0gZGF0YV9sZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIHJlY29nbml6ZWQg KiBBVlBST0JFX1NDT1JFX01BWCAvIEZGTUFYKHByb2Nlc3NlZCwgMTApOworfQorCitzdHJ1Y3Qg TU1UVExWQ29udGV4dCB7CisgICAgc3RydWN0IFByb2dyYW0geworICAgICAgICB1aW50MzJfdCAg ICAgICBjaWQ7CisgICAgICAgIE1NVFBDb250ZXh0ICAgICptbXRwOworICAgICAgICBzdHJ1Y3Qg UHJvZ3JhbSAqbmV4dDsKKyAgICB9ICpwcm9ncmFtczsKKworICAgIGludDY0X3QgbGFzdF9wb3M7 CisgICAgc2l6ZV90ICByZXN5bmNfc2l6ZTsKKworICAgIHNpemVfdCAgY2FwOworICAgIHVpbnQ4 X3QgKmJ1ZjsKK307CisKK3N0YXRpYyBpbnQgbW10dGx2X3JlYWRfY29tcHJlc3NlZF9pcF9wYWNr ZXQoCisgICAgc3RydWN0IE1NVFRMVkNvbnRleHQgKmN0eCwgQVZGb3JtYXRDb250ZXh0ICpzLCBB VlBhY2tldCAqcGt0LCBjb25zdCB1aW50OF90ICpidWYsIHVpbnQxNl90IHNpemUpIHsKKyAgICAv LyBwYXJ0aWFsIHVkcCBoZWFkZXIgYXJlIHVkcCBoZWFkZXIgd2l0aG91dCBkYXRhIGxlbmd0aCAo MTYgYml0cykgYW5kIGNoZWNrc3VtICgxNiBiaXRzKQorI2RlZmluZSBQQVJUSUFMX1VEUF9IRUFE RVJfTEVOR1RIICg4IC0gNCkKKyAgICAvLyBwYXJ0aWFsIGlwdjYgaGVhZGVyIGFyZSBpcHY2IGhl YWRlciB3aXRob3V0IHBheWxvYWQgbGVuZ3RoICgxNiBiaXRzKQorI2RlZmluZSBQQVJUSUFMX0lQ VjZfSEVBREVSX0xFTkdUSCAoNDAgLSAyKQorCisgICAgdWludDMyX3QgICAgICAgY29udGV4dF9p ZDsKKyAgICBzdHJ1Y3QgUHJvZ3JhbSAqcHJvZ3JhbTsKKworICAgIGlmIChzaXplIDwgMykKKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgY29udGV4dF9pZCA9IEFWX1JC MTYoYnVmKSA+PiA0OworICAgIGJ1ZiArPSAzOworICAgIHNpemUgLT0gMzsKKworICAgIGZvciAo cHJvZ3JhbSA9IGN0eC0+cHJvZ3JhbXM7IHByb2dyYW0gIT0gTlVMTDsgcHJvZ3JhbSA9IHByb2dy YW0tPm5leHQpCisgICAgICAgIGlmIChwcm9ncmFtLT5jaWQgPT0gY29udGV4dF9pZCkKKyAgICAg ICAgICAgIGJyZWFrOworCisgICAgaWYgKHByb2dyYW0gPT0gTlVMTCkgeworICAgICAgICBBVlBy b2dyYW0gKnAgPSBhdl9uZXdfcHJvZ3JhbShzLCBjb250ZXh0X2lkKTsKKyAgICAgICAgaWYgKHAg PT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoZXJybm8pOworCisgICAgICAgIHByb2dyYW0gPSBhdl9t YWxsb2Moc2l6ZW9mKHN0cnVjdCBQcm9ncmFtKSk7CisgICAgICAgIGlmIChwcm9ncmFtID09IE5V TEwpIHJldHVybiBBVkVSUk9SKGVycm5vKTsKKworICAgICAgICBwcm9ncmFtLT5tbXRwID0gYXZw cml2X21tdHBfcGFyc2Vfb3BlbihwKTsKKyAgICAgICAgcHJvZ3JhbS0+bmV4dCA9IGN0eC0+cHJv Z3JhbXM7CisgICAgICAgIGN0eC0+cHJvZ3JhbXMgPSBwcm9ncmFtOworICAgICAgICBwcm9ncmFt LT5jaWQgID0gY29udGV4dF9pZDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGJ1ZlstMV0pIHsKKyAg ICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fUEFSVElBTF9JUFY0X0FORF9QQVJUSUFMX1VE UF9IRUFERVI6CisgICAgY2FzZSBDT05URVhUX0lERU5USUZJQ0FUSU9OX0lQVjRfSEVBREVSOgor ICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7CisgICAgY2FzZSBDT05URVhUX0lE RU5USUZJQ0FUSU9OX1BBUlRJQUxfSVBWNl9BTkRfUEFSVElBTF9VRFBfSEVBREVSOgorICAgICAg ICBpZiAoc2l6ZSA8IFBBUlRJQUxfSVBWNl9IRUFERVJfTEVOR1RIICsgUEFSVElBTF9VRFBfSEVB REVSX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg ICAgICBzaXplIC09IFBBUlRJQUxfSVBWNl9IRUFERVJfTEVOR1RIICsgUEFSVElBTF9VRFBfSEVB REVSX0xFTkdUSDsKKyAgICAgICAgYnVmICs9IFBBUlRJQUxfSVBWNl9IRUFERVJfTEVOR1RIICsg UEFSVElBTF9VRFBfSEVBREVSX0xFTkdUSDsKKyAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJ T05fTk9fQ09NUFJFU1NFRF9IRUFERVI6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKworICAgIHJldHVybiBh dnByaXZfbW10cF9wYXJzZV9wYWNrZXQocHJvZ3JhbS0+bW10cCwgcywgcGt0LCBidWYsIHNpemUp OworfQorCitzdGF0aWMgaW50IG1tdHRsdl9yZWFkX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMs IEFWUGFja2V0ICpwa3QpIHsKKyAgICB1aW50OF90ICAgICAgICAgICAgICBoZWFkZXJbNF07Cisg ICAgdWludDE2X3QgICAgICAgICAgICAgc2l6ZTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBl cnI7CisgICAgc3RydWN0IE1NVFRMVkNvbnRleHQgKmN0eCA9IHMtPnByaXZfZGF0YTsKKyAgICBp bnQ2NF90ICAgICAgICAgICAgICBwb3MgID0gYXZpb190ZWxsKHMtPnBiKTsKKworICAgIGlmIChw b3MgPCAwKSByZXR1cm4gKGludCkgcG9zOworICAgIGlmIChwb3MgIT0gY3R4LT5sYXN0X3Bvcykg eworICAgICAgICBjdHgtPmxhc3RfcG9zID0gcG9zOworCisgICAgICAgIHdoaWxlIChwb3MgLSBj dHgtPmxhc3RfcG9zIDwgY3R4LT5yZXN5bmNfc2l6ZSkgeworICAgICAgICAgICAgaWYgKChlcnIg PSBmZmlvX2Vuc3VyZV9zZWVrYmFjayhzLT5wYiwgNCkpIDwgMCkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gZXJyOworCisgICAgICAgICAgICBpZiAoKGVyciA9IGF2aW9fcmVhZChzLT5wYiwgaGVh ZGVyLCA0KSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBhdmlvX2Zlb2Yocy0+cGIpID8g QVZFUlJPUl9FT0YgOiBlcnI7CisKKyAgICAgICAgICAgIGlmIChoZWFkZXJbMF0gIT0gSEVBREVS X0JZVEUpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHBvcyA9IGF2aW9fc2VlayhzLT5wYiwgLTMs IFNFRUtfQ1VSKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGludCkgcG9zOwor ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz aXplID0gQVZfUkIxNihoZWFkZXIgKyAyKTsKKworICAgICAgICAgICAgaWYgKChwb3MgPSBhdmlv X3NlZWsocy0+cGIsIC00LCBTRUVLX0NVUikpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4g KGludCkgcG9zOworCisgICAgICAgICAgICBpZiAoKGVyciA9IGZmaW9fZW5zdXJlX3NlZWtiYWNr KHMtPnBiLCA0ICsgc2l6ZSArIDEpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsK KworICAgICAgICAgICAgaWYgKChwb3MgPSBhdmlvX3NraXAocy0+cGIsIDQgKyBzaXplKSkgPCAw KQorICAgICAgICAgICAgICAgIHJldHVybiAoaW50KSBwb3M7CisKKyAgICAgICAgICAgIGlmICgo ZXJyID0gYXZpb19yZWFkKHMtPnBiLCBoZWFkZXIsIDEpKSA8IDApCisgICAgICAgICAgICAgICAg cmV0dXJuIGF2aW9fZmVvZihzLT5wYikgPyBBVkVSUk9SX0VPRiA6IGVycjsKKworICAgICAgICAg ICAgaWYgKGhlYWRlclswXSA9PSBIRUFERVJfQllURSkgeworICAgICAgICAgICAgICAgIC8vIGZv dW5kIEhFQURFUiwgW3NpemVdLCBIRUFERVIsIHNob3VsZCBiZSBnb29kCisgICAgICAgICAgICAg ICAgaWYgKChwb3MgPSBhdmlvX3NlZWsocy0+cGIsIC1zaXplIC0gMSAtIDQsIFNFRUtfQ1VSKSkg PCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGludCkgcG9zOworICAgICAgICAgICAg ICAgIGdvdG8gc3VjY2VzczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChwb3Mg PSBhdmlvX3NlZWsocy0+cGIsIC1zaXplIC0gMSAtIDMsIFNFRUtfQ1VSKSkgPCAwKQorICAgICAg ICAgICAgICAgIHJldHVybiAoaW50KSBwb3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisKKyAgICAgICAgc3VjY2VzczoKKyAgICAgICAgY3R4LT5sYXN0 X3BvcyA9IHBvczsKKworICAgICAgICBmb3IgKHN0cnVjdCBQcm9ncmFtICpwcm9ncmFtID0gY3R4 LT5wcm9ncmFtczsgcHJvZ3JhbSAhPSBOVUxMOyBwcm9ncmFtID0gcHJvZ3JhbS0+bmV4dCkKKyAg ICAgICAgICAgIGF2cHJpdl9tbXRwX3Jlc2V0X3N0YXRlKHByb2dyYW0tPm1tdHApOworICAgIH0K KworICAgIGlmIChwa3QgIT0gTlVMTCkgcGt0LT5wb3MgPSBjdHgtPmxhc3RfcG9zOworICAgIGlm ICgoZXJyID0gZmZpb19yZWFkX3NpemUocy0+cGIsIGhlYWRlciwgNCkpIDwgMCkKKyAgICAgICAg cmV0dXJuIGF2aW9fZmVvZihzLT5wYikgPyBBVkVSUk9SX0VPRiA6IGVycjsKKyAgICBjdHgtPmxh c3RfcG9zICs9IDQ7CisKKyAgICBpZiAoaGVhZGVyWzBdICE9IEhFQURFUl9CWVRFKQorICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIHNpemUgPSBBVl9SQjE2KGhlYWRl ciArIDIpOworICAgIGlmIChoZWFkZXJbMV0gIT0gSEVBREVSX0NPTVBSRVNTRURfSVBfUEFDS0VU KSB7CisgICAgICAgIGlmICgoY3R4LT5sYXN0X3BvcyA9IGF2aW9fc2tpcChzLT5wYiwgc2l6ZSkp IDwgMCkKKyAgICAgICAgICAgIHJldHVybiAoaW50KSBjdHgtPmxhc3RfcG9zOworICAgICAgICBy ZXR1cm4gRkZFUlJPUl9SRURPOworICAgIH0KKworICAgIGlmIChjdHgtPmNhcCA8IHNpemUpIHsK KyAgICAgICAgaWYgKGN0eC0+YnVmICE9IE5VTEwpCisgICAgICAgICAgICBhdl9mcmVlKGN0eC0+ YnVmKTsKKyAgICAgICAgaWYgKChjdHgtPmJ1ZiA9IGF2X21hbGxvYyhjdHgtPmNhcCA9IHNpemUp KSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoZXJybm8pOworICAgIH0KKyAg ICBpZiAoKGVyciA9IGZmaW9fcmVhZF9zaXplKHMtPnBiLCBjdHgtPmJ1Ziwgc2l6ZSkpIDwgMCkK KyAgICAgICAgcmV0dXJuIGF2aW9fZmVvZihzLT5wYikgPyBBVkVSUk9SX0VPRiA6IGVycjsKKyAg ICBjdHgtPmxhc3RfcG9zICs9IHNpemU7CisgICAgcmV0dXJuIG1tdHRsdl9yZWFkX2NvbXByZXNz ZWRfaXBfcGFja2V0KGN0eCwgcywgcGt0LCBjdHgtPmJ1Ziwgc2l6ZSk7Cit9CisKK3N0YXRpYyBp bnQgbW10dGx2X3JlYWRfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqcykgeworICAgIGludDY0X3Qg ICAgICAgICAgICAgIHBvczsKKyAgICBpbnQ2NF90ICAgICAgICAgICAgICBhbGxvdyA9IHMtPnBy b2Jlc2l6ZTsKKyAgICBzdHJ1Y3QgTU1UVExWQ29udGV4dCAqY3R4ICA9IHMtPnByaXZfZGF0YTsK KworICAgIGN0eC0+bGFzdF9wb3MgPSBhdmlvX3RlbGwocy0+cGIpOworICAgIGlmIChjdHgtPmxh c3RfcG9zIDwgMCkKKyAgICAgICAgcmV0dXJuIChpbnQpIGN0eC0+bGFzdF9wb3M7CisgICAgY3R4 LT5sYXN0X3BvcyAtPSAxOyAvLyBmb3JjZSByZXN5bmMKKworICAgIGN0eC0+cmVzeW5jX3NpemUg PSA0MDk2OworICAgIHMtPmN0eF9mbGFncyB8PSBBVkZNVENUWF9OT0hFQURFUjsKKworICAgIGlm ICghcy0+cGItPnNlZWthYmxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICgocG9zID0g YXZpb190ZWxsKHMtPnBiKSkgPCAwKQorICAgICAgICByZXR1cm4gKGludCkgcG9zOworCisgICAg d2hpbGUgKHMtPm5iX3N0cmVhbXMgPD0gMCAmJiBhbGxvdyA+IDApIHsKKyAgICAgICAgY29uc3Qg aW50NjRfdCBjdXIgPSBjdHgtPmxhc3RfcG9zOworICAgICAgICBjb25zdCBpbnQgICAgIGVyciA9 IG1tdHRsdl9yZWFkX3BhY2tldChzLCBOVUxMKTsKKyAgICAgICAgaWYgKGVyciA8IDAgJiYgZXJy ICE9IEZGRVJST1JfUkVETykKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIGFsbG93 IC09IGN0eC0+bGFzdF9wb3MgLSBjdXI7CisgICAgfQorCisgICAgY3R4LT5sYXN0X3BvcyA9IGF2 aW9fdGVsbChzLT5wYik7CisgICAgaWYgKGN0eC0+bGFzdF9wb3MgPCAwKQorICAgICAgICByZXR1 cm4gKGludCkgY3R4LT5sYXN0X3BvczsKKworICAgIGlmICgocG9zID0gYXZpb19zZWVrKHMtPnBi LCBwb3MsIFNFRUtfU0VUKSkgPCAwKQorICAgICAgICByZXR1cm4gKGludCkgcG9zOworCisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW10dGx2X3JlYWRfY2xvc2UoQVZGb3JtYXRDb250 ZXh0ICpjdHgpIHsKKyAgICBzdHJ1Y3QgUHJvZ3JhbSAgICAgICAqcHJvZ3JhbTsKKyAgICBzdHJ1 Y3QgTU1UVExWQ29udGV4dCAqcHJpdiA9IGN0eC0+cHJpdl9kYXRhOworICAgIGZvciAocHJvZ3Jh bSA9IHByaXYtPnByb2dyYW1zOyBwcm9ncmFtICE9IE5VTEw7KSB7CisgICAgICAgIHN0cnVjdCBQ cm9ncmFtICpuZXh0ID0gcHJvZ3JhbS0+bmV4dDsKKyAgICAgICAgYXZwcml2X21tdHBfcGFyc2Vf Y2xvc2UocHJvZ3JhbS0+bW10cCk7CisgICAgICAgIGF2X2ZyZWUocHJvZ3JhbSk7CisgICAgICAg IHByb2dyYW0gPSBuZXh0OworICAgIH0KKyAgICBpZiAocHJpdi0+YnVmICE9IE5VTEwpIGF2X2Zy ZWUocHJpdi0+YnVmKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludDY0X3QgbW10dGx2 X3JlYWRfdGltZXN0YW1wKHN0cnVjdCBBVkZvcm1hdENvbnRleHQgKnMsIGludCBzdHJlYW1faW5k ZXgsIGludDY0X3QgKnBvcywgaW50NjRfdCBwb3NfbGltaXQpIHsKKyAgICBzdHJ1Y3QgTU1UVExW Q29udGV4dCAqY3R4ID0gcy0+cHJpdl9kYXRhOworCisgICAgaWYgKCgqcG9zID0gYXZpb19zZWVr KHMtPnBiLCAqcG9zLCBTRUVLX1NFVCkpIDwgMCkKKyAgICAgICAgcmV0dXJuIChpbnQpICpwb3M7 CisKKyAgICB3aGlsZSAocG9zX2xpbWl0ID4gMCkgeworICAgICAgICBBVlBhY2tldCAgICAgIHBh Y2tldCA9IHswfTsKKyAgICAgICAgY29uc3QgaW50ICAgICBlcnIgICAgPSBtbXR0bHZfcmVhZF9w YWNrZXQocywgJnBhY2tldCk7CisgICAgICAgIGNvbnN0IGludDY0X3QgdHMgICAgID0gcGFja2V0 LmR0czsKKyAgICAgICAgY29uc3QgaW50NjRfdCBvZmYgICAgPSBwYWNrZXQucG9zOworICAgICAg ICBjb25zdCBpbnQgICAgIHNpZCAgICA9IHBhY2tldC5zdHJlYW1faW5kZXg7CisgICAgICAgIGF2 X3BhY2tldF91bnJlZigmcGFja2V0KTsKKyAgICAgICAgaWYgKGVyciA+PSAwICYmIChzdHJlYW1f aW5kZXggPCAwIHx8IHNpZCA9PSBzdHJlYW1faW5kZXgpKSB7CisgICAgICAgICAgICAqcG9zID0g b2ZmOworICAgICAgICAgICAgcmV0dXJuIHRzOworICAgICAgICB9CisgICAgICAgIHBvc19saW1p dCAtPSBjdHgtPmxhc3RfcG9zIC0gKnBvczsKKyAgICAgICAgKnBvcyA9IGN0eC0+bGFzdF9wb3M7 CisgICAgICAgIGlmIChlcnIgPCAwICYmIGVyciAhPSBGRkVSUk9SX1JFRE8pCisgICAgICAgICAg ICByZXR1cm4gQVZfTk9QVFNfVkFMVUU7CisgICAgfQorCisgICAgcmV0dXJuIEFWX05PUFRTX1ZB TFVFOworfQorCitjb25zdCBBVklucHV0Rm9ybWF0IGZmX21tdHRsdl9kZW11eGVyID0geworICAg IC5uYW1lICAgICAgICAgICA9ICJtbXR0bHYiLAorICAgIC5sb25nX25hbWUgICAgICA9IE5VTExf SUZfQ09ORklHX1NNQUxMKCJNTVQgcHJvdG9jb2wgb3ZlciBUTFYgcGFja2V0cyAoQVJJQiBTVEQt QjMyKSIpLAorICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgTU1UVExWQ29udGV4 dCksCisgICAgLmZsYWdzX2ludGVybmFsID0gRkZfRk1UX0lOSVRfQ0xFQU5VUCwKKyAgICAucmVh ZF9wcm9iZSAgICAgPSBtbXR0bHZfcHJvYmUsCisgICAgLnJlYWRfaGVhZGVyICAgID0gbW10dGx2 X3JlYWRfaGVhZGVyLAorICAgIC5yZWFkX3BhY2tldCAgICA9IG1tdHRsdl9yZWFkX3BhY2tldCwK KyAgICAucmVhZF9jbG9zZSAgICAgPSBtbXR0bHZfcmVhZF9jbG9zZSwKKyAgICAucmVhZF90aW1l c3RhbXAgPSBtbXR0bHZfcmVhZF90aW1lc3RhbXAsCisgICAgLmZsYWdzICAgICAgICAgID0gQVZG TVRfU0hPV19JRFMsCit9OwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvdmVyc2lvbi5oIGIvbGli YXZmb3JtYXQvdmVyc2lvbi5oCmluZGV4IGUyNjM0Yjg1YWUuLjRiZGU4MmFiYjQgMTAwNjQ0Ci0t LSBhL2xpYmF2Zm9ybWF0L3ZlcnNpb24uaAorKysgYi9saWJhdmZvcm1hdC92ZXJzaW9uLmgKQEAg LTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgInZlcnNpb25fbWFqb3IuaCIKIAotI2RlZmluZSBM SUJBVkZPUk1BVF9WRVJTSU9OX01JTk9SICAgNQorI2RlZmluZSBMSUJBVkZPUk1BVF9WRVJTSU9O X01JTk9SICAgNgogI2RlZmluZSBMSUJBVkZPUk1BVF9WRVJTSU9OX01JQ1JPIDEwMAogCiAjZGVm aW5lIExJQkFWRk9STUFUX1ZFUlNJT05fSU5UIEFWX1ZFUlNJT05fSU5UKExJQkFWRk9STUFUX1ZF UlNJT05fTUFKT1IsIFwKLS0gCjIuMjUuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxA ZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2 ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2 ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=