<?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>17526</bug_id>
          
          <creation_ts>2008-02-24 20:10:39 -0800</creation_ts>
          <short_desc>REGRESSION: iframes are added to Safari&apos;s History menu</short_desc>
          <delta_ts>2008-03-06 10:27:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>History</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>http://cnn.com/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>darin</cc>
    
    <cc>maddietrich</cc>
    
    <cc>sam</cc>
    
    <cc>sullivan</cc>
    
    <cc>webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>71819</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-02-24 20:10:39 -0800</bug_when>
    <thetext>When you open http://cnn.com/ in TOT, Safari&apos;s History menu is cluttered with all the iframes on the page. I think this is a result of &lt;http://trac.webkit.org/projects/webkit/changeset/30549&gt; (bug 16770).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71821</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-24 20:32:22 -0800</bug_when>
    <thetext>I guess we need a separate concept of &quot;in the history&quot; for visited links than the one for the history in the application. I would like to talk this one over with John Sullivan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72035</commentid>
    <comment_count>2</comment_count>
      <attachid>19383</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-26 11:37:31 -0800</bug_when>
    <thetext>Created attachment 19383
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72469</commentid>
    <comment_count>3</comment_count>
      <attachid>19477</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-01 19:53:09 -0800</bug_when>
    <thetext>Created attachment 19477
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72509</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-03-02 15:00:55 -0800</bug_when>
    <thetext>*** Bug 17641 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72765</commentid>
    <comment_count>5</comment_count>
      <attachid>19539</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 17:29:45 -0800</bug_when>
    <thetext>Created attachment 19539
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72770</commentid>
    <comment_count>6</comment_count>
      <attachid>19542</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 18:01:53 -0800</bug_when>
    <thetext>Created attachment 19542
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72774</commentid>
    <comment_count>7</comment_count>
      <attachid>19542</attachid>
    <who name="">mitz</who>
    <bug_when>2008-03-04 22:15:51 -0800</bug_when>
    <thetext>Comment on attachment 19542
patch

Review of the WebCore part: mostly nit-picking, but also a couple of serious problems.

-        Vector&lt;CSSMutableStyleDeclaration*&gt; m_additionalAttributeStyleDecls;
-        
+        Vector&lt;CSSMutableStyleDeclaration*&gt; m_additionalAttributeStyleDecls;        

You accidentally added trailing spaces.

+        if (otherPage != page)
+            for (Frame* frame = otherPage-&gt;mainFrame(); frame; frame = frame-&gt;tree()-&gt;traverseNext())
+                if (frame-&gt;tree()-&gt;name() == name)
+                    return frame;

The outer if and for loop above need braces.

+    HashSet&lt;Page*&gt;::iterator end = allPages-&gt;end();
+    for (HashSet&lt;Page*&gt;::iterator it = allPages-&gt;begin(); it != end; ++it) {
+        if (PageGroup* group = (*it)-&gt;groupPtr())
+            groups.add(group);
+    }
+    HashSet&lt;PageGroup*&gt;::iterator e2 = groups.end();

&quot;e2&quot; without an &quot;e1&quot; is weird. How about &quot;pagesEnd&quot; and &quot;groupsEnd&quot; for the two local variables?

+    class KURL;

Any reason why this one is out of alphabetical order?

+        PageGroup();

Is this constructor needed?

+    if (length &lt; 3)
+        return false;
+    unsigned loopLimit = length - 2;
+    for (unsigned i = 0; i &lt; loopLimit; ++i)
+        if (characters[i] == &apos;:&apos; &amp;&amp; characters[i + 1] == &apos;/&apos; &amp;&amp; characters[i + 2] == &apos;/&apos;)
+            return true;

The for loop needs braces. Also, is there a reason why this function has an explicit early return, whereas the others just set loopLimit to 0?

+    if (!matchLetter(characters[0], &apos;h&apos;)
+            || matchLetter(characters[1], &apos;t&apos;)
+            || matchLetter(characters[2], &apos;t&apos;)
+            || matchLetter(characters[3], &apos;p&apos;))
+        return false;

I don&apos;t understand this condition. Looks like this will return false for &quot;http&quot;.

I also wonder if URLs terminating with a slash are common enough to check for that first.

How is the {defer, resume}VisitedLinkUpdates() mechanism supposed to work?

+    unsigned pathEnd() const { return pathEndPos; }
+    unsigned pathAfterLastSlash() const { return pathEndPos; }

This looks wrong. Looking at KURL I don&apos;t see that it caches the offset after the last slash in the path, so you will need to add that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72779</commentid>
    <comment_count>8</comment_count>
      <attachid>19542</attachid>
    <who name="">mitz</who>
    <bug_when>2008-03-04 23:17:09 -0800</bug_when>
    <thetext>Comment on attachment 19542
patch

[See comment #7 for a review of the WebCore part]

+        (-[WebHistory _addVisitedLinksToPageGroup:WebCore::]): Added. For use only inside WebKit.

prepare-ChangeLog messed up the method signature.

-#import &quot;WebHistory.h&quot;
-#import &quot;WebHistoryPrivate.h&quot;
+#import &quot;WebHistoryInternal.h&quot;
+#import &quot;WebHistoryInternal.h&quot;

You removed WebHistory.h and added WebHistoryInternal.h twice.

+    int itemLimit;
+    int ageInDaysLimit;

Should these be unsigned?

+- (BOOL)containsItemForURLString:(NSString *)URLString;
+- (BOOL)containsURL:(NSURL *)URL;
+- (WebHistoryItem *)itemForURL:(NSURL *)URL;
+- (WebHistoryItem *)itemForURLString:(NSString *)URLString;

It would be nice to change the order of the first two methods here.

+- (NSCalendarDate*)ageLimitDate;

Missing a space before the *.

+    if (count == 0)

Should be written as &quot;if (count)&quot;.

+    NSMutableArray *discardedItems = [[NSMutableArray alloc] init];    

Doesn&apos;t this array leak in the &quot;successful&quot; branch?

r- because of the problems mentioned in comment #7 and the apparent leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72807</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-05 09:56:15 -0800</bug_when>
    <thetext>Thanks for the great review. Working on these things now.

(In reply to comment #7)
&gt; +        Vector&lt;CSSMutableStyleDeclaration*&gt; m_additionalAttributeStyleDecls;   
&gt; 
&gt; You accidentally added trailing spaces.

Fixed.

&gt; The outer if and for loop above need braces.

Fixed.

&gt; How about &quot;pagesEnd&quot; and &quot;groupsEnd&quot; for the two local variables?

Great suggestion. Done.

&gt; +    class KURL;
&gt; 
&gt; Any reason why this one is out of alphabetical order?

I know this class will soon be renamed to URL. I am conflicted about whether to sort it based on its current name or its future name.

&gt; +        PageGroup();
&gt; 
&gt; Is this constructor needed?

Originally the PageGroup map stored actual PageGroup objects, not just pointers. With that design the empty constructor was needed. We no longer use that design so it&apos;s no longer needed. Also, I can now mark PageGroup as Noncopyable.

&gt; +    if (length &lt; 3)
&gt; +        return false;
&gt; +    unsigned loopLimit = length - 2;
&gt; +    for (unsigned i = 0; i &lt; loopLimit; ++i)
&gt; +        if (characters[i] == &apos;:&apos; &amp;&amp; characters[i + 1] == &apos;/&apos; &amp;&amp; characters[i +
&gt; 2] == &apos;/&apos;)
&gt; +            return true;
&gt; 
&gt; The for loop needs braces. Also, is there a reason why this function has an
&gt; explicit early return, whereas the others just set loopLimit to 0?

No good reason. I changed all the functions to use early returns.

&gt; +    if (!matchLetter(characters[0], &apos;h&apos;)
&gt; +            || matchLetter(characters[1], &apos;t&apos;)
&gt; +            || matchLetter(characters[2], &apos;t&apos;)
&gt; +            || matchLetter(characters[3], &apos;p&apos;))
&gt; +        return false;
&gt; 
&gt; I don&apos;t understand this condition. Looks like this will return false for
&gt; &quot;http&quot;.

That was a bug. There were some missing ! operators, and I added them.

&gt; I also wonder if URLs terminating with a slash are common enough to check for
&gt; that first.

That&apos;s a good suggestion, worth exploring after I land. I&apos;d prefer to leave the logic alone in this patch.

&gt; How is the {defer, resume}VisitedLinkUpdates() mechanism supposed to work?

I don&apos;t really know exactly. It&apos;s sort of a placeholder for a future mechanism that updates visited links that are already displayed, but I haven&apos;t thought it through enough to be sure it will be helpful. I think there may need to be some sort of optimization to limit the complexity of the operation of adding lots of visited links all at once, but I haven&apos;t figured out the details; I&apos;d probably keep a separate hash of &quot;changed visited links&quot; and then intersect that with the visited link sets of various views.

Let me know if you think I should remove this &quot;scaffolding&quot; from this patch.

&gt; +    unsigned pathEnd() const { return pathEndPos; }
&gt; +    unsigned pathAfterLastSlash() const { return pathEndPos; }
&gt; 
&gt; This looks wrong. Looking at KURL I don&apos;t see that it caches the offset after
&gt; the last slash in the path, so you will need to add that.

You&apos;re absolutely right. Glad you caught this, although I must admit I knew about it.

I knew this was an outstanding task -- I shouldn&apos;t have marked the patch for review until it was resolved! I think I&apos;ll break out the KURL part and get it reviewed and landed first/separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72808</commentid>
    <comment_count>10</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-03-05 10:09:15 -0800</bug_when>
    <thetext>(In reply to comment #9)

&gt; &gt; How is the {defer, resume}VisitedLinkUpdates() mechanism supposed to work?

[...]

&gt; Let me know if you think I should remove this &quot;scaffolding&quot; from this patch.

I see it as a comment masquerading as code :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72809</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-05 10:10:53 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; +        (-[WebHistory _addVisitedLinksToPageGroup:WebCore::]): Added. For use
&gt; only inside WebKit.
&gt; 
&gt; prepare-ChangeLog messed up the method signature.

Fixed.

&gt; -#import &quot;WebHistory.h&quot;
&gt; -#import &quot;WebHistoryPrivate.h&quot;
&gt; +#import &quot;WebHistoryInternal.h&quot;
&gt; +#import &quot;WebHistoryInternal.h&quot;
&gt; 
&gt; You removed WebHistory.h and added WebHistoryInternal.h twice.

Fixed. I meant to include only &quot;WebHistoryInternal.h&quot;. The design here is that Internal headers always included the corresponding Private header first if any, and Private headers always include the corresponding Public header first if any. Then the implementation file includes the Internal header. That way all the headers get the &quot;can be included standalone&quot; testing and there are no redundant includes.

&gt; +    int itemLimit;
&gt; +    int ageInDaysLimit;
&gt; 
&gt; Should these be unsigned?

Maybe, but I&apos;d prefer not to change that in this patch. I&apos;m just moving this code around, trying to keep the changes to a minimum.

&gt; +- (BOOL)containsItemForURLString:(NSString *)URLString;
&gt; +- (BOOL)containsURL:(NSURL *)URL;
&gt; +- (WebHistoryItem *)itemForURL:(NSURL *)URL;
&gt; +- (WebHistoryItem *)itemForURLString:(NSString *)URLString;
&gt; 
&gt; It would be nice to change the order of the first two methods here.

Done. I hope we can remove some of these methods eventually.

&gt; +- (NSCalendarDate*)ageLimitDate;
&gt; 
&gt; Missing a space before the *.

Fixed (in 3 places).

I *hate* our rule. I want a new rule for Objective-C vs. C++ stars! I&apos;m hoping we can agree to a rule where we use the space in SPI and API headers, but everywhere else we use the same formatting for ObjC and C++.

&gt; +    if (count == 0)
&gt; 
&gt; Should be written as &quot;if (count)&quot;.

Done.

&gt; +    NSMutableArray *discardedItems = [[NSMutableArray alloc] init];    
&gt; 
&gt; Doesn&apos;t this array leak in the &quot;successful&quot; branch?

It does! Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72810</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-05 10:12:07 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; Let me know if you think I should remove this &quot;scaffolding&quot; from this patch.
&gt; 
&gt; I see it as a comment masquerading as code :-)

OK. Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72811</commentid>
    <comment_count>13</comment_count>
      <attachid>19547</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-05 10:18:17 -0800</bug_when>
    <thetext>Created attachment 19547
patch that addresses all of Mitz&apos;s comments except for the missing KURL logic</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72813</commentid>
    <comment_count>14</comment_count>
      <attachid>19548</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-05 10:30:27 -0800</bug_when>
    <thetext>Created attachment 19548
KURL work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72858</commentid>
    <comment_count>15</comment_count>
      <attachid>19563</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-05 17:39:20 -0800</bug_when>
    <thetext>Created attachment 19563
patch that adds new KURL features used by the main patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72859</commentid>
    <comment_count>16</comment_count>
      <attachid>19563</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-05 18:00:58 -0800</bug_when>
    <thetext>Comment on attachment 19563
patch that adds new KURL features used by the main patch

Sam reviewed this and we found and fixed one bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72860</commentid>
    <comment_count>17</comment_count>
      <attachid>19564</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-05 18:17:35 -0800</bug_when>
    <thetext>Created attachment 19564
patch, with fixes requested by Mitz</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72861</commentid>
    <comment_count>18</comment_count>
      <attachid>19563</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-05 18:17:51 -0800</bug_when>
    <thetext>Comment on attachment 19563
patch that adds new KURL features used by the main patch

Landed this KURL patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72864</commentid>
    <comment_count>19</comment_count>
      <attachid>19564</attachid>
    <who name="">mitz</who>
    <bug_when>2008-03-05 19:05:00 -0800</bug_when>
    <thetext>Comment on attachment 19564
patch, with fixes requested by Mitz

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72917</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-06 09:23:14 -0800</bug_when>
    <thetext>Committed revision 30840.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72920</commentid>
    <comment_count>21</comment_count>
      <attachid>19571</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-06 10:27:10 -0800</bug_when>
    <thetext>Created attachment 19571
more work in progress</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19383</attachid>
            <date>2008-02-26 11:37:31 -0800</date>
            <delta_ts>2008-03-01 19:53:09 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>VisitedPatch.txt</filename>
            <type>text/plain</type>
            <size>54802</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYnJpZGdlL0dsb2JhbEhpc3RvcnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JyaWRnZS9HbG9iYWxIaXN0b3J5LmgJKHJldmlzaW9uIDMwNTk0KQorKysgV2ViQ29yZS9i
cmlkZ2UvR2xvYmFsSGlzdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM3ICsxIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBHbG9iYWxIaXN0b3J5X2gKLSNkZWZpbmUgR2xvYmFsSGlzdG9y
eV9oCi0KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotICAgIGJvb2wgaGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBHbG9iYWxIaXN0b3J5X2gKKyNlcnJvcgpJbmRleDogV2ViQ29yZS9icmlkZ2UvbWFjL0dsb2Jh
bEhpc3RvcnlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvbWFjL0dsb2JhbEhp
c3RvcnlNYWMubW0JKHJldmlzaW9uIDMwNTk0KQorKysgV2ViQ29yZS9icmlkZ2UvbWFjL0dsb2Jh
bEhpc3RvcnlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMzkgKzEgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJHbG9iYWxIaXN0b3J5LmgiCi0KLSNp
bXBvcnQgIldlYkNvcmVIaXN0b3J5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBo
aXN0b3J5Q29udGFpbnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICAvLyB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgYnJpZGdlIGlzIGNhcmVmdWwgbm90IHRv
IHRocm93IGV4Y2VwdGlvbnMgaGVyZQotICAgIHJldHVybiBbW1dlYkNvcmVIaXN0b3J5IGhpc3Rv
cnlQcm92aWRlcl0gY29udGFpbnNVUkw6Y2hhcmFjdGVycyBsZW5ndGg6bGVuZ3RoXTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorLy8gZGVsZXRlIG1lCkluZGV4OiBXZWJDb3JlL2JyaWRn
ZS93aW4vR2xvYmFsSGlzdG9yeVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uv
d2luL0dsb2JhbEhpc3RvcnlXaW4uY3BwCShyZXZpc2lvbiAzMDU5NCkKKysrIFdlYkNvcmUvYnJp
ZGdlL3dpbi9HbG9iYWxIaXN0b3J5V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzOSArMSBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2xvYmFs
SGlzdG9yeS5oIgotCi0jaW5jbHVkZSAiV2ViQ29yZUhpc3RvcnkuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1ib29sIGhpc3RvcnlDb250YWlucyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIFdlYkNvcmVIaXN0b3J5UHJvdmlkZXIqIHByb3ZpZGVy
ID0gV2ViQ29yZUhpc3Rvcnk6Omhpc3RvcnlQcm92aWRlcigpOwotICAgIHJldHVybiBwcm92aWRl
ciAmJiBwcm92aWRlci0+Y29udGFpbnNVUkwoY2hhcmFjdGVycywgbGVuZ3RoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorLy8gZGVsZXRlIG1lCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcAkocmV2aXNpb24gMzA1OTQpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEzIEBACiAjaW5jbHVkZSAiRm9udFZh
bHVlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNs
dWRlICJHbG9iYWxIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiTWVkaWFR
dWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWlyLmgiCiAj
aW5jbHVkZSAiUmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0yMzIsNyArMjMy
LDYgQEAgQ1NTU3R5bGVTaGVldCogQ1NTU3R5bGVTZWxlY3Rvcjo6bV92aWV3UwogQ1NTU3R5bGVT
aGVldCAqQ1NTU3R5bGVTZWxlY3Rvcjo6bV9zdmdTaGVldCA9IDA7CiAjZW5kaWYKIAotc3RhdGlj
IENTU1N0eWxlU2VsZWN0b3I6OkVuY29kZWRVUkwqIGN1cnJlbnRFbmNvZGVkVVJMID0gMDsKIHN0
YXRpYyBQc2V1ZG9TdGF0ZSBwc2V1ZG9TdGF0ZTsKIAogc3RhdGljIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImIHNjcmVlbkV2YWwoKQpAQCAtMzE2LDI4ICszMTUsMTAgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjppbml0KCkKICAgICBtX21lZGl1bSA9IDA7CiB9CiAKLXZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6c2V0RW5jb2RlZFVSTChjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgS1VSTCB1ID0g
dXJsOwotCi0gICAgdS5zZXRRdWVyeShTdHJpbmcoKSk7Ci0gICAgdS5zZXRSZWYoU3RyaW5nKCkp
OwotICAgIG1fZW5jb2RlZFVSTC5maWxlID0gdS5zdHJpbmcoKTsKLSAgICBpbnQgcG9zID0gbV9l
bmNvZGVkVVJMLmZpbGUucmV2ZXJzZUZpbmQoJy8nKTsKLSAgICBtX2VuY29kZWRVUkwucGF0aCA9
IG1fZW5jb2RlZFVSTC5maWxlOwotICAgIGlmIChwb3MgPiAwKSB7Ci0gICAgICAgIG1fZW5jb2Rl
ZFVSTC5wYXRoLnRydW5jYXRlKHBvcyk7Ci0gICAgICAgIG1fZW5jb2RlZFVSTC5wYXRoLmFwcGVu
ZCgnLycpOwotICAgIH0KLSAgICB1LnNldFBhdGgoU3RyaW5nKCkpOwotICAgIG1fZW5jb2RlZFVS
TC5wcmVmaXggPSB1LnN0cmluZygpOwotfQotCiBDU1NTdHlsZVNlbGVjdG9yOjp+Q1NTU3R5bGVT
ZWxlY3RvcigpCiB7CiAgICAgZGVsZXRlIG1fbWVkaXVtOwotICAgIDo6ZGVsZXRlIG1fcm9vdERl
ZmF1bHRTdHlsZTsKLQorICAgIGRlbGV0ZSBtX3Jvb3REZWZhdWx0U3R5bGU7CiAgICAgZGVsZXRl
IG1fYXV0aG9yU3R5bGU7CiAgICAgZGVsZXRlIG1fdXNlclN0eWxlOwogfQpAQCAtNTM3LDcgKzUx
OCw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEVsZW1lbnRBbmRQc2UKICAgICAgICAg
bV9zdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCk7
CiAgICAgZWxzZQogICAgICAgICBtX3N0eWxlZEVsZW1lbnQgPSAwOwotICAgIGN1cnJlbnRFbmNv
ZGVkVVJMID0gJm1fZW5jb2RlZFVSTDsKICAgICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb1Vua25vd247
CiB9CiAKQEAgLTU2OCw4MSArNTQ4LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0Rm9y
U3R5bGVSZXNvbAogICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
aW50IGZpbmRTbGFzaERvdERvdFNsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3Qg
bGVuZ3RoKQotewotICAgIHVuc2lnbmVkIGxvb3BMaW1pdCA9IGxlbmd0aCA8IDQgPyAwIDogbGVu
Z3RoIC0gMzsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kpIHsK
LSAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09
ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgM10gPT0g
Jy8nKQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQot
c3RhdGljIGlubGluZSBpbnQgZmluZFNsYXNoU2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgsIGludCBwb3NpdGlvbikKLXsKLSAgICB1bnNpZ25lZCBsb29wTGltaXQg
PSBsZW5ndGggPCAyID8gMCA6IGxlbmd0aCAtIDE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gcG9z
aXRpb247IGkgPCBsb29wTGltaXQ7ICsraSkgewotICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9
PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy8nKQotICAgICAgICAgICAgcmV0dXJuIGk7
Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZmluZFNsYXNo
RG90U2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAg
dW5zaWduZWQgbG9vcExpbWl0ID0gbGVuZ3RoIDwgMyA/IDAgOiBsZW5ndGggLSAyOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb29wTGltaXQ7ICsraSkgewotICAgICAgICBpZiAoY2hh
cmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy4nICYmIGNoYXJhY3Rl
cnNbaSArIDJdID09ICcvJykKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgIH0KLSAgICByZXR1
cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc0NvbG9uU2xhc2hTbGFzaChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHVuc2lnbmVk
IGxvb3BMaW1pdCA9IGxlbmd0aCA8IDMgPyAwIDogbGVuZ3RoIC0gMjsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kpCi0gICAgICAgIGlmIChjaGFyYWN0ZXJzW2ld
ID09ICc6JyAmJiBjaGFyYWN0ZXJzW2kgKyAxXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMl0g
PT0gJy8nKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1zdGF0aWMgdm9pZCBjbGVhblBhdGgoVmVjdG9yPFVDaGFyLCA1MTI+JiBwYXRoKQotewotICAg
IGludCBwb3M7Ci0gICAgd2hpbGUgKChwb3MgPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRh
dGEoKSwgcGF0aC5zaXplKCkpKSAhPSAtMSkgewotICAgICAgICBpbnQgcHJldiA9IHJldmVyc2VG
aW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJy8nLCBwb3MgLSAxKTsKLSAgICAgICAgLy8g
ZG9uJ3QgcmVtb3ZlIHRoZSBob3N0LCBpLmUuIGh0dHA6Ly9mb28ub3JnLy4uL2Zvby5odG1sCi0g
ICAgICAgIGlmIChwcmV2IDwgMCB8fCAocHJldiA+IDMgJiYgcGF0aFtwcmV2IC0gMl0gPT0gJzon
ICYmIHBhdGhbcHJldiAtIDFdID09ICcvJykpCi0gICAgICAgICAgICBwYXRoLnJlbW92ZShwb3Ms
IDMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXRoLnJlbW92ZShwcmV2LCBwb3MgLSBw
cmV2ICsgMyk7Ci0gICAgfQotCi0gICAgLy8gRG9uJ3QgcmVtb3ZlICIvLyIgZnJvbSBhbiBhbmNo
b3IgaWRlbnRpZmllci4gLXJqdwotICAgIC8vIFNldCByZWZQb3MgdG8gLTIgdG8gbWVhbiAiSSBo
YXZlbid0IGxvb2tlZCBmb3IgdGhlIGFuY2hvciB5ZXQiLgotICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8gd2FzdGUgYSBmdW5jdGlvbiBjYWxsIG9uIHRoZSBzZWFyY2ggZm9yIHRoZSB0aGUgYW5jaG9y
Ci0gICAgLy8gaW4gdGhlIHZhc3QgbWFqb3JpdHkgb2YgY2FzZXMgd2hlcmUgdGhlcmUgaXMgbm8g
Ii8vIiBpbiB0aGUgcGF0aC4KLSAgICBwb3MgPSAwOwotICAgIGludCByZWZQb3MgPSAtMjsKLSAg
ICB3aGlsZSAoKHBvcyA9IGZpbmRTbGFzaFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwg
cG9zKSkgIT0gLTEpIHsKLSAgICAgICAgaWYgKHJlZlBvcyA9PSAtMikKLSAgICAgICAgICAgIHJl
ZlBvcyA9IGZpbmQocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAnIycpOwotICAgICAgICBpZiAo
cmVmUG9zID4gMCAmJiBwb3MgPj0gcmVmUG9zKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgaWYgKHBvcyA9PSAwIHx8IHBhdGhbcG9zIC0gMV0gIT0gJzonKQotICAgICAgICAgICAgcGF0
aC5yZW1vdmUocG9zKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcG9zICs9IDI7Ci0gICAg
fQotCi0gICAgLy8gRklYTUU6IFdlIGRvbid0IHdhbnQgdG8gcmVtb3ZlICIvLi8iIGZyb20gYW4g
YW5jaG9yIGlkZW50aWZpZXIgZWl0aGVyLgotICAgIHdoaWxlICgocG9zID0gZmluZFNsYXNoRG90
U2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpKSkgIT0gLTEpCi0gICAgICAgIHBhdGgucmVt
b3ZlKHBvcywgMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrUHNldWRvU3RhdGUoRWxlbWVudCAq
ZSwgYm9vbCBjaGVja1Zpc2l0ZWQgPSB0cnVlKQorc3RhdGljIHZvaWQgY2hlY2tQc2V1ZG9TdGF0
ZShFbGVtZW50KiBlLCBib29sIGNoZWNrVmlzaXRlZCA9IHRydWUpCiB7CiAgICAgaWYgKCFlLT5p
c0xpbmsoKSkgewogICAgICAgICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb05vbmU7CkBAIC02NzEsMjYg
KzU3NywyMSBAQCBzdGF0aWMgdm9pZCBjaGVja1BzZXVkb1N0YXRlKEVsZW1lbnQgKmUsCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IGF0dHIt
PmNoYXJhY3RlcnMoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyLT5sZW5ndGgoKTsKKyAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBlLT5kb2N1bWVudCgpOwogCi0gICAgaWYgKGNvbnRhaW5z
Q29sb25TbGFzaFNsYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpIHsKLSAgICAgICAgLy8gRklYTUU6
IFN0cmFuZ2UgdG8gbm90IGNsZWFuIHRoZSBwYXRoIGp1c3QgYmVhY2F1c2UgaXQgaGFzICI6Ly8i
IGluIGl0LgotICAgICAgICBwc2V1ZG9TdGF0ZSA9IGhpc3RvcnlDb250YWlucyhjaGFyYWN0ZXJz
LCBsZW5ndGgpID8gUHNldWRvVmlzaXRlZCA6IFBzZXVkb0xpbms7CisgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkgeworICAgICAgICBwc2V1ZG9T
dGF0ZSA9IFBzZXVkb0xpbms7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8
VUNoYXIsIDUxMj4gYnVmZmVyOwotICAgIGlmIChsZW5ndGggJiYgY2hhcmFjdGVyc1swXSA9PSAn
LycpIHsKLSAgICAgICAgYnVmZmVyLmFwcGVuZChjdXJyZW50RW5jb2RlZFVSTC0+cHJlZml4LmNo
YXJhY3RlcnMoKSwgY3VycmVudEVuY29kZWRVUkwtPnByZWZpeC5sZW5ndGgoKSk7Ci0gICAgfSBl
bHNlIGlmIChsZW5ndGggJiYgY2hhcmFjdGVyc1swXSA9PSAnIycpIHsKLSAgICAgICAgYnVmZmVy
LmFwcGVuZChjdXJyZW50RW5jb2RlZFVSTC0+ZmlsZS5jaGFyYWN0ZXJzKCksIGN1cnJlbnRFbmNv
ZGVkVVJMLT5maWxlLmxlbmd0aCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBidWZmZXIuYXBw
ZW5kKGN1cnJlbnRFbmNvZGVkVVJMLT5wYXRoLmNoYXJhY3RlcnMoKSwgY3VycmVudEVuY29kZWRV
UkwtPnBhdGgubGVuZ3RoKCkpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAg
IGlmICghcGFnZSkgeworICAgICAgICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb0xpbms7CisgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOwot
ICAgIGNsZWFuUGF0aChidWZmZXIpOwotICAgIHBzZXVkb1N0YXRlID0gaGlzdG9yeUNvbnRhaW5z
KGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpID8gUHNldWRvVmlzaXRlZCA6IFBzZXVkb0xp
bms7CisKKyAgICBwc2V1ZG9TdGF0ZSA9IHBhZ2UtPmdyb3VwKCkuaXNMaW5rVmlzaXRlZChkb2N1
bWVudCwgKmF0dHIpID8gUHNldWRvVmlzaXRlZCA6IFBzZXVkb0xpbms7CiB9CiAKIC8vIGEgaGVs
cGVyIGZ1bmN0aW9uIGZvciBwYXJzaW5nIG50aC1hcmd1bWVudHMKQEAgLTgyOSwxMiArNzMwLDE0
IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICAgICAgICAg
ICAgICAgICAgbWFwcGVkQXR0cnNNYXRjaCA9IHMtPm1hcHBlZEF0dHJpYnV0ZXMoKS0+bWFwc0Vx
dWl2YWxlbnQobV9zdHlsZWRFbGVtZW50LT5tYXBwZWRBdHRyaWJ1dGVzKCkpOwogICAgICAgICAg
ICAgICAgIGlmIChtYXBwZWRBdHRyc01hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgIGJvb2wg
bGlua3NNYXRjaCA9IHRydWU7CisKICAgICAgICAgICAgICAgICAgICAgaWYgKHMtPmlzTGluaygp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBp
ZiB0aGUgdmlzaXRlZCBzdGF0ZSBtYXRjaGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgQ29s
b3IgbGlua0NvbG9yID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIENvbG9yIHZpc2l0ZWRDb2xvciA9IG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+dmlzaXRlZExpbmtDb2xvcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBz
ZXVkb1N0YXRlID09IFBzZXVkb1Vua25vd24pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cHNldWRvU3RhdGUgPT0gUHNldWRvVW5rbm93bikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IENvbG9yJiBsaW5rQ29sb3IgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtD
b2xvcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbG9yJiB2aXNpdGVk
Q29sb3IgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGVja1BzZXVkb1N0YXRlKG1fZWxlbWVudCwgc3R5bGUt
PnBzZXVkb1N0YXRlKCkgIT0gUHNldWRvQW55TGluayB8fCBsaW5rQ29sb3IgIT0gdmlzaXRlZENv
bG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtzTWF0Y2ggPSAocHNldWRvU3RhdGUgPT0gc3R5bGUtPnBzZXVkb1N0YXRlKCkpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNTEzNCw4ICs1MDM3
LDggQEAgQ29sb3IgQ1NTU3R5bGVTZWxlY3Rvcjo6Z2V0Q29sb3JGcm9tUHJpbQogICAgICAgICBp
ZiAoaWRlbnQgPT0gQ1NTX1ZBTF9fV0VCS0lUX1RFWFQpCiAgICAgICAgICAgICBjb2wgPSBtX2Vs
ZW1lbnQtPmRvY3VtZW50KCktPnRleHRDb2xvcigpOwogICAgICAgICBlbHNlIGlmIChpZGVudCA9
PSBDU1NfVkFMX19XRUJLSVRfTElOSykgewotICAgICAgICAgICAgQ29sb3IgbGlua0NvbG9yID0g
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKLSAgICAgICAgICAgIENvbG9yIHZp
c2l0ZWRDb2xvciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpOwor
ICAgICAgICAgICAgY29uc3QgQ29sb3ImIGxpbmtDb2xvciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQo
KS0+bGlua0NvbG9yKCk7CisgICAgICAgICAgICBjb25zdCBDb2xvciYgdmlzaXRlZENvbG9yID0g
bV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCk7CiAgICAgICAgICAgICBp
ZiAobGlua0NvbG9yID09IHZpc2l0ZWRDb2xvcikKICAgICAgICAgICAgICAgICBjb2wgPSBsaW5r
Q29sb3I7CiAgICAgICAgICAgICBlbHNlIHsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJl
dmlzaW9uIDMwNTk0KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTAsMTQgKzExMCw2IEBAIHB1YmxpYzoKIAogICAgICAgICBib29sIHN0cmlj
dFBhcnNpbmc7CiAKLSAgICAgICAgc3RydWN0IEVuY29kZWRVUkwgewotICAgICAgICAgICAgU3Ry
aW5nIHByZWZpeDsgLy8gcHJvdG9jb2wsIGhvc3QsIGV0Yy4KLSAgICAgICAgICAgIFN0cmluZyBw
YXRoOwotICAgICAgICAgICAgU3RyaW5nIGZpbGU7Ci0gICAgICAgIH0gbV9lbmNvZGVkVVJMOwot
Ci0gICAgICAgIHZvaWQgc2V0RW5jb2RlZFVSTChjb25zdCBLVVJMJiB1cmwpOwotCiAgICAgICAg
IC8vIEdpdmVuIGEgQ1NTIGtleXdvcmQgaW4gdGhlIHJhbmdlICh4eC1zbWFsbCB0byAtd2Via2l0
LXh4eC1sYXJnZSksIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4KICAgICAgICAgLy8gdGhlIGNv
cnJlY3QgZm9udCBzaXplIHNjYWxlZCByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGRlZmF1bHQgKG1l
ZGl1bSkuCiAgICAgICAgIGZsb2F0IGZvbnRTaXplRm9yS2V5d29yZChpbnQga2V5d29yZCwgYm9v
bCBxdWlya3NNb2RlLCBib29sIG1vbm9zcGFjZSkgY29uc3Q7CkBAIC0yNTAsMTEgKzI0Miw4IEBA
IHB1YmxpYzoKICAgICAgICAgYm9vbCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlczsKIAogICAg
ICAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKLQogICAgICAgICBI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBtX3NlbGVjdG9yQXR0cnM7Ci0gICAgICAgIAotICAg
ICAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiBtX2FkZGl0aW9uYWxBdHRy
aWJ1dGVTdHlsZURlY2xzOwotICAgICAgICAKKyAgICAgICAgVmVjdG9yPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKj4gbV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsczsgICAgICAgIAog
ICAgICAgICBWZWN0b3I8TWVkaWFRdWVyeVJlc3VsdCo+IG1fdmlld3BvcnREZXBlbmRlbnRNZWRp
YVF1ZXJ5UmVzdWx0czsKIAogICAgICAgICB2b2lkIGFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NW
YWx1ZSopOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzA1OTQpCisrKyBXZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMTMsNyArMTIxMyw2IEBAIHZvaWQgRG9j
dW1lbnQ6OmF0dGFjaCgpCiAgICAgICAgIGlmIChTZXR0aW5ncyogZG9jU2V0dGluZ3MgPSBzZXR0
aW5ncygpKQogICAgICAgICAgICAgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzID0gZG9jU2V0dGlu
Z3MtPmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKCk7CiAgICAgICAgIG1fc3R5bGVTZWxlY3Rv
ciA9IG5ldyBDU1NTdHlsZVNlbGVjdG9yKHRoaXMsIHVzZXJTdHlsZVNoZWV0KCksIG1fc3R5bGVT
aGVldHMuZ2V0KCksIG1fbWFwcGVkRWxlbWVudFNoZWV0LmdldCgpLCAhaW5Db21wYXRNb2RlKCks
IG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyk7Ci0gICAgICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0
RW5jb2RlZFVSTChtX3VybCk7CiAgICAgfQogCiAgICAgcmVjYWxjU3R5bGUoRm9yY2UpOwpAQCAt
MTYzNCw5ICsxNjMzLDYgQEAgdm9pZCBEb2N1bWVudDo6c2V0VVJMKGNvbnN0IEtVUkwmIHVybCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV91cmwgPSB1cmw7Ci0gICAgaWYgKG1fc3R5bGVTZWxl
Y3RvcikKLSAgICAgICAgbV9zdHlsZVNlbGVjdG9yLT5zZXRFbmNvZGVkVVJMKHVybCk7Ci0KICAg
ICBtX2lzQWxsb3dlZFRvTG9hZExvY2FsUmVzb3VyY2VzID0gc2hvdWxkQmVBbGxvd2VkVG9Mb2Fk
TG9jYWxSZXNvdXJjZXMoKTsKICB9CiAgCkBAIC0yMjA2LDcgKzIyMDIsNiBAQCB2b2lkIERvY3Vt
ZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAvLyBDcmVhdGUgYSBuZXcgc3R5bGUgc2Vs
ZWN0b3IKICAgICBkZWxldGUgbV9zdHlsZVNlbGVjdG9yOwogICAgIG1fc3R5bGVTZWxlY3RvciA9
IG5ldyBDU1NTdHlsZVNlbGVjdG9yKHRoaXMsIHVzZXJTdHlsZVNoZWV0KCksIG1fc3R5bGVTaGVl
dHMuZ2V0KCksIG1fbWFwcGVkRWxlbWVudFNoZWV0LmdldCgpLCAhaW5Db21wYXRNb2RlKCksIG1h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcyk7Ci0gICAgbV9zdHlsZVNlbGVjdG9yLT5zZXRFbmNvZGVk
VVJMKG1fdXJsKTsKICAgICBtX2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0b3IgPSB0cnVlOwogfQog
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAzMDU5NCkKKysrIFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIzOCwxMiArNDIzOCwy
NCBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVHbG9iYWxIaXN0b3J5KCkKICAgICBtX2NsaWVu
dC0+dXBkYXRlR2xvYmFsSGlzdG9yeSh1cmwpOwogfQogCisvLyBUaGVyZSBhcmUgMyB0aGluZ3Mg
eW91IG1pZ2h0IHRoaW5rIG9mIGFzICJoaXN0b3J5IiwgYWxsIG9mIHdoaWNoIGFyZSBoYW5kbGVk
IGJ5IHRoZXNlIGZ1bmN0aW9ucy4KKy8vCisvLyAgICAgMSkgQmFjay9mb3J3YXJkOiBUaGUgbV9j
dXJyZW50SGlzdG9yeUl0ZW0gaXMgcGFydCBvZiB0aGlzIG1lY2hhbmlzbS4KKy8vICAgICAyKSBH
bG9iYWwgaGlzdG9yeTogSGFuZGxlZCBieSB0aGUgY2xpZW50LgorLy8gICAgIDMpIFZpc2l0ZWQg
bGlua3M6IEhhbmRsZWQgYnkgdGhlIFBhZ2VHcm91cC4KKwogdm9pZCBGcmFtZUxvYWRlcjo6dXBk
YXRlSGlzdG9yeUZvclN0YW5kYXJkTG9hZCgpCiB7CiAgICAgTE9HKEhpc3RvcnksICJXZWJDb3Jl
SGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgU3RhbmRhcmQgTG9hZCBpbiBmcmFtZSAlcyIs
IGRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAK
KworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7CisgICAgYm9v
bCBuZWVkUHJpdmFjeSA9ICFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZCgpOworCisgICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IGRvY3VtZW50TG9hZGVyKCkt
PnVybEZvckhpc3RvcnkoKTsKKwogICAgIC8vIElmIHRoZSBuYXZpZ2F0aW9uIG9jY3VyZWQgZHVy
aW5nIGxvYWQgYW5kIHRoaXMgaXMgYSBzdWJmcmFtZSwgdXBkYXRlIHRoZSBjdXJyZW50Ci0gICAg
Ly8gaGlzdG9yeSBpdGVtIHJhdGhlciB0aGFuIGFkZGluZyBhIG5ldyBvbmUuIDxyZGFyOi8vcHJv
YmxlbS81MzMzNDk2PgorICAgIC8vIGJhY2svZm9yd2FyZCBpdGVtIHJhdGhlciB0aGFuIGFkZGlu
ZyBhIG5ldyBvbmUgYW5kIGRvbid0IGFkZCB0aGUgbmV3IFVSTCB0byBnbG9iYWwKKyAgICAvLyBo
aXN0b3J5IGF0IGFsbC4gQnV0IGRvIGFkZCBpdCB0byB2aXNpdGVkIGxpbmtzLiA8cmRhcjovL3By
b2JsZW0vNTMzMzQ5Nj4KICAgICBib29sIGZyYW1lTmF2aWdhdGlvbkR1cmluZ0xvYWQgPSBmYWxz
ZTsKICAgICBpZiAobV9uYXZpZ2F0aW9uRHVyaW5nTG9hZCkgewogICAgICAgICBIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCk7CkBAIC00MjUyLDE0
ICs0MjY0LDE4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JTdGFuZGEKICAg
ICB9CiAKICAgICBpZiAoIWZyYW1lTmF2aWdhdGlvbkR1cmluZ0xvYWQgJiYgIWRvY3VtZW50TG9h
ZGVyKCktPmlzQ2xpZW50UmVkaXJlY3QoKSkgewotICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVy
KCktPnVybEZvckhpc3RvcnkoKS5pc0VtcHR5KCkpCisgICAgICAgIGlmICghaGlzdG9yeVVSTC5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIGFkZEJhY2tGb3J3YXJkSXRlbUNsaXBwZWRBdFRhcmdl
dCh0cnVlKTsKKyAgICAgICAgICAgIGlmICghbmVlZFByaXZhY3kpCisgICAgICAgICAgICAgICAg
bV9jbGllbnQtPnVwZGF0ZUdsb2JhbEhpc3RvcnkoaGlzdG9yeVVSTCk7CisgICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKGRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgp
ICYmIG1fY3VycmVudEhpc3RvcnlJdGVtKSB7CiAgICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVt
LT5zZXRVUkwoZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkpOwogICAgICAgICBtX2N1cnJlbnRIaXN0
b3J5SXRlbS0+c2V0Rm9ybUluZm9Gcm9tUmVxdWVzdChkb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0
KCkpOwogICAgIH0KIAotICAgIHVwZGF0ZUdsb2JhbEhpc3RvcnkoKTsKKyAgICBpZiAoUGFnZSog
cGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Z3JvdXAoKS5hZGRWaXNpdGVk
TGluayhoaXN0b3J5VVJMKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZv
ckNsaWVudFJlZGlyZWN0KCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiAzMDU5NCkKKysrIFdlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsMTMgKzM0NSwxMCBAQCB2
b2lkIENocm9tZTo6cHJpbnQoRnJhbWUqIGZyYW1lKQogCiBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6
OlBhZ2VHcm91cExvYWREZWZlcnJlcihQYWdlKiBwYWdlLCBib29sIGRlZmVyU2VsZikKIHsKLSAg
ICBjb25zdCBIYXNoU2V0PFBhZ2UqPiogZ3JvdXAgPSBwYWdlLT5mcmFtZU5hbWVzcGFjZSgpOwor
ICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IHBhZ2UtPmdyb3VwKCkucGFnZXMoKTsK
IAotICAgIGlmICghZ3JvdXApCi0gICAgICAgIHJldHVybjsKLQotICAgIEhhc2hTZXQ8UGFnZSo+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBncm91cC0+ZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFBh
Z2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBncm91cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgp
OworICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFnZXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFBhZ2UqIG90aGVyUGFnZSA9ICppdDsK
ICAgICAgICAgaWYgKChkZWZlclNlbGYgfHwgb3RoZXJQYWdlICE9IHBhZ2UpKSB7CiAgICAgICAg
ICAgICBpZiAoIW90aGVyUGFnZS0+ZGVmZXJzTG9hZGluZygpKQpJbmRleDogV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAkocmV2aXNpb24gMzA1OTQpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNCw2ICsxMDQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VOYW1lKSA9IDA7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlVmlz
aXRlZExpbmtzKCkgPSAwOworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIH5DaHJv
bWVDbGllbnQoKSB7IH0KICAgICB9OwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAJKHJldmlzaW9uIDMwNTk0
KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Miwx
NyArMTgyLDE2IEBAIEZyYW1lKiBGcmFtZVRyZWU6OmZpbmQoY29uc3QgQXRvbWljU3RyaW4KICAg
ICAgICAgaWYgKGZyYW1lLT50cmVlKCktPm5hbWUoKSA9PSBuYW1lKQogICAgICAgICAgICAgcmV0
dXJuIGZyYW1lOwogCi0gICAgLy8gU2VhcmNoIHRoZSBlbnRpcmUgdHJlZSBmb3IgYWxsIG90aGVy
IHBhZ2VzIGluIHRoaXMgbmFtZXNwYWNlLgotICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+KiBwYWdl
cyA9IHBhZ2UtPmZyYW1lTmFtZXNwYWNlKCk7Ci0gICAgaWYgKHBhZ2VzKSB7Ci0gICAgICAgIEhh
c2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy0+ZW5kKCk7Ci0gICAgICAg
IGZvciAoSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFnZXMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGFnZSogb3RoZXJQYWdlID0gKml0Owot
ICAgICAgICAgICAgaWYgKG90aGVyUGFnZSAhPSBwYWdlKQotICAgICAgICAgICAgICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gb3RoZXJQYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIGlmIChmcmFt
ZS0+dHJlZSgpLT5uYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmcmFtZTsKLSAgICAgICAgfQorICAgIC8vIFNlYXJjaCB0aGUgZW50aXJlIHRyZWUgb2YgZWFj
aCBvZiB0aGUgb3RoZXIgcGFnZXMgaW4gdGhpcyBuYW1lc3BhY2UuCisgICAgLy8gRklYTUU6IElz
IHJhbmRvbSBvcmRlciBPSz8KKyAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdl
LT5ncm91cCgpLnBhZ2VzKCk7CisgICAgSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IHBhZ2VzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gcGFnZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFBhZ2UqIG90
aGVyUGFnZSA9ICppdDsKKyAgICAgICAgaWYgKG90aGVyUGFnZSAhPSBwYWdlKQorICAgICAgICAg
ICAgZm9yIChGcmFtZSogZnJhbWUgPSBvdGhlclBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkKKyAgICAgICAgICAgICAgICBpZiAo
ZnJhbWUtPnRyZWUoKS0+bmFtZSgpID09IG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmcmFtZTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDMwNTk0
KQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCwx
MCBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3R5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFBhZ2VHcm91cCo+IFBhZ2VHcm91cE1hcDsKKwogc3RhdGljIEhh
c2hTZXQ8UGFnZSo+KiBhbGxQYWdlczsKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgSGFzaFNldDxQ
YWdlKj4qPiogZnJhbWVOYW1lc3BhY2VzOworc3RhdGljIFBhZ2VHcm91cE1hcCogcGFnZUdyb3Vw
czsKIAogI2lmbmRlZiBOREVCVUcKIFdURkxvZ0NoYW5uZWwgTG9nV2ViQ29yZVBhZ2VMZWFrcyA9
ICB7IDB4MDAwMDAwMDAsICIiLCBXVEZMb2dDaGFubmVsT24gfTsKQEAgLTg2LDYgKzg4LDcgQEAg
UGFnZTo6UGFnZShDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCwgQwogICAgICwgbV9wYXJlbnRJ
bnNwZWN0b3JDb250cm9sbGVyKDApCiAgICAgLCBtX2RpZExvYWRVc2VyU3R5bGVTaGVldChmYWxz
ZSkKICAgICAsIG1fdXNlclN0eWxlU2hlZXRNb2RpZmljYXRpb25UaW1lKDApCisgICAgLCBtX2dy
b3VwKDApCiB7CiAgICAgaWYgKCFhbGxQYWdlcykgewogICAgICAgICBhbGxQYWdlcyA9IG5ldyBI
YXNoU2V0PFBhZ2UqPjsKQEAgLTE2NSwzNyArMTY4LDQxIEBAIHZvaWQgUGFnZTo6Z29Ub0l0ZW0o
SGlzdG9yeUl0ZW0qIGl0ZW0sIEYKIAogdm9pZCBQYWdlOjpzZXRHcm91cE5hbWUoY29uc3QgU3Ry
aW5nJiBuYW1lKQogewotICAgIGlmIChmcmFtZU5hbWVzcGFjZXMgJiYgIW1fZ3JvdXBOYW1lLmlz
RW1wdHkoKSkgewotICAgICAgICBIYXNoU2V0PFBhZ2UqPiogb2xkTmFtZXNwYWNlID0gZnJhbWVO
YW1lc3BhY2VzLT5nZXQobV9ncm91cE5hbWUpOwotICAgICAgICBpZiAob2xkTmFtZXNwYWNlKSB7
Ci0gICAgICAgICAgICBvbGROYW1lc3BhY2UtPnJlbW92ZSh0aGlzKTsKLSAgICAgICAgICAgIGlm
IChvbGROYW1lc3BhY2UtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGZyYW1lTmFtZXNw
YWNlcy0+cmVtb3ZlKG1fZ3JvdXBOYW1lKTsKLSAgICAgICAgICAgICAgICBkZWxldGUgb2xkTmFt
ZXNwYWNlOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgaWYgKCFtX2dyb3VwTmFtZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpbmdsZVBhZ2VHcm91cCk7CisgICAgICAg
IEFTU0VSVChtX2dyb3VwKTsKKyAgICAgICAgQVNTRVJUKHBhZ2VHcm91cHMpOworICAgICAgICBB
U1NFUlQocGFnZUdyb3Vwcy0+Z2V0KG1fZ3JvdXBOYW1lKSA9PSBtX2dyb3VwKTsKKyAgICAgICAg
bV9ncm91cC0+cmVtb3ZlUGFnZSh0aGlzKTsKKyAgICAgICAgaWYgKG1fZ3JvdXAtPnBhZ2VzKCku
aXNFbXB0eSgpKQorICAgICAgICAgICAgcGFnZUdyb3Vwcy0+cmVtb3ZlKG1fZ3JvdXBOYW1lKTsK
ICAgICB9CiAgICAgbV9ncm91cE5hbWUgPSBuYW1lOwotICAgIGlmICghbmFtZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgaWYgKCFmcmFtZU5hbWVzcGFjZXMpCi0gICAgICAgICAgICBmcmFtZU5hbWVz
cGFjZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8UGFnZSo+Kj47Ci0gICAgICAgIEhh
c2hTZXQ8UGFnZSo+KiBuZXdOYW1lc3BhY2UgPSBmcmFtZU5hbWVzcGFjZXMtPmdldChuYW1lKTsK
LSAgICAgICAgaWYgKCFuZXdOYW1lc3BhY2UpIHsKLSAgICAgICAgICAgIG5ld05hbWVzcGFjZSA9
IG5ldyBIYXNoU2V0PFBhZ2UqPjsKLSAgICAgICAgICAgIGZyYW1lTmFtZXNwYWNlcy0+YWRkKG5h
bWUsIG5ld05hbWVzcGFjZSk7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQorICAgICAgICBtX2dy
b3VwID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9zaW5nbGVQYWdlR3JvdXAuY2xlYXIoKTsK
KyAgICAgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICAgICAgcGFnZUdyb3VwcyA9IG5ldyBQ
YWdlR3JvdXBNYXA7CisgICAgICAgIHBhaXI8UGFnZUdyb3VwTWFwOjppdGVyYXRvciwgYm9vbD4g
cmVzdWx0ID0gcGFnZUdyb3Vwcy0+YWRkKG5hbWUsIDApOworICAgICAgICBpZiAoIXJlc3VsdC5z
ZWNvbmQpIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQuZmlyc3QtPnNlY29uZCk7CisgICAg
ICAgICAgICBtX2dyb3VwID0gcmVzdWx0LmZpcnN0LT5zZWNvbmQ7CisgICAgICAgICAgICBtX2dy
b3VwLT5hZGRQYWdlKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
KCFyZXN1bHQuZmlyc3QtPnNlY29uZCk7CisgICAgICAgICAgICBtX2dyb3VwID0gbmV3IFBhZ2VH
cm91cCh0aGlzKTsKKyAgICAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kID0gbV9ncm91cDsK
ICAgICAgICAgfQotICAgICAgICBuZXdOYW1lc3BhY2UtPmFkZCh0aGlzKTsKICAgICB9CiB9CiAK
LWNvbnN0IEhhc2hTZXQ8UGFnZSo+KiBQYWdlOjpmcmFtZU5hbWVzcGFjZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIChmcmFtZU5hbWVzcGFjZXMgJiYgIW1fZ3JvdXBOYW1lLmlzRW1wdHkoKSkgPyBm
cmFtZU5hbWVzcGFjZXMtPmdldChtX2dyb3VwTmFtZSkgOiAwOwotfQotCi1jb25zdCBIYXNoU2V0
PFBhZ2UqPiogUGFnZTo6ZnJhbWVOYW1lc3BhY2UoY29uc3QgU3RyaW5nJiBncm91cE5hbWUpCit2
b2lkIFBhZ2U6OmluaXRHcm91cCgpCiB7Ci0gICAgcmV0dXJuIChmcmFtZU5hbWVzcGFjZXMgJiYg
IWdyb3VwTmFtZS5pc0VtcHR5KCkpID8gZnJhbWVOYW1lc3BhY2VzLT5nZXQoZ3JvdXBOYW1lKSA6
IDA7CisgICAgQVNTRVJUKCFtX3NpbmdsZVBhZ2VHcm91cCk7CisgICAgQVNTRVJUKCFtX2dyb3Vw
KTsKKyAgICBtX3NpbmdsZVBhZ2VHcm91cC5zZXQobmV3IFBhZ2VHcm91cCh0aGlzKSk7CisgICAg
bV9ncm91cCA9IG1fc2luZ2xlUGFnZUdyb3VwLmdldCgpOwogfQogCiB2b2lkIFBhZ2U6OnNldE5l
ZWRzUmVhcHBseVN0eWxlcygpCkBAIC0zNjAsNCArMzY3LDIwOCBAQCBjb25zdCBTdHJpbmcmIFBh
Z2U6OnVzZXJTdHlsZVNoZWV0KCkgY29uCiAgICAgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXQ7CiB9
CiAKKy8vIC0tLS0tLS0tCisKK1BhZ2VHcm91cDo6UGFnZUdyb3VwKCkKKyAgICA6IG1fdmlzaXRl
ZExpbmtzUG9wdWxhdGVkKGZhbHNlKQoreworfQorCitQYWdlR3JvdXA6OlBhZ2VHcm91cChQYWdl
KiBwYWdlKQorICAgIDogbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQoZmFsc2UpCit7CisgICAgQVNT
RVJUKHBhZ2UpOworICAgIG1fcGFnZXMuYWRkKHBhZ2UpOworfQorCit2b2lkIFBhZ2VHcm91cDo6
YWRkUGFnZShQYWdlKiBwYWdlKQoreworICAgIEFTU0VSVChwYWdlKTsKKyAgICBBU1NFUlQoIW1f
cGFnZXMuY29udGFpbnMocGFnZSkpOworICAgIG1fcGFnZXMuYWRkKHBhZ2UpOworfQorCit2b2lk
IFBhZ2VHcm91cDo6cmVtb3ZlUGFnZShQYWdlKiBwYWdlKQoreworICAgIEFTU0VSVChwYWdlKTsK
KyAgICBBU1NFUlQobV9wYWdlcy5jb250YWlucyhwYWdlKSk7CisgICAgbV9wYWdlcy5yZW1vdmUo
cGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRTbGFzaERvdERvdFNsYXNoKGNvbnN0
IDo6VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit7CisgICAgdW5zaWduZWQgbG9v
cExpbWl0ID0gbGVuZ3RoIDwgNCA/IDAgOiBsZW5ndGggLSAzOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsb29wTGltaXQ7ICsraSkgeworICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9
PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDJdID09
ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAzXSA9PSAnLycpCisgICAgICAgICAgICByZXR1cm4gaTsK
KyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludCBmaW5kU2xhc2hT
bGFzaChjb25zdCA6OlVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBpbnQgcG9zaXRp
b24pCit7CisgICAgdW5zaWduZWQgbG9vcExpbWl0ID0gbGVuZ3RoIDwgMiA/IDAgOiBsZW5ndGgg
LSAxOworICAgIGZvciAodW5zaWduZWQgaSA9IHBvc2l0aW9uOyBpIDwgbG9vcExpbWl0OyArK2kp
IHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFd
ID09ICcvJykKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9
CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRTbGFzaERvdFNsYXNoKGNvbnN0IDo6VUNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit7CisgICAgdW5zaWduZWQgbG9vcExpbWl0ID0gbGVu
Z3RoIDwgMyA/IDAgOiBsZW5ndGggLSAyOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
b29wTGltaXQ7ICsraSkgeworICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hh
cmFjdGVyc1tpICsgMV0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcvJykKKyAgICAg
ICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBjb250YWluc0NvbG9uU2xhc2hTbGFzaChjb25zdCA6OlVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKGxlbmd0aCA8IDMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB1bnNpZ25lZCBsb29wTGltaXQgPSBsZW5ndGggLSAyOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsb29wTGltaXQ7ICsraSkKKyAgICAgICAgaWYgKGNoYXJhY3Rl
cnNbaV0gPT0gJzonICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kg
KyAyXSA9PSAnLycpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhblBhdGgoVmVjdG9yPCA6OlVDaGFyLCA1MTI+
JiBwYXRoKQoreworICAgIC8vIEZJWE1FOiBTaG9sZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkg
b3IgYW5jaG9yIHBhcnQuCisgICAgaW50IHBvczsKKyAgICB3aGlsZSAoKHBvcyA9IGZpbmRTbGFz
aERvdERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSkpICE9IC0xKSB7CisgICAgICAg
IGludCBwcmV2ID0gcmV2ZXJzZUZpbmQocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAnLycsIHBv
cyAtIDEpOworICAgICAgICAvLyBkb24ndCByZW1vdmUgdGhlIGhvc3QsIGkuZS4gaHR0cDovL2Zv
by5vcmcvLi4vZm9vLmh0bWwKKyAgICAgICAgaWYgKHByZXYgPCAwIHx8IChwcmV2ID4gMyAmJiBw
YXRoW3ByZXYgLSAyXSA9PSAnOicgJiYgcGF0aFtwcmV2IC0gMV0gPT0gJy8nKSkKKyAgICAgICAg
ICAgIHBhdGgucmVtb3ZlKHBvcywgMyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhdGgu
cmVtb3ZlKHByZXYsIHBvcyAtIHByZXYgKyAzKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogU2hv
bGQgbm90IGRvIHRoaXMgaW4gdGhlIHF1ZXJ5IHBhcnQuCisgICAgLy8gU2V0IHJlZlBvcyB0byAt
MiB0byBtZWFuICJJIGhhdmVuJ3QgbG9va2VkIGZvciB0aGUgYW5jaG9yIHlldCIuCisgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byB3YXN0ZSBhIGZ1bmN0aW9uIGNhbGwgb24gdGhlIHNlYXJjaCBmb3Ig
dGhlIHRoZSBhbmNob3IKKyAgICAvLyBpbiB0aGUgdmFzdCBtYWpvcml0eSBvZiBjYXNlcyB3aGVy
ZSB0aGVyZSBpcyBubyAiLy8iIGluIHRoZSBwYXRoLgorICAgIHBvcyA9IDA7CisgICAgaW50IHJl
ZlBvcyA9IC0yOworICAgIHdoaWxlICgocG9zID0gZmluZFNsYXNoU2xhc2gocGF0aC5kYXRhKCks
IHBhdGguc2l6ZSgpLCBwb3MpKSAhPSAtMSkgeworICAgICAgICBpZiAocmVmUG9zID09IC0yKQor
ICAgICAgICAgICAgcmVmUG9zID0gZmluZChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksICcjJyk7
CisgICAgICAgIGlmIChyZWZQb3MgPiAwICYmIHBvcyA+PSByZWZQb3MpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBpZiAocG9zID09IDAgfHwgcGF0aFtwb3MgLSAxXSAhPSAnOicpCisg
ICAgICAgICAgICBwYXRoLnJlbW92ZShwb3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBw
b3MgKz0gMjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogU2hvbGQgbm90IGRvIHRoaXMgaW4gdGhl
IHF1ZXJ5IG9yIGFuY2hvciBwYXJ0LgorICAgIHdoaWxlICgocG9zID0gZmluZFNsYXNoRG90U2xh
c2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpKSkgIT0gLTEpCisgICAgICAgIHBhdGgucmVtb3Zl
KHBvcywgMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaExldHRlcig6OlVDaGFyIGMs
IDo6VUNoYXIgbG93ZXJjYXNlTGV0dGVyKQoreworICAgIHJldHVybiAoYyB8IDB4MjApID09IGxv
d2VyY2FzZUxldHRlcjsKK30KKworc3RhdGljIGlubGluZSBib29sIG5lZWRzVHJhaWxpbmdTbGFz
aChjb25zdCA6OlVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYg
KGxlbmd0aCA8IDYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1hdGNoTGV0dGVy
KGNoYXJhY3RlcnNbMF0sICdoJykKKyAgICAgICAgICAgIHx8IG1hdGNoTGV0dGVyKGNoYXJhY3Rl
cnNbMV0sICd0JykKKyAgICAgICAgICAgIHx8IG1hdGNoTGV0dGVyKGNoYXJhY3RlcnNbMl0sICd0
JykKKyAgICAgICAgICAgIHx8IG1hdGNoTGV0dGVyKGNoYXJhY3RlcnNbM10sICdwJykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIShjaGFyYWN0ZXJzWzRdID09ICc6JworICAgICAg
ICAgICAgfHwgKG1hdGNoTGV0dGVyKGNoYXJhY3RlcnNbNF0sICdzJykgJiYgY2hhcmFjdGVyc1s1
XSA9PSAnOicpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgcG9zID0g
Y2hhcmFjdGVyc1s0XSA9PSAnOicgPyA1IDogNjsKKworICAgIC8vIFNraXAgaW5pdGlhbCB0d28g
c2xhc2hlcyBpZiBwcmVzZW50LgorICAgIGlmIChwb3MgKyAxIDwgbGVuZ3RoICYmIGNoYXJhY3Rl
cnNbcG9zXSA9PSAnLycgJiYgY2hhcmFjdGVyc1twb3MgKyAxXSA9PSAnLycpCisgICAgICAgIHBv
cyArPSAyOworCisgICAgLy8gRmluZCBuZXh0IHNsYXNoLgorICAgIHdoaWxlIChwb3MgPCBsZW5n
dGggJiYgY2hhcmFjdGVyc1twb3NdICE9ICcvJykKKyAgICAgICAgKytwb3M7CisKKyAgICByZXR1
cm4gcG9zID09IGxlbmd0aDsKK30KKworYm9vbCBQYWdlR3JvdXA6OmlzTGlua1Zpc2l0ZWQoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKK3sKKyAg
ICBpZiAoIW1fdmlzaXRlZExpbmtzUG9wdWxhdGVkKSB7CisgICAgICAgIEFTU0VSVCghbV9wYWdl
cy5pc0VtcHR5KCkpOworICAgICAgICAoKm1fcGFnZXMuYmVnaW4oKSktPmNocm9tZSgpLT5jbGll
bnQoKS0+cG9wdWxhdGVWaXNpdGVkTGlua3MoKTsKKyAgICAgICAgbV92aXNpdGVkTGlua3NQb3B1
bGF0ZWQgPSB0cnVlOworICAgIH0KKworICAgIGNvbnN0IDo6VUNoYXIqIGNoYXJhY3RlcnMgPSBh
dHRyaWJ1dGVVUkwuY2hhcmFjdGVycygpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0
ZVVSTC5sZW5ndGgoKTsKKworICAgIC8vIEZJWE1FOiBJdCBpcyBzdHJhbmdlIHRoYXQgd2UgZG8g
bm90IGRvIGZ1cnRoZXIgcHJvY2Vzc2luZyBvbiBzdHJpbmdzIHRoYXQgaGF2ZSAiOi8vIiBpbiB0
aGVtLgorICAgIC8vIFRoYXQncyBjbGVhcmx5IGluY29ycmVjdCBmb3IgYXQgbGVhc3QgdGhlc2Ug
cmVhc29uczoKKyAgICAvLyAgICAxKSBUaGUgIjovLyIgY291bGQgYmUgaW4gdGhlIHF1ZXJ5IG9y
IGFuY2hvci4KKyAgICAvLyAgICAyKSBUaGUgVVJMJ3MgcGF0aCBjb3VsZCBoYXZlIGEgIi8uLyIg
b3IgYSAiLy4uLyIgb3IgYSAiLy8iIHNlcXVlbmNlIGluIGl0LgorCisgICAgLy8gRklYTUU6IG5l
ZWRzVHJhaWxpbmdTbGFzaCBkb2VzIG5vdCBwcm9wZXJseSByZXR1cm4gdHJ1ZSBmb3IgYSBVUkwg
dGhhdCBoYXMgbm8gcGF0aCwgYnV0IGRvZXMKKyAgICAvLyBoYXZlIGEgcXVlcnkgb3IgYW5jaG9y
LgorCisgICAgYm9vbCBoYXNDb2xvblNsYXNoU2xhc2ggPSBjb250YWluc0NvbG9uU2xhc2hTbGFz
aChjaGFyYWN0ZXJzLCBsZW5ndGgpOworCisgICAgaWYgKGhhc0NvbG9uU2xhc2hTbGFzaCAmJiAh
bmVlZHNUcmFpbGluZ1NsYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBt
X3Zpc2l0ZWRMaW5rSGFzaGVzLmNvbnRhaW5zKFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKGNoYXJh
Y3RlcnMsIGxlbmd0aCkpOworCisgICAgVmVjdG9yPCA6OlVDaGFyLCA1MTI+IGJ1ZmZlcjsKKwor
ICAgIC8vIFRoaXMgaXMgYSBwb29yIG1hbidzIGNvbXBsZXRlVVJMLiBGYXN0ZXIgd2l0aCBsZXNz
IG1lbW9yeSBhbGxvY2F0aW9uLgorICAgIC8vIEZJWE1FOiBJdCdzIG1pc3NpbmcgYSBsb3Qgb2Yg
d2hhdCBjb21wbGV0ZVVSTCBkb2VzIGFuZCB3aGF0IEtVUkwgZG9lcy4KKyAgICAvLyBGSVhNRTog
TW92ZSB0aGlzIGludG8gS1VSTD8gT3IgRG9jdW1lbnQ/IEV2ZW4gdGhlIGZhc3QgdmVyc2lvbiBz
aG91bGQgYmUgaW4gdGhlIHJpZ2h0IHBsYWNlLAorICAgIC8vIHJhdGhlciB0aGFuIGhlcmUuCisK
KyAgICBpZiAoaGFzQ29sb25TbGFzaFNsYXNoKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGluY29ycmVjdCBmb3IgVVJMcyB0aGF0IGhhdmUgYSBxdWVyeSBvciBhbmNob3I7IHRoZSAiLyIg
bmVlZHMgdG8gZ28gYXQgdGhlCisgICAgICAgIC8vIGVuZCBvZiB0aGUgcGF0aCwgKmJlZm9yZSog
dGhlIHF1ZXJ5IG9yIGFuY2hvci4KKyAgICAgICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBs
ZW5ndGgpOworICAgICAgICBidWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgIHJldHVybiBtX3Zp
c2l0ZWRMaW5rSGFzaGVzLmNvbnRhaW5zKFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKGJ1ZmZlci5k
YXRhKCksIGJ1ZmZlci5zaXplKCkpKTsKKyAgICB9CisKKyAgICBjb25zdCBLVVJMJiBiYXNlVVJM
ID0gZG9jdW1lbnQtPmJhc2VVUkwoKTsKKyAgICBzd2l0Y2ggKGNoYXJhY3RlcnNbMF0pIHsKKyAg
ICAgICAgY2FzZSAnLyc6CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGJhc2VVUkwuc3RyaW5n
KCkuY2hhcmFjdGVycygpLCBiYXNlVVJMLnBhdGhTdGFydCgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICcjJzoKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoYmFzZVVSTC5z
dHJpbmcoKS5jaGFyYWN0ZXJzKCksIGJhc2VVUkwucGF0aEVuZCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChiYXNlVVJM
LnN0cmluZygpLmNoYXJhY3RlcnMoKSwgYmFzZVVSTC5wYXRoQWZ0ZXJMYXN0U2xhc2goKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBs
ZW5ndGgpOworICAgIGNsZWFuUGF0aChidWZmZXIpOworICAgIGlmIChuZWVkc1RyYWlsaW5nU2xh
c2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMgaW5jb3JyZWN0IGZvciBVUkxzIHRoYXQgaGF2ZSBhIHF1ZXJ5IG9yIGFuY2hvcjsgdGhl
ICIvIiBuZWVkcyB0byBnbyBhdCB0aGUKKyAgICAgICAgLy8gZW5kIG9mIHRoZSBwYXRoLCAqYmVm
b3JlKiB0aGUgcXVlcnkgb3IgYW5jaG9yLgorICAgICAgICBidWZmZXIuYXBwZW5kKCcvJyk7Cisg
ICAgfQorCisgICAgcmV0dXJuIG1fdmlzaXRlZExpbmtIYXNoZXMuY29udGFpbnMoU3RyaW5nSW1w
bDo6Y29tcHV0ZUhhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSkpOworfQorCit2b2lk
IFBhZ2VHcm91cDo6YWRkVmlzaXRlZExpbmsoY29uc3QgS1VSTCYgdXJsKQoreworICAgIEFTU0VS
VCghdXJsLmlzRW1wdHkoKSk7CisgICAgbV92aXNpdGVkTGlua0hhc2hlcy5hZGQodXJsLnN0cmlu
ZygpLmltcGwoKS0+aGFzaCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5oCShy
ZXZpc2lvbiAzMDU5NCkKKysrIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTMzLDIyICszMywxMyBAQAogdHlwZWRlZiBzdHJ1Y3QgSElOU1RBTkNF
X18qIEhJTlNUQU5DRTsKICNlbmRpZgogCi10eXBlZGVmIGVudW0gVGV4dENhc2VTZW5zaXRpdml0
eSB7Ci0gICAgVGV4dENhc2VTZW5zaXRpdmUsCi0gICAgVGV4dENhc2VJbnNlbnNpdGl2ZQotfTsK
LQotdHlwZWRlZiBlbnVtIEZpbmREaXJlY3Rpb24gewotICAgIEZpbmREaXJlY3Rpb25Gb3J3YXJk
LAotICAgIEZpbmREaXJlY3Rpb25CYWNrd2FyZAotfTsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgY2xhc3MgQ2hyb21lOwogICAgIGNsYXNzIENocm9tZUNsaWVudDsKICAgICBjbGFzcyBD
b250ZXh0TWVudUNsaWVudDsKICAgICBjbGFzcyBDb250ZXh0TWVudUNvbnRyb2xsZXI7CisgICAg
Y2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgRHJhZ0NsaWVudDsKICAgICBjbGFzcyBEcmFnQ29u
dHJvbGxlcjsKICAgICBjbGFzcyBFZGl0b3JDbGllbnQ7CkBAIC01NywxNSArNDgsMTkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEluc3BlY3RvckNsaWVudDsKICAgICBjbGFzcyBJ
bnNwZWN0b3JDb250cm9sbGVyOwogICAgIGNsYXNzIE5vZGU7CisgICAgY2xhc3MgUGFnZUdyb3Vw
OwogICAgIGNsYXNzIFByb2dyZXNzVHJhY2tlcjsKICAgICBjbGFzcyBTZWxlY3Rpb247CiAgICAg
Y2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKICAgICBjbGFzcyBTZXR0aW5nczsKKyAgICBjbGFz
cyBLVVJMOworCisgICAgZW51bSBUZXh0Q2FzZVNlbnNpdGl2aXR5IHsgVGV4dENhc2VTZW5zaXRp
dmUsIFRleHRDYXNlSW5zZW5zaXRpdmUgfTsKKyAgICBlbnVtIEZpbmREaXJlY3Rpb24geyBGaW5k
RGlyZWN0aW9uRm9yd2FyZCwgRmluZERpcmVjdGlvbkJhY2t3YXJkIH07CiAKICAgICBjbGFzcyBQ
YWdlIDogTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIHZvaWQgc2V0
TmVlZHNSZWFwcGx5U3R5bGVzKCk7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoU2V0PFBhZ2Uq
PiogZnJhbWVOYW1lc3BhY2UoY29uc3QgU3RyaW5nJik7CiAKICAgICAgICAgUGFnZShDaHJvbWVD
bGllbnQqLCBDb250ZXh0TWVudUNsaWVudCosIEVkaXRvckNsaWVudCosIERyYWdDbGllbnQqLCBJ
bnNwZWN0b3JDbGllbnQqKTsKICAgICAgICAgflBhZ2UoKTsKQEAgLTg2LDkgKzgxLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKiwgRnJh
bWVMb2FkVHlwZSk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldEdyb3VwTmFtZShjb25zdCBT
dHJpbmcmKTsKLSAgICAgICAgU3RyaW5nIGdyb3VwTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3Jv
dXBOYW1lOyB9CisgICAgICAgIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9ncm91cE5hbWU7IH0KIAotICAgICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiogZnJhbWVO
YW1lc3BhY2UoKSBjb25zdDsKKyAgICAgICAgUGFnZUdyb3VwJiBncm91cCgpIHsgaWYgKCFtX2dy
b3VwKSBpbml0R3JvdXAoKTsgcmV0dXJuICptX2dyb3VwOyB9CiAKICAgICAgICAgdm9pZCBpbmNy
ZW1lbnRGcmFtZUNvdW50KCkgeyArK21fZnJhbWVDb3VudDsgfQogICAgICAgICB2b2lkIGRlY3Jl
bWVudEZyYW1lQ291bnQoKSB7IC0tbV9mcmFtZUNvdW50OyB9CkBAIC0xMzMsNiArMTI4LDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICAgICBwcml2YXRlOgorICAgICAgICB2b2lk
IGluaXRHcm91cCgpOworCiAgICAgICAgIE93blB0cjxDaHJvbWU+IG1fY2hyb21lOwogICAgICAg
ICBPd25QdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4gbV9kcmFnQ2FyZXRDb250cm9sbGVyOwogICAg
ICAgICBPd25QdHI8RHJhZ0NvbnRyb2xsZXI+IG1fZHJhZ0NvbnRyb2xsZXI7CkBAIC0xNjMsMTEg
KzE2MCwzMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIG11dGFibGUgYm9vbCBtX2Rp
ZExvYWRVc2VyU3R5bGVTaGVldDsKICAgICAgICAgbXV0YWJsZSB0aW1lX3QgbV91c2VyU3R5bGVT
aGVldE1vZGlmaWNhdGlvblRpbWU7CiAKKyAgICAgICAgT3duUHRyPFBhZ2VHcm91cD4gbV9zaW5n
bGVQYWdlR3JvdXA7CisgICAgICAgIFBhZ2VHcm91cCogbV9ncm91cDsKKwogI2lmIFBMQVRGT1JN
KFdJTikgfHwgKFBMQVRGT1JNKFdYKSAmJiBkZWZpbmVkKF9fV1hNU1dfXykpCiAgICAgICAgIHN0
YXRpYyBISU5TVEFOQ0Ugc19pbnN0YW5jZUhhbmRsZTsKICNlbmRpZgogICAgIH07CiAKKyAgICAv
LyBGSVhNRTogR2l2ZSBQYWdlR3JvdXAgaXRzIG93biBoZWFkZXI/CisgICAgY2xhc3MgUGFnZUdy
b3VwIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBhZ2VHcm91cCgpOworICAgICAgICBQYWdlR3Jv
dXAoUGFnZSopOworCisgICAgICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcygpIGNvbnN0
IHsgcmV0dXJuIG1fcGFnZXM7IH0KKyAgICAgICAgdm9pZCBhZGRQYWdlKFBhZ2UqKTsKKyAgICAg
ICAgdm9pZCByZW1vdmVQYWdlKFBhZ2UqKTsKKworICAgICAgICBib29sIGlzTGlua1Zpc2l0ZWQo
RG9jdW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKTsKKyAgICAgICAg
dm9pZCBhZGRWaXNpdGVkTGluayhjb25zdCBLVVJMJik7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBIYXNoU2V0PFBhZ2UqPiBtX3BhZ2VzOworICAgICAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX3Zp
c2l0ZWRMaW5rSGFzaGVzOworICAgICAgICBib29sIG1fdmlzaXRlZExpbmtzUG9wdWxhdGVkOwor
ICAgIH07CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICAgICAKICNlbmRpZiAvLyBQYWdlX2gK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gMzA1OTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0tV
UkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsNiArMjY0LDggQEAgaW5saW5lIGJvb2wgS1VS
TDo6cHJvdG9jb2xJcyhjb25zdCBTdHJpbgogCiBLVVJMOjpLVVJMKCkKICAgICA6IG1faXNWYWxp
ZChmYWxzZSkKKyAgICAsIHBvcnRFbmRQb3MoMCkKKyAgICAsIHBhdGhFbmRQb3MoMCkKIHsKIH0K
IApAQCAtMzIwLDYgKzMyMiw4IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMJiBiYXNlLCBj
b25zdCAKICAgICBpZiAoIWJhc2UubV9pc1ZhbGlkICYmICFiYXNlLmlzRW1wdHkoKSkgewogICAg
ICAgICBtX3N0cmluZyA9IHJlbGF0aXZlOwogICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAg
ICAgICAgcG9ydEVuZFBvcyA9IDA7CisgICAgICAgIHBhdGhFbmRQb3MgPSAwOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0zOTMsNiArMzk3LDggQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0
IEtVUkwmIGJhc2UsIGNvbnN0IAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg
bV9zdHJpbmcgPSByZWxhdGl2ZTsKICAgICAgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBwb3J0RW5kUG9zID0gMDsKKyAgICAgICAgICAgICAgICBwYXRoRW5k
UG9zID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtNTA1LDcgKzUxMSw3IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMJiBiYXNlLCBjb25z
dCAKIAogYm9vbCBLVVJMOjpoYXNQYXRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pc1ZhbGlk
ICYmIHBhdGhFbmRQb3MgIT0gcG9ydEVuZFBvczsKKyAgICByZXR1cm4gcGF0aEVuZFBvcyAhPSBw
b3J0RW5kUG9zOwogfQogCiBTdHJpbmcgS1VSTDo6bGFzdFBhdGhDb21wb25lbnQoKSBjb25zdApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9LVVJMLmgJKHJldmlzaW9uIDMwNTk0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsMTAgQEAgcHVibGljOgogICAgIG9wZXJhdG9y
IGNvbnN0IFN0cmluZyYoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQogICAgIG9wZXJhdG9y
IEtKUzo6VVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9CiAKKyAgICB1bnNpZ25l
ZCBwYXRoU3RhcnQoKSBjb25zdCB7IHJldHVybiBwb3J0RW5kUG9zOyB9CisgICAgdW5zaWduZWQg
cGF0aEVuZCgpIGNvbnN0IHsgcmV0dXJuIHBhdGhFbmRQb3M7IH0KKyAgICB1bnNpZ25lZCBwYXRo
QWZ0ZXJMYXN0U2xhc2goKSBjb25zdCB7IHJldHVybiBwYXRoRW5kUG9zOyB9CisKICNpZiBQTEFU
Rk9STShDRikKICAgICBLVVJMKENGVVJMUmVmKTsKICAgICBDRlVSTFJlZiBjcmVhdGVDRlVSTCgp
IGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwCShyZXZpc2lvbiAzMDU5NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxp
bmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJF
ZGl0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJGVFBEaXJlY3RvcnlE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkdsb2JhbEhpc3RvcnkuaCIKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5o
IgpAQCAtNTgsOCArNTcsNiBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNv
bnN0CiAvKiBDb21wbGV0ZWx5IGVtcHR5IHN0dWJzIChtb3N0bHkgdG8gYWxsb3cgRFJUIHRvIHJ1
bik6ICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCiAKLWJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFyKiwg
dW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KIFBsdWdpblNldCBQbHVnaW5EYXRhYmFzZTo6
Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBQbHVn
aW5TZXQoKTsgfQogVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5Q
YXRocygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0KIGJv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKSBj
b25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViQ29yZUhpc3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJDb3JlSGlzdG9yeS5oCShyZXZpc2lvbiAzMDU5NCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYkNvcmVIaXN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzUgKzEgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi1AcHJvdG9jb2wgV2ViQ29yZUhpc3RvcnlQcm92aWRlciA8TlNPYmpl
Y3Q+Ci0tIChCT09MKWNvbnRhaW5zVVJMOihjb25zdCBVbmlDaGFyKil1bmljb2RlIGxlbmd0aDoo
dW5zaWduZWQpbGVuZ3RoOwotQGVuZAotCi1AaW50ZXJmYWNlIFdlYkNvcmVIaXN0b3J5IDogTlNP
YmplY3QKLQotKyAodm9pZClzZXRIaXN0b3J5UHJvdmlkZXI6KGlkPFdlYkNvcmVIaXN0b3J5UHJv
dmlkZXI+KWg7Ci0rIChpZDxXZWJDb3JlSGlzdG9yeVByb3ZpZGVyPiloaXN0b3J5UHJvdmlkZXI7
Ci0KLUBlbmQKKyNlcnJvcgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUhpc3Rv
cnkubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlSGlzdG9yeS5t
CShyZXZpc2lvbiAzMDU5NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVIaXN0b3J5
Lm0JKHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bXBvcnQgImNvbmZpZy5oIgotCi0jaW1wb3J0ICJXZWJDb3JlSGlzdG9yeS5oIgotCi1AaW1wbGVt
ZW50YXRpb24gV2ViQ29yZUhpc3RvcnkKLQotc3RhdGljIGlkPFdlYkNvcmVIaXN0b3J5UHJvdmlk
ZXI+IF9oaXN0b3J5UHJvdmlkZXIgPSBuaWw7Ci0KLSsgKHZvaWQpc2V0SGlzdG9yeVByb3ZpZGVy
OiAoaWQ8V2ViQ29yZUhpc3RvcnlQcm92aWRlcj4paAotewotICAgIGlmIChfaGlzdG9yeVByb3Zp
ZGVyICE9IGgpewotICAgICAgICBbX2hpc3RvcnlQcm92aWRlciByZWxlYXNlXTsKLSAgICAgICAg
X2hpc3RvcnlQcm92aWRlciA9IFtoIHJldGFpbl07Ci0gICAgfQotfQotCi0rIChpZDxXZWJDb3Jl
SGlzdG9yeVByb3ZpZGVyPiloaXN0b3J5UHJvdmlkZXIKLXsKLSAgICByZXR1cm4gX2hpc3RvcnlQ
cm92aWRlcjsKLX0KLQotQGVuZAorLy8gZGVsZXRlIG1lCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAzMDU5NCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
NyArNDksNiBAQAogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHbG9iYWxIaXN0b3J5
LmgiCiAjaW5jbHVkZSAiSWNvbkxvYWRlci5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5j
bHVkZSAiS1VSTC5oIgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2ViQ29yZUhpc3Rvcnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1dlYkNvcmVIaXN0b3J5LmNw
cAkocmV2aXNpb24gMzA1OTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9XZWJDb3JlSGlzdG9y
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkNvcmVIaXN0b3J5LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RhdGljIFdlYkNvcmVIaXN0b3J5UHJvdmlkZXIqIF9oaXN0b3J5UHJv
dmlkZXIgPSAwOwotCi12b2lkIFdlYkNvcmVIaXN0b3J5OjpzZXRIaXN0b3J5UHJvdmlkZXIoV2Vi
Q29yZUhpc3RvcnlQcm92aWRlciogaCkKLXsKLSAgICBpZiAoX2hpc3RvcnlQcm92aWRlciA9PSBo
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBkZWxldGUgX2hpc3RvcnlQcm92aWRlcjsKLSAgICBf
aGlzdG9yeVByb3ZpZGVyID0gaDsKLX0KLQotV2ViQ29yZUhpc3RvcnlQcm92aWRlciogV2ViQ29y
ZUhpc3Rvcnk6Omhpc3RvcnlQcm92aWRlcigpCi17Ci0gICAgcmV0dXJuIF9oaXN0b3J5UHJvdmlk
ZXI7Ci19Ci0KLX0KKy8vIGRlbGV0ZSBtZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2Vi
Q29yZUhpc3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9XZWJDb3Jl
SGlzdG9yeS5oCShyZXZpc2lvbiAzMDU5NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1dlYkNv
cmVIaXN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYgKzEgQEAKLS8qCi0qIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotKi8KLQotI2lmbmRlZiBXRUJDT1JFX0hJU1RP
UllfSF8KLSNkZWZpbmUgV0VCQ09SRV9ISVNUT1JZX0hfCi0KLSNpbmNsdWRlIDx1bmljb2RlL3Vt
YWNoaW5lLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2ViQ29yZUhpc3RvcnlQ
cm92aWRlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGNvbnRhaW5zVVJMKGNvbnN0IFVD
aGFyKiB1bmljb2RlLCB1bnNpZ25lZCBsZW5ndGgpID0gMDsKLX07Ci0KLWNsYXNzIFdlYkNvcmVI
aXN0b3J5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBzZXRIaXN0b3J5UHJvdmlkZXIoV2Vi
Q29yZUhpc3RvcnlQcm92aWRlciopOwotICAgIHN0YXRpYyBXZWJDb3JlSGlzdG9yeVByb3ZpZGVy
KiBoaXN0b3J5UHJvdmlkZXIoKTsKLX07Ci0KLX0KLQotI2VuZGlmCisjZXJyb3IKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDMwNTk0
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTMsMTAgKzExMyw2IEBAIGJvb2wgV2ViQ29yZTo6Y29va2llc0VuYWJsZWQo
Y29uc3QgRG9jdW0KIHN0YXRpYyBXZWJDb3JlOjpDdXJzb3IgbG9jYWxDdXJzb3I7CiBjb25zdCBX
ZWJDb3JlOjpDdXJzb3ImIFdlYkNvcmU6Om1vdmVDdXJzb3IoKSB7IHJldHVybiBsb2NhbEN1cnNv
cjsgfQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgYm9vbCBoaXN0b3J5Q29udGFpbnMoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KLX0KLQogdm9pZCBXZWJDb3Jl
OjpmaW5kV29yZEJvdW5kYXJ5KFVDaGFyIGNvbnN0KiBzdHIsaW50IGxlbixpbnQgcG9zaXRpb24s
aW50KiBzdGFydCwgaW50KiBlbmQpIHsgbm90SW1wbGVtZW50ZWQoKTsgKnN0YXJ0PXBvc2l0aW9u
OyAqZW5kPXBvc2l0aW9uOyB9CiAKIFBsdWdpblNldCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2lu
c0luUGF0aHMoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBQbHVnaW5TZXQoKTsg
fQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcAkocmV2aXNpb24gMzA1OTQpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcg
KzI0LDcgQEAKICNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIlRleHRCcmVh
a0l0ZXJhdG9yLmgiCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWZkZWYgQlVJTERJTkdfT05fVElH
RVIKICNpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CiAjZW5kaWYKIApAQCAt
NDQsMTcgKzQ0LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0JyZWFrYWJsZVNwYWNlKFVDaGEK
ICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRCcmVha0FmdGVyKFVDaGFyIGNo
KQorc3RhdGljIGlubGluZSBib29sIHNob3VsZEJyZWFrQWZ0ZXIoVUNoYXIgY2hhcmFjdGVyKQog
ewogICAgIC8vIE1hdGNoIFdpbklFJ3MgYnJlYWtpbmcgc3RyYXRlZ3ksIHdoaWNoIGlzIHRvIGFs
d2F5cyBhbGxvdyBicmVha3MgYWZ0ZXIgaHlwaGVucyBhbmQgcXVlc3Rpb24gbWFya3MuCi0gICAg
Ly8gRklYTUU6IGl0IGFwcGVhcnMgdGhhdCBJRSBiZWhhdmlvciBpcyBtb3JlIGNvbXBsZXgsIHNl
ZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NzU+LgotICAgIHN3
aXRjaCAoY2gpIHsKKyAgICAvLyBGSVhNRTogSXQgYXBwZWFycyB0aGF0IElFIGJlaGF2aW9yIGlz
IG1vcmUgY29tcGxleDsgc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzQ3NT4uCisgICAgc3dpdGNoIChjaGFyYWN0ZXIpIHsKICAgICAgICAgY2FzZSAnLSc6CiAg
ICAgICAgIGNhc2UgJz8nOgogICAgICAgICBjYXNlIHNvZnRIeXBoZW46Ci0gICAgICAgIC8vIEZJ
WE1FOiBjYXNlcyBmb3IgaWRlb2dyYXBoaWNDb21tYSBhbmQgaWRlb2dyYXBoaWNGdWxsU3RvcCBh
cmUgYSB3b3JrYXJvdW5kIGZvciBhbiBpc3N1ZSBpbiBVbmljb2RlIDUuMAotICAgICAgICAvLyB3
aGljaCBpcyBsaWtlbHkgdG8gYmUgcmVzb2x2ZWQgaW4gVW5pY29kZSA1LjEgPGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDExPi4KLSAgICAgICAgLy8gV2UgbWF5IHdh
bnQgdG8gcmVtb3ZlIG9yIGNvbmRpdGlvbmFsaXplIHRoaXMgd29ya2Fyb3VuZCBhdCBzb21lIHBv
aW50LgorICAgICAgICAvLyBGSVhNRTogVGhlc2UgY2FzZXMgZm9yIGlkZW9ncmFwaGljQ29tbWEg
YW5kIGlkZW9ncmFwaGljRnVsbFN0b3AgYXJlIGEgd29ya2Fyb3VuZCBmb3IgYW4gaXNzdWUgaW4K
KyAgICAgICAgLy8gVW5pY29kZSA1LjAgd2hpY2ggaXMgbGlrZWx5IHRvIGJlIHJlc29sdmVkIGlu
IFVuaWNvZGUgNS4xLiBJZiB0aGUgaXNzdWUgaXMgcmVzb2x2ZWQgaW4gNS4xIGFuZCB0aGVuCisg
ICAgICAgIC8vIGluIElDVSBhbmQgb3RoZXIgdW5kZXJseWluZyBsaWJyYXJpZXMsIHRoZW4gd2Ug
bWF5IHdhbnQgdG8gcmVtb3ZlIG9yIGNvbmRpdGlvbmFsaXplIHRoaXMgd29ya2Fyb3VuZAorICAg
ICAgICAvLyBhdCBzb21lIHBvaW50OyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NDExPi4KICAgICAgICAgY2FzZSBpZGVvZ3JhcGhpY0NvbW1hOgogICAgICAg
ICBjYXNlIGlkZW9ncmFwaGljRnVsbFN0b3A6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTYzLDkgKzY0LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZEJyZWFrQWZ0ZXIoVUNoYQog
ICAgIH0KIH0KIAotc3RhdGljIGlubGluZSBib29sIG5lZWRzTGluZUJyZWFrSXRlcmF0b3IoVUNo
YXIgY2gpCitzdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNMaW5lQnJlYWtJdGVyYXRvcihVQ2hhciBj
aGFyYWN0ZXIpCiB7Ci0gICAgcmV0dXJuIGNoID4gMHg3RiAmJiBjaCAhPSBub0JyZWFrU3BhY2U7
CisgICAgcmV0dXJuIGNoYXJhY3RlciA+IDB4N0YgJiYgY2hhcmFjdGVyICE9IG5vQnJlYWtTcGFj
ZTsKIH0KIAogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZUVtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDMwNTk0KQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VFbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE3LDYgKzExNyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoRnJhbWUqKSB7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25z
dCBTdHJpbmcmKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygp
IHsgfQogfTsKIAogY2xhc3MgU1ZHRW1wdHlGcmFtZUxvYWRlckNsaWVudCA6IHB1YmxpYyBGcmFt
ZUxvYWRlckNsaWVudCB7CkluZGV4OiBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQkocmV2aXNpb24g
MzA1OTQpCisrKyBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNiw3ICszNiw2IEBACiAjaW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgog
I2ltcG9ydCA8Rm91bmRhdGlvbi9OU0Vycm9yLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
c3NlcnRpb25zLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVIaXN0b3J5Lmg+CiAjaW1wb3J0
IDx3dGYvVmVjdG9yLmg+CiAKIE5TU3RyaW5nICpXZWJIaXN0b3J5SXRlbXNBZGRlZE5vdGlmaWNh
dGlvbiA9IEAiV2ViSGlzdG9yeUl0ZW1zQWRkZWROb3RpZmljYXRpb24iOwpAQCAtNTg5LDk1ICs1
ODgsNiBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2YWxGb3JCZWdpbm5pCiAKIEBlbmQK
IAotQGludGVyZmFjZSBfV2ViQ29yZUhpc3RvcnlQcm92aWRlciA6IE5TT2JqZWN0ICA8V2ViQ29y
ZUhpc3RvcnlQcm92aWRlcj4gCi17Ci0gICAgV2ViSGlzdG9yeSAqaGlzdG9yeTsKLX0KLS0gaW5p
dFdpdGhIaXN0b3J5OiAoV2ViSGlzdG9yeSAqKWg7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBf
V2ViQ29yZUhpc3RvcnlQcm92aWRlcgotLSBpbml0V2l0aEhpc3Rvcnk6IChXZWJIaXN0b3J5ICop
aAotewotICAgIGhpc3RvcnkgPSBbaCByZXRhaW5dOwotICAgIHJldHVybiBzZWxmOwotfQotCi1z
dGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hMZXR0ZXIoY2hhciBjLCBjaGFyIGxvd2VyY2FzZUxldHRl
cikKLXsKLSAgICByZXR1cm4gKGMgfCAweDIwKSA9PSBsb3dlcmNhc2VMZXR0ZXI7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBtYXRjaFVuaWNvZGVMZXR0ZXIoVW5pQ2hhciBjLCBVbmlDaGFyIGxv
d2VyY2FzZUxldHRlcikKLXsKLSAgICByZXR1cm4gKGMgfCAweDIwKSA9PSBsb3dlcmNhc2VMZXR0
ZXI7Ci19Ci0KLSNkZWZpbmUgVU5JQ09ERV9CVUZGRVJfU0laRSAxMDI0Ci0KLS0gKEJPT0wpY29u
dGFpbnNVUkw6KGNvbnN0IFVuaUNoYXIgKil1bmljb2RlIGxlbmd0aDoodW5zaWduZWQpbGVuZ3Ro
Ci17Ci0gICAgY29uc3QgVW5pQ2hhciAqdW5pY29kZVN0ciA9IHVuaWNvZGU7Ci0gICAgVW5pQ2hh
ciBzdGF0aWNTdHJCdWZmZXJbVU5JQ09ERV9CVUZGRVJfU0laRV07Ci0gICAgVW5pQ2hhciAqc3Ry
QnVmZmVyID0gTlVMTDsKLSAgICBCT09MIG5lZWRUb0FkZFNsYXNoID0gRkFMU0U7Ci0KLSAgICBp
ZiAobGVuZ3RoID49IDYgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbMF0s
ICdoJykgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbMV0sICd0JykgJiYK
LSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbMl0sICd0JykgJiYKLSAgICAgICAg
bWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbM10sICdwJykgJiYKLSAgICAgICAgKHVuaWNvZGVb
NF0gPT0gJzonIAotICAgICAgICAgfHwgKG1hdGNoVW5pY29kZUxldHRlcih1bmljb2RlWzRdLCAn
cycpICYmIHVuaWNvZGVbNV0gPT0gJzonKSkpIHsKLQotICAgICAgICB1bnNpZ25lZCBwb3MgPSB1
bmljb2RlWzRdID09ICc6JyA/IDUgOiA2OwotCi0gICAgICAgIC8vIHNraXAgcG9zc2libGUgaW5p
dGlhbCB0d28gc2xhc2hlcwotICAgICAgICBpZiAocG9zICsgMSA8IGxlbmd0aCAmJiB1bmljb2Rl
W3Bvc10gPT0gJy8nICYmIHVuaWNvZGVbcG9zICsgMV0gPT0gJy8nKSB7Ci0gICAgICAgICAgICBw
b3MgKz0gMjsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlIChwb3MgPCBsZW5ndGggJiYgdW5p
Y29kZVtwb3NdICE9ICcvJykgewotICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAocG9zID09IGxlbmd0aCkgewotICAgICAgICAgICAgbmVlZFRvQWRkU2xhc2ggPSBU
UlVFOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG5lZWRUb0FkZFNsYXNoKSB7Ci0gICAg
ICAgIGlmIChsZW5ndGggKyAxIDw9IFVOSUNPREVfQlVGRkVSX1NJWkUpIHsKLSAgICAgICAgICAg
IHN0ckJ1ZmZlciA9IHN0YXRpY1N0ckJ1ZmZlcjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHN0ckJ1ZmZlciA9IChVbmlDaGFyKiltYWxsb2Moc2l6ZW9mKFVuaUNoYXIpICogKGxlbmd0
aCArIDEpKTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoc3RyQnVmZmVyLCB1bmljb2RlLCAy
ICogbGVuZ3RoKTsKLSAgICAgICAgc3RyQnVmZmVyW2xlbmd0aF0gPSAnLyc7Ci0gICAgICAgIGxl
bmd0aCsrOwotCi0gICAgICAgIHVuaWNvZGVTdHIgPSBzdHJCdWZmZXI7Ci0gICAgfQotCi0gICAg
Q0ZTdHJpbmdSZWYgc3RyID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVyc05vQ29weShOVUxM
LCB1bmljb2RlU3RyLCBsZW5ndGgsIGtDRkFsbG9jYXRvck51bGwpOwotICAgIEJPT0wgcmVzdWx0
ID0gW2hpc3RvcnkgY29udGFpbnNJdGVtRm9yVVJMU3RyaW5nOihpZClzdHJdOwotICAgIENGUmVs
ZWFzZShzdHIpOwotCi0gICAgaWYgKHN0ckJ1ZmZlciAhPSBzdGF0aWNTdHJCdWZmZXIpIHsKLSAg
ICAgICAgZnJlZShzdHJCdWZmZXIpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtoaXN0b3J5IHJlbGVhc2VdOwotICAgIFtzdXBlciBk
ZWFsbG9jXTsKLX0KLQotQGVuZAotCiBAaW1wbGVtZW50YXRpb24gV2ViSGlzdG9yeQogCiArIChX
ZWJIaXN0b3J5ICopb3B0aW9uYWxTaGFyZWRIaXN0b3J5CkBAIC02ODUsMTMgKzU5NSwxMSBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hVbmljb2RlTGV0dGVyKFVuCiAgICAgcmV0dXJuIF9zaGFy
ZWRIaXN0b3J5OwogfQogCi0KLSsgKHZvaWQpc2V0T3B0aW9uYWxTaGFyZWRIaXN0b3J5OiAoV2Vi
SGlzdG9yeSAqKWhpc3RvcnkKKysgKHZvaWQpc2V0T3B0aW9uYWxTaGFyZWRIaXN0b3J5OihXZWJI
aXN0b3J5ICopaGlzdG9yeQogewotICAgIC8vIEZJWE1FLiAgTmVlZCB0byB0aGluayBhYm91dCBt
dWx0aXBsZSBpbnN0YW5jZXMgb2YgV2ViSGlzdG9yeSBwZXIgYXBwbGljYXRpb24KKyAgICAvLyBG
SVhNRTogTmVlZCB0byB0aGluayBhYm91dCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgV2ViSGlzdG9y
eSBwZXIgYXBwbGljYXRpb24KICAgICAvLyBhbmQgY29ycmVjdCBzeW5jaHJvbml6YXRpb24gb2Yg
aGlzdG9yeSBmaWxlIGJldHdlZW4gYXBwbGljYXRpb25zLgotICAgIFtXZWJDb3JlSGlzdG9yeSBz
ZXRIaXN0b3J5UHJvdmlkZXI6IFtbW19XZWJDb3JlSGlzdG9yeVByb3ZpZGVyIGFsbG9jXSBpbml0
V2l0aEhpc3Rvcnk6IGhpc3RvcnldIGF1dG9yZWxlYXNlXV07Ci0gICAgaWYgKF9zaGFyZWRIaXN0
b3J5ICE9IGhpc3RvcnkpeworICAgIGlmIChfc2hhcmVkSGlzdG9yeSAhPSBoaXN0b3J5KSB7CiAg
ICAgICAgIFtfc2hhcmVkSGlzdG9yeSByZWxlYXNlXTsKICAgICAgICAgX3NoYXJlZEhpc3Rvcnkg
PSBbaGlzdG9yeSByZXRhaW5dOwogICAgIH0KQEAgLTY5OSwxMCArNjA3LDEwIEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBtYXRjaFVuaWNvZGVMZXR0ZXIoVW4KIAogLSAoaWQpaW5pdAogewotICAgIGlm
ICgoc2VsZiA9IFtzdXBlciBpbml0XSkgIT0gbmlsKSB7Ci0gICAgICAgIF9oaXN0b3J5UHJpdmF0
ZSA9IFtbV2ViSGlzdG9yeVByaXZhdGUgYWxsb2NdIGluaXRdOwotICAgIH0KLQorICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IF9oaXN0b3J5UHJpdmF0ZSA9IFtbV2ViSGlzdG9yeVByaXZhdGUgYWxsb2NdIGluaXRdOwogICAg
IHJldHVybiBzZWxmOwogfQogCkBAIC03OTAsMTIgKzY5OCwxMiBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgbWF0Y2hVbmljb2RlTGV0dGVyKFVuCiAKICNwcmFnbWEgbWFyayBVUkwgTUFUQ0hJTkcKIAot
LSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6IChOU1N0cmluZyAqKVVSTFN0cmluZwor
LSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5nICopVVJMU3RyaW5nCiB7
CiAgICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUgY29udGFpbnNJdGVtRm9yVVJMU3RyaW5nOiBV
UkxTdHJpbmddOwogfQogCi0tIChCT09MKWNvbnRhaW5zVVJMOiAoTlNVUkwgKilVUkwKKy0gKEJP
T0wpY29udGFpbnNVUkw6KE5TVVJMICopVVJMCiB7CiAgICAgcmV0dXJuIFtfaGlzdG9yeVByaXZh
dGUgY29udGFpbnNVUkw6IFVSTF07CiB9CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDMwNTk0KQorKysgV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEw
Miw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEo
V2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGRhdGFiYXNlTmFtZSk7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVWaXNpdGVkTGlua3MoKTsKKwogcHJpdmF0ZToKICAg
ICBXZWJWaWV3ICptX3dlYlZpZXc7CiB9OwpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDMwNTk0KQorKysgV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyNiwz
ICs0MjYsNiBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1CiAgICAg
W3dlYk9yaWdpbiByZWxlYXNlXTsKIH0KICAgICAKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpwb3B1
bGF0ZVZpc2l0ZWRMaW5rcygpCit7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19477</attachid>
            <date>2008-03-01 19:53:09 -0800</date>
            <delta_ts>2008-03-04 17:29:45 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>VisitedPatch.txt</filename>
            <type>text/plain</type>
            <size>120041</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDMwNjk0KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC03NDcsMyArNzQ3LDYgQEAgX3drU2V0VXBGb250Q2FjaGUK
IF93a1NpZ25hbENGUmVhZFN0cmVhbUVuZAogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRXJyb3IKIF93
a1NpZ25hbENGUmVhZFN0cmVhbUhhc0J5dGVzCitfX1pON1dlYkNvcmU0UGFnZTlpbml0R3JvdXBF
dgorX19aTjdXZWJDb3JlOVBhZ2VHcm91cDE0YWRkVmlzaXRlZExpbmtFUEt0bQorX19aTjdXZWJD
b3JlOVBhZ2VHcm91cDIxcmVtb3ZlQWxsVmlzaXRlZExpbmtzRXYKSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzMDY5NCkKKysrIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDIsMTQgKzI0MiwxMiBAQAogCQkxQUU4MkZFRDBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1
bHRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
RTgyRkVCMENBQjA3RUUwMDIyMzdBRSAvKiBKU1NRTFJlc3VsdFNldC5oICovOyB9OwogCQkxQUU4
MzA0NDBDQUIwRUQxMDAyMjM3QUUgLyogSlNEYXRhYmFzZUN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUU4MzA0MjBDQUIwRUQxMDAyMjM3
QUUgLyogSlNEYXRhYmFzZUN1c3RvbS5jcHAgKi87IH07CiAJCTFBRjMyNjQ2MEQ3OEI1NTMwMDY4
RjBDNCAvKiBBWE9iamVjdENhY2hlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFGMzI2NDAwRDc4QjU1MzAwNjhGMEM0IC8qIEFYT2JqZWN0Q2Fj
aGVNYWMubW0gKi87IH07Ci0JCTFBRjMyNjQ3MEQ3OEI1NTMwMDY4RjBDNCAvKiBHbG9iYWxIaXN0
b3J5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFGMzI2NDEwRDc4QjU1MzAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnlNYWMubW0gKi87IH07CiAJ
CTFBRjMyNjQ4MEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlQVhPYmplY3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjMyNjQyMEQ3OEI1NTMwMDY4
RjBDNCAvKiBXZWJDb3JlQVhPYmplY3QuaCAqLzsgfTsKIAkJMUFGMzI2NDkwRDc4QjU1MzAwNjhG
MEM0IC8qIFdlYkNvcmVBWE9iamVjdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBRjMyNjQzMEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlQVhPYmpl
Y3QubW0gKi87IH07CiAJCTFBRjMyNjRBMEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlU2NyaXB0
RGVidWdnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBRjMyNjQ0MEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQUYzMjY0QjBE
NzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGMzI2NDUwRDc4QjU1MzAwNjhGMEM0
IC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbSAqLzsgfTsKIAkJMUFGMzI2NzgwRDc4Qjk0NDAw
NjhGMEM0IC8qIEFYT2JqZWN0Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBRjMyNjc2MEQ3OEI5NDQwMDY4RjBDNCAvKiBBWE9iamVjdENhY2hl
LmggKi87IH07CiAJCTFBRjMyNjc5MEQ3OEI5NDQwMDY4RjBDNCAvKiBFZGl0b3JDbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjMyNjc3MEQ3
OEI5NDQwMDY4RjBDNCAvKiBFZGl0b3JDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxQUYzMjY3QjBENzhCOTRFMDA2OEYwQzQgLyogR2xv
YmFsSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFGMzI2N0EwRDc4Qjk0RTAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnkuaCAqLzsgfTsKIAkJ
MUFGRTExN0QwQ0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGRTExN0IwQ0JGRkIz
NjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovOyB9OwogCQkxQUZFMTE3RTBD
QkZGQjM2MDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGRTExN0MwQ0JGRkIzNjAwMzAxN0ZBIC8q
IFNRTFJlc3VsdFNldFJvd0xpc3QuaCAqLzsgfTsKIAkJMUFGRTExOTkwQ0JGRkNDNDAwMzAxN0ZB
IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUZFMTE5NzBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1
bHRTZXRSb3dMaXN0LmNwcCAqLzsgfTsKQEAgLTE0MzcsNiArMTQzNSw4IEBACiAJCTg1RkYzMTVB
MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZGMzE1ODBBQUZCRkNCMDAzNzRGMzggLyog
RE9NS2V5Ym9hcmRFdmVudC5oICovOyB9OwogCQk4NUZGMzE1QjBBQUZCRkNCMDAzNzRGMzggLyog
RE9NS2V5Ym9hcmRFdmVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1t
ICovOyB9OwogCQk5MjkyNjQ3NzBCNjFGQzcyMDBCNDFEMzQgLyogSlNEb2N1bWVudEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MjkyNjQ3
NjBCNjFGQzcyMDBCNDFEMzQgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgKi87IH07CisJCTkzMDJC
MEJEMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBh
Z2VHcm91cC5jcHAgKi87IH07CisJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3Jv
dXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJC
MEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyog
VGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
MDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMDcwNUQ4MDlFMEM5QjcwMEIxN0ZFNCAvKiBK
U0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTMwNzA1RDcwOUUwQzlCNzAwQjE3RkU0IC8qIEpTQ291bnRlci5jcHAgKi87IH07CiAJCTkz
MDcwNURBMDlFMEM5QkYwMEIxN0ZFNCAvKiBKU0NvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDcwNUQ5MDlFMEM5QkYwMEIxN0ZFNCAvKiBK
U0NvdW50ZXIuaCAqLzsgfTsKQEAgLTE2NDksNyArMTY0OSw2IEBACiAJCTkzRjE5OTlEMDgyNDVF
NTkwMDFFOUFCQyAvKiBEZXByZWNhdGVkVmFsdWVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODZDMjAyREUzQjg2MDFFQTQxMjIgLyogRGVw
cmVjYXRlZFZhbHVlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTkzRjE5OTlFMDgyNDVFNTkwMDFFOUFCQyAvKiBEZXByZWNhdGVkVmFsdWVM
aXN0SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjU4Nzg1M0IwMkRFMzc1OTAxRUE0MTIyIC8qIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5QTgw
ODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVGcmFtZVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NTRDMDJERTM3NTkwMUVBNDEyMiAvKiBX
ZWJDb3JlRnJhbWVWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJOTNGMTk5QTkwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVIaXN0b3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTUxN0RDMjAz
MUFCNTYzMDFBODAxODAgLyogV2ViQ29yZUhpc3RvcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOTlCMzA4MjQ1RTU5MDAxRTlBQkMgLyog
V2ViQ29yZVZpZXdGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTg3ODU1NDAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZVZpZXdGYWN0b3J5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNG
MTk5QjgwODI0NUU1OTAwMUU5QUJDIC8qIFNjcm9sbEJhci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNj
cm9sbEJhci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTkzRjE5OUJCMDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFOTgzRDk1MDUy
QTJFMEEwMDg5MkQ4NSAvKiBXZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY3Myw3ICsxNjcyLDYgQEAKIAkJ
OTNGMTlBOUQwODI0NUU1OTAwMUU5QUJDIC8qIFRleHRSZXNvdXJjZURlY29kZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNzgwMkRFNDNE
NzAxODYzNUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIuY3BwICovOyB9OwogCQk5M0YxOUFCOTA4
MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDMwMkRFNDQ3NjAxODYzNUNBIC8qIFJhbmdlLmNwcCAq
LzsgfTsKIAkJOTNGMTlBQkMwODI0NUU1OTAwMUU5QUJDIC8qIFhNTFRva2VuaXplci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwOTAyREU0
NDc2MDE4NjM1Q0EgLyogWE1MVG9rZW5pemVyLmNwcCAqLzsgfTsKLQkJOTNGMTlBQzgwODI0NUU1
OTAwMUU5QUJDIC8qIFdlYkNvcmVIaXN0b3J5Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNTUxN0RDMzAzMUFCNTYzMDFBODAxODAgLyogV2ViQ29yZUhp
c3RvcnkubSAqLzsgfTsKIAkJOTNGMTlBRDUwODI0NUU1OTAwMUU5QUJDIC8qIFJlbmRlclRyZWVB
c1RleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTM5NTVBNDIwM0Q3MjkzMjAwODYzNUNFIC8qIFJlbmRlclRyZWVBc1RleHQuY3BwICovOyB9Owog
CQk5M0YxOUFEQzA4MjQ1RTU5MDAxRTlBQkMgLyogUGxhdGZvcm1TY3JvbGxCYXJNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdCMkFGOTA0NTA4
MjQxMDBBODAwMEYgLyogUGxhdGZvcm1TY3JvbGxCYXJNYWMubW0gKi87IH07CiAJCTkzRjE5QUUx
MDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUY4MDY5NzA1NEQ5Rjg2MDA4QkY3NzYgLyog
QmxvY2tFeGNlcHRpb25zLm1tICovOyB9OwpAQCAtNDUyNCwxNCArNDUyMiwxMiBAQAogCQkxQUU4
MkZFQjBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNTUUxSZXN1bHRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUFFODMwNDIwQ0FCMEVEMTAwMjIzN0FFIC8qIEpTRGF0YWJhc2VDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhYmFzZUN1c3RvbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRjMyNjQwMEQ3OEI1NTMwMDY4RjBD
NCAvKiBBWE9iamVjdENhY2hlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gQVhPYmplY3RDYWNoZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMUFGMzI2NDEwRDc4QjU1MzAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnlNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHbG9iYWxIaXN0b3J5TWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUYzMjY0MjBENzhCNTUzMDA2OEYwQzQgLyog
V2ViQ29yZUFYT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNv
cmVBWE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUYzMjY0MzBENzhC
NTUzMDA2OEYwQzQgLyogV2ViQ29yZUFYT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZUFYT2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQUYzMjY0NDBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZVNjcmlwdERlYnVn
Z2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVTY3JpcHREZWJ1
Z2dlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUYzMjY0NTBENzhCNTUzMDA2
OEYwQzQgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQUYzMjY3NjBENzhCOTQ0MDA2OEYwQzQgLyogQVhPYmplY3RDYWNo
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBWE9iamVjdENhY2hlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRjMyNjc3MEQ3OEI5NDQwMDY4RjBDNCAvKiBF
ZGl0b3JDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdG9yQ2xp
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRjMyNjdBMEQ3OEI5NEUwMDY4
RjBDNCAvKiBHbG9iYWxIaXN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdsb2JhbEhpc3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGRTExN0Iw
Q0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMUmVzdWx0U2V0Um93TGlzdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRkUxMTdDMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1
bHRTZXRSb3dMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTFJlc3Vs
dFNldFJvd0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGRTExOEMwQ0JG
RkM0RTAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFNRTFJlc3VsdFNldFJvd0xpc3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTY2Myw2ICs1NjU5LDggQEAKIAkJODVGRjMxNTgwQUFGQkZDQjAwMzc0RjM4IC8qIERP
TUtleWJvYXJkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUtl
eWJvYXJkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVGRjMxNTkwQUFG
QkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVudC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTI5MjY0NzYwQjYxRkM3MjAwQjQxRDM0IC8qIEpTRG9jdW1lbnRDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9jdW1lbnRD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzAyQjBCQzBENzlGODI5
MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMDJC
MEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGFnZUdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
MDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzA3MDU5
MDA5RTBDNzU4MDBCMTdGRTQgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBwYXRoID0gQ1NTUHJpbWl0aXZlVmFsdWUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzA3MDVDNzA5RTBDOTVGMDBCMTdGRTQgLyogQ291bnRlci5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gQ291bnRlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC03OTA5LDggKzc5MDcsNiBAQAogCQlGNTIzRDMwNDAyREU0NDc2MDE4NjM1Q0EgLyogUmFu
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CiAJCUY1MjNEMzA5MDJERTQ0NzYwMTg2MzVDQSAvKiBYTUxUb2tlbml6ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1M
VG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CiAJCUY1MjNEMzBBMDJERTQ0NzYwMTg2MzVDQSAvKiBYTUxUb2tlbml6ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1M
VG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwotCQlGNTUxN0RDMjAzMUFCNTYzMDFBODAxODAgLyogV2ViQ29yZUhpc3Rvcnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVIaXN0b3J5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUY1NTE3REMzMDMxQUI1NjMwMUE4MDE4MCAvKiBX
ZWJDb3JlSGlzdG9yeS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2Vi
Q29yZUhpc3RvcnkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjU4Nzg0RjAwMkRF
Mzc1OTAxRUE0MTIyIC8qIEN1cnNvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEN1cnNvck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NTE1MDJE
RTM3NTkwMUVBNDEyMiAvKiBEZXByZWNhdGVkUHRyTGlzdEltcGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwcmVjYXRlZFB0ckxpc3RJbXBs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwogCQlGNTg3ODUxNjAyREUzNzU5MDFFQTQxMjIgLyogRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERlcHJlY2F0ZWRQdHJMaXN0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtNzk3MSw3ICs3OTY3LDYgQEAKIAkJCQk5M0Yx
OUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlzdCAqLywKIAkJCQlGNThFRjU4RTAyREZE
RkI3MDE4NjM1Q0EgLyogV2ViQ29yZS5iYXNlLmV4cCAqLywKIAkJCQlCQzFBMzc5MDA5N0M2Rjk3
MDAxOUYzRDggLyogYmluZGluZ3MgKi8sCi0JCQkJNjVCRjAyMUYwOTc0ODBFRjAwQzQzMTk2IC8q
IGJyaWRnZSAqLywKIAkJCQlGNTIzRDE4NDAyREU0MkU4MDE4NjM1Q0EgLyogY3NzICovLAogCQkJ
CUY1MjNEMzI0MDJERTQ0NzgwMTg2MzVDQSAvKiBkb20gKi8sCiAJCQkJOTMzMDlEODYwOTlFNjQ5
MTAwNTZFNTgxIC8qIGVkaXRpbmcgKi8sCkBAIC04MzU3LDggKzgzNTIsNiBAQAogCQkJCTg0QjJC
MjRGMDU2QkYxNUYwMEQyQjc3MSAvKiBTU0xLZXlHZW5lcmF0b3JNYWMubW0gKi8sCiAJCQkJNjU4
MkExNTUwOTk5OUQ2RDAwQkVFQjZEIC8qIFN5c3RlbVRpbWVNYWMuY3BwICovLAogCQkJCTUxREY2
RDdGMEI5MkExOEUwMEMyREM4NSAvKiBUaHJlYWRDaGVjay5tbSAqLywKLQkJCQlGNTUxN0RDMjAz
MUFCNTYzMDFBODAxODAgLyogV2ViQ29yZUhpc3RvcnkuaCAqLywKLQkJCQlGNTUxN0RDMzAzMUFC
NTYzMDFBODAxODAgLyogV2ViQ29yZUhpc3RvcnkubSAqLywKIAkJCQk4NEIyQjFGNzA1NkJFRjNB
MDBEMkI3NzEgLyogV2ViQ29yZUtleUdlbmVyYXRvci5oICovLAogCQkJCTg0QjJCMUY4MDU2QkVG
M0EwMEQyQjc3MSAvKiBXZWJDb3JlS2V5R2VuZXJhdG9yLm0gKi8sCiAJCQkJOTM0RDlCQTYwQjhD
MTE3NTAwN0I0MkE5IC8qIFdlYkNvcmVOU1N0cmluZ0V4dHJhcy5oICovLApAQCAtODQyNCw3ICs4
NDE3LDYgQEAKIAkJCQk2NUEyMTQ4MzA5N0EzRjUzMDBCOTA1MEEgLyogRnJhbWVUcmVlLmggKi8s
CiAJCQkJNjVDQkZFRjcwOTc0RjYwNzAwMURBQzI1IC8qIEZyYW1lVmlldy5jcHAgKi8sCiAJCQkJ
NjVDQkZFRjgwOTc0RjYwNzAwMURBQzI1IC8qIEZyYW1lVmlldy5oICovLAotCQkJCTFBRjMyNjdB
MEQ3OEI5NEUwMDY4RjBDNCAvKiBHbG9iYWxIaXN0b3J5LmggKi8sCiAJCQkJQkM5NEQxNTAwQzI3
NUM4QjAwNkJDNjE3IC8qIEhpc3RvcnkuY3BwICovLAogCQkJCUJDOTREMTUxMEMyNzVDOEIwMDZC
QzYxNyAvKiBIaXN0b3J5LmggKi8sCiAJCQkJQkM5NEQxNTIwQzI3NUM4QjAwNkJDNjE3IC8qIEhp
c3RvcnkuaWRsICovLApAQCAtODQzNSw2ICs4NDI3LDggQEAKIAkJCQk5MzVDNDc2MjA5QUM0Q0U2
MDBBNkFBQjQgLyogTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oICovLAogCQkJCTY1RkVB
ODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLywKIAkJCQk2NUEyMTQ2NzA5N0EzMjkx
MDBCOTA1MEEgLyogUGFnZS5oICovLAorCQkJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQ
YWdlR3JvdXAuY3BwICovLAorCQkJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3Jv
dXAuaCAqLywKIAkJCQk2NUQxQzFDOTA5OTMyQjIyMDAwQ0IzMjQgLyogUGx1Z2luLmggKi8sCiAJ
CQkJQkNFQzAxQkEwQzI3NERBQzAwOUY0RUM5IC8qIFNjcmVlbi5jcHAgKi8sCiAJCQkJQkNFQzAx
QkIwQzI3NERBQzAwOUY0RUM5IC8qIFNjcmVlbi5oICovLApAQCAtODQ0OSwxNSArODQ0Myw2IEBA
CiAJCQl0YWJXaWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07Ci0JCTY1QkYwMjFGMDk3
NDgwRUYwMEM0MzE5NiAvKiBicmlkZ2UgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJKTsKLQkJCXBhdGggPSBicmlkZ2U7Ci0JCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwotCQkJdGFiV2lkdGggPSA0OwotCQkJdXNlc1RhYnMgPSAwOwotCQl9OwogCQk4NTA2
NTcwNDBBQUI0NzZDMDAyRDE1QzAgLyogU3R5bGVTaGVldHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtOTc0Myw3ICs5NzI4LDYgQEAKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMUFGMzI2NDAwRDc4QjU1MzAwNjhGMEM0IC8q
IEFYT2JqZWN0Q2FjaGVNYWMubW0gKi8sCi0JCQkJMUFGMzI2NDEwRDc4QjU1MzAwNjhGMEM0IC8q
IEdsb2JhbEhpc3RvcnlNYWMubW0gKi8sCiAJCQkJMUFGMzI2NDIwRDc4QjU1MzAwNjhGMEM0IC8q
IFdlYkNvcmVBWE9iamVjdC5oICovLAogCQkJCTFBRjMyNjQzMEQ3OEI1NTMwMDY4RjBDNCAvKiBX
ZWJDb3JlQVhPYmplY3QubW0gKi8sCiAJCQkJMUFGMzI2NDQwRDc4QjU1MzAwNjhGMEM0IC8qIFdl
YkNvcmVTY3JpcHREZWJ1Z2dlci5oICovLApAQCAtMTQxMTMsNyArMTQwOTcsNiBAQAogCQkJCUIy
NTU5OTZGMEQwMEQ4QkEwMEJCODI1QyAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTY1NEVDNjExMDk3Nzc4RjUwMERBQjUyQyAvKiBXZWJDb3JlRnJhbWVCcmlk
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUE4MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJD
b3JlRnJhbWVWaWV3LmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOTlBOTA4MjQ1RTU5MDAxRTlB
QkMgLyogV2ViQ29yZUhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUMyMDgyNDVF
NTkwMDFFOUFCQyAvKiBXZWJDb3JlS2V5R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0YxOTlCQjA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZUtleWJvYXJkVUlNb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzREOUJBNzBCOEMxMTc1MDA3QjQyQTkgLyogV2ViQ29yZU5TU3RyaW5n
RXh0cmFzLmggaW4gSGVhZGVycyAqLywKQEAgLTE0MjM4LDcgKzE0MjIxLDcgQEAKIAkJCQkxQUYz
MjY0ODBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZUFYT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUYzMjY0QTBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUYzMjY3ODBENzhCOTQ0MDA2OEYwQzQgLyogQVhPYmplY3RD
YWNoZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFGMzI2N0IwRDc4Qjk0RTAwNjhGMEM0IC8qIEds
b2JhbEhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4
MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTU3MjgsNyArMTU3MTEsNiBAQAog
CQkJCUIyNTU5OTZEMEQwMEQ4QkEwMEJCODI1QyAvKiBXS1Nwb3RMaWdodEZpbHRlci5tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjI1NTk5NzAwRDAwRDhCQTAwQkI4MjVDIC8qIFdLVGFibGVUcmFuc2Zl
ckZpbHRlci5tIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU0RUM2MTIwOTc3NzhGNTAwREFCNTJDIC8q
IFdlYkNvcmVGcmFtZUJyaWRnZS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTkzRjE5QUM4MDgyNDVF
NTkwMDFFOUFCQyAvKiBXZWJDb3JlSGlzdG9yeS5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlB
RTUwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IubSBpbiBTb3VyY2VzICov
LAogCQkJCTkzNEQ5QkE1MEI4QzExNkIwMDdCNDJBOSAvKiBXZWJDb3JlTlNTdHJpbmdFeHRyYXMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlERDA1RkUwRTBCOEJBM0M2MDA5QUNERkUgLyogV2ViQ29y
ZU9iakNFeHRyYXMuYyBpbiBTb3VyY2VzICovLApAQCAtMTU4MzEsOSArMTU4MTMsOSBAQAogCQkJ
CUE3Nzk3OTI4MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzY2RjM1MzBENkJERTM1MDBBQkREQjMgLyogSlNDYW52YXNQaXhlbEFycmF5Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjMyNjQ2MEQ3OEI1NTMwMDY4RjBDNCAvKiBB
WE9iamVjdENhY2hlTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFGMzI2NDcwRDc4QjU1MzAw
NjhGMEM0IC8qIEdsb2JhbEhpc3RvcnlNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUYzMjY0
OTBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZUFYT2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUFGMzI2NEIwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbSBp
biBTb3VyY2VzICovLAorCQkJCTkzMDJCMEJEMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNp
b24gMzA2OTQpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksMTMgKzQ5LDE0IEBACiAjaW5jbHVkZSAiRm9udFZhbHVlLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHbG9iYWxIaXN0
b3J5LmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQ
YWlyLmgiCiAjaW5jbHVkZSAiUmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0y
MzIsNyArMjMzLDYgQEAgQ1NTU3R5bGVTaGVldCogQ1NTU3R5bGVTZWxlY3Rvcjo6bV92aWV3Uwog
Q1NTU3R5bGVTaGVldCAqQ1NTU3R5bGVTZWxlY3Rvcjo6bV9zdmdTaGVldCA9IDA7CiAjZW5kaWYK
IAotc3RhdGljIENTU1N0eWxlU2VsZWN0b3I6OkVuY29kZWRVUkwqIGN1cnJlbnRFbmNvZGVkVVJM
ID0gMDsKIHN0YXRpYyBQc2V1ZG9TdGF0ZSBwc2V1ZG9TdGF0ZTsKIAogc3RhdGljIGNvbnN0IE1l
ZGlhUXVlcnlFdmFsdWF0b3ImIHNjcmVlbkV2YWwoKQpAQCAtMzE2LDI4ICszMTYsMTAgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0KCkKICAgICBtX21lZGl1bSA9IDA7CiB9CiAKLXZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6c2V0RW5jb2RlZFVSTChjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAg
S1VSTCB1ID0gdXJsOwotCi0gICAgdS5zZXRRdWVyeShTdHJpbmcoKSk7Ci0gICAgdS5zZXRSZWYo
U3RyaW5nKCkpOwotICAgIG1fZW5jb2RlZFVSTC5maWxlID0gdS5zdHJpbmcoKTsKLSAgICBpbnQg
cG9zID0gbV9lbmNvZGVkVVJMLmZpbGUucmV2ZXJzZUZpbmQoJy8nKTsKLSAgICBtX2VuY29kZWRV
UkwucGF0aCA9IG1fZW5jb2RlZFVSTC5maWxlOwotICAgIGlmIChwb3MgPiAwKSB7Ci0gICAgICAg
IG1fZW5jb2RlZFVSTC5wYXRoLnRydW5jYXRlKHBvcyk7Ci0gICAgICAgIG1fZW5jb2RlZFVSTC5w
YXRoLmFwcGVuZCgnLycpOwotICAgIH0KLSAgICB1LnNldFBhdGgoU3RyaW5nKCkpOwotICAgIG1f
ZW5jb2RlZFVSTC5wcmVmaXggPSB1LnN0cmluZygpOwotfQotCiBDU1NTdHlsZVNlbGVjdG9yOjp+
Q1NTU3R5bGVTZWxlY3RvcigpCiB7CiAgICAgZGVsZXRlIG1fbWVkaXVtOwotICAgIDo6ZGVsZXRl
IG1fcm9vdERlZmF1bHRTdHlsZTsKLQorICAgIGRlbGV0ZSBtX3Jvb3REZWZhdWx0U3R5bGU7CiAg
ICAgZGVsZXRlIG1fYXV0aG9yU3R5bGU7CiAgICAgZGVsZXRlIG1fdXNlclN0eWxlOwogfQpAQCAt
NTM3LDcgKzUxOSw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEVsZW1lbnRBbmRQc2UK
ICAgICAgICAgbV9zdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1f
ZWxlbWVudCk7CiAgICAgZWxzZQogICAgICAgICBtX3N0eWxlZEVsZW1lbnQgPSAwOwotICAgIGN1
cnJlbnRFbmNvZGVkVVJMID0gJm1fZW5jb2RlZFVSTDsKICAgICBwc2V1ZG9TdGF0ZSA9IFBzZXVk
b1Vua25vd247CiB9CiAKQEAgLTU2OCw4MSArNTQ5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
Ojppbml0Rm9yU3R5bGVSZXNvbAogICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgaW50IGZpbmRTbGFzaERvdERvdFNsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoKQotewotICAgIHVuc2lnbmVkIGxvb3BMaW1pdCA9IGxlbmd0aCA8IDQg
PyAwIDogbGVuZ3RoIC0gMzsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9vcExpbWl0
OyArK2kpIHsKLSAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3RlcnNb
aSArIDFdID09ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tp
ICsgM10gPT0gJy8nKQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiAt
MTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZmluZFNsYXNoU2xhc2goY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIGludCBwb3NpdGlvbikKLXsKLSAgICB1bnNpZ25lZCBs
b29wTGltaXQgPSBsZW5ndGggPCAyID8gMCA6IGxlbmd0aCAtIDE7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gcG9zaXRpb247IGkgPCBsb29wTGltaXQ7ICsraSkgewotICAgICAgICBpZiAoY2hhcmFj
dGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy8nKQotICAgICAgICAgICAg
cmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQg
ZmluZFNsYXNoRG90U2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgp
Ci17Ci0gICAgdW5zaWduZWQgbG9vcExpbWl0ID0gbGVuZ3RoIDwgMyA/IDAgOiBsZW5ndGggLSAy
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb29wTGltaXQ7ICsraSkgewotICAgICAg
ICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy4nICYm
IGNoYXJhY3RlcnNbaSArIDJdID09ICcvJykKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgIH0K
LSAgICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc0NvbG9uU2xh
c2hTbGFzaChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHVuc2lnbmVkIGxvb3BMaW1pdCA9IGxlbmd0aCA8IDMgPyAwIDogbGVuZ3RoIC0gMjsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kpCi0gICAgICAgIGlmIChjaGFy
YWN0ZXJzW2ldID09ICc6JyAmJiBjaGFyYWN0ZXJzW2kgKyAxXSA9PSAnLycgJiYgY2hhcmFjdGVy
c1tpICsgMl0gPT0gJy8nKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhblBhdGgoVmVjdG9yPFVDaGFyLCA1MTI+JiBwYXRo
KQotewotICAgIGludCBwb3M7Ci0gICAgd2hpbGUgKChwb3MgPSBmaW5kU2xhc2hEb3REb3RTbGFz
aChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCkpKSAhPSAtMSkgewotICAgICAgICBpbnQgcHJldiA9
IHJldmVyc2VGaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJy8nLCBwb3MgLSAxKTsKLSAg
ICAgICAgLy8gZG9uJ3QgcmVtb3ZlIHRoZSBob3N0LCBpLmUuIGh0dHA6Ly9mb28ub3JnLy4uL2Zv
by5odG1sCi0gICAgICAgIGlmIChwcmV2IDwgMCB8fCAocHJldiA+IDMgJiYgcGF0aFtwcmV2IC0g
Ml0gPT0gJzonICYmIHBhdGhbcHJldiAtIDFdID09ICcvJykpCi0gICAgICAgICAgICBwYXRoLnJl
bW92ZShwb3MsIDMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXRoLnJlbW92ZShwcmV2
LCBwb3MgLSBwcmV2ICsgMyk7Ci0gICAgfQotCi0gICAgLy8gRG9uJ3QgcmVtb3ZlICIvLyIgZnJv
bSBhbiBhbmNob3IgaWRlbnRpZmllci4gLXJqdwotICAgIC8vIFNldCByZWZQb3MgdG8gLTIgdG8g
bWVhbiAiSSBoYXZlbid0IGxvb2tlZCBmb3IgdGhlIGFuY2hvciB5ZXQiLgotICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8gd2FzdGUgYSBmdW5jdGlvbiBjYWxsIG9uIHRoZSBzZWFyY2ggZm9yIHRoZSB0
aGUgYW5jaG9yCi0gICAgLy8gaW4gdGhlIHZhc3QgbWFqb3JpdHkgb2YgY2FzZXMgd2hlcmUgdGhl
cmUgaXMgbm8gIi8vIiBpbiB0aGUgcGF0aC4KLSAgICBwb3MgPSAwOwotICAgIGludCByZWZQb3Mg
PSAtMjsKLSAgICB3aGlsZSAoKHBvcyA9IGZpbmRTbGFzaFNsYXNoKHBhdGguZGF0YSgpLCBwYXRo
LnNpemUoKSwgcG9zKSkgIT0gLTEpIHsKLSAgICAgICAgaWYgKHJlZlBvcyA9PSAtMikKLSAgICAg
ICAgICAgIHJlZlBvcyA9IGZpbmQocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAnIycpOwotICAg
ICAgICBpZiAocmVmUG9zID4gMCAmJiBwb3MgPj0gcmVmUG9zKQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgaWYgKHBvcyA9PSAwIHx8IHBhdGhbcG9zIC0gMV0gIT0gJzonKQotICAgICAg
ICAgICAgcGF0aC5yZW1vdmUocG9zKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcG9zICs9
IDI7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdlIGRvbid0IHdhbnQgdG8gcmVtb3ZlICIvLi8i
IGZyb20gYW4gYW5jaG9yIGlkZW50aWZpZXIgZWl0aGVyLgotICAgIHdoaWxlICgocG9zID0gZmlu
ZFNsYXNoRG90U2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpKSkgIT0gLTEpCi0gICAgICAg
IHBhdGgucmVtb3ZlKHBvcywgMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrUHNldWRvU3RhdGUo
RWxlbWVudCAqZSwgYm9vbCBjaGVja1Zpc2l0ZWQgPSB0cnVlKQorc3RhdGljIHZvaWQgY2hlY2tQ
c2V1ZG9TdGF0ZShFbGVtZW50KiBlLCBib29sIGNoZWNrVmlzaXRlZCA9IHRydWUpCiB7CiAgICAg
aWYgKCFlLT5pc0xpbmsoKSkgewogICAgICAgICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb05vbmU7CkBA
IC02NzEsMjYgKzU3OCwyMSBAQCBzdGF0aWMgdm9pZCBjaGVja1BzZXVkb1N0YXRlKEVsZW1lbnQg
KmUsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cyA9IGF0dHItPmNoYXJhY3RlcnMoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyLT5sZW5n
dGgoKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBlLT5kb2N1bWVudCgpOwogCi0gICAgaWYg
KGNvbnRhaW5zQ29sb25TbGFzaFNsYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpIHsKLSAgICAgICAg
Ly8gRklYTUU6IFN0cmFuZ2UgdG8gbm90IGNsZWFuIHRoZSBwYXRoIGp1c3QgYmVhY2F1c2UgaXQg
aGFzICI6Ly8iIGluIGl0LgotICAgICAgICBwc2V1ZG9TdGF0ZSA9IGhpc3RvcnlDb250YWlucyhj
aGFyYWN0ZXJzLCBsZW5ndGgpID8gUHNldWRvVmlzaXRlZCA6IFBzZXVkb0xpbms7CisgICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkgeworICAgICAg
ICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb0xpbms7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBWZWN0b3I8VUNoYXIsIDUxMj4gYnVmZmVyOwotICAgIGlmIChsZW5ndGggJiYgY2hhcmFjdGVy
c1swXSA9PSAnLycpIHsKLSAgICAgICAgYnVmZmVyLmFwcGVuZChjdXJyZW50RW5jb2RlZFVSTC0+
cHJlZml4LmNoYXJhY3RlcnMoKSwgY3VycmVudEVuY29kZWRVUkwtPnByZWZpeC5sZW5ndGgoKSk7
Ci0gICAgfSBlbHNlIGlmIChsZW5ndGggJiYgY2hhcmFjdGVyc1swXSA9PSAnIycpIHsKLSAgICAg
ICAgYnVmZmVyLmFwcGVuZChjdXJyZW50RW5jb2RlZFVSTC0+ZmlsZS5jaGFyYWN0ZXJzKCksIGN1
cnJlbnRFbmNvZGVkVVJMLT5maWxlLmxlbmd0aCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBi
dWZmZXIuYXBwZW5kKGN1cnJlbnRFbmNvZGVkVVJMLT5wYXRoLmNoYXJhY3RlcnMoKSwgY3VycmVu
dEVuY29kZWRVUkwtPnBhdGgubGVuZ3RoKCkpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFn
ZSgpOworICAgIGlmICghcGFnZSkgeworICAgICAgICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb0xpbms7
CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBs
ZW5ndGgpOwotICAgIGNsZWFuUGF0aChidWZmZXIpOwotICAgIHBzZXVkb1N0YXRlID0gaGlzdG9y
eUNvbnRhaW5zKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpID8gUHNldWRvVmlzaXRlZCA6
IFBzZXVkb0xpbms7CisKKyAgICBwc2V1ZG9TdGF0ZSA9IHBhZ2UtPmdyb3VwKCkuaXNMaW5rVmlz
aXRlZChkb2N1bWVudCwgKmF0dHIpID8gUHNldWRvVmlzaXRlZCA6IFBzZXVkb0xpbms7CiB9CiAK
IC8vIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBwYXJzaW5nIG50aC1hcmd1bWVudHMKQEAgLTgyOSwx
MiArNzMxLDE0IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAg
ICAgICAgICAgICAgICAgICAgbWFwcGVkQXR0cnNNYXRjaCA9IHMtPm1hcHBlZEF0dHJpYnV0ZXMo
KS0+bWFwc0VxdWl2YWxlbnQobV9zdHlsZWRFbGVtZW50LT5tYXBwZWRBdHRyaWJ1dGVzKCkpOwog
ICAgICAgICAgICAgICAgIGlmIChtYXBwZWRBdHRyc01hdGNoKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgbGlua3NNYXRjaCA9IHRydWU7CisKICAgICAgICAgICAgICAgICAgICAgaWYgKHMt
PmlzTGluaygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNr
IHRvIHNlZSBpZiB0aGUgdmlzaXRlZCBzdGF0ZSBtYXRjaGVzLgotICAgICAgICAgICAgICAgICAg
ICAgICAgQ29sb3IgbGlua0NvbG9yID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3Io
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIHZpc2l0ZWRDb2xvciA9IG1fZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBzZXVkb1N0YXRlID09IFBzZXVkb1Vua25vd24pCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocHNldWRvU3RhdGUgPT0gUHNldWRvVW5rbm93bikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IENvbG9yJiBsaW5rQ29sb3IgPSBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPmxpbmtDb2xvcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbG9y
JiB2aXNpdGVkQ29sb3IgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3Io
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1BzZXVkb1N0YXRlKG1fZWxlbWVu
dCwgc3R5bGUtPnBzZXVkb1N0YXRlKCkgIT0gUHNldWRvQW55TGluayB8fCBsaW5rQ29sb3IgIT0g
dmlzaXRlZENvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtzTWF0Y2ggPSAocHNldWRvU3RhdGUgPT0gc3R5bGUtPnBzZXVkb1N0YXRl
KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNTEz
NCw4ICs1MDM4LDggQEAgQ29sb3IgQ1NTU3R5bGVTZWxlY3Rvcjo6Z2V0Q29sb3JGcm9tUHJpbQog
ICAgICAgICBpZiAoaWRlbnQgPT0gQ1NTX1ZBTF9fV0VCS0lUX1RFWFQpCiAgICAgICAgICAgICBj
b2wgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnRleHRDb2xvcigpOwogICAgICAgICBlbHNlIGlm
IChpZGVudCA9PSBDU1NfVkFMX19XRUJLSVRfTElOSykgewotICAgICAgICAgICAgQ29sb3IgbGlu
a0NvbG9yID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKLSAgICAgICAgICAg
IENvbG9yIHZpc2l0ZWRDb2xvciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtD
b2xvcigpOworICAgICAgICAgICAgY29uc3QgQ29sb3ImIGxpbmtDb2xvciA9IG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CisgICAgICAgICAgICBjb25zdCBDb2xvciYgdmlzaXRl
ZENvbG9yID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCk7CiAgICAg
ICAgICAgICBpZiAobGlua0NvbG9yID09IHZpc2l0ZWRDb2xvcikKICAgICAgICAgICAgICAgICBj
b2wgPSBsaW5rQ29sb3I7CiAgICAgICAgICAgICBlbHNlIHsKSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmgJKHJldmlzaW9uIDMwNjk0KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTQgKzExMCw2IEBAIHB1YmxpYzoKIAogICAgICAgICBi
b29sIHN0cmljdFBhcnNpbmc7CiAKLSAgICAgICAgc3RydWN0IEVuY29kZWRVUkwgewotICAgICAg
ICAgICAgU3RyaW5nIHByZWZpeDsgLy8gcHJvdG9jb2wsIGhvc3QsIGV0Yy4KLSAgICAgICAgICAg
IFN0cmluZyBwYXRoOwotICAgICAgICAgICAgU3RyaW5nIGZpbGU7Ci0gICAgICAgIH0gbV9lbmNv
ZGVkVVJMOwotCi0gICAgICAgIHZvaWQgc2V0RW5jb2RlZFVSTChjb25zdCBLVVJMJiB1cmwpOwot
CiAgICAgICAgIC8vIEdpdmVuIGEgQ1NTIGtleXdvcmQgaW4gdGhlIHJhbmdlICh4eC1zbWFsbCB0
byAtd2Via2l0LXh4eC1sYXJnZSksIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4KICAgICAgICAg
Ly8gdGhlIGNvcnJlY3QgZm9udCBzaXplIHNjYWxlZCByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGRl
ZmF1bHQgKG1lZGl1bSkuCiAgICAgICAgIGZsb2F0IGZvbnRTaXplRm9yS2V5d29yZChpbnQga2V5
d29yZCwgYm9vbCBxdWlya3NNb2RlLCBib29sIG1vbm9zcGFjZSkgY29uc3Q7CkBAIC0yNTAsMTEg
KzI0Miw4IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxl
czsKIAogICAgICAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKLQog
ICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBtX3NlbGVjdG9yQXR0cnM7Ci0gICAg
ICAgIAotICAgICAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiBtX2FkZGl0
aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzOwotICAgICAgICAKKyAgICAgICAgVmVjdG9yPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKj4gbV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsczsg
ICAgICAgIAogICAgICAgICBWZWN0b3I8TWVkaWFRdWVyeVJlc3VsdCo+IG1fdmlld3BvcnREZXBl
bmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKIAogICAgICAgICB2b2lkIGFwcGx5UHJvcGVydHkoaW50
IGlkLCBDU1NWYWx1ZSopOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzA2OTQpCisrKyBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMTUsNyArMTIxNSw2IEBA
IHZvaWQgRG9jdW1lbnQ6OmF0dGFjaCgpCiAgICAgICAgIGlmIChTZXR0aW5ncyogZG9jU2V0dGlu
Z3MgPSBzZXR0aW5ncygpKQogICAgICAgICAgICAgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzID0g
ZG9jU2V0dGluZ3MtPmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKCk7CiAgICAgICAgIG1fc3R5
bGVTZWxlY3RvciA9IG5ldyBDU1NTdHlsZVNlbGVjdG9yKHRoaXMsIHVzZXJTdHlsZVNoZWV0KCks
IG1fc3R5bGVTaGVldHMuZ2V0KCksIG1fbWFwcGVkRWxlbWVudFNoZWV0LmdldCgpLCAhaW5Db21w
YXRNb2RlKCksIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyk7Ci0gICAgICAgIG1fc3R5bGVTZWxl
Y3Rvci0+c2V0RW5jb2RlZFVSTChtX3VybCk7CiAgICAgfQogCiAgICAgcmVjYWxjU3R5bGUoRm9y
Y2UpOwpAQCAtMTYzNiw5ICsxNjM1LDYgQEAgdm9pZCBEb2N1bWVudDo6c2V0VVJMKGNvbnN0IEtV
UkwmIHVybCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV91cmwgPSB1cmw7Ci0gICAgaWYgKG1f
c3R5bGVTZWxlY3RvcikKLSAgICAgICAgbV9zdHlsZVNlbGVjdG9yLT5zZXRFbmNvZGVkVVJMKHVy
bCk7Ci0KICAgICBtX2lzQWxsb3dlZFRvTG9hZExvY2FsUmVzb3VyY2VzID0gc2hvdWxkQmVBbGxv
d2VkVG9Mb2FkTG9jYWxSZXNvdXJjZXMoKTsKICB9CiAgCkBAIC0yMjA4LDcgKzIyMDQsNiBAQCB2
b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAvLyBDcmVhdGUgYSBuZXcg
c3R5bGUgc2VsZWN0b3IKICAgICBkZWxldGUgbV9zdHlsZVNlbGVjdG9yOwogICAgIG1fc3R5bGVT
ZWxlY3RvciA9IG5ldyBDU1NTdHlsZVNlbGVjdG9yKHRoaXMsIHVzZXJTdHlsZVNoZWV0KCksIG1f
c3R5bGVTaGVldHMuZ2V0KCksIG1fbWFwcGVkRWxlbWVudFNoZWV0LmdldCgpLCAhaW5Db21wYXRN
b2RlKCksIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyk7Ci0gICAgbV9zdHlsZVNlbGVjdG9yLT5z
ZXRFbmNvZGVkVVJMKG1fdXJsKTsKICAgICBtX2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0b3IgPSB0
cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAzMDY5NCkKKysr
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiAr
NjYsNyBAQAogI2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNs
dWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJQYXJ0LmgiCkBAIC0zODQ4LDIxICszODQ5LDI1IEBAIFBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+IEZyYW1lTG9hZGVyOjpjcmUKIAogdm9pZCBGcmFtZUxvYWRlcjo6YWRkQmFj
a0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0KGJvb2wgZG9DbGlwKQogewotICAgIGlmIChQYWdl
KiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQotICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCkt
PnVybEZvckhpc3RvcnkoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEZyYW1lKiBtYWluRnJh
bWUgPSBwYWdlLT5tYWluRnJhbWUoKTsKLSAgICAgICAgICAgIEFTU0VSVChtYWluRnJhbWUpOwot
ICAgICAgICAgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gbWFpbkZyYW1lLT5sb2FkZXIo
KTsKLQotICAgICAgICAgICAgaWYgKCFmcmFtZUxvYWRlci0+bV9kaWRQZXJmb3JtRmlyc3ROYXZp
Z2F0aW9uICYmIHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5lbnRyaWVzKCkuc2l6ZSgpID09IDEp
IHsKLSAgICAgICAgICAgICAgICBmcmFtZUxvYWRlci0+bV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0
aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUGVyZm9ybUZpcnN0TmF2
aWdhdGlvbigpOwotICAgICAgICAgICAgfQorICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdl
KCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIFJlZlB0
cjxIaXN0b3J5SXRlbT4gaXRlbSA9IGZyYW1lTG9hZGVyLT5jcmVhdGVIaXN0b3J5SXRlbVRyZWUo
bV9mcmFtZSwgZG9DbGlwKTsKLSAgICAgICAgICAgIExPRyhCYWNrRm9yd2FyZCwgIldlYkNvcmVC
YWNrRm9yd2FyZCAtIEFkZGluZyBiYWNrZm9yd2FyZCBpdGVtICVwIGZvciBmcmFtZSAlcyIsIGl0
ZW0uZ2V0KCksIGRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5hZGRJdGVtKGl0ZW0pOwot
ICAgICAgICB9CisgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBtYWluRnJhbWUgPSBwYWdlLT5t
YWluRnJhbWUoKTsKKyAgICBBU1NFUlQobWFpbkZyYW1lKTsKKyAgICBGcmFtZUxvYWRlciogZnJh
bWVMb2FkZXIgPSBtYWluRnJhbWUtPmxvYWRlcigpOworCisgICAgaWYgKCFmcmFtZUxvYWRlci0+
bV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uICYmIHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5l
bnRyaWVzKCkuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgZnJhbWVMb2FkZXItPm1fZGlkUGVyZm9y
bUZpcnN0TmF2aWdhdGlvbiA9IHRydWU7CisgICAgICAgIG1fY2xpZW50LT5kaWRQZXJmb3JtRmly
c3ROYXZpZ2F0aW9uKCk7CisgICAgfQorCisgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0g
ZnJhbWVMb2FkZXItPmNyZWF0ZUhpc3RvcnlJdGVtVHJlZShtX2ZyYW1lLCBkb0NsaXApOworICAg
IExPRyhCYWNrRm9yd2FyZCwgIldlYkNvcmVCYWNrRm9yd2FyZCAtIEFkZGluZyBiYWNrZm9yd2Fy
ZCBpdGVtICVwIGZvciBmcmFtZSAlcyIsIGl0ZW0uZ2V0KCksIGRvY3VtZW50TG9hZGVyKCktPnVy
bCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBwYWdlLT5iYWNrRm9yd2FyZExpc3Qo
KS0+YWRkSXRlbShpdGVtKTsKIH0KIAogUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gRnJhbWVMb2Fk
ZXI6OmNyZWF0ZUhpc3RvcnlJdGVtVHJlZShGcmFtZSogdGFyZ2V0RnJhbWUsIGJvb2wgY2xpcEF0
VGFyZ2V0KQpAQCAtNDExMCwxMyArNDExNSwxMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkSXRl
bShIaXN0b3J5SXRlbSogCiAvLyBXYWxrIHRoZSBmcmFtZSB0cmVlIGFuZCBlbnN1cmUgdGhhdCB0
aGUgVVJMcyBtYXRjaCB0aGUgVVJMcyBpbiB0aGUgaXRlbS4KIGJvb2wgRnJhbWVMb2FkZXI6OnVy
bHNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0CiB7Ci0gICAgS1VSTCBjdXJyZW50
VVJMID0gZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCk7Ci0gICAgCisgICAgY29uc3QgS1VSTCYgY3Vy
cmVudFVSTCA9IGRvY3VtZW50TG9hZGVyKCktPnVybCgpOwogICAgIGlmICghZXF1YWxJZ25vcmlu
Z1JlZihjdXJyZW50VVJMLCBpdGVtLT51cmwoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKKwogICAgIGNvbnN0IEhpc3RvcnlJdGVtVmVjdG9yJiBjaGlsZEl0ZW1zID0gaXRlbS0+Y2hp
bGRyZW4oKTsKLSAgICAKKwogICAgIHVuc2lnbmVkIHNpemUgPSBjaGlsZEl0ZW1zLnNpemUoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIEZyYW1l
KiBjaGlsZEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5jaGlsZChjaGlsZEl0ZW1zW2ldLT50YXJn
ZXQoKSk7CkBAIC00MTM3LDE3ICs0MTQxLDE5IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmdvVG9JdGVt
KEhpc3RvcnlJdGVtKiAKICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMzk1MTI4Mz4gY2FuIHZpZXcg
cGFnZXMgZnJvbSB0aGUgYmFjay9mb3J3YXJkIGNhY2hlIHRoYXQgc2hvdWxkIGJlIGRpc2FsbG93
ZWQgYnkgUGFyZW50YWwgQ29udHJvbHMKICAgICAvLyBVbHRpbWF0ZWx5LCBoaXN0b3J5IGl0ZW0g
bmF2aWdhdGlvbnMgc2hvdWxkIGdvIHRocm91Z2ggdGhlIHBvbGljeSBkZWxlZ2F0ZS4gVGhhdCdz
IGNvdmVyZWQgaW46CiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM5Nzk1Mzk+IGJhY2svZm9yd2Fy
ZCBjYWNoZSBuYXZpZ2F0aW9ucyBzaG91bGQgY29uc3VsdCBwb2xpY3kgZGVsZWdhdGUKLSAgICBp
ZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgaWYgKG1fY2xpZW50LT5z
aG91bGRHb1RvSGlzdG9yeUl0ZW0odGFyZ2V0SXRlbSkpIHsKLSAgICAgICAgICAgIEJhY2tGb3J3
YXJkTGlzdCogYmZMaXN0ID0gcGFnZS0+YmFja0ZvcndhcmRMaXN0KCk7Ci0gICAgICAgICAgICBI
aXN0b3J5SXRlbSogY3VycmVudEl0ZW0gPSBiZkxpc3QtPmN1cnJlbnRJdGVtKCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIFNldCB0aGUgQkYgY3Vyc29yIGJlZm9yZSBjb21taXQsIHdo
aWNoIGxldHMgdGhlIHVzZXIgcXVpY2tseSBjbGljayBiYWNrL2ZvcndhcmQgYWdhaW4uCi0gICAg
ICAgICAgICAvLyAtIHBsdXMsIGl0IG9ubHkgbWFrZXMgc2Vuc2UgZm9yIHRoZSB0b3AgbGV2ZWwg
b2YgdGhlIG9wZXJhdGlvbiB0aHJvdWdoIHRoZSBmcmFtZXRyZWUsCi0gICAgICAgICAgICAvLyBh
cyBvcHBvc2VkIHRvIGhhcHBlbmluZyBmb3Igc29tZS9vbmUgb2YgdGhlIHBhZ2UgY29tbWl0cyB0
aGF0IG1pZ2h0IGhhcHBlbiBzb29uCi0gICAgICAgICAgICBiZkxpc3QtPmdvVG9JdGVtKHRhcmdl
dEl0ZW0pOwotICAgICAgICAgICAgcmVjdXJzaXZlR29Ub0l0ZW0odGFyZ2V0SXRlbSwgY3VycmVu
dEl0ZW0sIHR5cGUpOwotICAgICAgICB9CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2Uo
KTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fY2xpZW50LT5z
aG91bGRHb1RvSGlzdG9yeUl0ZW0odGFyZ2V0SXRlbSkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFNldCB0aGUgQkYgY3Vyc29yIGJlZm9yZSBjb21taXQsIHdoaWNoIGxldHMgdGhlIHVzZXIg
cXVpY2tseSBjbGljayBiYWNrL2ZvcndhcmQgYWdhaW4uCisgICAgLy8gLSBwbHVzLCBpdCBvbmx5
IG1ha2VzIHNlbnNlIGZvciB0aGUgdG9wIGxldmVsIG9mIHRoZSBvcGVyYXRpb24gdGhyb3VnaCB0
aGUgZnJhbWV0cmVlLAorICAgIC8vIGFzIG9wcG9zZWQgdG8gaGFwcGVuaW5nIGZvciBzb21lL29u
ZSBvZiB0aGUgcGFnZSBjb21taXRzIHRoYXQgbWlnaHQgaGFwcGVuIHNvb24KKyAgICBCYWNrRm9y
d2FyZExpc3QqIGJmTGlzdCA9IHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpOworICAgIEhpc3RvcnlJ
dGVtKiBjdXJyZW50SXRlbSA9IGJmTGlzdC0+Y3VycmVudEl0ZW0oKTsgICAgCisgICAgYmZMaXN0
LT5nb1RvSXRlbSh0YXJnZXRJdGVtKTsKKyAgICByZWN1cnNpdmVHb1RvSXRlbSh0YXJnZXRJdGVt
LCBjdXJyZW50SXRlbSwgdHlwZSk7CiB9CiAKIC8vIFRoZSBnZW5lcmFsIGlkZWEgaGVyZSBpcyB0
byB0cmF2ZXJzZSB0aGUgZnJhbWUgdHJlZSBhbmQgdGhlIGl0ZW0gdHJlZSBpbiBwYXJhbGxlbCwK
QEAgLTQyMjUsMjUgKzQyMzEsMjMgQEAgYm9vbCBGcmFtZUxvYWRlcjo6Y2hpbGRGcmFtZXNNYXRj
aEl0ZW0oSAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVH
bG9iYWxIaXN0b3J5KCkKLXsKLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0
aW5ncygpOwotICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc2V0
dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNv
bnN0IEtVUkwmIHVybCA9IGRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKTsKLSAgICBp
ZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2xpZW50LT51cGRhdGVH
bG9iYWxIaXN0b3J5KHVybCk7Ci19CisvLyBUaGVyZSBhcmUgMyB0aGluZ3MgeW91IG1pZ2h0IHRo
aW5rIG9mIGFzICJoaXN0b3J5IiwgYWxsIG9mIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHRoZXNlIGZ1
bmN0aW9ucy4KKy8vCisvLyAgICAgMSkgQmFjay9mb3J3YXJkOiBUaGUgbV9jdXJyZW50SGlzdG9y
eUl0ZW0gaXMgcGFydCBvZiB0aGlzIG1lY2hhbmlzbS4KKy8vICAgICAyKSBHbG9iYWwgaGlzdG9y
eTogSGFuZGxlZCBieSB0aGUgY2xpZW50LgorLy8gICAgIDMpIFZpc2l0ZWQgbGlua3M6IEhhbmRs
ZWQgYnkgdGhlIFBhZ2VHcm91cC4KIAogdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZv
clN0YW5kYXJkTG9hZCgpCiB7CiAgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBk
YXRpbmcgSGlzdG9yeSBmb3IgU3RhbmRhcmQgTG9hZCBpbiBmcmFtZSAlcyIsIGRvY3VtZW50TG9h
ZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAKKworICAgIFNldHRp
bmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7CisgICAgYm9vbCBuZWVkUHJpdmFj
eSA9ICFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOworICAg
IGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBkb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5
KCk7CisKICAgICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBvY2N1cmVkIGR1cmluZyBsb2FkIGFuZCB0
aGlzIGlzIGEgc3ViZnJhbWUsIHVwZGF0ZSB0aGUgY3VycmVudAotICAgIC8vIGhpc3RvcnkgaXRl
bSByYXRoZXIgdGhhbiBhZGRpbmcgYSBuZXcgb25lLiA8cmRhcjovL3Byb2JsZW0vNTMzMzQ5Nj4K
KyAgICAvLyBiYWNrL2ZvcndhcmQgaXRlbSByYXRoZXIgdGhhbiBhZGRpbmcgYSBuZXcgb25lIGFu
ZCBkb24ndCBhZGQgdGhlIG5ldyBVUkwgdG8gZ2xvYmFsCisgICAgLy8gaGlzdG9yeSBhdCBhbGwu
IEJ1dCBkbyBhZGQgaXQgdG8gdmlzaXRlZCBsaW5rcy4gPHJkYXI6Ly9wcm9ibGVtLzUzMzM0OTY+
CiAgICAgYm9vbCBmcmFtZU5hdmlnYXRpb25EdXJpbmdMb2FkID0gZmFsc2U7CiAgICAgaWYgKG1f
bmF2aWdhdGlvbkR1cmluZ0xvYWQpIHsKICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBv
d25lciA9IG1fZnJhbWUtPm93bmVyRWxlbWVudCgpOwpAQCAtNDI1MiwxNCArNDI1NiwyMCBAQCB2
b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yU3RhbmRhCiAgICAgfQogCiAgICAgaWYg
KCFmcmFtZU5hdmlnYXRpb25EdXJpbmdMb2FkICYmICFkb2N1bWVudExvYWRlcigpLT5pc0NsaWVu
dFJlZGlyZWN0KCkpIHsKLSAgICAgICAgaWYgKCFkb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0
b3J5KCkuaXNFbXB0eSgpKQorICAgICAgICBpZiAoIWhpc3RvcnlVUkwuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBhZGRCYWNrRm9yd2FyZEl0ZW1DbGlwcGVkQXRUYXJnZXQodHJ1ZSk7CisgICAg
ICAgICAgICBpZiAoIW5lZWRQcml2YWN5KQorICAgICAgICAgICAgICAgIG1fY2xpZW50LT51cGRh
dGVHbG9iYWxIaXN0b3J5KGhpc3RvcnlVUkwpOworICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChk
b2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSAmJiBtX2N1cnJlbnRI
aXN0b3J5SXRlbSkgewogICAgICAgICBtX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0VVJMKGRvY3Vt
ZW50TG9hZGVyKCktPnVybCgpKTsKICAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0tPnNldEZv
cm1JbmZvRnJvbVJlcXVlc3QoZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpKTsKICAgICB9CiAK
LSAgICB1cGRhdGVHbG9iYWxIaXN0b3J5KCk7CisgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHko
KSAmJiAhbmVlZFByaXZhY3kpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5w
YWdlKCkpCisgICAgICAgICAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKGhpc3RvcnlV
UkwpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvckNsaWVu
dFJlZGlyZWN0KCkKQEAgLTQyNzYsNyArNDI4NiwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRh
dGVIaXN0b3J5Rm9yQ2xpZW50CiAgICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVtLT5jbGVhclNj
cm9sbFBvaW50KCk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjYWxsIHVwZGF0
ZUdsb2JhbEhpc3RvcnkgaGVyZT8KKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5z
ZXR0aW5ncygpOworICAgIGJvb2wgbmVlZFByaXZhY3kgPSAhc2V0dGluZ3MgfHwgc2V0dGluZ3Mt
PnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBjb25zdCBLVVJMJiBoaXN0b3J5VVJMID0g
ZG9jdW1lbnRMb2FkZXIoKS0+dXJsRm9ySGlzdG9yeSgpOworCisgICAgaWYgKCFoaXN0b3J5VVJM
LmlzRW1wdHkoKSAmJiAhbmVlZFByaXZhY3kpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBt
X2ZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5r
KGhpc3RvcnlVUkwpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9y
eUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbigpCkBAIC00Mjg4LDggKzQzMDUsNiBAQCB2b2lkIEZy
YW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yQmFja0ZvCiAKICAgICAvLyBNdXN0IGdyYWIgdGhl
IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIGJlZm9yZSBkaXN0dXJiaW5nIGl0CiAgICAgc2F2ZVNj
cm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKG1fcHJldmlvdXNIaXN0b3J5SXRlbS5nZXQo
KSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNhbGwgdXBkYXRlR2xvYmFsSGlzdG9yeSBo
ZXJlPwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yUmVsb2FkKCkKQEAg
LTQzMDksOCArNDMyNCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWxv
YWQKICAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0
eSgpKQogICAgICAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0tPnNldFVSTChkb2N1bWVudExv
YWRlcigpLT5yZXF1ZXN0VVJMKCkpOwogICAgIH0KLSAgICAKLSAgICB1cGRhdGVHbG9iYWxIaXN0
b3J5KCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWRpcmVjdFdp
dGhMb2NrZWRIaXN0b3J5KCkKQEAgLTQzMjAsOSArNDMzMywxNiBAQCB2b2lkIEZyYW1lTG9hZGVy
Ojp1cGRhdGVIaXN0b3J5Rm9yUmVkaXJlCiAgICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhp
c3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIGludGVybmFsIGxvYWQgaW4gZnJhbWUgJXMiLCBk
b2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAgICAgCisg
ICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBib29sIG5l
ZWRQcml2YWN5ID0gIXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVk
KCk7CisgICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IGRvY3VtZW50TG9hZGVyKCktPnVybEZv
ckhpc3RvcnkoKTsKKwogICAgIGlmIChkb2N1bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGlyZWN0
KCkpIHsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnRIaXN0b3J5SXRlbSAmJiAhbV9mcmFtZS0+dHJl
ZSgpLT5wYXJlbnQoKSkKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRIaXN0b3J5SXRlbSAmJiAhbV9m
cmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkgewogICAgICAgICAgICAgYWRkQmFja0ZvcndhcmRJdGVt
Q2xpcHBlZEF0VGFyZ2V0KHRydWUpOworICAgICAgICAgICAgaWYgKCFuZWVkUHJpdmFjeSAmJiAh
aGlzdG9yeVVSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZUds
b2JhbEhpc3RvcnkoaGlzdG9yeVVSTCk7CisgICAgICAgIH0KICAgICAgICAgaWYgKG1fY3VycmVu
dEhpc3RvcnlJdGVtKSB7CiAgICAgICAgICAgICBtX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0VVJM
KGRvY3VtZW50TG9hZGVyKCktPnVybCgpKTsKICAgICAgICAgICAgIG1fY3VycmVudEhpc3RvcnlJ
dGVtLT5zZXRGb3JtSW5mb0Zyb21SZXF1ZXN0KGRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSk7
CkBAIC00MzMzLDcgKzQzNTMsMTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZv
clJlZGlyZQogICAgICAgICAgICAgcGFyZW50RnJhbWUtPmxvYWRlcigpLT5tX2N1cnJlbnRIaXN0
b3J5SXRlbS0+YWRkQ2hpbGRJdGVtKGNyZWF0ZUhpc3RvcnlJdGVtKHRydWUpKTsKICAgICB9CiAK
LSAgICB1cGRhdGVHbG9iYWxIaXN0b3J5KCk7CisgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHko
KSAmJiAhbmVlZFByaXZhY3kpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5w
YWdlKCkpCisgICAgICAgICAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKGhpc3RvcnlV
UkwpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvckNvbW1p
dCgpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDMwNjk0KQorKysgV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDggKzQ1Niw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB1cGRhdGVIaXN0b3J5Rm9yQ2xpZW50UmVk
aXJlY3QoKTsKICAgICAgICAgdm9pZCB1cGRhdGVIaXN0b3J5Rm9yQ29tbWl0KCk7CiAgICAgCi0g
ICAgICAgIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeSgpOwotCiAgICAgICAgIHZvaWQgcmVkaXJl
Y3Rpb25UaW1lckZpcmVkKFRpbWVyPEZyYW1lTG9hZGVyPiopOwogICAgICAgICB2b2lkIGNoZWNr
Q29tcGxldGVkVGltZXJGaXJlZChUaW1lcjxGcmFtZUxvYWRlcj4qKTsKICAgICAgICAgdm9pZCBj
aGVja0xvYWRDb21wbGV0ZVRpbWVyRmlyZWQoVGltZXI8RnJhbWVMb2FkZXI+Kik7CkluZGV4OiBX
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcAkocmV2aXNpb24gMzA2OTQpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgpAQCAtMzQ1LDEzICszNDYs
MTAgQEAgdm9pZCBDaHJvbWU6OnByaW50KEZyYW1lKiBmcmFtZSkKIAogUGFnZUdyb3VwTG9hZERl
ZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXIoUGFnZSogcGFnZSwgYm9vbCBkZWZlclNlbGYp
CiB7Ci0gICAgY29uc3QgSGFzaFNldDxQYWdlKj4qIGdyb3VwID0gcGFnZS0+ZnJhbWVOYW1lc3Bh
Y2UoKTsKKyAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBh
Z2VzKCk7CiAKLSAgICBpZiAoIWdyb3VwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIYXNoU2V0
PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZ3JvdXAtPmVuZCgpOwotICAgIGZvciAoSGFz
aFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZ3JvdXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdl
cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBh
Z2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBQYWdlKiBvdGhlclBhZ2Ug
PSAqaXQ7CiAgICAgICAgIGlmICgoZGVmZXJTZWxmIHx8IG90aGVyUGFnZSAhPSBwYWdlKSkgewog
ICAgICAgICAgICAgaWYgKCFvdGhlclBhZ2UtPmRlZmVyc0xvYWRpbmcoKSkKSW5kZXg6IFdlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgJKHJldmlzaW9uIDMwNjk0KQorKysgV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkgPSAwOwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3B1
bGF0ZVZpc2l0ZWRMaW5rcygpID0gMDsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVh
bCB+Q2hyb21lQ2xpZW50KCkgeyB9CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVRy
ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwCShyZXZpc2lv
biAzMDY5NCkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CkBAIC0xODIsMTcg
KzE4MywxNiBAQCBGcmFtZSogRnJhbWVUcmVlOjpmaW5kKGNvbnN0IEF0b21pY1N0cmluCiAgICAg
ICAgIGlmIChmcmFtZS0+dHJlZSgpLT5uYW1lKCkgPT0gbmFtZSkKICAgICAgICAgICAgIHJldHVy
biBmcmFtZTsKIAotICAgIC8vIFNlYXJjaCB0aGUgZW50aXJlIHRyZWUgZm9yIGFsbCBvdGhlciBw
YWdlcyBpbiB0aGlzIG5hbWVzcGFjZS4KLSAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiogcGFnZXMg
PSBwYWdlLT5mcmFtZU5hbWVzcGFjZSgpOwotICAgIGlmIChwYWdlcykgewotICAgICAgICBIYXNo
U2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFnZXMtPmVuZCgpOwotICAgICAgICBm
b3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhZ2VzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFBhZ2UqIG90aGVyUGFnZSA9ICppdDsKLSAg
ICAgICAgICAgIGlmIChvdGhlclBhZ2UgIT0gcGFnZSkKLSAgICAgICAgICAgICAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9IG90aGVyUGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQotICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWUt
PnRyZWUoKS0+bmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZnJhbWU7Ci0gICAgICAgIH0KKyAgICAvLyBTZWFyY2ggdGhlIGVudGlyZSB0cmVlIG9mIGVhY2gg
b2YgdGhlIG90aGVyIHBhZ2VzIGluIHRoaXMgbmFtZXNwYWNlLgorICAgIC8vIEZJWE1FOiBJcyBy
YW5kb20gb3JkZXIgT0s/CisgICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzID0gcGFnZS0+
Z3JvdXAoKS5wYWdlcygpOworICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBwYWdlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IHBhZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBQYWdlKiBvdGhl
clBhZ2UgPSAqaXQ7CisgICAgICAgIGlmIChvdGhlclBhZ2UgIT0gcGFnZSkKKyAgICAgICAgICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gb3RoZXJQYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpCisgICAgICAgICAgICAgICAgaWYgKGZy
YW1lLT50cmVlKCktPm5hbWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZnJhbWU7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkluZGV4OiBXZWJDb3JlL3BhZ2UvR2xvYmFs
SGlzdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9HbG9iYWxIaXN0b3J5LmgJKHJl
dmlzaW9uIDMwNjk0KQorKysgV2ViQ29yZS9wYWdlL0dsb2JhbEhpc3RvcnkuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwzNyArMSBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgR2xvYmFsSGlzdG9y
eV9oCi0jZGVmaW5lIEdsb2JhbEhpc3RvcnlfaAotCi0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5p
Y29kZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBib29sIGhpc3RvcnlDb250YWlu
cyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gR2xvYmFsSGlzdG9yeV9oCisjZXJyb3IKSW5kZXg6
IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5j
cHAJKHJldmlzaW9uIDMwNjk0KQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBh
Z2VHcm91cC5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlbmRl
cldpZGdldC5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKQEAgLTUwLDggKzUx
LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgUGFnZUdyb3VwKj4gUGFnZUdyb3VwTWFwOworCiBzdGF0aWMg
SGFzaFNldDxQYWdlKj4qIGFsbFBhZ2VzOwotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBIYXNoU2V0
PFBhZ2UqPio+KiBmcmFtZU5hbWVzcGFjZXM7CitzdGF0aWMgUGFnZUdyb3VwTWFwKiBwYWdlR3Jv
dXBzOwogCiAjaWZuZGVmIE5ERUJVRwogV1RGTG9nQ2hhbm5lbCBMb2dXZWJDb3JlUGFnZUxlYWtz
ID0gIHsgMHgwMDAwMDAwMCwgIiIsIFdURkxvZ0NoYW5uZWxPbiB9OwpAQCAtODYsNiArODksNyBA
QCBQYWdlOjpQYWdlKENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50LCBDCiAgICAgLCBtX3BhcmVu
dEluc3BlY3RvckNvbnRyb2xsZXIoMCkKICAgICAsIG1fZGlkTG9hZFVzZXJTdHlsZVNoZWV0KGZh
bHNlKQogICAgICwgbV91c2VyU3R5bGVTaGVldE1vZGlmaWNhdGlvblRpbWUoMCkKKyAgICAsIG1f
Z3JvdXAoMCkKIHsKICAgICBpZiAoIWFsbFBhZ2VzKSB7CiAgICAgICAgIGFsbFBhZ2VzID0gbmV3
IEhhc2hTZXQ8UGFnZSo+OwpAQCAtMTY1LDM3ICsxNjksNDEgQEAgdm9pZCBQYWdlOjpnb1RvSXRl
bShIaXN0b3J5SXRlbSogaXRlbSwgRgogCiB2b2lkIFBhZ2U6OnNldEdyb3VwTmFtZShjb25zdCBT
dHJpbmcmIG5hbWUpCiB7Ci0gICAgaWYgKGZyYW1lTmFtZXNwYWNlcyAmJiAhbV9ncm91cE5hbWUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIEhhc2hTZXQ8UGFnZSo+KiBvbGROYW1lc3BhY2UgPSBmcmFt
ZU5hbWVzcGFjZXMtPmdldChtX2dyb3VwTmFtZSk7Ci0gICAgICAgIGlmIChvbGROYW1lc3BhY2Up
IHsKLSAgICAgICAgICAgIG9sZE5hbWVzcGFjZS0+cmVtb3ZlKHRoaXMpOwotICAgICAgICAgICAg
aWYgKG9sZE5hbWVzcGFjZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgZnJhbWVOYW1l
c3BhY2VzLT5yZW1vdmUobV9ncm91cE5hbWUpOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBvbGRO
YW1lc3BhY2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpZiAoIW1fZ3JvdXBOYW1l
LmlzRW1wdHkoKSkgeworICAgICAgICBBU1NFUlQoIW1fc2luZ2xlUGFnZUdyb3VwKTsKKyAgICAg
ICAgQVNTRVJUKG1fZ3JvdXApOworICAgICAgICBBU1NFUlQocGFnZUdyb3Vwcyk7CisgICAgICAg
IEFTU0VSVChwYWdlR3JvdXBzLT5nZXQobV9ncm91cE5hbWUpID09IG1fZ3JvdXApOworICAgICAg
ICBtX2dyb3VwLT5yZW1vdmVQYWdlKHRoaXMpOworICAgICAgICBpZiAobV9ncm91cC0+cGFnZXMo
KS5pc0VtcHR5KCkpCisgICAgICAgICAgICBwYWdlR3JvdXBzLT5yZW1vdmUobV9ncm91cE5hbWUp
OwogICAgIH0KICAgICBtX2dyb3VwTmFtZSA9IG5hbWU7Ci0gICAgaWYgKCFuYW1lLmlzRW1wdHko
KSkgewotICAgICAgICBpZiAoIWZyYW1lTmFtZXNwYWNlcykKLSAgICAgICAgICAgIGZyYW1lTmFt
ZXNwYWNlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgSGFzaFNldDxQYWdlKj4qPjsKLSAgICAgICAg
SGFzaFNldDxQYWdlKj4qIG5ld05hbWVzcGFjZSA9IGZyYW1lTmFtZXNwYWNlcy0+Z2V0KG5hbWUp
OwotICAgICAgICBpZiAoIW5ld05hbWVzcGFjZSkgewotICAgICAgICAgICAgbmV3TmFtZXNwYWNl
ID0gbmV3IEhhc2hTZXQ8UGFnZSo+OwotICAgICAgICAgICAgZnJhbWVOYW1lc3BhY2VzLT5hZGQo
bmFtZSwgbmV3TmFtZXNwYWNlKTsKKyAgICBpZiAobmFtZS5pc0VtcHR5KCkpCisgICAgICAgIG1f
Z3JvdXAgPSAwOworICAgIGVsc2UgeworICAgICAgICBtX3NpbmdsZVBhZ2VHcm91cC5jbGVhcigp
OworICAgICAgICBpZiAoIXBhZ2VHcm91cHMpCisgICAgICAgICAgICBwYWdlR3JvdXBzID0gbmV3
IFBhZ2VHcm91cE1hcDsKKyAgICAgICAgcGFpcjxQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yLCBib29s
PiByZXN1bHQgPSBwYWdlR3JvdXBzLT5hZGQobmFtZSwgMCk7CisgICAgICAgIGlmICghcmVzdWx0
LnNlY29uZCkgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC5maXJzdC0+c2Vjb25kKTsKKyAg
ICAgICAgICAgIG1fZ3JvdXAgPSByZXN1bHQuZmlyc3QtPnNlY29uZDsKKyAgICAgICAgICAgIG1f
Z3JvdXAtPmFkZFBhZ2UodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlQoIXJlc3VsdC5maXJzdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIG1fZ3JvdXAgPSBuZXcgUGFn
ZUdyb3VwKHRoaXMpOworICAgICAgICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgPSBtX2dyb3Vw
OwogICAgICAgICB9Ci0gICAgICAgIG5ld05hbWVzcGFjZS0+YWRkKHRoaXMpOwogICAgIH0KIH0K
IAotY29uc3QgSGFzaFNldDxQYWdlKj4qIFBhZ2U6OmZyYW1lTmFtZXNwYWNlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gKGZyYW1lTmFtZXNwYWNlcyAmJiAhbV9ncm91cE5hbWUuaXNFbXB0eSgpKSA/
IGZyYW1lTmFtZXNwYWNlcy0+Z2V0KG1fZ3JvdXBOYW1lKSA6IDA7Ci19Ci0KLWNvbnN0IEhhc2hT
ZXQ8UGFnZSo+KiBQYWdlOjpmcmFtZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSkK
K3ZvaWQgUGFnZTo6aW5pdEdyb3VwKCkKIHsKLSAgICByZXR1cm4gKGZyYW1lTmFtZXNwYWNlcyAm
JiAhZ3JvdXBOYW1lLmlzRW1wdHkoKSkgPyBmcmFtZU5hbWVzcGFjZXMtPmdldChncm91cE5hbWUp
IDogMDsKKyAgICBBU1NFUlQoIW1fc2luZ2xlUGFnZUdyb3VwKTsKKyAgICBBU1NFUlQoIW1fZ3Jv
dXApOworICAgIG1fc2luZ2xlUGFnZUdyb3VwLnNldChuZXcgUGFnZUdyb3VwKHRoaXMpKTsKKyAg
ICBtX2dyb3VwID0gbV9zaW5nbGVQYWdlR3JvdXAuZ2V0KCk7CiB9CiAKIHZvaWQgUGFnZTo6c2V0
TmVlZHNSZWFwcGx5U3R5bGVzKCkKQEAgLTM2MCw0ICszNjgsMTkgQEAgY29uc3QgU3RyaW5nJiBQ
YWdlOjp1c2VyU3R5bGVTaGVldCgpIGNvbgogICAgIHJldHVybiBtX3VzZXJTdHlsZVNoZWV0Owog
fQogCit2b2lkIFBhZ2U6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCit7CisgICAgaWYgKCFhbGxQ
YWdlcykKKyAgICAgICAgcmV0dXJuOworICAgIEhhc2hTZXQ8UGFnZUdyb3VwKj4gZ3JvdXBzOwor
ICAgIEhhc2hTZXQ8UGFnZSo+OjppdGVyYXRvciBlbmQgPSBhbGxQYWdlcy0+ZW5kKCk7CisgICAg
Zm9yIChIYXNoU2V0PFBhZ2UqPjo6aXRlcmF0b3IgaXQgPSBhbGxQYWdlcy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChQYWdlR3JvdXAqIGdyb3VwID0gKCppdCktPmdy
b3VwUHRyKCkpCisgICAgICAgICAgICBncm91cHMuYWRkKGdyb3VwKTsKKyAgICB9CisgICAgSGFz
aFNldDxQYWdlR3JvdXAqPjo6aXRlcmF0b3IgZTIgPSBncm91cHMuZW5kKCk7CisgICAgZm9yIChI
YXNoU2V0PFBhZ2VHcm91cCo+OjppdGVyYXRvciBpdCA9IGdyb3Vwcy5iZWdpbigpOyBpdCAhPSBl
MjsgKytpdCkKKyAgICAgICAgKCppdCktPnJlbW92ZVZpc2l0ZWRMaW5rcygpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDMwNjk0KQorKysgV2ViQ29yZS9wYWdl
L1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8vIC0qLSBtb2RlOiBjKys7
IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzMsMjIgKzMzLDEzIEBA
CiB0eXBlZGVmIHN0cnVjdCBISU5TVEFOQ0VfXyogSElOU1RBTkNFOwogI2VuZGlmCiAKLXR5cGVk
ZWYgZW51bSBUZXh0Q2FzZVNlbnNpdGl2aXR5IHsKLSAgICBUZXh0Q2FzZVNlbnNpdGl2ZSwKLSAg
ICBUZXh0Q2FzZUluc2Vuc2l0aXZlCi19OwotCi10eXBlZGVmIGVudW0gRmluZERpcmVjdGlvbiB7
Ci0gICAgRmluZERpcmVjdGlvbkZvcndhcmQsCi0gICAgRmluZERpcmVjdGlvbkJhY2t3YXJkCi19
OwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBDaHJvbWU7CiAgICAgY2xhc3Mg
Q2hyb21lQ2xpZW50OwogICAgIGNsYXNzIENvbnRleHRNZW51Q2xpZW50OwogICAgIGNsYXNzIENv
bnRleHRNZW51Q29udHJvbGxlcjsKKyAgICBjbGFzcyBEb2N1bWVudDsKICAgICBjbGFzcyBEcmFn
Q2xpZW50OwogICAgIGNsYXNzIERyYWdDb250cm9sbGVyOwogICAgIGNsYXNzIEVkaXRvckNsaWVu
dDsKQEAgLTU3LDE1ICs0OCwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSW5z
cGVjdG9yQ2xpZW50OwogICAgIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CiAgICAgY2xhc3Mg
Tm9kZTsKKyAgICBjbGFzcyBQYWdlR3JvdXA7CiAgICAgY2xhc3MgUHJvZ3Jlc3NUcmFja2VyOwog
ICAgIGNsYXNzIFNlbGVjdGlvbjsKICAgICBjbGFzcyBTZWxlY3Rpb25Db250cm9sbGVyOwogICAg
IGNsYXNzIFNldHRpbmdzOworICAgIGNsYXNzIEtVUkw7CisKKyAgICBlbnVtIFRleHRDYXNlU2Vu
c2l0aXZpdHkgeyBUZXh0Q2FzZVNlbnNpdGl2ZSwgVGV4dENhc2VJbnNlbnNpdGl2ZSB9OworICAg
IGVudW0gRmluZERpcmVjdGlvbiB7IEZpbmREaXJlY3Rpb25Gb3J3YXJkLCBGaW5kRGlyZWN0aW9u
QmFja3dhcmQgfTsKIAogICAgIGNsYXNzIFBhZ2UgOiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgdm9pZCBzZXROZWVkc1JlYXBwbHlTdHlsZXMoKTsKLSAgICAgICAg
c3RhdGljIGNvbnN0IEhhc2hTZXQ8UGFnZSo+KiBmcmFtZU5hbWVzcGFjZShjb25zdCBTdHJpbmcm
KTsKIAogICAgICAgICBQYWdlKENocm9tZUNsaWVudCosIENvbnRleHRNZW51Q2xpZW50KiwgRWRp
dG9yQ2xpZW50KiwgRHJhZ0NsaWVudCosIEluc3BlY3RvckNsaWVudCopOwogICAgICAgICB+UGFn
ZSgpOwpAQCAtODYsOSArODEsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IGdvVG9JdGVtKEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7CiAgICAgICAgIAogICAgICAg
ICB2b2lkIHNldEdyb3VwTmFtZShjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgU3RyaW5nIGdyb3Vw
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JvdXBOYW1lOyB9CisgICAgICAgIGNvbnN0IFN0cmlu
ZyYgZ3JvdXBOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9ncm91cE5hbWU7IH0KIAotICAgICAgICBj
b25zdCBIYXNoU2V0PFBhZ2UqPiogZnJhbWVOYW1lc3BhY2UoKSBjb25zdDsKKyAgICAgICAgUGFn
ZUdyb3VwJiBncm91cCgpIHsgaWYgKCFtX2dyb3VwKSBpbml0R3JvdXAoKTsgcmV0dXJuICptX2dy
b3VwOyB9CisgICAgICAgIFBhZ2VHcm91cCogZ3JvdXBQdHIoKSB7IHJldHVybiBtX2dyb3VwOyB9
IC8vIGNhbiByZXR1cm4gMAogCiAgICAgICAgIHZvaWQgaW5jcmVtZW50RnJhbWVDb3VudCgpIHsg
KyttX2ZyYW1lQ291bnQ7IH0KICAgICAgICAgdm9pZCBkZWNyZW1lbnRGcmFtZUNvdW50KCkgeyAt
LW1fZnJhbWVDb3VudDsgfQpAQCAtMTMyLDcgKzEyOCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHN0YXRpYyBISU5TVEFOQ0UgaW5zdGFuY2VIYW5kbGUoKSB7IHJldHVybiBzX2lu
c3RhbmNlSGFuZGxlOyB9CiAjZW5kaWYKIAorICAgICAgICBzdGF0aWMgdm9pZCByZW1vdmVBbGxW
aXNpdGVkTGlua3MoKTsKKwogICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgaW5pdEdyb3VwKCk7
CisKICAgICAgICAgT3duUHRyPENocm9tZT4gbV9jaHJvbWU7CiAgICAgICAgIE93blB0cjxTZWxl
Y3Rpb25Db250cm9sbGVyPiBtX2RyYWdDYXJldENvbnRyb2xsZXI7CiAgICAgICAgIE93blB0cjxE
cmFnQ29udHJvbGxlcj4gbV9kcmFnQ29udHJvbGxlcjsKQEAgLTE2Myw2ICsxNjMsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIG11dGFibGUgYm9vbCBtX2RpZExvYWRVc2VyU3R5bGVT
aGVldDsKICAgICAgICAgbXV0YWJsZSB0aW1lX3QgbV91c2VyU3R5bGVTaGVldE1vZGlmaWNhdGlv
blRpbWU7CiAKKyAgICAgICAgT3duUHRyPFBhZ2VHcm91cD4gbV9zaW5nbGVQYWdlR3JvdXA7Cisg
ICAgICAgIFBhZ2VHcm91cCogbV9ncm91cDsKKwogI2lmIFBMQVRGT1JNKFdJTikgfHwgKFBMQVRG
T1JNKFdYKSAmJiBkZWZpbmVkKF9fV1hNU1dfXykpCiAgICAgICAgIHN0YXRpYyBISU5TVEFOQ0Ug
c19pbnN0YW5jZUhhbmRsZTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorCisjaW5jbHVkZSAiQ2hy
b21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gLS0tLS0tLS0KKworUGFnZUdyb3VwOjpQYWdlR3Jv
dXAoKQorICAgIDogbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQoZmFsc2UpCisgICAgLCBtX3Zpc2l0
ZWRMaW5rVXBkYXRlRGVmZXJyYWxDb3VudCgwKQoreworfQorCitQYWdlR3JvdXA6OlBhZ2VHcm91
cChQYWdlKiBwYWdlKQorICAgIDogbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQoZmFsc2UpCisgICAg
LCBtX3Zpc2l0ZWRMaW5rVXBkYXRlRGVmZXJyYWxDb3VudCgwKQoreworICAgIEFTU0VSVChwYWdl
KTsKKyAgICBtX3BhZ2VzLmFkZChwYWdlKTsKK30KKwordm9pZCBQYWdlR3JvdXA6OmFkZFBhZ2Uo
UGFnZSogcGFnZSkKK3sKKyAgICBBU1NFUlQocGFnZSk7CisgICAgQVNTRVJUKCFtX3BhZ2VzLmNv
bnRhaW5zKHBhZ2UpKTsKKyAgICBtX3BhZ2VzLmFkZChwYWdlKTsKK30KKwordm9pZCBQYWdlR3Jv
dXA6OnJlbW92ZVBhZ2UoUGFnZSogcGFnZSkKK3sKKyAgICBBU1NFUlQocGFnZSk7CisgICAgQVNT
RVJUKG1fcGFnZXMuY29udGFpbnMocGFnZSkpOworICAgIG1fcGFnZXMucmVtb3ZlKHBhZ2UpOwor
fQorCitzdGF0aWMgaW5saW5lIGludCBmaW5kU2xhc2hEb3REb3RTbGFzaChjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICB1bnNpZ25lZCBsb29wTGltaXQgPSBs
ZW5ndGggPCA0ID8gMCA6IGxlbmd0aCAtIDM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxvb3BMaW1pdDsgKytpKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBj
aGFyYWN0ZXJzW2kgKyAxXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy4nICYmIGNo
YXJhY3RlcnNbaSArIDNdID09ICcvJykKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAg
ICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRTbGFzaFNsYXNoKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBpbnQgcG9zaXRpb24pCit7CisgICAg
dW5zaWduZWQgbG9vcExpbWl0ID0gbGVuZ3RoIDwgMiA/IDAgOiBsZW5ndGggLSAxOworICAgIGZv
ciAodW5zaWduZWQgaSA9IHBvc2l0aW9uOyBpIDwgbG9vcExpbWl0OyArK2kpIHsKKyAgICAgICAg
aWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcvJykKKyAg
ICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBp
bmxpbmUgaW50IGZpbmRTbGFzaERvdFNsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoKQoreworICAgIHVuc2lnbmVkIGxvb3BMaW1pdCA9IGxlbmd0aCA8IDMgPyAwIDog
bGVuZ3RoIC0gMjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kp
IHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFd
ID09ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9PSAnLycpCisgICAgICAgICAgICByZXR1cm4g
aTsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY29udGFp
bnNDb2xvblNsYXNoU2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICBpZiAobGVuZ3RoIDwgMykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVu
c2lnbmVkIGxvb3BMaW1pdCA9IGxlbmd0aCAtIDI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxvb3BMaW1pdDsgKytpKQorICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnOicgJiYg
Y2hhcmFjdGVyc1tpICsgMV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcvJykKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGNsZWFuUGF0aChWZWN0b3I8VUNoYXIsIDUxMj4mIHBhdGgpCit7CisgICAgLy8g
RklYTUU6IFNob2xkIG5vdCBkbyB0aGlzIGluIHRoZSBxdWVyeSBvciBhbmNob3IgcGFydC4KKyAg
ICBpbnQgcG9zOworICAgIHdoaWxlICgocG9zID0gZmluZFNsYXNoRG90RG90U2xhc2gocGF0aC5k
YXRhKCksIHBhdGguc2l6ZSgpKSkgIT0gLTEpIHsKKyAgICAgICAgaW50IHByZXYgPSByZXZlcnNl
RmluZChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksICcvJywgcG9zIC0gMSk7CisgICAgICAgIC8v
IGRvbid0IHJlbW92ZSB0aGUgaG9zdCwgaS5lLiBodHRwOi8vZm9vLm9yZy8uLi9mb28uaHRtbAor
ICAgICAgICBpZiAocHJldiA8IDAgfHwgKHByZXYgPiAzICYmIHBhdGhbcHJldiAtIDJdID09ICc6
JyAmJiBwYXRoW3ByZXYgLSAxXSA9PSAnLycpKQorICAgICAgICAgICAgcGF0aC5yZW1vdmUocG9z
LCAzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGF0aC5yZW1vdmUocHJldiwgcG9zIC0g
cHJldiArIDMpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBTaG9sZCBub3QgZG8gdGhpcyBpbiB0
aGUgcXVlcnkgcGFydC4KKyAgICAvLyBTZXQgcmVmUG9zIHRvIC0yIHRvIG1lYW4gIkkgaGF2ZW4n
dCBsb29rZWQgZm9yIHRoZSBhbmNob3IgeWV0Ii4KKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHdh
c3RlIGEgZnVuY3Rpb24gY2FsbCBvbiB0aGUgc2VhcmNoIGZvciB0aGUgdGhlIGFuY2hvcgorICAg
IC8vIGluIHRoZSB2YXN0IG1ham9yaXR5IG9mIGNhc2VzIHdoZXJlIHRoZXJlIGlzIG5vICIvLyIg
aW4gdGhlIHBhdGguCisgICAgcG9zID0gMDsKKyAgICBpbnQgcmVmUG9zID0gLTI7CisgICAgd2hp
bGUgKChwb3MgPSBmaW5kU2xhc2hTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHBvcykp
ICE9IC0xKSB7CisgICAgICAgIGlmIChyZWZQb3MgPT0gLTIpCisgICAgICAgICAgICByZWZQb3Mg
PSBmaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJyMnKTsKKyAgICAgICAgaWYgKHJlZlBv
cyA+IDAgJiYgcG9zID49IHJlZlBvcykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlm
IChwb3MgPT0gMCB8fCBwYXRoW3BvcyAtIDFdICE9ICc6JykKKyAgICAgICAgICAgIHBhdGgucmVt
b3ZlKHBvcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyArPSAyOworICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBTaG9sZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBh
cnQuCisgICAgd2hpbGUgKChwb3MgPSBmaW5kU2xhc2hEb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0
aC5zaXplKCkpKSAhPSAtMSkKKyAgICAgICAgcGF0aC5yZW1vdmUocG9zLCAyKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIG1hdGNoTGV0dGVyKFVDaGFyIGMsIFVDaGFyIGxvd2VyY2FzZUxldHRl
cikKK3sKKyAgICByZXR1cm4gKGMgfCAweDIwKSA9PSBsb3dlcmNhc2VMZXR0ZXI7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBuZWVkc1RyYWlsaW5nU2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoIDwgNikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1swXSwgJ2gnKQorICAg
ICAgICAgICAgfHwgbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1sxXSwgJ3QnKQorICAgICAgICAgICAg
fHwgbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1syXSwgJ3QnKQorICAgICAgICAgICAgfHwgbWF0Y2hM
ZXR0ZXIoY2hhcmFjdGVyc1szXSwgJ3AnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghKGNoYXJhY3RlcnNbNF0gPT0gJzonCisgICAgICAgICAgICB8fCAobWF0Y2hMZXR0ZXIoY2hh
cmFjdGVyc1s0XSwgJ3MnKSAmJiBjaGFyYWN0ZXJzWzVdID09ICc6JykpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBwb3MgPSBjaGFyYWN0ZXJzWzRdID09ICc6JyA/IDUg
OiA2OworCisgICAgLy8gU2tpcCBpbml0aWFsIHR3byBzbGFzaGVzIGlmIHByZXNlbnQuCisgICAg
aWYgKHBvcyArIDEgPCBsZW5ndGggJiYgY2hhcmFjdGVyc1twb3NdID09ICcvJyAmJiBjaGFyYWN0
ZXJzW3BvcyArIDFdID09ICcvJykKKyAgICAgICAgcG9zICs9IDI7CisKKyAgICAvLyBGaW5kIG5l
eHQgc2xhc2guCisgICAgd2hpbGUgKHBvcyA8IGxlbmd0aCAmJiBjaGFyYWN0ZXJzW3Bvc10gIT0g
Jy8nKQorICAgICAgICArK3BvczsKKworICAgIHJldHVybiBwb3MgPT0gbGVuZ3RoOworfQorCiti
b29sIFBhZ2VHcm91cDo6aXNMaW5rVmlzaXRlZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0
b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQoreworICAgIGlmICghbV92aXNpdGVkTGlua3NQb3B1
bGF0ZWQpIHsKKyAgICAgICAgbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQgPSB0cnVlOworICAgICAg
ICBBU1NFUlQoIW1fcGFnZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgZGVmZXJWaXNpdGVkTGlua1Vw
ZGF0ZXMoKTsKKyAgICAgICAgKCptX3BhZ2VzLmJlZ2luKCkpLT5jaHJvbWUoKS0+Y2xpZW50KCkt
PnBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CisgICAgICAgIHJlc3VtZVZpc2l0ZWRMaW5rVXBkYXRl
cygpOworICAgIH0KKworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gYXR0cmlidXRlVVJM
LmNoYXJhY3RlcnMoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVVUkwubGVuZ3Ro
KCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJ
WE1FOiBJdCBpcyBzdHJhbmdlIHRoYXQgd2UgZG8gbm90IGRvIGZ1cnRoZXIgcHJvY2Vzc2luZyBv
biBzdHJpbmdzIHRoYXQgaGF2ZSAiOi8vIiBpbiB0aGVtLgorICAgIC8vIFRoYXQncyBjbGVhcmx5
IGluY29ycmVjdCBmb3IgYXQgbGVhc3QgdGhlc2UgcmVhc29uczoKKyAgICAvLyAgICAxKSBUaGUg
IjovLyIgY291bGQgYmUgaW4gdGhlIHF1ZXJ5IG9yIGFuY2hvci4KKyAgICAvLyAgICAyKSBUaGUg
VVJMJ3MgcGF0aCBjb3VsZCBoYXZlIGEgIi8uLyIgb3IgYSAiLy4uLyIgb3IgYSAiLy8iIHNlcXVl
bmNlIGluIGl0LgorCisgICAgLy8gRklYTUU6IG5lZWRzVHJhaWxpbmdTbGFzaCBkb2VzIG5vdCBw
cm9wZXJseSByZXR1cm4gdHJ1ZSBmb3IgYSBVUkwgdGhhdCBoYXMgbm8gcGF0aCwgYnV0IGRvZXMK
KyAgICAvLyBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yLgorCisgICAgYm9vbCBoYXNDb2xvblNsYXNo
U2xhc2ggPSBjb250YWluc0NvbG9uU2xhc2hTbGFzaChjaGFyYWN0ZXJzLCBsZW5ndGgpOworCisg
ICAgaWYgKGhhc0NvbG9uU2xhc2hTbGFzaCAmJiAhbmVlZHNUcmFpbGluZ1NsYXNoKGNoYXJhY3Rl
cnMsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmNvbnRhaW5z
KFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpOworCisgICAgVmVj
dG9yPFVDaGFyLCA1MTI+IGJ1ZmZlcjsKKworICAgIC8vIFRoaXMgaXMgYSBwb29yIG1hbidzIGNv
bXBsZXRlVVJMLiBGYXN0ZXIgd2l0aCBsZXNzIG1lbW9yeSBhbGxvY2F0aW9uLgorICAgIC8vIEZJ
WE1FOiBJdCdzIG1pc3NpbmcgYSBsb3Qgb2Ygd2hhdCBjb21wbGV0ZVVSTCBkb2VzIGFuZCB3aGF0
IEtVUkwgZG9lcy4KKyAgICAvLyBGSVhNRTogTW92ZSB0aGlzIGludG8gS1VSTD8gT3IgRG9jdW1l
bnQ/IEV2ZW4gdGhlIGZhc3QgdmVyc2lvbiBzaG91bGQgYmUgaW4gdGhlIHJpZ2h0IHBsYWNlLAor
ICAgIC8vIHJhdGhlciB0aGFuIGhlcmUuCisKKyAgICBpZiAoaGFzQ29sb25TbGFzaFNsYXNoKSB7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluY29ycmVjdCBmb3IgVVJMcyB0aGF0IGhhdmUg
YSBxdWVyeSBvciBhbmNob3I7IHRoZSAiLyIgbmVlZHMgdG8gZ28gYXQgdGhlCisgICAgICAgIC8v
IGVuZCBvZiB0aGUgcGF0aCwgKmJlZm9yZSogdGhlIHF1ZXJ5IG9yIGFuY2hvci4KKyAgICAgICAg
YnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICBidWZmZXIuYXBwZW5k
KCcvJyk7CisgICAgICAgIHJldHVybiBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmNvbnRhaW5zKFN0cmlu
Z0ltcGw6OmNvbXB1dGVIYXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpKTsKKyAgICB9
CisKKyAgICBjb25zdCBLVVJMJiBiYXNlVVJMID0gZG9jdW1lbnQtPmJhc2VVUkwoKTsKKyAgICBz
d2l0Y2ggKGNoYXJhY3RlcnNbMF0pIHsKKyAgICAgICAgY2FzZSAnLyc6CisgICAgICAgICAgICBi
dWZmZXIuYXBwZW5kKGJhc2VVUkwuc3RyaW5nKCkuY2hhcmFjdGVycygpLCBiYXNlVVJMLnBhdGhT
dGFydCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcjJzoKKyAgICAgICAg
ICAgIGJ1ZmZlci5hcHBlbmQoYmFzZVVSTC5zdHJpbmcoKS5jaGFyYWN0ZXJzKCksIGJhc2VVUkwu
cGF0aEVuZCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnVmZmVyLmFwcGVuZChiYXNlVVJMLnN0cmluZygpLmNoYXJhY3RlcnMoKSwgYmFzZVVS
TC5wYXRoQWZ0ZXJMYXN0U2xhc2goKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAg
YnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIGNsZWFuUGF0aChidWZmZXIp
OworICAgIGlmIChuZWVkc1RyYWlsaW5nU2xhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUo
KSkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5jb3JyZWN0IGZvciBVUkxzIHRoYXQg
aGF2ZSBhIHF1ZXJ5IG9yIGFuY2hvcjsgdGhlICIvIiBuZWVkcyB0byBnbyBhdCB0aGUKKyAgICAg
ICAgLy8gZW5kIG9mIHRoZSBwYXRoLCAqYmVmb3JlKiB0aGUgcXVlcnkgb3IgYW5jaG9yLgorICAg
ICAgICBidWZmZXIuYXBwZW5kKCcvJyk7CisgICAgfQorCisgICAgcmV0dXJuIG1fdmlzaXRlZExp
bmtIYXNoZXMuY29udGFpbnMoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goYnVmZmVyLmRhdGEoKSwg
YnVmZmVyLnNpemUoKSkpOworfQorCit2b2lkIFBhZ2VHcm91cDo6YWRkVmlzaXRlZExpbmsoY29u
c3QgS1VSTCYgdXJsKQoreworICAgIEFTU0VSVCghdXJsLmlzRW1wdHkoKSk7CisgICAgbV92aXNp
dGVkTGlua0hhc2hlcy5hZGQodXJsLnN0cmluZygpLmltcGwoKS0+aGFzaCgpKTsKK30KKwordm9p
ZCBQYWdlR3JvdXA6OmFkZFZpc2l0ZWRMaW5rKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoKQoreworICAgIG1fdmlzaXRlZExpbmtIYXNoZXMuYWRkKFN0cmluZ0ltcGw6OmNv
bXB1dGVIYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpOworfQorCit2b2lkIFBhZ2VHcm91cDo6cmVt
b3ZlVmlzaXRlZExpbmtzKCkKK3sKKyAgICBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmNsZWFyKCk7Cit9
CisKK3ZvaWQgUGFnZUdyb3VwOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQoreworICAgIFBhZ2U6
OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpOworfQorCit2b2lkIFBhZ2VHcm91cDo6ZGVmZXJWaXNp
dGVkTGlua1VwZGF0ZXMoKQoreworICAgICsrbV92aXNpdGVkTGlua1VwZGF0ZURlZmVycmFsQ291
bnQ7CisgICAgQVNTRVJUKG1fdmlzaXRlZExpbmtVcGRhdGVEZWZlcnJhbENvdW50KTsKK30KKwor
dm9pZCBQYWdlR3JvdXA6OnJlc3VtZVZpc2l0ZWRMaW5rVXBkYXRlcygpCit7CisgICAgQVNTRVJU
KG1fdmlzaXRlZExpbmtVcGRhdGVEZWZlcnJhbENvdW50KTsKKyAgICAtLW1fdmlzaXRlZExpbmtV
cGRhdGVEZWZlcnJhbENvdW50OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6
IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZUdyb3Vw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
UGFnZUdyb3VwX2gKKyNkZWZpbmUgUGFnZUdyb3VwX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7CisgICAgY2xhc3MgRG9jdW1lbnQ7CisgICAg
Y2xhc3MgS1VSTDsKKyAgICBjbGFzcyBQYWdlOworCisgICAgY2xhc3MgUGFnZUdyb3VwIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFBhZ2VHcm91cCgpOworICAgICAgICBQYWdlR3JvdXAoUGFnZSop
OworCisgICAgICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcygpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZXM7IH0KKworICAgICAgICB2b2lkIGFkZFBhZ2UoUGFnZSopOworICAgICAgICB2b2lk
IHJlbW92ZVBhZ2UoUGFnZSopOworCisgICAgICAgIGJvb2wgaXNMaW5rVmlzaXRlZChEb2N1bWVu
dCosIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUpOworCisgICAgICAgIHZvaWQg
YWRkVmlzaXRlZExpbmsoY29uc3QgS1VSTCYpOworICAgICAgICB2b2lkIGFkZFZpc2l0ZWRMaW5r
KGNvbnN0IFVDaGFyKiwgc2l6ZV90KTsKKyAgICAgICAgdm9pZCByZW1vdmVWaXNpdGVkTGlua3Mo
KTsKKyAgICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7CisKKyAgICAg
ICAgdm9pZCBkZWZlclZpc2l0ZWRMaW5rVXBkYXRlcygpOworICAgICAgICB2b2lkIHJlc3VtZVZp
c2l0ZWRMaW5rVXBkYXRlcygpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgSGFzaFNldDxQYWdl
Kj4gbV9wYWdlczsKKyAgICAgICAgSGFzaFNldDx1bnNpZ25lZD4gbV92aXNpdGVkTGlua0hhc2hl
czsKKyAgICAgICAgYm9vbCBtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRlZDsKKyAgICAgICAgdW5zaWdu
ZWQgbV92aXNpdGVkTGlua1VwZGF0ZURlZmVycmFsQ291bnQ7CisgICAgfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorICAgIAorI2VuZGlmIC8vIFBhZ2VHcm91cF9oCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9s
LXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9HbG9iYWxIaXN0b3J5
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvR2xvYmFsSGlzdG9yeU1hYy5t
bQkocmV2aXNpb24gMzA2OTQpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL0dsb2JhbEhpc3RvcnlNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMzkgKzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJHbG9iYWxIaXN0b3J5LmgiCi0KLSNpbXBvcnQgIldlYkNv
cmVIaXN0b3J5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBoaXN0b3J5Q29udGFp
bnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyB0
aGUgb3RoZXIgc2lkZSBvZiB0aGUgYnJpZGdlIGlzIGNhcmVmdWwgbm90IHRvIHRocm93IGV4Y2Vw
dGlvbnMgaGVyZQotICAgIHJldHVybiBbW1dlYkNvcmVIaXN0b3J5IGhpc3RvcnlQcm92aWRlcl0g
Y29udGFpbnNVUkw6Y2hhcmFjdGVycyBsZW5ndGg6bGVuZ3RoXTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorLy8gZGVsZXRlIG1lCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDMwNjk0
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDYg
KzI2NCw4IEBAIGlubGluZSBib29sIEtVUkw6OnByb3RvY29sSXMoY29uc3QgU3RyaW4KIAogS1VS
TDo6S1VSTCgpCiAgICAgOiBtX2lzVmFsaWQoZmFsc2UpCisgICAgLCBwb3J0RW5kUG9zKDApCisg
ICAgLCBwYXRoRW5kUG9zKDApCiB7CiB9CiAKQEAgLTMyMCw2ICszMjIsOCBAQCB2b2lkIEtVUkw6
OmluaXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgCiAgICAgaWYgKCFiYXNlLm1faXNWYWxpZCAm
JiAhYmFzZS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9zdHJpbmcgPSByZWxhdGl2ZTsKICAgICAg
ICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIHBvcnRFbmRQb3MgPSAwOworICAgICAgICBw
YXRoRW5kUG9zID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzkzLDYgKzM5Nyw4
IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCAKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIG1fc3RyaW5nID0gcmVsYXRpdmU7CiAgICAgICAgICAg
ICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcG9ydEVuZFBvcyA9IDA7
CisgICAgICAgICAgICAgICAgcGF0aEVuZFBvcyA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTUwNSw3ICs1MTEsNyBAQCB2b2lkIEtVUkw6Omlu
aXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgCiAKIGJvb2wgS1VSTDo6aGFzUGF0aCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1faXNWYWxpZCAmJiBwYXRoRW5kUG9zICE9IHBvcnRFbmRQb3M7Cisg
ICAgcmV0dXJuIHBhdGhFbmRQb3MgIT0gcG9ydEVuZFBvczsKIH0KIAogU3RyaW5nIEtVUkw6Omxh
c3RQYXRoQ29tcG9uZW50KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCShyZXZpc2lvbiAzMDY5NCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNiArMTQwLDEw
IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBjb25zdCBTdHJpbmcmKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmc7IH0KICAgICBvcGVyYXRvciBLSlM6OlVTdHJpbmcoKSBjb25zdCB7IHJldHVybiBt
X3N0cmluZzsgfQogCisgICAgdW5zaWduZWQgcGF0aFN0YXJ0KCkgY29uc3QgeyByZXR1cm4gcG9y
dEVuZFBvczsgfQorICAgIHVuc2lnbmVkIHBhdGhFbmQoKSBjb25zdCB7IHJldHVybiBwYXRoRW5k
UG9zOyB9CisgICAgdW5zaWduZWQgcGF0aEFmdGVyTGFzdFNsYXNoKCkgY29uc3QgeyByZXR1cm4g
cGF0aEVuZFBvczsgfQorCiAjaWYgUExBVEZPUk0oQ0YpCiAgICAgS1VSTChDRlVSTFJlZik7CiAg
ICAgQ0ZVUkxSZWYgY3JlYXRlQ0ZVUkwoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMzA2OTQpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw2IEBACiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CiAjaW5jbHVkZSAiRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJHbG9iYWxIaXN0
b3J5LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKQEAgLTU4LDggKzU3LDYgQEAgVmVjdG9yPGNoYXI+
IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdAogLyogQ29tcGxldGVseSBlbXB0eSBzdHVicyAo
bW9zdGx5IHRvIGFsbG93IERSVCB0byBydW4pOiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1ib29sIFdlYkNvcmU6Omhpc3Rv
cnlDb250YWlucyhjb25zdCBVQ2hhciosIHVuc2lnbmVkKSB7IHJldHVybiBmYWxzZTsgfQotCiBQ
bHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gUGx1Z2luU2V0KCk7IH0KIFZlY3RvcjxTdHJpbmc+IFBsdWdp
bkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBWZWN0b3I8U3RyaW5nPigpOyB9CiBib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBs
dWdpblBhdGgoY29uc3QgU3RyaW5nJikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
ZmFsc2U7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVIaXN0b3J5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUhpc3RvcnkuaAkocmV2aXNp
b24gMzA2OTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlSGlzdG9yeS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDM1ICsxIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotQHByb3RvY29sIFdlYkNv
cmVIaXN0b3J5UHJvdmlkZXIgPE5TT2JqZWN0PgotLSAoQk9PTCljb250YWluc1VSTDooY29uc3Qg
VW5pQ2hhciopdW5pY29kZSBsZW5ndGg6KHVuc2lnbmVkKWxlbmd0aDsKLUBlbmQKLQotQGludGVy
ZmFjZSBXZWJDb3JlSGlzdG9yeSA6IE5TT2JqZWN0Ci0KLSsgKHZvaWQpc2V0SGlzdG9yeVByb3Zp
ZGVyOihpZDxXZWJDb3JlSGlzdG9yeVByb3ZpZGVyPiloOwotKyAoaWQ8V2ViQ29yZUhpc3RvcnlQ
cm92aWRlcj4paGlzdG9yeVByb3ZpZGVyOwotCi1AZW5kCisjZXJyb3IKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYkNvcmVIaXN0b3J5Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViQ29yZUhpc3RvcnkubQkocmV2aXNpb24gMzA2OTQpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJDb3JlSGlzdG9yeS5tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ3ICsxIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLQotI2ltcG9ydCAiV2Vi
Q29yZUhpc3RvcnkuaCIKLQotQGltcGxlbWVudGF0aW9uIFdlYkNvcmVIaXN0b3J5Ci0KLXN0YXRp
YyBpZDxXZWJDb3JlSGlzdG9yeVByb3ZpZGVyPiBfaGlzdG9yeVByb3ZpZGVyID0gbmlsOwotCi0r
ICh2b2lkKXNldEhpc3RvcnlQcm92aWRlcjogKGlkPFdlYkNvcmVIaXN0b3J5UHJvdmlkZXI+KWgK
LXsKLSAgICBpZiAoX2hpc3RvcnlQcm92aWRlciAhPSBoKXsKLSAgICAgICAgW19oaXN0b3J5UHJv
dmlkZXIgcmVsZWFzZV07Ci0gICAgICAgIF9oaXN0b3J5UHJvdmlkZXIgPSBbaCByZXRhaW5dOwot
ICAgIH0KLX0KLQotKyAoaWQ8V2ViQ29yZUhpc3RvcnlQcm92aWRlcj4paGlzdG9yeVByb3ZpZGVy
Ci17Ci0gICAgcmV0dXJuIF9oaXN0b3J5UHJvdmlkZXI7Ci19Ci0KLUBlbmQKKy8vIGRlbGV0ZSBt
ZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2
aXNpb24gMzA2OTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJGaWxlU3lzdGVt
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiR2xvYmFsSGlzdG9yeS5oIgogI2luY2x1ZGUgIkljb25Mb2FkZXIuaCIKICNp
bmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIktVUkwuaCIKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vd2luL1dlYkNvcmVIaXN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3dpbi9XZWJDb3JlSGlzdG9yeS5jcHAJKHJldmlzaW9uIDMwNjk0KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS93aW4vV2ViQ29yZUhpc3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ3ICsx
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJD
b3JlSGlzdG9yeS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBXZWJDb3JlSGlz
dG9yeVByb3ZpZGVyKiBfaGlzdG9yeVByb3ZpZGVyID0gMDsKLQotdm9pZCBXZWJDb3JlSGlzdG9y
eTo6c2V0SGlzdG9yeVByb3ZpZGVyKFdlYkNvcmVIaXN0b3J5UHJvdmlkZXIqIGgpCi17Ci0gICAg
aWYgKF9oaXN0b3J5UHJvdmlkZXIgPT0gaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVsZXRl
IF9oaXN0b3J5UHJvdmlkZXI7Ci0gICAgX2hpc3RvcnlQcm92aWRlciA9IGg7Ci19Ci0KLVdlYkNv
cmVIaXN0b3J5UHJvdmlkZXIqIFdlYkNvcmVIaXN0b3J5OjpoaXN0b3J5UHJvdmlkZXIoKQotewot
ICAgIHJldHVybiBfaGlzdG9yeVByb3ZpZGVyOwotfQotCi19CisvLyBkZWxldGUgbWUKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vd2luL1dlYkNvcmVIaXN0b3J5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vV2ViQ29yZUhpc3RvcnkuaAkocmV2aXNpb24gMzA2OTQpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3dpbi9XZWJDb3JlSGlzdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDQ2ICsxIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6
Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSov
Ci0KLSNpZm5kZWYgV0VCQ09SRV9ISVNUT1JZX0hfCi0jZGVmaW5lIFdFQkNPUkVfSElTVE9SWV9I
XwotCi0jaW5jbHVkZSA8dW5pY29kZS91bWFjaGluZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIFdlYkNvcmVIaXN0b3J5UHJvdmlkZXIgewotcHVibGljOgotICAgIHZpcnR1YWwg
Ym9vbCBjb250YWluc1VSTChjb25zdCBVQ2hhciogdW5pY29kZSwgdW5zaWduZWQgbGVuZ3RoKSA9
IDA7Ci19OwotCi1jbGFzcyBXZWJDb3JlSGlzdG9yeSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgc2V0SGlzdG9yeVByb3ZpZGVyKFdlYkNvcmVIaXN0b3J5UHJvdmlkZXIqKTsKLSAgICBzdGF0
aWMgV2ViQ29yZUhpc3RvcnlQcm92aWRlciogaGlzdG9yeVByb3ZpZGVyKCk7Ci19OwotCi19Ci0K
LSNlbmRpZgorI2Vycm9yCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCShyZXZpc2lvbiAzMDY5NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9y
YXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDEwICsxMTMsNiBAQCBib29s
IFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtCiBzdGF0aWMgV2ViQ29yZTo6Q3Vy
c29yIGxvY2FsQ3Vyc29yOwogY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBXZWJDb3JlOjptb3ZlQ3Vy
c29yKCkgeyByZXR1cm4gbG9jYWxDdXJzb3I7IH0KIAotbmFtZXNwYWNlIFdlYkNvcmUgewotICAg
IGJvb2wgaGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZh
bHNlOyB9Ci19Ci0KIHZvaWQgV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFyeShVQ2hhciBjb25zdCog
c3RyLGludCBsZW4saW50IHBvc2l0aW9uLGludCogc3RhcnQsIGludCogZW5kKSB7IG5vdEltcGxl
bWVudGVkKCk7ICpzdGFydD1wb3NpdGlvbjsgKmVuZD1wb3NpdGlvbjsgfQogCiBQbHVnaW5TZXQg
UGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gUGx1Z2luU2V0KCk7IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL2JyZWFr
X2xpbmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5j
cHAJKHJldmlzaW9uIDMwNjk0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiQ2hhcmFjdGVyTmFt
ZXMuaCIKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogCi0jaWYgUExBVEZPUk0oTUFD
KQorI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiAjaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVT
ZXJ2aWNlcy5oPgogI2VuZGlmCiAKQEAgLTQ0LDE3ICs0NCwxOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgaXNCcmVha2FibGVTcGFjZShVQ2hhCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wg
c2hvdWxkQnJlYWtBZnRlcihVQ2hhciBjaCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRCcmVh
a0FmdGVyKFVDaGFyIGNoYXJhY3RlcikKIHsKICAgICAvLyBNYXRjaCBXaW5JRSdzIGJyZWFraW5n
IHN0cmF0ZWd5LCB3aGljaCBpcyB0byBhbHdheXMgYWxsb3cgYnJlYWtzIGFmdGVyIGh5cGhlbnMg
YW5kIHF1ZXN0aW9uIG1hcmtzLgotICAgIC8vIEZJWE1FOiBpdCBhcHBlYXJzIHRoYXQgSUUgYmVo
YXZpb3IgaXMgbW9yZSBjb21wbGV4LCBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NDc1Pi4KLSAgICBzd2l0Y2ggKGNoKSB7CisgICAgLy8gRklYTUU6IEl0IGFw
cGVhcnMgdGhhdCBJRSBiZWhhdmlvciBpcyBtb3JlIGNvbXBsZXg7IHNlZSA8aHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NzU+LgorICAgIHN3aXRjaCAoY2hhcmFjdGVy
KSB7CiAgICAgICAgIGNhc2UgJy0nOgogICAgICAgICBjYXNlICc/JzoKICAgICAgICAgY2FzZSBz
b2Z0SHlwaGVuOgotICAgICAgICAvLyBGSVhNRTogY2FzZXMgZm9yIGlkZW9ncmFwaGljQ29tbWEg
YW5kIGlkZW9ncmFwaGljRnVsbFN0b3AgYXJlIGEgd29ya2Fyb3VuZCBmb3IgYW4gaXNzdWUgaW4g
VW5pY29kZSA1LjAKLSAgICAgICAgLy8gd2hpY2ggaXMgbGlrZWx5IHRvIGJlIHJlc29sdmVkIGlu
IFVuaWNvZGUgNS4xIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQx
MT4uCi0gICAgICAgIC8vIFdlIG1heSB3YW50IHRvIHJlbW92ZSBvciBjb25kaXRpb25hbGl6ZSB0
aGlzIHdvcmthcm91bmQgYXQgc29tZSBwb2ludC4KKyAgICAgICAgLy8gRklYTUU6IFRoZXNlIGNh
c2VzIGZvciBpZGVvZ3JhcGhpY0NvbW1hIGFuZCBpZGVvZ3JhcGhpY0Z1bGxTdG9wIGFyZSBhIHdv
cmthcm91bmQgZm9yIGFuIGlzc3VlIGluCisgICAgICAgIC8vIFVuaWNvZGUgNS4wIHdoaWNoIGlz
IGxpa2VseSB0byBiZSByZXNvbHZlZCBpbiBVbmljb2RlIDUuMS4gSWYgdGhlIGlzc3VlIGlzIHJl
c29sdmVkIGluIDUuMSBhbmQgdGhlbgorICAgICAgICAvLyBpbiBJQ1UgYW5kIG90aGVyIHVuZGVy
bHlpbmcgbGlicmFyaWVzLCB0aGVuIHdlIG1heSB3YW50IHRvIHJlbW92ZSBvciBjb25kaXRpb25h
bGl6ZSB0aGlzIHdvcmthcm91bmQKKyAgICAgICAgLy8gYXQgc29tZSBwb2ludDsgc2VlIDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQxMT4uCiAgICAgICAgIGNhc2Ug
aWRlb2dyYXBoaWNDb21tYToKICAgICAgICAgY2FzZSBpZGVvZ3JhcGhpY0Z1bGxTdG9wOgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02Myw5ICs2NCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzaG91bGRCcmVha0FmdGVyKFVDaGEKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBu
ZWVkc0xpbmVCcmVha0l0ZXJhdG9yKFVDaGFyIGNoKQorc3RhdGljIGlubGluZSBib29sIG5lZWRz
TGluZUJyZWFrSXRlcmF0b3IoVUNoYXIgY2hhcmFjdGVyKQogewotICAgIHJldHVybiBjaCA+IDB4
N0YgJiYgY2ggIT0gbm9CcmVha1NwYWNlOworICAgIHJldHVybiBjaGFyYWN0ZXIgPiAweDdGICYm
IGNoYXJhY3RlciAhPSBub0JyZWFrU3BhY2U7CiB9CiAKICNpZmRlZiBCVUlMRElOR19PTl9USUdF
UgpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VFbXB0eUNsaWVudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUVtcHR5Q2xpZW50cy5oCShy
ZXZpc2lvbiAzMDY5NCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRW1wdHlDbGll
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHByaW50KEZyYW1lKikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWRE
YXRhYmFzZVF1b3RhKEZyYW1lKiwgY29uc3QgU3RyaW5nJikgeyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgcG9wdWxhdGVWaXNpdGVkTGlua3MoKSB7IH0KIH07CiAKIGNsYXNzIFNWR0VtcHR5RnJhbWVM
b2FkZXJDbGllbnQgOiBwdWJsaWMgRnJhbWVMb2FkZXJDbGllbnQgewpAQCAtMTMxLDE1ICsxMzMs
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0KCkgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgpIHsgfQogICAgIAotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVIaXN0b3J5Rm9yQ29tbWl0KCkgeyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUhpc3RvcnlGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24oKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlSGlzdG9yeUZvclJlbG9hZCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVIaXN0b3J5Rm9yU3RhbmRhcmRMb2FkKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhp
c3RvcnlGb3JJbnRlcm5hbExvYWQoKSB7IH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
SGlzdG9yeUFmdGVyQ2xpZW50UmVkaXJlY3QoKSB7IH0KLSAgICAKICAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29waWVzT25TY3JvbGwoKSB7IH0KICAgICAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRldGFj
aGVkRnJvbVBhcmVudDIoKSB7IH0KSW5kZXg6IFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDMwNjk0KQorKysgV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNiArMjc3LDcgQEAKIAkJOTM5ODEx
MkYwODI0QkYwMTAwOERGMDM4IC8qIFNlY3VyaXR5LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMEU4MUUwMDU4NTNBQzAwMEFEMDg5
MSAvKiBTZWN1cml0eS5mcmFtZXdvcmsgKi87IH07CiAJCTkzRUIxNzhEMDlGODhENDYwMDkxRjhG
RiAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzRUIxNzhDMDlGODhENDYwMDkxRjhGRiAvKiBXZWJTeXN0ZW1JbnRl
cmZhY2UubSAqLzsgfTsKIAkJOTNFQjE3OEYwOUY4OEQ1MTAwOTFGOEZGIC8qIFdlYlN5c3RlbUlu
dGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNFQjE3OEUwOUY4OEQ1MTAwOTFGOEZGIC8qIFdlYlN5c3RlbUludGVyZmFjZS5oICovOyB9Owor
CQk5M0ZERTkzMzBENzlDQUYzMDA3NEYwMjkgLyogV2ViSGlzdG9yeUludGVybmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0ZERTkzMjBENzlDQUYz
MDA3NEYwMjkgLyogV2ViSGlzdG9yeUludGVybmFsLmggKi87IH07CiAJCUE3MDkzNkFGMEI1NjA4
REMwMENEQjQ4RSAvKiBXZWJEcmFnQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzA5MzZBRDBCNTYwOERDMDBDREI0OEUgLyogV2ViRHJhZ0Ns
aWVudC5oICovOyB9OwogCQlBNzA5MzZCMDBCNTYwOERDMDBDREI0OEUgLyogV2ViRHJhZ0NsaWVu
dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MDkz
NkFFMEI1NjA4REMwMENEQjQ4RSAvKiBXZWJEcmFnQ2xpZW50Lm1tICovOyB9OwogCQlBN0QzQzVC
QzBCNTc3M0M1MDAyQ0E0NTAgLyogV2ViUGFzdGVib2FyZEhlbHBlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEM0M1QkEwQjU3NzNDNTAwMkNBNDUw
IC8qIFdlYlBhc3RlYm9hcmRIZWxwZXIuaCAqLzsgfTsKQEAgLTUxMCw2ICs1MTEsNyBAQAogCQk5
M0Q2MjNERDA1MUU3OTFGMDAyRjQ3REQgLyogbGliaWN1Y29yZS5keWxpYiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHls
aWIiOyBuYW1lID0gbGliaWN1Y29yZS5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmljdWNvcmUu
ZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTkzRUIxNzhDMDlGODhENDYw
MDkxRjhGRiAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5v
YmpjOyBwYXRoID0gV2ViU3lzdGVtSW50ZXJmYWNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzRUIxNzhFMDlGODhENTEwMDkxRjhGRiAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3lzdGVtSW50ZXJmYWNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRkRFOTMyMEQ3OUNBRjMwMDc0RjAyOSAvKiBX
ZWJIaXN0b3J5SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
SGlzdG9yeUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlDQUU5RDA3
MDI1MkE0MTMwRUNBMTZFQSAvKiBXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCTlDRTFGOEEzMDJBNUM2RjMwRUNBMkFDRCAvKiBXZWJJbWFnZVJlbmRlcmVyRmFjdG9y
eS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9
IFdlYkltYWdlUmVuZGVyZXJGYWN0b3J5Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk5Q0YwRTI0OTAyMTM2MUIwMEVDQTE2RUEgLyog
V2ViRnJhbWVQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViRnJhbWVQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtODIwLDYgKzgyMiw3IEBACiAJCQkJMjJG
MjE5Q0IwOEQyMzY3MzAwMzBFMDc4IC8qIFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCAqLywK
IAkJCQk2NURBMjYwODA1MkNDMTg3MDBBOTdCMzEgLyogV2ViSGlzdG9yeS5tbSAqLywKIAkJCQlG
NTIwRkIxOTAyMjFERUZEMDFDMUE1MjUgLyogV2ViSGlzdG9yeS5oICovLAorCQkJCTkzRkRFOTMy
MEQ3OUNBRjMwMDc0RjAyOSAvKiBXZWJIaXN0b3J5SW50ZXJuYWwuaCAqLywKIAkJCQkzOTQ0NjA3
RjAyMEY1MEVEMEVDQTE3NjcgLyogV2ViSGlzdG9yeUl0ZW0uaCAqLywKIAkJCQkzOTQ0NjA4MDAy
MEY1MEVEMEVDQTE3NjcgLyogV2ViSGlzdG9yeUl0ZW0ubW0gKi8sCiAJCQkJNTE2RjI5NkYwM0E2
QzQ1QTAwQ0EyRDNBIC8qIFdlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaCAqLywKQEAgLTEzMTcsNiAr
MTMyMCw3IEBACiAJCQkJOTM5ODEwOUIwODI0QkYwMTAwOERGMDM4IC8qIFdlYlZpZXdJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNzEwODI0QkYwMTAwOERGMDM4IC8qIFdlYlZp
ZXdQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA5NzA4MjRCRjAxMDA4REYwMzgg
LyogbnBmdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRkRFOTMzMEQ3OUNBRjMwMDc0
RjAyOSAvKiBXZWJIaXN0b3J5SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViS2l0
L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9IaXN0
b3J5L1dlYkhpc3RvcnkubW0JKHJldmlzaW9uIDMwNjk0KQorKysgV2ViS2l0L21hYy9IaXN0b3J5
L1dlYkhpc3RvcnkubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTggKzI2LDI1IEBA
CiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgIldlYkhpc3RvcnkuaCIKLSNpbXBvcnQgIldl
Ykhpc3RvcnlQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJIaXN0b3J5SW50ZXJuYWwuaCIKKyNpbXBv
cnQgIldlYkhpc3RvcnlJbnRlcm5hbC5oIgogCi0jaW1wb3J0ICJXZWJIaXN0b3J5SXRlbS5oIgog
I2ltcG9ydCAiV2ViSGlzdG9yeUl0ZW1JbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSGlzdG9yeUl0
ZW1Qcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCiAjaW1wb3J0ICJXZWJOU1VS
TEV4dHJhcy5oIgorI2ltcG9ydCA8V2ViQ29yZS9LVVJMLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Bh
Z2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAjaW1wb3J0IDxGb3VuZGF0aW9u
L05TRXJyb3IuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fzc2VydGlvbnMuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvV2ViQ29yZUhpc3RvcnkuaD4KLSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0hhc2hNYXAuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L1JldGFpblB0ci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvVmVjdG9yLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCit0eXBlZGVmIGludDY0X3QgV2ViSGlzdG9yeURhdGVLZXk7
Cit0eXBlZGVmIEhhc2hNYXA8V2ViSGlzdG9yeURhdGVLZXksIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gPiBEYXRlVG9FbnRyaWVzTWFwOwogCiBOU1N0cmluZyAqV2ViSGlzdG9yeUl0ZW1zQWRk
ZWROb3RpZmljYXRpb24gPSBAIldlYkhpc3RvcnlJdGVtc0FkZGVkTm90aWZpY2F0aW9uIjsKIE5T
U3RyaW5nICpXZWJIaXN0b3J5SXRlbXNSZW1vdmVkTm90aWZpY2F0aW9uID0gQCJXZWJIaXN0b3J5
SXRlbXNSZW1vdmVkTm90aWZpY2F0aW9uIjsKQEAgLTU0LDYgKzYxLDQ1IEBAIE5TU3RyaW5nICpE
YXRlc0FycmF5S2V5ID0gQCJXZWJIaXN0b3J5RGEKIAogI2RlZmluZSBjdXJyZW50RmlsZVZlcnNp
b24gMQogCitAaW50ZXJmYWNlIFdlYkhpc3RvcnlQcml2YXRlIDogTlNPYmplY3QgeworQHByaXZh
dGUKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZW50cmllc0J5VVJMOworICAgIERhdGVUb0Vu
dHJpZXNNYXAqIF9lbnRyaWVzQnlEYXRlOworICAgIE5TTXV0YWJsZUFycmF5ICpfb3JkZXJlZExh
c3RWaXNpdGVkRGF5czsKKyAgICBCT09MIGl0ZW1MaW1pdFNldDsKKyAgICBpbnQgaXRlbUxpbWl0
OworICAgIEJPT0wgYWdlSW5EYXlzTGltaXRTZXQ7CisgICAgaW50IGFnZUluRGF5c0xpbWl0Owor
fQorCistICh2b2lkKWFkZEl0ZW06KFdlYkhpc3RvcnlJdGVtICopZW50cnk7CistICh2b2lkKWFk
ZEl0ZW1zOihOU0FycmF5ICopbmV3RW50cmllczsKKy0gKEJPT0wpcmVtb3ZlSXRlbTooV2ViSGlz
dG9yeUl0ZW0gKillbnRyeTsKKy0gKEJPT0wpcmVtb3ZlSXRlbXM6KE5TQXJyYXkgKillbnRyaWVz
OworLSAoQk9PTClyZW1vdmVBbGxJdGVtczsKKy0gKHZvaWQpc2V0TGFzdFZpc2l0ZWRUaW1lSW50
ZXJ2YWw6KE5TVGltZUludGVydmFsKXRpbWUgZm9ySXRlbTooV2ViSGlzdG9yeUl0ZW0gKilpdGVt
OworCistIChOU0FycmF5ICopb3JkZXJlZExhc3RWaXNpdGVkRGF5czsKKy0gKE5TQXJyYXkgKilv
cmRlcmVkSXRlbXNMYXN0VmlzaXRlZE9uRGF5OihOU0NhbGVuZGFyRGF0ZSAqKWNhbGVuZGFyRGF0
ZTsKKy0gKEJPT0wpY29udGFpbnNJdGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmlu
ZzsKKy0gKEJPT0wpY29udGFpbnNVUkw6KE5TVVJMICopVVJMOworLSAoV2ViSGlzdG9yeUl0ZW0g
KilpdGVtRm9yVVJMOihOU1VSTCAqKVVSTDsKKy0gKFdlYkhpc3RvcnlJdGVtICopaXRlbUZvclVS
TFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmc7CisKKy0gKEJPT0wpbG9hZEZyb21VUkw6KE5T
VVJMICopVVJMIGNvbGxlY3REaXNjYXJkZWRJdGVtc0ludG86KE5TTXV0YWJsZUFycmF5ICopZGlz
Y2FyZGVkSXRlbXMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CistIChCT09MKXNhdmVUb1VSTDoo
TlNVUkwgKilVUkwgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKKy0gKE5TQ2FsZW5kYXJEYXRl
KilhZ2VMaW1pdERhdGU7CisKKy0gKHZvaWQpc2V0SGlzdG9yeUl0ZW1MaW1pdDooaW50KWxpbWl0
OworLSAoaW50KWhpc3RvcnlJdGVtTGltaXQ7CistICh2b2lkKXNldEhpc3RvcnlBZ2VJbkRheXNM
aW1pdDooaW50KWxpbWl0OworLSAoaW50KWhpc3RvcnlBZ2VJbkRheXNMaW1pdDsKKworLSAodm9p
ZClhZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cDooUGFnZUdyb3VwJilncm91cDsKKworQGVuZAor
CiBAaW1wbGVtZW50YXRpb24gV2ViSGlzdG9yeVByaXZhdGUKIAogI3ByYWdtYSBtYXJrIE9CSkVD
VCBGUkFNRVdPUksKQEAgLTY5LDkgKzExNSw4IEBAIE5TU3RyaW5nICpEYXRlc0FycmF5S2V5ID0g
QCJXZWJIaXN0b3J5RGEKIAogLSAoaWQpaW5pdAogewotICAgIGlmICghW3N1cGVyIGluaXRdKSB7
CisgICAgaWYgKCFbc3VwZXIgaW5pdF0pCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQogICAg
IAogICAgIF9lbnRyaWVzQnlVUkwgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRd
OwogICAgIF9lbnRyaWVzQnlEYXRlID0gbmV3IERhdGVUb0VudHJpZXNNYXA7CkBAIC04NCw3ICsx
MjksNiBAQCBOU1N0cmluZyAqRGF0ZXNBcnJheUtleSA9IEAiV2ViSGlzdG9yeURhCiAgICAgW19l
bnRyaWVzQnlVUkwgcmVsZWFzZV07CiAgICAgW19vcmRlcmVkTGFzdFZpc2l0ZWREYXlzIHJlbGVh
c2VdOwogICAgIGRlbGV0ZSBfZW50cmllc0J5RGF0ZTsKLSAgICAKICAgICBbc3VwZXIgZGVhbGxv
Y107CiB9CiAKQEAgLTE1Niw3ICsyMDAsNyBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2
YWxGb3JCZWdpbm5pCiAgICAgW2VudHJpZXNGb3JEYXRlIGluc2VydE9iamVjdDplbnRyeSBhdElu
ZGV4Omxvd107CiB9CiAKLS0gKEJPT0wpX3JlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczooV2ViSGlz
dG9yeUl0ZW0gKillbnRyeQorLSAoQk9PTClyZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6KFdlYkhp
c3RvcnlJdGVtICopZW50cnkKIHsKICAgICBXZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5OwogICAg
IEJPT0wgZm91bmREYXRlID0gW3NlbGYgZmluZEtleTomZGF0ZUtleSBmb3JEYXk6W2VudHJ5IGxh
c3RWaXNpdGVkVGltZUludGVydmFsXV07CkBAIC0xNzksMjYgKzIyMywyOCBAQCBXZWJIaXN0b3J5
RGF0ZUtleSB0aW1lSW50ZXJ2YWxGb3JCZWdpbm5pCiAgICAgcmV0dXJuIFlFUzsKIH0KIAotLSAo
Qk9PTClyZW1vdmVJdGVtRm9yVVJMU3RyaW5nOiAoTlNTdHJpbmcgKilVUkxTdHJpbmcKKy0gKEJP
T0wpcmVtb3ZlSXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmcKIHsKLSAgICBX
ZWJIaXN0b3J5SXRlbSAqZW50cnkgPSBbX2VudHJpZXNCeVVSTCBvYmplY3RGb3JLZXk6IFVSTFN0
cmluZ107Ci0gICAgaWYgKGVudHJ5ID09IG5pbCkgeworICAgIFdlYkhpc3RvcnlJdGVtICplbnRy
eSA9IFtfZW50cmllc0J5VVJMIG9iamVjdEZvcktleTpVUkxTdHJpbmddOworICAgIGlmICghZW50
cnkpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICB9CiAKLSAgICBbX2VudHJpZXNCeVVSTCByZW1v
dmVPYmplY3RGb3JLZXk6IFVSTFN0cmluZ107CisgICAgW19lbnRyaWVzQnlVUkwgcmVtb3ZlT2Jq
ZWN0Rm9yS2V5OlVSTFN0cmluZ107CiAgICAgCiAjaWYgQVNTRVJUX0RJU0FCTEVECi0gICAgW3Nl
bGYgX3JlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczplbnRyeV07CisgICAgW3NlbGYgcmVtb3ZlSXRl
bUZyb21EYXRlQ2FjaGVzOmVudHJ5XTsKICNlbHNlCi0gICAgQk9PTCBpdGVtV2FzSW5EYXRlQ2Fj
aGVzID0gW3NlbGYgX3JlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczplbnRyeV07CisgICAgQk9PTCBp
dGVtV2FzSW5EYXRlQ2FjaGVzID0gW3NlbGYgcmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzOmVudHJ5
XTsKICAgICBBU1NFUlQoaXRlbVdhc0luRGF0ZUNhY2hlcyk7CiAjZW5kaWYKIAorICAgIGlmICgh
W19lbnRyaWVzQnlVUkwgY291bnRdKQorICAgICAgICBQYWdlR3JvdXA6OnJlbW92ZUFsbFZpc2l0
ZWRMaW5rcygpOworCiAgICAgcmV0dXJuIFlFUzsKIH0KIAotLSAodm9pZClfYWRkSXRlbVRvRGF0
ZUNhY2hlczooV2ViSGlzdG9yeUl0ZW0gKillbnRyeQorLSAodm9pZClhZGRJdGVtVG9EYXRlQ2Fj
aGVzOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5CiB7CiAgICAgV2ViSGlzdG9yeURhdGVLZXkgZGF0
ZUtleTsKICAgICBpZiAoW3NlbGYgZmluZEtleTomZGF0ZUtleSBmb3JEYXk6W2VudHJ5IGxhc3RW
aXNpdGVkVGltZUludGVydmFsXV0pCkBAIC0yMzUsNyArMjgxLDcgQEAgV2ViSGlzdG9yeURhdGVL
ZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQogICAgICAgICBbb2xkRW50cnkgcmVsZWFzZV07CiAg
ICAgfQogCi0gICAgW3NlbGYgX2FkZEl0ZW1Ub0RhdGVDYWNoZXM6ZW50cnldOworICAgIFtzZWxm
IGFkZEl0ZW1Ub0RhdGVDYWNoZXM6ZW50cnldOwogICAgIFtfZW50cmllc0J5VVJMIHNldE9iamVj
dDplbnRyeSBmb3JLZXk6VVJMU3RyaW5nXTsKIH0KIApAQCAtMjQ0LDEyICsyOTAsMTIgQEAgV2Vi
SGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQogI2lmIEFTU0VSVF9ESVNBQkxF
RAogICAgIFtzZWxmIF9yZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6ZW50cnldOwogI2Vsc2UKLSAg
ICBCT09MIGVudHJ5V2FzUHJlc2VudCA9IFtzZWxmIF9yZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6
ZW50cnldOworICAgIEJPT0wgZW50cnlXYXNQcmVzZW50ID0gW3NlbGYgcmVtb3ZlSXRlbUZyb21E
YXRlQ2FjaGVzOmVudHJ5XTsKICAgICBBU1NFUlQoZW50cnlXYXNQcmVzZW50KTsKICNlbmRpZgog
ICAgIAogICAgIFtlbnRyeSBfc2V0TGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6dGltZV07Ci0gICAg
W3NlbGYgX2FkZEl0ZW1Ub0RhdGVDYWNoZXM6ZW50cnldOworICAgIFtzZWxmIGFkZEl0ZW1Ub0Rh
dGVDYWNoZXM6ZW50cnldOwogCiAgICAgLy8gRG9uJ3Qgc2VuZCBub3RpZmljYXRpb24gdW50aWwg
ZW50cnkgaXMgYmFjayBpbiB0aGUgcmlnaHQgcGxhY2UgaW4gdGhlIGRhdGUgY2FjaGVzLAogICAg
IC8vIHNpbmNlIG9ic2VydmVycyBtaWdodCBmZXRjaCBoaXN0b3J5IGJ5IGRhdGUgd2hlbiB0aGV5
IHJlY2VpdmUgdGhlIG5vdGlmaWNhdGlvbi4KQEAgLTI1Nyw0NyArMzAzLDM4IEBAIFdlYkhpc3Rv
cnlEYXRlS2V5IHRpbWVJbnRlcnZhbEZvckJlZ2lubmkKICAgICAgICAgcG9zdE5vdGlmaWNhdGlv
bk5hbWU6V2ViSGlzdG9yeUl0ZW1DaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDplbnRyeSB1c2Vy
SW5mbzpuaWxdOwogfQogCi0tIChCT09MKXJlbW92ZUl0ZW06IChXZWJIaXN0b3J5SXRlbSAqKWVu
dHJ5CistIChCT09MKXJlbW92ZUl0ZW06KFdlYkhpc3RvcnlJdGVtICopZW50cnkKIHsKLSAgICBX
ZWJIaXN0b3J5SXRlbSAqbWF0Y2hpbmdFbnRyeTsKLSAgICBOU1N0cmluZyAqVVJMU3RyaW5nOwot
Ci0gICAgVVJMU3RyaW5nID0gW2VudHJ5IFVSTFN0cmluZ107CisgICAgTlNTdHJpbmcgKlVSTFN0
cmluZyA9IFtlbnRyeSBVUkxTdHJpbmddOwogCiAgICAgLy8gSWYgdGhpcyBleGFjdCBvYmplY3Qg
aXNuJ3Qgc3RvcmVkLCB0aGVuIG1ha2Ugbm8gY2hhbmdlLgogICAgIC8vIEZJWE1FOiBJcyB0aGlz
IHRoZSByaWdodCBiZWhhdmlvciBpZiB0aGlzIGVudHJ5IGlzbid0IHByZXNlbnQsIGJ1dCBhbm90
aGVyIGVudHJ5IGZvciB0aGUgc2FtZSBVUkwgaXM/CiAgICAgLy8gTWF5YmUgbmVlZCB0byBjaGFu
Z2UgdGhlIEFQSSB0byBtYWtlIHNvbWV0aGluZyBsaWtlIHJlbW92ZUVudHJ5Rm9yVVJMU3RyaW5n
IHB1YmxpYyBpbnN0ZWFkLgotICAgIG1hdGNoaW5nRW50cnkgPSBbX2VudHJpZXNCeVVSTCBvYmpl
Y3RGb3JLZXk6IFVSTFN0cmluZ107Ci0gICAgaWYgKG1hdGNoaW5nRW50cnkgIT0gZW50cnkpIHsK
KyAgICBXZWJIaXN0b3J5SXRlbSAqbWF0Y2hpbmdFbnRyeSA9IFtfZW50cmllc0J5VVJMIG9iamVj
dEZvcktleTpVUkxTdHJpbmddOworICAgIGlmIChtYXRjaGluZ0VudHJ5ICE9IGVudHJ5KQogICAg
ICAgICByZXR1cm4gTk87Ci0gICAgfQogCi0gICAgW3NlbGYgcmVtb3ZlSXRlbUZvclVSTFN0cmlu
ZzogVVJMU3RyaW5nXTsKKyAgICBbc2VsZiByZW1vdmVJdGVtRm9yVVJMU3RyaW5nOlVSTFN0cmlu
Z107CiAKICAgICByZXR1cm4gWUVTOwogfQogCi0tIChCT09MKXJlbW92ZUl0ZW1zOiAoTlNBcnJh
eSAqKWVudHJpZXMKKy0gKEJPT0wpcmVtb3ZlSXRlbXM6KE5TQXJyYXkgKillbnRyaWVzCiB7Ci0g
ICAgaW50IGluZGV4LCBjb3VudDsKLQotICAgIGNvdW50ID0gW2VudHJpZXMgY291bnRdOwotICAg
IGlmIChjb3VudCA9PSAwKSB7CisgICAgTlNVSW50ZWdlciBjb3VudCA9IFtlbnRyaWVzIGNvdW50
XTsKKyAgICBpZiAoY291bnQgPT0gMCkKICAgICAgICAgcmV0dXJuIE5POwotICAgIH0KIAotICAg
IGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KSB7CisgICAgZm9yIChOU1VJ
bnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkKICAgICAgICAgW3NlbGYg
cmVtb3ZlSXRlbTpbZW50cmllcyBvYmplY3RBdEluZGV4OmluZGV4XV07Ci0gICAgfQogICAgIAog
ICAgIHJldHVybiBZRVM7CiB9CiAKIC0gKEJPT0wpcmVtb3ZlQWxsSXRlbXMKIHsKLSAgICBpZiAo
W19lbnRyaWVzQnlVUkwgY291bnRdID09IDApIHsKKyAgICBpZiAoX2VudHJpZXNCeURhdGUtPmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIE5POwotICAgIH0KIAogICAgIF9lbnRyaWVzQnlEYXRl
LT5jbGVhcigpOwogICAgIFtfZW50cmllc0J5VVJMIHJlbW92ZUFsbE9iamVjdHNdOwpAQCAtMzA2
LDIzICszNDMsMjEgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQog
ICAgIFtfb3JkZXJlZExhc3RWaXNpdGVkRGF5cyByZWxlYXNlXTsKICAgICBfb3JkZXJlZExhc3RW
aXNpdGVkRGF5cyA9IG5pbDsKIAorICAgIFBhZ2VHcm91cDo6cmVtb3ZlQWxsVmlzaXRlZExpbmtz
KCk7CisKICAgICByZXR1cm4gWUVTOwogfQogCiAtICh2b2lkKWFkZEl0ZW1zOihOU0FycmF5ICop
bmV3RW50cmllcwogewotICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvcjsKLSAgICBXZWJIaXN0
b3J5SXRlbSAqZW50cnk7Ci0KICAgICAvLyBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUg
aW5jb21pbmcgZW50cmllcyBhcmUgaW4gYW55IHBhcnRpY3VsYXIKICAgICAvLyBvcmRlciwgYnV0
IGlmIHRoaXMgaXMgY2FsbGVkIHdpdGggYSBzZXQgb2YgZW50cmllcyB0aGF0IHdlcmUgY3JlYXRl
ZCBieQogICAgIC8vIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSByZXN1bHRzIG9mIG9yZGVyZWRMYXN0
VmlzaXRlZERheXMgYW5kIG9yZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25EYXl5CiAgICAgLy8gdGhl
biB0aGV5IHdpbGwgYmUgb3JkZXJlZCBjaHJvbm9sb2dpY2FsbHkgZnJvbSBuZXdlc3QgdG8gb2xk
ZXN0LiBXZSBjYW4gbWFrZSBhZGRpbmcgdGhlbQogICAgIC8vIGZhc3RlciAoZmV3ZXIgY29tcGFy
ZXMpIGJ5IGluc2VydGluZyB0aGVtIGZyb20gb2xkZXN0IHRvIG5ld2VzdC4KLSAgICBlbnVtZXJh
dG9yID0gW25ld0VudHJpZXMgcmV2ZXJzZU9iamVjdEVudW1lcmF0b3JdOwotICAgIHdoaWxlICgo
ZW50cnkgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7CisgICAgTlNFbnVtZXJh
dG9yICplbnVtZXJhdG9yID0gW25ld0VudHJpZXMgcmV2ZXJzZU9iamVjdEVudW1lcmF0b3JdOwor
ICAgIHdoaWxlIChXZWJIaXN0b3J5SXRlbSAqZW50cnkgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0
XSkKICAgICAgICAgW3NlbGYgYWRkSXRlbTplbnRyeV07Ci0gICAgfQogfQogCiAjcHJhZ21hIG1h
cmsgREFURS1CQVNFRCBSRVRSSUVWQUwKQEAgLTM0OSwyOCArMzg0LDI3IEBAIFdlYkhpc3RvcnlE
YXRlS2V5IHRpbWVJbnRlcnZhbEZvckJlZ2lubmkKICAgICByZXR1cm4gX29yZGVyZWRMYXN0Vmlz
aXRlZERheXM7CiB9CiAKLS0gKE5TQXJyYXkgKilvcmRlcmVkSXRlbXNMYXN0VmlzaXRlZE9uRGF5
OiAoTlNDYWxlbmRhckRhdGUgKilkYXRlCistIChOU0FycmF5ICopb3JkZXJlZEl0ZW1zTGFzdFZp
c2l0ZWRPbkRheTooTlNDYWxlbmRhckRhdGUgKilkYXRlCiB7CiAgICAgV2ViSGlzdG9yeURhdGVL
ZXkgZGF0ZUtleTsKLSAgICBpZiAoW3NlbGYgZmluZEtleTomZGF0ZUtleSBmb3JEYXk6W2RhdGUg
dGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXV0pCi0gICAgICAgIHJldHVybiBfZW50cmll
c0J5RGF0ZS0+Z2V0KGRhdGVLZXkpLmdldCgpOwotCi0gICAgcmV0dXJuIG5pbDsKKyAgICBpZiAo
IVtzZWxmIGZpbmRLZXk6JmRhdGVLZXkgZm9yRGF5OltkYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVm
ZXJlbmNlRGF0ZV1dKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBfZW50cmllc0J5
RGF0ZS0+Z2V0KGRhdGVLZXkpLmdldCgpOwogfQogCiAjcHJhZ21hIG1hcmsgVVJMIE1BVENISU5H
CiAKIC0gKFdlYkhpc3RvcnlJdGVtICopaXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxT
dHJpbmcKIHsKLSAgICByZXR1cm4gW19lbnRyaWVzQnlVUkwgb2JqZWN0Rm9yS2V5OiBVUkxTdHJp
bmddOworICAgIHJldHVybiBbX2VudHJpZXNCeVVSTCBvYmplY3RGb3JLZXk6VVJMU3RyaW5nXTsK
IH0KIAotLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6IChOU1N0cmluZyAqKVVSTFN0
cmluZworLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5nICopVVJMU3Ry
aW5nCiB7CiAgICAgcmV0dXJuIFtzZWxmIGl0ZW1Gb3JVUkxTdHJpbmc6VVJMU3RyaW5nXSAhPSBu
aWw7CiB9CiAKLS0gKEJPT0wpY29udGFpbnNVUkw6IChOU1VSTCAqKVVSTAorLSAoQk9PTCljb250
YWluc1VSTDooTlNVUkwgKilVUkwKIHsKICAgICByZXR1cm4gW3NlbGYgaXRlbUZvclVSTFN0cmlu
ZzpbVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmddXSAhPSBuaWw7CiB9CkBAIC0zOTIsNyAr
NDI2LDcgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQogewogICAg
IGlmIChhZ2VJbkRheXNMaW1pdFNldCkKICAgICAgICAgcmV0dXJuIGFnZUluRGF5c0xpbWl0Owot
ICAgIHJldHVybiBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBpbnRlZ2Vy
Rm9yS2V5OiBAIldlYktpdEhpc3RvcnlBZ2VJbkRheXNMaW1pdCJdOworICAgIHJldHVybiBbW05T
VXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBpbnRlZ2VyRm9yS2V5OkAiV2ViS2l0
SGlzdG9yeUFnZUluRGF5c0xpbWl0Il07CiB9CiAKIC0gKHZvaWQpc2V0SGlzdG9yeUl0ZW1MaW1p
dDooaW50KWxpbWl0CkBAIC00MDUsMTIgKzQzOSwxMiBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1l
SW50ZXJ2YWxGb3JCZWdpbm5pCiB7CiAgICAgaWYgKGl0ZW1MaW1pdFNldCkKICAgICAgICAgcmV0
dXJuIGl0ZW1MaW1pdDsKLSAgICByZXR1cm4gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gaW50ZWdlckZvcktleTogQCJXZWJLaXRIaXN0b3J5SXRlbUxpbWl0Il07CisgICAg
cmV0dXJuIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGludGVnZXJGb3JL
ZXk6QCJXZWJLaXRIaXN0b3J5SXRlbUxpbWl0Il07CiB9CiAKIC8vIFJldHVybiBhIGRhdGUgdGhh
dCBtYXJrcyB0aGUgYWdlIGxpbWl0IGZvciBoaXN0b3J5IGVudHJpZXMgc2F2ZWQgdG8gb3IKIC8v
IGxvYWRlZCBmcm9tIGRpc2suIEFueSBlbnRyeSBvbGRlciB0aGFuIHRoaXMgaXRlbSBzaG91bGQg
YmUgcmVqZWN0ZWQuCi0tIChOU0NhbGVuZGFyRGF0ZSAqKV9hZ2VMaW1pdERhdGUKKy0gKE5TQ2Fs
ZW5kYXJEYXRlICopYWdlTGltaXREYXRlCiB7CiAgICAgcmV0dXJuIFtbTlNDYWxlbmRhckRhdGUg
Y2FsZW5kYXJEYXRlXSBkYXRlQnlBZGRpbmdZZWFyczowIG1vbnRoczowIGRheXM6LVtzZWxmIGhp
c3RvcnlBZ2VJbkRheXNMaW1pdF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhvdXJzOjAgbWludXRlczowIHNlY29uZHM6MF07CkBAIC00NDAs
NyArNDc0LDcgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQogICAg
IHJldHVybiBhcnJheVJlcDsKIH0KIAotLSAoQk9PTClfbG9hZEhpc3RvcnlHdXRzRnJvbVVSTDoo
TlNVUkwgKilVUkwgc2F2ZWRJdGVtc0NvdW50OihpbnQgKiludW1iZXJPZkl0ZW1zTG9hZGVkIGNv
bGxlY3REaXNjYXJkZWRJdGVtc0ludG86KE5TTXV0YWJsZUFycmF5ICopZGlzY2FyZGVkSXRlbXMg
ZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKKy0gKEJPT0wpbG9hZEhpc3RvcnlHdXRzRnJvbVVSTDoo
TlNVUkwgKilVUkwgc2F2ZWRJdGVtc0NvdW50OihpbnQgKiludW1iZXJPZkl0ZW1zTG9hZGVkIGNv
bGxlY3REaXNjYXJkZWRJdGVtc0ludG86KE5TTXV0YWJsZUFycmF5ICopZGlzY2FyZGVkSXRlbXMg
ZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKIHsKICAgICAqbnVtYmVyT2ZJdGVtc0xvYWRlZCA9IDA7
CiAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gbmlsOwpAQCAtNDc0LDEyICs1MDgsMTEg
QEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQogICAgIE5TTnVtYmVy
ICpmaWxlVmVyc2lvbk9iamVjdCA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpGaWxlVmVyc2lv
bktleV07CiAgICAgaW50IGZpbGVWZXJzaW9uOwogICAgIC8vIHdlIGRvbid0IHRydXN0IGRhdGEg
b2J0YWluZWQgZnJvbSBlbHNld2hlcmUsIHNvIGRvdWJsZS1jaGVjawotICAgIGlmIChmaWxlVmVy
c2lvbk9iamVjdCAhPSBuaWwgJiYgW2ZpbGVWZXJzaW9uT2JqZWN0IGlzS2luZE9mQ2xhc3M6W05T
TnVtYmVyIGNsYXNzXV0pIHsKLSAgICAgICAgZmlsZVZlcnNpb24gPSBbZmlsZVZlcnNpb25PYmpl
Y3QgaW50VmFsdWVdOwotICAgIH0gZWxzZSB7CisgICAgaWYgKCFmaWxlVmVyc2lvbk9iamVjdCB8
fCAhW2ZpbGVWZXJzaW9uT2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJoaXN0b3J5IGZpbGUgdmVyc2lvbiBjYW4ndCBiZSBkZXRlcm1p
bmVkLCB0aGVyZWZvcmUgbm90IGxvYWRpbmciKTsKICAgICAgICAgcmV0dXJuIE5POwogICAgIH0K
KyAgICBmaWxlVmVyc2lvbiA9IFtmaWxlVmVyc2lvbk9iamVjdCBpbnRWYWx1ZV07CiAgICAgaWYg
KGZpbGVWZXJzaW9uID4gY3VycmVudEZpbGVWZXJzaW9uKSB7CiAgICAgICAgIExPR19FUlJPUigi
aGlzdG9yeSBmaWxlIHZlcnNpb24gaXMgJWQsIG5ld2VyIHRoYW4gbmV3ZXN0IGtub3duIHZlcnNp
b24gJWQsIHRoZXJlZm9yZSBub3QgbG9hZGluZyIsIGZpbGVWZXJzaW9uLCBjdXJyZW50RmlsZVZl
cnNpb24pOwogICAgICAgICByZXR1cm4gTk87CkBAIC00ODgsNyArNTIxLDcgQEAgV2ViSGlzdG9y
eURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQogICAgIE5TQXJyYXkgKmFycmF5ID0gW2Rp
Y3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkRhdGVzQXJyYXlLZXldOwogCiAgICAgaW50IGl0ZW1Db3Vu
dExpbWl0ID0gW3NlbGYgaGlzdG9yeUl0ZW1MaW1pdF07Ci0gICAgTlNUaW1lSW50ZXJ2YWwgYWdl
TGltaXREYXRlID0gW1tzZWxmIF9hZ2VMaW1pdERhdGVdIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJl
bmNlRGF0ZV07CisgICAgTlNUaW1lSW50ZXJ2YWwgYWdlTGltaXREYXRlID0gW1tzZWxmIGFnZUxp
bWl0RGF0ZV0gdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKICAgICBOU0VudW1lcmF0
b3IgKmVudW1lcmF0b3IgPSBbYXJyYXkgb2JqZWN0RW51bWVyYXRvcl07CiAgICAgQk9PTCBhZ2VM
aW1pdFBhc3NlZCA9IE5POwogICAgIEJPT0wgaXRlbUxpbWl0UGFzc2VkID0gTk87CkBAIC01MzAs
MTUwICs1NjMsNjUgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQog
CiAtIChCT09MKWxvYWRGcm9tVVJMOihOU1VSTCAqKVVSTCBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJ
bnRvOihOU011dGFibGVBcnJheSAqKWRpc2NhcmRlZEl0ZW1zIGVycm9yOihOU0Vycm9yICoqKWVy
cm9yCiB7Ci0gICAgaW50IG51bWJlck9mSXRlbXM7Ci0gICAgZG91YmxlIHN0YXJ0LCBkdXJhdGlv
bjsKLSAgICBCT09MIHJlc3VsdDsKKyAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdl
dEN1cnJlbnQoKTsKIAotICAgIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0g
ICAgcmVzdWx0ID0gW3NlbGYgX2xvYWRIaXN0b3J5R3V0c0Zyb21VUkw6VVJMIHNhdmVkSXRlbXND
b3VudDombnVtYmVyT2ZJdGVtcyBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJbnRvOmRpc2NhcmRlZEl0
ZW1zIGVycm9yOmVycm9yXTsKKyAgICBpbnQgbnVtYmVyT2ZJdGVtczsKKyAgICBpZiAoIVtzZWxm
IGxvYWRIaXN0b3J5R3V0c0Zyb21VUkw6VVJMIHNhdmVkSXRlbXNDb3VudDombnVtYmVyT2ZJdGVt
cyBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJbnRvOmRpc2NhcmRlZEl0ZW1zIGVycm9yOmVycm9yXSkK
KyAgICAgICAgcmV0dXJuIE5POwogCi0gICAgaWYgKHJlc3VsdCkgewotICAgICAgICBkdXJhdGlv
biA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7Ci0gICAgICAgIExPRyhUaW1p
bmcsICJsb2FkaW5nICVkIGhpc3RvcnkgZW50cmllcyBmcm9tICVAIHRvb2sgJWYgc2Vjb25kcyIs
Ci0gICAgICAgICAgICBudW1iZXJPZkl0ZW1zLCBVUkwsIGR1cmF0aW9uKTsKLSAgICB9CisgICAg
ZG91YmxlIGR1cmF0aW9uID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKKyAg
ICBMT0coVGltaW5nLCAibG9hZGluZyAlZCBoaXN0b3J5IGVudHJpZXMgZnJvbSAlQCB0b29rICVm
IHNlY29uZHMiLCBudW1iZXJPZkl0ZW1zLCBVUkwsIGR1cmF0aW9uKTsKIAotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIFlFUzsKIH0KIAotLSAoQk9PTClfc2F2ZUhpc3RvcnlHdXRzOiAo
aW50ICopbnVtYmVyT2ZJdGVtc1NhdmVkIFVSTDooTlNVUkwgKilVUkwgZXJyb3I6KE5TRXJyb3Ig
KiopZXJyb3IKKy0gKEJPT0wpc2F2ZUhpc3RvcnlHdXRzOihpbnQgKiludW1iZXJPZkl0ZW1zU2F2
ZWQgVVJMOihOU1VSTCAqKVVSTCBlcnJvcjooTlNFcnJvciAqKillcnJvcgogewogICAgICpudW1i
ZXJPZkl0ZW1zU2F2ZWQgPSAwOwogCi0gICAgLy8gRklYTUU6ICBDb3JyZWN0bHkgcmVwb3J0IGVy
cm9yIHdoZW4gbmV3IEFQSSBpcyByZWFkeS4KLSAgICBpZiAoZXJyb3IpCi0gICAgICAgICplcnJv
ciA9IG5pbDsKLQogICAgIE5TQXJyYXkgKmFycmF5ID0gW3NlbGYgYXJyYXlSZXByZXNlbnRhdGlv
bl07CiAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdHNBbmRLZXlzOgogICAgICAgICBhcnJheSwgRGF0ZXNBcnJheUtleSwKICAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Y3VycmVudEZpbGVWZXJzaW9uXSwgRmlsZVZl
cnNpb25LZXksCiAgICAgICAgIG5pbF07CiAgICAgTlNEYXRhICpkYXRhID0gW05TUHJvcGVydHlM
aXN0U2VyaWFsaXphdGlvbiBkYXRhRnJvbVByb3BlcnR5TGlzdDpkaWN0aW9uYXJ5IGZvcm1hdDpO
U1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wIGVycm9yRGVzY3JpcHRpb246bmlsXTsKLSAg
ICBpZiAoIVtkYXRhIHdyaXRlVG9VUkw6VVJMIGF0b21pY2FsbHk6WUVTXSkgeworICAgIGlmICgh
W2RhdGEgd3JpdGVUb1VSTDpVUkwgb3B0aW9uczowIGVycm9yOmVycm9yXSkgewogICAgICAgICBM
T0dfRVJST1IoImF0dGVtcHQgdG8gc2F2ZSAlQCB0byAlQCBmYWlsZWQiLCBkaWN0aW9uYXJ5LCBV
UkwpOwogICAgICAgICByZXR1cm4gTk87CiAgICAgfQotICAgIAorCiAgICAgKm51bWJlck9mSXRl
bXNTYXZlZCA9IFthcnJheSBjb3VudF07CiAgICAgcmV0dXJuIFlFUzsKIH0KIAogLSAoQk9PTClz
YXZlVG9VUkw6KE5TVVJMICopVVJMIGVycm9yOihOU0Vycm9yICoqKWVycm9yCiB7Ci0gICAgaW50
IG51bWJlck9mSXRlbXM7Ci0gICAgZG91YmxlIHN0YXJ0LCBkdXJhdGlvbjsKLSAgICBCT09MIHJl
c3VsdDsKLQotICAgIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0gICAgcmVz
dWx0ID0gW3NlbGYgX3NhdmVIaXN0b3J5R3V0czogJm51bWJlck9mSXRlbXMgVVJMOlVSTCBlcnJv
cjplcnJvcl07Ci0KLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGR1cmF0aW9uID0gQ0ZBYnNv
bHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKLSAgICAgICAgTE9HKFRpbWluZywgInNhdmlu
ZyAlZCBoaXN0b3J5IGVudHJpZXMgdG8gJUAgdG9vayAlZiBzZWNvbmRzIiwKLSAgICAgICAgICAg
IG51bWJlck9mSXRlbXMsIFVSTCwgZHVyYXRpb24pOwotICAgIH0KLQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBfV2ViQ29yZUhpc3RvcnlQcm92aWRlciA6IE5T
T2JqZWN0ICA8V2ViQ29yZUhpc3RvcnlQcm92aWRlcj4gCi17Ci0gICAgV2ViSGlzdG9yeSAqaGlz
dG9yeTsKLX0KLS0gaW5pdFdpdGhIaXN0b3J5OiAoV2ViSGlzdG9yeSAqKWg7Ci1AZW5kCisgICAg
ZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7CiAKLUBpbXBsZW1lbnRh
dGlvbiBfV2ViQ29yZUhpc3RvcnlQcm92aWRlcgotLSBpbml0V2l0aEhpc3Rvcnk6IChXZWJIaXN0
b3J5ICopaAotewotICAgIGhpc3RvcnkgPSBbaCByZXRhaW5dOwotICAgIHJldHVybiBzZWxmOwot
fQorICAgIGludCBudW1iZXJPZkl0ZW1zOworICAgIGlmICghW3NlbGYgc2F2ZUhpc3RvcnlHdXRz
OiZudW1iZXJPZkl0ZW1zIFVSTDpVUkwgZXJyb3I6ZXJyb3JdKQorICAgICAgICByZXR1cm4gTk87
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaExldHRlcihjaGFyIGMsIGNoYXIgbG93ZXJjYXNl
TGV0dGVyKQotewotICAgIHJldHVybiAoYyB8IDB4MjApID09IGxvd2VyY2FzZUxldHRlcjsKLX0K
KyAgICBkb3VibGUgZHVyYXRpb24gPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0
OworICAgIExPRyhUaW1pbmcsICJzYXZpbmcgJWQgaGlzdG9yeSBlbnRyaWVzIHRvICVAIHRvb2sg
JWYgc2Vjb25kcyIsIG51bWJlck9mSXRlbXMsIFVSTCwgZHVyYXRpb24pOwogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgbWF0Y2hVbmljb2RlTGV0dGVyKFVuaUNoYXIgYywgVW5pQ2hhciBsb3dlcmNhc2VM
ZXR0ZXIpCi17Ci0gICAgcmV0dXJuIChjIHwgMHgyMCkgPT0gbG93ZXJjYXNlTGV0dGVyOworICAg
IHJldHVybiBZRVM7CiB9CiAKLSNkZWZpbmUgVU5JQ09ERV9CVUZGRVJfU0laRSAxMDI0Ci0KLS0g
KEJPT0wpY29udGFpbnNVUkw6KGNvbnN0IFVuaUNoYXIgKil1bmljb2RlIGxlbmd0aDoodW5zaWdu
ZWQpbGVuZ3RoCistICh2b2lkKWFkZFZpc2l0ZWRMaW5rc1RvUGFnZUdyb3VwOihQYWdlR3JvdXAm
KWdyb3VwCiB7Ci0gICAgY29uc3QgVW5pQ2hhciAqdW5pY29kZVN0ciA9IHVuaWNvZGU7Ci0gICAg
VW5pQ2hhciBzdGF0aWNTdHJCdWZmZXJbVU5JQ09ERV9CVUZGRVJfU0laRV07Ci0gICAgVW5pQ2hh
ciAqc3RyQnVmZmVyID0gTlVMTDsKLSAgICBCT09MIG5lZWRUb0FkZFNsYXNoID0gRkFMU0U7Ci0K
LSAgICBpZiAobGVuZ3RoID49IDYgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNv
ZGVbMF0sICdoJykgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbMV0sICd0
JykgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbMl0sICd0JykgJiYKLSAg
ICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbM10sICdwJykgJiYKLSAgICAgICAgKHVu
aWNvZGVbNF0gPT0gJzonIAotICAgICAgICAgfHwgKG1hdGNoVW5pY29kZUxldHRlcih1bmljb2Rl
WzRdLCAncycpICYmIHVuaWNvZGVbNV0gPT0gJzonKSkpIHsKLQotICAgICAgICB1bnNpZ25lZCBw
b3MgPSB1bmljb2RlWzRdID09ICc6JyA/IDUgOiA2OwotCi0gICAgICAgIC8vIHNraXAgcG9zc2li
bGUgaW5pdGlhbCB0d28gc2xhc2hlcwotICAgICAgICBpZiAocG9zICsgMSA8IGxlbmd0aCAmJiB1
bmljb2RlW3Bvc10gPT0gJy8nICYmIHVuaWNvZGVbcG9zICsgMV0gPT0gJy8nKSB7Ci0gICAgICAg
ICAgICBwb3MgKz0gMjsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlIChwb3MgPCBsZW5ndGgg
JiYgdW5pY29kZVtwb3NdICE9ICcvJykgewotICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAocG9zID09IGxlbmd0aCkgewotICAgICAgICAgICAgbmVlZFRvQWRkU2xh
c2ggPSBUUlVFOworICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtfZW50cmllc0J5VVJM
IGtleUVudW1lcmF0b3JdOworICAgIHdoaWxlIChOU1N0cmluZyAqdXJsID0gW2VudW1lcmF0b3Ig
bmV4dE9iamVjdF0pIHsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFt1cmwgbGVuZ3RoXTsKKyAg
ICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBDRlN0cmluZ0dldENoYXJhY3RlcnNQdHIo
cmVpbnRlcnByZXRfY2FzdDxDRlN0cmluZ1JlZj4odXJsKSk7CisgICAgICAgIGlmIChjaGFyYWN0
ZXJzKQorICAgICAgICAgICAgZ3JvdXAuYWRkVmlzaXRlZExpbmsoY2hhcmFjdGVycywgbGVuZ3Ro
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWZWN0b3I8VUNoYXIsIDUxMj4gYnVmZmVy
KGxlbmd0aCk7CisgICAgICAgICAgICBbdXJsIGdldENoYXJhY3RlcnM6YnVmZmVyLmRhdGEoKV07
CisgICAgICAgICAgICBncm91cC5hZGRWaXNpdGVkTGluayhidWZmZXIuZGF0YSgpLCBsZW5ndGgp
OwogICAgICAgICB9CiAgICAgfQotCi0gICAgaWYgKG5lZWRUb0FkZFNsYXNoKSB7Ci0gICAgICAg
IGlmIChsZW5ndGggKyAxIDw9IFVOSUNPREVfQlVGRkVSX1NJWkUpIHsKLSAgICAgICAgICAgIHN0
ckJ1ZmZlciA9IHN0YXRpY1N0ckJ1ZmZlcjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHN0ckJ1ZmZlciA9IChVbmlDaGFyKiltYWxsb2Moc2l6ZW9mKFVuaUNoYXIpICogKGxlbmd0aCAr
IDEpKTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoc3RyQnVmZmVyLCB1bmljb2RlLCAyICog
bGVuZ3RoKTsKLSAgICAgICAgc3RyQnVmZmVyW2xlbmd0aF0gPSAnLyc7Ci0gICAgICAgIGxlbmd0
aCsrOwotCi0gICAgICAgIHVuaWNvZGVTdHIgPSBzdHJCdWZmZXI7Ci0gICAgfQotCi0gICAgQ0ZT
dHJpbmdSZWYgc3RyID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVyc05vQ29weShOVUxMLCB1
bmljb2RlU3RyLCBsZW5ndGgsIGtDRkFsbG9jYXRvck51bGwpOwotICAgIEJPT0wgcmVzdWx0ID0g
W2hpc3RvcnkgY29udGFpbnNJdGVtRm9yVVJMU3RyaW5nOihpZClzdHJdOwotICAgIENGUmVsZWFz
ZShzdHIpOwotCi0gICAgaWYgKHN0ckJ1ZmZlciAhPSBzdGF0aWNTdHJCdWZmZXIpIHsKLSAgICAg
ICAgZnJlZShzdHJCdWZmZXIpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0g
KHZvaWQpZGVhbGxvYwotewotICAgIFtoaXN0b3J5IHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFs
bG9jXTsKIH0KIAogQGVuZApAQCAtNjg1LDEzICs2MzMsMTEgQEAgc3RhdGljIGlubGluZSBib29s
IG1hdGNoVW5pY29kZUxldHRlcihVbgogICAgIHJldHVybiBfc2hhcmVkSGlzdG9yeTsKIH0KIAot
Ci0rICh2b2lkKXNldE9wdGlvbmFsU2hhcmVkSGlzdG9yeTogKFdlYkhpc3RvcnkgKiloaXN0b3J5
CisrICh2b2lkKXNldE9wdGlvbmFsU2hhcmVkSGlzdG9yeTooV2ViSGlzdG9yeSAqKWhpc3RvcnkK
IHsKLSAgICAvLyBGSVhNRS4gIE5lZWQgdG8gdGhpbmsgYWJvdXQgbXVsdGlwbGUgaW5zdGFuY2Vz
IG9mIFdlYkhpc3RvcnkgcGVyIGFwcGxpY2F0aW9uCisgICAgLy8gRklYTUU6IE5lZWQgdG8gdGhp
bmsgYWJvdXQgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIFdlYkhpc3RvcnkgcGVyIGFwcGxpY2F0aW9u
CiAgICAgLy8gYW5kIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uIG9mIGhpc3RvcnkgZmlsZSBiZXR3
ZWVuIGFwcGxpY2F0aW9ucy4KLSAgICBbV2ViQ29yZUhpc3Rvcnkgc2V0SGlzdG9yeVByb3ZpZGVy
OiBbW1tfV2ViQ29yZUhpc3RvcnlQcm92aWRlciBhbGxvY10gaW5pdFdpdGhIaXN0b3J5OiBoaXN0
b3J5XSBhdXRvcmVsZWFzZV1dOwotICAgIGlmIChfc2hhcmVkSGlzdG9yeSAhPSBoaXN0b3J5KXsK
KyAgICBpZiAoX3NoYXJlZEhpc3RvcnkgIT0gaGlzdG9yeSkgewogICAgICAgICBbX3NoYXJlZEhp
c3RvcnkgcmVsZWFzZV07CiAgICAgICAgIF9zaGFyZWRIaXN0b3J5ID0gW2hpc3RvcnkgcmV0YWlu
XTsKICAgICB9CkBAIC02OTksMTAgKzY0NSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hV
bmljb2RlTGV0dGVyKFVuCiAKIC0gKGlkKWluaXQKIHsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIg
aW5pdF0pICE9IG5pbCkgewotICAgICAgICBfaGlzdG9yeVByaXZhdGUgPSBbW1dlYkhpc3RvcnlQ
cml2YXRlIGFsbG9jXSBpbml0XTsKLSAgICB9Ci0KKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfaGlzdG9yeVByaXZhdGUg
PSBbW1dlYkhpc3RvcnlQcml2YXRlIGFsbG9jXSBpbml0XTsKICAgICByZXR1cm4gc2VsZjsKIH0K
IApAQCAtNzE4LDQwICs2NjQsMTQgQEAgc3RhdGljIGlubGluZSBib29sIG1hdGNoVW5pY29kZUxl
dHRlcihVbgogewogICAgIE5TRGljdGlvbmFyeSAqdXNlckluZm8gPSBbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6ZW50cmllcywgV2ViSGlzdG9yeUl0ZW1zS2V5LCBu
aWxdOwogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0KLSAgICAgICAg
cG9zdE5vdGlmaWNhdGlvbk5hbWU6IG5hbWUgb2JqZWN0OiBzZWxmIHVzZXJJbmZvOiB1c2VySW5m
b107Ci19Ci0KLS0gKFdlYkhpc3RvcnlJdGVtICopYWRkSXRlbUZvclVSTDogKE5TVVJMICopVVJM
Ci17Ci0gICAgV2ViSGlzdG9yeUl0ZW0gKmVudHJ5ID0gW1tXZWJIaXN0b3J5SXRlbSBhbGxvY10g
aW5pdFdpdGhVUkw6VVJMIHRpdGxlOm5pbF07Ci0gICAgW2VudHJ5IF9zZXRMYXN0VmlzaXRlZFRp
bWVJbnRlcnZhbDogW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdXTsKLSAg
ICBbc2VsZiBhZGRJdGVtOiBlbnRyeV07Ci0gICAgW2VudHJ5IHJlbGVhc2VdOwotICAgIHJldHVy
biBlbnRyeTsKLX0KLQotCi0tICh2b2lkKWFkZEl0ZW06IChXZWJIaXN0b3J5SXRlbSAqKWVudHJ5
Ci17Ci0gICAgTE9HIChIaXN0b3J5LCAiYWRkaW5nICVAIiwgZW50cnkpOwotICAgIFtfaGlzdG9y
eVByaXZhdGUgYWRkSXRlbTogZW50cnldOwotICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOiBX
ZWJIaXN0b3J5SXRlbXNBZGRlZE5vdGlmaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICBlbnRy
aWVzOiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6ZW50cnldXTsKKyAgICAgICAgcG9zdE5vdGlm
aWNhdGlvbk5hbWU6bmFtZSBvYmplY3Q6c2VsZiB1c2VySW5mbzp1c2VySW5mb107CiB9CiAKLS0g
KHZvaWQpcmVtb3ZlSXRlbTogKFdlYkhpc3RvcnlJdGVtICopZW50cnkKLXsKLSAgICBpZiAoW19o
aXN0b3J5UHJpdmF0ZSByZW1vdmVJdGVtOiBlbnRyeV0pIHsKLSAgICAgICAgW3NlbGYgX3NlbmRO
b3RpZmljYXRpb246IFdlYkhpc3RvcnlJdGVtc1JlbW92ZWROb3RpZmljYXRpb24KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVudHJpZXM6IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDplbnRyeV1d
OwotICAgIH0KLX0KLQotLSAodm9pZClyZW1vdmVJdGVtczogKE5TQXJyYXkgKillbnRyaWVzCist
ICh2b2lkKXJlbW92ZUl0ZW1zOihOU0FycmF5ICopZW50cmllcwogewogICAgIGlmIChbX2hpc3Rv
cnlQcml2YXRlIHJlbW92ZUl0ZW1zOmVudHJpZXNdKSB7Ci0gICAgICAgIFtzZWxmIF9zZW5kTm90
aWZpY2F0aW9uOiBXZWJIaXN0b3J5SXRlbXNSZW1vdmVkTm90aWZpY2F0aW9uCi0gICAgICAgICAg
ICAgICAgICAgICAgICBlbnRyaWVzOiBlbnRyaWVzXTsKKyAgICAgICAgW3NlbGYgX3NlbmROb3Rp
ZmljYXRpb246V2ViSGlzdG9yeUl0ZW1zUmVtb3ZlZE5vdGlmaWNhdGlvbgorICAgICAgICAgICAg
ICAgICAgICAgICAgZW50cmllczplbnRyaWVzXTsKICAgICB9CiB9CiAKQEAgLTc1OSwyMSArNjc5
LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaFVuaWNvZGVMZXR0ZXIoVW4KIHsKICAgICBp
ZiAoW19oaXN0b3J5UHJpdmF0ZSByZW1vdmVBbGxJdGVtc10pIHsKICAgICAgICAgW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXQotICAgICAgICAgICAgcG9zdE5vdGlmaWNhdGlv
bk5hbWU6IFdlYkhpc3RvcnlBbGxJdGVtc1JlbW92ZWROb3RpZmljYXRpb24KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0OiBzZWxmXTsKKyAgICAgICAgICAgIHBvc3ROb3RpZmljYXRp
b25OYW1lOldlYkhpc3RvcnlBbGxJdGVtc1JlbW92ZWROb3RpZmljYXRpb24KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0OnNlbGZdOwogICAgIH0KIH0KIAogLSAodm9pZClhZGRJdGVt
czooTlNBcnJheSAqKW5ld0VudHJpZXMKIHsKICAgICBbX2hpc3RvcnlQcml2YXRlIGFkZEl0ZW1z
Om5ld0VudHJpZXNdOwotICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOiBXZWJIaXN0b3J5SXRl
bXNBZGRlZE5vdGlmaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOiBuZXdFbnRy
aWVzXTsKLX0KLQotLSAodm9pZClzZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDooTlNUaW1lSW50
ZXJ2YWwpdGltZSBmb3JJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5Ci17Ci0gICAgW19oaXN0
b3J5UHJpdmF0ZSBzZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDp0aW1lIGZvckl0ZW06ZW50cnld
OworICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOldlYkhpc3RvcnlJdGVtc0FkZGVkTm90aWZp
Y2F0aW9uCisgICAgICAgICAgICAgICAgICAgIGVudHJpZXM6bmV3RW50cmllc107CiB9CiAKICNw
cmFnbWEgbWFyayBEQVRFLUJBU0VEIFJFVFJJRVZBTApAQCAtNzgzLDIxICs2OTgsMTYgQEAgc3Rh
dGljIGlubGluZSBib29sIG1hdGNoVW5pY29kZUxldHRlcihVbgogICAgIHJldHVybiBbX2hpc3Rv
cnlQcml2YXRlIG9yZGVyZWRMYXN0VmlzaXRlZERheXNdOwogfQogCi0tIChOU0FycmF5ICopb3Jk
ZXJlZEl0ZW1zTGFzdFZpc2l0ZWRPbkRheTogKE5TQ2FsZW5kYXJEYXRlICopZGF0ZQorLSAoTlNB
cnJheSAqKW9yZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25EYXk6KE5TQ2FsZW5kYXJEYXRlICopZGF0
ZQogewotICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIG9yZGVyZWRJdGVtc0xhc3RWaXNpdGVk
T25EYXk6IGRhdGVdOworICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIG9yZGVyZWRJdGVtc0xh
c3RWaXNpdGVkT25EYXk6ZGF0ZV07CiB9CiAKICNwcmFnbWEgbWFyayBVUkwgTUFUQ0hJTkcKIAot
LSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6IChOU1N0cmluZyAqKVVSTFN0cmluZwor
LSAoQk9PTCljb250YWluc1VSTDooTlNVUkwgKilVUkwKIHsKLSAgICByZXR1cm4gW19oaXN0b3J5
UHJpdmF0ZSBjb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6IFVSTFN0cmluZ107Ci19Ci0KLS0gKEJP
T0wpY29udGFpbnNVUkw6IChOU1VSTCAqKVVSTAotewotICAgIHJldHVybiBbX2hpc3RvcnlQcml2
YXRlIGNvbnRhaW5zVVJMOiBVUkxdOworICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIGNvbnRh
aW5zVVJMOlVSTF07CiB9CiAKIC0gKFdlYkhpc3RvcnlJdGVtICopaXRlbUZvclVSTDooTlNVUkwg
KilVUkwKQEAgLTgwOSw0MSArNzE5LDMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaFVuaWNv
ZGVMZXR0ZXIoVW4KIAogLSAoQk9PTClsb2FkRnJvbVVSTDooTlNVUkwgKilVUkwgZXJyb3I6KE5T
RXJyb3IgKiopZXJyb3IKIHsKLSAgICBOU011dGFibGVBcnJheSAqZGlzY2FyZGVkSXRlbXMgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIAotICAgIGlmIChbX2hpc3RvcnlQcml2YXRlIGxv
YWRGcm9tVVJMOlVSTCBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJbnRvOmRpc2NhcmRlZEl0ZW1zIGVy
cm9yOmVycm9yXSkgewotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdCi0gICAgICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTpXZWJIaXN0b3J5TG9hZGVkTm90
aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDpzZWxmXTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChbZGlzY2FyZGVkSXRlbXMgY291bnRdID4gMCkKLSAgICAgICAgICAg
IFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOldlYkhpc3RvcnlJdGVtc0Rpc2NhcmRlZFdoaWxlTG9h
ZGluZ05vdGlmaWNhdGlvbiBlbnRyaWVzOmRpc2NhcmRlZEl0ZW1zXTsKLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiBZRVM7CisgICAgTlNNdXRhYmxlQXJyYXkgKmRpc2NhcmRlZEl0ZW1zID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdF07ICAgIAorICAgIGlmICghW19oaXN0b3J5UHJpdmF0
ZSBsb2FkRnJvbVVSTDpVUkwgY29sbGVjdERpc2NhcmRlZEl0ZW1zSW50bzpkaXNjYXJkZWRJdGVt
cyBlcnJvcjplcnJvcl0pIHsKKyAgICAgICAgW2Rpc2NhcmRlZEl0ZW1zIHJlbGVhc2VdOworICAg
ICAgICByZXR1cm4gTk87CiAgICAgfQotICAgIHJldHVybiBOTzsKLX0KIAotLSAoQk9PTClzYXZl
VG9VUkw6KE5TVVJMICopVVJMIGVycm9yOihOU0Vycm9yICoqKWVycm9yCi17Ci0gICAgLy8gRklY
TUU6ICBVc2UgbmV3IGZvdW5kYXRpb24gQVBJIHRvIGdldCBlcnJvciB3aGVuIHJlYWR5LgotICAg
IGlmKFtfaGlzdG9yeVByaXZhdGUgc2F2ZVRvVVJMOlVSTCBlcnJvcjplcnJvcl0pewotICAgICAg
ICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdCi0gICAgICAgICAgICBwb3N0
Tm90aWZpY2F0aW9uTmFtZTogV2ViSGlzdG9yeVNhdmVkTm90aWZpY2F0aW9uCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIG9iamVjdDogc2VsZl07Ci0gICAgICAgIHJldHVybiBZRVM7Ci0gICAg
fQotICAgIHJldHVybiBOTzsgICAgCi19CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXQorICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTpXZWJIaXN0b3J5TG9hZGVk
Tm90aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OnNlbGZdOwogCi0tIChX
ZWJIaXN0b3J5SXRlbSAqKV9pdGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmluZwot
ewotICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIGl0ZW1Gb3JVUkxTdHJpbmc6IFVSTFN0cmlu
Z107CisgICAgaWYgKFtkaXNjYXJkZWRJdGVtcyBjb3VudF0pCisgICAgICAgIFtzZWxmIF9zZW5k
Tm90aWZpY2F0aW9uOldlYkhpc3RvcnlJdGVtc0Rpc2NhcmRlZFdoaWxlTG9hZGluZ05vdGlmaWNh
dGlvbiBlbnRyaWVzOmRpc2NhcmRlZEl0ZW1zXTsKKworICAgIHJldHVybiBZRVM7CiB9CiAKLS0g
KE5TQ2FsZW5kYXJEYXRlKilhZ2VMaW1pdERhdGUKKy0gKEJPT0wpc2F2ZVRvVVJMOihOU1VSTCAq
KVVSTCBlcnJvcjooTlNFcnJvciAqKillcnJvcgogewotICAgIHJldHVybiBbX2hpc3RvcnlQcml2
YXRlIF9hZ2VMaW1pdERhdGVdOworICAgIGlmICghW19oaXN0b3J5UHJpdmF0ZSBzYXZlVG9VUkw6
VVJMIGVycm9yOmVycm9yXSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0KKyAgICAgICAgcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2Vi
SGlzdG9yeVNhdmVkTm90aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OnNl
bGZdOworICAgIHJldHVybiBZRVM7CiB9CiAKIC0gKHZvaWQpc2V0SGlzdG9yeUl0ZW1MaW1pdDoo
aW50KWxpbWl0CkBAIC04NjcsMyArNzY2LDY5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaFVu
aWNvZGVMZXR0ZXIoVW4KIH0KIAogQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViSGlzdG9yeSAo
V2ViUHJpdmF0ZSkKKworLSAodm9pZClhZGRJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5Cit7
CisgICAgTE9HKEhpc3RvcnksICJhZGRpbmcgJUAiLCBlbnRyeSk7CisgICAgW19oaXN0b3J5UHJp
dmF0ZSBhZGRJdGVtOmVudHJ5XTsKKyAgICBbc2VsZiBfc2VuZE5vdGlmaWNhdGlvbjpXZWJIaXN0
b3J5SXRlbXNBZGRlZE5vdGlmaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOltO
U0FycmF5IGFycmF5V2l0aE9iamVjdDplbnRyeV1dOworfQorCistIChXZWJIaXN0b3J5SXRlbSAq
KWFkZEl0ZW1Gb3JVUkw6KE5TVVJMICopVVJMCit7CisgICAgV2ViSGlzdG9yeUl0ZW0gKmVudHJ5
ID0gW1tXZWJIaXN0b3J5SXRlbSBhbGxvY10gaW5pdFdpdGhVUkw6VVJMIHRpdGxlOm5pbF07Cisg
ICAgW2VudHJ5IF9zZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDpbTlNEYXRlIHRpbWVJbnRlcnZh
bFNpbmNlUmVmZXJlbmNlRGF0ZV1dOworICAgIFtzZWxmIGFkZEl0ZW06ZW50cnldOworICAgIFtl
bnRyeSByZWxlYXNlXTsKKyAgICByZXR1cm4gZW50cnk7Cit9CisKKy0gKHZvaWQpX2FkZEl0ZW1G
b3JVUkw6KE5TVVJMICopVVJMIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlCit7CisgICAgV2ViSGlz
dG9yeUl0ZW0gKmVudHJ5ID0gW1tXZWJIaXN0b3J5SXRlbSBhbGxvY10gaW5pdFdpdGhVUkw6VVJM
IHRpdGxlOnRpdGxlXTsKKyAgICBbZW50cnkgX3NldExhc3RWaXNpdGVkVGltZUludGVydmFsOltO
U0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXV07CisgICAgW3NlbGYgYWRkSXRl
bTplbnRyeV07CisgICAgW2VudHJ5IHJlbGVhc2VdOworfQorCistIChOU0NhbGVuZGFyRGF0ZSop
YWdlTGltaXREYXRlCit7CisgICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUgYWdlTGltaXREYXRl
XTsKK30KKworLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5nICopVVJM
U3RyaW5nCit7CisgICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUgY29udGFpbnNJdGVtRm9yVVJM
U3RyaW5nOlVSTFN0cmluZ107Cit9CisKKy0gKHZvaWQpcmVtb3ZlSXRlbTooV2ViSGlzdG9yeUl0
ZW0gKillbnRyeQoreworICAgIGlmIChbX2hpc3RvcnlQcml2YXRlIHJlbW92ZUl0ZW06ZW50cnld
KSB7CisgICAgICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOldlYkhpc3RvcnlJdGVtc1JlbW92
ZWROb3RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXM6W05TQXJyYXkg
YXJyYXlXaXRoT2JqZWN0OmVudHJ5XV07CisgICAgfQorfQorCistICh2b2lkKXNldExhc3RWaXNp
dGVkVGltZUludGVydmFsOihOU1RpbWVJbnRlcnZhbCl0aW1lIGZvckl0ZW06KFdlYkhpc3RvcnlJ
dGVtICopZW50cnkKK3sKKyAgICBbX2hpc3RvcnlQcml2YXRlIHNldExhc3RWaXNpdGVkVGltZUlu
dGVydmFsOnRpbWUgZm9ySXRlbTplbnRyeV07Cit9CisKKy0gKFdlYkhpc3RvcnlJdGVtICopX2l0
ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5nICopVVJMU3RyaW5nCit7CisgICAgcmV0dXJuIFtfaGlz
dG9yeVByaXZhdGUgaXRlbUZvclVSTFN0cmluZzpVUkxTdHJpbmddOworfQorCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBXZWJIaXN0b3J5IChXZWJJbnRlcm5hbCkKKworLSAodm9pZClfYWRkVmlz
aXRlZExpbmtzVG9QYWdlR3JvdXA6KFdlYkNvcmU6OlBhZ2VHcm91cCYpZ3JvdXAKK3sKKyAgICBb
X2hpc3RvcnlQcml2YXRlIGFkZFZpc2l0ZWRMaW5rc1RvUGFnZUdyb3VwOmdyb3VwXTsKK30KKwor
QGVuZApJbmRleDogV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJbnRlcm5hbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SW50ZXJuYWwuaAkocmV2aXNp
b24gMCkKKysrIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SW50ZXJuYWwuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV2ViSGlzdG9yeVByaXZhdGUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFBhZ2VHcm91cDsKK30KKworQGludGVy
ZmFjZSBXZWJIaXN0b3J5IChXZWJJbnRlcm5hbCkKKworLSAodm9pZClfYWRkVmlzaXRlZExpbmtz
VG9QYWdlR3JvdXA6KFdlYkNvcmU6OlBhZ2VHcm91cCYpZ3JvdXA7CisKK0BlbmQKClByb3BlcnR5
IGNoYW5nZXMgb246IFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SW50ZXJuYWwuaApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJLaXQvbWFj
L0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW1JbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbUludGVybmFsLmgJKHJldmlzaW9uIDMwNjk0KQorKysg
V2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiwxMSArMjYsOSBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0
IDxDb2NvYS9Db2NvYS5oPgorI2ltcG9ydCAiV2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmgiCiAKLSNp
bXBvcnQgPFdlYktpdC9XZWJCYWNrRm9yd2FyZExpc3QuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJI
aXN0b3J5SXRlbS5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IEhpc3RvcnlJdGVtOwpAQCAtNTYsOCArNTQsNiBAQCBleHRlcm4gdm9pZCBXS05vdGlmeUhpc3Rv
cnlJdGVtQ2hhbmdlZCgpCiAKIEBlbmQKIAotQGludGVyZmFjZSBXZWJCYWNrRm9yd2FyZExpc3Qg
KFdlYlByaXZhdGUpCitAaW50ZXJmYWNlIFdlYkJhY2tGb3J3YXJkTGlzdCAoV2ViSW50ZXJuYWwp
CiAtICh2b2lkKV9jbG9zZTsKIEBlbmQKLQotCkluZGV4OiBXZWJLaXQvbWFjL0hpc3RvcnkvV2Vi
SGlzdG9yeVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlz
dG9yeVByaXZhdGUuaAkocmV2aXNpb24gMzA2OTQpCisrKyBXZWJLaXQvbWFjL0hpc3RvcnkvV2Vi
SGlzdG9yeVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw4OCArMjYsMzEg
QEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
Ci0KICNpbXBvcnQgPFdlYktpdC9XZWJIaXN0b3J5Lmg+CiAKLUBjbGFzcyBXZWJIaXN0b3J5SXRl
bTsKLUBjbGFzcyBOU0Vycm9yOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotdHlwZWRlZiBpbnQ2NF90
IFdlYkhpc3RvcnlEYXRlS2V5OwotdHlwZWRlZiBIYXNoTWFwPFdlYkhpc3RvcnlEYXRlS2V5LCBS
ZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+ID4gRGF0ZVRvRW50cmllc01hcDsKLSNlbHNlCi10eXBl
ZGVmIHN0cnVjdCBEYXRlVG9FbnRyaWVzTWFwIERhdGVUb0VudHJpZXNNYXA7Ci0jZW5kaWYKLQog
LyoKICAgICBAY29uc3RhbnQgV2ViSGlzdG9yeUl0ZW1zRGlzY2FyZGVkV2hpbGVMb2FkaW5nTm90
aWZpY2F0aW9uIFBvc3RlZCBmcm9tIGxvYWRGcm9tVVJMOmVycm9yOi4gIAogICAgIFRoaXMgbm90
aWZpY2F0aW9uIGNvbWVzIHdpdGggYSB1c2VySW5mbyBkaWN0aW9uYXJ5IHRoYXQgY29udGFpbnMg
dGhlIGFycmF5IG9mCi0gICAgaXRlbXMgZGlzY2FyZGVkIGR1ZSB0byB0aGUgZGF0ZSBsaW1pdCBv
ciBpdGVtIGxpbWl0LiAgVGhlIGtleSBmb3IgdGhlIGFycmF5IGlzIFdlYkhpc3RvcnlJdGVtc0tl
eS4KKyAgICBpdGVtcyBkaXNjYXJkZWQgZHVlIHRvIHRoZSBkYXRlIGxpbWl0IG9yIGl0ZW0gbGlt
aXQuIFRoZSBrZXkgZm9yIHRoZSBhcnJheSBpcyBXZWJIaXN0b3J5SXRlbXNLZXkuCiAqLwotLy8g
RklYTUU6IFRoaXMgbm90aWZpY2F0aW9uIHNob3VsZCBiZWNvbWUgQVBJIGluIFdlYkhpc3Rvcnku
aAorLy8gRklYTUU6IFRoaXMgbm90aWZpY2F0aW9uIHNob3VsZCBiZWNvbWUgcHVibGljIEFQSS4K
IGV4dGVybiBOU1N0cmluZyAqV2ViSGlzdG9yeUl0ZW1zRGlzY2FyZGVkV2hpbGVMb2FkaW5nTm90
aWZpY2F0aW9uOwogCi0vLyBGSVhNRTogVGhlIFdlYkhpc3RvcnlQcml2YXRlIGludGVyZmFjZSBz
aG91bGQgYmUgaW4gV2ViSGlzdG9yeUludGVybmFsLmggb3IgaW5zaWRlIFdlYkhpc3RvcnkubQot
QGludGVyZmFjZSBXZWJIaXN0b3J5UHJpdmF0ZSA6IE5TT2JqZWN0IHsKLUBwcml2YXRlCi0gICAg
TlNNdXRhYmxlRGljdGlvbmFyeSAqX2VudHJpZXNCeVVSTDsKLSAgICBEYXRlVG9FbnRyaWVzTWFw
KiBfZW50cmllc0J5RGF0ZTsKLSAgICBOU011dGFibGVBcnJheSAqX29yZGVyZWRMYXN0VmlzaXRl
ZERheXM7Ci0gICAgQk9PTCBpdGVtTGltaXRTZXQ7Ci0gICAgaW50IGl0ZW1MaW1pdDsKLSAgICBC
T09MIGFnZUluRGF5c0xpbWl0U2V0OwotICAgIGludCBhZ2VJbkRheXNMaW1pdDsKLX0KLQotLSAo
dm9pZClhZGRJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5OwotLSAodm9pZClhZGRJdGVtczoo
TlNBcnJheSAqKW5ld0VudHJpZXM7Ci0tIChCT09MKXJlbW92ZUl0ZW06KFdlYkhpc3RvcnlJdGVt
ICopZW50cnk7Ci0tIChCT09MKXJlbW92ZUl0ZW1zOihOU0FycmF5ICopZW50cmllczsKLS0gKEJP
T0wpcmVtb3ZlQWxsSXRlbXM7Ci0tICh2b2lkKXNldExhc3RWaXNpdGVkVGltZUludGVydmFsOihO
U1RpbWVJbnRlcnZhbCl0aW1lIGZvckl0ZW06KFdlYkhpc3RvcnlJdGVtICopaXRlbTsKLQotLSAo
TlNBcnJheSAqKW9yZGVyZWRMYXN0VmlzaXRlZERheXM7Ci0tIChOU0FycmF5ICopb3JkZXJlZEl0
ZW1zTGFzdFZpc2l0ZWRPbkRheTooTlNDYWxlbmRhckRhdGUgKiljYWxlbmRhckRhdGU7Ci0tIChC
T09MKWNvbnRhaW5zSXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmc7Ci0tIChC
T09MKWNvbnRhaW5zVVJMOihOU1VSTCAqKVVSTDsKLS0gKFdlYkhpc3RvcnlJdGVtICopaXRlbUZv
clVSTDooTlNVUkwgKilVUkw7Ci0tIChXZWJIaXN0b3J5SXRlbSAqKWl0ZW1Gb3JVUkxTdHJpbmc6
KE5TU3RyaW5nICopVVJMU3RyaW5nOwotCi0tIChCT09MKWxvYWRGcm9tVVJMOihOU1VSTCAqKVVS
TCBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJbnRvOihOU011dGFibGVBcnJheSAqKWRpc2NhcmRlZEl0
ZW1zIGVycm9yOihOU0Vycm9yICoqKWVycm9yOwotLSAoQk9PTClzYXZlVG9VUkw6KE5TVVJMICop
VVJMIGVycm9yOihOU0Vycm9yICoqKWVycm9yOwotCi0tIChOU0NhbGVuZGFyRGF0ZSopX2FnZUxp
bWl0RGF0ZTsKLQotLSAodm9pZClzZXRIaXN0b3J5SXRlbUxpbWl0OihpbnQpbGltaXQ7Ci0tIChp
bnQpaGlzdG9yeUl0ZW1MaW1pdDsKLS0gKHZvaWQpc2V0SGlzdG9yeUFnZUluRGF5c0xpbWl0Oihp
bnQpbGltaXQ7Ci0tIChpbnQpaGlzdG9yeUFnZUluRGF5c0xpbWl0OwotCi1AZW5kCi0KIEBpbnRl
cmZhY2UgV2ViSGlzdG9yeSAoV2ViUHJpdmF0ZSkKIAogLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcg
U1BJIGlzIHVzZWQgYnkgU2FmYXJpLiBTaG91bGQgaXQgYmUgbWFkZSBpbnRvIHB1YmxpYyBBUEk/
CiAtIChXZWJIaXN0b3J5SXRlbSAqKV9pdGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0
cmluZzsKIAotLy8gRklYTUU6IFNhZmFyaSBkb2Vzbid0IHVzZSB0aGUgZm9sbG93aW5nIFNQSSwg
YW5kIGl0J3MgdXNlZCBpbiBXZWJLaXQgb25seSBpbnNpZGUgV2ViSGlzdG9yeS5tLgotLy8gU2hv
dWxkIHdlIG1vdmUgaXQgaW50byBhIEZpbGVJbnRlcm5hbCBjYXRlZ29yeSBpbnNpZGUgV2ViSGlz
dG9yeS5tLCBvciBkbyB3ZSBuZWVkIGl0IGZvciBvdGhlcgotLy8gY2xpZW50cz8KLS0gKHZvaWQp
cmVtb3ZlSXRlbTooV2ViSGlzdG9yeUl0ZW0gKillbnRyeTsKLS0gKHZvaWQpYWRkSXRlbTooV2Vi
SGlzdG9yeUl0ZW0gKillbnRyeTsKLS0gKEJPT0wpY29udGFpbnNJdGVtRm9yVVJMU3RyaW5nOihO
U1N0cmluZyAqKVVSTFN0cmluZzsKKy8vIEZJWE1FOiBTYWZhcmkgZG9lc24ndCB1c2UgdGhlIGZv
bGxvd2luZyBTUEksIGJ1dCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9y
eSBkb2VzLgorLy8gU2hvdWxkIHdlIG1vdmUgaXQgaW50byBXZWJIaXN0b3J5SW50ZXJuYWwuaCwg
b3IgZG8gd2UgbmVlZCBpdCBmb3Igb3RoZXIgY2xpZW50cz8KKy0gKHZvaWQpX2FkZEl0ZW1Gb3JV
Ukw6KE5TVVJMICopVVJMIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlOwogCi0vLyBGSVhNRTogU2Fm
YXJpIGRvZXNuJ3QgdXNlIHRoZSBmb2xsb3dpbmcgU1BJLCBidXQgb3RoZXIgV2ViS2l0IGNsYXNz
ZXMgZG8uIFNob3VsZCB3ZSBtb3ZlIGl0IGludG8KLS8vIGEgV2ViSGlzdG9yeUludGVybmFsLmgs
IG9yIGRvIHdlIG5lZWQgaXQgZm9yIG90aGVyIGNsaWVudHM/CisvLyBGSVhNRTogbmVpdGhlciBT
YWZhcmkgbm9yIFdlYktpdCB1c2UgdGhlIGZvbGxvd2luZyBTUEkgLS0gZG8gd2Ugc3RpbGwgbmVl
ZCB0aGVtPworLSAodm9pZClhZGRJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5OwogLSAoV2Vi
SGlzdG9yeUl0ZW0gKilhZGRJdGVtRm9yVVJMOihOU1VSTCAqKVVSTDsKLS8vIENoYW5nZSBkYXRl
IG9uIGV4aXN0aW5nIGl0ZW0KLS0gKHZvaWQpc2V0TGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6KE5T
VGltZUludGVydmFsKXRpbWUgZm9ySXRlbTooV2ViSGlzdG9yeUl0ZW0gKilpdGVtOwotCi0vLyBG
SVhNRTogbmVpdGhlciBTYWZhcmkgbm9yIFdlYktpdCB1c2UgdGhlIGZvbGxvd2luZyBTUEkgLS0g
ZG8gd2Ugc3RpbGwgbmVlZCBpdD8KIC0gKE5TQ2FsZW5kYXJEYXRlKilhZ2VMaW1pdERhdGU7Cist
IChCT09MKWNvbnRhaW5zSXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmc7Cist
ICh2b2lkKXJlbW92ZUl0ZW06KFdlYkhpc3RvcnlJdGVtICopZW50cnk7CistICh2b2lkKXNldExh
c3RWaXNpdGVkVGltZUludGVydmFsOihOU1RpbWVJbnRlcnZhbCl0aW1lIGZvckl0ZW06KFdlYkhp
c3RvcnlJdGVtICopaXRlbTsKIAogQGVuZApJbmRleDogV2ViS2l0L21hYy9TdG9yYWdlL1dlYlNl
Y3VyaXR5T3JpZ2luSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1N0b3JhZ2Uv
V2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oCShyZXZpc2lvbiAzMDY5NCkKKysrIFdlYktpdC9t
YWMvU3RvcmFnZS9XZWJTZWN1cml0eU9yaWdpbkludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsy
Niw4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luUHJp
dmF0ZS5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47
CiB9CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJ
KHJldmlzaW9uIDMwNjk0KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw4IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBjb25z
dCBXZWJDb3JlOjpTdHJpbmcmIGRhdGFiYXNlTmFtZSk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgcG9w
dWxhdGVWaXNpdGVkTGlua3MoKTsKKwogcHJpdmF0ZToKICAgICBXZWJWaWV3ICptX3dlYlZpZXc7
CiB9OwpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
bW0JKHJldmlzaW9uIDMwNjk0KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICszNSwxMSBAQAogI2ltcG9ydCAi
V2ViRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJXZWJIVE1MVmlldy5oIgogI2ltcG9ydCAiV2ViSFRN
TFZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJIaXN0b3J5SW50ZXJuYWwuaCIKICNpbXBvcnQg
IldlYktpdFN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCAiV2ViTlNVUkxSZXF1ZXN0RXh0cmFz
LmgiCi0jaW1wb3J0ICJXZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaCIKICNpbXBvcnQgIldlYlNl
Y3VyaXR5T3JpZ2luSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luUHJpdmF0
ZS5oIgogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVBy
aXZhdGUuaCIKICNpbXBvcnQgIldlYlZpZXcuaCIKQEAgLTQ5LDYgKzUwLDcgQEAKICNpbXBvcnQg
PFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVz
dWx0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFn
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9QbGF0Zm9ybVN0cmluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4K
QEAgLTQyNiwzICs0MjgsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFz
ZVF1CiAgICAgW3dlYk9yaWdpbiByZWxlYXNlXTsKIH0KICAgICAKK3ZvaWQgV2ViQ2hyb21lQ2xp
ZW50Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpCit7CisgICAgW1tXZWJIaXN0b3J5IG9wdGlvbmFs
U2hhcmVkSGlzdG9yeV0gX2FkZFZpc2l0ZWRMaW5rc1RvUGFnZUdyb3VwOlttX3dlYlZpZXcgcGFn
ZV0tPmdyb3VwKCldOworfQpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAzMDY5NCkKKysrIFdlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAg
LTcxNSwxMCArNzE1LDggQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZmluYWxTZXR1cEZv
cgogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9yeShjb25zdCBL
VVJMJiB1cmwpCiB7CiAgICAgTlNVUkwgKmNvY29hVVJMID0gdXJsOwotICAgIFdlYkhpc3RvcnlJ
dGVtICplbnRyeSA9IFtbV2ViSGlzdG9yeSBvcHRpb25hbFNoYXJlZEhpc3RvcnldIGFkZEl0ZW1G
b3JVUkw6Y29jb2FVUkxdOwogICAgIGNvbnN0IFN0cmluZyYgcGFnZVRpdGxlID0gY29yZShtX3dl
YkZyYW1lLmdldCgpKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCk7Ci0gICAg
aWYgKCFwYWdlVGl0bGUuaXNFbXB0eSgpKQotICAgICAgICBbZW50cnkgc2V0VGl0bGU6cGFnZVRp
dGxlXTsKKyAgICBbW1dlYkhpc3Rvcnkgb3B0aW9uYWxTaGFyZWRIaXN0b3J5XSBfYWRkSXRlbUZv
clVSTDpjb2NvYVVSTCB0aXRsZTpwYWdlVGl0bGVdOwogfQogIAogYm9vbCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6c2hvdWxkR29Ub0hpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19539</attachid>
            <date>2008-03-04 17:29:45 -0800</date>
            <delta_ts>2008-03-04 18:01:53 -0800</delta_ts>
            <desc>patch</desc>
            <filename>VisitedPatch.txt</filename>
            <type>text/plain</type>
            <size>147225</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDc3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAzIEBACisyMDA4LTAzLTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGZp
eCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUyNgorICAgICAgICAg
IFJFR1JFU1NJT046IGlmcmFtZXMgYXJlIGFkZGVkIHRvIFNhZmFyaSdzIEhpc3RvcnkgbWVudQor
ICAgICAgICAgIGJ5IHNlcGFyYXRpbmcgdGhlIHZpc2l0ZWQgbGluayBtYWNoaW5lcnkgZnJvbSBn
bG9iYWwgaGlzdG9yeQorCisgICAgICAgIFRoaXMgc2hvdWxkIGFsc28gbWFrZSBwYWdlIGxvYWRp
bmcgZmFzdGVyIGR1ZSB0byBtb3JlIGVmZmljaWVudCB2aXNpdGVkIGxpbmsgY29sb3JpbmcuCisK
KyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOiBVcGRhdGVkLgorICAgICAgICAqIFdlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGRlZCBQYWdlR3JvdXAuaC9jcHAsIHJlbW92ZWQgR2xv
YmFsSGlzdG9yeS5oL2NwcC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6IERpdHRvLiBBbHNvIHJlbW92ZWQgV2ViQ29yZUhpc3RvcnkuaC9tLgorCisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOiBVcGRhdGVkIGluY2x1ZGVzLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEVsZW1lbnRBbmRQc2V1ZG9TdGF0ZSk6IEVs
aW1pbmF0ZWQgY29kZSB0byBzZXQKKyAgICAgICAgY3VycmVudEVuY29kZWRVUkwuCisgICAgICAg
IChXZWJDb3JlOjpjaGVja1BzZXVkb1N0YXRlKTogTW92ZWQgbW9zdCBvZiB0aGUgY29kZSBpbnNp
ZGUgYSBuZXcKKyAgICAgICAgUGFnZUdyb3VwOjppc0xpbmtWaXNpdGVkIGZ1bmN0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KTogVGlnaHRlbmVkIGNvZGUgYSBiaXQgYnkgdXNpbmcKKyAgICAgICAgcmVmZXJlbmNlcyBhbmQg
b25seSBnZXR0aW5nIGNvbG9ycyB3aGVuIG5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OmdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKTogRGl0dG8uCisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDogUmVtb3ZlZCBFbmNvZGVkVVJMLCBtX2VuY29kZWRV
UkwsIGFuZCBzZXRFbmNvZGVkVVJMLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphdHRhY2gpOiBSZW1vdmVkIGNhbGwgdG8gc2V0RW5j
b2RlZFVSTC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRVUkwpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKTogRGl0dG8uCisK
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmFkZEJhY2tGb3J3YXJkSXRlbUNsaXBwZWRBdFRhcmdldCk6IENoYW5nZWQgY29k
ZSB0byB1c2UKKyAgICAgICAgZWFybHkgZXhpdCBpZGlvbSB0byBiZSBhIGxpdHRsZSBtb3JlIHJl
YWRhYmxlLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnVybHNNYXRjaEl0ZW0pOiBD
aGFuZ2UgdG8gdXNlIGEgcmVmZXJlbmNlIGZvciBzbGlnaHRseQorICAgICAgICBiZXR0ZXIgZWZm
aWNpZW5jeS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpnb1RvSXRlbSk6IFVzZSBl
YXJseSBleGl0IGlkaW9tIHRvIGJlIGEgbGl0dGxlIG1vcmUKKyAgICAgICAgcmVhZGFibGUuCisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvclN0YW5kYXJkTG9h
ZCk6IE1vdmVkIGhpc3RvcnkgY29kZSBiYWNrCisgICAgICAgIGluIGhlcmUgYW5kIGdvdCByaWQg
b2YgdGhlIGhlbHBlciBmdW5jdGlvbiB1cGRhdGVHbG9iYWxIaXN0b3J5LCByZXN0b3JpbmcgdGhl
CisgICAgICAgIGxvZ2ljIGJlZm9yZSByMzA1NDkuIEFsc28gYWRkZWQgYSBjYWxsIHRvIHRoZSBu
ZXcgYWRkVmlzaXRlZExpbmsgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6dXBkYXRlSGlzdG9yeUZvckNsaWVudFJlZGlyZWN0KTogQWRkZWQgY29kZSB0byBjYWxsCisg
ICAgICAgIGFkZFZpc2l0ZWRMaW5rIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6dXBkYXRlSGlzdG9yeUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbik6IFJlbW92ZWQgY29tbWVu
dC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yUmVsb2Fk
KTogUmVtb3ZlZCBjYWxsIHRvCisgICAgICAgIHVwZGF0ZUdsb2JhbEhpc3Rvcnk7IHdlIGNhbiBq
dXN0IGdvIHdpdGhvdXQgdXBkYXRpbmcgZ2xvYmFsIGhpc3Rvcnkgb3IKKyAgICAgICAgdmlzaXRl
ZCBsaW5rcyBoZXJlLCBhdCBsZWFzdCBmb3Igbm93LCBzaW5jZSBpdCdzIG5vdCBjbGVhciB0aGF0
IGEgcmVsb2FkCisgICAgICAgIGlzIGEgImhpc3RvcnkgZXZlbnQiLgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWRpcmVjdFdpdGhMb2NrZWRIaXN0b3J5
KTogTW92ZWQKKyAgICAgICAgaGlzdG9yeSBjb2RlIGJhY2sgd2hlcmUgaXQgd2FzLCBhbmQgYWRk
ZWQgdGhlIGNhbGwgdG8gYWRkVmlzaXRlZExpbmssIGp1c3QKKyAgICAgICAgYXMgaW4gdXBkYXRl
SGlzdG9yeUZvclN0YW5kYXJkTG9hZCBhYm92ZS4KKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2Fk
ZXIuaDogUmVtb3ZlZCB1cGRhdGVHbG9iYWxIaXN0b3J5IGZ1bmN0aW9uLgorCisgICAgICAgICog
cGFnZS9DaHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojpwb3B1bGF0
ZVZpc2l0ZWRMaW5rcyk6IEFkZGVkLiBFbXB0eSBwbGFjZWhvbGRlciBzbyB3ZQorICAgICAgICBk
b24ndCBoYXZlIHRvIGltcGxlbWVudCB0aGlzIGZvciBldmVyeSBwb3J0IGFsbCBhdCBvbmNlLgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwTG9hZERlZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVm
ZXJyZXIpOiBDaGFuZ2VkIHRvIHVzZSB0aGUKKyAgICAgICAgbmV3IFBhZ2VHcm91cCBjbGFzcy4K
KyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOiBBZGRlZCBwb3B1bGF0ZVZpc2l0ZWRMaW5r
cyBmdW5jdGlvbiwgdXNlZCB0byBmaWxsIHRoZQorICAgICAgICB2aXNpdGVkIGxpbmtzIHNldCBm
cm9tIHRoZSBnbG9iYWwgaGlzdG9yeSBhdCBhcHBsaWNhdGlvbiBzdGFydHVwIHRpbWUuCisKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6
OmZpbmQpOiBVcGRhdGVkIHRvIHVzZSB0aGUgbmV3IFBhZ2VHcm91cCBjbGFzcy4KKworICAgICAg
ICAqIHBhZ2UvR2xvYmFsSGlzdG9yeS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2Uvd2luL0ds
b2JhbEhpc3RvcnlXaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvbWFjL0dsb2JhbEhp
c3RvcnlNYWMubW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVIaXN0
b3J5Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVIaXN0b3J5Lm06
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vd2luL1dlYkNvcmVIaXN0b3J5LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV2ViQ29yZUhpc3RvcnkuaDogUmVtb3ZlZC4K
KworICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpQYWdl
KTogU2V0IG1fZ3JvdXAgdG8gMC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldEdyb3VwTmFt
ZSk6IFNldCB1cCBtX2dyb3VwLiBJZiB0aGUgcGFnZSBpcyBub3QgaW4gYW55CisgICAgICAgIGdy
b3VwLCBzZXQgaXQgdG8gMCBmb3Igbm93IHRvIHBvc3Rwb25lIHRoZSBjb3N0IG9mIGNyZWF0aW5n
IGEgZ3JvdXAuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjppbml0R3JvdXApOiBBZGRlZC4gU2V0
cyBtX2dyb3VwIHRvIHBvaW50IHRvIGEgc2luZ2xlLXBhZ2UKKyAgICAgICAgZ3JvdXA7IHVzZWQg
d2hlbiBnZXR0aW5nIGEgZ3JvdXAuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZW1vdmVBbGxW
aXNpdGVkTGlua3MpOiBBZGRlZC4gQ2FsbHMgcmVtb3ZlVmlzaXRlZExpbmtzCisgICAgICAgIG9u
IGFsbCBwYWdlIGdyb3Vwcy4KKyAgICAgICAgKiBwYWdlL1BhZ2UuaDogTW92ZWQgZW51bXMgaW5z
aWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZS4gUmVtb3ZlZCB0aGUKKyAgICAgICAgZnJhbWVOYW1l
c3BhY2UgZnVuY3Rpb24gYW5kIGluc3RlYWQgYWRkZWQgdGhlIGdyb3VwIGFuZCBncm91cFB0ciBm
dW5jdGlvbnMuCisKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6IEFkZGVkLiBDb250YWlu
cyBhbGwgdGhlIHZpc2l0ZWQgY29kZSBmcm9tIHRoZQorICAgICAgICBDU1NTdHlsZVNlbGVjdG9y
IGluIHRoZSBpc1Zpc2l0ZWRMaW5rIGZ1bmN0aW9uLCBidXQgbW9yZSBlZmZpY2llbnQgYmVjYXVz
ZQorICAgICAgICB3ZSBkb24ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBidWZmZXIuCisgICAg
ICAgICogcGFnZS9QYWdlR3JvdXAuaDogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OktVUkwpOiBaZXJvIG91dCBwb3J0RW5kUG9z
IGFuZCBwYXRoRW5kUG9zLgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6aW5pdCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6S1VSTDo6aGFzUGF0aCk6IFJlbW92ZSBjaGVjayBmb3IgbV9pc1Zh
bGlkLCB3aGljaCBpcyBub3QgbmVlZGVkCisgICAgICAgIGFueSBtb3JlIGJlY2F1c2UgYm90aCBw
YXRoRW5kUG9zIGFuZCBwb3J0RW5kUG9zIGFyZSBzZXQgdG8gMC4KKworICAgICAgICAqIHBsYXRm
b3JtL0tVUkwuaDogQWRkZWQgcGF0aFN0YXJ0LCBwYXRoRW5kLCBhbmQgcGF0aEFmdGVyTGFzdFNs
YXNoLCB3aGljaAorICAgICAgICBhbGxvdyB0aGUgdmlzaXRlZCBVUkwgY29kZSB0byB3b3JrIGVm
ZmljaWVudGx5IG9uIGEgS1VSTCB3aXRob3V0IHN0b3JpbmcgYQorICAgICAgICBjb3B5IG9mIHRo
ZSBVUkwgYXMgYSBDU1NTdHlsZVNlbGVjdG9yOjpFbmNvZGVkVVJMLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IFJlbW92ZWQgaGlzdG9yeUNvbnRhaW5z
LgorICAgICAgICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IFJlbW92ZWQg
dW5uZWVkZWQgaW5jbHVkZS4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwOiBSZW1vdmVkIGhpc3RvcnlDb250YWlucy4KKwogMjAwOC0wMy0wNCAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS5iYXNlLmV4cAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5l
eHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw2ICszNzgsNyBAQCBfX1pON1dlYkNvcmU0UGFnZTM3
c2V0SW5Mb3dRdWFsaXR5SW1hZ2VJCiBfX1pON1dlYkNvcmU0UGFnZTZnb0JhY2tFdgogX19aTjdX
ZWJDb3JlNFBhZ2U4Z29Ub0l0ZW1FUE5TXzExSGlzdG9yeUl0ZW1FTlNfMTNGcmFtZUxvYWRUeXBl
RQogX19aTjdXZWJDb3JlNFBhZ2U5Z29Gb3J3YXJkRXYKK19fWk43V2ViQ29yZTRQYWdlOWluaXRH
cm91cEV2CiBfX1pON1dlYkNvcmU0UGFnZUMxRVBOU18xMkNocm9tZUNsaWVudEVQTlNfMTdDb250
ZXh0TWVudUNsaWVudEVQTlNfMTJFZGl0b3JDbGllbnRFUE5TXzEwRHJhZ0NsaWVudEVQTlNfMTVJ
bnNwZWN0b3JDbGllbnRFCiBfX1pON1dlYkNvcmU0UGFnZUQxRXYKIF9fWk43V2ViQ29yZTVDYWNo
ZTExc2V0RGlzYWJsZWRFYgpAQCAtNTMzLDYgKzUzNCw4IEBAIF9fWk43V2ViQ29yZTlIVE1MTmFt
ZXM3c3JjQXR0ckUKIF9fWk43V2ViQ29yZTlIVE1MTmFtZXM4aHJlZkF0dHJFCiBfX1pON1dlYkNv
cmU5UGFnZUNhY2hlMTFzZXRDYXBhY2l0eUVpCiBfX1pON1dlYkNvcmU5UGFnZUNhY2hlMjdyZWxl
YXNlQXV0b3JlbGVhc2VkUGFnZXNOb3dFdgorX19aTjdXZWJDb3JlOVBhZ2VHcm91cDE0YWRkVmlz
aXRlZExpbmtFUEt0bQorX19aTjdXZWJDb3JlOVBhZ2VHcm91cDIxcmVtb3ZlQWxsVmlzaXRlZExp
bmtzRXYKIF9fWk43V2ViQ29yZTlTZWxlY3Rpb24yMmV4cGFuZFVzaW5nR3JhbnVsYXJpdHlFTlNf
MTVUZXh0R3JhbnVsYXJpdHlFCiBfX1pON1dlYkNvcmU5VGltZXJCYXNlNHN0b3BFdgogX19aTjdX
ZWJDb3JlOVRpbWVyQmFzZTVzdGFydEVkZApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NTUsMTAgKzI3NTUsNiBAQAogCQkJCT4N
CiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxicmlkZ2VcR2xv
YmFsSGlzdG9yeS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGFnZVxIaXN0b3J5LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0y
Nzk1LDYgKzI3OTEsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlR3JvdXAuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlR3JvdXAuaCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGx1
Z2luLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMjgzOCwxMCArMjg0Miw2IEBACiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdl
XHdpblxHbG9iYWxIaXN0b3J5V2luLmNwcCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8
RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXHdpblxQYWdlV2luLmNwcCINCiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KQEAgLTM1NjksMTQgKzM1NjksNiBAQAogCQkJCQk+DQogCQkJCTwv
RmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cd2luXFdl
YkNvcmVIaXN0b3J5LmNwcCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx3aW5cV2ViQ29yZUhpc3RvcnkuaCINCi0JCQkJ
CT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVx3aW5cV2ViQ29yZVRleHRSZW5kZXJlci5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4N
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMzA3NzYpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjQyLDE0ICsyNDIsMTIgQEAKIAkJMUFFODJGRUQwQ0FCMDdFRTAw
MjIzN0FFIC8qIEpTU1FMUmVzdWx0U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUU4MkZFQjBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRT
ZXQuaCAqLzsgfTsKIAkJMUFFODMwNDQwQ0FCMEVEMTAwMjIzN0FFIC8qIEpTRGF0YWJhc2VDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFF
ODMwNDIwQ0FCMEVEMTAwMjIzN0FFIC8qIEpTRGF0YWJhc2VDdXN0b20uY3BwICovOyB9OwogCQkx
QUYzMjY0NjBENzhCNTUzMDA2OEYwQzQgLyogQVhPYmplY3RDYWNoZU1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjMyNjQwMEQ3OEI1NTMwMDY4
RjBDNCAvKiBBWE9iamVjdENhY2hlTWFjLm1tICovOyB9OwotCQkxQUYzMjY0NzBENzhCNTUzMDA2
OEYwQzQgLyogR2xvYmFsSGlzdG9yeU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjMyNjQxMEQ3OEI1NTMwMDY4RjBDNCAvKiBHbG9iYWxIaXN0
b3J5TWFjLm1tICovOyB9OwogCQkxQUYzMjY0ODBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZUFY
T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUYzMjY0MjBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZUFYT2JqZWN0LmggKi87IH07CiAJCTFB
RjMyNjQ5MEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlQVhPYmplY3QubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUYzMjY0MzBENzhCNTUzMDA2OEYw
QzQgLyogV2ViQ29yZUFYT2JqZWN0Lm1tICovOyB9OwogCQkxQUYzMjY0QTBENzhCNTUzMDA2OEYw
QzQgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUYzMjY0NDBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZVNj
cmlwdERlYnVnZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMUFGMzI2NEIwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjMy
NjQ1MEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIubW0gKi87IH07CiAJ
CTFBRjMyNjc4MEQ3OEI5NDQwMDY4RjBDNCAvKiBBWE9iamVjdENhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUYzMjY3NjBENzhCOTQ0MDA2OEYw
QzQgLyogQVhPYmplY3RDYWNoZS5oICovOyB9OwogCQkxQUYzMjY3OTBENzhCOTQ0MDA2OEYwQzQg
LyogRWRpdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQUYzMjY3NzBENzhCOTQ0MDA2OEYwQzQgLyogRWRpdG9yQ2xpZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUFGMzI2N0IwRDc4
Qjk0RTAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjMyNjdBMEQ3OEI5NEUwMDY4RjBDNCAvKiBHbG9iYWxI
aXN0b3J5LmggKi87IH07CiAJCTFBRkUxMTdEMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRT
ZXRSb3dMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBRkUxMTdCMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCAq
LzsgfTsKIAkJMUFGRTExN0UwQ0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRkUxMTdD
MENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi87IH07CiAJCTFBRkUx
MTk5MENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGRTExOTcwQ0JGRkNDNDAw
MzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgKi87IH07CkBAIC0xNDM1LDYgKzE0
MzMsOCBAQAogCQk4NUZGMzE1QTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVGRjMxNTgw
QUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCAqLzsgfTsKIAkJODVGRjMxNUIw
QUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyog
RE9NS2V5Ym9hcmRFdmVudC5tbSAqLzsgfTsKIAkJOTI5MjY0NzcwQjYxRkM3MjAwQjQxRDM0IC8q
IEpTRG9jdW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTI5MjY0NzYwQjYxRkM3MjAwQjQxRDM0IC8qIEpTRG9jdW1lbnRDdXN0b20u
Y3BwICovOyB9OworCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJDMEQ3
OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OworCQk5MzAyQjBCRjBENzlGODJD
MDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwNUIyNEQw
OThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzA3MDVEODA5
RTBDOUI3MDBCMTdGRTQgLyogSlNDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDcwNUQ3MDlFMEM5QjcwMEIxN0ZFNCAvKiBKU0NvdW50
ZXIuY3BwICovOyB9OwogCQk5MzA3MDVEQTA5RTBDOUJGMDBCMTdGRTQgLyogSlNDb3VudGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA3MDVEOTA5
RTBDOUJGMDBCMTdGRTQgLyogSlNDb3VudGVyLmggKi87IH07CkBAIC0xNjQzLDcgKzE2NDMsNiBA
QAogCQk5M0YxOTk5RDA4MjQ1RTU5MDAxRTlBQkMgLyogRGVwcmVjYXRlZFZhbHVlTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2QzIwMkRF
M0I4NjAxRUE0MTIyIC8qIERlcHJlY2F0ZWRWYWx1ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOTk5RTA4MjQ1RTU5MDAxRTlBQkMg
LyogRGVwcmVjYXRlZFZhbHVlTGlzdEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NTNCMDJERTM3NTkwMUVBNDEyMiAvKiBEZXByZWNhdGVk
VmFsdWVMaXN0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTkzRjE5OUE4MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlRnJhbWVWaWV3Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODU0QzAy
REUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZUZyYW1lVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTkzRjE5OUE5MDgyNDVFNTkwMDFFOUFCQyAv
KiBXZWJDb3JlSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjU1MTdEQzIwMzFBQjU2MzAxQTgwMTgwIC8qIFdlYkNvcmVIaXN0b3J5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5QjMw
ODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1NTQwMkRFMzc1OTAxRUE0MTIyIC8q
IFdlYkNvcmVWaWV3RmFjdG9yeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTkzRjE5OUI4MDgyNDVFNTkwMDFFOUFCQyAvKiBTY3JvbGxCYXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0IyQUY4MDQ1
MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxCYXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOTlCQjA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29y
ZUtleWJvYXJkVUlNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCRTk4M0Q5NTA1MkEyRTBBMDA4OTJEODUgLyogV2ViQ29yZUtleWJvYXJkVUlNb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE2
NjcsNyArMTY2Niw2IEBACiAJCTkzRjE5QTlEMDgyNDVFNTkwMDFFOUFCQyAvKiBUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMjc4MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCAq
LzsgfTsKIAkJOTNGMTlBQjkwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzAzMDJERTQ0NzYwMTg2
MzVDQSAvKiBSYW5nZS5jcHAgKi87IH07CiAJCTkzRjE5QUJDMDgyNDVFNTkwMDFFOUFCQyAvKiBY
TUxUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjUyM0QzMDkwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTFRva2VuaXplci5jcHAgKi87IH07
Ci0JCTkzRjE5QUM4MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlSGlzdG9yeS5tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU1MTdEQzMwMzFBQjU2MzAx
QTgwMTgwIC8qIFdlYkNvcmVIaXN0b3J5Lm0gKi87IH07CiAJCTkzRjE5QUQ1MDgyNDVFNTkwMDFF
OUFCQyAvKiBSZW5kZXJUcmVlQXNUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTU1QTQyMDNENzI5MzIwMDg2MzVDRSAvKiBSZW5kZXJUcmVl
QXNUZXh0LmNwcCAqLzsgfTsKIAkJOTNGMTlBREMwODI0NUU1OTAwMUU5QUJDIC8qIFBsYXRmb3Jt
U2Nyb2xsQmFyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkM3QjJBRjkwNDUwODI0MTAwQTgwMDBGIC8qIFBsYXRmb3JtU2Nyb2xsQmFyTWFjLm1t
ICovOyB9OwogCQk5M0YxOUFFMTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRpb25zLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVGODA2OTcw
NTREOUY4NjAwOEJGNzc2IC8qIEJsb2NrRXhjZXB0aW9ucy5tbSAqLzsgfTsKQEAgLTQ1MjYsMTQg
KzQ1MjQsMTIgQEAKIAkJMUFFODJGRUIwQ0FCMDdFRTAwMjIzN0FFIC8qIEpTU1FMUmVzdWx0U2V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMUmVzdWx0U2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRTgzMDQyMENBQjBFRDEwMDIyMzdBRSAvKiBK
U0RhdGFiYXNlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRGF0YWJhc2VDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUYz
MjY0MDBENzhCNTUzMDA2OEYwQzQgLyogQVhPYmplY3RDYWNoZU1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFYT2JqZWN0Q2FjaGVNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRjMyNjQxMEQ3OEI1NTMwMDY4RjBDNCAvKiBHbG9iYWxI
aXN0b3J5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR2xv
YmFsSGlzdG9yeU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGMzI2NDIw
RDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVBWE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJDb3JlQVhPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUFGMzI2NDMwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVBWE9iamVjdC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVBWE9iamVjdC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGMzI2NDQwRDc4QjU1MzAwNjhGMEM0IC8q
IFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJDb3JlU2NyaXB0RGVidWdnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFGMzI2NDUwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVTY3JpcHREZWJ1Z2dl
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGMzI2NzYwRDc4Qjk0NDAwNjhG
MEM0IC8qIEFYT2JqZWN0Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QVhPYmplY3RDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUYzMjY3NzBE
NzhCOTQ0MDA2OEYwQzQgLyogRWRpdG9yQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEVkaXRvckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
QUYzMjY3QTBENzhCOTRFMDA2OEYwQzQgLyogR2xvYmFsSGlzdG9yeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHbG9iYWxIaXN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBRkUxMTdCMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFJlc3VsdFNldFJv
d0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUZFMTE3QzBDQkZGQjM2
MDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTUUxSZXN1bHRTZXRSb3dMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBRkUxMThDMENCRkZDNEUwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTUUxSZXN1bHRTZXRSb3dMaXN0LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2NjMsNiArNTY1OSw4IEBACiAJCTg1RkYzMTU4MEFB
RkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01LZXlib2FyZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTUtleWJvYXJkRXZlbnQu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkyOTI2NDc2MEI2MUZDNzIwMEI0MUQz
NCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0RvY3VtZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTMwNzA1OTAwOUUwQzc1ODAwQjE3RkU0IC8qIENTU1ByaW1pdGl2ZVZhbHVl
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291
cmNlY29kZTsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IENTU1ByaW1pdGl2ZVZhbHVlLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNzA1QzcwOUUwQzk1RjAwQjE3RkU0IC8q
IENvdW50ZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENvdW50ZXIuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzkxMyw4ICs3OTExLDYgQEAKIAkJRjUyM0QzMDQwMkRF
NDQ3NjAxODYzNUNBIC8qIFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDMwOTAyREU0NDc2MDE4NjM1Q0EgLyog
WE1MVG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFhNTFRva2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDMwQTAyREU0NDc2MDE4NjM1
Q0EgLyogWE1MVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFhNTFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjU1MTdEQzIwMzFBQjU2MzAxQTgwMTgw
IC8qIFdlYkNvcmVIaXN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJDb3JlSGlzdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNTUxN0RDMzAz
MUFCNTYzMDFBODAxODAgLyogV2ViQ29yZUhpc3RvcnkubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMub2JqYzsgcGF0aCA9IFdlYkNvcmVIaXN0b3J5Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUY1ODc4NEYwMDJERTM3NTkwMUVBNDEyMiAvKiBDdXJzb3JNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDdXJzb3JN
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwogCQlGNTg3ODUxNTAyREUzNzU5MDFFQTQxMjIgLyogRGVwcmVjYXRlZFB0ckxpc3RJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERl
cHJlY2F0ZWRQdHJMaXN0SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg1MTYwMkRFMzc1OTAxRUE0MTIyIC8qIERlcHJl
Y2F0ZWRQdHJMaXN0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXByZWNhdGVkUHRyTGlzdEltcGwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTgzNTYsOCAr
ODM1Miw2IEBACiAJCQkJODRCMkIyNEYwNTZCRjE1RjAwRDJCNzcxIC8qIFNTTEtleUdlbmVyYXRv
ck1hYy5tbSAqLywKIAkJCQk2NTgyQTE1NTA5OTk5RDZEMDBCRUVCNkQgLyogU3lzdGVtVGltZU1h
Yy5jcHAgKi8sCiAJCQkJNTFERjZEN0YwQjkyQTE4RTAwQzJEQzg1IC8qIFRocmVhZENoZWNrLm1t
ICovLAotCQkJCUY1NTE3REMyMDMxQUI1NjMwMUE4MDE4MCAvKiBXZWJDb3JlSGlzdG9yeS5oICov
LAotCQkJCUY1NTE3REMzMDMxQUI1NjMwMUE4MDE4MCAvKiBXZWJDb3JlSGlzdG9yeS5tICovLAog
CQkJCTg0QjJCMUY3MDU2QkVGM0EwMEQyQjc3MSAvKiBXZWJDb3JlS2V5R2VuZXJhdG9yLmggKi8s
CiAJCQkJODRCMkIxRjgwNTZCRUYzQTAwRDJCNzcxIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IubSAq
LywKIAkJCQk5MzREOUJBNjBCOEMxMTc1MDA3QjQyQTkgLyogV2ViQ29yZU5TU3RyaW5nRXh0cmFz
LmggKi8sCkBAIC04NDIzLDcgKzg0MTcsNiBAQAogCQkJCTY1QTIxNDgzMDk3QTNGNTMwMEI5MDUw
QSAvKiBGcmFtZVRyZWUuaCAqLywKIAkJCQk2NUNCRkVGNzA5NzRGNjA3MDAxREFDMjUgLyogRnJh
bWVWaWV3LmNwcCAqLywKIAkJCQk2NUNCRkVGODA5NzRGNjA3MDAxREFDMjUgLyogRnJhbWVWaWV3
LmggKi8sCi0JCQkJMUFGMzI2N0EwRDc4Qjk0RTAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnkuaCAq
LywKIAkJCQlCQzk0RDE1MDBDMjc1QzhCMDA2QkM2MTcgLyogSGlzdG9yeS5jcHAgKi8sCiAJCQkJ
QkM5NEQxNTEwQzI3NUM4QjAwNkJDNjE3IC8qIEhpc3RvcnkuaCAqLywKIAkJCQlCQzk0RDE1MjBD
Mjc1QzhCMDA2QkM2MTcgLyogSGlzdG9yeS5pZGwgKi8sCkBAIC04NDM0LDYgKzg0MjcsOCBAQAog
CQkJCTkzNUM0NzYyMDlBQzRDRTYwMEE2QUFCNCAvKiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzLmggKi8sCiAJCQkJNjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICovLAog
CQkJCTY1QTIxNDY3MDk3QTMyOTEwMEI5MDUwQSAvKiBQYWdlLmggKi8sCisJCQkJOTMwMkIwQkMw
RDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8sCisJCQkJOTMwMkIwQkUwRDc5Rjgy
QzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovLAogCQkJCTY1RDFDMUM5MDk5MzJCMjIwMDBDQjMy
NCAvKiBQbHVnaW4uaCAqLywKIAkJCQlCQ0VDMDFCQTBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVu
LmNwcCAqLywKIAkJCQlCQ0VDMDFCQjBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmggKi8sCkBA
IC05NzMzLDcgKzk3MjgsNiBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
IAkJCQkxQUYzMjY0MDBENzhCNTUzMDA2OEYwQzQgLyogQVhPYmplY3RDYWNoZU1hYy5tbSAqLywK
LQkJCQkxQUYzMjY0MTBENzhCNTUzMDA2OEYwQzQgLyogR2xvYmFsSGlzdG9yeU1hYy5tbSAqLywK
IAkJCQkxQUYzMjY0MjBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZUFYT2JqZWN0LmggKi8sCiAJ
CQkJMUFGMzI2NDMwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVBWE9iamVjdC5tbSAqLywKIAkJ
CQkxQUYzMjY0NDBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmggKi8s
CkBAIC0xNDEwOCw3ICsxNDEwMiw2IEBACiAJCQkJQjI1NTk5NkYwRDAwRDhCQTAwQkI4MjVDIC8q
IFdLVGFibGVUcmFuc2ZlckZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU0RUM2MTEwOTc3
NzhGNTAwREFCNTJDIC8qIFdlYkNvcmVGcmFtZUJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNGMTk5QTgwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVGcmFtZVZpZXcuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTkzRjE5OUE5MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlSGlzdG9yeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5QzIwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVLZXlH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUJCMDgyNDVFNTkwMDFFOUFCQyAv
KiBXZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNEQ5QkE3MEI4
QzExNzUwMDdCNDJBOSAvKiBXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCBpbiBIZWFkZXJzICovLApA
QCAtMTQyMjksNyArMTQyMjIsNyBAQAogCQkJCTFBRjMyNjQ4MEQ3OEI1NTMwMDY4RjBDNCAvKiBX
ZWJDb3JlQVhPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjMyNjRBMEQ3OEI1NTMwMDY4
RjBDNCAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjMy
Njc4MEQ3OEI5NDQwMDY4RjBDNCAvKiBBWE9iamVjdENhY2hlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkxQUYzMjY3QjBENzhCOTRFMDA2OEYwQzQgLyogR2xvYmFsSGlzdG9yeS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNBODNFNTAwRDdDRTFFOTAwMzQyMUE4IC8qIEpTQ2xpcGJvYXJkLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzZDNDlGNDBEN0RCQTA1MDBGRkE1NTggLyogSlNJbWFnZUNvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzM0NTI0NDBEN0UwMEVBMDAxNjU3NEEgLyog
SlNSR0JDb2xvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTcyNCw3ICsxNTcxNyw2IEBACiAJCQkJ
QjI1NTk5NkQwRDAwRDhCQTAwQkI4MjVDIC8qIFdLU3BvdExpZ2h0RmlsdGVyLm0gaW4gU291cmNl
cyAqLywKIAkJCQlCMjU1OTk3MDBEMDBEOEJBMDBCQjgyNUMgLyogV0tUYWJsZVRyYW5zZmVyRmls
dGVyLm0gaW4gU291cmNlcyAqLywKIAkJCQk2NTRFQzYxMjA5Nzc3OEY1MDBEQUI1MkMgLyogV2Vi
Q29yZUZyYW1lQnJpZGdlLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlBQzgwODI0NUU1OTAw
MUU5QUJDIC8qIFdlYkNvcmVIaXN0b3J5Lm0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFFNTA4
MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZUtleUdlbmVyYXRvci5tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTM0RDlCQTUwQjhDMTE2QjAwN0I0MkE5IC8qIFdlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUREMDVGRTBFMEI4QkEzQzYwMDlBQ0RGRSAvKiBXZWJDb3JlT2Jq
Q0V4dHJhcy5jIGluIFNvdXJjZXMgKi8sCkBAIC0xNTgyNSw5ICsxNTgxNyw5IEBACiAJCQkJQTc3
OTc5MjgwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3NjZGMzUzMEQ2QkRFMzUwMEFCRERCMyAvKiBKU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGMzI2NDYwRDc4QjU1MzAwNjhGMEM0IC8qIEFYT2Jq
ZWN0Q2FjaGVNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQUYzMjY0NzBENzhCNTUzMDA2OEYw
QzQgLyogR2xvYmFsSGlzdG9yeU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBRjMyNjQ5MEQ3
OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlQVhPYmplY3QubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QUYzMjY0QjBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0E4M0U0RjBEN0NFMUU5MDAzNDIxQTggLyogSlNDbGlwYm9h
cmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBODNFNTIwRDdDRTIwNTAwMzQyMUE4IC8qIEpT
Q2xpcGJvYXJkQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNkM0OUYzMEQ3REJBMDUw
MEZGQTU1OCAvKiBKU0ltYWdlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBX
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDE0IEBACiAj
aW5jbHVkZSAiRm9udFZhbHVlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKLSNpbmNsdWRlICJHbG9iYWxIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSFRNTERvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAj
aW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQYWlyLmgiCiAjaW5jbHVkZSAiUmVjdC5oIgog
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0yMzIsNyArMjMzLDYgQEAgQ1NTU3R5bGVTaGVl
dCogQ1NTU3R5bGVTZWxlY3Rvcjo6bV92aWV3UwogQ1NTU3R5bGVTaGVldCAqQ1NTU3R5bGVTZWxl
Y3Rvcjo6bV9zdmdTaGVldCA9IDA7CiAjZW5kaWYKIAotc3RhdGljIENTU1N0eWxlU2VsZWN0b3I6
OkVuY29kZWRVUkwqIGN1cnJlbnRFbmNvZGVkVVJMID0gMDsKIHN0YXRpYyBQc2V1ZG9TdGF0ZSBw
c2V1ZG9TdGF0ZTsKIAogc3RhdGljIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHNjcmVlbkV2
YWwoKQpAQCAtMzE2LDI4ICszMTYsMTAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0KCkK
ICAgICBtX21lZGl1bSA9IDA7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c2V0RW5jb2Rl
ZFVSTChjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgS1VSTCB1ID0gdXJsOwotCi0gICAgdS5zZXRR
dWVyeShTdHJpbmcoKSk7Ci0gICAgdS5zZXRSZWYoU3RyaW5nKCkpOwotICAgIG1fZW5jb2RlZFVS
TC5maWxlID0gdS5zdHJpbmcoKTsKLSAgICBpbnQgcG9zID0gbV9lbmNvZGVkVVJMLmZpbGUucmV2
ZXJzZUZpbmQoJy8nKTsKLSAgICBtX2VuY29kZWRVUkwucGF0aCA9IG1fZW5jb2RlZFVSTC5maWxl
OwotICAgIGlmIChwb3MgPiAwKSB7Ci0gICAgICAgIG1fZW5jb2RlZFVSTC5wYXRoLnRydW5jYXRl
KHBvcyk7Ci0gICAgICAgIG1fZW5jb2RlZFVSTC5wYXRoLmFwcGVuZCgnLycpOwotICAgIH0KLSAg
ICB1LnNldFBhdGgoU3RyaW5nKCkpOwotICAgIG1fZW5jb2RlZFVSTC5wcmVmaXggPSB1LnN0cmlu
ZygpOwotfQotCiBDU1NTdHlsZVNlbGVjdG9yOjp+Q1NTU3R5bGVTZWxlY3RvcigpCiB7CiAgICAg
ZGVsZXRlIG1fbWVkaXVtOwotICAgIDo6ZGVsZXRlIG1fcm9vdERlZmF1bHRTdHlsZTsKLQorICAg
IGRlbGV0ZSBtX3Jvb3REZWZhdWx0U3R5bGU7CiAgICAgZGVsZXRlIG1fYXV0aG9yU3R5bGU7CiAg
ICAgZGVsZXRlIG1fdXNlclN0eWxlOwogfQpAQCAtNTM3LDcgKzUxOSw2IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6aW5pdEVsZW1lbnRBbmRQc2UKICAgICAgICAgbV9zdHlsZWRFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCk7CiAgICAgZWxzZQogICAgICAg
ICBtX3N0eWxlZEVsZW1lbnQgPSAwOwotICAgIGN1cnJlbnRFbmNvZGVkVVJMID0gJm1fZW5jb2Rl
ZFVSTDsKICAgICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb1Vua25vd247CiB9CiAKQEAgLTU2OCw4MSAr
NTQ5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0Rm9yU3R5bGVSZXNvbAogICAgIG1f
Zm9udERpcnR5ID0gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZpbmRTbGFzaERvdERv
dFNsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQotewotICAgIHVu
c2lnbmVkIGxvb3BMaW1pdCA9IGxlbmd0aCA8IDQgPyAwIDogbGVuZ3RoIC0gMzsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kpIHsKLSAgICAgICAgaWYgKGNoYXJh
Y3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcuJyAmJiBjaGFyYWN0ZXJz
W2kgKyAyXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgM10gPT0gJy8nKQotICAgICAgICAgICAg
cmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQg
ZmluZFNsYXNoU2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIGlu
dCBwb3NpdGlvbikKLXsKLSAgICB1bnNpZ25lZCBsb29wTGltaXQgPSBsZW5ndGggPCAyID8gMCA6
IGxlbmd0aCAtIDE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gcG9zaXRpb247IGkgPCBsb29wTGlt
aXQ7ICsraSkgewotICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVy
c1tpICsgMV0gPT0gJy8nKQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVy
biAtMTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZmluZFNsYXNoRG90U2xhc2goY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgdW5zaWduZWQgbG9vcExpbWl0
ID0gbGVuZ3RoIDwgMyA/IDAgOiBsZW5ndGggLSAyOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsb29wTGltaXQ7ICsraSkgewotICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycg
JiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcvJykK
LSAgICAgICAgICAgIHJldHVybiBpOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBjb250YWluc0NvbG9uU2xhc2hTbGFzaChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHVuc2lnbmVkIGxvb3BMaW1pdCA9IGxlbmd0
aCA8IDMgPyAwIDogbGVuZ3RoIC0gMjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9v
cExpbWl0OyArK2kpCi0gICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICc6JyAmJiBjaGFyYWN0
ZXJzW2kgKyAxXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy8nKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBjbGVh
blBhdGgoVmVjdG9yPFVDaGFyLCA1MTI+JiBwYXRoKQotewotICAgIGludCBwb3M7Ci0gICAgd2hp
bGUgKChwb3MgPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCkp
KSAhPSAtMSkgewotICAgICAgICBpbnQgcHJldiA9IHJldmVyc2VGaW5kKHBhdGguZGF0YSgpLCBw
YXRoLnNpemUoKSwgJy8nLCBwb3MgLSAxKTsKLSAgICAgICAgLy8gZG9uJ3QgcmVtb3ZlIHRoZSBo
b3N0LCBpLmUuIGh0dHA6Ly9mb28ub3JnLy4uL2Zvby5odG1sCi0gICAgICAgIGlmIChwcmV2IDwg
MCB8fCAocHJldiA+IDMgJiYgcGF0aFtwcmV2IC0gMl0gPT0gJzonICYmIHBhdGhbcHJldiAtIDFd
ID09ICcvJykpCi0gICAgICAgICAgICBwYXRoLnJlbW92ZShwb3MsIDMpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBwYXRoLnJlbW92ZShwcmV2LCBwb3MgLSBwcmV2ICsgMyk7Ci0gICAgfQot
Ci0gICAgLy8gRG9uJ3QgcmVtb3ZlICIvLyIgZnJvbSBhbiBhbmNob3IgaWRlbnRpZmllci4gLXJq
dwotICAgIC8vIFNldCByZWZQb3MgdG8gLTIgdG8gbWVhbiAiSSBoYXZlbid0IGxvb2tlZCBmb3Ig
dGhlIGFuY2hvciB5ZXQiLgotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gd2FzdGUgYSBmdW5jdGlv
biBjYWxsIG9uIHRoZSBzZWFyY2ggZm9yIHRoZSB0aGUgYW5jaG9yCi0gICAgLy8gaW4gdGhlIHZh
c3QgbWFqb3JpdHkgb2YgY2FzZXMgd2hlcmUgdGhlcmUgaXMgbm8gIi8vIiBpbiB0aGUgcGF0aC4K
LSAgICBwb3MgPSAwOwotICAgIGludCByZWZQb3MgPSAtMjsKLSAgICB3aGlsZSAoKHBvcyA9IGZp
bmRTbGFzaFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgcG9zKSkgIT0gLTEpIHsKLSAg
ICAgICAgaWYgKHJlZlBvcyA9PSAtMikKLSAgICAgICAgICAgIHJlZlBvcyA9IGZpbmQocGF0aC5k
YXRhKCksIHBhdGguc2l6ZSgpLCAnIycpOwotICAgICAgICBpZiAocmVmUG9zID4gMCAmJiBwb3Mg
Pj0gcmVmUG9zKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKHBvcyA9PSAwIHx8
IHBhdGhbcG9zIC0gMV0gIT0gJzonKQotICAgICAgICAgICAgcGF0aC5yZW1vdmUocG9zKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcG9zICs9IDI7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6
IFdlIGRvbid0IHdhbnQgdG8gcmVtb3ZlICIvLi8iIGZyb20gYW4gYW5jaG9yIGlkZW50aWZpZXIg
ZWl0aGVyLgotICAgIHdoaWxlICgocG9zID0gZmluZFNsYXNoRG90U2xhc2gocGF0aC5kYXRhKCks
IHBhdGguc2l6ZSgpKSkgIT0gLTEpCi0gICAgICAgIHBhdGgucmVtb3ZlKHBvcywgMik7Ci19Ci0K
LXN0YXRpYyB2b2lkIGNoZWNrUHNldWRvU3RhdGUoRWxlbWVudCAqZSwgYm9vbCBjaGVja1Zpc2l0
ZWQgPSB0cnVlKQorc3RhdGljIHZvaWQgY2hlY2tQc2V1ZG9TdGF0ZShFbGVtZW50KiBlLCBib29s
IGNoZWNrVmlzaXRlZCA9IHRydWUpCiB7CiAgICAgaWYgKCFlLT5pc0xpbmsoKSkgewogICAgICAg
ICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb05vbmU7CkBAIC02NzEsMjYgKzU3OCwyMSBAQCBzdGF0aWMg
dm9pZCBjaGVja1BzZXVkb1N0YXRlKEVsZW1lbnQgKmUsCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IGF0dHItPmNoYXJhY3RlcnMoKTsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyLT5sZW5ndGgoKTsKKyAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBlLT5kb2N1bWVudCgpOwogCi0gICAgaWYgKGNvbnRhaW5zQ29sb25TbGFzaFNsYXNoKGNo
YXJhY3RlcnMsIGxlbmd0aCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFN0cmFuZ2UgdG8gbm90IGNs
ZWFuIHRoZSBwYXRoIGp1c3QgYmVhY2F1c2UgaXQgaGFzICI6Ly8iIGluIGl0LgotICAgICAgICBw
c2V1ZG9TdGF0ZSA9IGhpc3RvcnlDb250YWlucyhjaGFyYWN0ZXJzLCBsZW5ndGgpID8gUHNldWRv
VmlzaXRlZCA6IFBzZXVkb0xpbms7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1l
KCk7CisgICAgaWYgKCFmcmFtZSkgeworICAgICAgICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb0xpbms7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8VUNoYXIsIDUxMj4gYnVmZmVy
OwotICAgIGlmIChsZW5ndGggJiYgY2hhcmFjdGVyc1swXSA9PSAnLycpIHsKLSAgICAgICAgYnVm
ZmVyLmFwcGVuZChjdXJyZW50RW5jb2RlZFVSTC0+cHJlZml4LmNoYXJhY3RlcnMoKSwgY3VycmVu
dEVuY29kZWRVUkwtPnByZWZpeC5sZW5ndGgoKSk7Ci0gICAgfSBlbHNlIGlmIChsZW5ndGggJiYg
Y2hhcmFjdGVyc1swXSA9PSAnIycpIHsKLSAgICAgICAgYnVmZmVyLmFwcGVuZChjdXJyZW50RW5j
b2RlZFVSTC0+ZmlsZS5jaGFyYWN0ZXJzKCksIGN1cnJlbnRFbmNvZGVkVVJMLT5maWxlLmxlbmd0
aCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBidWZmZXIuYXBwZW5kKGN1cnJlbnRFbmNvZGVk
VVJMLT5wYXRoLmNoYXJhY3RlcnMoKSwgY3VycmVudEVuY29kZWRVUkwtPnBhdGgubGVuZ3RoKCkp
OworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkgeworICAg
ICAgICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb0xpbms7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotICAgIGNsZWFuUGF0aChidWZm
ZXIpOwotICAgIHBzZXVkb1N0YXRlID0gaGlzdG9yeUNvbnRhaW5zKGJ1ZmZlci5kYXRhKCksIGJ1
ZmZlci5zaXplKCkpID8gUHNldWRvVmlzaXRlZCA6IFBzZXVkb0xpbms7CisKKyAgICBwc2V1ZG9T
dGF0ZSA9IHBhZ2UtPmdyb3VwKCkuaXNMaW5rVmlzaXRlZChkb2N1bWVudCwgKmF0dHIpID8gUHNl
dWRvVmlzaXRlZCA6IFBzZXVkb0xpbms7CiB9CiAKIC8vIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBw
YXJzaW5nIG50aC1hcmd1bWVudHMKQEAgLTgyOSwxMiArNzMxLDE0IEBAIGJvb2wgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICAgICAgICAgICAgICAgICAgbWFwcGVkQXR0
cnNNYXRjaCA9IHMtPm1hcHBlZEF0dHJpYnV0ZXMoKS0+bWFwc0VxdWl2YWxlbnQobV9zdHlsZWRF
bGVtZW50LT5tYXBwZWRBdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgICAgIGlmIChtYXBwZWRB
dHRyc01hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgbGlua3NNYXRjaCA9IHRydWU7
CisKICAgICAgICAgICAgICAgICAgICAgaWYgKHMtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGUgdmlzaXRlZCBzdGF0
ZSBtYXRjaGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgbGlua0NvbG9yID0gbV9l
bGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IENvbG9yIHZpc2l0ZWRDb2xvciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtD
b2xvcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBzZXVkb1N0YXRlID09IFBzZXVk
b1Vua25vd24pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHNldWRvU3RhdGUgPT0gUHNl
dWRvVW5rbm93bikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbG9yJiBs
aW5rQ29sb3IgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbG9yJiB2aXNpdGVkQ29sb3IgPSBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGVja1BzZXVkb1N0YXRlKG1fZWxlbWVudCwgc3R5bGUtPnBzZXVkb1N0YXRlKCkgIT0g
UHNldWRvQW55TGluayB8fCBsaW5rQ29sb3IgIT0gdmlzaXRlZENvbG9yKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtzTWF0Y2ggPSAocHNl
dWRvU3RhdGUgPT0gc3R5bGUtPnBzZXVkb1N0YXRlKCkpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNTEzNCw4ICs1MDM4LDggQEAgQ29sb3IgQ1NTU3R5
bGVTZWxlY3Rvcjo6Z2V0Q29sb3JGcm9tUHJpbQogICAgICAgICBpZiAoaWRlbnQgPT0gQ1NTX1ZB
TF9fV0VCS0lUX1RFWFQpCiAgICAgICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PnRleHRDb2xvcigpOwogICAgICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NfVkFMX19XRUJLSVRf
TElOSykgewotICAgICAgICAgICAgQ29sb3IgbGlua0NvbG9yID0gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT5saW5rQ29sb3IoKTsKLSAgICAgICAgICAgIENvbG9yIHZpc2l0ZWRDb2xvciA9IG1fZWxl
bWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpOworICAgICAgICAgICAgY29uc3Qg
Q29sb3ImIGxpbmtDb2xvciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7Cisg
ICAgICAgICAgICBjb25zdCBDb2xvciYgdmlzaXRlZENvbG9yID0gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT52aXNpdGVkTGlua0NvbG9yKCk7CiAgICAgICAgICAgICBpZiAobGlua0NvbG9yID09IHZp
c2l0ZWRDb2xvcikKICAgICAgICAgICAgICAgICBjb2wgPSBsaW5rQ29sb3I7CiAgICAgICAgICAg
ICBlbHNlIHsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDMwNzc2KQorKysg
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTQg
KzExMCw2IEBAIHB1YmxpYzoKIAogICAgICAgICBib29sIHN0cmljdFBhcnNpbmc7CiAKLSAgICAg
ICAgc3RydWN0IEVuY29kZWRVUkwgewotICAgICAgICAgICAgU3RyaW5nIHByZWZpeDsgLy8gcHJv
dG9jb2wsIGhvc3QsIGV0Yy4KLSAgICAgICAgICAgIFN0cmluZyBwYXRoOwotICAgICAgICAgICAg
U3RyaW5nIGZpbGU7Ci0gICAgICAgIH0gbV9lbmNvZGVkVVJMOwotCi0gICAgICAgIHZvaWQgc2V0
RW5jb2RlZFVSTChjb25zdCBLVVJMJiB1cmwpOwotCiAgICAgICAgIC8vIEdpdmVuIGEgQ1NTIGtl
eXdvcmQgaW4gdGhlIHJhbmdlICh4eC1zbWFsbCB0byAtd2Via2l0LXh4eC1sYXJnZSksIHRoaXMg
ZnVuY3Rpb24gd2lsbCByZXR1cm4KICAgICAgICAgLy8gdGhlIGNvcnJlY3QgZm9udCBzaXplIHNj
YWxlZCByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGRlZmF1bHQgKG1lZGl1bSkuCiAgICAgICAgIGZs
b2F0IGZvbnRTaXplRm9yS2V5d29yZChpbnQga2V5d29yZCwgYm9vbCBxdWlya3NNb2RlLCBib29s
IG1vbm9zcGFjZSkgY29uc3Q7CkBAIC0yNTAsMTEgKzI0Miw4IEBAIHB1YmxpYzoKICAgICAgICAg
Ym9vbCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlczsKIAogICAgICAgICBSZWZQdHI8Q1NTRm9u
dFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKLQogICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiBtX3NlbGVjdG9yQXR0cnM7Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qPiBtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzOwot
ICAgICAgICAKKyAgICAgICAgVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4gbV9h
ZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsczsgICAgICAgIAogICAgICAgICBWZWN0b3I8TWVk
aWFRdWVyeVJlc3VsdCo+IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKIAog
ICAgICAgICB2b2lkIGFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSopOwpJbmRleDogV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyMTUsNyArMTIxNSw2IEBAIHZvaWQgRG9jdW1lbnQ6OmF0dGFjaCgpCiAg
ICAgICAgIGlmIChTZXR0aW5ncyogZG9jU2V0dGluZ3MgPSBzZXR0aW5ncygpKQogICAgICAgICAg
ICAgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzID0gZG9jU2V0dGluZ3MtPmF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkKCk7CiAgICAgICAgIG1fc3R5bGVTZWxlY3RvciA9IG5ldyBDU1NTdHlsZVNl
bGVjdG9yKHRoaXMsIHVzZXJTdHlsZVNoZWV0KCksIG1fc3R5bGVTaGVldHMuZ2V0KCksIG1fbWFw
cGVkRWxlbWVudFNoZWV0LmdldCgpLCAhaW5Db21wYXRNb2RlKCksIG1hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyk7Ci0gICAgICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0RW5jb2RlZFVSTChtX3VybCk7
CiAgICAgfQogCiAgICAgcmVjYWxjU3R5bGUoRm9yY2UpOwpAQCAtMTYzNiw5ICsxNjM1LDYgQEAg
dm9pZCBEb2N1bWVudDo6c2V0VVJMKGNvbnN0IEtVUkwmIHVybCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV91cmwgPSB1cmw7Ci0gICAgaWYgKG1fc3R5bGVTZWxlY3RvcikKLSAgICAgICAgbV9z
dHlsZVNlbGVjdG9yLT5zZXRFbmNvZGVkVVJMKHVybCk7Ci0KICAgICBtX2lzQWxsb3dlZFRvTG9h
ZExvY2FsUmVzb3VyY2VzID0gc2hvdWxkQmVBbGxvd2VkVG9Mb2FkTG9jYWxSZXNvdXJjZXMoKTsK
ICB9CiAgCkBAIC0yMjA4LDcgKzIyMDQsNiBAQCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZVNl
bGVjdG9yKCkKICAgICAvLyBDcmVhdGUgYSBuZXcgc3R5bGUgc2VsZWN0b3IKICAgICBkZWxldGUg
bV9zdHlsZVNlbGVjdG9yOwogICAgIG1fc3R5bGVTZWxlY3RvciA9IG5ldyBDU1NTdHlsZVNlbGVj
dG9yKHRoaXMsIHVzZXJTdHlsZVNoZWV0KCksIG1fc3R5bGVTaGVldHMuZ2V0KCksIG1fbWFwcGVk
RWxlbWVudFNoZWV0LmdldCgpLCAhaW5Db21wYXRNb2RlKCksIG1hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcyk7Ci0gICAgbV9zdHlsZVNlbGVjdG9yLT5zZXRFbmNvZGVkVVJMKG1fdXJsKTsKICAgICBt
X2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0b3IgPSB0cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQAogI2luY2x1ZGUgIk1haW5SZXNv
dXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIK
KyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNp
bmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCkBAIC0z
ODQ5LDIxICszODUwLDI1IEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEZyYW1lTG9hZGVyOjpj
cmUKIAogdm9pZCBGcmFtZUxvYWRlcjo6YWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0
KGJvb2wgZG9DbGlwKQogewotICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQot
ICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIEZyYW1lKiBtYWluRnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsKLSAg
ICAgICAgICAgIEFTU0VSVChtYWluRnJhbWUpOwotICAgICAgICAgICAgRnJhbWVMb2FkZXIqIGZy
YW1lTG9hZGVyID0gbWFpbkZyYW1lLT5sb2FkZXIoKTsKLQotICAgICAgICAgICAgaWYgKCFmcmFt
ZUxvYWRlci0+bV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uICYmIHBhZ2UtPmJhY2tGb3J3YXJk
TGlzdCgpLT5lbnRyaWVzKCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgICAgICBmcmFtZUxv
YWRlci0+bV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBtX2NsaWVudC0+ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpOwotICAgICAgICAgICAgfQor
ICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IGZyYW1l
TG9hZGVyLT5jcmVhdGVIaXN0b3J5SXRlbVRyZWUobV9mcmFtZSwgZG9DbGlwKTsKLSAgICAgICAg
ICAgIExPRyhCYWNrRm9yd2FyZCwgIldlYkNvcmVCYWNrRm9yd2FyZCAtIEFkZGluZyBiYWNrZm9y
d2FyZCBpdGVtICVwIGZvciBmcmFtZSAlcyIsIGl0ZW0uZ2V0KCksIGRvY3VtZW50TG9hZGVyKCkt
PnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHBhZ2UtPmJhY2tG
b3J3YXJkTGlzdCgpLT5hZGRJdGVtKGl0ZW0pOwotICAgICAgICB9CisgICAgaWYgKGRvY3VtZW50
TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEZyYW1lKiBtYWluRnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsKKyAgICBBU1NFUlQobWFp
bkZyYW1lKTsKKyAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBtYWluRnJhbWUtPmxvYWRl
cigpOworCisgICAgaWYgKCFmcmFtZUxvYWRlci0+bV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9u
ICYmIHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5lbnRyaWVzKCkuc2l6ZSgpID09IDEpIHsKKyAg
ICAgICAgZnJhbWVMb2FkZXItPm1fZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbiA9IHRydWU7Cisg
ICAgICAgIG1fY2xpZW50LT5kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCk7CisgICAgfQorCisg
ICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gZnJhbWVMb2FkZXItPmNyZWF0ZUhpc3RvcnlJ
dGVtVHJlZShtX2ZyYW1lLCBkb0NsaXApOworICAgIExPRyhCYWNrRm9yd2FyZCwgIldlYkNvcmVC
YWNrRm9yd2FyZCAtIEFkZGluZyBiYWNrZm9yd2FyZCBpdGVtICVwIGZvciBmcmFtZSAlcyIsIGl0
ZW0uZ2V0KCksIGRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgp
KTsKKyAgICBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+YWRkSXRlbShpdGVtKTsKIH0KIAogUGFz
c1JlZlB0cjxIaXN0b3J5SXRlbT4gRnJhbWVMb2FkZXI6OmNyZWF0ZUhpc3RvcnlJdGVtVHJlZShG
cmFtZSogdGFyZ2V0RnJhbWUsIGJvb2wgY2xpcEF0VGFyZ2V0KQpAQCAtNDExMSwxMyArNDExNiwx
MiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkSXRlbShIaXN0b3J5SXRlbSogCiAvLyBXYWxrIHRo
ZSBmcmFtZSB0cmVlIGFuZCBlbnN1cmUgdGhhdCB0aGUgVVJMcyBtYXRjaCB0aGUgVVJMcyBpbiB0
aGUgaXRlbS4KIGJvb2wgRnJhbWVMb2FkZXI6OnVybHNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qIGl0
ZW0pIGNvbnN0CiB7Ci0gICAgS1VSTCBjdXJyZW50VVJMID0gZG9jdW1lbnRMb2FkZXIoKS0+dXJs
KCk7Ci0gICAgCisgICAgY29uc3QgS1VSTCYgY3VycmVudFVSTCA9IGRvY3VtZW50TG9hZGVyKCkt
PnVybCgpOwogICAgIGlmICghZXF1YWxJZ25vcmluZ1JlZihjdXJyZW50VVJMLCBpdGVtLT51cmwo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGNvbnN0IEhpc3RvcnlJdGVt
VmVjdG9yJiBjaGlsZEl0ZW1zID0gaXRlbS0+Y2hpbGRyZW4oKTsKLSAgICAKKwogICAgIHVuc2ln
bmVkIHNpemUgPSBjaGlsZEl0ZW1zLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIEZyYW1lKiBjaGlsZEZyYW1lID0gbV9mcmFtZS0+dHJl
ZSgpLT5jaGlsZChjaGlsZEl0ZW1zW2ldLT50YXJnZXQoKSk7CkBAIC00MTM4LDE3ICs0MTQyLDE5
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiAKICAgICAvLyA8cmRh
cjovL3Byb2JsZW0vMzk1MTI4Mz4gY2FuIHZpZXcgcGFnZXMgZnJvbSB0aGUgYmFjay9mb3J3YXJk
IGNhY2hlIHRoYXQgc2hvdWxkIGJlIGRpc2FsbG93ZWQgYnkgUGFyZW50YWwgQ29udHJvbHMKICAg
ICAvLyBVbHRpbWF0ZWx5LCBoaXN0b3J5IGl0ZW0gbmF2aWdhdGlvbnMgc2hvdWxkIGdvIHRocm91
Z2ggdGhlIHBvbGljeSBkZWxlZ2F0ZS4gVGhhdCdzIGNvdmVyZWQgaW46CiAgICAgLy8gPHJkYXI6
Ly9wcm9ibGVtLzM5Nzk1Mzk+IGJhY2svZm9yd2FyZCBjYWNoZSBuYXZpZ2F0aW9ucyBzaG91bGQg
Y29uc3VsdCBwb2xpY3kgZGVsZWdhdGUKLSAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBh
Z2UoKSkKLSAgICAgICAgaWYgKG1fY2xpZW50LT5zaG91bGRHb1RvSGlzdG9yeUl0ZW0odGFyZ2V0
SXRlbSkpIHsKLSAgICAgICAgICAgIEJhY2tGb3J3YXJkTGlzdCogYmZMaXN0ID0gcGFnZS0+YmFj
a0ZvcndhcmRMaXN0KCk7Ci0gICAgICAgICAgICBIaXN0b3J5SXRlbSogY3VycmVudEl0ZW0gPSBi
Zkxpc3QtPmN1cnJlbnRJdGVtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFNldCB0
aGUgQkYgY3Vyc29yIGJlZm9yZSBjb21taXQsIHdoaWNoIGxldHMgdGhlIHVzZXIgcXVpY2tseSBj
bGljayBiYWNrL2ZvcndhcmQgYWdhaW4uCi0gICAgICAgICAgICAvLyAtIHBsdXMsIGl0IG9ubHkg
bWFrZXMgc2Vuc2UgZm9yIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wZXJhdGlvbiB0aHJvdWdoIHRo
ZSBmcmFtZXRyZWUsCi0gICAgICAgICAgICAvLyBhcyBvcHBvc2VkIHRvIGhhcHBlbmluZyBmb3Ig
c29tZS9vbmUgb2YgdGhlIHBhZ2UgY29tbWl0cyB0aGF0IG1pZ2h0IGhhcHBlbiBzb29uCi0gICAg
ICAgICAgICBiZkxpc3QtPmdvVG9JdGVtKHRhcmdldEl0ZW0pOwotICAgICAgICAgICAgcmVjdXJz
aXZlR29Ub0l0ZW0odGFyZ2V0SXRlbSwgY3VycmVudEl0ZW0sIHR5cGUpOwotICAgICAgICB9Cisg
ICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIW1fY2xpZW50LT5zaG91bGRHb1RvSGlzdG9yeUl0ZW0odGFyZ2V0
SXRlbSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNldCB0aGUgQkYgY3Vyc29yIGJlZm9y
ZSBjb21taXQsIHdoaWNoIGxldHMgdGhlIHVzZXIgcXVpY2tseSBjbGljayBiYWNrL2ZvcndhcmQg
YWdhaW4uCisgICAgLy8gLSBwbHVzLCBpdCBvbmx5IG1ha2VzIHNlbnNlIGZvciB0aGUgdG9wIGxl
dmVsIG9mIHRoZSBvcGVyYXRpb24gdGhyb3VnaCB0aGUgZnJhbWV0cmVlLAorICAgIC8vIGFzIG9w
cG9zZWQgdG8gaGFwcGVuaW5nIGZvciBzb21lL29uZSBvZiB0aGUgcGFnZSBjb21taXRzIHRoYXQg
bWlnaHQgaGFwcGVuIHNvb24KKyAgICBCYWNrRm9yd2FyZExpc3QqIGJmTGlzdCA9IHBhZ2UtPmJh
Y2tGb3J3YXJkTGlzdCgpOworICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSA9IGJmTGlzdC0+
Y3VycmVudEl0ZW0oKTsgICAgCisgICAgYmZMaXN0LT5nb1RvSXRlbSh0YXJnZXRJdGVtKTsKKyAg
ICByZWN1cnNpdmVHb1RvSXRlbSh0YXJnZXRJdGVtLCBjdXJyZW50SXRlbSwgdHlwZSk7CiB9CiAK
IC8vIFRoZSBnZW5lcmFsIGlkZWEgaGVyZSBpcyB0byB0cmF2ZXJzZSB0aGUgZnJhbWUgdHJlZSBh
bmQgdGhlIGl0ZW0gdHJlZSBpbiBwYXJhbGxlbCwKQEAgLTQyMjYsMjUgKzQyMzIsMjMgQEAgYm9v
bCBGcmFtZUxvYWRlcjo6Y2hpbGRGcmFtZXNNYXRjaEl0ZW0oSAogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVHbG9iYWxIaXN0b3J5KCkKLXsKLSAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3Mp
Ci0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IEtVUkwmIHVybCA9IGRvY3VtZW50TG9h
ZGVyKCktPnVybEZvckhpc3RvcnkoKTsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fY2xpZW50LT51cGRhdGVHbG9iYWxIaXN0b3J5KHVybCk7Ci19CisvLyBU
aGVyZSBhcmUgMyB0aGluZ3MgeW91IG1pZ2h0IHRoaW5rIG9mIGFzICJoaXN0b3J5IiwgYWxsIG9m
IHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHRoZXNlIGZ1bmN0aW9ucy4KKy8vCisvLyAgICAgMSkgQmFj
ay9mb3J3YXJkOiBUaGUgbV9jdXJyZW50SGlzdG9yeUl0ZW0gaXMgcGFydCBvZiB0aGlzIG1lY2hh
bmlzbS4KKy8vICAgICAyKSBHbG9iYWwgaGlzdG9yeTogSGFuZGxlZCBieSB0aGUgY2xpZW50Lgor
Ly8gICAgIDMpIFZpc2l0ZWQgbGlua3M6IEhhbmRsZWQgYnkgdGhlIFBhZ2VHcm91cC4KIAogdm9p
ZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvclN0YW5kYXJkTG9hZCgpCiB7CiAgICAgTE9H
KEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgU3RhbmRhcmQg
TG9hZCBpbiBmcmFtZSAlcyIsIGRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKLSAgICAKKworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNl
dHRpbmdzKCk7CisgICAgYm9vbCBuZWVkUHJpdmFjeSA9ICFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+
cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOworICAgIGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBk
b2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7CisKICAgICAvLyBJZiB0aGUgbmF2aWdh
dGlvbiBvY2N1cmVkIGR1cmluZyBsb2FkIGFuZCB0aGlzIGlzIGEgc3ViZnJhbWUsIHVwZGF0ZSB0
aGUgY3VycmVudAotICAgIC8vIGhpc3RvcnkgaXRlbSByYXRoZXIgdGhhbiBhZGRpbmcgYSBuZXcg
b25lLiA8cmRhcjovL3Byb2JsZW0vNTMzMzQ5Nj4KKyAgICAvLyBiYWNrL2ZvcndhcmQgaXRlbSBy
YXRoZXIgdGhhbiBhZGRpbmcgYSBuZXcgb25lIGFuZCBkb24ndCBhZGQgdGhlIG5ldyBVUkwgdG8g
Z2xvYmFsCisgICAgLy8gaGlzdG9yeSBhdCBhbGwuIEJ1dCBkbyBhZGQgaXQgdG8gdmlzaXRlZCBs
aW5rcy4gPHJkYXI6Ly9wcm9ibGVtLzUzMzM0OTY+CiAgICAgYm9vbCBmcmFtZU5hdmlnYXRpb25E
dXJpbmdMb2FkID0gZmFsc2U7CiAgICAgaWYgKG1fbmF2aWdhdGlvbkR1cmluZ0xvYWQpIHsKICAg
ICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IG1fZnJhbWUtPm93bmVyRWxlbWVu
dCgpOwpAQCAtNDI1MywxNCArNDI1NywyMCBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0
b3J5Rm9yU3RhbmRhCiAgICAgfQogCiAgICAgaWYgKCFmcmFtZU5hdmlnYXRpb25EdXJpbmdMb2Fk
ICYmICFkb2N1bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGlyZWN0KCkpIHsKLSAgICAgICAgaWYg
KCFkb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCkuaXNFbXB0eSgpKQorICAgICAgICBp
ZiAoIWhpc3RvcnlVUkwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhZGRCYWNrRm9yd2FyZEl0
ZW1DbGlwcGVkQXRUYXJnZXQodHJ1ZSk7CisgICAgICAgICAgICBpZiAoIW5lZWRQcml2YWN5KQor
ICAgICAgICAgICAgICAgIG1fY2xpZW50LT51cGRhdGVHbG9iYWxIaXN0b3J5KGhpc3RvcnlVUkwp
OworICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChkb2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJs
ZVVSTCgpLmlzRW1wdHkoKSAmJiBtX2N1cnJlbnRIaXN0b3J5SXRlbSkgewogICAgICAgICBtX2N1
cnJlbnRIaXN0b3J5SXRlbS0+c2V0VVJMKGRvY3VtZW50TG9hZGVyKCktPnVybCgpKTsKICAgICAg
ICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0tPnNldEZvcm1JbmZvRnJvbVJlcXVlc3QoZG9jdW1lbnRM
b2FkZXIoKS0+cmVxdWVzdCgpKTsKICAgICB9CiAKLSAgICB1cGRhdGVHbG9iYWxIaXN0b3J5KCk7
CisgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSAmJiAhbmVlZFByaXZhY3kpIHsKKyAgICAg
ICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5n
cm91cCgpLmFkZFZpc2l0ZWRMaW5rKGhpc3RvcnlVUkwpOworICAgIH0KIH0KIAogdm9pZCBGcmFt
ZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvckNsaWVudFJlZGlyZWN0KCkKQEAgLTQyNzcsNyArNDI4
NywxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yQ2xpZW50CiAgICAgICAg
IG1fY3VycmVudEhpc3RvcnlJdGVtLT5jbGVhclNjcm9sbFBvaW50KCk7CiAgICAgfQogCi0gICAg
Ly8gRklYTUU6IFNob3VsZCB3ZSBjYWxsIHVwZGF0ZUdsb2JhbEhpc3RvcnkgaGVyZT8KKyAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIGJvb2wgbmVlZFBy
aXZhY3kgPSAhc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsK
KyAgICBjb25zdCBLVVJMJiBoaXN0b3J5VVJMID0gZG9jdW1lbnRMb2FkZXIoKS0+dXJsRm9ySGlz
dG9yeSgpOworCisgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSAmJiAhbmVlZFByaXZhY3kp
IHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgICAg
ICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKGhpc3RvcnlVUkwpOworICAgIH0KIH0KIAog
dm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbigp
CkBAIC00Mjg5LDggKzQzMDYsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9y
QmFja0ZvCiAKICAgICAvLyBNdXN0IGdyYWIgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIGJl
Zm9yZSBkaXN0dXJiaW5nIGl0CiAgICAgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9J
dGVtKG1fcHJldmlvdXNIaXN0b3J5SXRlbS5nZXQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxk
IHdlIGNhbGwgdXBkYXRlR2xvYmFsSGlzdG9yeSBoZXJlPwogfQogCiB2b2lkIEZyYW1lTG9hZGVy
Ojp1cGRhdGVIaXN0b3J5Rm9yUmVsb2FkKCkKQEAgLTQzMTAsOCArNDMyNSw2IEBAIHZvaWQgRnJh
bWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWxvYWQKICAgICAgICAgaWYgKGRvY3VtZW50TG9h
ZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9jdXJyZW50
SGlzdG9yeUl0ZW0tPnNldFVSTChkb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0VVJMKCkpOwogICAg
IH0KLSAgICAKLSAgICB1cGRhdGVHbG9iYWxIaXN0b3J5KCk7CiB9CiAKIHZvaWQgRnJhbWVMb2Fk
ZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWRpcmVjdFdpdGhMb2NrZWRIaXN0b3J5KCkKQEAgLTQzMjEs
OSArNDMzNCwxNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yUmVkaXJlCiAg
ICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9y
IGludGVybmFsIGxvYWQgaW4gZnJhbWUgJXMiLCBkb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0
ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAgICAgCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9m
cmFtZS0+c2V0dGluZ3MoKTsKKyAgICBib29sIG5lZWRQcml2YWN5ID0gIXNldHRpbmdzIHx8IHNl
dHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7CisgICAgY29uc3QgS1VSTCYgaGlzdG9y
eVVSTCA9IGRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKTsKKwogICAgIGlmIChkb2N1
bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGlyZWN0KCkpIHsKLSAgICAgICAgaWYgKCFtX2N1cnJl
bnRIaXN0b3J5SXRlbSAmJiAhbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKKyAgICAgICAgaWYg
KCFtX2N1cnJlbnRIaXN0b3J5SXRlbSAmJiAhbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkgewog
ICAgICAgICAgICAgYWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0KHRydWUpOworICAg
ICAgICAgICAgaWYgKCFuZWVkUHJpdmFjeSAmJiAhaGlzdG9yeVVSTC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZUdsb2JhbEhpc3RvcnkoaGlzdG9yeVVSTCk7Cisg
ICAgICAgIH0KICAgICAgICAgaWYgKG1fY3VycmVudEhpc3RvcnlJdGVtKSB7CiAgICAgICAgICAg
ICBtX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0VVJMKGRvY3VtZW50TG9hZGVyKCktPnVybCgpKTsK
ICAgICAgICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVtLT5zZXRGb3JtSW5mb0Zyb21SZXF1ZXN0
KGRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSk7CkBAIC00MzM0LDcgKzQzNTQsMTAgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvclJlZGlyZQogICAgICAgICAgICAgcGFyZW50
RnJhbWUtPmxvYWRlcigpLT5tX2N1cnJlbnRIaXN0b3J5SXRlbS0+YWRkQ2hpbGRJdGVtKGNyZWF0
ZUhpc3RvcnlJdGVtKHRydWUpKTsKICAgICB9CiAKLSAgICB1cGRhdGVHbG9iYWxIaXN0b3J5KCk7
CisgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSAmJiAhbmVlZFByaXZhY3kpIHsKKyAgICAg
ICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5n
cm91cCgpLmFkZFZpc2l0ZWRMaW5rKGhpc3RvcnlVUkwpOworICAgIH0KIH0KIAogdm9pZCBGcmFt
ZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvckNvbW1pdCgpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJ
KHJldmlzaW9uIDMwNzc2KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDU2LDggKzQ1Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCB1cGRhdGVIaXN0b3J5Rm9yQ2xpZW50UmVkaXJlY3QoKTsKICAgICAgICAgdm9pZCB1cGRh
dGVIaXN0b3J5Rm9yQ29tbWl0KCk7CiAgICAgCi0gICAgICAgIHZvaWQgdXBkYXRlR2xvYmFsSGlz
dG9yeSgpOwotCiAgICAgICAgIHZvaWQgcmVkaXJlY3Rpb25UaW1lckZpcmVkKFRpbWVyPEZyYW1l
TG9hZGVyPiopOwogICAgICAgICB2b2lkIGNoZWNrQ29tcGxldGVkVGltZXJGaXJlZChUaW1lcjxG
cmFtZUxvYWRlcj4qKTsKICAgICAgICAgdm9pZCBjaGVja0xvYWRDb21wbGV0ZVRpbWVyRmlyZWQo
VGltZXI8RnJhbWVMb2FkZXI+Kik7CkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNpb24gMzA3NzYpCisrKyBX
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQ
YXVzZWRUaW1lb3V0cy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKQEAgLTM1MCwxNyArMzUxLDE4IEBAIHZvaWQgQ2hyb21lQ2xpZW50
OjpkYXNoYm9hcmRSZWdpb25zQ2hhbmcKIHsKIH0KIAordm9pZCBDaHJvbWVDbGllbnQ6OnBvcHVs
YXRlVmlzaXRlZExpbmtzKCkKK3sKK30KKwogLy8gLS0tLS0tLS0KIAogUGFnZUdyb3VwTG9hZERl
ZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXIoUGFnZSogcGFnZSwgYm9vbCBkZWZlclNlbGYp
CiB7Ci0gICAgY29uc3QgSGFzaFNldDxQYWdlKj4qIGdyb3VwID0gcGFnZS0+ZnJhbWVOYW1lc3Bh
Y2UoKTsKLQotICAgIGlmICghZ3JvdXApCi0gICAgICAgIHJldHVybjsKKyAgICBjb25zdCBIYXNo
U2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2VzKCk7CiAKLSAgICBIYXNoU2V0
PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZ3JvdXAtPmVuZCgpOwotICAgIGZvciAoSGFz
aFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZ3JvdXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdl
cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBh
Z2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBQYWdlKiBvdGhlclBhZ2Ug
PSAqaXQ7CiAgICAgICAgIGlmICgoZGVmZXJTZWxmIHx8IG90aGVyUGFnZSAhPSBwYWdlKSkgewog
ICAgICAgICAgICAgaWYgKCFvdGhlclBhZ2UtPmRlZmVyc0xvYWRpbmcoKSkKSW5kZXg6IFdlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgJKHJldmlzaW9uIDMwNzc2KQorKysgV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpOwogCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpOworCiAgICAgcHJvdGVjdGVk
OgogICAgICAgICB2aXJ0dWFsIH5DaHJvbWVDbGllbnQoKSB7IH0KICAgICB9OwpJbmRleDogV2Vi
Q29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1l
VHJlZS5jcHAJKHJldmlzaW9uIDMwNzc2KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgPHN0ZGFy
Zy5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KQEAgLTE4MiwxNyArMTgzLDE2IEBAIEZyYW1lKiBGcmFtZVRyZWU6OmZpbmQoY29uc3Qg
QXRvbWljU3RyaW4KICAgICAgICAgaWYgKGZyYW1lLT50cmVlKCktPm5hbWUoKSA9PSBuYW1lKQog
ICAgICAgICAgICAgcmV0dXJuIGZyYW1lOwogCi0gICAgLy8gU2VhcmNoIHRoZSBlbnRpcmUgdHJl
ZSBmb3IgYWxsIG90aGVyIHBhZ2VzIGluIHRoaXMgbmFtZXNwYWNlLgotICAgIGNvbnN0IEhhc2hT
ZXQ8UGFnZSo+KiBwYWdlcyA9IHBhZ2UtPmZyYW1lTmFtZXNwYWNlKCk7Ci0gICAgaWYgKHBhZ2Vz
KSB7Ci0gICAgICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy0+
ZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cGFnZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGFnZSogb3Ro
ZXJQYWdlID0gKml0OwotICAgICAgICAgICAgaWYgKG90aGVyUGFnZSAhPSBwYWdlKQotICAgICAg
ICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gb3RoZXJQYWdlLT5tYWluRnJhbWUoKTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChmcmFtZS0+dHJlZSgpLT5uYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmcmFtZTsKLSAgICAgICAgfQorICAgIC8vIFNlYXJjaCB0aGUgZW50
aXJlIHRyZWUgb2YgZWFjaCBvZiB0aGUgb3RoZXIgcGFnZXMgaW4gdGhpcyBuYW1lc3BhY2UuCisg
ICAgLy8gRklYTUU6IElzIHJhbmRvbSBvcmRlciBPSz8KKyAgICBjb25zdCBIYXNoU2V0PFBhZ2Uq
PiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2VzKCk7CisgICAgSGFzaFNldDxQYWdlKj46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxQYWdlKj46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFnZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIFBhZ2UqIG90aGVyUGFnZSA9ICppdDsKKyAgICAgICAgaWYgKG90aGVyUGFnZSAhPSBw
YWdlKQorICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBvdGhlclBhZ2UtPm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkKKyAgICAg
ICAgICAgICAgICBpZiAoZnJhbWUtPnRyZWUoKS0+bmFtZSgpID09IG5hbWUpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmcmFtZTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKSW5kZXg6IFdl
YkNvcmUvcGFnZS9HbG9iYWxIaXN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ds
b2JhbEhpc3RvcnkuaAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL3BhZ2UvR2xvYmFsSGlz
dG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIEdsb2JhbEhpc3RvcnlfaAotI2RlZmluZSBHbG9iYWxIaXN0b3J5X2gKLQotI2luY2x1
ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAg
Ym9vbCBoaXN0b3J5Q29udGFpbnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdsb2JhbEhpc3Rv
cnlfaApJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5o
IgpAQCAtNDksOCArNTAsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBQYWdlR3JvdXAqPiBQYWdlR3JvdXBNYXA7CisKIHN0YXRpYyBIYXNoU2V0
PFBhZ2UqPiogYWxsUGFnZXM7Ci1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8UGFnZSo+
Kj4qIGZyYW1lTmFtZXNwYWNlczsKK3N0YXRpYyBQYWdlR3JvdXBNYXAqIHBhZ2VHcm91cHM7CiAK
ICNpZm5kZWYgTkRFQlVHCiBXVEZMb2dDaGFubmVsIExvZ1dlYkNvcmVQYWdlTGVha3MgPSAgeyAw
eDAwMDAwMDAwLCAiIiwgV1RGTG9nQ2hhbm5lbE9uIH07CkBAIC04NSw2ICs4OCw3IEBAIFBhZ2U6
OlBhZ2UoQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQsIEMKICAgICAsIG1fcGFyZW50SW5zcGVj
dG9yQ29udHJvbGxlcigwKQogICAgICwgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQoZmFsc2UpCiAg
ICAgLCBtX3VzZXJTdHlsZVNoZWV0TW9kaWZpY2F0aW9uVGltZSgwKQorICAgICwgbV9ncm91cCgw
KQogICAgICwgbV9kZWJ1Z2dlcigwKQogewogICAgIGlmICghYWxsUGFnZXMpIHsKQEAgLTE2NSwz
NyArMTY5LDQxIEBAIHZvaWQgUGFnZTo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEYKIAog
dm9pZCBQYWdlOjpzZXRHcm91cE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGlmIChm
cmFtZU5hbWVzcGFjZXMgJiYgIW1fZ3JvdXBOYW1lLmlzRW1wdHkoKSkgewotICAgICAgICBIYXNo
U2V0PFBhZ2UqPiogb2xkTmFtZXNwYWNlID0gZnJhbWVOYW1lc3BhY2VzLT5nZXQobV9ncm91cE5h
bWUpOwotICAgICAgICBpZiAob2xkTmFtZXNwYWNlKSB7Ci0gICAgICAgICAgICBvbGROYW1lc3Bh
Y2UtPnJlbW92ZSh0aGlzKTsKLSAgICAgICAgICAgIGlmIChvbGROYW1lc3BhY2UtPmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgIGZyYW1lTmFtZXNwYWNlcy0+cmVtb3ZlKG1fZ3JvdXBOYW1l
KTsKLSAgICAgICAgICAgICAgICBkZWxldGUgb2xkTmFtZXNwYWNlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9CisgICAgaWYgKCFtX2dyb3VwTmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgQVNT
RVJUKCFtX3NpbmdsZVBhZ2VHcm91cCk7CisgICAgICAgIEFTU0VSVChtX2dyb3VwKTsKKyAgICAg
ICAgQVNTRVJUKHBhZ2VHcm91cHMpOworICAgICAgICBBU1NFUlQocGFnZUdyb3Vwcy0+Z2V0KG1f
Z3JvdXBOYW1lKSA9PSBtX2dyb3VwKTsKKyAgICAgICAgbV9ncm91cC0+cmVtb3ZlUGFnZSh0aGlz
KTsKKyAgICAgICAgaWYgKG1fZ3JvdXAtPnBhZ2VzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cGFnZUdyb3Vwcy0+cmVtb3ZlKG1fZ3JvdXBOYW1lKTsKICAgICB9CiAgICAgbV9ncm91cE5hbWUg
PSBuYW1lOwotICAgIGlmICghbmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZU5h
bWVzcGFjZXMpCi0gICAgICAgICAgICBmcmFtZU5hbWVzcGFjZXMgPSBuZXcgSGFzaE1hcDxTdHJp
bmcsIEhhc2hTZXQ8UGFnZSo+Kj47Ci0gICAgICAgIEhhc2hTZXQ8UGFnZSo+KiBuZXdOYW1lc3Bh
Y2UgPSBmcmFtZU5hbWVzcGFjZXMtPmdldChuYW1lKTsKLSAgICAgICAgaWYgKCFuZXdOYW1lc3Bh
Y2UpIHsKLSAgICAgICAgICAgIG5ld05hbWVzcGFjZSA9IG5ldyBIYXNoU2V0PFBhZ2UqPjsKLSAg
ICAgICAgICAgIGZyYW1lTmFtZXNwYWNlcy0+YWRkKG5hbWUsIG5ld05hbWVzcGFjZSk7CisgICAg
aWYgKG5hbWUuaXNFbXB0eSgpKQorICAgICAgICBtX2dyb3VwID0gMDsKKyAgICBlbHNlIHsKKyAg
ICAgICAgbV9zaW5nbGVQYWdlR3JvdXAuY2xlYXIoKTsKKyAgICAgICAgaWYgKCFwYWdlR3JvdXBz
KQorICAgICAgICAgICAgcGFnZUdyb3VwcyA9IG5ldyBQYWdlR3JvdXBNYXA7CisgICAgICAgIHBh
aXI8UGFnZUdyb3VwTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gcGFnZUdyb3Vwcy0+YWRk
KG5hbWUsIDApOworICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQuZmlyc3QtPnNlY29uZCk7CisgICAgICAgICAgICBtX2dyb3VwID0gcmVzdWx0
LmZpcnN0LT5zZWNvbmQ7CisgICAgICAgICAgICBtX2dyb3VwLT5hZGRQYWdlKHRoaXMpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHQuZmlyc3QtPnNlY29uZCk7
CisgICAgICAgICAgICBtX2dyb3VwID0gbmV3IFBhZ2VHcm91cCh0aGlzKTsKKyAgICAgICAgICAg
IHJlc3VsdC5maXJzdC0+c2Vjb25kID0gbV9ncm91cDsKICAgICAgICAgfQotICAgICAgICBuZXdO
YW1lc3BhY2UtPmFkZCh0aGlzKTsKICAgICB9CiB9CiAKLWNvbnN0IEhhc2hTZXQ8UGFnZSo+KiBQ
YWdlOjpmcmFtZU5hbWVzcGFjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChmcmFtZU5hbWVzcGFj
ZXMgJiYgIW1fZ3JvdXBOYW1lLmlzRW1wdHkoKSkgPyBmcmFtZU5hbWVzcGFjZXMtPmdldChtX2dy
b3VwTmFtZSkgOiAwOwotfQotCi1jb25zdCBIYXNoU2V0PFBhZ2UqPiogUGFnZTo6ZnJhbWVOYW1l
c3BhY2UoY29uc3QgU3RyaW5nJiBncm91cE5hbWUpCit2b2lkIFBhZ2U6OmluaXRHcm91cCgpCiB7
Ci0gICAgcmV0dXJuIChmcmFtZU5hbWVzcGFjZXMgJiYgIWdyb3VwTmFtZS5pc0VtcHR5KCkpID8g
ZnJhbWVOYW1lc3BhY2VzLT5nZXQoZ3JvdXBOYW1lKSA6IDA7CisgICAgQVNTRVJUKCFtX3Npbmds
ZVBhZ2VHcm91cCk7CisgICAgQVNTRVJUKCFtX2dyb3VwKTsKKyAgICBtX3NpbmdsZVBhZ2VHcm91
cC5zZXQobmV3IFBhZ2VHcm91cCh0aGlzKSk7CisgICAgbV9ncm91cCA9IG1fc2luZ2xlUGFnZUdy
b3VwLmdldCgpOwogfQogCiB2b2lkIFBhZ2U6OnNldE5lZWRzUmVhcHBseVN0eWxlcygpCkBAIC0z
NjAsNiArMzY4LDIxIEBAIGNvbnN0IFN0cmluZyYgUGFnZTo6dXNlclN0eWxlU2hlZXQoKSBjb24K
ICAgICByZXR1cm4gbV91c2VyU3R5bGVTaGVldDsKIH0KIAordm9pZCBQYWdlOjpyZW1vdmVBbGxW
aXNpdGVkTGlua3MoKQoreworICAgIGlmICghYWxsUGFnZXMpCisgICAgICAgIHJldHVybjsKKyAg
ICBIYXNoU2V0PFBhZ2VHcm91cCo+IGdyb3VwczsKKyAgICBIYXNoU2V0PFBhZ2UqPjo6aXRlcmF0
b3IgZW5kID0gYWxsUGFnZXMtPmVuZCgpOworICAgIGZvciAoSGFzaFNldDxQYWdlKj46Oml0ZXJh
dG9yIGl0ID0gYWxsUGFnZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBp
ZiAoUGFnZUdyb3VwKiBncm91cCA9ICgqaXQpLT5ncm91cFB0cigpKQorICAgICAgICAgICAgZ3Jv
dXBzLmFkZChncm91cCk7CisgICAgfQorICAgIEhhc2hTZXQ8UGFnZUdyb3VwKj46Oml0ZXJhdG9y
IGUyID0gZ3JvdXBzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxQYWdlR3JvdXAqPjo6aXRlcmF0
b3IgaXQgPSBncm91cHMuYmVnaW4oKTsgaXQgIT0gZTI7ICsraXQpCisgICAgICAgICgqaXQpLT5y
ZW1vdmVWaXNpdGVkTGlua3MoKTsKK30KKwogdm9pZCBQYWdlOjpzZXREZWJ1Z2dlckZvckFsbFBh
Z2VzKEtKUzo6RGVidWdnZXIqIGRlYnVnZ2VyKQogewogICAgIEFTU0VSVChhbGxQYWdlcyk7Cklu
ZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdl
LmgJKHJldmlzaW9uIDMwNzc2KQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0q
LQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMzcsMjIgKzM3LDEzIEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IGNsYXNzIERlYnVnZ2VyOwogfQogCi10eXBlZGVmIGVudW0gVGV4dENhc2VTZW5zaXRpdml0eSB7
Ci0gICAgVGV4dENhc2VTZW5zaXRpdmUsCi0gICAgVGV4dENhc2VJbnNlbnNpdGl2ZQotfTsKLQot
dHlwZWRlZiBlbnVtIEZpbmREaXJlY3Rpb24gewotICAgIEZpbmREaXJlY3Rpb25Gb3J3YXJkLAot
ICAgIEZpbmREaXJlY3Rpb25CYWNrd2FyZAotfTsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgQ2hyb21lOwogICAgIGNsYXNzIENocm9tZUNsaWVudDsKICAgICBjbGFzcyBDb250
ZXh0TWVudUNsaWVudDsKICAgICBjbGFzcyBDb250ZXh0TWVudUNvbnRyb2xsZXI7CisgICAgY2xh
c3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgRHJhZ0NsaWVudDsKICAgICBjbGFzcyBEcmFnQ29udHJv
bGxlcjsKICAgICBjbGFzcyBFZGl0b3JDbGllbnQ7CkBAIC02MSwxNSArNTIsMTkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEluc3BlY3RvckNsaWVudDsKICAgICBjbGFzcyBJbnNw
ZWN0b3JDb250cm9sbGVyOwogICAgIGNsYXNzIE5vZGU7CisgICAgY2xhc3MgUGFnZUdyb3VwOwog
ICAgIGNsYXNzIFByb2dyZXNzVHJhY2tlcjsKICAgICBjbGFzcyBTZWxlY3Rpb247CiAgICAgY2xh
c3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKICAgICBjbGFzcyBTZXR0aW5nczsKKyAgICBjbGFzcyBL
VVJMOworCisgICAgZW51bSBUZXh0Q2FzZVNlbnNpdGl2aXR5IHsgVGV4dENhc2VTZW5zaXRpdmUs
IFRleHRDYXNlSW5zZW5zaXRpdmUgfTsKKyAgICBlbnVtIEZpbmREaXJlY3Rpb24geyBGaW5kRGly
ZWN0aW9uRm9yd2FyZCwgRmluZERpcmVjdGlvbkJhY2t3YXJkIH07CiAKICAgICBjbGFzcyBQYWdl
IDogTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIHZvaWQgc2V0TmVl
ZHNSZWFwcGx5U3R5bGVzKCk7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoU2V0PFBhZ2UqPiog
ZnJhbWVOYW1lc3BhY2UoY29uc3QgU3RyaW5nJik7CiAKICAgICAgICAgUGFnZShDaHJvbWVDbGll
bnQqLCBDb250ZXh0TWVudUNsaWVudCosIEVkaXRvckNsaWVudCosIERyYWdDbGllbnQqLCBJbnNw
ZWN0b3JDbGllbnQqKTsKICAgICAgICAgflBhZ2UoKTsKQEAgLTkwLDkgKzg1LDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSosIEZyYW1l
TG9hZFR5cGUpOwogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRHcm91cE5hbWUoY29uc3QgU3Ry
aW5nJik7Ci0gICAgICAgIFN0cmluZyBncm91cE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2dyb3Vw
TmFtZTsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZ3JvdXBOYW1lOyB9CiAKLSAgICAgICAgY29uc3QgSGFzaFNldDxQYWdlKj4qIGZyYW1lTmFt
ZXNwYWNlKCkgY29uc3Q7CisgICAgICAgIFBhZ2VHcm91cCYgZ3JvdXAoKSB7IGlmICghbV9ncm91
cCkgaW5pdEdyb3VwKCk7IHJldHVybiAqbV9ncm91cDsgfQorICAgICAgICBQYWdlR3JvdXAqIGdy
b3VwUHRyKCkgeyByZXR1cm4gbV9ncm91cDsgfSAvLyBjYW4gcmV0dXJuIDAKIAogICAgICAgICB2
b2lkIGluY3JlbWVudEZyYW1lQ291bnQoKSB7ICsrbV9mcmFtZUNvdW50OyB9CiAgICAgICAgIHZv
aWQgZGVjcmVtZW50RnJhbWVDb3VudCgpIHsgLS1tX2ZyYW1lQ291bnQ7IH0KQEAgLTE0MCw3ICsx
MzYsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgSElOU1RBTkNFIGlu
c3RhbmNlSGFuZGxlKCkgeyByZXR1cm4gc19pbnN0YW5jZUhhbmRsZTsgfQogI2VuZGlmCiAKKyAg
ICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7CisKICAgICBwcml2YXRl
OgorICAgICAgICB2b2lkIGluaXRHcm91cCgpOworCiAgICAgICAgIE93blB0cjxDaHJvbWU+IG1f
Y2hyb21lOwogICAgICAgICBPd25QdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4gbV9kcmFnQ2FyZXRD
b250cm9sbGVyOwogICAgICAgICBPd25QdHI8RHJhZ0NvbnRyb2xsZXI+IG1fZHJhZ0NvbnRyb2xs
ZXI7CkBAIC0xNzEsOCArMTcxLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgbXV0
YWJsZSBib29sIG1fZGlkTG9hZFVzZXJTdHlsZVNoZWV0OwogICAgICAgICBtdXRhYmxlIHRpbWVf
dCBtX3VzZXJTdHlsZVNoZWV0TW9kaWZpY2F0aW9uVGltZTsKIAorPDw8PDw8PCAubWluZQorICAg
ICAgICBPd25QdHI8UGFnZUdyb3VwPiBtX3NpbmdsZVBhZ2VHcm91cDsKKyAgICAgICAgUGFnZUdy
b3VwKiBtX2dyb3VwOworCis9PT09PT09CiAgICAgICAgIEtKUzo6RGVidWdnZXIqIG1fZGVidWdn
ZXI7CiAKKz4+Pj4+Pj4gLnIzMDc3NgogI2lmIFBMQVRGT1JNKFdJTikgfHwgKFBMQVRGT1JNKFdY
KSAmJiBkZWZpbmVkKF9fV1hNU1dfXykpCiAgICAgICAgIHN0YXRpYyBISU5TVEFOQ0Ugc19pbnN0
YW5jZUhhbmRsZTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorCisjaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gLS0tLS0tLS0KKworUGFnZUdyb3VwOjpQYWdlR3JvdXAoKQor
ICAgIDogbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQoZmFsc2UpCisgICAgLCBtX3Zpc2l0ZWRMaW5r
VXBkYXRlRGVmZXJyYWxDb3VudCgwKQoreworfQorCitQYWdlR3JvdXA6OlBhZ2VHcm91cChQYWdl
KiBwYWdlKQorICAgIDogbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQoZmFsc2UpCisgICAgLCBtX3Zp
c2l0ZWRMaW5rVXBkYXRlRGVmZXJyYWxDb3VudCgwKQoreworICAgIEFTU0VSVChwYWdlKTsKKyAg
ICBtX3BhZ2VzLmFkZChwYWdlKTsKK30KKwordm9pZCBQYWdlR3JvdXA6OmFkZFBhZ2UoUGFnZSog
cGFnZSkKK3sKKyAgICBBU1NFUlQocGFnZSk7CisgICAgQVNTRVJUKCFtX3BhZ2VzLmNvbnRhaW5z
KHBhZ2UpKTsKKyAgICBtX3BhZ2VzLmFkZChwYWdlKTsKK30KKwordm9pZCBQYWdlR3JvdXA6OnJl
bW92ZVBhZ2UoUGFnZSogcGFnZSkKK3sKKyAgICBBU1NFUlQocGFnZSk7CisgICAgQVNTRVJUKG1f
cGFnZXMuY29udGFpbnMocGFnZSkpOworICAgIG1fcGFnZXMucmVtb3ZlKHBhZ2UpOworfQorCitz
dGF0aWMgaW5saW5lIGludCBmaW5kU2xhc2hEb3REb3RTbGFzaChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICB1bnNpZ25lZCBsb29wTGltaXQgPSBsZW5ndGgg
PCA0ID8gMCA6IGxlbmd0aCAtIDM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb3BM
aW1pdDsgKytpKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBjaGFyYWN0
ZXJzW2kgKyAxXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy4nICYmIGNoYXJhY3Rl
cnNbaSArIDNdID09ICcvJykKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1
cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRTbGFzaFNsYXNoKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBpbnQgcG9zaXRpb24pCit7CisgICAgdW5zaWdu
ZWQgbG9vcExpbWl0ID0gbGVuZ3RoIDwgMiA/IDAgOiBsZW5ndGggLSAxOworICAgIGZvciAodW5z
aWduZWQgaSA9IHBvc2l0aW9uOyBpIDwgbG9vcExpbWl0OyArK2kpIHsKKyAgICAgICAgaWYgKGNo
YXJhY3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcvJykKKyAgICAgICAg
ICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUg
aW50IGZpbmRTbGFzaERvdFNsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVu
Z3RoKQoreworICAgIHVuc2lnbmVkIGxvb3BMaW1pdCA9IGxlbmd0aCA8IDMgPyAwIDogbGVuZ3Ro
IC0gMjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kpIHsKKyAg
ICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcu
JyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9PSAnLycpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAg
ICB9CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNDb2xv
blNsYXNoU2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICBpZiAobGVuZ3RoIDwgMykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2lnbmVk
IGxvb3BMaW1pdCA9IGxlbmd0aCAtIDI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxv
b3BMaW1pdDsgKytpKQorICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnOicgJiYgY2hhcmFj
dGVyc1tpICsgMV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcvJykKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGNsZWFuUGF0aChWZWN0b3I8VUNoYXIsIDUxMj4mIHBhdGgpCit7CisgICAgLy8gRklYTUU6
IFNob2xkIG5vdCBkbyB0aGlzIGluIHRoZSBxdWVyeSBvciBhbmNob3IgcGFydC4KKyAgICBpbnQg
cG9zOworICAgIHdoaWxlICgocG9zID0gZmluZFNsYXNoRG90RG90U2xhc2gocGF0aC5kYXRhKCks
IHBhdGguc2l6ZSgpKSkgIT0gLTEpIHsKKyAgICAgICAgaW50IHByZXYgPSByZXZlcnNlRmluZChw
YXRoLmRhdGEoKSwgcGF0aC5zaXplKCksICcvJywgcG9zIC0gMSk7CisgICAgICAgIC8vIGRvbid0
IHJlbW92ZSB0aGUgaG9zdCwgaS5lLiBodHRwOi8vZm9vLm9yZy8uLi9mb28uaHRtbAorICAgICAg
ICBpZiAocHJldiA8IDAgfHwgKHByZXYgPiAzICYmIHBhdGhbcHJldiAtIDJdID09ICc6JyAmJiBw
YXRoW3ByZXYgLSAxXSA9PSAnLycpKQorICAgICAgICAgICAgcGF0aC5yZW1vdmUocG9zLCAzKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGF0aC5yZW1vdmUocHJldiwgcG9zIC0gcHJldiAr
IDMpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBTaG9sZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVl
cnkgcGFydC4KKyAgICAvLyBTZXQgcmVmUG9zIHRvIC0yIHRvIG1lYW4gIkkgaGF2ZW4ndCBsb29r
ZWQgZm9yIHRoZSBhbmNob3IgeWV0Ii4KKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHdhc3RlIGEg
ZnVuY3Rpb24gY2FsbCBvbiB0aGUgc2VhcmNoIGZvciB0aGUgdGhlIGFuY2hvcgorICAgIC8vIGlu
IHRoZSB2YXN0IG1ham9yaXR5IG9mIGNhc2VzIHdoZXJlIHRoZXJlIGlzIG5vICIvLyIgaW4gdGhl
IHBhdGguCisgICAgcG9zID0gMDsKKyAgICBpbnQgcmVmUG9zID0gLTI7CisgICAgd2hpbGUgKChw
b3MgPSBmaW5kU2xhc2hTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHBvcykpICE9IC0x
KSB7CisgICAgICAgIGlmIChyZWZQb3MgPT0gLTIpCisgICAgICAgICAgICByZWZQb3MgPSBmaW5k
KHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJyMnKTsKKyAgICAgICAgaWYgKHJlZlBvcyA+IDAg
JiYgcG9zID49IHJlZlBvcykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChwb3Mg
PT0gMCB8fCBwYXRoW3BvcyAtIDFdICE9ICc6JykKKyAgICAgICAgICAgIHBhdGgucmVtb3ZlKHBv
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyArPSAyOworICAgIH0KKworICAgIC8v
IEZJWE1FOiBTaG9sZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBhcnQuCisg
ICAgd2hpbGUgKChwb3MgPSBmaW5kU2xhc2hEb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXpl
KCkpKSAhPSAtMSkKKyAgICAgICAgcGF0aC5yZW1vdmUocG9zLCAyKTsKK30KKworc3RhdGljIGlu
bGluZSBib29sIG1hdGNoTGV0dGVyKFVDaGFyIGMsIFVDaGFyIGxvd2VyY2FzZUxldHRlcikKK3sK
KyAgICByZXR1cm4gKGMgfCAweDIwKSA9PSBsb3dlcmNhc2VMZXR0ZXI7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBuZWVkc1RyYWlsaW5nU2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoIDwgNikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1swXSwgJ2gnKQorICAgICAgICAg
ICAgfHwgbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1sxXSwgJ3QnKQorICAgICAgICAgICAgfHwgbWF0
Y2hMZXR0ZXIoY2hhcmFjdGVyc1syXSwgJ3QnKQorICAgICAgICAgICAgfHwgbWF0Y2hMZXR0ZXIo
Y2hhcmFjdGVyc1szXSwgJ3AnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghKGNo
YXJhY3RlcnNbNF0gPT0gJzonCisgICAgICAgICAgICB8fCAobWF0Y2hMZXR0ZXIoY2hhcmFjdGVy
c1s0XSwgJ3MnKSAmJiBjaGFyYWN0ZXJzWzVdID09ICc6JykpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICB1bnNpZ25lZCBwb3MgPSBjaGFyYWN0ZXJzWzRdID09ICc6JyA/IDUgOiA2Owor
CisgICAgLy8gU2tpcCBpbml0aWFsIHR3byBzbGFzaGVzIGlmIHByZXNlbnQuCisgICAgaWYgKHBv
cyArIDEgPCBsZW5ndGggJiYgY2hhcmFjdGVyc1twb3NdID09ICcvJyAmJiBjaGFyYWN0ZXJzW3Bv
cyArIDFdID09ICcvJykKKyAgICAgICAgcG9zICs9IDI7CisKKyAgICAvLyBGaW5kIG5leHQgc2xh
c2guCisgICAgd2hpbGUgKHBvcyA8IGxlbmd0aCAmJiBjaGFyYWN0ZXJzW3Bvc10gIT0gJy8nKQor
ICAgICAgICArK3BvczsKKworICAgIHJldHVybiBwb3MgPT0gbGVuZ3RoOworfQorCitib29sIFBh
Z2VHcm91cDo6aXNMaW5rVmlzaXRlZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0
cmluZyYgYXR0cmlidXRlVVJMKQoreworICAgIGlmICghbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQp
IHsKKyAgICAgICAgbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQgPSB0cnVlOworICAgICAgICBBU1NF
UlQoIW1fcGFnZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgZGVmZXJWaXNpdGVkTGlua1VwZGF0ZXMo
KTsKKyAgICAgICAgKCptX3BhZ2VzLmJlZ2luKCkpLT5jaHJvbWUoKS0+Y2xpZW50KCktPnBvcHVs
YXRlVmlzaXRlZExpbmtzKCk7CisgICAgICAgIHJlc3VtZVZpc2l0ZWRMaW5rVXBkYXRlcygpOwor
ICAgIH0KKworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gYXR0cmlidXRlVVJMLmNoYXJh
Y3RlcnMoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVVUkwubGVuZ3RoKCk7Cisg
ICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBJ
dCBpcyBzdHJhbmdlIHRoYXQgd2UgZG8gbm90IGRvIGZ1cnRoZXIgcHJvY2Vzc2luZyBvbiBzdHJp
bmdzIHRoYXQgaGF2ZSAiOi8vIiBpbiB0aGVtLgorICAgIC8vIFRoYXQncyBjbGVhcmx5IGluY29y
cmVjdCBmb3IgYXQgbGVhc3QgdGhlc2UgcmVhc29uczoKKyAgICAvLyAgICAxKSBUaGUgIjovLyIg
Y291bGQgYmUgaW4gdGhlIHF1ZXJ5IG9yIGFuY2hvci4KKyAgICAvLyAgICAyKSBUaGUgVVJMJ3Mg
cGF0aCBjb3VsZCBoYXZlIGEgIi8uLyIgb3IgYSAiLy4uLyIgb3IgYSAiLy8iIHNlcXVlbmNlIGlu
IGl0LgorCisgICAgLy8gRklYTUU6IG5lZWRzVHJhaWxpbmdTbGFzaCBkb2VzIG5vdCBwcm9wZXJs
eSByZXR1cm4gdHJ1ZSBmb3IgYSBVUkwgdGhhdCBoYXMgbm8gcGF0aCwgYnV0IGRvZXMKKyAgICAv
LyBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yLgorCisgICAgYm9vbCBoYXNDb2xvblNsYXNoU2xhc2gg
PSBjb250YWluc0NvbG9uU2xhc2hTbGFzaChjaGFyYWN0ZXJzLCBsZW5ndGgpOworCisgICAgaWYg
KGhhc0NvbG9uU2xhc2hTbGFzaCAmJiAhbmVlZHNUcmFpbGluZ1NsYXNoKGNoYXJhY3RlcnMsIGxl
bmd0aCkpCisgICAgICAgIHJldHVybiBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmNvbnRhaW5zKFN0cmlu
Z0ltcGw6OmNvbXB1dGVIYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpOworCisgICAgVmVjdG9yPFVD
aGFyLCA1MTI+IGJ1ZmZlcjsKKworICAgIC8vIFRoaXMgaXMgYSBwb29yIG1hbidzIGNvbXBsZXRl
VVJMLiBGYXN0ZXIgd2l0aCBsZXNzIG1lbW9yeSBhbGxvY2F0aW9uLgorICAgIC8vIEZJWE1FOiBJ
dCdzIG1pc3NpbmcgYSBsb3Qgb2Ygd2hhdCBjb21wbGV0ZVVSTCBkb2VzIGFuZCB3aGF0IEtVUkwg
ZG9lcy4KKyAgICAvLyBGSVhNRTogTW92ZSB0aGlzIGludG8gS1VSTD8gT3IgRG9jdW1lbnQ/IEV2
ZW4gdGhlIGZhc3QgdmVyc2lvbiBzaG91bGQgYmUgaW4gdGhlIHJpZ2h0IHBsYWNlLAorICAgIC8v
IHJhdGhlciB0aGFuIGhlcmUuCisKKyAgICBpZiAoaGFzQ29sb25TbGFzaFNsYXNoKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluY29ycmVjdCBmb3IgVVJMcyB0aGF0IGhhdmUgYSBxdWVy
eSBvciBhbmNob3I7IHRoZSAiLyIgbmVlZHMgdG8gZ28gYXQgdGhlCisgICAgICAgIC8vIGVuZCBv
ZiB0aGUgcGF0aCwgKmJlZm9yZSogdGhlIHF1ZXJ5IG9yIGFuY2hvci4KKyAgICAgICAgYnVmZmVy
LmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICBidWZmZXIuYXBwZW5kKCcvJyk7
CisgICAgICAgIHJldHVybiBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmNvbnRhaW5zKFN0cmluZ0ltcGw6
OmNvbXB1dGVIYXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpKTsKKyAgICB9CisKKyAg
ICBjb25zdCBLVVJMJiBiYXNlVVJMID0gZG9jdW1lbnQtPmJhc2VVUkwoKTsKKyAgICBzd2l0Y2gg
KGNoYXJhY3RlcnNbMF0pIHsKKyAgICAgICAgY2FzZSAnLyc6CisgICAgICAgICAgICBidWZmZXIu
YXBwZW5kKGJhc2VVUkwuc3RyaW5nKCkuY2hhcmFjdGVycygpLCBiYXNlVVJMLnBhdGhTdGFydCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcjJzoKKyAgICAgICAgICAgIGJ1
ZmZlci5hcHBlbmQoYmFzZVVSTC5zdHJpbmcoKS5jaGFyYWN0ZXJzKCksIGJhc2VVUkwucGF0aEVu
ZCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnVmZmVyLmFwcGVuZChiYXNlVVJMLnN0cmluZygpLmNoYXJhY3RlcnMoKSwgYmFzZVVSTC5wYXRo
QWZ0ZXJMYXN0U2xhc2goKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgYnVmZmVy
LmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIGNsZWFuUGF0aChidWZmZXIpOworICAg
IGlmIChuZWVkc1RyYWlsaW5nU2xhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSkpIHsK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5jb3JyZWN0IGZvciBVUkxzIHRoYXQgaGF2ZSBh
IHF1ZXJ5IG9yIGFuY2hvcjsgdGhlICIvIiBuZWVkcyB0byBnbyBhdCB0aGUKKyAgICAgICAgLy8g
ZW5kIG9mIHRoZSBwYXRoLCAqYmVmb3JlKiB0aGUgcXVlcnkgb3IgYW5jaG9yLgorICAgICAgICBi
dWZmZXIuYXBwZW5kKCcvJyk7CisgICAgfQorCisgICAgcmV0dXJuIG1fdmlzaXRlZExpbmtIYXNo
ZXMuY29udGFpbnMoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVy
LnNpemUoKSkpOworfQorCit2b2lkIFBhZ2VHcm91cDo6YWRkVmlzaXRlZExpbmsoY29uc3QgS1VS
TCYgdXJsKQoreworICAgIEFTU0VSVCghdXJsLmlzRW1wdHkoKSk7CisgICAgbV92aXNpdGVkTGlu
a0hhc2hlcy5hZGQodXJsLnN0cmluZygpLmltcGwoKS0+aGFzaCgpKTsKK30KKwordm9pZCBQYWdl
R3JvdXA6OmFkZFZpc2l0ZWRMaW5rKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVu
Z3RoKQoreworICAgIG1fdmlzaXRlZExpbmtIYXNoZXMuYWRkKFN0cmluZ0ltcGw6OmNvbXB1dGVI
YXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpOworfQorCit2b2lkIFBhZ2VHcm91cDo6cmVtb3ZlVmlz
aXRlZExpbmtzKCkKK3sKKyAgICBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmNsZWFyKCk7Cit9CisKK3Zv
aWQgUGFnZUdyb3VwOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQoreworICAgIFBhZ2U6OnJlbW92
ZUFsbFZpc2l0ZWRMaW5rcygpOworfQorCit2b2lkIFBhZ2VHcm91cDo6ZGVmZXJWaXNpdGVkTGlu
a1VwZGF0ZXMoKQoreworICAgICsrbV92aXNpdGVkTGlua1VwZGF0ZURlZmVycmFsQ291bnQ7Cisg
ICAgQVNTRVJUKG1fdmlzaXRlZExpbmtVcGRhdGVEZWZlcnJhbENvdW50KTsKK30KKwordm9pZCBQ
YWdlR3JvdXA6OnJlc3VtZVZpc2l0ZWRMaW5rVXBkYXRlcygpCit7CisgICAgQVNTRVJUKG1fdmlz
aXRlZExpbmtVcGRhdGVEZWZlcnJhbENvdW50KTsKKyAgICAtLW1fdmlzaXRlZExpbmtVcGRhdGVE
ZWZlcnJhbENvdW50OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpl
b2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wYWdlL1BhZ2VHcm91cC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGFnZUdy
b3VwX2gKKyNkZWZpbmUgUGFnZUdyb3VwX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyAgICBjbGFzcyBBdG9taWNTdHJpbmc7CisgICAgY2xhc3MgRG9jdW1lbnQ7CisgICAgY2xhc3Mg
S1VSTDsKKyAgICBjbGFzcyBQYWdlOworCisgICAgY2xhc3MgUGFnZUdyb3VwIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFBhZ2VHcm91cCgpOworICAgICAgICBQYWdlR3JvdXAoUGFnZSopOworCisg
ICAgICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fcGFn
ZXM7IH0KKworICAgICAgICB2b2lkIGFkZFBhZ2UoUGFnZSopOworICAgICAgICB2b2lkIHJlbW92
ZVBhZ2UoUGFnZSopOworCisgICAgICAgIGJvb2wgaXNMaW5rVmlzaXRlZChEb2N1bWVudCosIGNv
bnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUpOworCisgICAgICAgIHZvaWQgYWRkVmlz
aXRlZExpbmsoY29uc3QgS1VSTCYpOworICAgICAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rKGNvbnN0
IFVDaGFyKiwgc2l6ZV90KTsKKyAgICAgICAgdm9pZCByZW1vdmVWaXNpdGVkTGlua3MoKTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7CisKKyAgICAgICAgdm9p
ZCBkZWZlclZpc2l0ZWRMaW5rVXBkYXRlcygpOworICAgICAgICB2b2lkIHJlc3VtZVZpc2l0ZWRM
aW5rVXBkYXRlcygpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgSGFzaFNldDxQYWdlKj4gbV9w
YWdlczsKKyAgICAgICAgSGFzaFNldDx1bnNpZ25lZD4gbV92aXNpdGVkTGlua0hhc2hlczsKKyAg
ICAgICAgYm9vbCBtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRlZDsKKyAgICAgICAgdW5zaWduZWQgbV92
aXNpdGVkTGlua1VwZGF0ZURlZmVycmFsQ291bnQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorICAgIAorI2VuZGlmIC8vIFBhZ2VHcm91cF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxl
CiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9HbG9iYWxIaXN0b3J5TWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvR2xvYmFsSGlzdG9yeU1hYy5tbQkocmV2
aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL0dsb2JhbEhpc3RvcnlNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIkdsb2JhbEhpc3RvcnkuaCIKLQotI2ltcG9ydCAiV2ViQ29yZUhp
c3RvcnkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIGhpc3RvcnlDb250YWlucyhj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8vIHRoZSBv
dGhlciBzaWRlIG9mIHRoZSBicmlkZ2UgaXMgY2FyZWZ1bCBub3QgdG8gdGhyb3cgZXhjZXB0aW9u
cyBoZXJlCi0gICAgcmV0dXJuIFtbV2ViQ29yZUhpc3RvcnkgaGlzdG9yeVByb3ZpZGVyXSBjb250
YWluc1VSTDpjaGFyYWN0ZXJzIGxlbmd0aDpsZW5ndGhdOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2Uvd2luL0dsb2JhbEhpc3RvcnlXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS93aW4vR2xvYmFsSGlzdG9yeVdpbi5jcHAJKHJldmlzaW9u
IDMwNzc2KQorKysgV2ViQ29yZS9wYWdlL3dpbi9HbG9iYWxIaXN0b3J5V2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJHbG9iYWxIaXN0b3J5LmgiCi0KLSNpbmNsdWRlICJXZWJDb3JlSGlz
dG9yeS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgaGlzdG9yeUNvbnRhaW5zKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgV2ViQ29yZUhp
c3RvcnlQcm92aWRlciogcHJvdmlkZXIgPSBXZWJDb3JlSGlzdG9yeTo6aGlzdG9yeVByb3ZpZGVy
KCk7Ci0gICAgcmV0dXJuIHByb3ZpZGVyICYmIHByb3ZpZGVyLT5jb250YWluc1VSTChjaGFyYWN0
ZXJzLCBsZW5ndGgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5j
cHAJKHJldmlzaW9uIDMwNzc2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCw4IEBAIGlubGluZSBib29sIEtVUkw6OnByb3RvY29sSXMo
Y29uc3QgU3RyaW4KIAogS1VSTDo6S1VSTCgpCiAgICAgOiBtX2lzVmFsaWQoZmFsc2UpCisgICAg
LCBwb3J0RW5kUG9zKDApCisgICAgLCBwYXRoRW5kUG9zKDApCiB7CiB9CiAKQEAgLTMyMCw2ICsz
MjIsOCBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgCiAgICAgaWYg
KCFiYXNlLm1faXNWYWxpZCAmJiAhYmFzZS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9zdHJpbmcg
PSByZWxhdGl2ZTsKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIHBvcnRFbmRQ
b3MgPSAwOworICAgICAgICBwYXRoRW5kUG9zID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMzkzLDYgKzM5Nyw4IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMJiBiYXNlLCBj
b25zdCAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG1fc3RyaW5nID0gcmVs
YXRpdmU7CiAgICAgICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgcG9ydEVuZFBvcyA9IDA7CisgICAgICAgICAgICAgICAgcGF0aEVuZFBvcyA9IDA7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTUwNSw3ICs1MTEs
NyBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgCiAKIGJvb2wgS1VS
TDo6aGFzUGF0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faXNWYWxpZCAmJiBwYXRoRW5kUG9z
ICE9IHBvcnRFbmRQb3M7CisgICAgcmV0dXJuIHBhdGhFbmRQb3MgIT0gcG9ydEVuZFBvczsKIH0K
IAogU3RyaW5nIEtVUkw6Omxhc3RQYXRoQ29tcG9uZW50KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vS1VSTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCShy
ZXZpc2lvbiAzMDc3NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDAsNiArMTQwLDEwIEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBjb25zdCBTdHJpbmcm
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KICAgICBvcGVyYXRvciBLSlM6OlVTdHJpbmco
KSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQogCisgICAgdW5zaWduZWQgcGF0aFN0YXJ0KCkg
Y29uc3QgeyByZXR1cm4gcG9ydEVuZFBvczsgfQorICAgIHVuc2lnbmVkIHBhdGhFbmQoKSBjb25z
dCB7IHJldHVybiBwYXRoRW5kUG9zOyB9CisgICAgdW5zaWduZWQgcGF0aEFmdGVyTGFzdFNsYXNo
KCkgY29uc3QgeyByZXR1cm4gcGF0aEVuZFBvczsgfQorCiAjaWYgUExBVEZPUk0oQ0YpCiAgICAg
S1VSTChDRlVSTFJlZik7CiAgICAgQ0ZVUkxSZWYgY3JlYXRlQ0ZVUkwoKSBjb25zdDsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24g
MzA3NzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJHbG9iYWxIaXN0b3J5LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKQEAgLTU4LDggKzU3
LDYgQEAgVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdAogLyogQ29tcGxl
dGVseSBlbXB0eSBzdHVicyAobW9zdGx5IHRvIGFsbG93IERSVCB0byBydW4pOiAqLwogLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1i
b29sIFdlYkNvcmU6Omhpc3RvcnlDb250YWlucyhjb25zdCBVQ2hhciosIHVuc2lnbmVkKSB7IHJl
dHVybiBmYWxzZTsgfQotCiBQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBh
dGhzKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gUGx1Z2luU2V0KCk7IH0KIFZl
Y3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CiBib29sIFBsdWdpbkRhdGFi
YXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3QgU3RyaW5nJikgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVI
aXN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUhpc3Rv
cnkuaAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlSGlz
dG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1A
cHJvdG9jb2wgV2ViQ29yZUhpc3RvcnlQcm92aWRlciA8TlNPYmplY3Q+Ci0tIChCT09MKWNvbnRh
aW5zVVJMOihjb25zdCBVbmlDaGFyKil1bmljb2RlIGxlbmd0aDoodW5zaWduZWQpbGVuZ3RoOwot
QGVuZAotCi1AaW50ZXJmYWNlIFdlYkNvcmVIaXN0b3J5IDogTlNPYmplY3QKLQotKyAodm9pZClz
ZXRIaXN0b3J5UHJvdmlkZXI6KGlkPFdlYkNvcmVIaXN0b3J5UHJvdmlkZXI+KWg7Ci0rIChpZDxX
ZWJDb3JlSGlzdG9yeVByb3ZpZGVyPiloaXN0b3J5UHJvdmlkZXI7Ci0KLUBlbmQKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVIaXN0b3J5Lm0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUhpc3RvcnkubQkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlSGlzdG9yeS5tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaW1w
b3J0ICJXZWJDb3JlSGlzdG9yeS5oIgotCi1AaW1wbGVtZW50YXRpb24gV2ViQ29yZUhpc3RvcnkK
LQotc3RhdGljIGlkPFdlYkNvcmVIaXN0b3J5UHJvdmlkZXI+IF9oaXN0b3J5UHJvdmlkZXIgPSBu
aWw7Ci0KLSsgKHZvaWQpc2V0SGlzdG9yeVByb3ZpZGVyOiAoaWQ8V2ViQ29yZUhpc3RvcnlQcm92
aWRlcj4paAotewotICAgIGlmIChfaGlzdG9yeVByb3ZpZGVyICE9IGgpewotICAgICAgICBbX2hp
c3RvcnlQcm92aWRlciByZWxlYXNlXTsKLSAgICAgICAgX2hpc3RvcnlQcm92aWRlciA9IFtoIHJl
dGFpbl07Ci0gICAgfQotfQotCi0rIChpZDxXZWJDb3JlSGlzdG9yeVByb3ZpZGVyPiloaXN0b3J5
UHJvdmlkZXIKLXsKLSAgICByZXR1cm4gX2hpc3RvcnlQcm92aWRlcjsKLX0KLQotQGVuZApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24g
MzA3NzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiR2xvYmFsSGlzdG9yeS5oIgogI2luY2x1ZGUgIkljb25Mb2FkZXIuaCIKICNpbmNsdWRl
ICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIktVUkwuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
d2luL1dlYkNvcmVIaXN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9XZWJDb3JlSGlzdG9yeS5jcHAJKHJldmlzaW9uIDMwNzc2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS93aW4vV2ViQ29yZUhpc3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkNvcmVI
aXN0b3J5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFdlYkNvcmVIaXN0b3J5
UHJvdmlkZXIqIF9oaXN0b3J5UHJvdmlkZXIgPSAwOwotCi12b2lkIFdlYkNvcmVIaXN0b3J5Ojpz
ZXRIaXN0b3J5UHJvdmlkZXIoV2ViQ29yZUhpc3RvcnlQcm92aWRlciogaCkKLXsKLSAgICBpZiAo
X2hpc3RvcnlQcm92aWRlciA9PSBoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkZWxldGUgX2hp
c3RvcnlQcm92aWRlcjsKLSAgICBfaGlzdG9yeVByb3ZpZGVyID0gaDsKLX0KLQotV2ViQ29yZUhp
c3RvcnlQcm92aWRlciogV2ViQ29yZUhpc3Rvcnk6Omhpc3RvcnlQcm92aWRlcigpCi17Ci0gICAg
cmV0dXJuIF9oaXN0b3J5UHJvdmlkZXI7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
d2luL1dlYkNvcmVIaXN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4v
V2ViQ29yZUhpc3RvcnkuaAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9XZWJDb3JlSGlzdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0q
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotKi8KLQotI2lmbmRlZiBXRUJD
T1JFX0hJU1RPUllfSF8KLSNkZWZpbmUgV0VCQ09SRV9ISVNUT1JZX0hfCi0KLSNpbmNsdWRlIDx1
bmljb2RlL3VtYWNoaW5lLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2ViQ29y
ZUhpc3RvcnlQcm92aWRlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGNvbnRhaW5zVVJM
KGNvbnN0IFVDaGFyKiB1bmljb2RlLCB1bnNpZ25lZCBsZW5ndGgpID0gMDsKLX07Ci0KLWNsYXNz
IFdlYkNvcmVIaXN0b3J5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBzZXRIaXN0b3J5UHJv
dmlkZXIoV2ViQ29yZUhpc3RvcnlQcm92aWRlciopOwotICAgIHN0YXRpYyBXZWJDb3JlSGlzdG9y
eVByb3ZpZGVyKiBoaXN0b3J5UHJvdmlkZXIoKTsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAzMDc3
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEzLDEwICsxMTMsNiBAQCBib29sIFdlYkNvcmU6OmNvb2tpZXNFbmFibGVk
KGNvbnN0IERvY3VtCiBzdGF0aWMgV2ViQ29yZTo6Q3Vyc29yIGxvY2FsQ3Vyc29yOwogY29uc3Qg
V2ViQ29yZTo6Q3Vyc29yJiBXZWJDb3JlOjptb3ZlQ3Vyc29yKCkgeyByZXR1cm4gbG9jYWxDdXJz
b3I7IH0KIAotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGJvb2wgaGlzdG9yeUNvbnRhaW5zKGNv
bnN0IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9Ci19Ci0KIHZvaWQgV2ViQ29y
ZTo6ZmluZFdvcmRCb3VuZGFyeShVQ2hhciBjb25zdCogc3RyLGludCBsZW4saW50IHBvc2l0aW9u
LGludCogc3RhcnQsIGludCogZW5kKSB7IG5vdEltcGxlbWVudGVkKCk7ICpzdGFydD1wb3NpdGlv
bjsgKmVuZD1wb3NpdGlvbjsgfQogCiBQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdp
bnNJblBhdGhzKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gUGx1Z2luU2V0KCk7
IH0KSW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxv
ZwkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNyBAQAorMjAwOC0wMy0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgV2Vi
SGlzdG9yeUludGVybmFsLmguCisKIDIwMDgtMDEtMjYgIEdyZWcgQm9sc2luZ2EgIDxib2xzaW5n
YUBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3MDgzODg+IFdlYkRhc2hi
b2FyZFJlZ2lvbi5oIGR1cGxpY2F0ZWQgYmV0d2VlbiBXZWJDb3JlIC8gV2ViS2l0CkluZGV4OiBX
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzMDc3NikKKysr
IFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMjc3LDYgKzI3Nyw3IEBACiAJCTkzOTgxMTJGMDgyNEJGMDEwMDhERjAzOCAvKiBTZWN1cml0
eS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4MzBFODFFMDA1ODUzQUMwMDBBRDA4OTEgLyogU2VjdXJpdHkuZnJhbWV3b3JrICovOyB9
OwogCQk5M0VCMTc4RDA5Rjg4RDQ2MDA5MUY4RkYgLyogV2ViU3lzdGVtSW50ZXJmYWNlLm0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VCMTc4QzA5Rjg4
RDQ2MDA5MUY4RkYgLyogV2ViU3lzdGVtSW50ZXJmYWNlLm0gKi87IH07CiAJCTkzRUIxNzhGMDlG
ODhENTEwMDkxRjhGRiAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUIxNzhFMDlGODhENTEwMDkxRjhGRiAvKiBX
ZWJTeXN0ZW1JbnRlcmZhY2UuaCAqLzsgfTsKKwkJOTNGREU5MzMwRDc5Q0FGMzAwNzRGMDI5IC8q
IFdlYkhpc3RvcnlJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNGREU5MzIwRDc5Q0FGMzAwNzRGMDI5IC8qIFdlYkhpc3RvcnlJbnRlcm5h
bC5oICovOyB9OwogCQlBNzA5MzZBRjBCNTYwOERDMDBDREI0OEUgLyogV2ViRHJhZ0NsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcwOTM2QUQw
QjU2MDhEQzAwQ0RCNDhFIC8qIFdlYkRyYWdDbGllbnQuaCAqLzsgfTsKIAkJQTcwOTM2QjAwQjU2
MDhEQzAwQ0RCNDhFIC8qIFdlYkRyYWdDbGllbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzA5MzZBRTBCNTYwOERDMDBDREI0OEUgLyogV2ViRHJh
Z0NsaWVudC5tbSAqLzsgfTsKIAkJQTdEM0M1QkMwQjU3NzNDNTAwMkNBNDUwIC8qIFdlYlBhc3Rl
Ym9hcmRIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3RDNDNUJBMEI1NzczQzUwMDJDQTQ1MCAvKiBXZWJQYXN0ZWJvYXJkSGVscGVyLmggKi87
IH07CkBAIC01MTAsNiArNTExLDcgQEAKIAkJOTNENjIzREQwNTFFNzkxRjAwMkY0N0REIC8qIGxp
YmljdWNvcmUuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYmljdWNvcmUuZHlsaWI7
IHBhdGggPSAvdXNyL2xpYi9saWJpY3Vjb3JlLmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0
ZT4iOyB9OwogCQk5M0VCMTc4QzA5Rjg4RDQ2MDA5MUY4RkYgLyogV2ViU3lzdGVtSW50ZXJmYWNl
Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYlN5c3RlbUludGVyZmFj
ZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0VCMTc4RTA5Rjg4RDUxMDA5MUY4
RkYgLyogV2ViU3lzdGVtSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlN5c3RlbUludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
M0ZERTkzMjBENzlDQUYzMDA3NEYwMjkgLyogV2ViSGlzdG9yeUludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkhpc3RvcnlJbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5Q0FFOUQwNzAyNTJBNDEzMEVDQTE2RUEgLyogV2ViUHJlZmVy
ZW5jZXNQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViUHJlZmVyZW5jZXNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk5Q0UxRjhBMzAyQTVDNkYzMEVDQTJB
Q0QgLyogV2ViSW1hZ2VSZW5kZXJlckZhY3RvcnkubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJ
OUNGMEUyNDkwMjEzNjFCMDBFQ0ExNkVBIC8qIFdlYkZyYW1lUHJpdmF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZyYW1lUHJpdmF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
QEAgLTgyMCw2ICs4MjIsNyBAQAogCQkJCTIyRjIxOUNCMDhEMjM2NzMwMDMwRTA3OCAvKiBXZWJC
YWNrRm9yd2FyZExpc3RQcml2YXRlLmggKi8sCiAJCQkJNjVEQTI2MDgwNTJDQzE4NzAwQTk3QjMx
IC8qIFdlYkhpc3RvcnkubW0gKi8sCiAJCQkJRjUyMEZCMTkwMjIxREVGRDAxQzFBNTI1IC8qIFdl
Ykhpc3RvcnkuaCAqLywKKwkJCQk5M0ZERTkzMjBENzlDQUYzMDA3NEYwMjkgLyogV2ViSGlzdG9y
eUludGVybmFsLmggKi8sCiAJCQkJMzk0NDYwN0YwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkhpc3Rv
cnlJdGVtLmggKi8sCiAJCQkJMzk0NDYwODAwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkhpc3RvcnlJ
dGVtLm1tICovLAogCQkJCTUxNkYyOTZGMDNBNkM0NUEwMENBMkQzQSAvKiBXZWJIaXN0b3J5SXRl
bUludGVybmFsLmggKi8sCkBAIC0xMzE3LDYgKzEzMjAsNyBAQAogCQkJCTkzOTgxMDlCMDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgx
MDcxMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTM5ODEwOTcwODI0QkYwMTAwOERGMDM4IC8qIG5wZnVuY3Rpb25zLmggaW4gSGVhZGVycyAq
LywKKwkJCQk5M0ZERTkzMzBENzlDQUYzMDA3NEYwMjkgLyogV2ViSGlzdG9yeUludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYktpdC9tYWMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMDgtMDMtMDQgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIC0gZml4IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NTI2CisgICAgICAgICAgUkVHUkVTU0lPTjogaWZyYW1lcyBhcmUgYWRkZWQgdG8g
U2FmYXJpJ3MgSGlzdG9yeSBtZW51CisgICAgICAgICAgYnkgc2VwYXJhdGluZyB0aGUgdmlzaXRl
ZCBsaW5rIG1hY2hpbmVyeSBmcm9tIGdsb2JhbCBoaXN0b3J5CisKKyAgICAgICAgKiBIaXN0b3J5
L1dlYkhpc3RvcnkubW06IE1vdmVkIFdlYkhpc3RvcnlQcml2YXRlIGluc2lkZSB0aGlzIGZpbGUu
CisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIHJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczpd
KTogUmVtb3ZlZCB0aGUgdW5kZXJzY29yZSBmcm9tIHRoaXMKKyAgICAgICAgbWV0aG9kIG5hbWUs
IHNpbmNlIGl0J3Mgb24gYSBwcml2YXRlIG9iamVjdC4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVBy
aXZhdGUgcmVtb3ZlSXRlbUZvclVSTFN0cmluZzpdKTogQWRkZWQgYSBjYWxsIHRvIHRoZQorICAg
ICAgICBQYWdlR3JvdXA6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcyBmdW5jdGlvbiBpZiB0aGUgbGFz
dCBVUkwgd2FzIHJlbW92ZWQuCisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIGFkZEl0ZW1U
b0RhdGVDYWNoZXM6XSk6IFJlbW92ZWQgdGhlIHVuZGVyc2NvcmUgZnJvbSB0aGlzCisgICAgICAg
IG1ldGhvZCBuYW1lLCBzaW5jZSBpdCdzIG9uIGEgcHJpdmF0ZSBvYmplY3QuCisgICAgICAgICgt
W1dlYkhpc3RvcnlQcml2YXRlIHJlbW92ZUFsbEl0ZW1zXSk6IENhbGwgUGFnZUdyb3VwOjpyZW1v
dmVBbGxWaXNpdGVkTGlua3MuCisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIGFnZUxpbWl0
RGF0ZV0pOiBSZW1vdmVkIHRoZSB1bmRlcnNjb3JlIGZyb20gdGhpcworICAgICAgICBtZXRob2Qg
bmFtZSwgc2luY2UgaXQncyBvbiBhIHByaXZhdGUgb2JqZWN0LgorICAgICAgICAoLVtXZWJIaXN0
b3J5UHJpdmF0ZSBsb2FkSGlzdG9yeUd1dHNGcm9tVVJMOnNhdmVkSXRlbXNDb3VudDpjb2xsZWN0
RGlzY2FyZGVkSXRlbXNJbnRvOmVycm9yOl0pOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKC1b
V2ViSGlzdG9yeVByaXZhdGUgc2F2ZUhpc3RvcnlHdXRzOlVSTDplcnJvcjpdKTogRGl0dG8uIEFs
c28gY2hhbmdlZCB0aGlzCisgICAgICAgIHRvIGNvcnJlY3RseSByZXR1cm4gdGhlIGVycm9yIGJ5
IHVzaW5nIHRoZSBuZXdlciB2ZXJzaW9uIG9mIHdyaXRlVG9VUkw6IGFuZAorICAgICAgICByZW1v
dmVkIHRoZSBGSVhNRSBhYm91dCB0aGF0LgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSBh
ZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cDpdKTogQWRkZWQuIENhbGxzIGFkZFZpc2l0ZWRMaW5r
CisgICAgICAgIGZvciBldmVyeSBsaW5rIGluIHRoZSBoaXN0b3J5LgorICAgICAgICAoLVtXZWJI
aXN0b3J5IHNhdmVUb1VSTDplcnJvcjpdKTogUmVtb3ZlZCB0aGUgRklYTUUsIHNpbmNlIHdlIGRv
IGdldCB0aGUgZXJyb3Igbm93LgorICAgICAgICAoLVtXZWJIaXN0b3J5IGFkZEl0ZW06XSk6IE1v
dmVkIGludG8gdGhlIFdlYlByaXZhdGUgY2F0ZWdvcnkuCisgICAgICAgICgtW1dlYkhpc3Rvcnkg
YWRkSXRlbUZvclVSTDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhpc3RvcnkgX2FkZEl0ZW1G
b3JVUkw6dGl0bGU6XSk6IEFkZGVkLiBVc2VkIGZvciB0aGUgbm9ybWFsIGNhc2Ugd2hlcmUgd2UK
KyAgICAgICAgY3JlYXRlIGFuIGl0ZW0gYW5kIGFscmVhZHkga25vdyBpdHMgdGl0bGUuCisgICAg
ICAgICgtW1dlYkhpc3RvcnkgYWdlTGltaXREYXRlXSk6IE1vdmVkIGludG8gdGhlIFdlYlByaXZh
dGUgY2F0ZWdvcnkuCisgICAgICAgICgtW1dlYkhpc3RvcnkgY29udGFpbnNJdGVtRm9yVVJMU3Ry
aW5nOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeSByZW1vdmVJdGVtOl0pOiBEaXR0
by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeSBzZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDpmb3JJ
dGVtOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeSBfaXRlbUZvclVSTFN0cmluZzpd
KTogRGl0dG8uCisgICAgICAgICgtW1dlYkhpc3RvcnkgX2FkZFZpc2l0ZWRMaW5rc1RvUGFnZUdy
b3VwOldlYkNvcmU6Ol0pOiBBZGRlZC4gRm9yIHVzZSBvbmx5IGluc2lkZSBXZWJLaXQuCisKKyAg
ICAgICAgKiBIaXN0b3J5L1dlYkhpc3RvcnlJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKiBI
aXN0b3J5L1dlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaDogVHdlYWtlZCBmb3JtYXR0aW5nIGFuZCBp
bmNsdWRlcy4KKyAgICAgICAgKiBIaXN0b3J5L1dlYkhpc3RvcnlQcml2YXRlLmg6IE1vdmVkIHRo
ZSBXZWJIaXN0b3J5UHJpdmF0ZSBjbGFzcyBvdXQgb2YgdGhpcyBoZWFkZXIuCisgICAgICAgIEFs
c28gcmVvcmdhbml6ZWQgd2hhdCB3YXMgbGVmdCBiZWhpbmQuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDogQWRkZWQgcG9wdWxhdGVWaXNpdGVkTGlua3MuCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2Vi
Q2hyb21lQ2xpZW50Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcyk6IEFkZGVkIGEgY2FsbCB0byB0aGUg
bmV3CisgICAgICAgIC1bV2ViSGlzdG9yeSBfYWRkVmlzaXRlZExpbmtzVG9QYWdlR3JvdXA6XSBt
ZXRob2QuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5t
bToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5KTog
Q2hhbmdlZCBjb2RlIHRvIHVzZSB0aGUgbmV3CisgICAgICAgIC1bV2ViSGlzdG9yeSBfYWRkSXRl
bUZvclVSTDp0aXRsZTpdIG1ldGhvZC4KKwogMjAwOC0wMy0wNCAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDog
V2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9IaXN0b3J5L1dlYkhpc3RvcnkubW0JKHJldmlzaW9uIDMwNzc2KQorKysgV2ViS2l0L21hYy9I
aXN0b3J5L1dlYkhpc3RvcnkubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTggKzI2
LDI1IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgIldlYkhpc3RvcnkuaCIKLSNpbXBv
cnQgIldlYkhpc3RvcnlQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJIaXN0b3J5SW50ZXJuYWwuaCIK
KyNpbXBvcnQgIldlYkhpc3RvcnlJbnRlcm5hbC5oIgogCi0jaW1wb3J0ICJXZWJIaXN0b3J5SXRl
bS5oIgogI2ltcG9ydCAiV2ViSGlzdG9yeUl0ZW1JbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSGlz
dG9yeUl0ZW1Qcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCiAjaW1wb3J0ICJX
ZWJOU1VSTEV4dHJhcy5oIgorI2ltcG9ydCA8V2ViQ29yZS9LVVJMLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAjaW1wb3J0IDxGb3Vu
ZGF0aW9uL05TRXJyb3IuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fzc2VydGlvbnMuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUhpc3RvcnkuaD4KLSNpbXBvcnQgPHd0Zi9WZWN0b3Iu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0hhc2hNYXAuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL1JldGFpblB0ci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvVmVjdG9yLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit0eXBlZGVmIGludDY0X3QgV2ViSGlzdG9yeURh
dGVLZXk7Cit0eXBlZGVmIEhhc2hNYXA8V2ViSGlzdG9yeURhdGVLZXksIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gPiBEYXRlVG9FbnRyaWVzTWFwOwogCiBOU1N0cmluZyAqV2ViSGlzdG9yeUl0
ZW1zQWRkZWROb3RpZmljYXRpb24gPSBAIldlYkhpc3RvcnlJdGVtc0FkZGVkTm90aWZpY2F0aW9u
IjsKIE5TU3RyaW5nICpXZWJIaXN0b3J5SXRlbXNSZW1vdmVkTm90aWZpY2F0aW9uID0gQCJXZWJI
aXN0b3J5SXRlbXNSZW1vdmVkTm90aWZpY2F0aW9uIjsKQEAgLTU0LDYgKzYxLDQ1IEBAIE5TU3Ry
aW5nICpEYXRlc0FycmF5S2V5ID0gQCJXZWJIaXN0b3J5RGEKIAogI2RlZmluZSBjdXJyZW50Rmls
ZVZlcnNpb24gMQogCitAaW50ZXJmYWNlIFdlYkhpc3RvcnlQcml2YXRlIDogTlNPYmplY3Qgewor
QHByaXZhdGUKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZW50cmllc0J5VVJMOworICAgIERh
dGVUb0VudHJpZXNNYXAqIF9lbnRyaWVzQnlEYXRlOworICAgIE5TTXV0YWJsZUFycmF5ICpfb3Jk
ZXJlZExhc3RWaXNpdGVkRGF5czsKKyAgICBCT09MIGl0ZW1MaW1pdFNldDsKKyAgICBpbnQgaXRl
bUxpbWl0OworICAgIEJPT0wgYWdlSW5EYXlzTGltaXRTZXQ7CisgICAgaW50IGFnZUluRGF5c0xp
bWl0OworfQorCistICh2b2lkKWFkZEl0ZW06KFdlYkhpc3RvcnlJdGVtICopZW50cnk7CistICh2
b2lkKWFkZEl0ZW1zOihOU0FycmF5ICopbmV3RW50cmllczsKKy0gKEJPT0wpcmVtb3ZlSXRlbToo
V2ViSGlzdG9yeUl0ZW0gKillbnRyeTsKKy0gKEJPT0wpcmVtb3ZlSXRlbXM6KE5TQXJyYXkgKill
bnRyaWVzOworLSAoQk9PTClyZW1vdmVBbGxJdGVtczsKKy0gKHZvaWQpc2V0TGFzdFZpc2l0ZWRU
aW1lSW50ZXJ2YWw6KE5TVGltZUludGVydmFsKXRpbWUgZm9ySXRlbTooV2ViSGlzdG9yeUl0ZW0g
KilpdGVtOworCistIChOU0FycmF5ICopb3JkZXJlZExhc3RWaXNpdGVkRGF5czsKKy0gKE5TQXJy
YXkgKilvcmRlcmVkSXRlbXNMYXN0VmlzaXRlZE9uRGF5OihOU0NhbGVuZGFyRGF0ZSAqKWNhbGVu
ZGFyRGF0ZTsKKy0gKEJPT0wpY29udGFpbnNJdGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVS
TFN0cmluZzsKKy0gKEJPT0wpY29udGFpbnNVUkw6KE5TVVJMICopVVJMOworLSAoV2ViSGlzdG9y
eUl0ZW0gKilpdGVtRm9yVVJMOihOU1VSTCAqKVVSTDsKKy0gKFdlYkhpc3RvcnlJdGVtICopaXRl
bUZvclVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmc7CisKKy0gKEJPT0wpbG9hZEZyb21V
Ukw6KE5TVVJMICopVVJMIGNvbGxlY3REaXNjYXJkZWRJdGVtc0ludG86KE5TTXV0YWJsZUFycmF5
ICopZGlzY2FyZGVkSXRlbXMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CistIChCT09MKXNhdmVU
b1VSTDooTlNVUkwgKilVUkwgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKKy0gKE5TQ2FsZW5k
YXJEYXRlKilhZ2VMaW1pdERhdGU7CisKKy0gKHZvaWQpc2V0SGlzdG9yeUl0ZW1MaW1pdDooaW50
KWxpbWl0OworLSAoaW50KWhpc3RvcnlJdGVtTGltaXQ7CistICh2b2lkKXNldEhpc3RvcnlBZ2VJ
bkRheXNMaW1pdDooaW50KWxpbWl0OworLSAoaW50KWhpc3RvcnlBZ2VJbkRheXNMaW1pdDsKKwor
LSAodm9pZClhZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cDooUGFnZUdyb3VwJilncm91cDsKKwor
QGVuZAorCiBAaW1wbGVtZW50YXRpb24gV2ViSGlzdG9yeVByaXZhdGUKIAogI3ByYWdtYSBtYXJr
IE9CSkVDVCBGUkFNRVdPUksKQEAgLTY5LDkgKzExNSw4IEBAIE5TU3RyaW5nICpEYXRlc0FycmF5
S2V5ID0gQCJXZWJIaXN0b3J5RGEKIAogLSAoaWQpaW5pdAogewotICAgIGlmICghW3N1cGVyIGlu
aXRdKSB7CisgICAgaWYgKCFbc3VwZXIgaW5pdF0pCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
fQogICAgIAogICAgIF9lbnRyaWVzQnlVUkwgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2Nd
IGluaXRdOwogICAgIF9lbnRyaWVzQnlEYXRlID0gbmV3IERhdGVUb0VudHJpZXNNYXA7CkBAIC04
NCw3ICsxMjksNiBAQCBOU1N0cmluZyAqRGF0ZXNBcnJheUtleSA9IEAiV2ViSGlzdG9yeURhCiAg
ICAgW19lbnRyaWVzQnlVUkwgcmVsZWFzZV07CiAgICAgW19vcmRlcmVkTGFzdFZpc2l0ZWREYXlz
IHJlbGVhc2VdOwogICAgIGRlbGV0ZSBfZW50cmllc0J5RGF0ZTsKLSAgICAKICAgICBbc3VwZXIg
ZGVhbGxvY107CiB9CiAKQEAgLTE1Niw3ICsyMDAsNyBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1l
SW50ZXJ2YWxGb3JCZWdpbm5pCiAgICAgW2VudHJpZXNGb3JEYXRlIGluc2VydE9iamVjdDplbnRy
eSBhdEluZGV4Omxvd107CiB9CiAKLS0gKEJPT0wpX3JlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczoo
V2ViSGlzdG9yeUl0ZW0gKillbnRyeQorLSAoQk9PTClyZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6
KFdlYkhpc3RvcnlJdGVtICopZW50cnkKIHsKICAgICBXZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5
OwogICAgIEJPT0wgZm91bmREYXRlID0gW3NlbGYgZmluZEtleTomZGF0ZUtleSBmb3JEYXk6W2Vu
dHJ5IGxhc3RWaXNpdGVkVGltZUludGVydmFsXV07CkBAIC0xNzksMjYgKzIyMywyOCBAQCBXZWJI
aXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2YWxGb3JCZWdpbm5pCiAgICAgcmV0dXJuIFlFUzsKIH0K
IAotLSAoQk9PTClyZW1vdmVJdGVtRm9yVVJMU3RyaW5nOiAoTlNTdHJpbmcgKilVUkxTdHJpbmcK
Ky0gKEJPT0wpcmVtb3ZlSXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmcKIHsK
LSAgICBXZWJIaXN0b3J5SXRlbSAqZW50cnkgPSBbX2VudHJpZXNCeVVSTCBvYmplY3RGb3JLZXk6
IFVSTFN0cmluZ107Ci0gICAgaWYgKGVudHJ5ID09IG5pbCkgeworICAgIFdlYkhpc3RvcnlJdGVt
ICplbnRyeSA9IFtfZW50cmllc0J5VVJMIG9iamVjdEZvcktleTpVUkxTdHJpbmddOworICAgIGlm
ICghZW50cnkpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICB9CiAKLSAgICBbX2VudHJpZXNCeVVS
TCByZW1vdmVPYmplY3RGb3JLZXk6IFVSTFN0cmluZ107CisgICAgW19lbnRyaWVzQnlVUkwgcmVt
b3ZlT2JqZWN0Rm9yS2V5OlVSTFN0cmluZ107CiAgICAgCiAjaWYgQVNTRVJUX0RJU0FCTEVECi0g
ICAgW3NlbGYgX3JlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczplbnRyeV07CisgICAgW3NlbGYgcmVt
b3ZlSXRlbUZyb21EYXRlQ2FjaGVzOmVudHJ5XTsKICNlbHNlCi0gICAgQk9PTCBpdGVtV2FzSW5E
YXRlQ2FjaGVzID0gW3NlbGYgX3JlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczplbnRyeV07CisgICAg
Qk9PTCBpdGVtV2FzSW5EYXRlQ2FjaGVzID0gW3NlbGYgcmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVz
OmVudHJ5XTsKICAgICBBU1NFUlQoaXRlbVdhc0luRGF0ZUNhY2hlcyk7CiAjZW5kaWYKIAorICAg
IGlmICghW19lbnRyaWVzQnlVUkwgY291bnRdKQorICAgICAgICBQYWdlR3JvdXA6OnJlbW92ZUFs
bFZpc2l0ZWRMaW5rcygpOworCiAgICAgcmV0dXJuIFlFUzsKIH0KIAotLSAodm9pZClfYWRkSXRl
bVRvRGF0ZUNhY2hlczooV2ViSGlzdG9yeUl0ZW0gKillbnRyeQorLSAodm9pZClhZGRJdGVtVG9E
YXRlQ2FjaGVzOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5CiB7CiAgICAgV2ViSGlzdG9yeURhdGVL
ZXkgZGF0ZUtleTsKICAgICBpZiAoW3NlbGYgZmluZEtleTomZGF0ZUtleSBmb3JEYXk6W2VudHJ5
IGxhc3RWaXNpdGVkVGltZUludGVydmFsXV0pCkBAIC0yMzUsNyArMjgxLDcgQEAgV2ViSGlzdG9y
eURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQogICAgICAgICBbb2xkRW50cnkgcmVsZWFz
ZV07CiAgICAgfQogCi0gICAgW3NlbGYgX2FkZEl0ZW1Ub0RhdGVDYWNoZXM6ZW50cnldOworICAg
IFtzZWxmIGFkZEl0ZW1Ub0RhdGVDYWNoZXM6ZW50cnldOwogICAgIFtfZW50cmllc0J5VVJMIHNl
dE9iamVjdDplbnRyeSBmb3JLZXk6VVJMU3RyaW5nXTsKIH0KIApAQCAtMjQ0LDEyICsyOTAsMTIg
QEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQogI2lmIEFTU0VSVF9E
SVNBQkxFRAogICAgIFtzZWxmIF9yZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6ZW50cnldOwogI2Vs
c2UKLSAgICBCT09MIGVudHJ5V2FzUHJlc2VudCA9IFtzZWxmIF9yZW1vdmVJdGVtRnJvbURhdGVD
YWNoZXM6ZW50cnldOworICAgIEJPT0wgZW50cnlXYXNQcmVzZW50ID0gW3NlbGYgcmVtb3ZlSXRl
bUZyb21EYXRlQ2FjaGVzOmVudHJ5XTsKICAgICBBU1NFUlQoZW50cnlXYXNQcmVzZW50KTsKICNl
bmRpZgogICAgIAogICAgIFtlbnRyeSBfc2V0TGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6dGltZV07
Ci0gICAgW3NlbGYgX2FkZEl0ZW1Ub0RhdGVDYWNoZXM6ZW50cnldOworICAgIFtzZWxmIGFkZEl0
ZW1Ub0RhdGVDYWNoZXM6ZW50cnldOwogCiAgICAgLy8gRG9uJ3Qgc2VuZCBub3RpZmljYXRpb24g
dW50aWwgZW50cnkgaXMgYmFjayBpbiB0aGUgcmlnaHQgcGxhY2UgaW4gdGhlIGRhdGUgY2FjaGVz
LAogICAgIC8vIHNpbmNlIG9ic2VydmVycyBtaWdodCBmZXRjaCBoaXN0b3J5IGJ5IGRhdGUgd2hl
biB0aGV5IHJlY2VpdmUgdGhlIG5vdGlmaWNhdGlvbi4KQEAgLTI1Nyw0NyArMzAzLDM4IEBAIFdl
Ykhpc3RvcnlEYXRlS2V5IHRpbWVJbnRlcnZhbEZvckJlZ2lubmkKICAgICAgICAgcG9zdE5vdGlm
aWNhdGlvbk5hbWU6V2ViSGlzdG9yeUl0ZW1DaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDplbnRy
eSB1c2VySW5mbzpuaWxdOwogfQogCi0tIChCT09MKXJlbW92ZUl0ZW06IChXZWJIaXN0b3J5SXRl
bSAqKWVudHJ5CistIChCT09MKXJlbW92ZUl0ZW06KFdlYkhpc3RvcnlJdGVtICopZW50cnkKIHsK
LSAgICBXZWJIaXN0b3J5SXRlbSAqbWF0Y2hpbmdFbnRyeTsKLSAgICBOU1N0cmluZyAqVVJMU3Ry
aW5nOwotCi0gICAgVVJMU3RyaW5nID0gW2VudHJ5IFVSTFN0cmluZ107CisgICAgTlNTdHJpbmcg
KlVSTFN0cmluZyA9IFtlbnRyeSBVUkxTdHJpbmddOwogCiAgICAgLy8gSWYgdGhpcyBleGFjdCBv
YmplY3QgaXNuJ3Qgc3RvcmVkLCB0aGVuIG1ha2Ugbm8gY2hhbmdlLgogICAgIC8vIEZJWE1FOiBJ
cyB0aGlzIHRoZSByaWdodCBiZWhhdmlvciBpZiB0aGlzIGVudHJ5IGlzbid0IHByZXNlbnQsIGJ1
dCBhbm90aGVyIGVudHJ5IGZvciB0aGUgc2FtZSBVUkwgaXM/CiAgICAgLy8gTWF5YmUgbmVlZCB0
byBjaGFuZ2UgdGhlIEFQSSB0byBtYWtlIHNvbWV0aGluZyBsaWtlIHJlbW92ZUVudHJ5Rm9yVVJM
U3RyaW5nIHB1YmxpYyBpbnN0ZWFkLgotICAgIG1hdGNoaW5nRW50cnkgPSBbX2VudHJpZXNCeVVS
TCBvYmplY3RGb3JLZXk6IFVSTFN0cmluZ107Ci0gICAgaWYgKG1hdGNoaW5nRW50cnkgIT0gZW50
cnkpIHsKKyAgICBXZWJIaXN0b3J5SXRlbSAqbWF0Y2hpbmdFbnRyeSA9IFtfZW50cmllc0J5VVJM
IG9iamVjdEZvcktleTpVUkxTdHJpbmddOworICAgIGlmIChtYXRjaGluZ0VudHJ5ICE9IGVudHJ5
KQogICAgICAgICByZXR1cm4gTk87Ci0gICAgfQogCi0gICAgW3NlbGYgcmVtb3ZlSXRlbUZvclVS
TFN0cmluZzogVVJMU3RyaW5nXTsKKyAgICBbc2VsZiByZW1vdmVJdGVtRm9yVVJMU3RyaW5nOlVS
TFN0cmluZ107CiAKICAgICByZXR1cm4gWUVTOwogfQogCi0tIChCT09MKXJlbW92ZUl0ZW1zOiAo
TlNBcnJheSAqKWVudHJpZXMKKy0gKEJPT0wpcmVtb3ZlSXRlbXM6KE5TQXJyYXkgKillbnRyaWVz
CiB7Ci0gICAgaW50IGluZGV4LCBjb3VudDsKLQotICAgIGNvdW50ID0gW2VudHJpZXMgY291bnRd
OwotICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgTlNVSW50ZWdlciBjb3VudCA9IFtlbnRyaWVz
IGNvdW50XTsKKyAgICBpZiAoY291bnQgPT0gMCkKICAgICAgICAgcmV0dXJuIE5POwotICAgIH0K
IAotICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KSB7CisgICAgZm9y
IChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkKICAgICAgICAg
W3NlbGYgcmVtb3ZlSXRlbTpbZW50cmllcyBvYmplY3RBdEluZGV4OmluZGV4XV07Ci0gICAgfQog
ICAgIAogICAgIHJldHVybiBZRVM7CiB9CiAKIC0gKEJPT0wpcmVtb3ZlQWxsSXRlbXMKIHsKLSAg
ICBpZiAoW19lbnRyaWVzQnlVUkwgY291bnRdID09IDApIHsKKyAgICBpZiAoX2VudHJpZXNCeURh
dGUtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIE5POwotICAgIH0KIAogICAgIF9lbnRyaWVz
QnlEYXRlLT5jbGVhcigpOwogICAgIFtfZW50cmllc0J5VVJMIHJlbW92ZUFsbE9iamVjdHNdOwpA
QCAtMzA2LDIzICszNDMsMjEgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVn
aW5uaQogICAgIFtfb3JkZXJlZExhc3RWaXNpdGVkRGF5cyByZWxlYXNlXTsKICAgICBfb3JkZXJl
ZExhc3RWaXNpdGVkRGF5cyA9IG5pbDsKIAorICAgIFBhZ2VHcm91cDo6cmVtb3ZlQWxsVmlzaXRl
ZExpbmtzKCk7CisKICAgICByZXR1cm4gWUVTOwogfQogCiAtICh2b2lkKWFkZEl0ZW1zOihOU0Fy
cmF5ICopbmV3RW50cmllcwogewotICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvcjsKLSAgICBX
ZWJIaXN0b3J5SXRlbSAqZW50cnk7Ci0KICAgICAvLyBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhh
dCB0aGUgaW5jb21pbmcgZW50cmllcyBhcmUgaW4gYW55IHBhcnRpY3VsYXIKICAgICAvLyBvcmRl
ciwgYnV0IGlmIHRoaXMgaXMgY2FsbGVkIHdpdGggYSBzZXQgb2YgZW50cmllcyB0aGF0IHdlcmUg
Y3JlYXRlZCBieQogICAgIC8vIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSByZXN1bHRzIG9mIG9yZGVy
ZWRMYXN0VmlzaXRlZERheXMgYW5kIG9yZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25EYXl5CiAgICAg
Ly8gdGhlbiB0aGV5IHdpbGwgYmUgb3JkZXJlZCBjaHJvbm9sb2dpY2FsbHkgZnJvbSBuZXdlc3Qg
dG8gb2xkZXN0LiBXZSBjYW4gbWFrZSBhZGRpbmcgdGhlbQogICAgIC8vIGZhc3RlciAoZmV3ZXIg
Y29tcGFyZXMpIGJ5IGluc2VydGluZyB0aGVtIGZyb20gb2xkZXN0IHRvIG5ld2VzdC4KLSAgICBl
bnVtZXJhdG9yID0gW25ld0VudHJpZXMgcmV2ZXJzZU9iamVjdEVudW1lcmF0b3JdOwotICAgIHdo
aWxlICgoZW50cnkgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7CisgICAgTlNF
bnVtZXJhdG9yICplbnVtZXJhdG9yID0gW25ld0VudHJpZXMgcmV2ZXJzZU9iamVjdEVudW1lcmF0
b3JdOworICAgIHdoaWxlIChXZWJIaXN0b3J5SXRlbSAqZW50cnkgPSBbZW51bWVyYXRvciBuZXh0
T2JqZWN0XSkKICAgICAgICAgW3NlbGYgYWRkSXRlbTplbnRyeV07Ci0gICAgfQogfQogCiAjcHJh
Z21hIG1hcmsgREFURS1CQVNFRCBSRVRSSUVWQUwKQEAgLTM0OSwyOCArMzg0LDI3IEBAIFdlYkhp
c3RvcnlEYXRlS2V5IHRpbWVJbnRlcnZhbEZvckJlZ2lubmkKICAgICByZXR1cm4gX29yZGVyZWRM
YXN0VmlzaXRlZERheXM7CiB9CiAKLS0gKE5TQXJyYXkgKilvcmRlcmVkSXRlbXNMYXN0VmlzaXRl
ZE9uRGF5OiAoTlNDYWxlbmRhckRhdGUgKilkYXRlCistIChOU0FycmF5ICopb3JkZXJlZEl0ZW1z
TGFzdFZpc2l0ZWRPbkRheTooTlNDYWxlbmRhckRhdGUgKilkYXRlCiB7CiAgICAgV2ViSGlzdG9y
eURhdGVLZXkgZGF0ZUtleTsKLSAgICBpZiAoW3NlbGYgZmluZEtleTomZGF0ZUtleSBmb3JEYXk6
W2RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXV0pCi0gICAgICAgIHJldHVybiBf
ZW50cmllc0J5RGF0ZS0+Z2V0KGRhdGVLZXkpLmdldCgpOwotCi0gICAgcmV0dXJuIG5pbDsKKyAg
ICBpZiAoIVtzZWxmIGZpbmRLZXk6JmRhdGVLZXkgZm9yRGF5OltkYXRlIHRpbWVJbnRlcnZhbFNp
bmNlUmVmZXJlbmNlRGF0ZV1dKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBfZW50
cmllc0J5RGF0ZS0+Z2V0KGRhdGVLZXkpLmdldCgpOwogfQogCiAjcHJhZ21hIG1hcmsgVVJMIE1B
VENISU5HCiAKIC0gKFdlYkhpc3RvcnlJdGVtICopaXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcg
KilVUkxTdHJpbmcKIHsKLSAgICByZXR1cm4gW19lbnRyaWVzQnlVUkwgb2JqZWN0Rm9yS2V5OiBV
UkxTdHJpbmddOworICAgIHJldHVybiBbX2VudHJpZXNCeVVSTCBvYmplY3RGb3JLZXk6VVJMU3Ry
aW5nXTsKIH0KIAotLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6IChOU1N0cmluZyAq
KVVSTFN0cmluZworLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5nICop
VVJMU3RyaW5nCiB7CiAgICAgcmV0dXJuIFtzZWxmIGl0ZW1Gb3JVUkxTdHJpbmc6VVJMU3RyaW5n
XSAhPSBuaWw7CiB9CiAKLS0gKEJPT0wpY29udGFpbnNVUkw6IChOU1VSTCAqKVVSTAorLSAoQk9P
TCljb250YWluc1VSTDooTlNVUkwgKilVUkwKIHsKICAgICByZXR1cm4gW3NlbGYgaXRlbUZvclVS
TFN0cmluZzpbVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmddXSAhPSBuaWw7CiB9CkBAIC0z
OTIsNyArNDI2LDcgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQog
ewogICAgIGlmIChhZ2VJbkRheXNMaW1pdFNldCkKICAgICAgICAgcmV0dXJuIGFnZUluRGF5c0xp
bWl0OwotICAgIHJldHVybiBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBp
bnRlZ2VyRm9yS2V5OiBAIldlYktpdEhpc3RvcnlBZ2VJbkRheXNMaW1pdCJdOworICAgIHJldHVy
biBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBpbnRlZ2VyRm9yS2V5OkAi
V2ViS2l0SGlzdG9yeUFnZUluRGF5c0xpbWl0Il07CiB9CiAKIC0gKHZvaWQpc2V0SGlzdG9yeUl0
ZW1MaW1pdDooaW50KWxpbWl0CkBAIC00MDUsMTIgKzQzOSwxMiBAQCBXZWJIaXN0b3J5RGF0ZUtl
eSB0aW1lSW50ZXJ2YWxGb3JCZWdpbm5pCiB7CiAgICAgaWYgKGl0ZW1MaW1pdFNldCkKICAgICAg
ICAgcmV0dXJuIGl0ZW1MaW1pdDsKLSAgICByZXR1cm4gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gaW50ZWdlckZvcktleTogQCJXZWJLaXRIaXN0b3J5SXRlbUxpbWl0Il07
CisgICAgcmV0dXJuIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGludGVn
ZXJGb3JLZXk6QCJXZWJLaXRIaXN0b3J5SXRlbUxpbWl0Il07CiB9CiAKIC8vIFJldHVybiBhIGRh
dGUgdGhhdCBtYXJrcyB0aGUgYWdlIGxpbWl0IGZvciBoaXN0b3J5IGVudHJpZXMgc2F2ZWQgdG8g
b3IKIC8vIGxvYWRlZCBmcm9tIGRpc2suIEFueSBlbnRyeSBvbGRlciB0aGFuIHRoaXMgaXRlbSBz
aG91bGQgYmUgcmVqZWN0ZWQuCi0tIChOU0NhbGVuZGFyRGF0ZSAqKV9hZ2VMaW1pdERhdGUKKy0g
KE5TQ2FsZW5kYXJEYXRlICopYWdlTGltaXREYXRlCiB7CiAgICAgcmV0dXJuIFtbTlNDYWxlbmRh
ckRhdGUgY2FsZW5kYXJEYXRlXSBkYXRlQnlBZGRpbmdZZWFyczowIG1vbnRoczowIGRheXM6LVtz
ZWxmIGhpc3RvcnlBZ2VJbkRheXNMaW1pdF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzOjAgbWludXRlczowIHNlY29uZHM6MF07CkBA
IC00NDAsNyArNDc0LDcgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5u
aQogICAgIHJldHVybiBhcnJheVJlcDsKIH0KIAotLSAoQk9PTClfbG9hZEhpc3RvcnlHdXRzRnJv
bVVSTDooTlNVUkwgKilVUkwgc2F2ZWRJdGVtc0NvdW50OihpbnQgKiludW1iZXJPZkl0ZW1zTG9h
ZGVkIGNvbGxlY3REaXNjYXJkZWRJdGVtc0ludG86KE5TTXV0YWJsZUFycmF5ICopZGlzY2FyZGVk
SXRlbXMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKKy0gKEJPT0wpbG9hZEhpc3RvcnlHdXRzRnJv
bVVSTDooTlNVUkwgKilVUkwgc2F2ZWRJdGVtc0NvdW50OihpbnQgKiludW1iZXJPZkl0ZW1zTG9h
ZGVkIGNvbGxlY3REaXNjYXJkZWRJdGVtc0ludG86KE5TTXV0YWJsZUFycmF5ICopZGlzY2FyZGVk
SXRlbXMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKIHsKICAgICAqbnVtYmVyT2ZJdGVtc0xvYWRl
ZCA9IDA7CiAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gbmlsOwpAQCAtNDc0LDEyICs1
MDgsMTEgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQogICAgIE5T
TnVtYmVyICpmaWxlVmVyc2lvbk9iamVjdCA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpGaWxl
VmVyc2lvbktleV07CiAgICAgaW50IGZpbGVWZXJzaW9uOwogICAgIC8vIHdlIGRvbid0IHRydXN0
IGRhdGEgb2J0YWluZWQgZnJvbSBlbHNld2hlcmUsIHNvIGRvdWJsZS1jaGVjawotICAgIGlmIChm
aWxlVmVyc2lvbk9iamVjdCAhPSBuaWwgJiYgW2ZpbGVWZXJzaW9uT2JqZWN0IGlzS2luZE9mQ2xh
c3M6W05TTnVtYmVyIGNsYXNzXV0pIHsKLSAgICAgICAgZmlsZVZlcnNpb24gPSBbZmlsZVZlcnNp
b25PYmplY3QgaW50VmFsdWVdOwotICAgIH0gZWxzZSB7CisgICAgaWYgKCFmaWxlVmVyc2lvbk9i
amVjdCB8fCAhW2ZpbGVWZXJzaW9uT2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNz
XV0pIHsKICAgICAgICAgTE9HX0VSUk9SKCJoaXN0b3J5IGZpbGUgdmVyc2lvbiBjYW4ndCBiZSBk
ZXRlcm1pbmVkLCB0aGVyZWZvcmUgbm90IGxvYWRpbmciKTsKICAgICAgICAgcmV0dXJuIE5POwog
ICAgIH0KKyAgICBmaWxlVmVyc2lvbiA9IFtmaWxlVmVyc2lvbk9iamVjdCBpbnRWYWx1ZV07CiAg
ICAgaWYgKGZpbGVWZXJzaW9uID4gY3VycmVudEZpbGVWZXJzaW9uKSB7CiAgICAgICAgIExPR19F
UlJPUigiaGlzdG9yeSBmaWxlIHZlcnNpb24gaXMgJWQsIG5ld2VyIHRoYW4gbmV3ZXN0IGtub3du
IHZlcnNpb24gJWQsIHRoZXJlZm9yZSBub3QgbG9hZGluZyIsIGZpbGVWZXJzaW9uLCBjdXJyZW50
RmlsZVZlcnNpb24pOwogICAgICAgICByZXR1cm4gTk87CkBAIC00ODgsNyArNTIxLDcgQEAgV2Vi
SGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQogICAgIE5TQXJyYXkgKmFycmF5
ID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkRhdGVzQXJyYXlLZXldOwogCiAgICAgaW50IGl0
ZW1Db3VudExpbWl0ID0gW3NlbGYgaGlzdG9yeUl0ZW1MaW1pdF07Ci0gICAgTlNUaW1lSW50ZXJ2
YWwgYWdlTGltaXREYXRlID0gW1tzZWxmIF9hZ2VMaW1pdERhdGVdIHRpbWVJbnRlcnZhbFNpbmNl
UmVmZXJlbmNlRGF0ZV07CisgICAgTlNUaW1lSW50ZXJ2YWwgYWdlTGltaXREYXRlID0gW1tzZWxm
IGFnZUxpbWl0RGF0ZV0gdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKICAgICBOU0Vu
dW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbYXJyYXkgb2JqZWN0RW51bWVyYXRvcl07CiAgICAgQk9P
TCBhZ2VMaW1pdFBhc3NlZCA9IE5POwogICAgIEJPT0wgaXRlbUxpbWl0UGFzc2VkID0gTk87CkBA
IC01MzAsMTUwICs1NjMsNjUgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVn
aW5uaQogCiAtIChCT09MKWxvYWRGcm9tVVJMOihOU1VSTCAqKVVSTCBjb2xsZWN0RGlzY2FyZGVk
SXRlbXNJbnRvOihOU011dGFibGVBcnJheSAqKWRpc2NhcmRlZEl0ZW1zIGVycm9yOihOU0Vycm9y
ICoqKWVycm9yCiB7Ci0gICAgaW50IG51bWJlck9mSXRlbXM7Ci0gICAgZG91YmxlIHN0YXJ0LCBk
dXJhdGlvbjsKLSAgICBCT09MIHJlc3VsdDsKKyAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRl
VGltZUdldEN1cnJlbnQoKTsKIAotICAgIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50
KCk7Ci0gICAgcmVzdWx0ID0gW3NlbGYgX2xvYWRIaXN0b3J5R3V0c0Zyb21VUkw6VVJMIHNhdmVk
SXRlbXNDb3VudDombnVtYmVyT2ZJdGVtcyBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJbnRvOmRpc2Nh
cmRlZEl0ZW1zIGVycm9yOmVycm9yXTsKKyAgICBpbnQgbnVtYmVyT2ZJdGVtczsKKyAgICBpZiAo
IVtzZWxmIGxvYWRIaXN0b3J5R3V0c0Zyb21VUkw6VVJMIHNhdmVkSXRlbXNDb3VudDombnVtYmVy
T2ZJdGVtcyBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJbnRvOmRpc2NhcmRlZEl0ZW1zIGVycm9yOmVy
cm9yXSkKKyAgICAgICAgcmV0dXJuIE5POwogCi0gICAgaWYgKHJlc3VsdCkgewotICAgICAgICBk
dXJhdGlvbiA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7Ci0gICAgICAgIExP
RyhUaW1pbmcsICJsb2FkaW5nICVkIGhpc3RvcnkgZW50cmllcyBmcm9tICVAIHRvb2sgJWYgc2Vj
b25kcyIsCi0gICAgICAgICAgICBudW1iZXJPZkl0ZW1zLCBVUkwsIGR1cmF0aW9uKTsKLSAgICB9
CisgICAgZG91YmxlIGR1cmF0aW9uID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFy
dDsKKyAgICBMT0coVGltaW5nLCAibG9hZGluZyAlZCBoaXN0b3J5IGVudHJpZXMgZnJvbSAlQCB0
b29rICVmIHNlY29uZHMiLCBudW1iZXJPZkl0ZW1zLCBVUkwsIGR1cmF0aW9uKTsKIAotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFlFUzsKIH0KIAotLSAoQk9PTClfc2F2ZUhpc3RvcnlH
dXRzOiAoaW50ICopbnVtYmVyT2ZJdGVtc1NhdmVkIFVSTDooTlNVUkwgKilVUkwgZXJyb3I6KE5T
RXJyb3IgKiopZXJyb3IKKy0gKEJPT0wpc2F2ZUhpc3RvcnlHdXRzOihpbnQgKiludW1iZXJPZkl0
ZW1zU2F2ZWQgVVJMOihOU1VSTCAqKVVSTCBlcnJvcjooTlNFcnJvciAqKillcnJvcgogewogICAg
ICpudW1iZXJPZkl0ZW1zU2F2ZWQgPSAwOwogCi0gICAgLy8gRklYTUU6ICBDb3JyZWN0bHkgcmVw
b3J0IGVycm9yIHdoZW4gbmV3IEFQSSBpcyByZWFkeS4KLSAgICBpZiAoZXJyb3IpCi0gICAgICAg
ICplcnJvciA9IG5pbDsKLQogICAgIE5TQXJyYXkgKmFycmF5ID0gW3NlbGYgYXJyYXlSZXByZXNl
bnRhdGlvbl07CiAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW05TRGljdGlvbmFyeSBk
aWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgogICAgICAgICBhcnJheSwgRGF0ZXNBcnJheUtl
eSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Y3VycmVudEZpbGVWZXJzaW9uXSwg
RmlsZVZlcnNpb25LZXksCiAgICAgICAgIG5pbF07CiAgICAgTlNEYXRhICpkYXRhID0gW05TUHJv
cGVydHlMaXN0U2VyaWFsaXphdGlvbiBkYXRhRnJvbVByb3BlcnR5TGlzdDpkaWN0aW9uYXJ5IGZv
cm1hdDpOU1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wIGVycm9yRGVzY3JpcHRpb246bmls
XTsKLSAgICBpZiAoIVtkYXRhIHdyaXRlVG9VUkw6VVJMIGF0b21pY2FsbHk6WUVTXSkgeworICAg
IGlmICghW2RhdGEgd3JpdGVUb1VSTDpVUkwgb3B0aW9uczowIGVycm9yOmVycm9yXSkgewogICAg
ICAgICBMT0dfRVJST1IoImF0dGVtcHQgdG8gc2F2ZSAlQCB0byAlQCBmYWlsZWQiLCBkaWN0aW9u
YXJ5LCBVUkwpOwogICAgICAgICByZXR1cm4gTk87CiAgICAgfQotICAgIAorCiAgICAgKm51bWJl
ck9mSXRlbXNTYXZlZCA9IFthcnJheSBjb3VudF07CiAgICAgcmV0dXJuIFlFUzsKIH0KIAogLSAo
Qk9PTClzYXZlVG9VUkw6KE5TVVJMICopVVJMIGVycm9yOihOU0Vycm9yICoqKWVycm9yCiB7Ci0g
ICAgaW50IG51bWJlck9mSXRlbXM7Ci0gICAgZG91YmxlIHN0YXJ0LCBkdXJhdGlvbjsKLSAgICBC
T09MIHJlc3VsdDsKLQotICAgIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0g
ICAgcmVzdWx0ID0gW3NlbGYgX3NhdmVIaXN0b3J5R3V0czogJm51bWJlck9mSXRlbXMgVVJMOlVS
TCBlcnJvcjplcnJvcl07Ci0KLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGR1cmF0aW9uID0g
Q0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKLSAgICAgICAgTE9HKFRpbWluZywg
InNhdmluZyAlZCBoaXN0b3J5IGVudHJpZXMgdG8gJUAgdG9vayAlZiBzZWNvbmRzIiwKLSAgICAg
ICAgICAgIG51bWJlck9mSXRlbXMsIFVSTCwgZHVyYXRpb24pOwotICAgIH0KLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBfV2ViQ29yZUhpc3RvcnlQcm92aWRl
ciA6IE5TT2JqZWN0ICA8V2ViQ29yZUhpc3RvcnlQcm92aWRlcj4gCi17Ci0gICAgV2ViSGlzdG9y
eSAqaGlzdG9yeTsKLX0KLS0gaW5pdFdpdGhIaXN0b3J5OiAoV2ViSGlzdG9yeSAqKWg7Ci1AZW5k
CisgICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7CiAKLUBpbXBs
ZW1lbnRhdGlvbiBfV2ViQ29yZUhpc3RvcnlQcm92aWRlcgotLSBpbml0V2l0aEhpc3Rvcnk6IChX
ZWJIaXN0b3J5ICopaAotewotICAgIGhpc3RvcnkgPSBbaCByZXRhaW5dOwotICAgIHJldHVybiBz
ZWxmOwotfQorICAgIGludCBudW1iZXJPZkl0ZW1zOworICAgIGlmICghW3NlbGYgc2F2ZUhpc3Rv
cnlHdXRzOiZudW1iZXJPZkl0ZW1zIFVSTDpVUkwgZXJyb3I6ZXJyb3JdKQorICAgICAgICByZXR1
cm4gTk87CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaExldHRlcihjaGFyIGMsIGNoYXIgbG93
ZXJjYXNlTGV0dGVyKQotewotICAgIHJldHVybiAoYyB8IDB4MjApID09IGxvd2VyY2FzZUxldHRl
cjsKLX0KKyAgICBkb3VibGUgZHVyYXRpb24gPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAt
IHN0YXJ0OworICAgIExPRyhUaW1pbmcsICJzYXZpbmcgJWQgaGlzdG9yeSBlbnRyaWVzIHRvICVA
IHRvb2sgJWYgc2Vjb25kcyIsIG51bWJlck9mSXRlbXMsIFVSTCwgZHVyYXRpb24pOwogCi1zdGF0
aWMgaW5saW5lIGJvb2wgbWF0Y2hVbmljb2RlTGV0dGVyKFVuaUNoYXIgYywgVW5pQ2hhciBsb3dl
cmNhc2VMZXR0ZXIpCi17Ci0gICAgcmV0dXJuIChjIHwgMHgyMCkgPT0gbG93ZXJjYXNlTGV0dGVy
OworICAgIHJldHVybiBZRVM7CiB9CiAKLSNkZWZpbmUgVU5JQ09ERV9CVUZGRVJfU0laRSAxMDI0
Ci0KLS0gKEJPT0wpY29udGFpbnNVUkw6KGNvbnN0IFVuaUNoYXIgKil1bmljb2RlIGxlbmd0aDoo
dW5zaWduZWQpbGVuZ3RoCistICh2b2lkKWFkZFZpc2l0ZWRMaW5rc1RvUGFnZUdyb3VwOihQYWdl
R3JvdXAmKWdyb3VwCiB7Ci0gICAgY29uc3QgVW5pQ2hhciAqdW5pY29kZVN0ciA9IHVuaWNvZGU7
Ci0gICAgVW5pQ2hhciBzdGF0aWNTdHJCdWZmZXJbVU5JQ09ERV9CVUZGRVJfU0laRV07Ci0gICAg
VW5pQ2hhciAqc3RyQnVmZmVyID0gTlVMTDsKLSAgICBCT09MIG5lZWRUb0FkZFNsYXNoID0gRkFM
U0U7Ci0KLSAgICBpZiAobGVuZ3RoID49IDYgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVy
KHVuaWNvZGVbMF0sICdoJykgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVb
MV0sICd0JykgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbMl0sICd0Jykg
JiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbM10sICdwJykgJiYKLSAgICAg
ICAgKHVuaWNvZGVbNF0gPT0gJzonIAotICAgICAgICAgfHwgKG1hdGNoVW5pY29kZUxldHRlcih1
bmljb2RlWzRdLCAncycpICYmIHVuaWNvZGVbNV0gPT0gJzonKSkpIHsKLQotICAgICAgICB1bnNp
Z25lZCBwb3MgPSB1bmljb2RlWzRdID09ICc6JyA/IDUgOiA2OwotCi0gICAgICAgIC8vIHNraXAg
cG9zc2libGUgaW5pdGlhbCB0d28gc2xhc2hlcwotICAgICAgICBpZiAocG9zICsgMSA8IGxlbmd0
aCAmJiB1bmljb2RlW3Bvc10gPT0gJy8nICYmIHVuaWNvZGVbcG9zICsgMV0gPT0gJy8nKSB7Ci0g
ICAgICAgICAgICBwb3MgKz0gMjsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlIChwb3MgPCBs
ZW5ndGggJiYgdW5pY29kZVtwb3NdICE9ICcvJykgewotICAgICAgICAgICAgcG9zKys7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAocG9zID09IGxlbmd0aCkgewotICAgICAgICAgICAgbmVlZFRv
QWRkU2xhc2ggPSBUUlVFOworICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtfZW50cmll
c0J5VVJMIGtleUVudW1lcmF0b3JdOworICAgIHdoaWxlIChOU1N0cmluZyAqdXJsID0gW2VudW1l
cmF0b3IgbmV4dE9iamVjdF0pIHsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFt1cmwgbGVuZ3Ro
XTsKKyAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBDRlN0cmluZ0dldENoYXJhY3Rl
cnNQdHIocmVpbnRlcnByZXRfY2FzdDxDRlN0cmluZ1JlZj4odXJsKSk7CisgICAgICAgIGlmIChj
aGFyYWN0ZXJzKQorICAgICAgICAgICAgZ3JvdXAuYWRkVmlzaXRlZExpbmsoY2hhcmFjdGVycywg
bGVuZ3RoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWZWN0b3I8VUNoYXIsIDUxMj4g
YnVmZmVyKGxlbmd0aCk7CisgICAgICAgICAgICBbdXJsIGdldENoYXJhY3RlcnM6YnVmZmVyLmRh
dGEoKV07CisgICAgICAgICAgICBncm91cC5hZGRWaXNpdGVkTGluayhidWZmZXIuZGF0YSgpLCBs
ZW5ndGgpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgaWYgKG5lZWRUb0FkZFNsYXNoKSB7Ci0g
ICAgICAgIGlmIChsZW5ndGggKyAxIDw9IFVOSUNPREVfQlVGRkVSX1NJWkUpIHsKLSAgICAgICAg
ICAgIHN0ckJ1ZmZlciA9IHN0YXRpY1N0ckJ1ZmZlcjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHN0ckJ1ZmZlciA9IChVbmlDaGFyKiltYWxsb2Moc2l6ZW9mKFVuaUNoYXIpICogKGxl
bmd0aCArIDEpKTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoc3RyQnVmZmVyLCB1bmljb2Rl
LCAyICogbGVuZ3RoKTsKLSAgICAgICAgc3RyQnVmZmVyW2xlbmd0aF0gPSAnLyc7Ci0gICAgICAg
IGxlbmd0aCsrOwotCi0gICAgICAgIHVuaWNvZGVTdHIgPSBzdHJCdWZmZXI7Ci0gICAgfQotCi0g
ICAgQ0ZTdHJpbmdSZWYgc3RyID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVyc05vQ29weShO
VUxMLCB1bmljb2RlU3RyLCBsZW5ndGgsIGtDRkFsbG9jYXRvck51bGwpOwotICAgIEJPT0wgcmVz
dWx0ID0gW2hpc3RvcnkgY29udGFpbnNJdGVtRm9yVVJMU3RyaW5nOihpZClzdHJdOwotICAgIENG
UmVsZWFzZShzdHIpOwotCi0gICAgaWYgKHN0ckJ1ZmZlciAhPSBzdGF0aWNTdHJCdWZmZXIpIHsK
LSAgICAgICAgZnJlZShzdHJCdWZmZXIpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtoaXN0b3J5IHJlbGVhc2VdOwotICAgIFtzdXBl
ciBkZWFsbG9jXTsKIH0KIAogQGVuZApAQCAtNjg1LDEzICs2MzMsMTEgQEAgc3RhdGljIGlubGlu
ZSBib29sIG1hdGNoVW5pY29kZUxldHRlcihVbgogICAgIHJldHVybiBfc2hhcmVkSGlzdG9yeTsK
IH0KIAotCi0rICh2b2lkKXNldE9wdGlvbmFsU2hhcmVkSGlzdG9yeTogKFdlYkhpc3RvcnkgKilo
aXN0b3J5CisrICh2b2lkKXNldE9wdGlvbmFsU2hhcmVkSGlzdG9yeTooV2ViSGlzdG9yeSAqKWhp
c3RvcnkKIHsKLSAgICAvLyBGSVhNRS4gIE5lZWQgdG8gdGhpbmsgYWJvdXQgbXVsdGlwbGUgaW5z
dGFuY2VzIG9mIFdlYkhpc3RvcnkgcGVyIGFwcGxpY2F0aW9uCisgICAgLy8gRklYTUU6IE5lZWQg
dG8gdGhpbmsgYWJvdXQgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIFdlYkhpc3RvcnkgcGVyIGFwcGxp
Y2F0aW9uCiAgICAgLy8gYW5kIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uIG9mIGhpc3RvcnkgZmls
ZSBiZXR3ZWVuIGFwcGxpY2F0aW9ucy4KLSAgICBbV2ViQ29yZUhpc3Rvcnkgc2V0SGlzdG9yeVBy
b3ZpZGVyOiBbW1tfV2ViQ29yZUhpc3RvcnlQcm92aWRlciBhbGxvY10gaW5pdFdpdGhIaXN0b3J5
OiBoaXN0b3J5XSBhdXRvcmVsZWFzZV1dOwotICAgIGlmIChfc2hhcmVkSGlzdG9yeSAhPSBoaXN0
b3J5KXsKKyAgICBpZiAoX3NoYXJlZEhpc3RvcnkgIT0gaGlzdG9yeSkgewogICAgICAgICBbX3No
YXJlZEhpc3RvcnkgcmVsZWFzZV07CiAgICAgICAgIF9zaGFyZWRIaXN0b3J5ID0gW2hpc3Rvcnkg
cmV0YWluXTsKICAgICB9CkBAIC02OTksMTAgKzY0NSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
bWF0Y2hVbmljb2RlTGV0dGVyKFVuCiAKIC0gKGlkKWluaXQKIHsKLSAgICBpZiAoKHNlbGYgPSBb
c3VwZXIgaW5pdF0pICE9IG5pbCkgewotICAgICAgICBfaGlzdG9yeVByaXZhdGUgPSBbW1dlYkhp
c3RvcnlQcml2YXRlIGFsbG9jXSBpbml0XTsKLSAgICB9Ci0KKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfaGlzdG9yeVBy
aXZhdGUgPSBbW1dlYkhpc3RvcnlQcml2YXRlIGFsbG9jXSBpbml0XTsKICAgICByZXR1cm4gc2Vs
ZjsKIH0KIApAQCAtNzE4LDQwICs2NjQsMTQgQEAgc3RhdGljIGlubGluZSBib29sIG1hdGNoVW5p
Y29kZUxldHRlcihVbgogewogICAgIE5TRGljdGlvbmFyeSAqdXNlckluZm8gPSBbTlNEaWN0aW9u
YXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6ZW50cmllcywgV2ViSGlzdG9yeUl0ZW1z
S2V5LCBuaWxdOwogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0KLSAg
ICAgICAgcG9zdE5vdGlmaWNhdGlvbk5hbWU6IG5hbWUgb2JqZWN0OiBzZWxmIHVzZXJJbmZvOiB1
c2VySW5mb107Ci19Ci0KLS0gKFdlYkhpc3RvcnlJdGVtICopYWRkSXRlbUZvclVSTDogKE5TVVJM
ICopVVJMCi17Ci0gICAgV2ViSGlzdG9yeUl0ZW0gKmVudHJ5ID0gW1tXZWJIaXN0b3J5SXRlbSBh
bGxvY10gaW5pdFdpdGhVUkw6VVJMIHRpdGxlOm5pbF07Ci0gICAgW2VudHJ5IF9zZXRMYXN0Vmlz
aXRlZFRpbWVJbnRlcnZhbDogW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVd
XTsKLSAgICBbc2VsZiBhZGRJdGVtOiBlbnRyeV07Ci0gICAgW2VudHJ5IHJlbGVhc2VdOwotICAg
IHJldHVybiBlbnRyeTsKLX0KLQotCi0tICh2b2lkKWFkZEl0ZW06IChXZWJIaXN0b3J5SXRlbSAq
KWVudHJ5Ci17Ci0gICAgTE9HIChIaXN0b3J5LCAiYWRkaW5nICVAIiwgZW50cnkpOwotICAgIFtf
aGlzdG9yeVByaXZhdGUgYWRkSXRlbTogZW50cnldOwotICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0
aW9uOiBXZWJIaXN0b3J5SXRlbXNBZGRlZE5vdGlmaWNhdGlvbgotICAgICAgICAgICAgICAgICAg
ICBlbnRyaWVzOiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6ZW50cnldXTsKKyAgICAgICAgcG9z
dE5vdGlmaWNhdGlvbk5hbWU6bmFtZSBvYmplY3Q6c2VsZiB1c2VySW5mbzp1c2VySW5mb107CiB9
CiAKLS0gKHZvaWQpcmVtb3ZlSXRlbTogKFdlYkhpc3RvcnlJdGVtICopZW50cnkKLXsKLSAgICBp
ZiAoW19oaXN0b3J5UHJpdmF0ZSByZW1vdmVJdGVtOiBlbnRyeV0pIHsKLSAgICAgICAgW3NlbGYg
X3NlbmROb3RpZmljYXRpb246IFdlYkhpc3RvcnlJdGVtc1JlbW92ZWROb3RpZmljYXRpb24KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXM6IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpl
bnRyeV1dOwotICAgIH0KLX0KLQotLSAodm9pZClyZW1vdmVJdGVtczogKE5TQXJyYXkgKillbnRy
aWVzCistICh2b2lkKXJlbW92ZUl0ZW1zOihOU0FycmF5ICopZW50cmllcwogewogICAgIGlmIChb
X2hpc3RvcnlQcml2YXRlIHJlbW92ZUl0ZW1zOmVudHJpZXNdKSB7Ci0gICAgICAgIFtzZWxmIF9z
ZW5kTm90aWZpY2F0aW9uOiBXZWJIaXN0b3J5SXRlbXNSZW1vdmVkTm90aWZpY2F0aW9uCi0gICAg
ICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOiBlbnRyaWVzXTsKKyAgICAgICAgW3NlbGYgX3Nl
bmROb3RpZmljYXRpb246V2ViSGlzdG9yeUl0ZW1zUmVtb3ZlZE5vdGlmaWNhdGlvbgorICAgICAg
ICAgICAgICAgICAgICAgICAgZW50cmllczplbnRyaWVzXTsKICAgICB9CiB9CiAKQEAgLTc1OSwy
MSArNjc5LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaFVuaWNvZGVMZXR0ZXIoVW4KIHsK
ICAgICBpZiAoW19oaXN0b3J5UHJpdmF0ZSByZW1vdmVBbGxJdGVtc10pIHsKICAgICAgICAgW1tO
U05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXQotICAgICAgICAgICAgcG9zdE5vdGlm
aWNhdGlvbk5hbWU6IFdlYkhpc3RvcnlBbGxJdGVtc1JlbW92ZWROb3RpZmljYXRpb24KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBzZWxmXTsKKyAgICAgICAgICAgIHBvc3ROb3Rp
ZmljYXRpb25OYW1lOldlYkhpc3RvcnlBbGxJdGVtc1JlbW92ZWROb3RpZmljYXRpb24KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OnNlbGZdOwogICAgIH0KIH0KIAogLSAodm9pZClh
ZGRJdGVtczooTlNBcnJheSAqKW5ld0VudHJpZXMKIHsKICAgICBbX2hpc3RvcnlQcml2YXRlIGFk
ZEl0ZW1zOm5ld0VudHJpZXNdOwotICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOiBXZWJIaXN0
b3J5SXRlbXNBZGRlZE5vdGlmaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOiBu
ZXdFbnRyaWVzXTsKLX0KLQotLSAodm9pZClzZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDooTlNU
aW1lSW50ZXJ2YWwpdGltZSBmb3JJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5Ci17Ci0gICAg
W19oaXN0b3J5UHJpdmF0ZSBzZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDp0aW1lIGZvckl0ZW06
ZW50cnldOworICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOldlYkhpc3RvcnlJdGVtc0FkZGVk
Tm90aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIGVudHJpZXM6bmV3RW50cmllc107CiB9
CiAKICNwcmFnbWEgbWFyayBEQVRFLUJBU0VEIFJFVFJJRVZBTApAQCAtNzgzLDIxICs2OTgsMTYg
QEAgc3RhdGljIGlubGluZSBib29sIG1hdGNoVW5pY29kZUxldHRlcihVbgogICAgIHJldHVybiBb
X2hpc3RvcnlQcml2YXRlIG9yZGVyZWRMYXN0VmlzaXRlZERheXNdOwogfQogCi0tIChOU0FycmF5
ICopb3JkZXJlZEl0ZW1zTGFzdFZpc2l0ZWRPbkRheTogKE5TQ2FsZW5kYXJEYXRlICopZGF0ZQor
LSAoTlNBcnJheSAqKW9yZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25EYXk6KE5TQ2FsZW5kYXJEYXRl
ICopZGF0ZQogewotICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIG9yZGVyZWRJdGVtc0xhc3RW
aXNpdGVkT25EYXk6IGRhdGVdOworICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIG9yZGVyZWRJ
dGVtc0xhc3RWaXNpdGVkT25EYXk6ZGF0ZV07CiB9CiAKICNwcmFnbWEgbWFyayBVUkwgTUFUQ0hJ
TkcKIAotLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6IChOU1N0cmluZyAqKVVSTFN0
cmluZworLSAoQk9PTCljb250YWluc1VSTDooTlNVUkwgKilVUkwKIHsKLSAgICByZXR1cm4gW19o
aXN0b3J5UHJpdmF0ZSBjb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6IFVSTFN0cmluZ107Ci19Ci0K
LS0gKEJPT0wpY29udGFpbnNVUkw6IChOU1VSTCAqKVVSTAotewotICAgIHJldHVybiBbX2hpc3Rv
cnlQcml2YXRlIGNvbnRhaW5zVVJMOiBVUkxdOworICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRl
IGNvbnRhaW5zVVJMOlVSTF07CiB9CiAKIC0gKFdlYkhpc3RvcnlJdGVtICopaXRlbUZvclVSTDoo
TlNVUkwgKilVUkwKQEAgLTgwOSw0MSArNzE5LDMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXRj
aFVuaWNvZGVMZXR0ZXIoVW4KIAogLSAoQk9PTClsb2FkRnJvbVVSTDooTlNVUkwgKilVUkwgZXJy
b3I6KE5TRXJyb3IgKiopZXJyb3IKIHsKLSAgICBOU011dGFibGVBcnJheSAqZGlzY2FyZGVkSXRl
bXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIAotICAgIGlmIChbX2hpc3RvcnlQcml2
YXRlIGxvYWRGcm9tVVJMOlVSTCBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJbnRvOmRpc2NhcmRlZEl0
ZW1zIGVycm9yOmVycm9yXSkgewotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdCi0gICAgICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTpXZWJIaXN0b3J5TG9h
ZGVkTm90aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDpzZWxmXTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChbZGlzY2FyZGVkSXRlbXMgY291bnRdID4gMCkKLSAgICAg
ICAgICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOldlYkhpc3RvcnlJdGVtc0Rpc2NhcmRlZFdo
aWxlTG9hZGluZ05vdGlmaWNhdGlvbiBlbnRyaWVzOmRpc2NhcmRlZEl0ZW1zXTsKLSAgICAgICAg
Ci0gICAgICAgIHJldHVybiBZRVM7CisgICAgTlNNdXRhYmxlQXJyYXkgKmRpc2NhcmRlZEl0ZW1z
ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07ICAgIAorICAgIGlmICghW19oaXN0b3J5
UHJpdmF0ZSBsb2FkRnJvbVVSTDpVUkwgY29sbGVjdERpc2NhcmRlZEl0ZW1zSW50bzpkaXNjYXJk
ZWRJdGVtcyBlcnJvcjplcnJvcl0pIHsKKyAgICAgICAgW2Rpc2NhcmRlZEl0ZW1zIHJlbGVhc2Vd
OworICAgICAgICByZXR1cm4gTk87CiAgICAgfQotICAgIHJldHVybiBOTzsKLX0KIAotLSAoQk9P
TClzYXZlVG9VUkw6KE5TVVJMICopVVJMIGVycm9yOihOU0Vycm9yICoqKWVycm9yCi17Ci0gICAg
Ly8gRklYTUU6ICBVc2UgbmV3IGZvdW5kYXRpb24gQVBJIHRvIGdldCBlcnJvciB3aGVuIHJlYWR5
LgotICAgIGlmKFtfaGlzdG9yeVByaXZhdGUgc2F2ZVRvVVJMOlVSTCBlcnJvcjplcnJvcl0pewot
ICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdCi0gICAgICAgICAg
ICBwb3N0Tm90aWZpY2F0aW9uTmFtZTogV2ViSGlzdG9yeVNhdmVkTm90aWZpY2F0aW9uCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDogc2VsZl07Ci0gICAgICAgIHJldHVybiBZRVM7
Ci0gICAgfQotICAgIHJldHVybiBOTzsgICAgCi19CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXQorICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTpXZWJIaXN0b3J5
TG9hZGVkTm90aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OnNlbGZdOwog
Ci0tIChXZWJIaXN0b3J5SXRlbSAqKV9pdGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0
cmluZwotewotICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIGl0ZW1Gb3JVUkxTdHJpbmc6IFVS
TFN0cmluZ107CisgICAgaWYgKFtkaXNjYXJkZWRJdGVtcyBjb3VudF0pCisgICAgICAgIFtzZWxm
IF9zZW5kTm90aWZpY2F0aW9uOldlYkhpc3RvcnlJdGVtc0Rpc2NhcmRlZFdoaWxlTG9hZGluZ05v
dGlmaWNhdGlvbiBlbnRyaWVzOmRpc2NhcmRlZEl0ZW1zXTsKKworICAgIHJldHVybiBZRVM7CiB9
CiAKLS0gKE5TQ2FsZW5kYXJEYXRlKilhZ2VMaW1pdERhdGUKKy0gKEJPT0wpc2F2ZVRvVVJMOihO
U1VSTCAqKVVSTCBlcnJvcjooTlNFcnJvciAqKillcnJvcgogewotICAgIHJldHVybiBbX2hpc3Rv
cnlQcml2YXRlIF9hZ2VMaW1pdERhdGVdOworICAgIGlmICghW19oaXN0b3J5UHJpdmF0ZSBzYXZl
VG9VUkw6VVJMIGVycm9yOmVycm9yXSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0KKyAgICAgICAgcG9zdE5vdGlmaWNhdGlvbk5h
bWU6V2ViSGlzdG9yeVNhdmVkTm90aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0OnNlbGZdOworICAgIHJldHVybiBZRVM7CiB9CiAKIC0gKHZvaWQpc2V0SGlzdG9yeUl0ZW1M
aW1pdDooaW50KWxpbWl0CkBAIC04NjcsMyArNzY2LDY5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBt
YXRjaFVuaWNvZGVMZXR0ZXIoVW4KIH0KIAogQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViSGlz
dG9yeSAoV2ViUHJpdmF0ZSkKKworLSAodm9pZClhZGRJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWVu
dHJ5Cit7CisgICAgTE9HKEhpc3RvcnksICJhZGRpbmcgJUAiLCBlbnRyeSk7CisgICAgW19oaXN0
b3J5UHJpdmF0ZSBhZGRJdGVtOmVudHJ5XTsKKyAgICBbc2VsZiBfc2VuZE5vdGlmaWNhdGlvbjpX
ZWJIaXN0b3J5SXRlbXNBZGRlZE5vdGlmaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICBlbnRy
aWVzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDplbnRyeV1dOworfQorCistIChXZWJIaXN0b3J5
SXRlbSAqKWFkZEl0ZW1Gb3JVUkw6KE5TVVJMICopVVJMCit7CisgICAgV2ViSGlzdG9yeUl0ZW0g
KmVudHJ5ID0gW1tXZWJIaXN0b3J5SXRlbSBhbGxvY10gaW5pdFdpdGhVUkw6VVJMIHRpdGxlOm5p
bF07CisgICAgW2VudHJ5IF9zZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDpbTlNEYXRlIHRpbWVJ
bnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV1dOworICAgIFtzZWxmIGFkZEl0ZW06ZW50cnldOwor
ICAgIFtlbnRyeSByZWxlYXNlXTsKKyAgICByZXR1cm4gZW50cnk7Cit9CisKKy0gKHZvaWQpX2Fk
ZEl0ZW1Gb3JVUkw6KE5TVVJMICopVVJMIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlCit7CisgICAg
V2ViSGlzdG9yeUl0ZW0gKmVudHJ5ID0gW1tXZWJIaXN0b3J5SXRlbSBhbGxvY10gaW5pdFdpdGhV
Ukw6VVJMIHRpdGxlOnRpdGxlXTsKKyAgICBbZW50cnkgX3NldExhc3RWaXNpdGVkVGltZUludGVy
dmFsOltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXV07CisgICAgW3NlbGYg
YWRkSXRlbTplbnRyeV07CisgICAgW2VudHJ5IHJlbGVhc2VdOworfQorCistIChOU0NhbGVuZGFy
RGF0ZSopYWdlTGltaXREYXRlCit7CisgICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUgYWdlTGlt
aXREYXRlXTsKK30KKworLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5n
ICopVVJMU3RyaW5nCit7CisgICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUgY29udGFpbnNJdGVt
Rm9yVVJMU3RyaW5nOlVSTFN0cmluZ107Cit9CisKKy0gKHZvaWQpcmVtb3ZlSXRlbTooV2ViSGlz
dG9yeUl0ZW0gKillbnRyeQoreworICAgIGlmIChbX2hpc3RvcnlQcml2YXRlIHJlbW92ZUl0ZW06
ZW50cnldKSB7CisgICAgICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOldlYkhpc3RvcnlJdGVt
c1JlbW92ZWROb3RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXM6W05T
QXJyYXkgYXJyYXlXaXRoT2JqZWN0OmVudHJ5XV07CisgICAgfQorfQorCistICh2b2lkKXNldExh
c3RWaXNpdGVkVGltZUludGVydmFsOihOU1RpbWVJbnRlcnZhbCl0aW1lIGZvckl0ZW06KFdlYkhp
c3RvcnlJdGVtICopZW50cnkKK3sKKyAgICBbX2hpc3RvcnlQcml2YXRlIHNldExhc3RWaXNpdGVk
VGltZUludGVydmFsOnRpbWUgZm9ySXRlbTplbnRyeV07Cit9CisKKy0gKFdlYkhpc3RvcnlJdGVt
ICopX2l0ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5nICopVVJMU3RyaW5nCit7CisgICAgcmV0dXJu
IFtfaGlzdG9yeVByaXZhdGUgaXRlbUZvclVSTFN0cmluZzpVUkxTdHJpbmddOworfQorCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJIaXN0b3J5IChXZWJJbnRlcm5hbCkKKworLSAodm9pZClf
YWRkVmlzaXRlZExpbmtzVG9QYWdlR3JvdXA6KFdlYkNvcmU6OlBhZ2VHcm91cCYpZ3JvdXAKK3sK
KyAgICBbX2hpc3RvcnlQcml2YXRlIGFkZFZpc2l0ZWRMaW5rc1RvUGFnZUdyb3VwOmdyb3VwXTsK
K30KKworQGVuZApJbmRleDogV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJbnRlcm5hbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SW50ZXJuYWwuaAko
cmV2aXNpb24gMCkKKysrIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SW50ZXJuYWwuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV2ViSGlzdG9yeVByaXZh
dGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFBhZ2VHcm91cDsKK30KKwor
QGludGVyZmFjZSBXZWJIaXN0b3J5IChXZWJJbnRlcm5hbCkKKy0gKHZvaWQpX2FkZEl0ZW1Gb3JV
Ukw6KE5TVVJMICopVVJMIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlOworLSAodm9pZClfYWRkVmlz
aXRlZExpbmtzVG9QYWdlR3JvdXA6KFdlYkNvcmU6OlBhZ2VHcm91cCYpZ3JvdXA7CitAZW5kCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUludGVybmFs
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2Vi
S2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW1JbnRlcm5hbC5oCShyZXZpc2lvbiAzMDc3
NikKKysrIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbUludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDkgQEAKICAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKyNpbXBvcnQgIldlYkhpc3RvcnlJdGVtUHJpdmF0ZS5o
IgogCi0jaW1wb3J0IDxXZWJLaXQvV2ViQmFja0ZvcndhcmRMaXN0Lmg+Ci0jaW1wb3J0IDxXZWJL
aXQvV2ViSGlzdG9yeUl0ZW0uaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBIaXN0b3J5SXRlbTsKQEAgLTU2LDggKzU0LDYgQEAgZXh0ZXJuIHZvaWQgV0tOb3Rp
ZnlIaXN0b3J5SXRlbUNoYW5nZWQoKQogCiBAZW5kCiAKLUBpbnRlcmZhY2UgV2ViQmFja0Zvcndh
cmRMaXN0IChXZWJQcml2YXRlKQorQGludGVyZmFjZSBXZWJCYWNrRm9yd2FyZExpc3QgKFdlYklu
dGVybmFsKQogLSAodm9pZClfY2xvc2U7CiBAZW5kCi0KLQpJbmRleDogV2ViS2l0L21hYy9IaXN0
b3J5L1dlYkhpc3RvcnlQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9IaXN0b3J5
L1dlYkhpc3RvcnlQcml2YXRlLmgJKHJldmlzaW9uIDMwNzc2KQorKysgV2ViS2l0L21hYy9IaXN0
b3J5L1dlYkhpc3RvcnlQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsODgg
KzI2LDI3IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgotCiAjaW1wb3J0IDxXZWJLaXQvV2ViSGlzdG9yeS5oPgogCi1AY2xhc3MgV2ViSGlz
dG9yeUl0ZW07Ci1AY2xhc3MgTlNFcnJvcjsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLXR5cGVkZWYg
aW50NjRfdCBXZWJIaXN0b3J5RGF0ZUtleTsKLXR5cGVkZWYgSGFzaE1hcDxXZWJIaXN0b3J5RGF0
ZUtleSwgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiA+IERhdGVUb0VudHJpZXNNYXA7Ci0jZWxz
ZQotdHlwZWRlZiBzdHJ1Y3QgRGF0ZVRvRW50cmllc01hcCBEYXRlVG9FbnRyaWVzTWFwOwotI2Vu
ZGlmCi0KIC8qCiAgICAgQGNvbnN0YW50IFdlYkhpc3RvcnlJdGVtc0Rpc2NhcmRlZFdoaWxlTG9h
ZGluZ05vdGlmaWNhdGlvbiBQb3N0ZWQgZnJvbSBsb2FkRnJvbVVSTDplcnJvcjouICAKICAgICBU
aGlzIG5vdGlmaWNhdGlvbiBjb21lcyB3aXRoIGEgdXNlckluZm8gZGljdGlvbmFyeSB0aGF0IGNv
bnRhaW5zIHRoZSBhcnJheSBvZgotICAgIGl0ZW1zIGRpc2NhcmRlZCBkdWUgdG8gdGhlIGRhdGUg
bGltaXQgb3IgaXRlbSBsaW1pdC4gIFRoZSBrZXkgZm9yIHRoZSBhcnJheSBpcyBXZWJIaXN0b3J5
SXRlbXNLZXkuCisgICAgaXRlbXMgZGlzY2FyZGVkIGR1ZSB0byB0aGUgZGF0ZSBsaW1pdCBvciBp
dGVtIGxpbWl0LiBUaGUga2V5IGZvciB0aGUgYXJyYXkgaXMgV2ViSGlzdG9yeUl0ZW1zS2V5Lgog
Ki8KLS8vIEZJWE1FOiBUaGlzIG5vdGlmaWNhdGlvbiBzaG91bGQgYmVjb21lIEFQSSBpbiBXZWJI
aXN0b3J5LmgKKy8vIEZJWE1FOiBUaGlzIG5vdGlmaWNhdGlvbiBzaG91bGQgYmVjb21lIHB1Ymxp
YyBBUEkuCiBleHRlcm4gTlNTdHJpbmcgKldlYkhpc3RvcnlJdGVtc0Rpc2NhcmRlZFdoaWxlTG9h
ZGluZ05vdGlmaWNhdGlvbjsKIAotLy8gRklYTUU6IFRoZSBXZWJIaXN0b3J5UHJpdmF0ZSBpbnRl
cmZhY2Ugc2hvdWxkIGJlIGluIFdlYkhpc3RvcnlJbnRlcm5hbC5oIG9yIGluc2lkZSBXZWJIaXN0
b3J5Lm0KLUBpbnRlcmZhY2UgV2ViSGlzdG9yeVByaXZhdGUgOiBOU09iamVjdCB7Ci1AcHJpdmF0
ZQotICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKl9lbnRyaWVzQnlVUkw7Ci0gICAgRGF0ZVRvRW50
cmllc01hcCogX2VudHJpZXNCeURhdGU7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKl9vcmRlcmVkTGFz
dFZpc2l0ZWREYXlzOwotICAgIEJPT0wgaXRlbUxpbWl0U2V0OwotICAgIGludCBpdGVtTGltaXQ7
Ci0gICAgQk9PTCBhZ2VJbkRheXNMaW1pdFNldDsKLSAgICBpbnQgYWdlSW5EYXlzTGltaXQ7Ci19
Ci0KLS0gKHZvaWQpYWRkSXRlbTooV2ViSGlzdG9yeUl0ZW0gKillbnRyeTsKLS0gKHZvaWQpYWRk
SXRlbXM6KE5TQXJyYXkgKiluZXdFbnRyaWVzOwotLSAoQk9PTClyZW1vdmVJdGVtOihXZWJIaXN0
b3J5SXRlbSAqKWVudHJ5OwotLSAoQk9PTClyZW1vdmVJdGVtczooTlNBcnJheSAqKWVudHJpZXM7
Ci0tIChCT09MKXJlbW92ZUFsbEl0ZW1zOwotLSAodm9pZClzZXRMYXN0VmlzaXRlZFRpbWVJbnRl
cnZhbDooTlNUaW1lSW50ZXJ2YWwpdGltZSBmb3JJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWl0ZW07
Ci0KLS0gKE5TQXJyYXkgKilvcmRlcmVkTGFzdFZpc2l0ZWREYXlzOwotLSAoTlNBcnJheSAqKW9y
ZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25EYXk6KE5TQ2FsZW5kYXJEYXRlICopY2FsZW5kYXJEYXRl
OwotLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5nICopVVJMU3RyaW5n
OwotLSAoQk9PTCljb250YWluc1VSTDooTlNVUkwgKilVUkw7Ci0tIChXZWJIaXN0b3J5SXRlbSAq
KWl0ZW1Gb3JVUkw6KE5TVVJMICopVVJMOwotLSAoV2ViSGlzdG9yeUl0ZW0gKilpdGVtRm9yVVJM
U3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmluZzsKLQotLSAoQk9PTClsb2FkRnJvbVVSTDooTlNV
UkwgKilVUkwgY29sbGVjdERpc2NhcmRlZEl0ZW1zSW50bzooTlNNdXRhYmxlQXJyYXkgKilkaXNj
YXJkZWRJdGVtcyBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKLS0gKEJPT0wpc2F2ZVRvVVJMOihO
U1VSTCAqKVVSTCBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKLQotLSAoTlNDYWxlbmRhckRhdGUq
KV9hZ2VMaW1pdERhdGU7Ci0KLS0gKHZvaWQpc2V0SGlzdG9yeUl0ZW1MaW1pdDooaW50KWxpbWl0
OwotLSAoaW50KWhpc3RvcnlJdGVtTGltaXQ7Ci0tICh2b2lkKXNldEhpc3RvcnlBZ2VJbkRheXNM
aW1pdDooaW50KWxpbWl0OwotLSAoaW50KWhpc3RvcnlBZ2VJbkRheXNMaW1pdDsKLQotQGVuZAot
CiBAaW50ZXJmYWNlIFdlYkhpc3RvcnkgKFdlYlByaXZhdGUpCiAKIC8vIEZJWE1FOiBUaGUgZm9s
bG93aW5nIFNQSSBpcyB1c2VkIGJ5IFNhZmFyaS4gU2hvdWxkIGl0IGJlIG1hZGUgaW50byBwdWJs
aWMgQVBJPwogLSAoV2ViSGlzdG9yeUl0ZW0gKilfaXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcg
KilVUkxTdHJpbmc7CiAKLS8vIEZJWE1FOiBTYWZhcmkgZG9lc24ndCB1c2UgdGhlIGZvbGxvd2lu
ZyBTUEksIGFuZCBpdCdzIHVzZWQgaW4gV2ViS2l0IG9ubHkgaW5zaWRlIFdlYkhpc3RvcnkubS4K
LS8vIFNob3VsZCB3ZSBtb3ZlIGl0IGludG8gYSBGaWxlSW50ZXJuYWwgY2F0ZWdvcnkgaW5zaWRl
IFdlYkhpc3RvcnkubSwgb3IgZG8gd2UgbmVlZCBpdCBmb3Igb3RoZXIKLS8vIGNsaWVudHM/Ci0t
ICh2b2lkKXJlbW92ZUl0ZW06KFdlYkhpc3RvcnlJdGVtICopZW50cnk7CisvLyBGSVhNRTogbmVp
dGhlciBTYWZhcmkgbm9yIFdlYktpdCB1c2UgdGhlIGZvbGxvd2luZyBTUEkgLS0gZG8gd2Ugc3Rp
bGwgbmVlZCB0aGVtPwogLSAodm9pZClhZGRJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5Owot
LSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5nICopVVJMU3RyaW5nOwot
Ci0vLyBGSVhNRTogU2FmYXJpIGRvZXNuJ3QgdXNlIHRoZSBmb2xsb3dpbmcgU1BJLCBidXQgb3Ro
ZXIgV2ViS2l0IGNsYXNzZXMgZG8uIFNob3VsZCB3ZSBtb3ZlIGl0IGludG8KLS8vIGEgV2ViSGlz
dG9yeUludGVybmFsLmgsIG9yIGRvIHdlIG5lZWQgaXQgZm9yIG90aGVyIGNsaWVudHM/CiAtIChX
ZWJIaXN0b3J5SXRlbSAqKWFkZEl0ZW1Gb3JVUkw6KE5TVVJMICopVVJMOwotLy8gQ2hhbmdlIGRh
dGUgb24gZXhpc3RpbmcgaXRlbQotLSAodm9pZClzZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDoo
TlNUaW1lSW50ZXJ2YWwpdGltZSBmb3JJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWl0ZW07Ci0KLS8v
IEZJWE1FOiBuZWl0aGVyIFNhZmFyaSBub3IgV2ViS2l0IHVzZSB0aGUgZm9sbG93aW5nIFNQSSAt
LSBkbyB3ZSBzdGlsbCBuZWVkIGl0PwogLSAoTlNDYWxlbmRhckRhdGUqKWFnZUxpbWl0RGF0ZTsK
Ky0gKEJPT0wpY29udGFpbnNJdGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmluZzsK
Ky0gKHZvaWQpcmVtb3ZlSXRlbTooV2ViSGlzdG9yeUl0ZW0gKillbnRyeTsKKy0gKHZvaWQpc2V0
TGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6KE5TVGltZUludGVydmFsKXRpbWUgZm9ySXRlbTooV2Vi
SGlzdG9yeUl0ZW0gKilpdGVtOwogCiBAZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDMwNzc2KQorKysgV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYg
KzEwMiw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVv
dGEoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGRhdGFiYXNlTmFtZSk7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVWaXNpdGVkTGlua3MoKTsKKwogICAgIHZpcnR1
YWwgdm9pZCBkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpOwogCiBwcml2YXRlOgpJbmRleDogV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDMw
Nzc2KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDkgQEAKICNpbXBvcnQgIldlYkZyYW1lVmlldy5oIgog
I2ltcG9ydCAiV2ViSFRNTFZpZXcuaCIKICNpbXBvcnQgIldlYkhUTUxWaWV3UHJpdmF0ZS5oIgor
I2ltcG9ydCAiV2ViSGlzdG9yeUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRl
cmZhY2UuaCIKICNpbXBvcnQgIldlYk5TVVJMUmVxdWVzdEV4dHJhcy5oIgotI2ltcG9ydCAiV2Vi
U2VjdXJpdHlPcmlnaW5Qcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJTZWN1cml0eU9yaWdpbkludGVy
bmFsLmgiCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRl
UHJpdmF0ZS5oIgpAQCAtNDksNiArNDksNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRS
ZXF1ZXN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvSW50UmVjdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1BsYXRmb3JtU2NyZWVuLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU3RyaW5nLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgpAQCAtNDI1LDYgKzQyNiwxMSBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1CiAgICAgICAgIENhbGxV
SURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZnJhbWU6ZXhjZWVkZWREYXRh
YmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46ZGF0YWJhc2U6KSwga2l0KGZyYW1lKSwgd2ViT3Jp
Z2luLCAoTlNTdHJpbmcgKilkYXRhYmFzZU5hbWUpOwogICAgIFt3ZWJPcmlnaW4gcmVsZWFzZV07
CiB9CisgICAgCit2b2lkIFdlYkNocm9tZUNsaWVudDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoKQor
eworICAgIFtbV2ViSGlzdG9yeSBvcHRpb25hbFNoYXJlZEhpc3RvcnldIF9hZGRWaXNpdGVkTGlu
a3NUb1BhZ2VHcm91cDpbbV93ZWJWaWV3IHBhZ2VdLT5ncm91cCgpXTsKK30KIAogdm9pZCBXZWJD
aHJvbWVDbGllbnQ6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCkKIHsKSW5kZXg6IFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkocmV2aXNp
b24gMzA3NzYpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MjMsMTAgKzcyMyw4IEBAIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmZpbmFsU2V0dXBGb3IKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnVw
ZGF0ZUdsb2JhbEhpc3RvcnkoY29uc3QgS1VSTCYgdXJsKQogewogICAgIE5TVVJMICpjb2NvYVVS
TCA9IHVybDsKLSAgICBXZWJIaXN0b3J5SXRlbSAqZW50cnkgPSBbW1dlYkhpc3Rvcnkgb3B0aW9u
YWxTaGFyZWRIaXN0b3J5XSBhZGRJdGVtRm9yVVJMOmNvY29hVVJMXTsKICAgICBjb25zdCBTdHJp
bmcmIHBhZ2VUaXRsZSA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSktPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpLT50aXRsZSgpOwotICAgIGlmICghcGFnZVRpdGxlLmlzRW1wdHkoKSkKLSAgICAg
ICAgW2VudHJ5IHNldFRpdGxlOnBhZ2VUaXRsZV07CisgICAgW1tXZWJIaXN0b3J5IG9wdGlvbmFs
U2hhcmVkSGlzdG9yeV0gX2FkZEl0ZW1Gb3JVUkw6Y29jb2FVUkwgdGl0bGU6cGFnZVRpdGxlXTsK
IH0KICAKIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNob3VsZEdvVG9IaXN0b3J5SXRlbShI
aXN0b3J5SXRlbSogaXRlbSkgY29uc3QKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYktp
dC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMDgtMDMt
MDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZml4IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NTI2CisgICAgICAgICAgUkVHUkVTU0lPTjogaWZyYW1lcyBhcmUg
YWRkZWQgdG8gU2FmYXJpJ3MgSGlzdG9yeSBtZW51CisgICAgICAgICAgYnkgc2VwYXJhdGluZyB0
aGUgdmlzaXRlZCBsaW5rIG1hY2hpbmVyeSBmcm9tIGdsb2JhbCBoaXN0b3J5CisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ2hyb21l
Q2xpZW50Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcyk6IEFkZGVkIGEgY2FsbCB0byB0aGUgbmV3Cisg
ICAgICAgIFdlYkhpc3Rvcnk6OmFkZFZpc2l0ZWRMaW5rc1RvUGFnZUdyb3VwIGZ1bmN0aW9uLgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOiBBZGRlZCBwb3B1bGF0
ZVZpc2l0ZWRMaW5rcy4KKyAgICAgICAgQWxzbyBmaXhlZCB0aGUgd2ViVmlldyBmdW5jdGlvbiB0
byBiZSBub24tdmlydHVhbC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9i
YWxIaXN0b3J5KTogQ2hhbmdlZCB0byB1c2UgdGhlCisgICAgICAgIG5ldyBXZWJIaXN0b3J5Ojph
ZGRJdGVtIGZ1bmN0aW9uLgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OndlYkhpc3Rv
cnkpOiBDaGFuZ2VkIHRvIHJldHVybiBhIFdlYkhpc3RvcnkqLAorICAgICAgICB0aGVyZSdzIG5v
IHJlYXNvbiB0byBBZGRSZWYgdGhlIHJlc3VsdCBmcm9tIHRoaXMgZnVuY3Rpb24uCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaDogRGl0dG8uCisKKyAgICAg
ICAgKiBXZWJIaXN0b3J5LmNwcDogUmVtb3ZlZCBJV2ViSGlzdG9yeVByaXZhdGUgYW5kIF9XZWJD
b3JlSGlzdG9yeVByb3ZpZGVyLgorICAgICAgICAoV2ViSGlzdG9yeTo6UXVlcnlJbnRlcmZhY2Up
OiBSZW1vdmVkIElXZWJIaXN0b3J5UHJpdmF0ZS4KKyAgICAgICAgKHNoYXJlZEhpc3RvcnlTdG9y
YWdlKTogQWRkZWQuCisgICAgICAgIChXZWJIaXN0b3J5OjpzaGFyZWRIaXN0b3J5KTogQWRkZWQu
CisgICAgICAgIChXZWJIaXN0b3J5OjpvcHRpb25hbFNoYXJlZEhpc3RvcnkpOiBDaGFuZ2VkIHRv
IHVzZSBzaGFyZWRIaXN0b3J5KCkuCisgICAgICAgIChXZWJIaXN0b3J5OjpzZXRPcHRpb25hbFNo
YXJlZEhpc3RvcnkpOiBDaGFuZ2VkIHRvIHJlcXVpcmUgYSBXZWJIaXN0b3J5CisgICAgICAgIG9i
amVjdCwgbm90IGp1c3QgYW4gSVdlYkhpc3RvcnkuCisgICAgICAgIChXZWJIaXN0b3J5OjpyZW1v
dmVBbGxJdGVtcyk6IENhbGwgUGFnZUdyb3VwOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MuCisgICAg
ICAgIChXZWJIaXN0b3J5OjphZGRJdGVtKTogQ2hhbmdlZCBwYXJhbWV0ZXIgdHlwZXMgc2luY2Ug
dGhpcyBpcyBjYWxsZWQgd2l0aAorICAgICAgICBhcmd1bWVudHMgZnJvbSBXZWJDb3JlIC0tIGF0
IHNvbWUgcG9pbnQgdGhpcyBjb3VsZCBhbGxvdyBiZXR0ZXIgZWZmaWNpZW5jeS4KKyAgICAgICAg
KFdlYkhpc3Rvcnk6OnJlbW92ZUl0ZW1Gb3JVUkxTdHJpbmcpOiAgQ2FsbCBQYWdlR3JvdXA6OnJl
bW92ZUFsbFZpc2l0ZWRMaW5rcworICAgICAgICBpZiB0aGUgbGFzdCBVUkwgaXMgYmVpbmcgcmVt
b3ZlZC4KKyAgICAgICAgKGFkZFZpc2l0ZWRMaW5rVG9QYWdlR3JvdXApOiBBZGRlZC4gSGVscGVy
LiBBZGRzIGEgc2luZ2xlIGxpbmsgdG8gYSBncm91cCdzCisgICAgICAgIHZpc2l0ZWQgbGluayBz
ZXQuCisgICAgICAgIChXZWJIaXN0b3J5OjphZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cCk6IEFk
ZGVkLiBBZGRzIGFsbCBsaW5rcyB0byBhIGdyb3VwJ3MKKyAgICAgICAgdmlzaXRlZCBsaW5rLgor
ICAgICAgICAqIFdlYkhpc3RvcnkuaDogUmVtb3ZlZCBJV2ViSGlzdG9yeVByaXZhdGUuIFJlbW92
ZWQgb3B0aW9uYWxTaGFyZWRIaXN0b3J5SW50ZXJuYWwKKyAgICAgICAgYW5kIGFkZGVkIHNoYXJl
ZEhpc3RvcnkuIFJlcGxhY2VkIGFkZEl0ZW1Gb3JVUkwgYW5kIGNvbnRhaW5zSXRlbUZvclVSTFN0
cmluZyB3aXRoCisgICAgICAgIG5vbi12aXJ0dWFsIGFkZEl0ZW0gYW5kIGFkZFZpc2l0ZWRMaW5r
c1RvUGFnZUdyb3VwIGZ1bmN0aW9ucy4KKwogMjAwOC0wMy0wNCAgQWRhbSBSb2JlbiAgPGFyb2Jl
bkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViU2NyaXB0RGVidWdTZXJ2ZXIgY2xlYW51cApJbmRl
eDogV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dl
Ykhpc3RvcnkuY3BwCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYktpdC93aW4vV2ViSGlzdG9yeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDMwICszNSwxOSBAQAogI2luY2x1ZGUgIldlYk5vdGlm
aWNhdGlvbkNlbnRlci5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSA8
Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYkNv
cmVIaXN0b3J5Lmg+CiAjcHJhZ21hIHdhcm5pbmcoIHB1c2gsIDAgKQogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0tVUkwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Bh
Z2VHcm91cC5oPgogI3ByYWdtYSB3YXJuaW5nKCBwb3AgKQogCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKwogQ0ZTdHJpbmdSZWYgRGF0ZXNBcnJheUtleSA9IENGU1RSKCJXZWJIaXN0b3J5RGF0
ZXMiKTsKIENGU3RyaW5nUmVmIEZpbGVWZXJzaW9uS2V5ID0gQ0ZTVFIoIldlYkhpc3RvcnlGaWxl
VmVyc2lvbiIpOwogCi1jb25zdCBJSUQgSUlEX0lXZWJIaXN0b3J5UHJpdmF0ZSA9IHsgMHgzZGUw
NGU1OSwgMHg5M2Y5LCAweDQzNjksIHsgMHg4YiwgMHg0MywgMHg5NywgMHg2NCwgMHg1OCwgMHhk
NywgMHhlMywgMHgxOSB9IH07Ci0KICNkZWZpbmUgY3VycmVudEZpbGVWZXJzaW9uIDEKIAotY2xh
c3MgX1dlYkNvcmVIaXN0b3J5UHJvdmlkZXIgOiBwdWJsaWMgV2ViQ29yZTo6V2ViQ29yZUhpc3Rv
cnlQcm92aWRlciB7Ci1wdWJsaWM6Ci0gICAgX1dlYkNvcmVIaXN0b3J5UHJvdmlkZXIoSVdlYkhp
c3RvcnkqIGhpc3RvcnkpOwotICAgIH5fV2ViQ29yZUhpc3RvcnlQcm92aWRlcigpOwotCi0gICAg
dmlydHVhbCBib29sIGNvbnRhaW5zVVJMKGNvbnN0IFVDaGFyKiB1bmljb2RlLCB1bnNpZ25lZCBs
ZW5ndGgpOwotCi1wcml2YXRlOgotICAgIElXZWJIaXN0b3J5KiBtX2hpc3Rvcnk7Ci0gICAgSVdl
Ykhpc3RvcnlQcml2YXRlKiBtX2hpc3RvcnlQcml2YXRlOwotfTsKLQogc3RhdGljIGJvb2wgYXJl
RXF1YWxPckNsb3NlKGRvdWJsZSBkMSwgZG91YmxlIGQyKQogewogICAgIGRvdWJsZSBkaWZmID0g
ZDEtZDI7CkBAIC05Nyw4ICs4Niw2IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VVc2VySW5mbyhDRkRp
Y3Rpb25hcnkKIAogLy8gV2ViSGlzdG9yeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JV2ViSGlzdG9yeSogV2ViSGlz
dG9yeTo6bV9vcHRpb25hbFNoYXJlZEhpc3RvcnkgPSAwOwotCiBXZWJIaXN0b3J5OjpXZWJIaXN0
b3J5KCkKIDogbV9yZWZDb3VudCgwKQogLCBtX3ByZWZlcmVuY2VzKDApCkBAIC0xNTksOCArMTQ2
LDYgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJIaXN0b3J5OjpRdQogICAgICAgICAq
cHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYkhpc3RvcnkqPih0aGlzKTsKICAgICBlbHNlIGlm
IChJc0VxdWFsR1VJRChyaWlkLCBJSURfSVdlYkhpc3RvcnkpKQogICAgICAgICAqcHB2T2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SVdlYkhpc3RvcnkqPih0aGlzKTsKLSAgICBlbHNlIGlmIChJc0VxdWFs
R1VJRChyaWlkLCBJSURfSVdlYkhpc3RvcnlQcml2YXRlKSkKLSAgICAgICAgKnBwdk9iamVjdCA9
IHN0YXRpY19jYXN0PElXZWJIaXN0b3J5UHJpdmF0ZSo+KHRoaXMpOwogICAgIGVsc2UKICAgICAg
ICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7CiAKQEAgLTE4NCwzMiArMTY5LDMwIEBAIFVMT05HIFNU
RE1FVEhPRENBTExUWVBFIFdlYkhpc3Rvcnk6OlJlbGUKIAogLy8gSVdlYkhpc3RvcnkgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCitzdGF0aWMgaW5saW5lIENPTVB0cjxXZWJIaXN0b3J5PiYgc2hhcmVkSGlzdG9yeVN0b3Jh
Z2UoKQoreworICAgIHN0YXRpYyBDT01QdHI8V2ViSGlzdG9yeT4gc2hhcmVkSGlzdG9yeTsKKyAg
ICByZXR1cm4gc2hhcmVkSGlzdG9yeTsKK30KKworV2ViSGlzdG9yeSogV2ViSGlzdG9yeTo6c2hh
cmVkSGlzdG9yeSgpCit7CisgICAgcmV0dXJuIHNoYXJlZEhpc3RvcnlTdG9yYWdlKCkuZ2V0KCk7
Cit9CisKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSGlzdG9yeTo6b3B0aW9uYWxTaGFy
ZWRIaXN0b3J5KCAKICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElXZWJIaXN0b3J5KiogaGlzdG9y
eSkKIHsKLSAgICAqaGlzdG9yeSA9IG1fb3B0aW9uYWxTaGFyZWRIaXN0b3J5OwotICAgIGlmICht
X29wdGlvbmFsU2hhcmVkSGlzdG9yeSkKLSAgICAgICAgbV9vcHRpb25hbFNoYXJlZEhpc3Rvcnkt
PkFkZFJlZigpOwotCisgICAgKmhpc3RvcnkgPSBzaGFyZWRIaXN0b3J5KCk7CisgICAgaWYgKCpo
aXN0b3J5KQorICAgICAgICAoKmhpc3RvcnkpLT5BZGRSZWYoKTsKICAgICByZXR1cm4gU19PSzsK
IH0KIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJIaXN0b3J5OjpzZXRPcHRpb25hbFNo
YXJlZEhpc3RvcnkoIAogICAgIC8qIFtpbl0gKi8gSVdlYkhpc3RvcnkqIGhpc3RvcnkpCiB7Ci0g
ICAgaWYgKG1fb3B0aW9uYWxTaGFyZWRIaXN0b3J5KSB7Ci0gICAgICAgIG1fb3B0aW9uYWxTaGFy
ZWRIaXN0b3J5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1fb3B0aW9uYWxTaGFyZWRIaXN0b3J5ID0g
MDsgICAgICAgIAotICAgIH0KLQotICAgIF9XZWJDb3JlSGlzdG9yeVByb3ZpZGVyKiBjb3JlSGlz
dG9yeSA9IDA7Ci0gICAgbV9vcHRpb25hbFNoYXJlZEhpc3RvcnkgPSBoaXN0b3J5OwotICAgIGlm
IChoaXN0b3J5KSB7Ci0gICAgICAgIGhpc3RvcnktPkFkZFJlZigpOwotICAgICAgICBjb3JlSGlz
dG9yeSA9IG5ldyBfV2ViQ29yZUhpc3RvcnlQcm92aWRlcihoaXN0b3J5KTsKLSAgICB9Ci0gICAg
V2ViQ29yZTo6V2ViQ29yZUhpc3Rvcnk6OnNldEhpc3RvcnlQcm92aWRlcihjb3JlSGlzdG9yeSk7
Ci0KKyAgICBzaGFyZWRIaXN0b3J5U3RvcmFnZSgpLnF1ZXJ5KGhpc3RvcnkpOwogICAgIHJldHVy
biBTX09LOwogfQogCkBAIC00NjcsNiArNDUwLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBXZWJIaXN0b3J5OjpyZQogICAgIENGQXJyYXlSZW1vdmVBbGxWYWx1ZXMobV9kYXRlc1dpdGhF
bnRyaWVzLmdldCgpKTsKICAgICBDRkRpY3Rpb25hcnlSZW1vdmVBbGxWYWx1ZXMobV9lbnRyaWVz
QnlVUkwuZ2V0KCkpOwogCisgICAgUGFnZUdyb3VwOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsK
KwogICAgIHJldHVybiBwb3N0Tm90aWZpY2F0aW9uKGtXZWJIaXN0b3J5QWxsSXRlbXNSZW1vdmVk
Tm90aWZpY2F0aW9uKTsKIH0KIApAQCAtNjQ2LDI3ICs2MzEsMjcgQEAgSFJFU1VMVCBXZWJIaXN0
b3J5OjphZGRJdGVtKElXZWJIaXN0b3J5SQogICAgIHJldHVybiBocjsKIH0KIAotSFJFU1VMVCBX
ZWJIaXN0b3J5OjphZGRJdGVtRm9yVVJMKEJTVFIgdXJsLCBCU1RSIHRpdGxlKQordm9pZCBXZWJI
aXN0b3J5OjphZGRJdGVtKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsK
ICAgICBDT01QdHI8V2ViSGlzdG9yeUl0ZW0+IGl0ZW0oQWRvcHRDT00sIFdlYkhpc3RvcnlJdGVt
OjpjcmVhdGVJbnN0YW5jZSgpKTsKICAgICBpZiAoIWl0ZW0pCi0gICAgICAgIHJldHVybiBFX0ZB
SUw7CisgICAgICAgIHJldHVybjsKIAogICAgIFNZU1RFTVRJTUUgY3VycmVudFRpbWU7CiAgICAg
R2V0U3lzdGVtVGltZSgmY3VycmVudFRpbWUpOwogICAgIERBVEUgbGFzdFZpc2l0ZWQ7CiAgICAg
aWYgKCFTeXN0ZW1UaW1lVG9WYXJpYW50VGltZSgmY3VycmVudFRpbWUsICZsYXN0VmlzaXRlZCkp
Ci0gICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAgICAgIHJldHVybjsKIAotICAgIEhSRVNVTFQg
aHIgPSBpdGVtLT5pbml0V2l0aFVSTFN0cmluZyh1cmwsIHRpdGxlLCAwKTsKKyAgICBIUkVTVUxU
IGhyID0gaXRlbS0+aW5pdFdpdGhVUkxTdHJpbmcoQlN0cmluZyh1cmwuc3RyaW5nKCkpLCBCU3Ry
aW5nKHRpdGxlKSwgMCk7CiAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgaHIgPSBpdGVtLT5zZXRMYXN0VmlzaXRlZFRpbWVJbnRl
cnZhbChsYXN0VmlzaXRlZCk7IC8vIGFsc28gaW5jcmVtZW50cyB2aXNpdGVkQ291bnQKICAgICBp
ZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOworICAgICAgICByZXR1cm47CiAKLSAg
ICByZXR1cm4gYWRkSXRlbShpdGVtLmdldCgpKTsKKyAgICBhZGRJdGVtKGl0ZW0uZ2V0KCkpOwog
fQogCiBIUkVTVUxUIFdlYkhpc3Rvcnk6Oml0ZW1Gb3JVUkxTdHJpbmcoCkBAIC02OTQsMjIgKzY3
OSw2IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSGlzdG9yeTo6aXQKICAgICByZXR1
cm4gaXRlbUZvclVSTFN0cmluZyh1cmxTdHJpbmcuZ2V0KCksIGl0ZW0pOwogfQogCi1IUkVTVUxU
IFdlYkhpc3Rvcnk6OmNvbnRhaW5zSXRlbUZvclVSTFN0cmluZygKLSAgICAvKiBbaW5dICovIHZv
aWQqIHVybENGU3RyaW5nLAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQk9PTCogY29udGFpbnMp
Ci17Ci0gICAgSVdlYkhpc3RvcnlJdGVtKiBpdGVtID0gMDsKLSAgICBIUkVTVUxUIGhyOwotICAg
IGlmIChTVUNDRUVERUQoaHIgPSBpdGVtRm9yVVJMU3RyaW5nKChDRlN0cmluZ1JlZil1cmxDRlN0
cmluZywgJml0ZW0pKSkgewotICAgICAgICAqY29udGFpbnMgPSBUUlVFOwotICAgICAgICAvLyBp
dGVtRm9yVVJMU3RyaW5nIHJlZnMgdGhlIHJldHVybmVkIGl0ZW0sIHNvIHdlIG5lZWQgdG8gYmFs
YW5jZSB0aGF0IAotICAgICAgICBpdGVtLT5SZWxlYXNlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
ICpjb250YWlucyA9IEZBTFNFOwotCi0gICAgcmV0dXJuIGhyOwotfQotCiBIUkVTVUxUIFdlYkhp
c3Rvcnk6OnJlbW92ZUl0ZW1Gb3JVUkxTdHJpbmcoQ0ZTdHJpbmdSZWYgdXJsU3RyaW5nKQogewog
ICAgIElXZWJIaXN0b3J5SXRlbSogZW50cnkgPSAoSVdlYkhpc3RvcnlJdGVtKikgQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUobV9lbnRyaWVzQnlVUkwuZ2V0KCksIHVybFN0cmluZyk7CkBAIC03MTksNiAr
Njg4LDkgQEAgSFJFU1VMVCBXZWJIaXN0b3J5OjpyZW1vdmVJdGVtRm9yVVJMU3RyaQogICAgIEhS
RVNVTFQgaHIgPSByZW1vdmVJdGVtRnJvbURhdGVDYWNoZXMoZW50cnkpOwogICAgIENGRGljdGlv
bmFyeVJlbW92ZVZhbHVlKG1fZW50cmllc0J5VVJMLmdldCgpLCB1cmxTdHJpbmcpOwogCisgICAg
aWYgKCFDRkRpY3Rpb25hcnlHZXRDb3VudChtX2VudHJpZXNCeVVSTC5nZXQoKSkpCisgICAgICAg
IFBhZ2VHcm91cDo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7CisKICAgICByZXR1cm4gaHI7CiB9
CiAKQEAgLTg1NiwxMDEgKzgyOCwyMyBAQCBIUkVTVUxUIFdlYkhpc3Rvcnk6OmFnZUxpbWl0RGF0
ZShDRkFic29sCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUlXZWJIaXN0b3J5UHJpdmF0ZSogV2Vi
SGlzdG9yeTo6b3B0aW9uYWxTaGFyZWRIaXN0b3J5SW50ZXJuYWwoKQotewotICAgIGlmICghbV9v
cHRpb25hbFNoYXJlZEhpc3RvcnkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSVdlYkhpc3Rv
cnlQcml2YXRlKiBoaXN0b3J5UHJpdmF0ZTsKLSAgICBpZiAoRkFJTEVEKG1fb3B0aW9uYWxTaGFy
ZWRIaXN0b3J5LT5RdWVyeUludGVyZmFjZShJSURfSVdlYkhpc3RvcnlQcml2YXRlLCAodm9pZCoq
KSZoaXN0b3J5UHJpdmF0ZSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGhpc3RvcnlQcml2
YXRlLT5SZWxlYXNlKCk7IC8vIGRvbid0IGFkZCBhbiBhZGRpdGlvbmFsIHJlZiBmb3IgdGhpcyBp
bnRlcm5hbCBjYWxsCi0gICAgcmV0dXJuIGhpc3RvcnlQcml2YXRlOwotfQotCi0vLyBfV2ViQ29y
ZUhpc3RvcnlQcm92aWRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLV9XZWJDb3JlSGlzdG9yeVByb3ZpZGVyOjpfV2Vi
Q29yZUhpc3RvcnlQcm92aWRlcihJV2ViSGlzdG9yeSogaGlzdG9yeSkKLSAgICA6IG1faGlzdG9y
eShoaXN0b3J5KQotICAgICwgbV9oaXN0b3J5UHJpdmF0ZSgwKQorc3RhdGljIHZvaWQgYWRkVmlz
aXRlZExpbmtUb1BhZ2VHcm91cChjb25zdCB2b2lkKiBrZXksIGNvbnN0IHZvaWQqLCB2b2lkKiBj
b250ZXh0KQogewotfQorICAgIENGU3RyaW5nUmVmIHVybCA9IHN0YXRpY19jYXN0PENGU3RyaW5n
UmVmPihrZXkpOworICAgIFBhZ2VHcm91cCogZ3JvdXAgPSBzdGF0aWNfY2FzdDxQYWdlR3JvdXAq
Pihjb250ZXh0KTsKIAotX1dlYkNvcmVIaXN0b3J5UHJvdmlkZXI6On5fV2ViQ29yZUhpc3RvcnlQ
cm92aWRlcigpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaExldHRlcihjaGFyIGMs
IGNoYXIgbG93ZXJjYXNlTGV0dGVyKQotewotICAgIHJldHVybiAoYyB8IDB4MjApID09IGxvd2Vy
Y2FzZUxldHRlcjsKLX0KLQotc3RhdGljIGlubGluZSBib29sIG1hdGNoVW5pY29kZUxldHRlcihV
bmlDaGFyIGMsIFVuaUNoYXIgbG93ZXJjYXNlTGV0dGVyKQotewotICAgIHJldHVybiAoYyB8IDB4
MjApID09IGxvd2VyY2FzZUxldHRlcjsKKyAgICBDRkluZGV4IGxlbmd0aCA9IENGU3RyaW5nR2V0
TGVuZ3RoKHVybCk7CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IFVDaGFyKj4oQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHVybCkpOworICAgIGlm
IChjaGFyYWN0ZXJzKQorICAgICAgICBncm91cC0+YWRkVmlzaXRlZExpbmsoY2hhcmFjdGVycywg
bGVuZ3RoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgVmVjdG9yPFVDaGFyLCA1MTI+IGJ1ZmZlcihs
ZW5ndGgpOworICAgICAgICBDRlN0cmluZ0dldENoYXJhY3RlcnModXJsLCBDRlJhbmdlTWFrZSgw
LCBsZW5ndGgpLCByZWludGVycHJldF9jYXN0PFVuaUNoYXIqPihidWZmZXIuZGF0YSgpKSk7Cisg
ICAgICAgIGdyb3VwLT5hZGRWaXNpdGVkTGluayhidWZmZXIuZGF0YSgpLCBsZW5ndGgpOworICAg
IH0KIH0KIAotYm9vbCBfV2ViQ29yZUhpc3RvcnlQcm92aWRlcjo6Y29udGFpbnNVUkwoY29uc3Qg
VUNoYXIqIHVuaWNvZGUsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgV2ViSGlzdG9yeTo6YWRkVmlz
aXRlZExpbmtzVG9QYWdlR3JvdXAoUGFnZUdyb3VwJiBncm91cCkKIHsKLSAgICBjb25zdCBpbnQg
YnVmZmVyU2l6ZSA9IDEwMjQ7Ci0gICAgY29uc3QgVUNoYXIgKnVuaWNvZGVTdHIgPSB1bmljb2Rl
OwotICAgIFVDaGFyIHN0YXRpY1N0ckJ1ZmZlcltidWZmZXJTaXplXTsKLSAgICBVQ2hhciAqc3Ry
QnVmZmVyID0gMDsKLSAgICBib29sIG5lZWRUb0FkZFNsYXNoID0gZmFsc2U7Ci0KLSAgICBpZiAo
bGVuZ3RoID49IDYgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbMF0sICdo
JykgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbMV0sICd0JykgJiYKLSAg
ICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbMl0sICd0JykgJiYKLSAgICAgICAgbWF0
Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbM10sICdwJykgJiYKLSAgICAgICAgKHVuaWNvZGVbNF0g
PT0gJzonIAotICAgICAgICB8fCAobWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbNF0sICdzJykg
JiYgdW5pY29kZVs1XSA9PSAnOicpKSkgewotCi0gICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSB1
bmljb2RlWzRdID09ICc6JyA/IDUgOiA2OwotCi0gICAgICAgICAgICAvLyBza2lwIHBvc3NpYmxl
IGluaXRpYWwgdHdvIHNsYXNoZXMKLSAgICAgICAgICAgIGlmIChwb3MgKyAxIDwgbGVuZ3RoICYm
IHVuaWNvZGVbcG9zXSA9PSAnLycgJiYgdW5pY29kZVtwb3MgKyAxXSA9PSAnLycpCi0gICAgICAg
ICAgICAgICAgcG9zICs9IDI7Ci0KLSAgICAgICAgICAgIHdoaWxlIChwb3MgPCBsZW5ndGggJiYg
dW5pY29kZVtwb3NdICE9ICcvJykKLSAgICAgICAgICAgICAgICBwb3MrKzsKLQotICAgICAgICAg
ICAgaWYgKHBvcyA9PSBsZW5ndGgpCi0gICAgICAgICAgICAgICAgbmVlZFRvQWRkU2xhc2ggPSB0
cnVlOwotICAgIH0KLQotICAgIGlmIChuZWVkVG9BZGRTbGFzaCkgewotICAgICAgICBpZiAobGVu
Z3RoICsgMSA8PSBidWZmZXJTaXplKQotICAgICAgICAgICAgc3RyQnVmZmVyID0gc3RhdGljU3Ry
QnVmZmVyOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJCdWZmZXIgPSAoVUNoYXIqKW1h
bGxvYyhzaXplb2YoVUNoYXIpICogKGxlbmd0aCArIDEpKTsKLSAgICAgICAgbWVtY3B5KHN0ckJ1
ZmZlciwgdW5pY29kZSwgMiAqIGxlbmd0aCk7Ci0gICAgICAgIHN0ckJ1ZmZlcltsZW5ndGhdID0g
Jy8nOwotICAgICAgICBsZW5ndGgrKzsKLQotICAgICAgICB1bmljb2RlU3RyID0gc3RyQnVmZmVy
OwotICAgIH0KLQotICAgIGlmICghbV9oaXN0b3J5UHJpdmF0ZSkgewotICAgICAgICBpZiAoU1VD
Q0VFREVEKG1faGlzdG9yeS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lXZWJIaXN0b3J5UHJpdmF0ZSwg
KHZvaWQqKikmbV9oaXN0b3J5UHJpdmF0ZSkpKSB7Ci0gICAgICAgICAgICAvLyBkb24ndCBob2xk
IGEgcmVmIC0gd2UncmUgb3duZWQgYnkgSVdlYkhpc3RvcnkvSVdlYkhpc3RvcnlQcml2YXRlCi0g
ICAgICAgICAgICBtX2hpc3RvcnlQcml2YXRlLT5SZWxlYXNlKCk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoc3RyQnVmZmVyICE9IHN0YXRpY1N0ckJ1ZmZlcikKLSAgICAgICAg
ICAgICAgICBmcmVlKHN0ckJ1ZmZlcik7Ci0gICAgICAgICAgICBtX2hpc3RvcnlQcml2YXRlID0g
MDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIENG
U3RyaW5nUmVmIHN0ciA9IENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnNOb0NvcHkoTlVMTCwg
KGNvbnN0IFVuaUNoYXIqKXVuaWNvZGVTdHIsIGxlbmd0aCwga0NGQWxsb2NhdG9yTnVsbCk7Ci0g
ICAgQk9PTCByZXN1bHQgPSBGQUxTRTsKLSAgICBtX2hpc3RvcnlQcml2YXRlLT5jb250YWluc0l0
ZW1Gb3JVUkxTdHJpbmcoKHZvaWQqKXN0ciwgJnJlc3VsdCk7Ci0gICAgQ0ZSZWxlYXNlKHN0cik7
Ci0KLSAgICBpZiAoc3RyQnVmZmVyICE9IHN0YXRpY1N0ckJ1ZmZlcikKLSAgICAgICAgZnJlZShz
dHJCdWZmZXIpOwotCi0gICAgcmV0dXJuICEhcmVzdWx0OworICAgIENGRGljdGlvbmFyeUFwcGx5
RnVuY3Rpb24obV9lbnRyaWVzQnlVUkwuZ2V0KCksIGFkZFZpc2l0ZWRMaW5rVG9QYWdlR3JvdXAs
ICZncm91cCk7CiB9CkluZGV4OiBXZWJLaXQvd2luL1dlYkhpc3RvcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvd2luL1dlYkhpc3RvcnkuaAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJLaXQvd2lu
L1dlYkhpc3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDMxICszMiwyMCBA
QAogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIHszREUwNEU1
OS05M0Y5LTQzNjktOEI0My05NzY0NThEN0UzMTl9Ci1ERUZJTkVfR1VJRChJSURfSVdlYkhpc3Rv
cnlQcml2YXRlLCAweDNkZTA0ZTU5LCAweDkzZjksIDB4NDM2OSwgMHg4YiwgMHg0MywgMHg5Nywg
MHg2NCwgMHg1OCwgMHhkNywgMHhlMywgMHgxOSk7Ci0KLWludGVyZmFjZSBJV2ViSGlzdG9yeVBy
aXZhdGUgOiBwdWJsaWMgSVVua25vd24KLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgYWRkSXRlbUZvclVSTCgKLSAgICAgICAgLyogW2luXSAqLyBCU1RS
IHVybCwKLSAgICAgICAgLyogW2luXSAqLyBCU1RSIHRpdGxlKSA9IDA7Ci0gICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNvbnRhaW5zSXRlbUZvclVSTFN0cmluZygKLSAgICAg
ICAgLyogW2luXSAqLyB2b2lkKiB1cmxDRlN0cmluZywKLSAgICAgICAgLyogW3JldHZhbF1bb3V0
XSAqLyBCT09MKiBjb250YWlucykgPSAwOwotfTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBj
bGFzcyBLVVJMOworICAgIGNsYXNzIFBhZ2VHcm91cDsKKyAgICBjbGFzcyBTdHJpbmc7Cit9CiAK
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY2xhc3MgV2ViUHJlZmVyZW5jZXM7CiAKLWNsYXNz
IFdlYkhpc3RvcnkgOiBwdWJsaWMgSVdlYkhpc3RvcnksIElXZWJIaXN0b3J5UHJpdmF0ZQotewor
Y2xhc3MgV2ViSGlzdG9yeSA6IHB1YmxpYyBJV2ViSGlzdG9yeSB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFdlYkhpc3RvcnkqIGNyZWF0ZUluc3RhbmNlKCk7Ci1wcm90ZWN0ZWQ6Citwcml2YXRlOgog
ICAgIFdlYkhpc3RvcnkoKTsKICAgICB+V2ViSGlzdG9yeSgpOwogCkBAIC0xMTksMTEgKzEwOCwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gaW50KiBsaW1pdCk7CiAK
ICAgICAvLyBXZWJIaXN0b3J5Ci0gICAgc3RhdGljIElXZWJIaXN0b3J5UHJpdmF0ZSogb3B0aW9u
YWxTaGFyZWRIaXN0b3J5SW50ZXJuYWwoKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgYWRkSXRlbUZvclVSTChCU1RSIHVybCwgQlNUUiB0aXRsZSk7Ci0gICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNvbnRhaW5zSXRlbUZvclVSTFN0cmluZyh2b2lk
KiB1cmxDRlN0cmluZywgQk9PTCogY29udGFpbnMpOworICAgIHN0YXRpYyBXZWJIaXN0b3J5KiBz
aGFyZWRIaXN0b3J5KCk7CisgICAgdm9pZCBhZGRJdGVtKGNvbnN0IFdlYkNvcmU6OktVUkwmLCBj
b25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rc1RvUGFnZUdy
b3VwKFdlYkNvcmU6OlBhZ2VHcm91cCYpOwogCi1wcm90ZWN0ZWQ6Citwcml2YXRlOgogICAgIGVu
dW0gTm90aWZpY2F0aW9uVHlwZQogICAgIHsKICAgICAgICAga1dlYkhpc3RvcnlJdGVtc0FkZGVk
Tm90aWZpY2F0aW9uID0gMCwKQEAgLTE1MCwxMyArMTM5LDExIEBAIHByb3RlY3RlZDoKICAgICBC
U1RSIGdldE5vdGlmaWNhdGlvblN0cmluZyhOb3RpZmljYXRpb25UeXBlIG5vdGlmeVR5cGUpOwog
ICAgIEhSRVNVTFQgaXRlbUZvclVSTFN0cmluZyhDRlN0cmluZ1JlZiB1cmxTdHJpbmcsIElXZWJI
aXN0b3J5SXRlbSoqIGl0ZW0pOwogCi1wcm90ZWN0ZWQ6CiAgICAgVUxPTkcgbV9yZWZDb3VudDsK
ICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gbV9lbnRyaWVzQnlVUkw7CiAg
ICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBtX2RhdGVzV2l0aEVudHJpZXM7CiAgICAg
UmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBtX2VudHJpZXNCeURhdGU7CiAgICAgQ09NUHRy
PFdlYlByZWZlcmVuY2VzPiBtX3ByZWZlcmVuY2VzOwotICAgIHN0YXRpYyBJV2ViSGlzdG9yeSog
bV9vcHRpb25hbFNoYXJlZEhpc3Rvcnk7CiB9OwogCiAjZW5kaWYKSW5kZXg6IFdlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDMwNzc2KQor
KysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiV2ViRWxlbWVu
dFByb3BlcnR5QmFnLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJIaXN0
b3J5LmgiCiAjaW5jbHVkZSAiV2ViTXV0YWJsZVVSTFJlcXVlc3QuaCIKICNpbmNsdWRlICJXZWJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKQEAgLTM3LDYgKzM4LDcgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVM
b2FkUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dGZWF0dXJlcy5oPgogI3By
YWdtYSB3YXJuaW5nKHBvcCkKIApAQCAtNDk2LDYgKzQ5OCwxMSBAQCB2b2lkIFdlYkNocm9tZUNs
aWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1CiAgICAgfQogfQogCit2b2lkIFdlYkNocm9tZUNsaWVu
dDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoKQoreworICAgIFdlYkhpc3Rvcnk6OnNoYXJlZEhpc3Rv
cnkoKS0+YWRkVmlzaXRlZExpbmtzVG9QYWdlR3JvdXAobV93ZWJWaWV3LT5wYWdlKCktPmdyb3Vw
KCkpOworfQorCiBDT01QdHI8SVdlYlVJRGVsZWdhdGU+IFdlYkNocm9tZUNsaWVudDo6dWlEZWxl
Z2F0ZSgpCiB7CiAgICAgQ09NUHRyPElXZWJVSURlbGVnYXRlPiBkZWxlZ2F0ZTsKSW5kZXg6IFdl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMzA3
NzYpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYpOwogCi0gICAgdmlydHVhbCBXZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4g
bV93ZWJWaWV3OyB9CisgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CisK
KyAgICBXZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9CiAKIHBy
aXZhdGU6CiAgICAgQ09NUHRyPElXZWJVSURlbGVnYXRlPiB1aURlbGVnYXRlKCk7CkluZGV4OiBX
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNw
cAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvUGx1Z2luUGFja2FnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luVmll
dy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyUGFydC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VIYW5kbGUuaD4KICNwcmFnbWEgd2FybmluZyhwb3ApCiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtNDI4LDEwICs0MjksNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpmaW5pc2hlZExvYWRpCiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2Jh
bEhpc3RvcnkoY29uc3QgS1VSTCYgdXJsKQogewotICAgIENPTVB0cjxXZWJIaXN0b3J5PiBoaXN0
b3J5ID0gd2ViSGlzdG9yeSgpOwotICAgIGlmICghaGlzdG9yeSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGhpc3RvcnktPmFkZEl0ZW1Gb3JVUkwoQlN0cmluZyh1cmwuc3RyaW5nKCkpLCAwKTsgICAg
ICAgICAgICAgICAgIAorICAgIFdlYkhpc3Rvcnk6OnNoYXJlZEhpc3RvcnkoKS0+YWRkSXRlbSh1
cmwsIGNvcmUobV93ZWJGcmFtZSktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT50aXRsZSgp
KTsgICAgICAgICAgICAgICAgIAogfQogCiBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91
bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdApAQCAtNjk3LDE0ICs2OTUsMTAg
QEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVAogICAgIG1fcGx1Z2lu
VmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihwbHVnaW5XaWRnZXQpOwogfQogCi1DT01Q
dHI8V2ViSGlzdG9yeT4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OndlYkhpc3RvcnkoKSBjb25zdAor
V2ViSGlzdG9yeSogV2ViRnJhbWVMb2FkZXJDbGllbnQ6OndlYkhpc3RvcnkoKSBjb25zdAogewog
ICAgIGlmIChtX3dlYkZyYW1lICE9IG1fd2ViRnJhbWUtPndlYlZpZXcoKS0+dG9wTGV2ZWxGcmFt
ZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIElXZWJIaXN0b3J5UHJpdmF0ZSogaGlzdG9y
eUludGVybmFsID0gV2ViSGlzdG9yeTo6b3B0aW9uYWxTaGFyZWRIaXN0b3J5SW50ZXJuYWwoKTsg
Ly8gZG9lcyBub3QgYWRkIGEgcmVmCi0gICAgaWYgKCFoaXN0b3J5SW50ZXJuYWwpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgcmV0dXJuIENPTVB0cjxXZWJIaXN0b3J5PihRdWVyeSwgaGlzdG9y
eUludGVybmFsKTsKKyAgICByZXR1cm4gV2ViSGlzdG9yeTo6c2hhcmVkSGlzdG9yeSgpOwogfQpJ
bmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuaAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBwcml2
YXRlOgogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNyZWF0ZUZyYW1lKGNvbnN0IFdl
YkNvcmU6OktVUkwmLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkhUTUxG
cmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgcmVmZXJyZXIpOwogICAg
IHZvaWQgbG9hZFVSTEludG9DaGlsZChjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgV2ViQ29y
ZTo6U3RyaW5nJiByZWZlcnJlciwgV2ViRnJhbWUqIGNoaWxkRnJhbWUpOwogICAgIHZvaWQgcmVj
ZWl2ZWREYXRhKGNvbnN0IGNoYXIqLCBpbnQsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwotICAg
IENPTVB0cjxXZWJIaXN0b3J5PiB3ZWJIaXN0b3J5KCkgY29uc3Q7CisgICAgV2ViSGlzdG9yeSog
d2ViSGlzdG9yeSgpIGNvbnN0OwogCiAgICAgV2ViRnJhbWUqIG1fd2ViRnJhbWU7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19542</attachid>
            <date>2008-03-04 18:01:53 -0800</date>
            <delta_ts>2008-03-05 10:18:17 -0800</delta_ts>
            <desc>patch</desc>
            <filename>VisitedPatch.txt</filename>
            <type>text/plain</type>
            <size>147131</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDc3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAzIEBACisyMDA4LTAzLTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGZp
eCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUyNgorICAgICAgICAg
IFJFR1JFU1NJT046IGlmcmFtZXMgYXJlIGFkZGVkIHRvIFNhZmFyaSdzIEhpc3RvcnkgbWVudQor
ICAgICAgICAgIGJ5IHNlcGFyYXRpbmcgdGhlIHZpc2l0ZWQgbGluayBtYWNoaW5lcnkgZnJvbSBn
bG9iYWwgaGlzdG9yeQorCisgICAgICAgIFRoaXMgc2hvdWxkIGFsc28gbWFrZSBwYWdlIGxvYWRp
bmcgZmFzdGVyIGR1ZSB0byBtb3JlIGVmZmljaWVudCB2aXNpdGVkIGxpbmsgY29sb3JpbmcuCisK
KyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOiBVcGRhdGVkLgorICAgICAgICAqIFdlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGRlZCBQYWdlR3JvdXAuaC9jcHAsIHJlbW92ZWQgR2xv
YmFsSGlzdG9yeS5oL2NwcC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6IERpdHRvLiBBbHNvIHJlbW92ZWQgV2ViQ29yZUhpc3RvcnkuaC9tLgorCisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOiBVcGRhdGVkIGluY2x1ZGVzLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEVsZW1lbnRBbmRQc2V1ZG9TdGF0ZSk6IEVs
aW1pbmF0ZWQgY29kZSB0byBzZXQKKyAgICAgICAgY3VycmVudEVuY29kZWRVUkwuCisgICAgICAg
IChXZWJDb3JlOjpjaGVja1BzZXVkb1N0YXRlKTogTW92ZWQgbW9zdCBvZiB0aGUgY29kZSBpbnNp
ZGUgYSBuZXcKKyAgICAgICAgUGFnZUdyb3VwOjppc0xpbmtWaXNpdGVkIGZ1bmN0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KTogVGlnaHRlbmVkIGNvZGUgYSBiaXQgYnkgdXNpbmcKKyAgICAgICAgcmVmZXJlbmNlcyBhbmQg
b25seSBnZXR0aW5nIGNvbG9ycyB3aGVuIG5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OmdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKTogRGl0dG8uCisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDogUmVtb3ZlZCBFbmNvZGVkVVJMLCBtX2VuY29kZWRV
UkwsIGFuZCBzZXRFbmNvZGVkVVJMLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphdHRhY2gpOiBSZW1vdmVkIGNhbGwgdG8gc2V0RW5j
b2RlZFVSTC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRVUkwpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKTogRGl0dG8uCisK
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmFkZEJhY2tGb3J3YXJkSXRlbUNsaXBwZWRBdFRhcmdldCk6IENoYW5nZWQgY29k
ZSB0byB1c2UKKyAgICAgICAgZWFybHkgZXhpdCBpZGlvbSB0byBiZSBhIGxpdHRsZSBtb3JlIHJl
YWRhYmxlLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnVybHNNYXRjaEl0ZW0pOiBD
aGFuZ2UgdG8gdXNlIGEgcmVmZXJlbmNlIGZvciBzbGlnaHRseQorICAgICAgICBiZXR0ZXIgZWZm
aWNpZW5jeS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpnb1RvSXRlbSk6IFVzZSBl
YXJseSBleGl0IGlkaW9tIHRvIGJlIGEgbGl0dGxlIG1vcmUKKyAgICAgICAgcmVhZGFibGUuCisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvclN0YW5kYXJkTG9h
ZCk6IE1vdmVkIGhpc3RvcnkgY29kZSBiYWNrCisgICAgICAgIGluIGhlcmUgYW5kIGdvdCByaWQg
b2YgdGhlIGhlbHBlciBmdW5jdGlvbiB1cGRhdGVHbG9iYWxIaXN0b3J5LCByZXN0b3JpbmcgdGhl
CisgICAgICAgIGxvZ2ljIGJlZm9yZSByMzA1NDkuIEFsc28gYWRkZWQgYSBjYWxsIHRvIHRoZSBu
ZXcgYWRkVmlzaXRlZExpbmsgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6dXBkYXRlSGlzdG9yeUZvckNsaWVudFJlZGlyZWN0KTogQWRkZWQgY29kZSB0byBjYWxsCisg
ICAgICAgIGFkZFZpc2l0ZWRMaW5rIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6dXBkYXRlSGlzdG9yeUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbik6IFJlbW92ZWQgY29tbWVu
dC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yUmVsb2Fk
KTogUmVtb3ZlZCBjYWxsIHRvCisgICAgICAgIHVwZGF0ZUdsb2JhbEhpc3Rvcnk7IHdlIGNhbiBq
dXN0IGdvIHdpdGhvdXQgdXBkYXRpbmcgZ2xvYmFsIGhpc3Rvcnkgb3IKKyAgICAgICAgdmlzaXRl
ZCBsaW5rcyBoZXJlLCBhdCBsZWFzdCBmb3Igbm93LCBzaW5jZSBpdCdzIG5vdCBjbGVhciB0aGF0
IGEgcmVsb2FkCisgICAgICAgIGlzIGEgImhpc3RvcnkgZXZlbnQiLgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWRpcmVjdFdpdGhMb2NrZWRIaXN0b3J5
KTogTW92ZWQKKyAgICAgICAgaGlzdG9yeSBjb2RlIGJhY2sgd2hlcmUgaXQgd2FzLCBhbmQgYWRk
ZWQgdGhlIGNhbGwgdG8gYWRkVmlzaXRlZExpbmssIGp1c3QKKyAgICAgICAgYXMgaW4gdXBkYXRl
SGlzdG9yeUZvclN0YW5kYXJkTG9hZCBhYm92ZS4KKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2Fk
ZXIuaDogUmVtb3ZlZCB1cGRhdGVHbG9iYWxIaXN0b3J5IGZ1bmN0aW9uLgorCisgICAgICAgICog
cGFnZS9DaHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojpwb3B1bGF0
ZVZpc2l0ZWRMaW5rcyk6IEFkZGVkLiBFbXB0eSBwbGFjZWhvbGRlciBzbyB3ZQorICAgICAgICBk
b24ndCBoYXZlIHRvIGltcGxlbWVudCB0aGlzIGZvciBldmVyeSBwb3J0IGFsbCBhdCBvbmNlLgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwTG9hZERlZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVm
ZXJyZXIpOiBDaGFuZ2VkIHRvIHVzZSB0aGUKKyAgICAgICAgbmV3IFBhZ2VHcm91cCBjbGFzcy4K
KyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOiBBZGRlZCBwb3B1bGF0ZVZpc2l0ZWRMaW5r
cyBmdW5jdGlvbiwgdXNlZCB0byBmaWxsIHRoZQorICAgICAgICB2aXNpdGVkIGxpbmtzIHNldCBm
cm9tIHRoZSBnbG9iYWwgaGlzdG9yeSBhdCBhcHBsaWNhdGlvbiBzdGFydHVwIHRpbWUuCisKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6
OmZpbmQpOiBVcGRhdGVkIHRvIHVzZSB0aGUgbmV3IFBhZ2VHcm91cCBjbGFzcy4KKworICAgICAg
ICAqIHBhZ2UvR2xvYmFsSGlzdG9yeS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2Uvd2luL0ds
b2JhbEhpc3RvcnlXaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvbWFjL0dsb2JhbEhp
c3RvcnlNYWMubW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVIaXN0
b3J5Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVIaXN0b3J5Lm06
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vd2luL1dlYkNvcmVIaXN0b3J5LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV2ViQ29yZUhpc3RvcnkuaDogUmVtb3ZlZC4K
KworICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpQYWdl
KTogU2V0IG1fZ3JvdXAgdG8gMC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldEdyb3VwTmFt
ZSk6IFNldCB1cCBtX2dyb3VwLiBJZiB0aGUgcGFnZSBpcyBub3QgaW4gYW55CisgICAgICAgIGdy
b3VwLCBzZXQgaXQgdG8gMCBmb3Igbm93IHRvIHBvc3Rwb25lIHRoZSBjb3N0IG9mIGNyZWF0aW5n
IGEgZ3JvdXAuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjppbml0R3JvdXApOiBBZGRlZC4gU2V0
cyBtX2dyb3VwIHRvIHBvaW50IHRvIGEgc2luZ2xlLXBhZ2UKKyAgICAgICAgZ3JvdXA7IHVzZWQg
d2hlbiBnZXR0aW5nIGEgZ3JvdXAuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZW1vdmVBbGxW
aXNpdGVkTGlua3MpOiBBZGRlZC4gQ2FsbHMgcmVtb3ZlVmlzaXRlZExpbmtzCisgICAgICAgIG9u
IGFsbCBwYWdlIGdyb3Vwcy4KKyAgICAgICAgKiBwYWdlL1BhZ2UuaDogTW92ZWQgZW51bXMgaW5z
aWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZS4gUmVtb3ZlZCB0aGUKKyAgICAgICAgZnJhbWVOYW1l
c3BhY2UgZnVuY3Rpb24gYW5kIGluc3RlYWQgYWRkZWQgdGhlIGdyb3VwIGFuZCBncm91cFB0ciBm
dW5jdGlvbnMuCisKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6IEFkZGVkLiBDb250YWlu
cyBhbGwgdGhlIHZpc2l0ZWQgY29kZSBmcm9tIHRoZQorICAgICAgICBDU1NTdHlsZVNlbGVjdG9y
IGluIHRoZSBpc1Zpc2l0ZWRMaW5rIGZ1bmN0aW9uLCBidXQgbW9yZSBlZmZpY2llbnQgYmVjYXVz
ZQorICAgICAgICB3ZSBkb24ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBidWZmZXIuCisgICAg
ICAgICogcGFnZS9QYWdlR3JvdXAuaDogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OktVUkwpOiBaZXJvIG91dCBwb3J0RW5kUG9z
IGFuZCBwYXRoRW5kUG9zLgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6aW5pdCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6S1VSTDo6aGFzUGF0aCk6IFJlbW92ZSBjaGVjayBmb3IgbV9pc1Zh
bGlkLCB3aGljaCBpcyBub3QgbmVlZGVkCisgICAgICAgIGFueSBtb3JlIGJlY2F1c2UgYm90aCBw
YXRoRW5kUG9zIGFuZCBwb3J0RW5kUG9zIGFyZSBzZXQgdG8gMC4KKworICAgICAgICAqIHBsYXRm
b3JtL0tVUkwuaDogQWRkZWQgcGF0aFN0YXJ0LCBwYXRoRW5kLCBhbmQgcGF0aEFmdGVyTGFzdFNs
YXNoLCB3aGljaAorICAgICAgICBhbGxvdyB0aGUgdmlzaXRlZCBVUkwgY29kZSB0byB3b3JrIGVm
ZmljaWVudGx5IG9uIGEgS1VSTCB3aXRob3V0IHN0b3JpbmcgYQorICAgICAgICBjb3B5IG9mIHRo
ZSBVUkwgYXMgYSBDU1NTdHlsZVNlbGVjdG9yOjpFbmNvZGVkVVJMLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IFJlbW92ZWQgaGlzdG9yeUNvbnRhaW5z
LgorICAgICAgICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IFJlbW92ZWQg
dW5uZWVkZWQgaW5jbHVkZS4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwOiBSZW1vdmVkIGhpc3RvcnlDb250YWlucy4KKwogMjAwOC0wMy0wNCAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS5iYXNlLmV4cAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5l
eHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw2ICszNzgsNyBAQCBfX1pON1dlYkNvcmU0UGFnZTM3
c2V0SW5Mb3dRdWFsaXR5SW1hZ2VJCiBfX1pON1dlYkNvcmU0UGFnZTZnb0JhY2tFdgogX19aTjdX
ZWJDb3JlNFBhZ2U4Z29Ub0l0ZW1FUE5TXzExSGlzdG9yeUl0ZW1FTlNfMTNGcmFtZUxvYWRUeXBl
RQogX19aTjdXZWJDb3JlNFBhZ2U5Z29Gb3J3YXJkRXYKK19fWk43V2ViQ29yZTRQYWdlOWluaXRH
cm91cEV2CiBfX1pON1dlYkNvcmU0UGFnZUMxRVBOU18xMkNocm9tZUNsaWVudEVQTlNfMTdDb250
ZXh0TWVudUNsaWVudEVQTlNfMTJFZGl0b3JDbGllbnRFUE5TXzEwRHJhZ0NsaWVudEVQTlNfMTVJ
bnNwZWN0b3JDbGllbnRFCiBfX1pON1dlYkNvcmU0UGFnZUQxRXYKIF9fWk43V2ViQ29yZTVDYWNo
ZTExc2V0RGlzYWJsZWRFYgpAQCAtNTMzLDYgKzUzNCw4IEBAIF9fWk43V2ViQ29yZTlIVE1MTmFt
ZXM3c3JjQXR0ckUKIF9fWk43V2ViQ29yZTlIVE1MTmFtZXM4aHJlZkF0dHJFCiBfX1pON1dlYkNv
cmU5UGFnZUNhY2hlMTFzZXRDYXBhY2l0eUVpCiBfX1pON1dlYkNvcmU5UGFnZUNhY2hlMjdyZWxl
YXNlQXV0b3JlbGVhc2VkUGFnZXNOb3dFdgorX19aTjdXZWJDb3JlOVBhZ2VHcm91cDE0YWRkVmlz
aXRlZExpbmtFUEt0bQorX19aTjdXZWJDb3JlOVBhZ2VHcm91cDIxcmVtb3ZlQWxsVmlzaXRlZExp
bmtzRXYKIF9fWk43V2ViQ29yZTlTZWxlY3Rpb24yMmV4cGFuZFVzaW5nR3JhbnVsYXJpdHlFTlNf
MTVUZXh0R3JhbnVsYXJpdHlFCiBfX1pON1dlYkNvcmU5VGltZXJCYXNlNHN0b3BFdgogX19aTjdX
ZWJDb3JlOVRpbWVyQmFzZTVzdGFydEVkZApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NTUsMTAgKzI3NTUsNiBAQAogCQkJCT4N
CiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxicmlkZ2VcR2xv
YmFsSGlzdG9yeS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGFnZVxIaXN0b3J5LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0y
Nzk1LDYgKzI3OTEsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlR3JvdXAuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlR3JvdXAuaCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGx1
Z2luLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMjgzOCwxMCArMjg0Miw2IEBACiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdl
XHdpblxHbG9iYWxIaXN0b3J5V2luLmNwcCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8
RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXHdpblxQYWdlV2luLmNwcCINCiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KQEAgLTM1NjksMTQgKzM1NjksNiBAQAogCQkJCQk+DQogCQkJCTwv
RmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cd2luXFdl
YkNvcmVIaXN0b3J5LmNwcCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx3aW5cV2ViQ29yZUhpc3RvcnkuaCINCi0JCQkJ
CT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVx3aW5cV2ViQ29yZVRleHRSZW5kZXJlci5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4N
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMzA3NzYpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjQyLDE0ICsyNDIsMTIgQEAKIAkJMUFFODJGRUQwQ0FCMDdFRTAw
MjIzN0FFIC8qIEpTU1FMUmVzdWx0U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUU4MkZFQjBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRT
ZXQuaCAqLzsgfTsKIAkJMUFFODMwNDQwQ0FCMEVEMTAwMjIzN0FFIC8qIEpTRGF0YWJhc2VDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFF
ODMwNDIwQ0FCMEVEMTAwMjIzN0FFIC8qIEpTRGF0YWJhc2VDdXN0b20uY3BwICovOyB9OwogCQkx
QUYzMjY0NjBENzhCNTUzMDA2OEYwQzQgLyogQVhPYmplY3RDYWNoZU1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjMyNjQwMEQ3OEI1NTMwMDY4
RjBDNCAvKiBBWE9iamVjdENhY2hlTWFjLm1tICovOyB9OwotCQkxQUYzMjY0NzBENzhCNTUzMDA2
OEYwQzQgLyogR2xvYmFsSGlzdG9yeU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjMyNjQxMEQ3OEI1NTMwMDY4RjBDNCAvKiBHbG9iYWxIaXN0
b3J5TWFjLm1tICovOyB9OwogCQkxQUYzMjY0ODBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZUFY
T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUYzMjY0MjBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZUFYT2JqZWN0LmggKi87IH07CiAJCTFB
RjMyNjQ5MEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlQVhPYmplY3QubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUYzMjY0MzBENzhCNTUzMDA2OEYw
QzQgLyogV2ViQ29yZUFYT2JqZWN0Lm1tICovOyB9OwogCQkxQUYzMjY0QTBENzhCNTUzMDA2OEYw
QzQgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUYzMjY0NDBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZVNj
cmlwdERlYnVnZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMUFGMzI2NEIwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjMy
NjQ1MEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIubW0gKi87IH07CiAJ
CTFBRjMyNjc4MEQ3OEI5NDQwMDY4RjBDNCAvKiBBWE9iamVjdENhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUYzMjY3NjBENzhCOTQ0MDA2OEYw
QzQgLyogQVhPYmplY3RDYWNoZS5oICovOyB9OwogCQkxQUYzMjY3OTBENzhCOTQ0MDA2OEYwQzQg
LyogRWRpdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQUYzMjY3NzBENzhCOTQ0MDA2OEYwQzQgLyogRWRpdG9yQ2xpZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUFGMzI2N0IwRDc4
Qjk0RTAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjMyNjdBMEQ3OEI5NEUwMDY4RjBDNCAvKiBHbG9iYWxI
aXN0b3J5LmggKi87IH07CiAJCTFBRkUxMTdEMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRT
ZXRSb3dMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBRkUxMTdCMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCAq
LzsgfTsKIAkJMUFGRTExN0UwQ0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRkUxMTdD
MENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi87IH07CiAJCTFBRkUx
MTk5MENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGRTExOTcwQ0JGRkNDNDAw
MzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgKi87IH07CkBAIC0xNDM1LDYgKzE0
MzMsOCBAQAogCQk4NUZGMzE1QTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVGRjMxNTgw
QUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCAqLzsgfTsKIAkJODVGRjMxNUIw
QUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyog
RE9NS2V5Ym9hcmRFdmVudC5tbSAqLzsgfTsKIAkJOTI5MjY0NzcwQjYxRkM3MjAwQjQxRDM0IC8q
IEpTRG9jdW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTI5MjY0NzYwQjYxRkM3MjAwQjQxRDM0IC8qIEpTRG9jdW1lbnRDdXN0b20u
Y3BwICovOyB9OworCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJDMEQ3
OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OworCQk5MzAyQjBCRjBENzlGODJD
MDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwNUIyNEQw
OThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzA3MDVEODA5
RTBDOUI3MDBCMTdGRTQgLyogSlNDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDcwNUQ3MDlFMEM5QjcwMEIxN0ZFNCAvKiBKU0NvdW50
ZXIuY3BwICovOyB9OwogCQk5MzA3MDVEQTA5RTBDOUJGMDBCMTdGRTQgLyogSlNDb3VudGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA3MDVEOTA5
RTBDOUJGMDBCMTdGRTQgLyogSlNDb3VudGVyLmggKi87IH07CkBAIC0xNjQzLDcgKzE2NDMsNiBA
QAogCQk5M0YxOTk5RDA4MjQ1RTU5MDAxRTlBQkMgLyogRGVwcmVjYXRlZFZhbHVlTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2QzIwMkRF
M0I4NjAxRUE0MTIyIC8qIERlcHJlY2F0ZWRWYWx1ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOTk5RTA4MjQ1RTU5MDAxRTlBQkMg
LyogRGVwcmVjYXRlZFZhbHVlTGlzdEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NTNCMDJERTM3NTkwMUVBNDEyMiAvKiBEZXByZWNhdGVk
VmFsdWVMaXN0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTkzRjE5OUE4MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlRnJhbWVWaWV3Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODU0QzAy
REUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZUZyYW1lVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTkzRjE5OUE5MDgyNDVFNTkwMDFFOUFCQyAv
KiBXZWJDb3JlSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjU1MTdEQzIwMzFBQjU2MzAxQTgwMTgwIC8qIFdlYkNvcmVIaXN0b3J5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5QjMw
ODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1NTQwMkRFMzc1OTAxRUE0MTIyIC8q
IFdlYkNvcmVWaWV3RmFjdG9yeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTkzRjE5OUI4MDgyNDVFNTkwMDFFOUFCQyAvKiBTY3JvbGxCYXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0IyQUY4MDQ1
MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxCYXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOTlCQjA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29y
ZUtleWJvYXJkVUlNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCRTk4M0Q5NTA1MkEyRTBBMDA4OTJEODUgLyogV2ViQ29yZUtleWJvYXJkVUlNb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE2
NjcsNyArMTY2Niw2IEBACiAJCTkzRjE5QTlEMDgyNDVFNTkwMDFFOUFCQyAvKiBUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMjc4MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCAq
LzsgfTsKIAkJOTNGMTlBQjkwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzAzMDJERTQ0NzYwMTg2
MzVDQSAvKiBSYW5nZS5jcHAgKi87IH07CiAJCTkzRjE5QUJDMDgyNDVFNTkwMDFFOUFCQyAvKiBY
TUxUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjUyM0QzMDkwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTFRva2VuaXplci5jcHAgKi87IH07
Ci0JCTkzRjE5QUM4MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlSGlzdG9yeS5tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU1MTdEQzMwMzFBQjU2MzAx
QTgwMTgwIC8qIFdlYkNvcmVIaXN0b3J5Lm0gKi87IH07CiAJCTkzRjE5QUQ1MDgyNDVFNTkwMDFF
OUFCQyAvKiBSZW5kZXJUcmVlQXNUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTU1QTQyMDNENzI5MzIwMDg2MzVDRSAvKiBSZW5kZXJUcmVl
QXNUZXh0LmNwcCAqLzsgfTsKIAkJOTNGMTlBREMwODI0NUU1OTAwMUU5QUJDIC8qIFBsYXRmb3Jt
U2Nyb2xsQmFyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkM3QjJBRjkwNDUwODI0MTAwQTgwMDBGIC8qIFBsYXRmb3JtU2Nyb2xsQmFyTWFjLm1t
ICovOyB9OwogCQk5M0YxOUFFMTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRpb25zLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVGODA2OTcw
NTREOUY4NjAwOEJGNzc2IC8qIEJsb2NrRXhjZXB0aW9ucy5tbSAqLzsgfTsKQEAgLTQ1MjYsMTQg
KzQ1MjQsMTIgQEAKIAkJMUFFODJGRUIwQ0FCMDdFRTAwMjIzN0FFIC8qIEpTU1FMUmVzdWx0U2V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMUmVzdWx0U2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRTgzMDQyMENBQjBFRDEwMDIyMzdBRSAvKiBK
U0RhdGFiYXNlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRGF0YWJhc2VDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUYz
MjY0MDBENzhCNTUzMDA2OEYwQzQgLyogQVhPYmplY3RDYWNoZU1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFYT2JqZWN0Q2FjaGVNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRjMyNjQxMEQ3OEI1NTMwMDY4RjBDNCAvKiBHbG9iYWxI
aXN0b3J5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR2xv
YmFsSGlzdG9yeU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGMzI2NDIw
RDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVBWE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJDb3JlQVhPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUFGMzI2NDMwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVBWE9iamVjdC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVBWE9iamVjdC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGMzI2NDQwRDc4QjU1MzAwNjhGMEM0IC8q
IFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJDb3JlU2NyaXB0RGVidWdnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFGMzI2NDUwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVTY3JpcHREZWJ1Z2dl
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGMzI2NzYwRDc4Qjk0NDAwNjhG
MEM0IC8qIEFYT2JqZWN0Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QVhPYmplY3RDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUYzMjY3NzBE
NzhCOTQ0MDA2OEYwQzQgLyogRWRpdG9yQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEVkaXRvckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
QUYzMjY3QTBENzhCOTRFMDA2OEYwQzQgLyogR2xvYmFsSGlzdG9yeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHbG9iYWxIaXN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBRkUxMTdCMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFJlc3VsdFNldFJv
d0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUZFMTE3QzBDQkZGQjM2
MDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTUUxSZXN1bHRTZXRSb3dMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBRkUxMThDMENCRkZDNEUwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTUUxSZXN1bHRTZXRSb3dMaXN0LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2NjMsNiArNTY1OSw4IEBACiAJCTg1RkYzMTU4MEFB
RkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01LZXlib2FyZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTUtleWJvYXJkRXZlbnQu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkyOTI2NDc2MEI2MUZDNzIwMEI0MUQz
NCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0RvY3VtZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTMwNzA1OTAwOUUwQzc1ODAwQjE3RkU0IC8qIENTU1ByaW1pdGl2ZVZhbHVl
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291
cmNlY29kZTsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IENTU1ByaW1pdGl2ZVZhbHVlLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNzA1QzcwOUUwQzk1RjAwQjE3RkU0IC8q
IENvdW50ZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENvdW50ZXIuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzkxMyw4ICs3OTExLDYgQEAKIAkJRjUyM0QzMDQwMkRF
NDQ3NjAxODYzNUNBIC8qIFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDMwOTAyREU0NDc2MDE4NjM1Q0EgLyog
WE1MVG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFhNTFRva2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDMwQTAyREU0NDc2MDE4NjM1
Q0EgLyogWE1MVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFhNTFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjU1MTdEQzIwMzFBQjU2MzAxQTgwMTgw
IC8qIFdlYkNvcmVIaXN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJDb3JlSGlzdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNTUxN0RDMzAz
MUFCNTYzMDFBODAxODAgLyogV2ViQ29yZUhpc3RvcnkubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMub2JqYzsgcGF0aCA9IFdlYkNvcmVIaXN0b3J5Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUY1ODc4NEYwMDJERTM3NTkwMUVBNDEyMiAvKiBDdXJzb3JNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDdXJzb3JN
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwogCQlGNTg3ODUxNTAyREUzNzU5MDFFQTQxMjIgLyogRGVwcmVjYXRlZFB0ckxpc3RJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERl
cHJlY2F0ZWRQdHJMaXN0SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg1MTYwMkRFMzc1OTAxRUE0MTIyIC8qIERlcHJl
Y2F0ZWRQdHJMaXN0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXByZWNhdGVkUHRyTGlzdEltcGwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTgzNTYsOCAr
ODM1Miw2IEBACiAJCQkJODRCMkIyNEYwNTZCRjE1RjAwRDJCNzcxIC8qIFNTTEtleUdlbmVyYXRv
ck1hYy5tbSAqLywKIAkJCQk2NTgyQTE1NTA5OTk5RDZEMDBCRUVCNkQgLyogU3lzdGVtVGltZU1h
Yy5jcHAgKi8sCiAJCQkJNTFERjZEN0YwQjkyQTE4RTAwQzJEQzg1IC8qIFRocmVhZENoZWNrLm1t
ICovLAotCQkJCUY1NTE3REMyMDMxQUI1NjMwMUE4MDE4MCAvKiBXZWJDb3JlSGlzdG9yeS5oICov
LAotCQkJCUY1NTE3REMzMDMxQUI1NjMwMUE4MDE4MCAvKiBXZWJDb3JlSGlzdG9yeS5tICovLAog
CQkJCTg0QjJCMUY3MDU2QkVGM0EwMEQyQjc3MSAvKiBXZWJDb3JlS2V5R2VuZXJhdG9yLmggKi8s
CiAJCQkJODRCMkIxRjgwNTZCRUYzQTAwRDJCNzcxIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IubSAq
LywKIAkJCQk5MzREOUJBNjBCOEMxMTc1MDA3QjQyQTkgLyogV2ViQ29yZU5TU3RyaW5nRXh0cmFz
LmggKi8sCkBAIC04NDIzLDcgKzg0MTcsNiBAQAogCQkJCTY1QTIxNDgzMDk3QTNGNTMwMEI5MDUw
QSAvKiBGcmFtZVRyZWUuaCAqLywKIAkJCQk2NUNCRkVGNzA5NzRGNjA3MDAxREFDMjUgLyogRnJh
bWVWaWV3LmNwcCAqLywKIAkJCQk2NUNCRkVGODA5NzRGNjA3MDAxREFDMjUgLyogRnJhbWVWaWV3
LmggKi8sCi0JCQkJMUFGMzI2N0EwRDc4Qjk0RTAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnkuaCAq
LywKIAkJCQlCQzk0RDE1MDBDMjc1QzhCMDA2QkM2MTcgLyogSGlzdG9yeS5jcHAgKi8sCiAJCQkJ
QkM5NEQxNTEwQzI3NUM4QjAwNkJDNjE3IC8qIEhpc3RvcnkuaCAqLywKIAkJCQlCQzk0RDE1MjBD
Mjc1QzhCMDA2QkM2MTcgLyogSGlzdG9yeS5pZGwgKi8sCkBAIC04NDM0LDYgKzg0MjcsOCBAQAog
CQkJCTkzNUM0NzYyMDlBQzRDRTYwMEE2QUFCNCAvKiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzLmggKi8sCiAJCQkJNjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICovLAog
CQkJCTY1QTIxNDY3MDk3QTMyOTEwMEI5MDUwQSAvKiBQYWdlLmggKi8sCisJCQkJOTMwMkIwQkMw
RDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8sCisJCQkJOTMwMkIwQkUwRDc5Rjgy
QzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovLAogCQkJCTY1RDFDMUM5MDk5MzJCMjIwMDBDQjMy
NCAvKiBQbHVnaW4uaCAqLywKIAkJCQlCQ0VDMDFCQTBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVu
LmNwcCAqLywKIAkJCQlCQ0VDMDFCQjBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmggKi8sCkBA
IC05NzMzLDcgKzk3MjgsNiBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
IAkJCQkxQUYzMjY0MDBENzhCNTUzMDA2OEYwQzQgLyogQVhPYmplY3RDYWNoZU1hYy5tbSAqLywK
LQkJCQkxQUYzMjY0MTBENzhCNTUzMDA2OEYwQzQgLyogR2xvYmFsSGlzdG9yeU1hYy5tbSAqLywK
IAkJCQkxQUYzMjY0MjBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZUFYT2JqZWN0LmggKi8sCiAJ
CQkJMUFGMzI2NDMwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVBWE9iamVjdC5tbSAqLywKIAkJ
CQkxQUYzMjY0NDBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmggKi8s
CkBAIC0xNDEwOCw3ICsxNDEwMiw2IEBACiAJCQkJQjI1NTk5NkYwRDAwRDhCQTAwQkI4MjVDIC8q
IFdLVGFibGVUcmFuc2ZlckZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU0RUM2MTEwOTc3
NzhGNTAwREFCNTJDIC8qIFdlYkNvcmVGcmFtZUJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNGMTk5QTgwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVGcmFtZVZpZXcuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTkzRjE5OUE5MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlSGlzdG9yeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5QzIwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVLZXlH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUJCMDgyNDVFNTkwMDFFOUFCQyAv
KiBXZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNEQ5QkE3MEI4
QzExNzUwMDdCNDJBOSAvKiBXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCBpbiBIZWFkZXJzICovLApA
QCAtMTQyMjksNyArMTQyMjIsNyBAQAogCQkJCTFBRjMyNjQ4MEQ3OEI1NTMwMDY4RjBDNCAvKiBX
ZWJDb3JlQVhPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjMyNjRBMEQ3OEI1NTMwMDY4
RjBDNCAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjMy
Njc4MEQ3OEI5NDQwMDY4RjBDNCAvKiBBWE9iamVjdENhY2hlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkxQUYzMjY3QjBENzhCOTRFMDA2OEYwQzQgLyogR2xvYmFsSGlzdG9yeS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNBODNFNTAwRDdDRTFFOTAwMzQyMUE4IC8qIEpTQ2xpcGJvYXJkLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzZDNDlGNDBEN0RCQTA1MDBGRkE1NTggLyogSlNJbWFnZUNvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzM0NTI0NDBEN0UwMEVBMDAxNjU3NEEgLyog
SlNSR0JDb2xvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTcyNCw3ICsxNTcxNyw2IEBACiAJCQkJ
QjI1NTk5NkQwRDAwRDhCQTAwQkI4MjVDIC8qIFdLU3BvdExpZ2h0RmlsdGVyLm0gaW4gU291cmNl
cyAqLywKIAkJCQlCMjU1OTk3MDBEMDBEOEJBMDBCQjgyNUMgLyogV0tUYWJsZVRyYW5zZmVyRmls
dGVyLm0gaW4gU291cmNlcyAqLywKIAkJCQk2NTRFQzYxMjA5Nzc3OEY1MDBEQUI1MkMgLyogV2Vi
Q29yZUZyYW1lQnJpZGdlLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlBQzgwODI0NUU1OTAw
MUU5QUJDIC8qIFdlYkNvcmVIaXN0b3J5Lm0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFFNTA4
MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZUtleUdlbmVyYXRvci5tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTM0RDlCQTUwQjhDMTE2QjAwN0I0MkE5IC8qIFdlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUREMDVGRTBFMEI4QkEzQzYwMDlBQ0RGRSAvKiBXZWJDb3JlT2Jq
Q0V4dHJhcy5jIGluIFNvdXJjZXMgKi8sCkBAIC0xNTgyNSw5ICsxNTgxNyw5IEBACiAJCQkJQTc3
OTc5MjgwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3NjZGMzUzMEQ2QkRFMzUwMEFCRERCMyAvKiBKU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGMzI2NDYwRDc4QjU1MzAwNjhGMEM0IC8qIEFYT2Jq
ZWN0Q2FjaGVNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQUYzMjY0NzBENzhCNTUzMDA2OEYw
QzQgLyogR2xvYmFsSGlzdG9yeU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBRjMyNjQ5MEQ3
OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlQVhPYmplY3QubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QUYzMjY0QjBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0E4M0U0RjBEN0NFMUU5MDAzNDIxQTggLyogSlNDbGlwYm9h
cmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBODNFNTIwRDdDRTIwNTAwMzQyMUE4IC8qIEpT
Q2xpcGJvYXJkQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNkM0OUYzMEQ3REJBMDUw
MEZGQTU1OCAvKiBKU0ltYWdlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBX
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDE0IEBACiAj
aW5jbHVkZSAiRm9udFZhbHVlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKLSNpbmNsdWRlICJHbG9iYWxIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSFRNTERvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAj
aW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQYWlyLmgiCiAjaW5jbHVkZSAiUmVjdC5oIgog
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0yMzIsNyArMjMzLDYgQEAgQ1NTU3R5bGVTaGVl
dCogQ1NTU3R5bGVTZWxlY3Rvcjo6bV92aWV3UwogQ1NTU3R5bGVTaGVldCAqQ1NTU3R5bGVTZWxl
Y3Rvcjo6bV9zdmdTaGVldCA9IDA7CiAjZW5kaWYKIAotc3RhdGljIENTU1N0eWxlU2VsZWN0b3I6
OkVuY29kZWRVUkwqIGN1cnJlbnRFbmNvZGVkVVJMID0gMDsKIHN0YXRpYyBQc2V1ZG9TdGF0ZSBw
c2V1ZG9TdGF0ZTsKIAogc3RhdGljIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHNjcmVlbkV2
YWwoKQpAQCAtMzE2LDI4ICszMTYsMTAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0KCkK
ICAgICBtX21lZGl1bSA9IDA7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c2V0RW5jb2Rl
ZFVSTChjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgS1VSTCB1ID0gdXJsOwotCi0gICAgdS5zZXRR
dWVyeShTdHJpbmcoKSk7Ci0gICAgdS5zZXRSZWYoU3RyaW5nKCkpOwotICAgIG1fZW5jb2RlZFVS
TC5maWxlID0gdS5zdHJpbmcoKTsKLSAgICBpbnQgcG9zID0gbV9lbmNvZGVkVVJMLmZpbGUucmV2
ZXJzZUZpbmQoJy8nKTsKLSAgICBtX2VuY29kZWRVUkwucGF0aCA9IG1fZW5jb2RlZFVSTC5maWxl
OwotICAgIGlmIChwb3MgPiAwKSB7Ci0gICAgICAgIG1fZW5jb2RlZFVSTC5wYXRoLnRydW5jYXRl
KHBvcyk7Ci0gICAgICAgIG1fZW5jb2RlZFVSTC5wYXRoLmFwcGVuZCgnLycpOwotICAgIH0KLSAg
ICB1LnNldFBhdGgoU3RyaW5nKCkpOwotICAgIG1fZW5jb2RlZFVSTC5wcmVmaXggPSB1LnN0cmlu
ZygpOwotfQotCiBDU1NTdHlsZVNlbGVjdG9yOjp+Q1NTU3R5bGVTZWxlY3RvcigpCiB7CiAgICAg
ZGVsZXRlIG1fbWVkaXVtOwotICAgIDo6ZGVsZXRlIG1fcm9vdERlZmF1bHRTdHlsZTsKLQorICAg
IGRlbGV0ZSBtX3Jvb3REZWZhdWx0U3R5bGU7CiAgICAgZGVsZXRlIG1fYXV0aG9yU3R5bGU7CiAg
ICAgZGVsZXRlIG1fdXNlclN0eWxlOwogfQpAQCAtNTM3LDcgKzUxOSw2IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6aW5pdEVsZW1lbnRBbmRQc2UKICAgICAgICAgbV9zdHlsZWRFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCk7CiAgICAgZWxzZQogICAgICAg
ICBtX3N0eWxlZEVsZW1lbnQgPSAwOwotICAgIGN1cnJlbnRFbmNvZGVkVVJMID0gJm1fZW5jb2Rl
ZFVSTDsKICAgICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb1Vua25vd247CiB9CiAKQEAgLTU2OCw4MSAr
NTQ5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0Rm9yU3R5bGVSZXNvbAogICAgIG1f
Zm9udERpcnR5ID0gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZpbmRTbGFzaERvdERv
dFNsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQotewotICAgIHVu
c2lnbmVkIGxvb3BMaW1pdCA9IGxlbmd0aCA8IDQgPyAwIDogbGVuZ3RoIC0gMzsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kpIHsKLSAgICAgICAgaWYgKGNoYXJh
Y3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcuJyAmJiBjaGFyYWN0ZXJz
W2kgKyAyXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgM10gPT0gJy8nKQotICAgICAgICAgICAg
cmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQg
ZmluZFNsYXNoU2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIGlu
dCBwb3NpdGlvbikKLXsKLSAgICB1bnNpZ25lZCBsb29wTGltaXQgPSBsZW5ndGggPCAyID8gMCA6
IGxlbmd0aCAtIDE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gcG9zaXRpb247IGkgPCBsb29wTGlt
aXQ7ICsraSkgewotICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVy
c1tpICsgMV0gPT0gJy8nKQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVy
biAtMTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZmluZFNsYXNoRG90U2xhc2goY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgdW5zaWduZWQgbG9vcExpbWl0
ID0gbGVuZ3RoIDwgMyA/IDAgOiBsZW5ndGggLSAyOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsb29wTGltaXQ7ICsraSkgewotICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycg
JiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcvJykK
LSAgICAgICAgICAgIHJldHVybiBpOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBjb250YWluc0NvbG9uU2xhc2hTbGFzaChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHVuc2lnbmVkIGxvb3BMaW1pdCA9IGxlbmd0
aCA8IDMgPyAwIDogbGVuZ3RoIC0gMjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9v
cExpbWl0OyArK2kpCi0gICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICc6JyAmJiBjaGFyYWN0
ZXJzW2kgKyAxXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy8nKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBjbGVh
blBhdGgoVmVjdG9yPFVDaGFyLCA1MTI+JiBwYXRoKQotewotICAgIGludCBwb3M7Ci0gICAgd2hp
bGUgKChwb3MgPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCkp
KSAhPSAtMSkgewotICAgICAgICBpbnQgcHJldiA9IHJldmVyc2VGaW5kKHBhdGguZGF0YSgpLCBw
YXRoLnNpemUoKSwgJy8nLCBwb3MgLSAxKTsKLSAgICAgICAgLy8gZG9uJ3QgcmVtb3ZlIHRoZSBo
b3N0LCBpLmUuIGh0dHA6Ly9mb28ub3JnLy4uL2Zvby5odG1sCi0gICAgICAgIGlmIChwcmV2IDwg
MCB8fCAocHJldiA+IDMgJiYgcGF0aFtwcmV2IC0gMl0gPT0gJzonICYmIHBhdGhbcHJldiAtIDFd
ID09ICcvJykpCi0gICAgICAgICAgICBwYXRoLnJlbW92ZShwb3MsIDMpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBwYXRoLnJlbW92ZShwcmV2LCBwb3MgLSBwcmV2ICsgMyk7Ci0gICAgfQot
Ci0gICAgLy8gRG9uJ3QgcmVtb3ZlICIvLyIgZnJvbSBhbiBhbmNob3IgaWRlbnRpZmllci4gLXJq
dwotICAgIC8vIFNldCByZWZQb3MgdG8gLTIgdG8gbWVhbiAiSSBoYXZlbid0IGxvb2tlZCBmb3Ig
dGhlIGFuY2hvciB5ZXQiLgotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gd2FzdGUgYSBmdW5jdGlv
biBjYWxsIG9uIHRoZSBzZWFyY2ggZm9yIHRoZSB0aGUgYW5jaG9yCi0gICAgLy8gaW4gdGhlIHZh
c3QgbWFqb3JpdHkgb2YgY2FzZXMgd2hlcmUgdGhlcmUgaXMgbm8gIi8vIiBpbiB0aGUgcGF0aC4K
LSAgICBwb3MgPSAwOwotICAgIGludCByZWZQb3MgPSAtMjsKLSAgICB3aGlsZSAoKHBvcyA9IGZp
bmRTbGFzaFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgcG9zKSkgIT0gLTEpIHsKLSAg
ICAgICAgaWYgKHJlZlBvcyA9PSAtMikKLSAgICAgICAgICAgIHJlZlBvcyA9IGZpbmQocGF0aC5k
YXRhKCksIHBhdGguc2l6ZSgpLCAnIycpOwotICAgICAgICBpZiAocmVmUG9zID4gMCAmJiBwb3Mg
Pj0gcmVmUG9zKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKHBvcyA9PSAwIHx8
IHBhdGhbcG9zIC0gMV0gIT0gJzonKQotICAgICAgICAgICAgcGF0aC5yZW1vdmUocG9zKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcG9zICs9IDI7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6
IFdlIGRvbid0IHdhbnQgdG8gcmVtb3ZlICIvLi8iIGZyb20gYW4gYW5jaG9yIGlkZW50aWZpZXIg
ZWl0aGVyLgotICAgIHdoaWxlICgocG9zID0gZmluZFNsYXNoRG90U2xhc2gocGF0aC5kYXRhKCks
IHBhdGguc2l6ZSgpKSkgIT0gLTEpCi0gICAgICAgIHBhdGgucmVtb3ZlKHBvcywgMik7Ci19Ci0K
LXN0YXRpYyB2b2lkIGNoZWNrUHNldWRvU3RhdGUoRWxlbWVudCAqZSwgYm9vbCBjaGVja1Zpc2l0
ZWQgPSB0cnVlKQorc3RhdGljIHZvaWQgY2hlY2tQc2V1ZG9TdGF0ZShFbGVtZW50KiBlLCBib29s
IGNoZWNrVmlzaXRlZCA9IHRydWUpCiB7CiAgICAgaWYgKCFlLT5pc0xpbmsoKSkgewogICAgICAg
ICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb05vbmU7CkBAIC02NzEsMjYgKzU3OCwyMSBAQCBzdGF0aWMg
dm9pZCBjaGVja1BzZXVkb1N0YXRlKEVsZW1lbnQgKmUsCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IGF0dHItPmNoYXJhY3RlcnMoKTsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyLT5sZW5ndGgoKTsKKyAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBlLT5kb2N1bWVudCgpOwogCi0gICAgaWYgKGNvbnRhaW5zQ29sb25TbGFzaFNsYXNoKGNo
YXJhY3RlcnMsIGxlbmd0aCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFN0cmFuZ2UgdG8gbm90IGNs
ZWFuIHRoZSBwYXRoIGp1c3QgYmVhY2F1c2UgaXQgaGFzICI6Ly8iIGluIGl0LgotICAgICAgICBw
c2V1ZG9TdGF0ZSA9IGhpc3RvcnlDb250YWlucyhjaGFyYWN0ZXJzLCBsZW5ndGgpID8gUHNldWRv
VmlzaXRlZCA6IFBzZXVkb0xpbms7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1l
KCk7CisgICAgaWYgKCFmcmFtZSkgeworICAgICAgICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb0xpbms7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8VUNoYXIsIDUxMj4gYnVmZmVy
OwotICAgIGlmIChsZW5ndGggJiYgY2hhcmFjdGVyc1swXSA9PSAnLycpIHsKLSAgICAgICAgYnVm
ZmVyLmFwcGVuZChjdXJyZW50RW5jb2RlZFVSTC0+cHJlZml4LmNoYXJhY3RlcnMoKSwgY3VycmVu
dEVuY29kZWRVUkwtPnByZWZpeC5sZW5ndGgoKSk7Ci0gICAgfSBlbHNlIGlmIChsZW5ndGggJiYg
Y2hhcmFjdGVyc1swXSA9PSAnIycpIHsKLSAgICAgICAgYnVmZmVyLmFwcGVuZChjdXJyZW50RW5j
b2RlZFVSTC0+ZmlsZS5jaGFyYWN0ZXJzKCksIGN1cnJlbnRFbmNvZGVkVVJMLT5maWxlLmxlbmd0
aCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBidWZmZXIuYXBwZW5kKGN1cnJlbnRFbmNvZGVk
VVJMLT5wYXRoLmNoYXJhY3RlcnMoKSwgY3VycmVudEVuY29kZWRVUkwtPnBhdGgubGVuZ3RoKCkp
OworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkgeworICAg
ICAgICBwc2V1ZG9TdGF0ZSA9IFBzZXVkb0xpbms7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotICAgIGNsZWFuUGF0aChidWZm
ZXIpOwotICAgIHBzZXVkb1N0YXRlID0gaGlzdG9yeUNvbnRhaW5zKGJ1ZmZlci5kYXRhKCksIGJ1
ZmZlci5zaXplKCkpID8gUHNldWRvVmlzaXRlZCA6IFBzZXVkb0xpbms7CisKKyAgICBwc2V1ZG9T
dGF0ZSA9IHBhZ2UtPmdyb3VwKCkuaXNMaW5rVmlzaXRlZChkb2N1bWVudCwgKmF0dHIpID8gUHNl
dWRvVmlzaXRlZCA6IFBzZXVkb0xpbms7CiB9CiAKIC8vIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBw
YXJzaW5nIG50aC1hcmd1bWVudHMKQEAgLTgyOSwxMiArNzMxLDE0IEBAIGJvb2wgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICAgICAgICAgICAgICAgICAgbWFwcGVkQXR0
cnNNYXRjaCA9IHMtPm1hcHBlZEF0dHJpYnV0ZXMoKS0+bWFwc0VxdWl2YWxlbnQobV9zdHlsZWRF
bGVtZW50LT5tYXBwZWRBdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgICAgIGlmIChtYXBwZWRB
dHRyc01hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgbGlua3NNYXRjaCA9IHRydWU7
CisKICAgICAgICAgICAgICAgICAgICAgaWYgKHMtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGUgdmlzaXRlZCBzdGF0
ZSBtYXRjaGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgbGlua0NvbG9yID0gbV9l
bGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IENvbG9yIHZpc2l0ZWRDb2xvciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtD
b2xvcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBzZXVkb1N0YXRlID09IFBzZXVk
b1Vua25vd24pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHNldWRvU3RhdGUgPT0gUHNl
dWRvVW5rbm93bikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbG9yJiBs
aW5rQ29sb3IgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbG9yJiB2aXNpdGVkQ29sb3IgPSBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGVja1BzZXVkb1N0YXRlKG1fZWxlbWVudCwgc3R5bGUtPnBzZXVkb1N0YXRlKCkgIT0g
UHNldWRvQW55TGluayB8fCBsaW5rQ29sb3IgIT0gdmlzaXRlZENvbG9yKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtzTWF0Y2ggPSAocHNl
dWRvU3RhdGUgPT0gc3R5bGUtPnBzZXVkb1N0YXRlKCkpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNTEzNCw4ICs1MDM4LDggQEAgQ29sb3IgQ1NTU3R5
bGVTZWxlY3Rvcjo6Z2V0Q29sb3JGcm9tUHJpbQogICAgICAgICBpZiAoaWRlbnQgPT0gQ1NTX1ZB
TF9fV0VCS0lUX1RFWFQpCiAgICAgICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PnRleHRDb2xvcigpOwogICAgICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NfVkFMX19XRUJLSVRf
TElOSykgewotICAgICAgICAgICAgQ29sb3IgbGlua0NvbG9yID0gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT5saW5rQ29sb3IoKTsKLSAgICAgICAgICAgIENvbG9yIHZpc2l0ZWRDb2xvciA9IG1fZWxl
bWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpOworICAgICAgICAgICAgY29uc3Qg
Q29sb3ImIGxpbmtDb2xvciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7Cisg
ICAgICAgICAgICBjb25zdCBDb2xvciYgdmlzaXRlZENvbG9yID0gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT52aXNpdGVkTGlua0NvbG9yKCk7CiAgICAgICAgICAgICBpZiAobGlua0NvbG9yID09IHZp
c2l0ZWRDb2xvcikKICAgICAgICAgICAgICAgICBjb2wgPSBsaW5rQ29sb3I7CiAgICAgICAgICAg
ICBlbHNlIHsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDMwNzc2KQorKysg
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTQg
KzExMCw2IEBAIHB1YmxpYzoKIAogICAgICAgICBib29sIHN0cmljdFBhcnNpbmc7CiAKLSAgICAg
ICAgc3RydWN0IEVuY29kZWRVUkwgewotICAgICAgICAgICAgU3RyaW5nIHByZWZpeDsgLy8gcHJv
dG9jb2wsIGhvc3QsIGV0Yy4KLSAgICAgICAgICAgIFN0cmluZyBwYXRoOwotICAgICAgICAgICAg
U3RyaW5nIGZpbGU7Ci0gICAgICAgIH0gbV9lbmNvZGVkVVJMOwotCi0gICAgICAgIHZvaWQgc2V0
RW5jb2RlZFVSTChjb25zdCBLVVJMJiB1cmwpOwotCiAgICAgICAgIC8vIEdpdmVuIGEgQ1NTIGtl
eXdvcmQgaW4gdGhlIHJhbmdlICh4eC1zbWFsbCB0byAtd2Via2l0LXh4eC1sYXJnZSksIHRoaXMg
ZnVuY3Rpb24gd2lsbCByZXR1cm4KICAgICAgICAgLy8gdGhlIGNvcnJlY3QgZm9udCBzaXplIHNj
YWxlZCByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGRlZmF1bHQgKG1lZGl1bSkuCiAgICAgICAgIGZs
b2F0IGZvbnRTaXplRm9yS2V5d29yZChpbnQga2V5d29yZCwgYm9vbCBxdWlya3NNb2RlLCBib29s
IG1vbm9zcGFjZSkgY29uc3Q7CkBAIC0yNTAsMTEgKzI0Miw4IEBAIHB1YmxpYzoKICAgICAgICAg
Ym9vbCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlczsKIAogICAgICAgICBSZWZQdHI8Q1NTRm9u
dFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKLQogICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiBtX3NlbGVjdG9yQXR0cnM7Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qPiBtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzOwot
ICAgICAgICAKKyAgICAgICAgVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4gbV9h
ZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsczsgICAgICAgIAogICAgICAgICBWZWN0b3I8TWVk
aWFRdWVyeVJlc3VsdCo+IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKIAog
ICAgICAgICB2b2lkIGFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSopOwpJbmRleDogV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyMTUsNyArMTIxNSw2IEBAIHZvaWQgRG9jdW1lbnQ6OmF0dGFjaCgpCiAg
ICAgICAgIGlmIChTZXR0aW5ncyogZG9jU2V0dGluZ3MgPSBzZXR0aW5ncygpKQogICAgICAgICAg
ICAgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzID0gZG9jU2V0dGluZ3MtPmF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkKCk7CiAgICAgICAgIG1fc3R5bGVTZWxlY3RvciA9IG5ldyBDU1NTdHlsZVNl
bGVjdG9yKHRoaXMsIHVzZXJTdHlsZVNoZWV0KCksIG1fc3R5bGVTaGVldHMuZ2V0KCksIG1fbWFw
cGVkRWxlbWVudFNoZWV0LmdldCgpLCAhaW5Db21wYXRNb2RlKCksIG1hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyk7Ci0gICAgICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0RW5jb2RlZFVSTChtX3VybCk7
CiAgICAgfQogCiAgICAgcmVjYWxjU3R5bGUoRm9yY2UpOwpAQCAtMTYzNiw5ICsxNjM1LDYgQEAg
dm9pZCBEb2N1bWVudDo6c2V0VVJMKGNvbnN0IEtVUkwmIHVybCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV91cmwgPSB1cmw7Ci0gICAgaWYgKG1fc3R5bGVTZWxlY3RvcikKLSAgICAgICAgbV9z
dHlsZVNlbGVjdG9yLT5zZXRFbmNvZGVkVVJMKHVybCk7Ci0KICAgICBtX2lzQWxsb3dlZFRvTG9h
ZExvY2FsUmVzb3VyY2VzID0gc2hvdWxkQmVBbGxvd2VkVG9Mb2FkTG9jYWxSZXNvdXJjZXMoKTsK
ICB9CiAgCkBAIC0yMjA4LDcgKzIyMDQsNiBAQCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZVNl
bGVjdG9yKCkKICAgICAvLyBDcmVhdGUgYSBuZXcgc3R5bGUgc2VsZWN0b3IKICAgICBkZWxldGUg
bV9zdHlsZVNlbGVjdG9yOwogICAgIG1fc3R5bGVTZWxlY3RvciA9IG5ldyBDU1NTdHlsZVNlbGVj
dG9yKHRoaXMsIHVzZXJTdHlsZVNoZWV0KCksIG1fc3R5bGVTaGVldHMuZ2V0KCksIG1fbWFwcGVk
RWxlbWVudFNoZWV0LmdldCgpLCAhaW5Db21wYXRNb2RlKCksIG1hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcyk7Ci0gICAgbV9zdHlsZVNlbGVjdG9yLT5zZXRFbmNvZGVkVVJMKG1fdXJsKTsKICAgICBt
X2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0b3IgPSB0cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQAogI2luY2x1ZGUgIk1haW5SZXNv
dXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIK
KyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNp
bmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCkBAIC0z
ODQ5LDIxICszODUwLDI1IEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEZyYW1lTG9hZGVyOjpj
cmUKIAogdm9pZCBGcmFtZUxvYWRlcjo6YWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0
KGJvb2wgZG9DbGlwKQogewotICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQot
ICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIEZyYW1lKiBtYWluRnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsKLSAg
ICAgICAgICAgIEFTU0VSVChtYWluRnJhbWUpOwotICAgICAgICAgICAgRnJhbWVMb2FkZXIqIGZy
YW1lTG9hZGVyID0gbWFpbkZyYW1lLT5sb2FkZXIoKTsKLQotICAgICAgICAgICAgaWYgKCFmcmFt
ZUxvYWRlci0+bV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uICYmIHBhZ2UtPmJhY2tGb3J3YXJk
TGlzdCgpLT5lbnRyaWVzKCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgICAgICBmcmFtZUxv
YWRlci0+bV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBtX2NsaWVudC0+ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpOwotICAgICAgICAgICAgfQor
ICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IGZyYW1l
TG9hZGVyLT5jcmVhdGVIaXN0b3J5SXRlbVRyZWUobV9mcmFtZSwgZG9DbGlwKTsKLSAgICAgICAg
ICAgIExPRyhCYWNrRm9yd2FyZCwgIldlYkNvcmVCYWNrRm9yd2FyZCAtIEFkZGluZyBiYWNrZm9y
d2FyZCBpdGVtICVwIGZvciBmcmFtZSAlcyIsIGl0ZW0uZ2V0KCksIGRvY3VtZW50TG9hZGVyKCkt
PnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHBhZ2UtPmJhY2tG
b3J3YXJkTGlzdCgpLT5hZGRJdGVtKGl0ZW0pOwotICAgICAgICB9CisgICAgaWYgKGRvY3VtZW50
TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEZyYW1lKiBtYWluRnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsKKyAgICBBU1NFUlQobWFp
bkZyYW1lKTsKKyAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBtYWluRnJhbWUtPmxvYWRl
cigpOworCisgICAgaWYgKCFmcmFtZUxvYWRlci0+bV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9u
ICYmIHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5lbnRyaWVzKCkuc2l6ZSgpID09IDEpIHsKKyAg
ICAgICAgZnJhbWVMb2FkZXItPm1fZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbiA9IHRydWU7Cisg
ICAgICAgIG1fY2xpZW50LT5kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCk7CisgICAgfQorCisg
ICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gZnJhbWVMb2FkZXItPmNyZWF0ZUhpc3RvcnlJ
dGVtVHJlZShtX2ZyYW1lLCBkb0NsaXApOworICAgIExPRyhCYWNrRm9yd2FyZCwgIldlYkNvcmVC
YWNrRm9yd2FyZCAtIEFkZGluZyBiYWNrZm9yd2FyZCBpdGVtICVwIGZvciBmcmFtZSAlcyIsIGl0
ZW0uZ2V0KCksIGRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgp
KTsKKyAgICBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+YWRkSXRlbShpdGVtKTsKIH0KIAogUGFz
c1JlZlB0cjxIaXN0b3J5SXRlbT4gRnJhbWVMb2FkZXI6OmNyZWF0ZUhpc3RvcnlJdGVtVHJlZShG
cmFtZSogdGFyZ2V0RnJhbWUsIGJvb2wgY2xpcEF0VGFyZ2V0KQpAQCAtNDExMSwxMyArNDExNiwx
MiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkSXRlbShIaXN0b3J5SXRlbSogCiAvLyBXYWxrIHRo
ZSBmcmFtZSB0cmVlIGFuZCBlbnN1cmUgdGhhdCB0aGUgVVJMcyBtYXRjaCB0aGUgVVJMcyBpbiB0
aGUgaXRlbS4KIGJvb2wgRnJhbWVMb2FkZXI6OnVybHNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qIGl0
ZW0pIGNvbnN0CiB7Ci0gICAgS1VSTCBjdXJyZW50VVJMID0gZG9jdW1lbnRMb2FkZXIoKS0+dXJs
KCk7Ci0gICAgCisgICAgY29uc3QgS1VSTCYgY3VycmVudFVSTCA9IGRvY3VtZW50TG9hZGVyKCkt
PnVybCgpOwogICAgIGlmICghZXF1YWxJZ25vcmluZ1JlZihjdXJyZW50VVJMLCBpdGVtLT51cmwo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGNvbnN0IEhpc3RvcnlJdGVt
VmVjdG9yJiBjaGlsZEl0ZW1zID0gaXRlbS0+Y2hpbGRyZW4oKTsKLSAgICAKKwogICAgIHVuc2ln
bmVkIHNpemUgPSBjaGlsZEl0ZW1zLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIEZyYW1lKiBjaGlsZEZyYW1lID0gbV9mcmFtZS0+dHJl
ZSgpLT5jaGlsZChjaGlsZEl0ZW1zW2ldLT50YXJnZXQoKSk7CkBAIC00MTM4LDE3ICs0MTQyLDE5
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiAKICAgICAvLyA8cmRh
cjovL3Byb2JsZW0vMzk1MTI4Mz4gY2FuIHZpZXcgcGFnZXMgZnJvbSB0aGUgYmFjay9mb3J3YXJk
IGNhY2hlIHRoYXQgc2hvdWxkIGJlIGRpc2FsbG93ZWQgYnkgUGFyZW50YWwgQ29udHJvbHMKICAg
ICAvLyBVbHRpbWF0ZWx5LCBoaXN0b3J5IGl0ZW0gbmF2aWdhdGlvbnMgc2hvdWxkIGdvIHRocm91
Z2ggdGhlIHBvbGljeSBkZWxlZ2F0ZS4gVGhhdCdzIGNvdmVyZWQgaW46CiAgICAgLy8gPHJkYXI6
Ly9wcm9ibGVtLzM5Nzk1Mzk+IGJhY2svZm9yd2FyZCBjYWNoZSBuYXZpZ2F0aW9ucyBzaG91bGQg
Y29uc3VsdCBwb2xpY3kgZGVsZWdhdGUKLSAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBh
Z2UoKSkKLSAgICAgICAgaWYgKG1fY2xpZW50LT5zaG91bGRHb1RvSGlzdG9yeUl0ZW0odGFyZ2V0
SXRlbSkpIHsKLSAgICAgICAgICAgIEJhY2tGb3J3YXJkTGlzdCogYmZMaXN0ID0gcGFnZS0+YmFj
a0ZvcndhcmRMaXN0KCk7Ci0gICAgICAgICAgICBIaXN0b3J5SXRlbSogY3VycmVudEl0ZW0gPSBi
Zkxpc3QtPmN1cnJlbnRJdGVtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFNldCB0
aGUgQkYgY3Vyc29yIGJlZm9yZSBjb21taXQsIHdoaWNoIGxldHMgdGhlIHVzZXIgcXVpY2tseSBj
bGljayBiYWNrL2ZvcndhcmQgYWdhaW4uCi0gICAgICAgICAgICAvLyAtIHBsdXMsIGl0IG9ubHkg
bWFrZXMgc2Vuc2UgZm9yIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wZXJhdGlvbiB0aHJvdWdoIHRo
ZSBmcmFtZXRyZWUsCi0gICAgICAgICAgICAvLyBhcyBvcHBvc2VkIHRvIGhhcHBlbmluZyBmb3Ig
c29tZS9vbmUgb2YgdGhlIHBhZ2UgY29tbWl0cyB0aGF0IG1pZ2h0IGhhcHBlbiBzb29uCi0gICAg
ICAgICAgICBiZkxpc3QtPmdvVG9JdGVtKHRhcmdldEl0ZW0pOwotICAgICAgICAgICAgcmVjdXJz
aXZlR29Ub0l0ZW0odGFyZ2V0SXRlbSwgY3VycmVudEl0ZW0sIHR5cGUpOwotICAgICAgICB9Cisg
ICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIW1fY2xpZW50LT5zaG91bGRHb1RvSGlzdG9yeUl0ZW0odGFyZ2V0
SXRlbSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNldCB0aGUgQkYgY3Vyc29yIGJlZm9y
ZSBjb21taXQsIHdoaWNoIGxldHMgdGhlIHVzZXIgcXVpY2tseSBjbGljayBiYWNrL2ZvcndhcmQg
YWdhaW4uCisgICAgLy8gLSBwbHVzLCBpdCBvbmx5IG1ha2VzIHNlbnNlIGZvciB0aGUgdG9wIGxl
dmVsIG9mIHRoZSBvcGVyYXRpb24gdGhyb3VnaCB0aGUgZnJhbWV0cmVlLAorICAgIC8vIGFzIG9w
cG9zZWQgdG8gaGFwcGVuaW5nIGZvciBzb21lL29uZSBvZiB0aGUgcGFnZSBjb21taXRzIHRoYXQg
bWlnaHQgaGFwcGVuIHNvb24KKyAgICBCYWNrRm9yd2FyZExpc3QqIGJmTGlzdCA9IHBhZ2UtPmJh
Y2tGb3J3YXJkTGlzdCgpOworICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSA9IGJmTGlzdC0+
Y3VycmVudEl0ZW0oKTsgICAgCisgICAgYmZMaXN0LT5nb1RvSXRlbSh0YXJnZXRJdGVtKTsKKyAg
ICByZWN1cnNpdmVHb1RvSXRlbSh0YXJnZXRJdGVtLCBjdXJyZW50SXRlbSwgdHlwZSk7CiB9CiAK
IC8vIFRoZSBnZW5lcmFsIGlkZWEgaGVyZSBpcyB0byB0cmF2ZXJzZSB0aGUgZnJhbWUgdHJlZSBh
bmQgdGhlIGl0ZW0gdHJlZSBpbiBwYXJhbGxlbCwKQEAgLTQyMjYsMjUgKzQyMzIsMjMgQEAgYm9v
bCBGcmFtZUxvYWRlcjo6Y2hpbGRGcmFtZXNNYXRjaEl0ZW0oSAogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVHbG9iYWxIaXN0b3J5KCkKLXsKLSAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3Mp
Ci0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IEtVUkwmIHVybCA9IGRvY3VtZW50TG9h
ZGVyKCktPnVybEZvckhpc3RvcnkoKTsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fY2xpZW50LT51cGRhdGVHbG9iYWxIaXN0b3J5KHVybCk7Ci19CisvLyBU
aGVyZSBhcmUgMyB0aGluZ3MgeW91IG1pZ2h0IHRoaW5rIG9mIGFzICJoaXN0b3J5IiwgYWxsIG9m
IHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHRoZXNlIGZ1bmN0aW9ucy4KKy8vCisvLyAgICAgMSkgQmFj
ay9mb3J3YXJkOiBUaGUgbV9jdXJyZW50SGlzdG9yeUl0ZW0gaXMgcGFydCBvZiB0aGlzIG1lY2hh
bmlzbS4KKy8vICAgICAyKSBHbG9iYWwgaGlzdG9yeTogSGFuZGxlZCBieSB0aGUgY2xpZW50Lgor
Ly8gICAgIDMpIFZpc2l0ZWQgbGlua3M6IEhhbmRsZWQgYnkgdGhlIFBhZ2VHcm91cC4KIAogdm9p
ZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvclN0YW5kYXJkTG9hZCgpCiB7CiAgICAgTE9H
KEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgU3RhbmRhcmQg
TG9hZCBpbiBmcmFtZSAlcyIsIGRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKLSAgICAKKworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNl
dHRpbmdzKCk7CisgICAgYm9vbCBuZWVkUHJpdmFjeSA9ICFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+
cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOworICAgIGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBk
b2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7CisKICAgICAvLyBJZiB0aGUgbmF2aWdh
dGlvbiBvY2N1cmVkIGR1cmluZyBsb2FkIGFuZCB0aGlzIGlzIGEgc3ViZnJhbWUsIHVwZGF0ZSB0
aGUgY3VycmVudAotICAgIC8vIGhpc3RvcnkgaXRlbSByYXRoZXIgdGhhbiBhZGRpbmcgYSBuZXcg
b25lLiA8cmRhcjovL3Byb2JsZW0vNTMzMzQ5Nj4KKyAgICAvLyBiYWNrL2ZvcndhcmQgaXRlbSBy
YXRoZXIgdGhhbiBhZGRpbmcgYSBuZXcgb25lIGFuZCBkb24ndCBhZGQgdGhlIG5ldyBVUkwgdG8g
Z2xvYmFsCisgICAgLy8gaGlzdG9yeSBhdCBhbGwuIEJ1dCBkbyBhZGQgaXQgdG8gdmlzaXRlZCBs
aW5rcy4gPHJkYXI6Ly9wcm9ibGVtLzUzMzM0OTY+CiAgICAgYm9vbCBmcmFtZU5hdmlnYXRpb25E
dXJpbmdMb2FkID0gZmFsc2U7CiAgICAgaWYgKG1fbmF2aWdhdGlvbkR1cmluZ0xvYWQpIHsKICAg
ICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IG1fZnJhbWUtPm93bmVyRWxlbWVu
dCgpOwpAQCAtNDI1MywxNCArNDI1NywyMCBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0
b3J5Rm9yU3RhbmRhCiAgICAgfQogCiAgICAgaWYgKCFmcmFtZU5hdmlnYXRpb25EdXJpbmdMb2Fk
ICYmICFkb2N1bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGlyZWN0KCkpIHsKLSAgICAgICAgaWYg
KCFkb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCkuaXNFbXB0eSgpKQorICAgICAgICBp
ZiAoIWhpc3RvcnlVUkwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhZGRCYWNrRm9yd2FyZEl0
ZW1DbGlwcGVkQXRUYXJnZXQodHJ1ZSk7CisgICAgICAgICAgICBpZiAoIW5lZWRQcml2YWN5KQor
ICAgICAgICAgICAgICAgIG1fY2xpZW50LT51cGRhdGVHbG9iYWxIaXN0b3J5KGhpc3RvcnlVUkwp
OworICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChkb2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJs
ZVVSTCgpLmlzRW1wdHkoKSAmJiBtX2N1cnJlbnRIaXN0b3J5SXRlbSkgewogICAgICAgICBtX2N1
cnJlbnRIaXN0b3J5SXRlbS0+c2V0VVJMKGRvY3VtZW50TG9hZGVyKCktPnVybCgpKTsKICAgICAg
ICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0tPnNldEZvcm1JbmZvRnJvbVJlcXVlc3QoZG9jdW1lbnRM
b2FkZXIoKS0+cmVxdWVzdCgpKTsKICAgICB9CiAKLSAgICB1cGRhdGVHbG9iYWxIaXN0b3J5KCk7
CisgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSAmJiAhbmVlZFByaXZhY3kpIHsKKyAgICAg
ICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5n
cm91cCgpLmFkZFZpc2l0ZWRMaW5rKGhpc3RvcnlVUkwpOworICAgIH0KIH0KIAogdm9pZCBGcmFt
ZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvckNsaWVudFJlZGlyZWN0KCkKQEAgLTQyNzcsNyArNDI4
NywxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yQ2xpZW50CiAgICAgICAg
IG1fY3VycmVudEhpc3RvcnlJdGVtLT5jbGVhclNjcm9sbFBvaW50KCk7CiAgICAgfQogCi0gICAg
Ly8gRklYTUU6IFNob3VsZCB3ZSBjYWxsIHVwZGF0ZUdsb2JhbEhpc3RvcnkgaGVyZT8KKyAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIGJvb2wgbmVlZFBy
aXZhY3kgPSAhc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsK
KyAgICBjb25zdCBLVVJMJiBoaXN0b3J5VVJMID0gZG9jdW1lbnRMb2FkZXIoKS0+dXJsRm9ySGlz
dG9yeSgpOworCisgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSAmJiAhbmVlZFByaXZhY3kp
IHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgICAg
ICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKGhpc3RvcnlVUkwpOworICAgIH0KIH0KIAog
dm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbigp
CkBAIC00Mjg5LDggKzQzMDYsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9y
QmFja0ZvCiAKICAgICAvLyBNdXN0IGdyYWIgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIGJl
Zm9yZSBkaXN0dXJiaW5nIGl0CiAgICAgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9J
dGVtKG1fcHJldmlvdXNIaXN0b3J5SXRlbS5nZXQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxk
IHdlIGNhbGwgdXBkYXRlR2xvYmFsSGlzdG9yeSBoZXJlPwogfQogCiB2b2lkIEZyYW1lTG9hZGVy
Ojp1cGRhdGVIaXN0b3J5Rm9yUmVsb2FkKCkKQEAgLTQzMTAsOCArNDMyNSw2IEBAIHZvaWQgRnJh
bWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWxvYWQKICAgICAgICAgaWYgKGRvY3VtZW50TG9h
ZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9jdXJyZW50
SGlzdG9yeUl0ZW0tPnNldFVSTChkb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0VVJMKCkpOwogICAg
IH0KLSAgICAKLSAgICB1cGRhdGVHbG9iYWxIaXN0b3J5KCk7CiB9CiAKIHZvaWQgRnJhbWVMb2Fk
ZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWRpcmVjdFdpdGhMb2NrZWRIaXN0b3J5KCkKQEAgLTQzMjEs
OSArNDMzNCwxNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yUmVkaXJlCiAg
ICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9y
IGludGVybmFsIGxvYWQgaW4gZnJhbWUgJXMiLCBkb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0
ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAgICAgCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9m
cmFtZS0+c2V0dGluZ3MoKTsKKyAgICBib29sIG5lZWRQcml2YWN5ID0gIXNldHRpbmdzIHx8IHNl
dHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7CisgICAgY29uc3QgS1VSTCYgaGlzdG9y
eVVSTCA9IGRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKTsKKwogICAgIGlmIChkb2N1
bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGlyZWN0KCkpIHsKLSAgICAgICAgaWYgKCFtX2N1cnJl
bnRIaXN0b3J5SXRlbSAmJiAhbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKKyAgICAgICAgaWYg
KCFtX2N1cnJlbnRIaXN0b3J5SXRlbSAmJiAhbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkgewog
ICAgICAgICAgICAgYWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0KHRydWUpOworICAg
ICAgICAgICAgaWYgKCFuZWVkUHJpdmFjeSAmJiAhaGlzdG9yeVVSTC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZUdsb2JhbEhpc3RvcnkoaGlzdG9yeVVSTCk7Cisg
ICAgICAgIH0KICAgICAgICAgaWYgKG1fY3VycmVudEhpc3RvcnlJdGVtKSB7CiAgICAgICAgICAg
ICBtX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0VVJMKGRvY3VtZW50TG9hZGVyKCktPnVybCgpKTsK
ICAgICAgICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVtLT5zZXRGb3JtSW5mb0Zyb21SZXF1ZXN0
KGRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSk7CkBAIC00MzM0LDcgKzQzNTQsMTAgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvclJlZGlyZQogICAgICAgICAgICAgcGFyZW50
RnJhbWUtPmxvYWRlcigpLT5tX2N1cnJlbnRIaXN0b3J5SXRlbS0+YWRkQ2hpbGRJdGVtKGNyZWF0
ZUhpc3RvcnlJdGVtKHRydWUpKTsKICAgICB9CiAKLSAgICB1cGRhdGVHbG9iYWxIaXN0b3J5KCk7
CisgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSAmJiAhbmVlZFByaXZhY3kpIHsKKyAgICAg
ICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5n
cm91cCgpLmFkZFZpc2l0ZWRMaW5rKGhpc3RvcnlVUkwpOworICAgIH0KIH0KIAogdm9pZCBGcmFt
ZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvckNvbW1pdCgpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJ
KHJldmlzaW9uIDMwNzc2KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDU2LDggKzQ1Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCB1cGRhdGVIaXN0b3J5Rm9yQ2xpZW50UmVkaXJlY3QoKTsKICAgICAgICAgdm9pZCB1cGRh
dGVIaXN0b3J5Rm9yQ29tbWl0KCk7CiAgICAgCi0gICAgICAgIHZvaWQgdXBkYXRlR2xvYmFsSGlz
dG9yeSgpOwotCiAgICAgICAgIHZvaWQgcmVkaXJlY3Rpb25UaW1lckZpcmVkKFRpbWVyPEZyYW1l
TG9hZGVyPiopOwogICAgICAgICB2b2lkIGNoZWNrQ29tcGxldGVkVGltZXJGaXJlZChUaW1lcjxG
cmFtZUxvYWRlcj4qKTsKICAgICAgICAgdm9pZCBjaGVja0xvYWRDb21wbGV0ZVRpbWVyRmlyZWQo
VGltZXI8RnJhbWVMb2FkZXI+Kik7CkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNpb24gMzA3NzYpCisrKyBX
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQ
YXVzZWRUaW1lb3V0cy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKQEAgLTM1MCwxNyArMzUxLDE4IEBAIHZvaWQgQ2hyb21lQ2xpZW50
OjpkYXNoYm9hcmRSZWdpb25zQ2hhbmcKIHsKIH0KIAordm9pZCBDaHJvbWVDbGllbnQ6OnBvcHVs
YXRlVmlzaXRlZExpbmtzKCkKK3sKK30KKwogLy8gLS0tLS0tLS0KIAogUGFnZUdyb3VwTG9hZERl
ZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXIoUGFnZSogcGFnZSwgYm9vbCBkZWZlclNlbGYp
CiB7Ci0gICAgY29uc3QgSGFzaFNldDxQYWdlKj4qIGdyb3VwID0gcGFnZS0+ZnJhbWVOYW1lc3Bh
Y2UoKTsKLQotICAgIGlmICghZ3JvdXApCi0gICAgICAgIHJldHVybjsKKyAgICBjb25zdCBIYXNo
U2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2VzKCk7CiAKLSAgICBIYXNoU2V0
PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZ3JvdXAtPmVuZCgpOwotICAgIGZvciAoSGFz
aFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZ3JvdXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdl
cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBh
Z2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBQYWdlKiBvdGhlclBhZ2Ug
PSAqaXQ7CiAgICAgICAgIGlmICgoZGVmZXJTZWxmIHx8IG90aGVyUGFnZSAhPSBwYWdlKSkgewog
ICAgICAgICAgICAgaWYgKCFvdGhlclBhZ2UtPmRlZmVyc0xvYWRpbmcoKSkKSW5kZXg6IFdlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgJKHJldmlzaW9uIDMwNzc2KQorKysgV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpOwogCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpOworCiAgICAgcHJvdGVjdGVk
OgogICAgICAgICB2aXJ0dWFsIH5DaHJvbWVDbGllbnQoKSB7IH0KICAgICB9OwpJbmRleDogV2Vi
Q29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1l
VHJlZS5jcHAJKHJldmlzaW9uIDMwNzc2KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgPHN0ZGFy
Zy5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KQEAgLTE4MiwxNyArMTgzLDE2IEBAIEZyYW1lKiBGcmFtZVRyZWU6OmZpbmQoY29uc3Qg
QXRvbWljU3RyaW4KICAgICAgICAgaWYgKGZyYW1lLT50cmVlKCktPm5hbWUoKSA9PSBuYW1lKQog
ICAgICAgICAgICAgcmV0dXJuIGZyYW1lOwogCi0gICAgLy8gU2VhcmNoIHRoZSBlbnRpcmUgdHJl
ZSBmb3IgYWxsIG90aGVyIHBhZ2VzIGluIHRoaXMgbmFtZXNwYWNlLgotICAgIGNvbnN0IEhhc2hT
ZXQ8UGFnZSo+KiBwYWdlcyA9IHBhZ2UtPmZyYW1lTmFtZXNwYWNlKCk7Ci0gICAgaWYgKHBhZ2Vz
KSB7Ci0gICAgICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy0+
ZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cGFnZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGFnZSogb3Ro
ZXJQYWdlID0gKml0OwotICAgICAgICAgICAgaWYgKG90aGVyUGFnZSAhPSBwYWdlKQotICAgICAg
ICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gb3RoZXJQYWdlLT5tYWluRnJhbWUoKTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChmcmFtZS0+dHJlZSgpLT5uYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmcmFtZTsKLSAgICAgICAgfQorICAgIC8vIFNlYXJjaCB0aGUgZW50
aXJlIHRyZWUgb2YgZWFjaCBvZiB0aGUgb3RoZXIgcGFnZXMgaW4gdGhpcyBuYW1lc3BhY2UuCisg
ICAgLy8gRklYTUU6IElzIHJhbmRvbSBvcmRlciBPSz8KKyAgICBjb25zdCBIYXNoU2V0PFBhZ2Uq
PiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2VzKCk7CisgICAgSGFzaFNldDxQYWdlKj46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxQYWdlKj46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFnZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIFBhZ2UqIG90aGVyUGFnZSA9ICppdDsKKyAgICAgICAgaWYgKG90aGVyUGFnZSAhPSBw
YWdlKQorICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBvdGhlclBhZ2UtPm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkKKyAgICAg
ICAgICAgICAgICBpZiAoZnJhbWUtPnRyZWUoKS0+bmFtZSgpID09IG5hbWUpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmcmFtZTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKSW5kZXg6IFdl
YkNvcmUvcGFnZS9HbG9iYWxIaXN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ds
b2JhbEhpc3RvcnkuaAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL3BhZ2UvR2xvYmFsSGlz
dG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIEdsb2JhbEhpc3RvcnlfaAotI2RlZmluZSBHbG9iYWxIaXN0b3J5X2gKLQotI2luY2x1
ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAg
Ym9vbCBoaXN0b3J5Q29udGFpbnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdsb2JhbEhpc3Rv
cnlfaApJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5o
IgpAQCAtNDksOCArNTAsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBQYWdlR3JvdXAqPiBQYWdlR3JvdXBNYXA7CisKIHN0YXRpYyBIYXNoU2V0
PFBhZ2UqPiogYWxsUGFnZXM7Ci1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8UGFnZSo+
Kj4qIGZyYW1lTmFtZXNwYWNlczsKK3N0YXRpYyBQYWdlR3JvdXBNYXAqIHBhZ2VHcm91cHM7CiAK
ICNpZm5kZWYgTkRFQlVHCiBXVEZMb2dDaGFubmVsIExvZ1dlYkNvcmVQYWdlTGVha3MgPSAgeyAw
eDAwMDAwMDAwLCAiIiwgV1RGTG9nQ2hhbm5lbE9uIH07CkBAIC04NSw2ICs4OCw3IEBAIFBhZ2U6
OlBhZ2UoQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQsIEMKICAgICAsIG1fcGFyZW50SW5zcGVj
dG9yQ29udHJvbGxlcigwKQogICAgICwgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQoZmFsc2UpCiAg
ICAgLCBtX3VzZXJTdHlsZVNoZWV0TW9kaWZpY2F0aW9uVGltZSgwKQorICAgICwgbV9ncm91cCgw
KQogICAgICwgbV9kZWJ1Z2dlcigwKQogewogICAgIGlmICghYWxsUGFnZXMpIHsKQEAgLTE2NSwz
NyArMTY5LDQxIEBAIHZvaWQgUGFnZTo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEYKIAog
dm9pZCBQYWdlOjpzZXRHcm91cE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGlmIChm
cmFtZU5hbWVzcGFjZXMgJiYgIW1fZ3JvdXBOYW1lLmlzRW1wdHkoKSkgewotICAgICAgICBIYXNo
U2V0PFBhZ2UqPiogb2xkTmFtZXNwYWNlID0gZnJhbWVOYW1lc3BhY2VzLT5nZXQobV9ncm91cE5h
bWUpOwotICAgICAgICBpZiAob2xkTmFtZXNwYWNlKSB7Ci0gICAgICAgICAgICBvbGROYW1lc3Bh
Y2UtPnJlbW92ZSh0aGlzKTsKLSAgICAgICAgICAgIGlmIChvbGROYW1lc3BhY2UtPmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgIGZyYW1lTmFtZXNwYWNlcy0+cmVtb3ZlKG1fZ3JvdXBOYW1l
KTsKLSAgICAgICAgICAgICAgICBkZWxldGUgb2xkTmFtZXNwYWNlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9CisgICAgaWYgKCFtX2dyb3VwTmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgQVNT
RVJUKCFtX3NpbmdsZVBhZ2VHcm91cCk7CisgICAgICAgIEFTU0VSVChtX2dyb3VwKTsKKyAgICAg
ICAgQVNTRVJUKHBhZ2VHcm91cHMpOworICAgICAgICBBU1NFUlQocGFnZUdyb3Vwcy0+Z2V0KG1f
Z3JvdXBOYW1lKSA9PSBtX2dyb3VwKTsKKyAgICAgICAgbV9ncm91cC0+cmVtb3ZlUGFnZSh0aGlz
KTsKKyAgICAgICAgaWYgKG1fZ3JvdXAtPnBhZ2VzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cGFnZUdyb3Vwcy0+cmVtb3ZlKG1fZ3JvdXBOYW1lKTsKICAgICB9CiAgICAgbV9ncm91cE5hbWUg
PSBuYW1lOwotICAgIGlmICghbmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZU5h
bWVzcGFjZXMpCi0gICAgICAgICAgICBmcmFtZU5hbWVzcGFjZXMgPSBuZXcgSGFzaE1hcDxTdHJp
bmcsIEhhc2hTZXQ8UGFnZSo+Kj47Ci0gICAgICAgIEhhc2hTZXQ8UGFnZSo+KiBuZXdOYW1lc3Bh
Y2UgPSBmcmFtZU5hbWVzcGFjZXMtPmdldChuYW1lKTsKLSAgICAgICAgaWYgKCFuZXdOYW1lc3Bh
Y2UpIHsKLSAgICAgICAgICAgIG5ld05hbWVzcGFjZSA9IG5ldyBIYXNoU2V0PFBhZ2UqPjsKLSAg
ICAgICAgICAgIGZyYW1lTmFtZXNwYWNlcy0+YWRkKG5hbWUsIG5ld05hbWVzcGFjZSk7CisgICAg
aWYgKG5hbWUuaXNFbXB0eSgpKQorICAgICAgICBtX2dyb3VwID0gMDsKKyAgICBlbHNlIHsKKyAg
ICAgICAgbV9zaW5nbGVQYWdlR3JvdXAuY2xlYXIoKTsKKyAgICAgICAgaWYgKCFwYWdlR3JvdXBz
KQorICAgICAgICAgICAgcGFnZUdyb3VwcyA9IG5ldyBQYWdlR3JvdXBNYXA7CisgICAgICAgIHBh
aXI8UGFnZUdyb3VwTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gcGFnZUdyb3Vwcy0+YWRk
KG5hbWUsIDApOworICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQuZmlyc3QtPnNlY29uZCk7CisgICAgICAgICAgICBtX2dyb3VwID0gcmVzdWx0
LmZpcnN0LT5zZWNvbmQ7CisgICAgICAgICAgICBtX2dyb3VwLT5hZGRQYWdlKHRoaXMpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHQuZmlyc3QtPnNlY29uZCk7
CisgICAgICAgICAgICBtX2dyb3VwID0gbmV3IFBhZ2VHcm91cCh0aGlzKTsKKyAgICAgICAgICAg
IHJlc3VsdC5maXJzdC0+c2Vjb25kID0gbV9ncm91cDsKICAgICAgICAgfQotICAgICAgICBuZXdO
YW1lc3BhY2UtPmFkZCh0aGlzKTsKICAgICB9CiB9CiAKLWNvbnN0IEhhc2hTZXQ8UGFnZSo+KiBQ
YWdlOjpmcmFtZU5hbWVzcGFjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChmcmFtZU5hbWVzcGFj
ZXMgJiYgIW1fZ3JvdXBOYW1lLmlzRW1wdHkoKSkgPyBmcmFtZU5hbWVzcGFjZXMtPmdldChtX2dy
b3VwTmFtZSkgOiAwOwotfQotCi1jb25zdCBIYXNoU2V0PFBhZ2UqPiogUGFnZTo6ZnJhbWVOYW1l
c3BhY2UoY29uc3QgU3RyaW5nJiBncm91cE5hbWUpCit2b2lkIFBhZ2U6OmluaXRHcm91cCgpCiB7
Ci0gICAgcmV0dXJuIChmcmFtZU5hbWVzcGFjZXMgJiYgIWdyb3VwTmFtZS5pc0VtcHR5KCkpID8g
ZnJhbWVOYW1lc3BhY2VzLT5nZXQoZ3JvdXBOYW1lKSA6IDA7CisgICAgQVNTRVJUKCFtX3Npbmds
ZVBhZ2VHcm91cCk7CisgICAgQVNTRVJUKCFtX2dyb3VwKTsKKyAgICBtX3NpbmdsZVBhZ2VHcm91
cC5zZXQobmV3IFBhZ2VHcm91cCh0aGlzKSk7CisgICAgbV9ncm91cCA9IG1fc2luZ2xlUGFnZUdy
b3VwLmdldCgpOwogfQogCiB2b2lkIFBhZ2U6OnNldE5lZWRzUmVhcHBseVN0eWxlcygpCkBAIC0z
NjAsNiArMzY4LDIxIEBAIGNvbnN0IFN0cmluZyYgUGFnZTo6dXNlclN0eWxlU2hlZXQoKSBjb24K
ICAgICByZXR1cm4gbV91c2VyU3R5bGVTaGVldDsKIH0KIAordm9pZCBQYWdlOjpyZW1vdmVBbGxW
aXNpdGVkTGlua3MoKQoreworICAgIGlmICghYWxsUGFnZXMpCisgICAgICAgIHJldHVybjsKKyAg
ICBIYXNoU2V0PFBhZ2VHcm91cCo+IGdyb3VwczsKKyAgICBIYXNoU2V0PFBhZ2UqPjo6aXRlcmF0
b3IgZW5kID0gYWxsUGFnZXMtPmVuZCgpOworICAgIGZvciAoSGFzaFNldDxQYWdlKj46Oml0ZXJh
dG9yIGl0ID0gYWxsUGFnZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBp
ZiAoUGFnZUdyb3VwKiBncm91cCA9ICgqaXQpLT5ncm91cFB0cigpKQorICAgICAgICAgICAgZ3Jv
dXBzLmFkZChncm91cCk7CisgICAgfQorICAgIEhhc2hTZXQ8UGFnZUdyb3VwKj46Oml0ZXJhdG9y
IGUyID0gZ3JvdXBzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxQYWdlR3JvdXAqPjo6aXRlcmF0
b3IgaXQgPSBncm91cHMuYmVnaW4oKTsgaXQgIT0gZTI7ICsraXQpCisgICAgICAgICgqaXQpLT5y
ZW1vdmVWaXNpdGVkTGlua3MoKTsKK30KKwogdm9pZCBQYWdlOjpzZXREZWJ1Z2dlckZvckFsbFBh
Z2VzKEtKUzo6RGVidWdnZXIqIGRlYnVnZ2VyKQogewogICAgIEFTU0VSVChhbGxQYWdlcyk7Cklu
ZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdl
LmgJKHJldmlzaW9uIDMwNzc2KQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0q
LQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMzcsMjIgKzM3LDEzIEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IGNsYXNzIERlYnVnZ2VyOwogfQogCi10eXBlZGVmIGVudW0gVGV4dENhc2VTZW5zaXRpdml0eSB7
Ci0gICAgVGV4dENhc2VTZW5zaXRpdmUsCi0gICAgVGV4dENhc2VJbnNlbnNpdGl2ZQotfTsKLQot
dHlwZWRlZiBlbnVtIEZpbmREaXJlY3Rpb24gewotICAgIEZpbmREaXJlY3Rpb25Gb3J3YXJkLAot
ICAgIEZpbmREaXJlY3Rpb25CYWNrd2FyZAotfTsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgQ2hyb21lOwogICAgIGNsYXNzIENocm9tZUNsaWVudDsKICAgICBjbGFzcyBDb250
ZXh0TWVudUNsaWVudDsKICAgICBjbGFzcyBDb250ZXh0TWVudUNvbnRyb2xsZXI7CisgICAgY2xh
c3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgRHJhZ0NsaWVudDsKICAgICBjbGFzcyBEcmFnQ29udHJv
bGxlcjsKICAgICBjbGFzcyBFZGl0b3JDbGllbnQ7CkBAIC02MSwxNSArNTIsMTkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEluc3BlY3RvckNsaWVudDsKICAgICBjbGFzcyBJbnNw
ZWN0b3JDb250cm9sbGVyOwogICAgIGNsYXNzIE5vZGU7CisgICAgY2xhc3MgUGFnZUdyb3VwOwog
ICAgIGNsYXNzIFByb2dyZXNzVHJhY2tlcjsKICAgICBjbGFzcyBTZWxlY3Rpb247CiAgICAgY2xh
c3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKICAgICBjbGFzcyBTZXR0aW5nczsKKyAgICBjbGFzcyBL
VVJMOworCisgICAgZW51bSBUZXh0Q2FzZVNlbnNpdGl2aXR5IHsgVGV4dENhc2VTZW5zaXRpdmUs
IFRleHRDYXNlSW5zZW5zaXRpdmUgfTsKKyAgICBlbnVtIEZpbmREaXJlY3Rpb24geyBGaW5kRGly
ZWN0aW9uRm9yd2FyZCwgRmluZERpcmVjdGlvbkJhY2t3YXJkIH07CiAKICAgICBjbGFzcyBQYWdl
IDogTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIHZvaWQgc2V0TmVl
ZHNSZWFwcGx5U3R5bGVzKCk7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoU2V0PFBhZ2UqPiog
ZnJhbWVOYW1lc3BhY2UoY29uc3QgU3RyaW5nJik7CiAKICAgICAgICAgUGFnZShDaHJvbWVDbGll
bnQqLCBDb250ZXh0TWVudUNsaWVudCosIEVkaXRvckNsaWVudCosIERyYWdDbGllbnQqLCBJbnNw
ZWN0b3JDbGllbnQqKTsKICAgICAgICAgflBhZ2UoKTsKQEAgLTkwLDkgKzg1LDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSosIEZyYW1l
TG9hZFR5cGUpOwogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRHcm91cE5hbWUoY29uc3QgU3Ry
aW5nJik7Ci0gICAgICAgIFN0cmluZyBncm91cE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2dyb3Vw
TmFtZTsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZ3JvdXBOYW1lOyB9CiAKLSAgICAgICAgY29uc3QgSGFzaFNldDxQYWdlKj4qIGZyYW1lTmFt
ZXNwYWNlKCkgY29uc3Q7CisgICAgICAgIFBhZ2VHcm91cCYgZ3JvdXAoKSB7IGlmICghbV9ncm91
cCkgaW5pdEdyb3VwKCk7IHJldHVybiAqbV9ncm91cDsgfQorICAgICAgICBQYWdlR3JvdXAqIGdy
b3VwUHRyKCkgeyByZXR1cm4gbV9ncm91cDsgfSAvLyBjYW4gcmV0dXJuIDAKIAogICAgICAgICB2
b2lkIGluY3JlbWVudEZyYW1lQ291bnQoKSB7ICsrbV9mcmFtZUNvdW50OyB9CiAgICAgICAgIHZv
aWQgZGVjcmVtZW50RnJhbWVDb3VudCgpIHsgLS1tX2ZyYW1lQ291bnQ7IH0KQEAgLTE0MCw3ICsx
MzYsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgSElOU1RBTkNFIGlu
c3RhbmNlSGFuZGxlKCkgeyByZXR1cm4gc19pbnN0YW5jZUhhbmRsZTsgfQogI2VuZGlmCiAKKyAg
ICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7CisKICAgICBwcml2YXRl
OgorICAgICAgICB2b2lkIGluaXRHcm91cCgpOworCiAgICAgICAgIE93blB0cjxDaHJvbWU+IG1f
Y2hyb21lOwogICAgICAgICBPd25QdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4gbV9kcmFnQ2FyZXRD
b250cm9sbGVyOwogICAgICAgICBPd25QdHI8RHJhZ0NvbnRyb2xsZXI+IG1fZHJhZ0NvbnRyb2xs
ZXI7CkBAIC0xNzEsNiArMTcxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBtdXRh
YmxlIGJvb2wgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQ7CiAgICAgICAgIG11dGFibGUgdGltZV90
IG1fdXNlclN0eWxlU2hlZXRNb2RpZmljYXRpb25UaW1lOwogCisgICAgICAgIE93blB0cjxQYWdl
R3JvdXA+IG1fc2luZ2xlUGFnZUdyb3VwOworICAgICAgICBQYWdlR3JvdXAqIG1fZ3JvdXA7CisK
ICAgICAgICAgS0pTOjpEZWJ1Z2dlciogbV9kZWJ1Z2dlcjsKIAogI2lmIFBMQVRGT1JNKFdJTikg
fHwgKFBMQVRGT1JNKFdYKSAmJiBkZWZpbmVkKF9fV1hNU1dfXykpCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvUGFnZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisK
KyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyAtLS0tLS0tLQorCitQYWdl
R3JvdXA6OlBhZ2VHcm91cCgpCisgICAgOiBtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRlZChmYWxzZSkK
KyAgICAsIG1fdmlzaXRlZExpbmtVcGRhdGVEZWZlcnJhbENvdW50KDApCit7Cit9CisKK1BhZ2VH
cm91cDo6UGFnZUdyb3VwKFBhZ2UqIHBhZ2UpCisgICAgOiBtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRl
ZChmYWxzZSkKKyAgICAsIG1fdmlzaXRlZExpbmtVcGRhdGVEZWZlcnJhbENvdW50KDApCit7Cisg
ICAgQVNTRVJUKHBhZ2UpOworICAgIG1fcGFnZXMuYWRkKHBhZ2UpOworfQorCit2b2lkIFBhZ2VH
cm91cDo6YWRkUGFnZShQYWdlKiBwYWdlKQoreworICAgIEFTU0VSVChwYWdlKTsKKyAgICBBU1NF
UlQoIW1fcGFnZXMuY29udGFpbnMocGFnZSkpOworICAgIG1fcGFnZXMuYWRkKHBhZ2UpOworfQor
Cit2b2lkIFBhZ2VHcm91cDo6cmVtb3ZlUGFnZShQYWdlKiBwYWdlKQoreworICAgIEFTU0VSVChw
YWdlKTsKKyAgICBBU1NFUlQobV9wYWdlcy5jb250YWlucyhwYWdlKSk7CisgICAgbV9wYWdlcy5y
ZW1vdmUocGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRTbGFzaERvdERvdFNsYXNo
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHVuc2lnbmVk
IGxvb3BMaW1pdCA9IGxlbmd0aCA8IDQgPyAwIDogbGVuZ3RoIC0gMzsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnNb
aV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAy
XSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgM10gPT0gJy8nKQorICAgICAgICAgICAgcmV0dXJu
IGk7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZmluZFNs
YXNoU2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIGludCBwb3Np
dGlvbikKK3sKKyAgICB1bnNpZ25lZCBsb29wTGltaXQgPSBsZW5ndGggPCAyID8gMCA6IGxlbmd0
aCAtIDE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gcG9zaXRpb247IGkgPCBsb29wTGltaXQ7ICsr
aSkgeworICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsg
MV0gPT0gJy8nKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIHJldHVybiAtMTsK
K30KKworc3RhdGljIGlubGluZSBpbnQgZmluZFNsYXNoRG90U2xhc2goY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit7CisgICAgdW5zaWduZWQgbG9vcExpbWl0ID0gbGVu
Z3RoIDwgMyA/IDAgOiBsZW5ndGggLSAyOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
b29wTGltaXQ7ICsraSkgeworICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hh
cmFjdGVyc1tpICsgMV0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcvJykKKyAgICAg
ICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBjb250YWluc0NvbG9uU2xhc2hTbGFzaChjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChsZW5ndGggPCAzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgdW5zaWduZWQgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMjsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kpCisgICAgICAgIGlmIChjaGFyYWN0ZXJz
W2ldID09ICc6JyAmJiBjaGFyYWN0ZXJzW2kgKyAxXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsg
Ml0gPT0gJy8nKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYW5QYXRoKFZlY3RvcjxVQ2hhciwgNTEyPiYgcGF0
aCkKK3sKKyAgICAvLyBGSVhNRTogU2hvbGQgbm90IGRvIHRoaXMgaW4gdGhlIHF1ZXJ5IG9yIGFu
Y2hvciBwYXJ0LgorICAgIGludCBwb3M7CisgICAgd2hpbGUgKChwb3MgPSBmaW5kU2xhc2hEb3RE
b3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCkpKSAhPSAtMSkgeworICAgICAgICBpbnQg
cHJldiA9IHJldmVyc2VGaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJy8nLCBwb3MgLSAx
KTsKKyAgICAgICAgLy8gZG9uJ3QgcmVtb3ZlIHRoZSBob3N0LCBpLmUuIGh0dHA6Ly9mb28ub3Jn
Ly4uL2Zvby5odG1sCisgICAgICAgIGlmIChwcmV2IDwgMCB8fCAocHJldiA+IDMgJiYgcGF0aFtw
cmV2IC0gMl0gPT0gJzonICYmIHBhdGhbcHJldiAtIDFdID09ICcvJykpCisgICAgICAgICAgICBw
YXRoLnJlbW92ZShwb3MsIDMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXRoLnJlbW92
ZShwcmV2LCBwb3MgLSBwcmV2ICsgMyk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFNob2xkIG5v
dCBkbyB0aGlzIGluIHRoZSBxdWVyeSBwYXJ0LgorICAgIC8vIFNldCByZWZQb3MgdG8gLTIgdG8g
bWVhbiAiSSBoYXZlbid0IGxvb2tlZCBmb3IgdGhlIGFuY2hvciB5ZXQiLgorICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8gd2FzdGUgYSBmdW5jdGlvbiBjYWxsIG9uIHRoZSBzZWFyY2ggZm9yIHRoZSB0
aGUgYW5jaG9yCisgICAgLy8gaW4gdGhlIHZhc3QgbWFqb3JpdHkgb2YgY2FzZXMgd2hlcmUgdGhl
cmUgaXMgbm8gIi8vIiBpbiB0aGUgcGF0aC4KKyAgICBwb3MgPSAwOworICAgIGludCByZWZQb3Mg
PSAtMjsKKyAgICB3aGlsZSAoKHBvcyA9IGZpbmRTbGFzaFNsYXNoKHBhdGguZGF0YSgpLCBwYXRo
LnNpemUoKSwgcG9zKSkgIT0gLTEpIHsKKyAgICAgICAgaWYgKHJlZlBvcyA9PSAtMikKKyAgICAg
ICAgICAgIHJlZlBvcyA9IGZpbmQocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAnIycpOworICAg
ICAgICBpZiAocmVmUG9zID4gMCAmJiBwb3MgPj0gcmVmUG9zKQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgaWYgKHBvcyA9PSAwIHx8IHBhdGhbcG9zIC0gMV0gIT0gJzonKQorICAgICAg
ICAgICAgcGF0aC5yZW1vdmUocG9zKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zICs9
IDI7CisgICAgfQorCisgICAgLy8gRklYTUU6IFNob2xkIG5vdCBkbyB0aGlzIGluIHRoZSBxdWVy
eSBvciBhbmNob3IgcGFydC4KKyAgICB3aGlsZSAoKHBvcyA9IGZpbmRTbGFzaERvdFNsYXNoKHBh
dGguZGF0YSgpLCBwYXRoLnNpemUoKSkpICE9IC0xKQorICAgICAgICBwYXRoLnJlbW92ZShwb3Ms
IDIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hMZXR0ZXIoVUNoYXIgYywgVUNoYXIg
bG93ZXJjYXNlTGV0dGVyKQoreworICAgIHJldHVybiAoYyB8IDB4MjApID09IGxvd2VyY2FzZUxl
dHRlcjsKK30KKworc3RhdGljIGlubGluZSBib29sIG5lZWRzVHJhaWxpbmdTbGFzaChjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChsZW5ndGggPCA2
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtYXRjaExldHRlcihjaGFyYWN0ZXJz
WzBdLCAnaCcpCisgICAgICAgICAgICB8fCBtYXRjaExldHRlcihjaGFyYWN0ZXJzWzFdLCAndCcp
CisgICAgICAgICAgICB8fCBtYXRjaExldHRlcihjaGFyYWN0ZXJzWzJdLCAndCcpCisgICAgICAg
ICAgICB8fCBtYXRjaExldHRlcihjaGFyYWN0ZXJzWzNdLCAncCcpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCEoY2hhcmFjdGVyc1s0XSA9PSAnOicKKyAgICAgICAgICAgIHx8ICht
YXRjaExldHRlcihjaGFyYWN0ZXJzWzRdLCAncycpICYmIGNoYXJhY3RlcnNbNV0gPT0gJzonKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIHBvcyA9IGNoYXJhY3RlcnNb
NF0gPT0gJzonID8gNSA6IDY7CisKKyAgICAvLyBTa2lwIGluaXRpYWwgdHdvIHNsYXNoZXMgaWYg
cHJlc2VudC4KKyAgICBpZiAocG9zICsgMSA8IGxlbmd0aCAmJiBjaGFyYWN0ZXJzW3Bvc10gPT0g
Jy8nICYmIGNoYXJhY3RlcnNbcG9zICsgMV0gPT0gJy8nKQorICAgICAgICBwb3MgKz0gMjsKKwor
ICAgIC8vIEZpbmQgbmV4dCBzbGFzaC4KKyAgICB3aGlsZSAocG9zIDwgbGVuZ3RoICYmIGNoYXJh
Y3RlcnNbcG9zXSAhPSAnLycpCisgICAgICAgICsrcG9zOworCisgICAgcmV0dXJuIHBvcyA9PSBs
ZW5ndGg7Cit9CisKK2Jvb2wgUGFnZUdyb3VwOjppc0xpbmtWaXNpdGVkKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCit7CisgICAgaWYgKCFtX3Zp
c2l0ZWRMaW5rc1BvcHVsYXRlZCkgeworICAgICAgICBtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRlZCA9
IHRydWU7CisgICAgICAgIEFTU0VSVCghbV9wYWdlcy5pc0VtcHR5KCkpOworICAgICAgICBkZWZl
clZpc2l0ZWRMaW5rVXBkYXRlcygpOworICAgICAgICAoKm1fcGFnZXMuYmVnaW4oKSktPmNocm9t
ZSgpLT5jbGllbnQoKS0+cG9wdWxhdGVWaXNpdGVkTGlua3MoKTsKKyAgICAgICAgcmVzdW1lVmlz
aXRlZExpbmtVcGRhdGVzKCk7CisgICAgfQorCisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMg
PSBhdHRyaWJ1dGVVUkwuY2hhcmFjdGVycygpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJp
YnV0ZVVSTC5sZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gRklYTUU6IEl0IGlzIHN0cmFuZ2UgdGhhdCB3ZSBkbyBub3QgZG8gZnVydGhl
ciBwcm9jZXNzaW5nIG9uIHN0cmluZ3MgdGhhdCBoYXZlICI6Ly8iIGluIHRoZW0uCisgICAgLy8g
VGhhdCdzIGNsZWFybHkgaW5jb3JyZWN0IGZvciBhdCBsZWFzdCB0aGVzZSByZWFzb25zOgorICAg
IC8vICAgIDEpIFRoZSAiOi8vIiBjb3VsZCBiZSBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yLgorICAg
IC8vICAgIDIpIFRoZSBVUkwncyBwYXRoIGNvdWxkIGhhdmUgYSAiLy4vIiBvciBhICIvLi4vIiBv
ciBhICIvLyIgc2VxdWVuY2UgaW4gaXQuCisKKyAgICAvLyBGSVhNRTogbmVlZHNUcmFpbGluZ1Ns
YXNoIGRvZXMgbm90IHByb3Blcmx5IHJldHVybiB0cnVlIGZvciBhIFVSTCB0aGF0IGhhcyBubyBw
YXRoLCBidXQgZG9lcworICAgIC8vIGhhdmUgYSBxdWVyeSBvciBhbmNob3IuCisKKyAgICBib29s
IGhhc0NvbG9uU2xhc2hTbGFzaCA9IGNvbnRhaW5zQ29sb25TbGFzaFNsYXNoKGNoYXJhY3RlcnMs
IGxlbmd0aCk7CisKKyAgICBpZiAoaGFzQ29sb25TbGFzaFNsYXNoICYmICFuZWVkc1RyYWlsaW5n
U2xhc2goY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIG1fdmlzaXRlZExpbmtI
YXNoZXMuY29udGFpbnMoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goY2hhcmFjdGVycywgbGVuZ3Ro
KSk7CisKKyAgICBWZWN0b3I8VUNoYXIsIDUxMj4gYnVmZmVyOworCisgICAgLy8gVGhpcyBpcyBh
IHBvb3IgbWFuJ3MgY29tcGxldGVVUkwuIEZhc3RlciB3aXRoIGxlc3MgbWVtb3J5IGFsbG9jYXRp
b24uCisgICAgLy8gRklYTUU6IEl0J3MgbWlzc2luZyBhIGxvdCBvZiB3aGF0IGNvbXBsZXRlVVJM
IGRvZXMgYW5kIHdoYXQgS1VSTCBkb2VzLgorICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgaW50byBL
VVJMPyBPciBEb2N1bWVudD8gRXZlbiB0aGUgZmFzdCB2ZXJzaW9uIHNob3VsZCBiZSBpbiB0aGUg
cmlnaHQgcGxhY2UsCisgICAgLy8gcmF0aGVyIHRoYW4gaGVyZS4KKworICAgIGlmIChoYXNDb2xv
blNsYXNoU2xhc2gpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5jb3JyZWN0IGZvciBV
UkxzIHRoYXQgaGF2ZSBhIHF1ZXJ5IG9yIGFuY2hvcjsgdGhlICIvIiBuZWVkcyB0byBnbyBhdCB0
aGUKKyAgICAgICAgLy8gZW5kIG9mIHRoZSBwYXRoLCAqYmVmb3JlKiB0aGUgcXVlcnkgb3IgYW5j
aG9yLgorICAgICAgICBidWZmZXIuYXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAg
IGJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgcmV0dXJuIG1fdmlzaXRlZExpbmtIYXNoZXMu
Y29udGFpbnMoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNp
emUoKSkpOworICAgIH0KKworICAgIGNvbnN0IEtVUkwmIGJhc2VVUkwgPSBkb2N1bWVudC0+YmFz
ZVVSTCgpOworICAgIHN3aXRjaCAoY2hhcmFjdGVyc1swXSkgeworICAgICAgICBjYXNlICcvJzoK
KyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoYmFzZVVSTC5zdHJpbmcoKS5jaGFyYWN0ZXJzKCks
IGJhc2VVUkwucGF0aFN0YXJ0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
JyMnOgorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChiYXNlVVJMLnN0cmluZygpLmNoYXJhY3Rl
cnMoKSwgYmFzZVVSTC5wYXRoRW5kKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGJhc2VVUkwuc3RyaW5nKCkuY2hhcmFj
dGVycygpLCBiYXNlVVJMLnBhdGhBZnRlckxhc3RTbGFzaCgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBidWZmZXIuYXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgY2xl
YW5QYXRoKGJ1ZmZlcik7CisgICAgaWYgKG5lZWRzVHJhaWxpbmdTbGFzaChidWZmZXIuZGF0YSgp
LCBidWZmZXIuc2l6ZSgpKSkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmNvcnJlY3Qg
Zm9yIFVSTHMgdGhhdCBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yOyB0aGUgIi8iIG5lZWRzIHRvIGdv
IGF0IHRoZQorICAgICAgICAvLyBlbmQgb2YgdGhlIHBhdGgsICpiZWZvcmUqIHRoZSBxdWVyeSBv
ciBhbmNob3IuCisgICAgICAgIGJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICB9CisKKyAgICByZXR1
cm4gbV92aXNpdGVkTGlua0hhc2hlcy5jb250YWlucyhTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChi
dWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSk7Cit9CisKK3ZvaWQgUGFnZUdyb3VwOjphZGRW
aXNpdGVkTGluayhjb25zdCBLVVJMJiB1cmwpCit7CisgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgp
KTsKKyAgICBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmFkZCh1cmwuc3RyaW5nKCkuaW1wbCgpLT5oYXNo
KCkpOworfQorCit2b2lkIFBhZ2VHcm91cDo6YWRkVmlzaXRlZExpbmsoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit7CisgICAgbV92aXNpdGVkTGlua0hhc2hlcy5hZGQo
U3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goY2hhcmFjdGVycywgbGVuZ3RoKSk7Cit9CisKK3ZvaWQg
UGFnZUdyb3VwOjpyZW1vdmVWaXNpdGVkTGlua3MoKQoreworICAgIG1fdmlzaXRlZExpbmtIYXNo
ZXMuY2xlYXIoKTsKK30KKwordm9pZCBQYWdlR3JvdXA6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygp
Cit7CisgICAgUGFnZTo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7Cit9CisKK3ZvaWQgUGFnZUdy
b3VwOjpkZWZlclZpc2l0ZWRMaW5rVXBkYXRlcygpCit7CisgICAgKyttX3Zpc2l0ZWRMaW5rVXBk
YXRlRGVmZXJyYWxDb3VudDsKKyAgICBBU1NFUlQobV92aXNpdGVkTGlua1VwZGF0ZURlZmVycmFs
Q291bnQpOworfQorCit2b2lkIFBhZ2VHcm91cDo6cmVzdW1lVmlzaXRlZExpbmtVcGRhdGVzKCkK
K3sKKyAgICBBU1NFUlQobV92aXNpdGVkTGlua1VwZGF0ZURlZmVycmFsQ291bnQpOworICAgIC0t
bV92aXNpdGVkTGlua1VwZGF0ZURlZmVycmFsQ291bnQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUv
cGFnZS9QYWdlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBQYWdlR3JvdXBfaAorI2RlZmluZSBQYWdlR3JvdXBfaAorCisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKyAgICBjbGFzcyBE
b2N1bWVudDsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFBhZ2U7CisKKyAgICBjbGFzcyBQ
YWdlR3JvdXAgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGFnZUdyb3VwKCk7CisgICAgICAgIFBh
Z2VHcm91cChQYWdlKik7CisKKyAgICAgICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWdlczsgfQorCisgICAgICAgIHZvaWQgYWRkUGFnZShQYWdlKik7
CisgICAgICAgIHZvaWQgcmVtb3ZlUGFnZShQYWdlKik7CisKKyAgICAgICAgYm9vbCBpc0xpbmtW
aXNpdGVkKERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSk7CisK
KyAgICAgICAgdm9pZCBhZGRWaXNpdGVkTGluayhjb25zdCBLVVJMJik7CisgICAgICAgIHZvaWQg
YWRkVmlzaXRlZExpbmsoY29uc3QgVUNoYXIqLCBzaXplX3QpOworICAgICAgICB2b2lkIHJlbW92
ZVZpc2l0ZWRMaW5rcygpOworICAgICAgICBzdGF0aWMgdm9pZCByZW1vdmVBbGxWaXNpdGVkTGlu
a3MoKTsKKworICAgICAgICB2b2lkIGRlZmVyVmlzaXRlZExpbmtVcGRhdGVzKCk7CisgICAgICAg
IHZvaWQgcmVzdW1lVmlzaXRlZExpbmtVcGRhdGVzKCk7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBIYXNoU2V0PFBhZ2UqPiBtX3BhZ2VzOworICAgICAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX3Zp
c2l0ZWRMaW5rSGFzaGVzOworICAgICAgICBib29sIG1fdmlzaXRlZExpbmtzUG9wdWxhdGVkOwor
ICAgICAgICB1bnNpZ25lZCBtX3Zpc2l0ZWRMaW5rVXBkYXRlRGVmZXJyYWxDb3VudDsKKyAgICB9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisgICAgCisjZW5kaWYgLy8gUGFnZUdyb3VwX2gK
ClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFj
L0dsb2JhbEhpc3RvcnlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9HbG9i
YWxIaXN0b3J5TWFjLm1tCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYkNvcmUvcGFnZS9tYWMvR2xv
YmFsSGlzdG9yeU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwzOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiR2xvYmFsSGlzdG9yeS5oIgot
Ci0jaW1wb3J0ICJXZWJDb3JlSGlzdG9yeS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJv
b2wgaGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgLy8gdGhlIG90aGVyIHNpZGUgb2YgdGhlIGJyaWRnZSBpcyBjYXJlZnVsIG5v
dCB0byB0aHJvdyBleGNlcHRpb25zIGhlcmUKLSAgICByZXR1cm4gW1tXZWJDb3JlSGlzdG9yeSBo
aXN0b3J5UHJvdmlkZXJdIGNvbnRhaW5zVVJMOmNoYXJhY3RlcnMgbGVuZ3RoOmxlbmd0aF07Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS93aW4vR2xvYmFs
SGlzdG9yeVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL3dpbi9HbG9iYWxIaXN0
b3J5V2luLmNwcAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL3BhZ2Uvd2luL0dsb2JhbEhp
c3RvcnlXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdsb2JhbEhpc3RvcnkuaCIKLQot
I2luY2x1ZGUgIldlYkNvcmVIaXN0b3J5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9v
bCBoaXN0b3J5Q29udGFpbnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICBXZWJDb3JlSGlzdG9yeVByb3ZpZGVyKiBwcm92aWRlciA9IFdlYkNvcmVIaXN0
b3J5OjpoaXN0b3J5UHJvdmlkZXIoKTsKLSAgICByZXR1cm4gcHJvdmlkZXIgJiYgcHJvdmlkZXIt
PmNvbnRhaW5zVVJMKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL0tVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsNiArMjY0LDggQEAgaW5saW5lIGJv
b2wgS1VSTDo6cHJvdG9jb2xJcyhjb25zdCBTdHJpbgogCiBLVVJMOjpLVVJMKCkKICAgICA6IG1f
aXNWYWxpZChmYWxzZSkKKyAgICAsIHBvcnRFbmRQb3MoMCkKKyAgICAsIHBhdGhFbmRQb3MoMCkK
IHsKIH0KIApAQCAtMzIwLDYgKzMyMiw4IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMJiBi
YXNlLCBjb25zdCAKICAgICBpZiAoIWJhc2UubV9pc1ZhbGlkICYmICFiYXNlLmlzRW1wdHkoKSkg
ewogICAgICAgICBtX3N0cmluZyA9IHJlbGF0aXZlOwogICAgICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKKyAgICAgICAgcG9ydEVuZFBvcyA9IDA7CisgICAgICAgIHBhdGhFbmRQb3MgPSAwOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zOTMsNiArMzk3LDggQEAgdm9pZCBLVVJMOjppbml0
KGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgbV9zdHJpbmcgPSByZWxhdGl2ZTsKICAgICAgICAgICAgICAgICBtX2lzVmFsaWQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICBwb3J0RW5kUG9zID0gMDsKKyAgICAgICAgICAgICAgICBw
YXRoRW5kUG9zID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtNTA1LDcgKzUxMSw3IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMJiBiYXNl
LCBjb25zdCAKIAogYm9vbCBLVVJMOjpoYXNQYXRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9p
c1ZhbGlkICYmIHBhdGhFbmRQb3MgIT0gcG9ydEVuZFBvczsKKyAgICByZXR1cm4gcGF0aEVuZFBv
cyAhPSBwb3J0RW5kUG9zOwogfQogCiBTdHJpbmcgS1VSTDo6bGFzdFBhdGhDb21wb25lbnQoKSBj
b25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9LVVJMLmgJKHJldmlzaW9uIDMwNzc2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9L
VVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsMTAgQEAgcHVibGljOgogICAgIG9w
ZXJhdG9yIGNvbnN0IFN0cmluZyYoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQogICAgIG9w
ZXJhdG9yIEtKUzo6VVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9CiAKKyAgICB1
bnNpZ25lZCBwYXRoU3RhcnQoKSBjb25zdCB7IHJldHVybiBwb3J0RW5kUG9zOyB9CisgICAgdW5z
aWduZWQgcGF0aEVuZCgpIGNvbnN0IHsgcmV0dXJuIHBhdGhFbmRQb3M7IH0KKyAgICB1bnNpZ25l
ZCBwYXRoQWZ0ZXJMYXN0U2xhc2goKSBjb25zdCB7IHJldHVybiBwYXRoRW5kUG9zOyB9CisKICNp
ZiBQTEFURk9STShDRikKICAgICBLVVJMKENGVVJMUmVmKTsKICAgICBDRlVSTFJlZiBjcmVhdGVD
RlVSTCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBv
cmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNs
dWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJGVFBEaXJl
Y3RvcnlEb2N1bWVudC5oIgotI2luY2x1ZGUgIkdsb2JhbEhpc3RvcnkuaCIKICNpbmNsdWRlICJL
VVJMLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRh
YmFzZS5oIgpAQCAtNTgsOCArNTcsNiBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0Fy
cmF5KGNvbnN0CiAvKiBDb21wbGV0ZWx5IGVtcHR5IHN0dWJzIChtb3N0bHkgdG8gYWxsb3cgRFJU
IHRvIHJ1bik6ICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCiAKLWJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVD
aGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KIFBsdWdpblNldCBQbHVnaW5EYXRh
YmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBQbHVnaW5TZXQoKTsgfQogVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQ
bHVnaW5QYXRocygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7
IH0KIGJvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChjb25zdCBTdHJp
bmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViQ29yZUhpc3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJDb3JlSGlzdG9yeS5oCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYkNvcmVIaXN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLUBwcm90b2NvbCBXZWJDb3JlSGlzdG9yeVByb3ZpZGVyIDxOU09i
amVjdD4KLS0gKEJPT0wpY29udGFpbnNVUkw6KGNvbnN0IFVuaUNoYXIqKXVuaWNvZGUgbGVuZ3Ro
Oih1bnNpZ25lZClsZW5ndGg7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViQ29yZUhpc3RvcnkgOiBO
U09iamVjdAotCi0rICh2b2lkKXNldEhpc3RvcnlQcm92aWRlcjooaWQ8V2ViQ29yZUhpc3RvcnlQ
cm92aWRlcj4paDsKLSsgKGlkPFdlYkNvcmVIaXN0b3J5UHJvdmlkZXI+KWhpc3RvcnlQcm92aWRl
cjsKLQotQGVuZApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUhpc3RvcnkubQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlSGlzdG9yeS5tCShyZXZp
c2lvbiAzMDc3NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVIaXN0b3J5Lm0JKHdv
cmtpbmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0KLSNpbXBvcnQgIldlYkNvcmVIaXN0b3J5LmgiCi0KLUBpbXBsZW1lbnRh
dGlvbiBXZWJDb3JlSGlzdG9yeQotCi1zdGF0aWMgaWQ8V2ViQ29yZUhpc3RvcnlQcm92aWRlcj4g
X2hpc3RvcnlQcm92aWRlciA9IG5pbDsKLQotKyAodm9pZClzZXRIaXN0b3J5UHJvdmlkZXI6IChp
ZDxXZWJDb3JlSGlzdG9yeVByb3ZpZGVyPiloCi17Ci0gICAgaWYgKF9oaXN0b3J5UHJvdmlkZXIg
IT0gaCl7Ci0gICAgICAgIFtfaGlzdG9yeVByb3ZpZGVyIHJlbGVhc2VdOwotICAgICAgICBfaGlz
dG9yeVByb3ZpZGVyID0gW2ggcmV0YWluXTsKLSAgICB9Ci19Ci0KLSsgKGlkPFdlYkNvcmVIaXN0
b3J5UHJvdmlkZXI+KWhpc3RvcnlQcm92aWRlcgotewotICAgIHJldHVybiBfaGlzdG9yeVByb3Zp
ZGVyOwotfQotCi1AZW5kCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9y
YXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQAogI2luY2x1
ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHbG9iYWxIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSWNv
bkxvYWRlci5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2ViQ29yZUhpc3RvcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vd2luL1dlYkNvcmVIaXN0b3J5LmNwcAkocmV2aXNpb24gMzA3NzYp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9XZWJDb3JlSGlzdG9yeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV2ViQ29yZUhpc3RvcnkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dGF0aWMgV2ViQ29yZUhpc3RvcnlQcm92aWRlciogX2hpc3RvcnlQcm92aWRlciA9IDA7Ci0KLXZv
aWQgV2ViQ29yZUhpc3Rvcnk6OnNldEhpc3RvcnlQcm92aWRlcihXZWJDb3JlSGlzdG9yeVByb3Zp
ZGVyKiBoKQotewotICAgIGlmIChfaGlzdG9yeVByb3ZpZGVyID09IGgpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGRlbGV0ZSBfaGlzdG9yeVByb3ZpZGVyOwotICAgIF9oaXN0b3J5UHJvdmlkZXIg
PSBoOwotfQotCi1XZWJDb3JlSGlzdG9yeVByb3ZpZGVyKiBXZWJDb3JlSGlzdG9yeTo6aGlzdG9y
eVByb3ZpZGVyKCkKLXsKLSAgICByZXR1cm4gX2hpc3RvcnlQcm92aWRlcjsKLX0KLQotfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2ViQ29yZUhpc3RvcnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3dpbi9XZWJDb3JlSGlzdG9yeS5oCShyZXZpc2lvbiAzMDc3NikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vd2luL1dlYkNvcmVIaXN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNDYgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUg
bWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0qLwotCi0jaWZuZGVmIFdFQkNPUkVfSElTVE9SWV9IXwotI2RlZmluZSBXRUJDT1JFX0hJU1RP
UllfSF8KLQotI2luY2x1ZGUgPHVuaWNvZGUvdW1hY2hpbmUuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBXZWJDb3JlSGlzdG9yeVByb3ZpZGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIGJvb2wgY29udGFpbnNVUkwoY29uc3QgVUNoYXIqIHVuaWNvZGUsIHVuc2lnbmVkIGxlbmd0
aCkgPSAwOwotfTsKLQotY2xhc3MgV2ViQ29yZUhpc3RvcnkgewotcHVibGljOgotICAgIHN0YXRp
YyB2b2lkIHNldEhpc3RvcnlQcm92aWRlcihXZWJDb3JlSGlzdG9yeVByb3ZpZGVyKik7Ci0gICAg
c3RhdGljIFdlYkNvcmVIaXN0b3J5UHJvdmlkZXIqIGhpc3RvcnlQcm92aWRlcigpOwotfTsKLQot
fQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHAJKHJldmlzaW9uIDMwNzc2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTAgKzExMyw2IEBAIGJvb2wgV2Vi
Q29yZTo6Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW0KIHN0YXRpYyBXZWJDb3JlOjpDdXJzb3Ig
bG9jYWxDdXJzb3I7CiBjb25zdCBXZWJDb3JlOjpDdXJzb3ImIFdlYkNvcmU6Om1vdmVDdXJzb3Io
KSB7IHJldHVybiBsb2NhbEN1cnNvcjsgfQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgYm9v
bCBoaXN0b3J5Q29udGFpbnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7
IH0KLX0KLQogdm9pZCBXZWJDb3JlOjpmaW5kV29yZEJvdW5kYXJ5KFVDaGFyIGNvbnN0KiBzdHIs
aW50IGxlbixpbnQgcG9zaXRpb24saW50KiBzdGFydCwgaW50KiBlbmQpIHsgbm90SW1wbGVtZW50
ZWQoKTsgKnN0YXJ0PXBvc2l0aW9uOyAqZW5kPXBvc2l0aW9uOyB9CiAKIFBsdWdpblNldCBQbHVn
aW5EYXRhYmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiBQbHVnaW5TZXQoKTsgfQpJbmRleDogV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYktpdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3IEBACisyMDA4LTAzLTA0ICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOiBBZGRlZCBXZWJIaXN0b3J5SW50ZXJuYWwuaC4KKwogMjAwOC0wMS0yNiAgR3Jl
ZyBCb2xzaW5nYSAgPGJvbHNpbmdhQGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNTcwODM4OD4gV2ViRGFzaGJvYXJkUmVnaW9uLmggZHVwbGljYXRlZCBiZXR3ZWVuIFdlYkNv
cmUgLyBXZWJLaXQKSW5kZXg6IFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDMwNzc2KQorKysgV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNiArMjc3LDcgQEAKIAkJOTM5ODExMkYwODI0QkYw
MTAwOERGMDM4IC8qIFNlY3VyaXR5LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMEU4MUUwMDU4NTNBQzAwMEFEMDg5MSAvKiBTZWN1
cml0eS5mcmFtZXdvcmsgKi87IH07CiAJCTkzRUIxNzhEMDlGODhENDYwMDkxRjhGRiAvKiBXZWJT
eXN0ZW1JbnRlcmZhY2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzRUIxNzhDMDlGODhENDYwMDkxRjhGRiAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UubSAq
LzsgfTsKIAkJOTNFQjE3OEYwOUY4OEQ1MTAwOTFGOEZGIC8qIFdlYlN5c3RlbUludGVyZmFjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFQjE3OEUw
OUY4OEQ1MTAwOTFGOEZGIC8qIFdlYlN5c3RlbUludGVyZmFjZS5oICovOyB9OworCQk5M0ZERTkz
MzBENzlDQUYzMDA3NEYwMjkgLyogV2ViSGlzdG9yeUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0ZERTkzMjBENzlDQUYzMDA3NEYwMjkg
LyogV2ViSGlzdG9yeUludGVybmFsLmggKi87IH07CiAJCUE3MDkzNkFGMEI1NjA4REMwMENEQjQ4
RSAvKiBXZWJEcmFnQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzA5MzZBRDBCNTYwOERDMDBDREI0OEUgLyogV2ViRHJhZ0NsaWVudC5oICov
OyB9OwogCQlBNzA5MzZCMDBCNTYwOERDMDBDREI0OEUgLyogV2ViRHJhZ0NsaWVudC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MDkzNkFFMEI1NjA4
REMwMENEQjQ4RSAvKiBXZWJEcmFnQ2xpZW50Lm1tICovOyB9OwogCQlBN0QzQzVCQzBCNTc3M0M1
MDAyQ0E0NTAgLyogV2ViUGFzdGVib2FyZEhlbHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEM0M1QkEwQjU3NzNDNTAwMkNBNDUwIC8qIFdlYlBh
c3RlYm9hcmRIZWxwZXIuaCAqLzsgfTsKQEAgLTUxMCw2ICs1MTEsNyBAQAogCQk5M0Q2MjNERDA1
MUU3OTFGMDAyRjQ3REQgLyogbGliaWN1Y29yZS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1l
ID0gbGliaWN1Y29yZS5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmljdWNvcmUuZHlsaWI7IHNv
dXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTkzRUIxNzhDMDlGODhENDYwMDkxRjhGRiAv
KiBXZWJTeXN0ZW1JbnRlcmZhY2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRo
ID0gV2ViU3lzdGVtSW50ZXJmYWNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
RUIxNzhFMDlGODhENTEwMDkxRjhGRiAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3lzdGVtSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTkzRkRFOTMyMEQ3OUNBRjMwMDc0RjAyOSAvKiBXZWJIaXN0b3J5
SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSGlzdG9yeUlu
dGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlDQUU5RDA3MDI1MkE0MTMw
RUNBMTZFQSAvKiBXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTlD
RTFGOEEzMDJBNUM2RjMwRUNBMkFDRCAvKiBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYkltYWdl
UmVuZGVyZXJGYWN0b3J5Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OwogCQk5Q0YwRTI0OTAyMTM2MUIwMEVDQTE2RUEgLyogV2ViRnJhbWVQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViRnJhbWVQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtODIwLDYgKzgyMiw3IEBACiAJCQkJMjJGMjE5Q0IwOEQy
MzY3MzAwMzBFMDc4IC8qIFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCAqLywKIAkJCQk2NURB
MjYwODA1MkNDMTg3MDBBOTdCMzEgLyogV2ViSGlzdG9yeS5tbSAqLywKIAkJCQlGNTIwRkIxOTAy
MjFERUZEMDFDMUE1MjUgLyogV2ViSGlzdG9yeS5oICovLAorCQkJCTkzRkRFOTMyMEQ3OUNBRjMw
MDc0RjAyOSAvKiBXZWJIaXN0b3J5SW50ZXJuYWwuaCAqLywKIAkJCQkzOTQ0NjA3RjAyMEY1MEVE
MEVDQTE3NjcgLyogV2ViSGlzdG9yeUl0ZW0uaCAqLywKIAkJCQkzOTQ0NjA4MDAyMEY1MEVEMEVD
QTE3NjcgLyogV2ViSGlzdG9yeUl0ZW0ubW0gKi8sCiAJCQkJNTE2RjI5NkYwM0E2QzQ1QTAwQ0Ey
RDNBIC8qIFdlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaCAqLywKQEAgLTEzMTcsNiArMTMyMCw3IEBA
CiAJCQkJOTM5ODEwOUIwODI0QkYwMTAwOERGMDM4IC8qIFdlYlZpZXdJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM5ODEwNzEwODI0QkYwMTAwOERGMDM4IC8qIFdlYlZpZXdQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA5NzA4MjRCRjAxMDA4REYwMzggLyogbnBmdW5j
dGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRkRFOTMzMEQ3OUNBRjMwMDc0RjAyOSAvKiBX
ZWJIaXN0b3J5SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViS2l0L21hYy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwNzc2
KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NCBA
QAorMjAwOC0wMy0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBmaXggaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjYKKyAgICAgICAgICBSRUdSRVNTSU9OOiBp
ZnJhbWVzIGFyZSBhZGRlZCB0byBTYWZhcmkncyBIaXN0b3J5IG1lbnUKKyAgICAgICAgICBieSBz
ZXBhcmF0aW5nIHRoZSB2aXNpdGVkIGxpbmsgbWFjaGluZXJ5IGZyb20gZ2xvYmFsIGhpc3RvcnkK
KworICAgICAgICAqIEhpc3RvcnkvV2ViSGlzdG9yeS5tbTogTW92ZWQgV2ViSGlzdG9yeVByaXZh
dGUgaW5zaWRlIHRoaXMgZmlsZS4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgcmVtb3Zl
SXRlbUZyb21EYXRlQ2FjaGVzOl0pOiBSZW1vdmVkIHRoZSB1bmRlcnNjb3JlIGZyb20gdGhpcwor
ICAgICAgICBtZXRob2QgbmFtZSwgc2luY2UgaXQncyBvbiBhIHByaXZhdGUgb2JqZWN0LgorICAg
ICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSByZW1vdmVJdGVtRm9yVVJMU3RyaW5nOl0pOiBBZGRl
ZCBhIGNhbGwgdG8gdGhlCisgICAgICAgIFBhZ2VHcm91cDo6cmVtb3ZlQWxsVmlzaXRlZExpbmtz
IGZ1bmN0aW9uIGlmIHRoZSBsYXN0IFVSTCB3YXMgcmVtb3ZlZC4KKyAgICAgICAgKC1bV2ViSGlz
dG9yeVByaXZhdGUgYWRkSXRlbVRvRGF0ZUNhY2hlczpdKTogUmVtb3ZlZCB0aGUgdW5kZXJzY29y
ZSBmcm9tIHRoaXMKKyAgICAgICAgbWV0aG9kIG5hbWUsIHNpbmNlIGl0J3Mgb24gYSBwcml2YXRl
IG9iamVjdC4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgcmVtb3ZlQWxsSXRlbXNdKTog
Q2FsbCBQYWdlR3JvdXA6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcy4KKyAgICAgICAgKC1bV2ViSGlz
dG9yeVByaXZhdGUgYWdlTGltaXREYXRlXSk6IFJlbW92ZWQgdGhlIHVuZGVyc2NvcmUgZnJvbSB0
aGlzCisgICAgICAgIG1ldGhvZCBuYW1lLCBzaW5jZSBpdCdzIG9uIGEgcHJpdmF0ZSBvYmplY3Qu
CisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIGxvYWRIaXN0b3J5R3V0c0Zyb21VUkw6c2F2
ZWRJdGVtc0NvdW50OmNvbGxlY3REaXNjYXJkZWRJdGVtc0ludG86ZXJyb3I6XSk6CisgICAgICAg
IERpdHRvLgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSBzYXZlSGlzdG9yeUd1dHM6VVJM
OmVycm9yOl0pOiBEaXR0by4gQWxzbyBjaGFuZ2VkIHRoaXMKKyAgICAgICAgdG8gY29ycmVjdGx5
IHJldHVybiB0aGUgZXJyb3IgYnkgdXNpbmcgdGhlIG5ld2VyIHZlcnNpb24gb2Ygd3JpdGVUb1VS
TDogYW5kCisgICAgICAgIHJlbW92ZWQgdGhlIEZJWE1FIGFib3V0IHRoYXQuCisgICAgICAgICgt
W1dlYkhpc3RvcnlQcml2YXRlIGFkZFZpc2l0ZWRMaW5rc1RvUGFnZUdyb3VwOl0pOiBBZGRlZC4g
Q2FsbHMgYWRkVmlzaXRlZExpbmsKKyAgICAgICAgZm9yIGV2ZXJ5IGxpbmsgaW4gdGhlIGhpc3Rv
cnkuCisgICAgICAgICgtW1dlYkhpc3Rvcnkgc2F2ZVRvVVJMOmVycm9yOl0pOiBSZW1vdmVkIHRo
ZSBGSVhNRSwgc2luY2Ugd2UgZG8gZ2V0IHRoZSBlcnJvciBub3cuCisgICAgICAgICgtW1dlYkhp
c3RvcnkgYWRkSXRlbTpdKTogTW92ZWQgaW50byB0aGUgV2ViUHJpdmF0ZSBjYXRlZ29yeS4KKyAg
ICAgICAgKC1bV2ViSGlzdG9yeSBhZGRJdGVtRm9yVVJMOl0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViSGlzdG9yeSBfYWRkSXRlbUZvclVSTDp0aXRsZTpdKTogQWRkZWQuIFVzZWQgZm9yIHRoZSBu
b3JtYWwgY2FzZSB3aGVyZSB3ZQorICAgICAgICBjcmVhdGUgYW4gaXRlbSBhbmQgYWxyZWFkeSBr
bm93IGl0cyB0aXRsZS4KKyAgICAgICAgKC1bV2ViSGlzdG9yeSBhZ2VMaW1pdERhdGVdKTogTW92
ZWQgaW50byB0aGUgV2ViUHJpdmF0ZSBjYXRlZ29yeS4KKyAgICAgICAgKC1bV2ViSGlzdG9yeSBj
b250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIaXN0b3J5
IHJlbW92ZUl0ZW06XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIaXN0b3J5IHNldExhc3RWaXNp
dGVkVGltZUludGVydmFsOmZvckl0ZW06XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIaXN0b3J5
IF9pdGVtRm9yVVJMU3RyaW5nOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeSBfYWRk
VmlzaXRlZExpbmtzVG9QYWdlR3JvdXA6V2ViQ29yZTo6XSk6IEFkZGVkLiBGb3IgdXNlIG9ubHkg
aW5zaWRlIFdlYktpdC4KKworICAgICAgICAqIEhpc3RvcnkvV2ViSGlzdG9yeUludGVybmFsLmg6
IEFkZGVkLgorICAgICAgICAqIEhpc3RvcnkvV2ViSGlzdG9yeUl0ZW1JbnRlcm5hbC5oOiBUd2Vh
a2VkIGZvcm1hdHRpbmcgYW5kIGluY2x1ZGVzLgorICAgICAgICAqIEhpc3RvcnkvV2ViSGlzdG9y
eVByaXZhdGUuaDogTW92ZWQgdGhlIFdlYkhpc3RvcnlQcml2YXRlIGNsYXNzIG91dCBvZiB0aGlz
IGhlYWRlci4KKyAgICAgICAgQWxzbyByZW9yZ2FuaXplZCB3aGF0IHdhcyBsZWZ0IGJlaGluZC4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOiBBZGRlZCBwb3B1
bGF0ZVZpc2l0ZWRMaW5rcy4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnBvcHVsYXRlVmlzaXRlZExpbmtzKTog
QWRkZWQgYSBjYWxsIHRvIHRoZSBuZXcKKyAgICAgICAgLVtXZWJIaXN0b3J5IF9hZGRWaXNpdGVk
TGlua3NUb1BhZ2VHcm91cDpdIG1ldGhvZC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnVw
ZGF0ZUdsb2JhbEhpc3RvcnkpOiBDaGFuZ2VkIGNvZGUgdG8gdXNlIHRoZSBuZXcKKyAgICAgICAg
LVtXZWJIaXN0b3J5IF9hZGRJdGVtRm9yVVJMOnRpdGxlOl0gbWV0aG9kLgorCiAyMDA4LTAzLTA0
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4uCkluZGV4OiBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQkocmV2aXNpb24gMzA3
NzYpCisrKyBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiwxOCArMjYsMjUgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCAi
V2ViSGlzdG9yeS5oIgotI2ltcG9ydCAiV2ViSGlzdG9yeVByaXZhdGUuaCIKKyNpbXBvcnQgIldl
Ykhpc3RvcnlJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViSGlzdG9yeUludGVybmFsLmgiCiAKLSNp
bXBvcnQgIldlYkhpc3RvcnlJdGVtLmgiCiAjaW1wb3J0ICJXZWJIaXN0b3J5SXRlbUludGVybmFs
LmgiCi0jaW1wb3J0ICJXZWJIaXN0b3J5SXRlbVByaXZhdGUuaCIKICNpbXBvcnQgIldlYktpdExv
Z2dpbmcuaCIKICNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgiCisjaW1wb3J0IDxXZWJDb3JlL0tV
UkwuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlR3Jv
dXAuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vTlNFcnJvci5oPgogI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlSGlzdG9yeS5oPgot
I2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSGFzaE1hcC5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvUmV0YWluUHRyLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3R5cGVkZWYg
aW50NjRfdCBXZWJIaXN0b3J5RGF0ZUtleTsKK3R5cGVkZWYgSGFzaE1hcDxXZWJIaXN0b3J5RGF0
ZUtleSwgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiA+IERhdGVUb0VudHJpZXNNYXA7CiAKIE5T
U3RyaW5nICpXZWJIaXN0b3J5SXRlbXNBZGRlZE5vdGlmaWNhdGlvbiA9IEAiV2ViSGlzdG9yeUl0
ZW1zQWRkZWROb3RpZmljYXRpb24iOwogTlNTdHJpbmcgKldlYkhpc3RvcnlJdGVtc1JlbW92ZWRO
b3RpZmljYXRpb24gPSBAIldlYkhpc3RvcnlJdGVtc1JlbW92ZWROb3RpZmljYXRpb24iOwpAQCAt
NTQsNiArNjEsNDUgQEAgTlNTdHJpbmcgKkRhdGVzQXJyYXlLZXkgPSBAIldlYkhpc3RvcnlEYQog
CiAjZGVmaW5lIGN1cnJlbnRGaWxlVmVyc2lvbiAxCiAKK0BpbnRlcmZhY2UgV2ViSGlzdG9yeVBy
aXZhdGUgOiBOU09iamVjdCB7CitAcHJpdmF0ZQorICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKl9l
bnRyaWVzQnlVUkw7CisgICAgRGF0ZVRvRW50cmllc01hcCogX2VudHJpZXNCeURhdGU7CisgICAg
TlNNdXRhYmxlQXJyYXkgKl9vcmRlcmVkTGFzdFZpc2l0ZWREYXlzOworICAgIEJPT0wgaXRlbUxp
bWl0U2V0OworICAgIGludCBpdGVtTGltaXQ7CisgICAgQk9PTCBhZ2VJbkRheXNMaW1pdFNldDsK
KyAgICBpbnQgYWdlSW5EYXlzTGltaXQ7Cit9CisKKy0gKHZvaWQpYWRkSXRlbTooV2ViSGlzdG9y
eUl0ZW0gKillbnRyeTsKKy0gKHZvaWQpYWRkSXRlbXM6KE5TQXJyYXkgKiluZXdFbnRyaWVzOwor
LSAoQk9PTClyZW1vdmVJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5OworLSAoQk9PTClyZW1v
dmVJdGVtczooTlNBcnJheSAqKWVudHJpZXM7CistIChCT09MKXJlbW92ZUFsbEl0ZW1zOworLSAo
dm9pZClzZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDooTlNUaW1lSW50ZXJ2YWwpdGltZSBmb3JJ
dGVtOihXZWJIaXN0b3J5SXRlbSAqKWl0ZW07CisKKy0gKE5TQXJyYXkgKilvcmRlcmVkTGFzdFZp
c2l0ZWREYXlzOworLSAoTlNBcnJheSAqKW9yZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25EYXk6KE5T
Q2FsZW5kYXJEYXRlICopY2FsZW5kYXJEYXRlOworLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxT
dHJpbmc6KE5TU3RyaW5nICopVVJMU3RyaW5nOworLSAoQk9PTCljb250YWluc1VSTDooTlNVUkwg
KilVUkw7CistIChXZWJIaXN0b3J5SXRlbSAqKWl0ZW1Gb3JVUkw6KE5TVVJMICopVVJMOworLSAo
V2ViSGlzdG9yeUl0ZW0gKilpdGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmluZzsK
KworLSAoQk9PTClsb2FkRnJvbVVSTDooTlNVUkwgKilVUkwgY29sbGVjdERpc2NhcmRlZEl0ZW1z
SW50bzooTlNNdXRhYmxlQXJyYXkgKilkaXNjYXJkZWRJdGVtcyBlcnJvcjooTlNFcnJvciAqKill
cnJvcjsKKy0gKEJPT0wpc2F2ZVRvVVJMOihOU1VSTCAqKVVSTCBlcnJvcjooTlNFcnJvciAqKill
cnJvcjsKKworLSAoTlNDYWxlbmRhckRhdGUqKWFnZUxpbWl0RGF0ZTsKKworLSAodm9pZClzZXRI
aXN0b3J5SXRlbUxpbWl0OihpbnQpbGltaXQ7CistIChpbnQpaGlzdG9yeUl0ZW1MaW1pdDsKKy0g
KHZvaWQpc2V0SGlzdG9yeUFnZUluRGF5c0xpbWl0OihpbnQpbGltaXQ7CistIChpbnQpaGlzdG9y
eUFnZUluRGF5c0xpbWl0OworCistICh2b2lkKWFkZFZpc2l0ZWRMaW5rc1RvUGFnZUdyb3VwOihQ
YWdlR3JvdXAmKWdyb3VwOworCitAZW5kCisKIEBpbXBsZW1lbnRhdGlvbiBXZWJIaXN0b3J5UHJp
dmF0ZQogCiAjcHJhZ21hIG1hcmsgT0JKRUNUIEZSQU1FV09SSwpAQCAtNjksOSArMTE1LDggQEAg
TlNTdHJpbmcgKkRhdGVzQXJyYXlLZXkgPSBAIldlYkhpc3RvcnlEYQogCiAtIChpZClpbml0CiB7
Ci0gICAgaWYgKCFbc3VwZXIgaW5pdF0pIHsKKyAgICBpZiAoIVtzdXBlciBpbml0XSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICB9CiAgICAgCiAgICAgX2VudHJpZXNCeVVSTCA9IFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CiAgICAgX2VudHJpZXNCeURhdGUgPSBuZXcgRGF0
ZVRvRW50cmllc01hcDsKQEAgLTg0LDcgKzEyOSw2IEBAIE5TU3RyaW5nICpEYXRlc0FycmF5S2V5
ID0gQCJXZWJIaXN0b3J5RGEKICAgICBbX2VudHJpZXNCeVVSTCByZWxlYXNlXTsKICAgICBbX29y
ZGVyZWRMYXN0VmlzaXRlZERheXMgcmVsZWFzZV07CiAgICAgZGVsZXRlIF9lbnRyaWVzQnlEYXRl
OwotICAgIAogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIApAQCAtMTU2LDcgKzIwMCw3IEBAIFdl
Ykhpc3RvcnlEYXRlS2V5IHRpbWVJbnRlcnZhbEZvckJlZ2lubmkKICAgICBbZW50cmllc0ZvckRh
dGUgaW5zZXJ0T2JqZWN0OmVudHJ5IGF0SW5kZXg6bG93XTsKIH0KIAotLSAoQk9PTClfcmVtb3Zl
SXRlbUZyb21EYXRlQ2FjaGVzOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5CistIChCT09MKXJlbW92
ZUl0ZW1Gcm9tRGF0ZUNhY2hlczooV2ViSGlzdG9yeUl0ZW0gKillbnRyeQogewogICAgIFdlYkhp
c3RvcnlEYXRlS2V5IGRhdGVLZXk7CiAgICAgQk9PTCBmb3VuZERhdGUgPSBbc2VsZiBmaW5kS2V5
OiZkYXRlS2V5IGZvckRheTpbZW50cnkgbGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWxdXTsKQEAgLTE3
OSwyNiArMjIzLDI4IEBAIFdlYkhpc3RvcnlEYXRlS2V5IHRpbWVJbnRlcnZhbEZvckJlZ2lubmkK
ICAgICByZXR1cm4gWUVTOwogfQogCi0tIChCT09MKXJlbW92ZUl0ZW1Gb3JVUkxTdHJpbmc6IChO
U1N0cmluZyAqKVVSTFN0cmluZworLSAoQk9PTClyZW1vdmVJdGVtRm9yVVJMU3RyaW5nOihOU1N0
cmluZyAqKVVSTFN0cmluZwogewotICAgIFdlYkhpc3RvcnlJdGVtICplbnRyeSA9IFtfZW50cmll
c0J5VVJMIG9iamVjdEZvcktleTogVVJMU3RyaW5nXTsKLSAgICBpZiAoZW50cnkgPT0gbmlsKSB7
CisgICAgV2ViSGlzdG9yeUl0ZW0gKmVudHJ5ID0gW19lbnRyaWVzQnlVUkwgb2JqZWN0Rm9yS2V5
OlVSTFN0cmluZ107CisgICAgaWYgKCFlbnRyeSkKICAgICAgICAgcmV0dXJuIE5POwotICAgIH0K
IAotICAgIFtfZW50cmllc0J5VVJMIHJlbW92ZU9iamVjdEZvcktleTogVVJMU3RyaW5nXTsKKyAg
ICBbX2VudHJpZXNCeVVSTCByZW1vdmVPYmplY3RGb3JLZXk6VVJMU3RyaW5nXTsKICAgICAKICNp
ZiBBU1NFUlRfRElTQUJMRUQKLSAgICBbc2VsZiBfcmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzOmVu
dHJ5XTsKKyAgICBbc2VsZiByZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6ZW50cnldOwogI2Vsc2UK
LSAgICBCT09MIGl0ZW1XYXNJbkRhdGVDYWNoZXMgPSBbc2VsZiBfcmVtb3ZlSXRlbUZyb21EYXRl
Q2FjaGVzOmVudHJ5XTsKKyAgICBCT09MIGl0ZW1XYXNJbkRhdGVDYWNoZXMgPSBbc2VsZiByZW1v
dmVJdGVtRnJvbURhdGVDYWNoZXM6ZW50cnldOwogICAgIEFTU0VSVChpdGVtV2FzSW5EYXRlQ2Fj
aGVzKTsKICNlbmRpZgogCisgICAgaWYgKCFbX2VudHJpZXNCeVVSTCBjb3VudF0pCisgICAgICAg
IFBhZ2VHcm91cDo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7CisKICAgICByZXR1cm4gWUVTOwog
fQogCi0tICh2b2lkKV9hZGRJdGVtVG9EYXRlQ2FjaGVzOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5
CistICh2b2lkKWFkZEl0ZW1Ub0RhdGVDYWNoZXM6KFdlYkhpc3RvcnlJdGVtICopZW50cnkKIHsK
ICAgICBXZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5OwogICAgIGlmIChbc2VsZiBmaW5kS2V5OiZk
YXRlS2V5IGZvckRheTpbZW50cnkgbGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWxdXSkKQEAgLTIzNSw3
ICsyODEsNyBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2YWxGb3JCZWdpbm5pCiAgICAg
ICAgIFtvbGRFbnRyeSByZWxlYXNlXTsKICAgICB9CiAKLSAgICBbc2VsZiBfYWRkSXRlbVRvRGF0
ZUNhY2hlczplbnRyeV07CisgICAgW3NlbGYgYWRkSXRlbVRvRGF0ZUNhY2hlczplbnRyeV07CiAg
ICAgW19lbnRyaWVzQnlVUkwgc2V0T2JqZWN0OmVudHJ5IGZvcktleTpVUkxTdHJpbmddOwogfQog
CkBAIC0yNDQsMTIgKzI5MCwxMiBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2YWxGb3JC
ZWdpbm5pCiAjaWYgQVNTRVJUX0RJU0FCTEVECiAgICAgW3NlbGYgX3JlbW92ZUl0ZW1Gcm9tRGF0
ZUNhY2hlczplbnRyeV07CiAjZWxzZQotICAgIEJPT0wgZW50cnlXYXNQcmVzZW50ID0gW3NlbGYg
X3JlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczplbnRyeV07CisgICAgQk9PTCBlbnRyeVdhc1ByZXNl
bnQgPSBbc2VsZiByZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6ZW50cnldOwogICAgIEFTU0VSVChl
bnRyeVdhc1ByZXNlbnQpOwogI2VuZGlmCiAgICAgCiAgICAgW2VudHJ5IF9zZXRMYXN0VmlzaXRl
ZFRpbWVJbnRlcnZhbDp0aW1lXTsKLSAgICBbc2VsZiBfYWRkSXRlbVRvRGF0ZUNhY2hlczplbnRy
eV07CisgICAgW3NlbGYgYWRkSXRlbVRvRGF0ZUNhY2hlczplbnRyeV07CiAKICAgICAvLyBEb24n
dCBzZW5kIG5vdGlmaWNhdGlvbiB1bnRpbCBlbnRyeSBpcyBiYWNrIGluIHRoZSByaWdodCBwbGFj
ZSBpbiB0aGUgZGF0ZSBjYWNoZXMsCiAgICAgLy8gc2luY2Ugb2JzZXJ2ZXJzIG1pZ2h0IGZldGNo
IGhpc3RvcnkgYnkgZGF0ZSB3aGVuIHRoZXkgcmVjZWl2ZSB0aGUgbm90aWZpY2F0aW9uLgpAQCAt
MjU3LDQ3ICszMDMsMzggQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5u
aQogICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTpXZWJIaXN0b3J5SXRlbUNoYW5nZWROb3Rp
ZmljYXRpb24gb2JqZWN0OmVudHJ5IHVzZXJJbmZvOm5pbF07CiB9CiAKLS0gKEJPT0wpcmVtb3Zl
SXRlbTogKFdlYkhpc3RvcnlJdGVtICopZW50cnkKKy0gKEJPT0wpcmVtb3ZlSXRlbTooV2ViSGlz
dG9yeUl0ZW0gKillbnRyeQogewotICAgIFdlYkhpc3RvcnlJdGVtICptYXRjaGluZ0VudHJ5Owot
ICAgIE5TU3RyaW5nICpVUkxTdHJpbmc7Ci0KLSAgICBVUkxTdHJpbmcgPSBbZW50cnkgVVJMU3Ry
aW5nXTsKKyAgICBOU1N0cmluZyAqVVJMU3RyaW5nID0gW2VudHJ5IFVSTFN0cmluZ107CiAKICAg
ICAvLyBJZiB0aGlzIGV4YWN0IG9iamVjdCBpc24ndCBzdG9yZWQsIHRoZW4gbWFrZSBubyBjaGFu
Z2UuCiAgICAgLy8gRklYTUU6IElzIHRoaXMgdGhlIHJpZ2h0IGJlaGF2aW9yIGlmIHRoaXMgZW50
cnkgaXNuJ3QgcHJlc2VudCwgYnV0IGFub3RoZXIgZW50cnkgZm9yIHRoZSBzYW1lIFVSTCBpcz8K
ICAgICAvLyBNYXliZSBuZWVkIHRvIGNoYW5nZSB0aGUgQVBJIHRvIG1ha2Ugc29tZXRoaW5nIGxp
a2UgcmVtb3ZlRW50cnlGb3JVUkxTdHJpbmcgcHVibGljIGluc3RlYWQuCi0gICAgbWF0Y2hpbmdF
bnRyeSA9IFtfZW50cmllc0J5VVJMIG9iamVjdEZvcktleTogVVJMU3RyaW5nXTsKLSAgICBpZiAo
bWF0Y2hpbmdFbnRyeSAhPSBlbnRyeSkgeworICAgIFdlYkhpc3RvcnlJdGVtICptYXRjaGluZ0Vu
dHJ5ID0gW19lbnRyaWVzQnlVUkwgb2JqZWN0Rm9yS2V5OlVSTFN0cmluZ107CisgICAgaWYgKG1h
dGNoaW5nRW50cnkgIT0gZW50cnkpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICB9CiAKLSAgICBb
c2VsZiByZW1vdmVJdGVtRm9yVVJMU3RyaW5nOiBVUkxTdHJpbmddOworICAgIFtzZWxmIHJlbW92
ZUl0ZW1Gb3JVUkxTdHJpbmc6VVJMU3RyaW5nXTsKIAogICAgIHJldHVybiBZRVM7CiB9CiAKLS0g
KEJPT0wpcmVtb3ZlSXRlbXM6IChOU0FycmF5ICopZW50cmllcworLSAoQk9PTClyZW1vdmVJdGVt
czooTlNBcnJheSAqKWVudHJpZXMKIHsKLSAgICBpbnQgaW5kZXgsIGNvdW50OwotCi0gICAgY291
bnQgPSBbZW50cmllcyBjb3VudF07Ci0gICAgaWYgKGNvdW50ID09IDApIHsKKyAgICBOU1VJbnRl
Z2VyIGNvdW50ID0gW2VudHJpZXMgY291bnRdOworICAgIGlmIChjb3VudCA9PSAwKQogICAgICAg
ICByZXR1cm4gTk87Ci0gICAgfQogCi0gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7
ICsraW5kZXgpIHsKKyAgICBmb3IgKE5TVUludGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50
OyArK2luZGV4KQogICAgICAgICBbc2VsZiByZW1vdmVJdGVtOltlbnRyaWVzIG9iamVjdEF0SW5k
ZXg6aW5kZXhdXTsKLSAgICB9CiAgICAgCiAgICAgcmV0dXJuIFlFUzsKIH0KIAogLSAoQk9PTCly
ZW1vdmVBbGxJdGVtcwogewotICAgIGlmIChbX2VudHJpZXNCeVVSTCBjb3VudF0gPT0gMCkgewor
ICAgIGlmIChfZW50cmllc0J5RGF0ZS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gTk87Ci0g
ICAgfQogCiAgICAgX2VudHJpZXNCeURhdGUtPmNsZWFyKCk7CiAgICAgW19lbnRyaWVzQnlVUkwg
cmVtb3ZlQWxsT2JqZWN0c107CkBAIC0zMDYsMjMgKzM0MywyMSBAQCBXZWJIaXN0b3J5RGF0ZUtl
eSB0aW1lSW50ZXJ2YWxGb3JCZWdpbm5pCiAgICAgW19vcmRlcmVkTGFzdFZpc2l0ZWREYXlzIHJl
bGVhc2VdOwogICAgIF9vcmRlcmVkTGFzdFZpc2l0ZWREYXlzID0gbmlsOwogCisgICAgUGFnZUdy
b3VwOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsKKwogICAgIHJldHVybiBZRVM7CiB9CiAKIC0g
KHZvaWQpYWRkSXRlbXM6KE5TQXJyYXkgKiluZXdFbnRyaWVzCiB7Ci0gICAgTlNFbnVtZXJhdG9y
ICplbnVtZXJhdG9yOwotICAgIFdlYkhpc3RvcnlJdGVtICplbnRyeTsKLQogICAgIC8vIFRoZXJl
IGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmNvbWluZyBlbnRyaWVzIGFyZSBpbiBhbnkgcGFy
dGljdWxhcgogICAgIC8vIG9yZGVyLCBidXQgaWYgdGhpcyBpcyBjYWxsZWQgd2l0aCBhIHNldCBv
ZiBlbnRyaWVzIHRoYXQgd2VyZSBjcmVhdGVkIGJ5CiAgICAgLy8gaXRlcmF0aW5nIHRocm91Z2gg
dGhlIHJlc3VsdHMgb2Ygb3JkZXJlZExhc3RWaXNpdGVkRGF5cyBhbmQgb3JkZXJlZEl0ZW1zTGFz
dFZpc2l0ZWRPbkRheXkKICAgICAvLyB0aGVuIHRoZXkgd2lsbCBiZSBvcmRlcmVkIGNocm9ub2xv
Z2ljYWxseSBmcm9tIG5ld2VzdCB0byBvbGRlc3QuIFdlIGNhbiBtYWtlIGFkZGluZyB0aGVtCiAg
ICAgLy8gZmFzdGVyIChmZXdlciBjb21wYXJlcykgYnkgaW5zZXJ0aW5nIHRoZW0gZnJvbSBvbGRl
c3QgdG8gbmV3ZXN0LgotICAgIGVudW1lcmF0b3IgPSBbbmV3RW50cmllcyByZXZlcnNlT2JqZWN0
RW51bWVyYXRvcl07Ci0gICAgd2hpbGUgKChlbnRyeSA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3Rd
KSAhPSBuaWwpIHsKKyAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbbmV3RW50cmllcyBy
ZXZlcnNlT2JqZWN0RW51bWVyYXRvcl07CisgICAgd2hpbGUgKFdlYkhpc3RvcnlJdGVtICplbnRy
eSA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKQogICAgICAgICBbc2VsZiBhZGRJdGVtOmVudHJ5
XTsKLSAgICB9CiB9CiAKICNwcmFnbWEgbWFyayBEQVRFLUJBU0VEIFJFVFJJRVZBTApAQCAtMzQ5
LDI4ICszODQsMjcgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQog
ICAgIHJldHVybiBfb3JkZXJlZExhc3RWaXNpdGVkRGF5czsKIH0KIAotLSAoTlNBcnJheSAqKW9y
ZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25EYXk6IChOU0NhbGVuZGFyRGF0ZSAqKWRhdGUKKy0gKE5T
QXJyYXkgKilvcmRlcmVkSXRlbXNMYXN0VmlzaXRlZE9uRGF5OihOU0NhbGVuZGFyRGF0ZSAqKWRh
dGUKIHsKICAgICBXZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5OwotICAgIGlmIChbc2VsZiBmaW5k
S2V5OiZkYXRlS2V5IGZvckRheTpbZGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVd
XSkKLSAgICAgICAgcmV0dXJuIF9lbnRyaWVzQnlEYXRlLT5nZXQoZGF0ZUtleSkuZ2V0KCk7Ci0K
LSAgICByZXR1cm4gbmlsOworICAgIGlmICghW3NlbGYgZmluZEtleTomZGF0ZUtleSBmb3JEYXk6
W2RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXV0pCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgcmV0dXJuIF9lbnRyaWVzQnlEYXRlLT5nZXQoZGF0ZUtleSkuZ2V0KCk7CiB9CiAK
ICNwcmFnbWEgbWFyayBVUkwgTUFUQ0hJTkcKIAogLSAoV2ViSGlzdG9yeUl0ZW0gKilpdGVtRm9y
VVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmluZwogewotICAgIHJldHVybiBbX2VudHJpZXNC
eVVSTCBvYmplY3RGb3JLZXk6IFVSTFN0cmluZ107CisgICAgcmV0dXJuIFtfZW50cmllc0J5VVJM
IG9iamVjdEZvcktleTpVUkxTdHJpbmddOwogfQogCi0tIChCT09MKWNvbnRhaW5zSXRlbUZvclVS
TFN0cmluZzogKE5TU3RyaW5nICopVVJMU3RyaW5nCistIChCT09MKWNvbnRhaW5zSXRlbUZvclVS
TFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmcKIHsKICAgICByZXR1cm4gW3NlbGYgaXRlbUZv
clVSTFN0cmluZzpVUkxTdHJpbmddICE9IG5pbDsKIH0KIAotLSAoQk9PTCljb250YWluc1VSTDog
KE5TVVJMICopVVJMCistIChCT09MKWNvbnRhaW5zVVJMOihOU1VSTCAqKVVSTAogewogICAgIHJl
dHVybiBbc2VsZiBpdGVtRm9yVVJMU3RyaW5nOltVUkwgX3dlYl9vcmlnaW5hbERhdGFBc1N0cmlu
Z11dICE9IG5pbDsKIH0KQEAgLTM5Miw3ICs0MjYsNyBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1l
SW50ZXJ2YWxGb3JCZWdpbm5pCiB7CiAgICAgaWYgKGFnZUluRGF5c0xpbWl0U2V0KQogICAgICAg
ICByZXR1cm4gYWdlSW5EYXlzTGltaXQ7Ci0gICAgcmV0dXJuIFtbTlNVc2VyRGVmYXVsdHMgc3Rh
bmRhcmRVc2VyRGVmYXVsdHNdIGludGVnZXJGb3JLZXk6IEAiV2ViS2l0SGlzdG9yeUFnZUluRGF5
c0xpbWl0Il07CisgICAgcmV0dXJuIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdIGludGVnZXJGb3JLZXk6QCJXZWJLaXRIaXN0b3J5QWdlSW5EYXlzTGltaXQiXTsKIH0KIAog
LSAodm9pZClzZXRIaXN0b3J5SXRlbUxpbWl0OihpbnQpbGltaXQKQEAgLTQwNSwxMiArNDM5LDEy
IEBAIFdlYkhpc3RvcnlEYXRlS2V5IHRpbWVJbnRlcnZhbEZvckJlZ2lubmkKIHsKICAgICBpZiAo
aXRlbUxpbWl0U2V0KQogICAgICAgICByZXR1cm4gaXRlbUxpbWl0OwotICAgIHJldHVybiBbW05T
VXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBpbnRlZ2VyRm9yS2V5OiBAIldlYktp
dEhpc3RvcnlJdGVtTGltaXQiXTsKKyAgICByZXR1cm4gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gaW50ZWdlckZvcktleTpAIldlYktpdEhpc3RvcnlJdGVtTGltaXQiXTsK
IH0KIAogLy8gUmV0dXJuIGEgZGF0ZSB0aGF0IG1hcmtzIHRoZSBhZ2UgbGltaXQgZm9yIGhpc3Rv
cnkgZW50cmllcyBzYXZlZCB0byBvcgogLy8gbG9hZGVkIGZyb20gZGlzay4gQW55IGVudHJ5IG9s
ZGVyIHRoYW4gdGhpcyBpdGVtIHNob3VsZCBiZSByZWplY3RlZC4KLS0gKE5TQ2FsZW5kYXJEYXRl
ICopX2FnZUxpbWl0RGF0ZQorLSAoTlNDYWxlbmRhckRhdGUgKilhZ2VMaW1pdERhdGUKIHsKICAg
ICByZXR1cm4gW1tOU0NhbGVuZGFyRGF0ZSBjYWxlbmRhckRhdGVdIGRhdGVCeUFkZGluZ1llYXJz
OjAgbW9udGhzOjAgZGF5czotW3NlbGYgaGlzdG9yeUFnZUluRGF5c0xpbWl0XQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91cnM6MCBtaW51
dGVzOjAgc2Vjb25kczowXTsKQEAgLTQ0MCw3ICs0NzQsNyBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0
aW1lSW50ZXJ2YWxGb3JCZWdpbm5pCiAgICAgcmV0dXJuIGFycmF5UmVwOwogfQogCi0tIChCT09M
KV9sb2FkSGlzdG9yeUd1dHNGcm9tVVJMOihOU1VSTCAqKVVSTCBzYXZlZEl0ZW1zQ291bnQ6KGlu
dCAqKW51bWJlck9mSXRlbXNMb2FkZWQgY29sbGVjdERpc2NhcmRlZEl0ZW1zSW50bzooTlNNdXRh
YmxlQXJyYXkgKilkaXNjYXJkZWRJdGVtcyBlcnJvcjooTlNFcnJvciAqKillcnJvcgorLSAoQk9P
TClsb2FkSGlzdG9yeUd1dHNGcm9tVVJMOihOU1VSTCAqKVVSTCBzYXZlZEl0ZW1zQ291bnQ6KGlu
dCAqKW51bWJlck9mSXRlbXNMb2FkZWQgY29sbGVjdERpc2NhcmRlZEl0ZW1zSW50bzooTlNNdXRh
YmxlQXJyYXkgKilkaXNjYXJkZWRJdGVtcyBlcnJvcjooTlNFcnJvciAqKillcnJvcgogewogICAg
ICpudW1iZXJPZkl0ZW1zTG9hZGVkID0gMDsKICAgICBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkg
PSBuaWw7CkBAIC00NzQsMTIgKzUwOCwxMSBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2
YWxGb3JCZWdpbm5pCiAgICAgTlNOdW1iZXIgKmZpbGVWZXJzaW9uT2JqZWN0ID0gW2RpY3Rpb25h
cnkgb2JqZWN0Rm9yS2V5OkZpbGVWZXJzaW9uS2V5XTsKICAgICBpbnQgZmlsZVZlcnNpb247CiAg
ICAgLy8gd2UgZG9uJ3QgdHJ1c3QgZGF0YSBvYnRhaW5lZCBmcm9tIGVsc2V3aGVyZSwgc28gZG91
YmxlLWNoZWNrCi0gICAgaWYgKGZpbGVWZXJzaW9uT2JqZWN0ICE9IG5pbCAmJiBbZmlsZVZlcnNp
b25PYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkgewotICAgICAgICBmaWxl
VmVyc2lvbiA9IFtmaWxlVmVyc2lvbk9iamVjdCBpbnRWYWx1ZV07Ci0gICAgfSBlbHNlIHsKKyAg
ICBpZiAoIWZpbGVWZXJzaW9uT2JqZWN0IHx8ICFbZmlsZVZlcnNpb25PYmplY3QgaXNLaW5kT2ZD
bGFzczpbTlNOdW1iZXIgY2xhc3NdXSkgewogICAgICAgICBMT0dfRVJST1IoImhpc3RvcnkgZmls
ZSB2ZXJzaW9uIGNhbid0IGJlIGRldGVybWluZWQsIHRoZXJlZm9yZSBub3QgbG9hZGluZyIpOwog
ICAgICAgICByZXR1cm4gTk87CiAgICAgfQorICAgIGZpbGVWZXJzaW9uID0gW2ZpbGVWZXJzaW9u
T2JqZWN0IGludFZhbHVlXTsKICAgICBpZiAoZmlsZVZlcnNpb24gPiBjdXJyZW50RmlsZVZlcnNp
b24pIHsKICAgICAgICAgTE9HX0VSUk9SKCJoaXN0b3J5IGZpbGUgdmVyc2lvbiBpcyAlZCwgbmV3
ZXIgdGhhbiBuZXdlc3Qga25vd24gdmVyc2lvbiAlZCwgdGhlcmVmb3JlIG5vdCBsb2FkaW5nIiwg
ZmlsZVZlcnNpb24sIGN1cnJlbnRGaWxlVmVyc2lvbik7CiAgICAgICAgIHJldHVybiBOTzsKQEAg
LTQ4OCw3ICs1MjEsNyBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2YWxGb3JCZWdpbm5p
CiAgICAgTlNBcnJheSAqYXJyYXkgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6RGF0ZXNBcnJh
eUtleV07CiAKICAgICBpbnQgaXRlbUNvdW50TGltaXQgPSBbc2VsZiBoaXN0b3J5SXRlbUxpbWl0
XTsKLSAgICBOU1RpbWVJbnRlcnZhbCBhZ2VMaW1pdERhdGUgPSBbW3NlbGYgX2FnZUxpbWl0RGF0
ZV0gdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKKyAgICBOU1RpbWVJbnRlcnZhbCBh
Z2VMaW1pdERhdGUgPSBbW3NlbGYgYWdlTGltaXREYXRlXSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVy
ZW5jZURhdGVdOwogICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFthcnJheSBvYmplY3RF
bnVtZXJhdG9yXTsKICAgICBCT09MIGFnZUxpbWl0UGFzc2VkID0gTk87CiAgICAgQk9PTCBpdGVt
TGltaXRQYXNzZWQgPSBOTzsKQEAgLTUzMCwxNTAgKzU2Myw2NSBAQCBXZWJIaXN0b3J5RGF0ZUtl
eSB0aW1lSW50ZXJ2YWxGb3JCZWdpbm5pCiAKIC0gKEJPT0wpbG9hZEZyb21VUkw6KE5TVVJMICop
VVJMIGNvbGxlY3REaXNjYXJkZWRJdGVtc0ludG86KE5TTXV0YWJsZUFycmF5ICopZGlzY2FyZGVk
SXRlbXMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKIHsKLSAgICBpbnQgbnVtYmVyT2ZJdGVtczsK
LSAgICBkb3VibGUgc3RhcnQsIGR1cmF0aW9uOwotICAgIEJPT0wgcmVzdWx0OworICAgIGRvdWJs
ZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwogCi0gICAgc3RhcnQgPSBDRkFi
c29sdXRlVGltZUdldEN1cnJlbnQoKTsKLSAgICByZXN1bHQgPSBbc2VsZiBfbG9hZEhpc3RvcnlH
dXRzRnJvbVVSTDpVUkwgc2F2ZWRJdGVtc0NvdW50OiZudW1iZXJPZkl0ZW1zIGNvbGxlY3REaXNj
YXJkZWRJdGVtc0ludG86ZGlzY2FyZGVkSXRlbXMgZXJyb3I6ZXJyb3JdOworICAgIGludCBudW1i
ZXJPZkl0ZW1zOworICAgIGlmICghW3NlbGYgbG9hZEhpc3RvcnlHdXRzRnJvbVVSTDpVUkwgc2F2
ZWRJdGVtc0NvdW50OiZudW1iZXJPZkl0ZW1zIGNvbGxlY3REaXNjYXJkZWRJdGVtc0ludG86ZGlz
Y2FyZGVkSXRlbXMgZXJyb3I6ZXJyb3JdKQorICAgICAgICByZXR1cm4gTk87CiAKLSAgICBpZiAo
cmVzdWx0KSB7Ci0gICAgICAgIGR1cmF0aW9uID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkg
LSBzdGFydDsKLSAgICAgICAgTE9HKFRpbWluZywgImxvYWRpbmcgJWQgaGlzdG9yeSBlbnRyaWVz
IGZyb20gJUAgdG9vayAlZiBzZWNvbmRzIiwKLSAgICAgICAgICAgIG51bWJlck9mSXRlbXMsIFVS
TCwgZHVyYXRpb24pOwotICAgIH0KKyAgICBkb3VibGUgZHVyYXRpb24gPSBDRkFic29sdXRlVGlt
ZUdldEN1cnJlbnQoKSAtIHN0YXJ0OworICAgIExPRyhUaW1pbmcsICJsb2FkaW5nICVkIGhpc3Rv
cnkgZW50cmllcyBmcm9tICVAIHRvb2sgJWYgc2Vjb25kcyIsIG51bWJlck9mSXRlbXMsIFVSTCwg
ZHVyYXRpb24pOwogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gWUVTOwogfQogCi0t
IChCT09MKV9zYXZlSGlzdG9yeUd1dHM6IChpbnQgKiludW1iZXJPZkl0ZW1zU2F2ZWQgVVJMOihO
U1VSTCAqKVVSTCBlcnJvcjooTlNFcnJvciAqKillcnJvcgorLSAoQk9PTClzYXZlSGlzdG9yeUd1
dHM6KGludCAqKW51bWJlck9mSXRlbXNTYXZlZCBVUkw6KE5TVVJMICopVVJMIGVycm9yOihOU0Vy
cm9yICoqKWVycm9yCiB7CiAgICAgKm51bWJlck9mSXRlbXNTYXZlZCA9IDA7CiAKLSAgICAvLyBG
SVhNRTogIENvcnJlY3RseSByZXBvcnQgZXJyb3Igd2hlbiBuZXcgQVBJIGlzIHJlYWR5LgotICAg
IGlmIChlcnJvcikKLSAgICAgICAgKmVycm9yID0gbmlsOwotCiAgICAgTlNBcnJheSAqYXJyYXkg
PSBbc2VsZiBhcnJheVJlcHJlc2VudGF0aW9uXTsKICAgICBOU0RpY3Rpb25hcnkgKmRpY3Rpb25h
cnkgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CiAgICAgICAg
IGFycmF5LCBEYXRlc0FycmF5S2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpj
dXJyZW50RmlsZVZlcnNpb25dLCBGaWxlVmVyc2lvbktleSwKICAgICAgICAgbmlsXTsKICAgICBO
U0RhdGEgKmRhdGEgPSBbTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIGRhdGFGcm9tUHJvcGVy
dHlMaXN0OmRpY3Rpb25hcnkgZm9ybWF0Ok5TUHJvcGVydHlMaXN0QmluYXJ5Rm9ybWF0X3YxXzAg
ZXJyb3JEZXNjcmlwdGlvbjpuaWxdOwotICAgIGlmICghW2RhdGEgd3JpdGVUb1VSTDpVUkwgYXRv
bWljYWxseTpZRVNdKSB7CisgICAgaWYgKCFbZGF0YSB3cml0ZVRvVVJMOlVSTCBvcHRpb25zOjAg
ZXJyb3I6ZXJyb3JdKSB7CiAgICAgICAgIExPR19FUlJPUigiYXR0ZW1wdCB0byBzYXZlICVAIHRv
ICVAIGZhaWxlZCIsIGRpY3Rpb25hcnksIFVSTCk7CiAgICAgICAgIHJldHVybiBOTzsKICAgICB9
Ci0gICAgCisKICAgICAqbnVtYmVyT2ZJdGVtc1NhdmVkID0gW2FycmF5IGNvdW50XTsKICAgICBy
ZXR1cm4gWUVTOwogfQogCiAtIChCT09MKXNhdmVUb1VSTDooTlNVUkwgKilVUkwgZXJyb3I6KE5T
RXJyb3IgKiopZXJyb3IKIHsKLSAgICBpbnQgbnVtYmVyT2ZJdGVtczsKLSAgICBkb3VibGUgc3Rh
cnQsIGR1cmF0aW9uOwotICAgIEJPT0wgcmVzdWx0OwotCi0gICAgc3RhcnQgPSBDRkFic29sdXRl
VGltZUdldEN1cnJlbnQoKTsKLSAgICByZXN1bHQgPSBbc2VsZiBfc2F2ZUhpc3RvcnlHdXRzOiAm
bnVtYmVyT2ZJdGVtcyBVUkw6VVJMIGVycm9yOmVycm9yXTsKLQotICAgIGlmIChyZXN1bHQpIHsK
LSAgICAgICAgZHVyYXRpb24gPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0Owot
ICAgICAgICBMT0coVGltaW5nLCAic2F2aW5nICVkIGhpc3RvcnkgZW50cmllcyB0byAlQCB0b29r
ICVmIHNlY29uZHMiLAotICAgICAgICAgICAgbnVtYmVyT2ZJdGVtcywgVVJMLCBkdXJhdGlvbik7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQGVuZAotCi1AaW50ZXJmYWNlIF9X
ZWJDb3JlSGlzdG9yeVByb3ZpZGVyIDogTlNPYmplY3QgIDxXZWJDb3JlSGlzdG9yeVByb3ZpZGVy
PiAKLXsKLSAgICBXZWJIaXN0b3J5ICpoaXN0b3J5OwotfQotLSBpbml0V2l0aEhpc3Rvcnk6IChX
ZWJIaXN0b3J5ICopaDsKLUBlbmQKKyAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdl
dEN1cnJlbnQoKTsKIAotQGltcGxlbWVudGF0aW9uIF9XZWJDb3JlSGlzdG9yeVByb3ZpZGVyCi0t
IGluaXRXaXRoSGlzdG9yeTogKFdlYkhpc3RvcnkgKiloCi17Ci0gICAgaGlzdG9yeSA9IFtoIHJl
dGFpbl07Ci0gICAgcmV0dXJuIHNlbGY7Ci19CisgICAgaW50IG51bWJlck9mSXRlbXM7CisgICAg
aWYgKCFbc2VsZiBzYXZlSGlzdG9yeUd1dHM6Jm51bWJlck9mSXRlbXMgVVJMOlVSTCBlcnJvcjpl
cnJvcl0pCisgICAgICAgIHJldHVybiBOTzsKIAotc3RhdGljIGlubGluZSBib29sIG1hdGNoTGV0
dGVyKGNoYXIgYywgY2hhciBsb3dlcmNhc2VMZXR0ZXIpCi17Ci0gICAgcmV0dXJuIChjIHwgMHgy
MCkgPT0gbG93ZXJjYXNlTGV0dGVyOwotfQorICAgIGRvdWJsZSBkdXJhdGlvbiA9IENGQWJzb2x1
dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7CisgICAgTE9HKFRpbWluZywgInNhdmluZyAlZCBo
aXN0b3J5IGVudHJpZXMgdG8gJUAgdG9vayAlZiBzZWNvbmRzIiwgbnVtYmVyT2ZJdGVtcywgVVJM
LCBkdXJhdGlvbik7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaFVuaWNvZGVMZXR0ZXIoVW5p
Q2hhciBjLCBVbmlDaGFyIGxvd2VyY2FzZUxldHRlcikKLXsKLSAgICByZXR1cm4gKGMgfCAweDIw
KSA9PSBsb3dlcmNhc2VMZXR0ZXI7CisgICAgcmV0dXJuIFlFUzsKIH0KIAotI2RlZmluZSBVTklD
T0RFX0JVRkZFUl9TSVpFIDEwMjQKLQotLSAoQk9PTCljb250YWluc1VSTDooY29uc3QgVW5pQ2hh
ciAqKXVuaWNvZGUgbGVuZ3RoOih1bnNpZ25lZClsZW5ndGgKKy0gKHZvaWQpYWRkVmlzaXRlZExp
bmtzVG9QYWdlR3JvdXA6KFBhZ2VHcm91cCYpZ3JvdXAKIHsKLSAgICBjb25zdCBVbmlDaGFyICp1
bmljb2RlU3RyID0gdW5pY29kZTsKLSAgICBVbmlDaGFyIHN0YXRpY1N0ckJ1ZmZlcltVTklDT0RF
X0JVRkZFUl9TSVpFXTsKLSAgICBVbmlDaGFyICpzdHJCdWZmZXIgPSBOVUxMOwotICAgIEJPT0wg
bmVlZFRvQWRkU2xhc2ggPSBGQUxTRTsKLQotICAgIGlmIChsZW5ndGggPj0gNiAmJgotICAgICAg
ICBtYXRjaFVuaWNvZGVMZXR0ZXIodW5pY29kZVswXSwgJ2gnKSAmJgotICAgICAgICBtYXRjaFVu
aWNvZGVMZXR0ZXIodW5pY29kZVsxXSwgJ3QnKSAmJgotICAgICAgICBtYXRjaFVuaWNvZGVMZXR0
ZXIodW5pY29kZVsyXSwgJ3QnKSAmJgotICAgICAgICBtYXRjaFVuaWNvZGVMZXR0ZXIodW5pY29k
ZVszXSwgJ3AnKSAmJgotICAgICAgICAodW5pY29kZVs0XSA9PSAnOicgCi0gICAgICAgICB8fCAo
bWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbNF0sICdzJykgJiYgdW5pY29kZVs1XSA9PSAnOicp
KSkgewotCi0gICAgICAgIHVuc2lnbmVkIHBvcyA9IHVuaWNvZGVbNF0gPT0gJzonID8gNSA6IDY7
Ci0KLSAgICAgICAgLy8gc2tpcCBwb3NzaWJsZSBpbml0aWFsIHR3byBzbGFzaGVzCi0gICAgICAg
IGlmIChwb3MgKyAxIDwgbGVuZ3RoICYmIHVuaWNvZGVbcG9zXSA9PSAnLycgJiYgdW5pY29kZVtw
b3MgKyAxXSA9PSAnLycpIHsKLSAgICAgICAgICAgIHBvcyArPSAyOwotICAgICAgICB9Ci0KLSAg
ICAgICAgd2hpbGUgKHBvcyA8IGxlbmd0aCAmJiB1bmljb2RlW3Bvc10gIT0gJy8nKSB7Ci0gICAg
ICAgICAgICBwb3MrKzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwb3MgPT0gbGVuZ3RoKSB7
Ci0gICAgICAgICAgICBuZWVkVG9BZGRTbGFzaCA9IFRSVUU7CisgICAgTlNFbnVtZXJhdG9yICpl
bnVtZXJhdG9yID0gW19lbnRyaWVzQnlVUkwga2V5RW51bWVyYXRvcl07CisgICAgd2hpbGUgKE5T
U3RyaW5nICp1cmwgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgeworICAgICAgICBzaXplX3Qg
bGVuZ3RoID0gW3VybCBsZW5ndGhdOworICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9
IENGU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihyZWludGVycHJldF9jYXN0PENGU3RyaW5nUmVmPih1
cmwpKTsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnMpCisgICAgICAgICAgICBncm91cC5hZGRWaXNp
dGVkTGluayhjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IFZlY3RvcjxVQ2hhciwgNTEyPiBidWZmZXIobGVuZ3RoKTsKKyAgICAgICAgICAgIFt1cmwgZ2V0
Q2hhcmFjdGVyczpidWZmZXIuZGF0YSgpXTsKKyAgICAgICAgICAgIGdyb3VwLmFkZFZpc2l0ZWRM
aW5rKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBpZiAo
bmVlZFRvQWRkU2xhc2gpIHsKLSAgICAgICAgaWYgKGxlbmd0aCArIDEgPD0gVU5JQ09ERV9CVUZG
RVJfU0laRSkgewotICAgICAgICAgICAgc3RyQnVmZmVyID0gc3RhdGljU3RyQnVmZmVyOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RyQnVmZmVyID0gKFVuaUNoYXIqKW1hbGxvYyhz
aXplb2YoVW5pQ2hhcikgKiAobGVuZ3RoICsgMSkpOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNw
eShzdHJCdWZmZXIsIHVuaWNvZGUsIDIgKiBsZW5ndGgpOwotICAgICAgICBzdHJCdWZmZXJbbGVu
Z3RoXSA9ICcvJzsKLSAgICAgICAgbGVuZ3RoKys7Ci0KLSAgICAgICAgdW5pY29kZVN0ciA9IHN0
ckJ1ZmZlcjsKLSAgICB9Ci0KLSAgICBDRlN0cmluZ1JlZiBzdHIgPSBDRlN0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzTm9Db3B5KE5VTEwsIHVuaWNvZGVTdHIsIGxlbmd0aCwga0NGQWxsb2NhdG9y
TnVsbCk7Ci0gICAgQk9PTCByZXN1bHQgPSBbaGlzdG9yeSBjb250YWluc0l0ZW1Gb3JVUkxTdHJp
bmc6KGlkKXN0cl07Ci0gICAgQ0ZSZWxlYXNlKHN0cik7Ci0KLSAgICBpZiAoc3RyQnVmZmVyICE9
IHN0YXRpY1N0ckJ1ZmZlcikgewotICAgICAgICBmcmVlKHN0ckJ1ZmZlcik7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW2hpc3Rvcnkg
cmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCiBAZW5kCkBAIC02ODUsMTMgKzYz
MywxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hVbmljb2RlTGV0dGVyKFVuCiAgICAgcmV0
dXJuIF9zaGFyZWRIaXN0b3J5OwogfQogCi0KLSsgKHZvaWQpc2V0T3B0aW9uYWxTaGFyZWRIaXN0
b3J5OiAoV2ViSGlzdG9yeSAqKWhpc3RvcnkKKysgKHZvaWQpc2V0T3B0aW9uYWxTaGFyZWRIaXN0
b3J5OihXZWJIaXN0b3J5ICopaGlzdG9yeQogewotICAgIC8vIEZJWE1FLiAgTmVlZCB0byB0aGlu
ayBhYm91dCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgV2ViSGlzdG9yeSBwZXIgYXBwbGljYXRpb24K
KyAgICAvLyBGSVhNRTogTmVlZCB0byB0aGluayBhYm91dCBtdWx0aXBsZSBpbnN0YW5jZXMgb2Yg
V2ViSGlzdG9yeSBwZXIgYXBwbGljYXRpb24KICAgICAvLyBhbmQgY29ycmVjdCBzeW5jaHJvbml6
YXRpb24gb2YgaGlzdG9yeSBmaWxlIGJldHdlZW4gYXBwbGljYXRpb25zLgotICAgIFtXZWJDb3Jl
SGlzdG9yeSBzZXRIaXN0b3J5UHJvdmlkZXI6IFtbW19XZWJDb3JlSGlzdG9yeVByb3ZpZGVyIGFs
bG9jXSBpbml0V2l0aEhpc3Rvcnk6IGhpc3RvcnldIGF1dG9yZWxlYXNlXV07Ci0gICAgaWYgKF9z
aGFyZWRIaXN0b3J5ICE9IGhpc3RvcnkpeworICAgIGlmIChfc2hhcmVkSGlzdG9yeSAhPSBoaXN0
b3J5KSB7CiAgICAgICAgIFtfc2hhcmVkSGlzdG9yeSByZWxlYXNlXTsKICAgICAgICAgX3NoYXJl
ZEhpc3RvcnkgPSBbaGlzdG9yeSByZXRhaW5dOwogICAgIH0KQEAgLTY5OSwxMCArNjQ1LDEwIEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaFVuaWNvZGVMZXR0ZXIoVW4KIAogLSAoaWQpaW5pdAog
ewotICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkgIT0gbmlsKSB7Ci0gICAgICAgIF9oaXN0
b3J5UHJpdmF0ZSA9IFtbV2ViSGlzdG9yeVByaXZhdGUgYWxsb2NdIGluaXRdOwotICAgIH0KLQor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIF9oaXN0b3J5UHJpdmF0ZSA9IFtbV2ViSGlzdG9yeVByaXZhdGUgYWxsb2NdIGlu
aXRdOwogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC03MTgsNDAgKzY2NCwxNCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgbWF0Y2hVbmljb2RlTGV0dGVyKFVuCiB7CiAgICAgTlNEaWN0aW9uYXJ5ICp1
c2VySW5mbyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czplbnRy
aWVzLCBXZWJIaXN0b3J5SXRlbXNLZXksIG5pbF07CiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXQotICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTogbmFtZSBvYmpl
Y3Q6IHNlbGYgdXNlckluZm86IHVzZXJJbmZvXTsKLX0KLQotLSAoV2ViSGlzdG9yeUl0ZW0gKilh
ZGRJdGVtRm9yVVJMOiAoTlNVUkwgKilVUkwKLXsKLSAgICBXZWJIaXN0b3J5SXRlbSAqZW50cnkg
PSBbW1dlYkhpc3RvcnlJdGVtIGFsbG9jXSBpbml0V2l0aFVSTDpVUkwgdGl0bGU6bmlsXTsKLSAg
ICBbZW50cnkgX3NldExhc3RWaXNpdGVkVGltZUludGVydmFsOiBbTlNEYXRlIHRpbWVJbnRlcnZh
bFNpbmNlUmVmZXJlbmNlRGF0ZV1dOwotICAgIFtzZWxmIGFkZEl0ZW06IGVudHJ5XTsKLSAgICBb
ZW50cnkgcmVsZWFzZV07Ci0gICAgcmV0dXJuIGVudHJ5OwotfQotCi0KLS0gKHZvaWQpYWRkSXRl
bTogKFdlYkhpc3RvcnlJdGVtICopZW50cnkKLXsKLSAgICBMT0cgKEhpc3RvcnksICJhZGRpbmcg
JUAiLCBlbnRyeSk7Ci0gICAgW19oaXN0b3J5UHJpdmF0ZSBhZGRJdGVtOiBlbnRyeV07Ci0gICAg
W3NlbGYgX3NlbmROb3RpZmljYXRpb246IFdlYkhpc3RvcnlJdGVtc0FkZGVkTm90aWZpY2F0aW9u
Ci0gICAgICAgICAgICAgICAgICAgIGVudHJpZXM6IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpl
bnRyeV1dOworICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTpuYW1lIG9iamVjdDpzZWxmIHVz
ZXJJbmZvOnVzZXJJbmZvXTsKIH0KIAotLSAodm9pZClyZW1vdmVJdGVtOiAoV2ViSGlzdG9yeUl0
ZW0gKillbnRyeQotewotICAgIGlmIChbX2hpc3RvcnlQcml2YXRlIHJlbW92ZUl0ZW06IGVudHJ5
XSkgewotICAgICAgICBbc2VsZiBfc2VuZE5vdGlmaWNhdGlvbjogV2ViSGlzdG9yeUl0ZW1zUmVt
b3ZlZE5vdGlmaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllczogW05TQXJy
YXkgYXJyYXlXaXRoT2JqZWN0OmVudHJ5XV07Ci0gICAgfQotfQotCi0tICh2b2lkKXJlbW92ZUl0
ZW1zOiAoTlNBcnJheSAqKWVudHJpZXMKKy0gKHZvaWQpcmVtb3ZlSXRlbXM6KE5TQXJyYXkgKill
bnRyaWVzCiB7CiAgICAgaWYgKFtfaGlzdG9yeVByaXZhdGUgcmVtb3ZlSXRlbXM6ZW50cmllc10p
IHsKLSAgICAgICAgW3NlbGYgX3NlbmROb3RpZmljYXRpb246IFdlYkhpc3RvcnlJdGVtc1JlbW92
ZWROb3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXM6IGVudHJpZXNd
OworICAgICAgICBbc2VsZiBfc2VuZE5vdGlmaWNhdGlvbjpXZWJIaXN0b3J5SXRlbXNSZW1vdmVk
Tm90aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOmVudHJpZXNdOwog
ICAgIH0KIH0KIApAQCAtNzU5LDIxICs2NzksMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1hdGNo
VW5pY29kZUxldHRlcihVbgogewogICAgIGlmIChbX2hpc3RvcnlQcml2YXRlIHJlbW92ZUFsbEl0
ZW1zXSkgewogICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdCi0g
ICAgICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTogV2ViSGlzdG9yeUFsbEl0ZW1zUmVtb3Zl
ZE5vdGlmaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHNlbGZdOwor
ICAgICAgICAgICAgcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViSGlzdG9yeUFsbEl0ZW1zUmVtb3Zl
ZE5vdGlmaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6c2VsZl07CiAg
ICAgfQogfQogCiAtICh2b2lkKWFkZEl0ZW1zOihOU0FycmF5ICopbmV3RW50cmllcwogewogICAg
IFtfaGlzdG9yeVByaXZhdGUgYWRkSXRlbXM6bmV3RW50cmllc107Ci0gICAgW3NlbGYgX3NlbmRO
b3RpZmljYXRpb246IFdlYkhpc3RvcnlJdGVtc0FkZGVkTm90aWZpY2F0aW9uCi0gICAgICAgICAg
ICAgICAgICAgIGVudHJpZXM6IG5ld0VudHJpZXNdOwotfQotCi0tICh2b2lkKXNldExhc3RWaXNp
dGVkVGltZUludGVydmFsOihOU1RpbWVJbnRlcnZhbCl0aW1lIGZvckl0ZW06KFdlYkhpc3RvcnlJ
dGVtICopZW50cnkKLXsKLSAgICBbX2hpc3RvcnlQcml2YXRlIHNldExhc3RWaXNpdGVkVGltZUlu
dGVydmFsOnRpbWUgZm9ySXRlbTplbnRyeV07CisgICAgW3NlbGYgX3NlbmROb3RpZmljYXRpb246
V2ViSGlzdG9yeUl0ZW1zQWRkZWROb3RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZW50
cmllczpuZXdFbnRyaWVzXTsKIH0KIAogI3ByYWdtYSBtYXJrIERBVEUtQkFTRUQgUkVUUklFVkFM
CkBAIC03ODMsMjEgKzY5OCwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hVbmljb2RlTGV0
dGVyKFVuCiAgICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUgb3JkZXJlZExhc3RWaXNpdGVkRGF5
c107CiB9CiAKLS0gKE5TQXJyYXkgKilvcmRlcmVkSXRlbXNMYXN0VmlzaXRlZE9uRGF5OiAoTlND
YWxlbmRhckRhdGUgKilkYXRlCistIChOU0FycmF5ICopb3JkZXJlZEl0ZW1zTGFzdFZpc2l0ZWRP
bkRheTooTlNDYWxlbmRhckRhdGUgKilkYXRlCiB7Ci0gICAgcmV0dXJuIFtfaGlzdG9yeVByaXZh
dGUgb3JkZXJlZEl0ZW1zTGFzdFZpc2l0ZWRPbkRheTogZGF0ZV07CisgICAgcmV0dXJuIFtfaGlz
dG9yeVByaXZhdGUgb3JkZXJlZEl0ZW1zTGFzdFZpc2l0ZWRPbkRheTpkYXRlXTsKIH0KIAogI3By
YWdtYSBtYXJrIFVSTCBNQVRDSElORwogCi0tIChCT09MKWNvbnRhaW5zSXRlbUZvclVSTFN0cmlu
ZzogKE5TU3RyaW5nICopVVJMU3RyaW5nCistIChCT09MKWNvbnRhaW5zVVJMOihOU1VSTCAqKVVS
TAogewotICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIGNvbnRhaW5zSXRlbUZvclVSTFN0cmlu
ZzogVVJMU3RyaW5nXTsKLX0KLQotLSAoQk9PTCljb250YWluc1VSTDogKE5TVVJMICopVVJMCi17
Ci0gICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUgY29udGFpbnNVUkw6IFVSTF07CisgICAgcmV0
dXJuIFtfaGlzdG9yeVByaXZhdGUgY29udGFpbnNVUkw6VVJMXTsKIH0KIAogLSAoV2ViSGlzdG9y
eUl0ZW0gKilpdGVtRm9yVVJMOihOU1VSTCAqKVVSTApAQCAtODA5LDQxICs3MTksMzAgQEAgc3Rh
dGljIGlubGluZSBib29sIG1hdGNoVW5pY29kZUxldHRlcihVbgogCiAtIChCT09MKWxvYWRGcm9t
VVJMOihOU1VSTCAqKVVSTCBlcnJvcjooTlNFcnJvciAqKillcnJvcgogewotICAgIE5TTXV0YWJs
ZUFycmF5ICpkaXNjYXJkZWRJdGVtcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgCi0g
ICAgaWYgKFtfaGlzdG9yeVByaXZhdGUgbG9hZEZyb21VUkw6VVJMIGNvbGxlY3REaXNjYXJkZWRJ
dGVtc0ludG86ZGlzY2FyZGVkSXRlbXMgZXJyb3I6ZXJyb3JdKSB7Ci0gICAgICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0KLSAgICAgICAgICAgIHBvc3ROb3RpZmljYXRp
b25OYW1lOldlYkhpc3RvcnlMb2FkZWROb3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0OnNlbGZdOwotICAgICAgICAKLSAgICAgICAgaWYgKFtkaXNjYXJkZWRJdGVt
cyBjb3VudF0gPiAwKQotICAgICAgICAgICAgW3NlbGYgX3NlbmROb3RpZmljYXRpb246V2ViSGlz
dG9yeUl0ZW1zRGlzY2FyZGVkV2hpbGVMb2FkaW5nTm90aWZpY2F0aW9uIGVudHJpZXM6ZGlzY2Fy
ZGVkSXRlbXNdOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFlFUzsKKyAgICBOU011dGFibGVB
cnJheSAqZGlzY2FyZGVkSXRlbXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsgICAg
CisgICAgaWYgKCFbX2hpc3RvcnlQcml2YXRlIGxvYWRGcm9tVVJMOlVSTCBjb2xsZWN0RGlzY2Fy
ZGVkSXRlbXNJbnRvOmRpc2NhcmRlZEl0ZW1zIGVycm9yOmVycm9yXSkgeworICAgICAgICBbZGlz
Y2FyZGVkSXRlbXMgcmVsZWFzZV07CisgICAgICAgIHJldHVybiBOTzsKICAgICB9Ci0gICAgcmV0
dXJuIE5POwotfQogCi0tIChCT09MKXNhdmVUb1VSTDooTlNVUkwgKilVUkwgZXJyb3I6KE5TRXJy
b3IgKiopZXJyb3IKLXsKLSAgICAvLyBGSVhNRTogIFVzZSBuZXcgZm91bmRhdGlvbiBBUEkgdG8g
Z2V0IGVycm9yIHdoZW4gcmVhZHkuCi0gICAgaWYoW19oaXN0b3J5UHJpdmF0ZSBzYXZlVG9VUkw6
VVJMIGVycm9yOmVycm9yXSl7Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVs
dENlbnRlcl0KLSAgICAgICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1lOiBXZWJIaXN0b3J5U2F2
ZWROb3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBzZWxmXTsK
LSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgcmV0dXJuIE5POyAgICAKLX0KKyAgICBb
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdCisgICAgICAgIHBvc3ROb3RpZmlj
YXRpb25OYW1lOldlYkhpc3RvcnlMb2FkZWROb3RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAg
ICAgICBvYmplY3Q6c2VsZl07CiAKLS0gKFdlYkhpc3RvcnlJdGVtICopX2l0ZW1Gb3JVUkxTdHJp
bmc6KE5TU3RyaW5nICopVVJMU3RyaW5nCi17Ci0gICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUg
aXRlbUZvclVSTFN0cmluZzogVVJMU3RyaW5nXTsKKyAgICBpZiAoW2Rpc2NhcmRlZEl0ZW1zIGNv
dW50XSkKKyAgICAgICAgW3NlbGYgX3NlbmROb3RpZmljYXRpb246V2ViSGlzdG9yeUl0ZW1zRGlz
Y2FyZGVkV2hpbGVMb2FkaW5nTm90aWZpY2F0aW9uIGVudHJpZXM6ZGlzY2FyZGVkSXRlbXNdOwor
CisgICAgcmV0dXJuIFlFUzsKIH0KIAotLSAoTlNDYWxlbmRhckRhdGUqKWFnZUxpbWl0RGF0ZQor
LSAoQk9PTClzYXZlVG9VUkw6KE5TVVJMICopVVJMIGVycm9yOihOU0Vycm9yICoqKWVycm9yCiB7
Ci0gICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUgX2FnZUxpbWl0RGF0ZV07CisgICAgaWYgKCFb
X2hpc3RvcnlQcml2YXRlIHNhdmVUb1VSTDpVUkwgZXJyb3I6ZXJyb3JdKQorICAgICAgICByZXR1
cm4gTk87CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXQorICAgICAg
ICBwb3N0Tm90aWZpY2F0aW9uTmFtZTpXZWJIaXN0b3J5U2F2ZWROb3RpZmljYXRpb24KKyAgICAg
ICAgICAgICAgICAgICAgICBvYmplY3Q6c2VsZl07CisgICAgcmV0dXJuIFlFUzsKIH0KIAogLSAo
dm9pZClzZXRIaXN0b3J5SXRlbUxpbWl0OihpbnQpbGltaXQKQEAgLTg2NywzICs3NjYsNjkgQEAg
c3RhdGljIGlubGluZSBib29sIG1hdGNoVW5pY29kZUxldHRlcihVbgogfQogCiBAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBXZWJIaXN0b3J5IChXZWJQcml2YXRlKQorCistICh2b2lkKWFkZEl0ZW06
KFdlYkhpc3RvcnlJdGVtICopZW50cnkKK3sKKyAgICBMT0coSGlzdG9yeSwgImFkZGluZyAlQCIs
IGVudHJ5KTsKKyAgICBbX2hpc3RvcnlQcml2YXRlIGFkZEl0ZW06ZW50cnldOworICAgIFtzZWxm
IF9zZW5kTm90aWZpY2F0aW9uOldlYkhpc3RvcnlJdGVtc0FkZGVkTm90aWZpY2F0aW9uCisgICAg
ICAgICAgICAgICAgICAgIGVudHJpZXM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmVudHJ5XV07
Cit9CisKKy0gKFdlYkhpc3RvcnlJdGVtICopYWRkSXRlbUZvclVSTDooTlNVUkwgKilVUkwKK3sK
KyAgICBXZWJIaXN0b3J5SXRlbSAqZW50cnkgPSBbW1dlYkhpc3RvcnlJdGVtIGFsbG9jXSBpbml0
V2l0aFVSTDpVUkwgdGl0bGU6bmlsXTsKKyAgICBbZW50cnkgX3NldExhc3RWaXNpdGVkVGltZUlu
dGVydmFsOltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXV07CisgICAgW3Nl
bGYgYWRkSXRlbTplbnRyeV07CisgICAgW2VudHJ5IHJlbGVhc2VdOworICAgIHJldHVybiBlbnRy
eTsKK30KKworLSAodm9pZClfYWRkSXRlbUZvclVSTDooTlNVUkwgKilVUkwgdGl0bGU6KE5TU3Ry
aW5nICopdGl0bGUKK3sKKyAgICBXZWJIaXN0b3J5SXRlbSAqZW50cnkgPSBbW1dlYkhpc3RvcnlJ
dGVtIGFsbG9jXSBpbml0V2l0aFVSTDpVUkwgdGl0bGU6dGl0bGVdOworICAgIFtlbnRyeSBfc2V0
TGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5j
ZURhdGVdXTsKKyAgICBbc2VsZiBhZGRJdGVtOmVudHJ5XTsKKyAgICBbZW50cnkgcmVsZWFzZV07
Cit9CisKKy0gKE5TQ2FsZW5kYXJEYXRlKilhZ2VMaW1pdERhdGUKK3sKKyAgICByZXR1cm4gW19o
aXN0b3J5UHJpdmF0ZSBhZ2VMaW1pdERhdGVdOworfQorCistIChCT09MKWNvbnRhaW5zSXRlbUZv
clVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmcKK3sKKyAgICByZXR1cm4gW19oaXN0b3J5
UHJpdmF0ZSBjb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6VVJMU3RyaW5nXTsKK30KKworLSAodm9p
ZClyZW1vdmVJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5Cit7CisgICAgaWYgKFtfaGlzdG9y
eVByaXZhdGUgcmVtb3ZlSXRlbTplbnRyeV0pIHsKKyAgICAgICAgW3NlbGYgX3NlbmROb3RpZmlj
YXRpb246V2ViSGlzdG9yeUl0ZW1zUmVtb3ZlZE5vdGlmaWNhdGlvbgorICAgICAgICAgICAgICAg
ICAgICAgICAgZW50cmllczpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6ZW50cnldXTsKKyAgICB9
Cit9CisKKy0gKHZvaWQpc2V0TGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6KE5TVGltZUludGVydmFs
KXRpbWUgZm9ySXRlbTooV2ViSGlzdG9yeUl0ZW0gKillbnRyeQoreworICAgIFtfaGlzdG9yeVBy
aXZhdGUgc2V0TGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6dGltZSBmb3JJdGVtOmVudHJ5XTsKK30K
KworLSAoV2ViSGlzdG9yeUl0ZW0gKilfaXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxT
dHJpbmcKK3sKKyAgICByZXR1cm4gW19oaXN0b3J5UHJpdmF0ZSBpdGVtRm9yVVJMU3RyaW5nOlVS
TFN0cmluZ107Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkhpc3RvcnkgKFdlYklu
dGVybmFsKQorCistICh2b2lkKV9hZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cDooV2ViQ29yZTo6
UGFnZUdyb3VwJilncm91cAoreworICAgIFtfaGlzdG9yeVByaXZhdGUgYWRkVmlzaXRlZExpbmtz
VG9QYWdlR3JvdXA6Z3JvdXBdOworfQorCitAZW5kCkluZGV4OiBXZWJLaXQvbWFjL0hpc3Rvcnkv
V2ViSGlzdG9yeUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9IaXN0b3J5L1dl
Ykhpc3RvcnlJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L21hYy9IaXN0b3J5L1dl
Ykhpc3RvcnlJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJXZWJIaXN0b3J5UHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xh
c3MgUGFnZUdyb3VwOworfQorCitAaW50ZXJmYWNlIFdlYkhpc3RvcnkgKFdlYkludGVybmFsKQor
LSAodm9pZClfYWRkSXRlbUZvclVSTDooTlNVUkwgKilVUkwgdGl0bGU6KE5TU3RyaW5nICopdGl0
bGU7CistICh2b2lkKV9hZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cDooV2ViQ29yZTo6UGFnZUdy
b3VwJilncm91cDsKK0BlbmQKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdC9tYWMvSGlzdG9y
eS9XZWJIaXN0b3J5SW50ZXJuYWwuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAg
KyBuYXRpdmUKCkluZGV4OiBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW1JbnRlcm5h
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbUludGVy
bmFsLmgJKHJldmlzaW9uIDMwNzc2KQorKysgV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJ
dGVtSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMSArMjYsOSBAQAog
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorI2ltcG9ydCAiV2Vi
SGlzdG9yeUl0ZW1Qcml2YXRlLmgiCiAKLSNpbXBvcnQgPFdlYktpdC9XZWJCYWNrRm9yd2FyZExp
c3QuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJIaXN0b3J5SXRlbS5oPgotI2ltcG9ydCA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1Bhc3NSZWZQdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEhpc3RvcnlJdGVtOwpAQCAtNTYsOCArNTQsNiBA
QCBleHRlcm4gdm9pZCBXS05vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCgpCiAKIEBlbmQKIAotQGlu
dGVyZmFjZSBXZWJCYWNrRm9yd2FyZExpc3QgKFdlYlByaXZhdGUpCitAaW50ZXJmYWNlIFdlYkJh
Y2tGb3J3YXJkTGlzdCAoV2ViSW50ZXJuYWwpCiAtICh2b2lkKV9jbG9zZTsKIEBlbmQKLQotCklu
ZGV4OiBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeVByaXZhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeVByaXZhdGUuaAkocmV2aXNpb24gMzA3NzYp
CisrKyBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeVByaXZhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiw4OCArMjYsMjcgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KICNpbXBvcnQgPFdlYktpdC9XZWJIaXN0b3J5
Lmg+CiAKLUBjbGFzcyBXZWJIaXN0b3J5SXRlbTsKLUBjbGFzcyBOU0Vycm9yOwotCi0jaWZkZWYg
X19jcGx1c3BsdXMKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotdHlwZWRlZiBpbnQ2NF90IFdlYkhpc3RvcnlEYXRlS2V5OwotdHlwZWRlZiBI
YXNoTWFwPFdlYkhpc3RvcnlEYXRlS2V5LCBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+ID4gRGF0
ZVRvRW50cmllc01hcDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBEYXRlVG9FbnRyaWVzTWFwIERh
dGVUb0VudHJpZXNNYXA7Ci0jZW5kaWYKLQogLyoKICAgICBAY29uc3RhbnQgV2ViSGlzdG9yeUl0
ZW1zRGlzY2FyZGVkV2hpbGVMb2FkaW5nTm90aWZpY2F0aW9uIFBvc3RlZCBmcm9tIGxvYWRGcm9t
VVJMOmVycm9yOi4gIAogICAgIFRoaXMgbm90aWZpY2F0aW9uIGNvbWVzIHdpdGggYSB1c2VySW5m
byBkaWN0aW9uYXJ5IHRoYXQgY29udGFpbnMgdGhlIGFycmF5IG9mCi0gICAgaXRlbXMgZGlzY2Fy
ZGVkIGR1ZSB0byB0aGUgZGF0ZSBsaW1pdCBvciBpdGVtIGxpbWl0LiAgVGhlIGtleSBmb3IgdGhl
IGFycmF5IGlzIFdlYkhpc3RvcnlJdGVtc0tleS4KKyAgICBpdGVtcyBkaXNjYXJkZWQgZHVlIHRv
IHRoZSBkYXRlIGxpbWl0IG9yIGl0ZW0gbGltaXQuIFRoZSBrZXkgZm9yIHRoZSBhcnJheSBpcyBX
ZWJIaXN0b3J5SXRlbXNLZXkuCiAqLwotLy8gRklYTUU6IFRoaXMgbm90aWZpY2F0aW9uIHNob3Vs
ZCBiZWNvbWUgQVBJIGluIFdlYkhpc3RvcnkuaAorLy8gRklYTUU6IFRoaXMgbm90aWZpY2F0aW9u
IHNob3VsZCBiZWNvbWUgcHVibGljIEFQSS4KIGV4dGVybiBOU1N0cmluZyAqV2ViSGlzdG9yeUl0
ZW1zRGlzY2FyZGVkV2hpbGVMb2FkaW5nTm90aWZpY2F0aW9uOwogCi0vLyBGSVhNRTogVGhlIFdl
Ykhpc3RvcnlQcml2YXRlIGludGVyZmFjZSBzaG91bGQgYmUgaW4gV2ViSGlzdG9yeUludGVybmFs
Lmggb3IgaW5zaWRlIFdlYkhpc3RvcnkubQotQGludGVyZmFjZSBXZWJIaXN0b3J5UHJpdmF0ZSA6
IE5TT2JqZWN0IHsKLUBwcml2YXRlCi0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2VudHJpZXNC
eVVSTDsKLSAgICBEYXRlVG9FbnRyaWVzTWFwKiBfZW50cmllc0J5RGF0ZTsKLSAgICBOU011dGFi
bGVBcnJheSAqX29yZGVyZWRMYXN0VmlzaXRlZERheXM7Ci0gICAgQk9PTCBpdGVtTGltaXRTZXQ7
Ci0gICAgaW50IGl0ZW1MaW1pdDsKLSAgICBCT09MIGFnZUluRGF5c0xpbWl0U2V0OwotICAgIGlu
dCBhZ2VJbkRheXNMaW1pdDsKLX0KLQotLSAodm9pZClhZGRJdGVtOihXZWJIaXN0b3J5SXRlbSAq
KWVudHJ5OwotLSAodm9pZClhZGRJdGVtczooTlNBcnJheSAqKW5ld0VudHJpZXM7Ci0tIChCT09M
KXJlbW92ZUl0ZW06KFdlYkhpc3RvcnlJdGVtICopZW50cnk7Ci0tIChCT09MKXJlbW92ZUl0ZW1z
OihOU0FycmF5ICopZW50cmllczsKLS0gKEJPT0wpcmVtb3ZlQWxsSXRlbXM7Ci0tICh2b2lkKXNl
dExhc3RWaXNpdGVkVGltZUludGVydmFsOihOU1RpbWVJbnRlcnZhbCl0aW1lIGZvckl0ZW06KFdl
Ykhpc3RvcnlJdGVtICopaXRlbTsKLQotLSAoTlNBcnJheSAqKW9yZGVyZWRMYXN0VmlzaXRlZERh
eXM7Ci0tIChOU0FycmF5ICopb3JkZXJlZEl0ZW1zTGFzdFZpc2l0ZWRPbkRheTooTlNDYWxlbmRh
ckRhdGUgKiljYWxlbmRhckRhdGU7Ci0tIChCT09MKWNvbnRhaW5zSXRlbUZvclVSTFN0cmluZzoo
TlNTdHJpbmcgKilVUkxTdHJpbmc7Ci0tIChCT09MKWNvbnRhaW5zVVJMOihOU1VSTCAqKVVSTDsK
LS0gKFdlYkhpc3RvcnlJdGVtICopaXRlbUZvclVSTDooTlNVUkwgKilVUkw7Ci0tIChXZWJIaXN0
b3J5SXRlbSAqKWl0ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5nICopVVJMU3RyaW5nOwotCi0tIChC
T09MKWxvYWRGcm9tVVJMOihOU1VSTCAqKVVSTCBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJbnRvOihO
U011dGFibGVBcnJheSAqKWRpc2NhcmRlZEl0ZW1zIGVycm9yOihOU0Vycm9yICoqKWVycm9yOwot
LSAoQk9PTClzYXZlVG9VUkw6KE5TVVJMICopVVJMIGVycm9yOihOU0Vycm9yICoqKWVycm9yOwot
Ci0tIChOU0NhbGVuZGFyRGF0ZSopX2FnZUxpbWl0RGF0ZTsKLQotLSAodm9pZClzZXRIaXN0b3J5
SXRlbUxpbWl0OihpbnQpbGltaXQ7Ci0tIChpbnQpaGlzdG9yeUl0ZW1MaW1pdDsKLS0gKHZvaWQp
c2V0SGlzdG9yeUFnZUluRGF5c0xpbWl0OihpbnQpbGltaXQ7Ci0tIChpbnQpaGlzdG9yeUFnZUlu
RGF5c0xpbWl0OwotCi1AZW5kCi0KIEBpbnRlcmZhY2UgV2ViSGlzdG9yeSAoV2ViUHJpdmF0ZSkK
IAogLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgU1BJIGlzIHVzZWQgYnkgU2FmYXJpLiBTaG91bGQg
aXQgYmUgbWFkZSBpbnRvIHB1YmxpYyBBUEk/CiAtIChXZWJIaXN0b3J5SXRlbSAqKV9pdGVtRm9y
VVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmluZzsKIAotLy8gRklYTUU6IFNhZmFyaSBkb2Vz
bid0IHVzZSB0aGUgZm9sbG93aW5nIFNQSSwgYW5kIGl0J3MgdXNlZCBpbiBXZWJLaXQgb25seSBp
bnNpZGUgV2ViSGlzdG9yeS5tLgotLy8gU2hvdWxkIHdlIG1vdmUgaXQgaW50byBhIEZpbGVJbnRl
cm5hbCBjYXRlZ29yeSBpbnNpZGUgV2ViSGlzdG9yeS5tLCBvciBkbyB3ZSBuZWVkIGl0IGZvciBv
dGhlcgotLy8gY2xpZW50cz8KLS0gKHZvaWQpcmVtb3ZlSXRlbTooV2ViSGlzdG9yeUl0ZW0gKill
bnRyeTsKKy8vIEZJWE1FOiBuZWl0aGVyIFNhZmFyaSBub3IgV2ViS2l0IHVzZSB0aGUgZm9sbG93
aW5nIFNQSSAtLSBkbyB3ZSBzdGlsbCBuZWVkIHRoZW0/CiAtICh2b2lkKWFkZEl0ZW06KFdlYkhp
c3RvcnlJdGVtICopZW50cnk7Ci0tIChCT09MKWNvbnRhaW5zSXRlbUZvclVSTFN0cmluZzooTlNT
dHJpbmcgKilVUkxTdHJpbmc7Ci0KLS8vIEZJWE1FOiBTYWZhcmkgZG9lc24ndCB1c2UgdGhlIGZv
bGxvd2luZyBTUEksIGJ1dCBvdGhlciBXZWJLaXQgY2xhc3NlcyBkby4gU2hvdWxkIHdlIG1vdmUg
aXQgaW50bwotLy8gYSBXZWJIaXN0b3J5SW50ZXJuYWwuaCwgb3IgZG8gd2UgbmVlZCBpdCBmb3Ig
b3RoZXIgY2xpZW50cz8KIC0gKFdlYkhpc3RvcnlJdGVtICopYWRkSXRlbUZvclVSTDooTlNVUkwg
KilVUkw7Ci0vLyBDaGFuZ2UgZGF0ZSBvbiBleGlzdGluZyBpdGVtCi0tICh2b2lkKXNldExhc3RW
aXNpdGVkVGltZUludGVydmFsOihOU1RpbWVJbnRlcnZhbCl0aW1lIGZvckl0ZW06KFdlYkhpc3Rv
cnlJdGVtICopaXRlbTsKLQotLy8gRklYTUU6IG5laXRoZXIgU2FmYXJpIG5vciBXZWJLaXQgdXNl
IHRoZSBmb2xsb3dpbmcgU1BJIC0tIGRvIHdlIHN0aWxsIG5lZWQgaXQ/CiAtIChOU0NhbGVuZGFy
RGF0ZSopYWdlTGltaXREYXRlOworLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6KE5T
U3RyaW5nICopVVJMU3RyaW5nOworLSAodm9pZClyZW1vdmVJdGVtOihXZWJIaXN0b3J5SXRlbSAq
KWVudHJ5OworLSAodm9pZClzZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDooTlNUaW1lSW50ZXJ2
YWwpdGltZSBmb3JJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWl0ZW07CiAKIEBlbmQKSW5kZXg6IFdl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMzA3
NzYpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYgZGF0YWJhc2VOYW1lKTsKIAorICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRM
aW5rcygpOworCiAgICAgdmlydHVhbCB2b2lkIGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCk7CiAK
IHByaXZhdGU6CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5tbQkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogI2ltcG9y
dCAiV2ViRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJXZWJIVE1MVmlldy5oIgogI2ltcG9ydCAiV2Vi
SFRNTFZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJIaXN0b3J5SW50ZXJuYWwuaCIKICNpbXBv
cnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCAiV2ViTlNVUkxSZXF1ZXN0RXh0
cmFzLmgiCi0jaW1wb3J0ICJXZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaCIKICNpbXBvcnQgIldl
YlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlVJRGVsZWdhdGUuaCIKICNp
bXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgiCkBAIC00OSw2ICs0OSw3IEBACiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lTG9hZFJlcXVlc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJl
c3VsdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Bh
Z2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KICNpbXBvcnQgPFdlYkNv
cmUvUGxhdGZvcm1TdHJpbmcuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+
CkBAIC00MjUsNiArNDI2LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFi
YXNlUXUKICAgICAgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmll
dzpmcmFtZTpleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjpkYXRhYmFzZTop
LCBraXQoZnJhbWUpLCB3ZWJPcmlnaW4sIChOU1N0cmluZyAqKWRhdGFiYXNlTmFtZSk7CiAgICAg
W3dlYk9yaWdpbiByZWxlYXNlXTsKIH0KKyAgICAKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpwb3B1
bGF0ZVZpc2l0ZWRMaW5rcygpCit7CisgICAgW1tXZWJIaXN0b3J5IG9wdGlvbmFsU2hhcmVkSGlz
dG9yeV0gX2FkZFZpc2l0ZWRMaW5rc1RvUGFnZUdyb3VwOlttX3dlYlZpZXcgcGFnZV0tPmdyb3Vw
KCldOworfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQo
KQogewpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTcyMywxMCArNzIz
LDggQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZmluYWxTZXR1cEZvcgogdm9pZCBXZWJG
cmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9yeShjb25zdCBLVVJMJiB1cmwpCiB7
CiAgICAgTlNVUkwgKmNvY29hVVJMID0gdXJsOwotICAgIFdlYkhpc3RvcnlJdGVtICplbnRyeSA9
IFtbV2ViSGlzdG9yeSBvcHRpb25hbFNoYXJlZEhpc3RvcnldIGFkZEl0ZW1Gb3JVUkw6Y29jb2FV
UkxdOwogICAgIGNvbnN0IFN0cmluZyYgcGFnZVRpdGxlID0gY29yZShtX3dlYkZyYW1lLmdldCgp
KS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCk7Ci0gICAgaWYgKCFwYWdlVGl0
bGUuaXNFbXB0eSgpKQotICAgICAgICBbZW50cnkgc2V0VGl0bGU6cGFnZVRpdGxlXTsKKyAgICBb
W1dlYkhpc3Rvcnkgb3B0aW9uYWxTaGFyZWRIaXN0b3J5XSBfYWRkSXRlbUZvclVSTDpjb2NvYVVS
TCB0aXRsZTpwYWdlVGl0bGVdOwogfQogIAogYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2hv
dWxkR29Ub0hpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKSBjb25zdApJbmRleDogV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDMwNzc2KQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw0NCBAQAorMjAwOC0wMy0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBmaXggaHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjYKKyAgICAgICAgICBSRUdS
RVNTSU9OOiBpZnJhbWVzIGFyZSBhZGRlZCB0byBTYWZhcmkncyBIaXN0b3J5IG1lbnUKKyAgICAg
ICAgICBieSBzZXBhcmF0aW5nIHRoZSB2aXNpdGVkIGxpbmsgbWFjaGluZXJ5IGZyb20gZ2xvYmFs
IGhpc3RvcnkKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6
CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnBvcHVsYXRlVmlzaXRlZExpbmtzKTogQWRkZWQg
YSBjYWxsIHRvIHRoZSBuZXcKKyAgICAgICAgV2ViSGlzdG9yeTo6YWRkVmlzaXRlZExpbmtzVG9Q
YWdlR3JvdXAgZnVuY3Rpb24uCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lmg6IEFkZGVkIHBvcHVsYXRlVmlzaXRlZExpbmtzLgorICAgICAgICBBbHNvIGZpeGVkIHRo
ZSB3ZWJWaWV3IGZ1bmN0aW9uIHRvIGJlIG5vbi12aXJ0dWFsLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnkpOiBDaGFuZ2VkIHRvIHVzZSB0aGUKKyAgICAg
ICAgbmV3IFdlYkhpc3Rvcnk6OmFkZEl0ZW0gZnVuY3Rpb24uCisgICAgICAgIChXZWJGcmFtZUxv
YWRlckNsaWVudDo6d2ViSGlzdG9yeSk6IENoYW5nZWQgdG8gcmV0dXJuIGEgV2ViSGlzdG9yeSos
CisgICAgICAgIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIEFkZFJlZiB0aGUgcmVzdWx0IGZyb20gdGhp
cyBmdW5jdGlvbi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5oOiBEaXR0by4KKworICAgICAgICAqIFdlYkhpc3RvcnkuY3BwOiBSZW1vdmVkIElXZWJIaXN0
b3J5UHJpdmF0ZSBhbmQgX1dlYkNvcmVIaXN0b3J5UHJvdmlkZXIuCisgICAgICAgIChXZWJIaXN0
b3J5OjpRdWVyeUludGVyZmFjZSk6IFJlbW92ZWQgSVdlYkhpc3RvcnlQcml2YXRlLgorICAgICAg
ICAoc2hhcmVkSGlzdG9yeVN0b3JhZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkhpc3Rvcnk6OnNo
YXJlZEhpc3RvcnkpOiBBZGRlZC4KKyAgICAgICAgKFdlYkhpc3Rvcnk6Om9wdGlvbmFsU2hhcmVk
SGlzdG9yeSk6IENoYW5nZWQgdG8gdXNlIHNoYXJlZEhpc3RvcnkoKS4KKyAgICAgICAgKFdlYkhp
c3Rvcnk6OnNldE9wdGlvbmFsU2hhcmVkSGlzdG9yeSk6IENoYW5nZWQgdG8gcmVxdWlyZSBhIFdl
Ykhpc3RvcnkKKyAgICAgICAgb2JqZWN0LCBub3QganVzdCBhbiBJV2ViSGlzdG9yeS4KKyAgICAg
ICAgKFdlYkhpc3Rvcnk6OnJlbW92ZUFsbEl0ZW1zKTogQ2FsbCBQYWdlR3JvdXA6OnJlbW92ZUFs
bFZpc2l0ZWRMaW5rcy4KKyAgICAgICAgKFdlYkhpc3Rvcnk6OmFkZEl0ZW0pOiBDaGFuZ2VkIHBh
cmFtZXRlciB0eXBlcyBzaW5jZSB0aGlzIGlzIGNhbGxlZCB3aXRoCisgICAgICAgIGFyZ3VtZW50
cyBmcm9tIFdlYkNvcmUgLS0gYXQgc29tZSBwb2ludCB0aGlzIGNvdWxkIGFsbG93IGJldHRlciBl
ZmZpY2llbmN5LgorICAgICAgICAoV2ViSGlzdG9yeTo6cmVtb3ZlSXRlbUZvclVSTFN0cmluZyk6
ICBDYWxsIFBhZ2VHcm91cDo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzCisgICAgICAgIGlmIHRoZSBs
YXN0IFVSTCBpcyBiZWluZyByZW1vdmVkLgorICAgICAgICAoYWRkVmlzaXRlZExpbmtUb1BhZ2VH
cm91cCk6IEFkZGVkLiBIZWxwZXIuIEFkZHMgYSBzaW5nbGUgbGluayB0byBhIGdyb3VwJ3MKKyAg
ICAgICAgdmlzaXRlZCBsaW5rIHNldC4KKyAgICAgICAgKFdlYkhpc3Rvcnk6OmFkZFZpc2l0ZWRM
aW5rc1RvUGFnZUdyb3VwKTogQWRkZWQuIEFkZHMgYWxsIGxpbmtzIHRvIGEgZ3JvdXAncworICAg
ICAgICB2aXNpdGVkIGxpbmsuCisgICAgICAgICogV2ViSGlzdG9yeS5oOiBSZW1vdmVkIElXZWJI
aXN0b3J5UHJpdmF0ZS4gUmVtb3ZlZCBvcHRpb25hbFNoYXJlZEhpc3RvcnlJbnRlcm5hbAorICAg
ICAgICBhbmQgYWRkZWQgc2hhcmVkSGlzdG9yeS4gUmVwbGFjZWQgYWRkSXRlbUZvclVSTCBhbmQg
Y29udGFpbnNJdGVtRm9yVVJMU3RyaW5nIHdpdGgKKyAgICAgICAgbm9uLXZpcnR1YWwgYWRkSXRl
bSBhbmQgYWRkVmlzaXRlZExpbmtzVG9QYWdlR3JvdXAgZnVuY3Rpb25zLgorCiAyMDA4LTAzLTA0
ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJTY3JpcHREZWJ1
Z1NlcnZlciBjbGVhbnVwCkluZGV4OiBXZWJLaXQvd2luL1dlYkhpc3RvcnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAJKHJldmlzaW9uIDMwNzc2KQorKysgV2Vi
S2l0L3dpbi9XZWJIaXN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMzAgKzM1LDE5IEBA
CiAjaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uQ2VudGVyLmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVy
ZW5jZXMuaCIKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUhpc3RvcnkuaD4KICNwcmFnbWEgd2FybmluZyggcHVzaCwg
MCApCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvS1VSTC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAjcHJhZ21hIHdhcm5pbmcoIHBvcCApCiAK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBDRlN0cmluZ1JlZiBEYXRlc0FycmF5S2V5ID0g
Q0ZTVFIoIldlYkhpc3RvcnlEYXRlcyIpOwogQ0ZTdHJpbmdSZWYgRmlsZVZlcnNpb25LZXkgPSBD
RlNUUigiV2ViSGlzdG9yeUZpbGVWZXJzaW9uIik7CiAKLWNvbnN0IElJRCBJSURfSVdlYkhpc3Rv
cnlQcml2YXRlID0geyAweDNkZTA0ZTU5LCAweDkzZjksIDB4NDM2OSwgeyAweDhiLCAweDQzLCAw
eDk3LCAweDY0LCAweDU4LCAweGQ3LCAweGUzLCAweDE5IH0gfTsKLQogI2RlZmluZSBjdXJyZW50
RmlsZVZlcnNpb24gMQogCi1jbGFzcyBfV2ViQ29yZUhpc3RvcnlQcm92aWRlciA6IHB1YmxpYyBX
ZWJDb3JlOjpXZWJDb3JlSGlzdG9yeVByb3ZpZGVyIHsKLXB1YmxpYzoKLSAgICBfV2ViQ29yZUhp
c3RvcnlQcm92aWRlcihJV2ViSGlzdG9yeSogaGlzdG9yeSk7Ci0gICAgfl9XZWJDb3JlSGlzdG9y
eVByb3ZpZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNVUkwoY29uc3QgVUNoYXIq
IHVuaWNvZGUsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLXByaXZhdGU6Ci0gICAgSVdlYkhpc3Rvcnkq
IG1faGlzdG9yeTsKLSAgICBJV2ViSGlzdG9yeVByaXZhdGUqIG1faGlzdG9yeVByaXZhdGU7Ci19
OwotCiBzdGF0aWMgYm9vbCBhcmVFcXVhbE9yQ2xvc2UoZG91YmxlIGQxLCBkb3VibGUgZDIpCiB7
CiAgICAgZG91YmxlIGRpZmYgPSBkMS1kMjsKQEAgLTk3LDggKzg2LDYgQEAgc3RhdGljIHZvaWQg
cmVsZWFzZVVzZXJJbmZvKENGRGljdGlvbmFyeQogCiAvLyBXZWJIaXN0b3J5IC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LUlXZWJIaXN0b3J5KiBXZWJIaXN0b3J5OjptX29wdGlvbmFsU2hhcmVkSGlzdG9yeSA9IDA7Ci0K
IFdlYkhpc3Rvcnk6OldlYkhpc3RvcnkoKQogOiBtX3JlZkNvdW50KDApCiAsIG1fcHJlZmVyZW5j
ZXMoMCkKQEAgLTE1OSw4ICsxNDYsNiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkhp
c3Rvcnk6OlF1CiAgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViSGlzdG9yeSo+
KHRoaXMpOwogICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JV2ViSGlzdG9yeSkp
CiAgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViSGlzdG9yeSo+KHRoaXMpOwot
ICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JV2ViSGlzdG9yeVByaXZhdGUpKQot
ICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYkhpc3RvcnlQcml2YXRlKj4odGhp
cyk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKIApAQCAtMTg0LDMy
ICsxNjksMzAgQEAgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSGlzdG9yeTo6UmVsZQogCiAv
LyBJV2ViSGlzdG9yeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3N0YXRpYyBpbmxpbmUgQ09NUHRyPFdlYkhpc3Rvcnk+
JiBzaGFyZWRIaXN0b3J5U3RvcmFnZSgpCit7CisgICAgc3RhdGljIENPTVB0cjxXZWJIaXN0b3J5
PiBzaGFyZWRIaXN0b3J5OworICAgIHJldHVybiBzaGFyZWRIaXN0b3J5OworfQorCitXZWJIaXN0
b3J5KiBXZWJIaXN0b3J5OjpzaGFyZWRIaXN0b3J5KCkKK3sKKyAgICByZXR1cm4gc2hhcmVkSGlz
dG9yeVN0b3JhZ2UoKS5nZXQoKTsKK30KKwogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJI
aXN0b3J5OjpvcHRpb25hbFNoYXJlZEhpc3RvcnkoIAogICAgIC8qIFtyZXR2YWxdW291dF0gKi8g
SVdlYkhpc3RvcnkqKiBoaXN0b3J5KQogewotICAgICpoaXN0b3J5ID0gbV9vcHRpb25hbFNoYXJl
ZEhpc3Rvcnk7Ci0gICAgaWYgKG1fb3B0aW9uYWxTaGFyZWRIaXN0b3J5KQotICAgICAgICBtX29w
dGlvbmFsU2hhcmVkSGlzdG9yeS0+QWRkUmVmKCk7Ci0KKyAgICAqaGlzdG9yeSA9IHNoYXJlZEhp
c3RvcnkoKTsKKyAgICBpZiAoKmhpc3RvcnkpCisgICAgICAgICgqaGlzdG9yeSktPkFkZFJlZigp
OwogICAgIHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkhp
c3Rvcnk6OnNldE9wdGlvbmFsU2hhcmVkSGlzdG9yeSggCiAgICAgLyogW2luXSAqLyBJV2ViSGlz
dG9yeSogaGlzdG9yeSkKIHsKLSAgICBpZiAobV9vcHRpb25hbFNoYXJlZEhpc3RvcnkpIHsKLSAg
ICAgICAgbV9vcHRpb25hbFNoYXJlZEhpc3RvcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbV9vcHRp
b25hbFNoYXJlZEhpc3RvcnkgPSAwOyAgICAgICAgCi0gICAgfQotCi0gICAgX1dlYkNvcmVIaXN0
b3J5UHJvdmlkZXIqIGNvcmVIaXN0b3J5ID0gMDsKLSAgICBtX29wdGlvbmFsU2hhcmVkSGlzdG9y
eSA9IGhpc3Rvcnk7Ci0gICAgaWYgKGhpc3RvcnkpIHsKLSAgICAgICAgaGlzdG9yeS0+QWRkUmVm
KCk7Ci0gICAgICAgIGNvcmVIaXN0b3J5ID0gbmV3IF9XZWJDb3JlSGlzdG9yeVByb3ZpZGVyKGhp
c3RvcnkpOwotICAgIH0KLSAgICBXZWJDb3JlOjpXZWJDb3JlSGlzdG9yeTo6c2V0SGlzdG9yeVBy
b3ZpZGVyKGNvcmVIaXN0b3J5KTsKLQorICAgIHNoYXJlZEhpc3RvcnlTdG9yYWdlKCkucXVlcnko
aGlzdG9yeSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTQ2Nyw2ICs0NTAsOCBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkhpc3Rvcnk6OnJlCiAgICAgQ0ZBcnJheVJlbW92ZUFs
bFZhbHVlcyhtX2RhdGVzV2l0aEVudHJpZXMuZ2V0KCkpOwogICAgIENGRGljdGlvbmFyeVJlbW92
ZUFsbFZhbHVlcyhtX2VudHJpZXNCeVVSTC5nZXQoKSk7CiAKKyAgICBQYWdlR3JvdXA6OnJlbW92
ZUFsbFZpc2l0ZWRMaW5rcygpOworCiAgICAgcmV0dXJuIHBvc3ROb3RpZmljYXRpb24oa1dlYkhp
c3RvcnlBbGxJdGVtc1JlbW92ZWROb3RpZmljYXRpb24pOwogfQogCkBAIC02NDYsMjcgKzYzMSwy
NyBAQCBIUkVTVUxUIFdlYkhpc3Rvcnk6OmFkZEl0ZW0oSVdlYkhpc3RvcnlJCiAgICAgcmV0dXJu
IGhyOwogfQogCi1IUkVTVUxUIFdlYkhpc3Rvcnk6OmFkZEl0ZW1Gb3JVUkwoQlNUUiB1cmwsIEJT
VFIgdGl0bGUpCit2b2lkIFdlYkhpc3Rvcnk6OmFkZEl0ZW0oY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHRpdGxlKQogewogICAgIENPTVB0cjxXZWJIaXN0b3J5SXRlbT4gaXRlbShBZG9w
dENPTSwgV2ViSGlzdG9yeUl0ZW06OmNyZWF0ZUluc3RhbmNlKCkpOwogICAgIGlmICghaXRlbSkK
LSAgICAgICAgcmV0dXJuIEVfRkFJTDsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgU1lTVEVNVElN
RSBjdXJyZW50VGltZTsKICAgICBHZXRTeXN0ZW1UaW1lKCZjdXJyZW50VGltZSk7CiAgICAgREFU
RSBsYXN0VmlzaXRlZDsKICAgICBpZiAoIVN5c3RlbVRpbWVUb1ZhcmlhbnRUaW1lKCZjdXJyZW50
VGltZSwgJmxhc3RWaXNpdGVkKSkKLSAgICAgICAgcmV0dXJuIEVfRkFJTDsKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgSFJFU1VMVCBociA9IGl0ZW0tPmluaXRXaXRoVVJMU3RyaW5nKHVybCwgdGl0
bGUsIDApOworICAgIEhSRVNVTFQgaHIgPSBpdGVtLT5pbml0V2l0aFVSTFN0cmluZyhCU3RyaW5n
KHVybC5zdHJpbmcoKSksIEJTdHJpbmcodGl0bGUpLCAwKTsKICAgICBpZiAoRkFJTEVEKGhyKSkK
LSAgICAgICAgcmV0dXJuIGhyOworICAgICAgICByZXR1cm47CiAKICAgICBociA9IGl0ZW0tPnNl
dExhc3RWaXNpdGVkVGltZUludGVydmFsKGxhc3RWaXNpdGVkKTsgLy8gYWxzbyBpbmNyZW1lbnRz
IHZpc2l0ZWRDb3VudAogICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Cisg
ICAgICAgIHJldHVybjsKIAotICAgIHJldHVybiBhZGRJdGVtKGl0ZW0uZ2V0KCkpOworICAgIGFk
ZEl0ZW0oaXRlbS5nZXQoKSk7CiB9CiAKIEhSRVNVTFQgV2ViSGlzdG9yeTo6aXRlbUZvclVSTFN0
cmluZygKQEAgLTY5NCwyMiArNjc5LDYgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJI
aXN0b3J5OjppdAogICAgIHJldHVybiBpdGVtRm9yVVJMU3RyaW5nKHVybFN0cmluZy5nZXQoKSwg
aXRlbSk7CiB9CiAKLUhSRVNVTFQgV2ViSGlzdG9yeTo6Y29udGFpbnNJdGVtRm9yVVJMU3RyaW5n
KAotICAgIC8qIFtpbl0gKi8gdm9pZCogdXJsQ0ZTdHJpbmcsCi0gICAgLyogW3JldHZhbF1bb3V0
XSAqLyBCT09MKiBjb250YWlucykKLXsKLSAgICBJV2ViSGlzdG9yeUl0ZW0qIGl0ZW0gPSAwOwot
ICAgIEhSRVNVTFQgaHI7Ci0gICAgaWYgKFNVQ0NFRURFRChociA9IGl0ZW1Gb3JVUkxTdHJpbmco
KENGU3RyaW5nUmVmKXVybENGU3RyaW5nLCAmaXRlbSkpKSB7Ci0gICAgICAgICpjb250YWlucyA9
IFRSVUU7Ci0gICAgICAgIC8vIGl0ZW1Gb3JVUkxTdHJpbmcgcmVmcyB0aGUgcmV0dXJuZWQgaXRl
bSwgc28gd2UgbmVlZCB0byBiYWxhbmNlIHRoYXQgCi0gICAgICAgIGl0ZW0tPlJlbGVhc2UoKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgKmNvbnRhaW5zID0gRkFMU0U7Ci0KLSAgICByZXR1cm4gaHI7
Ci19Ci0KIEhSRVNVTFQgV2ViSGlzdG9yeTo6cmVtb3ZlSXRlbUZvclVSTFN0cmluZyhDRlN0cmlu
Z1JlZiB1cmxTdHJpbmcpCiB7CiAgICAgSVdlYkhpc3RvcnlJdGVtKiBlbnRyeSA9IChJV2ViSGlz
dG9yeUl0ZW0qKSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2VudHJpZXNCeVVSTC5nZXQoKSwgdXJs
U3RyaW5nKTsKQEAgLTcxOSw2ICs2ODgsOSBAQCBIUkVTVUxUIFdlYkhpc3Rvcnk6OnJlbW92ZUl0
ZW1Gb3JVUkxTdHJpCiAgICAgSFJFU1VMVCBociA9IHJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlcyhl
bnRyeSk7CiAgICAgQ0ZEaWN0aW9uYXJ5UmVtb3ZlVmFsdWUobV9lbnRyaWVzQnlVUkwuZ2V0KCks
IHVybFN0cmluZyk7CiAKKyAgICBpZiAoIUNGRGljdGlvbmFyeUdldENvdW50KG1fZW50cmllc0J5
VVJMLmdldCgpKSkKKyAgICAgICAgUGFnZUdyb3VwOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsK
KwogICAgIHJldHVybiBocjsKIH0KIApAQCAtODU2LDEwMSArODI4LDIzIEBAIEhSRVNVTFQgV2Vi
SGlzdG9yeTo6YWdlTGltaXREYXRlKENGQWJzb2wKICAgICByZXR1cm4gU19PSzsKIH0KIAotSVdl
Ykhpc3RvcnlQcml2YXRlKiBXZWJIaXN0b3J5OjpvcHRpb25hbFNoYXJlZEhpc3RvcnlJbnRlcm5h
bCgpCi17Ci0gICAgaWYgKCFtX29wdGlvbmFsU2hhcmVkSGlzdG9yeSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBJV2ViSGlzdG9yeVByaXZhdGUqIGhpc3RvcnlQcml2YXRlOwotICAgIGlmIChG
QUlMRUQobV9vcHRpb25hbFNoYXJlZEhpc3RvcnktPlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2ViSGlz
dG9yeVByaXZhdGUsICh2b2lkKiopJmhpc3RvcnlQcml2YXRlKSkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgaGlzdG9yeVByaXZhdGUtPlJlbGVhc2UoKTsgLy8gZG9uJ3QgYWRkIGFuIGFkZGl0
aW9uYWwgcmVmIGZvciB0aGlzIGludGVybmFsIGNhbGwKLSAgICByZXR1cm4gaGlzdG9yeVByaXZh
dGU7Ci19Ci0KLS8vIF9XZWJDb3JlSGlzdG9yeVByb3ZpZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotX1dlYkNvcmVI
aXN0b3J5UHJvdmlkZXI6Ol9XZWJDb3JlSGlzdG9yeVByb3ZpZGVyKElXZWJIaXN0b3J5KiBoaXN0
b3J5KQotICAgIDogbV9oaXN0b3J5KGhpc3RvcnkpCi0gICAgLCBtX2hpc3RvcnlQcml2YXRlKDAp
CitzdGF0aWMgdm9pZCBhZGRWaXNpdGVkTGlua1RvUGFnZUdyb3VwKGNvbnN0IHZvaWQqIGtleSwg
Y29uc3Qgdm9pZCosIHZvaWQqIGNvbnRleHQpCiB7Ci19CisgICAgQ0ZTdHJpbmdSZWYgdXJsID0g
c3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KGtleSk7CisgICAgUGFnZUdyb3VwKiBncm91cCA9IHN0
YXRpY19jYXN0PFBhZ2VHcm91cCo+KGNvbnRleHQpOwogCi1fV2ViQ29yZUhpc3RvcnlQcm92aWRl
cjo6fl9XZWJDb3JlSGlzdG9yeVByb3ZpZGVyKCkKLXsKLX0KLQotc3RhdGljIGlubGluZSBib29s
IG1hdGNoTGV0dGVyKGNoYXIgYywgY2hhciBsb3dlcmNhc2VMZXR0ZXIpCi17Ci0gICAgcmV0dXJu
IChjIHwgMHgyMCkgPT0gbG93ZXJjYXNlTGV0dGVyOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
bWF0Y2hVbmljb2RlTGV0dGVyKFVuaUNoYXIgYywgVW5pQ2hhciBsb3dlcmNhc2VMZXR0ZXIpCi17
Ci0gICAgcmV0dXJuIChjIHwgMHgyMCkgPT0gbG93ZXJjYXNlTGV0dGVyOworICAgIENGSW5kZXgg
bGVuZ3RoID0gQ0ZTdHJpbmdHZXRMZW5ndGgodXJsKTsKKyAgICBjb25zdCBVQ2hhciogY2hhcmFj
dGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihDRlN0cmluZ0dldENoYXJhY3Rl
cnNQdHIodXJsKSk7CisgICAgaWYgKGNoYXJhY3RlcnMpCisgICAgICAgIGdyb3VwLT5hZGRWaXNp
dGVkTGluayhjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIGVsc2UgeworICAgICAgICBWZWN0b3I8
VUNoYXIsIDUxMj4gYnVmZmVyKGxlbmd0aCk7CisgICAgICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVy
cyh1cmwsIENGUmFuZ2VNYWtlKDAsIGxlbmd0aCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+
KGJ1ZmZlci5kYXRhKCkpKTsKKyAgICAgICAgZ3JvdXAtPmFkZFZpc2l0ZWRMaW5rKGJ1ZmZlci5k
YXRhKCksIGxlbmd0aCk7CisgICAgfQogfQogCi1ib29sIF9XZWJDb3JlSGlzdG9yeVByb3ZpZGVy
Ojpjb250YWluc1VSTChjb25zdCBVQ2hhciogdW5pY29kZSwgdW5zaWduZWQgbGVuZ3RoKQordm9p
ZCBXZWJIaXN0b3J5OjphZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cChQYWdlR3JvdXAmIGdyb3Vw
KQogewotICAgIGNvbnN0IGludCBidWZmZXJTaXplID0gMTAyNDsKLSAgICBjb25zdCBVQ2hhciAq
dW5pY29kZVN0ciA9IHVuaWNvZGU7Ci0gICAgVUNoYXIgc3RhdGljU3RyQnVmZmVyW2J1ZmZlclNp
emVdOwotICAgIFVDaGFyICpzdHJCdWZmZXIgPSAwOwotICAgIGJvb2wgbmVlZFRvQWRkU2xhc2gg
PSBmYWxzZTsKLQotICAgIGlmIChsZW5ndGggPj0gNiAmJgotICAgICAgICBtYXRjaFVuaWNvZGVM
ZXR0ZXIodW5pY29kZVswXSwgJ2gnKSAmJgotICAgICAgICBtYXRjaFVuaWNvZGVMZXR0ZXIodW5p
Y29kZVsxXSwgJ3QnKSAmJgotICAgICAgICBtYXRjaFVuaWNvZGVMZXR0ZXIodW5pY29kZVsyXSwg
J3QnKSAmJgotICAgICAgICBtYXRjaFVuaWNvZGVMZXR0ZXIodW5pY29kZVszXSwgJ3AnKSAmJgot
ICAgICAgICAodW5pY29kZVs0XSA9PSAnOicgCi0gICAgICAgIHx8IChtYXRjaFVuaWNvZGVMZXR0
ZXIodW5pY29kZVs0XSwgJ3MnKSAmJiB1bmljb2RlWzVdID09ICc6JykpKSB7Ci0KLSAgICAgICAg
ICAgIHVuc2lnbmVkIHBvcyA9IHVuaWNvZGVbNF0gPT0gJzonID8gNSA6IDY7Ci0KLSAgICAgICAg
ICAgIC8vIHNraXAgcG9zc2libGUgaW5pdGlhbCB0d28gc2xhc2hlcwotICAgICAgICAgICAgaWYg
KHBvcyArIDEgPCBsZW5ndGggJiYgdW5pY29kZVtwb3NdID09ICcvJyAmJiB1bmljb2RlW3BvcyAr
IDFdID09ICcvJykKLSAgICAgICAgICAgICAgICBwb3MgKz0gMjsKLQotICAgICAgICAgICAgd2hp
bGUgKHBvcyA8IGxlbmd0aCAmJiB1bmljb2RlW3Bvc10gIT0gJy8nKQotICAgICAgICAgICAgICAg
IHBvcysrOwotCi0gICAgICAgICAgICBpZiAocG9zID09IGxlbmd0aCkKLSAgICAgICAgICAgICAg
ICBuZWVkVG9BZGRTbGFzaCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG5lZWRUb0FkZFNsYXNo
KSB7Ci0gICAgICAgIGlmIChsZW5ndGggKyAxIDw9IGJ1ZmZlclNpemUpCi0gICAgICAgICAgICBz
dHJCdWZmZXIgPSBzdGF0aWNTdHJCdWZmZXI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0
ckJ1ZmZlciA9IChVQ2hhciopbWFsbG9jKHNpemVvZihVQ2hhcikgKiAobGVuZ3RoICsgMSkpOwot
ICAgICAgICBtZW1jcHkoc3RyQnVmZmVyLCB1bmljb2RlLCAyICogbGVuZ3RoKTsKLSAgICAgICAg
c3RyQnVmZmVyW2xlbmd0aF0gPSAnLyc7Ci0gICAgICAgIGxlbmd0aCsrOwotCi0gICAgICAgIHVu
aWNvZGVTdHIgPSBzdHJCdWZmZXI7Ci0gICAgfQotCi0gICAgaWYgKCFtX2hpc3RvcnlQcml2YXRl
KSB7Ci0gICAgICAgIGlmIChTVUNDRUVERUQobV9oaXN0b3J5LT5RdWVyeUludGVyZmFjZShJSURf
SVdlYkhpc3RvcnlQcml2YXRlLCAodm9pZCoqKSZtX2hpc3RvcnlQcml2YXRlKSkpIHsKLSAgICAg
ICAgICAgIC8vIGRvbid0IGhvbGQgYSByZWYgLSB3ZSdyZSBvd25lZCBieSBJV2ViSGlzdG9yeS9J
V2ViSGlzdG9yeVByaXZhdGUKLSAgICAgICAgICAgIG1faGlzdG9yeVByaXZhdGUtPlJlbGVhc2Uo
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzdHJCdWZmZXIgIT0gc3RhdGlj
U3RyQnVmZmVyKQotICAgICAgICAgICAgICAgIGZyZWUoc3RyQnVmZmVyKTsKLSAgICAgICAgICAg
IG1faGlzdG9yeVByaXZhdGUgPSAwOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgQ0ZTdHJpbmdSZWYgc3RyID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVyc05vQ29weShOVUxMLCAoY29uc3QgVW5pQ2hhciopdW5pY29kZVN0ciwgbGVuZ3RoLCBr
Q0ZBbGxvY2F0b3JOdWxsKTsKLSAgICBCT09MIHJlc3VsdCA9IEZBTFNFOwotICAgIG1faGlzdG9y
eVByaXZhdGUtPmNvbnRhaW5zSXRlbUZvclVSTFN0cmluZygodm9pZCopc3RyLCAmcmVzdWx0KTsK
LSAgICBDRlJlbGVhc2Uoc3RyKTsKLQotICAgIGlmIChzdHJCdWZmZXIgIT0gc3RhdGljU3RyQnVm
ZmVyKQotICAgICAgICBmcmVlKHN0ckJ1ZmZlcik7Ci0KLSAgICByZXR1cm4gISFyZXN1bHQ7Cisg
ICAgQ0ZEaWN0aW9uYXJ5QXBwbHlGdW5jdGlvbihtX2VudHJpZXNCeVVSTC5nZXQoKSwgYWRkVmlz
aXRlZExpbmtUb1BhZ2VHcm91cCwgJmdyb3VwKTsKIH0KSW5kZXg6IFdlYktpdC93aW4vV2ViSGlz
dG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViSGlzdG9yeS5oCShyZXZpc2lvbiAz
MDc3NikKKysrIFdlYktpdC93aW4vV2ViSGlzdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzIsMzEgKzMyLDIwIEBACiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5k
YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotLy8gezNERTA0RTU5LTkzRjktNDM2OS04QjQzLTk3NjQ1OEQ3RTMxOX0KLURFRklO
RV9HVUlEKElJRF9JV2ViSGlzdG9yeVByaXZhdGUsIDB4M2RlMDRlNTksIDB4OTNmOSwgMHg0MzY5
LCAweDhiLCAweDQzLCAweDk3LCAweDY0LCAweDU4LCAweGQ3LCAweGUzLCAweDE5KTsKLQotaW50
ZXJmYWNlIElXZWJIaXN0b3J5UHJpdmF0ZSA6IHB1YmxpYyBJVW5rbm93bgotewotcHVibGljOgot
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBhZGRJdGVtRm9yVVJMKAotICAg
ICAgICAvKiBbaW5dICovIEJTVFIgdXJsLAotICAgICAgICAvKiBbaW5dICovIEJTVFIgdGl0bGUp
ID0gMDsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgY29udGFpbnNJdGVt
Rm9yVVJMU3RyaW5nKAotICAgICAgICAvKiBbaW5dICovIHZvaWQqIHVybENGU3RyaW5nLAotICAg
ICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIGNvbnRhaW5zKSA9IDA7Ci19OworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGFnZUdyb3VwOworICAg
IGNsYXNzIFN0cmluZzsKK30KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjbGFzcyBXZWJQ
cmVmZXJlbmNlczsKIAotY2xhc3MgV2ViSGlzdG9yeSA6IHB1YmxpYyBJV2ViSGlzdG9yeSwgSVdl
Ykhpc3RvcnlQcml2YXRlCi17CitjbGFzcyBXZWJIaXN0b3J5IDogcHVibGljIElXZWJIaXN0b3J5
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgV2ViSGlzdG9yeSogY3JlYXRlSW5zdGFuY2UoKTsKLXBy
b3RlY3RlZDoKK3ByaXZhdGU6CiAgICAgV2ViSGlzdG9yeSgpOwogICAgIH5XZWJIaXN0b3J5KCk7
CiAKQEAgLTExOSwxMSArMTA4LDExIEBAIHB1YmxpYzoKICAgICAgICAgLyogW3JldHZhbF1bb3V0
XSAqLyBpbnQqIGxpbWl0KTsKIAogICAgIC8vIFdlYkhpc3RvcnkKLSAgICBzdGF0aWMgSVdlYkhp
c3RvcnlQcml2YXRlKiBvcHRpb25hbFNoYXJlZEhpc3RvcnlJbnRlcm5hbCgpOwotICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBhZGRJdGVtRm9yVVJMKEJTVFIgdXJsLCBCU1RS
IHRpdGxlKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgY29udGFpbnNJ
dGVtRm9yVVJMU3RyaW5nKHZvaWQqIHVybENGU3RyaW5nLCBCT09MKiBjb250YWlucyk7CisgICAg
c3RhdGljIFdlYkhpc3RvcnkqIHNoYXJlZEhpc3RvcnkoKTsKKyAgICB2b2lkIGFkZEl0ZW0oY29u
c3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOworICAgIHZvaWQgYWRk
VmlzaXRlZExpbmtzVG9QYWdlR3JvdXAoV2ViQ29yZTo6UGFnZUdyb3VwJik7CiAKLXByb3RlY3Rl
ZDoKK3ByaXZhdGU6CiAgICAgZW51bSBOb3RpZmljYXRpb25UeXBlCiAgICAgewogICAgICAgICBr
V2ViSGlzdG9yeUl0ZW1zQWRkZWROb3RpZmljYXRpb24gPSAwLApAQCAtMTUwLDEzICsxMzksMTEg
QEAgcHJvdGVjdGVkOgogICAgIEJTVFIgZ2V0Tm90aWZpY2F0aW9uU3RyaW5nKE5vdGlmaWNhdGlv
blR5cGUgbm90aWZ5VHlwZSk7CiAgICAgSFJFU1VMVCBpdGVtRm9yVVJMU3RyaW5nKENGU3RyaW5n
UmVmIHVybFN0cmluZywgSVdlYkhpc3RvcnlJdGVtKiogaXRlbSk7CiAKLXByb3RlY3RlZDoKICAg
ICBVTE9ORyBtX3JlZkNvdW50OwogICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVm
PiBtX2VudHJpZXNCeVVSTDsKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IG1fZGF0
ZXNXaXRoRW50cmllczsKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IG1fZW50cmll
c0J5RGF0ZTsKICAgICBDT01QdHI8V2ViUHJlZmVyZW5jZXM+IG1fcHJlZmVyZW5jZXM7Ci0gICAg
c3RhdGljIElXZWJIaXN0b3J5KiBtX29wdGlvbmFsU2hhcmVkSGlzdG9yeTsKIH07CiAKICNlbmRp
ZgpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNw
cAkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlICJXZWJFbGVtZW50UHJvcGVydHlCYWcuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5o
IgorI2luY2x1ZGUgIldlYkhpc3RvcnkuaCIKICNpbmNsdWRlICJXZWJNdXRhYmxlVVJMUmVxdWVz
dC5oIgogI2luY2x1ZGUgIldlYlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiV2ViVmlldy5o
IgpAQCAtMzcsNiArMzgsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dp
bmRvd0ZlYXR1cmVzLmg+CiAjcHJhZ21hIHdhcm5pbmcocG9wKQogCkBAIC00OTYsNiArNDk4LDEx
IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXUKICAgICB9CiB9CiAK
K3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpCit7CisgICAgV2Vi
SGlzdG9yeTo6c2hhcmVkSGlzdG9yeSgpLT5hZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cChtX3dl
YlZpZXctPnBhZ2UoKS0+Z3JvdXAoKSk7Cit9CisKIENPTVB0cjxJV2ViVUlEZWxlZ2F0ZT4gV2Vi
Q2hyb21lQ2xpZW50Ojp1aURlbGVnYXRlKCkKIHsKICAgICBDT01QdHI8SVdlYlVJRGVsZWdhdGU+
IGRlbGVnYXRlOwpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsOSBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OkZyYW1l
KiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIFdlYlZpZXcqIHdlYlZp
ZXcoKSBjb25zdCB7IHJldHVybiBtX3dlYlZpZXc7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxh
dGVWaXNpdGVkTGlua3MoKTsKKworICAgIFdlYlZpZXcqIHdlYlZpZXcoKSBjb25zdCB7IHJldHVy
biBtX3dlYlZpZXc7IH0KIAogcHJpdmF0ZToKICAgICBDT01QdHI8SVdlYlVJRGVsZWdhdGU+IHVp
RGVsZWdhdGUoKTsKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw2ICs1Niw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5QYWNrYWdlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbHVnaW5WaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJQYXJ0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI3ByYWdtYSB3YXJuaW5nKHBv
cCkKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00MjgsMTAgKzQyOSw3IEBAIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGkKIAogdm9pZCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9yeShjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgQ09N
UHRyPFdlYkhpc3Rvcnk+IGhpc3RvcnkgPSB3ZWJIaXN0b3J5KCk7Ci0gICAgaWYgKCFoaXN0b3J5
KQotICAgICAgICByZXR1cm47Ci0gICAgaGlzdG9yeS0+YWRkSXRlbUZvclVSTChCU3RyaW5nKHVy
bC5zdHJpbmcoKSksIDApOyAgICAgICAgICAgICAgICAgCisgICAgV2ViSGlzdG9yeTo6c2hhcmVk
SGlzdG9yeSgpLT5hZGRJdGVtKHVybCwgY29yZShtX3dlYkZyYW1lKS0+bG9hZGVyKCktPmRvY3Vt
ZW50TG9hZGVyKCktPnRpdGxlKCkpOyAgICAgICAgICAgICAgICAgCiB9CiAKIGJvb2wgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OnNob3VsZEdvVG9IaXN0b3J5SXRlbShIaXN0b3J5SXRlbSopIGNvbnN0
CkBAIC02OTcsMTQgKzY5NSwxMCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVj
dERhdGFUCiAgICAgbV9wbHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHBsdWdp
bldpZGdldCk7CiB9CiAKLUNPTVB0cjxXZWJIaXN0b3J5PiBXZWJGcmFtZUxvYWRlckNsaWVudDo6
d2ViSGlzdG9yeSgpIGNvbnN0CitXZWJIaXN0b3J5KiBXZWJGcmFtZUxvYWRlckNsaWVudDo6d2Vi
SGlzdG9yeSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fd2ViRnJhbWUgIT0gbV93ZWJGcmFtZS0+d2Vi
VmlldygpLT50b3BMZXZlbEZyYW1lKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSVdlYkhp
c3RvcnlQcml2YXRlKiBoaXN0b3J5SW50ZXJuYWwgPSBXZWJIaXN0b3J5OjpvcHRpb25hbFNoYXJl
ZEhpc3RvcnlJbnRlcm5hbCgpOyAvLyBkb2VzIG5vdCBhZGQgYSByZWYKLSAgICBpZiAoIWhpc3Rv
cnlJbnRlcm5hbCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gQ09NUHRyPFdlYkhp
c3Rvcnk+KFF1ZXJ5LCBoaXN0b3J5SW50ZXJuYWwpOworICAgIHJldHVybiBXZWJIaXN0b3J5Ojpz
aGFyZWRIaXN0b3J5KCk7CiB9CkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAzMDc3NikKKysrIFdlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA4LDcgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4g
Y3JlYXRlRnJhbWUoY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYg
bmFtZSwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiwgY29uc3QgV2ViQ29yZTo6U3Ry
aW5nJiByZWZlcnJlcik7CiAgICAgdm9pZCBsb2FkVVJMSW50b0NoaWxkKGNvbnN0IFdlYkNvcmU6
OktVUkwmLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHJlZmVycmVyLCBXZWJGcmFtZSogY2hpbGRG
cmFtZSk7CiAgICAgdm9pZCByZWNlaXZlZERhdGEoY29uc3QgY2hhciosIGludCwgY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJik7Ci0gICAgQ09NUHRyPFdlYkhpc3Rvcnk+IHdlYkhpc3RvcnkoKSBjb25z
dDsKKyAgICBXZWJIaXN0b3J5KiB3ZWJIaXN0b3J5KCkgY29uc3Q7CiAKICAgICBXZWJGcmFtZSog
bV93ZWJGcmFtZTsKIAo=
</data>
<flag name="review"
          id="8551"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19547</attachid>
            <date>2008-03-05 10:18:17 -0800</date>
            <delta_ts>2008-03-05 18:17:35 -0800</delta_ts>
            <desc>patch that addresses all of Mitz&apos;s comments except for the missing KURL logic</desc>
            <filename>VisitedPatch.txt</filename>
            <type>text/plain</type>
            <size>146739</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDc5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAzIEBACisyMDA4LTAzLTA1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGZp
eCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUyNgorICAgICAgICAg
IFJFR1JFU1NJT046IGlmcmFtZXMgYXJlIGFkZGVkIHRvIFNhZmFyaSdzIEhpc3RvcnkgbWVudQor
ICAgICAgICAgIGJ5IHNlcGFyYXRpbmcgdGhlIHZpc2l0ZWQgbGluayBtYWNoaW5lcnkgZnJvbSBn
bG9iYWwgaGlzdG9yeQorCisgICAgICAgIFRoaXMgc2hvdWxkIGFsc28gbWFrZSBwYWdlIGxvYWRp
bmcgZmFzdGVyIGR1ZSB0byBtb3JlIGVmZmljaWVudCB2aXNpdGVkIGxpbmsgY29sb3JpbmcuCisK
KyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOiBVcGRhdGVkLgorICAgICAgICAqIFdlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGRlZCBQYWdlR3JvdXAuaC9jcHAsIHJlbW92ZWQgR2xv
YmFsSGlzdG9yeS5oL2NwcC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6IERpdHRvLiBBbHNvIHJlbW92ZWQgV2ViQ29yZUhpc3RvcnkuaC9tLgorCisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOiBVcGRhdGVkIGluY2x1ZGVzLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEVsZW1lbnRBbmRQc2V1ZG9TdGF0ZSk6IEVs
aW1pbmF0ZWQgY29kZSB0byBzZXQKKyAgICAgICAgY3VycmVudEVuY29kZWRVUkwuCisgICAgICAg
IChXZWJDb3JlOjpjaGVja1BzZXVkb1N0YXRlKTogTW92ZWQgbW9zdCBvZiB0aGUgY29kZSBpbnNp
ZGUgYSBuZXcKKyAgICAgICAgUGFnZUdyb3VwOjppc0xpbmtWaXNpdGVkIGZ1bmN0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KTogVGlnaHRlbmVkIGNvZGUgYSBiaXQgYnkgdXNpbmcKKyAgICAgICAgcmVmZXJlbmNlcyBhbmQg
b25seSBnZXR0aW5nIGNvbG9ycyB3aGVuIG5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OmdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKTogRGl0dG8uCisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDogUmVtb3ZlZCBFbmNvZGVkVVJMLCBtX2VuY29kZWRV
UkwsIGFuZCBzZXRFbmNvZGVkVVJMLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphdHRhY2gpOiBSZW1vdmVkIGNhbGwgdG8gc2V0RW5j
b2RlZFVSTC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRVUkwpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKTogRGl0dG8uCisK
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmFkZEJhY2tGb3J3YXJkSXRlbUNsaXBwZWRBdFRhcmdldCk6IENoYW5nZWQgY29k
ZSB0byB1c2UKKyAgICAgICAgZWFybHkgZXhpdCBpZGlvbSB0byBiZSBhIGxpdHRsZSBtb3JlIHJl
YWRhYmxlLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnVybHNNYXRjaEl0ZW0pOiBD
aGFuZ2UgdG8gdXNlIGEgcmVmZXJlbmNlIGZvciBzbGlnaHRseQorICAgICAgICBiZXR0ZXIgZWZm
aWNpZW5jeS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpnb1RvSXRlbSk6IFVzZSBl
YXJseSBleGl0IGlkaW9tIHRvIGJlIGEgbGl0dGxlIG1vcmUKKyAgICAgICAgcmVhZGFibGUuCisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvclN0YW5kYXJkTG9h
ZCk6IE1vdmVkIGhpc3RvcnkgY29kZSBiYWNrCisgICAgICAgIGluIGhlcmUgYW5kIGdvdCByaWQg
b2YgdGhlIGhlbHBlciBmdW5jdGlvbiB1cGRhdGVHbG9iYWxIaXN0b3J5LCByZXN0b3JpbmcgdGhl
CisgICAgICAgIGxvZ2ljIGJlZm9yZSByMzA1NDkuIEFsc28gYWRkZWQgYSBjYWxsIHRvIHRoZSBu
ZXcgYWRkVmlzaXRlZExpbmsgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6dXBkYXRlSGlzdG9yeUZvckNsaWVudFJlZGlyZWN0KTogQWRkZWQgY29kZSB0byBjYWxsCisg
ICAgICAgIGFkZFZpc2l0ZWRMaW5rIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6dXBkYXRlSGlzdG9yeUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbik6IFJlbW92ZWQgY29tbWVu
dC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yUmVsb2Fk
KTogUmVtb3ZlZCBjYWxsIHRvCisgICAgICAgIHVwZGF0ZUdsb2JhbEhpc3Rvcnk7IHdlIGNhbiBq
dXN0IGdvIHdpdGhvdXQgdXBkYXRpbmcgZ2xvYmFsIGhpc3Rvcnkgb3IKKyAgICAgICAgdmlzaXRl
ZCBsaW5rcyBoZXJlLCBhdCBsZWFzdCBmb3Igbm93LCBzaW5jZSBpdCdzIG5vdCBjbGVhciB0aGF0
IGEgcmVsb2FkCisgICAgICAgIGlzIGEgImhpc3RvcnkgZXZlbnQiLgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWRpcmVjdFdpdGhMb2NrZWRIaXN0b3J5
KTogTW92ZWQKKyAgICAgICAgaGlzdG9yeSBjb2RlIGJhY2sgd2hlcmUgaXQgd2FzLCBhbmQgYWRk
ZWQgdGhlIGNhbGwgdG8gYWRkVmlzaXRlZExpbmssIGp1c3QKKyAgICAgICAgYXMgaW4gdXBkYXRl
SGlzdG9yeUZvclN0YW5kYXJkTG9hZCBhYm92ZS4KKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2Fk
ZXIuaDogUmVtb3ZlZCB1cGRhdGVHbG9iYWxIaXN0b3J5IGZ1bmN0aW9uLgorCisgICAgICAgICog
cGFnZS9DaHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojpwb3B1bGF0
ZVZpc2l0ZWRMaW5rcyk6IEFkZGVkLiBFbXB0eSBwbGFjZWhvbGRlciBzbyB3ZQorICAgICAgICBk
b24ndCBoYXZlIHRvIGltcGxlbWVudCB0aGlzIGZvciBldmVyeSBwb3J0IGFsbCBhdCBvbmNlLgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwTG9hZERlZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVm
ZXJyZXIpOiBDaGFuZ2VkIHRvIHVzZSB0aGUKKyAgICAgICAgbmV3IFBhZ2VHcm91cCBjbGFzcy4K
KyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOiBBZGRlZCBwb3B1bGF0ZVZpc2l0ZWRMaW5r
cyBmdW5jdGlvbiwgdXNlZCB0byBmaWxsIHRoZQorICAgICAgICB2aXNpdGVkIGxpbmtzIHNldCBm
cm9tIHRoZSBnbG9iYWwgaGlzdG9yeSBhdCBhcHBsaWNhdGlvbiBzdGFydHVwIHRpbWUuCisKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6
OmZpbmQpOiBVcGRhdGVkIHRvIHVzZSB0aGUgbmV3IFBhZ2VHcm91cCBjbGFzcy4KKworICAgICAg
ICAqIHBhZ2UvR2xvYmFsSGlzdG9yeS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2Uvd2luL0ds
b2JhbEhpc3RvcnlXaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvbWFjL0dsb2JhbEhp
c3RvcnlNYWMubW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVIaXN0
b3J5Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVIaXN0b3J5Lm06
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vd2luL1dlYkNvcmVIaXN0b3J5LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV2ViQ29yZUhpc3RvcnkuaDogUmVtb3ZlZC4K
KworICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpQYWdl
KTogU2V0IG1fZ3JvdXAgdG8gMC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldEdyb3VwTmFt
ZSk6IFNldCB1cCBtX2dyb3VwLiBJZiB0aGUgcGFnZSBpcyBub3QgaW4gYW55CisgICAgICAgIGdy
b3VwLCBzZXQgaXQgdG8gMCBmb3Igbm93IHRvIHBvc3Rwb25lIHRoZSBjb3N0IG9mIGNyZWF0aW5n
IGEgZ3JvdXAuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjppbml0R3JvdXApOiBBZGRlZC4gU2V0
cyBtX2dyb3VwIHRvIHBvaW50IHRvIGEgc2luZ2xlLXBhZ2UKKyAgICAgICAgZ3JvdXA7IHVzZWQg
d2hlbiBnZXR0aW5nIGEgZ3JvdXAuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZW1vdmVBbGxW
aXNpdGVkTGlua3MpOiBBZGRlZC4gQ2FsbHMgcmVtb3ZlVmlzaXRlZExpbmtzCisgICAgICAgIG9u
IGFsbCBwYWdlIGdyb3Vwcy4KKyAgICAgICAgKiBwYWdlL1BhZ2UuaDogTW92ZWQgZW51bXMgaW5z
aWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZS4gUmVtb3ZlZCB0aGUKKyAgICAgICAgZnJhbWVOYW1l
c3BhY2UgZnVuY3Rpb24gYW5kIGluc3RlYWQgYWRkZWQgdGhlIGdyb3VwIGFuZCBncm91cFB0ciBm
dW5jdGlvbnMuCisKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6IEFkZGVkLiBDb250YWlu
cyBhbGwgdGhlIHZpc2l0ZWQgY29kZSBmcm9tIHRoZQorICAgICAgICBDU1NTdHlsZVNlbGVjdG9y
IGluIHRoZSBpc1Zpc2l0ZWRMaW5rIGZ1bmN0aW9uLCBidXQgbW9yZSBlZmZpY2llbnQgYmVjYXVz
ZQorICAgICAgICB3ZSBkb24ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBidWZmZXIuCisgICAg
ICAgICogcGFnZS9QYWdlR3JvdXAuaDogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OktVUkwpOiBaZXJvIG91dCBwb3J0RW5kUG9z
IGFuZCBwYXRoRW5kUG9zLgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6aW5pdCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6S1VSTDo6aGFzUGF0aCk6IFJlbW92ZSBjaGVjayBmb3IgbV9pc1Zh
bGlkLCB3aGljaCBpcyBub3QgbmVlZGVkCisgICAgICAgIGFueSBtb3JlIGJlY2F1c2UgYm90aCBw
YXRoRW5kUG9zIGFuZCBwb3J0RW5kUG9zIGFyZSBzZXQgdG8gMC4KKworICAgICAgICAqIHBsYXRm
b3JtL0tVUkwuaDogQWRkZWQgcGF0aFN0YXJ0LCBwYXRoRW5kLCBhbmQgcGF0aEFmdGVyTGFzdFNs
YXNoLCB3aGljaAorICAgICAgICBhbGxvdyB0aGUgdmlzaXRlZCBVUkwgY29kZSB0byB3b3JrIGVm
ZmljaWVudGx5IG9uIGEgS1VSTCB3aXRob3V0IHN0b3JpbmcgYQorICAgICAgICBjb3B5IG9mIHRo
ZSBVUkwgYXMgYSBDU1NTdHlsZVNlbGVjdG9yOjpFbmNvZGVkVVJMLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IFJlbW92ZWQgaGlzdG9yeUNvbnRhaW5z
LgorICAgICAgICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IFJlbW92ZWQg
dW5uZWVkZWQgaW5jbHVkZS4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwOiBSZW1vdmVkIGhpc3RvcnlDb250YWlucy4KKwogMjAwOC0wMy0wNCAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbS4K
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDMwNzk0KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0zODEsNiArMzgxLDcgQEAgX19aTjdXZWJDb3JlNFBhZ2Uz
N3NldEluTG93UXVhbGl0eUltYWdlSQogX19aTjdXZWJDb3JlNFBhZ2U2Z29CYWNrRXYKIF9fWk43
V2ViQ29yZTRQYWdlOGdvVG9JdGVtRVBOU18xMUhpc3RvcnlJdGVtRU5TXzEzRnJhbWVMb2FkVHlw
ZUUKIF9fWk43V2ViQ29yZTRQYWdlOWdvRm9yd2FyZEV2CitfX1pON1dlYkNvcmU0UGFnZTlpbml0
R3JvdXBFdgogX19aTjdXZWJDb3JlNFBhZ2VDMUVQTlNfMTJDaHJvbWVDbGllbnRFUE5TXzE3Q29u
dGV4dE1lbnVDbGllbnRFUE5TXzEyRWRpdG9yQ2xpZW50RVBOU18xMERyYWdDbGllbnRFUE5TXzE1
SW5zcGVjdG9yQ2xpZW50RQogX19aTjdXZWJDb3JlNFBhZ2VEMUV2CiBfX1pON1dlYkNvcmU1Q2Fj
aGUxMXNldERpc2FibGVkRWIKQEAgLTUzNiw2ICs1MzcsOCBAQCBfX1pON1dlYkNvcmU5SFRNTE5h
bWVzN3NyY0F0dHJFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzOGhyZWZBdHRyRQogX19aTjdXZWJD
b3JlOVBhZ2VDYWNoZTExc2V0Q2FwYWNpdHlFaQogX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTI3cmVs
ZWFzZUF1dG9yZWxlYXNlZFBhZ2VzTm93RXYKK19fWk43V2ViQ29yZTlQYWdlR3JvdXAxNGFkZFZp
c2l0ZWRMaW5rRVBLdG0KK19fWk43V2ViQ29yZTlQYWdlR3JvdXAyMXJlbW92ZUFsbFZpc2l0ZWRM
aW5rc0V2CiBfX1pON1dlYkNvcmU5U2VsZWN0aW9uMjJleHBhbmRVc2luZ0dyYW51bGFyaXR5RU5T
XzE1VGV4dEdyYW51bGFyaXR5RQogX19aTjdXZWJDb3JlOVRpbWVyQmFzZTRzdG9wRXYKIF9fWk43
V2ViQ29yZTlUaW1lckJhc2U1c3RhcnRFZGQKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzU1LDEwICsyNzU1LDYgQEAKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cYnJpZGdlXEdsb2Jh
bEhpc3RvcnkuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGFnZVxIaXN0b3J5LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yNzk1LDYgKzI3
OTEsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGFnZVxQYWdlR3JvdXAuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBhZ2VHcm91cC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBsdWdpbi5oIgogCQkJCT4KIAkJCTwv
RmlsZT4KQEAgLTI4MzgsMTAgKzI4NDIsNiBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxG
aWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVx3aW5cR2xvYmFsSGlzdG9yeVdpbi5jcHAi
Ci0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
YWdlXHdpblxQYWdlV2luLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTM1NjksMTQgKzM1
NjksNiBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cd2luXFdlYkNvcmVIaXN0b3J5LmNwcCIKLQkJCQkJPgotCQkJCTwvRmls
ZT4KLQkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHdpblxXZWJDb3Jl
SGlzdG9yeS5oIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cd2luXFdlYkNvcmVUZXh0UmVuZGVyZXIuY3BwIgogCQkJCQk+CiAJ
CQkJPC9GaWxlPgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDMwNzk0KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0MiwxNCArMjQyLDEyIEBACiAJCTFBRTgyRkVE
MENBQjA3RUUwMDIyMzdBRSAvKiBKU1NRTFJlc3VsdFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFODJGRUIwQ0FCMDdFRTAwMjIzN0FFIC8qIEpT
U1FMUmVzdWx0U2V0LmggKi87IH07CiAJCTFBRTgzMDQ0MENBQjBFRDEwMDIyMzdBRSAvKiBKU0Rh
dGFiYXNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBRTgzMDQyMENBQjBFRDEwMDIyMzdBRSAvKiBKU0RhdGFiYXNlQ3VzdG9tLmNwcCAq
LzsgfTsKIAkJMUFGMzI2NDYwRDc4QjU1MzAwNjhGMEM0IC8qIEFYT2JqZWN0Q2FjaGVNYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUYzMjY0MDBE
NzhCNTUzMDA2OEYwQzQgLyogQVhPYmplY3RDYWNoZU1hYy5tbSAqLzsgfTsKLQkJMUFGMzI2NDcw
RDc4QjU1MzAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnlNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUYzMjY0MTBENzhCNTUzMDA2OEYwQzQgLyog
R2xvYmFsSGlzdG9yeU1hYy5tbSAqLzsgfTsKIAkJMUFGMzI2NDgwRDc4QjU1MzAwNjhGMEM0IC8q
IFdlYkNvcmVBWE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFGMzI2NDIwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVBWE9iamVjdC5oICov
OyB9OwogCQkxQUYzMjY0OTBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZUFYT2JqZWN0Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGMzI2NDMwRDc4
QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVBWE9iamVjdC5tbSAqLzsgfTsKIAkJMUFGMzI2NEEwRDc4
QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGMzI2NDQwRDc4QjU1MzAwNjhGMEM0IC8q
IFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTFBRjMyNjRCMEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlU2Ny
aXB0RGVidWdnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQUYzMjY0NTBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1t
ICovOyB9OwogCQkxQUYzMjY3ODBENzhCOTQ0MDA2OEYwQzQgLyogQVhPYmplY3RDYWNoZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGMzI2NzYwRDc4
Qjk0NDAwNjhGMEM0IC8qIEFYT2JqZWN0Q2FjaGUuaCAqLzsgfTsKIAkJMUFGMzI2NzkwRDc4Qjk0
NDAwNjhGMEM0IC8qIEVkaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFGMzI2NzcwRDc4Qjk0NDAwNjhGMEM0IC8qIEVkaXRvckNsaWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFB
RjMyNjdCMEQ3OEI5NEUwMDY4RjBDNCAvKiBHbG9iYWxIaXN0b3J5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUYzMjY3QTBENzhCOTRFMDA2OEYwQzQg
LyogR2xvYmFsSGlzdG9yeS5oICovOyB9OwogCQkxQUZFMTE3RDBDQkZGQjM2MDAzMDE3RkEgLyog
U1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQUZFMTE3QjBDQkZGQjM2MDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0Um93
TGlzdC5jcHAgKi87IH07CiAJCTFBRkUxMTdFMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRT
ZXRSb3dMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUZFMTE3QzBDQkZGQjM2MDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5oICovOyB9
OwogCQkxQUZFMTE5OTBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRkUxMTk3
MENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovOyB9OwpAQCAt
MTQzOSw2ICsxNDM3LDggQEAKIAkJODVGRjMxNUEwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJv
YXJkRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg1RkYzMTU4MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50LmggKi87IH07CiAJ
CTg1RkYzMTVCMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVGRjMxNTkwQUFGQkZDQjAw
Mzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi87IH07CiAJCTkyOTI2NDc3MEI2MUZDNzIw
MEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkyOTI2NDc2MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3Vt
ZW50Q3VzdG9tLmNwcCAqLzsgfTsKKwkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VH
cm91cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLzsgfTsKKwkJOTMwMkIw
QkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VH
cm91cC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzMDVCMjREMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRp
bWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
OTMwNzA1RDgwOUUwQzlCNzAwQjE3RkU0IC8qIEpTQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA3MDVENzA5RTBDOUI3MDBCMTdGRTQg
LyogSlNDb3VudGVyLmNwcCAqLzsgfTsKIAkJOTMwNzA1REEwOUUwQzlCRjAwQjE3RkU0IC8qIEpT
Q291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTMwNzA1RDkwOUUwQzlCRjAwQjE3RkU0IC8qIEpTQ291bnRlci5oICovOyB9OwpAQCAtMTY0NSw3
ICsxNjQ1LDYgQEAKIAkJOTNGMTk5OUQwODI0NUU1OTAwMUU5QUJDIC8qIERlcHJlY2F0ZWRWYWx1
ZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1
ODc4NkMyMDJERTNCODYwMUVBNDEyMiAvKiBEZXByZWNhdGVkVmFsdWVMaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5OUUwODI0NUU1
OTAwMUU5QUJDIC8qIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODUzQjAyREUzNzU5MDFFQTQxMjIgLyog
RGVwcmVjYXRlZFZhbHVlTGlzdEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk5M0YxOTlBODA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZUZy
YW1lVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjU4Nzg1NEMwMkRFMzc1OTAxRUE0MTIyIC8qIFdlYkNvcmVGcmFtZVZpZXcuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5M0YxOTlBOTA4MjQ1RTU5
MDAxRTlBQkMgLyogV2ViQ29yZUhpc3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1NTE3REMyMDMxQUI1NjMwMUE4MDE4MCAvKiBXZWJDb3JlSGlz
dG9yeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzRjE5OUIzMDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlVmlld0ZhY3RvcnkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NTU0MDJERTM3NTkw
MUVBNDEyMiAvKiBXZWJDb3JlVmlld0ZhY3RvcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOTlCODA4MjQ1RTU5MDAxRTlBQkMgLyogU2Ny
b2xsQmFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzdCMkFGODA0NTA4MjQxMDBBODAwMEYgLyogU2Nyb2xsQmFyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5QkIwODI0NUU1OTAwMUU5QUJD
IC8qIFdlYkNvcmVLZXlib2FyZFVJTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkU5ODNEOTUwNTJBMkUwQTAwODkyRDg1IC8qIFdlYkNvcmVLZXli
b2FyZFVJTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xNjY5LDcgKzE2NjgsNiBAQAogCQk5M0YxOUE5RDA4MjQ1RTU5MDAxRTlBQkMgLyog
VGV4dFJlc291cmNlRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTIzRDI3ODAyREU0M0Q3MDE4NjM1Q0EgLyogVGV4dFJlc291cmNlRGVj
b2Rlci5jcHAgKi87IH07CiAJCTkzRjE5QUI5MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwMzAy
REU0NDc2MDE4NjM1Q0EgLyogUmFuZ2UuY3BwICovOyB9OwogCQk5M0YxOUFCQzA4MjQ1RTU5MDAx
RTlBQkMgLyogWE1MVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1MjNEMzA5MDJERTQ0NzYwMTg2MzVDQSAvKiBYTUxUb2tlbml6ZXIu
Y3BwICovOyB9OwotCQk5M0YxOUFDODA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZUhpc3Rvcnku
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1NTE3REMz
MDMxQUI1NjMwMUE4MDE4MCAvKiBXZWJDb3JlSGlzdG9yeS5tICovOyB9OwogCQk5M0YxOUFENTA4
MjQ1RTU5MDAxRTlBQkMgLyogUmVuZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk1NUE0MjAzRDcyOTMyMDA4NjM1Q0UgLyog
UmVuZGVyVHJlZUFzVGV4dC5jcHAgKi87IH07CiAJCTkzRjE5QURDMDgyNDVFNTkwMDFFOUFCQyAv
KiBQbGF0Zm9ybVNjcm9sbEJhck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDN0IyQUY5MDQ1MDgyNDEwMEE4MDAwRiAvKiBQbGF0Zm9ybVNjcm9s
bEJhck1hYy5tbSAqLzsgfTsKIAkJOTNGMTlBRTEwODI0NUU1OTAwMUU5QUJDIC8qIEJsb2NrRXhj
ZXB0aW9ucy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1RjgwNjk3MDU0RDlGODYwMDhCRjc3NiAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gKi87IH07CkBA
IC00NTMwLDE0ICs0NTI4LDEyIEBACiAJCTFBRTgyRkVCMENBQjA3RUUwMDIyMzdBRSAvKiBKU1NR
TFJlc3VsdFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTFJlc3Vs
dFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUU4MzA0MjBDQUIwRUQxMDAy
MjM3QUUgLyogSlNEYXRhYmFzZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0RhdGFiYXNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUFGMzI2NDAwRDc4QjU1MzAwNjhGMEM0IC8qIEFYT2JqZWN0Q2FjaGVNYWMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBWE9iamVjdENhY2hlTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUYzMjY0MTBENzhCNTUzMDA2OEYwQzQg
LyogR2xvYmFsSGlzdG9yeU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEdsb2JhbEhpc3RvcnlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBRjMyNjQyMEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlQVhPYmplY3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUFYT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBRjMyNjQzMEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlQVhPYmpl
Y3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlQVhP
YmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRjMyNjQ0MEQ3OEI1NTMw
MDY4RjBDNCAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBRjMyNjQ1MEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlU2NyaXB0RGVidWdn
ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlU2Ny
aXB0RGVidWdnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRjMyNjc2MEQ3
OEI5NDQwMDY4RjBDNCAvKiBBWE9iamVjdENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFYT2JqZWN0Q2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFGMzI2NzcwRDc4Qjk0NDAwNjhGMEM0IC8qIEVkaXRvckNsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0b3JDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUFGMzI2N0EwRDc4Qjk0RTAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2xvYmFsSGlzdG9yeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQUZFMTE3QjBDQkZGQjM2MDAzMDE3RkEgLyogU1FMUmVzdWx0
U2V0Um93TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxS
ZXN1bHRTZXRSb3dMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGRTEx
N0MwQ0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMUmVzdWx0U2V0Um93TGlzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQUZFMTE4QzBDQkZGQzRFMDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0
Um93TGlzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1FMUmVzdWx0U2V0Um93TGlzdC5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NjcxLDYgKzU2NjcsOCBAQAogCQk4
NUZGMzE1ODBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRF
dmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01LZXli
b2FyZEV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MjkyNjQ3NjBCNjFG
QzcyMDBCNDFEMzQgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNEb2N1bWVudEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUdyb3VwLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VH
cm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlR3JvdXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRp
bWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDcwNTkwMDlFMEM3NTgwMEIxN0ZFNCAvKiBDU1NQcmlt
aXRpdmVWYWx1ZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9IHNvdXJjZWNvZGU7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBDU1NQcmltaXRpdmVW
YWx1ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDcwNUM3MDlFMEM5NUYw
MEIxN0ZFNCAvKiBDb3VudGVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDb3VudGVyLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc5MjEsOCArNzkxOSw2IEBACiAJCUY1
MjNEMzA0MDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QzMDkwMkRFNDQ3NjAx
ODYzNUNBIC8qIFhNTFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QzMEEwMkRF
NDQ3NjAxODYzNUNBIC8qIFhNTFRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxUb2tlbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1NTE3REMyMDMxQUI1
NjMwMUE4MDE4MCAvKiBXZWJDb3JlSGlzdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViQ29yZUhpc3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RjU1MTdEQzMwMzFBQjU2MzAxQTgwMTgwIC8qIFdlYkNvcmVIaXN0b3J5Lm0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJDb3JlSGlzdG9yeS5tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGNTg3ODRGMDAyREUzNzU5MDFFQTQxMjIgLyogQ3Vyc29yTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gQ3Vyc29yTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg1MTUwMkRFMzc1OTAxRUE0MTIyIC8qIERlcHJlY2F0ZWRQ
dHJMaXN0SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXByZWNhdGVkUHRyTGlzdEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NTE2MDJERTM3NTkwMUVBNDEy
MiAvKiBEZXByZWNhdGVkUHRyTGlzdEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBA
IC04MzY2LDggKzgzNjIsNiBAQAogCQkJCTg0QjJCMjRGMDU2QkYxNUYwMEQyQjc3MSAvKiBTU0xL
ZXlHZW5lcmF0b3JNYWMubW0gKi8sCiAJCQkJNjU4MkExNTUwOTk5OUQ2RDAwQkVFQjZEIC8qIFN5
c3RlbVRpbWVNYWMuY3BwICovLAogCQkJCTUxREY2RDdGMEI5MkExOEUwMEMyREM4NSAvKiBUaHJl
YWRDaGVjay5tbSAqLywKLQkJCQlGNTUxN0RDMjAzMUFCNTYzMDFBODAxODAgLyogV2ViQ29yZUhp
c3RvcnkuaCAqLywKLQkJCQlGNTUxN0RDMzAzMUFCNTYzMDFBODAxODAgLyogV2ViQ29yZUhpc3Rv
cnkubSAqLywKIAkJCQk4NEIyQjFGNzA1NkJFRjNBMDBEMkI3NzEgLyogV2ViQ29yZUtleUdlbmVy
YXRvci5oICovLAogCQkJCTg0QjJCMUY4MDU2QkVGM0EwMEQyQjc3MSAvKiBXZWJDb3JlS2V5R2Vu
ZXJhdG9yLm0gKi8sCiAJCQkJOTM0RDlCQTYwQjhDMTE3NTAwN0I0MkE5IC8qIFdlYkNvcmVOU1N0
cmluZ0V4dHJhcy5oICovLApAQCAtODQzMyw3ICs4NDI3LDYgQEAKIAkJCQk2NUEyMTQ4MzA5N0Ez
RjUzMDBCOTA1MEEgLyogRnJhbWVUcmVlLmggKi8sCiAJCQkJNjVDQkZFRjcwOTc0RjYwNzAwMURB
QzI1IC8qIEZyYW1lVmlldy5jcHAgKi8sCiAJCQkJNjVDQkZFRjgwOTc0RjYwNzAwMURBQzI1IC8q
IEZyYW1lVmlldy5oICovLAotCQkJCTFBRjMyNjdBMEQ3OEI5NEUwMDY4RjBDNCAvKiBHbG9iYWxI
aXN0b3J5LmggKi8sCiAJCQkJQkM5NEQxNTAwQzI3NUM4QjAwNkJDNjE3IC8qIEhpc3RvcnkuY3Bw
ICovLAogCQkJCUJDOTREMTUxMEMyNzVDOEIwMDZCQzYxNyAvKiBIaXN0b3J5LmggKi8sCiAJCQkJ
QkM5NEQxNTIwQzI3NUM4QjAwNkJDNjE3IC8qIEhpc3RvcnkuaWRsICovLApAQCAtODQ0NCw2ICs4
NDM3LDggQEAKIAkJCQk5MzVDNDc2MjA5QUM0Q0U2MDBBNkFBQjQgLyogTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cy5oICovLAogCQkJCTY1RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdl
LmNwcCAqLywKIAkJCQk2NUEyMTQ2NzA5N0EzMjkxMDBCOTA1MEEgLyogUGFnZS5oICovLAorCQkJ
CTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovLAorCQkJCTkzMDJC
MEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLywKIAkJCQk2NUQxQzFDOTA5OTMy
QjIyMDAwQ0IzMjQgLyogUGx1Z2luLmggKi8sCiAJCQkJQkNFQzAxQkEwQzI3NERBQzAwOUY0RUM5
IC8qIFNjcmVlbi5jcHAgKi8sCiAJCQkJQkNFQzAxQkIwQzI3NERBQzAwOUY0RUM5IC8qIFNjcmVl
bi5oICovLApAQCAtOTc0Myw3ICs5NzM4LDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCiAJCQkJMUFGMzI2NDAwRDc4QjU1MzAwNjhGMEM0IC8qIEFYT2JqZWN0Q2FjaGVN
YWMubW0gKi8sCi0JCQkJMUFGMzI2NDEwRDc4QjU1MzAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnlN
YWMubW0gKi8sCiAJCQkJMUFGMzI2NDIwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVBWE9iamVj
dC5oICovLAogCQkJCTFBRjMyNjQzMEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlQVhPYmplY3Qu
bW0gKi8sCiAJCQkJMUFGMzI2NDQwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVTY3JpcHREZWJ1
Z2dlci5oICovLApAQCAtMTQxMjAsNyArMTQxMTQsNiBAQAogCQkJCUIyNTU5OTZGMEQwMEQ4QkEw
MEJCODI1QyAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
NEVDNjExMDk3Nzc4RjUwMERBQjUyQyAvKiBXZWJDb3JlRnJhbWVCcmlkZ2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzRjE5OUE4MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlRnJhbWVWaWV3Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOTlBOTA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZUhp
c3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUMyMDgyNDVFNTkwMDFFOUFCQyAvKiBX
ZWJDb3JlS2V5R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlCQjA4MjQ1RTU5
MDAxRTlBQkMgLyogV2ViQ29yZUtleWJvYXJkVUlNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzREOUJBNzBCOEMxMTc1MDA3QjQyQTkgLyogV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTE0MjQwLDcgKzE0MjMzLDcgQEAKIAkJCQkxQUYzMjY0ODBENzhCNTUzMDA2
OEYwQzQgLyogV2ViQ29yZUFYT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUYzMjY0QTBE
NzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUYzMjY3ODBENzhCOTQ0MDA2OEYwQzQgLyogQVhPYmplY3RDYWNoZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMUFGMzI2N0IwRDc4Qjk0RTAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnkuaCBp
biBIZWFkZXJzICovLAorCQkJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDQTgzRTUwMEQ3Q0UxRTkwMDM0MjFBOCAvKiBKU0NsaXBi
b2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2QzQ5RjQwRDdEQkEwNTAwRkZBNTU4IC8qIEpT
SW1hZ2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzNDUyNDQwRDdFMDBFQTAw
MTY1NzRBIC8qIEpTUkdCQ29sb3IuaCBpbiBIZWFkZXJzICovLApAQCAtMTU3MzYsNyArMTU3Mjks
NiBAQAogCQkJCUIyNTU5OTZEMEQwMEQ4QkEwMEJCODI1QyAvKiBXS1Nwb3RMaWdodEZpbHRlci5t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjI1NTk5NzAwRDAwRDhCQTAwQkI4MjVDIC8qIFdLVGFibGVU
cmFuc2ZlckZpbHRlci5tIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU0RUM2MTIwOTc3NzhGNTAwREFC
NTJDIC8qIFdlYkNvcmVGcmFtZUJyaWRnZS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTkzRjE5QUM4
MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlSGlzdG9yeS5tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTNGMTlBRTUwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IubSBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzNEQ5QkE1MEI4QzExNkIwMDdCNDJBOSAvKiBXZWJDb3JlTlNTdHJpbmdF
eHRyYXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlERDA1RkUwRTBCOEJBM0M2MDA5QUNERkUgLyog
V2ViQ29yZU9iakNFeHRyYXMuYyBpbiBTb3VyY2VzICovLApAQCAtMTU4MzcsOSArMTU4MjksOSBA
QAogCQkJCUE3NjZGMzUzMEQ2QkRFMzUwMEFCRERCMyAvKiBKU0NhbnZhc1BpeGVsQXJyYXlDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNFRkM5QkEwRDc4REM4QzAwN0QyNTc5IC8qIFNj
aGVkdWxlUGFpci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUYzMjY0NjBENzhCNTUzMDA2OEYw
QzQgLyogQVhPYmplY3RDYWNoZU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTFBRjMyNjQ3MEQ3
OEI1NTMwMDY4RjBDNCAvKiBHbG9iYWxIaXN0b3J5TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUFGMzI2NDkwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVBWE9iamVjdC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBRjMyNjRCMEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlU2NyaXB0RGVidWdn
ZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFn
ZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDRTI0Rjk3MEQ3Q0FGMEUwMDdFMDRDMiAv
KiBTY2hlZHVsZVBhaXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0E4M0U0RjBEN0NFMUU5
MDAzNDIxQTggLyogSlNDbGlwYm9hcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBODNFNTIw
RDdDRTIwNTAwMzQyMUE4IC8qIEpTQ2xpcGJvYXJkQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDMwNzk0KQorKysgV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwx
NCBAQAogI2luY2x1ZGUgIkZvbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR2xvYmFsSGlzdG9yeS5oIgogI2luY2x1ZGUgIkhU
TUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhTGlz
dC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUGFpci5oIgogI2luY2x1ZGUgIlJl
Y3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtMjMyLDcgKzIzMyw2IEBAIENTU1N0
eWxlU2hlZXQqIENTU1N0eWxlU2VsZWN0b3I6Om1fdmlld1MKIENTU1N0eWxlU2hlZXQgKkNTU1N0
eWxlU2VsZWN0b3I6Om1fc3ZnU2hlZXQgPSAwOwogI2VuZGlmCiAKLXN0YXRpYyBDU1NTdHlsZVNl
bGVjdG9yOjpFbmNvZGVkVVJMKiBjdXJyZW50RW5jb2RlZFVSTCA9IDA7CiBzdGF0aWMgUHNldWRv
U3RhdGUgcHNldWRvU3RhdGU7CiAKIHN0YXRpYyBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBz
Y3JlZW5FdmFsKCkKQEAgLTMxNiwyOCArMzE2LDEwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
aW5pdCgpCiAgICAgbV9tZWRpdW0gPSAwOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNl
dEVuY29kZWRVUkwoY29uc3QgS1VSTCYgdXJsKQotewotICAgIEtVUkwgdSA9IHVybDsKLQotICAg
IHUuc2V0UXVlcnkoU3RyaW5nKCkpOwotICAgIHUuc2V0UmVmKFN0cmluZygpKTsKLSAgICBtX2Vu
Y29kZWRVUkwuZmlsZSA9IHUuc3RyaW5nKCk7Ci0gICAgaW50IHBvcyA9IG1fZW5jb2RlZFVSTC5m
aWxlLnJldmVyc2VGaW5kKCcvJyk7Ci0gICAgbV9lbmNvZGVkVVJMLnBhdGggPSBtX2VuY29kZWRV
UkwuZmlsZTsKLSAgICBpZiAocG9zID4gMCkgewotICAgICAgICBtX2VuY29kZWRVUkwucGF0aC50
cnVuY2F0ZShwb3MpOwotICAgICAgICBtX2VuY29kZWRVUkwucGF0aC5hcHBlbmQoJy8nKTsKLSAg
ICB9Ci0gICAgdS5zZXRQYXRoKFN0cmluZygpKTsKLSAgICBtX2VuY29kZWRVUkwucHJlZml4ID0g
dS5zdHJpbmcoKTsKLX0KLQogQ1NTU3R5bGVTZWxlY3Rvcjo6fkNTU1N0eWxlU2VsZWN0b3IoKQog
ewogICAgIGRlbGV0ZSBtX21lZGl1bTsKLSAgICA6OmRlbGV0ZSBtX3Jvb3REZWZhdWx0U3R5bGU7
Ci0KKyAgICBkZWxldGUgbV9yb290RGVmYXVsdFN0eWxlOwogICAgIGRlbGV0ZSBtX2F1dGhvclN0
eWxlOwogICAgIGRlbGV0ZSBtX3VzZXJTdHlsZTsKIH0KQEAgLTUzNyw3ICs1MTksNiBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6OmluaXRFbGVtZW50QW5kUHNlCiAgICAgICAgIG1fc3R5bGVkRWxl
bWVudCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpOwogICAgIGVsc2UK
ICAgICAgICAgbV9zdHlsZWRFbGVtZW50ID0gMDsKLSAgICBjdXJyZW50RW5jb2RlZFVSTCA9ICZt
X2VuY29kZWRVUkw7CiAgICAgcHNldWRvU3RhdGUgPSBQc2V1ZG9Vbmtub3duOwogfQogCkBAIC01
NjgsODEgKzU0OSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEZvclN0eWxlUmVzb2wK
ICAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmaW5kU2xh
c2hEb3REb3RTbGFzaChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKLXsK
LSAgICB1bnNpZ25lZCBsb29wTGltaXQgPSBsZW5ndGggPCA0ID8gMCA6IGxlbmd0aCAtIDM7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb3BMaW1pdDsgKytpKSB7Ci0gICAgICAgIGlm
IChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kgKyAxXSA9PSAnLicgJiYgY2hh
cmFjdGVyc1tpICsgMl0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDNdID09ICcvJykKLSAgICAg
ICAgICAgIHJldHVybiBpOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgaW50IGZpbmRTbGFzaFNsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVu
Z3RoLCBpbnQgcG9zaXRpb24pCi17Ci0gICAgdW5zaWduZWQgbG9vcExpbWl0ID0gbGVuZ3RoIDwg
MiA/IDAgOiBsZW5ndGggLSAxOwotICAgIGZvciAodW5zaWduZWQgaSA9IHBvc2l0aW9uOyBpIDwg
bG9vcExpbWl0OyArK2kpIHsKLSAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8nICYmIGNo
YXJhY3RlcnNbaSArIDFdID09ICcvJykKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgIH0KLSAg
ICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGZpbmRTbGFzaERvdFNsYXNoKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQotewotICAgIHVuc2lnbmVkIGxv
b3BMaW1pdCA9IGxlbmd0aCA8IDMgPyAwIDogbGVuZ3RoIC0gMjsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kpIHsKLSAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0g
PT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9
PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNDb2xvblNsYXNoU2xhc2goY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICB1bnNpZ25lZCBsb29wTGltaXQg
PSBsZW5ndGggPCAzID8gMCA6IGxlbmd0aCAtIDI7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxvb3BMaW1pdDsgKytpKQotICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnOicgJiYg
Y2hhcmFjdGVyc1tpICsgMV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcvJykKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZv
aWQgY2xlYW5QYXRoKFZlY3RvcjxVQ2hhciwgNTEyPiYgcGF0aCkKLXsKLSAgICBpbnQgcG9zOwot
ICAgIHdoaWxlICgocG9zID0gZmluZFNsYXNoRG90RG90U2xhc2gocGF0aC5kYXRhKCksIHBhdGgu
c2l6ZSgpKSkgIT0gLTEpIHsKLSAgICAgICAgaW50IHByZXYgPSByZXZlcnNlRmluZChwYXRoLmRh
dGEoKSwgcGF0aC5zaXplKCksICcvJywgcG9zIC0gMSk7Ci0gICAgICAgIC8vIGRvbid0IHJlbW92
ZSB0aGUgaG9zdCwgaS5lLiBodHRwOi8vZm9vLm9yZy8uLi9mb28uaHRtbAotICAgICAgICBpZiAo
cHJldiA8IDAgfHwgKHByZXYgPiAzICYmIHBhdGhbcHJldiAtIDJdID09ICc6JyAmJiBwYXRoW3By
ZXYgLSAxXSA9PSAnLycpKQotICAgICAgICAgICAgcGF0aC5yZW1vdmUocG9zLCAzKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcGF0aC5yZW1vdmUocHJldiwgcG9zIC0gcHJldiArIDMpOwot
ICAgIH0KLQotICAgIC8vIERvbid0IHJlbW92ZSAiLy8iIGZyb20gYW4gYW5jaG9yIGlkZW50aWZp
ZXIuIC1yancKLSAgICAvLyBTZXQgcmVmUG9zIHRvIC0yIHRvIG1lYW4gIkkgaGF2ZW4ndCBsb29r
ZWQgZm9yIHRoZSBhbmNob3IgeWV0Ii4KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHdhc3RlIGEg
ZnVuY3Rpb24gY2FsbCBvbiB0aGUgc2VhcmNoIGZvciB0aGUgdGhlIGFuY2hvcgotICAgIC8vIGlu
IHRoZSB2YXN0IG1ham9yaXR5IG9mIGNhc2VzIHdoZXJlIHRoZXJlIGlzIG5vICIvLyIgaW4gdGhl
IHBhdGguCi0gICAgcG9zID0gMDsKLSAgICBpbnQgcmVmUG9zID0gLTI7Ci0gICAgd2hpbGUgKChw
b3MgPSBmaW5kU2xhc2hTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHBvcykpICE9IC0x
KSB7Ci0gICAgICAgIGlmIChyZWZQb3MgPT0gLTIpCi0gICAgICAgICAgICByZWZQb3MgPSBmaW5k
KHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJyMnKTsKLSAgICAgICAgaWYgKHJlZlBvcyA+IDAg
JiYgcG9zID49IHJlZlBvcykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChwb3Mg
PT0gMCB8fCBwYXRoW3BvcyAtIDFdICE9ICc6JykKLSAgICAgICAgICAgIHBhdGgucmVtb3ZlKHBv
cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvcyArPSAyOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBXZSBkb24ndCB3YW50IHRvIHJlbW92ZSAiLy4vIiBmcm9tIGFuIGFuY2hvciBpZGVu
dGlmaWVyIGVpdGhlci4KLSAgICB3aGlsZSAoKHBvcyA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGgu
ZGF0YSgpLCBwYXRoLnNpemUoKSkpICE9IC0xKQotICAgICAgICBwYXRoLnJlbW92ZShwb3MsIDIp
OwotfQotCi1zdGF0aWMgdm9pZCBjaGVja1BzZXVkb1N0YXRlKEVsZW1lbnQgKmUsIGJvb2wgY2hl
Y2tWaXNpdGVkID0gdHJ1ZSkKK3N0YXRpYyB2b2lkIGNoZWNrUHNldWRvU3RhdGUoRWxlbWVudCog
ZSwgYm9vbCBjaGVja1Zpc2l0ZWQgPSB0cnVlKQogewogICAgIGlmICghZS0+aXNMaW5rKCkpIHsK
ICAgICAgICAgcHNldWRvU3RhdGUgPSBQc2V1ZG9Ob25lOwpAQCAtNjcxLDI2ICs1NzgsMjEgQEAg
c3RhdGljIHZvaWQgY2hlY2tQc2V1ZG9TdGF0ZShFbGVtZW50ICplLAogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBhdHRyLT5jaGFyYWN0ZXJz
KCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0ci0+bGVuZ3RoKCk7CisgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gZS0+ZG9jdW1lbnQoKTsKIAotICAgIGlmIChjb250YWluc0NvbG9uU2xhc2hT
bGFzaChjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBTdHJhbmdlIHRv
IG5vdCBjbGVhbiB0aGUgcGF0aCBqdXN0IGJlYWNhdXNlIGl0IGhhcyAiOi8vIiBpbiBpdC4KLSAg
ICAgICAgcHNldWRvU3RhdGUgPSBoaXN0b3J5Q29udGFpbnMoY2hhcmFjdGVycywgbGVuZ3RoKSA/
IFBzZXVkb1Zpc2l0ZWQgOiBQc2V1ZG9MaW5rOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpIHsKKyAgICAgICAgcHNldWRvU3RhdGUgPSBQc2V1
ZG9MaW5rOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPFVDaGFyLCA1MTI+
IGJ1ZmZlcjsKLSAgICBpZiAobGVuZ3RoICYmIGNoYXJhY3RlcnNbMF0gPT0gJy8nKSB7Ci0gICAg
ICAgIGJ1ZmZlci5hcHBlbmQoY3VycmVudEVuY29kZWRVUkwtPnByZWZpeC5jaGFyYWN0ZXJzKCks
IGN1cnJlbnRFbmNvZGVkVVJMLT5wcmVmaXgubGVuZ3RoKCkpOwotICAgIH0gZWxzZSBpZiAobGVu
Z3RoICYmIGNoYXJhY3RlcnNbMF0gPT0gJyMnKSB7Ci0gICAgICAgIGJ1ZmZlci5hcHBlbmQoY3Vy
cmVudEVuY29kZWRVUkwtPmZpbGUuY2hhcmFjdGVycygpLCBjdXJyZW50RW5jb2RlZFVSTC0+Zmls
ZS5sZW5ndGgoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVmZmVyLmFwcGVuZChjdXJyZW50
RW5jb2RlZFVSTC0+cGF0aC5jaGFyYWN0ZXJzKCksIGN1cnJlbnRFbmNvZGVkVVJMLT5wYXRoLmxl
bmd0aCgpKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2Up
IHsKKyAgICAgICAgcHNldWRvU3RhdGUgPSBQc2V1ZG9MaW5rOworICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGJ1ZmZlci5hcHBlbmQoY2hhcmFjdGVycywgbGVuZ3RoKTsKLSAgICBjbGVhblBh
dGgoYnVmZmVyKTsKLSAgICBwc2V1ZG9TdGF0ZSA9IGhpc3RvcnlDb250YWlucyhidWZmZXIuZGF0
YSgpLCBidWZmZXIuc2l6ZSgpKSA/IFBzZXVkb1Zpc2l0ZWQgOiBQc2V1ZG9MaW5rOworCisgICAg
cHNldWRvU3RhdGUgPSBwYWdlLT5ncm91cCgpLmlzTGlua1Zpc2l0ZWQoZG9jdW1lbnQsICphdHRy
KSA/IFBzZXVkb1Zpc2l0ZWQgOiBQc2V1ZG9MaW5rOwogfQogCiAvLyBhIGhlbHBlciBmdW5jdGlv
biBmb3IgcGFyc2luZyBudGgtYXJndW1lbnRzCkBAIC04MjksMTIgKzczMSwxNCBAQCBib29sIENT
U1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoCiAgICAgICAgICAgICAgICAgICAgIG1h
cHBlZEF0dHJzTWF0Y2ggPSBzLT5tYXBwZWRBdHRyaWJ1dGVzKCktPm1hcHNFcXVpdmFsZW50KG1f
c3R5bGVkRWxlbWVudC0+bWFwcGVkQXR0cmlidXRlcygpKTsKICAgICAgICAgICAgICAgICBpZiAo
bWFwcGVkQXR0cnNNYXRjaCkgewogICAgICAgICAgICAgICAgICAgICBib29sIGxpbmtzTWF0Y2gg
PSB0cnVlOworCiAgICAgICAgICAgICAgICAgICAgIGlmIChzLT5pc0xpbmsoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgdGhlIHZpc2l0
ZWQgc3RhdGUgbWF0Y2hlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIGxpbmtDb2xv
ciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBDb2xvciB2aXNpdGVkQ29sb3IgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0
ZWRMaW5rQ29sb3IoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwc2V1ZG9TdGF0ZSA9
PSBQc2V1ZG9Vbmtub3duKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBzZXVkb1N0YXRl
ID09IFBzZXVkb1Vua25vd24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBD
b2xvciYgbGlua0NvbG9yID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb2xvciYgdmlzaXRlZENvbG9yID0gbV9l
bGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hlY2tQc2V1ZG9TdGF0ZShtX2VsZW1lbnQsIHN0eWxlLT5wc2V1ZG9TdGF0
ZSgpICE9IFBzZXVkb0FueUxpbmsgfHwgbGlua0NvbG9yICE9IHZpc2l0ZWRDb2xvcik7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rc01hdGNo
ID0gKHBzZXVkb1N0YXRlID09IHN0eWxlLT5wc2V1ZG9TdGF0ZSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTUxMzQsOCArNTAzOCw4IEBAIENvbG9y
IENTU1N0eWxlU2VsZWN0b3I6OmdldENvbG9yRnJvbVByaW0KICAgICAgICAgaWYgKGlkZW50ID09
IENTU19WQUxfX1dFQktJVF9URVhUKQogICAgICAgICAgICAgY29sID0gbV9lbGVtZW50LT5kb2N1
bWVudCgpLT50ZXh0Q29sb3IoKTsKICAgICAgICAgZWxzZSBpZiAoaWRlbnQgPT0gQ1NTX1ZBTF9f
V0VCS0lUX0xJTkspIHsKLSAgICAgICAgICAgIENvbG9yIGxpbmtDb2xvciA9IG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7Ci0gICAgICAgICAgICBDb2xvciB2aXNpdGVkQ29sb3Ig
PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKTsKKyAgICAgICAgICAg
IGNvbnN0IENvbG9yJiBsaW5rQ29sb3IgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xv
cigpOworICAgICAgICAgICAgY29uc3QgQ29sb3ImIHZpc2l0ZWRDb2xvciA9IG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpOwogICAgICAgICAgICAgaWYgKGxpbmtDb2xv
ciA9PSB2aXNpdGVkQ29sb3IpCiAgICAgICAgICAgICAgICAgY29sID0gbGlua0NvbG9yOwogICAg
ICAgICAgICAgZWxzZSB7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiAzMDc5
NCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTEwLDE0ICsxMTAsNiBAQCBwdWJsaWM6CiAKICAgICAgICAgYm9vbCBzdHJpY3RQYXJzaW5nOwog
Ci0gICAgICAgIHN0cnVjdCBFbmNvZGVkVVJMIHsKLSAgICAgICAgICAgIFN0cmluZyBwcmVmaXg7
IC8vIHByb3RvY29sLCBob3N0LCBldGMuCi0gICAgICAgICAgICBTdHJpbmcgcGF0aDsKLSAgICAg
ICAgICAgIFN0cmluZyBmaWxlOwotICAgICAgICB9IG1fZW5jb2RlZFVSTDsKLQotICAgICAgICB2
b2lkIHNldEVuY29kZWRVUkwoY29uc3QgS1VSTCYgdXJsKTsKLQogICAgICAgICAvLyBHaXZlbiBh
IENTUyBrZXl3b3JkIGluIHRoZSByYW5nZSAoeHgtc21hbGwgdG8gLXdlYmtpdC14eHgtbGFyZ2Up
LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCiAgICAgICAgIC8vIHRoZSBjb3JyZWN0IGZvbnQg
c2l6ZSBzY2FsZWQgcmVsYXRpdmUgdG8gdGhlIHVzZXIncyBkZWZhdWx0IChtZWRpdW0pLgogICAg
ICAgICBmbG9hdCBmb250U2l6ZUZvcktleXdvcmQoaW50IGtleXdvcmQsIGJvb2wgcXVpcmtzTW9k
ZSwgYm9vbCBtb25vc3BhY2UpIGNvbnN0OwpAQCAtMjUwLDExICsyNDIsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIGJvb2wgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXM7CiAKICAgICAgICAgUmVmUHRy
PENTU0ZvbnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7Ci0KICAgICAgICAgSGFzaFNldDxBdG9t
aWNTdHJpbmdJbXBsKj4gbV9zZWxlY3RvckF0dHJzOwotICAgICAgICAKICAgICAgICAgVmVjdG9y
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4gbV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVE
ZWNsczsKLSAgICAgICAgCiAgICAgICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0Kj4gbV92aWV3
cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOwogCiAgICAgICAgIHZvaWQgYXBwbHlQcm9w
ZXJ0eShpbnQgaWQsIENTU1ZhbHVlKik7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzMDc5NCkK
KysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxNSw3ICsx
MjE1LDYgQEAgdm9pZCBEb2N1bWVudDo6YXR0YWNoKCkKICAgICAgICAgaWYgKFNldHRpbmdzKiBk
b2NTZXR0aW5ncyA9IHNldHRpbmdzKCkpCiAgICAgICAgICAgICBtYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXMgPSBkb2NTZXR0aW5ncy0+YXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKTsKICAgICAg
ICAgbV9zdHlsZVNlbGVjdG9yID0gbmV3IENTU1N0eWxlU2VsZWN0b3IodGhpcywgdXNlclN0eWxl
U2hlZXQoKSwgbV9zdHlsZVNoZWV0cy5nZXQoKSwgbV9tYXBwZWRFbGVtZW50U2hlZXQuZ2V0KCks
ICFpbkNvbXBhdE1vZGUoKSwgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsKLSAgICAgICAgbV9z
dHlsZVNlbGVjdG9yLT5zZXRFbmNvZGVkVVJMKG1fdXJsKTsKICAgICB9CiAKICAgICByZWNhbGNT
dHlsZShGb3JjZSk7CkBAIC0xNjM2LDkgKzE2MzUsNiBAQCB2b2lkIERvY3VtZW50OjpzZXRVUkwo
Y29uc3QgS1VSTCYgdXJsKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3VybCA9IHVybDsKLSAg
ICBpZiAobV9zdHlsZVNlbGVjdG9yKQotICAgICAgICBtX3N0eWxlU2VsZWN0b3ItPnNldEVuY29k
ZWRVUkwodXJsKTsKLQogICAgIG1faXNBbGxvd2VkVG9Mb2FkTG9jYWxSZXNvdXJjZXMgPSBzaG91
bGRCZUFsbG93ZWRUb0xvYWRMb2NhbFJlc291cmNlcygpOwogIH0KICAKQEAgLTIyMDgsNyArMjIw
NCw2IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQogICAgIC8vIENyZWF0
ZSBhIG5ldyBzdHlsZSBzZWxlY3RvcgogICAgIGRlbGV0ZSBtX3N0eWxlU2VsZWN0b3I7CiAgICAg
bV9zdHlsZVNlbGVjdG9yID0gbmV3IENTU1N0eWxlU2VsZWN0b3IodGhpcywgdXNlclN0eWxlU2hl
ZXQoKSwgbV9zdHlsZVNoZWV0cy5nZXQoKSwgbV9tYXBwZWRFbGVtZW50U2hlZXQuZ2V0KCksICFp
bkNvbXBhdE1vZGUoKSwgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsKLSAgICBtX3N0eWxlU2Vs
ZWN0b3ItPnNldEVuY29kZWRVUkwobV91cmwpOwogICAgIG1fZGlkQ2FsY3VsYXRlU3R5bGVTZWxl
Y3RvciA9IHRydWU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDMw
Nzk0KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAiTWFpblJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5o
IgogI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tl
ci5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKQEAgLTM4NDgsMjEgKzM4NDksMjUgQEAgUGFz
c1JlZlB0cjxIaXN0b3J5SXRlbT4gRnJhbWVMb2FkZXI6OmNyZQogCiB2b2lkIEZyYW1lTG9hZGVy
OjphZGRCYWNrRm9yd2FyZEl0ZW1DbGlwcGVkQXRUYXJnZXQoYm9vbCBkb0NsaXApCiB7Ci0gICAg
aWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAgIGlmICghZG9jdW1lbnRM
b2FkZXIoKS0+dXJsRm9ySGlzdG9yeSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgRnJhbWUq
IG1haW5GcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOwotICAgICAgICAgICAgQVNTRVJUKG1haW5G
cmFtZSk7Ci0gICAgICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBtYWluRnJhbWUt
PmxvYWRlcigpOwotCi0gICAgICAgICAgICBpZiAoIWZyYW1lTG9hZGVyLT5tX2RpZFBlcmZvcm1G
aXJzdE5hdmlnYXRpb24gJiYgcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmVudHJpZXMoKS5zaXpl
KCkgPT0gMSkgewotICAgICAgICAgICAgICAgIGZyYW1lTG9hZGVyLT5tX2RpZFBlcmZvcm1GaXJz
dE5hdmlnYXRpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRQZXJmb3Jt
Rmlyc3ROYXZpZ2F0aW9uKCk7Ci0gICAgICAgICAgICB9CisgICAgUGFnZSogcGFnZSA9IG1fZnJh
bWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICAg
ICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gZnJhbWVMb2FkZXItPmNyZWF0ZUhpc3RvcnlJ
dGVtVHJlZShtX2ZyYW1lLCBkb0NsaXApOwotICAgICAgICAgICAgTE9HKEJhY2tGb3J3YXJkLCAi
V2ViQ29yZUJhY2tGb3J3YXJkIC0gQWRkaW5nIGJhY2tmb3J3YXJkIGl0ZW0gJXAgZm9yIGZyYW1l
ICVzIiwgaXRlbS5nZXQoKSwgZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpOwotICAgICAgICAgICAgcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmFkZEl0ZW0o
aXRlbSk7Ci0gICAgICAgIH0KKyAgICBpZiAoZG9jdW1lbnRMb2FkZXIoKS0+dXJsRm9ySGlzdG9y
eSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWUqIG1haW5GcmFtZSA9
IHBhZ2UtPm1haW5GcmFtZSgpOworICAgIEFTU0VSVChtYWluRnJhbWUpOworICAgIEZyYW1lTG9h
ZGVyKiBmcmFtZUxvYWRlciA9IG1haW5GcmFtZS0+bG9hZGVyKCk7CisKKyAgICBpZiAoIWZyYW1l
TG9hZGVyLT5tX2RpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24gJiYgcGFnZS0+YmFja0ZvcndhcmRM
aXN0KCktPmVudHJpZXMoKS5zaXplKCkgPT0gMSkgeworICAgICAgICBmcmFtZUxvYWRlci0+bV9k
aWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uID0gdHJ1ZTsKKyAgICAgICAgbV9jbGllbnQtPmRpZFBl
cmZvcm1GaXJzdE5hdmlnYXRpb24oKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+
IGl0ZW0gPSBmcmFtZUxvYWRlci0+Y3JlYXRlSGlzdG9yeUl0ZW1UcmVlKG1fZnJhbWUsIGRvQ2xp
cCk7CisgICAgTE9HKEJhY2tGb3J3YXJkLCAiV2ViQ29yZUJhY2tGb3J3YXJkIC0gQWRkaW5nIGJh
Y2tmb3J3YXJkIGl0ZW0gJXAgZm9yIGZyYW1lICVzIiwgaXRlbS5nZXQoKSwgZG9jdW1lbnRMb2Fk
ZXIoKS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIHBhZ2UtPmJhY2tGb3J3
YXJkTGlzdCgpLT5hZGRJdGVtKGl0ZW0pOwogfQogCiBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBG
cmFtZUxvYWRlcjo6Y3JlYXRlSGlzdG9yeUl0ZW1UcmVlKEZyYW1lKiB0YXJnZXRGcmFtZSwgYm9v
bCBjbGlwQXRUYXJnZXQpCkBAIC00MTEwLDEzICs0MTE1LDEyIEBAIHZvaWQgRnJhbWVMb2FkZXI6
OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiAKIC8vIFdhbGsgdGhlIGZyYW1lIHRyZWUgYW5kIGVuc3Vy
ZSB0aGF0IHRoZSBVUkxzIG1hdGNoIHRoZSBVUkxzIGluIHRoZSBpdGVtLgogYm9vbCBGcmFtZUxv
YWRlcjo6dXJsc01hdGNoSXRlbShIaXN0b3J5SXRlbSogaXRlbSkgY29uc3QKIHsKLSAgICBLVVJM
IGN1cnJlbnRVUkwgPSBkb2N1bWVudExvYWRlcigpLT51cmwoKTsKLSAgICAKKyAgICBjb25zdCBL
VVJMJiBjdXJyZW50VVJMID0gZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCk7CiAgICAgaWYgKCFlcXVh
bElnbm9yaW5nUmVmKGN1cnJlbnRVUkwsIGl0ZW0tPnVybCgpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAorCiAgICAgY29uc3QgSGlzdG9yeUl0ZW1WZWN0b3ImIGNoaWxkSXRlbXMgPSBp
dGVtLT5jaGlsZHJlbigpOwotICAgIAorCiAgICAgdW5zaWduZWQgc2l6ZSA9IGNoaWxkSXRlbXMu
c2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAg
ICAgRnJhbWUqIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPmNoaWxkKGNoaWxkSXRlbXNb
aV0tPnRhcmdldCgpKTsKQEAgLTQxMzcsMTcgKzQxNDEsMTkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIAogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zOTUxMjgzPiBj
YW4gdmlldyBwYWdlcyBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUgdGhhdCBzaG91bGQgYmUg
ZGlzYWxsb3dlZCBieSBQYXJlbnRhbCBDb250cm9scwogICAgIC8vIFVsdGltYXRlbHksIGhpc3Rv
cnkgaXRlbSBuYXZpZ2F0aW9ucyBzaG91bGQgZ28gdGhyb3VnaCB0aGUgcG9saWN5IGRlbGVnYXRl
LiBUaGF0J3MgY292ZXJlZCBpbjoKICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMzk3OTUzOT4gYmFj
ay9mb3J3YXJkIGNhY2hlIG5hdmlnYXRpb25zIHNob3VsZCBjb25zdWx0IHBvbGljeSBkZWxlZ2F0
ZQotICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQotICAgICAgICBpZiAobV9j
bGllbnQtPnNob3VsZEdvVG9IaXN0b3J5SXRlbSh0YXJnZXRJdGVtKSkgewotICAgICAgICAgICAg
QmFja0ZvcndhcmRMaXN0KiBiZkxpc3QgPSBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKTsKLSAgICAg
ICAgICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSA9IGJmTGlzdC0+Y3VycmVudEl0ZW0oKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2V0IHRoZSBCRiBjdXJzb3IgYmVmb3JlIGNv
bW1pdCwgd2hpY2ggbGV0cyB0aGUgdXNlciBxdWlja2x5IGNsaWNrIGJhY2svZm9yd2FyZCBhZ2Fp
bi4KLSAgICAgICAgICAgIC8vIC0gcGx1cywgaXQgb25seSBtYWtlcyBzZW5zZSBmb3IgdGhlIHRv
cCBsZXZlbCBvZiB0aGUgb3BlcmF0aW9uIHRocm91Z2ggdGhlIGZyYW1ldHJlZSwKLSAgICAgICAg
ICAgIC8vIGFzIG9wcG9zZWQgdG8gaGFwcGVuaW5nIGZvciBzb21lL29uZSBvZiB0aGUgcGFnZSBj
b21taXRzIHRoYXQgbWlnaHQgaGFwcGVuIHNvb24KLSAgICAgICAgICAgIGJmTGlzdC0+Z29Ub0l0
ZW0odGFyZ2V0SXRlbSk7Ci0gICAgICAgICAgICByZWN1cnNpdmVHb1RvSXRlbSh0YXJnZXRJdGVt
LCBjdXJyZW50SXRlbSwgdHlwZSk7Ci0gICAgICAgIH0KKyAgICBQYWdlKiBwYWdlID0gbV9mcmFt
ZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9j
bGllbnQtPnNob3VsZEdvVG9IaXN0b3J5SXRlbSh0YXJnZXRJdGVtKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gU2V0IHRoZSBCRiBjdXJzb3IgYmVmb3JlIGNvbW1pdCwgd2hpY2ggbGV0cyB0
aGUgdXNlciBxdWlja2x5IGNsaWNrIGJhY2svZm9yd2FyZCBhZ2Fpbi4KKyAgICAvLyAtIHBsdXMs
IGl0IG9ubHkgbWFrZXMgc2Vuc2UgZm9yIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wZXJhdGlvbiB0
aHJvdWdoIHRoZSBmcmFtZXRyZWUsCisgICAgLy8gYXMgb3Bwb3NlZCB0byBoYXBwZW5pbmcgZm9y
IHNvbWUvb25lIG9mIHRoZSBwYWdlIGNvbW1pdHMgdGhhdCBtaWdodCBoYXBwZW4gc29vbgorICAg
IEJhY2tGb3J3YXJkTGlzdCogYmZMaXN0ID0gcGFnZS0+YmFja0ZvcndhcmRMaXN0KCk7CisgICAg
SGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtID0gYmZMaXN0LT5jdXJyZW50SXRlbSgpOyAgICAKKyAg
ICBiZkxpc3QtPmdvVG9JdGVtKHRhcmdldEl0ZW0pOworICAgIHJlY3Vyc2l2ZUdvVG9JdGVtKHRh
cmdldEl0ZW0sIGN1cnJlbnRJdGVtLCB0eXBlKTsKIH0KIAogLy8gVGhlIGdlbmVyYWwgaWRlYSBo
ZXJlIGlzIHRvIHRyYXZlcnNlIHRoZSBmcmFtZSB0cmVlIGFuZCB0aGUgaXRlbSB0cmVlIGluIHBh
cmFsbGVsLApAQCAtNDIyNSwyNSArNDIzMSwyMyBAQCBib29sIEZyYW1lTG9hZGVyOjpjaGlsZEZy
YW1lc01hdGNoSXRlbShICiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6
OnVwZGF0ZUdsb2JhbEhpc3RvcnkoKQotewotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJh
bWUtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgY29uc3QgS1VSTCYgdXJsID0gZG9jdW1lbnRMb2FkZXIoKS0+dXJsRm9ySGlzdG9yeSgp
OwotICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGllbnQt
PnVwZGF0ZUdsb2JhbEhpc3RvcnkodXJsKTsKLX0KKy8vIFRoZXJlIGFyZSAzIHRoaW5ncyB5b3Ug
bWlnaHQgdGhpbmsgb2YgYXMgImhpc3RvcnkiLCBhbGwgb2Ygd2hpY2ggYXJlIGhhbmRsZWQgYnkg
dGhlc2UgZnVuY3Rpb25zLgorLy8KKy8vICAgICAxKSBCYWNrL2ZvcndhcmQ6IFRoZSBtX2N1cnJl
bnRIaXN0b3J5SXRlbSBpcyBwYXJ0IG9mIHRoaXMgbWVjaGFuaXNtLgorLy8gICAgIDIpIEdsb2Jh
bCBoaXN0b3J5OiBIYW5kbGVkIGJ5IHRoZSBjbGllbnQuCisvLyAgICAgMykgVmlzaXRlZCBsaW5r
czogSGFuZGxlZCBieSB0aGUgUGFnZUdyb3VwLgogCiB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVI
aXN0b3J5Rm9yU3RhbmRhcmRMb2FkKCkKIHsKICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0
b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZvciBTdGFuZGFyZCBMb2FkIGluIGZyYW1lICVzIiwgZG9j
dW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgIAorCisg
ICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBib29sIG5l
ZWRQcml2YWN5ID0gIXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVk
KCk7CisgICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IGRvY3VtZW50TG9hZGVyKCktPnVybEZv
ckhpc3RvcnkoKTsKKwogICAgIC8vIElmIHRoZSBuYXZpZ2F0aW9uIG9jY3VyZWQgZHVyaW5nIGxv
YWQgYW5kIHRoaXMgaXMgYSBzdWJmcmFtZSwgdXBkYXRlIHRoZSBjdXJyZW50Ci0gICAgLy8gaGlz
dG9yeSBpdGVtIHJhdGhlciB0aGFuIGFkZGluZyBhIG5ldyBvbmUuIDxyZGFyOi8vcHJvYmxlbS81
MzMzNDk2PgorICAgIC8vIGJhY2svZm9yd2FyZCBpdGVtIHJhdGhlciB0aGFuIGFkZGluZyBhIG5l
dyBvbmUgYW5kIGRvbid0IGFkZCB0aGUgbmV3IFVSTCB0byBnbG9iYWwKKyAgICAvLyBoaXN0b3J5
IGF0IGFsbC4gQnV0IGRvIGFkZCBpdCB0byB2aXNpdGVkIGxpbmtzLiA8cmRhcjovL3Byb2JsZW0v
NTMzMzQ5Nj4KICAgICBib29sIGZyYW1lTmF2aWdhdGlvbkR1cmluZ0xvYWQgPSBmYWxzZTsKICAg
ICBpZiAobV9uYXZpZ2F0aW9uRHVyaW5nTG9hZCkgewogICAgICAgICBIVE1MRnJhbWVPd25lckVs
ZW1lbnQqIG93bmVyID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCk7CkBAIC00MjUyLDE0ICs0MjU2
LDIwIEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JTdGFuZGEKICAgICB9CiAK
ICAgICBpZiAoIWZyYW1lTmF2aWdhdGlvbkR1cmluZ0xvYWQgJiYgIWRvY3VtZW50TG9hZGVyKCkt
PmlzQ2xpZW50UmVkaXJlY3QoKSkgewotICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCktPnVy
bEZvckhpc3RvcnkoKS5pc0VtcHR5KCkpCisgICAgICAgIGlmICghaGlzdG9yeVVSTC5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgIGFkZEJhY2tGb3J3YXJkSXRlbUNsaXBwZWRBdFRhcmdldCh0cnVl
KTsKKyAgICAgICAgICAgIGlmICghbmVlZFByaXZhY3kpCisgICAgICAgICAgICAgICAgbV9jbGll
bnQtPnVwZGF0ZUdsb2JhbEhpc3RvcnkoaGlzdG9yeVVSTCk7CisgICAgICAgIH0KICAgICB9IGVs
c2UgaWYgKGRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpICYmIG1f
Y3VycmVudEhpc3RvcnlJdGVtKSB7CiAgICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVtLT5zZXRV
UkwoZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkpOwogICAgICAgICBtX2N1cnJlbnRIaXN0b3J5SXRl
bS0+c2V0Rm9ybUluZm9Gcm9tUmVxdWVzdChkb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCkpOwog
ICAgIH0KIAotICAgIHVwZGF0ZUdsb2JhbEhpc3RvcnkoKTsKKyAgICBpZiAoIWhpc3RvcnlVUkwu
aXNFbXB0eSgpICYmICFuZWVkUHJpdmFjeSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1f
ZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPmdyb3VwKCkuYWRkVmlzaXRlZExpbmso
aGlzdG9yeVVSTCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5
Rm9yQ2xpZW50UmVkaXJlY3QoKQpAQCAtNDI3Niw3ICs0Mjg2LDE0IEBAIHZvaWQgRnJhbWVMb2Fk
ZXI6OnVwZGF0ZUhpc3RvcnlGb3JDbGllbnQKICAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0t
PmNsZWFyU2Nyb2xsUG9pbnQoKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNh
bGwgdXBkYXRlR2xvYmFsSGlzdG9yeSBoZXJlPworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1f
ZnJhbWUtPnNldHRpbmdzKCk7CisgICAgYm9vbCBuZWVkUHJpdmFjeSA9ICFzZXR0aW5ncyB8fCBz
ZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOworICAgIGNvbnN0IEtVUkwmIGhpc3Rv
cnlVUkwgPSBkb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7CisKKyAgICBpZiAoIWhp
c3RvcnlVUkwuaXNFbXB0eSgpICYmICFuZWVkUHJpdmFjeSkgeworICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPmdyb3VwKCkuYWRkVmlz
aXRlZExpbmsoaGlzdG9yeVVSTCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjp1cGRh
dGVIaXN0b3J5Rm9yQmFja0ZvcndhcmROYXZpZ2F0aW9uKCkKQEAgLTQyODgsOCArNDMwNSw2IEBA
IHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JCYWNrRm8KIAogICAgIC8vIE11c3Qg
Z3JhYiB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gYmVmb3JlIGRpc3R1cmJpbmcgaXQKICAg
ICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0obV9wcmV2aW91c0hpc3RvcnlJ
dGVtLmdldCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgY2FsbCB1cGRhdGVHbG9iYWxI
aXN0b3J5IGhlcmU/CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWxv
YWQoKQpAQCAtNDMwOSw4ICs0MzI0LDYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9y
eUZvclJlbG9hZAogICAgICAgICBpZiAoZG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwo
KS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0VVJMKGRv
Y3VtZW50TG9hZGVyKCktPnJlcXVlc3RVUkwoKSk7CiAgICAgfQotICAgIAotICAgIHVwZGF0ZUds
b2JhbEhpc3RvcnkoKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvclJl
ZGlyZWN0V2l0aExvY2tlZEhpc3RvcnkoKQpAQCAtNDMyMCw5ICs0MzMzLDE2IEBAIHZvaWQgRnJh
bWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWRpcmUKICAgICAgICAgTE9HKEhpc3RvcnksICJX
ZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgaW50ZXJuYWwgbG9hZCBpbiBmcmFt
ZSAlcyIsIGRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYK
ICAgICAKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAg
IGJvb2wgbmVlZFByaXZhY3kgPSAhc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICBjb25zdCBLVVJMJiBoaXN0b3J5VVJMID0gZG9jdW1lbnRMb2FkZXIo
KS0+dXJsRm9ySGlzdG9yeSgpOworCiAgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPmlzQ2xpZW50
UmVkaXJlY3QoKSkgewotICAgICAgICBpZiAoIW1fY3VycmVudEhpc3RvcnlJdGVtICYmICFtX2Zy
YW1lLT50cmVlKCktPnBhcmVudCgpKQorICAgICAgICBpZiAoIW1fY3VycmVudEhpc3RvcnlJdGVt
ICYmICFtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7CiAgICAgICAgICAgICBhZGRCYWNrRm9y
d2FyZEl0ZW1DbGlwcGVkQXRUYXJnZXQodHJ1ZSk7CisgICAgICAgICAgICBpZiAoIW5lZWRQcml2
YWN5ICYmICFoaXN0b3J5VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+
dXBkYXRlR2xvYmFsSGlzdG9yeShoaXN0b3J5VVJMKTsKKyAgICAgICAgfQogICAgICAgICBpZiAo
bV9jdXJyZW50SGlzdG9yeUl0ZW0pIHsKICAgICAgICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVt
LT5zZXRVUkwoZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkpOwogICAgICAgICAgICAgbV9jdXJyZW50
SGlzdG9yeUl0ZW0tPnNldEZvcm1JbmZvRnJvbVJlcXVlc3QoZG9jdW1lbnRMb2FkZXIoKS0+cmVx
dWVzdCgpKTsKQEAgLTQzMzMsNyArNDM1MywxMCBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVI
aXN0b3J5Rm9yUmVkaXJlCiAgICAgICAgICAgICBwYXJlbnRGcmFtZS0+bG9hZGVyKCktPm1fY3Vy
cmVudEhpc3RvcnlJdGVtLT5hZGRDaGlsZEl0ZW0oY3JlYXRlSGlzdG9yeUl0ZW0odHJ1ZSkpOwog
ICAgIH0KIAotICAgIHVwZGF0ZUdsb2JhbEhpc3RvcnkoKTsKKyAgICBpZiAoIWhpc3RvcnlVUkwu
aXNFbXB0eSgpICYmICFuZWVkUHJpdmFjeSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1f
ZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPmdyb3VwKCkuYWRkVmlzaXRlZExpbmso
aGlzdG9yeVVSTCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5
Rm9yQ29tbWl0KCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gMzA3OTQpCisrKyBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTYsOCArNDU2
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JD
bGllbnRSZWRpcmVjdCgpOwogICAgICAgICB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JDb21taXQoKTsK
ICAgICAKLSAgICAgICAgdm9pZCB1cGRhdGVHbG9iYWxIaXN0b3J5KCk7Ci0KICAgICAgICAgdm9p
ZCByZWRpcmVjdGlvblRpbWVyRmlyZWQoVGltZXI8RnJhbWVMb2FkZXI+Kik7CiAgICAgICAgIHZv
aWQgY2hlY2tDb21wbGV0ZWRUaW1lckZpcmVkKFRpbWVyPEZyYW1lTG9hZGVyPiopOwogICAgICAg
ICB2b2lkIGNoZWNrTG9hZENvbXBsZXRlVGltZXJGaXJlZChUaW1lcjxGcmFtZUxvYWRlcj4qKTsK
SW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9DaHJvbWUuY3BwCShyZXZpc2lvbiAzMDc5NCkKKysrIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlBhdXNlZFRpbWVvdXRzLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpAQCAt
MzQ5LDE3ICszNTAsMTggQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmRhc2hib2FyZFJlZ2lvbnNDaGFu
ZwogewogfQogCit2b2lkIENocm9tZUNsaWVudDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoKQorewor
fQorCiAvLyAtLS0tLS0tLQogCiBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBhZ2VHcm91cExvYWRE
ZWZlcnJlcihQYWdlKiBwYWdlLCBib29sIGRlZmVyU2VsZikKIHsKLSAgICBjb25zdCBIYXNoU2V0
PFBhZ2UqPiogZ3JvdXAgPSBwYWdlLT5mcmFtZU5hbWVzcGFjZSgpOwotCi0gICAgaWYgKCFncm91
cCkKLSAgICAgICAgcmV0dXJuOworICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IHBh
Z2UtPmdyb3VwKCkucGFnZXMoKTsKIAotICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBncm91cC0+ZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBncm91cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgSGFzaFNl
dDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgpOworICAgIGZvciAoSGFz
aFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFnZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CiAgICAgICAgIFBhZ2UqIG90aGVyUGFnZSA9ICppdDsKICAgICAgICAgaWYgKChk
ZWZlclNlbGYgfHwgb3RoZXJQYWdlICE9IHBhZ2UpKSB7CiAgICAgICAgICAgICBpZiAoIW90aGVy
UGFnZS0+ZGVmZXJzTG9hZGluZygpKQpJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMzA3
OTQpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
MSw2ICsxMjEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCk7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVs
YXRlVmlzaXRlZExpbmtzKCk7CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgfkNo
cm9tZUNsaWVudCgpIHsgfQogICAgIH07CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmNwcAkocmV2aXNpb24gMzA3
OTQpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NiArMjMsNyBAQAogCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgpAQCAtMTgyLDE2ICsxODMs
MTcgQEAgRnJhbWUqIEZyYW1lVHJlZTo6ZmluZChjb25zdCBBdG9taWNTdHJpbgogICAgICAgICBp
ZiAoZnJhbWUtPnRyZWUoKS0+bmFtZSgpID09IG5hbWUpCiAgICAgICAgICAgICByZXR1cm4gZnJh
bWU7CiAKLSAgICAvLyBTZWFyY2ggdGhlIGVudGlyZSB0cmVlIGZvciBhbGwgb3RoZXIgcGFnZXMg
aW4gdGhpcyBuYW1lc3BhY2UuCi0gICAgY29uc3QgSGFzaFNldDxQYWdlKj4qIHBhZ2VzID0gcGFn
ZS0+ZnJhbWVOYW1lc3BhY2UoKTsKLSAgICBpZiAocGFnZXMpIHsKLSAgICAgICAgSGFzaFNldDxQ
YWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLT5lbmQoKTsKLSAgICAgICAgZm9yIChI
YXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdlcy0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQYWdlKiBvdGhlclBhZ2UgPSAqaXQ7Ci0gICAgICAg
ICAgICBpZiAob3RoZXJQYWdlICE9IHBhZ2UpCi0gICAgICAgICAgICAgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBvdGhlclBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLT50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT50cmVl
KCktPm5hbWUoKSA9PSBuYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1l
OworICAgIC8vIFNlYXJjaCB0aGUgZW50aXJlIHRyZWUgb2YgZWFjaCBvZiB0aGUgb3RoZXIgcGFn
ZXMgaW4gdGhpcyBuYW1lc3BhY2UuCisgICAgLy8gRklYTUU6IElzIHJhbmRvbSBvcmRlciBPSz8K
KyAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2VzKCk7
CisgICAgSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgpOwor
ICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFnZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFBhZ2UqIG90aGVyUGFnZSA9ICppdDsKKyAg
ICAgICAgaWYgKG90aGVyUGFnZSAhPSBwYWdlKSB7CisgICAgICAgICAgICBmb3IgKEZyYW1lKiBm
cmFtZSA9IG90aGVyUGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCktPnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT50cmVlKCkt
Pm5hbWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWU7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9HbG9iYWxI
aXN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dsb2JhbEhpc3RvcnkuaAkocmV2
aXNpb24gMzA3OTQpCisrKyBXZWJDb3JlL3BhZ2UvR2xvYmFsSGlzdG9yeS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEdsb2JhbEhpc3Rv
cnlfaAotI2RlZmluZSBHbG9iYWxIaXN0b3J5X2gKLQotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1Vu
aWNvZGUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgYm9vbCBoaXN0b3J5Q29udGFp
bnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdsb2JhbEhpc3RvcnlfaApJbmRleDogV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2
aXNpb24gMzA3OTQpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUGFnZUdy
b3VwLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lk
Z2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgpAQCAtNDksOCArNTAsMTAg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBQYWdl
R3JvdXAqPiBQYWdlR3JvdXBNYXA7CisKIHN0YXRpYyBIYXNoU2V0PFBhZ2UqPiogYWxsUGFnZXM7
Ci1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8UGFnZSo+Kj4qIGZyYW1lTmFtZXNwYWNl
czsKK3N0YXRpYyBQYWdlR3JvdXBNYXAqIHBhZ2VHcm91cHM7CiAKICNpZm5kZWYgTkRFQlVHCiBX
VEZMb2dDaGFubmVsIExvZ1dlYkNvcmVQYWdlTGVha3MgPSAgeyAweDAwMDAwMDAwLCAiIiwgV1RG
TG9nQ2hhbm5lbE9uIH07CkBAIC04NSw2ICs4OCw3IEBAIFBhZ2U6OlBhZ2UoQ2hyb21lQ2xpZW50
KiBjaHJvbWVDbGllbnQsIEMKICAgICAsIG1fcGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcigwKQog
ICAgICwgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQoZmFsc2UpCiAgICAgLCBtX3VzZXJTdHlsZVNo
ZWV0TW9kaWZpY2F0aW9uVGltZSgwKQorICAgICwgbV9ncm91cCgwKQogICAgICwgbV9kZWJ1Z2dl
cigwKQogewogICAgIGlmICghYWxsUGFnZXMpIHsKQEAgLTE2NSwzNyArMTY5LDQxIEBAIHZvaWQg
UGFnZTo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEYKIAogdm9pZCBQYWdlOjpzZXRHcm91
cE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGlmIChmcmFtZU5hbWVzcGFjZXMgJiYg
IW1fZ3JvdXBOYW1lLmlzRW1wdHkoKSkgewotICAgICAgICBIYXNoU2V0PFBhZ2UqPiogb2xkTmFt
ZXNwYWNlID0gZnJhbWVOYW1lc3BhY2VzLT5nZXQobV9ncm91cE5hbWUpOwotICAgICAgICBpZiAo
b2xkTmFtZXNwYWNlKSB7Ci0gICAgICAgICAgICBvbGROYW1lc3BhY2UtPnJlbW92ZSh0aGlzKTsK
LSAgICAgICAgICAgIGlmIChvbGROYW1lc3BhY2UtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgIGZyYW1lTmFtZXNwYWNlcy0+cmVtb3ZlKG1fZ3JvdXBOYW1lKTsKLSAgICAgICAgICAgICAg
ICBkZWxldGUgb2xkTmFtZXNwYWNlOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgaWYg
KCFtX2dyb3VwTmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpbmdsZVBhZ2VH
cm91cCk7CisgICAgICAgIEFTU0VSVChtX2dyb3VwKTsKKyAgICAgICAgQVNTRVJUKHBhZ2VHcm91
cHMpOworICAgICAgICBBU1NFUlQocGFnZUdyb3Vwcy0+Z2V0KG1fZ3JvdXBOYW1lKSA9PSBtX2dy
b3VwKTsKKyAgICAgICAgbV9ncm91cC0+cmVtb3ZlUGFnZSh0aGlzKTsKKyAgICAgICAgaWYgKG1f
Z3JvdXAtPnBhZ2VzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcGFnZUdyb3Vwcy0+cmVtb3Zl
KG1fZ3JvdXBOYW1lKTsKICAgICB9CiAgICAgbV9ncm91cE5hbWUgPSBuYW1lOwotICAgIGlmICgh
bmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZU5hbWVzcGFjZXMpCi0gICAgICAg
ICAgICBmcmFtZU5hbWVzcGFjZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8UGFnZSo+
Kj47Ci0gICAgICAgIEhhc2hTZXQ8UGFnZSo+KiBuZXdOYW1lc3BhY2UgPSBmcmFtZU5hbWVzcGFj
ZXMtPmdldChuYW1lKTsKLSAgICAgICAgaWYgKCFuZXdOYW1lc3BhY2UpIHsKLSAgICAgICAgICAg
IG5ld05hbWVzcGFjZSA9IG5ldyBIYXNoU2V0PFBhZ2UqPjsKLSAgICAgICAgICAgIGZyYW1lTmFt
ZXNwYWNlcy0+YWRkKG5hbWUsIG5ld05hbWVzcGFjZSk7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgp
KQorICAgICAgICBtX2dyb3VwID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9zaW5nbGVQYWdl
R3JvdXAuY2xlYXIoKTsKKyAgICAgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICAgICAgcGFn
ZUdyb3VwcyA9IG5ldyBQYWdlR3JvdXBNYXA7CisgICAgICAgIHBhaXI8UGFnZUdyb3VwTWFwOjpp
dGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gcGFnZUdyb3Vwcy0+YWRkKG5hbWUsIDApOworICAgICAg
ICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQuZmlyc3Qt
PnNlY29uZCk7CisgICAgICAgICAgICBtX2dyb3VwID0gcmVzdWx0LmZpcnN0LT5zZWNvbmQ7Cisg
ICAgICAgICAgICBtX2dyb3VwLT5hZGRQYWdlKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKCFyZXN1bHQuZmlyc3QtPnNlY29uZCk7CisgICAgICAgICAgICBtX2dy
b3VwID0gbmV3IFBhZ2VHcm91cCh0aGlzKTsKKyAgICAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vj
b25kID0gbV9ncm91cDsKICAgICAgICAgfQotICAgICAgICBuZXdOYW1lc3BhY2UtPmFkZCh0aGlz
KTsKICAgICB9CiB9CiAKLWNvbnN0IEhhc2hTZXQ8UGFnZSo+KiBQYWdlOjpmcmFtZU5hbWVzcGFj
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChmcmFtZU5hbWVzcGFjZXMgJiYgIW1fZ3JvdXBOYW1l
LmlzRW1wdHkoKSkgPyBmcmFtZU5hbWVzcGFjZXMtPmdldChtX2dyb3VwTmFtZSkgOiAwOwotfQot
Ci1jb25zdCBIYXNoU2V0PFBhZ2UqPiogUGFnZTo6ZnJhbWVOYW1lc3BhY2UoY29uc3QgU3RyaW5n
JiBncm91cE5hbWUpCit2b2lkIFBhZ2U6OmluaXRHcm91cCgpCiB7Ci0gICAgcmV0dXJuIChmcmFt
ZU5hbWVzcGFjZXMgJiYgIWdyb3VwTmFtZS5pc0VtcHR5KCkpID8gZnJhbWVOYW1lc3BhY2VzLT5n
ZXQoZ3JvdXBOYW1lKSA6IDA7CisgICAgQVNTRVJUKCFtX3NpbmdsZVBhZ2VHcm91cCk7CisgICAg
QVNTRVJUKCFtX2dyb3VwKTsKKyAgICBtX3NpbmdsZVBhZ2VHcm91cC5zZXQobmV3IFBhZ2VHcm91
cCh0aGlzKSk7CisgICAgbV9ncm91cCA9IG1fc2luZ2xlUGFnZUdyb3VwLmdldCgpOwogfQogCiB2
b2lkIFBhZ2U6OnNldE5lZWRzUmVhcHBseVN0eWxlcygpCkBAIC0zNjAsNiArMzY4LDIxIEBAIGNv
bnN0IFN0cmluZyYgUGFnZTo6dXNlclN0eWxlU2hlZXQoKSBjb24KICAgICByZXR1cm4gbV91c2Vy
U3R5bGVTaGVldDsKIH0KIAordm9pZCBQYWdlOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQorewor
ICAgIGlmICghYWxsUGFnZXMpCisgICAgICAgIHJldHVybjsKKyAgICBIYXNoU2V0PFBhZ2VHcm91
cCo+IGdyb3VwczsKKyAgICBIYXNoU2V0PFBhZ2UqPjo6aXRlcmF0b3IgcGFnZXNFbmQgPSBhbGxQ
YWdlcy0+ZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6aXRlcmF0b3IgaXQgPSBhbGxQ
YWdlcy0+YmVnaW4oKTsgaXQgIT0gcGFnZXNFbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKFBhZ2VH
cm91cCogZ3JvdXAgPSAoKml0KS0+Z3JvdXBQdHIoKSkKKyAgICAgICAgICAgIGdyb3Vwcy5hZGQo
Z3JvdXApOworICAgIH0KKyAgICBIYXNoU2V0PFBhZ2VHcm91cCo+OjppdGVyYXRvciBncm91cHNF
bmQgPSBncm91cHMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFBhZ2VHcm91cCo+OjppdGVyYXRv
ciBpdCA9IGdyb3Vwcy5iZWdpbigpOyBpdCAhPSBncm91cHNFbmQ7ICsraXQpCisgICAgICAgICgq
aXQpLT5yZW1vdmVWaXNpdGVkTGlua3MoKTsKK30KKwogdm9pZCBQYWdlOjpzZXREZWJ1Z2dlckZv
ckFsbFBhZ2VzKEtKUzo6RGVidWdnZXIqIGRlYnVnZ2VyKQogewogICAgIEFTU0VSVChhbGxQYWdl
cyk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9QYWdlLmgJKHJldmlzaW9uIDMwNzk0KQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0
OiA0IC0qLQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDAsMjIgKzQwLDEzIEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIGNsYXNzIERlYnVnZ2VyOwogfQogCi10eXBlZGVmIGVudW0gVGV4dENhc2VTZW5zaXRp
dml0eSB7Ci0gICAgVGV4dENhc2VTZW5zaXRpdmUsCi0gICAgVGV4dENhc2VJbnNlbnNpdGl2ZQot
fTsKLQotdHlwZWRlZiBlbnVtIEZpbmREaXJlY3Rpb24gewotICAgIEZpbmREaXJlY3Rpb25Gb3J3
YXJkLAotICAgIEZpbmREaXJlY3Rpb25CYWNrd2FyZAotfTsKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgY2xhc3MgQ2hyb21lOwogICAgIGNsYXNzIENocm9tZUNsaWVudDsKICAgICBjbGFz
cyBDb250ZXh0TWVudUNsaWVudDsKICAgICBjbGFzcyBDb250ZXh0TWVudUNvbnRyb2xsZXI7Cisg
ICAgY2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgRHJhZ0NsaWVudDsKICAgICBjbGFzcyBEcmFn
Q29udHJvbGxlcjsKICAgICBjbGFzcyBFZGl0b3JDbGllbnQ7CkBAIC02NCwxNSArNTUsMTkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEluc3BlY3RvckNsaWVudDsKICAgICBjbGFz
cyBJbnNwZWN0b3JDb250cm9sbGVyOwogICAgIGNsYXNzIE5vZGU7CisgICAgY2xhc3MgUGFnZUdy
b3VwOwogICAgIGNsYXNzIFByb2dyZXNzVHJhY2tlcjsKICAgICBjbGFzcyBTZWxlY3Rpb247CiAg
ICAgY2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKICAgICBjbGFzcyBTZXR0aW5nczsKKyAgICBj
bGFzcyBLVVJMOworCisgICAgZW51bSBUZXh0Q2FzZVNlbnNpdGl2aXR5IHsgVGV4dENhc2VTZW5z
aXRpdmUsIFRleHRDYXNlSW5zZW5zaXRpdmUgfTsKKyAgICBlbnVtIEZpbmREaXJlY3Rpb24geyBG
aW5kRGlyZWN0aW9uRm9yd2FyZCwgRmluZERpcmVjdGlvbkJhY2t3YXJkIH07CiAKICAgICBjbGFz
cyBQYWdlIDogTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIHZvaWQg
c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCk7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoU2V0PFBh
Z2UqPiogZnJhbWVOYW1lc3BhY2UoY29uc3QgU3RyaW5nJik7CiAKICAgICAgICAgUGFnZShDaHJv
bWVDbGllbnQqLCBDb250ZXh0TWVudUNsaWVudCosIEVkaXRvckNsaWVudCosIERyYWdDbGllbnQq
LCBJbnNwZWN0b3JDbGllbnQqKTsKICAgICAgICAgflBhZ2UoKTsKQEAgLTkzLDkgKzg4LDEwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSos
IEZyYW1lTG9hZFR5cGUpOwogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRHcm91cE5hbWUoY29u
c3QgU3RyaW5nJik7Ci0gICAgICAgIFN0cmluZyBncm91cE5hbWUoKSBjb25zdCB7IHJldHVybiBt
X2dyb3VwTmFtZTsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZ3JvdXBOYW1lOyB9CiAKLSAgICAgICAgY29uc3QgSGFzaFNldDxQYWdlKj4qIGZy
YW1lTmFtZXNwYWNlKCkgY29uc3Q7CisgICAgICAgIFBhZ2VHcm91cCYgZ3JvdXAoKSB7IGlmICgh
bV9ncm91cCkgaW5pdEdyb3VwKCk7IHJldHVybiAqbV9ncm91cDsgfQorICAgICAgICBQYWdlR3Jv
dXAqIGdyb3VwUHRyKCkgeyByZXR1cm4gbV9ncm91cDsgfSAvLyBjYW4gcmV0dXJuIDAKIAogICAg
ICAgICB2b2lkIGluY3JlbWVudEZyYW1lQ291bnQoKSB7ICsrbV9mcmFtZUNvdW50OyB9CiAgICAg
ICAgIHZvaWQgZGVjcmVtZW50RnJhbWVDb3VudCgpIHsgLS1tX2ZyYW1lQ291bnQ7IH0KQEAgLTE1
MSw3ICsxNDcsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgSElOU1RB
TkNFIGluc3RhbmNlSGFuZGxlKCkgeyByZXR1cm4gc19pbnN0YW5jZUhhbmRsZTsgfQogI2VuZGlm
CiAKKyAgICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7CisKICAgICBw
cml2YXRlOgorICAgICAgICB2b2lkIGluaXRHcm91cCgpOworCiAgICAgICAgIE93blB0cjxDaHJv
bWU+IG1fY2hyb21lOwogICAgICAgICBPd25QdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4gbV9kcmFn
Q2FyZXRDb250cm9sbGVyOwogICAgICAgICBPd25QdHI8RHJhZ0NvbnRyb2xsZXI+IG1fZHJhZ0Nv
bnRyb2xsZXI7CkBAIC0xODIsNiArMTgyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBtdXRhYmxlIGJvb2wgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQ7CiAgICAgICAgIG11dGFibGUg
dGltZV90IG1fdXNlclN0eWxlU2hlZXRNb2RpZmljYXRpb25UaW1lOwogCisgICAgICAgIE93blB0
cjxQYWdlR3JvdXA+IG1fc2luZ2xlUGFnZUdyb3VwOworICAgICAgICBQYWdlR3JvdXAqIG1fZ3Jv
dXA7CisKICAgICAgICAgS0pTOjpEZWJ1Z2dlciogbV9kZWJ1Z2dlcjsKIAogI2lmIFBMQVRGT1JN
KFdJTikgfHwgKFBMQVRGT1JNKFdYKSAmJiBkZWZpbmVkKF9fV1hNU1dfXykpCkluZGV4OiBXZWJD
b3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZUdy
b3VwLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZUdyb3Vw
LmgiCisKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIlBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyAtLS0tLS0tLQor
CitQYWdlR3JvdXA6OlBhZ2VHcm91cChQYWdlKiBwYWdlKQorICAgIDogbV92aXNpdGVkTGlua3NQ
b3B1bGF0ZWQoZmFsc2UpCit7CisgICAgQVNTRVJUKHBhZ2UpOworICAgIG1fcGFnZXMuYWRkKHBh
Z2UpOworfQorCit2b2lkIFBhZ2VHcm91cDo6YWRkUGFnZShQYWdlKiBwYWdlKQoreworICAgIEFT
U0VSVChwYWdlKTsKKyAgICBBU1NFUlQoIW1fcGFnZXMuY29udGFpbnMocGFnZSkpOworICAgIG1f
cGFnZXMuYWRkKHBhZ2UpOworfQorCit2b2lkIFBhZ2VHcm91cDo6cmVtb3ZlUGFnZShQYWdlKiBw
YWdlKQoreworICAgIEFTU0VSVChwYWdlKTsKKyAgICBBU1NFUlQobV9wYWdlcy5jb250YWlucyhw
YWdlKSk7CisgICAgbV9wYWdlcy5yZW1vdmUocGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50
IGZpbmRTbGFzaERvdERvdFNsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVu
Z3RoKQoreworICAgIGlmIChsZW5ndGggPCA0KQorICAgICAgICByZXR1cm4gLTE7CisgICAgdW5z
aWduZWQgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMzsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbG9vcExpbWl0OyArK2kpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8nICYm
IGNoYXJhY3RlcnNbaSArIDFdID09ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9PSAnLicgJiYg
Y2hhcmFjdGVyc1tpICsgM10gPT0gJy8nKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQor
ICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZmluZFNsYXNoU2xhc2goY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIGludCBwb3NpdGlvbikKK3sKKyAg
ICBpZiAobGVuZ3RoIDwgMikKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHVuc2lnbmVkIGxvb3BM
aW1pdCA9IGxlbmd0aCAtIDE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gcG9zaXRpb247IGkgPCBs
b29wTGltaXQ7ICsraSkgeworICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hh
cmFjdGVyc1tpICsgMV0gPT0gJy8nKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAg
IHJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZmluZFNsYXNoRG90U2xhc2goY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit7CisgICAgaWYgKGxlbmd0aCA8
IDMpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB1bnNpZ25lZCBsb29wTGltaXQgPSBsZW5ndGgg
LSAyOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb29wTGltaXQ7ICsraSkgeworICAg
ICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy4n
ICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcvJykKKyAgICAgICAgICAgIHJldHVybiBpOworICAg
IH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc0NvbG9u
U2xhc2hTbGFzaChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorewor
ICAgIGlmIChsZW5ndGggPCAzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdW5zaWduZWQg
bG9vcExpbWl0ID0gbGVuZ3RoIC0gMjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9v
cExpbWl0OyArK2kpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJzonICYmIGNoYXJh
Y3RlcnNbaSArIDFdID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9PSAnLycpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgY2xlYW5QYXRoKFZlY3RvcjxVQ2hhciwgNTEyPiYgcGF0aCkKK3sKKyAgICAv
LyBGSVhNRTogU2hvbGQgbm90IGRvIHRoaXMgaW4gdGhlIHF1ZXJ5IG9yIGFuY2hvciBwYXJ0Lgor
ICAgIGludCBwb3M7CisgICAgd2hpbGUgKChwb3MgPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRo
LmRhdGEoKSwgcGF0aC5zaXplKCkpKSAhPSAtMSkgeworICAgICAgICBpbnQgcHJldiA9IHJldmVy
c2VGaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJy8nLCBwb3MgLSAxKTsKKyAgICAgICAg
Ly8gZG9uJ3QgcmVtb3ZlIHRoZSBob3N0LCBpLmUuIGh0dHA6Ly9mb28ub3JnLy4uL2Zvby5odG1s
CisgICAgICAgIGlmIChwcmV2IDwgMCB8fCAocHJldiA+IDMgJiYgcGF0aFtwcmV2IC0gMl0gPT0g
JzonICYmIHBhdGhbcHJldiAtIDFdID09ICcvJykpCisgICAgICAgICAgICBwYXRoLnJlbW92ZShw
b3MsIDMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXRoLnJlbW92ZShwcmV2LCBwb3Mg
LSBwcmV2ICsgMyk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFNob2xkIG5vdCBkbyB0aGlzIGlu
IHRoZSBxdWVyeSBwYXJ0LgorICAgIC8vIFNldCByZWZQb3MgdG8gLTIgdG8gbWVhbiAiSSBoYXZl
bid0IGxvb2tlZCBmb3IgdGhlIGFuY2hvciB5ZXQiLgorICAgIC8vIFdlIGRvbid0IHdhbnQgdG8g
d2FzdGUgYSBmdW5jdGlvbiBjYWxsIG9uIHRoZSBzZWFyY2ggZm9yIHRoZSB0aGUgYW5jaG9yCisg
ICAgLy8gaW4gdGhlIHZhc3QgbWFqb3JpdHkgb2YgY2FzZXMgd2hlcmUgdGhlcmUgaXMgbm8gIi8v
IiBpbiB0aGUgcGF0aC4KKyAgICBwb3MgPSAwOworICAgIGludCByZWZQb3MgPSAtMjsKKyAgICB3
aGlsZSAoKHBvcyA9IGZpbmRTbGFzaFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgcG9z
KSkgIT0gLTEpIHsKKyAgICAgICAgaWYgKHJlZlBvcyA9PSAtMikKKyAgICAgICAgICAgIHJlZlBv
cyA9IGZpbmQocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAnIycpOworICAgICAgICBpZiAocmVm
UG9zID4gMCAmJiBwb3MgPj0gcmVmUG9zKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
aWYgKHBvcyA9PSAwIHx8IHBhdGhbcG9zIC0gMV0gIT0gJzonKQorICAgICAgICAgICAgcGF0aC5y
ZW1vdmUocG9zKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zICs9IDI7CisgICAgfQor
CisgICAgLy8gRklYTUU6IFNob2xkIG5vdCBkbyB0aGlzIGluIHRoZSBxdWVyeSBvciBhbmNob3Ig
cGFydC4KKyAgICB3aGlsZSAoKHBvcyA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguZGF0YSgpLCBw
YXRoLnNpemUoKSkpICE9IC0xKQorICAgICAgICBwYXRoLnJlbW92ZShwb3MsIDIpOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hMZXR0ZXIoVUNoYXIgYywgVUNoYXIgbG93ZXJjYXNlTGV0
dGVyKQoreworICAgIHJldHVybiAoYyB8IDB4MjApID09IGxvd2VyY2FzZUxldHRlcjsKK30KKwor
c3RhdGljIGlubGluZSBib29sIG5lZWRzVHJhaWxpbmdTbGFzaChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChsZW5ndGggPCA2KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtYXRjaExldHRlcihjaGFyYWN0ZXJzWzBdLCAnaCcpCisg
ICAgICAgICAgICB8fCAhbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1sxXSwgJ3QnKQorICAgICAgICAg
ICAgfHwgIW1hdGNoTGV0dGVyKGNoYXJhY3RlcnNbMl0sICd0JykKKyAgICAgICAgICAgIHx8ICFt
YXRjaExldHRlcihjaGFyYWN0ZXJzWzNdLCAncCcpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCEoY2hhcmFjdGVyc1s0XSA9PSAnOicKKyAgICAgICAgICAgIHx8IChtYXRjaExldHRl
cihjaGFyYWN0ZXJzWzRdLCAncycpICYmIGNoYXJhY3RlcnNbNV0gPT0gJzonKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIHBvcyA9IGNoYXJhY3RlcnNbNF0gPT0gJzon
ID8gNSA6IDY7CisKKyAgICAvLyBTa2lwIGluaXRpYWwgdHdvIHNsYXNoZXMgaWYgcHJlc2VudC4K
KyAgICBpZiAocG9zICsgMSA8IGxlbmd0aCAmJiBjaGFyYWN0ZXJzW3Bvc10gPT0gJy8nICYmIGNo
YXJhY3RlcnNbcG9zICsgMV0gPT0gJy8nKQorICAgICAgICBwb3MgKz0gMjsKKworICAgIC8vIEZp
bmQgbmV4dCBzbGFzaC4KKyAgICB3aGlsZSAocG9zIDwgbGVuZ3RoICYmIGNoYXJhY3RlcnNbcG9z
XSAhPSAnLycpCisgICAgICAgICsrcG9zOworCisgICAgcmV0dXJuIHBvcyA9PSBsZW5ndGg7Cit9
CisKK2Jvb2wgUGFnZUdyb3VwOjppc0xpbmtWaXNpdGVkKERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCit7CisgICAgaWYgKCFtX3Zpc2l0ZWRMaW5r
c1BvcHVsYXRlZCkgeworICAgICAgICBtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRlZCA9IHRydWU7Cisg
ICAgICAgIEFTU0VSVCghbV9wYWdlcy5pc0VtcHR5KCkpOworICAgICAgICAoKm1fcGFnZXMuYmVn
aW4oKSktPmNocm9tZSgpLT5jbGllbnQoKS0+cG9wdWxhdGVWaXNpdGVkTGlua3MoKTsKKyAgICB9
CisKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IGF0dHJpYnV0ZVVSTC5jaGFyYWN0ZXJz
KCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmlidXRlVVJMLmxlbmd0aCgpOworICAgIGlm
ICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogSXQgaXMg
c3RyYW5nZSB0aGF0IHdlIGRvIG5vdCBkbyBmdXJ0aGVyIHByb2Nlc3Npbmcgb24gc3RyaW5ncyB0
aGF0IGhhdmUgIjovLyIgaW4gdGhlbS4KKyAgICAvLyBUaGF0J3MgY2xlYXJseSBpbmNvcnJlY3Qg
Zm9yIGF0IGxlYXN0IHRoZXNlIHJlYXNvbnM6CisgICAgLy8gICAgMSkgVGhlICI6Ly8iIGNvdWxk
IGJlIGluIHRoZSBxdWVyeSBvciBhbmNob3IuCisgICAgLy8gICAgMikgVGhlIFVSTCdzIHBhdGgg
Y291bGQgaGF2ZSBhICIvLi8iIG9yIGEgIi8uLi8iIG9yIGEgIi8vIiBzZXF1ZW5jZSBpbiBpdC4K
KworICAgIC8vIEZJWE1FOiBuZWVkc1RyYWlsaW5nU2xhc2ggZG9lcyBub3QgcHJvcGVybHkgcmV0
dXJuIHRydWUgZm9yIGEgVVJMIHRoYXQgaGFzIG5vIHBhdGgsIGJ1dCBkb2VzCisgICAgLy8gaGF2
ZSBhIHF1ZXJ5IG9yIGFuY2hvci4KKworICAgIGJvb2wgaGFzQ29sb25TbGFzaFNsYXNoID0gY29u
dGFpbnNDb2xvblNsYXNoU2xhc2goY2hhcmFjdGVycywgbGVuZ3RoKTsKKworICAgIGlmIChoYXND
b2xvblNsYXNoU2xhc2ggJiYgIW5lZWRzVHJhaWxpbmdTbGFzaChjaGFyYWN0ZXJzLCBsZW5ndGgp
KQorICAgICAgICByZXR1cm4gbV92aXNpdGVkTGlua0hhc2hlcy5jb250YWlucyhTdHJpbmdJbXBs
Ojpjb21wdXRlSGFzaChjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKKworICAgIFZlY3RvcjxVQ2hhciwg
NTEyPiBidWZmZXI7CisKKyAgICAvLyBUaGlzIGlzIGEgcG9vciBtYW4ncyBjb21wbGV0ZVVSTC4g
RmFzdGVyIHdpdGggbGVzcyBtZW1vcnkgYWxsb2NhdGlvbi4KKyAgICAvLyBGSVhNRTogSXQncyBt
aXNzaW5nIGEgbG90IG9mIHdoYXQgY29tcGxldGVVUkwgZG9lcyBhbmQgd2hhdCBLVVJMIGRvZXMu
CisgICAgLy8gRklYTUU6IE1vdmUgdGhpcyBpbnRvIEtVUkw/IE9yIERvY3VtZW50PyBFdmVuIHRo
ZSBmYXN0IHZlcnNpb24gc2hvdWxkIGJlIGluIHRoZSByaWdodCBwbGFjZSwKKyAgICAvLyByYXRo
ZXIgdGhhbiBoZXJlLgorCisgICAgaWYgKGhhc0NvbG9uU2xhc2hTbGFzaCkgeworICAgICAgICAv
LyBGSVhNRTogVGhpcyBpcyBpbmNvcnJlY3QgZm9yIFVSTHMgdGhhdCBoYXZlIGEgcXVlcnkgb3Ig
YW5jaG9yOyB0aGUgIi8iIG5lZWRzIHRvIGdvIGF0IHRoZQorICAgICAgICAvLyBlbmQgb2YgdGhl
IHBhdGgsICpiZWZvcmUqIHRoZSBxdWVyeSBvciBhbmNob3IuCisgICAgICAgIGJ1ZmZlci5hcHBl
bmQoY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgnLycpOworICAg
ICAgICByZXR1cm4gbV92aXNpdGVkTGlua0hhc2hlcy5jb250YWlucyhTdHJpbmdJbXBsOjpjb21w
dXRlSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSk7CisgICAgfQorCisgICAgY29u
c3QgS1VSTCYgYmFzZVVSTCA9IGRvY3VtZW50LT5iYXNlVVJMKCk7CisgICAgc3dpdGNoIChjaGFy
YWN0ZXJzWzBdKSB7CisgICAgICAgIGNhc2UgJy8nOgorICAgICAgICAgICAgYnVmZmVyLmFwcGVu
ZChiYXNlVVJMLnN0cmluZygpLmNoYXJhY3RlcnMoKSwgYmFzZVVSTC5wYXRoU3RhcnQoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnIyc6CisgICAgICAgICAgICBidWZmZXIu
YXBwZW5kKGJhc2VVUkwuc3RyaW5nKCkuY2hhcmFjdGVycygpLCBiYXNlVVJMLnBhdGhFbmQoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJ1ZmZl
ci5hcHBlbmQoYmFzZVVSTC5zdHJpbmcoKS5jaGFyYWN0ZXJzKCksIGJhc2VVUkwucGF0aEFmdGVy
TGFzdFNsYXNoKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGJ1ZmZlci5hcHBl
bmQoY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICBjbGVhblBhdGgoYnVmZmVyKTsKKyAgICBpZiAo
bmVlZHNUcmFpbGluZ1NsYXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluY29ycmVjdCBmb3IgVVJMcyB0aGF0IGhhdmUgYSBxdWVy
eSBvciBhbmNob3I7IHRoZSAiLyIgbmVlZHMgdG8gZ28gYXQgdGhlCisgICAgICAgIC8vIGVuZCBv
ZiB0aGUgcGF0aCwgKmJlZm9yZSogdGhlIHF1ZXJ5IG9yIGFuY2hvci4KKyAgICAgICAgYnVmZmVy
LmFwcGVuZCgnLycpOworICAgIH0KKworICAgIHJldHVybiBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmNv
bnRhaW5zKFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXpl
KCkpKTsKK30KKwordm9pZCBQYWdlR3JvdXA6OmFkZFZpc2l0ZWRMaW5rKGNvbnN0IEtVUkwmIHVy
bCkKK3sKKyAgICBBU1NFUlQoIXVybC5pc0VtcHR5KCkpOworICAgIG1fdmlzaXRlZExpbmtIYXNo
ZXMuYWRkKHVybC5zdHJpbmcoKS5pbXBsKCktPmhhc2goKSk7Cit9CisKK3ZvaWQgUGFnZUdyb3Vw
OjphZGRWaXNpdGVkTGluayhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkK
K3sKKyAgICBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmFkZChTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChj
aGFyYWN0ZXJzLCBsZW5ndGgpKTsKK30KKwordm9pZCBQYWdlR3JvdXA6OnJlbW92ZVZpc2l0ZWRM
aW5rcygpCit7CisgICAgbV92aXNpdGVkTGlua0hhc2hlcy5jbGVhcigpOworfQorCit2b2lkIFBh
Z2VHcm91cDo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKK3sKKyAgICBQYWdlOjpyZW1vdmVBbGxW
aXNpdGVkTGlua3MoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGFnZS9QYWdlR3JvdXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBhZ2VH
cm91cF9oCisjZGVmaW5lIFBhZ2VHcm91cF9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNv
ZGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQXRvbWljU3RyaW5nOwor
ICAgIGNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGFnZTsKKwor
ICAgIGNsYXNzIFBhZ2VHcm91cCA6IE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFBhZ2VHcm91cChQYWdlKik7CisKKyAgICAgICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2Vz
KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlczsgfQorCisgICAgICAgIHZvaWQgYWRkUGFnZShQYWdl
Kik7CisgICAgICAgIHZvaWQgcmVtb3ZlUGFnZShQYWdlKik7CisKKyAgICAgICAgYm9vbCBpc0xp
bmtWaXNpdGVkKERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSk7
CisKKyAgICAgICAgdm9pZCBhZGRWaXNpdGVkTGluayhjb25zdCBLVVJMJik7CisgICAgICAgIHZv
aWQgYWRkVmlzaXRlZExpbmsoY29uc3QgVUNoYXIqLCBzaXplX3QpOworICAgICAgICB2b2lkIHJl
bW92ZVZpc2l0ZWRMaW5rcygpOworICAgICAgICBzdGF0aWMgdm9pZCByZW1vdmVBbGxWaXNpdGVk
TGlua3MoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEhhc2hTZXQ8UGFnZSo+IG1fcGFnZXM7
CisgICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+IG1fdmlzaXRlZExpbmtIYXNoZXM7CisgICAgICAg
IGJvb2wgbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorICAgIAorI2VuZGlmIC8vIFBhZ2VHcm91cF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxl
CiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9HbG9iYWxIaXN0b3J5TWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvR2xvYmFsSGlzdG9yeU1hYy5tbQkocmV2
aXNpb24gMzA3OTQpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL0dsb2JhbEhpc3RvcnlNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIkdsb2JhbEhpc3RvcnkuaCIKLQotI2ltcG9ydCAiV2ViQ29yZUhp
c3RvcnkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIGhpc3RvcnlDb250YWlucyhj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8vIHRoZSBv
dGhlciBzaWRlIG9mIHRoZSBicmlkZ2UgaXMgY2FyZWZ1bCBub3QgdG8gdGhyb3cgZXhjZXB0aW9u
cyBoZXJlCi0gICAgcmV0dXJuIFtbV2ViQ29yZUhpc3RvcnkgaGlzdG9yeVByb3ZpZGVyXSBjb250
YWluc1VSTDpjaGFyYWN0ZXJzIGxlbmd0aDpsZW5ndGhdOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2Uvd2luL0dsb2JhbEhpc3RvcnlXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS93aW4vR2xvYmFsSGlzdG9yeVdpbi5jcHAJKHJldmlzaW9u
IDMwNzk0KQorKysgV2ViQ29yZS9wYWdlL3dpbi9HbG9iYWxIaXN0b3J5V2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJHbG9iYWxIaXN0b3J5LmgiCi0KLSNpbmNsdWRlICJXZWJDb3JlSGlz
dG9yeS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgaGlzdG9yeUNvbnRhaW5zKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgV2ViQ29yZUhp
c3RvcnlQcm92aWRlciogcHJvdmlkZXIgPSBXZWJDb3JlSGlzdG9yeTo6aGlzdG9yeVByb3ZpZGVy
KCk7Ci0gICAgcmV0dXJuIHByb3ZpZGVyICYmIHByb3ZpZGVyLT5jb250YWluc1VSTChjaGFyYWN0
ZXJzLCBsZW5ndGgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5j
cHAJKHJldmlzaW9uIDMwNzk0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCw4IEBAIGlubGluZSBib29sIEtVUkw6OnByb3RvY29sSXMo
Y29uc3QgU3RyaW4KIAogS1VSTDo6S1VSTCgpCiAgICAgOiBtX2lzVmFsaWQoZmFsc2UpCisgICAg
LCBwb3J0RW5kUG9zKDApCisgICAgLCBwYXRoRW5kUG9zKDApCiB7CiB9CiAKQEAgLTMyMCw2ICsz
MjIsOCBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgCiAgICAgaWYg
KCFiYXNlLm1faXNWYWxpZCAmJiAhYmFzZS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9zdHJpbmcg
PSByZWxhdGl2ZTsKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIHBvcnRFbmRQ
b3MgPSAwOworICAgICAgICBwYXRoRW5kUG9zID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMzkzLDYgKzM5Nyw4IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMJiBiYXNlLCBj
b25zdCAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG1fc3RyaW5nID0gcmVs
YXRpdmU7CiAgICAgICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgcG9ydEVuZFBvcyA9IDA7CisgICAgICAgICAgICAgICAgcGF0aEVuZFBvcyA9IDA7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTUwNSw3ICs1MTEs
NyBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgCiAKIGJvb2wgS1VS
TDo6aGFzUGF0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faXNWYWxpZCAmJiBwYXRoRW5kUG9z
ICE9IHBvcnRFbmRQb3M7CisgICAgcmV0dXJuIHBhdGhFbmRQb3MgIT0gcG9ydEVuZFBvczsKIH0K
IAogU3RyaW5nIEtVUkw6Omxhc3RQYXRoQ29tcG9uZW50KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vS1VSTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCShy
ZXZpc2lvbiAzMDc5NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDAsNiArMTQwLDEwIEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBjb25zdCBTdHJpbmcm
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KICAgICBvcGVyYXRvciBLSlM6OlVTdHJpbmco
KSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQogCisgICAgdW5zaWduZWQgcGF0aFN0YXJ0KCkg
Y29uc3QgeyByZXR1cm4gcG9ydEVuZFBvczsgfQorICAgIHVuc2lnbmVkIHBhdGhFbmQoKSBjb25z
dCB7IHJldHVybiBwYXRoRW5kUG9zOyB9CisgICAgdW5zaWduZWQgcGF0aEFmdGVyTGFzdFNsYXNo
KCkgY29uc3QgeyByZXR1cm4gcGF0aEVuZFBvczsgfQorCiAjaWYgUExBVEZPUk0oQ0YpCiAgICAg
S1VSTChDRlVSTFJlZik7CiAgICAgQ0ZVUkxSZWYgY3JlYXRlQ0ZVUkwoKSBjb25zdDsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24g
MzA3OTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJHbG9iYWxIaXN0b3J5LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKQEAgLTU4LDggKzU3
LDYgQEAgVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdAogLyogQ29tcGxl
dGVseSBlbXB0eSBzdHVicyAobW9zdGx5IHRvIGFsbG93IERSVCB0byBydW4pOiAqLwogLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1i
b29sIFdlYkNvcmU6Omhpc3RvcnlDb250YWlucyhjb25zdCBVQ2hhciosIHVuc2lnbmVkKSB7IHJl
dHVybiBmYWxzZTsgfQotCiBQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBh
dGhzKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gUGx1Z2luU2V0KCk7IH0KIFZl
Y3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CiBib29sIFBsdWdpbkRhdGFi
YXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3QgU3RyaW5nJikgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVI
aXN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUhpc3Rv
cnkuaAkocmV2aXNpb24gMzA3OTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlSGlz
dG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1A
cHJvdG9jb2wgV2ViQ29yZUhpc3RvcnlQcm92aWRlciA8TlNPYmplY3Q+Ci0tIChCT09MKWNvbnRh
aW5zVVJMOihjb25zdCBVbmlDaGFyKil1bmljb2RlIGxlbmd0aDoodW5zaWduZWQpbGVuZ3RoOwot
QGVuZAotCi1AaW50ZXJmYWNlIFdlYkNvcmVIaXN0b3J5IDogTlNPYmplY3QKLQotKyAodm9pZClz
ZXRIaXN0b3J5UHJvdmlkZXI6KGlkPFdlYkNvcmVIaXN0b3J5UHJvdmlkZXI+KWg7Ci0rIChpZDxX
ZWJDb3JlSGlzdG9yeVByb3ZpZGVyPiloaXN0b3J5UHJvdmlkZXI7Ci0KLUBlbmQKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVIaXN0b3J5Lm0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUhpc3RvcnkubQkocmV2aXNpb24gMzA3OTQpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlSGlzdG9yeS5tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaW1w
b3J0ICJXZWJDb3JlSGlzdG9yeS5oIgotCi1AaW1wbGVtZW50YXRpb24gV2ViQ29yZUhpc3RvcnkK
LQotc3RhdGljIGlkPFdlYkNvcmVIaXN0b3J5UHJvdmlkZXI+IF9oaXN0b3J5UHJvdmlkZXIgPSBu
aWw7Ci0KLSsgKHZvaWQpc2V0SGlzdG9yeVByb3ZpZGVyOiAoaWQ8V2ViQ29yZUhpc3RvcnlQcm92
aWRlcj4paAotewotICAgIGlmIChfaGlzdG9yeVByb3ZpZGVyICE9IGgpewotICAgICAgICBbX2hp
c3RvcnlQcm92aWRlciByZWxlYXNlXTsKLSAgICAgICAgX2hpc3RvcnlQcm92aWRlciA9IFtoIHJl
dGFpbl07Ci0gICAgfQotfQotCi0rIChpZDxXZWJDb3JlSGlzdG9yeVByb3ZpZGVyPiloaXN0b3J5
UHJvdmlkZXIKLXsKLSAgICByZXR1cm4gX2hpc3RvcnlQcm92aWRlcjsKLX0KLQotQGVuZApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24g
MzA3OTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiR2xvYmFsSGlzdG9yeS5oIgogI2luY2x1ZGUgIkljb25Mb2FkZXIuaCIKICNpbmNsdWRl
ICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIktVUkwuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
d2luL1dlYkNvcmVIaXN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9XZWJDb3JlSGlzdG9yeS5jcHAJKHJldmlzaW9uIDMwNzk0KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS93aW4vV2ViQ29yZUhpc3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkNvcmVI
aXN0b3J5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFdlYkNvcmVIaXN0b3J5
UHJvdmlkZXIqIF9oaXN0b3J5UHJvdmlkZXIgPSAwOwotCi12b2lkIFdlYkNvcmVIaXN0b3J5Ojpz
ZXRIaXN0b3J5UHJvdmlkZXIoV2ViQ29yZUhpc3RvcnlQcm92aWRlciogaCkKLXsKLSAgICBpZiAo
X2hpc3RvcnlQcm92aWRlciA9PSBoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkZWxldGUgX2hp
c3RvcnlQcm92aWRlcjsKLSAgICBfaGlzdG9yeVByb3ZpZGVyID0gaDsKLX0KLQotV2ViQ29yZUhp
c3RvcnlQcm92aWRlciogV2ViQ29yZUhpc3Rvcnk6Omhpc3RvcnlQcm92aWRlcigpCi17Ci0gICAg
cmV0dXJuIF9oaXN0b3J5UHJvdmlkZXI7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
d2luL1dlYkNvcmVIaXN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4v
V2ViQ29yZUhpc3RvcnkuaAkocmV2aXNpb24gMzA3OTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9XZWJDb3JlSGlzdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0q
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotKi8KLQotI2lmbmRlZiBXRUJD
T1JFX0hJU1RPUllfSF8KLSNkZWZpbmUgV0VCQ09SRV9ISVNUT1JZX0hfCi0KLSNpbmNsdWRlIDx1
bmljb2RlL3VtYWNoaW5lLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2ViQ29y
ZUhpc3RvcnlQcm92aWRlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGNvbnRhaW5zVVJM
KGNvbnN0IFVDaGFyKiB1bmljb2RlLCB1bnNpZ25lZCBsZW5ndGgpID0gMDsKLX07Ci0KLWNsYXNz
IFdlYkNvcmVIaXN0b3J5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBzZXRIaXN0b3J5UHJv
dmlkZXIoV2ViQ29yZUhpc3RvcnlQcm92aWRlciopOwotICAgIHN0YXRpYyBXZWJDb3JlSGlzdG9y
eVByb3ZpZGVyKiBoaXN0b3J5UHJvdmlkZXIoKTsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAzMDc5
NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEzLDEwICsxMTMsNiBAQCBib29sIFdlYkNvcmU6OmNvb2tpZXNFbmFibGVk
KGNvbnN0IERvY3VtCiBzdGF0aWMgV2ViQ29yZTo6Q3Vyc29yIGxvY2FsQ3Vyc29yOwogY29uc3Qg
V2ViQ29yZTo6Q3Vyc29yJiBXZWJDb3JlOjptb3ZlQ3Vyc29yKCkgeyByZXR1cm4gbG9jYWxDdXJz
b3I7IH0KIAotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGJvb2wgaGlzdG9yeUNvbnRhaW5zKGNv
bnN0IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9Ci19Ci0KIHZvaWQgV2ViQ29y
ZTo6ZmluZFdvcmRCb3VuZGFyeShVQ2hhciBjb25zdCogc3RyLGludCBsZW4saW50IHBvc2l0aW9u
LGludCogc3RhcnQsIGludCogZW5kKSB7IG5vdEltcGxlbWVudGVkKCk7ICpzdGFydD1wb3NpdGlv
bjsgKmVuZD1wb3NpdGlvbjsgfQogCiBQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdp
bnNJblBhdGhzKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gUGx1Z2luU2V0KCk7
IH0KSW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxv
ZwkocmV2aXNpb24gMzA3OTQpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNyBAQAorMjAwOC0wMy0wNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgV2Vi
SGlzdG9yeUludGVybmFsLmguCisKIDIwMDgtMDEtMjYgIEdyZWcgQm9sc2luZ2EgIDxib2xzaW5n
YUBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3MDgzODg+IFdlYkRhc2hi
b2FyZFJlZ2lvbi5oIGR1cGxpY2F0ZWQgYmV0d2VlbiBXZWJDb3JlIC8gV2ViS2l0CkluZGV4OiBX
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzMDc5NCkKKysr
IFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMjc3LDYgKzI3Nyw3IEBACiAJCTkzOTgxMTJGMDgyNEJGMDEwMDhERjAzOCAvKiBTZWN1cml0
eS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4MzBFODFFMDA1ODUzQUMwMDBBRDA4OTEgLyogU2VjdXJpdHkuZnJhbWV3b3JrICovOyB9
OwogCQk5M0VCMTc4RDA5Rjg4RDQ2MDA5MUY4RkYgLyogV2ViU3lzdGVtSW50ZXJmYWNlLm0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VCMTc4QzA5Rjg4
RDQ2MDA5MUY4RkYgLyogV2ViU3lzdGVtSW50ZXJmYWNlLm0gKi87IH07CiAJCTkzRUIxNzhGMDlG
ODhENTEwMDkxRjhGRiAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUIxNzhFMDlGODhENTEwMDkxRjhGRiAvKiBX
ZWJTeXN0ZW1JbnRlcmZhY2UuaCAqLzsgfTsKKwkJOTNGREU5MzMwRDc5Q0FGMzAwNzRGMDI5IC8q
IFdlYkhpc3RvcnlJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNGREU5MzIwRDc5Q0FGMzAwNzRGMDI5IC8qIFdlYkhpc3RvcnlJbnRlcm5h
bC5oICovOyB9OwogCQlBNzA5MzZBRjBCNTYwOERDMDBDREI0OEUgLyogV2ViRHJhZ0NsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcwOTM2QUQw
QjU2MDhEQzAwQ0RCNDhFIC8qIFdlYkRyYWdDbGllbnQuaCAqLzsgfTsKIAkJQTcwOTM2QjAwQjU2
MDhEQzAwQ0RCNDhFIC8qIFdlYkRyYWdDbGllbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzA5MzZBRTBCNTYwOERDMDBDREI0OEUgLyogV2ViRHJh
Z0NsaWVudC5tbSAqLzsgfTsKIAkJQTdEM0M1QkMwQjU3NzNDNTAwMkNBNDUwIC8qIFdlYlBhc3Rl
Ym9hcmRIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3RDNDNUJBMEI1NzczQzUwMDJDQTQ1MCAvKiBXZWJQYXN0ZWJvYXJkSGVscGVyLmggKi87
IH07CkBAIC01MTAsNiArNTExLDcgQEAKIAkJOTNENjIzREQwNTFFNzkxRjAwMkY0N0REIC8qIGxp
YmljdWNvcmUuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYmljdWNvcmUuZHlsaWI7
IHBhdGggPSAvdXNyL2xpYi9saWJpY3Vjb3JlLmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0
ZT4iOyB9OwogCQk5M0VCMTc4QzA5Rjg4RDQ2MDA5MUY4RkYgLyogV2ViU3lzdGVtSW50ZXJmYWNl
Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYlN5c3RlbUludGVyZmFj
ZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0VCMTc4RTA5Rjg4RDUxMDA5MUY4
RkYgLyogV2ViU3lzdGVtSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlN5c3RlbUludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
M0ZERTkzMjBENzlDQUYzMDA3NEYwMjkgLyogV2ViSGlzdG9yeUludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkhpc3RvcnlJbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5Q0FFOUQwNzAyNTJBNDEzMEVDQTE2RUEgLyogV2ViUHJlZmVy
ZW5jZXNQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViUHJlZmVyZW5jZXNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk5Q0UxRjhBMzAyQTVDNkYzMEVDQTJB
Q0QgLyogV2ViSW1hZ2VSZW5kZXJlckZhY3RvcnkubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJ
OUNGMEUyNDkwMjEzNjFCMDBFQ0ExNkVBIC8qIFdlYkZyYW1lUHJpdmF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZyYW1lUHJpdmF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
QEAgLTgyMCw2ICs4MjIsNyBAQAogCQkJCTIyRjIxOUNCMDhEMjM2NzMwMDMwRTA3OCAvKiBXZWJC
YWNrRm9yd2FyZExpc3RQcml2YXRlLmggKi8sCiAJCQkJNjVEQTI2MDgwNTJDQzE4NzAwQTk3QjMx
IC8qIFdlYkhpc3RvcnkubW0gKi8sCiAJCQkJRjUyMEZCMTkwMjIxREVGRDAxQzFBNTI1IC8qIFdl
Ykhpc3RvcnkuaCAqLywKKwkJCQk5M0ZERTkzMjBENzlDQUYzMDA3NEYwMjkgLyogV2ViSGlzdG9y
eUludGVybmFsLmggKi8sCiAJCQkJMzk0NDYwN0YwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkhpc3Rv
cnlJdGVtLmggKi8sCiAJCQkJMzk0NDYwODAwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkhpc3RvcnlJ
dGVtLm1tICovLAogCQkJCTUxNkYyOTZGMDNBNkM0NUEwMENBMkQzQSAvKiBXZWJIaXN0b3J5SXRl
bUludGVybmFsLmggKi8sCkBAIC0xMzE3LDYgKzEzMjAsNyBAQAogCQkJCTkzOTgxMDlCMDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgx
MDcxMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTM5ODEwOTcwODI0QkYwMTAwOERGMDM4IC8qIG5wZnVuY3Rpb25zLmggaW4gSGVhZGVycyAq
LywKKwkJCQk5M0ZERTkzMzBENzlDQUYzMDA3NEYwMjkgLyogV2ViSGlzdG9yeUludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMDc5NCkKKysrIFdlYktpdC9tYWMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMDgtMDMtMDUgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIC0gZml4IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NTI2CisgICAgICAgICAgUkVHUkVTU0lPTjogaWZyYW1lcyBhcmUgYWRkZWQgdG8g
U2FmYXJpJ3MgSGlzdG9yeSBtZW51CisgICAgICAgICAgYnkgc2VwYXJhdGluZyB0aGUgdmlzaXRl
ZCBsaW5rIG1hY2hpbmVyeSBmcm9tIGdsb2JhbCBoaXN0b3J5CisKKyAgICAgICAgKiBIaXN0b3J5
L1dlYkhpc3RvcnkubW06IE1vdmVkIFdlYkhpc3RvcnlQcml2YXRlIGluc2lkZSB0aGlzIGZpbGUu
CisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIHJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczpd
KTogUmVtb3ZlZCB0aGUgdW5kZXJzY29yZSBmcm9tIHRoaXMKKyAgICAgICAgbWV0aG9kIG5hbWUs
IHNpbmNlIGl0J3Mgb24gYSBwcml2YXRlIG9iamVjdC4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVBy
aXZhdGUgcmVtb3ZlSXRlbUZvclVSTFN0cmluZzpdKTogQWRkZWQgYSBjYWxsIHRvIHRoZQorICAg
ICAgICBQYWdlR3JvdXA6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcyBmdW5jdGlvbiBpZiB0aGUgbGFz
dCBVUkwgd2FzIHJlbW92ZWQuCisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIGFkZEl0ZW1U
b0RhdGVDYWNoZXM6XSk6IFJlbW92ZWQgdGhlIHVuZGVyc2NvcmUgZnJvbSB0aGlzCisgICAgICAg
IG1ldGhvZCBuYW1lLCBzaW5jZSBpdCdzIG9uIGEgcHJpdmF0ZSBvYmplY3QuCisgICAgICAgICgt
W1dlYkhpc3RvcnlQcml2YXRlIHJlbW92ZUFsbEl0ZW1zXSk6IENhbGwgUGFnZUdyb3VwOjpyZW1v
dmVBbGxWaXNpdGVkTGlua3MuCisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIGFnZUxpbWl0
RGF0ZV0pOiBSZW1vdmVkIHRoZSB1bmRlcnNjb3JlIGZyb20gdGhpcworICAgICAgICBtZXRob2Qg
bmFtZSwgc2luY2UgaXQncyBvbiBhIHByaXZhdGUgb2JqZWN0LgorICAgICAgICAoLVtXZWJIaXN0
b3J5UHJpdmF0ZSBsb2FkSGlzdG9yeUd1dHNGcm9tVVJMOnNhdmVkSXRlbXNDb3VudDpjb2xsZWN0
RGlzY2FyZGVkSXRlbXNJbnRvOmVycm9yOl0pOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKC1b
V2ViSGlzdG9yeVByaXZhdGUgc2F2ZUhpc3RvcnlHdXRzOlVSTDplcnJvcjpdKTogRGl0dG8uIEFs
c28gY2hhbmdlZCB0aGlzCisgICAgICAgIHRvIGNvcnJlY3RseSByZXR1cm4gdGhlIGVycm9yIGJ5
IHVzaW5nIHRoZSBuZXdlciB2ZXJzaW9uIG9mIHdyaXRlVG9VUkw6IGFuZAorICAgICAgICByZW1v
dmVkIHRoZSBGSVhNRSBhYm91dCB0aGF0LgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSBh
ZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cDpdKTogQWRkZWQuIENhbGxzIGFkZFZpc2l0ZWRMaW5r
CisgICAgICAgIGZvciBldmVyeSBsaW5rIGluIHRoZSBoaXN0b3J5LgorICAgICAgICAoLVtXZWJI
aXN0b3J5IHNhdmVUb1VSTDplcnJvcjpdKTogUmVtb3ZlZCB0aGUgRklYTUUsIHNpbmNlIHdlIGRv
IGdldCB0aGUgZXJyb3Igbm93LgorICAgICAgICAoLVtXZWJIaXN0b3J5IGFkZEl0ZW06XSk6IE1v
dmVkIGludG8gdGhlIFdlYlByaXZhdGUgY2F0ZWdvcnkuCisgICAgICAgICgtW1dlYkhpc3Rvcnkg
YWRkSXRlbUZvclVSTDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhpc3RvcnkgX2FkZEl0ZW1G
b3JVUkw6dGl0bGU6XSk6IEFkZGVkLiBVc2VkIGZvciB0aGUgbm9ybWFsIGNhc2Ugd2hlcmUgd2UK
KyAgICAgICAgY3JlYXRlIGFuIGl0ZW0gYW5kIGFscmVhZHkga25vdyBpdHMgdGl0bGUuCisgICAg
ICAgICgtW1dlYkhpc3RvcnkgYWdlTGltaXREYXRlXSk6IE1vdmVkIGludG8gdGhlIFdlYlByaXZh
dGUgY2F0ZWdvcnkuCisgICAgICAgICgtW1dlYkhpc3RvcnkgY29udGFpbnNJdGVtRm9yVVJMU3Ry
aW5nOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeSByZW1vdmVJdGVtOl0pOiBEaXR0
by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeSBzZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDpmb3JJ
dGVtOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeSBfaXRlbUZvclVSTFN0cmluZzpd
KTogRGl0dG8uCisgICAgICAgICgtW1dlYkhpc3RvcnkgX2FkZFZpc2l0ZWRMaW5rc1RvUGFnZUdy
b3VwOl0pOiBBZGRlZC4gRm9yIHVzZSBvbmx5IGluc2lkZSBXZWJLaXQuCisKKyAgICAgICAgKiBI
aXN0b3J5L1dlYkhpc3RvcnlJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKiBIaXN0b3J5L1dl
Ykhpc3RvcnlJdGVtSW50ZXJuYWwuaDogVHdlYWtlZCBmb3JtYXR0aW5nIGFuZCBpbmNsdWRlcy4K
KyAgICAgICAgKiBIaXN0b3J5L1dlYkhpc3RvcnlQcml2YXRlLmg6IE1vdmVkIHRoZSBXZWJIaXN0
b3J5UHJpdmF0ZSBjbGFzcyBvdXQgb2YgdGhpcyBoZWFkZXIuCisgICAgICAgIEFsc28gcmVvcmdh
bml6ZWQgd2hhdCB3YXMgbGVmdCBiZWhpbmQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaDogQWRkZWQgcG9wdWxhdGVWaXNpdGVkTGlua3MuCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xp
ZW50Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcyk6IEFkZGVkIGEgY2FsbCB0byB0aGUgbmV3CisgICAg
ICAgIC1bV2ViSGlzdG9yeSBfYWRkVmlzaXRlZExpbmtzVG9QYWdlR3JvdXA6XSBtZXRob2QuCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbToKKyAgICAg
ICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5KTogQ2hhbmdlZCBj
b2RlIHRvIHVzZSB0aGUgbmV3CisgICAgICAgIC1bV2ViSGlzdG9yeSBfYWRkSXRlbUZvclVSTDp0
aXRsZTpdIG1ldGhvZC4KKwogMjAwOC0wMy0wNCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJL
aXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0hp
c3RvcnkvV2ViSGlzdG9yeS5tbQkocmV2aXNpb24gMzA3OTQpCisrKyBXZWJLaXQvbWFjL0hpc3Rv
cnkvV2ViSGlzdG9yeS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxOCArMjYsMjQg
QEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCAiV2ViSGlzdG9yeS5oIgotI2ltcG9ydCAi
V2ViSGlzdG9yeVByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkhpc3RvcnlJbnRlcm5hbC5oIgogCi0j
aW1wb3J0ICJXZWJIaXN0b3J5SXRlbS5oIgogI2ltcG9ydCAiV2ViSGlzdG9yeUl0ZW1JbnRlcm5h
bC5oIgotI2ltcG9ydCAiV2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJLaXRM
b2dnaW5nLmgiCiAjaW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgorI2ltcG9ydCA8V2ViQ29yZS9L
VVJMLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZUdy
b3VwLmg+CiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TRXJyb3IuaD4KICNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUhpc3RvcnkuaD4K
LSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0hhc2hNYXAu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1JldGFpblB0ci5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit0eXBlZGVm
IGludDY0X3QgV2ViSGlzdG9yeURhdGVLZXk7Cit0eXBlZGVmIEhhc2hNYXA8V2ViSGlzdG9yeURh
dGVLZXksIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gPiBEYXRlVG9FbnRyaWVzTWFwOwogCiBO
U1N0cmluZyAqV2ViSGlzdG9yeUl0ZW1zQWRkZWROb3RpZmljYXRpb24gPSBAIldlYkhpc3RvcnlJ
dGVtc0FkZGVkTm90aWZpY2F0aW9uIjsKIE5TU3RyaW5nICpXZWJIaXN0b3J5SXRlbXNSZW1vdmVk
Tm90aWZpY2F0aW9uID0gQCJXZWJIaXN0b3J5SXRlbXNSZW1vdmVkTm90aWZpY2F0aW9uIjsKQEAg
LTU0LDYgKzYwLDQ1IEBAIE5TU3RyaW5nICpEYXRlc0FycmF5S2V5ID0gQCJXZWJIaXN0b3J5RGEK
IAogI2RlZmluZSBjdXJyZW50RmlsZVZlcnNpb24gMQogCitAaW50ZXJmYWNlIFdlYkhpc3RvcnlQ
cml2YXRlIDogTlNPYmplY3QgeworQHByaXZhdGUKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpf
ZW50cmllc0J5VVJMOworICAgIERhdGVUb0VudHJpZXNNYXAqIF9lbnRyaWVzQnlEYXRlOworICAg
IE5TTXV0YWJsZUFycmF5ICpfb3JkZXJlZExhc3RWaXNpdGVkRGF5czsKKyAgICBCT09MIGl0ZW1M
aW1pdFNldDsKKyAgICBpbnQgaXRlbUxpbWl0OworICAgIEJPT0wgYWdlSW5EYXlzTGltaXRTZXQ7
CisgICAgaW50IGFnZUluRGF5c0xpbWl0OworfQorCistICh2b2lkKWFkZEl0ZW06KFdlYkhpc3Rv
cnlJdGVtICopZW50cnk7CistICh2b2lkKWFkZEl0ZW1zOihOU0FycmF5ICopbmV3RW50cmllczsK
Ky0gKEJPT0wpcmVtb3ZlSXRlbTooV2ViSGlzdG9yeUl0ZW0gKillbnRyeTsKKy0gKEJPT0wpcmVt
b3ZlSXRlbXM6KE5TQXJyYXkgKillbnRyaWVzOworLSAoQk9PTClyZW1vdmVBbGxJdGVtczsKKy0g
KHZvaWQpc2V0TGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6KE5TVGltZUludGVydmFsKXRpbWUgZm9y
SXRlbTooV2ViSGlzdG9yeUl0ZW0gKilpdGVtOworCistIChOU0FycmF5ICopb3JkZXJlZExhc3RW
aXNpdGVkRGF5czsKKy0gKE5TQXJyYXkgKilvcmRlcmVkSXRlbXNMYXN0VmlzaXRlZE9uRGF5OihO
U0NhbGVuZGFyRGF0ZSAqKWNhbGVuZGFyRGF0ZTsKKy0gKEJPT0wpY29udGFpbnNVUkw6KE5TVVJM
ICopVVJMOworLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5nICopVVJM
U3RyaW5nOworLSAoV2ViSGlzdG9yeUl0ZW0gKilpdGVtRm9yVVJMOihOU1VSTCAqKVVSTDsKKy0g
KFdlYkhpc3RvcnlJdGVtICopaXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmc7
CisKKy0gKEJPT0wpbG9hZEZyb21VUkw6KE5TVVJMICopVVJMIGNvbGxlY3REaXNjYXJkZWRJdGVt
c0ludG86KE5TTXV0YWJsZUFycmF5ICopZGlzY2FyZGVkSXRlbXMgZXJyb3I6KE5TRXJyb3IgKiop
ZXJyb3I7CistIChCT09MKXNhdmVUb1VSTDooTlNVUkwgKilVUkwgZXJyb3I6KE5TRXJyb3IgKiop
ZXJyb3I7CisKKy0gKE5TQ2FsZW5kYXJEYXRlICopYWdlTGltaXREYXRlOworCistICh2b2lkKXNl
dEhpc3RvcnlJdGVtTGltaXQ6KGludClsaW1pdDsKKy0gKGludCloaXN0b3J5SXRlbUxpbWl0Owor
LSAodm9pZClzZXRIaXN0b3J5QWdlSW5EYXlzTGltaXQ6KGludClsaW1pdDsKKy0gKGludCloaXN0
b3J5QWdlSW5EYXlzTGltaXQ7CisKKy0gKHZvaWQpYWRkVmlzaXRlZExpbmtzVG9QYWdlR3JvdXA6
KFBhZ2VHcm91cCYpZ3JvdXA7CisKK0BlbmQKKwogQGltcGxlbWVudGF0aW9uIFdlYkhpc3RvcnlQ
cml2YXRlCiAKICNwcmFnbWEgbWFyayBPQkpFQ1QgRlJBTUVXT1JLCkBAIC02OSw5ICsxMTQsOCBA
QCBOU1N0cmluZyAqRGF0ZXNBcnJheUtleSA9IEAiV2ViSGlzdG9yeURhCiAKIC0gKGlkKWluaXQK
IHsKLSAgICBpZiAoIVtzdXBlciBpbml0XSkgeworICAgIGlmICghW3N1cGVyIGluaXRdKQogICAg
ICAgICByZXR1cm4gbmlsOwotICAgIH0KICAgICAKICAgICBfZW50cmllc0J5VVJMID0gW1tOU011
dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKICAgICBfZW50cmllc0J5RGF0ZSA9IG5ldyBE
YXRlVG9FbnRyaWVzTWFwOwpAQCAtODQsNyArMTI4LDYgQEAgTlNTdHJpbmcgKkRhdGVzQXJyYXlL
ZXkgPSBAIldlYkhpc3RvcnlEYQogICAgIFtfZW50cmllc0J5VVJMIHJlbGVhc2VdOwogICAgIFtf
b3JkZXJlZExhc3RWaXNpdGVkRGF5cyByZWxlYXNlXTsKICAgICBkZWxldGUgX2VudHJpZXNCeURh
dGU7Ci0gICAgCiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCkBAIC0xNTYsNyArMTk5LDcgQEAg
V2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQogICAgIFtlbnRyaWVzRm9y
RGF0ZSBpbnNlcnRPYmplY3Q6ZW50cnkgYXRJbmRleDpsb3ddOwogfQogCi0tIChCT09MKV9yZW1v
dmVJdGVtRnJvbURhdGVDYWNoZXM6KFdlYkhpc3RvcnlJdGVtICopZW50cnkKKy0gKEJPT0wpcmVt
b3ZlSXRlbUZyb21EYXRlQ2FjaGVzOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5CiB7CiAgICAgV2Vi
SGlzdG9yeURhdGVLZXkgZGF0ZUtleTsKICAgICBCT09MIGZvdW5kRGF0ZSA9IFtzZWxmIGZpbmRL
ZXk6JmRhdGVLZXkgZm9yRGF5OltlbnRyeSBsYXN0VmlzaXRlZFRpbWVJbnRlcnZhbF1dOwpAQCAt
MTc5LDI2ICsyMjIsMjggQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5u
aQogICAgIHJldHVybiBZRVM7CiB9CiAKLS0gKEJPT0wpcmVtb3ZlSXRlbUZvclVSTFN0cmluZzog
KE5TU3RyaW5nICopVVJMU3RyaW5nCistIChCT09MKXJlbW92ZUl0ZW1Gb3JVUkxTdHJpbmc6KE5T
U3RyaW5nICopVVJMU3RyaW5nCiB7Ci0gICAgV2ViSGlzdG9yeUl0ZW0gKmVudHJ5ID0gW19lbnRy
aWVzQnlVUkwgb2JqZWN0Rm9yS2V5OiBVUkxTdHJpbmddOwotICAgIGlmIChlbnRyeSA9PSBuaWwp
IHsKKyAgICBXZWJIaXN0b3J5SXRlbSAqZW50cnkgPSBbX2VudHJpZXNCeVVSTCBvYmplY3RGb3JL
ZXk6VVJMU3RyaW5nXTsKKyAgICBpZiAoIWVudHJ5KQogICAgICAgICByZXR1cm4gTk87Ci0gICAg
fQogCi0gICAgW19lbnRyaWVzQnlVUkwgcmVtb3ZlT2JqZWN0Rm9yS2V5OiBVUkxTdHJpbmddOwor
ICAgIFtfZW50cmllc0J5VVJMIHJlbW92ZU9iamVjdEZvcktleTpVUkxTdHJpbmddOwogICAgIAog
I2lmIEFTU0VSVF9ESVNBQkxFRAotICAgIFtzZWxmIF9yZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6
ZW50cnldOworICAgIFtzZWxmIHJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczplbnRyeV07CiAjZWxz
ZQotICAgIEJPT0wgaXRlbVdhc0luRGF0ZUNhY2hlcyA9IFtzZWxmIF9yZW1vdmVJdGVtRnJvbURh
dGVDYWNoZXM6ZW50cnldOworICAgIEJPT0wgaXRlbVdhc0luRGF0ZUNhY2hlcyA9IFtzZWxmIHJl
bW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczplbnRyeV07CiAgICAgQVNTRVJUKGl0ZW1XYXNJbkRhdGVD
YWNoZXMpOwogI2VuZGlmCiAKKyAgICBpZiAoIVtfZW50cmllc0J5VVJMIGNvdW50XSkKKyAgICAg
ICAgUGFnZUdyb3VwOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsKKwogICAgIHJldHVybiBZRVM7
CiB9CiAKLS0gKHZvaWQpX2FkZEl0ZW1Ub0RhdGVDYWNoZXM6KFdlYkhpc3RvcnlJdGVtICopZW50
cnkKKy0gKHZvaWQpYWRkSXRlbVRvRGF0ZUNhY2hlczooV2ViSGlzdG9yeUl0ZW0gKillbnRyeQog
ewogICAgIFdlYkhpc3RvcnlEYXRlS2V5IGRhdGVLZXk7CiAgICAgaWYgKFtzZWxmIGZpbmRLZXk6
JmRhdGVLZXkgZm9yRGF5OltlbnRyeSBsYXN0VmlzaXRlZFRpbWVJbnRlcnZhbF1dKQpAQCAtMjM1
LDcgKzI4MCw3IEBAIFdlYkhpc3RvcnlEYXRlS2V5IHRpbWVJbnRlcnZhbEZvckJlZ2lubmkKICAg
ICAgICAgW29sZEVudHJ5IHJlbGVhc2VdOwogICAgIH0KIAotICAgIFtzZWxmIF9hZGRJdGVtVG9E
YXRlQ2FjaGVzOmVudHJ5XTsKKyAgICBbc2VsZiBhZGRJdGVtVG9EYXRlQ2FjaGVzOmVudHJ5XTsK
ICAgICBbX2VudHJpZXNCeVVSTCBzZXRPYmplY3Q6ZW50cnkgZm9yS2V5OlVSTFN0cmluZ107CiB9
CiAKQEAgLTI0NCwxMiArMjg5LDEyIEBAIFdlYkhpc3RvcnlEYXRlS2V5IHRpbWVJbnRlcnZhbEZv
ckJlZ2lubmkKICNpZiBBU1NFUlRfRElTQUJMRUQKICAgICBbc2VsZiBfcmVtb3ZlSXRlbUZyb21E
YXRlQ2FjaGVzOmVudHJ5XTsKICNlbHNlCi0gICAgQk9PTCBlbnRyeVdhc1ByZXNlbnQgPSBbc2Vs
ZiBfcmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzOmVudHJ5XTsKKyAgICBCT09MIGVudHJ5V2FzUHJl
c2VudCA9IFtzZWxmIHJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczplbnRyeV07CiAgICAgQVNTRVJU
KGVudHJ5V2FzUHJlc2VudCk7CiAjZW5kaWYKICAgICAKICAgICBbZW50cnkgX3NldExhc3RWaXNp
dGVkVGltZUludGVydmFsOnRpbWVdOwotICAgIFtzZWxmIF9hZGRJdGVtVG9EYXRlQ2FjaGVzOmVu
dHJ5XTsKKyAgICBbc2VsZiBhZGRJdGVtVG9EYXRlQ2FjaGVzOmVudHJ5XTsKIAogICAgIC8vIERv
bid0IHNlbmQgbm90aWZpY2F0aW9uIHVudGlsIGVudHJ5IGlzIGJhY2sgaW4gdGhlIHJpZ2h0IHBs
YWNlIGluIHRoZSBkYXRlIGNhY2hlcywKICAgICAvLyBzaW5jZSBvYnNlcnZlcnMgbWlnaHQgZmV0
Y2ggaGlzdG9yeSBieSBkYXRlIHdoZW4gdGhleSByZWNlaXZlIHRoZSBub3RpZmljYXRpb24uCkBA
IC0yNTcsNDcgKzMwMiwzOCBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2YWxGb3JCZWdp
bm5pCiAgICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1lOldlYkhpc3RvcnlJdGVtQ2hhbmdlZE5v
dGlmaWNhdGlvbiBvYmplY3Q6ZW50cnkgdXNlckluZm86bmlsXTsKIH0KIAotLSAoQk9PTClyZW1v
dmVJdGVtOiAoV2ViSGlzdG9yeUl0ZW0gKillbnRyeQorLSAoQk9PTClyZW1vdmVJdGVtOihXZWJI
aXN0b3J5SXRlbSAqKWVudHJ5CiB7Ci0gICAgV2ViSGlzdG9yeUl0ZW0gKm1hdGNoaW5nRW50cnk7
Ci0gICAgTlNTdHJpbmcgKlVSTFN0cmluZzsKLQotICAgIFVSTFN0cmluZyA9IFtlbnRyeSBVUkxT
dHJpbmddOworICAgIE5TU3RyaW5nICpVUkxTdHJpbmcgPSBbZW50cnkgVVJMU3RyaW5nXTsKIAog
ICAgIC8vIElmIHRoaXMgZXhhY3Qgb2JqZWN0IGlzbid0IHN0b3JlZCwgdGhlbiBtYWtlIG5vIGNo
YW5nZS4KICAgICAvLyBGSVhNRTogSXMgdGhpcyB0aGUgcmlnaHQgYmVoYXZpb3IgaWYgdGhpcyBl
bnRyeSBpc24ndCBwcmVzZW50LCBidXQgYW5vdGhlciBlbnRyeSBmb3IgdGhlIHNhbWUgVVJMIGlz
PwogICAgIC8vIE1heWJlIG5lZWQgdG8gY2hhbmdlIHRoZSBBUEkgdG8gbWFrZSBzb21ldGhpbmcg
bGlrZSByZW1vdmVFbnRyeUZvclVSTFN0cmluZyBwdWJsaWMgaW5zdGVhZC4KLSAgICBtYXRjaGlu
Z0VudHJ5ID0gW19lbnRyaWVzQnlVUkwgb2JqZWN0Rm9yS2V5OiBVUkxTdHJpbmddOwotICAgIGlm
IChtYXRjaGluZ0VudHJ5ICE9IGVudHJ5KSB7CisgICAgV2ViSGlzdG9yeUl0ZW0gKm1hdGNoaW5n
RW50cnkgPSBbX2VudHJpZXNCeVVSTCBvYmplY3RGb3JLZXk6VVJMU3RyaW5nXTsKKyAgICBpZiAo
bWF0Y2hpbmdFbnRyeSAhPSBlbnRyeSkKICAgICAgICAgcmV0dXJuIE5POwotICAgIH0KIAotICAg
IFtzZWxmIHJlbW92ZUl0ZW1Gb3JVUkxTdHJpbmc6IFVSTFN0cmluZ107CisgICAgW3NlbGYgcmVt
b3ZlSXRlbUZvclVSTFN0cmluZzpVUkxTdHJpbmddOwogCiAgICAgcmV0dXJuIFlFUzsKIH0KIAot
LSAoQk9PTClyZW1vdmVJdGVtczogKE5TQXJyYXkgKillbnRyaWVzCistIChCT09MKXJlbW92ZUl0
ZW1zOihOU0FycmF5ICopZW50cmllcwogewotICAgIGludCBpbmRleCwgY291bnQ7Ci0KLSAgICBj
b3VudCA9IFtlbnRyaWVzIGNvdW50XTsKLSAgICBpZiAoY291bnQgPT0gMCkgeworICAgIE5TVUlu
dGVnZXIgY291bnQgPSBbZW50cmllcyBjb3VudF07CisgICAgaWYgKCFjb3VudCkKICAgICAgICAg
cmV0dXJuIE5POwotICAgIH0KIAotICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyAr
K2luZGV4KSB7CisgICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsg
KytpbmRleCkKICAgICAgICAgW3NlbGYgcmVtb3ZlSXRlbTpbZW50cmllcyBvYmplY3RBdEluZGV4
OmluZGV4XV07Ci0gICAgfQogICAgIAogICAgIHJldHVybiBZRVM7CiB9CiAKIC0gKEJPT0wpcmVt
b3ZlQWxsSXRlbXMKIHsKLSAgICBpZiAoW19lbnRyaWVzQnlVUkwgY291bnRdID09IDApIHsKKyAg
ICBpZiAoX2VudHJpZXNCeURhdGUtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIE5POwotICAg
IH0KIAogICAgIF9lbnRyaWVzQnlEYXRlLT5jbGVhcigpOwogICAgIFtfZW50cmllc0J5VVJMIHJl
bW92ZUFsbE9iamVjdHNdOwpAQCAtMzA2LDIzICszNDIsMjEgQEAgV2ViSGlzdG9yeURhdGVLZXkg
dGltZUludGVydmFsRm9yQmVnaW5uaQogICAgIFtfb3JkZXJlZExhc3RWaXNpdGVkRGF5cyByZWxl
YXNlXTsKICAgICBfb3JkZXJlZExhc3RWaXNpdGVkRGF5cyA9IG5pbDsKIAorICAgIFBhZ2VHcm91
cDo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7CisKICAgICByZXR1cm4gWUVTOwogfQogCiAtICh2
b2lkKWFkZEl0ZW1zOihOU0FycmF5ICopbmV3RW50cmllcwogewotICAgIE5TRW51bWVyYXRvciAq
ZW51bWVyYXRvcjsKLSAgICBXZWJIaXN0b3J5SXRlbSAqZW50cnk7Ci0KICAgICAvLyBUaGVyZSBp
cyBubyBndWFyYW50ZWUgdGhhdCB0aGUgaW5jb21pbmcgZW50cmllcyBhcmUgaW4gYW55IHBhcnRp
Y3VsYXIKICAgICAvLyBvcmRlciwgYnV0IGlmIHRoaXMgaXMgY2FsbGVkIHdpdGggYSBzZXQgb2Yg
ZW50cmllcyB0aGF0IHdlcmUgY3JlYXRlZCBieQogICAgIC8vIGl0ZXJhdGluZyB0aHJvdWdoIHRo
ZSByZXN1bHRzIG9mIG9yZGVyZWRMYXN0VmlzaXRlZERheXMgYW5kIG9yZGVyZWRJdGVtc0xhc3RW
aXNpdGVkT25EYXl5CiAgICAgLy8gdGhlbiB0aGV5IHdpbGwgYmUgb3JkZXJlZCBjaHJvbm9sb2dp
Y2FsbHkgZnJvbSBuZXdlc3QgdG8gb2xkZXN0LiBXZSBjYW4gbWFrZSBhZGRpbmcgdGhlbQogICAg
IC8vIGZhc3RlciAoZmV3ZXIgY29tcGFyZXMpIGJ5IGluc2VydGluZyB0aGVtIGZyb20gb2xkZXN0
IHRvIG5ld2VzdC4KLSAgICBlbnVtZXJhdG9yID0gW25ld0VudHJpZXMgcmV2ZXJzZU9iamVjdEVu
dW1lcmF0b3JdOwotICAgIHdoaWxlICgoZW50cnkgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkg
IT0gbmlsKSB7CisgICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9yID0gW25ld0VudHJpZXMgcmV2
ZXJzZU9iamVjdEVudW1lcmF0b3JdOworICAgIHdoaWxlIChXZWJIaXN0b3J5SXRlbSAqZW50cnkg
PSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkKICAgICAgICAgW3NlbGYgYWRkSXRlbTplbnRyeV07
Ci0gICAgfQogfQogCiAjcHJhZ21hIG1hcmsgREFURS1CQVNFRCBSRVRSSUVWQUwKQEAgLTM0OSwy
OCArMzgzLDI3IEBAIFdlYkhpc3RvcnlEYXRlS2V5IHRpbWVJbnRlcnZhbEZvckJlZ2lubmkKICAg
ICByZXR1cm4gX29yZGVyZWRMYXN0VmlzaXRlZERheXM7CiB9CiAKLS0gKE5TQXJyYXkgKilvcmRl
cmVkSXRlbXNMYXN0VmlzaXRlZE9uRGF5OiAoTlNDYWxlbmRhckRhdGUgKilkYXRlCistIChOU0Fy
cmF5ICopb3JkZXJlZEl0ZW1zTGFzdFZpc2l0ZWRPbkRheTooTlNDYWxlbmRhckRhdGUgKilkYXRl
CiB7CiAgICAgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtleTsKLSAgICBpZiAoW3NlbGYgZmluZEtl
eTomZGF0ZUtleSBmb3JEYXk6W2RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXV0p
Ci0gICAgICAgIHJldHVybiBfZW50cmllc0J5RGF0ZS0+Z2V0KGRhdGVLZXkpLmdldCgpOwotCi0g
ICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoIVtzZWxmIGZpbmRLZXk6JmRhdGVLZXkgZm9yRGF5Oltk
YXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV1dKQorICAgICAgICByZXR1cm4gbmls
OworICAgIHJldHVybiBfZW50cmllc0J5RGF0ZS0+Z2V0KGRhdGVLZXkpLmdldCgpOwogfQogCiAj
cHJhZ21hIG1hcmsgVVJMIE1BVENISU5HCiAKIC0gKFdlYkhpc3RvcnlJdGVtICopaXRlbUZvclVS
TFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmcKIHsKLSAgICByZXR1cm4gW19lbnRyaWVzQnlV
Ukwgb2JqZWN0Rm9yS2V5OiBVUkxTdHJpbmddOworICAgIHJldHVybiBbX2VudHJpZXNCeVVSTCBv
YmplY3RGb3JLZXk6VVJMU3RyaW5nXTsKIH0KIAotLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxT
dHJpbmc6IChOU1N0cmluZyAqKVVSTFN0cmluZworLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxT
dHJpbmc6KE5TU3RyaW5nICopVVJMU3RyaW5nCiB7CiAgICAgcmV0dXJuIFtzZWxmIGl0ZW1Gb3JV
UkxTdHJpbmc6VVJMU3RyaW5nXSAhPSBuaWw7CiB9CiAKLS0gKEJPT0wpY29udGFpbnNVUkw6IChO
U1VSTCAqKVVSTAorLSAoQk9PTCljb250YWluc1VSTDooTlNVUkwgKilVUkwKIHsKICAgICByZXR1
cm4gW3NlbGYgaXRlbUZvclVSTFN0cmluZzpbVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmdd
XSAhPSBuaWw7CiB9CkBAIC0zOTIsNyArNDI1LDcgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUlu
dGVydmFsRm9yQmVnaW5uaQogewogICAgIGlmIChhZ2VJbkRheXNMaW1pdFNldCkKICAgICAgICAg
cmV0dXJuIGFnZUluRGF5c0xpbWl0OwotICAgIHJldHVybiBbW05TVXNlckRlZmF1bHRzIHN0YW5k
YXJkVXNlckRlZmF1bHRzXSBpbnRlZ2VyRm9yS2V5OiBAIldlYktpdEhpc3RvcnlBZ2VJbkRheXNM
aW1pdCJdOworICAgIHJldHVybiBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XSBpbnRlZ2VyRm9yS2V5OkAiV2ViS2l0SGlzdG9yeUFnZUluRGF5c0xpbWl0Il07CiB9CiAKIC0g
KHZvaWQpc2V0SGlzdG9yeUl0ZW1MaW1pdDooaW50KWxpbWl0CkBAIC00MDUsMTIgKzQzOCwxMiBA
QCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2YWxGb3JCZWdpbm5pCiB7CiAgICAgaWYgKGl0
ZW1MaW1pdFNldCkKICAgICAgICAgcmV0dXJuIGl0ZW1MaW1pdDsKLSAgICByZXR1cm4gW1tOU1Vz
ZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gaW50ZWdlckZvcktleTogQCJXZWJLaXRI
aXN0b3J5SXRlbUxpbWl0Il07CisgICAgcmV0dXJuIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIGludGVnZXJGb3JLZXk6QCJXZWJLaXRIaXN0b3J5SXRlbUxpbWl0Il07CiB9
CiAKIC8vIFJldHVybiBhIGRhdGUgdGhhdCBtYXJrcyB0aGUgYWdlIGxpbWl0IGZvciBoaXN0b3J5
IGVudHJpZXMgc2F2ZWQgdG8gb3IKIC8vIGxvYWRlZCBmcm9tIGRpc2suIEFueSBlbnRyeSBvbGRl
ciB0aGFuIHRoaXMgaXRlbSBzaG91bGQgYmUgcmVqZWN0ZWQuCi0tIChOU0NhbGVuZGFyRGF0ZSAq
KV9hZ2VMaW1pdERhdGUKKy0gKE5TQ2FsZW5kYXJEYXRlICopYWdlTGltaXREYXRlCiB7CiAgICAg
cmV0dXJuIFtbTlNDYWxlbmRhckRhdGUgY2FsZW5kYXJEYXRlXSBkYXRlQnlBZGRpbmdZZWFyczow
IG1vbnRoczowIGRheXM6LVtzZWxmIGhpc3RvcnlBZ2VJbkRheXNMaW1pdF0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzOjAgbWludXRl
czowIHNlY29uZHM6MF07CkBAIC00NDAsNyArNDczLDcgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGlt
ZUludGVydmFsRm9yQmVnaW5uaQogICAgIHJldHVybiBhcnJheVJlcDsKIH0KIAotLSAoQk9PTClf
bG9hZEhpc3RvcnlHdXRzRnJvbVVSTDooTlNVUkwgKilVUkwgc2F2ZWRJdGVtc0NvdW50OihpbnQg
KiludW1iZXJPZkl0ZW1zTG9hZGVkIGNvbGxlY3REaXNjYXJkZWRJdGVtc0ludG86KE5TTXV0YWJs
ZUFycmF5ICopZGlzY2FyZGVkSXRlbXMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKKy0gKEJPT0wp
bG9hZEhpc3RvcnlHdXRzRnJvbVVSTDooTlNVUkwgKilVUkwgc2F2ZWRJdGVtc0NvdW50OihpbnQg
KiludW1iZXJPZkl0ZW1zTG9hZGVkIGNvbGxlY3REaXNjYXJkZWRJdGVtc0ludG86KE5TTXV0YWJs
ZUFycmF5ICopZGlzY2FyZGVkSXRlbXMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKIHsKICAgICAq
bnVtYmVyT2ZJdGVtc0xvYWRlZCA9IDA7CiAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0g
bmlsOwpAQCAtNDc0LDEyICs1MDcsMTEgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFs
Rm9yQmVnaW5uaQogICAgIE5TTnVtYmVyICpmaWxlVmVyc2lvbk9iamVjdCA9IFtkaWN0aW9uYXJ5
IG9iamVjdEZvcktleTpGaWxlVmVyc2lvbktleV07CiAgICAgaW50IGZpbGVWZXJzaW9uOwogICAg
IC8vIHdlIGRvbid0IHRydXN0IGRhdGEgb2J0YWluZWQgZnJvbSBlbHNld2hlcmUsIHNvIGRvdWJs
ZS1jaGVjawotICAgIGlmIChmaWxlVmVyc2lvbk9iamVjdCAhPSBuaWwgJiYgW2ZpbGVWZXJzaW9u
T2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pIHsKLSAgICAgICAgZmlsZVZl
cnNpb24gPSBbZmlsZVZlcnNpb25PYmplY3QgaW50VmFsdWVdOwotICAgIH0gZWxzZSB7CisgICAg
aWYgKCFmaWxlVmVyc2lvbk9iamVjdCB8fCAhW2ZpbGVWZXJzaW9uT2JqZWN0IGlzS2luZE9mQ2xh
c3M6W05TTnVtYmVyIGNsYXNzXV0pIHsKICAgICAgICAgTE9HX0VSUk9SKCJoaXN0b3J5IGZpbGUg
dmVyc2lvbiBjYW4ndCBiZSBkZXRlcm1pbmVkLCB0aGVyZWZvcmUgbm90IGxvYWRpbmciKTsKICAg
ICAgICAgcmV0dXJuIE5POwogICAgIH0KKyAgICBmaWxlVmVyc2lvbiA9IFtmaWxlVmVyc2lvbk9i
amVjdCBpbnRWYWx1ZV07CiAgICAgaWYgKGZpbGVWZXJzaW9uID4gY3VycmVudEZpbGVWZXJzaW9u
KSB7CiAgICAgICAgIExPR19FUlJPUigiaGlzdG9yeSBmaWxlIHZlcnNpb24gaXMgJWQsIG5ld2Vy
IHRoYW4gbmV3ZXN0IGtub3duIHZlcnNpb24gJWQsIHRoZXJlZm9yZSBub3QgbG9hZGluZyIsIGZp
bGVWZXJzaW9uLCBjdXJyZW50RmlsZVZlcnNpb24pOwogICAgICAgICByZXR1cm4gTk87CkBAIC00
ODgsNyArNTIwLDcgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQog
ICAgIE5TQXJyYXkgKmFycmF5ID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkRhdGVzQXJyYXlL
ZXldOwogCiAgICAgaW50IGl0ZW1Db3VudExpbWl0ID0gW3NlbGYgaGlzdG9yeUl0ZW1MaW1pdF07
Ci0gICAgTlNUaW1lSW50ZXJ2YWwgYWdlTGltaXREYXRlID0gW1tzZWxmIF9hZ2VMaW1pdERhdGVd
IHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV07CisgICAgTlNUaW1lSW50ZXJ2YWwgYWdl
TGltaXREYXRlID0gW1tzZWxmIGFnZUxpbWl0RGF0ZV0gdGltZUludGVydmFsU2luY2VSZWZlcmVu
Y2VEYXRlXTsKICAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbYXJyYXkgb2JqZWN0RW51
bWVyYXRvcl07CiAgICAgQk9PTCBhZ2VMaW1pdFBhc3NlZCA9IE5POwogICAgIEJPT0wgaXRlbUxp
bWl0UGFzc2VkID0gTk87CkBAIC01MzAsMTUwICs1NjIsNjUgQEAgV2ViSGlzdG9yeURhdGVLZXkg
dGltZUludGVydmFsRm9yQmVnaW5uaQogCiAtIChCT09MKWxvYWRGcm9tVVJMOihOU1VSTCAqKVVS
TCBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJbnRvOihOU011dGFibGVBcnJheSAqKWRpc2NhcmRlZEl0
ZW1zIGVycm9yOihOU0Vycm9yICoqKWVycm9yCiB7Ci0gICAgaW50IG51bWJlck9mSXRlbXM7Ci0g
ICAgZG91YmxlIHN0YXJ0LCBkdXJhdGlvbjsKLSAgICBCT09MIHJlc3VsdDsKKyAgICBkb3VibGUg
c3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKIAotICAgIHN0YXJ0ID0gQ0ZBYnNv
bHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0gICAgcmVzdWx0ID0gW3NlbGYgX2xvYWRIaXN0b3J5R3V0
c0Zyb21VUkw6VVJMIHNhdmVkSXRlbXNDb3VudDombnVtYmVyT2ZJdGVtcyBjb2xsZWN0RGlzY2Fy
ZGVkSXRlbXNJbnRvOmRpc2NhcmRlZEl0ZW1zIGVycm9yOmVycm9yXTsKKyAgICBpbnQgbnVtYmVy
T2ZJdGVtczsKKyAgICBpZiAoIVtzZWxmIGxvYWRIaXN0b3J5R3V0c0Zyb21VUkw6VVJMIHNhdmVk
SXRlbXNDb3VudDombnVtYmVyT2ZJdGVtcyBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJbnRvOmRpc2Nh
cmRlZEl0ZW1zIGVycm9yOmVycm9yXSkKKyAgICAgICAgcmV0dXJuIE5POwogCi0gICAgaWYgKHJl
c3VsdCkgewotICAgICAgICBkdXJhdGlvbiA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0g
c3RhcnQ7Ci0gICAgICAgIExPRyhUaW1pbmcsICJsb2FkaW5nICVkIGhpc3RvcnkgZW50cmllcyBm
cm9tICVAIHRvb2sgJWYgc2Vjb25kcyIsCi0gICAgICAgICAgICBudW1iZXJPZkl0ZW1zLCBVUkws
IGR1cmF0aW9uKTsKLSAgICB9CisgICAgZG91YmxlIGR1cmF0aW9uID0gQ0ZBYnNvbHV0ZVRpbWVH
ZXRDdXJyZW50KCkgLSBzdGFydDsKKyAgICBMT0coVGltaW5nLCAibG9hZGluZyAlZCBoaXN0b3J5
IGVudHJpZXMgZnJvbSAlQCB0b29rICVmIHNlY29uZHMiLCBudW1iZXJPZkl0ZW1zLCBVUkwsIGR1
cmF0aW9uKTsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFlFUzsKIH0KIAotLSAo
Qk9PTClfc2F2ZUhpc3RvcnlHdXRzOiAoaW50ICopbnVtYmVyT2ZJdGVtc1NhdmVkIFVSTDooTlNV
UkwgKilVUkwgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKKy0gKEJPT0wpc2F2ZUhpc3RvcnlHdXRz
OihpbnQgKiludW1iZXJPZkl0ZW1zU2F2ZWQgVVJMOihOU1VSTCAqKVVSTCBlcnJvcjooTlNFcnJv
ciAqKillcnJvcgogewogICAgICpudW1iZXJPZkl0ZW1zU2F2ZWQgPSAwOwogCi0gICAgLy8gRklY
TUU6ICBDb3JyZWN0bHkgcmVwb3J0IGVycm9yIHdoZW4gbmV3IEFQSSBpcyByZWFkeS4KLSAgICBp
ZiAoZXJyb3IpCi0gICAgICAgICplcnJvciA9IG5pbDsKLQogICAgIE5TQXJyYXkgKmFycmF5ID0g
W3NlbGYgYXJyYXlSZXByZXNlbnRhdGlvbl07CiAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5
ID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgogICAgICAgICBh
cnJheSwgRGF0ZXNBcnJheUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Y3Vy
cmVudEZpbGVWZXJzaW9uXSwgRmlsZVZlcnNpb25LZXksCiAgICAgICAgIG5pbF07CiAgICAgTlNE
YXRhICpkYXRhID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBkYXRhRnJvbVByb3BlcnR5
TGlzdDpkaWN0aW9uYXJ5IGZvcm1hdDpOU1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wIGVy
cm9yRGVzY3JpcHRpb246bmlsXTsKLSAgICBpZiAoIVtkYXRhIHdyaXRlVG9VUkw6VVJMIGF0b21p
Y2FsbHk6WUVTXSkgeworICAgIGlmICghW2RhdGEgd3JpdGVUb1VSTDpVUkwgb3B0aW9uczowIGVy
cm9yOmVycm9yXSkgewogICAgICAgICBMT0dfRVJST1IoImF0dGVtcHQgdG8gc2F2ZSAlQCB0byAl
QCBmYWlsZWQiLCBkaWN0aW9uYXJ5LCBVUkwpOwogICAgICAgICByZXR1cm4gTk87CiAgICAgfQot
ICAgIAorCiAgICAgKm51bWJlck9mSXRlbXNTYXZlZCA9IFthcnJheSBjb3VudF07CiAgICAgcmV0
dXJuIFlFUzsKIH0KIAogLSAoQk9PTClzYXZlVG9VUkw6KE5TVVJMICopVVJMIGVycm9yOihOU0Vy
cm9yICoqKWVycm9yCiB7Ci0gICAgaW50IG51bWJlck9mSXRlbXM7Ci0gICAgZG91YmxlIHN0YXJ0
LCBkdXJhdGlvbjsKLSAgICBCT09MIHJlc3VsdDsKLQotICAgIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRp
bWVHZXRDdXJyZW50KCk7Ci0gICAgcmVzdWx0ID0gW3NlbGYgX3NhdmVIaXN0b3J5R3V0czogJm51
bWJlck9mSXRlbXMgVVJMOlVSTCBlcnJvcjplcnJvcl07Ci0KLSAgICBpZiAocmVzdWx0KSB7Ci0g
ICAgICAgIGR1cmF0aW9uID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKLSAg
ICAgICAgTE9HKFRpbWluZywgInNhdmluZyAlZCBoaXN0b3J5IGVudHJpZXMgdG8gJUAgdG9vayAl
ZiBzZWNvbmRzIiwKLSAgICAgICAgICAgIG51bWJlck9mSXRlbXMsIFVSTCwgZHVyYXRpb24pOwot
ICAgIH0KKyAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKIAot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBfV2ViQ29yZUhpc3Rv
cnlQcm92aWRlciA6IE5TT2JqZWN0ICA8V2ViQ29yZUhpc3RvcnlQcm92aWRlcj4gCi17Ci0gICAg
V2ViSGlzdG9yeSAqaGlzdG9yeTsKLX0KLS0gaW5pdFdpdGhIaXN0b3J5OiAoV2ViSGlzdG9yeSAq
KWg7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBfV2ViQ29yZUhpc3RvcnlQcm92aWRlcgotLSBp
bml0V2l0aEhpc3Rvcnk6IChXZWJIaXN0b3J5ICopaAotewotICAgIGhpc3RvcnkgPSBbaCByZXRh
aW5dOwotICAgIHJldHVybiBzZWxmOwotfQorICAgIGludCBudW1iZXJPZkl0ZW1zOworICAgIGlm
ICghW3NlbGYgc2F2ZUhpc3RvcnlHdXRzOiZudW1iZXJPZkl0ZW1zIFVSTDpVUkwgZXJyb3I6ZXJy
b3JdKQorICAgICAgICByZXR1cm4gTk87CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaExldHRl
cihjaGFyIGMsIGNoYXIgbG93ZXJjYXNlTGV0dGVyKQotewotICAgIHJldHVybiAoYyB8IDB4MjAp
ID09IGxvd2VyY2FzZUxldHRlcjsKLX0KKyAgICBkb3VibGUgZHVyYXRpb24gPSBDRkFic29sdXRl
VGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OworICAgIExPRyhUaW1pbmcsICJzYXZpbmcgJWQgaGlz
dG9yeSBlbnRyaWVzIHRvICVAIHRvb2sgJWYgc2Vjb25kcyIsIG51bWJlck9mSXRlbXMsIFVSTCwg
ZHVyYXRpb24pOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hVbmljb2RlTGV0dGVyKFVuaUNo
YXIgYywgVW5pQ2hhciBsb3dlcmNhc2VMZXR0ZXIpCi17Ci0gICAgcmV0dXJuIChjIHwgMHgyMCkg
PT0gbG93ZXJjYXNlTGV0dGVyOworICAgIHJldHVybiBZRVM7CiB9CiAKLSNkZWZpbmUgVU5JQ09E
RV9CVUZGRVJfU0laRSAxMDI0Ci0KLS0gKEJPT0wpY29udGFpbnNVUkw6KGNvbnN0IFVuaUNoYXIg
Kil1bmljb2RlIGxlbmd0aDoodW5zaWduZWQpbGVuZ3RoCistICh2b2lkKWFkZFZpc2l0ZWRMaW5r
c1RvUGFnZUdyb3VwOihQYWdlR3JvdXAmKWdyb3VwCiB7Ci0gICAgY29uc3QgVW5pQ2hhciAqdW5p
Y29kZVN0ciA9IHVuaWNvZGU7Ci0gICAgVW5pQ2hhciBzdGF0aWNTdHJCdWZmZXJbVU5JQ09ERV9C
VUZGRVJfU0laRV07Ci0gICAgVW5pQ2hhciAqc3RyQnVmZmVyID0gTlVMTDsKLSAgICBCT09MIG5l
ZWRUb0FkZFNsYXNoID0gRkFMU0U7Ci0KLSAgICBpZiAobGVuZ3RoID49IDYgJiYKLSAgICAgICAg
bWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbMF0sICdoJykgJiYKLSAgICAgICAgbWF0Y2hVbmlj
b2RlTGV0dGVyKHVuaWNvZGVbMV0sICd0JykgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVy
KHVuaWNvZGVbMl0sICd0JykgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVb
M10sICdwJykgJiYKLSAgICAgICAgKHVuaWNvZGVbNF0gPT0gJzonIAotICAgICAgICAgfHwgKG1h
dGNoVW5pY29kZUxldHRlcih1bmljb2RlWzRdLCAncycpICYmIHVuaWNvZGVbNV0gPT0gJzonKSkp
IHsKLQotICAgICAgICB1bnNpZ25lZCBwb3MgPSB1bmljb2RlWzRdID09ICc6JyA/IDUgOiA2Owot
Ci0gICAgICAgIC8vIHNraXAgcG9zc2libGUgaW5pdGlhbCB0d28gc2xhc2hlcwotICAgICAgICBp
ZiAocG9zICsgMSA8IGxlbmd0aCAmJiB1bmljb2RlW3Bvc10gPT0gJy8nICYmIHVuaWNvZGVbcG9z
ICsgMV0gPT0gJy8nKSB7Ci0gICAgICAgICAgICBwb3MgKz0gMjsKLSAgICAgICAgfQotCi0gICAg
ICAgIHdoaWxlIChwb3MgPCBsZW5ndGggJiYgdW5pY29kZVtwb3NdICE9ICcvJykgewotICAgICAg
ICAgICAgcG9zKys7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocG9zID09IGxlbmd0aCkgewot
ICAgICAgICAgICAgbmVlZFRvQWRkU2xhc2ggPSBUUlVFOworICAgIE5TRW51bWVyYXRvciAqZW51
bWVyYXRvciA9IFtfZW50cmllc0J5VVJMIGtleUVudW1lcmF0b3JdOworICAgIHdoaWxlIChOU1N0
cmluZyAqdXJsID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pIHsKKyAgICAgICAgc2l6ZV90IGxl
bmd0aCA9IFt1cmwgbGVuZ3RoXTsKKyAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBD
RlN0cmluZ0dldENoYXJhY3RlcnNQdHIocmVpbnRlcnByZXRfY2FzdDxDRlN0cmluZ1JlZj4odXJs
KSk7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzKQorICAgICAgICAgICAgZ3JvdXAuYWRkVmlzaXRl
ZExpbmsoY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBW
ZWN0b3I8VUNoYXIsIDUxMj4gYnVmZmVyKGxlbmd0aCk7CisgICAgICAgICAgICBbdXJsIGdldENo
YXJhY3RlcnM6YnVmZmVyLmRhdGEoKV07CisgICAgICAgICAgICBncm91cC5hZGRWaXNpdGVkTGlu
ayhidWZmZXIuZGF0YSgpLCBsZW5ndGgpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgaWYgKG5l
ZWRUb0FkZFNsYXNoKSB7Ci0gICAgICAgIGlmIChsZW5ndGggKyAxIDw9IFVOSUNPREVfQlVGRkVS
X1NJWkUpIHsKLSAgICAgICAgICAgIHN0ckJ1ZmZlciA9IHN0YXRpY1N0ckJ1ZmZlcjsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0ckJ1ZmZlciA9IChVbmlDaGFyKiltYWxsb2Moc2l6
ZW9mKFVuaUNoYXIpICogKGxlbmd0aCArIDEpKTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHko
c3RyQnVmZmVyLCB1bmljb2RlLCAyICogbGVuZ3RoKTsKLSAgICAgICAgc3RyQnVmZmVyW2xlbmd0
aF0gPSAnLyc7Ci0gICAgICAgIGxlbmd0aCsrOwotCi0gICAgICAgIHVuaWNvZGVTdHIgPSBzdHJC
dWZmZXI7Ci0gICAgfQotCi0gICAgQ0ZTdHJpbmdSZWYgc3RyID0gQ0ZTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVyc05vQ29weShOVUxMLCB1bmljb2RlU3RyLCBsZW5ndGgsIGtDRkFsbG9jYXRvck51
bGwpOwotICAgIEJPT0wgcmVzdWx0ID0gW2hpc3RvcnkgY29udGFpbnNJdGVtRm9yVVJMU3RyaW5n
OihpZClzdHJdOwotICAgIENGUmVsZWFzZShzdHIpOwotCi0gICAgaWYgKHN0ckJ1ZmZlciAhPSBz
dGF0aWNTdHJCdWZmZXIpIHsKLSAgICAgICAgZnJlZShzdHJCdWZmZXIpOwotICAgIH0KLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtoaXN0b3J5IHJl
bGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAogQGVuZApAQCAtNjg1LDEzICs2MzIs
MTEgQEAgc3RhdGljIGlubGluZSBib29sIG1hdGNoVW5pY29kZUxldHRlcihVbgogICAgIHJldHVy
biBfc2hhcmVkSGlzdG9yeTsKIH0KIAotCi0rICh2b2lkKXNldE9wdGlvbmFsU2hhcmVkSGlzdG9y
eTogKFdlYkhpc3RvcnkgKiloaXN0b3J5CisrICh2b2lkKXNldE9wdGlvbmFsU2hhcmVkSGlzdG9y
eTooV2ViSGlzdG9yeSAqKWhpc3RvcnkKIHsKLSAgICAvLyBGSVhNRS4gIE5lZWQgdG8gdGhpbmsg
YWJvdXQgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIFdlYkhpc3RvcnkgcGVyIGFwcGxpY2F0aW9uCisg
ICAgLy8gRklYTUU6IE5lZWQgdG8gdGhpbmsgYWJvdXQgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIFdl
Ykhpc3RvcnkgcGVyIGFwcGxpY2F0aW9uCiAgICAgLy8gYW5kIGNvcnJlY3Qgc3luY2hyb25pemF0
aW9uIG9mIGhpc3RvcnkgZmlsZSBiZXR3ZWVuIGFwcGxpY2F0aW9ucy4KLSAgICBbV2ViQ29yZUhp
c3Rvcnkgc2V0SGlzdG9yeVByb3ZpZGVyOiBbW1tfV2ViQ29yZUhpc3RvcnlQcm92aWRlciBhbGxv
Y10gaW5pdFdpdGhIaXN0b3J5OiBoaXN0b3J5XSBhdXRvcmVsZWFzZV1dOwotICAgIGlmIChfc2hh
cmVkSGlzdG9yeSAhPSBoaXN0b3J5KXsKKyAgICBpZiAoX3NoYXJlZEhpc3RvcnkgIT0gaGlzdG9y
eSkgewogICAgICAgICBbX3NoYXJlZEhpc3RvcnkgcmVsZWFzZV07CiAgICAgICAgIF9zaGFyZWRI
aXN0b3J5ID0gW2hpc3RvcnkgcmV0YWluXTsKICAgICB9CkBAIC02OTksMTAgKzY0NCwxMCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hVbmljb2RlTGV0dGVyKFVuCiAKIC0gKGlkKWluaXQKIHsK
LSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pICE9IG5pbCkgewotICAgICAgICBfaGlzdG9y
eVByaXZhdGUgPSBbW1dlYkhpc3RvcnlQcml2YXRlIGFsbG9jXSBpbml0XTsKLSAgICB9Ci0KKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBfaGlzdG9yeVByaXZhdGUgPSBbW1dlYkhpc3RvcnlQcml2YXRlIGFsbG9jXSBpbml0
XTsKICAgICByZXR1cm4gc2VsZjsKIH0KIApAQCAtNzE4LDQwICs2NjMsMTQgQEAgc3RhdGljIGlu
bGluZSBib29sIG1hdGNoVW5pY29kZUxldHRlcihVbgogewogICAgIE5TRGljdGlvbmFyeSAqdXNl
ckluZm8gPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6ZW50cmll
cywgV2ViSGlzdG9yeUl0ZW1zS2V5LCBuaWxdOwogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0KLSAgICAgICAgcG9zdE5vdGlmaWNhdGlvbk5hbWU6IG5hbWUgb2JqZWN0
OiBzZWxmIHVzZXJJbmZvOiB1c2VySW5mb107Ci19Ci0KLS0gKFdlYkhpc3RvcnlJdGVtICopYWRk
SXRlbUZvclVSTDogKE5TVVJMICopVVJMCi17Ci0gICAgV2ViSGlzdG9yeUl0ZW0gKmVudHJ5ID0g
W1tXZWJIaXN0b3J5SXRlbSBhbGxvY10gaW5pdFdpdGhVUkw6VVJMIHRpdGxlOm5pbF07Ci0gICAg
W2VudHJ5IF9zZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDogW05TRGF0ZSB0aW1lSW50ZXJ2YWxT
aW5jZVJlZmVyZW5jZURhdGVdXTsKLSAgICBbc2VsZiBhZGRJdGVtOiBlbnRyeV07Ci0gICAgW2Vu
dHJ5IHJlbGVhc2VdOwotICAgIHJldHVybiBlbnRyeTsKLX0KLQotCi0tICh2b2lkKWFkZEl0ZW06
IChXZWJIaXN0b3J5SXRlbSAqKWVudHJ5Ci17Ci0gICAgTE9HIChIaXN0b3J5LCAiYWRkaW5nICVA
IiwgZW50cnkpOwotICAgIFtfaGlzdG9yeVByaXZhdGUgYWRkSXRlbTogZW50cnldOwotICAgIFtz
ZWxmIF9zZW5kTm90aWZpY2F0aW9uOiBXZWJIaXN0b3J5SXRlbXNBZGRlZE5vdGlmaWNhdGlvbgot
ICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6ZW50
cnldXTsKLX0KLQotLSAodm9pZClyZW1vdmVJdGVtOiAoV2ViSGlzdG9yeUl0ZW0gKillbnRyeQot
ewotICAgIGlmIChbX2hpc3RvcnlQcml2YXRlIHJlbW92ZUl0ZW06IGVudHJ5XSkgewotICAgICAg
ICBbc2VsZiBfc2VuZE5vdGlmaWNhdGlvbjogV2ViSGlzdG9yeUl0ZW1zUmVtb3ZlZE5vdGlmaWNh
dGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllczogW05TQXJyYXkgYXJyYXlXaXRo
T2JqZWN0OmVudHJ5XV07Ci0gICAgfQorICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTpuYW1l
IG9iamVjdDpzZWxmIHVzZXJJbmZvOnVzZXJJbmZvXTsKIH0KIAotLSAodm9pZClyZW1vdmVJdGVt
czogKE5TQXJyYXkgKillbnRyaWVzCistICh2b2lkKXJlbW92ZUl0ZW1zOihOU0FycmF5ICopZW50
cmllcwogewogICAgIGlmIChbX2hpc3RvcnlQcml2YXRlIHJlbW92ZUl0ZW1zOmVudHJpZXNdKSB7
Ci0gICAgICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOiBXZWJIaXN0b3J5SXRlbXNSZW1vdmVk
Tm90aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOiBlbnRyaWVzXTsK
KyAgICAgICAgW3NlbGYgX3NlbmROb3RpZmljYXRpb246V2ViSGlzdG9yeUl0ZW1zUmVtb3ZlZE5v
dGlmaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllczplbnRyaWVzXTsKICAg
ICB9CiB9CiAKQEAgLTc1OSwyMSArNjc4LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaFVu
aWNvZGVMZXR0ZXIoVW4KIHsKICAgICBpZiAoW19oaXN0b3J5UHJpdmF0ZSByZW1vdmVBbGxJdGVt
c10pIHsKICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXQotICAg
ICAgICAgICAgcG9zdE5vdGlmaWNhdGlvbk5hbWU6IFdlYkhpc3RvcnlBbGxJdGVtc1JlbW92ZWRO
b3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBzZWxmXTsKKyAg
ICAgICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1lOldlYkhpc3RvcnlBbGxJdGVtc1JlbW92ZWRO
b3RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OnNlbGZdOwogICAg
IH0KIH0KIAogLSAodm9pZClhZGRJdGVtczooTlNBcnJheSAqKW5ld0VudHJpZXMKIHsKICAgICBb
X2hpc3RvcnlQcml2YXRlIGFkZEl0ZW1zOm5ld0VudHJpZXNdOwotICAgIFtzZWxmIF9zZW5kTm90
aWZpY2F0aW9uOiBXZWJIaXN0b3J5SXRlbXNBZGRlZE5vdGlmaWNhdGlvbgotICAgICAgICAgICAg
ICAgICAgICBlbnRyaWVzOiBuZXdFbnRyaWVzXTsKLX0KLQotLSAodm9pZClzZXRMYXN0VmlzaXRl
ZFRpbWVJbnRlcnZhbDooTlNUaW1lSW50ZXJ2YWwpdGltZSBmb3JJdGVtOihXZWJIaXN0b3J5SXRl
bSAqKWVudHJ5Ci17Ci0gICAgW19oaXN0b3J5UHJpdmF0ZSBzZXRMYXN0VmlzaXRlZFRpbWVJbnRl
cnZhbDp0aW1lIGZvckl0ZW06ZW50cnldOworICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOldl
Ykhpc3RvcnlJdGVtc0FkZGVkTm90aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIGVudHJp
ZXM6bmV3RW50cmllc107CiB9CiAKICNwcmFnbWEgbWFyayBEQVRFLUJBU0VEIFJFVFJJRVZBTApA
QCAtNzgzLDIxICs2OTcsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1hdGNoVW5pY29kZUxldHRl
cihVbgogICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIG9yZGVyZWRMYXN0VmlzaXRlZERheXNd
OwogfQogCi0tIChOU0FycmF5ICopb3JkZXJlZEl0ZW1zTGFzdFZpc2l0ZWRPbkRheTogKE5TQ2Fs
ZW5kYXJEYXRlICopZGF0ZQorLSAoTlNBcnJheSAqKW9yZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25E
YXk6KE5TQ2FsZW5kYXJEYXRlICopZGF0ZQogewotICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRl
IG9yZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25EYXk6IGRhdGVdOworICAgIHJldHVybiBbX2hpc3Rv
cnlQcml2YXRlIG9yZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25EYXk6ZGF0ZV07CiB9CiAKICNwcmFn
bWEgbWFyayBVUkwgTUFUQ0hJTkcKIAotLSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6
IChOU1N0cmluZyAqKVVSTFN0cmluZworLSAoQk9PTCljb250YWluc1VSTDooTlNVUkwgKilVUkwK
IHsKLSAgICByZXR1cm4gW19oaXN0b3J5UHJpdmF0ZSBjb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6
IFVSTFN0cmluZ107Ci19Ci0KLS0gKEJPT0wpY29udGFpbnNVUkw6IChOU1VSTCAqKVVSTAotewot
ICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIGNvbnRhaW5zVVJMOiBVUkxdOworICAgIHJldHVy
biBbX2hpc3RvcnlQcml2YXRlIGNvbnRhaW5zVVJMOlVSTF07CiB9CiAKIC0gKFdlYkhpc3RvcnlJ
dGVtICopaXRlbUZvclVSTDooTlNVUkwgKilVUkwKQEAgLTgwOSw0MSArNzE4LDMxIEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBtYXRjaFVuaWNvZGVMZXR0ZXIoVW4KIAogLSAoQk9PTClsb2FkRnJvbVVS
TDooTlNVUkwgKilVUkwgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKIHsKLSAgICBOU011dGFibGVB
cnJheSAqZGlzY2FyZGVkSXRlbXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIAotICAg
IGlmIChbX2hpc3RvcnlQcml2YXRlIGxvYWRGcm9tVVJMOlVSTCBjb2xsZWN0RGlzY2FyZGVkSXRl
bXNJbnRvOmRpc2NhcmRlZEl0ZW1zIGVycm9yOmVycm9yXSkgewotICAgICAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdCi0gICAgICAgICAgICBwb3N0Tm90aWZpY2F0aW9u
TmFtZTpXZWJIaXN0b3J5TG9hZGVkTm90aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdDpzZWxmXTsKLSAgICAgICAgCi0gICAgICAgIGlmIChbZGlzY2FyZGVkSXRlbXMg
Y291bnRdID4gMCkKLSAgICAgICAgICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOldlYkhpc3Rv
cnlJdGVtc0Rpc2NhcmRlZFdoaWxlTG9hZGluZ05vdGlmaWNhdGlvbiBlbnRyaWVzOmRpc2NhcmRl
ZEl0ZW1zXTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBZRVM7CisgICAgTlNNdXRhYmxlQXJy
YXkgKmRpc2NhcmRlZEl0ZW1zID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07ICAgIAor
ICAgIGlmICghW19oaXN0b3J5UHJpdmF0ZSBsb2FkRnJvbVVSTDpVUkwgY29sbGVjdERpc2NhcmRl
ZEl0ZW1zSW50bzpkaXNjYXJkZWRJdGVtcyBlcnJvcjplcnJvcl0pIHsKKyAgICAgICAgW2Rpc2Nh
cmRlZEl0ZW1zIHJlbGVhc2VdOworICAgICAgICByZXR1cm4gTk87CiAgICAgfQotICAgIHJldHVy
biBOTzsKLX0KIAotLSAoQk9PTClzYXZlVG9VUkw6KE5TVVJMICopVVJMIGVycm9yOihOU0Vycm9y
ICoqKWVycm9yCi17Ci0gICAgLy8gRklYTUU6ICBVc2UgbmV3IGZvdW5kYXRpb24gQVBJIHRvIGdl
dCBlcnJvciB3aGVuIHJlYWR5LgotICAgIGlmKFtfaGlzdG9yeVByaXZhdGUgc2F2ZVRvVVJMOlVS
TCBlcnJvcjplcnJvcl0pewotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdCi0gICAgICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTogV2ViSGlzdG9yeVNhdmVk
Tm90aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDogc2VsZl07Ci0g
ICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotICAgIHJldHVybiBOTzsgICAgCi19CisgICAgW1tO
U05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXQorICAgICAgICBwb3N0Tm90aWZpY2F0
aW9uTmFtZTpXZWJIaXN0b3J5TG9hZGVkTm90aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0OnNlbGZdOwogCi0tIChXZWJIaXN0b3J5SXRlbSAqKV9pdGVtRm9yVVJMU3RyaW5n
OihOU1N0cmluZyAqKVVSTFN0cmluZwotewotICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIGl0
ZW1Gb3JVUkxTdHJpbmc6IFVSTFN0cmluZ107CisgICAgaWYgKFtkaXNjYXJkZWRJdGVtcyBjb3Vu
dF0pCisgICAgICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOldlYkhpc3RvcnlJdGVtc0Rpc2Nh
cmRlZFdoaWxlTG9hZGluZ05vdGlmaWNhdGlvbiBlbnRyaWVzOmRpc2NhcmRlZEl0ZW1zXTsKKwor
ICAgIFtkaXNjYXJkZWRJdGVtcyByZWxlYXNlXTsKKyAgICByZXR1cm4gWUVTOwogfQogCi0tIChO
U0NhbGVuZGFyRGF0ZSopYWdlTGltaXREYXRlCistIChCT09MKXNhdmVUb1VSTDooTlNVUkwgKilV
UkwgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKIHsKLSAgICByZXR1cm4gW19oaXN0b3J5UHJpdmF0
ZSBfYWdlTGltaXREYXRlXTsKKyAgICBpZiAoIVtfaGlzdG9yeVByaXZhdGUgc2F2ZVRvVVJMOlVS
TCBlcnJvcjplcnJvcl0pCisgICAgICAgIHJldHVybiBOTzsKKyAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdCisgICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1lOldlYkhp
c3RvcnlTYXZlZE5vdGlmaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDpzZWxm
XTsKKyAgICByZXR1cm4gWUVTOwogfQogCiAtICh2b2lkKXNldEhpc3RvcnlJdGVtTGltaXQ6KGlu
dClsaW1pdApAQCAtODY3LDMgKzc2Niw2OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hVbmlj
b2RlTGV0dGVyKFVuCiB9CiAKIEBlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkhpc3RvcnkgKFdl
YlByaXZhdGUpCisKKy0gKHZvaWQpYWRkSXRlbTooV2ViSGlzdG9yeUl0ZW0gKillbnRyeQorewor
ICAgIExPRyhIaXN0b3J5LCAiYWRkaW5nICVAIiwgZW50cnkpOworICAgIFtfaGlzdG9yeVByaXZh
dGUgYWRkSXRlbTplbnRyeV07CisgICAgW3NlbGYgX3NlbmROb3RpZmljYXRpb246V2ViSGlzdG9y
eUl0ZW1zQWRkZWROb3RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZW50cmllczpbTlNB
cnJheSBhcnJheVdpdGhPYmplY3Q6ZW50cnldXTsKK30KKworLSAoV2ViSGlzdG9yeUl0ZW0gKilh
ZGRJdGVtRm9yVVJMOihOU1VSTCAqKVVSTAoreworICAgIFdlYkhpc3RvcnlJdGVtICplbnRyeSA9
IFtbV2ViSGlzdG9yeUl0ZW0gYWxsb2NdIGluaXRXaXRoVVJMOlVSTCB0aXRsZTpuaWxdOworICAg
IFtlbnRyeSBfc2V0TGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6W05TRGF0ZSB0aW1lSW50ZXJ2YWxT
aW5jZVJlZmVyZW5jZURhdGVdXTsKKyAgICBbc2VsZiBhZGRJdGVtOmVudHJ5XTsKKyAgICBbZW50
cnkgcmVsZWFzZV07CisgICAgcmV0dXJuIGVudHJ5OworfQorCistIChOU0NhbGVuZGFyRGF0ZSAq
KWFnZUxpbWl0RGF0ZQoreworICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIGFnZUxpbWl0RGF0
ZV07Cit9CisKKy0gKEJPT0wpY29udGFpbnNJdGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVS
TFN0cmluZworeworICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIGNvbnRhaW5zSXRlbUZvclVS
TFN0cmluZzpVUkxTdHJpbmddOworfQorCistICh2b2lkKXJlbW92ZUl0ZW06KFdlYkhpc3RvcnlJ
dGVtICopZW50cnkKK3sKKyAgICBpZiAoW19oaXN0b3J5UHJpdmF0ZSByZW1vdmVJdGVtOmVudHJ5
XSkgeworICAgICAgICBbc2VsZiBfc2VuZE5vdGlmaWNhdGlvbjpXZWJIaXN0b3J5SXRlbXNSZW1v
dmVkTm90aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOltOU0FycmF5
IGFycmF5V2l0aE9iamVjdDplbnRyeV1dOworICAgIH0KK30KKworLSAodm9pZClzZXRMYXN0Vmlz
aXRlZFRpbWVJbnRlcnZhbDooTlNUaW1lSW50ZXJ2YWwpdGltZSBmb3JJdGVtOihXZWJIaXN0b3J5
SXRlbSAqKWVudHJ5Cit7CisgICAgW19oaXN0b3J5UHJpdmF0ZSBzZXRMYXN0VmlzaXRlZFRpbWVJ
bnRlcnZhbDp0aW1lIGZvckl0ZW06ZW50cnldOworfQorCistIChXZWJIaXN0b3J5SXRlbSAqKV9p
dGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmluZworeworICAgIHJldHVybiBbX2hp
c3RvcnlQcml2YXRlIGl0ZW1Gb3JVUkxTdHJpbmc6VVJMU3RyaW5nXTsKK30KKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gV2ViSGlzdG9yeSAoV2ViSW50ZXJuYWwpCisKKy0gKHZvaWQpX2FkZEl0
ZW1Gb3JVUkw6KE5TVVJMICopVVJMIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlCit7CisgICAgV2Vi
SGlzdG9yeUl0ZW0gKmVudHJ5ID0gW1tXZWJIaXN0b3J5SXRlbSBhbGxvY10gaW5pdFdpdGhVUkw6
VVJMIHRpdGxlOnRpdGxlXTsKKyAgICBbZW50cnkgX3NldExhc3RWaXNpdGVkVGltZUludGVydmFs
OltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXV07CisgICAgW3NlbGYgYWRk
SXRlbTplbnRyeV07CisgICAgW2VudHJ5IHJlbGVhc2VdOworfQorCistICh2b2lkKV9hZGRWaXNp
dGVkTGlua3NUb1BhZ2VHcm91cDooV2ViQ29yZTo6UGFnZUdyb3VwJilncm91cAoreworICAgIFtf
aGlzdG9yeVByaXZhdGUgYWRkVmlzaXRlZExpbmtzVG9QYWdlR3JvdXA6Z3JvdXBdOworfQorCitA
ZW5kCkluZGV4OiBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUludGVybmFsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJbnRlcm5hbC5oCShyZXZpc2lv
biAwKQorKysgV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJbnRlcm5hbC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJXZWJIaXN0b3J5UHJpdmF0ZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgUGFnZUdyb3VwOworfQorCitAaW50ZXJm
YWNlIFdlYkhpc3RvcnkgKFdlYkludGVybmFsKQorLSAodm9pZClfYWRkSXRlbUZvclVSTDooTlNV
UkwgKilVUkwgdGl0bGU6KE5TU3RyaW5nICopdGl0bGU7CistICh2b2lkKV9hZGRWaXNpdGVkTGlu
a3NUb1BhZ2VHcm91cDooV2ViQ29yZTo6UGFnZUdyb3VwJilncm91cDsKK0BlbmQKClByb3BlcnR5
IGNoYW5nZXMgb246IFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SW50ZXJuYWwuaApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJLaXQvbWFj
L0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW1JbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbUludGVybmFsLmgJKHJldmlzaW9uIDMwNzk0KQorKysg
V2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiwxMSArMjYsOSBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0
IDxDb2NvYS9Db2NvYS5oPgorI2ltcG9ydCAiV2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmgiCiAKLSNp
bXBvcnQgPFdlYktpdC9XZWJCYWNrRm9yd2FyZExpc3QuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJI
aXN0b3J5SXRlbS5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IEhpc3RvcnlJdGVtOwpAQCAtNTYsOCArNTQsNiBAQCBleHRlcm4gdm9pZCBXS05vdGlmeUhpc3Rv
cnlJdGVtQ2hhbmdlZCgpCiAKIEBlbmQKIAotQGludGVyZmFjZSBXZWJCYWNrRm9yd2FyZExpc3Qg
KFdlYlByaXZhdGUpCitAaW50ZXJmYWNlIFdlYkJhY2tGb3J3YXJkTGlzdCAoV2ViSW50ZXJuYWwp
CiAtICh2b2lkKV9jbG9zZTsKIEBlbmQKLQotCkluZGV4OiBXZWJLaXQvbWFjL0hpc3RvcnkvV2Vi
SGlzdG9yeVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlz
dG9yeVByaXZhdGUuaAkocmV2aXNpb24gMzA3OTQpCisrKyBXZWJLaXQvbWFjL0hpc3RvcnkvV2Vi
SGlzdG9yeVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw4OCArMjYsMjcg
QEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
Ci0KICNpbXBvcnQgPFdlYktpdC9XZWJIaXN0b3J5Lmg+CiAKLUBjbGFzcyBXZWJIaXN0b3J5SXRl
bTsKLUBjbGFzcyBOU0Vycm9yOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotdHlwZWRlZiBpbnQ2NF90
IFdlYkhpc3RvcnlEYXRlS2V5OwotdHlwZWRlZiBIYXNoTWFwPFdlYkhpc3RvcnlEYXRlS2V5LCBS
ZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+ID4gRGF0ZVRvRW50cmllc01hcDsKLSNlbHNlCi10eXBl
ZGVmIHN0cnVjdCBEYXRlVG9FbnRyaWVzTWFwIERhdGVUb0VudHJpZXNNYXA7Ci0jZW5kaWYKLQog
LyoKICAgICBAY29uc3RhbnQgV2ViSGlzdG9yeUl0ZW1zRGlzY2FyZGVkV2hpbGVMb2FkaW5nTm90
aWZpY2F0aW9uIFBvc3RlZCBmcm9tIGxvYWRGcm9tVVJMOmVycm9yOi4gIAogICAgIFRoaXMgbm90
aWZpY2F0aW9uIGNvbWVzIHdpdGggYSB1c2VySW5mbyBkaWN0aW9uYXJ5IHRoYXQgY29udGFpbnMg
dGhlIGFycmF5IG9mCi0gICAgaXRlbXMgZGlzY2FyZGVkIGR1ZSB0byB0aGUgZGF0ZSBsaW1pdCBv
ciBpdGVtIGxpbWl0LiAgVGhlIGtleSBmb3IgdGhlIGFycmF5IGlzIFdlYkhpc3RvcnlJdGVtc0tl
eS4KKyAgICBpdGVtcyBkaXNjYXJkZWQgZHVlIHRvIHRoZSBkYXRlIGxpbWl0IG9yIGl0ZW0gbGlt
aXQuIFRoZSBrZXkgZm9yIHRoZSBhcnJheSBpcyBXZWJIaXN0b3J5SXRlbXNLZXkuCiAqLwotLy8g
RklYTUU6IFRoaXMgbm90aWZpY2F0aW9uIHNob3VsZCBiZWNvbWUgQVBJIGluIFdlYkhpc3Rvcnku
aAorLy8gRklYTUU6IFRoaXMgbm90aWZpY2F0aW9uIHNob3VsZCBiZWNvbWUgcHVibGljIEFQSS4K
IGV4dGVybiBOU1N0cmluZyAqV2ViSGlzdG9yeUl0ZW1zRGlzY2FyZGVkV2hpbGVMb2FkaW5nTm90
aWZpY2F0aW9uOwogCi0vLyBGSVhNRTogVGhlIFdlYkhpc3RvcnlQcml2YXRlIGludGVyZmFjZSBz
aG91bGQgYmUgaW4gV2ViSGlzdG9yeUludGVybmFsLmggb3IgaW5zaWRlIFdlYkhpc3RvcnkubQot
QGludGVyZmFjZSBXZWJIaXN0b3J5UHJpdmF0ZSA6IE5TT2JqZWN0IHsKLUBwcml2YXRlCi0gICAg
TlNNdXRhYmxlRGljdGlvbmFyeSAqX2VudHJpZXNCeVVSTDsKLSAgICBEYXRlVG9FbnRyaWVzTWFw
KiBfZW50cmllc0J5RGF0ZTsKLSAgICBOU011dGFibGVBcnJheSAqX29yZGVyZWRMYXN0VmlzaXRl
ZERheXM7Ci0gICAgQk9PTCBpdGVtTGltaXRTZXQ7Ci0gICAgaW50IGl0ZW1MaW1pdDsKLSAgICBC
T09MIGFnZUluRGF5c0xpbWl0U2V0OwotICAgIGludCBhZ2VJbkRheXNMaW1pdDsKLX0KLQotLSAo
dm9pZClhZGRJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5OwotLSAodm9pZClhZGRJdGVtczoo
TlNBcnJheSAqKW5ld0VudHJpZXM7Ci0tIChCT09MKXJlbW92ZUl0ZW06KFdlYkhpc3RvcnlJdGVt
ICopZW50cnk7Ci0tIChCT09MKXJlbW92ZUl0ZW1zOihOU0FycmF5ICopZW50cmllczsKLS0gKEJP
T0wpcmVtb3ZlQWxsSXRlbXM7Ci0tICh2b2lkKXNldExhc3RWaXNpdGVkVGltZUludGVydmFsOihO
U1RpbWVJbnRlcnZhbCl0aW1lIGZvckl0ZW06KFdlYkhpc3RvcnlJdGVtICopaXRlbTsKLQotLSAo
TlNBcnJheSAqKW9yZGVyZWRMYXN0VmlzaXRlZERheXM7Ci0tIChOU0FycmF5ICopb3JkZXJlZEl0
ZW1zTGFzdFZpc2l0ZWRPbkRheTooTlNDYWxlbmRhckRhdGUgKiljYWxlbmRhckRhdGU7Ci0tIChC
T09MKWNvbnRhaW5zSXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmc7Ci0tIChC
T09MKWNvbnRhaW5zVVJMOihOU1VSTCAqKVVSTDsKLS0gKFdlYkhpc3RvcnlJdGVtICopaXRlbUZv
clVSTDooTlNVUkwgKilVUkw7Ci0tIChXZWJIaXN0b3J5SXRlbSAqKWl0ZW1Gb3JVUkxTdHJpbmc6
KE5TU3RyaW5nICopVVJMU3RyaW5nOwotCi0tIChCT09MKWxvYWRGcm9tVVJMOihOU1VSTCAqKVVS
TCBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJbnRvOihOU011dGFibGVBcnJheSAqKWRpc2NhcmRlZEl0
ZW1zIGVycm9yOihOU0Vycm9yICoqKWVycm9yOwotLSAoQk9PTClzYXZlVG9VUkw6KE5TVVJMICop
VVJMIGVycm9yOihOU0Vycm9yICoqKWVycm9yOwotCi0tIChOU0NhbGVuZGFyRGF0ZSopX2FnZUxp
bWl0RGF0ZTsKLQotLSAodm9pZClzZXRIaXN0b3J5SXRlbUxpbWl0OihpbnQpbGltaXQ7Ci0tIChp
bnQpaGlzdG9yeUl0ZW1MaW1pdDsKLS0gKHZvaWQpc2V0SGlzdG9yeUFnZUluRGF5c0xpbWl0Oihp
bnQpbGltaXQ7Ci0tIChpbnQpaGlzdG9yeUFnZUluRGF5c0xpbWl0OwotCi1AZW5kCi0KIEBpbnRl
cmZhY2UgV2ViSGlzdG9yeSAoV2ViUHJpdmF0ZSkKIAogLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcg
U1BJIGlzIHVzZWQgYnkgU2FmYXJpLiBTaG91bGQgaXQgYmUgbWFkZSBpbnRvIHB1YmxpYyBBUEk/
CiAtIChXZWJIaXN0b3J5SXRlbSAqKV9pdGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0
cmluZzsKIAotLy8gRklYTUU6IFNhZmFyaSBkb2Vzbid0IHVzZSB0aGUgZm9sbG93aW5nIFNQSSwg
YW5kIGl0J3MgdXNlZCBpbiBXZWJLaXQgb25seSBpbnNpZGUgV2ViSGlzdG9yeS5tLgotLy8gU2hv
dWxkIHdlIG1vdmUgaXQgaW50byBhIEZpbGVJbnRlcm5hbCBjYXRlZ29yeSBpbnNpZGUgV2ViSGlz
dG9yeS5tLCBvciBkbyB3ZSBuZWVkIGl0IGZvciBvdGhlcgotLy8gY2xpZW50cz8KLS0gKHZvaWQp
cmVtb3ZlSXRlbTooV2ViSGlzdG9yeUl0ZW0gKillbnRyeTsKKy8vIEZJWE1FOiBuZWl0aGVyIFNh
ZmFyaSBub3IgV2ViS2l0IHVzZSB0aGUgZm9sbG93aW5nIFNQSSAtLSBkbyB3ZSBzdGlsbCBuZWVk
IHRoZW0/CiAtICh2b2lkKWFkZEl0ZW06KFdlYkhpc3RvcnlJdGVtICopZW50cnk7Ci0tIChCT09M
KWNvbnRhaW5zSXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmc7Ci0KLS8vIEZJ
WE1FOiBTYWZhcmkgZG9lc24ndCB1c2UgdGhlIGZvbGxvd2luZyBTUEksIGJ1dCBvdGhlciBXZWJL
aXQgY2xhc3NlcyBkby4gU2hvdWxkIHdlIG1vdmUgaXQgaW50bwotLy8gYSBXZWJIaXN0b3J5SW50
ZXJuYWwuaCwgb3IgZG8gd2UgbmVlZCBpdCBmb3Igb3RoZXIgY2xpZW50cz8KIC0gKFdlYkhpc3Rv
cnlJdGVtICopYWRkSXRlbUZvclVSTDooTlNVUkwgKilVUkw7Ci0vLyBDaGFuZ2UgZGF0ZSBvbiBl
eGlzdGluZyBpdGVtCistIChOU0NhbGVuZGFyRGF0ZSAqKWFnZUxpbWl0RGF0ZTsKKy0gKEJPT0wp
Y29udGFpbnNJdGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmluZzsKKy0gKHZvaWQp
cmVtb3ZlSXRlbTooV2ViSGlzdG9yeUl0ZW0gKillbnRyeTsKIC0gKHZvaWQpc2V0TGFzdFZpc2l0
ZWRUaW1lSW50ZXJ2YWw6KE5TVGltZUludGVydmFsKXRpbWUgZm9ySXRlbTooV2ViSGlzdG9yeUl0
ZW0gKilpdGVtOwogCi0vLyBGSVhNRTogbmVpdGhlciBTYWZhcmkgbm9yIFdlYktpdCB1c2UgdGhl
IGZvbGxvd2luZyBTUEkgLS0gZG8gd2Ugc3RpbGwgbmVlZCBpdD8KLS0gKE5TQ2FsZW5kYXJEYXRl
KilhZ2VMaW1pdERhdGU7Ci0KIEBlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMzA3OTQpCisrKyBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAy
LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShX
ZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgZGF0YWJhc2VOYW1lKTsKIAor
ICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpOworCiAgICAgdmlydHVhbCB2
b2lkIGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCk7CiAKIHByaXZhdGU6CkluZGV4OiBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNpb24gMzA3OTQp
CisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogI2ltcG9ydCAiV2ViRnJhbWVWaWV3LmgiCiAjaW1w
b3J0ICJXZWJIVE1MVmlldy5oIgogI2ltcG9ydCAiV2ViSFRNTFZpZXdQcml2YXRlLmgiCisjaW1w
b3J0ICJXZWJIaXN0b3J5SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFj
ZS5oIgogI2ltcG9ydCAiV2ViTlNVUkxSZXF1ZXN0RXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJTZWN1
cml0eU9yaWdpblByaXZhdGUuaCIKICNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwu
aCIKICNpbXBvcnQgIldlYlVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYlVJRGVsZWdhdGVQcml2
YXRlLmgiCkBAIC00OSw2ICs0OSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZFJlcXVl
c3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9JbnRSZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UGxhdGZvcm1TY3JlZW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJpbmcuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CkBAIC00MjUsNiArNDI2LDExIEBAIHZv
aWQgV2ViQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXUKICAgICAgICAgQ2FsbFVJRGVs
ZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpmcmFtZTpleGNlZWRlZERhdGFiYXNl
UXVvdGFGb3JTZWN1cml0eU9yaWdpbjpkYXRhYmFzZTopLCBraXQoZnJhbWUpLCB3ZWJPcmlnaW4s
IChOU1N0cmluZyAqKWRhdGFiYXNlTmFtZSk7CiAgICAgW3dlYk9yaWdpbiByZWxlYXNlXTsKIH0K
KyAgICAKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpCit7Cisg
ICAgW1tXZWJIaXN0b3J5IG9wdGlvbmFsU2hhcmVkSGlzdG9yeV0gX2FkZFZpc2l0ZWRMaW5rc1Rv
UGFnZUdyb3VwOlttX3dlYlZpZXcgcGFnZV0tPmdyb3VwKCldOworfQogCiB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKQogewpJbmRleDogV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAz
MDc5NCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDcgQEAKICNpbXBvcnQgIldlYkhUTUxSZXBy
ZXNlbnRhdGlvblByaXZhdGUuaCIKICNpbXBvcnQgIldlYkhUTUxWaWV3SW50ZXJuYWwuaCIKICNp
bXBvcnQgIldlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkhpc3RvcnlJdGVt
UHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViSGlzdG9yeVByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkhp
c3RvcnlJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViSWNvbkRhdGFiYXNlSW50ZXJuYWwuaCIKICNp
bXBvcnQgIldlYktpdEVycm9yc1ByaXZhdGUuaCIKICNpbXBvcnQgIldlYktpdExvZ2dpbmcuaCIK
QEAgLTcyMywxMCArNzIyLDggQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZmluYWxTZXR1
cEZvcgogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9yeShjb25z
dCBLVVJMJiB1cmwpCiB7CiAgICAgTlNVUkwgKmNvY29hVVJMID0gdXJsOwotICAgIFdlYkhpc3Rv
cnlJdGVtICplbnRyeSA9IFtbV2ViSGlzdG9yeSBvcHRpb25hbFNoYXJlZEhpc3RvcnldIGFkZEl0
ZW1Gb3JVUkw6Y29jb2FVUkxdOwogICAgIGNvbnN0IFN0cmluZyYgcGFnZVRpdGxlID0gY29yZSht
X3dlYkZyYW1lLmdldCgpKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCk7Ci0g
ICAgaWYgKCFwYWdlVGl0bGUuaXNFbXB0eSgpKQotICAgICAgICBbZW50cnkgc2V0VGl0bGU6cGFn
ZVRpdGxlXTsKKyAgICBbW1dlYkhpc3Rvcnkgb3B0aW9uYWxTaGFyZWRIaXN0b3J5XSBfYWRkSXRl
bUZvclVSTDpjb2NvYVVSTCB0aXRsZTpwYWdlVGl0bGVdOwogfQogIAogYm9vbCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6c2hvdWxkR29Ub0hpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKSBjb25z
dApJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDMwNzk0KQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAwOC0wMy0wNSAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgLSBmaXggaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjYK
KyAgICAgICAgICBSRUdSRVNTSU9OOiBpZnJhbWVzIGFyZSBhZGRlZCB0byBTYWZhcmkncyBIaXN0
b3J5IG1lbnUKKyAgICAgICAgICBieSBzZXBhcmF0aW5nIHRoZSB2aXNpdGVkIGxpbmsgbWFjaGlu
ZXJ5IGZyb20gZ2xvYmFsIGhpc3RvcnkKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnBvcHVsYXRlVmlzaXRl
ZExpbmtzKTogQWRkZWQgYSBjYWxsIHRvIHRoZSBuZXcKKyAgICAgICAgV2ViSGlzdG9yeTo6YWRk
VmlzaXRlZExpbmtzVG9QYWdlR3JvdXAgZnVuY3Rpb24uCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50Lmg6IEFkZGVkIHBvcHVsYXRlVmlzaXRlZExpbmtzLgorICAgICAg
ICBBbHNvIGZpeGVkIHRoZSB3ZWJWaWV3IGZ1bmN0aW9uIHRvIGJlIG5vbi12aXJ0dWFsLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAg
ICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnkpOiBDaGFuZ2VkIHRv
IHVzZSB0aGUKKyAgICAgICAgbmV3IFdlYkhpc3Rvcnk6OmFkZEl0ZW0gZnVuY3Rpb24uCisgICAg
ICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6d2ViSGlzdG9yeSk6IENoYW5nZWQgdG8gcmV0dXJu
IGEgV2ViSGlzdG9yeSosCisgICAgICAgIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIEFkZFJlZiB0aGUg
cmVzdWx0IGZyb20gdGhpcyBmdW5jdGlvbi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5oOiBEaXR0by4KKworICAgICAgICAqIFdlYkhpc3RvcnkuY3BwOiBS
ZW1vdmVkIElXZWJIaXN0b3J5UHJpdmF0ZSBhbmQgX1dlYkNvcmVIaXN0b3J5UHJvdmlkZXIuCisg
ICAgICAgIChXZWJIaXN0b3J5OjpRdWVyeUludGVyZmFjZSk6IFJlbW92ZWQgSVdlYkhpc3RvcnlQ
cml2YXRlLgorICAgICAgICAoc2hhcmVkSGlzdG9yeVN0b3JhZ2UpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkhpc3Rvcnk6OnNoYXJlZEhpc3RvcnkpOiBBZGRlZC4KKyAgICAgICAgKFdlYkhpc3Rvcnk6
Om9wdGlvbmFsU2hhcmVkSGlzdG9yeSk6IENoYW5nZWQgdG8gdXNlIHNoYXJlZEhpc3RvcnkoKS4K
KyAgICAgICAgKFdlYkhpc3Rvcnk6OnNldE9wdGlvbmFsU2hhcmVkSGlzdG9yeSk6IENoYW5nZWQg
dG8gcmVxdWlyZSBhIFdlYkhpc3RvcnkKKyAgICAgICAgb2JqZWN0LCBub3QganVzdCBhbiBJV2Vi
SGlzdG9yeS4KKyAgICAgICAgKFdlYkhpc3Rvcnk6OnJlbW92ZUFsbEl0ZW1zKTogQ2FsbCBQYWdl
R3JvdXA6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcy4KKyAgICAgICAgKFdlYkhpc3Rvcnk6OmFkZEl0
ZW0pOiBDaGFuZ2VkIHBhcmFtZXRlciB0eXBlcyBzaW5jZSB0aGlzIGlzIGNhbGxlZCB3aXRoCisg
ICAgICAgIGFyZ3VtZW50cyBmcm9tIFdlYkNvcmUgLS0gYXQgc29tZSBwb2ludCB0aGlzIGNvdWxk
IGFsbG93IGJldHRlciBlZmZpY2llbmN5LgorICAgICAgICAoV2ViSGlzdG9yeTo6cmVtb3ZlSXRl
bUZvclVSTFN0cmluZyk6ICBDYWxsIFBhZ2VHcm91cDo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzCisg
ICAgICAgIGlmIHRoZSBsYXN0IFVSTCBpcyBiZWluZyByZW1vdmVkLgorICAgICAgICAoYWRkVmlz
aXRlZExpbmtUb1BhZ2VHcm91cCk6IEFkZGVkLiBIZWxwZXIuIEFkZHMgYSBzaW5nbGUgbGluayB0
byBhIGdyb3VwJ3MKKyAgICAgICAgdmlzaXRlZCBsaW5rIHNldC4KKyAgICAgICAgKFdlYkhpc3Rv
cnk6OmFkZFZpc2l0ZWRMaW5rc1RvUGFnZUdyb3VwKTogQWRkZWQuIEFkZHMgYWxsIGxpbmtzIHRv
IGEgZ3JvdXAncworICAgICAgICB2aXNpdGVkIGxpbmsuCisgICAgICAgICogV2ViSGlzdG9yeS5o
OiBSZW1vdmVkIElXZWJIaXN0b3J5UHJpdmF0ZS4gUmVtb3ZlZCBvcHRpb25hbFNoYXJlZEhpc3Rv
cnlJbnRlcm5hbAorICAgICAgICBhbmQgYWRkZWQgc2hhcmVkSGlzdG9yeS4gUmVwbGFjZWQgYWRk
SXRlbUZvclVSTCBhbmQgY29udGFpbnNJdGVtRm9yVVJMU3RyaW5nIHdpdGgKKyAgICAgICAgbm9u
LXZpcnR1YWwgYWRkSXRlbSBhbmQgYWRkVmlzaXRlZExpbmtzVG9QYWdlR3JvdXAgZnVuY3Rpb25z
LgorCiAyMDA4LTAzLTA0ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTWFyayBSb3dlLgpJbmRleDogV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkhpc3RvcnkuY3BwCShyZXZpc2lvbiAzMDc5NCkK
KysrIFdlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDMwICsz
NSwxOSBAQAogI2luY2x1ZGUgIldlYk5vdGlmaWNhdGlvbkNlbnRlci5oIgogI2luY2x1ZGUgIldl
YlByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24u
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVIaXN0b3J5Lmg+CiAjcHJhZ21hIHdhcm5pbmco
IHB1c2gsIDAgKQogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0tV
UkwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VHcm91cC5oPgogI3ByYWdtYSB3YXJuaW5nKCBw
b3AgKQogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogQ0ZTdHJpbmdSZWYgRGF0ZXNBcnJh
eUtleSA9IENGU1RSKCJXZWJIaXN0b3J5RGF0ZXMiKTsKIENGU3RyaW5nUmVmIEZpbGVWZXJzaW9u
S2V5ID0gQ0ZTVFIoIldlYkhpc3RvcnlGaWxlVmVyc2lvbiIpOwogCi1jb25zdCBJSUQgSUlEX0lX
ZWJIaXN0b3J5UHJpdmF0ZSA9IHsgMHgzZGUwNGU1OSwgMHg5M2Y5LCAweDQzNjksIHsgMHg4Yiwg
MHg0MywgMHg5NywgMHg2NCwgMHg1OCwgMHhkNywgMHhlMywgMHgxOSB9IH07Ci0KICNkZWZpbmUg
Y3VycmVudEZpbGVWZXJzaW9uIDEKIAotY2xhc3MgX1dlYkNvcmVIaXN0b3J5UHJvdmlkZXIgOiBw
dWJsaWMgV2ViQ29yZTo6V2ViQ29yZUhpc3RvcnlQcm92aWRlciB7Ci1wdWJsaWM6Ci0gICAgX1dl
YkNvcmVIaXN0b3J5UHJvdmlkZXIoSVdlYkhpc3RvcnkqIGhpc3RvcnkpOwotICAgIH5fV2ViQ29y
ZUhpc3RvcnlQcm92aWRlcigpOwotCi0gICAgdmlydHVhbCBib29sIGNvbnRhaW5zVVJMKGNvbnN0
IFVDaGFyKiB1bmljb2RlLCB1bnNpZ25lZCBsZW5ndGgpOwotCi1wcml2YXRlOgotICAgIElXZWJI
aXN0b3J5KiBtX2hpc3Rvcnk7Ci0gICAgSVdlYkhpc3RvcnlQcml2YXRlKiBtX2hpc3RvcnlQcml2
YXRlOwotfTsKLQogc3RhdGljIGJvb2wgYXJlRXF1YWxPckNsb3NlKGRvdWJsZSBkMSwgZG91Ymxl
IGQyKQogewogICAgIGRvdWJsZSBkaWZmID0gZDEtZDI7CkBAIC05Nyw4ICs4Niw2IEBAIHN0YXRp
YyB2b2lkIHJlbGVhc2VVc2VySW5mbyhDRkRpY3Rpb25hcnkKIAogLy8gV2ViSGlzdG9yeSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1JV2ViSGlzdG9yeSogV2ViSGlzdG9yeTo6bV9vcHRpb25hbFNoYXJlZEhpc3Rvcnkg
PSAwOwotCiBXZWJIaXN0b3J5OjpXZWJIaXN0b3J5KCkKIDogbV9yZWZDb3VudCgwKQogLCBtX3By
ZWZlcmVuY2VzKDApCkBAIC0xNTksOCArMTQ2LDYgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBXZWJIaXN0b3J5OjpRdQogICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYkhp
c3RvcnkqPih0aGlzKTsKICAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSVdlYkhp
c3RvcnkpKQogICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYkhpc3RvcnkqPih0
aGlzKTsKLSAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSVdlYkhpc3RvcnlQcml2
YXRlKSkKLSAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElXZWJIaXN0b3J5UHJpdmF0
ZSo+KHRoaXMpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7CiAKQEAg
LTE4NCwzMiArMTY5LDMwIEBAIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFdlYkhpc3Rvcnk6OlJl
bGUKIAogLy8gSVdlYkhpc3RvcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitzdGF0aWMgaW5saW5lIENPTVB0cjxXZWJI
aXN0b3J5PiYgc2hhcmVkSGlzdG9yeVN0b3JhZ2UoKQoreworICAgIHN0YXRpYyBDT01QdHI8V2Vi
SGlzdG9yeT4gc2hhcmVkSGlzdG9yeTsKKyAgICByZXR1cm4gc2hhcmVkSGlzdG9yeTsKK30KKwor
V2ViSGlzdG9yeSogV2ViSGlzdG9yeTo6c2hhcmVkSGlzdG9yeSgpCit7CisgICAgcmV0dXJuIHNo
YXJlZEhpc3RvcnlTdG9yYWdlKCkuZ2V0KCk7Cit9CisKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgV2ViSGlzdG9yeTo6b3B0aW9uYWxTaGFyZWRIaXN0b3J5KCAKICAgICAvKiBbcmV0dmFsXVtv
dXRdICovIElXZWJIaXN0b3J5KiogaGlzdG9yeSkKIHsKLSAgICAqaGlzdG9yeSA9IG1fb3B0aW9u
YWxTaGFyZWRIaXN0b3J5OwotICAgIGlmIChtX29wdGlvbmFsU2hhcmVkSGlzdG9yeSkKLSAgICAg
ICAgbV9vcHRpb25hbFNoYXJlZEhpc3RvcnktPkFkZFJlZigpOwotCisgICAgKmhpc3RvcnkgPSBz
aGFyZWRIaXN0b3J5KCk7CisgICAgaWYgKCpoaXN0b3J5KQorICAgICAgICAoKmhpc3RvcnkpLT5B
ZGRSZWYoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBXZWJIaXN0b3J5OjpzZXRPcHRpb25hbFNoYXJlZEhpc3RvcnkoIAogICAgIC8qIFtpbl0gKi8g
SVdlYkhpc3RvcnkqIGhpc3RvcnkpCiB7Ci0gICAgaWYgKG1fb3B0aW9uYWxTaGFyZWRIaXN0b3J5
KSB7Ci0gICAgICAgIG1fb3B0aW9uYWxTaGFyZWRIaXN0b3J5LT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1fb3B0aW9uYWxTaGFyZWRIaXN0b3J5ID0gMDsgICAgICAgIAotICAgIH0KLQotICAgIF9XZWJD
b3JlSGlzdG9yeVByb3ZpZGVyKiBjb3JlSGlzdG9yeSA9IDA7Ci0gICAgbV9vcHRpb25hbFNoYXJl
ZEhpc3RvcnkgPSBoaXN0b3J5OwotICAgIGlmIChoaXN0b3J5KSB7Ci0gICAgICAgIGhpc3Rvcnkt
PkFkZFJlZigpOwotICAgICAgICBjb3JlSGlzdG9yeSA9IG5ldyBfV2ViQ29yZUhpc3RvcnlQcm92
aWRlcihoaXN0b3J5KTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6V2ViQ29yZUhpc3Rvcnk6OnNldEhp
c3RvcnlQcm92aWRlcihjb3JlSGlzdG9yeSk7Ci0KKyAgICBzaGFyZWRIaXN0b3J5U3RvcmFnZSgp
LnF1ZXJ5KGhpc3RvcnkpOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC00NjcsNiArNDUwLDgg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJIaXN0b3J5OjpyZQogICAgIENGQXJyYXlS
ZW1vdmVBbGxWYWx1ZXMobV9kYXRlc1dpdGhFbnRyaWVzLmdldCgpKTsKICAgICBDRkRpY3Rpb25h
cnlSZW1vdmVBbGxWYWx1ZXMobV9lbnRyaWVzQnlVUkwuZ2V0KCkpOwogCisgICAgUGFnZUdyb3Vw
OjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsKKwogICAgIHJldHVybiBwb3N0Tm90aWZpY2F0aW9u
KGtXZWJIaXN0b3J5QWxsSXRlbXNSZW1vdmVkTm90aWZpY2F0aW9uKTsKIH0KIApAQCAtNjQ2LDI3
ICs2MzEsMjcgQEAgSFJFU1VMVCBXZWJIaXN0b3J5OjphZGRJdGVtKElXZWJIaXN0b3J5SQogICAg
IHJldHVybiBocjsKIH0KIAotSFJFU1VMVCBXZWJIaXN0b3J5OjphZGRJdGVtRm9yVVJMKEJTVFIg
dXJsLCBCU1RSIHRpdGxlKQordm9pZCBXZWJIaXN0b3J5OjphZGRJdGVtKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKICAgICBDT01QdHI8V2ViSGlzdG9yeUl0ZW0+IGl0
ZW0oQWRvcHRDT00sIFdlYkhpc3RvcnlJdGVtOjpjcmVhdGVJbnN0YW5jZSgpKTsKICAgICBpZiAo
IWl0ZW0pCi0gICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAgICAgIHJldHVybjsKIAogICAgIFNZ
U1RFTVRJTUUgY3VycmVudFRpbWU7CiAgICAgR2V0U3lzdGVtVGltZSgmY3VycmVudFRpbWUpOwog
ICAgIERBVEUgbGFzdFZpc2l0ZWQ7CiAgICAgaWYgKCFTeXN0ZW1UaW1lVG9WYXJpYW50VGltZSgm
Y3VycmVudFRpbWUsICZsYXN0VmlzaXRlZCkpCi0gICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAg
ICAgIHJldHVybjsKIAotICAgIEhSRVNVTFQgaHIgPSBpdGVtLT5pbml0V2l0aFVSTFN0cmluZyh1
cmwsIHRpdGxlLCAwKTsKKyAgICBIUkVTVUxUIGhyID0gaXRlbS0+aW5pdFdpdGhVUkxTdHJpbmco
QlN0cmluZyh1cmwuc3RyaW5nKCkpLCBCU3RyaW5nKHRpdGxlKSwgMCk7CiAgICAgaWYgKEZBSUxF
RChocikpCi0gICAgICAgIHJldHVybiBocjsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaHIgPSBp
dGVtLT5zZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbChsYXN0VmlzaXRlZCk7IC8vIGFsc28gaW5j
cmVtZW50cyB2aXNpdGVkQ291bnQKICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJu
IGhyOworICAgICAgICByZXR1cm47CiAKLSAgICByZXR1cm4gYWRkSXRlbShpdGVtLmdldCgpKTsK
KyAgICBhZGRJdGVtKGl0ZW0uZ2V0KCkpOwogfQogCiBIUkVTVUxUIFdlYkhpc3Rvcnk6Oml0ZW1G
b3JVUkxTdHJpbmcoCkBAIC02OTQsMjIgKzY3OSw2IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgV2ViSGlzdG9yeTo6aXQKICAgICByZXR1cm4gaXRlbUZvclVSTFN0cmluZyh1cmxTdHJpbmcu
Z2V0KCksIGl0ZW0pOwogfQogCi1IUkVTVUxUIFdlYkhpc3Rvcnk6OmNvbnRhaW5zSXRlbUZvclVS
TFN0cmluZygKLSAgICAvKiBbaW5dICovIHZvaWQqIHVybENGU3RyaW5nLAotICAgIC8qIFtyZXR2
YWxdW291dF0gKi8gQk9PTCogY29udGFpbnMpCi17Ci0gICAgSVdlYkhpc3RvcnlJdGVtKiBpdGVt
ID0gMDsKLSAgICBIUkVTVUxUIGhyOwotICAgIGlmIChTVUNDRUVERUQoaHIgPSBpdGVtRm9yVVJM
U3RyaW5nKChDRlN0cmluZ1JlZil1cmxDRlN0cmluZywgJml0ZW0pKSkgewotICAgICAgICAqY29u
dGFpbnMgPSBUUlVFOwotICAgICAgICAvLyBpdGVtRm9yVVJMU3RyaW5nIHJlZnMgdGhlIHJldHVy
bmVkIGl0ZW0sIHNvIHdlIG5lZWQgdG8gYmFsYW5jZSB0aGF0IAotICAgICAgICBpdGVtLT5SZWxl
YXNlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgICpjb250YWlucyA9IEZBTFNFOwotCi0gICAgcmV0
dXJuIGhyOwotfQotCiBIUkVTVUxUIFdlYkhpc3Rvcnk6OnJlbW92ZUl0ZW1Gb3JVUkxTdHJpbmco
Q0ZTdHJpbmdSZWYgdXJsU3RyaW5nKQogewogICAgIElXZWJIaXN0b3J5SXRlbSogZW50cnkgPSAo
SVdlYkhpc3RvcnlJdGVtKikgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9lbnRyaWVzQnlVUkwuZ2V0
KCksIHVybFN0cmluZyk7CkBAIC03MTksNiArNjg4LDkgQEAgSFJFU1VMVCBXZWJIaXN0b3J5Ojpy
ZW1vdmVJdGVtRm9yVVJMU3RyaQogICAgIEhSRVNVTFQgaHIgPSByZW1vdmVJdGVtRnJvbURhdGVD
YWNoZXMoZW50cnkpOwogICAgIENGRGljdGlvbmFyeVJlbW92ZVZhbHVlKG1fZW50cmllc0J5VVJM
LmdldCgpLCB1cmxTdHJpbmcpOwogCisgICAgaWYgKCFDRkRpY3Rpb25hcnlHZXRDb3VudChtX2Vu
dHJpZXNCeVVSTC5nZXQoKSkpCisgICAgICAgIFBhZ2VHcm91cDo6cmVtb3ZlQWxsVmlzaXRlZExp
bmtzKCk7CisKICAgICByZXR1cm4gaHI7CiB9CiAKQEAgLTg1NiwxMDEgKzgyOCwyMyBAQCBIUkVT
VUxUIFdlYkhpc3Rvcnk6OmFnZUxpbWl0RGF0ZShDRkFic29sCiAgICAgcmV0dXJuIFNfT0s7CiB9
CiAKLUlXZWJIaXN0b3J5UHJpdmF0ZSogV2ViSGlzdG9yeTo6b3B0aW9uYWxTaGFyZWRIaXN0b3J5
SW50ZXJuYWwoKQotewotICAgIGlmICghbV9vcHRpb25hbFNoYXJlZEhpc3RvcnkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgSVdlYkhpc3RvcnlQcml2YXRlKiBoaXN0b3J5UHJpdmF0ZTsKLSAg
ICBpZiAoRkFJTEVEKG1fb3B0aW9uYWxTaGFyZWRIaXN0b3J5LT5RdWVyeUludGVyZmFjZShJSURf
SVdlYkhpc3RvcnlQcml2YXRlLCAodm9pZCoqKSZoaXN0b3J5UHJpdmF0ZSkpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIGhpc3RvcnlQcml2YXRlLT5SZWxlYXNlKCk7IC8vIGRvbid0IGFkZCBh
biBhZGRpdGlvbmFsIHJlZiBmb3IgdGhpcyBpbnRlcm5hbCBjYWxsCi0gICAgcmV0dXJuIGhpc3Rv
cnlQcml2YXRlOwotfQotCi0vLyBfV2ViQ29yZUhpc3RvcnlQcm92aWRlciAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLV9X
ZWJDb3JlSGlzdG9yeVByb3ZpZGVyOjpfV2ViQ29yZUhpc3RvcnlQcm92aWRlcihJV2ViSGlzdG9y
eSogaGlzdG9yeSkKLSAgICA6IG1faGlzdG9yeShoaXN0b3J5KQotICAgICwgbV9oaXN0b3J5UHJp
dmF0ZSgwKQorc3RhdGljIHZvaWQgYWRkVmlzaXRlZExpbmtUb1BhZ2VHcm91cChjb25zdCB2b2lk
KiBrZXksIGNvbnN0IHZvaWQqLCB2b2lkKiBjb250ZXh0KQogewotfQorICAgIENGU3RyaW5nUmVm
IHVybCA9IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihrZXkpOworICAgIFBhZ2VHcm91cCogZ3Jv
dXAgPSBzdGF0aWNfY2FzdDxQYWdlR3JvdXAqPihjb250ZXh0KTsKIAotX1dlYkNvcmVIaXN0b3J5
UHJvdmlkZXI6On5fV2ViQ29yZUhpc3RvcnlQcm92aWRlcigpCi17Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBtYXRjaExldHRlcihjaGFyIGMsIGNoYXIgbG93ZXJjYXNlTGV0dGVyKQotewotICAg
IHJldHVybiAoYyB8IDB4MjApID09IGxvd2VyY2FzZUxldHRlcjsKLX0KLQotc3RhdGljIGlubGlu
ZSBib29sIG1hdGNoVW5pY29kZUxldHRlcihVbmlDaGFyIGMsIFVuaUNoYXIgbG93ZXJjYXNlTGV0
dGVyKQotewotICAgIHJldHVybiAoYyB8IDB4MjApID09IGxvd2VyY2FzZUxldHRlcjsKKyAgICBD
RkluZGV4IGxlbmd0aCA9IENGU3RyaW5nR2V0TGVuZ3RoKHVybCk7CisgICAgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oQ0ZTdHJpbmdHZXRD
aGFyYWN0ZXJzUHRyKHVybCkpOworICAgIGlmIChjaGFyYWN0ZXJzKQorICAgICAgICBncm91cC0+
YWRkVmlzaXRlZExpbmsoY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
VmVjdG9yPFVDaGFyLCA1MTI+IGJ1ZmZlcihsZW5ndGgpOworICAgICAgICBDRlN0cmluZ0dldENo
YXJhY3RlcnModXJsLCBDRlJhbmdlTWFrZSgwLCBsZW5ndGgpLCByZWludGVycHJldF9jYXN0PFVu
aUNoYXIqPihidWZmZXIuZGF0YSgpKSk7CisgICAgICAgIGdyb3VwLT5hZGRWaXNpdGVkTGluayhi
dWZmZXIuZGF0YSgpLCBsZW5ndGgpOworICAgIH0KIH0KIAotYm9vbCBfV2ViQ29yZUhpc3RvcnlQ
cm92aWRlcjo6Y29udGFpbnNVUkwoY29uc3QgVUNoYXIqIHVuaWNvZGUsIHVuc2lnbmVkIGxlbmd0
aCkKK3ZvaWQgV2ViSGlzdG9yeTo6YWRkVmlzaXRlZExpbmtzVG9QYWdlR3JvdXAoUGFnZUdyb3Vw
JiBncm91cCkKIHsKLSAgICBjb25zdCBpbnQgYnVmZmVyU2l6ZSA9IDEwMjQ7Ci0gICAgY29uc3Qg
VUNoYXIgKnVuaWNvZGVTdHIgPSB1bmljb2RlOwotICAgIFVDaGFyIHN0YXRpY1N0ckJ1ZmZlclti
dWZmZXJTaXplXTsKLSAgICBVQ2hhciAqc3RyQnVmZmVyID0gMDsKLSAgICBib29sIG5lZWRUb0Fk
ZFNsYXNoID0gZmFsc2U7Ci0KLSAgICBpZiAobGVuZ3RoID49IDYgJiYKLSAgICAgICAgbWF0Y2hV
bmljb2RlTGV0dGVyKHVuaWNvZGVbMF0sICdoJykgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0
dGVyKHVuaWNvZGVbMV0sICd0JykgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNv
ZGVbMl0sICd0JykgJiYKLSAgICAgICAgbWF0Y2hVbmljb2RlTGV0dGVyKHVuaWNvZGVbM10sICdw
JykgJiYKLSAgICAgICAgKHVuaWNvZGVbNF0gPT0gJzonIAotICAgICAgICB8fCAobWF0Y2hVbmlj
b2RlTGV0dGVyKHVuaWNvZGVbNF0sICdzJykgJiYgdW5pY29kZVs1XSA9PSAnOicpKSkgewotCi0g
ICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSB1bmljb2RlWzRdID09ICc6JyA/IDUgOiA2OwotCi0g
ICAgICAgICAgICAvLyBza2lwIHBvc3NpYmxlIGluaXRpYWwgdHdvIHNsYXNoZXMKLSAgICAgICAg
ICAgIGlmIChwb3MgKyAxIDwgbGVuZ3RoICYmIHVuaWNvZGVbcG9zXSA9PSAnLycgJiYgdW5pY29k
ZVtwb3MgKyAxXSA9PSAnLycpCi0gICAgICAgICAgICAgICAgcG9zICs9IDI7Ci0KLSAgICAgICAg
ICAgIHdoaWxlIChwb3MgPCBsZW5ndGggJiYgdW5pY29kZVtwb3NdICE9ICcvJykKLSAgICAgICAg
ICAgICAgICBwb3MrKzsKLQotICAgICAgICAgICAgaWYgKHBvcyA9PSBsZW5ndGgpCi0gICAgICAg
ICAgICAgICAgbmVlZFRvQWRkU2xhc2ggPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChuZWVkVG9B
ZGRTbGFzaCkgewotICAgICAgICBpZiAobGVuZ3RoICsgMSA8PSBidWZmZXJTaXplKQotICAgICAg
ICAgICAgc3RyQnVmZmVyID0gc3RhdGljU3RyQnVmZmVyOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzdHJCdWZmZXIgPSAoVUNoYXIqKW1hbGxvYyhzaXplb2YoVUNoYXIpICogKGxlbmd0aCAr
IDEpKTsKLSAgICAgICAgbWVtY3B5KHN0ckJ1ZmZlciwgdW5pY29kZSwgMiAqIGxlbmd0aCk7Ci0g
ICAgICAgIHN0ckJ1ZmZlcltsZW5ndGhdID0gJy8nOwotICAgICAgICBsZW5ndGgrKzsKLQotICAg
ICAgICB1bmljb2RlU3RyID0gc3RyQnVmZmVyOwotICAgIH0KLQotICAgIGlmICghbV9oaXN0b3J5
UHJpdmF0ZSkgewotICAgICAgICBpZiAoU1VDQ0VFREVEKG1faGlzdG9yeS0+UXVlcnlJbnRlcmZh
Y2UoSUlEX0lXZWJIaXN0b3J5UHJpdmF0ZSwgKHZvaWQqKikmbV9oaXN0b3J5UHJpdmF0ZSkpKSB7
Ci0gICAgICAgICAgICAvLyBkb24ndCBob2xkIGEgcmVmIC0gd2UncmUgb3duZWQgYnkgSVdlYkhp
c3RvcnkvSVdlYkhpc3RvcnlQcml2YXRlCi0gICAgICAgICAgICBtX2hpc3RvcnlQcml2YXRlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc3RyQnVmZmVyICE9
IHN0YXRpY1N0ckJ1ZmZlcikKLSAgICAgICAgICAgICAgICBmcmVlKHN0ckJ1ZmZlcik7Ci0gICAg
ICAgICAgICBtX2hpc3RvcnlQcml2YXRlID0gMDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIENGU3RyaW5nUmVmIHN0ciA9IENGU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnNOb0NvcHkoTlVMTCwgKGNvbnN0IFVuaUNoYXIqKXVuaWNvZGVTdHIsIGxl
bmd0aCwga0NGQWxsb2NhdG9yTnVsbCk7Ci0gICAgQk9PTCByZXN1bHQgPSBGQUxTRTsKLSAgICBt
X2hpc3RvcnlQcml2YXRlLT5jb250YWluc0l0ZW1Gb3JVUkxTdHJpbmcoKHZvaWQqKXN0ciwgJnJl
c3VsdCk7Ci0gICAgQ0ZSZWxlYXNlKHN0cik7Ci0KLSAgICBpZiAoc3RyQnVmZmVyICE9IHN0YXRp
Y1N0ckJ1ZmZlcikKLSAgICAgICAgZnJlZShzdHJCdWZmZXIpOwotCi0gICAgcmV0dXJuICEhcmVz
dWx0OworICAgIENGRGljdGlvbmFyeUFwcGx5RnVuY3Rpb24obV9lbnRyaWVzQnlVUkwuZ2V0KCks
IGFkZFZpc2l0ZWRMaW5rVG9QYWdlR3JvdXAsICZncm91cCk7CiB9CkluZGV4OiBXZWJLaXQvd2lu
L1dlYkhpc3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkhpc3RvcnkuaAkocmV2
aXNpb24gMzA3OTQpCisrKyBXZWJLaXQvd2luL1dlYkhpc3RvcnkuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMyLDMxICszMiwyMCBAQAogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0Nv
cmVGb3VuZGF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLS8vIHszREUwNEU1OS05M0Y5LTQzNjktOEI0My05NzY0NThEN0UzMTl9
Ci1ERUZJTkVfR1VJRChJSURfSVdlYkhpc3RvcnlQcml2YXRlLCAweDNkZTA0ZTU5LCAweDkzZjks
IDB4NDM2OSwgMHg4YiwgMHg0MywgMHg5NywgMHg2NCwgMHg1OCwgMHhkNywgMHhlMywgMHgxOSk7
Ci0KLWludGVyZmFjZSBJV2ViSGlzdG9yeVByaXZhdGUgOiBwdWJsaWMgSVVua25vd24KLXsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgYWRkSXRlbUZvclVS
TCgKLSAgICAgICAgLyogW2luXSAqLyBCU1RSIHVybCwKLSAgICAgICAgLyogW2luXSAqLyBCU1RS
IHRpdGxlKSA9IDA7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNvbnRh
aW5zSXRlbUZvclVSTFN0cmluZygKLSAgICAgICAgLyogW2luXSAqLyB2b2lkKiB1cmxDRlN0cmlu
ZywKLSAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiBjb250YWlucykgPSAwOwotfTsK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFBhZ2VHcm91
cDsKKyAgICBjbGFzcyBTdHJpbmc7Cit9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY2xh
c3MgV2ViUHJlZmVyZW5jZXM7CiAKLWNsYXNzIFdlYkhpc3RvcnkgOiBwdWJsaWMgSVdlYkhpc3Rv
cnksIElXZWJIaXN0b3J5UHJpdmF0ZQoteworY2xhc3MgV2ViSGlzdG9yeSA6IHB1YmxpYyBJV2Vi
SGlzdG9yeSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFdlYkhpc3RvcnkqIGNyZWF0ZUluc3RhbmNl
KCk7Ci1wcm90ZWN0ZWQ6Citwcml2YXRlOgogICAgIFdlYkhpc3RvcnkoKTsKICAgICB+V2ViSGlz
dG9yeSgpOwogCkBAIC0xMTksMTEgKzEwOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIC8qIFtyZXR2
YWxdW291dF0gKi8gaW50KiBsaW1pdCk7CiAKICAgICAvLyBXZWJIaXN0b3J5Ci0gICAgc3RhdGlj
IElXZWJIaXN0b3J5UHJpdmF0ZSogb3B0aW9uYWxTaGFyZWRIaXN0b3J5SW50ZXJuYWwoKTsKLSAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgYWRkSXRlbUZvclVSTChCU1RSIHVy
bCwgQlNUUiB0aXRsZSk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNv
bnRhaW5zSXRlbUZvclVSTFN0cmluZyh2b2lkKiB1cmxDRlN0cmluZywgQk9PTCogY29udGFpbnMp
OworICAgIHN0YXRpYyBXZWJIaXN0b3J5KiBzaGFyZWRIaXN0b3J5KCk7CisgICAgdm9pZCBhZGRJ
dGVtKGNvbnN0IFdlYkNvcmU6OktVUkwmLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICB2
b2lkIGFkZFZpc2l0ZWRMaW5rc1RvUGFnZUdyb3VwKFdlYkNvcmU6OlBhZ2VHcm91cCYpOwogCi1w
cm90ZWN0ZWQ6Citwcml2YXRlOgogICAgIGVudW0gTm90aWZpY2F0aW9uVHlwZQogICAgIHsKICAg
ICAgICAga1dlYkhpc3RvcnlJdGVtc0FkZGVkTm90aWZpY2F0aW9uID0gMCwKQEAgLTE1MCwxMyAr
MTM5LDExIEBAIHByb3RlY3RlZDoKICAgICBCU1RSIGdldE5vdGlmaWNhdGlvblN0cmluZyhOb3Rp
ZmljYXRpb25UeXBlIG5vdGlmeVR5cGUpOwogICAgIEhSRVNVTFQgaXRlbUZvclVSTFN0cmluZyhD
RlN0cmluZ1JlZiB1cmxTdHJpbmcsIElXZWJIaXN0b3J5SXRlbSoqIGl0ZW0pOwogCi1wcm90ZWN0
ZWQ6CiAgICAgVUxPTkcgbV9yZWZDb3VudDsKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlv
bmFyeVJlZj4gbV9lbnRyaWVzQnlVUkw7CiAgICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVm
PiBtX2RhdGVzV2l0aEVudHJpZXM7CiAgICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBt
X2VudHJpZXNCeURhdGU7CiAgICAgQ09NUHRyPFdlYlByZWZlcmVuY2VzPiBtX3ByZWZlcmVuY2Vz
OwotICAgIHN0YXRpYyBJV2ViSGlzdG9yeSogbV9vcHRpb25hbFNoYXJlZEhpc3Rvcnk7CiB9Owog
CiAjZW5kaWYKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAJKHJldmlzaW9uIDMwNzk0KQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaW5jbHVkZSAiV2ViRWxlbWVudFByb3BlcnR5QmFnLmgiCiAjaW5jbHVkZSAiV2Vi
RnJhbWUuaCIKKyNpbmNsdWRlICJXZWJIaXN0b3J5LmgiCiAjaW5jbHVkZSAiV2ViTXV0YWJsZVVS
TFJlcXVlc3QuaCIKICNpbmNsdWRlICJXZWJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIldl
YlZpZXcuaCIKQEAgLTM3LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9XaW5kb3dGZWF0dXJlcy5oPgogI3ByYWdtYSB3YXJuaW5nKHBvcCkKIApAQCAtNDk2LDYg
KzQ5OCwxMSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1CiAgICAg
fQogfQogCit2b2lkIFdlYkNocm9tZUNsaWVudDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoKQorewor
ICAgIFdlYkhpc3Rvcnk6OnNoYXJlZEhpc3RvcnkoKS0+YWRkVmlzaXRlZExpbmtzVG9QYWdlR3Jv
dXAobV93ZWJWaWV3LT5wYWdlKCktPmdyb3VwKCkpOworfQorCiBDT01QdHI8SVdlYlVJRGVsZWdh
dGU+IFdlYkNocm9tZUNsaWVudDo6dWlEZWxlZ2F0ZSgpCiB7CiAgICAgQ09NUHRyPElXZWJVSURl
bGVnYXRlPiBkZWxlZ2F0ZTsKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaAkocmV2aXNpb24gMzA3OTQpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDkgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3Jl
OjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwogCi0gICAgdmlydHVhbCBXZWJWaWV3
KiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9CisgICAgdmlydHVhbCB2b2lk
IHBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CisKKyAgICBXZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3Qg
eyByZXR1cm4gbV93ZWJWaWV3OyB9CiAKIHByaXZhdGU6CiAgICAgQ09NUHRyPElXZWJVSURlbGVn
YXRlPiB1aURlbGVnYXRlKCk7CkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMzA3OTQpCisrKyBXZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luUGFja2FnZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVy
UGFydC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNwcmFnbWEgd2Fy
bmluZyhwb3ApCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDI4LDEwICs0MjksNyBA
QCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpmaW5pc2hlZExvYWRpCiAKIHZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnkoY29uc3QgS1VSTCYgdXJsKQogewot
ICAgIENPTVB0cjxXZWJIaXN0b3J5PiBoaXN0b3J5ID0gd2ViSGlzdG9yeSgpOwotICAgIGlmICgh
aGlzdG9yeSkKLSAgICAgICAgcmV0dXJuOwotICAgIGhpc3RvcnktPmFkZEl0ZW1Gb3JVUkwoQlN0
cmluZyh1cmwuc3RyaW5nKCkpLCAwKTsgICAgICAgICAgICAgICAgIAorICAgIFdlYkhpc3Rvcnk6
OnNoYXJlZEhpc3RvcnkoKS0+YWRkSXRlbSh1cmwsIGNvcmUobV93ZWJGcmFtZSktPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpLT50aXRsZSgpKTsgICAgICAgICAgICAgICAgIAogfQogCiBib29s
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0q
KSBjb25zdApAQCAtNjk3LDE0ICs2OTUsMTAgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
cmVkaXJlY3REYXRhVAogICAgIG1fcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcq
PihwbHVnaW5XaWRnZXQpOwogfQogCi1DT01QdHI8V2ViSGlzdG9yeT4gV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OndlYkhpc3RvcnkoKSBjb25zdAorV2ViSGlzdG9yeSogV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OndlYkhpc3RvcnkoKSBjb25zdAogewogICAgIGlmIChtX3dlYkZyYW1lICE9IG1fd2ViRnJh
bWUtPndlYlZpZXcoKS0+dG9wTGV2ZWxGcmFtZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IElXZWJIaXN0b3J5UHJpdmF0ZSogaGlzdG9yeUludGVybmFsID0gV2ViSGlzdG9yeTo6b3B0aW9u
YWxTaGFyZWRIaXN0b3J5SW50ZXJuYWwoKTsgLy8gZG9lcyBub3QgYWRkIGEgcmVmCi0gICAgaWYg
KCFoaXN0b3J5SW50ZXJuYWwpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIENPTVB0
cjxXZWJIaXN0b3J5PihRdWVyeSwgaGlzdG9yeUludGVybmFsKTsKKyAgICByZXR1cm4gV2ViSGlz
dG9yeTo6c2hhcmVkSGlzdG9yeSgpOwogfQpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gMzA3OTQpCisrKyBXZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6
RnJhbWU+IGNyZWF0ZUZyYW1lKGNvbnN0IFdlYkNvcmU6OktVUkwmLCBjb25zdCBXZWJDb3JlOjpT
dHJpbmcmIG5hbWUsIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYgcmVmZXJyZXIpOwogICAgIHZvaWQgbG9hZFVSTEludG9DaGlsZChjb25zdCBX
ZWJDb3JlOjpLVVJMJiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiByZWZlcnJlciwgV2ViRnJhbWUq
IGNoaWxkRnJhbWUpOwogICAgIHZvaWQgcmVjZWl2ZWREYXRhKGNvbnN0IGNoYXIqLCBpbnQsIGNv
bnN0IFdlYkNvcmU6OlN0cmluZyYpOwotICAgIENPTVB0cjxXZWJIaXN0b3J5PiB3ZWJIaXN0b3J5
KCkgY29uc3Q7CisgICAgV2ViSGlzdG9yeSogd2ViSGlzdG9yeSgpIGNvbnN0OwogCiAgICAgV2Vi
RnJhbWUqIG1fd2ViRnJhbWU7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19548</attachid>
            <date>2008-03-05 10:30:27 -0800</date>
            <delta_ts>2008-03-05 17:39:20 -0800</delta_ts>
            <desc>KURL work in progress</desc>
            <filename>URLPatch.txt</filename>
            <type>text/plain</type>
            <size>22093</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gMzA3OTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0tV
UkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsOSArMjYyLDE2IEBAIGlubGluZSBib29sIEtV
Ukw6OnByb3RvY29sSXMoY29uc3QgU3RyaW4KICAgICByZXR1cm4gV2ViQ29yZTo6cHJvdG9jb2xJ
cyhzdHJpbmcsIHByb3RvY29sKTsKIH0KIAoraW5saW5lIEtVUkw6Om1hcmtJbnZhbGlkKCkKK3sK
KyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICBtX3BvcnRFbmQgPSAwOworICAgIG1fcGF0aEVu
ZCA9IDA7Cit9CisKIEtVUkw6OktVUkwoKQotICAgIDogbV9pc1ZhbGlkKGZhbHNlKQogeworICAg
IG1hcmtJbnZhbGlkKCk7CiB9CiAKIEtVUkw6OktVUkwoY29uc3QgY2hhciogdXJsKQpAQCAtMzE5
LDcgKzMyNiw3IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCAKICAg
ICAvLyBBbGxvdyBhdCBsZWFzdCBhYnNvbHV0ZSBVUkxzIHRvIHJlc29sdmUgYWdhaW5zdCBhbiBl
bXB0eSBVUkwuCiAgICAgaWYgKCFiYXNlLm1faXNWYWxpZCAmJiAhYmFzZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgbV9zdHJpbmcgPSByZWxhdGl2ZTsKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7
CisgICAgICAgIG1hcmtJbnZhbGlkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM4
OSwxMCArMzk2LDEwIEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCAK
ICAgICAgICAgLy8gdW5sZXNzIHRoZSByZWxhdGl2ZSBVUkwgaXMgYSBzaW5nbGUgZnJhZ21lbnQu
CiAgICAgICAgIGlmICghYmFzZS5pc0hpZXJhcmNoaWNhbCgpKSB7CiAgICAgICAgICAgICBpZiAo
c3RyWzBdID09ICcjJykKLSAgICAgICAgICAgICAgICBwYXJzZShiYXNlLm1fc3RyaW5nLmxlZnQo
YmFzZS5xdWVyeUVuZFBvcykgKyBzdHIpOworICAgICAgICAgICAgICAgIHBhcnNlKGJhc2UubV9z
dHJpbmcubGVmdChiYXNlLm1fcXVlcnlFbmQpICsgc3RyKTsKICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgIG1fc3RyaW5nID0gcmVsYXRpdmU7Ci0gICAgICAgICAgICAgICAgbV9p
c1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbWFya0ludmFsaWQoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDA1LDIwICs0MTIsMjAg
QEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IAogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgJyMnOgogICAgICAgICAgICAgLy8gbXVzdCBiZSBmcmFnbWVu
dC1vbmx5IHJlZmVyZW5jZQotICAgICAgICAgICAgcGFyc2UoYmFzZS5tX3N0cmluZy5sZWZ0KGJh
c2UucXVlcnlFbmRQb3MpICsgc3RyKTsKKyAgICAgICAgICAgIHBhcnNlKGJhc2UubV9zdHJpbmcu
bGVmdChiYXNlLm1fcXVlcnlFbmQpICsgc3RyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlICc/JzoKICAgICAgICAgICAgIC8vIHF1ZXJ5LW9ubHkgcmVmZXJlbmNlLCBzcGVjaWFs
IGNhc2UgbmVlZGVkIGZvciBub24tVVJMIHJlc3VsdHMKLSAgICAgICAgICAgIHBhcnNlKGJhc2Uu
bV9zdHJpbmcubGVmdChiYXNlLnBhdGhFbmRQb3MpICsgc3RyKTsKKyAgICAgICAgICAgIHBhcnNl
KGJhc2UubV9zdHJpbmcubGVmdChiYXNlLm1fcGF0aEVuZCkgKyBzdHIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgJy8nOgogICAgICAgICAgICAgLy8gbXVzdCBiZSBuZXQtcGF0
aCBvciBhYnNvbHV0ZS1wYXRoIHJlZmVyZW5jZQogICAgICAgICAgICAgaWYgKHN0clsxXSA9PSAn
LycpIHsKICAgICAgICAgICAgICAgICAvLyBuZXQtcGF0aAotICAgICAgICAgICAgICAgIHBhcnNl
KGJhc2UubV9zdHJpbmcubGVmdChiYXNlLnNjaGVtZUVuZFBvcyArIDEpICsgc3RyKTsKKyAgICAg
ICAgICAgICAgICBwYXJzZShiYXNlLm1fc3RyaW5nLmxlZnQoYmFzZS5tX3NjaGVtZUVuZCArIDEp
ICsgc3RyKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gYWJzLXBh
dGgKLSAgICAgICAgICAgICAgICBwYXJzZShiYXNlLm1fc3RyaW5nLmxlZnQoYmFzZS5wb3J0RW5k
UG9zKSArIHN0cik7CisgICAgICAgICAgICAgICAgcGFyc2UoYmFzZS5tX3N0cmluZy5sZWZ0KGJh
c2UubV9wb3J0RW5kKSArIHN0cik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKQEAgLTQyNiw3ICs0MzMsNyBAQCB2b2lkIEtVUkw6OmluaXQoY29u
c3QgS1VSTCYgYmFzZSwgY29uc3QgCiAgICAgICAgICAgICAgICAgLy8gbXVzdCBiZSByZWxhdGl2
ZS1wYXRoIHJlZmVyZW5jZQogCiAgICAgICAgICAgICAgICAgLy8gQmFzZSBwYXJ0IHBsdXMgcmVs
YXRpdmUgcGFydCBwbHVzIG9uZSBwb3NzaWJsZSBzbGFzaCBhZGRlZCBpbiBiZXR3ZWVuIHBsdXMg
dGVybWluYXRpbmcgXDAgYnl0ZS4KLSAgICAgICAgICAgICAgICBDaGFyQnVmZmVyIGJ1ZmZlcihi
YXNlLnBhdGhFbmRQb3MgKyAxICsgbGVuICsgMSk7CisgICAgICAgICAgICAgICAgQ2hhckJ1ZmZl
ciBidWZmZXIoYmFzZS5tX3BhdGhFbmQgKyAxICsgbGVuICsgMSk7CiAKICAgICAgICAgICAgICAg
ICBjaGFyKiBidWZmZXJQb3MgPSBidWZmZXIuZGF0YSgpOwogCkBAIC00MzgsMTMgKzQ0NSwxMyBA
QCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgCiAgICAgICAgICAgICAg
ICAgICAgIGJhc2VTdHJpbmdCdWZmZXJbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPihiYXNlQ2hhcmFj
dGVyc1tpXSk7CiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYmFzZVN0cmluZyA9IGJhc2VT
dHJpbmdCdWZmZXIuZGF0YSgpOwogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJhc2VTdHJp
bmdTdGFydCA9IGJhc2VTdHJpbmc7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aFN0
YXJ0ID0gYmFzZVN0cmluZ1N0YXJ0ICsgYmFzZS5wb3J0RW5kUG9zOworICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIHBhdGhTdGFydCA9IGJhc2VTdHJpbmdTdGFydCArIGJhc2UubV9wb3J0RW5k
OwogICAgICAgICAgICAgICAgIHdoaWxlIChiYXNlU3RyaW5nU3RhcnQgPCBwYXRoU3RhcnQpCiAg
ICAgICAgICAgICAgICAgICAgICpidWZmZXJQb3MrKyA9ICpiYXNlU3RyaW5nU3RhcnQrKzsKICAg
ICAgICAgICAgICAgICBjaGFyKiBidWZmZXJQYXRoU3RhcnQgPSBidWZmZXJQb3M7CiAKICAgICAg
ICAgICAgICAgICAvLyBub3cgY29weSB0aGUgYmFzZSBwYXRoCi0gICAgICAgICAgICAgICAgY29u
c3QgY2hhciogYmFzZVN0cmluZ0VuZCA9IGJhc2VTdHJpbmcgKyBiYXNlLnBhdGhFbmRQb3M7Cisg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogYmFzZVN0cmluZ0VuZCA9IGJhc2VTdHJpbmcgKyBi
YXNlLm1fcGF0aEVuZDsKIAogICAgICAgICAgICAgICAgIC8vIGdvIGJhY2sgdG8gdGhlIGxhc3Qg
c2xhc2gKICAgICAgICAgICAgICAgICB3aGlsZSAoYmFzZVN0cmluZ0VuZCA+IGJhc2VTdHJpbmdT
dGFydCAmJiBiYXNlU3RyaW5nRW5kWy0xXSAhPSAnLycpCkBAIC00NTIsNyArNDU5LDcgQEAgdm9p
ZCBLVVJMOjppbml0KGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IAogCiAgICAgICAgICAgICAgICAg
aWYgKGJhc2VTdHJpbmdFbmQgPT0gYmFzZVN0cmluZ1N0YXJ0KSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIG5vIHBhdGggaW4gYmFzZSwgYWRkIGEgcGF0aCBzZXBhcmF0b3IgaWYgbmVjZXNzYXJ5
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiYXNlLnNjaGVtZUVuZFBvcyArIDEgIT0gYmFzZS5w
YXRoRW5kUG9zICYmICpzdHIgIT0gJ1wwJyAmJiAqc3RyICE9ICc/JyAmJiAqc3RyICE9ICcjJykK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2UubV9zY2hlbWVFbmQgKyAxICE9IGJhc2UubV9w
YXRoRW5kICYmICpzdHIgIT0gJ1wwJyAmJiAqc3RyICE9ICc/JyAmJiAqc3RyICE9ICcjJykKICAg
ICAgICAgICAgICAgICAgICAgICAgICpidWZmZXJQb3MrKyA9ICcvJzsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBidWZmZXJQb3MgKz0gY29weVBhdGhSZW1v
dmluZ0RvdHMoYnVmZmVyUG9zLCBiYXNlU3RyaW5nU3RhcnQsIDAsIGJhc2VTdHJpbmdFbmQgLSBi
YXNlU3RyaW5nU3RhcnQpOwpAQCAtNTA1LDcgKzUxMiw3IEBAIHZvaWQgS1VSTDo6aW5pdChjb25z
dCBLVVJMJiBiYXNlLCBjb25zdCAKIAogYm9vbCBLVVJMOjpoYXNQYXRoKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9pc1ZhbGlkICYmIHBhdGhFbmRQb3MgIT0gcG9ydEVuZFBvczsKKyAgICByZXR1
cm4gbV9wYXRoRW5kICE9IG1fcG9ydEVuZDsKIH0KIAogU3RyaW5nIEtVUkw6Omxhc3RQYXRoQ29t
cG9uZW50KCkgY29uc3QKQEAgLTUxMywxMiArNTIwLDEyIEBAIFN0cmluZyBLVVJMOjpsYXN0UGF0
aENvbXBvbmVudCgpIGNvbnN0CiAgICAgaWYgKCFoYXNQYXRoKCkpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAotICAgIGludCBlbmQgPSBwYXRoRW5kUG9zIC0gMTsKKyAgICBpbnQgZW5kID0g
bV9wYXRoRW5kIC0gMTsKICAgICBpZiAobV9zdHJpbmdbZW5kXSA9PSAnLycpCiAgICAgICAgIC0t
ZW5kOwogCiAgICAgaW50IHN0YXJ0ID0gbV9zdHJpbmcucmV2ZXJzZUZpbmQoJy8nLCBlbmQpOwot
ICAgIGlmIChzdGFydCA8IHBvcnRFbmRQb3MpCisgICAgaWYgKHN0YXJ0IDwgbV9wb3J0RW5kKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgKytzdGFydDsKIApAQCAtNTMwLDcgKzUzNyw3
IEBAIFN0cmluZyBLVVJMOjpwcm90b2NvbCgpIGNvbnN0CiAgICAgaWYgKCFtX2lzVmFsaWQpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiBtX3N0cmluZy5sZWZ0KHNjaGVt
ZUVuZFBvcyk7CisgICAgcmV0dXJuIG1fc3RyaW5nLmxlZnQobV9zY2hlbWVFbmQpOwogfQogCiBT
dHJpbmcgS1VSTDo6aG9zdCgpIGNvbnN0CkBAIC01MzgsOCArNTQ1LDggQEAgU3RyaW5nIEtVUkw6
Omhvc3QoKSBjb25zdAogICAgIGlmICghbV9pc1ZhbGlkKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKLSAgICBpbnQgc3RhcnQgPSAocGFzc3dvcmRFbmRQb3MgPT0gdXNlclN0YXJ0UG9zKSA/
IHBhc3N3b3JkRW5kUG9zIDogcGFzc3dvcmRFbmRQb3MgKyAxOwotICAgIHJldHVybiBkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXMobV9zdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBob3N0RW5kUG9zIC0g
c3RhcnQpKTsKKyAgICBpbnQgc3RhcnQgPSAobV9wYXNzd29yZEVuZCA9PSBtX3VzZXJTdGFydCkg
PyBtX3Bhc3N3b3JkRW5kIDogbV9wYXNzd29yZEVuZCArIDE7CisgICAgcmV0dXJuIGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyhtX3N0cmluZy5zdWJzdHJpbmcoc3RhcnQsIG1faG9zdEVuZCAtIHN0
YXJ0KSk7CiB9CiAKIHVuc2lnbmVkIHNob3J0IEtVUkw6OnBvcnQoKSBjb25zdApAQCAtNTQ3LDEw
ICs1NTQsMTAgQEAgdW5zaWduZWQgc2hvcnQgS1VSTDo6cG9ydCgpIGNvbnN0CiAgICAgaWYgKCFt
X2lzVmFsaWQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKGhvc3RFbmRQb3MgPT0gcG9y
dEVuZFBvcykKKyAgICBpZiAobV9ob3N0RW5kID09IG1fcG9ydEVuZCkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBpbnQgbnVtYmVyID0gbV9zdHJpbmcuc3Vic3RyaW5nKGhvc3RFbmRQb3MgKyAx
LCBwb3J0RW5kUG9zIC0gaG9zdEVuZFBvcyAtIDEpLnRvSW50KCk7CisgICAgaW50IG51bWJlciA9
IG1fc3RyaW5nLnN1YnN0cmluZyhtX2hvc3RFbmQgKyAxLCBtX3BvcnRFbmQgLSBtX2hvc3RFbmQg
LSAxKS50b0ludCgpOwogICAgIGlmIChudW1iZXIgPCAwIHx8IG51bWJlciA+IDB4RkZGRikKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIG51bWJlcjsKQEAgLTU2MSwxMCArNTY4LDEwIEBA
IFN0cmluZyBLVVJMOjpwYXNzKCkgY29uc3QKICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgaWYgKHBhc3N3b3JkRW5kUG9zID09IHVzZXJFbmRQb3Mp
CisgICAgaWYgKG1fcGFzc3dvcmRFbmQgPT0gbV91c2VyRW5kKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAKLSAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1fc3RyaW5nLnN1
YnN0cmluZyh1c2VyRW5kUG9zICsgMSwgcGFzc3dvcmRFbmRQb3MgLSB1c2VyRW5kUG9zIC0gMSkp
OyAKKyAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1fc3RyaW5nLnN1YnN0cmlu
ZyhtX3VzZXJFbmQgKyAxLCBtX3Bhc3N3b3JkRW5kIC0gbV91c2VyRW5kIC0gMSkpOyAKIH0KIAog
U3RyaW5nIEtVUkw6OnVzZXIoKSBjb25zdApAQCAtNTcyLDIwICs1NzksMjAgQEAgU3RyaW5nIEtV
Ukw6OnVzZXIoKSBjb25zdAogICAgIGlmICghbV9pc1ZhbGlkKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAKLSAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1fc3RyaW5nLnN1
YnN0cmluZyh1c2VyU3RhcnRQb3MsIHVzZXJFbmRQb3MgLSB1c2VyU3RhcnRQb3MpKTsKKyAgICBy
ZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1fc3RyaW5nLnN1YnN0cmluZyhtX3VzZXJT
dGFydCwgbV91c2VyRW5kIC0gbV91c2VyU3RhcnQpKTsKIH0KIAogU3RyaW5nIEtVUkw6OnJlZigp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX2lzVmFsaWQgfHwgZnJhZ21lbnRFbmRQb3MgPT0gcXVlcnlF
bmRQb3MpCisgICAgaWYgKCFtX2lzVmFsaWQgfHwgbV9mcmFnbWVudEVuZCA9PSBtX3F1ZXJ5RW5k
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gbV9zdHJpbmcuc3Vic3Ry
aW5nKHF1ZXJ5RW5kUG9zICsgMSwgZnJhZ21lbnRFbmRQb3MgLSAocXVlcnlFbmRQb3MgKyAxKSk7
CisgICAgcmV0dXJuIG1fc3RyaW5nLnN1YnN0cmluZyhtX3F1ZXJ5RW5kICsgMSwgbV9mcmFnbWVu
dEVuZCAtIChtX3F1ZXJ5RW5kICsgMSkpOwogfQogCiBib29sIEtVUkw6Omhhc1JlZigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1faXNWYWxpZCAmJiBmcmFnbWVudEVuZFBvcyAhPSBxdWVyeUVuZFBv
czsKKyAgICByZXR1cm4gbV9pc1ZhbGlkICYmIG1fZnJhZ21lbnRFbmQgIT0gbV9xdWVyeUVuZDsK
IH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFzc2VydFByb3RvY29sSXNHb29kKGNvbnN0IGNoYXIq
IHByb3RvY29sKQpAQCAtNjA1LDExICs2MTIsMTEgQEAgYm9vbCBLVVJMOjpwcm90b2NvbElzKGNv
bnN0IGNoYXIqIHByb3RvYwogICAgIGFzc2VydFByb3RvY29sSXNHb29kKHByb3RvY29sKTsKICAg
ICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2NoZW1lRW5kUG9zOyArK2kpIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1f
c2NoZW1lRW5kOyArK2kpIHsKICAgICAgICAgaWYgKCFwcm90b2NvbFtpXSB8fCB0b0FTQ0lJTG93
ZXIobV9zdHJpbmdbaV0pICE9IHByb3RvY29sW2ldKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICByZXR1cm4gIXByb3RvY29sW3NjaGVtZUVuZFBvc107IC8vIFdlIHNob3Vs
ZCBoYXZlIGNvbnN1bWVkIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBhcmd1bWVudC4KKyAgICByZXR1
cm4gIXByb3RvY29sW21fc2NoZW1lRW5kXTsgLy8gV2Ugc2hvdWxkIGhhdmUgY29uc3VtZWQgYWxs
IGNoYXJhY3RlcnMgaW4gdGhlIGFyZ3VtZW50LgogfQogCiBTdHJpbmcgS1VSTDo6cXVlcnkoKSBj
b25zdApAQCAtNjE3LDcgKzYyNCw3IEBAIFN0cmluZyBLVVJMOjpxdWVyeSgpIGNvbnN0CiAgICAg
aWYgKCFtX2lzVmFsaWQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiBt
X3N0cmluZy5zdWJzdHJpbmcocGF0aEVuZFBvcywgcXVlcnlFbmRQb3MgLSBwYXRoRW5kUG9zKTsg
CisgICAgcmV0dXJuIG1fc3RyaW5nLnN1YnN0cmluZyhtX3BhdGhFbmQsIG1fcXVlcnlFbmQgLSBt
X3BhdGhFbmQpOyAKIH0KIAogU3RyaW5nIEtVUkw6OnBhdGgoKSBjb25zdApAQCAtNjI1LDcgKzYz
Miw3IEBAIFN0cmluZyBLVVJMOjpwYXRoKCkgY29uc3QKICAgICBpZiAoIW1faXNWYWxpZCkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyhtX3N0cmluZy5zdWJzdHJpbmcocG9ydEVuZFBvcywgcGF0aEVuZFBvcyAtIHBvcnRFbmRQ
b3MpKTsgCisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtX3N0cmluZy5zdWJz
dHJpbmcobV9wb3J0RW5kLCBtX3BhdGhFbmQgLSBtX3BvcnRFbmQpKTsgCiB9CiAKIHZvaWQgS1VS
TDo6c2V0UHJvdG9jb2woY29uc3QgU3RyaW5nJiBzKQpAQCAtNjM1LDcgKzY0Miw3IEBAIHZvaWQg
S1VSTDo6c2V0UHJvdG9jb2woY29uc3QgU3RyaW5nJiBzKQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgcGFyc2UocyArIG1fc3RyaW5nLnN1YnN0cmluZyhzY2hlbWVFbmRQb3MpKTsKKyAg
ICBwYXJzZShzICsgbV9zdHJpbmcuc3Vic3RyaW5nKG1fc2NoZW1lRW5kKSk7CiB9CiAKIHZvaWQg
S1VSTDo6c2V0SG9zdChjb25zdCBTdHJpbmcmIHMpCkBAIC02NDMsMTAgKzY1MCwxMCBAQCB2b2lk
IEtVUkw6OnNldEhvc3QoY29uc3QgU3RyaW5nJiBzKQogICAgIGlmICghbV9pc1ZhbGlkKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBib29sIHNsYXNoU2xhc2hOZWVkZWQgPSB1c2VyU3RhcnRQb3Mg
PT0gc2NoZW1lRW5kUG9zICsgMTsKLSAgICBpbnQgaG9zdFN0YXJ0ID0gKHBhc3N3b3JkRW5kUG9z
ID09IHVzZXJTdGFydFBvcykgPyBwYXNzd29yZEVuZFBvcyA6IHBhc3N3b3JkRW5kUG9zICsgMTsK
KyAgICBib29sIHNsYXNoU2xhc2hOZWVkZWQgPSBtX3VzZXJTdGFydCA9PSBtX3NjaGVtZUVuZCAr
IDE7CisgICAgaW50IGhvc3RTdGFydCA9IChtX3Bhc3N3b3JkRW5kID09IG1fdXNlclN0YXJ0KSA/
IG1fcGFzc3dvcmRFbmQgOiBtX3Bhc3N3b3JkRW5kICsgMTsKIAotICAgIHBhcnNlKG1fc3RyaW5n
LmxlZnQoaG9zdFN0YXJ0KSArIChzbGFzaFNsYXNoTmVlZGVkID8gIi8vIiA6ICIiKSArIHMgKyBt
X3N0cmluZy5zdWJzdHJpbmcoaG9zdEVuZFBvcykpOworICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQo
aG9zdFN0YXJ0KSArIChzbGFzaFNsYXNoTmVlZGVkID8gIi8vIiA6ICIiKSArIHMgKyBtX3N0cmlu
Zy5zdWJzdHJpbmcobV9ob3N0RW5kKSk7CiB9CiAKIHZvaWQgS1VSTDo6c2V0UG9ydCh1bnNpZ25l
ZCBzaG9ydCBpKQpAQCAtNjU0LDEwICs2NjEsMTAgQEAgdm9pZCBLVVJMOjpzZXRQb3J0KHVuc2ln
bmVkIHNob3J0IGkpCiAgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGJvb2wgY29sb25OZWVkZWQgPSBwb3J0RW5kUG9zID09IGhvc3RFbmRQb3M7Ci0gICAgaW50IHBv
cnRTdGFydCA9IChjb2xvbk5lZWRlZCA/IGhvc3RFbmRQb3MgOiBob3N0RW5kUG9zICsgMSk7Cisg
ICAgYm9vbCBjb2xvbk5lZWRlZCA9IG1fcG9ydEVuZCA9PSBtX2hvc3RFbmQ7CisgICAgaW50IHBv
cnRTdGFydCA9IChjb2xvbk5lZWRlZCA/IG1faG9zdEVuZCA6IG1faG9zdEVuZCArIDEpOwogCi0g
ICAgcGFyc2UobV9zdHJpbmcubGVmdChwb3J0U3RhcnQpICsgKGNvbG9uTmVlZGVkID8gIjoiIDog
IiIpICsgU3RyaW5nOjpudW1iZXIoaSkgKyBtX3N0cmluZy5zdWJzdHJpbmcocG9ydEVuZFBvcykp
OworICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQocG9ydFN0YXJ0KSArIChjb2xvbk5lZWRlZCA/ICI6
IiA6ICIiKSArIFN0cmluZzo6bnVtYmVyKGkpICsgbV9zdHJpbmcuc3Vic3RyaW5nKG1fcG9ydEVu
ZCkpOwogfQogCiB2b2lkIEtVUkw6OnNldEhvc3RBbmRQb3J0KGNvbnN0IFN0cmluZyYgaG9zdEFu
ZFBvcnQpCkBAIC02NjUsMTAgKzY3MiwxMCBAQCB2b2lkIEtVUkw6OnNldEhvc3RBbmRQb3J0KGNv
bnN0IFN0cmluZyYgCiAgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGJvb2wgc2xhc2hTbGFzaE5lZWRlZCA9IHVzZXJTdGFydFBvcyA9PSBzY2hlbWVFbmRQb3MgKyAx
OwotICAgIGludCBob3N0U3RhcnQgPSAocGFzc3dvcmRFbmRQb3MgPT0gdXNlclN0YXJ0UG9zKSA/
IHBhc3N3b3JkRW5kUG9zIDogcGFzc3dvcmRFbmRQb3MgKyAxOworICAgIGJvb2wgc2xhc2hTbGFz
aE5lZWRlZCA9IG1fdXNlclN0YXJ0ID09IG1fc2NoZW1lRW5kICsgMTsKKyAgICBpbnQgaG9zdFN0
YXJ0ID0gKG1fcGFzc3dvcmRFbmQgPT0gbV91c2VyU3RhcnQpID8gbV9wYXNzd29yZEVuZCA6IG1f
cGFzc3dvcmRFbmQgKyAxOwogCi0gICAgcGFyc2UobV9zdHJpbmcubGVmdChob3N0U3RhcnQpICsg
KHNsYXNoU2xhc2hOZWVkZWQgPyAiLy8iIDogIiIpICsgaG9zdEFuZFBvcnQgKyBtX3N0cmluZy5z
dWJzdHJpbmcocG9ydEVuZFBvcykpOworICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQoaG9zdFN0YXJ0
KSArIChzbGFzaFNsYXNoTmVlZGVkID8gIi8vIiA6ICIiKSArIGhvc3RBbmRQb3J0ICsgbV9zdHJp
bmcuc3Vic3RyaW5nKG1fcG9ydEVuZCkpOwogfQogCiB2b2lkIEtVUkw6OnNldFVzZXIoY29uc3Qg
U3RyaW5nJiB1c2VyKQpAQCAtNjc3LDIwICs2ODQsMjAgQEAgdm9pZCBLVVJMOjpzZXRVc2VyKGNv
bnN0IFN0cmluZyYgdXNlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIHU7Ci0gICAg
aW50IGVuZCA9IHVzZXJFbmRQb3M7CisgICAgaW50IGVuZCA9IG1fdXNlckVuZDsKICAgICBpZiAo
IXVzZXIuaXNFbXB0eSgpKSB7CiAgICAgICAgIHUgPSB1c2VyOwotICAgICAgICBpZiAodXNlclN0
YXJ0UG9zID09IHNjaGVtZUVuZFBvcyArIDEpCisgICAgICAgIGlmIChtX3VzZXJTdGFydCA9PSBt
X3NjaGVtZUVuZCArIDEpCiAgICAgICAgICAgICB1ID0gIi8vIiArIHU7CiAgICAgICAgIC8vIEFk
ZCAnQCcgaWYgd2UgZGlkbid0IGhhdmUgb25lIGJlZm9yZS4KLSAgICAgICAgaWYgKGVuZCA9PSBo
b3N0RW5kUG9zIHx8IChlbmQgPT0gcGFzc3dvcmRFbmRQb3MgJiYgbV9zdHJpbmdbZW5kXSAhPSAn
QCcpKQorICAgICAgICBpZiAoZW5kID09IG1faG9zdEVuZCB8fCAoZW5kID09IG1fcGFzc3dvcmRF
bmQgJiYgbV9zdHJpbmdbZW5kXSAhPSAnQCcpKQogICAgICAgICAgICAgdS5hcHBlbmQoJ0AnKTsK
ICAgICB9IGVsc2UgewogICAgICAgICAvLyBSZW1vdmUgJ0AnIGlmIHdlIG5vdyBoYXZlIG5laXRo
ZXIgdXNlciBub3IgcGFzc3dvcmQuCi0gICAgICAgIGlmICh1c2VyRW5kUG9zID09IHBhc3N3b3Jk
RW5kUG9zICYmIGVuZCAhPSBob3N0RW5kUG9zICYmIG1fc3RyaW5nW2VuZF0gPT0gJ0AnKQorICAg
ICAgICBpZiAobV91c2VyRW5kID09IG1fcGFzc3dvcmRFbmQgJiYgZW5kICE9IG1faG9zdEVuZCAm
JiBtX3N0cmluZ1tlbmRdID09ICdAJykKICAgICAgICAgICAgIGVuZCArPSAxOwogICAgIH0KLSAg
ICBwYXJzZShtX3N0cmluZy5sZWZ0KHVzZXJTdGFydFBvcykgKyB1ICsgbV9zdHJpbmcuc3Vic3Ry
aW5nKGVuZCkpOworICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQobV91c2VyU3RhcnQpICsgdSArIG1f
c3RyaW5nLnN1YnN0cmluZyhlbmQpKTsKIH0KIAogdm9pZCBLVVJMOjpzZXRQYXNzKGNvbnN0IFN0
cmluZyYgcGFzc3dvcmQpCkBAIC02OTksMjcgKzcwNiwyNyBAQCB2b2lkIEtVUkw6OnNldFBhc3Mo
Y29uc3QgU3RyaW5nJiBwYXNzd29yCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBwOwot
ICAgIGludCBlbmQgPSBwYXNzd29yZEVuZFBvczsKKyAgICBpbnQgZW5kID0gbV9wYXNzd29yZEVu
ZDsKICAgICBpZiAoIXBhc3N3b3JkLmlzRW1wdHkoKSkgewogICAgICAgICBwID0gIjoiICsgcGFz
c3dvcmQgKyAiQCI7Ci0gICAgICAgIGlmICh1c2VyRW5kUG9zID09IHNjaGVtZUVuZFBvcyArIDEp
CisgICAgICAgIGlmIChtX3VzZXJFbmQgPT0gbV9zY2hlbWVFbmQgKyAxKQogICAgICAgICAgICAg
cCA9ICIvLyIgKyBwOwogICAgICAgICAvLyBFYXQgdGhlIGV4aXN0aW5nICdAJyBzaW5jZSB3ZSBh
cmUgZ29pbmcgdG8gYWRkIG91ciBvd24uCi0gICAgICAgIGlmIChlbmQgIT0gaG9zdEVuZFBvcyAm
JiBtX3N0cmluZ1tlbmRdID09ICdAJykKKyAgICAgICAgaWYgKGVuZCAhPSBtX2hvc3RFbmQgJiYg
bV9zdHJpbmdbZW5kXSA9PSAnQCcpCiAgICAgICAgICAgICBlbmQgKz0gMTsKICAgICB9IGVsc2Ug
ewogICAgICAgICAvLyBSZW1vdmUgJ0AnIGlmIHdlIG5vdyBoYXZlIG5laXRoZXIgdXNlciBub3Ig
cGFzc3dvcmQuCi0gICAgICAgIGlmICh1c2VyU3RhcnRQb3MgPT0gdXNlckVuZFBvcyAmJiBlbmQg
IT0gaG9zdEVuZFBvcyAmJiBtX3N0cmluZ1tlbmRdID09ICdAJykKKyAgICAgICAgaWYgKG1fdXNl
clN0YXJ0ID09IG1fdXNlckVuZCAmJiBlbmQgIT0gbV9ob3N0RW5kICYmIG1fc3RyaW5nW2VuZF0g
PT0gJ0AnKQogICAgICAgICAgICAgZW5kICs9IDE7CiAgICAgfQotICAgIHBhcnNlKG1fc3RyaW5n
LmxlZnQodXNlckVuZFBvcykgKyBwICsgbV9zdHJpbmcuc3Vic3RyaW5nKGVuZCkpOworICAgIHBh
cnNlKG1fc3RyaW5nLmxlZnQobV91c2VyRW5kKSArIHAgKyBtX3N0cmluZy5zdWJzdHJpbmcoZW5k
KSk7CiB9CiAKIHZvaWQgS1VSTDo6c2V0UmVmKGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpZiAo
IW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuOwotICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQocXVl
cnlFbmRQb3MpICsgKHMuaXNFbXB0eSgpID8gIiIgOiAiIyIgKyBzKSk7CisgICAgcGFyc2UobV9z
dHJpbmcubGVmdChtX3F1ZXJ5RW5kKSArIChzLmlzRW1wdHkoKSA/ICIiIDogIiMiICsgcykpOwog
fQogCiB2b2lkIEtVUkw6OnNldFF1ZXJ5KGNvbnN0IFN0cmluZyYgcXVlcnkpCkBAIC03MjgsOSAr
NzM1LDkgQEAgdm9pZCBLVVJMOjpzZXRRdWVyeShjb25zdCBTdHJpbmcmIHF1ZXJ5KQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoKHF1ZXJ5LmlzRW1wdHkoKSB8fCBxdWVyeVswXSAhPSAnPycp
ICYmICFxdWVyeS5pc051bGwoKSkKLSAgICAgICAgcGFyc2UobV9zdHJpbmcubGVmdChwYXRoRW5k
UG9zKSArICI/IiArIHF1ZXJ5ICsgbV9zdHJpbmcuc3Vic3RyaW5nKHF1ZXJ5RW5kUG9zKSk7Cisg
ICAgICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQobV9wYXRoRW5kKSArICI/IiArIHF1ZXJ5ICsgbV9z
dHJpbmcuc3Vic3RyaW5nKG1fcXVlcnlFbmQpKTsKICAgICBlbHNlCi0gICAgICAgIHBhcnNlKG1f
c3RyaW5nLmxlZnQocGF0aEVuZFBvcykgKyBxdWVyeSArIG1fc3RyaW5nLnN1YnN0cmluZyhxdWVy
eUVuZFBvcykpOworICAgICAgICBwYXJzZShtX3N0cmluZy5sZWZ0KG1fcGF0aEVuZCkgKyBxdWVy
eSArIG1fc3RyaW5nLnN1YnN0cmluZyhtX3F1ZXJ5RW5kKSk7CiAKIH0KIApAQCAtNzM5LDcgKzc0
Niw3IEBAIHZvaWQgS1VSTDo6c2V0UGF0aChjb25zdCBTdHJpbmcmIHMpCiAgICAgaWYgKCFtX2lz
VmFsaWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQocG9ydEVu
ZFBvcykgKyBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHMpICsgbV9zdHJpbmcuc3Vic3Ry
aW5nKHBhdGhFbmRQb3MpKTsKKyAgICBwYXJzZShtX3N0cmluZy5sZWZ0KG1fcG9ydEVuZCkgKyBl
bmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHMpICsgbV9zdHJpbmcuc3Vic3RyaW5nKG1fcGF0
aEVuZCkpOwogfQogCiBTdHJpbmcgS1VSTDo6cHJldHR5VVJMKCkgY29uc3QKQEAgLTc1NCw4ICs3
NjEsOCBAQCBTdHJpbmcgS1VSTDo6cHJldHR5VVJMKCkgY29uc3QKIAogICAgIFZlY3RvcjxVQ2hh
cj4gYXV0aG9yaXR5OwogCi0gICAgaWYgKGhvc3RFbmRQb3MgIT0gcGFzc3dvcmRFbmRQb3MpIHsK
LSAgICAgICAgaWYgKHVzZXJFbmRQb3MgIT0gdXNlclN0YXJ0UG9zKSB7CisgICAgaWYgKG1faG9z
dEVuZCAhPSBtX3Bhc3N3b3JkRW5kKSB7CisgICAgICAgIGlmIChtX3VzZXJFbmQgIT0gbV91c2Vy
U3RhcnQpIHsKICAgICAgICAgICAgIGFwcGVuZChhdXRob3JpdHksIHVzZXIoKSk7CiAgICAgICAg
ICAgICBhdXRob3JpdHkuYXBwZW5kKCdAJyk7CiAgICAgICAgIH0KQEAgLTc3OCw3ICs3ODUsNyBA
QCBTdHJpbmcgS1VSTDo6cHJldHR5VVJMKCkgY29uc3QKICAgICBhcHBlbmQocmVzdWx0LCBwYXRo
KCkpOwogICAgIGFwcGVuZChyZXN1bHQsIHF1ZXJ5KCkpOwogCi0gICAgaWYgKGZyYWdtZW50RW5k
UG9zICE9IHF1ZXJ5RW5kUG9zKSB7CisgICAgaWYgKG1fZnJhZ21lbnRFbmQgIT0gbV9xdWVyeUVu
ZCkgewogICAgICAgICByZXN1bHQuYXBwZW5kKCcjJyk7CiAgICAgICAgIGFwcGVuZChyZXN1bHQs
IHJlZigpKTsKICAgICB9CkBAIC05NjIsMzEgKzk2OSwyNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNv
bnN0IFN0cmluZyYgc3RyaW5nKQogCiB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgU3RyaW5nKiBvcmlnaW5hbFN0cmluZykKIHsKLSAgICBtX2lzVmFsaWQgPSB0cnVlOwot
CiAgICAgaWYgKCF1cmwgfHwgdXJsWzBdID09ICdcMCcpIHsKICAgICAgICAgLy8gdmFsaWQgVVJM
IG11c3QgYmUgbm9uLWVtcHR5CiAgICAgICAgIG1fc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcgPyAq
b3JpZ2luYWxTdHJpbmcgOiB1cmw7Ci0gICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAg
ICBtYXJrSW52YWxpZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFpc1Nj
aGVtZUZpcnN0Q2hhcih1cmxbMF0pKSB7CiAgICAgICAgIC8vIHNjaGVtZSBtdXN0IHN0YXJ0IHdp
dGggYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIKICAgICAgICAgbV9zdHJpbmcgPSBvcmlnaW5hbFN0
cmluZyA/ICpvcmlnaW5hbFN0cmluZyA6IHVybDsKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7
CisgICAgICAgIG1hcmtJbnZhbGlkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
bnQgc2NoZW1lRW5kID0gMDsKLSAKLSAgICB3aGlsZSAoaXNTY2hlbWVDaGFyKHVybFtzY2hlbWVF
bmRdKSkgeworICAgICB3aGlsZSAoaXNTY2hlbWVDaGFyKHVybFtzY2hlbWVFbmRdKSkKICAgICAg
ICAgc2NoZW1lRW5kKys7Ci0gICAgfQogCiAgICAgaWYgKHVybFtzY2hlbWVFbmRdICE9ICc6Jykg
ewogICAgICAgICBtX3N0cmluZyA9IG9yaWdpbmFsU3RyaW5nID8gKm9yaWdpbmFsU3RyaW5nIDog
dXJsOwotICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgbWFya0ludmFsaWQoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAzNiw3ICsxMDM5LDcgQEAgdm9pZCBLVVJM
OjpwYXJzZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IAogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgLy8gaW52YWxpZCBjaGFyYWN0ZXIKICAgICAgICAgICAgIG1fc3RyaW5nID0gb3JpZ2lu
YWxTdHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcgOiB1cmw7Ci0gICAgICAgICAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKKyAgICAgICAgICAgIG1hcmtJbnZhbGlkKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMTA1Myw3ICsxMDU2LDcgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAvLyBpbnZhbGlkIGNoYXJhY3RlcgogICAgICAgICAgICAgICAgIG1fc3RyaW5nID0gb3JpZ2lu
YWxTdHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcgOiB1cmw7Ci0gICAgICAgICAgICAgICAgbV9pc1Zh
bGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbWFya0ludmFsaWQoKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMDc3LDcg
KzEwODAsNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgCiAgICAg
ICAgIGlmICghaXNQYXRoU2VnbWVudEVuZENoYXIodXJsW3BvcnRFbmRdKSkgewogICAgICAgICAg
ICAgLy8gaW52YWxpZCBjaGFyYWN0ZXIKICAgICAgICAgICAgIG1fc3RyaW5nID0gb3JpZ2luYWxT
dHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcgOiB1cmw7Ci0gICAgICAgICAgICBtX2lzVmFsaWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIG1hcmtJbnZhbGlkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTE1MCw3ICsxMTUzLDcgQEAgdm9pZCBLVVJMOjpw
YXJzZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IAogICAgIGNvbnN0IGNoYXIgKnNjaGVtZUVuZFB0
ciA9IHVybCArIHNjaGVtZUVuZDsKICAgICB3aGlsZSAoc3RyUHRyIDwgc2NoZW1lRW5kUHRyKQog
ICAgICAgICAqcCsrID0gKnN0clB0cisrOwotICAgIHNjaGVtZUVuZFBvcyA9IHAgLSBidWZmZXIu
ZGF0YSgpOworICAgIG1fc2NoZW1lRW5kID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAKICAgICAvLyBD
aGVjayBpZiB3ZSdyZSBodHRwIG9yIGh0dHBzLgogICAgIGJvb2wgaXNIVFRQb3JIVFRQUyA9IG1h
dGNoTGV0dGVyKHVybFswXSwgJ2gnKQpAQCAtMTIwMCwxNCArMTIwMywxNCBAQCB2b2lkIEtVUkw6
OnBhcnNlKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgCiAgICAgICAgICpwKysgPSAnLyc7CiAgICAg
ICAgICpwKysgPSAnLyc7CiAKLSAgICAgICAgdXNlclN0YXJ0UG9zID0gcCAtIGJ1ZmZlci5kYXRh
KCk7CisgICAgICAgIG1fdXNlclN0YXJ0ID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAKICAgICAgICAg
Ly8gY29weSBpbiB0aGUgdXNlcgogICAgICAgICBzdHJQdHIgPSB1cmwgKyB1c2VyU3RhcnQ7CiAg
ICAgICAgIGNvbnN0IGNoYXIqIHVzZXJFbmRQdHIgPSB1cmwgKyB1c2VyRW5kOwogICAgICAgICB3
aGlsZSAoc3RyUHRyIDwgdXNlckVuZFB0cikKICAgICAgICAgICAgICpwKysgPSAqc3RyUHRyKys7
Ci0gICAgICAgIHVzZXJFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgbV91c2Vy
RW5kID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAKICAgICAgICAgLy8gY29weSBpbiB0aGUgcGFzc3dv
cmQKICAgICAgICAgaWYgKHBhc3N3b3JkRW5kICE9IHBhc3N3b3JkU3RhcnQpIHsKQEAgLTEyMTcs
MTAgKzEyMjAsMTAgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IAog
ICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IHBhc3N3b3JkRW5kUHRyKQogICAgICAgICAgICAg
ICAgICpwKysgPSAqc3RyUHRyKys7CiAgICAgICAgIH0KLSAgICAgICAgcGFzc3dvcmRFbmRQb3Mg
PSBwIC0gYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgbV9wYXNzd29yZEVuZCA9IHAgLSBidWZmZXIu
ZGF0YSgpOwogCiAgICAgICAgIC8vIElmIHdlIGhhZCBhbnkgdXNlciBpbmZvLCBhZGQgIkAiCi0g
ICAgICAgIGlmIChwIC0gYnVmZmVyLmRhdGEoKSAhPSB1c2VyU3RhcnRQb3MpCisgICAgICAgIGlm
IChwIC0gYnVmZmVyLmRhdGEoKSAhPSBtX3VzZXJTdGFydCkKICAgICAgICAgICAgICpwKysgPSAn
QCc7CiAKICAgICAgICAgLy8gY29weSBpbiB0aGUgaG9zdCwgZXhjZXB0IGluIHRoZSBjYXNlIG9m
IGEgZmlsZSBVUkwgd2l0aCBhdXRob3JpdHk9ImxvY2FsaG9zdCIKQEAgLTEyMzAsNyArMTIzMyw3
IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciogdXJsLCBjb25zdCAKICAgICAgICAgICAg
IHdoaWxlIChzdHJQdHIgPCBob3N0RW5kUHRyKQogICAgICAgICAgICAgICAgICpwKysgPSAqc3Ry
UHRyKys7CiAgICAgICAgIH0KLSAgICAgICAgaG9zdEVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgp
OworICAgICAgICBtX2hvc3RFbmQgPSBwIC0gYnVmZmVyLmRhdGEoKTsKIAogICAgICAgICAvLyBj
b3B5IGluIHRoZSBwb3J0CiAgICAgICAgIGlmIChob3N0RW5kICE9IHBvcnRTdGFydCkgewpAQCAt
MTI0MCw5ICsxMjQzLDkgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0
IAogICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IHBvcnRFbmRQdHIpCiAgICAgICAgICAgICAg
ICAgKnArKyA9ICpzdHJQdHIrKzsKICAgICAgICAgfQotICAgICAgICBwb3J0RW5kUG9zID0gcCAt
IGJ1ZmZlci5kYXRhKCk7CisgICAgICAgIG1fcG9ydEVuZCA9IHAgLSBidWZmZXIuZGF0YSgpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHVzZXJTdGFydFBvcyA9IHVzZXJFbmRQb3MgPSBwYXNzd29y
ZEVuZFBvcyA9IGhvc3RFbmRQb3MgPSBwb3J0RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7Cisg
ICAgICAgIG1fdXNlclN0YXJ0ID0gbV91c2VyRW5kID0gbV9wYXNzd29yZEVuZCA9IG1faG9zdEVu
ZCA9IG1fcG9ydEVuZCA9IHAgLSBidWZmZXIuZGF0YSgpOwogICAgIH0KIAogICAgIC8vIEZvciBj
YW5vbmljYWxpemF0aW9uLCBlbnN1cmUgd2UgaGF2ZSBhICcvJyBmb3Igbm8gcGF0aC4KQEAgLTEy
NTgsMzQgKzEyNjEsMzYgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0
IAogICAgIH0gZWxzZQogICAgICAgICBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKHAsIHVybCArIHBh
dGhTdGFydCwgcGF0aEVuZCAtIHBhdGhTdGFydCk7CiAKLSAgICBwYXRoRW5kUG9zID0gcCAtIGJ1
ZmZlci5kYXRhKCk7CisgICAgbV9wYXRoRW5kID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAKICAgICAv
LyBhZGQgcXVlcnksIGVzY2FwaW5nIGJhZCBjaGFyYWN0ZXJzCiAgICAgYXBwZW5kRXNjYXBpbmdC
YWRDaGFycyhwLCB1cmwgKyBxdWVyeVN0YXJ0LCBxdWVyeUVuZCAtIHF1ZXJ5U3RhcnQpOwotICAg
IHF1ZXJ5RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CisgICAgbV9xdWVyeUVuZCA9IHAgLSBi
dWZmZXIuZGF0YSgpOwogCiAgICAgLy8gYWRkIGZyYWdtZW50LCBlc2NhcGluZyBiYWQgY2hhcmFj
dGVycwogICAgIGlmIChmcmFnbWVudEVuZCAhPSBxdWVyeUVuZCkgewogICAgICAgICAqcCsrID0g
JyMnOwogICAgICAgICBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKHAsIHVybCArIGZyYWdtZW50U3Rh
cnQsIGZyYWdtZW50RW5kIC0gZnJhZ21lbnRTdGFydCk7CiAgICAgfQotICAgIGZyYWdtZW50RW5k
UG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CisgICAgbV9mcmFnbWVudEVuZCA9IHAgLSBidWZmZXIu
ZGF0YSgpOwogCiAgICAgQVNTRVJUKHAgLSBidWZmZXIuZGF0YSgpIDw9IChpbnQpYnVmZmVyLnNp
emUoKSk7CiAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgZW5kIHVwIGFjdHVhbGx5IGNoYW5naW5nIHRo
ZSBvcmlnaW5hbCBzdHJpbmcgYW5kCiAgICAgLy8gaXQgd2FzIGFscmVhZHkgaW4gYSBTdHJpbmcs
IHJldXNlIGl0IHRvIGF2b2lkIGV4dHJhIGFsbG9jYXRpb24uCi0gICAgaWYgKG9yaWdpbmFsU3Ry
aW5nICYmIHN0cm5jbXAoYnVmZmVyLmRhdGEoKSwgdXJsLCBmcmFnbWVudEVuZFBvcykgPT0gMCkK
KyAgICBpZiAob3JpZ2luYWxTdHJpbmcgJiYgc3RybmNtcChidWZmZXIuZGF0YSgpLCB1cmwsIG1f
ZnJhZ21lbnRFbmQpID09IDApCiAgICAgICAgIG1fc3RyaW5nID0gKm9yaWdpbmFsU3RyaW5nOwog
ICAgIGVsc2UKLSAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmcoYnVmZmVyLmRhdGEoKSwgZnJhZ21l
bnRFbmRQb3MpOworICAgICAgICBtX3N0cmluZyA9IFN0cmluZyhidWZmZXIuZGF0YSgpLCBtX2Zy
YWdtZW50RW5kKTsKKworICAgIG1faXNWYWxpZCA9IHRydWU7CiB9CiAKIGJvb2wgZXF1YWxJZ25v
cmluZ1JlZihjb25zdCBLVVJMJiBhLCBjb25zdCBLVVJMJiBiKQogewotICAgIGlmIChhLnF1ZXJ5
RW5kUG9zICE9IGIucXVlcnlFbmRQb3MpCisgICAgaWYgKGEubV9xdWVyeUVuZCAhPSBiLm1fcXVl
cnlFbmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBxdWVyeUxlbmd0aCA9
IGEucXVlcnlFbmRQb3M7CisgICAgdW5zaWduZWQgcXVlcnlMZW5ndGggPSBhLm1fcXVlcnlFbmQ7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHF1ZXJ5TGVuZ3RoOyArK2kpCiAgICAgICAg
IGlmIChhLnN0cmluZygpW2ldICE9IGIuc3RyaW5nKClbaV0pCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xNTMzLDggKzE1MzgsOCBAQCBib29sIEtVUkw6OmlzSGllcmFyY2hpY2FsKCkg
Y29uc3QKIHsKICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IEFTU0VSVChtX3N0cmluZ1tzY2hlbWVFbmRQb3NdID09ICc6Jyk7Ci0gICAgcmV0dXJuIG1fc3Ry
aW5nW3NjaGVtZUVuZFBvcyArIDFdID09ICcvJzsKKyAgICBBU1NFUlQobV9zdHJpbmdbbV9zY2hl
bWVFbmRdID09ICc6Jyk7CisgICAgcmV0dXJuIG1fc3RyaW5nW21fc2NoZW1lRW5kICsgMV0gPT0g
Jy8nOwogfQogCiB2b2lkIEtVUkw6OmNvcHlUb0J1ZmZlcihDaGFyQnVmZmVyJiBidWZmZXIpIGNv
bnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL0tVUkwuaAkocmV2aXNpb24gMzA3OTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0tV
UkwuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKKy8vIEZJWE1FOiBPdXIgdGVybWlub2xvZ3kgaGVy
ZSBpcyBhIGJpdCBpbmNvbnNpc3RlbnQuIFdlIHJlZmVyIHRvIHRoZSBwYXJ0CisvLyBhZnRlciB0
aGUgIiMiIGFzIHRoZSAiZnJhZ21lbnQiIGluIHNvbWUgcGxhY2VzIGFuZCB0aGUgInJlZiIgaW4g
b3RoZXJzLgorLy8gV2Ugc2hvdWxkIGZpeCB0aGUgdGVybWlub2xvZ3kgdG8gbWF0Y2ggdGhlIFVS
TCBhbmQgVVJJIFJGQ3MgYXMgY2xvc2VseQorLy8gYXMgcG9zc2libGUgdG8gcmVzb2x2ZSB0aGlz
LgorCiBjbGFzcyBLVVJMIHsKIHB1YmxpYzoKICAgICAvLyBHZW5lcmF0ZXMgYSBVUkwgd2hpY2gg
Y29udGFpbnMgYSBudWxsIHN0cmluZy4KQEAgLTE0MCw2ICsxNDUsMTAgQEAgcHVibGljOgogICAg
IG9wZXJhdG9yIGNvbnN0IFN0cmluZyYoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQogICAg
IG9wZXJhdG9yIEtKUzo6VVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9CiAKKyAg
ICB1bnNpZ25lZCBwYXRoU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3BvcnRFbmQ7IH0KKyAgICB1
bnNpZ25lZCBwYXRoRW5kKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoRW5kOyB9CisgICAgdW5zaWdu
ZWQgcGF0aEFmdGVyTGFzdFNsYXNoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoQWZ0ZXJMYXN0U2xh
c2g7IH0KKwogI2lmIFBMQVRGT1JNKENGKQogICAgIEtVUkwoQ0ZVUkxSZWYpOwogICAgIENGVVJM
UmVmIGNyZWF0ZUNGVVJMKCkgY29uc3Q7CkBAIC0xNjMsNiArMTcyLDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKIHByaXZhdGU6CisgICAgdm9pZCBtYXJrSW52YWxpZCgpOwogICAgIGJvb2wgaXNIaWVy
YXJjaGljYWwoKSBjb25zdDsKICAgICB2b2lkIGluaXQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFRleHRFbmNvZGluZyYpOwogICAgIHN0YXRpYyBib29sIHByb3RvY29sSXMoY29u
c3QgU3RyaW5nJiwgY29uc3QgY2hhciopOwpAQCAtMTc2LDE1ICsxODYsMTUgQEAgcHJpdmF0ZToK
IAogICAgIFN0cmluZyBtX3N0cmluZzsKICAgICBib29sIG1faXNWYWxpZDsKLSAgICBpbnQgc2No
ZW1lRW5kUG9zOwotICAgIGludCB1c2VyU3RhcnRQb3M7Ci0gICAgaW50IHVzZXJFbmRQb3M7Ci0g
ICAgaW50IHBhc3N3b3JkRW5kUG9zOwotICAgIGludCBob3N0RW5kUG9zOwotICAgIGludCBwb3J0
RW5kUG9zOwotICAgIGludCBwYXRoRW5kUG9zOwotICAgIGludCBxdWVyeUVuZFBvczsKLSAgICBp
bnQgZnJhZ21lbnRFbmRQb3M7CisgICAgaW50IG1fc2NoZW1lRW5kOworICAgIGludCBtX3VzZXJT
dGFydDsKKyAgICBpbnQgbV91c2VyRW5kOworICAgIGludCBtX3Bhc3N3b3JkRW5kOworICAgIGlu
dCBtX2hvc3RFbmQ7CisgICAgaW50IG1fcG9ydEVuZDsKKyAgICBpbnQgbV9wYXRoRW5kOworICAg
IGludCBtX3F1ZXJ5RW5kOworICAgIGludCBtX2ZyYWdtZW50RW5kOwogfTsKIAogYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19563</attachid>
            <date>2008-03-05 17:39:20 -0800</date>
            <delta_ts>2008-03-05 18:17:51 -0800</delta_ts>
            <desc>patch that adds new KURL features used by the main patch</desc>
            <filename>URLPatch.txt</filename>
            <type>text/plain</type>
            <size>33467</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDgxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMDgtMDMtMDUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gYWRk
IGZ1bmN0aW9ucyBnaXZpbmcgb2Zmc2V0cyB3aXRoaW4gYSBLVVJMLCBzbGF0ZWQgdG8gcmVwbGFj
ZSB0aGUKKyAgICAgICAgICBFbmNvZGVkVVJMIG9iamVjdCBpbiBDU1NTdHlsZVNlbGVjdG9yIChp
biBhIGZ1dHVyZSAidmlzaXRlZCBsaW5rIiBjaGFuZ2UpCisgICAgICAgIC0gY2hhZ25lZCBhbGwg
S1VSTCBkYXRhIG1lbWJlcnMgbmFtZXMgdG8gdXNlIHRoZSB0cmFkaXRpb25hbCBtXyBwcmVmaXgK
KyAgICAgICAgLSBpbml0aWFsaXplIGFsbCBtZW1iZXJzIHRvIDAgaW4gaW52YWxpZCBLVVJMcyBy
YXRoZXIgdGhhbiBoYXZpbmcgYWxsCisgICAgICAgICAgZnVuY3Rpb25zIGNoZWNrIG1faXNWYWxp
ZAorCisgICAgICAgICogcGxhdGZvcm0vS1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLVVJM
OjppbnZhbGlkYXRlKTogQWRkZWQuIEluaXRpYWxpemVzIGFsbCB0aGUgZmllbGRzIGV4Y2VwdCBm
b3IKKyAgICAgICAgbV9zdHJpbmcgdG8gdGhlICJpbnZhbGlkIiB2YWx1ZXMuIEZvciB1c2UgaW4g
dGhlIGVtcHR5IGNvbnN0cnVjdG9yIGFuZAorICAgICAgICBpbiB0aGUgaW5pdCBhbmQgcGFyc2Ug
ZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6aW5pdCk6IFR3ZWFrZWQgY29tbWVu
dHMuIENoYW5nZWQgYWxsIGNvZGUgcGF0aHMgdGhhdCByZXR1cm4KKyAgICAgICAgZWFybHkgdG8g
dXNlIHRoZSBpbnZhbGlkYXRlKCkgZnVuY3Rpb24uIFVwZGF0ZWQgZm9yIG1lbWJlciB2YXJpYWJs
ZSBuYW1lCisgICAgICAgIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpoYXNQYXRo
KTogVXBkYXRlZCBmb3IgbWVtYmVyIHZhcmlhYmxlIG5hbWUgY2hhbmdlcy4KKyAgICAgICAgUmVt
b3ZlIG5vdy11bm5lZWRlZCBjaGVjayBvZiBtX2lzVmFsaWQuCisgICAgICAgIChXZWJDb3JlOjpL
VVJMOjpsYXN0UGF0aENvbXBvbmVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6
cHJvdG9jb2wpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6Omhvc3QpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnBvcnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OktVUkw6OnBhc3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnVzZXIpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnJlZik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6S1VSTDo6aGFzUmVmKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpwcm90b2Nv
bElzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpxdWVyeSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6S1VSTDo6cGF0aCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6S1VS
TDo6c2V0UHJvdG9jb2wpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNldEhvc3Qp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNldFBvcnQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OktVUkw6OnNldEhvc3RBbmRQb3J0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpLVVJMOjpzZXRVc2VyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRQ
YXNzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRSZWYpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OktVUkw6OnNldFF1ZXJ5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpLVVJMOjpzZXRQYXRoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpwcmV0dHlV
UkwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQYXRoUmVtb3ZpbmdEb3RzKTogUmVt
b3ZlZCBicmFjZXMgdG8gbWF0Y2ggb3VyIGNvZGUgc3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpL
VVJMOjpwYXJzZSk6IENoYW5nZWQgYWxsIGNvZGUgcGF0aHMgdGhhdCByZXR1cm4gZWFybHkgdG8g
dXNlCisgICAgICAgIHRoZSBpbnZhbGlkYXRlIGZ1bmN0aW9uLiBNb3ZlZCBjb2RlIHRvIHNldCBt
X2lzVmFsaWQgdG8gdHJ1ZSB0byB0aGUgdmVyeQorICAgICAgICBlbmQgb2YgdGhlIGZ1bmN0aW9u
LiBSZW1vdmVkIGJyYWNlcyB0byBtYXRjaCBvdXIgY29kZSBzdHlsZS4gUmVtb3ZlZCBhbgorICAg
ICAgICBleHRyYSBjb3B5IG9mIHRoZSBwYXRoL3F1ZXJ5L2ZyYWdtZW50IGNvZGUgKHRoZXJlIHdl
cmUgdHdvIGlkZW50aWNhbCBjb3BpZXMKKyAgICAgICAgaW4gdGhlIHR3byBzaWRlcyBvZiBhbiBp
ZiBzdGF0ZW1lbnQpLiBSZW1vdmVkIHNvbWUgY29tbWVudGVkLW91dCBjb2RlLgorICAgICAgICBS
ZXZlcnNlZCBhbiBpZiBzdGF0bWVudC4gQWRkZWQgY29kZSB0byBzZXQgdGhlIG5ldyBtX3BhdGhB
ZnRlckxhc3RTbGFzaAorICAgICAgICBmaWVsZC4gVXBkYXRlZCBmb3IgbWVtYmVyIHZhcmlhYmxl
IG5hbWUgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdSZWYpOiBVcGRh
dGVkIGZvciBtZW1iZXIgdmFyaWFibGUgbmFtZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6
S1VSTDo6aXNIaWVyYXJjaGljYWwpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL0tVUkwu
aDogQWRkZWQgYSBGSVhNRSBhYm91dCByZWYgdnMuIGZyYWdtZW50LiBNYWRlIHRoZSBlbXB0eQor
ICAgICAgICBjb25zdHJ1Y3RvciBpbmxpbmUgYW5kIGNhbGxlZCB0aGUgbmV3IGludmFsaWRhdGUg
ZnVuY3Rpb24uIEFkZGVkIG5ldworICAgICAgICBwYXRoU3RhcnQsIHBhdGhFbmQsIGFuZCBwYXRo
QWZ0ZXJMYXN0U2xhc2ggZnVuY3Rpb25zLCBmb3IgdXNlIGluIHRoZQorICAgICAgICBuZXcgdmlz
aXRlZCBsaW5rIGNvZGUuIEFkZGVkIGFuIGludmFsaWRhdGUgZnVuY3Rpb24uIFJlbmFtZWQgYWxs
IHRoZQorICAgICAgICBkYXRhIG1lbWJlcnMgdG8gdXNlIHRoZSBtXyBwcmVmaXguCisKIDIwMDgt
MDMtMDUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTYW0uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDMwODEzKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDE2ICsyNTUsMjQg
QEAgc3RhdGljIGludCBmaW5kRmlyc3RPZihjb25zdCBVQ2hhciogcywgaQogICAgIHJldHVybiAt
MTsKIH0KIAotLy8gS1VSTAotCiBpbmxpbmUgYm9vbCBLVVJMOjpwcm90b2NvbElzKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyKiBwcm90b2NvbCkKIHsKICAgICByZXR1cm4gV2ViQ29y
ZTo6cHJvdG9jb2xJcyhzdHJpbmcsIHByb3RvY29sKTsKIH0KIAotS1VSTDo6S1VSTCgpCi0gICAg
OiBtX2lzVmFsaWQoZmFsc2UpCit2b2lkIEtVUkw6OmludmFsaWRhdGUoKQogeworICAgIG1faXNW
YWxpZCA9IGZhbHNlOworICAgIG1fc2NoZW1lRW5kID0gMDsKKyAgICBtX3VzZXJTdGFydCA9IDA7
CisgICAgbV91c2VyRW5kID0gMDsKKyAgICBtX3Bhc3N3b3JkRW5kID0gMDsKKyAgICBtX2hvc3RF
bmQgPSAwOworICAgIG1fcG9ydEVuZCA9IDA7CisgICAgbV9wYXRoRW5kID0gMDsKKyAgICBtX3Bh
dGhBZnRlckxhc3RTbGFzaCA9IDA7CisgICAgbV9xdWVyeUVuZCA9IDA7CisgICAgbV9mcmFnbWVu
dEVuZCA9IDA7CiB9CiAKIEtVUkw6OktVUkwoY29uc3QgY2hhciogdXJsKQpAQCAtMzE2LDEwICsz
MjQsMTEgQEAgS1VSTDo6S1VSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBTdHJpbgogCiB2b2lk
IEtVUkw6OmluaXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSwgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKLSAgICAvLyBBbGxvdyBhdCBsZWFzdCBhYnNv
bHV0ZSBVUkxzIHRvIHJlc29sdmUgYWdhaW5zdCBhbiBlbXB0eSBVUkwuCisgICAgLy8gQWxsb3cg
cmVzb2x1dGlvbnMgd2l0aCBhIG51bGwgb3IgZW1wdHkgYmFzZSBVUkwsIGJ1dCBub3Qgd2l0aCBh
bnkgb3RoZXIgaW52YWxpZCBvbmUuCisgICAgLy8gRklYTUU6IElzIHRoaXMgYSBnb29kIHJ1bGU/
CiAgICAgaWYgKCFiYXNlLm1faXNWYWxpZCAmJiAhYmFzZS5pc0VtcHR5KCkpIHsKICAgICAgICAg
bV9zdHJpbmcgPSByZWxhdGl2ZTsKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAg
IGludmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzg5LDEwICszOTgs
MTAgQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IAogICAgICAgICAv
LyB1bmxlc3MgdGhlIHJlbGF0aXZlIFVSTCBpcyBhIHNpbmdsZSBmcmFnbWVudC4KICAgICAgICAg
aWYgKCFiYXNlLmlzSGllcmFyY2hpY2FsKCkpIHsKICAgICAgICAgICAgIGlmIChzdHJbMF0gPT0g
JyMnKQotICAgICAgICAgICAgICAgIHBhcnNlKGJhc2UubV9zdHJpbmcubGVmdChiYXNlLnF1ZXJ5
RW5kUG9zKSArIHN0cik7CisgICAgICAgICAgICAgICAgcGFyc2UoYmFzZS5tX3N0cmluZy5sZWZ0
KGJhc2UubV9xdWVyeUVuZCkgKyBzdHIpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgbV9zdHJpbmcgPSByZWxhdGl2ZTsKLSAgICAgICAgICAgICAgICBtX2lzVmFsaWQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQwNSwyMCArNDE0LDIwIEBAIHZvaWQgS1VS
TDo6aW5pdChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCAKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlICcjJzoKICAgICAgICAgICAgIC8vIG11c3QgYmUgZnJhZ21lbnQtb25seSByZWZl
cmVuY2UKLSAgICAgICAgICAgIHBhcnNlKGJhc2UubV9zdHJpbmcubGVmdChiYXNlLnF1ZXJ5RW5k
UG9zKSArIHN0cik7CisgICAgICAgICAgICBwYXJzZShiYXNlLm1fc3RyaW5nLmxlZnQoYmFzZS5t
X3F1ZXJ5RW5kKSArIHN0cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnPyc6
CiAgICAgICAgICAgICAvLyBxdWVyeS1vbmx5IHJlZmVyZW5jZSwgc3BlY2lhbCBjYXNlIG5lZWRl
ZCBmb3Igbm9uLVVSTCByZXN1bHRzCi0gICAgICAgICAgICBwYXJzZShiYXNlLm1fc3RyaW5nLmxl
ZnQoYmFzZS5wYXRoRW5kUG9zKSArIHN0cik7CisgICAgICAgICAgICBwYXJzZShiYXNlLm1fc3Ry
aW5nLmxlZnQoYmFzZS5tX3BhdGhFbmQpICsgc3RyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlICcvJzoKICAgICAgICAgICAgIC8vIG11c3QgYmUgbmV0LXBhdGggb3IgYWJzb2x1
dGUtcGF0aCByZWZlcmVuY2UKICAgICAgICAgICAgIGlmIChzdHJbMV0gPT0gJy8nKSB7CiAgICAg
ICAgICAgICAgICAgLy8gbmV0LXBhdGgKLSAgICAgICAgICAgICAgICBwYXJzZShiYXNlLm1fc3Ry
aW5nLmxlZnQoYmFzZS5zY2hlbWVFbmRQb3MgKyAxKSArIHN0cik7CisgICAgICAgICAgICAgICAg
cGFyc2UoYmFzZS5tX3N0cmluZy5sZWZ0KGJhc2UubV9zY2hlbWVFbmQgKyAxKSArIHN0cik7CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIGFicy1wYXRoCi0gICAgICAg
ICAgICAgICAgcGFyc2UoYmFzZS5tX3N0cmluZy5sZWZ0KGJhc2UucG9ydEVuZFBvcykgKyBzdHIp
OworICAgICAgICAgICAgICAgIHBhcnNlKGJhc2UubV9zdHJpbmcubGVmdChiYXNlLm1fcG9ydEVu
ZCkgKyBzdHIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6CkBAIC00MjYsNyArNDM1LDcgQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwmIGJh
c2UsIGNvbnN0IAogICAgICAgICAgICAgICAgIC8vIG11c3QgYmUgcmVsYXRpdmUtcGF0aCByZWZl
cmVuY2UKIAogICAgICAgICAgICAgICAgIC8vIEJhc2UgcGFydCBwbHVzIHJlbGF0aXZlIHBhcnQg
cGx1cyBvbmUgcG9zc2libGUgc2xhc2ggYWRkZWQgaW4gYmV0d2VlbiBwbHVzIHRlcm1pbmF0aW5n
IFwwIGJ5dGUuCi0gICAgICAgICAgICAgICAgQ2hhckJ1ZmZlciBidWZmZXIoYmFzZS5wYXRoRW5k
UG9zICsgMSArIGxlbiArIDEpOworICAgICAgICAgICAgICAgIENoYXJCdWZmZXIgYnVmZmVyKGJh
c2UubV9wYXRoRW5kICsgMSArIGxlbiArIDEpOwogCiAgICAgICAgICAgICAgICAgY2hhciogYnVm
ZmVyUG9zID0gYnVmZmVyLmRhdGEoKTsKIApAQCAtNDM4LDEzICs0NDcsMTMgQEAgdm9pZCBLVVJM
Ojppbml0KGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IAogICAgICAgICAgICAgICAgICAgICBiYXNl
U3RyaW5nQnVmZmVyW2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oYmFzZUNoYXJhY3RlcnNbaV0pOwog
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJhc2VTdHJpbmcgPSBiYXNlU3RyaW5nQnVmZmVy
LmRhdGEoKTsKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBiYXNlU3RyaW5nU3RhcnQgPSBi
YXNlU3RyaW5nOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGhTdGFydCA9IGJhc2VT
dHJpbmdTdGFydCArIGJhc2UucG9ydEVuZFBvczsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBwYXRoU3RhcnQgPSBiYXNlU3RyaW5nU3RhcnQgKyBiYXNlLm1fcG9ydEVuZDsKICAgICAgICAg
ICAgICAgICB3aGlsZSAoYmFzZVN0cmluZ1N0YXJ0IDwgcGF0aFN0YXJ0KQogICAgICAgICAgICAg
ICAgICAgICAqYnVmZmVyUG9zKysgPSAqYmFzZVN0cmluZ1N0YXJ0Kys7CiAgICAgICAgICAgICAg
ICAgY2hhciogYnVmZmVyUGF0aFN0YXJ0ID0gYnVmZmVyUG9zOwogCiAgICAgICAgICAgICAgICAg
Ly8gbm93IGNvcHkgdGhlIGJhc2UgcGF0aAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJh
c2VTdHJpbmdFbmQgPSBiYXNlU3RyaW5nICsgYmFzZS5wYXRoRW5kUG9zOworICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGJhc2VTdHJpbmdFbmQgPSBiYXNlU3RyaW5nICsgYmFzZS5tX3BhdGhF
bmQ7CiAKICAgICAgICAgICAgICAgICAvLyBnbyBiYWNrIHRvIHRoZSBsYXN0IHNsYXNoCiAgICAg
ICAgICAgICAgICAgd2hpbGUgKGJhc2VTdHJpbmdFbmQgPiBiYXNlU3RyaW5nU3RhcnQgJiYgYmFz
ZVN0cmluZ0VuZFstMV0gIT0gJy8nKQpAQCAtNDUyLDcgKzQ2MSw3IEBAIHZvaWQgS1VSTDo6aW5p
dChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCAKIAogICAgICAgICAgICAgICAgIGlmIChiYXNlU3Ry
aW5nRW5kID09IGJhc2VTdHJpbmdTdGFydCkgewogICAgICAgICAgICAgICAgICAgICAvLyBubyBw
YXRoIGluIGJhc2UsIGFkZCBhIHBhdGggc2VwYXJhdG9yIGlmIG5lY2Vzc2FyeQotICAgICAgICAg
ICAgICAgICAgICBpZiAoYmFzZS5zY2hlbWVFbmRQb3MgKyAxICE9IGJhc2UucGF0aEVuZFBvcyAm
JiAqc3RyICE9ICdcMCcgJiYgKnN0ciAhPSAnPycgJiYgKnN0ciAhPSAnIycpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChiYXNlLm1fc2NoZW1lRW5kICsgMSAhPSBiYXNlLm1fcGF0aEVuZCAmJiAq
c3RyICYmICpzdHIgIT0gJz8nICYmICpzdHIgIT0gJyMnKQogICAgICAgICAgICAgICAgICAgICAg
ICAgKmJ1ZmZlclBvcysrID0gJy8nOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlclBvcyArPSBjb3B5UGF0aFJlbW92aW5nRG90cyhidWZmZXJQb3Ms
IGJhc2VTdHJpbmdTdGFydCwgMCwgYmFzZVN0cmluZ0VuZCAtIGJhc2VTdHJpbmdTdGFydCk7CkBA
IC00NjEsNyArNDcwLDcgQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0
IAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlbFN0cmluZ1N0YXJ0ID0gc3RyOwogICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlbFN0cmluZ1BvcyA9IHJlbFN0cmluZ1N0YXJ0Owog
Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCpyZWxTdHJpbmdQb3MgIT0gJ1wwJyAmJiAqcmVsU3Ry
aW5nUG9zICE9ICc/JyAmJiAqcmVsU3RyaW5nUG9zICE9ICcjJykgeworICAgICAgICAgICAgICAg
IHdoaWxlICgqcmVsU3RyaW5nUG9zICYmICpyZWxTdHJpbmdQb3MgIT0gJz8nICYmICpyZWxTdHJp
bmdQb3MgIT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxTdHJpbmdQb3NbMF0g
PT0gJy4nICYmIGJ1ZmZlclBvc1stMV0gPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNQYXRoU2VnbWVudEVuZENoYXIocmVsU3RyaW5nUG9zWzFdKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNraXAgb3ZlciAiLiIgc2VnbWVudApAQCAtNTA1LDcgKzUx
NCw3IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCAKIAogYm9vbCBL
VVJMOjpoYXNQYXRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pc1ZhbGlkICYmIHBhdGhFbmRQ
b3MgIT0gcG9ydEVuZFBvczsKKyAgICByZXR1cm4gbV9wYXRoRW5kICE9IG1fcG9ydEVuZDsKIH0K
IAogU3RyaW5nIEtVUkw6Omxhc3RQYXRoQ29tcG9uZW50KCkgY29uc3QKQEAgLTUxMywxMiArNTIy
LDEyIEBAIFN0cmluZyBLVVJMOjpsYXN0UGF0aENvbXBvbmVudCgpIGNvbnN0CiAgICAgaWYgKCFo
YXNQYXRoKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIGludCBlbmQgPSBwYXRo
RW5kUG9zIC0gMTsKKyAgICBpbnQgZW5kID0gbV9wYXRoRW5kIC0gMTsKICAgICBpZiAobV9zdHJp
bmdbZW5kXSA9PSAnLycpCiAgICAgICAgIC0tZW5kOwogCiAgICAgaW50IHN0YXJ0ID0gbV9zdHJp
bmcucmV2ZXJzZUZpbmQoJy8nLCBlbmQpOwotICAgIGlmIChzdGFydCA8IHBvcnRFbmRQb3MpCisg
ICAgaWYgKHN0YXJ0IDwgbV9wb3J0RW5kKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAg
KytzdGFydDsKIApAQCAtNTI3LDMwICs1MzYsMjEgQEAgU3RyaW5nIEtVUkw6Omxhc3RQYXRoQ29t
cG9uZW50KCkgY29uc3QKIAogU3RyaW5nIEtVUkw6OnByb3RvY29sKCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1faXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIG1f
c3RyaW5nLmxlZnQoc2NoZW1lRW5kUG9zKTsKKyAgICByZXR1cm4gbV9zdHJpbmcubGVmdChtX3Nj
aGVtZUVuZCk7CiB9CiAKIFN0cmluZyBLVVJMOjpob3N0KCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
aXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaW50IHN0YXJ0ID0gKHBh
c3N3b3JkRW5kUG9zID09IHVzZXJTdGFydFBvcykgPyBwYXNzd29yZEVuZFBvcyA6IHBhc3N3b3Jk
RW5kUG9zICsgMTsKLSAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1fc3RyaW5n
LnN1YnN0cmluZyhzdGFydCwgaG9zdEVuZFBvcyAtIHN0YXJ0KSk7CisgICAgaW50IHN0YXJ0ID0g
KG1fcGFzc3dvcmRFbmQgPT0gbV91c2VyU3RhcnQpID8gbV9wYXNzd29yZEVuZCA6IG1fcGFzc3dv
cmRFbmQgKyAxOworICAgIHJldHVybiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMobV9zdHJpbmcu
c3Vic3RyaW5nKHN0YXJ0LCBtX2hvc3RFbmQgLSBzdGFydCkpOwogfQogCiB1bnNpZ25lZCBzaG9y
dCBLVVJMOjpwb3J0KCkgY29uc3QKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBpZiAoaG9zdEVuZFBvcyA9PSBwb3J0RW5kUG9zKQorICAgIGlmIChtX2hv
c3RFbmQgPT0gbV9wb3J0RW5kKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludCBudW1iZXIg
PSBtX3N0cmluZy5zdWJzdHJpbmcoaG9zdEVuZFBvcyArIDEsIHBvcnRFbmRQb3MgLSBob3N0RW5k
UG9zIC0gMSkudG9JbnQoKTsKKyAgICBpbnQgbnVtYmVyID0gbV9zdHJpbmcuc3Vic3RyaW5nKG1f
aG9zdEVuZCArIDEsIG1fcG9ydEVuZCAtIG1faG9zdEVuZCAtIDEpLnRvSW50KCk7CiAgICAgaWYg
KG51bWJlciA8IDAgfHwgbnVtYmVyID4gMHhGRkZGKQogICAgICAgICByZXR1cm4gMDsKICAgICBy
ZXR1cm4gbnVtYmVyOwpAQCAtNTU4LDM0ICs1NTgsMjggQEAgdW5zaWduZWQgc2hvcnQgS1VSTDo6
cG9ydCgpIGNvbnN0CiAKIFN0cmluZyBLVVJMOjpwYXNzKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
aXNWYWxpZCkKKyAgICBpZiAobV9wYXNzd29yZEVuZCA9PSBtX3VzZXJFbmQpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAotICAgIGlmIChwYXNzd29yZEVuZFBvcyA9PSB1c2VyRW5kUG9zKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2Vx
dWVuY2VzKG1fc3RyaW5nLnN1YnN0cmluZyh1c2VyRW5kUG9zICsgMSwgcGFzc3dvcmRFbmRQb3Mg
LSB1c2VyRW5kUG9zIC0gMSkpOyAKKyAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2Vz
KG1fc3RyaW5nLnN1YnN0cmluZyhtX3VzZXJFbmQgKyAxLCBtX3Bhc3N3b3JkRW5kIC0gbV91c2Vy
RW5kIC0gMSkpOyAKIH0KIAogU3RyaW5nIEtVUkw6OnVzZXIoKSBjb25zdAogewotICAgIGlmICgh
bV9pc1ZhbGlkKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gZGVjb2Rl
VVJMRXNjYXBlU2VxdWVuY2VzKG1fc3RyaW5nLnN1YnN0cmluZyh1c2VyU3RhcnRQb3MsIHVzZXJF
bmRQb3MgLSB1c2VyU3RhcnRQb3MpKTsKKyAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVu
Y2VzKG1fc3RyaW5nLnN1YnN0cmluZyhtX3VzZXJTdGFydCwgbV91c2VyRW5kIC0gbV91c2VyU3Rh
cnQpKTsKIH0KIAogU3RyaW5nIEtVUkw6OnJlZigpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2lzVmFs
aWQgfHwgZnJhZ21lbnRFbmRQb3MgPT0gcXVlcnlFbmRQb3MpCisgICAgaWYgKG1fZnJhZ21lbnRF
bmQgPT0gbV9xdWVyeUVuZCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJu
IG1fc3RyaW5nLnN1YnN0cmluZyhxdWVyeUVuZFBvcyArIDEsIGZyYWdtZW50RW5kUG9zIC0gKHF1
ZXJ5RW5kUG9zICsgMSkpOworICAgIHJldHVybiBtX3N0cmluZy5zdWJzdHJpbmcobV9xdWVyeUVu
ZCArIDEsIG1fZnJhZ21lbnRFbmQgLSAobV9xdWVyeUVuZCArIDEpKTsKIH0KIAogYm9vbCBLVVJM
OjpoYXNSZWYoKSBjb25zdAogewotICAgIHJldHVybiBtX2lzVmFsaWQgJiYgZnJhZ21lbnRFbmRQ
b3MgIT0gcXVlcnlFbmRQb3M7CisgICAgcmV0dXJuIG1fZnJhZ21lbnRFbmQgIT0gbV9xdWVyeUVu
ZDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFzc2VydFByb3RvY29sSXNHb29kKGNvbnN0IGNo
YXIqIHByb3RvY29sKQpAQCAtNjA1LDI3ICs1OTksMjEgQEAgYm9vbCBLVVJMOjpwcm90b2NvbElz
KGNvbnN0IGNoYXIqIHByb3RvYwogICAgIGFzc2VydFByb3RvY29sSXNHb29kKHByb3RvY29sKTsK
ICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2NoZW1lRW5kUG9zOyArK2kpIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IG1fc2NoZW1lRW5kOyArK2kpIHsKICAgICAgICAgaWYgKCFwcm90b2NvbFtpXSB8fCB0b0FTQ0lJ
TG93ZXIobV9zdHJpbmdbaV0pICE9IHByb3RvY29sW2ldKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KLSAgICByZXR1cm4gIXByb3RvY29sW3NjaGVtZUVuZFBvc107IC8vIFdlIHNo
b3VsZCBoYXZlIGNvbnN1bWVkIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBhcmd1bWVudC4KKyAgICBy
ZXR1cm4gIXByb3RvY29sW21fc2NoZW1lRW5kXTsgLy8gV2Ugc2hvdWxkIGhhdmUgY29uc3VtZWQg
YWxsIGNoYXJhY3RlcnMgaW4gdGhlIGFyZ3VtZW50LgogfQogCiBTdHJpbmcgS1VSTDo6cXVlcnko
KSBjb25zdAogewotICAgIGlmICghbV9pc1ZhbGlkKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0KLSAgICByZXR1cm4gbV9zdHJpbmcuc3Vic3RyaW5nKHBhdGhFbmRQb3MsIHF1ZXJ5RW5kUG9z
IC0gcGF0aEVuZFBvcyk7IAorICAgIHJldHVybiBtX3N0cmluZy5zdWJzdHJpbmcobV9wYXRoRW5k
LCBtX3F1ZXJ5RW5kIC0gbV9wYXRoRW5kKTsgCiB9CiAKIFN0cmluZyBLVVJMOjpwYXRoKCkgY29u
c3QKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0g
ICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtX3N0cmluZy5zdWJzdHJpbmcocG9y
dEVuZFBvcywgcGF0aEVuZFBvcyAtIHBvcnRFbmRQb3MpKTsgCisgICAgcmV0dXJuIGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyhtX3N0cmluZy5zdWJzdHJpbmcobV9wb3J0RW5kLCBtX3BhdGhFbmQg
LSBtX3BvcnRFbmQpKTsgCiB9CiAKIHZvaWQgS1VSTDo6c2V0UHJvdG9jb2woY29uc3QgU3RyaW5n
JiBzKQpAQCAtNjM1LDcgKzYyMyw3IEBAIHZvaWQgS1VSTDo6c2V0UHJvdG9jb2woY29uc3QgU3Ry
aW5nJiBzKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcGFyc2UocyArIG1fc3RyaW5n
LnN1YnN0cmluZyhzY2hlbWVFbmRQb3MpKTsKKyAgICBwYXJzZShzICsgbV9zdHJpbmcuc3Vic3Ry
aW5nKG1fc2NoZW1lRW5kKSk7CiB9CiAKIHZvaWQgS1VSTDo6c2V0SG9zdChjb25zdCBTdHJpbmcm
IHMpCkBAIC02NDMsMTAgKzYzMSwxMCBAQCB2b2lkIEtVUkw6OnNldEhvc3QoY29uc3QgU3RyaW5n
JiBzKQogICAgIGlmICghbV9pc1ZhbGlkKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIHNs
YXNoU2xhc2hOZWVkZWQgPSB1c2VyU3RhcnRQb3MgPT0gc2NoZW1lRW5kUG9zICsgMTsKLSAgICBp
bnQgaG9zdFN0YXJ0ID0gKHBhc3N3b3JkRW5kUG9zID09IHVzZXJTdGFydFBvcykgPyBwYXNzd29y
ZEVuZFBvcyA6IHBhc3N3b3JkRW5kUG9zICsgMTsKKyAgICBib29sIHNsYXNoU2xhc2hOZWVkZWQg
PSBtX3VzZXJTdGFydCA9PSBtX3NjaGVtZUVuZCArIDE7CisgICAgaW50IGhvc3RTdGFydCA9ICht
X3Bhc3N3b3JkRW5kID09IG1fdXNlclN0YXJ0KSA/IG1fcGFzc3dvcmRFbmQgOiBtX3Bhc3N3b3Jk
RW5kICsgMTsKIAotICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQoaG9zdFN0YXJ0KSArIChzbGFzaFNs
YXNoTmVlZGVkID8gIi8vIiA6ICIiKSArIHMgKyBtX3N0cmluZy5zdWJzdHJpbmcoaG9zdEVuZFBv
cykpOworICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQoaG9zdFN0YXJ0KSArIChzbGFzaFNsYXNoTmVl
ZGVkID8gIi8vIiA6ICIiKSArIHMgKyBtX3N0cmluZy5zdWJzdHJpbmcobV9ob3N0RW5kKSk7CiB9
CiAKIHZvaWQgS1VSTDo6c2V0UG9ydCh1bnNpZ25lZCBzaG9ydCBpKQpAQCAtNjU0LDEwICs2NDIs
MTAgQEAgdm9pZCBLVVJMOjpzZXRQb3J0KHVuc2lnbmVkIHNob3J0IGkpCiAgICAgaWYgKCFtX2lz
VmFsaWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgY29sb25OZWVkZWQgPSBwb3J0RW5k
UG9zID09IGhvc3RFbmRQb3M7Ci0gICAgaW50IHBvcnRTdGFydCA9IChjb2xvbk5lZWRlZCA/IGhv
c3RFbmRQb3MgOiBob3N0RW5kUG9zICsgMSk7CisgICAgYm9vbCBjb2xvbk5lZWRlZCA9IG1fcG9y
dEVuZCA9PSBtX2hvc3RFbmQ7CisgICAgaW50IHBvcnRTdGFydCA9IChjb2xvbk5lZWRlZCA/IG1f
aG9zdEVuZCA6IG1faG9zdEVuZCArIDEpOwogCi0gICAgcGFyc2UobV9zdHJpbmcubGVmdChwb3J0
U3RhcnQpICsgKGNvbG9uTmVlZGVkID8gIjoiIDogIiIpICsgU3RyaW5nOjpudW1iZXIoaSkgKyBt
X3N0cmluZy5zdWJzdHJpbmcocG9ydEVuZFBvcykpOworICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQo
cG9ydFN0YXJ0KSArIChjb2xvbk5lZWRlZCA/ICI6IiA6ICIiKSArIFN0cmluZzo6bnVtYmVyKGkp
ICsgbV9zdHJpbmcuc3Vic3RyaW5nKG1fcG9ydEVuZCkpOwogfQogCiB2b2lkIEtVUkw6OnNldEhv
c3RBbmRQb3J0KGNvbnN0IFN0cmluZyYgaG9zdEFuZFBvcnQpCkBAIC02NjUsMTAgKzY1MywxMCBA
QCB2b2lkIEtVUkw6OnNldEhvc3RBbmRQb3J0KGNvbnN0IFN0cmluZyYgCiAgICAgaWYgKCFtX2lz
VmFsaWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgc2xhc2hTbGFzaE5lZWRlZCA9IHVz
ZXJTdGFydFBvcyA9PSBzY2hlbWVFbmRQb3MgKyAxOwotICAgIGludCBob3N0U3RhcnQgPSAocGFz
c3dvcmRFbmRQb3MgPT0gdXNlclN0YXJ0UG9zKSA/IHBhc3N3b3JkRW5kUG9zIDogcGFzc3dvcmRF
bmRQb3MgKyAxOworICAgIGJvb2wgc2xhc2hTbGFzaE5lZWRlZCA9IG1fdXNlclN0YXJ0ID09IG1f
c2NoZW1lRW5kICsgMTsKKyAgICBpbnQgaG9zdFN0YXJ0ID0gKG1fcGFzc3dvcmRFbmQgPT0gbV91
c2VyU3RhcnQpID8gbV9wYXNzd29yZEVuZCA6IG1fcGFzc3dvcmRFbmQgKyAxOwogCi0gICAgcGFy
c2UobV9zdHJpbmcubGVmdChob3N0U3RhcnQpICsgKHNsYXNoU2xhc2hOZWVkZWQgPyAiLy8iIDog
IiIpICsgaG9zdEFuZFBvcnQgKyBtX3N0cmluZy5zdWJzdHJpbmcocG9ydEVuZFBvcykpOworICAg
IHBhcnNlKG1fc3RyaW5nLmxlZnQoaG9zdFN0YXJ0KSArIChzbGFzaFNsYXNoTmVlZGVkID8gIi8v
IiA6ICIiKSArIGhvc3RBbmRQb3J0ICsgbV9zdHJpbmcuc3Vic3RyaW5nKG1fcG9ydEVuZCkpOwog
fQogCiB2b2lkIEtVUkw6OnNldFVzZXIoY29uc3QgU3RyaW5nJiB1c2VyKQpAQCAtNjc3LDIwICs2
NjUsMjAgQEAgdm9pZCBLVVJMOjpzZXRVc2VyKGNvbnN0IFN0cmluZyYgdXNlcikKICAgICAgICAg
cmV0dXJuOwogCiAgICAgU3RyaW5nIHU7Ci0gICAgaW50IGVuZCA9IHVzZXJFbmRQb3M7CisgICAg
aW50IGVuZCA9IG1fdXNlckVuZDsKICAgICBpZiAoIXVzZXIuaXNFbXB0eSgpKSB7CiAgICAgICAg
IHUgPSB1c2VyOwotICAgICAgICBpZiAodXNlclN0YXJ0UG9zID09IHNjaGVtZUVuZFBvcyArIDEp
CisgICAgICAgIGlmIChtX3VzZXJTdGFydCA9PSBtX3NjaGVtZUVuZCArIDEpCiAgICAgICAgICAg
ICB1ID0gIi8vIiArIHU7CiAgICAgICAgIC8vIEFkZCAnQCcgaWYgd2UgZGlkbid0IGhhdmUgb25l
IGJlZm9yZS4KLSAgICAgICAgaWYgKGVuZCA9PSBob3N0RW5kUG9zIHx8IChlbmQgPT0gcGFzc3dv
cmRFbmRQb3MgJiYgbV9zdHJpbmdbZW5kXSAhPSAnQCcpKQorICAgICAgICBpZiAoZW5kID09IG1f
aG9zdEVuZCB8fCAoZW5kID09IG1fcGFzc3dvcmRFbmQgJiYgbV9zdHJpbmdbZW5kXSAhPSAnQCcp
KQogICAgICAgICAgICAgdS5hcHBlbmQoJ0AnKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBS
ZW1vdmUgJ0AnIGlmIHdlIG5vdyBoYXZlIG5laXRoZXIgdXNlciBub3IgcGFzc3dvcmQuCi0gICAg
ICAgIGlmICh1c2VyRW5kUG9zID09IHBhc3N3b3JkRW5kUG9zICYmIGVuZCAhPSBob3N0RW5kUG9z
ICYmIG1fc3RyaW5nW2VuZF0gPT0gJ0AnKQorICAgICAgICBpZiAobV91c2VyRW5kID09IG1fcGFz
c3dvcmRFbmQgJiYgZW5kICE9IG1faG9zdEVuZCAmJiBtX3N0cmluZ1tlbmRdID09ICdAJykKICAg
ICAgICAgICAgIGVuZCArPSAxOwogICAgIH0KLSAgICBwYXJzZShtX3N0cmluZy5sZWZ0KHVzZXJT
dGFydFBvcykgKyB1ICsgbV9zdHJpbmcuc3Vic3RyaW5nKGVuZCkpOworICAgIHBhcnNlKG1fc3Ry
aW5nLmxlZnQobV91c2VyU3RhcnQpICsgdSArIG1fc3RyaW5nLnN1YnN0cmluZyhlbmQpKTsKIH0K
IAogdm9pZCBLVVJMOjpzZXRQYXNzKGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCkBAIC02OTksMjcg
KzY4NywyNyBAQCB2b2lkIEtVUkw6OnNldFBhc3MoY29uc3QgU3RyaW5nJiBwYXNzd29yCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFN0cmluZyBwOwotICAgIGludCBlbmQgPSBwYXNzd29yZEVuZFBv
czsKKyAgICBpbnQgZW5kID0gbV9wYXNzd29yZEVuZDsKICAgICBpZiAoIXBhc3N3b3JkLmlzRW1w
dHkoKSkgewogICAgICAgICBwID0gIjoiICsgcGFzc3dvcmQgKyAiQCI7Ci0gICAgICAgIGlmICh1
c2VyRW5kUG9zID09IHNjaGVtZUVuZFBvcyArIDEpCisgICAgICAgIGlmIChtX3VzZXJFbmQgPT0g
bV9zY2hlbWVFbmQgKyAxKQogICAgICAgICAgICAgcCA9ICIvLyIgKyBwOwogICAgICAgICAvLyBF
YXQgdGhlIGV4aXN0aW5nICdAJyBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gYWRkIG91ciBvd24uCi0g
ICAgICAgIGlmIChlbmQgIT0gaG9zdEVuZFBvcyAmJiBtX3N0cmluZ1tlbmRdID09ICdAJykKKyAg
ICAgICAgaWYgKGVuZCAhPSBtX2hvc3RFbmQgJiYgbV9zdHJpbmdbZW5kXSA9PSAnQCcpCiAgICAg
ICAgICAgICBlbmQgKz0gMTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBSZW1vdmUgJ0AnIGlm
IHdlIG5vdyBoYXZlIG5laXRoZXIgdXNlciBub3IgcGFzc3dvcmQuCi0gICAgICAgIGlmICh1c2Vy
U3RhcnRQb3MgPT0gdXNlckVuZFBvcyAmJiBlbmQgIT0gaG9zdEVuZFBvcyAmJiBtX3N0cmluZ1tl
bmRdID09ICdAJykKKyAgICAgICAgaWYgKG1fdXNlclN0YXJ0ID09IG1fdXNlckVuZCAmJiBlbmQg
IT0gbV9ob3N0RW5kICYmIG1fc3RyaW5nW2VuZF0gPT0gJ0AnKQogICAgICAgICAgICAgZW5kICs9
IDE7CiAgICAgfQotICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQodXNlckVuZFBvcykgKyBwICsgbV9z
dHJpbmcuc3Vic3RyaW5nKGVuZCkpOworICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQobV91c2VyRW5k
KSArIHAgKyBtX3N0cmluZy5zdWJzdHJpbmcoZW5kKSk7CiB9CiAKIHZvaWQgS1VSTDo6c2V0UmVm
KGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJu
OwotICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQocXVlcnlFbmRQb3MpICsgKHMuaXNFbXB0eSgpID8g
IiIgOiAiIyIgKyBzKSk7CisgICAgcGFyc2UobV9zdHJpbmcubGVmdChtX3F1ZXJ5RW5kKSArIChz
LmlzRW1wdHkoKSA/ICIiIDogIiMiICsgcykpOwogfQogCiB2b2lkIEtVUkw6OnNldFF1ZXJ5KGNv
bnN0IFN0cmluZyYgcXVlcnkpCkBAIC03MjgsOSArNzE2LDkgQEAgdm9pZCBLVVJMOjpzZXRRdWVy
eShjb25zdCBTdHJpbmcmIHF1ZXJ5KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoKHF1ZXJ5
LmlzRW1wdHkoKSB8fCBxdWVyeVswXSAhPSAnPycpICYmICFxdWVyeS5pc051bGwoKSkKLSAgICAg
ICAgcGFyc2UobV9zdHJpbmcubGVmdChwYXRoRW5kUG9zKSArICI/IiArIHF1ZXJ5ICsgbV9zdHJp
bmcuc3Vic3RyaW5nKHF1ZXJ5RW5kUG9zKSk7CisgICAgICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQo
bV9wYXRoRW5kKSArICI/IiArIHF1ZXJ5ICsgbV9zdHJpbmcuc3Vic3RyaW5nKG1fcXVlcnlFbmQp
KTsKICAgICBlbHNlCi0gICAgICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQocGF0aEVuZFBvcykgKyBx
dWVyeSArIG1fc3RyaW5nLnN1YnN0cmluZyhxdWVyeUVuZFBvcykpOworICAgICAgICBwYXJzZSht
X3N0cmluZy5sZWZ0KG1fcGF0aEVuZCkgKyBxdWVyeSArIG1fc3RyaW5nLnN1YnN0cmluZyhtX3F1
ZXJ5RW5kKSk7CiAKIH0KIApAQCAtNzM5LDcgKzcyNyw3IEBAIHZvaWQgS1VSTDo6c2V0UGF0aChj
b25zdCBTdHJpbmcmIHMpCiAgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQocG9ydEVuZFBvcykgKyBlbmNvZGVXaXRoVVJMRXNjYXBl
U2VxdWVuY2VzKHMpICsgbV9zdHJpbmcuc3Vic3RyaW5nKHBhdGhFbmRQb3MpKTsKKyAgICBwYXJz
ZShtX3N0cmluZy5sZWZ0KG1fcG9ydEVuZCkgKyBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2Vz
KHMpICsgbV9zdHJpbmcuc3Vic3RyaW5nKG1fcGF0aEVuZCkpOwogfQogCiBTdHJpbmcgS1VSTDo6
cHJldHR5VVJMKCkgY29uc3QKQEAgLTc1NCw4ICs3NDIsOCBAQCBTdHJpbmcgS1VSTDo6cHJldHR5
VVJMKCkgY29uc3QKIAogICAgIFZlY3RvcjxVQ2hhcj4gYXV0aG9yaXR5OwogCi0gICAgaWYgKGhv
c3RFbmRQb3MgIT0gcGFzc3dvcmRFbmRQb3MpIHsKLSAgICAgICAgaWYgKHVzZXJFbmRQb3MgIT0g
dXNlclN0YXJ0UG9zKSB7CisgICAgaWYgKG1faG9zdEVuZCAhPSBtX3Bhc3N3b3JkRW5kKSB7Cisg
ICAgICAgIGlmIChtX3VzZXJFbmQgIT0gbV91c2VyU3RhcnQpIHsKICAgICAgICAgICAgIGFwcGVu
ZChhdXRob3JpdHksIHVzZXIoKSk7CiAgICAgICAgICAgICBhdXRob3JpdHkuYXBwZW5kKCdAJyk7
CiAgICAgICAgIH0KQEAgLTc3OCw3ICs3NjYsNyBAQCBTdHJpbmcgS1VSTDo6cHJldHR5VVJMKCkg
Y29uc3QKICAgICBhcHBlbmQocmVzdWx0LCBwYXRoKCkpOwogICAgIGFwcGVuZChyZXN1bHQsIHF1
ZXJ5KCkpOwogCi0gICAgaWYgKGZyYWdtZW50RW5kUG9zICE9IHF1ZXJ5RW5kUG9zKSB7CisgICAg
aWYgKG1fZnJhZ21lbnRFbmQgIT0gbV9xdWVyeUVuZCkgewogICAgICAgICByZXN1bHQuYXBwZW5k
KCcjJyk7CiAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlZigpKTsKICAgICB9CkBAIC05MDcsMTgg
Kzg5NSwxNSBAQCBzdGF0aWMgaW50IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGNoYXIqIGRzCiAgICAg
ICAgICAgICAgICAgICAgIC8vICIuLiIgc2VnbWVudHMgLSB3ZSBjaG9vc2UgdG8gZHJvcCB0aGVt
IHNpbmNlIHNvbWUgd2ViIGNvbnRlbnQKICAgICAgICAgICAgICAgICAgICAgLy8gcmVsaWVzIG9u
IHRoaXMuCiAgICAgICAgICAgICAgICAgICAgIGJhc2VTdHJpbmdQb3MgKz0gMzsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGRzdCA+IGJ1ZmZlclBhdGhTdGFydCArIDEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGRzdCA+IGJ1ZmZlclBhdGhTdGFydCArIDEpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBkc3QtLTsKLSAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhlc2UgdHdvIHdoaWxlIGJsb2NrcyBkaWZmZXIgc3VidGx5LgogICAg
ICAgICAgICAgICAgICAgICAvLyBUaGUgZmlyc3QgaGVscHMgdG8gcmVtb3ZlIG11bHRpcGxlIGFk
am9pbmluZyBzbGFzaGVzIGFzIHdlIHJld2luZC4KICAgICAgICAgICAgICAgICAgICAgLy8gVGhl
ICsxIHRvIGJ1ZmZlclBhdGhTdGFydCBpbiB0aGUgZmlyc3Qgd2hpbGUgYmxvY2sgcHJldmVudHMg
ZWF0aW5nIGEgbGVhZGluZyBzbGFzaAotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZHN0ID4g
YnVmZmVyUGF0aFN0YXJ0ICsgMSAmJiBkc3RbLTFdID09ICcvJykgeworICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoZHN0ID4gYnVmZmVyUGF0aFN0YXJ0ICsgMSAmJiBkc3RbLTFdID09ICcvJykK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRzdC0tOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIHdoaWxlIChkc3QgPiBidWZmZXJQYXRoU3RhcnQgJiYgZHN0Wy0x
XSAhPSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGRzdCA+IGJ1ZmZlclBhdGhT
dGFydCAmJiBkc3RbLTFdICE9ICcvJykKICAgICAgICAgICAgICAgICAgICAgICAgIGRzdC0tOwot
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTk2MiwzMSArOTQ3LDI3IEBAIHZvaWQg
S1VSTDo6cGFyc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAKIHZvaWQgS1VSTDo6cGFyc2UoY29u
c3QgY2hhciogdXJsLCBjb25zdCBTdHJpbmcqIG9yaWdpbmFsU3RyaW5nKQogewotICAgIG1faXNW
YWxpZCA9IHRydWU7Ci0KICAgICBpZiAoIXVybCB8fCB1cmxbMF0gPT0gJ1wwJykgewogICAgICAg
ICAvLyB2YWxpZCBVUkwgbXVzdCBiZSBub24tZW1wdHkKICAgICAgICAgbV9zdHJpbmcgPSBvcmln
aW5hbFN0cmluZyA/ICpvcmlnaW5hbFN0cmluZyA6IHVybDsKLSAgICAgICAgbV9pc1ZhbGlkID0g
ZmFsc2U7CisgICAgICAgIGludmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmICghaXNTY2hlbWVGaXJzdENoYXIodXJsWzBdKSkgewogICAgICAgICAvLyBzY2hlbWUg
bXVzdCBzdGFydCB3aXRoIGFuIGFscGhhYmV0aWMgY2hhcmFjdGVyCiAgICAgICAgIG1fc3RyaW5n
ID0gb3JpZ2luYWxTdHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcgOiB1cmw7Ci0gICAgICAgIG1faXNW
YWxpZCA9IGZhbHNlOworICAgICAgICBpbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpbnQgc2NoZW1lRW5kID0gMDsKLSAKLSAgICB3aGlsZSAoaXNTY2hlbWVDaGFy
KHVybFtzY2hlbWVFbmRdKSkgeworICAgIHdoaWxlIChpc1NjaGVtZUNoYXIodXJsW3NjaGVtZUVu
ZF0pKQogICAgICAgICBzY2hlbWVFbmQrKzsKLSAgICB9CiAKICAgICBpZiAodXJsW3NjaGVtZUVu
ZF0gIT0gJzonKSB7CiAgICAgICAgIG1fc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcgPyAqb3JpZ2lu
YWxTdHJpbmcgOiB1cmw7Ci0gICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAgICBpbnZh
bGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMDQsMTUgKzk4NSwxNCBA
QCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgCiAgICAgaWYgKGhpZXJh
cmNoaWNhbCAmJiB1cmxbc2NoZW1lRW5kICsgMl0gPT0gJy8nKSB7CiAgICAgICAgIC8vIHBhcnQg
YWZ0ZXIgdGhlIHNjaGVtZSBtdXN0IGJlIGEgbmV0X3BhdGgsIHBhcnNlIHRoZSBhdXRob3JpdHkg
c2VjdGlvbgogCi0gICAgICAgIC8vIEZJWE1FOiBBdXRob3JpdHkgY2hhcmFjdGVycyBtYXkgYmUg
c2Nhbm5lZCB0d2ljZS4KKyAgICAgICAgLy8gRklYTUU6IEF1dGhvcml0eSBjaGFyYWN0ZXJzIG1h
eSBiZSBzY2FubmVkIHR3aWNlLCBhbmQgaXQgd291bGQgYmUgbmljZSB0byBiZSBmYXN0ZXIuCiAg
ICAgICAgIHVzZXJTdGFydCArPSAyOwogICAgICAgICB1c2VyRW5kID0gdXNlclN0YXJ0OwogCiAg
ICAgICAgIGludCBjb2xvblBvcyA9IDA7CiAgICAgICAgIHdoaWxlIChpc1VzZXJJbmZvQ2hhcih1
cmxbdXNlckVuZF0pKSB7Ci0gICAgICAgICAgICBpZiAodXJsW3VzZXJFbmRdID09ICc6JyAmJiBj
b2xvblBvcyA9PSAwKSB7CisgICAgICAgICAgICBpZiAodXJsW3VzZXJFbmRdID09ICc6JyAmJiBj
b2xvblBvcyA9PSAwKQogICAgICAgICAgICAgICAgIGNvbG9uUG9zID0gdXNlckVuZDsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHVzZXJFbmQrKzsKICAgICAgICAgfQogCkBAIC0xMDM2LDcg
KzEwMTYsNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgCiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBpbnZhbGlkIGNoYXJhY3RlcgogICAgICAgICAg
ICAgbV9zdHJpbmcgPSBvcmlnaW5hbFN0cmluZyA/ICpvcmlnaW5hbFN0cmluZyA6IHVybDsKLSAg
ICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTEwNDUsMjEgKzEwMjUsMTkgQEAg
dm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IAogICAgICAgICAvLyBJUFY2
IElQIGFkZHJlc3MKICAgICAgICAgaWYgKHVybFtob3N0RW5kXSA9PSAnWycpIHsKICAgICAgICAg
ICAgIGhvc3RFbmQrKzsKLSAgICAgICAgICAgIHdoaWxlIChpc0lQdjZDaGFyKHVybFtob3N0RW5k
XSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChpc0lQdjZDaGFyKHVybFtob3N0RW5kXSkpCiAgICAg
ICAgICAgICAgICAgaG9zdEVuZCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHVy
bFtob3N0RW5kXSA9PSAnXScpIHsKKyAgICAgICAgICAgIGlmICh1cmxbaG9zdEVuZF0gPT0gJ10n
KQogICAgICAgICAgICAgICAgIGhvc3RFbmQrKzsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBpbnZhbGlkIGNoYXJhY3RlcgogICAg
ICAgICAgICAgICAgIG1fc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcg
OiB1cmw7Ci0gICAgICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgaW52YWxpZGF0ZSgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdoaWxlIChpc0hvc3RuYW1lQ2hhcih1cmxb
aG9zdEVuZF0pKSB7CisgICAgICAgICAgICB3aGlsZSAoaXNIb3N0bmFtZUNoYXIodXJsW2hvc3RF
bmRdKSkKICAgICAgICAgICAgICAgICBob3N0RW5kKys7Ci0gICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmICh1cmxbaG9zdEVuZF0gPT0gJzonKSB7CkBAIC0xMDY3
LDkgKzEwNDUsOCBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgCiAg
CiAgICAgICAgICAgICAvLyBwb3NzaWJsZSBzdGFydCBvZiBwb3J0CiAgICAgICAgICAgICBwb3J0
RW5kID0gcG9ydFN0YXJ0OwotICAgICAgICAgICAgd2hpbGUgKGlzQVNDSUlEaWdpdCh1cmxbcG9y
dEVuZF0pKSB7CisgICAgICAgICAgICB3aGlsZSAoaXNBU0NJSURpZ2l0KHVybFtwb3J0RW5kXSkp
CiAgICAgICAgICAgICAgICAgcG9ydEVuZCsrOwotICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgcG9ydFN0YXJ0ID0gcG9ydEVuZCA9IGhvc3RFbmQ7CiAgICAgICAg
IH0KQEAgLTEwNzcsNyArMTA1NCw3IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciogdXJs
LCBjb25zdCAKICAgICAgICAgaWYgKCFpc1BhdGhTZWdtZW50RW5kQ2hhcih1cmxbcG9ydEVuZF0p
KSB7CiAgICAgICAgICAgICAvLyBpbnZhbGlkIGNoYXJhY3RlcgogICAgICAgICAgICAgbV9zdHJp
bmcgPSBvcmlnaW5hbFN0cmluZyA/ICpvcmlnaW5hbFN0cmluZyA6IHVybDsKLSAgICAgICAgICAg
IG1faXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTEwOTAsNTMgKzEwNjcsMjMg
QEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IAogCiAgICAgaW50IHBh
dGhTdGFydCA9IHBvcnRFbmQ7CiAgICAgaW50IHBhdGhFbmQgPSBwYXRoU3RhcnQ7Ci0gICAgaW50
IHF1ZXJ5U3RhcnQ7Ci0gICAgaW50IHF1ZXJ5RW5kOwotICAgIGludCBmcmFnbWVudFN0YXJ0Owot
ICAgIGludCBmcmFnbWVudEVuZDsKLQotICAgIGlmICghaGllcmFyY2hpY2FsKSB7Ci0gICAgICAg
IHdoaWxlICh1cmxbcGF0aEVuZF0gIT0gJ1wwJyAmJiB1cmxbcGF0aEVuZF0gIT0gJz8nICYmIHVy
bFtwYXRoRW5kXSAhPSAnIycpCi0gICAgICAgICAgICBwYXRoRW5kKys7Ci0KLSAgICAgICAgcXVl
cnlTdGFydCA9IHBhdGhFbmQ7Ci0gICAgICAgIHF1ZXJ5RW5kID0gcXVlcnlTdGFydDsKLSAgICAg
ICAgaWYgKHVybFtxdWVyeVN0YXJ0XSA9PSAnPycpIHsKLSAgICAgICAgICAgIHdoaWxlICh1cmxb
cXVlcnlFbmRdICE9ICdcMCcgJiYgdXJsW3F1ZXJ5RW5kXSAhPSAnIycpCi0gICAgICAgICAgICAg
ICAgcXVlcnlFbmQrKzsKLSAgICAgICAgfQorICAgIHdoaWxlICh1cmxbcGF0aEVuZF0gJiYgdXJs
W3BhdGhFbmRdICE9ICc/JyAmJiB1cmxbcGF0aEVuZF0gIT0gJyMnKQorICAgICAgICBwYXRoRW5k
Kys7CiAKLSAgICAgICAgZnJhZ21lbnRTdGFydCA9IHF1ZXJ5RW5kOwotICAgICAgICBmcmFnbWVu
dEVuZCA9IGZyYWdtZW50U3RhcnQ7Ci0gICAgICAgIGlmICh1cmxbZnJhZ21lbnRTdGFydF0gPT0g
JyMnKSB7Ci0gICAgICAgICAgICBmcmFnbWVudFN0YXJ0Kys7Ci0gICAgICAgICAgICBmcmFnbWVu
dEVuZCA9IGZyYWdtZW50U3RhcnQ7Ci0gICAgICAgICAgICB3aGlsZSAodXJsW2ZyYWdtZW50RW5k
XSAhPSAnXDAnKQotICAgICAgICAgICAgICAgIGZyYWdtZW50RW5kKys7Ci0gICAgICAgIH0KKyAg
ICBpbnQgcXVlcnlTdGFydCA9IHBhdGhFbmQ7CisgICAgaW50IHF1ZXJ5RW5kID0gcXVlcnlTdGFy
dDsKKyAgICBpZiAodXJsW3F1ZXJ5U3RhcnRdID09ICc/JykgeworICAgICAgICB3aGlsZSAodXJs
W3F1ZXJ5RW5kXSAmJiB1cmxbcXVlcnlFbmRdICE9ICcjJykKKyAgICAgICAgICAgIHF1ZXJ5RW5k
Kys7CiAgICAgfQotICAgIGVsc2UgewotICAgICAgICB3aGlsZSAodXJsW3BhdGhFbmRdICE9ICdc
MCcgJiYgdXJsW3BhdGhFbmRdICE9ICc/JyAmJiB1cmxbcGF0aEVuZF0gIT0gJyMnKSB7Ci0gICAg
ICAgICAgICBwYXRoRW5kKys7Ci0gICAgICAgIH0KIAotICAgICAgICBxdWVyeVN0YXJ0ID0gcGF0
aEVuZDsKLSAgICAgICAgcXVlcnlFbmQgPSBxdWVyeVN0YXJ0OwotICAgICAgICBpZiAodXJsW3F1
ZXJ5U3RhcnRdID09ICc/JykgewotICAgICAgICAgICAgd2hpbGUgKHVybFtxdWVyeUVuZF0gIT0g
J1wwJyAmJiB1cmxbcXVlcnlFbmRdICE9ICcjJykgewotICAgICAgICAgICAgICAgIHF1ZXJ5RW5k
Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmcmFnbWVudFN0YXJ0ID0g
cXVlcnlFbmQ7CisgICAgaW50IGZyYWdtZW50U3RhcnQgPSBxdWVyeUVuZDsKKyAgICBpbnQgZnJh
Z21lbnRFbmQgPSBmcmFnbWVudFN0YXJ0OworICAgIGlmICh1cmxbZnJhZ21lbnRTdGFydF0gPT0g
JyMnKSB7CisgICAgICAgIGZyYWdtZW50U3RhcnQrKzsKICAgICAgICAgZnJhZ21lbnRFbmQgPSBm
cmFnbWVudFN0YXJ0OwotICAgICAgICBpZiAodXJsW2ZyYWdtZW50U3RhcnRdID09ICcjJykgewot
ICAgICAgICAgICAgZnJhZ21lbnRTdGFydCsrOwotICAgICAgICAgICAgZnJhZ21lbnRFbmQgPSBm
cmFnbWVudFN0YXJ0OwotICAgICAgICAgICAgd2hpbGUgKHVybFtmcmFnbWVudEVuZF0gIT0gJ1ww
JykgewotICAgICAgICAgICAgICAgIGZyYWdtZW50RW5kKys7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KKyAgICAgICAgd2hpbGUgKHVybFtmcmFnbWVudEVuZF0pCisgICAgICAgICAgICBmcmFn
bWVudEVuZCsrOwogICAgIH0KIAogICAgIC8vIGFzc2VtYmxlIGl0IGFsbCwgcmVtZW1iZXJpbmcg
dGhlIHJlYWwgcmFuZ2VzCkBAIC0xMTUwLDE1ICsxMDk3LDEzIEBAIHZvaWQgS1VSTDo6cGFyc2Uo
Y29uc3QgY2hhciogdXJsLCBjb25zdCAKICAgICBjb25zdCBjaGFyICpzY2hlbWVFbmRQdHIgPSB1
cmwgKyBzY2hlbWVFbmQ7CiAgICAgd2hpbGUgKHN0clB0ciA8IHNjaGVtZUVuZFB0cikKICAgICAg
ICAgKnArKyA9ICpzdHJQdHIrKzsKLSAgICBzY2hlbWVFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEo
KTsKKyAgICBtX3NjaGVtZUVuZCA9IHAgLSBidWZmZXIuZGF0YSgpOwogCi0gICAgLy8gQ2hlY2sg
aWYgd2UncmUgaHR0cCBvciBodHRwcy4KICAgICBib29sIGlzSFRUUG9ySFRUUFMgPSBtYXRjaExl
dHRlcih1cmxbMF0sICdoJykKICAgICAgICAgJiYgbWF0Y2hMZXR0ZXIodXJsWzFdLCAndCcpCiAg
ICAgICAgICYmIG1hdGNoTGV0dGVyKHVybFsyXSwgJ3QnKQogICAgICAgICAmJiBtYXRjaExldHRl
cih1cmxbM10sICdwJykKLSAgICAgICAgJiYgKHVybFs0XSA9PSAnOicKLSAgICAgICAgICAgIHx8
IChtYXRjaExldHRlcih1cmxbNF0sICdzJykgJiYgdXJsWzVdID09ICc6JykpOworICAgICAgICAm
JiAodXJsWzRdID09ICc6JyB8fCAobWF0Y2hMZXR0ZXIodXJsWzRdLCAncycpICYmIHVybFs1XSA9
PSAnOicpKTsKIAogICAgIGJvb2wgaG9zdElzTG9jYWxIb3N0ID0gcG9ydEVuZCAtIHVzZXJTdGFy
dCA9PSA5CiAgICAgICAgICYmIG1hdGNoTGV0dGVyKHVybFt1c2VyU3RhcnRdLCAnbCcpCkBAIC0x
MTc4LDkgKzExMjMsNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
CiAgICAgICAgICYmIHVybFs0XSA9PSAnOic7CiAKICAgICAvLyBGaWxlIFVSTHMgbmVlZCBhIGhv
c3QgcGFydCB1bmxlc3MgaXQgaXMganVzdCBmaWxlOi8vIG9yIGZpbGU6Ly9sb2NhbGhvc3QKLSAg
ICBib29sIGRlZ2VuRmlsZVBhdGggPSBwYXRoU3RhcnQgPT0gcGF0aEVuZAotICAgICAgICAmJiAo
aG9zdFN0YXJ0ID09IGhvc3RFbmQKLSAgICAgICAgICAgIHx8IGhvc3RJc0xvY2FsSG9zdCk7Cisg
ICAgYm9vbCBkZWdlbkZpbGVQYXRoID0gcGF0aFN0YXJ0ID09IHBhdGhFbmQgJiYgKGhvc3RTdGFy
dCA9PSBob3N0RW5kIHx8IGhvc3RJc0xvY2FsSG9zdCk7CiAKICAgICBib29sIGhhdmVOb25Ib3N0
QXV0aG9yaXR5UGFydCA9IHVzZXJTdGFydCAhPSB1c2VyRW5kIHx8IHBhc3N3b3JkU3RhcnQgIT0g
cGFzc3dvcmRFbmQgfHwgcG9ydFN0YXJ0ICE9IHBvcnRFbmQ7CiAKQEAgLTExODgsMjYgKzExMzEs
MTggQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IAogICAgICpwKysg
PSAnOic7CiAKICAgICAvLyBpZiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBhdXRob3JpdHkgcGFydCBv
ciBhIGZpbGUgVVJMIC0gYWRkICIvLyIgYW5kIGF1dGhvcml0eQotICAgIGlmIChpc0ZpbGUgPyAh
ZGVnZW5GaWxlUGF0aAotICAgICAgICAgICAgICAgOiAoaGF2ZU5vbkhvc3RBdXRob3JpdHlQYXJ0
IHx8IGhvc3RTdGFydCAhPSBob3N0RW5kKSkgewotCi0vL2lmICgoaXNGaWxlICYmICFkZWdlbkZp
bGVQYXRoKSB8fCBoYXZlTm9uSG9zdEF1dGhvcml0eVBhcnQgfHwgaG9zdFN0YXJ0ICE9IGhvc3RF
bmQpIHsKLS8vIHN0aWxsIGFkZHMgLy8gZm9yIGZpbGU6Ly9sb2NhbGhvc3QsIGZpbGU6Ly8KLQot
Ly9pZiAoIShpc0ZpbGUgJiYgZGVnZW5GaWxlUGF0aCkgJiYgKGhhdmVOb25Ib3N0QXV0aG9yaXR5
UGFydCB8fCBob3N0U3RhcnQgIT0gaG9zdEVuZCkpIHsKLS8vZG9lc24ndCBhZGQgLy8gZm9yIHRo
aW5ncyBsaWtlIGZpbGU6Ly8vZm9vCi0KKyAgICBpZiAoaXNGaWxlID8gIWRlZ2VuRmlsZVBhdGgg
OiAoaGF2ZU5vbkhvc3RBdXRob3JpdHlQYXJ0IHx8IGhvc3RTdGFydCAhPSBob3N0RW5kKSkgewog
ICAgICAgICAqcCsrID0gJy8nOwogICAgICAgICAqcCsrID0gJy8nOwogCi0gICAgICAgIHVzZXJT
dGFydFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOworICAgICAgICBtX3VzZXJTdGFydCA9IHAgLSBi
dWZmZXIuZGF0YSgpOwogCiAgICAgICAgIC8vIGNvcHkgaW4gdGhlIHVzZXIKICAgICAgICAgc3Ry
UHRyID0gdXJsICsgdXNlclN0YXJ0OwogICAgICAgICBjb25zdCBjaGFyKiB1c2VyRW5kUHRyID0g
dXJsICsgdXNlckVuZDsKICAgICAgICAgd2hpbGUgKHN0clB0ciA8IHVzZXJFbmRQdHIpCiAgICAg
ICAgICAgICAqcCsrID0gKnN0clB0cisrOwotICAgICAgICB1c2VyRW5kUG9zID0gcCAtIGJ1ZmZl
ci5kYXRhKCk7CisgICAgICAgIG1fdXNlckVuZCA9IHAgLSBidWZmZXIuZGF0YSgpOwogCiAgICAg
ICAgIC8vIGNvcHkgaW4gdGhlIHBhc3N3b3JkCiAgICAgICAgIGlmIChwYXNzd29yZEVuZCAhPSBw
YXNzd29yZFN0YXJ0KSB7CkBAIC0xMjE3LDEwICsxMTUyLDEwIEBAIHZvaWQgS1VSTDo6cGFyc2Uo
Y29uc3QgY2hhciogdXJsLCBjb25zdCAKICAgICAgICAgICAgIHdoaWxlIChzdHJQdHIgPCBwYXNz
d29yZEVuZFB0cikKICAgICAgICAgICAgICAgICAqcCsrID0gKnN0clB0cisrOwogICAgICAgICB9
Ci0gICAgICAgIHBhc3N3b3JkRW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CisgICAgICAgIG1f
cGFzc3dvcmRFbmQgPSBwIC0gYnVmZmVyLmRhdGEoKTsKIAogICAgICAgICAvLyBJZiB3ZSBoYWQg
YW55IHVzZXIgaW5mbywgYWRkICJAIgotICAgICAgICBpZiAocCAtIGJ1ZmZlci5kYXRhKCkgIT0g
dXNlclN0YXJ0UG9zKQorICAgICAgICBpZiAocCAtIGJ1ZmZlci5kYXRhKCkgIT0gbV91c2VyU3Rh
cnQpCiAgICAgICAgICAgICAqcCsrID0gJ0AnOwogCiAgICAgICAgIC8vIGNvcHkgaW4gdGhlIGhv
c3QsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhIGZpbGUgVVJMIHdpdGggYXV0aG9yaXR5PSJsb2Nh
bGhvc3QiCkBAIC0xMjMwLDcgKzExNjUsNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgCiAgICAgICAgICAgICB3aGlsZSAoc3RyUHRyIDwgaG9zdEVuZFB0cikKICAg
ICAgICAgICAgICAgICAqcCsrID0gKnN0clB0cisrOwogICAgICAgICB9Ci0gICAgICAgIGhvc3RF
bmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgbV9ob3N0RW5kID0gcCAtIGJ1ZmZl
ci5kYXRhKCk7CiAKICAgICAgICAgLy8gY29weSBpbiB0aGUgcG9ydAogICAgICAgICBpZiAoaG9z
dEVuZCAhPSBwb3J0U3RhcnQpIHsKQEAgLTEyNDAsOSArMTE3NSw5IEBAIHZvaWQgS1VSTDo6cGFy
c2UoY29uc3QgY2hhciogdXJsLCBjb25zdCAKICAgICAgICAgICAgIHdoaWxlIChzdHJQdHIgPCBw
b3J0RW5kUHRyKQogICAgICAgICAgICAgICAgICpwKysgPSAqc3RyUHRyKys7CiAgICAgICAgIH0K
LSAgICAgICAgcG9ydEVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOworICAgICAgICBtX3BvcnRF
bmQgPSBwIC0gYnVmZmVyLmRhdGEoKTsKICAgICB9IGVsc2UgewotICAgICAgICB1c2VyU3RhcnRQ
b3MgPSB1c2VyRW5kUG9zID0gcGFzc3dvcmRFbmRQb3MgPSBob3N0RW5kUG9zID0gcG9ydEVuZFBv
cyA9IHAgLSBidWZmZXIuZGF0YSgpOworICAgICAgICBtX3VzZXJTdGFydCA9IG1fdXNlckVuZCA9
IG1fcGFzc3dvcmRFbmQgPSBtX2hvc3RFbmQgPSBtX3BvcnRFbmQgPSBwIC0gYnVmZmVyLmRhdGEo
KTsKICAgICB9CiAKICAgICAvLyBGb3IgY2Fub25pY2FsaXphdGlvbiwgZW5zdXJlIHdlIGhhdmUg
YSAnLycgZm9yIG5vIHBhdGguCkBAIC0xMjUxLDQxICsxMTg2LDUwIEBAIHZvaWQgS1VSTDo6cGFy
c2UoY29uc3QgY2hhciogdXJsLCBjb25zdCAKICAgICAgICAgKnArKyA9ICcvJzsKIAogICAgIC8v
IGFkZCBwYXRoLCBlc2NhcGluZyBiYWQgY2hhcmFjdGVycwotICAgIGlmIChoaWVyYXJjaGljYWwg
JiYgaGFzU2xhc2hEb3RPckRvdERvdCh1cmwpKSB7Ci0gICAgICAgIENoYXJCdWZmZXIgcGF0aF9i
dWZmZXIocGF0aEVuZCAtIHBhdGhTdGFydCArIDEpOwotICAgICAgICBjb3B5UGF0aFJlbW92aW5n
RG90cyhwYXRoX2J1ZmZlci5kYXRhKCksIHVybCwgcGF0aFN0YXJ0LCBwYXRoRW5kKTsKLSAgICAg
ICAgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCBwYXRoX2J1ZmZlci5kYXRhKCksIHN0cmxlbihw
YXRoX2J1ZmZlci5kYXRhKCkpKTsKLSAgICB9IGVsc2UKKyAgICBpZiAoIWhpZXJhcmNoaWNhbCB8
fCAhaGFzU2xhc2hEb3RPckRvdERvdCh1cmwpKQogICAgICAgICBhcHBlbmRFc2NhcGluZ0JhZENo
YXJzKHAsIHVybCArIHBhdGhTdGFydCwgcGF0aEVuZCAtIHBhdGhTdGFydCk7CisgICAgZWxzZSB7
CisgICAgICAgIENoYXJCdWZmZXIgcGF0aEJ1ZmZlcihwYXRoRW5kIC0gcGF0aFN0YXJ0ICsgMSk7
CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBjb3B5UGF0aFJlbW92aW5nRG90cyhwYXRoQnVmZmVy
LmRhdGEoKSwgdXJsLCBwYXRoU3RhcnQsIHBhdGhFbmQpOworICAgICAgICBhcHBlbmRFc2NhcGlu
Z0JhZENoYXJzKHAsIHBhdGhCdWZmZXIuZGF0YSgpLCBsZW5ndGgpOworICAgIH0KKworICAgIG1f
cGF0aEVuZCA9IHAgLSBidWZmZXIuZGF0YSgpOwogCi0gICAgcGF0aEVuZFBvcyA9IHAgLSBidWZm
ZXIuZGF0YSgpOworICAgIG1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV9wb3J0RW5kOworICAgIGZv
ciAoaW50IGkgPSBtX3BvcnRFbmQ7IGkgPCBtX3BhdGhFbmQ7ICsraSkgeworICAgICAgICBpZiAo
YnVmZmVyW2ldID09ICcvJykKKyAgICAgICAgICAgIG1fcGF0aEFmdGVyTGFzdFNsYXNoID0gaTsK
KyAgICB9CiAKICAgICAvLyBhZGQgcXVlcnksIGVzY2FwaW5nIGJhZCBjaGFyYWN0ZXJzCiAgICAg
YXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCB1cmwgKyBxdWVyeVN0YXJ0LCBxdWVyeUVuZCAtIHF1
ZXJ5U3RhcnQpOwotICAgIHF1ZXJ5RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CisgICAgbV9x
dWVyeUVuZCA9IHAgLSBidWZmZXIuZGF0YSgpOwogCiAgICAgLy8gYWRkIGZyYWdtZW50LCBlc2Nh
cGluZyBiYWQgY2hhcmFjdGVycwogICAgIGlmIChmcmFnbWVudEVuZCAhPSBxdWVyeUVuZCkgewog
ICAgICAgICAqcCsrID0gJyMnOwogICAgICAgICBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKHAsIHVy
bCArIGZyYWdtZW50U3RhcnQsIGZyYWdtZW50RW5kIC0gZnJhZ21lbnRTdGFydCk7CiAgICAgfQot
ICAgIGZyYWdtZW50RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CisgICAgbV9mcmFnbWVudEVu
ZCA9IHAgLSBidWZmZXIuZGF0YSgpOwogCi0gICAgQVNTRVJUKHAgLSBidWZmZXIuZGF0YSgpIDw9
IChpbnQpYnVmZmVyLnNpemUoKSk7CisgICAgQVNTRVJUKHAgLSBidWZmZXIuZGF0YSgpIDw9IHN0
YXRpY19jYXN0PGludD4oYnVmZmVyLnNpemUoKSkpOwogCiAgICAgLy8gSWYgd2UgZGlkbid0IGVu
ZCB1cCBhY3R1YWxseSBjaGFuZ2luZyB0aGUgb3JpZ2luYWwgc3RyaW5nIGFuZAogICAgIC8vIGl0
IHdhcyBhbHJlYWR5IGluIGEgU3RyaW5nLCByZXVzZSBpdCB0byBhdm9pZCBleHRyYSBhbGxvY2F0
aW9uLgotICAgIGlmIChvcmlnaW5hbFN0cmluZyAmJiBzdHJuY21wKGJ1ZmZlci5kYXRhKCksIHVy
bCwgZnJhZ21lbnRFbmRQb3MpID09IDApCisgICAgaWYgKG9yaWdpbmFsU3RyaW5nICYmIHN0cm5j
bXAoYnVmZmVyLmRhdGEoKSwgdXJsLCBtX2ZyYWdtZW50RW5kKSA9PSAwKQogICAgICAgICBtX3N0
cmluZyA9ICpvcmlnaW5hbFN0cmluZzsKICAgICBlbHNlCi0gICAgICAgIG1fc3RyaW5nID0gU3Ry
aW5nKGJ1ZmZlci5kYXRhKCksIGZyYWdtZW50RW5kUG9zKTsKKyAgICAgICAgbV9zdHJpbmcgPSBT
dHJpbmcoYnVmZmVyLmRhdGEoKSwgbV9mcmFnbWVudEVuZCk7CisKKyAgICBtX2lzVmFsaWQgPSB0
cnVlOwogfQogCiBib29sIGVxdWFsSWdub3JpbmdSZWYoY29uc3QgS1VSTCYgYSwgY29uc3QgS1VS
TCYgYikKIHsKLSAgICBpZiAoYS5xdWVyeUVuZFBvcyAhPSBiLnF1ZXJ5RW5kUG9zKQorICAgIGlm
IChhLm1fcXVlcnlFbmQgIT0gYi5tX3F1ZXJ5RW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgdW5zaWduZWQgcXVlcnlMZW5ndGggPSBhLnF1ZXJ5RW5kUG9zOworICAgIHVuc2lnbmVkIHF1
ZXJ5TGVuZ3RoID0gYS5tX3F1ZXJ5RW5kOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBx
dWVyeUxlbmd0aDsgKytpKQogICAgICAgICBpZiAoYS5zdHJpbmcoKVtpXSAhPSBiLnN0cmluZygp
W2ldKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTUzMyw4ICsxNDc3LDggQEAgYm9v
bCBLVVJMOjppc0hpZXJhcmNoaWNhbCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQobV9zdHJpbmdbc2NoZW1lRW5kUG9zXSA9
PSAnOicpOwotICAgIHJldHVybiBtX3N0cmluZ1tzY2hlbWVFbmRQb3MgKyAxXSA9PSAnLyc7Cisg
ICAgQVNTRVJUKG1fc3RyaW5nW21fc2NoZW1lRW5kXSA9PSAnOicpOworICAgIHJldHVybiBtX3N0
cmluZ1ttX3NjaGVtZUVuZCArIDFdID09ICcvJzsKIH0KIAogdm9pZCBLVVJMOjpjb3B5VG9CdWZm
ZXIoQ2hhckJ1ZmZlciYgYnVmZmVyKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHJldmlzaW9uIDMwODEz
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEwICs0
OCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRleHRFbmNvZGluZzsKIAorLy8g
RklYTUU6IE91ciB0ZXJtaW5vbG9neSBoZXJlIGlzIGEgYml0IGluY29uc2lzdGVudC4gV2UgcmVm
ZXIgdG8gdGhlIHBhcnQKKy8vIGFmdGVyIHRoZSAiIyIgYXMgdGhlICJmcmFnbWVudCIgaW4gc29t
ZSBwbGFjZXMgYW5kIHRoZSAicmVmIiBpbiBvdGhlcnMuCisvLyBXZSBzaG91bGQgZml4IHRoZSB0
ZXJtaW5vbG9neSB0byBtYXRjaCB0aGUgVVJMIGFuZCBVUkkgUkZDcyBhcyBjbG9zZWx5CisvLyBh
cyBwb3NzaWJsZSB0byByZXNvbHZlIHRoaXMuCisKIGNsYXNzIEtVUkwgewogcHVibGljOgogICAg
IC8vIEdlbmVyYXRlcyBhIFVSTCB3aGljaCBjb250YWlucyBhIG51bGwgc3RyaW5nLgotICAgIEtV
UkwoKTsKKyAgICBLVVJMKCkgeyBpbnZhbGlkYXRlKCk7IH0KIAogICAgIC8vIFRoZSBhcmd1bWVu
dCBpcyBhbiBhYnNvbHV0ZSBVUkwgc3RyaW5nLiBUaGUgc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUK
ICAgICAvLyBhbHJlYWR5IGVuY29kZWQuCkBAIC0xNDAsNiArMTQ1LDEwIEBAIHB1YmxpYzoKICAg
ICBvcGVyYXRvciBjb25zdCBTdHJpbmcmKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KICAg
ICBvcGVyYXRvciBLSlM6OlVTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQogCisg
ICAgdW5zaWduZWQgcGF0aFN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9wb3J0RW5kOyB9CisgICAg
dW5zaWduZWQgcGF0aEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aEVuZDsgfQorICAgIHVuc2ln
bmVkIHBhdGhBZnRlckxhc3RTbGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aEFmdGVyTGFzdFNs
YXNoOyB9CisKICNpZiBQTEFURk9STShDRikKICAgICBLVVJMKENGVVJMUmVmKTsKICAgICBDRlVS
TFJlZiBjcmVhdGVDRlVSTCgpIGNvbnN0OwpAQCAtMTYzLDYgKzE3Miw3IEBAIHB1YmxpYzoKICNl
bmRpZgogCiBwcml2YXRlOgorICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogICAgIGJvb2wgaXNIaWVy
YXJjaGljYWwoKSBjb25zdDsKICAgICB2b2lkIGluaXQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFRleHRFbmNvZGluZyYpOwogICAgIHN0YXRpYyBib29sIHByb3RvY29sSXMoY29u
c3QgU3RyaW5nJiwgY29uc3QgY2hhciopOwpAQCAtMTc2LDE1ICsxODYsMTYgQEAgcHJpdmF0ZToK
IAogICAgIFN0cmluZyBtX3N0cmluZzsKICAgICBib29sIG1faXNWYWxpZDsKLSAgICBpbnQgc2No
ZW1lRW5kUG9zOwotICAgIGludCB1c2VyU3RhcnRQb3M7Ci0gICAgaW50IHVzZXJFbmRQb3M7Ci0g
ICAgaW50IHBhc3N3b3JkRW5kUG9zOwotICAgIGludCBob3N0RW5kUG9zOwotICAgIGludCBwb3J0
RW5kUG9zOwotICAgIGludCBwYXRoRW5kUG9zOwotICAgIGludCBxdWVyeUVuZFBvczsKLSAgICBp
bnQgZnJhZ21lbnRFbmRQb3M7CisgICAgaW50IG1fc2NoZW1lRW5kOworICAgIGludCBtX3VzZXJT
dGFydDsKKyAgICBpbnQgbV91c2VyRW5kOworICAgIGludCBtX3Bhc3N3b3JkRW5kOworICAgIGlu
dCBtX2hvc3RFbmQ7CisgICAgaW50IG1fcG9ydEVuZDsKKyAgICBpbnQgbV9wYXRoQWZ0ZXJMYXN0
U2xhc2g7CisgICAgaW50IG1fcGF0aEVuZDsKKyAgICBpbnQgbV9xdWVyeUVuZDsKKyAgICBpbnQg
bV9mcmFnbWVudEVuZDsKIH07CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLVVJMJiwgY29uc3Qg
S1VSTCYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19564</attachid>
            <date>2008-03-05 18:17:35 -0800</date>
            <delta_ts>2008-03-05 19:05:00 -0800</delta_ts>
            <desc>patch, with fixes requested by Mitz</desc>
            <filename>VisitedPatch.txt</filename>
            <type>text/plain</type>
            <size>143705</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDgxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTMgQEAKKzIwMDgtMDMtMDUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZml4
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTI2CisgICAgICAgICAg
UkVHUkVTU0lPTjogaWZyYW1lcyBhcmUgYWRkZWQgdG8gU2FmYXJpJ3MgSGlzdG9yeSBtZW51Cisg
ICAgICAgICAgYnkgc2VwYXJhdGluZyB0aGUgdmlzaXRlZCBsaW5rIG1hY2hpbmVyeSBmcm9tIGds
b2JhbCBoaXN0b3J5CisKKyAgICAgICAgVGhpcyBzaG91bGQgYWxzbyBtYWtlIHBhZ2UgbG9hZGlu
ZyBmYXN0ZXIgZHVlIHRvIG1vcmUgZWZmaWNpZW50IHZpc2l0ZWQgbGluayBjb2xvcmluZy4KKwor
ICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6IFVwZGF0ZWQuCisgICAgICAgICogV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IEFkZGVkIFBhZ2VHcm91cC5oL2NwcCwgcmVtb3ZlZCBHbG9i
YWxIaXN0b3J5LmgvY3BwLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajogRGl0dG8uIEFsc28gcmVtb3ZlZCBXZWJDb3JlSGlzdG9yeS5oL20uCisKKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6IFVwZGF0ZWQgaW5jbHVkZXMuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjppbml0RWxlbWVudEFuZFBzZXVkb1N0YXRlKTogRWxp
bWluYXRlZCBjb2RlIHRvIHNldAorICAgICAgICBjdXJyZW50RW5jb2RlZFVSTC4KKyAgICAgICAg
KFdlYkNvcmU6OmNoZWNrUHNldWRvU3RhdGUpOiBNb3ZlZCBtb3N0IG9mIHRoZSBjb2RlIGluc2lk
ZSBhIG5ldworICAgICAgICBQYWdlR3JvdXA6OmlzTGlua1Zpc2l0ZWQgZnVuY3Rpb24uCisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQp
OiBUaWdodGVuZWQgY29kZSBhIGJpdCBieSB1c2luZworICAgICAgICByZWZlcmVuY2VzIGFuZCBv
bmx5IGdldHRpbmcgY29sb3JzIHdoZW4gbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6Z2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWUpOiBEaXR0by4KKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5oOiBSZW1vdmVkIEVuY29kZWRVUkwsIG1fZW5jb2RlZFVS
TCwgYW5kIHNldEVuY29kZWRVUkwuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmF0dGFjaCk6IFJlbW92ZWQgY2FsbCB0byBzZXRFbmNv
ZGVkVVJMLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFVSTCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IpOiBEaXR0by4KKwor
ICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlcjo6YWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0KTogQ2hhbmdlZCBjb2Rl
IHRvIHVzZQorICAgICAgICBlYXJseSBleGl0IGlkaW9tIHRvIGJlIGEgbGl0dGxlIG1vcmUgcmVh
ZGFibGUuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6dXJsc01hdGNoSXRlbSk6IENo
YW5nZSB0byB1c2UgYSByZWZlcmVuY2UgZm9yIHNsaWdodGx5CisgICAgICAgIGJldHRlciBlZmZp
Y2llbmN5LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmdvVG9JdGVtKTogVXNlIGVh
cmx5IGV4aXQgaWRpb20gdG8gYmUgYSBsaXR0bGUgbW9yZQorICAgICAgICByZWFkYWJsZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yU3RhbmRhcmRMb2Fk
KTogTW92ZWQgaGlzdG9yeSBjb2RlIGJhY2sKKyAgICAgICAgaW4gaGVyZSBhbmQgZ290IHJpZCBv
ZiB0aGUgaGVscGVyIGZ1bmN0aW9uIHVwZGF0ZUdsb2JhbEhpc3RvcnksIHJlc3RvcmluZyB0aGUK
KyAgICAgICAgbG9naWMgYmVmb3JlIHIzMDU0OS4gQWxzbyBhZGRlZCBhIGNhbGwgdG8gdGhlIG5l
dyBhZGRWaXNpdGVkTGluayBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Ojp1cGRhdGVIaXN0b3J5Rm9yQ2xpZW50UmVkaXJlY3QpOiBBZGRlZCBjb2RlIHRvIGNhbGwKKyAg
ICAgICAgYWRkVmlzaXRlZExpbmsgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Ojp1cGRhdGVIaXN0b3J5Rm9yQmFja0ZvcndhcmROYXZpZ2F0aW9uKTogUmVtb3ZlZCBjb21tZW50
LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWxvYWQp
OiBSZW1vdmVkIGNhbGwgdG8KKyAgICAgICAgdXBkYXRlR2xvYmFsSGlzdG9yeTsgd2UgY2FuIGp1
c3QgZ28gd2l0aG91dCB1cGRhdGluZyBnbG9iYWwgaGlzdG9yeSBvcgorICAgICAgICB2aXNpdGVk
IGxpbmtzIGhlcmUsIGF0IGxlYXN0IGZvciBub3csIHNpbmNlIGl0J3Mgbm90IGNsZWFyIHRoYXQg
YSByZWxvYWQKKyAgICAgICAgaXMgYSAiaGlzdG9yeSBldmVudCIuCisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvclJlZGlyZWN0V2l0aExvY2tlZEhpc3Rvcnkp
OiBNb3ZlZAorICAgICAgICBoaXN0b3J5IGNvZGUgYmFjayB3aGVyZSBpdCB3YXMsIGFuZCBhZGRl
ZCB0aGUgY2FsbCB0byBhZGRWaXNpdGVkTGluaywganVzdAorICAgICAgICBhcyBpbiB1cGRhdGVI
aXN0b3J5Rm9yU3RhbmRhcmRMb2FkIGFib3ZlLgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRl
ci5oOiBSZW1vdmVkIHVwZGF0ZUdsb2JhbEhpc3RvcnkgZnVuY3Rpb24uCisKKyAgICAgICAgKiBw
YWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OnBvcHVsYXRl
VmlzaXRlZExpbmtzKTogQWRkZWQuIEVtcHR5IHBsYWNlaG9sZGVyIHNvIHdlCisgICAgICAgIGRv
bid0IGhhdmUgdG8gaW1wbGVtZW50IHRoaXMgZm9yIGV2ZXJ5IHBvcnQgYWxsIGF0IG9uY2UuCisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBhZ2VHcm91cExvYWREZWZl
cnJlcik6IENoYW5nZWQgdG8gdXNlIHRoZQorICAgICAgICBuZXcgUGFnZUdyb3VwIGNsYXNzLgor
ICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6IEFkZGVkIHBvcHVsYXRlVmlzaXRlZExpbmtz
IGZ1bmN0aW9uLCB1c2VkIHRvIGZpbGwgdGhlCisgICAgICAgIHZpc2l0ZWQgbGlua3Mgc2V0IGZy
b20gdGhlIGdsb2JhbCBoaXN0b3J5IGF0IGFwcGxpY2F0aW9uIHN0YXJ0dXAgdGltZS4KKworICAg
ICAgICAqIHBhZ2UvRnJhbWVUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVHJlZTo6
ZmluZCk6IFVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgUGFnZUdyb3VwIGNsYXNzLgorCisgICAgICAg
ICogcGFnZS9HbG9iYWxIaXN0b3J5Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS93aW4vR2xv
YmFsSGlzdG9yeVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9tYWMvR2xvYmFsSGlz
dG9yeU1hYy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZUhpc3Rv
cnkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZUhpc3RvcnkubTog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV2ViQ29yZUhpc3RvcnkuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9XZWJDb3JlSGlzdG9yeS5oOiBSZW1vdmVkLgor
CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2Up
OiBTZXQgbV9ncm91cCB0byAwLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0R3JvdXBOYW1l
KTogU2V0IHVwIG1fZ3JvdXAuIElmIHRoZSBwYWdlIGlzIG5vdCBpbiBhbnkKKyAgICAgICAgZ3Jv
dXAsIHNldCBpdCB0byAwIGZvciBub3cgdG8gcG9zdHBvbmUgdGhlIGNvc3Qgb2YgY3JlYXRpbmcg
YSBncm91cC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmluaXRHcm91cCk6IEFkZGVkLiBTZXRz
IG1fZ3JvdXAgdG8gcG9pbnQgdG8gYSBzaW5nbGUtcGFnZQorICAgICAgICBncm91cDsgdXNlZCB3
aGVuIGdldHRpbmcgYSBncm91cC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlbW92ZUFsbFZp
c2l0ZWRMaW5rcyk6IEFkZGVkLiBDYWxscyByZW1vdmVWaXNpdGVkTGlua3MKKyAgICAgICAgb24g
YWxsIHBhZ2UgZ3JvdXBzLgorICAgICAgICAqIHBhZ2UvUGFnZS5oOiBNb3ZlZCBlbnVtcyBpbnNp
ZGUgdGhlIFdlYkNvcmUgbmFtZXNwYWNlLiBSZW1vdmVkIHRoZQorICAgICAgICBmcmFtZU5hbWVz
cGFjZSBmdW5jdGlvbiBhbmQgaW5zdGVhZCBhZGRlZCB0aGUgZ3JvdXAgYW5kIGdyb3VwUHRyIGZ1
bmN0aW9ucy4KKworICAgICAgICAqIHBhZ2UvUGFnZUdyb3VwLmNwcDogQWRkZWQuIENvbnRhaW5z
IGFsbCB0aGUgdmlzaXRlZCBjb2RlIGZyb20gdGhlCisgICAgICAgIENTU1N0eWxlU2VsZWN0b3Ig
aW4gdGhlIGlzVmlzaXRlZExpbmsgZnVuY3Rpb24sIGJ1dCBtb3JlIGVmZmljaWVudCBiZWNhdXNl
CisgICAgICAgIHdlIGRvbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlci4KKyAgICAg
ICAgKiBwYWdlL1BhZ2VHcm91cC5oOiBBZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwOiBSZW1vdmVkIGhpc3RvcnlDb250YWlucy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOiBSZW1vdmVkIHVubmVlZGVkIGlu
Y2x1ZGUuCisgICAgICAgICogcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDogUmVt
b3ZlZCBoaXN0b3J5Q29udGFpbnMuCisKIDIwMDgtMDMtMDUgIEFuZGVycyBDYXJsc3NvbiAgPGFu
ZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFz
ZS5leHAJKHJldmlzaW9uIDMwODE2KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MDgsNiArNDA4LDcgQEAgX19aTjdXZWJDb3JlNFBhZ2UzN3NldEluTG93
UXVhbGl0eUltYWdlSQogX19aTjdXZWJDb3JlNFBhZ2U2Z29CYWNrRXYKIF9fWk43V2ViQ29yZTRQ
YWdlOGdvVG9JdGVtRVBOU18xMUhpc3RvcnlJdGVtRU5TXzEzRnJhbWVMb2FkVHlwZUUKIF9fWk43
V2ViQ29yZTRQYWdlOWdvRm9yd2FyZEV2CitfX1pON1dlYkNvcmU0UGFnZTlpbml0R3JvdXBFdgog
X19aTjdXZWJDb3JlNFBhZ2VDMUVQTlNfMTJDaHJvbWVDbGllbnRFUE5TXzE3Q29udGV4dE1lbnVD
bGllbnRFUE5TXzEyRWRpdG9yQ2xpZW50RVBOU18xMERyYWdDbGllbnRFUE5TXzE1SW5zcGVjdG9y
Q2xpZW50RQogX19aTjdXZWJDb3JlNFBhZ2VEMUV2CiBfX1pON1dlYkNvcmU1Q2FjaGUxMXNldERp
c2FibGVkRWIKQEAgLTU2NCw2ICs1NjUsOCBAQCBfX1pON1dlYkNvcmU5SFRNTE5hbWVzN3NyY0F0
dHJFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzOGhyZWZBdHRyRQogX19aTjdXZWJDb3JlOVBhZ2VD
YWNoZTExc2V0Q2FwYWNpdHlFaQogX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTI3cmVsZWFzZUF1dG9y
ZWxlYXNlZFBhZ2VzTm93RXYKK19fWk43V2ViQ29yZTlQYWdlR3JvdXAxNGFkZFZpc2l0ZWRMaW5r
RVBLdG0KK19fWk43V2ViQ29yZTlQYWdlR3JvdXAyMXJlbW92ZUFsbFZpc2l0ZWRMaW5rc0V2CiBf
X1pON1dlYkNvcmU5U2VsZWN0aW9uMjJleHBhbmRVc2luZ0dyYW51bGFyaXR5RU5TXzE1VGV4dEdy
YW51bGFyaXR5RQogX19aTjdXZWJDb3JlOVRpbWVyQmFzZTRzdG9wRXYKIF9fWk43V2ViQ29yZTlU
aW1lckJhc2U1c3RhcnRFZGQKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkocmV2aXNpb24gMzA3NzYpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzU1LDEwICsyNzU1LDYgQEAKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cYnJpZGdlXEdsb2JhbEhpc3Rvcnku
aCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFn
ZVxIaXN0b3J5LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yNzk1LDYgKzI3OTEsMTQgQEAK
IAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQ
YWdlR3JvdXAuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwYWdlXFBhZ2VHcm91cC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBsdWdpbi5oIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAg
LTI4MzgsMTAgKzI4NDIsNiBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGFnZVx3aW5cR2xvYmFsSGlzdG9yeVdpbi5jcHAiCi0JCQkJCT4K
LQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXHdpblxQ
YWdlV2luLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTM1NjksMTQgKzM1NjksNiBAQAog
CQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cd2luXFdlYkNvcmVIaXN0b3J5LmNwcCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8
RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHdpblxXZWJDb3JlSGlzdG9yeS5o
IgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cd2luXFdlYkNvcmVUZXh0UmVuZGVyZXIuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxl
PgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDMwODE2KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTI4OSwxMiArMjg5LDEwIEBACiAJCTFBRTgyRkVEMENBQjA3RUUw
MDIyMzdBRSAvKiBKU1NRTFJlc3VsdFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFFODJGRUIwQ0FCMDdFRTAwMjIzN0FFIC8qIEpTU1FMUmVzdWx0
U2V0LmggKi87IH07CiAJCTFBRTgzMDQ0MENBQjBFRDEwMDIyMzdBRSAvKiBKU0RhdGFiYXNlQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
RTgzMDQyMENBQjBFRDEwMDIyMzdBRSAvKiBKU0RhdGFiYXNlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJ
MUFGMzI2NDYwRDc4QjU1MzAwNjhGMEM0IC8qIEFYT2JqZWN0Q2FjaGVNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUYzMjY0MDBENzhCNTUzMDA2
OEYwQzQgLyogQVhPYmplY3RDYWNoZU1hYy5tbSAqLzsgfTsKLQkJMUFGMzI2NDcwRDc4QjU1MzAw
NjhGMEM0IC8qIEdsb2JhbEhpc3RvcnlNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUYzMjY0MTBENzhCNTUzMDA2OEYwQzQgLyogR2xvYmFsSGlz
dG9yeU1hYy5tbSAqLzsgfTsKIAkJMUFGMzI2NDgwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVB
WE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFGMzI2NDIwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVBWE9iamVjdC5oICovOyB9OwogCQkx
QUYzMjY0OTBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZUFYT2JqZWN0Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGMzI2NDMwRDc4QjU1MzAwNjhG
MEM0IC8qIFdlYkNvcmVBWE9iamVjdC5tbSAqLzsgfTsKIAkJMUFGMzI2NzgwRDc4Qjk0NDAwNjhG
MEM0IC8qIEFYT2JqZWN0Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBRjMyNjc2MEQ3OEI5NDQwMDY4RjBDNCAvKiBBWE9iamVjdENhY2hlLmgg
Ki87IH07CiAJCTFBRjMyNjc5MEQ3OEI5NDQwMDY4RjBDNCAvKiBFZGl0b3JDbGllbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjMyNjc3MEQ3OEI5
NDQwMDY4RjBDNCAvKiBFZGl0b3JDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkxQUYzMjY3QjBENzhCOTRFMDA2OEYwQzQgLyogR2xvYmFs
SGlzdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFGMzI2N0EwRDc4Qjk0RTAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnkuaCAqLzsgfTsKIAkJMUFG
RTExN0QwQ0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGRTExN0IwQ0JGRkIzNjAw
MzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovOyB9OwogCQkxQUZFMTE3RTBDQkZG
QjM2MDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGRTExN0MwQ0JGRkIzNjAwMzAxN0ZBIC8qIFNR
TFJlc3VsdFNldFJvd0xpc3QuaCAqLzsgfTsKIAkJMUFGRTExOTkwQ0JGRkNDNDAwMzAxN0ZBIC8q
IEpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUZFMTE5NzBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRT
ZXRSb3dMaXN0LmNwcCAqLzsgfTsKQEAgLTE0ODQsNiArMTQ4Miw4IEBACiAJCTg1RkYzMTVBMEFB
RkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZGMzE1ODBBQUZCRkNCMDAzNzRGMzggLyogRE9N
S2V5Ym9hcmRFdmVudC5oICovOyB9OwogCQk4NUZGMzE1QjBBQUZCRkNCMDAzNzRGMzggLyogRE9N
S2V5Ym9hcmRFdmVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICov
OyB9OwogCQk5MjkyNjQ3NzBCNjFGQzcyMDBCNDFEMzQgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MjkyNjQ3NjBC
NjFGQzcyMDBCNDFEMzQgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgKi87IH07CisJCTkzMDJCMEJE
MEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VH
cm91cC5jcHAgKi87IH07CisJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJF
MEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGlt
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVC
MjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMDcwNUQ4MDlFMEM5QjcwMEIxN0ZFNCAvKiBKU0Nv
dW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTMwNzA1RDcwOUUwQzlCNzAwQjE3RkU0IC8qIEpTQ291bnRlci5jcHAgKi87IH07CiAJCTkzMDcw
NURBMDlFMEM5QkYwMEIxN0ZFNCAvKiBKU0NvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDcwNUQ5MDlFMEM5QkYwMEIxN0ZFNCAvKiBKU0Nv
dW50ZXIuaCAqLzsgfTsKQEAgLTE2OTAsNyArMTY5MCw2IEBACiAJCTkzRjE5OTlEMDgyNDVFNTkw
MDFFOUFCQyAvKiBEZXByZWNhdGVkVmFsdWVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODZDMjAyREUzQjg2MDFFQTQxMjIgLyogRGVwcmVj
YXRlZFZhbHVlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTkzRjE5OTlFMDgyNDVFNTkwMDFFOUFCQyAvKiBEZXByZWNhdGVkVmFsdWVMaXN0
SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4
Nzg1M0IwMkRFMzc1OTAxRUE0MTIyIC8qIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5QTgwODI0
NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVGcmFtZVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NTRDMDJERTM3NTkwMUVBNDEyMiAvKiBXZWJD
b3JlRnJhbWVWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJOTNGMTk5QTkwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVIaXN0b3J5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTUxN0RDMjAzMUFC
NTYzMDFBODAxODAgLyogV2ViQ29yZUhpc3RvcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOTlCMzA4MjQ1RTU5MDAxRTlBQkMgLyogV2Vi
Q29yZVZpZXdGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNTg3ODU1NDAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZVZpZXdGYWN0b3J5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5
QjgwODI0NUU1OTAwMUU5QUJDIC8qIFNjcm9sbEJhci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9s
bEJhci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzRjE5OUJCMDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFOTgzRDk1MDUyQTJF
MEEwMDg5MkQ4NSAvKiBXZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTcxNCw3ICsxNzEzLDYgQEAKIAkJOTNG
MTlBOUQwODI0NUU1OTAwMUU5QUJDIC8qIFRleHRSZXNvdXJjZURlY29kZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNzgwMkRFNDNENzAx
ODYzNUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIuY3BwICovOyB9OwogCQk5M0YxOUFCOTA4MjQ1
RTU5MDAxRTlBQkMgLyogUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjUyM0QzMDMwMkRFNDQ3NjAxODYzNUNBIC8qIFJhbmdlLmNwcCAqLzsg
fTsKIAkJOTNGMTlBQkMwODI0NUU1OTAwMUU5QUJDIC8qIFhNTFRva2VuaXplci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwOTAyREU0NDc2
MDE4NjM1Q0EgLyogWE1MVG9rZW5pemVyLmNwcCAqLzsgfTsKLQkJOTNGMTlBQzgwODI0NUU1OTAw
MUU5QUJDIC8qIFdlYkNvcmVIaXN0b3J5Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTUxN0RDMzAzMUFCNTYzMDFBODAxODAgLyogV2ViQ29yZUhpc3Rv
cnkubSAqLzsgfTsKIAkJOTNGMTlBRDUwODI0NUU1OTAwMUU5QUJDIC8qIFJlbmRlclRyZWVBc1Rl
eHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5
NTVBNDIwM0Q3MjkzMjAwODYzNUNFIC8qIFJlbmRlclRyZWVBc1RleHQuY3BwICovOyB9OwogCQk5
M0YxOUFEQzA4MjQ1RTU5MDAxRTlBQkMgLyogUGxhdGZvcm1TY3JvbGxCYXJNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdCMkFGOTA0NTA4MjQx
MDBBODAwMEYgLyogUGxhdGZvcm1TY3JvbGxCYXJNYWMubW0gKi87IH07CiAJCTkzRjE5QUUxMDgy
NDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUY4MDY5NzA1NEQ5Rjg2MDA4QkY3NzYgLyogQmxv
Y2tFeGNlcHRpb25zLm1tICovOyB9OwpAQCAtNDYyMiwxMiArNDYyMCwxMCBAQAogCQkxQUU4MkZF
QjBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTUUxSZXN1bHRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUFFODMwNDIwQ0FCMEVEMTAwMjIzN0FFIC8qIEpTRGF0YWJhc2VDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhYmFzZUN1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRjMyNjQwMEQ3OEI1NTMwMDY4RjBDNCAv
KiBBWE9iamVjdENhY2hlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQVhPYmplY3RDYWNoZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUFGMzI2NDEwRDc4QjU1MzAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnlNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHbG9iYWxIaXN0b3J5TWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUYzMjY0MjBENzhCNTUzMDA2OEYwQzQgLyogV2Vi
Q29yZUFYT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVB
WE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUYzMjY0MzBENzhCNTUz
MDA2OEYwQzQgLyogV2ViQ29yZUFYT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViQ29yZUFYT2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQUYzMjY3NjBENzhCOTQ0MDA2OEYwQzQgLyogQVhPYmplY3RDYWNoZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBWE9iamVjdENhY2hlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBRjMyNjc3MEQ3OEI5NDQwMDY4RjBDNCAvKiBFZGl0b3JDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdG9yQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRjMyNjdBMEQ3OEI5NEUwMDY4RjBDNCAvKiBH
bG9iYWxIaXN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdsb2JhbEhp
c3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGRTExN0IwQ0JGRkIzNjAw
MzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU1FMUmVzdWx0U2V0Um93TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBRkUxMTdDMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dM
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTFJlc3VsdFNldFJvd0xp
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGRTExOEMwQ0JGRkM0RTAwMzAx
N0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNR
TFJlc3VsdFNldFJvd0xpc3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTc2
MSw2ICs1NzU3LDggQEAKIAkJODVGRjMxNTgwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJk
RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUtleWJvYXJkRXZl
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVGRjMxNTkwQUFGQkZDQjAwMzc0
RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTI5MjY0NzYwQjYxRkM3MjAwQjQxRDM0IC8qIEpTRG9jdW1lbnRDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9jdW1lbnRDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzAyQjBCQzBENzlGODI5MDBDN0VFODMg
LyogUGFnZUdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBh
Z2VHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMDJCMEJFMEQ3OUY4
MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGFnZUdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDVCMjRDMDk4
RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzA3MDU5MDA5RTBDNzU4
MDBCMTdGRTQgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlOyBmaWxlRW5jb2RpbmcgPSA0OyBw
YXRoID0gQ1NTUHJpbWl0aXZlVmFsdWUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzA3MDVDNzA5RTBDOTVGMDBCMTdGRTQgLyogQ291bnRlci5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gQ291bnRlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDEx
LDggKzgwMDksNiBAQAogCQlGNTIzRDMwNDAyREU0NDc2MDE4NjM1Q0EgLyogUmFuZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFuZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJ
CUY1MjNEMzA5MDJERTQ0NzYwMTg2MzVDQSAvKiBYTUxUb2tlbml6ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MVG9rZW5pemVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCUY1MjNEMzBBMDJERTQ0NzYwMTg2MzVDQSAvKiBYTUxUb2tlbml6ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MVG9rZW5pemVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwotCQlGNTUxN0RDMjAzMUFCNTYzMDFBODAxODAgLyogV2ViQ29yZUhpc3RvcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVIaXN0b3J5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUY1NTE3REMzMDMxQUI1NjMwMUE4MDE4MCAvKiBXZWJDb3JlSGlz
dG9yeS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViQ29yZUhpc3Rv
cnkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjU4Nzg0RjAwMkRFMzc1OTAxRUE0
MTIyIC8qIEN1cnNvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEN1cnNvck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NTE1MDJERTM3NTkwMUVB
NDEyMiAvKiBEZXByZWNhdGVkUHRyTGlzdEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3
ODUxNjAyREUzNzU5MDFFQTQxMjIgLyogRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcHJlY2F0
ZWRQdHJMaXN0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OwpAQCAtODUzOCw4ICs4NTM0LDYgQEAKIAkJCQk4NEIyQjI0RjA1NkJG
MTVGMDBEMkI3NzEgLyogU1NMS2V5R2VuZXJhdG9yTWFjLm1tICovLAogCQkJCTY1ODJBMTU1MDk5
OTlENkQwMEJFRUI2RCAvKiBTeXN0ZW1UaW1lTWFjLmNwcCAqLywKIAkJCQk1MURGNkQ3RjBCOTJB
MThFMDBDMkRDODUgLyogVGhyZWFkQ2hlY2subW0gKi8sCi0JCQkJRjU1MTdEQzIwMzFBQjU2MzAx
QTgwMTgwIC8qIFdlYkNvcmVIaXN0b3J5LmggKi8sCi0JCQkJRjU1MTdEQzMwMzFBQjU2MzAxQTgw
MTgwIC8qIFdlYkNvcmVIaXN0b3J5Lm0gKi8sCiAJCQkJODRCMkIxRjcwNTZCRUYzQTAwRDJCNzcx
IC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IuaCAqLywKIAkJCQk4NEIyQjFGODA1NkJFRjNBMDBEMkI3
NzEgLyogV2ViQ29yZUtleUdlbmVyYXRvci5tICovLAogCQkJCTkzNEQ5QkE2MEI4QzExNzUwMDdC
NDJBOSAvKiBXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCAqLywKQEAgLTg2MDUsNyArODU5OSw2IEBA
CiAJCQkJNjVBMjE0ODMwOTdBM0Y1MzAwQjkwNTBBIC8qIEZyYW1lVHJlZS5oICovLAogCQkJCTY1
Q0JGRUY3MDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFtZVZpZXcuY3BwICovLAogCQkJCTY1Q0JGRUY4
MDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFtZVZpZXcuaCAqLywKLQkJCQkxQUYzMjY3QTBENzhCOTRF
MDA2OEYwQzQgLyogR2xvYmFsSGlzdG9yeS5oICovLAogCQkJCUJDOTREMTUwMEMyNzVDOEIwMDZC
QzYxNyAvKiBIaXN0b3J5LmNwcCAqLywKIAkJCQlCQzk0RDE1MTBDMjc1QzhCMDA2QkM2MTcgLyog
SGlzdG9yeS5oICovLAogCQkJCUJDOTREMTUyMEMyNzVDOEIwMDZCQzYxNyAvKiBIaXN0b3J5Lmlk
bCAqLywKQEAgLTg2MTYsNiArODYwOSw4IEBACiAJCQkJOTM1QzQ3NjIwOUFDNENFNjAwQTZBQUI0
IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCAqLywKIAkJCQk2NUZFQTg2ODA5ODMz
QURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi8sCiAJCQkJNjVBMjE0NjcwOTdBMzI5MTAwQjkwNTBB
IC8qIFBhZ2UuaCAqLywKKwkJCQk5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3Vw
LmNwcCAqLywKKwkJCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8s
CiAJCQkJNjVEMUMxQzkwOTkzMkIyMjAwMENCMzI0IC8qIFBsdWdpbi5oICovLAogCQkJCUJDRUMw
MUJBMEMyNzREQUMwMDlGNEVDOSAvKiBTY3JlZW4uY3BwICovLAogCQkJCUJDRUMwMUJCMEMyNzRE
QUMwMDlGNEVDOSAvKiBTY3JlZW4uaCAqLywKQEAgLTk5MTUsNyArOTkxMCw2IEBACiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFBRjMyNjQwMEQ3OEI1NTMwMDY4RjBD
NCAvKiBBWE9iamVjdENhY2hlTWFjLm1tICovLAotCQkJCTFBRjMyNjQxMEQ3OEI1NTMwMDY4RjBD
NCAvKiBHbG9iYWxIaXN0b3J5TWFjLm1tICovLAogCQkJCTFBRjMyNjQyMEQ3OEI1NTMwMDY4RjBD
NCAvKiBXZWJDb3JlQVhPYmplY3QuaCAqLywKIAkJCQkxQUYzMjY0MzBENzhCNTUzMDA2OEYwQzQg
LyogV2ViQ29yZUFYT2JqZWN0Lm1tICovLAogCQkJCUFCQUYyMjA3MEMwM0IxQzcwMEIwQkNGMCAv
KiBDaHJvbWVNYWMubW0gKi8sCkBAIC0xNDI5MCw3ICsxNDI4NCw2IEBACiAJCQkJQjI1NTk5NkYw
RDAwRDhCQTAwQkI4MjVDIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNjU0RUM2MTEwOTc3NzhGNTAwREFCNTJDIC8qIFdlYkNvcmVGcmFtZUJyaWRnZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5QTgwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVGcmFt
ZVZpZXcuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzRjE5OUE5MDgyNDVFNTkwMDFFOUFCQyAvKiBX
ZWJDb3JlSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5QzIwODI0NUU1OTAwMUU5
QUJDIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUJC
MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzNEQ5QkE3MEI4QzExNzUwMDdCNDJBOSAvKiBXZWJDb3JlTlNTdHJpbmdFeHRyYXMu
aCBpbiBIZWFkZXJzICovLApAQCAtMTQ0MDksNyArMTQ0MDIsNyBAQAogCQkJCTFDRUZDOUI5MEQ3
OERDOEMwMDdEMjU3OSAvKiBTY2hlZHVsZVBhaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjMy
NjQ4MEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlQVhPYmplY3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBRjMyNjc4MEQ3OEI5NDQwMDY4RjBDNCAvKiBBWE9iamVjdENhY2hlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkxQUYzMjY3QjBENzhCOTRFMDA2OEYwQzQgLyogR2xvYmFsSGlzdG9yeS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBODNFNTAwRDdDRTFFOTAwMzQyMUE4IC8qIEpTQ2xpcGJv
YXJkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzZDNDlGNDBEN0RCQTA1MDBGRkE1NTggLyogSlNJ
bWFnZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzM0NTI0NDBEN0UwMEVBMDAx
NjU3NEEgLyogSlNSR0JDb2xvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTkzMSw3ICsxNTkyNCw2
IEBACiAJCQkJQjI1NTk5NkQwRDAwRDhCQTAwQkI4MjVDIC8qIFdLU3BvdExpZ2h0RmlsdGVyLm0g
aW4gU291cmNlcyAqLywKIAkJCQlCMjU1OTk3MDBEMDBEOEJBMDBCQjgyNUMgLyogV0tUYWJsZVRy
YW5zZmVyRmlsdGVyLm0gaW4gU291cmNlcyAqLywKIAkJCQk2NTRFQzYxMjA5Nzc3OEY1MDBEQUI1
MkMgLyogV2ViQ29yZUZyYW1lQnJpZGdlLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlBQzgw
ODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVIaXN0b3J5Lm0gaW4gU291cmNlcyAqLywKIAkJCQk5
M0YxOUFFNTA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZUtleUdlbmVyYXRvci5tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTM0RDlCQTUwQjhDMTE2QjAwN0I0MkE5IC8qIFdlYkNvcmVOU1N0cmluZ0V4
dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUREMDVGRTBFMEI4QkEzQzYwMDlBQ0RGRSAvKiBX
ZWJDb3JlT2JqQ0V4dHJhcy5jIGluIFNvdXJjZXMgKi8sCkBAIC0xNjAzMiw4ICsxNjAyNCw4IEBA
CiAJCQkJQTc2NkYzNTMwRDZCREUzNTAwQUJEREIzIC8qIEpTQ2FudmFzUGl4ZWxBcnJheUN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQ0VGQzlCQTBENzhEQzhDMDA3RDI1NzkgLyogU2No
ZWR1bGVQYWlyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjMyNjQ2MEQ3OEI1NTMwMDY4RjBD
NCAvKiBBWE9iamVjdENhY2hlTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFGMzI2NDcwRDc4
QjU1MzAwNjhGMEM0IC8qIEdsb2JhbEhpc3RvcnlNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QUYzMjY0OTBENzhCNTUzMDA2OEYwQzQgLyogV2ViQ29yZUFYT2JqZWN0Lm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQ0UyNEY5NzBEN0NBRjBFMDA3RTA0QzIgLyogU2NoZWR1bGVQYWlyTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBODNFNEYwRDdDRTFFOTAwMzQyMUE4IC8qIEpTQ2xp
cGJvYXJkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTgzRTUyMEQ3Q0UyMDUwMDM0MjFBOCAv
KiBKU0NsaXBib2FyZEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTQgQEAKICNpbmNsdWRlICJG
b250VmFsdWUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgot
I2luY2x1ZGUgIkdsb2JhbEhpc3RvcnkuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNsdWRlICJN
ZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VH
cm91cC5oIgogI2luY2x1ZGUgIlBhaXIuaCIKICNpbmNsdWRlICJSZWN0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKQEAgLTIzMiw3ICsyMzMsNiBAQCBDU1NTdHlsZVNoZWV0KiBDU1NTdHls
ZVNlbGVjdG9yOjptX3ZpZXdTCiBDU1NTdHlsZVNoZWV0ICpDU1NTdHlsZVNlbGVjdG9yOjptX3N2
Z1NoZWV0ID0gMDsKICNlbmRpZgogCi1zdGF0aWMgQ1NTU3R5bGVTZWxlY3Rvcjo6RW5jb2RlZFVS
TCogY3VycmVudEVuY29kZWRVUkwgPSAwOwogc3RhdGljIFBzZXVkb1N0YXRlIHBzZXVkb1N0YXRl
OwogCiBzdGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgc2NyZWVuRXZhbCgpCkBAIC0z
MTYsMjggKzMxNiwxMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXQoKQogICAgIG1fbWVk
aXVtID0gMDsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzZXRFbmNvZGVkVVJMKGNvbnN0
IEtVUkwmIHVybCkKLXsKLSAgICBLVVJMIHUgPSB1cmw7Ci0KLSAgICB1LnNldFF1ZXJ5KFN0cmlu
ZygpKTsKLSAgICB1LnNldFJlZihTdHJpbmcoKSk7Ci0gICAgbV9lbmNvZGVkVVJMLmZpbGUgPSB1
LnN0cmluZygpOwotICAgIGludCBwb3MgPSBtX2VuY29kZWRVUkwuZmlsZS5yZXZlcnNlRmluZCgn
LycpOwotICAgIG1fZW5jb2RlZFVSTC5wYXRoID0gbV9lbmNvZGVkVVJMLmZpbGU7Ci0gICAgaWYg
KHBvcyA+IDApIHsKLSAgICAgICAgbV9lbmNvZGVkVVJMLnBhdGgudHJ1bmNhdGUocG9zKTsKLSAg
ICAgICAgbV9lbmNvZGVkVVJMLnBhdGguYXBwZW5kKCcvJyk7Ci0gICAgfQotICAgIHUuc2V0UGF0
aChTdHJpbmcoKSk7Ci0gICAgbV9lbmNvZGVkVVJMLnByZWZpeCA9IHUuc3RyaW5nKCk7Ci19Ci0K
IENTU1N0eWxlU2VsZWN0b3I6On5DU1NTdHlsZVNlbGVjdG9yKCkKIHsKICAgICBkZWxldGUgbV9t
ZWRpdW07Ci0gICAgOjpkZWxldGUgbV9yb290RGVmYXVsdFN0eWxlOwotCisgICAgZGVsZXRlIG1f
cm9vdERlZmF1bHRTdHlsZTsKICAgICBkZWxldGUgbV9hdXRob3JTdHlsZTsKICAgICBkZWxldGUg
bV91c2VyU3R5bGU7CiB9CkBAIC01MzcsNyArNTE5LDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
Ojppbml0RWxlbWVudEFuZFBzZQogICAgICAgICBtX3N0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4obV9lbGVtZW50KTsKICAgICBlbHNlCiAgICAgICAgIG1fc3R5bGVk
RWxlbWVudCA9IDA7Ci0gICAgY3VycmVudEVuY29kZWRVUkwgPSAmbV9lbmNvZGVkVVJMOwogICAg
IHBzZXVkb1N0YXRlID0gUHNldWRvVW5rbm93bjsKIH0KIApAQCAtNTY4LDgxICs1NDksNyBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRGb3JTdHlsZVJlc29sCiAgICAgbV9mb250RGlydHkg
PSBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZmluZFNsYXNoRG90RG90U2xhc2goY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgdW5zaWduZWQgbG9v
cExpbWl0ID0gbGVuZ3RoIDwgNCA/IDAgOiBsZW5ndGggLSAzOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsb29wTGltaXQ7ICsraSkgewotICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9
PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDJdID09
ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAzXSA9PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gaTsK
LSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBmaW5kU2xhc2hT
bGFzaChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgaW50IHBvc2l0aW9u
KQotewotICAgIHVuc2lnbmVkIGxvb3BMaW1pdCA9IGxlbmd0aCA8IDIgPyAwIDogbGVuZ3RoIC0g
MTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBwb3NpdGlvbjsgaSA8IGxvb3BMaW1pdDsgKytpKSB7
Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kgKyAxXSA9
PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQot
Ci1zdGF0aWMgaW5saW5lIGludCBmaW5kU2xhc2hEb3RTbGFzaChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICB1bnNpZ25lZCBsb29wTGltaXQgPSBsZW5ndGgg
PCAzID8gMCA6IGxlbmd0aCAtIDI7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb3BM
aW1pdDsgKytpKSB7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBjaGFyYWN0
ZXJzW2kgKyAxXSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy8nKQotICAgICAgICAg
ICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBi
b29sIGNvbnRhaW5zQ29sb25TbGFzaFNsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgdW5zaWduZWQgbG9vcExpbWl0ID0gbGVuZ3RoIDwgMyA/IDAg
OiBsZW5ndGggLSAyOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb29wTGltaXQ7ICsr
aSkKLSAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJzonICYmIGNoYXJhY3RlcnNbaSArIDFd
ID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9PSAnLycpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFuUGF0aChWZWN0
b3I8VUNoYXIsIDUxMj4mIHBhdGgpCi17Ci0gICAgaW50IHBvczsKLSAgICB3aGlsZSAoKHBvcyA9
IGZpbmRTbGFzaERvdERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSkpICE9IC0xKSB7
Ci0gICAgICAgIGludCBwcmV2ID0gcmV2ZXJzZUZpbmQocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgp
LCAnLycsIHBvcyAtIDEpOwotICAgICAgICAvLyBkb24ndCByZW1vdmUgdGhlIGhvc3QsIGkuZS4g
aHR0cDovL2Zvby5vcmcvLi4vZm9vLmh0bWwKLSAgICAgICAgaWYgKHByZXYgPCAwIHx8IChwcmV2
ID4gMyAmJiBwYXRoW3ByZXYgLSAyXSA9PSAnOicgJiYgcGF0aFtwcmV2IC0gMV0gPT0gJy8nKSkK
LSAgICAgICAgICAgIHBhdGgucmVtb3ZlKHBvcywgMyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHBhdGgucmVtb3ZlKHByZXYsIHBvcyAtIHByZXYgKyAzKTsKLSAgICB9Ci0KLSAgICAvLyBE
b24ndCByZW1vdmUgIi8vIiBmcm9tIGFuIGFuY2hvciBpZGVudGlmaWVyLiAtcmp3Ci0gICAgLy8g
U2V0IHJlZlBvcyB0byAtMiB0byBtZWFuICJJIGhhdmVuJ3QgbG9va2VkIGZvciB0aGUgYW5jaG9y
IHlldCIuCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB3YXN0ZSBhIGZ1bmN0aW9uIGNhbGwgb24g
dGhlIHNlYXJjaCBmb3IgdGhlIHRoZSBhbmNob3IKLSAgICAvLyBpbiB0aGUgdmFzdCBtYWpvcml0
eSBvZiBjYXNlcyB3aGVyZSB0aGVyZSBpcyBubyAiLy8iIGluIHRoZSBwYXRoLgotICAgIHBvcyA9
IDA7Ci0gICAgaW50IHJlZlBvcyA9IC0yOwotICAgIHdoaWxlICgocG9zID0gZmluZFNsYXNoU2xh
c2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCBwb3MpKSAhPSAtMSkgewotICAgICAgICBpZiAo
cmVmUG9zID09IC0yKQotICAgICAgICAgICAgcmVmUG9zID0gZmluZChwYXRoLmRhdGEoKSwgcGF0
aC5zaXplKCksICcjJyk7Ci0gICAgICAgIGlmIChyZWZQb3MgPiAwICYmIHBvcyA+PSByZWZQb3Mp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAocG9zID09IDAgfHwgcGF0aFtwb3Mg
LSAxXSAhPSAnOicpCi0gICAgICAgICAgICBwYXRoLnJlbW92ZShwb3MpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBwb3MgKz0gMjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2UgZG9uJ3Qg
d2FudCB0byByZW1vdmUgIi8uLyIgZnJvbSBhbiBhbmNob3IgaWRlbnRpZmllciBlaXRoZXIuCi0g
ICAgd2hpbGUgKChwb3MgPSBmaW5kU2xhc2hEb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXpl
KCkpKSAhPSAtMSkKLSAgICAgICAgcGF0aC5yZW1vdmUocG9zLCAyKTsKLX0KLQotc3RhdGljIHZv
aWQgY2hlY2tQc2V1ZG9TdGF0ZShFbGVtZW50ICplLCBib29sIGNoZWNrVmlzaXRlZCA9IHRydWUp
CitzdGF0aWMgdm9pZCBjaGVja1BzZXVkb1N0YXRlKEVsZW1lbnQqIGUsIGJvb2wgY2hlY2tWaXNp
dGVkID0gdHJ1ZSkKIHsKICAgICBpZiAoIWUtPmlzTGluaygpKSB7CiAgICAgICAgIHBzZXVkb1N0
YXRlID0gUHNldWRvTm9uZTsKQEAgLTY3MSwyNiArNTc4LDIxIEBAIHN0YXRpYyB2b2lkIGNoZWNr
UHNldWRvU3RhdGUoRWxlbWVudCAqZSwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gYXR0ci0+Y2hhcmFjdGVycygpOwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGF0dHItPmxlbmd0aCgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGUtPmRv
Y3VtZW50KCk7CiAKLSAgICBpZiAoY29udGFpbnNDb2xvblNsYXNoU2xhc2goY2hhcmFjdGVycywg
bGVuZ3RoKSkgewotICAgICAgICAvLyBGSVhNRTogU3RyYW5nZSB0byBub3QgY2xlYW4gdGhlIHBh
dGgganVzdCBiZWFjYXVzZSBpdCBoYXMgIjovLyIgaW4gaXQuCi0gICAgICAgIHBzZXVkb1N0YXRl
ID0gaGlzdG9yeUNvbnRhaW5zKGNoYXJhY3RlcnMsIGxlbmd0aCkgPyBQc2V1ZG9WaXNpdGVkIDog
UHNldWRvTGluazsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBp
ZiAoIWZyYW1lKSB7CisgICAgICAgIHBzZXVkb1N0YXRlID0gUHNldWRvTGluazsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFZlY3RvcjxVQ2hhciwgNTEyPiBidWZmZXI7Ci0gICAgaWYg
KGxlbmd0aCAmJiBjaGFyYWN0ZXJzWzBdID09ICcvJykgewotICAgICAgICBidWZmZXIuYXBwZW5k
KGN1cnJlbnRFbmNvZGVkVVJMLT5wcmVmaXguY2hhcmFjdGVycygpLCBjdXJyZW50RW5jb2RlZFVS
TC0+cHJlZml4Lmxlbmd0aCgpKTsKLSAgICB9IGVsc2UgaWYgKGxlbmd0aCAmJiBjaGFyYWN0ZXJz
WzBdID09ICcjJykgewotICAgICAgICBidWZmZXIuYXBwZW5kKGN1cnJlbnRFbmNvZGVkVVJMLT5m
aWxlLmNoYXJhY3RlcnMoKSwgY3VycmVudEVuY29kZWRVUkwtPmZpbGUubGVuZ3RoKCkpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGJ1ZmZlci5hcHBlbmQoY3VycmVudEVuY29kZWRVUkwtPnBhdGgu
Y2hhcmFjdGVycygpLCBjdXJyZW50RW5jb2RlZFVSTC0+cGF0aC5sZW5ndGgoKSk7CisgICAgUGFn
ZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKSB7CisgICAgICAgIHBzZXVk
b1N0YXRlID0gUHNldWRvTGluazsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBidWZmZXIu
YXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgY2xlYW5QYXRoKGJ1ZmZlcik7Ci0gICAg
cHNldWRvU3RhdGUgPSBoaXN0b3J5Q29udGFpbnMoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUo
KSkgPyBQc2V1ZG9WaXNpdGVkIDogUHNldWRvTGluazsKKworICAgIHBzZXVkb1N0YXRlID0gcGFn
ZS0+Z3JvdXAoKS5pc0xpbmtWaXNpdGVkKGRvY3VtZW50LCAqYXR0cikgPyBQc2V1ZG9WaXNpdGVk
IDogUHNldWRvTGluazsKIH0KIAogLy8gYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNpbmcgbnRo
LWFyZ3VtZW50cwpAQCAtODI5LDEyICs3MzEsMTQgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpj
YW5TaGFyZVN0eWxlV2l0aAogICAgICAgICAgICAgICAgICAgICBtYXBwZWRBdHRyc01hdGNoID0g
cy0+bWFwcGVkQXR0cmlidXRlcygpLT5tYXBzRXF1aXZhbGVudChtX3N0eWxlZEVsZW1lbnQtPm1h
cHBlZEF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZEF0dHJzTWF0Y2gp
IHsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBsaW5rc01hdGNoID0gdHJ1ZTsKKwogICAgICAg
ICAgICAgICAgICAgICBpZiAocy0+aXNMaW5rKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2hlY2sgdG8gc2VlIGlmIHRoZSB2aXNpdGVkIHN0YXRlIG1hdGNoZXMu
Ci0gICAgICAgICAgICAgICAgICAgICAgICBDb2xvciBsaW5rQ29sb3IgPSBtX2VsZW1lbnQtPmRv
Y3VtZW50KCktPmxpbmtDb2xvcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3Igdmlz
aXRlZENvbG9yID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocHNldWRvU3RhdGUgPT0gUHNldWRvVW5rbm93bikK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwc2V1ZG9TdGF0ZSA9PSBQc2V1ZG9Vbmtub3du
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29sb3ImIGxpbmtDb2xvciA9
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgQ29sb3ImIHZpc2l0ZWRDb2xvciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQo
KS0+dmlzaXRlZExpbmtDb2xvcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNr
UHNldWRvU3RhdGUobV9lbGVtZW50LCBzdHlsZS0+cHNldWRvU3RhdGUoKSAhPSBQc2V1ZG9BbnlM
aW5rIHx8IGxpbmtDb2xvciAhPSB2aXNpdGVkQ29sb3IpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgbGlua3NNYXRjaCA9IChwc2V1ZG9TdGF0ZSA9
PSBzdHlsZS0+cHNldWRvU3RhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCkBAIC01MTM0LDggKzUwMzgsOCBAQCBDb2xvciBDU1NTdHlsZVNlbGVjdG9y
OjpnZXRDb2xvckZyb21QcmltCiAgICAgICAgIGlmIChpZGVudCA9PSBDU1NfVkFMX19XRUJLSVRf
VEVYVCkKICAgICAgICAgICAgIGNvbCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4dENvbG9y
KCk7CiAgICAgICAgIGVsc2UgaWYgKGlkZW50ID09IENTU19WQUxfX1dFQktJVF9MSU5LKSB7Ci0g
ICAgICAgICAgICBDb2xvciBsaW5rQ29sb3IgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtD
b2xvcigpOwotICAgICAgICAgICAgQ29sb3IgdmlzaXRlZENvbG9yID0gbV9lbGVtZW50LT5kb2N1
bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCk7CisgICAgICAgICAgICBjb25zdCBDb2xvciYgbGlu
a0NvbG9yID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKKyAgICAgICAgICAg
IGNvbnN0IENvbG9yJiB2aXNpdGVkQ29sb3IgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0
ZWRMaW5rQ29sb3IoKTsKICAgICAgICAgICAgIGlmIChsaW5rQ29sb3IgPT0gdmlzaXRlZENvbG9y
KQogICAgICAgICAgICAgICAgIGNvbCA9IGxpbmtDb2xvcjsKICAgICAgICAgICAgIGVsc2UgewpJ
bmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gMzA4MTYpCisrKyBXZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCwxNCArMTEwLDYgQEAg
cHVibGljOgogCiAgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZzsKIAotICAgICAgICBzdHJ1Y3Qg
RW5jb2RlZFVSTCB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4OyAvLyBwcm90b2NvbCwgaG9z
dCwgZXRjLgotICAgICAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgICAgICBTdHJpbmcgZmls
ZTsKLSAgICAgICAgfSBtX2VuY29kZWRVUkw7Ci0KLSAgICAgICAgdm9pZCBzZXRFbmNvZGVkVVJM
KGNvbnN0IEtVUkwmIHVybCk7Ci0KICAgICAgICAgLy8gR2l2ZW4gYSBDU1Mga2V5d29yZCBpbiB0
aGUgcmFuZ2UgKHh4LXNtYWxsIHRvIC13ZWJraXQteHh4LWxhcmdlKSwgdGhpcyBmdW5jdGlvbiB3
aWxsIHJldHVybgogICAgICAgICAvLyB0aGUgY29ycmVjdCBmb250IHNpemUgc2NhbGVkIHJlbGF0
aXZlIHRvIHRoZSB1c2VyJ3MgZGVmYXVsdCAobWVkaXVtKS4KICAgICAgICAgZmxvYXQgZm9udFNp
emVGb3JLZXl3b3JkKGludCBrZXl3b3JkLCBib29sIHF1aXJrc01vZGUsIGJvb2wgbW9ub3NwYWNl
KSBjb25zdDsKQEAgLTI1MCwxMSArMjQyLDggQEAgcHVibGljOgogICAgICAgICBib29sIG1fbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzOwogCiAgICAgICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+
IG1fZm9udFNlbGVjdG9yOwotCiAgICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IG1f
c2VsZWN0b3JBdHRyczsKLSAgICAgICAgCiAgICAgICAgIFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbio+IG1fYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVjbHM7Ci0gICAgICAgIAog
ICAgICAgICBWZWN0b3I8TWVkaWFRdWVyeVJlc3VsdCo+IG1fdmlld3BvcnREZXBlbmRlbnRNZWRp
YVF1ZXJ5UmVzdWx0czsKIAogICAgICAgICB2b2lkIGFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NW
YWx1ZSopOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzA4MTYpCisrKyBXZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMTUsNyArMTIxNSw2IEBAIHZvaWQgRG9j
dW1lbnQ6OmF0dGFjaCgpCiAgICAgICAgIGlmIChTZXR0aW5ncyogZG9jU2V0dGluZ3MgPSBzZXR0
aW5ncygpKQogICAgICAgICAgICAgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzID0gZG9jU2V0dGlu
Z3MtPmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKCk7CiAgICAgICAgIG1fc3R5bGVTZWxlY3Rv
ciA9IG5ldyBDU1NTdHlsZVNlbGVjdG9yKHRoaXMsIHVzZXJTdHlsZVNoZWV0KCksIG1fc3R5bGVT
aGVldHMuZ2V0KCksIG1fbWFwcGVkRWxlbWVudFNoZWV0LmdldCgpLCAhaW5Db21wYXRNb2RlKCks
IG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyk7Ci0gICAgICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0
RW5jb2RlZFVSTChtX3VybCk7CiAgICAgfQogCiAgICAgcmVjYWxjU3R5bGUoRm9yY2UpOwpAQCAt
MTYzNiw5ICsxNjM1LDYgQEAgdm9pZCBEb2N1bWVudDo6c2V0VVJMKGNvbnN0IEtVUkwmIHVybCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV91cmwgPSB1cmw7Ci0gICAgaWYgKG1fc3R5bGVTZWxl
Y3RvcikKLSAgICAgICAgbV9zdHlsZVNlbGVjdG9yLT5zZXRFbmNvZGVkVVJMKHVybCk7Ci0KICAg
ICBtX2lzQWxsb3dlZFRvTG9hZExvY2FsUmVzb3VyY2VzID0gc2hvdWxkQmVBbGxvd2VkVG9Mb2Fk
TG9jYWxSZXNvdXJjZXMoKTsKICB9CiAgCkBAIC0yMjA4LDcgKzIyMDQsNiBAQCB2b2lkIERvY3Vt
ZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAvLyBDcmVhdGUgYSBuZXcgc3R5bGUgc2Vs
ZWN0b3IKICAgICBkZWxldGUgbV9zdHlsZVNlbGVjdG9yOwogICAgIG1fc3R5bGVTZWxlY3RvciA9
IG5ldyBDU1NTdHlsZVNlbGVjdG9yKHRoaXMsIHVzZXJTdHlsZVNoZWV0KCksIG1fc3R5bGVTaGVl
dHMuZ2V0KCksIG1fbWFwcGVkRWxlbWVudFNoZWV0LmdldCgpLCAhaW5Db21wYXRNb2RlKCksIG1h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcyk7Ci0gICAgbV9zdHlsZVNlbGVjdG9yLT5zZXRFbmNvZGVk
VVJMKG1fdXJsKTsKICAgICBtX2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0b3IgPSB0cnVlOwogfQog
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQAog
I2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJQYWdlQ2FjaGUuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQbHVn
aW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJQYXJ0LmgiCkBAIC0zODQ4LDIxICszODQ5LDI1IEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0
ZW0+IEZyYW1lTG9hZGVyOjpjcmUKIAogdm9pZCBGcmFtZUxvYWRlcjo6YWRkQmFja0ZvcndhcmRJ
dGVtQ2xpcHBlZEF0VGFyZ2V0KGJvb2wgZG9DbGlwKQogewotICAgIGlmIChQYWdlKiBwYWdlID0g
bV9mcmFtZS0+cGFnZSgpKQotICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCktPnVybEZvckhp
c3RvcnkoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEZyYW1lKiBtYWluRnJhbWUgPSBwYWdl
LT5tYWluRnJhbWUoKTsKLSAgICAgICAgICAgIEFTU0VSVChtYWluRnJhbWUpOwotICAgICAgICAg
ICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gbWFpbkZyYW1lLT5sb2FkZXIoKTsKLQotICAg
ICAgICAgICAgaWYgKCFmcmFtZUxvYWRlci0+bV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uICYm
IHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5lbnRyaWVzKCkuc2l6ZSgpID09IDEpIHsKLSAgICAg
ICAgICAgICAgICBmcmFtZUxvYWRlci0+bV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigp
OwotICAgICAgICAgICAgfQorICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAg
aWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIFJlZlB0cjxIaXN0b3J5
SXRlbT4gaXRlbSA9IGZyYW1lTG9hZGVyLT5jcmVhdGVIaXN0b3J5SXRlbVRyZWUobV9mcmFtZSwg
ZG9DbGlwKTsKLSAgICAgICAgICAgIExPRyhCYWNrRm9yd2FyZCwgIldlYkNvcmVCYWNrRm9yd2Fy
ZCAtIEFkZGluZyBiYWNrZm9yd2FyZCBpdGVtICVwIGZvciBmcmFtZSAlcyIsIGl0ZW0uZ2V0KCks
IGRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAg
ICAgICAgIHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5hZGRJdGVtKGl0ZW0pOwotICAgICAgICB9
CisgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBtYWluRnJhbWUgPSBwYWdlLT5tYWluRnJhbWUo
KTsKKyAgICBBU1NFUlQobWFpbkZyYW1lKTsKKyAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIg
PSBtYWluRnJhbWUtPmxvYWRlcigpOworCisgICAgaWYgKCFmcmFtZUxvYWRlci0+bV9kaWRQZXJm
b3JtRmlyc3ROYXZpZ2F0aW9uICYmIHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5lbnRyaWVzKCku
c2l6ZSgpID09IDEpIHsKKyAgICAgICAgZnJhbWVMb2FkZXItPm1fZGlkUGVyZm9ybUZpcnN0TmF2
aWdhdGlvbiA9IHRydWU7CisgICAgICAgIG1fY2xpZW50LT5kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0
aW9uKCk7CisgICAgfQorCisgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gZnJhbWVMb2Fk
ZXItPmNyZWF0ZUhpc3RvcnlJdGVtVHJlZShtX2ZyYW1lLCBkb0NsaXApOworICAgIExPRyhCYWNr
Rm9yd2FyZCwgIldlYkNvcmVCYWNrRm9yd2FyZCAtIEFkZGluZyBiYWNrZm9yd2FyZCBpdGVtICVw
IGZvciBmcmFtZSAlcyIsIGl0ZW0uZ2V0KCksIGRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmlu
ZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+YWRkSXRl
bShpdGVtKTsKIH0KIAogUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gRnJhbWVMb2FkZXI6OmNyZWF0
ZUhpc3RvcnlJdGVtVHJlZShGcmFtZSogdGFyZ2V0RnJhbWUsIGJvb2wgY2xpcEF0VGFyZ2V0KQpA
QCAtNDExMCwxMyArNDExNSwxMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkSXRlbShIaXN0b3J5
SXRlbSogCiAvLyBXYWxrIHRoZSBmcmFtZSB0cmVlIGFuZCBlbnN1cmUgdGhhdCB0aGUgVVJMcyBt
YXRjaCB0aGUgVVJMcyBpbiB0aGUgaXRlbS4KIGJvb2wgRnJhbWVMb2FkZXI6OnVybHNNYXRjaEl0
ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0CiB7Ci0gICAgS1VSTCBjdXJyZW50VVJMID0gZG9j
dW1lbnRMb2FkZXIoKS0+dXJsKCk7Ci0gICAgCisgICAgY29uc3QgS1VSTCYgY3VycmVudFVSTCA9
IGRvY3VtZW50TG9hZGVyKCktPnVybCgpOwogICAgIGlmICghZXF1YWxJZ25vcmluZ1JlZihjdXJy
ZW50VVJMLCBpdGVtLT51cmwoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAg
IGNvbnN0IEhpc3RvcnlJdGVtVmVjdG9yJiBjaGlsZEl0ZW1zID0gaXRlbS0+Y2hpbGRyZW4oKTsK
LSAgICAKKwogICAgIHVuc2lnbmVkIHNpemUgPSBjaGlsZEl0ZW1zLnNpemUoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIEZyYW1lKiBjaGlsZEZy
YW1lID0gbV9mcmFtZS0+dHJlZSgpLT5jaGlsZChjaGlsZEl0ZW1zW2ldLT50YXJnZXQoKSk7CkBA
IC00MTM3LDE3ICs0MTQxLDE5IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmdvVG9JdGVtKEhpc3RvcnlJ
dGVtKiAKICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMzk1MTI4Mz4gY2FuIHZpZXcgcGFnZXMgZnJv
bSB0aGUgYmFjay9mb3J3YXJkIGNhY2hlIHRoYXQgc2hvdWxkIGJlIGRpc2FsbG93ZWQgYnkgUGFy
ZW50YWwgQ29udHJvbHMKICAgICAvLyBVbHRpbWF0ZWx5LCBoaXN0b3J5IGl0ZW0gbmF2aWdhdGlv
bnMgc2hvdWxkIGdvIHRocm91Z2ggdGhlIHBvbGljeSBkZWxlZ2F0ZS4gVGhhdCdzIGNvdmVyZWQg
aW46CiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM5Nzk1Mzk+IGJhY2svZm9yd2FyZCBjYWNoZSBu
YXZpZ2F0aW9ucyBzaG91bGQgY29uc3VsdCBwb2xpY3kgZGVsZWdhdGUKLSAgICBpZiAoUGFnZSog
cGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgaWYgKG1fY2xpZW50LT5zaG91bGRHb1Rv
SGlzdG9yeUl0ZW0odGFyZ2V0SXRlbSkpIHsKLSAgICAgICAgICAgIEJhY2tGb3J3YXJkTGlzdCog
YmZMaXN0ID0gcGFnZS0+YmFja0ZvcndhcmRMaXN0KCk7Ci0gICAgICAgICAgICBIaXN0b3J5SXRl
bSogY3VycmVudEl0ZW0gPSBiZkxpc3QtPmN1cnJlbnRJdGVtKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIFNldCB0aGUgQkYgY3Vyc29yIGJlZm9yZSBjb21taXQsIHdoaWNoIGxldHMg
dGhlIHVzZXIgcXVpY2tseSBjbGljayBiYWNrL2ZvcndhcmQgYWdhaW4uCi0gICAgICAgICAgICAv
LyAtIHBsdXMsIGl0IG9ubHkgbWFrZXMgc2Vuc2UgZm9yIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9w
ZXJhdGlvbiB0aHJvdWdoIHRoZSBmcmFtZXRyZWUsCi0gICAgICAgICAgICAvLyBhcyBvcHBvc2Vk
IHRvIGhhcHBlbmluZyBmb3Igc29tZS9vbmUgb2YgdGhlIHBhZ2UgY29tbWl0cyB0aGF0IG1pZ2h0
IGhhcHBlbiBzb29uCi0gICAgICAgICAgICBiZkxpc3QtPmdvVG9JdGVtKHRhcmdldEl0ZW0pOwot
ICAgICAgICAgICAgcmVjdXJzaXZlR29Ub0l0ZW0odGFyZ2V0SXRlbSwgY3VycmVudEl0ZW0sIHR5
cGUpOwotICAgICAgICB9CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fY2xpZW50LT5zaG91bGRHb1Rv
SGlzdG9yeUl0ZW0odGFyZ2V0SXRlbSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNldCB0
aGUgQkYgY3Vyc29yIGJlZm9yZSBjb21taXQsIHdoaWNoIGxldHMgdGhlIHVzZXIgcXVpY2tseSBj
bGljayBiYWNrL2ZvcndhcmQgYWdhaW4uCisgICAgLy8gLSBwbHVzLCBpdCBvbmx5IG1ha2VzIHNl
bnNlIGZvciB0aGUgdG9wIGxldmVsIG9mIHRoZSBvcGVyYXRpb24gdGhyb3VnaCB0aGUgZnJhbWV0
cmVlLAorICAgIC8vIGFzIG9wcG9zZWQgdG8gaGFwcGVuaW5nIGZvciBzb21lL29uZSBvZiB0aGUg
cGFnZSBjb21taXRzIHRoYXQgbWlnaHQgaGFwcGVuIHNvb24KKyAgICBCYWNrRm9yd2FyZExpc3Qq
IGJmTGlzdCA9IHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpOworICAgIEhpc3RvcnlJdGVtKiBjdXJy
ZW50SXRlbSA9IGJmTGlzdC0+Y3VycmVudEl0ZW0oKTsgICAgCisgICAgYmZMaXN0LT5nb1RvSXRl
bSh0YXJnZXRJdGVtKTsKKyAgICByZWN1cnNpdmVHb1RvSXRlbSh0YXJnZXRJdGVtLCBjdXJyZW50
SXRlbSwgdHlwZSk7CiB9CiAKIC8vIFRoZSBnZW5lcmFsIGlkZWEgaGVyZSBpcyB0byB0cmF2ZXJz
ZSB0aGUgZnJhbWUgdHJlZSBhbmQgdGhlIGl0ZW0gdHJlZSBpbiBwYXJhbGxlbCwKQEAgLTQyMjUs
MjUgKzQyMzEsMjMgQEAgYm9vbCBGcmFtZUxvYWRlcjo6Y2hpbGRGcmFtZXNNYXRjaEl0ZW0oSAog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVHbG9iYWxIaXN0
b3J5KCkKLXsKLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwot
ICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc2V0dGluZ3MtPnBy
aXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IEtVUkwm
IHVybCA9IGRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKTsKLSAgICBpZiAodXJsLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2xpZW50LT51cGRhdGVHbG9iYWxIaXN0
b3J5KHVybCk7Ci19CisvLyBUaGVyZSBhcmUgMyB0aGluZ3MgeW91IG1pZ2h0IHRoaW5rIG9mIGFz
ICJoaXN0b3J5IiwgYWxsIG9mIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHRoZXNlIGZ1bmN0aW9ucy4K
Ky8vCisvLyAgICAgMSkgQmFjay9mb3J3YXJkOiBUaGUgbV9jdXJyZW50SGlzdG9yeUl0ZW0gaXMg
cGFydCBvZiB0aGlzIG1lY2hhbmlzbS4KKy8vICAgICAyKSBHbG9iYWwgaGlzdG9yeTogSGFuZGxl
ZCBieSB0aGUgY2xpZW50LgorLy8gICAgIDMpIFZpc2l0ZWQgbGlua3M6IEhhbmRsZWQgYnkgdGhl
IFBhZ2VHcm91cC4KIAogdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvclN0YW5kYXJk
TG9hZCgpCiB7CiAgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlz
dG9yeSBmb3IgU3RhbmRhcmQgTG9hZCBpbiBmcmFtZSAlcyIsIGRvY3VtZW50TG9hZGVyKCktPnVy
bCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAKKworICAgIFNldHRpbmdzKiBzZXR0
aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7CisgICAgYm9vbCBuZWVkUHJpdmFjeSA9ICFzZXR0
aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOworICAgIGNvbnN0IEtV
UkwmIGhpc3RvcnlVUkwgPSBkb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7CisKICAg
ICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBvY2N1cmVkIGR1cmluZyBsb2FkIGFuZCB0aGlzIGlzIGEg
c3ViZnJhbWUsIHVwZGF0ZSB0aGUgY3VycmVudAotICAgIC8vIGhpc3RvcnkgaXRlbSByYXRoZXIg
dGhhbiBhZGRpbmcgYSBuZXcgb25lLiA8cmRhcjovL3Byb2JsZW0vNTMzMzQ5Nj4KKyAgICAvLyBi
YWNrL2ZvcndhcmQgaXRlbSByYXRoZXIgdGhhbiBhZGRpbmcgYSBuZXcgb25lIGFuZCBkb24ndCBh
ZGQgdGhlIG5ldyBVUkwgdG8gZ2xvYmFsCisgICAgLy8gaGlzdG9yeSBhdCBhbGwuIEJ1dCBkbyBh
ZGQgaXQgdG8gdmlzaXRlZCBsaW5rcy4gPHJkYXI6Ly9wcm9ibGVtLzUzMzM0OTY+CiAgICAgYm9v
bCBmcmFtZU5hdmlnYXRpb25EdXJpbmdMb2FkID0gZmFsc2U7CiAgICAgaWYgKG1fbmF2aWdhdGlv
bkR1cmluZ0xvYWQpIHsKICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IG1f
ZnJhbWUtPm93bmVyRWxlbWVudCgpOwpAQCAtNDI1MiwxNCArNDI1NiwyMCBAQCB2b2lkIEZyYW1l
TG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yU3RhbmRhCiAgICAgfQogCiAgICAgaWYgKCFmcmFtZU5h
dmlnYXRpb25EdXJpbmdMb2FkICYmICFkb2N1bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGlyZWN0
KCkpIHsKLSAgICAgICAgaWYgKCFkb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCkuaXNF
bXB0eSgpKQorICAgICAgICBpZiAoIWhpc3RvcnlVUkwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICBhZGRCYWNrRm9yd2FyZEl0ZW1DbGlwcGVkQXRUYXJnZXQodHJ1ZSk7CisgICAgICAgICAgICBp
ZiAoIW5lZWRQcml2YWN5KQorICAgICAgICAgICAgICAgIG1fY2xpZW50LT51cGRhdGVHbG9iYWxI
aXN0b3J5KGhpc3RvcnlVUkwpOworICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChkb2N1bWVudExv
YWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSAmJiBtX2N1cnJlbnRIaXN0b3J5SXRl
bSkgewogICAgICAgICBtX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0VVJMKGRvY3VtZW50TG9hZGVy
KCktPnVybCgpKTsKICAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0tPnNldEZvcm1JbmZvRnJv
bVJlcXVlc3QoZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpKTsKICAgICB9CiAKLSAgICB1cGRh
dGVHbG9iYWxIaXN0b3J5KCk7CisgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSAmJiAhbmVl
ZFByaXZhY3kpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCisg
ICAgICAgICAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKGhpc3RvcnlVUkwpOworICAg
IH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvckNsaWVudFJlZGlyZWN0
KCkKQEAgLTQyNzYsNyArNDI4NiwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5
Rm9yQ2xpZW50CiAgICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVtLT5jbGVhclNjcm9sbFBvaW50
KCk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjYWxsIHVwZGF0ZUdsb2JhbEhp
c3RvcnkgaGVyZT8KKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygp
OworICAgIGJvb2wgbmVlZFByaXZhY3kgPSAhc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVC
cm93c2luZ0VuYWJsZWQoKTsKKyAgICBjb25zdCBLVVJMJiBoaXN0b3J5VVJMID0gZG9jdW1lbnRM
b2FkZXIoKS0+dXJsRm9ySGlzdG9yeSgpOworCisgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHko
KSAmJiAhbmVlZFByaXZhY3kpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5w
YWdlKCkpCisgICAgICAgICAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKGhpc3RvcnlV
UkwpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvckJhY2tG
b3J3YXJkTmF2aWdhdGlvbigpCkBAIC00Mjg4LDggKzQzMDUsNiBAQCB2b2lkIEZyYW1lTG9hZGVy
Ojp1cGRhdGVIaXN0b3J5Rm9yQmFja0ZvCiAKICAgICAvLyBNdXN0IGdyYWIgdGhlIGN1cnJlbnQg
c2Nyb2xsIHBvc2l0aW9uIGJlZm9yZSBkaXN0dXJiaW5nIGl0CiAgICAgc2F2ZVNjcm9sbFBvc2l0
aW9uQW5kVmlld1N0YXRlVG9JdGVtKG1fcHJldmlvdXNIaXN0b3J5SXRlbS5nZXQoKSk7Ci0KLSAg
ICAvLyBGSVhNRTogU2hvdWxkIHdlIGNhbGwgdXBkYXRlR2xvYmFsSGlzdG9yeSBoZXJlPwogfQog
CiB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yUmVsb2FkKCkKQEAgLTQzMDksOCAr
NDMyNCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWxvYWQKICAgICAg
ICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0tPnNldFVSTChkb2N1bWVudExvYWRlcigpLT5y
ZXF1ZXN0VVJMKCkpOwogICAgIH0KLSAgICAKLSAgICB1cGRhdGVHbG9iYWxIaXN0b3J5KCk7CiB9
CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JSZWRpcmVjdFdpdGhMb2NrZWRI
aXN0b3J5KCkKQEAgLTQzMjAsOSArNDMzMywxNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVI
aXN0b3J5Rm9yUmVkaXJlCiAgICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVw
ZGF0aW5nIEhpc3RvcnkgZm9yIGludGVybmFsIGxvYWQgaW4gZnJhbWUgJXMiLCBkb2N1bWVudExv
YWRlcigpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAgICAgCisgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBib29sIG5lZWRQcml2YWN5
ID0gIXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7CisgICAg
Y29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IGRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3Rvcnko
KTsKKwogICAgIGlmIChkb2N1bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGlyZWN0KCkpIHsKLSAg
ICAgICAgaWYgKCFtX2N1cnJlbnRIaXN0b3J5SXRlbSAmJiAhbV9mcmFtZS0+dHJlZSgpLT5wYXJl
bnQoKSkKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRIaXN0b3J5SXRlbSAmJiAhbV9mcmFtZS0+dHJl
ZSgpLT5wYXJlbnQoKSkgewogICAgICAgICAgICAgYWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0
VGFyZ2V0KHRydWUpOworICAgICAgICAgICAgaWYgKCFuZWVkUHJpdmFjeSAmJiAhaGlzdG9yeVVS
TC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZUdsb2JhbEhpc3Rv
cnkoaGlzdG9yeVVSTCk7CisgICAgICAgIH0KICAgICAgICAgaWYgKG1fY3VycmVudEhpc3RvcnlJ
dGVtKSB7CiAgICAgICAgICAgICBtX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0VVJMKGRvY3VtZW50
TG9hZGVyKCktPnVybCgpKTsKICAgICAgICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVtLT5zZXRG
b3JtSW5mb0Zyb21SZXF1ZXN0KGRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSk7CkBAIC00MzMz
LDcgKzQzNTMsMTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvclJlZGlyZQog
ICAgICAgICAgICAgcGFyZW50RnJhbWUtPmxvYWRlcigpLT5tX2N1cnJlbnRIaXN0b3J5SXRlbS0+
YWRkQ2hpbGRJdGVtKGNyZWF0ZUhpc3RvcnlJdGVtKHRydWUpKTsKICAgICB9CiAKLSAgICB1cGRh
dGVHbG9iYWxIaXN0b3J5KCk7CisgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSAmJiAhbmVl
ZFByaXZhY3kpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCisg
ICAgICAgICAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKGhpc3RvcnlVUkwpOworICAg
IH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvckNvbW1pdCgpCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDMwODE2KQorKysgV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDggKzQ1Niw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCB1cGRhdGVIaXN0b3J5Rm9yQ2xpZW50UmVkaXJlY3QoKTsK
ICAgICAgICAgdm9pZCB1cGRhdGVIaXN0b3J5Rm9yQ29tbWl0KCk7CiAgICAgCi0gICAgICAgIHZv
aWQgdXBkYXRlR2xvYmFsSGlzdG9yeSgpOwotCiAgICAgICAgIHZvaWQgcmVkaXJlY3Rpb25UaW1l
ckZpcmVkKFRpbWVyPEZyYW1lTG9hZGVyPiopOwogICAgICAgICB2b2lkIGNoZWNrQ29tcGxldGVk
VGltZXJGaXJlZChUaW1lcjxGcmFtZUxvYWRlcj4qKTsKICAgICAgICAgdm9pZCBjaGVja0xvYWRD
b21wbGV0ZVRpbWVyRmlyZWQoVGltZXI8RnJhbWVMb2FkZXI+Kik7CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvQ2hyb21lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2
aXNpb24gMzA4MTYpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3Jv
dXAuaCIKICNpbmNsdWRlICJQYXVzZWRUaW1lb3V0cy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTM0OSwxNyArMzUwLDE4IEBA
IHZvaWQgQ2hyb21lQ2xpZW50OjpkYXNoYm9hcmRSZWdpb25zQ2hhbmcKIHsKIH0KIAordm9pZCBD
aHJvbWVDbGllbnQ6OnBvcHVsYXRlVmlzaXRlZExpbmtzKCkKK3sKK30KKwogLy8gLS0tLS0tLS0K
IAogUGFnZUdyb3VwTG9hZERlZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXIoUGFnZSogcGFn
ZSwgYm9vbCBkZWZlclNlbGYpCiB7Ci0gICAgY29uc3QgSGFzaFNldDxQYWdlKj4qIGdyb3VwID0g
cGFnZS0+ZnJhbWVOYW1lc3BhY2UoKTsKLQotICAgIGlmICghZ3JvdXApCi0gICAgICAgIHJldHVy
bjsKKyAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2Vz
KCk7CiAKLSAgICBIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZ3JvdXAtPmVu
ZCgpOwotICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZ3JvdXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICBQYWdlKiBvdGhlclBhZ2UgPSAqaXQ7CiAgICAgICAgIGlmICgoZGVmZXJTZWxmIHx8IG90aGVy
UGFnZSAhPSBwYWdlKSkgewogICAgICAgICAgICAgaWYgKCFvdGhlclBhZ2UtPmRlZmVyc0xvYWRp
bmcoKSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDMwODE2KQorKysgV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkYXNoYm9hcmRSZWdpb25z
Q2hhbmdlZCgpOwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygp
OworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIH5DaHJvbWVDbGllbnQoKSB7IH0K
ICAgICB9OwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAJKHJldmlzaW9uIDMwODE2KQorKysgV2ViQ29yZS9w
YWdlL0ZyYW1lVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5o
IgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1
ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KQEAgLTE4MiwxNiArMTgzLDE3IEBAIEZyYW1lKiBGcmFt
ZVRyZWU6OmZpbmQoY29uc3QgQXRvbWljU3RyaW4KICAgICAgICAgaWYgKGZyYW1lLT50cmVlKCkt
Pm5hbWUoKSA9PSBuYW1lKQogICAgICAgICAgICAgcmV0dXJuIGZyYW1lOwogCi0gICAgLy8gU2Vh
cmNoIHRoZSBlbnRpcmUgdHJlZSBmb3IgYWxsIG90aGVyIHBhZ2VzIGluIHRoaXMgbmFtZXNwYWNl
LgotICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+KiBwYWdlcyA9IHBhZ2UtPmZyYW1lTmFtZXNwYWNl
KCk7Ci0gICAgaWYgKHBhZ2VzKSB7Ci0gICAgICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBwYWdlcy0+ZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gcGFnZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgUGFnZSogb3RoZXJQYWdlID0gKml0OwotICAgICAgICAgICAgaWYgKG90aGVyUGFn
ZSAhPSBwYWdlKQotICAgICAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gb3RoZXJQYWdl
LT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0
KCkpCi0gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+dHJlZSgpLT5uYW1lKCkgPT0gbmFt
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICAvLyBTZWFyY2gg
dGhlIGVudGlyZSB0cmVlIG9mIGVhY2ggb2YgdGhlIG90aGVyIHBhZ2VzIGluIHRoaXMgbmFtZXNw
YWNlLgorICAgIC8vIEZJWE1FOiBJcyByYW5kb20gb3JkZXIgT0s/CisgICAgY29uc3QgSGFzaFNl
dDxQYWdlKj4mIHBhZ2VzID0gcGFnZS0+Z3JvdXAoKS5wYWdlcygpOworICAgIEhhc2hTZXQ8UGFn
ZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8
UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBQYWdlKiBvdGhlclBhZ2UgPSAqaXQ7CisgICAgICAgIGlmIChvdGhlclBh
Z2UgIT0gcGFnZSkgeworICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBvdGhlclBhZ2Ut
Pm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQo
KSkgeworICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+dHJlZSgpLT5uYW1lKCkgPT0gbmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvR2xvYmFsSGlzdG9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9HbG9iYWxIaXN0b3J5LmgJKHJldmlzaW9uIDMwODE2KQorKysg
V2ViQ29yZS9wYWdlL0dsb2JhbEhpc3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzNyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBHbG9iYWxIaXN0b3J5X2gKLSNkZWZpbmUgR2xv
YmFsSGlzdG9yeV9oCi0KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotICAgIGJvb2wgaGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBHbG9iYWxIaXN0b3J5X2gKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDMwODE2KQorKysg
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUg
IlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUg
IlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKQEAgLTQ5LDggKzUwLDEwIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUGFnZUdyb3VwKj4gUGFnZUdyb3Vw
TWFwOworCiBzdGF0aWMgSGFzaFNldDxQYWdlKj4qIGFsbFBhZ2VzOwotc3RhdGljIEhhc2hNYXA8
U3RyaW5nLCBIYXNoU2V0PFBhZ2UqPio+KiBmcmFtZU5hbWVzcGFjZXM7CitzdGF0aWMgUGFnZUdy
b3VwTWFwKiBwYWdlR3JvdXBzOwogCiAjaWZuZGVmIE5ERUJVRwogV1RGTG9nQ2hhbm5lbCBMb2dX
ZWJDb3JlUGFnZUxlYWtzID0gIHsgMHgwMDAwMDAwMCwgIiIsIFdURkxvZ0NoYW5uZWxPbiB9OwpA
QCAtODUsNiArODgsNyBAQCBQYWdlOjpQYWdlKENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50LCBD
CiAgICAgLCBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXIoMCkKICAgICAsIG1fZGlkTG9hZFVz
ZXJTdHlsZVNoZWV0KGZhbHNlKQogICAgICwgbV91c2VyU3R5bGVTaGVldE1vZGlmaWNhdGlvblRp
bWUoMCkKKyAgICAsIG1fZ3JvdXAoMCkKICAgICAsIG1fZGVidWdnZXIoMCkKIHsKICAgICBpZiAo
IWFsbFBhZ2VzKSB7CkBAIC0xNjUsMzcgKzE2OSw0MSBAQCB2b2lkIFBhZ2U6OmdvVG9JdGVtKEhp
c3RvcnlJdGVtKiBpdGVtLCBGCiAKIHZvaWQgUGFnZTo6c2V0R3JvdXBOYW1lKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKLSAgICBpZiAoZnJhbWVOYW1lc3BhY2VzICYmICFtX2dyb3VwTmFtZS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgSGFzaFNldDxQYWdlKj4qIG9sZE5hbWVzcGFjZSA9IGZyYW1lTmFt
ZXNwYWNlcy0+Z2V0KG1fZ3JvdXBOYW1lKTsKLSAgICAgICAgaWYgKG9sZE5hbWVzcGFjZSkgewot
ICAgICAgICAgICAgb2xkTmFtZXNwYWNlLT5yZW1vdmUodGhpcyk7Ci0gICAgICAgICAgICBpZiAo
b2xkTmFtZXNwYWNlLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBmcmFtZU5hbWVzcGFj
ZXMtPnJlbW92ZShtX2dyb3VwTmFtZSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG9sZE5hbWVz
cGFjZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGlmICghbV9ncm91cE5hbWUuaXNF
bXB0eSgpKSB7CisgICAgICAgIEFTU0VSVCghbV9zaW5nbGVQYWdlR3JvdXApOworICAgICAgICBB
U1NFUlQobV9ncm91cCk7CisgICAgICAgIEFTU0VSVChwYWdlR3JvdXBzKTsKKyAgICAgICAgQVNT
RVJUKHBhZ2VHcm91cHMtPmdldChtX2dyb3VwTmFtZSkgPT0gbV9ncm91cCk7CisgICAgICAgIG1f
Z3JvdXAtPnJlbW92ZVBhZ2UodGhpcyk7CisgICAgICAgIGlmIChtX2dyb3VwLT5wYWdlcygpLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHBhZ2VHcm91cHMtPnJlbW92ZShtX2dyb3VwTmFtZSk7CiAg
ICAgfQogICAgIG1fZ3JvdXBOYW1lID0gbmFtZTsKLSAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGlmICghZnJhbWVOYW1lc3BhY2VzKQotICAgICAgICAgICAgZnJhbWVOYW1lc3Bh
Y2VzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBIYXNoU2V0PFBhZ2UqPio+OwotICAgICAgICBIYXNo
U2V0PFBhZ2UqPiogbmV3TmFtZXNwYWNlID0gZnJhbWVOYW1lc3BhY2VzLT5nZXQobmFtZSk7Ci0g
ICAgICAgIGlmICghbmV3TmFtZXNwYWNlKSB7Ci0gICAgICAgICAgICBuZXdOYW1lc3BhY2UgPSBu
ZXcgSGFzaFNldDxQYWdlKj47Ci0gICAgICAgICAgICBmcmFtZU5hbWVzcGFjZXMtPmFkZChuYW1l
LCBuZXdOYW1lc3BhY2UpOworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgbV9ncm91
cCA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIG1fc2luZ2xlUGFnZUdyb3VwLmNsZWFyKCk7Cisg
ICAgICAgIGlmICghcGFnZUdyb3VwcykKKyAgICAgICAgICAgIHBhZ2VHcm91cHMgPSBuZXcgUGFn
ZUdyb3VwTWFwOworICAgICAgICBwYWlyPFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IsIGJvb2w+IHJl
c3VsdCA9IHBhZ2VHcm91cHMtPmFkZChuYW1lLCAwKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuc2Vj
b25kKSB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmZpcnN0LT5zZWNvbmQpOworICAgICAg
ICAgICAgbV9ncm91cCA9IHJlc3VsdC5maXJzdC0+c2Vjb25kOworICAgICAgICAgICAgbV9ncm91
cC0+YWRkUGFnZSh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
cmVzdWx0LmZpcnN0LT5zZWNvbmQpOworICAgICAgICAgICAgbV9ncm91cCA9IG5ldyBQYWdlR3Jv
dXAodGhpcyk7CisgICAgICAgICAgICByZXN1bHQuZmlyc3QtPnNlY29uZCA9IG1fZ3JvdXA7CiAg
ICAgICAgIH0KLSAgICAgICAgbmV3TmFtZXNwYWNlLT5hZGQodGhpcyk7CiAgICAgfQogfQogCi1j
b25zdCBIYXNoU2V0PFBhZ2UqPiogUGFnZTo6ZnJhbWVOYW1lc3BhY2UoKSBjb25zdAotewotICAg
IHJldHVybiAoZnJhbWVOYW1lc3BhY2VzICYmICFtX2dyb3VwTmFtZS5pc0VtcHR5KCkpID8gZnJh
bWVOYW1lc3BhY2VzLT5nZXQobV9ncm91cE5hbWUpIDogMDsKLX0KLQotY29uc3QgSGFzaFNldDxQ
YWdlKj4qIFBhZ2U6OmZyYW1lTmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKQordm9p
ZCBQYWdlOjppbml0R3JvdXAoKQogewotICAgIHJldHVybiAoZnJhbWVOYW1lc3BhY2VzICYmICFn
cm91cE5hbWUuaXNFbXB0eSgpKSA/IGZyYW1lTmFtZXNwYWNlcy0+Z2V0KGdyb3VwTmFtZSkgOiAw
OworICAgIEFTU0VSVCghbV9zaW5nbGVQYWdlR3JvdXApOworICAgIEFTU0VSVCghbV9ncm91cCk7
CisgICAgbV9zaW5nbGVQYWdlR3JvdXAuc2V0KG5ldyBQYWdlR3JvdXAodGhpcykpOworICAgIG1f
Z3JvdXAgPSBtX3NpbmdsZVBhZ2VHcm91cC5nZXQoKTsKIH0KIAogdm9pZCBQYWdlOjpzZXROZWVk
c1JlYXBwbHlTdHlsZXMoKQpAQCAtMzYwLDYgKzM2OCwyMSBAQCBjb25zdCBTdHJpbmcmIFBhZ2U6
OnVzZXJTdHlsZVNoZWV0KCkgY29uCiAgICAgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXQ7CiB9CiAK
K3ZvaWQgUGFnZTo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKK3sKKyAgICBpZiAoIWFsbFBhZ2Vz
KQorICAgICAgICByZXR1cm47CisgICAgSGFzaFNldDxQYWdlR3JvdXAqPiBncm91cHM7CisgICAg
SGFzaFNldDxQYWdlKj46Oml0ZXJhdG9yIHBhZ2VzRW5kID0gYWxsUGFnZXMtPmVuZCgpOworICAg
IGZvciAoSGFzaFNldDxQYWdlKj46Oml0ZXJhdG9yIGl0ID0gYWxsUGFnZXMtPmJlZ2luKCk7IGl0
ICE9IHBhZ2VzRW5kOyArK2l0KSB7CisgICAgICAgIGlmIChQYWdlR3JvdXAqIGdyb3VwID0gKCpp
dCktPmdyb3VwUHRyKCkpCisgICAgICAgICAgICBncm91cHMuYWRkKGdyb3VwKTsKKyAgICB9Cisg
ICAgSGFzaFNldDxQYWdlR3JvdXAqPjo6aXRlcmF0b3IgZ3JvdXBzRW5kID0gZ3JvdXBzLmVuZCgp
OworICAgIGZvciAoSGFzaFNldDxQYWdlR3JvdXAqPjo6aXRlcmF0b3IgaXQgPSBncm91cHMuYmVn
aW4oKTsgaXQgIT0gZ3JvdXBzRW5kOyArK2l0KQorICAgICAgICAoKml0KS0+cmVtb3ZlVmlzaXRl
ZExpbmtzKCk7Cit9CisKIHZvaWQgUGFnZTo6c2V0RGVidWdnZXJGb3JBbGxQYWdlcyhLSlM6OkRl
YnVnZ2VyKiBkZWJ1Z2dlcikKIHsKICAgICBBU1NFUlQoYWxsUGFnZXMpOwpJbmRleDogV2ViQ29y
ZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lv
biAzMDgxNikKKysrIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTQwLDIyICs0MCwxMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBEZWJ1
Z2dlcjsKIH0KIAotdHlwZWRlZiBlbnVtIFRleHRDYXNlU2Vuc2l0aXZpdHkgewotICAgIFRleHRD
YXNlU2Vuc2l0aXZlLAotICAgIFRleHRDYXNlSW5zZW5zaXRpdmUKLX07Ci0KLXR5cGVkZWYgZW51
bSBGaW5kRGlyZWN0aW9uIHsKLSAgICBGaW5kRGlyZWN0aW9uRm9yd2FyZCwKLSAgICBGaW5kRGly
ZWN0aW9uQmFja3dhcmQKLX07Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIENo
cm9tZTsKICAgICBjbGFzcyBDaHJvbWVDbGllbnQ7CiAgICAgY2xhc3MgQ29udGV4dE1lbnVDbGll
bnQ7CiAgICAgY2xhc3MgQ29udGV4dE1lbnVDb250cm9sbGVyOworICAgIGNsYXNzIERvY3VtZW50
OwogICAgIGNsYXNzIERyYWdDbGllbnQ7CiAgICAgY2xhc3MgRHJhZ0NvbnRyb2xsZXI7CiAgICAg
Y2xhc3MgRWRpdG9yQ2xpZW50OwpAQCAtNjQsMTUgKzU1LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiAgICAgY2xhc3MgSW5zcGVjdG9yQ29udHJv
bGxlcjsKICAgICBjbGFzcyBOb2RlOworICAgIGNsYXNzIFBhZ2VHcm91cDsKICAgICBjbGFzcyBQ
cm9ncmVzc1RyYWNrZXI7CiAgICAgY2xhc3MgU2VsZWN0aW9uOwogICAgIGNsYXNzIFNlbGVjdGlv
bkNvbnRyb2xsZXI7CiAgICAgY2xhc3MgU2V0dGluZ3M7CisgICAgY2xhc3MgS1VSTDsKKworICAg
IGVudW0gVGV4dENhc2VTZW5zaXRpdml0eSB7IFRleHRDYXNlU2Vuc2l0aXZlLCBUZXh0Q2FzZUlu
c2Vuc2l0aXZlIH07CisgICAgZW51bSBGaW5kRGlyZWN0aW9uIHsgRmluZERpcmVjdGlvbkZvcndh
cmQsIEZpbmREaXJlY3Rpb25CYWNrd2FyZCB9OwogCiAgICAgY2xhc3MgUGFnZSA6IE5vbmNvcHlh
YmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldE5lZWRzUmVhcHBseVN0
eWxlcygpOwotICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFNldDxQYWdlKj4qIGZyYW1lTmFtZXNw
YWNlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgICAgIFBhZ2UoQ2hyb21lQ2xpZW50KiwgQ29udGV4
dE1lbnVDbGllbnQqLCBFZGl0b3JDbGllbnQqLCBEcmFnQ2xpZW50KiwgSW5zcGVjdG9yQ2xpZW50
Kik7CiAgICAgICAgIH5QYWdlKCk7CkBAIC05Myw5ICs4OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsK
ICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0R3JvdXBOYW1lKGNvbnN0IFN0cmluZyYpOwotICAg
ICAgICBTdHJpbmcgZ3JvdXBOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9ncm91cE5hbWU7IH0KKyAg
ICAgICAgY29uc3QgU3RyaW5nJiBncm91cE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2dyb3VwTmFt
ZTsgfQogCi0gICAgICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+KiBmcmFtZU5hbWVzcGFjZSgpIGNv
bnN0OworICAgICAgICBQYWdlR3JvdXAmIGdyb3VwKCkgeyBpZiAoIW1fZ3JvdXApIGluaXRHcm91
cCgpOyByZXR1cm4gKm1fZ3JvdXA7IH0KKyAgICAgICAgUGFnZUdyb3VwKiBncm91cFB0cigpIHsg
cmV0dXJuIG1fZ3JvdXA7IH0gLy8gY2FuIHJldHVybiAwCiAKICAgICAgICAgdm9pZCBpbmNyZW1l
bnRGcmFtZUNvdW50KCkgeyArK21fZnJhbWVDb3VudDsgfQogICAgICAgICB2b2lkIGRlY3JlbWVu
dEZyYW1lQ291bnQoKSB7IC0tbV9mcmFtZUNvdW50OyB9CkBAIC0xNTEsNyArMTQ3LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIEhJTlNUQU5DRSBpbnN0YW5jZUhhbmRs
ZSgpIHsgcmV0dXJuIHNfaW5zdGFuY2VIYW5kbGU7IH0KICNlbmRpZgogCisgICAgICAgIHN0YXRp
YyB2b2lkIHJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpOworCiAgICAgcHJpdmF0ZToKKyAgICAgICAg
dm9pZCBpbml0R3JvdXAoKTsKKwogICAgICAgICBPd25QdHI8Q2hyb21lPiBtX2Nocm9tZTsKICAg
ICAgICAgT3duUHRyPFNlbGVjdGlvbkNvbnRyb2xsZXI+IG1fZHJhZ0NhcmV0Q29udHJvbGxlcjsK
ICAgICAgICAgT3duUHRyPERyYWdDb250cm9sbGVyPiBtX2RyYWdDb250cm9sbGVyOwpAQCAtMTgy
LDYgKzE4Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgbXV0YWJsZSBib29sIG1f
ZGlkTG9hZFVzZXJTdHlsZVNoZWV0OwogICAgICAgICBtdXRhYmxlIHRpbWVfdCBtX3VzZXJTdHls
ZVNoZWV0TW9kaWZpY2F0aW9uVGltZTsKIAorICAgICAgICBPd25QdHI8UGFnZUdyb3VwPiBtX3Np
bmdsZVBhZ2VHcm91cDsKKyAgICAgICAgUGFnZUdyb3VwKiBtX2dyb3VwOworCiAgICAgICAgIEtK
Uzo6RGVidWdnZXIqIG1fZGVidWdnZXI7CiAKICNpZiBQTEFURk9STShXSU4pIHx8IChQTEFURk9S
TShXWCkgJiYgZGVmaW5lZChfX1dYTVNXX18pKQpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2VHcm91
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorCisjaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gLS0tLS0tLS0KKworUGFnZUdyb3VwOjpQYWdl
R3JvdXAoUGFnZSogcGFnZSkKKyAgICA6IG1fdmlzaXRlZExpbmtzUG9wdWxhdGVkKGZhbHNlKQor
eworICAgIEFTU0VSVChwYWdlKTsKKyAgICBtX3BhZ2VzLmFkZChwYWdlKTsKK30KKwordm9pZCBQ
YWdlR3JvdXA6OmFkZFBhZ2UoUGFnZSogcGFnZSkKK3sKKyAgICBBU1NFUlQocGFnZSk7CisgICAg
QVNTRVJUKCFtX3BhZ2VzLmNvbnRhaW5zKHBhZ2UpKTsKKyAgICBtX3BhZ2VzLmFkZChwYWdlKTsK
K30KKwordm9pZCBQYWdlR3JvdXA6OnJlbW92ZVBhZ2UoUGFnZSogcGFnZSkKK3sKKyAgICBBU1NF
UlQocGFnZSk7CisgICAgQVNTRVJUKG1fcGFnZXMuY29udGFpbnMocGFnZSkpOworICAgIG1fcGFn
ZXMucmVtb3ZlKHBhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIGludCBmaW5kU2xhc2hEb3REb3RT
bGFzaChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBpZiAo
bGVuZ3RoIDwgNCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHVuc2lnbmVkIGxvb3BMaW1pdCA9
IGxlbmd0aCAtIDM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb3BMaW1pdDsgKytp
KSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kgKyAx
XSA9PSAnLicgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDNd
ID09ICcvJykKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9
CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRTbGFzaFNsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCBzaXplX3QgbGVuZ3RoLCBpbnQgcG9zaXRpb24pCit7CisgICAgaWYgKGxlbmd0aCA8IDIp
CisgICAgICAgIHJldHVybiAtMTsKKyAgICB1bnNpZ25lZCBsb29wTGltaXQgPSBsZW5ndGggLSAx
OworICAgIGZvciAodW5zaWduZWQgaSA9IHBvc2l0aW9uOyBpIDwgbG9vcExpbWl0OyArK2kpIHsK
KyAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09
ICcvJykKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisK
K3N0YXRpYyBpbmxpbmUgaW50IGZpbmRTbGFzaERvdFNsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCBzaXplX3QgbGVuZ3RoKQoreworICAgIGlmIChsZW5ndGggPCAzKQorICAgICAgICByZXR1
cm4gLTE7CisgICAgdW5zaWduZWQgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMjsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbG9vcExpbWl0OyArK2kpIHsKKyAgICAgICAgaWYgKGNoYXJhY3Rl
cnNbaV0gPT0gJy8nICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcuJyAmJiBjaGFyYWN0ZXJzW2kg
KyAyXSA9PSAnLycpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIC0x
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNDb2xvblNsYXNoU2xhc2goY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoIDwg
MykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2lnbmVkIGxvb3BMaW1pdCA9IGxlbmd0
aCAtIDI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb3BMaW1pdDsgKytpKSB7Cisg
ICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICc6JyAmJiBjaGFyYWN0ZXJzW2kgKyAxXSA9PSAn
LycgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy8nKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFu
UGF0aChWZWN0b3I8VUNoYXIsIDUxMj4mIHBhdGgpCit7CisgICAgLy8gRklYTUU6IFNob2xkIG5v
dCBkbyB0aGlzIGluIHRoZSBxdWVyeSBvciBhbmNob3IgcGFydC4KKyAgICBpbnQgcG9zOworICAg
IHdoaWxlICgocG9zID0gZmluZFNsYXNoRG90RG90U2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6
ZSgpKSkgIT0gLTEpIHsKKyAgICAgICAgaW50IHByZXYgPSByZXZlcnNlRmluZChwYXRoLmRhdGEo
KSwgcGF0aC5zaXplKCksICcvJywgcG9zIC0gMSk7CisgICAgICAgIC8vIGRvbid0IHJlbW92ZSB0
aGUgaG9zdCwgaS5lLiBodHRwOi8vZm9vLm9yZy8uLi9mb28uaHRtbAorICAgICAgICBpZiAocHJl
diA8IDAgfHwgKHByZXYgPiAzICYmIHBhdGhbcHJldiAtIDJdID09ICc6JyAmJiBwYXRoW3ByZXYg
LSAxXSA9PSAnLycpKQorICAgICAgICAgICAgcGF0aC5yZW1vdmUocG9zLCAzKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcGF0aC5yZW1vdmUocHJldiwgcG9zIC0gcHJldiArIDMpOworICAg
IH0KKworICAgIC8vIEZJWE1FOiBTaG9sZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgcGFydC4K
KyAgICAvLyBTZXQgcmVmUG9zIHRvIC0yIHRvIG1lYW4gIkkgaGF2ZW4ndCBsb29rZWQgZm9yIHRo
ZSBhbmNob3IgeWV0Ii4KKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHdhc3RlIGEgZnVuY3Rpb24g
Y2FsbCBvbiB0aGUgc2VhcmNoIGZvciB0aGUgdGhlIGFuY2hvcgorICAgIC8vIGluIHRoZSB2YXN0
IG1ham9yaXR5IG9mIGNhc2VzIHdoZXJlIHRoZXJlIGlzIG5vICIvLyIgaW4gdGhlIHBhdGguCisg
ICAgcG9zID0gMDsKKyAgICBpbnQgcmVmUG9zID0gLTI7CisgICAgd2hpbGUgKChwb3MgPSBmaW5k
U2xhc2hTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHBvcykpICE9IC0xKSB7CisgICAg
ICAgIGlmIChyZWZQb3MgPT0gLTIpCisgICAgICAgICAgICByZWZQb3MgPSBmaW5kKHBhdGguZGF0
YSgpLCBwYXRoLnNpemUoKSwgJyMnKTsKKyAgICAgICAgaWYgKHJlZlBvcyA+IDAgJiYgcG9zID49
IHJlZlBvcykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChwb3MgPT0gMCB8fCBw
YXRoW3BvcyAtIDFdICE9ICc6JykKKyAgICAgICAgICAgIHBhdGgucmVtb3ZlKHBvcyk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyArPSAyOworICAgIH0KKworICAgIC8vIEZJWE1FOiBT
aG9sZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBhcnQuCisgICAgd2hpbGUg
KChwb3MgPSBmaW5kU2xhc2hEb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCkpKSAhPSAt
MSkKKyAgICAgICAgcGF0aC5yZW1vdmUocG9zLCAyKTsKK30KKworc3RhdGljIGlubGluZSBib29s
IG1hdGNoTGV0dGVyKFVDaGFyIGMsIFVDaGFyIGxvd2VyY2FzZUxldHRlcikKK3sKKyAgICByZXR1
cm4gKGMgfCAweDIwKSA9PSBsb3dlcmNhc2VMZXR0ZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBuZWVkc1RyYWlsaW5nU2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoIDwgNikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghbWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1swXSwgJ2gnKQorICAgICAgICAgICAgfHwgIW1h
dGNoTGV0dGVyKGNoYXJhY3RlcnNbMV0sICd0JykKKyAgICAgICAgICAgIHx8ICFtYXRjaExldHRl
cihjaGFyYWN0ZXJzWzJdLCAndCcpCisgICAgICAgICAgICB8fCAhbWF0Y2hMZXR0ZXIoY2hhcmFj
dGVyc1szXSwgJ3AnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghKGNoYXJhY3Rl
cnNbNF0gPT0gJzonCisgICAgICAgICAgICB8fCAobWF0Y2hMZXR0ZXIoY2hhcmFjdGVyc1s0XSwg
J3MnKSAmJiBjaGFyYWN0ZXJzWzVdID09ICc6JykpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB1bnNpZ25lZCBwb3MgPSBjaGFyYWN0ZXJzWzRdID09ICc6JyA/IDUgOiA2OworCisgICAg
Ly8gU2tpcCBpbml0aWFsIHR3byBzbGFzaGVzIGlmIHByZXNlbnQuCisgICAgaWYgKHBvcyArIDEg
PCBsZW5ndGggJiYgY2hhcmFjdGVyc1twb3NdID09ICcvJyAmJiBjaGFyYWN0ZXJzW3BvcyArIDFd
ID09ICcvJykKKyAgICAgICAgcG9zICs9IDI7CisKKyAgICAvLyBGaW5kIG5leHQgc2xhc2guCisg
ICAgd2hpbGUgKHBvcyA8IGxlbmd0aCAmJiBjaGFyYWN0ZXJzW3Bvc10gIT0gJy8nKQorICAgICAg
ICArK3BvczsKKworICAgIHJldHVybiBwb3MgPT0gbGVuZ3RoOworfQorCitib29sIFBhZ2VHcm91
cDo6aXNMaW5rVmlzaXRlZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYg
YXR0cmlidXRlVVJMKQoreworICAgIGlmICghbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQpIHsKKyAg
ICAgICAgbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQgPSB0cnVlOworICAgICAgICBBU1NFUlQoIW1f
cGFnZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgKCptX3BhZ2VzLmJlZ2luKCkpLT5jaHJvbWUoKS0+
Y2xpZW50KCktPnBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CisgICAgfQorCisgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMgPSBhdHRyaWJ1dGVVUkwuY2hhcmFjdGVycygpOworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGF0dHJpYnV0ZVVSTC5sZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IEl0IGlzIHN0cmFuZ2UgdGhhdCB3ZSBk
byBub3QgZG8gZnVydGhlciBwcm9jZXNzaW5nIG9uIHN0cmluZ3MgdGhhdCBoYXZlICI6Ly8iIGlu
IHRoZW0uCisgICAgLy8gVGhhdCdzIGNsZWFybHkgaW5jb3JyZWN0IGZvciBhdCBsZWFzdCB0aGVz
ZSByZWFzb25zOgorICAgIC8vICAgIDEpIFRoZSAiOi8vIiBjb3VsZCBiZSBpbiB0aGUgcXVlcnkg
b3IgYW5jaG9yLgorICAgIC8vICAgIDIpIFRoZSBVUkwncyBwYXRoIGNvdWxkIGhhdmUgYSAiLy4v
IiBvciBhICIvLi4vIiBvciBhICIvLyIgc2VxdWVuY2UgaW4gaXQuCisKKyAgICAvLyBGSVhNRTog
bmVlZHNUcmFpbGluZ1NsYXNoIGRvZXMgbm90IHByb3Blcmx5IHJldHVybiB0cnVlIGZvciBhIFVS
TCB0aGF0IGhhcyBubyBwYXRoLCBidXQgZG9lcworICAgIC8vIGhhdmUgYSBxdWVyeSBvciBhbmNo
b3IuCisKKyAgICBib29sIGhhc0NvbG9uU2xhc2hTbGFzaCA9IGNvbnRhaW5zQ29sb25TbGFzaFNs
YXNoKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisKKyAgICBpZiAoaGFzQ29sb25TbGFzaFNsYXNoICYm
ICFuZWVkc1RyYWlsaW5nU2xhc2goY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IG1fdmlzaXRlZExpbmtIYXNoZXMuY29udGFpbnMoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goY2hh
cmFjdGVycywgbGVuZ3RoKSk7CisKKyAgICBWZWN0b3I8VUNoYXIsIDUxMj4gYnVmZmVyOworCisg
ICAgLy8gVGhpcyBpcyBhIHBvb3IgbWFuJ3MgY29tcGxldGVVUkwuIEZhc3RlciB3aXRoIGxlc3Mg
bWVtb3J5IGFsbG9jYXRpb24uCisgICAgLy8gRklYTUU6IEl0J3MgbWlzc2luZyBhIGxvdCBvZiB3
aGF0IGNvbXBsZXRlVVJMIGRvZXMgYW5kIHdoYXQgS1VSTCBkb2VzLgorICAgIC8vIEZJWE1FOiBN
b3ZlIHRoaXMgaW50byBLVVJMPyBPciBEb2N1bWVudD8gRXZlbiB0aGUgZmFzdCB2ZXJzaW9uIHNo
b3VsZCBiZSBpbiB0aGUgcmlnaHQgcGxhY2UsCisgICAgLy8gcmF0aGVyIHRoYW4gaGVyZS4KKwor
ICAgIGlmIChoYXNDb2xvblNsYXNoU2xhc2gpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMg
aW5jb3JyZWN0IGZvciBVUkxzIHRoYXQgaGF2ZSBhIHF1ZXJ5IG9yIGFuY2hvcjsgdGhlICIvIiBu
ZWVkcyB0byBnbyBhdCB0aGUKKyAgICAgICAgLy8gZW5kIG9mIHRoZSBwYXRoLCAqYmVmb3JlKiB0
aGUgcXVlcnkgb3IgYW5jaG9yLgorICAgICAgICBidWZmZXIuYXBwZW5kKGNoYXJhY3RlcnMsIGxl
bmd0aCk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgcmV0dXJuIG1fdmlz
aXRlZExpbmtIYXNoZXMuY29udGFpbnMoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goYnVmZmVyLmRh
dGEoKSwgYnVmZmVyLnNpemUoKSkpOworICAgIH0KKworICAgIGNvbnN0IEtVUkwmIGJhc2VVUkwg
PSBkb2N1bWVudC0+YmFzZVVSTCgpOworICAgIHN3aXRjaCAoY2hhcmFjdGVyc1swXSkgeworICAg
ICAgICBjYXNlICcvJzoKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoYmFzZVVSTC5zdHJpbmco
KS5jaGFyYWN0ZXJzKCksIGJhc2VVUkwucGF0aFN0YXJ0KCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJyMnOgorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChiYXNlVVJMLnN0
cmluZygpLmNoYXJhY3RlcnMoKSwgYmFzZVVSTC5wYXRoRW5kKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGJhc2VVUkwu
c3RyaW5nKCkuY2hhcmFjdGVycygpLCBiYXNlVVJMLnBhdGhBZnRlckxhc3RTbGFzaCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBidWZmZXIuYXBwZW5kKGNoYXJhY3RlcnMsIGxl
bmd0aCk7CisgICAgY2xlYW5QYXRoKGJ1ZmZlcik7CisgICAgaWYgKG5lZWRzVHJhaWxpbmdTbGFz
aChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSkgeworICAgICAgICAvLyBGSVhNRTogVGhp
cyBpcyBpbmNvcnJlY3QgZm9yIFVSTHMgdGhhdCBoYXZlIGEgcXVlcnkgb3IgYW5jaG9yOyB0aGUg
Ii8iIG5lZWRzIHRvIGdvIGF0IHRoZQorICAgICAgICAvLyBlbmQgb2YgdGhlIHBhdGgsICpiZWZv
cmUqIHRoZSBxdWVyeSBvciBhbmNob3IuCisgICAgICAgIGJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbV92aXNpdGVkTGlua0hhc2hlcy5jb250YWlucyhTdHJpbmdJbXBs
Ojpjb21wdXRlSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSk7Cit9CisKK3ZvaWQg
UGFnZUdyb3VwOjphZGRWaXNpdGVkTGluayhjb25zdCBLVVJMJiB1cmwpCit7CisgICAgQVNTRVJU
KCF1cmwuaXNFbXB0eSgpKTsKKyAgICBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmFkZCh1cmwuc3RyaW5n
KCkuaW1wbCgpLT5oYXNoKCkpOworfQorCit2b2lkIFBhZ2VHcm91cDo6YWRkVmlzaXRlZExpbmso
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit7CisgICAgbV92aXNpdGVk
TGlua0hhc2hlcy5hZGQoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goY2hhcmFjdGVycywgbGVuZ3Ro
KSk7Cit9CisKK3ZvaWQgUGFnZUdyb3VwOjpyZW1vdmVWaXNpdGVkTGlua3MoKQoreworICAgIG1f
dmlzaXRlZExpbmtIYXNoZXMuY2xlYXIoKTsKK30KKwordm9pZCBQYWdlR3JvdXA6OnJlbW92ZUFs
bFZpc2l0ZWRMaW5rcygpCit7CisgICAgUGFnZTo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUv
cGFnZS9QYWdlR3JvdXAuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5h
dGl2ZQoKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2UvUGFnZUdy
b3VwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQYWdlR3JvdXBfaAorI2RlZmluZSBQ
YWdlR3JvdXBfaAorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKyAgICBjbGFzcyBEb2N1bWVu
dDsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFBhZ2U7CisKKyAgICBjbGFzcyBQYWdlR3Jv
dXAgOiBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBQYWdlR3JvdXAoUGFnZSop
OworCisgICAgICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcygpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZXM7IH0KKworICAgICAgICB2b2lkIGFkZFBhZ2UoUGFnZSopOworICAgICAgICB2b2lk
IHJlbW92ZVBhZ2UoUGFnZSopOworCisgICAgICAgIGJvb2wgaXNMaW5rVmlzaXRlZChEb2N1bWVu
dCosIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUpOworCisgICAgICAgIHZvaWQg
YWRkVmlzaXRlZExpbmsoY29uc3QgS1VSTCYpOworICAgICAgICB2b2lkIGFkZFZpc2l0ZWRMaW5r
KGNvbnN0IFVDaGFyKiwgc2l6ZV90KTsKKyAgICAgICAgdm9pZCByZW1vdmVWaXNpdGVkTGlua3Mo
KTsKKyAgICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBIYXNoU2V0PFBhZ2UqPiBtX3BhZ2VzOworICAgICAgICBIYXNoU2V0
PHVuc2lnbmVkPiBtX3Zpc2l0ZWRMaW5rSGFzaGVzOworICAgICAgICBib29sIG1fdmlzaXRlZExp
bmtzUG9wdWxhdGVkOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyAgICAKKyNl
bmRpZiAvLyBQYWdlR3JvdXBfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wYWdlL1Bh
Z2VHcm91cC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9tYWMvR2xvYmFsSGlzdG9yeU1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvbWFjL0dsb2JhbEhpc3RvcnlNYWMubW0JKHJldmlzaW9uIDMwODE2KQorKysg
V2ViQ29yZS9wYWdlL21hYy9HbG9iYWxIaXN0b3J5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJHbG9iYWxIaXN0b3J5LmgiCi0KLSNpbXBvcnQgIldlYkNvcmVIaXN0b3J5LmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotYm9vbCBoaXN0b3J5Q29udGFpbnMoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyB0aGUgb3RoZXIgc2lkZSBvZiB0aGUg
YnJpZGdlIGlzIGNhcmVmdWwgbm90IHRvIHRocm93IGV4Y2VwdGlvbnMgaGVyZQotICAgIHJldHVy
biBbW1dlYkNvcmVIaXN0b3J5IGhpc3RvcnlQcm92aWRlcl0gY29udGFpbnNVUkw6Y2hhcmFjdGVy
cyBsZW5ndGg6bGVuZ3RoXTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9wYWdlL3dpbi9HbG9iYWxIaXN0b3J5V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2Uvd2luL0dsb2JhbEhpc3RvcnlXaW4uY3BwCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYkNv
cmUvcGFnZS93aW4vR2xvYmFsSGlzdG9yeVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
R2xvYmFsSGlzdG9yeS5oIgotCi0jaW5jbHVkZSAiV2ViQ29yZUhpc3RvcnkuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1ib29sIGhpc3RvcnlDb250YWlucyhjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIFdlYkNvcmVIaXN0b3J5UHJvdmlkZXIqIHBy
b3ZpZGVyID0gV2ViQ29yZUhpc3Rvcnk6Omhpc3RvcnlQcm92aWRlcigpOwotICAgIHJldHVybiBw
cm92aWRlciAmJiBwcm92aWRlci0+Y29udGFpbnNVUkwoY2hhcmFjdGVycywgbGVuZ3RoKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDYgQEAKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJGVFBEaXJlY3RvcnlEb2N1bWVudC5oIgotI2luY2x1ZGUgIkdsb2JhbEhpc3RvcnkuaCIK
ICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRl
ICJQbHVnaW5EYXRhYmFzZS5oIgpAQCAtNTgsOCArNTcsNiBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJl
c291cmNlSW50b0FycmF5KGNvbnN0CiAvKiBDb21wbGV0ZWx5IGVtcHR5IHN0dWJzIChtb3N0bHkg
dG8gYWxsb3cgRFJUIHRvIHJ1bik6ICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRh
aW5zKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KIFBsdWdpblNl
dCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdCB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiBQbHVnaW5TZXQoKTsgfQogVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJh
c2U6OmRlZmF1bHRQbHVnaW5QYXRocygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZlY3Rv
cjxTdHJpbmc+KCk7IH0KIGJvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0
aChjb25zdCBTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUhpc3RvcnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlSGlzdG9yeS5oCShyZXZpc2lvbiAzMDgxNikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVIaXN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLUBwcm90b2NvbCBXZWJDb3JlSGlzdG9yeVBy
b3ZpZGVyIDxOU09iamVjdD4KLS0gKEJPT0wpY29udGFpbnNVUkw6KGNvbnN0IFVuaUNoYXIqKXVu
aWNvZGUgbGVuZ3RoOih1bnNpZ25lZClsZW5ndGg7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViQ29y
ZUhpc3RvcnkgOiBOU09iamVjdAotCi0rICh2b2lkKXNldEhpc3RvcnlQcm92aWRlcjooaWQ8V2Vi
Q29yZUhpc3RvcnlQcm92aWRlcj4paDsKLSsgKGlkPFdlYkNvcmVIaXN0b3J5UHJvdmlkZXI+KWhp
c3RvcnlQcm92aWRlcjsKLQotQGVuZApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29y
ZUhpc3RvcnkubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlSGlz
dG9yeS5tCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVI
aXN0b3J5Lm0JKHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpbXBvcnQgIldlYkNvcmVIaXN0b3J5LmgiCi0K
LUBpbXBsZW1lbnRhdGlvbiBXZWJDb3JlSGlzdG9yeQotCi1zdGF0aWMgaWQ8V2ViQ29yZUhpc3Rv
cnlQcm92aWRlcj4gX2hpc3RvcnlQcm92aWRlciA9IG5pbDsKLQotKyAodm9pZClzZXRIaXN0b3J5
UHJvdmlkZXI6IChpZDxXZWJDb3JlSGlzdG9yeVByb3ZpZGVyPiloCi17Ci0gICAgaWYgKF9oaXN0
b3J5UHJvdmlkZXIgIT0gaCl7Ci0gICAgICAgIFtfaGlzdG9yeVByb3ZpZGVyIHJlbGVhc2VdOwot
ICAgICAgICBfaGlzdG9yeVByb3ZpZGVyID0gW2ggcmV0YWluXTsKLSAgICB9Ci19Ci0KLSsgKGlk
PFdlYkNvcmVIaXN0b3J5UHJvdmlkZXI+KWhpc3RvcnlQcm92aWRlcgotewotICAgIHJldHVybiBf
aGlzdG9yeVByb3ZpZGVyOwotfQotCi1AZW5kCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NiBAQAogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHbG9iYWxIaXN0b3J5LmgiCiAj
aW5jbHVkZSAiSWNvbkxvYWRlci5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAi
S1VSTC5oIgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2ViQ29yZUhpc3RvcnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1dlYkNvcmVIaXN0b3J5LmNwcAkocmV2
aXNpb24gMzA4MTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9XZWJDb3JlSGlzdG9yeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUhpc3RvcnkuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgV2ViQ29yZUhpc3RvcnlQcm92aWRlciogX2hpc3RvcnlQcm92aWRl
ciA9IDA7Ci0KLXZvaWQgV2ViQ29yZUhpc3Rvcnk6OnNldEhpc3RvcnlQcm92aWRlcihXZWJDb3Jl
SGlzdG9yeVByb3ZpZGVyKiBoKQotewotICAgIGlmIChfaGlzdG9yeVByb3ZpZGVyID09IGgpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGRlbGV0ZSBfaGlzdG9yeVByb3ZpZGVyOwotICAgIF9oaXN0
b3J5UHJvdmlkZXIgPSBoOwotfQotCi1XZWJDb3JlSGlzdG9yeVByb3ZpZGVyKiBXZWJDb3JlSGlz
dG9yeTo6aGlzdG9yeVByb3ZpZGVyKCkKLXsKLSAgICByZXR1cm4gX2hpc3RvcnlQcm92aWRlcjsK
LX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2ViQ29yZUhpc3RvcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9XZWJDb3JlSGlzdG9yeS5oCShyZXZpc2lv
biAzMDgxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1dlYkNvcmVIaXN0b3J5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0q
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0qLwotCi0jaWZuZGVmIFdFQkNPUkVfSElTVE9SWV9IXwotI2RlZmluZSBX
RUJDT1JFX0hJU1RPUllfSF8KLQotI2luY2x1ZGUgPHVuaWNvZGUvdW1hY2hpbmUuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBXZWJDb3JlSGlzdG9yeVByb3ZpZGVyIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNVUkwoY29uc3QgVUNoYXIqIHVuaWNvZGUsIHVu
c2lnbmVkIGxlbmd0aCkgPSAwOwotfTsKLQotY2xhc3MgV2ViQ29yZUhpc3RvcnkgewotcHVibGlj
OgotICAgIHN0YXRpYyB2b2lkIHNldEhpc3RvcnlQcm92aWRlcihXZWJDb3JlSGlzdG9yeVByb3Zp
ZGVyKik7Ci0gICAgc3RhdGljIFdlYkNvcmVIaXN0b3J5UHJvdmlkZXIqIGhpc3RvcnlQcm92aWRl
cigpOwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9y
YXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBv
cmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDMwODE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93
eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTAgKzExMyw2
IEBAIGJvb2wgV2ViQ29yZTo6Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW0KIHN0YXRpYyBXZWJD
b3JlOjpDdXJzb3IgbG9jYWxDdXJzb3I7CiBjb25zdCBXZWJDb3JlOjpDdXJzb3ImIFdlYkNvcmU6
Om1vdmVDdXJzb3IoKSB7IHJldHVybiBsb2NhbEN1cnNvcjsgfQogCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgYm9vbCBoaXN0b3J5Q29udGFpbnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCkgeyBy
ZXR1cm4gZmFsc2U7IH0KLX0KLQogdm9pZCBXZWJDb3JlOjpmaW5kV29yZEJvdW5kYXJ5KFVDaGFy
IGNvbnN0KiBzdHIsaW50IGxlbixpbnQgcG9zaXRpb24saW50KiBzdGFydCwgaW50KiBlbmQpIHsg
bm90SW1wbGVtZW50ZWQoKTsgKnN0YXJ0PXBvc2l0aW9uOyAqZW5kPXBvc2l0aW9uOyB9CiAKIFBs
dWdpblNldCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdCB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiBQbHVnaW5TZXQoKTsgfQpJbmRleDogV2ViS2l0L0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMDgxNikKKysrIFdl
YktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3IEBACisyMDA4LTAzLTA1
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICAqIFdlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBXZWJIaXN0b3J5SW50ZXJuYWwuaC4KKwogMjAw
OC0wMy0wNSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBX
ZWJDb3JlU2NyaXB0RGVidWdnZXIgdG8gV2ViS2l0CkluZGV4OiBXZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc3LDYgKzI3Nyw3IEBA
CiAJCTkzOTgxMTJGMDgyNEJGMDEwMDhERjAzOCAvKiBTZWN1cml0eS5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzBFODFFMDA1ODUz
QUMwMDBBRDA4OTEgLyogU2VjdXJpdHkuZnJhbWV3b3JrICovOyB9OwogCQk5M0VCMTc4RDA5Rjg4
RDQ2MDA5MUY4RkYgLyogV2ViU3lzdGVtSW50ZXJmYWNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VCMTc4QzA5Rjg4RDQ2MDA5MUY4RkYgLyogV2Vi
U3lzdGVtSW50ZXJmYWNlLm0gKi87IH07CiAJCTkzRUIxNzhGMDlGODhENTEwMDkxRjhGRiAvKiBX
ZWJTeXN0ZW1JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzRUIxNzhFMDlGODhENTEwMDkxRjhGRiAvKiBXZWJTeXN0ZW1JbnRlcmZhY2Uu
aCAqLzsgfTsKKwkJOTNGREU5MzMwRDc5Q0FGMzAwNzRGMDI5IC8qIFdlYkhpc3RvcnlJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGREU5
MzIwRDc5Q0FGMzAwNzRGMDI5IC8qIFdlYkhpc3RvcnlJbnRlcm5hbC5oICovOyB9OwogCQlBNzA5
MzZBRjBCNTYwOERDMDBDREI0OEUgLyogV2ViRHJhZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcwOTM2QUQwQjU2MDhEQzAwQ0RCNDhFIC8q
IFdlYkRyYWdDbGllbnQuaCAqLzsgfTsKIAkJQTcwOTM2QjAwQjU2MDhEQzAwQ0RCNDhFIC8qIFdl
YkRyYWdDbGllbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNzA5MzZBRTBCNTYwOERDMDBDREI0OEUgLyogV2ViRHJhZ0NsaWVudC5tbSAqLzsgfTsK
IAkJQTdEM0M1QkMwQjU3NzNDNTAwMkNBNDUwIC8qIFdlYlBhc3RlYm9hcmRIZWxwZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDNDNUJBMEI1Nzcz
QzUwMDJDQTQ1MCAvKiBXZWJQYXN0ZWJvYXJkSGVscGVyLmggKi87IH07CkBAIC01MTIsNiArNTEz
LDcgQEAKIAkJOTNENjIzREQwNTFFNzkxRjAwMkY0N0REIC8qIGxpYmljdWNvcmUuZHlsaWIgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQu
bWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYmljdWNvcmUuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9s
aWJpY3Vjb3JlLmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQk5M0VCMTc4
QzA5Rjg4RDQ2MDA5MUY4RkYgLyogV2ViU3lzdGVtSW50ZXJmYWNlLm0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYlN5c3RlbUludGVyZmFjZS5tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5M0VCMTc4RTA5Rjg4RDUxMDA5MUY4RkYgLyogV2ViU3lzdGVtSW50
ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlN5c3RlbUludGVy
ZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0ZERTkzMjBENzlDQUYzMDA3
NEYwMjkgLyogV2ViSGlzdG9yeUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkhpc3RvcnlJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5Q0FFOUQwNzAyNTJBNDEzMEVDQTE2RUEgLyogV2ViUHJlZmVyZW5jZXNQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUHJlZmVy
ZW5jZXNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwogCQk5Q0UxRjhBMzAyQTVDNkYzMEVDQTJBQ0QgLyogV2ViSW1hZ2VSZW5k
ZXJlckZhY3RvcnkubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9i
amM7IHBhdGggPSBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJOUNGMEUyNDkwMjEzNjFCMDBF
Q0ExNkVBIC8qIFdlYkZyYW1lUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZyYW1lUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTgyNCw2ICs4MjYsNyBA
QAogCQkJCTIyRjIxOUNCMDhEMjM2NzMwMDMwRTA3OCAvKiBXZWJCYWNrRm9yd2FyZExpc3RQcml2
YXRlLmggKi8sCiAJCQkJNjVEQTI2MDgwNTJDQzE4NzAwQTk3QjMxIC8qIFdlYkhpc3RvcnkubW0g
Ki8sCiAJCQkJRjUyMEZCMTkwMjIxREVGRDAxQzFBNTI1IC8qIFdlYkhpc3RvcnkuaCAqLywKKwkJ
CQk5M0ZERTkzMjBENzlDQUYzMDA3NEYwMjkgLyogV2ViSGlzdG9yeUludGVybmFsLmggKi8sCiAJ
CQkJMzk0NDYwN0YwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkhpc3RvcnlJdGVtLmggKi8sCiAJCQkJ
Mzk0NDYwODAwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkhpc3RvcnlJdGVtLm1tICovLAogCQkJCTUx
NkYyOTZGMDNBNkM0NUEwMENBMkQzQSAvKiBXZWJIaXN0b3J5SXRlbUludGVybmFsLmggKi8sCkBA
IC0xMzIzLDYgKzEzMjYsNyBAQAogCQkJCTkzOTgxMDlCMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJW
aWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDcxMDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwOTcwODI0QkYw
MTAwOERGMDM4IC8qIG5wZnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0ZERTkzMzBE
NzlDQUYzMDA3NEYwMjkgLyogV2ViSGlzdG9yeUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDMEQ2NkM3RjBEN0VGRTBDMDA1QUIzRjkgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMDgtMDMtMDUgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIC0gZml4IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NTI2CisgICAgICAgICAgUkVHUkVTU0lPTjogaWZyYW1lcyBhcmUgYWRkZWQgdG8gU2FmYXJpJ3Mg
SGlzdG9yeSBtZW51CisgICAgICAgICAgYnkgc2VwYXJhdGluZyB0aGUgdmlzaXRlZCBsaW5rIG1h
Y2hpbmVyeSBmcm9tIGdsb2JhbCBoaXN0b3J5CisKKyAgICAgICAgKiBIaXN0b3J5L1dlYkhpc3Rv
cnkubW06IE1vdmVkIFdlYkhpc3RvcnlQcml2YXRlIGluc2lkZSB0aGlzIGZpbGUuCisgICAgICAg
ICgtW1dlYkhpc3RvcnlQcml2YXRlIHJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczpdKTogUmVtb3Zl
ZCB0aGUgdW5kZXJzY29yZSBmcm9tIHRoaXMKKyAgICAgICAgbWV0aG9kIG5hbWUsIHNpbmNlIGl0
J3Mgb24gYSBwcml2YXRlIG9iamVjdC4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgcmVt
b3ZlSXRlbUZvclVSTFN0cmluZzpdKTogQWRkZWQgYSBjYWxsIHRvIHRoZQorICAgICAgICBQYWdl
R3JvdXA6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcyBmdW5jdGlvbiBpZiB0aGUgbGFzdCBVUkwgd2Fz
IHJlbW92ZWQuCisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIGFkZEl0ZW1Ub0RhdGVDYWNo
ZXM6XSk6IFJlbW92ZWQgdGhlIHVuZGVyc2NvcmUgZnJvbSB0aGlzCisgICAgICAgIG1ldGhvZCBu
YW1lLCBzaW5jZSBpdCdzIG9uIGEgcHJpdmF0ZSBvYmplY3QuCisgICAgICAgICgtW1dlYkhpc3Rv
cnlQcml2YXRlIHJlbW92ZUFsbEl0ZW1zXSk6IENhbGwgUGFnZUdyb3VwOjpyZW1vdmVBbGxWaXNp
dGVkTGlua3MuCisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIGFnZUxpbWl0RGF0ZV0pOiBS
ZW1vdmVkIHRoZSB1bmRlcnNjb3JlIGZyb20gdGhpcworICAgICAgICBtZXRob2QgbmFtZSwgc2lu
Y2UgaXQncyBvbiBhIHByaXZhdGUgb2JqZWN0LgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0
ZSBsb2FkSGlzdG9yeUd1dHNGcm9tVVJMOnNhdmVkSXRlbXNDb3VudDpjb2xsZWN0RGlzY2FyZGVk
SXRlbXNJbnRvOmVycm9yOl0pOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9y
eVByaXZhdGUgc2F2ZUhpc3RvcnlHdXRzOlVSTDplcnJvcjpdKTogRGl0dG8uIEFsc28gY2hhbmdl
ZCB0aGlzCisgICAgICAgIHRvIGNvcnJlY3RseSByZXR1cm4gdGhlIGVycm9yIGJ5IHVzaW5nIHRo
ZSBuZXdlciB2ZXJzaW9uIG9mIHdyaXRlVG9VUkw6IGFuZAorICAgICAgICByZW1vdmVkIHRoZSBG
SVhNRSBhYm91dCB0aGF0LgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSBhZGRWaXNpdGVk
TGlua3NUb1BhZ2VHcm91cDpdKTogQWRkZWQuIENhbGxzIGFkZFZpc2l0ZWRMaW5rCisgICAgICAg
IGZvciBldmVyeSBsaW5rIGluIHRoZSBoaXN0b3J5LgorICAgICAgICAoLVtXZWJIaXN0b3J5IHNh
dmVUb1VSTDplcnJvcjpdKTogUmVtb3ZlZCB0aGUgRklYTUUsIHNpbmNlIHdlIGRvIGdldCB0aGUg
ZXJyb3Igbm93LgorICAgICAgICAoLVtXZWJIaXN0b3J5IGFkZEl0ZW06XSk6IE1vdmVkIGludG8g
dGhlIFdlYlByaXZhdGUgY2F0ZWdvcnkuCisgICAgICAgICgtW1dlYkhpc3RvcnkgYWRkSXRlbUZv
clVSTDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhpc3RvcnkgX2FkZEl0ZW1Gb3JVUkw6dGl0
bGU6XSk6IEFkZGVkLiBVc2VkIGZvciB0aGUgbm9ybWFsIGNhc2Ugd2hlcmUgd2UKKyAgICAgICAg
Y3JlYXRlIGFuIGl0ZW0gYW5kIGFscmVhZHkga25vdyBpdHMgdGl0bGUuCisgICAgICAgICgtW1dl
Ykhpc3RvcnkgYWdlTGltaXREYXRlXSk6IE1vdmVkIGludG8gdGhlIFdlYlByaXZhdGUgY2F0ZWdv
cnkuCisgICAgICAgICgtW1dlYkhpc3RvcnkgY29udGFpbnNJdGVtRm9yVVJMU3RyaW5nOl0pOiBE
aXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeSByZW1vdmVJdGVtOl0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV2ViSGlzdG9yeSBzZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDpmb3JJdGVtOl0pOiBE
aXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeSBfaXRlbUZvclVSTFN0cmluZzpdKTogRGl0dG8u
CisgICAgICAgICgtW1dlYkhpc3RvcnkgX2FkZFZpc2l0ZWRMaW5rc1RvUGFnZUdyb3VwOl0pOiBB
ZGRlZC4gRm9yIHVzZSBvbmx5IGluc2lkZSBXZWJLaXQuCisKKyAgICAgICAgKiBIaXN0b3J5L1dl
Ykhpc3RvcnlJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKiBIaXN0b3J5L1dlYkhpc3RvcnlJ
dGVtSW50ZXJuYWwuaDogVHdlYWtlZCBmb3JtYXR0aW5nIGFuZCBpbmNsdWRlcy4KKyAgICAgICAg
KiBIaXN0b3J5L1dlYkhpc3RvcnlQcml2YXRlLmg6IE1vdmVkIHRoZSBXZWJIaXN0b3J5UHJpdmF0
ZSBjbGFzcyBvdXQgb2YgdGhpcyBoZWFkZXIuCisgICAgICAgIEFsc28gcmVvcmdhbml6ZWQgd2hh
dCB3YXMgbGVmdCBiZWhpbmQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaDogQWRkZWQgcG9wdWxhdGVWaXNpdGVkTGlua3MuCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50Ojpwb3B1
bGF0ZVZpc2l0ZWRMaW5rcyk6IEFkZGVkIGEgY2FsbCB0byB0aGUgbmV3CisgICAgICAgIC1bV2Vi
SGlzdG9yeSBfYWRkVmlzaXRlZExpbmtzVG9QYWdlR3JvdXA6XSBtZXRob2QuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbToKKyAgICAgICAgKFdlYkZy
YW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5KTogQ2hhbmdlZCBjb2RlIHRvIHVz
ZSB0aGUgbmV3CisgICAgICAgIC1bV2ViSGlzdG9yeSBfYWRkSXRlbUZvclVSTDp0aXRsZTpdIG1l
dGhvZC4KKwogMjAwOC0wMy0wNSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlIFdlYkNvcmVTY3JpcHRDYWxsRnJhbWUKSW5kZXg6IFdlYktpdC9tYWMvSGlz
dG9yeS9XZWJIaXN0b3J5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJI
aXN0b3J5Lm1tCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0
b3J5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE4ICsyNiwyNCBAQAogICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaW1wb3J0ICJXZWJIaXN0b3J5LmgiCi0jaW1wb3J0ICJXZWJIaXN0b3J5
UHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViSGlzdG9yeUludGVybmFsLmgiCiAKLSNpbXBvcnQgIldl
Ykhpc3RvcnlJdGVtLmgiCiAjaW1wb3J0ICJXZWJIaXN0b3J5SXRlbUludGVybmFsLmgiCi0jaW1w
b3J0ICJXZWJIaXN0b3J5SXRlbVByaXZhdGUuaCIKICNpbXBvcnQgIldlYktpdExvZ2dpbmcuaCIK
ICNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgiCisjaW1wb3J0IDxXZWJDb3JlL0tVUkwuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNp
bXBvcnQgPEZvdW5kYXRpb24vTlNFcnJvci5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXNz
ZXJ0aW9ucy5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlSGlzdG9yeS5oPgotI2ltcG9ydCA8
d3RmL1ZlY3Rvci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSGFzaE1hcC5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvUmV0YWluUHRyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9W
ZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3R5cGVkZWYgaW50NjRfdCBX
ZWJIaXN0b3J5RGF0ZUtleTsKK3R5cGVkZWYgSGFzaE1hcDxXZWJIaXN0b3J5RGF0ZUtleSwgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5PiA+IERhdGVUb0VudHJpZXNNYXA7CiAKIE5TU3RyaW5nICpX
ZWJIaXN0b3J5SXRlbXNBZGRlZE5vdGlmaWNhdGlvbiA9IEAiV2ViSGlzdG9yeUl0ZW1zQWRkZWRO
b3RpZmljYXRpb24iOwogTlNTdHJpbmcgKldlYkhpc3RvcnlJdGVtc1JlbW92ZWROb3RpZmljYXRp
b24gPSBAIldlYkhpc3RvcnlJdGVtc1JlbW92ZWROb3RpZmljYXRpb24iOwpAQCAtNTQsNiArNjAs
NDUgQEAgTlNTdHJpbmcgKkRhdGVzQXJyYXlLZXkgPSBAIldlYkhpc3RvcnlEYQogCiAjZGVmaW5l
IGN1cnJlbnRGaWxlVmVyc2lvbiAxCiAKK0BpbnRlcmZhY2UgV2ViSGlzdG9yeVByaXZhdGUgOiBO
U09iamVjdCB7CitAcHJpdmF0ZQorICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKl9lbnRyaWVzQnlV
Ukw7CisgICAgRGF0ZVRvRW50cmllc01hcCogX2VudHJpZXNCeURhdGU7CisgICAgTlNNdXRhYmxl
QXJyYXkgKl9vcmRlcmVkTGFzdFZpc2l0ZWREYXlzOworICAgIEJPT0wgaXRlbUxpbWl0U2V0Owor
ICAgIGludCBpdGVtTGltaXQ7CisgICAgQk9PTCBhZ2VJbkRheXNMaW1pdFNldDsKKyAgICBpbnQg
YWdlSW5EYXlzTGltaXQ7Cit9CisKKy0gKHZvaWQpYWRkSXRlbTooV2ViSGlzdG9yeUl0ZW0gKill
bnRyeTsKKy0gKHZvaWQpYWRkSXRlbXM6KE5TQXJyYXkgKiluZXdFbnRyaWVzOworLSAoQk9PTCly
ZW1vdmVJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5OworLSAoQk9PTClyZW1vdmVJdGVtczoo
TlNBcnJheSAqKWVudHJpZXM7CistIChCT09MKXJlbW92ZUFsbEl0ZW1zOworLSAodm9pZClzZXRM
YXN0VmlzaXRlZFRpbWVJbnRlcnZhbDooTlNUaW1lSW50ZXJ2YWwpdGltZSBmb3JJdGVtOihXZWJI
aXN0b3J5SXRlbSAqKWl0ZW07CisKKy0gKE5TQXJyYXkgKilvcmRlcmVkTGFzdFZpc2l0ZWREYXlz
OworLSAoTlNBcnJheSAqKW9yZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25EYXk6KE5TQ2FsZW5kYXJE
YXRlICopY2FsZW5kYXJEYXRlOworLSAoQk9PTCljb250YWluc1VSTDooTlNVUkwgKilVUkw7Cist
IChCT09MKWNvbnRhaW5zSXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmc7Cist
IChXZWJIaXN0b3J5SXRlbSAqKWl0ZW1Gb3JVUkw6KE5TVVJMICopVVJMOworLSAoV2ViSGlzdG9y
eUl0ZW0gKilpdGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmluZzsKKworLSAoQk9P
TClsb2FkRnJvbVVSTDooTlNVUkwgKilVUkwgY29sbGVjdERpc2NhcmRlZEl0ZW1zSW50bzooTlNN
dXRhYmxlQXJyYXkgKilkaXNjYXJkZWRJdGVtcyBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0g
KEJPT0wpc2F2ZVRvVVJMOihOU1VSTCAqKVVSTCBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKwor
LSAoTlNDYWxlbmRhckRhdGUgKilhZ2VMaW1pdERhdGU7CisKKy0gKHZvaWQpc2V0SGlzdG9yeUl0
ZW1MaW1pdDooaW50KWxpbWl0OworLSAoaW50KWhpc3RvcnlJdGVtTGltaXQ7CistICh2b2lkKXNl
dEhpc3RvcnlBZ2VJbkRheXNMaW1pdDooaW50KWxpbWl0OworLSAoaW50KWhpc3RvcnlBZ2VJbkRh
eXNMaW1pdDsKKworLSAodm9pZClhZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cDooUGFnZUdyb3Vw
Jilncm91cDsKKworQGVuZAorCiBAaW1wbGVtZW50YXRpb24gV2ViSGlzdG9yeVByaXZhdGUKIAog
I3ByYWdtYSBtYXJrIE9CSkVDVCBGUkFNRVdPUksKQEAgLTY5LDkgKzExNCw4IEBAIE5TU3RyaW5n
ICpEYXRlc0FycmF5S2V5ID0gQCJXZWJIaXN0b3J5RGEKIAogLSAoaWQpaW5pdAogewotICAgIGlm
ICghW3N1cGVyIGluaXRdKSB7CisgICAgaWYgKCFbc3VwZXIgaW5pdF0pCiAgICAgICAgIHJldHVy
biBuaWw7Ci0gICAgfQogICAgIAogICAgIF9lbnRyaWVzQnlVUkwgPSBbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdOwogICAgIF9lbnRyaWVzQnlEYXRlID0gbmV3IERhdGVUb0VudHJp
ZXNNYXA7CkBAIC04NCw3ICsxMjgsNiBAQCBOU1N0cmluZyAqRGF0ZXNBcnJheUtleSA9IEAiV2Vi
SGlzdG9yeURhCiAgICAgW19lbnRyaWVzQnlVUkwgcmVsZWFzZV07CiAgICAgW19vcmRlcmVkTGFz
dFZpc2l0ZWREYXlzIHJlbGVhc2VdOwogICAgIGRlbGV0ZSBfZW50cmllc0J5RGF0ZTsKLSAgICAK
ICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKQEAgLTE1Niw3ICsxOTksNyBAQCBXZWJIaXN0b3J5
RGF0ZUtleSB0aW1lSW50ZXJ2YWxGb3JCZWdpbm5pCiAgICAgW2VudHJpZXNGb3JEYXRlIGluc2Vy
dE9iamVjdDplbnRyeSBhdEluZGV4Omxvd107CiB9CiAKLS0gKEJPT0wpX3JlbW92ZUl0ZW1Gcm9t
RGF0ZUNhY2hlczooV2ViSGlzdG9yeUl0ZW0gKillbnRyeQorLSAoQk9PTClyZW1vdmVJdGVtRnJv
bURhdGVDYWNoZXM6KFdlYkhpc3RvcnlJdGVtICopZW50cnkKIHsKICAgICBXZWJIaXN0b3J5RGF0
ZUtleSBkYXRlS2V5OwogICAgIEJPT0wgZm91bmREYXRlID0gW3NlbGYgZmluZEtleTomZGF0ZUtl
eSBmb3JEYXk6W2VudHJ5IGxhc3RWaXNpdGVkVGltZUludGVydmFsXV07CkBAIC0xNzksMjYgKzIy
MiwyOCBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2YWxGb3JCZWdpbm5pCiAgICAgcmV0
dXJuIFlFUzsKIH0KIAotLSAoQk9PTClyZW1vdmVJdGVtRm9yVVJMU3RyaW5nOiAoTlNTdHJpbmcg
KilVUkxTdHJpbmcKKy0gKEJPT0wpcmVtb3ZlSXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcgKilV
UkxTdHJpbmcKIHsKLSAgICBXZWJIaXN0b3J5SXRlbSAqZW50cnkgPSBbX2VudHJpZXNCeVVSTCBv
YmplY3RGb3JLZXk6IFVSTFN0cmluZ107Ci0gICAgaWYgKGVudHJ5ID09IG5pbCkgeworICAgIFdl
Ykhpc3RvcnlJdGVtICplbnRyeSA9IFtfZW50cmllc0J5VVJMIG9iamVjdEZvcktleTpVUkxTdHJp
bmddOworICAgIGlmICghZW50cnkpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICB9CiAKLSAgICBb
X2VudHJpZXNCeVVSTCByZW1vdmVPYmplY3RGb3JLZXk6IFVSTFN0cmluZ107CisgICAgW19lbnRy
aWVzQnlVUkwgcmVtb3ZlT2JqZWN0Rm9yS2V5OlVSTFN0cmluZ107CiAgICAgCiAjaWYgQVNTRVJU
X0RJU0FCTEVECi0gICAgW3NlbGYgX3JlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczplbnRyeV07Cisg
ICAgW3NlbGYgcmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzOmVudHJ5XTsKICNlbHNlCi0gICAgQk9P
TCBpdGVtV2FzSW5EYXRlQ2FjaGVzID0gW3NlbGYgX3JlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczpl
bnRyeV07CisgICAgQk9PTCBpdGVtV2FzSW5EYXRlQ2FjaGVzID0gW3NlbGYgcmVtb3ZlSXRlbUZy
b21EYXRlQ2FjaGVzOmVudHJ5XTsKICAgICBBU1NFUlQoaXRlbVdhc0luRGF0ZUNhY2hlcyk7CiAj
ZW5kaWYKIAorICAgIGlmICghW19lbnRyaWVzQnlVUkwgY291bnRdKQorICAgICAgICBQYWdlR3Jv
dXA6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpOworCiAgICAgcmV0dXJuIFlFUzsKIH0KIAotLSAo
dm9pZClfYWRkSXRlbVRvRGF0ZUNhY2hlczooV2ViSGlzdG9yeUl0ZW0gKillbnRyeQorLSAodm9p
ZClhZGRJdGVtVG9EYXRlQ2FjaGVzOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5CiB7CiAgICAgV2Vi
SGlzdG9yeURhdGVLZXkgZGF0ZUtleTsKICAgICBpZiAoW3NlbGYgZmluZEtleTomZGF0ZUtleSBm
b3JEYXk6W2VudHJ5IGxhc3RWaXNpdGVkVGltZUludGVydmFsXV0pCkBAIC0yMzUsNyArMjgwLDcg
QEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQogICAgICAgICBbb2xk
RW50cnkgcmVsZWFzZV07CiAgICAgfQogCi0gICAgW3NlbGYgX2FkZEl0ZW1Ub0RhdGVDYWNoZXM6
ZW50cnldOworICAgIFtzZWxmIGFkZEl0ZW1Ub0RhdGVDYWNoZXM6ZW50cnldOwogICAgIFtfZW50
cmllc0J5VVJMIHNldE9iamVjdDplbnRyeSBmb3JLZXk6VVJMU3RyaW5nXTsKIH0KIApAQCAtMjQ0
LDEyICsyODksMTIgQEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQog
I2lmIEFTU0VSVF9ESVNBQkxFRAogICAgIFtzZWxmIF9yZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6
ZW50cnldOwogI2Vsc2UKLSAgICBCT09MIGVudHJ5V2FzUHJlc2VudCA9IFtzZWxmIF9yZW1vdmVJ
dGVtRnJvbURhdGVDYWNoZXM6ZW50cnldOworICAgIEJPT0wgZW50cnlXYXNQcmVzZW50ID0gW3Nl
bGYgcmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzOmVudHJ5XTsKICAgICBBU1NFUlQoZW50cnlXYXNQ
cmVzZW50KTsKICNlbmRpZgogICAgIAogICAgIFtlbnRyeSBfc2V0TGFzdFZpc2l0ZWRUaW1lSW50
ZXJ2YWw6dGltZV07Ci0gICAgW3NlbGYgX2FkZEl0ZW1Ub0RhdGVDYWNoZXM6ZW50cnldOworICAg
IFtzZWxmIGFkZEl0ZW1Ub0RhdGVDYWNoZXM6ZW50cnldOwogCiAgICAgLy8gRG9uJ3Qgc2VuZCBu
b3RpZmljYXRpb24gdW50aWwgZW50cnkgaXMgYmFjayBpbiB0aGUgcmlnaHQgcGxhY2UgaW4gdGhl
IGRhdGUgY2FjaGVzLAogICAgIC8vIHNpbmNlIG9ic2VydmVycyBtaWdodCBmZXRjaCBoaXN0b3J5
IGJ5IGRhdGUgd2hlbiB0aGV5IHJlY2VpdmUgdGhlIG5vdGlmaWNhdGlvbi4KQEAgLTI1Nyw0NyAr
MzAyLDM4IEBAIFdlYkhpc3RvcnlEYXRlS2V5IHRpbWVJbnRlcnZhbEZvckJlZ2lubmkKICAgICAg
ICAgcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViSGlzdG9yeUl0ZW1DaGFuZ2VkTm90aWZpY2F0aW9u
IG9iamVjdDplbnRyeSB1c2VySW5mbzpuaWxdOwogfQogCi0tIChCT09MKXJlbW92ZUl0ZW06IChX
ZWJIaXN0b3J5SXRlbSAqKWVudHJ5CistIChCT09MKXJlbW92ZUl0ZW06KFdlYkhpc3RvcnlJdGVt
ICopZW50cnkKIHsKLSAgICBXZWJIaXN0b3J5SXRlbSAqbWF0Y2hpbmdFbnRyeTsKLSAgICBOU1N0
cmluZyAqVVJMU3RyaW5nOwotCi0gICAgVVJMU3RyaW5nID0gW2VudHJ5IFVSTFN0cmluZ107Cisg
ICAgTlNTdHJpbmcgKlVSTFN0cmluZyA9IFtlbnRyeSBVUkxTdHJpbmddOwogCiAgICAgLy8gSWYg
dGhpcyBleGFjdCBvYmplY3QgaXNuJ3Qgc3RvcmVkLCB0aGVuIG1ha2Ugbm8gY2hhbmdlLgogICAg
IC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdodCBiZWhhdmlvciBpZiB0aGlzIGVudHJ5IGlzbid0
IHByZXNlbnQsIGJ1dCBhbm90aGVyIGVudHJ5IGZvciB0aGUgc2FtZSBVUkwgaXM/CiAgICAgLy8g
TWF5YmUgbmVlZCB0byBjaGFuZ2UgdGhlIEFQSSB0byBtYWtlIHNvbWV0aGluZyBsaWtlIHJlbW92
ZUVudHJ5Rm9yVVJMU3RyaW5nIHB1YmxpYyBpbnN0ZWFkLgotICAgIG1hdGNoaW5nRW50cnkgPSBb
X2VudHJpZXNCeVVSTCBvYmplY3RGb3JLZXk6IFVSTFN0cmluZ107Ci0gICAgaWYgKG1hdGNoaW5n
RW50cnkgIT0gZW50cnkpIHsKKyAgICBXZWJIaXN0b3J5SXRlbSAqbWF0Y2hpbmdFbnRyeSA9IFtf
ZW50cmllc0J5VVJMIG9iamVjdEZvcktleTpVUkxTdHJpbmddOworICAgIGlmIChtYXRjaGluZ0Vu
dHJ5ICE9IGVudHJ5KQogICAgICAgICByZXR1cm4gTk87Ci0gICAgfQogCi0gICAgW3NlbGYgcmVt
b3ZlSXRlbUZvclVSTFN0cmluZzogVVJMU3RyaW5nXTsKKyAgICBbc2VsZiByZW1vdmVJdGVtRm9y
VVJMU3RyaW5nOlVSTFN0cmluZ107CiAKICAgICByZXR1cm4gWUVTOwogfQogCi0tIChCT09MKXJl
bW92ZUl0ZW1zOiAoTlNBcnJheSAqKWVudHJpZXMKKy0gKEJPT0wpcmVtb3ZlSXRlbXM6KE5TQXJy
YXkgKillbnRyaWVzCiB7Ci0gICAgaW50IGluZGV4LCBjb3VudDsKLQotICAgIGNvdW50ID0gW2Vu
dHJpZXMgY291bnRdOwotICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgTlNVSW50ZWdlciBjb3Vu
dCA9IFtlbnRyaWVzIGNvdW50XTsKKyAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gTk87
Ci0gICAgfQogCi0gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpIHsK
KyAgICBmb3IgKE5TVUludGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KQog
ICAgICAgICBbc2VsZiByZW1vdmVJdGVtOltlbnRyaWVzIG9iamVjdEF0SW5kZXg6aW5kZXhdXTsK
LSAgICB9CiAgICAgCiAgICAgcmV0dXJuIFlFUzsKIH0KIAogLSAoQk9PTClyZW1vdmVBbGxJdGVt
cwogewotICAgIGlmIChbX2VudHJpZXNCeVVSTCBjb3VudF0gPT0gMCkgeworICAgIGlmIChfZW50
cmllc0J5RGF0ZS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gTk87Ci0gICAgfQogCiAgICAg
X2VudHJpZXNCeURhdGUtPmNsZWFyKCk7CiAgICAgW19lbnRyaWVzQnlVUkwgcmVtb3ZlQWxsT2Jq
ZWN0c107CkBAIC0zMDYsMjMgKzM0MiwyMSBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2
YWxGb3JCZWdpbm5pCiAgICAgW19vcmRlcmVkTGFzdFZpc2l0ZWREYXlzIHJlbGVhc2VdOwogICAg
IF9vcmRlcmVkTGFzdFZpc2l0ZWREYXlzID0gbmlsOwogCisgICAgUGFnZUdyb3VwOjpyZW1vdmVB
bGxWaXNpdGVkTGlua3MoKTsKKwogICAgIHJldHVybiBZRVM7CiB9CiAKIC0gKHZvaWQpYWRkSXRl
bXM6KE5TQXJyYXkgKiluZXdFbnRyaWVzCiB7Ci0gICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9y
OwotICAgIFdlYkhpc3RvcnlJdGVtICplbnRyeTsKLQogICAgIC8vIFRoZXJlIGlzIG5vIGd1YXJh
bnRlZSB0aGF0IHRoZSBpbmNvbWluZyBlbnRyaWVzIGFyZSBpbiBhbnkgcGFydGljdWxhcgogICAg
IC8vIG9yZGVyLCBidXQgaWYgdGhpcyBpcyBjYWxsZWQgd2l0aCBhIHNldCBvZiBlbnRyaWVzIHRo
YXQgd2VyZSBjcmVhdGVkIGJ5CiAgICAgLy8gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHJlc3VsdHMg
b2Ygb3JkZXJlZExhc3RWaXNpdGVkRGF5cyBhbmQgb3JkZXJlZEl0ZW1zTGFzdFZpc2l0ZWRPbkRh
eXkKICAgICAvLyB0aGVuIHRoZXkgd2lsbCBiZSBvcmRlcmVkIGNocm9ub2xvZ2ljYWxseSBmcm9t
IG5ld2VzdCB0byBvbGRlc3QuIFdlIGNhbiBtYWtlIGFkZGluZyB0aGVtCiAgICAgLy8gZmFzdGVy
IChmZXdlciBjb21wYXJlcykgYnkgaW5zZXJ0aW5nIHRoZW0gZnJvbSBvbGRlc3QgdG8gbmV3ZXN0
LgotICAgIGVudW1lcmF0b3IgPSBbbmV3RW50cmllcyByZXZlcnNlT2JqZWN0RW51bWVyYXRvcl07
Ci0gICAgd2hpbGUgKChlbnRyeSA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpIHsK
KyAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbbmV3RW50cmllcyByZXZlcnNlT2JqZWN0
RW51bWVyYXRvcl07CisgICAgd2hpbGUgKFdlYkhpc3RvcnlJdGVtICplbnRyeSA9IFtlbnVtZXJh
dG9yIG5leHRPYmplY3RdKQogICAgICAgICBbc2VsZiBhZGRJdGVtOmVudHJ5XTsKLSAgICB9CiB9
CiAKICNwcmFnbWEgbWFyayBEQVRFLUJBU0VEIFJFVFJJRVZBTApAQCAtMzQ5LDI4ICszODMsMjcg
QEAgV2ViSGlzdG9yeURhdGVLZXkgdGltZUludGVydmFsRm9yQmVnaW5uaQogICAgIHJldHVybiBf
b3JkZXJlZExhc3RWaXNpdGVkRGF5czsKIH0KIAotLSAoTlNBcnJheSAqKW9yZGVyZWRJdGVtc0xh
c3RWaXNpdGVkT25EYXk6IChOU0NhbGVuZGFyRGF0ZSAqKWRhdGUKKy0gKE5TQXJyYXkgKilvcmRl
cmVkSXRlbXNMYXN0VmlzaXRlZE9uRGF5OihOU0NhbGVuZGFyRGF0ZSAqKWRhdGUKIHsKICAgICBX
ZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5OwotICAgIGlmIChbc2VsZiBmaW5kS2V5OiZkYXRlS2V5
IGZvckRheTpbZGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdXSkKLSAgICAgICAg
cmV0dXJuIF9lbnRyaWVzQnlEYXRlLT5nZXQoZGF0ZUtleSkuZ2V0KCk7Ci0KLSAgICByZXR1cm4g
bmlsOworICAgIGlmICghW3NlbGYgZmluZEtleTomZGF0ZUtleSBmb3JEYXk6W2RhdGUgdGltZUlu
dGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXV0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0
dXJuIF9lbnRyaWVzQnlEYXRlLT5nZXQoZGF0ZUtleSkuZ2V0KCk7CiB9CiAKICNwcmFnbWEgbWFy
ayBVUkwgTUFUQ0hJTkcKIAogLSAoV2ViSGlzdG9yeUl0ZW0gKilpdGVtRm9yVVJMU3RyaW5nOihO
U1N0cmluZyAqKVVSTFN0cmluZwogewotICAgIHJldHVybiBbX2VudHJpZXNCeVVSTCBvYmplY3RG
b3JLZXk6IFVSTFN0cmluZ107CisgICAgcmV0dXJuIFtfZW50cmllc0J5VVJMIG9iamVjdEZvcktl
eTpVUkxTdHJpbmddOwogfQogCi0tIChCT09MKWNvbnRhaW5zSXRlbUZvclVSTFN0cmluZzogKE5T
U3RyaW5nICopVVJMU3RyaW5nCistIChCT09MKWNvbnRhaW5zSXRlbUZvclVSTFN0cmluZzooTlNT
dHJpbmcgKilVUkxTdHJpbmcKIHsKICAgICByZXR1cm4gW3NlbGYgaXRlbUZvclVSTFN0cmluZzpV
UkxTdHJpbmddICE9IG5pbDsKIH0KIAotLSAoQk9PTCljb250YWluc1VSTDogKE5TVVJMICopVVJM
CistIChCT09MKWNvbnRhaW5zVVJMOihOU1VSTCAqKVVSTAogewogICAgIHJldHVybiBbc2VsZiBp
dGVtRm9yVVJMU3RyaW5nOltVUkwgX3dlYl9vcmlnaW5hbERhdGFBc1N0cmluZ11dICE9IG5pbDsK
IH0KQEAgLTM5Miw3ICs0MjUsNyBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2YWxGb3JC
ZWdpbm5pCiB7CiAgICAgaWYgKGFnZUluRGF5c0xpbWl0U2V0KQogICAgICAgICByZXR1cm4gYWdl
SW5EYXlzTGltaXQ7Ci0gICAgcmV0dXJuIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVm
YXVsdHNdIGludGVnZXJGb3JLZXk6IEAiV2ViS2l0SGlzdG9yeUFnZUluRGF5c0xpbWl0Il07Cisg
ICAgcmV0dXJuIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGludGVnZXJG
b3JLZXk6QCJXZWJLaXRIaXN0b3J5QWdlSW5EYXlzTGltaXQiXTsKIH0KIAogLSAodm9pZClzZXRI
aXN0b3J5SXRlbUxpbWl0OihpbnQpbGltaXQKQEAgLTQwNSwxMiArNDM4LDEyIEBAIFdlYkhpc3Rv
cnlEYXRlS2V5IHRpbWVJbnRlcnZhbEZvckJlZ2lubmkKIHsKICAgICBpZiAoaXRlbUxpbWl0U2V0
KQogICAgICAgICByZXR1cm4gaXRlbUxpbWl0OwotICAgIHJldHVybiBbW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXSBpbnRlZ2VyRm9yS2V5OiBAIldlYktpdEhpc3RvcnlJdGVt
TGltaXQiXTsKKyAgICByZXR1cm4gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0
c10gaW50ZWdlckZvcktleTpAIldlYktpdEhpc3RvcnlJdGVtTGltaXQiXTsKIH0KIAogLy8gUmV0
dXJuIGEgZGF0ZSB0aGF0IG1hcmtzIHRoZSBhZ2UgbGltaXQgZm9yIGhpc3RvcnkgZW50cmllcyBz
YXZlZCB0byBvcgogLy8gbG9hZGVkIGZyb20gZGlzay4gQW55IGVudHJ5IG9sZGVyIHRoYW4gdGhp
cyBpdGVtIHNob3VsZCBiZSByZWplY3RlZC4KLS0gKE5TQ2FsZW5kYXJEYXRlICopX2FnZUxpbWl0
RGF0ZQorLSAoTlNDYWxlbmRhckRhdGUgKilhZ2VMaW1pdERhdGUKIHsKICAgICByZXR1cm4gW1tO
U0NhbGVuZGFyRGF0ZSBjYWxlbmRhckRhdGVdIGRhdGVCeUFkZGluZ1llYXJzOjAgbW9udGhzOjAg
ZGF5czotW3NlbGYgaGlzdG9yeUFnZUluRGF5c0xpbWl0XQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91cnM6MCBtaW51dGVzOjAgc2Vjb25k
czowXTsKQEAgLTQ0MCw3ICs0NzMsNyBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2YWxG
b3JCZWdpbm5pCiAgICAgcmV0dXJuIGFycmF5UmVwOwogfQogCi0tIChCT09MKV9sb2FkSGlzdG9y
eUd1dHNGcm9tVVJMOihOU1VSTCAqKVVSTCBzYXZlZEl0ZW1zQ291bnQ6KGludCAqKW51bWJlck9m
SXRlbXNMb2FkZWQgY29sbGVjdERpc2NhcmRlZEl0ZW1zSW50bzooTlNNdXRhYmxlQXJyYXkgKilk
aXNjYXJkZWRJdGVtcyBlcnJvcjooTlNFcnJvciAqKillcnJvcgorLSAoQk9PTClsb2FkSGlzdG9y
eUd1dHNGcm9tVVJMOihOU1VSTCAqKVVSTCBzYXZlZEl0ZW1zQ291bnQ6KGludCAqKW51bWJlck9m
SXRlbXNMb2FkZWQgY29sbGVjdERpc2NhcmRlZEl0ZW1zSW50bzooTlNNdXRhYmxlQXJyYXkgKilk
aXNjYXJkZWRJdGVtcyBlcnJvcjooTlNFcnJvciAqKillcnJvcgogewogICAgICpudW1iZXJPZkl0
ZW1zTG9hZGVkID0gMDsKICAgICBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBuaWw7CkBAIC00
NzQsMTIgKzUwNywxMSBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2YWxGb3JCZWdpbm5p
CiAgICAgTlNOdW1iZXIgKmZpbGVWZXJzaW9uT2JqZWN0ID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9y
S2V5OkZpbGVWZXJzaW9uS2V5XTsKICAgICBpbnQgZmlsZVZlcnNpb247CiAgICAgLy8gd2UgZG9u
J3QgdHJ1c3QgZGF0YSBvYnRhaW5lZCBmcm9tIGVsc2V3aGVyZSwgc28gZG91YmxlLWNoZWNrCi0g
ICAgaWYgKGZpbGVWZXJzaW9uT2JqZWN0ICE9IG5pbCAmJiBbZmlsZVZlcnNpb25PYmplY3QgaXNL
aW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkgewotICAgICAgICBmaWxlVmVyc2lvbiA9IFtm
aWxlVmVyc2lvbk9iamVjdCBpbnRWYWx1ZV07Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAoIWZpbGVW
ZXJzaW9uT2JqZWN0IHx8ICFbZmlsZVZlcnNpb25PYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNOdW1i
ZXIgY2xhc3NdXSkgewogICAgICAgICBMT0dfRVJST1IoImhpc3RvcnkgZmlsZSB2ZXJzaW9uIGNh
bid0IGJlIGRldGVybWluZWQsIHRoZXJlZm9yZSBub3QgbG9hZGluZyIpOwogICAgICAgICByZXR1
cm4gTk87CiAgICAgfQorICAgIGZpbGVWZXJzaW9uID0gW2ZpbGVWZXJzaW9uT2JqZWN0IGludFZh
bHVlXTsKICAgICBpZiAoZmlsZVZlcnNpb24gPiBjdXJyZW50RmlsZVZlcnNpb24pIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJoaXN0b3J5IGZpbGUgdmVyc2lvbiBpcyAlZCwgbmV3ZXIgdGhhbiBuZXdl
c3Qga25vd24gdmVyc2lvbiAlZCwgdGhlcmVmb3JlIG5vdCBsb2FkaW5nIiwgZmlsZVZlcnNpb24s
IGN1cnJlbnRGaWxlVmVyc2lvbik7CiAgICAgICAgIHJldHVybiBOTzsKQEAgLTQ4OCw3ICs1MjAs
NyBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2YWxGb3JCZWdpbm5pCiAgICAgTlNBcnJh
eSAqYXJyYXkgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6RGF0ZXNBcnJheUtleV07CiAKICAg
ICBpbnQgaXRlbUNvdW50TGltaXQgPSBbc2VsZiBoaXN0b3J5SXRlbUxpbWl0XTsKLSAgICBOU1Rp
bWVJbnRlcnZhbCBhZ2VMaW1pdERhdGUgPSBbW3NlbGYgX2FnZUxpbWl0RGF0ZV0gdGltZUludGVy
dmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKKyAgICBOU1RpbWVJbnRlcnZhbCBhZ2VMaW1pdERhdGUg
PSBbW3NlbGYgYWdlTGltaXREYXRlXSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdOwog
ICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFthcnJheSBvYmplY3RFbnVtZXJhdG9yXTsK
ICAgICBCT09MIGFnZUxpbWl0UGFzc2VkID0gTk87CiAgICAgQk9PTCBpdGVtTGltaXRQYXNzZWQg
PSBOTzsKQEAgLTUzMCwxNTAgKzU2Miw2NSBAQCBXZWJIaXN0b3J5RGF0ZUtleSB0aW1lSW50ZXJ2
YWxGb3JCZWdpbm5pCiAKIC0gKEJPT0wpbG9hZEZyb21VUkw6KE5TVVJMICopVVJMIGNvbGxlY3RE
aXNjYXJkZWRJdGVtc0ludG86KE5TTXV0YWJsZUFycmF5ICopZGlzY2FyZGVkSXRlbXMgZXJyb3I6
KE5TRXJyb3IgKiopZXJyb3IKIHsKLSAgICBpbnQgbnVtYmVyT2ZJdGVtczsKLSAgICBkb3VibGUg
c3RhcnQsIGR1cmF0aW9uOwotICAgIEJPT0wgcmVzdWx0OworICAgIGRvdWJsZSBzdGFydCA9IENG
QWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwogCi0gICAgc3RhcnQgPSBDRkFic29sdXRlVGltZUdl
dEN1cnJlbnQoKTsKLSAgICByZXN1bHQgPSBbc2VsZiBfbG9hZEhpc3RvcnlHdXRzRnJvbVVSTDpV
Ukwgc2F2ZWRJdGVtc0NvdW50OiZudW1iZXJPZkl0ZW1zIGNvbGxlY3REaXNjYXJkZWRJdGVtc0lu
dG86ZGlzY2FyZGVkSXRlbXMgZXJyb3I6ZXJyb3JdOworICAgIGludCBudW1iZXJPZkl0ZW1zOwor
ICAgIGlmICghW3NlbGYgbG9hZEhpc3RvcnlHdXRzRnJvbVVSTDpVUkwgc2F2ZWRJdGVtc0NvdW50
OiZudW1iZXJPZkl0ZW1zIGNvbGxlY3REaXNjYXJkZWRJdGVtc0ludG86ZGlzY2FyZGVkSXRlbXMg
ZXJyb3I6ZXJyb3JdKQorICAgICAgICByZXR1cm4gTk87CiAKLSAgICBpZiAocmVzdWx0KSB7Ci0g
ICAgICAgIGR1cmF0aW9uID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKLSAg
ICAgICAgTE9HKFRpbWluZywgImxvYWRpbmcgJWQgaGlzdG9yeSBlbnRyaWVzIGZyb20gJUAgdG9v
ayAlZiBzZWNvbmRzIiwKLSAgICAgICAgICAgIG51bWJlck9mSXRlbXMsIFVSTCwgZHVyYXRpb24p
OwotICAgIH0KKyAgICBkb3VibGUgZHVyYXRpb24gPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQo
KSAtIHN0YXJ0OworICAgIExPRyhUaW1pbmcsICJsb2FkaW5nICVkIGhpc3RvcnkgZW50cmllcyBm
cm9tICVAIHRvb2sgJWYgc2Vjb25kcyIsIG51bWJlck9mSXRlbXMsIFVSTCwgZHVyYXRpb24pOwog
Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gWUVTOwogfQogCi0tIChCT09MKV9zYXZl
SGlzdG9yeUd1dHM6IChpbnQgKiludW1iZXJPZkl0ZW1zU2F2ZWQgVVJMOihOU1VSTCAqKVVSTCBl
cnJvcjooTlNFcnJvciAqKillcnJvcgorLSAoQk9PTClzYXZlSGlzdG9yeUd1dHM6KGludCAqKW51
bWJlck9mSXRlbXNTYXZlZCBVUkw6KE5TVVJMICopVVJMIGVycm9yOihOU0Vycm9yICoqKWVycm9y
CiB7CiAgICAgKm51bWJlck9mSXRlbXNTYXZlZCA9IDA7CiAKLSAgICAvLyBGSVhNRTogIENvcnJl
Y3RseSByZXBvcnQgZXJyb3Igd2hlbiBuZXcgQVBJIGlzIHJlYWR5LgotICAgIGlmIChlcnJvcikK
LSAgICAgICAgKmVycm9yID0gbmlsOwotCiAgICAgTlNBcnJheSAqYXJyYXkgPSBbc2VsZiBhcnJh
eVJlcHJlc2VudGF0aW9uXTsKICAgICBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CiAgICAgICAgIGFycmF5LCBEYXRl
c0FycmF5S2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpjdXJyZW50RmlsZVZl
cnNpb25dLCBGaWxlVmVyc2lvbktleSwKICAgICAgICAgbmlsXTsKICAgICBOU0RhdGEgKmRhdGEg
PSBbTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIGRhdGFGcm9tUHJvcGVydHlMaXN0OmRpY3Rp
b25hcnkgZm9ybWF0Ok5TUHJvcGVydHlMaXN0QmluYXJ5Rm9ybWF0X3YxXzAgZXJyb3JEZXNjcmlw
dGlvbjpuaWxdOwotICAgIGlmICghW2RhdGEgd3JpdGVUb1VSTDpVUkwgYXRvbWljYWxseTpZRVNd
KSB7CisgICAgaWYgKCFbZGF0YSB3cml0ZVRvVVJMOlVSTCBvcHRpb25zOjAgZXJyb3I6ZXJyb3Jd
KSB7CiAgICAgICAgIExPR19FUlJPUigiYXR0ZW1wdCB0byBzYXZlICVAIHRvICVAIGZhaWxlZCIs
IGRpY3Rpb25hcnksIFVSTCk7CiAgICAgICAgIHJldHVybiBOTzsKICAgICB9Ci0gICAgCisKICAg
ICAqbnVtYmVyT2ZJdGVtc1NhdmVkID0gW2FycmF5IGNvdW50XTsKICAgICByZXR1cm4gWUVTOwog
fQogCiAtIChCT09MKXNhdmVUb1VSTDooTlNVUkwgKilVUkwgZXJyb3I6KE5TRXJyb3IgKiopZXJy
b3IKIHsKLSAgICBpbnQgbnVtYmVyT2ZJdGVtczsKLSAgICBkb3VibGUgc3RhcnQsIGR1cmF0aW9u
OwotICAgIEJPT0wgcmVzdWx0OwotCi0gICAgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJl
bnQoKTsKLSAgICByZXN1bHQgPSBbc2VsZiBfc2F2ZUhpc3RvcnlHdXRzOiAmbnVtYmVyT2ZJdGVt
cyBVUkw6VVJMIGVycm9yOmVycm9yXTsKLQotICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgZHVy
YXRpb24gPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OwotICAgICAgICBMT0co
VGltaW5nLCAic2F2aW5nICVkIGhpc3RvcnkgZW50cmllcyB0byAlQCB0b29rICVmIHNlY29uZHMi
LAotICAgICAgICAgICAgbnVtYmVyT2ZJdGVtcywgVVJMLCBkdXJhdGlvbik7Ci0gICAgfQorICAg
IGRvdWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwogCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotQGVuZAotCi1AaW50ZXJmYWNlIF9XZWJDb3JlSGlzdG9yeVByb3ZpZGVy
IDogTlNPYmplY3QgIDxXZWJDb3JlSGlzdG9yeVByb3ZpZGVyPiAKLXsKLSAgICBXZWJIaXN0b3J5
ICpoaXN0b3J5OwotfQotLSBpbml0V2l0aEhpc3Rvcnk6IChXZWJIaXN0b3J5ICopaDsKLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIF9XZWJDb3JlSGlzdG9yeVByb3ZpZGVyCi0tIGluaXRXaXRoSGlz
dG9yeTogKFdlYkhpc3RvcnkgKiloCi17Ci0gICAgaGlzdG9yeSA9IFtoIHJldGFpbl07Ci0gICAg
cmV0dXJuIHNlbGY7Ci19CisgICAgaW50IG51bWJlck9mSXRlbXM7CisgICAgaWYgKCFbc2VsZiBz
YXZlSGlzdG9yeUd1dHM6Jm51bWJlck9mSXRlbXMgVVJMOlVSTCBlcnJvcjplcnJvcl0pCisgICAg
ICAgIHJldHVybiBOTzsKIAotc3RhdGljIGlubGluZSBib29sIG1hdGNoTGV0dGVyKGNoYXIgYywg
Y2hhciBsb3dlcmNhc2VMZXR0ZXIpCi17Ci0gICAgcmV0dXJuIChjIHwgMHgyMCkgPT0gbG93ZXJj
YXNlTGV0dGVyOwotfQorICAgIGRvdWJsZSBkdXJhdGlvbiA9IENGQWJzb2x1dGVUaW1lR2V0Q3Vy
cmVudCgpIC0gc3RhcnQ7CisgICAgTE9HKFRpbWluZywgInNhdmluZyAlZCBoaXN0b3J5IGVudHJp
ZXMgdG8gJUAgdG9vayAlZiBzZWNvbmRzIiwgbnVtYmVyT2ZJdGVtcywgVVJMLCBkdXJhdGlvbik7
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaFVuaWNvZGVMZXR0ZXIoVW5pQ2hhciBjLCBVbmlD
aGFyIGxvd2VyY2FzZUxldHRlcikKLXsKLSAgICByZXR1cm4gKGMgfCAweDIwKSA9PSBsb3dlcmNh
c2VMZXR0ZXI7CisgICAgcmV0dXJuIFlFUzsKIH0KIAotI2RlZmluZSBVTklDT0RFX0JVRkZFUl9T
SVpFIDEwMjQKLQotLSAoQk9PTCljb250YWluc1VSTDooY29uc3QgVW5pQ2hhciAqKXVuaWNvZGUg
bGVuZ3RoOih1bnNpZ25lZClsZW5ndGgKKy0gKHZvaWQpYWRkVmlzaXRlZExpbmtzVG9QYWdlR3Jv
dXA6KFBhZ2VHcm91cCYpZ3JvdXAKIHsKLSAgICBjb25zdCBVbmlDaGFyICp1bmljb2RlU3RyID0g
dW5pY29kZTsKLSAgICBVbmlDaGFyIHN0YXRpY1N0ckJ1ZmZlcltVTklDT0RFX0JVRkZFUl9TSVpF
XTsKLSAgICBVbmlDaGFyICpzdHJCdWZmZXIgPSBOVUxMOwotICAgIEJPT0wgbmVlZFRvQWRkU2xh
c2ggPSBGQUxTRTsKLQotICAgIGlmIChsZW5ndGggPj0gNiAmJgotICAgICAgICBtYXRjaFVuaWNv
ZGVMZXR0ZXIodW5pY29kZVswXSwgJ2gnKSAmJgotICAgICAgICBtYXRjaFVuaWNvZGVMZXR0ZXIo
dW5pY29kZVsxXSwgJ3QnKSAmJgotICAgICAgICBtYXRjaFVuaWNvZGVMZXR0ZXIodW5pY29kZVsy
XSwgJ3QnKSAmJgotICAgICAgICBtYXRjaFVuaWNvZGVMZXR0ZXIodW5pY29kZVszXSwgJ3AnKSAm
JgotICAgICAgICAodW5pY29kZVs0XSA9PSAnOicgCi0gICAgICAgICB8fCAobWF0Y2hVbmljb2Rl
TGV0dGVyKHVuaWNvZGVbNF0sICdzJykgJiYgdW5pY29kZVs1XSA9PSAnOicpKSkgewotCi0gICAg
ICAgIHVuc2lnbmVkIHBvcyA9IHVuaWNvZGVbNF0gPT0gJzonID8gNSA6IDY7Ci0KLSAgICAgICAg
Ly8gc2tpcCBwb3NzaWJsZSBpbml0aWFsIHR3byBzbGFzaGVzCi0gICAgICAgIGlmIChwb3MgKyAx
IDwgbGVuZ3RoICYmIHVuaWNvZGVbcG9zXSA9PSAnLycgJiYgdW5pY29kZVtwb3MgKyAxXSA9PSAn
LycpIHsKLSAgICAgICAgICAgIHBvcyArPSAyOwotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUg
KHBvcyA8IGxlbmd0aCAmJiB1bmljb2RlW3Bvc10gIT0gJy8nKSB7Ci0gICAgICAgICAgICBwb3Mr
KzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwb3MgPT0gbGVuZ3RoKSB7Ci0gICAgICAgICAg
ICBuZWVkVG9BZGRTbGFzaCA9IFRSVUU7CisgICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9yID0g
W19lbnRyaWVzQnlVUkwga2V5RW51bWVyYXRvcl07CisgICAgd2hpbGUgKE5TU3RyaW5nICp1cmwg
PSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgeworICAgICAgICBzaXplX3QgbGVuZ3RoID0gW3Vy
bCBsZW5ndGhdOworICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IENGU3RyaW5nR2V0
Q2hhcmFjdGVyc1B0cihyZWludGVycHJldF9jYXN0PENGU3RyaW5nUmVmPih1cmwpKTsKKyAgICAg
ICAgaWYgKGNoYXJhY3RlcnMpCisgICAgICAgICAgICBncm91cC5hZGRWaXNpdGVkTGluayhjaGFy
YWN0ZXJzLCBsZW5ndGgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZlY3RvcjxVQ2hh
ciwgNTEyPiBidWZmZXIobGVuZ3RoKTsKKyAgICAgICAgICAgIFt1cmwgZ2V0Q2hhcmFjdGVyczpi
dWZmZXIuZGF0YSgpXTsKKyAgICAgICAgICAgIGdyb3VwLmFkZFZpc2l0ZWRMaW5rKGJ1ZmZlci5k
YXRhKCksIGxlbmd0aCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBpZiAobmVlZFRvQWRkU2xh
c2gpIHsKLSAgICAgICAgaWYgKGxlbmd0aCArIDEgPD0gVU5JQ09ERV9CVUZGRVJfU0laRSkgewot
ICAgICAgICAgICAgc3RyQnVmZmVyID0gc3RhdGljU3RyQnVmZmVyOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgc3RyQnVmZmVyID0gKFVuaUNoYXIqKW1hbGxvYyhzaXplb2YoVW5pQ2hh
cikgKiAobGVuZ3RoICsgMSkpOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweShzdHJCdWZmZXIs
IHVuaWNvZGUsIDIgKiBsZW5ndGgpOwotICAgICAgICBzdHJCdWZmZXJbbGVuZ3RoXSA9ICcvJzsK
LSAgICAgICAgbGVuZ3RoKys7Ci0KLSAgICAgICAgdW5pY29kZVN0ciA9IHN0ckJ1ZmZlcjsKLSAg
ICB9Ci0KLSAgICBDRlN0cmluZ1JlZiBzdHIgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
Tm9Db3B5KE5VTEwsIHVuaWNvZGVTdHIsIGxlbmd0aCwga0NGQWxsb2NhdG9yTnVsbCk7Ci0gICAg
Qk9PTCByZXN1bHQgPSBbaGlzdG9yeSBjb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6KGlkKXN0cl07
Ci0gICAgQ0ZSZWxlYXNlKHN0cik7Ci0KLSAgICBpZiAoc3RyQnVmZmVyICE9IHN0YXRpY1N0ckJ1
ZmZlcikgewotICAgICAgICBmcmVlKHN0ckJ1ZmZlcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW2hpc3RvcnkgcmVsZWFzZV07Ci0g
ICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCiBAZW5kCkBAIC02ODUsMTMgKzYzMiwxMSBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgbWF0Y2hVbmljb2RlTGV0dGVyKFVuCiAgICAgcmV0dXJuIF9zaGFyZWRI
aXN0b3J5OwogfQogCi0KLSsgKHZvaWQpc2V0T3B0aW9uYWxTaGFyZWRIaXN0b3J5OiAoV2ViSGlz
dG9yeSAqKWhpc3RvcnkKKysgKHZvaWQpc2V0T3B0aW9uYWxTaGFyZWRIaXN0b3J5OihXZWJIaXN0
b3J5ICopaGlzdG9yeQogewotICAgIC8vIEZJWE1FLiAgTmVlZCB0byB0aGluayBhYm91dCBtdWx0
aXBsZSBpbnN0YW5jZXMgb2YgV2ViSGlzdG9yeSBwZXIgYXBwbGljYXRpb24KKyAgICAvLyBGSVhN
RTogTmVlZCB0byB0aGluayBhYm91dCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgV2ViSGlzdG9yeSBw
ZXIgYXBwbGljYXRpb24KICAgICAvLyBhbmQgY29ycmVjdCBzeW5jaHJvbml6YXRpb24gb2YgaGlz
dG9yeSBmaWxlIGJldHdlZW4gYXBwbGljYXRpb25zLgotICAgIFtXZWJDb3JlSGlzdG9yeSBzZXRI
aXN0b3J5UHJvdmlkZXI6IFtbW19XZWJDb3JlSGlzdG9yeVByb3ZpZGVyIGFsbG9jXSBpbml0V2l0
aEhpc3Rvcnk6IGhpc3RvcnldIGF1dG9yZWxlYXNlXV07Ci0gICAgaWYgKF9zaGFyZWRIaXN0b3J5
ICE9IGhpc3RvcnkpeworICAgIGlmIChfc2hhcmVkSGlzdG9yeSAhPSBoaXN0b3J5KSB7CiAgICAg
ICAgIFtfc2hhcmVkSGlzdG9yeSByZWxlYXNlXTsKICAgICAgICAgX3NoYXJlZEhpc3RvcnkgPSBb
aGlzdG9yeSByZXRhaW5dOwogICAgIH0KQEAgLTY5OSwxMCArNjQ0LDEwIEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBtYXRjaFVuaWNvZGVMZXR0ZXIoVW4KIAogLSAoaWQpaW5pdAogewotICAgIGlmICgo
c2VsZiA9IFtzdXBlciBpbml0XSkgIT0gbmlsKSB7Ci0gICAgICAgIF9oaXN0b3J5UHJpdmF0ZSA9
IFtbV2ViSGlzdG9yeVByaXZhdGUgYWxsb2NdIGluaXRdOwotICAgIH0KLQorICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIF9o
aXN0b3J5UHJpdmF0ZSA9IFtbV2ViSGlzdG9yeVByaXZhdGUgYWxsb2NdIGluaXRdOwogICAgIHJl
dHVybiBzZWxmOwogfQogCkBAIC03MTgsNDAgKzY2MywxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
bWF0Y2hVbmljb2RlTGV0dGVyKFVuCiB7CiAgICAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IFtO
U0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czplbnRyaWVzLCBXZWJIaXN0
b3J5SXRlbXNLZXksIG5pbF07CiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2Vu
dGVyXQotICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTogbmFtZSBvYmplY3Q6IHNlbGYgdXNl
ckluZm86IHVzZXJJbmZvXTsKLX0KLQotLSAoV2ViSGlzdG9yeUl0ZW0gKilhZGRJdGVtRm9yVVJM
OiAoTlNVUkwgKilVUkwKLXsKLSAgICBXZWJIaXN0b3J5SXRlbSAqZW50cnkgPSBbW1dlYkhpc3Rv
cnlJdGVtIGFsbG9jXSBpbml0V2l0aFVSTDpVUkwgdGl0bGU6bmlsXTsKLSAgICBbZW50cnkgX3Nl
dExhc3RWaXNpdGVkVGltZUludGVydmFsOiBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJl
bmNlRGF0ZV1dOwotICAgIFtzZWxmIGFkZEl0ZW06IGVudHJ5XTsKLSAgICBbZW50cnkgcmVsZWFz
ZV07Ci0gICAgcmV0dXJuIGVudHJ5OwotfQotCi0KLS0gKHZvaWQpYWRkSXRlbTogKFdlYkhpc3Rv
cnlJdGVtICopZW50cnkKLXsKLSAgICBMT0cgKEhpc3RvcnksICJhZGRpbmcgJUAiLCBlbnRyeSk7
Ci0gICAgW19oaXN0b3J5UHJpdmF0ZSBhZGRJdGVtOiBlbnRyeV07Ci0gICAgW3NlbGYgX3NlbmRO
b3RpZmljYXRpb246IFdlYkhpc3RvcnlJdGVtc0FkZGVkTm90aWZpY2F0aW9uCi0gICAgICAgICAg
ICAgICAgICAgIGVudHJpZXM6IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDplbnRyeV1dOwotfQot
Ci0tICh2b2lkKXJlbW92ZUl0ZW06IChXZWJIaXN0b3J5SXRlbSAqKWVudHJ5Ci17Ci0gICAgaWYg
KFtfaGlzdG9yeVByaXZhdGUgcmVtb3ZlSXRlbTogZW50cnldKSB7Ci0gICAgICAgIFtzZWxmIF9z
ZW5kTm90aWZpY2F0aW9uOiBXZWJIaXN0b3J5SXRlbXNSZW1vdmVkTm90aWZpY2F0aW9uCi0gICAg
ICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6ZW50
cnldXTsKLSAgICB9CisgICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1lOm5hbWUgb2JqZWN0OnNl
bGYgdXNlckluZm86dXNlckluZm9dOwogfQogCi0tICh2b2lkKXJlbW92ZUl0ZW1zOiAoTlNBcnJh
eSAqKWVudHJpZXMKKy0gKHZvaWQpcmVtb3ZlSXRlbXM6KE5TQXJyYXkgKillbnRyaWVzCiB7CiAg
ICAgaWYgKFtfaGlzdG9yeVByaXZhdGUgcmVtb3ZlSXRlbXM6ZW50cmllc10pIHsKLSAgICAgICAg
W3NlbGYgX3NlbmROb3RpZmljYXRpb246IFdlYkhpc3RvcnlJdGVtc1JlbW92ZWROb3RpZmljYXRp
b24KLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXM6IGVudHJpZXNdOworICAgICAgICBb
c2VsZiBfc2VuZE5vdGlmaWNhdGlvbjpXZWJIaXN0b3J5SXRlbXNSZW1vdmVkTm90aWZpY2F0aW9u
CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOmVudHJpZXNdOwogICAgIH0KIH0KIApA
QCAtNzU5LDIxICs2NzgsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1hdGNoVW5pY29kZUxldHRl
cihVbgogewogICAgIGlmIChbX2hpc3RvcnlQcml2YXRlIHJlbW92ZUFsbEl0ZW1zXSkgewogICAg
ICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdCi0gICAgICAgICAgICBw
b3N0Tm90aWZpY2F0aW9uTmFtZTogV2ViSGlzdG9yeUFsbEl0ZW1zUmVtb3ZlZE5vdGlmaWNhdGlv
bgotICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHNlbGZdOworICAgICAgICAgICAg
cG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViSGlzdG9yeUFsbEl0ZW1zUmVtb3ZlZE5vdGlmaWNhdGlv
bgorICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6c2VsZl07CiAgICAgfQogfQogCiAt
ICh2b2lkKWFkZEl0ZW1zOihOU0FycmF5ICopbmV3RW50cmllcwogewogICAgIFtfaGlzdG9yeVBy
aXZhdGUgYWRkSXRlbXM6bmV3RW50cmllc107Ci0gICAgW3NlbGYgX3NlbmROb3RpZmljYXRpb246
IFdlYkhpc3RvcnlJdGVtc0FkZGVkTm90aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgIGVu
dHJpZXM6IG5ld0VudHJpZXNdOwotfQotCi0tICh2b2lkKXNldExhc3RWaXNpdGVkVGltZUludGVy
dmFsOihOU1RpbWVJbnRlcnZhbCl0aW1lIGZvckl0ZW06KFdlYkhpc3RvcnlJdGVtICopZW50cnkK
LXsKLSAgICBbX2hpc3RvcnlQcml2YXRlIHNldExhc3RWaXNpdGVkVGltZUludGVydmFsOnRpbWUg
Zm9ySXRlbTplbnRyeV07CisgICAgW3NlbGYgX3NlbmROb3RpZmljYXRpb246V2ViSGlzdG9yeUl0
ZW1zQWRkZWROb3RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZW50cmllczpuZXdFbnRy
aWVzXTsKIH0KIAogI3ByYWdtYSBtYXJrIERBVEUtQkFTRUQgUkVUUklFVkFMCkBAIC03ODMsMjEg
KzY5NywxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hVbmljb2RlTGV0dGVyKFVuCiAgICAg
cmV0dXJuIFtfaGlzdG9yeVByaXZhdGUgb3JkZXJlZExhc3RWaXNpdGVkRGF5c107CiB9CiAKLS0g
KE5TQXJyYXkgKilvcmRlcmVkSXRlbXNMYXN0VmlzaXRlZE9uRGF5OiAoTlNDYWxlbmRhckRhdGUg
KilkYXRlCistIChOU0FycmF5ICopb3JkZXJlZEl0ZW1zTGFzdFZpc2l0ZWRPbkRheTooTlNDYWxl
bmRhckRhdGUgKilkYXRlCiB7Ci0gICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUgb3JkZXJlZEl0
ZW1zTGFzdFZpc2l0ZWRPbkRheTogZGF0ZV07CisgICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUg
b3JkZXJlZEl0ZW1zTGFzdFZpc2l0ZWRPbkRheTpkYXRlXTsKIH0KIAogI3ByYWdtYSBtYXJrIFVS
TCBNQVRDSElORwogCi0tIChCT09MKWNvbnRhaW5zSXRlbUZvclVSTFN0cmluZzogKE5TU3RyaW5n
ICopVVJMU3RyaW5nCistIChCT09MKWNvbnRhaW5zVVJMOihOU1VSTCAqKVVSTAogewotICAgIHJl
dHVybiBbX2hpc3RvcnlQcml2YXRlIGNvbnRhaW5zSXRlbUZvclVSTFN0cmluZzogVVJMU3RyaW5n
XTsKLX0KLQotLSAoQk9PTCljb250YWluc1VSTDogKE5TVVJMICopVVJMCi17Ci0gICAgcmV0dXJu
IFtfaGlzdG9yeVByaXZhdGUgY29udGFpbnNVUkw6IFVSTF07CisgICAgcmV0dXJuIFtfaGlzdG9y
eVByaXZhdGUgY29udGFpbnNVUkw6VVJMXTsKIH0KIAogLSAoV2ViSGlzdG9yeUl0ZW0gKilpdGVt
Rm9yVVJMOihOU1VSTCAqKVVSTApAQCAtODA5LDQxICs3MTgsMzEgQEAgc3RhdGljIGlubGluZSBi
b29sIG1hdGNoVW5pY29kZUxldHRlcihVbgogCiAtIChCT09MKWxvYWRGcm9tVVJMOihOU1VSTCAq
KVVSTCBlcnJvcjooTlNFcnJvciAqKillcnJvcgogewotICAgIE5TTXV0YWJsZUFycmF5ICpkaXNj
YXJkZWRJdGVtcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgCi0gICAgaWYgKFtfaGlz
dG9yeVByaXZhdGUgbG9hZEZyb21VUkw6VVJMIGNvbGxlY3REaXNjYXJkZWRJdGVtc0ludG86ZGlz
Y2FyZGVkSXRlbXMgZXJyb3I6ZXJyb3JdKSB7Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50
ZXIgZGVmYXVsdENlbnRlcl0KLSAgICAgICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1lOldlYkhp
c3RvcnlMb2FkZWROb3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0
OnNlbGZdOwotICAgICAgICAKLSAgICAgICAgaWYgKFtkaXNjYXJkZWRJdGVtcyBjb3VudF0gPiAw
KQotICAgICAgICAgICAgW3NlbGYgX3NlbmROb3RpZmljYXRpb246V2ViSGlzdG9yeUl0ZW1zRGlz
Y2FyZGVkV2hpbGVMb2FkaW5nTm90aWZpY2F0aW9uIGVudHJpZXM6ZGlzY2FyZGVkSXRlbXNdOwot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIFlFUzsKKyAgICBOU011dGFibGVBcnJheSAqZGlzY2Fy
ZGVkSXRlbXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsgICAgCisgICAgaWYgKCFb
X2hpc3RvcnlQcml2YXRlIGxvYWRGcm9tVVJMOlVSTCBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJbnRv
OmRpc2NhcmRlZEl0ZW1zIGVycm9yOmVycm9yXSkgeworICAgICAgICBbZGlzY2FyZGVkSXRlbXMg
cmVsZWFzZV07CisgICAgICAgIHJldHVybiBOTzsKICAgICB9Ci0gICAgcmV0dXJuIE5POwotfQog
Ci0tIChCT09MKXNhdmVUb1VSTDooTlNVUkwgKilVUkwgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IK
LXsKLSAgICAvLyBGSVhNRTogIFVzZSBuZXcgZm91bmRhdGlvbiBBUEkgdG8gZ2V0IGVycm9yIHdo
ZW4gcmVhZHkuCi0gICAgaWYoW19oaXN0b3J5UHJpdmF0ZSBzYXZlVG9VUkw6VVJMIGVycm9yOmVy
cm9yXSl7Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0KLSAg
ICAgICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1lOiBXZWJIaXN0b3J5U2F2ZWROb3RpZmljYXRp
b24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBzZWxmXTsKLSAgICAgICAgcmV0
dXJuIFlFUzsKLSAgICB9Ci0gICAgcmV0dXJuIE5POyAgICAKLX0KKyAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdCisgICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1lOldl
Ykhpc3RvcnlMb2FkZWROb3RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6
c2VsZl07CiAKLS0gKFdlYkhpc3RvcnlJdGVtICopX2l0ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5n
ICopVVJMU3RyaW5nCi17Ci0gICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUgaXRlbUZvclVSTFN0
cmluZzogVVJMU3RyaW5nXTsKKyAgICBpZiAoW2Rpc2NhcmRlZEl0ZW1zIGNvdW50XSkKKyAgICAg
ICAgW3NlbGYgX3NlbmROb3RpZmljYXRpb246V2ViSGlzdG9yeUl0ZW1zRGlzY2FyZGVkV2hpbGVM
b2FkaW5nTm90aWZpY2F0aW9uIGVudHJpZXM6ZGlzY2FyZGVkSXRlbXNdOworCisgICAgW2Rpc2Nh
cmRlZEl0ZW1zIHJlbGVhc2VdOworICAgIHJldHVybiBZRVM7CiB9CiAKLS0gKE5TQ2FsZW5kYXJE
YXRlKilhZ2VMaW1pdERhdGUKKy0gKEJPT0wpc2F2ZVRvVVJMOihOU1VSTCAqKVVSTCBlcnJvcjoo
TlNFcnJvciAqKillcnJvcgogewotICAgIHJldHVybiBbX2hpc3RvcnlQcml2YXRlIF9hZ2VMaW1p
dERhdGVdOworICAgIGlmICghW19oaXN0b3J5UHJpdmF0ZSBzYXZlVG9VUkw6VVJMIGVycm9yOmVy
cm9yXSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0KKyAgICAgICAgcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViSGlzdG9yeVNhdmVk
Tm90aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OnNlbGZdOworICAgIHJl
dHVybiBZRVM7CiB9CiAKIC0gKHZvaWQpc2V0SGlzdG9yeUl0ZW1MaW1pdDooaW50KWxpbWl0CkBA
IC04NjcsMyArNzY2LDY5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaFVuaWNvZGVMZXR0ZXIo
VW4KIH0KIAogQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViSGlzdG9yeSAoV2ViUHJpdmF0ZSkK
KworLSAodm9pZClhZGRJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5Cit7CisgICAgTE9HKEhp
c3RvcnksICJhZGRpbmcgJUAiLCBlbnRyeSk7CisgICAgW19oaXN0b3J5UHJpdmF0ZSBhZGRJdGVt
OmVudHJ5XTsKKyAgICBbc2VsZiBfc2VuZE5vdGlmaWNhdGlvbjpXZWJIaXN0b3J5SXRlbXNBZGRl
ZE5vdGlmaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOltOU0FycmF5IGFycmF5
V2l0aE9iamVjdDplbnRyeV1dOworfQorCistIChXZWJIaXN0b3J5SXRlbSAqKWFkZEl0ZW1Gb3JV
Ukw6KE5TVVJMICopVVJMCit7CisgICAgV2ViSGlzdG9yeUl0ZW0gKmVudHJ5ID0gW1tXZWJIaXN0
b3J5SXRlbSBhbGxvY10gaW5pdFdpdGhVUkw6VVJMIHRpdGxlOm5pbF07CisgICAgW2VudHJ5IF9z
ZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJl
bmNlRGF0ZV1dOworICAgIFtzZWxmIGFkZEl0ZW06ZW50cnldOworICAgIFtlbnRyeSByZWxlYXNl
XTsKKyAgICByZXR1cm4gZW50cnk7Cit9CisKKy0gKE5TQ2FsZW5kYXJEYXRlICopYWdlTGltaXRE
YXRlCit7CisgICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUgYWdlTGltaXREYXRlXTsKK30KKwor
LSAoQk9PTCljb250YWluc0l0ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5nICopVVJMU3RyaW5nCit7
CisgICAgcmV0dXJuIFtfaGlzdG9yeVByaXZhdGUgY29udGFpbnNJdGVtRm9yVVJMU3RyaW5nOlVS
TFN0cmluZ107Cit9CisKKy0gKHZvaWQpcmVtb3ZlSXRlbTooV2ViSGlzdG9yeUl0ZW0gKillbnRy
eQoreworICAgIGlmIChbX2hpc3RvcnlQcml2YXRlIHJlbW92ZUl0ZW06ZW50cnldKSB7CisgICAg
ICAgIFtzZWxmIF9zZW5kTm90aWZpY2F0aW9uOldlYkhpc3RvcnlJdGVtc1JlbW92ZWROb3RpZmlj
YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXM6W05TQXJyYXkgYXJyYXlXaXRo
T2JqZWN0OmVudHJ5XV07CisgICAgfQorfQorCistICh2b2lkKXNldExhc3RWaXNpdGVkVGltZUlu
dGVydmFsOihOU1RpbWVJbnRlcnZhbCl0aW1lIGZvckl0ZW06KFdlYkhpc3RvcnlJdGVtICopZW50
cnkKK3sKKyAgICBbX2hpc3RvcnlQcml2YXRlIHNldExhc3RWaXNpdGVkVGltZUludGVydmFsOnRp
bWUgZm9ySXRlbTplbnRyeV07Cit9CisKKy0gKFdlYkhpc3RvcnlJdGVtICopX2l0ZW1Gb3JVUkxT
dHJpbmc6KE5TU3RyaW5nICopVVJMU3RyaW5nCit7CisgICAgcmV0dXJuIFtfaGlzdG9yeVByaXZh
dGUgaXRlbUZvclVSTFN0cmluZzpVUkxTdHJpbmddOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBXZWJIaXN0b3J5IChXZWJJbnRlcm5hbCkKKworLSAodm9pZClfYWRkSXRlbUZvclVSTDoo
TlNVUkwgKilVUkwgdGl0bGU6KE5TU3RyaW5nICopdGl0bGUKK3sKKyAgICBXZWJIaXN0b3J5SXRl
bSAqZW50cnkgPSBbW1dlYkhpc3RvcnlJdGVtIGFsbG9jXSBpbml0V2l0aFVSTDpVUkwgdGl0bGU6
dGl0bGVdOworICAgIFtlbnRyeSBfc2V0TGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6W05TRGF0ZSB0
aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdXTsKKyAgICBbc2VsZiBhZGRJdGVtOmVudHJ5
XTsKKyAgICBbZW50cnkgcmVsZWFzZV07Cit9CisKKy0gKHZvaWQpX2FkZFZpc2l0ZWRMaW5rc1Rv
UGFnZUdyb3VwOihXZWJDb3JlOjpQYWdlR3JvdXAmKWdyb3VwCit7CisgICAgW19oaXN0b3J5UHJp
dmF0ZSBhZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cDpncm91cF07Cit9CisKK0BlbmQKSW5kZXg6
IFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUludGVybmFsLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUludGVybmFsLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgIldlYkhpc3RvcnlQcml2YXRlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBQYWdlR3JvdXA7Cit9CisKK0BpbnRlcmZhY2UgV2ViSGlz
dG9yeSAoV2ViSW50ZXJuYWwpCistICh2b2lkKV9hZGRJdGVtRm9yVVJMOihOU1VSTCAqKVVSTCB0
aXRsZTooTlNTdHJpbmcgKil0aXRsZTsKKy0gKHZvaWQpX2FkZFZpc2l0ZWRMaW5rc1RvUGFnZUdy
b3VwOihXZWJDb3JlOjpQYWdlR3JvdXAmKWdyb3VwOworQGVuZAoKUHJvcGVydHkgY2hhbmdlcyBv
bjogV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJbnRlcm5hbC5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFt
ZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYktpdC9tYWMvSGlzdG9yeS9X
ZWJIaXN0b3J5SXRlbUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9IaXN0b3J5
L1dlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaAkocmV2aXNpb24gMzA4MTYpCisrKyBXZWJLaXQvbWFj
L0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW1JbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDExICsyNiw5IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgPENvY29hL0Nv
Y29hLmg+CisjaW1wb3J0ICJXZWJIaXN0b3J5SXRlbVByaXZhdGUuaCIKIAotI2ltcG9ydCA8V2Vi
S2l0L1dlYkJhY2tGb3J3YXJkTGlzdC5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkhpc3RvcnlJdGVt
Lmg+Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
UGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSGlzdG9yeUl0
ZW07CkBAIC01Niw4ICs1NCw2IEBAIGV4dGVybiB2b2lkIFdLTm90aWZ5SGlzdG9yeUl0ZW1DaGFu
Z2VkKCkKIAogQGVuZAogCi1AaW50ZXJmYWNlIFdlYkJhY2tGb3J3YXJkTGlzdCAoV2ViUHJpdmF0
ZSkKK0BpbnRlcmZhY2UgV2ViQmFja0ZvcndhcmRMaXN0IChXZWJJbnRlcm5hbCkKIC0gKHZvaWQp
X2Nsb3NlOwogQGVuZAotCi0KSW5kZXg6IFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5UHJp
dmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5UHJpdmF0
ZS5oCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5UHJp
dmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDg4ICsyNiwyNyBAQAogICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQogI2ltcG9y
dCA8V2ViS2l0L1dlYkhpc3RvcnkuaD4KIAotQGNsYXNzIFdlYkhpc3RvcnlJdGVtOwotQGNsYXNz
IE5TRXJyb3I7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi10eXBlZGVmIGludDY0X3QgV2ViSGlzdG9y
eURhdGVLZXk7Ci10eXBlZGVmIEhhc2hNYXA8V2ViSGlzdG9yeURhdGVLZXksIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gPiBEYXRlVG9FbnRyaWVzTWFwOwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0
IERhdGVUb0VudHJpZXNNYXAgRGF0ZVRvRW50cmllc01hcDsKLSNlbmRpZgotCiAvKgogICAgIEBj
b25zdGFudCBXZWJIaXN0b3J5SXRlbXNEaXNjYXJkZWRXaGlsZUxvYWRpbmdOb3RpZmljYXRpb24g
UG9zdGVkIGZyb20gbG9hZEZyb21VUkw6ZXJyb3I6LiAgCiAgICAgVGhpcyBub3RpZmljYXRpb24g
Y29tZXMgd2l0aCBhIHVzZXJJbmZvIGRpY3Rpb25hcnkgdGhhdCBjb250YWlucyB0aGUgYXJyYXkg
b2YKLSAgICBpdGVtcyBkaXNjYXJkZWQgZHVlIHRvIHRoZSBkYXRlIGxpbWl0IG9yIGl0ZW0gbGlt
aXQuICBUaGUga2V5IGZvciB0aGUgYXJyYXkgaXMgV2ViSGlzdG9yeUl0ZW1zS2V5LgorICAgIGl0
ZW1zIGRpc2NhcmRlZCBkdWUgdG8gdGhlIGRhdGUgbGltaXQgb3IgaXRlbSBsaW1pdC4gVGhlIGtl
eSBmb3IgdGhlIGFycmF5IGlzIFdlYkhpc3RvcnlJdGVtc0tleS4KICovCi0vLyBGSVhNRTogVGhp
cyBub3RpZmljYXRpb24gc2hvdWxkIGJlY29tZSBBUEkgaW4gV2ViSGlzdG9yeS5oCisvLyBGSVhN
RTogVGhpcyBub3RpZmljYXRpb24gc2hvdWxkIGJlY29tZSBwdWJsaWMgQVBJLgogZXh0ZXJuIE5T
U3RyaW5nICpXZWJIaXN0b3J5SXRlbXNEaXNjYXJkZWRXaGlsZUxvYWRpbmdOb3RpZmljYXRpb247
CiAKLS8vIEZJWE1FOiBUaGUgV2ViSGlzdG9yeVByaXZhdGUgaW50ZXJmYWNlIHNob3VsZCBiZSBp
biBXZWJIaXN0b3J5SW50ZXJuYWwuaCBvciBpbnNpZGUgV2ViSGlzdG9yeS5tCi1AaW50ZXJmYWNl
IFdlYkhpc3RvcnlQcml2YXRlIDogTlNPYmplY3QgewotQHByaXZhdGUKLSAgICBOU011dGFibGVE
aWN0aW9uYXJ5ICpfZW50cmllc0J5VVJMOwotICAgIERhdGVUb0VudHJpZXNNYXAqIF9lbnRyaWVz
QnlEYXRlOwotICAgIE5TTXV0YWJsZUFycmF5ICpfb3JkZXJlZExhc3RWaXNpdGVkRGF5czsKLSAg
ICBCT09MIGl0ZW1MaW1pdFNldDsKLSAgICBpbnQgaXRlbUxpbWl0OwotICAgIEJPT0wgYWdlSW5E
YXlzTGltaXRTZXQ7Ci0gICAgaW50IGFnZUluRGF5c0xpbWl0OwotfQotCi0tICh2b2lkKWFkZEl0
ZW06KFdlYkhpc3RvcnlJdGVtICopZW50cnk7Ci0tICh2b2lkKWFkZEl0ZW1zOihOU0FycmF5ICop
bmV3RW50cmllczsKLS0gKEJPT0wpcmVtb3ZlSXRlbTooV2ViSGlzdG9yeUl0ZW0gKillbnRyeTsK
LS0gKEJPT0wpcmVtb3ZlSXRlbXM6KE5TQXJyYXkgKillbnRyaWVzOwotLSAoQk9PTClyZW1vdmVB
bGxJdGVtczsKLS0gKHZvaWQpc2V0TGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6KE5TVGltZUludGVy
dmFsKXRpbWUgZm9ySXRlbTooV2ViSGlzdG9yeUl0ZW0gKilpdGVtOwotCi0tIChOU0FycmF5ICop
b3JkZXJlZExhc3RWaXNpdGVkRGF5czsKLS0gKE5TQXJyYXkgKilvcmRlcmVkSXRlbXNMYXN0Vmlz
aXRlZE9uRGF5OihOU0NhbGVuZGFyRGF0ZSAqKWNhbGVuZGFyRGF0ZTsKLS0gKEJPT0wpY29udGFp
bnNJdGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmluZzsKLS0gKEJPT0wpY29udGFp
bnNVUkw6KE5TVVJMICopVVJMOwotLSAoV2ViSGlzdG9yeUl0ZW0gKilpdGVtRm9yVVJMOihOU1VS
TCAqKVVSTDsKLS0gKFdlYkhpc3RvcnlJdGVtICopaXRlbUZvclVSTFN0cmluZzooTlNTdHJpbmcg
KilVUkxTdHJpbmc7Ci0KLS0gKEJPT0wpbG9hZEZyb21VUkw6KE5TVVJMICopVVJMIGNvbGxlY3RE
aXNjYXJkZWRJdGVtc0ludG86KE5TTXV0YWJsZUFycmF5ICopZGlzY2FyZGVkSXRlbXMgZXJyb3I6
KE5TRXJyb3IgKiopZXJyb3I7Ci0tIChCT09MKXNhdmVUb1VSTDooTlNVUkwgKilVUkwgZXJyb3I6
KE5TRXJyb3IgKiopZXJyb3I7Ci0KLS0gKE5TQ2FsZW5kYXJEYXRlKilfYWdlTGltaXREYXRlOwot
Ci0tICh2b2lkKXNldEhpc3RvcnlJdGVtTGltaXQ6KGludClsaW1pdDsKLS0gKGludCloaXN0b3J5
SXRlbUxpbWl0OwotLSAodm9pZClzZXRIaXN0b3J5QWdlSW5EYXlzTGltaXQ6KGludClsaW1pdDsK
LS0gKGludCloaXN0b3J5QWdlSW5EYXlzTGltaXQ7Ci0KLUBlbmQKLQogQGludGVyZmFjZSBXZWJI
aXN0b3J5IChXZWJQcml2YXRlKQogCiAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBTUEkgaXMgdXNl
ZCBieSBTYWZhcmkuIFNob3VsZCBpdCBiZSBtYWRlIGludG8gcHVibGljIEFQST8KIC0gKFdlYkhp
c3RvcnlJdGVtICopX2l0ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5nICopVVJMU3RyaW5nOwogCi0v
LyBGSVhNRTogU2FmYXJpIGRvZXNuJ3QgdXNlIHRoZSBmb2xsb3dpbmcgU1BJLCBhbmQgaXQncyB1
c2VkIGluIFdlYktpdCBvbmx5IGluc2lkZSBXZWJIaXN0b3J5Lm0uCi0vLyBTaG91bGQgd2UgbW92
ZSBpdCBpbnRvIGEgRmlsZUludGVybmFsIGNhdGVnb3J5IGluc2lkZSBXZWJIaXN0b3J5Lm0sIG9y
IGRvIHdlIG5lZWQgaXQgZm9yIG90aGVyCi0vLyBjbGllbnRzPwotLSAodm9pZClyZW1vdmVJdGVt
OihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5OworLy8gRklYTUU6IG5laXRoZXIgU2FmYXJpIG5vciBX
ZWJLaXQgdXNlIHRoZSBmb2xsb3dpbmcgU1BJIC0tIGRvIHdlIHN0aWxsIG5lZWQgdGhlbT8KIC0g
KHZvaWQpYWRkSXRlbTooV2ViSGlzdG9yeUl0ZW0gKillbnRyeTsKLS0gKEJPT0wpY29udGFpbnNJ
dGVtRm9yVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmluZzsKLQotLy8gRklYTUU6IFNhZmFy
aSBkb2Vzbid0IHVzZSB0aGUgZm9sbG93aW5nIFNQSSwgYnV0IG90aGVyIFdlYktpdCBjbGFzc2Vz
IGRvLiBTaG91bGQgd2UgbW92ZSBpdCBpbnRvCi0vLyBhIFdlYkhpc3RvcnlJbnRlcm5hbC5oLCBv
ciBkbyB3ZSBuZWVkIGl0IGZvciBvdGhlciBjbGllbnRzPwogLSAoV2ViSGlzdG9yeUl0ZW0gKilh
ZGRJdGVtRm9yVVJMOihOU1VSTCAqKVVSTDsKLS8vIENoYW5nZSBkYXRlIG9uIGV4aXN0aW5nIGl0
ZW0KKy0gKE5TQ2FsZW5kYXJEYXRlICopYWdlTGltaXREYXRlOworLSAoQk9PTCljb250YWluc0l0
ZW1Gb3JVUkxTdHJpbmc6KE5TU3RyaW5nICopVVJMU3RyaW5nOworLSAodm9pZClyZW1vdmVJdGVt
OihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5OwogLSAodm9pZClzZXRMYXN0VmlzaXRlZFRpbWVJbnRl
cnZhbDooTlNUaW1lSW50ZXJ2YWwpdGltZSBmb3JJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWl0ZW07
CiAKLS8vIEZJWE1FOiBuZWl0aGVyIFNhZmFyaSBub3IgV2ViS2l0IHVzZSB0aGUgZm9sbG93aW5n
IFNQSSAtLSBkbyB3ZSBzdGlsbCBuZWVkIGl0PwotLSAoTlNDYWxlbmRhckRhdGUqKWFnZUxpbWl0
RGF0ZTsKLQogQGVuZApJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsOCBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OkZy
YW1lKiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBkYXRhYmFzZU5hbWUpOwogCisgICAgdmlydHVh
bCB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CisKICAgICB2aXJ0dWFsIHZvaWQgZGFzaGJv
YXJkUmVnaW9uc0NoYW5nZWQoKTsKIAogcHJpdmF0ZToKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw5ICszNSw5IEBACiAjaW1wb3J0ICJXZWJGcmFtZVZpZXcuaCIKICNpbXBvcnQgIldlYkhU
TUxWaWV3LmgiCiAjaW1wb3J0ICJXZWJIVE1MVmlld1ByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkhp
c3RvcnlJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1w
b3J0ICJXZWJOU1VSTFJlcXVlc3RFeHRyYXMuaCIKLSNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2lu
UHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oIgogI2ltcG9y
dCAiV2ViVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaCIKQEAg
LTQ5LDYgKzQ5LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3Qu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNj
cmVlbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVN0cmluZy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KQEAgLTQyNSw2ICs0MjYsMTEgQEAgdm9pZCBXZWJDaHJv
bWVDbGllbnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdQogICAgICAgICBDYWxsVUlEZWxlZ2F0ZShtX3dl
YlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmZyYW1lOmV4Y2VlZGVkRGF0YWJhc2VRdW90YUZvclNl
Y3VyaXR5T3JpZ2luOmRhdGFiYXNlOiksIGtpdChmcmFtZSksIHdlYk9yaWdpbiwgKE5TU3RyaW5n
ICopZGF0YWJhc2VOYW1lKTsKICAgICBbd2ViT3JpZ2luIHJlbGVhc2VdOwogfQorICAgIAordm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OnBvcHVsYXRlVmlzaXRlZExpbmtzKCkKK3sKKyAgICBbW1dlYkhp
c3Rvcnkgb3B0aW9uYWxTaGFyZWRIaXN0b3J5XSBfYWRkVmlzaXRlZExpbmtzVG9QYWdlR3JvdXA6
W21fd2ViVmlldyBwYWdlXS0+Z3JvdXAoKV07Cit9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpk
YXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpCiB7CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHJldmlzaW9uIDMwODE2KQorKysg
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsOCArNTEsNyBAQAogI2ltcG9ydCAiV2ViSFRNTFJlcHJlc2VudGF0aW9u
UHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViSFRNTFZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2Vi
SGlzdG9yeUl0ZW1JbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmgi
Ci0jaW1wb3J0ICJXZWJIaXN0b3J5UHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViSGlzdG9yeUludGVy
bmFsLmgiCiAjaW1wb3J0ICJXZWJJY29uRGF0YWJhc2VJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2Vi
S2l0RXJyb3JzUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgpAQCAtNzIzLDEw
ICs3MjIsOCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpmaW5hbFNldHVwRm9yCiB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5KGNvbnN0IEtVUkwmIHVy
bCkKIHsKICAgICBOU1VSTCAqY29jb2FVUkwgPSB1cmw7Ci0gICAgV2ViSGlzdG9yeUl0ZW0gKmVu
dHJ5ID0gW1tXZWJIaXN0b3J5IG9wdGlvbmFsU2hhcmVkSGlzdG9yeV0gYWRkSXRlbUZvclVSTDpj
b2NvYVVSTF07CiAgICAgY29uc3QgU3RyaW5nJiBwYWdlVGl0bGUgPSBjb3JlKG1fd2ViRnJhbWUu
Z2V0KCkpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKTsKLSAgICBpZiAoIXBh
Z2VUaXRsZS5pc0VtcHR5KCkpCi0gICAgICAgIFtlbnRyeSBzZXRUaXRsZTpwYWdlVGl0bGVdOwor
ICAgIFtbV2ViSGlzdG9yeSBvcHRpb25hbFNoYXJlZEhpc3RvcnldIF9hZGRJdGVtRm9yVVJMOmNv
Y29hVVJMIHRpdGxlOnBhZ2VUaXRsZV07CiB9CiAgCiBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpzaG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0CkluZGV4OiBX
ZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwko
cmV2aXNpb24gMzA4MTYpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDQ0IEBACisyMDA4LTAzLTA1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGZp
eCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUyNgorICAgICAgICAg
IFJFR1JFU1NJT046IGlmcmFtZXMgYXJlIGFkZGVkIHRvIFNhZmFyaSdzIEhpc3RvcnkgbWVudQor
ICAgICAgICAgIGJ5IHNlcGFyYXRpbmcgdGhlIHZpc2l0ZWQgbGluayBtYWNoaW5lcnkgZnJvbSBn
bG9iYWwgaGlzdG9yeQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6cG9wdWxhdGVWaXNpdGVkTGlua3MpOiBB
ZGRlZCBhIGNhbGwgdG8gdGhlIG5ldworICAgICAgICBXZWJIaXN0b3J5OjphZGRWaXNpdGVkTGlu
a3NUb1BhZ2VHcm91cCBmdW5jdGlvbi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaDogQWRkZWQgcG9wdWxhdGVWaXNpdGVkTGlua3MuCisgICAgICAgIEFsc28gZml4
ZWQgdGhlIHdlYlZpZXcgZnVuY3Rpb24gdG8gYmUgbm9uLXZpcnR1YWwuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9yeSk6IENoYW5nZWQgdG8gdXNlIHRoZQor
ICAgICAgICBuZXcgV2ViSGlzdG9yeTo6YWRkSXRlbSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkZy
YW1lTG9hZGVyQ2xpZW50Ojp3ZWJIaXN0b3J5KTogQ2hhbmdlZCB0byByZXR1cm4gYSBXZWJIaXN0
b3J5KiwKKyAgICAgICAgdGhlcmUncyBubyByZWFzb24gdG8gQWRkUmVmIHRoZSByZXN1bHQgZnJv
bSB0aGlzIGZ1bmN0aW9uLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50Lmg6IERpdHRvLgorCisgICAgICAgICogV2ViSGlzdG9yeS5jcHA6IFJlbW92ZWQgSVdl
Ykhpc3RvcnlQcml2YXRlIGFuZCBfV2ViQ29yZUhpc3RvcnlQcm92aWRlci4KKyAgICAgICAgKFdl
Ykhpc3Rvcnk6OlF1ZXJ5SW50ZXJmYWNlKTogUmVtb3ZlZCBJV2ViSGlzdG9yeVByaXZhdGUuCisg
ICAgICAgIChzaGFyZWRIaXN0b3J5U3RvcmFnZSk6IEFkZGVkLgorICAgICAgICAoV2ViSGlzdG9y
eTo6c2hhcmVkSGlzdG9yeSk6IEFkZGVkLgorICAgICAgICAoV2ViSGlzdG9yeTo6b3B0aW9uYWxT
aGFyZWRIaXN0b3J5KTogQ2hhbmdlZCB0byB1c2Ugc2hhcmVkSGlzdG9yeSgpLgorICAgICAgICAo
V2ViSGlzdG9yeTo6c2V0T3B0aW9uYWxTaGFyZWRIaXN0b3J5KTogQ2hhbmdlZCB0byByZXF1aXJl
IGEgV2ViSGlzdG9yeQorICAgICAgICBvYmplY3QsIG5vdCBqdXN0IGFuIElXZWJIaXN0b3J5Lgor
ICAgICAgICAoV2ViSGlzdG9yeTo6cmVtb3ZlQWxsSXRlbXMpOiBDYWxsIFBhZ2VHcm91cDo6cmVt
b3ZlQWxsVmlzaXRlZExpbmtzLgorICAgICAgICAoV2ViSGlzdG9yeTo6YWRkSXRlbSk6IENoYW5n
ZWQgcGFyYW1ldGVyIHR5cGVzIHNpbmNlIHRoaXMgaXMgY2FsbGVkIHdpdGgKKyAgICAgICAgYXJn
dW1lbnRzIGZyb20gV2ViQ29yZSAtLSBhdCBzb21lIHBvaW50IHRoaXMgY291bGQgYWxsb3cgYmV0
dGVyIGVmZmljaWVuY3kuCisgICAgICAgIChXZWJIaXN0b3J5OjpyZW1vdmVJdGVtRm9yVVJMU3Ry
aW5nKTogIENhbGwgUGFnZUdyb3VwOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MKKyAgICAgICAgaWYg
dGhlIGxhc3QgVVJMIGlzIGJlaW5nIHJlbW92ZWQuCisgICAgICAgIChhZGRWaXNpdGVkTGlua1Rv
UGFnZUdyb3VwKTogQWRkZWQuIEhlbHBlci4gQWRkcyBhIHNpbmdsZSBsaW5rIHRvIGEgZ3JvdXAn
cworICAgICAgICB2aXNpdGVkIGxpbmsgc2V0LgorICAgICAgICAoV2ViSGlzdG9yeTo6YWRkVmlz
aXRlZExpbmtzVG9QYWdlR3JvdXApOiBBZGRlZC4gQWRkcyBhbGwgbGlua3MgdG8gYSBncm91cCdz
CisgICAgICAgIHZpc2l0ZWQgbGluay4KKyAgICAgICAgKiBXZWJIaXN0b3J5Lmg6IFJlbW92ZWQg
SVdlYkhpc3RvcnlQcml2YXRlLiBSZW1vdmVkIG9wdGlvbmFsU2hhcmVkSGlzdG9yeUludGVybmFs
CisgICAgICAgIGFuZCBhZGRlZCBzaGFyZWRIaXN0b3J5LiBSZXBsYWNlZCBhZGRJdGVtRm9yVVJM
IGFuZCBjb250YWluc0l0ZW1Gb3JVUkxTdHJpbmcgd2l0aAorICAgICAgICBub24tdmlydHVhbCBh
ZGRJdGVtIGFuZCBhZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cCBmdW5jdGlvbnMuCisKIDIwMDgt
MDMtMDUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBC
dWlsZCBmaXguCkluZGV4OiBXZWJLaXQvd2luL1dlYkhpc3RvcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAJKHJldmlzaW9uIDMwODE2KQorKysgV2ViS2l0L3dp
bi9XZWJIaXN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMzAgKzM1LDE5IEBACiAjaW5j
bHVkZSAiV2ViTm90aWZpY2F0aW9uQ2VudGVyLmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMu
aCIKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvV2ViQ29yZUhpc3RvcnkuaD4KICNwcmFnbWEgd2FybmluZyggcHVzaCwgMCApCiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvS1VSTC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAjcHJhZ21hIHdhcm5pbmcoIHBvcCApCiAKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCiBDRlN0cmluZ1JlZiBEYXRlc0FycmF5S2V5ID0gQ0ZTVFIo
IldlYkhpc3RvcnlEYXRlcyIpOwogQ0ZTdHJpbmdSZWYgRmlsZVZlcnNpb25LZXkgPSBDRlNUUigi
V2ViSGlzdG9yeUZpbGVWZXJzaW9uIik7CiAKLWNvbnN0IElJRCBJSURfSVdlYkhpc3RvcnlQcml2
YXRlID0geyAweDNkZTA0ZTU5LCAweDkzZjksIDB4NDM2OSwgeyAweDhiLCAweDQzLCAweDk3LCAw
eDY0LCAweDU4LCAweGQ3LCAweGUzLCAweDE5IH0gfTsKLQogI2RlZmluZSBjdXJyZW50RmlsZVZl
cnNpb24gMQogCi1jbGFzcyBfV2ViQ29yZUhpc3RvcnlQcm92aWRlciA6IHB1YmxpYyBXZWJDb3Jl
OjpXZWJDb3JlSGlzdG9yeVByb3ZpZGVyIHsKLXB1YmxpYzoKLSAgICBfV2ViQ29yZUhpc3RvcnlQ
cm92aWRlcihJV2ViSGlzdG9yeSogaGlzdG9yeSk7Ci0gICAgfl9XZWJDb3JlSGlzdG9yeVByb3Zp
ZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNVUkwoY29uc3QgVUNoYXIqIHVuaWNv
ZGUsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLXByaXZhdGU6Ci0gICAgSVdlYkhpc3RvcnkqIG1faGlz
dG9yeTsKLSAgICBJV2ViSGlzdG9yeVByaXZhdGUqIG1faGlzdG9yeVByaXZhdGU7Ci19OwotCiBz
dGF0aWMgYm9vbCBhcmVFcXVhbE9yQ2xvc2UoZG91YmxlIGQxLCBkb3VibGUgZDIpCiB7CiAgICAg
ZG91YmxlIGRpZmYgPSBkMS1kMjsKQEAgLTk3LDggKzg2LDYgQEAgc3RhdGljIHZvaWQgcmVsZWFz
ZVVzZXJJbmZvKENGRGljdGlvbmFyeQogCiAvLyBXZWJIaXN0b3J5IC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlXZWJI
aXN0b3J5KiBXZWJIaXN0b3J5OjptX29wdGlvbmFsU2hhcmVkSGlzdG9yeSA9IDA7Ci0KIFdlYkhp
c3Rvcnk6OldlYkhpc3RvcnkoKQogOiBtX3JlZkNvdW50KDApCiAsIG1fcHJlZmVyZW5jZXMoMCkK
QEAgLTE1OSw4ICsxNDYsNiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkhpc3Rvcnk6
OlF1CiAgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViSGlzdG9yeSo+KHRoaXMp
OwogICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JV2ViSGlzdG9yeSkpCiAgICAg
ICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViSGlzdG9yeSo+KHRoaXMpOwotICAgIGVs
c2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JV2ViSGlzdG9yeVByaXZhdGUpKQotICAgICAg
ICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYkhpc3RvcnlQcml2YXRlKj4odGhpcyk7CiAg
ICAgZWxzZQogICAgICAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKIApAQCAtMTg0LDMyICsxNjks
MzAgQEAgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSGlzdG9yeTo6UmVsZQogCiAvLyBJV2Vi
SGlzdG9yeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKK3N0YXRpYyBpbmxpbmUgQ09NUHRyPFdlYkhpc3Rvcnk+JiBzaGFy
ZWRIaXN0b3J5U3RvcmFnZSgpCit7CisgICAgc3RhdGljIENPTVB0cjxXZWJIaXN0b3J5PiBzaGFy
ZWRIaXN0b3J5OworICAgIHJldHVybiBzaGFyZWRIaXN0b3J5OworfQorCitXZWJIaXN0b3J5KiBX
ZWJIaXN0b3J5OjpzaGFyZWRIaXN0b3J5KCkKK3sKKyAgICByZXR1cm4gc2hhcmVkSGlzdG9yeVN0
b3JhZ2UoKS5nZXQoKTsKK30KKwogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJIaXN0b3J5
OjpvcHRpb25hbFNoYXJlZEhpc3RvcnkoIAogICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSVdlYkhp
c3RvcnkqKiBoaXN0b3J5KQogewotICAgICpoaXN0b3J5ID0gbV9vcHRpb25hbFNoYXJlZEhpc3Rv
cnk7Ci0gICAgaWYgKG1fb3B0aW9uYWxTaGFyZWRIaXN0b3J5KQotICAgICAgICBtX29wdGlvbmFs
U2hhcmVkSGlzdG9yeS0+QWRkUmVmKCk7Ci0KKyAgICAqaGlzdG9yeSA9IHNoYXJlZEhpc3Rvcnko
KTsKKyAgICBpZiAoKmhpc3RvcnkpCisgICAgICAgICgqaGlzdG9yeSktPkFkZFJlZigpOwogICAg
IHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkhpc3Rvcnk6
OnNldE9wdGlvbmFsU2hhcmVkSGlzdG9yeSggCiAgICAgLyogW2luXSAqLyBJV2ViSGlzdG9yeSog
aGlzdG9yeSkKIHsKLSAgICBpZiAobV9vcHRpb25hbFNoYXJlZEhpc3RvcnkpIHsKLSAgICAgICAg
bV9vcHRpb25hbFNoYXJlZEhpc3RvcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbV9vcHRpb25hbFNo
YXJlZEhpc3RvcnkgPSAwOyAgICAgICAgCi0gICAgfQotCi0gICAgX1dlYkNvcmVIaXN0b3J5UHJv
dmlkZXIqIGNvcmVIaXN0b3J5ID0gMDsKLSAgICBtX29wdGlvbmFsU2hhcmVkSGlzdG9yeSA9IGhp
c3Rvcnk7Ci0gICAgaWYgKGhpc3RvcnkpIHsKLSAgICAgICAgaGlzdG9yeS0+QWRkUmVmKCk7Ci0g
ICAgICAgIGNvcmVIaXN0b3J5ID0gbmV3IF9XZWJDb3JlSGlzdG9yeVByb3ZpZGVyKGhpc3Rvcnkp
OwotICAgIH0KLSAgICBXZWJDb3JlOjpXZWJDb3JlSGlzdG9yeTo6c2V0SGlzdG9yeVByb3ZpZGVy
KGNvcmVIaXN0b3J5KTsKLQorICAgIHNoYXJlZEhpc3RvcnlTdG9yYWdlKCkucXVlcnkoaGlzdG9y
eSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTQ2Nyw2ICs0NTAsOCBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYkhpc3Rvcnk6OnJlCiAgICAgQ0ZBcnJheVJlbW92ZUFsbFZhbHVl
cyhtX2RhdGVzV2l0aEVudHJpZXMuZ2V0KCkpOwogICAgIENGRGljdGlvbmFyeVJlbW92ZUFsbFZh
bHVlcyhtX2VudHJpZXNCeVVSTC5nZXQoKSk7CiAKKyAgICBQYWdlR3JvdXA6OnJlbW92ZUFsbFZp
c2l0ZWRMaW5rcygpOworCiAgICAgcmV0dXJuIHBvc3ROb3RpZmljYXRpb24oa1dlYkhpc3RvcnlB
bGxJdGVtc1JlbW92ZWROb3RpZmljYXRpb24pOwogfQogCkBAIC02NDYsMjcgKzYzMSwyNyBAQCBI
UkVTVUxUIFdlYkhpc3Rvcnk6OmFkZEl0ZW0oSVdlYkhpc3RvcnlJCiAgICAgcmV0dXJuIGhyOwog
fQogCi1IUkVTVUxUIFdlYkhpc3Rvcnk6OmFkZEl0ZW1Gb3JVUkwoQlNUUiB1cmwsIEJTVFIgdGl0
bGUpCit2b2lkIFdlYkhpc3Rvcnk6OmFkZEl0ZW0oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHRpdGxlKQogewogICAgIENPTVB0cjxXZWJIaXN0b3J5SXRlbT4gaXRlbShBZG9wdENPTSwg
V2ViSGlzdG9yeUl0ZW06OmNyZWF0ZUluc3RhbmNlKCkpOwogICAgIGlmICghaXRlbSkKLSAgICAg
ICAgcmV0dXJuIEVfRkFJTDsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgU1lTVEVNVElNRSBjdXJy
ZW50VGltZTsKICAgICBHZXRTeXN0ZW1UaW1lKCZjdXJyZW50VGltZSk7CiAgICAgREFURSBsYXN0
VmlzaXRlZDsKICAgICBpZiAoIVN5c3RlbVRpbWVUb1ZhcmlhbnRUaW1lKCZjdXJyZW50VGltZSwg
Jmxhc3RWaXNpdGVkKSkKLSAgICAgICAgcmV0dXJuIEVfRkFJTDsKKyAgICAgICAgcmV0dXJuOwog
Ci0gICAgSFJFU1VMVCBociA9IGl0ZW0tPmluaXRXaXRoVVJMU3RyaW5nKHVybCwgdGl0bGUsIDAp
OworICAgIEhSRVNVTFQgaHIgPSBpdGVtLT5pbml0V2l0aFVSTFN0cmluZyhCU3RyaW5nKHVybC5z
dHJpbmcoKSksIEJTdHJpbmcodGl0bGUpLCAwKTsKICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuIGhyOworICAgICAgICByZXR1cm47CiAKICAgICBociA9IGl0ZW0tPnNldExhc3RW
aXNpdGVkVGltZUludGVydmFsKGxhc3RWaXNpdGVkKTsgLy8gYWxzbyBpbmNyZW1lbnRzIHZpc2l0
ZWRDb3VudAogICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7CisgICAgICAg
IHJldHVybjsKIAotICAgIHJldHVybiBhZGRJdGVtKGl0ZW0uZ2V0KCkpOworICAgIGFkZEl0ZW0o
aXRlbS5nZXQoKSk7CiB9CiAKIEhSRVNVTFQgV2ViSGlzdG9yeTo6aXRlbUZvclVSTFN0cmluZygK
QEAgLTY5NCwyMiArNjc5LDYgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJIaXN0b3J5
OjppdAogICAgIHJldHVybiBpdGVtRm9yVVJMU3RyaW5nKHVybFN0cmluZy5nZXQoKSwgaXRlbSk7
CiB9CiAKLUhSRVNVTFQgV2ViSGlzdG9yeTo6Y29udGFpbnNJdGVtRm9yVVJMU3RyaW5nKAotICAg
IC8qIFtpbl0gKi8gdm9pZCogdXJsQ0ZTdHJpbmcsCi0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBC
T09MKiBjb250YWlucykKLXsKLSAgICBJV2ViSGlzdG9yeUl0ZW0qIGl0ZW0gPSAwOwotICAgIEhS
RVNVTFQgaHI7Ci0gICAgaWYgKFNVQ0NFRURFRChociA9IGl0ZW1Gb3JVUkxTdHJpbmcoKENGU3Ry
aW5nUmVmKXVybENGU3RyaW5nLCAmaXRlbSkpKSB7Ci0gICAgICAgICpjb250YWlucyA9IFRSVUU7
Ci0gICAgICAgIC8vIGl0ZW1Gb3JVUkxTdHJpbmcgcmVmcyB0aGUgcmV0dXJuZWQgaXRlbSwgc28g
d2UgbmVlZCB0byBiYWxhbmNlIHRoYXQgCi0gICAgICAgIGl0ZW0tPlJlbGVhc2UoKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgKmNvbnRhaW5zID0gRkFMU0U7Ci0KLSAgICByZXR1cm4gaHI7Ci19Ci0K
IEhSRVNVTFQgV2ViSGlzdG9yeTo6cmVtb3ZlSXRlbUZvclVSTFN0cmluZyhDRlN0cmluZ1JlZiB1
cmxTdHJpbmcpCiB7CiAgICAgSVdlYkhpc3RvcnlJdGVtKiBlbnRyeSA9IChJV2ViSGlzdG9yeUl0
ZW0qKSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2VudHJpZXNCeVVSTC5nZXQoKSwgdXJsU3RyaW5n
KTsKQEAgLTcxOSw2ICs2ODgsOSBAQCBIUkVTVUxUIFdlYkhpc3Rvcnk6OnJlbW92ZUl0ZW1Gb3JV
UkxTdHJpCiAgICAgSFJFU1VMVCBociA9IHJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlcyhlbnRyeSk7
CiAgICAgQ0ZEaWN0aW9uYXJ5UmVtb3ZlVmFsdWUobV9lbnRyaWVzQnlVUkwuZ2V0KCksIHVybFN0
cmluZyk7CiAKKyAgICBpZiAoIUNGRGljdGlvbmFyeUdldENvdW50KG1fZW50cmllc0J5VVJMLmdl
dCgpKSkKKyAgICAgICAgUGFnZUdyb3VwOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsKKwogICAg
IHJldHVybiBocjsKIH0KIApAQCAtODU2LDEwMSArODI4LDIzIEBAIEhSRVNVTFQgV2ViSGlzdG9y
eTo6YWdlTGltaXREYXRlKENGQWJzb2wKICAgICByZXR1cm4gU19PSzsKIH0KIAotSVdlYkhpc3Rv
cnlQcml2YXRlKiBXZWJIaXN0b3J5OjpvcHRpb25hbFNoYXJlZEhpc3RvcnlJbnRlcm5hbCgpCi17
Ci0gICAgaWYgKCFtX29wdGlvbmFsU2hhcmVkSGlzdG9yeSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBJV2ViSGlzdG9yeVByaXZhdGUqIGhpc3RvcnlQcml2YXRlOwotICAgIGlmIChGQUlMRUQo
bV9vcHRpb25hbFNoYXJlZEhpc3RvcnktPlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2ViSGlzdG9yeVBy
aXZhdGUsICh2b2lkKiopJmhpc3RvcnlQcml2YXRlKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgaGlzdG9yeVByaXZhdGUtPlJlbGVhc2UoKTsgLy8gZG9uJ3QgYWRkIGFuIGFkZGl0aW9uYWwg
cmVmIGZvciB0aGlzIGludGVybmFsIGNhbGwKLSAgICByZXR1cm4gaGlzdG9yeVByaXZhdGU7Ci19
Ci0KLS8vIF9XZWJDb3JlSGlzdG9yeVByb3ZpZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotX1dlYkNvcmVIaXN0b3J5
UHJvdmlkZXI6Ol9XZWJDb3JlSGlzdG9yeVByb3ZpZGVyKElXZWJIaXN0b3J5KiBoaXN0b3J5KQot
ICAgIDogbV9oaXN0b3J5KGhpc3RvcnkpCi0gICAgLCBtX2hpc3RvcnlQcml2YXRlKDApCitzdGF0
aWMgdm9pZCBhZGRWaXNpdGVkTGlua1RvUGFnZUdyb3VwKGNvbnN0IHZvaWQqIGtleSwgY29uc3Qg
dm9pZCosIHZvaWQqIGNvbnRleHQpCiB7Ci19CisgICAgQ0ZTdHJpbmdSZWYgdXJsID0gc3RhdGlj
X2Nhc3Q8Q0ZTdHJpbmdSZWY+KGtleSk7CisgICAgUGFnZUdyb3VwKiBncm91cCA9IHN0YXRpY19j
YXN0PFBhZ2VHcm91cCo+KGNvbnRleHQpOwogCi1fV2ViQ29yZUhpc3RvcnlQcm92aWRlcjo6fl9X
ZWJDb3JlSGlzdG9yeVByb3ZpZGVyKCkKLXsKLX0KLQotc3RhdGljIGlubGluZSBib29sIG1hdGNo
TGV0dGVyKGNoYXIgYywgY2hhciBsb3dlcmNhc2VMZXR0ZXIpCi17Ci0gICAgcmV0dXJuIChjIHwg
MHgyMCkgPT0gbG93ZXJjYXNlTGV0dGVyOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hV
bmljb2RlTGV0dGVyKFVuaUNoYXIgYywgVW5pQ2hhciBsb3dlcmNhc2VMZXR0ZXIpCi17Ci0gICAg
cmV0dXJuIChjIHwgMHgyMCkgPT0gbG93ZXJjYXNlTGV0dGVyOworICAgIENGSW5kZXggbGVuZ3Ro
ID0gQ0ZTdHJpbmdHZXRMZW5ndGgodXJsKTsKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihDRlN0cmluZ0dldENoYXJhY3RlcnNQdHIo
dXJsKSk7CisgICAgaWYgKGNoYXJhY3RlcnMpCisgICAgICAgIGdyb3VwLT5hZGRWaXNpdGVkTGlu
ayhjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIGVsc2UgeworICAgICAgICBWZWN0b3I8VUNoYXIs
IDUxMj4gYnVmZmVyKGxlbmd0aCk7CisgICAgICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyh1cmws
IENGUmFuZ2VNYWtlKDAsIGxlbmd0aCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZl
ci5kYXRhKCkpKTsKKyAgICAgICAgZ3JvdXAtPmFkZFZpc2l0ZWRMaW5rKGJ1ZmZlci5kYXRhKCks
IGxlbmd0aCk7CisgICAgfQogfQogCi1ib29sIF9XZWJDb3JlSGlzdG9yeVByb3ZpZGVyOjpjb250
YWluc1VSTChjb25zdCBVQ2hhciogdW5pY29kZSwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBXZWJI
aXN0b3J5OjphZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cChQYWdlR3JvdXAmIGdyb3VwKQogewot
ICAgIGNvbnN0IGludCBidWZmZXJTaXplID0gMTAyNDsKLSAgICBjb25zdCBVQ2hhciAqdW5pY29k
ZVN0ciA9IHVuaWNvZGU7Ci0gICAgVUNoYXIgc3RhdGljU3RyQnVmZmVyW2J1ZmZlclNpemVdOwot
ICAgIFVDaGFyICpzdHJCdWZmZXIgPSAwOwotICAgIGJvb2wgbmVlZFRvQWRkU2xhc2ggPSBmYWxz
ZTsKLQotICAgIGlmIChsZW5ndGggPj0gNiAmJgotICAgICAgICBtYXRjaFVuaWNvZGVMZXR0ZXIo
dW5pY29kZVswXSwgJ2gnKSAmJgotICAgICAgICBtYXRjaFVuaWNvZGVMZXR0ZXIodW5pY29kZVsx
XSwgJ3QnKSAmJgotICAgICAgICBtYXRjaFVuaWNvZGVMZXR0ZXIodW5pY29kZVsyXSwgJ3QnKSAm
JgotICAgICAgICBtYXRjaFVuaWNvZGVMZXR0ZXIodW5pY29kZVszXSwgJ3AnKSAmJgotICAgICAg
ICAodW5pY29kZVs0XSA9PSAnOicgCi0gICAgICAgIHx8IChtYXRjaFVuaWNvZGVMZXR0ZXIodW5p
Y29kZVs0XSwgJ3MnKSAmJiB1bmljb2RlWzVdID09ICc6JykpKSB7Ci0KLSAgICAgICAgICAgIHVu
c2lnbmVkIHBvcyA9IHVuaWNvZGVbNF0gPT0gJzonID8gNSA6IDY7Ci0KLSAgICAgICAgICAgIC8v
IHNraXAgcG9zc2libGUgaW5pdGlhbCB0d28gc2xhc2hlcwotICAgICAgICAgICAgaWYgKHBvcyAr
IDEgPCBsZW5ndGggJiYgdW5pY29kZVtwb3NdID09ICcvJyAmJiB1bmljb2RlW3BvcyArIDFdID09
ICcvJykKLSAgICAgICAgICAgICAgICBwb3MgKz0gMjsKLQotICAgICAgICAgICAgd2hpbGUgKHBv
cyA8IGxlbmd0aCAmJiB1bmljb2RlW3Bvc10gIT0gJy8nKQotICAgICAgICAgICAgICAgIHBvcysr
OwotCi0gICAgICAgICAgICBpZiAocG9zID09IGxlbmd0aCkKLSAgICAgICAgICAgICAgICBuZWVk
VG9BZGRTbGFzaCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG5lZWRUb0FkZFNsYXNoKSB7Ci0g
ICAgICAgIGlmIChsZW5ndGggKyAxIDw9IGJ1ZmZlclNpemUpCi0gICAgICAgICAgICBzdHJCdWZm
ZXIgPSBzdGF0aWNTdHJCdWZmZXI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0ckJ1ZmZl
ciA9IChVQ2hhciopbWFsbG9jKHNpemVvZihVQ2hhcikgKiAobGVuZ3RoICsgMSkpOwotICAgICAg
ICBtZW1jcHkoc3RyQnVmZmVyLCB1bmljb2RlLCAyICogbGVuZ3RoKTsKLSAgICAgICAgc3RyQnVm
ZmVyW2xlbmd0aF0gPSAnLyc7Ci0gICAgICAgIGxlbmd0aCsrOwotCi0gICAgICAgIHVuaWNvZGVT
dHIgPSBzdHJCdWZmZXI7Ci0gICAgfQotCi0gICAgaWYgKCFtX2hpc3RvcnlQcml2YXRlKSB7Ci0g
ICAgICAgIGlmIChTVUNDRUVERUQobV9oaXN0b3J5LT5RdWVyeUludGVyZmFjZShJSURfSVdlYkhp
c3RvcnlQcml2YXRlLCAodm9pZCoqKSZtX2hpc3RvcnlQcml2YXRlKSkpIHsKLSAgICAgICAgICAg
IC8vIGRvbid0IGhvbGQgYSByZWYgLSB3ZSdyZSBvd25lZCBieSBJV2ViSGlzdG9yeS9JV2ViSGlz
dG9yeVByaXZhdGUKLSAgICAgICAgICAgIG1faGlzdG9yeVByaXZhdGUtPlJlbGVhc2UoKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzdHJCdWZmZXIgIT0gc3RhdGljU3RyQnVm
ZmVyKQotICAgICAgICAgICAgICAgIGZyZWUoc3RyQnVmZmVyKTsKLSAgICAgICAgICAgIG1faGlz
dG9yeVByaXZhdGUgPSAwOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgQ0ZTdHJpbmdSZWYgc3RyID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
c05vQ29weShOVUxMLCAoY29uc3QgVW5pQ2hhciopdW5pY29kZVN0ciwgbGVuZ3RoLCBrQ0ZBbGxv
Y2F0b3JOdWxsKTsKLSAgICBCT09MIHJlc3VsdCA9IEZBTFNFOwotICAgIG1faGlzdG9yeVByaXZh
dGUtPmNvbnRhaW5zSXRlbUZvclVSTFN0cmluZygodm9pZCopc3RyLCAmcmVzdWx0KTsKLSAgICBD
RlJlbGVhc2Uoc3RyKTsKLQotICAgIGlmIChzdHJCdWZmZXIgIT0gc3RhdGljU3RyQnVmZmVyKQot
ICAgICAgICBmcmVlKHN0ckJ1ZmZlcik7Ci0KLSAgICByZXR1cm4gISFyZXN1bHQ7CisgICAgQ0ZE
aWN0aW9uYXJ5QXBwbHlGdW5jdGlvbihtX2VudHJpZXNCeVVSTC5nZXQoKSwgYWRkVmlzaXRlZExp
bmtUb1BhZ2VHcm91cCwgJmdyb3VwKTsKIH0KSW5kZXg6IFdlYktpdC93aW4vV2ViSGlzdG9yeS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViSGlzdG9yeS5oCShyZXZpc2lvbiAzMDgxNikK
KysrIFdlYktpdC93aW4vV2ViSGlzdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzIsMzEgKzMyLDIwIEBACiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24u
aD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotLy8gezNERTA0RTU5LTkzRjktNDM2OS04QjQzLTk3NjQ1OEQ3RTMxOX0KLURFRklORV9HVUlE
KElJRF9JV2ViSGlzdG9yeVByaXZhdGUsIDB4M2RlMDRlNTksIDB4OTNmOSwgMHg0MzY5LCAweDhi
LCAweDQzLCAweDk3LCAweDY0LCAweDU4LCAweGQ3LCAweGUzLCAweDE5KTsKLQotaW50ZXJmYWNl
IElXZWJIaXN0b3J5UHJpdmF0ZSA6IHB1YmxpYyBJVW5rbm93bgotewotcHVibGljOgotICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBhZGRJdGVtRm9yVVJMKAotICAgICAgICAv
KiBbaW5dICovIEJTVFIgdXJsLAotICAgICAgICAvKiBbaW5dICovIEJTVFIgdGl0bGUpID0gMDsK
LSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgY29udGFpbnNJdGVtRm9yVVJM
U3RyaW5nKAotICAgICAgICAvKiBbaW5dICovIHZvaWQqIHVybENGU3RyaW5nLAotICAgICAgICAv
KiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIGNvbnRhaW5zKSA9IDA7Ci19OworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGFnZUdyb3VwOworICAgIGNsYXNz
IFN0cmluZzsKK30KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjbGFzcyBXZWJQcmVmZXJl
bmNlczsKIAotY2xhc3MgV2ViSGlzdG9yeSA6IHB1YmxpYyBJV2ViSGlzdG9yeSwgSVdlYkhpc3Rv
cnlQcml2YXRlCi17CitjbGFzcyBXZWJIaXN0b3J5IDogcHVibGljIElXZWJIaXN0b3J5IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgV2ViSGlzdG9yeSogY3JlYXRlSW5zdGFuY2UoKTsKLXByb3RlY3Rl
ZDoKK3ByaXZhdGU6CiAgICAgV2ViSGlzdG9yeSgpOwogICAgIH5XZWJIaXN0b3J5KCk7CiAKQEAg
LTExOSwxMSArMTA4LDExIEBAIHB1YmxpYzoKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBp
bnQqIGxpbWl0KTsKIAogICAgIC8vIFdlYkhpc3RvcnkKLSAgICBzdGF0aWMgSVdlYkhpc3RvcnlQ
cml2YXRlKiBvcHRpb25hbFNoYXJlZEhpc3RvcnlJbnRlcm5hbCgpOwotICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBhZGRJdGVtRm9yVVJMKEJTVFIgdXJsLCBCU1RSIHRpdGxl
KTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgY29udGFpbnNJdGVtRm9y
VVJMU3RyaW5nKHZvaWQqIHVybENGU3RyaW5nLCBCT09MKiBjb250YWlucyk7CisgICAgc3RhdGlj
IFdlYkhpc3RvcnkqIHNoYXJlZEhpc3RvcnkoKTsKKyAgICB2b2lkIGFkZEl0ZW0oY29uc3QgV2Vi
Q29yZTo6S1VSTCYsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOworICAgIHZvaWQgYWRkVmlzaXRl
ZExpbmtzVG9QYWdlR3JvdXAoV2ViQ29yZTo6UGFnZUdyb3VwJik7CiAKLXByb3RlY3RlZDoKK3By
aXZhdGU6CiAgICAgZW51bSBOb3RpZmljYXRpb25UeXBlCiAgICAgewogICAgICAgICBrV2ViSGlz
dG9yeUl0ZW1zQWRkZWROb3RpZmljYXRpb24gPSAwLApAQCAtMTUwLDEzICsxMzksMTEgQEAgcHJv
dGVjdGVkOgogICAgIEJTVFIgZ2V0Tm90aWZpY2F0aW9uU3RyaW5nKE5vdGlmaWNhdGlvblR5cGUg
bm90aWZ5VHlwZSk7CiAgICAgSFJFU1VMVCBpdGVtRm9yVVJMU3RyaW5nKENGU3RyaW5nUmVmIHVy
bFN0cmluZywgSVdlYkhpc3RvcnlJdGVtKiogaXRlbSk7CiAKLXByb3RlY3RlZDoKICAgICBVTE9O
RyBtX3JlZkNvdW50OwogICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBtX2Vu
dHJpZXNCeVVSTDsKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IG1fZGF0ZXNXaXRo
RW50cmllczsKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IG1fZW50cmllc0J5RGF0
ZTsKICAgICBDT01QdHI8V2ViUHJlZmVyZW5jZXM+IG1fcHJlZmVyZW5jZXM7Ci0gICAgc3RhdGlj
IElXZWJIaXN0b3J5KiBtX29wdGlvbmFsU2hhcmVkSGlzdG9yeTsKIH07CiAKICNlbmRpZgpJbmRl
eDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2
aXNpb24gMzA4MTYpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlICJXZWJFbGVtZW50UHJvcGVydHlCYWcuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2lu
Y2x1ZGUgIldlYkhpc3RvcnkuaCIKICNpbmNsdWRlICJXZWJNdXRhYmxlVVJMUmVxdWVzdC5oIgog
I2luY2x1ZGUgIldlYlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiV2ViVmlldy5oIgpAQCAt
MzcsNiArMzgsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd0Zl
YXR1cmVzLmg+CiAjcHJhZ21hIHdhcm5pbmcocG9wKQogCkBAIC00OTYsNiArNDk4LDExIEBAIHZv
aWQgV2ViQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXUKICAgICB9CiB9CiAKK3ZvaWQg
V2ViQ2hyb21lQ2xpZW50Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpCit7CisgICAgV2ViSGlzdG9y
eTo6c2hhcmVkSGlzdG9yeSgpLT5hZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cChtX3dlYlZpZXct
PnBhZ2UoKS0+Z3JvdXAoKSk7Cit9CisKIENPTVB0cjxJV2ViVUlEZWxlZ2F0ZT4gV2ViQ2hyb21l
Q2xpZW50Ojp1aURlbGVnYXRlKCkKIHsKICAgICBDT01QdHI8SVdlYlVJRGVsZWdhdGU+IGRlbGVn
YXRlOwpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
CShyZXZpc2lvbiAzMDgxNikKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsOSBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OkZyYW1lKiwgY29u
c3QgV2ViQ29yZTo6U3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIFdlYlZpZXcqIHdlYlZpZXcoKSBj
b25zdCB7IHJldHVybiBtX3dlYlZpZXc7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVWaXNp
dGVkTGlua3MoKTsKKworICAgIFdlYlZpZXcqIHdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3dl
YlZpZXc7IH0KIAogcHJpdmF0ZToKICAgICBDT01QdHI8SVdlYlVJRGVsZWdhdGU+IHVpRGVsZWdh
dGUoKTsKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1
Niw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5QYWNrYWdlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9QbHVnaW5WaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJQYXJ0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI3ByYWdtYSB3YXJuaW5nKHBvcCkKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00MjgsMTAgKzQyOSw3IEBAIHZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGkKIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6dXBkYXRlR2xvYmFsSGlzdG9yeShjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgQ09NUHRyPFdl
Ykhpc3Rvcnk+IGhpc3RvcnkgPSB3ZWJIaXN0b3J5KCk7Ci0gICAgaWYgKCFoaXN0b3J5KQotICAg
ICAgICByZXR1cm47Ci0gICAgaGlzdG9yeS0+YWRkSXRlbUZvclVSTChCU3RyaW5nKHVybC5zdHJp
bmcoKSksIDApOyAgICAgICAgICAgICAgICAgCisgICAgV2ViSGlzdG9yeTo6c2hhcmVkSGlzdG9y
eSgpLT5hZGRJdGVtKHVybCwgY29yZShtX3dlYkZyYW1lKS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCktPnRpdGxlKCkpOyAgICAgICAgICAgICAgICAgCiB9CiAKIGJvb2wgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OnNob3VsZEdvVG9IaXN0b3J5SXRlbShIaXN0b3J5SXRlbSopIGNvbnN0CkBAIC02
OTcsMTQgKzY5NSwxMCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFU
CiAgICAgbV9wbHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHBsdWdpbldpZGdl
dCk7CiB9CiAKLUNPTVB0cjxXZWJIaXN0b3J5PiBXZWJGcmFtZUxvYWRlckNsaWVudDo6d2ViSGlz
dG9yeSgpIGNvbnN0CitXZWJIaXN0b3J5KiBXZWJGcmFtZUxvYWRlckNsaWVudDo6d2ViSGlzdG9y
eSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fd2ViRnJhbWUgIT0gbV93ZWJGcmFtZS0+d2ViVmlldygp
LT50b3BMZXZlbEZyYW1lKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSVdlYkhpc3RvcnlQ
cml2YXRlKiBoaXN0b3J5SW50ZXJuYWwgPSBXZWJIaXN0b3J5OjpvcHRpb25hbFNoYXJlZEhpc3Rv
cnlJbnRlcm5hbCgpOyAvLyBkb2VzIG5vdCBhZGQgYSByZWYKLSAgICBpZiAoIWhpc3RvcnlJbnRl
cm5hbCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gQ09NUHRyPFdlYkhpc3Rvcnk+
KFF1ZXJ5LCBoaXN0b3J5SW50ZXJuYWwpOworICAgIHJldHVybiBXZWJIaXN0b3J5OjpzaGFyZWRI
aXN0b3J5KCk7CiB9CkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAzMDgxNikKKysrIFdlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcg
KzEwOCw3IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gY3JlYXRl
RnJhbWUoY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbmFtZSwg
V2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBy
ZWZlcnJlcik7CiAgICAgdm9pZCBsb2FkVVJMSW50b0NoaWxkKGNvbnN0IFdlYkNvcmU6OktVUkwm
LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHJlZmVycmVyLCBXZWJGcmFtZSogY2hpbGRGcmFtZSk7
CiAgICAgdm9pZCByZWNlaXZlZERhdGEoY29uc3QgY2hhciosIGludCwgY29uc3QgV2ViQ29yZTo6
U3RyaW5nJik7Ci0gICAgQ09NUHRyPFdlYkhpc3Rvcnk+IHdlYkhpc3RvcnkoKSBjb25zdDsKKyAg
ICBXZWJIaXN0b3J5KiB3ZWJIaXN0b3J5KCkgY29uc3Q7CiAKICAgICBXZWJGcmFtZSogbV93ZWJG
cmFtZTsKIAo=
</data>
<flag name="review"
          id="8561"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19571</attachid>
            <date>2008-03-06 10:27:10 -0800</date>
            <delta_ts>2008-03-06 10:27:10 -0800</delta_ts>
            <desc>more work in progress</desc>
            <filename>VisitedPatch.txt</filename>
            <type>text/plain</type>
            <size>3761</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9QYWdlR3JvdXAuY3BwCShyZXZpc2lvbiAzMDg0MykKKysrIFdlYkNvcmUvcGFnZS9QYWdl
R3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIC8vIC0tLS0tLS0tCiAKKy8vIFRvIHVzZSBhIGhhc2ggdmFsdWUgYXMgYSBrZXkg
Zm9yIGEgaGFzaCB0YWJsZSwgd2UgbmVlZCB0byBlbGltaW5hdGUgdGhlCisvLyAiZGVsZXRlZCIg
dmFsdWUsIHdoaWNoIGlzIG5lZ2F0aXZlIG9uZS4gVGhhdCBjb3VsZCBiZSBkb25lIGJ5IGNoYW5n
aW5nCisvLyB0aGUgaGFzaCBmdW5jdGlvbiB0byBuZXZlciBnZW5lcmF0ZSBuZWdhdGl2ZSBvbmUs
IGJ1dCB0aGlzIHdvcmtzIGFuZCBpcworLy8gc3RpbGwgcmVsYXRpdmVseSBlZmZpY2llbnQuCitz
dGF0aWMgaW5saW5lIHVuc2lnbmVkIGF2b2lkRGVsZXRlZFZhbHVlKHVuc2lnbmVkIGhhc2gpCit7
CisgICAgQVNTRVJUKGhhc2gpOworICAgIHVuc2lnbmVkIG5ld0hhc2ggPSBoYXNoIHwgKCEoaGFz
aCArIDEpIDw8IDMxKTsKKyAgICBBU1NFUlQobmV3SGFzaCk7CisgICAgQVNTRVJUKG5ld0hhc2gg
IT0gMHhGRkZGRkZGRik7CisgICAgcmV0dXJuIG5ld0hhc2g7Cit9CisKIFBhZ2VHcm91cDo6UGFn
ZUdyb3VwKFBhZ2UqIHBhZ2UpCiAgICAgOiBtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRlZChmYWxzZSkK
IHsKQEAgLTE4Myw4ICsxOTYsNyBAQCBib29sIFBhZ2VHcm91cDo6aXNMaW5rVmlzaXRlZChEb2N1
bWVudCogCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8v
IEZJWE1FOiBJdCBpcyBzdHJhbmdlIHRoYXQgd2UgZG8gbm90IGRvIGZ1cnRoZXIgcHJvY2Vzc2lu
ZyBvbiBzdHJpbmdzIHRoYXQgaGF2ZSAiOi8vIiBpbiB0aGVtLgotICAgIC8vIFRoYXQncyBjbGVh
cmx5IGluY29ycmVjdCBmb3IgYXQgbGVhc3QgdGhlc2UgcmVhc29uczoKKyAgICAvLyBGSVhNRTog
SXQgaXMgd3JvbmcgdGhhdCB3ZSBkbyBub3QgZG8gZnVydGhlciBwcm9jZXNzaW5nIG9uIHN0cmlu
Z3MgdGhhdCBoYXZlICI6Ly8iIGluIHRoZW06CiAgICAgLy8gICAgMSkgVGhlICI6Ly8iIGNvdWxk
IGJlIGluIHRoZSBxdWVyeSBvciBhbmNob3IuCiAgICAgLy8gICAgMikgVGhlIFVSTCdzIHBhdGgg
Y291bGQgaGF2ZSBhICIvLi8iIG9yIGEgIi8uLi8iIG9yIGEgIi8vIiBzZXF1ZW5jZSBpbiBpdC4K
IApAQCAtMTk0LDcgKzIwNiw3IEBAIGJvb2wgUGFnZUdyb3VwOjppc0xpbmtWaXNpdGVkKERvY3Vt
ZW50KiAKICAgICBib29sIGhhc0NvbG9uU2xhc2hTbGFzaCA9IGNvbnRhaW5zQ29sb25TbGFzaFNs
YXNoKGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAKICAgICBpZiAoaGFzQ29sb25TbGFzaFNsYXNoICYm
ICFuZWVkc1RyYWlsaW5nU2xhc2goY2hhcmFjdGVycywgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJu
IG1fdmlzaXRlZExpbmtIYXNoZXMuY29udGFpbnMoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goY2hh
cmFjdGVycywgbGVuZ3RoKSk7CisgICAgICAgIHJldHVybiBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmNv
bnRhaW5zKGF2b2lkRGVsZXRlZFZhbHVlKGF0dHJpYnV0ZVVSTC5zdHJpbmcoKS5pbXBsKCktPmhh
c2goKSkpOwogCiAgICAgVmVjdG9yPFVDaGFyLCA1MTI+IGJ1ZmZlcjsKIApAQCAtMjA4LDcgKzIy
MCw3IEBAIGJvb2wgUGFnZUdyb3VwOjppc0xpbmtWaXNpdGVkKERvY3VtZW50KiAKICAgICAgICAg
Ly8gZW5kIG9mIHRoZSBwYXRoLCAqYmVmb3JlKiB0aGUgcXVlcnkgb3IgYW5jaG9yLgogICAgICAg
ICBidWZmZXIuYXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgICAgIGJ1ZmZlci5hcHBl
bmQoJy8nKTsKLSAgICAgICAgcmV0dXJuIG1fdmlzaXRlZExpbmtIYXNoZXMuY29udGFpbnMoU3Ry
aW5nSW1wbDo6Y29tcHV0ZUhhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSkpOworICAg
ICAgICByZXR1cm4gbV92aXNpdGVkTGlua0hhc2hlcy5jb250YWlucyhhdm9pZERlbGV0ZWRWYWx1
ZShTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSkp
OwogICAgIH0KIAogICAgIGNvbnN0IEtVUkwmIGJhc2VVUkwgPSBkb2N1bWVudC0+YmFzZVVSTCgp
OwpAQCAtMjMxLDE4ICsyNDMsMTggQEAgYm9vbCBQYWdlR3JvdXA6OmlzTGlua1Zpc2l0ZWQoRG9j
dW1lbnQqIAogICAgICAgICBidWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgfQogCi0gICAgcmV0dXJu
IG1fdmlzaXRlZExpbmtIYXNoZXMuY29udGFpbnMoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goYnVm
ZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSkpOworICAgIHJldHVybiBtX3Zpc2l0ZWRMaW5rSGFz
aGVzLmNvbnRhaW5zKGF2b2lkRGVsZXRlZFZhbHVlKFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKGJ1
ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpKSk7CiB9CiAKIHZvaWQgUGFnZUdyb3VwOjphZGRW
aXNpdGVkTGluayhjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgp
KTsKLSAgICBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmFkZCh1cmwuc3RyaW5nKCkuaW1wbCgpLT5oYXNo
KCkpOworICAgIG1fdmlzaXRlZExpbmtIYXNoZXMuYWRkKGF2b2lkRGVsZXRlZFZhbHVlKHVybC5z
dHJpbmcoKS5pbXBsKCktPmhhc2goKSkpOwogfQogCiB2b2lkIFBhZ2VHcm91cDo6YWRkVmlzaXRl
ZExpbmsoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgbV92
aXNpdGVkTGlua0hhc2hlcy5hZGQoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goY2hhcmFjdGVycywg
bGVuZ3RoKSk7CisgICAgbV92aXNpdGVkTGlua0hhc2hlcy5hZGQoYXZvaWREZWxldGVkVmFsdWUo
U3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goY2hhcmFjdGVycywgbGVuZ3RoKSkpOwogfQogCiB2b2lk
IFBhZ2VHcm91cDo6cmVtb3ZlVmlzaXRlZExpbmtzKCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdl
R3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHJldmlzaW9u
IDMwODQzKQorKysgV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgS1VSTDsKICAgICBj
bGFzcyBQYWdlOwogCisgICAgc3RydWN0IEFscmVhZHlIYXNoZWQgOiBJbnRIYXNoPHVuc2lnbmVk
PiB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKHVuc2lnbmVkIGtleSkgeyByZXR1cm4g
a2V5OyB9CisgICAgfTsKKwogICAgIGNsYXNzIFBhZ2VHcm91cCA6IE5vbmNvcHlhYmxlIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIFBhZ2VHcm91cChQYWdlKik7CkBAIC01NSw3ICs1OSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIEhhc2hTZXQ8UGFnZSo+
IG1fcGFnZXM7Ci0gICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+IG1fdmlzaXRlZExpbmtIYXNoZXM7
CisgICAgICAgIEhhc2hTZXQ8dW5zaWduZWQsIEFscmVhZHlIYXNoZWQ+IG1fdmlzaXRlZExpbmtI
YXNoZXM7CiAgICAgICAgIGJvb2wgbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQ7CiAgICAgfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>