<?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>14967</bug_id>
          
          <creation_ts>2007-08-14 13:06:02 -0700</creation_ts>
          <short_desc>Reduce wtf::Vector::operator[]() overloads and eliminate unsafe auto-cast operator</short_desc>
          <delta_ts>2007-08-25 07:08:59 -0700</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>523.x (Safari 3)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Kasting">pkasting</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mrowe</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2314</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-14 13:06:02 -0700</bug_when>
    <thetext>Vector.h provides an at(size_t) accessor and a series of operator[]()s, all of which call at(), but none of which take a size_t.  On Windows 64-bit, where size_t is a 64-bit type, this results in compiler warnings when calling Vector[size_t].

It used to be the case that operator[]() _did_ take a size_t, and, ironically, this was changed to eliminate Windows compiler warnings.  But the change was the wrong fix: the actual problem at the time (I think, from inspection of the original source) was that there was also an overload which took an int, meaning that promotion from shorter types was ambiguous.

Inspection of the STL headers suggested that providing only a size_t version should always be safe (which makes sense; it should be at least as large a type as almost any parameter a caller would actually provide, so autopromotion should work OK).  After writing an initial patch to do this, I discovered that another, scary operator was causing overload resolution ambiguity: operator T*().  This allows callers to treat Vectors directly as pointers.  I consider this scary since it can result in silent conversion to bool in ways callers don&apos;t expect.  On IRC, Maciej also noted that this operator was &quot;questionable&quot;.

So, I have a patch that eliminates this operator as well, and changes all callers who depended on it to doing the right thing (which usually meant adding a call to &quot;.data()&quot;).  This shouldn&apos;t make any code slower as operator T* was just an inline call to data() anyway.

I have successfully compiled this patch on Windows without any compiler warnings.  Still need someone to test it on Mac.  Will attach the patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2309</commentid>
    <comment_count>1</comment_count>
      <attachid>15969</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-14 13:54:58 -0700</bug_when>
    <thetext>Created attachment 15969
patch v1

No ChangeLog in this patch because for some reason the WebKit scripts are giving me problems with DOS vs. UNIX line endings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2310</commentid>
    <comment_count>2</comment_count>
      <attachid>15970</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-14 14:43:44 -0700</bug_when>
    <thetext>Created attachment 15970
patch v2

Somehow I seem to have missed one of the spots in FrameView.cpp without getting warned about it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2306</commentid>
    <comment_count>3</comment_count>
      <attachid>15969</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-08-14 15:04:42 -0700</bug_when>
    <thetext>Comment on attachment 15969
patch v1

-            if (!plugin-&gt;mimes)
+            if (plugin-&gt;mimes.isEmpty())

This looks like an actual minor bug fix, not just a compile fix.

-    if (!d-&gt;m_scheduledEvents)
+    if (d-&gt;m_scheduledEvents.isEmpty())
         return;

As does this.

The WebKitTools/Scripts/svn-create-patch change seems good, but doesn&apos;t belong in this patch.

The safest way to land this change is to land all the obvious .data() changes first, then look more closely at the smaller remaining bits.

I&apos;d like to hear Maciej&apos;s thoughts on getting rid of the default conversion functions. I was never a fan of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2300</commentid>
    <comment_count>4</comment_count>
      <attachid>15971</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-14 15:45:03 -0700</bug_when>
    <thetext>Created attachment 15971
patch v3

This version of the patch should compile on a Mac as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2301</commentid>
    <comment_count>5</comment_count>
      <attachid>15972</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-14 15:51:49 -0700</bug_when>
    <thetext>Created attachment 15972
partial (safe) patch v1

Sorry about the svn-create-patch changes... hadn&apos;t meant that to be involved in this bug at all.  Oops.

Per Darin&apos;s suggestion, this patch should hopefully contain just changes that add &quot;.data()&quot;, which was the majority of the original patch.  This should be easy to quickly r+ and land, and then I can attach a much smaller patch that&apos;s the more review-worthy stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2302</commentid>
    <comment_count>6</comment_count>
      <attachid>15972</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-08-14 15:56:52 -0700</bug_when>
    <thetext>Comment on attachment 15972
partial (safe) patch v1

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2295</commentid>
    <comment_count>7</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-14 17:20:58 -0700</bug_when>
    <thetext>Since I&apos;m having problems with prepare-ChangeLog ATM, the relevant details for someone landing this are:

patch by Peter Kasting &lt;zerodpx@gmail.org&gt;, reviewed by Darin
http://bugs.webkit.org/show_bug.cgi?id=14967 part 1 - Eliminate most implicit conversions of wtf::Vector&lt;T&gt; to T* by explicitly calling .data().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2291</commentid>
    <comment_count>8</comment_count>
      <attachid>15972</attachid>
    <who name="Andrew Wellington">andrew</who>
    <bug_when>2007-08-14 18:15:02 -0700</bug_when>
    <thetext>Comment on attachment 15972
partial (safe) patch v1

Removing review flag (patch landed in r25085)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2289</commentid>
    <comment_count>9</comment_count>
      <attachid>15974</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-14 19:54:21 -0700</bug_when>
    <thetext>Created attachment 15974
Remaining patch v1

Now that the large, obviously safe portion of this patch has landed, here&apos;s the remainder of the original v3 patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2168</commentid>
    <comment_count>10</comment_count>
      <attachid>15997</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-16 11:04:35 -0700</bug_when>
    <thetext>Created attachment 15997
Remove all remaining bits of operator T*

At Maciej&apos;s request, splitting the previous final patch into two pieces, this one to complete removal of the auto-cast operator T*(), and an upcoming one to do the then-safe reduction of the operator[]() overloads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2165</commentid>
    <comment_count>11</comment_count>
      <attachid>15998</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-16 11:05:30 -0700</bug_when>
    <thetext>Created attachment 15998
Reduce operator[] overloads

This is safe to land once the patch above it lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2065</commentid>
    <comment_count>12</comment_count>
      <attachid>15997</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-08-17 23:20:53 -0700</bug_when>
    <thetext>Comment on attachment 15997
Remove all remaining bits of operator T*

Looks good. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2066</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-08-17 23:24:01 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 15997 [edit])
&gt; Looks good. r=me.
&gt; 

It does need a ChangeLog entry though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2057</commentid>
    <comment_count>14</comment_count>
      <attachid>15998</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-08-17 23:38:27 -0700</bug_when>
    <thetext>Comment on attachment 15998
Reduce operator[] overloads

Have you tested this change on the Mac to verify that no warnings are introduced?  A ChangeLog entry is also needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2058</commentid>
    <comment_count>15</comment_count>
      <attachid>15997</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-08-17 23:40:56 -0700</bug_when>
    <thetext>Comment on attachment 15997
Remove all remaining bits of operator T*

Marking r- for now as this can&apos;t be landed without a changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2054</commentid>
    <comment_count>16</comment_count>
      <attachid>15997</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-18 00:17:24 -0700</bug_when>
    <thetext>Comment on attachment 15997
Remove all remaining bits of operator T*

I tested on a friend&apos;s Mac to ensure that the compile succeeded.  I wasn&apos;t really able to see whether any new warnings were issued.  If someone else could check that that would be great.  That said, this is how the STL does things, so I suspect it&apos;s OK.

As mentioned previously, I&apos;m having problems getting prepare-ChangeLog to work for me.  Here&apos;s a ChangeLog entry someone landing this patch could use:

patch by Peter Kasting &lt;zerodpx@gmail.org&gt;, reviewed by Sam Weinig
http://bugs.webkit.org/show_bug.cgi?id=14967 part 2 - Eliminate all remaining
implicit conversions of wtf::Vector&lt;T&gt; to T*.  Where code was previously checking that the Vector&apos;s data pointer was non-NULL, check !Vector::isEmpty() instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2052</commentid>
    <comment_count>17</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-08-18 00:21:36 -0700</bug_when>
    <thetext>What&apos;s wrong with prepare-ChangeLog?  It&apos;s working fine for everyone else on Windows, Mac and Linux using both SVN and git.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2053</commentid>
    <comment_count>18</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-18 00:33:50 -0700</bug_when>
    <thetext>It&apos;s having trouble with my particular corporate Cygwin/SVN setup, which has a lot of DOS CR/LFs creeping into places where it only expects LFs.  I have a local patch that fixes this for svn-create-patch (which accidentally snuck into the &quot;patch v3&quot; attachment above), but I haven&apos;t figured out the equivalent spot to path in prepare-changeLog.

Basically, it results in the filenames passed to svn having extra CRs on the ends, which leads to svn being confused and aborting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2025</commentid>
    <comment_count>19</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-08-18 14:30:09 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; It&apos;s having trouble with my particular corporate Cygwin/SVN setup, which has a
&gt; lot of DOS CR/LFs creeping into places where it only expects LFs.

Sounds like the CR/LF line endings setting for Cygwin is different than expected (for the Perl scripts).

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2018</commentid>
    <comment_count>20</comment_count>
      <attachid>15997</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-08-18 16:57:50 -0700</bug_when>
    <thetext>Comment on attachment 15997
Remove all remaining bits of operator T*

Did you do any testing to make sure that non-Mac platforms still build with this patch?

If so, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2007</commentid>
    <comment_count>21</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-18 19:30:46 -0700</bug_when>
    <thetext>I&apos;ve tested Windows and Mac, but I don&apos;t have the ability to build other platforms beyond that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1960</commentid>
    <comment_count>22</comment_count>
      <attachid>15998</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-08-19 13:11:19 -0700</bug_when>
    <thetext>Comment on attachment 15998
Reduce operator[] overloads

r=me

Anyone landing this please note ChangeLog entry in bug comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574</commentid>
    <comment_count>23</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-23 11:17:02 -0700</bug_when>
    <thetext>Resummarizing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1485</commentid>
    <comment_count>24</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-08-25 07:08:59 -0700</bug_when>
    <thetext>Landed in r25240 and r25241.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15969</attachid>
            <date>2007-08-14 13:54:58 -0700</date>
            <delta_ts>2007-08-14 15:45:03 -0700</delta_ts>
            <desc>patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19448</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDI1MDcxKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgSlNPYmplY3QqIEpTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvcjo6Y29uc3RydQogICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdG9S
ZWYoYXJnc1tpXSk7CiAgICAgICAgICAgICAKICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzOwotICAgICAgICByZXR1cm4gdG9KUyhtX2NhbGxiYWNrKGN0eCwgdGhpc1Jl
ZiwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkp
KSk7CisgICAgICAgIHJldHVybiB0b0pTKG1fY2FsbGJhY2soY3R4LCB0aGlzUmVmLCBhcmd1bWVu
dENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkpKSk7
CiAgICAgfQogICAgIAogICAgIHJldHVybiB0b0pTKEpTT2JqZWN0TWFrZShjdHgsIG1fY2xhc3Ms
IDApKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJ
KHJldmlzaW9uIDI1MDcxKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgSlNWYWx1ZSogSlNDYWxsYmFj
a0Z1bmN0aW9uOjpjYWxsQXNGdW5jdAogICAgICAgICBhcmd1bWVudHNbaV0gPSB0b1JlZihhcmdz
W2ldKTsKIAogICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKLSAgICByZXR1
cm4gdG9KUyhtX2NhbGxiYWNrKGV4ZWNSZWYsIHRoaXNSZWYsIHRoaXNPYmpSZWYsIGFyZ3VtZW50
Q291bnQsIGFyZ3VtZW50cywgdG9SZWYoZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSkpOworICAgIHJl
dHVybiB0b0pTKG1fY2FsbGJhY2soZXhlY1JlZiwgdGhpc1JlZiwgdGhpc09ialJlZiwgYXJndW1l
bnRDb3VudCwgYXJndW1lbnRzLmRhdGEoKSwgdG9SZWYoZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBLSlMKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjUwNzEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQCBK
U09iamVjdCogSlNDYWxsYmFja09iamVjdDo6Y29uc3RydWN0KEV4CiAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7IGkrKykKICAgICAgICAgICAgICAgICBhcmd1
bWVudHNbaV0gPSB0b1JlZihhcmdzW2ldKTsKICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrczsKLSAgICAgICAgICAgIHJldHVybiB0b0pTKGNhbGxBc0NvbnN0cnVj
dG9yKGV4ZWNSZWYsIHRoaXNSZWYsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgdG9SZWYoZXhl
Yy0+ZXhjZXB0aW9uU2xvdCgpKSkpOworICAgICAgICAgICAgcmV0dXJuIHRvSlMoY2FsbEFzQ29u
c3RydWN0b3IoZXhlY1JlZiwgdGhpc1JlZiwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLmRhdGEo
KSwgdG9SZWYoZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSkpOwogICAgICAgICB9CiAgICAgfQogICAg
IApAQCAtMjkyLDcgKzI5Miw3IEBAIEpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q6OmNhbGxBc0Z1
bmN0aW8KICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgaSsr
KQogICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IHRvUmVmKGFyZ3NbaV0pOwogICAgICAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwotICAgICAgICAgICAgcmV0
dXJuIHRvSlMoY2FsbEFzRnVuY3Rpb24oZXhlY1JlZiwgdGhpc1JlZiwgdGhpc09ialJlZiwgYXJn
dW1lbnRDb3VudCwgYXJndW1lbnRzLCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkpKSk7Cisg
ICAgICAgICAgICByZXR1cm4gdG9KUyhjYWxsQXNGdW5jdGlvbihleGVjUmVmLCB0aGlzUmVmLCB0
aGlzT2JqUmVmLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCB0b1JlZihleGVjLT5l
eGNlcHRpb25TbG90KCkpKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL2MvY19pbnN0YW5jZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNTA3MSkKKysrIEphdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL2MvY19pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MSw3ICsxMDEsNyBAQCBKU1ZhbHVlKiBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhCiAK
ICAgICB7CiAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwotICAgICAg
ICBfb2JqZWN0LT5fY2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVudCwgY0FyZ3MsIGNvdW50LCAm
cmVzdWx0VmFyaWFudCk7CisgICAgICAgIF9vYmplY3QtPl9jbGFzcy0+aW52b2tlKF9vYmplY3Qs
IGlkZW50LCBjQXJncy5kYXRhKCksIGNvdW50LCAmcmVzdWx0VmFyaWFudCk7CiAgICAgfQogCiAg
ICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCkBAIC0xMzAsNyArMTMwLDcgQEAgSlNWYWx1
ZSogQ0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKAogICAgIFZPSURfVE9fTlBWQVJJQU5U
KHJlc3VsdFZhcmlhbnQpOwogICAgIHsKICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3M7Ci0gICAgICAgIF9vYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChfb2JqZWN0
LCBjQXJncywgY291bnQsICZyZXN1bHRWYXJpYW50KTsKKyAgICAgICAgX29iamVjdC0+X2NsYXNz
LT5pbnZva2VEZWZhdWx0KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJp
YW50KTsKICAgICB9CiAgICAgCiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHANCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysg
SmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NiwxMyArODYsMTMgQEAgc3RhdGljIFVTdHJpbmcgaW50ZWdlcl9wYXJ0X25vZXhwKGRvdWJsZQog
ICAgICAgICBWZWN0b3I8Y2hhciwgMTAyND4gYnVmKGRlY2ltYWxQb2ludCArIDEpOwogICAgICAg
ICAKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSA8PSBkZWNpbWFsUG9pbnQp
IHsKLSAgICAgICAgICAgIHN0cmNweShidWYsIHJlc3VsdCk7Ci0gICAgICAgICAgICBtZW1zZXQo
YnVmICsgbGVuZ3RoLCAnMCcsIGRlY2ltYWxQb2ludCAtIGxlbmd0aCk7CisgICAgICAgICAgICBz
dHJjcHkoYnVmLmRhdGEoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIG1lbXNldChidWYuZGF0YSgp
ICsgbGVuZ3RoLCAnMCcsIGRlY2ltYWxQb2ludCAtIGxlbmd0aCk7CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgc3RybmNweShidWYsIHJlc3VsdCwgZGVjaW1hbFBvaW50KTsKKyAgICAgICAg
ICAgIHN0cm5jcHkoYnVmLmRhdGEoKSwgcmVzdWx0LCBkZWNpbWFsUG9pbnQpOwogICAgICAgICAK
ICAgICAgICAgYnVmW2RlY2ltYWxQb2ludF0gPSAnXDAnOwotICAgICAgICBzdHIgKz0gVVN0cmlu
ZyhidWYpOworICAgICAgICBzdHIgKz0gVVN0cmluZyhidWYuZGF0YSgpKTsKICAgICB9CiAgICAg
CiAgICAga2pzX2ZyZWVkdG9hKHJlc3VsdCk7CkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIFVT
dHJpbmcgY2hhcl9zZXF1ZW5jZShjaGFyIGMsIGludAogICAgIFZlY3RvcjxjaGFyLCAyMDQ4PiBi
dWYoY291bnQgKyAxLCBjKTsKICAgICBidWZbY291bnRdID0gJ1wwJzsKIAotICAgIHJldHVybiBV
U3RyaW5nKGJ1Zik7CisgICAgcmV0dXJuIFVTdHJpbmcoYnVmLmRhdGEoKSk7CiB9CiAKIHN0YXRp
YyBkb3VibGUgaW50UG93MTAoaW50IGUpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvdXN0cmlu
Zy5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvdXN0cmluZy5jcHAJKHJl
dmlzaW9uIDI1MDcxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzk2LDcgKzEzOTYsNyBAQCBDU3RyaW5nIFVTdHJpbmc6OlVURjhTdHJpbmco
KSBjb25zdAogICB9CiAKICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgYXMgYSBDIHN0cmluZy4KLSAg
Q1N0cmluZyByZXN1bHQoYnVmZmVyLCBwIC0gYnVmZmVyKTsKKyAgQ1N0cmluZyByZXN1bHQoYnVm
ZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkpOwogCiAgIHJldHVybiByZXN1bHQ7CiB9Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBKYXZhU2Ny
aXB0Q29yZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDI1MDcxKQorKysgSmF2YVNjcmlwdENvcmUv
d3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsMjMgKzQwNywxMSBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgICAgIHJldHVybiBtX2ltcGwuYnVmZmVyKClbaV07IAogICAgICAg
ICB9CiAKLSAgICAgICAgVCYgb3BlcmF0b3JbXShsb25nIGkpIHsgcmV0dXJuIGF0KGkpOyB9Ci0g
ICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10obG9uZyBpKSBjb25zdCB7IHJldHVybiBhdChpKTsg
fQotICAgICAgICBUJiBvcGVyYXRvcltdKHVuc2lnbmVkIGxvbmcgaSkgeyByZXR1cm4gYXQoaSk7
IH0KLSAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBsb25nIGkpIGNvbnN0IHsg
cmV0dXJuIGF0KGkpOyB9Ci0gICAgICAgIFQmIG9wZXJhdG9yW10oaW50IGkpIHsgcmV0dXJuIGF0
KGkpOyB9Ci0gICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0IHsgcmV0dXJu
IGF0KGkpOyB9Ci0gICAgICAgIFQmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgeyByZXR1cm4gYXQo
aSk7IH0KLSAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiBhdChpKTsgfQotICAgICAgICBUJiBvcGVyYXRvcltdKHNob3J0IGkpIHsgcmV0dXJuIGF0
KGkpOyB9Ci0gICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2hvcnQgaSkgY29uc3QgeyByZXR1
cm4gYXQoaSk7IH0KLSAgICAgICAgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBzaG9ydCBpKSB7IHJl
dHVybiBhdChpKTsgfQotICAgICAgICBjb25zdCBUJiBvcGVyYXRvcltdKHVuc2lnbmVkIHNob3J0
IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CisgICAgICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90
IGkpIHsgcmV0dXJuIGF0KGkpOyB9CisgICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90
IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAKICAgICAgICAgVCogZGF0YSgpIHsgcmV0dXJu
IG1faW1wbC5idWZmZXIoKTsgfQogICAgICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsLmJ1ZmZlcigpOyB9Ci0gICAgICAgIG9wZXJhdG9yIFQqKCkgeyByZXR1cm4gZGF0
YSgpOyB9Ci0gICAgICAgIG9wZXJhdG9yIGNvbnN0IFQqKCkgY29uc3QgeyByZXR1cm4gZGF0YSgp
OyB9CiAKICAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0KICAgICAg
ICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gYmVnaW4oKSArIG1fc2l6ZTsgfQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2
LDcgKzIzNiw3IEBAIHZvaWQgUGx1Z2luQmFzZTo6Y2FjaGVQbHVnaW5EYXRhSWZOZWNlc3MKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcGx1Z2lu
cy0+YXBwZW5kKHBsdWdpbik7Ci0gICAgICAgICAgICBpZiAoIXBsdWdpbi0+bWltZXMpCisgICAg
ICAgICAgICBpZiAocGx1Z2luLT5taW1lcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46
Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbi0+bWltZXMuZW5kKCk7CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMjUwNzEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsNyArMjgwLDcgQEAgYm9vbCBI
VE1MU2VsZWN0RWxlbWVudDo6c2F2ZVN0YXRlKFN0cmluZwogICAgICAgICBib29sIHNlbGVjdGVk
ID0gZS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQqPihlKS0+c2VsZWN0ZWQoKTsKICAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHNlbGVjdGVk
ID8gJ1gnIDogJy4nOwogICAgIH0KLSAgICB2YWx1ZSA9IFN0cmluZyhjaGFyYWN0ZXJzLCBsKTsK
KyAgICB2YWx1ZSA9IFN0cmluZyhjaGFyYWN0ZXJzLmRhdGEoKSwgbCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysgV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBG
cmFtZVZpZXc6On5GcmFtZVZpZXcoKQogICAgIHJlc2V0U2Nyb2xsYmFycygpOwogCiAgICAgQVNT
RVJUKG1fcmVmQ291bnQgPT0gMCk7Ci0gICAgQVNTRVJUKCghZC0+bV9zY2hlZHVsZWRFdmVudHMg
fHwgZC0+bV9zY2hlZHVsZWRFdmVudHMuaXNFbXB0eSgpKSAmJiAhZC0+bV9lbnF1ZXVlRXZlbnRz
KTsKKyAgICBBU1NFUlQoZC0+bV9zY2hlZHVsZWRFdmVudHMuaXNFbXB0eSgpICYmICFkLT5tX2Vu
cXVldWVFdmVudHMpOwogCiAgICAgaWYgKG1fZnJhbWUpIHsKICAgICAgICAgQVNTRVJUKG1fZnJh
bWUtPnZpZXcoKSAhPSB0aGlzIHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpIHx8ICFtX2ZyYW1lLT5k
b2N1bWVudCgpLT5yZW5kZXJlcigpKTsKQEAgLTc5MCw3ICs3OTAsNyBAQCB2b2lkIEZyYW1lVmll
dzo6cmVzdW1lU2NoZWR1bGVkRXZlbnRzKCkKICAgICBkLT5tX2VucXVldWVFdmVudHMtLTsKICAg
ICBpZiAoIWQtPm1fZW5xdWV1ZUV2ZW50cykKICAgICAgICAgZGlzcGF0Y2hTY2hlZHVsZWRFdmVu
dHMoKTsKLSAgICBBU1NFUlQoIWQtPm1fc2NoZWR1bGVkRXZlbnRzIHx8IGQtPm1fc2NoZWR1bGVk
RXZlbnRzLmlzRW1wdHkoKSB8fCBkLT5tX2VucXVldWVFdmVudHMpOworICAgIEFTU0VSVChkLT5t
X3NjaGVkdWxlZEV2ZW50cy5pc0VtcHR5KCkgfHwgZC0+bV9lbnF1ZXVlRXZlbnRzKTsKIH0KIAog
dm9pZCBGcmFtZVZpZXc6OnVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9yaXpvbnRhbE92ZXJm
bG93LCBib29sIHZlcnRpY2FsT3ZlcmZsb3cpCkBAIC04MjEsNyArODIxLDcgQEAgdm9pZCBGcmFt
ZVZpZXc6OnVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvbwogCiB2b2lkIEZyYW1lVmlldzo6ZGlzcGF0
Y2hTY2hlZHVsZWRFdmVudHMoKQogewotICAgIGlmICghZC0+bV9zY2hlZHVsZWRFdmVudHMpCisg
ICAgaWYgKGQtPm1fc2NoZWR1bGVkRXZlbnRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIFZlY3RvcjxTY2hlZHVsZWRFdmVudCo+IHNjaGVkdWxlZEV2ZW50c0NvcHkgPSBk
LT5tX3NjaGVkdWxlZEV2ZW50czsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHANCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCShyZXZpc2lvbiAyNTA3MSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsy
NDEsNyBAQCBLVVJMOjpLVVJMKGNvbnN0IGNoYXIgKnVybCkKICAgICAgICAgYnVmZmVyWzNdID0g
J2UnOwogICAgICAgICBidWZmZXJbNF0gPSAnOic7CiAgICAgICAgIG1lbWNweSgmYnVmZmVyWzVd
LCB1cmwsIHVybExlbmd0aCk7Ci0gICAgICAgIHBhcnNlKGJ1ZmZlciwgMCk7CisgICAgICAgIHBh
cnNlKGJ1ZmZlci5kYXRhKCksIDApOwogICAgIH0gZWxzZQogICAgICAgICBwYXJzZSh1cmwsIDAp
OwogfQpAQCAtMjU3LDcgKzI1Nyw3IEBAIEtVUkw6OktVUkwoY29uc3QgRGVwcmVjYXRlZFN0cmlu
ZyAmdXJsKQogICAgICAgICBidWZmZXJbM10gPSAnZSc7CiAgICAgICAgIGJ1ZmZlcls0XSA9ICc6
JzsKICAgICAgICAgdXJsLmNvcHlMYXRpbjEoJmJ1ZmZlcls1XSk7Ci0gICAgICAgIHBhcnNlKGJ1
ZmZlciwgMCk7CisgICAgICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksIDApOwogICAgIH0gZWxzZQog
ICAgICAgICBwYXJzZSh1cmwuYXNjaWkoKSwgJnVybCk7CiB9CkBAIC00MDUsNyArNDA1LDcgQEAg
dm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IAogICAgICAgICAgICAgICAg
IC8vIEJhc2UgcGFydCBwbHVzIHJlbGF0aXZlIHBhcnQgcGx1cyBvbmUgcG9zc2libGUgc2xhc2gg
YWRkZWQgaW4gYmV0d2VlbiBwbHVzIHRlcm1pbmF0aW5nIFwwIGJ5dGUuCiAgICAgICAgICAgICAg
ICAgVmVjdG9yPGNoYXIsIDIwNDg+IGJ1ZmZlcihiYXNlLnBhdGhFbmRQb3MgKyAxICsgc3RybGVu
KHN0cikgKyAxKTsKIAotICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlclBvcyA9IGJ1ZmZlcjsK
KyAgICAgICAgICAgICAgICBjaGFyICpidWZmZXJQb3MgPSBidWZmZXIuZGF0YSgpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNvcHkgZXZlcnl0aGluZyBiZWZv
cmUgdGhlIHBhdGggZnJvbSB0aGUgYmFzZQogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJh
c2VTdHJpbmcgPSBiYXNlLnVybFN0cmluZy5hc2NpaSgpOwpAQCAtNDczLDkgKzQ3Myw5IEBAIHZv
aWQgS1VSTDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25zdCAKICAgICAgICAgICAgICAgICAv
LyBvZiB0aGUgcmVsYXRpdmUgcmVmZXJlbmNlOyB0aGlzIHdpbGwgYWxzbyBhZGQgYSBudWxsIHRl
cm1pbmF0b3IKICAgICAgICAgICAgICAgICBzdHJjcHkoYnVmZmVyUG9zLCByZWxTdHJpbmdQb3Mp
OwogCi0gICAgICAgICAgICAgICAgcGFyc2UoYnVmZmVyLCAwKTsKKyAgICAgICAgICAgICAgICBw
YXJzZShidWZmZXIuZGF0YSgpLCAwKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoc3RybGVuKGJ1ZmZlcikgKyAxIDw9IGJ1ZmZlci5zaXplKCkpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChzdHJsZW4oYnVmZmVyLmRhdGEoKSkgKyAxIDw9IGJ1ZmZlci5zaXplKCkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC03
ODgsMTggKzc4OCwxOCBAQCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29u
CiAgICAgICAgIGludCBlbmNvZGVkUnVuTGVuZ3RoID0gZW5jb2RlZFJ1bkVuZCAtIGVuY29kZWRS
dW5Qb3NpdGlvbjsKICAgICAgICAgYnVmZmVyLmNsZWFyKCk7CiAgICAgICAgIGJ1ZmZlci5yZXNp
emUoZW5jb2RlZFJ1bkxlbmd0aCArIDEpOwotICAgICAgICB1cmxTdHJpbmcuY29weUxhdGluMShi
dWZmZXIsIGVuY29kZWRSdW5Qb3NpdGlvbiwgZW5jb2RlZFJ1bkxlbmd0aCk7CisgICAgICAgIHVy
bFN0cmluZy5jb3B5TGF0aW4xKGJ1ZmZlci5kYXRhKCksIGVuY29kZWRSdW5Qb3NpdGlvbiwgZW5j
b2RlZFJ1bkxlbmd0aCk7CiAKICAgICAgICAgLy8gRGVjb2RlIHRoZSAlLWVzY2FwZXMgaW50byBi
eXRlcy4KLSAgICAgICAgY2hhciAqcCA9IGJ1ZmZlcjsKLSAgICAgICAgY29uc3QgY2hhciAqcSA9
IGJ1ZmZlcjsKKyAgICAgICAgY2hhciAqcCA9IGJ1ZmZlci5kYXRhKCk7CisgICAgICAgIGNvbnN0
IGNoYXIgKnEgPSBidWZmZXIuZGF0YSgpOwogICAgICAgICB3aGlsZSAoKnEpIHsKICAgICAgICAg
ICAgICpwKysgPSAoaGV4RGlnaXRWYWx1ZShxWzFdKSA8PCA0KSB8IGhleERpZ2l0VmFsdWUocVsy
XSk7CiAgICAgICAgICAgICBxICs9IDM7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBEZWNvZGUg
dGhlIGJ5dGVzIGludG8gVW5pY29kZSBjaGFyYWN0ZXJzLgotICAgICAgICBTdHJpbmcgZGVjb2Rl
ZCA9IChlbmNvZGluZy5pc1ZhbGlkKCkgPyBlbmNvZGluZyA6IFVURjhFbmNvZGluZygpKS5kZWNv
ZGUoYnVmZmVyLCBwIC0gYnVmZmVyKTsKKyAgICAgICAgU3RyaW5nIGRlY29kZWQgPSAoZW5jb2Rp
bmcuaXNWYWxpZCgpID8gZW5jb2RpbmcgOiBVVEY4RW5jb2RpbmcoKSkuZGVjb2RlKGJ1ZmZlci5k
YXRhKCksIHAgLSBidWZmZXIuZGF0YSgpKTsKICAgICAgICAgaWYgKGRlY29kZWQuaXNFbXB0eSgp
KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTExMDYsNyArMTEwNiw3IEBAIHZvaWQgS1VS
TDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKIAogICAgIFZlY3RvcjxjaGFyLCA0MDk2
PiBidWZmZXIoZnJhZ21lbnRFbmQgKiAzICsgMSk7CiAKLSAgICBjaGFyICpwID0gYnVmZmVyOwor
ICAgIGNoYXIgKnAgPSBidWZmZXIuZGF0YSgpOwogICAgIGNvbnN0IGNoYXIgKnN0clB0ciA9IHVy
bDsKIAogICAgIC8vIGNvcHkgaW4gdGhlIHNjaGVtZQpAQCAtMTExNCw3ICsxMTE0LDcgQEAgdm9p
ZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgIHdoaWxlIChzdHJQdHIg
PCBzY2hlbWVFbmRQdHIpIHsKICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsKICAgICB9Ci0gICAg
c2NoZW1lRW5kUG9zID0gcCAtIGJ1ZmZlcjsKKyAgICBzY2hlbWVFbmRQb3MgPSBwIC0gYnVmZmVy
LmRhdGEoKTsKIAogICAgIC8vIENoZWNrIGlmIHdlJ3JlIGh0dHAgb3IgaHR0cHMuCiAgICAgYm9v
bCBpc0hUVFBvckhUVFBTID0gbWF0Y2hMZXR0ZXIodXJsWzBdLCAnaCcpCkBAIC0xMTY0LDcgKzEx
NjQsNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAg
ICpwKysgPSAnLyc7CiAgICAgICAgICpwKysgPSAnLyc7CiAKLSAgICAgICAgdXNlclN0YXJ0UG9z
ID0gcCAtIGJ1ZmZlcjsKKyAgICAgICAgdXNlclN0YXJ0UG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7
CiAKICAgICAgICAgLy8gY29weSBpbiB0aGUgdXNlcgogICAgICAgICBzdHJQdHIgPSB1cmwgKyB1
c2VyU3RhcnQ7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNo
YXIgKnVybCwgY29uc3QgCiAgICAgICAgIHdoaWxlIChzdHJQdHIgPCB1c2VyRW5kUHRyKSB7CiAg
ICAgICAgICAgICAqcCsrID0gKnN0clB0cisrOwogICAgICAgICB9Ci0gICAgICAgIHVzZXJFbmRQ
b3MgPSBwIC0gYnVmZmVyOworICAgICAgICB1c2VyRW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7
CiAgICAgICAgIAogICAgICAgICAvLyBjb3B5IGluIHRoZSBwYXNzd29yZAogICAgICAgICBpZiAo
cGFzc3dvcmRFbmQgIT0gcGFzc3dvcmRTdGFydCkgewpAQCAtMTE4MywxMCArMTE4MywxMCBAQCB2
b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAgICAgICAgICAg
KnArKyA9ICpzdHJQdHIrKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBwYXNz
d29yZEVuZFBvcyA9IHAgLSBidWZmZXI7CisgICAgICAgIHBhc3N3b3JkRW5kUG9zID0gcCAtIGJ1
ZmZlci5kYXRhKCk7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBoYWQgYW55IHVzZXIgaW5m
bywgYWRkICJAIgotICAgICAgICBpZiAocCAtIGJ1ZmZlciAhPSB1c2VyU3RhcnRQb3MpIHsKKyAg
ICAgICAgaWYgKHAgLSBidWZmZXIuZGF0YSgpICE9IHVzZXJTdGFydFBvcykgewogICAgICAgICAg
ICAgKnArKyA9ICdAJzsKICAgICAgICAgfQogICAgICAgICAKQEAgLTExOTgsNyArMTE5OCw3IEBA
IHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAgICAgICAgICAg
ICAqcCsrID0gKnN0clB0cisrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGhv
c3RFbmRQb3MgPSBwIC0gYnVmZmVyOworICAgICAgICBob3N0RW5kUG9zID0gcCAtIGJ1ZmZlci5k
YXRhKCk7CiAgICAgICAgIAogICAgICAgICAvLyBjb3B5IGluIHRoZSBwb3J0CiAgICAgICAgIGlm
IChob3N0RW5kICE9IHBvcnRTdGFydCkgewpAQCAtMTIwOSw5ICsxMjA5LDkgQEAgdm9pZCBLVVJM
OjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgICAgICAgICAgICAgICpwKysgPSAq
c3RyUHRyKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcG9ydEVuZFBvcyA9
IHAgLSBidWZmZXI7CisgICAgICAgIHBvcnRFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEoKTsKICAg
ICB9IGVsc2UgewotICAgICAgICB1c2VyU3RhcnRQb3MgPSB1c2VyRW5kUG9zID0gcGFzc3dvcmRF
bmRQb3MgPSBob3N0RW5kUG9zID0gcG9ydEVuZFBvcyA9IHAgLSBidWZmZXI7CisgICAgICAgIHVz
ZXJTdGFydFBvcyA9IHVzZXJFbmRQb3MgPSBwYXNzd29yZEVuZFBvcyA9IGhvc3RFbmRQb3MgPSBw
b3J0RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAgICAgfQogCiAgICAgLy8gRm9yIGNhbm9u
aWNhbGl6YXRpb24sIGVuc3VyZSB3ZSBoYXZlIGEgJy8nIGZvciBubyBwYXRoLgpAQCAtMTIyNCwz
NCArMTIyNCwzNCBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAg
ICAgCiAgICAgaWYgKGhpZXJhcmNoaWNhbCAmJiBoYXNTbGFzaERvdE9yRG90RG90KHVybCkpIHsK
ICAgICAgICAgVmVjdG9yPGNoYXIsIDQwOTY+IHBhdGhfYnVmZmVyKHBhdGhFbmQgLSBwYXRoU3Rh
cnQgKyAxKTsKLSAgICAgICAgY29weVBhdGhSZW1vdmluZ0RvdHMocGF0aF9idWZmZXIsIHVybCwg
cGF0aFN0YXJ0LCBwYXRoRW5kKTsKLSAgICAgICAgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCBw
YXRoX2J1ZmZlciwgc3RybGVuKHBhdGhfYnVmZmVyKSk7CisgICAgICAgIGNvcHlQYXRoUmVtb3Zp
bmdEb3RzKHBhdGhfYnVmZmVyLmRhdGEoKSwgdXJsLCBwYXRoU3RhcnQsIHBhdGhFbmQpOworICAg
ICAgICBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKHAsIHBhdGhfYnVmZmVyLmRhdGEoKSwgc3RybGVu
KHBhdGhfYnVmZmVyLmRhdGEoKSkpOwogICAgIH0gZWxzZQogICAgICAgICBhcHBlbmRFc2NhcGlu
Z0JhZENoYXJzKHAsIHVybCArIHBhdGhTdGFydCwgcGF0aEVuZCAtIHBhdGhTdGFydCk7CiAKLSAg
ICBwYXRoRW5kUG9zID0gcCAtIGJ1ZmZlcjsKKyAgICBwYXRoRW5kUG9zID0gcCAtIGJ1ZmZlci5k
YXRhKCk7CiAgICAgCiAgICAgCiAgICAgLy8gYWRkIHF1ZXJ5LCBlc2NhcGluZyBiYWQgY2hhcmFj
dGVycwogICAgIGFwcGVuZEVzY2FwaW5nQmFkQ2hhcnMocCwgdXJsICsgcXVlcnlTdGFydCwgcXVl
cnlFbmQgLSBxdWVyeVN0YXJ0KTsKLSAgICBxdWVyeUVuZFBvcyA9IHAgLSBidWZmZXI7CisgICAg
cXVlcnlFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEoKTsKICAgICAKICAgICAvLyBhZGQgZnJhZ21l
bnQsIGVzY2FwaW5nIGJhZCBjaGFyYWN0ZXJzCiAgICAgaWYgKGZyYWdtZW50RW5kICE9IHF1ZXJ5
RW5kKSB7CiAgICAgICAgICpwKysgPSAnIyc7CiAgICAgICAgIGFwcGVuZEVzY2FwaW5nQmFkQ2hh
cnMocCwgdXJsICsgZnJhZ21lbnRTdGFydCwgZnJhZ21lbnRFbmQgLSBmcmFnbWVudFN0YXJ0KTsK
ICAgICB9Ci0gICAgZnJhZ21lbnRFbmRQb3MgPSBwIC0gYnVmZmVyOworICAgIGZyYWdtZW50RW5k
UG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgZW5kIHVwIGFj
dHVhbGx5IGNoYW5naW5nIHRoZSBvcmlnaW5hbCBzdHJpbmcgYW5kCiAgICAgLy8gaXQgc3RhcnRl
ZCBhcyBhIERlcHJlY2F0ZWRTdHJpbmcsIGp1c3QgcmV1c2UgaXQsIHRvIGF2b2lkIGV4dHJhCiAg
ICAgLy8gYWxsb2NhdGlvbi4KLSAgICBpZiAob3JpZ2luYWxTdHJpbmcgJiYgc3RybmNtcChidWZm
ZXIsIHVybCwgZnJhZ21lbnRFbmRQb3MpID09IDApIHsKKyAgICBpZiAob3JpZ2luYWxTdHJpbmcg
JiYgc3RybmNtcChidWZmZXIuZGF0YSgpLCB1cmwsIGZyYWdtZW50RW5kUG9zKSA9PSAwKSB7CiAg
ICAgICAgIHVybFN0cmluZyA9ICpvcmlnaW5hbFN0cmluZzsKICAgICB9IGVsc2UKLSAgICAgICAg
dXJsU3RyaW5nID0gRGVwcmVjYXRlZFN0cmluZyhidWZmZXIsIGZyYWdtZW50RW5kUG9zKTsKKyAg
ICAgICAgdXJsU3RyaW5nID0gRGVwcmVjYXRlZFN0cmluZyhidWZmZXIuZGF0YSgpLCBmcmFnbWVu
dEVuZFBvcyk7CiAKLSAgICBBU1NFUlQocCAtIGJ1ZmZlciA8PSAoaW50KWJ1ZmZlci5zaXplKCkp
OworICAgIEFTU0VSVChwIC0gYnVmZmVyLmRhdGEoKSA8PSAoaW50KWJ1ZmZlci5zaXplKCkpOwog
fQogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgS1VSTCAmYSwgY29uc3QgS1VSTCAmYikKQEAgLTEy
NjksNyArMTI2OSw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6ZW5jb2RlX3N0cmluZyhjb24K
ICAgICBEZXByZWNhdGVkQ1N0cmluZyBhc1VURjggPSBub3RFbmNvZGVkU3RyaW5nLnV0ZjgoKTsK
ICAgICAKICAgICBWZWN0b3I8Y2hhciwgNDA5Nj4gYnVmZmVyKGFzVVRGOC5sZW5ndGgoKSAqIDMg
KyAxKTsKLSAgICBjaGFyICpwID0gYnVmZmVyOworICAgIGNoYXIgKnAgPSBidWZmZXIuZGF0YSgp
OwogCiAgICAgY29uc3QgY2hhciAqc3RyID0gYXNVVEY4OwogICAgIGNvbnN0IGNoYXIgKnN0ckVu
ZCA9IHN0ciArIGFzVVRGOC5sZW5ndGgoKTsKQEAgLTEyODMsOSArMTI4Myw5IEBAIERlcHJlY2F0
ZWRTdHJpbmcgS1VSTDo6ZW5jb2RlX3N0cmluZyhjb24KICAgICAgICAgICAgICpwKysgPSBjOwog
ICAgIH0KICAgICAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdChidWZmZXIsIHAgLSBidWZm
ZXIpOworICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0KGJ1ZmZlci5kYXRhKCksIHAgLSBidWZm
ZXIuZGF0YSgpKTsKICAgICAKLSAgICBBU1NFUlQocCAtIGJ1ZmZlciA8PSAoaW50KWJ1ZmZlci5z
aXplKCkpOworICAgIEFTU0VSVChwIC0gYnVmZmVyLmRhdGEoKSA8PSAoaW50KWJ1ZmZlci5zaXpl
KCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2Yv
S1VSTENGTmV0LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2YvS1VSTENG
TmV0LmNwcAkocmV2aXNpb24gMjUwNzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2NmL0tVUkxDRk5l
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgS1VSTDo6S1VSTChDRlVSTFJl
ZiB1cmwpCiAgICAgICAgICAgICBidWZmZXJbMl0gPSAnbCc7CiAgICAgICAgICAgICBidWZmZXJb
M10gPSAnZSc7CiAgICAgICAgICAgICBidWZmZXJbNF0gPSAnOic7Ci0gICAgICAgICAgICBwYXJz
ZShidWZmZXIsIDApOworICAgICAgICAgICAgcGFyc2UoYnVmZmVyLmRhdGEoKSwgMCk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgcGFyc2UoYnl0ZXMsIDApOwogICAgIH0gZWxzZQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiAyNTA3MSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTkzLDcgKzE5Myw3IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OmxheU91dEF4aXMoR3JpZEF4aXMK
IHsKICAgICBhdmFpbGFibGVMZW4gPSBtYXgoYXZhaWxhYmxlTGVuLCAwKTsKIAotICAgIGludCog
Z3JpZExheW91dCA9IGF4aXMubV9zaXplczsKKyAgICBpbnQqIGdyaWRMYXlvdXQgPSBheGlzLm1f
c2l6ZXMuZGF0YSgpOwogCiAgICAgaWYgKCFncmlkKSB7CiAgICAgICAgIGdyaWRMYXlvdXRbMF0g
PSBhdmFpbGFibGVMZW47CkBAIC0zNjcsNyArMzY3LDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6
bGF5T3V0QXhpcyhHcmlkQXhpcwogCiAgICAgLy8gbm93IHdlIGhhdmUgdGhlIGZpbmFsIGxheW91
dCwgZGlzdHJpYnV0ZSB0aGUgZGVsdGEgb3ZlciBpdAogICAgIGJvb2wgd29ya2VkID0gdHJ1ZTsK
LSAgICBpbnQqIGdyaWREZWx0YSA9IGF4aXMubV9kZWx0YXM7CisgICAgaW50KiBncmlkRGVsdGEg
PSBheGlzLm1fZGVsdGFzLmRhdGEoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyaWRMZW47
ICsraSkgewogICAgICAgICBpZiAoZ3JpZExheW91dFtpXSAmJiBncmlkTGF5b3V0W2ldICsgZ3Jp
ZERlbHRhW2ldIDw9IDApCiAgICAgICAgICAgICB3b3JrZWQgPSBmYWxzZTsKSW5kZXg6IFdlYktp
dFRvb2xzL1NjcmlwdHMvc3ZuLWNyZWF0ZS1wYXRjaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdFRv
b2xzL1NjcmlwdHMvc3ZuLWNyZWF0ZS1wYXRjaAkocmV2aXNpb24gMjUwNzEpCisrKyBXZWJLaXRU
b29scy9TY3JpcHRzL3N2bi1jcmVhdGUtcGF0Y2gJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw3ICsy
NjEsNyBAQCBzdWIgZ2VuZXJhdGVGaWxlTGlzdCgkXCUpCiAgICAgbXkgJXRlc3REaXJlY3Rvcmll
cyA9IG1hcCB7ICRfID0+IDEgfSBxdyhMYXlvdXRUZXN0cyk7CiAgICAgb3BlbiBTVEFULCAic3Zu
IHN0YXQgJyRzdGF0UGF0aCcgfCIgb3IgZGllOwogICAgIHdoaWxlIChteSAkbGluZSA9IDxTVEFU
PikgewotICAgICAgICBjaG9tcCAkbGluZTsKKyAgICAgICAgJGxpbmUgPX4gcy9bXHJcbl0qJC8v
OwogICAgICAgICBteSAkc3RhdCA9IHN1YnN0cigkbGluZSwgMCwgNyk7CiAgICAgICAgIG15ICRw
YXRoID0gc3Vic3RyKCRsaW5lLCA3KTsKICAgICAgICAgbmV4dCBpZiAtZCAkcGF0aDsKSW5kZXg6
IFdlYktpdC93aW4vV2ViUHJlZmVyZW5jZXMuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L3dp
bi9XZWJQcmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysgV2ViS2l0L3dpbi9XZWJQ
cmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMyw3ICs1MjMsNyBAQCB2b2lkIFdl
YlByZWZlcmVuY2VzOjpsb2FkKCkKICAgICBpZiAoIVdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfVVRG
OCwgMCwgYXBwRGF0YVBhdGgsIGFwcERhdGFQYXRoTGVuZ3RoLCAoTFBTVFIpdXRmOFBhdGgtPmRh
dGEoKSwgcmVzdWx0LCAwLCAwKSkKICAgICAgICAgZ290byBleGl0OwogCi0gICAgdXJsUmVmLmFk
b3B0Q0YoQ0ZVUkxDcmVhdGVGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKDAsICp1dGY4UGF0
aCwgcmVzdWx0LTEsIGZhbHNlKSk7CisgICAgdXJsUmVmLmFkb3B0Q0YoQ0ZVUkxDcmVhdGVGcm9t
RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKDAsIHV0ZjhQYXRoLT5kYXRhKCksIHJlc3VsdC0xLCBm
YWxzZSkpOwogICAgIGlmICghdXJsUmVmKQogICAgICAgICBnb3RvIGV4aXQ7CiAKSW5kZXg6IFdl
YktpdC93aW4vV2ViVmlldy5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvd2luL1dlYlZpZXcu
Y3BwCShyZXZpc2lvbiAyNTA3MSkKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4MjgsNyArMzgyOCw3IEBAIHN0YXRpYyBib29sIGdldENvbXBvc2l0aW9uU3Ry
aW5nKEhJTUMgaEkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFZlY3RvcjxVQ2hhcj4gY29t
cG9zaXRpb25CdWZmZXIoY29tcG9zaXRpb25MZW5ndGggLyAyKTsKICAgICBjb21wb3NpdGlvbkxl
bmd0aCA9IElNTURpY3Q6OmRpY3QoKS5nZXRDb21wb3NpdGlvblN0cmluZyhoSW5wdXRDb250ZXh0
LCB0eXBlLCAoTFBWT0lEKWNvbXBvc2l0aW9uQnVmZmVyLmRhdGEoKSwgY29tcG9zaXRpb25MZW5n
dGgpOwotICAgIHJlc3VsdCA9IFN0cmluZyhjb21wb3NpdGlvbkJ1ZmZlciwgY29tcG9zaXRpb25M
ZW5ndGggLyAyKTsKKyAgICByZXN1bHQgPSBTdHJpbmcoY29tcG9zaXRpb25CdWZmZXIuZGF0YSgp
LCBjb21wb3NpdGlvbkxlbmd0aCAvIDIpOwogICAgIEFTU0VSVCghY29tcG9zaXRpb25MZW5ndGgg
fHwgY29tcG9zaXRpb25CdWZmZXJbMF0pOwogICAgIEFTU0VSVCghY29tcG9zaXRpb25MZW5ndGgg
fHwgY29tcG9zaXRpb25CdWZmZXJbY29tcG9zaXRpb25MZW5ndGggLyAyIC0gMV0pOwogICAgIHJl
dHVybiB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15970</attachid>
            <date>2007-08-14 14:43:44 -0700</date>
            <delta_ts>2007-08-14 15:45:03 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19745</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDI1MDcxKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgSlNPYmplY3QqIEpTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvcjo6Y29uc3RydQogICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdG9S
ZWYoYXJnc1tpXSk7CiAgICAgICAgICAgICAKICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzOwotICAgICAgICByZXR1cm4gdG9KUyhtX2NhbGxiYWNrKGN0eCwgdGhpc1Jl
ZiwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkp
KSk7CisgICAgICAgIHJldHVybiB0b0pTKG1fY2FsbGJhY2soY3R4LCB0aGlzUmVmLCBhcmd1bWVu
dENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkpKSk7
CiAgICAgfQogICAgIAogICAgIHJldHVybiB0b0pTKEpTT2JqZWN0TWFrZShjdHgsIG1fY2xhc3Ms
IDApKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJ
KHJldmlzaW9uIDI1MDcxKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgSlNWYWx1ZSogSlNDYWxsYmFj
a0Z1bmN0aW9uOjpjYWxsQXNGdW5jdAogICAgICAgICBhcmd1bWVudHNbaV0gPSB0b1JlZihhcmdz
W2ldKTsKIAogICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKLSAgICByZXR1
cm4gdG9KUyhtX2NhbGxiYWNrKGV4ZWNSZWYsIHRoaXNSZWYsIHRoaXNPYmpSZWYsIGFyZ3VtZW50
Q291bnQsIGFyZ3VtZW50cywgdG9SZWYoZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSkpOworICAgIHJl
dHVybiB0b0pTKG1fY2FsbGJhY2soZXhlY1JlZiwgdGhpc1JlZiwgdGhpc09ialJlZiwgYXJndW1l
bnRDb3VudCwgYXJndW1lbnRzLmRhdGEoKSwgdG9SZWYoZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBLSlMKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjUwNzEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQCBK
U09iamVjdCogSlNDYWxsYmFja09iamVjdDo6Y29uc3RydWN0KEV4CiAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7IGkrKykKICAgICAgICAgICAgICAgICBhcmd1
bWVudHNbaV0gPSB0b1JlZihhcmdzW2ldKTsKICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrczsKLSAgICAgICAgICAgIHJldHVybiB0b0pTKGNhbGxBc0NvbnN0cnVj
dG9yKGV4ZWNSZWYsIHRoaXNSZWYsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgdG9SZWYoZXhl
Yy0+ZXhjZXB0aW9uU2xvdCgpKSkpOworICAgICAgICAgICAgcmV0dXJuIHRvSlMoY2FsbEFzQ29u
c3RydWN0b3IoZXhlY1JlZiwgdGhpc1JlZiwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLmRhdGEo
KSwgdG9SZWYoZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSkpOwogICAgICAgICB9CiAgICAgfQogICAg
IApAQCAtMjkyLDcgKzI5Miw3IEBAIEpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q6OmNhbGxBc0Z1
bmN0aW8KICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgaSsr
KQogICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IHRvUmVmKGFyZ3NbaV0pOwogICAgICAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwotICAgICAgICAgICAgcmV0
dXJuIHRvSlMoY2FsbEFzRnVuY3Rpb24oZXhlY1JlZiwgdGhpc1JlZiwgdGhpc09ialJlZiwgYXJn
dW1lbnRDb3VudCwgYXJndW1lbnRzLCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkpKSk7Cisg
ICAgICAgICAgICByZXR1cm4gdG9KUyhjYWxsQXNGdW5jdGlvbihleGVjUmVmLCB0aGlzUmVmLCB0
aGlzT2JqUmVmLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCB0b1JlZihleGVjLT5l
eGNlcHRpb25TbG90KCkpKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL2MvY19pbnN0YW5jZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNTA3MSkKKysrIEphdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL2MvY19pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MSw3ICsxMDEsNyBAQCBKU1ZhbHVlKiBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhCiAK
ICAgICB7CiAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwotICAgICAg
ICBfb2JqZWN0LT5fY2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVudCwgY0FyZ3MsIGNvdW50LCAm
cmVzdWx0VmFyaWFudCk7CisgICAgICAgIF9vYmplY3QtPl9jbGFzcy0+aW52b2tlKF9vYmplY3Qs
IGlkZW50LCBjQXJncy5kYXRhKCksIGNvdW50LCAmcmVzdWx0VmFyaWFudCk7CiAgICAgfQogCiAg
ICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCkBAIC0xMzAsNyArMTMwLDcgQEAgSlNWYWx1
ZSogQ0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKAogICAgIFZPSURfVE9fTlBWQVJJQU5U
KHJlc3VsdFZhcmlhbnQpOwogICAgIHsKICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3M7Ci0gICAgICAgIF9vYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChfb2JqZWN0
LCBjQXJncywgY291bnQsICZyZXN1bHRWYXJpYW50KTsKKyAgICAgICAgX29iamVjdC0+X2NsYXNz
LT5pbnZva2VEZWZhdWx0KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJp
YW50KTsKICAgICB9CiAgICAgCiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHANCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysg
SmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NiwxMyArODYsMTMgQEAgc3RhdGljIFVTdHJpbmcgaW50ZWdlcl9wYXJ0X25vZXhwKGRvdWJsZQog
ICAgICAgICBWZWN0b3I8Y2hhciwgMTAyND4gYnVmKGRlY2ltYWxQb2ludCArIDEpOwogICAgICAg
ICAKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSA8PSBkZWNpbWFsUG9pbnQp
IHsKLSAgICAgICAgICAgIHN0cmNweShidWYsIHJlc3VsdCk7Ci0gICAgICAgICAgICBtZW1zZXQo
YnVmICsgbGVuZ3RoLCAnMCcsIGRlY2ltYWxQb2ludCAtIGxlbmd0aCk7CisgICAgICAgICAgICBz
dHJjcHkoYnVmLmRhdGEoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIG1lbXNldChidWYuZGF0YSgp
ICsgbGVuZ3RoLCAnMCcsIGRlY2ltYWxQb2ludCAtIGxlbmd0aCk7CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgc3RybmNweShidWYsIHJlc3VsdCwgZGVjaW1hbFBvaW50KTsKKyAgICAgICAg
ICAgIHN0cm5jcHkoYnVmLmRhdGEoKSwgcmVzdWx0LCBkZWNpbWFsUG9pbnQpOwogICAgICAgICAK
ICAgICAgICAgYnVmW2RlY2ltYWxQb2ludF0gPSAnXDAnOwotICAgICAgICBzdHIgKz0gVVN0cmlu
ZyhidWYpOworICAgICAgICBzdHIgKz0gVVN0cmluZyhidWYuZGF0YSgpKTsKICAgICB9CiAgICAg
CiAgICAga2pzX2ZyZWVkdG9hKHJlc3VsdCk7CkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIFVT
dHJpbmcgY2hhcl9zZXF1ZW5jZShjaGFyIGMsIGludAogICAgIFZlY3RvcjxjaGFyLCAyMDQ4PiBi
dWYoY291bnQgKyAxLCBjKTsKICAgICBidWZbY291bnRdID0gJ1wwJzsKIAotICAgIHJldHVybiBV
U3RyaW5nKGJ1Zik7CisgICAgcmV0dXJuIFVTdHJpbmcoYnVmLmRhdGEoKSk7CiB9CiAKIHN0YXRp
YyBkb3VibGUgaW50UG93MTAoaW50IGUpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvdXN0cmlu
Zy5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvdXN0cmluZy5jcHAJKHJl
dmlzaW9uIDI1MDcxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzk2LDcgKzEzOTYsNyBAQCBDU3RyaW5nIFVTdHJpbmc6OlVURjhTdHJpbmco
KSBjb25zdAogICB9CiAKICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgYXMgYSBDIHN0cmluZy4KLSAg
Q1N0cmluZyByZXN1bHQoYnVmZmVyLCBwIC0gYnVmZmVyKTsKKyAgQ1N0cmluZyByZXN1bHQoYnVm
ZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkpOwogCiAgIHJldHVybiByZXN1bHQ7CiB9Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBKYXZhU2Ny
aXB0Q29yZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDI1MDcxKQorKysgSmF2YVNjcmlwdENvcmUv
d3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsMjMgKzQwNywxMSBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgICAgIHJldHVybiBtX2ltcGwuYnVmZmVyKClbaV07IAogICAgICAg
ICB9CiAKLSAgICAgICAgVCYgb3BlcmF0b3JbXShsb25nIGkpIHsgcmV0dXJuIGF0KGkpOyB9Ci0g
ICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10obG9uZyBpKSBjb25zdCB7IHJldHVybiBhdChpKTsg
fQotICAgICAgICBUJiBvcGVyYXRvcltdKHVuc2lnbmVkIGxvbmcgaSkgeyByZXR1cm4gYXQoaSk7
IH0KLSAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBsb25nIGkpIGNvbnN0IHsg
cmV0dXJuIGF0KGkpOyB9Ci0gICAgICAgIFQmIG9wZXJhdG9yW10oaW50IGkpIHsgcmV0dXJuIGF0
KGkpOyB9Ci0gICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0IHsgcmV0dXJu
IGF0KGkpOyB9Ci0gICAgICAgIFQmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgeyByZXR1cm4gYXQo
aSk7IH0KLSAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiBhdChpKTsgfQotICAgICAgICBUJiBvcGVyYXRvcltdKHNob3J0IGkpIHsgcmV0dXJuIGF0
KGkpOyB9Ci0gICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2hvcnQgaSkgY29uc3QgeyByZXR1
cm4gYXQoaSk7IH0KLSAgICAgICAgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBzaG9ydCBpKSB7IHJl
dHVybiBhdChpKTsgfQotICAgICAgICBjb25zdCBUJiBvcGVyYXRvcltdKHVuc2lnbmVkIHNob3J0
IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CisgICAgICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90
IGkpIHsgcmV0dXJuIGF0KGkpOyB9CisgICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90
IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAKICAgICAgICAgVCogZGF0YSgpIHsgcmV0dXJu
IG1faW1wbC5idWZmZXIoKTsgfQogICAgICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsLmJ1ZmZlcigpOyB9Ci0gICAgICAgIG9wZXJhdG9yIFQqKCkgeyByZXR1cm4gZGF0
YSgpOyB9Ci0gICAgICAgIG9wZXJhdG9yIGNvbnN0IFQqKCkgY29uc3QgeyByZXR1cm4gZGF0YSgp
OyB9CiAKICAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0KICAgICAg
ICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gYmVnaW4oKSArIG1fc2l6ZTsgfQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2
LDcgKzIzNiw3IEBAIHZvaWQgUGx1Z2luQmFzZTo6Y2FjaGVQbHVnaW5EYXRhSWZOZWNlc3MKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcGx1Z2lu
cy0+YXBwZW5kKHBsdWdpbik7Ci0gICAgICAgICAgICBpZiAoIXBsdWdpbi0+bWltZXMpCisgICAg
ICAgICAgICBpZiAocGx1Z2luLT5taW1lcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46
Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbi0+bWltZXMuZW5kKCk7CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMjUwNzEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsNyArMjgwLDcgQEAgYm9vbCBI
VE1MU2VsZWN0RWxlbWVudDo6c2F2ZVN0YXRlKFN0cmluZwogICAgICAgICBib29sIHNlbGVjdGVk
ID0gZS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQqPihlKS0+c2VsZWN0ZWQoKTsKICAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHNlbGVjdGVk
ID8gJ1gnIDogJy4nOwogICAgIH0KLSAgICB2YWx1ZSA9IFN0cmluZyhjaGFyYWN0ZXJzLCBsKTsK
KyAgICB2YWx1ZSA9IFN0cmluZyhjaGFyYWN0ZXJzLmRhdGEoKSwgbCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysgV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBG
cmFtZVZpZXc6On5GcmFtZVZpZXcoKQogICAgIHJlc2V0U2Nyb2xsYmFycygpOwogCiAgICAgQVNT
RVJUKG1fcmVmQ291bnQgPT0gMCk7Ci0gICAgQVNTRVJUKCghZC0+bV9zY2hlZHVsZWRFdmVudHMg
fHwgZC0+bV9zY2hlZHVsZWRFdmVudHMuaXNFbXB0eSgpKSAmJiAhZC0+bV9lbnF1ZXVlRXZlbnRz
KTsKKyAgICBBU1NFUlQoZC0+bV9zY2hlZHVsZWRFdmVudHMuaXNFbXB0eSgpICYmICFkLT5tX2Vu
cXVldWVFdmVudHMpOwogCiAgICAgaWYgKG1fZnJhbWUpIHsKICAgICAgICAgQVNTRVJUKG1fZnJh
bWUtPnZpZXcoKSAhPSB0aGlzIHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpIHx8ICFtX2ZyYW1lLT5k
b2N1bWVudCgpLT5yZW5kZXJlcigpKTsKQEAgLTc4MSw3ICs3ODEsNyBAQCB2b2lkIEZyYW1lVmll
dzo6c2NoZWR1bGVFdmVudChQYXNzUmVmUHRyCiAKIHZvaWQgRnJhbWVWaWV3OjpwYXVzZVNjaGVk
dWxlZEV2ZW50cygpCiB7Ci0gICAgQVNTRVJUKCFkLT5tX3NjaGVkdWxlZEV2ZW50cyB8fCBkLT5t
X3NjaGVkdWxlZEV2ZW50cy5pc0VtcHR5KCkgfHwgZC0+bV9lbnF1ZXVlRXZlbnRzKTsKKyAgICBB
U1NFUlQoZC0+bV9zY2hlZHVsZWRFdmVudHMuaXNFbXB0eSgpIHx8IGQtPm1fZW5xdWV1ZUV2ZW50
cyk7CiAgICAgZC0+bV9lbnF1ZXVlRXZlbnRzKys7CiB9CiAKQEAgLTc5MCw3ICs3OTAsNyBAQCB2
b2lkIEZyYW1lVmlldzo6cmVzdW1lU2NoZWR1bGVkRXZlbnRzKCkKICAgICBkLT5tX2VucXVldWVF
dmVudHMtLTsKICAgICBpZiAoIWQtPm1fZW5xdWV1ZUV2ZW50cykKICAgICAgICAgZGlzcGF0Y2hT
Y2hlZHVsZWRFdmVudHMoKTsKLSAgICBBU1NFUlQoIWQtPm1fc2NoZWR1bGVkRXZlbnRzIHx8IGQt
Pm1fc2NoZWR1bGVkRXZlbnRzLmlzRW1wdHkoKSB8fCBkLT5tX2VucXVldWVFdmVudHMpOworICAg
IEFTU0VSVChkLT5tX3NjaGVkdWxlZEV2ZW50cy5pc0VtcHR5KCkgfHwgZC0+bV9lbnF1ZXVlRXZl
bnRzKTsKIH0KIAogdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9y
aXpvbnRhbE92ZXJmbG93LCBib29sIHZlcnRpY2FsT3ZlcmZsb3cpCkBAIC04MjEsNyArODIxLDcg
QEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvbwogCiB2b2lkIEZyYW1l
Vmlldzo6ZGlzcGF0Y2hTY2hlZHVsZWRFdmVudHMoKQogewotICAgIGlmICghZC0+bV9zY2hlZHVs
ZWRFdmVudHMpCisgICAgaWYgKGQtPm1fc2NoZWR1bGVkRXZlbnRzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIFZlY3RvcjxTY2hlZHVsZWRFdmVudCo+IHNjaGVkdWxlZEV2
ZW50c0NvcHkgPSBkLT5tX3NjaGVkdWxlZEV2ZW50czsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
S1VSTC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCShyZXZp
c2lvbiAyNTA3MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0MSw3ICsyNDEsNyBAQCBLVVJMOjpLVVJMKGNvbnN0IGNoYXIgKnVybCkKICAgICAgICAg
YnVmZmVyWzNdID0gJ2UnOwogICAgICAgICBidWZmZXJbNF0gPSAnOic7CiAgICAgICAgIG1lbWNw
eSgmYnVmZmVyWzVdLCB1cmwsIHVybExlbmd0aCk7Ci0gICAgICAgIHBhcnNlKGJ1ZmZlciwgMCk7
CisgICAgICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksIDApOwogICAgIH0gZWxzZQogICAgICAgICBw
YXJzZSh1cmwsIDApOwogfQpAQCAtMjU3LDcgKzI1Nyw3IEBAIEtVUkw6OktVUkwoY29uc3QgRGVw
cmVjYXRlZFN0cmluZyAmdXJsKQogICAgICAgICBidWZmZXJbM10gPSAnZSc7CiAgICAgICAgIGJ1
ZmZlcls0XSA9ICc6JzsKICAgICAgICAgdXJsLmNvcHlMYXRpbjEoJmJ1ZmZlcls1XSk7Ci0gICAg
ICAgIHBhcnNlKGJ1ZmZlciwgMCk7CisgICAgICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksIDApOwog
ICAgIH0gZWxzZQogICAgICAgICBwYXJzZSh1cmwuYXNjaWkoKSwgJnVybCk7CiB9CkBAIC00MDUs
NyArNDA1LDcgQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IAogICAg
ICAgICAgICAgICAgIC8vIEJhc2UgcGFydCBwbHVzIHJlbGF0aXZlIHBhcnQgcGx1cyBvbmUgcG9z
c2libGUgc2xhc2ggYWRkZWQgaW4gYmV0d2VlbiBwbHVzIHRlcm1pbmF0aW5nIFwwIGJ5dGUuCiAg
ICAgICAgICAgICAgICAgVmVjdG9yPGNoYXIsIDIwNDg+IGJ1ZmZlcihiYXNlLnBhdGhFbmRQb3Mg
KyAxICsgc3RybGVuKHN0cikgKyAxKTsKIAotICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlclBv
cyA9IGJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBjaGFyICpidWZmZXJQb3MgPSBidWZmZXIuZGF0
YSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNvcHkgZXZl
cnl0aGluZyBiZWZvcmUgdGhlIHBhdGggZnJvbSB0aGUgYmFzZQogICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKmJhc2VTdHJpbmcgPSBiYXNlLnVybFN0cmluZy5hc2NpaSgpOwpAQCAtNDczLDkg
KzQ3Myw5IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25zdCAKICAgICAg
ICAgICAgICAgICAvLyBvZiB0aGUgcmVsYXRpdmUgcmVmZXJlbmNlOyB0aGlzIHdpbGwgYWxzbyBh
ZGQgYSBudWxsIHRlcm1pbmF0b3IKICAgICAgICAgICAgICAgICBzdHJjcHkoYnVmZmVyUG9zLCBy
ZWxTdHJpbmdQb3MpOwogCi0gICAgICAgICAgICAgICAgcGFyc2UoYnVmZmVyLCAwKTsKKyAgICAg
ICAgICAgICAgICBwYXJzZShidWZmZXIuZGF0YSgpLCAwKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoc3RybGVuKGJ1ZmZlcikgKyAxIDw9IGJ1ZmZlci5zaXplKCkp
OworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJsZW4oYnVmZmVyLmRhdGEoKSkgKyAxIDw9IGJ1
ZmZlci5zaXplKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC03ODgsMTggKzc4OCwxOCBAQCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29k
ZV9zdHJpbmcoY29uCiAgICAgICAgIGludCBlbmNvZGVkUnVuTGVuZ3RoID0gZW5jb2RlZFJ1bkVu
ZCAtIGVuY29kZWRSdW5Qb3NpdGlvbjsKICAgICAgICAgYnVmZmVyLmNsZWFyKCk7CiAgICAgICAg
IGJ1ZmZlci5yZXNpemUoZW5jb2RlZFJ1bkxlbmd0aCArIDEpOwotICAgICAgICB1cmxTdHJpbmcu
Y29weUxhdGluMShidWZmZXIsIGVuY29kZWRSdW5Qb3NpdGlvbiwgZW5jb2RlZFJ1bkxlbmd0aCk7
CisgICAgICAgIHVybFN0cmluZy5jb3B5TGF0aW4xKGJ1ZmZlci5kYXRhKCksIGVuY29kZWRSdW5Q
b3NpdGlvbiwgZW5jb2RlZFJ1bkxlbmd0aCk7CiAKICAgICAgICAgLy8gRGVjb2RlIHRoZSAlLWVz
Y2FwZXMgaW50byBieXRlcy4KLSAgICAgICAgY2hhciAqcCA9IGJ1ZmZlcjsKLSAgICAgICAgY29u
c3QgY2hhciAqcSA9IGJ1ZmZlcjsKKyAgICAgICAgY2hhciAqcCA9IGJ1ZmZlci5kYXRhKCk7Cisg
ICAgICAgIGNvbnN0IGNoYXIgKnEgPSBidWZmZXIuZGF0YSgpOwogICAgICAgICB3aGlsZSAoKnEp
IHsKICAgICAgICAgICAgICpwKysgPSAoaGV4RGlnaXRWYWx1ZShxWzFdKSA8PCA0KSB8IGhleERp
Z2l0VmFsdWUocVsyXSk7CiAgICAgICAgICAgICBxICs9IDM7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBEZWNvZGUgdGhlIGJ5dGVzIGludG8gVW5pY29kZSBjaGFyYWN0ZXJzLgotICAgICAgICBT
dHJpbmcgZGVjb2RlZCA9IChlbmNvZGluZy5pc1ZhbGlkKCkgPyBlbmNvZGluZyA6IFVURjhFbmNv
ZGluZygpKS5kZWNvZGUoYnVmZmVyLCBwIC0gYnVmZmVyKTsKKyAgICAgICAgU3RyaW5nIGRlY29k
ZWQgPSAoZW5jb2RpbmcuaXNWYWxpZCgpID8gZW5jb2RpbmcgOiBVVEY4RW5jb2RpbmcoKSkuZGVj
b2RlKGJ1ZmZlci5kYXRhKCksIHAgLSBidWZmZXIuZGF0YSgpKTsKICAgICAgICAgaWYgKGRlY29k
ZWQuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTExMDYsNyArMTEwNiw3
IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKIAogICAgIFZlY3Rv
cjxjaGFyLCA0MDk2PiBidWZmZXIoZnJhZ21lbnRFbmQgKiAzICsgMSk7CiAKLSAgICBjaGFyICpw
ID0gYnVmZmVyOworICAgIGNoYXIgKnAgPSBidWZmZXIuZGF0YSgpOwogICAgIGNvbnN0IGNoYXIg
KnN0clB0ciA9IHVybDsKIAogICAgIC8vIGNvcHkgaW4gdGhlIHNjaGVtZQpAQCAtMTExNCw3ICsx
MTE0LDcgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgIHdo
aWxlIChzdHJQdHIgPCBzY2hlbWVFbmRQdHIpIHsKICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsK
ICAgICB9Ci0gICAgc2NoZW1lRW5kUG9zID0gcCAtIGJ1ZmZlcjsKKyAgICBzY2hlbWVFbmRQb3Mg
PSBwIC0gYnVmZmVyLmRhdGEoKTsKIAogICAgIC8vIENoZWNrIGlmIHdlJ3JlIGh0dHAgb3IgaHR0
cHMuCiAgICAgYm9vbCBpc0hUVFBvckhUVFBTID0gbWF0Y2hMZXR0ZXIodXJsWzBdLCAnaCcpCkBA
IC0xMTY0LDcgKzExNjQsNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29u
c3QgCiAgICAgICAgICpwKysgPSAnLyc7CiAgICAgICAgICpwKysgPSAnLyc7CiAKLSAgICAgICAg
dXNlclN0YXJ0UG9zID0gcCAtIGJ1ZmZlcjsKKyAgICAgICAgdXNlclN0YXJ0UG9zID0gcCAtIGJ1
ZmZlci5kYXRhKCk7CiAKICAgICAgICAgLy8gY29weSBpbiB0aGUgdXNlcgogICAgICAgICBzdHJQ
dHIgPSB1cmwgKyB1c2VyU3RhcnQ7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCB2b2lkIEtVUkw6OnBh
cnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAgIHdoaWxlIChzdHJQdHIgPCB1c2Vy
RW5kUHRyKSB7CiAgICAgICAgICAgICAqcCsrID0gKnN0clB0cisrOwogICAgICAgICB9Ci0gICAg
ICAgIHVzZXJFbmRQb3MgPSBwIC0gYnVmZmVyOworICAgICAgICB1c2VyRW5kUG9zID0gcCAtIGJ1
ZmZlci5kYXRhKCk7CiAgICAgICAgIAogICAgICAgICAvLyBjb3B5IGluIHRoZSBwYXNzd29yZAog
ICAgICAgICBpZiAocGFzc3dvcmRFbmQgIT0gcGFzc3dvcmRTdGFydCkgewpAQCAtMTE4MywxMCAr
MTE4MywxMCBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAg
ICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICBwYXNzd29yZEVuZFBvcyA9IHAgLSBidWZmZXI7CisgICAgICAgIHBhc3N3b3JkRW5k
UG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBoYWQg
YW55IHVzZXIgaW5mbywgYWRkICJAIgotICAgICAgICBpZiAocCAtIGJ1ZmZlciAhPSB1c2VyU3Rh
cnRQb3MpIHsKKyAgICAgICAgaWYgKHAgLSBidWZmZXIuZGF0YSgpICE9IHVzZXJTdGFydFBvcykg
ewogICAgICAgICAgICAgKnArKyA9ICdAJzsKICAgICAgICAgfQogICAgICAgICAKQEAgLTExOTgs
NyArMTE5OCw3IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAg
ICAgICAgICAgICAgICAqcCsrID0gKnN0clB0cisrOwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIGhvc3RFbmRQb3MgPSBwIC0gYnVmZmVyOworICAgICAgICBob3N0RW5kUG9zID0g
cCAtIGJ1ZmZlci5kYXRhKCk7CiAgICAgICAgIAogICAgICAgICAvLyBjb3B5IGluIHRoZSBwb3J0
CiAgICAgICAgIGlmIChob3N0RW5kICE9IHBvcnRTdGFydCkgewpAQCAtMTIwOSw5ICsxMjA5LDkg
QEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgICAgICAgICAg
ICAgICpwKysgPSAqc3RyUHRyKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
cG9ydEVuZFBvcyA9IHAgLSBidWZmZXI7CisgICAgICAgIHBvcnRFbmRQb3MgPSBwIC0gYnVmZmVy
LmRhdGEoKTsKICAgICB9IGVsc2UgewotICAgICAgICB1c2VyU3RhcnRQb3MgPSB1c2VyRW5kUG9z
ID0gcGFzc3dvcmRFbmRQb3MgPSBob3N0RW5kUG9zID0gcG9ydEVuZFBvcyA9IHAgLSBidWZmZXI7
CisgICAgICAgIHVzZXJTdGFydFBvcyA9IHVzZXJFbmRQb3MgPSBwYXNzd29yZEVuZFBvcyA9IGhv
c3RFbmRQb3MgPSBwb3J0RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAgICAgfQogCiAgICAg
Ly8gRm9yIGNhbm9uaWNhbGl6YXRpb24sIGVuc3VyZSB3ZSBoYXZlIGEgJy8nIGZvciBubyBwYXRo
LgpAQCAtMTIyNCwzNCArMTIyNCwzNCBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVy
bCwgY29uc3QgCiAgICAgCiAgICAgaWYgKGhpZXJhcmNoaWNhbCAmJiBoYXNTbGFzaERvdE9yRG90
RG90KHVybCkpIHsKICAgICAgICAgVmVjdG9yPGNoYXIsIDQwOTY+IHBhdGhfYnVmZmVyKHBhdGhF
bmQgLSBwYXRoU3RhcnQgKyAxKTsKLSAgICAgICAgY29weVBhdGhSZW1vdmluZ0RvdHMocGF0aF9i
dWZmZXIsIHVybCwgcGF0aFN0YXJ0LCBwYXRoRW5kKTsKLSAgICAgICAgYXBwZW5kRXNjYXBpbmdC
YWRDaGFycyhwLCBwYXRoX2J1ZmZlciwgc3RybGVuKHBhdGhfYnVmZmVyKSk7CisgICAgICAgIGNv
cHlQYXRoUmVtb3ZpbmdEb3RzKHBhdGhfYnVmZmVyLmRhdGEoKSwgdXJsLCBwYXRoU3RhcnQsIHBh
dGhFbmQpOworICAgICAgICBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKHAsIHBhdGhfYnVmZmVyLmRh
dGEoKSwgc3RybGVuKHBhdGhfYnVmZmVyLmRhdGEoKSkpOwogICAgIH0gZWxzZQogICAgICAgICBh
cHBlbmRFc2NhcGluZ0JhZENoYXJzKHAsIHVybCArIHBhdGhTdGFydCwgcGF0aEVuZCAtIHBhdGhT
dGFydCk7CiAKLSAgICBwYXRoRW5kUG9zID0gcCAtIGJ1ZmZlcjsKKyAgICBwYXRoRW5kUG9zID0g
cCAtIGJ1ZmZlci5kYXRhKCk7CiAgICAgCiAgICAgCiAgICAgLy8gYWRkIHF1ZXJ5LCBlc2NhcGlu
ZyBiYWQgY2hhcmFjdGVycwogICAgIGFwcGVuZEVzY2FwaW5nQmFkQ2hhcnMocCwgdXJsICsgcXVl
cnlTdGFydCwgcXVlcnlFbmQgLSBxdWVyeVN0YXJ0KTsKLSAgICBxdWVyeUVuZFBvcyA9IHAgLSBi
dWZmZXI7CisgICAgcXVlcnlFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEoKTsKICAgICAKICAgICAv
LyBhZGQgZnJhZ21lbnQsIGVzY2FwaW5nIGJhZCBjaGFyYWN0ZXJzCiAgICAgaWYgKGZyYWdtZW50
RW5kICE9IHF1ZXJ5RW5kKSB7CiAgICAgICAgICpwKysgPSAnIyc7CiAgICAgICAgIGFwcGVuZEVz
Y2FwaW5nQmFkQ2hhcnMocCwgdXJsICsgZnJhZ21lbnRTdGFydCwgZnJhZ21lbnRFbmQgLSBmcmFn
bWVudFN0YXJ0KTsKICAgICB9Ci0gICAgZnJhZ21lbnRFbmRQb3MgPSBwIC0gYnVmZmVyOworICAg
IGZyYWdtZW50RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAKICAgICAvLyBJZiB3ZSBkaWRu
J3QgZW5kIHVwIGFjdHVhbGx5IGNoYW5naW5nIHRoZSBvcmlnaW5hbCBzdHJpbmcgYW5kCiAgICAg
Ly8gaXQgc3RhcnRlZCBhcyBhIERlcHJlY2F0ZWRTdHJpbmcsIGp1c3QgcmV1c2UgaXQsIHRvIGF2
b2lkIGV4dHJhCiAgICAgLy8gYWxsb2NhdGlvbi4KLSAgICBpZiAob3JpZ2luYWxTdHJpbmcgJiYg
c3RybmNtcChidWZmZXIsIHVybCwgZnJhZ21lbnRFbmRQb3MpID09IDApIHsKKyAgICBpZiAob3Jp
Z2luYWxTdHJpbmcgJiYgc3RybmNtcChidWZmZXIuZGF0YSgpLCB1cmwsIGZyYWdtZW50RW5kUG9z
KSA9PSAwKSB7CiAgICAgICAgIHVybFN0cmluZyA9ICpvcmlnaW5hbFN0cmluZzsKICAgICB9IGVs
c2UKLSAgICAgICAgdXJsU3RyaW5nID0gRGVwcmVjYXRlZFN0cmluZyhidWZmZXIsIGZyYWdtZW50
RW5kUG9zKTsKKyAgICAgICAgdXJsU3RyaW5nID0gRGVwcmVjYXRlZFN0cmluZyhidWZmZXIuZGF0
YSgpLCBmcmFnbWVudEVuZFBvcyk7CiAKLSAgICBBU1NFUlQocCAtIGJ1ZmZlciA8PSAoaW50KWJ1
ZmZlci5zaXplKCkpOworICAgIEFTU0VSVChwIC0gYnVmZmVyLmRhdGEoKSA8PSAoaW50KWJ1ZmZl
ci5zaXplKCkpOwogfQogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgS1VSTCAmYSwgY29uc3QgS1VS
TCAmYikKQEAgLTEyNjksNyArMTI2OSw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6ZW5jb2Rl
X3N0cmluZyhjb24KICAgICBEZXByZWNhdGVkQ1N0cmluZyBhc1VURjggPSBub3RFbmNvZGVkU3Ry
aW5nLnV0ZjgoKTsKICAgICAKICAgICBWZWN0b3I8Y2hhciwgNDA5Nj4gYnVmZmVyKGFzVVRGOC5s
ZW5ndGgoKSAqIDMgKyAxKTsKLSAgICBjaGFyICpwID0gYnVmZmVyOworICAgIGNoYXIgKnAgPSBi
dWZmZXIuZGF0YSgpOwogCiAgICAgY29uc3QgY2hhciAqc3RyID0gYXNVVEY4OwogICAgIGNvbnN0
IGNoYXIgKnN0ckVuZCA9IHN0ciArIGFzVVRGOC5sZW5ndGgoKTsKQEAgLTEyODMsOSArMTI4Myw5
IEBAIERlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6ZW5jb2RlX3N0cmluZyhjb24KICAgICAgICAgICAg
ICpwKysgPSBjOwogICAgIH0KICAgICAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdChidWZm
ZXIsIHAgLSBidWZmZXIpOworICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0KGJ1ZmZlci5kYXRh
KCksIHAgLSBidWZmZXIuZGF0YSgpKTsKICAgICAKLSAgICBBU1NFUlQocCAtIGJ1ZmZlciA8PSAo
aW50KWJ1ZmZlci5zaXplKCkpOworICAgIEFTU0VSVChwIC0gYnVmZmVyLmRhdGEoKSA8PSAoaW50
KWJ1ZmZlci5zaXplKCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vY2YvS1VSTENGTmV0LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vY2YvS1VSTENGTmV0LmNwcAkocmV2aXNpb24gMjUwNzEpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2NmL0tVUkxDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgS1VSTDo6
S1VSTChDRlVSTFJlZiB1cmwpCiAgICAgICAgICAgICBidWZmZXJbMl0gPSAnbCc7CiAgICAgICAg
ICAgICBidWZmZXJbM10gPSAnZSc7CiAgICAgICAgICAgICBidWZmZXJbNF0gPSAnOic7Ci0gICAg
ICAgICAgICBwYXJzZShidWZmZXIsIDApOworICAgICAgICAgICAgcGFyc2UoYnVmZmVyLmRhdGEo
KSwgMCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcGFyc2UoYnl0ZXMsIDApOwogICAg
IH0gZWxzZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lv
biAyNTA3MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw3IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OmxheU91dEF4
aXMoR3JpZEF4aXMKIHsKICAgICBhdmFpbGFibGVMZW4gPSBtYXgoYXZhaWxhYmxlTGVuLCAwKTsK
IAotICAgIGludCogZ3JpZExheW91dCA9IGF4aXMubV9zaXplczsKKyAgICBpbnQqIGdyaWRMYXlv
dXQgPSBheGlzLm1fc2l6ZXMuZGF0YSgpOwogCiAgICAgaWYgKCFncmlkKSB7CiAgICAgICAgIGdy
aWRMYXlvdXRbMF0gPSBhdmFpbGFibGVMZW47CkBAIC0zNjcsNyArMzY3LDcgQEAgdm9pZCBSZW5k
ZXJGcmFtZVNldDo6bGF5T3V0QXhpcyhHcmlkQXhpcwogCiAgICAgLy8gbm93IHdlIGhhdmUgdGhl
IGZpbmFsIGxheW91dCwgZGlzdHJpYnV0ZSB0aGUgZGVsdGEgb3ZlciBpdAogICAgIGJvb2wgd29y
a2VkID0gdHJ1ZTsKLSAgICBpbnQqIGdyaWREZWx0YSA9IGF4aXMubV9kZWx0YXM7CisgICAgaW50
KiBncmlkRGVsdGEgPSBheGlzLm1fZGVsdGFzLmRhdGEoKTsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGdyaWRMZW47ICsraSkgewogICAgICAgICBpZiAoZ3JpZExheW91dFtpXSAmJiBncmlkTGF5
b3V0W2ldICsgZ3JpZERlbHRhW2ldIDw9IDApCiAgICAgICAgICAgICB3b3JrZWQgPSBmYWxzZTsK
SW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvc3ZuLWNyZWF0ZS1wYXRjaA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvc3ZuLWNyZWF0ZS1wYXRjaAkocmV2aXNpb24gMjUwNzEp
CisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3N2bi1jcmVhdGUtcGF0Y2gJKHdvcmtpbmcgY29weSkK
QEAgLTI2MSw3ICsyNjEsNyBAQCBzdWIgZ2VuZXJhdGVGaWxlTGlzdCgkXCUpCiAgICAgbXkgJXRl
c3REaXJlY3RvcmllcyA9IG1hcCB7ICRfID0+IDEgfSBxdyhMYXlvdXRUZXN0cyk7CiAgICAgb3Bl
biBTVEFULCAic3ZuIHN0YXQgJyRzdGF0UGF0aCcgfCIgb3IgZGllOwogICAgIHdoaWxlIChteSAk
bGluZSA9IDxTVEFUPikgewotICAgICAgICBjaG9tcCAkbGluZTsKKyAgICAgICAgJGxpbmUgPX4g
cy9bXHJcbl0qJC8vOwogICAgICAgICBteSAkc3RhdCA9IHN1YnN0cigkbGluZSwgMCwgNyk7CiAg
ICAgICAgIG15ICRwYXRoID0gc3Vic3RyKCRsaW5lLCA3KTsKICAgICAgICAgbmV4dCBpZiAtZCAk
cGF0aDsKSW5kZXg6IFdlYktpdC93aW4vV2ViUHJlZmVyZW5jZXMuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysgV2Vi
S2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMyw3ICs1MjMs
NyBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjpsb2FkKCkKICAgICBpZiAoIVdpZGVDaGFyVG9NdWx0
aUJ5dGUoQ1BfVVRGOCwgMCwgYXBwRGF0YVBhdGgsIGFwcERhdGFQYXRoTGVuZ3RoLCAoTFBTVFIp
dXRmOFBhdGgtPmRhdGEoKSwgcmVzdWx0LCAwLCAwKSkKICAgICAgICAgZ290byBleGl0OwogCi0g
ICAgdXJsUmVmLmFkb3B0Q0YoQ0ZVUkxDcmVhdGVGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KDAsICp1dGY4UGF0aCwgcmVzdWx0LTEsIGZhbHNlKSk7CisgICAgdXJsUmVmLmFkb3B0Q0YoQ0ZV
UkxDcmVhdGVGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKDAsIHV0ZjhQYXRoLT5kYXRhKCks
IHJlc3VsdC0xLCBmYWxzZSkpOwogICAgIGlmICghdXJsUmVmKQogICAgICAgICBnb3RvIGV4aXQ7
CiAKSW5kZXg6IFdlYktpdC93aW4vV2ViVmlldy5jcHANCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQv
d2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAyNTA3MSkKKysrIFdlYktpdC93aW4vV2ViVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MjgsNyArMzgyOCw3IEBAIHN0YXRpYyBib29sIGdldENv
bXBvc2l0aW9uU3RyaW5nKEhJTUMgaEkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFZlY3Rv
cjxVQ2hhcj4gY29tcG9zaXRpb25CdWZmZXIoY29tcG9zaXRpb25MZW5ndGggLyAyKTsKICAgICBj
b21wb3NpdGlvbkxlbmd0aCA9IElNTURpY3Q6OmRpY3QoKS5nZXRDb21wb3NpdGlvblN0cmluZyho
SW5wdXRDb250ZXh0LCB0eXBlLCAoTFBWT0lEKWNvbXBvc2l0aW9uQnVmZmVyLmRhdGEoKSwgY29t
cG9zaXRpb25MZW5ndGgpOwotICAgIHJlc3VsdCA9IFN0cmluZyhjb21wb3NpdGlvbkJ1ZmZlciwg
Y29tcG9zaXRpb25MZW5ndGggLyAyKTsKKyAgICByZXN1bHQgPSBTdHJpbmcoY29tcG9zaXRpb25C
dWZmZXIuZGF0YSgpLCBjb21wb3NpdGlvbkxlbmd0aCAvIDIpOwogICAgIEFTU0VSVCghY29tcG9z
aXRpb25MZW5ndGggfHwgY29tcG9zaXRpb25CdWZmZXJbMF0pOwogICAgIEFTU0VSVCghY29tcG9z
aXRpb25MZW5ndGggfHwgY29tcG9zaXRpb25CdWZmZXJbY29tcG9zaXRpb25MZW5ndGggLyAyIC0g
MV0pOwogICAgIHJldHVybiB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15971</attachid>
            <date>2007-08-14 15:45:03 -0700</date>
            <delta_ts>2007-08-14 19:54:21 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21640</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDI1MDcxKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgSlNPYmplY3QqIEpTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvcjo6Y29uc3RydQogICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdG9S
ZWYoYXJnc1tpXSk7CiAgICAgICAgICAgICAKICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzOwotICAgICAgICByZXR1cm4gdG9KUyhtX2NhbGxiYWNrKGN0eCwgdGhpc1Jl
ZiwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkp
KSk7CisgICAgICAgIHJldHVybiB0b0pTKG1fY2FsbGJhY2soY3R4LCB0aGlzUmVmLCBhcmd1bWVu
dENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkpKSk7
CiAgICAgfQogICAgIAogICAgIHJldHVybiB0b0pTKEpTT2JqZWN0TWFrZShjdHgsIG1fY2xhc3Ms
IDApKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJ
KHJldmlzaW9uIDI1MDcxKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgSlNWYWx1ZSogSlNDYWxsYmFj
a0Z1bmN0aW9uOjpjYWxsQXNGdW5jdAogICAgICAgICBhcmd1bWVudHNbaV0gPSB0b1JlZihhcmdz
W2ldKTsKIAogICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKLSAgICByZXR1
cm4gdG9KUyhtX2NhbGxiYWNrKGV4ZWNSZWYsIHRoaXNSZWYsIHRoaXNPYmpSZWYsIGFyZ3VtZW50
Q291bnQsIGFyZ3VtZW50cywgdG9SZWYoZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSkpOworICAgIHJl
dHVybiB0b0pTKG1fY2FsbGJhY2soZXhlY1JlZiwgdGhpc1JlZiwgdGhpc09ialJlZiwgYXJndW1l
bnRDb3VudCwgYXJndW1lbnRzLmRhdGEoKSwgdG9SZWYoZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBLSlMKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjUwNzEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQCBK
U09iamVjdCogSlNDYWxsYmFja09iamVjdDo6Y29uc3RydWN0KEV4CiAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7IGkrKykKICAgICAgICAgICAgICAgICBhcmd1
bWVudHNbaV0gPSB0b1JlZihhcmdzW2ldKTsKICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrczsKLSAgICAgICAgICAgIHJldHVybiB0b0pTKGNhbGxBc0NvbnN0cnVj
dG9yKGV4ZWNSZWYsIHRoaXNSZWYsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgdG9SZWYoZXhl
Yy0+ZXhjZXB0aW9uU2xvdCgpKSkpOworICAgICAgICAgICAgcmV0dXJuIHRvSlMoY2FsbEFzQ29u
c3RydWN0b3IoZXhlY1JlZiwgdGhpc1JlZiwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLmRhdGEo
KSwgdG9SZWYoZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSkpOwogICAgICAgICB9CiAgICAgfQogICAg
IApAQCAtMjkyLDcgKzI5Miw3IEBAIEpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q6OmNhbGxBc0Z1
bmN0aW8KICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgaSsr
KQogICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IHRvUmVmKGFyZ3NbaV0pOwogICAgICAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwotICAgICAgICAgICAgcmV0
dXJuIHRvSlMoY2FsbEFzRnVuY3Rpb24oZXhlY1JlZiwgdGhpc1JlZiwgdGhpc09ialJlZiwgYXJn
dW1lbnRDb3VudCwgYXJndW1lbnRzLCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkpKSk7Cisg
ICAgICAgICAgICByZXR1cm4gdG9KUyhjYWxsQXNGdW5jdGlvbihleGVjUmVmLCB0aGlzUmVmLCB0
aGlzT2JqUmVmLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCB0b1JlZihleGVjLT5l
eGNlcHRpb25TbG90KCkpKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL2MvY19pbnN0YW5jZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNTA3MSkKKysrIEphdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL2MvY19pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MSw3ICsxMDEsNyBAQCBKU1ZhbHVlKiBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhCiAK
ICAgICB7CiAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwotICAgICAg
ICBfb2JqZWN0LT5fY2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVudCwgY0FyZ3MsIGNvdW50LCAm
cmVzdWx0VmFyaWFudCk7CisgICAgICAgIF9vYmplY3QtPl9jbGFzcy0+aW52b2tlKF9vYmplY3Qs
IGlkZW50LCBjQXJncy5kYXRhKCksIGNvdW50LCAmcmVzdWx0VmFyaWFudCk7CiAgICAgfQogCiAg
ICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCkBAIC0xMzAsNyArMTMwLDcgQEAgSlNWYWx1
ZSogQ0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKAogICAgIFZPSURfVE9fTlBWQVJJQU5U
KHJlc3VsdFZhcmlhbnQpOwogICAgIHsKICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3M7Ci0gICAgICAgIF9vYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChfb2JqZWN0
LCBjQXJncywgY291bnQsICZyZXN1bHRWYXJpYW50KTsKKyAgICAgICAgX29iamVjdC0+X2NsYXNz
LT5pbnZva2VEZWZhdWx0KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJp
YW50KTsKICAgICB9CiAgICAgCiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHANCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysg
SmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NiwxMyArODYsMTMgQEAgc3RhdGljIFVTdHJpbmcgaW50ZWdlcl9wYXJ0X25vZXhwKGRvdWJsZQog
ICAgICAgICBWZWN0b3I8Y2hhciwgMTAyND4gYnVmKGRlY2ltYWxQb2ludCArIDEpOwogICAgICAg
ICAKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSA8PSBkZWNpbWFsUG9pbnQp
IHsKLSAgICAgICAgICAgIHN0cmNweShidWYsIHJlc3VsdCk7Ci0gICAgICAgICAgICBtZW1zZXQo
YnVmICsgbGVuZ3RoLCAnMCcsIGRlY2ltYWxQb2ludCAtIGxlbmd0aCk7CisgICAgICAgICAgICBz
dHJjcHkoYnVmLmRhdGEoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIG1lbXNldChidWYuZGF0YSgp
ICsgbGVuZ3RoLCAnMCcsIGRlY2ltYWxQb2ludCAtIGxlbmd0aCk7CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgc3RybmNweShidWYsIHJlc3VsdCwgZGVjaW1hbFBvaW50KTsKKyAgICAgICAg
ICAgIHN0cm5jcHkoYnVmLmRhdGEoKSwgcmVzdWx0LCBkZWNpbWFsUG9pbnQpOwogICAgICAgICAK
ICAgICAgICAgYnVmW2RlY2ltYWxQb2ludF0gPSAnXDAnOwotICAgICAgICBzdHIgKz0gVVN0cmlu
ZyhidWYpOworICAgICAgICBzdHIgKz0gVVN0cmluZyhidWYuZGF0YSgpKTsKICAgICB9CiAgICAg
CiAgICAga2pzX2ZyZWVkdG9hKHJlc3VsdCk7CkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIFVT
dHJpbmcgY2hhcl9zZXF1ZW5jZShjaGFyIGMsIGludAogICAgIFZlY3RvcjxjaGFyLCAyMDQ4PiBi
dWYoY291bnQgKyAxLCBjKTsKICAgICBidWZbY291bnRdID0gJ1wwJzsKIAotICAgIHJldHVybiBV
U3RyaW5nKGJ1Zik7CisgICAgcmV0dXJuIFVTdHJpbmcoYnVmLmRhdGEoKSk7CiB9CiAKIHN0YXRp
YyBkb3VibGUgaW50UG93MTAoaW50IGUpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvdXN0cmlu
Zy5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvdXN0cmluZy5jcHAJKHJl
dmlzaW9uIDI1MDcxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzk2LDcgKzEzOTYsNyBAQCBDU3RyaW5nIFVTdHJpbmc6OlVURjhTdHJpbmco
KSBjb25zdAogICB9CiAKICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgYXMgYSBDIHN0cmluZy4KLSAg
Q1N0cmluZyByZXN1bHQoYnVmZmVyLCBwIC0gYnVmZmVyKTsKKyAgQ1N0cmluZyByZXN1bHQoYnVm
ZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkpOwogCiAgIHJldHVybiByZXN1bHQ7CiB9Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBKYXZhU2Ny
aXB0Q29yZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDI1MDcxKQorKysgSmF2YVNjcmlwdENvcmUv
d3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsMjMgKzQwNywxMSBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgICAgIHJldHVybiBtX2ltcGwuYnVmZmVyKClbaV07IAogICAgICAg
ICB9CiAKLSAgICAgICAgVCYgb3BlcmF0b3JbXShsb25nIGkpIHsgcmV0dXJuIGF0KGkpOyB9Ci0g
ICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10obG9uZyBpKSBjb25zdCB7IHJldHVybiBhdChpKTsg
fQotICAgICAgICBUJiBvcGVyYXRvcltdKHVuc2lnbmVkIGxvbmcgaSkgeyByZXR1cm4gYXQoaSk7
IH0KLSAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBsb25nIGkpIGNvbnN0IHsg
cmV0dXJuIGF0KGkpOyB9Ci0gICAgICAgIFQmIG9wZXJhdG9yW10oaW50IGkpIHsgcmV0dXJuIGF0
KGkpOyB9Ci0gICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0IHsgcmV0dXJu
IGF0KGkpOyB9Ci0gICAgICAgIFQmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgeyByZXR1cm4gYXQo
aSk7IH0KLSAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiBhdChpKTsgfQotICAgICAgICBUJiBvcGVyYXRvcltdKHNob3J0IGkpIHsgcmV0dXJuIGF0
KGkpOyB9Ci0gICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2hvcnQgaSkgY29uc3QgeyByZXR1
cm4gYXQoaSk7IH0KLSAgICAgICAgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBzaG9ydCBpKSB7IHJl
dHVybiBhdChpKTsgfQotICAgICAgICBjb25zdCBUJiBvcGVyYXRvcltdKHVuc2lnbmVkIHNob3J0
IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CisgICAgICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90
IGkpIHsgcmV0dXJuIGF0KGkpOyB9CisgICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90
IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAKICAgICAgICAgVCogZGF0YSgpIHsgcmV0dXJu
IG1faW1wbC5idWZmZXIoKTsgfQogICAgICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsLmJ1ZmZlcigpOyB9Ci0gICAgICAgIG9wZXJhdG9yIFQqKCkgeyByZXR1cm4gZGF0
YSgpOyB9Ci0gICAgICAgIG9wZXJhdG9yIGNvbnN0IFQqKCkgY29uc3QgeyByZXR1cm4gZGF0YSgp
OyB9CiAKICAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0KICAgICAg
ICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gYmVnaW4oKSArIG1fc2l6ZTsgfQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2
LDcgKzIzNiw3IEBAIHZvaWQgUGx1Z2luQmFzZTo6Y2FjaGVQbHVnaW5EYXRhSWZOZWNlc3MKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcGx1Z2lu
cy0+YXBwZW5kKHBsdWdpbik7Ci0gICAgICAgICAgICBpZiAoIXBsdWdpbi0+bWltZXMpCisgICAg
ICAgICAgICBpZiAocGx1Z2luLT5taW1lcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46
Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbi0+bWltZXMuZW5kKCk7CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMjUwNzEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsNyArMjgwLDcgQEAgYm9vbCBI
VE1MU2VsZWN0RWxlbWVudDo6c2F2ZVN0YXRlKFN0cmluZwogICAgICAgICBib29sIHNlbGVjdGVk
ID0gZS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQqPihlKS0+c2VsZWN0ZWQoKTsKICAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHNlbGVjdGVk
ID8gJ1gnIDogJy4nOwogICAgIH0KLSAgICB2YWx1ZSA9IFN0cmluZyhjaGFyYWN0ZXJzLCBsKTsK
KyAgICB2YWx1ZSA9IFN0cmluZyhjaGFyYWN0ZXJzLmRhdGEoKSwgbCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL21hYy9Mb2FkZXJOU1VSTEV4dHJhcy5tDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gV2ViQ29yZS9sb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFzLm0JKHJl
dmlzaW9uIDI1MDcxKQorKysgV2ViQ29yZS9sb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFzLm0J
KHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsyNDYsNyBAQCBOU1N0cmluZyAqc3VnZ2VzdGVkRmls
ZW5hbWVXaXRoTUlNRVR5cGUoCiAgICAgaWYgKCFbTUlNRVR5cGUgaXNFcXVhbFRvU3RyaW5nOkAi
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0gJiYgIVtNSU1FVHlwZSBpc0VxdWFsVG9TdHJpbmc6
QCJ0ZXh0L3BsYWluIl0pIHsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IE1J
TUVUeXBlUmVnaXN0cnk6OmdldEV4dGVuc2lvbnNGb3JNSU1FVHlwZShNSU1FVHlwZSk7CiAKLSAg
ICAgICAgaWYgKCFleHRlbnNpb25zLnNpemUoKSB8fCAoZXh0ZW5zaW9ucyAmJiAhdmVjdG9yQ29u
dGFpbnNTdHJpbmcoZXh0ZW5zaW9ucywgZXh0ZW5zaW9uKSkpIHsKKyAgICAgICAgaWYgKGV4dGVu
c2lvbnMuaXNFbXB0eSgpIHx8ICF2ZWN0b3JDb250YWluc1N0cmluZyhleHRlbnNpb25zLCBleHRl
bnNpb24pKSB7CiAgICAgICAgICAgICAvLyBUaGUgZXh0ZW5zaW9uIGRvZXNuJ3QgbWF0Y2ggdGhl
IE1JTUUgdHlwZS4gQ29ycmVjdCB0aGlzLgogICAgICAgICAgICAgTlNTdHJpbmcgKmNvcnJlY3RF
eHRlbnNpb24gPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1F
VHlwZShNSU1FVHlwZSk7CiAgICAgICAgICAgICBpZiAoW2NvcnJlY3RFeHRlbnNpb24gbGVuZ3Ro
XSAhPSAwKSB7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAyNTA3MSkKKysrIFdlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAg
RnJhbWVWaWV3Ojp+RnJhbWVWaWV3KCkKICAgICByZXNldFNjcm9sbGJhcnMoKTsKIAogICAgIEFT
U0VSVChtX3JlZkNvdW50ID09IDApOwotICAgIEFTU0VSVCgoIWQtPm1fc2NoZWR1bGVkRXZlbnRz
IHx8IGQtPm1fc2NoZWR1bGVkRXZlbnRzLmlzRW1wdHkoKSkgJiYgIWQtPm1fZW5xdWV1ZUV2ZW50
cyk7CisgICAgQVNTRVJUKGQtPm1fc2NoZWR1bGVkRXZlbnRzLmlzRW1wdHkoKSAmJiAhZC0+bV9l
bnF1ZXVlRXZlbnRzKTsKIAogICAgIGlmIChtX2ZyYW1lKSB7CiAgICAgICAgIEFTU0VSVChtX2Zy
YW1lLT52aWV3KCkgIT0gdGhpcyB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSB8fCAhbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSk7CkBAIC03ODEsNyArNzgxLDcgQEAgdm9pZCBGcmFtZVZp
ZXc6OnNjaGVkdWxlRXZlbnQoUGFzc1JlZlB0cgogCiB2b2lkIEZyYW1lVmlldzo6cGF1c2VTY2hl
ZHVsZWRFdmVudHMoKQogewotICAgIEFTU0VSVCghZC0+bV9zY2hlZHVsZWRFdmVudHMgfHwgZC0+
bV9zY2hlZHVsZWRFdmVudHMuaXNFbXB0eSgpIHx8IGQtPm1fZW5xdWV1ZUV2ZW50cyk7CisgICAg
QVNTRVJUKGQtPm1fc2NoZWR1bGVkRXZlbnRzLmlzRW1wdHkoKSB8fCBkLT5tX2VucXVldWVFdmVu
dHMpOwogICAgIGQtPm1fZW5xdWV1ZUV2ZW50cysrOwogfQogCkBAIC03OTAsNyArNzkwLDcgQEAg
dm9pZCBGcmFtZVZpZXc6OnJlc3VtZVNjaGVkdWxlZEV2ZW50cygpCiAgICAgZC0+bV9lbnF1ZXVl
RXZlbnRzLS07CiAgICAgaWYgKCFkLT5tX2VucXVldWVFdmVudHMpCiAgICAgICAgIGRpc3BhdGNo
U2NoZWR1bGVkRXZlbnRzKCk7Ci0gICAgQVNTRVJUKCFkLT5tX3NjaGVkdWxlZEV2ZW50cyB8fCBk
LT5tX3NjaGVkdWxlZEV2ZW50cy5pc0VtcHR5KCkgfHwgZC0+bV9lbnF1ZXVlRXZlbnRzKTsKKyAg
ICBBU1NFUlQoZC0+bV9zY2hlZHVsZWRFdmVudHMuaXNFbXB0eSgpIHx8IGQtPm1fZW5xdWV1ZUV2
ZW50cyk7CiB9CiAKIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVPdmVyZmxvd1N0YXR1cyhib29sIGhv
cml6b250YWxPdmVyZmxvdywgYm9vbCB2ZXJ0aWNhbE92ZXJmbG93KQpAQCAtODIxLDcgKzgyMSw3
IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVPdmVyZmxvd1N0YXR1cyhib28KIAogdm9pZCBGcmFt
ZVZpZXc6OmRpc3BhdGNoU2NoZWR1bGVkRXZlbnRzKCkKIHsKLSAgICBpZiAoIWQtPm1fc2NoZWR1
bGVkRXZlbnRzKQorICAgIGlmIChkLT5tX3NjaGVkdWxlZEV2ZW50cy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBWZWN0b3I8U2NoZWR1bGVkRXZlbnQqPiBzY2hlZHVsZWRF
dmVudHNDb3B5ID0gZC0+bV9zY2hlZHVsZWRFdmVudHM7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L0tVUkwuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2
aXNpb24gMjUwNzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDEsNyArMjQxLDcgQEAgS1VSTDo6S1VSTChjb25zdCBjaGFyICp1cmwpCiAgICAgICAg
IGJ1ZmZlclszXSA9ICdlJzsKICAgICAgICAgYnVmZmVyWzRdID0gJzonOwogICAgICAgICBtZW1j
cHkoJmJ1ZmZlcls1XSwgdXJsLCB1cmxMZW5ndGgpOwotICAgICAgICBwYXJzZShidWZmZXIsIDAp
OworICAgICAgICBwYXJzZShidWZmZXIuZGF0YSgpLCAwKTsKICAgICB9IGVsc2UKICAgICAgICAg
cGFyc2UodXJsLCAwKTsKIH0KQEAgLTI1Nyw3ICsyNTcsNyBAQCBLVVJMOjpLVVJMKGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcgJnVybCkKICAgICAgICAgYnVmZmVyWzNdID0gJ2UnOwogICAgICAgICBi
dWZmZXJbNF0gPSAnOic7CiAgICAgICAgIHVybC5jb3B5TGF0aW4xKCZidWZmZXJbNV0pOwotICAg
ICAgICBwYXJzZShidWZmZXIsIDApOworICAgICAgICBwYXJzZShidWZmZXIuZGF0YSgpLCAwKTsK
ICAgICB9IGVsc2UKICAgICAgICAgcGFyc2UodXJsLmFzY2lpKCksICZ1cmwpOwogfQpAQCAtNDA1
LDcgKzQwNSw3IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25zdCAKICAg
ICAgICAgICAgICAgICAvLyBCYXNlIHBhcnQgcGx1cyByZWxhdGl2ZSBwYXJ0IHBsdXMgb25lIHBv
c3NpYmxlIHNsYXNoIGFkZGVkIGluIGJldHdlZW4gcGx1cyB0ZXJtaW5hdGluZyBcMCBieXRlLgog
ICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyLCAyMDQ4PiBidWZmZXIoYmFzZS5wYXRoRW5kUG9z
ICsgMSArIHN0cmxlbihzdHIpICsgMSk7CiAKLSAgICAgICAgICAgICAgICBjaGFyICpidWZmZXJQ
b3MgPSBidWZmZXI7CisgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyUG9zID0gYnVmZmVyLmRh
dGEoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBmaXJzdCBjb3B5IGV2
ZXJ5dGhpbmcgYmVmb3JlIHRoZSBwYXRoIGZyb20gdGhlIGJhc2UKICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpiYXNlU3RyaW5nID0gYmFzZS51cmxTdHJpbmcuYXNjaWkoKTsKQEAgLTQ3Myw5
ICs0NzMsOSBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgCiAgICAg
ICAgICAgICAgICAgLy8gb2YgdGhlIHJlbGF0aXZlIHJlZmVyZW5jZTsgdGhpcyB3aWxsIGFsc28g
YWRkIGEgbnVsbCB0ZXJtaW5hdG9yCiAgICAgICAgICAgICAgICAgc3RyY3B5KGJ1ZmZlclBvcywg
cmVsU3RyaW5nUG9zKTsKIAotICAgICAgICAgICAgICAgIHBhcnNlKGJ1ZmZlciwgMCk7CisgICAg
ICAgICAgICAgICAgcGFyc2UoYnVmZmVyLmRhdGEoKSwgMCk7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKHN0cmxlbihidWZmZXIpICsgMSA8PSBidWZmZXIuc2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RybGVuKGJ1ZmZlci5kYXRhKCkpICsgMSA8PSBi
dWZmZXIuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpAQCAtNzg4LDE4ICs3ODgsMTggQEAgRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpkZWNv
ZGVfc3RyaW5nKGNvbgogICAgICAgICBpbnQgZW5jb2RlZFJ1bkxlbmd0aCA9IGVuY29kZWRSdW5F
bmQgLSBlbmNvZGVkUnVuUG9zaXRpb247CiAgICAgICAgIGJ1ZmZlci5jbGVhcigpOwogICAgICAg
ICBidWZmZXIucmVzaXplKGVuY29kZWRSdW5MZW5ndGggKyAxKTsKLSAgICAgICAgdXJsU3RyaW5n
LmNvcHlMYXRpbjEoYnVmZmVyLCBlbmNvZGVkUnVuUG9zaXRpb24sIGVuY29kZWRSdW5MZW5ndGgp
OworICAgICAgICB1cmxTdHJpbmcuY29weUxhdGluMShidWZmZXIuZGF0YSgpLCBlbmNvZGVkUnVu
UG9zaXRpb24sIGVuY29kZWRSdW5MZW5ndGgpOwogCiAgICAgICAgIC8vIERlY29kZSB0aGUgJS1l
c2NhcGVzIGludG8gYnl0ZXMuCi0gICAgICAgIGNoYXIgKnAgPSBidWZmZXI7Ci0gICAgICAgIGNv
bnN0IGNoYXIgKnEgPSBidWZmZXI7CisgICAgICAgIGNoYXIgKnAgPSBidWZmZXIuZGF0YSgpOwor
ICAgICAgICBjb25zdCBjaGFyICpxID0gYnVmZmVyLmRhdGEoKTsKICAgICAgICAgd2hpbGUgKCpx
KSB7CiAgICAgICAgICAgICAqcCsrID0gKGhleERpZ2l0VmFsdWUocVsxXSkgPDwgNCkgfCBoZXhE
aWdpdFZhbHVlKHFbMl0pOwogICAgICAgICAgICAgcSArPSAzOwogICAgICAgICB9CiAKICAgICAg
ICAgLy8gRGVjb2RlIHRoZSBieXRlcyBpbnRvIFVuaWNvZGUgY2hhcmFjdGVycy4KLSAgICAgICAg
U3RyaW5nIGRlY29kZWQgPSAoZW5jb2RpbmcuaXNWYWxpZCgpID8gZW5jb2RpbmcgOiBVVEY4RW5j
b2RpbmcoKSkuZGVjb2RlKGJ1ZmZlciwgcCAtIGJ1ZmZlcik7CisgICAgICAgIFN0cmluZyBkZWNv
ZGVkID0gKGVuY29kaW5nLmlzVmFsaWQoKSA/IGVuY29kaW5nIDogVVRGOEVuY29kaW5nKCkpLmRl
Y29kZShidWZmZXIuZGF0YSgpLCBwIC0gYnVmZmVyLmRhdGEoKSk7CiAgICAgICAgIGlmIChkZWNv
ZGVkLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTA2LDcgKzExMDYs
NyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAKICAgICBWZWN0
b3I8Y2hhciwgNDA5Nj4gYnVmZmVyKGZyYWdtZW50RW5kICogMyArIDEpOwogCi0gICAgY2hhciAq
cCA9IGJ1ZmZlcjsKKyAgICBjaGFyICpwID0gYnVmZmVyLmRhdGEoKTsKICAgICBjb25zdCBjaGFy
ICpzdHJQdHIgPSB1cmw7CiAKICAgICAvLyBjb3B5IGluIHRoZSBzY2hlbWUKQEAgLTExMTQsNyAr
MTExNCw3IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICB3
aGlsZSAoc3RyUHRyIDwgc2NoZW1lRW5kUHRyKSB7CiAgICAgICAgICpwKysgPSAqc3RyUHRyKys7
CiAgICAgfQotICAgIHNjaGVtZUVuZFBvcyA9IHAgLSBidWZmZXI7CisgICAgc2NoZW1lRW5kUG9z
ID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAKICAgICAvLyBDaGVjayBpZiB3ZSdyZSBodHRwIG9yIGh0
dHBzLgogICAgIGJvb2wgaXNIVFRQb3JIVFRQUyA9IG1hdGNoTGV0dGVyKHVybFswXSwgJ2gnKQpA
QCAtMTE2NCw3ICsxMTY0LDcgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNv
bnN0IAogICAgICAgICAqcCsrID0gJy8nOwogICAgICAgICAqcCsrID0gJy8nOwogCi0gICAgICAg
IHVzZXJTdGFydFBvcyA9IHAgLSBidWZmZXI7CisgICAgICAgIHVzZXJTdGFydFBvcyA9IHAgLSBi
dWZmZXIuZGF0YSgpOwogCiAgICAgICAgIC8vIGNvcHkgaW4gdGhlIHVzZXIKICAgICAgICAgc3Ry
UHRyID0gdXJsICsgdXNlclN0YXJ0OwpAQCAtMTE3Miw3ICsxMTcyLDcgQEAgdm9pZCBLVVJMOjpw
YXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgICAgICB3aGlsZSAoc3RyUHRyIDwgdXNl
ckVuZFB0cikgewogICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsKICAgICAgICAgfQotICAg
ICAgICB1c2VyRW5kUG9zID0gcCAtIGJ1ZmZlcjsKKyAgICAgICAgdXNlckVuZFBvcyA9IHAgLSBi
dWZmZXIuZGF0YSgpOwogICAgICAgICAKICAgICAgICAgLy8gY29weSBpbiB0aGUgcGFzc3dvcmQK
ICAgICAgICAgaWYgKHBhc3N3b3JkRW5kICE9IHBhc3N3b3JkU3RhcnQpIHsKQEAgLTExODMsMTAg
KzExODMsMTAgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAg
ICAgICAgICAgICAgICpwKysgPSAqc3RyUHRyKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgcGFzc3dvcmRFbmRQb3MgPSBwIC0gYnVmZmVyOworICAgICAgICBwYXNzd29yZEVu
ZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgaGFk
IGFueSB1c2VyIGluZm8sIGFkZCAiQCIKLSAgICAgICAgaWYgKHAgLSBidWZmZXIgIT0gdXNlclN0
YXJ0UG9zKSB7CisgICAgICAgIGlmIChwIC0gYnVmZmVyLmRhdGEoKSAhPSB1c2VyU3RhcnRQb3Mp
IHsKICAgICAgICAgICAgICpwKysgPSAnQCc7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMTk4
LDcgKzExOTgsNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAg
ICAgICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICBob3N0RW5kUG9zID0gcCAtIGJ1ZmZlcjsKKyAgICAgICAgaG9zdEVuZFBvcyA9
IHAgLSBidWZmZXIuZGF0YSgpOwogICAgICAgICAKICAgICAgICAgLy8gY29weSBpbiB0aGUgcG9y
dAogICAgICAgICBpZiAoaG9zdEVuZCAhPSBwb3J0U3RhcnQpIHsKQEAgLTEyMDksOSArMTIwOSw5
IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAgICAgICAg
ICAgICAqcCsrID0gKnN0clB0cisrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IHBvcnRFbmRQb3MgPSBwIC0gYnVmZmVyOworICAgICAgICBwb3J0RW5kUG9zID0gcCAtIGJ1ZmZl
ci5kYXRhKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdXNlclN0YXJ0UG9zID0gdXNlckVuZFBv
cyA9IHBhc3N3b3JkRW5kUG9zID0gaG9zdEVuZFBvcyA9IHBvcnRFbmRQb3MgPSBwIC0gYnVmZmVy
OworICAgICAgICB1c2VyU3RhcnRQb3MgPSB1c2VyRW5kUG9zID0gcGFzc3dvcmRFbmRQb3MgPSBo
b3N0RW5kUG9zID0gcG9ydEVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwogICAgIH0KIAogICAg
IC8vIEZvciBjYW5vbmljYWxpemF0aW9uLCBlbnN1cmUgd2UgaGF2ZSBhICcvJyBmb3Igbm8gcGF0
aC4KQEAgLTEyMjQsMzQgKzEyMjQsMzQgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1
cmwsIGNvbnN0IAogICAgIAogICAgIGlmIChoaWVyYXJjaGljYWwgJiYgaGFzU2xhc2hEb3RPckRv
dERvdCh1cmwpKSB7CiAgICAgICAgIFZlY3RvcjxjaGFyLCA0MDk2PiBwYXRoX2J1ZmZlcihwYXRo
RW5kIC0gcGF0aFN0YXJ0ICsgMSk7Ci0gICAgICAgIGNvcHlQYXRoUmVtb3ZpbmdEb3RzKHBhdGhf
YnVmZmVyLCB1cmwsIHBhdGhTdGFydCwgcGF0aEVuZCk7Ci0gICAgICAgIGFwcGVuZEVzY2FwaW5n
QmFkQ2hhcnMocCwgcGF0aF9idWZmZXIsIHN0cmxlbihwYXRoX2J1ZmZlcikpOworICAgICAgICBj
b3B5UGF0aFJlbW92aW5nRG90cyhwYXRoX2J1ZmZlci5kYXRhKCksIHVybCwgcGF0aFN0YXJ0LCBw
YXRoRW5kKTsKKyAgICAgICAgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCBwYXRoX2J1ZmZlci5k
YXRhKCksIHN0cmxlbihwYXRoX2J1ZmZlci5kYXRhKCkpKTsKICAgICB9IGVsc2UKICAgICAgICAg
YXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCB1cmwgKyBwYXRoU3RhcnQsIHBhdGhFbmQgLSBwYXRo
U3RhcnQpOwogCi0gICAgcGF0aEVuZFBvcyA9IHAgLSBidWZmZXI7CisgICAgcGF0aEVuZFBvcyA9
IHAgLSBidWZmZXIuZGF0YSgpOwogICAgIAogICAgIAogICAgIC8vIGFkZCBxdWVyeSwgZXNjYXBp
bmcgYmFkIGNoYXJhY3RlcnMKICAgICBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKHAsIHVybCArIHF1
ZXJ5U3RhcnQsIHF1ZXJ5RW5kIC0gcXVlcnlTdGFydCk7Ci0gICAgcXVlcnlFbmRQb3MgPSBwIC0g
YnVmZmVyOworICAgIHF1ZXJ5RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAgICAgCiAgICAg
Ly8gYWRkIGZyYWdtZW50LCBlc2NhcGluZyBiYWQgY2hhcmFjdGVycwogICAgIGlmIChmcmFnbWVu
dEVuZCAhPSBxdWVyeUVuZCkgewogICAgICAgICAqcCsrID0gJyMnOwogICAgICAgICBhcHBlbmRF
c2NhcGluZ0JhZENoYXJzKHAsIHVybCArIGZyYWdtZW50U3RhcnQsIGZyYWdtZW50RW5kIC0gZnJh
Z21lbnRTdGFydCk7CiAgICAgfQotICAgIGZyYWdtZW50RW5kUG9zID0gcCAtIGJ1ZmZlcjsKKyAg
ICBmcmFnbWVudEVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwogCiAgICAgLy8gSWYgd2UgZGlk
bid0IGVuZCB1cCBhY3R1YWxseSBjaGFuZ2luZyB0aGUgb3JpZ2luYWwgc3RyaW5nIGFuZAogICAg
IC8vIGl0IHN0YXJ0ZWQgYXMgYSBEZXByZWNhdGVkU3RyaW5nLCBqdXN0IHJldXNlIGl0LCB0byBh
dm9pZCBleHRyYQogICAgIC8vIGFsbG9jYXRpb24uCi0gICAgaWYgKG9yaWdpbmFsU3RyaW5nICYm
IHN0cm5jbXAoYnVmZmVyLCB1cmwsIGZyYWdtZW50RW5kUG9zKSA9PSAwKSB7CisgICAgaWYgKG9y
aWdpbmFsU3RyaW5nICYmIHN0cm5jbXAoYnVmZmVyLmRhdGEoKSwgdXJsLCBmcmFnbWVudEVuZFBv
cykgPT0gMCkgewogICAgICAgICB1cmxTdHJpbmcgPSAqb3JpZ2luYWxTdHJpbmc7CiAgICAgfSBl
bHNlCi0gICAgICAgIHVybFN0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmcoYnVmZmVyLCBmcmFnbWVu
dEVuZFBvcyk7CisgICAgICAgIHVybFN0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmcoYnVmZmVyLmRh
dGEoKSwgZnJhZ21lbnRFbmRQb3MpOwogCi0gICAgQVNTRVJUKHAgLSBidWZmZXIgPD0gKGludCli
dWZmZXIuc2l6ZSgpKTsKKyAgICBBU1NFUlQocCAtIGJ1ZmZlci5kYXRhKCkgPD0gKGludClidWZm
ZXIuc2l6ZSgpKTsKIH0KIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtVUkwgJmEsIGNvbnN0IEtV
UkwgJmIpCkBAIC0xMjY5LDcgKzEyNjksNyBAQCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OmVuY29k
ZV9zdHJpbmcoY29uCiAgICAgRGVwcmVjYXRlZENTdHJpbmcgYXNVVEY4ID0gbm90RW5jb2RlZFN0
cmluZy51dGY4KCk7CiAgICAgCiAgICAgVmVjdG9yPGNoYXIsIDQwOTY+IGJ1ZmZlcihhc1VURjgu
bGVuZ3RoKCkgKiAzICsgMSk7Ci0gICAgY2hhciAqcCA9IGJ1ZmZlcjsKKyAgICBjaGFyICpwID0g
YnVmZmVyLmRhdGEoKTsKIAogICAgIGNvbnN0IGNoYXIgKnN0ciA9IGFzVVRGODsKICAgICBjb25z
dCBjaGFyICpzdHJFbmQgPSBzdHIgKyBhc1VURjgubGVuZ3RoKCk7CkBAIC0xMjgzLDkgKzEyODMs
OSBAQCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OmVuY29kZV9zdHJpbmcoY29uCiAgICAgICAgICAg
ICAqcCsrID0gYzsKICAgICB9CiAgICAgCi0gICAgRGVwcmVjYXRlZFN0cmluZyByZXN1bHQoYnVm
ZmVyLCBwIC0gYnVmZmVyKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdChidWZmZXIuZGF0
YSgpLCBwIC0gYnVmZmVyLmRhdGEoKSk7CiAgICAgCi0gICAgQVNTRVJUKHAgLSBidWZmZXIgPD0g
KGludClidWZmZXIuc2l6ZSgpKTsKKyAgICBBU1NFUlQocCAtIGJ1ZmZlci5kYXRhKCkgPD0gKGlu
dClidWZmZXIuc2l6ZSgpKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2NmL0tVUkxDRk5ldC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRm
b3JtL2NmL0tVUkxDRk5ldC5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9jZi9LVVJMQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIEtVUkw6
OktVUkwoQ0ZVUkxSZWYgdXJsKQogICAgICAgICAgICAgYnVmZmVyWzJdID0gJ2wnOwogICAgICAg
ICAgICAgYnVmZmVyWzNdID0gJ2UnOwogICAgICAgICAgICAgYnVmZmVyWzRdID0gJzonOwotICAg
ICAgICAgICAgcGFyc2UoYnVmZmVyLCAwKTsKKyAgICAgICAgICAgIHBhcnNlKGJ1ZmZlci5kYXRh
KCksIDApOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHBhcnNlKGJ5dGVzLCAwKTsKICAg
ICB9IGVsc2UKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0tVUkxNYWMubW0NCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9LVVJMTWFjLm1tCShyZXZpc2lvbiAyNTA3MSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0tVUkxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDcgKzQ2LDcgQEAgS1VSTDo6S1VSTChOU1VSTCAqdXJsKQogICAgICAgICAgICAgYnVmZmVyWzJd
ID0gJ2wnOwogICAgICAgICAgICAgYnVmZmVyWzNdID0gJ2UnOwogICAgICAgICAgICAgYnVmZmVy
WzRdID0gJzonOwotICAgICAgICAgICAgcGFyc2UoYnVmZmVyLCAwKTsKKyAgICAgICAgICAgIHBh
cnNlKGJ1ZmZlci5kYXRhKCksIDApOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHBhcnNl
KGJ5dGVzLCAwKTsKICAgICB9IGVsc2UKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BsdWdJ
bkluZm9TdG9yZU1hYy5tbQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Bs
dWdJbkluZm9TdG9yZU1hYy5tbQkocmV2aXNpb24gMjUwNzEpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L21hYy9QbHVnSW5JbmZvU3RvcmVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcg
QEAgUGx1Z2luSW5mbyAqUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaQogCiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKLSAgICBpZiAocGx1Z2luSW5mbyAmJiBwbHVnaW5J
bmZvLT5taW1lcykKKyAgICBpZiAocGx1Z2luSW5mbyAmJiAhcGx1Z2luSW5mby0+bWltZXMuaXNF
bXB0eSgpKQogICAgICAgICBkZWxldGVBbGxWYWx1ZXMocGx1Z2luSW5mby0+bWltZXMpOwogICAg
IGRlbGV0ZSBwbHVnaW5JbmZvOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFt
ZVNldC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNl
dC5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVT
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDcgQEAgdm9pZCBSZW5kZXJGcmFt
ZVNldDo6bGF5T3V0QXhpcyhHcmlkQXhpcwogewogICAgIGF2YWlsYWJsZUxlbiA9IG1heChhdmFp
bGFibGVMZW4sIDApOwogCi0gICAgaW50KiBncmlkTGF5b3V0ID0gYXhpcy5tX3NpemVzOworICAg
IGludCogZ3JpZExheW91dCA9IGF4aXMubV9zaXplcy5kYXRhKCk7CiAKICAgICBpZiAoIWdyaWQp
IHsKICAgICAgICAgZ3JpZExheW91dFswXSA9IGF2YWlsYWJsZUxlbjsKQEAgLTM2Nyw3ICszNjcs
NyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpsYXlPdXRBeGlzKEdyaWRBeGlzCiAKICAgICAvLyBu
b3cgd2UgaGF2ZSB0aGUgZmluYWwgbGF5b3V0LCBkaXN0cmlidXRlIHRoZSBkZWx0YSBvdmVyIGl0
CiAgICAgYm9vbCB3b3JrZWQgPSB0cnVlOwotICAgIGludCogZ3JpZERlbHRhID0gYXhpcy5tX2Rl
bHRhczsKKyAgICBpbnQqIGdyaWREZWx0YSA9IGF4aXMubV9kZWx0YXMuZGF0YSgpOwogICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZ3JpZExlbjsgKytpKSB7CiAgICAgICAgIGlmIChncmlkTGF5b3V0
W2ldICYmIGdyaWRMYXlvdXRbaV0gKyBncmlkRGVsdGFbaV0gPD0gMCkKICAgICAgICAgICAgIHdv
cmtlZCA9IGZhbHNlOwpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9zdm4tY3JlYXRlLXBhdGNo
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9zdm4tY3JlYXRlLXBhdGNoCShy
ZXZpc2lvbiAyNTA3MSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvc3ZuLWNyZWF0ZS1wYXRjaAko
d29ya2luZyBjb3B5KQpAQCAtMjYxLDcgKzI2MSw3IEBAIHN1YiBnZW5lcmF0ZUZpbGVMaXN0KCRc
JSkKICAgICBteSAldGVzdERpcmVjdG9yaWVzID0gbWFwIHsgJF8gPT4gMSB9IHF3KExheW91dFRl
c3RzKTsKICAgICBvcGVuIFNUQVQsICJzdm4gc3RhdCAnJHN0YXRQYXRoJyB8IiBvciBkaWU7CiAg
ICAgd2hpbGUgKG15ICRsaW5lID0gPFNUQVQ+KSB7Ci0gICAgICAgIGNob21wICRsaW5lOworICAg
ICAgICAkbGluZSA9fiBzL1tcclxuXSokLy87CiAgICAgICAgIG15ICRzdGF0ID0gc3Vic3RyKCRs
aW5lLCAwLCA3KTsKICAgICAgICAgbXkgJHBhdGggPSBzdWJzdHIoJGxpbmUsIDcpOwogICAgICAg
ICBuZXh0IGlmIC1kICRwYXRoOwpJbmRleDogV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBXZWJLaXQvd2luL1dlYlByZWZlcmVuY2VzLmNwcAkocmV2aXNpb24g
MjUwNzEpCisrKyBXZWJLaXQvd2luL1dlYlByZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTIzLDcgKzUyMyw3IEBAIHZvaWQgV2ViUHJlZmVyZW5jZXM6OmxvYWQoKQogICAgIGlmICgh
V2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCBhcHBEYXRhUGF0aCwgYXBwRGF0YVBhdGhM
ZW5ndGgsIChMUFNUUil1dGY4UGF0aC0+ZGF0YSgpLCByZXN1bHQsIDAsIDApKQogICAgICAgICBn
b3RvIGV4aXQ7CiAKLSAgICB1cmxSZWYuYWRvcHRDRihDRlVSTENyZWF0ZUZyb21GaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24oMCwgKnV0ZjhQYXRoLCByZXN1bHQtMSwgZmFsc2UpKTsKKyAgICB1cmxS
ZWYuYWRvcHRDRihDRlVSTENyZWF0ZUZyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oMCwgdXRm
OFBhdGgtPmRhdGEoKSwgcmVzdWx0LTEsIGZhbHNlKSk7CiAgICAgaWYgKCF1cmxSZWYpCiAgICAg
ICAgIGdvdG8gZXhpdDsKIApJbmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmNwcA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysgV2ViS2l0
L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgyOCw3ICszODI4LDcgQEAgc3Rh
dGljIGJvb2wgZ2V0Q29tcG9zaXRpb25TdHJpbmcoSElNQyBoSQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgVmVjdG9yPFVDaGFyPiBjb21wb3NpdGlvbkJ1ZmZlcihjb21wb3NpdGlvbkxlbmd0
aCAvIDIpOwogICAgIGNvbXBvc2l0aW9uTGVuZ3RoID0gSU1NRGljdDo6ZGljdCgpLmdldENvbXBv
c2l0aW9uU3RyaW5nKGhJbnB1dENvbnRleHQsIHR5cGUsIChMUFZPSUQpY29tcG9zaXRpb25CdWZm
ZXIuZGF0YSgpLCBjb21wb3NpdGlvbkxlbmd0aCk7Ci0gICAgcmVzdWx0ID0gU3RyaW5nKGNvbXBv
c2l0aW9uQnVmZmVyLCBjb21wb3NpdGlvbkxlbmd0aCAvIDIpOworICAgIHJlc3VsdCA9IFN0cmlu
Zyhjb21wb3NpdGlvbkJ1ZmZlci5kYXRhKCksIGNvbXBvc2l0aW9uTGVuZ3RoIC8gMik7CiAgICAg
QVNTRVJUKCFjb21wb3NpdGlvbkxlbmd0aCB8fCBjb21wb3NpdGlvbkJ1ZmZlclswXSk7CiAgICAg
QVNTRVJUKCFjb21wb3NpdGlvbkxlbmd0aCB8fCBjb21wb3NpdGlvbkJ1ZmZlcltjb21wb3NpdGlv
bkxlbmd0aCAvIDIgLSAxXSk7CiAgICAgcmV0dXJuIHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15972</attachid>
            <date>2007-08-14 15:51:49 -0700</date>
            <delta_ts>2007-08-14 19:54:21 -0700</delta_ts>
            <desc>partial (safe) patch v1</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>16074</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyNTA3MSkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIEpTT2JqZWN0KiBKU0NhbGxi
YWNrQ29uc3RydWN0b3I6OmNvbnN0cnUKICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IHRvUmVm
KGFyZ3NbaV0pOwogICAgICAgICAgICAgCiAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrczsKLSAgICAgICAgcmV0dXJuIHRvSlMobV9jYWxsYmFjayhjdHgsIHRoaXNSZWYs
IGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgdG9SZWYoZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSkp
OworICAgICAgICByZXR1cm4gdG9KUyhtX2NhbGxiYWNrKGN0eCwgdGhpc1JlZiwgYXJndW1lbnRD
b3VudCwgYXJndW1lbnRzLmRhdGEoKSwgdG9SZWYoZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSkpOwog
ICAgIH0KICAgICAKICAgICByZXR1cm4gdG9KUyhKU09iamVjdE1ha2UoY3R4LCBtX2NsYXNzLCAw
KSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjUwNzEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBKU1ZhbHVlKiBKU0NhbGxiYWNrRnVu
Y3Rpb246OmNhbGxBc0Z1bmN0CiAgICAgICAgIGFyZ3VtZW50c1tpXSA9IHRvUmVmKGFyZ3NbaV0p
OwogCiAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwotICAgIHJldHVybiB0
b0pTKG1fY2FsbGJhY2soZXhlY1JlZiwgdGhpc1JlZiwgdGhpc09ialJlZiwgYXJndW1lbnRDb3Vu
dCwgYXJndW1lbnRzLCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkpKSk7CisgICAgcmV0dXJu
IHRvSlMobV9jYWxsYmFjayhleGVjUmVmLCB0aGlzUmVmLCB0aGlzT2JqUmVmLCBhcmd1bWVudENv
dW50LCBhcmd1bWVudHMuZGF0YSgpLCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkpKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
T2JqZWN0LmNwcAkocmV2aXNpb24gMjUwNzEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQCBKU09iamVj
dCogSlNDYWxsYmFja09iamVjdDo6Y29uc3RydWN0KEV4CiAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7IGkrKykKICAgICAgICAgICAgICAgICBhcmd1bWVudHNb
aV0gPSB0b1JlZihhcmdzW2ldKTsKICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrczsKLSAgICAgICAgICAgIHJldHVybiB0b0pTKGNhbGxBc0NvbnN0cnVjdG9yKGV4
ZWNSZWYsIHRoaXNSZWYsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgdG9SZWYoZXhlYy0+ZXhj
ZXB0aW9uU2xvdCgpKSkpOworICAgICAgICAgICAgcmV0dXJuIHRvSlMoY2FsbEFzQ29uc3RydWN0
b3IoZXhlY1JlZiwgdGhpc1JlZiwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLmRhdGEoKSwgdG9S
ZWYoZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAt
MjkyLDcgKzI5Miw3IEBAIEpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q6OmNhbGxBc0Z1bmN0aW8K
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgaSsrKQogICAg
ICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IHRvUmVmKGFyZ3NbaV0pOwogICAgICAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwotICAgICAgICAgICAgcmV0dXJuIHRv
SlMoY2FsbEFzRnVuY3Rpb24oZXhlY1JlZiwgdGhpc1JlZiwgdGhpc09ialJlZiwgYXJndW1lbnRD
b3VudCwgYXJndW1lbnRzLCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkpKSk7CisgICAgICAg
ICAgICByZXR1cm4gdG9KUyhjYWxsQXNGdW5jdGlvbihleGVjUmVmLCB0aGlzUmVmLCB0aGlzT2Jq
UmVmLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCB0b1JlZihleGVjLT5leGNlcHRp
b25TbG90KCkpKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL2MvY19pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmlu
ZGluZ3MvYy9jX2luc3RhbmNlLmNwcAkocmV2aXNpb24gMjUwNzEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9jL2NfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAx
LDcgQEAgSlNWYWx1ZSogQ0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YQogCiAgICAgewog
ICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKLSAgICAgICAgX29iamVj
dC0+X2NsYXNzLT5pbnZva2UoX29iamVjdCwgaWRlbnQsIGNBcmdzLCBjb3VudCwgJnJlc3VsdFZh
cmlhbnQpOworICAgICAgICBfb2JqZWN0LT5fY2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVudCwg
Y0FyZ3MuZGF0YSgpLCBjb3VudCwgJnJlc3VsdFZhcmlhbnQpOwogICAgIH0KIAogICAgIGZvciAo
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQpAQCAtMTMwLDcgKzEzMCw3IEBAIEpTVmFsdWUqIENJbnN0
YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZCgKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRW
YXJpYW50KTsKICAgICB7CiAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
OwotICAgICAgICBfb2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQoX29iamVjdCwgY0FyZ3Ms
IGNvdW50LCAmcmVzdWx0VmFyaWFudCk7CisgICAgICAgIF9vYmplY3QtPl9jbGFzcy0+aW52b2tl
RGVmYXVsdChfb2JqZWN0LCBjQXJncy5kYXRhKCksIGNvdW50LCAmcmVzdWx0VmFyaWFudCk7CiAg
ICAgfQogICAgIAogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAkocmV2aXNpb24gMjUwNzEpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDEzICs4Niwx
MyBAQCBzdGF0aWMgVVN0cmluZyBpbnRlZ2VyX3BhcnRfbm9leHAoZG91YmxlCiAgICAgICAgIFZl
Y3RvcjxjaGFyLCAxMDI0PiBidWYoZGVjaW1hbFBvaW50ICsgMSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpIDw9IGRlY2ltYWxQb2ludCkgewotICAgICAg
ICAgICAgc3RyY3B5KGJ1ZiwgcmVzdWx0KTsKLSAgICAgICAgICAgIG1lbXNldChidWYgKyBsZW5n
dGgsICcwJywgZGVjaW1hbFBvaW50IC0gbGVuZ3RoKTsKKyAgICAgICAgICAgIHN0cmNweShidWYu
ZGF0YSgpLCByZXN1bHQpOworICAgICAgICAgICAgbWVtc2V0KGJ1Zi5kYXRhKCkgKyBsZW5ndGgs
ICcwJywgZGVjaW1hbFBvaW50IC0gbGVuZ3RoKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBzdHJuY3B5KGJ1ZiwgcmVzdWx0LCBkZWNpbWFsUG9pbnQpOworICAgICAgICAgICAgc3RybmNw
eShidWYuZGF0YSgpLCByZXN1bHQsIGRlY2ltYWxQb2ludCk7CiAgICAgICAgIAogICAgICAgICBi
dWZbZGVjaW1hbFBvaW50XSA9ICdcMCc7Ci0gICAgICAgIHN0ciArPSBVU3RyaW5nKGJ1Zik7Cisg
ICAgICAgIHN0ciArPSBVU3RyaW5nKGJ1Zi5kYXRhKCkpOwogICAgIH0KICAgICAKICAgICBranNf
ZnJlZWR0b2EocmVzdWx0KTsKQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0aWMgVVN0cmluZyBjaGFy
X3NlcXVlbmNlKGNoYXIgYywgaW50CiAgICAgVmVjdG9yPGNoYXIsIDIwNDg+IGJ1Zihjb3VudCAr
IDEsIGMpOwogICAgIGJ1Zltjb3VudF0gPSAnXDAnOwogCi0gICAgcmV0dXJuIFVTdHJpbmcoYnVm
KTsKKyAgICByZXR1cm4gVVN0cmluZyhidWYuZGF0YSgpKTsKIH0KIAogc3RhdGljIGRvdWJsZSBp
bnRQb3cxMChpbnQgZSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy91c3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvdXN0cmluZy5jcHAJKHJldmlzaW9uIDI1MDcx
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
Mzk2LDcgKzEzOTYsNyBAQCBDU3RyaW5nIFVTdHJpbmc6OlVURjhTdHJpbmcoKSBjb25zdAogICB9
CiAKICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgYXMgYSBDIHN0cmluZy4KLSAgQ1N0cmluZyByZXN1
bHQoYnVmZmVyLCBwIC0gYnVmZmVyKTsKKyAgQ1N0cmluZyByZXN1bHQoYnVmZmVyLmRhdGEoKSwg
cCAtIGJ1ZmZlci5kYXRhKCkpOwogCiAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysgV2ViQ29yZS9odG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDcgKzI4MCw3IEBAIGJv
b2wgSFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVTdGF0ZShTdHJpbmcKICAgICAgICAgYm9vbCBzZWxl
Y3RlZCA9IGUtPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpICYmIHN0YXRpY19jYXN0PEhUTUxPcHRp
b25FbGVtZW50Kj4oZSktPnNlbGVjdGVkKCk7CiAgICAgICAgIGNoYXJhY3RlcnNbaV0gPSBzZWxl
Y3RlZCA/ICdYJyA6ICcuJzsKICAgICB9Ci0gICAgdmFsdWUgPSBTdHJpbmcoY2hhcmFjdGVycywg
bCk7CisgICAgdmFsdWUgPSBTdHJpbmcoY2hhcmFjdGVycy5kYXRhKCksIGwpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIEtV
Ukw6OktVUkwoY29uc3QgY2hhciAqdXJsKQogICAgICAgICBidWZmZXJbM10gPSAnZSc7CiAgICAg
ICAgIGJ1ZmZlcls0XSA9ICc6JzsKICAgICAgICAgbWVtY3B5KCZidWZmZXJbNV0sIHVybCwgdXJs
TGVuZ3RoKTsKLSAgICAgICAgcGFyc2UoYnVmZmVyLCAwKTsKKyAgICAgICAgcGFyc2UoYnVmZmVy
LmRhdGEoKSwgMCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHBhcnNlKHVybCwgMCk7CiB9CkBAIC0y
NTcsNyArMjU3LDcgQEAgS1VSTDo6S1VSTChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ1cmwpCiAg
ICAgICAgIGJ1ZmZlclszXSA9ICdlJzsKICAgICAgICAgYnVmZmVyWzRdID0gJzonOwogICAgICAg
ICB1cmwuY29weUxhdGluMSgmYnVmZmVyWzVdKTsKLSAgICAgICAgcGFyc2UoYnVmZmVyLCAwKTsK
KyAgICAgICAgcGFyc2UoYnVmZmVyLmRhdGEoKSwgMCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHBh
cnNlKHVybC5hc2NpaSgpLCAmdXJsKTsKIH0KQEAgLTQwNSw3ICs0MDUsNyBAQCB2b2lkIEtVUkw6
OmluaXQoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgCiAgICAgICAgICAgICAgICAgLy8gQmFzZSBw
YXJ0IHBsdXMgcmVsYXRpdmUgcGFydCBwbHVzIG9uZSBwb3NzaWJsZSBzbGFzaCBhZGRlZCBpbiBi
ZXR3ZWVuIHBsdXMgdGVybWluYXRpbmcgXDAgYnl0ZS4KICAgICAgICAgICAgICAgICBWZWN0b3I8
Y2hhciwgMjA0OD4gYnVmZmVyKGJhc2UucGF0aEVuZFBvcyArIDEgKyBzdHJsZW4oc3RyKSArIDEp
OwogCi0gICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyUG9zID0gYnVmZmVyOworICAgICAgICAg
ICAgICAgIGNoYXIgKmJ1ZmZlclBvcyA9IGJ1ZmZlci5kYXRhKCk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgLy8gZmlyc3QgY29weSBldmVyeXRoaW5nIGJlZm9yZSB0aGUgcGF0
aCBmcm9tIHRoZSBiYXNlCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZyA9
IGJhc2UudXJsU3RyaW5nLmFzY2lpKCk7CkBAIC00NzMsOSArNDczLDkgQEAgdm9pZCBLVVJMOjpp
bml0KGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IAogICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBy
ZWxhdGl2ZSByZWZlcmVuY2U7IHRoaXMgd2lsbCBhbHNvIGFkZCBhIG51bGwgdGVybWluYXRvcgog
ICAgICAgICAgICAgICAgIHN0cmNweShidWZmZXJQb3MsIHJlbFN0cmluZ1Bvcyk7CiAKLSAgICAg
ICAgICAgICAgICBwYXJzZShidWZmZXIsIDApOworICAgICAgICAgICAgICAgIHBhcnNlKGJ1ZmZl
ci5kYXRhKCksIDApOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFTU0VSVChz
dHJsZW4oYnVmZmVyKSArIDEgPD0gYnVmZmVyLnNpemUoKSk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKHN0cmxlbihidWZmZXIuZGF0YSgpKSArIDEgPD0gYnVmZmVyLnNpemUoKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc4OCwxOCArNzg4
LDE4IEBAIERlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6ZGVjb2RlX3N0cmluZyhjb24KICAgICAgICAg
aW50IGVuY29kZWRSdW5MZW5ndGggPSBlbmNvZGVkUnVuRW5kIC0gZW5jb2RlZFJ1blBvc2l0aW9u
OwogICAgICAgICBidWZmZXIuY2xlYXIoKTsKICAgICAgICAgYnVmZmVyLnJlc2l6ZShlbmNvZGVk
UnVuTGVuZ3RoICsgMSk7Ci0gICAgICAgIHVybFN0cmluZy5jb3B5TGF0aW4xKGJ1ZmZlciwgZW5j
b2RlZFJ1blBvc2l0aW9uLCBlbmNvZGVkUnVuTGVuZ3RoKTsKKyAgICAgICAgdXJsU3RyaW5nLmNv
cHlMYXRpbjEoYnVmZmVyLmRhdGEoKSwgZW5jb2RlZFJ1blBvc2l0aW9uLCBlbmNvZGVkUnVuTGVu
Z3RoKTsKIAogICAgICAgICAvLyBEZWNvZGUgdGhlICUtZXNjYXBlcyBpbnRvIGJ5dGVzLgotICAg
ICAgICBjaGFyICpwID0gYnVmZmVyOwotICAgICAgICBjb25zdCBjaGFyICpxID0gYnVmZmVyOwor
ICAgICAgICBjaGFyICpwID0gYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgY29uc3QgY2hhciAqcSA9
IGJ1ZmZlci5kYXRhKCk7CiAgICAgICAgIHdoaWxlICgqcSkgewogICAgICAgICAgICAgKnArKyA9
IChoZXhEaWdpdFZhbHVlKHFbMV0pIDw8IDQpIHwgaGV4RGlnaXRWYWx1ZShxWzJdKTsKICAgICAg
ICAgICAgIHEgKz0gMzsKICAgICAgICAgfQogCiAgICAgICAgIC8vIERlY29kZSB0aGUgYnl0ZXMg
aW50byBVbmljb2RlIGNoYXJhY3RlcnMuCi0gICAgICAgIFN0cmluZyBkZWNvZGVkID0gKGVuY29k
aW5nLmlzVmFsaWQoKSA/IGVuY29kaW5nIDogVVRGOEVuY29kaW5nKCkpLmRlY29kZShidWZmZXIs
IHAgLSBidWZmZXIpOworICAgICAgICBTdHJpbmcgZGVjb2RlZCA9IChlbmNvZGluZy5pc1ZhbGlk
KCkgPyBlbmNvZGluZyA6IFVURjhFbmNvZGluZygpKS5kZWNvZGUoYnVmZmVyLmRhdGEoKSwgcCAt
IGJ1ZmZlci5kYXRhKCkpOwogICAgICAgICBpZiAoZGVjb2RlZC5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIApAQCAtMTEwNiw3ICsxMTA2LDcgQEAgdm9pZCBLVVJMOjpwYXJzZShj
b25zdCBjaGFyICp1cmwsIGNvbnN0IAogCiAgICAgVmVjdG9yPGNoYXIsIDQwOTY+IGJ1ZmZlcihm
cmFnbWVudEVuZCAqIDMgKyAxKTsKIAotICAgIGNoYXIgKnAgPSBidWZmZXI7CisgICAgY2hhciAq
cCA9IGJ1ZmZlci5kYXRhKCk7CiAgICAgY29uc3QgY2hhciAqc3RyUHRyID0gdXJsOwogCiAgICAg
Ly8gY29weSBpbiB0aGUgc2NoZW1lCkBAIC0xMTE0LDcgKzExMTQsNyBAQCB2b2lkIEtVUkw6OnBh
cnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgd2hpbGUgKHN0clB0ciA8IHNjaGVtZUVu
ZFB0cikgewogICAgICAgICAqcCsrID0gKnN0clB0cisrOwogICAgIH0KLSAgICBzY2hlbWVFbmRQ
b3MgPSBwIC0gYnVmZmVyOworICAgIHNjaGVtZUVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwog
CiAgICAgLy8gQ2hlY2sgaWYgd2UncmUgaHR0cCBvciBodHRwcy4KICAgICBib29sIGlzSFRUUG9y
SFRUUFMgPSBtYXRjaExldHRlcih1cmxbMF0sICdoJykKQEAgLTExNjQsNyArMTE2NCw3IEBAIHZv
aWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAgICAgKnArKyA9ICcv
JzsKICAgICAgICAgKnArKyA9ICcvJzsKIAotICAgICAgICB1c2VyU3RhcnRQb3MgPSBwIC0gYnVm
ZmVyOworICAgICAgICB1c2VyU3RhcnRQb3MgPSBwIC0gYnVmZmVyLmRhdGEoKTsKIAogICAgICAg
ICAvLyBjb3B5IGluIHRoZSB1c2VyCiAgICAgICAgIHN0clB0ciA9IHVybCArIHVzZXJTdGFydDsK
QEAgLTExNzIsNyArMTE3Miw3IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBj
b25zdCAKICAgICAgICAgd2hpbGUgKHN0clB0ciA8IHVzZXJFbmRQdHIpIHsKICAgICAgICAgICAg
ICpwKysgPSAqc3RyUHRyKys7CiAgICAgICAgIH0KLSAgICAgICAgdXNlckVuZFBvcyA9IHAgLSBi
dWZmZXI7CisgICAgICAgIHVzZXJFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEoKTsKICAgICAgICAg
CiAgICAgICAgIC8vIGNvcHkgaW4gdGhlIHBhc3N3b3JkCiAgICAgICAgIGlmIChwYXNzd29yZEVu
ZCAhPSBwYXNzd29yZFN0YXJ0KSB7CkBAIC0xMTgzLDEwICsxMTgzLDEwIEBAIHZvaWQgS1VSTDo6
cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAgICAgICAgICAgICAqcCsrID0gKnN0
clB0cisrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHBhc3N3b3JkRW5kUG9z
ID0gcCAtIGJ1ZmZlcjsKKyAgICAgICAgcGFzc3dvcmRFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEo
KTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGhhZCBhbnkgdXNlciBpbmZvLCBhZGQgIkAi
Ci0gICAgICAgIGlmIChwIC0gYnVmZmVyICE9IHVzZXJTdGFydFBvcykgeworICAgICAgICBpZiAo
cCAtIGJ1ZmZlci5kYXRhKCkgIT0gdXNlclN0YXJ0UG9zKSB7CiAgICAgICAgICAgICAqcCsrID0g
J0AnOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTE5OCw3ICsxMTk4LDcgQEAgdm9pZCBLVVJM
OjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgICAgICAgICAgICAgICpwKysgPSAq
c3RyUHRyKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaG9zdEVuZFBvcyA9
IHAgLSBidWZmZXI7CisgICAgICAgIGhvc3RFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEoKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIGNvcHkgaW4gdGhlIHBvcnQKICAgICAgICAgaWYgKGhvc3RFbmQg
IT0gcG9ydFN0YXJ0KSB7CkBAIC0xMjA5LDkgKzEyMDksOSBAQCB2b2lkIEtVUkw6OnBhcnNlKGNv
bnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBwb3J0RW5kUG9zID0gcCAtIGJ1ZmZl
cjsKKyAgICAgICAgcG9ydEVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIHVzZXJTdGFydFBvcyA9IHVzZXJFbmRQb3MgPSBwYXNzd29yZEVuZFBvcyA9IGhv
c3RFbmRQb3MgPSBwb3J0RW5kUG9zID0gcCAtIGJ1ZmZlcjsKKyAgICAgICAgdXNlclN0YXJ0UG9z
ID0gdXNlckVuZFBvcyA9IHBhc3N3b3JkRW5kUG9zID0gaG9zdEVuZFBvcyA9IHBvcnRFbmRQb3Mg
PSBwIC0gYnVmZmVyLmRhdGEoKTsKICAgICB9CiAKICAgICAvLyBGb3IgY2Fub25pY2FsaXphdGlv
biwgZW5zdXJlIHdlIGhhdmUgYSAnLycgZm9yIG5vIHBhdGguCkBAIC0xMjI0LDM0ICsxMjI0LDM0
IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAKICAgICBp
ZiAoaGllcmFyY2hpY2FsICYmIGhhc1NsYXNoRG90T3JEb3REb3QodXJsKSkgewogICAgICAgICBW
ZWN0b3I8Y2hhciwgNDA5Nj4gcGF0aF9idWZmZXIocGF0aEVuZCAtIHBhdGhTdGFydCArIDEpOwot
ICAgICAgICBjb3B5UGF0aFJlbW92aW5nRG90cyhwYXRoX2J1ZmZlciwgdXJsLCBwYXRoU3RhcnQs
IHBhdGhFbmQpOwotICAgICAgICBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKHAsIHBhdGhfYnVmZmVy
LCBzdHJsZW4ocGF0aF9idWZmZXIpKTsKKyAgICAgICAgY29weVBhdGhSZW1vdmluZ0RvdHMocGF0
aF9idWZmZXIuZGF0YSgpLCB1cmwsIHBhdGhTdGFydCwgcGF0aEVuZCk7CisgICAgICAgIGFwcGVu
ZEVzY2FwaW5nQmFkQ2hhcnMocCwgcGF0aF9idWZmZXIuZGF0YSgpLCBzdHJsZW4ocGF0aF9idWZm
ZXIuZGF0YSgpKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFwcGVuZEVzY2FwaW5nQmFkQ2hhcnMo
cCwgdXJsICsgcGF0aFN0YXJ0LCBwYXRoRW5kIC0gcGF0aFN0YXJ0KTsKIAotICAgIHBhdGhFbmRQ
b3MgPSBwIC0gYnVmZmVyOworICAgIHBhdGhFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEoKTsKICAg
ICAKICAgICAKICAgICAvLyBhZGQgcXVlcnksIGVzY2FwaW5nIGJhZCBjaGFyYWN0ZXJzCiAgICAg
YXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCB1cmwgKyBxdWVyeVN0YXJ0LCBxdWVyeUVuZCAtIHF1
ZXJ5U3RhcnQpOwotICAgIHF1ZXJ5RW5kUG9zID0gcCAtIGJ1ZmZlcjsKKyAgICBxdWVyeUVuZFBv
cyA9IHAgLSBidWZmZXIuZGF0YSgpOwogICAgIAogICAgIC8vIGFkZCBmcmFnbWVudCwgZXNjYXBp
bmcgYmFkIGNoYXJhY3RlcnMKICAgICBpZiAoZnJhZ21lbnRFbmQgIT0gcXVlcnlFbmQpIHsKICAg
ICAgICAgKnArKyA9ICcjJzsKICAgICAgICAgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCB1cmwg
KyBmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCAtIGZyYWdtZW50U3RhcnQpOwogICAgIH0KLSAg
ICBmcmFnbWVudEVuZFBvcyA9IHAgLSBidWZmZXI7CisgICAgZnJhZ21lbnRFbmRQb3MgPSBwIC0g
YnVmZmVyLmRhdGEoKTsKIAogICAgIC8vIElmIHdlIGRpZG4ndCBlbmQgdXAgYWN0dWFsbHkgY2hh
bmdpbmcgdGhlIG9yaWdpbmFsIHN0cmluZyBhbmQKICAgICAvLyBpdCBzdGFydGVkIGFzIGEgRGVw
cmVjYXRlZFN0cmluZywganVzdCByZXVzZSBpdCwgdG8gYXZvaWQgZXh0cmEKICAgICAvLyBhbGxv
Y2F0aW9uLgotICAgIGlmIChvcmlnaW5hbFN0cmluZyAmJiBzdHJuY21wKGJ1ZmZlciwgdXJsLCBm
cmFnbWVudEVuZFBvcykgPT0gMCkgeworICAgIGlmIChvcmlnaW5hbFN0cmluZyAmJiBzdHJuY21w
KGJ1ZmZlci5kYXRhKCksIHVybCwgZnJhZ21lbnRFbmRQb3MpID09IDApIHsKICAgICAgICAgdXJs
U3RyaW5nID0gKm9yaWdpbmFsU3RyaW5nOwogICAgIH0gZWxzZQotICAgICAgICB1cmxTdHJpbmcg
PSBEZXByZWNhdGVkU3RyaW5nKGJ1ZmZlciwgZnJhZ21lbnRFbmRQb3MpOworICAgICAgICB1cmxT
dHJpbmcgPSBEZXByZWNhdGVkU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGZyYWdtZW50RW5kUG9zKTsK
IAotICAgIEFTU0VSVChwIC0gYnVmZmVyIDw9IChpbnQpYnVmZmVyLnNpemUoKSk7CisgICAgQVNT
RVJUKHAgLSBidWZmZXIuZGF0YSgpIDw9IChpbnQpYnVmZmVyLnNpemUoKSk7CiB9CiAKIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBLVVJMICZhLCBjb25zdCBLVVJMICZiKQpAQCAtMTI2OSw3ICsxMjY5
LDcgQEAgRGVwcmVjYXRlZFN0cmluZyBLVVJMOjplbmNvZGVfc3RyaW5nKGNvbgogICAgIERlcHJl
Y2F0ZWRDU3RyaW5nIGFzVVRGOCA9IG5vdEVuY29kZWRTdHJpbmcudXRmOCgpOwogICAgIAogICAg
IFZlY3RvcjxjaGFyLCA0MDk2PiBidWZmZXIoYXNVVEY4Lmxlbmd0aCgpICogMyArIDEpOwotICAg
IGNoYXIgKnAgPSBidWZmZXI7CisgICAgY2hhciAqcCA9IGJ1ZmZlci5kYXRhKCk7CiAKICAgICBj
b25zdCBjaGFyICpzdHIgPSBhc1VURjg7CiAgICAgY29uc3QgY2hhciAqc3RyRW5kID0gc3RyICsg
YXNVVEY4Lmxlbmd0aCgpOwpAQCAtMTI4Myw5ICsxMjgzLDkgQEAgRGVwcmVjYXRlZFN0cmluZyBL
VVJMOjplbmNvZGVfc3RyaW5nKGNvbgogICAgICAgICAgICAgKnArKyA9IGM7CiAgICAgfQogICAg
IAotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0KGJ1ZmZlciwgcCAtIGJ1ZmZlcik7CisgICAg
RGVwcmVjYXRlZFN0cmluZyByZXN1bHQoYnVmZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkp
OwogICAgIAotICAgIEFTU0VSVChwIC0gYnVmZmVyIDw9IChpbnQpYnVmZmVyLnNpemUoKSk7Cisg
ICAgQVNTRVJUKHAgLSBidWZmZXIuZGF0YSgpIDw9IChpbnQpYnVmZmVyLnNpemUoKSk7CiAKICAg
ICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jZi9LVVJMQ0ZOZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2YvS1VSTENGTmV0LmNwcAkocmV2
aXNpb24gMjUwNzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2NmL0tVUkxDRk5ldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgS1VSTDo6S1VSTChDRlVSTFJlZiB1cmwpCiAgICAg
ICAgICAgICBidWZmZXJbMl0gPSAnbCc7CiAgICAgICAgICAgICBidWZmZXJbM10gPSAnZSc7CiAg
ICAgICAgICAgICBidWZmZXJbNF0gPSAnOic7Ci0gICAgICAgICAgICBwYXJzZShidWZmZXIsIDAp
OworICAgICAgICAgICAgcGFyc2UoYnVmZmVyLmRhdGEoKSwgMCk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgcGFyc2UoYnl0ZXMsIDApOwogICAgIH0gZWxzZQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvS1VSTE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21h
Yy9LVVJMTWFjLm1tCShyZXZpc2lvbiAyNTA3MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0tV
UkxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgS1VSTDo6S1VSTChOU1VS
TCAqdXJsKQogICAgICAgICAgICAgYnVmZmVyWzJdID0gJ2wnOwogICAgICAgICAgICAgYnVmZmVy
WzNdID0gJ2UnOwogICAgICAgICAgICAgYnVmZmVyWzRdID0gJzonOwotICAgICAgICAgICAgcGFy
c2UoYnVmZmVyLCAwKTsKKyAgICAgICAgICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksIDApOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIHBhcnNlKGJ5dGVzLCAwKTsKICAgICB9IGVsc2UKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTMsNyArMTkzLDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6bGF5T3V0QXhpcyhHcmlkQXhpcwog
ewogICAgIGF2YWlsYWJsZUxlbiA9IG1heChhdmFpbGFibGVMZW4sIDApOwogCi0gICAgaW50KiBn
cmlkTGF5b3V0ID0gYXhpcy5tX3NpemVzOworICAgIGludCogZ3JpZExheW91dCA9IGF4aXMubV9z
aXplcy5kYXRhKCk7CiAKICAgICBpZiAoIWdyaWQpIHsKICAgICAgICAgZ3JpZExheW91dFswXSA9
IGF2YWlsYWJsZUxlbjsKQEAgLTM2Nyw3ICszNjcsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0Ojps
YXlPdXRBeGlzKEdyaWRBeGlzCiAKICAgICAvLyBub3cgd2UgaGF2ZSB0aGUgZmluYWwgbGF5b3V0
LCBkaXN0cmlidXRlIHRoZSBkZWx0YSBvdmVyIGl0CiAgICAgYm9vbCB3b3JrZWQgPSB0cnVlOwot
ICAgIGludCogZ3JpZERlbHRhID0gYXhpcy5tX2RlbHRhczsKKyAgICBpbnQqIGdyaWREZWx0YSA9
IGF4aXMubV9kZWx0YXMuZGF0YSgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JpZExlbjsg
KytpKSB7CiAgICAgICAgIGlmIChncmlkTGF5b3V0W2ldICYmIGdyaWRMYXlvdXRbaV0gKyBncmlk
RGVsdGFbaV0gPD0gMCkKICAgICAgICAgICAgIHdvcmtlZCA9IGZhbHNlOwpJbmRleDogV2ViS2l0
L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJQcmVm
ZXJlbmNlcy5jcHAJKHJldmlzaW9uIDI1MDcxKQorKysgV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMyw3ICs1MjMsNyBAQCB2b2lkIFdlYlByZWZlcmVu
Y2VzOjpsb2FkKCkKICAgICBpZiAoIVdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfVVRGOCwgMCwgYXBw
RGF0YVBhdGgsIGFwcERhdGFQYXRoTGVuZ3RoLCAoTFBTVFIpdXRmOFBhdGgtPmRhdGEoKSwgcmVz
dWx0LCAwLCAwKSkKICAgICAgICAgZ290byBleGl0OwogCi0gICAgdXJsUmVmLmFkb3B0Q0YoQ0ZV
UkxDcmVhdGVGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKDAsICp1dGY4UGF0aCwgcmVzdWx0
LTEsIGZhbHNlKSk7CisgICAgdXJsUmVmLmFkb3B0Q0YoQ0ZVUkxDcmVhdGVGcm9tRmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKDAsIHV0ZjhQYXRoLT5kYXRhKCksIHJlc3VsdC0xLCBmYWxzZSkpOwog
ICAgIGlmICghdXJsUmVmKQogICAgICAgICBnb3RvIGV4aXQ7CiAKSW5kZXg6IFdlYktpdC93aW4v
V2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNp
b24gMjUwNzEpCisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODI4LDcgKzM4MjgsNyBAQCBzdGF0aWMgYm9vbCBnZXRDb21wb3NpdGlvblN0cmluZyhISU1DIGhJ
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBWZWN0b3I8VUNoYXI+IGNvbXBvc2l0aW9uQnVm
ZmVyKGNvbXBvc2l0aW9uTGVuZ3RoIC8gMik7CiAgICAgY29tcG9zaXRpb25MZW5ndGggPSBJTU1E
aWN0OjpkaWN0KCkuZ2V0Q29tcG9zaXRpb25TdHJpbmcoaElucHV0Q29udGV4dCwgdHlwZSwgKExQ
Vk9JRCljb21wb3NpdGlvbkJ1ZmZlci5kYXRhKCksIGNvbXBvc2l0aW9uTGVuZ3RoKTsKLSAgICBy
ZXN1bHQgPSBTdHJpbmcoY29tcG9zaXRpb25CdWZmZXIsIGNvbXBvc2l0aW9uTGVuZ3RoIC8gMik7
CisgICAgcmVzdWx0ID0gU3RyaW5nKGNvbXBvc2l0aW9uQnVmZmVyLmRhdGEoKSwgY29tcG9zaXRp
b25MZW5ndGggLyAyKTsKICAgICBBU1NFUlQoIWNvbXBvc2l0aW9uTGVuZ3RoIHx8IGNvbXBvc2l0
aW9uQnVmZmVyWzBdKTsKICAgICBBU1NFUlQoIWNvbXBvc2l0aW9uTGVuZ3RoIHx8IGNvbXBvc2l0
aW9uQnVmZmVyW2NvbXBvc2l0aW9uTGVuZ3RoIC8gMiAtIDFdKTsKICAgICByZXR1cm4gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15974</attachid>
            <date>2007-08-14 19:54:21 -0700</date>
            <delta_ts>2007-08-16 11:04:35 -0700</delta_ts>
            <desc>Remaining patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>4954</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDI1MDg2KQorKysgSmF2YVNjcmlwdENvcmUv
d3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsMjMgKzQwNywxMSBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgICAgIHJldHVybiBtX2ltcGwuYnVmZmVyKClbaV07IAogICAgICAg
ICB9CiAKLSAgICAgICAgVCYgb3BlcmF0b3JbXShsb25nIGkpIHsgcmV0dXJuIGF0KGkpOyB9Ci0g
ICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10obG9uZyBpKSBjb25zdCB7IHJldHVybiBhdChpKTsg
fQotICAgICAgICBUJiBvcGVyYXRvcltdKHVuc2lnbmVkIGxvbmcgaSkgeyByZXR1cm4gYXQoaSk7
IH0KLSAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBsb25nIGkpIGNvbnN0IHsg
cmV0dXJuIGF0KGkpOyB9Ci0gICAgICAgIFQmIG9wZXJhdG9yW10oaW50IGkpIHsgcmV0dXJuIGF0
KGkpOyB9Ci0gICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0IHsgcmV0dXJu
IGF0KGkpOyB9Ci0gICAgICAgIFQmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgeyByZXR1cm4gYXQo
aSk7IH0KLSAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiBhdChpKTsgfQotICAgICAgICBUJiBvcGVyYXRvcltdKHNob3J0IGkpIHsgcmV0dXJuIGF0
KGkpOyB9Ci0gICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2hvcnQgaSkgY29uc3QgeyByZXR1
cm4gYXQoaSk7IH0KLSAgICAgICAgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBzaG9ydCBpKSB7IHJl
dHVybiBhdChpKTsgfQotICAgICAgICBjb25zdCBUJiBvcGVyYXRvcltdKHVuc2lnbmVkIHNob3J0
IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CisgICAgICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90
IGkpIHsgcmV0dXJuIGF0KGkpOyB9CisgICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90
IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAKICAgICAgICAgVCogZGF0YSgpIHsgcmV0dXJu
IG1faW1wbC5idWZmZXIoKTsgfQogICAgICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsLmJ1ZmZlcigpOyB9Ci0gICAgICAgIG9wZXJhdG9yIFQqKCkgeyByZXR1cm4gZGF0
YSgpOyB9Ci0gICAgICAgIG9wZXJhdG9yIGNvbnN0IFQqKCkgY29uc3QgeyByZXR1cm4gZGF0YSgp
OyB9CiAKICAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0KICAgICAg
ICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gYmVnaW4oKSArIG1fc2l6ZTsgfQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAyNTA4NikKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw3
ICsyMzYsNyBAQCB2b2lkIFBsdWdpbkJhc2U6OmNhY2hlUGx1Z2luRGF0YUlmTmVjZXNzCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHBsdWdpbnMt
PmFwcGVuZChwbHVnaW4pOwotICAgICAgICAgICAgaWYgKCFwbHVnaW4tPm1pbWVzKQorICAgICAg
ICAgICAgaWYgKHBsdWdpbi0+bWltZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+Ojpp
dGVyYXRvciBlbmQgPSBwbHVnaW4tPm1pbWVzLmVuZCgpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIv
bWFjL0xvYWRlck5TVVJMRXh0cmFzLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbWFj
L0xvYWRlck5TVVJMRXh0cmFzLm0JKHJldmlzaW9uIDI1MDg2KQorKysgV2ViQ29yZS9sb2FkZXIv
bWFjL0xvYWRlck5TVVJMRXh0cmFzLm0JKHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsyNDYsNyBA
QCBOU1N0cmluZyAqc3VnZ2VzdGVkRmlsZW5hbWVXaXRoTUlNRVR5cGUoCiAgICAgaWYgKCFbTUlN
RVR5cGUgaXNFcXVhbFRvU3RyaW5nOkAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0gJiYgIVtN
SU1FVHlwZSBpc0VxdWFsVG9TdHJpbmc6QCJ0ZXh0L3BsYWluIl0pIHsKICAgICAgICAgVmVjdG9y
PFN0cmluZz4gZXh0ZW5zaW9ucyA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldEV4dGVuc2lvbnNGb3JN
SU1FVHlwZShNSU1FVHlwZSk7CiAKLSAgICAgICAgaWYgKCFleHRlbnNpb25zLnNpemUoKSB8fCAo
ZXh0ZW5zaW9ucyAmJiAhdmVjdG9yQ29udGFpbnNTdHJpbmcoZXh0ZW5zaW9ucywgZXh0ZW5zaW9u
KSkpIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuaXNFbXB0eSgpIHx8ICF2ZWN0b3JDb250YWlu
c1N0cmluZyhleHRlbnNpb25zLCBleHRlbnNpb24pKSB7CiAgICAgICAgICAgICAvLyBUaGUgZXh0
ZW5zaW9uIGRvZXNuJ3QgbWF0Y2ggdGhlIE1JTUUgdHlwZS4gQ29ycmVjdCB0aGlzLgogICAgICAg
ICAgICAgTlNTdHJpbmcgKmNvcnJlY3RFeHRlbnNpb24gPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQ
cmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShNSU1FVHlwZSk7CiAgICAgICAgICAgICBpZiAo
W2NvcnJlY3RFeHRlbnNpb24gbGVuZ3RoXSAhPSAwKSB7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2
aXNpb24gMjUwODYpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQwLDcgKzE0MCw3IEBAIEZyYW1lVmlldzo6fkZyYW1lVmlldygpCiAgICAgcmVzZXRT
Y3JvbGxiYXJzKCk7CiAKICAgICBBU1NFUlQobV9yZWZDb3VudCA9PSAwKTsKLSAgICBBU1NFUlQo
KCFkLT5tX3NjaGVkdWxlZEV2ZW50cyB8fCBkLT5tX3NjaGVkdWxlZEV2ZW50cy5pc0VtcHR5KCkp
ICYmICFkLT5tX2VucXVldWVFdmVudHMpOworICAgIEFTU0VSVChkLT5tX3NjaGVkdWxlZEV2ZW50
cy5pc0VtcHR5KCkgJiYgIWQtPm1fZW5xdWV1ZUV2ZW50cyk7CiAKICAgICBpZiAobV9mcmFtZSkg
ewogICAgICAgICBBU1NFUlQobV9mcmFtZS0+dmlldygpICE9IHRoaXMgfHwgIW1fZnJhbWUtPmRv
Y3VtZW50KCkgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwpAQCAtNzgxLDcg
Kzc4MSw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzY2hlZHVsZUV2ZW50KFBhc3NSZWZQdHIKIAogdm9p
ZCBGcmFtZVZpZXc6OnBhdXNlU2NoZWR1bGVkRXZlbnRzKCkKIHsKLSAgICBBU1NFUlQoIWQtPm1f
c2NoZWR1bGVkRXZlbnRzIHx8IGQtPm1fc2NoZWR1bGVkRXZlbnRzLmlzRW1wdHkoKSB8fCBkLT5t
X2VucXVldWVFdmVudHMpOworICAgIEFTU0VSVChkLT5tX3NjaGVkdWxlZEV2ZW50cy5pc0VtcHR5
KCkgfHwgZC0+bV9lbnF1ZXVlRXZlbnRzKTsKICAgICBkLT5tX2VucXVldWVFdmVudHMrKzsKIH0K
IApAQCAtNzkwLDcgKzc5MCw3IEBAIHZvaWQgRnJhbWVWaWV3OjpyZXN1bWVTY2hlZHVsZWRFdmVu
dHMoKQogICAgIGQtPm1fZW5xdWV1ZUV2ZW50cy0tOwogICAgIGlmICghZC0+bV9lbnF1ZXVlRXZl
bnRzKQogICAgICAgICBkaXNwYXRjaFNjaGVkdWxlZEV2ZW50cygpOwotICAgIEFTU0VSVCghZC0+
bV9zY2hlZHVsZWRFdmVudHMgfHwgZC0+bV9zY2hlZHVsZWRFdmVudHMuaXNFbXB0eSgpIHx8IGQt
Pm1fZW5xdWV1ZUV2ZW50cyk7CisgICAgQVNTRVJUKGQtPm1fc2NoZWR1bGVkRXZlbnRzLmlzRW1w
dHkoKSB8fCBkLT5tX2VucXVldWVFdmVudHMpOwogfQogCiB2b2lkIEZyYW1lVmlldzo6dXBkYXRl
T3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVy
ZmxvdykKQEAgLTgyMSw3ICs4MjEsNyBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlT3ZlcmZsb3dT
dGF0dXMoYm9vCiAKIHZvaWQgRnJhbWVWaWV3OjpkaXNwYXRjaFNjaGVkdWxlZEV2ZW50cygpCiB7
Ci0gICAgaWYgKCFkLT5tX3NjaGVkdWxlZEV2ZW50cykKKyAgICBpZiAoZC0+bV9zY2hlZHVsZWRF
dmVudHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgVmVjdG9yPFNjaGVk
dWxlZEV2ZW50Kj4gc2NoZWR1bGVkRXZlbnRzQ29weSA9IGQtPm1fc2NoZWR1bGVkRXZlbnRzOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BsdWdJbkluZm9TdG9yZU1hYy5tbQkocmV2aXNp
b24gMjUwODYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9QbHVnSW5JbmZvU3RvcmVNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgUGx1Z2luSW5mbyAqUGx1Z0luSW5mb1N0
b3JlOjpjcmVhdGVQbHVnaQogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAK
LSAgICBpZiAocGx1Z2luSW5mbyAmJiBwbHVnaW5JbmZvLT5taW1lcykKKyAgICBpZiAocGx1Z2lu
SW5mbyAmJiAhcGx1Z2luSW5mby0+bWltZXMuaXNFbXB0eSgpKQogICAgICAgICBkZWxldGVBbGxW
YWx1ZXMocGx1Z2luSW5mby0+bWltZXMpOwogICAgIGRlbGV0ZSBwbHVnaW5JbmZvOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15997</attachid>
            <date>2007-08-16 11:04:35 -0700</date>
            <delta_ts>2007-08-18 16:57:50 -0700</delta_ts>
            <desc>Remove all remaining bits of operator T*</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>4078</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDI1MDg2KQorKysgSmF2YVNjcmlwdENvcmUv
d3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjIsOCArNDIyLDYgQEAgbmFtZXNwYWNl
IFdURiB7CiAKICAgICAgICAgVCogZGF0YSgpIHsgcmV0dXJuIG1faW1wbC5idWZmZXIoKTsgfQog
ICAgICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmJ1ZmZlcigpOyB9
Ci0gICAgICAgIG9wZXJhdG9yIFQqKCkgeyByZXR1cm4gZGF0YSgpOyB9Ci0gICAgICAgIG9wZXJh
dG9yIGNvbnN0IFQqKCkgY29uc3QgeyByZXR1cm4gZGF0YSgpOyB9CiAKICAgICAgICAgaXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0KICAgICAgICAgaXRlcmF0b3IgZW5kKCkgeyBy
ZXR1cm4gYmVnaW4oKSArIG1fc2l6ZTsgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
bmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZp
Z2F0b3IuY3BwCShyZXZpc2lvbiAyNTA4NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX25h
dmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIFBsdWdp
bkJhc2U6OmNhY2hlUGx1Z2luRGF0YUlmTmVjZXNzCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHBsdWdpbnMtPmFwcGVuZChwbHVnaW4pOwotICAg
ICAgICAgICAgaWYgKCFwbHVnaW4tPm1pbWVzKQorICAgICAgICAgICAgaWYgKHBsdWdpbi0+bWlt
ZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQgPSBwbHVnaW4t
Pm1pbWVzLmVuZCgpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFz
Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFzLm0J
KHJldmlzaW9uIDI1MDg2KQorKysgV2ViQ29yZS9sb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFz
Lm0JKHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsyNDYsNyBAQCBOU1N0cmluZyAqc3VnZ2VzdGVk
RmlsZW5hbWVXaXRoTUlNRVR5cGUoCiAgICAgaWYgKCFbTUlNRVR5cGUgaXNFcXVhbFRvU3RyaW5n
OkAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0gJiYgIVtNSU1FVHlwZSBpc0VxdWFsVG9TdHJp
bmc6QCJ0ZXh0L3BsYWluIl0pIHsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9
IE1JTUVUeXBlUmVnaXN0cnk6OmdldEV4dGVuc2lvbnNGb3JNSU1FVHlwZShNSU1FVHlwZSk7CiAK
LSAgICAgICAgaWYgKCFleHRlbnNpb25zLnNpemUoKSB8fCAoZXh0ZW5zaW9ucyAmJiAhdmVjdG9y
Q29udGFpbnNTdHJpbmcoZXh0ZW5zaW9ucywgZXh0ZW5zaW9uKSkpIHsKKyAgICAgICAgaWYgKGV4
dGVuc2lvbnMuaXNFbXB0eSgpIHx8ICF2ZWN0b3JDb250YWluc1N0cmluZyhleHRlbnNpb25zLCBl
eHRlbnNpb24pKSB7CiAgICAgICAgICAgICAvLyBUaGUgZXh0ZW5zaW9uIGRvZXNuJ3QgbWF0Y2gg
dGhlIE1JTUUgdHlwZS4gQ29ycmVjdCB0aGlzLgogICAgICAgICAgICAgTlNTdHJpbmcgKmNvcnJl
Y3RFeHRlbnNpb24gPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JN
SU1FVHlwZShNSU1FVHlwZSk7CiAgICAgICAgICAgICBpZiAoW2NvcnJlY3RFeHRlbnNpb24gbGVu
Z3RoXSAhPSAwKSB7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMjUwODYpCisrKyBXZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBA
IEZyYW1lVmlldzo6fkZyYW1lVmlldygpCiAgICAgcmVzZXRTY3JvbGxiYXJzKCk7CiAKICAgICBB
U1NFUlQobV9yZWZDb3VudCA9PSAwKTsKLSAgICBBU1NFUlQoKCFkLT5tX3NjaGVkdWxlZEV2ZW50
cyB8fCBkLT5tX3NjaGVkdWxlZEV2ZW50cy5pc0VtcHR5KCkpICYmICFkLT5tX2VucXVldWVFdmVu
dHMpOworICAgIEFTU0VSVChkLT5tX3NjaGVkdWxlZEV2ZW50cy5pc0VtcHR5KCkgJiYgIWQtPm1f
ZW5xdWV1ZUV2ZW50cyk7CiAKICAgICBpZiAobV9mcmFtZSkgewogICAgICAgICBBU1NFUlQobV9m
cmFtZS0+dmlldygpICE9IHRoaXMgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCkgfHwgIW1fZnJhbWUt
PmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwpAQCAtNzgxLDcgKzc4MSw3IEBAIHZvaWQgRnJhbWVW
aWV3OjpzY2hlZHVsZUV2ZW50KFBhc3NSZWZQdHIKIAogdm9pZCBGcmFtZVZpZXc6OnBhdXNlU2No
ZWR1bGVkRXZlbnRzKCkKIHsKLSAgICBBU1NFUlQoIWQtPm1fc2NoZWR1bGVkRXZlbnRzIHx8IGQt
Pm1fc2NoZWR1bGVkRXZlbnRzLmlzRW1wdHkoKSB8fCBkLT5tX2VucXVldWVFdmVudHMpOworICAg
IEFTU0VSVChkLT5tX3NjaGVkdWxlZEV2ZW50cy5pc0VtcHR5KCkgfHwgZC0+bV9lbnF1ZXVlRXZl
bnRzKTsKICAgICBkLT5tX2VucXVldWVFdmVudHMrKzsKIH0KIApAQCAtNzkwLDcgKzc5MCw3IEBA
IHZvaWQgRnJhbWVWaWV3OjpyZXN1bWVTY2hlZHVsZWRFdmVudHMoKQogICAgIGQtPm1fZW5xdWV1
ZUV2ZW50cy0tOwogICAgIGlmICghZC0+bV9lbnF1ZXVlRXZlbnRzKQogICAgICAgICBkaXNwYXRj
aFNjaGVkdWxlZEV2ZW50cygpOwotICAgIEFTU0VSVCghZC0+bV9zY2hlZHVsZWRFdmVudHMgfHwg
ZC0+bV9zY2hlZHVsZWRFdmVudHMuaXNFbXB0eSgpIHx8IGQtPm1fZW5xdWV1ZUV2ZW50cyk7Cisg
ICAgQVNTRVJUKGQtPm1fc2NoZWR1bGVkRXZlbnRzLmlzRW1wdHkoKSB8fCBkLT5tX2VucXVldWVF
dmVudHMpOwogfQogCiB2b2lkIEZyYW1lVmlldzo6dXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBo
b3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVyZmxvdykKQEAgLTgyMSw3ICs4MjEs
NyBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vCiAKIHZvaWQgRnJh
bWVWaWV3OjpkaXNwYXRjaFNjaGVkdWxlZEV2ZW50cygpCiB7Ci0gICAgaWYgKCFkLT5tX3NjaGVk
dWxlZEV2ZW50cykKKyAgICBpZiAoZC0+bV9zY2hlZHVsZWRFdmVudHMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgVmVjdG9yPFNjaGVkdWxlZEV2ZW50Kj4gc2NoZWR1bGVk
RXZlbnRzQ29weSA9IGQtPm1fc2NoZWR1bGVkRXZlbnRzOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbWFjL1BsdWdJbkluZm9TdG9yZU1hYy5tbQkocmV2aXNpb24gMjUwODYpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9QbHVnSW5JbmZvU3RvcmVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4
LDcgKzU4LDcgQEAgUGx1Z2luSW5mbyAqUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaQogCiAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKLSAgICBpZiAocGx1Z2luSW5mbyAm
JiBwbHVnaW5JbmZvLT5taW1lcykKKyAgICBpZiAocGx1Z2luSW5mbyAmJiAhcGx1Z2luSW5mby0+
bWltZXMuaXNFbXB0eSgpKQogICAgICAgICBkZWxldGVBbGxWYWx1ZXMocGx1Z2luSW5mby0+bWlt
ZXMpOwogICAgIGRlbGV0ZSBwbHVnaW5JbmZvOwogCg==
</data>
<flag name="review"
          id="6709"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15998</attachid>
            <date>2007-08-16 11:05:30 -0700</date>
            <delta_ts>2007-08-19 13:11:19 -0700</delta_ts>
            <desc>Reduce operator[] overloads</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>1218</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDI1MDg2KQorKysgSmF2YVNjcmlwdENvcmUv
d3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsMTggKzQwNyw4IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICAgICAgcmV0dXJuIG1faW1wbC5idWZmZXIoKVtpXTsgCiAgICAgICAg
IH0KIAotICAgICAgICBUJiBvcGVyYXRvcltdKGxvbmcgaSkgeyByZXR1cm4gYXQoaSk7IH0KLSAg
ICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXShsb25nIGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9
Ci0gICAgICAgIFQmIG9wZXJhdG9yW10odW5zaWduZWQgbG9uZyBpKSB7IHJldHVybiBhdChpKTsg
fQotICAgICAgICBjb25zdCBUJiBvcGVyYXRvcltdKHVuc2lnbmVkIGxvbmcgaSkgY29uc3QgeyBy
ZXR1cm4gYXQoaSk7IH0KLSAgICAgICAgVCYgb3BlcmF0b3JbXShpbnQgaSkgeyByZXR1cm4gYXQo
aSk7IH0KLSAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXShpbnQgaSkgY29uc3QgeyByZXR1cm4g
YXQoaSk7IH0KLSAgICAgICAgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSB7IHJldHVybiBhdChp
KTsgfQotICAgICAgICBjb25zdCBUJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0
dXJuIGF0KGkpOyB9Ci0gICAgICAgIFQmIG9wZXJhdG9yW10oc2hvcnQgaSkgeyByZXR1cm4gYXQo
aSk7IH0KLSAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaG9ydCBpKSBjb25zdCB7IHJldHVy
biBhdChpKTsgfQotICAgICAgICBUJiBvcGVyYXRvcltdKHVuc2lnbmVkIHNob3J0IGkpIHsgcmV0
dXJuIGF0KGkpOyB9Ci0gICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10odW5zaWduZWQgc2hvcnQg
aSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KKyAgICAgICAgVCYgb3BlcmF0b3JbXShzaXplX3Qg
aSkgeyByZXR1cm4gYXQoaSk7IH0KKyAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3Qg
aSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KIAogICAgICAgICBUKiBkYXRhKCkgeyByZXR1cm4g
bV9pbXBsLmJ1ZmZlcigpOyB9CiAgICAgICAgIGNvbnN0IFQqIGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ltcGwuYnVmZmVyKCk7IH0K
</data>
<flag name="review"
          id="6710"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>