Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wD17j-002WTe-08 for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Apr 2026 14:21:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wD17e-00HLNM-33 for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Apr 2026 14:21:43 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wD136-00GYE7-0z for pgsql-hackers@lists.postgresql.org; Wed, 15 Apr 2026 14:17:01 +0000 Received: from mail-dl1-x1235.google.com ([2607:f8b0:4864:20::1235]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wD0Po-00000001Dju-0Crv for pgsql-hackers@lists.postgresql.org; Wed, 15 Apr 2026 13:36:26 +0000 Received: by mail-dl1-x1235.google.com with SMTP id a92af1059eb24-12711867ca1so669214c88.3 for ; Wed, 15 Apr 2026 06:36:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776260181; cv=none; d=google.com; s=arc-20240605; b=bOYPm0M5yZ2wXzhqO9894Cs6HT990uJdIfOINW8CazM8mExw1qzEQ4ve0zAJQdjj1d Bbo3ymlZ0d6+7JT6oemMCYCFumgspj8CH98YIVI0kwxGx7aRt3XL2ni+kmkHkYIt04h1 +5BOUrmj59ODjtfUnCueN0w1J9uXoAbnQUdXUHtbn7iZAzfW5u9FNC2xbgFb4NG+kbe5 mEgowYvb5HpQ/2XwUbnmomIqXPoDAr7vX2QcZ9fJhZSIicaUkdPqtGdpClhCgp+jqG2j 5IawQtYyXAMS86huYSvgQ/buWsQKSWsdgS5evojv9/A4jhQyG5NoyMdqffOPkC7RfsPZ G2Iw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:mime-version:dkim-signature; bh=nzdkui+cvXuxtVIlhhmKakFu8okT4w68vqzgdtmzx14=; fh=cTQzadGmn+LRpZ2Dp82eLmZDqRyeyaYX0BMJeXEnBNQ=; b=gB/mrS0RSfLyixpuexyNjxfuCgBlsMDCKELVw5aqN/MDTORvsgM1EtQLYhPVdd55ia mc77KqXR9XkpJ8NDE1RAH+fUT9b5kB/074rm452DgVruiKJdb+cgoVLgQqmn4F+6ENaM LLva46jaCKpKyX1mIh7G2BIe3820Sm0lksV1c/6oddRIiPLd3n2nRdKqW7370Y1yqwKZ ZXCfMmvD/ENwF5F/nNipfwMkbNbfRSQ73qMOFJW8iHBZckZEzTTHDHhc2z7ukluZoLeI uLTpezpG2uS3qxGK37ehYB2k8sJ0iQ5OqCCk5IMkTwg0lHtn56P/uIIhFe9tqVPRlJLN 08LQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776260181; x=1776864981; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=nzdkui+cvXuxtVIlhhmKakFu8okT4w68vqzgdtmzx14=; b=DW0Tz0PcfJxSt65vRcDcRS1DZAaiEfpP1QXMVDXt/iTzZ3St4lQmJoaLQ5ZR5Cyac0 5YmqOVAokQXE2T5/MSNY+7Ky74kNjMklLYovuNl7pWdfbmF9pU+SWN/rYrJR0pDNDvDD r/rZu2RFqEbMCthh6hiakIhLO10iTTjhOqleNK1zzPiabk4chXbMt5d1Hr5wf2apXVsN esqA6gmrG25y6FADBDX0KSjZJRBe0ht/SY8+3zQiyJKdAI3bwAx6XZ0rI4v0wHvxKFtP arCH07TfmknbpyL6GZG4uYHHthQq1klk9HnOYkTZowxmPa0L9ebmX9B++RtqcMFyq/IL /HqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776260181; x=1776864981; h=cc:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=nzdkui+cvXuxtVIlhhmKakFu8okT4w68vqzgdtmzx14=; b=cpLjFGJ/8V6NFqRyiEtpU5gxQgIqaq9PB9rdZ0kZ2H28h+T3rk6L40iNVrKFd4hF3t Yj8c/EF3p3TJ1CqJrhQp/VOr4mMBpy3aZJEqmLwQBcMNEr8GY5chgmOI4YIqyO6mASqb 4ToUu8COqqLLNluOCxmd4EflgOQJt0LHlNLJ7CDQ7SYPioE83aR9Wt/gHdsA7VCB8kfD aMGWq0VSdqfTr+filFCwlvtFglWFGFNmmxQVhX5Alnx4s08jN+5lJeJ0jgE/Vsu1bCk3 4Cxid5/jXWAjZKUi4qPx4gRO7AssuiBB1A9Bg5zUpVBpPEFwi1HSzjxErRgNOAK/Ofs2 HwWA== X-Gm-Message-State: AOJu0YzhxSYWwH6FPMsDmk4GdBrUbQiLi35dVmTo8fsdisriV9GAlY2l etx1vX8jiqoi/NHMuNgnwDlW7HCG0jy70nbnaNMsGX55+FKOAeKIDWarj9B2WzJe17bFzBITOM9 df2zYUieIbjKci5o+7ZQ61D5ffiOLdS587nVs X-Gm-Gg: AeBDievkwoAVH1N2oR0rqVnRZ/0aXN+fR10T56rWHGznirG6cTeCzTgq+fIbwnwtjls JvGy4nviG//ryRT8gI+tuznflCTG00TlvSWv2MN3H8wCUIStA3zTqkQ8eeq0oWdnHqCyYQ9h5Ta dHG9MzvDbiTLD150Nn3aEHNhWQcmXi8OvN1BOj8s2MqjxBEdnLSqNomSQRSRAmzUCGF1KN93LVh SdQoGY0dg/hNpcEX5S6aRg3x7lzWY/hAoyrdVHTRWVC5RUwQgM/PklCWYQPFoCXrI9sXijMVots mGdXAkSLcbDwhDHIWZ3dLADXDjwn32Weevebyb8/3UWNum2H2n8ZTbEnCAhSbr7rIRa1LdZMUnY Xz7VpGPFyihKn8i/evhzWXn8HL30ezxJq X-Received: by 2002:a05:7300:dc85:b0:2dc:e799:934f with SMTP id 5a478bee46e88-2de7b2746e1mr550701eec.3.1776260180474; Wed, 15 Apr 2026 06:36:20 -0700 (PDT) MIME-Version: 1.0 From: Thomas Munro Date: Thu, 16 Apr 2026 01:43:26 +1200 X-Gm-Features: AQROBzBYJTdJHUaD5dTkMIJPw-m_iqVc7b5qQJ9M-wmPEXDzILt94b80-OhZry8 Message-ID: Subject: Experimenting with wider Unicode storage To: PostgreSQL Hackers Cc: Tatsuo Ishii , Henson Choi Content-Type: multipart/mixed; boundary="00000000000016954d064f7fcda7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000016954d064f7fcda7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, We only allow one character encoding per database. The SQL standard and most comparable RDBMSs are more flexible, though the details vary. In most, you can attach CHARACTER SET to column definitions, a whole CREATE TABLE (non-standard), CREATE DOMAIN, CREATE SCHEMA and probably more places. In some, encoding is implied by COLLATE instead (non-standard). When different encodings meet, text is transcoded, which works but is bad for performance. Our single database encoding also has some restrictions: it must encode ASCII as ASCII, and any byte that is part of a multibyte sequence must not look like ASCII, since many code paths require that and fixing that is hard. That excludes a few encodings that people want. That's all OK by now, as modern information systems use Unicode everywhere. There is one practical problem that causes people to complain[2] about PostgreSQL though: about half of the global population uses a language that arbitrarily gained a byte per character by switching to UTF-8 compared to various legacy encodings or GB18030. That's storage and RAM that you have to pay for up front and forever (space, I/O[3]). I wondered about inventing new PostgreSQL-backend-compatible encodings that swizzle bits around to make CJK/I languages fit, but I kept coming back to Unicode. In many systems there is a special way to use UTF-16, which gets you back to around two bytes per character for Chinese, Japanese, Korean and probably Indian languages. In MySQL/MariaDB, you can use various encodings of UTF-16 as a CHARACTER SET with the normal text types, and in Oracle, DB2, SQL Server/Sybase you can use a separate NVARCHAR type for UTF-16, alongside the regular text types whose encodings are controlled by CHARACTER SET or COLLATE. N* types are shorthand for the standardese "NATIONAL ", a string in an unspecified special encoding, for which they all chose some kind of UTF-16. At first I thought that with first class extension types as one of our superpowers, we might be able to do that with an extension, but the problem there is that text is so tangled up with locales, and I certainly didn't want to convert all over the place. So I tried to hack up a minimal demonstration of what a separate UTF-16 text type might look like as a core data type. You can save a lot of space if you have a separate "utf16" type ("national text"?), but only for East and South Asian languages: + language | octets | delta | string +----------+---------+-------+---------------------------------------------= ---- + English | 45=E2=86=9290 | +100% | In a hole in the ground there lived = a hobbit. + Spanish | 44=E2=86=9286 | +95% | En un agujero en el suelo, viv=C3=AD= a un hobbit. + Russian | 59=E2=86=9266 | +12% | =D0=92 =D0=BD=D0=BE=D1=80=D0=B5 =D0= =BF=D0=BE=D0=B4 =D0=B7=D0=B5=D0=BC=D0=BB=D0=B5=D0=B9 =D0=B6=D0=B8=D0=BB-=D0= =B1=D1=8B=D0=BB =D1=85=D0=BE=D0=B1=D0=B1=D0=B8=D1=82. + Arabic | 57=E2=86=9264 | +12% | =D9=83=D8=A7=D9=86 =D9=8A=D8=B9=D9= =8A=D8=B4 =D9=87=D9=88=D8=A8=D9=8A=D8=AA =D9=81=D9=8A =D8=AD=D9=81=D8=B1=D8= =A9 =D9=81=D9=8A =D8=A7=D9=84=D8=A3=D8=B1=D8=B6. + Hebrew | 43=E2=86=9248 | +12% | =D7=91=D7=AA=D7=95=D7=9A =D7=97=D7= =95=D7=A8 =D7=91=D7=90=D7=93=D7=9E=D7=94 =D7=97=D7=99 =D7=94=D7=95=D7=91=D7= =99=D7=98. + Greek | 74=E2=86=9282 | +11% | =CE=A3=CE=B5 =CE=BC=CE=B9=CE=B1 =CF= =84=CF=81=CF=8D=CF=80=CE=B1 =CF=83=CF=84=CE=BF =CE=AD=CE=B4=CE=B1=CF=86=CE= =BF=CF=82 =CE=B6=CE=BF=CF=8D=CF=83=CE=B5 =CE=AD=CE=BD=CE=B1 =CF=87=CF=8C=CE= =BC=CF=80=CE=B9=CF=84. + Korean | 55=E2=86=9246 | -16% | =EB=95=85=EC=86=8D =EC=96=B4=EB=8A= =90 =EA=B5=AC=EB=A9=8D=EC=97=90 =ED=95=9C =ED=98=B8=EB=B9=97=EC=9D=B4 =EC= =82=B4=EA=B3=A0 =EC=9E=88=EC=97=88=EB=8B=A4. + Hindi | 111=E2=86=9286 | -23% | =E0=A4=9C=E0=A4=AE=E0=A5=80=E0=A4=A8= =E0=A4=AE=E0=A5=87=E0=A4=82 =E0=A4=AC=E0=A4=A8=E0=A5=87 =E0=A4=8F=E0=A4=95= =E0=A4=97=E0=A4=A1=E0=A5=8D=E0=A4=A2=E0=A5=87 =E0=A4=AE=E0=A5=87=E0=A4=82 = =E0=A4=8F=E0=A4=95 =E0=A4=B9=E0=A5=89=E0=A4=AC=E0=A4=BF=E0=A4=9F =E0=A4=B0= =E0=A4=B9=E0=A4=A4=E0=A4=BE =E0=A4=A5=E0=A4=BE=E0=A5=A4 + Tamil | 146=E2=86=92108 | -26% | =E0=AE=85=E0=AE=A8=E0=AF=8D=E0=AE=A4= =E0=AE=A8=E0=AE=BF=E0=AE=B2=E0=AE=A4=E0=AF=8D=E0=AE=A4=E0=AE=BF=E0=AE=B2= =E0=AF=8D =E0=AE=92=E0=AE=B0=E0=AF=81 =E0=AE=A4=E0=AF=81=E0=AE=B3=E0=AF=88= =E0=AE=AF=E0=AE=BF=E0=AE=B2=E0=AF=8D =E0=AE=92=E0=AE=B0=E0=AF=81 =E0=AE=B9= =E0=AE=BE=E0=AE=AA=E0=AE=BF=E0=AE=9F=E0=AF=8D =E0=AE=B5=E0=AE=9A=E0=AE=BF=E0=AE=A4=E0=AF=8D=E0=AE=A4=E0=AF=81 =E0=AE=B5= =E0=AE=A8=E0=AF=8D=E0=AE=A4=E0=AE=A4=E0=AF=81. + Chinese | 51=E2=86=9234 | -33% | =E5=9C=A8=E5=9C=B0=E4=B8=8B=E4=B8=80= =E4=B8=AA=E6=B4=9E=E9=87=8C=EF=BC=8C=E4=BD=8F=E7=9D=80=E4=B8=80=E4=B8=AA=E9= =9C=8D=E6=AF=94=E7=89=B9=E4=BA=BA=E3=80=82 + Japanese | 66=E2=86=9244 | -33% | =E7=A9=B4=E3=81=AE=E3=81=AA=E3=81=8B= =E3=81=AB=E3=80=81=E3=81=B2=E3=81=A8=E3=82=8A=E3=81=AE=E3=83=9B=E3=83=93=E3= =83=83=E3=83=88=E3=81=8C=E6=9A=AE=E3=82=89=E3=81=97=E3=81=A6=E3=81=84=E3=81= =9F=E3=80=82 It's actually -33% in Korean too without spaces, or if you use double-width spaces, a more common stylistic choice IIUC (this Korean string happens to use ASCII spaces). The same sort of thing explains why Russian, Arabic, Hewbrew and Greek lose ~12% instead of breaking even: they share space and some punctuation with ASCII. The attached is highly exploratory concept code to try the idea out and see if experts in CJK computing, defenders of the type system and others think it might be worth exploring further. Some of the technical challenges and observations I spotted along the way: * "text" (etc) and "utf16" need to be comparable incrementally without conversion * N^2 explosions in cross-type support function definitions must surely be avoided * the solution to that is surely generic programming, but PostgreSQL is written in ye olde C * therefore, this POC patch is big on macros as poor-man's C++ * to support fast paths like memcmp()-based ucs_basic comparison you need big endian UTF-16 * to stuff UTF-16 into varlena you need to tolerate unaligned access * by a happy coincidence, ICU supports big endian, unaligned UTF-16 * Windows libc locales might in theory allow UTF-16, but that'd have to be native endian, which I didn't implement * other systems actually allow both endiannesses as encodings or subtypes, at the user's option * they also allow you to control whether surrogates are allowed In this patch you can see some string iterator concepts that I have been hacking on for an entirely different purpose, namely trying to figure out how to make our multibyte string support go faster (and also be safer) by hoisting all the character-at-a-time loops out to specialisations in string handling functions. That's not shown here. Neither is any kind of silent transcoding that plagues other systems that do this kind of thing: * the "utf16" type is only allowed to contain text that is a ASCII, LATIN1 or Unicode, depending on the database encoding * for UTF8, it's all of Unicode, for which mb_iterator can trivally produce UTF-16 or UTF-32 * for LATIN1, that becomes trivial casting since LATIN1 is a strict subset of Unicode * for anything else, utf16 only allows ASCII characters, as a degraded mode just to allow the tests to pass In other words, so far utf16 is not allowed to represent anything that "text" could not represent and convert trivially. That was originally a decision to make a quick proof-of-concept plausible, but maybe it's even a good idea... I have no doubt that there are lots of complicated problems that I haven't met yet, when you add more types. What I was trying to explore here was whether you can exclude most of them by providing enough conversion-free (incremental) cross-type support. This is something SQL Server DBAs talk about: mixtures of NVARCHAR and VARCHAR columns and index befuddle the planner and introduce hidden execution costs if you're not careful. It struck me that with the above restriction you could perhaps keep all strings cheaply and incrementally comparable. There are still some things you can't do: * if you're comparing "text" with "utf16" then you lose the length-based not-equal fast path * that's a big deal if it means detoasting Sharing for discussion only. It has enough working to support converting individual columns text->utf16 and use btree indexes. Many more text functions would need to be converted to generic form, and many more support functions would be needed for full functionality. (Individual Indian languages could in theory be compacted even further to single-byte ISCII. ISCII is in general infeasible as a server encoding because it has stateful shifts between many scripts, but single-script variants of ISCII as supported on some Unixen would in theory be plausible. Since India has so many languages and scripts and information systems often need to support all of them, I am reliably informed that UTF-8 reigns supreme there despite taking 3 bytes to represent the tiny 6 bit (?) character set of any individual language like Devanagari (Hindi etc). GNU/Linux doesn't even support ISCII, so that idea is basically DOA.) [1] https://www.postgresql.org/docs/current/infoschema-character-sets.html [2] https://www.postgresql.org/message-id/flat/ME2PR01MB2532E72B514DC46ED0E= 10F798A0C0%40ME2PR01MB2532.ausprd01.prod.outlook.com#7d490f97a3df6dfef61e48= 5161e72e06 --00000000000016954d064f7fcda7 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-pg_stack_alloc-Provide-API-for-stack-allocation.patch" Content-Disposition: attachment; filename="0001-pg_stack_alloc-Provide-API-for-stack-allocation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo03gx8r0 RnJvbSA2NWVkMTQyMWZlMTQ2OWJkNzE1MmRiOTAwOWIzYTIyY2Y4MmE5ZWNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjcgRmViIDIwMjYgMjI6MjE6MzYgKzEzMDAKU3ViamVjdDogW1BBVENIIDEv Ml0gcGdfc3RhY2tfYWxsb2M6IFByb3ZpZGUgQVBJIGZvciBzdGFjayBhbGxvY2F0aW9uLgoKU2V2 ZXJhbCBwbGFjZXMgaGF2ZSBsb25nIHVzZWQgYSBsYXJnZSBhcnJheSBvbiB0aGUgc3RhY2sgZm9y IHRlbXBvcmFyeQpvYmplY3RzIG9mIGR5bmFtaWMgc2l6ZSwgYW5kIHN3aXRjaGVkIHRvIHBhbGxv YygpL3BmcmVlKCkgd2hlbiBpdCB3YXMKZnVsbC4gIFRoaXMgY29tbWl0IHByb3ZpZGVzIGEgY2Vu dHJhbGl6ZWQgQVBJIGZvciB0aGF0IHBhdHRlcm4uCgpJdCBpcyBpbXBsZW1lbnRlZCB0aGUgc2Ft ZSB3YXksIGJ1dCB0aGUgaW50ZXJmYWNlIGxvb2tzIGxpa2UgcGFsbG9jLmgncywKaW5jbHVkaW5n IHRoZSB0eXBlLXNhZmV0eSBmZWF0dXJlcyBhZGRlZCBieSBjb21taXQgMjAxNjA1NWEgYW5kIGxh dGVyCmRldmVsb3BtZW50cy4gIEEgc21hbGwgc2V0IG9mIGZ1bmN0aW9ucyBsaWtlIHN0cmR1cCgp IGlzIGFsc28gcHJvdmlkZWQsCmZvciBjb21tb24gb3BlcmF0aW9ucy4KCkxhdGVyIHBhdGNoZXMg d2lsbCBhZG9wdCB0aGUgbmV3IEFQSSBpbiB2YXJpb3VzIHBsYWNlcy4KClJldmlld2VkLWJ5OgpE aXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBJTJCaFVLRyUyQml4VVVZT0dSY3VacGtr NXBtSlphVVF2NlZDUEFqZFRaWEZQNXZBOGp4Y0ElNDBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9p bmNsdWRlL3V0aWxzL3BnX3N0YWNrX2FsbG9jLmggICAgICB8IDMxNSArKysrKysrKysrKysrKysr KysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW50ZXJuYWxzLm91dCB8ICAxMiAr CiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICAgICAgfCAgIDIgKy0KIHNyYy90 ZXN0L3JlZ3Jlc3MvcmVncmVzcy5jICAgICAgICAgICAgICB8ICA1MSArKysrCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9pbnRlcm5hbHMuc3FsICAgICAgfCAgMTEgKwogNSBmaWxlcyBjaGFuZ2VkLCAz OTAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9p bmNsdWRlL3V0aWxzL3BnX3N0YWNrX2FsbG9jLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2ludGVybmFscy5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9yZWdyZXNzL3NxbC9pbnRlcm5hbHMuc3FsCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvcGdfc3RhY2tfYWxsb2MuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX3N0YWNrX2FsbG9j LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJiOGM1ODU5N2I5Ci0t LSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfc3RhY2tfYWxsb2MuaApAQCAt MCwwICsxLDMxNSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdfc3RhY2tfYWxsb2Mu aAorICoJCUFsbG9jYXRvciBmb3Igb2JqZWN0cyB0aGF0IGRvbid0IGVzY2FwZSB0aGUgY3VycmVu dCBmdW5jdGlvbi4KKyAqCisgKiBBIHBhbGxvYygpLWxpa2UgaW50ZXJmYWNlIGZvciBhbGxvY2F0 aW5nIG1lbW9yeSBvbiB0aGUgc3RhY2suICBUaGUgaW5pdGlhbAorICogaW1wbGVtZW50YXRpb24g dXNlcyBhbiBhcnJheSBkZWNsYXJlZCBzdGF0aWNhbGx5LgorICoKKyAqIE9uY2Ugc3RhY2sgc3Bh Y2UgaXMgZXhoYXVzdGVkLCBhbGxvY2F0aW9ucyBzaWxlbnRseSBmYWxsIGJhY2sgdG8gdXNpbmcK KyAqIHBhbGxvYygpLiAgTWVtb3J5IHNob3VsZCB0aGVyZWZvcmUgc3RpbGwgYmUgZnJlZWQgZXhw bGljaXRseSB3aXRoCisgKiBwZ19zdGFja19mcmVlKCkgb3IgTWVtb3J5Q29udGV4dC1sZXZlbCBj bGVhbnVwLiAgSXQgaXMgYSBuby1vcCBpbiB0aGUKKyAqIGNvbW1vbiBjYXNlIHRoYXQgcGZyZWUo KSBkb2Vzbid0IG5lZWQgdG8gYmUgY2FsbGVkLgorICoKKyAqIFhYWCBBIHNwYWNlLWxpbWl0ZWQg dmVyc2lvbiBvZiBhbGxvY2EoKSBjb3VsZCBiZSBhZGRlZC4KKyAqCisgKiBYWFggSXQgbWlnaHQg YmUgcG9zc2libGUgdG8gdXNlIHNvbWV0aGluZyBsaWtlICJkZWZlciIgb3IgZXF1aXZhbGVudAor ICogY29tcGlsZXIgZXh0ZW5zaW9ucyB0byBjbGVhbiB1cCBwYWxsb2MoKSdkIG1lbW9yeSBhdXRv bWF0aWNhbGx5LCBpbiBmdXR1cmUKKyAqIHdvcmssIGFuZCB0aGVuIHBnX3N0YWNrX2ZyZWUoKSB3 b3VsZCBub3QgYmUgbmVjZXNzYXJ5LgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKKyAqCisgKiBzcmMvaW5jbHVkZS91dGlscy9wZ19zdGFja19hbGxvYy5oCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdfU1RBQ0tfQUxMT0NfSAorI2RlZmluZSBQR19T VEFDS19BTExPQ19ICisKKyNpbmNsdWRlICJ1dGlscy9lbG9nLmgiCisjaW5jbHVkZSAidXRpbHMv cGFsbG9jLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4K KyNpbmNsdWRlIDx1bmlzdGQuaD4KKworCisvKiAjZGVmaW5lIFBHX1NUQUNLX1VTRV9QQUxMT0Nf TE9HICIvdG1wL3BnX3N0YWNrX2FsbG9jLmNzdiIgKi8KKworLyogQ2hvb3NlIHdoaWNoIGltcGxl bWVudGF0aW9uIHRvIHVzZSwgaWYgbm90IGFscmVhZHkgZGVmaW5lZCBtYW51YWxseS4gKi8KKyNp ZiAhZGVmaW5lZChQR19TVEFDS19VU0VfQVJSQVkpICYmCQkJCQkJCQkJXAorCSFkZWZpbmVkKFBH X1NUQUNLX1VTRV9QQUxMT0MpICYmCQkJCQkJCQlcCisJIWRlZmluZWQoUEdfU1RBQ0tfVVNFX1BB TExPQ19MT0cpCisjZGVmaW5lIFBHX1NUQUNLX1VTRV9BUlJBWQorI2VuZGlmCisKKworLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogUHVibGljIEFQSS4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisvKiBUaGlzIGVuc3VyZXMgdGhhdCAiYWxpZ24iIGlzIGEgY29uc3RhbnQgYW5kIGNh bid0IGNhdXNlIG92ZXJmbG93LiAqLworI2RlZmluZSBQR19TVEFDS19NQVhfQUxJR04gNDA5Ngor CisvKiBEZWNsYXJlIGEgc3RhY2sgYWxsb2NhdG9yIHdpdGggYSBkZWZhdWx0IHNpemUgbGltaXQu ICovCisjZGVmaW5lIERFQ0xBUkVfUEdfU1RBQ0soKQkJCQkJCQkJCQkJCVwKKwlERUNMQVJFX1BH X1NUQUNLX1NJWkUoMTI4KQorCisvKgorICogQXMgYWJvdmUsIGJ1dCB3aXRoIGEgY2FsbGVyLXN1 cHBsaWVkIGxpbWl0IG9uIHN0YWNrIHVzYWdlLiAgVGhlIGRlZmF1bHQKKyAqIHNob3VsZCBiZSBw cmVmZXJyZWQuCisgKi8KKyNkZWZpbmUgREVDTEFSRV9QR19TVEFDS19TSVpFKHNpemUpIFwKKwli b29sIHBnX3N0YWNrX21heWJlX3BmcmVlIHBnX2F0dHJpYnV0ZV91bnVzZWQoKSA9IGZhbHNlOwkJ CVwKKwlzaXplX3QgcGdfc3RhY2tfbGV0X3NpemU7CQkvKiB0ZW1wLCBhdm9pZHMgZG91YmxlIGV2 YWwgKi8JCVwKKwlERUNMQVJFX1BHX1NUQUNLX0lNUEwoc2l6ZSkKKworLyogQWxsb2NhdGUgbWVt b3J5LCBvcHRpb25hbGx5IHdpdGggZXhwbGljaXQgYWxpZ25tZW50LiAqLworI2RlZmluZSBwZ19z dGFja19hbGxvYyhzaXplKQkJCQkJCQkJCQkJXAorCXBnX3N0YWNrX2FsbG9jX2FsaWduZWQoKHNp emUpLCBNQVhJTVVNX0FMSUdOT0YpCisjZGVmaW5lIHBnX3N0YWNrX2FsbG9jX2FsaWduZWQoc2l6 ZSwgYWxpZ24pCQkJCQkJCQlcCisJKHBnX3N0YWNrX3Nhbml0eV9jaGVja3MoYWxpZ24pLAkJCQkJ CQkJCQlcCisJIHBnX3N0YWNrX2xldF9zaXplID0gKHNpemUpLAkJCQkJCQkJCQlcCisJIHBnX3N0 YWNrX2FsbG9jX2FsaWduZWRfaW1wbChwZ19zdGFja19sZXRfc2l6ZSwgKGFsaWduKSkpCisKKy8q IEFzIGFib3ZlLCBidXQgYWxzbyB6ZXJvIHRoZSBtZW1vcnkuICovCisjZGVmaW5lIHBnX3N0YWNr X2FsbG9jMChzaXplKSBcCisJcGdfc3RhY2tfYWxsb2MwX2FsaWduZWQoKHNpemUpLCBNQVhJTVVN X0FMSUdOT0YpCisjZGVmaW5lIHBnX3N0YWNrX2FsbG9jMF9hbGlnbmVkKHNpemUsIGFsaWduKQkJ CQkJCQlcCisJKHBnX3N0YWNrX3Nhbml0eV9jaGVja3MoYWxpZ24pLAkJCQkJCQkJCQlcCisJIHBn X3N0YWNrX2xldF9zaXplID0gKHNpemUpLAkJCQkJCQkJCQlcCisJIG1lbXNldChwZ19zdGFja19h bGxvY19hbGlnbmVkX2ltcGwocGdfc3RhY2tfbGV0X3NpemUsIChhbGlnbikpLAlcCisJCQkwLAkJ CQkJCQkJCQkJCQkJCVwKKwkJCXBnX3N0YWNrX2xldF9zaXplKSkKKworLyogQXMgYWJvdmUsIGJ1 dCBmb3IgYSBnaXZlbiB0eXBlIFQuICovCisjZGVmaW5lIHBnX3N0YWNrX2FsbG9jX29iamVjdChU KQkJCQkJCQkJCQlcCisJcGdfc3RhY2tfYWxsb2NfYXJyYXkoVCwgMSkKKyNkZWZpbmUgcGdfc3Rh Y2tfYWxsb2MwX29iamVjdChUKQkJCQkJCQkJCQlcCisJcGdfc3RhY2tfYWxsb2MwX2FycmF5KFQs IDEpCisKKy8qIEFzIGFib3ZlLCBidXQgZm9yIGFuIGFycmF5IG9mIG9iamVjdHMgb2Ygc2l6ZSBU LiAqLworI2RlZmluZSBwZ19zdGFja19hbGxvY19hcnJheShULCBuKQkJCQkJCQkJCQlcCisJKHBn X3N0YWNrX3Nhbml0eV9jaGVja3MoYWxpZ25vZihUKSksIAkJCQkJCQkJXAorCSBTdGF0aWNBc3Nl cnRFeHByKHNpemVvZihuKSA8PSBzaXplb2Yoc2l6ZV90KSwgIm4gdG9vIHdpZGUiKSwgCQlcCisJ IHBnX3N0YWNrX2xldF9zaXplID0gcGdfc3RhY2tfVF9tdWxfbihzaXplb2YoVCksIHNpemVvZihu KSwgKG4pKSwJXAorCSBwZ19zdGFja19hbGxvY19hbGlnbmVkX2ltcGwocGdfc3RhY2tfbGV0X3Np emUsIGFsaWdub2YoVCkpKQorI2RlZmluZSBwZ19zdGFja19hbGxvYzBfYXJyYXkoVCwgbikJCQkJ CQkJCQkJXAorCShwZ19zdGFja19zYW5pdHlfY2hlY2tzKGFsaWdub2YoVCkpLCAJCQkJCQkJCVwK KwkgU3RhdGljQXNzZXJ0RXhwcihzaXplb2YobikgPD0gc2l6ZW9mKHNpemVfdCksICJuIHRvbyB3 aWRlIiksIAkJXAorCSBwZ19zdGFja19sZXRfc2l6ZSA9IHBnX3N0YWNrX1RfbXVsX24oc2l6ZW9m KFQpLCBzaXplb2YobiksIChuKSksCVwKKwkgcGdfc3RhY2tfYWxsb2MwX2FsaWduZWQocGdfc3Rh Y2tfbGV0X3NpemUsIChhbGlnbm9mKFQpKSkpCisKKy8qIENvcHkgYSBzdHJpbmcuICovCisjZGVm aW5lIHBnX3N0YWNrX3N0cmR1cChjc3RyKQkJCQkJCQkJCQkJXAorCXBnX3N0YWNrX3N0cmR1cF93 aXRoX2xlbigoY3N0ciksIHN0cmxlbihjc3RyKSkKKyNkZWZpbmUgcGdfc3RhY2tfc3RybmR1cChj c3RyLCBuKQkJCQkJCQkJCQlcCisJcGdfc3RhY2tfc3RyZHVwX3dpdGhfbGVuKChjc3RyKSwgc3Ry bmxlbigoY3N0ciksIChuKSkpCisjZGVmaW5lIHBnX3N0YWNrX3N0cmR1cF93aXRoX2xlbihkYXRh LCBzaXplKQkJCQkJCQlcCisJKHBnX3N0YWNrX3Nhbml0eV9jaGVja3MoMSksCQkJCQkJCQkJCQlc CisJIHBnX3N0YWNrX2xldF9zaXplID0gKHNpemUpLAkJCQkJCQkJCQlcCisJIHBnX3N0YWNrX3N0 cmR1cF93aXRoX2xlbl9pbXBsKAkJCQkJCQkJCQlcCisJCSBwZ19zdGFja19hbGxvY19hbGlnbmVk X2ltcGwocGdfc3RhY2tfbGV0X3NpemUgKyAxLAkJCQlcCisJCQkJCQkJCQkgYWxpZ25vZihjaGFy KSksCQkJCQlcCisJCSAoZGF0YSksCQkJCQkJCQkJCQkJCQlcCisJCSBwZ19zdGFja19sZXRfc2l6 ZSkpCisjZGVmaW5lIHBnX3N0YWNrX3RleHRfdG9fY3N0cmluZyh0ZXh0KSBcCisJcGdfc3RhY2tf c3RyZHVwX3dpdGhfbGVuKFZBUkRBVEFfQU5ZKHRleHQpLCBWQVJTSVpFX0FOWV9FWEhEUih0ZXh0 KSkKKyNkZWZpbmUgcGdfc3RhY2tfdGV4dF9kYXR1bV90b19jc3RyaW5nKGRhdHVtKQkJCQkJCQlc CisJcGdfc3RhY2tfdGV4dF90b19jc3RyaW5nKCh0ZXh0ICopIERhdHVtR2V0UG9pbnRlcihkYXR1 bSkpCisKKy8qCisgKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgd2l0aCB0aGUgYWJvdmUgaW50ZXJm YWNlcy4gIFdlIGRvbid0IGV4cGVjdCB0bworICogcmVjZWl2ZSBwb2ludGVycyBhbGxvY2F0ZWQg YnkgcGFsbG9jKCkgZGlyZWN0bHkgYW5kIG5vdCB2aWEgdGhpcyBBUEkuICBUaGF0CisgKiB3b3Vs ZCBicmVhayB0aGUgcGdfc3RhY2tfbWF5YmVfcGZyZWUgb3B0aW1pemF0aW9uLCBhbmQgbWlnaHQg bGltaXQKKyAqIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbiB0ZWNobmlxdWVzLgorICovCisjZGVmaW5l IHBnX3N0YWNrX2ZyZWUocHRyKQkJCQkJCQkJCQkJCVwKKwlkbwkJCQkJCQkJCQkJCQkJCQkJXAor CXsJCQkJCQkJCQkJCQkJCQkJCVwKKwkJdm9pZCAqcGdfc3RhY2tfbGV0X3B0ciA9IChwdHIpOwkJ CQkJCQkJCVwKKwkJQXNzZXJ0KHBnX3N0YWNrX3B0cl9wKHBnX3N0YWNrX2xldF9wdHIpIHx8CQkJ CQkJXAorCQkJICAgcGdfc3RhY2tfbWF5YmVfcGZyZWUpOwkJCQkJCQkJCVwKKwkJaWYgKHVubGlr ZWx5KHBnX3N0YWNrX21heWJlX3BmcmVlKSAmJgkJCQkJCQlcCisJCQkhcGdfc3RhY2tfcHRyX3Ao cGdfc3RhY2tfbGV0X3B0cikpCQkJCQkJCVwKKwkJCXBmcmVlKHBnX3N0YWNrX2xldF9wdHIpOwkJ CQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQlcCisJd2hpbGUgKDApCisKKworLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogUHJpdmF0ZSBoZWxwZXIgY29kZSBjb21tb24gdG8gYWxsIGltcGxl bWVudGF0aW9ucy4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogTm9ybWFs IHVzYWdlIHdvdWxkIGhhdmUgY29uc3RhbnQgYWxpZ24gdmFsdWVzLCBzbyB0aGUgZmlyc3QgdHdv IGNoZWNrcworICogc2hvdWxkIGlkZWFsbHkgYmUgc3RhdGljIGFzc2VydGlvbnMsIGJ1dCB0aGV5 IGFyZSBkb25lIHRoaXMgd2F5IHRvIGFsbG93CisgKiByZWdyZXNzLmMgdG8gbG9vcCB0aHJvdWdo IGFsaWdubWVudCBzaXplcy4KKyAqLworI2RlZmluZSBwZ19zdGFja19zYW5pdHlfY2hlY2tzKGFs aWduKQkJCQkJCQkJCVwKKwkoQXNzZXJ0TWFjcm8oKGFsaWduKSA+IDAgJiYgKGFsaWduKSA8PSBQ R19TVEFDS19NQVhfQUxJR04pLAkJCVwKKwkgQXNzZXJ0TWFjcm8oKChhbGlnbikgJiAoKGFsaWdu KSAtIDEpKSA9PSAwIC8qIHBvd2VyLW9mLXR3bz8gKi8pKQorCisvKiBGb3IgYXNzZXJ0aW9ucy4g Ki8KK3N0YXRpYyBpbmxpbmUgYm9vbAorcGdfc3RhY2tfcHRyX2lzX2FsaWduZWRfcChjb25zdCB2 b2lkICpwLCBzaXplX3QgYWxpZ24pCit7CisJcmV0dXJuICh1aW50cHRyX3QpIHAgJSBhbGlnbiA9 PSAwOworfQorCisvKiBNYXhpbXVtIHZhbHVlIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiBhbiB1bnNp Z25lZCBpbnRlZ2VyIG9mIGdpdmVuIHNpemUuICovCitzdGF0aWMgaW5saW5lIHNpemVfdAorcGdf c3RhY2tfbWF4X2Zvcl91aW50X3NpemUoc2l6ZV90IHNpemUpCit7CisJQXNzZXJ0KHNpemUgPD0g c2l6ZW9mKHNpemVfdCkpOworCXJldHVybiBTSVpFX01BWCA+PiAoKHNpemVvZihzaXplX3QpICog Q0hBUl9CSVQpIC0gc2l6ZSAqIENIQVJfQklUKTsKK30KKworLyogUG9zdC1hbGxvY2F0aW9uIHBh cnQgb2YgcGdfc3RhY2tfc3RyZHVwX3dpdGhfbGVuKCkuICovCitzdGF0aWMgaW5saW5lIGNoYXIg KgorcGdfc3RhY2tfc3RyZHVwX3dpdGhfbGVuX2ltcGwoY2hhciAqZHN0LCBjb25zdCBjaGFyICpk YXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwltZW1jcHkoZHN0LCBkYXRhLCBzaXplKTsKKwlkc3Rbc2l6 ZV0gPSAwOworCXJldHVybiBkc3Q7Cit9CisKKy8qIENvbXB1dGUgc2l6ZW9mKFQpICogbi4gKi8K K3N0YXRpYyBpbmxpbmUgc2l6ZV90CitwZ19zdGFja19UX211bF9uKHNpemVfdCBzaXplb2ZfVCwg c2l6ZV90IHNpemVvZl9uLCBzaXplX3QgbikKK3sKKwkvKiBYWFggQ291bGQgb3ZlcmZsb3csIHdo aWNoIG1pZ2h0IGFsbG93IHRoZSBzdGFjayB0byBiZSBjb3JydXB0ZWQuICovCisJcmV0dXJuIHNp emVvZl9UICogbjsKK30KKworLyoKKyAqIEZhbGwgYmFjayB0byBwYWxsb2MoKSBvciBwYWxsb2Nf YWxpZ25lZCgpIGR1ZSB0byBsYWNrIG9mIHNwYWNlLiAgV2Ugd2FzdGUgYQorICogcmVnaXN0ZXIg cmVtZW1iZXJpbmcgaWYgd2UndmUgZXZlciBoYWQgdG8gZG8gdGhpcywgdG8gZ2VuZXJhdGUgYmV0 dGVyCisgKiBzdHJhaWdodC1saW5lIGNvZGUgZm9yIHRoZSBjYXNlIHdoZXJlIHdlIGRvbid0IGhh dmUgdG8gZnJlZSBhbnl0aGluZy4KKyAqLworI2RlZmluZSBwZ19zdGFja19wYWxsb2NfYWxpZ25l ZChzaXplLCBhbGlnbikJCQkJCQkJXAorCSgocGdfc3RhY2tfbWF5YmVfcGZyZWUgPSB0cnVlKSwJ CQkJCQkJCQkJXAorCSAoKGFsaWduKSA+IE1BWElNVU1fQUxJR05PRiA/CQkJCQkJCQkJCVwKKwkg IHBhbGxvY19hbGlnbmVkKChzaXplKSwgKGFsaWduKSwgMCkgOgkJCQkJCQkJXAorCSAgcGFsbG9j KHNpemUpKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBMb3ctbGV2ZWwgaW1wbGVt ZW50YXRpb25zIGJlbG93IHRoaXMgcG9pbnQgc3VwcGx5IHRoZSBmb2xsb3dpbmcgbWFjcm9zOgor ICoKKyAqIDEuIERFQ0xBUkVfUEdfU1RBQ0tfSU1QTChzaXplKQorICogMi4gcGdfc3RhY2tfYWxs b2NfYWxpZ25lZChzaXplLCBhbGlnbikKKyAqIDMuIHBnX3N0YWNrX3B0cl9wKHB0cikKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUb3kg aW1wbGVtZW50YXRpb25zIGZvciBkZWJ1Z2dpbmcuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworLyogSnVzdCB1c2UgcGFsbG9jLiAqLworI2lmZGVmIFBHX1NUQUNLX1VTRV9QQUxMT0MK KyNkZWZpbmUgREVDTEFSRV9QR19TVEFDS19JTVBMKHNpemUpCisjZGVmaW5lIHBnX3N0YWNrX2Fs bG9jX2FsaWduZWRfaW1wbChzaXplLCBhbGlnbikJCQkJCQlcCisJcGdfc3RhY2tfcGFsbG9jX2Fs aWduZWQoKHNpemUpLCAoYWxpZ24pKQorI2RlZmluZSBwZ19zdGFja19wdHJfcCgpIGZhbHNlCisj ZW5kaWYKKworLyoKKyAqIFNhbWUsIGJ1dCBsb2cgImxvY2F0aW9uLGZ1bmN0aW9uLHNpemUsZGVw dGgiIGVudHJpZXMgdG8gYSBmaWxlLCB1c2luZyB0aGUKKyAqIFBHX1NUQUNLX1VTRV9QQUxMT0Nf TE9HIG1hY3JvJ3MgZGVmaW5pdGlvbiAoYSAiIi1xdW90ZWQgc3RyaW5nIGxpdGVyYWwpIGZvcgor ICogdGhlIHBhdGguCisgKi8KKyNpZmRlZiBQR19TVEFDS19VU0VfUEFMTE9DX0xPRworI2RlZmlu ZSBERUNMQVJFX1BHX1NUQUNLX0lNUEwoc2l6ZSkJCQkJCQkJCQkJXAorCUZJTEUgKnBnX3N0YWNr X2xvZwkJCQkJCQkJCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoY2xlYW51cChwZ19zdGFja19jbG9z ZV9sb2cpKSkgPQkJCQkJCVwKKwlmb3BlbihQR19TVEFDS19VU0VfUEFMTE9DX0xPRywgImErIikK KyNkZWZpbmUgcGdfc3RhY2tfYWxsb2NfYWxpZ25lZF9pbXBsKHNpemUsIGFsaWduKQkJCQkJCVwK KwkoZnByaW50ZihwZ19zdGFja19sb2csCQkJCQkJCQkJCQkJXAorCQkJICIlczolZCwlcywlenUs JXp1XG4iLAkJCQkJCQkJCQlcCisJCQkgX19GSUxFX18sCQkJCQkJCQkJCQkJCVwKKwkJCSBfX0xJ TkVfXywJCQkJCQkJCQkJCQkJXAorCQkJIF9fZnVuY19fLAkJCQkJCQkJCQkJCQlcCisJCQkgKHNp emVfdCkgKHNpemUpLAkJCQkJCQkJCQkJXAorCQkJICgoY29uc3QgY2hhciAqKSBzdGFja19iYXNl X3B0ciAtCQkJCQkJCVwKKwkJCSAgKGNvbnN0IGNoYXIgKikgX19idWlsdGluX3N0YWNrX2FkZHJl c3MoKSkpLAkJCQlcCisJIHBnX3N0YWNrX3BhbGxvY19hbGlnbmVkKChzaXplKSwgKGFsaWduKSkp CisjZGVmaW5lIHBnX3N0YWNrX3B0cl9wKHB0cikgZmFsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZAor cGdfc3RhY2tfY2xvc2VfbG9nKEZJTEUgKipmKQoreworCWZjbG9zZSgqZik7Cit9CisjZW5kaWYK KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQXJyYXktYmFzZWQgaW1wbGVtZW50YXRpb24u CisgKgorICogVGhpcyBpcyBlbnRpcmVseSBzdGFuZGFyZCBDIHJlcXVpcmluZyBubyBjb21waWxl ciBleHRlbnNpb25zLCBidXQgaXQgbGVhdmVzCisgKiBhIGJpZyBob2xlIGluIHRoZSBzdGFjayB3 aGVuIHlvdSBjYWxsIGFub3RoZXIgZnVuY3Rpb24gYW5kIGhhcyBubyBhYmlsaXR5CisgKiB0byBy ZXNwZWN0IHRoZSB0b3RhbCBzdGFjayBzaXplIGxpbWl0LgorICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaWZkZWYgUEdfU1RBQ0tfVVNFX0FSUkFZCisKKy8qIFJlcXVpcmVkIGludGVyZmFj ZSBtYWNyb3MuICovCisKKyNkZWZpbmUgREVDTEFSRV9QR19TVEFDS19JTVBMKHNpemUpCQkJCQkJ CQkJCVwKKwljaGFyIHBnX3N0YWNrX2FycmF5WyhzaXplKV07CQkJCQkJCQkJCVwKKwljaGFyICpw Z19zdGFja19wID0gcGdfc3RhY2tfYXJyYXkgKyAoc2l6ZSkKKworI2RlZmluZSBwZ19zdGFja19h bGxvY19hbGlnbmVkX2ltcGwoc2l6ZSwgYWxpZ24pCQkJCQkJXAorCShwZ19zdGFja19hbGxvY19h bGlnbmVkX2Zyb21fYXJyYXkoJnBnX3N0YWNrX2FycmF5WzBdLAkJCQlcCisJCQkJCQkJCQkgICAm cGdfc3RhY2tfcCwJCQkJCQlcCisJCQkJCQkJCQkgICAoc2l6ZSksCQkJCQkJCVwKKwkJCQkJCQkJ CSAgIChhbGlnbikpID8JCQkJCQlcCisJIHBnX3N0YWNrX3AgOgkJCQkJCQkJCQkJCQkJXAorCSBw Z19zdGFja19wYWxsb2NfYWxpZ25lZChzaXplLCBhbGlnbikpCisKKyNkZWZpbmUgcGdfc3RhY2tf cHRyX3AocHRyKQkJCQkJCQkJCQkJCVwKKwkoKGNoYXIgKikgKHB0cikgPj0gJnBnX3N0YWNrX2Fy cmF5WzBdICYmCQkJCQkJCVwKKwkgKGNoYXIgKikgKHB0cikgPD0gJnBnX3N0YWNrX2FycmF5W3Np emVvZihwZ19zdGFja19hcnJheSldKQorCisKKy8qIEltcGxlbWVudGF0aW9uLiAqLworCitzdGF0 aWMgaW5saW5lIGJvb2wKK3BnX3N0YWNrX2FsbG9jX2FsaWduZWRfZnJvbV9hcnJheShjaGFyICph cnJheSwKKwkJCQkJCQkJICBjaGFyICoqcCwKKwkJCQkJCQkJICBzaXplX3Qgc2l6ZSwKKwkJCQkJ CQkJICBzaXplX3QgYWxpZ24pCit7CisJaWYgKGxpa2VseShzaXplIDw9ICh1aW50cHRyX3QpICpw KSkgLyogYXZvaWQgb3ZlcmZsb3cgd2l0aCBodWdlIHNpemUgKi8KKwl7CisJCWNoYXIJICAgKnJl c3VsdCA9ICpwIC0gc2l6ZTsKKworCQlpZiAoYWxpZ24gPiAxKQorCQkJcmVzdWx0ID0gKGNoYXIg KikgVFlQRUFMSUdOX0RPV04oYWxpZ24sIHJlc3VsdCk7CisKKwkJaWYgKGxpa2VseShyZXN1bHQg Pj0gYXJyYXkpKQorCQl7CisJCQkqcCA9IHJlc3VsdDsKKwkJCXJldHVybiB0cnVlOworCQl9CisJ fQorCXJldHVybiBmYWxzZTsKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnRlcm5hbHMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9pbnRlcm5hbHMub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi41MzJlOWY3OTFlZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvaW50ZXJuYWxzLm91dApAQCAtMCwwICsxLDEyIEBACitcZ2V0ZW52IGxpYmRpciBQR19M SUJESVIKK1xnZXRlbnYgZGxzdWZmaXggUEdfRExTVUZGSVgKK1xzZXQgcmVncmVzc2xpYiA6bGli ZGlyICcvcmVncmVzcycgOmRsc3VmZml4CitDUkVBVEUgRlVOQ1RJT04gdGVzdF9wZ19zdGFja19h bGxvYygpIFJFVFVSTlMgdm9pZAorICAgIEFTIDoncmVncmVzc2xpYicgTEFOR1VBR0UgQyBTVFJJ Q1Q7CitTRUxFQ1QgdGVzdF9wZ19zdGFja19hbGxvYygpOworIHRlc3RfcGdfc3RhY2tfYWxsb2Mg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworRFJPUCBGVU5DVElPTiB0ZXN0 X3BnX3N0YWNrX2FsbG9jKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVs X3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQppbmRleCAyODhl OTRkYzQwOC4uMzdhOTdkYmVkYzcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxs ZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAt NDgsNyArNDgsNyBAQCB0ZXN0OiBjcmVhdGVfaW5kZXggY3JlYXRlX2luZGV4X3NwZ2lzdCBjcmVh dGVfdmlldyBpbmRleF9pbmNsdWRpbmcgaW5kZXhfaW5jbHVkaQogIyAtLS0tLS0tLS0tCiAjIEFu b3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMKICMgLS0tLS0tLS0tLQotdGVzdDogY3JlYXRl X2FnZ3JlZ2F0ZSBjcmVhdGVfZnVuY3Rpb25fc3FsIGNyZWF0ZV9jYXN0IGNvbnN0cmFpbnRzIHRy aWdnZXJzIHNlbGVjdCBpbmhlcml0IHR5cGVkX3RhYmxlIHZhY3V1bSBkcm9wX2lmX2V4aXN0cyB1 cGRhdGFibGVfdmlld3Mgcm9sZWF0dHJpYnV0ZXMgY3JlYXRlX2FtIGhhc2hfZnVuYyBlcnJvcnMg aW5maW5pdGVfcmVjdXJzZSBjcmVhdGVfcHJvcGVydHlfZ3JhcGggZm9yX3BvcnRpb25fb2YKK3Rl c3Q6IGNyZWF0ZV9hZ2dyZWdhdGUgY3JlYXRlX2Z1bmN0aW9uX3NxbCBjcmVhdGVfY2FzdCBjb25z dHJhaW50cyB0cmlnZ2VycyBzZWxlY3QgaW5oZXJpdCB0eXBlZF90YWJsZSB2YWN1dW0gZHJvcF9p Zl9leGlzdHMgdXBkYXRhYmxlX3ZpZXdzIHJvbGVhdHRyaWJ1dGVzIGNyZWF0ZV9hbSBoYXNoX2Z1 bmMgZXJyb3JzIGluZmluaXRlX3JlY3Vyc2UgY3JlYXRlX3Byb3BlcnR5X2dyYXBoIGZvcl9wb3J0 aW9uX29mIGludGVybmFscwogCiAjIC0tLS0tLS0tLS0KICMgc2FuaXR5X2NoZWNrIGRvZXMgYSB2 YWN1dW0sIGFmZmVjdGluZyB0aGUgc29ydCBvcmRlciBvZiBTRUxFQ1QgKgpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzLmMgYi9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3MuYwpp bmRleCAyYmNiNTU1OWE0NS4uNzRmZTZmZGNlOWQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvcmVncmVzcy5jCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcy5jCkBAIC0yNyw2ICsy Nyw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMv c2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCisjaW5jbHVkZSAiY29t bW9uL2ludC5oIgogI2luY2x1ZGUgImNvbW1vbi9wZ19semNvbXByZXNzLmgiCiAjaW5jbHVkZSAi ZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9mdW5jdGlvbnMuaCIKQEAg LTQ3LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0 aWxzL2dlb19kZWNscy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAi dXRpbHMvcGdfc3RhY2tfYWxsb2MuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRl ICJ1dGlscy90eXBjYWNoZS5oIgogCkBAIC0xNDg4LDMgKzE0OTAsNTIgQEAgdGVzdF9wZ2x6X2Rl Y29tcHJlc3MoUEdfRlVOQ1RJT05fQVJHUykKIAlTRVRfVkFSU0laRShyZXN1bHQsIGRsZW4gKyBW QVJIRFJTWik7CiAJUEdfUkVUVVJOX0JZVEVBX1AocmVzdWx0KTsKIH0KKworUEdfRlVOQ1RJT05f SU5GT19WMSh0ZXN0X3BnX3N0YWNrX2FsbG9jKTsKK0RhdHVtCit0ZXN0X3BnX3N0YWNrX2FsbG9j KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkgICAqcDsKKwljaGFyCSAgICpwMiBQR19VU0VE X0ZPUl9BU1NFUlRTX09OTFk7CisKKwkvKiBOZWVkIGV4dHJhIHNwYWNlIHRvIHJ1biB1bmRlciBB U0FOLiAqLworCURFQ0xBUkVfUEdfU1RBQ0tfU0laRSgxMDI0ICogOCk7CisKKwkvKiBUb28gYmln IGZvciB0aGUgc3RhY2suICovCisJcCA9IHBnX3N0YWNrX2FsbG9jKDEwMDAwKTsKKwlBc3NlcnQo IXBnX3N0YWNrX3B0cl9wKHApKTsKKwlwZ19zdGFja19mcmVlKHApOworCisJLyogQWNjZXB0YWJs ZSBzaXplLiAqLworCXAgPSBwZ19zdGFja19hbGxvYygxMCk7CisJQXNzZXJ0KHBnX3N0YWNrX3B0 cl9wKHApKTsKKworCS8qIEFkZHJlc3NlcyBzaG91bGQgbW92ZSBkb3dud2FyZHMuICovCisJcDIg PSBwZ19zdGFja19hbGxvYygxMCk7CisJQXNzZXJ0KHBnX3N0YWNrX3B0cl9wKHApKTsKKwlBc3Nl cnQocDIgPCBwKTsKKworCS8qIEEgemVyby1zaXplZCBhbGxvY2F0aW9uIGlzIGlkZW50aWZpYWJs ZSBhcyBhIHN0YWNrIGFkZHJlc3MuICovCisJcCA9IHBnX3N0YWNrX2FsbG9jKDApOworCUFzc2Vy dChwZ19zdGFja19wdHJfcChwKSk7CisKKwkvKiBUZXN0IGEgcmFuZ2Ugb2YgYWxpZ25tZW50cy4g Ki8KKyNkZWZpbmUgVEVTVF9BTElHTiBNQVhJTVVNX0FMSUdOT0YKKwlmb3IgKGludCBpID0gMTsg aSA8PSBURVNUX0FMSUdOICogODsgaSAqPSAyKQorCXsKKwkJLyogQWxsb2NhdGUgYW5kIGNoZWNr IGFsaWdubWVudCBpcyBhcyByZXF1ZXN0ZWQsIHdoZW4gd2UgdXNlIHBhbGxvYygpLiAqLworCQlw ID0gcGdfc3RhY2tfYWxsb2NfYWxpZ25lZCgxMDI0ICogOCwgaSk7CisKKwkJQXNzZXJ0KCFwZ19z dGFja19wdHJfcChwKSk7CisJCUFzc2VydChwZ19zdGFja19wdHJfaXNfYWxpZ25lZF9wKHAsIGkp KTsKKwkJcGdfc3RhY2tfZnJlZShwKTsKKworCQkvKiBBbGxvY2F0ZSBhbmQgY2hlY2sgYWxpZ25t ZW50IGlzIGFzIHJlcXVlc3RlZC4gKi8KKwkJcCA9IHBnX3N0YWNrX2FsbG9jX2FsaWduZWQoaSwg aSk7CisKKwkJQXNzZXJ0KHBnX3N0YWNrX3B0cl9wKHApKTsKKwkJQXNzZXJ0KHBnX3N0YWNrX3B0 cl9pc19hbGlnbmVkX3AocCwgaSkpOworCX0KKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbnRlcm5hbHMuc3FsIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvaW50ZXJuYWxzLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uYmVhNjE3ODBmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9pbnRlcm5hbHMuc3FsCkBAIC0wLDAgKzEsMTEgQEAKK1xnZXRlbnYgbGliZGlyIFBHX0xJQkRJ UgorXGdldGVudiBkbHN1ZmZpeCBQR19ETFNVRkZJWAorCitcc2V0IHJlZ3Jlc3NsaWIgOmxpYmRp ciAnL3JlZ3Jlc3MnIDpkbHN1ZmZpeAorCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9wZ19zdGFja19h bGxvYygpIFJFVFVSTlMgdm9pZAorICAgIEFTIDoncmVncmVzc2xpYicgTEFOR1VBR0UgQyBTVFJJ Q1Q7CisKK1NFTEVDVCB0ZXN0X3BnX3N0YWNrX2FsbG9jKCk7CisKK0RST1AgRlVOQ1RJT04gdGVz dF9wZ19zdGFja19hbGxvYygpOwotLSAKMi40Ny4zCgo= --00000000000016954d064f7fcda7 Content-Type: text/x-patch; charset="US-ASCII"; name="0002-Provide-utf16-type.patch" Content-Disposition: attachment; filename="0002-Provide-utf16-type.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo03h1og1 RnJvbSBiZTA3ZTJhMGFkMWEwZGE2N2E1MDVhNTE4NDcyOWI4YzdkY2QwMjNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTcgRmViIDIwMjYgMjE6MTM6NTQgKzEzMDAKU3ViamVjdDogW1BBVENIIDIv Ml0gUHJvdmlkZSB1dGYxNiB0eXBlLgoKU2NpZW5jZSBwcm9qZWN0Li4uCi0tLQogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jICAgICAgICAgfCAxMDMgKysrKysKIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ19sb2NhbGVfaWN1LmMgICAgIHwgIDUzICsrKwogc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3ZhcmxlbmEuYyAgICAgICAgICAgfCA0NjggKysrKysrKysrKysrKysrKysrKy0KIHNy Yy9pbmNsdWRlL2MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfYW1vcC5kYXQgICAgICAgICAgIHwgIDc5ICsrKysKIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfYW1wcm9jLmRhdCAgICAgICAgIHwgIDEyICsKIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfb3BjbGFzcy5kYXQgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdf b3BlcmF0b3IuZGF0ICAgICAgIHwgMTYwICsrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQgICAgICAgICAgIHwgMTMwICsrKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ190 eXBlLmRhdCAgICAgICAgICAgfCAgIDggKwogc3JjL2luY2x1ZGUvZm1nci5oICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIuaCAgICAgICAgICAg ICAgICAgfCAgMzQgKysKIHNyYy9pbmNsdWRlL21iL3N0cmluZ19pdGVyYXRvci5oICAgICAgICAg IHwgNTAwICsrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL21iL3VuaWNvZGVfc3Ry aW5ncy5oICAgICAgICAgIHwgMjU0ICsrKysrKysrKysrCiBzcmMvaW5jbHVkZS9tYi91bmljb2Rl X3R5cGVzLmggICAgICAgICAgICB8ICA2MSArKysKIHNyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2Fs ZS5oICAgICAgICAgICAgIHwgIDIwICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZW5jb2Rp bmcub3V0ICAgIHwgIDMyICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3R5cGVfc2FuaXR5 Lm91dCB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VuaWNvZGUub3V0ICAgICB8 IDEzNCArKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcy5jICAgICAgICAgICAgICAgIHwg IDE2ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VuY29kaW5nLnNxbCAgICAgICAgIHwgIDE2ICsK IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3R5cGVfc2FuaXR5LnNxbCAgICAgIHwgICAxICsKIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3VuaWNvZGUuc3FsICAgICAgICAgIHwgMTAxICsrKysrCiBzcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICB8ICAgNCArCiAyNCBmaWxlcyBjaGFu Z2VkLCAyMTg1IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9pbmNsdWRlL21iL3N0cmluZ19pdGVyYXRvci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2luY2x1ZGUvbWIvdW5pY29kZV9zdHJpbmdzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv aW5jbHVkZS9tYi91bmljb2RlX3R5cGVzLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcGdfbG9jYWxlLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKaW5k ZXggNmM1YzEwMTllMWUuLjkyMzFkNDhlYTNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcGdfbG9jYWxlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5j CkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiY29tbW9uL2hhc2hmbi5oIgogI2luY2x1ZGUg ImNvbW1vbi9zdHJpbmcuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUgIm1i L3VuaWNvZGVfc3RyaW5ncy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX2hvb2tzLmgiCkBAIC01MCw2ICs1 MSw3IEBACiAjaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxlLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdf bG9jYWxlX2MuaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxz L3BnX3N0YWNrX2FsbG9jLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAogI2lmZGVm IFdJTjMyCkBAIC0xNDA3LDYgKzE0MDksMTA3IEBAIHBnX3N0cm5jb2xsKGNvbnN0IGNoYXIgKmFy ZzEsIHNzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwgc3NpemVfdCBsZW4yLAogCXJldHVy biBsb2NhbGUtPmNvbGxhdGUtPnN0cm5jb2xsKGFyZzEsIGxlbjEsIGFyZzIsIGxlbjIsIGxvY2Fs ZSk7CiB9CiAKKy8qCisgKiBGb3IgcHJvdmlkZXJzIHdpdGhvdXQgVVRGLTE2IHN1cHBvcnQsIGNv bnZlcnQgYm90aCBzdHJpbmdzIHRvIGRhdGFiYXNlCisgKiBlbmNvZGluZyB3aXRoIE5VTC10ZXJt aW5hdG9yLgorICovCitzdGF0aWMgaW50CitwZ19zdHJuY29sbF9jaGFyMTZfY29udmVydChjb25z dCBzdG9yYWdlX2NoYXIxNl90ICpkYXRhMSwgc2l6ZV90IHNpemUxLAorCQkJCQkJICAgY29uc3Qg c3RvcmFnZV9jaGFyMTZfdCAqZGF0YTIsIHNpemVfdCBzaXplMiwKKwkJCQkJCSAgIHBnX2xvY2Fs ZV90IGxvY2FsZSkKK3sKKwljaGFyCSAgICpjc3RyMTsKKwljaGFyCSAgICpjc3RyMjsKKwlpbnQJ CQlyZXN1bHQ7CisKKwlERUNMQVJFX1BHX1NUQUNLKCk7CisKKwljc3RyMSA9IHBnX3N0YWNrX2Fs bG9jKGNoYXIxNl90b19tYl9tYXhfc2l6ZShzaXplMSkgKyAxKTsKKwljaGFyMTZfdG9fbG9jYWxf Y3N0cihjc3RyMSwgZGF0YTEsIHNpemUxKTsKKworCWNzdHIyID0gcGdfc3RhY2tfYWxsb2MoY2hh cjE2X3RvX21iX21heF9zaXplKHNpemUyKSArIDEpOworCWNoYXIxNl90b19sb2NhbF9jc3RyKGNz dHIyLCBkYXRhMiwgc2l6ZTIpOworCisJcmVzdWx0ID0gcGdfc3RybmNvbGwoY3N0cjEsIC0xLCBj c3RyMiwgLTEsIGxvY2FsZSk7CisKKwlwZ19zdGFja19mcmVlKGNzdHIxKTsKKwlwZ19zdGFja19m cmVlKGNzdHIyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDb2xsYXRlIHR3byBV VEYtMTYgc3RyaW5ncy4KKyAqLworaW50CitwZ19zdHJuY29sbF9jaGFyMTYoY29uc3Qgc3RvcmFn ZV9jaGFyMTZfdCAqZGF0YTEsIHNpemVfdCBzaXplMSwKKwkJCQkgICBjb25zdCBzdG9yYWdlX2No YXIxNl90ICpkYXRhMiwgc2l6ZV90IHNpemUyLAorCQkJCSAgIHBnX2xvY2FsZV90IGxvY2FsZSkK K3sKKwlpZiAobG9jYWxlLT5jb2xsYXRlLT5zdHJuY29sbF9jaGFyMTYpCisJCXJldHVybiBsb2Nh bGUtPmNvbGxhdGUtPnN0cm5jb2xsX2NoYXIxNihkYXRhMSwgc2l6ZTEsCisJCQkJCQkJCQkJCQlk YXRhMiwgc2l6ZTIsCisJCQkJCQkJCQkJCQlsb2NhbGUpOworCisJcmV0dXJuIHBnX3N0cm5jb2xs X2NoYXIxNl9jb252ZXJ0KGRhdGExLCBzaXplMSwgZGF0YTIsIHNpemUyLCBsb2NhbGUpOworfQor CisvKgorICogRm9yIHByb3ZpZGVycyB3aXRob3V0IFVURi0xNiBzdXBwb3J0LCBjb252ZXJ0IG9u ZSBzdHJpbmcgdG8gZGF0YWJhc2UKKyAqIGVuY29kaW5nIHdpdGggTlVMLXRlcm1pbmF0b3IuCisg Ki8KK3N0YXRpYyBpbnQKK3BnX3N0cm5jb2xsX2NoYXIxNl9sb2NhbF9jb252ZXJ0KGNvbnN0IHN0 b3JhZ2VfY2hhcjE2X3QgKmRhdGExLCBzaXplX3Qgc2l6ZTEsCisJCQkJCQkJCSBjb25zdCBjaGFy ICpkYXRhMiwgc2l6ZV90IHNpemUyLAorCQkJCQkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKQorewor CWNoYXIJICAgKmNzdHIxOworCWludAkJCXJlc3VsdDsKKworCURFQ0xBUkVfUEdfU1RBQ0soKTsK KworCWNzdHIxID0gcGdfc3RhY2tfYWxsb2MoY2hhcjE2X3RvX21iX21heF9zaXplKHNpemUxKSAr IDEpOworCWNoYXIxNl90b19sb2NhbF9jc3RyKGNzdHIxLCBkYXRhMSwgc2l6ZTEpOworCisJcmVz dWx0ID0gcGdfc3RybmNvbGwoY3N0cjEsIC0xLCBkYXRhMiwgc2l6ZTIsIGxvY2FsZSk7CisKKwlw Z19zdGFja19mcmVlKGNzdHIxKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDb21w YXJlIGEgVVRGLTE2IHN0cmluZyBhbmQgYSBkYXRhYmFzZSBlbmNvZGluZyBzdHJpbmcuCisgKi8K K2ludAorcGdfc3RybmNvbGxfY2hhcjE2X2xvY2FsKGNvbnN0IHN0b3JhZ2VfY2hhcjE2X3QgKmRh dGExLCBzaXplX3Qgc2l6ZTEsCisJCQkJCQkgY29uc3QgY2hhciAqZGF0YTIsIHNpemVfdCBzaXpl MiwKKwkJCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJaWYgKGxvY2FsZS0+Y29sbGF0ZS0+ c3RybmNvbGxfY2hhcjE2X2xvY2FsKQorCQlyZXR1cm4gbG9jYWxlLT5jb2xsYXRlLT5zdHJuY29s bF9jaGFyMTZfbG9jYWwoZGF0YTEsIHNpemUyLAorCQkJCQkJCQkJCQkJCSAgZGF0YTIsIHNpemUy LAorCQkJCQkJCQkJCQkJCSAgbG9jYWxlKTsKKworCXJldHVybiBwZ19zdHJuY29sbF9jaGFyMTZf bG9jYWxfY29udmVydChkYXRhMSwgc2l6ZTEsIGRhdGEyLCBzaXplMiwKKwkJCQkJCQkJCQkJbG9j YWxlKTsKK30KKworLyoKKyAqIENvbXBhcmUgYSBVVEYtMTYgc3RyaW5nIGFuZCBhIGRhdGFiYXNl IGVuY29kaW5nIHN0cmluZy4KKyAqLworaW50CitwZ19zdHJuY29sbF9sb2NhbF9jaGFyMTYoY29u c3QgY2hhciAqZGF0YTEsIHNpemVfdCBzaXplMSwKKwkJCQkJCSBjb25zdCBzdG9yYWdlX2NoYXIx Nl90ICpkYXRhMiwgc2l6ZV90IHNpemUyLAorCQkJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sK KwkvKiBObyBzZXBlcmF0ZSBpbXBsZW1lbnRhdGlvbiBmb3Igbm93LiAqLworCWludAkJCXJlc3Vs dCA9IHBnX3N0cm5jb2xsX2NoYXIxNl9sb2NhbChkYXRhMiwgc2l6ZTIsIGRhdGExLCBzaXplMSwg bG9jYWxlKTsKKworCUlOVkVSVF9DT01QQVJFX1JFU1VMVChyZXN1bHQpOworCXJldHVybiByZXN1 bHQ7Cit9CisKIC8qCiAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY29sbGF0aW9uIHByb3ZpZGVyIHN1 cHBvcnRzIHBnX3N0cnhmcm0oKSBhbmQKICAqIHBnX3N0cm54ZnJtKCk7IG90aGVyd2lzZSBmYWxz ZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfaWN1LmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5jCmluZGV4IGE0YTRlODJlYjllLi42 YmY2MTdmOGU1NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9p Y3UuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5jCkBAIC03Nyw2 ICs3NywxMiBAQCBzdGF0aWMgc2l6ZV90IGRvd25jYXNlX2lkZW50X2ljdShjaGFyICpkc3QsIHNp emVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCiBzdGF0aWMgaW50CXN0cm5jb2xsX2ljdShj b25zdCBjaGFyICphcmcxLCBzc2l6ZV90IGxlbjEsCiAJCQkJCQkgY29uc3QgY2hhciAqYXJnMiwg c3NpemVfdCBsZW4yLAogCQkJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSk7CitzdGF0aWMgaW50CXN0 cm5jb2xsX2NoYXIxNl9pY3UoY29uc3Qgc3RvcmFnZV9jaGFyMTZfdCAqYXJnMSwgc2l6ZV90IGxl bjEsCisJCQkJCQkJCWNvbnN0IHN0b3JhZ2VfY2hhcjE2X3QgKmFyZzIsIHNpemVfdCBsZW4yLAor CQkJCQkJCQlwZ19sb2NhbGVfdCBsb2NhbGUpOworc3RhdGljIGludAlzdHJuY29sbF9jaGFyMTZf dXRmOF9pY3UoY29uc3Qgc3RvcmFnZV9jaGFyMTZfdCAqYXJnMSwgc2l6ZV90IGxlbjEsCisJCQkJ CQkJCQkgY29uc3QgY2hhciAqYXJnMiwgc2l6ZV90IGxlbjIsCisJCQkJCQkJCQkgcGdfbG9jYWxl X3QgbG9jYWxlKTsKIHN0YXRpYyBzaXplX3Qgc3Rybnhmcm1faWN1KGNoYXIgKmRlc3QsIHNpemVf dCBkZXN0c2l6ZSwKIAkJCQkJCSAgIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAJ CQkJCQkgICBwZ19sb2NhbGVfdCBsb2NhbGUpOwpAQCAtMTY1LDYgKzE3MSw4IEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QgY29sbGF0ZV9tZXRob2RzIGNvbGxhdGVfbWV0aG9kc19pY3VfdXRmOCA9IHsK ICNlbHNlCiAJLnN0cm5jb2xsID0gc3RybmNvbGxfaWN1LAogI2VuZGlmCisJLnN0cm5jb2xsX2No YXIxNiA9IHN0cm5jb2xsX2NoYXIxNl9pY3UsCisJLnN0cm5jb2xsX2NoYXIxNl9sb2NhbCA9IHN0 cm5jb2xsX2NoYXIxNl91dGY4X2ljdSwKIAkuc3Rybnhmcm0gPSBzdHJueGZybV9pY3UsCiAJLnN0 cm54ZnJtX3ByZWZpeCA9IHN0cm54ZnJtX3ByZWZpeF9pY3VfdXRmOCwKIAkuc3RyeGZybV9pc19z YWZlID0gdHJ1ZSwKQEAgLTEwNjIsNiArMTA3MCw1MSBAQCBzdHJuY29sbF9pY3UoY29uc3QgY2hh ciAqYXJnMSwgc3NpemVfdCBsZW4xLAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbnQK K3N0cm5jb2xsX2NoYXIxNl9pY3UoY29uc3Qgc3RvcmFnZV9jaGFyMTZfdCAqZGF0YTEsIHNpemVf dCBzaXplMSwKKwkJCQkJY29uc3Qgc3RvcmFnZV9jaGFyMTZfdCAqZGF0YTIsIHNpemVfdCBzaXpl MiwKKwkJCQkJcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCVVDaGFySXRlcmF0b3IgaXRlcjE7CisJ VUNoYXJJdGVyYXRvciBpdGVyMjsKKwlVRXJyb3JDb2RlCXN0YXR1czsKKwlpbnQJCQlyZXN1bHQ7 CisKKwlVSVRFUl9TRVRfU1RPUkFHRV9DSEFSX1QoJml0ZXIxLCBkYXRhMSwgc2l6ZTEpOworCVVJ VEVSX1NFVF9TVE9SQUdFX0NIQVJfVCgmaXRlcjIsIGRhdGEyLCBzaXplMik7CisKKwlzdGF0dXMg PSBVX1pFUk9fRVJST1I7CisJcmVzdWx0ID0gdWNvbF9zdHJjb2xsSXRlcihsb2NhbGUtPmljdS51 Y29sLCAmaXRlcjEsICZpdGVyMiwgJnN0YXR1cyk7CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coImNvbGxhdGlvbiBmYWlsZWQ6ICVzIiwgdV9l cnJvck5hbWUoc3RhdHVzKSkpKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQK K3N0cm5jb2xsX2NoYXIxNl91dGY4X2ljdShjb25zdCBzdG9yYWdlX2NoYXIxNl90ICpkYXRhMSwg c2l6ZV90IHNpemUxLAorCQkJCQkJIGNvbnN0IGNoYXIgKmRhdGEyLCBzaXplX3Qgc2l6ZTIsCisJ CQkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCVVDaGFySXRlcmF0b3IgaXRlcjE7CisJVUNo YXJJdGVyYXRvciBpdGVyMjsKKwlVRXJyb3JDb2RlCXN0YXR1czsKKwlpbnQJCQlyZXN1bHQ7CisK KwkvKiBJdGVyYXRvcnMgZm9yIHVuYWxpZ25lZCBiaWctZW5kaWFuIFVURi0xNiBhbmQgVVRGLTgu ICovCisJVUlURVJfU0VUX1NUT1JBR0VfQ0hBUl9UKCZpdGVyMSwgZGF0YTEsIHNpemUxKTsKKwl1 aXRlcl9zZXRVVEY4KCZpdGVyMiwgZGF0YTIsIHNpemUyKTsKKworCXN0YXR1cyA9IFVfWkVST19F UlJPUjsKKwlyZXN1bHQgPSB1Y29sX3N0cmNvbGxJdGVyKGxvY2FsZS0+aWN1LnVjb2wsICZpdGVy MSwgJml0ZXIyLCAmc3RhdHVzKTsKKwlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycm1zZygiY29sbGF0aW9uIGZhaWxlZDogJXMiLCB1X2Vycm9yTmFtZShz dGF0dXMpKSkpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwogLyogJ3NyY2xlbicgb2YgLTEgbWVh bnMgdGhlIHN0cmluZ3MgYXJlIE5VTC10ZXJtaW5hdGVkICovCiBzdGF0aWMgc2l6ZV90CiBzdHJu eGZybV9wcmVmaXhfaWN1KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv dmFybGVuYS5jCmluZGV4IGMwZmY1MWJkMmZjLi4xNzRhYWMyNmM0OCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv dmFybGVuYS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1 ZGUgImxpYi9oeXBlcmxvZ2xvZy5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCisjaW5j bHVkZSAibWIvdW5pY29kZV9zdHJpbmdzLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3NjYW5zdXAuaCIKQEAg LTQwLDYgKzQxLDcgQEAKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1 dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZS5oIgorI2luY2x1ZGUg InV0aWxzL3BnX3N0YWNrX2FsbG9jLmgiCiAjaW5jbHVkZSAidXRpbHMvc29ydHN1cHBvcnQuaCIK ICNpbmNsdWRlICJ1dGlscy90dXBsZXN0b3JlLmgiCiAjaW5jbHVkZSAidXRpbHMvdmFybGVuYS5o IgpAQCAtNDcyOCw3ICs0NzMwLDcgQEAgdGV4dF9yZXZlcnNlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ dGV4dAkgICAqc3RyID0gUEdfR0VUQVJHX1RFWFRfUFAoMCk7CiAJY29uc3QgY2hhciAqcCA9IFZB UkRBVEFfQU5ZKHN0cik7CiAJaW50CQkJbGVuID0gVkFSU0laRV9BTllfRVhIRFIoc3RyKTsKLQlj b25zdCBjaGFyICplbmRwID0gcCArIGxlbjsKKwltYl9pdGVyYXRvciBpdGVyID0gTUJfSVRFUkFU T1JfSU5JVF9MT0NBTChwLCBsZW4pOwogCXRleHQJICAgKnJlc3VsdDsKIAljaGFyCSAgICpkc3Q7 CiAKQEAgLTQ3MzksMjIgKzQ3NDEsMTYgQEAgdGV4dF9yZXZlcnNlKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJaWYgKHBnX2RhdGFiYXNlX2VuY29kaW5nX21heF9sZW5ndGgoKSA+IDEpCiAJewogCQkvKiBt dWx0aWJ5dGUgdmVyc2lvbiAqLwotCQl3aGlsZSAocCA8IGVuZHApCi0JCXsKLQkJCWludAkJCXN6 OwotCi0JCQlzeiA9IHBnX21ibGVuX3JhbmdlKHAsIGVuZHApOwotCQkJZHN0IC09IHN6OwotCQkJ bWVtY3B5KGRzdCwgcCwgc3opOwotCQkJcCArPSBzejsKLQkJfQorCQl3aGlsZSAobWJfaXRlcmF0 b3JfaGFzX21vcmUoJml0ZXIpKQorCQkJZHN0IC09IG1iX2l0ZXJhdG9yX3N0b3JlX2JlZm9yZSgm aXRlciwgZHN0KTsKIAl9CiAJZWxzZQogCXsKIAkJLyogc2luZ2xlIGJ5dGUgdmVyc2lvbiAqLwot CQl3aGlsZSAocCA8IGVuZHApCi0JCQkqKC0tZHN0KSA9ICpwKys7CisJCXdoaWxlIChtYl9pdGVy YXRvcl9oYXNfbW9yZSgmaXRlcikpCisJCQlkc3QgLT0gbWJfaXRlcmF0b3Jfc3RvcmVfYmVmb3Jl X19zYigmaXRlciwgZHN0KTsKIAl9CisJQXNzZXJ0KGRzdCA9IFZBUkRBVEFfQU5ZKHJlc3VsdCkp OwogCiAJUEdfUkVUVVJOX1RFWFRfUChyZXN1bHQpOwogfQpAQCAtNTgwOSwzICs1ODA1LDQ1MSBA QCBpbnZhbGlkX3BhaXI6CiAJCQkgZXJybXNnKCJpbnZhbGlkIFVuaWNvZGUgc3Vycm9nYXRlIHBh aXIiKSkpOwogCVBHX1JFVFVSTl9OVUxMKCk7CQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwog fQorCisvKgorICogVVRGLTE2IHN0cmluZ3MuICBUaGVzZSBwcm92aWRlIG1vcmUgY29tcGFjdCBz dG9yYWdlIG9mIHNvbWUgbGFuZ3VhZ2VzIHRoYXQKKyAqIHdvdWxkIG90aGVyd2lzZSByZXF1aXJl IDMtYnl0ZSBVVEY4IHNldWVuY2VzIGZvciB0aGVpciBjb3JlIGNoYXJhY3RlciBzZXQuCisgKiBU aGV5IGFyZSBuZXZlciBkaXJlY3RseSBleHBvc2VkIHRvIGNsaWVudHMgd2l0aG91dCBjb252ZXJ0 ZWQgdG8gZGF0YWJhc2UKKyAqIGVuY29kaW5nLi4KKyAqLworCisvKgorICogQWxsb2NhdGUgYSBu ZXcgdXRmMTYgd2l0aCBzcGFjZSBmb3IgdXAgdG8gbWF4X3V0ZjE2X3NpemUgY2hhcjE2X3QKKyAq IGNvZGVwb2ludHMuICBXaGVuIGNvbnZlcnRpbmcgZnJvbSBkYXRhYmFzZSBlbmNvZGluZywgbXVs dGlwbHkgc291cmNlIGJ5dGVzCisgKiBieSBNQVhfVVRGMTZfQ09ERVBPSU5UU19QRVJfTUJMRU4u CisgKi8KK3N0YXRpYyBpbmxpbmUgdXRmMTYgKgordXRmMTZfbmV3KHNpemVfdCBtYXhfdXRmMTZf c2l6ZSkKK3sKKwl1dGYxNgkgICAqcmVzdWx0ID0gcGFsbG9jKFZBUkhEUlNaICsgbWF4X3V0ZjE2 X3NpemUgKiBzaXplb2YoY2hhcjE2X3QpKTsKKworCVNFVF9WQVJTSVpFKHJlc3VsdCwgVkFSSERS U1ogKyBzaXplb2YoY2hhcjE2X3QpICogbWF4X3V0ZjE2X3NpemUpOworCXJldHVybiByZXN1bHQ7 Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RvcmFnZV9jaGFyMTZfdCAqCit1dGYxNl9kYXRhKHV0ZjE2 ICp2YWx1ZSkKK3sKKwlyZXR1cm4gKHN0b3JhZ2VfY2hhcjE2X3QgKikgVkFSREFUQV9BTlkodmFs dWUpOworfQorCisvKgorICogUmV0dXJuIG51bWJlciBvZiBjaGFyMTZfdCBjaGFyYWN0ZXJzIGlu IGEgdXRmMTYuCisgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90Cit1dGYxNl9zaXplKGNvbnN0IHV0 ZjE2ICp2YWx1ZSkKK3sKKwlyZXR1cm4gVkFSU0laRV9BTllfRVhIRFIodmFsdWUpIC8gc2l6ZW9m KHN0b3JhZ2VfY2hhcjE2X3QpOworfQorCisvKgorICogQ29udmVuaWVuY2UgbWFjcm8gZm9yIGlu aXRpYWxpemluZyBjaGFyMTZfaXRlcmF0b3IgZGlyZWN0bHkgZnJvbSBhIHV0ZjE2CisgKiB2YXJs ZW5hIG9iamVjdC4KKyAqLworI2RlZmluZSBDSEFSMTZfSVRFUkFUT1JfSU5JVF9XSVRIX1VURjE2 KG8pIFwKKwlDSEFSMTZfSVRFUkFUT1JfSU5JVCh1dGYxNl9kYXRhKG8pLCB1dGYxNl9zaXplKG8p KQorCisvKgorICogU2V0IG51bWJlciBvZiBjaGFyMTZfdCBjaGFyYWN0ZXJzIGluIGEgdXRmMTYs IGlmIGl0IGRpZmZlcnMgZnJvbSB0aGUKKyAqIGVzdGltYXRlIGdpdmVuIHRvIHV0ZjE2X25ldygp LiAgSXQgY2FuJ3QgYmUgc2V0IGxhcmdlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit1dGYx Nl9zZXRfc2l6ZSh1dGYxNiAqdmFsdWUsIHNpemVfdCBzaXplKQoreworCXNpemVfdAkJdmFyc2l6 ZSA9IFZBUkhEUlNaICsgc2l6ZW9mKHN0b3JhZ2VfY2hhcjE2X3QpICogc2l6ZTsKKworCUFzc2Vy dCh2YXJzaXplIDw9IFZBUlNJWkUodmFsdWUpKTsKKwlTRVRfVkFSU0laRSh2YWx1ZSwgdmFyc2l6 ZSk7Cit9CisKKy8qCisgKiBDb25zdHJ1Y3QgYSBuZXcgdXRmMTYgZnJvbSBkYXRhYmFzZSBlbmNv ZGluZy4KKyAqLworc3RhdGljIGlubGluZSB1dGYxNiAqCit1dGYxNl9uZXdfZnJvbV9sb2NhbChj b25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNfc2l6ZSkKK3sKKwl1dGYxNgkgICAqcmVzdWx0Owor CXN0b3JhZ2VfY2hhcjE2X3QgKmRzdDsKKwlzaXplX3QJCWRzdF9zaXplOworCisJcmVzdWx0ID0g dXRmMTZfbmV3KG1iX3RvX2NoYXIxNl9tYXhfc2l6ZShzcmNfc2l6ZSkpOworCWRzdCA9IHV0ZjE2 X2RhdGEocmVzdWx0KTsKKwlkc3Rfc2l6ZSA9IGxvY2FsX3RvX2NoYXIxNihkc3QsIHNyYywgc3Jj X3NpemUpOworCXV0ZjE2X3NldF9zaXplKHJlc3VsdCwgZHN0X3NpemUpOworCisJcmV0dXJuIHJl c3VsdDsKK30KKworRGF0dW0KK3V0ZjE2X2xlbmd0aChQR19GVU5DVElPTl9BUkdTKQoreworCXV0 ZjE2CSAgICp1ID0gUEdfR0VUQVJHX1VURjE2X1BQKDApOworCWNoYXIxNl9pdGVyYXRvciBpdGVy ID0gQ0hBUjE2X0lURVJBVE9SX0lOSVRfV0lUSF9VVEYxNih1KTsKKwlpbnQzMgkJcmVzdWx0ID0g MDsKKworCXdoaWxlIChjaGFyMTZfaXRlcmF0b3JfaGFzX21vcmUoJml0ZXIpKQorCXsKKwkJcmVz dWx0Kys7CisJCWNoYXIxNl9pdGVyYXRvcl9hZHZhbmNlKCZpdGVyKTsKKwl9CisKKwlQR19SRVRV Uk5fSU5UMzIocmVzdWx0KTsKK30KKworRGF0dW0KK3V0ZjE2X29jdGV0X2xlbmd0aChQR19GVU5D VElPTl9BUkdTKQoreworCURhdHVtCQlzdHIgPSBQR19HRVRBUkdfREFUVU0oMCk7CisKKwlQR19S RVRVUk5fSU5UMzIoKHRvYXN0X3Jhd19kYXR1bV9zaXplKHN0cikgLSBWQVJIRFJTWikpOworfQor CitEYXR1bQordXRmMTZvdXQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwl1dGYxNgkgICAqdmFsdWUg PSBQR19HRVRBUkdfVVRGMTZfUFAoMCk7CisJY29uc3Qgc3RvcmFnZV9jaGFyMTZfdCAqc3JjID0g dXRmMTZfZGF0YSh2YWx1ZSk7CisJc2l6ZV90CQlzcmNfc2l6ZSA9IHV0ZjE2X3NpemUodmFsdWUp OworCWNoYXIJICAgKmRzdF9jc3RyOworCisJZHN0X2NzdHIgPSBwYWxsb2MoY2hhcjE2X3RvX21i X21heF9zaXplKHNyY19zaXplKSArIDEpOworCWNoYXIxNl90b19sb2NhbF9jc3RyKGRzdF9jc3Ry LCBzcmMsIHNyY19zaXplKTsKKworCVBHX1JFVFVSTl9DU1RSSU5HKGRzdF9jc3RyKTsKK30KKwor RGF0dW0KK3V0ZjE2aW4oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljb25zdCBjaGFyICpzcmNfY3N0 ciA9IFBHX0dFVEFSR19DU1RSSU5HKDApOworCXNpemVfdAkJc3JjX3NpemUgPSBzdHJsZW4oc3Jj X2NzdHIpOworCXV0ZjE2CSAgICpyZXN1bHQ7CisKKwlyZXN1bHQgPSB1dGYxNl9uZXdfZnJvbV9s b2NhbChzcmNfY3N0ciwgc3JjX3NpemUpOworCisJUEdfUkVUVVJOX1VURjE2X1AocmVzdWx0KTsK K30KKworRGF0dW0KK3V0ZjE2cmVjdihQR19GVU5DVElPTl9BUkdTKQoreworCVN0cmluZ0luZm8J YnVmID0gKFN0cmluZ0luZm8pIFBHX0dFVEFSR19QT0lOVEVSKDApOworCWNoYXIJICAgKnNyYzsK KwlpbnQJCQlzcmNfc2l6ZTsKKwl1dGYxNgkgICAqcmVzdWx0OworCisJc3JjID0gcHFfZ2V0bXNn dGV4dChidWYsIGJ1Zi0+bGVuIC0gYnVmLT5jdXJzb3IsICZzcmNfc2l6ZSk7CisJcmVzdWx0ID0g dXRmMTZfbmV3X2Zyb21fbG9jYWwoc3JjLCBzcmNfc2l6ZSk7CisJcGZyZWUoc3JjKTsKKworCVBH X1JFVFVSTl9VVEYxNl9QKHJlc3VsdCk7Cit9CisKK0RhdHVtCit1dGYxNnNlbmQoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwl1dGYxNgkgICAqdmFsdWUgPSBQR19HRVRBUkdfVVRGMTZfUFAoMCk7CisJ U3RyaW5nSW5mb0RhdGEgYnVmOworCWNvbnN0IHN0b3JhZ2VfY2hhcjE2X3QgKnNyYyA9IHV0ZjE2 X2RhdGEodmFsdWUpOworCXNpemVfdAkJc3JjX3NpemUgPSB1dGYxNl9zaXplKHZhbHVlKTsKKwlj aGFyCSAgICpkc3Q7CisJc2l6ZV90CQlkc3Rfc2l6ZTsKKworCURFQ0xBUkVfUEdfU1RBQ0soKTsK KworCWRzdCA9IHBnX3N0YWNrX2FsbG9jKGNoYXIxNl90b19tYl9tYXhfc2l6ZShzcmNfc2l6ZSkp OworCWRzdF9zaXplID0gY2hhcjE2X3RvX2xvY2FsKGRzdCwgc3JjLCBzcmNfc2l6ZSk7CisKKwlw cV9iZWdpbnR5cHNlbmQoJmJ1Zik7CisJcHFfc2VuZHRleHQoJmJ1ZiwgZHN0LCBkc3Rfc2l6ZSk7 CisKKwlwZ19zdGFja19mcmVlKGRzdCk7CisKKwlQR19SRVRVUk5fQllURUFfUChwcV9lbmR0eXBz ZW5kKCZidWYpKTsKK30KKworLyogQ29kZXBvaW50IG9yZGVyIGNvbXBhcmlzb24uICovCitzdGF0 aWMgaW50CitjaGFyMTZfY21wKGNvbnN0IHN0b3JhZ2VfY2hhcjE2X3QgKmRhdGExLCBzaXplX3Qg c2l6ZTEsCisJCSAgIGNvbnN0IHN0b3JhZ2VfY2hhcjE2X3QgKmRhdGEyLCBzaXplX3Qgc2l6ZTIp Cit7CisJaW50CQkJcmVzdWx0ID0gY2hhcjE2X2NtcDEoZGF0YTEsIGRhdGEyLCBNaW4oc2l6ZTEs IHNpemUyKSk7CisKKwlpZiAocmVzdWx0ID09IDApCisJCXJlc3VsdCA9IHNpemUxIDwgc2l6ZTIg PyAtMSA6IHNpemUxID4gc2l6ZTIgPyAxIDogMDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgor ICogWFhYIEl0IG1pZ2h0IGJlIG5pY2UgdG8gdXNlIF9HZW5lcmljIGZvciB0eXBlIHNlbGVjdGlv biBpbnN0ZWFkIG9mIGZ1bmt5CisgKiBuYW1lLXBhc3RpbmcgbWFjcm9zIHdoZXJlIHlvdSBoYXZl IHRvIHN0YXRlIHRoZSB0eXBlbmFtZXMgZXhwbGljaXRseSwgYnV0CisgKiB1dGYxNiBhbmQgdGV4 dCBhcmUgbm90IGRpc3RpbmN0IEMgdHlwZXMuCisgKi8KKworLyogR2V0IGFuIGZtZ3IgYXJndW1l bnQgb2YgdHlwZSBULiAqLworI2RlZmluZSBHRU5fR0VUX0FSR19fdGV4dAkJCQkJCQkJUEdfR0VU QVJHX1RFWFRfUFAKKyNkZWZpbmUgR0VOX0dFVF9BUkdfX05hbWVEYXRhIAkJCQkJCQlQR19HRVRB UkdfTkFNRQorI2RlZmluZSBHRU5fR0VUX0FSR19fdXRmMTYgCQkJCQkJCQlQR19HRVRBUkdfVVRG MTZfUFAKKyNkZWZpbmUgR0VOX0dFVF9BUkcoVCwgbikgQ3BwQ29uY2F0MihHRU5fR0VUX0FSR19f LCBUKShuKQorCisvKiBHZXQgdGhlIGNoYXJhY3RlciB0eXBlIGZvciB0eXBlIFQuICovCisjZGVm aW5lIEdFTl9UWVBFT0ZfQ0hBUl9fdGV4dAkJCQkJCQljaGFyCisjZGVmaW5lIEdFTl9UWVBFT0Zf Q0hBUl9fTmFtZURhdGEJCQkJCQljaGFyCisjZGVmaW5lIEdFTl9UWVBFT0ZfQ0hBUl9fdXRmMTYJ CQkJCQkJc3RvcmFnZV9jaGFyMTZfdAorI2RlZmluZSBHRU5fVFlQRU9GX0NIQVIoVCkgQ3BwQ29u Y2F0MihHRU5fVFlQRU9GX0NIQVJfXywgVCkKKworLyogR2V0IGEgcG9pbnRlciB0byB0aGUgYmFz aWMgY2hhcmFjdGVycyBmcm9tIHR5cGUgVC4gKi8KKyNkZWZpbmUgR0VOX0dFVF9EQVRBX190ZXh0 KHYpIAkJCQkJCQlWQVJEQVRBX0FOWSh2KQorI2RlZmluZSBHRU5fR0VUX0RBVEFfX05hbWVEYXRh KHYpCQkJCQkJTmFtZVN0cigqKHYpKQorI2RlZmluZSBHRU5fR0VUX0RBVEFfX3V0ZjE2KHYpIAkJ CQkJCQl1dGYxNl9kYXRhKHYpCisjZGVmaW5lIEdFTl9HRVRfREFUQShULCB2KSBDcHBDb25jYXQy KEdFTl9HRVRfREFUQV9fLCBUKSh2KQorCisvKiBHZXQgc2l6ZSBpbiBiYXNpYyBjaGFyYWN0ZXJz IGZyb20gVC4gKi8KKyNkZWZpbmUgR0VOX0dFVF9TSVpFX190ZXh0KHYpIFZBUlNJWkVfQU5ZX0VY SERSKHYpCisjZGVmaW5lIEdFTl9HRVRfU0laRV9fTmFtZURhdGEodikgc3RybmxlbihOYW1lU3Ry KCoodikpLCBOQU1FREFUQUxFTikKKyNkZWZpbmUgR0VOX0dFVF9TSVpFX191dGYxNih2KSB1dGYx Nl9zaXplKHYpCisjZGVmaW5lIEdFTl9HRVRfU0laRShULCB2KSBDcHBDb25jYXQyKEdFTl9HRVRf U0laRV9fLCBUKSh2KQorCisvKiBOYW1lIG1hbmdsaW5nIGNvbnZlbnRpb24gZm9yIHBhaXJzIG9m IGNoYXJhY3RlciB0eXBlcy4gKi8KKyNkZWZpbmUgR0VOX0ZOQU1FX19jaGFyX19jaGFyCQkJCQkJ CWxvY2FsCisjZGVmaW5lIEdFTl9GTkFNRV9fc3RvcmFnZV9jaGFyMTZfdF9fc3RvcmFnZV9jaGFy MTZfdAljaGFyMTYKKyNkZWZpbmUgR0VOX0ZOQU1FX19jaGFyX19zdG9yYWdlX2NoYXIxNl90CQkJ CWxvY2FsX2NoYXIxNgorI2RlZmluZSBHRU5fRk5BTUVfX3N0b3JhZ2VfY2hhcjE2X3RfX2NoYXIJ CQkJY2hhcjE2X2xvY2FsCisKKy8qIE5hbWUgbWFuZ2xpbmcgY29udmVudGlvbiBmb3IgcGFpcnMg b2YgdHlwZXMuICovCisjZGVmaW5lIEdFTl9GTkFNRV9fdGV4dF9fdGV4dAkJCQkJCQl0ZXh0Cisj ZGVmaW5lIEdFTl9GTkFNRV9fdGV4dF9fTmFtZURhdGEJCQkJCQl0ZXh0bmFtZQorI2RlZmluZSBH RU5fRk5BTUVfX3RleHRfX3V0ZjE2IAkJCQkJCQl0ZXh0dXRmMTYKKyNkZWZpbmUgR0VOX0ZOQU1F X19OYW1lRGF0YV9fdGV4dCAJCQkJCQluYW1ldGV4dAorI2RlZmluZSBHRU5fRk5BTUVfX05hbWVE YXRhX19OYW1lRGF0YQkJCQkJbmFtZQorI2RlZmluZSBHRU5fRk5BTUVfX05hbWVEYXRhX191dGYx NgkJCQkJCW5hbWV1dGYxNgorI2RlZmluZSBHRU5fRk5BTUVfX3V0ZjE2X190ZXh0CQkJCQkJCXV0 ZjE2dGV4dAorI2RlZmluZSBHRU5fRk5BTUVfX3V0ZjE2X19OYW1lRGF0YQkJCQkJCXV0ZjE2bmFt ZQorI2RlZmluZSBHRU5fRk5BTUVfX3V0ZjE2X191dGYxNgkJCQkJCQl1dGYxNgorCisvKiBNYWtl IGZ1bmN0aW9uIG5hbWUgZm9yIG92ZXJsb2FkIFQxLCBUMiAocHJlZml4LCBzdWZmaXggc3R5bGUp LiAqLworI2RlZmluZSBHRU5fRk5BTUVfUChwcmVmaXgsIFQxLCBUMikJCQkJCQkJCQkJXAorCUNw cENvbmNhdDIocHJlZml4LCBDcHBDb25jYXQyKEdFTl9GTkFNRV9fLCBUMSMjX18jI1QyKSkKKyNk ZWZpbmUgR0VOX0ZOQU1FX1MoVDEsIFQyLCBzdWZmaXgpCQkJCQkJCQkJCVwKKwlDcHBDb25jYXQy KENwcENvbmNhdDIoR0VOX0ZOQU1FX18sIFQxIyNfXyMjVDIpLCBzdWZmaXgpCisKKy8qIENhbGwg ZnVuY3Rpb24gb3ZlcmxvYWRlZCBmb3IgVDEsIFQyIChwcmVmaXgsIHN1ZmZpeCBzdHlsZSkuICov CisjZGVmaW5lIEdFTl9DQUxMX09WRVJMT0FEX1AocHJlZml4LCBUMSwgVDIsIC4uLikJCQkJCQlc CisJR0VOX0ZOQU1FX1AocHJlZml4LCBUMSwgVDIpKF9fVkFfQVJHU19fKQorI2RlZmluZSBHRU5f Q0FMTF9PVkVSTE9BRF9TKFQxLCBUMiwgc3VmZml4LCAuLi4pCQkJCQkJXAorCUdFTl9GTkFNRV9T KFQxLCBUMiwgc3VmZml4KShfX1ZBX0FSR1NfXykKKworI2RlZmluZSBHRU5fU1RSTkNPTEwoVDEs IFQyKQkJCQkJCQkJCQkJXAorc3RhdGljIGludAkJCQkJCQkJCQkJCQkJCQlcCitHRU5fRk5BTUVf UyhUMSwgVDIsIF9zdHJuY29sbCkgKGNvbnN0IFQxICpkYXRhMSwgc2l6ZV90IHNpemUxLAkJCVwK KwkJCQkJCQkJY29uc3QgVDIgKmRhdGEyLCBzaXplX3Qgc2l6ZTIsCQkJXAorCQkJCQkJCQlPaWQg Y29sbGlkKQkJCQkJCQkJXAorewkJCQkJCQkJCQkJCQkJCQkJCVwKKwlwZ19sb2NhbGVfdCBteWxv Y2FsZTsJCQkJCQkJCQkJCQlcCisJaW50CQkJcmVzdWx0OwkJCQkJCQkJCQkJCQlcCisJY2hlY2tf Y29sbGF0aW9uX3NldChjb2xsaWQpOwkJCQkJCQkJCQlcCisJbXlsb2NhbGUgPSBwZ19uZXdsb2Nh bGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsJCQkJCQlcCisJaWYgKG15bG9jYWxlLT5jb2xsYXRl X2lzX2MpCQkJCQkJCQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCQkJXAorCQkvKiBDb2RlcG9pbnQg b3JkZXIgZGV0ZXJtaW5lcyByZXN1bHQuICovCQkJCQkJXAorCQlyZXN1bHQgPSBHRU5fQ0FMTF9P VkVSTE9BRF9TKFQxLCBUMiwgX2NtcCwJCQkJCQlcCisJCQkJCQkJCQkgZGF0YTEsIHNpemUxLCBk YXRhMiwgc2l6ZTIpOwkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCVwKKwllbHNlCQkJCQkJCQkJCQkJ CQkJCVwKKwl7CQkJCQkJCQkJCQkJCQkJCQlcCisJCS8qIExvY2FsZSBkZXRlcm1pbmVzIHJlc3Vs dHMuICovCQkJCQkJCQlcCisJCXJlc3VsdCA9IEdFTl9DQUxMX09WRVJMT0FEX1AocGdfc3RybmNv bGxfLCBUMSwgVDIsCQkJCVwKKwkJCQkJCQkJCSBkYXRhMSwgc2l6ZTEsIGRhdGEyLCBzaXplMiwJ CVwKKwkJCQkJCQkJCSBteWxvY2FsZSk7CQkJCQkJCVwKKwkJLyogQ29kZXBvaW50IG9yZGVyIHRp ZS1icmVha2VyIGZvciBkZXJtaW5pc3RpYyBsb2NhbGVzLiAqLwkJXAorCQlpZiAocmVzdWx0ID09 IDAgJiYgbXlsb2NhbGUtPmRldGVybWluaXN0aWMpCQkJCQkJXAorCQkJcmVzdWx0ID0gR0VOX0NB TExfT1ZFUkxPQURfUyhUMSwgVDIsIF9jbXAsCQkJCQlcCisJCQkJCQkJCQkJIGRhdGExLCBzaXpl MSwgZGF0YTIsIHNpemUyKTsJXAorCX0JCQkJCQkJCQkJCQkJCQkJCVwKKwlyZXR1cm4gcmVzdWx0 OwkJCQkJCQkJCQkJCQkJXAorfQorCisvKiBEaXNwYXRjaCB0byBjb3JyZWN0IG92ZXJsb2FkIG9m IFhYWF9zdHJuY29sbCgpLiAqLworI2RlZmluZSBHRU5fQ01QKFQxLCBUMikJCQkJCQkJCQkJCQkJ XAorRGF0dW0JCQkJCQkJCQkJCQkJCQkJCVwKK0dFTl9GTkFNRV9TKFQxLCBUMiwgY21wKShQR19G VU5DVElPTl9BUkdTKQkJCQkJCQkJXAorewkJCQkJCQkJCQkJCQkJCQkJCVwKKwlUMSAqYXJnMSA9 IEdFTl9HRVRfQVJHKFQxLCAwKTsJCQkJCQkJCQkJXAorCVQyICphcmcyID0gR0VOX0dFVF9BUkco VDIsIDEpOwkJCQkJCQkJCQlcCisJT2lkIGNvbGxpZCA9IFBHX0dFVF9DT0xMQVRJT04oKTsJCQkJ CQkJCQlcCisJaW50IHJlc3VsdCA9IEdFTl9DQUxMX09WRVJMT0FEX1MoR0VOX1RZUEVPRl9DSEFS KFQxKSwJCQkJXAorCQkJCQkJCQkJIEdFTl9UWVBFT0ZfQ0hBUihUMiksCQkJCVwKKwkJCQkJCQkJ CSBfc3RybmNvbGwsCQkJCQkJCVwKKwkJCQkJCQkJCSBHRU5fR0VUX0RBVEEoVDEsIGFyZzEpLAkJ CVwKKwkJCQkJCQkJCSBHRU5fR0VUX1NJWkUoVDEsIGFyZzEpLAkJCVwKKwkJCQkJCQkJCSBHRU5f R0VUX0RBVEEoVDIsIGFyZzIpLAkJCVwKKwkJCQkJCQkJCSBHRU5fR0VUX1NJWkUoVDIsIGFyZzIp LAkJCVwKKwkJCQkJCQkJCSBjb2xsaWQpOwkJCQkJCQlcCisJUEdfRlJFRV9JRl9DT1BZKGFyZzEs IDApOwkJCQkJCQkJCQkJXAorCVBHX0ZSRUVfSUZfQ09QWShhcmcyLCAxKTsJCQkJCQkJCQkJCVwK KwlQR19SRVRVUk5fSU5UMzIocmVzdWx0KTsJCQkJCQkJCQkJCVwKK30KKworLyogR2VuZXJhbCBj YXNlOiBkaXNwYXRjaCB0byBjb3JyZWN0IG92ZXJsb2FkIG9mIFhYWF9zdHJuY29sbCgpLiAqLwor I2RlZmluZSBHRU5fUkVMKFQxLCBUMiwgc3VmZml4LCBvcCkJCQkJCQkJCQkJXAorRGF0dW0JCQkJ CQkJCQkJCQkJCQkJCVwKK0dFTl9GTkFNRV9TKFQxLCBUMiwgc3VmZml4KShQR19GVU5DVElPTl9B UkdTKQkJCQkJCQlcCit7CQkJCQkJCQkJCQkJCQkJCQkJXAorCVQxICphcmcxID0gR0VOX0dFVF9B UkcoVDEsIDApOwkJCQkJCQkJCQlcCisJVDIgKmFyZzIgPSBHRU5fR0VUX0FSRyhUMiwgMSk7CQkJ CQkJCQkJCVwKKwlPaWQgY29sbGlkID0gUEdfR0VUX0NPTExBVElPTigpOwkJCQkJCQkJCVwKKwlp bnQgcmVzdWx0ID0gR0VOX0NBTExfT1ZFUkxPQURfUyhHRU5fVFlQRU9GX0NIQVIoVDEpLAkJCQlc CisJCQkJCQkJCQkgR0VOX1RZUEVPRl9DSEFSKFQyKSwJCQkJXAorCQkJCQkJCQkJIF9zdHJuY29s bCwJCQkJCQkJXAorCQkJCQkJCQkJIEdFTl9HRVRfREFUQShUMSwgYXJnMSksCQkJXAorCQkJCQkJ CQkJIEdFTl9HRVRfU0laRShUMSwgYXJnMSksCQkJXAorCQkJCQkJCQkJIEdFTl9HRVRfREFUQShU MiwgYXJnMiksCQkJXAorCQkJCQkJCQkJIEdFTl9HRVRfU0laRShUMiwgYXJnMiksCQkJXAorCQkJ CQkJCQkJIGNvbGxpZCk7CQkJCQkJCVwKKwlQR19GUkVFX0lGX0NPUFkoYXJnMSwgMCk7CQkJCQkJ CQkJCQlcCisJUEdfRlJFRV9JRl9DT1BZKGFyZzIsIDEpOwkJCQkJCQkJCQkJXAorCVBHX1JFVFVS Tl9CT09MKHJlc3VsdCBvcCAwKTsJCQkJCQkJCQkJXAorfQorCisvKgorICogU3BlY2lhbCBjYXNl IGZvciA9PSBhbmQgIT0gYW5kIGRldGVybWluaXN0aWMgbG9jYWxlczogYml0IGxldmVsIGNvbXBh cmUsCisgKiBza2lwcGluZyB0aGUgbG9jYWxlIHN5c3RlbS4gIE90aGVyd2lzZSwgc2FtZSBhcyB0 aGUgYWJvdmUuCisgKi8KKyNkZWZpbmUgR0VOX0VRKFQxLCBUMiwgc3VmZml4LCBvcCkJCQkJCQkJ CQkJXAorRGF0dW0JCQkJCQkJCQkJCQkJCQkJCVwKK0dFTl9GTkFNRV9TKFQxLCBUMiwgc3VmZml4 KShQR19GVU5DVElPTl9BUkdTKQkJCQkJCQlcCit7CQkJCQkJCQkJCQkJCQkJCQkJXAorCU9pZAkJ CWNvbGxpZCA9IFBHX0dFVF9DT0xMQVRJT04oKTsJCQkJCQkJXAorCXBnX2xvY2FsZV90IG15bG9j YWxlID0gMDsJCQkJCQkJCQkJCVwKKwlzdGF0aWNfYXNzZXJ0KHNpemVvZihHRU5fVFlQRU9GX0NI QVIoVDEpKSAhPQkJCQkJCVwKKwkJCQkgIHNpemVvZihHRU5fVFlQRU9GX0NIQVIoVDIpKSwJCQkJ CQkJXAorCQkJCSAgInNob3VsZCB1c2Ugb3B0aW1pemVkIHZlcnNpb24gZm9yIHNhbWUgY2hhciB0 eXBlIik7CVwKKwljaGVja19jb2xsYXRpb25fc2V0KGNvbGxpZCk7CQkJCQkJCQkJCVwKKwlteWxv Y2FsZSA9IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQpOwkJCQkJCVwKKwlpZiAo bXlsb2NhbGUtPmRldGVybWluaXN0aWMpCQkJCQkJCQkJCVwKKwl7CQkJCQkJCQkJCQkJCQkJCQlc CisJCS8qIENvZGVwb2ludCBvcmRlciB0aGVuIGxlbmd0aCBkZXRlcm1pbmUgcmVzdWx0LiAqLwkJ CQlcCisJCVQxICphcmcxID0gR0VOX0dFVF9BUkcoVDEsIDApOwkJCQkJCQkJCVwKKwkJVDIgKmFy ZzIgPSBHRU5fR0VUX0FSRyhUMiwgMSk7CQkJCQkJCQkJXAorCQlpbnQgcmVzdWx0ID0gR0VOX0NB TExfT1ZFUkxPQURfUyhHRU5fVFlQRU9GX0NIQVIoVDEpLAkJCVwKKwkJCQkJCQkJCQkgR0VOX1RZ UEVPRl9DSEFSKFQyKSwJCQlcCisJCQkJCQkJCQkJIF9jbXAsCQkJCQkJCVwKKwkJCQkJCQkJCQkg R0VOX0dFVF9EQVRBKFQxLCBhcmcxKSwJCVwKKwkJCQkJCQkJCQkgR0VOX0dFVF9TSVpFKFQxLCBh cmcxKSwJCVwKKwkJCQkJCQkJCQkgR0VOX0dFVF9EQVRBKFQyLCBhcmcyKSwJCVwKKwkJCQkJCQkJ CQkgR0VOX0dFVF9TSVpFKFQyLCBhcmcyKSk7CQlcCisJCVBHX0ZSRUVfSUZfQ09QWShhcmcxLCAw KTsJCQkJCQkJCQkJXAorCQlQR19GUkVFX0lGX0NPUFkoYXJnMiwgMSk7CQkJCQkJCQkJCVwKKwkJ UEdfUkVUVVJOX0JPT0wocmVzdWx0IG9wIDApOwkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJ CQlcCisJZWxzZQkJCQkJCQkJCQkJCQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCQkJXAorCQkvKiBM b2NhbGUgZGV0ZXJtaW5lcyByZXN1bHQuICovCQkJCQkJCQkJXAorCQlUMSAqYXJnMSA9IEdFTl9H RVRfQVJHKFQxLCAwKTsJCQkJCQkJCQlcCisJCVQyICphcmcyID0gR0VOX0dFVF9BUkcoVDIsIDEp OwkJCQkJCQkJCVwKKwkJaW50IHJlc3VsdCA9IEdFTl9DQUxMX09WRVJMT0FEX1MoR0VOX1RZUEVP Rl9DSEFSKFQxKSwJCQlcCisJCQkJCQkJCQkJIEdFTl9UWVBFT0ZfQ0hBUihUMiksCQkJXAorCQkJ CQkJCQkJCSBfc3RybmNvbGwsCQkJCQkJXAorCQkJCQkJCQkJCSBHRU5fR0VUX0RBVEEoVDEsIGFy ZzEpLAkJXAorCQkJCQkJCQkJCSBHRU5fR0VUX1NJWkUoVDEsIGFyZzEpLAkJXAorCQkJCQkJCQkJ CSBHRU5fR0VUX0RBVEEoVDIsIGFyZzIpLAkJXAorCQkJCQkJCQkJCSBHRU5fR0VUX1NJWkUoVDIs IGFyZzIpLAkJXAorCQkJCQkJCQkJCSBjb2xsaWQpOwkJCQkJCVwKKwkJUEdfRlJFRV9JRl9DT1BZ KGFyZzEsIDApOwkJCQkJCQkJCQlcCisJCVBHX0ZSRUVfSUZfQ09QWShhcmcyLCAxKTsJCQkJCQkJ CQkJXAorCQlQR19SRVRVUk5fQk9PTChyZXN1bHQgb3AgMCk7CQkJCQkJCQkJXAorCX0JCQkJCQkJ CQkJCQkJCQkJCVwKK30KKworLyoKKyAqIFNwZWNpYWwgY2FzZSBmb3IgPT0gYW5kICE9IGFuZCBk ZXRlcm1pbmlzdGljIGxvY2FsZXMgd2hlbiB0aGUgYmFzaWMgY2hhcgorICogdHlwZSBpcyB0aGUg c2FtZTogd2UgY2FuIGNoZWFwbHkgY2hlY2sgdGhlIHNpemUgZmlyc3QgdG8gZGV0ZXJtaW5lIHRo YXQKKyAqIHN0cmluZ3MgYXJlIE5PVCBlcXVhbC4KKyAqLworI2RlZmluZSBHRU5fRVFfU0FNRV9D SEFSKFQxLCBUMiwgc3VmZml4LCBvcCkJCQkJCQkJXAorRGF0dW0JCQkJCQkJCQkJCQkJCQkJCVwK K0dFTl9GTkFNRV9TKFQxLCBUMiwgc3VmZml4KShQR19GVU5DVElPTl9BUkdTKQkJCQkJCQlcCit7 CQkJCQkJCQkJCQkJCQkJCQkJXAorCU9pZAkJCWNvbGxpZCA9IFBHX0dFVF9DT0xMQVRJT04oKTsJ CQkJCQkJXAorCXBnX2xvY2FsZV90IG15bG9jYWxlID0gMDsJCQkJCQkJCQkJCVwKKwlzdGF0aWNf YXNzZXJ0KHNpemVvZihHRU5fVFlQRU9GX0NIQVIoVDEpKSA9PQkJCQkJCVwKKwkJCQkgIHNpemVv ZihHRU5fVFlQRU9GX0NIQVIoVDIpKSwJCQkJCQkJXAorCQkJCSAgIm9wdGltaXphdGlvbiByZXF1 aXJlcyBzYW1lIGNoYXIiKTsJCQkJCVwKKwljaGVja19jb2xsYXRpb25fc2V0KGNvbGxpZCk7CQkJ CQkJCQkJCVwKKwlteWxvY2FsZSA9IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQp OwkJCQkJCVwKKwlpZiAobXlsb2NhbGUtPmRldGVybWluaXN0aWMpCQkJCQkJCQkJCVwKKwl7CQkJ CQkJCQkJCQkJCQkJCQlcCisJCS8qIE9wdGltaXphdGlvbiBmb3Igc2FtZSBiYXNpYyBjaGFyYWN0 ZXIgdHlwZS4gKi8JCQkJXAorCQlpZiAodG9hc3RfcmF3X2RhdHVtX3NpemUoUEdfR0VUQVJHX0RB VFVNKDApKSAhPQkJCQkJXAorCQkJdG9hc3RfcmF3X2RhdHVtX3NpemUoUEdfR0VUQVJHX0RBVFVN KDEpKSkJCQkJCVwKKwkJewkJCQkJCQkJCQkJCQkJCQlcCisJCQkvKiBEaWZmZXJlbnQgc2l6ZTog ZmFzdCByZXN1bHQgd2l0aG91dCBkZXRvYXN0aW5nLiAqLwkJXAorCQkJUEdfUkVUVVJOX0JPT0wo ZmFsc2Ugb3AgdHJ1ZSk7CQkJCQkJCQlcCisJCX0JCQkJCQkJCQkJCQkJCQkJXAorCQllbHNlCQkJ CQkJCQkJCQkJCQkJXAorCQl7CQkJCQkJCQkJCQkJCQkJCVwKKwkJCS8qIFNhbWUgc2l6ZTogY29k ZXBvaW50IGVxdWFsaXR5IGRldGVybWluZXMgcmVzdWx0LiAqLwkJXAorCQkJVDEgKmFyZzEgPSBQ R19HRVRBUkdfVVRGMTZfUFAoMCk7CQkJCQkJCVwKKwkJCVQyICphcmcyID0gUEdfR0VUQVJHX1VU RjE2X1BQKDEpOwkJCQkJCQlcCisJCQlpbnQgcmVzdWx0ID0gR0VOX0NBTExfT1ZFUkxPQURfUyhH RU5fVFlQRU9GX0NIQVIoVDEpLAkJXAorCQkJCQkJCQkJCQkgR0VOX1RZUEVPRl9DSEFSKFQyKSwJ CVwKKwkJCQkJCQkJCQkJIF9jbXAxLAkJCQkJCVwKKwkJCQkJCQkJCQkJIEdFTl9HRVRfREFUQShU MSwgYXJnMSksCVwKKwkJCQkJCQkJCQkJIEdFTl9HRVRfREFUQShUMiwgYXJnMiksCVwKKwkJCQkJ CQkJCQkJIEdFTl9HRVRfU0laRShUMSwgYXJnMSkpOwlcCisJCQlBc3NlcnQoR0VOX0dFVF9TSVpF KFQxLCBhcmcxKSA9PSBHRU5fR0VUX1NJWkUoVDIsIGFyZzIpKTsJXAorCQkJUEdfRlJFRV9JRl9D T1BZKGFyZzEsIDApOwkJCQkJCQkJCVwKKwkJCVBHX0ZSRUVfSUZfQ09QWShhcmcyLCAxKTsJCQkJ CQkJCQlcCisJCQlQR19SRVRVUk5fQk9PTChyZXN1bHQgb3AgMCk7CQkJCQkJCQlcCisJCX0JCQkJ CQkJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCVwKKwllbHNlCQkJCQkJCQkJCQkJCQkJ CVwKKwl7CQkJCQkJCQkJCQkJCQkJCQlcCisJCS8qIExvY2FsZSBkZXRlcm1pbmVzIHJlc3VsdC4g Ki8JCQkJCQkJCQlcCisJCVQxICphcmcxID0gR0VOX0dFVF9BUkcoVDEsIDApOwkJCQkJCQkJCVwK KwkJVDIgKmFyZzIgPSBHRU5fR0VUX0FSRyhUMiwgMSk7CQkJCQkJCQkJXAorCQlpbnQgcmVzdWx0 ID0gR0VOX0NBTExfT1ZFUkxPQURfUyhHRU5fVFlQRU9GX0NIQVIoVDEpLAkJCVwKKwkJCQkJCQkJ CQkgR0VOX1RZUEVPRl9DSEFSKFQyKSwJCQlcCisJCQkJCQkJCQkJIF9zdHJuY29sbCwJCQkJCQlc CisJCQkJCQkJCQkJIEdFTl9HRVRfREFUQShUMSwgYXJnMSksCQlcCisJCQkJCQkJCQkJIEdFTl9H RVRfU0laRShUMSwgYXJnMSksCQlcCisJCQkJCQkJCQkJIEdFTl9HRVRfREFUQShUMiwgYXJnMiks CQlcCisJCQkJCQkJCQkJIEdFTl9HRVRfU0laRShUMiwgYXJnMiksCQlcCisJCQkJCQkJCQkJIGNv bGxpZCk7CQkJCQkJXAorCQlQR19GUkVFX0lGX0NPUFkoYXJnMSwgMCk7CQkJCQkJCQkJCVwKKwkJ UEdfRlJFRV9JRl9DT1BZKGFyZzIsIDEpOwkJCQkJCQkJCQlcCisJCVBHX1JFVFVSTl9CT09MKHJl c3VsdCBvcCAwKTsJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJXAorfQorCisvKiBNYWtl IHRoZSB3b3JraG9yc2UgY2hhcmFjdGVyLWJhc2VkIGNvbGxhdGlvbiBmdW5jdGlvbnMuICovCitH RU5fU1RSTkNPTEwoc3RvcmFnZV9jaGFyMTZfdCwgc3RvcmFnZV9jaGFyMTZfdCk7CitHRU5fU1RS TkNPTEwoc3RvcmFnZV9jaGFyMTZfdCwgY2hhcik7CitHRU5fU1RSTkNPTEwoY2hhciwgc3RvcmFn ZV9jaGFyMTZfdCk7CisKKy8qIE1ha2UgdGhlIHJlZ2lzdGVyZWQgcHJvY2VkdXJlcyB3aXRoIG5v bi1kZXRvYXN0aW5nIG9wdGltaXphdGlvbi4gKi8KKyNkZWZpbmUgR0VOX1JFTFNfU0FNRV9DSEFS KFQxLCBUMikJCQkJCQkJCQkJXAorCUdFTl9DTVAoVDEsIFQyKTsJCQkJCQkJCQkJCQkJXAorCUdF Tl9FUV9TQU1FX0NIQVIoVDEsIFQyLCBlcSwgPT0pOwkJCQkJCQkJCVwKKwlHRU5fRVFfU0FNRV9D SEFSKFQxLCBUMiwgbmUsICE9KTsJCQkJCQkJCQlcCisJR0VOX1JFTChUMSwgVDIsIGx0LCA8KTsJ CQkJCQkJCQkJCQlcCisJR0VOX1JFTChUMSwgVDIsIGxlLCA8PSk7CQkJCQkJCQkJCQlcCisJR0VO X1JFTChUMSwgVDIsIGdlLCA+PSk7CQkJCQkJCQkJCQlcCisJR0VOX1JFTChUMSwgVDIsIGd0LCA+ KTsKKworLyogTWFrZSB0aGUgcmVnaXN0ZXJlZCBwcmVjZWR1cmVzIHdpdGhvdXQgbm9uLWRldG9h c3Rpbmcgb3B0aW1pemF0aW9uLiAqLworI2RlZmluZSBHRU5fUkVMU19ESUZGX0NIQVIoVDEsIFQy KQkJCQkJCQkJCQlcCisJR0VOX0NNUChUMSwgVDIpOwkJCQkJCQkJCQkJCQlcCisJR0VOX0VRKFQx LCBUMiwgZXEsID09KTsJCQkJCQkJCQkJCQlcCisJR0VOX0VRKFQxLCBUMiwgbmUsICE9KTsJCQkJ CQkJCQkJCQlcCisJR0VOX1JFTChUMSwgVDIsIGx0LCA8KTsJCQkJCQkJCQkJCQlcCisJR0VOX1JF TChUMSwgVDIsIGxlLCA8PSk7CQkJCQkJCQkJCQlcCisJR0VOX1JFTChUMSwgVDIsIGdlLCA+PSk7 CQkJCQkJCQkJCQlcCisJR0VOX1JFTChUMSwgVDIsIGd0LCA+KTsKKworLyogRm9yIG5vdywgZ2Vu ZXJhdGUgb25seSB0eXBlIHBlcm11dGF0aW9ucyB3aXRoIHV0ZjE2IG9uIG9uZSBzaWRlLiAqLwor R0VOX1JFTFNfRElGRl9DSEFSKHV0ZjE2LCB0ZXh0KTsKK0dFTl9SRUxTX0RJRkZfQ0hBUih1dGYx NiwgTmFtZURhdGEpOworR0VOX1JFTFNfRElGRl9DSEFSKHRleHQsIHV0ZjE2KTsKK0dFTl9SRUxT X0RJRkZfQ0hBUihOYW1lRGF0YSwgdXRmMTYpOworR0VOX1JFTFNfU0FNRV9DSEFSKHV0ZjE2LCB1 dGYxNik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jLmggYi9zcmMvaW5jbHVkZS9jLmgKaW5k ZXggOTdlZDhjNjNmNWUuLjA3NzY2NTE2YmRlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jLmgK KysrIGIvc3JjL2luY2x1ZGUvYy5oCkBAIC00OTcsNiArNDk3LDggQEAgZXh0ZXJuICJDKysiCiAg KgkJQ29udmVydCB0aGUgYXJndW1lbnQgdG8gYSBzdHJpbmcsIGFmdGVyIG9uZSByb3VuZCBvZiBt YWNybyBleHBhbnNpb24uCiAgKiBDcHBDb25jYXQKICAqCQlDb25jYXRlbmF0ZSB0d28gYXJndW1l bnRzIHRvZ2V0aGVyLCB1c2luZyB0aGUgQyBwcmVwcm9jZXNzb3IuCisgKiBDcHBDb25jYXQyCisg KgkJQ29uY2F0ZW5hdGUgdHdvIGFyZ3VtZW50cyB0b2dldGhlciwgYW5kIGFwcGx5IG1hY3JvIGV4 cGFuc2lvbi4KICAqCiAgKiBOb3RlOiBUaGVyZSB1c2VkIHRvIGJlIHN1cHBvcnQgaGVyZSBmb3Ig cHJlLUFOU0kgQyBjb21waWxlcnMgdGhhdCBkaWRuJ3QKICAqIHN1cHBvcnQgIyBhbmQgIyMuICBO b3dhZGF5cywgdGhlc2UgbWFjcm9zIGFyZSBqdXN0IGZvciBjbGFyaXR5IGFuZC9vcgpAQCAtNTA1 LDYgKzUwNyw3IEBAIGV4dGVybiAiQysrIgogI2RlZmluZSBDcHBBc1N0cmluZyhpZGVudGlmaWVy KSAjaWRlbnRpZmllcgogI2RlZmluZSBDcHBBc1N0cmluZzIoeCkJCQlDcHBBc1N0cmluZyh4KQog I2RlZmluZSBDcHBDb25jYXQoeCwgeSkJCQl4IyN5CisjZGVmaW5lIENwcENvbmNhdDIoeCwgeSkJ CUNwcENvbmNhdCh4LCB5KQogCiAvKgogICogVkFfQVJHU19OQVJHUwpAQCAtNzg3LDYgKzc5MCw3 IEBAIHR5cGVkZWYgc3RydWN0IHZhcmxlbmEKICAqLwogdHlwZWRlZiB2YXJsZW5hIGJ5dGVhOwog dHlwZWRlZiB2YXJsZW5hIHRleHQ7Cit0eXBlZGVmIHZhcmxlbmEgdXRmMTY7CiB0eXBlZGVmIHZh cmxlbmEgQnBDaGFyOwkJCS8qIGJsYW5rLXBhZGRlZCBjaGFyLCBpZSBTUUwgY2hhcihuKSAqLwog dHlwZWRlZiB2YXJsZW5hIFZhckNoYXI7CQkvKiB2YXItbGVuZ3RoIGNoYXIsIGllIFNRTCB2YXJj aGFyKG4pICovCiAKQEAgLTE1MDgsNiArMTUxMiw3IEBAIHR5cGVkZWYgdWludDMyX3QgY2hhcjMy X3Q7CiAjZW5kaWYKICNlbmRpZgogCisKIC8qIElXWVUgcHJhZ21hOiBlbmRfZXhwb3J0cyAqLwog CiAjZW5kaWYJCQkJCQkJLyogQ19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX2Ftb3AuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbW9wLmRhdAppbmRleCA4ZDVh MDAwNGE0Ny4uZmViYjVmNzFmMzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf YW1vcC5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbW9wLmRhdApAQCAtMzk3LDYg KzM5Nyw4NSBAQAogeyBhbW9wZmFtaWx5ID0+ICdidHJlZS90ZXh0X29wcycsIGFtb3BsZWZ0dHlw ZSA9PiAndGV4dCcsCiAgIGFtb3ByaWdodHR5cGUgPT4gJ25hbWUnLCBhbW9wc3RyYXRlZ3kgPT4g JzUnLCBhbW9wb3ByID0+ICc+KHRleHQsbmFtZSknLAogICBhbW9wbWV0aG9kID0+ICdidHJlZScg fSwKK3sgYW1vcGZhbWlseSA9PiAnYnRyZWUvdGV4dF9vcHMnLCBhbW9wbGVmdHR5cGUgPT4gJ3V0 ZjE2JywKKyAgYW1vcHJpZ2h0dHlwZSA9PiAndXRmMTYnLCBhbW9wc3RyYXRlZ3kgPT4gJzEnLCBh bW9wb3ByID0+ICc8KHV0ZjE2LHV0ZjE2KScsCisgIGFtb3BtZXRob2QgPT4gJ2J0cmVlJyB9LAor eyBhbW9wZmFtaWx5ID0+ICdidHJlZS90ZXh0X29wcycsIGFtb3BsZWZ0dHlwZSA9PiAndXRmMTYn LAorICBhbW9wcmlnaHR0eXBlID0+ICd1dGYxNicsIGFtb3BzdHJhdGVneSA9PiAnMicsIGFtb3Bv cHIgPT4gJzw9KHV0ZjE2LHV0ZjE2KScsCisgIGFtb3BtZXRob2QgPT4gJ2J0cmVlJyB9LAoreyBh bW9wZmFtaWx5ID0+ICdidHJlZS90ZXh0X29wcycsIGFtb3BsZWZ0dHlwZSA9PiAndXRmMTYnLAor ICBhbW9wcmlnaHR0eXBlID0+ICd1dGYxNicsIGFtb3BzdHJhdGVneSA9PiAnMycsIGFtb3BvcHIg PT4gJz0odXRmMTYsdXRmMTYpJywKKyAgYW1vcG1ldGhvZCA9PiAnYnRyZWUnIH0sCit7IGFtb3Bm YW1pbHkgPT4gJ2J0cmVlL3RleHRfb3BzJywgYW1vcGxlZnR0eXBlID0+ICd1dGYxNicsCisgIGFt b3ByaWdodHR5cGUgPT4gJ3V0ZjE2JywgYW1vcHN0cmF0ZWd5ID0+ICc0JywgYW1vcG9wciA9PiAn Pj0odXRmMTYsdXRmMTYpJywKKyAgYW1vcG1ldGhvZCA9PiAnYnRyZWUnIH0sCit7IGFtb3BmYW1p bHkgPT4gJ2J0cmVlL3RleHRfb3BzJywgYW1vcGxlZnR0eXBlID0+ICd1dGYxNicsCisgIGFtb3By aWdodHR5cGUgPT4gJ3V0ZjE2JywgYW1vcHN0cmF0ZWd5ID0+ICc1JywgYW1vcG9wciA9PiAnPih1 dGYxNix1dGYxNiknLAorICBhbW9wbWV0aG9kID0+ICdidHJlZScgfSwKK3sgYW1vcGZhbWlseSA9 PiAnYnRyZWUvdGV4dF9vcHMnLCBhbW9wbGVmdHR5cGUgPT4gJ3V0ZjE2JywKKyAgYW1vcHJpZ2h0 dHlwZSA9PiAndGV4dCcsIGFtb3BzdHJhdGVneSA9PiAnMScsIGFtb3BvcHIgPT4gJzwodXRmMTYs dGV4dCknLAorICBhbW9wbWV0aG9kID0+ICdidHJlZScgfSwKK3sgYW1vcGZhbWlseSA9PiAnYnRy ZWUvdGV4dF9vcHMnLCBhbW9wbGVmdHR5cGUgPT4gJ3V0ZjE2JywKKyAgYW1vcHJpZ2h0dHlwZSA9 PiAndGV4dCcsIGFtb3BzdHJhdGVneSA9PiAnMicsIGFtb3BvcHIgPT4gJzw9KHV0ZjE2LHRleHQp JywKKyAgYW1vcG1ldGhvZCA9PiAnYnRyZWUnIH0sCit7IGFtb3BmYW1pbHkgPT4gJ2J0cmVlL3Rl eHRfb3BzJywgYW1vcGxlZnR0eXBlID0+ICd1dGYxNicsCisgIGFtb3ByaWdodHR5cGUgPT4gJ3Rl eHQnLCBhbW9wc3RyYXRlZ3kgPT4gJzMnLCBhbW9wb3ByID0+ICc9KHV0ZjE2LHRleHQpJywKKyAg YW1vcG1ldGhvZCA9PiAnYnRyZWUnIH0sCit7IGFtb3BmYW1pbHkgPT4gJ2J0cmVlL3RleHRfb3Bz JywgYW1vcGxlZnR0eXBlID0+ICd1dGYxNicsCisgIGFtb3ByaWdodHR5cGUgPT4gJ3RleHQnLCBh bW9wc3RyYXRlZ3kgPT4gJzQnLCBhbW9wb3ByID0+ICc+PSh1dGYxNix0ZXh0KScsCisgIGFtb3Bt ZXRob2QgPT4gJ2J0cmVlJyB9LAoreyBhbW9wZmFtaWx5ID0+ICdidHJlZS90ZXh0X29wcycsIGFt b3BsZWZ0dHlwZSA9PiAndXRmMTYnLAorICBhbW9wcmlnaHR0eXBlID0+ICd0ZXh0JywgYW1vcHN0 cmF0ZWd5ID0+ICc1JywgYW1vcG9wciA9PiAnPih1dGYxNix0ZXh0KScsCisgIGFtb3BtZXRob2Qg PT4gJ2J0cmVlJyB9LAoreyBhbW9wZmFtaWx5ID0+ICdidHJlZS90ZXh0X29wcycsIGFtb3BsZWZ0 dHlwZSA9PiAndGV4dCcsCisgIGFtb3ByaWdodHR5cGUgPT4gJ3V0ZjE2JywgYW1vcHN0cmF0ZWd5 ID0+ICcxJywgYW1vcG9wciA9PiAnPCh0ZXh0LHV0ZjE2KScsCisgIGFtb3BtZXRob2QgPT4gJ2J0 cmVlJyB9LAoreyBhbW9wZmFtaWx5ID0+ICdidHJlZS90ZXh0X29wcycsIGFtb3BsZWZ0dHlwZSA9 PiAndGV4dCcsCisgIGFtb3ByaWdodHR5cGUgPT4gJ3V0ZjE2JywgYW1vcHN0cmF0ZWd5ID0+ICcy JywgYW1vcG9wciA9PiAnPD0odGV4dCx1dGYxNiknLAorICBhbW9wbWV0aG9kID0+ICdidHJlZScg fSwKK3sgYW1vcGZhbWlseSA9PiAnYnRyZWUvdGV4dF9vcHMnLCBhbW9wbGVmdHR5cGUgPT4gJ3Rl eHQnLAorICBhbW9wcmlnaHR0eXBlID0+ICd1dGYxNicsIGFtb3BzdHJhdGVneSA9PiAnMycsIGFt b3BvcHIgPT4gJz0odGV4dCx1dGYxNiknLAorICBhbW9wbWV0aG9kID0+ICdidHJlZScgfSwKK3sg YW1vcGZhbWlseSA9PiAnYnRyZWUvdGV4dF9vcHMnLCBhbW9wbGVmdHR5cGUgPT4gJ3RleHQnLAor ICBhbW9wcmlnaHR0eXBlID0+ICd1dGYxNicsIGFtb3BzdHJhdGVneSA9PiAnNCcsIGFtb3BvcHIg PT4gJz49KHRleHQsdXRmMTYpJywKKyAgYW1vcG1ldGhvZCA9PiAnYnRyZWUnIH0sCit7IGFtb3Bm YW1pbHkgPT4gJ2J0cmVlL3RleHRfb3BzJywgYW1vcGxlZnR0eXBlID0+ICd0ZXh0JywKKyAgYW1v cHJpZ2h0dHlwZSA9PiAndXRmMTYnLCBhbW9wc3RyYXRlZ3kgPT4gJzUnLCBhbW9wb3ByID0+ICc+ KHRleHQsdXRmMTYpJywKKyAgYW1vcG1ldGhvZCA9PiAnYnRyZWUnIH0sCit7IGFtb3BmYW1pbHkg PT4gJ2J0cmVlL3RleHRfb3BzJywgYW1vcGxlZnR0eXBlID0+ICd1dGYxNicsCisgIGFtb3ByaWdo dHR5cGUgPT4gJ25hbWUnLCBhbW9wc3RyYXRlZ3kgPT4gJzEnLCBhbW9wb3ByID0+ICc8KHV0ZjE2 LG5hbWUpJywKKyAgYW1vcG1ldGhvZCA9PiAnYnRyZWUnIH0sCit7IGFtb3BmYW1pbHkgPT4gJ2J0 cmVlL3RleHRfb3BzJywgYW1vcGxlZnR0eXBlID0+ICd1dGYxNicsCisgIGFtb3ByaWdodHR5cGUg PT4gJ25hbWUnLCBhbW9wc3RyYXRlZ3kgPT4gJzInLCBhbW9wb3ByID0+ICc8PSh1dGYxNixuYW1l KScsCisgIGFtb3BtZXRob2QgPT4gJ2J0cmVlJyB9LAoreyBhbW9wZmFtaWx5ID0+ICdidHJlZS90 ZXh0X29wcycsIGFtb3BsZWZ0dHlwZSA9PiAndXRmMTYnLAorICBhbW9wcmlnaHR0eXBlID0+ICdu YW1lJywgYW1vcHN0cmF0ZWd5ID0+ICczJywgYW1vcG9wciA9PiAnPSh1dGYxNixuYW1lKScsCisg IGFtb3BtZXRob2QgPT4gJ2J0cmVlJyB9LAoreyBhbW9wZmFtaWx5ID0+ICdidHJlZS90ZXh0X29w cycsIGFtb3BsZWZ0dHlwZSA9PiAndXRmMTYnLAorICBhbW9wcmlnaHR0eXBlID0+ICduYW1lJywg YW1vcHN0cmF0ZWd5ID0+ICc0JywgYW1vcG9wciA9PiAnPj0odXRmMTYsbmFtZSknLAorICBhbW9w bWV0aG9kID0+ICdidHJlZScgfSwKK3sgYW1vcGZhbWlseSA9PiAnYnRyZWUvdGV4dF9vcHMnLCBh bW9wbGVmdHR5cGUgPT4gJ3V0ZjE2JywKKyAgYW1vcHJpZ2h0dHlwZSA9PiAnbmFtZScsIGFtb3Bz dHJhdGVneSA9PiAnNScsIGFtb3BvcHIgPT4gJz4odXRmMTYsbmFtZSknLAorICBhbW9wbWV0aG9k ID0+ICdidHJlZScgfSwKK3sgYW1vcGZhbWlseSA9PiAnYnRyZWUvdGV4dF9vcHMnLCBhbW9wbGVm dHR5cGUgPT4gJ25hbWUnLAorICBhbW9wcmlnaHR0eXBlID0+ICd1dGYxNicsIGFtb3BzdHJhdGVn eSA9PiAnMScsIGFtb3BvcHIgPT4gJzwobmFtZSx1dGYxNiknLAorICBhbW9wbWV0aG9kID0+ICdi dHJlZScgfSwKK3sgYW1vcGZhbWlseSA9PiAnYnRyZWUvdGV4dF9vcHMnLCBhbW9wbGVmdHR5cGUg PT4gJ25hbWUnLAorICBhbW9wcmlnaHR0eXBlID0+ICd1dGYxNicsIGFtb3BzdHJhdGVneSA9PiAn MicsIGFtb3BvcHIgPT4gJzw9KG5hbWUsdXRmMTYpJywKKyAgYW1vcG1ldGhvZCA9PiAnYnRyZWUn IH0sCit7IGFtb3BmYW1pbHkgPT4gJ2J0cmVlL3RleHRfb3BzJywgYW1vcGxlZnR0eXBlID0+ICdu YW1lJywKKyAgYW1vcHJpZ2h0dHlwZSA9PiAndXRmMTYnLCBhbW9wc3RyYXRlZ3kgPT4gJzMnLCBh bW9wb3ByID0+ICc9KG5hbWUsdXRmMTYpJywKKyAgYW1vcG1ldGhvZCA9PiAnYnRyZWUnIH0sCit7 IGFtb3BmYW1pbHkgPT4gJ2J0cmVlL3RleHRfb3BzJywgYW1vcGxlZnR0eXBlID0+ICduYW1lJywK KyAgYW1vcHJpZ2h0dHlwZSA9PiAndXRmMTYnLCBhbW9wc3RyYXRlZ3kgPT4gJzQnLCBhbW9wb3By ID0+ICc+PShuYW1lLHV0ZjE2KScsCisgIGFtb3BtZXRob2QgPT4gJ2J0cmVlJyB9LAoreyBhbW9w ZmFtaWx5ID0+ICdidHJlZS90ZXh0X29wcycsIGFtb3BsZWZ0dHlwZSA9PiAnbmFtZScsCisgIGFt b3ByaWdodHR5cGUgPT4gJ3V0ZjE2JywgYW1vcHN0cmF0ZWd5ID0+ICc1JywgYW1vcG9wciA9PiAn PihuYW1lLHV0ZjE2KScsCisgIGFtb3BtZXRob2QgPT4gJ2J0cmVlJyB9LAorCisKKworCiAKICMg YnRyZWUgYnBjaGFyX29wcwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2Ft cHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FtcHJvYy5kYXQKaW5kZXggNGExZWZk YmM4OTkuLmM3ODg5MWIzZjc3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2Ft cHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbXByb2MuZGF0CkBAIC0yMzIs NiArMjMyLDE4IEBACiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndGV4dCcsIGFtcHJvY251bSA9PiAn MicsIGFtcHJvYyA9PiAnYnR0ZXh0c29ydHN1cHBvcnQnIH0sCiB7IGFtcHJvY2ZhbWlseSA9PiAn YnRyZWUvdGV4dF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAndGV4dCcsCiAgIGFtcHJvY3JpZ2h0 dHlwZSA9PiAndGV4dCcsIGFtcHJvY251bSA9PiAnNCcsIGFtcHJvYyA9PiAnYnR2YXJzdHJlcXVh bGltYWdlJyB9LAoreyBhbXByb2NmYW1pbHkgPT4gJ2J0cmVlL3RleHRfb3BzJywgYW1wcm9jbGVm dHR5cGUgPT4gJ3V0ZjE2JywKKyAgYW1wcm9jcmlnaHR0eXBlID0+ICd1dGYxNicsIGFtcHJvY251 bSA9PiAnMScsIGFtcHJvYyA9PiAndXRmMTZjbXAnIH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnRy ZWUvdGV4dF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAndXRmMTYnLAorICBhbXByb2NyaWdodHR5 cGUgPT4gJ3V0ZjE2JywgYW1wcm9jbnVtID0+ICc0JywgYW1wcm9jID0+ICdidGVxdWFsaW1hZ2Un IH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnRyZWUvdGV4dF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9 PiAndXRmMTYnLAorICBhbXByb2NyaWdodHR5cGUgPT4gJ3RleHQnLCBhbXByb2NudW0gPT4gJzEn LCBhbXByb2MgPT4gJ3V0ZjE2dGV4dGNtcCcgfSwKK3sgYW1wcm9jZmFtaWx5ID0+ICdidHJlZS90 ZXh0X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICd0ZXh0JywKKyAgYW1wcm9jcmlnaHR0eXBlID0+ ICd1dGYxNicsIGFtcHJvY251bSA9PiAnMScsIGFtcHJvYyA9PiAndGV4dHV0ZjE2Y21wJyB9LAor eyBhbXByb2NmYW1pbHkgPT4gJ2J0cmVlL3RleHRfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3V0 ZjE2JywKKyAgYW1wcm9jcmlnaHR0eXBlID0+ICduYW1lJywgYW1wcm9jbnVtID0+ICcxJywgYW1w cm9jID0+ICd1dGYxNm5hbWVjbXAnIH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnRyZWUvdGV4dF9v cHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnbmFtZScsCisgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndXRm MTYnLCBhbXByb2NudW0gPT4gJzEnLCBhbXByb2MgPT4gJ25hbWV1dGYxNmNtcCcgfSwKIHsgYW1w cm9jZmFtaWx5ID0+ICdidHJlZS90ZXh0X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICduYW1lJywK ICAgYW1wcm9jcmlnaHR0eXBlID0+ICduYW1lJywgYW1wcm9jbnVtID0+ICcxJywgYW1wcm9jID0+ ICdidG5hbWVjbXAnIH0sCiB7IGFtcHJvY2ZhbWlseSA9PiAnYnRyZWUvdGV4dF9vcHMnLCBhbXBy b2NsZWZ0dHlwZSA9PiAnbmFtZScsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X29wY2xhc3MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdAppbmRleCBk ZjE3MGI4MDg0MC4uYjNkZmFiYjY5NTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfb3BjbGFzcy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdApA QCAtMTI3LDYgKzEyNyw4IEBACiAgIG9wY2ludHlwZSA9PiAndGV4dCcgfSwKIHsgb3BjbWV0aG9k ID0+ICdoYXNoJywgb3BjbmFtZSA9PiAndGV4dF9vcHMnLCBvcGNmYW1pbHkgPT4gJ2hhc2gvdGV4 dF9vcHMnLAogICBvcGNpbnR5cGUgPT4gJ3RleHQnIH0sCit7IG9wY21ldGhvZCA9PiAnYnRyZWUn LCBvcGNuYW1lID0+ICd1dGYxNl9vcHMnLCBvcGNmYW1pbHkgPT4gJ2J0cmVlL3RleHRfb3BzJywK KyAgb3BjaW50eXBlID0+ICd1dGYxNicgfSwKIHsgb3BjbWV0aG9kID0+ICdidHJlZScsIG9wY25h bWUgPT4gJ3RpbWVfb3BzJywgb3BjZmFtaWx5ID0+ICdidHJlZS90aW1lX29wcycsCiAgIG9wY2lu dHlwZSA9PiAndGltZScgfSwKIHsgb3BjbWV0aG9kID0+ICdoYXNoJywgb3BjbmFtZSA9PiAndGlt ZV9vcHMnLCBvcGNmYW1pbHkgPT4gJ2hhc2gvdGltZV9vcHMnLApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19vcGVyYXRvci5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29w ZXJhdG9yLmRhdAppbmRleCAxNDY1ZjEzMTIwYS4uZjhmMDdkNzRlOGIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfb3BlcmF0b3IuZGF0CkBAIC0xMDcsNiArMTA3LDE2NiBAQAogICBvcHJjb2RlID0+ICdz dGFydHNfd2l0aCcsIG9wcnJlc3QgPT4gJ3ByZWZpeHNlbCcsCiAgIG9wcmpvaW4gPT4gJ3ByZWZp eGpvaW5zZWwnIH0sCiAKKyMgdGV4dF91dGY2Cit7IG9pZCA9PiAnOTgyMCcsIGRlc2NyID0+ICdl cXVhbCcsCisgIG9wcm5hbWUgPT4gJz0nLCBvcHJjYW5tZXJnZSA9PiAndCcsIG9wcmxlZnQgPT4g J3V0ZjE2JywKKyAgb3BycmlnaHQgPT4gJ3V0ZjE2Jywgb3BycmVzdWx0ID0+ICdib29sJywgb3By Y29tID0+ICc9KHV0ZjE2LHV0ZjE2KScsCisgIG9wcm5lZ2F0ZSA9PiAnPD4odXRmMTYsdXRmMTYp Jywgb3ByY29kZSA9PiAndXRmMTZlcScsIG9wcnJlc3QgPT4gJ2Vxc2VsJywKKyAgb3Byam9pbiA9 PiAnZXFqb2luc2VsJyB9LAoreyBvaWQgPT4gJzk4MjEnLCBkZXNjciA9PiAnbm90IGVxdWFsJywK KyAgb3BybmFtZSA9PiAnPD4nLCBvcHJsZWZ0ID0+ICd1dGYxNicsCisgIG9wcnJpZ2h0ID0+ICd1 dGYxNicsIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnPD4odXRmMTYsdXRmMTYpJywK KyAgb3BybmVnYXRlID0+ICc9KHV0ZjE2LHV0ZjE2KScsIG9wcmNvZGUgPT4gJ3V0ZjE2bmUnLCBv cHJyZXN0ID0+ICduZXFzZWwnLAorICBvcHJqb2luID0+ICduZXFqb2luc2VsJyB9LAoreyBvaWQg PT4gJzk4MjUnLCBkZXNjciA9PiAnbGVzcyB0aGFuJywKKyAgb3BybmFtZSA9PiAnPCcsIG9wcmxl ZnQgPT4gJ3V0ZjE2JywKKyAgb3BycmlnaHQgPT4gJ3V0ZjE2Jywgb3BycmVzdWx0ID0+ICdib29s Jywgb3ByY29tID0+ICc+KHV0ZjE2LHV0ZjE2KScsCisgIG9wcm5lZ2F0ZSA9PiAnPj0odXRmMTYs dXRmMTYpJywgb3ByY29kZSA9PiAndXRmMTZsdCcsIG9wcnJlc3QgPT4gJ3NjYWxhcmx0c2VsJywK KyAgb3Byam9pbiA9PiAnc2NhbGFybHRqb2luc2VsJyB9LAoreyBvaWQgPT4gJzk4MjYnLCBkZXNj ciA9PiAnbGVzcyB0aGFuIG9yIGVxdWFsJywKKyAgb3BybmFtZSA9PiAnPD0nLCBvcHJsZWZ0ID0+ ICd1dGYxNicsCisgIG9wcnJpZ2h0ID0+ICd1dGYxNicsIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9w cmNvbSA9PiAnPj0odXRmMTYsdXRmMTYpJywKKyAgb3BybmVnYXRlID0+ICc+KHV0ZjE2LHV0ZjE2 KScsIG9wcmNvZGUgPT4gJ3V0ZjE2bGUnLCBvcHJyZXN0ID0+ICdzY2FsYXJsZXNlbCcsCisgIG9w cmpvaW4gPT4gJ3NjYWxhcmxlam9pbnNlbCcgfSwKK3sgb2lkID0+ICc5ODI3JywgZGVzY3IgPT4g J2dyZWF0ZXIgdGhhbicsCisgIG9wcm5hbWUgPT4gJz4nLCBvcHJsZWZ0ID0+ICd1dGYxNicsCisg IG9wcnJpZ2h0ID0+ICd1dGYxNicsIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnPCh1 dGYxNix1dGYxNiknLAorICBvcHJuZWdhdGUgPT4gJzw9KHV0ZjE2LHV0ZjE2KScsIG9wcmNvZGUg PT4gJ3V0ZjE2Z3QnLCBvcHJyZXN0ID0+ICdzY2FsYXJndHNlbCcsCisgIG9wcmpvaW4gPT4gJ3Nj YWxhcmd0am9pbnNlbCcgfSwKK3sgb2lkID0+ICc5ODI4JywgZGVzY3IgPT4gJ2dyZWF0ZXIgdGhh biBvciBlcXVhbCcsCisgIG9wcm5hbWUgPT4gJz49Jywgb3BybGVmdCA9PiAndXRmMTYnLAorICBv cHJyaWdodCA9PiAndXRmMTYnLCBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJzw9KHV0 ZjE2LHV0ZjE2KScsCisgIG9wcm5lZ2F0ZSA9PiAnPCh1dGYxNix1dGYxNiknLCBvcHJjb2RlID0+ ICd1dGYxNmdlJywgb3BycmVzdCA9PiAnc2NhbGFyZ2VzZWwnLAorICBvcHJqb2luID0+ICdzY2Fs YXJnZWpvaW5zZWwnIH0sCisKKyMgdXRmMTYsIHRleHQKK3sgb2lkID0+ICc5ODYwJywgZGVzY3Ig PT4gJ2VxdWFsJywKKyAgb3BybmFtZSA9PiAnPScsIG9wcmNhbm1lcmdlID0+ICd0Jywgb3BybGVm dCA9PiAndXRmMTYnLAorICBvcHJyaWdodCA9PiAndGV4dCcsIG9wcnJlc3VsdCA9PiAnYm9vbCcs IG9wcmNvbSA9PiAnPSh0ZXh0LHV0ZjE2KScsCisgIG9wcm5lZ2F0ZSA9PiAnPD4odXRmMTYsdGV4 dCknLCBvcHJjb2RlID0+ICd1dGYxNnRleHRlcScsIG9wcnJlc3QgPT4gJ2Vxc2VsJywKKyAgb3By am9pbiA9PiAnZXFqb2luc2VsJyB9LAoreyBvaWQgPT4gJzk4NjEnLCBkZXNjciA9PiAnbm90IGVx dWFsJywKKyAgb3BybmFtZSA9PiAnPD4nLCBvcHJsZWZ0ID0+ICd1dGYxNicsCisgIG9wcnJpZ2h0 ID0+ICd0ZXh0Jywgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc8Pih0ZXh0LHV0ZjE2 KScsCisgIG9wcm5lZ2F0ZSA9PiAnPSh1dGYxNix0ZXh0KScsIG9wcmNvZGUgPT4gJ3V0ZjE2dGV4 dG5lJywgb3BycmVzdCA9PiAnbmVxc2VsJywKKyAgb3Byam9pbiA9PiAnbmVxam9pbnNlbCcgfSwK K3sgb2lkID0+ICc5ODY1JywgZGVzY3IgPT4gJ2xlc3MgdGhhbicsCisgIG9wcm5hbWUgPT4gJzwn LCBvcHJsZWZ0ID0+ICd1dGYxNicsCisgIG9wcnJpZ2h0ID0+ICd0ZXh0Jywgb3BycmVzdWx0ID0+ ICdib29sJywgb3ByY29tID0+ICc+KHRleHQsdXRmMTYpJywKKyAgb3BybmVnYXRlID0+ICc+PSh1 dGYxNix0ZXh0KScsIG9wcmNvZGUgPT4gJ3V0ZjE2dGV4dGx0Jywgb3BycmVzdCA9PiAnc2NhbGFy bHRzZWwnLAorICBvcHJqb2luID0+ICdzY2FsYXJsdGpvaW5zZWwnIH0sCit7IG9pZCA9PiAnOTg2 NicsIGRlc2NyID0+ICdsZXNzIHRoYW4gb3IgZXF1YWwnLAorICBvcHJuYW1lID0+ICc8PScsIG9w cmxlZnQgPT4gJ3V0ZjE2JywKKyAgb3BycmlnaHQgPT4gJ3RleHQnLCBvcHJyZXN1bHQgPT4gJ2Jv b2wnLCBvcHJjb20gPT4gJz49KHRleHQsdXRmMTYpJywKKyAgb3BybmVnYXRlID0+ICc+KHV0ZjE2 LHRleHQpJywgb3ByY29kZSA9PiAndXRmMTZ0ZXh0bGUnLCBvcHJyZXN0ID0+ICdzY2FsYXJsZXNl bCcsCisgIG9wcmpvaW4gPT4gJ3NjYWxhcmxlam9pbnNlbCcgfSwKK3sgb2lkID0+ICc5ODY3Jywg ZGVzY3IgPT4gJ2dyZWF0ZXIgdGhhbicsCisgIG9wcm5hbWUgPT4gJz4nLCBvcHJsZWZ0ID0+ICd1 dGYxNicsCisgIG9wcnJpZ2h0ID0+ICd0ZXh0Jywgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29t ID0+ICc8KHRleHQsdXRmMTYpJywKKyAgb3BybmVnYXRlID0+ICc8PSh1dGYxNix0ZXh0KScsIG9w cmNvZGUgPT4gJ3V0ZjE2dGV4dGd0Jywgb3BycmVzdCA9PiAnc2NhbGFyZ3RzZWwnLAorICBvcHJq b2luID0+ICdzY2FsYXJndGpvaW5zZWwnIH0sCit7IG9pZCA9PiAnOTg2OCcsIGRlc2NyID0+ICdn cmVhdGVyIHRoYW4gb3IgZXF1YWwnLAorICBvcHJuYW1lID0+ICc+PScsIG9wcmxlZnQgPT4gJ3V0 ZjE2JywKKyAgb3BycmlnaHQgPT4gJ3RleHQnLCBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20g PT4gJzw9KHRleHQsdXRmMTYpJywKKyAgb3BybmVnYXRlID0+ICc8KHV0ZjE2LHRleHQpJywgb3By Y29kZSA9PiAndXRmMTZ0ZXh0Z2UnLCBvcHJyZXN0ID0+ICdzY2FsYXJnZXNlbCcsCisgIG9wcmpv aW4gPT4gJ3NjYWxhcmdlam9pbnNlbCcgfSwKKworIyB0ZXh0LCB1dGYxNgoreyBvaWQgPT4gJzk4 NzAnLCBkZXNjciA9PiAnZXF1YWwnLAorICBvcHJuYW1lID0+ICc9Jywgb3ByY2FubWVyZ2UgPT4g J3QnLCBvcHJsZWZ0ID0+ICd0ZXh0JywKKyAgb3BycmlnaHQgPT4gJ3V0ZjE2Jywgb3BycmVzdWx0 ID0+ICdib29sJywgb3ByY29tID0+ICc9KHV0ZjE2LHRleHQpJywKKyAgb3BybmVnYXRlID0+ICc8 Pih0ZXh0LHV0ZjE2KScsIG9wcmNvZGUgPT4gJ3RleHR1dGYxNmVxJywgb3BycmVzdCA9PiAnZXFz ZWwnLAorICBvcHJqb2luID0+ICdlcWpvaW5zZWwnIH0sCit7IG9pZCA9PiAnOTg3MScsIGRlc2Ny ID0+ICdub3QgZXF1YWwnLAorICBvcHJuYW1lID0+ICc8PicsIG9wcmxlZnQgPT4gJ3RleHQnLAor ICBvcHJyaWdodCA9PiAndXRmMTYnLCBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJzw+ KHV0ZjE2LHRleHQpJywKKyAgb3BybmVnYXRlID0+ICc9KHRleHQsdXRmMTYpJywgb3ByY29kZSA9 PiAndGV4dHV0ZjE2bmUnLCBvcHJyZXN0ID0+ICduZXFzZWwnLAorICBvcHJqb2luID0+ICduZXFq b2luc2VsJyB9LAoreyBvaWQgPT4gJzk4NzUnLCBkZXNjciA9PiAnbGVzcyB0aGFuJywKKyAgb3By bmFtZSA9PiAnPCcsIG9wcmxlZnQgPT4gJ3RleHQnLAorICBvcHJyaWdodCA9PiAndXRmMTYnLCBv cHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz4odXRmMTYsdGV4dCknLAorICBvcHJuZWdh dGUgPT4gJz49KHRleHQsdXRmMTYpJywgb3ByY29kZSA9PiAndGV4dHV0ZjE2bHQnLCBvcHJyZXN0 ID0+ICdzY2FsYXJsdHNlbCcsCisgIG9wcmpvaW4gPT4gJ3NjYWxhcmx0am9pbnNlbCcgfSwKK3sg b2lkID0+ICc5ODc2JywgZGVzY3IgPT4gJ2xlc3MgdGhhbiBvciBlcXVhbCcsCisgIG9wcm5hbWUg PT4gJzw9Jywgb3BybGVmdCA9PiAndGV4dCcsCisgIG9wcnJpZ2h0ID0+ICd1dGYxNicsIG9wcnJl c3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnPj0odXRmMTYsdGV4dCknLAorICBvcHJuZWdhdGUg PT4gJz4odGV4dCx1dGYxNiknLCBvcHJjb2RlID0+ICd0ZXh0dXRmMTZsZScsIG9wcnJlc3QgPT4g J3NjYWxhcmxlc2VsJywKKyAgb3Byam9pbiA9PiAnc2NhbGFybGVqb2luc2VsJyB9LAoreyBvaWQg PT4gJzk4NzcnLCBkZXNjciA9PiAnZ3JlYXRlciB0aGFuJywKKyAgb3BybmFtZSA9PiAnPicsIG9w cmxlZnQgPT4gJ3RleHQnLAorICBvcHJyaWdodCA9PiAndXRmMTYnLCBvcHJyZXN1bHQgPT4gJ2Jv b2wnLCBvcHJjb20gPT4gJzwodXRmMTYsdGV4dCknLAorICBvcHJuZWdhdGUgPT4gJzw9KHRleHQs dXRmMTYpJywgb3ByY29kZSA9PiAndGV4dHV0ZjE2Z3QnLCBvcHJyZXN0ID0+ICdzY2FsYXJndHNl bCcsCisgIG9wcmpvaW4gPT4gJ3NjYWxhcmd0am9pbnNlbCcgfSwKK3sgb2lkID0+ICc5ODc4Jywg ZGVzY3IgPT4gJ2dyZWF0ZXIgdGhhbiBvciBlcXVhbCcsCisgIG9wcm5hbWUgPT4gJz49Jywgb3By bGVmdCA9PiAndGV4dCcsCisgIG9wcnJpZ2h0ID0+ICd1dGYxNicsIG9wcnJlc3VsdCA9PiAnYm9v bCcsIG9wcmNvbSA9PiAnPD0odXRmMTYsdGV4dCknLAorICBvcHJuZWdhdGUgPT4gJzwodGV4dCx1 dGYxNiknLCBvcHJjb2RlID0+ICd0ZXh0dXRmMTZnZScsIG9wcnJlc3QgPT4gJ3NjYWxhcmdlc2Vs JywKKyAgb3Byam9pbiA9PiAnc2NhbGFyZ2Vqb2luc2VsJyB9LAorCisjIHV0ZjE2LCBuYW1lCit7 IG9pZCA9PiAnOTQ2MCcsIGRlc2NyID0+ICdlcXVhbCcsCisgIG9wcm5hbWUgPT4gJz0nLCBvcHJj YW5tZXJnZSA9PiAndCcsIG9wcmxlZnQgPT4gJ3V0ZjE2JywKKyAgb3BycmlnaHQgPT4gJ25hbWUn LCBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz0obmFtZSx1dGYxNiknLAorICBvcHJu ZWdhdGUgPT4gJzw+KHV0ZjE2LG5hbWUpJywgb3ByY29kZSA9PiAndXRmMTZuYW1lZXEnLCBvcHJy ZXN0ID0+ICdlcXNlbCcsCisgIG9wcmpvaW4gPT4gJ2Vxam9pbnNlbCcgfSwKK3sgb2lkID0+ICc5 NDYxJywgZGVzY3IgPT4gJ25vdCBlcXVhbCcsCisgIG9wcm5hbWUgPT4gJzw+Jywgb3BybGVmdCA9 PiAndXRmMTYnLAorICBvcHJyaWdodCA9PiAnbmFtZScsIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9w cmNvbSA9PiAnPD4obmFtZSx1dGYxNiknLAorICBvcHJuZWdhdGUgPT4gJz0odXRmMTYsbmFtZSkn LCBvcHJjb2RlID0+ICd1dGYxNm5hbWVuZScsIG9wcnJlc3QgPT4gJ25lcXNlbCcsCisgIG9wcmpv aW4gPT4gJ25lcWpvaW5zZWwnIH0sCit7IG9pZCA9PiAnOTQ2NScsIGRlc2NyID0+ICdsZXNzIHRo YW4nLAorICBvcHJuYW1lID0+ICc8Jywgb3BybGVmdCA9PiAndXRmMTYnLAorICBvcHJyaWdodCA9 PiAnbmFtZScsIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnPihuYW1lLHV0ZjE2KScs CisgIG9wcm5lZ2F0ZSA9PiAnPj0odXRmMTYsbmFtZSknLCBvcHJjb2RlID0+ICd1dGYxNm5hbWVs dCcsIG9wcnJlc3QgPT4gJ3NjYWxhcmx0c2VsJywKKyAgb3Byam9pbiA9PiAnc2NhbGFybHRqb2lu c2VsJyB9LAoreyBvaWQgPT4gJzk0NjYnLCBkZXNjciA9PiAnbGVzcyB0aGFuIG9yIGVxdWFsJywK KyAgb3BybmFtZSA9PiAnPD0nLCBvcHJsZWZ0ID0+ICd1dGYxNicsCisgIG9wcnJpZ2h0ID0+ICdu YW1lJywgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc+PShuYW1lLHV0ZjE2KScsCisg IG9wcm5lZ2F0ZSA9PiAnPih1dGYxNixuYW1lKScsIG9wcmNvZGUgPT4gJ3V0ZjE2bmFtZWxlJywg b3BycmVzdCA9PiAnc2NhbGFybGVzZWwnLAorICBvcHJqb2luID0+ICdzY2FsYXJsZWpvaW5zZWwn IH0sCit7IG9pZCA9PiAnOTQ2NycsIGRlc2NyID0+ICdncmVhdGVyIHRoYW4nLAorICBvcHJuYW1l ID0+ICc+Jywgb3BybGVmdCA9PiAndXRmMTYnLAorICBvcHJyaWdodCA9PiAnbmFtZScsIG9wcnJl c3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnPChuYW1lLHV0ZjE2KScsCisgIG9wcm5lZ2F0ZSA9 PiAnPD0odXRmMTYsbmFtZSknLCBvcHJjb2RlID0+ICd1dGYxNm5hbWVndCcsIG9wcnJlc3QgPT4g J3NjYWxhcmd0c2VsJywKKyAgb3Byam9pbiA9PiAnc2NhbGFyZ3Rqb2luc2VsJyB9LAoreyBvaWQg PT4gJzk0NjgnLCBkZXNjciA9PiAnZ3JlYXRlciB0aGFuIG9yIGVxdWFsJywKKyAgb3BybmFtZSA9 PiAnPj0nLCBvcHJsZWZ0ID0+ICd1dGYxNicsCisgIG9wcnJpZ2h0ID0+ICduYW1lJywgb3BycmVz dWx0ID0+ICdib29sJywgb3ByY29tID0+ICc8PShuYW1lLHV0ZjE2KScsCisgIG9wcm5lZ2F0ZSA9 PiAnPCh1dGYxNixuYW1lKScsIG9wcmNvZGUgPT4gJ3V0ZjE2bmFtZWdlJywgb3BycmVzdCA9PiAn c2NhbGFyZ2VzZWwnLAorICBvcHJqb2luID0+ICdzY2FsYXJnZWpvaW5zZWwnIH0sCisKKyMgbmFt ZSwgdXRmMTYKK3sgb2lkID0+ICc5NDcwJywgZGVzY3IgPT4gJ2VxdWFsJywKKyAgb3BybmFtZSA9 PiAnPScsIG9wcmNhbm1lcmdlID0+ICd0Jywgb3BybGVmdCA9PiAnbmFtZScsCisgIG9wcnJpZ2h0 ID0+ICd1dGYxNicsIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnPSh1dGYxNixuYW1l KScsCisgIG9wcm5lZ2F0ZSA9PiAnPD4obmFtZSx1dGYxNiknLCBvcHJjb2RlID0+ICduYW1ldXRm MTZlcScsIG9wcnJlc3QgPT4gJ2Vxc2VsJywKKyAgb3Byam9pbiA9PiAnZXFqb2luc2VsJyB9LAor eyBvaWQgPT4gJzk0NzEnLCBkZXNjciA9PiAnbm90IGVxdWFsJywKKyAgb3BybmFtZSA9PiAnPD4n LCBvcHJsZWZ0ID0+ICduYW1lJywKKyAgb3BycmlnaHQgPT4gJ3V0ZjE2Jywgb3BycmVzdWx0ID0+ ICdib29sJywgb3ByY29tID0+ICc8Pih1dGYxNixuYW1lKScsCisgIG9wcm5lZ2F0ZSA9PiAnPShu YW1lLHV0ZjE2KScsIG9wcmNvZGUgPT4gJ25hbWV1dGYxNm5lJywgb3BycmVzdCA9PiAnbmVxc2Vs JywKKyAgb3Byam9pbiA9PiAnbmVxam9pbnNlbCcgfSwKK3sgb2lkID0+ICc5NDc1JywgZGVzY3Ig PT4gJ2xlc3MgdGhhbicsCisgIG9wcm5hbWUgPT4gJzwnLCBvcHJsZWZ0ID0+ICduYW1lJywKKyAg b3BycmlnaHQgPT4gJ3V0ZjE2Jywgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc+KHV0 ZjE2LG5hbWUpJywKKyAgb3BybmVnYXRlID0+ICc+PShuYW1lLHV0ZjE2KScsIG9wcmNvZGUgPT4g J25hbWV1dGYxNmx0Jywgb3BycmVzdCA9PiAnc2NhbGFybHRzZWwnLAorICBvcHJqb2luID0+ICdz Y2FsYXJsdGpvaW5zZWwnIH0sCit7IG9pZCA9PiAnOTQ3NicsIGRlc2NyID0+ICdsZXNzIHRoYW4g b3IgZXF1YWwnLAorICBvcHJuYW1lID0+ICc8PScsIG9wcmxlZnQgPT4gJ25hbWUnLAorICBvcHJy aWdodCA9PiAndXRmMTYnLCBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz49KHV0ZjE2 LG5hbWUpJywKKyAgb3BybmVnYXRlID0+ICc+KG5hbWUsdXRmMTYpJywgb3ByY29kZSA9PiAnbmFt ZXV0ZjE2bGUnLCBvcHJyZXN0ID0+ICdzY2FsYXJsZXNlbCcsCisgIG9wcmpvaW4gPT4gJ3NjYWxh cmxlam9pbnNlbCcgfSwKK3sgb2lkID0+ICc5NDc3JywgZGVzY3IgPT4gJ2dyZWF0ZXIgdGhhbics CisgIG9wcm5hbWUgPT4gJz4nLCBvcHJsZWZ0ID0+ICduYW1lJywKKyAgb3BycmlnaHQgPT4gJ3V0 ZjE2Jywgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc8KHV0ZjE2LG5hbWUpJywKKyAg b3BybmVnYXRlID0+ICc8PShuYW1lLHV0ZjE2KScsIG9wcmNvZGUgPT4gJ25hbWV1dGYxNmd0Jywg b3BycmVzdCA9PiAnc2NhbGFyZ3RzZWwnLAorICBvcHJqb2luID0+ICdzY2FsYXJndGpvaW5zZWwn IH0sCit7IG9pZCA9PiAnOTQ3OCcsIGRlc2NyID0+ICdncmVhdGVyIHRoYW4gb3IgZXF1YWwnLAor ICBvcHJuYW1lID0+ICc+PScsIG9wcmxlZnQgPT4gJ25hbWUnLAorICBvcHJyaWdodCA9PiAndXRm MTYnLCBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJzw9KHV0ZjE2LG5hbWUpJywKKyAg b3BybmVnYXRlID0+ICc8KG5hbWUsdXRmMTYpJywgb3ByY29kZSA9PiAnbmFtZXV0ZjE2Z2UnLCBv cHJyZXN0ID0+ICdzY2FsYXJnZXNlbCcsCisgIG9wcmpvaW4gPT4gJ3NjYWxhcmdlam9pbnNlbCcg fSwKKwogeyBvaWQgPT4gJzI1NCcsIG9pZF9zeW1ib2wgPT4gJ05hbWVFcXVhbFRleHRPcGVyYXRv cicsIGRlc2NyID0+ICdlcXVhbCcsCiAgIG9wcm5hbWUgPT4gJz0nLCBvcHJjYW5tZXJnZSA9PiAn dCcsIG9wcmNhbmhhc2ggPT4gJ3QnLCBvcHJsZWZ0ID0+ICduYW1lJywKICAgb3BycmlnaHQgPT4g J3RleHQnLCBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz0odGV4dCxuYW1lKScsCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBmYTlhZTc5MDgyYi4uOTcwMTlkZWNhN2UgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtOTcsOSArOTcsMTcgQEAKIHsgb2lkID0+ICc0NicsIGRl c2NyID0+ICdJL08nLAogICBwcm9uYW1lID0+ICd0ZXh0aW4nLCBwcm9yZXR0eXBlID0+ICd0ZXh0 JywgcHJvYXJndHlwZXMgPT4gJ2NzdHJpbmcnLAogICBwcm9zcmMgPT4gJ3RleHRpbicgfSwKK3sg b2lkID0+ICc4ODkwJywgZGVzY3IgPT4gJ0kvTycsCisgIHByb25hbWUgPT4gJ3V0ZjE2aW4nLCBw cm9yZXR0eXBlID0+ICd1dGYxNicsCisgIHByb2FyZ3R5cGVzID0+ICdjc3RyaW5nJywKKyAgcHJv c3JjID0+ICd1dGYxNmluJyB9LAogeyBvaWQgPT4gJzQ3JywgZGVzY3IgPT4gJ0kvTycsCiAgIHBy b25hbWUgPT4gJ3RleHRvdXQnLCBwcm9yZXR0eXBlID0+ICdjc3RyaW5nJywgcHJvYXJndHlwZXMg PT4gJ3RleHQnLAogICBwcm9zcmMgPT4gJ3RleHRvdXQnIH0sCit7IG9pZCA9PiAnODg5MScsIGRl c2NyID0+ICdJL08nLAorICBwcm9uYW1lID0+ICd1dGYxNm91dCcsIHByb3JldHR5cGUgPT4gJ2Nz dHJpbmcnLAorICBwcm9hcmd0eXBlcyA9PiAndXRmMTYnLAorICBwcm9zcmMgPT4gJ3V0ZjE2b3V0 JyB9LAogeyBvaWQgPT4gJzQ4JywgZGVzY3IgPT4gJ0kvTycsCiAgIHByb25hbWUgPT4gJ3RpZGlu JywgcHJvcmV0dHlwZSA9PiAndGlkJywgcHJvYXJndHlwZXMgPT4gJ2NzdHJpbmcnLAogICBwcm9z cmMgPT4gJ3RpZGluJyB9LApAQCAtMjY0LDYgKzI3MiwxMTYgQEAKICAgcHJvbmFtZSA9PiAndmVy c2lvbicsIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCiAgIHByb2Fy Z3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3Bnc3FsX3ZlcnNpb24nIH0sCiAKK3sgb2lkID0+ICc4 OTM1JywgZGVzY3IgPT4gJ2xlc3MtZXF1YWwtZ3JlYXRlcicsCisgIHByb25hbWUgPT4gJ3V0ZjE2 Y21wJywgcHJvcmV0dHlwZSA9PiAnaW50NCcsCisgIHByb2FyZ3R5cGVzID0+ICd1dGYxNiB1dGYx NicsIHByb3NyYyA9PiAndXRmMTZjbXAnIH0sCit7IG9pZCA9PiAnODkwMScsCisgIHByb25hbWUg PT4gJ3V0ZjE2bGUnLCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAgcHJvYXJndHlwZXMgPT4gJ3V0 ZjE2IHV0ZjE2JywgcHJvc3JjID0+ICd1dGYxNmxlJyB9LAoreyBvaWQgPT4gJzg5MDInLAorICBw cm9uYW1lID0+ICd1dGYxNmx0JywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCisgIHByb2FyZ3R5cGVz ID0+ICd1dGYxNiB1dGYxNicsIHByb3NyYyA9PiAndXRmMTZsdCcgfSwKK3sgb2lkID0+ICc4OTA3 JywKKyAgcHJvbmFtZSA9PiAndXRmMTZndCcsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAorICBwcm9h cmd0eXBlcyA9PiAndXRmMTYgdXRmMTYnLCBwcm9zcmMgPT4gJ3V0ZjE2Z3QnIH0sCit7IG9pZCA9 PiAnODkwNCcsCisgIHByb25hbWUgPT4gJ3V0ZjE2Z2UnLCBwcm9yZXR0eXBlID0+ICdib29sJywK KyAgcHJvYXJndHlwZXMgPT4gJ3V0ZjE2IHV0ZjE2JywgcHJvc3JjID0+ICd1dGYxNmdlJyB9LAor eyBvaWQgPT4gJzg5MDAnLAorICBwcm9uYW1lID0+ICd1dGYxNmVxJywgcHJvcmV0dHlwZSA9PiAn Ym9vbCcsCisgIHByb2FyZ3R5cGVzID0+ICd1dGYxNiB1dGYxNicsIHByb3NyYyA9PiAndXRmMTZl cScgfSwKK3sgb2lkID0+ICc4OTA1JywKKyAgcHJvbmFtZSA9PiAndXRmMTZuZScsIHByb3JldHR5 cGUgPT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAndXRmMTYgdXRmMTYnLCBwcm9zcmMgPT4g J3V0ZjE2bmUnIH0sCisKK3sgb2lkID0+ICc4OTcyJywgZGVzY3IgPT4gJ2xlc3MtZXF1YWwtZ3Jl YXRlcicsCisgIHByb25hbWUgPT4gJ3RleHR1dGYxNmNtcCcsIHByb3JldHR5cGUgPT4gJ2ludDQn LAorICBwcm9hcmd0eXBlcyA9PiAndGV4dCB1dGYxNicsIHByb3NyYyA9PiAndGV4dHV0ZjE2Y21w JyB9LAoreyBvaWQgPT4gJzg5NDEnLAorICBwcm9uYW1lID0+ICd0ZXh0dXRmMTZsZScsIHByb3Jl dHR5cGUgPT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAndGV4dCB1dGYxNicsIHByb3NyYyA9 PiAndGV4dHV0ZjE2bGUnIH0sCit7IG9pZCA9PiAnODk0MicsCisgIHByb25hbWUgPT4gJ3RleHR1 dGYxNmx0JywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHV0 ZjE2JywgcHJvc3JjID0+ICd0ZXh0dXRmMTZsdCcgfSwKK3sgb2lkID0+ICc4OTQ3JywKKyAgcHJv bmFtZSA9PiAndGV4dHV0ZjE2Z3QnLCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAgcHJvYXJndHlw ZXMgPT4gJ3RleHQgdXRmMTYnLCBwcm9zcmMgPT4gJ3RleHR1dGYxNmd0JyB9LAoreyBvaWQgPT4g Jzg5NDQnLAorICBwcm9uYW1lID0+ICd0ZXh0dXRmMTZnZScsIHByb3JldHR5cGUgPT4gJ2Jvb2wn LAorICBwcm9hcmd0eXBlcyA9PiAndGV4dCB1dGYxNicsIHByb3NyYyA9PiAndGV4dHV0ZjE2Z2Un IH0sCit7IG9pZCA9PiAnODk3MCcsCisgIHByb25hbWUgPT4gJ3RleHR1dGYxNmVxJywgcHJvcmV0 dHlwZSA9PiAnYm9vbCcsCisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHV0ZjE2JywgcHJvc3JjID0+ ICd0ZXh0dXRmMTZlcScgfSwKK3sgb2lkID0+ICc4OTcxJywKKyAgcHJvbmFtZSA9PiAndGV4dHV0 ZjE2bmUnLCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAgcHJvYXJndHlwZXMgPT4gJ3RleHQgdXRm MTYnLCBwcm9zcmMgPT4gJ3RleHR1dGYxNm5lJyB9LAorCit7IG9pZCA9PiAnODkzMicsIGRlc2Ny ID0+ICdsZXNzLWVxdWFsLWdyZWF0ZXInLAorICBwcm9uYW1lID0+ICd1dGYxNnRleHRjbXAnLCBw cm9yZXR0eXBlID0+ICdpbnQ0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3V0ZjE2IHRleHQnLCBwcm9z cmMgPT4gJ3V0ZjE2dGV4dGNtcCcgfSwKK3sgb2lkID0+ICc4OTUxJywKKyAgcHJvbmFtZSA9PiAn dXRmMTZ0ZXh0bGUnLCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAgcHJvYXJndHlwZXMgPT4gJ3V0 ZjE2IHRleHQnLCBwcm9zcmMgPT4gJ3V0ZjE2dGV4dGxlJyB9LAoreyBvaWQgPT4gJzg5NTInLAor ICBwcm9uYW1lID0+ICd1dGYxNnRleHRsdCcsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAorICBwcm9h cmd0eXBlcyA9PiAndXRmMTYgdGV4dCcsIHByb3NyYyA9PiAndXRmMTZ0ZXh0bHQnIH0sCit7IG9p ZCA9PiAnODk1NycsCisgIHByb25hbWUgPT4gJ3V0ZjE2dGV4dGd0JywgcHJvcmV0dHlwZSA9PiAn Ym9vbCcsCisgIHByb2FyZ3R5cGVzID0+ICd1dGYxNiB0ZXh0JywgcHJvc3JjID0+ICd1dGYxNnRl eHRndCcgfSwKK3sgb2lkID0+ICc4OTU0JywKKyAgcHJvbmFtZSA9PiAndXRmMTZ0ZXh0Z2UnLCBw cm9yZXR0eXBlID0+ICdib29sJywKKyAgcHJvYXJndHlwZXMgPT4gJ3V0ZjE2IHRleHQnLCBwcm9z cmMgPT4gJ3V0ZjE2dGV4dGdlJyB9LAoreyBvaWQgPT4gJzg5ODAnLAorICBwcm9uYW1lID0+ICd1 dGYxNnRleHRlcScsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAndXRm MTYgdGV4dCcsIHByb3NyYyA9PiAndXRmMTZ0ZXh0ZXEnIH0sCit7IG9pZCA9PiAnODk4MScsCisg IHByb25hbWUgPT4gJ3V0ZjE2dGV4dG5lJywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCisgIHByb2Fy Z3R5cGVzID0+ICd1dGYxNiB0ZXh0JywgcHJvc3JjID0+ICd1dGYxNnRleHRuZScgfSwKKworeyBv aWQgPT4gJzg2NzInLCBkZXNjciA9PiAnbGVzcy1lcXVhbC1ncmVhdGVyJywKKyAgcHJvbmFtZSA9 PiAnbmFtZXV0ZjE2Y21wJywgcHJvcmV0dHlwZSA9PiAnaW50NCcsCisgIHByb2FyZ3R5cGVzID0+ ICduYW1lIHV0ZjE2JywgcHJvc3JjID0+ICduYW1ldXRmMTZjbXAnIH0sCit7IG9pZCA9PiAnODY0 MScsCisgIHByb25hbWUgPT4gJ25hbWV1dGYxNmxlJywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCisg IHByb2FyZ3R5cGVzID0+ICduYW1lIHV0ZjE2JywgcHJvc3JjID0+ICduYW1ldXRmMTZsZScgfSwK K3sgb2lkID0+ICc4NjQyJywKKyAgcHJvbmFtZSA9PiAnbmFtZXV0ZjE2bHQnLCBwcm9yZXR0eXBl ID0+ICdib29sJywKKyAgcHJvYXJndHlwZXMgPT4gJ25hbWUgdXRmMTYnLCBwcm9zcmMgPT4gJ25h bWV1dGYxNmx0JyB9LAoreyBvaWQgPT4gJzg2NDcnLAorICBwcm9uYW1lID0+ICduYW1ldXRmMTZn dCcsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAnbmFtZSB1dGYxNics IHByb3NyYyA9PiAnbmFtZXV0ZjE2Z3QnIH0sCit7IG9pZCA9PiAnODY0NCcsCisgIHByb25hbWUg PT4gJ25hbWV1dGYxNmdlJywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCisgIHByb2FyZ3R5cGVzID0+ ICduYW1lIHV0ZjE2JywgcHJvc3JjID0+ICduYW1ldXRmMTZnZScgfSwKK3sgb2lkID0+ICc4Njcw JywKKyAgcHJvbmFtZSA9PiAnbmFtZXV0ZjE2ZXEnLCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAg cHJvYXJndHlwZXMgPT4gJ25hbWUgdXRmMTYnLCBwcm9zcmMgPT4gJ25hbWV1dGYxNmVxJyB9LAor eyBvaWQgPT4gJzg2NzEnLAorICBwcm9uYW1lID0+ICduYW1ldXRmMTZuZScsIHByb3JldHR5cGUg PT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAnbmFtZSB1dGYxNicsIHByb3NyYyA9PiAnbmFt ZXV0ZjE2bmUnIH0sCisKK3sgb2lkID0+ICc4NDcyJywgZGVzY3IgPT4gJ2xlc3MtZXF1YWwtZ3Jl YXRlcicsCisgIHByb25hbWUgPT4gJ3V0ZjE2bmFtZWNtcCcsIHByb3JldHR5cGUgPT4gJ2ludDQn LAorICBwcm9hcmd0eXBlcyA9PiAndXRmMTYgbmFtZScsIHByb3NyYyA9PiAndXRmMTZuYW1lY21w JyB9LAoreyBvaWQgPT4gJzg0NTEnLAorICBwcm9uYW1lID0+ICd1dGYxNm5hbWVsZScsIHByb3Jl dHR5cGUgPT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAndXRmMTYgbmFtZScsIHByb3NyYyA9 PiAndXRmMTZuYW1lbGUnIH0sCit7IG9pZCA9PiAnODQ1MicsCisgIHByb25hbWUgPT4gJ3V0ZjE2 bmFtZWx0JywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCisgIHByb2FyZ3R5cGVzID0+ICd1dGYxNiBu YW1lJywgcHJvc3JjID0+ICd1dGYxNm5hbWVsdCcgfSwKK3sgb2lkID0+ICc4NDU3JywKKyAgcHJv bmFtZSA9PiAndXRmMTZuYW1lZ3QnLCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAgcHJvYXJndHlw ZXMgPT4gJ3V0ZjE2IG5hbWUnLCBwcm9zcmMgPT4gJ3V0ZjE2bmFtZWd0JyB9LAoreyBvaWQgPT4g Jzg0NTQnLAorICBwcm9uYW1lID0+ICd1dGYxNm5hbWVnZScsIHByb3JldHR5cGUgPT4gJ2Jvb2wn LAorICBwcm9hcmd0eXBlcyA9PiAndXRmMTYgbmFtZScsIHByb3NyYyA9PiAndXRmMTZuYW1lZ2Un IH0sCit7IG9pZCA9PiAnODQ3MCcsCisgIHByb25hbWUgPT4gJ3V0ZjE2bmFtZWVxJywgcHJvcmV0 dHlwZSA9PiAnYm9vbCcsCisgIHByb2FyZ3R5cGVzID0+ICd1dGYxNiBuYW1lJywgcHJvc3JjID0+ ICd1dGYxNm5hbWVlcScgfSwKK3sgb2lkID0+ICc4NDcxJywKKyAgcHJvbmFtZSA9PiAndXRmMTZu YW1lbmUnLCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAgcHJvYXJndHlwZXMgPT4gJ3V0ZjE2IG5h bWUnLCBwcm9zcmMgPT4gJ3V0ZjE2bmFtZW5lJyB9LAorCiB7IG9pZCA9PiAnODYnLCBkZXNjciA9 PiAnSS9PJywKICAgcHJvbmFtZSA9PiAncGdfZGRsX2NvbW1hbmRfaW4nLCBwcm9yZXR0eXBlID0+ ICdwZ19kZGxfY29tbWFuZCcsCiAgIHByb2FyZ3R5cGVzID0+ICdjc3RyaW5nJywgcHJvc3JjID0+ ICdwZ19kZGxfY29tbWFuZF9pbicgfSwKQEAgLTI4NzUsNiArMjk5Myw5IEBACiB7IG9pZCA9PiAn MTMxNycsIGRlc2NyID0+ICdsZW5ndGgnLAogICBwcm9uYW1lID0+ICdsZW5ndGgnLCBwcm9yZXR0 eXBlID0+ICdpbnQ0JywgcHJvYXJndHlwZXMgPT4gJ3RleHQnLAogICBwcm9zcmMgPT4gJ3RleHRs ZW4nIH0sCit7IG9pZCA9PiAnODg2MScsIGRlc2NyID0+ICdsZW5ndGgnLAorICBwcm9uYW1lID0+ ICdsZW5ndGgnLCBwcm9yZXR0eXBlID0+ICdpbnQ0JywgcHJvYXJndHlwZXMgPT4gJ3V0ZjE2JywK KyAgcHJvc3JjID0+ICd1dGYxNl9sZW5ndGgnIH0sCiB7IG9pZCA9PiAnMTMxOCcsIGRlc2NyID0+ ICdjaGFyYWN0ZXIgbGVuZ3RoJywKICAgcHJvbmFtZSA9PiAnbGVuZ3RoJywgcHJvcmV0dHlwZSA9 PiAnaW50NCcsIHByb2FyZ3R5cGVzID0+ICdicGNoYXInLAogICBwcm9zcmMgPT4gJ2JwY2hhcmxl bicgfSwKQEAgLTI5OTIsNiArMzExMyw5IEBACiB7IG9pZCA9PiAnMTM3NScsIGRlc2NyID0+ICdv Y3RldCBsZW5ndGgnLAogICBwcm9uYW1lID0+ICdvY3RldF9sZW5ndGgnLCBwcm9yZXR0eXBlID0+ ICdpbnQ0JywgcHJvYXJndHlwZXMgPT4gJ2JwY2hhcicsCiAgIHByb3NyYyA9PiAnYnBjaGFyb2N0 ZXRsZW4nIH0sCit7IG9pZCA9PiAnODg2MCcsIGRlc2NyID0+ICdvY3RldCBsZW5ndGgnLAorICBw cm9uYW1lID0+ICdvY3RldF9sZW5ndGgnLCBwcm9yZXR0eXBlID0+ICdpbnQ0JywgcHJvYXJndHlw ZXMgPT4gJ3V0ZjE2JywKKyAgcHJvc3JjID0+ICd1dGYxNl9vY3RldF9sZW5ndGgnIH0sCiAKIHsg b2lkID0+ICcxMzc3JywgZGVzY3IgPT4gJ2xhcmdlciBvZiB0d28nLAogICBwcm9uYW1lID0+ICd0 aW1lX2xhcmdlcicsIHByb3JldHR5cGUgPT4gJ3RpbWUnLCBwcm9hcmd0eXBlcyA9PiAndGltZSB0 aW1lJywKQEAgLTgzMDMsOSArODQyNywxNSBAQAogeyBvaWQgPT4gJzI0MTQnLCBkZXNjciA9PiAn SS9PJywKICAgcHJvbmFtZSA9PiAndGV4dHJlY3YnLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3Jl dHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwnLCBwcm9zcmMgPT4g J3RleHRyZWN2JyB9LAoreyBvaWQgPT4gJzg4OTInLCBkZXNjciA9PiAnSS9PJywKKyAgcHJvbmFt ZSA9PiAndXRmMTZyZWN2JywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICd1dGYx NicsCisgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCcsIHByb3NyYyA9PiAndXRmMTZyZWN2JyB9 LAogeyBvaWQgPT4gJzI0MTUnLCBkZXNjciA9PiAnSS9PJywKICAgcHJvbmFtZSA9PiAndGV4dHNl bmQnLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ2J5dGVhJywKICAgcHJvYXJn dHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ3RleHRzZW5kJyB9LAoreyBvaWQgPT4gJzg4OTMn LCBkZXNjciA9PiAnSS9PJywKKyAgcHJvbmFtZSA9PiAndXRmMTZzZW5kJywgcHJvdm9sYXRpbGUg PT4gJ3MnLCBwcm9yZXR0eXBlID0+ICdieXRlYScsCisgIHByb2FyZ3R5cGVzID0+ICd1dGYxNics IHByb3NyYyA9PiAndXRmMTZzZW5kJyB9LAogeyBvaWQgPT4gJzI0MTYnLCBkZXNjciA9PiAnSS9P JywKICAgcHJvbmFtZSA9PiAndW5rbm93bnJlY3YnLCBwcm9yZXR0eXBlID0+ICd1bmtub3duJywg cHJvYXJndHlwZXMgPT4gJ2ludGVybmFsJywKICAgcHJvc3JjID0+ICd1bmtub3ducmVjdicgfSwK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfdHlwZS5kYXQgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3R5cGUuZGF0CmluZGV4IGExYTc1M2QxNzk3Li4xMzBkY2UwYWRmNiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ190eXBlLmRhdAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3R5cGUuZGF0CkBAIC04NCw2ICs4NCwxNCBAQAogICB0eXBpc3ByZWZlcnJl ZCA9PiAndCcsIHR5cGlucHV0ID0+ICd0ZXh0aW4nLCB0eXBvdXRwdXQgPT4gJ3RleHRvdXQnLAog ICB0eXByZWNlaXZlID0+ICd0ZXh0cmVjdicsIHR5cHNlbmQgPT4gJ3RleHRzZW5kJywgdHlwYWxp Z24gPT4gJ2knLAogICB0eXBzdG9yYWdlID0+ICd4JywgdHlwY29sbGF0aW9uID0+ICdkZWZhdWx0 JyB9LAoreyBvaWQgPT4gJzg4ODgnLCBhcnJheV90eXBlX29pZCA9PiAnODg4OScsCisgIGRlc2Ny ID0+ICd2YXJpYWJsZS1sZW5ndGggVVRGLTE2IHN0cmluZycsCisgIHR5cG5hbWUgPT4gJ3V0ZjE2 JywgdHlwbGVuID0+ICctMScsIHR5cGJ5dmFsID0+ICdmJywgdHlwY2F0ZWdvcnkgPT4gJ1MnLAor ICB0eXBpc3ByZWZlcnJlZCA9PiAnZicsCisgIHR5cGlucHV0ID0+ICd1dGYxNmluJywgdHlwb3V0 cHV0ID0+ICd1dGYxNm91dCcsCisgIHR5cHJlY2VpdmUgPT4gJ3V0ZjE2cmVjdicsIHR5cHNlbmQg PT4gJ3V0ZjE2c2VuZCcsCisgIHR5cGFsaWduID0+ICdpJywKKyAgdHlwc3RvcmFnZSA9PiAneCcs IHR5cGNvbGxhdGlvbiA9PiAnZGVmYXVsdCcgfSwKIHsgb2lkID0+ICcyNicsIGFycmF5X3R5cGVf b2lkID0+ICcxMDI4JywKICAgZGVzY3IgPT4gJ29iamVjdCBpZGVudGlmaWVyKG9pZCksIG1heGlt dW0gNCBiaWxsaW9uJywKICAgdHlwbmFtZSA9PiAnb2lkJywgdHlwbGVuID0+ICc0JywgdHlwYnl2 YWwgPT4gJ3QnLCB0eXBjYXRlZ29yeSA9PiAnTicsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9m bWdyLmggYi9zcmMvaW5jbHVkZS9mbWdyLmgKaW5kZXggMTBkMDJiZGI3OWYuLjc1YTg2YWY0YmFh IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9mbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvZm1nci5o CkBAIC0yOTEsNiArMjkxLDcgQEAgZXh0ZXJuIHZhcmxlbmEgKnBnX2RldG9hc3RfZGF0dW1fcGFj a2VkKHZhcmxlbmEgKmRhdHVtKTsKIC8qIERhdHVtR2V0Rm9vIG1hY3JvcyBmb3IgdmFybGVuYSB0 eXBlcyB3aWxsIHR5cGljYWxseSBsb29rIGxpa2UgdGhpczogKi8KICNkZWZpbmUgRGF0dW1HZXRC eXRlYVBQKFgpCQkJKChieXRlYSAqKSBQR19ERVRPQVNUX0RBVFVNX1BBQ0tFRChYKSkKICNkZWZp bmUgRGF0dW1HZXRUZXh0UFAoWCkJCQkoKHRleHQgKikgUEdfREVUT0FTVF9EQVRVTV9QQUNLRUQo WCkpCisjZGVmaW5lIERhdHVtR2V0VXRmMTZQUChYKQkJCSgodXRmMTYgKikgUEdfREVUT0FTVF9E QVRVTV9QQUNLRUQoWCkpCiAjZGVmaW5lIERhdHVtR2V0QnBDaGFyUFAoWCkJCQkoKEJwQ2hhciAq KSBQR19ERVRPQVNUX0RBVFVNX1BBQ0tFRChYKSkKICNkZWZpbmUgRGF0dW1HZXRWYXJDaGFyUFAo WCkJCSgoVmFyQ2hhciAqKSBQR19ERVRPQVNUX0RBVFVNX1BBQ0tFRChYKSkKICNkZWZpbmUgRGF0 dW1HZXRIZWFwVHVwbGVIZWFkZXIoWCkJKChIZWFwVHVwbGVIZWFkZXIpIFBHX0RFVE9BU1RfREFU VU0oWCkpCkBAIC0zMDgsNiArMzA5LDcgQEAgZXh0ZXJuIHZhcmxlbmEgKnBnX2RldG9hc3RfZGF0 dW1fcGFja2VkKHZhcmxlbmEgKmRhdHVtKTsKIC8qIEdFVEFSRyBtYWNyb3MgZm9yIHZhcmxlbmEg dHlwZXMgd2lsbCB0eXBpY2FsbHkgbG9vayBsaWtlIHRoaXM6ICovCiAjZGVmaW5lIFBHX0dFVEFS R19CWVRFQV9QUChuKQkJRGF0dW1HZXRCeXRlYVBQKFBHX0dFVEFSR19EQVRVTShuKSkKICNkZWZp bmUgUEdfR0VUQVJHX1RFWFRfUFAobikJCURhdHVtR2V0VGV4dFBQKFBHX0dFVEFSR19EQVRVTShu KSkKKyNkZWZpbmUgUEdfR0VUQVJHX1VURjE2X1BQKG4pCQlEYXR1bUdldFV0ZjE2UFAoUEdfR0VU QVJHX0RBVFVNKG4pKQogI2RlZmluZSBQR19HRVRBUkdfQlBDSEFSX1BQKG4pCQlEYXR1bUdldEJw Q2hhclBQKFBHX0dFVEFSR19EQVRVTShuKSkKICNkZWZpbmUgUEdfR0VUQVJHX1ZBUkNIQVJfUFAo bikJCURhdHVtR2V0VmFyQ2hhclBQKFBHX0dFVEFSR19EQVRVTShuKSkKICNkZWZpbmUgUEdfR0VU QVJHX0hFQVBUVVBMRUhFQURFUihuKQlEYXR1bUdldEhlYXBUdXBsZUhlYWRlcihQR19HRVRBUkdf REFUVU0obikpCkBAIC0zNzIsNiArMzc0LDcgQEAgZXh0ZXJuIHZhcmxlbmEgKnBnX2RldG9hc3Rf ZGF0dW1fcGFja2VkKHZhcmxlbmEgKmRhdHVtKTsKIC8qIFJFVFVSTiBtYWNyb3MgZm9yIG90aGVy IHBhc3MtYnktcmVmIHR5cGVzIHdpbGwgdHlwaWNhbGx5IGxvb2sgbGlrZSB0aGlzOiAqLwogI2Rl ZmluZSBQR19SRVRVUk5fQllURUFfUCh4KSAgIFBHX1JFVFVSTl9QT0lOVEVSKHgpCiAjZGVmaW5l IFBHX1JFVFVSTl9URVhUX1AoeCkgICAgUEdfUkVUVVJOX1BPSU5URVIoeCkKKyNkZWZpbmUgUEdf UkVUVVJOX1VURjE2X1AoeCkgICBQR19SRVRVUk5fUE9JTlRFUih4KQogI2RlZmluZSBQR19SRVRV Uk5fQlBDSEFSX1AoeCkgIFBHX1JFVFVSTl9QT0lOVEVSKHgpCiAjZGVmaW5lIFBHX1JFVFVSTl9W QVJDSEFSX1AoeCkgUEdfUkVUVVJOX1BPSU5URVIoeCkKICNkZWZpbmUgUEdfUkVUVVJOX0hFQVBU VVBMRUhFQURFUih4KSAgcmV0dXJuIEhlYXBUdXBsZUhlYWRlckdldERhdHVtKHgpCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9tYi9wZ193Y2hhci5oIGIvc3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIu aAppbmRleCBkZWVlMmE4MzJjMy4uZjdlODE3OWFkNDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L21iL3BnX3djaGFyLmgKKysrIGIvc3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIuaApAQCAtMzY3LDYg KzM2Nyw3IEBAIHR5cGVkZWYgdWludDMyICgqdXRmX2xvY2FsX2NvbnZlcnNpb25fZnVuYykgKHVp bnQzMiBjb2RlKTsKIAogLyoKICAqIFNvbWUgaGFuZHkgZnVuY3Rpb25zIGZvciBVbmljb2RlLXNw ZWNpZmljIHRlc3RzLgorICogWFhYIE1vdmUgdGhlc2UgdG8gdW5pY29kZS5oPwogICovCiBzdGF0 aWMgaW5saW5lIGJvb2wKIGlzX3ZhbGlkX3VuaWNvZGVfY29kZXBvaW50KGNoYXIzMl90IGMpCkBA IC0zOTIsNiArMzkzLDIxIEBAIHN1cnJvZ2F0ZV9wYWlyX3RvX2NvZGVwb2ludChjaGFyMTZfdCBm aXJzdCwgY2hhcjE2X3Qgc2Vjb25kKQogCXJldHVybiAoKGZpcnN0ICYgMHgzRkYpIDw8IDEwKSAr IDB4MTAwMDAgKyAoc2Vjb25kICYgMHgzRkYpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wKK2Nv ZGVwb2ludF9oYXNfc3Vycm9nYXRlX3BhaXIoY2hhcjMyX3QgYykKK3sKKwlyZXR1cm4gYyA+PSAw eDEwMDAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2NvZGVwb2ludF90b19zdXJyb2dhdGVf cGFpcihjaGFyMTZfdCAqZmlyc3QsIGNoYXIxNl90ICpzZWNvbmQsIGNoYXIzMl90IGMpCit7CisJ QXNzZXJ0KGNvZGVwb2ludF9oYXNfc3Vycm9nYXRlX3BhaXIoYykpOworCWMgLT0gMHgxMDAwMDsK KwkqZmlyc3QgPSAoYyA+PiAxMCkgKyAweEQ4MDA7CisJKnNlY29uZCA9IChjICYgMHgzRkYpICsg MHhEQzAwOworfQorCiAvKgogICogQ29udmVydCBhIFVURi04IGNoYXJhY3RlciB0byBhIFVuaWNv ZGUgY29kZSBwb2ludC4KICAqIFRoaXMgaXMgYSBvbmUtY2hhcmFjdGVyIHZlcnNpb24gb2YgcGdf dXRmMndjaGFyX3dpdGhfbGVuLgpAQCAtNDY5LDYgKzQ4NSwyNCBAQCB1bmljb2RlX3V0ZjhsZW4o Y2hhcjMyX3QgYykKIAkJcmV0dXJuIDQ7CiB9CiAKKy8qCisgKiBOdW1iZXIgb2YgYnl0ZXMgaW4g YSBVVEY4IHNlcXVlbmNlLCBiYXNlZCBvbiB0aGUgZmlyc3QgYnl0ZS4KKyAqLworc3RhdGljIGlu bGluZSBpbnQKK3V0ZjhfbGVuX2Zyb21fbGVhZF9ieXRlKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlp ZiAoKGMgJiAweDgwKSA9PSAwKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmICgoYyAmIDB4ZTApID09 IDB4YzApCisJCXJldHVybiAyOworCWVsc2UgaWYgKChjICYgMHhmMCkgPT0gMHhlMCkKKwkJcmV0 dXJuIDM7CisJZWxzZSBpZiAoKGMgJiAweGY4KSA9PSAweGYwKQorCQlyZXR1cm4gNDsKKwllbHNl CisJCXJldHVybiAxOworfQorCiAvKgogICogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGxpc3QgYXJl IGV4cG9ydGVkIGJ5IGxpYnBxLCBhbmQgd2UgbmVlZCB0byBiZSBzdXJlCiAgKiB0aGF0IHdlIGtu b3cgd2hpY2ggY2FsbHMgYXJlIHNhdGlzZmllZCBieSBsaWJwcSBhbmQgd2hpY2ggYXJlIHNhdGlz ZmllZApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWIvc3RyaW5nX2l0ZXJhdG9yLmggYi9zcmMv aW5jbHVkZS9tYi9zdHJpbmdfaXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uMWExYmJjZTg3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9t Yi9zdHJpbmdfaXRlcmF0b3IuaApAQCAtMCwwICsxLDUwMCBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogc3RyaW5nX2l0ZXJhdG9yLmgKKyAqCSAgVG9vbHMgZm9yIGl0ZXJhdGluZyBvdmVy IHRleHQgc3RyaW5ncyBhcyBjaGFyLCBjaGFyMTZfdCBvciBjaGFyMzJfdC4KKyAqCisgKiBTdXBw b3J0IGZvciBVVEYtMTYgYW5kIFVURi0zMiBpcyBkZWdyYWRlZCBpZiB0aGUgZGF0YWJhc2UgZW5j b2RpbmcgaXMgbm90CisgKiBVVEY4OiBvbmx5IHRoZSA4LWJpdCBzdWJzZXQgKExBVElOMSkgb3Ig Ny1iaXQgc3Vic2V0IG9mIFVuaWNvZGUgdGhhdCBjYW4gYmUKKyAqIGNhc3QgZGlyZWN0bHkgaXMg c3VwcG9ydGVkLCBhbmQgb3V0LW9mLXJhbmdlIGNvZGVwb2ludHMgcmFpc2UgZXJyb3JzLgorICoK KyAqIFhYWCBEYXRhIHByb3Zpc2lvbiB2aWEgY2FsbGJhY2tzIGNvdWxkIGJlIGludmVzdGlnYXRl ZCBhcyBhIHdheSB0byBzdXBwb3J0CisgKiBpbmNyZW1lbnRhbCBvciBkZWZlcnJlZCBkZXRvYXN0 aW5nIHdpdGggY2VudHJhbGl6ZWQgaW5mcmFzdHJ1Y3R1cmUsIHRvCisgKiBhdm9pZCB0aGUgbmVl ZCB0byBvcGVuLWNvZGUgZGV0b2FzdGluZyBvcHRpbWl6YXRpb25zIGF0IGV2ZXJ5IHNpdGUuCisg KgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2Vu dHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL21i L3N0cmluZ19pdGVyYXRvci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYg U1RSSU5HX0lURVJBVE9SX0gKKyNkZWZpbmUgU1RSSU5HX0lURVJBVE9SX0gKKworI2luY2x1ZGUg Im1iL3BnX3djaGFyLmgiCisjaW5jbHVkZSAibWIvdW5pY29kZV90eXBlcy5oIgorCisvKiBBIGRl dmljZSBmb3IgaXRlcmF0aW5nIG92ZXIgbXVsdGlieXRlIHN0cmluZ3MuICovCit0eXBlZGVmIHN0 cnVjdCBtYl9pdGVyYXRvcgoreworCWNvbnN0IGNoYXIgKnA7CisJY29uc3QgY2hhciAqZW5kOwor CWludAkJCWVuY29kaW5nOworCWNoYXIxNl90CXN1cnJvZ2F0ZTsKK30gbWJfaXRlcmF0b3I7CisK Ky8qIEFuIGl0ZXJhdG9yIGZvciBpdGVyYXRpbmcgb3ZlciBVVEYtMTYgc3RyaW5ncy4gKi8KK3R5 cGVkZWYgc3RydWN0IGNoYXIxNl9pdGVyYXRvcgoreworCWNvbnN0IHN0b3JhZ2VfY2hhcjE2X3Qg KnA7CisJY29uc3Qgc3RvcmFnZV9jaGFyMTZfdCAqZW5kOworfSBjaGFyMTZfaXRlcmF0b3I7CisK Ky8qIFN0YXRpYyBpbml0aWFsaXplcnMgZm9yIHRoZSBhYm92ZS4gKi8KKyNkZWZpbmUgTUJfSVRF UkFUT1JfSU5JVChkYXRhLCBzaXplLCBlbmNvZGluZykgXAorCXsoZGF0YSksIChkYXRhKSArIChz aXplKSwgKGVuY29kaW5nKX0KKyNkZWZpbmUgTUJfSVRFUkFUT1JfSU5JVF9MT0NBTChkYXRhLCBz aXplKSBcCisJeyhkYXRhKSwgKGRhdGEpICsgKHNpemUpLCBHZXREYXRhYmFzZUVuY29kaW5nKCl9 CisjZGVmaW5lIENIQVIxNl9JVEVSQVRPUl9JTklUKGRhdGEsIHNpemUpIHsoZGF0YSksIChkYXRh KSArIChzaXplKX0KKworLyogRnVuY3Rpb24gcG9pbnRlciB0eXBlcyB1c2VmdWwgZm9yIGNyZWF0 aW5nIHNwZWNpYWxpemF0aW9ucy4gKi8KK3R5cGVkZWYgY2hhcjMyX3QgKCptYl9pdGVyYXRvcl9u ZXh0X2NoYXIzMl90X2ZuKSAobWJfaXRlcmF0b3IgKik7Cit0eXBlZGVmIHNpemVfdCAoKm1iX2l0 ZXJhdG9yX3N0b3JlX2NoYXIxNl9mbikgKG1iX2l0ZXJhdG9yICosIHN0b3JhZ2VfY2hhcjE2X3Qg Kik7Cit0eXBlZGVmIGNoYXIzMl90ICgqY2hhcjE2X2l0ZXJhdG9yX25leHRfY2hhcjMyX3RfZm4p IChjaGFyMTZfaXRlcmF0b3IgKik7Cit0eXBlZGVmIHNpemVfdCAoKmNoYXIxNl9pdGVyYXRvcl9z dG9yZV9tYl9mbikgKGNoYXIxNl9pdGVyYXRvciAqLCBjaGFyICosIGludCBlbmNvZGluZyk7CisK K3N0YXRpYyBpbmxpbmUgdm9pZAorbWJfaXRlcmF0b3JfYmVnaW4obWJfaXRlcmF0b3IgKml0ZXJh dG9yLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlpdGVyYXRvci0+cCA9IGRh dGE7CisJaXRlcmF0b3ItPmVuZCA9IGRhdGEgKyBzaXplOworCWl0ZXJhdG9yLT5zdXJyb2dhdGUg PSAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK21iX2l0ZXJhdG9yX2hhc19tb3JlKG1iX2l0 ZXJhdG9yICppdGVyYXRvcikKK3sKKwlyZXR1cm4gaXRlcmF0b3ItPnAgPCBpdGVyYXRvci0+ZW5k IHx8IGl0ZXJhdG9yLT5zdXJyb2dhdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbWJfaXRl cmF0b3JfY2hlY2tfYXNjaWlfcmFuZ2UobWJfaXRlcmF0b3IgKml0ZXJhdG9yLAorCQkJCQkJCSAg Y29uc3QgY2hhciAqdGFyZ2V0X2VuY29kaW5nLAorCQkJCQkJCSAgdW5zaWduZWQgY2hhciBjKQor eworCWlmICh1bmxpa2VseShjID4gMHg3ZikpCisJCWVsb2coRVJST1IsCisJCQkgIm5vIGNvbnZl cnNpb24gZnJvbSBcIiVzXCIgdG8gXCIlc1wiIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHNlcXVlbmNl IGJlZ2lubmluZyAweCUwMngiLAorCQkJIHBnX2VuY29kaW5nX3RvX2NoYXIoaXRlcmF0b3ItPmVu Y29kaW5nKSwKKwkJCSB0YXJnZXRfZW5jb2RpbmcsCisJCQkgYyk7Cit9CisKKy8qIFN0b3JlIGEg Y2hhcmFjdGVyIGF0IGRzdCBhbmQgcmV0dXJuIGJ5dGUgY291bnQuICovCitzdGF0aWMgaW5saW5l IHNpemVfdAorbWJfaXRlcmF0b3Jfc3RvcmUobWJfaXRlcmF0b3IgKml0ZXJhdG9yLCBjaGFyICpk c3QpCit7CisJc2l6ZV90CQlzaXplOworCisJQXNzZXJ0KG1iX2l0ZXJhdG9yX2hhc19tb3JlKGl0 ZXJhdG9yKSk7CisJc2l6ZSA9IHBnX21ibGVuX3JhbmdlKGl0ZXJhdG9yLT5wLCBpdGVyYXRvci0+ ZW5kKTsKKwltZW1jcHkoZHN0LCBpdGVyYXRvci0+cCwgc2l6ZSk7CisJaXRlcmF0b3ItPnAgKz0g c2l6ZTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QKK21iX2l0ZXJh dG9yX3N0b3JlX19zYihtYl9pdGVyYXRvciAqaXRlcmF0b3IsIGNoYXIgKmRzdCkKK3sKKwlBc3Nl cnQocGdfZW5jb2RpbmdfbWF4X2xlbmd0aChpdGVyYXRvci0+ZW5jb2RpbmcpID09IDEpOworCUFz c2VydChtYl9pdGVyYXRvcl9oYXNfbW9yZShpdGVyYXRvcikpOworCSpkc3QgPSAqaXRlcmF0b3It PnArKzsKKwlyZXR1cm4gMTsKK30KKworLyogU3RvcmUgYSBjaGFyYWN0ZXIgaW4gbWVtb3J5IGJl Zm9yZSBkc3QgYW5kIHJldHVybiBieXRlIGNvdW50LiAqLworc3RhdGljIGlubGluZSBzaXplX3QK K21iX2l0ZXJhdG9yX3N0b3JlX2JlZm9yZShtYl9pdGVyYXRvciAqaXRlcmF0b3IsIGNoYXIgKmRz dCkKK3sKKwlzaXplX3QJCXNpemU7CisKKwlBc3NlcnQobWJfaXRlcmF0b3JfaGFzX21vcmUoaXRl cmF0b3IpKTsKKwlzaXplID0gcGdfbWJsZW5fcmFuZ2UoaXRlcmF0b3ItPnAsIGl0ZXJhdG9yLT5l bmQpOworCWRzdCAtPSBzaXplOworCW1lbWNweShkc3QsIGl0ZXJhdG9yLT5wLCBzaXplKTsKKwlp dGVyYXRvci0+cCArPSBzaXplOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW5saW5lIHNp emVfdAorbWJfaXRlcmF0b3Jfc3RvcmVfYmVmb3JlX19zYihtYl9pdGVyYXRvciAqaXRlcmF0b3Is IGNoYXIgKmRzdCkKK3sKKwlBc3NlcnQocGdfZW5jb2RpbmdfbWF4X2xlbmd0aChpdGVyYXRvci0+ ZW5jb2RpbmcpID09IDEpOworCUFzc2VydChtYl9pdGVyYXRvcl9oYXNfbW9yZShpdGVyYXRvcikp OworCWRzdC0tOworCSpkc3QgPSAqaXRlcmF0b3ItPnArKzsKKwlyZXR1cm4gMTsKK30KKworc3Rh dGljIGlubGluZSBjaGFyMzJfdAorbWJfaXRlcmF0b3JfbmV4dF9jaGFyMzJfdF9fYXNjaWkobWJf aXRlcmF0b3IgKml0ZXJhdG9yKQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCUFzc2VydChtYl9p dGVyYXRvcl9oYXNfbW9yZShpdGVyYXRvcikpOworCisJLyogQVNDSUkgY2FuIGJlIGNhc3QgZGly ZWN0bHkgdG8gY2hhcjMyX3QsIGFmdGVyIDctYml0IHJhbmdlIGNoZWNrLiAqLworCWMgPSAqaXRl cmF0b3ItPnArKzsKKwltYl9pdGVyYXRvcl9jaGVja19hc2NpaV9yYW5nZShpdGVyYXRvciwgIlVU Ri0zMiIsIGMpOworCXJldHVybiBjOworfQorCitzdGF0aWMgaW5saW5lIGNoYXIzMl90CittYl9p dGVyYXRvcl9uZXh0X2NoYXIzMl90X19sYXRpbjEobWJfaXRlcmF0b3IgKml0ZXJhdG9yKQorewor CUFzc2VydChpdGVyYXRvci0+ZW5jb2RpbmcgPT0gUEdfTEFUSU4xKTsKKwlBc3NlcnQobWJfaXRl cmF0b3JfaGFzX21vcmUoaXRlcmF0b3IpKTsKKworCS8qIExBVElOMSAodW5zaWduZWQpIGNhbiBi ZSBjYXN0IGRpcmVjdGx5IHRvIGNoYXIzMl90LiAqLworCXJldHVybiAodW5zaWduZWQgY2hhcikg Kml0ZXJhdG9yLT5wKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgY2hhcjMyX3QKK21iX2l0ZXJhdG9y X25leHRfY2hhcjMyX3RfX3V0ZjgobWJfaXRlcmF0b3IgKml0ZXJhdG9yKQoreworCWNvbnN0IGNo YXIgKnAgPSBpdGVyYXRvci0+cDsKKwlzaXplX3QJCXNpemU7CisKKwlBc3NlcnQoaXRlcmF0b3It PmVuY29kaW5nID09IFBHX1VURjgpOworCUFzc2VydChtYl9pdGVyYXRvcl9oYXNfbW9yZShpdGVy YXRvcikpOworCisJc2l6ZSA9IHV0ZjhfbGVuX2Zyb21fbGVhZF9ieXRlKCpwKTsKKwlpZiAocCAr IHNpemUgPiBpdGVyYXRvci0+ZW5kKQorCQlyZXBvcnRfaW52YWxpZF9lbmNvZGluZyhpdGVyYXRv ci0+ZW5jb2RpbmcsIHAsIGl0ZXJhdG9yLT5lbmQgLSBwKTsKKwlpdGVyYXRvci0+cCArPSBzaXpl OworCisJcmV0dXJuIHV0ZjhfdG9fdW5pY29kZSgodW5zaWduZWQgY2hhciAqKSBwKTsKK30KKwor c3RhdGljIGlubGluZSBjaGFyMzJfdAorbWJfaXRlcmF0b3JfbmV4dF9jaGFyMzJfdChtYl9pdGVy YXRvciAqaXRlcmF0b3IpCit7CisJc3dpdGNoIChpdGVyYXRvci0+ZW5jb2RpbmcpCisJeworCQlj YXNlIFBHX1VURjg6CisJCQlyZXR1cm4gbWJfaXRlcmF0b3JfbmV4dF9jaGFyMzJfdF9fdXRmOChp dGVyYXRvcik7CisJCWNhc2UgUEdfTEFUSU4xOgorCQkJcmV0dXJuIG1iX2l0ZXJhdG9yX25leHRf Y2hhcjMyX3RfX2xhdGluMShpdGVyYXRvcik7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gbWJfaXRl cmF0b3JfbmV4dF9jaGFyMzJfdF9fYXNjaWkoaXRlcmF0b3IpOworCX0KK30KKworc3RhdGljIGlu bGluZSBjaGFyMTZfdAorbWJfaXRlcmF0b3JfbmV4dF9jaGFyMTZfdF9fYXNjaWkobWJfaXRlcmF0 b3IgKml0ZXJhdG9yKQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCUFzc2VydChtYl9pdGVyYXRv cl9oYXNfbW9yZShpdGVyYXRvcikpOworCisJLyogQVNDSUkgY2FuIGJlIGNhc3QgZGlyZWN0bHkg dG8gY2hhcjE2X3QgYWZ0ZXIgNy1iaXQgcmFuZ2UgY2hlY2suICovCisJYyA9ICppdGVyYXRvci0+ cCsrOworCW1iX2l0ZXJhdG9yX2NoZWNrX2FzY2lpX3JhbmdlKGl0ZXJhdG9yLCAiVVRGLTE2Iiwg Yyk7CisJcmV0dXJuICppdGVyYXRvci0+cCsrOworfQorCitzdGF0aWMgaW5saW5lIGNoYXIxNl90 CittYl9pdGVyYXRvcl9uZXh0X2NoYXIxNl90X19sYXRpbjEobWJfaXRlcmF0b3IgKml0ZXJhdG9y KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCUFzc2VydChtYl9pdGVyYXRvcl9oYXNfbW9yZShp dGVyYXRvcikpOworCWMgPSAqaXRlcmF0b3ItPnArKzsKKworCS8qIExBVElOMSAodW5zaWduZWQp IGNhbiBiZSBjYXN0IGRpcmVjdGx5IHRvIGNoYXIxNl90LiAqLworCXJldHVybiBjOworfQorCitz dGF0aWMgaW5saW5lIGNoYXIxNl90CittYl9pdGVyYXRvcl9uZXh0X2NoYXIxNl90X191dGY4KG1i X2l0ZXJhdG9yICppdGVyYXRvcikKK3sKKwljaGFyMzJfdAljb2RlcG9pbnQ7CisKKwlBc3NlcnQo aXRlcmF0b3ItPmVuY29kaW5nID09IFBHX1VURjgpOworCUFzc2VydChtYl9pdGVyYXRvcl9oYXNf bW9yZShpdGVyYXRvcikpOworCisJaWYgKHVubGlrZWx5KGl0ZXJhdG9yLT5zdXJyb2dhdGUpKQor CXsKKwkJY2hhcjE2X3QJcmVzdWx0ID0gaXRlcmF0b3ItPnN1cnJvZ2F0ZTsKKworCQlpdGVyYXRv ci0+c3Vycm9nYXRlID0gMDsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwljb2RlcG9pbnQgPSBt Yl9pdGVyYXRvcl9uZXh0X2NoYXIzMl90X191dGY4KGl0ZXJhdG9yKTsKKwlpZiAodW5saWtlbHko Y29kZXBvaW50X2hhc19zdXJyb2dhdGVfcGFpcihjb2RlcG9pbnQpKSkKKwl7CisJCWNoYXIxNl90 CXJlc3VsdDsKKworCQljb2RlcG9pbnRfdG9fc3Vycm9nYXRlX3BhaXIoJnJlc3VsdCwgJml0ZXJh dG9yLT5zdXJyb2dhdGUsIGNvZGVwb2ludCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmV0 dXJuIGNvZGVwb2ludDsKK30KKworc3RhdGljIGlubGluZSBjaGFyMTZfdAorbWJfaXRlcmF0b3Jf bmV4dF9jaGFyMTZfdChtYl9pdGVyYXRvciAqaXRlcmF0b3IpCit7CisJc3dpdGNoIChpdGVyYXRv ci0+ZW5jb2RpbmcpCisJeworCQljYXNlIFBHX1VURjg6CisJCQlyZXR1cm4gbWJfaXRlcmF0b3Jf bmV4dF9jaGFyMTZfdF9fdXRmOChpdGVyYXRvcik7CisJCWNhc2UgUEdfTEFUSU4xOgorCQkJcmV0 dXJuIG1iX2l0ZXJhdG9yX25leHRfY2hhcjE2X3RfX2xhdGluMShpdGVyYXRvcik7CisJCWRlZmF1 bHQ6CisJCQlyZXR1cm4gbWJfaXRlcmF0b3JfbmV4dF9jaGFyMTZfdF9fYXNjaWkoaXRlcmF0b3Ip OworCX0KK30KKworc3RhdGljIGlubGluZSBzaXplX3QKK21iX2l0ZXJhdG9yX3N0b3JlX2NoYXIx Nl9fYXNjaWkobWJfaXRlcmF0b3IgKml0ZXJhdG9yLCBzdG9yYWdlX2NoYXIxNl90ICpkc3QpCit7 CisJdW5zaWduZWQgY2hhciBjOworCisJQXNzZXJ0KG1iX2l0ZXJhdG9yX2hhc19tb3JlKGl0ZXJh dG9yKSk7CisKKwkvKiBBU0NJSSBjYW4gYmUgY2FzdCBkaXJlY3RseSB0byBjaGFyMTZfdCBhZnRl ciA3LWJpdCByYW5nZSBjaGVjay4gKi8KKwljID0gKml0ZXJhdG9yLT5wKys7CisJbWJfaXRlcmF0 b3JfY2hlY2tfYXNjaWlfcmFuZ2UoaXRlcmF0b3IsICJVVEYtMTYiLCBjKTsKKwljaGFyMTZfc3Rv cmUoZHN0LCBjKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QKK21iX2l0 ZXJhdG9yX3N0b3JlX2NoYXIxNl9fbGF0aW4xKG1iX2l0ZXJhdG9yICppdGVyYXRvciwgc3RvcmFn ZV9jaGFyMTZfdCAqZHN0KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCUFzc2VydChpdGVyYXRv ci0+ZW5jb2RpbmcgPT0gUEdfTEFUSU4xKTsKKwlBc3NlcnQobWJfaXRlcmF0b3JfaGFzX21vcmUo aXRlcmF0b3IpKTsKKworCS8qIExBVElOMSAodW5zaWduZWQpIGNhbiBiZSBjYXN0IGRpcmVjdGx5 IHRvIGNoYXIxNl90LiAqLworCWMgPSAqaXRlcmF0b3ItPnArKzsKKwljaGFyMTZfc3RvcmUoZHN0 LCBjKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QKK21iX2l0ZXJhdG9y X3N0b3JlX2NoYXIxNl9fdXRmOChtYl9pdGVyYXRvciAqaXRlcmF0b3IsIHN0b3JhZ2VfY2hhcjE2 X3QgKmRzdCkKK3sKKwljaGFyMzJfdAljb2RlcG9pbnQ7CisKKwlBc3NlcnQoaXRlcmF0b3ItPmVu Y29kaW5nID09IFBHX1VURjgpOworCUFzc2VydChtYl9pdGVyYXRvcl9oYXNfbW9yZShpdGVyYXRv cikpOworCisJY29kZXBvaW50ID0gbWJfaXRlcmF0b3JfbmV4dF9jaGFyMzJfdF9fdXRmOChpdGVy YXRvcik7CisJaWYgKHVubGlrZWx5KGNvZGVwb2ludF9oYXNfc3Vycm9nYXRlX3BhaXIoY29kZXBv aW50KSkpCisJeworCQljaGFyMTZfdAljb2RlcG9pbnQxOworCQljaGFyMTZfdAljb2RlcG9pbnQy OworCisJCWNvZGVwb2ludF90b19zdXJyb2dhdGVfcGFpcigmY29kZXBvaW50MSwgJmNvZGVwb2lu dDIsIGNvZGVwb2ludCk7CisJCWNoYXIxNl9zdG9yZSgmZHN0WzBdLCBjb2RlcG9pbnQxKTsKKwkJ Y2hhcjE2X3N0b3JlKCZkc3RbMV0sIGNvZGVwb2ludDIpOworCQlyZXR1cm4gMjsKKwl9CisKKwlj aGFyMTZfc3RvcmUoZHN0LCBjb2RlcG9pbnQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5s aW5lIGNoYXIxNl90CittYl9pdGVyYXRvcl9zdG9yZV9jaGFyMTYobWJfaXRlcmF0b3IgKml0ZXJh dG9yLCBzdG9yYWdlX2NoYXIxNl90ICpkc3QpCit7CisJc3dpdGNoIChpdGVyYXRvci0+ZW5jb2Rp bmcpCisJeworCQljYXNlIFBHX1VURjg6CisJCQlyZXR1cm4gbWJfaXRlcmF0b3Jfc3RvcmVfY2hh cjE2X191dGY4KGl0ZXJhdG9yLCBkc3QpOworCQljYXNlIFBHX0xBVElOMToKKwkJCXJldHVybiBt Yl9pdGVyYXRvcl9zdG9yZV9jaGFyMTZfX2xhdGluMShpdGVyYXRvciwgZHN0KTsKKwkJZGVmYXVs dDoKKwkJCXJldHVybiBtYl9pdGVyYXRvcl9zdG9yZV9jaGFyMTZfX2FzY2lpKGl0ZXJhdG9yLCBk c3QpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitjaGFyMTZfaXRlcmF0b3JfYmVnaW4o Y2hhcjE2X2l0ZXJhdG9yICppdGVyYXRvciwKKwkJCQkJICBjb25zdCBzdG9yYWdlX2NoYXIxNl90 ICpkYXRhLAorCQkJCQkgIHNpemVfdCBzaXplKQoreworCWl0ZXJhdG9yLT5wID0gZGF0YTsKKwlp dGVyYXRvci0+ZW5kID0gZGF0YSArIHNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorY2hh cjE2X2l0ZXJhdG9yX2hhc19tb3JlKGNoYXIxNl9pdGVyYXRvciAqaXRlcmF0b3IpCit7CisJcmV0 dXJuIGl0ZXJhdG9yLT5wIDwgaXRlcmF0b3ItPmVuZDsKK30KKworc3RhdGljIGlubGluZSB2b2lk CitjaGFyMTZfaXRlcmF0b3JfcmVwb3J0X3Nob3J0X3BhaXIoY2hhcjE2X3QgY29kZXBvaW50MSkK K3sKKwllbG9nKEVSUk9SLCAiaW52YWxpZCBVVEYtMTYgc2VxdWVuY2UgMHglMDR4IiwgY29kZXBv aW50MSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2hhcjE2X2l0ZXJhdG9yX3JlcG9ydF9i YWRfcGFpcihjaGFyMTZfdCBjb2RlcG9pbnQxLCBjaGFyMTZfdCBjb2RlcG9pbnQyKQoreworCWVs b2coRVJST1IsICJpbnZhbGlkIFVURi0xNiBzZXF1ZW5jZSAweCUwNHggMHglMDR4IiwKKwkJIGNv ZGVwb2ludDEsIGNvZGVwb2ludDIpOworfQorCitzdGF0aWMgaW5saW5lIGNoYXIzMl90CitjaGFy MTZfaXRlcmF0b3JfbmV4dF9jaGFyMzJfdChjaGFyMTZfaXRlcmF0b3IgKml0ZXJhdG9yKQorewor CWNoYXIzMl90CWNvZGVwb2ludDsKKworCUFzc2VydChjaGFyMTZfaXRlcmF0b3JfaGFzX21vcmUo aXRlcmF0b3IpKTsKKwljb2RlcG9pbnQgPSBjaGFyMTZfbG9hZChpdGVyYXRvci0+cCsrKTsKKwor CWlmICh1bmxpa2VseShpc191dGYxNl9zdXJyb2dhdGVfZmlyc3QoY29kZXBvaW50KSkpCisJewor CQlpZiAoIWNoYXIxNl9pdGVyYXRvcl9oYXNfbW9yZShpdGVyYXRvcikpCisJCQljaGFyMTZfaXRl cmF0b3JfcmVwb3J0X3Nob3J0X3BhaXIoY29kZXBvaW50KTsKKwkJY29kZXBvaW50ID0gc3Vycm9n YXRlX3BhaXJfdG9fY29kZXBvaW50KGNvZGVwb2ludCwKKwkJCQkJCQkJCQkJCWNoYXIxNl9sb2Fk KGl0ZXJhdG9yLT5wKyspKTsKKwl9CisKKwlyZXR1cm4gY29kZXBvaW50OworfQorCitzdGF0aWMg aW5saW5lIGNoYXIxNl90CitjaGFyMTZfaXRlcmF0b3JfbmV4dF9jaGFyMTZfdChjaGFyMTZfaXRl cmF0b3IgKml0ZXJhdG9yKQoreworCUFzc2VydChjaGFyMTZfaXRlcmF0b3JfaGFzX21vcmUoaXRl cmF0b3IpKTsKKwlyZXR1cm4gY2hhcjE2X2xvYWQoaXRlcmF0b3ItPnArKyk7Cit9CisKK3N0YXRp YyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBzaXplX3QKK2NoYXIxNl9pdGVyYXRvcl9zdG9y ZV9tYl9fc2IoY2hhcjE2X2l0ZXJhdG9yICppdGVyYXRvciwgY2hhciAqZHN0LAorCQkJCQkJCSB1 bnNpZ25lZCBjaGFyIG1heF9jaGFyLCBpbnQgZW5jb2RpbmcpCit7CisJY2hhcjE2X3QJY29kZXBv aW50OworCisJQXNzZXJ0KGNoYXIxNl9pdGVyYXRvcl9oYXNfbW9yZShpdGVyYXRvcikpOworCisJ Y29kZXBvaW50ID0gY2hhcjE2X2xvYWQoaXRlcmF0b3ItPnArKyk7CisJaWYgKHVubGlrZWx5KGNv ZGVwb2ludCA+IG1heF9jaGFyKSkKKwkJZWxvZyhFUlJPUiwKKwkJCSAibm8gY29udmVyc2lvbiBm cm9tIFwiVVRGLTE2XCIgdG8gXCIlc1wiIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGNvZGVwb2ludCAl MDR4IiwKKwkJCSBwZ19lbmNvZGluZ190b19jaGFyKGVuY29kaW5nKSwKKwkJCSBjb2RlcG9pbnQp OworCSpkc3QgPSBjb2RlcG9pbnQ7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBz aXplX3QKK2NoYXIxNl9pdGVyYXRvcl9zdG9yZV9tYl9fYXNjaWkoY2hhcjE2X2l0ZXJhdG9yICpp dGVyYXRvciwgY2hhciAqZHN0LAorCQkJCQkJCQlpbnQgZW5jb2RpbmcpCit7CisJLyogVW5pY29k ZSBjYW4gYmUgY2FzdCB0byBBU0NJSSBhZnRlciA3LWJpdCByYW5nZSBjaGVjay4gKi8KKwlyZXR1 cm4gY2hhcjE2X2l0ZXJhdG9yX3N0b3JlX21iX19zYihpdGVyYXRvciwgZHN0LCAweDdmLCBlbmNv ZGluZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90CitjaGFyMTZfaXRlcmF0b3Jfc3RvcmVf bWJfX2xhdGluMShjaGFyMTZfaXRlcmF0b3IgKml0ZXJhdG9yLCBjaGFyICpkc3QsCisJCQkJCQkJ CSBpbnQgZW5jb2RpbmcpCit7CisJLyogVW5pY29kZSBjYW4gYmUgY2FzdCB0byBMQVRJTjEgYWZ0 ZXIgOC1iaXQgcmFuZ2UgY2hlY2suICovCisJQXNzZXJ0KGVuY29kaW5nID09IFBHX0xBVElOMSk7 CisJcmV0dXJuIGNoYXIxNl9pdGVyYXRvcl9zdG9yZV9tYl9fc2IoaXRlcmF0b3IsIGRzdCwgMHhm ZiwgZW5jb2RpbmcpOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdAorY2hhcjE2X2l0ZXJhdG9y X3N0b3JlX21iX191dGY4KGNoYXIxNl9pdGVyYXRvciAqaXRlcmF0b3IsIGNoYXIgKmRzdCwKKwkJ CQkJCQkgICBpbnQgZW5jb2RpbmcpCit7CisJY2hhcjMyX3QJY29kZXBvaW50OworCisJQXNzZXJ0 KGVuY29kaW5nID09IFBHX1VURjgpOworCUFzc2VydChjaGFyMTZfaXRlcmF0b3JfaGFzX21vcmUo aXRlcmF0b3IpKTsKKworCWNvZGVwb2ludCA9IGNoYXIxNl9sb2FkKGl0ZXJhdG9yLT5wKyspOwor CisJLyogU3RhcnQgb2YgYSBzdXJyb2dhdGUgcGFpcj8gKi8KKwlpZiAodW5saWtlbHkoaXNfdXRm MTZfc3Vycm9nYXRlX2ZpcnN0KGNvZGVwb2ludCkpKQorCXsKKwkJY2hhcjE2X3QJY29kZXBvaW50 MjsKKworCQlpZiAodW5saWtlbHkoIWNoYXIxNl9pdGVyYXRvcl9oYXNfbW9yZShpdGVyYXRvcikp KQorCQkJY2hhcjE2X2l0ZXJhdG9yX3JlcG9ydF9zaG9ydF9wYWlyKGNvZGVwb2ludCk7CisJCWNv ZGVwb2ludDIgPSBjaGFyMTZfbG9hZChpdGVyYXRvci0+cCsrKTsKKwkJaWYgKHVubGlrZWx5KCFp c191dGYxNl9zdXJyb2dhdGVfc2Vjb25kKGNvZGVwb2ludDIpKSkKKwkJCWNoYXIxNl9pdGVyYXRv cl9yZXBvcnRfYmFkX3BhaXIoY29kZXBvaW50LCBjb2RlcG9pbnQyKTsKKwkJY29kZXBvaW50ID0g c3Vycm9nYXRlX3BhaXJfdG9fY29kZXBvaW50KGNvZGVwb2ludCwgY29kZXBvaW50Mik7CisJfQor CisJdW5pY29kZV90b191dGY4KGNvZGVwb2ludCwgKHVuc2lnbmVkIGNoYXIgKikgZHN0KTsKKwly ZXR1cm4gdW5pY29kZV91dGY4bGVuKGNvZGVwb2ludCk7Cit9CisKKy8qCisgKiBUaGUgZGVzdGlu YXRpb24gbXVzdCBoYXZlIHNwYWNlIGZvciBNQVhfTUJfTEVOX1BFUl9VVEYzMl9DT0RFUE9JTlQg Ynl0ZXMsCisgKiBiZWNhdXNlIFVURi0xNiBzdXJyb2dhdGUgcGFpcnMgYXJlIGNvbWJpbmVkIHRv IFVURi0zMi4KKyAqCisgKiBDYWxsIG9uZSBvZiB0aGUgc3BlY2lhbGl6YXRpb25zIGRpcmVjdGx5 IHRvIGF2b2lkIGRpc3BhdGNoaW5nIG92ZXJoZWFkLgorICovCitzdGF0aWMgaW5saW5lIHNpemVf dAorY2hhcjE2X2l0ZXJhdG9yX3N0b3JlX21iKGNoYXIxNl9pdGVyYXRvciAqaXRlcmF0b3IsIGNo YXIgKmRzdCwgaW50IGVuY29kaW5nKQoreworCXN3aXRjaCAoZW5jb2RpbmcpCisJeworCQljYXNl IFBHX1VURjg6CisJCQlyZXR1cm4gY2hhcjE2X2l0ZXJhdG9yX3N0b3JlX21iX191dGY4KGl0ZXJh dG9yLCBkc3QsIGVuY29kaW5nKTsKKwkJY2FzZSBQR19MQVRJTjE6CisJCQlyZXR1cm4gY2hhcjE2 X2l0ZXJhdG9yX3N0b3JlX21iX19sYXRpbjEoaXRlcmF0b3IsIGRzdCwgZW5jb2RpbmcpOworCQlk ZWZhdWx0OgorCQkJcmV0dXJuIGNoYXIxNl9pdGVyYXRvcl9zdG9yZV9tYl9fYXNjaWkoaXRlcmF0 b3IsIGRzdCwgZW5jb2RpbmcpOworCX0KK30KKworLyoKKyAqIGNoYXIxNl9pdGVyYXRvcl9zdG9y ZV9tYigpIGZvciBkYXRhYmFzZSBlbmNvZGluZy4KKyAqLworc3RhdGljIGlubGluZSBzaXplX3QK K2NoYXIxNl9pdGVyYXRvcl9zdG9yZV9sb2NhbChjaGFyMTZfaXRlcmF0b3IgKml0ZXJhdG9yLCBj aGFyICpkc3QpCit7CisJcmV0dXJuIGNoYXIxNl9pdGVyYXRvcl9zdG9yZV9tYihpdGVyYXRvciwg ZHN0LCBHZXREYXRhYmFzZUVuY29kaW5nKCkpOworfQorCisvKgorICogU2tpcCBvbmUgVVRGLTMy IGNvZGVwb2ludC4gIFRoZSBpdGVyYXRvciBtdXN0IG5vdCBiZSBleGhhdXN0ZWQuCisgKi8KK3N0 YXRpYyBpbmxpbmUgdm9pZAorY2hhcjE2X2l0ZXJhdG9yX2FkdmFuY2UoY2hhcjE2X2l0ZXJhdG9y ICppdGVyYXRvcikKK3sKKwljaGFyMTZfdAljb2RlcG9pbnQ7CisKKwlBc3NlcnQoY2hhcjE2X2l0 ZXJhdG9yX2hhc19tb3JlKGl0ZXJhdG9yKSk7CisJY29kZXBvaW50ID0gY2hhcjE2X2xvYWQoaXRl cmF0b3ItPnArKyk7CisJaWYgKHVubGlrZWx5KGlzX3V0ZjE2X3N1cnJvZ2F0ZV9maXJzdChjb2Rl cG9pbnQpKSkKKwl7CisJCWlmICghY2hhcjE2X2l0ZXJhdG9yX2hhc19tb3JlKGl0ZXJhdG9yKSkK KwkJCWNoYXIxNl9pdGVyYXRvcl9yZXBvcnRfc2hvcnRfcGFpcihjb2RlcG9pbnQpOworCQlpdGVy YXRvci0+cCsrOworCX0KK30KKworLyoKKyAqIFNraXAgYXMgbWFueSBVVEYtMzIgY29kZXBvaW50 cyBhcyBwb3NzaWJsZSwgcmV0dXJuaW5nIHRoZSBudW1iZXIgdGhhdCB3ZXJlCisgKiBza2lwcGVk IGJlZm9yZSB0aGUgc3RyaW5nIGVuZGVkLgorICovCitzdGF0aWMgaW5saW5lIHNpemVfdAorY2hh cjE2X2l0ZXJhdG9yX2FkdmFuY2VfbihjaGFyMTZfaXRlcmF0b3IgKml0ZXJhdG9yLCBzaXplX3Qg bikKK3sKKwlzaXplX3QJCWRpc3RhbmNlID0gMDsKKworCXdoaWxlIChuID4gMCAmJiBjaGFyMTZf aXRlcmF0b3JfaGFzX21vcmUoaXRlcmF0b3IpKQorCXsKKwkJY2hhcjE2X2l0ZXJhdG9yX2FkdmFu Y2UoaXRlcmF0b3IpOworCQlkaXN0YW5jZSsrOworCQluLS07CisJfQorCisJcmV0dXJuIGRpc3Rh bmNlOworfQorCisjZW5kaWYJCQkJCQkJLyogU1RSSU5HX0lURVJBVE9SX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL21iL3VuaWNvZGVfc3RyaW5ncy5oIGIvc3JjL2luY2x1ZGUvbWIvdW5p Y29kZV9zdHJpbmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg0 ZjZlZGJmYTgzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbWIvdW5pY29kZV9zdHJp bmdzLmgKQEAgLTAsMCArMSwyNTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHVuaWNv ZGVfc3RyaW5ncy5oCisgKgkgIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nIGFuZCBj b21wYXJpbmcgVW5pY29kZSBlbmNvZGluZ3MuCisgKgorICogTGltaXRlZCBzdXBwb3J0IGlzIGF2 YWlsYWJsZSBpbiBhbGwgZGF0YWJhc2UgZW5jb2RpbmdzLCBidXQgb25seSB0aGUgQVNDSUkKKyAq IG9yIExBVElOMSByYW5nZSB0aGF0IG1hcHMgZGlyZWN0bHkgdG8gVW5pY29kZS4KKyAqCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvbWIvdW5pY29k ZV9zdHJpbmdzLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBVTklDT0RF X1NUUklOR1NfSAorI2RlZmluZSBVTklDT0RFX1NUUklOR1NfSAorCisjaW5jbHVkZSAibWIvc3Ry aW5nX2l0ZXJhdG9yLmgiCisjaW5jbHVkZSAibWIvdW5pY29kZV90eXBlcy5oIgorCisvKgorICog Q29uc3RhbnRzIHVzZWQgZm9yIHdvcnN0LWNhc2UgYnVmZmVyIG1hbmFnZW1lbnQgZm9yIGNvbnZl cnNpb25zLiAgU2luZ2xlCisgKiBVVEYtMTYgY29kZXBvaW50cyBtYXAgdG8gMSwgMiBvciAzLWJ5 dGUgVVRGLTggc2VxdWVuY2VzIChiYXNpYyBwbGFuZSkuCisgKiBVVEYtMTYgc3Vycm9nYXRlIHBh aXJzIG1hcCB0byA0LWJ5dGUgVVRGLTggc2VxdWVuY2VzLCBidXQgdGhhdCB3b3JrcyBvdXQgdG8K KyAqIDIgYnl0ZXMgb2YgVVRGLTggcGVyIFVURi0xNiBjb2RlcG9pbnQuCisgKi8KKyNkZWZpbmUg TUFYX0NIQVIxNl9DT0RFUE9JTlRTX1BFUl9VVEY4X0JZVEUgMQorI2RlZmluZSBNQVhfQ0hBUjE2 X0NPREVQT0lOVFNfUEVSX1VURjhfQ0hBUiAyCisjZGVmaW5lIE1BWF9VVEY4X0xFTl9QRVJfQ0hB UjE2X0NPREVQT0lOVCAgIDMKKyNkZWZpbmUgTUFYX1VURjhfTEVOX1BFUl9DSEFSMzJfQ09ERVBP SU5UICAgNAorCisvKgorICogU2luY2Ugd2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgdHJhbnNj b2RpbmdzIG90aGVyIHRoYW4gQVNDSUkgYW5kIExBVElOMQorICogKHdoaWNoIGFyZSBzdHJpY3Qg c3Vic2V0cyBvZiBVbmljb2RlIGJ5IGRlZmluaXRpb24pLCB0aGUgY29ycmVzcG9uZGluZworICog dmFsdWVzIGZvciBvdGhlciBlbmNvZGluZ3MgYXJlIDEuICBXZSBzdGlsbCBkZWZpbmUgYW5kIHVz ZSB0aGVzZSBtb3JlCisgKiBnZW5lcmFsIG1hY3JvIG5hbWVzLCBpbiBhbnRpY2lwYXRpb24gb2Yg cG90ZW50aWFsIHRyYW5zY29kaW5nIHN1cHBvcnQuCisgKi8KKyNkZWZpbmUgTUFYX01CX0xFTl9Q RVJfQ0hBUjE2X0NPREVQT0lOVCAgIE1BWF9VVEY4X0xFTl9QRVJfQ0hBUjE2X0NPREVQT0lOVAor I2RlZmluZSBNQVhfTUJfTEVOX1BFUl9DSEFSMzJfQ09ERVBPSU5UICAgTUFYX1VURjhfTEVOX1BF Ul9DSEFSMzJfQ09ERVBPSU5UCisjZGVmaW5lIE1BWF9DSEFSMTZfQ09ERVBPSU5UU19QRVJfTUJf QllURSBNQVhfQ0hBUjE2X0NPREVQT0lOVFNfUEVSX1VURjhfQllURQorI2RlZmluZSBNQVhfQ0hB UjMyX0NPREVQT0lOVFNfUEVSX01CX0JZVEUgTUFYX0NIQVIzMl9DT0RFUE9JTlRTX1BFUl9VVEY4 X0JZVEUKKworLyoKKyAqIEhvdyBtYW55IFVURi0xNiBjb2RlcG9pbnRzIG1pZ2h0IHRoZSBnaXZl biBkYXRhYmFzZSBlbmNvZGluZyBzdHJpbmcgb2NjdXB5PworICogVE9ETzogQWxzbyBwcm92aWRl IGFuIF9leGFjdF9zaXplKCkgZnVuY3Rpb24/CisgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90Citt Yl90b19jaGFyMTZfbWF4X3NpemUoc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIHNpemUgKiBNQVhf Q0hBUjE2X0NPREVQT0lOVFNfUEVSX01CX0JZVEU7Cit9CisKKy8qCisgKiBIb3cgbWFueSBieXRl cyBvZiBkYXRhYmFzZSBlbmNvZGluZyBtaWdodCB0aGUgZ2l2ZW4gVVRGLTE2IHN0cmluZyBvY2N1 cHk/CisgKiBUT0RPOiBBbHNvIHByb3ZpZGUgYW4gX2V4YWN0X3NpemUoKSBmdW5jdGlvbj8KKyAq Lworc3RhdGljIGlubGluZSBzaXplX3QKK2NoYXIxNl90b19tYl9tYXhfc2l6ZShzaXplX3Qgc2l6 ZSkKK3sKKwlyZXR1cm4gc2l6ZSAqIE1BWF9NQl9MRU5fUEVSX0NIQVIxNl9DT0RFUE9JTlQ7Cit9 CisKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBzaXplX3QKK21iX3RvX2NoYXIx Nl9fdGVtcGxhdGUoc3RvcmFnZV9jaGFyMTZfdCAqZHN0LAorCQkJCQkgICBjb25zdCBjaGFyICpz cmMsIHNpemVfdCBzcmNfc2l6ZSwgaW50IHNyY19lbmNvZGluZywKKwkJCQkJICAgbWJfaXRlcmF0 b3Jfc3RvcmVfY2hhcjE2X2ZuIHN0b3JlX2NoYXIxNikKK3sKKwltYl9pdGVyYXRvciBpdGVyID0g TUJfSVRFUkFUT1JfSU5JVChzcmMsIHNyY19zaXplLCBzcmNfZW5jb2RpbmcpOworCXN0b3JhZ2Vf Y2hhcjE2X3QgKnAgPSBkc3Q7CisKKwl3aGlsZSAobWJfaXRlcmF0b3JfaGFzX21vcmUoJml0ZXIp KQorCQlwICs9IHN0b3JlX2NoYXIxNigmaXRlciwgcCk7CisKKwlyZXR1cm4gcCAtIGRzdDsKK30K KworI2RlZmluZSBHRU5FUkFURV9NQl9UT19DSEFSMTYoZW5jb2RpbmcpIFwKK3N0YXRpYyBpbmxp bmUgc2l6ZV90IFwKK21iX3RvX2NoYXIxNl9fIyNlbmNvZGluZyhzdG9yYWdlX2NoYXIxNl90ICpk c3QsIFwKKwkJCQkJCWNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY19zaXplLCBpbnQgc3JjX2Vu Y29kaW5nKSBcCit7IFwKKwlyZXR1cm4gbWJfdG9fY2hhcjE2X190ZW1wbGF0ZShkc3QsIHNyYywg c3JjX3NpemUsIHNyY19lbmNvZGluZywgXAorCQkJCQkJCQkgbWJfaXRlcmF0b3Jfc3RvcmVfY2hh cjE2X18jI2VuY29kaW5nKTsgXAorfQorR0VORVJBVEVfTUJfVE9fQ0hBUjE2KHV0ZjgpOworR0VO RVJBVEVfTUJfVE9fQ0hBUjE2KGxhdGluMSk7CitHRU5FUkFURV9NQl9UT19DSEFSMTYoYXNjaWkp OworCitzdGF0aWMgaW5saW5lIHNpemVfdAorbWJfdG9fY2hhcjE2KHN0b3JhZ2VfY2hhcjE2X3Qg KmRzdCwKKwkJCSBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNfc2l6ZSwgaW50IHNyY19lbmNv ZGluZykKK3sKKwlzd2l0Y2ggKHNyY19lbmNvZGluZykKKwl7CisJCWNhc2UgUEdfVVRGODoKKwkJ CXJldHVybiBtYl90b19jaGFyMTZfX3V0ZjgoZHN0LCBzcmMsIHNyY19zaXplLCBzcmNfZW5jb2Rp bmcpOworCQljYXNlIFBHX0xBVElOMToKKwkJCXJldHVybiBtYl90b19jaGFyMTZfX2xhdGluMShk c3QsIHNyYywgc3JjX3NpemUsIHNyY19lbmNvZGluZyk7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4g bWJfdG9fY2hhcjE2X19hc2NpaShkc3QsIHNyYywgc3JjX3NpemUsIHNyY19lbmNvZGluZyk7CisJ fQorfQorCitzdGF0aWMgaW5saW5lIHNpemVfdAorbG9jYWxfdG9fY2hhcjE2KHN0b3JhZ2VfY2hh cjE2X3QgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjX3NpemUpCit7CisJcmV0dXJu IG1iX3RvX2NoYXIxNihkc3QsIHNyYywgc3JjX3NpemUsIEdldERhdGFiYXNlRW5jb2RpbmcoKSk7 Cit9CisKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBzaXplX3QKK2NoYXIxNl90 b19tYl9fdGVtcGxhdGUoY2hhciAqZHN0LCBpbnQgZHN0X2VuY29kaW5nLAorCQkJCQkgICBjb25z dCBzdG9yYWdlX2NoYXIxNl90ICpzcmMsIHNpemVfdCBzcmNfc2l6ZSwKKwkJCQkJICAgY2hhcjE2 X2l0ZXJhdG9yX3N0b3JlX21iX2ZuIHN0b3JlX21iKQoreworCWNoYXIxNl9pdGVyYXRvciBpdGVy ID0gQ0hBUjE2X0lURVJBVE9SX0lOSVQoc3JjLCBzcmNfc2l6ZSk7CisJY2hhcgkgICAqcCA9IGRz dDsKKworCXdoaWxlIChjaGFyMTZfaXRlcmF0b3JfaGFzX21vcmUoJml0ZXIpKQorCQlwICs9IHN0 b3JlX21iKCZpdGVyLCBwLCBkc3RfZW5jb2RpbmcpOworCisJcmV0dXJuIHAgLSBkc3Q7Cit9CisK Ky8qCisgKiBUcnkgdG8gaW5saW5lIGNoYXIxNl9pdGVyYXRvcl9zdG9yZV9tYl9fWFhYIHNwZWNp YWxpemF0aW9ucyBpbnRvCisgKiBjaGFyMTZfdG9fbG9jYWxfX1hYWCBzcGVjaWFsaXphdGlvbnMu CisgKi8KKyNkZWZpbmUgR0VORVJBVEVfQ0hBUjE2X1RPX01CKGVuY29kaW5nKSBcCitzdGF0aWMg aW5saW5lIHNpemVfdCBcCitjaGFyMTZfdG9fbWJfXyMjZW5jb2RpbmcoY2hhciAqZHN0LCBpbnQg ZHN0X2VuY29kaW5nLCBcCisJCQkJCQljb25zdCBzdG9yYWdlX2NoYXIxNl90ICpzcmMsIHNpemVf dCBzcmNfc2l6ZSkgXAoreyBcCisJcmV0dXJuIGNoYXIxNl90b19tYl9fdGVtcGxhdGUoZHN0LCBk c3RfZW5jb2RpbmcsIHNyYywgc3JjX3NpemUsIFwKKwkJCQkJCQkJIGNoYXIxNl9pdGVyYXRvcl9z dG9yZV9tYl9fIyNlbmNvZGluZyk7IFwKK30KK0dFTkVSQVRFX0NIQVIxNl9UT19NQihhc2NpaSk7 CitHRU5FUkFURV9DSEFSMTZfVE9fTUIobGF0aW4xKTsKK0dFTkVSQVRFX0NIQVIxNl9UT19NQih1 dGY4KTsKKworc3RhdGljIGlubGluZSBzaXplX3QKK2NoYXIxNl90b19tYihjaGFyICpkc3QsIGlu dCBkc3RfZW5jb2RpbmcsCisJCQkgY29uc3Qgc3RvcmFnZV9jaGFyMTZfdCAqc3JjLCBzaXplX3Qg c3JjX3NpemUpCit7CisJc3dpdGNoIChkc3RfZW5jb2RpbmcpCisJeworCQljYXNlIFBHX1VURjg6 CisJCQlyZXR1cm4gY2hhcjE2X3RvX21iX191dGY4KGRzdCwgZHN0X2VuY29kaW5nLCBzcmMsIHNy Y19zaXplKTsKKwkJY2FzZSBQR19MQVRJTjE6CisJCQlyZXR1cm4gY2hhcjE2X3RvX21iX19sYXRp bjEoZHN0LCBkc3RfZW5jb2RpbmcsIHNyYywgc3JjX3NpemUpOworCQlkZWZhdWx0OgorCQkJcmV0 dXJuIGNoYXIxNl90b19tYl9fYXNjaWkoZHN0LCBkc3RfZW5jb2RpbmcsIHNyYywgc3JjX3NpemUp OworCX0KK30KKworc3RhdGljIGlubGluZSBzaXplX3QKK2NoYXIxNl90b19sb2NhbChjaGFyICpk c3QsIGNvbnN0IHN0b3JhZ2VfY2hhcjE2X3QgKnNyYywgc2l6ZV90IHNyY19zaXplKQoreworCXJl dHVybiBjaGFyMTZfdG9fbWIoZHN0LCBHZXREYXRhYmFzZUVuY29kaW5nKCksIHNyYywgc3JjX3Np emUpOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdAorY2hhcjE2X3RvX2xvY2FsX2NzdHIoY2hh ciAqZHN0LCBjb25zdCBzdG9yYWdlX2NoYXIxNl90ICpzcmMsIHNpemVfdCBzcmNfc2l6ZSkKK3sK KwlzaXplX3QJCXNpemUgPSBjaGFyMTZfdG9fbG9jYWwoZHN0LCBzcmMsIHNyY19zaXplKTsKKwor CWRzdFtzaXplXSA9IDA7CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBwZ19hdHRyaWJ1dGVf YWx3YXlzX2lubGluZSBpbnQKK2NoYXIxNl9tYl9jbXBfX3RlbXBsYXRlKGNvbnN0IHN0b3JhZ2Vf Y2hhcjE2X3QgKmRhdGExLCBzaXplX3Qgc2l6ZTEsCisJCQkJCQljb25zdCBjaGFyICpkYXRhMiwg c2l6ZV90IHNpemUyLCBpbnQgZW5jb2RpbmcyLAorCQkJCQkJbWJfaXRlcmF0b3JfbmV4dF9jaGFy MzJfdF9mbiBuZXh0X2NoYXIzMl90KQoreworCWNoYXIxNl9pdGVyYXRvciBpdGVyMSA9IENIQVIx Nl9JVEVSQVRPUl9JTklUKGRhdGExLCBzaXplMSk7CisJbWJfaXRlcmF0b3IgaXRlcjIgPSBNQl9J VEVSQVRPUl9JTklUKGRhdGEyLCBzaXplMiwgZW5jb2RpbmcyKTsKKworCXdoaWxlIChjaGFyMTZf aXRlcmF0b3JfaGFzX21vcmUoJml0ZXIxKSAmJgorCQkgICBtYl9pdGVyYXRvcl9oYXNfbW9yZSgm aXRlcjIpKQorCXsKKwkJY2hhcjMyX3QJY29kZXBvaW50MSA9IGNoYXIxNl9pdGVyYXRvcl9uZXh0 X2NoYXIzMl90KCZpdGVyMSk7CisJCWNoYXIzMl90CWNvZGVwb2ludDIgPSBuZXh0X2NoYXIzMl90 KCZpdGVyMik7CisKKwkJaWYgKGNvZGVwb2ludDEgPCBjb2RlcG9pbnQyKQorCQkJcmV0dXJuIC0x OworCQllbHNlIGlmIChjb2RlcG9pbnQxID4gY29kZXBvaW50MikKKwkJCXJldHVybiAxOworCX0K KworCWlmIChtYl9pdGVyYXRvcl9oYXNfbW9yZSgmaXRlcjIpKQorCQlyZXR1cm4gLTE7CisJZWxz ZSBpZiAoY2hhcjE2X2l0ZXJhdG9yX2hhc19tb3JlKCZpdGVyMSkpCisJCXJldHVybiAxOworCisJ cmV0dXJuIDA7Cit9CisKKy8qCisgKiBUcnkgdG8gaW5saW5lIGNoYXIxNl9pdGVyYXRvcl9zdG9y ZV9tYl9fWFhYIHNwZWNpYWxpemF0aW9ucyBpbnRvCisgKiBjaGFyMTZfbWJfY21wX19YWFggc3Bl Y2lhbGl6YXRpb25zLgorICovCisjZGVmaW5lIEdFTkVSQVRFX0NIQVIxNl9NQl9DTVAoZW5jb2Rp bmcpIFwKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IFwKK2NoYXIxNl9tYl9jbXBfXyMjZW5jb2Rpbmco Y29uc3Qgc3RvcmFnZV9jaGFyMTZfdCAqZGF0YTEsIHNpemVfdCBzaXplMSwgXAorCQkJCQkJIGNv bnN0IGNoYXIgKmRhdGEyLCBzaXplX3Qgc2l6ZTIsIGludCBlbmNvZGluZzIpIFwKK3sgXAorCXJl dHVybiBjaGFyMTZfbWJfY21wX190ZW1wbGF0ZShkYXRhMSwgc2l6ZTEsIGRhdGEyLCBzaXplMiwg ZW5jb2RpbmcyLCBcCisJCQkJCQkJCSAgbWJfaXRlcmF0b3JfbmV4dF9jaGFyMzJfdF9fIyNlbmNv ZGluZyk7IFwKK30KK0dFTkVSQVRFX0NIQVIxNl9NQl9DTVAoYXNjaWkpOworR0VORVJBVEVfQ0hB UjE2X01CX0NNUChsYXRpbjEpOworR0VORVJBVEVfQ0hBUjE2X01CX0NNUCh1dGY4KTsKKworc3Rh dGljIGlubGluZSBpbnQKK2NoYXIxNl9tYl9jbXAoY29uc3Qgc3RvcmFnZV9jaGFyMTZfdCAqZGF0 YTEsIHNpemVfdCBzaXplMSwKKwkJCSAgY29uc3QgY2hhciAqZGF0YTIsIHNpemVfdCBzaXplMiwg aW50IGVuY29kaW5nMikKK3sKKwlzd2l0Y2ggKGVuY29kaW5nMikKKwl7CisJCWNhc2UgUEdfVVRG ODoKKwkJCXJldHVybiBjaGFyMTZfbWJfY21wX191dGY4KGRhdGExLCBzaXplMSwgZGF0YTIsIHNp emUyLCBlbmNvZGluZzIpOworCQljYXNlIFBHX0xBVElOMToKKwkJCXJldHVybiBjaGFyMTZfbWJf Y21wX19sYXRpbjEoZGF0YTEsIHNpemUxLCBkYXRhMiwgc2l6ZTIsIGVuY29kaW5nMik7CisJCWRl ZmF1bHQ6CisJCQlyZXR1cm4gY2hhcjE2X21iX2NtcF9fYXNjaWkoZGF0YTEsIHNpemUxLCBkYXRh Miwgc2l6ZTIsIGVuY29kaW5nMik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludAorbWJfY2hh cjE2X2NtcChjb25zdCBjaGFyICpkYXRhMSwgc2l6ZV90IHNpemUxLCBpbnQgZW5jb2RpbmcxLAor CQkJICBjb25zdCBzdG9yYWdlX2NoYXIxNl90ICpkYXRhMiwgc2l6ZV90IHNpemUyKQoreworCWlu dAkJCXJlc3VsdCA9IGNoYXIxNl9tYl9jbXAoZGF0YTIsIHNpemUyLCBkYXRhMSwgc2l6ZTEsIGVu Y29kaW5nMSk7CisKKwlJTlZFUlRfQ09NUEFSRV9SRVNVTFQocmVzdWx0KTsKKwlyZXR1cm4gcmVz dWx0OworfQorCitzdGF0aWMgaW5saW5lIGludAorY2hhcjE2X2xvY2FsX2NtcChjb25zdCBzdG9y YWdlX2NoYXIxNl90ICpkYXRhMSwgc2l6ZV90IHNpemUxLAorCQkJCSBjb25zdCBjaGFyICpkYXRh Miwgc2l6ZV90IHNpemUyKQoreworCXJldHVybiBjaGFyMTZfbWJfY21wKGRhdGExLCBzaXplMSwg ZGF0YTIsIHNpemUyLCBHZXREYXRhYmFzZUVuY29kaW5nKCkpOworfQorCitzdGF0aWMgaW5saW5l IGludAorbG9jYWxfY2hhcjE2X2NtcChjb25zdCBjaGFyICpkYXRhMSwgc2l6ZV90IHNpemUxLAor CQkJCSBjb25zdCBzdG9yYWdlX2NoYXIxNl90ICpkYXRhMiwgc2l6ZV90IHNpemUyKQoreworCXJl dHVybiBtYl9jaGFyMTZfY21wKGRhdGExLCBzaXplMSwgR2V0RGF0YWJhc2VFbmNvZGluZygpLCBk YXRhMiwgc2l6ZTIpOworfQorCisjZW5kaWYJCQkJCQkJLyogVU5JQ09ERV9TVFJJTkdTX0ggKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21iL3VuaWNvZGVfdHlwZXMuaCBiL3NyYy9pbmNsdWRl L21iL3VuaWNvZGVfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uZTZlODUwMjkyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9tYi91bmljb2Rl X3R5cGVzLmgKQEAgLTAsMCArMSw2MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdW5p Y29kZV90eXBlcy5oCisgKgkgIFR5cGVzIGZvciByZXByZXNlbnRpbmcgVW5pY29kZS4KKyAqCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBv ZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvbWIvdW5p Y29kZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgVU5JQ09ERV9UWVBF U19ICisjZGVmaW5lIFVOSUNPREVfVFlQRVNfSAorCisvKgorICogVGhlIHR5cGUgdXNlZCB0byBy ZXByZXNlbnQgVVRGLTE2IGNvZGVwb2ludHMgaW4gdmFybGVuYSBvYmplY3RzLiAgQWxsCisgKiBh Y2Nlc3MgdG8gc3RvcmFnZV9jaGFyMTZfdCBhbmQga25vd2xlZGdlIG9mIGl0cyBsYXlvdXQgc2hv dWxkIGJlIGNvbnRhaW5lZAorICogaW4gdGhpcyBmaWxlLgorICovCit0eXBlZGVmIHN0cnVjdCBz dG9yYWdlX2NoYXIxNl90Cit7CisJdWludDhfdAkJaGlnaDsKKwl1aW50OF90CQlsb3c7Cit9IHN0 b3JhZ2VfY2hhcjE2X3Q7CisKK3N0YXRpY19hc3NlcnQoYWxpZ25vZihzdG9yYWdlX2NoYXIxNl90 KSA9PSAxLCAiYmFkIGFsaWdubWVudCBmb3IgdmFybGVuYSIpOworc3RhdGljX2Fzc2VydChzaXpl b2Yoc3RvcmFnZV9jaGFyMTZfdCkgPT0gc2l6ZW9mKGNoYXIxNl90KSwgImJhZCBzaXplIik7CisK Ky8qIFJlYWQgY2hhcjE2X3QgZnJvbSBzdG9yYWdlX2NoYXIxNl90LiAqLworc3RhdGljIGlubGlu ZSBjaGFyMTZfdAorY2hhcjE2X2xvYWQoY29uc3Qgc3RvcmFnZV9jaGFyMTZfdCAqcykKK3sKKwly ZXR1cm4gKHMtPmhpZ2ggPDwgOCkgfCBzLT5sb3c7Cit9CisKKy8qIFdyaXRlIGNoYXIxNl90IHRv IHN0b3JhZ2VfY2hhcjE2X3QuICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2NoYXIxNl9zdG9yZShz dG9yYWdlX2NoYXIxNl90ICpzLCBjaGFyMTZfdCBjKQoreworCXMtPmhpZ2ggPSBjID4+IDg7CisJ cy0+bG93ID0gYzsKK30KKworLyogQ29kZXBvaW50IG9yZGVyIG9mIHR3byBzdG9yYWdlX2NoYXIx Nl90IHN0cmluZ3Mgb2YgZXF1YWwgc2l6ZS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50CitjaGFyMTZf Y21wMShjb25zdCBzdG9yYWdlX2NoYXIxNl90ICpzMSwKKwkJCWNvbnN0IHN0b3JhZ2VfY2hhcjE2 X3QgKnMyLAorCQkJc2l6ZV90IHNpemUpCit7CisJLyogRmFzdCBiaW5hcnkgY29tcGFyaXNvbiwg bW90aXZhdGluZyBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9uLiAqLworCXJldHVybiBtZW1jbXAo czEsIHMyLCBzaXplb2Yoc3RvcmFnZV9jaGFyMTZfdCkgKiBzaXplKTsKK30KKworLyogVGVsbCBJ Q1UncyBVQ2hhckl0ZXJhdG9yIGhvdyB0byByZWFkIGZyb20gc3RvcmFnZV9jaGFyMTZfdCBmb3Jt YXQuICovCisjZGVmaW5lIFVJVEVSX1NFVF9TVE9SQUdFX0NIQVJfVChpdGVyYXRvciwgcywgc2l6 ZSkgXAorCXVpdGVyX3NldFVURjE2QkUoKGl0ZXJhdG9yKSwgXAorCQkJCQkgKGNvbnN0IGNoYXIg KikgKHMpLCBcCisJCQkJCSAoc2l6ZSkgKiBzaXplb2Yoc3RvcmFnZV9jaGFyMTZfdCkpCisKKyNl bmRpZgkJCQkJCQkvKiBVTklDT0RFX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL3BnX2xvY2FsZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKaW5kZXgg NDQ0MzUwYmI4MDMuLmU0NjhlNTdlMzU4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9w Z19sb2NhbGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaApAQCAtMTMsNiAr MTMsNyBAQAogI2RlZmluZSBfUEdfTE9DQUxFXwogCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIK KyNpbmNsdWRlICJtYi91bmljb2RlX3R5cGVzLmgiCiAKIC8qIHVzZSBmb3IgbGliYyBsb2NhbGUg bmFtZXMgKi8KICNkZWZpbmUgTE9DQUxFX05BTUVfQlVGTEVOIDEyOApAQCAtNjcsNiArNjgsMTYg QEAgc3RydWN0IGNvbGxhdGVfbWV0aG9kcwogCQkJCQkJCSBjb25zdCBjaGFyICphcmcyLCBzc2l6 ZV90IGxlbjIsCiAJCQkJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSk7CiAKKwkvKiBvcHRpb25hbCAq LworCWludAkJCSgqc3RybmNvbGxfY2hhcjE2KSAoY29uc3Qgc3RvcmFnZV9jaGFyMTZfdCAqYXJn MSwgc2l6ZV90IGxlbjEsCisJCQkJCQkJCQljb25zdCBzdG9yYWdlX2NoYXIxNl90ICphcmcyLCBz aXplX3QgbGVuMiwKKwkJCQkJCQkJCXBnX2xvY2FsZV90IGxvY2FsZSk7CisKKwkvKiBvcHRpb25h bCAqLworCWludAkJCSgqc3RybmNvbGxfY2hhcjE2X2xvY2FsKSAoY29uc3Qgc3RvcmFnZV9jaGFy MTZfdCAqYXJnMSwgc2l6ZV90IGxlbjEsCisJCQkJCQkJCQkJICBjb25zdCBjaGFyICphcmcyLCBz aXplX3QgbGVuMiwKKwkJCQkJCQkJCQkgIHBnX2xvY2FsZV90IGxvY2FsZSk7CisKIAkvKiByZXF1 aXJlZCAqLwogCXNpemVfdAkJKCpzdHJueGZybSkgKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6 ZSwKIAkJCQkJCQkgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKQEAgLTE4OCw2ICsx OTksMTUgQEAgZXh0ZXJuIHNpemVfdCBwZ19kb3duY2FzZV9pZGVudChjaGFyICpkc3QsIHNpemVf dCBkc3RzaXplLAogZXh0ZXJuIGludAlwZ19zdHJjb2xsKGNvbnN0IGNoYXIgKmFyZzEsIGNvbnN0 IGNoYXIgKmFyZzIsIHBnX2xvY2FsZV90IGxvY2FsZSk7CiBleHRlcm4gaW50CXBnX3N0cm5jb2xs KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwKIAkJCQkJCWNvbnN0IGNoYXIgKmFyZzIs IHNzaXplX3QgbGVuMiwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKK2V4dGVybiBpbnQJcGdfc3RybmNv bGxfY2hhcjE2KGNvbnN0IHN0b3JhZ2VfY2hhcjE2X3QgKmRhdGExLCBzaXplX3Qgc2l6ZTEsCisJ CQkJCQkJICAgY29uc3Qgc3RvcmFnZV9jaGFyMTZfdCAqZGF0YTIsIHNpemVfdCBzaXplMiwKKwkJ CQkJCQkgICBwZ19sb2NhbGVfdCBsb2NhbGUpOworZXh0ZXJuIGludAlwZ19zdHJuY29sbF9jaGFy MTZfbG9jYWwoY29uc3Qgc3RvcmFnZV9jaGFyMTZfdCAqZGF0YTEsIHNpemVfdCBzaXplMSwKKwkJ CQkJCQkJCSBjb25zdCBjaGFyICpkYXRhMiwgc2l6ZV90IHNpemUyLAorCQkJCQkJCQkJIHBnX2xv Y2FsZV90IGxvY2FsZSk7CitleHRlcm4gaW50CXBnX3N0cm5jb2xsX2xvY2FsX2NoYXIxNihjb25z dCBjaGFyICpkYXRhMSwgc2l6ZV90IHNpemUxLAorCQkJCQkJCQkJIGNvbnN0IHN0b3JhZ2VfY2hh cjE2X3QgKmRhdGEyLCBzaXplX3Qgc2l6ZTIsCisJCQkJCQkJCQkgcGdfbG9jYWxlX3QgbG9jYWxl KTsKIGV4dGVybiBib29sIHBnX3N0cnhmcm1fZW5hYmxlZChwZ19sb2NhbGVfdCBsb2NhbGUpOwog ZXh0ZXJuIHNpemVfdCBwZ19zdHJ4ZnJtKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6 ZV90IGRlc3RzaXplLAogCQkJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSk7CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VuY29kaW5nLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvZW5jb2Rpbmcub3V0CmluZGV4IDJlY2QyNTVmMTgyLi40MjIyZjAxYzY3NSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lbmNvZGluZy5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lbmNvZGluZy5vdXQKQEAgLTgsOCArOCwxMiBAQCBTRUxF Q1QgZ2V0ZGF0YWJhc2VlbmNvZGluZygpIDw+ICdVVEY4JyBBUyBza2lwX3Rlc3QgXGdzZXQKIFxz ZXQgcmVncmVzc2xpYiA6bGliZGlyICcvcmVncmVzcycgOmRsc3VmZml4CiBDUkVBVEUgRlVOQ1RJ T04gdGVzdF9ieXRlYV90b190ZXh0KGJ5dGVhKSBSRVRVUk5TIHRleHQKICAgICBBUyA6J3JlZ3Jl c3NsaWInIExBTkdVQUdFIEMgU1RSSUNUOworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYnl0ZWFfdG9f dXRmMTYoYnl0ZWEpIFJFVFVSTlMgdXRmMTYKKyAgICBBUyA6J3JlZ3Jlc3NsaWInIExBTkdVQUdF IEMgU1RSSUNUOwogQ1JFQVRFIEZVTkNUSU9OIHRlc3RfdGV4dF90b19ieXRlYSh0ZXh0KSBSRVRV Uk5TIGJ5dGVhCiAgICAgQVMgOidyZWdyZXNzbGliJyBMQU5HVUFHRSBDIFNUUklDVDsKK0NSRUFU RSBGVU5DVElPTiB0ZXN0X3V0ZjE2X3RvX2J5dGVhKHRleHQpIFJFVFVSTlMgYnl0ZWEKKyAgICBB UyA6J3JlZ3Jlc3NsaWInIExBTkdVQUdFIEMgU1RSSUNUOwogQ1JFQVRFIEZVTkNUSU9OIHRlc3Rf bWJsZW5fZnVuYyh0ZXh0LCB0ZXh0LCB0ZXh0LCBpbnQpIFJFVFVSTlMgaW50CiAgICAgQVMgOidy ZWdyZXNzbGliJyBMQU5HVUFHRSBDIFNUUklDVDsKIENSRUFURSBGVU5DVElPTiB0ZXN0X3RleHRf dG9fd2NoYXJzKHRleHQsIHRleHQpIFJFVFVSTlMgaW50W10KQEAgLTQwMSw2ICs0MDUsMzIgQEAg U0VMRUNUIFNVQlNUUklORyhjIEZST00gMzAwMCBGT1IgMSkgRlJPTSB0b2FzdF80Yl91dGY4Owog IPCfmoAKICgxIHJvdykKIAorLS0gc3RvcmFnZSBmb3JtYXQgb2YgVVRGLTE2IGlzIGJpZy1lbmRp YW4gZXZlbiBvbiBsaXR0bGUtZW5kaWFuIHN5c3RlbQorU0VMRUNUIHRlc3RfYnl0ZWFfdG9fdXRm MTYoJ1x4MDA0MScpID0gJ0EnOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykK KworLS0gb2RkIG51bWJlciBvZiBieXRlcyAoY29ycnVwdGVkIHN0b3JhZ2UpLCB0cmFpbGluZyBi eXRlIGlnbm9yZWQKK1NFTEVDVCB0ZXN0X2J5dGVhX3RvX3V0ZjE2KCdceDAwNDEwMCcpID0gJ0En OworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworU0VMRUNUIHRlc3RfYnl0 ZWFfdG9fdXRmMTYoJ1x4MDA0MTAwJyk7CisgdGVzdF9ieXRlYV90b191dGYxNiAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEEKKygxIHJvdykKKworLS0gaW5jb21wbGV0ZSBzdXJyb2dhdGUgcGFp cgorU0VMRUNUIHRlc3RfYnl0ZWFfdG9fdXRmMTYoJ1x4ZDgzZCcpOworRVJST1I6ICBpbnZhbGlk IFVURi0xNiBzZXF1ZW5jZSAweGQ4M2QKKy0tIGJhZCBzZWNvbmQgY29kZXBvaW50IGluIHN1cnJv Z2F0ZSBwYWlyCitTRUxFQ1QgdGVzdF9ieXRlYV90b191dGYxNignXHhkODNkYmVlZicpOworRVJS T1I6ICBpbnZhbGlkIFVURi0xNiBzZXF1ZW5jZSAweGQ4M2QgMHhiZWVmCiBEUk9QIFRBQkxFIGVu Y29kaW5nX3Rlc3RzOwogRFJPUCBUQUJMRSB0b2FzdF80Yl91dGY4OwogRFJPUCBGVU5DVElPTiB0 ZXN0X2VuY29kaW5nOwpAQCAtNDA5LDcgKzQzOSw5IEBAIERST1AgRlVOQ1RJT04gdGVzdF90ZXh0 X3RvX3djaGFyczsKIERST1AgRlVOQ1RJT04gdGVzdF92YWxpZF9zZXJ2ZXJfZW5jb2Rpbmc7CiBE Uk9QIEZVTkNUSU9OIHRlc3RfbWJsZW5fZnVuYzsKIERST1AgRlVOQ1RJT04gdGVzdF9ieXRlYV90 b190ZXh0OworRFJPUCBGVU5DVElPTiB0ZXN0X2J5dGVhX3RvX3V0ZjE2OwogRFJPUCBGVU5DVElP TiB0ZXN0X3RleHRfdG9fYnl0ZWE7CitEUk9QIEZVTkNUSU9OIHRlc3RfdXRmMTZfdG9fYnl0ZWE7 CiAtLSBzdWJzdHJpbmcgc2xvdyBwYXRoOiBtdWx0aS1ieXRlIGVzY2FwZSBjaGFyIHZzLiBtdWx0 aS1ieXRlIHBhdHRlcm4gY2hhci4KIFNFTEVDVCBTVUJTVFJJTkcoJ2EnIFNJTUlMQVIgVSYnXDAw QUMnIEVTQ0FQRSBVJidcMDBBNycpOwogIHN1YnN0cmluZyAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvdHlwZV9zYW5pdHkub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC90eXBlX3Nhbml0eS5vdXQKaW5kZXggMWQyMWQzZWI0NDYuLjMzOTFjMTk4NGEwIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3R5cGVfc2FuaXR5Lm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3R5cGVfc2FuaXR5Lm91dApAQCAtNzUxLDYgKzc1MSw3 IEBAIENSRUFURSBUQUJMRSB0YWJfY29yZV90eXBlcyBBUyBTRUxFQ1QKICAgJ2FiYyc6OnZhcmNo YXIsCiAgICduYW1lJzo6bmFtZSwKICAgJ3R4dCc6OnRleHQsCisgICd1dGYxNic6OnV0ZjE2LAog ICB0cnVlOjpib29sLAogICBFJ1xceERFQURCRUVGJzo6Ynl0ZWEsCiAgIEInMTAwMDEnOjpiaXQs CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VuaWNvZGUub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC91bmljb2RlLm91dAppbmRleCAxZTA2ZGUyMjY0OS4uNGI3 NjFlZWM2ZTkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdW5pY29kZS5v dXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91bmljb2RlLm91dApAQCAtMTA1LDMg KzEwNSwxMzcgQEAgT1JERVIgQlkgbnVtOwogCiBTRUxFQ1QgaXNfbm9ybWFsaXplZCgnYWJjJywg J2RlZicpOyAgLS0gcnVuLXRpbWUgZXJyb3IKIEVSUk9SOiAgaW52YWxpZCBub3JtYWxpemF0aW9u IGZvcm06IGRlZgorLS0gSW50ZXJlc3RpbmcgdGhyZXNob2xkcyBmb3IgVVRGLTggYW5kIFVURi0x NiBlbmNvZGluZworV0lUSCBvY3RldF9sZW5ndGhfdGhyZXNob2xkcyh0LCBkZXNjcmlwdGlvbikg QVMgKFZBTFVFUworICAoVSYnXCswMDAwMDEnLCAnRmlyc3QgMS1ieXRlIFVURi04IHNlcXVlbmNl IHN1cHBvcnRlZCBieSBQb3N0Z3JlU1FMJyksCisgIChVJidcKzAwMDA3RicsICdGaW5hbCAxLWJ5 dGUgVVRGLTggc2VxdWVuY2UnKSwKKyAgKFUmJ1wrMDAwMDgwJywgJ0ZpcnN0IDItYnl0ZSBVVEYt OCBzZXF1ZW5jZScpLAorICAoVSYnXCswMDA3RkYnLCAnRmluYWwgMi1ieXRlIFVURi04IHNlcXVl bmNlJyksCisgIChVJidcKzAwMDgwMCcsICdGaXJzdCAzLWJ5dGUgVVRGLTggc2VxdWVuY2UnKSwK KyAgKFUmJ1wrMDBGRkZGJywgJ0ZpbmFsIDMtYnl0ZSBVVEYtOCBzZXF1ZW5jZSAoZW5kIG9mIEJN UCknKSwKKyAgKFUmJ1wrMDEwMDAwJywgJ0ZpcnN0IDQtYnl0ZSBVVEYtOCBzZXF1ZW5jZSwgVVRG LTE2IHBhaXInKSwKKyAgKFUmJ1wrMTBGRkZGJywgJ0ZpbmFsIHZhbGlkIGNvZGVwb2ludCcpKQor U0VMRUNUIHRvX2hleChhc2NpaSh0KSksCisgICAgICAgZGVzY3JpcHRpb24sCisgICAgICAgb2N0 ZXRfbGVuZ3RoKHQ6OnRleHQpIEFTIHV0Zjhfb2N0ZXRzLAorICAgICAgIG9jdGV0X2xlbmd0aCh0 Ojp1dGYxNikgQVMgdXRmMTZfb2N0ZXRzLAorICAgICAgIGxlbmd0aCh0Ojp0ZXh0KSBBUyB1dGY4 X2xlbmd0aCwKKyAgICAgICBsZW5ndGgodDo6dXRmMTYpIEFTIHV0ZjE2X2xlbmd0aAorRlJPTSBv Y3RldF9sZW5ndGhfdGhyZXNob2xkczsKKyB0b19oZXggfCAgICAgICAgICAgICAgICAgICAgIGRl c2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgfCB1dGY4X29jdGV0cyB8IHV0ZjE2X29jdGV0 cyB8IHV0ZjhfbGVuZ3RoIHwgdXRmMTZfbGVuZ3RoIAorLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tCisgMSAgICAgIHwgRmlyc3Qg MS1ieXRlIFVURi04IHNlcXVlbmNlIHN1cHBvcnRlZCBieSBQb3N0Z3JlU1FMIHwgICAgICAgICAg IDEgfCAgICAgICAgICAgIDIgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgMQorIDdmICAgICB8 IEZpbmFsIDEtYnl0ZSBVVEYtOCBzZXF1ZW5jZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg ICAgICAgICAxIHwgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgIDEKKyA4 MCAgICAgfCBGaXJzdCAyLWJ5dGUgVVRGLTggc2VxdWVuY2UgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAgICAgICAgMiB8ICAgICAgICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAg ICAxCisgN2ZmICAgIHwgRmluYWwgMi1ieXRlIFVURi04IHNlcXVlbmNlICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgICAgICAgIDIgfCAgICAgICAgICAgIDIgfCAgICAgICAgICAgMSB8ICAg ICAgICAgICAgMQorIDgwMCAgICB8IEZpcnN0IDMtYnl0ZSBVVEYtOCBzZXF1ZW5jZSAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAzIHwgICAgICAgICAgICAyIHwgICAgICAgICAg IDEgfCAgICAgICAgICAgIDEKKyBmZmZmICAgfCBGaW5hbCAzLWJ5dGUgVVRGLTggc2VxdWVuY2Ug KGVuZCBvZiBCTVApICAgICAgICAgICAgfCAgICAgICAgICAgMyB8ICAgICAgICAgICAgMiB8ICAg ICAgICAgICAxIHwgICAgICAgICAgICAxCisgMTAwMDAgIHwgRmlyc3QgNC1ieXRlIFVURi04IHNl cXVlbmNlLCBVVEYtMTYgcGFpciAgICAgICAgICAgIHwgICAgICAgICAgIDQgfCAgICAgICAgICAg IDQgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgMQorIDEwZmZmZiB8IEZpbmFsIHZhbGlkIGNv ZGVwb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICA0IHwgICAg ICAgICAgICA0IHwgICAgICAgICAgIDEgfCAgICAgICAgICAgIDEKKyg4IHJvd3MpCisKKy0tIE91 dCBvZiByYW5nZSBjb2RlcG9pbnRzCitTRUxFQ1QgVSYnXCswMDAwMDAnOworRVJST1I6ICBpbnZh bGlkIFVuaWNvZGUgZXNjYXBlIHZhbHVlCitMSU5FIDE6IFNFTEVDVCBVJidcKzAwMDAwMCc7Cisg ICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgVSYnXCsxMTAwMDAnOworRVJST1I6ICBpbnZhbGlk IFVuaWNvZGUgZXNjYXBlIHZhbHVlCitMSU5FIDE6IFNFTEVDVCBVJidcKzExMDAwMCc7CisgICAg ICAgICAgICAgICAgICBeCitDUkVBVEUgRlVOQ1RJT04gY2hlY2tfdGV4dF9vcChsZWZ0X3N0cmlu ZyB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdF90eXBlIHRleHQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodF9zdHJpbmcgdGV4dCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0X3R5cGUgdGV4dCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9wIHRleHQpCitSRVRVUk5TIGJvb2xlYW4KK0xBTkdVQUdFIHBscGdzcWwK K0FTCiskJAorREVDTEFSRQorICBmb3JtYXQgdGV4dDsKKyAgdGV4dF9lIHRleHQ7CisgIHRleHRf aSBpbnQ7CisgIHRleHRfYiBib29sZWFuOworICB0ZXN0X2UgdGV4dDsKKyAgdGVzdF9pIGludDsK KyAgdGVzdF9iIGJvb2xlYW47CitCRUdJTgorICAtLSBhbGwgY3Jvc3MtdHlwZSByZXN1bHRzIGFn YWluc3QgdGV4dCwgdGV4dAorICBJRiBvcCA9ICdjbXAnIFRIRU4KKyAgICBmb3JtYXQgOj0gJyVz JXNjbXAoJyclcycnOjolcywgJyclcycnOjolcyknOworICAgIHRleHRfZSA6PSBmb3JtYXQoZm9y bWF0LCAnYnR0ZXh0JywgJycsIGxlZnRfc3RyaW5nLCAndGV4dCcsIHJpZ2h0X3N0cmluZywgJ3Rl eHQnKTsKKyAgICBFWEVDVVRFIGZvcm1hdCgnU0VMRUNUIHNpZ24oJXMpJywgdGV4dF9lKSBJTlRP IHRleHRfaTsKKyAgICB0ZXN0X2UgOj0gZm9ybWF0KGZvcm1hdCwgbGVmdF90eXBlLCBDQVNFIFdI RU4gbGVmdF90eXBlID0gcmlnaHRfdHlwZSBUSEVOICcnIEVMU0UgcmlnaHRfdHlwZSBFTkQsIGxl ZnRfc3RyaW5nLCBsZWZ0X3R5cGUsIHJpZ2h0X3N0cmluZywgcmlnaHRfdHlwZSk7CisgICAgRVhF Q1VURSBmb3JtYXQoJ1NFTEVDVCBzaWduKCVzKScsIHRlc3RfZSkgSU5UTyB0ZXN0X2k7CisgICAg SUYgdGVzdF9pIDw+IHRleHRfaSBUSEVOCisgICAgICBSQUlTRSBOT1RJQ0UgJyUgLT4gJSwgYnV0 ICUgLT4gJScsIHRleHRfZSwgdGV4dF9pLCB0ZXN0X2UsIHRlc3RfaTsKKyAgICBFTkQgSUY7Cisg IEVMU0UKKyAgICBmb3JtYXQgOj0gJycnJXMnJzo6JXMgJXMgJyclcycnOjolcyc7CisgICAgdGV4 dF9lIDo9IGZvcm1hdChmb3JtYXQsIGxlZnRfc3RyaW5nLCAndGV4dCcsIG9wLCByaWdodF9zdHJp bmcsICd0ZXh0Jyk7CisgICAgRVhFQ1VURSBmb3JtYXQoJ1NFTEVDVCAlcycsIHRleHRfZSkgSU5U TyB0ZXh0X2I7CisgICAgdGVzdF9lIDo9IGZvcm1hdChmb3JtYXQsIGxlZnRfc3RyaW5nLCBsZWZ0 X3R5cGUsIG9wLCByaWdodF9zdHJpbmcsIHJpZ2h0X3R5cGUpOworICAgIEVYRUNVVEUgZm9ybWF0 KCdTRUxFQ1QgJXMnLCB0ZXN0X2UpIElOVE8gdGVzdF9iOworICAgIElGIHRlc3RfYiA8PiB0ZXh0 X2IgVEhFTgorICAgICAgUkFJU0UgTk9USUNFICclIC0+ICUsIGJ1dCAlIC0+ICUnLCB0ZXh0X2Us IHRleHRfYiwgdGVzdF9lLCB0ZXN0X2I7CisgICAgRU5EIElGOworICBFTkQgSUY7CisgIFJFVFVS TiB0cnVlOworRU5EOworJCQ7CitXSVRIIHN0cmluZ3MgKHMpIEFTIChWQUxVRVMgKCdhJyksICgn YWEnKSwgKCdhYWEnKSksCisgICAgIG9wcyAobykgICAgIEFTIChWQUxVRVMgKCc8JyksICgnPD0n KSwgKCc9JyksICgnPD4nKSwgKCc+PScpLCAoJz4nKSwgKCdjbXAnKSksCisgICAgIHR5cGVzICh0 KSAgIEFTIChWQUxVRVMgKCd0ZXh0JyksICgnbmFtZScpLCAoJ3V0ZjE2JykpCitTRUxFQ1QgY291 bnQoY2hlY2tfdGV4dF9vcChsZWZ0X3N0cmluZy5zLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGVmdF90eXBlLnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodF9zdHJpbmcu cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0X3R5cGUudCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9wLm8pKQorRlJPTSAgICAgICBzdHJpbmdzIGxlZnRfc3RyaW5nCitD Uk9TUyBKT0lOIHN0cmluZ3MgcmlnaHRfc3RyaW5nCitDUk9TUyBKT0lOIHR5cGVzICAgbGVmdF90 eXBlCitDUk9TUyBKT0lOIHR5cGVzICAgcmlnaHRfdHlwZQorQ1JPU1MgSk9JTiBvcHMgICAgIG9w CitXSEVSRSBsZWZ0X3R5cGUudCA9ICd1dGYxNicgT1IgcmlnaHRfdHlwZS50ID0gJ3V0ZjE2JzsK KyBjb3VudCAKKy0tLS0tLS0KKyAgIDMxNQorKDEgcm93KQorCitXSVRIIGV4YW1wbGVzKGxhbmd1 YWdlLCBzdHJpbmcpIEFTCisoVkFMVUVTCisgICgnRW5nbGlzaCcsICAnSW4gYSBob2xlIGluIHRo ZSBncm91bmQgdGhlcmUgbGl2ZWQgYSBob2JiaXQuJyksCisgICgnU3BhbmlzaCcsICAnRW4gdW4g YWd1amVybyBlbiBlbCBzdWVsbywgdml2w61hIHVuIGhvYmJpdC4nKSwKKyAgKCdSdXNzaWFuJywg ICfQkiDQvdC+0YDQtSDQv9C+0LQg0LfQtdC80LvQtdC5INC20LjQuy3QsdGL0Lsg0YXQvtCx0LHQ uNGCLicpLAorICAoJ0FyYWJpYycsICAgJ9mD2KfZhiDZiti52YrYtCDZh9mI2KjZitiqINmB2Yog 2K3Zgdix2Kkg2YHZiiDYp9mE2KPYsdi2LicpLAorICAoJ0hlYnJldycsICAgJ9eR16rXldeaINeX 15XXqCDXkdeQ15PXnteUINeX15kg15TXldeR15nXmC4nKSwKKyAgKCdHcmVlaycsICAgICfOo861 IM68zrnOsSDPhM+Bz43PgM6xIM+Dz4TOvyDOrc60zrHPhs6/z4IgzrbOv8+Nz4POtSDOrc69zrEg z4fPjM68z4DOuc+ELicpLAorICAoJ0tvcmVhbicsICAgJ+uVheyGjSDslrTripAg6rWs66mN7JeQ IO2VnCDtmLjruZfsnbQg7IK06rOgIOyeiOyXiOuLpC4nKSwKKyAgKCdIaW5kaScsICAgICfgpJzg pK7gpYDgpKgg4KSu4KWH4KSCIOCkrOCkqOClhyDgpI/gpJUg4KSX4KSh4KWN4KSi4KWHIOCkruCl h+CkgiDgpI/gpJUg4KS54KWJ4KSs4KS/4KSfIOCksOCkueCkpOCkviDgpKXgpL7gpaQnKSwKKyAg KCdUYW1pbCcsICAgICfgroXgrqjgr43grqQg4K6o4K6/4K6y4K6k4K+N4K6k4K6/4K6y4K+NIOCu kuCusOCvgSDgrqTgr4HgrrPgr4jgrq/grr/grrLgr40g4K6S4K6w4K+BIOCuueCuvuCuquCuv+Cu n+CvjSDgrrXgrprgrr/grqTgr43grqTgr4Eg4K614K6o4K+N4K6k4K6k4K+BLicpLAorICAoJ0No aW5lc2UnLCAgJ+WcqOWcsOS4i+S4gOS4qua0numHjO+8jOS9j+edgOS4gOS4qumcjeavlOeJueS6 uuOAgicpLAorICAoJ0phcGFuZXNlJywgJ+eptOOBruOBquOBi+OBq+OAgeOBsuOBqOOCiuOBruOD m+ODk+ODg+ODiOOBjOaaruOCieOBl+OBpuOBhOOBn+OAgicpKQorU0VMRUNUIGxhbmd1YWdlLAor ICAgICAgIG9jdGV0X2xlbmd0aChzdHJpbmc6OnRleHQpIHx8ICfihpInIHx8IG9jdGV0X2xlbmd0 aChzdHJpbmc6OnV0ZjE2KSBBUyBvY3RldHMsCisgICAgICAgdG9fY2hhcihST1VORCgxMDAgKgor ICAgICAgICAgICAgICAgICAgICAgKChvY3RldF9sZW5ndGgoc3RyaW5nOjp1dGYxNik6OmZsb2F0 IC8KKyAgICAgICAgICAgICAgICAgICAgICAob2N0ZXRfbGVuZ3RoKHN0cmluZzo6dGV4dCk6OmZs b2F0KSAtIDEuMCkpKSwKKyAgICAgICAgICAgICAgICdTOTk5JScpIEFTIGRlbHRhLAorICAgICAg IHN0cmluZworRlJPTSBleGFtcGxlczsKKyBsYW5ndWFnZSB8IG9jdGV0cyAgfCBkZWx0YSB8ICAg ICAgICAgICAgICAgICAgICAgc3RyaW5nICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgRW5nbGlzaCAgfCA0NeKGkjkwICAgfCArMTAwJSB8IEluIGEgaG9sZSBp biB0aGUgZ3JvdW5kIHRoZXJlIGxpdmVkIGEgaG9iYml0LgorIFNwYW5pc2ggIHwgNDTihpI4NiAg IHwgICs5NSUgfCBFbiB1biBhZ3VqZXJvIGVuIGVsIHN1ZWxvLCB2aXbDrWEgdW4gaG9iYml0Lgor IFJ1c3NpYW4gIHwgNTnihpI2NiAgIHwgICsxMiUgfCDQkiDQvdC+0YDQtSDQv9C+0LQg0LfQtdC8 0LvQtdC5INC20LjQuy3QsdGL0Lsg0YXQvtCx0LHQuNGCLgorIEFyYWJpYyAgIHwgNTfihpI2NCAg IHwgICsxMiUgfCDZg9in2YYg2YrYudmK2LQg2YfZiNio2YrYqiDZgdmKINit2YHYsdipINmB2Yog 2KfZhNij2LHYti4KKyBIZWJyZXcgICB8IDQz4oaSNDggICB8ICArMTIlIHwg15HXqteV15og15fX ldeoINeR15DXk9ee15Qg15fXmSDXlNeV15HXmdeYLgorIEdyZWVrICAgIHwgNzTihpI4MiAgIHwg ICsxMSUgfCDOo861IM68zrnOsSDPhM+Bz43PgM6xIM+Dz4TOvyDOrc60zrHPhs6/z4IgzrbOv8+N z4POtSDOrc69zrEgz4fPjM68z4DOuc+ELgorIEtvcmVhbiAgIHwgNTXihpI0NiAgIHwgIC0xNiUg fCDrlYXsho0g7Ja064qQIOq1rOupjeyXkCDtlZwg7Zi467mX7J20IOyCtOqzoCDsnojsl4jri6Qu CisgSGluZGkgICAgfCAxMTHihpI4NiAgfCAgLTIzJSB8IOCknOCkruClgOCkqCDgpK7gpYfgpIIg 4KSs4KSo4KWHIOCkj+CklSDgpJfgpKHgpY3gpKLgpYcg4KSu4KWH4KSCIOCkj+CklSDgpLngpYng pKzgpL/gpJ8g4KSw4KS54KSk4KS+IOCkpeCkvuClpAorIFRhbWlsICAgIHwgMTQ24oaSMTA4IHwg IC0yNiUgfCDgroXgrqjgr43grqQg4K6o4K6/4K6y4K6k4K+N4K6k4K6/4K6y4K+NIOCukuCusOCv gSDgrqTgr4HgrrPgr4jgrq/grr/grrLgr40g4K6S4K6w4K+BIOCuueCuvuCuquCuv+Cun+CvjSDg rrXgrprgrr/grqTgr43grqTgr4Eg4K614K6o4K+N4K6k4K6k4K+BLgorIENoaW5lc2UgIHwgNTHi hpIzNCAgIHwgIC0zMyUgfCDlnKjlnLDkuIvkuIDkuKrmtJ7ph4zvvIzkvY/nnYDkuIDkuKrpnI3m r5TnibnkurrjgIIKKyBKYXBhbmVzZSB8IDY24oaSNDQgICB8ICAtMzMlIHwg56m044Gu44Gq44GL 44Gr44CB44Gy44Go44KK44Gu44Ob44OT44OD44OI44GM5pqu44KJ44GX44Gm44GE44Gf44CCCiso MTEgcm93cykKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzLmMgYi9zcmMv dGVzdC9yZWdyZXNzL3JlZ3Jlc3MuYwppbmRleCA3NGZlNmZkY2U5ZC4uNjE3YzcxOWE4MDQgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcy5jCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvcmVncmVzcy5jCkBAIC0xMTQ0LDYgKzExNDQsMjIgQEAgdGVzdF90ZXh0X3RvX2J5dGVhKFBH X0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX0JZVEVBX1AoUEdfR0VUQVJHX1RFWFRfUFAoMCkp OwogfQogCisvKiBDb252ZXJ0IGJ5dGVhIHRvIHV0ZjE2IHdpdGhvdXQgdmFsaWRhdGlvbi4gKi8K K1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ieXRlYV90b191dGYxNik7CitEYXR1bQordGVzdF9i eXRlYV90b191dGYxNihQR19GVU5DVElPTl9BUkdTKQoreworCVBHX1JFVFVSTl9VVEYxNl9QKFBH X0dFVEFSR19CWVRFQV9QUCgwKSk7Cit9CisKKy8qIEFuZCB0aGUgcmV2ZXJzZS4gKi8KK1BHX0ZV TkNUSU9OX0lORk9fVjEodGVzdF91dGYxNl90b19ieXRlYSk7CitEYXR1bQordGVzdF91dGYxNl90 b19ieXRlYShQR19GVU5DVElPTl9BUkdTKQoreworCVBHX1JFVFVSTl9CWVRFQV9QKFBHX0dFVEFS R19VVEYxNl9QUCgwKSk7Cit9CisKIC8qIENvcnJ1cHRpb24gdGVzdHMgaW4gQy4gKi8KIFBHX0ZV TkNUSU9OX0lORk9fVjEodGVzdF9tYmxlbl9mdW5jKTsKIERhdHVtCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9lbmNvZGluZy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9lbmNv ZGluZy5zcWwKaW5kZXggMDdkN2RjOGZmMTguLjdhMGUzODZmNWZiIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9lbmNvZGluZy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv ZW5jb2Rpbmcuc3FsCkBAIC0xMSw4ICsxMSwxMiBAQCBTRUxFQ1QgZ2V0ZGF0YWJhc2VlbmNvZGlu ZygpIDw+ICdVVEY4JyBBUyBza2lwX3Rlc3QgXGdzZXQKIAogQ1JFQVRFIEZVTkNUSU9OIHRlc3Rf Ynl0ZWFfdG9fdGV4dChieXRlYSkgUkVUVVJOUyB0ZXh0CiAgICAgQVMgOidyZWdyZXNzbGliJyBM QU5HVUFHRSBDIFNUUklDVDsKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2J5dGVhX3RvX3V0ZjE2KGJ5 dGVhKSBSRVRVUk5TIHV0ZjE2CisgICAgQVMgOidyZWdyZXNzbGliJyBMQU5HVUFHRSBDIFNUUklD VDsKIENSRUFURSBGVU5DVElPTiB0ZXN0X3RleHRfdG9fYnl0ZWEodGV4dCkgUkVUVVJOUyBieXRl YQogICAgIEFTIDoncmVncmVzc2xpYicgTEFOR1VBR0UgQyBTVFJJQ1Q7CitDUkVBVEUgRlVOQ1RJ T04gdGVzdF91dGYxNl90b19ieXRlYSh0ZXh0KSBSRVRVUk5TIGJ5dGVhCisgICAgQVMgOidyZWdy ZXNzbGliJyBMQU5HVUFHRSBDIFNUUklDVDsKIENSRUFURSBGVU5DVElPTiB0ZXN0X21ibGVuX2Z1 bmModGV4dCwgdGV4dCwgdGV4dCwgaW50KSBSRVRVUk5TIGludAogICAgIEFTIDoncmVncmVzc2xp YicgTEFOR1VBR0UgQyBTVFJJQ1Q7CiBDUkVBVEUgRlVOQ1RJT04gdGVzdF90ZXh0X3RvX3djaGFy cyh0ZXh0LCB0ZXh0KSBSRVRVUk5TIGludFtdCkBAIC0yMTksNiArMjIzLDE2IEBAIEFMVEVSIFRB QkxFIHRvYXN0XzNiX3V0ZjggUkVOQU1FIFRPIHRvYXN0XzRiX3V0Zjg7CiBVUERBVEUgdG9hc3Rf NGJfdXRmOCBTRVQgYyA9IHJlcGVhdChVJidcKzAxRjY4MCcsIDMwMDApOwogU0VMRUNUIFNVQlNU UklORyhjIEZST00gMzAwMCBGT1IgMSkgRlJPTSB0b2FzdF80Yl91dGY4OwogCistLSBzdG9yYWdl IGZvcm1hdCBvZiBVVEYtMTYgaXMgYmlnLWVuZGlhbiBldmVuIG9uIGxpdHRsZS1lbmRpYW4gc3lz dGVtCitTRUxFQ1QgdGVzdF9ieXRlYV90b191dGYxNignXHgwMDQxJykgPSAnQSc7CistLSBvZGQg bnVtYmVyIG9mIGJ5dGVzIChjb3JydXB0ZWQgc3RvcmFnZSksIHRyYWlsaW5nIGJ5dGUgaWdub3Jl ZAorU0VMRUNUIHRlc3RfYnl0ZWFfdG9fdXRmMTYoJ1x4MDA0MTAwJykgPSAnQSc7CitTRUxFQ1Qg dGVzdF9ieXRlYV90b191dGYxNignXHgwMDQxMDAnKTsKKy0tIGluY29tcGxldGUgc3Vycm9nYXRl IHBhaXIKK1NFTEVDVCB0ZXN0X2J5dGVhX3RvX3V0ZjE2KCdceGQ4M2QnKTsKKy0tIGJhZCBzZWNv bmQgY29kZXBvaW50IGluIHN1cnJvZ2F0ZSBwYWlyCitTRUxFQ1QgdGVzdF9ieXRlYV90b191dGYx NignXHhkODNkYmVlZicpOworCiBEUk9QIFRBQkxFIGVuY29kaW5nX3Rlc3RzOwogRFJPUCBUQUJM RSB0b2FzdF80Yl91dGY4OwogRFJPUCBGVU5DVElPTiB0ZXN0X2VuY29kaW5nOwpAQCAtMjI3LDcg KzI0MSw5IEBAIERST1AgRlVOQ1RJT04gdGVzdF90ZXh0X3RvX3djaGFyczsKIERST1AgRlVOQ1RJ T04gdGVzdF92YWxpZF9zZXJ2ZXJfZW5jb2Rpbmc7CiBEUk9QIEZVTkNUSU9OIHRlc3RfbWJsZW5f ZnVuYzsKIERST1AgRlVOQ1RJT04gdGVzdF9ieXRlYV90b190ZXh0OworRFJPUCBGVU5DVElPTiB0 ZXN0X2J5dGVhX3RvX3V0ZjE2OwogRFJPUCBGVU5DVElPTiB0ZXN0X3RleHRfdG9fYnl0ZWE7CitE Uk9QIEZVTkNUSU9OIHRlc3RfdXRmMTZfdG9fYnl0ZWE7CiAKIAogLS0gc3Vic3RyaW5nIHNsb3cg cGF0aDogbXVsdGktYnl0ZSBlc2NhcGUgY2hhciB2cy4gbXVsdGktYnl0ZSBwYXR0ZXJuIGNoYXIu CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC90eXBlX3Nhbml0eS5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC90eXBlX3Nhbml0eS5zcWwKaW5kZXggOTVkNWI2ZTA5MTUuLmMxNGYw YTNjODJmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC90eXBlX3Nhbml0eS5zcWwK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdHlwZV9zYW5pdHkuc3FsCkBAIC01NjcsNiArNTY3 LDcgQEAgQ1JFQVRFIFRBQkxFIHRhYl9jb3JlX3R5cGVzIEFTIFNFTEVDVAogICAnYWJjJzo6dmFy Y2hhciwKICAgJ25hbWUnOjpuYW1lLAogICAndHh0Jzo6dGV4dCwKKyAgJ3V0ZjE2Jzo6dXRmMTYs CiAgIHRydWU6OmJvb2wsCiAgIEUnXFx4REVBREJFRUYnOjpieXRlYSwKICAgQicxMDAwMSc6OmJp dCwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3VuaWNvZGUuc3FsIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvdW5pY29kZS5zcWwKaW5kZXggZTUwYWRiNjhlZDAuLjBlZWI4NjgwMWI2 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC91bmljb2RlLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC91bmljb2RlLnNxbApAQCAtMzYsMyArMzYsMTA0IEBAIEZST00KIE9S REVSIEJZIG51bTsKIAogU0VMRUNUIGlzX25vcm1hbGl6ZWQoJ2FiYycsICdkZWYnKTsgIC0tIHJ1 bi10aW1lIGVycm9yCisKKy0tIEludGVyZXN0aW5nIHRocmVzaG9sZHMgZm9yIFVURi04IGFuZCBV VEYtMTYgZW5jb2RpbmcKKworV0lUSCBvY3RldF9sZW5ndGhfdGhyZXNob2xkcyh0LCBkZXNjcmlw dGlvbikgQVMgKFZBTFVFUworICAoVSYnXCswMDAwMDEnLCAnRmlyc3QgMS1ieXRlIFVURi04IHNl cXVlbmNlIHN1cHBvcnRlZCBieSBQb3N0Z3JlU1FMJyksCisgIChVJidcKzAwMDA3RicsICdGaW5h bCAxLWJ5dGUgVVRGLTggc2VxdWVuY2UnKSwKKyAgKFUmJ1wrMDAwMDgwJywgJ0ZpcnN0IDItYnl0 ZSBVVEYtOCBzZXF1ZW5jZScpLAorICAoVSYnXCswMDA3RkYnLCAnRmluYWwgMi1ieXRlIFVURi04 IHNlcXVlbmNlJyksCisgIChVJidcKzAwMDgwMCcsICdGaXJzdCAzLWJ5dGUgVVRGLTggc2VxdWVu Y2UnKSwKKyAgKFUmJ1wrMDBGRkZGJywgJ0ZpbmFsIDMtYnl0ZSBVVEYtOCBzZXF1ZW5jZSAoZW5k IG9mIEJNUCknKSwKKyAgKFUmJ1wrMDEwMDAwJywgJ0ZpcnN0IDQtYnl0ZSBVVEYtOCBzZXF1ZW5j ZSwgVVRGLTE2IHBhaXInKSwKKyAgKFUmJ1wrMTBGRkZGJywgJ0ZpbmFsIHZhbGlkIGNvZGVwb2lu dCcpKQorU0VMRUNUIHRvX2hleChhc2NpaSh0KSksCisgICAgICAgZGVzY3JpcHRpb24sCisgICAg ICAgb2N0ZXRfbGVuZ3RoKHQ6OnRleHQpIEFTIHV0Zjhfb2N0ZXRzLAorICAgICAgIG9jdGV0X2xl bmd0aCh0Ojp1dGYxNikgQVMgdXRmMTZfb2N0ZXRzLAorICAgICAgIGxlbmd0aCh0Ojp0ZXh0KSBB UyB1dGY4X2xlbmd0aCwKKyAgICAgICBsZW5ndGgodDo6dXRmMTYpIEFTIHV0ZjE2X2xlbmd0aAor RlJPTSBvY3RldF9sZW5ndGhfdGhyZXNob2xkczsKKy0tIE91dCBvZiByYW5nZSBjb2RlcG9pbnRz CitTRUxFQ1QgVSYnXCswMDAwMDAnOworU0VMRUNUIFUmJ1wrMTEwMDAwJzsKKworQ1JFQVRFIEZV TkNUSU9OIGNoZWNrX3RleHRfb3AobGVmdF9zdHJpbmcgdGV4dCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxlZnRfdHlwZSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmlnaHRfc3RyaW5nIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdo dF90eXBlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCB0ZXh0KQorUkVU VVJOUyBib29sZWFuCitMQU5HVUFHRSBwbHBnc3FsCitBUworJCQKK0RFQ0xBUkUKKyAgZm9ybWF0 IHRleHQ7CisgIHRleHRfZSB0ZXh0OworICB0ZXh0X2kgaW50OworICB0ZXh0X2IgYm9vbGVhbjsK KyAgdGVzdF9lIHRleHQ7CisgIHRlc3RfaSBpbnQ7CisgIHRlc3RfYiBib29sZWFuOworQkVHSU4K KyAgLS0gYWxsIGNyb3NzLXR5cGUgcmVzdWx0cyBhZ2FpbnN0IHRleHQsIHRleHQKKyAgSUYgb3Ag PSAnY21wJyBUSEVOCisgICAgZm9ybWF0IDo9ICclcyVzY21wKCcnJXMnJzo6JXMsICcnJXMnJzo6 JXMpJzsKKyAgICB0ZXh0X2UgOj0gZm9ybWF0KGZvcm1hdCwgJ2J0dGV4dCcsICcnLCBsZWZ0X3N0 cmluZywgJ3RleHQnLCByaWdodF9zdHJpbmcsICd0ZXh0Jyk7CisgICAgRVhFQ1VURSBmb3JtYXQo J1NFTEVDVCBzaWduKCVzKScsIHRleHRfZSkgSU5UTyB0ZXh0X2k7CisgICAgdGVzdF9lIDo9IGZv cm1hdChmb3JtYXQsIGxlZnRfdHlwZSwgQ0FTRSBXSEVOIGxlZnRfdHlwZSA9IHJpZ2h0X3R5cGUg VEhFTiAnJyBFTFNFIHJpZ2h0X3R5cGUgRU5ELCBsZWZ0X3N0cmluZywgbGVmdF90eXBlLCByaWdo dF9zdHJpbmcsIHJpZ2h0X3R5cGUpOworICAgIEVYRUNVVEUgZm9ybWF0KCdTRUxFQ1Qgc2lnbigl cyknLCB0ZXN0X2UpIElOVE8gdGVzdF9pOworICAgIElGIHRlc3RfaSA8PiB0ZXh0X2kgVEhFTgor ICAgICAgUkFJU0UgTk9USUNFICclIC0+ICUsIGJ1dCAlIC0+ICUnLCB0ZXh0X2UsIHRleHRfaSwg dGVzdF9lLCB0ZXN0X2k7CisgICAgRU5EIElGOworICBFTFNFCisgICAgZm9ybWF0IDo9ICcnJyVz Jyc6OiVzICVzICcnJXMnJzo6JXMnOworICAgIHRleHRfZSA6PSBmb3JtYXQoZm9ybWF0LCBsZWZ0 X3N0cmluZywgJ3RleHQnLCBvcCwgcmlnaHRfc3RyaW5nLCAndGV4dCcpOworICAgIEVYRUNVVEUg Zm9ybWF0KCdTRUxFQ1QgJXMnLCB0ZXh0X2UpIElOVE8gdGV4dF9iOworICAgIHRlc3RfZSA6PSBm b3JtYXQoZm9ybWF0LCBsZWZ0X3N0cmluZywgbGVmdF90eXBlLCBvcCwgcmlnaHRfc3RyaW5nLCBy aWdodF90eXBlKTsKKyAgICBFWEVDVVRFIGZvcm1hdCgnU0VMRUNUICVzJywgdGVzdF9lKSBJTlRP IHRlc3RfYjsKKyAgICBJRiB0ZXN0X2IgPD4gdGV4dF9iIFRIRU4KKyAgICAgIFJBSVNFIE5PVElD RSAnJSAtPiAlLCBidXQgJSAtPiAlJywgdGV4dF9lLCB0ZXh0X2IsIHRlc3RfZSwgdGVzdF9iOwor ICAgIEVORCBJRjsKKyAgRU5EIElGOworICBSRVRVUk4gdHJ1ZTsKK0VORDsKKyQkOworCitXSVRI IHN0cmluZ3MgKHMpIEFTIChWQUxVRVMgKCdhJyksICgnYWEnKSwgKCdhYWEnKSksCisgICAgIG9w cyAobykgICAgIEFTIChWQUxVRVMgKCc8JyksICgnPD0nKSwgKCc9JyksICgnPD4nKSwgKCc+PScp LCAoJz4nKSwgKCdjbXAnKSksCisgICAgIHR5cGVzICh0KSAgIEFTIChWQUxVRVMgKCd0ZXh0Jyks ICgnbmFtZScpLCAoJ3V0ZjE2JykpCitTRUxFQ1QgY291bnQoY2hlY2tfdGV4dF9vcChsZWZ0X3N0 cmluZy5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdF90eXBlLnQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICByaWdodF9zdHJpbmcucywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJpZ2h0X3R5cGUudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLm8pKQor RlJPTSAgICAgICBzdHJpbmdzIGxlZnRfc3RyaW5nCitDUk9TUyBKT0lOIHN0cmluZ3MgcmlnaHRf c3RyaW5nCitDUk9TUyBKT0lOIHR5cGVzICAgbGVmdF90eXBlCitDUk9TUyBKT0lOIHR5cGVzICAg cmlnaHRfdHlwZQorQ1JPU1MgSk9JTiBvcHMgICAgIG9wCitXSEVSRSBsZWZ0X3R5cGUudCA9ICd1 dGYxNicgT1IgcmlnaHRfdHlwZS50ID0gJ3V0ZjE2JzsKKworV0lUSCBleGFtcGxlcyhsYW5ndWFn ZSwgc3RyaW5nKSBBUworKFZBTFVFUworICAoJ0VuZ2xpc2gnLCAgJ0luIGEgaG9sZSBpbiB0aGUg Z3JvdW5kIHRoZXJlIGxpdmVkIGEgaG9iYml0LicpLAorICAoJ1NwYW5pc2gnLCAgJ0VuIHVuIGFn dWplcm8gZW4gZWwgc3VlbG8sIHZpdsOtYSB1biBob2JiaXQuJyksCisgICgnUnVzc2lhbicsICAn 0JIg0L3QvtGA0LUg0L/QvtC0INC30LXQvNC70LXQuSDQttC40Lst0LHRi9C7INGF0L7QsdCx0LjR gi4nKSwKKyAgKCdBcmFiaWMnLCAgICfZg9in2YYg2YrYudmK2LQg2YfZiNio2YrYqiDZgdmKINit 2YHYsdipINmB2Yog2KfZhNij2LHYti4nKSwKKyAgKCdIZWJyZXcnLCAgICfXkdeq15XXmiDXl9eV 16gg15HXkNeT157XlCDXl9eZINeU15XXkdeZ15guJyksCisgICgnR3JlZWsnLCAgICAnzqPOtSDO vM65zrEgz4TPgc+Nz4DOsSDPg8+Ezr8gzq3OtM6xz4bOv8+CIM62zr/Pjc+DzrUgzq3Ovc6xIM+H z4zOvM+AzrnPhC4nKSwKKyAgKCdLb3JlYW4nLCAgICfrlYXsho0g7Ja064qQIOq1rOupjeyXkCDt lZwg7Zi467mX7J20IOyCtOqzoCDsnojsl4jri6QuJyksCisgICgnSGluZGknLCAgICAn4KSc4KSu 4KWA4KSoIOCkruClh+CkgiDgpKzgpKjgpYcg4KSP4KSVIOCkl+CkoeCljeCkouClhyDgpK7gpYfg pIIg4KSP4KSVIOCkueClieCkrOCkv+CknyDgpLDgpLngpKTgpL4g4KSl4KS+4KWkJyksCisgICgn VGFtaWwnLCAgICAn4K6F4K6o4K+N4K6kIOCuqOCuv+CusuCupOCvjeCupOCuv+CusuCvjSDgrpLg rrDgr4Eg4K6k4K+B4K6z4K+I4K6v4K6/4K6y4K+NIOCukuCusOCvgSDgrrngrr7grqrgrr/grp/g r40g4K614K6a4K6/4K6k4K+N4K6k4K+BIOCuteCuqOCvjeCupOCupOCvgS4nKSwKKyAgKCdDaGlu ZXNlJywgICflnKjlnLDkuIvkuIDkuKrmtJ7ph4zvvIzkvY/nnYDkuIDkuKrpnI3mr5Tnibnkurrj gIInKSwKKyAgKCdKYXBhbmVzZScsICfnqbTjga7jgarjgYvjgavjgIHjgbLjgajjgorjga7jg5vj g5Pjg4Pjg4jjgYzmmq7jgonjgZfjgabjgYTjgZ/jgIInKSkKK1NFTEVDVCBsYW5ndWFnZSwKKyAg ICAgICBvY3RldF9sZW5ndGgoc3RyaW5nOjp0ZXh0KSB8fCAn4oaSJyB8fCBvY3RldF9sZW5ndGgo c3RyaW5nOjp1dGYxNikgQVMgb2N0ZXRzLAorICAgICAgIHRvX2NoYXIoUk9VTkQoMTAwICoKKyAg ICAgICAgICAgICAgICAgICAgICgob2N0ZXRfbGVuZ3RoKHN0cmluZzo6dXRmMTYpOjpmbG9hdCAv CisgICAgICAgICAgICAgICAgICAgICAgKG9jdGV0X2xlbmd0aChzdHJpbmc6OnRleHQpOjpmbG9h dCkgLSAxLjApKSksCisgICAgICAgICAgICAgICAnUzk5OSUnKSBBUyBkZWx0YSwKKyAgICAgICBz dHJpbmcKK0ZST00gZXhhbXBsZXM7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDQ5ZGZi NjYyYWJjLi44ZmYxMGEzNmVlNiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTM2NDks NiArMzY0OSw3IEBAIGNiX2NsZWFudXBfZGlyCiBjYl9vcHRpb25zCiBjYl90YWJsZXNwYWNlCiBj Yl90YWJsZXNwYWNlX21hcHBpbmcKK2NoYXIxNl9pdGVyYXRvcgogY2hhcjE2X3QKIGNoYXIzMl90 CiBjaGVja19hZ2dfYXJndW1lbnRzX2NvbnRleHQKQEAgLTM5NDYsNiArMzk0Nyw3IEBAIG1iY2hh cmFjdGVyX2luY3JlbWVudGVyCiBtYmRpc3BsYXlsZW5fY29udmVydGVyCiBtYmxlbl9jb252ZXJ0 ZXIKIG1ic3RyX3ZlcmlmaWVyCittYl9pdGVyYXRvcgogbWVtb2l6ZV9oYXNoCiBtZW1vaXplX2l0 ZXJhdG9yCiBtZXRhc3RyaW5nCkBAIC00MzEzLDYgKzQzMTUsNyBAQCBzc2l6ZV90CiBzdGFuZGFy ZF9xcF9leHRyYQogc3RlbW1lcl9tb2R1bGUKIHN0bXRDYWNoZUVudHJ5CitzdG9yYWdlX2NoYXIx Nl90CiBzdG9yZUluZm8KIHN0b3JlUmVzX2Z1bmMKIHN0cmVhbV9zdG9wX2NhbGxiYWNrCkBAIC00 Mzg4LDYgKzQzOTEsNyBAQCB1bmljb2RlU3R5bGVSb3dGb3JtYXQKIHVuaWNvZGVfbGluZXN0eWxl CiB1bml0X2NvbnZlcnNpb24KIHVubG9nZ2VkX3JlbGF0aW9uX2VudHJ5Cit1dGYxNgogdXRmX2xv Y2FsX2NvbnZlcnNpb25fZnVuYwogdXVpZEtFWQogdXVpZF9yY190Ci0tIAoyLjQ3LjMKCg== --00000000000016954d064f7fcda7--