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 BA1BE405CC for ; Tue, 21 Dec 2021 18:42:30 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2E94F68AEBC; Tue, 21 Dec 2021 20:42:28 +0200 (EET) Received: from mail-pg1-f182.google.com (mail-pg1-f182.google.com [209.85.215.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0698D68A800 for ; Tue, 21 Dec 2021 20:42:22 +0200 (EET) Received: by mail-pg1-f182.google.com with SMTP id 200so13098668pgg.3 for ; Tue, 21 Dec 2021 10:42:21 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=xNbOhQ8IV5jwUEEOQhJDKqSRTH9djvZS8V7F7PE1oxI=; b=4DzbOU8cZUmY9/FSi0I/gavm/wcy9FcAhex3FG6fPKq60xPcPgnktvlWsutFY0QxwI cL+zpbwpxbLm5yp78eOwlESqv6VCIER7jxo6lm6IMKkOb6RzGuISZYRhgEmW/IlqL1iX 5qQ2RFM2XiYanQurZyL/+SC5jFLs6Qf391R3RkRBntFfpCEUhUK+Mb66WfJn9LMjgWUW SQuNBMFozqnJu5S0RsBcpaVWEZVfWTmvVUqFmuc9CBtE9OCB3JQNkk4TzerEfTSYe9tJ L/tmiZ7R+NoNF854VTxnzbsfrhnCHMLuChbGsKhH/GpF9qrKB1pjd0NPKyQ+ZiYlSLkn E+cQ== X-Gm-Message-State: AOAM531Y8BOLabFs/GCiiGUzw82KKkpPK+uV1x6iywlSFrlyP3NH+E2w JkWx9U56KO+o6oGplbiX179f3oaKDHA= X-Google-Smtp-Source: ABdhPJwmifVMRSs/YRqHHx88lmH8O+GDU1eX+5D8XBt4AG81kVHRotH/ve5NJtB8cto8XGjeExgnWw== X-Received: by 2002:a63:f244:: with SMTP id d4mr4103027pgk.65.1640112139111; Tue, 21 Dec 2021 10:42:19 -0800 (PST) Received: from localhost (76-14-89-2.sf-cable.astound.net. [76.14.89.2]) by smtp.gmail.com with ESMTPSA id cx5sm3321453pjb.22.2021.12.21.10.42.16 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 Dec 2021 10:42:18 -0800 (PST) Received: by localhost (sSMTP sendmail emulation); Tue, 21 Dec 2021 10:42:09 -0800 From: pal@sandflow.com To: ffmpeg-devel@ffmpeg.org Date: Tue, 21 Dec 2021 10:42:08 -0800 Message-Id: <20211221184209.6570-1-pal@sandflow.com> X-Mailer: git-send-email 2.34.1.windows.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v14 1/2] avformat/imf: 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: Pierre-Anthony Lemieux 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: RnJvbTogUGllcnJlLUFudGhvbnkgTGVtaWV1eCA8cGFsQHBhbGVtaWV1eC5jb20+CgpTaWduZWQt b2ZmLWJ5OiBQaWVycmUtQW50aG9ueSBMZW1pZXV4IDxwYWxAcGFsZW1pZXV4LmNvbT4KLS0tCgpO b3RlczoKICAgIFRoZSBJTUYgZGVtdXhlciBhY2NlcHRzIGFzIGlucHV0IGFuIElNRiBDUEwuIFRo ZSBhc3NldHMgcmVmZXJlbmNlZCBieSB0aGUgQ1BMIGNhbiBiZQogICAgY29udGFpbmVkIGluIG11 bHRpcGxlIGRlbGl2ZXJpZXMsIGVhY2ggZGVmaW5lZCBieSBhbiBBU1NFVE1BUCBmaWxlOgogICAg CiAgICBmZm1wZWcgLWFzc2V0bWFwcyA8cGF0aCBvZiBBU1NFVE1BUDE+LDxwYXRoIG9mIEFTU0VU TUFQPiwuLi4gLWkgPHBhdGggb2YgQ1BMPgogICAgCiAgICBJZiAtYXNzZXRtYXBzIGlzIG5vdCBz cGVjaWZpZWQsIEZGTVBFRyBsb29rcyBmb3IgYSBmaWxlIGNhbGxlZCBBU1NFVE1BUC54bWwgaW4g dGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBDUEwuCiAgICAKICAgIEVYQU1QTEU6CiAgICAgICAg ZmZtcGVnIC1pIGh0dHA6Ly9mZm1wZWctaW1mLXNhbXBsZXMtcHVibGljLnMzLXdlYnNpdGUtdXMt d2VzdC0xLmFtYXpvbmF3cy5jb20vY291bnRkb3duL0NQTF9mNTA5NWNhYS1mMjA0LTRlMWMtOGE4 NC03YWY0OGM3YWUxNmIueG1sIG91dC5tcDQKICAgIAogICAgVGhlIEludGVyb3BlcmFibGUgTWFz dGVyIEZvcm1hdCAoSU1GKSBpcyBhIGZpbGUtYmFzZWQgbWVkaWEgZm9ybWF0IGZvciB0aGUKICAg IGRlbGl2ZXJ5IGFuZCBzdG9yYWdlIG9mIHByb2Zlc3Npb25hbCBhdWRpby12aXN1YWwgbWFzdGVy cy4KICAgIEFuIElNRiBDb21wb3NpdGlvbiBjb25zaXN0cyBvZiBhbiBYTUwgcGxheWxpc3QgKHRo ZSBDb21wb3NpdGlvbiBQbGF5bGlzdCkKICAgIGFuZCBhIGNvbGxlY3Rpb24gb2YgTVhGIGZpbGVz ICh0aGUgVHJhY2sgRmlsZXMpLiBUaGUgQ29tcG9zaXRpb24gUGxheWxpc3QgKENQTCkKICAgIGFz c2VtYmxlcyB0aGUgVHJhY2sgRmlsZXMgb250byBhIHRpbWVsaW5lLCB3aGljaCBjb25zaXN0cyBv ZiBtdWx0aXBsZSB0cmFja3MuCiAgICBUaGUgbG9jYXRpb24gb2YgdGhlIFRyYWNrIEZpbGVzIHJl ZmVyZW5jZWQgYnkgdGhlIENvbXBvc2l0aW9uIFBsYXlsaXN0IGlzIHN0b3JlZAogICAgaW4gb25l IG9yIG1vcmUgWE1MIGRvY3VtZW50cyBjYWxsZWQgQXNzZXQgTWFwcy4gTW9yZSBkZXRhaWxzIGF0 IGh0dHBzOi8vd3d3LmltZnVnLmNvbS9leHBsYWluZXIuCiAgICBUaGUgSU1GIHN0YW5kYXJkIHdh cyBmaXJzdCBpbnRyb2R1Y2VkIGluIDIwMTMgYW5kIGlzIG1hbmFnZWQgYnkgdGhlIFNNUFRFLgog ICAgCiAgICBDSEFOR0UgTk9URVM6CiAgICAKICAgIC0gaW1wcm92ZSBjb2RlIHN0eWxlCgogTUFJ TlRBSU5FUlMgICAgICAgICAgICAgIHwgICAxICsKIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICB8 ICAgMyArLQogZG9jL2RlbXV4ZXJzLnRleGkgICAgICAgIHwgICA2ICsKIGxpYmF2Zm9ybWF0L01h a2VmaWxlICAgICB8ICAgMSArCiBsaWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMgfCAgIDEgKwogbGli YXZmb3JtYXQvaW1mLmggICAgICAgIHwgMjA3ICsrKysrKysrKwogbGliYXZmb3JtYXQvaW1mX2Nw bC5jICAgIHwgODQxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliYXZm b3JtYXQvaW1mZGVjLmMgICAgIHwgODk5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCAxOTU4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC9pbWYuaAogY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYmF2Zm9ybWF0L2ltZl9jcGwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0 L2ltZmRlYy5jCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA1 MGVlNWVmZWNjLi5iMmJiMDY1YTgzIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlO VEFJTkVSUwpAQCAtNDMzLDYgKzQzMyw3IEBAIE11eGVycy9EZW11eGVyczoKICAgaWRyb3FkZWMu YyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaWtlIE1lbGFuc29uCiAgIGlmZi5jICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSmFpa3Jpc2huYW4gTWVub24KICAgaW1nMiouYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaWNoYWVsIE5pZWRlcm1heWVyCisgIGltZiou YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFyYy1BbnRvaW5lIEFybmF1ZCwgUGll cnJlLUFudGhvbnkgTGVtaWV1eCwgVmFsZW50aW4gTm/Dq2wKICAgaXBtb3ZpZS5jICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNaWtlIE1lbGFuc29uCiAgIGlyY2FtKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUGF1bCBCIE1haG9sCiAgIGlzcy5jICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU3RlZmFuIEdlaHJlcgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29u ZmlndXJlCmluZGV4IDBjY2QzYmRhMTEuLjlhNmMyMjEyOWYgMTAwNzU1Ci0tLSBhL2NvbmZpZ3Vy ZQorKysgYi9jb25maWd1cmUKQEAgLTI5OCw3ICsyOTgsNyBAQCBFeHRlcm5hbCBsaWJyYXJ5IHN1 cHBvcnQ6CiAgIC0tZW5hYmxlLWxpYnh2aWQgICAgICAgICBlbmFibGUgWHZpZCBlbmNvZGluZyB2 aWEgeHZpZGNvcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmUgTVBFRy00L1h2 aWQgZW5jb2RlciBleGlzdHMgW25vXQogICAtLWVuYWJsZS1saWJ4bWwyICAgICAgICAgZW5hYmxl IFhNTCBwYXJzaW5nIHVzaW5nIHRoZSBDIGxpYnJhcnkgbGlieG1sMiwgbmVlZGVkCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBmb3IgZGFzaCBkZW11eGluZyBzdXBwb3J0IFtub10KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvciBkYXNoIGFuZCBpbWYgZGVtdXhpbmcgc3VwcG9ydCBb bm9dCiAgIC0tZW5hYmxlLWxpYnppbWcgICAgICAgICBlbmFibGUgei5saWIsIG5lZWRlZCBmb3Ig enNjYWxlIGZpbHRlciBbbm9dCiAgIC0tZW5hYmxlLWxpYnptcSAgICAgICAgICBlbmFibGUgbWVz c2FnZSBwYXNzaW5nIHZpYSBsaWJ6bXEgW25vXQogICAtLWVuYWJsZS1saWJ6dmJpICAgICAgICAg ZW5hYmxlIHRlbGV0ZXh0IHN1cHBvcnQgdmlhIGxpYnp2YmkgW25vXQpAQCAtMzQxMyw2ICszNDEz LDcgQEAgaGxzX211eGVyX3NlbGVjdD0ibXBlZ3RzX211eGVyIgogaGxzX211eGVyX3N1Z2dlc3Q9 ImdjcnlwdCBvcGVuc3NsIgogaW1hZ2UyX2FsaWFzX3BpeF9kZW11eGVyX3NlbGVjdD0iaW1hZ2Uy X2RlbXV4ZXIiCiBpbWFnZTJfYnJlbmRlcl9waXhfZGVtdXhlcl9zZWxlY3Q9ImltYWdlMl9kZW11 eGVyIgoraW1mX2RlbXV4ZXJfZGVwcz0ibGlieG1sMiIKIGlwb2RfbXV4ZXJfc2VsZWN0PSJtb3Zf bXV4ZXIiCiBpc212X211eGVyX3NlbGVjdD0ibW92X211eGVyIgogaXZmX211eGVyX3NlbGVjdD0i YXYxX21ldGFkYXRhX2JzZiB2cDlfc3VwZXJmcmFtZV9ic2YiCmRpZmYgLS1naXQgYS9kb2MvZGVt dXhlcnMudGV4aSBiL2RvYy9kZW11eGVycy50ZXhpCmluZGV4IGNhYjhhNzA3MmMuLjY1NTcwNGQy YzQgMTAwNjQ0Ci0tLSBhL2RvYy9kZW11eGVycy50ZXhpCisrKyBiL2RvYy9kZW11eGVycy50ZXhp CkBAIC0yNjcsNiArMjY3LDEyIEBAIHdoaWNoIHN0cmVhbXMgdG8gYWN0dWFsbHkgcmVjZWl2ZS4K IEVhY2ggc3RyZWFtIG1pcnJvcnMgdGhlIEBjb2Rle2lkfSBhbmQgQGNvZGV7YmFuZHdpZHRofSBw cm9wZXJ0aWVzIGZyb20gdGhlCiBAY29kZXs8UmVwcmVzZW50YXRpb24+fSBhcyBtZXRhZGF0YSBr ZXlzIG5hbWVkICJpZCIgYW5kICJ2YXJpYW50X2JpdHJhdGUiIHJlc3BlY3RpdmVseS4KIAorQHNl Y3Rpb24gaW1mCisKK0ludGVyb3BlcmFibGUgTWFzdGVyIEZvcm1hdCBkZW11eGVyLgorCitUaGlz IGRlbXV4ZXIgcHJlc2VudHMgYXVkaW8gYW5kIHZpZGVvIHN0cmVhbXMgZm91bmQgaW4gYW4gSU1G IENvbXBvc2l0aW9uLgorCiBAc2VjdGlvbiBmbHYsIGxpdmVfZmx2LCBrdXgKIAogQWRvYmUgRmxh c2ggVmlkZW8gRm9ybWF0IGRlbXV4ZXIuCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9NYWtlZmls ZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCmluZGV4IDJiNWNhZjlkMzMuLjdmMDU4ZjNlYTAgMTAw NjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCisrKyBiL2xpYmF2Zm9ybWF0L01ha2VmaWxl CkBAIC0yODUsNiArMjg1LDcgQEAgT0JKUy0kKENPTkZJR19JTUFHRV9XRUJQX1BJUEVfREVNVVhF UikgICAgKz0gaW1nMmRlYy5vIGltZzIubwogT0JKUy0kKENPTkZJR19JTUFHRV9YQk1fUElQRV9E RU1VWEVSKSAgICAgKz0gaW1nMmRlYy5vIGltZzIubwogT0JKUy0kKENPTkZJR19JTUFHRV9YUE1f UElQRV9ERU1VWEVSKSAgICAgKz0gaW1nMmRlYy5vIGltZzIubwogT0JKUy0kKENPTkZJR19JTUFH RV9YV0RfUElQRV9ERU1VWEVSKSAgICAgKz0gaW1nMmRlYy5vIGltZzIubworT0JKUy0kKENPTkZJ R19JTUZfREVNVVhFUikgICAgICAgICAgICAgICArPSBpbWZkZWMubyBpbWZfY3BsLm8KIE9CSlMt JChDT05GSUdfSU5HRU5JRU5UX0RFTVVYRVIpICAgICAgICAgKz0gaW5nZW5pZW50ZGVjLm8gcmF3 ZGVjLm8KIE9CSlMtJChDT05GSUdfSVBNT1ZJRV9ERU1VWEVSKSAgICAgICAgICAgKz0gaXBtb3Zp ZS5vCiBPQkpTLSQoQ09ORklHX0lQVV9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IGlwdWRlYy5v IHJhd2RlYy5vCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMgYi9saWJhdmZv cm1hdC9hbGxmb3JtYXRzLmMKaW5kZXggMTA1NGFjOTY2Ny4uZjY4MDYxNmNkZCAxMDA2NDQKLS0t IGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCisrKyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMu YwpAQCAtMjEyLDYgKzIxMiw3IEBAIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9pbWFn ZTJwaXBlX2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZPdXRwdXRGb3JtYXQgZmZfaW1hZ2UycGlw ZV9tdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9pbWFnZTJfYWxpYXNfcGl4 X2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaW1hZ2UyX2JyZW5kZXJf cGl4X2RlbXV4ZXI7CitleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaW1mX2RlbXV4ZXI7 CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaW5nZW5pZW50X2RlbXV4ZXI7CiBleHRl cm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaXBtb3ZpZV9kZW11eGVyOwogZXh0ZXJuIGNvbnN0 IEFWT3V0cHV0Rm9ybWF0IGZmX2lwb2RfbXV4ZXI7CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9p bWYuaCBiL2xpYmF2Zm9ybWF0L2ltZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLjYyYzQ0NjhjZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC9pbWYuaApA QCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAq CisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLwor CisvKgorICoKKyAqIENvcHlyaWdodCAoYykgU2FuZGZsb3cgQ29uc3VsdGluZyBMTEMKKyAqCisg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICogUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl LCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLgorICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAg YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg QU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ UklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCisgKi8KKworLyoqCisgKiBQdWJsaWMgaGVhZGVyIGZpbGUgZm9yIHRoZSBwcm9jZXNzaW5n IG9mIEludGVyb3BlcmFibGUgTWFzdGVyIEZvcm1hdCAoSU1GKQorICogcGFja2FnZXMuCisgKgor ICogQGF1dGhvciBQaWVycmUtQW50aG9ueSBMZW1pZXV4CisgKiBAYXV0aG9yIFZhbGVudGluIE5v ZWwKKyAqIEBmaWxlCisgKiBAaW5ncm91cCBsYXZ1X2ltZgorICovCisKKyNpZm5kZWYgQVZGT1JN QVRfSU1GX0gKKyNkZWZpbmUgQVZGT1JNQVRfSU1GX0gKKworI2luY2x1ZGUgImF2Zm9ybWF0Lmgi CisjaW5jbHVkZSAibGliYXZmb3JtYXQvYXZpby5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9yYXRp b25hbC5oIgorI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisKKyNkZWZpbmUgRkZfSU1GX1VVSURf Rk9STUFUICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAidXJuOnV1aWQ6JTAyaGh4 JTAyaGh4JTAyaGh4JTAyaGh4LSUwMmhoeCUwMmhoeC0iIFwKKyAgICAiJTAyaGh4JTAyaGh4LSUw MmhoeCUwMmhoeC0lMDJoaHglMDJoaHglMDJoaHglMDJoaHglMDJoaHglMDJoaHgiCisKKy8qKgor ICogVVVJRCBhcyBkZWZpbmVkIGluIElFVEYgUkZDIDQyMgorICovCit0eXBlZGVmIHVpbnQ4X3Qg RkZJTUZVVUlEWzE2XTsKKworLyoqCisgKiBJTUYgQ29tcG9zaXRpb24gUGxheWxpc3QgQmFzZSBS ZXNvdXJjZQorICovCit0eXBlZGVmIHN0cnVjdCBGRklNRkJhc2VSZXNvdXJjZSB7CisgICAgQVZS YXRpb25hbCBlZGl0X3JhdGU7ICAvKio8IEJhc2VSZXNvdXJjZVR5cGUvRWRpdFJhdGUgKi8KKyAg ICB1aW50MzJfdCBlbnRyeV9wb2ludDsgIC8qKjwgQmFzZVJlc291cmNlVHlwZS9FbnRyeVBvaW50 ICovCisgICAgdWludDMyX3QgZHVyYXRpb247ICAgICAvKio8IEJhc2VSZXNvdXJjZVR5cGUvRHVy YXRpb24gKi8KKyAgICB1aW50MzJfdCByZXBlYXRfY291bnQ7IC8qKjwgQmFzZVJlc291cmNlVHlw ZS9SZXBlYXRDb3VudCAqLworfSBGRklNRkJhc2VSZXNvdXJjZTsKKworLyoqCisgKiBJTUYgQ29t cG9zaXRpb24gUGxheWxpc3QgVHJhY2sgRmlsZSBSZXNvdXJjZQorICovCit0eXBlZGVmIHN0cnVj dCBGRklNRlRyYWNrRmlsZVJlc291cmNlIHsKKyAgICBGRklNRkJhc2VSZXNvdXJjZSBiYXNlOwor ICAgIEZGSU1GVVVJRCB0cmFja19maWxlX3V1aWQ7IC8qKjwgVHJhY2tGaWxlUmVzb3VyY2VUeXBl L1RyYWNrRmlsZUlkICovCit9IEZGSU1GVHJhY2tGaWxlUmVzb3VyY2U7CisKKy8qKgorICogSU1G IE1hcmtlcgorICovCit0eXBlZGVmIHN0cnVjdCBGRklNRk1hcmtlciB7CisgICAgeG1sQ2hhciAq bGFiZWxfdXRmODsgLyoqPCBNYXJrZXIvTGFiZWwgKi8KKyAgICB4bWxDaGFyICpzY29wZV91dGY4 OyAvKio8IE1hcmtlci9MYWJlbC9cQHNjb3BlICovCisgICAgdWludDMyX3Qgb2Zmc2V0OyAgICAg LyoqPCBNYXJrZXIvT2Zmc2V0ICovCit9IEZGSU1GTWFya2VyOworCisvKioKKyAqIElNRiBDb21w b3NpdGlvbiBQbGF5bGlzdCBNYXJrZXIgUmVzb3VyY2UKKyAqLwordHlwZWRlZiBzdHJ1Y3QgRkZJ TUZNYXJrZXJSZXNvdXJjZSB7CisgICAgRkZJTUZCYXNlUmVzb3VyY2UgYmFzZTsKKyAgICB1aW50 MzJfdCBtYXJrZXJfY291bnQ7IC8qKjwgTnVtYmVyIG9mIE1hcmtlciBlbGVtZW50cyAqLworICAg IEZGSU1GTWFya2VyICptYXJrZXJzOyAgLyoqPCBNYXJrZXIgZWxlbWVudHMgKi8KK30gRkZJTUZN YXJrZXJSZXNvdXJjZTsKKworLyoqCisgKiBJTUYgQ29tcG9zaXRpb24gUGxheWxpc3QgVmlydHVh bCBUcmFjaworICovCit0eXBlZGVmIHN0cnVjdCBGRklNRkJhc2VWaXJ0dWFsVHJhY2sgeworICAg IEZGSU1GVVVJRCBpZF91dWlkOyAvKio8IFRyYWNrSWQgYXNzb2NpYXRlZCB3aXRoIHRoZSBWaXJ0 dWFsIFRyYWNrICovCit9IEZGSU1GQmFzZVZpcnR1YWxUcmFjazsKKworLyoqCisgKiBJTUYgQ29t cG9zaXRpb24gUGxheWxpc3QgVmlydHVhbCBUcmFjayB0aGF0IGNvbnNpc3RzIG9mIFRyYWNrIEZp bGUgUmVzb3VyY2VzCisgKi8KK3R5cGVkZWYgc3RydWN0IEZGSU1GVHJhY2tGaWxlVmlydHVhbFRy YWNrIHsKKyAgICBGRklNRkJhc2VWaXJ0dWFsVHJhY2sgYmFzZTsKKyAgICB1aW50MzJfdCByZXNv dXJjZV9jb3VudDsgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIFJlc291cmNlIGVsZW1lbnRzIHBy ZXNlbnQgaW4gdGhlIFZpcnR1YWwgVHJhY2sgKi8KKyAgICBGRklNRlRyYWNrRmlsZVJlc291cmNl ICpyZXNvdXJjZXM7IC8qKjwgUmVzb3VyY2UgZWxlbWVudHMgb2YgdGhlIFZpcnR1YWwgVHJhY2sg Ki8KKyAgICB1bnNpZ25lZCBpbnQgcmVzb3VyY2VzX2FsbG9jX3N6OyAgIC8qKjwgU2l6ZSBvZiB0 aGUgcmVzb3VyY2VzIGJ1ZmZlciAqLworfSBGRklNRlRyYWNrRmlsZVZpcnR1YWxUcmFjazsKKwor LyoqCisgKiBJTUYgQ29tcG9zaXRpb24gUGxheWxpc3QgVmlydHVhbCBUcmFjayB0aGF0IGNvbnNp c3RzIG9mIE1hcmtlciBSZXNvdXJjZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgRkZJTUZNYXJrZXJW aXJ0dWFsVHJhY2sgeworICAgIEZGSU1GQmFzZVZpcnR1YWxUcmFjayBiYXNlOworICAgIHVpbnQz Ml90IHJlc291cmNlX2NvdW50OyAgICAgICAgLyoqPCBOdW1iZXIgb2YgUmVzb3VyY2UgZWxlbWVu dHMgcHJlc2VudCBpbiB0aGUgVmlydHVhbCBUcmFjayAqLworICAgIEZGSU1GTWFya2VyUmVzb3Vy Y2UgKnJlc291cmNlczsgLyoqPCBSZXNvdXJjZSBlbGVtZW50cyBvZiB0aGUgVmlydHVhbCBUcmFj ayAqLworfSBGRklNRk1hcmtlclZpcnR1YWxUcmFjazsKKworLyoqCisgKiBJTUYgQ29tcG9zaXRp b24gUGxheWxpc3QKKyAqLwordHlwZWRlZiBzdHJ1Y3QgRkZJTUZDUEwgeworICAgIEZGSU1GVVVJ RCBpZF91dWlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENvbXBvc2l0aW9u UGxheWxpc3QvSWQgZWxlbWVudCAqLworICAgIHhtbENoYXIgKmNvbnRlbnRfdGl0bGVfdXRmODsg ICAgICAgICAgICAgICAgICAgICAvKio8IENvbXBvc2l0aW9uUGxheWxpc3QvQ29udGVudFRpdGxl IGVsZW1lbnQgKi8KKyAgICBBVlJhdGlvbmFsIGVkaXRfcmF0ZTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyoqPCBDb21wb3NpdGlvblBsYXlsaXN0L0VkaXRSYXRlIGVsZW1lbnQgKi8KKyAg ICBGRklNRk1hcmtlclZpcnR1YWxUcmFjayAqbWFpbl9tYXJrZXJzX3RyYWNrOyAgICAgLyoqPCBN YWluIE1hcmtlciBWaXJ0dWFsIFRyYWNrICovCisgICAgRkZJTUZUcmFja0ZpbGVWaXJ0dWFsVHJh Y2sgKm1haW5faW1hZ2VfMmRfdHJhY2s7IC8qKjwgTWFpbiBJbWFnZSBWaXJ0dWFsIFRyYWNrICov CisgICAgdWludDMyX3QgbWFpbl9hdWRpb190cmFja19jb3VudDsgICAgICAgICAgICAgICAgIC8q KjwgTnVtYmVyIG9mIE1haW4gQXVkaW8gVmlydHVhbCBUcmFja3MgKi8KKyAgICBGRklNRlRyYWNr RmlsZVZpcnR1YWxUcmFjayAqbWFpbl9hdWRpb190cmFja3M7ICAgLyoqPCBNYWluIEF1ZGlvIFZp cnR1YWwgVHJhY2tzICovCit9IEZGSU1GQ1BMOworCisvKioKKyAqIFBhcnNlIGFuIElNRiBDb21w b3NpdGlvblBsYXlsaXN0IGVsZW1lbnQgaW50byB0aGUgRkZJTUZDUEwgZGF0YSBzdHJ1Y3R1cmUu CisgKiBAcGFyYW1baW5dIGRvYyBBbiBYTUwgZG9jdW1lbnQgZnJvbSB3aGljaCB0aGUgQ1BMIGlz IHJlYWQuCisgKiBAcGFyYW1bb3V0XSBjcGwgUG9pbnRlciB0byBhIG1lbW9yeSBhcmVhIChhbGxv Y2F0ZWQgYnkgdGhlIGNsaWVudCksIHdoZXJlIHRoZQorICogIGZ1bmN0aW9uIHdyaXRlcyBhIHBv aW50ZXIgdG8gdGhlIG5ld2x5IGNvbnN0cnVjdGVkIEZGSU1GQ1BMIHN0cnVjdHVyZSAob3IKKyAq ICBOVUxMIGlmIHRoZSBDUEwgY291bGQgbm90IGJlIHBhcnNlZCkuIFRoZSBjbGllbnQgaXMgcmVz cG9uc2libGUgZm9yIGZyZWVpbmcKKyAqICB0aGUgRkZJTUZDUEwgc3RydWN0dXJlIHVzaW5nIGZm X2ltZl9jcGxfZnJlZSgpLgorICogQHJldHVybiBBIG5vbi16ZXJvIHZhbHVlIGluIGNhc2Ugb2Yg YW4gZXJyb3IuCisgKi8KK2ludCBmZl9pbWZfcGFyc2VfY3BsX2Zyb21feG1sX2RvbSh4bWxEb2NQ dHIgZG9jLCBGRklNRkNQTCAqKmNwbCk7CisKKy8qKgorICogUGFyc2UgYW4gSU1GIENvbXBvc2l0 aW9uIFBsYXlsaXN0IGRvY3VtZW50IGludG8gdGhlIEZGSU1GQ1BMIGRhdGEgc3RydWN0dXJlLgor ICogQHBhcmFtW2luXSBpbiBUaGUgY29udGV4dCBmcm9tIHdoaWNoIHRoZSBDUEwgaXMgcmVhZC4K KyAqIEBwYXJhbVtvdXRdIGNwbCBQb2ludGVyIHRvIGEgbWVtb3J5IGFyZWEgKGFsbG9jYXRlZCBi eSB0aGUgY2xpZW50KSwgd2hlcmUgdGhlCisgKiBmdW5jdGlvbiB3cml0ZXMgYSBwb2ludGVyIHRv IHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBGRklNRkNQTCBzdHJ1Y3R1cmUgKG9yCisgKiBOVUxMIGlm IHRoZSBDUEwgY291bGQgbm90IGJlIHBhcnNlZCkuIFRoZSBjbGllbnQgaXMgcmVzcG9uc2libGUg Zm9yIGZyZWVpbmcKKyAqIHRoZSBGRklNRkNQTCBzdHJ1Y3R1cmUgdXNpbmcgZmZfaW1mX2NwbF9m cmVlKCkuCisgKiBAcmV0dXJuIEEgbm9uLXplcm8gdmFsdWUgaW4gY2FzZSBvZiBhbiBlcnJvci4K KyAqLworaW50IGZmX2ltZl9wYXJzZV9jcGwoQVZJT0NvbnRleHQgKmluLCBGRklNRkNQTCAqKmNw bCk7CisKKy8qKgorICogQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBhbiBGRklNRkNQTCBkYXRh IHN0cnVjdHVyZS4KKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIHRoZSBuZXdseSBjb25zdHJ1Y3Rl ZCBGRklNRkNQTCBzdHJ1Y3R1cmUgKG9yIE5VTEwgaWYgdGhlCisgKiBzdHJ1Y3R1cmUgY291bGQg bm90IGJlIGNvbnN0cnVjdGVkKS4gVGhlIGNsaWVudCBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWlu ZworICogdGhlIEZGSU1GQ1BMIHN0cnVjdHVyZSB1c2luZyBmZl9pbWZfY3BsX2ZyZWUoKS4KKyAq LworRkZJTUZDUEwgKmZmX2ltZl9jcGxfYWxsb2Modm9pZCk7CisKKy8qKgorICogRGVsZXRlcyBh biBGRklNRkNQTCBkYXRhIHN0cnVjdHVyZSBwcmV2aW91c2x5IGluc3RhbnRpYXRlZCB3aXRoIGZm X2ltZl9jcGxfYWxsb2MoKS4KKyAqIEBwYXJhbVtpbl0gY3BsIFRoZSBGRklNRkNQTCBzdHJ1Y3R1 cmUgdG8gZGVsZXRlLgorICovCit2b2lkIGZmX2ltZl9jcGxfZnJlZShGRklNRkNQTCAqY3BsKTsK KworLyoqCisgKiBSZWFkcyBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciBmcm9tIGFuIFhNTCBl bGVtZW50CisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgPCAwIEFWRVJST1IgY29kZSBvbiBlcnJv ci4KKyAqLworaW50IGZmX2ltZl94bWxfcmVhZF91aW50MzIoeG1sTm9kZVB0ciBlbGVtZW50LCB1 aW50MzJfdCAqbnVtYmVyKTsKKworLyoqCisgKiBSZWFkcyBhbiBBVlJhdGlvbmFsIGZyb20gYW4g WE1MIGVsZW1lbnQKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCA8IDAgQVZFUlJPUiBjb2RlIG9u IGVycm9yLgorICovCitpbnQgZmZfaW1mX3htbF9yZWFkX3JhdGlvbmFsKHhtbE5vZGVQdHIgZWxl bWVudCwgQVZSYXRpb25hbCAqcmF0aW9uYWwpOworCisvKioKKyAqIFJlYWRzIGEgVVVJRCBmcm9t IGFuIFhNTCBlbGVtZW50CisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgPCAwIEFWRVJST1IgY29k ZSBvbiBlcnJvci4KKyAqLworaW50IGZmX2ltZl94bWxfcmVhZF91dWlkKHhtbE5vZGVQdHIgZWxl bWVudCwgdWludDhfdCB1dWlkWzE2XSk7CisKKy8qKgorICogUmV0dXJucyB0aGUgZmlyc3QgY2hp bGQgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgbG9jYWwgbmFtZQorICogQHJldHVybiBBIHBv aW50ZXIgdG8gdGhlIGNoaWxkIGVsZW1lbnQsIG9yIE5VTEwgaWYgbm8gc3VjaCBjaGlsZCBlbGVt ZW50IGV4aXN0cy4KKyAqLworeG1sTm9kZVB0ciBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50 X2J5X25hbWUoeG1sTm9kZVB0ciBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWVfdXRmOCk7CisKKyNl bmRpZgpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvaW1mX2NwbC5jIGIvbGliYXZmb3JtYXQvaW1m X2NwbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjZlNGRlZjBlOGUK LS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC9pbWZfY3BsLmMKQEAgLTAsMCArMSw4NDEg QEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoKKyAqCisgKiBD b3B5cmlnaHQgKGMpIFNhbmRmbG93IENvbnN1bHRpbmcgTExDCisgKgorICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICogUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP UlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBP UiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8q KgorICogSW1wbGVtZW50cyBJTVAgQ1BMIHByb2Nlc3NpbmcKKyAqCisgKiBAYXV0aG9yIFBpZXJy ZS1BbnRob255IExlbWlldXgKKyAqIEBmaWxlCisgKiBAaW5ncm91cCBsYXZ1X2ltZgorICovCisK KyNpbmNsdWRlICJpbWYuaCIKKyNpbmNsdWRlICJsaWJhdmZvcm1hdC9teGYuaCIKKyNpbmNsdWRl ICJsaWJhdnV0aWwvYnByaW50LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2Vycm9yLmgiCisjaW5j bHVkZSA8bGlieG1sL3BhcnNlci5oPgorCit4bWxOb2RlUHRyIGZmX2ltZl94bWxfZ2V0X2NoaWxk X2VsZW1lbnRfYnlfbmFtZSh4bWxOb2RlUHRyIHBhcmVudCwgY29uc3QgY2hhciAqbmFtZV91dGY4 KQoreworICAgIHhtbE5vZGVQdHIgY3VyX2VsZW1lbnQ7CisKKyAgICBjdXJfZWxlbWVudCA9IHht bEZpcnN0RWxlbWVudENoaWxkKHBhcmVudCk7CisgICAgd2hpbGUgKGN1cl9lbGVtZW50KSB7Cisg ICAgICAgIGlmICh4bWxTdHJjbXAoY3VyX2VsZW1lbnQtPm5hbWUsIG5hbWVfdXRmOCkgPT0gMCkK KyAgICAgICAgICAgIHJldHVybiBjdXJfZWxlbWVudDsKKworICAgICAgICBjdXJfZWxlbWVudCA9 IHhtbE5leHRFbGVtZW50U2libGluZyhjdXJfZWxlbWVudCk7CisgICAgfQorICAgIHJldHVybiBO VUxMOworfQorCitpbnQgZmZfaW1mX3htbF9yZWFkX3V1aWQoeG1sTm9kZVB0ciBlbGVtZW50LCB1 aW50OF90IHV1aWRbMTZdKQoreworICAgIHhtbENoYXIgKmVsZW1lbnRfdGV4dCA9IE5VTEw7Cisg ICAgaW50IHNjYW5mX3JldDsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGVsZW1lbnRfdGV4dCA9 IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGVsZW1lbnQtPmRvYywgZWxlbWVudC0+eG1sQ2hpbGRyZW5O b2RlLCAxKTsKKyAgICBzY2FuZl9yZXQgPSBzc2NhbmYoZWxlbWVudF90ZXh0LAorICAgICAgICAg ICAgICAgICAgICAgICBGRl9JTUZfVVVJRF9GT1JNQVQsCisgICAgICAgICAgICAgICAgICAgICAg ICZ1dWlkWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAmdXVpZFsxXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgJnV1aWRbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICZ1dWlkWzNdLAor ICAgICAgICAgICAgICAgICAgICAgICAmdXVpZFs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAg JnV1aWRbNV0sCisgICAgICAgICAgICAgICAgICAgICAgICZ1dWlkWzZdLAorICAgICAgICAgICAg ICAgICAgICAgICAmdXVpZFs3XSwKKyAgICAgICAgICAgICAgICAgICAgICAgJnV1aWRbOF0sCisg ICAgICAgICAgICAgICAgICAgICAgICZ1dWlkWzldLAorICAgICAgICAgICAgICAgICAgICAgICAm dXVpZFsxMF0sCisgICAgICAgICAgICAgICAgICAgICAgICZ1dWlkWzExXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgJnV1aWRbMTJdLAorICAgICAgICAgICAgICAgICAgICAgICAmdXVpZFsxM10s CisgICAgICAgICAgICAgICAgICAgICAgICZ1dWlkWzE0XSwKKyAgICAgICAgICAgICAgICAgICAg ICAgJnV1aWRbMTVdKTsKKyAgICBpZiAoc2NhbmZfcmV0ICE9IDE2KSB7CisgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIFVVSURcbiIpOworICAgICAgICByZXQgPSBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKyAgICB4bWxGcmVlKGVsZW1lbnRfdGV4dCk7CisK KyAgICByZXR1cm4gcmV0OworfQorCitpbnQgZmZfaW1mX3htbF9yZWFkX3JhdGlvbmFsKHhtbE5v ZGVQdHIgZWxlbWVudCwgQVZSYXRpb25hbCAqcmF0aW9uYWwpCit7CisgICAgeG1sQ2hhciAqZWxl bWVudF90ZXh0ID0gTlVMTDsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGVsZW1lbnRfdGV4dCA9 IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGVsZW1lbnQtPmRvYywgZWxlbWVudC0+eG1sQ2hpbGRyZW5O b2RlLCAxKTsKKyAgICBpZiAoc3NjYW5mKGVsZW1lbnRfdGV4dCwgIiVpICVpIiwgJnJhdGlvbmFs LT5udW0sICZyYXRpb25hbC0+ZGVuKSAhPSAyKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfRVJST1IsICJJbnZhbGlkIHJhdGlvbmFsIG51bWJlclxuIik7CisgICAgICAgIHJldCA9IEFW RVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorICAgIHhtbEZyZWUoZWxlbWVudF90ZXh0KTsKKwor ICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBmZl9pbWZfeG1sX3JlYWRfdWludDMyKHhtbE5vZGVQ dHIgZWxlbWVudCwgdWludDMyX3QgKm51bWJlcikKK3sKKyAgICB4bWxDaGFyICplbGVtZW50X3Rl eHQgPSBOVUxMOworICAgIGludCByZXQgPSAwOworCisgICAgZWxlbWVudF90ZXh0ID0geG1sTm9k ZUxpc3RHZXRTdHJpbmcoZWxlbWVudC0+ZG9jLCBlbGVtZW50LT54bWxDaGlsZHJlbk5vZGUsIDEp OworICAgIGlmIChzc2NhbmYoZWxlbWVudF90ZXh0LCAiJSIgUFJJdTMyLCBudW1iZXIpICE9IDEp IHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgdW5zaWduZWQg MzItYml0IGludGVnZXIiKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICB9CisgICAgeG1sRnJlZShlbGVtZW50X3RleHQpOworCisgICAgcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHZvaWQgaW1mX2Jhc2VfdmlydHVhbF90cmFja19pbml0KEZGSU1GQmFzZVZpcnR1YWxU cmFjayAqdHJhY2spCit7CisgICAgbWVtc2V0KHRyYWNrLT5pZF91dWlkLCAwLCBzaXplb2YodHJh Y2stPmlkX3V1aWQpKTsKK30KKworc3RhdGljIHZvaWQgaW1mX21hcmtlcl92aXJ0dWFsX3RyYWNr X2luaXQoRkZJTUZNYXJrZXJWaXJ0dWFsVHJhY2sgKnRyYWNrKQoreworICAgIGltZl9iYXNlX3Zp cnR1YWxfdHJhY2tfaW5pdCgoRkZJTUZCYXNlVmlydHVhbFRyYWNrICopdHJhY2spOworICAgIHRy YWNrLT5yZXNvdXJjZV9jb3VudCA9IDA7CisgICAgdHJhY2stPnJlc291cmNlcyA9IE5VTEw7Cit9 CisKK3N0YXRpYyB2b2lkIGltZl90cmFja2ZpbGVfdmlydHVhbF90cmFja19pbml0KEZGSU1GVHJh Y2tGaWxlVmlydHVhbFRyYWNrICp0cmFjaykKK3sKKyAgICBpbWZfYmFzZV92aXJ0dWFsX3RyYWNr X2luaXQoKEZGSU1GQmFzZVZpcnR1YWxUcmFjayAqKXRyYWNrKTsKKyAgICB0cmFjay0+cmVzb3Vy Y2VfY291bnQgPSAwOworICAgIHRyYWNrLT5yZXNvdXJjZXNfYWxsb2Nfc3ogPSAwOworICAgIHRy YWNrLT5yZXNvdXJjZXMgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBpbWZfYmFzZV9yZXNvdXJj ZV9pbml0KEZGSU1GQmFzZVJlc291cmNlICpyc3JjKQoreworICAgIHJzcmMtPmR1cmF0aW9uID0g MDsKKyAgICByc3JjLT5lZGl0X3JhdGUgPSBhdl9tYWtlX3EoMCwgMSk7CisgICAgcnNyYy0+ZW50 cnlfcG9pbnQgPSAwOworICAgIHJzcmMtPnJlcGVhdF9jb3VudCA9IDE7Cit9CisKK3N0YXRpYyB2 b2lkIGltZl9tYXJrZXJfcmVzb3VyY2VfaW5pdChGRklNRk1hcmtlclJlc291cmNlICpyc3JjKQor eworICAgIGltZl9iYXNlX3Jlc291cmNlX2luaXQoKEZGSU1GQmFzZVJlc291cmNlICopcnNyYyk7 CisgICAgcnNyYy0+bWFya2VyX2NvdW50ID0gMDsKKyAgICByc3JjLT5tYXJrZXJzID0gTlVMTDsK K30KKworc3RhdGljIHZvaWQgaW1mX21hcmtlcl9pbml0KEZGSU1GTWFya2VyICptYXJrZXIpCit7 CisgICAgbWFya2VyLT5sYWJlbF91dGY4ID0gTlVMTDsKKyAgICBtYXJrZXItPm9mZnNldCA9IDA7 CisgICAgbWFya2VyLT5zY29wZV91dGY4ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaW1mX3Ry YWNrZmlsZV9yZXNvdXJjZV9pbml0KEZGSU1GVHJhY2tGaWxlUmVzb3VyY2UgKnJzcmMpCit7Cisg ICAgaW1mX2Jhc2VfcmVzb3VyY2VfaW5pdCgoRkZJTUZCYXNlUmVzb3VyY2UgKilyc3JjKTsKKyAg ICBtZW1zZXQocnNyYy0+dHJhY2tfZmlsZV91dWlkLCAwLCBzaXplb2YocnNyYy0+dHJhY2tfZmls ZV91dWlkKSk7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9jb250ZW50X3RpdGxlKHhtbE5vZGVQdHIg Y3BsX2VsZW1lbnQsIEZGSU1GQ1BMICpjcGwpCit7CisgICAgeG1sTm9kZVB0ciBlbGVtZW50ID0g TlVMTDsKKworICAgIGlmICghKGVsZW1lbnQgPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50 X2J5X25hbWUoY3BsX2VsZW1lbnQsICJDb250ZW50VGl0bGUiKSkpIHsKKyAgICAgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19FUlJPUiwgIkNvbnRlbnRUaXRsZSBlbGVtZW50IG5vdCBmb3VuZCBpbiB0 aGUgSU1GIENQTFxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg IH0KKyAgICBjcGwtPmNvbnRlbnRfdGl0bGVfdXRmOCA9IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGNw bF9lbGVtZW50LT5kb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlbGVtZW50LT54bWxDaGlsZHJlbk5vZGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKTsKKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IGZpbGxfZWRpdF9yYXRlKHhtbE5vZGVQdHIgY3BsX2VsZW1lbnQsIEZGSU1G Q1BMICpjcGwpCit7CisgICAgeG1sTm9kZVB0ciBlbGVtZW50ID0gTlVMTDsKKworICAgIGlmICgh KGVsZW1lbnQgPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUoY3BsX2VsZW1l bnQsICJFZGl0UmF0ZSIpKSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAi RWRpdFJhdGUgZWxlbWVudCBub3QgZm91bmQgaW4gdGhlIElNRiBDUExcbiIpOworICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAgICByZXR1cm4gZmZfaW1mX3ht bF9yZWFkX3JhdGlvbmFsKGVsZW1lbnQsICZjcGwtPmVkaXRfcmF0ZSk7Cit9CisKK3N0YXRpYyBp bnQgZmlsbF9pZCh4bWxOb2RlUHRyIGNwbF9lbGVtZW50LCBGRklNRkNQTCAqY3BsKQoreworICAg IHhtbE5vZGVQdHIgZWxlbWVudCA9IE5VTEw7CisKKyAgICBpZiAoIShlbGVtZW50ID0gZmZfaW1m X3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKGNwbF9lbGVtZW50LCAiSWQiKSkpIHsKKyAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIklkIGVsZW1lbnQgbm90IGZvdW5kIGlu IHRoZSBJTUYgQ1BMXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cisg ICAgfQorCisgICAgcmV0dXJuIGZmX2ltZl94bWxfcmVhZF91dWlkKGVsZW1lbnQsIGNwbC0+aWRf dXVpZCk7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9tYXJrZXIoeG1sTm9kZVB0ciBtYXJrZXJfZWxl bSwgRkZJTUZNYXJrZXIgKm1hcmtlcikKK3sKKyAgICB4bWxOb2RlUHRyIGVsZW1lbnQgPSBOVUxM OworICAgIGludCByZXQgPSAwOworCisgICAgLyogcmVhZCBPZmZzZXQgKi8KKyAgICBpZiAoIShl bGVtZW50ID0gZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKG1hcmtlcl9lbGVt LCAiT2Zmc2V0IikpKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJPZmZz ZXQgZWxlbWVudCBub3QgZm91bmQgaW4gYSBNYXJrZXJcbiIpOworICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisgICAgaWYgKChyZXQgPSBmZl9pbWZfeG1sX3JlYWRf dWludDMyKGVsZW1lbnQsICZtYXJrZXItPm9mZnNldCkpKQorICAgICAgICByZXR1cm4gcmV0Owor CisgICAgLyogcmVhZCBMYWJlbCBhbmQgU2NvcGUgKi8KKyAgICBpZiAoIShlbGVtZW50ID0gZmZf aW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKG1hcmtlcl9lbGVtLCAiTGFiZWwiKSkp IHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkxhYmVsIGVsZW1lbnQgbm90 IGZvdW5kIGluIGEgTWFya2VyXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgfQorICAgIGlmICghKG1hcmtlci0+bGFiZWxfdXRmOCA9IHhtbE5vZGVMaXN0R2V0 U3RyaW5nKGVsZW1lbnQtPmRvYywgZWxlbWVudC0+eG1sQ2hpbGRyZW5Ob2RlLCAxKSkpIHsKKyAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkVtcHR5IExhYmVsIGVsZW1lbnQgZm91 bmQgaW4gYSBNYXJrZXJcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK KyAgICB9CisgICAgaWYgKCEobWFya2VyLT5zY29wZV91dGY4ID0geG1sR2V0Tm9Oc1Byb3AoZWxl bWVudCwgInNjb3BlIikpKSB7CisgICAgICAgIG1hcmtlci0+c2NvcGVfdXRmOAorICAgICAgICAg ICAgPSB4bWxDaGFyU3RyZHVwKCJodHRwOi8vd3d3LnNtcHRlLXJhLm9yZy9zY2hlbWFzLzIwNjct My8yMDEzI3N0YW5kYXJkLW1hcmtlcnMiKTsKKyAgICAgICAgaWYgKCFtYXJrZXItPnNjb3BlX3V0 ZjgpIHsKKyAgICAgICAgICAgIHhtbEZyZWUobWFya2VyLT5sYWJlbF91dGY4KTsKKyAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZpbGxfYmFzZV9yZXNvdXJjZSh4bWxOb2RlUHRyIHJl c291cmNlX2VsZW0sIEZGSU1GQmFzZVJlc291cmNlICpyZXNvdXJjZSwgRkZJTUZDUEwgKmNwbCkK K3sKKyAgICB4bWxOb2RlUHRyIGVsZW1lbnQgPSBOVUxMOworICAgIGludCByZXQgPSAwOworCisg ICAgLyogcmVhZCBFZGl0UmF0ZSAqLworICAgIGlmICghKGVsZW1lbnQgPSBmZl9pbWZfeG1sX2dl dF9jaGlsZF9lbGVtZW50X2J5X25hbWUocmVzb3VyY2VfZWxlbSwgIkVkaXRSYXRlIikpKSB7Cisg ICAgICAgIHJlc291cmNlLT5lZGl0X3JhdGUgPSBjcGwtPmVkaXRfcmF0ZTsKKyAgICB9IGVsc2Ug aWYgKHJldCA9IGZmX2ltZl94bWxfcmVhZF9yYXRpb25hbChlbGVtZW50LCAmcmVzb3VyY2UtPmVk aXRfcmF0ZSkpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQg RWRpdFJhdGUgZWxlbWVudCBmb3VuZCBpbiBhIFJlc291cmNlXG4iKTsKKyAgICAgICAgcmV0dXJu IHJldDsKKyAgICB9CisKKyAgICAvKiByZWFkIEVudHJ5UG9pbnQgKi8KKyAgICBpZiAoZWxlbWVu dCA9IGZmX2ltZl94bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShyZXNvdXJjZV9lbGVtLCAi RW50cnlQb2ludCIpKSB7CisgICAgICAgIGlmIChyZXQgPSBmZl9pbWZfeG1sX3JlYWRfdWludDMy KGVsZW1lbnQsICZyZXNvdXJjZS0+ZW50cnlfcG9pbnQpKSB7CisgICAgICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBFbnRyeVBvaW50IGVsZW1lbnQgZm91bmQgaW4g YSBSZXNvdXJjZVxuIik7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAg fSBlbHNlIHsKKyAgICAgICAgcmVzb3VyY2UtPmVudHJ5X3BvaW50ID0gMDsKKyAgICB9CisKKyAg ICAvKiByZWFkIEludHJpbnNpY0R1cmF0aW9uICovCisgICAgaWYgKCEoZWxlbWVudCA9IGZmX2lt Zl94bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShyZXNvdXJjZV9lbGVtLCAiSW50cmluc2lj RHVyYXRpb24iKSkpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludHJp bnNpY0R1cmF0aW9uIGVsZW1lbnQgbWlzc2luZyBmcm9tIFJlc291cmNlXG4iKTsKKyAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorICAgIGlmIChyZXQgPSBmZl9pbWZf eG1sX3JlYWRfdWludDMyKGVsZW1lbnQsICZyZXNvdXJjZS0+ZHVyYXRpb24pKSB7CisgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIEludHJpbnNpY0R1cmF0aW9uIGVs ZW1lbnQgZm91bmQgaW4gYSBSZXNvdXJjZVxuIik7CisgICAgICAgIHJldHVybiByZXQ7CisgICAg fQorICAgIHJlc291cmNlLT5kdXJhdGlvbiAtPSByZXNvdXJjZS0+ZW50cnlfcG9pbnQ7CisKKyAg ICAvKiByZWFkIFNvdXJjZUR1cmF0aW9uICovCisgICAgaWYgKGVsZW1lbnQgPSBmZl9pbWZfeG1s X2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUocmVzb3VyY2VfZWxlbSwgIlNvdXJjZUR1cmF0aW9u IikpIHsKKyAgICAgICAgaWYgKHJldCA9IGZmX2ltZl94bWxfcmVhZF91aW50MzIoZWxlbWVudCwg JnJlc291cmNlLT5kdXJhdGlvbikpIHsKKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df RVJST1IsICJTb3VyY2VEdXJhdGlvbiBlbGVtZW50IG1pc3NpbmcgZnJvbSBSZXNvdXJjZVxuIik7 CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgfQorCisgICAgLyogcmVh ZCBSZXBlYXRDb3VudCAqLworICAgIGlmIChlbGVtZW50ID0gZmZfaW1mX3htbF9nZXRfY2hpbGRf ZWxlbWVudF9ieV9uYW1lKHJlc291cmNlX2VsZW0sICJSZXBlYXRDb3VudCIpKQorICAgICAgICBy ZXQgPSBmZl9pbWZfeG1sX3JlYWRfdWludDMyKGVsZW1lbnQsICZyZXNvdXJjZS0+cmVwZWF0X2Nv dW50KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF90cmFja2ZpbGVf cmVzb3VyY2UoeG1sTm9kZVB0ciB0Zl9yZXNvdXJjZV9lbGVtLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGRklNRlRyYWNrRmlsZVJlc291cmNlICp0Zl9yZXNvdXJjZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZJTUZDUEwgKmNwbCkKK3sKKyAgICB4 bWxOb2RlUHRyIGVsZW1lbnQgPSBOVUxMOworICAgIGludCByZXQgPSAwOworCisgICAgaWYgKHJl dCA9IGZpbGxfYmFzZV9yZXNvdXJjZSh0Zl9yZXNvdXJjZV9lbGVtLCAoRkZJTUZCYXNlUmVzb3Vy Y2UgKil0Zl9yZXNvdXJjZSwgY3BsKSkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIC8qIHJl YWQgVHJhY2tGaWxlSWQgKi8KKyAgICBpZiAoZWxlbWVudCA9IGZmX2ltZl94bWxfZ2V0X2NoaWxk X2VsZW1lbnRfYnlfbmFtZSh0Zl9yZXNvdXJjZV9lbGVtLCAiVHJhY2tGaWxlSWQiKSkgeworICAg ICAgICBpZiAocmV0ID0gZmZfaW1mX3htbF9yZWFkX3V1aWQoZWxlbWVudCwgdGZfcmVzb3VyY2Ut PnRyYWNrX2ZpbGVfdXVpZCkpIHsKKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJS T1IsICJJbnZhbGlkIFRyYWNrRmlsZUlkIGVsZW1lbnQgZm91bmQgaW4gUmVzb3VyY2VcbiIpOwor ICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUcmFja0ZpbGVJZCBlbGVtZW50IG1pc3Npbmcg ZnJvbSBSZXNvdXJjZVxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor ICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9tYXJrZXJfcmVz b3VyY2UoeG1sTm9kZVB0ciBtYXJrZXJfcmVzb3VyY2VfZWxlbSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRkZJTUZNYXJrZXJSZXNvdXJjZSAqbWFya2VyX3Jlc291cmNlLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRklNRkNQTCAqY3BsKQoreworICAgIHhtbE5v ZGVQdHIgZWxlbWVudCA9IE5VTEw7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBpZiAocmV0ID0g ZmlsbF9iYXNlX3Jlc291cmNlKG1hcmtlcl9yZXNvdXJjZV9lbGVtLCAoRkZJTUZCYXNlUmVzb3Vy Y2UgKiltYXJrZXJfcmVzb3VyY2UsIGNwbCkpCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAv KiByZWFkIG1hcmtlcnMgKi8KKyAgICBlbGVtZW50ID0geG1sRmlyc3RFbGVtZW50Q2hpbGQobWFy a2VyX3Jlc291cmNlX2VsZW0pOworICAgIHdoaWxlIChlbGVtZW50KSB7CisgICAgICAgIGlmICh4 bWxTdHJjbXAoZWxlbWVudC0+bmFtZSwgIk1hcmtlciIpID09IDApIHsKKyAgICAgICAgICAgIHZv aWQgKnRtcDsKKworICAgICAgICAgICAgaWYgKG1hcmtlcl9yZXNvdXJjZS0+bWFya2VyX2NvdW50 ID09IFVJTlQzMl9NQVgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK KyAgICAgICAgICAgIHRtcCA9IGF2X3JlYWxsb2NfYXJyYXkobWFya2VyX3Jlc291cmNlLT5tYXJr ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJfcmVzb3VyY2Ut Pm1hcmtlcl9jb3VudCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVvZihGRklNRk1hcmtlcikpOworICAgICAgICAgICAgaWYgKCF0bXApCisgICAgICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgICAgIG1hcmtlcl9yZXNvdXJjZS0+ bWFya2VycyA9IHRtcDsKKworICAgICAgICAgICAgaW1mX21hcmtlcl9pbml0KCZtYXJrZXJfcmVz b3VyY2UtPm1hcmtlcnNbbWFya2VyX3Jlc291cmNlLT5tYXJrZXJfY291bnRdKTsKKyAgICAgICAg ICAgIHJldCA9IGZpbGxfbWFya2VyKGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmbWFya2VyX3Jlc291cmNlLT5tYXJrZXJzW21hcmtlcl9yZXNvdXJjZS0+bWFya2VyX2Nv dW50XSk7CisgICAgICAgICAgICBtYXJrZXJfcmVzb3VyY2UtPm1hcmtlcl9jb3VudCsrOworICAg ICAgICAgICAgaWYgKHJldCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9 CisKKyAgICAgICAgZWxlbWVudCA9IHhtbE5leHRFbGVtZW50U2libGluZyhlbGVtZW50KTsKKyAg ICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHB1c2hfbWFya2VyX3NlcXVl bmNlKHhtbE5vZGVQdHIgbWFya2VyX3NlcXVlbmNlX2VsZW0sIEZGSU1GQ1BMICpjcGwpCit7Cisg ICAgaW50IHJldCA9IDA7CisgICAgdWludDhfdCB1dWlkWzE2XTsKKyAgICB4bWxOb2RlUHRyIHJl c291cmNlX2xpc3RfZWxlbSA9IE5VTEw7CisgICAgeG1sTm9kZVB0ciByZXNvdXJjZV9lbGVtID0g TlVMTDsKKyAgICB4bWxOb2RlUHRyIHRyYWNrX2lkX2VsZW0gPSBOVUxMOworICAgIHVuc2lnbmVk IGxvbmcgcmVzb3VyY2VfZWxlbV9jb3VudDsKKyAgICB2b2lkICp0bXA7CisKKyAgICAvKiByZWFk IFRyYWNrSUQgZWxlbWVudCAqLworICAgIGlmICghKHRyYWNrX2lkX2VsZW0gPSBmZl9pbWZfeG1s X2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUobWFya2VyX3NlcXVlbmNlX2VsZW0sICJUcmFja0lk IikpKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUcmFja0lkIGVsZW1l bnQgbWlzc2luZyBmcm9tIFNlcXVlbmNlXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7CisgICAgfQorICAgIGlmIChyZXQgPSBmZl9pbWZfeG1sX3JlYWRfdXVpZCh0cmFj a19pZF9lbGVtLCB1dWlkKSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAi SW52YWxpZCBUcmFja0lkIGVsZW1lbnQgZm91bmQgaW4gU2VxdWVuY2VcbiIpOworICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisgICAgYXZfbG9nKE5VTEwsCisgICAg ICAgICAgIEFWX0xPR19ERUJVRywKKyAgICAgICAgICAgIlByb2Nlc3NpbmcgSU1GIENQTCBNYXJr ZXIgU2VxdWVuY2UgZm9yIFZpcnR1YWwgVHJhY2sgIiBGRl9JTUZfVVVJRF9GT1JNQVQgIlxuIiwK KyAgICAgICAgICAgVUlEX0FSRyh1dWlkKSk7CisKKyAgICAvKiBjcmVhdGUgbWFpbiBtYXJrZXIg dmlydHVhbCB0cmFjayBpZiBpdCBkb2VzIG5vdCBleGlzdCAqLworICAgIGlmICghY3BsLT5tYWlu X21hcmtlcnNfdHJhY2spIHsKKyAgICAgICAgY3BsLT5tYWluX21hcmtlcnNfdHJhY2sgPSBhdl9t YWxsb2Moc2l6ZW9mKEZGSU1GTWFya2VyVmlydHVhbFRyYWNrKSk7CisgICAgICAgIGlmICghY3Bs LT5tYWluX21hcmtlcnNfdHJhY2spCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p OworICAgICAgICBpbWZfbWFya2VyX3ZpcnR1YWxfdHJhY2tfaW5pdChjcGwtPm1haW5fbWFya2Vy c190cmFjayk7CisgICAgICAgIG1lbWNweShjcGwtPm1haW5fbWFya2Vyc190cmFjay0+YmFzZS5p ZF91dWlkLCB1dWlkLCBzaXplb2YodXVpZCkpOworCisgICAgfSBlbHNlIGlmIChtZW1jbXAoY3Bs LT5tYWluX21hcmtlcnNfdHJhY2stPmJhc2UuaWRfdXVpZCwgdXVpZCwgc2l6ZW9mKHV1aWQpKSAh PSAwKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNdWx0aXBsZSBtYXJr ZXIgdmlydHVhbCB0cmFja3Mgd2VyZSBmb3VuZFxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworICAgIH0KKworICAgIC8qIHByb2Nlc3MgcmVzb3VyY2VzICovCisgICAg cmVzb3VyY2VfbGlzdF9lbGVtID0gZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1l KG1hcmtlcl9zZXF1ZW5jZV9lbGVtLCAiUmVzb3VyY2VMaXN0Iik7CisgICAgaWYgKCFyZXNvdXJj ZV9saXN0X2VsZW0pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVzb3VyY2VfZWxlbV9jb3Vu dCA9IHhtbENoaWxkRWxlbWVudENvdW50KHJlc291cmNlX2xpc3RfZWxlbSk7CisgICAgaWYgKHJl c291cmNlX2VsZW1fY291bnQgPiBVSU5UMzJfTUFYCisgICAgICAgIHx8IGNwbC0+bWFpbl9tYXJr ZXJzX3RyYWNrLT5yZXNvdXJjZV9jb3VudCA+IFVJTlQzMl9NQVggLSByZXNvdXJjZV9lbGVtX2Nv dW50KQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIHRtcCA9IGF2X3JlYWxs b2NfYXJyYXkoY3BsLT5tYWluX21hcmtlcnNfdHJhY2stPnJlc291cmNlcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNwbC0+bWFpbl9tYXJrZXJzX3RyYWNrLT5yZXNvdXJjZV9jb3VudCAr IHJlc291cmNlX2VsZW1fY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo RkZJTUZNYXJrZXJSZXNvdXJjZSkpOworICAgIGlmICghdG1wKSB7CisgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfRVJST1IsICJDYW5ub3QgYWxsb2NhdGUgTWFya2VyIFJlc291cmNlc1xuIik7 CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorICAgIGNwbC0+bWFpbl9t YXJrZXJzX3RyYWNrLT5yZXNvdXJjZXMgPSB0bXA7CisKKyAgICByZXNvdXJjZV9lbGVtID0geG1s Rmlyc3RFbGVtZW50Q2hpbGQocmVzb3VyY2VfbGlzdF9lbGVtKTsKKyAgICB3aGlsZSAocmVzb3Vy Y2VfZWxlbSkgeworICAgICAgICBpbWZfbWFya2VyX3Jlc291cmNlX2luaXQoJmNwbC0+bWFpbl9t YXJrZXJzX3RyYWNrLT5yZXNvdXJjZXNbY3BsLT5tYWluX21hcmtlcnNfdHJhY2stPnJlc291cmNl X2NvdW50XSk7CisgICAgICAgIHJldCA9IGZpbGxfbWFya2VyX3Jlc291cmNlKHJlc291cmNlX2Vs ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcGwtPm1haW5fbWFya2Vy c190cmFjay0+cmVzb3VyY2VzW2NwbC0+bWFpbl9tYXJrZXJzX3RyYWNrLT5yZXNvdXJjZV9jb3Vu dF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwbCk7CisgICAgICAgIGNw bC0+bWFpbl9tYXJrZXJzX3RyYWNrLT5yZXNvdXJjZV9jb3VudCsrOworICAgICAgICBpZiAocmV0 KQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICByZXNvdXJjZV9lbGVtID0geG1s TmV4dEVsZW1lbnRTaWJsaW5nKHJlc291cmNlX2VsZW0pOworICAgIH0KKworICAgIHJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBpbnQgaGFzX3N0ZXJlb19yZXNvdXJjZXMoeG1sTm9kZVB0ciBlbGVt ZW50KQoreworICAgIGlmICh4bWxTdHJjbXAoZWxlbWVudC0+bmFtZSwgIkxlZnQiKSA9PSAwIHx8 IHhtbFN0cmNtcChlbGVtZW50LT5uYW1lLCAiUmlnaHQiKSA9PSAwKQorICAgICAgICByZXR1cm4g MTsKKworICAgIGVsZW1lbnQgPSB4bWxGaXJzdEVsZW1lbnRDaGlsZChlbGVtZW50KTsKKyAgICB3 aGlsZSAoZWxlbWVudCkgeworICAgICAgICBpZiAoaGFzX3N0ZXJlb19yZXNvdXJjZXMoZWxlbWVu dCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBlbGVtZW50ID0geG1sTmV4dEVs ZW1lbnRTaWJsaW5nKGVsZW1lbnQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHB1c2hfbWFpbl9hdWRpb19zZXF1ZW5jZSh4bWxOb2RlUHRyIGF1ZGlvX3NlcXVlbmNl X2VsZW0sIEZGSU1GQ1BMICpjcGwpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgdWludDhfdCB1 dWlkWzE2XTsKKyAgICB4bWxOb2RlUHRyIHJlc291cmNlX2xpc3RfZWxlbSA9IE5VTEw7CisgICAg eG1sTm9kZVB0ciByZXNvdXJjZV9lbGVtID0gTlVMTDsKKyAgICB4bWxOb2RlUHRyIHRyYWNrX2lk X2VsZW0gPSBOVUxMOworICAgIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VfZWxlbV9jb3VudDsKKyAg ICBGRklNRlRyYWNrRmlsZVZpcnR1YWxUcmFjayAqdnQgPSBOVUxMOworICAgIHZvaWQgKnRtcDsK KworICAgIC8qIHJlYWQgVHJhY2tJRCBlbGVtZW50ICovCisgICAgaWYgKCEodHJhY2tfaWRfZWxl bSA9IGZmX2ltZl94bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShhdWRpb19zZXF1ZW5jZV9l bGVtLCAiVHJhY2tJZCIpKSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAi VHJhY2tJZCBlbGVtZW50IG1pc3NpbmcgZnJvbSBhdWRpbyBzZXF1ZW5jZVxuIik7CisgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKyAgICBpZiAocmV0ID0gZmZfaW1m X3htbF9yZWFkX3V1aWQodHJhY2tfaWRfZWxlbSwgdXVpZCkpIHsKKyAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgVHJhY2tJZCBlbGVtZW50IGZvdW5kIGluIGF1ZGlv IHNlcXVlbmNlXG4iKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgYXZfbG9nKE5V TEwsCisgICAgICAgICAgIEFWX0xPR19ERUJVRywKKyAgICAgICAgICAgIlByb2Nlc3NpbmcgSU1G IENQTCBBdWRpbyBTZXF1ZW5jZSBmb3IgVmlydHVhbCBUcmFjayAiIEZGX0lNRl9VVUlEX0ZPUk1B VCAiXG4iLAorICAgICAgICAgICBVSURfQVJHKHV1aWQpKTsKKworICAgIC8qIGdldCB0aGUgbWFp biBhdWRpbyB2aXJ0dWFsIHRyYWNrIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlcXVlbmNlICovCisg ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNwbC0+bWFpbl9hdWRpb190cmFja19jb3VudDsg aSsrKSB7CisgICAgICAgIGlmIChtZW1jbXAoY3BsLT5tYWluX2F1ZGlvX3RyYWNrc1tpXS5iYXNl LmlkX3V1aWQsIHV1aWQsIHNpemVvZih1dWlkKSkgPT0gMCkgeworICAgICAgICAgICAgdnQgPSAm Y3BsLT5tYWluX2F1ZGlvX3RyYWNrc1tpXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9 CisgICAgfQorCisgICAgLyogY3JlYXRlIGEgbWFpbiBhdWRpbyB2aXJ0dWFsIHRyYWNrIGlmIG5v bmUgZXhpc3RzIGZvciB0aGUgc2VxdWVuY2UgKi8KKyAgICBpZiAoIXZ0KSB7CisgICAgICAgIGlm IChjcGwtPm1haW5fYXVkaW9fdHJhY2tfY291bnQgPT0gVUlOVDMyX01BWCkKKyAgICAgICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIHRtcCA9IGF2X3JlYWxsb2NfYXJyYXko Y3BsLT5tYWluX2F1ZGlvX3RyYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj cGwtPm1haW5fYXVkaW9fdHJhY2tfY291bnQgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZihGRklNRlRyYWNrRmlsZVZpcnR1YWxUcmFjaykpOworICAgICAgICBpZiAo IXRtcCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAgICAgY3Bs LT5tYWluX2F1ZGlvX3RyYWNrcyA9IHRtcDsKKyAgICAgICAgdnQgPSAmY3BsLT5tYWluX2F1ZGlv X3RyYWNrc1tjcGwtPm1haW5fYXVkaW9fdHJhY2tfY291bnRdOworICAgICAgICBpbWZfdHJhY2tm aWxlX3ZpcnR1YWxfdHJhY2tfaW5pdCh2dCk7CisgICAgICAgIGNwbC0+bWFpbl9hdWRpb190cmFj a19jb3VudCsrOworICAgICAgICBtZW1jcHkodnQtPmJhc2UuaWRfdXVpZCwgdXVpZCwgc2l6ZW9m KHV1aWQpKTsKKyAgICB9CisKKyAgICAvKiBwcm9jZXNzIHJlc291cmNlcyAqLworICAgIHJlc291 cmNlX2xpc3RfZWxlbSA9IGZmX2ltZl94bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShhdWRp b19zZXF1ZW5jZV9lbGVtLCAiUmVzb3VyY2VMaXN0Iik7CisgICAgaWYgKCFyZXNvdXJjZV9saXN0 X2VsZW0pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVzb3VyY2VfZWxlbV9jb3VudCA9IHht bENoaWxkRWxlbWVudENvdW50KHJlc291cmNlX2xpc3RfZWxlbSk7CisgICAgaWYgKHJlc291cmNl X2VsZW1fY291bnQgPiBVSU5UMzJfTUFYCisgICAgICAgIHx8IHZ0LT5yZXNvdXJjZV9jb3VudCA+ IFVJTlQzMl9NQVggLSByZXNvdXJjZV9lbGVtX2NvdW50KQorICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOworICAgIHRtcCA9IGF2X2Zhc3RfcmVhbGxvYyh2dC0+cmVzb3VyY2VzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAmdnQtPnJlc291cmNlc19hbGxvY19zeiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgKHZ0LT5yZXNvdXJjZV9jb3VudCArIHJlc291cmNlX2VsZW1fY291 bnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemVvZihGRklNRlRyYWNrRmls ZVJlc291cmNlKSk7CisgICAgaWYgKCF0bXApIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19FUlJPUiwgIkNhbm5vdCBhbGxvY2F0ZSBNYWluIEF1ZGlvIFJlc291cmNlc1xuIik7CisgICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorICAgIHZ0LT5yZXNvdXJjZXMgPSB0 bXA7CisKKyAgICByZXNvdXJjZV9lbGVtID0geG1sRmlyc3RFbGVtZW50Q2hpbGQocmVzb3VyY2Vf bGlzdF9lbGVtKTsKKyAgICB3aGlsZSAocmVzb3VyY2VfZWxlbSkgeworICAgICAgICBpbWZfdHJh Y2tmaWxlX3Jlc291cmNlX2luaXQoJnZ0LT5yZXNvdXJjZXNbdnQtPnJlc291cmNlX2NvdW50XSk7 CisgICAgICAgIHJldCA9IGZpbGxfdHJhY2tmaWxlX3Jlc291cmNlKHJlc291cmNlX2VsZW0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2dC0+cmVzb3VyY2VzW3Z0LT5y ZXNvdXJjZV9jb3VudF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNw bCk7CisgICAgICAgIHZ0LT5yZXNvdXJjZV9jb3VudCsrOworICAgICAgICBpZiAocmV0KSB7Cisg ICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBSZXNvdXJjZVxu Iik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc291cmNl X2VsZW0gPSB4bWxOZXh0RWxlbWVudFNpYmxpbmcocmVzb3VyY2VfZWxlbSk7CisgICAgfQorCisg ICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwdXNoX21haW5faW1hZ2VfMmRfc2VxdWVu Y2UoeG1sTm9kZVB0ciBpbWFnZV9zZXF1ZW5jZV9lbGVtLCBGRklNRkNQTCAqY3BsKQoreworICAg IGludCByZXQgPSAwOworICAgIHVpbnQ4X3QgdXVpZFsxNl07CisgICAgeG1sTm9kZVB0ciByZXNv dXJjZV9saXN0X2VsZW0gPSBOVUxMOworICAgIHhtbE5vZGVQdHIgcmVzb3VyY2VfZWxlbSA9IE5V TEw7CisgICAgeG1sTm9kZVB0ciB0cmFja19pZF9lbGVtID0gTlVMTDsKKyAgICB2b2lkICp0bXA7 CisgICAgdW5zaWduZWQgbG9uZyByZXNvdXJjZV9lbGVtX2NvdW50OworCisgICAgLyogc2tpcCBz dGVyZW9zY29waWMgcmVzb3VyY2VzICovCisgICAgaWYgKGhhc19zdGVyZW9fcmVzb3VyY2VzKGlt YWdlX3NlcXVlbmNlX2VsZW0pKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1Is ICJTdGVyZW9zY29waWMgM0QgaW1hZ2UgdmlydHVhbCB0cmFja3Mgbm90IHN1cHBvcnRlZFxuIik7 CisgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICB9CisKKyAgICAvKiBy ZWFkIFRyYWNrSWQgZWxlbWVudCovCisgICAgaWYgKCEodHJhY2tfaWRfZWxlbSA9IGZmX2ltZl94 bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShpbWFnZV9zZXF1ZW5jZV9lbGVtLCAiVHJhY2tJ ZCIpKSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVHJhY2tJZCBlbGVt ZW50IG1pc3NpbmcgZnJvbSBhdWRpbyBzZXF1ZW5jZVxuIik7CisgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOworICAgIH0KKyAgICBpZiAocmV0ID0gZmZfaW1mX3htbF9yZWFkX3V1 aWQodHJhY2tfaWRfZWxlbSwgdXVpZCkpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19F UlJPUiwgIkludmFsaWQgVHJhY2tJZCBlbGVtZW50IGZvdW5kIGluIGF1ZGlvIHNlcXVlbmNlXG4i KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAvKiBjcmVhdGUgbWFpbiBpbWFn ZSB2aXJ0dWFsIHRyYWNrIGlmIG9uZSBkb2VzIG5vdCBleGlzdCAqLworICAgIGlmICghY3BsLT5t YWluX2ltYWdlXzJkX3RyYWNrKSB7CisgICAgICAgIGNwbC0+bWFpbl9pbWFnZV8yZF90cmFjayA9 IGF2X21hbGxvYyhzaXplb2YoRkZJTUZUcmFja0ZpbGVWaXJ0dWFsVHJhY2spKTsKKyAgICAgICAg aWYgKCFjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2spCisgICAgICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOworICAgICAgICBpbWZfdHJhY2tmaWxlX3ZpcnR1YWxfdHJhY2tfaW5pdChjcGwt Pm1haW5faW1hZ2VfMmRfdHJhY2spOworICAgICAgICBtZW1jcHkoY3BsLT5tYWluX2ltYWdlXzJk X3RyYWNrLT5iYXNlLmlkX3V1aWQsIHV1aWQsIHNpemVvZih1dWlkKSk7CisKKyAgICB9IGVsc2Ug aWYgKG1lbWNtcChjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2stPmJhc2UuaWRfdXVpZCwgdXVpZCwg c2l6ZW9mKHV1aWQpKSAhPSAwKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1Is ICJNdWx0aXBsZSBNYWluSW1hZ2UgdmlydHVhbCB0cmFja3MgZm91bmRcbiIpOworICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisgICAgYXZfbG9nKE5VTEwsCisgICAg ICAgICAgIEFWX0xPR19ERUJVRywKKyAgICAgICAgICAgIlByb2Nlc3NpbmcgSU1GIENQTCBNYWlu IEltYWdlIFNlcXVlbmNlIGZvciBWaXJ0dWFsIFRyYWNrICIgRkZfSU1GX1VVSURfRk9STUFUICJc biIsCisgICAgICAgICAgIFVJRF9BUkcodXVpZCkpOworCisgICAgLyogcHJvY2VzcyByZXNvdXJj ZXMgKi8KKyAgICByZXNvdXJjZV9saXN0X2VsZW0gPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVt ZW50X2J5X25hbWUoaW1hZ2Vfc2VxdWVuY2VfZWxlbSwgIlJlc291cmNlTGlzdCIpOworICAgIGlm ICghcmVzb3VyY2VfbGlzdF9lbGVtKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJlc291cmNl X2VsZW1fY291bnQgPSB4bWxDaGlsZEVsZW1lbnRDb3VudChyZXNvdXJjZV9saXN0X2VsZW0pOwor ICAgIGlmIChyZXNvdXJjZV9lbGVtX2NvdW50ID4gVUlOVDMyX01BWAorICAgICAgICB8fCBjcGwt Pm1haW5faW1hZ2VfMmRfdHJhY2stPnJlc291cmNlX2NvdW50ID4gVUlOVDMyX01BWCAtIHJlc291 cmNlX2VsZW1fY291bnQKKyAgICAgICAgfHwgKGNwbC0+bWFpbl9pbWFnZV8yZF90cmFjay0+cmVz b3VyY2VfY291bnQgKyByZXNvdXJjZV9lbGVtX2NvdW50KQorICAgICAgICAgICAgPiBJTlRfTUFY IC8gc2l6ZW9mKEZGSU1GVHJhY2tGaWxlUmVzb3VyY2UpKQorICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOworICAgIHRtcCA9IGF2X2Zhc3RfcmVhbGxvYyhjcGwtPm1haW5faW1hZ2VfMmRf dHJhY2stPnJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwbC0+bWFpbl9p bWFnZV8yZF90cmFjay0+cmVzb3VyY2VzX2FsbG9jX3N6LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAoY3BsLT5tYWluX2ltYWdlXzJkX3RyYWNrLT5yZXNvdXJjZV9jb3VudCArIHJlc291cmNl X2VsZW1fY291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemVvZihGRklN RlRyYWNrRmlsZVJlc291cmNlKSk7CisgICAgaWYgKCF0bXApIHsKKyAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBhbGxvY2F0ZSBNYWluIEltYWdlIFJlc291cmNlc1xu Iik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorICAgIGNwbC0+bWFp bl9pbWFnZV8yZF90cmFjay0+cmVzb3VyY2VzID0gdG1wOworCisgICAgcmVzb3VyY2VfZWxlbSA9 IHhtbEZpcnN0RWxlbWVudENoaWxkKHJlc291cmNlX2xpc3RfZWxlbSk7CisgICAgd2hpbGUgKHJl c291cmNlX2VsZW0pIHsKKyAgICAgICAgaW1mX3RyYWNrZmlsZV9yZXNvdXJjZV9pbml0KAorICAg ICAgICAgICAgJmNwbC0+bWFpbl9pbWFnZV8yZF90cmFjay0+cmVzb3VyY2VzW2NwbC0+bWFpbl9p bWFnZV8yZF90cmFjay0+cmVzb3VyY2VfY291bnRdKTsKKyAgICAgICAgcmV0ID0gZmlsbF90cmFj a2ZpbGVfcmVzb3VyY2UocmVzb3VyY2VfZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmNwbC0+bWFpbl9pbWFnZV8yZF90cmFjay0+cmVzb3VyY2VzW2NwbC0+bWFp bl9pbWFnZV8yZF90cmFjay0+cmVzb3VyY2VfY291bnRdLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjcGwpOworICAgICAgICBjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2st PnJlc291cmNlX2NvdW50Kys7CisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIFJlc291cmNlXG4iKTsKKyAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcmVzb3VyY2VfZWxlbSA9IHhtbE5leHRF bGVtZW50U2libGluZyhyZXNvdXJjZV9lbGVtKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBmaWxsX3ZpcnR1YWxfdHJhY2tzKHhtbE5vZGVQdHIgY3BsX2VsZW1lbnQs IEZGSU1GQ1BMICpjcGwpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgeG1sTm9kZVB0ciBzZWdt ZW50X2xpc3RfZWxlbSA9IE5VTEw7CisgICAgeG1sTm9kZVB0ciBzZWdtZW50X2VsZW0gPSBOVUxM OworICAgIHhtbE5vZGVQdHIgc2VxdWVuY2VfbGlzdF9lbGVtID0gTlVMTDsKKyAgICB4bWxOb2Rl UHRyIHNlcXVlbmNlX2VsZW0gPSBOVUxMOworCisgICAgaWYgKCEoc2VnbWVudF9saXN0X2VsZW0g PSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUoY3BsX2VsZW1lbnQsICJTZWdt ZW50TGlzdCIpKSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiU2VnbWVu dExpc3QgZWxlbWVudCBtaXNzaW5nXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgfQorCisgICAgLyogcHJvY2VzcyBzZXF1ZW5jZXMgKi8KKyAgICBzZWdtZW50 X2VsZW0gPSB4bWxGaXJzdEVsZW1lbnRDaGlsZChzZWdtZW50X2xpc3RfZWxlbSk7CisgICAgd2hp bGUgKHNlZ21lbnRfZWxlbSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAi UHJvY2Vzc2luZyBJTUYgQ1BMIFNlZ21lbnRcbiIpOworCisgICAgICAgIHNlcXVlbmNlX2xpc3Rf ZWxlbSA9IGZmX2ltZl94bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShzZWdtZW50X2VsZW0s ICJTZXF1ZW5jZUxpc3QiKTsKKyAgICAgICAgaWYgKCFzZWdtZW50X2xpc3RfZWxlbSkKKyAgICAg ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHNlcXVlbmNlX2VsZW0gPSB4bWxGaXJzdEVsZW1l bnRDaGlsZChzZXF1ZW5jZV9saXN0X2VsZW0pOworICAgICAgICB3aGlsZSAoc2VxdWVuY2VfZWxl bSkgeworICAgICAgICAgICAgaWYgKHhtbFN0cmNtcChzZXF1ZW5jZV9lbGVtLT5uYW1lLCAiTWFy a2VyU2VxdWVuY2UiKSA9PSAwKQorICAgICAgICAgICAgICAgIHJldCA9IHB1c2hfbWFya2VyX3Nl cXVlbmNlKHNlcXVlbmNlX2VsZW0sIGNwbCk7CisKKyAgICAgICAgICAgIGVsc2UgaWYgKHhtbFN0 cmNtcChzZXF1ZW5jZV9lbGVtLT5uYW1lLCAiTWFpbkltYWdlU2VxdWVuY2UiKSA9PSAwKQorICAg ICAgICAgICAgICAgIHJldCA9IHB1c2hfbWFpbl9pbWFnZV8yZF9zZXF1ZW5jZShzZXF1ZW5jZV9l bGVtLCBjcGwpOworCisgICAgICAgICAgICBlbHNlIGlmICh4bWxTdHJjbXAoc2VxdWVuY2VfZWxl bS0+bmFtZSwgIk1haW5BdWRpb1NlcXVlbmNlIikgPT0gMCkKKyAgICAgICAgICAgICAgICByZXQg PSBwdXNoX21haW5fYXVkaW9fc2VxdWVuY2Uoc2VxdWVuY2VfZWxlbSwgY3BsKTsKKworICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGF2X2xvZyhOVUxMLAorICAgICAgICAgICAgICAg ICAgICAgICBBVl9MT0dfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBmb2xsb3dp bmcgU2VxdWVuY2UgaXMgbm90IHN1cHBvcnRlZCBhbmQgaXMgaWdub3JlZDogJXNcbiIsCisgICAg ICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlX2VsZW0tPm5hbWUpOworCisgICAgICAgICAgICAv KiBhYm9ydCBwYXJzaW5nIG9ubHkgaWYgbWVtb3J5IGVycm9yIG9jY3VycmVkICovCisgICAgICAg ICAgICBpZiAocmV0ID09IEFWRVJST1IoRU5PTUVNKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g cmV0OworCisgICAgICAgICAgICBzZXF1ZW5jZV9lbGVtID0geG1sTmV4dEVsZW1lbnRTaWJsaW5n KHNlcXVlbmNlX2VsZW0pOworICAgICAgICB9CisKKyAgICAgICAgc2VnbWVudF9lbGVtID0geG1s TmV4dEVsZW1lbnRTaWJsaW5nKHNlZ21lbnRfZWxlbSk7CisgICAgfQorCisgICAgcmV0dXJuIHJl dDsKK30KKworaW50IGZmX2ltZl9wYXJzZV9jcGxfZnJvbV94bWxfZG9tKHhtbERvY1B0ciBkb2Ms IEZGSU1GQ1BMICoqY3BsKQoreworICAgIGludCByZXQgPSAwOworICAgIHhtbE5vZGVQdHIgY3Bs X2VsZW1lbnQgPSBOVUxMOworCisgICAgKmNwbCA9IGZmX2ltZl9jcGxfYWxsb2MoKTsKKyAgICBp ZiAoISpjcGwpIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3Rv IGNsZWFudXA7CisgICAgfQorCisgICAgY3BsX2VsZW1lbnQgPSB4bWxEb2NHZXRSb290RWxlbWVu dChkb2MpOworICAgIGlmICh4bWxTdHJjbXAoY3BsX2VsZW1lbnQtPm5hbWUsICJDb21wb3NpdGlv blBsYXlsaXN0IikpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRoZSBy b290IGVsZW1lbnQgb2YgdGhlIENQTCBpcyBub3QgQ29tcG9zaXRpb25QbGF5bGlzdFxuIik7Cisg ICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGdvdG8gY2xlYW51cDsK KyAgICB9CisKKyAgICBpZiAocmV0ID0gZmlsbF9jb250ZW50X3RpdGxlKGNwbF9lbGVtZW50LCAq Y3BsKSkKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIGlmIChyZXQgPSBmaWxsX2lkKGNwbF9l bGVtZW50LCAqY3BsKSkKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIGlmIChyZXQgPSBmaWxs X2VkaXRfcmF0ZShjcGxfZWxlbWVudCwgKmNwbCkpCisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAg ICBpZiAocmV0ID0gZmlsbF92aXJ0dWFsX3RyYWNrcyhjcGxfZWxlbWVudCwgKmNwbCkpCisgICAg ICAgIGdvdG8gY2xlYW51cDsKKworY2xlYW51cDoKKyAgICBpZiAoKmNwbCAmJiByZXQpIHsKKyAg ICAgICAgZmZfaW1mX2NwbF9mcmVlKCpjcGwpOworICAgICAgICAqY3BsID0gTlVMTDsKKyAgICB9 CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaW1mX21hcmtlcl9mcmVlKEZGSU1G TWFya2VyICptYXJrZXIpCit7CisgICAgaWYgKCFtYXJrZXIpCisgICAgICAgIHJldHVybjsKKyAg ICB4bWxGcmVlKG1hcmtlci0+bGFiZWxfdXRmOCk7CisgICAgeG1sRnJlZShtYXJrZXItPnNjb3Bl X3V0ZjgpOworfQorCitzdGF0aWMgdm9pZCBpbWZfbWFya2VyX3Jlc291cmNlX2ZyZWUoRkZJTUZN YXJrZXJSZXNvdXJjZSAqcnNyYykKK3sKKyAgICBpZiAoIXJzcmMpCisgICAgICAgIHJldHVybjsK KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgcnNyYy0+bWFya2VyX2NvdW50OyBpKyspCisg ICAgICAgIGltZl9tYXJrZXJfZnJlZSgmcnNyYy0+bWFya2Vyc1tpXSk7CisgICAgYXZfZnJlZXAo JnJzcmMtPm1hcmtlcnMpOworfQorCitzdGF0aWMgdm9pZCBpbWZfbWFya2VyX3ZpcnR1YWxfdHJh Y2tfZnJlZShGRklNRk1hcmtlclZpcnR1YWxUcmFjayAqdnQpCit7CisgICAgaWYgKCF2dCkKKyAg ICAgICAgcmV0dXJuOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCB2dC0+cmVzb3VyY2Vf Y291bnQ7IGkrKykKKyAgICAgICAgaW1mX21hcmtlcl9yZXNvdXJjZV9mcmVlKCZ2dC0+cmVzb3Vy Y2VzW2ldKTsKKyAgICBhdl9mcmVlcCgmdnQtPnJlc291cmNlcyk7Cit9CisKK3N0YXRpYyB2b2lk IGltZl90cmFja2ZpbGVfdmlydHVhbF90cmFja19mcmVlKEZGSU1GVHJhY2tGaWxlVmlydHVhbFRy YWNrICp2dCkKK3sKKyAgICBpZiAoIXZ0KQorICAgICAgICByZXR1cm47CisgICAgYXZfZnJlZXAo JnZ0LT5yZXNvdXJjZXMpOworfQorCitzdGF0aWMgdm9pZCBpbWZfY3BsX2luaXQoRkZJTUZDUEwg KmNwbCkKK3sKKyAgICBtZW1zZXQoY3BsLT5pZF91dWlkLCAwLCBzaXplb2YoY3BsLT5pZF91dWlk KSk7CisgICAgY3BsLT5jb250ZW50X3RpdGxlX3V0ZjggPSBOVUxMOworICAgIGNwbC0+ZWRpdF9y YXRlID0gYXZfbWFrZV9xKDAsIDEpOworICAgIGNwbC0+bWFpbl9tYXJrZXJzX3RyYWNrID0gTlVM TDsKKyAgICBjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2sgPSBOVUxMOworICAgIGNwbC0+bWFpbl9h dWRpb190cmFja19jb3VudCA9IDA7CisgICAgY3BsLT5tYWluX2F1ZGlvX3RyYWNrcyA9IE5VTEw7 Cit9CisKK0ZGSU1GQ1BMICpmZl9pbWZfY3BsX2FsbG9jKHZvaWQpCit7CisgICAgRkZJTUZDUEwg KmNwbDsKKworICAgIGNwbCA9IGF2X21hbGxvYyhzaXplb2YoRkZJTUZDUEwpKTsKKyAgICBpZiAo IWNwbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaW1mX2NwbF9pbml0KGNwbCk7CisgICAg cmV0dXJuIGNwbDsKK30KKwordm9pZCBmZl9pbWZfY3BsX2ZyZWUoRkZJTUZDUEwgKmNwbCkKK3sK KyAgICBpZiAoIWNwbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgeG1sRnJlZShjcGwtPmNvbnRl bnRfdGl0bGVfdXRmOCk7CisKKyAgICBpbWZfbWFya2VyX3ZpcnR1YWxfdHJhY2tfZnJlZShjcGwt Pm1haW5fbWFya2Vyc190cmFjayk7CisKKyAgICBpZiAoY3BsLT5tYWluX21hcmtlcnNfdHJhY2sp CisgICAgICAgIGF2X2ZyZWVwKCZjcGwtPm1haW5fbWFya2Vyc190cmFjayk7CisKKyAgICBpbWZf dHJhY2tmaWxlX3ZpcnR1YWxfdHJhY2tfZnJlZShjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2spOwor CisgICAgaWYgKGNwbC0+bWFpbl9pbWFnZV8yZF90cmFjaykKKyAgICAgICAgYXZfZnJlZXAoJmNw bC0+bWFpbl9pbWFnZV8yZF90cmFjayk7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg Y3BsLT5tYWluX2F1ZGlvX3RyYWNrX2NvdW50OyBpKyspCisgICAgICAgIGltZl90cmFja2ZpbGVf dmlydHVhbF90cmFja19mcmVlKCZjcGwtPm1haW5fYXVkaW9fdHJhY2tzW2ldKTsKKworICAgIGlm IChjcGwtPm1haW5fYXVkaW9fdHJhY2tzKQorICAgICAgICBhdl9mcmVlcCgmY3BsLT5tYWluX2F1 ZGlvX3RyYWNrcyk7CisKKyAgICBhdl9mcmVlcCgmY3BsKTsKK30KKworaW50IGZmX2ltZl9wYXJz ZV9jcGwoQVZJT0NvbnRleHQgKmluLCBGRklNRkNQTCAqKmNwbCkKK3sKKyAgICBBVkJQcmludCBi dWY7CisgICAgeG1sRG9jICpkb2MgPSBOVUxMOworICAgIGludCByZXQgPSAwOworICAgIGludDY0 X3QgZmlsZXNpemUgPSAwOworCisgICAgZmlsZXNpemUgPSBhdmlvX3NpemUoaW4pOworICAgIGZp bGVzaXplID0gZmlsZXNpemUgPiAwID8gZmlsZXNpemUgOiA4MTkyOworICAgIGF2X2JwcmludF9p bml0KCZidWYsIGZpbGVzaXplICsgMSwgQVZfQlBSSU5UX1NJWkVfVU5MSU1JVEVEKTsKKyAgICBy ZXQgPSBhdmlvX3JlYWRfdG9fYnByaW50KGluLCAmYnVmLCBVSU5UX01BWCAtIDEpOworICAgIGlm IChyZXQgPCAwIHx8ICFhdmlvX2Zlb2YoaW4pIHx8IGJ1Zi5sZW4gPT0gMCkgeworICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiQ2Fubm90IHJlYWQgSU1GIENQTFxuIik7CisgICAg ICAgIGlmIChyZXQgPT0gMCkKKyAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7 CisgICAgfSBlbHNlIHsKKyAgICAgICAgTElCWE1MX1RFU1RfVkVSU0lPTgorCisgICAgICAgIGZp bGVzaXplID0gYnVmLmxlbjsKKyAgICAgICAgZG9jID0geG1sUmVhZE1lbW9yeShidWYuc3RyLCBm aWxlc2l6ZSwgTlVMTCwgTlVMTCwgMCk7CisgICAgICAgIGlmICghZG9jKSB7CisgICAgICAgICAg ICBhdl9sb2coTlVMTCwKKyAgICAgICAgICAgICAgICAgICBBVl9MT0dfRVJST1IsCisgICAgICAg ICAgICAgICAgICAgIlhNTCBwYXJzaW5nIGZhaWxlZCB3aGVuIHJlYWRpbmcgdGhlIElNRiBDUExc biIpOworICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgfQor CisgICAgICAgIGlmIChyZXQgPSBmZl9pbWZfcGFyc2VfY3BsX2Zyb21feG1sX2RvbShkb2MsIGNw bCkpIHsKKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJDYW5ub3QgcGFy c2UgSU1GIENQTFxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdl9sb2coTlVM TCwKKyAgICAgICAgICAgICAgICAgICBBVl9MT0dfSU5GTywKKyAgICAgICAgICAgICAgICAgICAi SU1GIENQTCBDb250ZW50VGl0bGU6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICgqY3BsKS0+ Y29udGVudF90aXRsZV91dGY4KTsKKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLAorICAgICAgICAg ICAgICAgICAgIEFWX0xPR19JTkZPLAorICAgICAgICAgICAgICAgICAgICJJTUYgQ1BMIElkOiAi IEZGX0lNRl9VVUlEX0ZPUk1BVCAiXG4iLAorICAgICAgICAgICAgICAgICAgIFVJRF9BUkcoKCpj cGwpLT5pZF91dWlkKSk7CisgICAgICAgIH0KKworICAgICAgICB4bWxGcmVlRG9jKGRvYyk7Cisg ICAgfQorCisgICAgYXZfYnByaW50X2ZpbmFsaXplKCZidWYsIE5VTEwpOworCisgICAgcmV0dXJu IHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2ltZmRlYy5jIGIvbGliYXZmb3JtYXQv aW1mZGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjE0YmY2YWIx ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L2ltZmRlYy5jCkBAIC0wLDAgKzEsODk5 IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKy8qCisgKgorICog Q29weXJpZ2h0IChjKSBTYW5kZmxvdyBDb25zdWx0aW5nIExMQworICoKKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAqIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU T1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg KiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg T1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv KioKKyAqIERlbXV4ZXMgYW4gSU1GIENvbXBvc2l0aW9uCisgKgorICogUmVmZXJlbmNlcworICog T1YgMjA2Ny0wOjIwMTggLSBTTVBURSBPdmVydmlldyBEb2N1bWVudCAtIEludGVyb3BlcmFibGUg TWFzdGVyIEZvcm1hdAorICogU1QgMjA2Ny0yOjIwMjAgLSBTTVBURSBTdGFuZGFyZCAtIEludGVy b3BlcmFibGUgTWFzdGVyIEZvcm1hdCDigJQgQ29yZSBDb25zdHJhaW50cworICogU1QgMjA2Ny0z OjIwMjAgLSBTTVBURSBTdGFuZGFyZCAtIEludGVyb3BlcmFibGUgTWFzdGVyIEZvcm1hdCDigJQg Q29tcG9zaXRpb24gUGxheWxpc3QKKyAqIFNUIDIwNjctNToyMDIwIC0gU01QVEUgU3RhbmRhcmQg LSBJbnRlcm9wZXJhYmxlIE1hc3RlciBGb3JtYXQg4oCUIEVzc2VuY2UgQ29tcG9uZW50CisgKiBT VCAyMDY3LTIwOjIwMTYgLSBTTVBURSBTdGFuZGFyZCAtIEludGVyb3BlcmFibGUgTWFzdGVyIEZv cm1hdCDigJQgQXBwbGljYXRpb24gIzIKKyAqIFNUIDIwNjctMjE6MjAyMCAtIFNNUFRFIFN0YW5k YXJkIC0gSW50ZXJvcGVyYWJsZSBNYXN0ZXIgRm9ybWF0IOKAlCBBcHBsaWNhdGlvbiAjMiBFeHRl bmRlZAorICogU1QgMjA2Ny0xMDI6MjAxNyAtIFNNUFRFIFN0YW5kYXJkIC0gSW50ZXJvcGVyYWJs ZSBNYXN0ZXIgRm9ybWF0IOKAlCBDb21tb24gSW1hZ2UgUGl4ZWwgQ29sb3IgU2NoZW1lcworICog U1QgNDI5LTk6MjAwNyAtIFNNUFRFIFN0YW5kYXJkIC0gRC1DaW5lbWEgUGFja2FnaW5nIOKAlCBB c3NldCBNYXBwaW5nIGFuZCBGaWxlIFNlZ21lbnRhdGlvbgorICoKKyAqIEBhdXRob3IgTWFyYy1B bnRvaW5lIEFybmF1ZAorICogQGF1dGhvciBWYWxlbnRpbiBOb2VsCisgKiBAYXV0aG9yIE5pY2hv bGFzIFZhbmRlcnp3ZXQKKyAqIEBmaWxlCisgKiBAaW5ncm91cCBsYXZ1X2ltZgorICovCisKKyNp bmNsdWRlICJhdmlvX2ludGVybmFsLmgiCisjaW5jbHVkZSAiaW1mLmgiCisjaW5jbHVkZSAiaW50 ZXJuYWwuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIKKyNpbmNsdWRlICJsaWJh dnV0aWwvYnByaW50LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgorI2luY2x1ZGUgIm14 Zi5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8 bGlieG1sL3BhcnNlci5oPgorCisjZGVmaW5lIE1BWF9CUFJJTlRfUkVBRF9TSVpFIChVSU5UX01B WCAtIDEpCisjZGVmaW5lIERFRkFVTFRfQVNTRVRNQVBfU0laRSA4ICogMTAyNAorI2RlZmluZSBB VlJBVElPTkFMX0ZPUk1BVCAiJWQvJWQiCisjZGVmaW5lIEFWUkFUSU9OQUxfQVJHKHJhdGlvbmFs KSByYXRpb25hbC5udW0sIHJhdGlvbmFsLmRlbgorCisvKioKKyAqIElNRiBBc3NldCBsb2NhdG9y CisgKi8KK3R5cGVkZWYgc3RydWN0IElNRkFzc2V0TG9jYXRvciB7CisgICAgRkZJTUZVVUlEIHV1 aWQ7CisgICAgY2hhciAqYWJzb2x1dGVfdXJpOworfSBJTUZBc3NldExvY2F0b3I7CisKKy8qKgor ICogSU1GIEFzc2V0IGxvY2F0b3IgbWFwCisgKiBSZXN1bHRzIGZyb20gdGhlIHBhcnNpbmcgb2Yg b25lIG9yIG1vcmUgQVNTRVRNQVAgWE1MIGZpbGVzCisgKi8KK3R5cGVkZWYgc3RydWN0IElNRkFz c2V0TG9jYXRvck1hcCB7CisgICAgdWludDMyX3QgYXNzZXRfY291bnQ7CisgICAgSU1GQXNzZXRM b2NhdG9yICphc3NldHM7Cit9IElNRkFzc2V0TG9jYXRvck1hcDsKKwordHlwZWRlZiBzdHJ1Y3Qg SU1GVmlydHVhbFRyYWNrUmVzb3VyY2VQbGF5YmFja0N0eCB7CisgICAgSU1GQXNzZXRMb2NhdG9y ICpsb2NhdG9yOworICAgIEZGSU1GVHJhY2tGaWxlUmVzb3VyY2UgKnJlc291cmNlOworICAgIEFW Rm9ybWF0Q29udGV4dCAqY3R4OworfSBJTUZWaXJ0dWFsVHJhY2tSZXNvdXJjZVBsYXliYWNrQ3R4 OworCit0eXBlZGVmIHN0cnVjdCBJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0eCB7CisgICAgaW50 MzJfdCBpbmRleDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRyYWNrIGlu ZGV4IGluIHBsYXlsaXN0ICovCisgICAgQVZSYXRpb25hbCBjdXJyZW50X3RpbWVzdGFtcDsgICAg ICAgICAgICAgICAgICAvKio8IEN1cnJlbnQgdGVtcG9yYWwgcG9zaXRpb24gKi8KKyAgICBBVlJh dGlvbmFsIGR1cmF0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgT3ZlcmFsbCBk dXJhdGlvbiAqLworICAgIHVpbnQzMl90IHJlc291cmNlX2NvdW50OyAgICAgICAgICAgICAgICAg ICAgICAgLyoqPCBOdW1iZXIgb2YgcmVzb3VyY2VzICovCisgICAgdW5zaWduZWQgaW50IHJlc291 cmNlc19hbGxvY19zejsgICAgICAgICAgICAgICAvKio8IFNpemUgb2YgdGhlIGJ1ZmZlciBob2xk aW5nIHRoZSByZXNvdXJjZSAqLworICAgIElNRlZpcnR1YWxUcmFja1Jlc291cmNlUGxheWJhY2tD dHggKnJlc291cmNlczsgLyoqPCBCdWZmZXIgaG9sZGluZyB0aGUgcmVzb3VyY2VzICovCisgICAg dWludDMyX3QgY3VycmVudF9yZXNvdXJjZV9pbmRleDsgICAgICAgICAgICAgICAvKio8IEN1cnJl bnQgcmVzb3VyY2UgKi8KKyAgICBpbnQ2NF90IGxhc3RfcHRzOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qKjwgTGFzdCB0aW1lc3RhbXAgKi8KK30gSU1GVmlydHVhbFRyYWNrUGxheWJh Y2tDdHg7CisKK3R5cGVkZWYgc3RydWN0IElNRkNvbnRleHQgeworICAgIGNvbnN0IEFWQ2xhc3Mg KmNsYXNzOworICAgIGNvbnN0IGNoYXIgKmJhc2VfdXJsOworICAgIGNoYXIgKmFzc2V0X21hcF9w YXRoczsKKyAgICBBVklPSW50ZXJydXB0Q0IgKmludGVycnVwdF9jYWxsYmFjazsKKyAgICBBVkRp Y3Rpb25hcnkgKmF2aW9fb3B0czsKKyAgICBGRklNRkNQTCAqY3BsOworICAgIElNRkFzc2V0TG9j YXRvck1hcCBhc3NldF9sb2NhdG9yX21hcDsKKyAgICB1aW50MzJfdCB0cmFja19jb3VudDsKKyAg ICBJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0eCAqKnRyYWNrczsKK30gSU1GQ29udGV4dDsKKwor c3RhdGljIGludCBpbWZfdXJpX2lzX3VybChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgICAgcmV0 dXJuIHN0cnN0cihzdHJpbmcsICI6Ly8iKSAhPSBOVUxMOworfQorCitzdGF0aWMgaW50IGltZl91 cmlfaXNfdW5peF9hYnNfcGF0aChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgICAgcmV0dXJuIHN0 cmluZ1swXSA9PSAnLyc7Cit9CisKK3N0YXRpYyBpbnQgaW1mX3VyaV9pc19kb3NfYWJzX3BhdGgo Y29uc3QgY2hhciAqc3RyaW5nKQoreworICAgIC8qIEFic29sdXRlIHBhdGggY2FzZTogYEM6XHBh dGhcdG9cc29td2hlcmVgICovCisgICAgaWYgKHN0cmluZ1sxXSA9PSAnOicgJiYgc3RyaW5nWzJd ID09ICdcXCcpCisgICAgICAgIHJldHVybiAxOworCisgICAgLyogQWJzb2x1dGUgcGF0aCBjYXNl OiBgQzovcGF0aC90by9zb213aGVyZWAgKi8KKyAgICBpZiAoc3RyaW5nWzFdID09ICc6JyAmJiBz dHJpbmdbMl0gPT0gJy8nKQorICAgICAgICByZXR1cm4gMTsKKworICAgIC8qIE5ldHdvcmsgcGF0 aCBjYXNlOiBgXFxwYXRoXHRvXHNvbXdoZXJlYCAqLworICAgIGlmIChzdHJpbmdbMF0gPT0gJ1xc JyAmJiBzdHJpbmdbMV0gPT0gJ1xcJykKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4g MDsKK30KKworLyoqCisgKiBQYXJzZSBhIEFTU0VUTUFQIFhNTCBmaWxlIHRvIGV4dHJhY3QgdGhl IFVVSUQtVVJJIG1hcHBpbmcgb2YgYXNzZXRzLgorICogQHBhcmFtIHMgdGhlIGN1cnJlbnQgZm9y bWF0IGNvbnRleHQsIGlmIGFueSAoY2FuIGJlIE5VTEwpLgorICogQHBhcmFtIGRvYyB0aGUgWE1M IGRvY3VtZW50IHRvIGJlIHBhcnNlZC4KKyAqIEBwYXJhbSBhc3NldF9tYXAgcG9pbnRlciBvbiB0 aGUgSU1GQXNzZXRMb2NhdG9yTWFwIHRvIGZpbGwuCisgKiBAcGFyYW0gYmFzZV91cmwgdGhlIHVy bCBvZiB0aGUgYXNzZXQgbWFwIFhNTCBmaWxlLCBpZiBhbnkgKGNhbiBiZSBOVUxMKS4KKyAqIEBy ZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSBpbiBjYXNlIG9mIGVycm9yLCAwIG90aGVyd2lzZS4KKyAq Lworc3RhdGljIGludCBwYXJzZV9pbWZfYXNzZXRfbWFwX2Zyb21feG1sX2RvbShBVkZvcm1hdENv bnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHht bERvY1B0ciBkb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElNRkFzc2V0TG9jYXRvck1hcCAqYXNzZXRfbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiYXNlX3VybCkKK3sKKyAgICB4bWxOb2Rl UHRyIGFzc2V0X21hcF9lbGVtZW50ID0gTlVMTDsKKyAgICB4bWxOb2RlUHRyIG5vZGUgPSBOVUxM OworICAgIHhtbE5vZGVQdHIgYXNzZXRfZWxlbWVudCA9IE5VTEw7CisgICAgdW5zaWduZWQgbG9u ZyBlbGVtX2NvdW50OworICAgIGNoYXIgKnVyaTsKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBJTUZB c3NldExvY2F0b3IgKmFzc2V0ID0gTlVMTDsKKyAgICB2b2lkICp0bXA7CisKKyAgICBhc3NldF9t YXBfZWxlbWVudCA9IHhtbERvY0dldFJvb3RFbGVtZW50KGRvYyk7CisKKyAgICBpZiAoIWFzc2V0 X21hcF9lbGVtZW50KSB7CisgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUg dG8gcGFyc2UgYXNzZXQgbWFwIFhNTCAtIG1pc3Npbmcgcm9vdCBub2RlXG4iKTsKKyAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAgaWYgKGFzc2V0X21hcF9l bGVtZW50LT50eXBlICE9IFhNTF9FTEVNRU5UX05PREUgfHwgYXZfc3RyY2FzZWNtcChhc3NldF9t YXBfZWxlbWVudC0+bmFtZSwgIkFzc2V0TWFwIikpIHsKKyAgICAgICAgYXZfbG9nKHMsCisgICAg ICAgICAgICAgICBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAiVW5hYmxlIHRvIHBhcnNl IGFzc2V0IG1hcCBYTUwgLSB3cm9uZyByb290IG5vZGUgbmFtZVslc10gdHlwZVslZF1cbiIsCisg ICAgICAgICAgICAgICBhc3NldF9tYXBfZWxlbWVudC0+bmFtZSwKKyAgICAgICAgICAgICAgIChp bnQpYXNzZXRfbWFwX2VsZW1lbnQtPnR5cGUpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKKyAgICB9CisKKyAgICAvKiBwYXJzZSBhc3NldCBsb2NhdG9ycyAqLworICAgIGlm ICghKG5vZGUgPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUoYXNzZXRfbWFw X2VsZW1lbnQsICJBc3NldExpc3QiKSkpIHsKKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJP UiwgIlVuYWJsZSB0byBwYXJzZSBhc3NldCBtYXAgWE1MIC0gbWlzc2luZyBBc3NldExpc3Qgbm9k ZVxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKyAgICBl bGVtX2NvdW50ID0geG1sQ2hpbGRFbGVtZW50Q291bnQobm9kZSk7CisgICAgaWYgKGVsZW1fY291 bnQgPiBVSU5UMzJfTUFYCisgICAgICAgIHx8IGFzc2V0X21hcC0+YXNzZXRfY291bnQgPiBVSU5U MzJfTUFYIC0gZWxlbV9jb3VudCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAg ICB0bXAgPSBhdl9yZWFsbG9jX2FycmF5KGFzc2V0X21hcC0+YXNzZXRzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgZWxlbV9jb3VudCArIGFzc2V0X21hcC0+YXNzZXRfY291bnQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSU1GQXNzZXRMb2NhdG9yKSk7CisgICAgaWYg KCF0bXApIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBhbGxv Y2F0ZSBJTUYgYXNzZXQgbG9jYXRvcnNcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOworICAgIH0KKyAgICBhc3NldF9tYXAtPmFzc2V0cyA9IHRtcDsKKworICAgIGFzc2V0X2Vs ZW1lbnQgPSB4bWxGaXJzdEVsZW1lbnRDaGlsZChub2RlKTsKKyAgICB3aGlsZSAoYXNzZXRfZWxl bWVudCkgeworICAgICAgICBpZiAoYXZfc3RyY2FzZWNtcChhc3NldF9lbGVtZW50LT5uYW1lLCAi QXNzZXQiKSAhPSAwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXNzZXQgPSAm KGFzc2V0X21hcC0+YXNzZXRzW2Fzc2V0X21hcC0+YXNzZXRfY291bnRdKTsKKworICAgICAgICBp ZiAoZmZfaW1mX3htbF9yZWFkX3V1aWQoZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9u YW1lKGFzc2V0X2VsZW1lbnQsICJJZCIpLCBhc3NldC0+dXVpZCkpIHsKKyAgICAgICAgICAgIGF2 X2xvZyhzLCBBVl9MT0dfRVJST1IsICJDb3VsZCBub3QgcGFyc2UgVVVJRCBmcm9tIGFzc2V0IGlu IGFzc2V0IG1hcC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 CisgICAgICAgIH0KKworICAgICAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAiRm91bmQgYXNz ZXQgaWQ6ICIgRkZfSU1GX1VVSURfRk9STUFUICJcbiIsIFVJRF9BUkcoYXNzZXQtPnV1aWQpKTsK KworICAgICAgICBpZiAoIShub2RlID0gZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9u YW1lKGFzc2V0X2VsZW1lbnQsICJDaHVua0xpc3QiKSkpIHsKKyAgICAgICAgICAgIGF2X2xvZyhz LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gcGFyc2UgYXNzZXQgbWFwIFhNTCAtIG1pc3Npbmcg Q2h1bmtMaXN0IG5vZGVcbiIpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShub2RlID0gZmZfaW1mX3htbF9nZXRfY2hp bGRfZWxlbWVudF9ieV9uYW1lKG5vZGUsICJDaHVuayIpKSkgeworICAgICAgICAgICAgYXZfbG9n KHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBwYXJzZSBhc3NldCBtYXAgWE1MIC0gbWlzc2lu ZyBDaHVuayBub2RlXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OworICAgICAgICB9CisKKyAgICAgICAgdXJpID0geG1sTm9kZUdldENvbnRlbnQoZmZfaW1mX3ht bF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKG5vZGUsICJQYXRoIikpOworICAgICAgICBpZiAo IWltZl91cmlfaXNfdXJsKHVyaSkgJiYgIWltZl91cmlfaXNfdW5peF9hYnNfcGF0aCh1cmkpICYm ICFpbWZfdXJpX2lzX2Rvc19hYnNfcGF0aCh1cmkpKQorICAgICAgICAgICAgYXNzZXQtPmFic29s dXRlX3VyaSA9IGF2X2FwcGVuZF9wYXRoX2NvbXBvbmVudChiYXNlX3VybCwgdXJpKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgYXNzZXQtPmFic29sdXRlX3VyaSA9IGF2X3N0cmR1cCh1cmkp OworICAgICAgICB4bWxGcmVlKHVyaSk7CisgICAgICAgIGlmICghYXNzZXQtPmFic29sdXRlX3Vy aSkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAgICAgYXZfbG9n KHMsIEFWX0xPR19ERUJVRywgIkZvdW5kIGFzc2V0IGFic29sdXRlIFVSSTogJXNcbiIsIGFzc2V0 LT5hYnNvbHV0ZV91cmkpOworCisgICAgICAgIGFzc2V0X21hcC0+YXNzZXRfY291bnQrKzsKKyAg ICAgICAgYXNzZXRfZWxlbWVudCA9IHhtbE5leHRFbGVtZW50U2libGluZyhhc3NldF9lbGVtZW50 KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIEluaXRpYWxpemVzIGFu IElNRkFzc2V0TG9jYXRvck1hcCBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyB2b2lkIGltZl9hc3Nl dF9sb2NhdG9yX21hcF9pbml0KElNRkFzc2V0TG9jYXRvck1hcCAqYXNzZXRfbWFwKQoreworICAg IGFzc2V0X21hcC0+YXNzZXRzID0gTlVMTDsKKyAgICBhc3NldF9tYXAtPmFzc2V0X2NvdW50ID0g MDsKK30KKworLyoqCisgKiBGcmVlIGEgSU1GQXNzZXRMb2NhdG9yTWFwIHBvaW50ZXIuCisgKi8K K3N0YXRpYyB2b2lkIGltZl9hc3NldF9sb2NhdG9yX21hcF9kZWluaXQoSU1GQXNzZXRMb2NhdG9y TWFwICphc3NldF9tYXApCit7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGFzc2V0X21h cC0+YXNzZXRfY291bnQ7ICsraSkKKyAgICAgICAgYXZfZnJlZXAoJmFzc2V0X21hcC0+YXNzZXRz W2ldLmFic29sdXRlX3VyaSk7CisKKyAgICBhdl9mcmVlcCgmYXNzZXRfbWFwLT5hc3NldHMpOwor fQorCitzdGF0aWMgaW50IHBhcnNlX2Fzc2V0bWFwKEFWRm9ybWF0Q29udGV4dCAqcywgY29uc3Qg Y2hhciAqdXJsKQoreworICAgIElNRkNvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7CisgICAgQVZJ T0NvbnRleHQgKmluID0gTlVMTDsKKyAgICBzdHJ1Y3QgQVZCUHJpbnQgYnVmOworICAgIEFWRGlj dGlvbmFyeSAqb3B0cyA9IE5VTEw7CisgICAgeG1sRG9jICpkb2MgPSBOVUxMOworICAgIGNvbnN0 IGNoYXIgKmJhc2VfdXJsOworICAgIGNoYXIgKnRtcF9zdHIgPSBOVUxMOworICAgIGludCByZXQ7 CisgICAgaW50NjRfdCBmaWxlc2l6ZTsKKworICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJB c3NldCBNYXAgVVJMOiAlc1xuIiwgdXJsKTsKKworICAgIGF2X2RpY3RfY29weSgmb3B0cywgYy0+ YXZpb19vcHRzLCAwKTsKKyAgICByZXQgPSBzLT5pb19vcGVuKHMsICZpbiwgdXJsLCBBVklPX0ZM QUdfUkVBRCwgJm9wdHMpOworICAgIGF2X2RpY3RfZnJlZSgmb3B0cyk7CisgICAgaWYgKHJldCA8 IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBmaWxlc2l6ZSA9IGF2aW9fc2l6ZShpbik7 CisgICAgZmlsZXNpemUgPSBmaWxlc2l6ZSA+IDAgPyBmaWxlc2l6ZSA6IERFRkFVTFRfQVNTRVRN QVBfU0laRTsKKworICAgIGF2X2JwcmludF9pbml0KCZidWYsIGZpbGVzaXplICsgMSwgQVZfQlBS SU5UX1NJWkVfVU5MSU1JVEVEKTsKKworICAgIHJldCA9IGF2aW9fcmVhZF90b19icHJpbnQoaW4s ICZidWYsIE1BWF9CUFJJTlRfUkVBRF9TSVpFKTsKKyAgICBpZiAocmV0IDwgMCB8fCAhYXZpb19m ZW9mKGluKSB8fCBidWYubGVuID09IDApIHsKKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJP UiwgIlVuYWJsZSB0byByZWFkIHRvIGFzc2V0IG1hcCAnJXMnXG4iLCB1cmwpOworICAgICAgICBp ZiAocmV0ID09IDApCisgICAgICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg ICAgICBnb3RvIGNsZWFuX3VwOworICAgIH0KKworICAgIExJQlhNTF9URVNUX1ZFUlNJT04KKwor ICAgIHRtcF9zdHIgPSBhdl9zdHJkdXAodXJsKTsKKyAgICBpZiAoIXRtcF9zdHIpIHsKKyAgICAg ICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGNsZWFuX3VwOworICAgIH0K KyAgICBiYXNlX3VybCA9IGF2X2Rpcm5hbWUodG1wX3N0cik7CisKKyAgICBmaWxlc2l6ZSA9IGJ1 Zi5sZW47CisgICAgZG9jID0geG1sUmVhZE1lbW9yeShidWYuc3RyLCBmaWxlc2l6ZSwgdXJsLCBO VUxMLCAwKTsKKworICAgIHJldCA9IHBhcnNlX2ltZl9hc3NldF9tYXBfZnJvbV94bWxfZG9tKHMs IGRvYywgJmMtPmFzc2V0X2xvY2F0b3JfbWFwLCBiYXNlX3VybCk7CisgICAgaWYgKCFyZXQpCisg ICAgICAgIGF2X2xvZyhzLAorICAgICAgICAgICAgICAgQVZfTE9HX0RFQlVHLAorICAgICAgICAg ICAgICAgIkZvdW5kICVkIGFzc2V0cyBmcm9tICVzXG4iLAorICAgICAgICAgICAgICAgYy0+YXNz ZXRfbG9jYXRvcl9tYXAuYXNzZXRfY291bnQsCisgICAgICAgICAgICAgICB1cmwpOworCisgICAg eG1sRnJlZURvYyhkb2MpOworCitjbGVhbl91cDoKKyAgICBpZiAodG1wX3N0cikKKyAgICAgICAg YXZfZnJlZXAoJnRtcF9zdHIpOworICAgIGZmX2Zvcm1hdF9pb19jbG9zZShzLCAmaW4pOworICAg IGF2X2JwcmludF9maW5hbGl6ZSgmYnVmLCBOVUxMKTsKKyAgICByZXR1cm4gcmV0OworfQorCitz dGF0aWMgSU1GQXNzZXRMb2NhdG9yICpmaW5kX2Fzc2V0X21hcF9sb2NhdG9yKElNRkFzc2V0TG9j YXRvck1hcCAqYXNzZXRfbWFwLCBGRklNRlVVSUQgdXVpZCkKK3sKKyAgICBmb3IgKHVpbnQzMl90 IGkgPSAwOyBpIDwgYXNzZXRfbWFwLT5hc3NldF9jb3VudDsgKytpKSB7CisgICAgICAgIGlmICht ZW1jbXAoYXNzZXRfbWFwLT5hc3NldHNbaV0udXVpZCwgdXVpZCwgMTYpID09IDApCisgICAgICAg ICAgICByZXR1cm4gJihhc3NldF9tYXAtPmFzc2V0c1tpXSk7CisgICAgfQorICAgIHJldHVybiBO VUxMOworfQorCitzdGF0aWMgaW50IG9wZW5fdHJhY2tfcmVzb3VyY2VfY29udGV4dChBVkZvcm1h dENvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUZW aXJ0dWFsVHJhY2tSZXNvdXJjZVBsYXliYWNrQ3R4ICp0cmFja19yZXNvdXJjZSkKK3sKKyAgICBJ TUZDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOworICAgIGludCByZXQgPSAwOworICAgIGludDY0 X3QgZW50cnlfcG9pbnQ7CisgICAgQVZEaWN0aW9uYXJ5ICpvcHRzID0gTlVMTDsKKworICAgIGlm ICh0cmFja19yZXNvdXJjZS0+Y3R4KSB7CisgICAgICAgIGF2X2xvZyhzLAorICAgICAgICAgICAg ICAgQVZfTE9HX0RFQlVHLAorICAgICAgICAgICAgICAgIklucHV0IGNvbnRleHQgYWxyZWFkeSBv cGVuZWQgZm9yICVzLlxuIiwKKyAgICAgICAgICAgICAgIHRyYWNrX3Jlc291cmNlLT5sb2NhdG9y LT5hYnNvbHV0ZV91cmkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB0cmFja19y ZXNvdXJjZS0+Y3R4ID0gYXZmb3JtYXRfYWxsb2NfY29udGV4dCgpOworICAgIGlmICghdHJhY2tf cmVzb3VyY2UtPmN0eCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIHRy YWNrX3Jlc291cmNlLT5jdHgtPmlvX29wZW4gPSBzLT5pb19vcGVuOworICAgIHRyYWNrX3Jlc291 cmNlLT5jdHgtPmlvX2Nsb3NlID0gcy0+aW9fY2xvc2U7CisgICAgdHJhY2tfcmVzb3VyY2UtPmN0 eC0+aW9fY2xvc2UyID0gcy0+aW9fY2xvc2UyOworICAgIHRyYWNrX3Jlc291cmNlLT5jdHgtPmZs YWdzIHw9IHMtPmZsYWdzICYgfkFWRk1UX0ZMQUdfQ1VTVE9NX0lPOworCisgICAgaWYgKChyZXQg PSBmZl9jb3B5X3doaXRlYmxhY2tsaXN0cyh0cmFja19yZXNvdXJjZS0+Y3R4LCBzKSkgPCAwKQor ICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICBpZiAocmV0ID0gYXZfb3B0X3NldCh0cmFja19y ZXNvdXJjZS0+Y3R4LCAiZm9ybWF0X3doaXRlbGlzdCIsICJteGYiLCAwKSkKKyAgICAgICAgZ290 byBjbGVhbnVwOworCisgICAgaWYgKChyZXQgPSBhdl9kaWN0X2NvcHkoJm9wdHMsIGMtPmF2aW9f b3B0cywgMCkpIDwgMCkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgcmV0ID0gYXZmb3Jt YXRfb3Blbl9pbnB1dCgmdHJhY2tfcmVzb3VyY2UtPmN0eCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRyYWNrX3Jlc291cmNlLT5sb2NhdG9yLT5hYnNvbHV0ZV91cmksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJm9wdHMpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyhzLAorICAgICAg ICAgICAgICAgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBvcGVuICVz IGlucHV0IGNvbnRleHQ6ICVzXG4iLAorICAgICAgICAgICAgICAgdHJhY2tfcmVzb3VyY2UtPmxv Y2F0b3ItPmFic29sdXRlX3VyaSwKKyAgICAgICAgICAgICAgIGF2X2VycjJzdHIocmV0KSk7Cisg ICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisgICAgYXZfZGljdF9mcmVlKCZvcHRzKTsKKwor ICAgIC8qIENvbXBhcmUgdGhlIHNvdXJjZSB0aW1lYmFzZSB0byB0aGUgcmVzb3VyY2UgZWRpdCBy YXRlLCAKKyAgICAgKiBjb25zaWRlcmluZyB0aGUgZmlyc3Qgc3RyZWFtIG9mIHRoZSBzb3VyY2Ug ZmlsZQorICAgICAqLworICAgIGlmIChhdl9jbXBfcSh0cmFja19yZXNvdXJjZS0+Y3R4LT5zdHJl YW1zWzBdLT50aW1lX2Jhc2UsCisgICAgICAgICAgICAgICAgIGF2X2ludl9xKHRyYWNrX3Jlc291 cmNlLT5yZXNvdXJjZS0+YmFzZS5lZGl0X3JhdGUpKSkKKyAgICAgICAgYXZfbG9nKHMsCisgICAg ICAgICAgICAgICBBVl9MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICJJbmNvaGVyZW50IHNv dXJjZSBzdHJlYW0gdGltZWJhc2UgJWQvJWQgcmVnYXJkaW5nIHJlc291cmNlIGVkaXQgcmF0ZTog JWQvJWQiLAorICAgICAgICAgICAgICAgdHJhY2tfcmVzb3VyY2UtPmN0eC0+c3RyZWFtc1swXS0+ dGltZV9iYXNlLm51bSwKKyAgICAgICAgICAgICAgIHRyYWNrX3Jlc291cmNlLT5jdHgtPnN0cmVh bXNbMF0tPnRpbWVfYmFzZS5kZW4sCisgICAgICAgICAgICAgICB0cmFja19yZXNvdXJjZS0+cmVz b3VyY2UtPmJhc2UuZWRpdF9yYXRlLmRlbiwKKyAgICAgICAgICAgICAgIHRyYWNrX3Jlc291cmNl LT5yZXNvdXJjZS0+YmFzZS5lZGl0X3JhdGUubnVtKTsKKworICAgIGVudHJ5X3BvaW50ID0gKGlu dDY0X3QpdHJhY2tfcmVzb3VyY2UtPnJlc291cmNlLT5iYXNlLmVudHJ5X3BvaW50CisgICAgICAg ICogdHJhY2tfcmVzb3VyY2UtPnJlc291cmNlLT5iYXNlLmVkaXRfcmF0ZS5kZW4KKyAgICAgICAg KiBBVl9USU1FX0JBU0UKKyAgICAgICAgLyB0cmFja19yZXNvdXJjZS0+cmVzb3VyY2UtPmJhc2Uu ZWRpdF9yYXRlLm51bTsKKworICAgIGlmIChlbnRyeV9wb2ludCkgeworICAgICAgICBhdl9sb2co cywKKyAgICAgICAgICAgICAgIEFWX0xPR19ERUJVRywKKyAgICAgICAgICAgICAgICJTZWVrIGF0 IHJlc291cmNlICVzIGVudHJ5IHBvaW50OiAlIiBQUkl1MzIgIlxuIiwKKyAgICAgICAgICAgICAg IHRyYWNrX3Jlc291cmNlLT5sb2NhdG9yLT5hYnNvbHV0ZV91cmksCisgICAgICAgICAgICAgICB0 cmFja19yZXNvdXJjZS0+cmVzb3VyY2UtPmJhc2UuZW50cnlfcG9pbnQpOworICAgICAgICByZXQg PSBhdmZvcm1hdF9zZWVrX2ZpbGUodHJhY2tfcmVzb3VyY2UtPmN0eCwgLTEsIGVudHJ5X3BvaW50 LCBlbnRyeV9wb2ludCwgZW50cnlfcG9pbnQsIDApOworICAgICAgICBpZiAocmV0IDwgMCkgewor ICAgICAgICAgICAgYXZfbG9nKHMsCisgICAgICAgICAgICAgICAgICAgQVZfTE9HX0VSUk9SLAor ICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3Qgc2VlayBhdCAlIiBQUklkNjQgIm9uICVzOiAl c1xuIiwKKyAgICAgICAgICAgICAgICAgICBlbnRyeV9wb2ludCwKKyAgICAgICAgICAgICAgICAg ICB0cmFja19yZXNvdXJjZS0+bG9jYXRvci0+YWJzb2x1dGVfdXJpLAorICAgICAgICAgICAgICAg ICAgIGF2X2VycjJzdHIocmV0KSk7CisgICAgICAgICAgICBhdmZvcm1hdF9jbG9zZV9pbnB1dCgm dHJhY2tfcmVzb3VyY2UtPmN0eCk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9 CisgICAgfQorCisgICAgcmV0dXJuIDA7CisKK2NsZWFudXA6CisgICAgYXZfZGljdF9mcmVlKCZv cHRzKTsKKyAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQodHJhY2tfcmVzb3VyY2UtPmN0eCk7Cisg ICAgdHJhY2tfcmVzb3VyY2UtPmN0eCA9IE5VTEw7CisgICAgcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBvcGVuX3RyYWNrX2ZpbGVfcmVzb3VyY2UoQVZGb3JtYXRDb250ZXh0ICpzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZJTUZUcmFja0ZpbGVSZXNvdXJjZSAq dHJhY2tfZmlsZV9yZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElNRlZpcnR1YWxUcmFja1BsYXliYWNrQ3R4ICp0cmFjaykKK3sKKyAgICBJTUZDb250ZXh0ICpj ID0gcy0+cHJpdl9kYXRhOworICAgIElNRkFzc2V0TG9jYXRvciAqYXNzZXRfbG9jYXRvcjsKKyAg ICB2b2lkICp0bXA7CisgICAgaW50IHJldDsKKworICAgIGFzc2V0X2xvY2F0b3IgPSBmaW5kX2Fz c2V0X21hcF9sb2NhdG9yKCZjLT5hc3NldF9sb2NhdG9yX21hcCwgdHJhY2tfZmlsZV9yZXNvdXJj ZS0+dHJhY2tfZmlsZV91dWlkKTsKKyAgICBpZiAoIWFzc2V0X2xvY2F0b3IpIHsKKyAgICAgICAg YXZfbG9nKHMsCisgICAgICAgICAgICAgICBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAi Q291bGQgbm90IGZpbmQgYXNzZXQgbG9jYXRvciBmb3IgVVVJRDogIiBGRl9JTUZfVVVJRF9GT1JN QVQgIlxuIiwKKyAgICAgICAgICAgICAgIFVJRF9BUkcodHJhY2tfZmlsZV9yZXNvdXJjZS0+dHJh Y2tfZmlsZV91dWlkKSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg IH0KKworICAgIGF2X2xvZyhzLAorICAgICAgICAgICBBVl9MT0dfREVCVUcsCisgICAgICAgICAg ICJGb3VuZCBsb2NhdG9yIGZvciAiIEZGX0lNRl9VVUlEX0ZPUk1BVCAiOiAlc1xuIiwKKyAgICAg ICAgICAgVUlEX0FSRyhhc3NldF9sb2NhdG9yLT51dWlkKSwKKyAgICAgICAgICAgYXNzZXRfbG9j YXRvci0+YWJzb2x1dGVfdXJpKTsKKworICAgIGlmICh0cmFjay0+cmVzb3VyY2VfY291bnQgPiBV SU5UMzJfTUFYIC0gdHJhY2tfZmlsZV9yZXNvdXJjZS0+YmFzZS5yZXBlYXRfY291bnQKKyAgICAg ICAgfHwgKHRyYWNrLT5yZXNvdXJjZV9jb3VudCArIHRyYWNrX2ZpbGVfcmVzb3VyY2UtPmJhc2Uu cmVwZWF0X2NvdW50KQorICAgICAgICAgICAgPiBJTlRfTUFYIC8gc2l6ZW9mKElNRlZpcnR1YWxU cmFja1Jlc291cmNlUGxheWJhY2tDdHgpKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p OworICAgIHRtcCA9IGF2X2Zhc3RfcmVhbGxvYyh0cmFjay0+cmVzb3VyY2VzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAmdHJhY2stPnJlc291cmNlc19hbGxvY19zeiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgKHRyYWNrLT5yZXNvdXJjZV9jb3VudCArIHRyYWNrX2ZpbGVfcmVzb3Vy Y2UtPmJhc2UucmVwZWF0X2NvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBz aXplb2YoSU1GVmlydHVhbFRyYWNrUmVzb3VyY2VQbGF5YmFja0N0eCkpOworICAgIGlmICghdG1w KQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIHRyYWNrLT5yZXNvdXJjZXMg PSB0bXA7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgdHJhY2tfZmlsZV9yZXNvdXJj ZS0+YmFzZS5yZXBlYXRfY291bnQ7ICsraSkgeworICAgICAgICBJTUZWaXJ0dWFsVHJhY2tSZXNv dXJjZVBsYXliYWNrQ3R4IHZ0X2N0eDsKKworICAgICAgICB2dF9jdHgubG9jYXRvciA9IGFzc2V0 X2xvY2F0b3I7CisgICAgICAgIHZ0X2N0eC5yZXNvdXJjZSA9IHRyYWNrX2ZpbGVfcmVzb3VyY2U7 CisgICAgICAgIHZ0X2N0eC5jdHggPSBOVUxMOworICAgICAgICBpZiAoKHJldCA9IG9wZW5fdHJh Y2tfcmVzb3VyY2VfY29udGV4dChzLCAmdnRfY3R4KSkgIT0gMCkKKyAgICAgICAgICAgIHJldHVy biByZXQ7CisgICAgICAgIHRyYWNrLT5yZXNvdXJjZXNbdHJhY2stPnJlc291cmNlX2NvdW50Kytd ID0gdnRfY3R4OworICAgICAgICB0cmFjay0+ZHVyYXRpb24gPSBhdl9hZGRfcSh0cmFjay0+ZHVy YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X21ha2VfcSgoaW50 KXRyYWNrX2ZpbGVfcmVzb3VyY2UtPmJhc2UuZHVyYXRpb24KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRyYWNrX2ZpbGVfcmVzb3VyY2UtPmJhc2Uu ZWRpdF9yYXRlLmRlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRyYWNrX2ZpbGVfcmVzb3VyY2UtPmJhc2UuZWRpdF9yYXRlLm51bSkpOworICAgIH0KKwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbWZfdmlydHVhbF90cmFja19wbGF5YmFj a19jb250ZXh0X2RlaW5pdChJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0eCAqdHJhY2spCit7Cisg ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHRyYWNrLT5yZXNvdXJjZV9jb3VudDsgKytpKQor ICAgICAgICBhdmZvcm1hdF9jbG9zZV9pbnB1dCgmdHJhY2stPnJlc291cmNlc1tpXS5jdHgpOwor CisgICAgYXZfZnJlZXAoJnRyYWNrLT5yZXNvdXJjZXMpOworfQorCitzdGF0aWMgaW50IG9wZW5f dmlydHVhbF90cmFjayhBVkZvcm1hdENvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGRklNRlRyYWNrRmlsZVZpcnR1YWxUcmFjayAqdmlydHVhbF90cmFjaywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgdHJhY2tfaW5kZXgpCit7CisgICAgSU1G Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKKyAgICBJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0 eCAqdHJhY2sgPSBOVUxMOworICAgIHZvaWQgKnRtcDsKKyAgICBpbnQgcmV0ID0gMDsKKworICAg IGlmICghKHRyYWNrID0gYXZfbWFsbG9jeihzaXplb2YoSU1GVmlydHVhbFRyYWNrUGxheWJhY2tD dHgpKSkpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgdHJhY2stPmluZGV4 ID0gdHJhY2tfaW5kZXg7CisgICAgdHJhY2stPmR1cmF0aW9uID0gYXZfbWFrZV9xKDAsIDEpOwor CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHZpcnR1YWxfdHJhY2stPnJlc291cmNlX2Nv dW50OyBpKyspIHsKKyAgICAgICAgYXZfbG9nKHMsCisgICAgICAgICAgICAgICBBVl9MT0dfREVC VUcsCisgICAgICAgICAgICAgICAiT3BlbiBzdHJlYW0gZnJvbSBmaWxlICIgRkZfSU1GX1VVSURf Rk9STUFUICIsIHN0cmVhbSAlZFxuIiwKKyAgICAgICAgICAgICAgIFVJRF9BUkcodmlydHVhbF90 cmFjay0+cmVzb3VyY2VzW2ldLnRyYWNrX2ZpbGVfdXVpZCksCisgICAgICAgICAgICAgICBpKTsK KyAgICAgICAgaWYgKChyZXQgPSBvcGVuX3RyYWNrX2ZpbGVfcmVzb3VyY2UocywgJnZpcnR1YWxf dHJhY2stPnJlc291cmNlc1tpXSwgdHJhY2spKSAhPSAwKSB7CisgICAgICAgICAgICBhdl9sb2co cywKKyAgICAgICAgICAgICAgICAgICBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAg IkNvdWxkIG5vdCBvcGVuIGltYWdlIHRyYWNrIHJlc291cmNlICIgRkZfSU1GX1VVSURfRk9STUFU ICJcbiIsCisgICAgICAgICAgICAgICAgICAgVUlEX0FSRyh2aXJ0dWFsX3RyYWNrLT5yZXNvdXJj ZXNbaV0udHJhY2tfZmlsZV91dWlkKSk7CisgICAgICAgICAgICBnb3RvIGNsZWFuX3VwOworICAg ICAgICB9CisgICAgfQorCisgICAgdHJhY2stPmN1cnJlbnRfdGltZXN0YW1wID0gYXZfbWFrZV9x KDAsIHRyYWNrLT5kdXJhdGlvbi5kZW4pOworCisgICAgaWYgKGMtPnRyYWNrX2NvdW50ID09IFVJ TlQzMl9NQVgpIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3Rv IGNsZWFuX3VwOworICAgIH0KKyAgICB0bXAgPSBhdl9yZWFsbG9jX2FycmF5KGMtPnRyYWNrcywg Yy0+dHJhY2tfY291bnQgKyAxLCBzaXplb2YoSU1GVmlydHVhbFRyYWNrUGxheWJhY2tDdHggKikp OworICAgIGlmICghdG1wKSB7CisgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAg ICAgZ290byBjbGVhbl91cDsKKyAgICB9CisgICAgYy0+dHJhY2tzID0gdG1wOworICAgIGMtPnRy YWNrc1tjLT50cmFja19jb3VudCsrXSA9IHRyYWNrOworCisgICAgcmV0dXJuIDA7CisKK2NsZWFu X3VwOgorICAgIGltZl92aXJ0dWFsX3RyYWNrX3BsYXliYWNrX2NvbnRleHRfZGVpbml0KHRyYWNr KTsKKyAgICBhdl9mcmVlKHRyYWNrKTsKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IHNldF9jb250ZXh0X3N0cmVhbXNfZnJvbV90cmFja3MoQVZGb3JtYXRDb250ZXh0ICpzKQorewor ICAgIElNRkNvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7CisgICAgaW50IHJldCA9IDA7CisKKyAg ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYy0+dHJhY2tfY291bnQ7ICsraSkgeworICAgICAg ICBBVlN0cmVhbSAqYXNzZXRfc3RyZWFtOworICAgICAgICBBVlN0cmVhbSAqZmlyc3RfcmVzb3Vy Y2Vfc3RyZWFtOworCisgICAgICAgIC8qIE9wZW4gdGhlIGZpcnN0IHJlc291cmNlIG9mIHRoZSB0 cmFjayB0byBnZXQgc3RyZWFtIGluZm9ybWF0aW9uICovCisgICAgICAgIGZpcnN0X3Jlc291cmNl X3N0cmVhbSA9IGMtPnRyYWNrc1tpXS0+cmVzb3VyY2VzWzBdLmN0eC0+c3RyZWFtc1swXTsKKyAg ICAgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIk9wZW4gdGhlIGZpcnN0IHJlc291cmNlIG9m IHRyYWNrICVkXG4iLCBjLT50cmFja3NbaV0tPmluZGV4KTsKKworICAgICAgICAvKiBDb3B5IHN0 cmVhbSBpbmZvcm1hdGlvbiAqLworICAgICAgICBhc3NldF9zdHJlYW0gPSBhdmZvcm1hdF9uZXdf c3RyZWFtKHMsIE5VTEwpOworICAgICAgICBpZiAoIWFzc2V0X3N0cmVhbSkgeworICAgICAgICAg ICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19F UlJPUiwgIkNvdWxkIG5vdCBjcmVhdGUgc3RyZWFtXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisgICAgICAgIGFzc2V0X3N0cmVhbS0+aWQgPSBpOworICAgICAgICByZXQgPSBh dmNvZGVjX3BhcmFtZXRlcnNfY29weShhc3NldF9zdHJlYW0tPmNvZGVjcGFyLCBmaXJzdF9yZXNv dXJjZV9zdHJlYW0tPmNvZGVjcGFyKTsKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAg ICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJDb3VsZCBub3QgY29weSBzdHJlYW0gcGFyYW1l dGVyc1xuIik7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgICAgIGF2 cHJpdl9zZXRfcHRzX2luZm8oYXNzZXRfc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZpcnN0X3Jlc291cmNlX3N0cmVhbS0+cHRzX3dyYXBfYml0cywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmaXJzdF9yZXNvdXJjZV9zdHJlYW0tPnRpbWVfYmFzZS5udW0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfcmVzb3VyY2Vfc3RyZWFtLT50aW1lX2Jhc2Uu ZGVuKTsKKyAgICAgICAgYXNzZXRfc3RyZWFtLT5kdXJhdGlvbiA9IChpbnQ2NF90KWF2X3EyZChh dl9tdWxfcShjLT50cmFja3NbaV0tPmR1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X2ludl9xKGFzc2V0X3N0cmVhbS0+ dGltZV9iYXNlKSkpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9w ZW5fY3BsX3RyYWNrcyhBVkZvcm1hdENvbnRleHQgKnMpCit7CisgICAgSU1GQ29udGV4dCAqYyA9 IHMtPnByaXZfZGF0YTsKKyAgICBpbnQzMl90IHRyYWNrX2luZGV4ID0gMDsKKyAgICBpbnQgcmV0 OworCisgICAgaWYgKGMtPmNwbC0+bWFpbl9pbWFnZV8yZF90cmFjaykgeworICAgICAgICBpZiAo KHJldCA9IG9wZW5fdmlydHVhbF90cmFjayhzLCBjLT5jcGwtPm1haW5faW1hZ2VfMmRfdHJhY2ss IHRyYWNrX2luZGV4KyspKSAhPSAwKSB7CisgICAgICAgICAgICBhdl9sb2cocywKKyAgICAgICAg ICAgICAgICAgICBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBv cGVuIGltYWdlIHRyYWNrICIgRkZfSU1GX1VVSURfRk9STUFUICJcbiIsCisgICAgICAgICAgICAg ICAgICAgVUlEX0FSRyhjLT5jcGwtPm1haW5faW1hZ2VfMmRfdHJhY2stPmJhc2UuaWRfdXVpZCkp OworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo dWludDMyX3QgaSA9IDA7IGkgPCBjLT5jcGwtPm1haW5fYXVkaW9fdHJhY2tfY291bnQ7ICsraSkg eworICAgICAgICBpZiAoKHJldCA9IG9wZW5fdmlydHVhbF90cmFjayhzLCAmYy0+Y3BsLT5tYWlu X2F1ZGlvX3RyYWNrc1tpXSwgdHJhY2tfaW5kZXgrKykpICE9IDApIHsKKyAgICAgICAgICAgIGF2 X2xvZyhzLAorICAgICAgICAgICAgICAgICAgIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAg ICAgICAiQ291bGQgbm90IG9wZW4gYXVkaW8gdHJhY2sgIiBGRl9JTUZfVVVJRF9GT1JNQVQgIlxu IiwKKyAgICAgICAgICAgICAgICAgICBVSURfQVJHKGMtPmNwbC0+bWFpbl9hdWRpb190cmFja3Nb aV0uYmFzZS5pZF91dWlkKSk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9Cisg ICAgfQorCisgICAgcmV0dXJuIHNldF9jb250ZXh0X3N0cmVhbXNfZnJvbV90cmFja3Mocyk7Cit9 CisKK3N0YXRpYyBpbnQgaW1mX3JlYWRfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqcykKK3sKKyAg ICBJTUZDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOworICAgIGNoYXIgKmFzc2V0X21hcF9wYXRo OworICAgIGNoYXIgKnRtcF9zdHI7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBjLT5pbnRlcnJ1 cHRfY2FsbGJhY2sgPSAmcy0+aW50ZXJydXB0X2NhbGxiYWNrOworICAgIHRtcF9zdHIgPSBhdl9z dHJkdXAocy0+dXJsKTsKKyAgICBpZiAoIXRtcF9zdHIpCisgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CisKKyAgICBjLT5iYXNlX3VybCA9IGF2X2Rpcm5hbWUodG1wX3N0cik7CisgICAg aWYgKChyZXQgPSBmZmlvX2NvcHlfdXJsX29wdGlvbnMocy0+cGIsICZjLT5hdmlvX29wdHMpKSA8 IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAi c3RhcnQgcGFyc2luZyBJTUYgQ1BMOiAlc1xuIiwgcy0+dXJsKTsKKworICAgIGlmICgocmV0ID0g ZmZfaW1mX3BhcnNlX2NwbChzLT5wYiwgJmMtPmNwbCkpIDwgMCkKKyAgICAgICAgcmV0dXJuIHJl dDsKKworICAgIGF2X2xvZyhzLAorICAgICAgICAgICBBVl9MT0dfREVCVUcsCisgICAgICAgICAg ICJwYXJzZWQgSU1GIENQTDogIiBGRl9JTUZfVVVJRF9GT1JNQVQgIlxuIiwKKyAgICAgICAgICAg VUlEX0FSRyhjLT5jcGwtPmlkX3V1aWQpKTsKKworICAgIGlmICghYy0+YXNzZXRfbWFwX3BhdGhz KSB7CisgICAgICAgIGMtPmFzc2V0X21hcF9wYXRocyA9IGF2X2FwcGVuZF9wYXRoX2NvbXBvbmVu dChjLT5iYXNlX3VybCwgIkFTU0VUTUFQLnhtbCIpOworICAgICAgICBpZiAoIWMtPmFzc2V0X21h cF9wYXRocykgeworICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAg ICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgICAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVH LCAiTm8gYXNzZXQgbWFwcyBwcm92aWRlZCwgdXNpbmcgdGhlIGRlZmF1bHQgQVNTRVRNQVAueG1s XG4iKTsKKyAgICB9CisKKyAgICAvKiBQYXJzZSBlYWNoIGFzc2V0IG1hcCBYTUwgZmlsZSAqLwor ICAgIGltZl9hc3NldF9sb2NhdG9yX21hcF9pbml0KCZjLT5hc3NldF9sb2NhdG9yX21hcCk7Cisg ICAgYXNzZXRfbWFwX3BhdGggPSBhdl9zdHJ0b2soYy0+YXNzZXRfbWFwX3BhdGhzLCAiLCIsICZ0 bXBfc3RyKTsKKyAgICB3aGlsZSAoYXNzZXRfbWFwX3BhdGggIT0gTlVMTCkgeworICAgICAgICBh dl9sb2cocywgQVZfTE9HX0RFQlVHLCAic3RhcnQgcGFyc2luZyBJTUYgQXNzZXQgTWFwOiAlc1xu IiwgYXNzZXRfbWFwX3BhdGgpOworCisgICAgICAgIGlmIChyZXQgPSBwYXJzZV9hc3NldG1hcChz LCBhc3NldF9tYXBfcGF0aCkpCisgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgIGFz c2V0X21hcF9wYXRoID0gYXZfc3RydG9rKE5VTEwsICIsIiwgJnRtcF9zdHIpOworICAgIH0KKwor ICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJwYXJzZWQgSU1GIEFzc2V0IE1hcHNcbiIpOwor CisgICAgaWYgKHJldCA9IG9wZW5fY3BsX3RyYWNrcyhzKSkKKyAgICAgICAgcmV0dXJuIHJldDsK KworICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJwYXJzZWQgSU1GIHBhY2thZ2VcbiIpOwor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0eCAq Z2V0X25leHRfdHJhY2tfd2l0aF9taW5pbXVtX3RpbWVzdGFtcChBVkZvcm1hdENvbnRleHQgKnMp Cit7CisgICAgSU1GQ29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKKyAgICBJTUZWaXJ0dWFsVHJh Y2tQbGF5YmFja0N0eCAqdHJhY2s7CisKKyAgICBBVlJhdGlvbmFsIG1pbmltdW1fdGltZXN0YW1w ID0gYXZfbWFrZV9xKElOVDMyX01BWCwgMSk7CisgICAgZm9yICh1aW50MzJfdCBpID0gYy0+dHJh Y2tfY291bnQ7IGkgPiAwOyBpLS0pIHsKKyAgICAgICAgYXZfbG9nKHMsCisgICAgICAgICAgICAg ICBBVl9MT0dfREVCVUcsCisgICAgICAgICAgICAgICAiQ29tcGFyZSB0cmFjayAlZCB0aW1lc3Rh bXAgIiBBVlJBVElPTkFMX0ZPUk1BVAorICAgICAgICAgICAgICAgIiB0byBtaW5pbXVtICIgQVZS QVRJT05BTF9GT1JNQVQKKyAgICAgICAgICAgICAgICIgKG92ZXIgZHVyYXRpb246ICIgQVZSQVRJ T05BTF9GT1JNQVQKKyAgICAgICAgICAgICAgICIpXG4iLAorICAgICAgICAgICAgICAgaSwKKyAg ICAgICAgICAgICAgIEFWUkFUSU9OQUxfQVJHKGMtPnRyYWNrc1tpIC0gMV0tPmN1cnJlbnRfdGlt ZXN0YW1wKSwKKyAgICAgICAgICAgICAgIEFWUkFUSU9OQUxfQVJHKG1pbmltdW1fdGltZXN0YW1w KSwKKyAgICAgICAgICAgICAgIEFWUkFUSU9OQUxfQVJHKGMtPnRyYWNrc1tpIC0gMV0tPmR1cmF0 aW9uKSk7CisKKyAgICAgICAgaWYgKGF2X2NtcF9xKGMtPnRyYWNrc1tpIC0gMV0tPmN1cnJlbnRf dGltZXN0YW1wLCBtaW5pbXVtX3RpbWVzdGFtcCkgPD0gMCkgeworICAgICAgICAgICAgdHJhY2sg PSBjLT50cmFja3NbaSAtIDFdOworICAgICAgICAgICAgbWluaW11bV90aW1lc3RhbXAgPSB0cmFj ay0+Y3VycmVudF90aW1lc3RhbXA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdl9sb2cocywK KyAgICAgICAgICAgQVZfTE9HX0RFQlVHLAorICAgICAgICAgICAiRm91bmQgbmV4dCB0cmFjayB0 byByZWFkOiAlZCAodGltZXN0YW1wOiAlbGYgLyAlbGYpXG4iLAorICAgICAgICAgICB0cmFjay0+ aW5kZXgsCisgICAgICAgICAgIGF2X3EyZCh0cmFjay0+Y3VycmVudF90aW1lc3RhbXApLAorICAg ICAgICAgICBhdl9xMmQobWluaW11bV90aW1lc3RhbXApKTsKKyAgICByZXR1cm4gdHJhY2s7Cit9 CisKK3N0YXRpYyBJTUZWaXJ0dWFsVHJhY2tSZXNvdXJjZVBsYXliYWNrQ3R4ICpnZXRfcmVzb3Vy Y2VfY29udGV4dF9mb3JfdGltZXN0YW1wKEFWRm9ybWF0Q29udGV4dCAqcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIElNRlZpcnR1YWxUcmFja1BsYXliYWNrQ3R4ICp0cmFjaykKK3sKKyAgICBBVlJh dGlvbmFsIGVkaXRfdW5pdF9kdXJhdGlvbiA9IGF2X2ludl9xKHRyYWNrLT5yZXNvdXJjZXNbMF0u cmVzb3VyY2UtPmJhc2UuZWRpdF9yYXRlKTsKKyAgICBBVlJhdGlvbmFsIGN1bXVsYXRlZF9kdXJh dGlvbiA9IGF2X21ha2VfcSgwLCBlZGl0X3VuaXRfZHVyYXRpb24uZGVuKTsKKworICAgIGF2X2xv ZyhzLAorICAgICAgICAgICBBVl9MT0dfREVCVUcsCisgICAgICAgICAgICJMb29raW5nIGZvciB0 cmFjayAlZCByZXNvdXJjZSBmb3IgdGltZXN0YW1wID0gJWxmIC8gJWxmXG4iLAorICAgICAgICAg ICB0cmFjay0+aW5kZXgsCisgICAgICAgICAgIGF2X3EyZCh0cmFjay0+Y3VycmVudF90aW1lc3Rh bXApLAorICAgICAgICAgICBhdl9xMmQodHJhY2stPmR1cmF0aW9uKSk7CisgICAgZm9yICh1aW50 MzJfdCBpID0gMDsgaSA8IHRyYWNrLT5yZXNvdXJjZV9jb3VudDsgKytpKSB7CisgICAgICAgIGN1 bXVsYXRlZF9kdXJhdGlvbiA9IGF2X2FkZF9xKGN1bXVsYXRlZF9kdXJhdGlvbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfbWFrZV9xKChpbnQpdHJhY2stPnJlc291 cmNlc1tpXS5yZXNvdXJjZS0+YmFzZS5kdXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZWRpdF91bml0X2R1cmF0aW9uLm51bSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRfdW5pdF9k dXJhdGlvbi5kZW4pKTsKKworICAgICAgICBpZiAoYXZfY21wX3EoYXZfYWRkX3EodHJhY2stPmN1 cnJlbnRfdGltZXN0YW1wLCBlZGl0X3VuaXRfZHVyYXRpb24pLCBjdW11bGF0ZWRfZHVyYXRpb24p IDw9IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhzLAorICAgICAgICAgICAgICAgICAgIEFWX0xP R19ERUJVRywKKyAgICAgICAgICAgICAgICAgICAiRm91bmQgcmVzb3VyY2UgJWQgaW4gdHJhY2sg JWQgdG8gcmVhZCBmb3IgdGltZXN0YW1wICVsZiAiCisgICAgICAgICAgICAgICAgICAgIihvbiBj dW11bGF0ZWQ9JWxmKTogZW50cnk9JSIgUFJJdTMyCisgICAgICAgICAgICAgICAgICAgIiwgZHVy YXRpb249JSIgUFJJdTMyCisgICAgICAgICAgICAgICAgICAgIiwgZWRpdHJhdGU9IiBBVlJBVElP TkFMX0ZPUk1BVAorICAgICAgICAgICAgICAgICAgICIgfCBlZGl0X3VuaXRfZHVyYXRpb249JWxm XG4iLAorICAgICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgICAgdHJhY2stPmlu ZGV4LAorICAgICAgICAgICAgICAgICAgIGF2X3EyZCh0cmFjay0+Y3VycmVudF90aW1lc3RhbXAp LAorICAgICAgICAgICAgICAgICAgIGF2X3EyZChjdW11bGF0ZWRfZHVyYXRpb24pLAorICAgICAg ICAgICAgICAgICAgIHRyYWNrLT5yZXNvdXJjZXNbaV0ucmVzb3VyY2UtPmJhc2UuZW50cnlfcG9p bnQsCisgICAgICAgICAgICAgICAgICAgdHJhY2stPnJlc291cmNlc1tpXS5yZXNvdXJjZS0+YmFz ZS5kdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICBBVlJBVElPTkFMX0FSRyh0cmFjay0+cmVz b3VyY2VzW2ldLnJlc291cmNlLT5iYXNlLmVkaXRfcmF0ZSksCisgICAgICAgICAgICAgICAgICAg YXZfcTJkKGVkaXRfdW5pdF9kdXJhdGlvbikpOworCisgICAgICAgICAgICBpZiAodHJhY2stPmN1 cnJlbnRfcmVzb3VyY2VfaW5kZXggIT0gaSkgeworICAgICAgICAgICAgICAgIGF2X2xvZyhzLAor ICAgICAgICAgICAgICAgICAgICAgICBBVl9MT0dfREVCVUcsCisgICAgICAgICAgICAgICAgICAg ICAgICJTd2l0Y2ggcmVzb3VyY2Ugb24gdHJhY2sgJWQ6IHJlLW9wZW4gY29udGV4dFxuIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgdHJhY2stPmluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAo b3Blbl90cmFja19yZXNvdXJjZV9jb250ZXh0KHMsICYodHJhY2stPnJlc291cmNlc1tpXSkpICE9 IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIGF2 Zm9ybWF0X2Nsb3NlX2lucHV0KCYodHJhY2stPnJlc291cmNlc1t0cmFjay0+Y3VycmVudF9yZXNv dXJjZV9pbmRleF0uY3R4KSk7CisgICAgICAgICAgICAgICAgdHJhY2stPmN1cnJlbnRfcmVzb3Vy Y2VfaW5kZXggPSBpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gJih0cmFj ay0+cmVzb3VyY2VzW3RyYWNrLT5jdXJyZW50X3Jlc291cmNlX2luZGV4XSk7CisgICAgICAgIH0K KyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgaW1mX3JlYWRfcGFja2V0 KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKK3sKKyAgICBJTUZDb250ZXh0ICpj ID0gcy0+cHJpdl9kYXRhOworICAgIElNRlZpcnR1YWxUcmFja1Jlc291cmNlUGxheWJhY2tDdHgg KnJlc291cmNlX3RvX3JlYWQgPSBOVUxMOworICAgIEFWUmF0aW9uYWwgZWRpdF91bml0X2R1cmF0 aW9uOworICAgIGludCByZXQgPSAwOworICAgIElNRlZpcnR1YWxUcmFja1BsYXliYWNrQ3R4ICp0 cmFjazsKKyAgICBGRlN0cmVhbSAqdHJhY2tfc3RyZWFtOworCisgICAgdHJhY2sgPSBnZXRfbmV4 dF90cmFja193aXRoX21pbmltdW1fdGltZXN0YW1wKHMpOworCisgICAgaWYgKGF2X2NtcF9xKHRy YWNrLT5jdXJyZW50X3RpbWVzdGFtcCwgdHJhY2stPmR1cmF0aW9uKSA9PSAwKQorICAgICAgICBy ZXR1cm4gQVZFUlJPUl9FT0Y7CisKKyAgICByZXNvdXJjZV90b19yZWFkID0gZ2V0X3Jlc291cmNl X2NvbnRleHRfZm9yX3RpbWVzdGFtcChzLCB0cmFjayk7CisKKyAgICBpZiAoIXJlc291cmNlX3Rv X3JlYWQpIHsKKyAgICAgICAgZWRpdF91bml0X2R1cmF0aW9uCisgICAgICAgICAgICA9IGF2X2lu dl9xKHRyYWNrLT5yZXNvdXJjZXNbdHJhY2stPmN1cnJlbnRfcmVzb3VyY2VfaW5kZXhdLnJlc291 cmNlLT5iYXNlLmVkaXRfcmF0ZSk7CisKKyAgICAgICAgaWYgKGF2X2NtcF9xKGF2X2FkZF9xKHRy YWNrLT5jdXJyZW50X3RpbWVzdGFtcCwgZWRpdF91bml0X2R1cmF0aW9uKSwgdHJhY2stPmR1cmF0 aW9uKSA+IDApCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7CisKKyAgICAgICAgYXZf bG9nKHMsIEFWX0xPR19FUlJPUiwgIkNvdWxkIG5vdCBmaW5kIElNRiB0cmFjayByZXNvdXJjZSB0 byByZWFkXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfU1RSRUFNX05PVF9GT1VORDsKKyAg ICB9CisKKyAgICB3aGlsZSAoIWZmX2NoZWNrX2ludGVycnVwdChjLT5pbnRlcnJ1cHRfY2FsbGJh Y2spICYmICFyZXQpIHsKKyAgICAgICAgcmV0ID0gYXZfcmVhZF9mcmFtZShyZXNvdXJjZV90b19y ZWFkLT5jdHgsIHBrdCk7CisgICAgICAgIGF2X2xvZyhzLAorICAgICAgICAgICAgICAgQVZfTE9H X0RFQlVHLAorICAgICAgICAgICAgICAgIkdvdCBwYWNrZXQ6IHB0cz0lIiBQUklkNjQKKyAgICAg ICAgICAgICAgICIsIGR0cz0lIiBQUklkNjQKKyAgICAgICAgICAgICAgICIsIGR1cmF0aW9uPSUi IFBSSWQ2NAorICAgICAgICAgICAgICAgIiwgc3RyZWFtX2luZGV4PSVkLCBwb3M9JSIgUFJJZDY0 CisgICAgICAgICAgICAgICAiXG4iLAorICAgICAgICAgICAgICAgcGt0LT5wdHMsCisgICAgICAg ICAgICAgICBwa3QtPmR0cywKKyAgICAgICAgICAgICAgIHBrdC0+ZHVyYXRpb24sCisgICAgICAg ICAgICAgICBwa3QtPnN0cmVhbV9pbmRleCwKKyAgICAgICAgICAgICAgIHBrdC0+cG9zKTsKKwor ICAgICAgICB0cmFja19zdHJlYW0gPSBmZnN0cmVhbShzLT5zdHJlYW1zW3RyYWNrLT5pbmRleF0p OworICAgICAgICBpZiAocmV0ID49IDApIHsKKyAgICAgICAgICAgIC8qIFVwZGF0ZSBwYWNrZXQg aW5mbyBmcm9tIHRyYWNrICovCisgICAgICAgICAgICBpZiAocGt0LT5kdHMgPCB0cmFja19zdHJl YW0tPmN1cl9kdHMgJiYgdHJhY2stPmxhc3RfcHRzID4gMCkKKyAgICAgICAgICAgICAgICBwa3Qt PmR0cyA9IHRyYWNrX3N0cmVhbS0+Y3VyX2R0czsKKworICAgICAgICAgICAgcGt0LT5wdHMgPSB0 cmFjay0+bGFzdF9wdHM7CisgICAgICAgICAgICBwa3QtPmR0cyA9IHBrdC0+ZHRzCisgICAgICAg ICAgICAgICAgLSAoaW50NjRfdCl0cmFjay0+cmVzb3VyY2VzW3RyYWNrLT5jdXJyZW50X3Jlc291 cmNlX2luZGV4XS5yZXNvdXJjZS0+YmFzZS5lbnRyeV9wb2ludDsKKyAgICAgICAgICAgIHBrdC0+ c3RyZWFtX2luZGV4ID0gdHJhY2stPmluZGV4OworCisgICAgICAgICAgICAvKiBVcGRhdGUgdHJh Y2sgY3Vyc29ycyAqLworICAgICAgICAgICAgdHJhY2stPmN1cnJlbnRfdGltZXN0YW1wCisgICAg ICAgICAgICAgICAgPSBhdl9hZGRfcSh0cmFjay0+Y3VycmVudF90aW1lc3RhbXAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBhdl9tYWtlX3EoKGludClwa3QtPmR1cmF0aW9uCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcmVzb3VyY2VfdG9fcmVhZC0+Y3R4 LT5zdHJlYW1zWzBdLT50aW1lX2Jhc2UubnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlc291cmNlX3RvX3JlYWQtPmN0eC0+c3RyZWFtc1swXS0+dGltZV9iYXNlLmRl bikpOworICAgICAgICAgICAgdHJhY2stPmxhc3RfcHRzICs9IHBrdC0+ZHVyYXRpb247CisKKyAg ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2UgaWYgKHJldCAhPSBBVkVSUk9SX0VP RikgeworICAgICAgICAgICAgYXZfbG9nKHMsCisgICAgICAgICAgICAgICAgICAgQVZfTE9HX0VS Uk9SLAorICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZ2V0IHBhY2tldCBmcm9tIHRyYWNr ICVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICB0cmFjay0+aW5kZXgsCisgICAgICAgICAg ICAgICAgICAgYXZfZXJyMnN0cihyZXQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cit9CisKK3N0YXRpYyBpbnQg aW1mX2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAqcykKK3sKKyAgICBJTUZDb250ZXh0ICpjID0gcy0+ cHJpdl9kYXRhOworCisgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIkNsb3NlIElNRiBwYWNr YWdlXG4iKTsKKyAgICBhdl9kaWN0X2ZyZWUoJmMtPmF2aW9fb3B0cyk7CisgICAgYXZfZnJlZXAo JmMtPmJhc2VfdXJsKTsKKyAgICBpbWZfYXNzZXRfbG9jYXRvcl9tYXBfZGVpbml0KCZjLT5hc3Nl dF9sb2NhdG9yX21hcCk7CisgICAgZmZfaW1mX2NwbF9mcmVlKGMtPmNwbCk7CisKKyAgICBmb3Ig KHVpbnQzMl90IGkgPSAwOyBpIDwgYy0+dHJhY2tfY291bnQ7ICsraSkgeworICAgICAgICBpbWZf dmlydHVhbF90cmFja19wbGF5YmFja19jb250ZXh0X2RlaW5pdChjLT50cmFja3NbaV0pOworICAg ICAgICBhdl9mcmVlcCgmYy0+dHJhY2tzW2ldKTsKKyAgICB9CisKKyAgICBhdl9mcmVlcCgmYy0+ dHJhY2tzKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltZl9wcm9iZShjb25z dCBBVlByb2JlRGF0YSAqcCkKK3sKKyAgICBpZiAoIXN0cnN0cihwLT5idWYsICI8Q29tcG9zaXRp b25QbGF5bGlzdCIpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIGNoZWNrIGZvciBhIENv bnRlbnRUaXRsZSBlbGVtZW50IHdpdGhvdXQgaW5jbHVkaW5nIENvbnRlbnRUaXRsZVRleHQsCisg ICAgICogd2hpY2ggaXMgdXNlZCBieSB0aGUgRC1DaW5lbWEgQ1BMLgorICAgICAqLworICAgIGlm ICghc3Ryc3RyKHAtPmJ1ZiwgIkNvbnRlbnRUaXRsZT4iKSkKKyAgICAgICAgcmV0dXJuIDA7CisK KyAgICByZXR1cm4gQVZQUk9CRV9TQ09SRV9NQVg7Cit9CisKK3N0YXRpYyBjb25zdCBBVk9wdGlv biBpbWZfb3B0aW9uc1tdID0geworICAgIHsKKyAgICAgICAgLm5hbWUgICAgICAgID0gImFzc2V0 bWFwcyIsCisgICAgICAgIC5oZWxwICAgICAgICA9ICJDb21tYS1zZXBhcmF0ZWQgcGF0aHMgdG8g QVNTRVRNQVAgZmlsZXMuIgorICAgICAgICAgICAgICAgICAgICAgICAiSWYgbm90IHNwZWNpZmll ZCwgdGhlIGBBU1NFVE1BUC54bWxgIGZpbGUgaW4gdGhlIHNhbWUgIgorICAgICAgICAgICAgICAg ICAgICAgICAiZGlyZWN0b3J5IGFzIHRoZSBDUEwgaXMgdXNlZC4iLAorICAgICAgICAub2Zmc2V0 ICAgICAgPSBvZmZzZXRvZihJTUZDb250ZXh0LCBhc3NldF9tYXBfcGF0aHMpLAorICAgICAgICAu dHlwZSAgICAgICAgPSBBVl9PUFRfVFlQRV9TVFJJTkcsCisgICAgICAgIC5kZWZhdWx0X3ZhbCA9 IHsuc3RyID0gTlVMTH0sCisgICAgICAgIC5mbGFncyAgICAgICA9IEFWX09QVF9GTEFHX0RFQ09E SU5HX1BBUkFNLAorICAgIH0sCisgICAge05VTEx9LAorfTsKKworc3RhdGljIGNvbnN0IEFWQ2xh c3MgaW1mX2NsYXNzID0geworICAgIC5jbGFzc19uYW1lID0gImltZiIsCisgICAgLml0ZW1fbmFt ZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwKKyAgICAub3B0aW9uICAgICA9IGltZl9vcHRpb25z LAorICAgIC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAorfTsKKworY29uc3Qg QVZJbnB1dEZvcm1hdCBmZl9pbWZfZGVtdXhlciA9IHsKKyAgICAubmFtZSAgICAgICAgICAgPSAi aW1mIiwKKyAgICAubG9uZ19uYW1lICAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiSU1GIChJ bnRlcm9wZXJhYmxlIE1hc3RlciBGb3JtYXQpIiksCisgICAgLmZsYWdzX2ludGVybmFsID0gRkZf Rk1UX0lOSVRfQ0xFQU5VUCwKKyAgICAucHJpdl9jbGFzcyAgICAgPSAmaW1mX2NsYXNzLAorICAg IC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihJTUZDb250ZXh0KSwKKyAgICAucmVhZF9wcm9iZSAg ICAgPSBpbWZfcHJvYmUsCisgICAgLnJlYWRfaGVhZGVyICAgID0gaW1mX3JlYWRfaGVhZGVyLAor ICAgIC5yZWFkX3BhY2tldCAgICA9IGltZl9yZWFkX3BhY2tldCwKKyAgICAucmVhZF9jbG9zZSAg ICAgPSBpbWZfY2xvc2UsCit9OwotLSAKMi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1k ZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBl Zy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBl Zy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==