<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>55979</bug_id>
          
          <creation_ts>2011-03-08 16:09:02 -0800</creation_ts>
          <short_desc>Unify Windows version checks</short_desc>
          <delta_ts>2011-03-09 21:21:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>55226</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Kasting">pkasting</reporter>
          <assigned_to name="Peter Kasting">pkasting</assigned_to>
          <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>mihaip</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>364211</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-03-08 16:09:02 -0800</bug_when>
    <thetext>WebCore/platform/win/SystemInfo.h has a lone function &quot;isRunningOnVistaOrLater()&quot;.  Chromium has its own file, WindowsVersion.h, which defines a similar &quot;isVistaOrNewer()&quot;.  Then various different files call GetVersionEx() directly.

We should unify all these in calling a function in SystemInfo.h that returns the Windows version in an easy-to-understand way (e.g. as an enum).

Blocks bug 55226 because unifying on this file gives me an appropriate place to add the WOW64/processor architecture checks that bug needs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364252</commentid>
    <comment_count>1</comment_count>
      <attachid>85115</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-03-08 17:30:23 -0800</bug_when>
    <thetext>Created attachment 85115
Part 1, v1

I split this into two parts for easier review, because changing everyone to use SystemInfo.cpp and changing SystemInfo.cpp to return Windows versions are distinct and can be done independently, and since each touches a number of places it&apos;s easier to miss things if they&apos;re lumped together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364254</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-08 17:32:02 -0800</bug_when>
    <thetext>Attachment 85115 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/rendering/RenderThemeChromiumWin.cpp:47:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364255</commentid>
    <comment_count>3</comment_count>
      <attachid>85115</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-08 17:33:18 -0800</bug_when>
    <thetext>Comment on attachment 85115
Part 1, v1

View in context: https://bugs.webkit.org/attachment.cgi?id=85115&amp;action=review

please sort includes to make style thingy happy.

R=me

&gt;&gt; Source/WebCore/platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:40
&gt;&gt; +#include &quot;SystemInfo.h&quot;
&gt; 
&gt; Alphabetical sorting problem.  [build/include_order] [4]

sort the includes please

&gt;&gt; Source/WebCore/rendering/RenderThemeChromiumWin.cpp:47
&gt;&gt; +#include &quot;SystemInfo.h&quot;
&gt; 
&gt; Alphabetical sorting problem.  [build/include_order] [4]

sort includes please</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364267</commentid>
    <comment_count>4</comment_count>
      <attachid>85115</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-03-08 17:58:30 -0800</bug_when>
    <thetext>Comment on attachment 85115
Part 1, v1

Clearing flags, patch landed in r80611.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364606</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-09 10:50:38 -0800</bug_when>
    <thetext>GNUmakefile.am uses tabs everywhere, but this patch didn&apos;t have them - did it break the build? And if not, can we globally replace tabs with spaces in this file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364672</commentid>
    <comment_count>6</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-03-09 12:08:27 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; GNUmakefile.am uses tabs everywhere, but this patch didn&apos;t have them - did it break the build? And if not, can we globally replace tabs with spaces in this file?

The build (at least, the GTK build... is this used elsewhere?) didn&apos;t break.  I don&apos;t know enough about this file to know if tabs can be globally removed.  That might be a good question for one of the GTK guys.  I&apos;d prefer not to tackle it on this bug, although if you&apos;d like me to correct my last change to use tabs instead of spaces I will happily include that in the part 2 patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364725</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-09 13:04:05 -0800</bug_when>
    <thetext>Sounds like using tabs would be good for consistency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364828</commentid>
    <comment_count>8</comment_count>
      <attachid>85247</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-03-09 15:42:13 -0800</bug_when>
    <thetext>Created attachment 85247
Part 2, v1

By unifying the places that construct the UA string to call my new function, the fix for bug 55226 will become very simple.  Unfortunately, I am skeptical that the Qt part will work, and even if it does, I couldn&apos;t find enough docs on GetVersionEx() on WinCE to fully replace the old code.  Oh well; if it doesn&apos;t work, I can yank it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364830</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-09 15:45:31 -0800</bug_when>
    <thetext>Attachment 85247 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/win/SystemInfo.cpp:54:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/win/SystemInfo.cpp:66:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/win/SystemInfo.cpp:74:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/win/SystemInfo.h:34:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/platform/win/SystemInfo.h:59:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 5 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364832</commentid>
    <comment_count>10</comment_count>
      <attachid>85248</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-03-09 15:50:04 -0800</bug_when>
    <thetext>Created attachment 85248
Part 2, v2

Style fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364904</commentid>
    <comment_count>11</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-09 17:23:21 -0800</bug_when>
    <thetext>Attachment 85248 did not build on win:
Build output: http://queues.webkit.org/results/8114871</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364926</commentid>
    <comment_count>12</comment_count>
      <attachid>85269</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-03-09 17:55:22 -0800</bug_when>
    <thetext>Created attachment 85269
Part 2, v3

Fixes Win build error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364949</commentid>
    <comment_count>13</comment_count>
      <attachid>85276</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-03-09 18:53:18 -0800</bug_when>
    <thetext>Created attachment 85276
Part 2, v4

With help from kling on IRC, this replaces the rest of the Qt UA string code.  This also makes the version check function shorter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364951</commentid>
    <comment_count>14</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-09 18:53:29 -0800</bug_when>
    <thetext>Attachment 85269 did not build on win:
Build output: http://queues.webkit.org/results/8115791</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364953</commentid>
    <comment_count>15</comment_count>
      <attachid>85277</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-03-09 18:59:07 -0800</bug_when>
    <thetext>Created attachment 85277
Part 2, v5

Fix another Windows build error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364954</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-09 19:16:00 -0800</bug_when>
    <thetext>Attachment 85277 did not build on win:
Build output: http://queues.webkit.org/results/8122097</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364955</commentid>
    <comment_count>17</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-09 19:20:22 -0800</bug_when>
    <thetext>Attachment 85276 did not build on win:
Build output: http://queues.webkit.org/results/8113893</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364956</commentid>
    <comment_count>18</comment_count>
      <attachid>85277</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-03-09 19:23:02 -0800</bug_when>
    <thetext>Comment on attachment 85277
Part 2, v5

View in context: https://bugs.webkit.org/attachment.cgi?id=85277&amp;action=review

&gt; Source/WebCore/platform/win/SystemInfo.cpp:37
&gt; +    static WindowsVersion version;

It might be safer to have a WindowsUnknown default value here, but I don&apos;t have a strong opinion about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364960</commentid>
    <comment_count>19</comment_count>
      <attachid>85279</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-03-09 19:33:48 -0800</bug_when>
    <thetext>Created attachment 85279
Part 2, v6

Try to fix Windows build failure based on abarth&apos;s guesses about how to do WebKit[2] ForwardingHeaders.

(In reply to comment #18)
&gt; (From update of attachment 85277 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85277&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/win/SystemInfo.cpp:37
&gt; &gt; +    static WindowsVersion version;
&gt; 
&gt; It might be safer to have a WindowsUnknown default value here, but I don&apos;t have a strong opinion about that.

I originally had one, but I guarantee the code below sets a version, and I _want_ to guarantee that, since it&apos;s not clear on the caller side how one should handle &quot;unknown&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364962</commentid>
    <comment_count>20</comment_count>
      <attachid>85279</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-03-09 19:37:50 -0800</bug_when>
    <thetext>Comment on attachment 85279
Part 2, v6

Lemme temporarily set r? to make sure the EWS bots take a crack at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364963</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-09 19:39:55 -0800</bug_when>
    <thetext>Attachment 85279 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit2/UIProcess/win/WebPageProxyWin.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364966</commentid>
    <comment_count>22</comment_count>
      <attachid>85279</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-03-09 20:20:45 -0800</bug_when>
    <thetext>Comment on attachment 85279
Part 2, v6

Landed in r80688, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364967</commentid>
    <comment_count>23</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-03-09 20:21:01 -0800</bug_when>
    <thetext>Fixed in r80688.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364979</commentid>
    <comment_count>24</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-03-09 21:21:15 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; I originally had one, but I guarantee the code below sets a version, and I _want_ to guarantee that, since it&apos;s not clear on the caller side how one should handle &quot;unknown&quot;.

A marker unknown initial value with an ASSERT that it&apos;s no longer set at the end may work.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85115</attachid>
            <date>2011-03-08 17:30:23 -0800</date>
            <delta_ts>2011-03-08 17:58:30 -0800</delta_ts>
            <desc>Part 1, v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>16687</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjA3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDMtMDggIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVuaWZ5IFdpbmRvd3MgdmVyc2lvbiBjaGVja3MsIHBhcnQg
MS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1OTc5
CisKKyAgICAgICAgTWFrZSBldmVyeW9uZSAoSSBob3BlKSBwdWxsIGluIFN5c3RlbUluZm8uY3Bw
LiAgRWxpbWluYXRlIHRoZQorICAgICAgICBub3ctdW5uZWNlc3NhcnkgV2luZG93c1ZlcnNpb24u
Y3BwIGZyb20gQ2hyb21pdW0uCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
KiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjppbnZhbGlkYXRlT25N
b3VzZUVudGVyRXhpdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVt
V2luOjpnZXRUaGVtZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hy
b21pdW1XaW46OmdldFRoZW1lQXJyb3dTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vV2luZG93c1ZlcnNpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL1dpbmRvd3NWZXJzaW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpmaWxsQk1QR2x5cGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXROb25DbGllbnRNZXRyaWNzKToK
KwogMjAxMS0wMy0wOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNv
cHkpCkBAIC0zODUxLDYgKzM4NTEsOCBAQCBpZiBUQVJHRVRfV0lOMzIKIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oIFwKKyAgICBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAgXAorICAgIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
d2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
d2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2
aXNpb24gODA1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29w
eSkKQEAgLTI4NzAsOCArMjg3MCw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0v
VGhlbWVDaHJvbWl1bU1hYy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9UaGVt
ZUNocm9taXVtTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9XaWRnZXRD
aHJvbWl1bS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dpbmRvd3NWZXJz
aW9uLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2luZG93c1ZlcnNpb24u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY29jb2EvS2V5RXZlbnRDb2NvYS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9jb2NvYS9LZXlFdmVudENvY29hLm1tJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcCcsCkBAIC0zOTcxLDYgKzM5NjksOCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL3RleHQvd2luL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VX
aW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vQlN0cmluZy5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL3dpbi9CU3RyaW5nLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL3dp
bi9CaXRtYXBJbmZvLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vd2luL0JpdG1hcEluZm8u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2luL0NPTVB0ci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5oJywKQEAgLTM5OTcsMjMgKzM5OTcsMzEg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vd2luL1BsYXRmb3JtU2NyZWVuV2luLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vd2luL1NT
TEtleUdlbmVyYXRvcldpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9TY3JvbGxi
YXJUaGVtZVNhZmFyaS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJU
aGVtZVNhZmFyaS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVX
aW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVXaW4uaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vd2luL1NoYXJlZEJ1ZmZlcldpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL3dpbi9TaGFyZWRUaW1lcldpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9T
b2Z0TGlua2luZy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vU291bmRXaW4uY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9T
eXN0ZW1UaW1lV2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2luL1RlbXBvcmFyeUxp
bmtTdHVicy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL3dpbi9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS93aW4vV2ViQ29yZUluc3RhbmNlSGFuZGxlLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL3dpbi9XZWJDb3JlVGV4dFJlbmRlcmVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vd2luL1dlYkNvcmVUZXh0UmVuZGVyZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2lu
L1doZWVsRXZlbnRXaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vV2lkZ2V0V2lu
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vd2luL1dpbjMySGFuZGxlLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL3dpbi9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS93aW4vV2luZG93TWVzc2FnZUJyb2FkY2FzdGVyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL3dpbi9XaW5kb3dNZXNzYWdlTGlzdGVuZXIuaCcsCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gODA1NzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTMz
Miw3ICsxMzMyLDEwIEBACiAKICAgICAgICAgICAgICMgVGhlIENocm9taXVtIFdpbiBjdXJyZW50
bHkgdXNlcyBHbHlwaFBhZ2VUcmVlTm9kZUNocm9taXVtV2luLmNwcCBmcm9tCiAgICAgICAgICAg
ICAjIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtLCBpbmNsdWRlZCBieSByZWdleCBhYm92ZSwg
aW5zdGVhZC4KLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0dseXBoUGFnZVRyZWVOb2RlU2tpYVxcLmNwcCQnXQorICAgICAgICAgICAgWydleGNsdWRlJywg
J3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhXFwuY3BwJCddLAor
CisgICAgICAgICAgICAjIFN5c3RlbUluZm8uY3BwIGlzIHVzZWZ1bCBhbmQgd2UgZG9uJ3Qgd2Fu
dCB0byBjb3B5IGl0LgorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL3dpbi9TeXN0
ZW1JbmZvXFwuY3BwJCddLAogICAgICAgICAgIF0sCiAgICAgICAgIH1dLAogICAgICAgICBbJyhP
Uz09ImxpbnV4IiBvciBPUz09IndpbiIpIGFuZCAiV1RGX1VTRV9XRUJBVURJT19NS0w9MSIgaW4g
ZmVhdHVyZV9kZWZpbmVzJywgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHJl
dmlzaW9uIDgwNTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAK
ICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3Vz
ZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCi0jaW5jbHVkZSAiV2luZG93c1ZlcnNp
b24uaCIKKyNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNzAsNyArNzAsNyBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6c2Nyb2xsYmFy
CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6aW52YWxpZGF0ZU9uTW91c2VFbnRl
ckV4aXQoKQogewotICAgIHJldHVybiBpc1Zpc3RhT3JOZXdlcigpOworICAgIHJldHVybiBpc1J1
bm5pbmdPblZpc3RhT3JMYXRlcigpOwogfQogCiBib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1X
aW46OnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKQEAgLTE2MCwxMiArMTYwLDEyIEBAIGludCBTY3Jv
bGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZVMKICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVz
c2VkUGFydCgpID09IFRodW1iUGFydCkgewogICAgICAgICBpZiAocGFydCA9PSBUaHVtYlBhcnQp
CiAgICAgICAgICAgICByZXR1cm4gU0NSQlNfUFJFU1NFRDsKLSAgICAgICAgcmV0dXJuIGlzVmlz
dGFPck5ld2VyKCkgPyBTQ1JCU19IT1ZFUiA6IFNDUkJTX05PUk1BTDsKKyAgICAgICAgcmV0dXJu
IGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBTQ1JCU19IT1ZFUiA6IFNDUkJTX05PUk1BTDsK
ICAgICB9CiAgICAgaWYgKCFzY3JvbGxiYXItPmVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIFND
UkJTX0RJU0FCTEVEOwogICAgIGlmIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgIT0gcGFydCB8
fCBwYXJ0ID09IEJhY2tUcmFja1BhcnQgfHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0KQotICAg
ICAgICByZXR1cm4gKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQgfHwgIWlzVmlz
dGFPck5ld2VyKCkpID8gU0NSQlNfTk9STUFMIDogU0NSQlNfSE9WRVI7CisgICAgICAgIHJldHVy
biAoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCB8fCAhaXNSdW5uaW5nT25WaXN0
YU9yTGF0ZXIoKSkgPyBTQ1JCU19OT1JNQUwgOiBTQ1JCU19IT1ZFUjsKICAgICBpZiAoc2Nyb2xs
YmFyLT5wcmVzc2VkUGFydCgpID09IE5vUGFydCkKICAgICAgICAgcmV0dXJuIFNDUkJTX0hPVDsK
ICAgICByZXR1cm4gKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBwYXJ0KSA/IFNDUkJTX1BS
RVNTRUQgOiBTQ1JCU19OT1JNQUw7CkBAIC0xNzksNDMgKzE3OSw0MyBAQCBpbnQgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bVdpbjo6Z2V0VGhlbWVBCiAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0
YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQpIHsKICAgICAgICAgaWYg
KHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAg
ICAgICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gIWlzVmlzdGFPck5ld2VyKCkgPyBBQlNfTEVGVE5PUk1BTCA6IEFC
U19MRUZUSE9WRVI7CisgICAgICAgICAgICAgICAgcmV0dXJuICFpc1J1bm5pbmdPblZpc3RhT3JM
YXRlcigpID8gQUJTX0xFRlROT1JNQUwgOiBBQlNfTEVGVEhPVkVSOwogICAgICAgICAgICAgaWYg
KCFzY3JvbGxiYXItPmVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gQUJTX0xFRlRE
SVNBQkxFRDsKICAgICAgICAgICAgIGlmIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgIT0gcGFy
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0g
Tm9QYXJ0KSB8fCAhaXNWaXN0YU9yTmV3ZXIoKSkgPyBBQlNfTEVGVE5PUk1BTCA6IEFCU19MRUZU
SE9WRVI7CisgICAgICAgICAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgp
ID09IE5vUGFydCkgfHwgIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpID8gQUJTX0xFRlROT1JN
QUwgOiBBQlNfTEVGVEhPVkVSOwogICAgICAgICAgICAgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBh
cnQoKSA9PSBOb1BhcnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEFCU19MRUZUSE9UOwogICAg
ICAgICAgICAgcmV0dXJuIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gcGFydCkgPwogICAg
ICAgICAgICAgICAgIEFCU19MRUZUUFJFU1NFRCA6IEFCU19MRUZUTk9STUFMOwogICAgICAgICB9
CiAgICAgICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAg
ICAgICAgICAgcmV0dXJuICFpc1Zpc3RhT3JOZXdlcigpID8gQUJTX1VQTk9STUFMIDogQUJTX1VQ
SE9WRVI7CisgICAgICAgICAgICByZXR1cm4gIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBB
QlNfVVBOT1JNQUwgOiBBQlNfVVBIT1ZFUjsKICAgICAgICAgaWYgKCFzY3JvbGxiYXItPmVuYWJs
ZWQoKSkKICAgICAgICAgICAgIHJldHVybiBBQlNfVVBESVNBQkxFRDsKICAgICAgICAgaWYgKHNj
cm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBwYXJ0KQotICAgICAgICAgICAgcmV0dXJuICgoc2Ny
b2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkgfHwgIWlzVmlzdGFPck5ld2VyKCkpID8g
QUJTX1VQTk9STUFMIDogQUJTX1VQSE9WRVI7CisgICAgICAgICAgICByZXR1cm4gKChzY3JvbGxi
YXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8fCAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIo
KSkgPyBBQlNfVVBOT1JNQUwgOiBBQlNfVVBIT1ZFUjsKICAgICAgICAgaWYgKHNjcm9sbGJhci0+
cHJlc3NlZFBhcnQoKSA9PSBOb1BhcnQpCiAgICAgICAgICAgICByZXR1cm4gQUJTX1VQSE9UOwog
ICAgICAgICByZXR1cm4gKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBwYXJ0KSA/IEFCU19V
UFBSRVNTRUQgOiBBQlNfVVBOT1JNQUw7CiAgICAgfQogICAgIGlmIChzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewogICAgICAgICBpZiAoc2Nyb2xsYmFy
LT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAgICAgICAgIHJldHVybiAhaXNWaXN0
YU9yTmV3ZXIoKSA/IEFCU19SSUdIVE5PUk1BTCA6IEFCU19SSUdIVEhPVkVSOworICAgICAgICAg
ICAgcmV0dXJuICFpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpID8gQUJTX1JJR0hUTk9STUFMIDog
QUJTX1JJR0hUSE9WRVI7CiAgICAgICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCiAgICAg
ICAgICAgICByZXR1cm4gQUJTX1JJR0hURElTQUJMRUQ7CiAgICAgICAgIGlmIChzY3JvbGxiYXIt
PmhvdmVyZWRQYXJ0KCkgIT0gcGFydCkKLSAgICAgICAgICAgIHJldHVybiAoKHNjcm9sbGJhci0+
aG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQpIHx8ICFpc1Zpc3RhT3JOZXdlcigpKSA/IEFCU19SSUdI
VE5PUk1BTCA6IEFCU19SSUdIVEhPVkVSOworICAgICAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFy
LT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkgfHwgIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkp
ID8gQUJTX1JJR0hUTk9STUFMIDogQUJTX1JJR0hUSE9WRVI7CiAgICAgICAgIGlmIChzY3JvbGxi
YXItPnByZXNzZWRQYXJ0KCkgPT0gTm9QYXJ0KQogICAgICAgICAgICAgcmV0dXJuIEFCU19SSUdI
VEhPVDsKICAgICAgICAgcmV0dXJuIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gcGFydCkg
PyBBQlNfUklHSFRQUkVTU0VEIDogQUJTX1JJR0hUTk9STUFMOwogICAgIH0KICAgICBpZiAoc2Ny
b2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAgICAgcmV0dXJuICFpc1Zp
c3RhT3JOZXdlcigpID8gQUJTX0RPV05OT1JNQUwgOiBBQlNfRE9XTkhPVkVSOworICAgICAgICBy
ZXR1cm4gIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBBQlNfRE9XTk5PUk1BTCA6IEFCU19E
T1dOSE9WRVI7CiAgICAgaWYgKCFzY3JvbGxiYXItPmVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IEFCU19ET1dORElTQUJMRUQ7CiAgICAgaWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBw
YXJ0KQotICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0
KSB8fCAhaXNWaXN0YU9yTmV3ZXIoKSkgPyBBQlNfRE9XTk5PUk1BTCA6IEFCU19ET1dOSE9WRVI7
CisgICAgICAgIHJldHVybiAoKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQpIHx8
ICFpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpKSA/IEFCU19ET1dOTk9STUFMIDogQUJTX0RPV05I
T1ZFUjsKICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IE5vUGFydCkKICAgICAg
ICAgcmV0dXJuIEFCU19ET1dOSE9UOwogICAgIHJldHVybiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFy
dCgpID09IHBhcnQpID8gQUJTX0RPV05QUkVTU0VEIDogQUJTX0RPV05OT1JNQUw7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9XaW5kb3dzVmVyc2lvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV2luZG93c1ZlcnNpb24u
Y3BwCShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1dpbmRvd3NWZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyAK
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8gCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLyAKLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJXaW5kb3dzVmVyc2lvbi5oIgotCi0jaW5jbHVkZSA8d2luZG93
cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgaXNWaXN0YU9yTmV3ZXIoKQotewot
ICAgIC8vIENhY2hlIHRoZSByZXN1bHQgdG8gYXZvaWQgYXNraW5nIGV2ZXJ5IHRpbWUuCi0gICAg
c3RhdGljIGJvb2wgaGF2ZVJlc3VsdCA9IGZhbHNlOwotICAgIHN0YXRpYyBib29sIHJlc3VsdCA9
IGZhbHNlOwotICAgIGlmICghaGF2ZVJlc3VsdCkgewotICAgICAgICBPU1ZFUlNJT05JTkZPIHZl
cnNpb25JbmZvOwotICAgICAgICB2ZXJzaW9uSW5mby5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6
ZW9mKHZlcnNpb25JbmZvKTsKLSAgICAgICAgR2V0VmVyc2lvbkV4KCZ2ZXJzaW9uSW5mbyk7Ci0K
LSAgICAgICAgaGF2ZVJlc3VsdCA9IHRydWU7Ci0gICAgICAgIHJlc3VsdCA9IHZlcnNpb25JbmZv
LmR3TWFqb3JWZXJzaW9uID49IDY7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1dpbmRvd3NWZXJzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vV2luZG93c1ZlcnNpb24uaAkocmV2aXNpb24gODA1NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9XaW5kb3dzVmVyc2lvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXaW5kb3dzVmVyc2lvbl9oCi0jZGVm
aW5lIFdpbmRvd3NWZXJzaW9uX2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgYm9vbCBp
c1Zpc3RhT3JOZXdlcigpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJl
ZU5vZGVDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdpbi5jcHAJKHJl
dmlzaW9uIDgwNTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDcgKzM3LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5oIgotI2luY2x1
ZGUgIldpbmRvd3NWZXJzaW9uLmgiCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTEzNCw3ICsxMzQsNyBAQCBzdGF0aWMgYm9vbCBmaWxsQk1QR2x5
cGhzKHVuc2lnbmVkIG9mZnNlCiAgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CiAgICAgaW50
IGludmFsaWRHbHlwaCA9IDB4RkZGRjsKICAgICBjb25zdCBEV09SRCBjZmZUYWJsZVRhZyA9IDB4
MjA0NjQ2NDM7IC8vIDQtYnl0ZSBpZGVudGlmaWVyIGZvciBPcGVuVHlwZSBDRkYgdGFibGUgKCdD
RkYgJykuCi0gICAgaWYgKCFpc1Zpc3RhT3JOZXdlcigpICYmICEodG0udG1QaXRjaEFuZEZhbWls
eSAmIFRNUEZfVFJVRVRZUEUpICYmIChHZXRGb250RGF0YShkYywgY2ZmVGFibGVUYWcsIDAsIDAs
IDApID09IEdESV9FUlJPUikpCisgICAgaWYgKCFpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpICYm
ICEodG0udG1QaXRjaEFuZEZhbWlseSAmIFRNUEZfVFJVRVRZUEUpICYmIChHZXRGb250RGF0YShk
YywgY2ZmVGFibGVUYWcsIDAsIDAsIDApID09IEdESV9FUlJPUikpCiAgICAgICAgIGludmFsaWRH
bHlwaCA9IDB4MUY7CiAKICAgICBHbHlwaCBzcGFjZUdseXBoID0gMDsgIC8vIEdseXBoIGZvciBh
IHNwYWNlLiBMYXppbHkgZmlsbGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gODA1NzcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNp
bmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUgIlRyYW5zcGFyZW5jeVdpbi5oIgot
I2luY2x1ZGUgIldpbmRvd3NWZXJzaW9uLmgiCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogCiAv
LyBGSVhNRTogVGhpcyBkZXBlbmRlbmN5IHNob3VsZCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCiAj
aW5jbHVkZSA8c2tpYS9leHQvc2tpYV91dGlsc193aW4uaD4KQEAgLTE0MSw3ICsxNDEsNyBAQCBi
b29sIFRoZW1lUGFpbnRlcjo6c19oYXNJbnN0YW5jZSA9IGZhbHNlCiAKIHN0YXRpYyB2b2lkIGdl
dE5vbkNsaWVudE1ldHJpY3MoTk9OQ0xJRU5UTUVUUklDUyogbWV0cmljcykKIHsKLSAgICBzdGF0
aWMgVUlOVCBzaXplID0gaXNWaXN0YU9yTmV3ZXIoKSA/CisgICAgc3RhdGljIFVJTlQgc2l6ZSA9
IGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPwogICAgICAgICBzaXplb2YoTk9OQ0xJRU5UTUVU
UklDUykgOiBOT05DTElFTlRNRVRSSUNTX1NJWkVfUFJFX1ZJU1RBOwogICAgIG1ldHJpY3MtPmNi
U2l6ZSA9IHNpemU7CiAgICAgYm9vbCBzdWNjZXNzID0gISFTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhT
UElfR0VUTk9OQ0xJRU5UTUVUUklDUywgc2l6ZSwgbWV0cmljcywgMCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85247</attachid>
            <date>2011-03-09 15:42:13 -0800</date>
            <delta_ts>2011-03-09 15:50:04 -0800</delta_ts>
            <desc>Part 2, v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>28867</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjY3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDMtMDkgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVuaWZ5IFdpbmRvd3MgdmVyc2lvbiBjaGVja3MuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTk3OQorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogU3RyaW5nc05vdFRvQmVMb2NhbGl6ZWQu
dHh0OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1X
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6aW52
YWxpZGF0ZU9uTW91c2VFbnRlckV4aXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bVdpbjo6Z2V0VGhlbWVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZUFycm93U3RhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZmlsbEJNUEdseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vd2lu
L0N1cnNvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTaGFyZWRDdXJzb3IpOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6U2Nyb2xsYmFyVGhlbWVXaW4pOgorICAgICAgICAq
IHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NW
ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcpOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Tm9uQ2xp
ZW50TWV0cmljcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpnZXRUaGVtZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3RCdXR0b24pOgorCiAyMDExLTAzLTA5ICBH
YXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA4
MDYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0zODUxLDggKzM4NTEsOCBAQCBpZiBUQVJHRVRfV0lOMzIKIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oIFwKLSAgICBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAgXAotICAgIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9T
eXN0ZW1JbmZvLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8u
aCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldp
bi5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9TdHJpbmdzTm90VG9CZUxvY2FsaXplZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU3RyaW5nc05vdFRvQmVMb2NhbGl6ZWQudHh0CShy
ZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL1N0cmluZ3NOb3RUb0JlTG9jYWxpemVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTExLDkgKzUxMSwxMSBAQAogIldlYlZpZXdXaW5kb3dD
bGFzcyIKICJXZWJXb3JrZXJzUHJpdmF0ZSIKICJXaW5kb3dzICIKKyJXaW5kb3dzIDMuMSIKICJX
aW5kb3dzIDk1IgogIldpbmRvd3MgOTgiCiAiV2luZG93cyA5ODsgV2luIDl4IDQuOTAiCisiV2lu
TlQ0LjAiCiAiV2luZG93cyBOVCAiCiAiV212UGx1Z2luIgogIlhTTCIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRo
ZW1lQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA4MDYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw3ICs3MCw3IEBAIGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpzY3Jv
bGxiYXIKIAogYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjppbnZhbGlkYXRlT25Nb3Vz
ZUVudGVyRXhpdCgpCiB7Ci0gICAgcmV0dXJuIGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCk7Cisg
ICAgcmV0dXJuIHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93c1Zpc3RhOwogfQogCiBib29sIFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKQEAgLTE2MCwx
MiArMTYwLDEyIEBAIGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZVMKICAg
ICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkgewogICAgICAgICBp
ZiAocGFydCA9PSBUaHVtYlBhcnQpCiAgICAgICAgICAgICByZXR1cm4gU0NSQlNfUFJFU1NFRDsK
LSAgICAgICAgcmV0dXJuIGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBTQ1JCU19IT1ZFUiA6
IFNDUkJTX05PUk1BTDsKKyAgICAgICAgcmV0dXJuICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93
c1Zpc3RhKSA/IFNDUkJTX05PUk1BTCA6IFNDUkJTX0hPVkVSOwogICAgIH0KICAgICBpZiAoIXNj
cm9sbGJhci0+ZW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gU0NSQlNfRElTQUJMRUQ7CiAgICAg
aWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBwYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNr
UGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQpCi0gICAgICAgIHJldHVybiAoc2Nyb2xs
YmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCB8fCAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIo
KSkgPyBTQ1JCU19OT1JNQUwgOiBTQ1JCU19IT1ZFUjsKKyAgICAgICAgcmV0dXJuIChzY3JvbGxi
YXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0IHx8ICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93
c1Zpc3RhKSkgPyBTQ1JCU19OT1JNQUwgOiBTQ1JCU19IT1ZFUjsKICAgICBpZiAoc2Nyb2xsYmFy
LT5wcmVzc2VkUGFydCgpID09IE5vUGFydCkKICAgICAgICAgcmV0dXJuIFNDUkJTX0hPVDsKICAg
ICByZXR1cm4gKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBwYXJ0KSA/IFNDUkJTX1BSRVNT
RUQgOiBTQ1JCU19OT1JNQUw7CkBAIC0xNzksNDMgKzE3OSw0MyBAQCBpbnQgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bVdpbjo6Z2V0VGhlbWVBCiAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0
UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQpIHsKICAgICAgICAgaWYgKHNj
cm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAg
ICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBBQlNfTEVGVE5PUk1B
TCA6IEFCU19MRUZUSE9WRVI7CisgICAgICAgICAgICAgICAgcmV0dXJuICh3aW5kb3dzVmVyc2lv
bigpIDwgV2luZG93c1Zpc3RhKSA/IEFCU19MRUZUTk9STUFMIDogQUJTX0xFRlRIT1ZFUjsKICAg
ICAgICAgICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEFCU19MRUZURElTQUJMRUQ7CiAgICAgICAgICAgICBpZiAoc2Nyb2xsYmFyLT5ob3ZlcmVk
UGFydCgpICE9IHBhcnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3Zl
cmVkUGFydCgpID09IE5vUGFydCkgfHwgIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpID8gQUJT
X0xFRlROT1JNQUwgOiBBQlNfTEVGVEhPVkVSOworICAgICAgICAgICAgICAgIHJldHVybiAoKHNj
cm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQpIHx8ICh3aW5kb3dzVmVyc2lvbigpIDwg
V2luZG93c1Zpc3RhKSkgPyBBQlNfTEVGVE5PUk1BTCA6IEFCU19MRUZUSE9WRVI7CiAgICAgICAg
ICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IE5vUGFydCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gQUJTX0xFRlRIT1Q7CiAgICAgICAgICAgICByZXR1cm4gKHNjcm9sbGJhci0+
cHJlc3NlZFBhcnQoKSA9PSBwYXJ0KSA/CiAgICAgICAgICAgICAgICAgQUJTX0xFRlRQUkVTU0VE
IDogQUJTX0xFRlROT1JNQUw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNjcm9sbGJhci0+cHJl
c3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCi0gICAgICAgICAgICByZXR1cm4gIWlzUnVubmluZ09u
VmlzdGFPckxhdGVyKCkgPyBBQlNfVVBOT1JNQUwgOiBBQlNfVVBIT1ZFUjsKKyAgICAgICAgICAg
IHJldHVybiAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkgPyBBQlNfVVBOT1JNQUwg
OiBBQlNfVVBIT1ZFUjsKICAgICAgICAgaWYgKCFzY3JvbGxiYXItPmVuYWJsZWQoKSkKICAgICAg
ICAgICAgIHJldHVybiBBQlNfVVBESVNBQkxFRDsKICAgICAgICAgaWYgKHNjcm9sbGJhci0+aG92
ZXJlZFBhcnQoKSAhPSBwYXJ0KQotICAgICAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3Zl
cmVkUGFydCgpID09IE5vUGFydCkgfHwgIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpID8gQUJT
X1VQTk9STUFMIDogQUJTX1VQSE9WRVI7CisgICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXIt
PmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8fCAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NW
aXN0YSkpID8gQUJTX1VQTk9STUFMIDogQUJTX1VQSE9WRVI7CiAgICAgICAgIGlmIChzY3JvbGxi
YXItPnByZXNzZWRQYXJ0KCkgPT0gTm9QYXJ0KQogICAgICAgICAgICAgcmV0dXJuIEFCU19VUEhP
VDsKICAgICAgICAgcmV0dXJuIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gcGFydCkgPyBB
QlNfVVBQUkVTU0VEIDogQUJTX1VQTk9STUFMOwogICAgIH0KICAgICBpZiAoc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaWYgKHNjcm9s
bGJhci0+cHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCi0gICAgICAgICAgICByZXR1cm4gIWlz
UnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBBQlNfUklHSFROT1JNQUwgOiBBQlNfUklHSFRIT1ZF
UjsKKyAgICAgICAgICAgIHJldHVybiAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkg
PyBBQlNfUklHSFROT1JNQUwgOiBBQlNfUklHSFRIT1ZFUjsKICAgICAgICAgaWYgKCFzY3JvbGxi
YXItPmVuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBBQlNfUklHSFRESVNBQkxFRDsKICAg
ICAgICAgaWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBwYXJ0KQotICAgICAgICAgICAg
cmV0dXJuICgoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkgfHwgIWlzUnVubmlu
Z09uVmlzdGFPckxhdGVyKCkpID8gQUJTX1JJR0hUTk9STUFMIDogQUJTX1JJR0hUSE9WRVI7Cisg
ICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8
fCAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkpID8gQUJTX1JJR0hUTk9STUFMIDog
QUJTX1JJR0hUSE9WRVI7CiAgICAgICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0g
Tm9QYXJ0KQogICAgICAgICAgICAgcmV0dXJuIEFCU19SSUdIVEhPVDsKICAgICAgICAgcmV0dXJu
IChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gcGFydCkgPyBBQlNfUklHSFRQUkVTU0VEIDog
QUJTX1JJR0hUTk9STUFMOwogICAgIH0KICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgp
ID09IFRodW1iUGFydCkKLSAgICAgICAgcmV0dXJuICFpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigp
ID8gQUJTX0RPV05OT1JNQUwgOiBBQlNfRE9XTkhPVkVSOworICAgICAgICByZXR1cm4gKHdpbmRv
d3NWZXJzaW9uKCkgPCBXaW5kb3dzVmlzdGEpID8gQUJTX0RPV05OT1JNQUwgOiBBQlNfRE9XTkhP
VkVSOwogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBBQlNf
RE9XTkRJU0FCTEVEOwogICAgIGlmIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgIT0gcGFydCkK
LSAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkgfHwg
IWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpID8gQUJTX0RPV05OT1JNQUwgOiBBQlNfRE9XTkhP
VkVSOworICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0
KSB8fCAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkpID8gQUJTX0RPV05OT1JNQUwg
OiBBQlNfRE9XTkhPVkVSOwogICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gTm9Q
YXJ0KQogICAgICAgICByZXR1cm4gQUJTX0RPV05IT1Q7CiAgICAgcmV0dXJuIChzY3JvbGxiYXIt
PnByZXNzZWRQYXJ0KCkgPT0gcGFydCkgPyBBQlNfRE9XTlBSRVNTRUQgOiBBQlNfRE9XTk5PUk1B
TDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBo
UGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4u
Y3BwCShyZXZpc2lvbiA4MDYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzQsNyArMTM0LDcgQEAgc3RhdGljIGJvb2wgZmlsbEJNUEdseXBocyh1bnNpZ25lZCBv
ZmZzZQogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwogICAgIGludCBpbnZhbGlkR2x5cGgg
PSAweEZGRkY7CiAgICAgY29uc3QgRFdPUkQgY2ZmVGFibGVUYWcgPSAweDIwNDY0NjQzOyAvLyA0
LWJ5dGUgaWRlbnRpZmllciBmb3IgT3BlblR5cGUgQ0ZGIHRhYmxlICgnQ0ZGICcpLgotICAgIGlm
ICghaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSAmJiAhKHRtLnRtUGl0Y2hBbmRGYW1pbHkgJiBU
TVBGX1RSVUVUWVBFKSAmJiAoR2V0Rm9udERhdGEoZGMsIGNmZlRhYmxlVGFnLCAwLCAwLCAwKSA9
PSBHRElfRVJST1IpKQorICAgIGlmICgod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkg
JiYgISh0bS50bVBpdGNoQW5kRmFtaWx5ICYgVE1QRl9UUlVFVFlQRSkgJiYgKEdldEZvbnREYXRh
KGRjLCBjZmZUYWJsZVRhZywgMCwgMCwgMCkgPT0gR0RJX0VSUk9SKSkKICAgICAgICAgaW52YWxp
ZEdseXBoID0gMHgxRjsKIAogICAgIEdseXBoIHNwYWNlR2x5cGggPSAwOyAgLy8gR2x5cGggZm9y
IGEgc3BhY2UuIExhemlseSBmaWxsZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQ3Vyc29yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQ3Vyc29yV2luLmNwcAkocmV2aXNpb24gODA1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vQ3Vyc29yV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIklu
dFBvaW50LmgiCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogCkBAIC0zOSwyMCArNDAsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc3VwcG9ydHNBbHBoYUN1cnNvcnMoKSAKLXsKLSAgICBPU1ZFUlNJT05J
TkZPIG9zaW5mbyA9IHswfTsKLSAgICBvc2luZm8uZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVv
ZihPU1ZFUlNJT05JTkZPKTsKLSAgICBHZXRWZXJzaW9uRXgoJm9zaW5mbyk7Ci0gICAgcmV0dXJu
IG9zaW5mby5kd01ham9yVmVyc2lvbiA+IDUgfHwgKG9zaW5mby5kd01ham9yVmVyc2lvbiA9PSA1
ICYmIG9zaW5mby5kd01pbm9yVmVyc2lvbiA+IDApOwotfQotCiBzdGF0aWMgUGFzc1JlZlB0cjxT
aGFyZWRDdXJzb3I+IGNyZWF0ZVNoYXJlZEN1cnNvcihJbWFnZSogaW1nLCBjb25zdCBJbnRQb2lu
dCYgaG90U3BvdCkKIHsKICAgICBSZWZQdHI8U2hhcmVkQ3Vyc29yPiBpbXBsOwogCiAgICAgSW50
UG9pbnQgZWZmZWN0aXZlSG90U3BvdCA9IGRldGVybWluZUhvdFNwb3QoaW1nLCBob3RTcG90KTsK
LSAgICBzdGF0aWMgYm9vbCBkb0FscGhhID0gc3VwcG9ydHNBbHBoYUN1cnNvcnMoKTsKKyAgICBz
dGF0aWMgYm9vbCBkb0FscGhhID0gR2V0V2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzWFA7CiAg
ICAgQml0bWFwSW5mbyBjdXJzb3JJbWFnZSA9IEJpdG1hcEluZm86OmNyZWF0ZShJbnRTaXplKGlt
Zy0+d2lkdGgoKSwgaW1nLT5oZWlnaHQoKSkpOwogCiAgICAgSERDIGRjID0gR2V0REMoMCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdp
bi5jcHAJKHJldmlzaW9uIDgwNTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Nj
cm9sbGJhclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIFNj
cm9sbGJhclRoZW1lV2luOjpTY3JvbGxiYXJUaGVtZVdpbigpCiAgICAgaWYgKCFpbml0aWFsaXpl
ZCkgewogICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgIGNoZWNrQW5kSW5pdFNj
cm9sbGJhclRoZW1lKCk7Ci0gICAgICAgIHJ1bm5pbmdWaXN0YSA9IGlzUnVubmluZ09uVmlzdGFP
ckxhdGVyKCk7CisgICAgICAgIHJ1bm5pbmdWaXN0YSA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdp
bmRvd3NWaXN0YSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vU3lzdGVtSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1N5c3RlbUluZm8uY3BwCShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzAgKzI3LDg2
IEBACiAjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogCiAjaW5jbHVkZSA8d2luZG93cy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotYm9vbCBpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpCitXaW5kb3dzVmVyc2lvbiB3aW5k
b3dzVmVyc2lvbihpbnQqIG1ham9yLCBpbnQqIG1pbm9yKQogeworICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIFdpbmRvd3NWZXJzaW9uIHZlcnNpb24gPSBV
bmtub3duV2luZG93c1ZlcnNpb247CisgICAgc3RhdGljIGludCBtYWpvclZlcnNpb24gPSAwLCBt
aW5vclZlcnNpb24gPSAwOworCisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpbml0
aWFsaXplZCA9IHRydWU7CiAjaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB2ZXJzaW9uID0gV2luZG93c0NFOwogI2Vsc2UKLSAgICBzdGF0aWMgYm9vbCBpc1Zpc3RhT3JM
YXRlcjsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKLQotICAgIGlmIChpbml0aWFsaXpl
ZCkKLSAgICAgICAgcmV0dXJuIGlzVmlzdGFPckxhdGVyOwotCi0gICAgaW5pdGlhbGl6ZWQgPSB0
cnVlOwotCi0gICAgT1NWRVJTSU9OSU5GT0VYIHZpID0gezB9OwotICAgIHZpLmR3T1NWZXJzaW9u
SW5mb1NpemUgPSBzaXplb2YoT1NWRVJTSU9OSU5GT0VYKTsKLSAgICBHZXRWZXJzaW9uRXgocmVp
bnRlcnByZXRfY2FzdDxPU1ZFUlNJT05JTkZPKj4oJnZpKSk7CisgICAgICAgIE9TVkVSU0lPTklO
Rk9FWCB2ZXJzaW9uSW5mbyA9IHswfTsKKyAgICAgICAgdmVyc2lvbkluZm8uZHdPU1ZlcnNpb25J
bmZvU2l6ZSA9IHNpemVvZih2ZXJzaW9uSW5mbyk7CisgICAgICAgIEdldFZlcnNpb25FeChyZWlu
dGVycHJldF9jYXN0PE9TVkVSU0lPTklORk8qPigmdmVyc2lvbkluZm8pKTsKKyAgICAgICAgbWFq
b3JWZXJzaW9uID0gdmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb247CisgICAgICAgIG1pbm9yVmVy
c2lvbiA9IHZlcnNpb25JbmZvLmR3TWlub3JWZXJzaW9uOworCisgICAgICAgIGlmICh2ZXJzaW9u
SW5mby5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMycykKKyAgICAgICAgICAgIHZl
cnNpb24gPSBXaW5kb3dzM18xOworICAgICAgICBlbHNlIGlmICh2ZXJzaW9uSW5mby5kd1BsYXRm
b3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MpIHsKKyAgICAgICAgICAgIGlmICht
aW5vclZlcnNpb24gPT0gMCkKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gV2luZG93czk1Owor
ICAgICAgICAgICAgZWxzZSBpZiAobWlub3JWZXJzaW9uID09IDEwKQorICAgICAgICAgICAgICAg
IHZlcnNpb24gPSBXaW5kb3dzOTg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
dmVyc2lvbiA9IFdpbmRvd3NNRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICht
YWpvclZlcnNpb24gPT0gMykKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gV2luZG93c05UMzsK
KyAgICAgICAgICAgIGVsc2UgaWYgKG1ham9yVmVyc2lvbiA9PSA0KQorICAgICAgICAgICAgICAg
IHZlcnNpb24gPSBXaW5kb3dzTlQ0OworICAgICAgICAgICAgZWxzZSBpZiAobWFqb3JWZXJzaW9u
ID09IDUpIHsKKyAgICAgICAgICAgICAgICBpZiAobWlub3JWZXJzaW9uID09IDApCisgICAgICAg
ICAgICAgICAgICAgIHZlcnNpb24gPSBXaW5kb3dzMjAwMDsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChtaW5vclZlcnNpb24gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IFdp
bmRvd3NYUDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHZlcnNp
b24gPSBXaW5kb3dzU2VydmVyMjAwMzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgaWYgKHZlcnNpb25JbmZvLndQcm9kdWN0VHlwZSA9PSBWRVJfTlRfV09SS1NUQVRJT04p
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1pbm9yVmVyc2lvbiA9PSAwKQorICAgICAgICAg
ICAgICAgICAgICAgICAgdmVyc2lvbiA9IFdpbmRvd3NWaXN0YTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IFdpbmRvd3M3OworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gV2luZG93
c1NlcnZlcjIwMDg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KIAot
ICAgIGlzVmlzdGFPckxhdGVyID0gdmkuZHdNYWpvclZlcnNpb24gPj0gNjsKKyAgICBpZiAobWFq
b3IpCisgICAgICAgICptYWpvciA9IG1ham9yVmVyc2lvbjsKKyAgICBpZiAobWlub3IpCisgICAg
ICAgICptaW5vciA9IG1pbm9yVmVyc2lvbjsKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KIAotICAg
IHJldHVybiBpc1Zpc3RhT3JMYXRlcjsKLSNlbmRpZgorU3RyaW5nIHdpbmRvd3NWZXJzaW9uRm9y
VUFTdHJpbmcoKQoreworICAgIGludCBtYWpvciwgbWlub3I7CisgICAgV2luZG93c1ZlcnNpb24g
dmVyc2lvbiA9IHdpbmRvd3NWZXJzaW9uKCZtYWpvciwgJm1pbm9yKTsKKyAgICBzd2l0Y2ggKHZl
cnNpb24pIHsKKyAgICBjYXNlIFdpbmRvd3MzXzE6CisgICAgICAgIHJldHVybiAiV2luZG93cyAz
LjEiOworICAgIGNhc2UgV2luZG93czk1OgorICAgICAgICByZXR1cm4gIldpbmRvd3MgOTUiOwor
ICAgIGNhc2UgV2luZG93czk4OgorICAgICAgICByZXR1cm4gIldpbmRvd3MgOTgiOworICAgIGNh
c2UgV2luZG93c01FOgorICAgICAgICByZXR1cm4gIldpbmRvd3MgOTg7IFdpbiA5eCA0LjkwIjsK
KyAgICBjYXNlIFdpbmRvd3NOVDQ6CisgICAgICAgIHJldHVybiAiV2luTlQ0LjAiOworICAgIH0K
KyAgICBjaGFyKiBmYW1pbHlOYW1lID0gKHZlcnNpb24gPj0gV2luZG93c05UMykgPyAiV2luZG93
cyBOVCAiIDogIldpbmRvd3MgIjsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhmYW1pbHlOYW1lLCBT
dHJpbmc6Om51bWJlcihtYWpvciksICcuJywgU3RyaW5nOjpudW1iZXIobWlub3IpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1N5c3RlbUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
U3lzdGVtSW5mby5oCShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9TeXN0ZW1JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDM5IEBACiAjaWZu
ZGVmIFN5c3RlbUluZm9faAogI2RlZmluZSBTeXN0ZW1JbmZvX2gKIAorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgaXNSdW5uaW5n
T25WaXN0YU9yTGF0ZXIoKTsKKy8vIE5PVEU6IEtlZXAgdGhlc2UgaW4gb3JkZXIgc28gY2FsbGVy
cyBjYW4gZG8gdGhpbmdzIGxpa2UKKy8vICJpZiAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dz
VmlzdGEpIC4uLiIuICBJdCdzIE9LIHRvIGNoYW5nZSBvciBhZGQKKy8vIHZhbHVlcywgdGhvdWdo
LgorZW51bSBXaW5kb3dzVmVyc2lvbiB7CisgICAgVW5rbm93bldpbmRvd3NWZXJzaW9uID0gMCwK
KyAgICAvLyBDRS1iYXNlZCB2ZXJzaW9ucworICAgIFdpbmRvd3NDRSwKKyAgICAvLyAzLngtYmFz
ZWQgdmVyc2lvbnMKKyAgICBXaW5kb3dzM18xLAorICAgIC8vIDl4LWJhc2VkIHZlcnNpb25zCisg
ICAgV2luZG93czk1LAorICAgIFdpbmRvd3M5OCwKKyAgICBXaW5kb3dzTUUsCisgICAgLy8gTlQt
YmFzZWQgdmVyc2lvbnMKKyAgICBXaW5kb3dzTlQzLAorICAgIFdpbmRvd3NOVDQsCisgICAgV2lu
ZG93czIwMDAsCisgICAgV2luZG93c1hQLAorICAgIFdpbmRvd3NTZXJ2ZXIyMDAzLAorICAgIFdp
bmRvd3NWaXN0YSwKKyAgICBXaW5kb3dzU2VydmVyMjAwOCwKKyAgICBXaW5kb3dzNywKK307CisK
Ky8vIElmIHN1cHBsaWVkLCB8bWFqb3J8IGFuZCB8bWlub3J8IGFyZSBzZXQgdG8gdGhlIE9TVkVS
U0lPTklORk86OmR3TWFqb3JWZXJzaW9uCisvLyBhbmQgZHdNaW5vclZlcnNpb24gZmllbGQgdmFs
dWVzLCByZXNwZWN0aXZlbHkuCitXaW5kb3dzVmVyc2lvbiB3aW5kb3dzVmVyc2lvbihpbnQqIG1h
am9yID0gTlVMTCwgaW50KiBtaW5vciA9IE5VTEwpOworCitTdHJpbmcgd2luZG93c1ZlcnNpb25G
b3JVQVN0cmluZygpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHJl
dmlzaW9uIDgwNjExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDggQEAgYm9vbCBUaGVt
ZVBhaW50ZXI6OnNfaGFzSW5zdGFuY2UgPSBmYWxzZQogCiBzdGF0aWMgdm9pZCBnZXROb25DbGll
bnRNZXRyaWNzKE5PTkNMSUVOVE1FVFJJQ1MqIG1ldHJpY3MpCiB7Ci0gICAgc3RhdGljIFVJTlQg
c2l6ZSA9IGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPwotICAgICAgICBzaXplb2YoTk9OQ0xJ
RU5UTUVUUklDUykgOiBOT05DTElFTlRNRVRSSUNTX1NJWkVfUFJFX1ZJU1RBOworICAgIHN0YXRp
YyBVSU5UIHNpemUgPSAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzVmlzdGEpID8KKyAgICAg
ICAgKHNpemVvZiBOT05DTElFTlRNRVRSSUNTKSA6IE5PTkNMSUVOVE1FVFJJQ1NfU0laRV9QUkVf
VklTVEE7CiAgICAgbWV0cmljcy0+Y2JTaXplID0gc2l6ZTsKICAgICBib29sIHN1Y2Nlc3MgPSAh
IVN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBzaXplLCBtZXRy
aWNzLCAwKTsKICAgICBBU1NFUlQoc3VjY2Vzcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDgwNTc3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY5
LDE1ICs1NjksMTcgQEAgVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luOjpnZXRUaGVtZURhdGEoUgog
ICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICAgICAgY2FzZSBNZW51
bGlzdEJ1dHRvblBhcnQ6Ci0gICAgICAgICAgICByZXN1bHQubV9wYXJ0ID0gaXNSdW5uaW5nT25W
aXN0YU9yTGF0ZXIoKSA/IENQX0RST1BET1dOQlVUVE9OUklHSFQgOiBDUF9EUk9QRE9XTkJVVFRP
TjsKLSAgICAgICAgICAgIGlmIChpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpICYmIGRvY3VtZW50
SXNJbkFwcGxpY2F0aW9uQ2hyb21lTW9kZShvLT5kb2N1bWVudCgpKSkgeworICAgICAgICBjYXNl
IE1lbnVsaXN0QnV0dG9uUGFydDogeworICAgICAgICAgICAgY29uc3QgYm9vbCBpc1Zpc3RhT3JM
YXRlciA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSk7CisgICAgICAgICAgICBy
ZXN1bHQubV9wYXJ0ID0gaXNWaXN0YU9yTGF0ZXIgPyBDUF9EUk9QRE9XTkJVVFRPTlJJR0hUIDog
Q1BfRFJPUERPV05CVVRUT047CisgICAgICAgICAgICBpZiAoaXNWaXN0YU9yTGF0ZXIgJiYgZG9j
dW1lbnRJc0luQXBwbGljYXRpb25DaHJvbWVNb2RlKG8tPmRvY3VtZW50KCkpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gVGhlICJyZWFkb25seSIgbG9vayB3ZSB1c2UgaW4gYXBwbGljYXRpb24gY2hy
b21lIG1vZGUKICAgICAgICAgICAgICAgICAvLyBvbmx5IHVzZXMgYSAibm9ybWFsIiBsb29rIGZv
ciB0aGUgZHJvcCBkb3duIGJ1dHRvbi4KICAgICAgICAgICAgICAgICByZXN1bHQubV9zdGF0ZSA9
IFRTX05PUk1BTDsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJlc3VsdC5t
X3N0YXRlID0gZGV0ZXJtaW5lU3RhdGUobyk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgICAgICBjYXNlIFJhZGlvUGFydDoKICAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBC
UF9SQURJTzsKICAgICAgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gZGV0ZXJtaW5lU3RhdGUobyk7
CkBAIC01ODUsNyArNTg3LDcgQEAgVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luOjpnZXRUaGVtZURh
dGEoUgogICAgICAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKICAgICAgICAgY2FzZSBUZXh0Rmll
bGRQYXJ0OgogICAgICAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICAgICAgICAgIHJlc3VsdC5t
X3BhcnQgPSBpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpID8gRVBfRURJVEJPUkRFUl9OT1NDUk9M
TCA6IFRGUF9URVhURklFTEQ7CisgICAgICAgICAgICByZXN1bHQubV9wYXJ0ID0gKHdpbmRvd3NW
ZXJzaW9uKCkgPj0gV2luZG93c1Zpc3RhKSA/IEVQX0VESVRCT1JERVJfTk9TQ1JPTEwgOiBURlBf
VEVYVEZJRUxEOwogICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShv
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0
OgpAQCAtNzI4LDcgKzczMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3Qo
UmVuZGUKIHsKICAgICBIQU5ETEUgdGhlbWU7CiAgICAgaW50IHBhcnQ7Ci0gICAgaWYgKGhhdmVU
aGVtZSAmJiBpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpKSB7CisgICAgaWYgKGhhdmVUaGVtZSAm
JiAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzVmlzdGEpKSB7CiAgICAgICAgIHRoZW1lID0g
bWVudUxpc3RUaGVtZSgpOwogICAgICAgICBpZiAoZG9jdW1lbnRJc0luQXBwbGljYXRpb25DaHJv
bWVNb2RlKG8tPmRvY3VtZW50KCkpKQogICAgICAgICAgICAgcGFydCA9IENQX1JFQURPTkxZOwpA
QCAtNzkyLDcgKzc5NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3RCdXR0
b24KICAgICAgICAgYnV0dG9uUmVjdC5zZXRYKGJ1dHRvblJlY3QubWF4WCgpIC0gZHJvcERvd25C
dXR0b25XaWR0aCk7CiAgICAgYnV0dG9uUmVjdC5zZXRXaWR0aChkcm9wRG93bkJ1dHRvbldpZHRo
KTsKIAotICAgIGlmIChpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpKSB7CisgICAgaWYgKCh3aW5k
b3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSkpIHsKICAgICAgICAgLy8gT3V0c2V0IHRoZSB0
b3AsIHJpZ2h0LCBhbmQgYm90dG9tIGJvcmRlcnMgb2YgdGhlIGJ1dHRvbiBzbyB0aGF0IHRoZXkg
Y29pbmNpZGUgd2l0aCB0aGUgPHNlbGVjdD4ncyBib3JkZXIuCiAgICAgICAgIGJ1dHRvblJlY3Qu
c2V0WShidXR0b25SZWN0LnkoKSAtIHZpc3RhTWVudUxpc3RCdXR0b25PdXRzZXQpOwogICAgICAg
ICBidXR0b25SZWN0LnNldEhlaWdodChidXR0b25SZWN0LmhlaWdodCgpICsgMiAqIHZpc3RhTWVu
dUxpc3RCdXR0b25PdXRzZXQpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gODA2NjcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAor
MjAxMS0wMy0wOSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5pZnkgV2luZG93cyB2
ZXJzaW9uIGNoZWNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU1OTc5CisKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQpOgor
CiAyMDExLTAzLTA5ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkIGJ1aWxkIGNvcnJlY3Rpb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCShyZXZpc2lvbiA4MDU3NykK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogCiAjaW5jbHVk
ZSAicmVzb3VyY2UuaCIKICNpbmNsdWRlIDx0Y2hhci5oPgpAQCAtMzYsMzAgKzM3LDYgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgU3Ry
aW5nIHdpbmRvd3NWZXJzaW9uKCkKLXsKLSAgIFN0cmluZyBvc1ZlcnNpb247Ci0gICBPU1ZFUlNJ
T05JTkZPIHZlcnNpb25JbmZvID0geyAwIH07Ci0gICB2ZXJzaW9uSW5mby5kd09TVmVyc2lvbklu
Zm9TaXplID0gc2l6ZW9mKHZlcnNpb25JbmZvKTsKLSAgIDo6R2V0VmVyc2lvbkV4KCZ2ZXJzaW9u
SW5mbyk7Ci0KLSAgIGlmICh2ZXJzaW9uSW5mby5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JN
X1dJTjMyX1dJTkRPV1MpIHsKLSAgICAgICBpZiAodmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb24g
PT0gNCkgewotICAgICAgICAgICBpZiAodmVyc2lvbkluZm8uZHdNaW5vclZlcnNpb24gPT0gMCkK
LSAgICAgICAgICAgICAgIG9zVmVyc2lvbiA9ICJXaW5kb3dzIDk1IjsKLSAgICAgICAgICAgZWxz
ZSBpZiAodmVyc2lvbkluZm8uZHdNaW5vclZlcnNpb24gPT0gMTApCi0gICAgICAgICAgICAgICBv
c1ZlcnNpb24gPSAiV2luZG93cyA5OCI7Ci0gICAgICAgICAgIGVsc2UgaWYgKHZlcnNpb25JbmZv
LmR3TWlub3JWZXJzaW9uID09IDkwKQotICAgICAgICAgICAgICAgb3NWZXJzaW9uID0gIldpbmRv
d3MgOTg7IFdpbiA5eCA0LjkwIjsKLSAgICAgICB9Ci0gICB9IGVsc2UgaWYgKHZlcnNpb25JbmZv
LmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQpCi0gICAgICAgb3NWZXJzaW9u
ID0gbWFrZVN0cmluZygiV2luZG93cyBOVCAiLCBTdHJpbmc6Om51bWJlcih2ZXJzaW9uSW5mby5k
d01ham9yVmVyc2lvbiksICcuJywgU3RyaW5nOjpudW1iZXIodmVyc2lvbkluZm8uZHdNaW5vclZl
cnNpb24pKTsKLQotICAgaWYgKCFvc1ZlcnNpb24ubGVuZ3RoKCkpCi0gICAgICAgb3NWZXJzaW9u
ID0gbWFrZVN0cmluZygiV2luZG93cyAiLCBTdHJpbmc6Om51bWJlcih2ZXJzaW9uSW5mby5kd01h
am9yVmVyc2lvbiksICcuJywgU3RyaW5nOjpudW1iZXIodmVyc2lvbkluZm8uZHdNaW5vclZlcnNp
b24pKTsKLSAgIHJldHVybiBvc1ZlcnNpb247Ci19Ci0KIHN0YXRpYyBTdHJpbmcgdXNlclZpc2li
bGVXZWJLaXRWZXJzaW9uU3RyaW5nKCkKIHsKICAgICBMUFdTVFIgYnVpbGROdW1iZXJTdHJpbmdQ
dHI7CkBAIC03MSwxMiArNDgsMTAgQEAgc3RhdGljIFN0cmluZyB1c2VyVmlzaWJsZVdlYktpdFZl
cnNpb25TdAogCiBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudChjb25zdCBT
dHJpbmcmIGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCkKIHsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgb3NWZXJzaW9uLCAod2luZG93c1ZlcnNpb24oKSkpOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBvc1ZlcnNpb24sICh3aW5kb3dzVmVyc2lvbkZvclVBU3Ry
aW5nKCkpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgd2ViS2l0VmVyc2lvbiwg
KHVzZXJWaXNpYmxlV2ViS2l0VmVyc2lvblN0cmluZygpKSk7CiAKLSAgICBpZiAoYXBwbGljYXRp
b25OYW1lRm9yVXNlckFnZW50LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmco
Ik1vemlsbGEvNS4wICgiLCBvc1ZlcnNpb24sICIpIEFwcGxlV2ViS2l0LyIsIHdlYktpdFZlcnNp
b24sICIgKEtIVE1MLCBsaWtlIEdlY2tvKSIpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJNb3pp
bGxhLzUuMCAoIiwgb3NWZXJzaW9uLCAiKSBBcHBsZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9uLCAi
IChLSFRNTCwgbGlrZSBHZWNrbykgIiwgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKKyAg
ICByZXR1cm4gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIG9zVmVyc2lvbiwgIikgQXBwbGVX
ZWJLaXQvIiwgd2ViS2l0VmVyc2lvbiwgIiAoS0hUTUwsIGxpa2UgR2Vja28pIiwgYXBwbGljYXRp
b25OYW1lRm9yVXNlckFnZW50LmlzRW1wdHkoKSA/ICIiIDogIiAiLCBhcHBsaWNhdGlvbk5hbWVG
b3JVc2VyQWdlbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cJKHJldmlzaW9uIDgwNjY3KQorKysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDMtMDkgIFBldGVyIEthc3Rpbmcg
IDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFVuaWZ5IFdpbmRvd3MgdmVyc2lvbiBjaGVja3MuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTk3OQorCisgICAgICAgICog
d2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcDoKKyAgICAgICAgKHdlYmtpdE9TVmVyc2lvbik6
CisKIDIwMTEtMDMtMDggIENocmlzdGlhbiBEeXdhbiAgPGNocmlzdGlhbkBsYW5lZG8uY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcAkocmV2aXNpb24gODA1Nzcp
CisrKyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBACiAKICNpZiBPUyhVTklYKQogI2luY2x1ZGUgPHN5
cy91dHNuYW1lLmg+CisjZWxpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIK
ICNlbmRpZgogCiAvKioKQEAgLTIwOCw3ICsyMTAsNyBAQCBzdGF0aWMgU3RyaW5nIHdlYmtpdE9T
VmVyc2lvbigpCiAgICAgZWxzZQogICAgICAgICB1YU9TVmVyc2lvbiA9IFN0cmluZygiVW5rbm93
biIpOwogI2VsaWYgT1MoV0lORE9XUykKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
cmluZywgdWFPU1ZlcnNpb24sIChTdHJpbmcoIldpbmRvd3MiKSkpOworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgU3RyaW5nLCB1YU9TVmVyc2lvbiwgKHdpbmRvd3NWZXJzaW9uRm9yVUFT
dHJpbmcoKSkpOwogI2Vsc2UKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywg
dWFPU1ZlcnNpb24sIChTdHJpbmcoIlVua25vd24iKSkpOwogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gODA2NjcpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTAzLTA5ICBQZXRlciBLYXN0aW5nICA8
cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBVbmlmeSBXaW5kb3dzIHZlcnNpb24gY2hlY2tzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU5NzkKKworICAgICAgICAqIEFw
aS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6dXNlckFnZW50Rm9yVXJsKToKKwog
MjAxMS0wMy0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJ
KHJldmlzaW9uIDgwNTc3KQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDkgQEAKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaWYg
ZGVmaW5lZCBRX09TX1dJTjMyCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgorI2VuZGlmIC8vIFFf
T1NfV0lOMzIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgpAQCAtMzc3NCwzNiAr
Mzc3Nyw3IEBAIFFTdHJpbmcgUVdlYlBhZ2U6OnVzZXJBZ2VudEZvclVybChjb25zdAogI2VsaWYg
ZGVmaW5lZCBRX09TX1dJTjMyCiAKICAgICAgICAgc3dpdGNoIChRU3lzSW5mbzo6V2luZG93c1Zl
cnNpb24pIHsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfMzJzOgotICAgICAgICAgICAgZmly
c3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIDMuMSIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86OldWXzk1OgotICAgICAgICAgICAg
Zmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIDk1Iik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfOTg6Ci0gICAgICAgICAg
ICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgOTgiKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9NZToKLSAgICAgICAg
ICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyA5ODsgV2lu
IDl4IDQuOTAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFTeXNJbmZvOjpX
Vl9OVDoKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgi
V2luTlQ0LjAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFTeXNJbmZvOjpX
Vl8yMDAwOgotICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCJXaW5kb3dzIE5UIDUuMCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5
c0luZm86OldWX1hQOgotICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9t
TGF0aW4xKCJXaW5kb3dzIE5UIDUuMSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgUVN5c0luZm86OldWXzIwMDM6Ci0gICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJp
bmc6OmZyb21MYXRpbjEoIldpbmRvd3MgTlQgNS4yIik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfVklTVEE6Ci0gICAgICAgICAgICBmaXJzdFBhcnRUZW1w
ICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgTlQgNi4wIik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgIGNhc2UgUVN5c0luZm86OldWX1dJTkRPV1M3OgotICAgICAgICAgICAg
Zmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIE5UIDYuMSIpOwot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAvLyBGSVhNRTogRXhwYW5kIHdpbmRvd3NWZXJz
aW9uRm9yVUFTdHJpbmcoKSB0byBjb3ZlciBXaW5kb3dzIENFLgogICAgICAgICAgY2FzZSBRU3lz
SW5mbzo6V1ZfQ0U6CiAgICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21M
YXRpbjEoIldpbmRvd3MgQ0UiKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzgxNiw2ICszNzkw
LDggQEAgUVN0cmluZyBRV2ViUGFnZTo6dXNlckFnZW50Rm9yVXJsKGNvbnN0CiAgICAgICAgICBj
YXNlIFFTeXNJbmZvOjpXVl9DRV82OgogICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIENFIDYueCIpOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSB3aW5kb3dzVmVy
c2lvbkZvclVBU3RyaW5nKCk7CiAgICAgICAgIH0KIAogI2VsaWYgZGVmaW5lZCBRX09TX0RBUldJ
TgpJbmRleDogU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gODA2NjcpCisrKyBTb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0wMy0w
OSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5pZnkgV2luZG93cyB2ZXJzaW9uIGNo
ZWNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1
OTc5CisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnN0YW5kYXJk
VXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZSk6CisgICAgICAgICh3ZWJLaXRWZXJzaW9uU3Ry
aW5nKToKKwogMjAxMS0wMy0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2lu
L1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3Bw
CShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIk1hcnNoYWxsaW5nSGVscGVycy5oIgogI2luY2x1ZGUgIlNv
ZnRMaW5raW5nLmgiCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogI2luY2x1ZGUgIldlYkJhY2tG
b3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgIldlYkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIldl
YkNvbnRleHRNZW51Q2xpZW50LmgiCkBAIC0xODQsOCArMTg1LDcgQEAgdXNpbmcgSlNDOjpKU0xv
Y2s7CiBzdGF0aWMgSE1PRFVMRSBhY2Nlc3NpYmlsaXR5TGliOwogc3RhdGljIEhhc2hTZXQ8V2Vi
Vmlldyo+IHBlbmRpbmdEZWxldGVCYWNraW5nU3RvcmVTZXQ7CiAKLXN0YXRpYyBTdHJpbmcgb3NW
ZXJzaW9uKCk7Ci1zdGF0aWMgU3RyaW5nIHdlYktpdFZlcnNpb24oKTsKK3N0YXRpYyBTdHJpbmcg
d2ViS2l0VmVyc2lvblN0cmluZygpOwogCiBXZWJWaWV3KiBraXQoUGFnZSogcGFnZSkKIHsKQEAg
LTEyNDQsOSArMTI0NCwxMCBAQCBib29sIFdlYlZpZXc6OmNhbkhhbmRsZVJlcXVlc3QoY29uc3Qg
V2ViCiAKIFN0cmluZyBXZWJWaWV3OjpzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5h
bWUoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWUpCiB7Ci0gICAgaWYgKGFwcGxpY2F0aW9u
TmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJNb3ppbGxhLzUuMCAo
Iiwgb3NWZXJzaW9uKCksICIpIEFwcGxlV2ViS2l0LyIsIHdlYktpdFZlcnNpb24oKSwgIiAoS0hU
TUwsIGxpa2UgR2Vja28pIik7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgi
LCBvc1ZlcnNpb24oKSwgIikgQXBwbGVXZWJLaXQvIiwgd2ViS2l0VmVyc2lvbigpLCAiIChLSFRN
TCwgbGlrZSBHZWNrbykgIiwgYXBwbGljYXRpb25OYW1lKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFN0cmluZywgb3NWZXJzaW9uLCAod2luZG93c1ZlcnNpb25Gb3JVQVN0cmluZygpKSk7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHdlYktpdFZlcnNpb24sICh3ZWJLaXRWZXJz
aW9uU3RyaW5nKCkpKTsKKworICAgIHJldHVybiBtYWtlU3RyaW5nKCJNb3ppbGxhLzUuMCAoIiwg
b3NWZXJzaW9uLCAiKSBBcHBsZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9uLCAiIChLSFRNTCwgbGlr
ZSBHZWNrbykiLCBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQuaXNFbXB0eSgpID8gIiIgOiAi
ICIsIGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CiB9CiAKIFBhZ2UqIFdlYlZpZXc6OnBh
Z2UoKQpAQCAtMjMzNiwzMSArMjMzNyw3IEBAIGJvb2wgV2ViVmlldzo6ZGV2ZWxvcGVyRXh0cmFz
RW5hYmxlZCgpIGMKICNlbmRpZgogfQogCi1zdGF0aWMgU3RyaW5nIG9zVmVyc2lvbigpCi17Ci0g
ICAgU3RyaW5nIG9zVmVyc2lvbjsKLSAgICBPU1ZFUlNJT05JTkZPIHZlcnNpb25JbmZvID0gezB9
OwotICAgIHZlcnNpb25JbmZvLmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YodmVyc2lvbklu
Zm8pOwotICAgIEdldFZlcnNpb25FeCgmdmVyc2lvbkluZm8pOwotCi0gICAgaWYgKHZlcnNpb25J
bmZvLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUykgewotICAgICAg
ICBpZiAodmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb24gPT0gNCkgewotICAgICAgICAgICAgaWYg
KHZlcnNpb25JbmZvLmR3TWlub3JWZXJzaW9uID09IDApCi0gICAgICAgICAgICAgICAgb3NWZXJz
aW9uID0gIldpbmRvd3MgOTUiOwotICAgICAgICAgICAgZWxzZSBpZiAodmVyc2lvbkluZm8uZHdN
aW5vclZlcnNpb24gPT0gMTApCi0gICAgICAgICAgICAgICAgb3NWZXJzaW9uID0gIldpbmRvd3Mg
OTgiOwotICAgICAgICAgICAgZWxzZSBpZiAodmVyc2lvbkluZm8uZHdNaW5vclZlcnNpb24gPT0g
OTApCi0gICAgICAgICAgICAgICAgb3NWZXJzaW9uID0gIldpbmRvd3MgOTg7IFdpbiA5eCA0Ljkw
IjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodmVyc2lvbkluZm8uZHdQbGF0Zm9ybUlkID09
IFZFUl9QTEFURk9STV9XSU4zMl9OVCkKLSAgICAgICAgb3NWZXJzaW9uID0gbWFrZVN0cmluZygi
V2luZG93cyBOVCAiLCBTdHJpbmc6Om51bWJlcih2ZXJzaW9uSW5mby5kd01ham9yVmVyc2lvbiks
ICcuJywgU3RyaW5nOjpudW1iZXIodmVyc2lvbkluZm8uZHdNaW5vclZlcnNpb24pKTsKLQotICAg
IGlmICghb3NWZXJzaW9uLmxlbmd0aCgpKQotICAgICAgICBvc1ZlcnNpb24gPSBtYWtlU3RyaW5n
KCJXaW5kb3dzICIsIFN0cmluZzo6bnVtYmVyKHZlcnNpb25JbmZvLmR3TWFqb3JWZXJzaW9uKSwg
Jy4nLCBTdHJpbmc6Om51bWJlcih2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbikpOwotICAgIHJl
dHVybiBvc1ZlcnNpb247Ci19Ci0KLXN0YXRpYyBTdHJpbmcgd2ViS2l0VmVyc2lvbigpCitzdGF0
aWMgU3RyaW5nIHdlYktpdFZlcnNpb25TdHJpbmcoKQogewogICAgIExQV1NUUiBidWlsZE51bWJl
clN0cmluZ1B0cjsKICAgICBpZiAoITo6TG9hZFN0cmluZ1coZ0luc3RhbmNlLCBCVUlMRF9OVU1C
RVIsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmYnVpbGROdW1iZXJTdHJpbmdQdHIpLCAwKSB8
fCAhYnVpbGROdW1iZXJTdHJpbmdQdHIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85248</attachid>
            <date>2011-03-09 15:50:04 -0800</date>
            <delta_ts>2011-03-09 17:55:22 -0800</delta_ts>
            <desc>Part 2, v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>28848</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjY3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDMtMDkgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVuaWZ5IFdpbmRvd3MgdmVyc2lvbiBjaGVja3MuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTk3OQorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogU3RyaW5nc05vdFRvQmVMb2NhbGl6ZWQu
dHh0OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1X
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6aW52
YWxpZGF0ZU9uTW91c2VFbnRlckV4aXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bVdpbjo6Z2V0VGhlbWVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZUFycm93U3RhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZmlsbEJNUEdseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vd2lu
L0N1cnNvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTaGFyZWRDdXJzb3IpOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6U2Nyb2xsYmFyVGhlbWVXaW4pOgorICAgICAgICAq
IHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NW
ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcpOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Tm9uQ2xp
ZW50TWV0cmljcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpnZXRUaGVtZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3RCdXR0b24pOgorCiAyMDExLTAzLTA5ICBH
YXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA4
MDYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0zODUxLDggKzM4NTEsOCBAQCBpZiBUQVJHRVRfV0lOMzIKIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oIFwKLSAgICBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAgXAotICAgIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9T
eXN0ZW1JbmZvLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8u
aCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldp
bi5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9TdHJpbmdzTm90VG9CZUxvY2FsaXplZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU3RyaW5nc05vdFRvQmVMb2NhbGl6ZWQudHh0CShy
ZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL1N0cmluZ3NOb3RUb0JlTG9jYWxpemVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTExLDkgKzUxMSwxMSBAQAogIldlYlZpZXdXaW5kb3dD
bGFzcyIKICJXZWJXb3JrZXJzUHJpdmF0ZSIKICJXaW5kb3dzICIKKyJXaW5kb3dzIDMuMSIKICJX
aW5kb3dzIDk1IgogIldpbmRvd3MgOTgiCiAiV2luZG93cyA5ODsgV2luIDl4IDQuOTAiCisiV2lu
TlQ0LjAiCiAiV2luZG93cyBOVCAiCiAiV212UGx1Z2luIgogIlhTTCIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRo
ZW1lQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA4MDYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw3ICs3MCw3IEBAIGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpzY3Jv
bGxiYXIKIAogYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjppbnZhbGlkYXRlT25Nb3Vz
ZUVudGVyRXhpdCgpCiB7Ci0gICAgcmV0dXJuIGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCk7Cisg
ICAgcmV0dXJuIHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93c1Zpc3RhOwogfQogCiBib29sIFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKQEAgLTE2MCwx
MiArMTYwLDEyIEBAIGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZVMKICAg
ICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkgewogICAgICAgICBp
ZiAocGFydCA9PSBUaHVtYlBhcnQpCiAgICAgICAgICAgICByZXR1cm4gU0NSQlNfUFJFU1NFRDsK
LSAgICAgICAgcmV0dXJuIGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBTQ1JCU19IT1ZFUiA6
IFNDUkJTX05PUk1BTDsKKyAgICAgICAgcmV0dXJuICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93
c1Zpc3RhKSA/IFNDUkJTX05PUk1BTCA6IFNDUkJTX0hPVkVSOwogICAgIH0KICAgICBpZiAoIXNj
cm9sbGJhci0+ZW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gU0NSQlNfRElTQUJMRUQ7CiAgICAg
aWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBwYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNr
UGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQpCi0gICAgICAgIHJldHVybiAoc2Nyb2xs
YmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCB8fCAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIo
KSkgPyBTQ1JCU19OT1JNQUwgOiBTQ1JCU19IT1ZFUjsKKyAgICAgICAgcmV0dXJuIChzY3JvbGxi
YXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0IHx8ICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93
c1Zpc3RhKSkgPyBTQ1JCU19OT1JNQUwgOiBTQ1JCU19IT1ZFUjsKICAgICBpZiAoc2Nyb2xsYmFy
LT5wcmVzc2VkUGFydCgpID09IE5vUGFydCkKICAgICAgICAgcmV0dXJuIFNDUkJTX0hPVDsKICAg
ICByZXR1cm4gKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBwYXJ0KSA/IFNDUkJTX1BSRVNT
RUQgOiBTQ1JCU19OT1JNQUw7CkBAIC0xNzksNDMgKzE3OSw0MyBAQCBpbnQgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bVdpbjo6Z2V0VGhlbWVBCiAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0
UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQpIHsKICAgICAgICAgaWYgKHNj
cm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAg
ICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBBQlNfTEVGVE5PUk1B
TCA6IEFCU19MRUZUSE9WRVI7CisgICAgICAgICAgICAgICAgcmV0dXJuICh3aW5kb3dzVmVyc2lv
bigpIDwgV2luZG93c1Zpc3RhKSA/IEFCU19MRUZUTk9STUFMIDogQUJTX0xFRlRIT1ZFUjsKICAg
ICAgICAgICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEFCU19MRUZURElTQUJMRUQ7CiAgICAgICAgICAgICBpZiAoc2Nyb2xsYmFyLT5ob3ZlcmVk
UGFydCgpICE9IHBhcnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3Zl
cmVkUGFydCgpID09IE5vUGFydCkgfHwgIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpID8gQUJT
X0xFRlROT1JNQUwgOiBBQlNfTEVGVEhPVkVSOworICAgICAgICAgICAgICAgIHJldHVybiAoKHNj
cm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQpIHx8ICh3aW5kb3dzVmVyc2lvbigpIDwg
V2luZG93c1Zpc3RhKSkgPyBBQlNfTEVGVE5PUk1BTCA6IEFCU19MRUZUSE9WRVI7CiAgICAgICAg
ICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IE5vUGFydCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gQUJTX0xFRlRIT1Q7CiAgICAgICAgICAgICByZXR1cm4gKHNjcm9sbGJhci0+
cHJlc3NlZFBhcnQoKSA9PSBwYXJ0KSA/CiAgICAgICAgICAgICAgICAgQUJTX0xFRlRQUkVTU0VE
IDogQUJTX0xFRlROT1JNQUw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNjcm9sbGJhci0+cHJl
c3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCi0gICAgICAgICAgICByZXR1cm4gIWlzUnVubmluZ09u
VmlzdGFPckxhdGVyKCkgPyBBQlNfVVBOT1JNQUwgOiBBQlNfVVBIT1ZFUjsKKyAgICAgICAgICAg
IHJldHVybiAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkgPyBBQlNfVVBOT1JNQUwg
OiBBQlNfVVBIT1ZFUjsKICAgICAgICAgaWYgKCFzY3JvbGxiYXItPmVuYWJsZWQoKSkKICAgICAg
ICAgICAgIHJldHVybiBBQlNfVVBESVNBQkxFRDsKICAgICAgICAgaWYgKHNjcm9sbGJhci0+aG92
ZXJlZFBhcnQoKSAhPSBwYXJ0KQotICAgICAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3Zl
cmVkUGFydCgpID09IE5vUGFydCkgfHwgIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpID8gQUJT
X1VQTk9STUFMIDogQUJTX1VQSE9WRVI7CisgICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXIt
PmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8fCAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NW
aXN0YSkpID8gQUJTX1VQTk9STUFMIDogQUJTX1VQSE9WRVI7CiAgICAgICAgIGlmIChzY3JvbGxi
YXItPnByZXNzZWRQYXJ0KCkgPT0gTm9QYXJ0KQogICAgICAgICAgICAgcmV0dXJuIEFCU19VUEhP
VDsKICAgICAgICAgcmV0dXJuIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gcGFydCkgPyBB
QlNfVVBQUkVTU0VEIDogQUJTX1VQTk9STUFMOwogICAgIH0KICAgICBpZiAoc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaWYgKHNjcm9s
bGJhci0+cHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCi0gICAgICAgICAgICByZXR1cm4gIWlz
UnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBBQlNfUklHSFROT1JNQUwgOiBBQlNfUklHSFRIT1ZF
UjsKKyAgICAgICAgICAgIHJldHVybiAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkg
PyBBQlNfUklHSFROT1JNQUwgOiBBQlNfUklHSFRIT1ZFUjsKICAgICAgICAgaWYgKCFzY3JvbGxi
YXItPmVuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBBQlNfUklHSFRESVNBQkxFRDsKICAg
ICAgICAgaWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBwYXJ0KQotICAgICAgICAgICAg
cmV0dXJuICgoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkgfHwgIWlzUnVubmlu
Z09uVmlzdGFPckxhdGVyKCkpID8gQUJTX1JJR0hUTk9STUFMIDogQUJTX1JJR0hUSE9WRVI7Cisg
ICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8
fCAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkpID8gQUJTX1JJR0hUTk9STUFMIDog
QUJTX1JJR0hUSE9WRVI7CiAgICAgICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0g
Tm9QYXJ0KQogICAgICAgICAgICAgcmV0dXJuIEFCU19SSUdIVEhPVDsKICAgICAgICAgcmV0dXJu
IChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gcGFydCkgPyBBQlNfUklHSFRQUkVTU0VEIDog
QUJTX1JJR0hUTk9STUFMOwogICAgIH0KICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgp
ID09IFRodW1iUGFydCkKLSAgICAgICAgcmV0dXJuICFpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigp
ID8gQUJTX0RPV05OT1JNQUwgOiBBQlNfRE9XTkhPVkVSOworICAgICAgICByZXR1cm4gKHdpbmRv
d3NWZXJzaW9uKCkgPCBXaW5kb3dzVmlzdGEpID8gQUJTX0RPV05OT1JNQUwgOiBBQlNfRE9XTkhP
VkVSOwogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBBQlNf
RE9XTkRJU0FCTEVEOwogICAgIGlmIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgIT0gcGFydCkK
LSAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkgfHwg
IWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpID8gQUJTX0RPV05OT1JNQUwgOiBBQlNfRE9XTkhP
VkVSOworICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0
KSB8fCAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkpID8gQUJTX0RPV05OT1JNQUwg
OiBBQlNfRE9XTkhPVkVSOwogICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gTm9Q
YXJ0KQogICAgICAgICByZXR1cm4gQUJTX0RPV05IT1Q7CiAgICAgcmV0dXJuIChzY3JvbGxiYXIt
PnByZXNzZWRQYXJ0KCkgPT0gcGFydCkgPyBBQlNfRE9XTlBSRVNTRUQgOiBBQlNfRE9XTk5PUk1B
TDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBo
UGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4u
Y3BwCShyZXZpc2lvbiA4MDYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzQsNyArMTM0LDcgQEAgc3RhdGljIGJvb2wgZmlsbEJNUEdseXBocyh1bnNpZ25lZCBv
ZmZzZQogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwogICAgIGludCBpbnZhbGlkR2x5cGgg
PSAweEZGRkY7CiAgICAgY29uc3QgRFdPUkQgY2ZmVGFibGVUYWcgPSAweDIwNDY0NjQzOyAvLyA0
LWJ5dGUgaWRlbnRpZmllciBmb3IgT3BlblR5cGUgQ0ZGIHRhYmxlICgnQ0ZGICcpLgotICAgIGlm
ICghaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSAmJiAhKHRtLnRtUGl0Y2hBbmRGYW1pbHkgJiBU
TVBGX1RSVUVUWVBFKSAmJiAoR2V0Rm9udERhdGEoZGMsIGNmZlRhYmxlVGFnLCAwLCAwLCAwKSA9
PSBHRElfRVJST1IpKQorICAgIGlmICgod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkg
JiYgISh0bS50bVBpdGNoQW5kRmFtaWx5ICYgVE1QRl9UUlVFVFlQRSkgJiYgKEdldEZvbnREYXRh
KGRjLCBjZmZUYWJsZVRhZywgMCwgMCwgMCkgPT0gR0RJX0VSUk9SKSkKICAgICAgICAgaW52YWxp
ZEdseXBoID0gMHgxRjsKIAogICAgIEdseXBoIHNwYWNlR2x5cGggPSAwOyAgLy8gR2x5cGggZm9y
IGEgc3BhY2UuIExhemlseSBmaWxsZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQ3Vyc29yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQ3Vyc29yV2luLmNwcAkocmV2aXNpb24gODA1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vQ3Vyc29yV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIklu
dFBvaW50LmgiCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogCkBAIC0zOSwyMCArNDAsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc3VwcG9ydHNBbHBoYUN1cnNvcnMoKSAKLXsKLSAgICBPU1ZFUlNJT05J
TkZPIG9zaW5mbyA9IHswfTsKLSAgICBvc2luZm8uZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVv
ZihPU1ZFUlNJT05JTkZPKTsKLSAgICBHZXRWZXJzaW9uRXgoJm9zaW5mbyk7Ci0gICAgcmV0dXJu
IG9zaW5mby5kd01ham9yVmVyc2lvbiA+IDUgfHwgKG9zaW5mby5kd01ham9yVmVyc2lvbiA9PSA1
ICYmIG9zaW5mby5kd01pbm9yVmVyc2lvbiA+IDApOwotfQotCiBzdGF0aWMgUGFzc1JlZlB0cjxT
aGFyZWRDdXJzb3I+IGNyZWF0ZVNoYXJlZEN1cnNvcihJbWFnZSogaW1nLCBjb25zdCBJbnRQb2lu
dCYgaG90U3BvdCkKIHsKICAgICBSZWZQdHI8U2hhcmVkQ3Vyc29yPiBpbXBsOwogCiAgICAgSW50
UG9pbnQgZWZmZWN0aXZlSG90U3BvdCA9IGRldGVybWluZUhvdFNwb3QoaW1nLCBob3RTcG90KTsK
LSAgICBzdGF0aWMgYm9vbCBkb0FscGhhID0gc3VwcG9ydHNBbHBoYUN1cnNvcnMoKTsKKyAgICBz
dGF0aWMgYm9vbCBkb0FscGhhID0gR2V0V2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzWFA7CiAg
ICAgQml0bWFwSW5mbyBjdXJzb3JJbWFnZSA9IEJpdG1hcEluZm86OmNyZWF0ZShJbnRTaXplKGlt
Zy0+d2lkdGgoKSwgaW1nLT5oZWlnaHQoKSkpOwogCiAgICAgSERDIGRjID0gR2V0REMoMCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdp
bi5jcHAJKHJldmlzaW9uIDgwNTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Nj
cm9sbGJhclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIFNj
cm9sbGJhclRoZW1lV2luOjpTY3JvbGxiYXJUaGVtZVdpbigpCiAgICAgaWYgKCFpbml0aWFsaXpl
ZCkgewogICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgIGNoZWNrQW5kSW5pdFNj
cm9sbGJhclRoZW1lKCk7Ci0gICAgICAgIHJ1bm5pbmdWaXN0YSA9IGlzUnVubmluZ09uVmlzdGFP
ckxhdGVyKCk7CisgICAgICAgIHJ1bm5pbmdWaXN0YSA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdp
bmRvd3NWaXN0YSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vU3lzdGVtSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1N5c3RlbUluZm8uY3BwCShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzAgKzI3LDg2
IEBACiAjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogCiAjaW5jbHVkZSA8d2luZG93cy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotYm9vbCBpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpCitXaW5kb3dzVmVyc2lvbiB3aW5k
b3dzVmVyc2lvbihpbnQqIG1ham9yLCBpbnQqIG1pbm9yKQogeworICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIFdpbmRvd3NWZXJzaW9uIHZlcnNpb24gPSBV
bmtub3duV2luZG93c1ZlcnNpb247CisgICAgc3RhdGljIGludCBtYWpvclZlcnNpb24gPSAwLCBt
aW5vclZlcnNpb24gPSAwOworCisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpbml0
aWFsaXplZCA9IHRydWU7CiAjaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB2ZXJzaW9uID0gV2luZG93c0NFOwogI2Vsc2UKLSAgICBzdGF0aWMgYm9vbCBpc1Zpc3RhT3JM
YXRlcjsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKLQotICAgIGlmIChpbml0aWFsaXpl
ZCkKLSAgICAgICAgcmV0dXJuIGlzVmlzdGFPckxhdGVyOwotCi0gICAgaW5pdGlhbGl6ZWQgPSB0
cnVlOwotCi0gICAgT1NWRVJTSU9OSU5GT0VYIHZpID0gezB9OwotICAgIHZpLmR3T1NWZXJzaW9u
SW5mb1NpemUgPSBzaXplb2YoT1NWRVJTSU9OSU5GT0VYKTsKLSAgICBHZXRWZXJzaW9uRXgocmVp
bnRlcnByZXRfY2FzdDxPU1ZFUlNJT05JTkZPKj4oJnZpKSk7CisgICAgICAgIE9TVkVSU0lPTklO
Rk9FWCB2ZXJzaW9uSW5mbyA9IHswfTsKKyAgICAgICAgdmVyc2lvbkluZm8uZHdPU1ZlcnNpb25J
bmZvU2l6ZSA9IHNpemVvZih2ZXJzaW9uSW5mbyk7CisgICAgICAgIEdldFZlcnNpb25FeChyZWlu
dGVycHJldF9jYXN0PE9TVkVSU0lPTklORk8qPigmdmVyc2lvbkluZm8pKTsKKyAgICAgICAgbWFq
b3JWZXJzaW9uID0gdmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb247CisgICAgICAgIG1pbm9yVmVy
c2lvbiA9IHZlcnNpb25JbmZvLmR3TWlub3JWZXJzaW9uOworCisgICAgICAgIGlmICh2ZXJzaW9u
SW5mby5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMycykKKyAgICAgICAgICAgIHZl
cnNpb24gPSBXaW5kb3dzM18xOworICAgICAgICBlbHNlIGlmICh2ZXJzaW9uSW5mby5kd1BsYXRm
b3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MpIHsKKyAgICAgICAgICAgIGlmICgh
bWlub3JWZXJzaW9uKQorICAgICAgICAgICAgICAgIHZlcnNpb24gPSBXaW5kb3dzOTU7CisgICAg
ICAgICAgICBlbHNlIGlmIChtaW5vclZlcnNpb24gPT0gMTApCisgICAgICAgICAgICAgICAgdmVy
c2lvbiA9IFdpbmRvd3M5ODsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2ZXJz
aW9uID0gV2luZG93c01FOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1ham9y
VmVyc2lvbiA9PSAzKQorICAgICAgICAgICAgICAgIHZlcnNpb24gPSBXaW5kb3dzTlQzOworICAg
ICAgICAgICAgZWxzZSBpZiAobWFqb3JWZXJzaW9uID09IDQpCisgICAgICAgICAgICAgICAgdmVy
c2lvbiA9IFdpbmRvd3NOVDQ7CisgICAgICAgICAgICBlbHNlIGlmIChtYWpvclZlcnNpb24gPT0g
NSkgeworICAgICAgICAgICAgICAgIGlmICghbWlub3JWZXJzaW9uKQorICAgICAgICAgICAgICAg
ICAgICB2ZXJzaW9uID0gV2luZG93czIwMDA7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobWlu
b3JWZXJzaW9uID09IDEpCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSBXaW5kb3dzWFA7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gV2lu
ZG93c1NlcnZlcjIwMDM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm
ICh2ZXJzaW9uSW5mby53UHJvZHVjdFR5cGUgPT0gVkVSX05UX1dPUktTVEFUSU9OKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghbWlub3JWZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdmVyc2lvbiA9IFdpbmRvd3NWaXN0YTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IFdpbmRvd3M3OworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gV2luZG93c1NlcnZlcjIwMDg7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KIAotICAgIGlzVmlzdGFP
ckxhdGVyID0gdmkuZHdNYWpvclZlcnNpb24gPj0gNjsKKyAgICBpZiAobWFqb3IpCisgICAgICAg
ICptYWpvciA9IG1ham9yVmVyc2lvbjsKKyAgICBpZiAobWlub3IpCisgICAgICAgICptaW5vciA9
IG1pbm9yVmVyc2lvbjsKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KIAotICAgIHJldHVybiBpc1Zp
c3RhT3JMYXRlcjsKLSNlbmRpZgorU3RyaW5nIHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKQor
eworICAgIGludCBtYWpvciwgbWlub3I7CisgICAgV2luZG93c1ZlcnNpb24gdmVyc2lvbiA9IHdp
bmRvd3NWZXJzaW9uKCZtYWpvciwgJm1pbm9yKTsKKyAgICBzd2l0Y2ggKHZlcnNpb24pIHsKKyAg
ICBjYXNlIFdpbmRvd3MzXzE6CisgICAgICAgIHJldHVybiAiV2luZG93cyAzLjEiOworICAgIGNh
c2UgV2luZG93czk1OgorICAgICAgICByZXR1cm4gIldpbmRvd3MgOTUiOworICAgIGNhc2UgV2lu
ZG93czk4OgorICAgICAgICByZXR1cm4gIldpbmRvd3MgOTgiOworICAgIGNhc2UgV2luZG93c01F
OgorICAgICAgICByZXR1cm4gIldpbmRvd3MgOTg7IFdpbiA5eCA0LjkwIjsKKyAgICBjYXNlIFdp
bmRvd3NOVDQ6CisgICAgICAgIHJldHVybiAiV2luTlQ0LjAiOworICAgIH0KKyAgICBjaGFyKiBm
YW1pbHlOYW1lID0gKHZlcnNpb24gPj0gV2luZG93c05UMykgPyAiV2luZG93cyBOVCAiIDogIldp
bmRvd3MgIjsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhmYW1pbHlOYW1lLCBTdHJpbmc6Om51bWJl
cihtYWpvciksICcuJywgU3RyaW5nOjpudW1iZXIobWlub3IpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5o
CShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1J
bmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDM5IEBACiAjaWZuZGVmIFN5c3RlbUlu
Zm9faAogI2RlZmluZSBTeXN0ZW1JbmZvX2gKIAorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgaXNSdW5uaW5nT25WaXN0YU9yTGF0
ZXIoKTsKKy8vIE5PVEU6IEtlZXAgdGhlc2UgaW4gb3JkZXIgc28gY2FsbGVycyBjYW4gZG8gdGhp
bmdzIGxpa2UKKy8vICJpZiAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzVmlzdGEpIC4uLiIu
IEl0J3MgT0sgdG8gY2hhbmdlIG9yIGFkZCB2YWx1ZXMsCisvLyB0aG91Z2guCitlbnVtIFdpbmRv
d3NWZXJzaW9uIHsKKyAgICBVbmtub3duV2luZG93c1ZlcnNpb24gPSAwLAorICAgIC8vIENFLWJh
c2VkIHZlcnNpb25zCisgICAgV2luZG93c0NFLAorICAgIC8vIDMueC1iYXNlZCB2ZXJzaW9ucwor
ICAgIFdpbmRvd3MzXzEsCisgICAgLy8gOXgtYmFzZWQgdmVyc2lvbnMKKyAgICBXaW5kb3dzOTUs
CisgICAgV2luZG93czk4LAorICAgIFdpbmRvd3NNRSwKKyAgICAvLyBOVC1iYXNlZCB2ZXJzaW9u
cworICAgIFdpbmRvd3NOVDMsCisgICAgV2luZG93c05UNCwKKyAgICBXaW5kb3dzMjAwMCwKKyAg
ICBXaW5kb3dzWFAsCisgICAgV2luZG93c1NlcnZlcjIwMDMsCisgICAgV2luZG93c1Zpc3RhLAor
ICAgIFdpbmRvd3NTZXJ2ZXIyMDA4LAorICAgIFdpbmRvd3M3LAorfTsKKworLy8gSWYgc3VwcGxp
ZWQsIHxtYWpvcnwgYW5kIHxtaW5vcnwgYXJlIHNldCB0byB0aGUgT1NWRVJTSU9OSU5GTzo6ZHdN
YWpvclZlcnNpb24KKy8vIGFuZCBkd01pbm9yVmVyc2lvbiBmaWVsZCB2YWx1ZXMsIHJlc3BlY3Rp
dmVseS4KK1dpbmRvd3NWZXJzaW9uIHdpbmRvd3NWZXJzaW9uKGludCogbWFqb3IgPSAwLCBpbnQq
IG1pbm9yID0gMCk7CisKK1N0cmluZyB3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCk7CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gODA2MTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCBib29sIFRoZW1lUGFpbnRlcjo6c19oYXNJbnN0
YW5jZSA9IGZhbHNlCiAKIHN0YXRpYyB2b2lkIGdldE5vbkNsaWVudE1ldHJpY3MoTk9OQ0xJRU5U
TUVUUklDUyogbWV0cmljcykKIHsKLSAgICBzdGF0aWMgVUlOVCBzaXplID0gaXNSdW5uaW5nT25W
aXN0YU9yTGF0ZXIoKSA/Ci0gICAgICAgIHNpemVvZihOT05DTElFTlRNRVRSSUNTKSA6IE5PTkNM
SUVOVE1FVFJJQ1NfU0laRV9QUkVfVklTVEE7CisgICAgc3RhdGljIFVJTlQgc2l6ZSA9ICh3aW5k
b3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSkgPworICAgICAgICAoc2l6ZW9mIE5PTkNMSUVO
VE1FVFJJQ1MpIDogTk9OQ0xJRU5UTUVUUklDU19TSVpFX1BSRV9WSVNUQTsKICAgICBtZXRyaWNz
LT5jYlNpemUgPSBzaXplOwogICAgIGJvb2wgc3VjY2VzcyA9ICEhU3lzdGVtUGFyYW1ldGVyc0lu
Zm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemUsIG1ldHJpY3MsIDApOwogICAgIEFTU0VS
VChzdWNjZXNzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
V2luLmNwcAkocmV2aXNpb24gODA1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjksMTUgKzU2OSwxNyBAQCBUaGVt
ZURhdGEgUmVuZGVyVGhlbWVXaW46OmdldFRoZW1lRGF0YShSCiAgICAgICAgICAgICByZXN1bHQu
bV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgTWVudWxpc3RQYXJ0OgotICAgICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKLSAg
ICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpID8gQ1Bf
RFJPUERPV05CVVRUT05SSUdIVCA6IENQX0RST1BET1dOQlVUVE9OOwotICAgICAgICAgICAgaWYg
KGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgJiYgZG9jdW1lbnRJc0luQXBwbGljYXRpb25DaHJv
bWVNb2RlKG8tPmRvY3VtZW50KCkpKSB7CisgICAgICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0
OiB7CisgICAgICAgICAgICBjb25zdCBib29sIGlzVmlzdGFPckxhdGVyID0gKHdpbmRvd3NWZXJz
aW9uKCkgPj0gV2luZG93c1Zpc3RhKTsKKyAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBpc1Zp
c3RhT3JMYXRlciA/IENQX0RST1BET1dOQlVUVE9OUklHSFQgOiBDUF9EUk9QRE9XTkJVVFRPTjsK
KyAgICAgICAgICAgIGlmIChpc1Zpc3RhT3JMYXRlciAmJiBkb2N1bWVudElzSW5BcHBsaWNhdGlv
bkNocm9tZU1vZGUoby0+ZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgInJl
YWRvbmx5IiBsb29rIHdlIHVzZSBpbiBhcHBsaWNhdGlvbiBjaHJvbWUgbW9kZQogICAgICAgICAg
ICAgICAgIC8vIG9ubHkgdXNlcyBhICJub3JtYWwiIGxvb2sgZm9yIHRoZSBkcm9wIGRvd24gYnV0
dG9uLgogICAgICAgICAgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gVFNfTk9STUFMOwogICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVT
dGF0ZShvKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgUmFk
aW9QYXJ0OgogICAgICAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX1JBRElPOwogICAgICAgICAg
ICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKQEAgLTU4NSw3ICs1ODcsNyBA
QCBUaGVtZURhdGEgUmVuZGVyVGhlbWVXaW46OmdldFRoZW1lRGF0YShSCiAgICAgICAgIGNhc2Ug
U2VhcmNoRmllbGRQYXJ0OgogICAgICAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CiAgICAgICAgIGNh
c2UgVGV4dEFyZWFQYXJ0OgotICAgICAgICAgICAgcmVzdWx0Lm1fcGFydCA9IGlzUnVubmluZ09u
VmlzdGFPckxhdGVyKCkgPyBFUF9FRElUQk9SREVSX05PU0NST0xMIDogVEZQX1RFWFRGSUVMRDsK
KyAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dz
VmlzdGEpID8gRVBfRURJVEJPUkRFUl9OT1NDUk9MTCA6IFRGUF9URVhURklFTEQ7CiAgICAgICAg
ICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgU2xpZGVySG9yaXpvbnRhbFBhcnQ6CkBAIC03MjgsNyArNzMwLDcg
QEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdChSZW5kZQogewogICAgIEhBTkRM
RSB0aGVtZTsKICAgICBpbnQgcGFydDsKLSAgICBpZiAoaGF2ZVRoZW1lICYmIGlzUnVubmluZ09u
VmlzdGFPckxhdGVyKCkpIHsKKyAgICBpZiAoaGF2ZVRoZW1lICYmICh3aW5kb3dzVmVyc2lvbigp
ID49IFdpbmRvd3NWaXN0YSkpIHsKICAgICAgICAgdGhlbWUgPSBtZW51TGlzdFRoZW1lKCk7CiAg
ICAgICAgIGlmIChkb2N1bWVudElzSW5BcHBsaWNhdGlvbkNocm9tZU1vZGUoby0+ZG9jdW1lbnQo
KSkpCiAgICAgICAgICAgICBwYXJ0ID0gQ1BfUkVBRE9OTFk7CkBAIC03OTIsNyArNzk0LDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgICAgICBidXR0b25S
ZWN0LnNldFgoYnV0dG9uUmVjdC5tYXhYKCkgLSBkcm9wRG93bkJ1dHRvbldpZHRoKTsKICAgICBi
dXR0b25SZWN0LnNldFdpZHRoKGRyb3BEb3duQnV0dG9uV2lkdGgpOwogCi0gICAgaWYgKGlzUnVu
bmluZ09uVmlzdGFPckxhdGVyKCkpIHsKKyAgICBpZiAoKHdpbmRvd3NWZXJzaW9uKCkgPj0gV2lu
ZG93c1Zpc3RhKSkgewogICAgICAgICAvLyBPdXRzZXQgdGhlIHRvcCwgcmlnaHQsIGFuZCBib3R0
b20gYm9yZGVycyBvZiB0aGUgYnV0dG9uIHNvIHRoYXQgdGhleSBjb2luY2lkZSB3aXRoIHRoZSA8
c2VsZWN0PidzIGJvcmRlci4KICAgICAgICAgYnV0dG9uUmVjdC5zZXRZKGJ1dHRvblJlY3QueSgp
IC0gdmlzdGFNZW51TGlzdEJ1dHRvbk91dHNldCk7CiAgICAgICAgIGJ1dHRvblJlY3Quc2V0SGVp
Z2h0KGJ1dHRvblJlY3QuaGVpZ2h0KCkgKyAyICogdmlzdGFNZW51TGlzdEJ1dHRvbk91dHNldCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDY2NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTAzLTA5ICBQZXRlciBL
YXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVbmlmeSBXaW5kb3dzIHZlcnNpb24gY2hlY2tzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU5NzkKKworICAg
ICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCk6CisKIDIwMTEtMDMtMDkgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVp
bGQgY29ycmVjdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViUGFn
ZVByb3h5V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2lu
L1dlYlBhZ2VQcm94eVdpbi5jcHAJKHJldmlzaW9uIDgwNTc3KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKKyNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCiAKICNpbmNsdWRlICJyZXNvdXJjZS5oIgogI2lu
Y2x1ZGUgPHRjaGFyLmg+CkBAIC0zNiwzMCArMzcsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBTdHJpbmcgd2luZG93c1ZlcnNpb24o
KQotewotICAgU3RyaW5nIG9zVmVyc2lvbjsKLSAgIE9TVkVSU0lPTklORk8gdmVyc2lvbkluZm8g
PSB7IDAgfTsKLSAgIHZlcnNpb25JbmZvLmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YodmVy
c2lvbkluZm8pOwotICAgOjpHZXRWZXJzaW9uRXgoJnZlcnNpb25JbmZvKTsKLQotICAgaWYgKHZl
cnNpb25JbmZvLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUykgewot
ICAgICAgIGlmICh2ZXJzaW9uSW5mby5kd01ham9yVmVyc2lvbiA9PSA0KSB7Ci0gICAgICAgICAg
IGlmICh2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbiA9PSAwKQotICAgICAgICAgICAgICAgb3NW
ZXJzaW9uID0gIldpbmRvd3MgOTUiOwotICAgICAgICAgICBlbHNlIGlmICh2ZXJzaW9uSW5mby5k
d01pbm9yVmVyc2lvbiA9PSAxMCkKLSAgICAgICAgICAgICAgIG9zVmVyc2lvbiA9ICJXaW5kb3dz
IDk4IjsKLSAgICAgICAgICAgZWxzZSBpZiAodmVyc2lvbkluZm8uZHdNaW5vclZlcnNpb24gPT0g
OTApCi0gICAgICAgICAgICAgICBvc1ZlcnNpb24gPSAiV2luZG93cyA5ODsgV2luIDl4IDQuOTAi
OwotICAgICAgIH0KLSAgIH0gZWxzZSBpZiAodmVyc2lvbkluZm8uZHdQbGF0Zm9ybUlkID09IFZF
Ul9QTEFURk9STV9XSU4zMl9OVCkKLSAgICAgICBvc1ZlcnNpb24gPSBtYWtlU3RyaW5nKCJXaW5k
b3dzIE5UICIsIFN0cmluZzo6bnVtYmVyKHZlcnNpb25JbmZvLmR3TWFqb3JWZXJzaW9uKSwgJy4n
LCBTdHJpbmc6Om51bWJlcih2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbikpOwotCi0gICBpZiAo
IW9zVmVyc2lvbi5sZW5ndGgoKSkKLSAgICAgICBvc1ZlcnNpb24gPSBtYWtlU3RyaW5nKCJXaW5k
b3dzICIsIFN0cmluZzo6bnVtYmVyKHZlcnNpb25JbmZvLmR3TWFqb3JWZXJzaW9uKSwgJy4nLCBT
dHJpbmc6Om51bWJlcih2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbikpOwotICAgcmV0dXJuIG9z
VmVyc2lvbjsKLX0KLQogc3RhdGljIFN0cmluZyB1c2VyVmlzaWJsZVdlYktpdFZlcnNpb25TdHJp
bmcoKQogewogICAgIExQV1NUUiBidWlsZE51bWJlclN0cmluZ1B0cjsKQEAgLTcxLDEyICs0OCwx
MCBAQCBzdGF0aWMgU3RyaW5nIHVzZXJWaXNpYmxlV2ViS2l0VmVyc2lvblN0CiAKIFN0cmluZyBX
ZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25O
YW1lRm9yVXNlckFnZW50KQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBvc1Zl
cnNpb24sICh3aW5kb3dzVmVyc2lvbigpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIG9zVmVyc2lvbiwgKHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKSkpOwogICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB3ZWJLaXRWZXJzaW9uLCAodXNlclZpc2libGVXZWJLaXRW
ZXJzaW9uU3RyaW5nKCkpKTsKIAotICAgIGlmIChhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIG9z
VmVyc2lvbiwgIikgQXBwbGVXZWJLaXQvIiwgd2ViS2l0VmVyc2lvbiwgIiAoS0hUTUwsIGxpa2Ug
R2Vja28pIik7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBvc1ZlcnNp
b24sICIpIEFwcGxlV2ViS2l0LyIsIHdlYktpdFZlcnNpb24sICIgKEtIVE1MLCBsaWtlIEdlY2tv
KSAiLCBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpOworICAgIHJldHVybiBtYWtlU3RyaW5n
KCJNb3ppbGxhLzUuMCAoIiwgb3NWZXJzaW9uLCAiKSBBcHBsZVdlYktpdC8iLCB3ZWJLaXRWZXJz
aW9uLCAiIChLSFRNTCwgbGlrZSBHZWNrbykiLCBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQu
aXNFbXB0eSgpID8gIiIgOiAiICIsIGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gODA2
NjcpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAxMS0wMy0wOSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5p
ZnkgV2luZG93cyB2ZXJzaW9uIGNoZWNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU1OTc5CisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vic2V0
dGluZ3MuY3BwOgorICAgICAgICAod2Via2l0T1NWZXJzaW9uKToKKwogMjAxMS0wMy0wOCAgQ2hy
aXN0aWFuIER5d2FuICA8Y2hyaXN0aWFuQGxhbmVkby5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTWFydGluIFJvYmluc29uLgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnNldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2Vic2V0dGluZ3MuY3BwCShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYg
KzM5LDggQEAKIAogI2lmIE9TKFVOSVgpCiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbGlm
IE9TKFdJTkRPV1MpCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogI2VuZGlmCiAKIC8qKgpAQCAt
MjA4LDcgKzIxMCw3IEBAIHN0YXRpYyBTdHJpbmcgd2Via2l0T1NWZXJzaW9uKCkKICAgICBlbHNl
CiAgICAgICAgIHVhT1NWZXJzaW9uID0gU3RyaW5nKCJVbmtub3duIik7CiAjZWxpZiBPUyhXSU5E
T1dTKQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCB1YU9TVmVyc2lvbiwg
KFN0cmluZygiV2luZG93cyIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJp
bmcsIHVhT1NWZXJzaW9uLCAod2luZG93c1ZlcnNpb25Gb3JVQVN0cmluZygpKSk7CiAjZWxzZQog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCB1YU9TVmVyc2lvbiwgKFN0cmlu
ZygiVW5rbm93biIpKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDY2
NykKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMTEtMDMtMDkgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaWZ5
IFdpbmRvd3MgdmVyc2lvbiBjaGVja3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NTk3OQorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAg
ICAgICAgKFFXZWJQYWdlOjp1c2VyQWdlbnRGb3JVcmwpOgorCiAyMDExLTAzLTA3ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxz
c29uLgpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gODA1NzcpCisr
KyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NCw2ICsxMDQsOSBAQAogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpZiBkZWZpbmVkIFFfT1NfV0lOMzIK
KyNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCisjZW5kaWYgLy8gUV9PU19XSU4zMgogI2luY2x1ZGUg
IlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIldlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2lu
Y2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCkBAIC0zNzc0LDM2ICszNzc3LDcgQEAgUVN0cmluZyBR
V2ViUGFnZTo6dXNlckFnZW50Rm9yVXJsKGNvbnN0CiAjZWxpZiBkZWZpbmVkIFFfT1NfV0lOMzIK
IAogICAgICAgICBzd2l0Y2ggKFFTeXNJbmZvOjpXaW5kb3dzVmVyc2lvbikgewotICAgICAgICBj
YXNlIFFTeXNJbmZvOjpXVl8zMnM6Ci0gICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJp
bmc6OmZyb21MYXRpbjEoIldpbmRvd3MgMy4xIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBRU3lzSW5mbzo6V1ZfOTU6Ci0gICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFT
dHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgOTUiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFFTeXNJbmZvOjpXVl85ODoKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0g
UVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyA5OCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgUVN5c0luZm86OldWX01lOgotICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCAr
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIDk4OyBXaW4gOXggNC45MCIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86OldWX05UOgotICAgICAgICAgICAg
Zmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5OVDQuMCIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86OldWXzIwMDA6Ci0gICAgICAgICAg
ICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgTlQgNS4wIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfWFA6Ci0gICAg
ICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgTlQg
NS4xIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfMjAw
MzoKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2lu
ZG93cyBOVCA1LjIiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFTeXNJbmZv
OjpXVl9WSVNUQToKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxh
dGluMSgiV2luZG93cyBOVCA2LjAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgY2Fz
ZSBRU3lzSW5mbzo6V1ZfV0lORE9XUzc6Ci0gICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFT
dHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgTlQgNi4xIik7Ci0gICAgICAgICAgICBicmVhazsK
KyAgICAgICAgIC8vIEZJWE1FOiBFeHBhbmQgd2luZG93c1ZlcnNpb25Gb3JVQVN0cmluZygpIHRv
IGNvdmVyIFdpbmRvd3MgQ0UuCiAgICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9DRToKICAgICAg
ICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyBDRSIp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zODE2LDYgKzM3OTAsOCBAQCBRU3RyaW5nIFFXZWJQ
YWdlOjp1c2VyQWdlbnRGb3JVcmwoY29uc3QKICAgICAgICAgIGNhc2UgUVN5c0luZm86OldWX0NF
XzY6CiAgICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldp
bmRvd3MgQ0UgNi54Iik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKTsK
ICAgICAgICAgfQogCiAjZWxpZiBkZWZpbmVkIFFfT1NfREFSV0lOCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdl
TG9nCShyZXZpc2lvbiA4MDY2NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTAzLTA5ICBQZXRlciBLYXN0aW5nICA8
cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBVbmlmeSBXaW5kb3dzIHZlcnNpb24gY2hlY2tzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU5NzkKKworICAgICAgICAqIFdl
YlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6c3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGlj
YXRpb25OYW1lKToKKyAgICAgICAgKHdlYktpdFZlcnNpb25TdHJpbmcpOgorCiAyMDExLTAzLTA3
ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5k
ZXJzIENhcmxzc29uLgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDgwNTc3KQor
KysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiTWFyc2hhbGxpbmdIZWxwZXJzLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKKyNpbmNs
dWRlICJTeXN0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCiAjaW5j
bHVkZSAiV2ViQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVDbGllbnQu
aCIKQEAgLTE4NCw4ICsxODUsNyBAQCB1c2luZyBKU0M6OkpTTG9jazsKIHN0YXRpYyBITU9EVUxF
IGFjY2Vzc2liaWxpdHlMaWI7CiBzdGF0aWMgSGFzaFNldDxXZWJWaWV3Kj4gcGVuZGluZ0RlbGV0
ZUJhY2tpbmdTdG9yZVNldDsKIAotc3RhdGljIFN0cmluZyBvc1ZlcnNpb24oKTsKLXN0YXRpYyBT
dHJpbmcgd2ViS2l0VmVyc2lvbigpOworc3RhdGljIFN0cmluZyB3ZWJLaXRWZXJzaW9uU3RyaW5n
KCk7CiAKIFdlYlZpZXcqIGtpdChQYWdlKiBwYWdlKQogewpAQCAtMTI0NCw5ICsxMjQ0LDEwIEBA
IGJvb2wgV2ViVmlldzo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWIKIAogU3RyaW5nIFdlYlZp
ZXc6OnN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShjb25zdCBTdHJpbmcmIGFw
cGxpY2F0aW9uTmFtZSkKIHsKLSAgICBpZiAoYXBwbGljYXRpb25OYW1lLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBvc1ZlcnNpb24oKSwgIikg
QXBwbGVXZWJLaXQvIiwgd2ViS2l0VmVyc2lvbigpLCAiIChLSFRNTCwgbGlrZSBHZWNrbykiKTsK
LSAgICByZXR1cm4gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIG9zVmVyc2lvbigpLCAiKSBB
cHBsZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9uKCksICIgKEtIVE1MLCBsaWtlIEdlY2tvKSAiLCBh
cHBsaWNhdGlvbk5hbWUpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBvc1ZlcnNp
b24sICh3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCkpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFN0cmluZywgd2ViS2l0VmVyc2lvbiwgKHdlYktpdFZlcnNpb25TdHJpbmcoKSkpOworCisg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBvc1ZlcnNpb24sICIpIEFwcGxl
V2ViS2l0LyIsIHdlYktpdFZlcnNpb24sICIgKEtIVE1MLCBsaWtlIEdlY2tvKSIsIGFwcGxpY2F0
aW9uTmFtZUZvclVzZXJBZ2VudC5pc0VtcHR5KCkgPyAiIiA6ICIgIiwgYXBwbGljYXRpb25OYW1l
Rm9yVXNlckFnZW50KTsKIH0KIAogUGFnZSogV2ViVmlldzo6cGFnZSgpCkBAIC0yMzM2LDMxICsy
MzM3LDcgQEAgYm9vbCBXZWJWaWV3OjpkZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkgYwogI2VuZGlm
CiB9CiAKLXN0YXRpYyBTdHJpbmcgb3NWZXJzaW9uKCkKLXsKLSAgICBTdHJpbmcgb3NWZXJzaW9u
OwotICAgIE9TVkVSU0lPTklORk8gdmVyc2lvbkluZm8gPSB7MH07Ci0gICAgdmVyc2lvbkluZm8u
ZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZih2ZXJzaW9uSW5mbyk7Ci0gICAgR2V0VmVyc2lv
bkV4KCZ2ZXJzaW9uSW5mbyk7Ci0KLSAgICBpZiAodmVyc2lvbkluZm8uZHdQbGF0Zm9ybUlkID09
IFZFUl9QTEFURk9STV9XSU4zMl9XSU5ET1dTKSB7Ci0gICAgICAgIGlmICh2ZXJzaW9uSW5mby5k
d01ham9yVmVyc2lvbiA9PSA0KSB7Ci0gICAgICAgICAgICBpZiAodmVyc2lvbkluZm8uZHdNaW5v
clZlcnNpb24gPT0gMCkKLSAgICAgICAgICAgICAgICBvc1ZlcnNpb24gPSAiV2luZG93cyA5NSI7
Ci0gICAgICAgICAgICBlbHNlIGlmICh2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbiA9PSAxMCkK
LSAgICAgICAgICAgICAgICBvc1ZlcnNpb24gPSAiV2luZG93cyA5OCI7Ci0gICAgICAgICAgICBl
bHNlIGlmICh2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbiA9PSA5MCkKLSAgICAgICAgICAgICAg
ICBvc1ZlcnNpb24gPSAiV2luZG93cyA5ODsgV2luIDl4IDQuOTAiOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIGlmICh2ZXJzaW9uSW5mby5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMy
X05UKQotICAgICAgICBvc1ZlcnNpb24gPSBtYWtlU3RyaW5nKCJXaW5kb3dzIE5UICIsIFN0cmlu
Zzo6bnVtYmVyKHZlcnNpb25JbmZvLmR3TWFqb3JWZXJzaW9uKSwgJy4nLCBTdHJpbmc6Om51bWJl
cih2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbikpOwotCi0gICAgaWYgKCFvc1ZlcnNpb24ubGVu
Z3RoKCkpCi0gICAgICAgIG9zVmVyc2lvbiA9IG1ha2VTdHJpbmcoIldpbmRvd3MgIiwgU3RyaW5n
OjpudW1iZXIodmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb24pLCAnLicsIFN0cmluZzo6bnVtYmVy
KHZlcnNpb25JbmZvLmR3TWlub3JWZXJzaW9uKSk7Ci0gICAgcmV0dXJuIG9zVmVyc2lvbjsKLX0K
LQotc3RhdGljIFN0cmluZyB3ZWJLaXRWZXJzaW9uKCkKK3N0YXRpYyBTdHJpbmcgd2ViS2l0VmVy
c2lvblN0cmluZygpCiB7CiAgICAgTFBXU1RSIGJ1aWxkTnVtYmVyU3RyaW5nUHRyOwogICAgIGlm
ICghOjpMb2FkU3RyaW5nVyhnSW5zdGFuY2UsIEJVSUxEX05VTUJFUiwgcmVpbnRlcnByZXRfY2Fz
dDxMUFdTVFI+KCZidWlsZE51bWJlclN0cmluZ1B0ciksIDApIHx8ICFidWlsZE51bWJlclN0cmlu
Z1B0cikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85269</attachid>
            <date>2011-03-09 17:55:22 -0800</date>
            <delta_ts>2011-03-09 18:53:18 -0800</delta_ts>
            <desc>Part 2, v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>28845</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjY3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDMtMDkgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVuaWZ5IFdpbmRvd3MgdmVyc2lvbiBjaGVja3MuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTk3OQorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogU3RyaW5nc05vdFRvQmVMb2NhbGl6ZWQu
dHh0OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1X
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6aW52
YWxpZGF0ZU9uTW91c2VFbnRlckV4aXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bVdpbjo6Z2V0VGhlbWVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZUFycm93U3RhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZmlsbEJNUEdseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vd2lu
L0N1cnNvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTaGFyZWRDdXJzb3IpOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6U2Nyb2xsYmFyVGhlbWVXaW4pOgorICAgICAgICAq
IHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NW
ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcpOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Tm9uQ2xp
ZW50TWV0cmljcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpnZXRUaGVtZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3RCdXR0b24pOgorCiAyMDExLTAzLTA5ICBH
YXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA4
MDYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0zODUxLDggKzM4NTEsOCBAQCBpZiBUQVJHRVRfV0lOMzIKIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oIFwKLSAgICBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAgXAotICAgIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9T
eXN0ZW1JbmZvLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8u
aCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldp
bi5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9TdHJpbmdzTm90VG9CZUxvY2FsaXplZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU3RyaW5nc05vdFRvQmVMb2NhbGl6ZWQudHh0CShy
ZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL1N0cmluZ3NOb3RUb0JlTG9jYWxpemVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTExLDkgKzUxMSwxMSBAQAogIldlYlZpZXdXaW5kb3dD
bGFzcyIKICJXZWJXb3JrZXJzUHJpdmF0ZSIKICJXaW5kb3dzICIKKyJXaW5kb3dzIDMuMSIKICJX
aW5kb3dzIDk1IgogIldpbmRvd3MgOTgiCiAiV2luZG93cyA5ODsgV2luIDl4IDQuOTAiCisiV2lu
TlQ0LjAiCiAiV2luZG93cyBOVCAiCiAiV212UGx1Z2luIgogIlhTTCIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRo
ZW1lQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA4MDYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw3ICs3MCw3IEBAIGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpzY3Jv
bGxiYXIKIAogYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjppbnZhbGlkYXRlT25Nb3Vz
ZUVudGVyRXhpdCgpCiB7Ci0gICAgcmV0dXJuIGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCk7Cisg
ICAgcmV0dXJuIHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93c1Zpc3RhOwogfQogCiBib29sIFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKQEAgLTE2MCwx
MiArMTYwLDEyIEBAIGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZVMKICAg
ICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkgewogICAgICAgICBp
ZiAocGFydCA9PSBUaHVtYlBhcnQpCiAgICAgICAgICAgICByZXR1cm4gU0NSQlNfUFJFU1NFRDsK
LSAgICAgICAgcmV0dXJuIGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBTQ1JCU19IT1ZFUiA6
IFNDUkJTX05PUk1BTDsKKyAgICAgICAgcmV0dXJuICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93
c1Zpc3RhKSA/IFNDUkJTX05PUk1BTCA6IFNDUkJTX0hPVkVSOwogICAgIH0KICAgICBpZiAoIXNj
cm9sbGJhci0+ZW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gU0NSQlNfRElTQUJMRUQ7CiAgICAg
aWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBwYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNr
UGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQpCi0gICAgICAgIHJldHVybiAoc2Nyb2xs
YmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCB8fCAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIo
KSkgPyBTQ1JCU19OT1JNQUwgOiBTQ1JCU19IT1ZFUjsKKyAgICAgICAgcmV0dXJuIChzY3JvbGxi
YXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0IHx8ICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93
c1Zpc3RhKSkgPyBTQ1JCU19OT1JNQUwgOiBTQ1JCU19IT1ZFUjsKICAgICBpZiAoc2Nyb2xsYmFy
LT5wcmVzc2VkUGFydCgpID09IE5vUGFydCkKICAgICAgICAgcmV0dXJuIFNDUkJTX0hPVDsKICAg
ICByZXR1cm4gKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBwYXJ0KSA/IFNDUkJTX1BSRVNT
RUQgOiBTQ1JCU19OT1JNQUw7CkBAIC0xNzksNDMgKzE3OSw0MyBAQCBpbnQgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bVdpbjo6Z2V0VGhlbWVBCiAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0
UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQpIHsKICAgICAgICAgaWYgKHNj
cm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAg
ICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBBQlNfTEVGVE5PUk1B
TCA6IEFCU19MRUZUSE9WRVI7CisgICAgICAgICAgICAgICAgcmV0dXJuICh3aW5kb3dzVmVyc2lv
bigpIDwgV2luZG93c1Zpc3RhKSA/IEFCU19MRUZUTk9STUFMIDogQUJTX0xFRlRIT1ZFUjsKICAg
ICAgICAgICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEFCU19MRUZURElTQUJMRUQ7CiAgICAgICAgICAgICBpZiAoc2Nyb2xsYmFyLT5ob3ZlcmVk
UGFydCgpICE9IHBhcnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3Zl
cmVkUGFydCgpID09IE5vUGFydCkgfHwgIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpID8gQUJT
X0xFRlROT1JNQUwgOiBBQlNfTEVGVEhPVkVSOworICAgICAgICAgICAgICAgIHJldHVybiAoKHNj
cm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQpIHx8ICh3aW5kb3dzVmVyc2lvbigpIDwg
V2luZG93c1Zpc3RhKSkgPyBBQlNfTEVGVE5PUk1BTCA6IEFCU19MRUZUSE9WRVI7CiAgICAgICAg
ICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IE5vUGFydCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gQUJTX0xFRlRIT1Q7CiAgICAgICAgICAgICByZXR1cm4gKHNjcm9sbGJhci0+
cHJlc3NlZFBhcnQoKSA9PSBwYXJ0KSA/CiAgICAgICAgICAgICAgICAgQUJTX0xFRlRQUkVTU0VE
IDogQUJTX0xFRlROT1JNQUw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNjcm9sbGJhci0+cHJl
c3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCi0gICAgICAgICAgICByZXR1cm4gIWlzUnVubmluZ09u
VmlzdGFPckxhdGVyKCkgPyBBQlNfVVBOT1JNQUwgOiBBQlNfVVBIT1ZFUjsKKyAgICAgICAgICAg
IHJldHVybiAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkgPyBBQlNfVVBOT1JNQUwg
OiBBQlNfVVBIT1ZFUjsKICAgICAgICAgaWYgKCFzY3JvbGxiYXItPmVuYWJsZWQoKSkKICAgICAg
ICAgICAgIHJldHVybiBBQlNfVVBESVNBQkxFRDsKICAgICAgICAgaWYgKHNjcm9sbGJhci0+aG92
ZXJlZFBhcnQoKSAhPSBwYXJ0KQotICAgICAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3Zl
cmVkUGFydCgpID09IE5vUGFydCkgfHwgIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpID8gQUJT
X1VQTk9STUFMIDogQUJTX1VQSE9WRVI7CisgICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXIt
PmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8fCAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NW
aXN0YSkpID8gQUJTX1VQTk9STUFMIDogQUJTX1VQSE9WRVI7CiAgICAgICAgIGlmIChzY3JvbGxi
YXItPnByZXNzZWRQYXJ0KCkgPT0gTm9QYXJ0KQogICAgICAgICAgICAgcmV0dXJuIEFCU19VUEhP
VDsKICAgICAgICAgcmV0dXJuIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gcGFydCkgPyBB
QlNfVVBQUkVTU0VEIDogQUJTX1VQTk9STUFMOwogICAgIH0KICAgICBpZiAoc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaWYgKHNjcm9s
bGJhci0+cHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCi0gICAgICAgICAgICByZXR1cm4gIWlz
UnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBBQlNfUklHSFROT1JNQUwgOiBBQlNfUklHSFRIT1ZF
UjsKKyAgICAgICAgICAgIHJldHVybiAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkg
PyBBQlNfUklHSFROT1JNQUwgOiBBQlNfUklHSFRIT1ZFUjsKICAgICAgICAgaWYgKCFzY3JvbGxi
YXItPmVuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBBQlNfUklHSFRESVNBQkxFRDsKICAg
ICAgICAgaWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBwYXJ0KQotICAgICAgICAgICAg
cmV0dXJuICgoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkgfHwgIWlzUnVubmlu
Z09uVmlzdGFPckxhdGVyKCkpID8gQUJTX1JJR0hUTk9STUFMIDogQUJTX1JJR0hUSE9WRVI7Cisg
ICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8
fCAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkpID8gQUJTX1JJR0hUTk9STUFMIDog
QUJTX1JJR0hUSE9WRVI7CiAgICAgICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0g
Tm9QYXJ0KQogICAgICAgICAgICAgcmV0dXJuIEFCU19SSUdIVEhPVDsKICAgICAgICAgcmV0dXJu
IChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gcGFydCkgPyBBQlNfUklHSFRQUkVTU0VEIDog
QUJTX1JJR0hUTk9STUFMOwogICAgIH0KICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgp
ID09IFRodW1iUGFydCkKLSAgICAgICAgcmV0dXJuICFpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigp
ID8gQUJTX0RPV05OT1JNQUwgOiBBQlNfRE9XTkhPVkVSOworICAgICAgICByZXR1cm4gKHdpbmRv
d3NWZXJzaW9uKCkgPCBXaW5kb3dzVmlzdGEpID8gQUJTX0RPV05OT1JNQUwgOiBBQlNfRE9XTkhP
VkVSOwogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBBQlNf
RE9XTkRJU0FCTEVEOwogICAgIGlmIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgIT0gcGFydCkK
LSAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkgfHwg
IWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpID8gQUJTX0RPV05OT1JNQUwgOiBBQlNfRE9XTkhP
VkVSOworICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0
KSB8fCAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkpID8gQUJTX0RPV05OT1JNQUwg
OiBBQlNfRE9XTkhPVkVSOwogICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gTm9Q
YXJ0KQogICAgICAgICByZXR1cm4gQUJTX0RPV05IT1Q7CiAgICAgcmV0dXJuIChzY3JvbGxiYXIt
PnByZXNzZWRQYXJ0KCkgPT0gcGFydCkgPyBBQlNfRE9XTlBSRVNTRUQgOiBBQlNfRE9XTk5PUk1B
TDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBo
UGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4u
Y3BwCShyZXZpc2lvbiA4MDYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzQsNyArMTM0LDcgQEAgc3RhdGljIGJvb2wgZmlsbEJNUEdseXBocyh1bnNpZ25lZCBv
ZmZzZQogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwogICAgIGludCBpbnZhbGlkR2x5cGgg
PSAweEZGRkY7CiAgICAgY29uc3QgRFdPUkQgY2ZmVGFibGVUYWcgPSAweDIwNDY0NjQzOyAvLyA0
LWJ5dGUgaWRlbnRpZmllciBmb3IgT3BlblR5cGUgQ0ZGIHRhYmxlICgnQ0ZGICcpLgotICAgIGlm
ICghaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSAmJiAhKHRtLnRtUGl0Y2hBbmRGYW1pbHkgJiBU
TVBGX1RSVUVUWVBFKSAmJiAoR2V0Rm9udERhdGEoZGMsIGNmZlRhYmxlVGFnLCAwLCAwLCAwKSA9
PSBHRElfRVJST1IpKQorICAgIGlmICgod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkg
JiYgISh0bS50bVBpdGNoQW5kRmFtaWx5ICYgVE1QRl9UUlVFVFlQRSkgJiYgKEdldEZvbnREYXRh
KGRjLCBjZmZUYWJsZVRhZywgMCwgMCwgMCkgPT0gR0RJX0VSUk9SKSkKICAgICAgICAgaW52YWxp
ZEdseXBoID0gMHgxRjsKIAogICAgIEdseXBoIHNwYWNlR2x5cGggPSAwOyAgLy8gR2x5cGggZm9y
IGEgc3BhY2UuIExhemlseSBmaWxsZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQ3Vyc29yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQ3Vyc29yV2luLmNwcAkocmV2aXNpb24gODA1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vQ3Vyc29yV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIklu
dFBvaW50LmgiCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogCkBAIC0zOSwyMCArNDAsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc3VwcG9ydHNBbHBoYUN1cnNvcnMoKSAKLXsKLSAgICBPU1ZFUlNJT05J
TkZPIG9zaW5mbyA9IHswfTsKLSAgICBvc2luZm8uZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVv
ZihPU1ZFUlNJT05JTkZPKTsKLSAgICBHZXRWZXJzaW9uRXgoJm9zaW5mbyk7Ci0gICAgcmV0dXJu
IG9zaW5mby5kd01ham9yVmVyc2lvbiA+IDUgfHwgKG9zaW5mby5kd01ham9yVmVyc2lvbiA9PSA1
ICYmIG9zaW5mby5kd01pbm9yVmVyc2lvbiA+IDApOwotfQotCiBzdGF0aWMgUGFzc1JlZlB0cjxT
aGFyZWRDdXJzb3I+IGNyZWF0ZVNoYXJlZEN1cnNvcihJbWFnZSogaW1nLCBjb25zdCBJbnRQb2lu
dCYgaG90U3BvdCkKIHsKICAgICBSZWZQdHI8U2hhcmVkQ3Vyc29yPiBpbXBsOwogCiAgICAgSW50
UG9pbnQgZWZmZWN0aXZlSG90U3BvdCA9IGRldGVybWluZUhvdFNwb3QoaW1nLCBob3RTcG90KTsK
LSAgICBzdGF0aWMgYm9vbCBkb0FscGhhID0gc3VwcG9ydHNBbHBoYUN1cnNvcnMoKTsKKyAgICBz
dGF0aWMgYm9vbCBkb0FscGhhID0gd2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzWFA7CiAgICAg
Qml0bWFwSW5mbyBjdXJzb3JJbWFnZSA9IEJpdG1hcEluZm86OmNyZWF0ZShJbnRTaXplKGltZy0+
d2lkdGgoKSwgaW1nLT5oZWlnaHQoKSkpOwogCiAgICAgSERDIGRjID0gR2V0REMoMCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5j
cHAJKHJldmlzaW9uIDgwNTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9s
bGJhclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIFNjcm9s
bGJhclRoZW1lV2luOjpTY3JvbGxiYXJUaGVtZVdpbigpCiAgICAgaWYgKCFpbml0aWFsaXplZCkg
ewogICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgIGNoZWNrQW5kSW5pdFNjcm9s
bGJhclRoZW1lKCk7Ci0gICAgICAgIHJ1bm5pbmdWaXN0YSA9IGlzUnVubmluZ09uVmlzdGFPckxh
dGVyKCk7CisgICAgICAgIHJ1bm5pbmdWaXN0YSA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRv
d3NWaXN0YSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
U3lzdGVtSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1N5c3RlbUluZm8uY3BwCShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzAgKzI3LDg2IEBA
CiAjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogCiAjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotYm9vbCBpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpCitXaW5kb3dzVmVyc2lvbiB3aW5kb3dz
VmVyc2lvbihpbnQqIG1ham9yLCBpbnQqIG1pbm9yKQogeworICAgIHN0YXRpYyBib29sIGluaXRp
YWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIFdpbmRvd3NWZXJzaW9uIHZlcnNpb24gPSBVbmtu
b3duV2luZG93c1ZlcnNpb247CisgICAgc3RhdGljIGludCBtYWpvclZlcnNpb24gPSAwLCBtaW5v
clZlcnNpb24gPSAwOworCisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpbml0aWFs
aXplZCA9IHRydWU7CiAjaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2
ZXJzaW9uID0gV2luZG93c0NFOwogI2Vsc2UKLSAgICBzdGF0aWMgYm9vbCBpc1Zpc3RhT3JMYXRl
cjsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKLQotICAgIGlmIChpbml0aWFsaXplZCkK
LSAgICAgICAgcmV0dXJuIGlzVmlzdGFPckxhdGVyOwotCi0gICAgaW5pdGlhbGl6ZWQgPSB0cnVl
OwotCi0gICAgT1NWRVJTSU9OSU5GT0VYIHZpID0gezB9OwotICAgIHZpLmR3T1NWZXJzaW9uSW5m
b1NpemUgPSBzaXplb2YoT1NWRVJTSU9OSU5GT0VYKTsKLSAgICBHZXRWZXJzaW9uRXgocmVpbnRl
cnByZXRfY2FzdDxPU1ZFUlNJT05JTkZPKj4oJnZpKSk7CisgICAgICAgIE9TVkVSU0lPTklORk9F
WCB2ZXJzaW9uSW5mbyA9IHswfTsKKyAgICAgICAgdmVyc2lvbkluZm8uZHdPU1ZlcnNpb25JbmZv
U2l6ZSA9IHNpemVvZih2ZXJzaW9uSW5mbyk7CisgICAgICAgIEdldFZlcnNpb25FeChyZWludGVy
cHJldF9jYXN0PE9TVkVSU0lPTklORk8qPigmdmVyc2lvbkluZm8pKTsKKyAgICAgICAgbWFqb3JW
ZXJzaW9uID0gdmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb247CisgICAgICAgIG1pbm9yVmVyc2lv
biA9IHZlcnNpb25JbmZvLmR3TWlub3JWZXJzaW9uOworCisgICAgICAgIGlmICh2ZXJzaW9uSW5m
by5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMycykKKyAgICAgICAgICAgIHZlcnNp
b24gPSBXaW5kb3dzM18xOworICAgICAgICBlbHNlIGlmICh2ZXJzaW9uSW5mby5kd1BsYXRmb3Jt
SWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MpIHsKKyAgICAgICAgICAgIGlmICghbWlu
b3JWZXJzaW9uKQorICAgICAgICAgICAgICAgIHZlcnNpb24gPSBXaW5kb3dzOTU7CisgICAgICAg
ICAgICBlbHNlIGlmIChtaW5vclZlcnNpb24gPT0gMTApCisgICAgICAgICAgICAgICAgdmVyc2lv
biA9IFdpbmRvd3M5ODsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2ZXJzaW9u
ID0gV2luZG93c01FOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1ham9yVmVy
c2lvbiA9PSAzKQorICAgICAgICAgICAgICAgIHZlcnNpb24gPSBXaW5kb3dzTlQzOworICAgICAg
ICAgICAgZWxzZSBpZiAobWFqb3JWZXJzaW9uID09IDQpCisgICAgICAgICAgICAgICAgdmVyc2lv
biA9IFdpbmRvd3NOVDQ7CisgICAgICAgICAgICBlbHNlIGlmIChtYWpvclZlcnNpb24gPT0gNSkg
eworICAgICAgICAgICAgICAgIGlmICghbWlub3JWZXJzaW9uKQorICAgICAgICAgICAgICAgICAg
ICB2ZXJzaW9uID0gV2luZG93czIwMDA7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobWlub3JW
ZXJzaW9uID09IDEpCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSBXaW5kb3dzWFA7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gV2luZG93
c1NlcnZlcjIwMDM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh2
ZXJzaW9uSW5mby53UHJvZHVjdFR5cGUgPT0gVkVSX05UX1dPUktTVEFUSU9OKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghbWlub3JWZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAg
dmVyc2lvbiA9IFdpbmRvd3NWaXN0YTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IFdpbmRvd3M3OworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gV2luZG93c1NlcnZlcjIwMDg7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KIAotICAgIGlzVmlzdGFPckxh
dGVyID0gdmkuZHdNYWpvclZlcnNpb24gPj0gNjsKKyAgICBpZiAobWFqb3IpCisgICAgICAgICpt
YWpvciA9IG1ham9yVmVyc2lvbjsKKyAgICBpZiAobWlub3IpCisgICAgICAgICptaW5vciA9IG1p
bm9yVmVyc2lvbjsKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KIAotICAgIHJldHVybiBpc1Zpc3Rh
T3JMYXRlcjsKLSNlbmRpZgorU3RyaW5nIHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKQorewor
ICAgIGludCBtYWpvciwgbWlub3I7CisgICAgV2luZG93c1ZlcnNpb24gdmVyc2lvbiA9IHdpbmRv
d3NWZXJzaW9uKCZtYWpvciwgJm1pbm9yKTsKKyAgICBzd2l0Y2ggKHZlcnNpb24pIHsKKyAgICBj
YXNlIFdpbmRvd3MzXzE6CisgICAgICAgIHJldHVybiAiV2luZG93cyAzLjEiOworICAgIGNhc2Ug
V2luZG93czk1OgorICAgICAgICByZXR1cm4gIldpbmRvd3MgOTUiOworICAgIGNhc2UgV2luZG93
czk4OgorICAgICAgICByZXR1cm4gIldpbmRvd3MgOTgiOworICAgIGNhc2UgV2luZG93c01FOgor
ICAgICAgICByZXR1cm4gIldpbmRvd3MgOTg7IFdpbiA5eCA0LjkwIjsKKyAgICBjYXNlIFdpbmRv
d3NOVDQ6CisgICAgICAgIHJldHVybiAiV2luTlQ0LjAiOworICAgIH0KKyAgICBjaGFyKiBmYW1p
bHlOYW1lID0gKHZlcnNpb24gPj0gV2luZG93c05UMykgPyAiV2luZG93cyBOVCAiIDogIldpbmRv
d3MgIjsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhmYW1pbHlOYW1lLCBTdHJpbmc6Om51bWJlciht
YWpvciksICcuJywgU3RyaW5nOjpudW1iZXIobWlub3IpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5oCShy
ZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDM5IEBACiAjaWZuZGVmIFN5c3RlbUluZm9f
aAogI2RlZmluZSBTeXN0ZW1JbmZvX2gKIAorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIo
KTsKKy8vIE5PVEU6IEtlZXAgdGhlc2UgaW4gb3JkZXIgc28gY2FsbGVycyBjYW4gZG8gdGhpbmdz
IGxpa2UKKy8vICJpZiAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzVmlzdGEpIC4uLiIuIEl0
J3MgT0sgdG8gY2hhbmdlIG9yIGFkZCB2YWx1ZXMsCisvLyB0aG91Z2guCitlbnVtIFdpbmRvd3NW
ZXJzaW9uIHsKKyAgICBVbmtub3duV2luZG93c1ZlcnNpb24gPSAwLAorICAgIC8vIENFLWJhc2Vk
IHZlcnNpb25zCisgICAgV2luZG93c0NFLAorICAgIC8vIDMueC1iYXNlZCB2ZXJzaW9ucworICAg
IFdpbmRvd3MzXzEsCisgICAgLy8gOXgtYmFzZWQgdmVyc2lvbnMKKyAgICBXaW5kb3dzOTUsCisg
ICAgV2luZG93czk4LAorICAgIFdpbmRvd3NNRSwKKyAgICAvLyBOVC1iYXNlZCB2ZXJzaW9ucwor
ICAgIFdpbmRvd3NOVDMsCisgICAgV2luZG93c05UNCwKKyAgICBXaW5kb3dzMjAwMCwKKyAgICBX
aW5kb3dzWFAsCisgICAgV2luZG93c1NlcnZlcjIwMDMsCisgICAgV2luZG93c1Zpc3RhLAorICAg
IFdpbmRvd3NTZXJ2ZXIyMDA4LAorICAgIFdpbmRvd3M3LAorfTsKKworLy8gSWYgc3VwcGxpZWQs
IHxtYWpvcnwgYW5kIHxtaW5vcnwgYXJlIHNldCB0byB0aGUgT1NWRVJTSU9OSU5GTzo6ZHdNYWpv
clZlcnNpb24KKy8vIGFuZCBkd01pbm9yVmVyc2lvbiBmaWVsZCB2YWx1ZXMsIHJlc3BlY3RpdmVs
eS4KK1dpbmRvd3NWZXJzaW9uIHdpbmRvd3NWZXJzaW9uKGludCogbWFqb3IgPSAwLCBpbnQqIG1p
bm9yID0gMCk7CisKK1N0cmluZyB3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCk7CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gODA2MTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCBib29sIFRoZW1lUGFpbnRlcjo6c19oYXNJbnN0YW5j
ZSA9IGZhbHNlCiAKIHN0YXRpYyB2b2lkIGdldE5vbkNsaWVudE1ldHJpY3MoTk9OQ0xJRU5UTUVU
UklDUyogbWV0cmljcykKIHsKLSAgICBzdGF0aWMgVUlOVCBzaXplID0gaXNSdW5uaW5nT25WaXN0
YU9yTGF0ZXIoKSA/Ci0gICAgICAgIHNpemVvZihOT05DTElFTlRNRVRSSUNTKSA6IE5PTkNMSUVO
VE1FVFJJQ1NfU0laRV9QUkVfVklTVEE7CisgICAgc3RhdGljIFVJTlQgc2l6ZSA9ICh3aW5kb3dz
VmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSkgPworICAgICAgICAoc2l6ZW9mIE5PTkNMSUVOVE1F
VFJJQ1MpIDogTk9OQ0xJRU5UTUVUUklDU19TSVpFX1BSRV9WSVNUQTsKICAgICBtZXRyaWNzLT5j
YlNpemUgPSBzaXplOwogICAgIGJvb2wgc3VjY2VzcyA9ICEhU3lzdGVtUGFyYW1ldGVyc0luZm8o
U1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemUsIG1ldHJpY3MsIDApOwogICAgIEFTU0VSVChz
dWNjZXNzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2lu
LmNwcAkocmV2aXNpb24gODA1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjksMTUgKzU2OSwxNyBAQCBUaGVtZURh
dGEgUmVuZGVyVGhlbWVXaW46OmdldFRoZW1lRGF0YShSCiAgICAgICAgICAgICByZXN1bHQubV9z
dGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTWVudWxpc3RQYXJ0OgotICAgICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKLSAgICAg
ICAgICAgIHJlc3VsdC5tX3BhcnQgPSBpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpID8gQ1BfRFJP
UERPV05CVVRUT05SSUdIVCA6IENQX0RST1BET1dOQlVUVE9OOwotICAgICAgICAgICAgaWYgKGlz
UnVubmluZ09uVmlzdGFPckxhdGVyKCkgJiYgZG9jdW1lbnRJc0luQXBwbGljYXRpb25DaHJvbWVN
b2RlKG8tPmRvY3VtZW50KCkpKSB7CisgICAgICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OiB7
CisgICAgICAgICAgICBjb25zdCBib29sIGlzVmlzdGFPckxhdGVyID0gKHdpbmRvd3NWZXJzaW9u
KCkgPj0gV2luZG93c1Zpc3RhKTsKKyAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBpc1Zpc3Rh
T3JMYXRlciA/IENQX0RST1BET1dOQlVUVE9OUklHSFQgOiBDUF9EUk9QRE9XTkJVVFRPTjsKKyAg
ICAgICAgICAgIGlmIChpc1Zpc3RhT3JMYXRlciAmJiBkb2N1bWVudElzSW5BcHBsaWNhdGlvbkNo
cm9tZU1vZGUoby0+ZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgInJlYWRv
bmx5IiBsb29rIHdlIHVzZSBpbiBhcHBsaWNhdGlvbiBjaHJvbWUgbW9kZQogICAgICAgICAgICAg
ICAgIC8vIG9ubHkgdXNlcyBhICJub3JtYWwiIGxvb2sgZm9yIHRoZSBkcm9wIGRvd24gYnV0dG9u
LgogICAgICAgICAgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gVFNfTk9STUFMOwogICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0
ZShvKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgUmFkaW9Q
YXJ0OgogICAgICAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX1JBRElPOwogICAgICAgICAgICAg
cmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKQEAgLTU4NSw3ICs1ODcsNyBAQCBU
aGVtZURhdGEgUmVuZGVyVGhlbWVXaW46OmdldFRoZW1lRGF0YShSCiAgICAgICAgIGNhc2UgU2Vh
cmNoRmllbGRQYXJ0OgogICAgICAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CiAgICAgICAgIGNhc2Ug
VGV4dEFyZWFQYXJ0OgotICAgICAgICAgICAgcmVzdWx0Lm1fcGFydCA9IGlzUnVubmluZ09uVmlz
dGFPckxhdGVyKCkgPyBFUF9FRElUQk9SREVSX05PU0NST0xMIDogVEZQX1RFWFRGSUVMRDsKKyAg
ICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzVmlz
dGEpID8gRVBfRURJVEJPUkRFUl9OT1NDUk9MTCA6IFRGUF9URVhURklFTEQ7CiAgICAgICAgICAg
ICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgU2xpZGVySG9yaXpvbnRhbFBhcnQ6CkBAIC03MjgsNyArNzMwLDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdChSZW5kZQogewogICAgIEhBTkRMRSB0
aGVtZTsKICAgICBpbnQgcGFydDsKLSAgICBpZiAoaGF2ZVRoZW1lICYmIGlzUnVubmluZ09uVmlz
dGFPckxhdGVyKCkpIHsKKyAgICBpZiAoaGF2ZVRoZW1lICYmICh3aW5kb3dzVmVyc2lvbigpID49
IFdpbmRvd3NWaXN0YSkpIHsKICAgICAgICAgdGhlbWUgPSBtZW51TGlzdFRoZW1lKCk7CiAgICAg
ICAgIGlmIChkb2N1bWVudElzSW5BcHBsaWNhdGlvbkNocm9tZU1vZGUoby0+ZG9jdW1lbnQoKSkp
CiAgICAgICAgICAgICBwYXJ0ID0gQ1BfUkVBRE9OTFk7CkBAIC03OTIsNyArNzk0LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgICAgICBidXR0b25SZWN0
LnNldFgoYnV0dG9uUmVjdC5tYXhYKCkgLSBkcm9wRG93bkJ1dHRvbldpZHRoKTsKICAgICBidXR0
b25SZWN0LnNldFdpZHRoKGRyb3BEb3duQnV0dG9uV2lkdGgpOwogCi0gICAgaWYgKGlzUnVubmlu
Z09uVmlzdGFPckxhdGVyKCkpIHsKKyAgICBpZiAoKHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93
c1Zpc3RhKSkgewogICAgICAgICAvLyBPdXRzZXQgdGhlIHRvcCwgcmlnaHQsIGFuZCBib3R0b20g
Ym9yZGVycyBvZiB0aGUgYnV0dG9uIHNvIHRoYXQgdGhleSBjb2luY2lkZSB3aXRoIHRoZSA8c2Vs
ZWN0PidzIGJvcmRlci4KICAgICAgICAgYnV0dG9uUmVjdC5zZXRZKGJ1dHRvblJlY3QueSgpIC0g
dmlzdGFNZW51TGlzdEJ1dHRvbk91dHNldCk7CiAgICAgICAgIGJ1dHRvblJlY3Quc2V0SGVpZ2h0
KGJ1dHRvblJlY3QuaGVpZ2h0KCkgKyAyICogdmlzdGFNZW51TGlzdEJ1dHRvbk91dHNldCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDY2NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTAzLTA5ICBQZXRlciBLYXN0
aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVbmlmeSBXaW5kb3dzIHZlcnNpb24gY2hlY2tzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU5NzkKKworICAgICAg
ICAqIFVJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCk6CisKIDIwMTEtMDMtMDkgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQg
Y29ycmVjdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViUGFnZVBy
b3h5V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dl
YlBhZ2VQcm94eVdpbi5jcHAJKHJldmlzaW9uIDgwNTc3KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsy
NSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
KyNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCiAKICNpbmNsdWRlICJyZXNvdXJjZS5oIgogI2luY2x1
ZGUgPHRjaGFyLmg+CkBAIC0zNiwzMCArMzcsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBTdHJpbmcgd2luZG93c1ZlcnNpb24oKQot
ewotICAgU3RyaW5nIG9zVmVyc2lvbjsKLSAgIE9TVkVSU0lPTklORk8gdmVyc2lvbkluZm8gPSB7
IDAgfTsKLSAgIHZlcnNpb25JbmZvLmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YodmVyc2lv
bkluZm8pOwotICAgOjpHZXRWZXJzaW9uRXgoJnZlcnNpb25JbmZvKTsKLQotICAgaWYgKHZlcnNp
b25JbmZvLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUykgewotICAg
ICAgIGlmICh2ZXJzaW9uSW5mby5kd01ham9yVmVyc2lvbiA9PSA0KSB7Ci0gICAgICAgICAgIGlm
ICh2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbiA9PSAwKQotICAgICAgICAgICAgICAgb3NWZXJz
aW9uID0gIldpbmRvd3MgOTUiOwotICAgICAgICAgICBlbHNlIGlmICh2ZXJzaW9uSW5mby5kd01p
bm9yVmVyc2lvbiA9PSAxMCkKLSAgICAgICAgICAgICAgIG9zVmVyc2lvbiA9ICJXaW5kb3dzIDk4
IjsKLSAgICAgICAgICAgZWxzZSBpZiAodmVyc2lvbkluZm8uZHdNaW5vclZlcnNpb24gPT0gOTAp
Ci0gICAgICAgICAgICAgICBvc1ZlcnNpb24gPSAiV2luZG93cyA5ODsgV2luIDl4IDQuOTAiOwot
ICAgICAgIH0KLSAgIH0gZWxzZSBpZiAodmVyc2lvbkluZm8uZHdQbGF0Zm9ybUlkID09IFZFUl9Q
TEFURk9STV9XSU4zMl9OVCkKLSAgICAgICBvc1ZlcnNpb24gPSBtYWtlU3RyaW5nKCJXaW5kb3dz
IE5UICIsIFN0cmluZzo6bnVtYmVyKHZlcnNpb25JbmZvLmR3TWFqb3JWZXJzaW9uKSwgJy4nLCBT
dHJpbmc6Om51bWJlcih2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbikpOwotCi0gICBpZiAoIW9z
VmVyc2lvbi5sZW5ndGgoKSkKLSAgICAgICBvc1ZlcnNpb24gPSBtYWtlU3RyaW5nKCJXaW5kb3dz
ICIsIFN0cmluZzo6bnVtYmVyKHZlcnNpb25JbmZvLmR3TWFqb3JWZXJzaW9uKSwgJy4nLCBTdHJp
bmc6Om51bWJlcih2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbikpOwotICAgcmV0dXJuIG9zVmVy
c2lvbjsKLX0KLQogc3RhdGljIFN0cmluZyB1c2VyVmlzaWJsZVdlYktpdFZlcnNpb25TdHJpbmco
KQogewogICAgIExQV1NUUiBidWlsZE51bWJlclN0cmluZ1B0cjsKQEAgLTcxLDEyICs0OCwxMCBA
QCBzdGF0aWMgU3RyaW5nIHVzZXJWaXNpYmxlV2ViS2l0VmVyc2lvblN0CiAKIFN0cmluZyBXZWJQ
YWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1l
Rm9yVXNlckFnZW50KQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBvc1ZlcnNp
b24sICh3aW5kb3dzVmVyc2lvbigpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IG9zVmVyc2lvbiwgKHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKSkpOwogICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCB3ZWJLaXRWZXJzaW9uLCAodXNlclZpc2libGVXZWJLaXRWZXJz
aW9uU3RyaW5nKCkpKTsKIAotICAgIGlmIChhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIG9zVmVy
c2lvbiwgIikgQXBwbGVXZWJLaXQvIiwgd2ViS2l0VmVyc2lvbiwgIiAoS0hUTUwsIGxpa2UgR2Vj
a28pIik7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBvc1ZlcnNpb24s
ICIpIEFwcGxlV2ViS2l0LyIsIHdlYktpdFZlcnNpb24sICIgKEtIVE1MLCBsaWtlIEdlY2tvKSAi
LCBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJN
b3ppbGxhLzUuMCAoIiwgb3NWZXJzaW9uLCAiKSBBcHBsZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9u
LCAiIChLSFRNTCwgbGlrZSBHZWNrbykiLCBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQuaXNF
bXB0eSgpID8gIiIgOiAiICIsIGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gODA2Njcp
CisrKyBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMyBAQAorMjAxMS0wMy0wOSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5pZnkg
V2luZG93cyB2ZXJzaW9uIGNoZWNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU1OTc5CisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vic2V0dGlu
Z3MuY3BwOgorICAgICAgICAod2Via2l0T1NWZXJzaW9uKToKKwogMjAxMS0wMy0wOCAgQ2hyaXN0
aWFuIER5d2FuICA8Y2hyaXN0aWFuQGxhbmVkby5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
TWFydGluIFJvYmluc29uLgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnNldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vic2V0dGluZ3MuY3BwCShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5
LDggQEAKIAogI2lmIE9TKFVOSVgpCiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbGlmIE9T
KFdJTkRPV1MpCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogI2VuZGlmCiAKIC8qKgpAQCAtMjA4
LDcgKzIxMCw3IEBAIHN0YXRpYyBTdHJpbmcgd2Via2l0T1NWZXJzaW9uKCkKICAgICBlbHNlCiAg
ICAgICAgIHVhT1NWZXJzaW9uID0gU3RyaW5nKCJVbmtub3duIik7CiAjZWxpZiBPUyhXSU5ET1dT
KQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCB1YU9TVmVyc2lvbiwgKFN0
cmluZygiV2luZG93cyIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcs
IHVhT1NWZXJzaW9uLCAod2luZG93c1ZlcnNpb25Gb3JVQVN0cmluZygpKSk7CiAjZWxzZQogICAg
IERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCB1YU9TVmVyc2lvbiwgKFN0cmluZygi
VW5rbm93biIpKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDY2NykK
KysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTEtMDMtMDkgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaWZ5IFdp
bmRvd3MgdmVyc2lvbiBjaGVja3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NTk3OQorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAg
ICAgKFFXZWJQYWdlOjp1c2VyQWdlbnRGb3JVcmwpOgorCiAyMDExLTAzLTA3ICBTYW0gV2Vpbmln
ICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29u
LgpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gODA1NzcpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2
ICsxMDQsOSBAQAogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpZiBkZWZpbmVkIFFfT1NfV0lOMzIKKyNp
bmNsdWRlICJTeXN0ZW1JbmZvLmgiCisjZW5kaWYgLy8gUV9PU19XSU4zMgogI2luY2x1ZGUgIlRl
eHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIldlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1
ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCkBAIC0zNzc0LDM2ICszNzc3LDcgQEAgUVN0cmluZyBRV2Vi
UGFnZTo6dXNlckFnZW50Rm9yVXJsKGNvbnN0CiAjZWxpZiBkZWZpbmVkIFFfT1NfV0lOMzIKIAog
ICAgICAgICBzd2l0Y2ggKFFTeXNJbmZvOjpXaW5kb3dzVmVyc2lvbikgewotICAgICAgICBjYXNl
IFFTeXNJbmZvOjpXVl8zMnM6Ci0gICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6
OmZyb21MYXRpbjEoIldpbmRvd3MgMy4xIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBRU3lzSW5mbzo6V1ZfOTU6Ci0gICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJp
bmc6OmZyb21MYXRpbjEoIldpbmRvd3MgOTUiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFFTeXNJbmZvOjpXVl85ODoKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0
cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyA5OCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUVN5c0luZm86OldWX01lOgotICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIDk4OyBXaW4gOXggNC45MCIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86OldWX05UOgotICAgICAgICAgICAgZmly
c3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5OVDQuMCIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86OldWXzIwMDA6Ci0gICAgICAgICAgICBm
aXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgTlQgNS4wIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfWFA6Ci0gICAgICAg
ICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgTlQgNS4x
Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfMjAwMzoK
LSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93
cyBOVCA1LjIiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFTeXNJbmZvOjpX
Vl9WSVNUQToKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGlu
MSgiV2luZG93cyBOVCA2LjAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgY2FzZSBR
U3lzSW5mbzo6V1ZfV0lORE9XUzc6Ci0gICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJp
bmc6OmZyb21MYXRpbjEoIldpbmRvd3MgTlQgNi4xIik7Ci0gICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgIC8vIEZJWE1FOiBFeHBhbmQgd2luZG93c1ZlcnNpb25Gb3JVQVN0cmluZygpIHRvIGNv
dmVyIFdpbmRvd3MgQ0UuCiAgICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9DRToKICAgICAgICAg
ICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyBDRSIpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0zODE2LDYgKzM3OTAsOCBAQCBRU3RyaW5nIFFXZWJQYWdl
Ojp1c2VyQWdlbnRGb3JVcmwoY29uc3QKICAgICAgICAgIGNhc2UgUVN5c0luZm86OldWX0NFXzY6
CiAgICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRv
d3MgQ0UgNi54Iik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBmaXJzdFBhcnRUZW1wICs9IHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKTsKICAg
ICAgICAgfQogCiAjZWxpZiBkZWZpbmVkIFFfT1NfREFSV0lOCkluZGV4OiBTb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CShyZXZpc2lvbiA4MDY2NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTAzLTA5ICBQZXRlciBLYXN0aW5nICA8cGth
c3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBVbmlmeSBXaW5kb3dzIHZlcnNpb24gY2hlY2tzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU5NzkKKworICAgICAgICAqIFdlYlZp
ZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6c3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRp
b25OYW1lKToKKyAgICAgICAgKHdlYktpdFZlcnNpb25TdHJpbmcpOgorCiAyMDExLTAzLTA3ICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJz
IENhcmxzc29uLgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDgwNTc3KQorKysg
U291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
TWFyc2hhbGxpbmdIZWxwZXJzLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKKyNpbmNsdWRl
ICJTeXN0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCiAjaW5jbHVk
ZSAiV2ViQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVDbGllbnQuaCIK
QEAgLTE4NCw4ICsxODUsNyBAQCB1c2luZyBKU0M6OkpTTG9jazsKIHN0YXRpYyBITU9EVUxFIGFj
Y2Vzc2liaWxpdHlMaWI7CiBzdGF0aWMgSGFzaFNldDxXZWJWaWV3Kj4gcGVuZGluZ0RlbGV0ZUJh
Y2tpbmdTdG9yZVNldDsKIAotc3RhdGljIFN0cmluZyBvc1ZlcnNpb24oKTsKLXN0YXRpYyBTdHJp
bmcgd2ViS2l0VmVyc2lvbigpOworc3RhdGljIFN0cmluZyB3ZWJLaXRWZXJzaW9uU3RyaW5nKCk7
CiAKIFdlYlZpZXcqIGtpdChQYWdlKiBwYWdlKQogewpAQCAtMTI0NCw5ICsxMjQ0LDEwIEBAIGJv
b2wgV2ViVmlldzo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWIKIAogU3RyaW5nIFdlYlZpZXc6
OnN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShjb25zdCBTdHJpbmcmIGFwcGxp
Y2F0aW9uTmFtZSkKIHsKLSAgICBpZiAoYXBwbGljYXRpb25OYW1lLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBvc1ZlcnNpb24oKSwgIikgQXBw
bGVXZWJLaXQvIiwgd2ViS2l0VmVyc2lvbigpLCAiIChLSFRNTCwgbGlrZSBHZWNrbykiKTsKLSAg
ICByZXR1cm4gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIG9zVmVyc2lvbigpLCAiKSBBcHBs
ZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9uKCksICIgKEtIVE1MLCBsaWtlIEdlY2tvKSAiLCBhcHBs
aWNhdGlvbk5hbWUpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBvc1ZlcnNpb24s
ICh3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCkpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgd2ViS2l0VmVyc2lvbiwgKHdlYktpdFZlcnNpb25TdHJpbmcoKSkpOworCisgICAg
cmV0dXJuIG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBvc1ZlcnNpb24sICIpIEFwcGxlV2Vi
S2l0LyIsIHdlYktpdFZlcnNpb24sICIgKEtIVE1MLCBsaWtlIEdlY2tvKSIsIGFwcGxpY2F0aW9u
TmFtZUZvclVzZXJBZ2VudC5pc0VtcHR5KCkgPyAiIiA6ICIgIiwgYXBwbGljYXRpb25OYW1lRm9y
VXNlckFnZW50KTsKIH0KIAogUGFnZSogV2ViVmlldzo6cGFnZSgpCkBAIC0yMzM2LDMxICsyMzM3
LDcgQEAgYm9vbCBXZWJWaWV3OjpkZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkgYwogI2VuZGlmCiB9
CiAKLXN0YXRpYyBTdHJpbmcgb3NWZXJzaW9uKCkKLXsKLSAgICBTdHJpbmcgb3NWZXJzaW9uOwot
ICAgIE9TVkVSU0lPTklORk8gdmVyc2lvbkluZm8gPSB7MH07Ci0gICAgdmVyc2lvbkluZm8uZHdP
U1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZih2ZXJzaW9uSW5mbyk7Ci0gICAgR2V0VmVyc2lvbkV4
KCZ2ZXJzaW9uSW5mbyk7Ci0KLSAgICBpZiAodmVyc2lvbkluZm8uZHdQbGF0Zm9ybUlkID09IFZF
Ul9QTEFURk9STV9XSU4zMl9XSU5ET1dTKSB7Ci0gICAgICAgIGlmICh2ZXJzaW9uSW5mby5kd01h
am9yVmVyc2lvbiA9PSA0KSB7Ci0gICAgICAgICAgICBpZiAodmVyc2lvbkluZm8uZHdNaW5vclZl
cnNpb24gPT0gMCkKLSAgICAgICAgICAgICAgICBvc1ZlcnNpb24gPSAiV2luZG93cyA5NSI7Ci0g
ICAgICAgICAgICBlbHNlIGlmICh2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbiA9PSAxMCkKLSAg
ICAgICAgICAgICAgICBvc1ZlcnNpb24gPSAiV2luZG93cyA5OCI7Ci0gICAgICAgICAgICBlbHNl
IGlmICh2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbiA9PSA5MCkKLSAgICAgICAgICAgICAgICBv
c1ZlcnNpb24gPSAiV2luZG93cyA5ODsgV2luIDl4IDQuOTAiOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIGlmICh2ZXJzaW9uSW5mby5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05U
KQotICAgICAgICBvc1ZlcnNpb24gPSBtYWtlU3RyaW5nKCJXaW5kb3dzIE5UICIsIFN0cmluZzo6
bnVtYmVyKHZlcnNpb25JbmZvLmR3TWFqb3JWZXJzaW9uKSwgJy4nLCBTdHJpbmc6Om51bWJlcih2
ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbikpOwotCi0gICAgaWYgKCFvc1ZlcnNpb24ubGVuZ3Ro
KCkpCi0gICAgICAgIG9zVmVyc2lvbiA9IG1ha2VTdHJpbmcoIldpbmRvd3MgIiwgU3RyaW5nOjpu
dW1iZXIodmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb24pLCAnLicsIFN0cmluZzo6bnVtYmVyKHZl
cnNpb25JbmZvLmR3TWlub3JWZXJzaW9uKSk7Ci0gICAgcmV0dXJuIG9zVmVyc2lvbjsKLX0KLQot
c3RhdGljIFN0cmluZyB3ZWJLaXRWZXJzaW9uKCkKK3N0YXRpYyBTdHJpbmcgd2ViS2l0VmVyc2lv
blN0cmluZygpCiB7CiAgICAgTFBXU1RSIGJ1aWxkTnVtYmVyU3RyaW5nUHRyOwogICAgIGlmICgh
OjpMb2FkU3RyaW5nVyhnSW5zdGFuY2UsIEJVSUxEX05VTUJFUiwgcmVpbnRlcnByZXRfY2FzdDxM
UFdTVFI+KCZidWlsZE51bWJlclN0cmluZ1B0ciksIDApIHx8ICFidWlsZE51bWJlclN0cmluZ1B0
cikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85276</attachid>
            <date>2011-03-09 18:53:18 -0800</date>
            <delta_ts>2011-03-09 18:59:07 -0800</delta_ts>
            <desc>Part 2, v4</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>30053</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjgyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDMtMDkgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVuaWZ5IFdpbmRvd3MgdmVyc2lvbiBjaGVja3MuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTk3OQorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06IEZpeCBzcGFjZXMgLT4gdGFicy4KKyAgICAgICAgKiBTdHJp
bmdzTm90VG9CZUxvY2FsaXplZC50eHQ6CisgICAgICAgICogV2ViQ29yZS5wcm86IEFkZCBTeXN0
ZW1JbmZvLiogdG8gUXQgYnVpbGQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZUNocm9taXVtV2luOjppbnZhbGlkYXRlT25Nb3VzZUVudGVyRXhpdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZVN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OmdldFRoZW1lQXJyb3dTdGF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVD
aHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaWxsQk1QR2x5cGhzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vQ3Vyc29yV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVNoYXJlZEN1cnNvcik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV2luOjpTY3JvbGxiYXJUaGVt
ZVdpbik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwOiBBZGQgZnVsbC1m
bGVkZ2VkIHZlcnNpb24gY2hlY2sgYW5kIFVBIHN0cmluZyBoZWxwZXIgZnVuY3Rpb24uCisgICAg
ICAgIChXZWJDb3JlOjp3aW5kb3dzVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjp3aW5kb3dz
VmVyc2lvbkZvclVBU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5o
OiBBZGQgZnVsbC1mbGVkZ2VkIHZlcnNpb24gY2hlY2sgYW5kIFVBIHN0cmluZyBoZWxwZXIgZnVu
Y3Rpb24uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0Tm9uQ2xpZW50TWV0cmljcyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2lu
OjpnZXRUaGVtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50
TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxp
c3RCdXR0b24pOgorCiAyMDExLTAzLTA5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiA4MDYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0zODUxLDggKzM4NTEsOCBAQCBpZiBUQVJHRVRfV0lOMzIKIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JX
aW4uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oIFwK
LSAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAgXAotICAgIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1N5c3RlbUluZm8uaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0
YWJhc2VXaW4uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdl
VGhyb3R0bGVyV2luLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbi5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9TdHJpbmdzTm90VG9CZUxv
Y2FsaXplZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU3RyaW5nc05vdFRvQmVM
b2NhbGl6ZWQudHh0CShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL1N0cmluZ3NO
b3RUb0JlTG9jYWxpemVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTExLDkgKzUxMSwxNCBAQAog
IldlYlZpZXdXaW5kb3dDbGFzcyIKICJXZWJXb3JrZXJzUHJpdmF0ZSIKICJXaW5kb3dzICIKKyJX
aW5kb3dzIENFIgorIldpbmRvd3MgQ0UgIgorIldpbmRvd3MgQ0UgLk5FVCIKKyJXaW5kb3dzIDMu
MSIKICJXaW5kb3dzIDk1IgogIldpbmRvd3MgOTgiCiAiV2luZG93cyA5ODsgV2luIDl4IDQuOTAi
CisiV2luTlQ0LjAiCiAiV2luZG93cyBOVCAiCiAiV212UGx1Z2luIgogIlhTTCIKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvCShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTIzLDcgKzI1MjMsOSBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfU01PT1RIX1NDUk9MTElOCiB9CiAKIHdpbjMyLSp8d2luY2UqIHsKKyAgICBIRUFERVJT
ICs9IHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmgKICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAg
cGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vd2luL1N5c3Rl
bVRpbWVXaW4uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0
aW9uTWF0cml4V2luLmNwcAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHJl
dmlzaW9uIDgwNjExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAg
aW50IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnNjcm9sbGJhcgogCiBib29sIFNjcm9sbGJh
clRoZW1lQ2hyb21pdW1XaW46OmludmFsaWRhdGVPbk1vdXNlRW50ZXJFeGl0KCkKIHsKLSAgICBy
ZXR1cm4gaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKTsKKyAgICByZXR1cm4gd2luZG93c1ZlcnNp
b24oKSA+PSBXaW5kb3dzVmlzdGE7CiB9CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdp
bjo6c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4oU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQpAQCAtMTYwLDEyICsxNjAsMTIgQEAgaW50IFNjcm9s
bGJhclRoZW1lQ2hyb21pdW1XaW46OmdldFRoZW1lUwogICAgIGlmIChzY3JvbGxiYXItPnByZXNz
ZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KSB7CiAgICAgICAgIGlmIChwYXJ0ID09IFRodW1iUGFydCkK
ICAgICAgICAgICAgIHJldHVybiBTQ1JCU19QUkVTU0VEOwotICAgICAgICByZXR1cm4gaXNSdW5u
aW5nT25WaXN0YU9yTGF0ZXIoKSA/IFNDUkJTX0hPVkVSIDogU0NSQlNfTk9STUFMOworICAgICAg
ICByZXR1cm4gKHdpbmRvd3NWZXJzaW9uKCkgPCBXaW5kb3dzVmlzdGEpID8gU0NSQlNfTk9STUFM
IDogU0NSQlNfSE9WRVI7CiAgICAgfQogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybiBTQ1JCU19ESVNBQkxFRDsKICAgICBpZiAoc2Nyb2xsYmFyLT5ob3ZlcmVk
UGFydCgpICE9IHBhcnQgfHwgcGFydCA9PSBCYWNrVHJhY2tQYXJ0IHx8IHBhcnQgPT0gRm9yd2Fy
ZFRyYWNrUGFydCkKLSAgICAgICAgcmV0dXJuIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0g
Tm9QYXJ0IHx8ICFpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpKSA/IFNDUkJTX05PUk1BTCA6IFND
UkJTX0hPVkVSOworICAgICAgICByZXR1cm4gKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBO
b1BhcnQgfHwgKHdpbmRvd3NWZXJzaW9uKCkgPCBXaW5kb3dzVmlzdGEpKSA/IFNDUkJTX05PUk1B
TCA6IFNDUkJTX0hPVkVSOwogICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gTm9Q
YXJ0KQogICAgICAgICByZXR1cm4gU0NSQlNfSE9UOwogICAgIHJldHVybiAoc2Nyb2xsYmFyLT5w
cmVzc2VkUGFydCgpID09IHBhcnQpID8gU0NSQlNfUFJFU1NFRCA6IFNDUkJTX05PUk1BTDsKQEAg
LTE3OSw0MyArMTc5LDQzIEBAIGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVt
ZUEKICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gRm9yd2Fy
ZEJ1dHRvblN0YXJ0UGFydCkgewogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgICAgIGlmIChzY3JvbGxiYXItPnBy
ZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiAhaXNSdW5u
aW5nT25WaXN0YU9yTGF0ZXIoKSA/IEFCU19MRUZUTk9STUFMIDogQUJTX0xFRlRIT1ZFUjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gKHdpbmRvd3NWZXJzaW9uKCkgPCBXaW5kb3dzVmlzdGEpID8g
QUJTX0xFRlROT1JNQUwgOiBBQlNfTEVGVEhPVkVSOwogICAgICAgICAgICAgaWYgKCFzY3JvbGxi
YXItPmVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gQUJTX0xFRlRESVNBQkxFRDsK
ICAgICAgICAgICAgIGlmIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgIT0gcGFydCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8
fCAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSkgPyBBQlNfTEVGVE5PUk1BTCA6IEFCU19MRUZU
SE9WRVI7CisgICAgICAgICAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgp
ID09IE5vUGFydCkgfHwgKHdpbmRvd3NWZXJzaW9uKCkgPCBXaW5kb3dzVmlzdGEpKSA/IEFCU19M
RUZUTk9STUFMIDogQUJTX0xFRlRIT1ZFUjsKICAgICAgICAgICAgIGlmIChzY3JvbGxiYXItPnBy
ZXNzZWRQYXJ0KCkgPT0gTm9QYXJ0KQogICAgICAgICAgICAgICAgIHJldHVybiBBQlNfTEVGVEhP
VDsKICAgICAgICAgICAgIHJldHVybiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IHBhcnQp
ID8KICAgICAgICAgICAgICAgICBBQlNfTEVGVFBSRVNTRUQgOiBBQlNfTEVGVE5PUk1BTDsKICAg
ICAgICAgfQogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFy
dCkKLSAgICAgICAgICAgIHJldHVybiAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSA/IEFCU19V
UE5PUk1BTCA6IEFCU19VUEhPVkVSOworICAgICAgICAgICAgcmV0dXJuICh3aW5kb3dzVmVyc2lv
bigpIDwgV2luZG93c1Zpc3RhKSA/IEFCU19VUE5PUk1BTCA6IEFCU19VUEhPVkVSOwogICAgICAg
ICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIEFCU19VUERJ
U0FCTEVEOwogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpICE9IHBhcnQpCi0g
ICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8
fCAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSkgPyBBQlNfVVBOT1JNQUwgOiBBQlNfVVBIT1ZF
UjsKKyAgICAgICAgICAgIHJldHVybiAoKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBOb1Bh
cnQpIHx8ICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93c1Zpc3RhKSkgPyBBQlNfVVBOT1JNQUwg
OiBBQlNfVVBIT1ZFUjsKICAgICAgICAgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBO
b1BhcnQpCiAgICAgICAgICAgICByZXR1cm4gQUJTX1VQSE9UOwogICAgICAgICByZXR1cm4gKHNj
cm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBwYXJ0KSA/IEFCU19VUFBSRVNTRUQgOiBBQlNfVVBO
T1JNQUw7CiAgICAgfQogICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikgewogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09
IFRodW1iUGFydCkKLSAgICAgICAgICAgIHJldHVybiAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIo
KSA/IEFCU19SSUdIVE5PUk1BTCA6IEFCU19SSUdIVEhPVkVSOworICAgICAgICAgICAgcmV0dXJu
ICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93c1Zpc3RhKSA/IEFCU19SSUdIVE5PUk1BTCA6IEFC
U19SSUdIVEhPVkVSOwogICAgICAgICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuIEFCU19SSUdIVERJU0FCTEVEOwogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5o
b3ZlcmVkUGFydCgpICE9IHBhcnQpCi0gICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhv
dmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8fCAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSkgPyBB
QlNfUklHSFROT1JNQUwgOiBBQlNfUklHSFRIT1ZFUjsKKyAgICAgICAgICAgIHJldHVybiAoKHNj
cm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQpIHx8ICh3aW5kb3dzVmVyc2lvbigpIDwg
V2luZG93c1Zpc3RhKSkgPyBBQlNfUklHSFROT1JNQUwgOiBBQlNfUklHSFRIT1ZFUjsKICAgICAg
ICAgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBOb1BhcnQpCiAgICAgICAgICAgICBy
ZXR1cm4gQUJTX1JJR0hUSE9UOwogICAgICAgICByZXR1cm4gKHNjcm9sbGJhci0+cHJlc3NlZFBh
cnQoKSA9PSBwYXJ0KSA/IEFCU19SSUdIVFBSRVNTRUQgOiBBQlNfUklHSFROT1JNQUw7CiAgICAg
fQogICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAgICAg
ICByZXR1cm4gIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBBQlNfRE9XTk5PUk1BTCA6IEFC
U19ET1dOSE9WRVI7CisgICAgICAgIHJldHVybiAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NW
aXN0YSkgPyBBQlNfRE9XTk5PUk1BTCA6IEFCU19ET1dOSE9WRVI7CiAgICAgaWYgKCFzY3JvbGxi
YXItPmVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIEFCU19ET1dORElTQUJMRUQ7CiAgICAgaWYg
KHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBwYXJ0KQotICAgICAgICByZXR1cm4gKChzY3Jv
bGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8fCAhaXNSdW5uaW5nT25WaXN0YU9yTGF0
ZXIoKSkgPyBBQlNfRE9XTk5PUk1BTCA6IEFCU19ET1dOSE9WRVI7CisgICAgICAgIHJldHVybiAo
KHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQpIHx8ICh3aW5kb3dzVmVyc2lvbigp
IDwgV2luZG93c1Zpc3RhKSkgPyBBQlNfRE9XTk5PUk1BTCA6IEFCU19ET1dOSE9WRVI7CiAgICAg
aWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBOb1BhcnQpCiAgICAgICAgIHJldHVybiBB
QlNfRE9XTkhPVDsKICAgICByZXR1cm4gKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBwYXJ0
KSA/IEFCU19ET1dOUFJFU1NFRCA6IEFCU19ET1dOTk9STUFMOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDgwNjExKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJl
ZU5vZGVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCBz
dGF0aWMgYm9vbCBmaWxsQk1QR2x5cGhzKHVuc2lnbmVkIG9mZnNlCiAgICAgYm9vbCBoYXZlR2x5
cGhzID0gZmFsc2U7CiAgICAgaW50IGludmFsaWRHbHlwaCA9IDB4RkZGRjsKICAgICBjb25zdCBE
V09SRCBjZmZUYWJsZVRhZyA9IDB4MjA0NjQ2NDM7IC8vIDQtYnl0ZSBpZGVudGlmaWVyIGZvciBP
cGVuVHlwZSBDRkYgdGFibGUgKCdDRkYgJykuCi0gICAgaWYgKCFpc1J1bm5pbmdPblZpc3RhT3JM
YXRlcigpICYmICEodG0udG1QaXRjaEFuZEZhbWlseSAmIFRNUEZfVFJVRVRZUEUpICYmIChHZXRG
b250RGF0YShkYywgY2ZmVGFibGVUYWcsIDAsIDAsIDApID09IEdESV9FUlJPUikpCisgICAgaWYg
KCh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93c1Zpc3RhKSAmJiAhKHRtLnRtUGl0Y2hBbmRGYW1p
bHkgJiBUTVBGX1RSVUVUWVBFKSAmJiAoR2V0Rm9udERhdGEoZGMsIGNmZlRhYmxlVGFnLCAwLCAw
LCAwKSA9PSBHRElfRVJST1IpKQogICAgICAgICBpbnZhbGlkR2x5cGggPSAweDFGOwogCiAgICAg
R2x5cGggc3BhY2VHbHlwaCA9IDA7ICAvLyBHbHlwaCBmb3IgYSBzcGFjZS4gTGF6aWx5IGZpbGxl
ZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DdXJzb3JXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DdXJzb3JXaW4uY3BwCShyZXZp
c2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DdXJzb3JXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQml0bWFwSW5mby5o
IgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJT
eXN0ZW1JbmZvLmgiCiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKQEAgLTM5LDIwICs0MCwx
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzdXBwb3J0
c0FscGhhQ3Vyc29ycygpIAotewotICAgIE9TVkVSU0lPTklORk8gb3NpbmZvID0gezB9OwotICAg
IG9zaW5mby5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKE9TVkVSU0lPTklORk8pOwotICAg
IEdldFZlcnNpb25FeCgmb3NpbmZvKTsKLSAgICByZXR1cm4gb3NpbmZvLmR3TWFqb3JWZXJzaW9u
ID4gNSB8fCAob3NpbmZvLmR3TWFqb3JWZXJzaW9uID09IDUgJiYgb3NpbmZvLmR3TWlub3JWZXJz
aW9uID4gMCk7Ci19Ci0KIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEN1cnNvcj4gY3JlYXRlU2hh
cmVkQ3Vyc29yKEltYWdlKiBpbWcsIGNvbnN0IEludFBvaW50JiBob3RTcG90KQogewogICAgIFJl
ZlB0cjxTaGFyZWRDdXJzb3I+IGltcGw7CiAKICAgICBJbnRQb2ludCBlZmZlY3RpdmVIb3RTcG90
ID0gZGV0ZXJtaW5lSG90U3BvdChpbWcsIGhvdFNwb3QpOwotICAgIHN0YXRpYyBib29sIGRvQWxw
aGEgPSBzdXBwb3J0c0FscGhhQ3Vyc29ycygpOworICAgIHN0YXRpYyBib29sIGRvQWxwaGEgPSB3
aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NYUDsKICAgICBCaXRtYXBJbmZvIGN1cnNvckltYWdl
ID0gQml0bWFwSW5mbzo6Y3JlYXRlKEludFNpemUoaW1nLT53aWR0aCgpLCBpbWctPmhlaWdodCgp
KSk7CiAKICAgICBIREMgZGMgPSBHZXREQygwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmNwcAkocmV2aXNpb24gODA1NzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgU2Nyb2xsYmFyVGhlbWVXaW46OlNjcm9sbGJh
clRoZW1lV2luKCkKICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAgIGluaXRpYWxpemVk
ID0gdHJ1ZTsKICAgICAgICAgY2hlY2tBbmRJbml0U2Nyb2xsYmFyVGhlbWUoKTsKLSAgICAgICAg
cnVubmluZ1Zpc3RhID0gaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKTsKKyAgICAgICAgcnVubmlu
Z1Zpc3RhID0gKHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93c1Zpc3RhKTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAJKHJldmlz
aW9uIDgwNTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNywzMCArMjcsOTAgQEAKICNpbmNsdWRlICJTeXN0ZW1JbmZv
LmgiCiAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGlzUnVubmluZ09uVmlz
dGFPckxhdGVyKCkKK1dpbmRvd3NWZXJzaW9uIHdpbmRvd3NWZXJzaW9uKGludCogbWFqb3IsIGlu
dCogbWlub3IpCiB7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBz
dGF0aWMgV2luZG93c1ZlcnNpb24gdmVyc2lvbjsKKyAgICBzdGF0aWMgaW50IG1ham9yVmVyc2lv
biwgbWlub3JWZXJzaW9uOworCisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpbml0
aWFsaXplZCA9IHRydWU7CiAjaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBPU1ZFUlNJT05JTkZPIHZlcnNpb25JbmZvID0gezB9OwogI2Vsc2UKLSAgICBzdGF0aWMgYm9v
bCBpc1Zpc3RhT3JMYXRlcjsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKLQotICAgIGlm
IChpbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuIGlzVmlzdGFPckxhdGVyOworICAgICAgICBP
U1ZFUlNJT05JTkZPRVggdmVyc2lvbkluZm8gPSB7MH07CisjZW5kaWYKKyAgICAgICAgdmVyc2lv
bkluZm8uZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZih2ZXJzaW9uSW5mbyk7CisgICAgICAg
IEdldFZlcnNpb25FeChyZWludGVycHJldF9jYXN0PE9TVkVSU0lPTklORk8qPigmdmVyc2lvbklu
Zm8pKTsKKyAgICAgICAgbWFqb3JWZXJzaW9uID0gdmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb247
CisgICAgICAgIG1pbm9yVmVyc2lvbiA9IHZlcnNpb25JbmZvLmR3TWlub3JWZXJzaW9uOwogCi0g
ICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworI2lmIE9TKFdJTkNFKQorICAgICAgICBpZiAobWFqb3JW
ZXJzaW9uID49IDEgJiYgbWFqb3JWZXJzaW9uIDw9IDcpCisgICAgICAgICAgICB2ZXJzaW9uID0g
c3RhdGljX2Nhc3Q8V2luZG93c1ZlcnNpb24+KFdpbmRvd3NDRTEgKyAobWFqb3JWZXJzaW9uIC0g
MSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2ZXJzaW9uID0gKG1ham9yVmVyc2lvbiA8
IDEpID8gV2luZG93c0NFMSA6IFdpbmRvd3NDRTc7CisjZWxzZQorICAgICAgICBpZiAodmVyc2lv
bkluZm8uZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMnMpCisgICAgICAgICAgICB2
ZXJzaW9uID0gV2luZG93czNfMTsKKyAgICAgICAgZWxzZSBpZiAodmVyc2lvbkluZm8uZHdQbGF0
Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9XSU5ET1dTKSB7CisgICAgICAgICAgICBpZiAo
IW1pbm9yVmVyc2lvbikKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gV2luZG93czk1OworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZlcnNpb24gPSAobWlub3JWZXJzaW9uID09
IDEwKSA/IFdpbmRvd3M5OCA6IFdpbmRvd3NNRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmIChtYWpvclZlcnNpb24gPT0gNSkgeworICAgICAgICAgICAgICAgIGlmICghbWlub3JW
ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gV2luZG93czIwMDA7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gKG1pbm9yVmVy
c2lvbiA9PSAxKSA/IFdpbmRvd3NYUCA6IFdpbmRvd3NTZXJ2ZXIyMDAzOworICAgICAgICAgICAg
fSBlbHNlIGlmIChtYWpvclZlcnNpb24gPj0gNikgeworICAgICAgICAgICAgICAgIGlmICh2ZXJz
aW9uSW5mby53UHJvZHVjdFR5cGUgPT0gVkVSX05UX1dPUktTVEFUSU9OKQorICAgICAgICAgICAg
ICAgICAgICB2ZXJzaW9uID0gKG1ham9yVmVyc2lvbiA9PSA2ICYmICFtaW5vclZlcnNpb24pID8g
V2luZG93c1Zpc3RhIDogV2luZG93czc7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB2ZXJzaW9uID0gV2luZG93c1NlcnZlcjIwMDg7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gKG1ham9yVmVyc2lvbiA9PSA0KSA/IFdpbmRv
d3NOVDQgOiBXaW5kb3dzTlQzOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CiAKLSAgICBPU1ZF
UlNJT05JTkZPRVggdmkgPSB7MH07Ci0gICAgdmkuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVv
ZihPU1ZFUlNJT05JTkZPRVgpOwotICAgIEdldFZlcnNpb25FeChyZWludGVycHJldF9jYXN0PE9T
VkVSU0lPTklORk8qPigmdmkpKTsKKyAgICBpZiAobWFqb3IpCisgICAgICAgICptYWpvciA9IG1h
am9yVmVyc2lvbjsKKyAgICBpZiAobWlub3IpCisgICAgICAgICptaW5vciA9IG1pbm9yVmVyc2lv
bjsKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KIAotICAgIGlzVmlzdGFPckxhdGVyID0gdmkuZHdN
YWpvclZlcnNpb24gPj0gNjsKK1N0cmluZyB3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCkKK3sK
KyAgICBpbnQgbWFqb3IsIG1pbm9yOworICAgIFdpbmRvd3NWZXJzaW9uIHZlcnNpb24gPSB3aW5k
b3dzVmVyc2lvbigmbWFqb3IsICZtaW5vcik7CisgICAgc3dpdGNoICh2ZXJzaW9uKSB7CisgICAg
Y2FzZSBXaW5kb3dzQ0UxOgorICAgIGNhc2UgV2luZG93c0NFMjoKKyAgICBjYXNlIFdpbmRvd3ND
RTM6CisgICAgICAgIHJldHVybiAiV2luZG93cyBDRSI7CisgICAgY2FzZSBXaW5kb3dzQ0U0Ogor
ICAgICAgICByZXR1cm4gIldpbmRvd3MgQ0UgLk5FVCI7CisgICAgY2FzZSBXaW5kb3dzM18xOgor
ICAgICAgICByZXR1cm4gIldpbmRvd3MgMy4xIjsKKyAgICBjYXNlIFdpbmRvd3M5NToKKyAgICAg
ICAgcmV0dXJuICJXaW5kb3dzIDk1IjsKKyAgICBjYXNlIFdpbmRvd3M5ODoKKyAgICAgICAgcmV0
dXJuICJXaW5kb3dzIDk4IjsKKyAgICBjYXNlIFdpbmRvd3NNRToKKyAgICAgICAgcmV0dXJuICJX
aW5kb3dzIDk4OyBXaW4gOXggNC45MCI7CisgICAgY2FzZSBXaW5kb3dzTlQ0OgorICAgICAgICBy
ZXR1cm4gIldpbk5UNC4wIjsKKyAgICB9CiAKLSAgICByZXR1cm4gaXNWaXN0YU9yTGF0ZXI7Ci0j
ZW5kaWYKKyAgICBjaGFyKiBmYW1pbHlOYW1lID0gKHZlcnNpb24gPj0gV2luZG93c05UMykgPyAi
V2luZG93cyBOVCAiIDogIldpbmRvd3MgQ0UgIjsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhmYW1p
bHlOYW1lLCBTdHJpbmc6Om51bWJlcihtYWpvciksICcuJywgU3RyaW5nOjpudW1iZXIobWlub3Ip
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL1N5c3RlbUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vU3lzdGVtSW5mby5oCShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDQ0
IEBACiAjaWZuZGVmIFN5c3RlbUluZm9faAogI2RlZmluZSBTeXN0ZW1JbmZvX2gKIAorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wg
aXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKTsKKy8vIE5PVEU6IEtlZXAgdGhlc2UgaW4gb3JkZXIg
c28gY2FsbGVycyBjYW4gZG8gdGhpbmdzIGxpa2UKKy8vICJpZiAod2luZG93c1ZlcnNpb24oKSA+
PSBXaW5kb3dzVmlzdGEpIC4uLiIuIEl0J3MgT0sgdG8gY2hhbmdlIG9yIGFkZCB2YWx1ZXMsCisv
LyB0aG91Z2guCitlbnVtIFdpbmRvd3NWZXJzaW9uIHsKKyAgICAvLyBDRS1iYXNlZCB2ZXJzaW9u
cworICAgIFdpbmRvd3NDRTEgPSAwLAorICAgIFdpbmRvd3NDRTIsCisgICAgV2luZG93c0NFMywK
KyAgICBXaW5kb3dzQ0U0LAorICAgIFdpbmRvd3NDRTUsCisgICAgV2luZG93c0NFNiwKKyAgICBX
aW5kb3dzQ0U3LAorICAgIC8vIDMueC1iYXNlZCB2ZXJzaW9ucworICAgIFdpbmRvd3MzXzEsCisg
ICAgLy8gOXgtYmFzZWQgdmVyc2lvbnMKKyAgICBXaW5kb3dzOTUsCisgICAgV2luZG93czk4LAor
ICAgIFdpbmRvd3NNRSwKKyAgICAvLyBOVC1iYXNlZCB2ZXJzaW9ucworICAgIFdpbmRvd3NOVDMs
CisgICAgV2luZG93c05UNCwKKyAgICBXaW5kb3dzMjAwMCwKKyAgICBXaW5kb3dzWFAsCisgICAg
V2luZG93c1NlcnZlcjIwMDMsCisgICAgV2luZG93c1Zpc3RhLAorICAgIFdpbmRvd3NTZXJ2ZXIy
MDA4LAorICAgIFdpbmRvd3M3LAorfTsKKworLy8gSWYgc3VwcGxpZWQsIHxtYWpvcnwgYW5kIHxt
aW5vcnwgYXJlIHNldCB0byB0aGUgT1NWRVJTSU9OSU5GTzo6ZHdNYWpvclZlcnNpb24KKy8vIGFu
ZCBkd01pbm9yVmVyc2lvbiBmaWVsZCB2YWx1ZXMsIHJlc3BlY3RpdmVseS4KK1dpbmRvd3NWZXJz
aW9uIHdpbmRvd3NWZXJzaW9uKGludCogbWFqb3IgPSAwLCBpbnQqIG1pbm9yID0gMCk7CisKK1N0
cmluZyB3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1X
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gODA2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4
ICsxNDEsOCBAQCBib29sIFRoZW1lUGFpbnRlcjo6c19oYXNJbnN0YW5jZSA9IGZhbHNlCiAKIHN0
YXRpYyB2b2lkIGdldE5vbkNsaWVudE1ldHJpY3MoTk9OQ0xJRU5UTUVUUklDUyogbWV0cmljcykK
IHsKLSAgICBzdGF0aWMgVUlOVCBzaXplID0gaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSA/Ci0g
ICAgICAgIHNpemVvZihOT05DTElFTlRNRVRSSUNTKSA6IE5PTkNMSUVOVE1FVFJJQ1NfU0laRV9Q
UkVfVklTVEE7CisgICAgc3RhdGljIFVJTlQgc2l6ZSA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdp
bmRvd3NWaXN0YSkgPworICAgICAgICAoc2l6ZW9mIE5PTkNMSUVOVE1FVFJJQ1MpIDogTk9OQ0xJ
RU5UTUVUUklDU19TSVpFX1BSRV9WSVNUQTsKICAgICBtZXRyaWNzLT5jYlNpemUgPSBzaXplOwog
ICAgIGJvb2wgc3VjY2VzcyA9ICEhU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVO
VE1FVFJJQ1MsIHNpemUsIG1ldHJpY3MsIDApOwogICAgIEFTU0VSVChzdWNjZXNzKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAkocmV2aXNpb24g
ODA1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NjksMTUgKzU2OSwxNyBAQCBUaGVtZURhdGEgUmVuZGVyVGhlbWVX
aW46OmdldFRoZW1lRGF0YShSCiAgICAgICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWlu
ZVN0YXRlKG8pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTWVudWxpc3RQYXJ0
OgotICAgICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKLSAgICAgICAgICAgIHJlc3VsdC5t
X3BhcnQgPSBpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpID8gQ1BfRFJPUERPV05CVVRUT05SSUdI
VCA6IENQX0RST1BET1dOQlVUVE9OOwotICAgICAgICAgICAgaWYgKGlzUnVubmluZ09uVmlzdGFP
ckxhdGVyKCkgJiYgZG9jdW1lbnRJc0luQXBwbGljYXRpb25DaHJvbWVNb2RlKG8tPmRvY3VtZW50
KCkpKSB7CisgICAgICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OiB7CisgICAgICAgICAgICBj
b25zdCBib29sIGlzVmlzdGFPckxhdGVyID0gKHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93c1Zp
c3RhKTsKKyAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBpc1Zpc3RhT3JMYXRlciA/IENQX0RS
T1BET1dOQlVUVE9OUklHSFQgOiBDUF9EUk9QRE9XTkJVVFRPTjsKKyAgICAgICAgICAgIGlmIChp
c1Zpc3RhT3JMYXRlciAmJiBkb2N1bWVudElzSW5BcHBsaWNhdGlvbkNocm9tZU1vZGUoby0+ZG9j
dW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgInJlYWRvbmx5IiBsb29rIHdlIHVz
ZSBpbiBhcHBsaWNhdGlvbiBjaHJvbWUgbW9kZQogICAgICAgICAgICAgICAgIC8vIG9ubHkgdXNl
cyBhICJub3JtYWwiIGxvb2sgZm9yIHRoZSBkcm9wIGRvd24gYnV0dG9uLgogICAgICAgICAgICAg
ICAgIHJlc3VsdC5tX3N0YXRlID0gVFNfTk9STUFMOwogICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgUmFkaW9QYXJ0OgogICAgICAgICAg
ICAgcmVzdWx0Lm1fcGFydCA9IEJQX1JBRElPOwogICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUg
PSBkZXRlcm1pbmVTdGF0ZShvKTsKQEAgLTU4NSw3ICs1ODcsNyBAQCBUaGVtZURhdGEgUmVuZGVy
VGhlbWVXaW46OmdldFRoZW1lRGF0YShSCiAgICAgICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0Ogog
ICAgICAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CiAgICAgICAgIGNhc2UgVGV4dEFyZWFQYXJ0Ogot
ICAgICAgICAgICAgcmVzdWx0Lm1fcGFydCA9IGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBF
UF9FRElUQk9SREVSX05PU0NST0xMIDogVEZQX1RFWFRGSUVMRDsKKyAgICAgICAgICAgIHJlc3Vs
dC5tX3BhcnQgPSAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzVmlzdGEpID8gRVBfRURJVEJP
UkRFUl9OT1NDUk9MTCA6IFRGUF9URVhURklFTEQ7CiAgICAgICAgICAgICByZXN1bHQubV9zdGF0
ZSA9IGRldGVybWluZVN0YXRlKG8pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
U2xpZGVySG9yaXpvbnRhbFBhcnQ6CkBAIC03MjgsNyArNzMwLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZVdpbjo6cGFpbnRNZW51TGlzdChSZW5kZQogewogICAgIEhBTkRMRSB0aGVtZTsKICAgICBpbnQg
cGFydDsKLSAgICBpZiAoaGF2ZVRoZW1lICYmIGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpIHsK
KyAgICBpZiAoaGF2ZVRoZW1lICYmICh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSkp
IHsKICAgICAgICAgdGhlbWUgPSBtZW51TGlzdFRoZW1lKCk7CiAgICAgICAgIGlmIChkb2N1bWVu
dElzSW5BcHBsaWNhdGlvbkNocm9tZU1vZGUoby0+ZG9jdW1lbnQoKSkpCiAgICAgICAgICAgICBw
YXJ0ID0gQ1BfUkVBRE9OTFk7CkBAIC03OTIsNyArNzk0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdp
bjo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgICAgICBidXR0b25SZWN0LnNldFgoYnV0dG9uUmVj
dC5tYXhYKCkgLSBkcm9wRG93bkJ1dHRvbldpZHRoKTsKICAgICBidXR0b25SZWN0LnNldFdpZHRo
KGRyb3BEb3duQnV0dG9uV2lkdGgpOwogCi0gICAgaWYgKGlzUnVubmluZ09uVmlzdGFPckxhdGVy
KCkpIHsKKyAgICBpZiAoKHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93c1Zpc3RhKSkgewogICAg
ICAgICAvLyBPdXRzZXQgdGhlIHRvcCwgcmlnaHQsIGFuZCBib3R0b20gYm9yZGVycyBvZiB0aGUg
YnV0dG9uIHNvIHRoYXQgdGhleSBjb2luY2lkZSB3aXRoIHRoZSA8c2VsZWN0PidzIGJvcmRlci4K
ICAgICAgICAgYnV0dG9uUmVjdC5zZXRZKGJ1dHRvblJlY3QueSgpIC0gdmlzdGFNZW51TGlzdEJ1
dHRvbk91dHNldCk7CiAgICAgICAgIGJ1dHRvblJlY3Quc2V0SGVpZ2h0KGJ1dHRvblJlY3QuaGVp
Z2h0KCkgKyAyICogdmlzdGFNZW51TGlzdEJ1dHRvbk91dHNldCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA4MDY2NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTAzLTA5ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdA
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVbmlmeSBXaW5kb3dzIHZlcnNpb24gY2hlY2tzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU5NzkKKworICAgICAgICAqIFVJUHJvY2Vzcy93
aW4vV2ViUGFnZVByb3h5V2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpz
dGFuZGFyZFVzZXJBZ2VudCk6CisKIDIwMTEtMDMtMDkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgY29ycmVjdGlvbi4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5j
cHAJKHJldmlzaW9uIDgwNTc3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQ
YWdlUHJveHlXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJTeXN0
ZW1JbmZvLmgiCiAKICNpbmNsdWRlICJyZXNvdXJjZS5oIgogI2luY2x1ZGUgPHRjaGFyLmg+CkBA
IC0zNiwzMCArMzcsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLXN0YXRpYyBTdHJpbmcgd2luZG93c1ZlcnNpb24oKQotewotICAgU3RyaW5nIG9z
VmVyc2lvbjsKLSAgIE9TVkVSU0lPTklORk8gdmVyc2lvbkluZm8gPSB7IDAgfTsKLSAgIHZlcnNp
b25JbmZvLmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YodmVyc2lvbkluZm8pOwotICAgOjpH
ZXRWZXJzaW9uRXgoJnZlcnNpb25JbmZvKTsKLQotICAgaWYgKHZlcnNpb25JbmZvLmR3UGxhdGZv
cm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUykgewotICAgICAgIGlmICh2ZXJzaW9u
SW5mby5kd01ham9yVmVyc2lvbiA9PSA0KSB7Ci0gICAgICAgICAgIGlmICh2ZXJzaW9uSW5mby5k
d01pbm9yVmVyc2lvbiA9PSAwKQotICAgICAgICAgICAgICAgb3NWZXJzaW9uID0gIldpbmRvd3Mg
OTUiOwotICAgICAgICAgICBlbHNlIGlmICh2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbiA9PSAx
MCkKLSAgICAgICAgICAgICAgIG9zVmVyc2lvbiA9ICJXaW5kb3dzIDk4IjsKLSAgICAgICAgICAg
ZWxzZSBpZiAodmVyc2lvbkluZm8uZHdNaW5vclZlcnNpb24gPT0gOTApCi0gICAgICAgICAgICAg
ICBvc1ZlcnNpb24gPSAiV2luZG93cyA5ODsgV2luIDl4IDQuOTAiOwotICAgICAgIH0KLSAgIH0g
ZWxzZSBpZiAodmVyc2lvbkluZm8uZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9O
VCkKLSAgICAgICBvc1ZlcnNpb24gPSBtYWtlU3RyaW5nKCJXaW5kb3dzIE5UICIsIFN0cmluZzo6
bnVtYmVyKHZlcnNpb25JbmZvLmR3TWFqb3JWZXJzaW9uKSwgJy4nLCBTdHJpbmc6Om51bWJlcih2
ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbikpOwotCi0gICBpZiAoIW9zVmVyc2lvbi5sZW5ndGgo
KSkKLSAgICAgICBvc1ZlcnNpb24gPSBtYWtlU3RyaW5nKCJXaW5kb3dzICIsIFN0cmluZzo6bnVt
YmVyKHZlcnNpb25JbmZvLmR3TWFqb3JWZXJzaW9uKSwgJy4nLCBTdHJpbmc6Om51bWJlcih2ZXJz
aW9uSW5mby5kd01pbm9yVmVyc2lvbikpOwotICAgcmV0dXJuIG9zVmVyc2lvbjsKLX0KLQogc3Rh
dGljIFN0cmluZyB1c2VyVmlzaWJsZVdlYktpdFZlcnNpb25TdHJpbmcoKQogewogICAgIExQV1NU
UiBidWlsZE51bWJlclN0cmluZ1B0cjsKQEAgLTcxLDEyICs0OCwxMCBAQCBzdGF0aWMgU3RyaW5n
IHVzZXJWaXNpYmxlV2ViS2l0VmVyc2lvblN0CiAKIFN0cmluZyBXZWJQYWdlUHJveHk6OnN0YW5k
YXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KQog
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBvc1ZlcnNpb24sICh3aW5kb3dzVmVy
c2lvbigpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG9zVmVyc2lvbiwgKHdp
bmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKSkpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCB3ZWJLaXRWZXJzaW9uLCAodXNlclZpc2libGVXZWJLaXRWZXJzaW9uU3RyaW5nKCkpKTsK
IAotICAgIGlmIChhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIG9zVmVyc2lvbiwgIikgQXBwbGVX
ZWJLaXQvIiwgd2ViS2l0VmVyc2lvbiwgIiAoS0hUTUwsIGxpa2UgR2Vja28pIik7Ci0gICAgcmV0
dXJuIG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBvc1ZlcnNpb24sICIpIEFwcGxlV2ViS2l0
LyIsIHdlYktpdFZlcnNpb24sICIgKEtIVE1MLCBsaWtlIEdlY2tvKSAiLCBhcHBsaWNhdGlvbk5h
bWVGb3JVc2VyQWdlbnQpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJNb3ppbGxhLzUuMCAoIiwg
b3NWZXJzaW9uLCAiKSBBcHBsZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9uLCAiIChLSFRNTCwgbGlr
ZSBHZWNrbykiLCBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQuaXNFbXB0eSgpID8gIiIgOiAi
ICIsIGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gODA2NjcpCisrKyBTb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0w
My0wOSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5pZnkgV2luZG93cyB2ZXJzaW9u
IGNoZWNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU1OTc5CisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3BwOgorICAgICAg
ICAod2Via2l0T1NWZXJzaW9uKToKKwogMjAxMS0wMy0wOCAgQ2hyaXN0aWFuIER5d2FuICA8Y2hy
aXN0aWFuQGxhbmVkby5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29u
LgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3Mu
Y3BwCShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJzZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAKIAogI2lmIE9T
KFVOSVgpCiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbGlmIE9TKFdJTkRPV1MpCisjaW5j
bHVkZSAiU3lzdGVtSW5mby5oIgogI2VuZGlmCiAKIC8qKgpAQCAtMjA4LDcgKzIxMCw3IEBAIHN0
YXRpYyBTdHJpbmcgd2Via2l0T1NWZXJzaW9uKCkKICAgICBlbHNlCiAgICAgICAgIHVhT1NWZXJz
aW9uID0gU3RyaW5nKCJVbmtub3duIik7CiAjZWxpZiBPUyhXSU5ET1dTKQotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCB1YU9TVmVyc2lvbiwgKFN0cmluZygiV2luZG93cyIp
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHVhT1NWZXJzaW9uLCAo
d2luZG93c1ZlcnNpb25Gb3JVQVN0cmluZygpKSk7CiAjZWxzZQogICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgU3RyaW5nLCB1YU9TVmVyc2lvbiwgKFN0cmluZygiVW5rbm93biIpKSk7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDY2NykKKysrIFNvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDMt
MDkgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaWZ5IFdpbmRvd3MgdmVyc2lvbiBj
aGVja3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NTk3OQorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlOjp1
c2VyQWdlbnRGb3JVcmwpOgorCiAyMDExLTAzLTA3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gODA1NzcpCisrKyBTb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsOSBAQAogI2lu
Y2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpZiBkZWZpbmVkIFFfT1NfV0lOMzIKKyNpbmNsdWRlICJTeXN0ZW1J
bmZvLmgiCisjZW5kaWYgLy8gUV9PU19XSU4zMgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIldlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1
cmVzLmgiCkBAIC0zNzcyLDUyICszNzc1LDcgQEAgUVN0cmluZyBRV2ViUGFnZTo6dXNlckFnZW50
Rm9yVXJsKGNvbnN0CiAjaWZkZWYgUV9PU19BSVgKICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJBSVgiKTsKICNlbGlmIGRlZmluZWQgUV9PU19XSU4zMgotCi0g
ICAgICAgIHN3aXRjaCAoUVN5c0luZm86OldpbmRvd3NWZXJzaW9uKSB7Ci0gICAgICAgIGNhc2Ug
UVN5c0luZm86OldWXzMyczoKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6
ZnJvbUxhdGluMSgiV2luZG93cyAzLjEiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFFTeXNJbmZvOjpXVl85NToKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiV2luZG93cyA5NSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgUVN5c0luZm86OldWXzk4OgotICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIDk4Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBRU3lzSW5mbzo6V1ZfTWU6Ci0gICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFT
dHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgOTg7IFdpbiA5eCA0LjkwIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfTlQ6Ci0gICAgICAgICAgICBmaXJz
dFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbk5UNC4wIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfMjAwMDoKLSAgICAgICAgICAgIGZp
cnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyBOVCA1LjAiKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9YUDoKLSAgICAgICAg
ICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyBOVCA1LjEi
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl8yMDAzOgot
ICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dz
IE5UIDUuMiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86OldW
X1ZJU1RBOgotICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCJXaW5kb3dzIE5UIDYuMCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICBjYXNlIFFT
eXNJbmZvOjpXVl9XSU5ET1dTNzoKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiV2luZG93cyBOVCA2LjEiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfQ0U6Ci0gICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9
IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgQ0UiKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfQ0VORVQ6Ci0gICAgICAgICAgICBmaXJzdFBhcnRU
ZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgQ0UgLk5FVCIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9DRV81OgotICAgICAgICAgICAg
Zmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIENFIDUueCIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9DRV82OgotICAg
ICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIENF
IDYueCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQorICAgICAgICBmaXJzdFBh
cnRUZW1wICs9IHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKTsKICNlbGlmIGRlZmluZWQgUV9P
U19EQVJXSU4KICNpZmRlZiBfX2kzODZfXyB8fCBfX3g4Nl82NF9fCiAgICAgICAgIGZpcnN0UGFy
dFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiSW50ZWwgTWFjIE9TIFgiKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjY3KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDMtMDkgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVuaWZ5IFdpbmRvd3MgdmVyc2lvbiBjaGVja3MuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTk3OQorCisgICAg
ICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpzdGFuZGFyZFVzZXJBZ2VudFdp
dGhBcHBsaWNhdGlvbk5hbWUpOgorICAgICAgICAod2ViS2l0VmVyc2lvblN0cmluZyk6CisKIDIw
MTEtMDMtMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24g
ODA1NzcpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJNYXJzaGFsbGluZ0hlbHBlcnMuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5o
IgorI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKICNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3Qu
aCIKICNpbmNsdWRlICJXZWJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVu
dUNsaWVudC5oIgpAQCAtMTg0LDggKzE4NSw3IEBAIHVzaW5nIEpTQzo6SlNMb2NrOwogc3RhdGlj
IEhNT0RVTEUgYWNjZXNzaWJpbGl0eUxpYjsKIHN0YXRpYyBIYXNoU2V0PFdlYlZpZXcqPiBwZW5k
aW5nRGVsZXRlQmFja2luZ1N0b3JlU2V0OwogCi1zdGF0aWMgU3RyaW5nIG9zVmVyc2lvbigpOwot
c3RhdGljIFN0cmluZyB3ZWJLaXRWZXJzaW9uKCk7CitzdGF0aWMgU3RyaW5nIHdlYktpdFZlcnNp
b25TdHJpbmcoKTsKIAogV2ViVmlldyoga2l0KFBhZ2UqIHBhZ2UpCiB7CkBAIC0xMjQ0LDkgKzEy
NDQsMTAgQEAgYm9vbCBXZWJWaWV3OjpjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFdlYgogCiBTdHJp
bmcgV2ViVmlldzo6c3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKGNvbnN0IFN0
cmluZyYgYXBwbGljYXRpb25OYW1lKQogewotICAgIGlmIChhcHBsaWNhdGlvbk5hbWUuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIG9zVmVyc2lv
bigpLCAiKSBBcHBsZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9uKCksICIgKEtIVE1MLCBsaWtlIEdl
Y2tvKSIpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJNb3ppbGxhLzUuMCAoIiwgb3NWZXJzaW9u
KCksICIpIEFwcGxlV2ViS2l0LyIsIHdlYktpdFZlcnNpb24oKSwgIiAoS0hUTUwsIGxpa2UgR2Vj
a28pICIsIGFwcGxpY2F0aW9uTmFtZSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IG9zVmVyc2lvbiwgKHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKSkpOworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCB3ZWJLaXRWZXJzaW9uLCAod2ViS2l0VmVyc2lvblN0cmluZygp
KSk7CisKKyAgICByZXR1cm4gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIG9zVmVyc2lvbiwg
IikgQXBwbGVXZWJLaXQvIiwgd2ViS2l0VmVyc2lvbiwgIiAoS0hUTUwsIGxpa2UgR2Vja28pIiwg
YXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50LmlzRW1wdHkoKSA/ICIiIDogIiAiLCBhcHBsaWNh
dGlvbk5hbWVGb3JVc2VyQWdlbnQpOwogfQogCiBQYWdlKiBXZWJWaWV3OjpwYWdlKCkKQEAgLTIz
MzYsMzEgKzIzMzcsNyBAQCBib29sIFdlYlZpZXc6OmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSBj
CiAjZW5kaWYKIH0KIAotc3RhdGljIFN0cmluZyBvc1ZlcnNpb24oKQotewotICAgIFN0cmluZyBv
c1ZlcnNpb247Ci0gICAgT1NWRVJTSU9OSU5GTyB2ZXJzaW9uSW5mbyA9IHswfTsKLSAgICB2ZXJz
aW9uSW5mby5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKHZlcnNpb25JbmZvKTsKLSAgICBH
ZXRWZXJzaW9uRXgoJnZlcnNpb25JbmZvKTsKLQotICAgIGlmICh2ZXJzaW9uSW5mby5kd1BsYXRm
b3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MpIHsKLSAgICAgICAgaWYgKHZlcnNp
b25JbmZvLmR3TWFqb3JWZXJzaW9uID09IDQpIHsKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uSW5m
by5kd01pbm9yVmVyc2lvbiA9PSAwKQotICAgICAgICAgICAgICAgIG9zVmVyc2lvbiA9ICJXaW5k
b3dzIDk1IjsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZlcnNpb25JbmZvLmR3TWlub3JWZXJzaW9u
ID09IDEwKQotICAgICAgICAgICAgICAgIG9zVmVyc2lvbiA9ICJXaW5kb3dzIDk4IjsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKHZlcnNpb25JbmZvLmR3TWlub3JWZXJzaW9uID09IDkwKQotICAgICAg
ICAgICAgICAgIG9zVmVyc2lvbiA9ICJXaW5kb3dzIDk4OyBXaW4gOXggNC45MCI7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKHZlcnNpb25JbmZvLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZP
Uk1fV0lOMzJfTlQpCi0gICAgICAgIG9zVmVyc2lvbiA9IG1ha2VTdHJpbmcoIldpbmRvd3MgTlQg
IiwgU3RyaW5nOjpudW1iZXIodmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb24pLCAnLicsIFN0cmlu
Zzo6bnVtYmVyKHZlcnNpb25JbmZvLmR3TWlub3JWZXJzaW9uKSk7Ci0KLSAgICBpZiAoIW9zVmVy
c2lvbi5sZW5ndGgoKSkKLSAgICAgICAgb3NWZXJzaW9uID0gbWFrZVN0cmluZygiV2luZG93cyAi
LCBTdHJpbmc6Om51bWJlcih2ZXJzaW9uSW5mby5kd01ham9yVmVyc2lvbiksICcuJywgU3RyaW5n
OjpudW1iZXIodmVyc2lvbkluZm8uZHdNaW5vclZlcnNpb24pKTsKLSAgICByZXR1cm4gb3NWZXJz
aW9uOwotfQotCi1zdGF0aWMgU3RyaW5nIHdlYktpdFZlcnNpb24oKQorc3RhdGljIFN0cmluZyB3
ZWJLaXRWZXJzaW9uU3RyaW5nKCkKIHsKICAgICBMUFdTVFIgYnVpbGROdW1iZXJTdHJpbmdQdHI7
CiAgICAgaWYgKCE6OkxvYWRTdHJpbmdXKGdJbnN0YW5jZSwgQlVJTERfTlVNQkVSLCByZWludGVy
cHJldF9jYXN0PExQV1NUUj4oJmJ1aWxkTnVtYmVyU3RyaW5nUHRyKSwgMCkgfHwgIWJ1aWxkTnVt
YmVyU3RyaW5nUHRyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85277</attachid>
            <date>2011-03-09 18:59:07 -0800</date>
            <delta_ts>2011-03-09 19:33:48 -0800</delta_ts>
            <desc>Part 2, v5</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>30029</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjgyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDMtMDkgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVuaWZ5IFdpbmRvd3MgdmVyc2lvbiBjaGVja3MuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTk3OQorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06IEZpeCBzcGFjZXMgLT4gdGFicy4KKyAgICAgICAgKiBTdHJp
bmdzTm90VG9CZUxvY2FsaXplZC50eHQ6CisgICAgICAgICogV2ViQ29yZS5wcm86IEFkZCBTeXN0
ZW1JbmZvLiogdG8gUXQgYnVpbGQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZUNocm9taXVtV2luOjppbnZhbGlkYXRlT25Nb3VzZUVudGVyRXhpdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZVN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OmdldFRoZW1lQXJyb3dTdGF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVD
aHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaWxsQk1QR2x5cGhzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vQ3Vyc29yV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVNoYXJlZEN1cnNvcik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV2luOjpTY3JvbGxiYXJUaGVt
ZVdpbik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwOiBBZGQgZnVsbC1m
bGVkZ2VkIHZlcnNpb24gY2hlY2sgYW5kIFVBIHN0cmluZyBoZWxwZXIgZnVuY3Rpb24uCisgICAg
ICAgIChXZWJDb3JlOjp3aW5kb3dzVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjp3aW5kb3dz
VmVyc2lvbkZvclVBU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5o
OiBBZGQgZnVsbC1mbGVkZ2VkIHZlcnNpb24gY2hlY2sgYW5kIFVBIHN0cmluZyBoZWxwZXIgZnVu
Y3Rpb24uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0Tm9uQ2xpZW50TWV0cmljcyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2lu
OjpnZXRUaGVtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50
TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxp
c3RCdXR0b24pOgorCiAyMDExLTAzLTA5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiA4MDYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0zODUxLDggKzM4NTEsOCBAQCBpZiBUQVJHRVRfV0lOMzIKIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JX
aW4uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oIFwK
LSAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAgXAotICAgIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1N5c3RlbUluZm8uaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0
YWJhc2VXaW4uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdl
VGhyb3R0bGVyV2luLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbi5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9TdHJpbmdzTm90VG9CZUxv
Y2FsaXplZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU3RyaW5nc05vdFRvQmVM
b2NhbGl6ZWQudHh0CShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL1N0cmluZ3NO
b3RUb0JlTG9jYWxpemVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTExLDkgKzUxMSwxNCBAQAog
IldlYlZpZXdXaW5kb3dDbGFzcyIKICJXZWJXb3JrZXJzUHJpdmF0ZSIKICJXaW5kb3dzICIKKyJX
aW5kb3dzIENFIgorIldpbmRvd3MgQ0UgIgorIldpbmRvd3MgQ0UgLk5FVCIKKyJXaW5kb3dzIDMu
MSIKICJXaW5kb3dzIDk1IgogIldpbmRvd3MgOTgiCiAiV2luZG93cyA5ODsgV2luIDl4IDQuOTAi
CisiV2luTlQ0LjAiCiAiV2luZG93cyBOVCAiCiAiV212UGx1Z2luIgogIlhTTCIKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvCShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTIzLDcgKzI1MjMsOSBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfU01PT1RIX1NDUk9MTElOCiB9CiAKIHdpbjMyLSp8d2luY2UqIHsKKyAgICBIRUFERVJT
ICs9IHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmgKICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAg
cGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vd2luL1N5c3Rl
bVRpbWVXaW4uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0
aW9uTWF0cml4V2luLmNwcAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHJl
dmlzaW9uIDgwNjExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAg
aW50IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnNjcm9sbGJhcgogCiBib29sIFNjcm9sbGJh
clRoZW1lQ2hyb21pdW1XaW46OmludmFsaWRhdGVPbk1vdXNlRW50ZXJFeGl0KCkKIHsKLSAgICBy
ZXR1cm4gaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKTsKKyAgICByZXR1cm4gd2luZG93c1ZlcnNp
b24oKSA+PSBXaW5kb3dzVmlzdGE7CiB9CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdp
bjo6c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4oU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQpAQCAtMTYwLDEyICsxNjAsMTIgQEAgaW50IFNjcm9s
bGJhclRoZW1lQ2hyb21pdW1XaW46OmdldFRoZW1lUwogICAgIGlmIChzY3JvbGxiYXItPnByZXNz
ZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KSB7CiAgICAgICAgIGlmIChwYXJ0ID09IFRodW1iUGFydCkK
ICAgICAgICAgICAgIHJldHVybiBTQ1JCU19QUkVTU0VEOwotICAgICAgICByZXR1cm4gaXNSdW5u
aW5nT25WaXN0YU9yTGF0ZXIoKSA/IFNDUkJTX0hPVkVSIDogU0NSQlNfTk9STUFMOworICAgICAg
ICByZXR1cm4gKHdpbmRvd3NWZXJzaW9uKCkgPCBXaW5kb3dzVmlzdGEpID8gU0NSQlNfTk9STUFM
IDogU0NSQlNfSE9WRVI7CiAgICAgfQogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybiBTQ1JCU19ESVNBQkxFRDsKICAgICBpZiAoc2Nyb2xsYmFyLT5ob3ZlcmVk
UGFydCgpICE9IHBhcnQgfHwgcGFydCA9PSBCYWNrVHJhY2tQYXJ0IHx8IHBhcnQgPT0gRm9yd2Fy
ZFRyYWNrUGFydCkKLSAgICAgICAgcmV0dXJuIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0g
Tm9QYXJ0IHx8ICFpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpKSA/IFNDUkJTX05PUk1BTCA6IFND
UkJTX0hPVkVSOworICAgICAgICByZXR1cm4gKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBO
b1BhcnQgfHwgKHdpbmRvd3NWZXJzaW9uKCkgPCBXaW5kb3dzVmlzdGEpKSA/IFNDUkJTX05PUk1B
TCA6IFNDUkJTX0hPVkVSOwogICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gTm9Q
YXJ0KQogICAgICAgICByZXR1cm4gU0NSQlNfSE9UOwogICAgIHJldHVybiAoc2Nyb2xsYmFyLT5w
cmVzc2VkUGFydCgpID09IHBhcnQpID8gU0NSQlNfUFJFU1NFRCA6IFNDUkJTX05PUk1BTDsKQEAg
LTE3OSw0MyArMTc5LDQzIEBAIGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVt
ZUEKICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gRm9yd2Fy
ZEJ1dHRvblN0YXJ0UGFydCkgewogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgICAgIGlmIChzY3JvbGxiYXItPnBy
ZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiAhaXNSdW5u
aW5nT25WaXN0YU9yTGF0ZXIoKSA/IEFCU19MRUZUTk9STUFMIDogQUJTX0xFRlRIT1ZFUjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gKHdpbmRvd3NWZXJzaW9uKCkgPCBXaW5kb3dzVmlzdGEpID8g
QUJTX0xFRlROT1JNQUwgOiBBQlNfTEVGVEhPVkVSOwogICAgICAgICAgICAgaWYgKCFzY3JvbGxi
YXItPmVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gQUJTX0xFRlRESVNBQkxFRDsK
ICAgICAgICAgICAgIGlmIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgIT0gcGFydCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8
fCAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSkgPyBBQlNfTEVGVE5PUk1BTCA6IEFCU19MRUZU
SE9WRVI7CisgICAgICAgICAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgp
ID09IE5vUGFydCkgfHwgKHdpbmRvd3NWZXJzaW9uKCkgPCBXaW5kb3dzVmlzdGEpKSA/IEFCU19M
RUZUTk9STUFMIDogQUJTX0xFRlRIT1ZFUjsKICAgICAgICAgICAgIGlmIChzY3JvbGxiYXItPnBy
ZXNzZWRQYXJ0KCkgPT0gTm9QYXJ0KQogICAgICAgICAgICAgICAgIHJldHVybiBBQlNfTEVGVEhP
VDsKICAgICAgICAgICAgIHJldHVybiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IHBhcnQp
ID8KICAgICAgICAgICAgICAgICBBQlNfTEVGVFBSRVNTRUQgOiBBQlNfTEVGVE5PUk1BTDsKICAg
ICAgICAgfQogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFy
dCkKLSAgICAgICAgICAgIHJldHVybiAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSA/IEFCU19V
UE5PUk1BTCA6IEFCU19VUEhPVkVSOworICAgICAgICAgICAgcmV0dXJuICh3aW5kb3dzVmVyc2lv
bigpIDwgV2luZG93c1Zpc3RhKSA/IEFCU19VUE5PUk1BTCA6IEFCU19VUEhPVkVSOwogICAgICAg
ICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIEFCU19VUERJ
U0FCTEVEOwogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpICE9IHBhcnQpCi0g
ICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8
fCAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSkgPyBBQlNfVVBOT1JNQUwgOiBBQlNfVVBIT1ZF
UjsKKyAgICAgICAgICAgIHJldHVybiAoKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBOb1Bh
cnQpIHx8ICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93c1Zpc3RhKSkgPyBBQlNfVVBOT1JNQUwg
OiBBQlNfVVBIT1ZFUjsKICAgICAgICAgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBO
b1BhcnQpCiAgICAgICAgICAgICByZXR1cm4gQUJTX1VQSE9UOwogICAgICAgICByZXR1cm4gKHNj
cm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBwYXJ0KSA/IEFCU19VUFBSRVNTRUQgOiBBQlNfVVBO
T1JNQUw7CiAgICAgfQogICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikgewogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09
IFRodW1iUGFydCkKLSAgICAgICAgICAgIHJldHVybiAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIo
KSA/IEFCU19SSUdIVE5PUk1BTCA6IEFCU19SSUdIVEhPVkVSOworICAgICAgICAgICAgcmV0dXJu
ICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93c1Zpc3RhKSA/IEFCU19SSUdIVE5PUk1BTCA6IEFC
U19SSUdIVEhPVkVSOwogICAgICAgICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuIEFCU19SSUdIVERJU0FCTEVEOwogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5o
b3ZlcmVkUGFydCgpICE9IHBhcnQpCi0gICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhv
dmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8fCAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSkgPyBB
QlNfUklHSFROT1JNQUwgOiBBQlNfUklHSFRIT1ZFUjsKKyAgICAgICAgICAgIHJldHVybiAoKHNj
cm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQpIHx8ICh3aW5kb3dzVmVyc2lvbigpIDwg
V2luZG93c1Zpc3RhKSkgPyBBQlNfUklHSFROT1JNQUwgOiBBQlNfUklHSFRIT1ZFUjsKICAgICAg
ICAgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBOb1BhcnQpCiAgICAgICAgICAgICBy
ZXR1cm4gQUJTX1JJR0hUSE9UOwogICAgICAgICByZXR1cm4gKHNjcm9sbGJhci0+cHJlc3NlZFBh
cnQoKSA9PSBwYXJ0KSA/IEFCU19SSUdIVFBSRVNTRUQgOiBBQlNfUklHSFROT1JNQUw7CiAgICAg
fQogICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAgICAg
ICByZXR1cm4gIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBBQlNfRE9XTk5PUk1BTCA6IEFC
U19ET1dOSE9WRVI7CisgICAgICAgIHJldHVybiAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NW
aXN0YSkgPyBBQlNfRE9XTk5PUk1BTCA6IEFCU19ET1dOSE9WRVI7CiAgICAgaWYgKCFzY3JvbGxi
YXItPmVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIEFCU19ET1dORElTQUJMRUQ7CiAgICAgaWYg
KHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBwYXJ0KQotICAgICAgICByZXR1cm4gKChzY3Jv
bGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8fCAhaXNSdW5uaW5nT25WaXN0YU9yTGF0
ZXIoKSkgPyBBQlNfRE9XTk5PUk1BTCA6IEFCU19ET1dOSE9WRVI7CisgICAgICAgIHJldHVybiAo
KHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQpIHx8ICh3aW5kb3dzVmVyc2lvbigp
IDwgV2luZG93c1Zpc3RhKSkgPyBBQlNfRE9XTk5PUk1BTCA6IEFCU19ET1dOSE9WRVI7CiAgICAg
aWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBOb1BhcnQpCiAgICAgICAgIHJldHVybiBB
QlNfRE9XTkhPVDsKICAgICByZXR1cm4gKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBwYXJ0
KSA/IEFCU19ET1dOUFJFU1NFRCA6IEFCU19ET1dOTk9STUFMOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDgwNjExKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJl
ZU5vZGVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCBz
dGF0aWMgYm9vbCBmaWxsQk1QR2x5cGhzKHVuc2lnbmVkIG9mZnNlCiAgICAgYm9vbCBoYXZlR2x5
cGhzID0gZmFsc2U7CiAgICAgaW50IGludmFsaWRHbHlwaCA9IDB4RkZGRjsKICAgICBjb25zdCBE
V09SRCBjZmZUYWJsZVRhZyA9IDB4MjA0NjQ2NDM7IC8vIDQtYnl0ZSBpZGVudGlmaWVyIGZvciBP
cGVuVHlwZSBDRkYgdGFibGUgKCdDRkYgJykuCi0gICAgaWYgKCFpc1J1bm5pbmdPblZpc3RhT3JM
YXRlcigpICYmICEodG0udG1QaXRjaEFuZEZhbWlseSAmIFRNUEZfVFJVRVRZUEUpICYmIChHZXRG
b250RGF0YShkYywgY2ZmVGFibGVUYWcsIDAsIDAsIDApID09IEdESV9FUlJPUikpCisgICAgaWYg
KCh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93c1Zpc3RhKSAmJiAhKHRtLnRtUGl0Y2hBbmRGYW1p
bHkgJiBUTVBGX1RSVUVUWVBFKSAmJiAoR2V0Rm9udERhdGEoZGMsIGNmZlRhYmxlVGFnLCAwLCAw
LCAwKSA9PSBHRElfRVJST1IpKQogICAgICAgICBpbnZhbGlkR2x5cGggPSAweDFGOwogCiAgICAg
R2x5cGggc3BhY2VHbHlwaCA9IDA7ICAvLyBHbHlwaCBmb3IgYSBzcGFjZS4gTGF6aWx5IGZpbGxl
ZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DdXJzb3JXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DdXJzb3JXaW4uY3BwCShyZXZp
c2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DdXJzb3JXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQml0bWFwSW5mby5o
IgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJT
eXN0ZW1JbmZvLmgiCiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKQEAgLTM5LDIwICs0MCwx
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzdXBwb3J0
c0FscGhhQ3Vyc29ycygpIAotewotICAgIE9TVkVSU0lPTklORk8gb3NpbmZvID0gezB9OwotICAg
IG9zaW5mby5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKE9TVkVSU0lPTklORk8pOwotICAg
IEdldFZlcnNpb25FeCgmb3NpbmZvKTsKLSAgICByZXR1cm4gb3NpbmZvLmR3TWFqb3JWZXJzaW9u
ID4gNSB8fCAob3NpbmZvLmR3TWFqb3JWZXJzaW9uID09IDUgJiYgb3NpbmZvLmR3TWlub3JWZXJz
aW9uID4gMCk7Ci19Ci0KIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEN1cnNvcj4gY3JlYXRlU2hh
cmVkQ3Vyc29yKEltYWdlKiBpbWcsIGNvbnN0IEludFBvaW50JiBob3RTcG90KQogewogICAgIFJl
ZlB0cjxTaGFyZWRDdXJzb3I+IGltcGw7CiAKICAgICBJbnRQb2ludCBlZmZlY3RpdmVIb3RTcG90
ID0gZGV0ZXJtaW5lSG90U3BvdChpbWcsIGhvdFNwb3QpOwotICAgIHN0YXRpYyBib29sIGRvQWxw
aGEgPSBzdXBwb3J0c0FscGhhQ3Vyc29ycygpOworICAgIHN0YXRpYyBib29sIGRvQWxwaGEgPSB3
aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NYUDsKICAgICBCaXRtYXBJbmZvIGN1cnNvckltYWdl
ID0gQml0bWFwSW5mbzo6Y3JlYXRlKEludFNpemUoaW1nLT53aWR0aCgpLCBpbWctPmhlaWdodCgp
KSk7CiAKICAgICBIREMgZGMgPSBHZXREQygwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmNwcAkocmV2aXNpb24gODA1NzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgU2Nyb2xsYmFyVGhlbWVXaW46OlNjcm9sbGJh
clRoZW1lV2luKCkKICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAgIGluaXRpYWxpemVk
ID0gdHJ1ZTsKICAgICAgICAgY2hlY2tBbmRJbml0U2Nyb2xsYmFyVGhlbWUoKTsKLSAgICAgICAg
cnVubmluZ1Zpc3RhID0gaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKTsKKyAgICAgICAgcnVubmlu
Z1Zpc3RhID0gKHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93c1Zpc3RhKTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAJKHJldmlz
aW9uIDgwNTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNywzMCArMjcsOTAgQEAKICNpbmNsdWRlICJTeXN0ZW1JbmZv
LmgiCiAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGlzUnVubmluZ09uVmlz
dGFPckxhdGVyKCkKK1dpbmRvd3NWZXJzaW9uIHdpbmRvd3NWZXJzaW9uKGludCogbWFqb3IsIGlu
dCogbWlub3IpCiB7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBz
dGF0aWMgV2luZG93c1ZlcnNpb24gdmVyc2lvbjsKKyAgICBzdGF0aWMgaW50IG1ham9yVmVyc2lv
biwgbWlub3JWZXJzaW9uOworCisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpbml0
aWFsaXplZCA9IHRydWU7CiAjaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBPU1ZFUlNJT05JTkZPIHZlcnNpb25JbmZvID0gezB9OwogI2Vsc2UKLSAgICBzdGF0aWMgYm9v
bCBpc1Zpc3RhT3JMYXRlcjsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKLQotICAgIGlm
IChpbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuIGlzVmlzdGFPckxhdGVyOworICAgICAgICBP
U1ZFUlNJT05JTkZPRVggdmVyc2lvbkluZm8gPSB7MH07CisjZW5kaWYKKyAgICAgICAgdmVyc2lv
bkluZm8uZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZih2ZXJzaW9uSW5mbyk7CisgICAgICAg
IEdldFZlcnNpb25FeChyZWludGVycHJldF9jYXN0PE9TVkVSU0lPTklORk8qPigmdmVyc2lvbklu
Zm8pKTsKKyAgICAgICAgbWFqb3JWZXJzaW9uID0gdmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb247
CisgICAgICAgIG1pbm9yVmVyc2lvbiA9IHZlcnNpb25JbmZvLmR3TWlub3JWZXJzaW9uOwogCi0g
ICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworI2lmIE9TKFdJTkNFKQorICAgICAgICBpZiAobWFqb3JW
ZXJzaW9uID49IDEgJiYgbWFqb3JWZXJzaW9uIDw9IDcpCisgICAgICAgICAgICB2ZXJzaW9uID0g
c3RhdGljX2Nhc3Q8V2luZG93c1ZlcnNpb24+KFdpbmRvd3NDRTEgKyAobWFqb3JWZXJzaW9uIC0g
MSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2ZXJzaW9uID0gKG1ham9yVmVyc2lvbiA8
IDEpID8gV2luZG93c0NFMSA6IFdpbmRvd3NDRTc7CisjZWxzZQorICAgICAgICBpZiAodmVyc2lv
bkluZm8uZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMnMpCisgICAgICAgICAgICB2
ZXJzaW9uID0gV2luZG93czNfMTsKKyAgICAgICAgZWxzZSBpZiAodmVyc2lvbkluZm8uZHdQbGF0
Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9XSU5ET1dTKSB7CisgICAgICAgICAgICBpZiAo
IW1pbm9yVmVyc2lvbikKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gV2luZG93czk1OworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZlcnNpb24gPSAobWlub3JWZXJzaW9uID09
IDEwKSA/IFdpbmRvd3M5OCA6IFdpbmRvd3NNRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmIChtYWpvclZlcnNpb24gPT0gNSkgeworICAgICAgICAgICAgICAgIGlmICghbWlub3JW
ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gV2luZG93czIwMDA7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gKG1pbm9yVmVy
c2lvbiA9PSAxKSA/IFdpbmRvd3NYUCA6IFdpbmRvd3NTZXJ2ZXIyMDAzOworICAgICAgICAgICAg
fSBlbHNlIGlmIChtYWpvclZlcnNpb24gPj0gNikgeworICAgICAgICAgICAgICAgIGlmICh2ZXJz
aW9uSW5mby53UHJvZHVjdFR5cGUgPT0gVkVSX05UX1dPUktTVEFUSU9OKQorICAgICAgICAgICAg
ICAgICAgICB2ZXJzaW9uID0gKG1ham9yVmVyc2lvbiA9PSA2ICYmICFtaW5vclZlcnNpb24pID8g
V2luZG93c1Zpc3RhIDogV2luZG93czc7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB2ZXJzaW9uID0gV2luZG93c1NlcnZlcjIwMDg7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gKG1ham9yVmVyc2lvbiA9PSA0KSA/IFdpbmRv
d3NOVDQgOiBXaW5kb3dzTlQzOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CiAKLSAgICBPU1ZF
UlNJT05JTkZPRVggdmkgPSB7MH07Ci0gICAgdmkuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVv
ZihPU1ZFUlNJT05JTkZPRVgpOwotICAgIEdldFZlcnNpb25FeChyZWludGVycHJldF9jYXN0PE9T
VkVSU0lPTklORk8qPigmdmkpKTsKKyAgICBpZiAobWFqb3IpCisgICAgICAgICptYWpvciA9IG1h
am9yVmVyc2lvbjsKKyAgICBpZiAobWlub3IpCisgICAgICAgICptaW5vciA9IG1pbm9yVmVyc2lv
bjsKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KIAotICAgIGlzVmlzdGFPckxhdGVyID0gdmkuZHdN
YWpvclZlcnNpb24gPj0gNjsKK1N0cmluZyB3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCkKK3sK
KyAgICBpbnQgbWFqb3IsIG1pbm9yOworICAgIFdpbmRvd3NWZXJzaW9uIHZlcnNpb24gPSB3aW5k
b3dzVmVyc2lvbigmbWFqb3IsICZtaW5vcik7CisgICAgc3dpdGNoICh2ZXJzaW9uKSB7CisgICAg
Y2FzZSBXaW5kb3dzQ0UxOgorICAgIGNhc2UgV2luZG93c0NFMjoKKyAgICBjYXNlIFdpbmRvd3ND
RTM6CisgICAgICAgIHJldHVybiAiV2luZG93cyBDRSI7CisgICAgY2FzZSBXaW5kb3dzQ0U0Ogor
ICAgICAgICByZXR1cm4gIldpbmRvd3MgQ0UgLk5FVCI7CisgICAgY2FzZSBXaW5kb3dzM18xOgor
ICAgICAgICByZXR1cm4gIldpbmRvd3MgMy4xIjsKKyAgICBjYXNlIFdpbmRvd3M5NToKKyAgICAg
ICAgcmV0dXJuICJXaW5kb3dzIDk1IjsKKyAgICBjYXNlIFdpbmRvd3M5ODoKKyAgICAgICAgcmV0
dXJuICJXaW5kb3dzIDk4IjsKKyAgICBjYXNlIFdpbmRvd3NNRToKKyAgICAgICAgcmV0dXJuICJX
aW5kb3dzIDk4OyBXaW4gOXggNC45MCI7CisgICAgY2FzZSBXaW5kb3dzTlQ0OgorICAgICAgICBy
ZXR1cm4gIldpbk5UNC4wIjsKKyAgICB9CiAKLSAgICByZXR1cm4gaXNWaXN0YU9yTGF0ZXI7Ci0j
ZW5kaWYKKyAgICBjaGFyKiBmYW1pbHlOYW1lID0gKHZlcnNpb24gPj0gV2luZG93c05UMykgPyAi
V2luZG93cyBOVCAiIDogIldpbmRvd3MgQ0UgIjsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhmYW1p
bHlOYW1lLCBTdHJpbmc6Om51bWJlcihtYWpvciksICcuJywgU3RyaW5nOjpudW1iZXIobWlub3Ip
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL1N5c3RlbUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vU3lzdGVtSW5mby5oCShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDQ0
IEBACiAjaWZuZGVmIFN5c3RlbUluZm9faAogI2RlZmluZSBTeXN0ZW1JbmZvX2gKIAorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wg
aXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKTsKKy8vIE5PVEU6IEtlZXAgdGhlc2UgaW4gb3JkZXIg
c28gY2FsbGVycyBjYW4gZG8gdGhpbmdzIGxpa2UKKy8vICJpZiAod2luZG93c1ZlcnNpb24oKSA+
PSBXaW5kb3dzVmlzdGEpIC4uLiIuIEl0J3MgT0sgdG8gY2hhbmdlIG9yIGFkZCB2YWx1ZXMsCisv
LyB0aG91Z2guCitlbnVtIFdpbmRvd3NWZXJzaW9uIHsKKyAgICAvLyBDRS1iYXNlZCB2ZXJzaW9u
cworICAgIFdpbmRvd3NDRTEgPSAwLAorICAgIFdpbmRvd3NDRTIsCisgICAgV2luZG93c0NFMywK
KyAgICBXaW5kb3dzQ0U0LAorICAgIFdpbmRvd3NDRTUsCisgICAgV2luZG93c0NFNiwKKyAgICBX
aW5kb3dzQ0U3LAorICAgIC8vIDMueC1iYXNlZCB2ZXJzaW9ucworICAgIFdpbmRvd3MzXzEsCisg
ICAgLy8gOXgtYmFzZWQgdmVyc2lvbnMKKyAgICBXaW5kb3dzOTUsCisgICAgV2luZG93czk4LAor
ICAgIFdpbmRvd3NNRSwKKyAgICAvLyBOVC1iYXNlZCB2ZXJzaW9ucworICAgIFdpbmRvd3NOVDMs
CisgICAgV2luZG93c05UNCwKKyAgICBXaW5kb3dzMjAwMCwKKyAgICBXaW5kb3dzWFAsCisgICAg
V2luZG93c1NlcnZlcjIwMDMsCisgICAgV2luZG93c1Zpc3RhLAorICAgIFdpbmRvd3NTZXJ2ZXIy
MDA4LAorICAgIFdpbmRvd3M3LAorfTsKKworLy8gSWYgc3VwcGxpZWQsIHxtYWpvcnwgYW5kIHxt
aW5vcnwgYXJlIHNldCB0byB0aGUgT1NWRVJTSU9OSU5GTzo6ZHdNYWpvclZlcnNpb24KKy8vIGFu
ZCBkd01pbm9yVmVyc2lvbiBmaWVsZCB2YWx1ZXMsIHJlc3BlY3RpdmVseS4KK1dpbmRvd3NWZXJz
aW9uIHdpbmRvd3NWZXJzaW9uKGludCogbWFqb3IgPSAwLCBpbnQqIG1pbm9yID0gMCk7CisKK1N0
cmluZyB3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1X
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gODA2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4
ICsxNDEsOCBAQCBib29sIFRoZW1lUGFpbnRlcjo6c19oYXNJbnN0YW5jZSA9IGZhbHNlCiAKIHN0
YXRpYyB2b2lkIGdldE5vbkNsaWVudE1ldHJpY3MoTk9OQ0xJRU5UTUVUUklDUyogbWV0cmljcykK
IHsKLSAgICBzdGF0aWMgVUlOVCBzaXplID0gaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSA/Ci0g
ICAgICAgIHNpemVvZihOT05DTElFTlRNRVRSSUNTKSA6IE5PTkNMSUVOVE1FVFJJQ1NfU0laRV9Q
UkVfVklTVEE7CisgICAgc3RhdGljIFVJTlQgc2l6ZSA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdp
bmRvd3NWaXN0YSkgPworICAgICAgICAoc2l6ZW9mIE5PTkNMSUVOVE1FVFJJQ1MpIDogTk9OQ0xJ
RU5UTUVUUklDU19TSVpFX1BSRV9WSVNUQTsKICAgICBtZXRyaWNzLT5jYlNpemUgPSBzaXplOwog
ICAgIGJvb2wgc3VjY2VzcyA9ICEhU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVO
VE1FVFJJQ1MsIHNpemUsIG1ldHJpY3MsIDApOwogICAgIEFTU0VSVChzdWNjZXNzKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAkocmV2aXNpb24g
ODA1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NjksMTUgKzU2OSwxNyBAQCBUaGVtZURhdGEgUmVuZGVyVGhlbWVX
aW46OmdldFRoZW1lRGF0YShSCiAgICAgICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWlu
ZVN0YXRlKG8pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTWVudWxpc3RQYXJ0
OgotICAgICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKLSAgICAgICAgICAgIHJlc3VsdC5t
X3BhcnQgPSBpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpID8gQ1BfRFJPUERPV05CVVRUT05SSUdI
VCA6IENQX0RST1BET1dOQlVUVE9OOwotICAgICAgICAgICAgaWYgKGlzUnVubmluZ09uVmlzdGFP
ckxhdGVyKCkgJiYgZG9jdW1lbnRJc0luQXBwbGljYXRpb25DaHJvbWVNb2RlKG8tPmRvY3VtZW50
KCkpKSB7CisgICAgICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OiB7CisgICAgICAgICAgICBj
b25zdCBib29sIGlzVmlzdGFPckxhdGVyID0gKHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93c1Zp
c3RhKTsKKyAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBpc1Zpc3RhT3JMYXRlciA/IENQX0RS
T1BET1dOQlVUVE9OUklHSFQgOiBDUF9EUk9QRE9XTkJVVFRPTjsKKyAgICAgICAgICAgIGlmIChp
c1Zpc3RhT3JMYXRlciAmJiBkb2N1bWVudElzSW5BcHBsaWNhdGlvbkNocm9tZU1vZGUoby0+ZG9j
dW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgInJlYWRvbmx5IiBsb29rIHdlIHVz
ZSBpbiBhcHBsaWNhdGlvbiBjaHJvbWUgbW9kZQogICAgICAgICAgICAgICAgIC8vIG9ubHkgdXNl
cyBhICJub3JtYWwiIGxvb2sgZm9yIHRoZSBkcm9wIGRvd24gYnV0dG9uLgogICAgICAgICAgICAg
ICAgIHJlc3VsdC5tX3N0YXRlID0gVFNfTk9STUFMOwogICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgUmFkaW9QYXJ0OgogICAgICAgICAg
ICAgcmVzdWx0Lm1fcGFydCA9IEJQX1JBRElPOwogICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUg
PSBkZXRlcm1pbmVTdGF0ZShvKTsKQEAgLTU4NSw3ICs1ODcsNyBAQCBUaGVtZURhdGEgUmVuZGVy
VGhlbWVXaW46OmdldFRoZW1lRGF0YShSCiAgICAgICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0Ogog
ICAgICAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CiAgICAgICAgIGNhc2UgVGV4dEFyZWFQYXJ0Ogot
ICAgICAgICAgICAgcmVzdWx0Lm1fcGFydCA9IGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBF
UF9FRElUQk9SREVSX05PU0NST0xMIDogVEZQX1RFWFRGSUVMRDsKKyAgICAgICAgICAgIHJlc3Vs
dC5tX3BhcnQgPSAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzVmlzdGEpID8gRVBfRURJVEJP
UkRFUl9OT1NDUk9MTCA6IFRGUF9URVhURklFTEQ7CiAgICAgICAgICAgICByZXN1bHQubV9zdGF0
ZSA9IGRldGVybWluZVN0YXRlKG8pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
U2xpZGVySG9yaXpvbnRhbFBhcnQ6CkBAIC03MjgsNyArNzMwLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZVdpbjo6cGFpbnRNZW51TGlzdChSZW5kZQogewogICAgIEhBTkRMRSB0aGVtZTsKICAgICBpbnQg
cGFydDsKLSAgICBpZiAoaGF2ZVRoZW1lICYmIGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpIHsK
KyAgICBpZiAoaGF2ZVRoZW1lICYmICh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSkp
IHsKICAgICAgICAgdGhlbWUgPSBtZW51TGlzdFRoZW1lKCk7CiAgICAgICAgIGlmIChkb2N1bWVu
dElzSW5BcHBsaWNhdGlvbkNocm9tZU1vZGUoby0+ZG9jdW1lbnQoKSkpCiAgICAgICAgICAgICBw
YXJ0ID0gQ1BfUkVBRE9OTFk7CkBAIC03OTIsNyArNzk0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdp
bjo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgICAgICBidXR0b25SZWN0LnNldFgoYnV0dG9uUmVj
dC5tYXhYKCkgLSBkcm9wRG93bkJ1dHRvbldpZHRoKTsKICAgICBidXR0b25SZWN0LnNldFdpZHRo
KGRyb3BEb3duQnV0dG9uV2lkdGgpOwogCi0gICAgaWYgKGlzUnVubmluZ09uVmlzdGFPckxhdGVy
KCkpIHsKKyAgICBpZiAoKHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93c1Zpc3RhKSkgewogICAg
ICAgICAvLyBPdXRzZXQgdGhlIHRvcCwgcmlnaHQsIGFuZCBib3R0b20gYm9yZGVycyBvZiB0aGUg
YnV0dG9uIHNvIHRoYXQgdGhleSBjb2luY2lkZSB3aXRoIHRoZSA8c2VsZWN0PidzIGJvcmRlci4K
ICAgICAgICAgYnV0dG9uUmVjdC5zZXRZKGJ1dHRvblJlY3QueSgpIC0gdmlzdGFNZW51TGlzdEJ1
dHRvbk91dHNldCk7CiAgICAgICAgIGJ1dHRvblJlY3Quc2V0SGVpZ2h0KGJ1dHRvblJlY3QuaGVp
Z2h0KCkgKyAyICogdmlzdGFNZW51TGlzdEJ1dHRvbk91dHNldCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA4MDY2NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTAzLTA5ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdA
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVbmlmeSBXaW5kb3dzIHZlcnNpb24gY2hlY2tzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU5NzkKKworICAgICAgICAqIFVJUHJvY2Vzcy93
aW4vV2ViUGFnZVByb3h5V2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpz
dGFuZGFyZFVzZXJBZ2VudCk6CisKIDIwMTEtMDMtMDkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgY29ycmVjdGlvbi4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5j
cHAJKHJldmlzaW9uIDgwNTc3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQ
YWdlUHJveHlXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJTeXN0
ZW1JbmZvLmgiCiAKICNpbmNsdWRlICJyZXNvdXJjZS5oIgogI2luY2x1ZGUgPHRjaGFyLmg+CkBA
IC0zNiwzMCArMzcsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLXN0YXRpYyBTdHJpbmcgd2luZG93c1ZlcnNpb24oKQotewotICAgU3RyaW5nIG9z
VmVyc2lvbjsKLSAgIE9TVkVSU0lPTklORk8gdmVyc2lvbkluZm8gPSB7IDAgfTsKLSAgIHZlcnNp
b25JbmZvLmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YodmVyc2lvbkluZm8pOwotICAgOjpH
ZXRWZXJzaW9uRXgoJnZlcnNpb25JbmZvKTsKLQotICAgaWYgKHZlcnNpb25JbmZvLmR3UGxhdGZv
cm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUykgewotICAgICAgIGlmICh2ZXJzaW9u
SW5mby5kd01ham9yVmVyc2lvbiA9PSA0KSB7Ci0gICAgICAgICAgIGlmICh2ZXJzaW9uSW5mby5k
d01pbm9yVmVyc2lvbiA9PSAwKQotICAgICAgICAgICAgICAgb3NWZXJzaW9uID0gIldpbmRvd3Mg
OTUiOwotICAgICAgICAgICBlbHNlIGlmICh2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbiA9PSAx
MCkKLSAgICAgICAgICAgICAgIG9zVmVyc2lvbiA9ICJXaW5kb3dzIDk4IjsKLSAgICAgICAgICAg
ZWxzZSBpZiAodmVyc2lvbkluZm8uZHdNaW5vclZlcnNpb24gPT0gOTApCi0gICAgICAgICAgICAg
ICBvc1ZlcnNpb24gPSAiV2luZG93cyA5ODsgV2luIDl4IDQuOTAiOwotICAgICAgIH0KLSAgIH0g
ZWxzZSBpZiAodmVyc2lvbkluZm8uZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9O
VCkKLSAgICAgICBvc1ZlcnNpb24gPSBtYWtlU3RyaW5nKCJXaW5kb3dzIE5UICIsIFN0cmluZzo6
bnVtYmVyKHZlcnNpb25JbmZvLmR3TWFqb3JWZXJzaW9uKSwgJy4nLCBTdHJpbmc6Om51bWJlcih2
ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbikpOwotCi0gICBpZiAoIW9zVmVyc2lvbi5sZW5ndGgo
KSkKLSAgICAgICBvc1ZlcnNpb24gPSBtYWtlU3RyaW5nKCJXaW5kb3dzICIsIFN0cmluZzo6bnVt
YmVyKHZlcnNpb25JbmZvLmR3TWFqb3JWZXJzaW9uKSwgJy4nLCBTdHJpbmc6Om51bWJlcih2ZXJz
aW9uSW5mby5kd01pbm9yVmVyc2lvbikpOwotICAgcmV0dXJuIG9zVmVyc2lvbjsKLX0KLQogc3Rh
dGljIFN0cmluZyB1c2VyVmlzaWJsZVdlYktpdFZlcnNpb25TdHJpbmcoKQogewogICAgIExQV1NU
UiBidWlsZE51bWJlclN0cmluZ1B0cjsKQEAgLTcxLDEyICs0OCwxMCBAQCBzdGF0aWMgU3RyaW5n
IHVzZXJWaXNpYmxlV2ViS2l0VmVyc2lvblN0CiAKIFN0cmluZyBXZWJQYWdlUHJveHk6OnN0YW5k
YXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KQog
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBvc1ZlcnNpb24sICh3aW5kb3dzVmVy
c2lvbigpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG9zVmVyc2lvbiwgKHdp
bmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKSkpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCB3ZWJLaXRWZXJzaW9uLCAodXNlclZpc2libGVXZWJLaXRWZXJzaW9uU3RyaW5nKCkpKTsK
IAotICAgIGlmIChhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIG9zVmVyc2lvbiwgIikgQXBwbGVX
ZWJLaXQvIiwgd2ViS2l0VmVyc2lvbiwgIiAoS0hUTUwsIGxpa2UgR2Vja28pIik7Ci0gICAgcmV0
dXJuIG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBvc1ZlcnNpb24sICIpIEFwcGxlV2ViS2l0
LyIsIHdlYktpdFZlcnNpb24sICIgKEtIVE1MLCBsaWtlIEdlY2tvKSAiLCBhcHBsaWNhdGlvbk5h
bWVGb3JVc2VyQWdlbnQpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJNb3ppbGxhLzUuMCAoIiwg
b3NWZXJzaW9uLCAiKSBBcHBsZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9uLCAiIChLSFRNTCwgbGlr
ZSBHZWNrbykiLCBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQuaXNFbXB0eSgpID8gIiIgOiAi
ICIsIGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gODA2NjcpCisrKyBTb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0w
My0wOSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5pZnkgV2luZG93cyB2ZXJzaW9u
IGNoZWNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU1OTc5CisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3BwOgorICAgICAg
ICAod2Via2l0T1NWZXJzaW9uKToKKwogMjAxMS0wMy0wOCAgQ2hyaXN0aWFuIER5d2FuICA8Y2hy
aXN0aWFuQGxhbmVkby5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29u
LgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3Mu
Y3BwCShyZXZpc2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJzZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAKIAogI2lmIE9T
KFVOSVgpCiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbGlmIE9TKFdJTkRPV1MpCisjaW5j
bHVkZSAiU3lzdGVtSW5mby5oIgogI2VuZGlmCiAKIC8qKgpAQCAtMjA4LDcgKzIxMCw3IEBAIHN0
YXRpYyBTdHJpbmcgd2Via2l0T1NWZXJzaW9uKCkKICAgICBlbHNlCiAgICAgICAgIHVhT1NWZXJz
aW9uID0gU3RyaW5nKCJVbmtub3duIik7CiAjZWxpZiBPUyhXSU5ET1dTKQotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCB1YU9TVmVyc2lvbiwgKFN0cmluZygiV2luZG93cyIp
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHVhT1NWZXJzaW9uLCAo
d2luZG93c1ZlcnNpb25Gb3JVQVN0cmluZygpKSk7CiAjZWxzZQogICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgU3RyaW5nLCB1YU9TVmVyc2lvbiwgKFN0cmluZygiVW5rbm93biIpKSk7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDY2NykKKysrIFNvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDMt
MDkgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaWZ5IFdpbmRvd3MgdmVyc2lvbiBj
aGVja3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NTk3OQorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlOjp1
c2VyQWdlbnRGb3JVcmwpOgorCiAyMDExLTAzLTA3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gODA1NzcpCisrKyBTb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsOSBAQAogI2lu
Y2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpZiBkZWZpbmVkIFFfT1NfV0lOMzIKKyNpbmNsdWRlICJTeXN0ZW1J
bmZvLmgiCisjZW5kaWYgLy8gUV9PU19XSU4zMgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIldlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1
cmVzLmgiCkBAIC0zNzcyLDUyICszNzc1LDcgQEAgUVN0cmluZyBRV2ViUGFnZTo6dXNlckFnZW50
Rm9yVXJsKGNvbnN0CiAjaWZkZWYgUV9PU19BSVgKICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJBSVgiKTsKICNlbGlmIGRlZmluZWQgUV9PU19XSU4zMgotCi0g
ICAgICAgIHN3aXRjaCAoUVN5c0luZm86OldpbmRvd3NWZXJzaW9uKSB7Ci0gICAgICAgIGNhc2Ug
UVN5c0luZm86OldWXzMyczoKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6
ZnJvbUxhdGluMSgiV2luZG93cyAzLjEiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFFTeXNJbmZvOjpXVl85NToKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiV2luZG93cyA5NSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgUVN5c0luZm86OldWXzk4OgotICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIDk4Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBRU3lzSW5mbzo6V1ZfTWU6Ci0gICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFT
dHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgOTg7IFdpbiA5eCA0LjkwIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfTlQ6Ci0gICAgICAgICAgICBmaXJz
dFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbk5UNC4wIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfMjAwMDoKLSAgICAgICAgICAgIGZp
cnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyBOVCA1LjAiKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9YUDoKLSAgICAgICAg
ICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyBOVCA1LjEi
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl8yMDAzOgot
ICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dz
IE5UIDUuMiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86OldW
X1ZJU1RBOgotICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCJXaW5kb3dzIE5UIDYuMCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICBjYXNlIFFT
eXNJbmZvOjpXVl9XSU5ET1dTNzoKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiV2luZG93cyBOVCA2LjEiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfQ0U6Ci0gICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9
IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgQ0UiKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfQ0VORVQ6Ci0gICAgICAgICAgICBmaXJzdFBhcnRU
ZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgQ0UgLk5FVCIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9DRV81OgotICAgICAgICAgICAg
Zmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIENFIDUueCIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9DRV82OgotICAg
ICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIENF
IDYueCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQorICAgICAgICBmaXJzdFBh
cnRUZW1wICs9IHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKTsKICNlbGlmIGRlZmluZWQgUV9P
U19EQVJXSU4KICNpZmRlZiBfX2kzODZfXyB8fCBfX3g4Nl82NF9fCiAgICAgICAgIGZpcnN0UGFy
dFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiSW50ZWwgTWFjIE9TIFgiKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjY3KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDMtMDkgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVuaWZ5IFdpbmRvd3MgdmVyc2lvbiBjaGVja3MuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTk3OQorCisgICAg
ICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpzdGFuZGFyZFVzZXJBZ2VudFdp
dGhBcHBsaWNhdGlvbk5hbWUpOgorICAgICAgICAod2ViS2l0VmVyc2lvblN0cmluZyk6CisKIDIw
MTEtMDMtMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24g
ODA1NzcpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJNYXJzaGFsbGluZ0hlbHBlcnMuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5o
IgorI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKICNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3Qu
aCIKICNpbmNsdWRlICJXZWJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVu
dUNsaWVudC5oIgpAQCAtMTg0LDggKzE4NSw3IEBAIHVzaW5nIEpTQzo6SlNMb2NrOwogc3RhdGlj
IEhNT0RVTEUgYWNjZXNzaWJpbGl0eUxpYjsKIHN0YXRpYyBIYXNoU2V0PFdlYlZpZXcqPiBwZW5k
aW5nRGVsZXRlQmFja2luZ1N0b3JlU2V0OwogCi1zdGF0aWMgU3RyaW5nIG9zVmVyc2lvbigpOwot
c3RhdGljIFN0cmluZyB3ZWJLaXRWZXJzaW9uKCk7CitzdGF0aWMgU3RyaW5nIHdlYktpdFZlcnNp
b25TdHJpbmcoKTsKIAogV2ViVmlldyoga2l0KFBhZ2UqIHBhZ2UpCiB7CkBAIC0xMjQ0LDkgKzEy
NDQsMTAgQEAgYm9vbCBXZWJWaWV3OjpjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFdlYgogCiBTdHJp
bmcgV2ViVmlldzo6c3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKGNvbnN0IFN0
cmluZyYgYXBwbGljYXRpb25OYW1lKQogewotICAgIGlmIChhcHBsaWNhdGlvbk5hbWUuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIG9zVmVyc2lv
bigpLCAiKSBBcHBsZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9uKCksICIgKEtIVE1MLCBsaWtlIEdl
Y2tvKSIpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJNb3ppbGxhLzUuMCAoIiwgb3NWZXJzaW9u
KCksICIpIEFwcGxlV2ViS2l0LyIsIHdlYktpdFZlcnNpb24oKSwgIiAoS0hUTUwsIGxpa2UgR2Vj
a28pICIsIGFwcGxpY2F0aW9uTmFtZSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IG9zVmVyc2lvbiwgKHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKSkpOworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCB3ZWJLaXRWZXJzaW9uLCAod2ViS2l0VmVyc2lvblN0cmluZygp
KSk7CisKKyAgICByZXR1cm4gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIG9zVmVyc2lvbiwg
IikgQXBwbGVXZWJLaXQvIiwgd2ViS2l0VmVyc2lvbiwgIiAoS0hUTUwsIGxpa2UgR2Vja28pIiwg
YXBwbGljYXRpb25OYW1lLmlzRW1wdHkoKSA/ICIiIDogIiAiLCBhcHBsaWNhdGlvbk5hbWUpOwog
fQogCiBQYWdlKiBXZWJWaWV3OjpwYWdlKCkKQEAgLTIzMzYsMzEgKzIzMzcsNyBAQCBib29sIFdl
YlZpZXc6OmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSBjCiAjZW5kaWYKIH0KIAotc3RhdGljIFN0
cmluZyBvc1ZlcnNpb24oKQotewotICAgIFN0cmluZyBvc1ZlcnNpb247Ci0gICAgT1NWRVJTSU9O
SU5GTyB2ZXJzaW9uSW5mbyA9IHswfTsKLSAgICB2ZXJzaW9uSW5mby5kd09TVmVyc2lvbkluZm9T
aXplID0gc2l6ZW9mKHZlcnNpb25JbmZvKTsKLSAgICBHZXRWZXJzaW9uRXgoJnZlcnNpb25JbmZv
KTsKLQotICAgIGlmICh2ZXJzaW9uSW5mby5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJ
TjMyX1dJTkRPV1MpIHsKLSAgICAgICAgaWYgKHZlcnNpb25JbmZvLmR3TWFqb3JWZXJzaW9uID09
IDQpIHsKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbiA9PSAwKQot
ICAgICAgICAgICAgICAgIG9zVmVyc2lvbiA9ICJXaW5kb3dzIDk1IjsKLSAgICAgICAgICAgIGVs
c2UgaWYgKHZlcnNpb25JbmZvLmR3TWlub3JWZXJzaW9uID09IDEwKQotICAgICAgICAgICAgICAg
IG9zVmVyc2lvbiA9ICJXaW5kb3dzIDk4IjsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZlcnNpb25J
bmZvLmR3TWlub3JWZXJzaW9uID09IDkwKQotICAgICAgICAgICAgICAgIG9zVmVyc2lvbiA9ICJX
aW5kb3dzIDk4OyBXaW4gOXggNC45MCI7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHZlcnNp
b25JbmZvLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQpCi0gICAgICAgIG9z
VmVyc2lvbiA9IG1ha2VTdHJpbmcoIldpbmRvd3MgTlQgIiwgU3RyaW5nOjpudW1iZXIodmVyc2lv
bkluZm8uZHdNYWpvclZlcnNpb24pLCAnLicsIFN0cmluZzo6bnVtYmVyKHZlcnNpb25JbmZvLmR3
TWlub3JWZXJzaW9uKSk7Ci0KLSAgICBpZiAoIW9zVmVyc2lvbi5sZW5ndGgoKSkKLSAgICAgICAg
b3NWZXJzaW9uID0gbWFrZVN0cmluZygiV2luZG93cyAiLCBTdHJpbmc6Om51bWJlcih2ZXJzaW9u
SW5mby5kd01ham9yVmVyc2lvbiksICcuJywgU3RyaW5nOjpudW1iZXIodmVyc2lvbkluZm8uZHdN
aW5vclZlcnNpb24pKTsKLSAgICByZXR1cm4gb3NWZXJzaW9uOwotfQotCi1zdGF0aWMgU3RyaW5n
IHdlYktpdFZlcnNpb24oKQorc3RhdGljIFN0cmluZyB3ZWJLaXRWZXJzaW9uU3RyaW5nKCkKIHsK
ICAgICBMUFdTVFIgYnVpbGROdW1iZXJTdHJpbmdQdHI7CiAgICAgaWYgKCE6OkxvYWRTdHJpbmdX
KGdJbnN0YW5jZSwgQlVJTERfTlVNQkVSLCByZWludGVycHJldF9jYXN0PExQV1NUUj4oJmJ1aWxk
TnVtYmVyU3RyaW5nUHRyKSwgMCkgfHwgIWJ1aWxkTnVtYmVyU3RyaW5nUHRyKQo=
</data>
<flag name="review"
          id="77379"
          type_id="1"
          status="+"
          setter="mihaip"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85279</attachid>
            <date>2011-03-09 19:33:48 -0800</date>
            <delta_ts>2011-03-09 20:20:45 -0800</delta_ts>
            <desc>Part 2, v6</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>30142</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjgyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDMtMDkgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE1paGFp
IFBhcnBhcml0YS4KKworICAgICAgICBVbmlmeSBXaW5kb3dzIHZlcnNpb24gY2hlY2tzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU5NzkKKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOiBGaXggc3BhY2VzIC0+IHRhYnMuCisgICAgICAgICogU3Ry
aW5nc05vdFRvQmVMb2NhbGl6ZWQudHh0OgorICAgICAgICAqIFdlYkNvcmUucHJvOiBBZGQgU3lz
dGVtSW5mby4qIHRvIFF0IGJ1aWxkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9s
bGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bVdpbjo6aW52YWxpZGF0ZU9uTW91c2VFbnRlckV4aXQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6Z2V0VGhlbWVTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZUFycm93U3RhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2Rl
Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEJNUEdseXBocyk6CisgICAg
ICAgICogcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTaGFyZWRDdXJzb3IpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6U2Nyb2xsYmFyVGhl
bWVXaW4pOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcDogQWRkIGZ1bGwt
ZmxlZGdlZCB2ZXJzaW9uIGNoZWNrIGFuZCBVQSBzdHJpbmcgaGVscGVyIGZ1bmN0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6d2luZG93c1ZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6d2luZG93
c1ZlcnNpb25Gb3JVQVN0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1N5c3RlbUluZm8u
aDogQWRkIGZ1bGwtZmxlZGdlZCB2ZXJzaW9uIGNoZWNrIGFuZCBVQSBzdHJpbmcgaGVscGVyIGZ1
bmN0aW9uLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmdldE5vbkNsaWVudE1ldHJpY3MpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdp
bjo6Z2V0VGhlbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWlu
dE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludE1lbnVM
aXN0QnV0dG9uKToKKwogMjAxMS0wMy0wOSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gODA2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQko
d29ya2luZyBjb3B5KQpAQCAtMzg1MSw4ICszODUxLDggQEAgaWYgVEFSR0VUX1dJTjMyCiB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
V2luLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaCBc
Ci0gICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwIFwKLSAgICBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9TeXN0ZW1JbmZvLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRh
dGFiYXNlV2luLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1l
c3NhZ2VUaHJvdHRsZXJXaW4uaApJbmRleDogU291cmNlL1dlYkNvcmUvU3RyaW5nc05vdFRvQmVM
b2NhbGl6ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1N0cmluZ3NOb3RUb0Jl
TG9jYWxpemVkLnR4dAkocmV2aXNpb24gODA1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9TdHJpbmdz
Tm90VG9CZUxvY2FsaXplZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw5ICs1MTEsMTQgQEAK
ICJXZWJWaWV3V2luZG93Q2xhc3MiCiAiV2ViV29ya2Vyc1ByaXZhdGUiCiAiV2luZG93cyAiCisi
V2luZG93cyBDRSIKKyJXaW5kb3dzIENFICIKKyJXaW5kb3dzIENFIC5ORVQiCisiV2luZG93cyAz
LjEiCiAiV2luZG93cyA5NSIKICJXaW5kb3dzIDk4IgogIldpbmRvd3MgOTg7IFdpbiA5eCA0Ljkw
IgorIldpbk5UNC4wIgogIldpbmRvd3MgTlQgIgogIldtdlBsdWdpbiIKICJYU0wiCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnBybwkocmV2aXNpb24gODA1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
bwkod29ya2luZyBjb3B5KQpAQCAtMjUyMyw3ICsyNTIzLDkgQEAgY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX1NNT09USF9TQ1JPTExJTgogfQogCiB3aW4zMi0qfHdpbmNlKiB7CisgICAgSEVBREVS
UyArPSBwbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5oCiAgICAgU09VUkNFUyArPSBcCisgICAgICAg
IHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL3dpbi9TeXN0
ZW1UaW1lV2luLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1h
dGlvbk1hdHJpeFdpbi5jcHAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCShy
ZXZpc2lvbiA4MDYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9s
bGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBA
IGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpzY3JvbGxiYXIKIAogYm9vbCBTY3JvbGxi
YXJUaGVtZUNocm9taXVtV2luOjppbnZhbGlkYXRlT25Nb3VzZUVudGVyRXhpdCgpCiB7Ci0gICAg
cmV0dXJuIGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCk7CisgICAgcmV0dXJuIHdpbmRvd3NWZXJz
aW9uKCkgPj0gV2luZG93c1Zpc3RhOwogfQogCiBib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1X
aW46OnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKQEAgLTE2MCwxMiArMTYwLDEyIEBAIGludCBTY3Jv
bGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZVMKICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVz
c2VkUGFydCgpID09IFRodW1iUGFydCkgewogICAgICAgICBpZiAocGFydCA9PSBUaHVtYlBhcnQp
CiAgICAgICAgICAgICByZXR1cm4gU0NSQlNfUFJFU1NFRDsKLSAgICAgICAgcmV0dXJuIGlzUnVu
bmluZ09uVmlzdGFPckxhdGVyKCkgPyBTQ1JCU19IT1ZFUiA6IFNDUkJTX05PUk1BTDsKKyAgICAg
ICAgcmV0dXJuICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93c1Zpc3RhKSA/IFNDUkJTX05PUk1B
TCA6IFNDUkJTX0hPVkVSOwogICAgIH0KICAgICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxlZCgpKQog
ICAgICAgICByZXR1cm4gU0NSQlNfRElTQUJMRUQ7CiAgICAgaWYgKHNjcm9sbGJhci0+aG92ZXJl
ZFBhcnQoKSAhPSBwYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydCB8fCBwYXJ0ID09IEZvcndh
cmRUcmFja1BhcnQpCi0gICAgICAgIHJldHVybiAoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09
IE5vUGFydCB8fCAhaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSkgPyBTQ1JCU19OT1JNQUwgOiBT
Q1JCU19IT1ZFUjsKKyAgICAgICAgcmV0dXJuIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0g
Tm9QYXJ0IHx8ICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93c1Zpc3RhKSkgPyBTQ1JCU19OT1JN
QUwgOiBTQ1JCU19IT1ZFUjsKICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IE5v
UGFydCkKICAgICAgICAgcmV0dXJuIFNDUkJTX0hPVDsKICAgICByZXR1cm4gKHNjcm9sbGJhci0+
cHJlc3NlZFBhcnQoKSA9PSBwYXJ0KSA/IFNDUkJTX1BSRVNTRUQgOiBTQ1JCU19OT1JNQUw7CkBA
IC0xNzksNDMgKzE3OSw0MyBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6Z2V0VGhl
bWVBCiAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndh
cmRCdXR0b25TdGFydFBhcnQpIHsKICAgICAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgICAgICBpZiAoc2Nyb2xsYmFyLT5w
cmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4gIWlzUnVu
bmluZ09uVmlzdGFPckxhdGVyKCkgPyBBQlNfTEVGVE5PUk1BTCA6IEFCU19MRUZUSE9WRVI7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93c1Zpc3RhKSA/
IEFCU19MRUZUTk9STUFMIDogQUJTX0xFRlRIT1ZFUjsKICAgICAgICAgICAgIGlmICghc2Nyb2xs
YmFyLT5lbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEFCU19MRUZURElTQUJMRUQ7
CiAgICAgICAgICAgICBpZiAoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpICE9IHBhcnQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkg
fHwgIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpID8gQUJTX0xFRlROT1JNQUwgOiBBQlNfTEVG
VEhPVkVSOworICAgICAgICAgICAgICAgIHJldHVybiAoKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQo
KSA9PSBOb1BhcnQpIHx8ICh3aW5kb3dzVmVyc2lvbigpIDwgV2luZG93c1Zpc3RhKSkgPyBBQlNf
TEVGVE5PUk1BTCA6IEFCU19MRUZUSE9WRVI7CiAgICAgICAgICAgICBpZiAoc2Nyb2xsYmFyLT5w
cmVzc2VkUGFydCgpID09IE5vUGFydCkKICAgICAgICAgICAgICAgICByZXR1cm4gQUJTX0xFRlRI
T1Q7CiAgICAgICAgICAgICByZXR1cm4gKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBwYXJ0
KSA/CiAgICAgICAgICAgICAgICAgQUJTX0xFRlRQUkVTU0VEIDogQUJTX0xFRlROT1JNQUw7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBh
cnQpCi0gICAgICAgICAgICByZXR1cm4gIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPyBBQlNf
VVBOT1JNQUwgOiBBQlNfVVBIT1ZFUjsKKyAgICAgICAgICAgIHJldHVybiAod2luZG93c1ZlcnNp
b24oKSA8IFdpbmRvd3NWaXN0YSkgPyBBQlNfVVBOT1JNQUwgOiBBQlNfVVBIT1ZFUjsKICAgICAg
ICAgaWYgKCFzY3JvbGxiYXItPmVuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBBQlNfVVBE
SVNBQkxFRDsKICAgICAgICAgaWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBwYXJ0KQot
ICAgICAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkg
fHwgIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpID8gQUJTX1VQTk9STUFMIDogQUJTX1VQSE9W
RVI7CisgICAgICAgICAgICByZXR1cm4gKChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9Q
YXJ0KSB8fCAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkpID8gQUJTX1VQTk9STUFM
IDogQUJTX1VQSE9WRVI7CiAgICAgICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0g
Tm9QYXJ0KQogICAgICAgICAgICAgcmV0dXJuIEFCU19VUEhPVDsKICAgICAgICAgcmV0dXJuIChz
Y3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gcGFydCkgPyBBQlNfVVBQUkVTU0VEIDogQUJTX1VQ
Tk9STUFMOwogICAgIH0KICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9
PSBUaHVtYlBhcnQpCi0gICAgICAgICAgICByZXR1cm4gIWlzUnVubmluZ09uVmlzdGFPckxhdGVy
KCkgPyBBQlNfUklHSFROT1JNQUwgOiBBQlNfUklHSFRIT1ZFUjsKKyAgICAgICAgICAgIHJldHVy
biAod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkgPyBBQlNfUklHSFROT1JNQUwgOiBB
QlNfUklHSFRIT1ZFUjsKICAgICAgICAgaWYgKCFzY3JvbGxiYXItPmVuYWJsZWQoKSkKICAgICAg
ICAgICAgIHJldHVybiBBQlNfUklHSFRESVNBQkxFRDsKICAgICAgICAgaWYgKHNjcm9sbGJhci0+
aG92ZXJlZFBhcnQoKSAhPSBwYXJ0KQotICAgICAgICAgICAgcmV0dXJuICgoc2Nyb2xsYmFyLT5o
b3ZlcmVkUGFydCgpID09IE5vUGFydCkgfHwgIWlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpID8g
QUJTX1JJR0hUTk9STUFMIDogQUJTX1JJR0hUSE9WRVI7CisgICAgICAgICAgICByZXR1cm4gKChz
Y3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8fCAod2luZG93c1ZlcnNpb24oKSA8
IFdpbmRvd3NWaXN0YSkpID8gQUJTX1JJR0hUTk9STUFMIDogQUJTX1JJR0hUSE9WRVI7CiAgICAg
ICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gTm9QYXJ0KQogICAgICAgICAgICAg
cmV0dXJuIEFCU19SSUdIVEhPVDsKICAgICAgICAgcmV0dXJuIChzY3JvbGxiYXItPnByZXNzZWRQ
YXJ0KCkgPT0gcGFydCkgPyBBQlNfUklHSFRQUkVTU0VEIDogQUJTX1JJR0hUTk9STUFMOwogICAg
IH0KICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAg
ICAgcmV0dXJuICFpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpID8gQUJTX0RPV05OT1JNQUwgOiBB
QlNfRE9XTkhPVkVSOworICAgICAgICByZXR1cm4gKHdpbmRvd3NWZXJzaW9uKCkgPCBXaW5kb3dz
VmlzdGEpID8gQUJTX0RPV05OT1JNQUwgOiBBQlNfRE9XTkhPVkVSOwogICAgIGlmICghc2Nyb2xs
YmFyLT5lbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBBQlNfRE9XTkRJU0FCTEVEOwogICAgIGlm
IChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgIT0gcGFydCkKLSAgICAgICAgcmV0dXJuICgoc2Ny
b2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkgfHwgIWlzUnVubmluZ09uVmlzdGFPckxh
dGVyKCkpID8gQUJTX0RPV05OT1JNQUwgOiBBQlNfRE9XTkhPVkVSOworICAgICAgICByZXR1cm4g
KChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB8fCAod2luZG93c1ZlcnNpb24o
KSA8IFdpbmRvd3NWaXN0YSkpID8gQUJTX0RPV05OT1JNQUwgOiBBQlNfRE9XTkhPVkVSOwogICAg
IGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gTm9QYXJ0KQogICAgICAgICByZXR1cm4g
QUJTX0RPV05IT1Q7CiAgICAgcmV0dXJuIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gcGFy
dCkgPyBBQlNfRE9XTlBSRVNTRUQgOiBBQlNfRE9XTk5PUk1BTDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1X
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA4MDYxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRy
ZWVOb2RlQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAg
c3RhdGljIGJvb2wgZmlsbEJNUEdseXBocyh1bnNpZ25lZCBvZmZzZQogICAgIGJvb2wgaGF2ZUds
eXBocyA9IGZhbHNlOwogICAgIGludCBpbnZhbGlkR2x5cGggPSAweEZGRkY7CiAgICAgY29uc3Qg
RFdPUkQgY2ZmVGFibGVUYWcgPSAweDIwNDY0NjQzOyAvLyA0LWJ5dGUgaWRlbnRpZmllciBmb3Ig
T3BlblR5cGUgQ0ZGIHRhYmxlICgnQ0ZGICcpLgotICAgIGlmICghaXNSdW5uaW5nT25WaXN0YU9y
TGF0ZXIoKSAmJiAhKHRtLnRtUGl0Y2hBbmRGYW1pbHkgJiBUTVBGX1RSVUVUWVBFKSAmJiAoR2V0
Rm9udERhdGEoZGMsIGNmZlRhYmxlVGFnLCAwLCAwLCAwKSA9PSBHRElfRVJST1IpKQorICAgIGlm
ICgod2luZG93c1ZlcnNpb24oKSA8IFdpbmRvd3NWaXN0YSkgJiYgISh0bS50bVBpdGNoQW5kRmFt
aWx5ICYgVE1QRl9UUlVFVFlQRSkgJiYgKEdldEZvbnREYXRhKGRjLCBjZmZUYWJsZVRhZywgMCwg
MCwgMCkgPT0gR0RJX0VSUk9SKSkKICAgICAgICAgaW52YWxpZEdseXBoID0gMHgxRjsKIAogICAg
IEdseXBoIHNwYWNlR2x5cGggPSAwOyAgLy8gR2x5cGggZm9yIGEgc3BhY2UuIExhemlseSBmaWxs
ZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ3Vyc29yV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ3Vyc29yV2luLmNwcAkocmV2
aXNpb24gODA1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ3Vyc29yV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkJpdG1hcEluZm8u
aCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAi
U3lzdGVtSW5mby5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCkBAIC0zOSwyMCArNDAs
MTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIGJvb2wgc3VwcG9y
dHNBbHBoYUN1cnNvcnMoKSAKLXsKLSAgICBPU1ZFUlNJT05JTkZPIG9zaW5mbyA9IHswfTsKLSAg
ICBvc2luZm8uZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZihPU1ZFUlNJT05JTkZPKTsKLSAg
ICBHZXRWZXJzaW9uRXgoJm9zaW5mbyk7Ci0gICAgcmV0dXJuIG9zaW5mby5kd01ham9yVmVyc2lv
biA+IDUgfHwgKG9zaW5mby5kd01ham9yVmVyc2lvbiA9PSA1ICYmIG9zaW5mby5kd01pbm9yVmVy
c2lvbiA+IDApOwotfQotCiBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRDdXJzb3I+IGNyZWF0ZVNo
YXJlZEN1cnNvcihJbWFnZSogaW1nLCBjb25zdCBJbnRQb2ludCYgaG90U3BvdCkKIHsKICAgICBS
ZWZQdHI8U2hhcmVkQ3Vyc29yPiBpbXBsOwogCiAgICAgSW50UG9pbnQgZWZmZWN0aXZlSG90U3Bv
dCA9IGRldGVybWluZUhvdFNwb3QoaW1nLCBob3RTcG90KTsKLSAgICBzdGF0aWMgYm9vbCBkb0Fs
cGhhID0gc3VwcG9ydHNBbHBoYUN1cnNvcnMoKTsKKyAgICBzdGF0aWMgYm9vbCBkb0FscGhhID0g
d2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzWFA7CiAgICAgQml0bWFwSW5mbyBjdXJzb3JJbWFn
ZSA9IEJpdG1hcEluZm86OmNyZWF0ZShJbnRTaXplKGltZy0+d2lkdGgoKSwgaW1nLT5oZWlnaHQo
KSkpOwogCiAgICAgSERDIGRjID0gR2V0REMoMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDgwNTc3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIFNjcm9sbGJhclRoZW1lV2luOjpTY3JvbGxi
YXJUaGVtZVdpbigpCiAgICAgaWYgKCFpbml0aWFsaXplZCkgewogICAgICAgICBpbml0aWFsaXpl
ZCA9IHRydWU7CiAgICAgICAgIGNoZWNrQW5kSW5pdFNjcm9sbGJhclRoZW1lKCk7Ci0gICAgICAg
IHJ1bm5pbmdWaXN0YSA9IGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCk7CisgICAgICAgIHJ1bm5p
bmdWaXN0YSA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSk7CiAgICAgfQogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwCShyZXZp
c2lvbiA4MDU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzAgKzI3LDkwIEBACiAjaW5jbHVkZSAiU3lzdGVtSW5m
by5oIgogCiAjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBpc1J1bm5pbmdPblZp
c3RhT3JMYXRlcigpCitXaW5kb3dzVmVyc2lvbiB3aW5kb3dzVmVyc2lvbihpbnQqIG1ham9yLCBp
bnQqIG1pbm9yKQogeworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAg
c3RhdGljIFdpbmRvd3NWZXJzaW9uIHZlcnNpb247CisgICAgc3RhdGljIGludCBtYWpvclZlcnNp
b24sIG1pbm9yVmVyc2lvbjsKKworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaW5p
dGlhbGl6ZWQgPSB0cnVlOwogI2lmIE9TKFdJTkNFKQotICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgT1NWRVJTSU9OSU5GTyB2ZXJzaW9uSW5mbyA9IHswfTsKICNlbHNlCi0gICAgc3RhdGljIGJv
b2wgaXNWaXN0YU9yTGF0ZXI7Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7Ci0KLSAgICBp
ZiAoaW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybiBpc1Zpc3RhT3JMYXRlcjsKKyAgICAgICAg
T1NWRVJTSU9OSU5GT0VYIHZlcnNpb25JbmZvID0gezB9OworI2VuZGlmCisgICAgICAgIHZlcnNp
b25JbmZvLmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YodmVyc2lvbkluZm8pOworICAgICAg
ICBHZXRWZXJzaW9uRXgocmVpbnRlcnByZXRfY2FzdDxPU1ZFUlNJT05JTkZPKj4oJnZlcnNpb25J
bmZvKSk7CisgICAgICAgIG1ham9yVmVyc2lvbiA9IHZlcnNpb25JbmZvLmR3TWFqb3JWZXJzaW9u
OworICAgICAgICBtaW5vclZlcnNpb24gPSB2ZXJzaW9uSW5mby5kd01pbm9yVmVyc2lvbjsKIAot
ICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyNpZiBPUyhXSU5DRSkKKyAgICAgICAgaWYgKG1ham9y
VmVyc2lvbiA+PSAxICYmIG1ham9yVmVyc2lvbiA8PSA3KQorICAgICAgICAgICAgdmVyc2lvbiA9
IHN0YXRpY19jYXN0PFdpbmRvd3NWZXJzaW9uPihXaW5kb3dzQ0UxICsgKG1ham9yVmVyc2lvbiAt
IDEpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmVyc2lvbiA9IChtYWpvclZlcnNpb24g
PCAxKSA/IFdpbmRvd3NDRTEgOiBXaW5kb3dzQ0U3OworI2Vsc2UKKyAgICAgICAgaWYgKHZlcnNp
b25JbmZvLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJzKQorICAgICAgICAgICAg
dmVyc2lvbiA9IFdpbmRvd3MzXzE7CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb25JbmZvLmR3UGxh
dGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUykgeworICAgICAgICAgICAgaWYg
KCFtaW5vclZlcnNpb24pCisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IFdpbmRvd3M5NTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gKG1pbm9yVmVyc2lvbiA9
PSAxMCkgPyBXaW5kb3dzOTggOiBXaW5kb3dzTUU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAobWFqb3JWZXJzaW9uID09IDUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1pbm9y
VmVyc2lvbikKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IFdpbmRvd3MyMDAwOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IChtaW5vclZl
cnNpb24gPT0gMSkgPyBXaW5kb3dzWFAgOiBXaW5kb3dzU2VydmVyMjAwMzsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobWFqb3JWZXJzaW9uID49IDYpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVy
c2lvbkluZm8ud1Byb2R1Y3RUeXBlID09IFZFUl9OVF9XT1JLU1RBVElPTikKKyAgICAgICAgICAg
ICAgICAgICAgdmVyc2lvbiA9IChtYWpvclZlcnNpb24gPT0gNiAmJiAhbWlub3JWZXJzaW9uKSA/
IFdpbmRvd3NWaXN0YSA6IFdpbmRvd3M3OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgdmVyc2lvbiA9IFdpbmRvd3NTZXJ2ZXIyMDA4OworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IChtYWpvclZlcnNpb24gPT0gNCkgPyBXaW5k
b3dzTlQ0IDogV2luZG93c05UMzsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQogCi0gICAgT1NW
RVJTSU9OSU5GT0VYIHZpID0gezB9OwotICAgIHZpLmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXpl
b2YoT1NWRVJTSU9OSU5GT0VYKTsKLSAgICBHZXRWZXJzaW9uRXgocmVpbnRlcnByZXRfY2FzdDxP
U1ZFUlNJT05JTkZPKj4oJnZpKSk7CisgICAgaWYgKG1ham9yKQorICAgICAgICAqbWFqb3IgPSBt
YWpvclZlcnNpb247CisgICAgaWYgKG1pbm9yKQorICAgICAgICAqbWlub3IgPSBtaW5vclZlcnNp
b247CisgICAgcmV0dXJuIHZlcnNpb247Cit9CiAKLSAgICBpc1Zpc3RhT3JMYXRlciA9IHZpLmR3
TWFqb3JWZXJzaW9uID49IDY7CitTdHJpbmcgd2luZG93c1ZlcnNpb25Gb3JVQVN0cmluZygpCit7
CisgICAgaW50IG1ham9yLCBtaW5vcjsKKyAgICBXaW5kb3dzVmVyc2lvbiB2ZXJzaW9uID0gd2lu
ZG93c1ZlcnNpb24oJm1ham9yLCAmbWlub3IpOworICAgIHN3aXRjaCAodmVyc2lvbikgeworICAg
IGNhc2UgV2luZG93c0NFMToKKyAgICBjYXNlIFdpbmRvd3NDRTI6CisgICAgY2FzZSBXaW5kb3dz
Q0UzOgorICAgICAgICByZXR1cm4gIldpbmRvd3MgQ0UiOworICAgIGNhc2UgV2luZG93c0NFNDoK
KyAgICAgICAgcmV0dXJuICJXaW5kb3dzIENFIC5ORVQiOworICAgIGNhc2UgV2luZG93czNfMToK
KyAgICAgICAgcmV0dXJuICJXaW5kb3dzIDMuMSI7CisgICAgY2FzZSBXaW5kb3dzOTU6CisgICAg
ICAgIHJldHVybiAiV2luZG93cyA5NSI7CisgICAgY2FzZSBXaW5kb3dzOTg6CisgICAgICAgIHJl
dHVybiAiV2luZG93cyA5OCI7CisgICAgY2FzZSBXaW5kb3dzTUU6CisgICAgICAgIHJldHVybiAi
V2luZG93cyA5ODsgV2luIDl4IDQuOTAiOworICAgIGNhc2UgV2luZG93c05UNDoKKyAgICAgICAg
cmV0dXJuICJXaW5OVDQuMCI7CisgICAgfQogCi0gICAgcmV0dXJuIGlzVmlzdGFPckxhdGVyOwot
I2VuZGlmCisgICAgY2hhciogZmFtaWx5TmFtZSA9ICh2ZXJzaW9uID49IFdpbmRvd3NOVDMpID8g
IldpbmRvd3MgTlQgIiA6ICJXaW5kb3dzIENFICI7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoZmFt
aWx5TmFtZSwgU3RyaW5nOjpudW1iZXIobWFqb3IpLCAnLicsIFN0cmluZzo6bnVtYmVyKG1pbm9y
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL1N5c3RlbUluZm8uaAkocmV2aXNpb24gODA1NzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiw0
NCBAQAogI2lmbmRlZiBTeXN0ZW1JbmZvX2gKICNkZWZpbmUgU3lzdGVtSW5mb19oCiAKKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29s
IGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCk7CisvLyBOT1RFOiBLZWVwIHRoZXNlIGluIG9yZGVy
IHNvIGNhbGxlcnMgY2FuIGRvIHRoaW5ncyBsaWtlCisvLyAiaWYgKHdpbmRvd3NWZXJzaW9uKCkg
Pj0gV2luZG93c1Zpc3RhKSAuLi4iLiBJdCdzIE9LIHRvIGNoYW5nZSBvciBhZGQgdmFsdWVzLAor
Ly8gdGhvdWdoLgorZW51bSBXaW5kb3dzVmVyc2lvbiB7CisgICAgLy8gQ0UtYmFzZWQgdmVyc2lv
bnMKKyAgICBXaW5kb3dzQ0UxID0gMCwKKyAgICBXaW5kb3dzQ0UyLAorICAgIFdpbmRvd3NDRTMs
CisgICAgV2luZG93c0NFNCwKKyAgICBXaW5kb3dzQ0U1LAorICAgIFdpbmRvd3NDRTYsCisgICAg
V2luZG93c0NFNywKKyAgICAvLyAzLngtYmFzZWQgdmVyc2lvbnMKKyAgICBXaW5kb3dzM18xLAor
ICAgIC8vIDl4LWJhc2VkIHZlcnNpb25zCisgICAgV2luZG93czk1LAorICAgIFdpbmRvd3M5OCwK
KyAgICBXaW5kb3dzTUUsCisgICAgLy8gTlQtYmFzZWQgdmVyc2lvbnMKKyAgICBXaW5kb3dzTlQz
LAorICAgIFdpbmRvd3NOVDQsCisgICAgV2luZG93czIwMDAsCisgICAgV2luZG93c1hQLAorICAg
IFdpbmRvd3NTZXJ2ZXIyMDAzLAorICAgIFdpbmRvd3NWaXN0YSwKKyAgICBXaW5kb3dzU2VydmVy
MjAwOCwKKyAgICBXaW5kb3dzNywKK307CisKKy8vIElmIHN1cHBsaWVkLCB8bWFqb3J8IGFuZCB8
bWlub3J8IGFyZSBzZXQgdG8gdGhlIE9TVkVSU0lPTklORk86OmR3TWFqb3JWZXJzaW9uCisvLyBh
bmQgZHdNaW5vclZlcnNpb24gZmllbGQgdmFsdWVzLCByZXNwZWN0aXZlbHkuCitXaW5kb3dzVmVy
c2lvbiB3aW5kb3dzVmVyc2lvbihpbnQqIG1ham9yID0gMCwgaW50KiBtaW5vciA9IDApOworCitT
dHJpbmcgd2luZG93c1ZlcnNpb25Gb3JVQVN0cmluZygpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDgwNjExKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEs
OCArMTQxLDggQEAgYm9vbCBUaGVtZVBhaW50ZXI6OnNfaGFzSW5zdGFuY2UgPSBmYWxzZQogCiBz
dGF0aWMgdm9pZCBnZXROb25DbGllbnRNZXRyaWNzKE5PTkNMSUVOVE1FVFJJQ1MqIG1ldHJpY3Mp
CiB7Ci0gICAgc3RhdGljIFVJTlQgc2l6ZSA9IGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkgPwot
ICAgICAgICBzaXplb2YoTk9OQ0xJRU5UTUVUUklDUykgOiBOT05DTElFTlRNRVRSSUNTX1NJWkVf
UFJFX1ZJU1RBOworICAgIHN0YXRpYyBVSU5UIHNpemUgPSAod2luZG93c1ZlcnNpb24oKSA+PSBX
aW5kb3dzVmlzdGEpID8KKyAgICAgICAgKHNpemVvZiBOT05DTElFTlRNRVRSSUNTKSA6IE5PTkNM
SUVOVE1FVFJJQ1NfU0laRV9QUkVfVklTVEE7CiAgICAgbWV0cmljcy0+Y2JTaXplID0gc2l6ZTsK
ICAgICBib29sIHN1Y2Nlc3MgPSAhIVN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElF
TlRNRVRSSUNTLCBzaXplLCBtZXRyaWNzLCAwKTsKICAgICBBU1NFUlQoc3VjY2Vzcyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9u
IDgwNTc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTY5LDE1ICs1NjksMTcgQEAgVGhlbWVEYXRhIFJlbmRlclRoZW1l
V2luOjpnZXRUaGVtZURhdGEoUgogICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1p
bmVTdGF0ZShvKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1lbnVsaXN0UGFy
dDoKLSAgICAgICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6Ci0gICAgICAgICAgICByZXN1bHQu
bV9wYXJ0ID0gaXNSdW5uaW5nT25WaXN0YU9yTGF0ZXIoKSA/IENQX0RST1BET1dOQlVUVE9OUklH
SFQgOiBDUF9EUk9QRE9XTkJVVFRPTjsKLSAgICAgICAgICAgIGlmIChpc1J1bm5pbmdPblZpc3Rh
T3JMYXRlcigpICYmIGRvY3VtZW50SXNJbkFwcGxpY2F0aW9uQ2hyb21lTW9kZShvLT5kb2N1bWVu
dCgpKSkgeworICAgICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDogeworICAgICAgICAgICAg
Y29uc3QgYm9vbCBpc1Zpc3RhT3JMYXRlciA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NW
aXN0YSk7CisgICAgICAgICAgICByZXN1bHQubV9wYXJ0ID0gaXNWaXN0YU9yTGF0ZXIgPyBDUF9E
Uk9QRE9XTkJVVFRPTlJJR0hUIDogQ1BfRFJPUERPV05CVVRUT047CisgICAgICAgICAgICBpZiAo
aXNWaXN0YU9yTGF0ZXIgJiYgZG9jdW1lbnRJc0luQXBwbGljYXRpb25DaHJvbWVNb2RlKG8tPmRv
Y3VtZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlICJyZWFkb25seSIgbG9vayB3ZSB1
c2UgaW4gYXBwbGljYXRpb24gY2hyb21lIG1vZGUKICAgICAgICAgICAgICAgICAvLyBvbmx5IHVz
ZXMgYSAibm9ybWFsIiBsb29rIGZvciB0aGUgZHJvcCBkb3duIGJ1dHRvbi4KICAgICAgICAgICAg
ICAgICByZXN1bHQubV9zdGF0ZSA9IFRTX05PUk1BTDsKICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gZGV0ZXJtaW5lU3RhdGUobyk7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIFJhZGlvUGFydDoKICAgICAgICAg
ICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9SQURJTzsKICAgICAgICAgICAgIHJlc3VsdC5tX3N0YXRl
ID0gZGV0ZXJtaW5lU3RhdGUobyk7CkBAIC01ODUsNyArNTg3LDcgQEAgVGhlbWVEYXRhIFJlbmRl
clRoZW1lV2luOjpnZXRUaGVtZURhdGEoUgogICAgICAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoK
ICAgICAgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgogICAgICAgICBjYXNlIFRleHRBcmVhUGFydDoK
LSAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpID8g
RVBfRURJVEJPUkRFUl9OT1NDUk9MTCA6IFRGUF9URVhURklFTEQ7CisgICAgICAgICAgICByZXN1
bHQubV9wYXJ0ID0gKHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93c1Zpc3RhKSA/IEVQX0VESVRC
T1JERVJfTk9TQ1JPTEwgOiBURlBfVEVYVEZJRUxEOwogICAgICAgICAgICAgcmVzdWx0Lm1fc3Rh
dGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFNsaWRlckhvcml6b250YWxQYXJ0OgpAQCAtNzI4LDcgKzczMCw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVXaW46OnBhaW50TWVudUxpc3QoUmVuZGUKIHsKICAgICBIQU5ETEUgdGhlbWU7CiAgICAgaW50
IHBhcnQ7Ci0gICAgaWYgKGhhdmVUaGVtZSAmJiBpc1J1bm5pbmdPblZpc3RhT3JMYXRlcigpKSB7
CisgICAgaWYgKGhhdmVUaGVtZSAmJiAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzVmlzdGEp
KSB7CiAgICAgICAgIHRoZW1lID0gbWVudUxpc3RUaGVtZSgpOwogICAgICAgICBpZiAoZG9jdW1l
bnRJc0luQXBwbGljYXRpb25DaHJvbWVNb2RlKG8tPmRvY3VtZW50KCkpKQogICAgICAgICAgICAg
cGFydCA9IENQX1JFQURPTkxZOwpAQCAtNzkyLDcgKzc5NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVX
aW46OnBhaW50TWVudUxpc3RCdXR0b24KICAgICAgICAgYnV0dG9uUmVjdC5zZXRYKGJ1dHRvblJl
Y3QubWF4WCgpIC0gZHJvcERvd25CdXR0b25XaWR0aCk7CiAgICAgYnV0dG9uUmVjdC5zZXRXaWR0
aChkcm9wRG93bkJ1dHRvbldpZHRoKTsKIAotICAgIGlmIChpc1J1bm5pbmdPblZpc3RhT3JMYXRl
cigpKSB7CisgICAgaWYgKCh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSkpIHsKICAg
ICAgICAgLy8gT3V0c2V0IHRoZSB0b3AsIHJpZ2h0LCBhbmQgYm90dG9tIGJvcmRlcnMgb2YgdGhl
IGJ1dHRvbiBzbyB0aGF0IHRoZXkgY29pbmNpZGUgd2l0aCB0aGUgPHNlbGVjdD4ncyBib3JkZXIu
CiAgICAgICAgIGJ1dHRvblJlY3Quc2V0WShidXR0b25SZWN0LnkoKSAtIHZpc3RhTWVudUxpc3RC
dXR0b25PdXRzZXQpOwogICAgICAgICBidXR0b25SZWN0LnNldEhlaWdodChidXR0b25SZWN0Lmhl
aWdodCgpICsgMiAqIHZpc3RhTWVudUxpc3RCdXR0b25PdXRzZXQpOwpJbmRleDogU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
cmV2aXNpb24gODA2NjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wMy0wOSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5n
QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWloYWkgUGFycGFyaXRhLgorCisg
ICAgICAgIFVuaWZ5IFdpbmRvd3MgdmVyc2lvbiBjaGVja3MuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTk3OQorCisgICAgICAgICogVUlQcm9jZXNz
L3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnN0YW5kYXJkVXNlckFnZW50KToKKwogMjAxMS0wMy0wOSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxn
aGFtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBjb3JyZWN0aW9uLgpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2lu
LmNwcAkocmV2aXNpb24gODA1NzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dl
YlBhZ2VQcm94eVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgInJlc291cmNlLmgiCiAjaW5jbHVkZSA8dGNoYXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1N5c3RlbUluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdDb25jYXRlbmF0ZS5oPgpAQCAtMzYsMzAgKzM3LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgU3RyaW5nIHdpbmRvd3NWZXJzaW9u
KCkKLXsKLSAgIFN0cmluZyBvc1ZlcnNpb247Ci0gICBPU1ZFUlNJT05JTkZPIHZlcnNpb25JbmZv
ID0geyAwIH07Ci0gICB2ZXJzaW9uSW5mby5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKHZl
cnNpb25JbmZvKTsKLSAgIDo6R2V0VmVyc2lvbkV4KCZ2ZXJzaW9uSW5mbyk7Ci0KLSAgIGlmICh2
ZXJzaW9uSW5mby5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MpIHsK
LSAgICAgICBpZiAodmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb24gPT0gNCkgewotICAgICAgICAg
ICBpZiAodmVyc2lvbkluZm8uZHdNaW5vclZlcnNpb24gPT0gMCkKLSAgICAgICAgICAgICAgIG9z
VmVyc2lvbiA9ICJXaW5kb3dzIDk1IjsKLSAgICAgICAgICAgZWxzZSBpZiAodmVyc2lvbkluZm8u
ZHdNaW5vclZlcnNpb24gPT0gMTApCi0gICAgICAgICAgICAgICBvc1ZlcnNpb24gPSAiV2luZG93
cyA5OCI7Ci0gICAgICAgICAgIGVsc2UgaWYgKHZlcnNpb25JbmZvLmR3TWlub3JWZXJzaW9uID09
IDkwKQotICAgICAgICAgICAgICAgb3NWZXJzaW9uID0gIldpbmRvd3MgOTg7IFdpbiA5eCA0Ljkw
IjsKLSAgICAgICB9Ci0gICB9IGVsc2UgaWYgKHZlcnNpb25JbmZvLmR3UGxhdGZvcm1JZCA9PSBW
RVJfUExBVEZPUk1fV0lOMzJfTlQpCi0gICAgICAgb3NWZXJzaW9uID0gbWFrZVN0cmluZygiV2lu
ZG93cyBOVCAiLCBTdHJpbmc6Om51bWJlcih2ZXJzaW9uSW5mby5kd01ham9yVmVyc2lvbiksICcu
JywgU3RyaW5nOjpudW1iZXIodmVyc2lvbkluZm8uZHdNaW5vclZlcnNpb24pKTsKLQotICAgaWYg
KCFvc1ZlcnNpb24ubGVuZ3RoKCkpCi0gICAgICAgb3NWZXJzaW9uID0gbWFrZVN0cmluZygiV2lu
ZG93cyAiLCBTdHJpbmc6Om51bWJlcih2ZXJzaW9uSW5mby5kd01ham9yVmVyc2lvbiksICcuJywg
U3RyaW5nOjpudW1iZXIodmVyc2lvbkluZm8uZHdNaW5vclZlcnNpb24pKTsKLSAgIHJldHVybiBv
c1ZlcnNpb247Ci19Ci0KIHN0YXRpYyBTdHJpbmcgdXNlclZpc2libGVXZWJLaXRWZXJzaW9uU3Ry
aW5nKCkKIHsKICAgICBMUFdTVFIgYnVpbGROdW1iZXJTdHJpbmdQdHI7CkBAIC03MSwxMiArNDgs
MTAgQEAgc3RhdGljIFN0cmluZyB1c2VyVmlzaWJsZVdlYktpdFZlcnNpb25TdAogCiBTdHJpbmcg
V2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9u
TmFtZUZvclVzZXJBZ2VudCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgb3NW
ZXJzaW9uLCAod2luZG93c1ZlcnNpb24oKSkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBvc1ZlcnNpb24sICh3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCkpKTsKICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgd2ViS2l0VmVyc2lvbiwgKHVzZXJWaXNpYmxlV2ViS2l0
VmVyc2lvblN0cmluZygpKSk7CiAKLSAgICBpZiAoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBv
c1ZlcnNpb24sICIpIEFwcGxlV2ViS2l0LyIsIHdlYktpdFZlcnNpb24sICIgKEtIVE1MLCBsaWtl
IEdlY2tvKSIpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJNb3ppbGxhLzUuMCAoIiwgb3NWZXJz
aW9uLCAiKSBBcHBsZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9uLCAiIChLSFRNTCwgbGlrZSBHZWNr
bykgIiwgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKKyAgICByZXR1cm4gbWFrZVN0cmlu
ZygiTW96aWxsYS81LjAgKCIsIG9zVmVyc2lvbiwgIikgQXBwbGVXZWJLaXQvIiwgd2ViS2l0VmVy
c2lvbiwgIiAoS0hUTUwsIGxpa2UgR2Vja28pIiwgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50
LmlzRW1wdHkoKSA/ICIiIDogIiAiLCBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDgw
NjY3KQorKysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTEtMDMtMDkgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE1paGFpIFBhcnBhcml0YS4KKworICAgICAgICBV
bmlmeSBXaW5kb3dzIHZlcnNpb24gY2hlY2tzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU5NzkKKworICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJz
ZXR0aW5ncy5jcHA6CisgICAgICAgICh3ZWJraXRPU1ZlcnNpb24pOgorCiAyMDExLTAzLTA4ICBD
aHJpc3RpYW4gRHl3YW4gIDxjaHJpc3RpYW5AbGFuZWRvLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vic2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAJKHJldmlzaW9uIDgwNTc3KQorKysgU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
NiArMzksOCBAQAogCiAjaWYgT1MoVU5JWCkKICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2Vs
aWYgT1MoV0lORE9XUykKKyNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCiAjZW5kaWYKIAogLyoqCkBA
IC0yMDgsNyArMjEwLDcgQEAgc3RhdGljIFN0cmluZyB3ZWJraXRPU1ZlcnNpb24oKQogICAgIGVs
c2UKICAgICAgICAgdWFPU1ZlcnNpb24gPSBTdHJpbmcoIlVua25vd24iKTsKICNlbGlmIE9TKFdJ
TkRPV1MpCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHVhT1NWZXJzaW9u
LCAoU3RyaW5nKCJXaW5kb3dzIikpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
cmluZywgdWFPU1ZlcnNpb24sICh3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCkpKTsKICNlbHNl
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHVhT1NWZXJzaW9uLCAoU3Ry
aW5nKCJVbmtub3duIikpKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDgw
NjY3KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAxMS0wMy0wOSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWloYWkgUGFycGFyaXRhLgorCisgICAgICAgIFVu
aWZ5IFdpbmRvd3MgdmVyc2lvbiBjaGVja3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NTk3OQorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoK
KyAgICAgICAgKFFXZWJQYWdlOjp1c2VyQWdlbnRGb3JVcmwpOgorCiAyMDExLTAzLTA3ICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENh
cmxzc29uLgpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gODA1Nzcp
CisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNCw2ICsxMDQsOSBAQAogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpZiBkZWZpbmVkIFFfT1NfV0lO
MzIKKyNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCisjZW5kaWYgLy8gUV9PU19XSU4zMgogI2luY2x1
ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIldlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIgog
I2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCkBAIC0zNzcyLDUyICszNzc1LDcgQEAgUVN0cmlu
ZyBRV2ViUGFnZTo6dXNlckFnZW50Rm9yVXJsKGNvbnN0CiAjaWZkZWYgUV9PU19BSVgKICAgICAg
ICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJBSVgiKTsKICNlbGlmIGRl
ZmluZWQgUV9PU19XSU4zMgotCi0gICAgICAgIHN3aXRjaCAoUVN5c0luZm86OldpbmRvd3NWZXJz
aW9uKSB7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86OldWXzMyczoKLSAgICAgICAgICAgIGZpcnN0
UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyAzLjEiKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl85NToKLSAgICAgICAgICAgIGZp
cnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyA5NSIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86OldWXzk4OgotICAgICAgICAgICAg
Zmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIDk4Iik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfTWU6Ci0gICAgICAgICAg
ICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgOTg7IFdpbiA5
eCA0LjkwIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1Zf
TlQ6Ci0gICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldp
bk5UNC4wIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1Zf
MjAwMDoKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgi
V2luZG93cyBOVCA1LjAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFTeXNJ
bmZvOjpXVl9YUDoKLSAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxh
dGluMSgiV2luZG93cyBOVCA1LjEiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFFTeXNJbmZvOjpXVl8yMDAzOgotICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5n
Ojpmcm9tTGF0aW4xKCJXaW5kb3dzIE5UIDUuMiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUVN5c0luZm86OldWX1ZJU1RBOgotICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCAr
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIE5UIDYuMCIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9XSU5ET1dTNzoKLSAgICAgICAgICAgIGZp
cnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyBOVCA2LjEiKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfQ0U6Ci0gICAgICAg
ICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgQ0UiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfQ0VORVQ6Ci0g
ICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3Mg
Q0UgLk5FVCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICBjYXNlIFFTeXNJbmZvOjpX
Vl9DRV81OgotICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCJXaW5kb3dzIENFIDUueCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICBjYXNlIFFT
eXNJbmZvOjpXVl9DRV82OgotICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpm
cm9tTGF0aW4xKCJXaW5kb3dzIENFIDYueCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQorICAgICAgICBmaXJzdFBhcnRUZW1wICs9IHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmco
KTsKICNlbGlmIGRlZmluZWQgUV9PU19EQVJXSU4KICNpZmRlZiBfX2kzODZfXyB8fCBfX3g4Nl82
NF9fCiAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiSW50ZWwg
TWFjIE9TIFgiKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjY3KQorKysgU291
cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTEtMDMtMDkgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE1paGFpIFBhcnBhcml0YS4KKworICAgICAgICBVbmlmeSBXaW5kb3dz
IHZlcnNpb24gY2hlY2tzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTU5NzkKKworICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmll
dzo6c3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKToKKyAgICAgICAgKHdlYktp
dFZlcnNpb25TdHJpbmcpOgorCiAyMDExLTAzLTA3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogU291cmNl
L1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4v
V2ViVmlldy5jcHAJKHJldmlzaW9uIDgwNTc3KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmll
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw2ICsxMjgsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvU2VsZWN0aW9uQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1NpbXBsZUZvbnREYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
eXN0ZW1JbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UeXBpbmdDb21tYW5kLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CkBAIC0xODQsOCArMTg1LDcgQEAgdXNpbmcgSlNDOjpKU0xvY2s7CiBzdGF0aWMg
SE1PRFVMRSBhY2Nlc3NpYmlsaXR5TGliOwogc3RhdGljIEhhc2hTZXQ8V2ViVmlldyo+IHBlbmRp
bmdEZWxldGVCYWNraW5nU3RvcmVTZXQ7CiAKLXN0YXRpYyBTdHJpbmcgb3NWZXJzaW9uKCk7Ci1z
dGF0aWMgU3RyaW5nIHdlYktpdFZlcnNpb24oKTsKK3N0YXRpYyBTdHJpbmcgd2ViS2l0VmVyc2lv
blN0cmluZygpOwogCiBXZWJWaWV3KiBraXQoUGFnZSogcGFnZSkKIHsKQEAgLTEyNDQsOSArMTI0
NCwxMCBAQCBib29sIFdlYlZpZXc6OmNhbkhhbmRsZVJlcXVlc3QoY29uc3QgV2ViCiAKIFN0cmlu
ZyBXZWJWaWV3OjpzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoY29uc3QgU3Ry
aW5nJiBhcHBsaWNhdGlvbk5hbWUpCiB7Ci0gICAgaWYgKGFwcGxpY2F0aW9uTmFtZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJNb3ppbGxhLzUuMCAoIiwgb3NWZXJzaW9u
KCksICIpIEFwcGxlV2ViS2l0LyIsIHdlYktpdFZlcnNpb24oKSwgIiAoS0hUTUwsIGxpa2UgR2Vj
a28pIik7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBvc1ZlcnNpb24o
KSwgIikgQXBwbGVXZWJLaXQvIiwgd2ViS2l0VmVyc2lvbigpLCAiIChLSFRNTCwgbGlrZSBHZWNr
bykgIiwgYXBwbGljYXRpb25OYW1lKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
b3NWZXJzaW9uLCAod2luZG93c1ZlcnNpb25Gb3JVQVN0cmluZygpKSk7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIHdlYktpdFZlcnNpb24sICh3ZWJLaXRWZXJzaW9uU3RyaW5nKCkp
KTsKKworICAgIHJldHVybiBtYWtlU3RyaW5nKCJNb3ppbGxhLzUuMCAoIiwgb3NWZXJzaW9uLCAi
KSBBcHBsZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9uLCAiIChLSFRNTCwgbGlrZSBHZWNrbykiLCBh
cHBsaWNhdGlvbk5hbWUuaXNFbXB0eSgpID8gIiIgOiAiICIsIGFwcGxpY2F0aW9uTmFtZSk7CiB9
CiAKIFBhZ2UqIFdlYlZpZXc6OnBhZ2UoKQpAQCAtMjMzNiwzMSArMjMzNyw3IEBAIGJvb2wgV2Vi
Vmlldzo6ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpIGMKICNlbmRpZgogfQogCi1zdGF0aWMgU3Ry
aW5nIG9zVmVyc2lvbigpCi17Ci0gICAgU3RyaW5nIG9zVmVyc2lvbjsKLSAgICBPU1ZFUlNJT05J
TkZPIHZlcnNpb25JbmZvID0gezB9OwotICAgIHZlcnNpb25JbmZvLmR3T1NWZXJzaW9uSW5mb1Np
emUgPSBzaXplb2YodmVyc2lvbkluZm8pOwotICAgIEdldFZlcnNpb25FeCgmdmVyc2lvbkluZm8p
OwotCi0gICAgaWYgKHZlcnNpb25JbmZvLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lO
MzJfV0lORE9XUykgewotICAgICAgICBpZiAodmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb24gPT0g
NCkgewotICAgICAgICAgICAgaWYgKHZlcnNpb25JbmZvLmR3TWlub3JWZXJzaW9uID09IDApCi0g
ICAgICAgICAgICAgICAgb3NWZXJzaW9uID0gIldpbmRvd3MgOTUiOwotICAgICAgICAgICAgZWxz
ZSBpZiAodmVyc2lvbkluZm8uZHdNaW5vclZlcnNpb24gPT0gMTApCi0gICAgICAgICAgICAgICAg
b3NWZXJzaW9uID0gIldpbmRvd3MgOTgiOwotICAgICAgICAgICAgZWxzZSBpZiAodmVyc2lvbklu
Zm8uZHdNaW5vclZlcnNpb24gPT0gOTApCi0gICAgICAgICAgICAgICAgb3NWZXJzaW9uID0gIldp
bmRvd3MgOTg7IFdpbiA5eCA0LjkwIjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodmVyc2lv
bkluZm8uZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVCkKLSAgICAgICAgb3NW
ZXJzaW9uID0gbWFrZVN0cmluZygiV2luZG93cyBOVCAiLCBTdHJpbmc6Om51bWJlcih2ZXJzaW9u
SW5mby5kd01ham9yVmVyc2lvbiksICcuJywgU3RyaW5nOjpudW1iZXIodmVyc2lvbkluZm8uZHdN
aW5vclZlcnNpb24pKTsKLQotICAgIGlmICghb3NWZXJzaW9uLmxlbmd0aCgpKQotICAgICAgICBv
c1ZlcnNpb24gPSBtYWtlU3RyaW5nKCJXaW5kb3dzICIsIFN0cmluZzo6bnVtYmVyKHZlcnNpb25J
bmZvLmR3TWFqb3JWZXJzaW9uKSwgJy4nLCBTdHJpbmc6Om51bWJlcih2ZXJzaW9uSW5mby5kd01p
bm9yVmVyc2lvbikpOwotICAgIHJldHVybiBvc1ZlcnNpb247Ci19Ci0KLXN0YXRpYyBTdHJpbmcg
d2ViS2l0VmVyc2lvbigpCitzdGF0aWMgU3RyaW5nIHdlYktpdFZlcnNpb25TdHJpbmcoKQogewog
ICAgIExQV1NUUiBidWlsZE51bWJlclN0cmluZ1B0cjsKICAgICBpZiAoITo6TG9hZFN0cmluZ1co
Z0luc3RhbmNlLCBCVUlMRF9OVU1CRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmYnVpbGRO
dW1iZXJTdHJpbmdQdHIpLCAwKSB8fCAhYnVpbGROdW1iZXJTdHJpbmdQdHIpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>