<?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>55644</bug_id>
          
          <creation_ts>2011-03-02 18:54:45 -0800</creation_ts>
          <short_desc>[fileapi] Add URI resolution support to WorkerContext</short_desc>
          <delta_ts>2011-03-21 20:35:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ericu</cc>
    
    <cc>fishd</cc>
    
    <cc>jorlow</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin</cc>
    
    <cc>michaeln</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>361298</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-02 18:54:45 -0800</bug_when>
    <thetext>[fileapi] Add URI resolution support to WorkerContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361300</commentid>
    <comment_count>1</comment_count>
      <attachid>84508</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-02 18:57:57 -0800</bug_when>
    <thetext>Created attachment 84508
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361301</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-02 18:59:11 -0800</bug_when>
    <thetext>Depends on http://codereview.chromium.org/6613008/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361381</commentid>
    <comment_count>3</comment_count>
      <attachid>84508</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2011-03-02 23:08:05 -0800</bug_when>
    <thetext>Comment on attachment 84508
Patch

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

lgtm.

&gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:60
&gt; +void LocalFileSystem::readFileSystem(ScriptExecutionContext* context, AsyncFileSystem::Type type, PassOwnPtr&lt;AsyncFileSystemCallbacks&gt; callbacks, bool synchronous)

The implementation of this method is mostly same as that of requestFileSystem-- maybe we could factor out a common private method that takes all of parameters plus boolean create flag and make both readFileSystem and requestFileSystem a wrapper of the method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361820</commentid>
    <comment_count>4</comment_count>
      <attachid>84508</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-03 12:09:45 -0800</bug_when>
    <thetext>Comment on attachment 84508
Patch

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

&gt;&gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:60
&gt;&gt; +void LocalFileSystem::readFileSystem(ScriptExecutionContext* context, AsyncFileSystem::Type type, PassOwnPtr&lt;AsyncFileSystemCallbacks&gt; callbacks, bool synchronous)
&gt; 
&gt; The implementation of this method is mostly same as that of requestFileSystem-- maybe we could factor out a common private method that takes all of parameters plus boolean create flag and make both readFileSystem and requestFileSystem a wrapper of the method.

Good idea.  I&apos;ve done that.  The only thing that I don&apos;t like about all this is the fact that there&apos;s two bools and a long long all together in one signature.  Quite easy to screw up the order and break stuff.  I&apos;d like to come back to this code and redo the API with enums instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361822</commentid>
    <comment_count>5</comment_count>
      <attachid>84604</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-03 12:10:39 -0800</bug_when>
    <thetext>Created attachment 84604
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361828</commentid>
    <comment_count>6</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2011-03-03 12:24:13 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=84604) [details]
&gt; Patch

LGTM.

(In reply to comment #4)
&gt; &gt; The implementation of this method is mostly same as that of requestFileSystem-- maybe we could factor out a common private method that takes all of parameters plus boolean create flag and make both readFileSystem and requestFileSystem a wrapper of the method.
&gt; 
&gt; Good idea.  I&apos;ve done that.  The only thing that I don&apos;t like about all this is the fact that there&apos;s two bools and a long long all together in one signature.  Quite easy to screw up the order and break stuff.  I&apos;d like to come back to this code and redo the API with enums instead.

Agreed, the signature looks a bit messed up after repeated ad-hoc changes.  Anyway the two public methods look nicer now, thanks for doing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361858</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-03 12:57:49 -0800</bug_when>
    <thetext>CCing some possible reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361912</commentid>
    <comment_count>8</comment_count>
      <attachid>84604</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-03 13:58:10 -0800</bug_when>
    <thetext>Comment on attachment 84604
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        in the WebKit Chromium builds.

Why are are adding more stuff here if none of it is testable? (I thought I saw some tests for the file system in workers but maybe not.)

If they aren&apos;t testable, can we fix that before adding more here.

&gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:77
&gt; +    openFileSystemHelper(context, type, callbacks, synchronous, 0, false);

That last parameter should be an enum instead of a bool to make the call sites more readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361924</commentid>
    <comment_count>9</comment_count>
      <attachid>84624</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-03 14:08:35 -0800</bug_when>
    <thetext>Created attachment 84624
Use an enum for internal create param</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361926</commentid>
    <comment_count>10</comment_count>
      <attachid>84604</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-03 14:10:49 -0800</bug_when>
    <thetext>Comment on attachment 84604
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        in the WebKit Chromium builds.
&gt; 
&gt; Why are are adding more stuff here if none of it is testable? (I thought I saw some tests for the file system in workers but maybe not.)
&gt; 
&gt; If they aren&apos;t testable, can we fix that before adding more here.

Thanks for calling me on this. Kinuko, can you help here?  Last time I tried to run the worker tests they just hung.

&gt;&gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:77
&gt;&gt; +    openFileSystemHelper(context, type, callbacks, synchronous, 0, false);
&gt; 
&gt; That last parameter should be an enum instead of a bool to make the call sites more readable.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361935</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-03 14:19:51 -0800</bug_when>
    <thetext>Removing review bit while I go get the filesystem sync tests running in Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362058</commentid>
    <comment_count>12</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-03 16:24:38 -0800</bug_when>
    <thetext>I saw this but then forgot to mention this before. Avoid abbreviations in WebKit. I&apos;m referring to &quot;fs&quot; below:
  RefPtr&lt;DOMFileSystemSync&gt; fs = readFileSystemHelper.getResult(ec);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369908</commentid>
    <comment_count>13</comment_count>
      <attachid>86215</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-18 14:47:43 -0700</bug_when>
    <thetext>Created attachment 86215
Now with tests, but not ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369910</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-18 14:48:54 -0700</bug_when>
    <thetext>The one thing holding this back from review is the backslash test: I can&apos;t figure out why it&apos;s passing in async mode but failing in sync.  Will probably require a debugging session.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370041</commentid>
    <comment_count>15</comment_count>
      <attachid>86248</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-18 17:48:33 -0700</bug_when>
    <thetext>Created attachment 86248
Ready for review, tests pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370930</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-21 14:52:35 -0700</bug_when>
    <thetext>Just a friendly ping that this is ready for review again, now with the tests David asked for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370942</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-21 15:08:53 -0700</bug_when>
    <thetext>I&apos;m going to let dave_levin review this patch.  I looked over it briefly and it looked sane to me.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370971</commentid>
    <comment_count>18</comment_count>
      <attachid>86248</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-21 15:58:41 -0700</bug_when>
    <thetext>Comment on attachment 86248
Ready for review, tests pass

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

Just a few minor things to address.

&gt; Source/WebCore/fileapi/LocalFileSystem.h:57
&gt; +    void readFileSystem(ScriptExecutionContext*, AsyncFileSystem::Type, PassOwnPtr&lt;AsyncFileSystemCallbacks&gt;, bool synchronous = false);

Why add this parameter and then ignore it?

&gt; Source/WebCore/workers/WorkerContext.h:136
&gt; +        void resolveLocalFileSystemURL(const String&amp; url, PassRefPtr&lt;EntryCallback&gt;, PassRefPtr&lt;ErrorCallback&gt;);

The parameter name successCallback would add information in this case so it would be good to add it.

&gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:67
&gt; +void openFileSystemHelper(ScriptExecutionContext* context, AsyncFileSystem::Type type, PassOwnPtr&lt;AsyncFileSystemCallbacks&gt; callbacks, bool synchronous, long long size, CreationFlag create)

Function local to file should be &quot;static&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371003</commentid>
    <comment_count>19</comment_count>
      <attachid>86384</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-21 16:37:33 -0700</bug_when>
    <thetext>Created attachment 86384
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371008</commentid>
    <comment_count>20</comment_count>
      <attachid>86248</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-03-21 16:41:40 -0700</bug_when>
    <thetext>Comment on attachment 86248
Ready for review, tests pass

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

&gt;&gt; Source/WebCore/fileapi/LocalFileSystem.h:57
&gt;&gt; +    void readFileSystem(ScriptExecutionContext*, AsyncFileSystem::Type, PassOwnPtr&lt;AsyncFileSystemCallbacks&gt;, bool synchronous = false);
&gt; 
&gt; Why add this parameter and then ignore it?

The code in fileapi/LocalFileSystem.cpp is a stubbed-out implementation that&apos;s not currently used since the Chromium port is the only one to implement FileSystem.  My code&apos;s ignoring of the new parameter is just following in the footsteps of requestFileSystem, in this same file.  Note that I do use the bool in LocalFileSystemChromium.cpp.

Kinuko may be able to explain why this stubbed impl exists at all; it seems that things would work just fine without it.

&gt;&gt; Source/WebCore/workers/WorkerContext.h:136
&gt;&gt; +        void resolveLocalFileSystemURL(const String&amp; url, PassRefPtr&lt;EntryCallback&gt;, PassRefPtr&lt;ErrorCallback&gt;);
&gt; 
&gt; The parameter name successCallback would add information in this case so it would be good to add it.

Added the name here, and above for requestFileSystem for consistency.

&gt;&gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:67
&gt;&gt; +void openFileSystemHelper(ScriptExecutionContext* context, AsyncFileSystem::Type type, PassOwnPtr&lt;AsyncFileSystemCallbacks&gt; callbacks, bool synchronous, long long size, CreationFlag create)
&gt; 
&gt; Function local to file should be &quot;static&quot;.

Function was already inside an anonymous namespace, but I&apos;ve moved the namespace up to cover only the enum, and made the function static.  Let me know if you want the function inside the namespace, but that seems redundant to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371179</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-21 20:31:53 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 86384:

fast/dom/onerror-img.html bug 51019
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371180</commentid>
    <comment_count>22</comment_count>
      <attachid>86384</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-21 20:35:24 -0700</bug_when>
    <thetext>Comment on attachment 86384
Patch

Clearing flags on attachment: 86384

Committed r81640: &lt;http://trac.webkit.org/changeset/81640&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371181</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-21 20:35:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84508</attachid>
            <date>2011-03-02 18:57:57 -0800</date>
            <delta_ts>2011-03-03 12:10:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55644-20110302185755.patch</filename>
            <type>text/plain</type>
            <size>19119</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODAxODcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhODM5MGE5NDU2NjIyM2Yy
NjQ0NDFmMzZmYmU4ZWY2M2I2OTAwNjQ0Li4zM2RlN2Q3OTRhZmNkZmUyYjQzYWQwOTc4M2JjNGJi
YjQ4NjU0NDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDMtMDIgIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEFkZCBVUkkgcmVzb2x1dGlvbiBzdXBwb3J0
IHRvIFdvcmtlckNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU1NjQ0CisKKyAgICAgICAgTm8gdGVzdHMgeWV0OyBub25lIG9mIHRoZSBmaWxl
IHN5c3RlbSB3b3JrZXIgdGVzdHMgcnVuCisgICAgICAgIGluIHRoZSBXZWJLaXQgQ2hyb21pdW0g
YnVpbGRzLgorCisgICAgICAgICogZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbSk6CisgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciB3b3JrZXJzLgorICAgICAgICAqIGZpbGVhcGkvTG9jYWxGaWxlU3lzdGVt
Lmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6OnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dDo6cmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkkpOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5oOgorICAgICAgICAqIHdvcmtlcnMvV29y
a2VyQ29udGV4dC5pZGw6CisKIDIwMTEtMDMtMDIgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAKaW5kZXggNjg4ZDE1NTU5NWY1NzExOTJj
ZjM2OGUwNTlmM2Y2NzQ2NWY5MDJhNi4uOTU1ZDcyMzJkNGRjMDliYzQ1OWQ1MjdhMDNmM2Y1NjI4
MTc3Yjk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0
ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNwcApA
QCAtODEsNyArODEsNyBAQCBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwgY29ucwogICAgIEFzeW5jRmlsZVN5
c3RlbTo6b3BlbkZpbGVTeXN0ZW0oYmFzZVBhdGgsIGlkZW50aWZpZXIsIHR5cGUsIGNyZWF0ZSwg
Y2FsbGJhY2tzKTsKIH0KIAotdm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBl
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBM
b2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBib29sKQogewogICAgIC8vIEFzeW5jRmlsZVN5c3Rl
bTo6b3BlbkZpbGVTeXN0ZW0gY2FsbHMgY2FsbGJhY2tzIHN5bmNocm9ub3VzbHksIHNvIHRoZSBt
ZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5LgogICAgIGNvbnRleHQtPnBv
c3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkZpbGVTeXN0ZW0sIGZpbGVTeXN0ZW1CYXNl
UGF0aCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5kYXRhYmFzZUlkZW50aWZpZXIoKSwg
dHlwZSwgZmFsc2UsIGNhbGxiYWNrcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxl
U3lzdGVtLmgKaW5kZXggYmFmNzJkOWQwYzI0ZGU3YWM5ZGNhY2EyZWZlYWQzMjAxN2M5MGYyYi4u
MmVhYmQ3YTIzZDM2OWZkM2FiY2YwOGQ2MjdlNjk5YWI4ZGVlNzIyZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgTG9jYWxGaWxlU3lzdGVtJiBsb2NhbEZpbGVTeXN0ZW0oKTsKIAogICAgIC8vIERv
ZXMgbm90IGNyZWF0ZSB0aGUgcm9vdCBwYXRoIGZvciBmaWxlIHN5c3RlbSwganVzdCByZWFkcyBp
dCBpZiBhdmFpbGFibGUuCi0gICAgdm9pZCByZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4pOworICAgIHZvaWQgcmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1D
YWxsYmFja3M+LCBib29sIHN5bmNocm9ub3VzID0gZmFsc2UpOwogCiAgICAgdm9pZCByZXF1ZXN0
RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBl
LCBsb25nIGxvbmcgc2l6ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+LCBi
b29sIHN5bmNocm9ub3VzID0gZmFsc2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmNwcAppbmRleCBhY2Y3ZjA0NmQ3NTM3NjFhMTExZmI4YjM4ZDI1Mjc0MjNhYTlmNTEy
Li40YzRhOTU4ZWE4MTUxNjc2NDkyNGE2ZDEzMDRmZmQ2MjllYTUwODhkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAgLTY3LDkgKzY3LDEyIEBACiAKICNpZiBF
TkFCTEUoRklMRV9TWVNURU0pCiAjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCisjaW5jbHVk
ZSAiRGlyZWN0b3J5RW50cnlTeW5jLmgiCiAjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbS5oIgorI2lu
Y2x1ZGUgIkRPTUZpbGVTeXN0ZW1CYXNlLmgiCiAjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbVN5bmMu
aCIKICNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRmlsZUVudHJ5U3luYy5o
IgogI2luY2x1ZGUgIkZpbGVFcnJvci5oIgogI2luY2x1ZGUgIkZpbGVFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2suaCIKQEAgLTM3Nyw2ICszODAsNTMgQEAgUGFzc1Jl
ZlB0cjxET01GaWxlU3lzdGVtU3luYz4gV29ya2VyQ29udGV4dDo6cmVxdWVzdEZpbGVTeXN0ZW1T
eW5jKGludCB0eXBlLCBsb24KICAgICByZXR1cm4gaGVscGVyLmdldFJlc3VsdChlYyk7CiB9CiAK
K3ZvaWQgV29ya2VyQ29udGV4dDo6cmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSShjb25zdCBTdHJp
bmcmIHVyaSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sKKyAgICBLVVJMIGNvbXBsZXRl
ZFVSTCA9IGNvbXBsZXRlVVJMKHVyaSk7CisgICAgaWYgKCFBc3luY0ZpbGVTeXN0ZW06OmlzQXZh
aWxhYmxlKCkgfHwgIXNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0ZpbGVTeXN0ZW0oKSB8fCAh
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChjb21wbGV0ZWRVUkwpKSB7CisgICAgICAgIERP
TUZpbGVTeXN0ZW06OnNjaGVkdWxlQ2FsbGJhY2sodGhpcywgZXJyb3JDYWxsYmFjaywgRmlsZUVy
cm9yOjpjcmVhdGUoRmlsZUVycm9yOjpTRUNVUklUWV9FUlIpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlOworICAgIFN0cmluZyBmaWxl
UGF0aDsKKyAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkgfHwgIURPTUZpbGVTeXN0ZW1C
YXNlOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29tcGxldGVkVVJMLCB0eXBlLCBmaWxlUGF0aCkpIHsK
KyAgICAgICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayh0aGlzLCBlcnJvckNhbGxi
YWNrLCBGaWxlRXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6OlNZTlRBWF9FUlIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIExvY2FsRmlsZVN5c3RlbTo6bG9jYWxGaWxlU3lzdGVtKCku
cmVhZEZpbGVTeXN0ZW0odGhpcywgdHlwZSwgUmVzb2x2ZVVSSUNhbGxiYWNrczo6Y3JlYXRlKHN1
Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgdGhpcywgZmlsZVBhdGgpKTsKK30KKworUGFz
c1JlZlB0cjxFbnRyeVN5bmM+IFdvcmtlckNvbnRleHQ6OnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1T
eW5jVVJJKGNvbnN0IFN0cmluZyYgdXJpLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9
IDA7CisgICAgS1VSTCBjb21wbGV0ZWRVUkwgPSBjb21wbGV0ZVVSTCh1cmkpOworICAgIGlmICgh
QXN5bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpIHx8ICFzZWN1cml0eU9yaWdpbigpLT5jYW5B
Y2Nlc3NGaWxlU3lzdGVtKCkgfHwgIXNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QoY29tcGxl
dGVkVVJMKSkgeworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OlNFQ1VSSVRZX0VSUjsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGU7
CisgICAgU3RyaW5nIGZpbGVQYXRoOworICAgIGlmICghY29tcGxldGVkVVJMLmlzVmFsaWQoKSB8
fCAhRE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNrRmlsZVN5c3RlbVVSTChjb21wbGV0ZWRVUkwsIHR5
cGUsIGZpbGVQYXRoKSkgeworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OlNZTlRBWF9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEZpbGVTeXN0ZW1TeW5jQ2FsbGJhY2tI
ZWxwZXIgcmVhZEZpbGVTeXN0ZW1IZWxwZXI7CisgICAgTG9jYWxGaWxlU3lzdGVtOjpsb2NhbEZp
bGVTeXN0ZW0oKS5yZWFkRmlsZVN5c3RlbSh0aGlzLCB0eXBlLCBGaWxlU3lzdGVtQ2FsbGJhY2tz
OjpjcmVhdGUocmVhZEZpbGVTeXN0ZW1IZWxwZXIuc3VjY2Vzc0NhbGxiYWNrKCksIHJlYWRGaWxl
U3lzdGVtSGVscGVyLmVycm9yQ2FsbGJhY2soKSwgdGhpcyksIHRydWUpOworICAgIFJlZlB0cjxE
T01GaWxlU3lzdGVtU3luYz4gZnMgPSByZWFkRmlsZVN5c3RlbUhlbHBlci5nZXRSZXN1bHQoZWMp
OworICAgIGlmICghZnMpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEVudHJ5U3lu
Yz4gZW50cnkgPSBmcy0+cm9vdCgpLT5nZXREaXJlY3RvcnkoZmlsZVBhdGgsIDAsIGVjKTsKKyAg
ICBpZiAoZWMgPT0gRmlsZUV4Y2VwdGlvbjo6VFlQRV9NSVNNQVRDSF9FUlIpCisgICAgICAgIHJl
dHVybiBmcy0+cm9vdCgpLT5nZXRGaWxlKGZpbGVQYXRoLCAwLCBlYyk7CisKKyAgICByZXR1cm4g
ZW50cnkucmVsZWFzZSgpOworfQorCiBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KFdv
cmtlckNvbnRleHQ6OlRFTVBPUkFSWSkgPT0gc3RhdGljX2Nhc3Q8aW50PihBc3luY0ZpbGVTeXN0
ZW06OlRlbXBvcmFyeSksIGVudW1fbWlzbWF0Y2gpOwogQ09NUElMRV9BU1NFUlQoc3RhdGljX2Nh
c3Q8aW50PihXb3JrZXJDb250ZXh0OjpQRVJTSVNURU5UKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KEFz
eW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudCksIGVudW1fbWlzbWF0Y2gpOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCmluZGV4IDJlODAyZjI1NTI0ZDE2NDU4NmIx
ZGEwYjZhMGNiMzk3M2I2YWQzNmQuLjhjZjJiZTFjOTczZWZjMmQwYjJkYTk0NGM2NWFmNzc5NDg4
YjY0ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCkBAIC01MCw2ICs1
MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBEYXRhYmFzZTsKICAgICBjbGFz
cyBEYXRhYmFzZUNhbGxiYWNrOwogICAgIGNsYXNzIERhdGFiYXNlU3luYzsKKyAgICBjbGFzcyBF
bnRyeUNhbGxiYWNrOworICAgIGNsYXNzIEVudHJ5U3luYzsKICAgICBjbGFzcyBFcnJvckNhbGxi
YWNrOwogICAgIGNsYXNzIEZpbGVTeXN0ZW1DYWxsYmFjazsKICAgICBjbGFzcyBOb3RpZmljYXRp
b25DZW50ZXI7CkBAIC0xMzEsNiArMTMzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB9OwogICAgICAgICB2b2lkIHJlcXVlc3RGaWxlU3lzdGVtKGludCB0eXBlLCBsb25nIGxvbmcg
c2l6ZSwgUGFzc1JlZlB0cjxGaWxlU3lzdGVtQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2Fs
bGJhY2s+KTsKICAgICAgICAgUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtU3luYz4gcmVxdWVzdEZp
bGVTeXN0ZW1TeW5jKGludCB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgICAgICB2b2lkIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoY29uc3QgU3RyaW5nJiB1cmks
IFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwor
ICAgICAgICBQYXNzUmVmUHRyPEVudHJ5U3luYz4gcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNV
UkkoY29uc3QgU3RyaW5nJiB1cmksIEV4Y2VwdGlvbkNvZGUmKTsKICNlbmRpZgogCiAgICAgICAg
IC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgZm9yIEdDIG1hcmtpbmcuIFNlZSBKU1dvcmtlckNv
bnRleHQ6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smKSBpbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyQ29udGV4dC5pZGwKaW5kZXggMTc5MjIxZWQ0ZWI3MzA3YzNkODUzYjM0ZDNlOWU1Yzhj
ZjlkN2Q5Mi4uMjdiYTg1MTgzMjBiOWQ0MWFhYThmZDBiYzg4MmQyYWJlNzJhYjE2YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCkBAIC0xMTAsNiArMTEwLDggQEAg
bW9kdWxlIHRocmVhZHMgewogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQRVJTSVNURU5U
ID0gMTsKICAgICAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0gdm9pZCByZXF1ZXN0
RmlsZVN5c3RlbShpbiB1bnNpZ25lZCBzaG9ydCB0eXBlLCBpbiBsb25nIGxvbmcgc2l6ZSwgaW4g
W0NhbGxiYWNrLCBPcHRpb25hbF0gRmlsZVN5c3RlbUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywg
aW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKICAg
ICAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0gRE9NRmlsZVN5c3RlbVN5bmMgcmVx
dWVzdEZpbGVTeXN0ZW1TeW5jKGluIHVuc2lnbmVkIHNob3J0IHR5cGUsIGluIGxvbmcgbG9uZyBz
aXplKSByYWlzZXMgKEZpbGVFeGNlcHRpb24pOworICAgICAgICBbRW5hYmxlZEF0UnVudGltZT1G
aWxlU3lzdGVtXSB2b2lkIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoaW4gRE9NU3RyaW5nIHVy
aSwgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRW50cnlDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ss
IGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7Cisg
ICAgICAgIFtFbmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIEVudHJ5U3luYyByZXNvbHZlTG9j
YWxGaWxlU3lzdGVtU3luY1VSSShpbiBET01TdHJpbmcgdXJpKSByYWlzZXMgKEZpbGVFeGNlcHRp
b24pOwogCiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZT1GaWxl
U3lzdGVtXSBGbGFnc0NvbnN0cnVjdG9yIEZsYWdzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IGVlOTJmMWY0ZjRkMTQ0MDkzZjBlNDc2ZjUxODM4M2FkYTc3ZDljNWQuLmQ3
YTZlOWY4NmNkZjMwOGY4MmJiYTIzNTY5MGNmYTg4OGJiMWQ4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDMtMDIgIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2ZpbGVhcGldIEFkZCBVUkkgcmVzb2x1dGlvbiBzdXBwb3J0IHRvIFdvcmtlckNv
bnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1
NjQ0CisKKyAgICAgICAgUGFzcyAiY3JlYXRlIiBib29sIHRocm91Z2ggdG8gYWxsb3cgb3Blbmlu
ZworICAgICAgICBhIGZpbGVzeXN0ZW0gd2l0aG91dCBhbGxvd2luZyBjcmVhdGlvbi4KKworICAg
ICAgICAqIHNyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okxv
Y2FsRmlsZVN5c3RlbTo6cmVxdWVzdEZpbGVTeXN0ZW0pOgorICAgICAgICAqIHNyYy9XZWJXb3Jr
ZXJCYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFzZTo6b3BlbkZpbGVTeXN0
ZW1Gb3JXb3JrZXIpOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJCYXNlLmg6CisgICAgICAgICog
c3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVTeXN0ZW1Ub01h
aW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZCk6CisgICAgICAgICogc3JjL1dvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaDoKKwogMjAxMS0wMy0wMiAgRGFuaWVsIENoZW5nICA8
ZGNoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNo
cm9taXVtLmNwcAppbmRleCAzNWU0ZGU4Mjg5ZDkyNTgwYmY3MmNhNmFkMzAyYTc1MjkzMWJiZDM0
Li5kNjE0NmRhZjM1ODU3NjFiMzBmZmQxMTk0YzcxMTBhMDk0NTJjMzk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3Bw
CkBAIC01NywxMiArNTcsMTkgQEAgTG9jYWxGaWxlU3lzdGVtJiBMb2NhbEZpbGVTeXN0ZW06Omxv
Y2FsRmlsZVN5c3RlbSgpCiAgICAgcmV0dXJuICpsb2NhbEZpbGVTeXN0ZW07CiB9CiAKLXZvaWQg
TG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgUGFzc093blB0cjxBc3luY0ZpbGVT
eXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZWFkRmls
ZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06
OlR5cGUgdHlwZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNr
cywgYm9vbCBzeW5jaHJvbm91cykKIHsKLSAgICBBU1NFUlQoY29udGV4dCAmJiBjb250ZXh0LT5p
c0RvY3VtZW50KCkpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3Vt
ZW50Kj4oY29udGV4dCk7Ci0gICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1w
bDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICB3ZWJGcmFtZS0+Y2xpZW50KCkt
Pm9wZW5GaWxlU3lzdGVtKHdlYkZyYW1lLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBl
Pih0eXBlKSwgMCwgZmFsc2UsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFj
a3MsIHR5cGUpKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgaWYgKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1
bWVudCo+KGNvbnRleHQpOworICAgICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJh
bWVJbXBsOjpmcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOworICAgICAgICB3ZWJGcmFtZS0+
Y2xpZW50KCktPm9wZW5GaWxlU3lzdGVtKHdlYkZyYW1lLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lz
dGVtOjpUeXBlPih0eXBlKSwgMCwgZmFsc2UsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1w
bChjYWxsYmFja3MsIHR5cGUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBXb3JrZXJDb250ZXh0
KiB3b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOwor
ICAgICAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29u
dGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7CisgICAgICAgIFdlYldvcmtlckJh
c2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PFdlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQ
cm94eSk7CisgICAgICAgIHdlYldvcmtlci0+b3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoc3RhdGlj
X2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIDAsIGZhbHNlLCBuZXcgV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlLCBjb250ZXh0LCBzeW5jaHJvbm91cyks
IHN5bmNocm9ub3VzKTsKKyAgICB9CiB9CiAKIHZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZXF1ZXN0
RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0
ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVt
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMpCkBAIC03Niw3ICs4Myw3IEBA
IHZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZXF1ZXN0RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBBc3luY0ZpCiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNv
bnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7CiAgICAgICAgIFdv
cmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJl
YWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKTsKICAgICAgICAgV2ViV29ya2VyQmFzZSogd2ViV29y
a2VyID0gc3RhdGljX2Nhc3Q8V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAg
ICAgICAgd2ViV29ya2VyLT5vcGVuRmlsZVN5c3RlbUZvcldvcmtlcihzdGF0aWNfY2FzdDxXZWJG
aWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJ
bXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJvbm91cyk7
CisgICAgICAgIHdlYldvcmtlci0+b3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoc3RhdGljX2Nhc3Q8
V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIHRydWUsIG5ldyBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzSW1wbChjYWxsYmFja3MsIHR5cGUsIGNvbnRleHQsIHN5bmNocm9ub3VzKSwgc3lu
Y2hyb25vdXMpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJX
b3JrZXJCYXNlLmNwcAppbmRleCBiMTZiNmQ0MDdjMGE3NzdhNzUwNTc2NmUwMzNmOWE0NTM4MjUy
ZWQ1Li40YjI3ZGRiMzdkMjQ2OWU1NWIyY2EzNTJmMmI4ZWRjN2FiNzJjMjcyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNwcApAQCAtMjM3LDcgKzIzNyw3
IEBAIGJvb2wgV2ViV29ya2VyQmFzZTo6YWxsb3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyCiB9CiAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0p
Ci12b2lkIFdlYldvcmtlckJhc2U6Om9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKFdlYkZpbGVTeXN0
ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNh
bGxiYWNrcywgYm9vbCBzeW5jaHJvbm91cykKK3ZvaWQgV2ViV29ya2VyQmFzZTo6b3BlbkZpbGVT
eXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwg
Ym9vbCBjcmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgYm9vbCBzeW5j
aHJvbm91cykKIHsKICAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gbV93b3JrZXJUaHJlYWQt
PnJ1bkxvb3AoKTsKICAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKQEAgLTI0OCw3ICsy
NDgsNyBAQCB2b2lkIFdlYldvcmtlckJhc2U6Om9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKFdlYkZp
bGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nCiAgICAgbW9kZS5hcHBlbmQoU3RyaW5nOjpu
dW1iZXIocnVuTG9vcC5jcmVhdGVVbmlxdWVJZCgpKSk7CiAKICAgICBSZWZQdHI8V29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlID0gV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZTo6Y3JlYXRlKHRoaXMsIHdvcmtlckNvbnRleHQsIGNhbGxiYWNrcyk7Ci0gICAgYnJp
ZGdlLT5wb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoY29tbW9uQ2xpZW50KCksIHR5cGUs
IHNpemUsIG1vZGUpOworICAgIGJyaWRnZS0+cG9zdE9wZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFk
KGNvbW1vbkNsaWVudCgpLCB0eXBlLCBzaXplLCBjcmVhdGUsIG1vZGUpOwogCiAgICAgaWYgKHN5
bmNocm9ub3VzKSB7CiAgICAgICAgIGlmIChydW5Mb29wLnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0
LCBtb2RlKSA9PSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViV29ya2VyQmFzZS5oCmluZGV4IGVjNzM1MDU2OWE4NzRlYTk4MjU4YmU4Mjk3NmEy
YWFiMDQzZjBlNTMuLjhmYjAzMmU2MTdlZmRiMmYzN2JhNWE5OTExYTUyYzI1YjNiZTM5ZGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgKQEAgLTkyLDcgKzky
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBhbGxvd0RhdGFiYXNlKFdlYkZyYW1lKiwg
Y29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogCiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotICAg
IHZvaWQgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBs
b25nIHNpemUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqLCBib29sIHN5bmNocm9ub3VzKTsKKyAg
ICB2b2lkIG9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcg
bG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyosIGJvb2wgc3lu
Y2hyb25vdXMpOwogI2VuZGlmCiAKICAgICAvLyBFeGVjdXRlcyB0aGUgZ2l2ZW4gdGFzayBvbiB0
aGUgbWFpbiB0aHJlYWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCmluZGV4IDZjMzEyMjE3
YjY1N2YzZDU4NjU5NjY5NmZkNGM5MmY3OWJiMDc4ZGQuLjk4MTdjMDE4MWRlNzQzMWExOWJkMGJm
ZDY2NzMxOTA4N2I4NTNlMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCkBAIC0xNTAs
OSArMTUwLDkgQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpzdG9wKCkK
ICAgICB9CiB9CiAKLXZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9w
ZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFkKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xp
ZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBjb25zdCBTdHJp
bmcmIG1vZGUpCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVu
RmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVu
dCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUs
IGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKLSAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZCwgY29tbW9uQ2xpZW50
LCB0eXBlLCBzaXplLCB0aGlzLCBtb2RlKSk7CisgICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFk
KGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQsIGNvbW1vbkNs
aWVudCwgdHlwZSwgc2l6ZSwgY3JlYXRlLCB0aGlzLCBtb2RlKSk7CiB9CiAKIHZvaWQgV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE1vdmVUb01haW5UaHJlYWQoV2ViRmlsZVN5
c3RlbSogZmlsZVN5c3RlbSwgY29uc3QgU3RyaW5nJiBzb3VyY2VQYXRoLCBjb25zdCBTdHJpbmcm
IGRlc3RpbmF0aW9uUGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKQpAQCAtMjEyLDEyICsyMTIsMTIg
QEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0UmVhZERpcmVjdG9y
eVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGUKICAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQo
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZyZWFkRGlyZWN0b3J5T25NYWluVGhyZWFkLCBmaWxlU3lzdGVt
LCBwYXRoLCB0aGlzLCBtb2RlKSk7CiB9CiAKLXZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpU
eXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
KiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVt
OjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZSogYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCiB7CiAgICAgaWYg
KCFjb21tb25DbGllbnQpCiAgICAgICAgIGJyaWRnZS0+ZGlkRmFpbE9uTWFpblRocmVhZChXZWJG
aWxlRXJyb3JBYm9ydCwgbW9kZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbW1vbkNsaWVudC0+
b3BlbkZpbGVTeXN0ZW0odHlwZSwgc2l6ZSwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6
OmNyZWF0ZUxlYWtlZFB0cihicmlkZ2UsIG1vZGUpKTsKKyAgICAgICAgY29tbW9uQ2xpZW50LT5v
cGVuRmlsZVN5c3RlbSh0eXBlLCBzaXplLCBjcmVhdGUsIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2Fs
bGJhY2tzOjpjcmVhdGVMZWFrZWRQdHIoYnJpZGdlLCBtb2RlKSk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlLmgKaW5kZXggZmE1N2YzODI5OGY3MzEwM2QzOGRiYWYxZTM4NzE1NzVm
NTUwMTRjOC4uODRjZGRhZDJkNWM0OTgzYmQ5YTY5MWMyZmE2YjllODFiZDliYjkzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2UuaApAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgLy8gTWV0aG9kcyB0aGF0IGNyZWF0ZSBhbiBpbnN0YW5jZSBhbmQgcG9zdCBhbiBpbml0aWFs
IHJlcXVlc3QgdGFzayB0byB0aGUgbWFpbiB0aHJlYWQuIFRoZXkgbXVzdCBiZSBjYWxsZWQgb24g
dGhlIHdvcmtlciB0aHJlYWQuCi0gICAgdm9pZCBwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJl
YWQoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25n
IHNpemUsIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgdm9pZCBwb3N0T3BlbkZpbGVTeXN0ZW1U
b01haW5UaHJlYWQoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwg
bG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZv
aWQgcG9zdE1vdmVUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgc3Jj
UGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0UGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICB2
b2lkIHBvc3RDb3B5VG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcmIHNy
Y1BhdGgsIGNvbnN0IFN0cmluZyYgZGVzdFBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAg
dm9pZCBwb3N0UmVtb3ZlVG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToK
ICAgICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFdlYldvcmtlckJhc2UqLCBXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyopOwog
CiAgICAgLy8gTWV0aG9kcyB0aGF0IGFyZSB0byBiZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFk
LgotICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lz
dGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgc3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1P
bk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvbW1vbldv
cmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNy
ZWF0ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9k
ZSk7CiAgICAgc3RhdGljIHZvaWQgbW92ZU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgc3JjUGF0aCwgY29u
c3QgU3RyaW5nJiBkZXN0UGF0aCwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNv
bnN0IFN0cmluZyYgbW9kZSk7CiAgICAgc3RhdGljIHZvaWQgY29weU9uTWFpblRocmVhZChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmlu
ZyYgc3JjUGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0UGF0aCwgV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3Zl
T25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lz
dGVtKiwgY29uc3QgU3RyaW5nJiBwYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
KiwgY29uc3QgU3RyaW5nJiBtb2RlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84604</attachid>
            <date>2011-03-03 12:10:39 -0800</date>
            <delta_ts>2011-03-03 14:10:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55644-20110303121038.patch</filename>
            <type>text/plain</type>
            <size>19343</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODAxODcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhODM5MGE5NDU2NjIyM2Yy
NjQ0NDFmMzZmYmU4ZWY2M2I2OTAwNjQ0Li4zM2RlN2Q3OTRhZmNkZmUyYjQzYWQwOTc4M2JjNGJi
YjQ4NjU0NDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDMtMDIgIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEFkZCBVUkkgcmVzb2x1dGlvbiBzdXBwb3J0
IHRvIFdvcmtlckNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU1NjQ0CisKKyAgICAgICAgTm8gdGVzdHMgeWV0OyBub25lIG9mIHRoZSBmaWxl
IHN5c3RlbSB3b3JrZXIgdGVzdHMgcnVuCisgICAgICAgIGluIHRoZSBXZWJLaXQgQ2hyb21pdW0g
YnVpbGRzLgorCisgICAgICAgICogZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbSk6CisgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciB3b3JrZXJzLgorICAgICAgICAqIGZpbGVhcGkvTG9jYWxGaWxlU3lzdGVt
Lmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6OnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dDo6cmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkkpOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5oOgorICAgICAgICAqIHdvcmtlcnMvV29y
a2VyQ29udGV4dC5pZGw6CisKIDIwMTEtMDMtMDIgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAKaW5kZXggNjg4ZDE1NTU5NWY1NzExOTJj
ZjM2OGUwNTlmM2Y2NzQ2NWY5MDJhNi4uOTU1ZDcyMzJkNGRjMDliYzQ1OWQ1MjdhMDNmM2Y1NjI4
MTc3Yjk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0
ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNwcApA
QCAtODEsNyArODEsNyBAQCBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwgY29ucwogICAgIEFzeW5jRmlsZVN5
c3RlbTo6b3BlbkZpbGVTeXN0ZW0oYmFzZVBhdGgsIGlkZW50aWZpZXIsIHR5cGUsIGNyZWF0ZSwg
Y2FsbGJhY2tzKTsKIH0KIAotdm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBl
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBM
b2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBib29sKQogewogICAgIC8vIEFzeW5jRmlsZVN5c3Rl
bTo6b3BlbkZpbGVTeXN0ZW0gY2FsbHMgY2FsbGJhY2tzIHN5bmNocm9ub3VzbHksIHNvIHRoZSBt
ZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5LgogICAgIGNvbnRleHQtPnBv
c3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkZpbGVTeXN0ZW0sIGZpbGVTeXN0ZW1CYXNl
UGF0aCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5kYXRhYmFzZUlkZW50aWZpZXIoKSwg
dHlwZSwgZmFsc2UsIGNhbGxiYWNrcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxl
U3lzdGVtLmgKaW5kZXggYmFmNzJkOWQwYzI0ZGU3YWM5ZGNhY2EyZWZlYWQzMjAxN2M5MGYyYi4u
MmVhYmQ3YTIzZDM2OWZkM2FiY2YwOGQ2MjdlNjk5YWI4ZGVlNzIyZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgTG9jYWxGaWxlU3lzdGVtJiBsb2NhbEZpbGVTeXN0ZW0oKTsKIAogICAgIC8vIERv
ZXMgbm90IGNyZWF0ZSB0aGUgcm9vdCBwYXRoIGZvciBmaWxlIHN5c3RlbSwganVzdCByZWFkcyBp
dCBpZiBhdmFpbGFibGUuCi0gICAgdm9pZCByZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4pOworICAgIHZvaWQgcmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1D
YWxsYmFja3M+LCBib29sIHN5bmNocm9ub3VzID0gZmFsc2UpOwogCiAgICAgdm9pZCByZXF1ZXN0
RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBl
LCBsb25nIGxvbmcgc2l6ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+LCBi
b29sIHN5bmNocm9ub3VzID0gZmFsc2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmNwcAppbmRleCBhY2Y3ZjA0NmQ3NTM3NjFhMTExZmI4YjM4ZDI1Mjc0MjNhYTlmNTEy
Li40YzRhOTU4ZWE4MTUxNjc2NDkyNGE2ZDEzMDRmZmQ2MjllYTUwODhkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAgLTY3LDkgKzY3LDEyIEBACiAKICNpZiBF
TkFCTEUoRklMRV9TWVNURU0pCiAjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCisjaW5jbHVk
ZSAiRGlyZWN0b3J5RW50cnlTeW5jLmgiCiAjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbS5oIgorI2lu
Y2x1ZGUgIkRPTUZpbGVTeXN0ZW1CYXNlLmgiCiAjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbVN5bmMu
aCIKICNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRmlsZUVudHJ5U3luYy5o
IgogI2luY2x1ZGUgIkZpbGVFcnJvci5oIgogI2luY2x1ZGUgIkZpbGVFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2suaCIKQEAgLTM3Nyw2ICszODAsNTMgQEAgUGFzc1Jl
ZlB0cjxET01GaWxlU3lzdGVtU3luYz4gV29ya2VyQ29udGV4dDo6cmVxdWVzdEZpbGVTeXN0ZW1T
eW5jKGludCB0eXBlLCBsb24KICAgICByZXR1cm4gaGVscGVyLmdldFJlc3VsdChlYyk7CiB9CiAK
K3ZvaWQgV29ya2VyQ29udGV4dDo6cmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSShjb25zdCBTdHJp
bmcmIHVyaSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sKKyAgICBLVVJMIGNvbXBsZXRl
ZFVSTCA9IGNvbXBsZXRlVVJMKHVyaSk7CisgICAgaWYgKCFBc3luY0ZpbGVTeXN0ZW06OmlzQXZh
aWxhYmxlKCkgfHwgIXNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0ZpbGVTeXN0ZW0oKSB8fCAh
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChjb21wbGV0ZWRVUkwpKSB7CisgICAgICAgIERP
TUZpbGVTeXN0ZW06OnNjaGVkdWxlQ2FsbGJhY2sodGhpcywgZXJyb3JDYWxsYmFjaywgRmlsZUVy
cm9yOjpjcmVhdGUoRmlsZUVycm9yOjpTRUNVUklUWV9FUlIpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlOworICAgIFN0cmluZyBmaWxl
UGF0aDsKKyAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkgfHwgIURPTUZpbGVTeXN0ZW1C
YXNlOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29tcGxldGVkVVJMLCB0eXBlLCBmaWxlUGF0aCkpIHsK
KyAgICAgICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayh0aGlzLCBlcnJvckNhbGxi
YWNrLCBGaWxlRXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6OlNZTlRBWF9FUlIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIExvY2FsRmlsZVN5c3RlbTo6bG9jYWxGaWxlU3lzdGVtKCku
cmVhZEZpbGVTeXN0ZW0odGhpcywgdHlwZSwgUmVzb2x2ZVVSSUNhbGxiYWNrczo6Y3JlYXRlKHN1
Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgdGhpcywgZmlsZVBhdGgpKTsKK30KKworUGFz
c1JlZlB0cjxFbnRyeVN5bmM+IFdvcmtlckNvbnRleHQ6OnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1T
eW5jVVJJKGNvbnN0IFN0cmluZyYgdXJpLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9
IDA7CisgICAgS1VSTCBjb21wbGV0ZWRVUkwgPSBjb21wbGV0ZVVSTCh1cmkpOworICAgIGlmICgh
QXN5bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpIHx8ICFzZWN1cml0eU9yaWdpbigpLT5jYW5B
Y2Nlc3NGaWxlU3lzdGVtKCkgfHwgIXNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QoY29tcGxl
dGVkVVJMKSkgeworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OlNFQ1VSSVRZX0VSUjsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGU7
CisgICAgU3RyaW5nIGZpbGVQYXRoOworICAgIGlmICghY29tcGxldGVkVVJMLmlzVmFsaWQoKSB8
fCAhRE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNrRmlsZVN5c3RlbVVSTChjb21wbGV0ZWRVUkwsIHR5
cGUsIGZpbGVQYXRoKSkgeworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OlNZTlRBWF9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEZpbGVTeXN0ZW1TeW5jQ2FsbGJhY2tI
ZWxwZXIgcmVhZEZpbGVTeXN0ZW1IZWxwZXI7CisgICAgTG9jYWxGaWxlU3lzdGVtOjpsb2NhbEZp
bGVTeXN0ZW0oKS5yZWFkRmlsZVN5c3RlbSh0aGlzLCB0eXBlLCBGaWxlU3lzdGVtQ2FsbGJhY2tz
OjpjcmVhdGUocmVhZEZpbGVTeXN0ZW1IZWxwZXIuc3VjY2Vzc0NhbGxiYWNrKCksIHJlYWRGaWxl
U3lzdGVtSGVscGVyLmVycm9yQ2FsbGJhY2soKSwgdGhpcyksIHRydWUpOworICAgIFJlZlB0cjxE
T01GaWxlU3lzdGVtU3luYz4gZnMgPSByZWFkRmlsZVN5c3RlbUhlbHBlci5nZXRSZXN1bHQoZWMp
OworICAgIGlmICghZnMpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEVudHJ5U3lu
Yz4gZW50cnkgPSBmcy0+cm9vdCgpLT5nZXREaXJlY3RvcnkoZmlsZVBhdGgsIDAsIGVjKTsKKyAg
ICBpZiAoZWMgPT0gRmlsZUV4Y2VwdGlvbjo6VFlQRV9NSVNNQVRDSF9FUlIpCisgICAgICAgIHJl
dHVybiBmcy0+cm9vdCgpLT5nZXRGaWxlKGZpbGVQYXRoLCAwLCBlYyk7CisKKyAgICByZXR1cm4g
ZW50cnkucmVsZWFzZSgpOworfQorCiBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KFdv
cmtlckNvbnRleHQ6OlRFTVBPUkFSWSkgPT0gc3RhdGljX2Nhc3Q8aW50PihBc3luY0ZpbGVTeXN0
ZW06OlRlbXBvcmFyeSksIGVudW1fbWlzbWF0Y2gpOwogQ09NUElMRV9BU1NFUlQoc3RhdGljX2Nh
c3Q8aW50PihXb3JrZXJDb250ZXh0OjpQRVJTSVNURU5UKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KEFz
eW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudCksIGVudW1fbWlzbWF0Y2gpOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCmluZGV4IDJlODAyZjI1NTI0ZDE2NDU4NmIx
ZGEwYjZhMGNiMzk3M2I2YWQzNmQuLjhjZjJiZTFjOTczZWZjMmQwYjJkYTk0NGM2NWFmNzc5NDg4
YjY0ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCkBAIC01MCw2ICs1
MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBEYXRhYmFzZTsKICAgICBjbGFz
cyBEYXRhYmFzZUNhbGxiYWNrOwogICAgIGNsYXNzIERhdGFiYXNlU3luYzsKKyAgICBjbGFzcyBF
bnRyeUNhbGxiYWNrOworICAgIGNsYXNzIEVudHJ5U3luYzsKICAgICBjbGFzcyBFcnJvckNhbGxi
YWNrOwogICAgIGNsYXNzIEZpbGVTeXN0ZW1DYWxsYmFjazsKICAgICBjbGFzcyBOb3RpZmljYXRp
b25DZW50ZXI7CkBAIC0xMzEsNiArMTMzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB9OwogICAgICAgICB2b2lkIHJlcXVlc3RGaWxlU3lzdGVtKGludCB0eXBlLCBsb25nIGxvbmcg
c2l6ZSwgUGFzc1JlZlB0cjxGaWxlU3lzdGVtQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2Fs
bGJhY2s+KTsKICAgICAgICAgUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtU3luYz4gcmVxdWVzdEZp
bGVTeXN0ZW1TeW5jKGludCB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgICAgICB2b2lkIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoY29uc3QgU3RyaW5nJiB1cmks
IFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwor
ICAgICAgICBQYXNzUmVmUHRyPEVudHJ5U3luYz4gcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNV
UkkoY29uc3QgU3RyaW5nJiB1cmksIEV4Y2VwdGlvbkNvZGUmKTsKICNlbmRpZgogCiAgICAgICAg
IC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgZm9yIEdDIG1hcmtpbmcuIFNlZSBKU1dvcmtlckNv
bnRleHQ6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smKSBpbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyQ29udGV4dC5pZGwKaW5kZXggMTc5MjIxZWQ0ZWI3MzA3YzNkODUzYjM0ZDNlOWU1Yzhj
ZjlkN2Q5Mi4uMjdiYTg1MTgzMjBiOWQ0MWFhYThmZDBiYzg4MmQyYWJlNzJhYjE2YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCkBAIC0xMTAsNiArMTEwLDggQEAg
bW9kdWxlIHRocmVhZHMgewogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQRVJTSVNURU5U
ID0gMTsKICAgICAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0gdm9pZCByZXF1ZXN0
RmlsZVN5c3RlbShpbiB1bnNpZ25lZCBzaG9ydCB0eXBlLCBpbiBsb25nIGxvbmcgc2l6ZSwgaW4g
W0NhbGxiYWNrLCBPcHRpb25hbF0gRmlsZVN5c3RlbUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywg
aW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKICAg
ICAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0gRE9NRmlsZVN5c3RlbVN5bmMgcmVx
dWVzdEZpbGVTeXN0ZW1TeW5jKGluIHVuc2lnbmVkIHNob3J0IHR5cGUsIGluIGxvbmcgbG9uZyBz
aXplKSByYWlzZXMgKEZpbGVFeGNlcHRpb24pOworICAgICAgICBbRW5hYmxlZEF0UnVudGltZT1G
aWxlU3lzdGVtXSB2b2lkIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoaW4gRE9NU3RyaW5nIHVy
aSwgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRW50cnlDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ss
IGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7Cisg
ICAgICAgIFtFbmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIEVudHJ5U3luYyByZXNvbHZlTG9j
YWxGaWxlU3lzdGVtU3luY1VSSShpbiBET01TdHJpbmcgdXJpKSByYWlzZXMgKEZpbGVFeGNlcHRp
b24pOwogCiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZT1GaWxl
U3lzdGVtXSBGbGFnc0NvbnN0cnVjdG9yIEZsYWdzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IGVlOTJmMWY0ZjRkMTQ0MDkzZjBlNDc2ZjUxODM4M2FkYTc3ZDljNWQuLmQ3
YTZlOWY4NmNkZjMwOGY4MmJiYTIzNTY5MGNmYTg4OGJiMWQ4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDMtMDIgIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2ZpbGVhcGldIEFkZCBVUkkgcmVzb2x1dGlvbiBzdXBwb3J0IHRvIFdvcmtlckNv
bnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1
NjQ0CisKKyAgICAgICAgUGFzcyAiY3JlYXRlIiBib29sIHRocm91Z2ggdG8gYWxsb3cgb3Blbmlu
ZworICAgICAgICBhIGZpbGVzeXN0ZW0gd2l0aG91dCBhbGxvd2luZyBjcmVhdGlvbi4KKworICAg
ICAgICAqIHNyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okxv
Y2FsRmlsZVN5c3RlbTo6cmVxdWVzdEZpbGVTeXN0ZW0pOgorICAgICAgICAqIHNyYy9XZWJXb3Jr
ZXJCYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFzZTo6b3BlbkZpbGVTeXN0
ZW1Gb3JXb3JrZXIpOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJCYXNlLmg6CisgICAgICAgICog
c3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVTeXN0ZW1Ub01h
aW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZCk6CisgICAgICAgICogc3JjL1dvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaDoKKwogMjAxMS0wMy0wMiAgRGFuaWVsIENoZW5nICA8
ZGNoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNo
cm9taXVtLmNwcAppbmRleCAzNWU0ZGU4Mjg5ZDkyNTgwYmY3MmNhNmFkMzAyYTc1MjkzMWJiZDM0
Li42YTk4ZDg5YWQ0YjIyMjc5YmZkMDkxNTA5Mjg2NzZkYmM5YjYxZGVhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3Bw
CkBAIC01NywyOSArNTcsMzEgQEAgTG9jYWxGaWxlU3lzdGVtJiBMb2NhbEZpbGVTeXN0ZW06Omxv
Y2FsRmlsZVN5c3RlbSgpCiAgICAgcmV0dXJuICpsb2NhbEZpbGVTeXN0ZW07CiB9CiAKLXZvaWQg
TG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgUGFzc093blB0cjxBc3luY0ZpbGVT
eXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBBU1NFUlQoY29udGV4dCAmJiBjb250
ZXh0LT5pc0RvY3VtZW50KCkpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0
PERvY3VtZW50Kj4oY29udGV4dCk7Ci0gICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZy
YW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICB3ZWJGcmFtZS0+Y2xp
ZW50KCktPm9wZW5GaWxlU3lzdGVtKHdlYkZyYW1lLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVt
OjpUeXBlPih0eXBlKSwgMCwgZmFsc2UsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChj
YWxsYmFja3MsIHR5cGUpKTsKLX0KLQotdm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJlcXVlc3RGaWxl
U3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6
VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxs
YmFja3M+IGNhbGxiYWNrcywgYm9vbCBzeW5jaHJvbm91cykKK3N0YXRpYyB2b2lkIG9wZW5GaWxl
U3lzdGVtSGVscGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5
c3RlbTo6VHlwZSB0eXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBib29sIHN5bmNocm9ub3VzLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUpCiB7
CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIGlmIChjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
ICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250
ZXh0KTsKICAgICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJv
bUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICAgICAgd2ViRnJhbWUtPmNsaWVudCgpLT5v
cGVuRmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4o
dHlwZSksIHNpemUsIHRydWUsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFj
a3MsIHR5cGUpKTsKKyAgICAgICAgd2ViRnJhbWUtPmNsaWVudCgpLT5vcGVuRmlsZVN5c3RlbSh3
ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIGNy
ZWF0ZSwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSkpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0
aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7CiAgICAgICAgIFdvcmtlckxvYWRlclBy
b3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2Vy
TG9hZGVyUHJveHkoKTsKICAgICAgICAgV2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGlj
X2Nhc3Q8V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAgICAgICAgd2ViV29y
a2VyLT5vcGVuRmlsZVN5c3RlbUZvcldvcmtlcihzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpU
eXBlPih0eXBlKSwgc2l6ZSwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNr
cywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJvbm91cyk7CisgICAgICAgIHdl
Yldvcmtlci0+b3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3Rl
bTo6VHlwZT4odHlwZSksIHNpemUsIGNyZWF0ZSwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJ
bXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJvbm91cyk7
CiAgICAgfQogfQogCit2b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBh
c3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGJvb2wgc3luY2hy
b25vdXMpCit7CisgICAgb3BlbkZpbGVTeXN0ZW1IZWxwZXIoY29udGV4dCwgdHlwZSwgY2FsbGJh
Y2tzLCBzeW5jaHJvbm91cywgMCwgZmFsc2UpOworfQorCit2b2lkIExvY2FsRmlsZVN5c3RlbTo6
cmVxdWVzdEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNG
aWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQoreworICAgIG9w
ZW5GaWxlU3lzdGVtSGVscGVyKGNvbnRleHQsIHR5cGUsIGNhbGxiYWNrcywgc3luY2hyb25vdXMs
IHNpemUsIHRydWUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBF
TkFCTEUoRklMRV9TWVNURU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJXb3JrZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtl
ckJhc2UuY3BwCmluZGV4IGIxNmI2ZDQwN2MwYTc3N2E3NTA1NzY2ZTAzM2Y5YTQ1MzgyNTJlZDUu
LjRiMjdkZGIzN2QyNDY5ZTU1YjJjYTM1MmYyYjhlZGM3YWI3MmMyNzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCkBAIC0yMzcsNyArMjM3LDcgQEAg
Ym9vbCBXZWJXb3JrZXJCYXNlOjphbGxvd0RhdGFiYXNlKFdlYkZyYW1lKiwgY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLCBjb25zdCBXZWJTdHIKIH0KIAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLXZv
aWQgV2ViV29ya2VyQmFzZTo6b3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6
VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJh
Y2tzLCBib29sIHN5bmNocm9ub3VzKQordm9pZCBXZWJXb3JrZXJCYXNlOjpvcGVuRmlsZVN5c3Rl
bUZvcldvcmtlcihXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29s
IGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBib29sIHN5bmNocm9u
b3VzKQogewogICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSBtX3dvcmtlclRocmVhZC0+cnVu
TG9vcCgpOwogICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgpOwpAQCAtMjQ4LDcgKzI0OCw3
IEBAIHZvaWQgV2ViV29ya2VyQmFzZTo6b3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5
c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcKICAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJl
cihydW5Mb29wLmNyZWF0ZVVuaXF1ZUlkKCkpKTsKIAogICAgIFJlZlB0cjxXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UgPSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpjcmVhdGUodGhpcywgd29ya2VyQ29udGV4dCwgY2FsbGJhY2tzKTsKLSAgICBicmlkZ2Ut
PnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChjb21tb25DbGllbnQoKSwgdHlwZSwgc2l6
ZSwgbW9kZSk7CisgICAgYnJpZGdlLT5wb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoY29t
bW9uQ2xpZW50KCksIHR5cGUsIHNpemUsIGNyZWF0ZSwgbW9kZSk7CiAKICAgICBpZiAoc3luY2hy
b25vdXMpIHsKICAgICAgICAgaWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1v
ZGUpID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJXb3JrZXJCYXNlLmgKaW5kZXggZWM3MzUwNTY5YTg3NGVhOTgyNThiZTgyOTc2YTJhYWIw
NDNmMGU1My4uOGZiMDMyZTYxN2VmZGIyZjM3YmE1YTk5MTFhNTJjMjViM2JlMzlkYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaApAQCAtOTIsNyArOTIsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGFsbG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0gICAgdm9p
ZCBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcg
c2l6ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyosIGJvb2wgc3luY2hyb25vdXMpOworICAgIHZv
aWQgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25n
IHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiwgYm9vbCBzeW5jaHJv
bm91cyk7CiAjZW5kaWYKIAogICAgIC8vIEV4ZWN1dGVzIHRoZSBnaXZlbiB0YXNrIG9uIHRoZSBt
YWluIHRocmVhZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKaW5kZXggNmMzMTIyMTdiNjU3
ZjNkNTg2NTk2Njk2ZmQ0YzkyZjc5YmIwNzhkZC4uOTgxN2MwMTgxZGU3NDMxYTE5YmQwYmZkNjY3
MzE5MDg3Yjg1M2UyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKQEAgLTE1MCw5ICsx
NTAsOSBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnN0b3AoKQogICAg
IH0KIH0KIAotdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZp
bGVTeXN0ZW1Ub01haW5UaHJlYWQoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQs
IFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYg
bW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxl
U3lzdGVtVG9NYWluVGhyZWFkKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBX
ZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgY29u
c3QgU3RyaW5nJiBtb2RlKQogewotICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVD
YWxsYmFja1Rhc2soJm9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkLCBjb21tb25DbGllbnQsIHR5
cGUsIHNpemUsIHRoaXMsIG1vZGUpKTsKKyAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZCwgY29tbW9uQ2xpZW50
LCB0eXBlLCBzaXplLCBjcmVhdGUsIHRoaXMsIG1vZGUpKTsKIH0KIAogdm9pZCBXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0TW92ZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVt
KiBmaWxlU3lzdGVtLCBjb25zdCBTdHJpbmcmIHNvdXJjZVBhdGgsIGNvbnN0IFN0cmluZyYgZGVz
dGluYXRpb25QYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpCkBAIC0yMTIsMTIgKzIxMiwxMiBAQCB2
b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RSZWFkRGlyZWN0b3J5VG9N
YWluVGhyZWFkKFdlYkZpbGVTeXN0ZQogICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVh
dGVDYWxsYmFja1Rhc2soJnJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQsIGZpbGVTeXN0ZW0sIHBh
dGgsIHRoaXMsIG1vZGUpKTsKIH0KIAotdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUg
dHlwZSwgbG9uZyBsb25nIHNpemUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqIGJy
aWRnZSwgY29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5
cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlKiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBpZiAoIWNv
bW1vbkNsaWVudCkKICAgICAgICAgYnJpZGdlLT5kaWRGYWlsT25NYWluVGhyZWFkKFdlYkZpbGVF
cnJvckFib3J0LCBtb2RlKTsKICAgICBlbHNlIHsKLSAgICAgICAgY29tbW9uQ2xpZW50LT5vcGVu
RmlsZVN5c3RlbSh0eXBlLCBzaXplLCBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6Y3Jl
YXRlTGVha2VkUHRyKGJyaWRnZSwgbW9kZSkpOworICAgICAgICBjb21tb25DbGllbnQtPm9wZW5G
aWxlU3lzdGVtKHR5cGUsIHNpemUsIGNyZWF0ZSwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFj
a3M6OmNyZWF0ZUxlYWtlZFB0cihicmlkZ2UsIG1vZGUpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2UuaAppbmRleCBmYTU3ZjM4Mjk4ZjczMTAzZDM4ZGJhZjFlMzg3MTU3NWY1NTAx
NGM4Li44NGNkZGFkMmQ1YzQ5ODNiZDlhNjkxYzJmYTZiOWU4MWJkOWJiOTM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZS5oCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAv
LyBNZXRob2RzIHRoYXQgY3JlYXRlIGFuIGluc3RhbmNlIGFuZCBwb3N0IGFuIGluaXRpYWwgcmVx
dWVzdCB0YXNrIHRvIHRoZSBtYWluIHRocmVhZC4gVGhleSBtdXN0IGJlIGNhbGxlZCBvbiB0aGUg
d29ya2VyIHRocmVhZC4KLSAgICB2b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChX
ZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6
ZSwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICB2b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFp
blRocmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25n
IGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBw
b3N0TW92ZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBzcmNQYXRo
LCBjb25zdCBTdHJpbmcmIGRlc3RQYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQg
cG9zdENvcHlUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgc3JjUGF0
aCwgY29uc3QgU3RyaW5nJiBkZXN0UGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICB2b2lk
IHBvc3RSZW1vdmVUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAg
IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2ViV29ya2VyQmFzZSosIFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKik7CiAKICAg
ICAvLyBNZXRob2RzIHRoYXQgYXJlIHRvIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCi0g
ICAgc3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06
OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwg
Y29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbU9uTWFp
blRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRl
LCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsK
ICAgICBzdGF0aWMgdm9pZCBtb3ZlT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBzcmNQYXRoLCBjb25zdCBT
dHJpbmcmIGRlc3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3Qg
U3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCBjb3B5T25NYWluVGhyZWFkKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBz
cmNQYXRoLCBjb25zdCBTdHJpbmcmIGRlc3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVPbk1h
aW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0q
LCBjb25zdCBTdHJpbmcmIHBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBj
b25zdCBTdHJpbmcmIG1vZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84624</attachid>
            <date>2011-03-03 14:08:35 -0800</date>
            <delta_ts>2011-03-18 14:47:40 -0700</delta_ts>
            <desc>Use an enum for internal create param</desc>
            <filename>bug-55644-20110303140833.patch</filename>
            <type>text/plain</type>
            <size>19622</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODAyODIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjZmY5MTNlZjUyMTFmNjQ0
NzhmN2VkZTk0NmRiY2I4ZThhMDhkYzI1Li4wMDExY2U1NDU5ZGYyODVjODdmYWJiYTBjNWJmMjZi
ZTBmNWY0YzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDMtMDIgIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEFkZCBVUkkgcmVzb2x1dGlvbiBzdXBwb3J0
IHRvIFdvcmtlckNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU1NjQ0CisKKyAgICAgICAgTm8gdGVzdHMgeWV0OyBub25lIG9mIHRoZSBmaWxl
IHN5c3RlbSB3b3JrZXIgdGVzdHMgcnVuCisgICAgICAgIGluIHRoZSBXZWJLaXQgQ2hyb21pdW0g
YnVpbGRzLgorCisgICAgICAgICogZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbSk6CisgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciB3b3JrZXJzLgorICAgICAgICAqIGZpbGVhcGkvTG9jYWxGaWxlU3lzdGVt
Lmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6OnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dDo6cmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkkpOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5oOgorICAgICAgICAqIHdvcmtlcnMvV29y
a2VyQ29udGV4dC5pZGw6CisKIDIwMTEtMDMtMDMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBh
cHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4LiBTaG91bGQgaW5jbHVkZSBXZWJDb3JlS2V5
Ym9hcmRVSU1vZGUuaCBvbiBhbGwgcGxhdGZvcm1zIG5vdy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvTG9jYWxGaWxlU3lzdGVtLmNwcAppbmRleCA2ODhkMTU1NTk1ZjU3MTE5MmNmMzY4ZTA1OWYz
ZjY3NDY1ZjkwMmE2Li45NTVkNzIzMmQ0ZGMwOWJjNDU5ZDUyN2EwM2YzZjU2MjgxNzdiOTQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uY3BwCkBAIC04MSw3ICs4
MSw3IEBAIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIGJhc2VQYXRoLCBjb25zCiAgICAgQXN5bmNGaWxlU3lzdGVtOjpvcGVu
RmlsZVN5c3RlbShiYXNlUGF0aCwgaWRlbnRpZmllciwgdHlwZSwgY3JlYXRlLCBjYWxsYmFja3Mp
OwogfQogCi12b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIExvY2FsRmlsZVN5
c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5
bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIGJvb2wpCiB7CiAgICAgLy8gQXN5bmNGaWxlU3lzdGVtOjpvcGVuRmls
ZVN5c3RlbSBjYWxscyBjYWxsYmFja3Mgc3luY2hyb25vdXNseSwgc28gdGhlIG1ldGhvZCBuZWVk
cyB0byBiZSBjYWxsZWQgYXN5bmNocm9ub3VzbHkuCiAgICAgY29udGV4dC0+cG9zdFRhc2soY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZvcGVuRmlsZVN5c3RlbSwgZmlsZVN5c3RlbUJhc2VQYXRoKCksIGNv
bnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmRhdGFiYXNlSWRlbnRpZmllcigpLCB0eXBlLCBmYWxz
ZSwgY2FsbGJhY2tzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2Fs
RmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaApp
bmRleCBiYWY3MmQ5ZDBjMjRkZTdhYzlkY2FjYTJlZmVhZDMyMDE3YzkwZjJiLi4yZWFiZDdhMjNk
MzY5ZmQzYWJjZjA4ZDYyN2U2OTlhYjhkZWU3MjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
TG9jYWxGaWxlU3lzdGVtLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBM
b2NhbEZpbGVTeXN0ZW0mIGxvY2FsRmlsZVN5c3RlbSgpOwogCiAgICAgLy8gRG9lcyBub3QgY3Jl
YXRlIHRoZSByb290IHBhdGggZm9yIGZpbGUgc3lzdGVtLCBqdXN0IHJlYWRzIGl0IGlmIGF2YWls
YWJsZS4KLSAgICB2b2lkIHJlYWRGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBB
c3luY0ZpbGVTeXN0ZW06OlR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
Pik7CisgICAgdm9pZCByZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5
bmNGaWxlU3lzdGVtOjpUeXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4s
IGJvb2wgc3luY2hyb25vdXMgPSBmYWxzZSk7CiAKICAgICB2b2lkIHJlcXVlc3RGaWxlU3lzdGVt
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9u
ZyBzaXplLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4sIGJvb2wgc3luY2hy
b25vdXMgPSBmYWxzZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3Bw
CmluZGV4IGFjZjdmMDQ2ZDc1Mzc2MWExMTFmYjhiMzhkMjUyNzQyM2FhOWY1MTIuLjRjNGE5NThl
YTgxNTE2NzY0OTI0YTZkMTMwNGZmZDYyOWVhNTA4OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtNjcsOSArNjcsMTIgQEAKIAogI2lmIEVOQUJMRShGSUxF
X1NZU1RFTSkKICNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJEaXJlY3Rv
cnlFbnRyeVN5bmMuaCIKICNpbmNsdWRlICJET01GaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiRE9N
RmlsZVN5c3RlbUJhc2UuaCIKICNpbmNsdWRlICJET01GaWxlU3lzdGVtU3luYy5oIgogI2luY2x1
ZGUgIkVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJGaWxlRW50cnlTeW5jLmgiCiAjaW5jbHVk
ZSAiRmlsZUVycm9yLmgiCiAjaW5jbHVkZSAiRmlsZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkZp
bGVTeXN0ZW1DYWxsYmFjay5oIgpAQCAtMzc3LDYgKzM4MCw1MyBAQCBQYXNzUmVmUHRyPERPTUZp
bGVTeXN0ZW1TeW5jPiBXb3JrZXJDb250ZXh0OjpyZXF1ZXN0RmlsZVN5c3RlbVN5bmMoaW50IHR5
cGUsIGxvbgogICAgIHJldHVybiBoZWxwZXIuZ2V0UmVzdWx0KGVjKTsKIH0KIAordm9pZCBXb3Jr
ZXJDb250ZXh0OjpyZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJKGNvbnN0IFN0cmluZyYgdXJpLCBQ
YXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQoreworICAgIEtVUkwgY29tcGxldGVkVVJMID0gY29t
cGxldGVVUkwodXJpKTsKKyAgICBpZiAoIUFzeW5jRmlsZVN5c3RlbTo6aXNBdmFpbGFibGUoKSB8
fCAhc2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRmlsZVN5c3RlbSgpIHx8ICFzZWN1cml0eU9y
aWdpbigpLT5jYW5SZXF1ZXN0KGNvbXBsZXRlZFVSTCkpIHsKKyAgICAgICAgRE9NRmlsZVN5c3Rl
bTo6c2NoZWR1bGVDYWxsYmFjayh0aGlzLCBlcnJvckNhbGxiYWNrLCBGaWxlRXJyb3I6OmNyZWF0
ZShGaWxlRXJyb3I6OlNFQ1VSSVRZX0VSUikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGU7CisgICAgU3RyaW5nIGZpbGVQYXRoOworICAg
IGlmICghY29tcGxldGVkVVJMLmlzVmFsaWQoKSB8fCAhRE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNr
RmlsZVN5c3RlbVVSTChjb21wbGV0ZWRVUkwsIHR5cGUsIGZpbGVQYXRoKSkgeworICAgICAgICBE
T01GaWxlU3lzdGVtOjpzY2hlZHVsZUNhbGxiYWNrKHRoaXMsIGVycm9yQ2FsbGJhY2ssIEZpbGVF
cnJvcjo6Y3JlYXRlKEZpbGVFcnJvcjo6U1lOVEFYX0VSUikpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgTG9jYWxGaWxlU3lzdGVtOjpsb2NhbEZpbGVTeXN0ZW0oKS5yZWFkRmlsZVN5
c3RlbSh0aGlzLCB0eXBlLCBSZXNvbHZlVVJJQ2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0NhbGxi
YWNrLCBlcnJvckNhbGxiYWNrLCB0aGlzLCBmaWxlUGF0aCkpOworfQorCitQYXNzUmVmUHRyPEVu
dHJ5U3luYz4gV29ya2VyQ29udGV4dDo6cmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkkoY29u
c3QgU3RyaW5nJiB1cmksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBL
VVJMIGNvbXBsZXRlZFVSTCA9IGNvbXBsZXRlVVJMKHVyaSk7CisgICAgaWYgKCFBc3luY0ZpbGVT
eXN0ZW06OmlzQXZhaWxhYmxlKCkgfHwgIXNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0ZpbGVT
eXN0ZW0oKSB8fCAhc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChjb21wbGV0ZWRVUkwpKSB7
CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6U0VDVVJJVFlfRVJSOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZTsKKyAgICBTdHJp
bmcgZmlsZVBhdGg7CisgICAgaWYgKCFjb21wbGV0ZWRVUkwuaXNWYWxpZCgpIHx8ICFET01GaWxl
U3lzdGVtQmFzZTo6Y3JhY2tGaWxlU3lzdGVtVVJMKGNvbXBsZXRlZFVSTCwgdHlwZSwgZmlsZVBh
dGgpKSB7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6U1lOVEFYX0VSUjsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgRmlsZVN5c3RlbVN5bmNDYWxsYmFja0hlbHBlciByZWFk
RmlsZVN5c3RlbUhlbHBlcjsKKyAgICBMb2NhbEZpbGVTeXN0ZW06OmxvY2FsRmlsZVN5c3RlbSgp
LnJlYWRGaWxlU3lzdGVtKHRoaXMsIHR5cGUsIEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0ZShy
ZWFkRmlsZVN5c3RlbUhlbHBlci5zdWNjZXNzQ2FsbGJhY2soKSwgcmVhZEZpbGVTeXN0ZW1IZWxw
ZXIuZXJyb3JDYWxsYmFjaygpLCB0aGlzKSwgdHJ1ZSk7CisgICAgUmVmUHRyPERPTUZpbGVTeXN0
ZW1TeW5jPiBmcyA9IHJlYWRGaWxlU3lzdGVtSGVscGVyLmdldFJlc3VsdChlYyk7CisgICAgaWYg
KCFmcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8RW50cnlTeW5jPiBlbnRyeSA9
IGZzLT5yb290KCktPmdldERpcmVjdG9yeShmaWxlUGF0aCwgMCwgZWMpOworICAgIGlmIChlYyA9
PSBGaWxlRXhjZXB0aW9uOjpUWVBFX01JU01BVENIX0VSUikKKyAgICAgICAgcmV0dXJuIGZzLT5y
b290KCktPmdldEZpbGUoZmlsZVBhdGgsIDAsIGVjKTsKKworICAgIHJldHVybiBlbnRyeS5yZWxl
YXNlKCk7Cit9CisKIENPTVBJTEVfQVNTRVJUKHN0YXRpY19jYXN0PGludD4oV29ya2VyQ29udGV4
dDo6VEVNUE9SQVJZKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9y
YXJ5KSwgZW51bV9taXNtYXRjaCk7CiBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KFdv
cmtlckNvbnRleHQ6OlBFUlNJU1RFTlQpID09IHN0YXRpY19jYXN0PGludD4oQXN5bmNGaWxlU3lz
dGVtOjpQZXJzaXN0ZW50KSwgZW51bV9taXNtYXRjaCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmgKaW5kZXggMmU4MDJmMjU1MjRkMTY0NTg2YjFkYTBiNmEwY2Iz
OTczYjZhZDM2ZC4uOGNmMmJlMWM5NzNlZmMyZDBiMmRhOTQ0YzY1YWY3Nzk0ODhiNjQ4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKQEAgLTUwLDYgKzUwLDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIERhdGFiYXNlOwogICAgIGNsYXNzIERhdGFiYXNl
Q2FsbGJhY2s7CiAgICAgY2xhc3MgRGF0YWJhc2VTeW5jOworICAgIGNsYXNzIEVudHJ5Q2FsbGJh
Y2s7CisgICAgY2xhc3MgRW50cnlTeW5jOwogICAgIGNsYXNzIEVycm9yQ2FsbGJhY2s7CiAgICAg
Y2xhc3MgRmlsZVN5c3RlbUNhbGxiYWNrOwogICAgIGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlcjsK
QEAgLTEzMSw2ICsxMzMsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH07CiAgICAg
ICAgIHZvaWQgcmVxdWVzdEZpbGVTeXN0ZW0oaW50IHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNz
UmVmUHRyPEZpbGVTeXN0ZW1DYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwog
ICAgICAgICBQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW1TeW5jPiByZXF1ZXN0RmlsZVN5c3RlbVN5
bmMoaW50IHR5cGUsIGxvbmcgbG9uZyBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZv
aWQgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSShjb25zdCBTdHJpbmcmIHVyaSwgUGFzc1JlZlB0
cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisgICAgICAgIFBh
c3NSZWZQdHI8RW50cnlTeW5jPiByZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSSShjb25zdCBT
dHJpbmcmIHVyaSwgRXhjZXB0aW9uQ29kZSYpOwogI2VuZGlmCiAKICAgICAgICAgLy8gVGhlc2Ug
bWV0aG9kcyBhcmUgdXNlZCBmb3IgR0MgbWFya2luZy4gU2VlIEpTV29ya2VyQ29udGV4dDo6bWFy
a0NoaWxkcmVuKE1hcmtTdGFjayYpIGluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuaWRsIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmlkbAppbmRleCAxNzkyMjFlZDRlYjczMDdjM2Q4NTNiMzRkM2U5ZTVjOGNmOWQ3ZDkyLi4y
N2JhODUxODMyMGI5ZDQxYWFhOGZkMGJjODgyZDJhYmU3MmFiMTZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKQEAgLTExMCw2ICsxMTAsOCBAQCBtb2R1bGUgdGhy
ZWFkcyB7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBFUlNJU1RFTlQgPSAxOwogICAg
ICAgICBbRW5hYmxlZEF0UnVudGltZT1GaWxlU3lzdGVtXSB2b2lkIHJlcXVlc3RGaWxlU3lzdGVt
KGluIHVuc2lnbmVkIHNob3J0IHR5cGUsIGluIGxvbmcgbG9uZyBzaXplLCBpbiBbQ2FsbGJhY2ss
IE9wdGlvbmFsXSBGaWxlU3lzdGVtQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBbQ2FsbGJh
Y2ssIE9wdGlvbmFsXSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwogICAgICAgICBbRW5h
YmxlZEF0UnVudGltZT1GaWxlU3lzdGVtXSBET01GaWxlU3lzdGVtU3luYyByZXF1ZXN0RmlsZVN5
c3RlbVN5bmMoaW4gdW5zaWduZWQgc2hvcnQgdHlwZSwgaW4gbG9uZyBsb25nIHNpemUpIHJhaXNl
cyAoRmlsZUV4Y2VwdGlvbik7CisgICAgICAgIFtFbmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1d
IHZvaWQgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSShpbiBET01TdHJpbmcgdXJpLCBpbiBbQ2Fs
bGJhY2ssIE9wdGlvbmFsXSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW0NhbGxi
YWNrLCBPcHRpb25hbF0gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKKyAgICAgICAgW0Vu
YWJsZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0gRW50cnlTeW5jIHJlc29sdmVMb2NhbEZpbGVTeXN0
ZW1TeW5jVVJJKGluIERPTVN0cmluZyB1cmkpIHJhaXNlcyAoRmlsZUV4Y2VwdGlvbik7CiAKICAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIEZs
YWdzQ29uc3RydWN0b3IgRmxhZ3M7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggMTFlYzM2NzgzOThmODJkZjBlM2YxYzMyZmVkYWQxMjYxY2UzYjFhZS4uOWNhYjY0NDM3YThm
ZWNkYWQ3MzA5MzVlZjNmOTQ4MDEwYjNiZGJlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNCBAQAorMjAxMS0wMy0wMiAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
ZmlsZWFwaV0gQWRkIFVSSSByZXNvbHV0aW9uIHN1cHBvcnQgdG8gV29ya2VyQ29udGV4dAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU2NDQKKworICAg
ICAgICBQYXNzICJjcmVhdGUiIGJvb2wgdGhyb3VnaCB0byBhbGxvdyBvcGVuaW5nCisgICAgICAg
IGEgZmlsZXN5c3RlbSB3aXRob3V0IGFsbG93aW5nIGNyZWF0aW9uLgorCisgICAgICAgICogc3Jj
L0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsRmls
ZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxGaWxlU3lz
dGVtOjpyZXF1ZXN0RmlsZVN5c3RlbSk6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJCYXNlOjpvcGVuRmlsZVN5c3RlbUZvcldvcmtl
cik6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuaDoKKyAgICAgICAgKiBzcmMvV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZCk6
CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om9wZW5G
aWxlU3lzdGVtT25NYWluVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZS5oOgorCiAyMDExLTAzLTAzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92aW5nIGFuIGluY2x1ZGUgb2YgV2ViQ29yZUtleWJv
YXJkVUlNb2RlLmggdGhhdCBJdmUganVzdCBhZGRlZC4gSXQncyBhbHJlYWR5IGluY2x1ZGVkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJv
bWl1bS5jcHAKaW5kZXggMzVlNGRlODI4OWQ5MjU4MGJmNzJjYTZhZDMwMmE3NTI5MzFiYmQzNC4u
ZGVhYzMzMThkYjQ4ZmNjYmQ0MzkxZGM1ZjFmMzc0ZTQ4MzE1NWU3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcApA
QCAtNTcsMjkgKzU3LDQwIEBAIExvY2FsRmlsZVN5c3RlbSYgTG9jYWxGaWxlU3lzdGVtOjpsb2Nh
bEZpbGVTeXN0ZW0oKQogICAgIHJldHVybiAqbG9jYWxGaWxlU3lzdGVtOwogfQogCi12b2lkIExv
Y2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lz
dGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQgJiYgY29udGV4
dC0+aXNEb2N1bWVudCgpKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxE
b2N1bWVudCo+KGNvbnRleHQpOwotICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFt
ZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgd2ViRnJhbWUtPmNsaWVu
dCgpLT5vcGVuRmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6
VHlwZT4odHlwZSksIDAsIGZhbHNlLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2Fs
bGJhY2tzLCB0eXBlKSk7Ci19CituYW1lc3BhY2UgewogCi12b2lkIExvY2FsRmlsZVN5c3RlbTo6
cmVxdWVzdEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNG
aWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQorZW51bSBDcmVh
dGlvbkZsYWcgeworICAgIE9wZW5FeGlzdGluZywKKyAgICBDcmVhdGVJZk5vdFByZXNlbnQKK307
CisKK3ZvaWQgb3BlbkZpbGVTeXN0ZW1IZWxwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lz
dGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMsIGxvbmcgbG9uZyBzaXpl
LCBDcmVhdGlvbkZsYWcgY3JlYXRlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBpZiAo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0
YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CiAgICAgICAgIFdlYkZyYW1lSW1wbCogd2Vi
RnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAg
ICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRpY19j
YXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCB0cnVlLCBuZXcgV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlKSk7CisgICAgICAgIHdlYkZyYW1lLT5j
bGllbnQoKS0+b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0
ZW06OlR5cGU+KHR5cGUpLCBzaXplLCBjcmVhdGUgPT0gQ3JlYXRlSWZOb3RQcmVzZW50LCBuZXcg
V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdv
cmtlckNvbnRleHQqPihjb250ZXh0KTsKICAgICAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtl
ckxvYWRlclByb3h5ID0gJndvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94
eSgpOwogICAgICAgICBXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJX
b3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkpOwotICAgICAgICB3ZWJXb3JrZXItPm9wZW5G
aWxlU3lzdGVtRm9yV29ya2VyKHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUp
LCBzaXplLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlLCBj
b250ZXh0LCBzeW5jaHJvbm91cyksIHN5bmNocm9ub3VzKTsKKyAgICAgICAgd2ViV29ya2VyLT5v
cGVuRmlsZVN5c3RlbUZvcldvcmtlcihzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0
eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZpbGVTeXN0
ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMpLCBz
eW5jaHJvbm91cyk7CiAgICAgfQogfQogCit9IC8vIG5hbWVzcGFjZQorCit2b2lkIExvY2FsRmls
ZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
QXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMpCit7CisgICAgb3BlbkZpbGVTeXN0
ZW1IZWxwZXIoY29udGV4dCwgdHlwZSwgY2FsbGJhY2tzLCBzeW5jaHJvbm91cywgMCwgT3BlbkV4
aXN0aW5nKTsKK30KKwordm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJlcXVlc3RGaWxlU3lzdGVtKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBl
LCBsb25nIGxvbmcgc2l6ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNh
bGxiYWNrcywgYm9vbCBzeW5jaHJvbm91cykKK3sKKyAgICBvcGVuRmlsZVN5c3RlbUhlbHBlcihj
b250ZXh0LCB0eXBlLCBjYWxsYmFja3MsIHN5bmNocm9ub3VzLCBzaXplLCBDcmVhdGVJZk5vdFBy
ZXNlbnQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
RklMRV9TWVNURU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJX
b3JrZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2Uu
Y3BwCmluZGV4IGIxNmI2ZDQwN2MwYTc3N2E3NTA1NzY2ZTAzM2Y5YTQ1MzgyNTJlZDUuLjRiMjdk
ZGIzN2QyNDY5ZTU1YjJjYTM1MmYyYjhlZGM3YWI3MmMyNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCkBAIC0yMzcsNyArMjM3LDcgQEAgYm9vbCBX
ZWJXb3JrZXJCYXNlOjphbGxvd0RhdGFiYXNlKFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBu
YW1lLCBjb25zdCBXZWJTdHIKIH0KIAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLXZvaWQgV2Vi
V29ya2VyQmFzZTo6b3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSB0
eXBlLCBsb25nIGxvbmcgc2l6ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBi
b29sIHN5bmNocm9ub3VzKQordm9pZCBXZWJXb3JrZXJCYXNlOjpvcGVuRmlsZVN5c3RlbUZvcldv
cmtlcihXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0
ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQog
ewogICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgp
OwogICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZv
aWQgV2ViV29ya2VyQmFzZTo6b3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6
VHlwZSB0eXBlLCBsb25nIGxvbmcKICAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5M
b29wLmNyZWF0ZVVuaXF1ZUlkKCkpKTsKIAogICAgIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlPiBicmlkZ2UgPSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpj
cmVhdGUodGhpcywgd29ya2VyQ29udGV4dCwgY2FsbGJhY2tzKTsKLSAgICBicmlkZ2UtPnBvc3RP
cGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChjb21tb25DbGllbnQoKSwgdHlwZSwgc2l6ZSwgbW9k
ZSk7CisgICAgYnJpZGdlLT5wb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoY29tbW9uQ2xp
ZW50KCksIHR5cGUsIHNpemUsIGNyZWF0ZSwgbW9kZSk7CiAKICAgICBpZiAoc3luY2hyb25vdXMp
IHsKICAgICAgICAgaWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUpID09
IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJXb3JrZXJCYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJX
b3JrZXJCYXNlLmgKaW5kZXggZWM3MzUwNTY5YTg3NGVhOTgyNThiZTgyOTc2YTJhYWIwNDNmMGU1
My4uOGZiMDMyZTYxN2VmZGIyZjM3YmE1YTk5MTFhNTJjMjViM2JlMzlkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaApAQCAtOTIsNyArOTIsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGFsbG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSk7CiAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0gICAgdm9pZCBvcGVu
RmlsZVN5c3RlbUZvcldvcmtlcihXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwg
V2ViRmlsZVN5c3RlbUNhbGxiYWNrcyosIGJvb2wgc3luY2hyb25vdXMpOworICAgIHZvaWQgb3Bl
bkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUs
IGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiwgYm9vbCBzeW5jaHJvbm91cyk7
CiAjZW5kaWYKIAogICAgIC8vIEV4ZWN1dGVzIHRoZSBnaXZlbiB0YXNrIG9uIHRoZSBtYWluIHRo
cmVhZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKaW5kZXggNmMzMTIyMTdiNjU3ZjNkNTg2
NTk2Njk2ZmQ0YzkyZjc5YmIwNzhkZC4uOTgxN2MwMTgxZGU3NDMxYTE5YmQwYmZkNjY3MzE5MDg3
Yjg1M2UyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKQEAgLTE1MCw5ICsxNTAsOSBA
QCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnN0b3AoKQogICAgIH0KIH0K
IAotdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVTeXN0
ZW1Ub01haW5UaHJlYWQoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZp
bGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYgbW9kZSkK
K3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxlU3lzdGVt
VG9NYWluVGhyZWFkKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxl
U3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgY29uc3QgU3Ry
aW5nJiBtb2RlKQogewotICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFj
a1Rhc2soJm9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkLCBjb21tb25DbGllbnQsIHR5cGUsIHNp
emUsIHRoaXMsIG1vZGUpKTsKKyAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZCwgY29tbW9uQ2xpZW50LCB0eXBl
LCBzaXplLCBjcmVhdGUsIHRoaXMsIG1vZGUpKTsKIH0KIAogdm9pZCBXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlOjpwb3N0TW92ZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiBmaWxl
U3lzdGVtLCBjb25zdCBTdHJpbmcmIHNvdXJjZVBhdGgsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRp
b25QYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpCkBAIC0yMTIsMTIgKzIxMiwxMiBAQCB2b2lkIFdv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RSZWFkRGlyZWN0b3J5VG9NYWluVGhy
ZWFkKFdlYkZpbGVTeXN0ZQogICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxs
YmFja1Rhc2soJnJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQsIGZpbGVTeXN0ZW0sIHBhdGgsIHRo
aXMsIG1vZGUpKTsKIH0KIAotdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpv
cGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29t
bW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwg
bG9uZyBsb25nIHNpemUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqIGJyaWRnZSwg
Y29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
OjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlw
ZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlKiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBpZiAoIWNvbW1vbkNs
aWVudCkKICAgICAgICAgYnJpZGdlLT5kaWRGYWlsT25NYWluVGhyZWFkKFdlYkZpbGVFcnJvckFi
b3J0LCBtb2RlKTsKICAgICBlbHNlIHsKLSAgICAgICAgY29tbW9uQ2xpZW50LT5vcGVuRmlsZVN5
c3RlbSh0eXBlLCBzaXplLCBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6Y3JlYXRlTGVh
a2VkUHRyKGJyaWRnZSwgbW9kZSkpOworICAgICAgICBjb21tb25DbGllbnQtPm9wZW5GaWxlU3lz
dGVtKHR5cGUsIHNpemUsIGNyZWF0ZSwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNy
ZWF0ZUxlYWtlZFB0cihicmlkZ2UsIG1vZGUpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2UuaAppbmRleCBmYTU3ZjM4Mjk4ZjczMTAzZDM4ZGJhZjFlMzg3MTU3NWY1NTAxNGM4Li44
NGNkZGFkMmQ1YzQ5ODNiZDlhNjkxYzJmYTZiOWU4MWJkOWJiOTM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZS5oCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBNZXRo
b2RzIHRoYXQgY3JlYXRlIGFuIGluc3RhbmNlIGFuZCBwb3N0IGFuIGluaXRpYWwgcmVxdWVzdCB0
YXNrIHRvIHRoZSBtYWluIHRocmVhZC4gVGhleSBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgd29ya2Vy
IHRocmVhZC4KLSAgICB2b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21t
b25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgY29u
c3QgU3RyaW5nJiBtb2RlKTsKKyAgICB2b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVh
ZChXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcg
c2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBwb3N0TW92
ZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBzcmNQYXRoLCBjb25z
dCBTdHJpbmcmIGRlc3RQYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdENv
cHlUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgc3JjUGF0aCwgY29u
c3QgU3RyaW5nJiBkZXN0UGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICB2b2lkIHBvc3RS
ZW1vdmVUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgU3RyaW5nJiBtb2RlKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgIFdvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2ViV29ya2VyQmFzZSosIFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKik7CiAKICAgICAvLyBN
ZXRob2RzIHRoYXQgYXJlIHRvIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgc3Rh
dGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5cGUs
IGxvbmcgbG9uZyBzaXplLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3Qg
U3RyaW5nJiBtb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVh
ZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50
KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICBz
dGF0aWMgdm9pZCBtb3ZlT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBzcmNQYXRoLCBjb25zdCBTdHJpbmcm
IGRlc3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5n
JiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCBjb3B5T25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBzcmNQYXRo
LCBjb25zdCBTdHJpbmcmIGRlc3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
KiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVPbk1haW5UaHJl
YWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25z
dCBTdHJpbmcmIHBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBT
dHJpbmcmIG1vZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86215</attachid>
            <date>2011-03-18 14:47:43 -0700</date>
            <delta_ts>2011-03-18 17:48:30 -0700</delta_ts>
            <desc>Now with tests, but not ready for review</desc>
            <filename>bug-55644-20110318144741.patch</filename>
            <type>text/plain</type>
            <size>35915</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE0ODkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxOWUyMzNiNDM0ZWUxNGE3ODRlNTJm
ODZiMWVlMWJmNzcwYjM0MjM2Li5mYmZhNjQ5ZGYzODIwMTY5MzkyNzZmMTJhZWUzZWI2NDZjZjg0
ZjE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDMtMTggIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2ZpbGVhcGldIEFkZCBVUkkgcmVzb2x1dGlvbiBzdXBwb3J0IHRvIFdvcmtlckNv
bnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1
NjQ0CisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZzLXdvcmtl
ci1jb21tb24uanM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZmlsZXN5c3RlbS9yZXNv
dXJjZXMvZnMtd29ya2VyLXRlc3QtdXRpbC5qczogQWRkZWQuCisgICAgICAgIENvcGllZCBmcm9t
IGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMgZm9yIHVzZSBieSBIVFRQIHRlc3RzLgorICAgICAg
ICAqIGh0dHAvdGVzdHMvZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvcmVzb2x2ZS11cmkuanM6Cisg
ICAgICAgIFVwZGF0ZWQgdG8gYmUgdXNlZCBlaXRoZXIgaW4gd2luZG93IG9yIHdvcmtlciBjb250
ZXh0LgorICAgICAgICAqIGh0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJs
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dv
cmtlcnMvcmVzb2x2ZS11cmwtc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLXN5bmMuaHRtbDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMvcmVzb2x2ZS11cmwuaHRt
bDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMvc2NyaXB0
LXRlc3RzL1RFTVBMQVRFLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZmlsZXN5
c3RlbS93b3JrZXJzL3NjcmlwdC10ZXN0cy9yZXNvbHZlLXVybC1zeW5jLmpzOiBBZGRlZC4KKwog
MjAxMS0wMy0xOCAgSnVzdGluIE5vdm9zYWQgIDxqdW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9maWxlc3lzdGVtL3Jlc291cmNlcy9mcy13b3JrZXItY29tbW9uLmpzIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lzdGVtL3Jlc291cmNlcy9mcy13b3JrZXItY29tbW9u
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmY2MzQxMjI0ZDhiOGQ3MTFjNmIwMzUyM2RlMTkxZDc1OWY4ZGFhNzIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vcmVz
b3VyY2VzL2ZzLXdvcmtlci1jb21tb24uanMKQEAgLTAsMCArMSw1NiBAQAorZnVuY3Rpb24gZGVi
dWcobWVzc2FnZSkKK3sKKyAgICBwb3N0TWVzc2FnZSgiTUVTRzoiICsgbWVzc2FnZSk7Cit9CisK
K2Z1bmN0aW9uIGZpbmlzaEpTVGVzdCgpCit7CisgICAgcG9zdE1lc3NhZ2UoIkRPTkU6Iik7Cit9
CisKK2Z1bmN0aW9uIGRlc2NyaXB0aW9uKG1lc3NhZ2UpCit7CisgICAgcG9zdE1lc3NhZ2UoJ0RF
U0M6JyArIG1lc3NhZ2UpOworfQorCitmdW5jdGlvbiB0ZXN0UGFzc2VkKG1zZykgeworICAgIHBv
c3RNZXNzYWdlKCJQQVNTOiIgKyBtc2cpOworfQorCitmdW5jdGlvbiB0ZXN0RmFpbGVkKG1zZykg
eworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiIgKyBtc2cpOworfQorCitmdW5jdGlvbiBzaG91bGRC
ZShfYSwgX2IpCit7CisgIGlmICh0eXBlb2YgX2EgIT0gInN0cmluZyIgfHwgdHlwZW9mIF9iICE9
ICJzdHJpbmciKQorICAgIGRlYnVnKCJXQVJOOiBzaG91bGRCZSgpIGV4cGVjdHMgc3RyaW5nIGFy
Z3VtZW50cyIpOworICB2YXIgX2F2ID0gZXZhbChfYSk7CisgIHZhciBfYnYgPSBldmFsKF9iKTsK
KyAgaWYgKF9hdiA9PT0gX2J2KQorICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzICIgKyBfYik7Cisg
IGVsc2UKKyAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgIiArIF9idiArICIgKG9mIHR5
cGUgIiArIHR5cGVvZiBfYnYgKyAiKS4gV2FzICIgKyBfYXYgKyAiIChvZiB0eXBlICIgKyB0eXBl
b2YgX2F2ICsgIikuIik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlVHJ1ZShfYSkgeyBzaG91bGRC
ZShfYSwgInRydWUiKTsgfQorCitmdW5jdGlvbiByZW1vdmVBbGxJbkRpcmVjdG9yeVN5bmMoZGly
ZWN0b3J5KSB7CisgICAgaWYgKCFkaXJlY3RvcnkpCisgICAgICAgIHJldHVybjsKKyAgICB2YXIg
cmVhZGVyID0gZGlyZWN0b3J5LmNyZWF0ZVJlYWRlcigpOworICAgIGRvIHsKKyAgICAgICAgdmFy
IGVudHJpZXMgPSByZWFkZXIucmVhZEVudHJpZXMoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBlbnRyaWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoZW50cmllc1tpXS5p
c0RpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICBlbnRyaWVzW2ldLnJlbW92ZVJlY3Vyc2l2ZWx5
KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZW50cmllc1tpXS5yZW1vdmUo
KTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGVudHJpZXMubGVuZ3RoKTsKK30KKworaWYgKHRo
aXMuaW1wb3J0U2NyaXB0cyAmJiAhdGhpcy5yZXF1ZXN0RmlsZVN5c3RlbSkgeworICAgIGRlYnVn
KCdUaGlzIHRlc3QgcmVxdWlyZXMgRmlsZVN5c3RlbSBBUEkuJyk7CisgICAgZmluaXNoSlNUZXN0
KCk7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vcmVz
b3VyY2VzL2ZzLXdvcmtlci10ZXN0LXV0aWwuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Zp
bGVzeXN0ZW0vcmVzb3VyY2VzL2ZzLXdvcmtlci10ZXN0LXV0aWwuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmE3
MzhhYWI5MzhiMjFkOWQyMmE5MmE0N2ViZDQ3MGYwOTVmMTM2MgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZnMtd29ya2VyLXRl
c3QtdXRpbC5qcwpAQCAtMCwwICsxLDMyIEBACit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7
CisKK2Z1bmN0aW9uIHN0YXJ0V29ya2VyKHRlc3RTY3JpcHRVUkwpCit7CisgICAgZGVidWcoJ1N0
YXJ0aW5nIHdvcmtlcjogJyArIHRlc3RTY3JpcHRVUkwpOworICAgIHZhciB3b3JrZXIgPSBuZXcg
V29ya2VyKHRlc3RTY3JpcHRVUkwpOworICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihl
dmVudCkKKyAgICB7CisgICAgICAgIGlmIChldmVudC5kYXRhLmxlbmd0aCA8IDUgfHwgZXZlbnQu
ZGF0YS5jaGFyQXQoNCkgIT0gJzonKSB7CisgICAgICAgICAgICBkZWJ1ZygiR290IGludmFsaWQg
bWVzc2FnZSBmcm9tIHdvcmtlcjoiICsgKGV2ZW50LmRhdGEgPyBldmVudC5kYXRhIDogIm51bGwi
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgY29kZSA9IGV2ZW50LmRhdGEu
c3Vic3RyaW5nKDAsIDQpOworICAgICAgICAgICAgdmFyIHBheWxvYWQgPSAiW1dvcmtlcl0gIiAr
IGV2ZW50LmRhdGEuc3Vic3RyaW5nKDUpOworICAgICAgICAgICAgaWYgKGNvZGUgPT0gIlBBU1Mi
KQorICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQocGF5bG9hZCk7CisgICAgICAgICAgICBlbHNl
IGlmIChjb2RlID09ICJGQUlMIikKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKHBheWxvYWQp
OworICAgICAgICAgICAgZWxzZSBpZiAoY29kZSA9PSAiREVTQyIpCisgICAgICAgICAgICAgICAg
ZGVzY3JpcHRpb24ocGF5bG9hZCk7CisgICAgICAgICAgICBlbHNlIGlmIChjb2RlID09ICJET05F
IikKKyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGNvZGUgPT0gIk1FU0ciKQorICAgICAgICAgICAgICAgIGRlYnVnKHBheWxvYWQpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHdvcmtlci5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpCisgICAg
eworICAgICAgICBkZWJ1ZygnR290IGVycm9yIGZyb20gd29ya2VyOiAnICsgZXZlbnQubWVzc2Fn
ZSk7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvcmVzb2x2ZS11cmkuanMg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vc2NyaXB0LXRlc3RzL3Jlc29sdmUt
dXJpLmpzCmluZGV4IGY1YWYyOGJhZTZlYmRmZTEwNDNjMTNmMThkOTkxYjI0Y2ZmZmVkNDAuLjBk
NTAxMTZiODhmYjZhMjZhMmUzMDk4ZDJmNDc2NWJhYmFjZWZjYzIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvcmVzb2x2ZS11cmkuanMK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZXNv
bHZlLXVyaS5qcwpAQCAtMSwzICsxLDggQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAg
ICBpbXBvcnRTY3JpcHRzKCcuLi9yZXNvdXJjZXMvZnMtd29ya2VyLWNvbW1vbi5qcycpOworICAg
IGltcG9ydFNjcmlwdHMoJy4uL3Jlc291cmNlcy9mcy10ZXN0LXV0aWwuanMnKTsKK30KKwogZGVz
Y3JpcHRpb24oIlRlc3RzIHVzaW5nIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwgdG8gb2J0YWlu
IGFuIEVudHJ5IGZyb20gYSBVUkwiKTsKIAogdmFyIHRlc3RGaWxlTmFtZSA9ICcvdGVzdEZpbGUn
OwpAQCAtMTYzLDEwICsxNjgsMTAgQEAgZnVuY3Rpb24gZmlsZVN5c3RlbUNhbGxiYWNrKGZzKSB7
CiAgICAgY2xlYW51cEFuZFJ1bk5leHQoKTsKIH0KIAotaWYgKHdpbmRvdy5yZXF1ZXN0RmlsZVN5
c3RlbSkgewotICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKLSAgICByZXF1ZXN0Rmls
ZVN5c3RlbSh3aW5kb3cuVEVNUE9SQVJZLCAxMDAsIGZpbGVTeXN0ZW1DYWxsYmFjaywgZXJyb3JD
YWxsYmFjayk7CitpZiAodGhpcy5yZXF1ZXN0RmlsZVN5c3RlbSkgeworICAgIGpzVGVzdElzQXN5
bmMgPSB0cnVlOworICAgIHJlcXVlc3RGaWxlU3lzdGVtKHRoaXMuVEVNUE9SQVJZLCAxMDAsIGZp
bGVTeXN0ZW1DYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiB9IGVsc2UKICAgICBkZWJ1ZygiVGhp
cyB0ZXN0IHJlcXVpcmVzIEZpbGVTeXN0ZW0gQVBJIHN1cHBvcnQuIik7CiAKLXdpbmRvdy5zdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNv
bHZlLXVybC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0v
d29ya2Vycy9yZXNvbHZlLXVybC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWViODRlODlmZGJh
YTFmYTdiYzcxZDRkMTI1YWIwZWJmOGEwYzhhMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDM3IEBACitbV29ya2VyXSBUZXN0cyB1c2luZyByZXNvbHZlTG9jYWxGaWxl
U3lzdGVtVVJMIHRvIG9idGFpbiBhbiBFbnRyeSBmcm9tIGEgVVJMCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitTdGFydGluZyB3b3JrZXI6IC4uL3NjcmlwdC10ZXN0cy9yZXNvbHZl
LXVyaS5qcworW1dvcmtlcl0gKiBSZXNvbHZpbmcgYSBnZW5lcmF0ZWQgVVJMLgorUEFTUyBbV29y
a2VyXSBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29ya2VyXSBpc0ZpbGUgaXMg
dHJ1ZQorW1dvcmtlcl0gKiBSZXNvbHZpbmcgdGVzdCBmaWxlIGJ5IGhhbmQKK1BBU1MgW1dvcmtl
cl0gZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgKK1BBU1MgW1dvcmtlcl0gaXNGaWxlIGlzIHRy
dWUKK1tXb3JrZXJdICogUmVzb2x2aW5nIGEgY29tcGxldGVseSBib2d1cyBVUkwuCitQQVNTIFtX
b3JrZXJdIAorW1dvcmtlcl0gKiBSZXNvbHZpbmcgYSBVUkwgd2l0aCB0aGUgd3JvbmcgcHJvdG9j
b2wKK1BBU1MgW1dvcmtlcl0gCitbV29ya2VyXSAqIFJlc29sdmluZyBhIFVSTCB3aXRoIG5vIHNs
YXNoIGJldHdlZW4gdHlwZSBhbmQgZmlsZQorUEFTUyBbV29ya2VyXSAKK1tXb3JrZXJdICogUmVz
b2x2aW5nIGEgVVJMIHdpdGggbm8gc2xhc2ggYmV0d2VlbiBwcm90b2NvbCBhbmQgdHlwZQorUEFT
UyBbV29ya2VyXSAKK1tXb3JrZXJdICogUmVzb2x2ZSBhIHBhdGggdXNpbmcgYmFja3NsYXNoZXMK
K1BBU1MgW1dvcmtlcl0gZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgKK1BBU1MgW1dvcmtlcl0g
aXNGaWxlIGlzIHRydWUKK1tXb3JrZXJdICogUmVzb2x2ZSBhIGRpcmVjdG9yeQorUEFTUyBbV29y
a2VyXSBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29ya2VyXSBpc0RpcmVjdG9y
eSBpcyB0cnVlCitbV29ya2VyXSAqIFJlc29sdmUgYSBwYXRoIHVzaW5nIGEgdHJhaWxpbmcgc2xh
c2gKK1BBU1MgW1dvcmtlcl0gZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgKK1BBU1MgW1dvcmtl
cl0gaXNEaXJlY3RvcnkgaXMgdHJ1ZQorW1dvcmtlcl0gKiBSZXNvbHZpbmcgYSBwZXJzaXN0ZW50
IFVSTC4KK1BBU1MgW1dvcmtlcl0gZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgKK1BBU1MgW1dv
cmtlcl0gaXNEaXJlY3RvcnkgaXMgdHJ1ZQorW1dvcmtlcl0gRmluaXNoZWQgcnVubmluZyB0ZXN0
cy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNv
bHZlLXVybC1zeW5jLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5
c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLXN5bmMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgx
NjFmNGFlODcwYmUwYjNlYWI2ZGY5ZDA0NmIwNDY4M2Y5Mjc1NDIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZlLXVybC1z
eW5jLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM0IEBACitbV29ya2VyXSBUZXN0cyB1c2luZyBy
ZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTCB0byBvYnRhaW4gYW4gRW50cnkgZnJvbSBhIFVS
TAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworU3RhcnRpbmcgd29ya2VyOiBzY3Jp
cHQtdGVzdHMvcmVzb2x2ZS11cmwtc3luYy5qcworW1dvcmtlcl0gKiBSZXNvbHZpbmcgYSBnZW5l
cmF0ZWQgVVJMLgorUEFTUyBbV29ya2VyXSBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFT
UyBbV29ya2VyXSBpc0ZpbGUgaXMgdHJ1ZQorW1dvcmtlcl0gKiBSZXNvbHZpbmcgdGVzdCBmaWxl
IGJ5IGhhbmQKK1BBU1MgW1dvcmtlcl0gZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgKK1BBU1Mg
W1dvcmtlcl0gaXNGaWxlIGlzIHRydWUKK1tXb3JrZXJdICogUmVzb2x2aW5nIGEgY29tcGxldGVs
eSBib2d1cyBVUkwuCitQQVNTIFtXb3JrZXJdIENhdWdodCBleGNlcHRpb24KK1tXb3JrZXJdICog
UmVzb2x2aW5nIGEgVVJMIHdpdGggdGhlIHdyb25nIHByb3RvY29sCitQQVNTIFtXb3JrZXJdIENh
dWdodCBleGNlcHRpb24KK1tXb3JrZXJdICogUmVzb2x2aW5nIGEgVVJMIHdpdGggbm8gc2xhc2gg
YmV0d2VlbiB0eXBlIGFuZCBmaWxlCitQQVNTIFtXb3JrZXJdIENhdWdodCBleGNlcHRpb24KK1tX
b3JrZXJdICogUmVzb2x2aW5nIGEgVVJMIHdpdGggbm8gc2xhc2ggYmV0d2VlbiBwcm90b2NvbCBh
bmQgdHlwZQorUEFTUyBbV29ya2VyXSBDYXVnaHQgZXhjZXB0aW9uCitbV29ya2VyXSAqIFJlc29s
dmUgYSBkaXJlY3RvcnkKK1BBU1MgW1dvcmtlcl0gZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgK
K1BBU1MgW1dvcmtlcl0gaXNEaXJlY3RvcnkgaXMgdHJ1ZQorW1dvcmtlcl0gKiBSZXNvbHZlIGEg
cGF0aCB1c2luZyBhIHRyYWlsaW5nIHNsYXNoCitQQVNTIFtXb3JrZXJdIGV4cGVjdGVkUGF0aCBp
cyBhY3R1YWxQYXRoCitQQVNTIFtXb3JrZXJdIGlzRGlyZWN0b3J5IGlzIHRydWUKK1tXb3JrZXJd
ICogUmVzb2x2aW5nIGEgcGVyc2lzdGVudCBVUkwuCitQQVNTIFtXb3JrZXJdIGV4cGVjdGVkUGF0
aCBpcyBhY3R1YWxQYXRoCitQQVNTIFtXb3JrZXJdIGlzRGlyZWN0b3J5IGlzIHRydWUKK1tXb3Jr
ZXJdIEZpbmlzaGVkIHJ1bm5pbmcgdGVzdHMuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9maWxlc3lzdGVtL3dvcmtlcnMvcmVzb2x2ZS11cmwtc3luYy5odG1sIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMvcmVzb2x2ZS11cmwtc3luYy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRhYTk3NTE2ZDI1MjgxZTA4ZjkyZmJkZDRjNTE3ZmQ4ZThjMWY2Y2IKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNv
bHZlLXVybC1zeW5jLmh0bWwKQEAgLTAsMCArMSwxNiBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9mcy13b3JrZXItdGVzdC11dGlsLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitzdGFydFdvcmtlcignc2NyaXB0LXRl
c3RzL3Jlc29sdmUtdXJsLXN5bmMuanMnKTsKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZlLXVybC5odG1sIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMvcmVzb2x2ZS11cmwuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMGIwMTQ1M2RmOWM1MGE5OGUwODE2NmE2ZDJkMGY5NGEyNjg0MjRiCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMv
cmVzb2x2ZS11cmwuaHRtbApAQCAtMCwwICsxLDE2IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2ZzLXdvcmtlci10ZXN0LXV0aWwuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK3N0YXJ0V29ya2VyKCcuLi9zY3JpcHQt
dGVzdHMvcmVzb2x2ZS11cmkuanMnKTsKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9zY3JpcHQtdGVzdHMvVEVNUExBVEUuaHRt
bCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3NjcmlwdC10ZXN0
cy9URU1QTEFURS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzOWJiZWI4MzYwODE1OTRlYjcwZmZlNjUzZmJm
ZjY3MWI0MGNlNmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Zp
bGVzeXN0ZW0vd29ya2Vycy9zY3JpcHQtdGVzdHMvVEVNUExBVEUuaHRtbApAQCAtMCwwICsxLDE2
IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvanMtdGVz
dC1yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii9qcy10ZXN0LXJl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2ZzLXdvcmtlci10ZXN0LXV0aWwuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlw
dD4KK3N0YXJ0V29ya2VyKCdZT1VSX0pTX0ZJTEVfSEVSRScpOword2luZG93LnN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3NjcmlwdC10ZXN0
cy9yZXNvbHZlLXVybC1zeW5jLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lzdGVt
L3dvcmtlcnMvc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJsLXN5bmMuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYw
YTk4Njc3MTNjOWY1OTMwYzc3MmJhOGMwNGVmNThjY2ZlZWFhYgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3NjcmlwdC10ZXN0cy9y
ZXNvbHZlLXVybC1zeW5jLmpzCkBAIC0wLDAgKzEsMTU2IEBACitpZiAodGhpcy5pbXBvcnRTY3Jp
cHRzKSB7CisgICAgaW1wb3J0U2NyaXB0cygnLi4vLi4vcmVzb3VyY2VzL2ZzLXdvcmtlci1jb21t
b24uanMnKTsKKyAgICBpbXBvcnRTY3JpcHRzKCcuLi8uLi9yZXNvdXJjZXMvZnMtdGVzdC11dGls
LmpzJyk7Cit9CisKK2Rlc2NyaXB0aW9uKCJUZXN0cyB1c2luZyByZXNvbHZlTG9jYWxGaWxlU3lz
dGVtU3luY1VSTCB0byBvYnRhaW4gYW4gRW50cnkgZnJvbSBhIFVSTCIpOworCit2YXIgdGVzdEZp
bGVOYW1lID0gJy90ZXN0RmlsZSc7Cit2YXIgZmlsZVN5c3RlbSA9IG51bGw7Cit2YXIgZXhwZWN0
ZWRBbmRSdW5OZXh0ID0gZnVuY3Rpb24oKSB7IHRlc3RQYXNzZWQoIiIpOyBjbGVhbnVwQW5kUnVu
TmV4dCgpOyB9OworCit2YXIgZXhwZWN0ZWRQYXRoID0gbnVsbDsKK3ZhciBhY3R1YWxQYXRoID0g
bnVsbDsKKworZnVuY3Rpb24gY3JlYXRlVGVzdEZpbGUoKSB7CisgICAgcmV0dXJuIGZpbGVTeXN0
ZW0ucm9vdC5nZXRGaWxlKHRlc3RGaWxlTmFtZSwge2NyZWF0ZTp0cnVlfSk7Cit9CisKK2Z1bmN0
aW9uIGFzc2VydFBhdGhzTWF0Y2goZXhwZWN0ZWQsIGFjdHVhbCkgeworICAgIGV4cGVjdGVkUGF0
aCA9IGV4cGVjdGVkOworICAgIGFjdHVhbFBhdGggPSBhY3R1YWw7CisgICAgc2hvdWxkQmUoImV4
cGVjdGVkUGF0aCIsICJhY3R1YWxQYXRoIik7Cit9CisKK3ZhciBpc0RpcmVjdG9yeSA9IGZhbHNl
OworZnVuY3Rpb24gYXNzZXJ0SXNEaXJlY3RvcnkoZW50cnkpIHsKKyAgICBpc0RpcmVjdG9yeSA9
IGVudHJ5LmlzRGlyZWN0b3J5OworICAgIHNob3VsZEJlVHJ1ZSgiaXNEaXJlY3RvcnkiKTsKK30K
KwordmFyIGlzRmlsZSA9IGZhbHNlOworZnVuY3Rpb24gYXNzZXJ0SXNGaWxlKGVudHJ5KSB7Cisg
ICAgaXNGaWxlID0gZW50cnkuaXNGaWxlOworICAgIHNob3VsZEJlVHJ1ZSgiaXNGaWxlIik7Cit9
CisKKy8vIFRlc3QgYm9keSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitmdW5jdGlvbiBydW5CYXNpY1Rlc3QoKSB7CisgICAg
ZGVidWcoIiogUmVzb2x2aW5nIGEgZ2VuZXJhdGVkIFVSTC4iKTsKKyAgICBlbnRyeSA9IGNyZWF0
ZVRlc3RGaWxlKCk7CisgICAgdmFyIGUgPSByZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTChl
bnRyeS50b1VSTCgpKTsKKyAgICBhc3NlcnRQYXRoc01hdGNoKGVudHJ5LmZ1bGxQYXRoLCBlLmZ1
bGxQYXRoKTsKKyAgICBhc3NlcnRJc0ZpbGUoZSk7Cit9CisKK2Z1bmN0aW9uIHJ1bkhhbmRtYWRl
VVJMKCkgeworICAgIGRlYnVnKCIqIFJlc29sdmluZyB0ZXN0IGZpbGUgYnkgaGFuZCIpOworICAg
IGVudHJ5ID0gY3JlYXRlVGVzdEZpbGUoKTsKKyAgICB2YXIgZSA9IHJlc29sdmVMb2NhbEZpbGVT
eXN0ZW1TeW5jVVJMKCJmaWxlc3lzdGVtOmh0dHA6Ly8xMjcuMC4wLjE6ODAwMC90ZW1wb3Jhcnkv
dGVzdEZpbGUiKTsKKyAgICBhc3NlcnRQYXRoc01hdGNoKHRlc3RGaWxlTmFtZSwgZS5mdWxsUGF0
aCk7CisgICAgYXNzZXJ0SXNGaWxlKGUpOworfQorCitmdW5jdGlvbiBydW5Cb2d1c1VSTCgpIHsK
KyAgICBkZWJ1ZygiKiBSZXNvbHZpbmcgYSBjb21wbGV0ZWx5IGJvZ3VzIFVSTC4iKTsKKyAgICB0
cnkgeworICAgICAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTCgiZm9vIik7CisgICAg
ICAgIHRlc3RGYWlsZWQoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQo
IkNhdWdodCBleGNlcHRpb24iKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1bldyb25nUHJvdG9j
b2woKSB7CisgICAgZGVidWcoIiogUmVzb2x2aW5nIGEgVVJMIHdpdGggdGhlIHdyb25nIHByb3Rv
Y29sIik7CisgICAgdHJ5IHsKKyAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkwo
Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28vYmFyL2JheiIpOworICAgICAgICB0ZXN0RmFpbGVk
KCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0
aW9uIik7CisgICAgfQorfQorCitmdW5jdGlvbiBydW5Ob3RFbm91Z2hTbGFzaGVzKCkgeworICAg
IGRlYnVnKCIqIFJlc29sdmluZyBhIFVSTCB3aXRoIG5vIHNsYXNoIGJldHdlZW4gdHlwZSBhbmQg
ZmlsZSIpOworICAgIGVudHJ5ID0gY3JlYXRlVGVzdEZpbGUoKTsKKyAgICB0cnkgeworICAgICAg
ICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTCgiZmlsZXN5c3RlbTpodHRwOi8vMTI3LjAu
MC4xOjgwMDAvdGVtcG9yYXJ5dGVzdEZpbGUiKTsKKyAgICAgICAgdGVzdEZhaWxlZCgpOworICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiQ2F1Z2h0IGV4Y2VwdGlvbiIpOwor
ICAgIH0KK30KKworZnVuY3Rpb24gcnVuTm90RW5vdWdoU2xhc2hlczIoKSB7CisgICAgZGVidWco
IiogUmVzb2x2aW5nIGEgVVJMIHdpdGggbm8gc2xhc2ggYmV0d2VlbiBwcm90b2NvbCBhbmQgdHlw
ZSIpOworICAgIGVudHJ5ID0gY3JlYXRlVGVzdEZpbGUoKTsKKyAgICB0cnkgeworICAgICAgICBy
ZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTCgiZmlsZXN5c3RlbTpodHRwOi8vMTI3LjAuMC4x
OjgwMDB0ZW1wb3JhcnkvdGVzdEZpbGUiKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRl
c3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb24iKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1blVz
ZUJhY2tTbGFzaGVzKCkgeworICAgIGRlYnVnKCIqIFJlc29sdmUgYSBwYXRoIHVzaW5nIGJhY2tz
bGFzaGVzIik7CisgICAgZW50cnkgPSBmaWxlU3lzdGVtLnJvb3QuZ2V0RGlyZWN0b3J5KCJmb28i
KS5nZXRGaWxlKCJ0ZXN0RmlsZSIsIHtjcmVhdGU6dHJ1ZX0pOworICAgIHZhciBlID0gcmVzb2x2
ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkwoImZpbGVzeXN0ZW06aHR0cDovLzEyNy4wLjAuMTo4MDAw
L3RlbXBvcmFyeS9mb29cXHRlc3RGaWxlIik7CisgICAgYXNzZXJ0UGF0aHNNYXRjaCgiL2Zvby90
ZXN0RmlsZSIsIGUuZnVsbFBhdGgpOworICAgIGFzc2VydElzRmlsZShlKTsKK30KKworZnVuY3Rp
b24gcnVuRGlyZWN0b3J5KCkgeworICAgIGRlYnVnKCIqIFJlc29sdmUgYSBkaXJlY3RvcnkiKTsK
KyAgICBlbnRyeSA9IGZpbGVTeXN0ZW0ucm9vdC5nZXREaXJlY3RvcnkoImZvbyIsIHtjcmVhdGU6
dHJ1ZX0pOworICAgIHZhciBlID0gcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkwoImZpbGVz
eXN0ZW06aHR0cDovLzEyNy4wLjAuMTo4MDAwL3RlbXBvcmFyeS9mb28iKTsKKyAgICBhc3NlcnRQ
YXRoc01hdGNoKCIvZm9vIiwgZS5mdWxsUGF0aCk7CisgICAgYXNzZXJ0SXNEaXJlY3RvcnkoZSk7
Cit9CisKK2Z1bmN0aW9uIHJ1bldpdGhUcmFpbGluZ1NsYXNoKCkgeworICAgIGRlYnVnKCIqIFJl
c29sdmUgYSBwYXRoIHVzaW5nIGEgdHJhaWxpbmcgc2xhc2giKTsKKyAgICBlbnRyeSA9IGZpbGVT
eXN0ZW0ucm9vdC5nZXREaXJlY3RvcnkoImZvbyIsIHtjcmVhdGU6dHJ1ZX0pOworICAgIHZhciBl
ID0gcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkwoImZpbGVzeXN0ZW06aHR0cDovLzEyNy4w
LjAuMTo4MDAwL3RlbXBvcmFyeS9mb28vIik7CisgICAgYXNzZXJ0UGF0aHNNYXRjaCgiL2ZvbyIs
IGUuZnVsbFBhdGgpOworICAgIGFzc2VydElzRGlyZWN0b3J5KGUpOworfQorCitmdW5jdGlvbiBy
dW5QZXJzaXN0ZW50VGVzdCgpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZpbmcgYSBwZXJzaXN0ZW50
IFVSTC4iKTsKKyAgICB2YXIgZnMgPSByZXF1ZXN0RmlsZVN5c3RlbVN5bmMoUEVSU0lTVEVOVCwg
MTAwKTsKKyAgICBlbnRyeSA9IHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1TeW5jVVJMKGZzLnJvb3Qu
dG9VUkwoKSk7CisgICAgYXNzZXJ0UGF0aHNNYXRjaCgiLyIsIGVudHJ5LmZ1bGxQYXRoKTsKKyAg
ICBhc3NlcnRJc0RpcmVjdG9yeShlbnRyeSk7Cit9CisKKy8vIEVuZCBvZiB0ZXN0IGJvZHkgZnVu
Y3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2
YXIgdGVzdHNMaXN0ID0gWworICAgIHJ1bkJhc2ljVGVzdCwKKyAgICBydW5IYW5kbWFkZVVSTCwK
KyAgICBydW5Cb2d1c1VSTCwKKyAgICBydW5Xcm9uZ1Byb3RvY29sLAorICAgIHJ1bk5vdEVub3Vn
aFNsYXNoZXMsCisgICAgcnVuTm90RW5vdWdoU2xhc2hlczIsCisvLyAgICBydW5Vc2VCYWNrU2xh
c2hlcywKKyAgICBydW5EaXJlY3RvcnksCisgICAgcnVuV2l0aFRyYWlsaW5nU2xhc2gsCisgICAg
cnVuUGVyc2lzdGVudFRlc3QsCitdOwordmFyIHRlc3RDb3VudGVyID0gMDsKKworaWYgKHRoaXMu
cmVxdWVzdEZpbGVTeXN0ZW0pIHsKKyAgICBmaWxlU3lzdGVtID0gcmVxdWVzdEZpbGVTeXN0ZW1T
eW5jKHRoaXMuVEVNUE9SQVJZLCAxMDApOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHNM
aXN0Lmxlbmd0aDsgKytpKSB7CisgICAgICB0ZXN0c0xpc3RbaV0oKTsKKyAgICAgIHJlbW92ZUFs
bEluRGlyZWN0b3J5U3luYyhmaWxlU3lzdGVtLnJvb3QpOworICAgICAgZW50cnkgPSBudWxsOwor
ICAgIH0KKyAgICBkZWJ1ZygiRmluaXNoZWQgcnVubmluZyB0ZXN0cy4iKTsKKyAgICBmaW5pc2hK
U1Rlc3QoKTsKK30gZWxzZQorICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRmlsZVN5c3Rl
bSBBUEkgc3VwcG9ydC4iKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggZTg4OGEyOTlmMzA5YmNjMGMxMTYwYzdhYTk2YWNkMmFkYTZlNmM0MS4uNWIyMjJl
ZDQzZDg4ZmIxZjcxOTQxMjY5ZTk4M2ZlMmY2NjhkNTczZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIzIEBACisyMDExLTAzLTE4ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtmaWxlYXBpXSBB
ZGQgVVJJIHJlc29sdXRpb24gc3VwcG9ydCB0byBXb3JrZXJDb250ZXh0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTY0NAorCisgICAgICAgIFRlc3Rz
OiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZlLXVybC1zeW5jLmh0bWwKKyAg
ICAgICAgICAgICAgIGh0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLmh0
bWwKKworICAgICAgICAqIGZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxvY2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0pOgorICAgICAgICBBZGQgc3Vw
cG9ydCBmb3Igd29ya2Vycy4KKyAgICAgICAgKiBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJDb250ZXh0OjpyZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6OnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1TeW5jVVJMKToKKyAgICAg
ICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNv
bnRleHQuaWRsOgorCiAyMDExLTAzLTE4ICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAKaW5kZXggNjg4ZDE1NTU5NWY1NzExOTJj
ZjM2OGUwNTlmM2Y2NzQ2NWY5MDJhNi4uOTU1ZDcyMzJkNGRjMDliYzQ1OWQ1MjdhMDNmM2Y1NjI4
MTc3Yjk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0
ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNwcApA
QCAtODEsNyArODEsNyBAQCBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwgY29ucwogICAgIEFzeW5jRmlsZVN5
c3RlbTo6b3BlbkZpbGVTeXN0ZW0oYmFzZVBhdGgsIGlkZW50aWZpZXIsIHR5cGUsIGNyZWF0ZSwg
Y2FsbGJhY2tzKTsKIH0KIAotdm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBl
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBM
b2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBib29sKQogewogICAgIC8vIEFzeW5jRmlsZVN5c3Rl
bTo6b3BlbkZpbGVTeXN0ZW0gY2FsbHMgY2FsbGJhY2tzIHN5bmNocm9ub3VzbHksIHNvIHRoZSBt
ZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5LgogICAgIGNvbnRleHQtPnBv
c3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkZpbGVTeXN0ZW0sIGZpbGVTeXN0ZW1CYXNl
UGF0aCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5kYXRhYmFzZUlkZW50aWZpZXIoKSwg
dHlwZSwgZmFsc2UsIGNhbGxiYWNrcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxl
U3lzdGVtLmgKaW5kZXggYmFmNzJkOWQwYzI0ZGU3YWM5ZGNhY2EyZWZlYWQzMjAxN2M5MGYyYi4u
MmVhYmQ3YTIzZDM2OWZkM2FiY2YwOGQ2MjdlNjk5YWI4ZGVlNzIyZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgTG9jYWxGaWxlU3lzdGVtJiBsb2NhbEZpbGVTeXN0ZW0oKTsKIAogICAgIC8vIERv
ZXMgbm90IGNyZWF0ZSB0aGUgcm9vdCBwYXRoIGZvciBmaWxlIHN5c3RlbSwganVzdCByZWFkcyBp
dCBpZiBhdmFpbGFibGUuCi0gICAgdm9pZCByZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4pOworICAgIHZvaWQgcmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1D
YWxsYmFja3M+LCBib29sIHN5bmNocm9ub3VzID0gZmFsc2UpOwogCiAgICAgdm9pZCByZXF1ZXN0
RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBl
LCBsb25nIGxvbmcgc2l6ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+LCBi
b29sIHN5bmNocm9ub3VzID0gZmFsc2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmNwcAppbmRleCBhY2Y3ZjA0NmQ3NTM3NjFhMTExZmI4YjM4ZDI1Mjc0MjNhYTlmNTEy
Li5mZDIwNzg4MDcxMTEyMDRkZjQwM2ZmMzI0N2ZhYmE5NDVmNzlkYmZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAgLTY3LDkgKzY3LDEyIEBACiAKICNpZiBF
TkFCTEUoRklMRV9TWVNURU0pCiAjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCisjaW5jbHVk
ZSAiRGlyZWN0b3J5RW50cnlTeW5jLmgiCiAjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbS5oIgorI2lu
Y2x1ZGUgIkRPTUZpbGVTeXN0ZW1CYXNlLmgiCiAjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbVN5bmMu
aCIKICNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRmlsZUVudHJ5U3luYy5o
IgogI2luY2x1ZGUgIkZpbGVFcnJvci5oIgogI2luY2x1ZGUgIkZpbGVFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2suaCIKQEAgLTM3Nyw2ICszODAsNTMgQEAgUGFzc1Jl
ZlB0cjxET01GaWxlU3lzdGVtU3luYz4gV29ya2VyQ29udGV4dDo6cmVxdWVzdEZpbGVTeXN0ZW1T
eW5jKGludCB0eXBlLCBsb24KICAgICByZXR1cm4gaGVscGVyLmdldFJlc3VsdChlYyk7CiB9CiAK
K3ZvaWQgV29ya2VyQ29udGV4dDo6cmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChjb25zdCBTdHJp
bmcmIHVybCwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sKKyAgICBLVVJMIGNvbXBsZXRl
ZFVSTCA9IGNvbXBsZXRlVVJMKHVybCk7CisgICAgaWYgKCFBc3luY0ZpbGVTeXN0ZW06OmlzQXZh
aWxhYmxlKCkgfHwgIXNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0ZpbGVTeXN0ZW0oKSB8fCAh
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChjb21wbGV0ZWRVUkwpKSB7CisgICAgICAgIERP
TUZpbGVTeXN0ZW06OnNjaGVkdWxlQ2FsbGJhY2sodGhpcywgZXJyb3JDYWxsYmFjaywgRmlsZUVy
cm9yOjpjcmVhdGUoRmlsZUVycm9yOjpTRUNVUklUWV9FUlIpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlOworICAgIFN0cmluZyBmaWxl
UGF0aDsKKyAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkgfHwgIURPTUZpbGVTeXN0ZW1C
YXNlOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29tcGxldGVkVVJMLCB0eXBlLCBmaWxlUGF0aCkpIHsK
KyAgICAgICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayh0aGlzLCBlcnJvckNhbGxi
YWNrLCBGaWxlRXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6OlNZTlRBWF9FUlIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIExvY2FsRmlsZVN5c3RlbTo6bG9jYWxGaWxlU3lzdGVtKCku
cmVhZEZpbGVTeXN0ZW0odGhpcywgdHlwZSwgUmVzb2x2ZVVSSUNhbGxiYWNrczo6Y3JlYXRlKHN1
Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgdGhpcywgZmlsZVBhdGgpKTsKK30KKworUGFz
c1JlZlB0cjxFbnRyeVN5bmM+IFdvcmtlckNvbnRleHQ6OnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1T
eW5jVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9
IDA7CisgICAgS1VSTCBjb21wbGV0ZWRVUkwgPSBjb21wbGV0ZVVSTCh1cmwpOworICAgIGlmICgh
QXN5bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpIHx8ICFzZWN1cml0eU9yaWdpbigpLT5jYW5B
Y2Nlc3NGaWxlU3lzdGVtKCkgfHwgIXNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QoY29tcGxl
dGVkVVJMKSkgeworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OlNFQ1VSSVRZX0VSUjsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGU7
CisgICAgU3RyaW5nIGZpbGVQYXRoOworICAgIGlmICghY29tcGxldGVkVVJMLmlzVmFsaWQoKSB8
fCAhRE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNrRmlsZVN5c3RlbVVSTChjb21wbGV0ZWRVUkwsIHR5
cGUsIGZpbGVQYXRoKSkgeworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OlNZTlRBWF9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEZpbGVTeXN0ZW1TeW5jQ2FsbGJhY2tI
ZWxwZXIgcmVhZEZpbGVTeXN0ZW1IZWxwZXI7CisgICAgTG9jYWxGaWxlU3lzdGVtOjpsb2NhbEZp
bGVTeXN0ZW0oKS5yZWFkRmlsZVN5c3RlbSh0aGlzLCB0eXBlLCBGaWxlU3lzdGVtQ2FsbGJhY2tz
OjpjcmVhdGUocmVhZEZpbGVTeXN0ZW1IZWxwZXIuc3VjY2Vzc0NhbGxiYWNrKCksIHJlYWRGaWxl
U3lzdGVtSGVscGVyLmVycm9yQ2FsbGJhY2soKSwgdGhpcyksIHRydWUpOworICAgIFJlZlB0cjxE
T01GaWxlU3lzdGVtU3luYz4gZmlsZVN5c3RlbSA9IHJlYWRGaWxlU3lzdGVtSGVscGVyLmdldFJl
c3VsdChlYyk7CisgICAgaWYgKCFmaWxlU3lzdGVtKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJlZlB0cjxFbnRyeVN5bmM+IGVudHJ5ID0gZmlsZVN5c3RlbS0+cm9vdCgpLT5nZXREaXJlY3Rv
cnkoZmlsZVBhdGgsIDAsIGVjKTsKKyAgICBpZiAoZWMgPT0gRmlsZUV4Y2VwdGlvbjo6VFlQRV9N
SVNNQVRDSF9FUlIpCisgICAgICAgIHJldHVybiBmaWxlU3lzdGVtLT5yb290KCktPmdldEZpbGUo
ZmlsZVBhdGgsIDAsIGVjKTsKKworICAgIHJldHVybiBlbnRyeS5yZWxlYXNlKCk7Cit9CisKIENP
TVBJTEVfQVNTRVJUKHN0YXRpY19jYXN0PGludD4oV29ya2VyQ29udGV4dDo6VEVNUE9SQVJZKSA9
PSBzdGF0aWNfY2FzdDxpbnQ+KEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5KSwgZW51bV9taXNt
YXRjaCk7CiBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KFdvcmtlckNvbnRleHQ6OlBF
UlNJU1RFTlQpID09IHN0YXRpY19jYXN0PGludD4oQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50
KSwgZW51bV9taXNtYXRjaCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmgKaW5kZXggMmU4MDJmMjU1MjRkMTY0NTg2YjFkYTBiNmEwY2IzOTczYjZhZDM2ZC4uNTEz
OGU2NzAzNTU3ZjE0MmRiMGIzNTBiYWZiNmMwYWMwY2FiNzBmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmgKQEAgLTUwLDYgKzUwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIERhdGFiYXNlOwogICAgIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CiAgICAg
Y2xhc3MgRGF0YWJhc2VTeW5jOworICAgIGNsYXNzIEVudHJ5Q2FsbGJhY2s7CisgICAgY2xhc3Mg
RW50cnlTeW5jOwogICAgIGNsYXNzIEVycm9yQ2FsbGJhY2s7CiAgICAgY2xhc3MgRmlsZVN5c3Rl
bUNhbGxiYWNrOwogICAgIGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlcjsKQEAgLTEzMSw2ICsxMzMs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH07CiAgICAgICAgIHZvaWQgcmVxdWVz
dEZpbGVTeXN0ZW0oaW50IHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzUmVmUHRyPEZpbGVTeXN0
ZW1DYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwogICAgICAgICBQYXNzUmVm
UHRyPERPTUZpbGVTeXN0ZW1TeW5jPiByZXF1ZXN0RmlsZVN5c3RlbVN5bmMoaW50IHR5cGUsIGxv
bmcgbG9uZyBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgcmVzb2x2ZUxvY2Fs
RmlsZVN5c3RlbVVSTChjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNr
PiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisgICAgICAgIFBhc3NSZWZQdHI8RW50cnlT
eW5jPiByZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTChjb25zdCBTdHJpbmcmIHVybCwgRXhj
ZXB0aW9uQ29kZSYpOwogI2VuZGlmCiAKICAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNl
ZCBmb3IgR0MgbWFya2luZy4gU2VlIEpTV29ya2VyQ29udGV4dDo6bWFya0NoaWxkcmVuKE1hcmtT
dGFjayYpIGluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRl
eHQuaWRsIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAppbmRleCAx
NzkyMjFlZDRlYjczMDdjM2Q4NTNiMzRkM2U5ZTVjOGNmOWQ3ZDkyLi5lMGFjYjI0MDJiNDhiMDY5
OWQ0YzRhMTg1ZGMwNTJiMjU3YzM3OGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5pZGwKQEAgLTExMCw2ICsxMTAsOCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IFBFUlNJU1RFTlQgPSAxOwogICAgICAgICBbRW5hYmxlZEF0
UnVudGltZT1GaWxlU3lzdGVtXSB2b2lkIHJlcXVlc3RGaWxlU3lzdGVtKGluIHVuc2lnbmVkIHNo
b3J0IHR5cGUsIGluIGxvbmcgbG9uZyBzaXplLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBGaWxl
U3lzdGVtQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBF
cnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwogICAgICAgICBbRW5hYmxlZEF0UnVudGltZT1G
aWxlU3lzdGVtXSBET01GaWxlU3lzdGVtU3luYyByZXF1ZXN0RmlsZVN5c3RlbVN5bmMoaW4gdW5z
aWduZWQgc2hvcnQgdHlwZSwgaW4gbG9uZyBsb25nIHNpemUpIHJhaXNlcyAoRmlsZUV4Y2VwdGlv
bik7CisgICAgICAgIFtFbmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIHZvaWQgcmVzb2x2ZUxv
Y2FsRmlsZVN5c3RlbVVSTChpbiBET01TdHJpbmcgdXJsLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFs
XSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0g
RXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKKyAgICAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9
RmlsZVN5c3RlbV0gRW50cnlTeW5jIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1TeW5jVVJMKGluIERP
TVN0cmluZyB1cmwpIHJhaXNlcyAoRmlsZUV4Y2VwdGlvbik7CiAKICAgICAgICAgICAgICAgICAg
YXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIEZsYWdzQ29uc3RydWN0b3Ig
RmxhZ3M7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNTgzZWNjZWIyNGJl
OWIwOGJjMGQ0NmUxZDIwYTI3ZTNmMDYwOGRlYy4uY2ZjNDY1ZjE0MmMwMzY1ZjNlOWZmNTA4OTNi
YWQ3ZDdjNjVhYjkyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBA
QAorMjAxMS0wMy0xOCAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbZmlsZWFwaV0gQWRkIFVS
SSByZXNvbHV0aW9uIHN1cHBvcnQgdG8gV29ya2VyQ29udGV4dAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU2NDQKKworICAgICAgICBQYXNzICJjcmVh
dGUiIGJvb2wgdGhyb3VnaCB0byBhbGxvdyBvcGVuaW5nCisgICAgICAgIGEgZmlsZXN5c3RlbSB3
aXRob3V0IGFsbG93aW5nIGNyZWF0aW9uLgorCisgICAgICAgICogc3JjL0xvY2FsRmlsZVN5c3Rl
bUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsRmlsZVN5c3RlbTo6cmVhZEZp
bGVTeXN0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxGaWxlU3lzdGVtOjpyZXF1ZXN0Rmls
ZVN5c3RlbSk6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJXb3JrZXJCYXNlOjpvcGVuRmlsZVN5c3RlbUZvcldvcmtlcik6CisgICAgICAgICog
c3JjL1dlYldvcmtlckJhc2UuaDoKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2U6OnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZCk6CisgICAgICAgIChXZWJL
aXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om9wZW5GaWxlU3lzdGVtT25NYWlu
VGhyZWFkKToKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5o
OgorCiAyMDExLTAzLTE3ICBBbGV4ZXkgTWFyaW5pY2hldiAgPGFtYXJpbmljaGV2QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAK
aW5kZXggMzVlNGRlODI4OWQ5MjU4MGJmNzJjYTZhZDMwMmE3NTI5MzFiYmQzNC4uZGVhYzMzMThk
YjQ4ZmNjYmQ0MzkxZGM1ZjFmMzc0ZTQ4MzE1NWU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcApAQCAtNTcsMjkg
KzU3LDQwIEBAIExvY2FsRmlsZVN5c3RlbSYgTG9jYWxGaWxlU3lzdGVtOjpsb2NhbEZpbGVTeXN0
ZW0oKQogICAgIHJldHVybiAqbG9jYWxGaWxlU3lzdGVtOwogfQogCi12b2lkIExvY2FsRmlsZVN5
c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5
bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQgJiYgY29udGV4dC0+aXNEb2N1
bWVudCgpKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KGNvbnRleHQpOwotICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6OmZy
b21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgd2ViRnJhbWUtPmNsaWVudCgpLT5vcGVu
RmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlw
ZSksIDAsIGZhbHNlLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0
eXBlKSk7Ci19CituYW1lc3BhY2UgewogCi12b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVxdWVzdEZp
bGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaWxlU3lzdGVt
OjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQorZW51bSBDcmVhdGlvbkZsYWcg
eworICAgIE9wZW5FeGlzdGluZywKKyAgICBDcmVhdGVJZk5vdFByZXNlbnQKK307CisKK3ZvaWQg
b3BlbkZpbGVTeXN0ZW1IZWxwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5
bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMsIGxvbmcgbG9uZyBzaXplLCBDcmVhdGlv
bkZsYWcgY3JlYXRlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBpZiAoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0
PERvY3VtZW50Kj4oY29udGV4dCk7CiAgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBX
ZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgICAgIHdlYkZy
YW1lLT5jbGllbnQoKS0+b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRpY19jYXN0PFdlYkZp
bGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCB0cnVlLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxi
YWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlKSk7CisgICAgICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+
b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+
KHR5cGUpLCBzaXplLCBjcmVhdGUgPT0gQ3JlYXRlSWZOb3RQcmVzZW50LCBuZXcgV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRl
eHQqPihjb250ZXh0KTsKICAgICAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclBy
b3h5ID0gJndvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwogICAg
ICAgICBXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJCYXNl
Kj4od29ya2VyTG9hZGVyUHJveHkpOwotICAgICAgICB3ZWJXb3JrZXItPm9wZW5GaWxlU3lzdGVt
Rm9yV29ya2VyKHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCBu
ZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlLCBjb250ZXh0LCBz
eW5jaHJvbm91cyksIHN5bmNocm9ub3VzKTsKKyAgICAgICAgd2ViV29ya2VyLT5vcGVuRmlsZVN5
c3RlbUZvcldvcmtlcihzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6
ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFj
a3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJvbm91
cyk7CiAgICAgfQogfQogCit9IC8vIG5hbWVzcGFjZQorCit2b2lkIExvY2FsRmlsZVN5c3RlbTo6
cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaWxl
U3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMpCit7CisgICAgb3BlbkZpbGVTeXN0ZW1IZWxwZXIo
Y29udGV4dCwgdHlwZSwgY2FsbGJhY2tzLCBzeW5jaHJvbm91cywgMCwgT3BlbkV4aXN0aW5nKTsK
K30KKwordm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJlcXVlc3RGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxv
bmcgc2l6ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcywg
Ym9vbCBzeW5jaHJvbm91cykKK3sKKyAgICBvcGVuRmlsZVN5c3RlbUhlbHBlcihjb250ZXh0LCB0
eXBlLCBjYWxsYmFja3MsIHN5bmNocm9ub3VzLCBzaXplLCBDcmVhdGVJZk5vdFByZXNlbnQpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNU
RU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCmluZGV4
IGIxNmI2ZDQwN2MwYTc3N2E3NTA1NzY2ZTAzM2Y5YTQ1MzgyNTJlZDUuLjRiMjdkZGIzN2QyNDY5
ZTU1YjJjYTM1MmYyYjhlZGM3YWI3MmMyNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYldvcmtlckJhc2UuY3BwCkBAIC0yMzcsNyArMjM3LDcgQEAgYm9vbCBXZWJXb3JrZXJC
YXNlOjphbGxvd0RhdGFiYXNlKFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25z
dCBXZWJTdHIKIH0KIAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLXZvaWQgV2ViV29ya2VyQmFz
ZTo6b3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25n
IGxvbmcgc2l6ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBib29sIHN5bmNo
cm9ub3VzKQordm9pZCBXZWJXb3JrZXJCYXNlOjpvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihXZWJG
aWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmls
ZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQogewogICAgIFdv
cmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpOwogICAgIFdv
cmtlclNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVy
Ojpjb250cm9sbGVyRm9yQ29udGV4dCgpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgV2ViV29y
a2VyQmFzZTo6b3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBl
LCBsb25nIGxvbmcKICAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29wLmNyZWF0
ZVVuaXF1ZUlkKCkpKTsKIAogICAgIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlPiBicmlkZ2UgPSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGUodGhp
cywgd29ya2VyQ29udGV4dCwgY2FsbGJhY2tzKTsKLSAgICBicmlkZ2UtPnBvc3RPcGVuRmlsZVN5
c3RlbVRvTWFpblRocmVhZChjb21tb25DbGllbnQoKSwgdHlwZSwgc2l6ZSwgbW9kZSk7CisgICAg
YnJpZGdlLT5wb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoY29tbW9uQ2xpZW50KCksIHR5
cGUsIHNpemUsIGNyZWF0ZSwgbW9kZSk7CiAKICAgICBpZiAoc3luY2hyb25vdXMpIHsKICAgICAg
ICAgaWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUpID09IE1lc3NhZ2VR
dWV1ZVRlcm1pbmF0ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJXb3JrZXJCYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNl
LmgKaW5kZXggZWM3MzUwNTY5YTg3NGVhOTgyNThiZTgyOTc2YTJhYWIwNDNmMGU1My4uOGZiMDMy
ZTYxN2VmZGIyZjM3YmE1YTk5MTFhNTJjMjViM2JlMzlkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckJhc2UuaApAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGFsbG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSk7CiAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0gICAgdm9pZCBvcGVuRmlsZVN5c3Rl
bUZvcldvcmtlcihXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgV2ViRmlsZVN5
c3RlbUNhbGxiYWNrcyosIGJvb2wgc3luY2hyb25vdXMpOworICAgIHZvaWQgb3BlbkZpbGVTeXN0
ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3Jl
YXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiwgYm9vbCBzeW5jaHJvbm91cyk7CiAjZW5kaWYK
IAogICAgIC8vIEV4ZWN1dGVzIHRoZSBnaXZlbiB0YXNrIG9uIHRoZSBtYWluIHRocmVhZC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKaW5kZXggMGZiYTQyNTU0NTUwZmM2YWU1MTgxM2EzN2Rl
OWYxNzcyOWNjMTQ1OC4uYWI0NGM3Mjc0ODk0NjNhYjllNDg5OTg2YzhmYjRhODAwNmVlODI4YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKQEAgLTE1MCw5ICsxNTAsOSBAQCB2b2lkIFdv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnN0b3AoKQogICAgIH0KIH0KIAotdm9pZCBX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5U
aHJlYWQoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06
OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3ZvaWQgV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxlU3lzdGVtVG9NYWluVGhy
ZWFkKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpU
eXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2Rl
KQogewotICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJm9w
ZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkLCBjb21tb25DbGllbnQsIHR5cGUsIHNpemUsIHRoaXMs
IG1vZGUpKTsKKyAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNr
KCZvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZCwgY29tbW9uQ2xpZW50LCB0eXBlLCBzaXplLCBj
cmVhdGUsIHRoaXMsIG1vZGUpKTsKIH0KIAogdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlOjpwb3N0TW92ZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVBhdGgsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25QYXRoLCBj
b25zdCBTdHJpbmcmIG1vZGUpCkBAIC0yMTIsMTIgKzIxMiwxMiBAQCB2b2lkIFdvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RSZWFkRGlyZWN0b3J5VG9NYWluVGhyZWFkKFdlYkZp
bGVTeXN0ZQogICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2so
JnJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQsIGZpbGVTeXN0ZW0sIHBhdGgsIHRoaXMsIG1vZGUp
KTsKIH0KIAotdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmlsZVN5
c3RlbU9uTWFpblRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25n
IHNpemUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqIGJyaWRnZSwgY29uc3QgU3Ry
aW5nJiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmls
ZVN5c3RlbU9uTWFpblRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29y
a2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBs
b25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiBi
cmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBpZiAoIWNvbW1vbkNsaWVudCkKICAg
ICAgICAgYnJpZGdlLT5kaWRGYWlsT25NYWluVGhyZWFkKFdlYkZpbGVFcnJvckFib3J0LCBtb2Rl
KTsKICAgICBlbHNlIHsKLSAgICAgICAgY29tbW9uQ2xpZW50LT5vcGVuRmlsZVN5c3RlbSh0eXBl
LCBzaXplLCBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6Y3JlYXRlTGVha2VkUHRyKGJy
aWRnZSwgbW9kZSkpOworICAgICAgICBjb21tb25DbGllbnQtPm9wZW5GaWxlU3lzdGVtKHR5cGUs
IHNpemUsIGNyZWF0ZSwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0ZUxlYWtl
ZFB0cihicmlkZ2UsIG1vZGUpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaApp
bmRleCBmYTU3ZjM4Mjk4ZjczMTAzZDM4ZGJhZjFlMzg3MTU3NWY1NTAxNGM4Li44NGNkZGFkMmQ1
YzQ5ODNiZDlhNjkxYzJmYTZiOWU4MWJkOWJiOTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5o
CkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBNZXRob2RzIHRoYXQg
Y3JlYXRlIGFuIGluc3RhbmNlIGFuZCBwb3N0IGFuIGluaXRpYWwgcmVxdWVzdCB0YXNrIHRvIHRo
ZSBtYWluIHRocmVhZC4gVGhleSBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgd29ya2VyIHRocmVhZC4K
LSAgICB2b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJD
bGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgY29uc3QgU3RyaW5n
JiBtb2RlKTsKKyAgICB2b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21t
b25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9v
bCBjcmVhdGUsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBwb3N0TW92ZVRvTWFpblRo
cmVhZChXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBzcmNQYXRoLCBjb25zdCBTdHJpbmcm
IGRlc3RQYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdENvcHlUb01haW5U
aHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgc3JjUGF0aCwgY29uc3QgU3RyaW5n
JiBkZXN0UGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICB2b2lkIHBvc3RSZW1vdmVUb01h
aW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5n
JiBtb2RlKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgIFdvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2UoV2ViV29ya2VyQmFzZSosIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKik7CiAKICAgICAvLyBNZXRob2RzIHRo
YXQgYXJlIHRvIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgc3RhdGljIHZvaWQg
b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9u
ZyBzaXplLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBt
b2RlKTsKKyAgICBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2ViRmls
ZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9p
ZCBtb3ZlT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJG
aWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBzcmNQYXRoLCBjb25zdCBTdHJpbmcmIGRlc3RQYXRo
LCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsK
ICAgICBzdGF0aWMgdm9pZCBjb3B5T25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBzcmNQYXRoLCBjb25zdCBT
dHJpbmcmIGRlc3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3Qg
U3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVPbk1haW5UaHJlYWQoV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcm
IHBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1v
ZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86248</attachid>
            <date>2011-03-18 17:48:33 -0700</date>
            <delta_ts>2011-03-21 16:41:40 -0700</delta_ts>
            <desc>Ready for review, tests pass</desc>
            <filename>bug-55644-20110318174832.patch</filename>
            <type>text/plain</type>
            <size>36317</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE0ODkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxOWUyMzNiNDM0ZWUxNGE3ODRlNTJm
ODZiMWVlMWJmNzcwYjM0MjM2Li45OTY2MmQwYWUxYjdiZGQwNmRlZWE5MDcwZDk2ZDkyNzQxZjk2
YzRhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDMtMTggIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2ZpbGVhcGldIEFkZCBVUkkgcmVzb2x1dGlvbiBzdXBwb3J0IHRvIFdvcmtlckNv
bnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1
NjQ0CisKKyAgICAgICAgTm90ZSB0aGF0IHRoZXNlIHRlc3RzIGRvIG5vdCBydW4gYXMgcGFydCBv
ZiBuZXctcnVuLXdlYmtpdC10ZXN0cywKKyAgICAgICAgYnV0IHJhdGhlciBpbiBDaHJvbWl1bSdz
IHVpX3Rlc3QuIEkndmUgcnVuIHRoZW0gbG9jYWxseSBhbmQgY29uZmlybWVkCisgICAgICAgIHRo
ZXkgcGFzczsgYSBzdWJzZXF1ZW50IENocm9taXVtIGNoYW5nZSB3aWxsIGJlIHN1Ym1pdHRlZCB0
byBydW4gdGhlbQorICAgICAgICBvbiB0aGUgQ2hyb21pdW0gYnVpbGQgYm90cy4KKworICAgICAg
ICAqIGh0dHAvdGVzdHMvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZnMtd29ya2VyLWNvbW1vbi5qczog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9maWxlc3lzdGVtL3Jlc291cmNlcy9mcy13b3Jr
ZXItdGVzdC11dGlsLmpzOiBBZGRlZC4KKyAgICAgICAgQ29waWVkIGZyb20gZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcyBmb3IgdXNlIGJ5IEhUVFAgdGVzdHMuCisgICAgICAgICogaHR0cC90ZXN0
cy9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZXNvbHZlLXVyaS5qczoKKyAgICAgICAgVXBkYXRl
ZCB0byBiZSB1c2VkIGVpdGhlciBpbiB3aW5kb3cgb3Igd29ya2VyIGNvbnRleHQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMvcmVzb2x2ZS11cmwtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZl
LXVybC1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9maWxl
c3lzdGVtL3dvcmtlcnMvcmVzb2x2ZS11cmwtc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZlLXVybC5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9zY3JpcHQtdGVzdHMvVEVNUExB
VEUuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMv
c2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJsLXN5bmMuanM6IEFkZGVkLgorCiAyMDExLTAzLTE4ICBK
dXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Zp
bGVzeXN0ZW0vcmVzb3VyY2VzL2ZzLXdvcmtlci1jb21tb24uanMgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZzLXdvcmtlci1jb21tb24uanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjYzNDEyMjRkOGI4ZDcxMWM2YjAzNTIzZGUxOTFkNzU5ZjhkYWE3MgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZnMtd29y
a2VyLWNvbW1vbi5qcwpAQCAtMCwwICsxLDU2IEBACitmdW5jdGlvbiBkZWJ1ZyhtZXNzYWdlKQor
eworICAgIHBvc3RNZXNzYWdlKCJNRVNHOiIgKyBtZXNzYWdlKTsKK30KKworZnVuY3Rpb24gZmlu
aXNoSlNUZXN0KCkKK3sKKyAgICBwb3N0TWVzc2FnZSgiRE9ORToiKTsKK30KKworZnVuY3Rpb24g
ZGVzY3JpcHRpb24obWVzc2FnZSkKK3sKKyAgICBwb3N0TWVzc2FnZSgnREVTQzonICsgbWVzc2Fn
ZSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RQYXNzZWQobXNnKSB7CisgICAgcG9zdE1lc3NhZ2UoIlBB
U1M6IiArIG1zZyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWlsZWQobXNnKSB7CisgICAgcG9zdE1l
c3NhZ2UoIkZBSUw6IiArIG1zZyk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlKF9hLCBfYikKK3sK
KyAgaWYgKHR5cGVvZiBfYSAhPSAic3RyaW5nIiB8fCB0eXBlb2YgX2IgIT0gInN0cmluZyIpCisg
ICAgZGVidWcoIldBUk46IHNob3VsZEJlKCkgZXhwZWN0cyBzdHJpbmcgYXJndW1lbnRzIik7Cisg
IHZhciBfYXYgPSBldmFsKF9hKTsKKyAgdmFyIF9idiA9IGV2YWwoX2IpOworICBpZiAoX2F2ID09
PSBfYnYpCisgICAgdGVzdFBhc3NlZChfYSArICIgaXMgIiArIF9iKTsKKyAgZWxzZQorICAgIHRl
c3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSAiICsgX2J2ICsgIiAob2YgdHlwZSAiICsgdHlwZW9m
IF9idiArICIpLiBXYXMgIiArIF9hdiArICIgKG9mIHR5cGUgIiArIHR5cGVvZiBfYXYgKyAiKS4i
KTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmVUcnVlKF9hKSB7IHNob3VsZEJlKF9hLCAidHJ1ZSIp
OyB9CisKK2Z1bmN0aW9uIHJlbW92ZUFsbEluRGlyZWN0b3J5U3luYyhkaXJlY3RvcnkpIHsKKyAg
ICBpZiAoIWRpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciByZWFkZXIgPSBkaXJl
Y3RvcnkuY3JlYXRlUmVhZGVyKCk7CisgICAgZG8geworICAgICAgICB2YXIgZW50cmllcyA9IHJl
YWRlci5yZWFkRW50cmllcygpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChlbnRyaWVzW2ldLmlzRGlyZWN0b3J5KQor
ICAgICAgICAgICAgICAgIGVudHJpZXNbaV0ucmVtb3ZlUmVjdXJzaXZlbHkoKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbnRyaWVzW2ldLnJlbW92ZSgpOworICAgICAgICB9
CisgICAgfSB3aGlsZSAoZW50cmllcy5sZW5ndGgpOworfQorCitpZiAodGhpcy5pbXBvcnRTY3Jp
cHRzICYmICF0aGlzLnJlcXVlc3RGaWxlU3lzdGVtKSB7CisgICAgZGVidWcoJ1RoaXMgdGVzdCBy
ZXF1aXJlcyBGaWxlU3lzdGVtIEFQSS4nKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZnMtd29y
a2VyLXRlc3QtdXRpbC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9yZXNv
dXJjZXMvZnMtd29ya2VyLXRlc3QtdXRpbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYTczOGFhYjkzOGIyMWQ5
ZDIyYTkyYTQ3ZWJkNDcwZjA5NWYxMzYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9maWxlc3lzdGVtL3Jlc291cmNlcy9mcy13b3JrZXItdGVzdC11dGlsLmpzCkBA
IC0wLDAgKzEsMzIgQEAKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworZnVuY3Rpb24g
c3RhcnRXb3JrZXIodGVzdFNjcmlwdFVSTCkKK3sKKyAgICBkZWJ1ZygnU3RhcnRpbmcgd29ya2Vy
OiAnICsgdGVzdFNjcmlwdFVSTCk7CisgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIodGVzdFNj
cmlwdFVSTCk7CisgICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsK
KyAgICAgICAgaWYgKGV2ZW50LmRhdGEubGVuZ3RoIDwgNSB8fCBldmVudC5kYXRhLmNoYXJBdCg0
KSAhPSAnOicpIHsKKyAgICAgICAgICAgIGRlYnVnKCJHb3QgaW52YWxpZCBtZXNzYWdlIGZyb20g
d29ya2VyOiIgKyAoZXZlbnQuZGF0YSA/IGV2ZW50LmRhdGEgOiAibnVsbCIpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBjb2RlID0gZXZlbnQuZGF0YS5zdWJzdHJpbmcoMCwg
NCk7CisgICAgICAgICAgICB2YXIgcGF5bG9hZCA9ICJbV29ya2VyXSAiICsgZXZlbnQuZGF0YS5z
dWJzdHJpbmcoNSk7CisgICAgICAgICAgICBpZiAoY29kZSA9PSAiUEFTUyIpCisgICAgICAgICAg
ICAgICAgdGVzdFBhc3NlZChwYXlsb2FkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvZGUgPT0g
IkZBSUwiKQorICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQocGF5bG9hZCk7CisgICAgICAgICAg
ICBlbHNlIGlmIChjb2RlID09ICJERVNDIikKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbihw
YXlsb2FkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvZGUgPT0gIkRPTkUiKQorICAgICAgICAg
ICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICAgICAgZWxzZSBpZiAoY29kZSA9PSAiTUVT
RyIpCisgICAgICAgICAgICAgICAgZGVidWcocGF5bG9hZCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgd29ya2VyLm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIGRl
YnVnKCdHb3QgZXJyb3IgZnJvbSB3b3JrZXI6ICcgKyBldmVudC5tZXNzYWdlKTsKKyAgICAgICAg
ZmluaXNoSlNUZXN0KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZXNvbHZlLXVyaS5qcyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvcmVzb2x2ZS11cmkuanMKaW5kZXgg
ZjVhZjI4YmFlNmViZGZlMTA0M2MxM2YxOGQ5OTFiMjRjZmZmZWQ0MC4uMGQ1MDExNmI4OGZiNmEy
NmEyZTMwOThkMmY0NzY1YmFiYWNlZmNjMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZXNvbHZlLXVyaS5qcworKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJpLmpzCkBA
IC0xLDMgKzEsOCBAQAoraWYgKHRoaXMuaW1wb3J0U2NyaXB0cykgeworICAgIGltcG9ydFNjcmlw
dHMoJy4uL3Jlc291cmNlcy9mcy13b3JrZXItY29tbW9uLmpzJyk7CisgICAgaW1wb3J0U2NyaXB0
cygnLi4vcmVzb3VyY2VzL2ZzLXRlc3QtdXRpbC5qcycpOworfQorCiBkZXNjcmlwdGlvbigiVGVz
dHMgdXNpbmcgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTCB0byBvYnRhaW4gYW4gRW50cnkgZnJv
bSBhIFVSTCIpOwogCiB2YXIgdGVzdEZpbGVOYW1lID0gJy90ZXN0RmlsZSc7CkBAIC0xNjMsMTAg
KzE2OCwxMCBAQCBmdW5jdGlvbiBmaWxlU3lzdGVtQ2FsbGJhY2soZnMpIHsKICAgICBjbGVhbnVw
QW5kUnVuTmV4dCgpOwogfQogCi1pZiAod2luZG93LnJlcXVlc3RGaWxlU3lzdGVtKSB7Ci0gICAg
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotICAgIHJlcXVlc3RGaWxlU3lzdGVtKHdpbmRv
dy5URU1QT1JBUlksIDEwMCwgZmlsZVN5c3RlbUNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKK2lm
ICh0aGlzLnJlcXVlc3RGaWxlU3lzdGVtKSB7CisgICAganNUZXN0SXNBc3luYyA9IHRydWU7Cisg
ICAgcmVxdWVzdEZpbGVTeXN0ZW0odGhpcy5URU1QT1JBUlksIDEwMCwgZmlsZVN5c3RlbUNhbGxi
YWNrLCBlcnJvckNhbGxiYWNrKTsKIH0gZWxzZQogICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWly
ZXMgRmlsZVN5c3RlbSBBUEkgc3VwcG9ydC4iKTsKIAotd2luZG93LnN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29s
dmUtdXJsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZWI4NGU4OWZkYmFhMWZhN2JjNzFkNGQx
MjVhYjBlYmY4YTBjOGEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9maWxlc3lzdGVtL3dvcmtlcnMvcmVzb2x2ZS11cmwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MzcgQEAKK1tXb3JrZXJdIFRlc3RzIHVzaW5nIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwgdG8g
b2J0YWluIGFuIEVudHJ5IGZyb20gYSBVUkwKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1N0YXJ0aW5nIHdvcmtlcjogLi4vc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJpLmpzCitbV29y
a2VyXSAqIFJlc29sdmluZyBhIGdlbmVyYXRlZCBVUkwuCitQQVNTIFtXb3JrZXJdIGV4cGVjdGVk
UGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIFtXb3JrZXJdIGlzRmlsZSBpcyB0cnVlCitbV29ya2Vy
XSAqIFJlc29sdmluZyB0ZXN0IGZpbGUgYnkgaGFuZAorUEFTUyBbV29ya2VyXSBleHBlY3RlZFBh
dGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29ya2VyXSBpc0ZpbGUgaXMgdHJ1ZQorW1dvcmtlcl0g
KiBSZXNvbHZpbmcgYSBjb21wbGV0ZWx5IGJvZ3VzIFVSTC4KK1BBU1MgW1dvcmtlcl0gCitbV29y
a2VyXSAqIFJlc29sdmluZyBhIFVSTCB3aXRoIHRoZSB3cm9uZyBwcm90b2NvbAorUEFTUyBbV29y
a2VyXSAKK1tXb3JrZXJdICogUmVzb2x2aW5nIGEgVVJMIHdpdGggbm8gc2xhc2ggYmV0d2VlbiB0
eXBlIGFuZCBmaWxlCitQQVNTIFtXb3JrZXJdIAorW1dvcmtlcl0gKiBSZXNvbHZpbmcgYSBVUkwg
d2l0aCBubyBzbGFzaCBiZXR3ZWVuIHByb3RvY29sIGFuZCB0eXBlCitQQVNTIFtXb3JrZXJdIAor
W1dvcmtlcl0gKiBSZXNvbHZlIGEgcGF0aCB1c2luZyBiYWNrc2xhc2hlcworUEFTUyBbV29ya2Vy
XSBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29ya2VyXSBpc0ZpbGUgaXMgdHJ1
ZQorW1dvcmtlcl0gKiBSZXNvbHZlIGEgZGlyZWN0b3J5CitQQVNTIFtXb3JrZXJdIGV4cGVjdGVk
UGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIFtXb3JrZXJdIGlzRGlyZWN0b3J5IGlzIHRydWUKK1tX
b3JrZXJdICogUmVzb2x2ZSBhIHBhdGggdXNpbmcgYSB0cmFpbGluZyBzbGFzaAorUEFTUyBbV29y
a2VyXSBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29ya2VyXSBpc0RpcmVjdG9y
eSBpcyB0cnVlCitbV29ya2VyXSAqIFJlc29sdmluZyBhIHBlcnNpc3RlbnQgVVJMLgorUEFTUyBb
V29ya2VyXSBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29ya2VyXSBpc0RpcmVj
dG9yeSBpcyB0cnVlCitbV29ya2VyXSBGaW5pc2hlZCBydW5uaW5nIHRlc3RzLgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLXN5bmMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMv
cmVzb2x2ZS11cmwtc3luYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTc2NzA2MDdjMmI4N2Zl
OWNiYTBjNjU5OTM5ZTYyMDkxOWZkYjZlNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLXN5bmMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMzcgQEAKK1tXb3JrZXJdIFRlc3RzIHVzaW5nIHJlc29sdmVMb2NhbEZp
bGVTeXN0ZW1TeW5jVVJMIHRvIG9idGFpbiBhbiBFbnRyeSBmcm9tIGEgVVJMCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitTdGFydGluZyB3b3JrZXI6IHNjcmlwdC10ZXN0cy9yZXNv
bHZlLXVybC1zeW5jLmpzCitbV29ya2VyXSAqIFJlc29sdmluZyBhIGdlbmVyYXRlZCBVUkwuCitQ
QVNTIFtXb3JrZXJdIGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIFtXb3JrZXJdIGlz
RmlsZSBpcyB0cnVlCitbV29ya2VyXSAqIFJlc29sdmluZyB0ZXN0IGZpbGUgYnkgaGFuZAorUEFT
UyBbV29ya2VyXSBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29ya2VyXSBpc0Zp
bGUgaXMgdHJ1ZQorW1dvcmtlcl0gKiBSZXNvbHZpbmcgYSBjb21wbGV0ZWx5IGJvZ3VzIFVSTC4K
K1BBU1MgW1dvcmtlcl0gQ2F1Z2h0IGV4Y2VwdGlvbgorW1dvcmtlcl0gKiBSZXNvbHZpbmcgYSBV
Ukwgd2l0aCB0aGUgd3JvbmcgcHJvdG9jb2wKK1BBU1MgW1dvcmtlcl0gQ2F1Z2h0IGV4Y2VwdGlv
bgorW1dvcmtlcl0gKiBSZXNvbHZpbmcgYSBVUkwgd2l0aCBubyBzbGFzaCBiZXR3ZWVuIHR5cGUg
YW5kIGZpbGUKK1BBU1MgW1dvcmtlcl0gQ2F1Z2h0IGV4Y2VwdGlvbgorW1dvcmtlcl0gKiBSZXNv
bHZpbmcgYSBVUkwgd2l0aCBubyBzbGFzaCBiZXR3ZWVuIHByb3RvY29sIGFuZCB0eXBlCitQQVNT
IFtXb3JrZXJdIENhdWdodCBleGNlcHRpb24KK1tXb3JrZXJdICogUmVzb2x2ZSBhIHBhdGggdXNp
bmcgYmFja3NsYXNoZXMKK1BBU1MgW1dvcmtlcl0gZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgK
K1BBU1MgW1dvcmtlcl0gaXNGaWxlIGlzIHRydWUKK1tXb3JrZXJdICogUmVzb2x2ZSBhIGRpcmVj
dG9yeQorUEFTUyBbV29ya2VyXSBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29y
a2VyXSBpc0RpcmVjdG9yeSBpcyB0cnVlCitbV29ya2VyXSAqIFJlc29sdmUgYSBwYXRoIHVzaW5n
IGEgdHJhaWxpbmcgc2xhc2gKK1BBU1MgW1dvcmtlcl0gZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBh
dGgKK1BBU1MgW1dvcmtlcl0gaXNEaXJlY3RvcnkgaXMgdHJ1ZQorW1dvcmtlcl0gKiBSZXNvbHZp
bmcgYSBwZXJzaXN0ZW50IFVSTC4KK1BBU1MgW1dvcmtlcl0gZXhwZWN0ZWRQYXRoIGlzIGFjdHVh
bFBhdGgKK1BBU1MgW1dvcmtlcl0gaXNEaXJlY3RvcnkgaXMgdHJ1ZQorW1dvcmtlcl0gRmluaXNo
ZWQgcnVubmluZyB0ZXN0cy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0
ZW0vd29ya2Vycy9yZXNvbHZlLXVybC1zeW5jLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZlLXVybC1zeW5jLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGFh
OTc1MTZkMjUyODFlMDhmOTJmYmRkNGM1MTdmZDhlOGMxZjZjYgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLXN5
bmMuaHRtbApAQCAtMCwwICsxLDE2IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2ZzLXdvcmtlci10ZXN0LXV0aWwuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK3N0YXJ0V29ya2VyKCdzY3JpcHQtdGVzdHMvcmVzb2x2
ZS11cmwtc3luYy5qcycpOword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLmh0bWwgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZlLXVybC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjEwYjAxNDUzZGY5YzUwYTk4ZTA4MTY2YTZkMmQwZjk0YTI2ODQyNGIKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZlLXVy
bC5odG1sCkBAIC0wLDAgKzEsMTYgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0IHNyYz0iL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvZnMtd29ya2VyLXRlc3QtdXRpbC5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8c2NyaXB0Pgorc3RhcnRXb3JrZXIoJy4uL3NjcmlwdC10ZXN0cy9yZXNv
bHZlLXVyaS5qcycpOword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvZmlsZXN5c3RlbS93b3JrZXJzL3NjcmlwdC10ZXN0cy9URU1QTEFURS5odG1sIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMvc2NyaXB0LXRlc3RzL1RFTVBMQVRF
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTM5YmJlYjgzNjA4MTU5NGViNzBmZmU2NTNmYmZmNjcxYjQwY2U2
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93
b3JrZXJzL3NjcmlwdC10ZXN0cy9URU1QTEFURS5odG1sCkBAIC0wLDAgKzEsMTYgQEAKKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9qcy10ZXN0LXJlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iL2pzLXRlc3QtcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvZnMtd29y
a2VyLXRlc3QtdXRpbC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0Pgorc3RhcnRX
b3JrZXIoJ1lPVVJfSlNfRklMRV9IRVJFJyk7Cit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMvc2NyaXB0LXRlc3RzL3Jlc29sdmUt
dXJsLXN5bmMuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9z
Y3JpcHQtdGVzdHMvcmVzb2x2ZS11cmwtc3luYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjNjMDcwNDhmYTY5
YTViMjY0NzFkYTQ2NWJkOTU0NjBlODFmNDNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMvc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJs
LXN5bmMuanMKQEAgLTAsMCArMSwxNTYgQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAg
ICBpbXBvcnRTY3JpcHRzKCcuLi8uLi9yZXNvdXJjZXMvZnMtd29ya2VyLWNvbW1vbi5qcycpOwor
ICAgIGltcG9ydFNjcmlwdHMoJy4uLy4uL3Jlc291cmNlcy9mcy10ZXN0LXV0aWwuanMnKTsKK30K
KworZGVzY3JpcHRpb24oIlRlc3RzIHVzaW5nIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1TeW5jVVJM
IHRvIG9idGFpbiBhbiBFbnRyeSBmcm9tIGEgVVJMIik7CisKK3ZhciB0ZXN0RmlsZU5hbWUgPSAn
L3Rlc3RGaWxlJzsKK3ZhciBmaWxlU3lzdGVtID0gbnVsbDsKK3ZhciBleHBlY3RlZEFuZFJ1bk5l
eHQgPSBmdW5jdGlvbigpIHsgdGVzdFBhc3NlZCgiIik7IGNsZWFudXBBbmRSdW5OZXh0KCk7IH07
CisKK3ZhciBleHBlY3RlZFBhdGggPSBudWxsOwordmFyIGFjdHVhbFBhdGggPSBudWxsOworCitm
dW5jdGlvbiBjcmVhdGVUZXN0RmlsZSgpIHsKKyAgICByZXR1cm4gZmlsZVN5c3RlbS5yb290Lmdl
dEZpbGUodGVzdEZpbGVOYW1lLCB7Y3JlYXRlOnRydWV9KTsKK30KKworZnVuY3Rpb24gYXNzZXJ0
UGF0aHNNYXRjaChleHBlY3RlZCwgYWN0dWFsKSB7CisgICAgZXhwZWN0ZWRQYXRoID0gZXhwZWN0
ZWQ7CisgICAgYWN0dWFsUGF0aCA9IGFjdHVhbDsKKyAgICBzaG91bGRCZSgiZXhwZWN0ZWRQYXRo
IiwgImFjdHVhbFBhdGgiKTsKK30KKwordmFyIGlzRGlyZWN0b3J5ID0gZmFsc2U7CitmdW5jdGlv
biBhc3NlcnRJc0RpcmVjdG9yeShlbnRyeSkgeworICAgIGlzRGlyZWN0b3J5ID0gZW50cnkuaXNE
aXJlY3Rvcnk7CisgICAgc2hvdWxkQmVUcnVlKCJpc0RpcmVjdG9yeSIpOworfQorCit2YXIgaXNG
aWxlID0gZmFsc2U7CitmdW5jdGlvbiBhc3NlcnRJc0ZpbGUoZW50cnkpIHsKKyAgICBpc0ZpbGUg
PSBlbnRyeS5pc0ZpbGU7CisgICAgc2hvdWxkQmVUcnVlKCJpc0ZpbGUiKTsKK30KKworLy8gVGVz
dCBib2R5IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK2Z1bmN0aW9uIHJ1bkJhc2ljVGVzdCgpIHsKKyAgICBkZWJ1ZygiKiBS
ZXNvbHZpbmcgYSBnZW5lcmF0ZWQgVVJMLiIpOworICAgIGVudHJ5ID0gY3JlYXRlVGVzdEZpbGUo
KTsKKyAgICB2YXIgZSA9IHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1TeW5jVVJMKGVudHJ5LnRvVVJM
KCkpOworICAgIGFzc2VydFBhdGhzTWF0Y2goZW50cnkuZnVsbFBhdGgsIGUuZnVsbFBhdGgpOwor
ICAgIGFzc2VydElzRmlsZShlKTsKK30KKworZnVuY3Rpb24gcnVuSGFuZG1hZGVVUkwoKSB7Cisg
ICAgZGVidWcoIiogUmVzb2x2aW5nIHRlc3QgZmlsZSBieSBoYW5kIik7CisgICAgZW50cnkgPSBj
cmVhdGVUZXN0RmlsZSgpOworICAgIHZhciBlID0gcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNV
UkwoImZpbGVzeXN0ZW06aHR0cDovLzEyNy4wLjAuMTo4MDAwL3RlbXBvcmFyeS90ZXN0RmlsZSIp
OworICAgIGFzc2VydFBhdGhzTWF0Y2godGVzdEZpbGVOYW1lLCBlLmZ1bGxQYXRoKTsKKyAgICBh
c3NlcnRJc0ZpbGUoZSk7Cit9CisKK2Z1bmN0aW9uIHJ1bkJvZ3VzVVJMKCkgeworICAgIGRlYnVn
KCIqIFJlc29sdmluZyBhIGNvbXBsZXRlbHkgYm9ndXMgVVJMLiIpOworICAgIHRyeSB7CisgICAg
ICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1TeW5jVVJMKCJmb28iKTsKKyAgICAgICAgdGVzdEZh
aWxlZCgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiQ2F1Z2h0IGV4
Y2VwdGlvbiIpOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuV3JvbmdQcm90b2NvbCgpIHsKKyAg
ICBkZWJ1ZygiKiBSZXNvbHZpbmcgYSBVUkwgd2l0aCB0aGUgd3JvbmcgcHJvdG9jb2wiKTsKKyAg
ICB0cnkgeworICAgICAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTCgiaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL2Zvby9iYXIvYmF6Iik7CisgICAgICAgIHRlc3RGYWlsZWQoKTsKKyAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb24iKTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIHJ1bk5vdEVub3VnaFNsYXNoZXMoKSB7CisgICAgZGVidWcoIiog
UmVzb2x2aW5nIGEgVVJMIHdpdGggbm8gc2xhc2ggYmV0d2VlbiB0eXBlIGFuZCBmaWxlIik7Cisg
ICAgZW50cnkgPSBjcmVhdGVUZXN0RmlsZSgpOworICAgIHRyeSB7CisgICAgICAgIHJlc29sdmVM
b2NhbEZpbGVTeXN0ZW1TeW5jVVJMKCJmaWxlc3lzdGVtOmh0dHA6Ly8xMjcuMC4wLjE6ODAwMC90
ZW1wb3Jhcnl0ZXN0RmlsZSIpOworICAgICAgICB0ZXN0RmFpbGVkKCk7CisgICAgfSBjYXRjaCAo
ZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0aW9uIik7CisgICAgfQorfQor
CitmdW5jdGlvbiBydW5Ob3RFbm91Z2hTbGFzaGVzMigpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZp
bmcgYSBVUkwgd2l0aCBubyBzbGFzaCBiZXR3ZWVuIHByb3RvY29sIGFuZCB0eXBlIik7CisgICAg
ZW50cnkgPSBjcmVhdGVUZXN0RmlsZSgpOworICAgIHRyeSB7CisgICAgICAgIHJlc29sdmVMb2Nh
bEZpbGVTeXN0ZW1TeW5jVVJMKCJmaWxlc3lzdGVtOmh0dHA6Ly8xMjcuMC4wLjE6ODAwMHRlbXBv
cmFyeS90ZXN0RmlsZSIpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgi
Q2F1Z2h0IGV4Y2VwdGlvbiIpOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuVXNlQmFja1NsYXNo
ZXMoKSB7CisgICAgZGVidWcoIiogUmVzb2x2ZSBhIHBhdGggdXNpbmcgYmFja3NsYXNoZXMiKTsK
KyAgICBlbnRyeSA9IGZpbGVTeXN0ZW0ucm9vdC5nZXREaXJlY3RvcnkoImZvbyIsIHtjcmVhdGU6
dHJ1ZX0pLmdldEZpbGUoInRlc3RGaWxlIiwge2NyZWF0ZTp0cnVlfSk7CisgICAgdmFyIGUgPSBy
ZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTCgiZmlsZXN5c3RlbTpodHRwOi8vMTI3LjAuMC4x
OjgwMDAvdGVtcG9yYXJ5L2Zvb1xcdGVzdEZpbGUiKTsKKyAgICBhc3NlcnRQYXRoc01hdGNoKCIv
Zm9vL3Rlc3RGaWxlIiwgZS5mdWxsUGF0aCk7CisgICAgYXNzZXJ0SXNGaWxlKGUpOworfQorCitm
dW5jdGlvbiBydW5EaXJlY3RvcnkoKSB7CisgICAgZGVidWcoIiogUmVzb2x2ZSBhIGRpcmVjdG9y
eSIpOworICAgIGVudHJ5ID0gZmlsZVN5c3RlbS5yb290LmdldERpcmVjdG9yeSgiZm9vIiwge2Ny
ZWF0ZTp0cnVlfSk7CisgICAgdmFyIGUgPSByZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTCgi
ZmlsZXN5c3RlbTpodHRwOi8vMTI3LjAuMC4xOjgwMDAvdGVtcG9yYXJ5L2ZvbyIpOworICAgIGFz
c2VydFBhdGhzTWF0Y2goIi9mb28iLCBlLmZ1bGxQYXRoKTsKKyAgICBhc3NlcnRJc0RpcmVjdG9y
eShlKTsKK30KKworZnVuY3Rpb24gcnVuV2l0aFRyYWlsaW5nU2xhc2goKSB7CisgICAgZGVidWco
IiogUmVzb2x2ZSBhIHBhdGggdXNpbmcgYSB0cmFpbGluZyBzbGFzaCIpOworICAgIGVudHJ5ID0g
ZmlsZVN5c3RlbS5yb290LmdldERpcmVjdG9yeSgiZm9vIiwge2NyZWF0ZTp0cnVlfSk7CisgICAg
dmFyIGUgPSByZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTCgiZmlsZXN5c3RlbTpodHRwOi8v
MTI3LjAuMC4xOjgwMDAvdGVtcG9yYXJ5L2Zvby8iKTsKKyAgICBhc3NlcnRQYXRoc01hdGNoKCIv
Zm9vIiwgZS5mdWxsUGF0aCk7CisgICAgYXNzZXJ0SXNEaXJlY3RvcnkoZSk7Cit9CisKK2Z1bmN0
aW9uIHJ1blBlcnNpc3RlbnRUZXN0KCkgeworICAgIGRlYnVnKCIqIFJlc29sdmluZyBhIHBlcnNp
c3RlbnQgVVJMLiIpOworICAgIHZhciBmcyA9IHJlcXVlc3RGaWxlU3lzdGVtU3luYyhQRVJTSVNU
RU5ULCAxMDApOworICAgIGVudHJ5ID0gcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkwoZnMu
cm9vdC50b1VSTCgpKTsKKyAgICBhc3NlcnRQYXRoc01hdGNoKCIvIiwgZW50cnkuZnVsbFBhdGgp
OworICAgIGFzc2VydElzRGlyZWN0b3J5KGVudHJ5KTsKK30KKworLy8gRW5kIG9mIHRlc3QgYm9k
eSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK3ZhciB0ZXN0c0xpc3QgPSBbCisgICAgcnVuQmFzaWNUZXN0LAorICAgIHJ1bkhhbmRtYWRl
VVJMLAorICAgIHJ1bkJvZ3VzVVJMLAorICAgIHJ1bldyb25nUHJvdG9jb2wsCisgICAgcnVuTm90
RW5vdWdoU2xhc2hlcywKKyAgICBydW5Ob3RFbm91Z2hTbGFzaGVzMiwKKyAgICBydW5Vc2VCYWNr
U2xhc2hlcywKKyAgICBydW5EaXJlY3RvcnksCisgICAgcnVuV2l0aFRyYWlsaW5nU2xhc2gsCisg
ICAgcnVuUGVyc2lzdGVudFRlc3QsCitdOwordmFyIHRlc3RDb3VudGVyID0gMDsKKworaWYgKHRo
aXMucmVxdWVzdEZpbGVTeXN0ZW0pIHsKKyAgICBmaWxlU3lzdGVtID0gcmVxdWVzdEZpbGVTeXN0
ZW1TeW5jKHRoaXMuVEVNUE9SQVJZLCAxMDApOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVz
dHNMaXN0Lmxlbmd0aDsgKytpKSB7CisgICAgICB0ZXN0c0xpc3RbaV0oKTsKKyAgICAgIHJlbW92
ZUFsbEluRGlyZWN0b3J5U3luYyhmaWxlU3lzdGVtLnJvb3QpOworICAgICAgZW50cnkgPSBudWxs
OworICAgIH0KKyAgICBkZWJ1ZygiRmluaXNoZWQgcnVubmluZyB0ZXN0cy4iKTsKKyAgICBmaW5p
c2hKU1Rlc3QoKTsKK30gZWxzZQorICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRmlsZVN5
c3RlbSBBUEkgc3VwcG9ydC4iKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggZTg4OGEyOTlmMzA5YmNjMGMxMTYwYzdhYTk2YWNkMmFkYTZlNmM0MS4uNWIy
MjJlZDQzZDg4ZmIxZjcxOTQxMjY5ZTk4M2ZlMmY2NjhkNTczZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIzIEBACisyMDExLTAzLTE4ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtmaWxlYXBp
XSBBZGQgVVJJIHJlc29sdXRpb24gc3VwcG9ydCB0byBXb3JrZXJDb250ZXh0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTY0NAorCisgICAgICAgIFRl
c3RzOiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZlLXVybC1zeW5jLmh0bWwK
KyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJs
Lmh0bWwKKworICAgICAgICAqIGZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxvY2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0pOgorICAgICAgICBBZGQg
c3VwcG9ydCBmb3Igd29ya2Vycy4KKyAgICAgICAgKiBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5o
OgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJDb250ZXh0OjpyZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckNvbnRleHQ6OnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1TeW5jVVJMKToKKyAg
ICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
ckNvbnRleHQuaWRsOgorCiAyMDExLTAzLTE4ICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAKaW5kZXggNjg4ZDE1NTU5NWY1NzEx
OTJjZjM2OGUwNTlmM2Y2NzQ2NWY5MDJhNi4uOTU1ZDcyMzJkNGRjMDliYzQ1OWQ1MjdhMDNmM2Y1
NjI4MTc3Yjk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVT
eXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNw
cApAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwgY29ucwogICAgIEFzeW5jRmls
ZVN5c3RlbTo6b3BlbkZpbGVTeXN0ZW0oYmFzZVBhdGgsIGlkZW50aWZpZXIsIHR5cGUsIGNyZWF0
ZSwgY2FsbGJhY2tzKTsKIH0KIAotdm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVt
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0
eXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9p
ZCBMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBib29sKQogewogICAgIC8vIEFzeW5jRmlsZVN5
c3RlbTo6b3BlbkZpbGVTeXN0ZW0gY2FsbHMgY2FsbGJhY2tzIHN5bmNocm9ub3VzbHksIHNvIHRo
ZSBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5LgogICAgIGNvbnRleHQt
PnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkZpbGVTeXN0ZW0sIGZpbGVTeXN0ZW1C
YXNlUGF0aCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5kYXRhYmFzZUlkZW50aWZpZXIo
KSwgdHlwZSwgZmFsc2UsIGNhbGxiYWNrcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxG
aWxlU3lzdGVtLmgKaW5kZXggYmFmNzJkOWQwYzI0ZGU3YWM5ZGNhY2EyZWZlYWQzMjAxN2M5MGYy
Yi4uMmVhYmQ3YTIzZDM2OWZkM2FiY2YwOGQ2MjdlNjk5YWI4ZGVlNzIyZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgTG9jYWxGaWxlU3lzdGVtJiBsb2NhbEZpbGVTeXN0ZW0oKTsKIAogICAgIC8v
IERvZXMgbm90IGNyZWF0ZSB0aGUgcm9vdCBwYXRoIGZvciBmaWxlIHN5c3RlbSwganVzdCByZWFk
cyBpdCBpZiBhdmFpbGFibGUuCi0gICAgdm9pZCByZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4pOworICAgIHZvaWQgcmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0
ZW1DYWxsYmFja3M+LCBib29sIHN5bmNocm9ub3VzID0gZmFsc2UpOwogCiAgICAgdm9pZCByZXF1
ZXN0RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpU
eXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+
LCBib29sIHN5bmNocm9ub3VzID0gZmFsc2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmNwcAppbmRleCBhY2Y3ZjA0NmQ3NTM3NjFhMTExZmI4YjM4ZDI1Mjc0MjNhYTlm
NTEyLi5mZDIwNzg4MDcxMTEyMDRkZjQwM2ZmMzI0N2ZhYmE5NDVmNzlkYmZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAgLTY3LDkgKzY3LDEyIEBACiAKICNp
ZiBFTkFCTEUoRklMRV9TWVNURU0pCiAjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCisjaW5j
bHVkZSAiRGlyZWN0b3J5RW50cnlTeW5jLmgiCiAjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbS5oIgor
I2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW1CYXNlLmgiCiAjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbVN5
bmMuaCIKICNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRmlsZUVudHJ5U3lu
Yy5oIgogI2luY2x1ZGUgIkZpbGVFcnJvci5oIgogI2luY2x1ZGUgIkZpbGVFeGNlcHRpb24uaCIK
ICNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2suaCIKQEAgLTM3Nyw2ICszODAsNTMgQEAgUGFz
c1JlZlB0cjxET01GaWxlU3lzdGVtU3luYz4gV29ya2VyQ29udGV4dDo6cmVxdWVzdEZpbGVTeXN0
ZW1TeW5jKGludCB0eXBlLCBsb24KICAgICByZXR1cm4gaGVscGVyLmdldFJlc3VsdChlYyk7CiB9
CiAKK3ZvaWQgV29ya2VyQ29udGV4dDo6cmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChjb25zdCBT
dHJpbmcmIHVybCwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sKKyAgICBLVVJMIGNvbXBs
ZXRlZFVSTCA9IGNvbXBsZXRlVVJMKHVybCk7CisgICAgaWYgKCFBc3luY0ZpbGVTeXN0ZW06Omlz
QXZhaWxhYmxlKCkgfHwgIXNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0ZpbGVTeXN0ZW0oKSB8
fCAhc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChjb21wbGV0ZWRVUkwpKSB7CisgICAgICAg
IERPTUZpbGVTeXN0ZW06OnNjaGVkdWxlQ2FsbGJhY2sodGhpcywgZXJyb3JDYWxsYmFjaywgRmls
ZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpTRUNVUklUWV9FUlIpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlOworICAgIFN0cmluZyBm
aWxlUGF0aDsKKyAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkgfHwgIURPTUZpbGVTeXN0
ZW1CYXNlOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29tcGxldGVkVVJMLCB0eXBlLCBmaWxlUGF0aCkp
IHsKKyAgICAgICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayh0aGlzLCBlcnJvckNh
bGxiYWNrLCBGaWxlRXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6OlNZTlRBWF9FUlIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIExvY2FsRmlsZVN5c3RlbTo6bG9jYWxGaWxlU3lzdGVt
KCkucmVhZEZpbGVTeXN0ZW0odGhpcywgdHlwZSwgUmVzb2x2ZVVSSUNhbGxiYWNrczo6Y3JlYXRl
KHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgdGhpcywgZmlsZVBhdGgpKTsKK30KKwor
UGFzc1JlZlB0cjxFbnRyeVN5bmM+IFdvcmtlckNvbnRleHQ6OnJlc29sdmVMb2NhbEZpbGVTeXN0
ZW1TeW5jVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBl
YyA9IDA7CisgICAgS1VSTCBjb21wbGV0ZWRVUkwgPSBjb21wbGV0ZVVSTCh1cmwpOworICAgIGlm
ICghQXN5bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpIHx8ICFzZWN1cml0eU9yaWdpbigpLT5j
YW5BY2Nlc3NGaWxlU3lzdGVtKCkgfHwgIXNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QoY29t
cGxldGVkVVJMKSkgeworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OlNFQ1VSSVRZX0VSUjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5
cGU7CisgICAgU3RyaW5nIGZpbGVQYXRoOworICAgIGlmICghY29tcGxldGVkVVJMLmlzVmFsaWQo
KSB8fCAhRE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNrRmlsZVN5c3RlbVVSTChjb21wbGV0ZWRVUkws
IHR5cGUsIGZpbGVQYXRoKSkgeworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OlNZTlRBWF9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEZpbGVTeXN0ZW1TeW5jQ2FsbGJh
Y2tIZWxwZXIgcmVhZEZpbGVTeXN0ZW1IZWxwZXI7CisgICAgTG9jYWxGaWxlU3lzdGVtOjpsb2Nh
bEZpbGVTeXN0ZW0oKS5yZWFkRmlsZVN5c3RlbSh0aGlzLCB0eXBlLCBGaWxlU3lzdGVtQ2FsbGJh
Y2tzOjpjcmVhdGUocmVhZEZpbGVTeXN0ZW1IZWxwZXIuc3VjY2Vzc0NhbGxiYWNrKCksIHJlYWRG
aWxlU3lzdGVtSGVscGVyLmVycm9yQ2FsbGJhY2soKSwgdGhpcyksIHRydWUpOworICAgIFJlZlB0
cjxET01GaWxlU3lzdGVtU3luYz4gZmlsZVN5c3RlbSA9IHJlYWRGaWxlU3lzdGVtSGVscGVyLmdl
dFJlc3VsdChlYyk7CisgICAgaWYgKCFmaWxlU3lzdGVtKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFJlZlB0cjxFbnRyeVN5bmM+IGVudHJ5ID0gZmlsZVN5c3RlbS0+cm9vdCgpLT5nZXREaXJl
Y3RvcnkoZmlsZVBhdGgsIDAsIGVjKTsKKyAgICBpZiAoZWMgPT0gRmlsZUV4Y2VwdGlvbjo6VFlQ
RV9NSVNNQVRDSF9FUlIpCisgICAgICAgIHJldHVybiBmaWxlU3lzdGVtLT5yb290KCktPmdldEZp
bGUoZmlsZVBhdGgsIDAsIGVjKTsKKworICAgIHJldHVybiBlbnRyeS5yZWxlYXNlKCk7Cit9CisK
IENPTVBJTEVfQVNTRVJUKHN0YXRpY19jYXN0PGludD4oV29ya2VyQ29udGV4dDo6VEVNUE9SQVJZ
KSA9PSBzdGF0aWNfY2FzdDxpbnQ+KEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5KSwgZW51bV9t
aXNtYXRjaCk7CiBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KFdvcmtlckNvbnRleHQ6
OlBFUlNJU1RFTlQpID09IHN0YXRpY19jYXN0PGludD4oQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0
ZW50KSwgZW51bV9taXNtYXRjaCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmgKaW5kZXggMmU4MDJmMjU1MjRkMTY0NTg2YjFkYTBiNmEwY2IzOTczYjZhZDM2ZC4u
NTEzOGU2NzAzNTU3ZjE0MmRiMGIzNTBiYWZiNmMwYWMwY2FiNzBmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKQEAgLTUwLDYgKzUwLDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIGNsYXNzIERhdGFiYXNlOwogICAgIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CiAg
ICAgY2xhc3MgRGF0YWJhc2VTeW5jOworICAgIGNsYXNzIEVudHJ5Q2FsbGJhY2s7CisgICAgY2xh
c3MgRW50cnlTeW5jOwogICAgIGNsYXNzIEVycm9yQ2FsbGJhY2s7CiAgICAgY2xhc3MgRmlsZVN5
c3RlbUNhbGxiYWNrOwogICAgIGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlcjsKQEAgLTEzMSw2ICsx
MzMsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH07CiAgICAgICAgIHZvaWQgcmVx
dWVzdEZpbGVTeXN0ZW0oaW50IHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzUmVmUHRyPEZpbGVT
eXN0ZW1DYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwogICAgICAgICBQYXNz
UmVmUHRyPERPTUZpbGVTeXN0ZW1TeW5jPiByZXF1ZXN0RmlsZVN5c3RlbVN5bmMoaW50IHR5cGUs
IGxvbmcgbG9uZyBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgcmVzb2x2ZUxv
Y2FsRmlsZVN5c3RlbVVSTChjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxFbnRyeUNhbGxi
YWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisgICAgICAgIFBhc3NSZWZQdHI8RW50
cnlTeW5jPiByZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTChjb25zdCBTdHJpbmcmIHVybCwg
RXhjZXB0aW9uQ29kZSYpOwogI2VuZGlmCiAKICAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUg
dXNlZCBmb3IgR0MgbWFya2luZy4gU2VlIEpTV29ya2VyQ29udGV4dDo6bWFya0NoaWxkcmVuKE1h
cmtTdGFjayYpIGluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuaWRsIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAppbmRl
eCAxNzkyMjFlZDRlYjczMDdjM2Q4NTNiMzRkM2U5ZTVjOGNmOWQ3ZDkyLi5lMGFjYjI0MDJiNDhi
MDY5OWQ0YzRhMTg1ZGMwNTJiMjU3YzM3OGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5pZGwKQEAgLTExMCw2ICsxMTAsOCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBFUlNJU1RFTlQgPSAxOwogICAgICAgICBbRW5hYmxl
ZEF0UnVudGltZT1GaWxlU3lzdGVtXSB2b2lkIHJlcXVlc3RGaWxlU3lzdGVtKGluIHVuc2lnbmVk
IHNob3J0IHR5cGUsIGluIGxvbmcgbG9uZyBzaXplLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBG
aWxlU3lzdGVtQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFs
XSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwogICAgICAgICBbRW5hYmxlZEF0UnVudGlt
ZT1GaWxlU3lzdGVtXSBET01GaWxlU3lzdGVtU3luYyByZXF1ZXN0RmlsZVN5c3RlbVN5bmMoaW4g
dW5zaWduZWQgc2hvcnQgdHlwZSwgaW4gbG9uZyBsb25nIHNpemUpIHJhaXNlcyAoRmlsZUV4Y2Vw
dGlvbik7CisgICAgICAgIFtFbmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIHZvaWQgcmVzb2x2
ZUxvY2FsRmlsZVN5c3RlbVVSTChpbiBET01TdHJpbmcgdXJsLCBpbiBbQ2FsbGJhY2ssIE9wdGlv
bmFsXSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25h
bF0gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKKyAgICAgICAgW0VuYWJsZWRBdFJ1bnRp
bWU9RmlsZVN5c3RlbV0gRW50cnlTeW5jIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1TeW5jVVJMKGlu
IERPTVN0cmluZyB1cmwpIHJhaXNlcyAoRmlsZUV4Y2VwdGlvbik7CiAKICAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIEZsYWdzQ29uc3RydWN0
b3IgRmxhZ3M7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNTgzZWNjZWIy
NGJlOWIwOGJjMGQ0NmUxZDIwYTI3ZTNmMDYwOGRlYy4uY2ZjNDY1ZjE0MmMwMzY1ZjNlOWZmNTA4
OTNiYWQ3ZDdjNjVhYjkyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
NCBAQAorMjAxMS0wMy0xOCAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbZmlsZWFwaV0gQWRk
IFVSSSByZXNvbHV0aW9uIHN1cHBvcnQgdG8gV29ya2VyQ29udGV4dAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU2NDQKKworICAgICAgICBQYXNzICJj
cmVhdGUiIGJvb2wgdGhyb3VnaCB0byBhbGxvdyBvcGVuaW5nCisgICAgICAgIGEgZmlsZXN5c3Rl
bSB3aXRob3V0IGFsbG93aW5nIGNyZWF0aW9uLgorCisgICAgICAgICogc3JjL0xvY2FsRmlsZVN5
c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsRmlsZVN5c3RlbTo6cmVh
ZEZpbGVTeXN0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxGaWxlU3lzdGVtOjpyZXF1ZXN0
RmlsZVN5c3RlbSk6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJXb3JrZXJCYXNlOjpvcGVuRmlsZVN5c3RlbUZvcldvcmtlcik6CisgICAgICAg
ICogc3JjL1dlYldvcmtlckJhc2UuaDoKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2U6OnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZCk6CisgICAgICAgIChX
ZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om9wZW5GaWxlU3lzdGVtT25N
YWluVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZS5oOgorCiAyMDExLTAzLTE3ICBBbGV4ZXkgTWFyaW5pY2hldiAgPGFtYXJpbmljaGV2QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5j
cHAKaW5kZXggMzVlNGRlODI4OWQ5MjU4MGJmNzJjYTZhZDMwMmE3NTI5MzFiYmQzNC4uZGVhYzMz
MThkYjQ4ZmNjYmQ0MzkxZGM1ZjFmMzc0ZTQ4MzE1NWU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcApAQCAtNTcs
MjkgKzU3LDQwIEBAIExvY2FsRmlsZVN5c3RlbSYgTG9jYWxGaWxlU3lzdGVtOjpsb2NhbEZpbGVT
eXN0ZW0oKQogICAgIHJldHVybiAqbG9jYWxGaWxlU3lzdGVtOwogfQogCi12b2lkIExvY2FsRmls
ZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
QXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQgJiYgY29udGV4dC0+aXNE
b2N1bWVudCgpKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KGNvbnRleHQpOwotICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6
OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgd2ViRnJhbWUtPmNsaWVudCgpLT5v
cGVuRmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4o
dHlwZSksIDAsIGZhbHNlLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tz
LCB0eXBlKSk7Ci19CituYW1lc3BhY2UgewogCi12b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVxdWVz
dEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaWxlU3lz
dGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQorZW51bSBDcmVhdGlvbkZs
YWcgeworICAgIE9wZW5FeGlzdGluZywKKyAgICBDcmVhdGVJZk5vdFByZXNlbnQKK307CisKK3Zv
aWQgb3BlbkZpbGVTeXN0ZW1IZWxwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
QXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMsIGxvbmcgbG9uZyBzaXplLCBDcmVh
dGlvbkZsYWcgY3JlYXRlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBpZiAoY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oY29udGV4dCk7CiAgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUg
PSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgICAgIHdl
YkZyYW1lLT5jbGllbnQoKS0+b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRpY19jYXN0PFdl
YkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCB0cnVlLCBuZXcgV2ViRmlsZVN5c3RlbUNh
bGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlKSk7CisgICAgICAgIHdlYkZyYW1lLT5jbGllbnQo
KS0+b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5
cGU+KHR5cGUpLCBzaXplLCBjcmVhdGUgPT0gQ3JlYXRlSWZOb3RQcmVzZW50LCBuZXcgV2ViRmls
ZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlKSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihjb250ZXh0KTsKICAgICAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRl
clByb3h5ID0gJndvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwog
ICAgICAgICBXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJC
YXNlKj4od29ya2VyTG9hZGVyUHJveHkpOwotICAgICAgICB3ZWJXb3JrZXItPm9wZW5GaWxlU3lz
dGVtRm9yV29ya2VyKHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXpl
LCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlLCBjb250ZXh0
LCBzeW5jaHJvbm91cyksIHN5bmNocm9ub3VzKTsKKyAgICAgICAgd2ViV29ya2VyLT5vcGVuRmls
ZVN5c3RlbUZvcldvcmtlcihzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwg
c2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxs
YmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJv
bm91cyk7CiAgICAgfQogfQogCit9IC8vIG5hbWVzcGFjZQorCit2b2lkIExvY2FsRmlsZVN5c3Rl
bTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNG
aWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMpCit7CisgICAgb3BlbkZpbGVTeXN0ZW1IZWxw
ZXIoY29udGV4dCwgdHlwZSwgY2FsbGJhY2tzLCBzeW5jaHJvbm91cywgMCwgT3BlbkV4aXN0aW5n
KTsKK30KKwordm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJlcXVlc3RGaWxlU3lzdGVtKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25n
IGxvbmcgc2l6ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNr
cywgYm9vbCBzeW5jaHJvbm91cykKK3sKKyAgICBvcGVuRmlsZVN5c3RlbUhlbHBlcihjb250ZXh0
LCB0eXBlLCBjYWxsYmFja3MsIHN5bmNocm9ub3VzLCBzaXplLCBDcmVhdGVJZk5vdFByZXNlbnQp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRklMRV9T
WVNURU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJC
YXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCmlu
ZGV4IGIxNmI2ZDQwN2MwYTc3N2E3NTA1NzY2ZTAzM2Y5YTQ1MzgyNTJlZDUuLjRiMjdkZGIzN2Qy
NDY5ZTU1YjJjYTM1MmYyYjhlZGM3YWI3MmMyNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCkBAIC0yMzcsNyArMjM3LDcgQEAgYm9vbCBXZWJXb3Jr
ZXJCYXNlOjphbGxvd0RhdGFiYXNlKFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBj
b25zdCBXZWJTdHIKIH0KIAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLXZvaWQgV2ViV29ya2Vy
QmFzZTo6b3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBs
b25nIGxvbmcgc2l6ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBib29sIHN5
bmNocm9ub3VzKQordm9pZCBXZWJXb3JrZXJCYXNlOjpvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihX
ZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQogewogICAg
IFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpOwogICAg
IFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgV2Vi
V29ya2VyQmFzZTo6b3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSB0
eXBlLCBsb25nIGxvbmcKICAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29wLmNy
ZWF0ZVVuaXF1ZUlkKCkpKTsKIAogICAgIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlPiBicmlkZ2UgPSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGUo
dGhpcywgd29ya2VyQ29udGV4dCwgY2FsbGJhY2tzKTsKLSAgICBicmlkZ2UtPnBvc3RPcGVuRmls
ZVN5c3RlbVRvTWFpblRocmVhZChjb21tb25DbGllbnQoKSwgdHlwZSwgc2l6ZSwgbW9kZSk7Cisg
ICAgYnJpZGdlLT5wb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoY29tbW9uQ2xpZW50KCks
IHR5cGUsIHNpemUsIGNyZWF0ZSwgbW9kZSk7CiAKICAgICBpZiAoc3luY2hyb25vdXMpIHsKICAg
ICAgICAgaWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUpID09IE1lc3Nh
Z2VRdWV1ZVRlcm1pbmF0ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJXb3JrZXJCYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJC
YXNlLmgKaW5kZXggZWM3MzUwNTY5YTg3NGVhOTgyNThiZTgyOTc2YTJhYWIwNDNmMGU1My4uOGZi
MDMyZTYxN2VmZGIyZjM3YmE1YTk5MTFhNTJjMjViM2JlMzlkYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaApAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGFsbG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcm
IG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSk7CiAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0gICAgdm9pZCBvcGVuRmlsZVN5
c3RlbUZvcldvcmtlcihXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgV2ViRmls
ZVN5c3RlbUNhbGxiYWNrcyosIGJvb2wgc3luY2hyb25vdXMpOworICAgIHZvaWQgb3BlbkZpbGVT
eXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wg
Y3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiwgYm9vbCBzeW5jaHJvbm91cyk7CiAjZW5k
aWYKIAogICAgIC8vIEV4ZWN1dGVzIHRoZSBnaXZlbiB0YXNrIG9uIHRoZSBtYWluIHRocmVhZC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKaW5kZXggMGZiYTQyNTU0NTUwZmM2YWU1MTgxM2Ez
N2RlOWYxNzcyOWNjMTQ1OC4uYWI0NGM3Mjc0ODk0NjNhYjllNDg5OTg2YzhmYjRhODAwNmVlODI4
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKQEAgLTE1MCw5ICsxNTAsOSBAQCB2b2lk
IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnN0b3AoKQogICAgIH0KIH0KIAotdm9p
ZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVTeXN0ZW1Ub01h
aW5UaHJlYWQoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0
ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3ZvaWQg
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxlU3lzdGVtVG9NYWlu
VGhyZWFkKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVt
OjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgY29uc3QgU3RyaW5nJiBt
b2RlKQogewotICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2so
Jm9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkLCBjb21tb25DbGllbnQsIHR5cGUsIHNpemUsIHRo
aXMsIG1vZGUpKTsKKyAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tU
YXNrKCZvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZCwgY29tbW9uQ2xpZW50LCB0eXBlLCBzaXpl
LCBjcmVhdGUsIHRoaXMsIG1vZGUpKTsKIH0KIAogdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlOjpwb3N0TW92ZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVt
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVBhdGgsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25QYXRo
LCBjb25zdCBTdHJpbmcmIG1vZGUpCkBAIC0yMTIsMTIgKzIxMiwxMiBAQCB2b2lkIFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RSZWFkRGlyZWN0b3J5VG9NYWluVGhyZWFkKFdl
YkZpbGVTeXN0ZQogICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rh
c2soJnJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQsIGZpbGVTeXN0ZW0sIHBhdGgsIHRoaXMsIG1v
ZGUpKTsKIH0KIAotdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmls
ZVN5c3RlbU9uTWFpblRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29y
a2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBs
b25nIHNpemUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqIGJyaWRnZSwgY29uc3Qg
U3RyaW5nJiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVu
RmlsZVN5c3RlbU9uTWFpblRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9u
ZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
KiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBpZiAoIWNvbW1vbkNsaWVudCkK
ICAgICAgICAgYnJpZGdlLT5kaWRGYWlsT25NYWluVGhyZWFkKFdlYkZpbGVFcnJvckFib3J0LCBt
b2RlKTsKICAgICBlbHNlIHsKLSAgICAgICAgY29tbW9uQ2xpZW50LT5vcGVuRmlsZVN5c3RlbSh0
eXBlLCBzaXplLCBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6Y3JlYXRlTGVha2VkUHRy
KGJyaWRnZSwgbW9kZSkpOworICAgICAgICBjb21tb25DbGllbnQtPm9wZW5GaWxlU3lzdGVtKHR5
cGUsIHNpemUsIGNyZWF0ZSwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0ZUxl
YWtlZFB0cihicmlkZ2UsIG1vZGUpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uu
aAppbmRleCBmYTU3ZjM4Mjk4ZjczMTAzZDM4ZGJhZjFlMzg3MTU3NWY1NTAxNGM4Li44NGNkZGFk
MmQ1YzQ5ODNiZDlhNjkxYzJmYTZiOWU4MWJkOWJiOTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZS5oCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBNZXRob2RzIHRo
YXQgY3JlYXRlIGFuIGluc3RhbmNlIGFuZCBwb3N0IGFuIGluaXRpYWwgcmVxdWVzdCB0YXNrIHRv
IHRoZSBtYWluIHRocmVhZC4gVGhleSBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgd29ya2VyIHRocmVh
ZC4KLSAgICB2b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25Xb3Jr
ZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgY29uc3QgU3Ry
aW5nJiBtb2RlKTsKKyAgICB2b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJD
b21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwg
Ym9vbCBjcmVhdGUsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBwb3N0TW92ZVRvTWFp
blRocmVhZChXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBzcmNQYXRoLCBjb25zdCBTdHJp
bmcmIGRlc3RQYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdENvcHlUb01h
aW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgc3JjUGF0aCwgY29uc3QgU3Ry
aW5nJiBkZXN0UGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICB2b2lkIHBvc3RSZW1vdmVU
b01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3Ry
aW5nJiBtb2RlKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgIFdvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2ViV29ya2VyQmFzZSosIFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKik7CiAKICAgICAvLyBNZXRob2Rz
IHRoYXQgYXJlIHRvIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgc3RhdGljIHZv
aWQgb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcg
bG9uZyBzaXplLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5n
JiBtb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2Vi
RmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMg
dm9pZCBtb3ZlT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBX
ZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBzcmNQYXRoLCBjb25zdCBTdHJpbmcmIGRlc3RQ
YXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2Rl
KTsKICAgICBzdGF0aWMgdm9pZCBjb3B5T25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBzcmNQYXRoLCBjb25z
dCBTdHJpbmcmIGRlc3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29u
c3QgU3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVPbk1haW5UaHJlYWQoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJp
bmcmIHBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcm
IG1vZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86384</attachid>
            <date>2011-03-21 16:37:33 -0700</date>
            <delta_ts>2011-03-21 20:35:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55644-20110321163732.patch</filename>
            <type>text/plain</type>
            <size>36524</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE0ODkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxOWUyMzNiNDM0ZWUxNGE3ODRlNTJm
ODZiMWVlMWJmNzcwYjM0MjM2Li45OTY2MmQwYWUxYjdiZGQwNmRlZWE5MDcwZDk2ZDkyNzQxZjk2
YzRhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDMtMTggIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2ZpbGVhcGldIEFkZCBVUkkgcmVzb2x1dGlvbiBzdXBwb3J0IHRvIFdvcmtlckNv
bnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1
NjQ0CisKKyAgICAgICAgTm90ZSB0aGF0IHRoZXNlIHRlc3RzIGRvIG5vdCBydW4gYXMgcGFydCBv
ZiBuZXctcnVuLXdlYmtpdC10ZXN0cywKKyAgICAgICAgYnV0IHJhdGhlciBpbiBDaHJvbWl1bSdz
IHVpX3Rlc3QuIEkndmUgcnVuIHRoZW0gbG9jYWxseSBhbmQgY29uZmlybWVkCisgICAgICAgIHRo
ZXkgcGFzczsgYSBzdWJzZXF1ZW50IENocm9taXVtIGNoYW5nZSB3aWxsIGJlIHN1Ym1pdHRlZCB0
byBydW4gdGhlbQorICAgICAgICBvbiB0aGUgQ2hyb21pdW0gYnVpbGQgYm90cy4KKworICAgICAg
ICAqIGh0dHAvdGVzdHMvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZnMtd29ya2VyLWNvbW1vbi5qczog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9maWxlc3lzdGVtL3Jlc291cmNlcy9mcy13b3Jr
ZXItdGVzdC11dGlsLmpzOiBBZGRlZC4KKyAgICAgICAgQ29waWVkIGZyb20gZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcyBmb3IgdXNlIGJ5IEhUVFAgdGVzdHMuCisgICAgICAgICogaHR0cC90ZXN0
cy9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZXNvbHZlLXVyaS5qczoKKyAgICAgICAgVXBkYXRl
ZCB0byBiZSB1c2VkIGVpdGhlciBpbiB3aW5kb3cgb3Igd29ya2VyIGNvbnRleHQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMvcmVzb2x2ZS11cmwtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZl
LXVybC1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9maWxl
c3lzdGVtL3dvcmtlcnMvcmVzb2x2ZS11cmwtc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZlLXVybC5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9zY3JpcHQtdGVzdHMvVEVNUExB
VEUuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMv
c2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJsLXN5bmMuanM6IEFkZGVkLgorCiAyMDExLTAzLTE4ICBK
dXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Zp
bGVzeXN0ZW0vcmVzb3VyY2VzL2ZzLXdvcmtlci1jb21tb24uanMgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZzLXdvcmtlci1jb21tb24uanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjYzNDEyMjRkOGI4ZDcxMWM2YjAzNTIzZGUxOTFkNzU5ZjhkYWE3MgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZnMtd29y
a2VyLWNvbW1vbi5qcwpAQCAtMCwwICsxLDU2IEBACitmdW5jdGlvbiBkZWJ1ZyhtZXNzYWdlKQor
eworICAgIHBvc3RNZXNzYWdlKCJNRVNHOiIgKyBtZXNzYWdlKTsKK30KKworZnVuY3Rpb24gZmlu
aXNoSlNUZXN0KCkKK3sKKyAgICBwb3N0TWVzc2FnZSgiRE9ORToiKTsKK30KKworZnVuY3Rpb24g
ZGVzY3JpcHRpb24obWVzc2FnZSkKK3sKKyAgICBwb3N0TWVzc2FnZSgnREVTQzonICsgbWVzc2Fn
ZSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RQYXNzZWQobXNnKSB7CisgICAgcG9zdE1lc3NhZ2UoIlBB
U1M6IiArIG1zZyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWlsZWQobXNnKSB7CisgICAgcG9zdE1l
c3NhZ2UoIkZBSUw6IiArIG1zZyk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlKF9hLCBfYikKK3sK
KyAgaWYgKHR5cGVvZiBfYSAhPSAic3RyaW5nIiB8fCB0eXBlb2YgX2IgIT0gInN0cmluZyIpCisg
ICAgZGVidWcoIldBUk46IHNob3VsZEJlKCkgZXhwZWN0cyBzdHJpbmcgYXJndW1lbnRzIik7Cisg
IHZhciBfYXYgPSBldmFsKF9hKTsKKyAgdmFyIF9idiA9IGV2YWwoX2IpOworICBpZiAoX2F2ID09
PSBfYnYpCisgICAgdGVzdFBhc3NlZChfYSArICIgaXMgIiArIF9iKTsKKyAgZWxzZQorICAgIHRl
c3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSAiICsgX2J2ICsgIiAob2YgdHlwZSAiICsgdHlwZW9m
IF9idiArICIpLiBXYXMgIiArIF9hdiArICIgKG9mIHR5cGUgIiArIHR5cGVvZiBfYXYgKyAiKS4i
KTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmVUcnVlKF9hKSB7IHNob3VsZEJlKF9hLCAidHJ1ZSIp
OyB9CisKK2Z1bmN0aW9uIHJlbW92ZUFsbEluRGlyZWN0b3J5U3luYyhkaXJlY3RvcnkpIHsKKyAg
ICBpZiAoIWRpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciByZWFkZXIgPSBkaXJl
Y3RvcnkuY3JlYXRlUmVhZGVyKCk7CisgICAgZG8geworICAgICAgICB2YXIgZW50cmllcyA9IHJl
YWRlci5yZWFkRW50cmllcygpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChlbnRyaWVzW2ldLmlzRGlyZWN0b3J5KQor
ICAgICAgICAgICAgICAgIGVudHJpZXNbaV0ucmVtb3ZlUmVjdXJzaXZlbHkoKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbnRyaWVzW2ldLnJlbW92ZSgpOworICAgICAgICB9
CisgICAgfSB3aGlsZSAoZW50cmllcy5sZW5ndGgpOworfQorCitpZiAodGhpcy5pbXBvcnRTY3Jp
cHRzICYmICF0aGlzLnJlcXVlc3RGaWxlU3lzdGVtKSB7CisgICAgZGVidWcoJ1RoaXMgdGVzdCBy
ZXF1aXJlcyBGaWxlU3lzdGVtIEFQSS4nKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZnMtd29y
a2VyLXRlc3QtdXRpbC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9yZXNv
dXJjZXMvZnMtd29ya2VyLXRlc3QtdXRpbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYTczOGFhYjkzOGIyMWQ5
ZDIyYTkyYTQ3ZWJkNDcwZjA5NWYxMzYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9maWxlc3lzdGVtL3Jlc291cmNlcy9mcy13b3JrZXItdGVzdC11dGlsLmpzCkBA
IC0wLDAgKzEsMzIgQEAKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworZnVuY3Rpb24g
c3RhcnRXb3JrZXIodGVzdFNjcmlwdFVSTCkKK3sKKyAgICBkZWJ1ZygnU3RhcnRpbmcgd29ya2Vy
OiAnICsgdGVzdFNjcmlwdFVSTCk7CisgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIodGVzdFNj
cmlwdFVSTCk7CisgICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsK
KyAgICAgICAgaWYgKGV2ZW50LmRhdGEubGVuZ3RoIDwgNSB8fCBldmVudC5kYXRhLmNoYXJBdCg0
KSAhPSAnOicpIHsKKyAgICAgICAgICAgIGRlYnVnKCJHb3QgaW52YWxpZCBtZXNzYWdlIGZyb20g
d29ya2VyOiIgKyAoZXZlbnQuZGF0YSA/IGV2ZW50LmRhdGEgOiAibnVsbCIpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBjb2RlID0gZXZlbnQuZGF0YS5zdWJzdHJpbmcoMCwg
NCk7CisgICAgICAgICAgICB2YXIgcGF5bG9hZCA9ICJbV29ya2VyXSAiICsgZXZlbnQuZGF0YS5z
dWJzdHJpbmcoNSk7CisgICAgICAgICAgICBpZiAoY29kZSA9PSAiUEFTUyIpCisgICAgICAgICAg
ICAgICAgdGVzdFBhc3NlZChwYXlsb2FkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvZGUgPT0g
IkZBSUwiKQorICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQocGF5bG9hZCk7CisgICAgICAgICAg
ICBlbHNlIGlmIChjb2RlID09ICJERVNDIikKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbihw
YXlsb2FkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvZGUgPT0gIkRPTkUiKQorICAgICAgICAg
ICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICAgICAgZWxzZSBpZiAoY29kZSA9PSAiTUVT
RyIpCisgICAgICAgICAgICAgICAgZGVidWcocGF5bG9hZCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgd29ya2VyLm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIGRl
YnVnKCdHb3QgZXJyb3IgZnJvbSB3b3JrZXI6ICcgKyBldmVudC5tZXNzYWdlKTsKKyAgICAgICAg
ZmluaXNoSlNUZXN0KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZXNvbHZlLXVyaS5qcyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvcmVzb2x2ZS11cmkuanMKaW5kZXgg
ZjVhZjI4YmFlNmViZGZlMTA0M2MxM2YxOGQ5OTFiMjRjZmZmZWQ0MC4uMGQ1MDExNmI4OGZiNmEy
NmEyZTMwOThkMmY0NzY1YmFiYWNlZmNjMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZXNvbHZlLXVyaS5qcworKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJpLmpzCkBA
IC0xLDMgKzEsOCBAQAoraWYgKHRoaXMuaW1wb3J0U2NyaXB0cykgeworICAgIGltcG9ydFNjcmlw
dHMoJy4uL3Jlc291cmNlcy9mcy13b3JrZXItY29tbW9uLmpzJyk7CisgICAgaW1wb3J0U2NyaXB0
cygnLi4vcmVzb3VyY2VzL2ZzLXRlc3QtdXRpbC5qcycpOworfQorCiBkZXNjcmlwdGlvbigiVGVz
dHMgdXNpbmcgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTCB0byBvYnRhaW4gYW4gRW50cnkgZnJv
bSBhIFVSTCIpOwogCiB2YXIgdGVzdEZpbGVOYW1lID0gJy90ZXN0RmlsZSc7CkBAIC0xNjMsMTAg
KzE2OCwxMCBAQCBmdW5jdGlvbiBmaWxlU3lzdGVtQ2FsbGJhY2soZnMpIHsKICAgICBjbGVhbnVw
QW5kUnVuTmV4dCgpOwogfQogCi1pZiAod2luZG93LnJlcXVlc3RGaWxlU3lzdGVtKSB7Ci0gICAg
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotICAgIHJlcXVlc3RGaWxlU3lzdGVtKHdpbmRv
dy5URU1QT1JBUlksIDEwMCwgZmlsZVN5c3RlbUNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKK2lm
ICh0aGlzLnJlcXVlc3RGaWxlU3lzdGVtKSB7CisgICAganNUZXN0SXNBc3luYyA9IHRydWU7Cisg
ICAgcmVxdWVzdEZpbGVTeXN0ZW0odGhpcy5URU1QT1JBUlksIDEwMCwgZmlsZVN5c3RlbUNhbGxi
YWNrLCBlcnJvckNhbGxiYWNrKTsKIH0gZWxzZQogICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWly
ZXMgRmlsZVN5c3RlbSBBUEkgc3VwcG9ydC4iKTsKIAotd2luZG93LnN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29s
dmUtdXJsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZWI4NGU4OWZkYmFhMWZhN2JjNzFkNGQx
MjVhYjBlYmY4YTBjOGEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9maWxlc3lzdGVtL3dvcmtlcnMvcmVzb2x2ZS11cmwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MzcgQEAKK1tXb3JrZXJdIFRlc3RzIHVzaW5nIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwgdG8g
b2J0YWluIGFuIEVudHJ5IGZyb20gYSBVUkwKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1N0YXJ0aW5nIHdvcmtlcjogLi4vc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJpLmpzCitbV29y
a2VyXSAqIFJlc29sdmluZyBhIGdlbmVyYXRlZCBVUkwuCitQQVNTIFtXb3JrZXJdIGV4cGVjdGVk
UGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIFtXb3JrZXJdIGlzRmlsZSBpcyB0cnVlCitbV29ya2Vy
XSAqIFJlc29sdmluZyB0ZXN0IGZpbGUgYnkgaGFuZAorUEFTUyBbV29ya2VyXSBleHBlY3RlZFBh
dGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29ya2VyXSBpc0ZpbGUgaXMgdHJ1ZQorW1dvcmtlcl0g
KiBSZXNvbHZpbmcgYSBjb21wbGV0ZWx5IGJvZ3VzIFVSTC4KK1BBU1MgW1dvcmtlcl0gCitbV29y
a2VyXSAqIFJlc29sdmluZyBhIFVSTCB3aXRoIHRoZSB3cm9uZyBwcm90b2NvbAorUEFTUyBbV29y
a2VyXSAKK1tXb3JrZXJdICogUmVzb2x2aW5nIGEgVVJMIHdpdGggbm8gc2xhc2ggYmV0d2VlbiB0
eXBlIGFuZCBmaWxlCitQQVNTIFtXb3JrZXJdIAorW1dvcmtlcl0gKiBSZXNvbHZpbmcgYSBVUkwg
d2l0aCBubyBzbGFzaCBiZXR3ZWVuIHByb3RvY29sIGFuZCB0eXBlCitQQVNTIFtXb3JrZXJdIAor
W1dvcmtlcl0gKiBSZXNvbHZlIGEgcGF0aCB1c2luZyBiYWNrc2xhc2hlcworUEFTUyBbV29ya2Vy
XSBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29ya2VyXSBpc0ZpbGUgaXMgdHJ1
ZQorW1dvcmtlcl0gKiBSZXNvbHZlIGEgZGlyZWN0b3J5CitQQVNTIFtXb3JrZXJdIGV4cGVjdGVk
UGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIFtXb3JrZXJdIGlzRGlyZWN0b3J5IGlzIHRydWUKK1tX
b3JrZXJdICogUmVzb2x2ZSBhIHBhdGggdXNpbmcgYSB0cmFpbGluZyBzbGFzaAorUEFTUyBbV29y
a2VyXSBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29ya2VyXSBpc0RpcmVjdG9y
eSBpcyB0cnVlCitbV29ya2VyXSAqIFJlc29sdmluZyBhIHBlcnNpc3RlbnQgVVJMLgorUEFTUyBb
V29ya2VyXSBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29ya2VyXSBpc0RpcmVj
dG9yeSBpcyB0cnVlCitbV29ya2VyXSBGaW5pc2hlZCBydW5uaW5nIHRlc3RzLgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLXN5bmMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMv
cmVzb2x2ZS11cmwtc3luYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTc2NzA2MDdjMmI4N2Zl
OWNiYTBjNjU5OTM5ZTYyMDkxOWZkYjZlNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLXN5bmMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMzcgQEAKK1tXb3JrZXJdIFRlc3RzIHVzaW5nIHJlc29sdmVMb2NhbEZp
bGVTeXN0ZW1TeW5jVVJMIHRvIG9idGFpbiBhbiBFbnRyeSBmcm9tIGEgVVJMCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitTdGFydGluZyB3b3JrZXI6IHNjcmlwdC10ZXN0cy9yZXNv
bHZlLXVybC1zeW5jLmpzCitbV29ya2VyXSAqIFJlc29sdmluZyBhIGdlbmVyYXRlZCBVUkwuCitQ
QVNTIFtXb3JrZXJdIGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIFtXb3JrZXJdIGlz
RmlsZSBpcyB0cnVlCitbV29ya2VyXSAqIFJlc29sdmluZyB0ZXN0IGZpbGUgYnkgaGFuZAorUEFT
UyBbV29ya2VyXSBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29ya2VyXSBpc0Zp
bGUgaXMgdHJ1ZQorW1dvcmtlcl0gKiBSZXNvbHZpbmcgYSBjb21wbGV0ZWx5IGJvZ3VzIFVSTC4K
K1BBU1MgW1dvcmtlcl0gQ2F1Z2h0IGV4Y2VwdGlvbgorW1dvcmtlcl0gKiBSZXNvbHZpbmcgYSBV
Ukwgd2l0aCB0aGUgd3JvbmcgcHJvdG9jb2wKK1BBU1MgW1dvcmtlcl0gQ2F1Z2h0IGV4Y2VwdGlv
bgorW1dvcmtlcl0gKiBSZXNvbHZpbmcgYSBVUkwgd2l0aCBubyBzbGFzaCBiZXR3ZWVuIHR5cGUg
YW5kIGZpbGUKK1BBU1MgW1dvcmtlcl0gQ2F1Z2h0IGV4Y2VwdGlvbgorW1dvcmtlcl0gKiBSZXNv
bHZpbmcgYSBVUkwgd2l0aCBubyBzbGFzaCBiZXR3ZWVuIHByb3RvY29sIGFuZCB0eXBlCitQQVNT
IFtXb3JrZXJdIENhdWdodCBleGNlcHRpb24KK1tXb3JrZXJdICogUmVzb2x2ZSBhIHBhdGggdXNp
bmcgYmFja3NsYXNoZXMKK1BBU1MgW1dvcmtlcl0gZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgK
K1BBU1MgW1dvcmtlcl0gaXNGaWxlIGlzIHRydWUKK1tXb3JrZXJdICogUmVzb2x2ZSBhIGRpcmVj
dG9yeQorUEFTUyBbV29ya2VyXSBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBbV29y
a2VyXSBpc0RpcmVjdG9yeSBpcyB0cnVlCitbV29ya2VyXSAqIFJlc29sdmUgYSBwYXRoIHVzaW5n
IGEgdHJhaWxpbmcgc2xhc2gKK1BBU1MgW1dvcmtlcl0gZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBh
dGgKK1BBU1MgW1dvcmtlcl0gaXNEaXJlY3RvcnkgaXMgdHJ1ZQorW1dvcmtlcl0gKiBSZXNvbHZp
bmcgYSBwZXJzaXN0ZW50IFVSTC4KK1BBU1MgW1dvcmtlcl0gZXhwZWN0ZWRQYXRoIGlzIGFjdHVh
bFBhdGgKK1BBU1MgW1dvcmtlcl0gaXNEaXJlY3RvcnkgaXMgdHJ1ZQorW1dvcmtlcl0gRmluaXNo
ZWQgcnVubmluZyB0ZXN0cy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0
ZW0vd29ya2Vycy9yZXNvbHZlLXVybC1zeW5jLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZlLXVybC1zeW5jLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGFh
OTc1MTZkMjUyODFlMDhmOTJmYmRkNGM1MTdmZDhlOGMxZjZjYgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLXN5
bmMuaHRtbApAQCAtMCwwICsxLDE2IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2ZzLXdvcmtlci10ZXN0LXV0aWwuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK3N0YXJ0V29ya2VyKCdzY3JpcHQtdGVzdHMvcmVzb2x2
ZS11cmwtc3luYy5qcycpOword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJsLmh0bWwgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZlLXVybC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjEwYjAxNDUzZGY5YzUwYTk4ZTA4MTY2YTZkMmQwZjk0YTI2ODQyNGIKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZlLXVy
bC5odG1sCkBAIC0wLDAgKzEsMTYgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0IHNyYz0iL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvZnMtd29ya2VyLXRlc3QtdXRpbC5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8c2NyaXB0Pgorc3RhcnRXb3JrZXIoJy4uL3NjcmlwdC10ZXN0cy9yZXNv
bHZlLXVyaS5qcycpOword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvZmlsZXN5c3RlbS93b3JrZXJzL3NjcmlwdC10ZXN0cy9URU1QTEFURS5odG1sIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMvc2NyaXB0LXRlc3RzL1RFTVBMQVRF
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTM5YmJlYjgzNjA4MTU5NGViNzBmZmU2NTNmYmZmNjcxYjQwY2U2
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS93
b3JrZXJzL3NjcmlwdC10ZXN0cy9URU1QTEFURS5odG1sCkBAIC0wLDAgKzEsMTYgQEAKKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9qcy10ZXN0LXJlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iL2pzLXRlc3QtcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvZnMtd29y
a2VyLXRlc3QtdXRpbC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0Pgorc3RhcnRX
b3JrZXIoJ1lPVVJfSlNfRklMRV9IRVJFJyk7Cit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMvc2NyaXB0LXRlc3RzL3Jlc29sdmUt
dXJsLXN5bmMuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9z
Y3JpcHQtdGVzdHMvcmVzb2x2ZS11cmwtc3luYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjNjMDcwNDhmYTY5
YTViMjY0NzFkYTQ2NWJkOTU0NjBlODFmNDNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9maWxlc3lzdGVtL3dvcmtlcnMvc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJs
LXN5bmMuanMKQEAgLTAsMCArMSwxNTYgQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAg
ICBpbXBvcnRTY3JpcHRzKCcuLi8uLi9yZXNvdXJjZXMvZnMtd29ya2VyLWNvbW1vbi5qcycpOwor
ICAgIGltcG9ydFNjcmlwdHMoJy4uLy4uL3Jlc291cmNlcy9mcy10ZXN0LXV0aWwuanMnKTsKK30K
KworZGVzY3JpcHRpb24oIlRlc3RzIHVzaW5nIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1TeW5jVVJM
IHRvIG9idGFpbiBhbiBFbnRyeSBmcm9tIGEgVVJMIik7CisKK3ZhciB0ZXN0RmlsZU5hbWUgPSAn
L3Rlc3RGaWxlJzsKK3ZhciBmaWxlU3lzdGVtID0gbnVsbDsKK3ZhciBleHBlY3RlZEFuZFJ1bk5l
eHQgPSBmdW5jdGlvbigpIHsgdGVzdFBhc3NlZCgiIik7IGNsZWFudXBBbmRSdW5OZXh0KCk7IH07
CisKK3ZhciBleHBlY3RlZFBhdGggPSBudWxsOwordmFyIGFjdHVhbFBhdGggPSBudWxsOworCitm
dW5jdGlvbiBjcmVhdGVUZXN0RmlsZSgpIHsKKyAgICByZXR1cm4gZmlsZVN5c3RlbS5yb290Lmdl
dEZpbGUodGVzdEZpbGVOYW1lLCB7Y3JlYXRlOnRydWV9KTsKK30KKworZnVuY3Rpb24gYXNzZXJ0
UGF0aHNNYXRjaChleHBlY3RlZCwgYWN0dWFsKSB7CisgICAgZXhwZWN0ZWRQYXRoID0gZXhwZWN0
ZWQ7CisgICAgYWN0dWFsUGF0aCA9IGFjdHVhbDsKKyAgICBzaG91bGRCZSgiZXhwZWN0ZWRQYXRo
IiwgImFjdHVhbFBhdGgiKTsKK30KKwordmFyIGlzRGlyZWN0b3J5ID0gZmFsc2U7CitmdW5jdGlv
biBhc3NlcnRJc0RpcmVjdG9yeShlbnRyeSkgeworICAgIGlzRGlyZWN0b3J5ID0gZW50cnkuaXNE
aXJlY3Rvcnk7CisgICAgc2hvdWxkQmVUcnVlKCJpc0RpcmVjdG9yeSIpOworfQorCit2YXIgaXNG
aWxlID0gZmFsc2U7CitmdW5jdGlvbiBhc3NlcnRJc0ZpbGUoZW50cnkpIHsKKyAgICBpc0ZpbGUg
PSBlbnRyeS5pc0ZpbGU7CisgICAgc2hvdWxkQmVUcnVlKCJpc0ZpbGUiKTsKK30KKworLy8gVGVz
dCBib2R5IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK2Z1bmN0aW9uIHJ1bkJhc2ljVGVzdCgpIHsKKyAgICBkZWJ1ZygiKiBS
ZXNvbHZpbmcgYSBnZW5lcmF0ZWQgVVJMLiIpOworICAgIGVudHJ5ID0gY3JlYXRlVGVzdEZpbGUo
KTsKKyAgICB2YXIgZSA9IHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1TeW5jVVJMKGVudHJ5LnRvVVJM
KCkpOworICAgIGFzc2VydFBhdGhzTWF0Y2goZW50cnkuZnVsbFBhdGgsIGUuZnVsbFBhdGgpOwor
ICAgIGFzc2VydElzRmlsZShlKTsKK30KKworZnVuY3Rpb24gcnVuSGFuZG1hZGVVUkwoKSB7Cisg
ICAgZGVidWcoIiogUmVzb2x2aW5nIHRlc3QgZmlsZSBieSBoYW5kIik7CisgICAgZW50cnkgPSBj
cmVhdGVUZXN0RmlsZSgpOworICAgIHZhciBlID0gcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNV
UkwoImZpbGVzeXN0ZW06aHR0cDovLzEyNy4wLjAuMTo4MDAwL3RlbXBvcmFyeS90ZXN0RmlsZSIp
OworICAgIGFzc2VydFBhdGhzTWF0Y2godGVzdEZpbGVOYW1lLCBlLmZ1bGxQYXRoKTsKKyAgICBh
c3NlcnRJc0ZpbGUoZSk7Cit9CisKK2Z1bmN0aW9uIHJ1bkJvZ3VzVVJMKCkgeworICAgIGRlYnVn
KCIqIFJlc29sdmluZyBhIGNvbXBsZXRlbHkgYm9ndXMgVVJMLiIpOworICAgIHRyeSB7CisgICAg
ICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1TeW5jVVJMKCJmb28iKTsKKyAgICAgICAgdGVzdEZh
aWxlZCgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiQ2F1Z2h0IGV4
Y2VwdGlvbiIpOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuV3JvbmdQcm90b2NvbCgpIHsKKyAg
ICBkZWJ1ZygiKiBSZXNvbHZpbmcgYSBVUkwgd2l0aCB0aGUgd3JvbmcgcHJvdG9jb2wiKTsKKyAg
ICB0cnkgeworICAgICAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTCgiaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL2Zvby9iYXIvYmF6Iik7CisgICAgICAgIHRlc3RGYWlsZWQoKTsKKyAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb24iKTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIHJ1bk5vdEVub3VnaFNsYXNoZXMoKSB7CisgICAgZGVidWcoIiog
UmVzb2x2aW5nIGEgVVJMIHdpdGggbm8gc2xhc2ggYmV0d2VlbiB0eXBlIGFuZCBmaWxlIik7Cisg
ICAgZW50cnkgPSBjcmVhdGVUZXN0RmlsZSgpOworICAgIHRyeSB7CisgICAgICAgIHJlc29sdmVM
b2NhbEZpbGVTeXN0ZW1TeW5jVVJMKCJmaWxlc3lzdGVtOmh0dHA6Ly8xMjcuMC4wLjE6ODAwMC90
ZW1wb3Jhcnl0ZXN0RmlsZSIpOworICAgICAgICB0ZXN0RmFpbGVkKCk7CisgICAgfSBjYXRjaCAo
ZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0aW9uIik7CisgICAgfQorfQor
CitmdW5jdGlvbiBydW5Ob3RFbm91Z2hTbGFzaGVzMigpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZp
bmcgYSBVUkwgd2l0aCBubyBzbGFzaCBiZXR3ZWVuIHByb3RvY29sIGFuZCB0eXBlIik7CisgICAg
ZW50cnkgPSBjcmVhdGVUZXN0RmlsZSgpOworICAgIHRyeSB7CisgICAgICAgIHJlc29sdmVMb2Nh
bEZpbGVTeXN0ZW1TeW5jVVJMKCJmaWxlc3lzdGVtOmh0dHA6Ly8xMjcuMC4wLjE6ODAwMHRlbXBv
cmFyeS90ZXN0RmlsZSIpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgi
Q2F1Z2h0IGV4Y2VwdGlvbiIpOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuVXNlQmFja1NsYXNo
ZXMoKSB7CisgICAgZGVidWcoIiogUmVzb2x2ZSBhIHBhdGggdXNpbmcgYmFja3NsYXNoZXMiKTsK
KyAgICBlbnRyeSA9IGZpbGVTeXN0ZW0ucm9vdC5nZXREaXJlY3RvcnkoImZvbyIsIHtjcmVhdGU6
dHJ1ZX0pLmdldEZpbGUoInRlc3RGaWxlIiwge2NyZWF0ZTp0cnVlfSk7CisgICAgdmFyIGUgPSBy
ZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTCgiZmlsZXN5c3RlbTpodHRwOi8vMTI3LjAuMC4x
OjgwMDAvdGVtcG9yYXJ5L2Zvb1xcdGVzdEZpbGUiKTsKKyAgICBhc3NlcnRQYXRoc01hdGNoKCIv
Zm9vL3Rlc3RGaWxlIiwgZS5mdWxsUGF0aCk7CisgICAgYXNzZXJ0SXNGaWxlKGUpOworfQorCitm
dW5jdGlvbiBydW5EaXJlY3RvcnkoKSB7CisgICAgZGVidWcoIiogUmVzb2x2ZSBhIGRpcmVjdG9y
eSIpOworICAgIGVudHJ5ID0gZmlsZVN5c3RlbS5yb290LmdldERpcmVjdG9yeSgiZm9vIiwge2Ny
ZWF0ZTp0cnVlfSk7CisgICAgdmFyIGUgPSByZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTCgi
ZmlsZXN5c3RlbTpodHRwOi8vMTI3LjAuMC4xOjgwMDAvdGVtcG9yYXJ5L2ZvbyIpOworICAgIGFz
c2VydFBhdGhzTWF0Y2goIi9mb28iLCBlLmZ1bGxQYXRoKTsKKyAgICBhc3NlcnRJc0RpcmVjdG9y
eShlKTsKK30KKworZnVuY3Rpb24gcnVuV2l0aFRyYWlsaW5nU2xhc2goKSB7CisgICAgZGVidWco
IiogUmVzb2x2ZSBhIHBhdGggdXNpbmcgYSB0cmFpbGluZyBzbGFzaCIpOworICAgIGVudHJ5ID0g
ZmlsZVN5c3RlbS5yb290LmdldERpcmVjdG9yeSgiZm9vIiwge2NyZWF0ZTp0cnVlfSk7CisgICAg
dmFyIGUgPSByZXNvbHZlTG9jYWxGaWxlU3lzdGVtU3luY1VSTCgiZmlsZXN5c3RlbTpodHRwOi8v
MTI3LjAuMC4xOjgwMDAvdGVtcG9yYXJ5L2Zvby8iKTsKKyAgICBhc3NlcnRQYXRoc01hdGNoKCIv
Zm9vIiwgZS5mdWxsUGF0aCk7CisgICAgYXNzZXJ0SXNEaXJlY3RvcnkoZSk7Cit9CisKK2Z1bmN0
aW9uIHJ1blBlcnNpc3RlbnRUZXN0KCkgeworICAgIGRlYnVnKCIqIFJlc29sdmluZyBhIHBlcnNp
c3RlbnQgVVJMLiIpOworICAgIHZhciBmcyA9IHJlcXVlc3RGaWxlU3lzdGVtU3luYyhQRVJTSVNU
RU5ULCAxMDApOworICAgIGVudHJ5ID0gcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkwoZnMu
cm9vdC50b1VSTCgpKTsKKyAgICBhc3NlcnRQYXRoc01hdGNoKCIvIiwgZW50cnkuZnVsbFBhdGgp
OworICAgIGFzc2VydElzRGlyZWN0b3J5KGVudHJ5KTsKK30KKworLy8gRW5kIG9mIHRlc3QgYm9k
eSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK3ZhciB0ZXN0c0xpc3QgPSBbCisgICAgcnVuQmFzaWNUZXN0LAorICAgIHJ1bkhhbmRtYWRl
VVJMLAorICAgIHJ1bkJvZ3VzVVJMLAorICAgIHJ1bldyb25nUHJvdG9jb2wsCisgICAgcnVuTm90
RW5vdWdoU2xhc2hlcywKKyAgICBydW5Ob3RFbm91Z2hTbGFzaGVzMiwKKyAgICBydW5Vc2VCYWNr
U2xhc2hlcywKKyAgICBydW5EaXJlY3RvcnksCisgICAgcnVuV2l0aFRyYWlsaW5nU2xhc2gsCisg
ICAgcnVuUGVyc2lzdGVudFRlc3QsCitdOwordmFyIHRlc3RDb3VudGVyID0gMDsKKworaWYgKHRo
aXMucmVxdWVzdEZpbGVTeXN0ZW0pIHsKKyAgICBmaWxlU3lzdGVtID0gcmVxdWVzdEZpbGVTeXN0
ZW1TeW5jKHRoaXMuVEVNUE9SQVJZLCAxMDApOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVz
dHNMaXN0Lmxlbmd0aDsgKytpKSB7CisgICAgICB0ZXN0c0xpc3RbaV0oKTsKKyAgICAgIHJlbW92
ZUFsbEluRGlyZWN0b3J5U3luYyhmaWxlU3lzdGVtLnJvb3QpOworICAgICAgZW50cnkgPSBudWxs
OworICAgIH0KKyAgICBkZWJ1ZygiRmluaXNoZWQgcnVubmluZyB0ZXN0cy4iKTsKKyAgICBmaW5p
c2hKU1Rlc3QoKTsKK30gZWxzZQorICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRmlsZVN5
c3RlbSBBUEkgc3VwcG9ydC4iKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggZTg4OGEyOTlmMzA5YmNjMGMxMTYwYzdhYTk2YWNkMmFkYTZlNmM0MS4uNWIy
MjJlZDQzZDg4ZmIxZjcxOTQxMjY5ZTk4M2ZlMmY2NjhkNTczZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIzIEBACisyMDExLTAzLTE4ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtmaWxlYXBp
XSBBZGQgVVJJIHJlc29sdXRpb24gc3VwcG9ydCB0byBXb3JrZXJDb250ZXh0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTY0NAorCisgICAgICAgIFRl
c3RzOiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vd29ya2Vycy9yZXNvbHZlLXVybC1zeW5jLmh0bWwK
KyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvZmlsZXN5c3RlbS93b3JrZXJzL3Jlc29sdmUtdXJs
Lmh0bWwKKworICAgICAgICAqIGZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxvY2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0pOgorICAgICAgICBBZGQg
c3VwcG9ydCBmb3Igd29ya2Vycy4KKyAgICAgICAgKiBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5o
OgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJDb250ZXh0OjpyZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckNvbnRleHQ6OnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1TeW5jVVJMKToKKyAg
ICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
ckNvbnRleHQuaWRsOgorCiAyMDExLTAzLTE4ICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAKaW5kZXggNjg4ZDE1NTU5NWY1NzEx
OTJjZjM2OGUwNTlmM2Y2NzQ2NWY5MDJhNi4uOTU1ZDcyMzJkNGRjMDliYzQ1OWQ1MjdhMDNmM2Y1
NjI4MTc3Yjk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVT
eXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNw
cApAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwgY29ucwogICAgIEFzeW5jRmls
ZVN5c3RlbTo6b3BlbkZpbGVTeXN0ZW0oYmFzZVBhdGgsIGlkZW50aWZpZXIsIHR5cGUsIGNyZWF0
ZSwgY2FsbGJhY2tzKTsKIH0KIAotdm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVt
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0
eXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9p
ZCBMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBib29sKQogewogICAgIC8vIEFzeW5jRmlsZVN5
c3RlbTo6b3BlbkZpbGVTeXN0ZW0gY2FsbHMgY2FsbGJhY2tzIHN5bmNocm9ub3VzbHksIHNvIHRo
ZSBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5LgogICAgIGNvbnRleHQt
PnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkZpbGVTeXN0ZW0sIGZpbGVTeXN0ZW1C
YXNlUGF0aCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5kYXRhYmFzZUlkZW50aWZpZXIo
KSwgdHlwZSwgZmFsc2UsIGNhbGxiYWNrcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxG
aWxlU3lzdGVtLmgKaW5kZXggYmFmNzJkOWQwYzI0ZGU3YWM5ZGNhY2EyZWZlYWQzMjAxN2M5MGYy
Yi4uMmVhYmQ3YTIzZDM2OWZkM2FiY2YwOGQ2MjdlNjk5YWI4ZGVlNzIyZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgTG9jYWxGaWxlU3lzdGVtJiBsb2NhbEZpbGVTeXN0ZW0oKTsKIAogICAgIC8v
IERvZXMgbm90IGNyZWF0ZSB0aGUgcm9vdCBwYXRoIGZvciBmaWxlIHN5c3RlbSwganVzdCByZWFk
cyBpdCBpZiBhdmFpbGFibGUuCi0gICAgdm9pZCByZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4pOworICAgIHZvaWQgcmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0
ZW1DYWxsYmFja3M+LCBib29sIHN5bmNocm9ub3VzID0gZmFsc2UpOwogCiAgICAgdm9pZCByZXF1
ZXN0RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpU
eXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+
LCBib29sIHN5bmNocm9ub3VzID0gZmFsc2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmNwcAppbmRleCBhY2Y3ZjA0NmQ3NTM3NjFhMTExZmI4YjM4ZDI1Mjc0MjNhYTlm
NTEyLi5mZDIwNzg4MDcxMTEyMDRkZjQwM2ZmMzI0N2ZhYmE5NDVmNzlkYmZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAgLTY3LDkgKzY3LDEyIEBACiAKICNp
ZiBFTkFCTEUoRklMRV9TWVNURU0pCiAjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCisjaW5j
bHVkZSAiRGlyZWN0b3J5RW50cnlTeW5jLmgiCiAjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbS5oIgor
I2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW1CYXNlLmgiCiAjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbVN5
bmMuaCIKICNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRmlsZUVudHJ5U3lu
Yy5oIgogI2luY2x1ZGUgIkZpbGVFcnJvci5oIgogI2luY2x1ZGUgIkZpbGVFeGNlcHRpb24uaCIK
ICNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2suaCIKQEAgLTM3Nyw2ICszODAsNTMgQEAgUGFz
c1JlZlB0cjxET01GaWxlU3lzdGVtU3luYz4gV29ya2VyQ29udGV4dDo6cmVxdWVzdEZpbGVTeXN0
ZW1TeW5jKGludCB0eXBlLCBsb24KICAgICByZXR1cm4gaGVscGVyLmdldFJlc3VsdChlYyk7CiB9
CiAKK3ZvaWQgV29ya2VyQ29udGV4dDo6cmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChjb25zdCBT
dHJpbmcmIHVybCwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sKKyAgICBLVVJMIGNvbXBs
ZXRlZFVSTCA9IGNvbXBsZXRlVVJMKHVybCk7CisgICAgaWYgKCFBc3luY0ZpbGVTeXN0ZW06Omlz
QXZhaWxhYmxlKCkgfHwgIXNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0ZpbGVTeXN0ZW0oKSB8
fCAhc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChjb21wbGV0ZWRVUkwpKSB7CisgICAgICAg
IERPTUZpbGVTeXN0ZW06OnNjaGVkdWxlQ2FsbGJhY2sodGhpcywgZXJyb3JDYWxsYmFjaywgRmls
ZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpTRUNVUklUWV9FUlIpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlOworICAgIFN0cmluZyBm
aWxlUGF0aDsKKyAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkgfHwgIURPTUZpbGVTeXN0
ZW1CYXNlOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29tcGxldGVkVVJMLCB0eXBlLCBmaWxlUGF0aCkp
IHsKKyAgICAgICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayh0aGlzLCBlcnJvckNh
bGxiYWNrLCBGaWxlRXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6OlNZTlRBWF9FUlIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIExvY2FsRmlsZVN5c3RlbTo6bG9jYWxGaWxlU3lzdGVt
KCkucmVhZEZpbGVTeXN0ZW0odGhpcywgdHlwZSwgUmVzb2x2ZVVSSUNhbGxiYWNrczo6Y3JlYXRl
KHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgdGhpcywgZmlsZVBhdGgpKTsKK30KKwor
UGFzc1JlZlB0cjxFbnRyeVN5bmM+IFdvcmtlckNvbnRleHQ6OnJlc29sdmVMb2NhbEZpbGVTeXN0
ZW1TeW5jVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBl
YyA9IDA7CisgICAgS1VSTCBjb21wbGV0ZWRVUkwgPSBjb21wbGV0ZVVSTCh1cmwpOworICAgIGlm
ICghQXN5bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpIHx8ICFzZWN1cml0eU9yaWdpbigpLT5j
YW5BY2Nlc3NGaWxlU3lzdGVtKCkgfHwgIXNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QoY29t
cGxldGVkVVJMKSkgeworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OlNFQ1VSSVRZX0VSUjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5
cGU7CisgICAgU3RyaW5nIGZpbGVQYXRoOworICAgIGlmICghY29tcGxldGVkVVJMLmlzVmFsaWQo
KSB8fCAhRE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNrRmlsZVN5c3RlbVVSTChjb21wbGV0ZWRVUkws
IHR5cGUsIGZpbGVQYXRoKSkgeworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OlNZTlRBWF9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEZpbGVTeXN0ZW1TeW5jQ2FsbGJh
Y2tIZWxwZXIgcmVhZEZpbGVTeXN0ZW1IZWxwZXI7CisgICAgTG9jYWxGaWxlU3lzdGVtOjpsb2Nh
bEZpbGVTeXN0ZW0oKS5yZWFkRmlsZVN5c3RlbSh0aGlzLCB0eXBlLCBGaWxlU3lzdGVtQ2FsbGJh
Y2tzOjpjcmVhdGUocmVhZEZpbGVTeXN0ZW1IZWxwZXIuc3VjY2Vzc0NhbGxiYWNrKCksIHJlYWRG
aWxlU3lzdGVtSGVscGVyLmVycm9yQ2FsbGJhY2soKSwgdGhpcyksIHRydWUpOworICAgIFJlZlB0
cjxET01GaWxlU3lzdGVtU3luYz4gZmlsZVN5c3RlbSA9IHJlYWRGaWxlU3lzdGVtSGVscGVyLmdl
dFJlc3VsdChlYyk7CisgICAgaWYgKCFmaWxlU3lzdGVtKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFJlZlB0cjxFbnRyeVN5bmM+IGVudHJ5ID0gZmlsZVN5c3RlbS0+cm9vdCgpLT5nZXREaXJl
Y3RvcnkoZmlsZVBhdGgsIDAsIGVjKTsKKyAgICBpZiAoZWMgPT0gRmlsZUV4Y2VwdGlvbjo6VFlQ
RV9NSVNNQVRDSF9FUlIpCisgICAgICAgIHJldHVybiBmaWxlU3lzdGVtLT5yb290KCktPmdldEZp
bGUoZmlsZVBhdGgsIDAsIGVjKTsKKworICAgIHJldHVybiBlbnRyeS5yZWxlYXNlKCk7Cit9CisK
IENPTVBJTEVfQVNTRVJUKHN0YXRpY19jYXN0PGludD4oV29ya2VyQ29udGV4dDo6VEVNUE9SQVJZ
KSA9PSBzdGF0aWNfY2FzdDxpbnQ+KEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5KSwgZW51bV9t
aXNtYXRjaCk7CiBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KFdvcmtlckNvbnRleHQ6
OlBFUlNJU1RFTlQpID09IHN0YXRpY19jYXN0PGludD4oQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0
ZW50KSwgZW51bV9taXNtYXRjaCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmgKaW5kZXggMmU4MDJmMjU1MjRkMTY0NTg2YjFkYTBiNmEwY2IzOTczYjZhZDM2ZC4u
ZDJjY2IxMTgwZmEzMDlmMjQwY2E3Y2IzZTYwZjY1MWRhM2M4ZDI0OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKQEAgLTUwLDYgKzUwLDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIGNsYXNzIERhdGFiYXNlOwogICAgIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CiAg
ICAgY2xhc3MgRGF0YWJhc2VTeW5jOworICAgIGNsYXNzIEVudHJ5Q2FsbGJhY2s7CisgICAgY2xh
c3MgRW50cnlTeW5jOwogICAgIGNsYXNzIEVycm9yQ2FsbGJhY2s7CiAgICAgY2xhc3MgRmlsZVN5
c3RlbUNhbGxiYWNrOwogICAgIGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlcjsKQEAgLTEyOSw4ICsx
MzEsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgVEVNUE9SQVJZLAogICAg
ICAgICAgICAgUEVSU0lTVEVOVCwKICAgICAgICAgfTsKLSAgICAgICAgdm9pZCByZXF1ZXN0Rmls
ZVN5c3RlbShpbnQgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NSZWZQdHI8RmlsZVN5c3RlbUNh
bGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisgICAgICAgIHZvaWQgcmVxdWVz
dEZpbGVTeXN0ZW0oaW50IHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzUmVmUHRyPEZpbGVTeXN0
ZW1DYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsK
ICAgICAgICAgUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtU3luYz4gcmVxdWVzdEZpbGVTeXN0ZW1T
eW5jKGludCB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2
b2lkIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwoY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NSZWZQ
dHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJh
Y2s+KTsKKyAgICAgICAgUGFzc1JlZlB0cjxFbnRyeVN5bmM+IHJlc29sdmVMb2NhbEZpbGVTeXN0
ZW1TeW5jVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBFeGNlcHRpb25Db2RlJik7CiAjZW5kaWYKIAog
ICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGZvciBHQyBtYXJraW5nLiBTZWUgSlNX
b3JrZXJDb250ZXh0OjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJikgaW4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCmluZGV4IDE3OTIyMWVkNGViNzMwN2MzZDg1M2IzNGQz
ZTllNWM4Y2Y5ZDdkOTIuLmUwYWNiMjQwMmI0OGIwNjk5ZDRjNGExODVkYzA1MmIyNTdjMzc4Yjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbApAQCAtMTEwLDYgKzEx
MCw4IEBAIG1vZHVsZSB0aHJlYWRzIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUEVS
U0lTVEVOVCA9IDE7CiAgICAgICAgIFtFbmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIHZvaWQg
cmVxdWVzdEZpbGVTeXN0ZW0oaW4gdW5zaWduZWQgc2hvcnQgdHlwZSwgaW4gbG9uZyBsb25nIHNp
emUsIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEZpbGVTeXN0ZW1DYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2ssIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFj
ayk7CiAgICAgICAgIFtFbmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIERPTUZpbGVTeXN0ZW1T
eW5jIHJlcXVlc3RGaWxlU3lzdGVtU3luYyhpbiB1bnNpZ25lZCBzaG9ydCB0eXBlLCBpbiBsb25n
IGxvbmcgc2l6ZSkgcmFpc2VzIChGaWxlRXhjZXB0aW9uKTsKKyAgICAgICAgW0VuYWJsZWRBdFJ1
bnRpbWU9RmlsZVN5c3RlbV0gdm9pZCByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGluIERPTVN0
cmluZyB1cmwsIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEVudHJ5Q2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJh
Y2spOworICAgICAgICBbRW5hYmxlZEF0UnVudGltZT1GaWxlU3lzdGVtXSBFbnRyeVN5bmMgcmVz
b2x2ZUxvY2FsRmlsZVN5c3RlbVN5bmNVUkwoaW4gRE9NU3RyaW5nIHVybCkgcmFpc2VzIChGaWxl
RXhjZXB0aW9uKTsKIAogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRp
bWU9RmlsZVN5c3RlbV0gRmxhZ3NDb25zdHJ1Y3RvciBGbGFnczsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCA1ODNlY2NlYjI0YmU5YjA4YmMwZDQ2ZTFkMjBhMjdlM2YwNjA4
ZGVjLi5jZmM0NjVmMTQyYzAzNjVmM2U5ZmY1MDg5M2JhZDdkN2M2NWFiOTI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDExLTAzLTE4ICBBZGFtIEtsZWlu
ICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtmaWxlYXBpXSBBZGQgVVJJIHJlc29sdXRpb24gc3VwcG9ydCB0byBX
b3JrZXJDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NTY0NAorCisgICAgICAgIFBhc3MgImNyZWF0ZSIgYm9vbCB0aHJvdWdoIHRvIGFsbG93
IG9wZW5pbmcKKyAgICAgICAgYSBmaWxlc3lzdGVtIHdpdGhvdXQgYWxsb3dpbmcgY3JlYXRpb24u
CisKKyAgICAgICAgKiBzcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJD
b3JlOjpMb2NhbEZpbGVTeXN0ZW06OnJlcXVlc3RGaWxlU3lzdGVtKToKKyAgICAgICAgKiBzcmMv
V2ViV29ya2VyQmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckJhc2U6Om9wZW5G
aWxlU3lzdGVtRm9yV29ya2VyKToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQmFzZS5oOgorICAg
ICAgICAqIHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxlU3lz
dGVtVG9NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQpOgorICAgICAgICAqIHNyYy9X
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmg6CisKIDIwMTEtMDMtMTcgIEFsZXhleSBN
YXJpbmljaGV2ICA8YW1hcmluaWNoZXZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEtlbm5ldGggUnVzc2VsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAppbmRleCAzNWU0ZGU4Mjg5ZDkyNTgwYmY3
MmNhNmFkMzAyYTc1MjkzMWJiZDM0Li5iMzc3YmRiNWYyM2FhZDFiNWU0NTkxZjZjY2VjOGFhNDlk
NjFhNzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxG
aWxlU3lzdGVtQ2hyb21pdW0uY3BwCkBAIC01NywyOSArNTcsNDAgQEAgTG9jYWxGaWxlU3lzdGVt
JiBMb2NhbEZpbGVTeXN0ZW06OmxvY2FsRmlsZVN5c3RlbSgpCiAgICAgcmV0dXJuICpsb2NhbEZp
bGVTeXN0ZW07CiB9CiAKLXZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwg
UGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBB
U1NFUlQoY29udGV4dCAmJiBjb250ZXh0LT5pc0RvY3VtZW50KCkpOwotICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Ci0gICAgV2ViRnJhbWVJ
bXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgp
KTsKLSAgICB3ZWJGcmFtZS0+Y2xpZW50KCktPm9wZW5GaWxlU3lzdGVtKHdlYkZyYW1lLCBzdGF0
aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgMCwgZmFsc2UsIG5ldyBXZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MsIHR5cGUpKTsKLX0KK25hbWVzcGFjZSB7CiAK
LXZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZXF1ZXN0RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNp
emUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGJvb2wg
c3luY2hyb25vdXMpCitlbnVtIENyZWF0aW9uRmxhZyB7CisgICAgT3BlbkV4aXN0aW5nLAorICAg
IENyZWF0ZUlmTm90UHJlc2VudAorfTsKKworfSAvLyBuYW1lc3BhY2UKKworc3RhdGljIHZvaWQg
b3BlbkZpbGVTeXN0ZW1IZWxwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5
bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMsIGxvbmcgbG9uZyBzaXplLCBDcmVhdGlv
bkZsYWcgY3JlYXRlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBpZiAoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0
PERvY3VtZW50Kj4oY29udGV4dCk7CiAgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBX
ZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgICAgIHdlYkZy
YW1lLT5jbGllbnQoKS0+b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRpY19jYXN0PFdlYkZp
bGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCB0cnVlLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxi
YWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlKSk7CisgICAgICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+
b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+
KHR5cGUpLCBzaXplLCBjcmVhdGUgPT0gQ3JlYXRlSWZOb3RQcmVzZW50LCBuZXcgV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRl
eHQqPihjb250ZXh0KTsKICAgICAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclBy
b3h5ID0gJndvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwogICAg
ICAgICBXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJCYXNl
Kj4od29ya2VyTG9hZGVyUHJveHkpOwotICAgICAgICB3ZWJXb3JrZXItPm9wZW5GaWxlU3lzdGVt
Rm9yV29ya2VyKHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCBu
ZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlLCBjb250ZXh0LCBz
eW5jaHJvbm91cyksIHN5bmNocm9ub3VzKTsKKyAgICAgICAgd2ViV29ya2VyLT5vcGVuRmlsZVN5
c3RlbUZvcldvcmtlcihzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6
ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFj
a3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJvbm91
cyk7CiAgICAgfQogfQogCit2b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUs
IFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGJvb2wgc3lu
Y2hyb25vdXMpCit7CisgICAgb3BlbkZpbGVTeXN0ZW1IZWxwZXIoY29udGV4dCwgdHlwZSwgY2Fs
bGJhY2tzLCBzeW5jaHJvbm91cywgMCwgT3BlbkV4aXN0aW5nKTsKK30KKwordm9pZCBMb2NhbEZp
bGVTeXN0ZW06OnJlcXVlc3RGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFzc093blB0
cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcywgYm9vbCBzeW5jaHJvbm91cykK
K3sKKyAgICBvcGVuRmlsZVN5c3RlbUhlbHBlcihjb250ZXh0LCB0eXBlLCBjYWxsYmFja3MsIHN5
bmNocm9ub3VzLCBzaXplLCBDcmVhdGVJZk5vdFByZXNlbnQpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCmluZGV4IGIxNmI2ZDQwN2MwYTc3N2E3
NTA1NzY2ZTAzM2Y5YTQ1MzgyNTJlZDUuLjRiMjdkZGIzN2QyNDY5ZTU1YjJjYTM1MmYyYjhlZGM3
YWI3MmMyNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtl
ckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2Uu
Y3BwCkBAIC0yMzcsNyArMjM3LDcgQEAgYm9vbCBXZWJXb3JrZXJCYXNlOjphbGxvd0RhdGFiYXNl
KFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHIKIH0KIAogI2lm
IEVOQUJMRShGSUxFX1NZU1RFTSkKLXZvaWQgV2ViV29ya2VyQmFzZTo6b3BlbkZpbGVTeXN0ZW1G
b3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgV2ViRmls
ZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQordm9pZCBXZWJX
b3JrZXJCYXNlOjpvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihXZWJGaWxlU3lzdGVtOjpUeXBlIHR5
cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyog
Y2FsbGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQogewogICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxv
b3AgPSBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpOwogICAgIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29u
dGV4dCgpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgV2ViV29ya2VyQmFzZTo6b3BlbkZpbGVT
eXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcKICAgICBt
b2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29wLmNyZWF0ZVVuaXF1ZUlkKCkpKTsKIAog
ICAgIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UgPSBXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGUodGhpcywgd29ya2VyQ29udGV4dCwg
Y2FsbGJhY2tzKTsKLSAgICBicmlkZ2UtPnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChj
b21tb25DbGllbnQoKSwgdHlwZSwgc2l6ZSwgbW9kZSk7CisgICAgYnJpZGdlLT5wb3N0T3BlbkZp
bGVTeXN0ZW1Ub01haW5UaHJlYWQoY29tbW9uQ2xpZW50KCksIHR5cGUsIHNpemUsIGNyZWF0ZSwg
bW9kZSk7CiAKICAgICBpZiAoc3luY2hyb25vdXMpIHsKICAgICAgICAgaWYgKHJ1bkxvb3AucnVu
SW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUpID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgKaW5kZXggZWM3MzUwNTY5
YTg3NGVhOTgyNThiZTgyOTc2YTJhYWIwNDNmMGU1My4uOGZiMDMyZTYxN2VmZGIyZjM3YmE1YTk5
MTFhNTJjMjViM2JlMzlkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViV29ya2VyQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtl
ckJhc2UuaApAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGFsbG93
RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAKICNpZiBFTkFC
TEUoRklMRV9TWVNURU0pCi0gICAgdm9pZCBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihXZWJGaWxl
U3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyosIGJv
b2wgc3luY2hyb25vdXMpOworICAgIHZvaWQgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViRmls
ZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzKiwgYm9vbCBzeW5jaHJvbm91cyk7CiAjZW5kaWYKIAogICAgIC8vIEV4ZWN1dGVz
IHRoZSBnaXZlbiB0YXNrIG9uIHRoZSBtYWluIHRocmVhZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZS5jcHAKaW5kZXggMGZiYTQyNTU0NTUwZmM2YWU1MTgxM2EzN2RlOWYxNzcyOWNjMTQ1OC4uYWI0
NGM3Mjc0ODk0NjNhYjllNDg5OTg2YzhmYjRhODAwNmVlODI4YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZS5jcHAKQEAgLTE1MCw5ICsxNTAsOSBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2U6OnN0b3AoKQogICAgIH0KIH0KIAotdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoV2ViQ29tbW9uV29y
a2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBs
b25nIHNpemUsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFkKFdlYkNvbW1vbldvcmtl
ckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9u
ZyBzaXplLCBib29sIGNyZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2RlKQogewotICAgIGRpc3BhdGNo
VGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJm9wZW5GaWxlU3lzdGVtT25NYWlu
VGhyZWFkLCBjb21tb25DbGllbnQsIHR5cGUsIHNpemUsIHRoaXMsIG1vZGUpKTsKKyAgICBkaXNw
YXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZvcGVuRmlsZVN5c3RlbU9u
TWFpblRocmVhZCwgY29tbW9uQ2xpZW50LCB0eXBlLCBzaXplLCBjcmVhdGUsIHRoaXMsIG1vZGUp
KTsKIH0KIAogdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0TW92ZVRv
TWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVBhdGgsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25QYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUp
CkBAIC0yMTIsMTIgKzIxMiwxMiBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U6OnBvc3RSZWFkRGlyZWN0b3J5VG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZQogICAgIGRpc3Bh
dGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnJlYWREaXJlY3RvcnlPbk1h
aW5UaHJlYWQsIGZpbGVTeXN0ZW0sIHBhdGgsIHRoaXMsIG1vZGUpKTsKIH0KIAotdm9pZCBXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGll
bnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIFdvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2UqIGJyaWRnZSwgY29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVh
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25D
bGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3Jl
YXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiBicmlkZ2UsIGNvbnN0IFN0cmlu
ZyYgbW9kZSkKIHsKICAgICBpZiAoIWNvbW1vbkNsaWVudCkKICAgICAgICAgYnJpZGdlLT5kaWRG
YWlsT25NYWluVGhyZWFkKFdlYkZpbGVFcnJvckFib3J0LCBtb2RlKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgY29tbW9uQ2xpZW50LT5vcGVuRmlsZVN5c3RlbSh0eXBlLCBzaXplLCBNYWluVGhyZWFk
RmlsZVN5c3RlbUNhbGxiYWNrczo6Y3JlYXRlTGVha2VkUHRyKGJyaWRnZSwgbW9kZSkpOworICAg
ICAgICBjb21tb25DbGllbnQtPm9wZW5GaWxlU3lzdGVtKHR5cGUsIHNpemUsIGNyZWF0ZSwgTWFp
blRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0ZUxlYWtlZFB0cihicmlkZ2UsIG1vZGUp
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaAppbmRleCBmYTU3ZjM4Mjk4Zjcz
MTAzZDM4ZGJhZjFlMzg3MTU3NWY1NTAxNGM4Li44NGNkZGFkMmQ1YzQ5ODNiZDlhNjkxYzJmYTZi
OWU4MWJkOWJiOTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCkBAIC04NCw3ICs4NCw3IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBNZXRob2RzIHRoYXQgY3JlYXRlIGFuIGluc3RhbmNl
IGFuZCBwb3N0IGFuIGluaXRpYWwgcmVxdWVzdCB0YXNrIHRvIHRoZSBtYWluIHRocmVhZC4gVGhl
eSBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgd29ya2VyIHRocmVhZC4KLSAgICB2b2lkIHBvc3RPcGVu
RmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lz
dGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICB2b2lk
IHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBX
ZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0IFN0
cmluZyYgbW9kZSk7CiAgICAgdm9pZCBwb3N0TW92ZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVt
KiwgY29uc3QgU3RyaW5nJiBzcmNQYXRoLCBjb25zdCBTdHJpbmcmIGRlc3RQYXRoLCBjb25zdCBT
dHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdENvcHlUb01haW5UaHJlYWQoV2ViRmlsZVN5c3Rl
bSosIGNvbnN0IFN0cmluZyYgc3JjUGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0UGF0aCwgY29uc3Qg
U3RyaW5nJiBtb2RlKTsKICAgICB2b2lkIHBvc3RSZW1vdmVUb01haW5UaHJlYWQoV2ViRmlsZVN5
c3RlbSosIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKQEAgLTEwNyw3
ICsxMDcsNyBAQCBwcml2YXRlOgogICAgIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uo
V2ViV29ya2VyQmFzZSosIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzKik7CiAKICAgICAvLyBNZXRob2RzIHRoYXQgYXJlIHRvIGJlIGNhbGxl
ZCBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgc3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1Pbk1h
aW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvbW1vbldvcmtl
ckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICBzdGF0aWMg
dm9pZCBvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9u
ZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
KiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCBtb3ZlT25NYWluVGhyZWFk
KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3Qg
U3RyaW5nJiBzcmNQYXRoLCBjb25zdCBTdHJpbmcmIGRlc3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCBj
b3B5T25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxl
U3lzdGVtKiwgY29uc3QgU3RyaW5nJiBzcmNQYXRoLCBjb25zdCBTdHJpbmcmIGRlc3RQYXRoLCBX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAg
ICBzdGF0aWMgdm9pZCByZW1vdmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcmIHBhdGgsIFdvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>