<?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>37175</bug_id>
          
          <creation_ts>2010-04-06 16:01:53 -0700</creation_ts>
          <short_desc>Factor DocumentWriter out of FrameLoader</short_desc>
          <delta_ts>2010-04-20 15:34:48 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>37433</dependson>
          <blocked>29947</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>209306</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-06 16:01:53 -0700</bug_when>
    <thetext>There&apos;s a bunch of code in FrameLoader that understands the begin/write/end cycle of decoding bytes from the network and shoving them into a Document.  In this bug, I&apos;ll separate that code from the rest of FrameLoader (because there&apos;s hardly any interaction with the core loading machine).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209310</commentid>
    <comment_count>1</comment_count>
      <attachid>52678</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-06 16:09:10 -0700</bug_when>
    <thetext>Created attachment 52678
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209337</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-06 16:52:25 -0700</bug_when>
    <thetext>BTW, I can land this in a separate file.  I just left it in the main file so it&apos;s easier to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209351</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-06 17:33:44 -0700</bug_when>
    <thetext>Attachment 52678 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/1600285</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209362</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-06 18:00:33 -0700</bug_when>
    <thetext>Attachment 52678 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/1629298</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209371</commentid>
    <comment_count>5</comment_count>
      <attachid>52678</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-06 18:11:51 -0700</bug_when>
    <thetext>Comment on attachment 52678
Patch

Thanks for continuing your work to make frame loader smaller.

I assume that your plan is to move this class into a separate file in a subsequent patch.

I like, but don&apos;t love, the name &quot;document writer&quot;. In particular, it seems that the caller of &quot;write&quot; is what you would call the writer. The object you call write *on* is not the writer. I&apos;ll try to think of another word for you.

&gt; +    // FIXME: What about the encoding?
&gt; +    writer()-&gt;setDecoder(document-&gt;decoder());

I think you need to write a slightly longer comment sentence. It took me a while to figure out what your question meant.

&gt;      // Always try UTF-8. If that fails, try frame encoding (if any) and then the default.
&gt;      // For a newly opened frame with an empty URL, encoding() should not be used, because this methods asks decoder, which uses ISO-8859-1.
&gt; -    Settings* settings = m_frame-&gt;settings();
&gt; -    request.setResponseContentDispositionEncodingFallbackArray(&quot;UTF-8&quot;, m_URL.isEmpty() ? m_encoding : encoding(), settings ? settings-&gt;defaultTextEncodingName() : String());
&gt; +    String encoding1 = &quot;UTF-8&quot;;
&gt; +    String encoding2 = writer()-&gt;contentDispositionEncodingFallback2();
&gt; +    String encoding3;
&gt; +    if (Settings* settings = m_frame-&gt;settings())
&gt; +        encoding3 = settings-&gt;defaultTextEncodingName();
&gt; +    request.setResponseContentDispositionEncodingFallbackArray(encoding1, encoding2, encoding3);
&gt;  }
&gt;  
&gt; +String DocumentWriter::contentDispositionEncodingFallback2() const

&gt; +    // FIXME: It&apos;s really unforunate to need to expose this piece of state.
&gt; +    // I suspect a better design is to disentangle user-provided encodings,
&gt; +    // default encodings, and the decoding we&apos;re currently using.
&gt; +    String contentDispositionEncodingFallback2() const;

To me this function name seems awful. I believe these encodings are the preferred encodings. Calling it a &quot;fallback array&quot; as the request object does puts the emphasis on the wrong thing. And calling this &quot;fallback 2&quot; is utterly mystifying. Taking confusing code and turning it into a confusing function name isn&apos;t good. I suggest calling this function &quot;frameEncoding&quot;, because that&apos;s what the comment calls it. There will still be the mystery of why the document writer is the object to ask for the frame&apos;s encoding.

&gt; +class DocumentWriter : public Noncopyable {
&gt; +public:
&gt; +    DocumentWriter(Frame*);
&gt; +    ~DocumentWriter();

Is there some reason you included a destructor? I think the compiler-generated one will suffice.

&gt; +    void setDecoder(TextResourceDecoder* decoder);

No argument name needed here. This should take a PassRefPtr.

&gt; +    // Callbacks from DocumentWriter
&gt; +    void didBeginDocument(bool dispatch);

&gt; -    void begin(const KURL&amp;, bool dispatchWindowObjectAvailable = true, SecurityOrigin* forcedSecurityOrigin = 0);

You shortened the name of this boolean, perhaps because inside the function the shorter name was used. Please use the longer name.

Private members becoming public is always a disappointment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209379</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-06 18:24:59 -0700</bug_when>
    <thetext>&gt; I assume that your plan is to move this class into a separate file in a
&gt; subsequent patch.

Yes.  I can also do that when I land the patch if you like.  It seemed easier to review this way.

&gt; I like, but don&apos;t love, the name &quot;document writer&quot;. In particular, it seems
&gt; that the caller of &quot;write&quot; is what you would call the writer. The object you
&gt; call write *on* is not the writer. I&apos;ll try to think of another word for you.

I see.  I was thinking of this class as part of the controller, but you&apos;re right that it&apos;s more of a model or a model adaptor.  Suggestions welcome.

&gt; &gt; +    // FIXME: What about the encoding?
&gt; &gt; +    writer()-&gt;setDecoder(document-&gt;decoder());
&gt; 
&gt; I think you need to write a slightly longer comment sentence. It took me a
&gt; while to figure out what your question meant.

This was actually a note to me in working on the code.  I usually use &quot;xyzzy&quot; to mark internal comments (and then I grep for that string before posting), but I missed it in this case.  I think this line of code (the missing one about encoding) is a bug in the original code, but I haven&apos;t looked into it carefully enough.

&gt; &gt; +    // FIXME: It&apos;s really unforunate to need to expose this piece of state.
&gt; &gt; +    // I suspect a better design is to disentangle user-provided encodings,
&gt; &gt; +    // default encodings, and the decoding we&apos;re currently using.
&gt; &gt; +    String contentDispositionEncodingFallback2() const;
&gt; 
&gt; To me this function name seems awful. I believe these encodings are the
&gt; preferred encodings. Calling it a &quot;fallback array&quot; as the request object does
&gt; puts the emphasis on the wrong thing. And calling this &quot;fallback 2&quot; is utterly
&gt; mystifying. Taking confusing code and turning it into a confusing function name
&gt; isn&apos;t good. I suggest calling this function &quot;frameEncoding&quot;, because that&apos;s
&gt; what the comment calls it. There will still be the mystery of why the document
&gt; writer is the object to ask for the frame&apos;s encoding.

Yeah, this function is a wart that I struggled with for a while.  The problem is that there seem to be three encodings that we need to worry about.  I think the right thing to do is have all three available off this object so the FrameLoader can decide what to do with them instead of putting that knowledge into this object.  I looked a bit into disentangling them, but it&apos;s somewhat complicated and I think it&apos;s better to do separately from the rest of this patch, which is mostly just moving stuff around.  In the mean time, calling it frameEncoding seems ok.  I had it as outgoingEncoding for a while, but that didn&apos;t make much sense either.

&gt; &gt; +class DocumentWriter : public Noncopyable {
&gt; &gt; +public:
&gt; &gt; +    DocumentWriter(Frame*);
&gt; &gt; +    ~DocumentWriter();
&gt; 
&gt; Is there some reason you included a destructor? I think the compiler-generated
&gt; one will suffice.

The problem is the RefPtr of an incomplete type.  The destructor needs to be in a complication unit with the complete type.

&gt; &gt; +    void setDecoder(TextResourceDecoder* decoder);
&gt; 
&gt; No argument name needed here. This should take a PassRefPtr.

Oops.  I this snuck back in while I was looking at various other options for how to handle the encoding.

&gt; &gt; +    // Callbacks from DocumentWriter
&gt; &gt; +    void didBeginDocument(bool dispatch);
&gt; 
&gt; &gt; -    void begin(const KURL&amp;, bool dispatchWindowObjectAvailable = true, SecurityOrigin* forcedSecurityOrigin = 0);
&gt; 
&gt; You shortened the name of this boolean, perhaps because inside the function the
&gt; shorter name was used. Please use the longer name.

Will fix.

&gt; Private members becoming public is always a disappointment.

Another option is to move clear() into the new object, but it seems to be actuating a bunch of Frame-level state, and the new object wanted to be more about Document-related state.

My eventual goal is to make FrameLoader more of a hub object that coordinates larger interacting objects.  That process leads to more public members.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209380</commentid>
    <comment_count>7</comment_count>
      <attachid>52678</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-06 18:25:22 -0700</bug_when>
    <thetext>Comment on attachment 52678
Patch

marking r- while I work on Darin&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210470</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-08 16:26:37 -0700</bug_when>
    <thetext>&gt; I like, but don&apos;t love, the name &quot;document writer&quot;. In particular, it seems
&gt; that the caller of &quot;write&quot; is what you would call the writer. The object you
&gt; call write *on* is not the writer. I&apos;ll try to think of another word for you.

Another point of interest on this subject is that DocumentWriter does call write() on the tokenizer:

+         tokenizer-&gt;write(decoded, true);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210490</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-08 17:14:31 -0700</bug_when>
    <thetext>I&apos;ve followed all your recommendations.  I&apos;ve also renamed DocumentWriter::write to DocumentWriter::addData so its clear that the &quot;Write&quot; in its name refers to the operation it performs on the tokenize/document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210505</commentid>
    <comment_count>10</comment_count>
      <attachid>52924</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-08 17:40:17 -0700</bug_when>
    <thetext>Created attachment 52924
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210510</commentid>
    <comment_count>11</comment_count>
      <attachid>52925</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-08 17:44:34 -0700</bug_when>
    <thetext>Created attachment 52925
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210511</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-08 17:45:55 -0700</bug_when>
    <thetext>Attachment 52925 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/loader/DocumentWriter.cpp:121:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210519</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-08 18:15:33 -0700</bug_when>
    <thetext>Attachment 52925 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/1653261</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210529</commentid>
    <comment_count>14</comment_count>
      <attachid>52925</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-08 18:37:52 -0700</bug_when>
    <thetext>Comment on attachment 52925
Patch

I&apos;ll make it build before landing.  Style error is a false positive, sadly...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210931</commentid>
    <comment_count>15</comment_count>
      <attachid>52925</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-09 14:26:28 -0700</bug_when>
    <thetext>Comment on attachment 52925
Patch

OK.  Looks much better.

You can&apos;t spell though: depricatedFrameEncoding

Please fix when you land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211532</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-11 21:20:35 -0700</bug_when>
    <thetext>Committed r57468: &lt;http://trac.webkit.org/changeset/57468&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211533</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-11 21:35:40 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57468 might have broken Chromium Mac Release and Chromium Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211544</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-11 22:53:22 -0700</bug_when>
    <thetext>Will re-land better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215006</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-20 15:23:59 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57927 might have broken Qt Linux ARMv5 Release and Chromium Linux Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/57926
http://trac.webkit.org/changeset/57927</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215017</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-20 15:34:48 -0700</bug_when>
    <thetext>Landed better, but not perfectly: http://trac.webkit.org/changeset/57927</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52678</attachid>
            <date>2010-04-06 16:09:10 -0700</date>
            <delta_ts>2010-04-08 17:40:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37175-20100406160909.patch</filename>
            <type>text/plain</type>
            <size>43685</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTIwMGM5Yi4uYTBmMjE5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MyBAQAorMjAxMC0wNC0wNiAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZhY3RvciBEb2N1bWVudFdyaXRlciBvdXQgb2YgRnJhbWVMb2FkZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MTc1CisKKyAg
ICAgICAgVGhpcyBwYXRjaCBzZXBhcmF0ZXMgdGhlIGJlZ2luL3dyaXRlL2VuZCBjeWNsZSBvZiBk
ZWNvZGluZyBuZXR3b3JrCisgICAgICAgIGJ5dGVzIGFuZCBwdXR0aW5nIHRoZW0gaW50byBhIGRv
Y3VtZW50IGZyb20gdGhlIHJlc3Qgb2YgdGhlIGxvYWRpbmcKKyAgICAgICAgbWFjaGluZXJ5LiAg
VGhlIGNvZGUgYW5kIHN0YXRlIHJlcXVpcmVkIHRvIHdyaXRlIGJ5dGVzIGludG8gYSBkb2N1bWVu
dAorICAgICAgICBkb2Vzbid0IGludGVyYWN0IHZlcnkgbXVjaCB3aXRoIHRoZSByZXN0IG9mIHRo
ZSBsb2FkaW5nIG1hY2hpbmVyeS4KKworICAgICAgICBObyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlz
IG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisgICAg
ICAgICogYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTCk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjbG9zZSk6Cisg
ICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVldCk6CisgICAgICAgICogZG9t
L1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6
OnNjcmlwdENoYXJzZXQpOgorICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcyk6CisgICAgICAgICogbG9h
ZGVyL0RvY0xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2NMb2FkZXI6OnJlcXVlc3RQ
cmVsb2FkKToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmZpbmlzaGVkTG9hZGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudExvYWRlcjo6c2V0dXBGb3JSZXBsYWNlQnlNSU1FVHlwZSk6CisgICAgICAg
ICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50V3Jp
dGVyOjpEb2N1bWVudFdyaXRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6RnJh
bWVMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmluaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRXcml0ZXI6OnJlcGxhY2VEb2N1bWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRX
cml0ZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpyZWNlaXZlZEZp
cnN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFdyaXRlcjo6YmVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlcjo6ZGlkQmVnaW5Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dFdyaXRlcjo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZEVuZERv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50V3JpdGVyOjplbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRXcml0ZXI6OmVuZElmTm90TG9hZGluZ01haW5SZXNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFdyaXRlcjo6ZW5jb2RpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OndpbGxTZXRFbmNvZGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFdyaXRlcjo6c2V0RW5jb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRXcml0ZXI6On5Eb2N1bWVudFdyaXRlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFdy
aXRlcjo6c2V0RGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6YWRkRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6dHJhbnNpdGlvblRvQ29tbWl0dGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpvcGVuKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpmaW5pc2hlZExvYWRpbmdEb2N1bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6YWRkRXh0cmFGaWVsZHNUb1JlcXVlc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRXcml0ZXI6OmNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2sy
KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50V3JpdGVyOjptaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFdyaXRl
cjo6c2V0TUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OndyaXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5
RG9jdW1lbnQpOgorICAgICAgICAqIGxvYWRlci9NZWRpYURvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnQ6OnJlcGxhY2VNZWRpYUVsZW1lbnRUaW1lckZpcmVkKToK
KyAgICAgICAgKiBsb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVG9rZW5pemVyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGFCdWlsZGVyOjpkYXRhRW5jb2RpbmcpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZGF0YUNoYW5nZWQpOgorCiAy
MDEwLTA0LTA1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBNYXJrIFJvd2UuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAg
Yi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKaW5kZXggMTFmZGFmMy4uMTFkZjhlNiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5iYXNl
LmV4cApAQCAtMTU3LDcgKzE1Nyw2IEBAIF9fWk43V2ViQ29yZTExRmlsZUNob29zZXIxMWNob29z
ZUZpbGVzRVJLTjNXVEY2VmVjdG9ySU5TXzZTdHJpbmdFTG0wRUVFCiBfX1pON1dlYkNvcmUxMUZp
bGVDaG9vc2VyRDFFdgogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjExY29tcGxldGVVUkxFUktO
U182U3RyaW5nRQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjExbG9hZEFyY2hpdmVFTjNXVEYx
MFBhc3NSZWZQdHJJTlNfN0FyY2hpdmVFRUUKLV9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIxMXNl
dEVuY29kaW5nRVJLTlNfNlN0cmluZ0ViCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTJzaG91
bGRSZWxvYWRFUktOU180S1VSTEVTM18KIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIxNGRldGFj
aENoaWxkcmVuRXYKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIxNHN0b3BBbGxMb2FkZXJzRU5T
XzE0RGF0YWJhc2VQb2xpY3lFCkBAIC0zMDIsNiArMzAxLDcgQEAgX19aTjdXZWJDb3JlMTREb2N1
bWVudExvYWRlcjhzZXRUaXRsZUVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNERvY3VtZW50
TG9hZGVyQzFFUktOU18xNVJlc291cmNlUmVxdWVzdEVSS05TXzE0U3Vic3RpdHV0ZURhdGFFCiBf
X1pON1dlYkNvcmUxNERvY3VtZW50TG9hZGVyQzJFUktOU18xNVJlc291cmNlUmVxdWVzdEVSS05T
XzE0U3Vic3RpdHV0ZURhdGFFCiBfX1pON1dlYkNvcmUxNERvY3VtZW50TG9hZGVyRDJFdgorX19a
TjdXZWJDb3JlMTREb2N1bWVudFdyaXRlcjExc2V0RW5jb2RpbmdFUktOU182U3RyaW5nRWIKIF9f
Wk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUxMnJlbGVhc2VQcm94eUV2CiBfX1pON1dlYkNvcmUx
NFJlc291cmNlSGFuZGxlMjBmb3JjZUNvbnRlbnRTbmlmZmluZ0V2CiBfX1pON1dlYkNvcmUxNFJl
c291cmNlTG9hZGVyMTRjYW5jZWxsZWRFcnJvckV2CkBAIC04MTEsNyArODExLDYgQEAgX19aTks3
V2ViQ29yZTExRnJhbWVMb2FkZXIxNGZyYW1lSGFzTG9hZGVkRXYKIF9fWk5LN1dlYkNvcmUxMUZy
YW1lTG9hZGVyMTVjb250YWluc1BsdWdpbnNFdgogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIx
NWZpcnN0TGF5b3V0RG9uZUV2CiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjE2b3V0Z29pbmdS
ZWZlcnJlckV2Ci1fX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjE2cmVzcG9uc2VNSU1FVHlwZUV2
CiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjIwYWN0aXZlRG9jdW1lbnRMb2FkZXJFdgogX19a
Tks3V2ViQ29yZTExRnJhbWVMb2FkZXIyN251bVBlbmRpbmdPckxvYWRpbmdSZXF1ZXN0c0ViCiBf
X1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjhsb2FkVHlwZUV2CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL1NjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvU2Ny
aXB0Q29udHJvbGxlckJhc2UuY3BwCmluZGV4IDA0NjdmMmQuLjQxZDJlMGEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwCkBAIC0xMDEsNyArMTAxLDcgQEAgYm9v
bCBTY3JpcHRDb250cm9sbGVyOjpleGVjdXRlSWZKYXZhU2NyaXB0VVJMKGNvbnN0IEtVUkwmIHVy
bCwgYm9vbCB1c2VyR2VzdHVyZSwKICAgICAvLyAgICAgICAgc3luY2hyb25vdXNseSBjYW4gY2F1
c2UgY3Jhc2hlczoKICAgICAvLyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY3ODIKICAgICBpZiAocmVwbGFjZURvY3VtZW50KSAKLSAgICAgICAgbV9mcmFt
ZS0+bG9hZGVyKCktPnJlcGxhY2VEb2N1bWVudChzY3JpcHRSZXN1bHQpOworICAgICAgICBtX2Zy
YW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPnJlcGxhY2VEb2N1bWVudChzY3JpcHRSZXN1bHQpOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggZWEyMmVjNi4uMjZhZWZiOCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcApAQCAtMTc1Myw3ICsxNzUzLDcgQEAgdm9pZCBEb2N1bWVudDo6Y2xvc2UoKQogICAg
IGlmIChmcmFtZSkgewogICAgICAgICAvLyBUaGlzIGNvZGUgY2FsbHMgaW1wbGljaXRDbG9zZSgp
IGlmIGFsbCBsb2FkaW5nIGhhcyBjb21wbGV0ZWQuCiAgICAgICAgIEZyYW1lTG9hZGVyKiBmcmFt
ZUxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICAgICAgZnJhbWVMb2FkZXItPmVuZElmTm90
TG9hZGluZ01haW5SZXNvdXJjZSgpOworICAgICAgICBmcmFtZUxvYWRlci0+d3JpdGVyKCktPmVu
ZElmTm90TG9hZGluZ01haW5SZXNvdXJjZSgpOwogICAgICAgICBmcmFtZUxvYWRlci0+Y2hlY2tD
b21wbGV0ZWQoKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBCZWNhdXNlIHdlIGhhdmUgbm8g
ZnJhbWUsIHdlIGRvbid0IGtub3cgaWYgYWxsIGxvYWRpbmcgaGFzIGNvbXBsZXRlZCwKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAgYi9XZWJDb3JlL2Rv
bS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCmluZGV4IDkyYTJiNDAuLjE5NGRkOWEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKKysrIGIvV2ViQ29y
ZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQg
UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQoKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIFN0cmluZyBjaGFyc2V0ID0gYXR0cnMuZ2V0KCJjaGFyc2V0Iik7CiAg
ICAgICAgICAgICAgICAgaWYgKGNoYXJzZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAg
ICBjaGFyc2V0ID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmVuY29kaW5nKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIo
KS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CiAKICAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0
ID0gZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RDU1NTdHlsZVNoZWV0KHVybCwgY2hh
cnNldCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVt
ZW50LmNwcCBiL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCmluZGV4IDczMWMzYmEuLjIy
ZDY5ODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1dl
YkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCkBAIC0yNjMsNyArMjYzLDcgQEAgU3RyaW5nIFNj
cmlwdEVsZW1lbnREYXRhOjpzY3JpcHRDaGFyc2V0KCkgY29uc3QKICAgICAvLyBJZiBjaGFyc2V0
IGhhcyBub3QgYmVlbiBkZWNsYXJlZCBpbiBzY3JpcHQgdGFnLCBmYWxsIGJhY2sgdG8gZnJhbWUg
ZW5jb2RpbmcuCiAgICAgaWYgKGNoYXJzZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChGcmFt
ZSogZnJhbWUgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICBj
aGFyc2V0ID0gZnJhbWUtPmxvYWRlcigpLT5lbmNvZGluZygpOworICAgICAgICAgICAgY2hhcnNl
dCA9IGZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CiAgICAgfQogCiAgICAg
cmV0dXJuIGNoYXJzZXQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50
LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCmluZGV4IGU3M2EzNjAuLmU4
NTAwN2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCisrKyBi
L1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCkBAIC0xOTQsNyArMTk0LDcgQEAgdm9p
ZCBIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MoKQogICAgICAgICAKICAgICAgICAgU3RyaW5nIGNo
YXJzZXQgPSBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpOwogICAgICAgICBpZiAoY2hhcnNldC5p
c0VtcHR5KCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGNoYXJzZXQgPSBk
b2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGNo
YXJzZXQgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5n
KCk7CiAKICAgICAgICAgaWYgKG1fY2FjaGVkU2hlZXQpIHsKICAgICAgICAgICAgIGlmIChtX2xv
YWRpbmcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwIGIvV2ViQ29y
ZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAppbmRleCAzMWUxZjkxLi5hMzlkM2FhIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0RvY0xv
YWRlci5jcHAKQEAgLTQwNCw3ICs0MDQsNyBAQCB2b2lkIERvY0xvYWRlcjo6cmVxdWVzdFByZWxv
YWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbgogewog
ICAgIFN0cmluZyBlbmNvZGluZzsKICAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6U2Ny
aXB0IHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpCi0gICAgICAgIGVu
Y29kaW5nID0gY2hhcnNldC5pc0VtcHR5KCkgPyBtX2RvYy0+ZnJhbWUoKS0+bG9hZGVyKCktPmVu
Y29kaW5nKCkgOiBjaGFyc2V0OworICAgICAgICBlbmNvZGluZyA9IGNoYXJzZXQuaXNFbXB0eSgp
ID8gbV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKSA6IGNoYXJz
ZXQ7CiAKICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSByZXF1ZXN0UmVzb3VyY2UodHlw
ZSwgdXJsLCBlbmNvZGluZywgdHJ1ZSk7CiAgICAgaWYgKCFyZXNvdXJjZSB8fCBtX3ByZWxvYWRz
LmNvbnRhaW5zKHJlc291cmNlKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRleCAzN2Ey
ZGUyLi45NWE5ZDY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5j
cHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCkBAIC0yNjUsNyArMjY1
LDcgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6ZmluaXNoZWRMb2FkaW5nKCkKICAgICBjb21taXRJ
ZlJlYWR5KCk7CiAgICAgaWYgKEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZUxvYWRlcigpKSB7
CiAgICAgICAgIGxvYWRlci0+ZmluaXNoZWRMb2FkaW5nRG9jdW1lbnQodGhpcyk7Ci0gICAgICAg
IGxvYWRlci0+ZW5kKCk7CisgICAgICAgIGxvYWRlci0+d3JpdGVyKCktPmVuZCgpOwogICAgIH0K
IH0KIApAQCAtMzA3LDcgKzMwNyw3IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldHVwRm9yUmVw
bGFjZUJ5TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBuZXdNSU1FVHlwZSkKICAgICB9CiAgICAgCiAg
ICAgZnJhbWVMb2FkZXIoKS0+ZmluaXNoZWRMb2FkaW5nRG9jdW1lbnQodGhpcyk7Ci0gICAgbV9m
cmFtZS0+bG9hZGVyKCktPmVuZCgpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+
ZW5kKCk7CiAgICAgCiAgICAgZnJhbWVMb2FkZXIoKS0+c2V0UmVwbGFjaW5nKCk7CiAgICAgbV9n
b3RGaXJzdEJ5dGUgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCBhNzg5NzRhLi44
OWEzZDRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0xNjksMTIgKzE2OSwyMCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5jb2RpbmcoY29uc3QgRnJhbWUq
IGZyYW1lLCBjb25zdCBGcmFtZQogICAgIHJldHVybiBwYXJlbnRGcmFtZSAmJiBwYXJlbnRGcmFt
ZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzKGZyYW1lLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpKTsKIH0KIAorRG9jdW1lbnRXcml0ZXI6OkRvY3VtZW50V3Jp
dGVyKEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3JlY2VpdmVk
RGF0YShmYWxzZSkKKyAgICAsIG1fZW5jb2RpbmdXYXNDaG9zZW5CeVVzZXIoZmFsc2UpCit7Cit9
CisKIEZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcihGcmFtZSogZnJhbWUsIEZyYW1lTG9hZGVyQ2xp
ZW50KiBjbGllbnQpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV9jbGllbnQoY2xpZW50
KQogICAgICwgbV9wb2xpY3lDaGVja2VyKGZyYW1lKQogICAgICwgbV9oaXN0b3J5KGZyYW1lKQog
ICAgICwgbV9ub3RpZmVyKGZyYW1lKQorICAgICwgbV93cml0ZXIoZnJhbWUpCiAgICAgLCBtX3N0
YXRlKEZyYW1lU3RhdGVDb21taXR0ZWRQYWdlKQogICAgICwgbV9sb2FkVHlwZShGcmFtZUxvYWRU
eXBlU3RhbmRhcmQpCiAgICAgLCBtX2RlbGVnYXRlSXNIYW5kbGluZ1Byb3Zpc2lvbmFsTG9hZEVy
cm9yKGZhbHNlKQpAQCAtMTg5LDggKzE5Nyw2IEBAIEZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcihG
cmFtZSogZnJhbWUsIEZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCiAgICAgLCBtX2lzQ29tcGxl
dGUoZmFsc2UpCiAgICAgLCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZShmYWxzZSkKICAgICAsIG1f
bmVlZHNDbGVhcihmYWxzZSkKLSAgICAsIG1fcmVjZWl2ZWREYXRhKGZhbHNlKQotICAgICwgbV9l
bmNvZGluZ1dhc0Nob3NlbkJ5VXNlcihmYWxzZSkKICAgICAsIG1fY29udGFpbnNQbHVnSW5zKGZh
bHNlKQogICAgICwgbV9jaGVja1RpbWVyKHRoaXMsICZGcmFtZUxvYWRlcjo6Y2hlY2tUaW1lckZp
cmVkKQogICAgICwgbV9zaG91bGRDYWxsQ2hlY2tDb21wbGV0ZWQoZmFsc2UpCkBAIC0yMzAsOCAr
MjM2LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6aW5pdCgpCiAgICAgc2V0U3RhdGUoRnJhbWVTdGF0
ZVByb3Zpc2lvbmFsKTsKICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnNldFJlc3Bv
bnNlKFJlc291cmNlUmVzcG9uc2UoS1VSTCgpLCAidGV4dC9odG1sIiwgMCwgU3RyaW5nKCksIFN0
cmluZygpKSk7CiAgICAgbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyLT5maW5pc2hlZExvYWRp
bmcoKTsKLSAgICBiZWdpbihLVVJMKCksIGZhbHNlKTsKLSAgICBlbmQoKTsKKyAgICB3cml0ZXIo
KS0+YmVnaW4oS1VSTCgpLCBmYWxzZSk7CisgICAgd3JpdGVyKCktPmVuZCgpOwogICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPmNhbmNlbFBhcnNpbmcoKTsKICAgICBtX2NyZWF0aW5nSW5pdGlhbEVt
cHR5RG9jdW1lbnQgPSBmYWxzZTsKICAgICBtX2RpZENhbGxJbXBsaWNpdENsb3NlID0gdHJ1ZTsK
QEAgLTcwMSwxMCArNzA3LDEwIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNhbmNlbEFuZENsZWFyKCkK
ICAgICBtX2ZyYW1lLT5zY3JpcHQoKS0+dXBkYXRlUGxhdGZvcm1TY3JpcHRPYmplY3RzKCk7CiB9
CiAKLXZvaWQgRnJhbWVMb2FkZXI6OnJlcGxhY2VEb2N1bWVudChjb25zdCBTdHJpbmcmIGh0bWwp
Cit2b2lkIERvY3VtZW50V3JpdGVyOjpyZXBsYWNlRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBodG1s
KQogewotICAgIHN0b3BBbGxMb2FkZXJzKCk7Ci0gICAgYmVnaW4obV9VUkwsIHRydWUsIG1fZnJh
bWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIG1fZnJhbWUtPmxvYWRlcigp
LT5zdG9wQWxsTG9hZGVycygpOworICAgIGJlZ2luKG1fZnJhbWUtPmxvYWRlcigpLT51cmwoKSwg
dHJ1ZSwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CiAgICAgd3JpdGUo
aHRtbCk7CiAgICAgZW5kKCk7CiB9CkBAIC03NDIsNyArNzQ4LDcgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6Y2xlYXIoYm9vbCBjbGVhcldpbmRvd1Byb3BlcnRpZXMsIGJvb2wgY2xlYXJTY3JpcHRPYmpl
Y3RzLCBib28KICAgICAvLyBEbyBub3QgZHJvcCB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBTY3Jp
cHRDb250cm9sbGVyIGFuZCB2aWV3IGFyZSBjbGVhcmVkCiAgICAgLy8gYXMgc29tZSBkZXN0cnVj
dG9ycyBtaWdodCBzdGlsbCB0cnkgdG8gYWNjZXNzIHRoZSBkb2N1bWVudC4KICAgICBtX2ZyYW1l
LT5zZXREb2N1bWVudCgwKTsKLSAgICBtX2RlY29kZXIgPSAwOworICAgIHdyaXRlcigpLT5jbGVh
cigpOwogCiAgICAgbV9jb250YWluc1BsdWdJbnMgPSBmYWxzZTsKIApAQCAtNzU0LDE3ICs3NjAs
MjAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoYm9vbCBjbGVhcldpbmRvd1Byb3BlcnRpZXMs
IGJvb2wgY2xlYXJTY3JpcHRPYmplY3RzLCBib28KICAgICBtX2NoZWNrVGltZXIuc3RvcCgpOwog
ICAgIG1fc2hvdWxkQ2FsbENoZWNrQ29tcGxldGVkID0gZmFsc2U7CiAgICAgbV9zaG91bGRDYWxs
Q2hlY2tMb2FkQ29tcGxldGUgPSBmYWxzZTsKLQotICAgIG1fcmVjZWl2ZWREYXRhID0gZmFsc2U7
CiAgICAgbV9pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCA9IGZhbHNlOworfQogCit2
b2lkIERvY3VtZW50V3JpdGVyOjpjbGVhcigpCit7CisgICAgbV9kZWNvZGVyID0gMDsKKyAgICBt
X3JlY2VpdmVkRGF0YSA9IGZhbHNlOwogICAgIGlmICghbV9lbmNvZGluZ1dhc0Nob3NlbkJ5VXNl
cikKICAgICAgICAgbV9lbmNvZGluZyA9IFN0cmluZygpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVy
OjpyZWNlaXZlZEZpcnN0RGF0YSgpCiB7Ci0gICAgYmVnaW4obV93b3JraW5nVVJMLCBmYWxzZSk7
CisgICAgd3JpdGVyKCktPmJlZ2luKG1fd29ya2luZ1VSTCwgZmFsc2UpOwogCiAgICAgZGlzcGF0
Y2hEaWRDb21taXRMb2FkKCk7CiAgICAgZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdHNJbkFs
bFdvcmxkcygpOwpAQCAtNzk1LDIyICs4MDQsNTIgQEAgdm9pZCBGcmFtZUxvYWRlcjo6cmVjZWl2
ZWRGaXJzdERhdGEoKQogICAgIG1fZnJhbWUtPnJlZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVkdWxl
UmVkaXJlY3QoZGVsYXksIHVybCk7CiB9CiAKLWNvbnN0IFN0cmluZyYgRnJhbWVMb2FkZXI6OnJl
c3BvbnNlTUlNRVR5cGUoKSBjb25zdAordm9pZCBEb2N1bWVudFdyaXRlcjo6YmVnaW4oKQogewot
ICAgIHJldHVybiBtX3Jlc3BvbnNlTUlNRVR5cGU7CisgICAgYmVnaW4oS1VSTCgpKTsKIH0KIAot
dm9pZCBGcmFtZUxvYWRlcjo6c2V0UmVzcG9uc2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUp
Cit2b2lkIEZyYW1lTG9hZGVyOjpzZXRVUkwoY29uc3QgS1VSTCYgdXJsKQogewotICAgIG1fcmVz
cG9uc2VNSU1FVHlwZSA9IHR5cGU7CisgICAgS1VSTCByZWYodXJsKTsKKyAgICByZWYuc2V0VXNl
cihTdHJpbmcoKSk7CisgICAgcmVmLnNldFBhc3MoU3RyaW5nKCkpOworICAgIHJlZi5yZW1vdmVG
cmFnbWVudElkZW50aWZpZXIoKTsKKyAgICBtX291dGdvaW5nUmVmZXJyZXIgPSByZWYuc3RyaW5n
KCk7CisgICAgbV9VUkwgPSB1cmw7CiB9Ci0gICAgCi12b2lkIEZyYW1lTG9hZGVyOjpiZWdpbigp
CisKK3ZvaWQgRnJhbWVMb2FkZXI6OmRpZEJlZ2luRG9jdW1lbnQoYm9vbCBkaXNwYXRjaCkKIHsK
LSAgICBiZWdpbihLVVJMKCkpOworICAgIGlmIChtX3BlbmRpbmdTdGF0ZU9iamVjdCkgeworICAg
ICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zdGF0ZVBvcHBlZChtX3BlbmRpbmdTdGF0ZU9iamVj
dC5nZXQoKSk7CisgICAgICAgIG1fcGVuZGluZ1N0YXRlT2JqZWN0LmNsZWFyKCk7CisgICAgfQor
CisgICAgbV9uZWVkc0NsZWFyID0gdHJ1ZTsKKyAgICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKKyAg
ICBtX2RpZENhbGxJbXBsaWNpdENsb3NlID0gZmFsc2U7CisgICAgbV9pc0xvYWRpbmdNYWluUmVz
b3VyY2UgPSB0cnVlOworICAgIG1faXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQgPSBt
X2NyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQ7CisKKyAgICBpZiAoZGlzcGF0Y2gpCisgICAg
ICAgIGRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RzSW5BbGxXb3JsZHMoKTsKKworICAgIHVw
ZGF0ZUZpcnN0UGFydHlGb3JDb29raWVzKCk7CisKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCkt
PmRvY0xvYWRlcigpLT5zZXRBdXRvTG9hZEltYWdlcyhzZXR0aW5ncyAmJiBzZXR0aW5ncy0+bG9h
ZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCkpOworCisgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXIpIHsK
KyAgICAgICAgU3RyaW5nIGRuc1ByZWZldGNoQ29udHJvbCA9IG1fZG9jdW1lbnRMb2FkZXItPnJl
c3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkKCJYLUROUy1QcmVmZXRjaC1Db250cm9sIik7CisgICAg
ICAgIGlmICghZG5zUHJlZmV0Y2hDb250cm9sLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPnBhcnNlRE5TUHJlZmV0Y2hDb250cm9sSGVhZGVyKGRuc1ByZWZldGNo
Q29udHJvbCk7CisgICAgfQorCisgICAgaGlzdG9yeSgpLT5yZXN0b3JlRG9jdW1lbnRTdGF0ZSgp
OwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpiZWdpbihjb25zdCBLVVJMJiB1cmwsIGJvb2wgZGlz
cGF0Y2gsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit2b2lkIERvY3VtZW50V3JpdGVyOjpiZWdp
bihjb25zdCBLVVJMJiB1cmwsIGJvb2wgZGlzcGF0Y2gsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
CiB7CiAgICAgLy8gV2UgbmVlZCB0byB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBzZWN1cml0eSBv
cmlnaW4gYmVjYXVzZSB8Y2xlYXJ8CiAgICAgLy8gbWlnaHQgZGVzdHJveSB0aGUgZG9jdW1lbnQg
dGhhdCBvd25zIGl0LgpAQCAtODE5LDc0ICs4NTgsNDEgQEAgdm9pZCBGcmFtZUxvYWRlcjo6YmVn
aW4oY29uc3QgS1VSTCYgdXJsLCBib29sIGRpc3BhdGNoLCBTZWN1cml0eU9yaWdpbiogb3JpZ2lu
KQogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQ7CiAKICAgICAvLyBDcmVhdGUgYSBuZXcg
ZG9jdW1lbnQgYmVmb3JlIGNsZWFyaW5nIHRoZSBmcmFtZSwgYmVjYXVzZSBpdCBtYXkgbmVlZCB0
byBpbmhlcml0IGFuIGFsaWFzZWQgc2VjdXJpdHkgY29udGV4dC4KLSAgICBpZiAoIW1faXNEaXNw
bGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQgJiYgbV9jbGllbnQtPnNob3VsZFVzZVBsdWdpbkRv
Y3VtZW50KG1fcmVzcG9uc2VNSU1FVHlwZSkpCisgICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+
aXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5sb2FkZXIoKS0+
Y2xpZW50KCktPnNob3VsZFVzZVBsdWdpbkRvY3VtZW50KG1fbWltZVR5cGUpKQogICAgICAgICBk
b2N1bWVudCA9IFBsdWdpbkRvY3VtZW50OjpjcmVhdGUobV9mcmFtZSk7Ci0gICAgZWxzZSBpZiAo
IW1fY2xpZW50LT5oYXNIVE1MVmlldygpKQorICAgIGVsc2UgaWYgKCFtX2ZyYW1lLT5sb2FkZXIo
KS0+Y2xpZW50KCktPmhhc0hUTUxWaWV3KCkpCiAgICAgICAgIGRvY3VtZW50ID0gUGxhY2Vob2xk
ZXJEb2N1bWVudDo6Y3JlYXRlKG1fZnJhbWUpOwogICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQg
PSBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQobV9yZXNwb25zZU1JTUVUeXBlLCBt
X2ZyYW1lLCBtX2ZyYW1lLT5pblZpZXdTb3VyY2VNb2RlKCkpOworICAgICAgICBkb2N1bWVudCA9
IERPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudChtX21pbWVUeXBlLCBtX2ZyYW1lLCBt
X2ZyYW1lLT5pblZpZXdTb3VyY2VNb2RlKCkpOwogCi0gICAgYm9vbCByZXNldFNjcmlwdGluZyA9
ICEobV9pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCAmJiBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLT5pc1NlY3VyZVRyYW5zaXRpb25Ubyh1cmwpKTsKLSAgICBj
bGVhcihyZXNldFNjcmlwdGluZywgcmVzZXRTY3JpcHRpbmcpOworICAgIGJvb2wgcmVzZXRTY3Jp
cHRpbmcgPSAhKG1fZnJhbWUtPmxvYWRlcigpLT5pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1
bWVudCgpICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmlzU2VjdXJl
VHJhbnNpdGlvblRvKHVybCkpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGVhcihyZXNldFNj
cmlwdGluZywgcmVzZXRTY3JpcHRpbmcpOwogICAgIGlmIChyZXNldFNjcmlwdGluZykKICAgICAg
ICAgbV9mcmFtZS0+c2NyaXB0KCktPnVwZGF0ZVBsYXRmb3JtU2NyaXB0T2JqZWN0cygpOwogCi0g
ICAgbV9uZWVkc0NsZWFyID0gdHJ1ZTsKLSAgICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKLSAgICBt
X2RpZENhbGxJbXBsaWNpdENsb3NlID0gZmFsc2U7Ci0gICAgbV9pc0xvYWRpbmdNYWluUmVzb3Vy
Y2UgPSB0cnVlOwotICAgIG1faXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQgPSBtX2Ny
ZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQ7Ci0KLSAgICBLVVJMIHJlZih1cmwpOwotICAgIHJl
Zi5zZXRVc2VyKFN0cmluZygpKTsKLSAgICByZWYuc2V0UGFzcyhTdHJpbmcoKSk7Ci0gICAgcmVm
LnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotICAgIG1fb3V0Z29pbmdSZWZlcnJlciA9IHJl
Zi5zdHJpbmcoKTsKLSAgICBtX1VSTCA9IHVybDsKLQotICAgIGRvY3VtZW50LT5zZXRVUkwobV9V
UkwpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5zZXRVUkwodXJsKTsKKyAgICBkb2N1bWVudC0+
c2V0VVJMKHVybCk7CiAgICAgbV9mcmFtZS0+c2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0gICAg
aWYgKG1fcGVuZGluZ1N0YXRlT2JqZWN0KSB7Ci0gICAgICAgIGRvY3VtZW50LT5zdGF0ZVBvcHBl
ZChtX3BlbmRpbmdTdGF0ZU9iamVjdC5nZXQoKSk7Ci0gICAgICAgIG1fcGVuZGluZ1N0YXRlT2Jq
ZWN0LmNsZWFyKCk7Ci0gICAgfQotICAgIAogICAgIGlmIChtX2RlY29kZXIpCiAgICAgICAgIGRv
Y3VtZW50LT5zZXREZWNvZGVyKG1fZGVjb2Rlci5nZXQoKSk7CiAgICAgaWYgKGZvcmNlZFNlY3Vy
aXR5T3JpZ2luKQogICAgICAgICBkb2N1bWVudC0+c2V0U2VjdXJpdHlPcmlnaW4oZm9yY2VkU2Vj
dXJpdHlPcmlnaW4uZ2V0KCkpOwotCiAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPnNldFVSTChk
b2N1bWVudC0+dXJsKCkpOwogICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5zZXRTZWN1cml0eU9y
aWdpbihkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSk7CiAKLSAgICBpZiAoZGlzcGF0Y2gpCi0g
ICAgICAgIGRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RzSW5BbGxXb3JsZHMoKTsKLSAgICAK
LSAgICB1cGRhdGVGaXJzdFBhcnR5Rm9yQ29va2llcygpOwotCi0gICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7Ci0gICAgZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5z
ZXRBdXRvTG9hZEltYWdlcyhzZXR0aW5ncyAmJiBzZXR0aW5ncy0+bG9hZHNJbWFnZXNBdXRvbWF0
aWNhbGx5KCkpOwotCi0gICAgaWYgKG1fZG9jdW1lbnRMb2FkZXIpIHsKLSAgICAgICAgU3RyaW5n
IGRuc1ByZWZldGNoQ29udHJvbCA9IG1fZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNlKCkuaHR0cEhl
YWRlckZpZWxkKCJYLUROUy1QcmVmZXRjaC1Db250cm9sIik7Ci0gICAgICAgIGlmICghZG5zUHJl
ZmV0Y2hDb250cm9sLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5wYXJzZUROU1By
ZWZldGNoQ29udHJvbEhlYWRlcihkbnNQcmVmZXRjaENvbnRyb2wpOwotICAgIH0KLQotICAgIGhp
c3RvcnkoKS0+cmVzdG9yZURvY3VtZW50U3RhdGUoKTsKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
ZGlkQmVnaW5Eb2N1bWVudChkaXNwYXRjaCk7CiAKICAgICBkb2N1bWVudC0+aW1wbGljaXRPcGVu
KCk7Ci0gICAgCi0gICAgaWYgKG1fZnJhbWUtPnZpZXcoKSAmJiBtX2NsaWVudC0+aGFzSFRNTFZp
ZXcoKSkKKworICAgIGlmIChtX2ZyYW1lLT52aWV3KCkgJiYgbV9mcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpLT5oYXNIVE1MVmlldygpKQogICAgICAgICBtX2ZyYW1lLT52aWV3KCktPnNldENvbnRl
bnRzU2l6ZShJbnRTaXplKCkpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjp3cml0ZShjb25zdCBj
aGFyKiBzdHIsIGludCBsZW4sIGJvb2wgZmx1c2gpCit2b2lkIERvY3VtZW50V3JpdGVyOjp3cml0
ZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4sIGJvb2wgZmx1c2gpCiB7CiAgICAgaWYgKGxlbiA9
PSAwICYmICFmbHVzaCkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgaWYgKGxlbiA9PSAt
MSkKICAgICAgICAgbGVuID0gc3RybGVuKHN0cik7CiAKQEAgLTg5OSw3ICs5MDUsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjp3cml0ZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4sIGJvb2wgZmx1c2gp
CiAgICAgCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0
aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCkpIHsKLSAgICAgICAgICAgIG1fZGVjb2RlciA9IFRl
eHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShtX3Jlc3BvbnNlTUlNRVR5cGUsCisgICAgICAgICAg
ICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUobV9taW1lVHlwZSwKICAg
ICAgICAgICAgICAgICBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSwKICAgICAg
ICAgICAgICAgICBzZXR0aW5ncy0+dXNlc0VuY29kaW5nRGV0ZWN0b3IoKSk7CiAgICAgICAgICAg
ICBGcmFtZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpOwpAQCAtOTE1
LDcgKzkyMSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OndyaXRlKGNvbnN0IGNoYXIqIHN0ciwgaW50
IGxlbiwgYm9vbCBmbHVzaCkKICAgICAgICAgICAgIGlmIChjYW5SZWZlclRvUGFyZW50RnJhbWVF
bmNvZGluZyhtX2ZyYW1lLCBwYXJlbnRGcmFtZSkpCiAgICAgICAgICAgICAgICAgbV9kZWNvZGVy
LT5zZXRIaW50RW5jb2RpbmcocGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmRlY29kZXIoKSk7CiAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rl
cjo6Y3JlYXRlKG1fcmVzcG9uc2VNSU1FVHlwZSwgU3RyaW5nKCkpOworICAgICAgICAgICAgbV9k
ZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKG1fbWltZVR5cGUsIFN0cmluZygp
KTsKICAgICAgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQo
KTsKICAgICAgICAgaWYgKG1fZW5jb2RpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAo
Y2FuUmVmZXJUb1BhcmVudEZyYW1lRW5jb2RpbmcobV9mcmFtZSwgcGFyZW50RnJhbWUpKQpAQCAt
OTQ2LDcgKzk1Miw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OndyaXRlKGNvbnN0IGNoYXIqIHN0ciwg
aW50IGxlbiwgYm9vbCBmbHVzaCkKICAgICB9CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OndyaXRl
KGNvbnN0IFN0cmluZyYgc3RyKQordm9pZCBEb2N1bWVudFdyaXRlcjo6d3JpdGUoY29uc3QgU3Ry
aW5nJiBzdHIpCiB7CiAgICAgaWYgKHN0ci5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
OTYwLDE1ICs5NjYsMjAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6d3JpdGUoY29uc3QgU3RyaW5nJiBz
dHIpCiAgICAgICAgIHRva2VuaXplci0+d3JpdGUoc3RyLCB0cnVlKTsKIH0KIAotdm9pZCBGcmFt
ZUxvYWRlcjo6ZW5kKCkKK3ZvaWQgRnJhbWVMb2FkZXI6OmRpZEVuZERvY3VtZW50KCkKIHsKICAg
ICBtX2lzTG9hZGluZ01haW5SZXNvdXJjZSA9IGZhbHNlOworfQorCit2b2lkIERvY3VtZW50V3Jp
dGVyOjplbmQoKQoreworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kaWRFbmREb2N1bWVudCgpOwog
ICAgIGVuZElmTm90TG9hZGluZ01haW5SZXNvdXJjZSgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVy
OjplbmRJZk5vdExvYWRpbmdNYWluUmVzb3VyY2UoKQordm9pZCBEb2N1bWVudFdyaXRlcjo6ZW5k
SWZOb3RMb2FkaW5nTWFpblJlc291cmNlKCkKIHsKLSAgICBpZiAobV9pc0xvYWRpbmdNYWluUmVz
b3VyY2UgfHwgIW1fZnJhbWUtPnBhZ2UoKSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBp
ZiAobV9mcmFtZS0+bG9hZGVyKCktPmlzTG9hZGluZ01haW5SZXNvdXJjZSgpIHx8ICFtX2ZyYW1l
LT5wYWdlKCkgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU0CkBAIC0xMjU2
LDcgKzEyNjcsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkQXJjaGl2ZShQYXNzUmVmUHRyPEFy
Y2hpdmU+IHBycEFyY2hpdmUpCiAgICAgbG9hZChkb2N1bWVudExvYWRlci5nZXQoKSk7CiB9CiAK
LVN0cmluZyBGcmFtZUxvYWRlcjo6ZW5jb2RpbmcoKSBjb25zdAorU3RyaW5nIERvY3VtZW50V3Jp
dGVyOjplbmNvZGluZygpIGNvbnN0CiB7CiAgICAgaWYgKG1fZW5jb2RpbmdXYXNDaG9zZW5CeVVz
ZXIgJiYgIW1fZW5jb2RpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9lbmNvZGluZzsK
QEAgLTE1MjksMjAgKzE1NDAsMzQgQEAgdm9pZCBGcmFtZUxvYWRlcjo6cmVzZXRNdWx0aXBsZUZv
cm1TdWJtaXNzaW9uUHJvdGVjdGlvbigpCiAgICAgbV9zdWJtaXR0ZWRGb3JtVVJMID0gS1VSTCgp
OwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wgdXNlckNob3NlbikKK3ZvaWQgRnJhbWVMb2FkZXI6OndpbGxTZXRFbmNvZGluZygpCiB7
CiAgICAgaWYgKCFtX3dvcmtpbmdVUkwuaXNFbXB0eSgpKQogICAgICAgICByZWNlaXZlZEZpcnN0
RGF0YSgpOworfQorCit2b2lkIERvY3VtZW50V3JpdGVyOjpzZXRFbmNvZGluZyhjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wgdXNlckNob3NlbikKK3sKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d2ls
bFNldEVuY29kaW5nKCk7CiAgICAgbV9lbmNvZGluZyA9IG5hbWU7CiAgICAgbV9lbmNvZGluZ1dh
c0Nob3NlbkJ5VXNlciA9IHVzZXJDaG9zZW47CiB9CiAKK0RvY3VtZW50V3JpdGVyOjp+RG9jdW1l
bnRXcml0ZXIoKQoreworfQorCit2b2lkIERvY3VtZW50V3JpdGVyOjpzZXREZWNvZGVyKFRleHRS
ZXNvdXJjZURlY29kZXIqIGRlY29kZXIpCit7CisgICAgbV9kZWNvZGVyID0gZGVjb2RlcjsKK30K
Kwogdm9pZCBGcmFtZUxvYWRlcjo6YWRkRGF0YShjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0
aCkKIHsKICAgICBBU1NFUlQobV93b3JraW5nVVJMLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKG1f
ZnJhbWUtPmRvY3VtZW50KCkpOwogICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpLT5wYXJz
aW5nKCkpOwotICAgIHdyaXRlKGJ5dGVzLCBsZW5ndGgpOworICAgIHdyaXRlcigpLT53cml0ZShi
eXRlcywgbGVuZ3RoKTsKIH0KIAogI2lmIEVOQUJMRShXTUwpCkBAIC0yNjU0LDcgKzI2NzksNyBA
QCB2b2lkIEZyYW1lTG9hZGVyOjp0cmFuc2l0aW9uVG9Db21taXR0ZWQoUGFzc1JlZlB0cjxDYWNo
ZWRQYWdlPiBjYWNoZWRQYWdlKQogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQogCi0gICAgbV9yZXNwb25zZU1JTUVUeXBlID0gZGwtPnJlc3BvbnNlTUlNRVR5cGUoKTsK
KyAgICB3cml0ZXIoKS0+c2V0TUlNRVR5cGUoZGwtPnJlc3BvbnNlTUlNRVR5cGUoKSk7CiAKICAg
ICAvLyBUZWxsIHRoZSBjbGllbnQgd2UndmUgY29tbWl0dGVkIHRoaXMgVVJMLgogICAgIEFTU0VS
VChtX2ZyYW1lLT52aWV3KCkpOwpAQCAtMjc3MSw4ICsyNzk2LDggQEAgdm9pZCBGcmFtZUxvYWRl
cjo6b3BlbihDYWNoZWRGcmFtZUJhc2UmIGNhY2hlZEZyYW1lKQogICAgIG1fVVJMID0gdXJsOwog
ICAgIG1fd29ya2luZ1VSTCA9IHVybDsKIAotICAgIHN0YXJ0ZWQoKTsKLSAgICBjbGVhcih0cnVl
LCB0cnVlLCBjYWNoZWRGcmFtZS5pc01haW5GcmFtZSgpKTsKKyAgICBtX2ZyYW1lLT5sb2FkZXIo
KS0+c3RhcnRlZCgpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGVhcih0cnVlLCB0cnVlLCBj
YWNoZWRGcmFtZS5pc01haW5GcmFtZSgpKTsKIAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNh
Y2hlZEZyYW1lLmRvY3VtZW50KCk7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsKQEAgLTI3OTksNyAr
MjgyNCw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6Om9wZW4oQ2FjaGVkRnJhbWVCYXNlJiBjYWNoZWRG
cmFtZSkKICAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+c2V0VVJMKGRvY3VtZW50LT51cmwoKSk7
CiAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPnNldFNlY3VyaXR5T3JpZ2luKGRvY3VtZW50LT5z
ZWN1cml0eU9yaWdpbigpKTsKIAotICAgIG1fZGVjb2RlciA9IGRvY3VtZW50LT5kZWNvZGVyKCk7
CisgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgdGhlIGVuY29kaW5nPworICAgIHdyaXRlcigpLT5z
ZXREZWNvZGVyKGRvY3VtZW50LT5kZWNvZGVyKCkpOwogCiAgICAgdXBkYXRlRmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKTsKIApAQCAtMjg5MSwxNCArMjkxNywxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpm
aW5pc2hlZExvYWRpbmdEb2N1bWVudChEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgIEFyY2hp
dmVSZXNvdXJjZSogbWFpblJlc291cmNlID0gYXJjaGl2ZS0+bWFpblJlc291cmNlKCk7CiAgICAg
bG9hZGVyLT5zZXRQYXJzZWRBcmNoaXZlRGF0YShtYWluUmVzb3VyY2UtPmRhdGEoKSk7CiAKLSAg
ICBtX3Jlc3BvbnNlTUlNRVR5cGUgPSBtYWluUmVzb3VyY2UtPm1pbWVUeXBlKCk7CisgICAgd3Jp
dGVyKCktPnNldE1JTUVUeXBlKG1haW5SZXNvdXJjZS0+bWltZVR5cGUoKSk7CiAKICAgICBjbG9z
ZVVSTCgpOwogICAgIGRpZE9wZW5VUkwobWFpblJlc291cmNlLT51cmwoKSk7CiAKICAgICBTdHJp
bmcgdXNlckNob3NlbkVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXIoKS0+b3ZlcnJpZGVFbmNvZGlu
ZygpOwogICAgIGJvb2wgZW5jb2RpbmdJc1VzZXJDaG9zZW4gPSAhdXNlckNob3NlbkVuY29kaW5n
LmlzTnVsbCgpOwotICAgIHNldEVuY29kaW5nKGVuY29kaW5nSXNVc2VyQ2hvc2VuID8gdXNlckNo
b3NlbkVuY29kaW5nIDogbWFpblJlc291cmNlLT50ZXh0RW5jb2RpbmcoKSwgZW5jb2RpbmdJc1Vz
ZXJDaG9zZW4pOworICAgIHdyaXRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGluZ0lzVXNlckNob3Nl
biA/IHVzZXJDaG9zZW5FbmNvZGluZyA6IG1haW5SZXNvdXJjZS0+dGV4dEVuY29kaW5nKCksIGVu
Y29kaW5nSXNVc2VyQ2hvc2VuKTsKIAogICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsK
IApAQCAtMzMwNSwxMCArMzMzMSwxOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjphZGRFeHRyYUZpZWxk
c1RvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEZyYW1lTG9hZFR5cAogCiAgICAg
Ly8gQWx3YXlzIHRyeSBVVEYtOC4gSWYgdGhhdCBmYWlscywgdHJ5IGZyYW1lIGVuY29kaW5nIChp
ZiBhbnkpIGFuZCB0aGVuIHRoZSBkZWZhdWx0LgogICAgIC8vIEZvciBhIG5ld2x5IG9wZW5lZCBm
cmFtZSB3aXRoIGFuIGVtcHR5IFVSTCwgZW5jb2RpbmcoKSBzaG91bGQgbm90IGJlIHVzZWQsIGJl
Y2F1c2UgdGhpcyBtZXRob2RzIGFza3MgZGVjb2Rlciwgd2hpY2ggdXNlcyBJU08tODg1OS0xLgot
ICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgcmVxdWVz
dC5zZXRSZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSgiVVRG
LTgiLCBtX1VSTC5pc0VtcHR5KCkgPyBtX2VuY29kaW5nIDogZW5jb2RpbmcoKSwgc2V0dGluZ3Mg
PyBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSA6IFN0cmluZygpKTsKKyAgICBT
dHJpbmcgZW5jb2RpbmcxID0gIlVURi04IjsKKyAgICBTdHJpbmcgZW5jb2RpbmcyID0gd3JpdGVy
KCktPmNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2syKCk7CisgICAgU3RyaW5nIGVu
Y29kaW5nMzsKKyAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3Mo
KSkKKyAgICAgICAgZW5jb2RpbmczID0gc2V0dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1l
KCk7CisgICAgcmVxdWVzdC5zZXRSZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFs
bGJhY2tBcnJheShlbmNvZGluZzEsIGVuY29kaW5nMiwgZW5jb2RpbmczKTsKIH0KIAorU3RyaW5n
IERvY3VtZW50V3JpdGVyOjpjb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrMigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZnJhbWUtPmxvYWRlcigpLT51cmwoKS5pc0VtcHR5KCkgPyBt
X2VuY29kaW5nIDogZW5jb2RpbmcoKTsKK30KKyAgICAKIHZvaWQgRnJhbWVMb2FkZXI6OmFkZEhU
VFBPcmlnaW5JZk5lZWRlZChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0cmluZyBvcmlnaW4p
CiB7CiAgICAgaWYgKCFyZXF1ZXN0Lmh0dHBPcmlnaW4oKS5pc0VtcHR5KCkpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuaAppbmRleCBlMjE4NzQ0Li40ZmJjZWUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKQEAgLTg3LDYg
Kzg3LDQ1IEBAIHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKIAogYm9vbCBpc0JhY2tGb3J3YXJkTG9h
ZFR5cGUoRnJhbWVMb2FkVHlwZSk7CiAKK2NsYXNzIERvY3VtZW50V3JpdGVyIDogcHVibGljIE5v
bmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBEb2N1bWVudFdyaXRlcihGcmFtZSopOworICAgIH5E
b2N1bWVudFdyaXRlcigpOworCisgICAgdm9pZCByZXBsYWNlRG9jdW1lbnQoY29uc3QgU3RyaW5n
Jik7CisKKyAgICB2b2lkIGJlZ2luKCk7CisgICAgdm9pZCBiZWdpbihjb25zdCBLVVJMJiwgYm9v
bCBkaXNwYXRjaFdpbmRvd09iamVjdEF2YWlsYWJsZSA9IHRydWUsIFNlY3VyaXR5T3JpZ2luKiBm
b3JjZWRTZWN1cml0eU9yaWdpbiA9IDApOworICAgIHZvaWQgd3JpdGUoY29uc3QgY2hhciogc3Ry
aW5nLCBpbnQgbGVuZ3RoID0gLTEsIGJvb2wgZmx1c2ggPSBmYWxzZSk7CisgICAgdm9pZCB3cml0
ZShjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGVuZCgpOworICAgIHZvaWQgZW5kSWZOb3RMb2Fk
aW5nTWFpblJlc291cmNlKCk7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgU3RyaW5nIGVuY29k
aW5nKCkgY29uc3Q7CisgICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGVuY29kaW5n
LCBib29sIHVzZXJDaG9zZW4pOworCisgICAgLy8gRklYTUU6IEl0J3MgcmVhbGx5IHVuZm9ydW5h
dGUgdG8gbmVlZCB0byBleHBvc2UgdGhpcyBwaWVjZSBvZiBzdGF0ZS4KKyAgICAvLyBJIHN1c3Bl
Y3QgYSBiZXR0ZXIgZGVzaWduIGlzIHRvIGRpc2VudGFuZ2xlIHVzZXItcHJvdmlkZWQgZW5jb2Rp
bmdzLAorICAgIC8vIGRlZmF1bHQgZW5jb2RpbmdzLCBhbmQgdGhlIGRlY29kaW5nIHdlJ3JlIGN1
cnJlbnRseSB1c2luZy4KKyAgICBTdHJpbmcgY29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxs
YmFjazIoKSBjb25zdDsKKworICAgIGNvbnN0IFN0cmluZyYgbWltZVR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX21pbWVUeXBlOyB9CisgICAgdm9pZCBzZXRNSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5
cGUpIHsgbV9taW1lVHlwZSA9IHR5cGU7IH0KKworICAgIHZvaWQgc2V0RGVjb2RlcihUZXh0UmVz
b3VyY2VEZWNvZGVyKiBkZWNvZGVyKTsKKworcHJpdmF0ZToKKyAgICBGcmFtZSogbV9mcmFtZTsK
KworICAgIGJvb2wgbV9yZWNlaXZlZERhdGE7CisgICAgU3RyaW5nIG1fbWltZVR5cGU7CisKKyAg
ICBib29sIG1fZW5jb2RpbmdXYXNDaG9zZW5CeVVzZXI7CisgICAgU3RyaW5nIG1fZW5jb2Rpbmc7
CisgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKK307CisKIGNsYXNz
IEZyYW1lTG9hZGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBGcmFtZUxv
YWRlcihGcmFtZSosIEZyYW1lTG9hZGVyQ2xpZW50Kik7CkBAIC05OSw2ICsxMzgsNyBAQCBwdWJs
aWM6CiAgICAgUG9saWN5Q2hlY2tlciogcG9saWN5Q2hlY2tlcigpIGNvbnN0IHsgcmV0dXJuICZt
X3BvbGljeUNoZWNrZXI7IH0KICAgICBIaXN0b3J5Q29udHJvbGxlciogaGlzdG9yeSgpIGNvbnN0
IHsgcmV0dXJuICZtX2hpc3Rvcnk7IH0KICAgICBSZXNvdXJjZUxvYWROb3RpZmllciogbm90aWZp
ZXIoKSBjb25zdCB7IHJldHVybiAmbV9ub3RpZmVyOyB9CisgICAgRG9jdW1lbnRXcml0ZXIqIHdy
aXRlcigpIGNvbnN0IHsgcmV0dXJuICZtX3dyaXRlcjsgfQogCiAgICAgLy8gRklYTUU6IFRoaXMg
aXMgbm90IGNvb2wsIHBlb3BsZS4gVGhlcmUgYXJlIHRvbyBtYW55IGRpZmZlcmVudCBmdW5jdGlv
bnMgdGhhdCBhbGwgc3RhcnQgbG9hZHMuCiAgICAgLy8gV2Ugc2hvdWxkIGFpbSB0byBjb25zb2xp
ZGF0ZSB0aGVzZSBpbnRvIGEgc21hbGxlciBzZXQgb2YgZnVuY3Rpb25zLCBhbmQgdHJ5IHRvIHJl
dXNlIG1vcmUgb2YKQEAgLTIyNiwyNCArMjY2LDE2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlk
RXhwbGljaXRPcGVuKCk7CiAKKyAgICAvLyBDYWxsYmFja3MgZnJvbSBEb2N1bWVudFdyaXRlcgor
ICAgIHZvaWQgZGlkQmVnaW5Eb2N1bWVudChib29sIGRpc3BhdGNoKTsKKyAgICB2b2lkIGRpZEVu
ZERvY3VtZW50KCk7CisgICAgdm9pZCB3aWxsU2V0RW5jb2RpbmcoKTsKKwogICAgIEtVUkwgaWNv
blVSTCgpOwogICAgIHZvaWQgY29tbWl0SWNvblVSTFRvSWNvbkRhdGFiYXNlKGNvbnN0IEtVUkwm
KTsKIAogICAgIEtVUkwgYmFzZVVSTCgpIGNvbnN0OwogCi0gICAgdm9pZCByZXBsYWNlRG9jdW1l
bnQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICB2b2lkIGJlZ2luKCk7Ci0gICAgdm9pZCBiZWdpbihj
b25zdCBLVVJMJiwgYm9vbCBkaXNwYXRjaFdpbmRvd09iamVjdEF2YWlsYWJsZSA9IHRydWUsIFNl
Y3VyaXR5T3JpZ2luKiBmb3JjZWRTZWN1cml0eU9yaWdpbiA9IDApOwotCi0gICAgdm9pZCB3cml0
ZShjb25zdCBjaGFyKiBzdHJpbmcsIGludCBsZW5ndGggPSAtMSwgYm9vbCBmbHVzaCA9IGZhbHNl
KTsKLSAgICB2b2lkIHdyaXRlKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgZW5kKCk7Ci0gICAg
dm9pZCBlbmRJZk5vdExvYWRpbmdNYWluUmVzb3VyY2UoKTsKLQotICAgIHZvaWQgc2V0RW5jb2Rp
bmcoY29uc3QgU3RyaW5nJiBlbmNvZGluZywgYm9vbCB1c2VyQ2hvc2VuKTsKLSAgICBTdHJpbmcg
ZW5jb2RpbmcoKSBjb25zdDsKLQogICAgIHZvaWQgdG9rZW5pemVyUHJvY2Vzc2VkRGF0YSgpOwog
CiAgICAgdm9pZCBoYW5kbGVkT25sb2FkRXZlbnRzKCk7CkBAIC0yODAsOCArMzEyLDggQEAgcHVi
bGljOgogCiAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV9VUkw7IH0KIAot
ICAgIHZvaWQgc2V0UmVzcG9uc2VNSU1FVHlwZShjb25zdCBTdHJpbmcmKTsKLSAgICBjb25zdCBT
dHJpbmcmIHJlc3BvbnNlTUlNRVR5cGUoKSBjb25zdDsKKyAgICAvLyBzZXRVUkwgaXMgYSBsb3ct
bGV2ZWwgc2V0dGVyIGFuZCBkb2VzIG5vdCB0cmlnZ2VyIGxvYWRpbmcuCisgICAgdm9pZCBzZXRV
UkwoY29uc3QgS1VSTCYpOwogCiAgICAgYm9vbCBhbGxvd1BsdWdpbnMoUmVhc29uRm9yQ2FsbGlu
Z0FsbG93UGx1Z2lucyk7CiAgICAgYm9vbCBjb250YWluc1BsdWdpbnMoKSBjb25zdDsKQEAgLTMw
MCw2ICszMzIsNyBAQCBwdWJsaWM6CiAgICAgS1VSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcm
IHVybCk7CiAKICAgICB2b2lkIGNhbmNlbEFuZENsZWFyKCk7CisgICAgdm9pZCBjbGVhcihib29s
IGNsZWFyV2luZG93UHJvcGVydGllcyA9IHRydWUsIGJvb2wgY2xlYXJTY3JpcHRPYmplY3RzID0g
dHJ1ZSwgYm9vbCBjbGVhckZyYW1lVmlldyA9IHRydWUpOwogCiAgICAgdm9pZCBzZXRUaXRsZShj
b25zdCBTdHJpbmcmKTsKIApAQCAtMzQ0LDYgKzM3Nyw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBPYmplY3RDb250ZW50VHlwZSBkZWZhdWx0T2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKIAorICAgIGJvb2wgaXNEaXNwbGF5aW5nSW5p
dGlhbEVtcHR5RG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzRGlzcGxheWluZ0luaXRpYWxF
bXB0eURvY3VtZW50OyB9CisKIHByaXZhdGU6CiAgICAgYm9vbCBjYW5DYWNoZVBhZ2VDb250YWlu
aW5nVGhpc0ZyYW1lKCk7CiAjaWZuZGVmIE5ERUJVRwpAQCAtNDA4LDggKzQ0Myw2IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHVwZGF0ZUhpc3RvcnlBZnRlckNsaWVudFJlZGlyZWN0KCk7CiAKLSAg
ICB2b2lkIGNsZWFyKGJvb2wgY2xlYXJXaW5kb3dQcm9wZXJ0aWVzID0gdHJ1ZSwgYm9vbCBjbGVh
clNjcmlwdE9iamVjdHMgPSB0cnVlLCBib29sIGNsZWFyRnJhbWVWaWV3ID0gdHJ1ZSk7Ci0KICAg
ICBib29sIHNob3VsZFJlbG9hZFRvSGFuZGxlVW5yZWFjaGFibGVVUkwoRG9jdW1lbnRMb2FkZXIq
KTsKIAogICAgIHZvaWQgZGlzcGF0Y2hEaWRDb21taXRMb2FkKCk7CkBAIC00NjIsNiArNDk1LDcg
QEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFBvbGljeUNoZWNrZXIgbV9wb2xpY3lDaGVja2VyOwog
ICAgIG11dGFibGUgSGlzdG9yeUNvbnRyb2xsZXIgbV9oaXN0b3J5OwogICAgIG11dGFibGUgUmVz
b3VyY2VMb2FkTm90aWZpZXIgbV9ub3RpZmVyOworICAgIG11dGFibGUgRG9jdW1lbnRXcml0ZXIg
bV93cml0ZXI7CiAKICAgICBGcmFtZVN0YXRlIG1fc3RhdGU7CiAgICAgRnJhbWVMb2FkVHlwZSBt
X2xvYWRUeXBlOwpAQCAtNDg1LDggKzUxOSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faXNF
eGVjdXRpbmdKYXZhU2NyaXB0Rm9ybUFjdGlvbjsKIAotICAgIFN0cmluZyBtX3Jlc3BvbnNlTUlN
RVR5cGU7Ci0KICAgICBib29sIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2U7CiAgICAgYm9vbCBtX3dh
c1VubG9hZEV2ZW50RW1pdHRlZDsKICAgICBib29sIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNo
ZWQ7CkBAIC01MDQsMTEgKzUzNiw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NhbmNlbGxpbmdX
aXRoTG9hZEluUHJvZ3Jlc3M7CiAKICAgICBib29sIG1fbmVlZHNDbGVhcjsKLSAgICBib29sIG1f
cmVjZWl2ZWREYXRhOwotCi0gICAgYm9vbCBtX2VuY29kaW5nV2FzQ2hvc2VuQnlVc2VyOwotICAg
IFN0cmluZyBtX2VuY29kaW5nOwotICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2Rl
Y29kZXI7CiAKICAgICBib29sIG1fY29udGFpbnNQbHVnSW5zOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcCBiL1dlYkNvcmUvbG9hZGVyL01lZGlhRG9jdW1l
bnQuY3BwCmluZGV4IGEyZDYyNzYuLjI3MzYxZmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVy
L01lZGlhRG9jdW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL01lZGlhRG9jdW1lbnQuY3Bw
CkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBNZWRpYURvY3VtZW50OjpyZXBsYWNlTWVkaWFFbGVt
ZW50VGltZXJGaXJlZChUaW1lcjxNZWRpYURvY3VtZW50PiopCiAgICAgICAgIGVtYmVkRWxlbWVu
dC0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsICIxMDAlIik7CiAgICAgICAgIGVtYmVkRWxlbWVu
dC0+c2V0QXR0cmlidXRlKG5hbWVBdHRyLCAicGx1Z2luIik7CiAgICAgICAgIGVtYmVkRWxlbWVu
dC0+c2V0QXR0cmlidXRlKHNyY0F0dHIsIHVybCgpLnN0cmluZygpKTsKLSAgICAgICAgZW1iZWRF
bGVtZW50LT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsIGZyYW1lKCktPmxvYWRlcigpLT5yZXNwb25z
ZU1JTUVUeXBlKCkpOworICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0
ciwgZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5taW1lVHlwZSgpKTsKIAogICAgICAgICBF
eGNlcHRpb25Db2RlIGVjOwogICAgICAgICB2aWRlb0VsZW1lbnQtPnBhcmVudCgpLT5yZXBsYWNl
Q2hpbGQoZW1iZWRFbGVtZW50LCB2aWRlb0VsZW1lbnQsIGVjKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcCBiL1dlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3Vt
ZW50LmNwcAppbmRleCAxZDJjMmI3Li43MDI0MzMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRl
ci9QbHVnaW5Eb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQu
Y3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBQbHVnaW5Ub2tlbml6ZXI6OmNyZWF0ZURvY3Vt
ZW50U3RydWN0dXJlKCkKICAgICAKICAgICBtX2VtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKG5h
bWVBdHRyLCAicGx1Z2luIik7CiAgICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShzcmNB
dHRyLCBtX2RvYy0+dXJsKCkuc3RyaW5nKCkpOwotICAgIG1fZW1iZWRFbGVtZW50LT5zZXRBdHRy
aWJ1dGUodHlwZUF0dHIsIG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlw
ZSgpKTsKKyAgICBtX2VtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHR5cGVBdHRyLCBtX2RvYy0+
ZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5taW1lVHlwZSgpKTsKICAgICAKICAgICBib2R5
LT5hcHBlbmRDaGlsZChlbWJlZEVsZW1lbnQsIGVjKTsgICAgCiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCmluZGV4IGNmODkwYTEuLjQzNmRjOGIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCkBAIC04Nyw3
ICs4Nyw3IEBAIFRleHRFbmNvZGluZyBGb3JtRGF0YUJ1aWxkZXI6OmRhdGFFbmNvZGluZyhEb2N1
bWVudCogZG9jdW1lbnQpIGNvbnN0CiAgICAgfQogCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5lbmNvZGlu
ZygpOworICAgICAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2Rpbmco
KTsKIAogICAgIHJldHVybiBMYXRpbjFFbmNvZGluZygpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwCmluZGV4IDM2NjU5MjQuLjIxNWQ1YWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHAKQEAgLTI1OCwxMCArMjU4LDEwIEBAIGJvb2wgU1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQogICAgICAgICBsb2FkZXItPmxvYWQoZmFrZVJlcXVlc3QsIGZhbHNl
KTsgLy8gTWFrZSBzdXJlIHRoZSBEb2N1bWVudExvYWRlciBpcyBjcmVhdGVkCiAgICAgICAgIGxv
YWRlci0+cG9saWN5Q2hlY2tlcigpLT5jYW5jZWxDaGVjaygpOyAvLyBjYW5jZWwgYW55IHBvbGlj
eSBjaGVja3MKICAgICAgICAgbG9hZGVyLT5jb21taXRQcm92aXNpb25hbExvYWQoMCk7Ci0gICAg
ICAgIGxvYWRlci0+c2V0UmVzcG9uc2VNSU1FVHlwZSgiaW1hZ2Uvc3ZnK3htbCIpOwotICAgICAg
ICBsb2FkZXItPmJlZ2luKEtVUkwoKSk7IC8vIGNyZWF0ZSB0aGUgZW1wdHkgZG9jdW1lbnQKLSAg
ICAgICAgbG9hZGVyLT53cml0ZShkYXRhKCktPmRhdGEoKSwgZGF0YSgpLT5zaXplKCkpOwotICAg
ICAgICBsb2FkZXItPmVuZCgpOworICAgICAgICBsb2FkZXItPndyaXRlcigpLT5zZXRNSU1FVHlw
ZSgiaW1hZ2Uvc3ZnK3htbCIpOworICAgICAgICBsb2FkZXItPndyaXRlcigpLT5iZWdpbihLVVJM
KCkpOyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRvY3VtZW50CisgICAgICAgIGxvYWRlci0+d3JpdGVy
KCktPndyaXRlKGRhdGEoKS0+ZGF0YSgpLCBkYXRhKCktPnNpemUoKSk7CisgICAgICAgIGxvYWRl
ci0+d3JpdGVyKCktPmVuZCgpOwogICAgICAgICBmcmFtZS0+dmlldygpLT5zZXRUcmFuc3BhcmVu
dCh0cnVlKTsgLy8gU1ZHIEltYWdlcyBhcmUgdHJhbnNwYXJlbnQuCiAgICAgfQogCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCA1OTEyMzI4Li5jNzVmN2E4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAor
MjAxMC0wNC0wNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZhY3RvciBEb2N1bWVudFdyaXRl
ciBvdXQgb2YgRnJhbWVMb2FkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM3MTc1CisKKyAgICAgICAgVXBkYXRlIHRoZXNlIGNhbGxzaXRlcyBiZWNh
dXNlIHRoZSBtZXRob2QgbW92ZWQgdG8gRG9jdW1lbnRXcml0ZXIuCisKKyAgICAgICAgKiBzcmMv
RnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJD
bGllbnRJbXBsOjpmaW5pc2hlZExvYWRpbmcpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmNvbW1pdERvY3VtZW50RGF0YSk6
CisKIDIwMTAtMDQtMDUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Zy
YW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKaW5kZXggYjAxYjY3NS4uYzNiNjdhYSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcApAQCAtMTA3Miw3ICsx
MDcyLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmZpbmlzaGVkTG9hZGluZyhEb2N1
bWVudExvYWRlciogZGwpCiAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIG9ubHkgd2FudCB0byBkbyB0
aGlzIGlmIG1ha2VSZXByZXNlbnRhdGlvbiBoYXMgYmVlbiBjYWxsZWQsIHRvCiAgICAgICAgIC8v
IG1hdGNoIHRoZSBiZWhhdmlvciBvbiB0aGUgTWFjLgogICAgICAgICBpZiAobV9oYXNSZXByZXNl
bnRhdGlvbikKLSAgICAgICAgICAgIGRsLT5mcmFtZUxvYWRlcigpLT5zZXRFbmNvZGluZygiIiwg
ZmFsc2UpOworICAgICAgICAgICAgZGwtPmZyYW1lTG9hZGVyKCktPndyaXRlcigpLT5zZXRFbmNv
ZGluZygiIiwgZmFsc2UpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwu
Y3BwCmluZGV4IDlhMjViNDcuLjA4MGE3ZWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1w
bC5jcHAKQEAgLTEwMTEsNyArMTAxMSw3IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpjb21taXREb2N1
bWVudERhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFMZW4pCiAgICAgICAgIHVzZXJD
aG9zZW4gPSBmYWxzZTsKICAgICAgICAgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+cmVzcG9u
c2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CiAgICAgfQotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5z
ZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisgICAgbV9mcmFtZS0+bG9hZGVyKCkt
PndyaXRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CiAKICAgICAvLyBO
T1RFOiBtYWMgb25seSBkb2VzIHRoaXMgaWYgdGhlcmUgaXMgYSBkb2N1bWVudAogICAgIG1fZnJh
bWUtPmxvYWRlcigpLT5hZGREYXRhKGRhdGEsIGRhdGFMZW4pOwpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCAxNWVmZjdjLi5jNTk4
YTdhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTA0LTA2ICBBZGFtIEJhcnRoICA8YWJhcnRo
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRmFjdG9yIERvY3VtZW50V3JpdGVyIG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxNzUKKworICAgICAgICBV
cGRhdGUgdGhlc2UgY2FsbHNpdGVzIGJlY2F1c2UgdGhlIG1ldGhvZCBtb3ZlZCB0byBEb2N1bWVu
dFdyaXRlci4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3Rr
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQp
OgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKToK
KwogMjAxMC0wNC0wMSAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNv
bGxhYm9yYS5jby51az4KIAogICAgICAgICBSZXZpZXdlZCBieSBIb2xnZXIgRnJleXRoZXIuCmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3Rr
LmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
CmluZGV4IDljYjIxZjcuLjZiOGVmZmUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZChXZWJDb3JlOjpEb2N1bWVudExvYWRlciog
bG9hZGVyLCBjb25zdCBjaGEKICAgICAgICAgICAgIGVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25z
ZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKIAogICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2Fk
ZXIgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgICAgIGZyYW1lTG9hZGVyLT5zZXRFbmNv
ZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisgICAgICAgIGZyYW1lTG9hZGVyLT53cml0ZXIo
KS0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOwogICAgICAgICBpZiAoZGF0YSkK
ICAgICAgICAgICAgIGZyYW1lTG9hZGVyLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CiAKQEAgLTg2
OCw3ICs4NjgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpmaW5pc2hlZExvYWRpbmcoV2Vi
Q29yZTo6RG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQogewogICAgIGlmICghbV9wbHVn
aW5WaWV3KSB7CiAgICAgICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBkb2N1bWVudExvYWRlci0+
ZnJhbWVMb2FkZXIoKTsKLSAgICAgICAgbG9hZGVyLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRl
eHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOworICAgICAgICBsb2FkZXItPndyaXRlcigpLT5zZXRF
bmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmluaXNoTG9hZGluZygpOwogICAgICAgICBt
X3BsdWdpblZpZXcgPSAwOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZyBiL1dl
YktpdC9oYWlrdS9DaGFuZ2VMb2cKaW5kZXggYTNlZmFlOC4uYmQzMWJjMCAxMDA2NDQKLS0tIGEv
V2ViS2l0L2hhaWt1L0NoYW5nZUxvZworKysgYi9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTAtMDQtMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGYWN0b3Ig
RG9jdW1lbnRXcml0ZXIgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzE3NQorCisgICAgICAgIFVwZGF0ZSB0aGVzZSBj
YWxsc2l0ZXMgYmVjYXVzZSB0aGUgbWV0aG9kIG1vdmVkIHRvIERvY3VtZW50V3JpdGVyLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpjb21taXR0ZWRMb2FkKToKKwog
MjAxMC0wMy0zMSAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwIGIvV2ViS2l0L2hhaWt1L1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwCmluZGV4IDc3YzdjZmMuLmQz
ODQwZjQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEhhaWt1LmNwcAorKysgYi9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRIYWlrdS5jcHAKQEAgLTUxMCw3ICs1MTAsNyBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmNvbW1pdHRlZExvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRl
ciwgY29ucwogICAgICAgICByZXR1cm47CiAKICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIg
PSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgZnJhbWVMb2FkZXItPnNldEVuY29kaW5nKG1f
cmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7CisgICAgZnJhbWVMb2FkZXItPndy
aXRlcigpLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2Up
OwogICAgIGZyYW1lTG9hZGVyLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggZmQ2
NDY0MS4uYmY0NzI5ZiAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wNC0wNiAgQWRhbSBCYXJ0
aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZhY3RvciBEb2N1bWVudFdyaXRlciBvdXQgb2YgRnJhbWVMb2FkZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MTc1CisK
KyAgICAgICAgVXBkYXRlIHRoZXNlIGNhbGxzaXRlcyBiZWNhdXNlIHRoZSBtZXRob2QgbW92ZWQg
dG8gRG9jdW1lbnRXcml0ZXIuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAg
ICAgICAoLVtXZWJGcmFtZSBfY2FuUHJvdmlkZURvY3VtZW50U291cmNlXSk6CisgICAgICAgICgt
W1dlYkZyYW1lIF9yZWNlaXZlZERhdGE6dGV4dEVuY29kaW5nTmFtZTpdKToKKwogMjAxMC0wNC0w
NSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA1MzhjMjNhLi40Y2U5
ODc2IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC05NjEsNyArOTYxLDcgQEAgc3RhdGljIGlu
bGluZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAt
IChCT09MKV9jYW5Qcm92aWRlRG9jdW1lbnRTb3VyY2UKIHsKICAgICBGcmFtZSogZnJhbWUgPSBf
cHJpdmF0ZS0+Y29yZUZyYW1lOwotICAgIFN0cmluZyBtaW1lVHlwZSA9IGZyYW1lLT5sb2FkZXIo
KS0+cmVzcG9uc2VNSU1FVHlwZSgpOworICAgIFN0cmluZyBtaW1lVHlwZSA9IGZyYW1lLT5sb2Fk
ZXIoKS0+d3JpdGVyKCktPm1pbWVUeXBlKCk7CiAgICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSA9
IGZyYW1lLT5wYWdlKCkgPyBmcmFtZS0+cGFnZSgpLT5wbHVnaW5EYXRhKCkgOiAwOwogCiAgICAg
aWYgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjppc1RleHRNSU1FVHlwZShtaW1lVHlwZSkg
fHwKQEAgLTk4Niw3ICs5ODYsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFT
b3VyY2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5j
b2RpbmcuaXNOdWxsKCk7CiAgICAgaWYgKGVuY29kaW5nLmlzTnVsbCgpKQogICAgICAgICBlbmNv
ZGluZyA9IHRleHRFbmNvZGluZ05hbWU7Ci0gICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+bG9hZGVy
KCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKyAgICBfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hv
c2VuKTsKICAgICBbc2VsZiBfYWRkRGF0YTpkYXRhXTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0
L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggN2YzYmQxNi4uNWM0MTYx
ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDQtMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGYWN0b3IgRG9jdW1lbnRXcml0ZXIgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzE3NQorCisgICAgICAgIFVwZGF0
ZSB0aGVzZSBjYWxsc2l0ZXMgYmVjYXVzZSB0aGUgbWV0aG9kIG1vdmVkIHRvIERvY3VtZW50V3Jp
dGVyLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpmaW5pc2hlZExvYWRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6c2V0TWFpbkRvY3VtZW50
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6Y29tbWl0dGVk
TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERp
ZEZhaWxMb2FkaW5nKToKKwogMjAxMC0wNC0wMiAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdv
bWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJp
c3RpYW5zZW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRRdC5jcHAgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRRdC5jcHAKaW5kZXggYzVjNTczOS4uMWU4NmJhZSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCisrKyBiL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcApAQCAtNTEyLDcgKzUxMiw3IEBAIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBs
b2FkZXIpCiAgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKICAgICAgICAgaWYobV9maXJzdERhdGEp
IHsKICAgICAgICAgICAgIEZyYW1lTG9hZGVyICpmbCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsK
LSAgICAgICAgICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUo
KSwgZmFsc2UpOworICAgICAgICAgICAgZmwtPndyaXRlcigpLT5zZXRFbmNvZGluZyhtX3Jlc3Bv
bnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOwogICAgICAgICAgICAgbV9maXJzdERhdGEg
PSBmYWxzZTsgCiAgICAgICAgIH0KICAgICB9CkBAIC03MDIsNyArNzAyLDcgQEAgdm9pZCBGcmFt
ZUxvYWRlckNsaWVudFF0OjpzZXRNYWluRG9jdW1lbnRFcnJvcihXZWJDb3JlOjpEb2N1bWVudExv
YWRlciogbG9hZGVyLAogewogICAgIGlmICghbV9wbHVnaW5WaWV3KSB7CiAgICAgICAgIGlmICht
X2ZpcnN0RGF0YSkgewotICAgICAgICAgICAgbG9hZGVyLT5mcmFtZUxvYWRlcigpLT5zZXRFbmNv
ZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOworICAgICAgICAgICAg
bG9hZGVyLT5mcmFtZUxvYWRlcigpLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50
ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKICAgICAgICAgICAgIG1fZmlyc3REYXRhID0gZmFs
c2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtNzE5LDcgKzcxOSw3IEBAIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnRRdDo6Y29tbWl0dGVkTG9hZChXZWJDb3JlOjpEb2N1bWVudExvYWRlciog
bG9hZGVyLCBjb25zdCBjCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEZyYW1lTG9hZGVy
ICpmbCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKICAgICAgICAgaWYgKG1fZmlyc3REYXRhKSB7
Ci0gICAgICAgICAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1l
KCksIGZhbHNlKTsKKyAgICAgICAgICAgIGZsLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcobV9yZXNw
b25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKICAgICAgICAgICAgIG1fZmlyc3REYXRh
ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmwtPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsK
QEAgLTg4NCw3ICs4ODQsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlk
RmFpbExvYWRpbmcoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlcgogCiAgICAgaWYgKG1f
Zmlyc3REYXRhKSB7CiAgICAgICAgIEZyYW1lTG9hZGVyICpmbCA9IGxvYWRlci0+ZnJhbWVMb2Fk
ZXIoKTsKLSAgICAgICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFt
ZSgpLCBmYWxzZSk7CisgICAgICAgIGZsLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcobV9yZXNwb25z
ZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKICAgICAgICAgbV9maXJzdERhdGEgPSBmYWxz
ZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1dlYktpdC93
aW4vQ2hhbmdlTG9nCmluZGV4IGZkYTk5MTIuLmYzZmM0YmYgMTAwNjQ0Ci0tLSBhL1dlYktpdC93
aW4vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTAtMDQtMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGYWN0b3IgRG9jdW1lbnRXcml0
ZXIgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNzE3NQorCisgICAgICAgIFVwZGF0ZSB0aGVzZSBjYWxsc2l0ZXMgYmVj
YXVzZSB0aGUgbWV0aG9kIG1vdmVkIHRvIERvY3VtZW50V3JpdGVyLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OnJlY2VpdmVkRGF0YSk6CisKIDIwMTAtMDQtMDUgIEFsZXhleSBQcm9za3Vy
eWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmNwcCBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
Y3BwCmluZGV4IGUxMDIzOTAuLjllNGY1ODAgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1dlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBAIC01MTMsNyArNTEzLDcgQEAgdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVjZWl2ZWREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBsZW5ndGgsIGNvbnN0IFN0cmkKICAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNO
dWxsKCk7CiAgICAgaWYgKGVuY29kaW5nLmlzTnVsbCgpKQogICAgICAgICBlbmNvZGluZyA9IHRl
eHRFbmNvZGluZzsKLSAgICBjb3JlRnJhbWUtPmxvYWRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGlu
ZywgdXNlckNob3Nlbik7CisgICAgY29yZUZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPnNldEVu
Y29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKIAogICAgIGNvcmVGcmFtZS0+bG9hZGVyKCkt
PmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC93eC9DaGFuZ2VM
b2cgYi9XZWJLaXQvd3gvQ2hhbmdlTG9nCmluZGV4IDI3NzdkNDIuLjVmZDIwOTAgMTAwNjQ0Ci0t
LSBhL1dlYktpdC93eC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3d4L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDEwLTA0LTA2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFjdG9yIERv
Y3VtZW50V3JpdGVyIG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxNzUKKworICAgICAgICBVcGRhdGUgdGhlc2UgY2Fs
bHNpdGVzIGJlY2F1c2UgdGhlIG1ldGhvZCBtb3ZlZCB0byBEb2N1bWVudFdyaXRlci4KKworICAg
ICAgICAqIFdlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFd4Ojpjb21taXR0ZWRMb2FkKToKKwogMjAxMC0wMy0z
MSAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRXeC5jcHAgYi9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFd4LmNwcAppbmRleCA2YWZkZDg4Li5lZTkzOGIwIDEwMDY0NAotLS0gYS9XZWJL
aXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcAorKysgYi9XZWJLaXQv
d3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcApAQCAtNjA0LDcgKzYwNCw3
IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6Y29tbWl0dGVkTG9hZChXZWJDb3JlOjpEb2N1
bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBjCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1f
cGx1Z2luVmlldykgewogICAgICAgICBGcmFtZUxvYWRlciogZmwgPSBsb2FkZXItPmZyYW1lTG9h
ZGVyKCk7Ci0gICAgICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05h
bWUoKSwgZmFsc2UpOworICAgICAgICBmbC0+d3JpdGVyKCktPnNldEVuY29kaW5nKG1fcmVzcG9u
c2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7CiAgICAgICAgIGZsLT5hZGREYXRhKGRhdGEs
IGxlbmd0aCk7CiAgICAgfQogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52924</attachid>
            <date>2010-04-08 17:40:17 -0700</date>
            <delta_ts>2010-04-08 17:44:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37175-20100408174014.patch</filename>
            <type>text/plain</type>
            <size>53451</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRl
eCBhMTlkN2UyLi4zNzU3ZDhmIDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
V2ViQ29yZS9BbmRyb2lkLm1rCkBAIC0yODUsNiArMjg1LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJbG9hZGVyL0RvY0xvYWRlci5jcHAgXAogCWxvYWRlci9E
b2N1bWVudExvYWRlci5jcHAgXAogCWxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3Bw
IFwKKwlsb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwIFwKIAlsb2FkZXIvRm9ybVN0YXRlLmNwcCBc
CiAJbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBcCiAJbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNw
cCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDk1MDFmYTcuLjFkMTE3ODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTAtMDQtMDggIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGYWN0b3IgRG9jdW1lbnRXcml0ZXIgb3V0IG9mIEZyYW1lTG9hZGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzE3NQor
CisgICAgICAgIFRoaXMgcGF0Y2ggc2VwYXJhdGVzIHRoZSBiZWdpbi93cml0ZS9lbmQgY3ljbGUg
b2YgZGVjb2RpbmcgbmV0d29yaworICAgICAgICBieXRlcyBhbmQgcHV0dGluZyB0aGVtIGludG8g
YSBkb2N1bWVudCBmcm9tIHRoZSByZXN0IG9mIHRoZSBsb2FkaW5nCisgICAgICAgIG1hY2hpbmVy
eS4gIFRoZSBjb2RlIGFuZCBzdGF0ZSByZXF1aXJlZCB0byB3cml0ZSBieXRlcyBpbnRvIGEgZG9j
dW1lbnQKKyAgICAgICAgZG9lc24ndCBpbnRlcmFjdCB2ZXJ5IG11Y2ggd2l0aCB0aGUgcmVzdCBv
ZiB0aGUgbG9hZGluZyBtYWNoaW5lcnkuCisKKyAgICAgICAgTm8gdGVzdHMgYmVjYXVzZSB0aGVy
ZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UgKGhvcGVmdWxseSEpLgorCisgICAgICAgICogQW5kcm9p
ZC5tazoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmJhc2Uu
ZXhwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0Q29u
dHJvbGxlckJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhl
Y3V0ZUlmSmF2YVNjcmlwdFVSTCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjbG9zZSk6CisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246
OmNoZWNrU3R5bGVTaGVldCk6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6OnNjcmlwdENoYXJzZXQpOgorICAgICAg
ICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudDo6cHJvY2Vzcyk6CisgICAgICAgICogbG9hZGVyL0RvY0xvYWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2NMb2FkZXI6OnJlcXVlc3RQcmVsb2FkKToKKyAgICAgICAgKiBsb2Fk
ZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6
OmZpbmlzaGVkTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0
dXBGb3JSZXBsYWNlQnlNSU1FVHlwZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnJlY2VpdmVkRmly
c3REYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzZXRVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZEJlZ2luRG9jdW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OmRpZEVuZERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjp3aWxsU2V0RW5jb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmFkZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnRyYW5zaXRpb25U
b0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6b3Blbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZmluaXNoZWRMb2FkaW5nRG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmFkZEV4dHJhRmllbGRzVG9SZXF1ZXN0KToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyOjp3cml0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmlzRGlzcGxheWlu
Z0luaXRpYWxFbXB0eURvY3VtZW50KToKKyAgICAgICAgKiBsb2FkZXIvTWVkaWFEb2N1bWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYURvY3VtZW50OjpyZXBsYWNlTWVkaWFFbGVtZW50
VGltZXJGaXJlZCk6CisgICAgICAgICogbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblRva2VuaXplcjo6Y3JlYXRlRG9jdW1lbnRTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6ZGF0YUVuY29kaW5nKToKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRhdGFD
aGFuZ2VkKToKKwogMjAxMC0wNC0wOCAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggOWIy
NGMzZS4uZTQ5YjkzZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMzA2LDYgKzEzMDYsOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmggXAogCVdlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAgXAogCVdlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlci5oIFwKKwlXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5j
cHAgXAorCVdlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmggXAogCVdlYkNvcmUvbG9hZGVy
L0VtcHR5Q2xpZW50cy5oIFwKIAlXZWJDb3JlL2xvYWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5j
cHAgXAogCVdlYkNvcmUvbG9hZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50LmggXApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmlu
ZGV4IGFiYWQyMTIuLmMwMGRmZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4
cAorKysgYi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKQEAgLTE1Niw3ICsxNTYsNiBAQCBfX1pO
N1dlYkNvcmUxMUZpbGVDaG9vc2VyMTFjaG9vc2VGaWxlc0VSS04zV1RGNlZlY3RvcklOU182U3Ry
aW5nRUxtMEVFRQogX19aTjdXZWJDb3JlMTFGaWxlQ2hvb3NlckQxRXYKIF9fWk43V2ViQ29yZTEx
RnJhbWVMb2FkZXIxMWNvbXBsZXRlVVJMRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTExRnJh
bWVMb2FkZXIxMWxvYWRBcmNoaXZlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzdBcmNoaXZlRUVFCi1f
X1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTFzZXRFbmNvZGluZ0VSS05TXzZTdHJpbmdFYgogX19a
TjdXZWJDb3JlMTFGcmFtZUxvYWRlcjEyc2hvdWxkUmVsb2FkRVJLTlNfNEtVUkxFUzNfCiBfX1pO
N1dlYkNvcmUxMUZyYW1lTG9hZGVyMTRkZXRhY2hDaGlsZHJlbkV2CiBfX1pON1dlYkNvcmUxMUZy
YW1lTG9hZGVyMTRzdG9wQWxsTG9hZGVyc0VOU18xNERhdGFiYXNlUG9saWN5RQpAQCAtMzAxLDYg
KzMwMCw3IEBAIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXI4c2V0VGl0bGVFUktOU182U3Ry
aW5nRQogX19aTjdXZWJDb3JlMTREb2N1bWVudExvYWRlckMxRVJLTlNfMTVSZXNvdXJjZVJlcXVl
c3RFUktOU18xNFN1YnN0aXR1dGVEYXRhRQogX19aTjdXZWJDb3JlMTREb2N1bWVudExvYWRlckMy
RVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFUktOU18xNFN1YnN0aXR1dGVEYXRhRQogX19aTjdXZWJD
b3JlMTREb2N1bWVudExvYWRlckQyRXYKK19fWk43V2ViQ29yZTE0RG9jdW1lbnRXcml0ZXIxMXNl
dEVuY29kaW5nRVJLTlNfNlN0cmluZ0ViCiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMTJy
ZWxlYXNlUHJveHlFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTIwZm9yY2VDb250ZW50
U25pZmZpbmdFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2VsbGVkRXJyb3JF
dgpAQCAtODExLDcgKzgxMSw2IEBAIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTRmcmFtZUhh
c0xvYWRlZEV2CiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjE1Y29udGFpbnNQbHVnaW5zRXYK
IF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTVmaXJzdExheW91dERvbmVFdgogX19aTks3V2Vi
Q29yZTExRnJhbWVMb2FkZXIxNm91dGdvaW5nUmVmZXJyZXJFdgotX19aTks3V2ViQ29yZTExRnJh
bWVMb2FkZXIxNnJlc3BvbnNlTUlNRVR5cGVFdgogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIy
MGFjdGl2ZURvY3VtZW50TG9hZGVyRXYKIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMjdudW1Q
ZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHNFYgogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXI4bG9h
ZFR5cGVFdgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCAzNTY3ZjllLi4wNjhkODI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTczMiw2ICsxNzMyLDggQEAK
ICAgICAgICAgICAgICdsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaCcsCiAgICAgICAgICAgICAnbG9h
ZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9E
b2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCcsCisgICAgICAgICAgICAnbG9hZGVyL0RvY3VtZW50
V3JpdGVyLmNwcCcsCisgICAgICAgICAgICAnbG9hZGVyL0RvY3VtZW50V3JpdGVyLmgnLAogICAg
ICAgICAgICAgJ2xvYWRlci9FbXB0eUNsaWVudHMuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0ZU
UERpcmVjdG9yeURvY3VtZW50LmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL0ZUUERpcmVjdG9y
eURvY3VtZW50LmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUv
V2ViQ29yZS5wcm8KaW5kZXggZTdiYjk4My4uMDQwZWYxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC03MzQsNiArNzM0LDcgQEAg
U09VUkNFUyArPSBcCiAgICAgbG9hZGVyL0RvY0xvYWRlci5jcHAgXAogICAgIGxvYWRlci9Eb2N1
bWVudExvYWRlci5jcHAgXAogICAgIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3Bw
IFwKKyAgICBsb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwIFwKICAgICBsb2FkZXIvRm9ybVN0YXRl
LmNwcCBcCiAgICAgbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBcCiAgICAgbG9hZGVyL0hpc3RvcnlD
b250cm9sbGVyLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA5
ZGVhY2NmLi41NmNhMTU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAg
LTIxMzk3LDYgKzIxMzk3LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxEb2N1bWVudFdyaXRlci5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcRG9jdW1l
bnRXcml0ZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGxvYWRlclxEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNDhmYjBkMS4uMjVhOTg1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTI0ODIsNiArMjQ4Miw4IEBACiAJCTk3MDU5OTc4MTA3RDk3NTIwMEE1MEE3
QyAvKiBQb2xpY3lDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTcwNTk5NzQxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNhbGxiYWNrLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTcwNTk5
NzkxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcwNTk5NzUxMDdEOTc1MjAwQTUwQTdDIC8q
IFBvbGljeUNoZWNrZXIuY3BwICovOyB9OwogCQk5NzA1OTk3QTEwN0Q5NzUyMDBBNTBBN0MgLyog
UG9saWN5Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTcwNTk5NzYxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5NzM4ODlBMDExNkVB
OURDMDBBREYzMTMgLyogRG9jdW1lbnRXcml0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTczODg5OUUxMTZFQTlEQzAwQURGMzEzIC8qIERvY3Vt
ZW50V3JpdGVyLmNwcCAqLzsgfTsKKwkJOTczODg5QTExMTZFQTlEQzAwQURGMzEzIC8qIERvY3Vt
ZW50V3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzM4ODk5RjExNkVBOURDMDBBREYzMTMgLyogRG9jdW1lbnRXcml0ZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5NzNFMzI1NjEwODgzQjdD
MDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTczRTMyNTQxMDg4M0I3QzAwNUJDNDkzIC8qIFJl
c291cmNlTG9hZE5vdGlmaWVyLmNwcCAqLzsgfTsKIAkJOTczRTMyNTcxMDg4M0I3QzAwNUJDNDkz
IC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzNFMzI1NTEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2Fk
Tm90aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk5NzlGNDNEMzEwNzVFNDRBMDAwMEY4M0IgLyogUmVkaXJlY3RTY2hlZHVsZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc5RjQzRDExMDc1
RTQ0QTAwMDBGODNCIC8qIFJlZGlyZWN0U2NoZWR1bGVyLmNwcCAqLzsgfTsKQEAgLTc5MTcsNiAr
NzkxOSw4IEBACiAJCTk3MDU5OTc0MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2xpY3lDYWxsYmFjay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzA1OTk3NTEwN0Q5NzUyMDBBNTBBN0MgLyogUG9s
aWN5Q2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2xp
Y3lDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcwNTk5NzYxMDdE
OTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUG9saWN5Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
NzM4ODk5RTExNkVBOURDMDBBREYzMTMgLyogRG9jdW1lbnRXcml0ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRXcml0ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5NzM4ODk5RjExNkVBOURDMDBBREYzMTMgLyogRG9jdW1lbnRX
cml0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1lbnRXcml0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTczRTMyNTQxMDg4M0I3QzAwNUJDNDkz
IC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlc291cmNlTG9hZE5vdGlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTczRTMyNTUxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTG9hZE5vdGlmaWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3OUY0M0QxMTA3NUU0NEEwMDAwRjgz
QiAvKiBSZWRpcmVjdFNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZWRpcmVjdFNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xNTIxNiw2ICsxNTIyMCw4IEBACiAJCQkJNjU2RDM3MUUwQURCQTVERTAwQTQ1NTREIC8q
IERvY3VtZW50TG9hZGVyLmggKi8sCiAJCQkJMEI5MDU2MTUwRjI1NzhCRTAwOTVGRjZBIC8qIERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAgKi8sCiAJCQkJMEI5MDU2MTYwRjI1NzhCRTAwOTVG
RjZBIC8qIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oICovLAorCQkJCTk3Mzg4OTlFMTE2RUE5
REMwMEFERjMxMyAvKiBEb2N1bWVudFdyaXRlci5jcHAgKi8sCisJCQkJOTczODg5OUYxMTZFQTlE
QzAwQURGMzEzIC8qIERvY3VtZW50V3JpdGVyLmggKi8sCiAJCQkJQjI1NTk5MEQwRDAwRDhCOTAw
QkI4MjVDIC8qIEVtcHR5Q2xpZW50cy5oICovLAogCQkJCTY1NkQzNzIzMEFEQkE1REUwMEE0NTU0
RCAvKiBGb3JtU3RhdGUuY3BwICovLAogCQkJCTY1NkQzNzIyMEFEQkE1REUwMEE0NTU0RCAvKiBG
b3JtU3RhdGUuaCAqLywKQEAgLTE4ODI5LDYgKzE4ODM1LDcgQEAKIAkJCQlDNUQ0QUE3QTExNkJB
RkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTUy
NTNEODExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODk1MjUzRDkxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTk3Mzg4OUExMTE2RUE5REMwMEFERjMxMyAvKiBEb2N1bWVudFdyaXRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0yMTA1MCw2ICsyMTA1Nyw3IEBACiAJCQkJMjU0MkY0REExMTY2QzI1
QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUM1RDRBQTc5MTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODk1MjUzRDcxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJOTczODg5QTAxMTZFQTlEQzAwQURGMzEzIC8qIERvY3VtZW50V3Jp
dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9TY3Jp
cHRDb250cm9sbGVyQmFzZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL1NjcmlwdENvbnRyb2xsZXJC
YXNlLmNwcAppbmRleCAwNDY3ZjJkLi40MWQyZTBhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL1NjcmlwdENvbnRyb2xsZXJCYXNlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL1Njcmlw
dENvbnRyb2xsZXJCYXNlLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIGJvb2wgU2NyaXB0Q29udHJv
bGxlcjo6ZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTChjb25zdCBLVVJMJiB1cmwsIGJvb2wgdXNlckdl
c3R1cmUsCiAgICAgLy8gICAgICAgIHN5bmNocm9ub3VzbHkgY2FuIGNhdXNlIGNyYXNoZXM6CiAg
ICAgLy8gICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Nzgy
CiAgICAgaWYgKHJlcGxhY2VEb2N1bWVudCkgCi0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5y
ZXBsYWNlRG9jdW1lbnQoc2NyaXB0UmVzdWx0KTsKKyAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCkt
PndyaXRlcigpLT5yZXBsYWNlRG9jdW1lbnQoc2NyaXB0UmVzdWx0KTsKIAogICAgIHJldHVybiB0
cnVlOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCmluZGV4IGJiYTU5MzAuLjU4ODMzMjIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE3
NTQsNyArMTc1NCw3IEBAIHZvaWQgRG9jdW1lbnQ6OmNsb3NlKCkKICAgICBpZiAoZnJhbWUpIHsK
ICAgICAgICAgLy8gVGhpcyBjb2RlIGNhbGxzIGltcGxpY2l0Q2xvc2UoKSBpZiBhbGwgbG9hZGlu
ZyBoYXMgY29tcGxldGVkLgogICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBmcmFt
ZS0+bG9hZGVyKCk7Ci0gICAgICAgIGZyYW1lTG9hZGVyLT5lbmRJZk5vdExvYWRpbmdNYWluUmVz
b3VyY2UoKTsKKyAgICAgICAgZnJhbWVMb2FkZXItPndyaXRlcigpLT5lbmRJZk5vdExvYWRpbmdN
YWluUmVzb3VyY2UoKTsKICAgICAgICAgZnJhbWVMb2FkZXItPmNoZWNrQ29tcGxldGVkKCk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgLy8gQmVjYXVzZSB3ZSBoYXZlIG5vIGZyYW1lLCB3ZSBkb24n
dCBrbm93IGlmIGFsbCBsb2FkaW5nIGhhcyBjb21wbGV0ZWQsCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIGIvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmNwcAppbmRleCA5MmEyYjQwLi4xOTRkZDlhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCisrKyBiL1dlYkNvcmUvZG9tL1Byb2Nlc3Np
bmdJbnN0cnVjdGlvbi5jcHAKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIFByb2Nlc3NpbmdJbnN0
cnVjdGlvbjo6Y2hlY2tTdHlsZVNoZWV0KCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBTdHJpbmcgY2hhcnNldCA9IGF0dHJzLmdldCgiY2hhcnNldCIpOwogICAgICAgICAgICAgICAg
IGlmIChjaGFyc2V0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IGRv
Y3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygpOworICAgICAgICAgICAgICAg
ICAgICBjaGFyc2V0ID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5l
bmNvZGluZygpOwogCiAgICAgICAgICAgICAgICAgbV9jYWNoZWRTaGVldCA9IGRvY3VtZW50KCkt
PmRvY0xvYWRlcigpLT5yZXF1ZXN0Q1NTU3R5bGVTaGVldCh1cmwsIGNoYXJzZXQpOwogICAgICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAgYi9XZWJD
b3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAppbmRleCA3MzFjM2JhLi4yMmQ2OTgxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9TY3Jp
cHRFbGVtZW50LmNwcApAQCAtMjYzLDcgKzI2Myw3IEBAIFN0cmluZyBTY3JpcHRFbGVtZW50RGF0
YTo6c2NyaXB0Q2hhcnNldCgpIGNvbnN0CiAgICAgLy8gSWYgY2hhcnNldCBoYXMgbm90IGJlZW4g
ZGVjbGFyZWQgaW4gc2NyaXB0IHRhZywgZmFsbCBiYWNrIHRvIGZyYW1lIGVuY29kaW5nLgogICAg
IGlmIChjaGFyc2V0LmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9l
bGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgY2hhcnNldCA9IGZyYW1l
LT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGNoYXJzZXQgPSBmcmFtZS0+bG9h
ZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwogICAgIH0KIAogICAgIHJldHVybiBjaGFyc2V0
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAgYi9XZWJDb3Jl
L2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAppbmRleCBlNzNhMzYwLi5lODUwMDdmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
SFRNTExpbmtFbGVtZW50LmNwcApAQCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQgSFRNTExpbmtFbGVt
ZW50Ojpwcm9jZXNzKCkKICAgICAgICAgCiAgICAgICAgIFN0cmluZyBjaGFyc2V0ID0gZ2V0QXR0
cmlidXRlKGNoYXJzZXRBdHRyKTsKICAgICAgICAgaWYgKGNoYXJzZXQuaXNFbXB0eSgpICYmIGRv
Y3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICBjaGFyc2V0ID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+bG9hZGVyKCktPmVuY29kaW5nKCk7CisgICAgICAgICAgICBjaGFyc2V0ID0gZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwogCiAgICAgICAg
IGlmIChtX2NhY2hlZFNoZWV0KSB7CiAgICAgICAgICAgICBpZiAobV9sb2FkaW5nKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0RvY0xv
YWRlci5jcHAKaW5kZXggMzFlMWY5MS4uYTM5ZDNhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2Fk
ZXIvRG9jTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCkBAIC00
MDQsNyArNDA0LDcgQEAgdm9pZCBEb2NMb2FkZXI6OnJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291
cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb24KIHsKICAgICBTdHJpbmcgZW5j
b2Rpbmc7CiAgICAgaWYgKHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCB8fCB0eXBlID09
IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KQotICAgICAgICBlbmNvZGluZyA9IGNoYXJz
ZXQuaXNFbXB0eSgpID8gbV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygpIDogY2hh
cnNldDsKKyAgICAgICAgZW5jb2RpbmcgPSBjaGFyc2V0LmlzRW1wdHkoKSA/IG1fZG9jLT5mcmFt
ZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCkgOiBjaGFyc2V0OwogCiAgICAgQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVxdWVzdFJlc291cmNlKHR5cGUsIHVybCwgZW5jb2Rp
bmcsIHRydWUpOwogICAgIGlmICghcmVzb3VyY2UgfHwgbV9wcmVsb2Fkcy5jb250YWlucyhyZXNv
dXJjZSkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAgYi9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKaW5kZXggMzdhMmRlMi4uOTVhOWQ2NiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1dlYkNv
cmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcApAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgRG9j
dW1lbnRMb2FkZXI6OmZpbmlzaGVkTG9hZGluZygpCiAgICAgY29tbWl0SWZSZWFkeSgpOwogICAg
IGlmIChGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVMb2FkZXIoKSkgewogICAgICAgICBsb2Fk
ZXItPmZpbmlzaGVkTG9hZGluZ0RvY3VtZW50KHRoaXMpOwotICAgICAgICBsb2FkZXItPmVuZCgp
OworICAgICAgICBsb2FkZXItPndyaXRlcigpLT5lbmQoKTsKICAgICB9CiB9CiAKQEAgLTMwNyw3
ICszMDcsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzZXR1cEZvclJlcGxhY2VCeU1JTUVUeXBl
KGNvbnN0IFN0cmluZyYgbmV3TUlNRVR5cGUpCiAgICAgfQogICAgIAogICAgIGZyYW1lTG9hZGVy
KCktPmZpbmlzaGVkTG9hZGluZ0RvY3VtZW50KHRoaXMpOwotICAgIG1fZnJhbWUtPmxvYWRlcigp
LT5lbmQoKTsKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuZCgpOwogICAgIAog
ICAgIGZyYW1lTG9hZGVyKCktPnNldFJlcGxhY2luZygpOwogICAgIG1fZ290Rmlyc3RCeXRlID0g
ZmFsc2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggYTc4OTc0YS4uNjE5MWY1NyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcApAQCAtMTY0LDE3ICsxNjQsMTMgQEAgc3RhdGljIGludCBudW1SZXF1
ZXN0cyhEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgcmV0dXJuIGRvY3VtZW50LT5kb2NMb2FkZXIo
KS0+cmVxdWVzdENvdW50KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5SZWZlclRvUGFy
ZW50RnJhbWVFbmNvZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IEZyYW1lKiBwYXJlbnRG
cmFtZSkgCi17Ci0gICAgcmV0dXJuIHBhcmVudEZyYW1lICYmIHBhcmVudEZyYW1lLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3MoZnJhbWUtPmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCkpOwotfQotCiBGcmFtZUxvYWRlcjo6RnJhbWVMb2FkZXIoRnJhbWUqIGZyYW1l
LCBGcmFtZUxvYWRlckNsaWVudCogY2xpZW50KQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAs
IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fcG9saWN5Q2hlY2tlcihmcmFtZSkKICAgICAsIG1f
aGlzdG9yeShmcmFtZSkKICAgICAsIG1fbm90aWZlcihmcmFtZSkKKyAgICAsIG1fd3JpdGVyKGZy
YW1lKQogICAgICwgbV9zdGF0ZShGcmFtZVN0YXRlQ29tbWl0dGVkUGFnZSkKICAgICAsIG1fbG9h
ZFR5cGUoRnJhbWVMb2FkVHlwZVN0YW5kYXJkKQogICAgICwgbV9kZWxlZ2F0ZUlzSGFuZGxpbmdQ
cm92aXNpb25hbExvYWRFcnJvcihmYWxzZSkKQEAgLTE4OSw4ICsxODUsNiBAQCBGcmFtZUxvYWRl
cjo6RnJhbWVMb2FkZXIoRnJhbWUqIGZyYW1lLCBGcmFtZUxvYWRlckNsaWVudCogY2xpZW50KQog
ICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQogICAgICwgbV9pc0xvYWRpbmdNYWluUmVzb3VyY2Uo
ZmFsc2UpCiAgICAgLCBtX25lZWRzQ2xlYXIoZmFsc2UpCi0gICAgLCBtX3JlY2VpdmVkRGF0YShm
YWxzZSkKLSAgICAsIG1fZW5jb2RpbmdXYXNDaG9zZW5CeVVzZXIoZmFsc2UpCiAgICAgLCBtX2Nv
bnRhaW5zUGx1Z0lucyhmYWxzZSkKICAgICAsIG1fY2hlY2tUaW1lcih0aGlzLCAmRnJhbWVMb2Fk
ZXI6OmNoZWNrVGltZXJGaXJlZCkKICAgICAsIG1fc2hvdWxkQ2FsbENoZWNrQ29tcGxldGVkKGZh
bHNlKQpAQCAtMjMwLDggKzIyNCw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmluaXQoKQogICAgIHNl
dFN0YXRlKEZyYW1lU3RhdGVQcm92aXNpb25hbCk7CiAgICAgbV9wcm92aXNpb25hbERvY3VtZW50
TG9hZGVyLT5zZXRSZXNwb25zZShSZXNvdXJjZVJlc3BvbnNlKEtVUkwoKSwgInRleHQvaHRtbCIs
IDAsIFN0cmluZygpLCBTdHJpbmcoKSkpOwogICAgIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRl
ci0+ZmluaXNoZWRMb2FkaW5nKCk7Ci0gICAgYmVnaW4oS1VSTCgpLCBmYWxzZSk7Ci0gICAgZW5k
KCk7CisgICAgd3JpdGVyKCktPmJlZ2luKEtVUkwoKSwgZmFsc2UpOworICAgIHdyaXRlcigpLT5l
bmQoKTsKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jYW5jZWxQYXJzaW5nKCk7CiAgICAgbV9j
cmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50ID0gZmFsc2U7CiAgICAgbV9kaWRDYWxsSW1wbGlj
aXRDbG9zZSA9IHRydWU7CkBAIC03MDEsMTQgKzY5NSw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNh
bmNlbEFuZENsZWFyKCkKICAgICBtX2ZyYW1lLT5zY3JpcHQoKS0+dXBkYXRlUGxhdGZvcm1TY3Jp
cHRPYmplY3RzKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OnJlcGxhY2VEb2N1bWVudChjb25z
dCBTdHJpbmcmIGh0bWwpCi17Ci0gICAgc3RvcEFsbExvYWRlcnMoKTsKLSAgICBiZWdpbihtX1VS
TCwgdHJ1ZSwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgd3Jp
dGUoaHRtbCk7Ci0gICAgZW5kKCk7Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OmNsZWFyKGJvb2wg
Y2xlYXJXaW5kb3dQcm9wZXJ0aWVzLCBib29sIGNsZWFyU2NyaXB0T2JqZWN0cywgYm9vbCBjbGVh
ckZyYW1lVmlldykKIHsKICAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+Y2xlYXIoKTsKQEAgLTc0Miw3
ICs3MjgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbGVhcihib29sIGNsZWFyV2luZG93UHJvcGVy
dGllcywgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMsIGJvbwogICAgIC8vIERvIG5vdCBkcm9wIHRo
ZSBkb2N1bWVudCBiZWZvcmUgdGhlIFNjcmlwdENvbnRyb2xsZXIgYW5kIHZpZXcgYXJlIGNsZWFy
ZWQKICAgICAvLyBhcyBzb21lIGRlc3RydWN0b3JzIG1pZ2h0IHN0aWxsIHRyeSB0byBhY2Nlc3Mg
dGhlIGRvY3VtZW50LgogICAgIG1fZnJhbWUtPnNldERvY3VtZW50KDApOwotICAgIG1fZGVjb2Rl
ciA9IDA7CisgICAgd3JpdGVyKCktPmNsZWFyKCk7CiAKICAgICBtX2NvbnRhaW5zUGx1Z0lucyA9
IGZhbHNlOwogCkBAIC03NTQsMTcgKzc0MCwxMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbGVhcihi
b29sIGNsZWFyV2luZG93UHJvcGVydGllcywgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMsIGJvbwog
ICAgIG1fY2hlY2tUaW1lci5zdG9wKCk7CiAgICAgbV9zaG91bGRDYWxsQ2hlY2tDb21wbGV0ZWQg
PSBmYWxzZTsKICAgICBtX3Nob3VsZENhbGxDaGVja0xvYWRDb21wbGV0ZSA9IGZhbHNlOwotCi0g
ICAgbV9yZWNlaXZlZERhdGEgPSBmYWxzZTsKICAgICBtX2lzRGlzcGxheWluZ0luaXRpYWxFbXB0
eURvY3VtZW50ID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZW5jb2RpbmdXYXNDaG9zZW5CeVVzZXIp
Ci0gICAgICAgIG1fZW5jb2RpbmcgPSBTdHJpbmcoKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6
cmVjZWl2ZWRGaXJzdERhdGEoKQogewotICAgIGJlZ2luKG1fd29ya2luZ1VSTCwgZmFsc2UpOwor
ICAgIHdyaXRlcigpLT5iZWdpbihtX3dvcmtpbmdVUkwsIGZhbHNlKTsKIAogICAgIGRpc3BhdGNo
RGlkQ29tbWl0TG9hZCgpOwogICAgIGRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RzSW5BbGxX
b3JsZHMoKTsKQEAgLTc5NSwxOTAgKzc3Niw0OSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpyZWNlaXZl
ZEZpcnN0RGF0YSgpCiAgICAgbV9mcmFtZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1bGVS
ZWRpcmVjdChkZWxheSwgdXJsKTsKIH0KIAotY29uc3QgU3RyaW5nJiBGcmFtZUxvYWRlcjo6cmVz
cG9uc2VNSU1FVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVzcG9uc2VNSU1FVHlwZTsK
LX0KLQotdm9pZCBGcmFtZUxvYWRlcjo6c2V0UmVzcG9uc2VNSU1FVHlwZShjb25zdCBTdHJpbmcm
IHR5cGUpCi17Ci0gICAgbV9yZXNwb25zZU1JTUVUeXBlID0gdHlwZTsKLX0KLSAgICAKLXZvaWQg
RnJhbWVMb2FkZXI6OmJlZ2luKCkKK3ZvaWQgRnJhbWVMb2FkZXI6OnNldFVSTChjb25zdCBLVVJM
JiB1cmwpCiB7Ci0gICAgYmVnaW4oS1VSTCgpKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlcjo6YmVn
aW4oY29uc3QgS1VSTCYgdXJsLCBib29sIGRpc3BhdGNoLCBTZWN1cml0eU9yaWdpbiogb3JpZ2lu
KQotewotICAgIC8vIFdlIG5lZWQgdG8gdGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgc2VjdXJpdHkg
b3JpZ2luIGJlY2F1c2UgfGNsZWFyfAotICAgIC8vIG1pZ2h0IGRlc3Ryb3kgdGhlIGRvY3VtZW50
IHRoYXQgb3ducyBpdC4KLSAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IGZvcmNlZFNlY3VyaXR5
T3JpZ2luID0gb3JpZ2luOwotCi0gICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudDsKLQotICAg
IC8vIENyZWF0ZSBhIG5ldyBkb2N1bWVudCBiZWZvcmUgY2xlYXJpbmcgdGhlIGZyYW1lLCBiZWNh
dXNlIGl0IG1heSBuZWVkIHRvIGluaGVyaXQgYW4gYWxpYXNlZCBzZWN1cml0eSBjb250ZXh0Lgot
ICAgIGlmICghbV9pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCAmJiBtX2NsaWVudC0+
c2hvdWxkVXNlUGx1Z2luRG9jdW1lbnQobV9yZXNwb25zZU1JTUVUeXBlKSkKLSAgICAgICAgZG9j
dW1lbnQgPSBQbHVnaW5Eb2N1bWVudDo6Y3JlYXRlKG1fZnJhbWUpOwotICAgIGVsc2UgaWYgKCFt
X2NsaWVudC0+aGFzSFRNTFZpZXcoKSkKLSAgICAgICAgZG9jdW1lbnQgPSBQbGFjZWhvbGRlckRv
Y3VtZW50OjpjcmVhdGUobV9mcmFtZSk7Ci0gICAgZWxzZQotICAgICAgICBkb2N1bWVudCA9IERP
TUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudChtX3Jlc3BvbnNlTUlNRVR5cGUsIG1fZnJh
bWUsIG1fZnJhbWUtPmluVmlld1NvdXJjZU1vZGUoKSk7Ci0KLSAgICBib29sIHJlc2V0U2NyaXB0
aW5nID0gIShtX2lzRGlzcGxheWluZ0luaXRpYWxFbXB0eURvY3VtZW50ICYmIG1fZnJhbWUtPmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmlzU2VjdXJlVHJhbnNpdGlvblRvKHVybCkpOwot
ICAgIGNsZWFyKHJlc2V0U2NyaXB0aW5nLCByZXNldFNjcmlwdGluZyk7Ci0gICAgaWYgKHJlc2V0
U2NyaXB0aW5nKQotICAgICAgICBtX2ZyYW1lLT5zY3JpcHQoKS0+dXBkYXRlUGxhdGZvcm1TY3Jp
cHRPYmplY3RzKCk7Ci0KLSAgICBtX25lZWRzQ2xlYXIgPSB0cnVlOwotICAgIG1faXNDb21wbGV0
ZSA9IGZhbHNlOwotICAgIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2UgPSBmYWxzZTsKLSAgICBtX2lz
TG9hZGluZ01haW5SZXNvdXJjZSA9IHRydWU7Ci0gICAgbV9pc0Rpc3BsYXlpbmdJbml0aWFsRW1w
dHlEb2N1bWVudCA9IG1fY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudDsKLQogICAgIEtVUkwg
cmVmKHVybCk7CiAgICAgcmVmLnNldFVzZXIoU3RyaW5nKCkpOwogICAgIHJlZi5zZXRQYXNzKFN0
cmluZygpKTsKICAgICByZWYucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CiAgICAgbV9vdXRn
b2luZ1JlZmVycmVyID0gcmVmLnN0cmluZygpOwogICAgIG1fVVJMID0gdXJsOworfQogCi0gICAg
ZG9jdW1lbnQtPnNldFVSTChtX1VSTCk7Ci0gICAgbV9mcmFtZS0+c2V0RG9jdW1lbnQoZG9jdW1l
bnQpOwotCit2b2lkIEZyYW1lTG9hZGVyOjpkaWRCZWdpbkRvY3VtZW50KGJvb2wgZGlzcGF0Y2gp
Cit7CiAgICAgaWYgKG1fcGVuZGluZ1N0YXRlT2JqZWN0KSB7Ci0gICAgICAgIGRvY3VtZW50LT5z
dGF0ZVBvcHBlZChtX3BlbmRpbmdTdGF0ZU9iamVjdC5nZXQoKSk7CisgICAgICAgIG1fZnJhbWUt
PmRvY3VtZW50KCktPnN0YXRlUG9wcGVkKG1fcGVuZGluZ1N0YXRlT2JqZWN0LmdldCgpKTsKICAg
ICAgICAgbV9wZW5kaW5nU3RhdGVPYmplY3QuY2xlYXIoKTsKICAgICB9Ci0gICAgCi0gICAgaWYg
KG1fZGVjb2RlcikKLSAgICAgICAgZG9jdW1lbnQtPnNldERlY29kZXIobV9kZWNvZGVyLmdldCgp
KTsKLSAgICBpZiAoZm9yY2VkU2VjdXJpdHlPcmlnaW4pCi0gICAgICAgIGRvY3VtZW50LT5zZXRT
ZWN1cml0eU9yaWdpbihmb3JjZWRTZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAKLSAgICBtX2ZyYW1l
LT5kb21XaW5kb3coKS0+c2V0VVJMKGRvY3VtZW50LT51cmwoKSk7Ci0gICAgbV9mcmFtZS0+ZG9t
V2luZG93KCktPnNldFNlY3VyaXR5T3JpZ2luKGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKTsK
KyAgICBtX25lZWRzQ2xlYXIgPSB0cnVlOworICAgIG1faXNDb21wbGV0ZSA9IGZhbHNlOworICAg
IG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2UgPSBmYWxzZTsKKyAgICBtX2lzTG9hZGluZ01haW5SZXNv
dXJjZSA9IHRydWU7CisgICAgbV9pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCA9IG1f
Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudDsKIAogICAgIGlmIChkaXNwYXRjaCkKICAgICAg
ICAgZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdHNJbkFsbFdvcmxkcygpOwotICAgIAorCiAg
ICAgdXBkYXRlRmlyc3RQYXJ0eUZvckNvb2tpZXMoKTsKIAotICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOwotICAgIGRvY3VtZW50LT5kb2NMb2FkZXIoKS0+c2V0
QXV0b0xvYWRJbWFnZXMoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmxvYWRzSW1hZ2VzQXV0b21hdGlj
YWxseSgpKTsKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5z
ZXR0aW5ncygpOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5zZXRBdXRv
TG9hZEltYWdlcyhzZXR0aW5ncyAmJiBzZXR0aW5ncy0+bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5
KCkpOwogCiAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXIpIHsKICAgICAgICAgU3RyaW5nIGRuc1By
ZWZldGNoQ29udHJvbCA9IG1fZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNlKCkuaHR0cEhlYWRlckZp
ZWxkKCJYLUROUy1QcmVmZXRjaC1Db250cm9sIik7CiAgICAgICAgIGlmICghZG5zUHJlZmV0Y2hD
b250cm9sLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5wYXJzZUROU1ByZWZldGNo
Q29udHJvbEhlYWRlcihkbnNQcmVmZXRjaENvbnRyb2wpOworICAgICAgICAgICAgbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+cGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIoZG5zUHJlZmV0Y2hDb250
cm9sKTsKICAgICB9CiAKICAgICBoaXN0b3J5KCktPnJlc3RvcmVEb2N1bWVudFN0YXRlKCk7Ci0K
LSAgICBkb2N1bWVudC0+aW1wbGljaXRPcGVuKCk7Ci0gICAgCi0gICAgaWYgKG1fZnJhbWUtPnZp
ZXcoKSAmJiBtX2NsaWVudC0+aGFzSFRNTFZpZXcoKSkKLSAgICAgICAgbV9mcmFtZS0+dmlldygp
LT5zZXRDb250ZW50c1NpemUoSW50U2l6ZSgpKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlcjo6d3Jp
dGUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuLCBib29sIGZsdXNoKQotewotICAgIGlmIChsZW4g
PT0gMCAmJiAhZmx1c2gpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobGVuID09IC0x
KQotICAgICAgICBsZW4gPSBzdHJsZW4oc3RyKTsKLQotICAgIFRva2VuaXplciogdG9rZW5pemVy
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dG9rZW5pemVyKCk7Ci0gICAgaWYgKHRva2VuaXplciAm
JiB0b2tlbml6ZXItPndhbnRzUmF3RGF0YSgpKSB7Ci0gICAgICAgIGlmIChsZW4gPiAwKQotICAg
ICAgICAgICAgdG9rZW5pemVyLT53cml0ZVJhd0RhdGEoc3RyLCBsZW4pOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIGlmICghbV9kZWNvZGVyKSB7Ci0gICAgICAgIGlmIChTZXR0
aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpKSB7Ci0gICAgICAgICAgICBtX2Rl
Y29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUobV9yZXNwb25zZU1JTUVUeXBlLAot
ICAgICAgICAgICAgICAgIHNldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpLAotICAg
ICAgICAgICAgICAgIHNldHRpbmdzLT51c2VzRW5jb2RpbmdEZXRlY3RvcigpKTsKLSAgICAgICAg
ICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7Ci0gICAg
ICAgICAgICAvLyBTZXQgdGhlIGhpbnQgZW5jb2RpbmcgdG8gdGhlIHBhcmVudCBmcmFtZSBlbmNv
ZGluZyBvbmx5IGlmCi0gICAgICAgICAgICAvLyB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBm
cmFtZXMgc2hhcmUgdGhlIHNlY3VyaXR5IG9yaWdpbi4KLSAgICAgICAgICAgIC8vIFdlIGltcG9z
ZSB0aGlzIGNvbmRpdGlvbiBiZWNhdXNlIHNvbWVib2R5IGNhbiBtYWtlIGEgY2hpbGQgZnJhbWUg
Ci0gICAgICAgICAgICAvLyBjb250YWluaW5nIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgaHRtbC9qYXZh
c2NyaXB0IGluIG9uZSBlbmNvZGluZwotICAgICAgICAgICAgLy8gdGhhdCBjYW4gYmUgbWlzdGFr
ZW4gZm9yIGhpbnRFbmNvZGluZyAob3IgcmVsYXRlZCBlbmNvZGluZykgYnkKLSAgICAgICAgICAg
IC8vIGFuIGF1dG8gZGV0ZWN0b3IuIFdoZW4gaW50ZXJwcmV0ZWQgaW4gdGhlIGxhdHRlciwgaXQg
Y291bGQgYmUKLSAgICAgICAgICAgIC8vIGFuIGF0dGFjayB2ZWN0b3IuCi0gICAgICAgICAgICAv
LyBGSVhNRTogVGhpcyBtaWdodCBiZSB0b28gY2F1dGlvdXMgZm9yIG5vbi03Yml0LWVuY29kaW5n
cyBhbmQKLSAgICAgICAgICAgIC8vIHdlIG1heSBjb25zaWRlciByZWxheGluZyB0aGlzIGxhdGVy
IGFmdGVyIHRlc3RpbmcuCi0gICAgICAgICAgICBpZiAoY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5j
b2RpbmcobV9mcmFtZSwgcGFyZW50RnJhbWUpKQotICAgICAgICAgICAgICAgIG1fZGVjb2Rlci0+
c2V0SGludEVuY29kaW5nKHBhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5kZWNvZGVyKCkpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6
OmNyZWF0ZShtX3Jlc3BvbnNlTUlNRVR5cGUsIFN0cmluZygpKTsKLSAgICAgICAgRnJhbWUqIHBh
cmVudEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKLSAgICAgICAgaWYgKG1fZW5j
b2RpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoY2FuUmVmZXJUb1BhcmVudEZyYW1l
RW5jb2RpbmcobV9mcmFtZSwgcGFyZW50RnJhbWUpKQotICAgICAgICAgICAgICAgIG1fZGVjb2Rl
ci0+c2V0RW5jb2RpbmcocGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmlucHV0RW5jb2RpbmcoKSwg
VGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9tUGFyZW50RnJhbWUpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhtX2VuY29kaW5nLAot
ICAgICAgICAgICAgICAgIG1fZW5jb2RpbmdXYXNDaG9zZW5CeVVzZXIgPyBUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpVc2VyQ2hvc2VuRW5jb2RpbmcgOiBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGlu
Z0Zyb21IVFRQSGVhZGVyKTsKLSAgICAgICAgfQotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5zZXREZWNvZGVyKG1fZGVjb2Rlci5nZXQoKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGRlY29k
ZWQgPSBtX2RlY29kZXItPmRlY29kZShzdHIsIGxlbik7Ci0gICAgaWYgKGZsdXNoKQotICAgICAg
ICBkZWNvZGVkICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKLSAgICBpZiAoZGVjb2RlZC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9yZWNlaXZlZERhdGEpIHsKLSAgICAg
ICAgbV9yZWNlaXZlZERhdGEgPSB0cnVlOwotICAgICAgICBpZiAobV9kZWNvZGVyLT5lbmNvZGlu
ZygpLnVzZXNWaXN1YWxPcmRlcmluZygpKQotICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+c2V0VmlzdWFsbHlPcmRlcmVkKCk7Ci0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnJl
Y2FsY1N0eWxlKE5vZGU6OkZvcmNlKTsKLSAgICB9Ci0KLSAgICBpZiAodG9rZW5pemVyKSB7Ci0g
ICAgICAgIEFTU0VSVCghdG9rZW5pemVyLT53YW50c1Jhd0RhdGEoKSk7Ci0gICAgICAgIHRva2Vu
aXplci0+d3JpdGUoZGVjb2RlZCwgdHJ1ZSk7Ci0gICAgfQotfQotCi12b2lkIEZyYW1lTG9hZGVy
Ojp3cml0ZShjb25zdCBTdHJpbmcmIHN0cikKLXsKLSAgICBpZiAoc3RyLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcmVjZWl2ZWREYXRhKSB7Ci0gICAgICAgIG1fcmVj
ZWl2ZWREYXRhID0gdHJ1ZTsKLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0UGFyc2VN
b2RlKERvY3VtZW50OjpTdHJpY3QpOwotICAgIH0KLQotICAgIGlmIChUb2tlbml6ZXIqIHRva2Vu
aXplciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnRva2VuaXplcigpKQotICAgICAgICB0b2tlbml6
ZXItPndyaXRlKHN0ciwgdHJ1ZSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmVuZCgpCit2b2lk
IEZyYW1lTG9hZGVyOjpkaWRFbmREb2N1bWVudCgpCiB7CiAgICAgbV9pc0xvYWRpbmdNYWluUmVz
b3VyY2UgPSBmYWxzZTsKLSAgICBlbmRJZk5vdExvYWRpbmdNYWluUmVzb3VyY2UoKTsKLX0KLQot
dm9pZCBGcmFtZUxvYWRlcjo6ZW5kSWZOb3RMb2FkaW5nTWFpblJlc291cmNlKCkKLXsKLSAgICBp
ZiAobV9pc0xvYWRpbmdNYWluUmVzb3VyY2UgfHwgIW1fZnJhbWUtPnBhZ2UoKSB8fCAhbV9mcmFt
ZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4NTQKLSAgICAvLyBUaGUgZnJhbWUncyBsYXN0IHJl
ZiBtYXkgYmUgcmVtb3ZlZCBhbmQgaXQgY2FuIGJlIGRlbGV0ZWQgYnkgY2hlY2tDb21wbGV0ZWQo
KSwgCi0gICAgLy8gc28gd2UnbGwgYWRkIGEgcHJvdGVjdGl2ZSByZWZjb3VudAotICAgIFJlZlB0
cjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwotCi0gICAgLy8gbWFrZSBzdXJlIG5vdGhpbmcn
cyBsZWZ0IGluIHRoZXJlCi0gICAgd3JpdGUoMCwgMCwgdHJ1ZSk7Ci0gICAgbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+ZmluaXNoUGFyc2luZygpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjppY29uTG9h
ZERlY2lzaW9uQXZhaWxhYmxlKCkKQEAgLTEyNTYsMTYgKzEwOTYsNiBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpsb2FkQXJjaGl2ZShQYXNzUmVmUHRyPEFyY2hpdmU+IHBycEFyY2hpdmUpCiAgICAgbG9h
ZChkb2N1bWVudExvYWRlci5nZXQoKSk7CiB9CiAKLVN0cmluZyBGcmFtZUxvYWRlcjo6ZW5jb2Rp
bmcoKSBjb25zdAotewotICAgIGlmIChtX2VuY29kaW5nV2FzQ2hvc2VuQnlVc2VyICYmICFtX2Vu
Y29kaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fZW5jb2Rpbmc7Ci0gICAgaWYgKG1f
ZGVjb2RlciAmJiBtX2RlY29kZXItPmVuY29kaW5nKCkuaXNWYWxpZCgpKQotICAgICAgICByZXR1
cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKLSAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBtX2ZyYW1lLT5zZXR0aW5ncygpOwotICAgIHJldHVybiBzZXR0aW5ncyA/IHNldHRpbmdzLT5k
ZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpIDogU3RyaW5nKCk7Ci19Ci0KIGJvb2wgRnJhbWVMb2Fk
ZXI6OnJlcXVlc3RPYmplY3QoUmVuZGVyRW1iZWRkZWRPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUsCiAgICAgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKIHsKQEAgLTE1MjksMTIgKzEzNTksMTAgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6cmVzZXRNdWx0aXBsZUZvcm1TdWJtaXNzaW9uUHJvdGVjdGlvbigpCiAg
ICAgbV9zdWJtaXR0ZWRGb3JtVVJMID0gS1VSTCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpz
ZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgdXNlckNob3NlbikKK3ZvaWQgRnJh
bWVMb2FkZXI6OndpbGxTZXRFbmNvZGluZygpCiB7CiAgICAgaWYgKCFtX3dvcmtpbmdVUkwuaXNF
bXB0eSgpKQogICAgICAgICByZWNlaXZlZEZpcnN0RGF0YSgpOwotICAgIG1fZW5jb2RpbmcgPSBu
YW1lOwotICAgIG1fZW5jb2RpbmdXYXNDaG9zZW5CeVVzZXIgPSB1c2VyQ2hvc2VuOwogfQogCiB2
b2lkIEZyYW1lTG9hZGVyOjphZGREYXRhKGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKQpA
QCAtMTU0Miw3ICsxMzcwLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6YWRkRGF0YShjb25zdCBjaGFy
KiBieXRlcywgaW50IGxlbmd0aCkKICAgICBBU1NFUlQobV93b3JraW5nVVJMLmlzRW1wdHkoKSk7
CiAgICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOwogICAgIEFTU0VSVChtX2ZyYW1lLT5k
b2N1bWVudCgpLT5wYXJzaW5nKCkpOwotICAgIHdyaXRlKGJ5dGVzLCBsZW5ndGgpOworICAgIHdy
aXRlcigpLT5hZGREYXRhKGJ5dGVzLCBsZW5ndGgpOwogfQogCiAjaWYgRU5BQkxFKFdNTCkKQEAg
LTI2NTQsNyArMjQ4Miw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnRyYW5zaXRpb25Ub0NvbW1pdHRl
ZChQYXNzUmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UpCiAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICBtX3Jlc3BvbnNlTUlNRVR5cGUgPSBkbC0+cmVz
cG9uc2VNSU1FVHlwZSgpOworICAgIHdyaXRlcigpLT5zZXRNSU1FVHlwZShkbC0+cmVzcG9uc2VN
SU1FVHlwZSgpKTsKIAogICAgIC8vIFRlbGwgdGhlIGNsaWVudCB3ZSd2ZSBjb21taXR0ZWQgdGhp
cyBVUkwuCiAgICAgQVNTRVJUKG1fZnJhbWUtPnZpZXcoKSk7CkBAIC0yNzcxLDggKzI1OTksOCBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpvcGVuKENhY2hlZEZyYW1lQmFzZSYgY2FjaGVkRnJhbWUpCiAg
ICAgbV9VUkwgPSB1cmw7CiAgICAgbV93b3JraW5nVVJMID0gdXJsOwogCi0gICAgc3RhcnRlZCgp
OwotICAgIGNsZWFyKHRydWUsIHRydWUsIGNhY2hlZEZyYW1lLmlzTWFpbkZyYW1lKCkpOworICAg
IG1fZnJhbWUtPmxvYWRlcigpLT5zdGFydGVkKCk7CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNs
ZWFyKHRydWUsIHRydWUsIGNhY2hlZEZyYW1lLmlzTWFpbkZyYW1lKCkpOwogCiAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gY2FjaGVkRnJhbWUuZG9jdW1lbnQoKTsKICAgICBBU1NFUlQoZG9jdW1l
bnQpOwpAQCAtMjc5OSw3ICsyNjI3LDExIEBAIHZvaWQgRnJhbWVMb2FkZXI6Om9wZW4oQ2FjaGVk
RnJhbWVCYXNlJiBjYWNoZWRGcmFtZSkKICAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+c2V0VVJM
KGRvY3VtZW50LT51cmwoKSk7CiAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPnNldFNlY3VyaXR5
T3JpZ2luKGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKTsKIAotICAgIG1fZGVjb2RlciA9IGRv
Y3VtZW50LT5kZWNvZGVyKCk7CisgICAgLy8gRklYTUU6IEkgd291bGQgaGF2ZSBleHBlY3RlZCB1
cyB0byByZXN0b3JlIHRoZSB2YWx1ZSBvZgorICAgIC8vIERvY3VtZW50V3JpdGVyOjptX2VuY29k
aW5nIGhlcmUsIGJ1dCB3ZSBkb24ndCBzZWVtIHRvLiBJIHdvbmRlciBpZgorICAgIC8vIHRoYXQn
cyBhIGJ1Zy4gIE9uZSB3YXkgdG8gdGVzdCBpcyB0byBsb29rIGF0IHRoZSBmYWxsYmFjayBhcnJh
eSBvZgorICAgIC8vIGVuY29kaW5ncyBmb3IgZGVjb2RpbmcgY29udGVudCBkaXNwb3NpdGlvbi4K
KyAgICB3cml0ZXIoKS0+c2V0RGVjb2Rlcihkb2N1bWVudC0+ZGVjb2RlcigpKTsKIAogICAgIHVw
ZGF0ZUZpcnN0UGFydHlGb3JDb29raWVzKCk7CiAKQEAgLTI4OTEsMTQgKzI3MjMsMTQgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6ZmluaXNoZWRMb2FkaW5nRG9jdW1lbnQoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlcikKICAgICBBcmNoaXZlUmVzb3VyY2UqIG1haW5SZXNvdXJjZSA9IGFyY2hpdmUtPm1haW5S
ZXNvdXJjZSgpOwogICAgIGxvYWRlci0+c2V0UGFyc2VkQXJjaGl2ZURhdGEobWFpblJlc291cmNl
LT5kYXRhKCkpOwogCi0gICAgbV9yZXNwb25zZU1JTUVUeXBlID0gbWFpblJlc291cmNlLT5taW1l
VHlwZSgpOworICAgIHdyaXRlcigpLT5zZXRNSU1FVHlwZShtYWluUmVzb3VyY2UtPm1pbWVUeXBl
KCkpOwogCiAgICAgY2xvc2VVUkwoKTsKICAgICBkaWRPcGVuVVJMKG1haW5SZXNvdXJjZS0+dXJs
KCkpOwogCiAgICAgU3RyaW5nIHVzZXJDaG9zZW5FbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyKCkt
Pm92ZXJyaWRlRW5jb2RpbmcoKTsKICAgICBib29sIGVuY29kaW5nSXNVc2VyQ2hvc2VuID0gIXVz
ZXJDaG9zZW5FbmNvZGluZy5pc051bGwoKTsKLSAgICBzZXRFbmNvZGluZyhlbmNvZGluZ0lzVXNl
ckNob3NlbiA/IHVzZXJDaG9zZW5FbmNvZGluZyA6IG1haW5SZXNvdXJjZS0+dGV4dEVuY29kaW5n
KCksIGVuY29kaW5nSXNVc2VyQ2hvc2VuKTsKKyAgICB3cml0ZXIoKS0+c2V0RW5jb2RpbmcoZW5j
b2RpbmdJc1VzZXJDaG9zZW4gPyB1c2VyQ2hvc2VuRW5jb2RpbmcgOiBtYWluUmVzb3VyY2UtPnRl
eHRFbmNvZGluZygpLCBlbmNvZGluZ0lzVXNlckNob3Nlbik7CiAKICAgICBBU1NFUlQobV9mcmFt
ZS0+ZG9jdW1lbnQoKSk7CiAKQEAgLTMzMDUsOCArMzEzNywxMiBAQCB2b2lkIEZyYW1lTG9hZGVy
OjphZGRFeHRyYUZpZWxkc1RvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEZyYW1l
TG9hZFR5cAogCiAgICAgLy8gQWx3YXlzIHRyeSBVVEYtOC4gSWYgdGhhdCBmYWlscywgdHJ5IGZy
YW1lIGVuY29kaW5nIChpZiBhbnkpIGFuZCB0aGVuIHRoZSBkZWZhdWx0LgogICAgIC8vIEZvciBh
IG5ld2x5IG9wZW5lZCBmcmFtZSB3aXRoIGFuIGVtcHR5IFVSTCwgZW5jb2RpbmcoKSBzaG91bGQg
bm90IGJlIHVzZWQsIGJlY2F1c2UgdGhpcyBtZXRob2RzIGFza3MgZGVjb2Rlciwgd2hpY2ggdXNl
cyBJU08tODg1OS0xLgotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdz
KCk7Ci0gICAgcmVxdWVzdC5zZXRSZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFs
bGJhY2tBcnJheSgiVVRGLTgiLCBtX1VSTC5pc0VtcHR5KCkgPyBtX2VuY29kaW5nIDogZW5jb2Rp
bmcoKSwgc2V0dGluZ3MgPyBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSA6IFN0
cmluZygpKTsKKyAgICBTdHJpbmcgZW5jb2RpbmcxID0gIlVURi04IjsKKyAgICBTdHJpbmcgZW5j
b2RpbmcyID0gd3JpdGVyKCktPmRlcHJpY2F0ZWRGcmFtZUVuY29kaW5nKCk7CisgICAgU3RyaW5n
IGVuY29kaW5nMzsKKyAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGlu
Z3MoKSkKKyAgICAgICAgZW5jb2RpbmczID0gc2V0dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdO
YW1lKCk7CisgICAgcmVxdWVzdC5zZXRSZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5n
RmFsbGJhY2tBcnJheShlbmNvZGluZzEsIGVuY29kaW5nMiwgZW5jb2RpbmczKTsKIH0KIAogdm9p
ZCBGcmFtZUxvYWRlcjo6YWRkSFRUUE9yaWdpbklmTmVlZGVkKFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgU3RyaW5nIG9yaWdpbikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmggYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCmluZGV4IGUyMTg3NDQuLmNiMjNh
ODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKKysrIGIvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBGcmFtZUxv
YWRlcl9oCiAKICNpbmNsdWRlICJDYWNoZVBvbGljeS5oIgorI2luY2x1ZGUgIkRvY3VtZW50V3Jp
dGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIkhpc3RvcnlD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUG9saWN5Q2FsbGJhY2suaCIKQEAgLTk5LDYgKzEwMCw3
IEBAIHB1YmxpYzoKICAgICBQb2xpY3lDaGVja2VyKiBwb2xpY3lDaGVja2VyKCkgY29uc3QgeyBy
ZXR1cm4gJm1fcG9saWN5Q2hlY2tlcjsgfQogICAgIEhpc3RvcnlDb250cm9sbGVyKiBoaXN0b3J5
KCkgY29uc3QgeyByZXR1cm4gJm1faGlzdG9yeTsgfQogICAgIFJlc291cmNlTG9hZE5vdGlmaWVy
KiBub3RpZmllcigpIGNvbnN0IHsgcmV0dXJuICZtX25vdGlmZXI7IH0KKyAgICBEb2N1bWVudFdy
aXRlciogd3JpdGVyKCkgY29uc3QgeyByZXR1cm4gJm1fd3JpdGVyOyB9CiAKICAgICAvLyBGSVhN
RTogVGhpcyBpcyBub3QgY29vbCwgcGVvcGxlLiBUaGVyZSBhcmUgdG9vIG1hbnkgZGlmZmVyZW50
IGZ1bmN0aW9ucyB0aGF0IGFsbCBzdGFydCBsb2Fkcy4KICAgICAvLyBXZSBzaG91bGQgYWltIHRv
IGNvbnNvbGlkYXRlIHRoZXNlIGludG8gYSBzbWFsbGVyIHNldCBvZiBmdW5jdGlvbnMsIGFuZCB0
cnkgdG8gcmV1c2UgbW9yZSBvZgpAQCAtMjI2LDI0ICsyMjgsMTYgQEAgcHVibGljOgogCiAgICAg
dm9pZCBkaWRFeHBsaWNpdE9wZW4oKTsKIAorICAgIC8vIENhbGxiYWNrcyBmcm9tIERvY3VtZW50
V3JpdGVyCisgICAgdm9pZCBkaWRCZWdpbkRvY3VtZW50KGJvb2wgZGlzcGF0Y2hXaW5kb3dPYmpl
Y3RBdmFpbGFibGUpOworICAgIHZvaWQgZGlkRW5kRG9jdW1lbnQoKTsKKyAgICB2b2lkIHdpbGxT
ZXRFbmNvZGluZygpOworCiAgICAgS1VSTCBpY29uVVJMKCk7CiAgICAgdm9pZCBjb21taXRJY29u
VVJMVG9JY29uRGF0YWJhc2UoY29uc3QgS1VSTCYpOwogCiAgICAgS1VSTCBiYXNlVVJMKCkgY29u
c3Q7CiAKLSAgICB2b2lkIHJlcGxhY2VEb2N1bWVudChjb25zdCBTdHJpbmcmKTsKLQotICAgIHZv
aWQgYmVnaW4oKTsKLSAgICB2b2lkIGJlZ2luKGNvbnN0IEtVUkwmLCBib29sIGRpc3BhdGNoV2lu
ZG93T2JqZWN0QXZhaWxhYmxlID0gdHJ1ZSwgU2VjdXJpdHlPcmlnaW4qIGZvcmNlZFNlY3VyaXR5
T3JpZ2luID0gMCk7Ci0KLSAgICB2b2lkIHdyaXRlKGNvbnN0IGNoYXIqIHN0cmluZywgaW50IGxl
bmd0aCA9IC0xLCBib29sIGZsdXNoID0gZmFsc2UpOwotICAgIHZvaWQgd3JpdGUoY29uc3QgU3Ry
aW5nJik7Ci0gICAgdm9pZCBlbmQoKTsKLSAgICB2b2lkIGVuZElmTm90TG9hZGluZ01haW5SZXNv
dXJjZSgpOwotCi0gICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBi
b29sIHVzZXJDaG9zZW4pOwotICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0OwotCiAgICAgdm9p
ZCB0b2tlbml6ZXJQcm9jZXNzZWREYXRhKCk7CiAKICAgICB2b2lkIGhhbmRsZWRPbmxvYWRFdmVu
dHMoKTsKQEAgLTI4MCw4ICsyNzQsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBLVVJMJiB1cmwo
KSBjb25zdCB7IHJldHVybiBtX1VSTDsgfQogCi0gICAgdm9pZCBzZXRSZXNwb25zZU1JTUVUeXBl
KGNvbnN0IFN0cmluZyYpOwotICAgIGNvbnN0IFN0cmluZyYgcmVzcG9uc2VNSU1FVHlwZSgpIGNv
bnN0OworICAgIC8vIHNldFVSTCBpcyBhIGxvdy1sZXZlbCBzZXR0ZXIgYW5kIGRvZXMgbm90IHRy
aWdnZXIgbG9hZGluZy4KKyAgICB2b2lkIHNldFVSTChjb25zdCBLVVJMJik7CiAKICAgICBib29s
IGFsbG93UGx1Z2lucyhSZWFzb25Gb3JDYWxsaW5nQWxsb3dQbHVnaW5zKTsKICAgICBib29sIGNv
bnRhaW5zUGx1Z2lucygpIGNvbnN0OwpAQCAtMzAwLDYgKzI5NCw3IEBAIHB1YmxpYzoKICAgICBL
VVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKTsKIAogICAgIHZvaWQgY2FuY2VsQW5k
Q2xlYXIoKTsKKyAgICB2b2lkIGNsZWFyKGJvb2wgY2xlYXJXaW5kb3dQcm9wZXJ0aWVzID0gdHJ1
ZSwgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMgPSB0cnVlLCBib29sIGNsZWFyRnJhbWVWaWV3ID0g
dHJ1ZSk7CiAKICAgICB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYpOwogCkBAIC0zNDQsNiAr
MzM5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIE9iamVjdENvbnRlbnRUeXBlIGRlZmF1bHRP
YmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
OwogCisgICAgYm9vbCBpc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQ7IH0KKwogcHJpdmF0ZToK
ICAgICBib29sIGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoKTsKICNpZm5kZWYgTkRF
QlVHCkBAIC00MDgsOCArNDA1LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlSGlzdG9y
eUFmdGVyQ2xpZW50UmVkaXJlY3QoKTsKIAotICAgIHZvaWQgY2xlYXIoYm9vbCBjbGVhcldpbmRv
d1Byb3BlcnRpZXMgPSB0cnVlLCBib29sIGNsZWFyU2NyaXB0T2JqZWN0cyA9IHRydWUsIGJvb2wg
Y2xlYXJGcmFtZVZpZXcgPSB0cnVlKTsKLQogICAgIGJvb2wgc2hvdWxkUmVsb2FkVG9IYW5kbGVV
bnJlYWNoYWJsZVVSTChEb2N1bWVudExvYWRlciopOwogCiAgICAgdm9pZCBkaXNwYXRjaERpZENv
bW1pdExvYWQoKTsKQEAgLTQ2Miw2ICs0NTcsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgUG9s
aWN5Q2hlY2tlciBtX3BvbGljeUNoZWNrZXI7CiAgICAgbXV0YWJsZSBIaXN0b3J5Q29udHJvbGxl
ciBtX2hpc3Rvcnk7CiAgICAgbXV0YWJsZSBSZXNvdXJjZUxvYWROb3RpZmllciBtX25vdGlmZXI7
CisgICAgbXV0YWJsZSBEb2N1bWVudFdyaXRlciBtX3dyaXRlcjsKIAogICAgIEZyYW1lU3RhdGUg
bV9zdGF0ZTsKICAgICBGcmFtZUxvYWRUeXBlIG1fbG9hZFR5cGU7CkBAIC00ODUsOCArNDgxLDYg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pc0V4ZWN1dGluZ0phdmFTY3JpcHRGb3JtQWN0aW9u
OwogCi0gICAgU3RyaW5nIG1fcmVzcG9uc2VNSU1FVHlwZTsKLQogICAgIGJvb2wgbV9kaWRDYWxs
SW1wbGljaXRDbG9zZTsKICAgICBib29sIG1fd2FzVW5sb2FkRXZlbnRFbWl0dGVkOwogICAgIGJv
b2wgbV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZDsKQEAgLTUwNCwxMSArNDk4LDYgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fY2FuY2VsbGluZ1dpdGhMb2FkSW5Qcm9ncmVzczsKIAogICAgIGJv
b2wgbV9uZWVkc0NsZWFyOwotICAgIGJvb2wgbV9yZWNlaXZlZERhdGE7Ci0KLSAgICBib29sIG1f
ZW5jb2RpbmdXYXNDaG9zZW5CeVVzZXI7Ci0gICAgU3RyaW5nIG1fZW5jb2Rpbmc7Ci0gICAgUmVm
UHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKIAogICAgIGJvb2wgbV9jb250YWlu
c1BsdWdJbnM7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL01lZGlhRG9jdW1lbnQuY3Bw
IGIvV2ViQ29yZS9sb2FkZXIvTWVkaWFEb2N1bWVudC5jcHAKaW5kZXggYTJkNjI3Ni4uMjczNjFm
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvTWVkaWFEb2N1bWVudC5jcHAKKysrIGIvV2Vi
Q29yZS9sb2FkZXIvTWVkaWFEb2N1bWVudC5jcHAKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIE1l
ZGlhRG9jdW1lbnQ6OnJlcGxhY2VNZWRpYUVsZW1lbnRUaW1lckZpcmVkKFRpbWVyPE1lZGlhRG9j
dW1lbnQ+KikKICAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwg
IjEwMCUiKTsKICAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUobmFtZUF0dHIsICJw
bHVnaW4iKTsKICAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdXJs
KCkuc3RyaW5nKCkpOwotICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0
ciwgZnJhbWUoKS0+bG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKSk7CisgICAgICAgIGVtYmVk
RWxlbWVudC0+c2V0QXR0cmlidXRlKHR5cGVBdHRyLCBmcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVy
KCktPm1pbWVUeXBlKCkpOwogCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIHZp
ZGVvRWxlbWVudC0+cGFyZW50KCktPnJlcGxhY2VDaGlsZChlbWJlZEVsZW1lbnQsIHZpZGVvRWxl
bWVudCwgZWMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3Bw
IGIvV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCmluZGV4IDFkMmMyYjcuLjcwMjQz
MzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAorKysgYi9X
ZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lk
IFBsdWdpblRva2VuaXplcjo6Y3JlYXRlRG9jdW1lbnRTdHJ1Y3R1cmUoKQogICAgIAogICAgIG1f
ZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUobmFtZUF0dHIsICJwbHVnaW4iKTsKICAgICBtX2Vt
YmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHNyY0F0dHIsIG1fZG9jLT51cmwoKS5zdHJpbmcoKSk7
Ci0gICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgbV9kb2MtPmZyYW1l
KCktPmxvYWRlcigpLT5yZXNwb25zZU1JTUVUeXBlKCkpOworICAgIG1fZW1iZWRFbGVtZW50LT5z
ZXRBdHRyaWJ1dGUodHlwZUF0dHIsIG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCkt
Pm1pbWVUeXBlKCkpOwogICAgIAogICAgIGJvZHktPmFwcGVuZENoaWxkKGVtYmVkRWxlbWVudCwg
ZWMpOyAgICAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YUJ1aWxkZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5j
cHAKaW5kZXggY2Y4OTBhMS4uNDM2ZGM4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhQnVpbGRlci5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgVGV4dEVuY29kaW5nIEZvcm1E
YXRhQnVpbGRlcjo6ZGF0YUVuY29kaW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKICAgICB9
CiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJl
dHVybiBmcmFtZS0+bG9hZGVyKCktPmVuY29kaW5nKCk7CisgICAgICAgIHJldHVybiBmcmFtZS0+
bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwogCiAgICAgcmV0dXJuIExhdGluMUVuY29k
aW5nKCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAg
Yi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggMzY2NTkyNC4uOGE1MzZh
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcApAQCAtMjU4LDEwICsyNTgsMTAgQEAgYm9v
bCBTVkdJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgICAgIGxv
YWRlci0+bG9hZChmYWtlUmVxdWVzdCwgZmFsc2UpOyAvLyBNYWtlIHN1cmUgdGhlIERvY3VtZW50
TG9hZGVyIGlzIGNyZWF0ZWQKICAgICAgICAgbG9hZGVyLT5wb2xpY3lDaGVja2VyKCktPmNhbmNl
bENoZWNrKCk7IC8vIGNhbmNlbCBhbnkgcG9saWN5IGNoZWNrcwogICAgICAgICBsb2FkZXItPmNv
bW1pdFByb3Zpc2lvbmFsTG9hZCgwKTsKLSAgICAgICAgbG9hZGVyLT5zZXRSZXNwb25zZU1JTUVU
eXBlKCJpbWFnZS9zdmcreG1sIik7Ci0gICAgICAgIGxvYWRlci0+YmVnaW4oS1VSTCgpKTsgLy8g
Y3JlYXRlIHRoZSBlbXB0eSBkb2N1bWVudAotICAgICAgICBsb2FkZXItPndyaXRlKGRhdGEoKS0+
ZGF0YSgpLCBkYXRhKCktPnNpemUoKSk7Ci0gICAgICAgIGxvYWRlci0+ZW5kKCk7CisgICAgICAg
IGxvYWRlci0+d3JpdGVyKCktPnNldE1JTUVUeXBlKCJpbWFnZS9zdmcreG1sIik7CisgICAgICAg
IGxvYWRlci0+d3JpdGVyKCktPmJlZ2luKEtVUkwoKSk7IC8vIGNyZWF0ZSB0aGUgZW1wdHkgZG9j
dW1lbnQKKyAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+YWRkRGF0YShkYXRhKCktPmRhdGEoKSwg
ZGF0YSgpLT5zaXplKCkpOworICAgICAgICBsb2FkZXItPndyaXRlcigpLT5lbmQoKTsKICAgICAg
ICAgZnJhbWUtPnZpZXcoKS0+c2V0VHJhbnNwYXJlbnQodHJ1ZSk7IC8vIFNWRyBJbWFnZXMgYXJl
IHRyYW5zcGFyZW50LgogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZTM4N2Y3Mi4uNDcyZTJmZCAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDQtMDggIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGYWN0b3IgRG9jdW1lbnRXcml0ZXIgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzE3NQorCisgICAg
ICAgIFVwZGF0ZSB0aGVzZSBjYWxsc2l0ZXMgYmVjYXVzZSB0aGUgbWV0aG9kIG1vdmVkIHRvIERv
Y3VtZW50V3JpdGVyLgorCisgICAgICAgICogc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50SW1wbDo6Z2V0Q3VzdG9tTWVudUZy
b21EZWZhdWx0SXRlbXMpOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmZpbmlzaGVkTG9hZGlu
Zyk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lSW1wbDo6ZW5jb2RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmNv
bW1pdERvY3VtZW50RGF0YSk6CisgICAgICAgICogc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6cHJlQWN0aW9uQmVm
b3JlU2VyaWFsaXplT3BlblRhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVy
SW1wbDo6c2VyaWFsaXplKToKKyAgICAgICAgKiBzcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdldEZvcm1FbmNvZGluZyk6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBhZ2VFbmNvZGlu
Zyk6CisKIDIwMTAtMDQtMDcgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcAppbmRleCA3MDhkMTEzLi5iZWU0MzEw
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5j
cHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCkBA
IC0xOTIsNyArMTkyLDcgQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGll
bnRJbXBsOjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcygKIAogICAgIC8vIElmIGl0J3Mg
bm90IGEgbGluaywgYW4gaW1hZ2UsIGEgbWVkaWEgZWxlbWVudCwgb3IgYW4gaW1hZ2UvbWVkaWEg
bGluaywKICAgICAvLyBzaG93IGEgc2VsZWN0aW9uIG1lbnUgb3IgYSBtb3JlIGdlbmVyaWMgcGFn
ZSBtZW51LgotICAgIGRhdGEuZnJhbWVFbmNvZGluZyA9IHNlbGVjdGVkRnJhbWUtPmxvYWRlcigp
LT5lbmNvZGluZygpOworICAgIGRhdGEuZnJhbWVFbmNvZGluZyA9IHNlbGVjdGVkRnJhbWUtPmxv
YWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKIAogICAgIC8vIFNlbmQgdGhlIGZyYW1lIGFu
ZCBwYWdlIFVSTHMgaW4gYW55IGNhc2UuCiAgICAgZGF0YS5wYWdlVVJMID0gdXJsRnJvbUZyYW1l
KG1fd2ViVmlldy0+bWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpKTsKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAppbmRleCBjZWNmYmIzLi4xMzUzOTJiIDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCkBAIC0x
MDY2LDcgKzEwNjYsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZmluaXNoZWRMb2Fk
aW5nKERvY3VtZW50TG9hZGVyKiBkbCkKICAgICAgICAgLy8gSG93ZXZlciwgd2Ugb25seSB3YW50
IHRvIGRvIHRoaXMgaWYgbWFrZVJlcHJlc2VudGF0aW9uIGhhcyBiZWVuIGNhbGxlZCwgdG8KICAg
ICAgICAgLy8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9uIHRoZSBNYWMuCiAgICAgICAgIGlmIChtX2hh
c1JlcHJlc2VudGF0aW9uKQotICAgICAgICAgICAgZGwtPmZyYW1lTG9hZGVyKCktPnNldEVuY29k
aW5nKCIiLCBmYWxzZSk7CisgICAgICAgICAgICBkbC0+ZnJhbWVMb2FkZXIoKS0+d3JpdGVyKCkt
PnNldEVuY29kaW5nKCIiLCBmYWxzZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZy
YW1lSW1wbC5jcHAKaW5kZXggOWEyNWI0Ny4uYzgxNzQ5NiAxMDA2NDQKLS0tIGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmNwcApAQCAtNTE3LDcgKzUxNyw3IEBAIFdlYlVSTCBXZWJGcmFtZUltcGw6Om9w
ZW5TZWFyY2hEZXNjcmlwdGlvblVSTCgpIGNvbnN0CiAKIFdlYlN0cmluZyBXZWJGcmFtZUltcGw6
OmVuY29kaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmVuY29k
aW5nKCk7CisgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2Rpbmco
KTsKIH0KIAogV2ViU2l6ZSBXZWJGcmFtZUltcGw6OnNjcm9sbE9mZnNldCgpIGNvbnN0CkBAIC0x
MDExLDcgKzEwMTEsNyBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6Y29tbWl0RG9jdW1lbnREYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVuKQogICAgICAgICB1c2VyQ2hvc2VuID0gZmFs
c2U7CiAgICAgICAgIGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNlKCkudGV4dEVu
Y29kaW5nTmFtZSgpOwogICAgIH0KLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+c2V0RW5jb2Rpbmco
ZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+
c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOwogCiAgICAgLy8gTk9URTogbWFjIG9u
bHkgZG9lcyB0aGlzIGlmIHRoZXJlIGlzIGEgZG9jdW1lbnQKICAgICBtX2ZyYW1lLT5sb2FkZXIo
KS0+YWRkRGF0YShkYXRhLCBkYXRhTGVuKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsLmNwcAppbmRleCBkNWIyYjdmLi5lODJiNWMwIDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwCkBAIC0xNzAsNyArMTcwLDcg
QEAgU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6cHJlQWN0aW9uQmVmb3JlU2VyaWFsaXpl
T3BlblRhZygKICAgICAgICAgICAgIC8vIEdldCBlbmNvZGluZyBpbmZvLgogICAgICAgICAgICAg
U3RyaW5nIHhtbEVuY29kaW5nID0gcGFyYW0tPmRvYy0+eG1sRW5jb2RpbmcoKTsKICAgICAgICAg
ICAgIGlmICh4bWxFbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgeG1sRW5jb2Rp
bmcgPSBwYXJhbS0+ZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAg
ICAgICAgICB4bWxFbmNvZGluZyA9IHBhcmFtLT5kb2MtPmZyYW1lKCktPmxvYWRlcigpLT53cml0
ZXIoKS0+ZW5jb2RpbmcoKTsKICAgICAgICAgICAgIGlmICh4bWxFbmNvZGluZy5pc0VtcHR5KCkp
CiAgICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBVVEY4RW5jb2RpbmcoKS5uYW1lKCk7CiAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwiIik7CkBAIC01MTQsNyAr
NTE0LDcgQEAgYm9vbCBXZWJQYWdlU2VyaWFsaXplckltcGw6OnNlcmlhbGl6ZSgpCiAgICAgICAg
ICAgICAvLyBBIG5ldyBkb2N1bWVudCwgd2Ugd2lsbCBzZXJpYWxpemUgaXQuCiAgICAgICAgICAg
ICBkaWRTZXJpYWxpemF0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIEdldCB0YXJnZXQgZW5j
b2RpbmcgZm9yIGN1cnJlbnQgZG9jdW1lbnQuCi0gICAgICAgICAgICBTdHJpbmcgZW5jb2Rpbmcg
PSBjdXJyZW50RnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygpOworICAgICAgICAg
ICAgU3RyaW5nIGVuY29kaW5nID0gY3VycmVudEZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+d3Jp
dGVyKCktPmVuY29kaW5nKCk7CiAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIHRleHQgZW5jb2Rp
bmcgb2JqZWN0IHdpdGggdGFyZ2V0IGVuY29kaW5nLgogICAgICAgICAgICAgVGV4dEVuY29kaW5n
IHRleHRFbmNvZGluZyhlbmNvZGluZyk7CiAgICAgICAgICAgICAvLyBDb25zdHJ1Y3Qgc2VyaWFs
aXplIHBhcmFtZXRlciBmb3IgbGF0ZSBwcm9jZXNzaW5nIGRvY3VtZW50LgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCmluZGV4IGVkZGFmZmUuLjhlZWY2
Y2MgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRh
LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAK
QEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBHZXRGb3JtRW5jb2RpbmcoY29uc3QgSFRNTEZvcm1FbGVt
ZW50KiBmb3JtLCBUZXh0RW5jb2RpbmcqIGVuY29kaW5nKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBjb25zdCBGcmFtZSogZnJhbWUgPSBmb3JtLT5kb2N1bWVudCgpLT5mcmFtZSgp
OwotICAgICplbmNvZGluZyA9IGZyYW1lID8gVGV4dEVuY29kaW5nKGZyYW1lLT5sb2FkZXIoKS0+
ZW5jb2RpbmcoKSkgOiBMYXRpbjFFbmNvZGluZygpOworICAgICplbmNvZGluZyA9IGZyYW1lID8g
VGV4dEVuY29kaW5nKGZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCkpIDogTGF0
aW4xRW5jb2RpbmcoKTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzdWJtaXQgcmVxdWVz
dCByZXN1bHRzIGluIGFuIEhUVFAgVVJMLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApp
bmRleCA2M2UxZTVmLi4xOThhODFlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApA
QCAtMTI4Miw3ICsxMjgyLDcgQEAgV2ViU3RyaW5nIFdlYlZpZXdJbXBsOjpwYWdlRW5jb2Rpbmco
KSBjb25zdAogICAgIGlmICghbV9wYWdlLmdldCgpKQogICAgICAgICByZXR1cm4gV2ViU3RyaW5n
KCk7CiAKLSAgICByZXR1cm4gbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmVuY29kaW5n
KCk7CisgICAgcmV0dXJuIG1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+
ZW5jb2RpbmcoKTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0UGFnZUVuY29kaW5nKGNvbnN0
IFdlYlN0cmluZyYgZW5jb2RpbmdOYW1lKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCAzM2FlNWZhLi4zODk4ZDdlIDEwMDY0NAot
LS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE4IEBACisyMDEwLTA0LTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFjdG9y
IERvY3VtZW50V3JpdGVyIG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxNzUKKworICAgICAgICBVcGRhdGUgdGhlc2Ug
Y2FsbHNpdGVzIGJlY2F1c2UgdGhlIG1ldGhvZCBtb3ZlZCB0byBEb2N1bWVudFdyaXRlci4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQpOgorICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKToKKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Vu
Y29kaW5nKToKKwogMjAxMC0wNC0wNyAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IDg0
YzQzMjMuLjI3ZmYzYzggMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6Y29tbWl0dGVkTG9hZChXZWJDb3JlOjpEb2N1bWVudExvYWRlciogbG9hZGVyLCBj
b25zdCBjaGEKICAgICAgICAgICAgIGVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRF
bmNvZGluZ05hbWUoKTsKIAogICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBsb2Fk
ZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgICAgIGZyYW1lTG9hZGVyLT5zZXRFbmNvZGluZyhlbmNv
ZGluZywgdXNlckNob3Nlbik7CisgICAgICAgIGZyYW1lTG9hZGVyLT53cml0ZXIoKS0+c2V0RW5j
b2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOwogICAgICAgICBpZiAoZGF0YSkKICAgICAgICAg
ICAgIGZyYW1lTG9hZGVyLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CiAKQEAgLTg2OCw3ICs4Njgs
NyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpmaW5pc2hlZExvYWRpbmcoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQogewogICAgIGlmICghbV9wbHVnaW5WaWV3KSB7
CiAgICAgICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBkb2N1bWVudExvYWRlci0+ZnJhbWVMb2Fk
ZXIoKTsKLSAgICAgICAgbG9hZGVyLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGlu
Z05hbWUoKSwgZmFsc2UpOworICAgICAgICBsb2FkZXItPndyaXRlcigpLT5zZXRFbmNvZGluZyht
X3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIG1fcGx1Z2luVmlldy0+ZGlkRmluaXNoTG9hZGluZygpOwogICAgICAgICBtX3BsdWdpblZp
ZXcgPSAwOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCA2ZjgxNjI1Li4yMmY2
ZDA0IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtNDAxMSw3ICs0MDExLDcg
QEAgY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfdmlld19nZXRfZW5jb2RpbmcoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJ
RVcod2ViVmlldyksIE5VTEwpOwogCi0gICAgU3RyaW5nIGVuY29kaW5nID0gY29yZSh3ZWJWaWV3
KS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygpOworICAgIFN0cmluZyBlbmNvZGlu
ZyA9IGNvcmUod2ViVmlldyktPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29k
aW5nKCk7CiAKICAgICBpZiAoIWVuY29kaW5nLmlzRW1wdHkoKSkgewogICAgICAgICBXZWJLaXRX
ZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CmRpZmYgLS1naXQgYS9XZWJLaXQv
aGFpa3UvQ2hhbmdlTG9nIGIvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwppbmRleCA2MDViYzBkLi4y
ZmFlYTRlIDEwMDY0NAotLS0gYS9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9o
YWlrdS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNC0wOCAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZhY3RvciBEb2N1bWVudFdyaXRlciBvdXQgb2YgRnJhbWVMb2FkZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MTc1CisKKyAg
ICAgICAgVXBkYXRlIHRoZXNlIGNhbGxzaXRlcyBiZWNhdXNlIHRoZSBtZXRob2QgbW92ZWQgdG8g
RG9jdW1lbnRXcml0ZXIuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmNvbW1pdHRlZExvYWQpOgorCiAyMDEwLTA0LTA3ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlm
ZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhh
aWt1LmNwcCBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhh
aWt1LmNwcAppbmRleCAxOTQ5NDIxLi40MzAxOTRhIDEwMDY0NAotLS0gYS9XZWJLaXQvaGFpa3Uv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHAKKysrIGIvV2ViS2l0L2hh
aWt1L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwCkBAIC01MTAsNyAr
NTEwLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpjb21taXR0ZWRMb2FkKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnMKICAgICAgICAgcmV0dXJuOwogCiAgICAg
RnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOwotICAgIGZy
YW1lTG9hZGVyLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFs
c2UpOworICAgIGZyYW1lTG9hZGVyLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50
ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKICAgICBmcmFtZUxvYWRlci0+YWRkRGF0YShkYXRh
LCBsZW5ndGgpOwogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCmluZGV4IDIzMmVkMzAuLjJmMzgzNDQgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTAtMDQtMDggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGYWN0b3IgRG9jdW1lbnRX
cml0ZXIgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNzE3NQorCisgICAgICAgIFVwZGF0ZSB0aGVzZSBjYWxsc2l0ZXMg
YmVjYXVzZSB0aGUgbWV0aG9kIG1vdmVkIHRvIERvY3VtZW50V3JpdGVyLgorCisgICAgICAgICog
V2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2NhblByb3ZpZGVEb2N1
bWVudFNvdXJjZV0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVjZWl2ZWREYXRhOnRleHRFbmNv
ZGluZ05hbWU6XSk6CisKIDIwMTAtMDQtMDcgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CmluZGV4IDUzOGMyM2EuLjRjZTk4NzYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTk2MSw3
ICs5NjEsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlcikKIC0gKEJPT0wpX2NhblByb3ZpZGVEb2N1bWVudFNvdXJjZQogewog
ICAgIEZyYW1lKiBmcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7Ci0gICAgU3RyaW5nIG1pbWVU
eXBlID0gZnJhbWUtPmxvYWRlcigpLT5yZXNwb25zZU1JTUVUeXBlKCk7CisgICAgU3RyaW5nIG1p
bWVUeXBlID0gZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+bWltZVR5cGUoKTsKICAgICBQbHVn
aW5EYXRhKiBwbHVnaW5EYXRhID0gZnJhbWUtPnBhZ2UoKSA/IGZyYW1lLT5wYWdlKCktPnBsdWdp
bkRhdGEoKSA6IDA7CiAKICAgICBpZiAoV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb246OmlzVGV4
dE1JTUVUeXBlKG1pbWVUeXBlKSB8fApAQCAtOTg2LDcgKzk4Niw3IEBAIHN0YXRpYyBpbmxpbmUg
V2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZShEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgIGJv
b2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwoKTsKICAgICBpZiAoZW5jb2RpbmcuaXNO
dWxsKCkpCiAgICAgICAgIGVuY29kaW5nID0gdGV4dEVuY29kaW5nTmFtZTsKLSAgICBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5sb2FkZXIoKS0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4p
OworICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+c2V0RW5jb2Rp
bmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOwogICAgIFtzZWxmIF9hZGREYXRhOmRhdGFdOwogfQog
CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpp
bmRleCA2OTQ4YTU1Li4yZjc5NTgzIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisr
KyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0wNC0wOCAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZhY3RvciBEb2N1bWVudFdyaXRlciBvdXQgb2YgRnJhbWVM
b2FkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3
MTc1CisKKyAgICAgICAgVXBkYXRlIHRoZXNlIGNhbGxzaXRlcyBiZWNhdXNlIHRoZSBtZXRob2Qg
bW92ZWQgdG8gRG9jdW1lbnRXcml0ZXIuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
UXQ6OmZpbmlzaGVkTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dFF0OjpzZXRNYWluRG9jdW1lbnRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudFF0Ojpjb21taXR0ZWRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmRpc3BhdGNoRGlkRmFpbExvYWRpbmcpOgorCiAyMDEwLTA0LTA4ICBCZW5qYW1p
biBQb3VsYWluICA8YmVuamFtaW4ucG91bGFpbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgU2ltb24gSGF1c21hbm4uCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRRdC5jcHAKaW5kZXggYjE3ZGFkZS4uYTQ4NTM1YyAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCisrKyBiL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcApAQCAtNTE3LDcg
KzUxNyw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZmluaXNoZWRMb2FkaW5nKERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKICAgICAgICAgaWYo
bV9maXJzdERhdGEpIHsKICAgICAgICAgICAgIEZyYW1lTG9hZGVyICpmbCA9IGxvYWRlci0+ZnJh
bWVMb2FkZXIoKTsKLSAgICAgICAgICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRF
bmNvZGluZ05hbWUoKSwgZmFsc2UpOworICAgICAgICAgICAgZmwtPndyaXRlcigpLT5zZXRFbmNv
ZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOwogICAgICAgICAgICAg
bV9maXJzdERhdGEgPSBmYWxzZTsgCiAgICAgICAgIH0KICAgICB9CkBAIC03MDgsNyArNzA4LDcg
QEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpzZXRNYWluRG9jdW1lbnRFcnJvcihXZWJDb3Jl
OjpEb2N1bWVudExvYWRlciogbG9hZGVyLAogewogICAgIGlmICghbV9wbHVnaW5WaWV3KSB7CiAg
ICAgICAgIGlmIChtX2ZpcnN0RGF0YSkgewotICAgICAgICAgICAgbG9hZGVyLT5mcmFtZUxvYWRl
cigpLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOwor
ICAgICAgICAgICAgbG9hZGVyLT5mcmFtZUxvYWRlcigpLT53cml0ZXIoKS0+c2V0RW5jb2Rpbmco
bV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKICAgICAgICAgICAgIG1fZmly
c3REYXRhID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtNzI2LDcgKzcyNiw3
IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y29tbWl0dGVkTG9hZChXZWJDb3JlOjpEb2N1
bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBjCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IEZyYW1lTG9hZGVyICpmbCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKICAgICAgICAgaWYgKG1f
Zmlyc3REYXRhKSB7Ci0gICAgICAgICAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0
RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKKyAgICAgICAgICAgIGZsLT53cml0ZXIoKS0+c2V0RW5j
b2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKICAgICAgICAgICAg
IG1fZmlyc3REYXRhID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmwtPmFkZERhdGEoZGF0
YSwgbGVuZ3RoKTsKQEAgLTg5MSw3ICs4OTEsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6
OmRpc3BhdGNoRGlkRmFpbExvYWRpbmcoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlcgog
CiAgICAgaWYgKG1fZmlyc3REYXRhKSB7CiAgICAgICAgIEZyYW1lTG9hZGVyICpmbCA9IGxvYWRl
ci0+ZnJhbWVMb2FkZXIoKTsKLSAgICAgICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4
dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7CisgICAgICAgIGZsLT53cml0ZXIoKS0+c2V0RW5jb2Rp
bmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKICAgICAgICAgbV9maXJz
dERhdGEgPSBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL0NoYW5nZUxv
ZyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IGFkOWY0ZDMuLjRhOWE5MDMgMTAwNjQ0Ci0t
LSBhL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTAtMDQtMDggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGYWN0b3Ig
RG9jdW1lbnRXcml0ZXIgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzE3NQorCisgICAgICAgIFVwZGF0ZSB0aGVzZSBj
YWxsc2l0ZXMgYmVjYXVzZSB0aGUgbWV0aG9kIG1vdmVkIHRvIERvY3VtZW50V3JpdGVyLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAg
ICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlY2VpdmVkRGF0YSk6CisKIDIwMTAtMDQtMDggIFN0
ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQuY3BwIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5jcHAKaW5kZXggNDc1MjA0MC4uZmM3NWVhNCAxMDA2NDQKLS0tIGEvV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKKysrIGIvV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKQEAgLTUwOSw3
ICs1MDksNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZWNlaXZlZERhdGEoY29uc3Qg
Y2hhciogZGF0YSwgaW50IGxlbmd0aCwgY29uc3QgU3RyaQogICAgIGJvb2wgdXNlckNob3NlbiA9
ICFlbmNvZGluZy5pc051bGwoKTsKICAgICBpZiAoZW5jb2RpbmcuaXNOdWxsKCkpCiAgICAgICAg
IGVuY29kaW5nID0gdGV4dEVuY29kaW5nOwotICAgIGNvcmVGcmFtZS0+bG9hZGVyKCktPnNldEVu
Y29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKyAgICBjb3JlRnJhbWUtPmxvYWRlcigpLT53
cml0ZXIoKS0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOwogCiAgICAgY29yZUZy
YW1lLT5sb2FkZXIoKS0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOwogfQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3d4L0NoYW5nZUxvZyBiL1dlYktpdC93eC9DaGFuZ2VMb2cKaW5kZXggNjFmNWQ0OC4uMTk5
NDA4MyAxMDA2NDQKLS0tIGEvV2ViS2l0L3d4L0NoYW5nZUxvZworKysgYi9XZWJLaXQvd3gvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDQtMDggIEFkYW0gQmFydGggIDxhYmFydGhA
d2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGYWN0b3IgRG9jdW1lbnRXcml0ZXIgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzE3NQorCisgICAgICAgIFVw
ZGF0ZSB0aGVzZSBjYWxsc2l0ZXMgYmVjYXVzZSB0aGUgbWV0aG9kIG1vdmVkIHRvIERvY3VtZW50
V3JpdGVyLgorCisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50V3g6OmNvbW1pdHRlZExvYWQp
OgorCiAyMDEwLTA0LTA3ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBhL1dlYktp
dC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwIGIvV2ViS2l0L3d4L1dl
YktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHAKaW5kZXggM2QyZDA2Ny4uMDM4OWZi
YyAxMDA2NDQKLS0tIGEvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
eC5jcHAKKysrIGIvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5j
cHAKQEAgLTYwNCw3ICs2MDQsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OmNvbW1pdHRl
ZExvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgYwogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKICAgICAgICAgRnJhbWVMb2FkZXIqIGZs
ID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOwotICAgICAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNw
b25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKKyAgICAgICAgZmwtPndyaXRlcigpLT5z
ZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOwogICAgICAg
ICBmbC0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOwogICAgIH0KICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52925</attachid>
            <date>2010-04-08 17:44:34 -0700</date>
            <delta_ts>2010-04-09 14:26:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37175-20100408174432.patch</filename>
            <type>text/plain</type>
            <size>65977</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRl
eCBhMTlkN2UyLi4zNzU3ZDhmIDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
V2ViQ29yZS9BbmRyb2lkLm1rCkBAIC0yODUsNiArMjg1LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJbG9hZGVyL0RvY0xvYWRlci5jcHAgXAogCWxvYWRlci9E
b2N1bWVudExvYWRlci5jcHAgXAogCWxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3Bw
IFwKKwlsb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwIFwKIAlsb2FkZXIvRm9ybVN0YXRlLmNwcCBc
CiAJbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBcCiAJbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNw
cCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDk1MDFmYTcuLjE0YjVlNjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTAtMDQtMDggIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGYWN0b3IgRG9jdW1lbnRXcml0ZXIgb3V0IG9mIEZyYW1lTG9hZGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzE3NQor
CisgICAgICAgIFRoaXMgcGF0Y2ggc2VwYXJhdGVzIHRoZSBiZWdpbi93cml0ZS9lbmQgY3ljbGUg
b2YgZGVjb2RpbmcgbmV0d29yaworICAgICAgICBieXRlcyBhbmQgcHV0dGluZyB0aGVtIGludG8g
YSBkb2N1bWVudCBmcm9tIHRoZSByZXN0IG9mIHRoZSBsb2FkaW5nCisgICAgICAgIG1hY2hpbmVy
eS4gIFRoZSBjb2RlIGFuZCBzdGF0ZSByZXF1aXJlZCB0byB3cml0ZSBieXRlcyBpbnRvIGEgZG9j
dW1lbnQKKyAgICAgICAgZG9lc24ndCBpbnRlcmFjdCB2ZXJ5IG11Y2ggd2l0aCB0aGUgcmVzdCBv
ZiB0aGUgbG9hZGluZyBtYWNoaW5lcnkuCisKKyAgICAgICAgTm8gdGVzdHMgYmVjYXVzZSB0aGVy
ZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UgKGhvcGVmdWxseSEpLgorCisgICAgICAgICogQW5kcm9p
ZC5tazoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmJhc2Uu
ZXhwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0Q29u
dHJvbGxlckJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhl
Y3V0ZUlmSmF2YVNjcmlwdFVSTCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjbG9zZSk6CisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246
OmNoZWNrU3R5bGVTaGVldCk6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6OnNjcmlwdENoYXJzZXQpOgorICAgICAg
ICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudDo6cHJvY2Vzcyk6CisgICAgICAgICogbG9hZGVyL0RvY0xvYWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2NMb2FkZXI6OnJlcXVlc3RQcmVsb2FkKToKKyAgICAgICAgKiBsb2Fk
ZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6
OmZpbmlzaGVkTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0
dXBGb3JSZXBsYWNlQnlNSU1FVHlwZSk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50V3JpdGVy
LmNwcDogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50V3JpdGVyLmg6IEFkZGVkLgor
ICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlcjo6RnJhbWVMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Omlu
aXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpyZWNlaXZlZEZpcnN0RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6c2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpk
aWRCZWdpbkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaWRFbmRE
b2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFNldEVuY29kaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphZGREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjp0cmFuc2l0aW9uVG9Db21taXR0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6
OmZpbmlzaGVkTG9hZGluZ0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
OjphZGRFeHRyYUZpZWxkc1RvUmVxdWVzdCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d3JpdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjppc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCk6Cisg
ICAgICAgICogbG9hZGVyL01lZGlhRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFEb2N1bWVudDo6cmVwbGFjZU1lZGlhRWxlbWVudFRpbWVyRmlyZWQpOgorICAgICAgICAqIGxv
YWRlci9QbHVnaW5Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Ub2tlbml6
ZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6
OmRhdGFFbmNvZGluZyk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpkYXRhQ2hhbmdlZCk6CisKIDIwMTAtMDQtMDggIER1
bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBHZW9mZnJleSBHYXJlbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDliMjRjM2UuLmU0OWI5M2UgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAt
MTMwNiw2ICsxMzA2LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2xvYWRlci9E
b2N1bWVudExvYWRlci5oIFwKIAlXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXIuY3BwIFwKIAlXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCBcCisJ
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwIFwKKwlXZWJDb3JlL2xvYWRlci9Eb2N1
bWVudFdyaXRlci5oIFwKIAlXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBcCiAJV2ViQ29y
ZS9sb2FkZXIvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIFwKIAlXZWJDb3JlL2xvYWRlci9GVFBE
aXJlY3RvcnlEb2N1bWVudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4
cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCBhYmFkMjEyLi5jMDBkZmZmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJh
c2UuZXhwCkBAIC0xNTYsNyArMTU2LDYgQEAgX19aTjdXZWJDb3JlMTFGaWxlQ2hvb3NlcjExY2hv
b3NlRmlsZXNFUktOM1dURjZWZWN0b3JJTlNfNlN0cmluZ0VMbTBFRUUKIF9fWk43V2ViQ29yZTEx
RmlsZUNob29zZXJEMUV2CiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTFjb21wbGV0ZVVSTEVS
S05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTFsb2FkQXJjaGl2ZUVOM1dU
RjEwUGFzc1JlZlB0cklOU183QXJjaGl2ZUVFRQotX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjEx
c2V0RW5jb2RpbmdFUktOU182U3RyaW5nRWIKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIxMnNo
b3VsZFJlbG9hZEVSS05TXzRLVVJMRVMzXwogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE0ZGV0
YWNoQ2hpbGRyZW5FdgogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE0c3RvcEFsbExvYWRlcnNF
TlNfMTREYXRhYmFzZVBvbGljeUUKQEAgLTMwMSw2ICszMDAsNyBAQCBfX1pON1dlYkNvcmUxNERv
Y3VtZW50TG9hZGVyOHNldFRpdGxlRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE0RG9jdW1l
bnRMb2FkZXJDMUVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RVJLTlNfMTRTdWJzdGl0dXRlRGF0YUUK
IF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXJDMkVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RVJL
TlNfMTRTdWJzdGl0dXRlRGF0YUUKIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXJEMkV2Citf
X1pON1dlYkNvcmUxNERvY3VtZW50V3JpdGVyMTFzZXRFbmNvZGluZ0VSS05TXzZTdHJpbmdFYgog
X19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTEycmVsZWFzZVByb3h5RXYKIF9fWk43V2ViQ29y
ZTE0UmVzb3VyY2VIYW5kbGUyMGZvcmNlQ29udGVudFNuaWZmaW5nRXYKIF9fWk43V2ViQ29yZTE0
UmVzb3VyY2VMb2FkZXIxNGNhbmNlbGxlZEVycm9yRXYKQEAgLTgxMSw3ICs4MTEsNiBAQCBfX1pO
SzdXZWJDb3JlMTFGcmFtZUxvYWRlcjE0ZnJhbWVIYXNMb2FkZWRFdgogX19aTks3V2ViQ29yZTEx
RnJhbWVMb2FkZXIxNWNvbnRhaW5zUGx1Z2luc0V2CiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRl
cjE1Zmlyc3RMYXlvdXREb25lRXYKIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTZvdXRnb2lu
Z1JlZmVycmVyRXYKLV9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTZyZXNwb25zZU1JTUVUeXBl
RXYKIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMjBhY3RpdmVEb2N1bWVudExvYWRlckV2CiBf
X1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjI3bnVtUGVuZGluZ09yTG9hZGluZ1JlcXVlc3RzRWIK
IF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyOGxvYWRUeXBlRXYKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMzU2N2Y5ZS4uMDY4
ZDgyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTE3MzIsNiArMTczMiw4IEBACiAgICAgICAgICAgICAnbG9hZGVyL0RvY3Vt
ZW50TG9hZGVyLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXIuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgn
LAorICAgICAgICAgICAgJ2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAnLAorICAgICAgICAgICAg
J2xvYWRlci9Eb2N1bWVudFdyaXRlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvRW1wdHlDbGll
bnRzLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAnLAog
ICAgICAgICAgICAgJ2xvYWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5oJywKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGU3YmI5ODMu
LjA0MGVmMWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9X
ZWJDb3JlLnBybwpAQCAtNzM0LDYgKzczNCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGxvYWRlci9E
b2NMb2FkZXIuY3BwIFwKICAgICBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwIFwKICAgICBsb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcCBcCisgICAgbG9hZGVyL0RvY3VtZW50V3Jp
dGVyLmNwcCBcCiAgICAgbG9hZGVyL0Zvcm1TdGF0ZS5jcHAgXAogICAgIGxvYWRlci9GcmFtZUxv
YWRlci5jcHAgXAogICAgIGxvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAgXApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggOWRlYWNjZi4uNTZjYTE1NCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yMTM5Nyw2ICsyMTM5NywxNCBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJc
RG9jdW1lbnRXcml0ZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXERvY3VtZW50V3JpdGVyLmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ4ZmIwZDEuLjI1YTk4NTUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNDgyLDYgKzI0ODIs
OCBAQAogCQk5NzA1OTk3ODEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MDU5OTc0MTA3RDk3
NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk3MDU5OTc5MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xp
Y3lDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3MDU5OTc1MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVja2VyLmNwcCAqLzsgfTsK
IAkJOTcwNTk5N0ExMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MDU5OTc2MTA3RDk3NTIwMEE1
MEE3QyAvKiBQb2xpY3lDaGVja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJOTczODg5QTAxMTZFQTlEQzAwQURGMzEzIC8qIERvY3VtZW50V3Jp
dGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
Mzg4OTlFMTE2RUE5REMwMEFERjMxMyAvKiBEb2N1bWVudFdyaXRlci5jcHAgKi87IH07CisJCTk3
Mzg4OUExMTE2RUE5REMwMEFERjMxMyAvKiBEb2N1bWVudFdyaXRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTczODg5OUYxMTZFQTlEQzAwQURGMzEz
IC8qIERvY3VtZW50V3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTczRTMyNTYxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5v
dGlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3M0UzMjU0MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5jcHAgKi87
IH07CiAJCTk3M0UzMjU3MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTczRTMyNTUx
MDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTc5RjQzRDMxMDc1RTQ0QTAwMDBG
ODNCIC8qIFJlZGlyZWN0U2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3OUY0M0QxMTA3NUU0NEEwMDAwRjgzQiAvKiBSZWRpcmVjdFNj
aGVkdWxlci5jcHAgKi87IH07CkBAIC03OTE3LDYgKzc5MTksOCBAQAogCQk5NzA1OTk3NDEwN0Q5
NzUyMDBBNTBBN0MgLyogUG9saWN5Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUG9saWN5Q2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTcwNTk5NzUxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9saWN5Q2hlY2tlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTk3MDU5OTc2MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVj
a2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbGljeUNoZWNrZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTczODg5OUUxMTZFQTlEQzAwQURGMzEzIC8q
IERvY3VtZW50V3JpdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERvY3VtZW50V3JpdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTczODg5
OUYxMTZFQTlEQzAwQURGMzEzIC8qIERvY3VtZW50V3JpdGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERvY3VtZW50V3JpdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTk3M0UzMjU0MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUxvYWROb3Rp
Zmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3M0UzMjU1MTA4ODNCN0Mw
MDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZXNvdXJjZUxvYWROb3RpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5NzlGNDNEMTEwNzVFNDRBMDAwMEY4M0IgLyogUmVkaXJlY3RTY2hlZHVsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVkaXJlY3RTY2hlZHVsZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUyMTYsNiArMTUyMjAsOCBAQAog
CQkJCTY1NkQzNzFFMEFEQkE1REUwMEE0NTU0RCAvKiBEb2N1bWVudExvYWRlci5oICovLAogCQkJ
CTBCOTA1NjE1MEYyNTc4QkUwMDk1RkY2QSAvKiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3Bw
ICovLAogCQkJCTBCOTA1NjE2MEYyNTc4QkUwMDk1RkY2QSAvKiBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuaCAqLywKKwkJCQk5NzM4ODk5RTExNkVBOURDMDBBREYzMTMgLyogRG9jdW1lbnRXcml0
ZXIuY3BwICovLAorCQkJCTk3Mzg4OTlGMTE2RUE5REMwMEFERjMxMyAvKiBEb2N1bWVudFdyaXRl
ci5oICovLAogCQkJCUIyNTU5OTBEMEQwMEQ4QjkwMEJCODI1QyAvKiBFbXB0eUNsaWVudHMuaCAq
LywKIAkJCQk2NTZEMzcyMzBBREJBNURFMDBBNDU1NEQgLyogRm9ybVN0YXRlLmNwcCAqLywKIAkJ
CQk2NTZEMzcyMjBBREJBNURFMDBBNDU1NEQgLyogRm9ybVN0YXRlLmggKi8sCkBAIC0xODgyOSw2
ICsxODgzNSw3IEBACiAJCQkJQzVENEFBN0ExMTZCQUZCNjAwNjlDQTkzIC8qIEdseXBoTWV0cmlj
c01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk1MjUzRDgxMTZDNEM2ODAwQ0FCRjAwIC8qIEZp
bGVTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTg5NTI1M0Q5MTE2QzRDNjgwMENBQkYwMCAv
KiBGaWxlU3RyZWFtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzM4ODlBMTExNkVBOURD
MDBBREYzMTMgLyogRG9jdW1lbnRXcml0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjEwNTAsNiAr
MjEwNTcsNyBAQAogCQkJCTI1NDJGNERBMTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUlu
ZGljYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNUQ0QUE3OTExNkJBRkI2MDA2OUNBOTMg
LyogR2x5cGhNZXRyaWNzTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5NTI1M0Q3MTE2QzRD
NjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3Mzg4OUEw
MTE2RUE5REMwMEFERjMxMyAvKiBEb2N1bWVudFdyaXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy9TY3JpcHRDb250cm9sbGVyQmFzZS5jcHAKaW5kZXggMDQ2N2YyZC4uNDFk
MmUwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9TY3JpcHRDb250cm9sbGVyQmFzZS5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9TY3JpcHRDb250cm9sbGVyQmFzZS5jcHAKQEAgLTEw
MSw3ICsxMDEsNyBAQCBib29sIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRV
UkwoY29uc3QgS1VSTCYgdXJsLCBib29sIHVzZXJHZXN0dXJlLAogICAgIC8vICAgICAgICBzeW5j
aHJvbm91c2x5IGNhbiBjYXVzZSBjcmFzaGVzOgogICAgIC8vICAgICAgICBodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc4MgogICAgIGlmIChyZXBsYWNlRG9jdW1lbnQp
IAotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+cmVwbGFjZURvY3VtZW50KHNjcmlwdFJlc3Vs
dCk7CisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+cmVwbGFjZURvY3VtZW50
KHNjcmlwdFJlc3VsdCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBiYmE1
OTMwLi41ODgzMzIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xNzU0LDcgKzE3NTQsNyBAQCB2b2lkIERvY3Vt
ZW50OjpjbG9zZSgpCiAgICAgaWYgKGZyYW1lKSB7CiAgICAgICAgIC8vIFRoaXMgY29kZSBjYWxs
cyBpbXBsaWNpdENsb3NlKCkgaWYgYWxsIGxvYWRpbmcgaGFzIGNvbXBsZXRlZC4KICAgICAgICAg
RnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwotICAgICAgICBmcmFt
ZUxvYWRlci0+ZW5kSWZOb3RMb2FkaW5nTWFpblJlc291cmNlKCk7CisgICAgICAgIGZyYW1lTG9h
ZGVyLT53cml0ZXIoKS0+ZW5kSWZOb3RMb2FkaW5nTWFpblJlc291cmNlKCk7CiAgICAgICAgIGZy
YW1lTG9hZGVyLT5jaGVja0NvbXBsZXRlZCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEJl
Y2F1c2Ugd2UgaGF2ZSBubyBmcmFtZSwgd2UgZG9uJ3Qga25vdyBpZiBhbGwgbG9hZGluZyBoYXMg
Y29tcGxldGVkLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmNwcCBiL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKaW5kZXggOTJhMmI0
MC4uMTk0ZGQ5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCkBAIC0xNjUs
NyArMTY1LDcgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVldCgp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGNoYXJzZXQgPSBhdHRycy5n
ZXQoImNoYXJzZXQiKTsKICAgICAgICAgICAgICAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIo
KS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IGRvY3VtZW50KCkt
PmZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKIAogICAgICAgICAgICAg
ICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdENTU1N0
eWxlU2hlZXQodXJsLCBjaGFyc2V0KTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAK
aW5kZXggNzMxYzNiYS4uMjJkNjk4MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vU2NyaXB0RWxl
bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKQEAgLTI2Myw3ICsy
NjMsNyBAQCBTdHJpbmcgU2NyaXB0RWxlbWVudERhdGE6OnNjcmlwdENoYXJzZXQoKSBjb25zdAog
ICAgIC8vIElmIGNoYXJzZXQgaGFzIG5vdCBiZWVuIGRlY2xhcmVkIGluIHNjcmlwdCB0YWcsIGZh
bGwgYmFjayB0byBmcmFtZSBlbmNvZGluZy4KICAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpIHsK
ICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KSkKLSAgICAgICAgICAgIGNoYXJzZXQgPSBmcmFtZS0+bG9hZGVyKCktPmVuY29kaW5nKCk7Cisg
ICAgICAgICAgICBjaGFyc2V0ID0gZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2Rpbmco
KTsKICAgICB9CiAKICAgICByZXR1cm4gY2hhcnNldDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9IVE1MTGlua0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAK
aW5kZXggZTczYTM2MC4uZTg1MDA3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxMaW5r
RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKQEAgLTE5
NCw3ICsxOTQsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cHJvY2VzcygpCiAgICAgICAgIAog
ICAgICAgICBTdHJpbmcgY2hhcnNldCA9IGdldEF0dHJpYnV0ZShjaGFyc2V0QXR0cik7CiAgICAg
ICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAg
ICAgICAgY2hhcnNldCA9IGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygp
OworICAgICAgICAgICAgY2hhcnNldCA9IGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT53
cml0ZXIoKS0+ZW5jb2RpbmcoKTsKIAogICAgICAgICBpZiAobV9jYWNoZWRTaGVldCkgewogICAg
ICAgICAgICAgaWYgKG1fbG9hZGluZykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0RvY0xv
YWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCmluZGV4IDMxZTFmOTEuLmEz
OWQzYWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAKKysrIGIvV2Vi
Q29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcApAQCAtNDA0LDcgKzQwNCw3IEBAIHZvaWQgRG9jTG9h
ZGVyOjpyZXF1ZXN0UHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uCiB7CiAgICAgU3RyaW5nIGVuY29kaW5nOwogICAgIGlmICh0eXBlID09IENh
Y2hlZFJlc291cmNlOjpTY3JpcHQgfHwgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVT
aGVldCkKLSAgICAgICAgZW5jb2RpbmcgPSBjaGFyc2V0LmlzRW1wdHkoKSA/IG1fZG9jLT5mcmFt
ZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKSA6IGNoYXJzZXQ7CisgICAgICAgIGVuY29kaW5nID0g
Y2hhcnNldC5pc0VtcHR5KCkgPyBtX2RvYy0+ZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5l
bmNvZGluZygpIDogY2hhcnNldDsKIAogICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IHJl
cXVlc3RSZXNvdXJjZSh0eXBlLCB1cmwsIGVuY29kaW5nLCB0cnVlKTsKICAgICBpZiAoIXJlc291
cmNlIHx8IG1fcHJlbG9hZHMuY29udGFpbnMocmVzb3VyY2UpKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuY3BwCmluZGV4IDM3YTJkZTIuLjk1YTlkNjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5j
cHAKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpmaW5pc2hlZExvYWRp
bmcoKQogICAgIGNvbW1pdElmUmVhZHkoKTsKICAgICBpZiAoRnJhbWVMb2FkZXIqIGxvYWRlciA9
IGZyYW1lTG9hZGVyKCkpIHsKICAgICAgICAgbG9hZGVyLT5maW5pc2hlZExvYWRpbmdEb2N1bWVu
dCh0aGlzKTsKLSAgICAgICAgbG9hZGVyLT5lbmQoKTsKKyAgICAgICAgbG9hZGVyLT53cml0ZXIo
KS0+ZW5kKCk7CiAgICAgfQogfQogCkBAIC0zMDcsNyArMzA3LDcgQEAgdm9pZCBEb2N1bWVudExv
YWRlcjo6c2V0dXBGb3JSZXBsYWNlQnlNSU1FVHlwZShjb25zdCBTdHJpbmcmIG5ld01JTUVUeXBl
KQogICAgIH0KICAgICAKICAgICBmcmFtZUxvYWRlcigpLT5maW5pc2hlZExvYWRpbmdEb2N1bWVu
dCh0aGlzKTsKLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZW5kKCk7CisgICAgbV9mcmFtZS0+bG9h
ZGVyKCktPndyaXRlcigpLT5lbmQoKTsKICAgICAKICAgICBmcmFtZUxvYWRlcigpLT5zZXRSZXBs
YWNpbmcoKTsKICAgICBtX2dvdEZpcnN0Qnl0ZSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZThkNmUKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAKQEAgLTAsMCAr
MSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAuIEFkYW0gQmFydGguIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50V3Jp
dGVyLmgiCisKKyNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlBsYWNlaG9sZGVyRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCisjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiVG9rZW5pemVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBib29sIGNhblJlZmVy
VG9QYXJlbnRGcmFtZUVuY29kaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgRnJhbWUqIHBh
cmVudEZyYW1lKSAKK3sKKyAgICByZXR1cm4gcGFyZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhmcmFtZS0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKSk7Cit9CisgICAgCitEb2N1bWVudFdyaXRlcjo6RG9jdW1lbnRXcml0
ZXIoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fcmVjZWl2ZWRE
YXRhKGZhbHNlKQorICAgICwgbV9lbmNvZGluZ1dhc0Nob3NlbkJ5VXNlcihmYWxzZSkKK3sKK30K
Kwordm9pZCBEb2N1bWVudFdyaXRlcjo6cmVwbGFjZURvY3VtZW50KGNvbnN0IFN0cmluZyYgaHRt
bCkKK3sKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+c3RvcEFsbExvYWRlcnMoKTsKKyAgICBiZWdp
bihtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCksIHRydWUsIG1fZnJhbWUtPmRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCkpOworICAgIGFkZERhdGEoaHRtbCk7CisgICAgZW5kKCk7Cit9CisKK3Zv
aWQgRG9jdW1lbnRXcml0ZXI6OmNsZWFyKCkKK3sKKyAgICBtX2RlY29kZXIgPSAwOworICAgIG1f
cmVjZWl2ZWREYXRhID0gZmFsc2U7CisgICAgaWYgKCFtX2VuY29kaW5nV2FzQ2hvc2VuQnlVc2Vy
KQorICAgICAgICBtX2VuY29kaW5nID0gU3RyaW5nKCk7Cit9CisKK3ZvaWQgRG9jdW1lbnRXcml0
ZXI6OmJlZ2luKCkKK3sKKyAgICBiZWdpbihLVVJMKCkpOworfQorCit2b2lkIERvY3VtZW50V3Jp
dGVyOjpiZWdpbihjb25zdCBLVVJMJiB1cmwsIGJvb2wgZGlzcGF0Y2gsIFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4pCit7CisgICAgLy8gV2UgbmVlZCB0byB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBz
ZWN1cml0eSBvcmlnaW4gYmVjYXVzZSB8Y2xlYXJ8CisgICAgLy8gbWlnaHQgZGVzdHJveSB0aGUg
ZG9jdW1lbnQgdGhhdCBvd25zIGl0LgorICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gZm9yY2Vk
U2VjdXJpdHlPcmlnaW4gPSBvcmlnaW47CisKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50
OworCisgICAgLy8gQ3JlYXRlIGEgbmV3IGRvY3VtZW50IGJlZm9yZSBjbGVhcmluZyB0aGUgZnJh
bWUsIGJlY2F1c2UgaXQgbWF5IG5lZWQgdG8gaW5oZXJpdCBhbiBhbGlhc2VkIHNlY3VyaXR5IGNv
bnRleHQuCisgICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+aXNEaXNwbGF5aW5nSW5pdGlhbEVt
cHR5RG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnNob3VsZFVzZVBs
dWdpbkRvY3VtZW50KG1fbWltZVR5cGUpKQorICAgICAgICBkb2N1bWVudCA9IFBsdWdpbkRvY3Vt
ZW50OjpjcmVhdGUobV9mcmFtZSk7CisgICAgZWxzZSBpZiAoIW1fZnJhbWUtPmxvYWRlcigpLT5j
bGllbnQoKS0+aGFzSFRNTFZpZXcoKSkKKyAgICAgICAgZG9jdW1lbnQgPSBQbGFjZWhvbGRlckRv
Y3VtZW50OjpjcmVhdGUobV9mcmFtZSk7CisgICAgZWxzZQorICAgICAgICBkb2N1bWVudCA9IERP
TUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudChtX21pbWVUeXBlLCBtX2ZyYW1lLCBtX2Zy
YW1lLT5pblZpZXdTb3VyY2VNb2RlKCkpOworCisgICAgYm9vbCByZXNldFNjcmlwdGluZyA9ICEo
bV9mcmFtZS0+bG9hZGVyKCktPmlzRGlzcGxheWluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkgJiYg
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+aXNTZWN1cmVUcmFuc2l0aW9u
VG8odXJsKSk7CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsZWFyKHJlc2V0U2NyaXB0aW5nLCBy
ZXNldFNjcmlwdGluZyk7CisgICAgaWYgKHJlc2V0U2NyaXB0aW5nKQorICAgICAgICBtX2ZyYW1l
LT5zY3JpcHQoKS0+dXBkYXRlUGxhdGZvcm1TY3JpcHRPYmplY3RzKCk7CisKKyAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+c2V0VVJMKHVybCk7CisgICAgZG9jdW1lbnQtPnNldFVSTCh1cmwpOworICAg
IG1fZnJhbWUtPnNldERvY3VtZW50KGRvY3VtZW50KTsKKyAgICBpZiAobV9kZWNvZGVyKQorICAg
ICAgICBkb2N1bWVudC0+c2V0RGVjb2RlcihtX2RlY29kZXIuZ2V0KCkpOworICAgIGlmIChmb3Jj
ZWRTZWN1cml0eU9yaWdpbikKKyAgICAgICAgZG9jdW1lbnQtPnNldFNlY3VyaXR5T3JpZ2luKGZv
cmNlZFNlY3VyaXR5T3JpZ2luLmdldCgpKTsKKyAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+c2V0
VVJMKGRvY3VtZW50LT51cmwoKSk7CisgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPnNldFNlY3Vy
aXR5T3JpZ2luKGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKTsKKworICAgIG1fZnJhbWUtPmxv
YWRlcigpLT5kaWRCZWdpbkRvY3VtZW50KGRpc3BhdGNoKTsKKworICAgIGRvY3VtZW50LT5pbXBs
aWNpdE9wZW4oKTsKKworICAgIGlmIChtX2ZyYW1lLT52aWV3KCkgJiYgbV9mcmFtZS0+bG9hZGVy
KCktPmNsaWVudCgpLT5oYXNIVE1MVmlldygpKQorICAgICAgICBtX2ZyYW1lLT52aWV3KCktPnNl
dENvbnRlbnRzU2l6ZShJbnRTaXplKCkpOworfQorCit2b2lkIERvY3VtZW50V3JpdGVyOjphZGRE
YXRhKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbiwgYm9vbCBmbHVzaCkKK3sKKyAgICBpZiAobGVu
ID09IDAgJiYgIWZsdXNoKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobGVuID09IC0xKQor
ICAgICAgICBsZW4gPSBzdHJsZW4oc3RyKTsKKworICAgIFRva2VuaXplciogdG9rZW5pemVyID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+dG9rZW5pemVyKCk7CisgICAgaWYgKHRva2VuaXplciAmJiB0
b2tlbml6ZXItPndhbnRzUmF3RGF0YSgpKSB7CisgICAgICAgIGlmIChsZW4gPiAwKQorICAgICAg
ICAgICAgdG9rZW5pemVyLT53cml0ZVJhd0RhdGEoc3RyLCBsZW4pOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmICghbV9kZWNvZGVyKSB7CisgICAgICAgIGlmIChTZXR0aW5n
cyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpKSB7CisgICAgICAgICAgICBtX2RlY29k
ZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUobV9taW1lVHlwZSwKKyAgICAgICAgICAg
ICAgICBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSwKKyAgICAgICAgICAgICAg
ICBzZXR0aW5ncy0+dXNlc0VuY29kaW5nRGV0ZWN0b3IoKSk7CisgICAgICAgICAgICBGcmFtZSog
cGFyZW50RnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpOworICAgICAgICAgICAgLy8g
U2V0IHRoZSBoaW50IGVuY29kaW5nIHRvIHRoZSBwYXJlbnQgZnJhbWUgZW5jb2Rpbmcgb25seSBp
ZgorICAgICAgICAgICAgLy8gdGhlIHBhcmVudCBhbmQgdGhlIGN1cnJlbnQgZnJhbWVzIHNoYXJl
IHRoZSBzZWN1cml0eSBvcmlnaW4uCisgICAgICAgICAgICAvLyBXZSBpbXBvc2UgdGhpcyBjb25k
aXRpb24gYmVjYXVzZSBzb21lYm9keSBjYW4gbWFrZSBhIGNoaWxkIGZyYW1lIAorICAgICAgICAg
ICAgLy8gY29udGFpbmluZyBhIGNhcmVmdWxseSBjcmFmdGVkIGh0bWwvamF2YXNjcmlwdCBpbiBv
bmUgZW5jb2RpbmcKKyAgICAgICAgICAgIC8vIHRoYXQgY2FuIGJlIG1pc3Rha2VuIGZvciBoaW50
RW5jb2RpbmcgKG9yIHJlbGF0ZWQgZW5jb2RpbmcpIGJ5CisgICAgICAgICAgICAvLyBhbiBhdXRv
IGRldGVjdG9yLiBXaGVuIGludGVycHJldGVkIGluIHRoZSBsYXR0ZXIsIGl0IGNvdWxkIGJlCisg
ICAgICAgICAgICAvLyBhbiBhdHRhY2sgdmVjdG9yLgorICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgbWlnaHQgYmUgdG9vIGNhdXRpb3VzIGZvciBub24tN2JpdC1lbmNvZGluZ3MgYW5kCisgICAg
ICAgICAgICAvLyB3ZSBtYXkgY29uc2lkZXIgcmVsYXhpbmcgdGhpcyBsYXRlciBhZnRlciB0ZXN0
aW5nLgorICAgICAgICAgICAgaWYgKGNhblJlZmVyVG9QYXJlbnRGcmFtZUVuY29kaW5nKG1fZnJh
bWUsIHBhcmVudEZyYW1lKSkKKyAgICAgICAgICAgICAgICBtX2RlY29kZXItPnNldEhpbnRFbmNv
ZGluZyhwYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUobV9t
aW1lVHlwZSwgU3RyaW5nKCkpOworICAgICAgICBGcmFtZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1l
LT50cmVlKCktPnBhcmVudCgpOworICAgICAgICBpZiAobV9lbmNvZGluZy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIGlmIChjYW5SZWZlclRvUGFyZW50RnJhbWVFbmNvZGluZyhtX2ZyYW1lLCBw
YXJlbnRGcmFtZSkpCisgICAgICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhwYXJl
bnRGcmFtZS0+ZG9jdW1lbnQoKS0+aW5wdXRFbmNvZGluZygpLCBUZXh0UmVzb3VyY2VEZWNvZGVy
OjpFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBtX2RlY29kZXItPnNldEVuY29kaW5nKG1fZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgbV9l
bmNvZGluZ1dhc0Nob3NlbkJ5VXNlciA/IFRleHRSZXNvdXJjZURlY29kZXI6OlVzZXJDaG9zZW5F
bmNvZGluZyA6IFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOwor
ICAgICAgICB9CisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnNldERlY29kZXIobV9kZWNv
ZGVyLmdldCgpKTsKKyAgICB9CisKKyAgICBTdHJpbmcgZGVjb2RlZCA9IG1fZGVjb2Rlci0+ZGVj
b2RlKHN0ciwgbGVuKTsKKyAgICBpZiAoZmx1c2gpCisgICAgICAgIGRlY29kZWQgKz0gbV9kZWNv
ZGVyLT5mbHVzaCgpOworICAgIGlmIChkZWNvZGVkLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFtX3JlY2VpdmVkRGF0YSkgeworICAgICAgICBtX3JlY2VpdmVkRGF0YSA9
IHRydWU7CisgICAgICAgIGlmIChtX2RlY29kZXItPmVuY29kaW5nKCkudXNlc1Zpc3VhbE9yZGVy
aW5nKCkpCisgICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRWaXN1YWxseU9yZGVy
ZWQoKTsKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVjYWxjU3R5bGUoTm9kZTo6Rm9y
Y2UpOworICAgIH0KKworICAgIGlmICh0b2tlbml6ZXIpIHsKKyAgICAgICAgQVNTRVJUKCF0b2tl
bml6ZXItPndhbnRzUmF3RGF0YSgpKTsKKyAgICAgICAgdG9rZW5pemVyLT53cml0ZShkZWNvZGVk
LCB0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgRG9jdW1lbnRXcml0ZXI6OmFkZERhdGEoY29uc3Qg
U3RyaW5nJiBzdHIpCit7CisgICAgaWYgKHN0ci5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX3JlY2VpdmVkRGF0YSkgeworICAgICAgICBtX3JlY2VpdmVkRGF0YSA9IHRy
dWU7CisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnNldFBhcnNlTW9kZShEb2N1bWVudDo6
U3RyaWN0KTsKKyAgICB9CisKKyAgICBpZiAoVG9rZW5pemVyKiB0b2tlbml6ZXIgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpLT50b2tlbml6ZXIoKSkKKyAgICAgICAgdG9rZW5pemVyLT53cml0ZShzdHIs
IHRydWUpOworfQorCit2b2lkIERvY3VtZW50V3JpdGVyOjplbmQoKQoreworICAgIG1fZnJhbWUt
PmxvYWRlcigpLT5kaWRFbmREb2N1bWVudCgpOworICAgIGVuZElmTm90TG9hZGluZ01haW5SZXNv
dXJjZSgpOworfQorCit2b2lkIERvY3VtZW50V3JpdGVyOjplbmRJZk5vdExvYWRpbmdNYWluUmVz
b3VyY2UoKQoreworICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+aXNMb2FkaW5nTWFpblJlc291
cmNlKCkgfHwgIW1fZnJhbWUtPnBhZ2UoKSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA4NTQKKyAgICAvLyBUaGUgZnJhbWUncyBsYXN0IHJlZiBtYXkgYmUgcmVtb3ZlZCBhbmQg
aXQgY2FuIGJlIGRlbGV0ZWQgYnkgY2hlY2tDb21wbGV0ZWQoKSwgCisgICAgLy8gc28gd2UnbGwg
YWRkIGEgcHJvdGVjdGl2ZSByZWZjb3VudAorICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1f
ZnJhbWUpOworCisgICAgLy8gbWFrZSBzdXJlIG5vdGhpbmcncyBsZWZ0IGluIHRoZXJlCisgICAg
d3JpdGUoMCwgMCwgdHJ1ZSk7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZmluaXNoUGFyc2lu
ZygpOworfQorCitTdHJpbmcgRG9jdW1lbnRXcml0ZXI6OmVuY29kaW5nKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9lbmNvZGluZ1dhc0Nob3NlbkJ5VXNlciAmJiAhbV9lbmNvZGluZy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBtX2VuY29kaW5nOworICAgIGlmIChtX2RlY29kZXIgJiYgbV9kZWNv
ZGVyLT5lbmNvZGluZygpLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIG1fZGVjb2Rlci0+ZW5j
b2RpbmcoKS5uYW1lKCk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGlu
Z3MoKTsKKyAgICByZXR1cm4gc2V0dGluZ3MgPyBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGlu
Z05hbWUoKSA6IFN0cmluZygpOworfQorCit2b2lkIERvY3VtZW50V3JpdGVyOjpzZXRFbmNvZGlu
Zyhjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgdXNlckNob3NlbikKK3sKKyAgICBtX2ZyYW1lLT5s
b2FkZXIoKS0+d2lsbFNldEVuY29kaW5nKCk7CisgICAgbV9lbmNvZGluZyA9IG5hbWU7CisgICAg
bV9lbmNvZGluZ1dhc0Nob3NlbkJ5VXNlciA9IHVzZXJDaG9zZW47Cit9CisKK3ZvaWQgRG9jdW1l
bnRXcml0ZXI6OnNldERlY29kZXIoVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlcikKK3sKKyAg
ICBtX2RlY29kZXIgPSBkZWNvZGVyOworfQorCitTdHJpbmcgRG9jdW1lbnRXcml0ZXI6OmRlcHJp
Y2F0ZWRGcmFtZUVuY29kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+bG9hZGVy
KCktPnVybCgpLmlzRW1wdHkoKSA/IG1fZW5jb2RpbmcgOiBlbmNvZGluZygpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdy
aXRlci5oIGIvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4zYWJiNTNjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRXcml0ZXIuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwLiBBZGFtIEJhcnRoLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBZGFtIEJhcnRoLiAoIkFkYW0gQmFy
dGgiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEb2N1bWVu
dFdyaXRlcl9oCisjZGVmaW5lIERvY3VtZW50V3JpdGVyX2gKKworI2luY2x1ZGUgIktVUkwuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZyYW1lOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBUZXh0UmVzb3VyY2VEZWNv
ZGVyOworCitjbGFzcyBEb2N1bWVudFdyaXRlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJs
aWM6CisgICAgRG9jdW1lbnRXcml0ZXIoRnJhbWUqKTsKKworICAgIHZvaWQgcmVwbGFjZURvY3Vt
ZW50KGNvbnN0IFN0cmluZyYpOworCisgICAgdm9pZCBiZWdpbigpOworICAgIHZvaWQgYmVnaW4o
Y29uc3QgS1VSTCYsIGJvb2wgZGlzcGF0Y2hXaW5kb3dPYmplY3RBdmFpbGFibGUgPSB0cnVlLCBT
ZWN1cml0eU9yaWdpbiogZm9yY2VkU2VjdXJpdHlPcmlnaW4gPSAwKTsKKyAgICB2b2lkIGFkZERh
dGEoY29uc3QgY2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoID0gLTEsIGJvb2wgZmx1c2ggPSBmYWxz
ZSk7CisgICAgdm9pZCBlbmQoKTsKKyAgICB2b2lkIGVuZElmTm90TG9hZGluZ01haW5SZXNvdXJj
ZSgpOworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0Owor
ICAgIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBlbmNvZGluZywgYm9vbCB1c2VyQ2hv
c2VuKTsKKworICAgIC8vIEZJWE1FOiBJdCdzIHJlYWxseSB1bmZvcnVuYXRlIHRvIG5lZWQgdG8g
ZXhwb3NlIHRoaXMgcGllY2Ugb2Ygc3RhdGUuCisgICAgLy8gSSBzdXNwZWN0IGEgYmV0dGVyIGRl
c2lnbiBpcyB0byBkaXNlbnRhbmdsZSB1c2VyLXByb3ZpZGVkIGVuY29kaW5ncywKKyAgICAvLyBk
ZWZhdWx0IGVuY29kaW5ncywgYW5kIHRoZSBkZWNvZGluZyB3ZSdyZSBjdXJyZW50bHkgdXNpbmcu
CisgICAgU3RyaW5nIGRlcHJpY2F0ZWRGcmFtZUVuY29kaW5nKCkgY29uc3Q7CisKKyAgICBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlwZTsgfQorICAgIHZv
aWQgc2V0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKSB7IG1fbWltZVR5cGUgPSB0eXBlOyB9
CisKKyAgICB2b2lkIHNldERlY29kZXIoVGV4dFJlc291cmNlRGVjb2RlciopOworCitwcml2YXRl
OgorICAgIHZvaWQgYWRkRGF0YShjb25zdCBTdHJpbmcmKTsKKworICAgIEZyYW1lKiBtX2ZyYW1l
OworCisgICAgYm9vbCBtX3JlY2VpdmVkRGF0YTsKKyAgICBTdHJpbmcgbV9taW1lVHlwZTsKKwor
ICAgIGJvb2wgbV9lbmNvZGluZ1dhc0Nob3NlbkJ5VXNlcjsKKyAgICBTdHJpbmcgbV9lbmNvZGlu
ZzsKKyAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRG9jdW1lbnRXcml0ZXJfaApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCmluZGV4IGE3ODk3NGEuLjYxOTFmNTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKQEAgLTE2NCwxNyArMTY0LDEzIEBAIHN0YXRpYyBpbnQgbnVtUmVxdWVzdHMoRG9jdW1lbnQq
IGRvY3VtZW50KQogICAgIHJldHVybiBkb2N1bWVudC0+ZG9jTG9hZGVyKCktPnJlcXVlc3RDb3Vu
dCgpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5jb2Rp
bmcoY29uc3QgRnJhbWUqIGZyYW1lLCBjb25zdCBGcmFtZSogcGFyZW50RnJhbWUpIAotewotICAg
IHJldHVybiBwYXJlbnRGcmFtZSAmJiBwYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKS0+Y2FuQWNjZXNzKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsK
LX0KLQogRnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKEZyYW1lKiBmcmFtZSwgRnJhbWVMb2FkZXJD
bGllbnQqIGNsaWVudCkKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX2NsaWVudChjbGll
bnQpCiAgICAgLCBtX3BvbGljeUNoZWNrZXIoZnJhbWUpCiAgICAgLCBtX2hpc3RvcnkoZnJhbWUp
CiAgICAgLCBtX25vdGlmZXIoZnJhbWUpCisgICAgLCBtX3dyaXRlcihmcmFtZSkKICAgICAsIG1f
c3RhdGUoRnJhbWVTdGF0ZUNvbW1pdHRlZFBhZ2UpCiAgICAgLCBtX2xvYWRUeXBlKEZyYW1lTG9h
ZFR5cGVTdGFuZGFyZCkKICAgICAsIG1fZGVsZWdhdGVJc0hhbmRsaW5nUHJvdmlzaW9uYWxMb2Fk
RXJyb3IoZmFsc2UpCkBAIC0xODksOCArMTg1LDYgQEAgRnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVy
KEZyYW1lKiBmcmFtZSwgRnJhbWVMb2FkZXJDbGllbnQqIGNsaWVudCkKICAgICAsIG1faXNDb21w
bGV0ZShmYWxzZSkKICAgICAsIG1faXNMb2FkaW5nTWFpblJlc291cmNlKGZhbHNlKQogICAgICwg
bV9uZWVkc0NsZWFyKGZhbHNlKQotICAgICwgbV9yZWNlaXZlZERhdGEoZmFsc2UpCi0gICAgLCBt
X2VuY29kaW5nV2FzQ2hvc2VuQnlVc2VyKGZhbHNlKQogICAgICwgbV9jb250YWluc1BsdWdJbnMo
ZmFsc2UpCiAgICAgLCBtX2NoZWNrVGltZXIodGhpcywgJkZyYW1lTG9hZGVyOjpjaGVja1RpbWVy
RmlyZWQpCiAgICAgLCBtX3Nob3VsZENhbGxDaGVja0NvbXBsZXRlZChmYWxzZSkKQEAgLTIzMCw4
ICsyMjQsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjppbml0KCkKICAgICBzZXRTdGF0ZShGcmFtZVN0
YXRlUHJvdmlzaW9uYWwpOwogICAgIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci0+c2V0UmVz
cG9uc2UoUmVzb3VyY2VSZXNwb25zZShLVVJMKCksICJ0ZXh0L2h0bWwiLCAwLCBTdHJpbmcoKSwg
U3RyaW5nKCkpKTsKICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPmZpbmlzaGVkTG9h
ZGluZygpOwotICAgIGJlZ2luKEtVUkwoKSwgZmFsc2UpOwotICAgIGVuZCgpOworICAgIHdyaXRl
cigpLT5iZWdpbihLVVJMKCksIGZhbHNlKTsKKyAgICB3cml0ZXIoKS0+ZW5kKCk7CiAgICAgbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+Y2FuY2VsUGFyc2luZygpOwogICAgIG1fY3JlYXRpbmdJbml0aWFs
RW1wdHlEb2N1bWVudCA9IGZhbHNlOwogICAgIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2UgPSB0cnVl
OwpAQCAtNzAxLDE0ICs2OTUsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjYW5jZWxBbmRDbGVhcigp
CiAgICAgbV9mcmFtZS0+c2NyaXB0KCktPnVwZGF0ZVBsYXRmb3JtU2NyaXB0T2JqZWN0cygpOwog
fQogCi12b2lkIEZyYW1lTG9hZGVyOjpyZXBsYWNlRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBodG1s
KQotewotICAgIHN0b3BBbGxMb2FkZXJzKCk7Ci0gICAgYmVnaW4obV9VUkwsIHRydWUsIG1fZnJh
bWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOwotICAgIHdyaXRlKGh0bWwpOwotICAg
IGVuZCgpOwotfQotCiB2b2lkIEZyYW1lTG9hZGVyOjpjbGVhcihib29sIGNsZWFyV2luZG93UHJv
cGVydGllcywgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMsIGJvb2wgY2xlYXJGcmFtZVZpZXcpCiB7
CiAgICAgbV9mcmFtZS0+ZWRpdG9yKCktPmNsZWFyKCk7CkBAIC03NDIsNyArNzI4LDcgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6Y2xlYXIoYm9vbCBjbGVhcldpbmRvd1Byb3BlcnRpZXMsIGJvb2wgY2xl
YXJTY3JpcHRPYmplY3RzLCBib28KICAgICAvLyBEbyBub3QgZHJvcCB0aGUgZG9jdW1lbnQgYmVm
b3JlIHRoZSBTY3JpcHRDb250cm9sbGVyIGFuZCB2aWV3IGFyZSBjbGVhcmVkCiAgICAgLy8gYXMg
c29tZSBkZXN0cnVjdG9ycyBtaWdodCBzdGlsbCB0cnkgdG8gYWNjZXNzIHRoZSBkb2N1bWVudC4K
ICAgICBtX2ZyYW1lLT5zZXREb2N1bWVudCgwKTsKLSAgICBtX2RlY29kZXIgPSAwOworICAgIHdy
aXRlcigpLT5jbGVhcigpOwogCiAgICAgbV9jb250YWluc1BsdWdJbnMgPSBmYWxzZTsKIApAQCAt
NzU0LDE3ICs3NDAsMTIgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoYm9vbCBjbGVhcldpbmRv
d1Byb3BlcnRpZXMsIGJvb2wgY2xlYXJTY3JpcHRPYmplY3RzLCBib28KICAgICBtX2NoZWNrVGlt
ZXIuc3RvcCgpOwogICAgIG1fc2hvdWxkQ2FsbENoZWNrQ29tcGxldGVkID0gZmFsc2U7CiAgICAg
bV9zaG91bGRDYWxsQ2hlY2tMb2FkQ29tcGxldGUgPSBmYWxzZTsKLQotICAgIG1fcmVjZWl2ZWRE
YXRhID0gZmFsc2U7CiAgICAgbV9pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCA9IGZh
bHNlOwotCi0gICAgaWYgKCFtX2VuY29kaW5nV2FzQ2hvc2VuQnlVc2VyKQotICAgICAgICBtX2Vu
Y29kaW5nID0gU3RyaW5nKCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnJlY2VpdmVkRmlyc3RE
YXRhKCkKIHsKLSAgICBiZWdpbihtX3dvcmtpbmdVUkwsIGZhbHNlKTsKKyAgICB3cml0ZXIoKS0+
YmVnaW4obV93b3JraW5nVVJMLCBmYWxzZSk7CiAKICAgICBkaXNwYXRjaERpZENvbW1pdExvYWQo
KTsKICAgICBkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0c0luQWxsV29ybGRzKCk7CkBAIC03
OTUsMTkwICs3NzYsNDkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6cmVjZWl2ZWRGaXJzdERhdGEoKQog
ICAgIG1fZnJhbWUtPnJlZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVkdWxlUmVkaXJlY3QoZGVsYXks
IHVybCk7CiB9CiAKLWNvbnN0IFN0cmluZyYgRnJhbWVMb2FkZXI6OnJlc3BvbnNlTUlNRVR5cGUo
KSBjb25zdAotewotICAgIHJldHVybiBtX3Jlc3BvbnNlTUlNRVR5cGU7Ci19Ci0KLXZvaWQgRnJh
bWVMb2FkZXI6OnNldFJlc3BvbnNlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQotewotICAg
IG1fcmVzcG9uc2VNSU1FVHlwZSA9IHR5cGU7Ci19Ci0gICAgCi12b2lkIEZyYW1lTG9hZGVyOjpi
ZWdpbigpCit2b2lkIEZyYW1lTG9hZGVyOjpzZXRVUkwoY29uc3QgS1VSTCYgdXJsKQogewotICAg
IGJlZ2luKEtVUkwoKSk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXI6OmJlZ2luKGNvbnN0IEtVUkwm
IHVybCwgYm9vbCBkaXNwYXRjaCwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICAvLyBX
ZSBuZWVkIHRvIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIHNlY3VyaXR5IG9yaWdpbiBiZWNhdXNl
IHxjbGVhcnwKLSAgICAvLyBtaWdodCBkZXN0cm95IHRoZSBkb2N1bWVudCB0aGF0IG93bnMgaXQu
Ci0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBmb3JjZWRTZWN1cml0eU9yaWdpbiA9IG9yaWdp
bjsKLQotICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQ7Ci0KLSAgICAvLyBDcmVhdGUgYSBu
ZXcgZG9jdW1lbnQgYmVmb3JlIGNsZWFyaW5nIHRoZSBmcmFtZSwgYmVjYXVzZSBpdCBtYXkgbmVl
ZCB0byBpbmhlcml0IGFuIGFsaWFzZWQgc2VjdXJpdHkgY29udGV4dC4KLSAgICBpZiAoIW1faXNE
aXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQgJiYgbV9jbGllbnQtPnNob3VsZFVzZVBsdWdp
bkRvY3VtZW50KG1fcmVzcG9uc2VNSU1FVHlwZSkpCi0gICAgICAgIGRvY3VtZW50ID0gUGx1Z2lu
RG9jdW1lbnQ6OmNyZWF0ZShtX2ZyYW1lKTsKLSAgICBlbHNlIGlmICghbV9jbGllbnQtPmhhc0hU
TUxWaWV3KCkpCi0gICAgICAgIGRvY3VtZW50ID0gUGxhY2Vob2xkZXJEb2N1bWVudDo6Y3JlYXRl
KG1fZnJhbWUpOwotICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQgPSBET01JbXBsZW1lbnRhdGlv
bjo6Y3JlYXRlRG9jdW1lbnQobV9yZXNwb25zZU1JTUVUeXBlLCBtX2ZyYW1lLCBtX2ZyYW1lLT5p
blZpZXdTb3VyY2VNb2RlKCkpOwotCi0gICAgYm9vbCByZXNldFNjcmlwdGluZyA9ICEobV9pc0Rp
c3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpLT5pc1NlY3VyZVRyYW5zaXRpb25Ubyh1cmwpKTsKLSAgICBjbGVhcihyZXNl
dFNjcmlwdGluZywgcmVzZXRTY3JpcHRpbmcpOwotICAgIGlmIChyZXNldFNjcmlwdGluZykKLSAg
ICAgICAgbV9mcmFtZS0+c2NyaXB0KCktPnVwZGF0ZVBsYXRmb3JtU2NyaXB0T2JqZWN0cygpOwot
Ci0gICAgbV9uZWVkc0NsZWFyID0gdHJ1ZTsKLSAgICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKLSAg
ICBtX2RpZENhbGxJbXBsaWNpdENsb3NlID0gZmFsc2U7Ci0gICAgbV9pc0xvYWRpbmdNYWluUmVz
b3VyY2UgPSB0cnVlOwotICAgIG1faXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQgPSBt
X2NyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQ7Ci0KICAgICBLVVJMIHJlZih1cmwpOwogICAg
IHJlZi5zZXRVc2VyKFN0cmluZygpKTsKICAgICByZWYuc2V0UGFzcyhTdHJpbmcoKSk7CiAgICAg
cmVmLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogICAgIG1fb3V0Z29pbmdSZWZlcnJlciA9
IHJlZi5zdHJpbmcoKTsKICAgICBtX1VSTCA9IHVybDsKK30KIAotICAgIGRvY3VtZW50LT5zZXRV
UkwobV9VUkwpOwotICAgIG1fZnJhbWUtPnNldERvY3VtZW50KGRvY3VtZW50KTsKLQordm9pZCBG
cmFtZUxvYWRlcjo6ZGlkQmVnaW5Eb2N1bWVudChib29sIGRpc3BhdGNoKQorewogICAgIGlmICht
X3BlbmRpbmdTdGF0ZU9iamVjdCkgewotICAgICAgICBkb2N1bWVudC0+c3RhdGVQb3BwZWQobV9w
ZW5kaW5nU3RhdGVPYmplY3QuZ2V0KCkpOworICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5z
dGF0ZVBvcHBlZChtX3BlbmRpbmdTdGF0ZU9iamVjdC5nZXQoKSk7CiAgICAgICAgIG1fcGVuZGlu
Z1N0YXRlT2JqZWN0LmNsZWFyKCk7CiAgICAgfQotICAgIAotICAgIGlmIChtX2RlY29kZXIpCi0g
ICAgICAgIGRvY3VtZW50LT5zZXREZWNvZGVyKG1fZGVjb2Rlci5nZXQoKSk7Ci0gICAgaWYgKGZv
cmNlZFNlY3VyaXR5T3JpZ2luKQotICAgICAgICBkb2N1bWVudC0+c2V0U2VjdXJpdHlPcmlnaW4o
Zm9yY2VkU2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwogCi0gICAgbV9mcmFtZS0+ZG9tV2luZG93KCkt
PnNldFVSTChkb2N1bWVudC0+dXJsKCkpOwotICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5zZXRT
ZWN1cml0eU9yaWdpbihkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgbV9uZWVkc0Ns
ZWFyID0gdHJ1ZTsKKyAgICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKKyAgICBtX2RpZENhbGxJbXBs
aWNpdENsb3NlID0gZmFsc2U7CisgICAgbV9pc0xvYWRpbmdNYWluUmVzb3VyY2UgPSB0cnVlOwor
ICAgIG1faXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQgPSBtX2NyZWF0aW5nSW5pdGlh
bEVtcHR5RG9jdW1lbnQ7CiAKICAgICBpZiAoZGlzcGF0Y2gpCiAgICAgICAgIGRpc3BhdGNoRGlk
Q2xlYXJXaW5kb3dPYmplY3RzSW5BbGxXb3JsZHMoKTsKLSAgICAKKwogICAgIHVwZGF0ZUZpcnN0
UGFydHlGb3JDb29raWVzKCk7CiAKLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+
c2V0dGluZ3MoKTsKLSAgICBkb2N1bWVudC0+ZG9jTG9hZGVyKCktPnNldEF1dG9Mb2FkSW1hZ2Vz
KHNldHRpbmdzICYmIHNldHRpbmdzLT5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7CisgICAg
U2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKKyAg
ICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+c2V0QXV0b0xvYWRJbWFnZXMoc2V0
dGluZ3MgJiYgc2V0dGluZ3MtPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpKTsKIAogICAgIGlm
IChtX2RvY3VtZW50TG9hZGVyKSB7CiAgICAgICAgIFN0cmluZyBkbnNQcmVmZXRjaENvbnRyb2wg
PSBtX2RvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZCgiWC1ETlMtUHJl
ZmV0Y2gtQ29udHJvbCIpOwogICAgICAgICBpZiAoIWRuc1ByZWZldGNoQ29udHJvbC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBkb2N1bWVudC0+cGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIo
ZG5zUHJlZmV0Y2hDb250cm9sKTsKKyAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnBh
cnNlRE5TUHJlZmV0Y2hDb250cm9sSGVhZGVyKGRuc1ByZWZldGNoQ29udHJvbCk7CiAgICAgfQog
CiAgICAgaGlzdG9yeSgpLT5yZXN0b3JlRG9jdW1lbnRTdGF0ZSgpOwotCi0gICAgZG9jdW1lbnQt
PmltcGxpY2l0T3BlbigpOwotICAgIAotICAgIGlmIChtX2ZyYW1lLT52aWV3KCkgJiYgbV9jbGll
bnQtPmhhc0hUTUxWaWV3KCkpCi0gICAgICAgIG1fZnJhbWUtPnZpZXcoKS0+c2V0Q29udGVudHNT
aXplKEludFNpemUoKSk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXI6OndyaXRlKGNvbnN0IGNoYXIq
IHN0ciwgaW50IGxlbiwgYm9vbCBmbHVzaCkKLXsKLSAgICBpZiAobGVuID09IDAgJiYgIWZsdXNo
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKGxlbiA9PSAtMSkKLSAgICAgICAgbGVu
ID0gc3RybGVuKHN0cik7Ci0KLSAgICBUb2tlbml6ZXIqIHRva2VuaXplciA9IG1fZnJhbWUtPmRv
Y3VtZW50KCktPnRva2VuaXplcigpOwotICAgIGlmICh0b2tlbml6ZXIgJiYgdG9rZW5pemVyLT53
YW50c1Jhd0RhdGEoKSkgewotICAgICAgICBpZiAobGVuID4gMCkKLSAgICAgICAgICAgIHRva2Vu
aXplci0+d3JpdGVSYXdEYXRhKHN0ciwgbGVuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICBpZiAoIW1fZGVjb2RlcikgewotICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdz
ID0gbV9mcmFtZS0+c2V0dGluZ3MoKSkgewotICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJl
c291cmNlRGVjb2Rlcjo6Y3JlYXRlKG1fcmVzcG9uc2VNSU1FVHlwZSwKLSAgICAgICAgICAgICAg
ICBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSwKLSAgICAgICAgICAgICAgICBz
ZXR0aW5ncy0+dXNlc0VuY29kaW5nRGV0ZWN0b3IoKSk7Ci0gICAgICAgICAgICBGcmFtZSogcGFy
ZW50RnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpOwotICAgICAgICAgICAgLy8gU2V0
IHRoZSBoaW50IGVuY29kaW5nIHRvIHRoZSBwYXJlbnQgZnJhbWUgZW5jb2Rpbmcgb25seSBpZgot
ICAgICAgICAgICAgLy8gdGhlIHBhcmVudCBhbmQgdGhlIGN1cnJlbnQgZnJhbWVzIHNoYXJlIHRo
ZSBzZWN1cml0eSBvcmlnaW4uCi0gICAgICAgICAgICAvLyBXZSBpbXBvc2UgdGhpcyBjb25kaXRp
b24gYmVjYXVzZSBzb21lYm9keSBjYW4gbWFrZSBhIGNoaWxkIGZyYW1lIAotICAgICAgICAgICAg
Ly8gY29udGFpbmluZyBhIGNhcmVmdWxseSBjcmFmdGVkIGh0bWwvamF2YXNjcmlwdCBpbiBvbmUg
ZW5jb2RpbmcKLSAgICAgICAgICAgIC8vIHRoYXQgY2FuIGJlIG1pc3Rha2VuIGZvciBoaW50RW5j
b2RpbmcgKG9yIHJlbGF0ZWQgZW5jb2RpbmcpIGJ5Ci0gICAgICAgICAgICAvLyBhbiBhdXRvIGRl
dGVjdG9yLiBXaGVuIGludGVycHJldGVkIGluIHRoZSBsYXR0ZXIsIGl0IGNvdWxkIGJlCi0gICAg
ICAgICAgICAvLyBhbiBhdHRhY2sgdmVjdG9yLgotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
bWlnaHQgYmUgdG9vIGNhdXRpb3VzIGZvciBub24tN2JpdC1lbmNvZGluZ3MgYW5kCi0gICAgICAg
ICAgICAvLyB3ZSBtYXkgY29uc2lkZXIgcmVsYXhpbmcgdGhpcyBsYXRlciBhZnRlciB0ZXN0aW5n
LgotICAgICAgICAgICAgaWYgKGNhblJlZmVyVG9QYXJlbnRGcmFtZUVuY29kaW5nKG1fZnJhbWUs
IHBhcmVudEZyYW1lKSkKLSAgICAgICAgICAgICAgICBtX2RlY29kZXItPnNldEhpbnRFbmNvZGlu
ZyhwYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUobV9yZXNw
b25zZU1JTUVUeXBlLCBTdHJpbmcoKSk7Ci0gICAgICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9IG1f
ZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7Ci0gICAgICAgIGlmIChtX2VuY29kaW5nLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgaWYgKGNhblJlZmVyVG9QYXJlbnRGcmFtZUVuY29kaW5nKG1fZnJh
bWUsIHBhcmVudEZyYW1lKSkKLSAgICAgICAgICAgICAgICBtX2RlY29kZXItPnNldEVuY29kaW5n
KHBhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCksIFRleHRSZXNvdXJjZURl
Y29kZXI6OkVuY29kaW5nRnJvbVBhcmVudEZyYW1lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcobV9lbmNvZGluZywKLSAgICAgICAgICAgICAg
ICBtX2VuY29kaW5nV2FzQ2hvc2VuQnlVc2VyID8gVGV4dFJlc291cmNlRGVjb2Rlcjo6VXNlckNo
b3NlbkVuY29kaW5nIDogVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRl
cik7Ci0gICAgICAgIH0KLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0RGVjb2Rlciht
X2RlY29kZXIuZ2V0KCkpOwotICAgIH0KLQotICAgIFN0cmluZyBkZWNvZGVkID0gbV9kZWNvZGVy
LT5kZWNvZGUoc3RyLCBsZW4pOwotICAgIGlmIChmbHVzaCkKLSAgICAgICAgZGVjb2RlZCArPSBt
X2RlY29kZXItPmZsdXNoKCk7Ci0gICAgaWYgKGRlY29kZWQuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIW1fcmVjZWl2ZWREYXRhKSB7Ci0gICAgICAgIG1fcmVjZWl2ZWRE
YXRhID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS51c2VzVmlzdWFs
T3JkZXJpbmcoKSkKLSAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnNldFZpc3VhbGx5
T3JkZXJlZCgpOwotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZWNhbGNTdHlsZShOb2Rl
OjpGb3JjZSk7Ci0gICAgfQotCi0gICAgaWYgKHRva2VuaXplcikgewotICAgICAgICBBU1NFUlQo
IXRva2VuaXplci0+d2FudHNSYXdEYXRhKCkpOwotICAgICAgICB0b2tlbml6ZXItPndyaXRlKGRl
Y29kZWQsIHRydWUpOwotICAgIH0KLX0KLQotdm9pZCBGcmFtZUxvYWRlcjo6d3JpdGUoY29uc3Qg
U3RyaW5nJiBzdHIpCi17Ci0gICAgaWYgKHN0ci5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFtX3JlY2VpdmVkRGF0YSkgewotICAgICAgICBtX3JlY2VpdmVkRGF0YSA9IHRy
dWU7Ci0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnNldFBhcnNlTW9kZShEb2N1bWVudDo6
U3RyaWN0KTsKLSAgICB9Ci0KLSAgICBpZiAoVG9rZW5pemVyKiB0b2tlbml6ZXIgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpLT50b2tlbml6ZXIoKSkKLSAgICAgICAgdG9rZW5pemVyLT53cml0ZShzdHIs
IHRydWUpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjplbmQoKQordm9pZCBGcmFtZUxvYWRlcjo6
ZGlkRW5kRG9jdW1lbnQoKQogewogICAgIG1faXNMb2FkaW5nTWFpblJlc291cmNlID0gZmFsc2U7
Ci0gICAgZW5kSWZOb3RMb2FkaW5nTWFpblJlc291cmNlKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2Fk
ZXI6OmVuZElmTm90TG9hZGluZ01haW5SZXNvdXJjZSgpCi17Ci0gICAgaWYgKG1faXNMb2FkaW5n
TWFpblJlc291cmNlIHx8ICFtX2ZyYW1lLT5wYWdlKCkgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwODU0Ci0gICAgLy8gVGhlIGZyYW1lJ3MgbGFzdCByZWYgbWF5IGJlIHJlbW92
ZWQgYW5kIGl0IGNhbiBiZSBkZWxldGVkIGJ5IGNoZWNrQ29tcGxldGVkKCksIAotICAgIC8vIHNv
IHdlJ2xsIGFkZCBhIHByb3RlY3RpdmUgcmVmY291bnQKLSAgICBSZWZQdHI8RnJhbWU+IHByb3Rl
Y3RvcihtX2ZyYW1lKTsKLQotICAgIC8vIG1ha2Ugc3VyZSBub3RoaW5nJ3MgbGVmdCBpbiB0aGVy
ZQotICAgIHdyaXRlKDAsIDAsIHRydWUpOwotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmZpbmlz
aFBhcnNpbmcoKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6aWNvbkxvYWREZWNpc2lvbkF2YWls
YWJsZSgpCkBAIC0xMjU2LDE2ICsxMDk2LDYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZEFyY2hp
dmUoUGFzc1JlZlB0cjxBcmNoaXZlPiBwcnBBcmNoaXZlKQogICAgIGxvYWQoZG9jdW1lbnRMb2Fk
ZXIuZ2V0KCkpOwogfQogCi1TdHJpbmcgRnJhbWVMb2FkZXI6OmVuY29kaW5nKCkgY29uc3QKLXsK
LSAgICBpZiAobV9lbmNvZGluZ1dhc0Nob3NlbkJ5VXNlciAmJiAhbV9lbmNvZGluZy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBtX2VuY29kaW5nOwotICAgIGlmIChtX2RlY29kZXIgJiYgbV9k
ZWNvZGVyLT5lbmNvZGluZygpLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIG1fZGVjb2Rlci0+
ZW5jb2RpbmcoKS5uYW1lKCk7Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0
dGluZ3MoKTsKLSAgICByZXR1cm4gc2V0dGluZ3MgPyBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNv
ZGluZ05hbWUoKSA6IFN0cmluZygpOwotfQotCiBib29sIEZyYW1lTG9hZGVyOjpyZXF1ZXN0T2Jq
ZWN0KFJlbmRlckVtYmVkZGVkT2JqZWN0KiByZW5kZXJlciwgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lLAogICAgIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1WYWx1ZXMpCiB7CkBAIC0xNTI5LDEyICsxMzU5LDEwIEBAIHZvaWQgRnJhbWVMb2FkZXI6
OnJlc2V0TXVsdGlwbGVGb3JtU3VibWlzc2lvblByb3RlY3Rpb24oKQogICAgIG1fc3VibWl0dGVk
Rm9ybVVSTCA9IEtVUkwoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6c2V0RW5jb2RpbmcoY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sIHVzZXJDaG9zZW4pCit2b2lkIEZyYW1lTG9hZGVyOjp3aWxs
U2V0RW5jb2RpbmcoKQogewogICAgIGlmICghbV93b3JraW5nVVJMLmlzRW1wdHkoKSkKICAgICAg
ICAgcmVjZWl2ZWRGaXJzdERhdGEoKTsKLSAgICBtX2VuY29kaW5nID0gbmFtZTsKLSAgICBtX2Vu
Y29kaW5nV2FzQ2hvc2VuQnlVc2VyID0gdXNlckNob3NlbjsKIH0KIAogdm9pZCBGcmFtZUxvYWRl
cjo6YWRkRGF0YShjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKQEAgLTE1NDIsNyArMTM3
MCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmFkZERhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBs
ZW5ndGgpCiAgICAgQVNTRVJUKG1fd29ya2luZ1VSTC5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCht
X2ZyYW1lLT5kb2N1bWVudCgpKTsKICAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQoKS0+cGFy
c2luZygpKTsKLSAgICB3cml0ZShieXRlcywgbGVuZ3RoKTsKKyAgICB3cml0ZXIoKS0+YWRkRGF0
YShieXRlcywgbGVuZ3RoKTsKIH0KIAogI2lmIEVOQUJMRShXTUwpCkBAIC0yNjU0LDcgKzI0ODIs
NyBAQCB2b2lkIEZyYW1lTG9hZGVyOjp0cmFuc2l0aW9uVG9Db21taXR0ZWQoUGFzc1JlZlB0cjxD
YWNoZWRQYWdlPiBjYWNoZWRQYWdlKQogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQogCi0gICAgbV9yZXNwb25zZU1JTUVUeXBlID0gZGwtPnJlc3BvbnNlTUlNRVR5cGUo
KTsKKyAgICB3cml0ZXIoKS0+c2V0TUlNRVR5cGUoZGwtPnJlc3BvbnNlTUlNRVR5cGUoKSk7CiAK
ICAgICAvLyBUZWxsIHRoZSBjbGllbnQgd2UndmUgY29tbWl0dGVkIHRoaXMgVVJMLgogICAgIEFT
U0VSVChtX2ZyYW1lLT52aWV3KCkpOwpAQCAtMjc3MSw4ICsyNTk5LDggQEAgdm9pZCBGcmFtZUxv
YWRlcjo6b3BlbihDYWNoZWRGcmFtZUJhc2UmIGNhY2hlZEZyYW1lKQogICAgIG1fVVJMID0gdXJs
OwogICAgIG1fd29ya2luZ1VSTCA9IHVybDsKIAotICAgIHN0YXJ0ZWQoKTsKLSAgICBjbGVhcih0
cnVlLCB0cnVlLCBjYWNoZWRGcmFtZS5pc01haW5GcmFtZSgpKTsKKyAgICBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+c3RhcnRlZCgpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGVhcih0cnVlLCB0cnVl
LCBjYWNoZWRGcmFtZS5pc01haW5GcmFtZSgpKTsKIAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGNhY2hlZEZyYW1lLmRvY3VtZW50KCk7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsKQEAgLTI3OTks
NyArMjYyNywxMSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpvcGVuKENhY2hlZEZyYW1lQmFzZSYgY2Fj
aGVkRnJhbWUpCiAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPnNldFVSTChkb2N1bWVudC0+dXJs
KCkpOwogICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5zZXRTZWN1cml0eU9yaWdpbihkb2N1bWVu
dC0+c2VjdXJpdHlPcmlnaW4oKSk7CiAKLSAgICBtX2RlY29kZXIgPSBkb2N1bWVudC0+ZGVjb2Rl
cigpOworICAgIC8vIEZJWE1FOiBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgdXMgdG8gcmVzdG9yZSB0
aGUgdmFsdWUgb2YKKyAgICAvLyBEb2N1bWVudFdyaXRlcjo6bV9lbmNvZGluZyBoZXJlLCBidXQg
d2UgZG9uJ3Qgc2VlbSB0by4gSSB3b25kZXIgaWYKKyAgICAvLyB0aGF0J3MgYSBidWcuICBPbmUg
d2F5IHRvIHRlc3QgaXMgdG8gbG9vayBhdCB0aGUgZmFsbGJhY2sgYXJyYXkgb2YKKyAgICAvLyBl
bmNvZGluZ3MgZm9yIGRlY29kaW5nIGNvbnRlbnQgZGlzcG9zaXRpb24uCisgICAgd3JpdGVyKCkt
PnNldERlY29kZXIoZG9jdW1lbnQtPmRlY29kZXIoKSk7CiAKICAgICB1cGRhdGVGaXJzdFBhcnR5
Rm9yQ29va2llcygpOwogCkBAIC0yODkxLDE0ICsyNzIzLDE0IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OmZpbmlzaGVkTG9hZGluZ0RvY3VtZW50KERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgQXJj
aGl2ZVJlc291cmNlKiBtYWluUmVzb3VyY2UgPSBhcmNoaXZlLT5tYWluUmVzb3VyY2UoKTsKICAg
ICBsb2FkZXItPnNldFBhcnNlZEFyY2hpdmVEYXRhKG1haW5SZXNvdXJjZS0+ZGF0YSgpKTsKIAot
ICAgIG1fcmVzcG9uc2VNSU1FVHlwZSA9IG1haW5SZXNvdXJjZS0+bWltZVR5cGUoKTsKKyAgICB3
cml0ZXIoKS0+c2V0TUlNRVR5cGUobWFpblJlc291cmNlLT5taW1lVHlwZSgpKTsKIAogICAgIGNs
b3NlVVJMKCk7CiAgICAgZGlkT3BlblVSTChtYWluUmVzb3VyY2UtPnVybCgpKTsKIAogICAgIFN0
cmluZyB1c2VyQ2hvc2VuRW5jb2RpbmcgPSBkb2N1bWVudExvYWRlcigpLT5vdmVycmlkZUVuY29k
aW5nKCk7CiAgICAgYm9vbCBlbmNvZGluZ0lzVXNlckNob3NlbiA9ICF1c2VyQ2hvc2VuRW5jb2Rp
bmcuaXNOdWxsKCk7Ci0gICAgc2V0RW5jb2RpbmcoZW5jb2RpbmdJc1VzZXJDaG9zZW4gPyB1c2Vy
Q2hvc2VuRW5jb2RpbmcgOiBtYWluUmVzb3VyY2UtPnRleHRFbmNvZGluZygpLCBlbmNvZGluZ0lz
VXNlckNob3Nlbik7CisgICAgd3JpdGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5nSXNVc2VyQ2hv
c2VuID8gdXNlckNob3NlbkVuY29kaW5nIDogbWFpblJlc291cmNlLT50ZXh0RW5jb2RpbmcoKSwg
ZW5jb2RpbmdJc1VzZXJDaG9zZW4pOwogCiAgICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkp
OwogCkBAIC0zMzA1LDggKzMxMzcsMTIgQEAgdm9pZCBGcmFtZUxvYWRlcjo6YWRkRXh0cmFGaWVs
ZHNUb1JlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBGcmFtZUxvYWRUeXAKIAogICAg
IC8vIEFsd2F5cyB0cnkgVVRGLTguIElmIHRoYXQgZmFpbHMsIHRyeSBmcmFtZSBlbmNvZGluZyAo
aWYgYW55KSBhbmQgdGhlbiB0aGUgZGVmYXVsdC4KICAgICAvLyBGb3IgYSBuZXdseSBvcGVuZWQg
ZnJhbWUgd2l0aCBhbiBlbXB0eSBVUkwsIGVuY29kaW5nKCkgc2hvdWxkIG5vdCBiZSB1c2VkLCBi
ZWNhdXNlIHRoaXMgbWV0aG9kcyBhc2tzIGRlY29kZXIsIHdoaWNoIHVzZXMgSVNPLTg4NTktMS4K
LSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwotICAgIHJlcXVl
c3Quc2V0UmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkoIlVU
Ri04IiwgbV9VUkwuaXNFbXB0eSgpID8gbV9lbmNvZGluZyA6IGVuY29kaW5nKCksIHNldHRpbmdz
ID8gc2V0dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCkgOiBTdHJpbmcoKSk7CisgICAg
U3RyaW5nIGVuY29kaW5nMSA9ICJVVEYtOCI7CisgICAgU3RyaW5nIGVuY29kaW5nMiA9IHdyaXRl
cigpLT5kZXByaWNhdGVkRnJhbWVFbmNvZGluZygpOworICAgIFN0cmluZyBlbmNvZGluZzM7Cisg
ICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCkpCisgICAgICAg
IGVuY29kaW5nMyA9IHNldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpOworICAgIHJl
cXVlc3Quc2V0UmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXko
ZW5jb2RpbmcxLCBlbmNvZGluZzIsIGVuY29kaW5nMyk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6
OmFkZEhUVFBPcmlnaW5JZk5lZWRlZChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0cmluZyBv
cmlnaW4pCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oIGIvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAppbmRleCBlMjE4NzQ0Li5jYjIzYTg4IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgRnJhbWVMb2FkZXJfaAogCiAjaW5j
bHVkZSAiQ2FjaGVQb2xpY3kuaCIKKyNpbmNsdWRlICJEb2N1bWVudFdyaXRlci5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJIaXN0b3J5Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlBvbGljeUNhbGxiYWNrLmgiCkBAIC05OSw2ICsxMDAsNyBAQCBwdWJsaWM6CiAg
ICAgUG9saWN5Q2hlY2tlciogcG9saWN5Q2hlY2tlcigpIGNvbnN0IHsgcmV0dXJuICZtX3BvbGlj
eUNoZWNrZXI7IH0KICAgICBIaXN0b3J5Q29udHJvbGxlciogaGlzdG9yeSgpIGNvbnN0IHsgcmV0
dXJuICZtX2hpc3Rvcnk7IH0KICAgICBSZXNvdXJjZUxvYWROb3RpZmllciogbm90aWZpZXIoKSBj
b25zdCB7IHJldHVybiAmbV9ub3RpZmVyOyB9CisgICAgRG9jdW1lbnRXcml0ZXIqIHdyaXRlcigp
IGNvbnN0IHsgcmV0dXJuICZtX3dyaXRlcjsgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgbm90
IGNvb2wsIHBlb3BsZS4gVGhlcmUgYXJlIHRvbyBtYW55IGRpZmZlcmVudCBmdW5jdGlvbnMgdGhh
dCBhbGwgc3RhcnQgbG9hZHMuCiAgICAgLy8gV2Ugc2hvdWxkIGFpbSB0byBjb25zb2xpZGF0ZSB0
aGVzZSBpbnRvIGEgc21hbGxlciBzZXQgb2YgZnVuY3Rpb25zLCBhbmQgdHJ5IHRvIHJldXNlIG1v
cmUgb2YKQEAgLTIyNiwyNCArMjI4LDE2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkRXhwbGlj
aXRPcGVuKCk7CiAKKyAgICAvLyBDYWxsYmFja3MgZnJvbSBEb2N1bWVudFdyaXRlcgorICAgIHZv
aWQgZGlkQmVnaW5Eb2N1bWVudChib29sIGRpc3BhdGNoV2luZG93T2JqZWN0QXZhaWxhYmxlKTsK
KyAgICB2b2lkIGRpZEVuZERvY3VtZW50KCk7CisgICAgdm9pZCB3aWxsU2V0RW5jb2RpbmcoKTsK
KwogICAgIEtVUkwgaWNvblVSTCgpOwogICAgIHZvaWQgY29tbWl0SWNvblVSTFRvSWNvbkRhdGFi
YXNlKGNvbnN0IEtVUkwmKTsKIAogICAgIEtVUkwgYmFzZVVSTCgpIGNvbnN0OwogCi0gICAgdm9p
ZCByZXBsYWNlRG9jdW1lbnQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICB2b2lkIGJlZ2luKCk7Ci0g
ICAgdm9pZCBiZWdpbihjb25zdCBLVVJMJiwgYm9vbCBkaXNwYXRjaFdpbmRvd09iamVjdEF2YWls
YWJsZSA9IHRydWUsIFNlY3VyaXR5T3JpZ2luKiBmb3JjZWRTZWN1cml0eU9yaWdpbiA9IDApOwot
Ci0gICAgdm9pZCB3cml0ZShjb25zdCBjaGFyKiBzdHJpbmcsIGludCBsZW5ndGggPSAtMSwgYm9v
bCBmbHVzaCA9IGZhbHNlKTsKLSAgICB2b2lkIHdyaXRlKGNvbnN0IFN0cmluZyYpOwotICAgIHZv
aWQgZW5kKCk7Ci0gICAgdm9pZCBlbmRJZk5vdExvYWRpbmdNYWluUmVzb3VyY2UoKTsKLQotICAg
IHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBlbmNvZGluZywgYm9vbCB1c2VyQ2hvc2Vu
KTsKLSAgICBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdDsKLQogICAgIHZvaWQgdG9rZW5pemVyUHJv
Y2Vzc2VkRGF0YSgpOwogCiAgICAgdm9pZCBoYW5kbGVkT25sb2FkRXZlbnRzKCk7CkBAIC0yODAs
OCArMjc0LDggQEAgcHVibGljOgogCiAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1
cm4gbV9VUkw7IH0KIAotICAgIHZvaWQgc2V0UmVzcG9uc2VNSU1FVHlwZShjb25zdCBTdHJpbmcm
KTsKLSAgICBjb25zdCBTdHJpbmcmIHJlc3BvbnNlTUlNRVR5cGUoKSBjb25zdDsKKyAgICAvLyBz
ZXRVUkwgaXMgYSBsb3ctbGV2ZWwgc2V0dGVyIGFuZCBkb2VzIG5vdCB0cmlnZ2VyIGxvYWRpbmcu
CisgICAgdm9pZCBzZXRVUkwoY29uc3QgS1VSTCYpOwogCiAgICAgYm9vbCBhbGxvd1BsdWdpbnMo
UmVhc29uRm9yQ2FsbGluZ0FsbG93UGx1Z2lucyk7CiAgICAgYm9vbCBjb250YWluc1BsdWdpbnMo
KSBjb25zdDsKQEAgLTMwMCw2ICsyOTQsNyBAQCBwdWJsaWM6CiAgICAgS1VSTCBjb21wbGV0ZVVS
TChjb25zdCBTdHJpbmcmIHVybCk7CiAKICAgICB2b2lkIGNhbmNlbEFuZENsZWFyKCk7CisgICAg
dm9pZCBjbGVhcihib29sIGNsZWFyV2luZG93UHJvcGVydGllcyA9IHRydWUsIGJvb2wgY2xlYXJT
Y3JpcHRPYmplY3RzID0gdHJ1ZSwgYm9vbCBjbGVhckZyYW1lVmlldyA9IHRydWUpOwogCiAgICAg
dm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmKTsKIApAQCAtMzQ0LDYgKzMzOSw4IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBPYmplY3RDb250ZW50VHlwZSBkZWZhdWx0T2JqZWN0Q29udGVudFR5
cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKIAorICAgIGJvb2wg
aXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzRGlz
cGxheWluZ0luaXRpYWxFbXB0eURvY3VtZW50OyB9CisKIHByaXZhdGU6CiAgICAgYm9vbCBjYW5D
YWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKCk7CiAjaWZuZGVmIE5ERUJVRwpAQCAtNDA4LDgg
KzQwNSw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUhpc3RvcnlBZnRlckNsaWVudFJl
ZGlyZWN0KCk7CiAKLSAgICB2b2lkIGNsZWFyKGJvb2wgY2xlYXJXaW5kb3dQcm9wZXJ0aWVzID0g
dHJ1ZSwgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMgPSB0cnVlLCBib29sIGNsZWFyRnJhbWVWaWV3
ID0gdHJ1ZSk7Ci0KICAgICBib29sIHNob3VsZFJlbG9hZFRvSGFuZGxlVW5yZWFjaGFibGVVUkwo
RG9jdW1lbnRMb2FkZXIqKTsKIAogICAgIHZvaWQgZGlzcGF0Y2hEaWRDb21taXRMb2FkKCk7CkBA
IC00NjIsNiArNDU3LDcgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFBvbGljeUNoZWNrZXIgbV9w
b2xpY3lDaGVja2VyOwogICAgIG11dGFibGUgSGlzdG9yeUNvbnRyb2xsZXIgbV9oaXN0b3J5Owog
ICAgIG11dGFibGUgUmVzb3VyY2VMb2FkTm90aWZpZXIgbV9ub3RpZmVyOworICAgIG11dGFibGUg
RG9jdW1lbnRXcml0ZXIgbV93cml0ZXI7CiAKICAgICBGcmFtZVN0YXRlIG1fc3RhdGU7CiAgICAg
RnJhbWVMb2FkVHlwZSBtX2xvYWRUeXBlOwpAQCAtNDg1LDggKzQ4MSw2IEBAIHByaXZhdGU6CiAK
ICAgICBib29sIG1faXNFeGVjdXRpbmdKYXZhU2NyaXB0Rm9ybUFjdGlvbjsKIAotICAgIFN0cmlu
ZyBtX3Jlc3BvbnNlTUlNRVR5cGU7Ci0KICAgICBib29sIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2U7
CiAgICAgYm9vbCBtX3dhc1VubG9hZEV2ZW50RW1pdHRlZDsKICAgICBib29sIG1fdW5sb2FkRXZl
bnRCZWluZ0Rpc3BhdGNoZWQ7CkBAIC01MDQsMTEgKzQ5OCw2IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2NhbmNlbGxpbmdXaXRoTG9hZEluUHJvZ3Jlc3M7CiAKICAgICBib29sIG1fbmVlZHNDbGVh
cjsKLSAgICBib29sIG1fcmVjZWl2ZWREYXRhOwotCi0gICAgYm9vbCBtX2VuY29kaW5nV2FzQ2hv
c2VuQnlVc2VyOwotICAgIFN0cmluZyBtX2VuY29kaW5nOwotICAgIFJlZlB0cjxUZXh0UmVzb3Vy
Y2VEZWNvZGVyPiBtX2RlY29kZXI7CiAKICAgICBib29sIG1fY29udGFpbnNQbHVnSW5zOwogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcCBiL1dlYkNvcmUvbG9h
ZGVyL01lZGlhRG9jdW1lbnQuY3BwCmluZGV4IGEyZDYyNzYuLjI3MzYxZmMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvbG9hZGVyL01lZGlhRG9jdW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL01l
ZGlhRG9jdW1lbnQuY3BwCkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBNZWRpYURvY3VtZW50Ojpy
ZXBsYWNlTWVkaWFFbGVtZW50VGltZXJGaXJlZChUaW1lcjxNZWRpYURvY3VtZW50PiopCiAgICAg
ICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsICIxMDAlIik7CiAgICAg
ICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKG5hbWVBdHRyLCAicGx1Z2luIik7CiAgICAg
ICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHNyY0F0dHIsIHVybCgpLnN0cmluZygpKTsK
LSAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsIGZyYW1lKCktPmxv
YWRlcigpLT5yZXNwb25zZU1JTUVUeXBlKCkpOworICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0
dHJpYnV0ZSh0eXBlQXR0ciwgZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5taW1lVHlwZSgp
KTsKIAogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAgICB2aWRlb0VsZW1lbnQtPnBh
cmVudCgpLT5yZXBsYWNlQ2hpbGQoZW1iZWRFbGVtZW50LCB2aWRlb0VsZW1lbnQsIGVjKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcCBiL1dlYkNvcmUvbG9h
ZGVyL1BsdWdpbkRvY3VtZW50LmNwcAppbmRleCAxZDJjMmI3Li43MDI0MzMzIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIv
UGx1Z2luRG9jdW1lbnQuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBQbHVnaW5Ub2tlbml6
ZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCkKICAgICAKICAgICBtX2VtYmVkRWxlbWVudC0+
c2V0QXR0cmlidXRlKG5hbWVBdHRyLCAicGx1Z2luIik7CiAgICAgbV9lbWJlZEVsZW1lbnQtPnNl
dEF0dHJpYnV0ZShzcmNBdHRyLCBtX2RvYy0+dXJsKCkuc3RyaW5nKCkpOwotICAgIG1fZW1iZWRF
bGVtZW50LT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsIG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+
cmVzcG9uc2VNSU1FVHlwZSgpKTsKKyAgICBtX2VtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHR5
cGVBdHRyLCBtX2RvYy0+ZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5taW1lVHlwZSgpKTsK
ICAgICAKICAgICBib2R5LT5hcHBlbmRDaGlsZChlbWJlZEVsZW1lbnQsIGVjKTsgICAgCiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCmluZGV4IGNmODkw
YTEuLjQzNmRjOGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YUJ1aWxkZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxk
ZXIuY3BwCkBAIC04Nyw3ICs4Nyw3IEBAIFRleHRFbmNvZGluZyBGb3JtRGF0YUJ1aWxkZXI6OmRh
dGFFbmNvZGluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0CiAgICAgfQogCiAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gZnJhbWUtPmxv
YWRlcigpLT5lbmNvZGluZygpOworICAgICAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT53cml0
ZXIoKS0+ZW5jb2RpbmcoKTsKIAogICAgIHJldHVybiBMYXRpbjFFbmNvZGluZygpOwogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4IDM2NjU5MjQuLjhhNTM2YTQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAorKysgYi9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZS5jcHAKQEAgLTI1OCwxMCArMjU4LDEwIEBAIGJvb2wgU1ZHSW1hZ2U6OmRh
dGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgICAgICBsb2FkZXItPmxvYWQoZmFr
ZVJlcXVlc3QsIGZhbHNlKTsgLy8gTWFrZSBzdXJlIHRoZSBEb2N1bWVudExvYWRlciBpcyBjcmVh
dGVkCiAgICAgICAgIGxvYWRlci0+cG9saWN5Q2hlY2tlcigpLT5jYW5jZWxDaGVjaygpOyAvLyBj
YW5jZWwgYW55IHBvbGljeSBjaGVja3MKICAgICAgICAgbG9hZGVyLT5jb21taXRQcm92aXNpb25h
bExvYWQoMCk7Ci0gICAgICAgIGxvYWRlci0+c2V0UmVzcG9uc2VNSU1FVHlwZSgiaW1hZ2Uvc3Zn
K3htbCIpOwotICAgICAgICBsb2FkZXItPmJlZ2luKEtVUkwoKSk7IC8vIGNyZWF0ZSB0aGUgZW1w
dHkgZG9jdW1lbnQKLSAgICAgICAgbG9hZGVyLT53cml0ZShkYXRhKCktPmRhdGEoKSwgZGF0YSgp
LT5zaXplKCkpOwotICAgICAgICBsb2FkZXItPmVuZCgpOworICAgICAgICBsb2FkZXItPndyaXRl
cigpLT5zZXRNSU1FVHlwZSgiaW1hZ2Uvc3ZnK3htbCIpOworICAgICAgICBsb2FkZXItPndyaXRl
cigpLT5iZWdpbihLVVJMKCkpOyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRvY3VtZW50CisgICAgICAg
IGxvYWRlci0+d3JpdGVyKCktPmFkZERhdGEoZGF0YSgpLT5kYXRhKCksIGRhdGEoKS0+c2l6ZSgp
KTsKKyAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+ZW5kKCk7CiAgICAgICAgIGZyYW1lLT52aWV3
KCktPnNldFRyYW5zcGFyZW50KHRydWUpOyAvLyBTVkcgSW1hZ2VzIGFyZSB0cmFuc3BhcmVudC4K
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGUzODdmNzIuLjQ3MmUyZmQgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI3IEBACisyMDEwLTA0LTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFj
dG9yIERvY3VtZW50V3JpdGVyIG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxNzUKKworICAgICAgICBVcGRhdGUgdGhl
c2UgY2FsbHNpdGVzIGJlY2F1c2UgdGhlIG1ldGhvZCBtb3ZlZCB0byBEb2N1bWVudFdyaXRlci4K
KworICAgICAgICAqIHNyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDb250ZXh0TWVudUNsaWVudEltcGw6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1z
KToKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpmaW5pc2hlZExvYWRpbmcpOgorICAgICAgICAq
IHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmVu
Y29kaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjb21taXREb2N1bWVudERh
dGEpOgorICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6OnByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZU9w
ZW5UYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6OnNlcmlhbGl6
ZSk6CisgICAgICAgICogc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHZXRGb3JtRW5jb2RpbmcpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWdlRW5jb2RpbmcpOgorCiAyMDEwLTA0
LTA3ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRl
eHRNZW51Q2xpZW50SW1wbC5jcHAKaW5kZXggNzA4ZDExMy4uYmVlNDMxMCAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcApAQCAtMTkyLDcgKzE5Miw3
IEBAIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51Q2xpZW50SW1wbDo6Z2V0Q3Vz
dG9tTWVudUZyb21EZWZhdWx0SXRlbXMoCiAKICAgICAvLyBJZiBpdCdzIG5vdCBhIGxpbmssIGFu
IGltYWdlLCBhIG1lZGlhIGVsZW1lbnQsIG9yIGFuIGltYWdlL21lZGlhIGxpbmssCiAgICAgLy8g
c2hvdyBhIHNlbGVjdGlvbiBtZW51IG9yIGEgbW9yZSBnZW5lcmljIHBhZ2UgbWVudS4KLSAgICBk
YXRhLmZyYW1lRW5jb2RpbmcgPSBzZWxlY3RlZEZyYW1lLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsK
KyAgICBkYXRhLmZyYW1lRW5jb2RpbmcgPSBzZWxlY3RlZEZyYW1lLT5sb2FkZXIoKS0+d3JpdGVy
KCktPmVuY29kaW5nKCk7CiAKICAgICAvLyBTZW5kIHRoZSBmcmFtZSBhbmQgcGFnZSBVUkxzIGlu
IGFueSBjYXNlLgogICAgIGRhdGEucGFnZVVSTCA9IHVybEZyb21GcmFtZShtX3dlYlZpZXctPm1h
aW5GcmFtZUltcGwoKS0+ZnJhbWUoKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9h
ZGVyQ2xpZW50SW1wbC5jcHAKaW5kZXggY2VjZmJiMy4uMTM1MzkyYiAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcApAQCAtMTA2Niw3ICsxMDY2LDcg
QEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExv
YWRlciogZGwpCiAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIG9ubHkgd2FudCB0byBkbyB0aGlzIGlm
IG1ha2VSZXByZXNlbnRhdGlvbiBoYXMgYmVlbiBjYWxsZWQsIHRvCiAgICAgICAgIC8vIG1hdGNo
IHRoZSBiZWhhdmlvciBvbiB0aGUgTWFjLgogICAgICAgICBpZiAobV9oYXNSZXByZXNlbnRhdGlv
bikKLSAgICAgICAgICAgIGRsLT5mcmFtZUxvYWRlcigpLT5zZXRFbmNvZGluZygiIiwgZmFsc2Up
OworICAgICAgICAgICAgZGwtPmZyYW1lTG9hZGVyKCktPndyaXRlcigpLT5zZXRFbmNvZGluZygi
IiwgZmFsc2UpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGcmFtZUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCmlu
ZGV4IDlhMjViNDcuLmM4MTc0OTYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAK
QEAgLTUxNyw3ICs1MTcsNyBAQCBXZWJVUkwgV2ViRnJhbWVJbXBsOjpvcGVuU2VhcmNoRGVzY3Jp
cHRpb25VUkwoKSBjb25zdAogCiBXZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjplbmNvZGluZygpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygpOworICAgIHJl
dHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CiB9CiAKIFdlYlNp
emUgV2ViRnJhbWVJbXBsOjpzY3JvbGxPZmZzZXQoKSBjb25zdApAQCAtMTAxMSw3ICsxMDExLDcg
QEAgdm9pZCBXZWJGcmFtZUltcGw6OmNvbW1pdERvY3VtZW50RGF0YShjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3QgZGF0YUxlbikKICAgICAgICAgdXNlckNob3NlbiA9IGZhbHNlOwogICAgICAgICBl
bmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsK
ICAgICB9Ci0gICAgbV9mcmFtZS0+bG9hZGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2Vy
Q2hvc2VuKTsKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPnNldEVuY29kaW5nKGVu
Y29kaW5nLCB1c2VyQ2hvc2VuKTsKIAogICAgIC8vIE5PVEU6IG1hYyBvbmx5IGRvZXMgdGhpcyBp
ZiB0aGVyZSBpcyBhIGRvY3VtZW50CiAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmFkZERhdGEoZGF0
YSwgZGF0YUxlbik7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJp
YWxpemVySW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1w
bC5jcHAKaW5kZXggZDViMmI3Zi4uZTgyYjVjMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcApAQCAtMTcwLDcgKzE3MCw3IEBAIFN0cmluZyBXZWJQ
YWdlU2VyaWFsaXplckltcGw6OnByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZU9wZW5UYWcoCiAgICAg
ICAgICAgICAvLyBHZXQgZW5jb2RpbmcgaW5mby4KICAgICAgICAgICAgIFN0cmluZyB4bWxFbmNv
ZGluZyA9IHBhcmFtLT5kb2MtPnhtbEVuY29kaW5nKCk7CiAgICAgICAgICAgICBpZiAoeG1sRW5j
b2RpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHhtbEVuY29kaW5nID0gcGFyYW0tPmRv
Yy0+ZnJhbWUoKS0+bG9hZGVyKCktPmVuY29kaW5nKCk7CisgICAgICAgICAgICAgICAgeG1sRW5j
b2RpbmcgPSBwYXJhbS0+ZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5n
KCk7CiAgICAgICAgICAgICBpZiAoeG1sRW5jb2RpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgIHhtbEVuY29kaW5nID0gVVRGOEVuY29kaW5nKCkubmFtZSgpOwogICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgiPD94bWwgdmVyc2lvbj1cIiIpOwpAQCAtNTE0LDcgKzUxNCw3IEBAIGJvb2wg
V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzZXJpYWxpemUoKQogICAgICAgICAgICAgLy8gQSBuZXcg
ZG9jdW1lbnQsIHdlIHdpbGwgc2VyaWFsaXplIGl0LgogICAgICAgICAgICAgZGlkU2VyaWFsaXph
dGlvbiA9IHRydWU7CiAgICAgICAgICAgICAvLyBHZXQgdGFyZ2V0IGVuY29kaW5nIGZvciBjdXJy
ZW50IGRvY3VtZW50LgotICAgICAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gY3VycmVudEZyYW1l
LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgIFN0cmluZyBlbmNv
ZGluZyA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGlu
ZygpOwogICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSB0ZXh0IGVuY29kaW5nIG9iamVjdCB3aXRo
IHRhcmdldCBlbmNvZGluZy4KICAgICAgICAgICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rpbmco
ZW5jb2RpbmcpOwogICAgICAgICAgICAgLy8gQ29uc3RydWN0IHNlcmlhbGl6ZSBwYXJhbWV0ZXIg
Zm9yIGxhdGUgcHJvY2Vzc2luZyBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2VhcmNoYWJsZUZvcm1EYXRhLmNwcAppbmRleCBlZGRhZmZlLi44ZWVmNmNjIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCkBAIC02Miw3ICs2Miw3
IEBAIHZvaWQgR2V0Rm9ybUVuY29kaW5nKGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwgVGV4
dEVuY29kaW5nKiBlbmNvZGluZykKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY29u
c3QgRnJhbWUqIGZyYW1lID0gZm9ybS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICAqZW5jb2Rp
bmcgPSBmcmFtZSA/IFRleHRFbmNvZGluZyhmcmFtZS0+bG9hZGVyKCktPmVuY29kaW5nKCkpIDog
TGF0aW4xRW5jb2RpbmcoKTsKKyAgICAqZW5jb2RpbmcgPSBmcmFtZSA/IFRleHRFbmNvZGluZyhm
cmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpKSA6IExhdGluMUVuY29kaW5nKCk7
CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3VibWl0IHJlcXVlc3QgcmVzdWx0cyBpbiBh
biBIVFRQIFVSTC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNjNlMWU1Zi4u
MTk4YTgxZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTEyODIsNyArMTI4
Miw3IEBAIFdlYlN0cmluZyBXZWJWaWV3SW1wbDo6cGFnZUVuY29kaW5nKCkgY29uc3QKICAgICBp
ZiAoIW1fcGFnZS5nZXQoKSkKICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwogCi0gICAgcmV0
dXJuIG1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygpOworICAgIHJldHVy
biBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CiB9
CiAKIHZvaWQgV2ViVmlld0ltcGw6OnNldFBhZ2VFbmNvZGluZyhjb25zdCBXZWJTdHJpbmcmIGVu
Y29kaW5nTmFtZSkKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cKaW5kZXggMzNhZTVmYS4uMzg5OGQ3ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAor
MjAxMC0wNC0wOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZhY3RvciBEb2N1bWVudFdyaXRl
ciBvdXQgb2YgRnJhbWVMb2FkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM3MTc1CisKKyAgICAgICAgVXBkYXRlIHRoZXNlIGNhbGxzaXRlcyBiZWNh
dXNlIHRoZSBtZXRob2QgbW92ZWQgdG8gRG9jdW1lbnRXcml0ZXIuCisKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZy
YW1lTG9hZGVyQ2xpZW50Ojpjb21taXR0ZWRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVM
b2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGluZyk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9lbmNvZGluZyk6CisKIDIw
MTAtMDQtMDcgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCA4NGM0MzIzLi4yN2ZmM2M4
IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
R3RrLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
R3RrLmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1p
dHRlZExvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhCiAgICAg
ICAgICAgICBlbmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7
CiAKICAgICAgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gbG9hZGVyLT5mcmFtZUxvYWRl
cigpOwotICAgICAgICBmcmFtZUxvYWRlci0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9z
ZW4pOworICAgICAgICBmcmFtZUxvYWRlci0+d3JpdGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5n
LCB1c2VyQ2hvc2VuKTsKICAgICAgICAgaWYgKGRhdGEpCiAgICAgICAgICAgICBmcmFtZUxvYWRl
ci0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOwogCkBAIC04NjgsNyArODY4LDcgQEAgdm9pZCBGcmFt
ZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBk
b2N1bWVudExvYWRlcikKIHsKICAgICBpZiAoIW1fcGx1Z2luVmlldykgewogICAgICAgICBGcmFt
ZUxvYWRlciogbG9hZGVyID0gZG9jdW1lbnRMb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgICAg
IGxvYWRlci0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNl
KTsKKyAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0
RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX3BsdWdpblZp
ZXctPmRpZEZpbmlzaExvYWRpbmcoKTsKICAgICAgICAgbV9wbHVnaW5WaWV3ID0gMDsKZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggNmY4MTYyNS4uMjJmNmQwNCAxMDA2NDQKLS0t
IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTQwMTEsNyArNDAxMSw3IEBAIGNvbnN0IGdjaGFy
KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2VuY29kaW5nKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7
CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBO
VUxMKTsKIAotICAgIFN0cmluZyBlbmNvZGluZyA9IGNvcmUod2ViVmlldyktPm1haW5GcmFtZSgp
LT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICBTdHJpbmcgZW5jb2RpbmcgPSBjb3JlKHdlYlZp
ZXcpLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwogCiAgICAg
aWYgKCFlbmNvZGluZy5pc0VtcHR5KCkpIHsKICAgICAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUq
IHByaXYgPSB3ZWJWaWV3LT5wcml2OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L0NoYW5nZUxv
ZyBiL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cKaW5kZXggNjA1YmMwZC4uMmZhZWE0ZSAxMDA2NDQK
LS0tIGEvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZworKysgYi9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDQtMDggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
YWN0b3IgRG9jdW1lbnRXcml0ZXIgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzE3NQorCisgICAgICAgIFVwZGF0ZSB0
aGVzZSBjYWxsc2l0ZXMgYmVjYXVzZSB0aGUgbWV0aG9kIG1vdmVkIHRvIERvY3VtZW50V3JpdGVy
LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpjb21taXR0ZWRMb2Fk
KToKKwogMjAxMC0wNC0wNyAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9XZWJL
aXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHAgYi9XZWJL
aXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHAKaW5kZXgg
MTk0OTQyMS4uNDMwMTk0YSAxMDA2NDQKLS0tIGEvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwCisrKyBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcApAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y29tbWl0dGVkTG9hZChXZWJDb3JlOjpEb2N1bWVudExv
YWRlciogbG9hZGVyLCBjb25zCiAgICAgICAgIHJldHVybjsKIAogICAgIEZyYW1lTG9hZGVyKiBm
cmFtZUxvYWRlciA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKLSAgICBmcmFtZUxvYWRlci0+c2V0
RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKKyAgICBmcmFt
ZUxvYWRlci0+d3JpdGVyKCktPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFt
ZSgpLCBmYWxzZSk7CiAgICAgZnJhbWVMb2FkZXItPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwppbmRleCAyMzJlZDMwLi4yZjM4MzQ0IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZworKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTA0LTA4
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFjdG9yIERvY3VtZW50V3JpdGVyIG91dCBvZiBG
cmFtZUxvYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzcxNzUKKworICAgICAgICBVcGRhdGUgdGhlc2UgY2FsbHNpdGVzIGJlY2F1c2UgdGhlIG1l
dGhvZCBtb3ZlZCB0byBEb2N1bWVudFdyaXRlci4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJh
bWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9jYW5Qcm92aWRlRG9jdW1lbnRTb3VyY2VdKToK
KyAgICAgICAgKC1bV2ViRnJhbWUgX3JlY2VpdmVkRGF0YTp0ZXh0RW5jb2RpbmdOYW1lOl0pOgor
CiAyMDEwLTA0LTA3ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA1MzhjMjNh
Li40Y2U5ODc2IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysr
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC05NjEsNyArOTYxLDcgQEAgc3Rh
dGljIGlubGluZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIpCiAtIChCT09MKV9jYW5Qcm92aWRlRG9jdW1lbnRTb3VyY2UKIHsKICAgICBGcmFtZSogZnJh
bWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwotICAgIFN0cmluZyBtaW1lVHlwZSA9IGZyYW1lLT5s
b2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpOworICAgIFN0cmluZyBtaW1lVHlwZSA9IGZyYW1l
LT5sb2FkZXIoKS0+d3JpdGVyKCktPm1pbWVUeXBlKCk7CiAgICAgUGx1Z2luRGF0YSogcGx1Z2lu
RGF0YSA9IGZyYW1lLT5wYWdlKCkgPyBmcmFtZS0+cGFnZSgpLT5wbHVnaW5EYXRhKCkgOiAwOwog
CiAgICAgaWYgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjppc1RleHRNSU1FVHlwZShtaW1l
VHlwZSkgfHwKQEAgLTk4Niw3ICs5ODYsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2Ug
KmRhdGFTb3VyY2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICBib29sIHVzZXJDaG9zZW4g
PSAhZW5jb2RpbmcuaXNOdWxsKCk7CiAgICAgaWYgKGVuY29kaW5nLmlzTnVsbCgpKQogICAgICAg
ICBlbmNvZGluZyA9IHRleHRFbmNvZGluZ05hbWU7Ci0gICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+
bG9hZGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKyAgICBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1
c2VyQ2hvc2VuKTsKICAgICBbc2VsZiBfYWRkRGF0YTpkYXRhXTsKIH0KIApkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggNjk0OGE1NS4u
MmY3OTU4MyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDQtMDggIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBGYWN0b3IgRG9jdW1lbnRXcml0ZXIgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzE3NQorCisgICAgICAg
IFVwZGF0ZSB0aGVzZSBjYWxsc2l0ZXMgYmVjYXVzZSB0aGUgbWV0aG9kIG1vdmVkIHRvIERvY3Vt
ZW50V3JpdGVyLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpmaW5pc2hlZExv
YWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6c2V0TWFpbkRv
Y3VtZW50RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6Y29t
bWl0dGVkTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNw
YXRjaERpZEZhaWxMb2FkaW5nKToKKwogMjAxMC0wNC0wOCAgQmVuamFtaW4gUG91bGFpbiAgPGJl
bmphbWluLnBvdWxhaW5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhh
dXNtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50UXQuY3BwIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
UXQuY3BwCmluZGV4IGIxN2RhZGUuLmE0ODUzNWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKQEAgLTUxNyw3ICs1MTcsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciogbG9h
ZGVyKQogICAgIGlmICghbV9wbHVnaW5WaWV3KSB7CiAgICAgICAgIGlmKG1fZmlyc3REYXRhKSB7
CiAgICAgICAgICAgICBGcmFtZUxvYWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0g
ICAgICAgICAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCks
IGZhbHNlKTsKKyAgICAgICAgICAgIGZsLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcobV9yZXNwb25z
ZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKICAgICAgICAgICAgIG1fZmlyc3REYXRhID0g
ZmFsc2U7IAogICAgICAgICB9CiAgICAgfQpAQCAtNzA4LDcgKzcwOCw3IEBAIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnRRdDo6c2V0TWFpbkRvY3VtZW50RXJyb3IoV2ViQ29yZTo6RG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlciwKIHsKICAgICBpZiAoIW1fcGx1Z2luVmlldykgewogICAgICAgICBpZiAobV9m
aXJzdERhdGEpIHsKLSAgICAgICAgICAgIGxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+c2V0RW5jb2Rp
bmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKKyAgICAgICAgICAgIGxv
YWRlci0+ZnJhbWVMb2FkZXIoKS0+d3JpdGVyKCktPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4
dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7CiAgICAgICAgICAgICBtX2ZpcnN0RGF0YSA9IGZhbHNl
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTcyNiw3ICs3MjYsNyBAQCB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50UXQ6OmNvbW1pdHRlZExvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxv
YWRlciwgY29uc3QgYwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBGcmFtZUxvYWRlciAq
ZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7CiAgICAgICAgIGlmIChtX2ZpcnN0RGF0YSkgewot
ICAgICAgICAgICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgp
LCBmYWxzZSk7CisgICAgICAgICAgICBmbC0+d3JpdGVyKCktPnNldEVuY29kaW5nKG1fcmVzcG9u
c2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7CiAgICAgICAgICAgICBtX2ZpcnN0RGF0YSA9
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZsLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CkBA
IC04OTEsNyArODkxLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZEZh
aWxMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIKIAogICAgIGlmIChtX2Zp
cnN0RGF0YSkgewogICAgICAgICBGcmFtZUxvYWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVy
KCk7Ci0gICAgICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUo
KSwgZmFsc2UpOworICAgICAgICBmbC0+d3JpdGVyKCktPnNldEVuY29kaW5nKG1fcmVzcG9uc2Uu
dGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7CiAgICAgICAgIG1fZmlyc3REYXRhID0gZmFsc2U7
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9XZWJLaXQvd2lu
L0NoYW5nZUxvZwppbmRleCBhZDlmNGQzLi40YTlhOTAzIDEwMDY0NAotLS0gYS9XZWJLaXQvd2lu
L0NoYW5nZUxvZworKysgYi9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDEwLTA0LTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFjdG9yIERvY3VtZW50V3JpdGVy
IG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzcxNzUKKworICAgICAgICBVcGRhdGUgdGhlc2UgY2FsbHNpdGVzIGJlY2F1
c2UgdGhlIG1ldGhvZCBtb3ZlZCB0byBEb2N1bWVudFdyaXRlci4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpyZWNlaXZlZERhdGEpOgorCiAyMDEwLTA0LTA4ICBTdGV2ZSBGYWxrZW5idXJn
ICA8c2ZhbGtlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmNwcCBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
Y3BwCmluZGV4IDQ3NTIwNDAuLmZjNzVlYTQgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1dlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBAIC01MDksNyArNTA5LDcgQEAgdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVjZWl2ZWREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBsZW5ndGgsIGNvbnN0IFN0cmkKICAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNO
dWxsKCk7CiAgICAgaWYgKGVuY29kaW5nLmlzTnVsbCgpKQogICAgICAgICBlbmNvZGluZyA9IHRl
eHRFbmNvZGluZzsKLSAgICBjb3JlRnJhbWUtPmxvYWRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGlu
ZywgdXNlckNob3Nlbik7CisgICAgY29yZUZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPnNldEVu
Y29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKIAogICAgIGNvcmVGcmFtZS0+bG9hZGVyKCkt
PmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC93eC9DaGFuZ2VM
b2cgYi9XZWJLaXQvd3gvQ2hhbmdlTG9nCmluZGV4IDYxZjVkNDguLjE5OTQwODMgMTAwNjQ0Ci0t
LSBhL1dlYktpdC93eC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3d4L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDEwLTA0LTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFjdG9yIERv
Y3VtZW50V3JpdGVyIG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxNzUKKworICAgICAgICBVcGRhdGUgdGhlc2UgY2Fs
bHNpdGVzIGJlY2F1c2UgdGhlIG1ldGhvZCBtb3ZlZCB0byBEb2N1bWVudFdyaXRlci4KKworICAg
ICAgICAqIFdlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFd4Ojpjb21taXR0ZWRMb2FkKToKKwogMjAxMC0wNC0w
NyAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9XZWJLaXQvd3gvV2ViS2l0U3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcCBiL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50V3guY3BwCmluZGV4IDNkMmQwNjcuLjAzODlmYmMgMTAwNjQ0Ci0tLSBh
L1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCisrKyBiL1dl
YktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCkBAIC02MDQsNyAr
NjA0LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFd4Ojpjb21taXR0ZWRMb2FkKFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGMKICAgICAgICAgcmV0dXJuOwogICAgIGlm
ICghbV9wbHVnaW5WaWV3KSB7CiAgICAgICAgIEZyYW1lTG9hZGVyKiBmbCA9IGxvYWRlci0+ZnJh
bWVMb2FkZXIoKTsKLSAgICAgICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29k
aW5nTmFtZSgpLCBmYWxzZSk7CisgICAgICAgIGZsLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcobV9y
ZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKICAgICAgICAgZmwtPmFkZERhdGEo
ZGF0YSwgbGVuZ3RoKTsKICAgICB9CiAgICAgCg==
</data>
<flag name="review"
          id="36541"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="36547"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>