From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Pip Cet Newsgroups: gmane.emacs.devel Subject: Kerning and ligatures Date: Sat, 30 May 2020 22:13:59 +0000 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000014fd0c05a6e4e349" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="94362"; mail-complaints-to="usenet@ciao.gmane.io" To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sun May 31 00:15:26 2020 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jf9lF-000OWa-G1 for ged-emacs-devel@m.gmane-mx.org; Sun, 31 May 2020 00:15:25 +0200 Original-Received: from localhost ([::1]:43484 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jf9lE-0002ox-EY for ged-emacs-devel@m.gmane-mx.org; Sat, 30 May 2020 18:15:24 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:43644) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jf9kX-00029L-SS for emacs-devel@gnu.org; Sat, 30 May 2020 18:14:41 -0400 Original-Received: from mail-oo1-xc34.google.com ([2607:f8b0:4864:20::c34]:46138) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jf9kT-0006E1-PP for emacs-devel@gnu.org; Sat, 30 May 2020 18:14:41 -0400 Original-Received: by mail-oo1-xc34.google.com with SMTP id g22so661309oop.13 for ; Sat, 30 May 2020 15:14:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=h24c9NtZMi2vWuyjq1sLXMlq3EpNI1cS+BATdUFo2HQ=; b=RfFSeQXXRSI4vKZnQqqF3fevxnB02SE6w3ex7419QAn8RvK30y8fkcBnzkbZZciOnR ihp8GBZvY6LGpYiUidQWj05GcZrM6wLKLZBYo503oEpNKfsTahksQMfokWtLZ1U1o9Vx TSoofUgdPbUyzfDqq4Ox/xrV3/xGHuLCPsGlEhBmO+R2UGfR7/Tp45T84bbB40tFqR7u OIGC3qLn+8d6VJFCCH+ZVPpokCjuF7/QX9+JOvYsof+iXjnXg2cjst59uwo0Pp18M5sa oDdTyn45FIuU2xC/uNFoAcvptiESGyv3oSu11EQ+r46XO5xFKDOfqeYCLu9p+6pH9XdW ssPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=h24c9NtZMi2vWuyjq1sLXMlq3EpNI1cS+BATdUFo2HQ=; b=edcW0K6zTRIJ5fPuarW4q4TlfwHPFXXnj8uQ9fVgHIFZ47tclJp7BNrSbErUW0pgLL kRNd/na/dpDhOvX1Yuk7hbgHdteI2cjbra/lxv22/0pX1HyKRD0cw0qVhZ34UCEic8Ov j/0j7zo0YHxeXUomPsWoCzECH70/B/4cWTn07+LAbj637s4vH/KPVVqNL6BwgsZhy0hJ VxmtVw0zWDtCWjHj4r7xrcW5SdTFjP0O8BS3+u82CRnNce5/PUkEwOWlZIS3uP63GO3G kSX+rA5Pe79GrVh0A4pIeIGH+tTJ1Yg0lhbYtycPhoW3QWWr3s5u7Qh/BnlesNMw9WuU OnWA== X-Gm-Message-State: AOAM531uJDFtWVudN2VS+Rt4pu5DIteCZC05JzlMRiqXIyntHkrCsxZJ 4ypyQ0R989S963qlV6XbTLx5Y5A+5V09nXVbdstfgpsPcN0= X-Google-Smtp-Source: ABdhPJxhZ2YwaxjMufxjUXCFQcw2mrA7G7BA7Mhs1hbsSpwLqRvasBgHqPTaYveXbPPetRkpbyDAuar0wBiliKzd8p0= X-Received: by 2002:a4a:e702:: with SMTP id y2mr11979784oou.44.1590876876100; Sat, 30 May 2020 15:14:36 -0700 (PDT) Received-SPF: pass client-ip=2607:f8b0:4864:20::c34; envelope-from=pipcet@gmail.com; helo=mail-oo1-xc34.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:251660 Archived-At: --00000000000014fd0c05a6e4e349 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable This is a snapshot of my work on supporting kerning and ligatures; the goal of this patch is to support those features for variable-pitch fonts in English, but I'm not ignoring RTL languages, or scripts that require shaping. Like the first patch, this is meant to demonstrate the behavior I would like to see, not the implementation. It's not meant for immediate inclusion; perhaps it can serve as a starting point for someone wishing to work on this further. That said, this patch does not re-use the composite.c code. I tried to, several times, but what it does is simply too different to allow useful code-sharing. What's it all about is entering text like "affiliation" or "AVATAR" while using a variable-pitch font. The proper way of displaying this, for many OpenType fonts with variable pitch, involves ligatures and kerning. A ligature is an OpenType glyph that represents several characters; for example, "ffi" in "affiliation". Kerning is the determination of each character's x advance based on its context; for example, in "AVATAR", the distance between "A", "V", and the following "A" is reduced. None of this complicated logic is in the patch; instead, it uses the HarfBuzz library. This is somewhat unfortunate because the HarfBuzz API is fairly limited: instead of requesting context incrementally from the calling program, it expects to be provided with a "complete" context which it then shapes. Doing that is probably too expensive, so we provide "enough" context based on a heuristic. (This is complicated because getting context is expensive, and too much of it can be harmful; the current approach is to take a lot of context so the horrible performance reminds me to do something about it :-) ). This code supports M-to-N correspondences between code points and glyphs points; it does so by first producing a single struct glyph covering all (N) glyphs, then slicing it into one slice for each of the (M) code points. Important differences between this code and the existing composite.c code: 1. You can "enter" ligatures, such as by moving point to the second "f" in "affiliation". This also applies to clusters of glyphs not usually thought of as ligatures: For accented letters written as two codepoints, such as a=CC=81, this may be useful. For =D7=A9=D6=B8=D7=81, i= t's irritating. 2. This code does not allow HarfBuzz to default to the language your system is set to use. That prevents something as innocuous as a screenshot from revealing your likely location. (The current language default is "en"). 3. Ligatures and kerning work with display strings or overlay strings, rather than ending there or even revealing replaced buffer text as the existing code does. 4. This code breaks lines after every glyph slice. That is suboptimal for many languages. Can someone help with the Telugu "hello"? I wonder whether there should be a gap, and how much of one, between =E0=B0=B8=E0=B1=8D=E0=B0=95= =E0=B0=BE and =E0=B0=B0=E0=B0=82 in =E0=B0=A8=E0=B0=AE=E0=B0=B8=E0=B1=8D=E0= =B0=95=E0=B0=BE=E0=B0=B0=E0=B0=82? PS: Sorry for the amount of recent noise. --00000000000014fd0c05a6e4e349 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Snapshot-of-kerning-ligatures-work.-Do-not-merge.patch" Content-Disposition: attachment; filename="0001-Snapshot-of-kerning-ligatures-work.-Do-not-merge.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kau6hgkv0 RnJvbSBkNTYxNzFlNjdmZGJmNmE1NmNiMTM0YmYwNzkxNmI1NGM1ZDY0MjZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQaXAgQ2V0IDxwaXBjZXRAZ21haWwuY29tPgpEYXRlOiBTYXQs IDMwIE1heSAyMDIwIDIxOjU4OjQxICswMDAwClN1YmplY3Q6IFtQQVRDSF0gU25hcHNob3Qgb2Yg a2VybmluZy9saWdhdHVyZXMgd29yay4gRG8gbm90IG1lcmdlLgoKLS0tCiBzcmMvYWxsb2MuYyAg ICAgIHwgIDEzICstCiBzcmMvY29tcG9zaXRlLmMgIHwgIDEwICstCiBzcmMvZGF0YS5jICAgICAg IHwgICAxICsKIHNyYy9kaXNwZXh0ZXJuLmggfCAgMjggKystCiBzcmMvZm9udC5jICAgICAgIHwg IDMxICsrLS0KIHNyYy9mb250LmggICAgICAgfCAgNDIgKysrKy0KIHNyYy9mdGNyZm9udC5jICAg fCA0MjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiBzcmMv aGJmb250LmMgICAgIHwgICAyICstCiBzcmMvbGlzcC5oICAgICAgIHwgICAxICsKIHNyYy94ZGlz cC5jICAgICAgfCA0MzggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0t LS0tLS0KIHNyYy94Zm9udC5jICAgICAgfCAgNTQgKysrLS0tCiBzcmMveHRlcm0uYyAgICAgIHwg ICA0ICstCiAxMiBmaWxlcyBjaGFuZ2VkLCA4NTUgaW5zZXJ0aW9ucygrKSwgMTkyIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9hbGxvYy5jIGIvc3JjL2FsbG9jLmMKaW5kZXggZTI0MWI5 OTMzYS4uY2M3MzA5Nzk1NyAxMDA2NDQKLS0tIGEvc3JjL2FsbG9jLmMKKysrIGIvc3JjL2FsbG9j LmMKQEAgLTYyMjQsNiArNjIyNCw5IEBAIERFRlVOICgiZ2FyYmFnZS1jb2xsZWN0IiwgRmdhcmJh Z2VfY29sbGVjdCwgU2dhcmJhZ2VfY29sbGVjdCwgMCwgMCwgIiIsCiAgIHJldHVybiBDQUxMTUFO WSAoRmxpc3QsIHRvdGFsKTsKIH0KIAorc3RhdGljIHZvaWQKK21hcmtfdmVjdG9ybGlrZSAodW5p b24gdmVjdG9ybGlrZV9oZWFkZXIgKmhlYWRlcik7CisKIC8qIE1hcmsgTGlzcCBvYmplY3RzIGlu IGdseXBoIG1hdHJpeCBNQVRSSVguICBDdXJyZW50bHkgdGhlCiAgICBvbmx5IGludGVyZXN0aW5n IG9iamVjdHMgcmVmZXJlbmNlZCBmcm9tIGdseXBocyBhcmUgc3RyaW5ncy4gICovCiAKQEAgLTYy NDMsOSArNjI0NiwxMyBAQCBtYXJrX2dseXBoX21hdHJpeCAoc3RydWN0IGdseXBoX21hdHJpeCAq bWF0cml4KQogCSAgICBzdHJ1Y3QgZ2x5cGggKmVuZF9nbHlwaCA9IGdseXBoICsgcm93LT51c2Vk W2FyZWFdOwogCiAJICAgIGZvciAoOyBnbHlwaCA8IGVuZF9nbHlwaDsgKytnbHlwaCkKLQkgICAg ICBpZiAoU1RSSU5HUCAoZ2x5cGgtPm9iamVjdCkKLQkJICAmJiAhc3RyaW5nX21hcmtlZF9wIChY U1RSSU5HIChnbHlwaC0+b2JqZWN0KSkpCi0JCW1hcmtfb2JqZWN0IChnbHlwaC0+b2JqZWN0KTsK KwkgICAgICB7CisJCWlmIChTVFJJTkdQIChnbHlwaC0+b2JqZWN0KQorCQkgICAgJiYgIXN0cmlu Z19tYXJrZWRfcCAoWFNUUklORyAoZ2x5cGgtPm9iamVjdCkpKQorCQkgIG1hcmtfb2JqZWN0IChn bHlwaC0+b2JqZWN0KTsKKwkJaWYgKGdseXBoLT5jb250ZXh0ICE9IE5VTEwpCisJCSAgbWFya192 ZWN0b3JsaWtlICgmZ2x5cGgtPmNvbnRleHQtPmhlYWRlcik7CisJICAgICAgfQogCSAgfQogICAg ICAgfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbXBvc2l0ZS5jIGIvc3JjL2NvbXBvc2l0ZS5jCmlu ZGV4IDUxODUwMmJlNDkuLjRjMzVkMjcxNGUgMTAwNjQ0Ci0tLSBhL3NyYy9jb21wb3NpdGUuYwor KysgYi9zcmMvY29tcG9zaXRlLmMKQEAgLTgxNiw3ICs4MTYsNyBAQCBmaWxsX2dzdHJpbmdfYm9k eSAoTGlzcF9PYmplY3QgZ3N0cmluZykKICAgcHRyZGlmZl90IGxlbiA9IExHU1RSSU5HX0NIQVJf TEVOIChnc3RyaW5nKTsKICAgcHRyZGlmZl90IGk7CiAgIHN0cnVjdCBmb250ICpmb250ID0gTlVM TDsKLSAgdW5zaWduZWQgaW50IGNvZGU7CisgIExpc3BfT2JqZWN0IGNvZGUgPSBRbmlsOwogCiAg IGlmIChGT05UX09CSkVDVF9QIChmb250X29iamVjdCkpCiAgICAgZm9udCA9IFhGT05UX09CSkVD VCAoZm9udF9vYmplY3QpOwpAQCAtODM2LDEwICs4MzYsMTAgQEAgZmlsbF9nc3RyaW5nX2JvZHkg KExpc3BfT2JqZWN0IGdzdHJpbmcpCiAgICAgICBMR0xZUEhfU0VUX0NIQVIgKGcsIGMpOwogCiAg ICAgICBpZiAoZm9udCAhPSBOVUxMKQotICAgICAgICBjb2RlID0gZm9udC0+ZHJpdmVyLT5lbmNv ZGVfY2hhciAoZm9udCwgTEdMWVBIX0NIQVIgKGcpKTsKKyAgICAgICAgY29kZSA9IGZvbnQtPmRy aXZlci0+ZW5jb2RlX2NoYXIgKGZvbnQsIExHTFlQSF9DSEFSIChnKSwgTlVMTCk7CiAgICAgICBl bHNlCi0gICAgICAgIGNvZGUgPSBGT05UX0lOVkFMSURfQ09ERTsKLSAgICAgIGlmIChjb2RlICE9 IEZPTlRfSU5WQUxJRF9DT0RFKQorICAgICAgICBjb2RlID0gUW5pbDsKKyAgICAgIGlmICghTklM UCAoY29kZSkpCiAgICAgICAgIHsKIAkgIGZvbnRfZmlsbF9sZ2x5cGhfbWV0cmljcyAoZywgZm9u dCwgY29kZSk7CiAgICAgICAgIH0KQEAgLTEyMjMsNyArMTIyMyw3IEBAIGNvbXBvc2l0aW9uX3Jl c2VhdF9pdCAoc3RydWN0IGNvbXBvc2l0aW9uX2l0ICpjbXBfaXQsIHB0cmRpZmZfdCBjaGFycG9z LAogCSAgICAgIGlmICghIFZFQ1RPUlAgKGVsdCkgfHwgQVNJWkUgKGVsdCkgIT0gMwogCQkgIHx8 ICEgRklYTlVNUCAoQVJFRiAoZWx0LCAxKSkpCiAJCWNvbnRpbnVlOwotCSAgICAgIGlmIChYRklY TkFUIChBUkVGIChlbHQsIDEpKSAhPSBjbXBfaXQtPmxvb2tiYWNrKQorCSAgICAgIGlmIChYRklY TlVNIChBUkVGIChlbHQsIDEpKSAhPSBjbXBfaXQtPmxvb2tiYWNrKQogCQlnb3RvIG5vX2NvbXBv c2l0aW9uOwogCSAgICAgIGxnc3RyaW5nID0gYXV0b2NtcF9jaGFycyAoZWx0LCBjaGFycG9zLCBi eXRlcG9zLCBlbmRwb3MsCiAJCQkJCXcsIGZhY2UsIHN0cmluZywgZGlyZWN0aW9uKTsKZGlmZiAt LWdpdCBhL3NyYy9kYXRhLmMgYi9zcmMvZGF0YS5jCmluZGV4IDFkYjBhOTgzYjQuLmVhMjYwNGIz NzkgMTAwNjQ0Ci0tLSBhL3NyYy9kYXRhLmMKKysrIGIvc3JjL2RhdGEuYwpAQCAtMjY3LDYgKzI2 Nyw3IEBAIERFRlVOICgidHlwZS1vZiIsIEZ0eXBlX29mLCBTdHlwZV9vZiwgMSwgMSwgMCwKIAlj YXNlIFBWRUNfTUlTQ19QVFI6CiAgICAgICAgIGNhc2UgUFZFQ19PVEhFUjoKICAgICAgICAgY2Fz ZSBQVkVDX1NVQl9DSEFSX1RBQkxFOgorCWNhc2UgUFZFQ19HTFlQSF9DT05URVhUOgogICAgICAg ICBjYXNlIFBWRUNfRlJFRTogOwogICAgICAgICB9CiAgICAgICBlbWFjc19hYm9ydCAoKTsKZGlm ZiAtLWdpdCBhL3NyYy9kaXNwZXh0ZXJuLmggYi9zcmMvZGlzcGV4dGVybi5oCmluZGV4IDBiMWYz ZDE0YWUuLmJiYjExOTYyZjMgMTAwNjQ0Ci0tLSBhL3NyYy9kaXNwZXh0ZXJuLmgKKysrIGIvc3Jj L2Rpc3BleHRlcm4uaApAQCAtMzk3LDYgKzM5NywxNCBAQCAjZGVmaW5lIFNFVF9HTFlQSF9GUk9N X0dMWVBIX0NPREUoZ2x5cGgsIGdjKQkJCQlcCiB9OwogCiAKK3N0cnVjdCBnbHlwaF9jb250ZXh0 Cit7CisgIHVuaW9uIHZlY3Rvcmxpa2VfaGVhZGVyIGhlYWRlcjsKKyAgTGlzcF9PYmplY3Qgc3Ry aW5nOworICBMaXNwX09iamVjdCBzY3JpcHQ7CisgIExpc3BfT2JqZWN0IHBvc2l0aW9uOworfTsK KwogLyogR2x5cGhzLgogCiAgICBCZSBleHRyYSBjYXJlZnVsIHdoZW4gY2hhbmdpbmcgdGhpcyBz dHJ1Y3R1cmUhICBFc3AuIG1ha2Ugc3VyZSB0aGF0CkBAIC01NjcsNiArNTc1LDggQEAgI2RlZmlu ZSBGQUNFX0lEX0JJVFMJMjAKICAgICAvKiBVc2VkIHRvIGNvbXBhcmUgYWxsIGJpdC1maWVsZHMg YWJvdmUgaW4gb25lIHN0ZXAuICAqLwogICAgIHVuc2lnbmVkIHZhbDsKICAgfSB1OworCisgIHN0 cnVjdCBnbHlwaF9jb250ZXh0ICpjb250ZXh0OwogfTsKIAogCkBAIC0xMzI5LDcgKzEzMzksNyBA QCAjZGVmaW5lIE1BVFJJWF9ST1dfT1ZFUkxBUFNfU1VDQ19QKFJPVykJCVwKICAgZW51bSBnbHlw aF9yb3dfYXJlYSBhcmVhOwogCiAgIC8qIENoYXJhY3RlcnMgdG8gYmUgZHJhd24sIGFuZCBudW1i ZXIgb2YgY2hhcmFjdGVycy4gICovCi0gIHVuc2lnbmVkICpjaGFyMmI7CisgIExpc3BfT2JqZWN0 ICpjaGFyMmI7CiAgIGludCBuY2hhcnM7CiAKICAgLyogQSBmYWNlLW92ZXJyaWRlIGZvciBkcmF3 aW5nIGN1cnNvcnMsIG1vdXNlIGZhY2UgYW5kIHNpbWlsYXIuICAqLwpAQCAtMjI3MiwxMiArMjI4 MiwyOCBAQCAjZGVmaW5lIElUX1NUQUNLX1NJWkUgNQogICBpbnQgd2lkdGg7CiB9OwogCisvKiBU aGlzIGlzIHdheSB0b28gbXVjaC4gKi8KKyNkZWZpbmUgSVRfSElTVE9SWV9TSVpFIDEyOAorc3Ry dWN0IGl0X2hpc3RvcnkKK3sKKyAgcHRyZGlmZl90IGxlbjsKKyAgaW50IGNbSVRfSElTVE9SWV9T SVpFXTsKK307CisKIHN0cnVjdCBpdAogewogICAvKiBUaGUgd2luZG93IGluIHdoaWNoIHdlIGl0 ZXJhdGUgb3ZlciBjdXJyZW50X2J1ZmZlciAob3IgYSBzdHJpbmcpLiAgKi8KICAgTGlzcF9PYmpl Y3Qgd2luZG93OwogICBzdHJ1Y3Qgd2luZG93ICp3OwogCisgIHN0cnVjdCBpdF9oaXN0b3J5IGhp c3Rvcnk7CisgIHN0cnVjdAorICB7CisgICAgcHRyZGlmZl90IG5leHRfdHJhbnNpdGlvbjsKKyAg ICBwdHJkaWZmX3QgYWdlOworICAgIHN0cnVjdCBnbHlwaF9jb250ZXh0ICpjb250ZXh0OworICB9 IGNvbnRleHRfY2FjaGU7CisKICAgLyogVGhlIHdpbmRvdydzIGZyYW1lLiAgKi8KICAgc3RydWN0 IGZyYW1lICpmOwogCmRpZmYgLS1naXQgYS9zcmMvZm9udC5jIGIvc3JjL2ZvbnQuYwppbmRleCBh YjAwNDAyYjQwLi4xMDY5Yzc3MTNiIDEwMDY0NAotLS0gYS9zcmMvZm9udC5jCisrKyBiL3NyYy9m b250LmMKQEAgLTE4NCw4ICsxODQsOCBAQCBmb250X21ha2Vfb2JqZWN0IChpbnQgc2l6ZSwgTGlz cF9PYmplY3QgZW50aXR5LCBpbnQgcGl4ZWxzaXplKQogewogICBMaXNwX09iamVjdCBmb250X29i amVjdDsKICAgc3RydWN0IGZvbnQgKmZvbnQKLSAgICA9IChzdHJ1Y3QgZm9udCAqKSBhbGxvY2F0 ZV9wc2V1ZG92ZWN0b3IgKHNpemUsIEZPTlRfT0JKRUNUX01BWCwKLQkJCQkJICAgICBGT05UX09C SkVDVF9NQVgsIFBWRUNfRk9OVCk7CisgICAgPSAoc3RydWN0IGZvbnQgKikgYWxsb2NhdGVfcHNl dWRvdmVjdG9yIChzaXplLCBGT05UX09CSkVDVF9NQVggKyAxLAorCQkJCQkgICAgIEZPTlRfT0JK RUNUX01BWCArIDEsIFBWRUNfRk9OVCk7CiAgIGludCBpOwogCiAgIC8qIEdDIGNhbiBoYXBwZW4g YmVmb3JlIHRoZSBkcml2ZXIgaXMgc2V0IHVwLApAQCAtMzAxMCw3ICszMDEwLDcgQEAgZm9udF9o YXNfY2hhciAoc3RydWN0IGZyYW1lICpmLCBMaXNwX09iamVjdCBmb250LCBpbnQgYykKICAgICAg IGlmIChyZXN1bHQgPj0gMCkKIAlyZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgcmV0dXJuIChmb250 cC0+ZHJpdmVyLT5lbmNvZGVfY2hhciAoZm9udHAsIGMpICE9IEZPTlRfSU5WQUxJRF9DT0RFKTsK KyAgcmV0dXJuICFOSUxQIChmb250cC0+ZHJpdmVyLT5lbmNvZGVfY2hhciAoZm9udHAsIGMsIE5V TEwpKTsKIH0KIAogCkBAIC0zMDIzLDcgKzMwMjMsNyBAQCBmb250X2VuY29kZV9jaGFyIChMaXNw X09iamVjdCBmb250X29iamVjdCwgaW50IGMpCiAKICAgZWFzc2VydCAoRk9OVF9PQkpFQ1RfUCAo Zm9udF9vYmplY3QpKTsKICAgZm9udCA9IFhGT05UX09CSkVDVCAoZm9udF9vYmplY3QpOwotICBy ZXR1cm4gZm9udC0+ZHJpdmVyLT5lbmNvZGVfY2hhciAoZm9udCwgYyk7CisgIHJldHVybiBYRklY TlVNIChmb250LT5kcml2ZXItPmVuY29kZV9jaGFyIChmb250LCBjLCBOVUxMKSk7CiB9CiAKIApA QCAtNDQxMywxMSArNDQxMywxMSBAQCBERUZVTiAoImNsZWFyLWZvbnQtY2FjaGUiLCBGY2xlYXJf Zm9udF9jYWNoZSwgU2NsZWFyX2ZvbnRfY2FjaGUsIDAsIDAsIDAsCiAKIAwKIHZvaWQKLWZvbnRf ZmlsbF9sZ2x5cGhfbWV0cmljcyAoTGlzcF9PYmplY3QgZ2x5cGgsIHN0cnVjdCBmb250ICpmb250 LCB1bnNpZ25lZCBpbnQgY29kZSkKK2ZvbnRfZmlsbF9sZ2x5cGhfbWV0cmljcyAoTGlzcF9PYmpl Y3QgZ2x5cGgsIHN0cnVjdCBmb250ICpmb250LCBMaXNwX09iamVjdCBjb2RlKQogewogICBzdHJ1 Y3QgZm9udF9tZXRyaWNzIG1ldHJpY3M7CiAKLSAgTEdMWVBIX1NFVF9DT0RFIChnbHlwaCwgY29k ZSk7CisgIExHTFlQSF9TRVRfQ09ERSAoZ2x5cGgsIFhGSVhOVU0gKGNvZGUpKTsKICAgZm9udC0+ ZHJpdmVyLT50ZXh0X2V4dGVudHMgKGZvbnQsICZjb2RlLCAxLCAmbWV0cmljcyk7CiAgIExHTFlQ SF9TRVRfTEJFQVJJTkcgKGdseXBoLCBtZXRyaWNzLmxiZWFyaW5nKTsKICAgTEdMWVBIX1NFVF9S QkVBUklORyAoZ2x5cGgsIG1ldHJpY3MucmJlYXJpbmcpOwpAQCAtNDYzOCwxMiArNDYzOCwxMiBA QCBERUZVTiAoImludGVybmFsLWNoYXItZm9udCIsIEZpbnRlcm5hbF9jaGFyX2ZvbnQsIFNpbnRl cm5hbF9jaGFyX2ZvbnQsIDEsIDIsIDAsCiAgIHN0cnVjdCBmYWNlICpmYWNlID0gRkFDRV9GUk9N X0lEIChmLCBmYWNlX2lkKTsKICAgaWYgKCEgZmFjZS0+Zm9udCkKICAgICByZXR1cm4gUW5pbDsK LSAgdW5zaWduZWQgY29kZSA9IGZhY2UtPmZvbnQtPmRyaXZlci0+ZW5jb2RlX2NoYXIgKGZhY2Ut PmZvbnQsIGMpOwotICBpZiAoY29kZSA9PSBGT05UX0lOVkFMSURfQ09ERSkKKyAgTGlzcF9PYmpl Y3QgY29kZSA9IGZhY2UtPmZvbnQtPmRyaXZlci0+ZW5jb2RlX2NoYXIgKGZhY2UtPmZvbnQsIGMs IE5VTEwpOworICBpZiAoTklMUCAoY29kZSkpCiAgICAgcmV0dXJuIFFuaWw7CiAgIExpc3BfT2Jq ZWN0IGZvbnRfb2JqZWN0OwogICBYU0VURk9OVCAoZm9udF9vYmplY3QsIGZhY2UtPmZvbnQpOwot ICByZXR1cm4gRmNvbnMgKGZvbnRfb2JqZWN0LCBJTlRfVE9fSU5URUdFUiAoY29kZSkpOworICBy ZXR1cm4gRmNvbnMgKGZvbnRfb2JqZWN0LCBjb2RlKTsKIH0KIAogI2lmIDAKQEAgLTQ5NjIsMTEg KzQ5NjIsMTEgQEAgREVGVU4gKCJmb250LWdldC1nbHlwaHMiLCBGZm9udF9nZXRfZ2x5cGhzLCBT Zm9udF9nZXRfZ2x5cGhzLCAzLCA0LCAwLAogICAgIHsKICAgICAgIExpc3BfT2JqZWN0IGc7CiAg ICAgICBpbnQgYyA9IFhGSVhOQVQgKGNoYXJzW2ldKTsKLSAgICAgIHVuc2lnbmVkIGNvZGU7Cisg ICAgICBMaXNwX09iamVjdCBjb2RlOwogICAgICAgc3RydWN0IGZvbnRfbWV0cmljcyBtZXRyaWNz OwogCi0gICAgICBjb2RlID0gZm9udC0+ZHJpdmVyLT5lbmNvZGVfY2hhciAoZm9udCwgYyk7Ci0g ICAgICBpZiAoY29kZSA9PSBGT05UX0lOVkFMSURfQ09ERSkKKyAgICAgIGNvZGUgPSBmb250LT5k cml2ZXItPmVuY29kZV9jaGFyIChmb250LCBjLCBOVUxMKTsKKyAgICAgIGlmIChOSUxQIChjb2Rl KSkKIAl7CiAJICBBU0VUICh2ZWMsIGksIFFuaWwpOwogCSAgY29udGludWU7CkBAIC00OTc1LDcg KzQ5NzUsMTIgQEAgREVGVU4gKCJmb250LWdldC1nbHlwaHMiLCBGZm9udF9nZXRfZ2x5cGhzLCBT Zm9udF9nZXRfZ2x5cGhzLCAzLCA0LCAwLAogICAgICAgTEdMWVBIX1NFVF9GUk9NIChnLCBpKTsK ICAgICAgIExHTFlQSF9TRVRfVE8gKGcsIGkpOwogICAgICAgTEdMWVBIX1NFVF9DSEFSIChnLCBj KTsKLSAgICAgIExHTFlQSF9TRVRfQ09ERSAoZywgY29kZSk7CisgICAgICBpZiAoRklYTlVNUCAo Y29kZSkpCisJTEdMWVBIX1NFVF9DT0RFIChnLCBYRklYTlVNIChjb2RlKSk7CisgICAgICBlbHNl IGlmIChWRUNUT1JQIChjb2RlKSAmJiBGSVhOVU1QIChBUkVGIChjb2RlLCA0KSkpCisJTEdMWVBI X1NFVF9DT0RFIChnLCBYRklYTlVNIChBUkVGIChjb2RlLCA0KSkpOworICAgICAgZWxzZQorCUxH TFlQSF9TRVRfQ09ERSAoZywgRk9OVF9JTlZBTElEX0NPREUpOwogICAgICAgZm9udC0+ZHJpdmVy LT50ZXh0X2V4dGVudHMgKGZvbnQsICZjb2RlLCAxLCAmbWV0cmljcyk7CiAgICAgICBMR0xZUEhf U0VUX1dJRFRIIChnLCBtZXRyaWNzLndpZHRoKTsKICAgICAgIExHTFlQSF9TRVRfTEJFQVJJTkcg KGcsIG1ldHJpY3MubGJlYXJpbmcpOwpkaWZmIC0tZ2l0IGEvc3JjL2ZvbnQuaCBiL3NyYy9mb250 LmgKaW5kZXggODYxNGU3ZmExMC4uZWVlNWU0YzgxZSAxMDA2NDQKLS0tIGEvc3JjL2ZvbnQuaAor KysgYi9zcmMvZm9udC5oCkBAIC0yNzYsNiArMjc2LDggQEAgI2RlZmluZSBGT05UX0VOQ09ESU5H X05PVF9ERUNJREVEIDI1NQogCiAgIExpc3BfT2JqZWN0IHByb3BzW0ZPTlRfT0JKRUNUX01BWF07 CiAKKyAgTGlzcF9PYmplY3QgaGJfY2FjaGU7CisKICAgLyogQmV5b25kIGhlcmUsIHRoZXJlIHNo b3VsZCBiZSBubyBtb3JlIExpc3BfT2JqZWN0IGNvbXBvbmVudHMuICAqLwogCiAgIC8qIE1pbmlt dW0gYW5kIG1heGltdW0gZ2x5cGggd2lkdGhzLCBpbiBwaXhlbHMuICBTb21lIGZvbnQgYmFja2Vu ZHMsCkBAIC00NTYsNyArNDU4LDcgQEAgR0NfRk9OVF9FTlRJVFlfUCAoTGlzcF9PYmplY3QgeCkK IElOTElORSBib29sCiBGT05UX09CSkVDVF9QIChMaXNwX09iamVjdCB4KQogewotICByZXR1cm4g Rk9OVFAgKHgpICYmIFBWU0laRSAoeCkgPT0gRk9OVF9PQkpFQ1RfTUFYOworICByZXR1cm4gRk9O VFAgKHgpICYmIFBWU0laRSAoeCkgPT0gRk9OVF9PQkpFQ1RfTUFYICsgMTsKIH0KIAogLyogTGlr ZSBGT05UX09CSkVDVF9QLCBidXQgY2FuIGJlIHVzZWQgaW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9y LiAgKi8KQEAgLTU2NSw2ICs1NjcsOCBAQCAjZGVmaW5lIEZPTlRfUElYRUxfU0laRV9RVUFOVFVN IDEKIAogI2RlZmluZSBGT05UX0lOVkFMSURfQ09ERSAweEZGRkZGRkZGCiAKK3N0cnVjdCBnbHlw aF9jb250ZXh0OworCiAvKiBGb250IGRyaXZlci4gIE1lbWJlcnMgc3BlY2lmaWVkIGFzICJvcHRp b25hbCIgY2FuIGJlIE5VTEwuICAqLwogCiBzdHJ1Y3QgZm9udF9kcml2ZXIKQEAgLTY0NSwxMyAr NjQ5LDE1IEBAICNkZWZpbmUgRk9OVF9JTlZBTElEX0NPREUgMHhGRkZGRkZGRgogCiAgIC8qIFJl dHVybiBhIGdseXBoIGNvZGUgb2YgRk9OVCBmb3IgY2hhcmFjdGVyIEMgKFVuaWNvZGUgY29kZSBw b2ludCkuCiAgICAgIElmIEZPTlQgZG9lc24ndCBoYXZlIHN1Y2ggYSBnbHlwaCwgcmV0dXJuIEZP TlRfSU5WQUxJRF9DT0RFLiAgKi8KLSAgdW5zaWduZWQgKCplbmNvZGVfY2hhcikgKHN0cnVjdCBm b250ICpmb250LCBpbnQgYyk7CisgIExpc3BfT2JqZWN0ICgqZW5jb2RlX2NoYXIpIChzdHJ1Y3Qg Zm9udCAqZm9udCwgaW50IGMsIHN0cnVjdCBnbHlwaF9jb250ZXh0ICpjb250ZXh0KTsKKworICBM aXNwX09iamVjdCAoKmd1ZXNzX3NjcmlwdCkgKHN0cnVjdCBmb250ICpmb250LCBpbnQgYyk7CiAK ICAgLyogQ29tcHV0ZSB0aGUgdG90YWwgbWV0cmljcyBvZiB0aGUgTkdMWVBIUyBnbHlwaHMgc3Bl Y2lmaWVkIGJ5CiAgICAgIHRoZSBmb250IEZPTlQgYW5kIHRoZSBzZXF1ZW5jZSBvZiBnbHlwaCBj b2RlcyBDT0RFLCBhbmQgc3RvcmUgdGhlCiAgICAgIHJlc3VsdCBpbiBNRVRSSUNTLiAgKi8KICAg dm9pZCAoKnRleHRfZXh0ZW50cykgKHN0cnVjdCBmb250ICpmb250LAotCQkJY29uc3QgdW5zaWdu ZWQgKmNvZGUsIGludCBuZ2x5cGhzLAorCQkJY29uc3QgTGlzcF9PYmplY3QgKmNvZGUsIGludCBu Z2x5cGhzLAogCQkJc3RydWN0IGZvbnRfbWV0cmljcyAqbWV0cmljcyk7CiAKICNpZmRlZiBIQVZF X1dJTkRPV19TWVNURU0KQEAgLTg4Niw3ICs4OTIsNyBAQCB2YWxpZF9mb250X2RyaXZlciAoc3Ry dWN0IGZvbnRfZHJpdmVyIGNvbnN0ICpkKQogZXh0ZXJuIExpc3BfT2JqZWN0IGZvbnRfcmFuZ2Ug KHB0cmRpZmZfdCwgcHRyZGlmZl90LCBwdHJkaWZmX3QgKiwKIAkJCSAgICAgICBzdHJ1Y3Qgd2lu ZG93ICosIHN0cnVjdCBmYWNlICosCiAJCQkgICAgICAgTGlzcF9PYmplY3QpOwotZXh0ZXJuIHZv aWQgZm9udF9maWxsX2xnbHlwaF9tZXRyaWNzIChMaXNwX09iamVjdCwgc3RydWN0IGZvbnQgKiwg dW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGZvbnRfZmlsbF9sZ2x5cGhfbWV0cmljcyAoTGlz cF9PYmplY3QsIHN0cnVjdCBmb250ICosIExpc3BfT2JqZWN0KTsKIAogZXh0ZXJuIExpc3BfT2Jq ZWN0IGZvbnRfcHV0X2V4dHJhIChMaXNwX09iamVjdCBmb250LCBMaXNwX09iamVjdCBwcm9wLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCB2YWwpOwpAQCAt MTAwNiw2ICsxMDEyLDM0IEBAIGZvbnRfZGF0YV9zdHJ1Y3R1cmVzX21heV9iZV9pbGxfZm9ybWVk ICh2b2lkKQogICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIH0KKyNkZWZpbmUgSEJfR0xZUEhfR0xZ UEggMAorI2RlZmluZSBIQl9HTFlQSF9DT0RFIDEKKyNkZWZpbmUgSEJfR0xZUEhfWF9BRFZBTkNF IDIKKyNkZWZpbmUgSEJfR0xZUEhfWF9PRkYgMworI2RlZmluZSBIQl9HTFlQSF9ZX09GRiA0Cisj ZGVmaW5lIEhCX0dMWVBIX0NPREVQT0lOVCA1CisjZGVmaW5lIEhCX0dMWVBIX0xFTkdUSCA2CisK KyNkZWZpbmUgSEJfU0xJQ0VfU0xJQ0UgMAorI2RlZmluZSBIQl9TTElDRV9YX0FEVkFOQ0UgMQor I2RlZmluZSBIQl9TTElDRV9YX09GRlNFVCA1CisjZGVmaW5lIEhCX1NMSUNFX0kgMgorI2RlZmlu ZSBIQl9TTElDRV9OIDMKKyNkZWZpbmUgSEJfU0xJQ0VfR0xZUEhTIDQKKyNkZWZpbmUgSEJfU0xJ Q0VfTEVOR1RIIDYKKworI2RlZmluZSBIQl9TSEFQRURfQ09ERSAwCisjZGVmaW5lIEhCX1NIQVBF RF9DTFVTVEVSIDEKKyNkZWZpbmUgSEJfU0hBUEVEX01FVFJJQ1MgMgorI2RlZmluZSBIQl9TSEFQ RURfQ0FSRVRTIDMKKyNkZWZpbmUgSEJfU0hBUEVEX1JUTCA0CisjZGVmaW5lIEhCX1NIQVBFRF9M RU5HVEggNQorCisjZGVmaW5lIEhCX1NIQVBFRF9NRVRSSUNTX1hfQURWQU5DRSAwCisjZGVmaW5l IEhCX1NIQVBFRF9NRVRSSUNTX1lfQURWQU5DRSAxCisjZGVmaW5lIEhCX1NIQVBFRF9NRVRSSUNT X1hfT0ZGU0VUIDIKKyNkZWZpbmUgSEJfU0hBUEVEX01FVFJJQ1NfWV9PRkZTRVQgMworI2RlZmlu ZSBIQl9TSEFQRURfTUVUUklDU19MRU5HVEggNAogCiBJTkxJTkVfSEVBREVSX0VORAogCmRpZmYg LS1naXQgYS9zcmMvZnRjcmZvbnQuYyBiL3NyYy9mdGNyZm9udC5jCmluZGV4IDc4MzJkNGY1Y2Uu LmI1MWQzZTYxYmQgMTAwNjQ0Ci0tLSBhL3NyYy9mdGNyZm9udC5jCisrKyBiL3NyYy9mdGNyZm9u dC5jCkBAIC0yMTgsNyArMjE4LDcgQEAgZnRjcmZvbnRfb3BlbiAoc3RydWN0IGZyYW1lICpmLCBM aXNwX09iamVjdCBlbnRpdHksIGludCBwaXhlbF9zaXplKQogICBmb250LT5hdmVyYWdlX3dpZHRo IC89IDk1OwogCiAgIGNhaXJvX3NjYWxlZF9mb250X2V4dGVudHMgKGZ0Y3Jmb250X2luZm8tPmNy X3NjYWxlZF9mb250LCAmZXh0ZW50cyk7Ci0gIGZvbnQtPmFzY2VudCA9IGxyb3VuZCAoZXh0ZW50 cy5hc2NlbnQpOworICBmb250LT5hc2NlbnQgPSBjZWlsIChleHRlbnRzLmFzY2VudCk7CiAgIHZh bCA9IGFzc3Ffbm9fcXVpdCAoUUNtaW5zcGFjZSwgQVJFRiAoZW50aXR5LCBGT05UX0VYVFJBX0lO REVYKSk7CiAgIGlmICghKENPTlNQICh2YWwpICYmIE5JTFAgKFhDRFIgKHZhbCkpKSkKICAgICB7 CkBAIC0zMjIsNjQgKzMyMiwzNTMgQEAgZnRjcmZvbnRfaGFzX2NoYXIgKExpc3BfT2JqZWN0IGZv bnQsIGludCBjKQogICByZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZAotZnRjcmZvbnRf ZW5jb2RlX2NoYXIgKHN0cnVjdCBmb250ICpmb250LCBpbnQgYykKK3N0YXRpYyBMaXNwX09iamVj dAorZnRjcmZvbnRfZ3Vlc3Nfc2NyaXB0IChzdHJ1Y3QgZm9udCAqZm9udCwgaW50IGMpCit7Cisg IGJsb2NrX2lucHV0ICgpOworICBoYl9idWZmZXJfdCAqaGJfYnVmID0gaGJfYnVmZmVyX2NyZWF0 ZSAoKTsKKyAgaGJfYnVmZmVyX3NldF9jb250ZW50X3R5cGUgKGhiX2J1ZiwgSEJfQlVGRkVSX0NP TlRFTlRfVFlQRV9VTklDT0RFKTsKKyAgaGJfYnVmZmVyX2FkZCAoaGJfYnVmLCBjLCAwKTsKKyAg aGJfYnVmZmVyX2d1ZXNzX3NlZ21lbnRfcHJvcGVydGllcyAoaGJfYnVmKTsKKyAgLyogRm9yY2Ug dGhlIGxhbmd1YWdlIHRvIGEga25vd24gYW5kIHN5c3RlbS1pbmRlcGVuZGVudCB2YWx1ZSwgc28g YXMKKyAgICAgbm90IHRvIG1ha2UgRW1hY3MncyBiZWhhdmlvciBkZXBlbmQgb24gTENfQ1RZUEUu ICovCisgIGhiX2J1ZmZlcl9zZXRfbGFuZ3VhZ2UgKGhiX2J1ZiwgaGJfbGFuZ3VhZ2VfZnJvbV9z dHJpbmcgKCJlbiIsIC0xKSk7CisgIGhiX3NjcmlwdF90IHNjcmlwdCA9CisgICAgaGJfYnVmZmVy X2dldF9zY3JpcHQgKGhiX2J1Zik7CisgIExpc3BfT2JqZWN0IHJldDsKKworICBpZiAoc2NyaXB0 ID09IEhCX1NDUklQVF9VTktOT1dOIHx8CisgICAgICBzY3JpcHQgPT0gSEJfU0NSSVBUX0NPTU1P TiB8fAorICAgICAgc2NyaXB0ID09IEhCX1NDUklQVF9JTkhFUklURUQgfHwKKyAgICAgIHNjcmlw dCA9PSBIQl9TQ1JJUFRfSU5WQUxJRCkKKyAgICByZXQgPSBRbmlsOworICBlbHNlCisgICAgewor ICAgICAgY2hhciBzdHJpbmdbNV07CisgICAgICBzdHJpbmdbNF0gPSAwOworICAgICAgc3RyaW5n WzNdID0gc2NyaXB0ICYgMHhmZjsKKyAgICAgIHN0cmluZ1syXSA9IChzY3JpcHQ+PjgpICYgMHhm ZjsKKyAgICAgIHN0cmluZ1sxXSA9IChzY3JpcHQ+PjE2KSAmIDB4ZmY7CisgICAgICBzdHJpbmdb MF0gPSAoc2NyaXB0Pj4yNCkgJiAweGZmOworICAgICAgcmV0ID0gYnVpbGRfc3RyaW5nIChzdHJp bmcpOworICAgIH0KKworICB1bmJsb2NrX2lucHV0ICgpOworCisgIHJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBoYl9jb2RlcG9pbnRfdAoraGJfbWlycm9yIChoYl91bmljb2RlX2Z1bmNzX3QgKnVm dW5jcywKKwkgICBoYl9jb2RlcG9pbnRfdCBjb2RlcG9pbnQsCisJICAgdm9pZCAqdXNlcl9kYXRh KQoreworICAvKiBIYXJmQnV6eiBleHBlY3RzIHVubWlycm9yZWQgY29kZXBvaW50cywgc28gaWYg d2UgbWlycm9yZWQgaXQsCisgICAgIGRvbid0IG1pcnJvciBpdCBhZ2Fpbi4gICovCisgIGlmIChi aWRpX21pcnJvcl9jaGFyIChjb2RlcG9pbnQpICE9IGNvZGVwb2ludCkKKyAgICByZXR1cm4gY29k ZXBvaW50OworICByZXR1cm4gaGJfdW5pY29kZV9taXJyb3JpbmcgKGhiX3VuaWNvZGVfZnVuY3Nf Z2V0X3BhcmVudCAodWZ1bmNzKSwgY29kZXBvaW50KTsKK30KKworc3RhdGljIExpc3BfT2JqZWN0 CitnZXRfc2hhcGVkX2NvbnRleHQgKHN0cnVjdCBmb250ICpmb250LCBMaXNwX09iamVjdCBzdHJp bmcsIExpc3BfT2JqZWN0IHNjcmlwdCkKIHsKICAgc3RydWN0IGZvbnRfaW5mbyAqZnRjcmZvbnRf aW5mbyA9IChzdHJ1Y3QgZm9udF9pbmZvICopIGZvbnQ7Ci0gIHVuc2lnbmVkIGNvZGUgPSBGT05U X0lOVkFMSURfQ09ERTsKLSAgdW5zaWduZWQgY2hhciB1dGY4W01BWF9NVUxUSUJZVEVfTEVOR1RI XTsKLSAgaW50IHV0ZjhsZW4gPSBDSEFSX1NUUklORyAoYywgdXRmOCk7Ci0gIGNhaXJvX2dseXBo X3Qgc3RhY2tfZ2x5cGg7Ci0gIGNhaXJvX2dseXBoX3QgKmdseXBocyA9ICZzdGFja19nbHlwaDsK LSAgaW50IG51bV9nbHlwaHMgPSAxOwotCi0gIGlmIChjYWlyb19zY2FsZWRfZm9udF90ZXh0X3Rv X2dseXBocyAoZnRjcmZvbnRfaW5mby0+Y3Jfc2NhbGVkX2ZvbnQsIDAsIDAsCi0JCQkJCShjaGFy ICopIHV0ZjgsIHV0ZjhsZW4sCi0JCQkJCSZnbHlwaHMsICZudW1fZ2x5cGhzLAotCQkJCQlOVUxM LCBOVUxMLCBOVUxMKQotICAgICAgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCisgIGlmIChOSUxQ IChmb250LT5oYl9jYWNoZSkpCisgICAgZm9udC0+aGJfY2FjaGUgPSBDQUxMTiAoRm1ha2VfaGFz aF90YWJsZSwgUUN0ZXN0LCBRZXF1YWwsIFFDd2Vha25lc3MsIFFrZXkpOworCisgIExpc3BfT2Jq ZWN0IGNhY2hlZCA9IEZnZXRoYXNoIChGY29ucyAoc3RyaW5nLCBzY3JpcHQpLCBmb250LT5oYl9j YWNoZSwgUW5pbCk7CisKKyAgaWYgKCFOSUxQIChjYWNoZWQpKQorICAgIHJldHVybiBjYWNoZWQ7 CisgIGJsb2NrX2lucHV0ICgpOworICB1bnNpZ25lZCBpbnQgbnVtX2dseXBocyA9IDA7CisgIGhi X2J1ZmZlcl90ICpoYl9idWYgPSBoYl9idWZmZXJfY3JlYXRlICgpOworICBoYl91bmljb2RlX2Z1 bmNzX3QgKnVmdW5jcyA9IGhiX3VuaWNvZGVfZnVuY3NfY3JlYXRlIChoYl9idWZmZXJfZ2V0X3Vu aWNvZGVfZnVuY3MgKGhiX2J1ZikpOworICBoYl91bmljb2RlX2Z1bmNzX3NldF9taXJyb3Jpbmdf ZnVuYyAodWZ1bmNzLCBoYl9taXJyb3IsIE5VTEwsIE5VTEwpOworICBoYl9idWZmZXJfc2V0X3Vu aWNvZGVfZnVuY3MgKGhiX2J1ZiwgdWZ1bmNzKTsKKyAgaGJfYnVmZmVyX3NldF9jbHVzdGVyX2xl dmVsIChoYl9idWYsIEhCX0JVRkZFUl9DTFVTVEVSX0xFVkVMX01PTk9UT05FX0NIQVJBQ1RFUlMp OworICBib29sIHJ0bCA9IGZhbHNlOworICBmb3IgKGludCBpID0gMDsgaSA8IFNDSEFSUyAoc3Ry aW5nKTsgaSsrKQorICAgIHsKKyAgICAgIGludCBjID0gWEZJWE5VTSAoRmFyZWYgKHN0cmluZywg bWFrZV9maXhudW0gKGkpKSk7CisgICAgICBoYl9idWZmZXJfYWRkIChoYl9idWYsIGMsIGkpOwor ICAgIH0KKyAgaGJfYnVmZmVyX3NldF9jb250ZW50X3R5cGUgKGhiX2J1ZiwgSEJfQlVGRkVSX0NP TlRFTlRfVFlQRV9VTklDT0RFKTsKKyAgaWYgKFNUUklOR1AgKHNjcmlwdCkgJiYgU0JZVEVTIChz Y3JpcHQpID49IDQpCisgICAgeworICAgICAgaGJfc2NyaXB0X3Qgc2NyaXB0aW50ID0gMDsKKyAg ICAgIHNjcmlwdGludCArPSBTUkVGIChzY3JpcHQsIDApIDw8IDI0OworICAgICAgc2NyaXB0aW50 ICs9IFNSRUYgKHNjcmlwdCwgMSkgPDwgMTY7CisgICAgICBzY3JpcHRpbnQgKz0gU1JFRiAoc2Ny aXB0LCAyKSA8PCAgODsKKyAgICAgIHNjcmlwdGludCArPSBTUkVGIChzY3JpcHQsIDMpOworICAg ICAgaGJfYnVmZmVyX3NldF9zY3JpcHQgKGhiX2J1Ziwgc2NyaXB0aW50KTsKKyAgICB9CisgIGhi X2J1ZmZlcl9ndWVzc19zZWdtZW50X3Byb3BlcnRpZXMgKGhiX2J1Zik7CisgIC8qIEZvcmNlIHRo ZSBsYW5ndWFnZSB0byBhIGtub3duIGFuZCBzeXN0ZW0taW5kZXBlbmRlbnQgdmFsdWUsIHNvIGFz CisgICAgIG5vdCB0byBtYWtlIEVtYWNzJ3MgYmVoYXZpb3IgZGVwZW5kIG9uIExDX0NUWVBFLiAq LworICBoYl9idWZmZXJfc2V0X2xhbmd1YWdlIChoYl9idWYsIGhiX2xhbmd1YWdlX2Zyb21fc3Ry aW5nICgiZW4iLCAtMSkpOworICBydGwgPSBoYl9idWZmZXJfZ2V0X2RpcmVjdGlvbiAoaGJfYnVm KSA9PSBIQl9ESVJFQ1RJT05fUlRMOworICBoYl9mb250X3QgKmhiX2ZvbnQgPSBoYl9mdF9mb250 X2NyZWF0ZV9yZWZlcmVuY2VkCisgICAgKGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZSAo ZnRjcmZvbnRfaW5mby0+Y3Jfc2NhbGVkX2ZvbnQpKTsKKyAgaGJfc2hhcGUgKGhiX2ZvbnQsIGhi X2J1ZiwgTlVMTCwgMCk7CisgIGhiX2dseXBoX2luZm9fdCAqZ2x5cGhfaW5mbyA9IGhiX2J1ZmZl cl9nZXRfZ2x5cGhfaW5mb3MKKyAgICAoaGJfYnVmLCAmbnVtX2dseXBocyk7CisgIGhiX2dseXBo X3Bvc2l0aW9uX3QgKmdseXBoX3BvcyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25zCisg ICAgKGhiX2J1ZiwgJm51bV9nbHlwaHMpOworCisgIC8qIFJldmVyc2UgZ2x5cGhzIGZvciBSVEwu IFRoaXMgaXMgYmVjYXVzZSBIYXJmQnV6eiByZXZlcnNlcyB0aGVtLAorICAgICBub3QgYmVjYXVz ZSB3ZSB3YW50IHRvIGJ5cGFzcyB0aGUgY29kZSBpbiBiaWRpLmMuICovCisgIGlmIChydGwpCisg ICAgeworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZ2x5cGhzLzI7IGkrKykKKwl7CisJ ICBoYl9nbHlwaF9wb3NpdGlvbl90IHRlbXBfcG9zID0gZ2x5cGhfcG9zW251bV9nbHlwaHMgLSBp IC0gMV07CisJICBnbHlwaF9wb3NbbnVtX2dseXBocyAtIGkgLSAxXSA9IGdseXBoX3Bvc1tpXTsK KwkgIGdseXBoX3Bvc1tpXSA9IHRlbXBfcG9zOworCisJICBoYl9nbHlwaF9pbmZvX3QgdGVtcF9p bmZvID0gZ2x5cGhfaW5mb1tudW1fZ2x5cGhzIC0gaSAtIDFdOworCSAgZ2x5cGhfaW5mb1tudW1f Z2x5cGhzIC0gaSAtIDFdID0gZ2x5cGhfaW5mb1tpXTsKKwkgIGdseXBoX2luZm9baV0gPSB0ZW1w X2luZm87CisJfQorICAgIH0KKworICAvKiBNZXJnZSBub24tc3BhY2luZyBnbHlwaHMgaW50byB0 aGUgcHJldmlvdXMgY2x1c3Rlci4gKi8KKyAgaW50IGxhc3Rfc3BhY2luZ19jbHVzdGVyID0gMDsK KyAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZ2x5cGhzOyBpKyspCiAgICAgewotICAgICAgaWYg KGdseXBocyAhPSAmc3RhY2tfZ2x5cGgpCi0JY2Fpcm9fZ2x5cGhfZnJlZSAoZ2x5cGhzKTsKLSAg ICAgIGVsc2UgaWYgKHN0YWNrX2dseXBoLmluZGV4KQotCWNvZGUgPSBzdGFja19nbHlwaC5pbmRl eDsKKyAgICAgIGlmIChnbHlwaF9wb3NbaV0ueF9hZHZhbmNlID09IDAKKwkgICYmIGdseXBoX2lu Zm9baV0uY2x1c3RlciA+IGxhc3Rfc3BhY2luZ19jbHVzdGVyKQorCWdseXBoX2luZm9baV0uY2x1 c3RlciA9IGxhc3Rfc3BhY2luZ19jbHVzdGVyOworICAgICAgZWxzZQorCWxhc3Rfc3BhY2luZ19j bHVzdGVyID0gZ2x5cGhfaW5mb1tpXS5jbHVzdGVyOwogICAgIH0KIAorICAvKiBGb3IgUlRMLCB1 bi1yZXZlcnNlIGdseXBocyB0aGF0IGVuZGVkIHVwIGZvcm1pbmcgYSBjbHVzdGVyLiAqLworICBp ZiAocnRsKQorICAgIHsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2dseXBoczspCisJ eworCSAgaW50IGo7CisJICBmb3IgKGogPSBpICsgMTsgaiA8IG51bV9nbHlwaHM7IGorKykKKwkg ICAgeworCSAgICAgIGlmIChnbHlwaF9pbmZvW2pdLmNsdXN0ZXIgIT0gZ2x5cGhfaW5mb1tpXS5j bHVzdGVyKQorCQlicmVhazsKKwkgICAgfQorCSAgZm9yIChpbnQgayA9IGk7IGsgPCBpICsgKGog LSBpKS8yOyBrKyspCisJICAgIHsKKwkgICAgICBpbnQgazIgPSBpICsgaiAtIGsgLSAxOworCSAg ICAgIGhiX2dseXBoX3Bvc2l0aW9uX3QgdGVtcF9wb3MgPSBnbHlwaF9wb3NbazJdOworCSAgICAg IGdseXBoX3Bvc1trMl0gPSBnbHlwaF9wb3Nba107CisJICAgICAgZ2x5cGhfcG9zW2tdID0gdGVt cF9wb3M7CisKKwkgICAgICBoYl9nbHlwaF9pbmZvX3QgdGVtcF9pbmZvID0gZ2x5cGhfaW5mb1tr Ml07CisJICAgICAgZ2x5cGhfaW5mb1trMl0gPSBnbHlwaF9pbmZvW2tdOworCSAgICAgIGdseXBo X2luZm9ba10gPSB0ZW1wX2luZm87CisJICAgIH0KKwkgIGkgPSBqOworCX0KKyAgICB9CisKKyAg TGlzcF9PYmplY3QgcmV0ID0gbWFrZV9uaWxfdmVjdG9yIChudW1fZ2x5cGhzKTsKKyAgZm9yIChp bnQgaSA9IDA7IGkgPCBudW1fZ2x5cGhzOyBpKyspCisgICAgeworICAgICAgTGlzcF9PYmplY3Qg Z2x5cGggPSBtYWtlX25pbF92ZWN0b3IgKEhCX1NIQVBFRF9MRU5HVEgpOworICAgICAgQVNFVCAo Z2x5cGgsIEhCX1NIQVBFRF9DT0RFLCBtYWtlX2ZpeG51bSAoZ2x5cGhfaW5mb1tpXS5jb2RlcG9p bnQpKTsKKyAgICAgIEFTRVQgKGdseXBoLCBIQl9TSEFQRURfQ0xVU1RFUiwgbWFrZV9maXhudW0g KGdseXBoX2luZm9baV0uY2x1c3RlcikpOworICAgICAgeworCUxpc3BfT2JqZWN0IHYgPSBtYWtl X25pbF92ZWN0b3IgKEhCX1NIQVBFRF9NRVRSSUNTX0xFTkdUSCk7CisJQVNFVCAodiwgSEJfU0hB UEVEX01FVFJJQ1NfWF9BRFZBTkNFLAorCSAgICAgIG1ha2VfZml4bnVtICgoZ2x5cGhfcG9zW2ld LnhfYWR2YW5jZSArIDMyKS8gNjQpKTsKKwlBU0VUICh2LCBIQl9TSEFQRURfTUVUUklDU19ZX0FE VkFOQ0UsCisJICAgICAgbWFrZV9maXhudW0gKChnbHlwaF9wb3NbaV0ueV9hZHZhbmNlICsgMzIp IC8gNjQpKTsKKwlBU0VUICh2LCBIQl9TSEFQRURfTUVUUklDU19YX09GRlNFVCwKKwkgICAgICBt YWtlX2ZpeG51bSAoKGdseXBoX3Bvc1tpXS54X29mZnNldCkgLyA2NCkpOworCUFTRVQgKHYsIEhC X1NIQVBFRF9NRVRSSUNTX1lfT0ZGU0VULAorCSAgICAgIG1ha2VfZml4bnVtICgoZ2x5cGhfcG9z W2ldLnlfb2Zmc2V0KSAvIDY0KSk7CisJQVNFVCAoZ2x5cGgsIEhCX1NIQVBFRF9NRVRSSUNTLCB2 KTsKKyAgICAgIH0KKyNpZiAwCisgICAgICBMaXNwX09iamVjdCB2ID0gUW5pbDsKKyAgICAgIGlm IChmYWxzZSkgeworCWhiX3Bvc2l0aW9uX3QgY2FyZXRzWzEwMjRdOworCXVuc2lnbmVkIGludCBj YXJldF9jb3VudCA9IDEwMjI7CisJaWYgKGhiX290X2xheW91dF9nZXRfbGlnYXR1cmVfY2FyZXRz CisJICAgIChoYl9mb250LCBIQl9ESVJFQ1RJT05fTFRSIC8qIFhYWCAqLywKKwkgICAgIGdseXBo X2luZm9baV0uY29kZXBvaW50LCAwLAorCSAgICAgJmNhcmV0X2NvdW50LCBjYXJldHMgKyAxKSkK KwkgIHsKKwkgICAgY2FyZXRzWzBdID0gMDsKKwkgICAgY2FyZXRfY291bnQrKzsKKwkgICAgY2Fy ZXRzW2NhcmV0X2NvdW50KytdID0gZ2x5cGhfcG9zW2ldLnhfYWR2YW5jZTsKKwkgICAgdiA9IG1h a2VfbmlsX3ZlY3RvciAoY2FyZXRfY291bnQpOworCSAgICBmb3IgKHB0cmRpZmZfdCBpID0gMDsg aSA8IGNhcmV0X2NvdW50OyBpKyspCisJICAgICAgQVNFVCAodiwgaSwgbWFrZV9maXhudW0gKGNh cmV0c1tpXSkpOworCSAgfQorICAgICAgfQorI2VuZGlmCisgICAgICBBU0VUIChnbHlwaCwgSEJf U0hBUEVEX0NBUkVUUywgUW5pbCk7CisgICAgICBBU0VUIChnbHlwaCwgSEJfU0hBUEVEX1JUTCwg cnRsID8gUXQgOiBRbmlsKTsKKyAgICAgIEFTRVQgKHJldCwgaSwgZ2x5cGgpOworICAgIH0KKwor ICBGcHV0aGFzaCAoRmNvbnMgKHN0cmluZywgc2NyaXB0KSwgcmV0LCBmb250LT5oYl9jYWNoZSk7 CisgIHVuYmxvY2tfaW5wdXQgKCk7CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBMaXNwX09i amVjdAorZnRjcmZvbnRfZW5jb2RlX2NoYXIgKHN0cnVjdCBmb250ICpmb250LCBpbnQgYywgc3Ry dWN0IGdseXBoX2NvbnRleHQgKmNvbnRleHQpCit7CisgIExpc3BfT2JqZWN0IGNvZGUgPSBRbmls OworCisgIGlmIChjb250ZXh0ID09IE5VTEwpCisgICAgeworICAgICAgY29udGV4dCA9IEFMTE9D QVRFX1BTRVVET1ZFQ1RPUiAoc3RydWN0IGdseXBoX2NvbnRleHQsIHBvc2l0aW9uLCBQVkVDX0dM WVBIX0NPTlRFWFQpOworICAgICAgY29udGV4dC0+c2NyaXB0ID0gUW5pbDsKKyAgICAgIGNvbnRl eHQtPnN0cmluZyA9IENBTExOIChGc3RyaW5nLCBtYWtlX2ZpeG51bSAoYykpOworICAgICAgY29u dGV4dC0+cG9zaXRpb24gPSBtYWtlX2ZpeG51bSAoMCk7CisgICAgfQorCisgIGJvb2wgcnRsID0g ZmFsc2U7CisgIExpc3BfT2JqZWN0IHNoYXBlZCA9IGdldF9zaGFwZWRfY29udGV4dCAoZm9udCwg Y29udGV4dC0+c3RyaW5nLCBjb250ZXh0LT5zY3JpcHQpOworICB1bnNpZ25lZCBpbnQgbnVtX2ds eXBocyA9IEFTSVpFIChzaGFwZWQpOworICBydGwgPSAhIE5JTFAgKEFSRUYgKEFSRUYgKHNoYXBl ZCwgMCksIEhCX1NIQVBFRF9SVEwpKTsKKyAgaW50IGdseXBoMCA9IDAsIGdseXBoMSA9IG51bV9n bHlwaHM7CisgIGludCBjbHVzdGVyMCA9IDAsIGNsdXN0ZXIxID0gWEZJWE5VTSAoRmxlbmd0aCAo Y29udGV4dC0+c3RyaW5nKSk7CisgIGludCBjaGFyMCA9IDAsIGNoYXIxID0gWEZJWE5VTSAoRmxl bmd0aCAoY29udGV4dC0+c3RyaW5nKSk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2dseXBo czsgaSsrKQorICAgIGlmIChYRklYTlVNIChBUkVGIChBUkVGIChzaGFwZWQsIGkpLCBIQl9TSEFQ RURfQ0xVU1RFUikpCisJPD0gWEZJWE5VTSAoY29udGV4dC0+cG9zaXRpb24pKQorICAgICAgewor CWNsdXN0ZXIwID0gWEZJWE5VTSAoQVJFRiAoQVJFRiAoc2hhcGVkLCBpKSwgSEJfU0hBUEVEX0NM VVNURVIpKTsKKwlpbnQgaTEgPSBpOworCXdoaWxlIChpMSA+IDAKKwkgICAgICAgJiYgWEZJWE5V TSAoQVJFRiAoQVJFRiAoc2hhcGVkLCBpMSAtIDEpLCBIQl9TSEFQRURfQ0xVU1RFUikpCisJICAg ICAgID09IGNsdXN0ZXIwKQorCSAgaTEtLTsKKwlnbHlwaDAgPSBpMTsKKwljaGFyMCA9IGNsdXN0 ZXIwOworICAgICAgfQorICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9nbHlwaHM7IGkrKykKKyAg ICBpZiAoWEZJWE5VTSAoQVJFRiAoQVJFRiAoc2hhcGVkLCBpKSwgSEJfU0hBUEVEX0NMVVNURVIp KQorCT4gWEZJWE5VTSAoY29udGV4dC0+cG9zaXRpb24pKQorICAgICAgeworCWdseXBoMSA9IGk7 CisJY2x1c3RlcjEgPSBYRklYTlVNIChBUkVGIChBUkVGIChzaGFwZWQsIGkpLCBIQl9TSEFQRURf Q0xVU1RFUikpOworCWNoYXIxID0gY2x1c3RlcjE7CisJYnJlYWs7CisgICAgICB9CisgIGludCBp ID0gWEZJWE5VTSAoY29udGV4dC0+cG9zaXRpb24pIC0gY2hhcjA7CisgIGlmIChydGwpCisgICAg aSA9IGNoYXIxIC0gY2hhcjAgLSAxIC0gaTsKKyAgTGlzcF9PYmplY3QgZ2x5cGhzID0gbWFrZV9u aWxfdmVjdG9yIChnbHlwaDEgLSBnbHlwaDApOworICBpbnQgeF9hZHZhbmNlID0gMDsKKyAgZm9y IChwdHJkaWZmX3QgaSA9IGdseXBoMDsgaSA8IGdseXBoMTsgaSsrKQorICAgIHsKKyAgICAgIExp c3BfT2JqZWN0IGdseXBoID0gbWFrZV9uaWxfdmVjdG9yIChIQl9HTFlQSF9MRU5HVEgpOworICAg ICAgQVNFVCAoZ2x5cGgsIEhCX0dMWVBIX0dMWVBILCBRZ2x5cGgpOworICAgICAgTGlzcF9PYmpl Y3QgY29kZSA9IEFSRUYgKEFSRUYgKHNoYXBlZCwgaSksIEhCX1NIQVBFRF9DT0RFKTsKKyAgICAg IC8qIFRoaXMgYXBwZWFycyB0byBiZSB0aGUgb25seSBzaWduIGZyb20gSGFyZkJ1enogdGhhdCBv dXIgZm9udAorCSBpcyBtaXNzaW5nIGEgZ2x5cGggLi4uICovCisgICAgICBpZiAoWEZJWE5VTSAo Y29kZSkgPT0gMCkKKwlyZXR1cm4gUW5pbDsKKyAgICAgIEFTRVQgKGdseXBoLCBIQl9HTFlQSF9D T0RFLCBBUkVGIChBUkVGIChzaGFwZWQsIGkpLCBIQl9TSEFQRURfQ09ERSkpOworICAgICAgQVNF VCAoZ2x5cGgsIEhCX0dMWVBIX1hfT0ZGLCBBUkVGIChBUkVGIChBUkVGIChzaGFwZWQsIGkpLCAy KSwgMikpOworICAgICAgQVNFVCAoZ2x5cGgsIEhCX0dMWVBIX1lfT0ZGLCBDQUxMTiAoRm1pbnVz LCBBUkVGIChBUkVGIChBUkVGIChzaGFwZWQsIGkpLCAyKSwgMykpKTsKKyAgICAgIEFTRVQgKGds eXBoLCBIQl9HTFlQSF9DT0RFUE9JTlQsIG1ha2VfZml4bnVtIChjKSk7CisgICAgICBBU0VUIChn bHlwaCwgSEJfR0xZUEhfWF9BRFZBTkNFLCBBUkVGIChBUkVGIChBUkVGIChzaGFwZWQsIGkpLCAy KSwgMCkpOworICAgICAgQVNFVCAoZ2x5cGhzLCBpIC0gZ2x5cGgwLCBnbHlwaCk7CisgICAgICB4 X2FkdmFuY2UgKz0gWEZJWE5VTSAoQVJFRiAoQVJFRiAoQVJFRiAoc2hhcGVkLCBpKSwgMiksIDAp KTsKKyAgICB9CisKKyAgY29kZSA9IG1ha2VfbmlsX3ZlY3RvciAoSEJfU0xJQ0VfTEVOR1RIKTsK KyAgQVNFVCAoY29kZSwgSEJfU0xJQ0VfU0xJQ0UsIFFzbGljZSk7CisgIEFTRVQgKGNvZGUsIEhC X1NMSUNFX0ksIG1ha2VfZml4bnVtIChpKSk7CisgIEFTRVQgKGNvZGUsIEhCX1NMSUNFX04sIG1h a2VfZml4bnVtIChjaGFyMSAtIGNoYXIwKSk7CisgIGludCB4MCA9IChjaGFyMSAtIGNoYXIwIC0g aSAtIDEpICogeF9hZHZhbmNlIC8gKGNoYXIxIC0gY2hhcjApOworICBpbnQgeDEgPSAoY2hhcjEg LSBjaGFyMCAtIGkpICogeF9hZHZhbmNlIC8gKGNoYXIxIC0gY2hhcjApOworICBBU0VUIChjb2Rl LCBIQl9TTElDRV9YX0FEVkFOQ0UsIG1ha2VfZml4bnVtICh4MSAtIHgwKSk7CisgIEFTRVQgKGNv ZGUsIEhCX1NMSUNFX1hfT0ZGU0VULCBtYWtlX2ZpeG51bSAoeF9hZHZhbmNlIC0geDEpKTsKKyAg QVNFVCAoY29kZSwgSEJfU0xJQ0VfR0xZUEhTLCBnbHlwaHMpOworCiAgIHJldHVybiBjb2RlOwog fQogCiBzdGF0aWMgdm9pZAogZnRjcmZvbnRfdGV4dF9leHRlbnRzIChzdHJ1Y3QgZm9udCAqZm9u dCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgKmNvZGUsCisgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IExpc3BfT2JqZWN0ICpjb2RlLAogICAgICAgICAgICAgICAg ICAgICAgICBpbnQgbmdseXBocywKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZvbnRf bWV0cmljcyAqbWV0cmljcykKIHsKLSAgaW50IHdpZHRoLCBpOworICBpbnQgd2lkdGggPSAwOwog CiAgIGJsb2NrX2lucHV0ICgpOwotICB3aWR0aCA9IGZ0Y3Jmb250X2dseXBoX2V4dGVudHMgKGZv bnQsIGNvZGVbMF0sIG1ldHJpY3MpOwotICBmb3IgKGkgPSAxOyBpIDwgbmdseXBoczsgaSsrKQor ICBpZiAobWV0cmljcykKICAgICB7Ci0gICAgICBzdHJ1Y3QgZm9udF9tZXRyaWNzIG07Ci0gICAg ICBpbnQgdyA9IGZ0Y3Jmb250X2dseXBoX2V4dGVudHMgKGZvbnQsIGNvZGVbaV0sIG1ldHJpY3Mg PyAmbSA6IE5VTEwpOwotCi0gICAgICBpZiAobWV0cmljcykKKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgbmdseXBoczsgaSsrKQogCXsKLQkgIGlmICh3aWR0aCArIG0ubGJlYXJpbmcgPCBtZXRy aWNzLT5sYmVhcmluZykKLQkgICAgbWV0cmljcy0+bGJlYXJpbmcgPSB3aWR0aCArIG0ubGJlYXJp bmc7Ci0JICBpZiAod2lkdGggKyBtLnJiZWFyaW5nID4gbWV0cmljcy0+cmJlYXJpbmcpCi0JICAg IG1ldHJpY3MtPnJiZWFyaW5nID0gd2lkdGggKyBtLnJiZWFyaW5nOwotCSAgaWYgKG0uYXNjZW50 ID4gbWV0cmljcy0+YXNjZW50KQotCSAgICBtZXRyaWNzLT5hc2NlbnQgPSBtLmFzY2VudDsKLQkg IGlmIChtLmRlc2NlbnQgPiBtZXRyaWNzLT5kZXNjZW50KQotCSAgICBtZXRyaWNzLT5kZXNjZW50 ID0gbS5kZXNjZW50OworCSAgaWYgKFZFQ1RPUlAgKGNvZGVbaV0pICYmIEVRIChBUkVGIChjb2Rl W2ldLCAwKSwgUXNsaWNlKSkKKwkgICAgeworCSAgICAgIGludCBzbGljZV9hc2NlbnQgPSAwOwor CSAgICAgIGludCBzbGljZV9kZXNjZW50ID0gMDsKKwkgICAgICBpbnQgc2xpY2VfbGJlYXJpbmcg PSAwOworCSAgICAgIGludCBzbGljZV9yYmVhcmluZyA9IDA7CisJICAgICAgaW50IHNsaWNlX2kg PSBYRklYTlVNIChBUkVGIChjb2RlW2ldLCBIQl9TTElDRV9JKSk7CisJICAgICAgaW50IHNsaWNl X24gPSBYRklYTlVNIChBUkVGIChjb2RlW2ldLCBIQl9TTElDRV9OKSk7CisJICAgICAgTGlzcF9P YmplY3QgZ2x5cGhzID0gQVJFRiAoY29kZVtpXSwgSEJfU0xJQ0VfR0xZUEhTKTsKKwkgICAgICBp bnQgc2xpY2Vfd2lkdGggPSAwOworCSAgICAgIGZvciAocHRyZGlmZl90IGdpID0gMDsgZ2kgPCBB U0laRSAoZ2x5cGhzKTsgZ2krKykKKwkJeworCQkgIExpc3BfT2JqZWN0IGdseXBoID0gQVJFRiAo Z2x5cGhzLCBnaSk7CisJCSAgc3RydWN0IGZvbnRfbWV0cmljcyBtOworCQkgIGZ0Y3Jmb250X2ds eXBoX2V4dGVudHMgKGZvbnQsIFhGSVhOVU0gKEFSRUYgKGdseXBoLCBIQl9HTFlQSF9DT0RFKSks ICZtKTsKKwkJICBpbnQgZ2x5cGhfbGJlYXJpbmcgPQorCQkgICAgc2xpY2Vfd2lkdGggKyBtLmxi ZWFyaW5nICsgWEZJWE5VTSAoQVJFRiAoZ2x5cGgsIEhCX0dMWVBIX1hfT0ZGKSk7CisJCSAgaW50 IGdseXBoX3JiZWFyaW5nID0KKwkJICAgIHNsaWNlX3dpZHRoICsgbS5yYmVhcmluZyArIFhGSVhO VU0gKEFSRUYgKGdseXBoLCBIQl9HTFlQSF9YX09GRikpOworCQkgIGludCBnbHlwaF9hc2NlbnQg PQorCQkgICAgbS5hc2NlbnQgKyBYRklYTlVNIChBUkVGIChnbHlwaCwgSEJfR0xZUEhfWV9PRkYp KTsgLy8gWFhYIC0/CisKKwkJICBpbnQgZ2x5cGhfZGVzY2VudCA9CisJCSAgICBtLmRlc2NlbnQg KyBYRklYTlVNIChBUkVGIChnbHlwaCwgSEJfR0xZUEhfWV9PRkYpKTsgLy8gWFhYIC0/CisKKwkJ ICBpZiAoZ2kgPT0gMCB8fCBnbHlwaF9sYmVhcmluZyA8IHNsaWNlX2xiZWFyaW5nKQorCQkgICAg c2xpY2VfbGJlYXJpbmcgPSBnbHlwaF9sYmVhcmluZzsKKwkJICBpZiAoZ2kgPT0gMCB8fCBnbHlw aF9yYmVhcmluZyA+IHNsaWNlX3JiZWFyaW5nKQorCQkgICAgc2xpY2VfcmJlYXJpbmcgPSBnbHlw aF9yYmVhcmluZzsKKwkJICBpZiAoZ2kgPT0gMCB8fCBnbHlwaF9hc2NlbnQgPiBzbGljZV9hc2Nl bnQpCisJCSAgICBzbGljZV9hc2NlbnQgPSBnbHlwaF9hc2NlbnQ7CisJCSAgaWYgKGdpID09IDAg fHwgZ2x5cGhfZGVzY2VudCA+IHNsaWNlX2Rlc2NlbnQpCisJCSAgICBzbGljZV9kZXNjZW50ID0g Z2x5cGhfZGVzY2VudDsKKworCQkgIHNsaWNlX3dpZHRoICs9IFhGSVhOVU0gKEFSRUYgKGdseXBo LCBIQl9HTFlQSF9YX0FEVkFOQ0UpKTsKKwkJfQorCisJICAgICAgc2xpY2Vfd2lkdGggPSBYRklY TlVNIChBUkVGIChjb2RlW2ldLCBIQl9TTElDRV9YX0FEVkFOQ0UpKTsKKwkgICAgICBpZiAoc2xp Y2VfaSA8IHNsaWNlX24gLSAxKQorCQlzbGljZV9yYmVhcmluZyA9IFhGSVhOVU0gKEFSRUYgKGNv ZGVbaV0sIEhCX1NMSUNFX1hfQURWQU5DRSkpCisJCSAgKyBYRklYTlVNIChBUkVGIChjb2RlW2ld LCBIQl9TTElDRV9YX09GRlNFVCkpOworCSAgICAgIGlmIChzbGljZV9pID4gMCkKKwkJc2xpY2Vf bGJlYXJpbmcgPSBYRklYTlVNIChBUkVGIChjb2RlW2ldLCBIQl9TTElDRV9YX09GRlNFVCkpOwor CisJICAgICAgaWYgKGkgPT0gMCB8fCBzbGljZV9sYmVhcmluZyA8IG1ldHJpY3MtPmxiZWFyaW5n KQorCQltZXRyaWNzLT5sYmVhcmluZyA9IHNsaWNlX2xiZWFyaW5nOworCSAgICAgIGlmIChpID09 IDAgfHwgc2xpY2VfcmJlYXJpbmcgPiBtZXRyaWNzLT5yYmVhcmluZykKKwkJbWV0cmljcy0+cmJl YXJpbmcgPSBzbGljZV9yYmVhcmluZzsKKwkgICAgICBpZiAoaSA9PSAwIHx8IHNsaWNlX2FzY2Vu dCA+IG1ldHJpY3MtPmFzY2VudCkKKwkJbWV0cmljcy0+YXNjZW50ID0gc2xpY2VfYXNjZW50Owor CSAgICAgIGlmIChpID09IDAgfHwgc2xpY2VfZGVzY2VudCA+IG1ldHJpY3MtPmRlc2NlbnQpCisJ CW1ldHJpY3MtPmRlc2NlbnQgPSBzbGljZV9kZXNjZW50OworCSAgICAgIHdpZHRoICs9IHNsaWNl X3dpZHRoOworCSAgICB9CisJICBlbHNlIGlmIChGSVhOVU1QIChjb2RlW2ldKSkKKwkgICAgewor CSAgICB9CiAJfQotICAgICAgd2lkdGggKz0gdzsKKyAgICAgIG1ldHJpY3MtPndpZHRoID0gd2lk dGg7CiAgICAgfQogICB1bmJsb2NrX2lucHV0ICgpOwotCi0gIGlmIChtZXRyaWNzKQotICAgIG1l dHJpY3MtPndpZHRoID0gd2lkdGg7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQ4Niw3ICs3NzUsNiBA QCBmdGNyZm9udF9kcmF3IChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzLAogICBzdHJ1Y3QgZmFjZSAq ZmFjZSA9IHMtPmZhY2U7CiAgIHN0cnVjdCBmb250X2luZm8gKmZ0Y3Jmb250X2luZm8gPSAoc3Ry dWN0IGZvbnRfaW5mbyAqKSBzLT5mb250OwogICBjYWlyb190ICpjcjsKLSAgY2Fpcm9fZ2x5cGhf dCAqZ2x5cGhzOwogICBpbnQgbGVuID0gdG8gLSBmcm9tOwogICBpbnQgaTsKIApAQCAtNTAyLDIw ICs3OTAsNTQgQEAgZnRjcmZvbnRfZHJhdyAoc3RydWN0IGdseXBoX3N0cmluZyAqcywKICAgICAg IGNhaXJvX2ZpbGwgKGNyKTsKICAgICB9CiAKLSAgZ2x5cGhzID0gYWxsb2NhIChzaXplb2YgKGNh aXJvX2dseXBoX3QpICogbGVuKTsKKyAgeF9zZXRfY3Jfc291cmNlX3dpdGhfZ2NfZm9yZWdyb3Vu ZCAoZiwgcy0+Z2MpOworICBjYWlyb19zZXRfc2NhbGVkX2ZvbnQgKGNyLCBmdGNyZm9udF9pbmZv LT5jcl9zY2FsZWRfZm9udCk7CiAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICB7Ci0g ICAgICBnbHlwaHNbaV0uaW5kZXggPSBzLT5jaGFyMmJbZnJvbSArIGldOwotICAgICAgZ2x5cGhz W2ldLnggPSB4OwotICAgICAgZ2x5cGhzW2ldLnkgPSB5OwotICAgICAgeCArPSAocy0+cGFkZGlu Z19wID8gMSA6IGZ0Y3Jmb250X2dseXBoX2V4dGVudHMgKHMtPmZvbnQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzW2ldLmluZGV4 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwpKTsKKyAgICAgIExpc3BfT2JqZWN0IGNvZGUgPSBzLT5jaGFyMmJbZnJvbSArIGldOwor ICAgICAgaWYgKFZFQ1RPUlAgKGNvZGUpKQorCXsKKwkgIGlmIChFUSAoQVJFRiAoY29kZSwgMCks IFFzbGljZSkpCisJICAgIHsKKwkgICAgICBpbnQgeHRtcCA9IHg7CisJICAgICAgY2Fpcm9fc2F2 ZSAoY3IpOworCSAgICAgIHN0cnVjdCBmb250X21ldHJpY3MgbWV0cmljczsKKwkgICAgICBmdGNy Zm9udF90ZXh0X2V4dGVudHMgKHMtPmZvbnQsICZjb2RlLCAxLCAmbWV0cmljcyk7CisJICAgICAg ZG91YmxlIHgwID0geCArIG1ldHJpY3MubGJlYXJpbmcgLSBYRklYTlVNIChBUkVGIChjb2RlLCBI Ql9TTElDRV9YX09GRlNFVCkpOworCSAgICAgIGRvdWJsZSB4MSA9IHggKyBtZXRyaWNzLnJiZWFy aW5nIC0gWEZJWE5VTSAoQVJFRiAoY29kZSwgSEJfU0xJQ0VfWF9PRkZTRVQpKTsKKwkgICAgICBk b3VibGUgeTAgPSB5IC0gbWV0cmljcy5hc2NlbnQ7CisJICAgICAgZG91YmxlIHkxID0geSArIG1l dHJpY3MuZGVzY2VudDsKKwkgICAgICB4MC0tOyB5MC0tOyB4MSsrOyB5MSsrOyAvKiBGSVhNRSAq LworCSAgICAgIGNhaXJvX3JlY3RhbmdsZSAoY3IsIHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7 CisJICAgICAgY2Fpcm9fY2xpcCAoY3IpOworCisJICAgICAgTGlzcF9PYmplY3QgZ2x5cGhzID0g QVJFRiAoY29kZSwgSEJfU0xJQ0VfR0xZUEhTKTsKKwkgICAgICBmb3IgKHB0cmRpZmZfdCBnaSA9 IDA7IGdpIDwgQVNJWkUgKGdseXBocyk7IGdpKyspCisJCXsKKwkJICBMaXNwX09iamVjdCBnbHlw aCA9IEFSRUYgKGdseXBocywgZ2kpOworCQkgIGNhaXJvX2dseXBoX3QgY2dseXBoOworCQkgIGNn bHlwaC5pbmRleCA9IFhGSVhOVU0gKEFSRUYgKGdseXBoLCBIQl9HTFlQSF9DT0RFKSk7CisJCSAg Y2dseXBoLnggPSB4ICsgWEZJWE5VTSAoQVJFRiAoZ2x5cGgsIEhCX0dMWVBIX1hfT0ZGKSk7CisJ CSAgY2dseXBoLnkgPSB5ICsgWEZJWE5VTSAoQVJFRiAoZ2x5cGgsIEhCX0dMWVBIX1lfT0ZGKSk7 CisJCSAgY2dseXBoLnggLT0gWEZJWE5VTSAoQVJFRiAoY29kZSwgSEJfU0xJQ0VfWF9PRkZTRVQp KTsKKwkJICB4ICs9IFhGSVhOVU0gKEFSRUYgKGdseXBoLCBIQl9HTFlQSF9YX0FEVkFOQ0UpKTsK KwkJICBjYWlyb19zaG93X2dseXBocyAoY3IsICZjZ2x5cGgsIDEpOworCQl9CisJICAgICAgY2Fp cm9fcmVzdG9yZSAoY3IpOworCSAgICAgIHggPSB4dG1wICsgWEZJWE5VTSAoQVJFRiAoY29kZSwg SEJfU0xJQ0VfWF9BRFZBTkNFKSk7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChGSVhOVU1Q IChjb2RlKSkKKwl7CisJICBjYWlyb19nbHlwaF90IGNnbHlwaDsKKwkgIGNnbHlwaC5pbmRleCA9 IFhGSVhOVU0gKGNvZGUpOworCSAgY2dseXBoLnggPSB4OworCSAgY2dseXBoLnkgPSB5OworCSAg eCArPSAocy0+cGFkZGluZ19wID8gMCA6IDApOworCSAgY2Fpcm9fc2hvd19nbHlwaHMgKGNyLCAm Y2dseXBoLCAxKTsKKwl9CiAgICAgfQogCi0gIHhfc2V0X2NyX3NvdXJjZV93aXRoX2djX2ZvcmVn cm91bmQgKGYsIHMtPmdjKTsKLSAgY2Fpcm9fc2V0X3NjYWxlZF9mb250IChjciwgZnRjcmZvbnRf aW5mby0+Y3Jfc2NhbGVkX2ZvbnQpOwotICBjYWlyb19zaG93X2dseXBocyAoY3IsIGdseXBocywg bGVuKTsKIAogICB4X2VuZF9jcl9jbGlwIChmKTsKIApAQCAtNTgzLDYgKzkwNSw3IEBAIGZ0Y3Jo YmZvbnRfZW5kX2hiX2ZvbnQgKHN0cnVjdCBmb250ICpmb250LCBoYl9mb250X3QgKmhiX2ZvbnQp CiAgIC5kcmF3ID0gZnRjcmZvbnRfZHJhdywKICAgLmdldF9iaXRtYXAgPSBmdGNyZm9udF9nZXRf Yml0bWFwLAogICAuYW5jaG9yX3BvaW50ID0gZnRjcmZvbnRfYW5jaG9yX3BvaW50LAorICAuZ3Vl c3Nfc2NyaXB0ID0gZnRjcmZvbnRfZ3Vlc3Nfc2NyaXB0LAogI2lmZGVmIEhBVkVfTElCT1RGCiAg IC5vdGZfY2FwYWJpbGl0eSA9IGZ0Y3Jmb250X290Zl9jYXBhYmlsaXR5LAogI2VuZGlmCmRpZmYg LS1naXQgYS9zcmMvaGJmb250LmMgYi9zcmMvaGJmb250LmMKaW5kZXggNTc2YzVmZTdmNi4uYTg2 M2QwMzc1ZSAxMDA2NDQKLS0tIGEvc3JjL2hiZm9udC5jCisrKyBiL3NyYy9oYmZvbnQuYwpAQCAt NTc3LDcgKzU3Nyw3IEBAIGhiZm9udF9zaGFwZSAoTGlzcF9PYmplY3QgbGdzdHJpbmcsIExpc3Bf T2JqZWN0IGRpcmVjdGlvbikKICAgICAgIExHTFlQSF9TRVRfQ0hBUiAobGdseXBoLCBjaGFyc1tj aGFyX2lkeF0pOwogICAgICAgTEdMWVBIX1NFVF9DT0RFIChsZ2x5cGgsIGluZm9baV0uY29kZXBv aW50KTsKIAotICAgICAgdW5zaWduZWQgY29kZSA9IGluZm9baV0uY29kZXBvaW50OworICAgICAg TGlzcF9PYmplY3QgY29kZSA9IG1ha2VfZml4bnVtIChpbmZvW2ldLmNvZGVwb2ludCk7CiAgICAg ICBmb250LT5kcml2ZXItPnRleHRfZXh0ZW50cyAoZm9udCwgJmNvZGUsIDEsICZtZXRyaWNzKTsK ICAgICAgIExHTFlQSF9TRVRfV0lEVEggKGxnbHlwaCwgbWV0cmljcy53aWR0aCk7CiAgICAgICBM R0xZUEhfU0VUX0xCRUFSSU5HIChsZ2x5cGgsIG1ldHJpY3MubGJlYXJpbmcpOwpkaWZmIC0tZ2l0 IGEvc3JjL2xpc3AuaCBiL3NyYy9saXNwLmgKaW5kZXggMzQ0MjY5OTA4OC4uYTcwMmYyN2Q2ZCAx MDA2NDQKLS0tIGEvc3JjL2xpc3AuaAorKysgYi9zcmMvbGlzcC5oCkBAIC0xMDk4LDYgKzEwOTgs NyBAQCBERUZJTkVfR0RCX1NZTUJPTF9FTkQgKFBTRVVET1ZFQ1RPUl9GTEFHKQogICBQVkVDX01V VEVYLAogICBQVkVDX0NPTkRWQVIsCiAgIFBWRUNfTU9EVUxFX0ZVTkNUSU9OLAorICBQVkVDX0dM WVBIX0NPTlRFWFQsCiAKICAgLyogVGhlc2Ugc2hvdWxkIGJlIGxhc3QsIGZvciBpbnRlcm5hbF9l cXVhbCBhbmQgc3hoYXNoX29iai4gICovCiAgIFBWRUNfQ09NUElMRUQsCmRpZmYgLS1naXQgYS9z cmMveGRpc3AuYyBiL3NyYy94ZGlzcC5jCmluZGV4IGRiMGVjNjgzMTUuLjlhOWFiNWRiOTMgMTAw NjQ0Ci0tLSBhL3NyYy94ZGlzcC5jCisrKyBiL3NyYy94ZGlzcC5jCkBAIC00MzksNiArNDM5LDcg QEAgQ29weXJpZ2h0IChDKSAxOTg1LTE5ODgsIDE5OTMtMTk5NSwgMTk5Ny0yMDIwIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwKICNpbmNsdWRlICJsaXNwLmgiCiAjaW5jbHVkZSAiYXRpbWVyLmgi CiAjaW5jbHVkZSAiY29tcG9zaXRlLmgiCisjaW5jbHVkZSAiY2F0ZWdvcnkuaCIKICNpbmNsdWRl ICJrZXlib2FyZC5oIgogI2luY2x1ZGUgInN5c3N0ZGlvLmgiCiAjaW5jbHVkZSAic3lzdGltZS5o IgpAQCAtMTA0Niw3ICsxMDQ3LDcgQEAgI2RlZmluZSBUSElOX1NQQUNFX1dJRFRIIDEKIHN0YXRp YyBib29sIGdldF9vdmVybGF5X3N0cmluZ3NfMSAoc3RydWN0IGl0ICosIHB0cmRpZmZfdCwgYm9v bCk7CiBzdGF0aWMgdm9pZCBuZXh0X292ZXJsYXlfc3RyaW5nIChzdHJ1Y3QgaXQgKik7CiBzdGF0 aWMgdm9pZCByZXNlYXQgKHN0cnVjdCBpdCAqLCBzdHJ1Y3QgdGV4dF9wb3MsIGJvb2wpOwotc3Rh dGljIHZvaWQgcmVzZWF0XzEgKHN0cnVjdCBpdCAqLCBzdHJ1Y3QgdGV4dF9wb3MsIGJvb2wpOwor c3RhdGljIHZvaWQgcmVzZWF0XzEgKHN0cnVjdCBpdCAqLCBzdHJ1Y3QgdGV4dF9wb3MsIGJvb2ws IGJvb2wpOwogc3RhdGljIGJvb2wgbmV4dF9lbGVtZW50X2Zyb21fZGlzcGxheV92ZWN0b3IgKHN0 cnVjdCBpdCAqKTsKIHN0YXRpYyBib29sIG5leHRfZWxlbWVudF9mcm9tX3N0cmluZyAoc3RydWN0 IGl0ICopOwogc3RhdGljIGJvb2wgbmV4dF9lbGVtZW50X2Zyb21fY19zdHJpbmcgKHN0cnVjdCBp dCAqKTsKQEAgLTQ4NjAsNyArNDg2MSw3IEBAIGhhbmRsZV9pbnZpc2libGVfcHJvcCAoc3RydWN0 IGl0ICppdCkKIAkJICBiaWRpX2Rpcl90IHBkaXIgPSBpdC0+YmlkaV9pdC5wYXJhZ3JhcGhfZGly OwogCiAJCSAgU0VUX1RFWFRfUE9TICh0cG9zLCBuZXdwb3MsIGJwb3MpOwotCQkgIHJlc2VhdF8x IChpdCwgdHBvcywgZmFsc2UpOworCQkgIHJlc2VhdF8xIChpdCwgdHBvcywgZmFsc2UsIGZhbHNl KTsKIAkJICAvKiBJZiB3ZSByZXNlYXQgb24gYSBuZXdsaW5lL1pWLCB3ZSBuZWVkIHRvIHByZXAg dGhlCiAJCSAgICAgYmlkaSBpdGVyYXRvciBmb3IgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IGNoYXJh Y3RlcgogCQkgICAgIGFmdGVyIHRoZSBuZXdsaW5lL0VPQiwga2VlcGluZyB0aGUgY3VycmVudCBw YXJhZ3JhcGgKQEAgLTY5NzksNyArNjk4MCw3IEBAIHJlc2VhdCAoc3RydWN0IGl0ICppdCwgc3Ry dWN0IHRleHRfcG9zIHBvcywgYm9vbCBmb3JjZV9wKQogewogICBwdHJkaWZmX3Qgb3JpZ2luYWxf cG9zID0gSVRfQ0hBUlBPUyAoKml0KTsKIAotICByZXNlYXRfMSAoaXQsIHBvcywgZmFsc2UpOwor ICByZXNlYXRfMSAoaXQsIHBvcywgZmFsc2UsIGZhbHNlKTsKIAogICAvKiBEZXRlcm1pbmUgd2hl cmUgdG8gY2hlY2sgdGV4dCBwcm9wZXJ0aWVzLiAgQXZvaWQgZG9pbmcgaXQKICAgICAgd2hlcmUg cG9zc2libGUgYmVjYXVzZSB0ZXh0IHByb3BlcnR5IGxvb2t1cCBpcyB2ZXJ5IGV4cGVuc2l2ZS4g ICovCkBAIC03MDIxLDcgKzcwMjIsNyBAQCByZXNlYXQgKHN0cnVjdCBpdCAqaXQsIHN0cnVjdCB0 ZXh0X3BvcyBwb3MsIGJvb2wgZm9yY2VfcCkKICAgIElULT5zdG9wX3BvcyB0byBQT1MsIGFsc28u ICAqLwogCiBzdGF0aWMgdm9pZAotcmVzZWF0XzEgKHN0cnVjdCBpdCAqaXQsIHN0cnVjdCB0ZXh0 X3BvcyBwb3MsIGJvb2wgc2V0X3N0b3BfcCkKK3Jlc2VhdF8xIChzdHJ1Y3QgaXQgKml0LCBzdHJ1 Y3QgdGV4dF9wb3MgcG9zLCBib29sIHNldF9zdG9wX3AsIGJvb2wgcHJlc2VydmVfaGlzdG9yeSkK IHsKICAgLyogRG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gc2Nhbm5pbmcgYSBDIHN0cmlu Zy4gICovCiAgIGVhc3NlcnQgKGl0LT5zID09IE5VTEwpOwpAQCAtNzA0MSw2ICs3MDQyLDEwIEBA IHJlc2VhdF8xIChzdHJ1Y3QgaXQgKml0LCBzdHJ1Y3QgdGV4dF9wb3MgcG9zLCBib29sIHNldF9z dG9wX3ApCiAgIGl0LT5vYmplY3QgPSBpdC0+dy0+Y29udGVudHM7CiAgIGl0LT5hcmVhID0gVEVY VF9BUkVBOwogICBpdC0+bXVsdGlieXRlX3AgPSAhTklMUCAoQlZBUiAoY3VycmVudF9idWZmZXIs IGVuYWJsZV9tdWx0aWJ5dGVfY2hhcmFjdGVycykpOworICBtZW1zZXQgKCZpdC0+Y29udGV4dF9j YWNoZSwgMCwgc2l6ZW9mIGl0LT5jb250ZXh0X2NhY2hlKTsKKyAgaWYgKCFwcmVzZXJ2ZV9oaXN0 b3J5KQorICAgIG1lbXNldCAoJml0LT5oaXN0b3J5LCAwLCBzaXplb2YgaXQtPmhpc3RvcnkpOwor CiAgIGl0LT5zcCA9IDA7CiAgIGl0LT5zdHJpbmdfZnJvbV9kaXNwbGF5X3Byb3BfcCA9IGZhbHNl OwogICBpdC0+c3RyaW5nX2Zyb21fcHJlZml4X3Byb3BfcCA9IGZhbHNlOwpAQCAtNzgzNCw2ICs3 ODM5LDIyIEBAIGdldF9uZXh0X2Rpc3BsYXlfZWxlbWVudCAoc3RydWN0IGl0ICppdCkKIHZvaWQK IHNldF9pdGVyYXRvcl90b19uZXh0IChzdHJ1Y3QgaXQgKml0LCBib29sIHJlc2VhdF9wKQogewor ICBpZiAoaXQtPndoYXQgPT0gSVRfQ0hBUkFDVEVSCisgICAgICAmJiBpdC0+bWV0aG9kICE9IEdF VF9GUk9NX0RJU1BMQVlfVkVDVE9SKQorICAgIHsKKyAgICAgIGludCBjID0gaXQtPmNoYXJfdG9f ZGlzcGxheTsKKyAgICAgIGlmIChpdC0+aGlzdG9yeS5sZW4gPj0gSVRfSElTVE9SWV9TSVpFKQor CXsKKwkgIGl0LT5oaXN0b3J5LmxlbiA9IElUX0hJU1RPUllfU0laRSAtIDE7CisJICBtZW1tb3Zl IChpdC0+aGlzdG9yeS5jLCBpdC0+aGlzdG9yeS5jICsgMSwgaXQtPmhpc3RvcnkubGVuICogc2l6 ZW9mIChpdC0+aGlzdG9yeS5jWzBdKSk7CisJfQorICAgICAgaXQtPmhpc3RvcnkuY1tpdC0+aGlz dG9yeS5sZW4rK10gPSBjOworICAgICAgaXQtPmNvbnRleHRfY2FjaGUubmV4dF90cmFuc2l0aW9u IC09CisJaXQtPmNvbnRleHRfY2FjaGUubmV4dF90cmFuc2l0aW9uID49IDA7CisgICAgICBpdC0+ Y29udGV4dF9jYWNoZS5hZ2UrKzsKKyAgICB9CisgIGVsc2UKKyAgICBpdC0+aGlzdG9yeS5sZW4g PSAwOwogCiAgIHN3aXRjaCAoaXQtPm1ldGhvZCkKICAgICB7CkBAIC04NjU2LDcgKzg2NzcsNyBA QCBjb21wdXRlX3N0b3BfcG9zX2JhY2t3YXJkcyAoc3RydWN0IGl0ICppdCkKICAgICAgIGl0LT5l bmRfY2hhcnBvcyA9IG1pbiAoY2hhcnBvcyArIDEsIFpWKTsKICAgICAgIGNoYXJwb3MgPSBtYXgg KGNoYXJwb3MgLSBTQ0FOX0JBQ0tfTElNSVQsIEJFR1YpOwogICAgICAgU0VUX1RFWFRfUE9TIChw b3MsIGNoYXJwb3MsIENIQVJfVE9fQllURSAoY2hhcnBvcykpOwotICAgICAgcmVzZWF0XzEgKGl0 LCBwb3MsIGZhbHNlKTsKKyAgICAgIHJlc2VhdF8xIChpdCwgcG9zLCBmYWxzZSwgdHJ1ZSk7CiAg ICAgICBjb21wdXRlX3N0b3BfcG9zIChpdCk7CiAgICAgICAvKiBXZSBtdXN0IGFkdmFuY2UgZm9y d2FyZCwgcmlnaHQ/ICAqLwogICAgICAgaWYgKGl0LT5zdG9wX2NoYXJwb3MgPD0gY2hhcnBvcykK QEAgLTg3MDIsNyArODcyMyw3IEBAIGhhbmRsZV9zdG9wX2JhY2t3YXJkcyAoc3RydWN0IGl0ICpp dCwgcHRyZGlmZl90IGNoYXJwb3MpCiAgICAgICBpZiAoYnVmcCkKIAl7CiAJICBTRVRfVEVYVF9Q T1MgKHBvczEsIGNoYXJwb3MsIENIQVJfVE9fQllURSAoY2hhcnBvcykpOwotCSAgcmVzZWF0XzEg KGl0LCBwb3MxLCBmYWxzZSk7CisJICByZXNlYXRfMSAoaXQsIHBvczEsIGZhbHNlLCB0cnVlKTsK IAl9CiAgICAgICBlbHNlCiAJaXQtPmN1cnJlbnQuc3RyaW5nX3BvcyA9IHN0cmluZ19wb3MgKGNo YXJwb3MsIGl0LT5zdHJpbmcpOwpAQCAtMTAwODksNyArMTAxMTAsNyBAQCBtb3ZlX2l0X3ZlcnRp Y2FsbHlfYmFja3dhcmQgKHN0cnVjdCBpdCAqaXQsIGludCBkeSkKICAgICAgcmVzZWF0IHRvIHNr aXAgZm9yd2FyZCBvdmVyIGludmlzaWJsZSB0ZXh0LCBzZXQgdXAgdGhlIGl0ZXJhdG9yCiAgICAg IHRvIGRlbGl2ZXIgZnJvbSBvdmVybGF5IHN0cmluZ3MgYXQgdGhlIG5ldyBwb3NpdGlvbiBldGMu ICBTbywKICAgICAgdXNlIHJlc2VhdF8xIGhlcmUuICAqLwotICByZXNlYXRfMSAoaXQsIGl0LT5j dXJyZW50LnBvcywgdHJ1ZSk7CisgIHJlc2VhdF8xIChpdCwgaXQtPmN1cnJlbnQucG9zLCB0cnVl LCBmYWxzZSk7CiAKICAgLyogV2UgYXJlIG5vdyBzdXJlbHkgYXQgYSBsaW5lIHN0YXJ0LiAgKi8K ICAgaXQtPmN1cnJlbnRfeCA9IGl0LT5ocG9zID0gMDsJLyogRklYTUU6IHRoaXMgaXMgaW5jb3Jy ZWN0IHdoZW4gYmlkaQpAQCAtMTAzOTksNyArMTA0MjAsNyBAQCBtb3ZlX2l0X2J5X2xpbmVzIChz dHJ1Y3QgaXQgKml0LCBwdHJkaWZmX3QgZHZwb3MpCiAJICAgICAgYmFja190b19wcmV2aW91c192 aXNpYmxlX2xpbmVfc3RhcnQgKGl0KTsKIAkgICAgICBpdC0+dnBvcy0tOwogCSAgICB9Ci0JICBy ZXNlYXRfMSAoaXQsIGl0LT5jdXJyZW50LnBvcywgdHJ1ZSk7CisJICByZXNlYXRfMSAoaXQsIGl0 LT5jdXJyZW50LnBvcywgdHJ1ZSwgZmFsc2UpOwogCX0KICAgICAgIGVsc2UKIAlSRVNUT1JFX0lU IChpdCwgaXQsIGl0MmRhdGEpOwpAQCAtMTQ5MzAsMTMgKzE0OTUxLDEzIEBAIHRleHRfb3V0c2lk ZV9saW5lX3VuY2hhbmdlZF9wIChzdHJ1Y3Qgd2luZG93ICp3LAogICBpZiAod2luZG93X291dGRh dGVkICh3KSkKICAgICB7CiAgICAgICAvKiBHYXAgaW4gdGhlIGxpbmU/ICAqLwotICAgICAgaWYg KEdQVCA8IHN0YXJ0IHx8IFogLSBHUFQgPCBlbmQpCisgICAgICBpZiAoR1BUIC0gSVRfSElTVE9S WV9TSVpFIDwgc3RhcnQgfHwgWiAtIEdQVCAtIElUX0hJU1RPUllfU0laRSA8IGVuZCkKIAl1bmNo YW5nZWRfcCA9IGZhbHNlOwogCiAgICAgICAvKiBDaGFuZ2VzIHN0YXJ0IGluIGZyb250IG9mIHRo ZSBsaW5lLCBvciBlbmQgYWZ0ZXIgaXQ/ICAqLwogICAgICAgaWYgKHVuY2hhbmdlZF9wCi0JICAm JiAoQkVHX1VOQ0hBTkdFRCA8IHN0YXJ0IC0gMQotCSAgICAgIHx8IEVORF9VTkNIQU5HRUQgPCBl bmQpKQorCSAgJiYgKEJFR19VTkNIQU5HRUQgLSBJVF9ISVNUT1JZX1NJWkUgPCBzdGFydCAtIDEK KwkgICAgICB8fCBFTkRfVU5DSEFOR0VEIC0gSVRfSElTVE9SWV9TSVpFIDwgZW5kKSkKIAl1bmNo YW5nZWRfcCA9IGZhbHNlOwogCiAgICAgICAvKiBJZiBzZWxlY3RpdmUgZGlzcGxheSwgY2FuJ3Qg b3B0aW1pemUgaWYgY2hhbmdlcyBzdGFydCBhdCB0aGUKQEAgLTE0OTQ0LDcgKzE0OTY1LDggQEAg dGV4dF9vdXRzaWRlX2xpbmVfdW5jaGFuZ2VkX3AgKHN0cnVjdCB3aW5kb3cgKncsCiAgICAgICBp ZiAodW5jaGFuZ2VkX3AKIAkgICYmIEZJWE5VTVAgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBzZWxl Y3RpdmVfZGlzcGxheSkpCiAJICAmJiBYRklYTlVNIChCVkFSIChjdXJyZW50X2J1ZmZlciwgc2Vs ZWN0aXZlX2Rpc3BsYXkpKSA+IDAKLQkgICYmIChCRUdfVU5DSEFOR0VEIDwgc3RhcnQgfHwgR1BU IDw9IHN0YXJ0KSkKKwkgICYmIChCRUdfVU5DSEFOR0VEIC0gSVRfSElTVE9SWV9TSVpFIDwgc3Rh cnQKKwkgICAgICB8fCBHUFQgLSBJVF9ISVNUT1JZX1NJWkUgPD0gc3RhcnQpKQogCXVuY2hhbmdl ZF9wID0gZmFsc2U7CiAKICAgICAgIC8qIElmIHRoZXJlIGFyZSBvdmVybGF5cyBhdCB0aGUgc3Rh cnQgb3IgZW5kIG9mIHRoZSBsaW5lLCB0aGVzZQpAQCAtMTU1MTQsNyArMTU1MzYsNyBAQCAjZGVm aW5lIEFJTkMoYSxpKQkJCQkJCQlcCiAgICAgICAmJiBDSEFSUE9TICh0bGJ1ZnBvcykgPiAwCiAg ICAgICAmJiAhdy0+dXBkYXRlX21vZGVfbGluZQogICAgICAgJiYgIWN1cnJlbnRfYnVmZmVyLT5j bGlwX2NoYW5nZWQKLSAgICAgICYmICFjdXJyZW50X2J1ZmZlci0+cHJldmVudF9yZWRpc3BsYXlf b3B0aW1pemF0aW9uc19wCisgICAgICAmJiBmYWxzZQogICAgICAgJiYgRlJBTUVfVklTSUJMRV9Q IChYRlJBTUUgKHctPmZyYW1lKSkKICAgICAgICYmICFGUkFNRV9PQlNDVVJFRF9QIChYRlJBTUUg KHctPmZyYW1lKSkKICAgICAgICYmICFYRlJBTUUgKHctPmZyYW1lKS0+Y3Vyc29yX3R5cGVfY2hh bmdlZApAQCAtMTc0MDIsNyArMTc0MjQsNyBAQCB0cnlfc2Nyb2xsaW5nIChMaXNwX09iamVjdCB3 aW5kb3csIGJvb2wganVzdF90aGlzX29uZV9wLAogICAgICAgLyogTWF5YmUgZm9yZ2V0IHJlY29y ZGVkIGJhc2UgbGluZSBmb3IgbGluZSBudW1iZXIgZGlzcGxheS4gICovCiAgICAgICBpZiAoIWp1 c3RfdGhpc19vbmVfcAogCSAgfHwgY3VycmVudF9idWZmZXItPmNsaXBfY2hhbmdlZAotCSAgfHwg QkVHX1VOQ0hBTkdFRCA8IENIQVJQT1MgKHN0YXJ0cCkpCisJICB8fCBCRUdfVU5DSEFOR0VEIC0g SVRfSElTVE9SWV9TSVpFIDwgQ0hBUlBPUyAoc3RhcnRwKSkKIAl3LT5iYXNlX2xpbmVfbnVtYmVy ID0gMDsKIAogICAgICAgLyogSWYgY3Vyc29yIGVuZHMgdXAgb24gYSBwYXJ0aWFsbHkgdmlzaWJs ZSBsaW5lLApAQCAtMTgxMTAsNyArMTgxMzIsNyBAQCByZWRpc3BsYXlfd2luZG93IChMaXNwX09i amVjdCB3aW5kb3csIGJvb2wganVzdF90aGlzX29uZV9wKQogICB1cGRhdGVfbW9kZV9saW5lID0g KHctPnVwZGF0ZV9tb2RlX2xpbmUKIAkJICAgICAgfHwgdXBkYXRlX21vZGVfbGluZXMKIAkJICAg ICAgfHwgYnVmZmVyLT5jbGlwX2NoYW5nZWQKLQkJICAgICAgfHwgYnVmZmVyLT5wcmV2ZW50X3Jl ZGlzcGxheV9vcHRpbWl6YXRpb25zX3ApOworCQkgICAgICB8fCB0cnVlKTsKIAogICBpZiAoIWp1 c3RfdGhpc19vbmVfcCkKICAgICAvKiBJZiBganVzdF90aGlzX29uZV9wJyBpcyBzZXQsIHdlIGFw cGFyZW50bHkgc2V0IG11c3RfYmVfdXBkYXRlZF9wIG1vcmUKQEAgLTE4MTYzLDEyICsxODE4NSwx MiBAQCByZWRpc3BsYXlfd2luZG93IChMaXNwX09iamVjdCB3aW5kb3csIGJvb2wganVzdF90aGlz X29uZV9wKQogICBjdXJyZW50X21hdHJpeF91cF90b19kYXRlX3AKICAgICA9ICh3LT53aW5kb3df ZW5kX3ZhbGlkCiAgICAgICAgJiYgIWN1cnJlbnRfYnVmZmVyLT5jbGlwX2NoYW5nZWQKLSAgICAg ICAmJiAhY3VycmVudF9idWZmZXItPnByZXZlbnRfcmVkaXNwbGF5X29wdGltaXphdGlvbnNfcAor ICAgICAgICYmIGZhbHNlCiAgICAgICAgJiYgIXdpbmRvd19vdXRkYXRlZCAodykKICAgICAgICAm JiAhaHNjcm9sbGluZ19jdXJyZW50X2xpbmVfcCAodykpOwogCi0gIGJlZ191bmNoYW5nZWQgPSBC RUdfVU5DSEFOR0VEOwotICBlbmRfdW5jaGFuZ2VkID0gRU5EX1VOQ0hBTkdFRDsKKyAgYmVnX3Vu Y2hhbmdlZCA9IG1heCAoQkVHX1VOQ0hBTkdFRCAtIElUX0hJU1RPUllfU0laRSwgMCk7CisgIGVu ZF91bmNoYW5nZWQgPSBtYXggKEVORF9VTkNIQU5HRUQgLSBJVF9ISVNUT1JZX1NJWkUsIDApOwog CiAgIFNFVF9URVhUX1BPUyAob3BvaW50LCBQVCwgUFRfQllURSk7CiAKQEAgLTIwMTA0LDcgKzIw MTI2LDcgQEAgI2RlZmluZSBHSVZFX1VQKFgpIHJldHVybiAwCiAgICAgIEl0IHdvdWxkIGJlIG5p Y2UgdG8gZnVydGhlcgogICAgICByZWR1Y2UgdGhlIG51bWJlciBvZiBjYXNlcyB3aGVyZSB0aGlz IHByZXZlbnRzIHRyeV93aW5kb3dfaWQuICAqLwogICBpZiAoY3VycmVudF9idWZmZXItPmNsaXBf Y2hhbmdlZAotICAgICAgfHwgY3VycmVudF9idWZmZXItPnByZXZlbnRfcmVkaXNwbGF5X29wdGlt aXphdGlvbnNfcCkKKyAgICAgIHx8IHRydWUpCiAgICAgR0lWRV9VUCAoMyk7CiAKICAgLyogV2lu ZG93IG11c3QgZWl0aGVyIHVzZSB3aW5kb3ctYmFzZWQgcmVkaXNwbGF5IG9yIGJlIGZ1bGwgd2lk dGguICAqLwpAQCAtMjAxODcsOCArMjAyMDksMTIgQEAgI2RlZmluZSBHSVZFX1VQKFgpIHJldHVy biAwCiAgICAgfQogCiAgIC8qIFRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgY2hh cmFjdGVyIHRoYXQgaGFzIGJlZW4gY2hhbmdlZC4gICovCi0gIGZpcnN0X2NoYW5nZWRfY2hhcnBv cyA9IEJFRyArIEJFR19VTkNIQU5HRUQ7Ci0gIGxhc3RfY2hhbmdlZF9jaGFycG9zICA9IFogLSBF TkRfVU5DSEFOR0VEOworICBmaXJzdF9jaGFuZ2VkX2NoYXJwb3MgPSBCRUcgKyBCRUdfVU5DSEFO R0VEIC0gSVRfSElTVE9SWV9TSVpFOworICBsYXN0X2NoYW5nZWRfY2hhcnBvcyAgPSBaIC0gRU5E X1VOQ0hBTkdFRCArIElUX0hJU1RPUllfU0laRTsKKyAgaWYgKGZpcnN0X2NoYW5nZWRfY2hhcnBv cyA8IEJFRykKKyAgICBmaXJzdF9jaGFuZ2VkX2NoYXJwb3MgPSBCRUc7CisgIGlmIChsYXN0X2No YW5nZWRfY2hhcnBvcyA+IFopCisgICAgbGFzdF9jaGFuZ2VkX2NoYXJwb3MgPSBaOwogCiAgIC8q IElmIHdpbmRvdyBzdGFydHMgYWZ0ZXIgYSBsaW5lIGVuZCwgYW5kIHRoZSBsYXN0IGNoYW5nZSBp cyBpbgogICAgICBmcm9udCBvZiB0aGF0IG5ld2xpbmUsIHRoZW4gY2hhbmdlcyBkb24ndCBhZmZl Y3QgdGhlIGRpc3BsYXkuCkBAIC0yNDI2NCw3ICsyNDI5MCw3IEBAICNkZWZpbmUgUk9XX0dMWVBI X05FV0xJTkVfUChST1csR0xZUEgpCQlcCiAgICAgICAmJiAhd2luZG93c19vcl9idWZmZXJzX2No YW5nZWQKICAgICAgICYmIGIKICAgICAgICYmICFiLT5jbGlwX2NoYW5nZWQKLSAgICAgICYmICFi LT5wcmV2ZW50X3JlZGlzcGxheV9vcHRpbWl6YXRpb25zX3AKKyAgICAgICYmIGZhbHNlCiAgICAg ICAmJiAhd2luZG93X291dGRhdGVkICh3KQogICAgICAgLyogV2UgcmVseSBiZWxvdyBvbiB0aGUg Y3Vyc29yIGNvb3JkaW5hdGVzIHRvIGJlIHVwIHRvIGRhdGUsIGJ1dAogCSB3ZSBjYW5ub3QgdHJ1 c3QgdGhlbSBpZiBzb21lIGNvbW1hbmQgbW92ZWQgcG9pbnQgc2luY2UgdGhlCkBAIC0yNDczMCw3 ICsyNDc1Niw3IEBAIERFRlVOICgiYmlkaS1yZXNvbHZlZC1sZXZlbHMiLCBGYmlkaV9yZXNvbHZl ZF9sZXZlbHMsCiAgICAgICAmJiAhd2luZG93c19vcl9idWZmZXJzX2NoYW5nZWQKICAgICAgICYm IGIKICAgICAgICYmICFiLT5jbGlwX2NoYW5nZWQKLSAgICAgICYmICFiLT5wcmV2ZW50X3JlZGlz cGxheV9vcHRpbWl6YXRpb25zX3AKKyAgICAgICYmIGZhbHNlCiAgICAgICAmJiAhd2luZG93X291 dGRhdGVkICh3KQogICAgICAgJiYgbnJvdyA+PSAwCiAgICAgICAmJiBucm93IDwgdy0+Y3VycmVu dF9tYXRyaXgtPm5yb3dzCkBAIC0yNzQzMiw3ICsyNzQ1OCw3IEBAIGluaXRfZ2x5cGhfc3RyaW5n IChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzLAogI2lmZGVmIEhBVkVfTlRHVUkKIAkJICAgSERDIGhk YywKICNlbmRpZgotCQkgICB1bnNpZ25lZCAqY2hhcjJiLCBzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1 Y3QgZ2x5cGhfcm93ICpyb3csCisJCSAgIExpc3BfT2JqZWN0ICpjaGFyMmIsIHN0cnVjdCB3aW5k b3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywKIAkJICAgZW51bSBnbHlwaF9yb3dfYXJlYSBh cmVhLCBpbnQgc3RhcnQsIGVudW0gZHJhd19nbHlwaHNfZmFjZSBobCkKIHsKICAgbWVtc2V0IChz LCAwLCBzaXplb2YgKnMpOwpAQCAtMjc1MTEsMjAgKzI3NTM3LDE1IEBAIGFwcGVuZF9nbHlwaF9z dHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKipoZWFkLCBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICoq dGFpbCwKIAogc3RhdGljIHN0cnVjdCBmYWNlICoKIGdldF9jaGFyX2ZhY2VfYW5kX2VuY29kaW5n IChzdHJ1Y3QgZnJhbWUgKmYsIGludCBjLCBpbnQgZmFjZV9pZCwKLQkJCSAgICB1bnNpZ25lZCAq Y2hhcjJiLCBib29sIGRpc3BsYXlfcCkKKwkJCSAgICBMaXNwX09iamVjdCAqY2hhcjJiLCBib29s IGRpc3BsYXlfcCwKKwkJCSAgICBzdHJ1Y3QgZ2x5cGhfY29udGV4dCAqY29udGV4dCkKIHsKICAg c3RydWN0IGZhY2UgKmZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZhY2VfaWQpOwotICB1bnNpZ25l ZCBjb2RlID0gMDsKKyAgTGlzcF9PYmplY3QgY29kZSA9IFFuaWw7CiAKICAgaWYgKGZhY2UtPmZv bnQpCi0gICAgewotICAgICAgY29kZSA9IGZhY2UtPmZvbnQtPmRyaXZlci0+ZW5jb2RlX2NoYXIg KGZhY2UtPmZvbnQsIGMpOwotCi0gICAgICBpZiAoY29kZSA9PSBGT05UX0lOVkFMSURfQ09ERSkK LQljb2RlID0gMDsKLSAgICB9Ci0gIC8qIEVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIG9ubHkgMiBi eXRlcyB3aWRlLiAgKi8KLSAgKmNoYXIyYiA9IGNvZGUgJiAweEZGRkY7CisgICAgY29kZSA9IGZh Y2UtPmZvbnQtPmRyaXZlci0+ZW5jb2RlX2NoYXIgKGZhY2UtPmZvbnQsIGMsIGNvbnRleHQpOwor ICAqY2hhcjJiID0gY29kZTsKIAogICAvKiBNYWtlIHN1cmUgWCByZXNvdXJjZXMgb2YgdGhlIGZh Y2UgYXJlIGFsbG9jYXRlZC4gICovCiAjaWZkZWYgSEFWRV9YX1dJTkRPV1MKQEAgLTI3NTQ1LDEw ICsyNzU2NiwxMCBAQCBnZXRfY2hhcl9mYWNlX2FuZF9lbmNvZGluZyAoc3RydWN0IGZyYW1lICpm LCBpbnQgYywgaW50IGZhY2VfaWQsCiAKIHN0YXRpYyBzdHJ1Y3QgZmFjZSAqCiBnZXRfZ2x5cGhf ZmFjZV9hbmRfZW5jb2RpbmcgKHN0cnVjdCBmcmFtZSAqZiwgc3RydWN0IGdseXBoICpnbHlwaCwK LQkJCSAgICAgdW5zaWduZWQgKmNoYXIyYikKKwkJCSAgICAgTGlzcF9PYmplY3QgKmNoYXIyYiwg c3RydWN0IGdseXBoX2NvbnRleHQgKmNvbnRleHQpCiB7CiAgIHN0cnVjdCBmYWNlICpmYWNlOwot ICB1bnNpZ25lZCBjb2RlID0gMDsKKyAgTGlzcF9PYmplY3QgY29kZSA9IFFuaWw7CiAKICAgZWFz c2VydCAoZ2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSCk7CiAgIGZhY2UgPSBGQUNFX0ZST01fSUQg KGYsIGdseXBoLT5mYWNlX2lkKTsKQEAgLTI3NTU5LDE2ICsyNzU4MCwxMyBAQCBnZXRfZ2x5cGhf ZmFjZV9hbmRfZW5jb2RpbmcgKHN0cnVjdCBmcmFtZSAqZiwgc3RydWN0IGdseXBoICpnbHlwaCwK ICAgaWYgKGZhY2UtPmZvbnQpCiAgICAgewogICAgICAgaWYgKENIQVJfQllURThfUCAoZ2x5cGgt PnUuY2gpKQotCWNvZGUgPSBDSEFSX1RPX0JZVEU4IChnbHlwaC0+dS5jaCk7CisJY29kZSA9IG1h a2VfZml4bnVtIChDSEFSX1RPX0JZVEU4IChnbHlwaC0+dS5jaCkpOwogICAgICAgZWxzZQotCWNv ZGUgPSBmYWNlLT5mb250LT5kcml2ZXItPmVuY29kZV9jaGFyIChmYWNlLT5mb250LCBnbHlwaC0+ dS5jaCk7Ci0KLSAgICAgIGlmIChjb2RlID09IEZPTlRfSU5WQUxJRF9DT0RFKQotCWNvZGUgPSAw OworCWNvZGUgPSBmYWNlLT5mb250LT5kcml2ZXItPmVuY29kZV9jaGFyIChmYWNlLT5mb250LCBn bHlwaC0+dS5jaCwKKwkJCQkJCWNvbnRleHQpOwogICAgIH0KIAotICAvKiBFbnN1cmUgdGhhdCB0 aGUgY29kZSBpcyBvbmx5IDIgYnl0ZXMgd2lkZS4gICovCi0gICpjaGFyMmIgPSBjb2RlICYgMHhG RkZGOworICAqY2hhcjJiID0gY29kZTsKICAgcmV0dXJuIGZhY2U7CiB9CiAKQEAgLTI3NTc3LDIw ICsyNzU5NSwyMSBAQCBnZXRfZ2x5cGhfZmFjZV9hbmRfZW5jb2RpbmcgKHN0cnVjdCBmcmFtZSAq Ziwgc3RydWN0IGdseXBoICpnbHlwaCwKICAgIFJldHVybiB0cnVlIGlmZiBGT05UIGhhcyBhIGds eXBoIGZvciBDLiAgKi8KIAogc3RhdGljIGJvb2wKLWdldF9jaGFyX2dseXBoX2NvZGUgKGludCBj LCBzdHJ1Y3QgZm9udCAqZm9udCwgdW5zaWduZWQgKmNoYXIyYikKK2dldF9jaGFyX2dseXBoX2Nv ZGUgKGludCBjLCBzdHJ1Y3QgZm9udCAqZm9udCwgTGlzcF9PYmplY3QgKmNoYXIyYiwKKwkJICAg ICBzdHJ1Y3QgZ2x5cGhfY29udGV4dCAqY29udGV4dCkKIHsKLSAgdW5zaWduZWQgY29kZTsKKyAg TGlzcF9PYmplY3QgY29kZSA9IFFuaWw7CiAKICAgaWYgKENIQVJfQllURThfUCAoYykpCi0gICAg Y29kZSA9IENIQVJfVE9fQllURTggKGMpOworICAgIGNvZGUgPSBtYWtlX2ZpeG51bSAoQ0hBUl9U T19CWVRFOCAoYykpOwogICBlbHNlCi0gICAgY29kZSA9IGZvbnQtPmRyaXZlci0+ZW5jb2RlX2No YXIgKGZvbnQsIGMpOworICAgIGNvZGUgPSBmb250LT5kcml2ZXItPmVuY29kZV9jaGFyIChmb250 LCBjLCBjb250ZXh0KTsKIAotICBpZiAoY29kZSA9PSBGT05UX0lOVkFMSURfQ09ERSkKKyAgaWYg KE5JTFAgKGNvZGUpKQogICAgIHJldHVybiBmYWxzZTsKIAogICAvKiBFbnN1cmUgdGhhdCB0aGUg Y29kZSBpcyBvbmx5IDIgYnl0ZXMgd2lkZS4gICovCi0gICpjaGFyMmIgPSBjb2RlICYgMHhGRkZG OworICAqY2hhcjJiID0gY29kZTsKICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI3NjMyLDcgKzI3 NjUxLDggQEAgZmlsbF9jb21wb3NpdGVfZ2x5cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5n ICpzLCBzdHJ1Y3QgZmFjZSAqYmFzZV9mYWNlLAogCQkJCSAgICAgICAtMSwgUW5pbCk7CiAKIAkg IGZhY2UgPSBnZXRfY2hhcl9mYWNlX2FuZF9lbmNvZGluZyAocy0+ZiwgYywgZmFjZV9pZCwKLQkJ CQkJICAgICBzLT5jaGFyMmIgKyBpLCB0cnVlKTsKKwkJCQkJICAgICBzLT5jaGFyMmIgKyBpLCB0 cnVlLAorCQkJCQkgICAgIE5VTEwpOwogCSAgaWYgKGZhY2UpCiAJICAgIHsKIAkgICAgICBpZiAo ISBzLT5mYWNlKQpAQCAtMjc3MTAsNyArMjc3MzAsOCBAQCBmaWxsX2dzdHJpbmdfZ2x5cGhfc3Ry aW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzLCBpbnQgZmFjZV9pZCwKICAgICAgIHVuc2lnbmVk IGNvZGUgPSBMR0xZUEhfQ09ERSAobGdseXBoKTsKIAogICAgICAgLyogRW5zdXJlIHRoYXQgdGhl IGNvZGUgaXMgb25seSAyIGJ5dGVzIHdpZGUuICAqLwotICAgICAgcy0+Y2hhcjJiW2ldID0gY29k ZSAmIDB4RkZGRjsKKyAgICAgIG1lbXNldCAocy0+Y2hhcjJiICsgaSwgMCwgc2l6ZW9mIChzLT5j aGFyMmJbaV0pKTsKKyAgICAgIHMtPmNoYXIyYltpXSA9IG1ha2VfZml4bnVtIChjb2RlKTsKICAg ICB9CiAKICAgcmV0dXJuIGdseXBoIC0gcy0+cm93LT5nbHlwaHNbcy0+YXJlYV07CkBAIC0yNzc4 OSw3ICsyNzgxMCw4IEBAIGZpbGxfZ2x5cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpz LCBpbnQgZmFjZV9pZCwKIAkgJiYgZ2x5cGgtPmdseXBoX25vdF9hdmFpbGFibGVfcCA9PSBnbHlw aF9ub3RfYXZhaWxhYmxlX3ApCiAgICAgewogICAgICAgcy0+ZmFjZSA9IGdldF9nbHlwaF9mYWNl X2FuZF9lbmNvZGluZyAocy0+ZiwgZ2x5cGgsCi0JCQkJCSAgICAgcy0+Y2hhcjJiICsgcy0+bmNo YXJzKTsKKwkJCQkJICAgICBzLT5jaGFyMmIgKyBzLT5uY2hhcnMsCisJCQkJCSAgICAgZ2x5cGgt PmNvbnRleHQpOwogICAgICAgKytzLT5uY2hhcnM7CiAgICAgICBlYXNzZXJ0IChzLT5uY2hhcnMg PD0gZW5kIC0gc3RhcnQpOwogICAgICAgcy0+d2lkdGggKz0gZ2x5cGgtPnBpeGVsX3dpZHRoOwpA QCAtMjc4ODksMTMgKzI3OTExLDEzIEBAIGZpbGxfc3RyZXRjaF9nbHlwaF9zdHJpbmcgKHN0cnVj dCBnbHlwaF9zdHJpbmcgKnMsIGludCBzdGFydCwgaW50IGVuZCkKIH0KIAogc3RhdGljIHN0cnVj dCBmb250X21ldHJpY3MgKgotZ2V0X3Blcl9jaGFyX21ldHJpYyAoc3RydWN0IGZvbnQgKmZvbnQs IGNvbnN0IHVuc2lnbmVkICpjaGFyMmIpCitnZXRfcGVyX2NoYXJfbWV0cmljIChzdHJ1Y3QgZm9u dCAqZm9udCwgTGlzcF9PYmplY3QgKmNoYXIyYikKIHsKICAgc3RhdGljIHN0cnVjdCBmb250X21l dHJpY3MgbWV0cmljczsKIAogICBpZiAoISBmb250KQogICAgIHJldHVybiBOVUxMOwotICBpZiAo KmNoYXIyYiA9PSBGT05UX0lOVkFMSURfQ09ERSkKKyAgaWYgKE5JTFAgKCpjaGFyMmIpKQogICAg IHJldHVybiBOVUxMOwogCiAgIGZvbnQtPmRyaXZlci0+dGV4dF9leHRlbnRzIChmb250LCBjaGFy MmIsIDEsICZtZXRyaWNzKTsKQEAgLTI3OTE2LDExICsyNzkzOCwxMSBAQCBub3JtYWxfY2hhcl9h c2NlbnRfZGVzY2VudCAoc3RydWN0IGZvbnQgKmZvbnQsIGludCBjLCBpbnQgKmFzY2VudCwgaW50 ICpkZXNjZW50KQogCiAgIGlmIChGT05UX1RPT19ISUdIIChmb250KSkKICAgICB7Ci0gICAgICB1 bnNpZ25lZCBjaGFyMmI7CisgICAgICBMaXNwX09iamVjdCBjaGFyMmI7CiAKICAgICAgIC8qIEdl dCBtZXRyaWNzIG9mIEMsIGRlZmF1bHRpbmcgdG8gYSByZWFzb25hYmx5IHNpemVkIEFTQ0lJCiAJ IGNoYXJhY3Rlci4gICovCi0gICAgICBpZiAoZ2V0X2NoYXJfZ2x5cGhfY29kZSAoYyA+PSAwID8g YyA6ICd7JywgZm9udCwgJmNoYXIyYikpCisgICAgICBpZiAoZ2V0X2NoYXJfZ2x5cGhfY29kZSAo YyA+PSAwID8gYyA6ICd7JywgZm9udCwgJmNoYXIyYiwgTlVMTCkpCiAJewogCSAgc3RydWN0IGZv bnRfbWV0cmljcyAqcGNtID0gZ2V0X3Blcl9jaGFyX21ldHJpYyAoZm9udCwgJmNoYXIyYik7CiAK QEAgLTI3OTYzLDExICsyNzk4NSwxMyBAQCBndWlfZ2V0X2dseXBoX292ZXJoYW5ncyAoc3RydWN0 IGdseXBoICpnbHlwaCwgc3RydWN0IGZyYW1lICpmLCBpbnQgKmxlZnQsIGludCAqcgogCiAgIGlm IChnbHlwaC0+dHlwZSA9PSBDSEFSX0dMWVBIKQogICAgIHsKLSAgICAgIHVuc2lnbmVkIGNoYXIy YjsKLSAgICAgIHN0cnVjdCBmYWNlICpmYWNlID0gZ2V0X2dseXBoX2ZhY2VfYW5kX2VuY29kaW5n IChmLCBnbHlwaCwgJmNoYXIyYik7CisgICAgICBMaXNwX09iamVjdCBjaGFyMmI7CisgICAgICBz dHJ1Y3QgZmFjZSAqZmFjZSA9IGdldF9nbHlwaF9mYWNlX2FuZF9lbmNvZGluZyAoZiwgZ2x5cGgs ICZjaGFyMmIsCisJCQkJCQkgICAgICAgZ2x5cGgtPmNvbnRleHQpOwogICAgICAgaWYgKGZhY2Ut PmZvbnQpCiAJewotCSAgc3RydWN0IGZvbnRfbWV0cmljcyAqcGNtID0gZ2V0X3Blcl9jaGFyX21l dHJpYyAoZmFjZS0+Zm9udCwgJmNoYXIyYik7CisJICBzdHJ1Y3QgZm9udF9tZXRyaWNzICpwY20g PSBnZXRfcGVyX2NoYXJfbWV0cmljIChmYWNlLT5mb250LAorCQkJCQkJCSAgJmNoYXIyYik7CiAJ ICBpZiAocGNtKQogCSAgICB7CiAJICAgICAgaWYgKHBjbS0+cmJlYXJpbmcgPiBwY20tPndpZHRo KQpAQCAtMjgyNzMsMjEgKzI4Mjk3LDIxIEBAICNkZWZpbmUgQlVJTERfSU1BR0VfR0xZUEhfU1RS SU5HKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNUX1gpIFwKICAgIGlzIERSQVdf Q1VSU09SIGlmIGEgY3Vyc29yIGhhcyB0byBiZSBkcmF3bi4gIExBU1RfWCBpcyB0aGUKICAgIHJp Z2h0LW1vc3QgeC1wb3NpdGlvbiBvZiB0aGUgZHJhd2luZyBhcmVhLiAgKi8KIAotI2RlZmluZSBC VUlMRF9DSEFSX0dMWVBIX1NUUklOR1MoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwgSEwsIFgsIExB U1RfWCkJICAgXAotICAgICBkbwkJCQkJCQkJCSAgIFwKLSAgICAgICB7CQkJCQkJCQkgICBcCi0J IGludCBmYWNlX2lkOwkJCQkJCQkgICBcCi0JIHVuc2lnbmVkICpjaGFyMmI7CQkJCQkgICBcCi0J CQkJCQkJCQkgICBcCi0JIGZhY2VfaWQgPSAocm93KS0+Z2x5cGhzW2FyZWFdW1NUQVJUXS5mYWNl X2lkOwkJCSAgIFwKLQkJCQkJCQkJCSAgIFwKLQkgcyA9IGFsbG9jYSAoc2l6ZW9mICpzKTsJCQkJ CSAgIFwKLQkgU0FGRV9OQUxMT0NBIChjaGFyMmIsIDEsIChFTkQpIC0gKFNUQVJUKSk7CQkJICAg XAotCSBJTklUX0dMWVBIX1NUUklORyAocywgY2hhcjJiLCB3LCByb3csIGFyZWEsIFNUQVJULCBI TCk7CSAgIFwKLQkgYXBwZW5kX2dseXBoX3N0cmluZyAoJkhFQUQsICZUQUlMLCBzKTsJCQkJICAg XAotCSBzLT54ID0gKFgpOwkJCQkJCQkgICBcCi0JIFNUQVJUID0gZmlsbF9nbHlwaF9zdHJpbmcg KHMsIGZhY2VfaWQsIFNUQVJULCBFTkQsIG92ZXJsYXBzKTsJICAgXAotICAgICAgIH0JCQkJCQkJ CSAgIFwKKyNkZWZpbmUgQlVJTERfQ0hBUl9HTFlQSF9TVFJJTkdTKFNUQVJULCBFTkQsIEhFQUQs IFRBSUwsIEhMLCBYLCBMQVNUX1gpCVwKKyAgZG8JCQkJCQkJCQlcCisgICAgICAgewkJCQkJCQkJ XAorCSBpbnQgZmFjZV9pZDsJCQkJCQkJXAorCSBMaXNwX09iamVjdCAqY2hhcjJiOwkJCQkJCVwK KwkJCQkJCQkJCVwKKwkgZmFjZV9pZCA9IChyb3cpLT5nbHlwaHNbYXJlYV1bU1RBUlRdLmZhY2Vf aWQ7CQkJXAorCQkJCQkJCQkJXAorCSBzID0gYWxsb2NhIChzaXplb2YgKnMpOwkJCQkJXAorCSBT QUZFX0FMTE9DQV9MSVNQIChjaGFyMmIsIChFTkQpIC0gKFNUQVJUKSk7CQkJXAorCSBJTklUX0dM WVBIX1NUUklORyAocywgY2hhcjJiLCB3LCByb3csIGFyZWEsIFNUQVJULCBITCk7CVwKKwkgYXBw ZW5kX2dseXBoX3N0cmluZyAoJkhFQUQsICZUQUlMLCBzKTsJCQkJXAorCSBzLT54ID0gKFgpOwkJ CQkJCQlcCisJIFNUQVJUID0gZmlsbF9nbHlwaF9zdHJpbmcgKHMsIGZhY2VfaWQsIFNUQVJULCBF TkQsIG92ZXJsYXBzKTsJXAorICAgICAgIH0JCQkJCQkJCVwKICAgICAgd2hpbGUgKGZhbHNlKQog CiAKQEAgLTI4MzA2LDExICsyODMzMCwxMSBAQCAjZGVmaW5lIEJVSUxEX0NPTVBPU0lURV9HTFlQ SF9TVFJJTkcoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwgSEwsIFgsIExBU1RfWCkgXAogICAgIHN0 cnVjdCBmYWNlICpiYXNlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZhY2VfaWQpOwkJICAgIFwK ICAgICBwdHJkaWZmX3QgY21wX2lkID0gKHJvdyktPmdseXBoc1thcmVhXVtTVEFSVF0udS5jbXAu aWQ7CQkgICAgXAogICAgIHN0cnVjdCBjb21wb3NpdGlvbiAqY21wID0gY29tcG9zaXRpb25fdGFi bGVbY21wX2lkXTsJCSAgICBcCi0gICAgdW5zaWduZWQgKmNoYXIyYjsJCQkJCQkgICAgICAgICAg ICBcCisgICAgTGlzcF9PYmplY3QgKmNoYXIyYjsJCQkJCQlcCiAgICAgc3RydWN0IGdseXBoX3N0 cmluZyAqZmlyc3RfcyA9IE5VTEw7CQkJCSAgICBcCiAgICAgaW50IG47CQkJCQkJCQkgICAgXAog ICAgIAkJCQkJCQkJCSAgICBcCi0gICAgU0FGRV9OQUxMT0NBIChjaGFyMmIsIDEsIGNtcC0+Z2x5 cGhfbGVuKTsJCQkJICAgIFwKKyAgICBTQUZFX0FMTE9DQV9MSVNQIChjaGFyMmIsIGNtcC0+Z2x5 cGhfbGVuKTsJCQkJICAgIFwKICAgICAJCQkJCQkJCQkgICAgXAogICAgIC8qIE1ha2UgZ2x5cGhf c3RyaW5ncyBmb3IgZWFjaCBnbHlwaCBzZXF1ZW5jZSB0aGF0IGlzIGRyYXdhYmxlIGJ5CSAgICBc CiAgICAgICAgdGhlIHNhbWUgZmFjZSwgYW5kIGFwcGVuZCB0aGVtIHRvIEhFQUQvVEFJTC4gICov CQkJICAgIFwKQEAgLTI4MzM4LDE0ICsyODM2MiwxNCBAQCAjZGVmaW5lIEJVSUxEX0NPTVBPU0lU RV9HTFlQSF9TVFJJTkcoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwgSEwsIFgsIExBU1RfWCkgXAog I2RlZmluZSBCVUlMRF9HU1RSSU5HX0dMWVBIX1NUUklORyhTVEFSVCwgRU5ELCBIRUFELCBUQUlM LCBITCwgWCwgTEFTVF9YKSBcCiAgIGRvIHsJCQkJCQkJCQkgIFwKICAgICBpbnQgZmFjZV9pZDsJ CQkJCQkJICBcCi0gICAgdW5zaWduZWQgKmNoYXIyYjsJCQkJCQkgICAgICAgICAgXAorICAgIExp c3BfT2JqZWN0ICpjaGFyMmI7CQkJCQkJXAogICAgIExpc3BfT2JqZWN0IGdzdHJpbmc7CQkJCQkJ ICBcCiAgICAgCQkJCQkJCQkJICBcCiAgICAgZmFjZV9pZCA9IChyb3cpLT5nbHlwaHNbYXJlYV1b U1RBUlRdLmZhY2VfaWQ7CQkJICBcCiAgICAgZ3N0cmluZyA9IChjb21wb3NpdGlvbl9nc3RyaW5n X2Zyb21faWQJCQkJICBcCiAJICAgICAgICgocm93KS0+Z2x5cGhzW2FyZWFdW1NUQVJUXS51LmNt cC5pZCkpOwkJCSAgXAogICAgIHMgPSBhbGxvY2EgKHNpemVvZiAqcyk7CQkJCQkJICBcCi0gICAg U0FGRV9OQUxMT0NBIChjaGFyMmIsIDEsIExHU1RSSU5HX0dMWVBIX0xFTiAoZ3N0cmluZykpOwkJ ICBcCisgICAgU0FGRV9BTExPQ0FfTElTUCAoY2hhcjJiLCBMR1NUUklOR19HTFlQSF9MRU4gKGdz dHJpbmcpKTsJCVwKICAgICBJTklUX0dMWVBIX1NUUklORyAocywgY2hhcjJiLCB3LCByb3csIGFy ZWEsIFNUQVJULCBITCk7CQkgIFwKICAgICBhcHBlbmRfZ2x5cGhfc3RyaW5nICgmKEhFQUQpLCAm KFRBSUwpLCBzKTsJCQkJICBcCiAgICAgcy0+eCA9IChYKTsJCQkJCQkJCSAgXApAQCAtMjg3Njcs NyArMjg3OTEsNyBAQCAjZGVmaW5lIElUX0VYUEFORF9NQVRSSVhfV0lEVEgoaXQsIGFyZWEpCQlc CiAgICBDYWxsZWQgZnJvbSBndWlfcHJvZHVjZV9nbHlwaHMgd2hlbiBJVC0+Z2x5cGhfcm93IGlz IG5vbi1udWxsLiAgKi8KIAogc3RhdGljIHZvaWQKLWFwcGVuZF9nbHlwaCAoc3RydWN0IGl0ICpp dCkKK2FwcGVuZF9nbHlwaCAoc3RydWN0IGl0ICppdCwgc3RydWN0IGdseXBoX2NvbnRleHQgKmNv bnRleHQpCiB7CiAgIHN0cnVjdCBnbHlwaCAqZ2x5cGg7CiAgIGVudW0gZ2x5cGhfcm93X2FyZWEg YXJlYSA9IGl0LT5hcmVhOwpAQCAtMjg3OTEsNiArMjg4MTUsNyBAQCBhcHBlbmRfZ2x5cGggKHN0 cnVjdCBpdCAqaXQpCiAJfQogICAgICAgZ2x5cGgtPmNoYXJwb3MgPSBDSEFSUE9TIChpdC0+cG9z aXRpb24pOwogICAgICAgZ2x5cGgtPm9iamVjdCA9IGl0LT5vYmplY3Q7CisgICAgICBnbHlwaC0+ Y29udGV4dCA9IGNvbnRleHQ7CiAgICAgICBpZiAoaXQtPnBpeGVsX3dpZHRoID4gMCkKIAl7CiAJ ICBlYXNzZXJ0IChpdC0+cGl4ZWxfd2lkdGggPD0gU0hSVF9NQVgpOwpAQCAtMjg4NzMsNiArMjg4 OTgsNyBAQCBhcHBlbmRfY29tcG9zaXRlX2dseXBoIChzdHJ1Y3QgaXQgKml0KQogCX0KICAgICAg IGdseXBoLT5jaGFycG9zID0gaXQtPmNtcF9pdC5jaGFycG9zOwogICAgICAgZ2x5cGgtPm9iamVj dCA9IGl0LT5vYmplY3Q7CisgICAgICBnbHlwaC0+Y29udGV4dCA9IE5VTEw7CiAgICAgICBlYXNz ZXJ0IChpdC0+cGl4ZWxfd2lkdGggPD0gU0hSVF9NQVgpOwogICAgICAgZ2x5cGgtPnBpeGVsX3dp ZHRoID0gaXQtPnBpeGVsX3dpZHRoOwogICAgICAgZ2x5cGgtPmFzY2VudCA9IGl0LT5hc2NlbnQ7 CkBAIC0yOTA4NCw2ICsyOTExMCw3IEBAIHByb2R1Y2VfaW1hZ2VfZ2x5cGggKHN0cnVjdCBpdCAq aXQpCiAJewogCSAgZ2x5cGgtPmNoYXJwb3MgPSBDSEFSUE9TIChpdC0+cG9zaXRpb24pOwogCSAg Z2x5cGgtPm9iamVjdCA9IGl0LT5vYmplY3Q7CisJICBnbHlwaC0+Y29udGV4dCA9IE5VTEw7CiAJ ICBnbHlwaC0+cGl4ZWxfd2lkdGggPSBjbGlwX3RvX2JvdW5kcyAoLTEsIGl0LT5waXhlbF93aWR0 aCwgU0hSVF9NQVgpOwogCSAgZ2x5cGgtPmFzY2VudCA9IGdseXBoX2FzY2VudDsKIAkgIGdseXBo LT5kZXNjZW50ID0gaXQtPmRlc2NlbnQ7CkBAIC0yOTE5MCw2ICsyOTIxNyw3IEBAIHByb2R1Y2Vf eHdpZGdldF9nbHlwaCAoc3RydWN0IGl0ICppdCkKIAl7CiAJICBnbHlwaC0+Y2hhcnBvcyA9IENI QVJQT1MgKGl0LT5wb3NpdGlvbik7CiAJICBnbHlwaC0+b2JqZWN0ID0gaXQtPm9iamVjdDsKKwkg IGdseXBoLT5jb250ZXh0ID0gTlVMTDsKIAkgIGdseXBoLT5waXhlbF93aWR0aCA9IGNsaXBfdG9f Ym91bmRzICgtMSwgaXQtPnBpeGVsX3dpZHRoLCBTSFJUX01BWCk7CiAJICBnbHlwaC0+YXNjZW50 ID0gZ2x5cGhfYXNjZW50OwogCSAgZ2x5cGgtPmRlc2NlbnQgPSBpdC0+ZGVzY2VudDsKQEAgLTI5 Mjc2LDYgKzI5MzA0LDcgQEAgYXBwZW5kX3N0cmV0Y2hfZ2x5cGggKHN0cnVjdCBpdCAqaXQsIExp c3BfT2JqZWN0IG9iamVjdCwKIAl9CiAgICAgICBnbHlwaC0+Y2hhcnBvcyA9IENIQVJQT1MgKGl0 LT5wb3NpdGlvbik7CiAgICAgICBnbHlwaC0+b2JqZWN0ID0gb2JqZWN0OworICAgICAgZ2x5cGgt PmNvbnRleHQgPSBOVUxMOwogICAgICAgLyogRklYTUU6IEl0IHdvdWxkIGJlIGJldHRlciB0byB1 c2UgVFlQRV9NQVggaGVyZSwgYnV0CiAJIF9fdHlwZW9mX18gaXMgbm90IHBvcnRhYmxlIGVub3Vn aC4uLiAgKi8KICAgICAgIGdseXBoLT5waXhlbF93aWR0aCA9IGNsaXBfdG9fYm91bmRzICgtMSwg d2lkdGgsIFNIUlRfTUFYKTsKQEAgLTI5NzMwLDYgKzI5NzU5LDcgQEAgYXBwZW5kX2dseXBobGVz c19nbHlwaCAoc3RydWN0IGl0ICppdCwgaW50IGZhY2VfaWQsIGJvb2wgZm9yX25vX2ZvbnQsIGlu dCBsZW4sCiAJfQogICAgICAgZ2x5cGgtPmNoYXJwb3MgPSBDSEFSUE9TIChpdC0+cG9zaXRpb24p OwogICAgICAgZ2x5cGgtPm9iamVjdCA9IGl0LT5vYmplY3Q7CisgICAgICBnbHlwaC0+Y29udGV4 dCA9IE5VTEw7CiAgICAgICBlYXNzZXJ0IChpdC0+cGl4ZWxfd2lkdGggPD0gU0hSVF9NQVgpOwog ICAgICAgZ2x5cGgtPnBpeGVsX3dpZHRoID0gaXQtPnBpeGVsX3dpZHRoOwogICAgICAgZ2x5cGgt PmFzY2VudCA9IGl0LT5hc2NlbnQ7CkBAIC0yOTgyOSw3ICsyOTg1OSw3IEBAIHByb2R1Y2VfZ2x5 cGhsZXNzX2dseXBoIChzdHJ1Y3QgaXQgKml0LCBib29sIGZvcl9ub19mb250LCBMaXNwX09iamVj dCBhY3JvbnltKQogICAgIHsKICAgICAgIGNoYXIgYnVmWzddOwogICAgICAgY29uc3QgY2hhciAq c3RyOwotICAgICAgdW5zaWduZWQgaW50IGNvZGVbNl07CisgICAgICBMaXNwX09iamVjdCBjb2Rl WzZdOwogICAgICAgaW50IHVwcGVyX2xlbjsKICAgICAgIGludCBhc2NlbnQsIGRlc2NlbnQ7CiAg ICAgICBzdHJ1Y3QgZm9udF9tZXRyaWNzIG1ldHJpY3NfdXBwZXIsIG1ldHJpY3NfbG93ZXI7CkBA IC0yOTg1Myw3ICsyOTg4Myw3IEBAIHByb2R1Y2VfZ2x5cGhsZXNzX2dseXBoIChzdHJ1Y3QgaXQg Kml0LCBib29sIGZvcl9ub19mb250LCBMaXNwX09iamVjdCBhY3JvbnltKQogCSAgc3RyID0gYnVm OwogCX0KICAgICAgIGZvciAobGVuID0gMDsgc3RyW2xlbl0gJiYgQVNDSUlfQ0hBUl9QIChzdHJb bGVuXSkgJiYgbGVuIDwgNjsgbGVuKyspCi0JY29kZVtsZW5dID0gZm9udC0+ZHJpdmVyLT5lbmNv ZGVfY2hhciAoZm9udCwgc3RyW2xlbl0pOworCWNvZGVbbGVuXSA9IGZvbnQtPmRyaXZlci0+ZW5j b2RlX2NoYXIgKGZvbnQsIHN0cltsZW5dLCBOVUxMKTsKICAgICAgIHVwcGVyX2xlbiA9IChsZW4g KyAxKSAvIDI7CiAgICAgICBmb250LT5kcml2ZXItPnRleHRfZXh0ZW50cyAoZm9udCwgY29kZSwg dXBwZXJfbGVuLAogCQkJCSAgJm1ldHJpY3NfdXBwZXIpOwpAQCAtMjk5NDgsNiArMjk5NzgsMjI5 IEBAICNkZWZpbmUgSVRfQVBQTFlfRkFDRV9CT1goaXQsIGZhY2UpCQkJCVwKICAgICAgIH0JCQkJ CQkJCVwKICAgICB9IHdoaWxlIChmYWxzZSkKIAorI2RlZmluZSBJU19ERUxJTUlURVIoYykgKChj KSA8PSAnICcpCisjZGVmaW5lIGl0X2xvb2thaGVhZChpdCkgMTI4CisKK3N0YXRpYyBzdHJ1Y3Qg Z2x5cGhfY29udGV4dCAqCittYWtlX2NvbnRleHQgKHN0cnVjdCBpdCAqaXRfb3JpZywgc3RydWN0 IGZvbnQgKmZvbnQpCit7CisgIGlmIChpdF9vcmlnLT5jb250ZXh0X2NhY2hlLm5leHRfdHJhbnNp dGlvbiA+IDApCisgICAgeworICAgICAgc3RydWN0IGdseXBoX2NvbnRleHQgKmNvbnRleHQgPSBB TExPQ0FURV9QU0VVRE9WRUNUT1IgKHN0cnVjdCBnbHlwaF9jb250ZXh0LCBwb3NpdGlvbiwgUFZF Q19HTFlQSF9DT05URVhUKTsKKyAgICAgIGNvbnRleHQtPnN0cmluZyA9IGl0X29yaWctPmNvbnRl eHRfY2FjaGUuY29udGV4dC0+c3RyaW5nOworICAgICAgY29udGV4dC0+c2NyaXB0ID0gaXRfb3Jp Zy0+Y29udGV4dF9jYWNoZS5jb250ZXh0LT5zY3JpcHQ7CisgICAgICBjb250ZXh0LT5wb3NpdGlv biA9IG1ha2VfZml4bnVtIChYRklYTlVNIChpdF9vcmlnLT5jb250ZXh0X2NhY2hlLmNvbnRleHQt PnBvc2l0aW9uKSArIGl0X29yaWctPmNvbnRleHRfY2FjaGUuYWdlKTsKKyAgICAgIHJldHVybiBj b250ZXh0OworICAgIH0KKworICBMaXNwX09iamVjdCBzY3JpcHQgPSBRbmlsOworICBpZiAoZm9u dC0+ZHJpdmVyLT5ndWVzc19zY3JpcHQpCisgICAgc2NyaXB0ID0gZm9udC0+ZHJpdmVyLT5ndWVz c19zY3JpcHQgKGZvbnQsIGl0X29yaWctPmNoYXJfdG9fZGlzcGxheSk7CisKKyAgYm9vbCBzZWVu X3J0bCA9IGZhbHNlOworICBib29sIHNlZW5fbHRyID0gZmFsc2U7CisKKyAgaWYgKENIQVJfSEFT X0NBVEVHT1JZIChpdF9vcmlnLT5jaGFyX3RvX2Rpc3BsYXksICdMJykpCisgICAgc2Vlbl9sdHIg PSB0cnVlOworICBlbHNlIGlmIChDSEFSX0hBU19DQVRFR09SWSAoaXRfb3JpZy0+Y2hhcl90b19k aXNwbGF5LCAnUicpKQorICAgIHNlZW5fcnRsID0gdHJ1ZTsKKworICBib29sIGJpZGlfY2FjaGVf c2hlbHZlZCA9IGZhbHNlOworICB2b2lkICpiaWRpX2NhY2hlID0gTlVMTDsKKyAgc3RydWN0IGl0 IGl0OworICBzdHJ1Y3QgZ2x5cGhfY29udGV4dCAqY29udGV4dCA9IEFMTE9DQVRFX1BTRVVET1ZF Q1RPUiAoc3RydWN0IGdseXBoX2NvbnRleHQsIHBvc2l0aW9uLCBQVkVDX0dMWVBIX0NPTlRFWFQp OworICBpbnQgbGVuID0gaXRfb3JpZy0+aGlzdG9yeS5sZW47CisgIGludCBwYXN0X2xlbiA9IGxl bjsKKyAgTGlzcF9PYmplY3QgcG9zaXRpb24gPSBRbmlsOworICBpbnQgc3RyaW5nX2xlbiA9IDUg KiAoSVRfSElTVE9SWV9TSVpFICsgaXRfbG9va2FoZWFkIChpdF9vcmlnKSk7CisgIHVuc2lnbmVk IGNoYXIgKnN0cmluZyA9IHhtYWxsb2MgKHN0cmluZ19sZW4gKyAxKTsKKyAgcHRyZGlmZl90IGNo YXJwb3MgPSAwOworICBwdHJkaWZmX3QgYnl0ZXBvcyA9IDA7CisgIHB0cmRpZmZfdCBzdGFydF9j aGFycG9zID0gMDsKKyAgcHRyZGlmZl90IHN0YXJ0X2J5dGVwb3MgPSAwOworICBwdHJkaWZmX3Qg ZGVsaW1fYnl0ZXBvcyA9IC0xOworICBwdHJkaWZmX3QgZGVsaW1fY2hhcnBvcyA9IC0xOworICBw dHJkaWZmX3QgbmV4dF90cmFuc2l0aW9uID0gMDsKKworICBzdGFydF9jaGFycG9zID0gcGFzdF9s ZW47CisgIGludCB0cmFuc2l0aW9ucyA9IDA7CisgIGJvb2wgd2FzX2RlbGltaXRlciA9IElTX0RF TElNSVRFUiAoaXRfb3JpZy0+Y2hhcl90b19kaXNwbGF5KTsKKyAgd2hpbGUgKHN0YXJ0X2NoYXJw b3MgPiAwKQorICAgIHsKKyAgICAgIGludCBjID0gaXRfb3JpZy0+aGlzdG9yeS5jW3N0YXJ0X2No YXJwb3MgLSAxXTsKKyAgICAgIGlmIChjID09ICdcbicpCisJYnJlYWs7CisgICAgICBib29sIGlz X2RlbGltaXRlciA9IElTX0RFTElNSVRFUiAoYyk7CisgICAgICB0cmFuc2l0aW9ucyArPSBpc19k ZWxpbWl0ZXIgIT0gd2FzX2RlbGltaXRlcjsKKyAgICAgIHdhc19kZWxpbWl0ZXIgPSBpc19kZWxp bWl0ZXI7CisgICAgICBzdGFydF9jaGFycG9zLS07CisgICAgICBpZiAodHJhbnNpdGlvbnMgPiAy KQorCWJyZWFrOworICAgIH0KKworICBpZiAod2FzX2RlbGltaXRlcikKKyAgICB7CisgICAgICBk ZWxpbV9ieXRlcG9zID0gMDsKKyAgICAgIGRlbGltX2NoYXJwb3MgPSBzdGFydF9jaGFycG9zOwor ICAgIH0KKyAgZm9yIChjaGFycG9zID0gc3RhcnRfY2hhcnBvczsgY2hhcnBvcyA8IHBhc3RfbGVu ICsgaXRfbG9va2FoZWFkIChpdF9vcmlnKTspCisgICAgeworICAgICAgaW50IGM7CisgICAgICBp ZiAoY2hhcnBvcyA8IHBhc3RfbGVuKQorCWMgPSBpdF9vcmlnLT5oaXN0b3J5LmNbY2hhcnBvc107 CisgICAgICBlbHNlCisJeworCSAgaWYgKGNoYXJwb3MgPT0gcGFzdF9sZW4pCisJICAgIHsKKwkg ICAgICBiaWRpX2NhY2hlID0gYmlkaV9zaGVsdmVfY2FjaGUgKCk7CisJICAgICAgYmlkaV9jYWNo ZV9zaGVsdmVkID0gdHJ1ZTsKKwkgICAgICBpdCA9ICppdF9vcmlnOworCSAgICAgIHBvc2l0aW9u ID0gbWFrZV9maXhudW0gKGNoYXJwb3MgLSBzdGFydF9jaGFycG9zKTsKKwkgICAgfQorCisJICBp ZiAoaXQuZW5kX2NoYXJwb3MgPj0gQkVHCisJICAgICAgJiYgaXQuZW5kX2NoYXJwb3MgPT0gSVRf Q0hBUlBPUyAoaXQpCisJICAgICAgJiYgaXQubWV0aG9kID09IEdFVF9GUk9NX0JVRkZFUgorCSAg ICAgICYmIGl0LmVuZF9jaGFycG9zIDwgWlYpCisJICAgIGl0LmVuZF9jaGFycG9zKys7CisJICBp ZiAoIWdldF9uZXh0X2Rpc3BsYXlfZWxlbWVudCAoJml0KQorCSAgICAgIHx8IGl0Lm1ldGhvZCA9 PSBHRVRfRlJPTV9ESVNQTEFZX1ZFQ1RPUgorCSAgICAgIHx8IGl0LndoYXQgIT0gSVRfQ0hBUkFD VEVSCisJICAgICAgfHwgaXQuY2hhcl90b19kaXNwbGF5IDwgJyAnKQorCSAgICB7CisJICAgICAg aWYgKGNoYXJwb3MgPiBwYXN0X2xlbiAmJiBuZXh0X3RyYW5zaXRpb24gPT0gMCkKKwkJbmV4dF90 cmFuc2l0aW9uID0gY2hhcnBvczsKKworCSAgICAgIGJyZWFrOworCSAgICB9CisKKwkgIGMgPSBp dC5jaGFyX3RvX2Rpc3BsYXk7CisJICBpZiAoTklMUCAoc2NyaXB0KQorCSAgICAgICYmIGZvbnQt PmRyaXZlci0+Z3Vlc3Nfc2NyaXB0KQorCSAgICBzY3JpcHQgPSBmb250LT5kcml2ZXItPmd1ZXNz X3NjcmlwdCAoZm9udCwgYyk7CisKKwkgIHNldF9pdGVyYXRvcl90b19uZXh0ICgmaXQsIGZhbHNl KTsKKwl9CisKKyAgICAgIGlmIChjID09ICdcbicpCisJYnJlYWs7CisKKyAgICAgIGlmIChkZWxp bV9ieXRlcG9zID49IDAgJiYgIUlTX0RFTElNSVRFUiAoYykpCisJeworCSAgaWYgKGNoYXJwb3Mg PiBwYXN0X2xlbiAmJiBuZXh0X3RyYW5zaXRpb24gPT0gMCkKKwkgICAgbmV4dF90cmFuc2l0aW9u ID0gY2hhcnBvczsKKwkgIGlmIChjaGFycG9zIDwgcGFzdF9sZW4pCisJICAgIHsKKwkgICAgICBz dGFydF9ieXRlcG9zID0gYnl0ZXBvczsKKwkgICAgICBzdGFydF9jaGFycG9zID0gY2hhcnBvczsK KwkgICAgfQorCSAgZWxzZSBpZiAoZGVsaW1fY2hhcnBvcyA+IHBhc3RfbGVuKQorCSAgICBicmVh azsKKwkgIGRlbGltX2J5dGVwb3MgPSAtMTsKKwkgIGRlbGltX2NoYXJwb3MgPSAtMTsKKwl9Cisg ICAgICBlbHNlIGlmIChkZWxpbV9ieXRlcG9zIDwgMCAmJiBJU19ERUxJTUlURVIgKGMpKQorCXsK KwkgIGlmIChjaGFycG9zID4gcGFzdF9sZW4gJiYgbmV4dF90cmFuc2l0aW9uID09IDApCisJICAg IG5leHRfdHJhbnNpdGlvbiA9IGNoYXJwb3M7CisJICBpZiAoY2hhcnBvcyA+IHBhc3RfbGVuKQor CSAgICBicmVhazsKKwkgIGVsc2UgaWYgKGNoYXJwb3MgPCBwYXN0X2xlbikKKwkgICAgeworCSAg ICAgIGRlbGltX2J5dGVwb3MgPSBieXRlcG9zOworCSAgICAgIGRlbGltX2NoYXJwb3MgPSBjaGFy cG9zOworCSAgICB9CisJfQorICAgICAgaWYgKChzZWVuX2x0ciAmJiBDSEFSX0hBU19DQVRFR09S WSAoYywgJ1InKSkKKwkgIHx8IChzZWVuX3J0bCAmJiBDSEFSX0hBU19DQVRFR09SWSAoYywgJ0wn KSkpCisJeworCSAgaWYgKGNoYXJwb3MgPiBwYXN0X2xlbiAmJiBuZXh0X3RyYW5zaXRpb24gPT0g MCkKKwkgICAgbmV4dF90cmFuc2l0aW9uID0gY2hhcnBvczsKKwkgIGlmIChjaGFycG9zID49IHBh c3RfbGVuKQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIGJ5dGVwb3MgKz0gQ0hBUl9TVFJJTkcg KGMsIHN0cmluZyArIGJ5dGVwb3MpOworICAgICAgY2hhcnBvcysrOworCisgICAgICBpZiAoKHNl ZW5fbHRyICYmIENIQVJfSEFTX0NBVEVHT1JZIChjLCAnUicpKQorCSAgfHwgKHNlZW5fcnRsICYm IENIQVJfSEFTX0NBVEVHT1JZIChjLCAnTCcpKSkKKwl7CisJICBpZiAoY2hhcnBvcyA8PSBwYXN0 X2xlbikKKwkgICAgeworCSAgICAgIHN0YXJ0X2J5dGVwb3MgPSBieXRlcG9zOworCSAgICAgIHN0 YXJ0X2NoYXJwb3MgPSBjaGFycG9zOworCSAgICB9CisJfQorCisgICAgICBpZiAoY2hhcnBvcyA+ IHBhc3RfbGVuKQorCXsKKwkgIGlmIChDSEFSX0hBU19DQVRFR09SWSAoYywgJ1InKSkKKwkgICAg c2Vlbl9ydGwgPSB0cnVlOworCSAgZWxzZSBpZiAoQ0hBUl9IQVNfQ0FURUdPUlkgKGMsICdMJykp CisJICAgIHNlZW5fbHRyID0gdHJ1ZTsKKwl9CisgICAgfQorCisgIGlmIChjaGFycG9zID09IHBh c3RfbGVuKQorICAgIHsKKyAgICAgIHhmcmVlIChzdHJpbmcpOworICAgICAgaWYgKGJpZGlfY2Fj aGVfc2hlbHZlZCkKKwliaWRpX3Vuc2hlbHZlX2NhY2hlIChiaWRpX2NhY2hlLCBmYWxzZSk7Cisg ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgaWYgKGRlbGltX2NoYXJwb3MgPiBwYXN0X2xl bikKKyAgICB7CisgICAgICBieXRlcG9zID0gZGVsaW1fYnl0ZXBvczsKKyAgICAgIGNoYXJwb3Mg PSBkZWxpbV9jaGFycG9zOworICAgIH0KKworICBpbnQgY2xlbjsKKworICB3aGlsZSAoc3RhcnRf Ynl0ZXBvcyA8IGJ5dGVwb3MKKwkgJiYgSVNfREVMSU1JVEVSIChzdHJpbmdfY2hhcl9hbmRfbGVu Z3RoIChzdHJpbmcgKyBzdGFydF9ieXRlcG9zLAorCQkJCQkJICAmY2xlbikpCisJICYmIFhGSVhO VU0gKHBvc2l0aW9uKSA+IDApCisgICAgeworICAgICAgc3RhcnRfYnl0ZXBvcyArPSBjbGVuOwor ICAgICAgc3RhcnRfY2hhcnBvcysrOworICAgICAgcG9zaXRpb24gPSBtYWtlX2ZpeG51bSAoWEZJ WE5VTSAocG9zaXRpb24pIC0gMSk7CisgICAgfQorCisgIGlmIChzdGFydF9jaGFycG9zID09IGNo YXJwb3MpCisgICAgeworICAgICAgeGZyZWUgKHN0cmluZyk7CisgICAgICBpZiAoYmlkaV9jYWNo ZV9zaGVsdmVkKQorCWJpZGlfdW5zaGVsdmVfY2FjaGUgKGJpZGlfY2FjaGUsIGZhbHNlKTsKKyAg ICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHN0cmluZ1tieXRl cG9zXSA9IDA7CisgICAgICBjb250ZXh0LT5zdHJpbmcgPSBtYWtlX3N0cmluZyAoKGNoYXIgKilz dHJpbmcgKyBzdGFydF9ieXRlcG9zLAorCQkJCSAgICAgYnl0ZXBvcyAtIHN0YXJ0X2J5dGVwb3Mp OworICAgICAgY29udGV4dC0+c2NyaXB0ID0gc2NyaXB0OworICAgICAgeGZyZWUgKHN0cmluZyk7 CisgICAgfQorICBjb250ZXh0LT5wb3NpdGlvbiA9IHBvc2l0aW9uOworICBpZiAoc2Vlbl9sdHIg IT0gc2Vlbl9ydGwgJiYKKyAgICAgIHNlZW5fcnRsICE9IChpdF9vcmlnLT5iaWRpX2l0LnBhcmFn cmFwaF9kaXIgPT0gUjJMKSkKKyAgICB7CisgICAgICBjb250ZXh0LT5zdHJpbmcgPSBGbnJldmVy c2UgKGNvbnRleHQtPnN0cmluZyk7CisgICAgICBjb250ZXh0LT5wb3NpdGlvbiA9IG1ha2VfZml4 bnVtIChjaGFycG9zIC0gc3RhcnRfY2hhcnBvcyAtIDEKKwkJCQkgICAgICAgLSBYRklYTlVNIChj b250ZXh0LT5wb3NpdGlvbikpOworICAgIH0KKyAgaWYgKGJpZGlfY2FjaGVfc2hlbHZlZCkKKyAg ICBiaWRpX3Vuc2hlbHZlX2NhY2hlIChiaWRpX2NhY2hlLCBmYWxzZSk7CisKKyAgaXRfb3JpZy0+ Y29udGV4dF9jYWNoZS5uZXh0X3RyYW5zaXRpb24gPQorICAgIG5leHRfdHJhbnNpdGlvbiAtIHBh c3RfbGVuIC0gWEZJWE5VTSAoY29udGV4dC0+cG9zaXRpb24pOworICBpdF9vcmlnLT5jb250ZXh0 X2NhY2hlLmFnZSA9IDA7CisgIGl0X29yaWctPmNvbnRleHRfY2FjaGUuY29udGV4dCA9IGNvbnRl eHQ7CisgIHJldHVybiBjb250ZXh0OworfQorCiAvKiBSSUY6CiAgICBQcm9kdWNlIGdseXBocy9n ZXQgZGlzcGxheSBtZXRyaWNzIGZvciB0aGUgZGlzcGxheSBlbGVtZW50IElUIGlzCiAgICBsb2Fk ZWQgd2l0aC4gIFNlZSB0aGUgZGVzY3JpcHRpb24gb2Ygc3RydWN0IGl0IGluIGRpc3BleHRlcm4u aApAQCAtMjk5NjIsNyArMzAyMTUsNyBAQCBndWlfcHJvZHVjZV9nbHlwaHMgKHN0cnVjdCBpdCAq aXQpCiAKICAgaWYgKGl0LT53aGF0ID09IElUX0NIQVJBQ1RFUikKICAgICB7Ci0gICAgICB1bnNp Z25lZCBjaGFyMmI7CisgICAgICBMaXNwX09iamVjdCBjaGFyMmI7CiAgICAgICBzdHJ1Y3QgZmFj ZSAqZmFjZSA9IEZBQ0VfRlJPTV9JRCAoaXQtPmYsIGl0LT5mYWNlX2lkKTsKICAgICAgIHN0cnVj dCBmb250ICpmb250ID0gZmFjZS0+Zm9udDsKICAgICAgIHN0cnVjdCBmb250X21ldHJpY3MgKnBj bSA9IE5VTEw7CkBAIC0yOTk4NSw2ICszMDIzOCw3IEBAIGd1aV9wcm9kdWNlX2dseXBocyAoc3Ry dWN0IGl0ICppdCkKICAgICAgIGlmIChmb250LT52ZXJ0aWNhbF9jZW50ZXJpbmcpCiAJYm9mZiA9 IFZDRU5URVJfQkFTRUxJTkVfT0ZGU0VUIChmb250LCBpdC0+ZikgLSBib2ZmOwogCisgICAgICBz dHJ1Y3QgZ2x5cGhfY29udGV4dCAqY29udGV4dCA9IE5VTEw7CiAgICAgICBpZiAoaXQtPmNoYXJf dG9fZGlzcGxheSAhPSAnXG4nICYmIGl0LT5jaGFyX3RvX2Rpc3BsYXkgIT0gJ1x0JykKIAl7CiAJ ICBpdC0+bmdseXBocyA9IDE7CkBAIC0zMDAwMSwxMiArMzAyNTUsMTEgQEAgZ3VpX3Byb2R1Y2Vf Z2x5cGhzIChzdHJ1Y3QgaXQgKml0KQogIAkgICAgICBpdC0+ZGVzY2VudCA9IEZPTlRfREVTQ0VO VCAoZm9udCkgLSBib2ZmOwogIAkgICAgfQogCi0JICBpZiAoZ2V0X2NoYXJfZ2x5cGhfY29kZSAo aXQtPmNoYXJfdG9fZGlzcGxheSwgZm9udCwgJmNoYXIyYikpCisJICBjb250ZXh0ID0gbWFrZV9j b250ZXh0IChpdCwgZm9udCk7CisJICBpZiAoZ2V0X2NoYXJfZ2x5cGhfY29kZSAoaXQtPmNoYXJf dG9fZGlzcGxheSwgZm9udCwgJmNoYXIyYiwKKwkJCQkgICBjb250ZXh0KSkKIAkgICAgewogCSAg ICAgIHBjbSA9IGdldF9wZXJfY2hhcl9tZXRyaWMgKGZvbnQsICZjaGFyMmIpOwotCSAgICAgIGlm IChwY20tPndpZHRoID09IDAKLQkJICAmJiBwY20tPnJiZWFyaW5nID09IDAgJiYgcGNtLT5sYmVh cmluZyA9PSAwKQotCQlwY20gPSBOVUxMOwogCSAgICB9CiAKIAkgIGlmIChwY20pCkBAIC0zMDA5 MSw5ICszMDM0NCwxMCBAQCBndWlfcHJvZHVjZV9nbHlwaHMgKHN0cnVjdCBpdCAqaXQpCiAJCQkJ LyBGT05UX0hFSUdIVCAoZm9udCkpOwogCQkgIGFwcGVuZF9zdHJldGNoX2dseXBoIChpdCwgaXQt Pm9iamVjdCwgaXQtPnBpeGVsX3dpZHRoLAogCQkJCQlpdC0+YXNjZW50ICsgaXQtPmRlc2NlbnQs IGFzY2VudCk7CisJCSAgaXQtPmdseXBoX3Jvdy0+Z2x5cGhzW2l0LT5hcmVhXVtpdC0+Z2x5cGhf cm93LT51c2VkW2l0LT5hcmVhXSAtIDFdLmNvbnRleHQgPSBOVUxMOwogCQl9CiAJICAgICAgZWxz ZQotCQlhcHBlbmRfZ2x5cGggKGl0KTsKKwkJYXBwZW5kX2dseXBoIChpdCwgY29udGV4dCk7CiAK IAkgICAgICAvKiBJZiBjaGFyYWN0ZXJzIHdpdGggbGJlYXJpbmcgb3IgcmJlYXJpbmcgYXJlIGRp c3BsYXllZAogCQkgaW4gdGhpcyBsaW5lLCByZWNvcmQgdGhhdCBmYWN0IGluIGEgZmxhZyBvZiB0 aGUKQEAgLTMwMjQ1LDcgKzMwNDk5LDcgQEAgZ3VpX3Byb2R1Y2VfZ2x5cGhzIChzdHJ1Y3QgaXQg Kml0KQogCSAgICAgIGl0LT5uZ2x5cGhzID0gMTsKIAkgICAgICBpZiAoRk9OVF9UT09fSElHSCAo Zm9udCkpCiAJCXsKLQkJICBpZiAoZ2V0X2NoYXJfZ2x5cGhfY29kZSAoJyAnLCBmb250LCAmY2hh cjJiKSkKKwkJICBpZiAoZ2V0X2NoYXJfZ2x5cGhfY29kZSAoJyAnLCBmb250LCAmY2hhcjJiLCBO VUxMKSkKIAkJICAgIHsKIAkJICAgICAgcGNtID0gZ2V0X3Blcl9jaGFyX21ldHJpYyAoZm9udCwg JmNoYXIyYik7CiAJCSAgICAgIGlmIChwY20tPndpZHRoID09IDAKQEAgLTMwMzQyLDcgKzMwNTk2 LDcgQEAgZ3VpX3Byb2R1Y2VfZ2x5cGhzIChzdHJ1Y3QgaXQgKml0KQogCSAgaW50IGxiZWFyaW5n LCByYmVhcmluZzsKIAkgIGludCBpLCB3aWR0aCwgYXNjZW50LCBkZXNjZW50OwogCSAgaW50IGM7 Ci0JICB1bnNpZ25lZCBjaGFyMmI7CisJICBMaXNwX09iamVjdCBjaGFyMmI7CiAJICBzdHJ1Y3Qg Zm9udF9tZXRyaWNzICpwY207CiAJICBwdHJkaWZmX3QgcG9zOwogCkBAIC0zMDM4NCw3ICszMDYz OCw3IEBAIGd1aV9wcm9kdWNlX2dseXBocyAoc3RydWN0IGl0ICppdCkKIAkgIGlmICghIGZvbnRf bm90X2ZvdW5kX3ApCiAJICAgIHsKIAkgICAgICBnZXRfY2hhcl9mYWNlX2FuZF9lbmNvZGluZyAo aXQtPmYsIGMsIGl0LT5mYWNlX2lkLAotCQkJCQkgICZjaGFyMmIsIGZhbHNlKTsKKwkJCQkJICAm Y2hhcjJiLCBmYWxzZSwgTlVMTCk7CiAJICAgICAgcGNtID0gZ2V0X3Blcl9jaGFyX21ldHJpYyAo Zm9udCwgJmNoYXIyYik7CiAJICAgIH0KIApAQCAtMzA0NDUsNyArMzA2OTksOCBAQCBndWlfcHJv ZHVjZV9nbHlwaHMgKHN0cnVjdCBpdCAqaXQpCiAJICAgICAgZWxzZQogCQl7CiAJCSAgZ2V0X2No YXJfZmFjZV9hbmRfZW5jb2RpbmcgKGl0LT5mLCBjaCwgZmFjZV9pZCwKLQkJCQkJICAgICAgJmNo YXIyYiwgZmFsc2UpOworCQkJCQkgICAgICAmY2hhcjJiLCBmYWxzZSwKKwkJCQkJICAgICAgTlVM TCk7CiAJCSAgcGNtID0gZ2V0X3Blcl9jaGFyX21ldHJpYyAoZm9udCwgJmNoYXIyYik7CiAJCX0K IAkgICAgICBpZiAoISBwY20pCkBAIC0zNDM0NSw2ICszNDYwMCw3IEBAIHN5bXNfb2ZfeGRpc3Ag KHZvaWQpCiAgIERFRlNZTSAoUWRpc3BsYXksICJkaXNwbGF5Iik7CiAgIERFRlNZTSAoUXNwYWNl X3dpZHRoLCAic3BhY2Utd2lkdGgiKTsKICAgREVGU1lNIChRcmFpc2UsICJyYWlzZSIpOworICBE RUZTWU0gKFFnbHlwaCwgImdseXBoIik7CiAgIERFRlNZTSAoUXNsaWNlLCAic2xpY2UiKTsKICAg REVGU1lNIChRc3BhY2UsICJzcGFjZSIpOwogICBERUZTWU0gKFFtYXJnaW4sICJtYXJnaW4iKTsK ZGlmZiAtLWdpdCBhL3NyYy94Zm9udC5jIGIvc3JjL3hmb250LmMKaW5kZXggMTU2M2I0M2JmOS4u MzU0MmU1MjhiNCAxMDA2NDQKLS0tIGEvc3JjL3hmb250LmMKKysrIGIvc3JjL3hmb250LmMKQEAg LTkyMSw5ICs5MjEsMTAgQEAgeGZvbnRfaGFzX2NoYXIgKExpc3BfT2JqZWN0IGZvbnQsIGludCBj KQogICByZXR1cm4gKEVOQ09ERV9DSEFSIChyZXBlcnRvcnksIGMpICE9IENIQVJTRVRfSU5WQUxJ RF9DT0RFIChyZXBlcnRvcnkpKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkCi14Zm9udF9lbmNvZGVf Y2hhciAoc3RydWN0IGZvbnQgKmZvbnQsIGludCBjKQorc3RhdGljIExpc3BfT2JqZWN0Cit4Zm9u dF9lbmNvZGVfY2hhciAoc3RydWN0IGZvbnQgKmZvbnQsIGludCBjLCBzdHJ1Y3QgZ2x5cGhfY29u dGV4dCAqY29udGV4dCkKIHsKKyAgTGlzcF9PYmplY3QgcmV0OwogICBYRm9udFN0cnVjdCAqeGZv bnQgPSAoKHN0cnVjdCB4Zm9udF9pbmZvICopIGZvbnQpLT54Zm9udDsKICAgc3RydWN0IGNoYXJz ZXQgKmNoYXJzZXQ7CiAgIHVuc2lnbmVkIGNvZGU7CkBAIC05MzEsMTggKzkzMiwxOSBAQCB4Zm9u dF9lbmNvZGVfY2hhciAoc3RydWN0IGZvbnQgKmZvbnQsIGludCBjKQogICBjaGFyc2V0ID0gQ0hB UlNFVF9GUk9NX0lEIChmb250LT5lbmNvZGluZ19jaGFyc2V0KTsKICAgY29kZSA9IEVOQ09ERV9D SEFSIChjaGFyc2V0LCBjKTsKICAgaWYgKGNvZGUgPT0gQ0hBUlNFVF9JTlZBTElEX0NPREUgKGNo YXJzZXQpKQotICAgIHJldHVybiBGT05UX0lOVkFMSURfQ09ERTsKKyAgICByZXR1cm4gUW5pbDsK ICAgaWYgKGZvbnQtPnJlcGVydG9yeV9jaGFyc2V0ID49IDApCiAgICAgewogICAgICAgY2hhcnNl dCA9IENIQVJTRVRfRlJPTV9JRCAoZm9udC0+cmVwZXJ0b3J5X2NoYXJzZXQpOwotICAgICAgcmV0 dXJuIChFTkNPREVfQ0hBUiAoY2hhcnNldCwgYykgIT0gQ0hBUlNFVF9JTlZBTElEX0NPREUgKGNo YXJzZXQpCi0JICAgICAgPyBjb2RlIDogRk9OVF9JTlZBTElEX0NPREUpOworICAgICAgcmV0ID0g RU5DT0RFX0NIQVIgKGNoYXJzZXQsIGMpICE9IENIQVJTRVRfSU5WQUxJRF9DT0RFIChjaGFyc2V0 KQorCT8gbWFrZV9maXhudW0gKGNvZGUpIDogUW5pbDsKKyAgICAgIHJldHVybiByZXQ7CiAgICAg fQotICByZXR1cm4gKHhmb250X2dldF9wY20gKHhmb250LCBjb2RlKSA/IGNvZGUgOiBGT05UX0lO VkFMSURfQ09ERSk7CisgIHJldHVybiAoeGZvbnRfZ2V0X3BjbSAoeGZvbnQsIGNvZGUpID8gbWFr ZV9maXhudW0gKGNvZGUpIDogUW5pbCk7CiB9CiAKIHN0YXRpYyB2b2lkCi14Zm9udF90ZXh0X2V4 dGVudHMgKHN0cnVjdCBmb250ICpmb250LCBjb25zdCB1bnNpZ25lZCBpbnQgKmNvZGUsCit4Zm9u dF90ZXh0X2V4dGVudHMgKHN0cnVjdCBmb250ICpmb250LCBjb25zdCBMaXNwX09iamVjdCAqY29k ZSwKIAkJICAgIGludCBuZ2x5cGhzLCBzdHJ1Y3QgZm9udF9tZXRyaWNzICptZXRyaWNzKQogewog ICBYRm9udFN0cnVjdCAqeGZvbnQgPSAoKHN0cnVjdCB4Zm9udF9pbmZvICopIGZvbnQpLT54Zm9u dDsKQEAgLTk1Myw5ICs5NTUsOSBAQCB4Zm9udF90ZXh0X2V4dGVudHMgKHN0cnVjdCBmb250ICpm b250LCBjb25zdCB1bnNpZ25lZCBpbnQgKmNvZGUsCiAgICAgewogICAgICAgc3RhdGljIFhDaGFy U3RydWN0ICpwY207CiAKLSAgICAgIGlmIChjb2RlW2ldID49IDB4MTAwMDApCisgICAgICBpZiAo WEZJWE5VTSAoY29kZVtpXSkgPj0gMHgxMDAwMCkKIAljb250aW51ZTsKLSAgICAgIHBjbSA9IHhm b250X2dldF9wY20gKHhmb250LCBjb2RlW2ldKTsKKyAgICAgIHBjbSA9IHhmb250X2dldF9wY20g KHhmb250LCBYRklYTlVNIChjb2RlW2ldKSk7CiAgICAgICBpZiAoISBwY20pCiAJY29udGludWU7 CiAgICAgICBpZiAoZmlyc3QpCkBAIC0xMDA1LDcgKzEwMDcsNyBAQCB4Zm9udF9kcmF3IChzdHJ1 Y3QgZ2x5cGhfc3RyaW5nICpzLCBpbnQgZnJvbSwgaW50IHRvLCBpbnQgeCwgaW50IHksCiAgICAg ICBVU0VfU0FGRV9BTExPQ0E7CiAgICAgICBjaGFyICpzdHIgPSBTQUZFX0FMTE9DQSAobGVuKTsK ICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW4gOyBpKyspCi0Jc3RyW2ldID0gcy0+Y2hhcjJiW2Zy b20gKyBpXSAmIDB4RkY7CisJc3RyW2ldID0gWEZJWE5VTSAocy0+Y2hhcjJiW2Zyb20gKyBpXSkg JiAweEZGOwogICAgICAgYmxvY2tfaW5wdXQgKCk7CiAgICAgICBpZiAod2l0aF9iYWNrZ3JvdW5k KQogCXsKQEAgLTEwMzgsMjEgKzEwNDAsMjUgQEAgeGZvbnRfZHJhdyAoc3RydWN0IGdseXBoX3N0 cmluZyAqcywgaW50IGZyb20sIGludCB0bywgaW50IHgsIGludCB5LAogICAgICAgaWYgKHMtPnBh ZGRpbmdfcCkKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgICAgICAgewotICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY29kZSA9IHMtPmNoYXIyYltmcm9tICsgaV07Ci0gICAgICAg ICAgICBjb25zdCBYQ2hhcjJiIGNoYXIyYiA9IHsgLmJ5dGUxID0gY29kZSA+PiA4LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ieXRlMiA9IGNvZGUgJiAweEZGIH07CisJ ICAgIExpc3BfT2JqZWN0IGNvZGUgPSBzLT5jaGFyMmJbZnJvbSArIGldOworCSAgICBjb25zdCBY Q2hhcjJiIGNoYXIyYiA9IHsKKwkgICAgICAuYnl0ZTEgPSBYRklYTlVNIChjb2RlKSA+PiA4LAor CSAgICAgIC5ieXRlMiA9IFhGSVhOVU0gKGNvZGUpICYgMHhmZgorCSAgICB9OwogICAgICAgICAg ICAgWERyYXdJbWFnZVN0cmluZzE2IChkaXNwbGF5LCBGUkFNRV9YX0RSQVdBQkxFIChzLT5mKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2MsIHggKyBpLCB5LCAmY2hhcjJiLCAx KTsKICAgICAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICBVU0VfU0FG RV9BTExPQ0E7Ci0gICAgICAgICAgY29uc3QgdW5zaWduZWQgKmNvZGUgPSBzLT5jaGFyMmIgKyBm cm9tOworICAgICAgICAgIGNvbnN0IExpc3BfT2JqZWN0ICpjb2RlID0gcy0+Y2hhcjJiICsgZnJv bTsKICAgICAgICAgICBYQ2hhcjJiICpjaGFyMmI7CiAgICAgICAgICAgU0FGRV9OQUxMT0NBIChj aGFyMmIsIDEsIGxlbik7CiAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkK LSAgICAgICAgICAgIGNoYXIyYltpXSA9IChYQ2hhcjJiKSB7IC5ieXRlMSA9IGNvZGVbaV0gPj4g OCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ieXRlMiA9IGNvZGVbaV0g JiAweEZGIH07CisgICAgICAgICAgICBjaGFyMmJbaV0gPSAoWENoYXIyYikgeworCSAgICAgIC5i eXRlMSA9IFhGSVhOVU0gKGNvZGVbaV0pID4+IDgsCisJICAgICAgLmJ5dGUyID0gWEZJWE5VTSAo Y29kZVtpXSkgJiAweEZGCisJICAgIH07CiAgICAgICAgICAgWERyYXdJbWFnZVN0cmluZzE2IChk aXNwbGF5LCBGUkFNRV9YX0RSQVdBQkxFIChzLT5mKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdjLCB4LCB5LCBjaGFyMmIsIGxlbik7CiAgICAgICAgICAgU0FGRV9GUkVFICgpOwpA QCAtMTA2MywyMSArMTA2OSwyNSBAQCB4Zm9udF9kcmF3IChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpz LCBpbnQgZnJvbSwgaW50IHRvLCBpbnQgeCwgaW50IHksCiAgICAgICBpZiAocy0+cGFkZGluZ19w KQogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICAgICAgICB7Ci0gICAgICAgICAgICBj b25zdCB1bnNpZ25lZCBjb2RlID0gcy0+Y2hhcjJiW2Zyb20gKyBpXTsKLSAgICAgICAgICAgIGNv bnN0IFhDaGFyMmIgY2hhcjJiID0geyAuYnl0ZTEgPSBjb2RlID4+IDgsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLmJ5dGUyID0gY29kZSAmIDB4RkYgfTsKKyAgICAgICAg ICAgIGNvbnN0IExpc3BfT2JqZWN0IGNvZGUgPSBzLT5jaGFyMmJbZnJvbSArIGldOworICAgICAg ICAgICAgY29uc3QgWENoYXIyYiBjaGFyMmIgPSB7CisJICAgICAgLmJ5dGUxID0gWEZJWE5VTSAo Y29kZSkgPj4gOCwKKwkgICAgICAuYnl0ZTIgPSBYRklYTlVNIChjb2RlKSAmIDB4RkYKKwkgICAg fTsKICAgICAgICAgICAgIFhEcmF3U3RyaW5nMTYgKGRpc3BsYXksIEZSQU1FX1hfRFJBV0FCTEUg KHMtPmYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2MsIHggKyBpLCB5LCAmY2hhcjJi LCAxKTsKICAgICAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICBVU0Vf U0FGRV9BTExPQ0E7Ci0gICAgICAgICAgY29uc3QgdW5zaWduZWQgKmNvZGUgPSBzLT5jaGFyMmIg KyBmcm9tOworICAgICAgICAgIGNvbnN0IExpc3BfT2JqZWN0ICpjb2RlID0gcy0+Y2hhcjJiICsg ZnJvbTsKICAgICAgICAgICBYQ2hhcjJiICpjaGFyMmI7CiAgICAgICAgICAgU0FGRV9OQUxMT0NB IChjaGFyMmIsIDEsIGxlbik7CiAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsr aSkKLSAgICAgICAgICAgIGNoYXIyYltpXSA9IChYQ2hhcjJiKSB7IC5ieXRlMSA9IGNvZGVbaV0g Pj4gOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ieXRlMiA9IGNvZGVb aV0gJiAweEZGIH07CisgICAgICAgICAgICBjaGFyMmJbaV0gPSAoWENoYXIyYikgeworCSAgICAg IC5ieXRlMSA9IFhGSVhOVU0gKGNvZGVbaV0pID4+IDgsCisJICAgICAgLmJ5dGUyID0gWEZJWE5V TSAoY29kZVtpXSkgJiAweEZGCisJICAgIH07CiAgICAgICAgICAgWERyYXdTdHJpbmcxNiAoZGlz cGxheSwgRlJBTUVfWF9EUkFXQUJMRSAocy0+ZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAg Z2MsIHgsIHksIGNoYXIyYiwgbGVuKTsKICAgICAgICAgICBTQUZFX0ZSRUUgKCk7CmRpZmYgLS1n aXQgYS9zcmMveHRlcm0uYyBiL3NyYy94dGVybS5jCmluZGV4IDc5ODljZWNlYzcuLjBjOGMyMmNk OWIgMTAwNjQ0Ci0tLSBhL3NyYy94dGVybS5jCisrKyBiL3NyYy94dGVybS5jCkBAIC0xOTkzLDcg KzE5OTMsNyBAQCB4X2RyYXdfY29tcG9zaXRlX2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChzdHJ1 Y3QgZ2x5cGhfc3RyaW5nICpzKQogeF9kcmF3X2dseXBobGVzc19nbHlwaF9zdHJpbmdfZm9yZWdy b3VuZCAoc3RydWN0IGdseXBoX3N0cmluZyAqcykKIHsKICAgc3RydWN0IGdseXBoICpnbHlwaCA9 IHMtPmZpcnN0X2dseXBoOwotICB1bnNpZ25lZCBjaGFyMmJbOF07CisgIExpc3BfT2JqZWN0IGNo YXIyYls4XTsKICAgaW50IHgsIGksIGo7CiAKICAgLyogSWYgZmlyc3QgZ2x5cGggb2YgUyBoYXMg YSBsZWZ0IGJveCBsaW5lLCBzdGFydCBkcmF3aW5nIHRoZSB0ZXh0CkBAIC0yMDQ3LDcgKzIwNDcs NyBAQCB4X2RyYXdfZ2x5cGhsZXNzX2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChzdHJ1Y3QgZ2x5 cGhfc3RyaW5nICpzKQogCiAJICAvKiBJdCBpcyBhc3N1cmVkIHRoYXQgYWxsIExFTiBjaGFyYWN0 ZXJzIGluIFNUUiBpcyBBU0NJSS4gICovCiAJICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCi0g ICAgICAgICAgICBjaGFyMmJbal0gPSBzLT5mb250LT5kcml2ZXItPmVuY29kZV9jaGFyIChzLT5m b250LCBzdHJbal0pICYgMHhGRkZGOworICAgICAgICAgICAgY2hhcjJiW2pdID0gcy0+Zm9udC0+ ZHJpdmVyLT5lbmNvZGVfY2hhciAocy0+Zm9udCwgc3RyW2pdLCBOVUxMKTsKIAkgIHMtPmZvbnQt PmRyaXZlci0+ZHJhdyAocywgMCwgdXBwZXJfbGVuLAogCQkJCSB4ICsgZ2x5cGgtPnNsaWNlLmds eXBobGVzcy51cHBlcl94b2ZmLAogCQkJCSBzLT55YmFzZSArIGdseXBoLT5zbGljZS5nbHlwaGxl c3MudXBwZXJfeW9mZiwKLS0gCjIuMjcuMC5yYzAKCg== --00000000000014fd0c05a6e4e349--