<?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>159856</bug_id>
          
          <creation_ts>2016-07-16 12:44:10 -0700</creation_ts>
          <short_desc>[WebKit API] Add SPI to track multiple navigations caused by a single user gesture</short_desc>
          <delta_ts>2016-07-18 05:38:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>159875</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mitz</cc>
    
    <cc>ossy</cc>
    
    <cc>pvollan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1211785</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-07-16 12:44:10 -0700</bug_when>
    <thetext>[WebKit API] Add SPI to track multiple navigations caused by a single user gesture</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211789</commentid>
    <comment_count>1</comment_count>
      <attachid>283851</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-07-16 12:56:29 -0700</bug_when>
    <thetext>Created attachment 283851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211790</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-07-16 12:57:01 -0700</bug_when>
    <thetext>Putting up for initial discussion / EWS run.  Needs tests and changelogs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211791</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-16 12:58:06 -0700</bug_when>
    <thetext>Attachment 283851 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/WebProcessProxy.h:99:  &apos;userInitiatedActivity&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedUint64_t&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebKit2/WebProcess/WebProcess.cpp:736:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/UIProcess/WebProcessProxy.cpp:675:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/dom/UserGestureIndicator.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/dom/UserGestureIndicator.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 5 in 51 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211815</commentid>
    <comment_count>4</comment_count>
      <attachid>283858</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-07-16 21:29:37 -0700</bug_when>
    <thetext>Created attachment 283858
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211816</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-16 21:32:24 -0700</bug_when>
    <thetext>Attachment 283858 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/WebProcessProxy.h:99:  &apos;userInitiatedActivity&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedUint64_t&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebKit2/WebProcess/WebProcess.cpp:736:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/UIProcess/WebProcessProxy.cpp:675:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/dom/UserGestureIndicator.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/dom/UserGestureIndicator.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 5 in 51 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211856</commentid>
    <comment_count>6</comment_count>
      <attachid>283869</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-07-17 11:27:09 -0700</bug_when>
    <thetext>Created attachment 283869
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211857</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-17 11:29:09 -0700</bug_when>
    <thetext>Attachment 283869 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitNavigationActionPrivate.h:32:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit2/UIProcess/WebProcessProxy.h:99:  &apos;userInitiatedActivity&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedUint64_t&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebKit2/WebProcess/WebProcess.cpp:734:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/UIProcess/WebProcessProxy.cpp:675:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:122:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:151:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:160:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:189:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:198:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:227:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/dom/UserGestureIndicator.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/dom/UserGestureIndicator.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 13 in 55 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211863</commentid>
    <comment_count>8</comment_count>
      <attachid>283871</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-07-17 13:18:18 -0700</bug_when>
    <thetext>Created attachment 283871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211864</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-17 13:20:39 -0700</bug_when>
    <thetext>Attachment 283871 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitNavigationActionPrivate.h:32:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit2/UIProcess/WebProcessProxy.h:99:  &apos;userInitiatedActivity&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedUint64_t&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebKit2/WebProcess/WebProcess.cpp:734:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/UIProcess/WebProcessProxy.cpp:675:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:114:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:123:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:155:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:164:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:205:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:236:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/dom/UserGestureIndicator.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/dom/UserGestureIndicator.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 13 in 57 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211866</commentid>
    <comment_count>10</comment_count>
      <attachid>283871</attachid>
    <who name="">mitz</who>
    <bug_when>2016-07-17 13:41:53 -0700</bug_when>
    <thetext>Comment on attachment 283871
Patch

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

&gt; Source/WebCore/ChangeLog:57
&gt; +        (WebCore::NavigationAction::processingUserGesture): Deleted.

This got moved and changed to use the token, but not deleted.

&gt; Source/WebCore/loader/NavigationScheduler.cpp:88
&gt; +    void clearUserGesture() { m_userGestureToForward = nullptr; } // FIXME: Need another value

This FIXME doesn’t seem to apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211867</commentid>
    <comment_count>11</comment_count>
      <attachid>283871</attachid>
    <who name="">mitz</who>
    <bug_when>2016-07-17 13:56:09 -0700</bug_when>
    <thetext>Comment on attachment 283871
Patch

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

&gt; Source/WebKit2/UIProcess/WebProcessProxy.h:241
&gt; +    UserInitiatedActionMap m_userInitiatedActionMap;

Not a fan of “map” in the name, but it seems to fit with the rest.

&gt; Source/WebKit2/UIProcess/API/APINavigationAction.h:71
&gt; +    bool isProcessingUserGesture() const { return !!m_userInitiatedAction; }

Do we need the !! here?

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKNavigationActionPrivate.h:50
&gt; +@property (nonatomic, readonly) _WKUserInitiatedAction *_userInitiatedAction;

Needs WK_API_AVAILABLE.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationActionPrivate.h:32
&gt; +        , isUserGesture(navigationActionData.userGestureTokenIdentifier != 0)

Do we need the explicit != 0 here? Our style is to avoid comparisons to 0.

&gt; Source/WebKit2/WebProcess/WebProcess.cpp:731
&gt; +    if (!token || !token-&gt;processingUserGesture())

Why is it important or desirable to return 0 if the token’s is !processingUserGesture()?

&gt; Source/WebKit2/WebProcess/WebProcess.h:401
&gt; +    HashMap&lt;WebCore::UserGestureToken *, uint64_t&gt; m_activeUserGestureTokens;

I’d drop “active” from this name. It doesn’t add much.

&gt; Tools/MiniBrowser/mac/WK2BrowserWindowController.m:393
&gt; -    self.window.title = [NSString stringWithFormat:@&quot;%@%@ [WK2 %d]&quot;, _isPrivateBrowsingWindow ? @&quot;ð &quot; : @&quot;&quot;, title, _webView._webProcessIdentifier];
&gt; +    self.window.title = [NSString stringWithFormat:@&quot;%@%@ [WK2 %d]&quot;, _isPrivateBrowsingWindow ? @&quot;ï &quot; : @&quot;&quot;, title, _webView._webProcessIdentifier];

This doesn’t seem to be related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211868</commentid>
    <comment_count>12</comment_count>
      <attachid>283871</attachid>
    <who name="">mitz</who>
    <bug_when>2016-07-17 13:56:27 -0700</bug_when>
    <thetext>Comment on attachment 283871
Patch

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

&gt; Tools/MiniBrowser/mac/WK2BrowserWindowController.m:410
&gt; +    [controller awakeFromNib];

Gross.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211871</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-07-17 15:33:53 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 283871 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=283871&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.h:241
&gt; &gt; +    UserInitiatedActionMap m_userInitiatedActionMap;
&gt; 
&gt; Not a fan of “map” in the name, but it seems to fit with the rest.

Going to keep it to match the rest.

&gt; &gt; Source/WebKit2/UIProcess/API/APINavigationAction.h:71
&gt; &gt; +    bool isProcessingUserGesture() const { return !!m_userInitiatedAction; }
&gt; 
&gt; Do we need the !! Here?

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKNavigationActionPrivate.h:50
&gt; &gt; +@property (nonatomic, readonly) _WKUserInitiatedAction *_userInitiatedAction;
&gt; 
&gt; Needs WK_API_AVAILABLE.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationActionPrivate.h:32
&gt; &gt; +        , isUserGesture(navigationActionData.userGestureTokenIdentifier != 0)
&gt; 
&gt; Do we need the explicit != 0 here? Our style is to avoid comparisons to 0.

Fixed.

&gt; &gt; Source/WebKit2/WebProcess/WebProcess.cpp:731
&gt; &gt; +    if (!token || !token-&gt;processingUserGesture())
&gt; 
&gt; Why is it important or desirable to return 0 if the token’s is
&gt; !processingUserGesture()?

We don&apos;t want to create a UserInitiatedAction on the UI side if we are only &quot;ProcessingPotentialUserGesture&quot;, which can happen, for instance, in the initial stages of a tap.  We only use that state for media.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebProcess.h:401
&gt; &gt; +    HashMap&lt;WebCore::UserGestureToken *, uint64_t&gt; m_activeUserGestureTokens;
&gt; 
&gt; I’d drop “active” from this name. It doesn’t add much.

Fixed.

&gt; &gt; Tools/MiniBrowser/mac/WK2BrowserWindowController.m:393
&gt; &gt; -    self.window.title = [NSString stringWithFormat:@&quot;%@%@ [WK2 %d]&quot;, _isPrivateBrowsingWindow ? @&quot;ð &quot; : @&quot;&quot;, title, _webView._webProcessIdentifier];
&gt; &gt; +    self.window.title = [NSString stringWithFormat:@&quot;%@%@ [WK2 %d]&quot;, _isPrivateBrowsingWindow ? @&quot;ï &quot; : @&quot;&quot;, title, _webView._webProcessIdentifier];
&gt; 
&gt; This doesn’t seem to be related.

No idea how that happened. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211888</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-07-17 18:08:51 -0700</bug_when>
    <thetext>Committed in https://trac.webkit.org/r203338.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211918</commentid>
    <comment_count>15</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-07-18 00:36:45 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Committed in https://trac.webkit.org/r203338.

It broke the Windows build, as the res EWS bubble noticed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211938</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-07-18 02:33:26 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Committed in https://trac.webkit.org/r203338.

and it broke the Apple Mac cmake build too - fixed in https://trac.webkit.org/changeset/203343</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211960</commentid>
    <comment_count>17</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-07-18 05:38:34 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; Committed in https://trac.webkit.org/r203338.
&gt; 
&gt; It broke the Windows build, as the res EWS bubble noticed.

bug report for Windows build fix: bug159875</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283851</attachid>
            <date>2016-07-16 12:56:29 -0700</date>
            <delta_ts>2016-07-16 21:29:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159856-20160716125538.patch</filename>
            <type>text/plain</type>
            <size>92560</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzMyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDE2LTA3LTE2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYktpdCBBUEldIEFkZCBTUEkgdG8g
dHJhY2sgbXVsdGlwbGUgbmF2aWdhdGlvbnMgY2F1c2VkIGJ5IGEgc2luZ2xlIHVzZXIgZ2VzdHVy
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5ODU2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTkVFRFMg
VEVTVFMgQU5EIENIQU5HRUxPRy4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OmluY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6ZGVjcmVtZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJlc3Mp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0ZVNjcmlwdEluV29ybGQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgICog
ZG9tL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmN1cnJlbnRU
b2tlbik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZVRva2VuOjp+VXNlckdlc3R1cmVU
b2tlbik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZUluZGljYXRvcjo6VXNlckdlc3R1
cmVJbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckdlc3R1cmVJbmRpY2F0b3I6On5V
c2VyR2VzdHVyZUluZGljYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZUluZGlj
YXRvcjo6Y3VycmVudFVzZXJHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJHZXN0dXJl
SW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VXNl
ckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzRGVmaW5pdGUpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Vc2VyR2Vz
dHVyZUluZGljYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6VXNlckdlc3R1cmVUb2tlbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJHZXN0dXJlVG9rZW46OnN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJHZXN0dXJlVG9rZW46OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZVRva2VuOjpwcm9jZXNzaW5nVXNlckdlc3R1cmVG
b3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZVRva2VuOjphZGREZXN0cnVj
dGlvbk9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJHZXN0dXJlVG9rZW46OlVzZXJH
ZXN0dXJlVG9rZW4pOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpkaWRSZWNlaXZlUmVtb3RlQ29udHJvbENv
bW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6Om9w
ZW5Jbk5ld1RhYik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5j
cHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRlKToKKyAgICAgICAgKiBsb2Fk
ZXIvTmF2aWdhdGlvbkFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0
aW9uOjpOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKiBsb2FkZXIvTmF2aWdhdGlvbkFjdGlv
bi5oOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbjo6dHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uOjpldmVudCk6CisgICAgICAgIChXZWJDb3JlOjpO
YXZpZ2F0aW9uQWN0aW9uOjp1c2VyR2VzdHVyZVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6Ok5h
dmlnYXRpb25BY3Rpb246OnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBsb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY2hlZHVsZWROYXZpZ2F0aW9uOjpTY2hlZHVsZWROYXZpZ2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjaGVkdWxlZE5hdmlnYXRpb246On5TY2hlZHVsZWROYXZpZ2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZE5hdmlnYXRpb246OmxvY2tCYWNrRm9yd2FyZExp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkTmF2aWdhdGlvbjo6d2FzRHVyaW5nTG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWROYXZpZ2F0aW9uOjppc0xvY2F0aW9uQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZE5hdmlnYXRpb246OnVzZXJHZXN0dXJl
VG9Gb3J3YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZE5hdmlnYXRpb246OmNsZWFy
VXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdGlvblNjaGVkdWxlcjo6bXVz
dExvY2tCYWNrRm9yd2FyZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdGlvblNjaGVk
dWxlcjo6c2NoZWR1bGVGb3JtU3VibWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVs
ZWROYXZpZ2F0aW9uOjp3YXNVc2VyR2VzdHVyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9E
T01UaW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRGb3J3YXJkVXNlckdlc3R1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6dXNlckdlc3R1cmVUb2tlblRvRm9yd2FyZCk6CisgICAgICAg
IChXZWJDb3JlOjpET01UaW1lcjo6RE9NVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGlt
ZXI6OmZpcmVkKToKKyAgICAgICAgKiBwYWdlL0RPTVRpbWVyLmg6CisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zdE1lc3NhZ2VUaW1lcjo6UG9zdE1l
c3NhZ2VUaW1lcik6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZURvdWJsZUNsaWNrRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmtleUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6dG9n
Z2xlTWVkaWFGdWxsc2NyZWVuU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dDo6ZW50ZXJGdWxsc2NyZWVuRm9yVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdDo6dG9nZ2xlRW5oYW5jZWRGdWxsc2NyZWVuRm9yVmlkZW8pOgorCiAyMDE2LTA3LTE2ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGZhc3RIYXNBdHRy
aWJ1dGUoKSB3aGVuIHBvc3NpYmxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkocmV2aXNpb24gMjAz
MzI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNzAsMTMgKzEwNzAsMTMgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6YWx0ZXJTbGlkZQogICAgIAogdm9pZCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6aW5jcmVtZW50KCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0
dXJlSW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsIGRvY3VtZW50KCkp
OworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlLCBkb2N1bWVudCgpKTsKICAgICBhbHRlclNsaWRlclZhbHVlKHRydWUpOwogfQog
CiB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpkZWNyZW1lbnQoKQogewotICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSwgZG9jdW1lbnQoKSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUlu
ZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUsIGRvY3VtZW50KCkpOwogICAgIGFsdGVyU2xp
ZGVyVmFsdWUoZmFsc2UpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDIwMzMyNykKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkyMCw3ICs5MjAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnByZXNzKCkKICAgICBpZiAoaGl0VGVzdEVsZW1lbnQgJiYgaGl0VGVzdEVsZW1lbnQtPmlzRGVz
Y2VuZGFudE9mKHByZXNzRWxlbWVudCkpCiAgICAgICAgIHByZXNzRWxlbWVudCA9IGhpdFRlc3RF
bGVtZW50OwogICAgIAotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Io
RGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgZG9jdW1lbnQpOworICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBkb2N1
bWVudCk7CiAgICAgCiAgICAgYm9vbCBkaXNwYXRjaGVkVG91Y2hFdmVudCA9IGRpc3BhdGNoVG91
Y2hFdmVudCgpOwogICAgIGlmICghZGlzcGF0Y2hlZFRvdWNoRXZlbnQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MjAzMzI3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Nyw3ICs0OTcsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmNsZWFyU2NyaXB0T2JqZWN0CiAKIEpTVmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0
ZVNjcmlwdEluV29ybGQoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgY29uc3QgU3RyaW5nJiBzY3Jp
cHQsIGJvb2wgZm9yY2VVc2VyR2VzdHVyZSkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBn
ZXN0dXJlSW5kaWNhdG9yKGZvcmNlVXNlckdlc3R1cmUgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoZm9yY2VVc2VyR2VzdHVyZSA/IE9wdGlvbmFs
PFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlPihQcm9jZXNzaW5nVXNlckdlc3R1cmUpIDogTnVs
bG9wdCk7CiAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlwdCwgbV9mcmFtZS5k
b2N1bWVudCgpLT51cmwoKSk7CiAKICAgICBpZiAoIWNhbkV4ZWN1dGVTY3JpcHRzKEFib3V0VG9F
eGVjdXRlU2NyaXB0KSB8fCBpc1BhdXNlZCgpKQpAQCAtNTIzLDcgKzUyMyw3IEBAIGJvb2wgU2Ny
aXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMKIAogSlNWYWx1ZSBTY3JpcHRDb250cm9s
bGVyOjpleGVjdXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgc2NyaXB0LCBib29sIGZvcmNlVXNlckdl
c3R1cmUsIEV4Y2VwdGlvbkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCiB7Ci0gICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihmb3JjZVVzZXJHZXN0dXJlID8gRGVmaW5p
dGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKGZvcmNlVXNlckdl
c3R1cmUgPyBPcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKSA6IE51bGxvcHQpOwogICAgIHJldHVybiBleGVjdXRlU2NyaXB0KFNjcmlwdFNv
dXJjZUNvZGUoc2NyaXB0LCBtX2ZyYW1lLmRvY3VtZW50KCktPnVybCgpKSwgZXhjZXB0aW9uRGV0
YWlscyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2VzdHVyZUluZGljYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1VzZXJHZXN0dXJlSW5kaWNh
dG9yLmNwcAkocmV2aXNpb24gMjAzMzI3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1VzZXJHZXN0
dXJlSW5kaWNhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNDIgKzI4LDY4IEBACiAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IGJvb2wgaXNEZWZpbml0ZShQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZSBzdGF0ZSkKK3N0YXRp
YyBSZWZQdHI8VXNlckdlc3R1cmVUb2tlbj4mIGN1cnJlbnRUb2tlbigpCiB7Ci0gICAgcmV0dXJu
IHN0YXRlID09IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgfHwgc3RhdGUgPT0gRGVm
aW5pdGVseU5vdFByb2Nlc3NpbmdVc2VyR2VzdHVyZSB8fCBzdGF0ZSA9PSBEZWZpbml0ZWx5UHJv
Y2Vzc2luZ1BvdGVudGlhbFVzZXJHZXN0dXJlOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxS
ZWZQdHI8VXNlckdlc3R1cmVUb2tlbj4+IHRva2VuOworICAgIHJldHVybiB0b2tlbjsKIH0KIAot
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGUgVXNlckdlc3R1cmVJbmRpY2F0b3I6OnNfc3RhdGUg
PSBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlOworVXNlckdlc3R1cmVUb2tlbjo6
flVzZXJHZXN0dXJlVG9rZW4oKQoreworICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBtX2Rlc3Ry
dWN0aW9uT2JzZXJ2ZXJzKQorICAgICAgICBvYnNlcnZlcigqdGhpcyk7Cit9CiAKLVVzZXJHZXN0
dXJlSW5kaWNhdG9yOjpVc2VyR2VzdHVyZUluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmVT
dGF0ZSBzdGF0ZSwgRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDogbV9wcmV2aW91c1N0YXRlKHNf
c3RhdGUpCitVc2VyR2VzdHVyZUluZGljYXRvcjo6VXNlckdlc3R1cmVJbmRpY2F0b3IoT3B0aW9u
YWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGU+IHN0YXRlLCBEb2N1bWVudCogZG9jdW1lbnQp
CisgICAgOiBtX3ByZXZpb3VzVG9rZW4oY3VycmVudFRva2VuKCkpCiB7CiAgICAgLy8gU2lsZW50
bHkgaWdub3JlIFVzZXJHZXN0dXJlSW5kaWNhdG9ycyBvbiBub24gbWFpbiB0aHJlYWRzLgogICAg
IGlmICghaXNNYWluVGhyZWFkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBXZSBvdmVyd3Jp
dGUgc19zdGF0ZSBvbmx5IGlmIHRoZSBjYWxsZXIgaXMgZGVmaW5pdGUgYWJvdXQgdGhlIGdlc3R1
cmUgc3RhdGUuCi0gICAgaWYgKGlzRGVmaW5pdGUoc3RhdGUpKQotICAgICAgICBzX3N0YXRlID0g
c3RhdGU7Ci0gICAgQVNTRVJUKGlzRGVmaW5pdGUoc19zdGF0ZSkpOwogCi0gICAgaWYgKGRvY3Vt
ZW50ICYmIHNfc3RhdGUgPT0gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSkKKyAgICBp
ZiAoc3RhdGUpCisgICAgICAgIGN1cnJlbnRUb2tlbigpID0gVXNlckdlc3R1cmVUb2tlbjo6Y3Jl
YXRlKHN0YXRlLnZhbHVlKCkpOworCisgICAgaWYgKGRvY3VtZW50ICYmIGN1cnJlbnRUb2tlbigp
LT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKICAgICAgICAgZG9jdW1lbnQtPnRvcERvY3VtZW50
KCkudXBkYXRlTGFzdEhhbmRsZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCgpOwogfQogCitVc2VyR2Vz
dHVyZUluZGljYXRvcjo6VXNlckdlc3R1cmVJbmRpY2F0b3IoUmVmUHRyPFVzZXJHZXN0dXJlVG9r
ZW4+IHRva2VuKQorICAgIDogbV9wcmV2aW91c1Rva2VuKGN1cnJlbnRUb2tlbigpKQoreworICAg
IGlmICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0b2tlbikK
KyAgICAgICAgY3VycmVudFRva2VuKCkgPSB0b2tlbjsKK30KKwogVXNlckdlc3R1cmVJbmRpY2F0
b3I6On5Vc2VyR2VzdHVyZUluZGljYXRvcigpCiB7CiAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIHNfc3RhdGUgPSBtX3ByZXZpb3VzU3RhdGU7Ci0gICAgQVNT
RVJUKGlzRGVmaW5pdGUoc19zdGF0ZSkpOworICAgIAorICAgIGN1cnJlbnRUb2tlbigpID0gbV9w
cmV2aW91c1Rva2VuOworfQorCitSZWZQdHI8VXNlckdlc3R1cmVUb2tlbj4gVXNlckdlc3R1cmVJ
bmRpY2F0b3I6OmN1cnJlbnRVc2VyR2VzdHVyZSgpCit7CisgICAgaWYgKCFpc01haW5UaHJlYWQo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gY3VycmVudFRva2VuKCk7
CiB9CiAKIGJvb2wgVXNlckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
CiB7Ci0gICAgcmV0dXJuIGlzTWFpblRocmVhZCgpID8gc19zdGF0ZSA9PSBEZWZpbml0ZWx5UHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlIDogZmFsc2U7CisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGN1cnJlbnRUb2tlbigpID8gY3VycmVu
dFRva2VuKCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIDogZmFsc2U7CiB9CiAKIGJvb2wgVXNl
ckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCkKQEAgLTcx
LDcgKzk3LDcgQEAgYm9vbCBVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZQogICAg
IGlmICghaXNNYWluVGhyZWFkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVy
biBzX3N0YXRlID09IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgfHwgc19zdGF0ZSA9
PSBEZWZpbml0ZWx5UHJvY2Vzc2luZ1BvdGVudGlhbFVzZXJHZXN0dXJlOworICAgIHJldHVybiBj
dXJyZW50VG9rZW4oKSA/IGN1cnJlbnRUb2tlbigpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmVGb3JN
ZWRpYSgpIDogZmFsc2U7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2Vz
dHVyZUluZGljYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2Vz
dHVyZUluZGljYXRvci5oCShyZXZpc2lvbiAyMDMzMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
VXNlckdlc3R1cmVJbmRpY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMzcgKzIzLDY4IEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBVc2Vy
R2VzdHVyZUluZGljYXRvcl9oCi0jZGVmaW5lIFVzZXJHZXN0dXJlSW5kaWNhdG9yX2gKKyNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwogCiBlbnVtIFByb2Nl
c3NpbmdVc2VyR2VzdHVyZVN0YXRlIHsKLSAgICBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0
dXJlLAotICAgIERlZmluaXRlbHlQcm9jZXNzaW5nUG90ZW50aWFsVXNlckdlc3R1cmUsCi0gICAg
UG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsCi0gICAgRGVmaW5pdGVseU5vdFByb2Nlc3Np
bmdVc2VyR2VzdHVyZQorICAgIFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwKKyAgICBQcm9jZXNzaW5n
UG90ZW50aWFsVXNlckdlc3R1cmUsCisgICAgTm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlCit9Owor
CitjbGFzcyBVc2VyR2VzdHVyZVRva2VuIDogcHVibGljIFJlZkNvdW50ZWQ8VXNlckdlc3R1cmVU
b2tlbj4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8VXNlckdlc3R1cmVUb2tlbj4gY3Jl
YXRlKFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlIHN0YXRlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBVc2VyR2VzdHVyZVRva2VuKHN0YXRlKSk7CisgICAgfQorCisgICAg
V0VCQ09SRV9FWFBPUlQgflVzZXJHZXN0dXJlVG9rZW4oKTsKKworICAgIFByb2Nlc3NpbmdVc2Vy
R2VzdHVyZVN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIGJvb2wg
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBQcm9jZXNz
aW5nVXNlckdlc3R1cmU7IH0KKyAgICBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZUZvck1lZGlh
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBQcm9jZXNzaW5nVXNlckdlc3R1cmUgfHwgbV9z
dGF0ZSA9PSBQcm9jZXNzaW5nUG90ZW50aWFsVXNlckdlc3R1cmU7IH0KKworICAgIHZvaWQgYWRk
RGVzdHJ1Y3Rpb25PYnNlcnZlcihGdW5jdGlvbjx2b2lkIChVc2VyR2VzdHVyZVRva2VuJik+JiYg
b2JzZXJ2ZXIpCisgICAgeworICAgICAgICBtX2Rlc3RydWN0aW9uT2JzZXJ2ZXJzLmFwcGVuZChX
VEZNb3ZlKG9ic2VydmVyKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFVzZXJHZXN0dXJlVG9r
ZW4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGUgc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShz
dGF0ZSkKKyAgICB7CisgICAgfQorCisgICAgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGUgbV9z
dGF0ZSA9IE5vdFByb2Nlc3NpbmdVc2VyR2VzdHVyZTsKKyAgICBWZWN0b3I8RnVuY3Rpb248dm9p
ZCAoVXNlckdlc3R1cmVUb2tlbiYpPj4gbV9kZXN0cnVjdGlvbk9ic2VydmVyczsKIH07CiAKIGNs
YXNzIFVzZXJHZXN0dXJlSW5kaWNhdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVc2Vy
R2VzdHVyZUluZGljYXRvcik7CiBwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZlB0cjxVc2VyR2VzdHVyZVRva2VuPiBjdXJyZW50VXNlckdlc3R1cmUoKTsKKwogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwotICAgIHN0YXRp
YyBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKTsKIAogICAgIC8v
IElmIGEgZG9jdW1lbnQgaXMgcHJvdmlkZWQsIGl0cyBsYXN0IGtub3duIHVzZXIgZ2VzdHVyZSB0
aW1lc3RhbXAgaXMgdXBkYXRlZC4KLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBVc2VyR2Vz
dHVyZUluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZSwgRG9jdW1lbnQqID0gbnVs
bHB0cik7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgVXNlckdlc3R1cmVJbmRpY2F0b3Io
T3B0aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGU+LCBEb2N1bWVudCogPSBudWxscHRy
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBVc2VyR2VzdHVyZUluZGljYXRvcihSZWZQ
dHI8VXNlckdlc3R1cmVUb2tlbj4pOwogICAgIFdFQkNPUkVfRVhQT1JUIH5Vc2VyR2VzdHVyZUlu
ZGljYXRvcigpOwogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQcm9jZXNz
aW5nVXNlckdlc3R1cmVTdGF0ZSBzX3N0YXRlOwotICAgIFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0
YXRlIG1fcHJldmlvdXNTdGF0ZTsKKyAgICBSZWZQdHI8VXNlckdlc3R1cmVUb2tlbj4gbV9wcmV2
aW91c1Rva2VuOwogfTsKIAogfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjAzMzI3KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgzMSw3ICs2ODMx
LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRSZWNlaXZlUmVtb3RlQwogewogICAgIExP
RyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OmRpZFJlY2VpdmVSZW1vdGVDb250cm9sQ29tbWFu
ZCglcCkgLSAlaSIsIHRoaXMsIHN0YXRpY19jYXN0PGludD4oY29tbWFuZCkpOwogCi0gICAgVXNl
ckdlc3R1cmVJbmRpY2F0b3IgcmVtb3RlQ29udHJvbFVzZXJHZXN0dXJlKERlZmluaXRlbHlQcm9j
ZXNzaW5nVXNlckdlc3R1cmUsICZkb2N1bWVudCgpKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciByZW1vdGVDb250cm9sVXNlckdlc3R1cmUoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCAmZG9jdW1l
bnQoKSk7CiAgICAgc3dpdGNoIChjb21tYW5kKSB7CiAgICAgY2FzZSBQbGF0Zm9ybU1lZGlhU2Vz
c2lvbjo6UGxheUNvbW1hbmQ6CiAgICAgICAgIHBsYXkoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5j
cHAJKHJldmlzaW9uIDIwMzMyNykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw3
IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y2hhbmcKIAogdm9pZCBJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwp
CiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNz
aW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9j
ZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIEZyYW1lJiBtYWluRnJhbWUgPSBtX2luc3BlY3RlZFBh
Z2VDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCkubWFpbkZyYW1lKCk7CiAgICAgRnJhbWVMb2Fk
UmVxdWVzdCByZXF1ZXN0KG1haW5GcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBS
ZXNvdXJjZVJlcXVlc3QoKSwgIl9ibGFuayIsIExvY2tIaXN0b3J5OjpObywgTG9ja0JhY2tGb3J3
YXJkTGlzdDo6Tm8sIE1heWJlU2VuZFJlZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRV
Ukw6OlllcywgTmV3RnJhbWVPcGVuZXJQb2xpY3k6OkFsbG93LCBSZXBsYWNlRG9jdW1lbnRJZkph
dmFTY3JpcHRVUkwsIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9z
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDIwMzMyNykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5
NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0
TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlCiAgICAgewogICAgICAg
ICBpZiAobV9mcm9udGVuZEhvc3QpIHsKLSAgICAgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGdlc3R1cmVJbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAg
ICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKFByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7CiAgICAgICAgICAgICBpbnQgaXRlbU51bWJlciA9IGFjdGlvbiAtIENvbnRl
eHRNZW51SXRlbUJhc2VDdXN0b21UYWc7CiAKICAgICAgICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlw
dEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX2Zyb250ZW5kQXBpT2JqZWN0LCAiY29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWQiLCBXZWJDb3JlOjpmdW5jdGlvbkNhbGxIYW5kbGVyRnJvbUFueVRocmVhZCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcAkocmV2aXNpb24gMjAzMzI3KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNSw3ICs0MjUsNyBAQCB2b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6cmVsb2FkKEVycm9yU3RyCiAKIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpuYXZpZ2F0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsKQogewotICAg
IFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKTsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UubWFpbkZyYW1lKCk7CiAKICAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KGZyYW1lLmRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKHVybCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL05hdmlnYXRpb25BY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uQWN0
aW9uLmNwcAkocmV2aXNpb24gMjAzMzI3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL05hdmln
YXRpb25BY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIE5hdmlnYXRp
b25BY3Rpb246Ok5hdmlnYXRpb25BY3Rpb24oY29uc3QKICAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0
KHJlc291cmNlUmVxdWVzdCkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9ldmVudChldmVu
dCkKLSAgICAsIG1fcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKFNjcmlwdENvbnRyb2xsZXI6OnByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpKQorICAgICwgbV91c2VyR2VzdHVyZVRva2VuKFVzZXJHZXN0dXJl
SW5kaWNhdG9yOjpjdXJyZW50VXNlckdlc3R1cmUoKSkKICAgICAsIG1fc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeShzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KQogICAgICwgbV9kb3du
bG9hZEF0dHJpYnV0ZShkb3dubG9hZEF0dHJpYnV0ZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL05hdmlnYXRpb25BY3Rpb24uaAkocmV2aXNpb24gMjAzMzI3KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL05hdmlnYXRpb25BY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJVUkwuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGlj
YXRvci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTYzLDcgKzY0LDcgQEAgcHVibGljOgogICAgIE5hdmlnYXRpb25UeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBFdmVudCogZXZlbnQoKSBjb25zdCB7IHJl
dHVybiBtX2V2ZW50LmdldCgpOyB9CiAKLSAgICBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2luZ1VzZXJHZXN0dXJlOyB9CisgICAgUmVmUHRyPFVz
ZXJHZXN0dXJlVG9rZW4+IHVzZXJHZXN0dXJlVG9rZW4oKSBjb25zdCB7IHJldHVybiBtX3VzZXJH
ZXN0dXJlVG9rZW47IH0KIAogICAgIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgc2hvdWxk
T3BlbkV4dGVybmFsVVJMc1BvbGljeSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeTsgfQogCkBAIC03Myw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgUmVzb3Vy
Y2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0OwogICAgIE5hdmlnYXRpb25UeXBlIG1fdHlwZSB7
IE5hdmlnYXRpb25UeXBlOjpPdGhlciB9OwogICAgIFJlZlB0cjxFdmVudD4gbV9ldmVudDsKLSAg
ICBib29sIG1fcHJvY2Vzc2luZ1VzZXJHZXN0dXJlOworICAgIFJlZlB0cjxVc2VyR2VzdHVyZVRv
a2VuPiBtX3VzZXJHZXN0dXJlVG9rZW47CiAgICAgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGlj
eSBtX3Nob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgeyBTaG91bGRPcGVuRXh0ZXJuYWxVUkxz
UG9saWN5OjpTaG91bGROb3RBbGxvdyB9OwogICAgIEF0b21pY1N0cmluZyBtX2Rvd25sb2FkQXR0
cmlidXRlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNj
aGVkdWxlci5jcHAJKHJldmlzaW9uIDIwMzMyNykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9O
YXZpZ2F0aW9uU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9sb2NrQmFja0ZvcndhcmRMaXN0KGxvY2tCYWNrRm9yd2FyZExp
c3QpCiAgICAgICAgICwgbV93YXNEdXJpbmdMb2FkKHdhc0R1cmluZ0xvYWQpCiAgICAgICAgICwg
bV9pc0xvY2F0aW9uQ2hhbmdlKGlzTG9jYXRpb25DaGFuZ2UpCi0gICAgICAgICwgbV93YXNVc2Vy
R2VzdHVyZShTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAgICAg
ICAgLCBtX3VzZXJHZXN0dXJlVG9Gb3J3YXJkKFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpjdXJyZW50
VXNlckdlc3R1cmUoKSkKICAgICB7CiAgICAgfQogICAgIHZpcnR1YWwgflNjaGVkdWxlZE5hdmln
YXRpb24oKSB7IH0KQEAgLTgyLDEwICs4MiwxMCBAQCBwdWJsaWM6CiAgICAgTG9ja0JhY2tGb3J3
YXJkTGlzdCBsb2NrQmFja0ZvcndhcmRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9sb2NrQmFja0Zv
cndhcmRMaXN0OyB9CiAgICAgYm9vbCB3YXNEdXJpbmdMb2FkKCkgY29uc3QgeyByZXR1cm4gbV93
YXNEdXJpbmdMb2FkOyB9CiAgICAgYm9vbCBpc0xvY2F0aW9uQ2hhbmdlKCkgY29uc3QgeyByZXR1
cm4gbV9pc0xvY2F0aW9uQ2hhbmdlOyB9Ci0gICAgYm9vbCB3YXNVc2VyR2VzdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fd2FzVXNlckdlc3R1cmU7IH0KKyAgICBSZWZQdHI8VXNlckdlc3R1cmVUb2tl
bj4gdXNlckdlc3R1cmVUb0ZvcndhcmQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJHZXN0dXJlVG9G
b3J3YXJkOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGNsZWFyVXNlckdlc3R1cmUoKSB7IG1f
d2FzVXNlckdlc3R1cmUgPSBmYWxzZTsgfQorICAgIHZvaWQgY2xlYXJVc2VyR2VzdHVyZSgpIHsg
bV91c2VyR2VzdHVyZVRvRm9yd2FyZCA9IG51bGxwdHI7IH0gLy8gRklYTUU6IE5lZWQgYW5vdGhl
ciB2YWx1ZQogCiAgICAgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBtX3Nob3VsZE9wZW5F
eHRlcm5hbFVSTHNQb2xpY3kgeyBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRO
b3RBbGxvdyB9OwogCkBAIC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgTG9ja0JhY2tGb3J3
YXJkTGlzdCBtX2xvY2tCYWNrRm9yd2FyZExpc3Q7CiAgICAgYm9vbCBtX3dhc0R1cmluZ0xvYWQ7
CiAgICAgYm9vbCBtX2lzTG9jYXRpb25DaGFuZ2U7Ci0gICAgYm9vbCBtX3dhc1VzZXJHZXN0dXJl
OworICAgIFJlZlB0cjxVc2VyR2VzdHVyZVRva2VuPiBtX3VzZXJHZXN0dXJlVG9Gb3J3YXJkOwog
fTsKIAogY2xhc3MgU2NoZWR1bGVkVVJMTmF2aWdhdGlvbiA6IHB1YmxpYyBTY2hlZHVsZWROYXZp
Z2F0aW9uIHsKQEAgLTExMyw3ICsxMTMsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGZpcmUo
RnJhbWUmIGZyYW1lKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0
b3IgZ2VzdHVyZUluZGljYXRvcih3YXNVc2VyR2VzdHVyZSgpID8gRGVmaW5pdGVseVByb2Nlc3Np
bmdVc2VyR2VzdHVyZSA6IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAg
ICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHVzZXJHZXN0dXJlVG9G
b3J3YXJkKCkpOwogCiAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXNvdXJjZVJlcXVlc3QobV91
cmwsIG1fcmVmZXJyZXIsIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpOwogICAgICAgICBGcmFtZUxv
YWRSZXF1ZXN0IGZyYW1lUmVxdWVzdChtX3NlY3VyaXR5T3JpZ2luLmdldCgpLCByZXNvdXJjZVJl
cXVlc3QsICJfc2VsZiIsIGxvY2tIaXN0b3J5KCksIGxvY2tCYWNrRm9yd2FyZExpc3QoKSwgTWF5
YmVTZW5kUmVmZXJyZXIsIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTDo6WWVzLCBOZXdGcmFt
ZU9wZW5lclBvbGljeTo6QWxsb3csIG1fc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSk7CkBA
IC0xMjcsNyArMTI3LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBtX2hhdmVUb2xkQ2xpZW50ID0gdHJ1ZTsKIAotICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBnZXN0dXJlSW5kaWNhdG9yKHdhc1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlIDogRGVmaW5pdGVseU5vdFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAg
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IodXNlckdlc3R1cmVUb0Zv
cndhcmQoKSk7CiAgICAgICAgIGZyYW1lLmxvYWRlcigpLmNsaWVudFJlZGlyZWN0ZWQobV91cmws
IGRlbGF5KCksIGN1cnJlbnRUaW1lKCkgKyB0aW1lci5uZXh0RmlyZUludGVydmFsKCksIGxvY2tC
YWNrRm9yd2FyZExpc3QoKSk7CiAgICAgfQogCkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBmaXJlKEZyYW1lJiBmcmFtZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Iod2FzVXNlckdlc3R1cmUoKSA/IERl
ZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKTsKKyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRv
cih1c2VyR2VzdHVyZVRvRm9yd2FyZCgpKTsKICAgICAgICAgYm9vbCByZWZyZXNoID0gZXF1YWxJ
Z25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihmcmFtZS5kb2N1bWVudCgpLT51cmwoKSwgdXJsKCkp
OwogICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KHVybCgpLCByZWZlcnJl
cigpLCByZWZyZXNoID8gUmVsb2FkSWdub3JpbmdDYWNoZURhdGEgOiBVc2VQcm90b2NvbENhY2hl
UG9saWN5KTsKICAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3Qoc2VjdXJpdHlP
cmlnaW4oKSwgcmVzb3VyY2VSZXF1ZXN0LCAiX3NlbGYiLCBsb2NrSGlzdG9yeSgpLCBsb2NrQmFj
a0ZvcndhcmRMaXN0KCksIE1heWJlU2VuZFJlZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFs
aWRVUkw6Ok5vLCBOZXdGcmFtZU9wZW5lclBvbGljeTo6QWxsb3csIG1fc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeSk7CkBAIC0xODcsNyArMTg3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBm
aXJlKEZyYW1lJiBmcmFtZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Iod2FzVXNlckdlc3R1cmUoKSA/IERlZmluaXRlbHlQcm9j
ZXNzaW5nVXNlckdlc3R1cmUgOiBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
KyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih1c2VyR2VzdHVy
ZVRvRm9yd2FyZCgpKTsKIAogICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0
KHVybCgpLCByZWZlcnJlcigpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KTsKICAgICAgICAgRnJh
bWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3Qoc2VjdXJpdHlPcmlnaW4oKSwgcmVzb3VyY2VSZXF1
ZXN0LCAiX3NlbGYiLCBsb2NrSGlzdG9yeSgpLCBsb2NrQmFja0ZvcndhcmRMaXN0KCksIE1heWJl
U2VuZFJlZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6Ok5vLCBOZXdGcmFtZU9w
ZW5lclBvbGljeTo6QWxsb3csIG1fc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSk7CkBAIC0y
MDQsNyArMjA0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaXJlKEZyYW1lJiBmcmFtZSkgb3Zl
cnJpZGUKICAgICB7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0
b3Iod2FzVXNlckdlc3R1cmUoKSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBE
ZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICAgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih1c2VyR2VzdHVyZVRvRm9yd2FyZCgpKTsKIAogICAg
ICAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KHVybCgpLCByZWZlcnJlcigpLCBS
ZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSk7CiAgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVS
ZXF1ZXN0KHNlY3VyaXR5T3JpZ2luKCksIHJlc291cmNlUmVxdWVzdCwgIl9zZWxmIiwgbG9ja0hp
c3RvcnkoKSwgbG9ja0JhY2tGb3J3YXJkTGlzdCgpLCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dO
YXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpZZXMsIE5ld0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxvdywg
bV9zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KTsKQEAgLTIyMiw3ICsyMjIsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGZpcmUoRnJhbWUmIGZyYW1lKSBvdmVycmlkZQogICAgIHsKLSAgICAg
ICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih3YXNVc2VyR2VzdHVyZSgp
ID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IERlZmluaXRlbHlOb3RQcm9jZXNz
aW5nVXNlckdlc3R1cmUpOworICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5k
aWNhdG9yKHVzZXJHZXN0dXJlVG9Gb3J3YXJkKCkpOwogCiAgICAgICAgIGlmICghbV9oaXN0b3J5
U3RlcHMpIHsKICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZ28oMCkgZnJvbSBhIGZy
YW1lIC0+IHJlbG9hZCBvbmx5IHRoZSBmcmFtZQpAQCAtMjU1LDcgKzI1NSw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZmlyZShGcmFtZSYgZnJhbWUpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHdhc1VzZXJHZXN0dXJlKCkgPyBE
ZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogRGVmaW5pdGVseU5vdFByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7CisgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0
b3IodXNlckdlc3R1cmVUb0ZvcndhcmQoKSk7CiAKICAgICAgICAgLy8gVGhlIHN1Ym1pdEZvcm0g
ZnVuY3Rpb24gd2lsbCBmaW5kIGEgdGFyZ2V0IGZyYW1lIGJlZm9yZSB1c2luZyB0aGUgcmVkaXJl
Y3Rpb24gdGltZXIuCiAgICAgICAgIC8vIE5vdyB0aGF0IHRoZSB0aW1lciBoYXMgZmlyZWQsIHdl
IG5lZWQgdG8gcmVwZWF0IHRoZSBzZWN1cml0eSBjaGVjayB3aGljaCBub3JtYWxseSBpcyBkb25l
IHdoZW4KQEAgLTI3NSw3ICsyNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIG1faGF2ZVRvbGRDbGllbnQgPSB0cnVlOwogCi0gICAgICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Iod2FzVXNlckdlc3R1cmUoKSA/IERlZmluaXRlbHlQcm9j
ZXNzaW5nVXNlckdlc3R1cmUgOiBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
KyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih1c2VyR2VzdHVy
ZVRvRm9yd2FyZCgpKTsKICAgICAgICAgZnJhbWUubG9hZGVyKCkuY2xpZW50UmVkaXJlY3RlZCht
X3N1Ym1pc3Npb24tPnJlcXVlc3RVUkwoKSwgZGVsYXkoKSwgY3VycmVudFRpbWUoKSArIHRpbWVy
Lm5leHRGaXJlSW50ZXJ2YWwoKSwgbG9ja0JhY2tGb3J3YXJkTGlzdCgpKTsKICAgICB9CiAKQEAg
LTMwOCw3ICszMDgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpcmUoRnJhbWUmIGZyYW1lKSBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGlj
YXRvcih3YXNVc2VyR2VzdHVyZSgpID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6
IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgICAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHVzZXJHZXN0dXJlVG9Gb3J3YXJkKCkpOwogCiAg
ICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVwbGFjZW1lbnRSZXNwb25zZShtX29yaWdpbkRvY3Vt
ZW50LnVybCgpLCBBU0NJSUxpdGVyYWwoInRleHQvcGxhaW4iKSwgMCwgQVNDSUlMaXRlcmFsKCJV
VEYtOCIpKTsKICAgICAgICAgU3Vic3RpdHV0ZURhdGEgcmVwbGFjZW1lbnREYXRhKFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKCksIG1fb3JpZ2luRG9jdW1lbnQudXJsKCksIHJlcGxhY2VtZW50UmVzcG9u
c2UsIFN1YnN0aXR1dGVEYXRhOjpTZXNzaW9uSGlzdG9yeVZpc2liaWxpdHk6OkhpZGRlbik7CkBA
IC0zODUsNyArMzg1LDcgQEAgTG9ja0JhY2tGb3J3YXJkTGlzdCBOYXZpZ2F0aW9uU2NoZWR1bGVy
OgogewogICAgIC8vIE5vbi11c2VyIG5hdmlnYXRpb24gYmVmb3JlIHRoZSBwYWdlIGhhcyBmaW5p
c2hlZCBmaXJpbmcgb25sb2FkIHNob3VsZCBub3QgY3JlYXRlIGEgbmV3IGJhY2svZm9yd2FyZCBp
dGVtLgogICAgIC8vIFNlZSBodHRwczovL3dlYmtpdC5vcmcvYi80Mjg2MSBmb3IgdGhlIG9yaWdp
bmFsIG1vdGl2YXRpb24gZm9yIHRoaXMuICAgIAotICAgIGlmICghU2NyaXB0Q29udHJvbGxlcjo6
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgJiYgdGFyZ2V0RnJhbWUubG9hZGVyKCkuZG9jdW1lbnRM
b2FkZXIoKSAmJiAhdGFyZ2V0RnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+d2FzT25s
b2FkRGlzcGF0Y2hlZCgpKQorICAgIGlmICghVXNlckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3Np
bmdVc2VyR2VzdHVyZSgpICYmIHRhcmdldEZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkg
JiYgIXRhcmdldEZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPndhc09ubG9hZERpc3Bh
dGNoZWQoKSkKICAgICAgICAgcmV0dXJuIExvY2tCYWNrRm9yd2FyZExpc3Q6OlllczsKICAgICAK
ICAgICAvLyBOYXZpZ2F0aW9uIG9mIGEgc3ViZnJhbWUgZHVyaW5nIGxvYWRpbmcgb2YgYW4gYW5j
ZXN0b3IgZnJhbWUgZG9lcyBub3QgY3JlYXRlIGEgbmV3IGJhY2svZm9yd2FyZCBpdGVtLgpAQCAt
NDQ0LDcgKzQ0NCw3IEBAIHZvaWQgTmF2aWdhdGlvblNjaGVkdWxlcjo6c2NoZWR1bGVGb3JtU3UK
ICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzgz
IGZvciB0aGUgb3JpZ2luYWwgbW90aXZhdGlvbiBmb3IgdGhpcy4KICAgICBMb2NrQmFja0Zvcndh
cmRMaXN0IGxvY2tCYWNrRm9yd2FyZExpc3QgPSBtdXN0TG9ja0JhY2tGb3J3YXJkTGlzdChtX2Zy
YW1lKTsKICAgICBpZiAobG9ja0JhY2tGb3J3YXJkTGlzdCA9PSBMb2NrQmFja0ZvcndhcmRMaXN0
OjpObwotICAgICAgICAmJiAoc3VibWlzc2lvbi0+c3RhdGUoKS0+Zm9ybVN1Ym1pc3Npb25Ucmln
Z2VyKCkgPT0gU3VibWl0dGVkQnlKYXZhU2NyaXB0ICYmIG1fZnJhbWUudHJlZSgpLnBhcmVudCgp
ICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkpIHsKKyAgICAg
ICAgJiYgKHN1Ym1pc3Npb24tPnN0YXRlKCktPmZvcm1TdWJtaXNzaW9uVHJpZ2dlcigpID09IFN1
Ym1pdHRlZEJ5SmF2YVNjcmlwdCAmJiBtX2ZyYW1lLnRyZWUoKS5wYXJlbnQoKSAmJiAhVXNlckdl
c3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKSkgewogICAgICAgICBsb2Nr
QmFja0ZvcndhcmRMaXN0ID0gTG9ja0JhY2tGb3J3YXJkTGlzdDo6WWVzOwogICAgIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NVGltZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NVGltZXIuY3BwCShyZXZpc2lvbiAyMDMzMjcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
NiBAQAogI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlVzZXJHZXN0
dXJlSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTY4LDYgKzE2
NywxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkRm9yd2FyZFVzZXJHZXN0CiAgICAgICAg
ICYmICFuZXN0aW5nTGV2ZWw7IC8vIEdlc3R1cmVzIHNob3VsZCBub3QgYmUgZm9yd2FyZGVkIHRv
IG5lc3RlZCB0aW1lcnMuCiB9CiAKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPFVzZXJHZXN0dXJlVG9r
ZW4+IHVzZXJHZXN0dXJlVG9rZW5Ub0ZvcndhcmQoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBp
bnRlcnZhbCwgaW50IG5lc3RpbmdMZXZlbCkKK3sKKyAgICBpZiAoIXNob3VsZEZvcndhcmRVc2Vy
R2VzdHVyZShpbnRlcnZhbCwgbmVzdGluZ0xldmVsKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gVXNlckdlc3R1cmVJbmRpY2F0b3I6OmN1cnJlbnRVc2VyR2VzdHVyZSgp
OworfQorCiBET01UaW1lcjo6RE9NVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uLCBzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzIGludGVydmFsLCBib29sIHNpbmdsZVNob3QpCiAgICAgOiBTdXNwZW5kYWJs
ZVRpbWVyKGNvbnRleHQpCiAgICAgLCBtX25lc3RpbmdMZXZlbChjb250ZXh0LnRpbWVyTmVzdGlu
Z0xldmVsKCkpCkBAIC0xNzUsNyArMTgyLDcgQEAgRE9NVGltZXI6OkRPTVRpbWVyKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleAogICAgICwgbV9vcmlnaW5hbEludGVydmFsKGludGVydmFsKQogICAgICwg
bV90aHJvdHRsZVN0YXRlKFVuZGV0ZXJtaW5lZCkKICAgICAsIG1fY3VycmVudFRpbWVySW50ZXJ2
YWwoaW50ZXJ2YWxDbGFtcGVkVG9NaW5pbXVtKCkpCi0gICAgLCBtX3Nob3VsZEZvcndhcmRVc2Vy
R2VzdHVyZShzaG91bGRGb3J3YXJkVXNlckdlc3R1cmUoaW50ZXJ2YWwsIG1fbmVzdGluZ0xldmVs
KSkKKyAgICAsIG1fdXNlckdlc3R1cmVUb2tlblRvRm9yd2FyZCh1c2VyR2VzdHVyZVRva2VuVG9G
b3J3YXJkKGludGVydmFsLCBtX25lc3RpbmdMZXZlbCkpCiB7CiAgICAgUmVmUHRyPERPTVRpbWVy
PiByZWZlcmVuY2UgPSBhZG9wdFJlZih0aGlzKTsKIApAQCAtMzAwLDkgKzMwNyw5IEBAIHZvaWQg
RE9NVGltZXI6OmZpcmVkKCkKIAogICAgIEFTU0VSVCghaXNTdXNwZW5kZWQoKSk7CiAgICAgQVNT
RVJUKCFjb250ZXh0LmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSk7Ci0gICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihtX3Nob3VsZEZvcndhcmRVc2VyR2VzdHVy
ZSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvciht
X3VzZXJHZXN0dXJlVG9rZW5Ub0ZvcndhcmQpOwogICAgIC8vIE9ubHkgdGhlIGZpcnN0IGV4ZWN1
dGlvbiBvZiBhIG11bHRpLXNob3QgdGltZXIgc2hvdWxkIGdldCBhbiBhZmZpcm1hdGl2ZSB1c2Vy
IGdlc3R1cmUgaW5kaWNhdG9yLgotICAgIG1fc2hvdWxkRm9yd2FyZFVzZXJHZXN0dXJlID0gZmFs
c2U7CisgICAgbV91c2VyR2VzdHVyZVRva2VuVG9Gb3J3YXJkID0gbnVsbHB0cjsKIAogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxGaXJlVGltZXIoJmNvbnRleHQsIG1fdGltZW91dElkKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9ET01UaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NVGltZXIuaAkocmV2aXNpb24gMjAzMzI3KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01UaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIERP
TVRpbWVyX2gKIAogI2luY2x1ZGUgIlN1c3BlbmRhYmxlVGltZXIuaCIKKyNpbmNsdWRlICJVc2Vy
R2VzdHVyZUluZGljYXRvci5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCkBAIC05MCw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcyBtX29yaWdpbmFsSW50ZXJ2YWw7CiAgICAgVGltZXJUaHJvdHRsZVN0YXRl
IG1fdGhyb3R0bGVTdGF0ZTsKICAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1fY3VycmVu
dFRpbWVySW50ZXJ2YWw7Ci0gICAgYm9vbCBtX3Nob3VsZEZvcndhcmRVc2VyR2VzdHVyZTsKKyAg
ICBSZWZQdHI8VXNlckdlc3R1cmVUb2tlbj4gbV91c2VyR2VzdHVyZVRva2VuVG9Gb3J3YXJkOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAkocmV2aXNpb24gMjAzMzI3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgICAgICAs
IG1fY2hhbm5lbHMoV1RGTW92ZShjaGFubmVscykpCiAgICAgICAgICwgbV90YXJnZXRPcmlnaW4o
V1RGTW92ZSh0YXJnZXRPcmlnaW4pKQogICAgICAgICAsIG1fc3RhY2tUcmFjZShzdGFja1RyYWNl
KQotICAgICAgICAsIG1fd2FzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKFVzZXJHZXN0dXJlSW5kaWNh
dG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAgICAgICAgLCBtX3VzZXJHZXN0dXJlVG9G
b3J3YXJkKFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpjdXJyZW50VXNlckdlc3R1cmUoKSkKICAgICB7
CiAgICAgfQogCkBAIC0xNjgsNyArMTY4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gVGhpcyBv
YmplY3QgZ2V0cyBkZWxldGVkIHdoZW4gc3RkOjp1bmlxdWVfcHRyIGZhbGxzIG91dCBvZiBzY29w
ZS4uCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQb3N0TWVzc2FnZVRpbWVyPiB0aW1lcih0aGlz
KTsKICAgICAgICAgCi0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIHVzZXJHZXN0dXJlSW5k
aWNhdG9yKG1fd2FzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlID8gRGVmaW5pdGVseVByb2Nlc3NpbmdV
c2VyR2VzdHVyZSA6IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgICAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciB1c2VyR2VzdHVyZUluZGljYXRvcihtX3VzZXJHZXN0dXJl
VG9Gb3J3YXJkKTsKICAgICAgICAgbV93aW5kb3ctPnBvc3RNZXNzYWdlVGltZXJGaXJlZCgqdGlt
ZXIpOwogICAgIH0KIApAQCAtMTc5LDcgKzE3OSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBtX2NoYW5uZWxzOwogICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gbV90YXJnZXRPcmlnaW47CiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4gbV9zdGFja1RyYWNlOwotICAgIGJvb2wgbV93YXNQcm9jZXNzaW5nVXNlckdlc3R1cmU7Cisg
ICAgUmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+IG1fdXNlckdlc3R1cmVUb0ZvcndhcmQ7CiB9Owog
CiB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PERPTVdpbmRvdyo+IERPTVdpbmRvd1NldDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDIwMzMyNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYx
OCw3ICsxNjE4LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
Z2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1l
LmRvY3VtZW50KCkpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Io
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50KCkpOwogCiAgICAgLy8gRklY
TUUgKGJ1ZyA2ODE4NSk6IHRoaXMgY2FsbCBzaG91bGQgYmUgbWFkZSBhdCBhbm90aGVyIGFic3Ry
YWN0aW9uIGxheWVyCiAgICAgbV9mcmFtZS5sb2FkZXIoKS5yZXNldE11bHRpcGxlRm9ybVN1Ym1p
c3Npb25Qcm90ZWN0aW9uKCk7CkBAIC0xNzQ2LDcgKzE3NDYsNyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VEb3VibGVDbGljCiAKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENh
cmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpOwogCi0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
Z2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1l
LmRvY3VtZW50KCkpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Io
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50KCkpOwogCiAgICAgLy8gV2Ug
Z2V0IHRoaXMgaW5zdGVhZCBvZiBhIHNlY29uZCBtb3VzZS11cCAKICAgICBtX21vdXNlUHJlc3Nl
ZCA9IGZhbHNlOwpAQCAtMTk4Nyw3ICsxOTg3LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZU1vdXNlUmVsZWFzZUV2ZQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgVXNl
ckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50KCkpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGdlc3R1cmVJbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50
KCkpOwogCiAjaWYgRU5BQkxFKFBBTl9TQ1JPTExJTkcpCiAgICAgbV9hdXRvc2Nyb2xsQ29udHJv
bGxlci0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50KTsKQEAgLTMw
NDcsNyArMzA0Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChjb25zdCBQbGF0Zm8K
ICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSwgbV9mcmFtZS5kb2N1bWVudCgpKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0
dXJlSW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgbV9mcmFtZS5kb2N1bWVudCgpKTsK
ICAgICBVc2VyVHlwaW5nR2VzdHVyZUluZGljYXRvciB0eXBpbmdHZXN0dXJlSW5kaWNhdG9yKG1f
ZnJhbWUpOwogCiAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUudmlldygpKQpAQCAt
MzgwMCw3ICszODAwLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29u
cwogCiAgICAgY29uc3QgVmVjdG9yPFBsYXRmb3JtVG91Y2hQb2ludD4mIHBvaW50cyA9IGV2ZW50
LnRvdWNoUG9pbnRzKCk7CiAKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNh
dG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsIG1fZnJhbWUuZG9jdW1lbnQoKSk7
CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihQcm9jZXNzaW5nVXNl
ckdlc3R1cmUsIG1fZnJhbWUuZG9jdW1lbnQoKSk7CiAKICAgICBib29sIGZyZXNoVG91Y2hFdmVu
dHMgPSB0cnVlOwogICAgIGJvb2wgYWxsVG91Y2hSZWxlYXNlZCA9IHRydWU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiAyMDMzMjcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3MCw3ICs0NzAsNyBAQCB2b2lkIEhpdFRlc3RSZXN1bHQ6OnRvZ2dsZU1lZGlh
RnVsbHNjcmVlCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQgPSB0aGlzLT5tZWRpYUVsZW1lbnQoKSkgewogICAgICAgICBpZiAobWVkaWFF
bGVtZW50LT5pc1ZpZGVvKCkgJiYgbWVkaWFFbGVtZW50LT5zdXBwb3J0c0Z1bGxzY3JlZW4oSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7Ci0gICAg
ICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3Np
bmdVc2VyR2VzdHVyZSwgJm1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCAmbWVk
aWFFbGVtZW50LT5kb2N1bWVudCgpKTsKICAgICAgICAgICAgIG1lZGlhRWxlbWVudC0+dG9nZ2xl
U3RhbmRhcmRGdWxsc2NyZWVuU3RhdGUoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ4NCw3ICs0
ODQsNyBAQCB2b2lkIEhpdFRlc3RSZXN1bHQ6OmVudGVyRnVsbHNjcmVlbkZvclZpCiAgICAgaWYg
KGlzPEhUTUxWaWRlb0VsZW1lbnQ+KG1lZGlhRWxlbWVudCkpIHsKICAgICAgICAgSFRNTFZpZGVv
RWxlbWVudCYgdmlkZW9FbGVtZW50ID0gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oKm1lZGlh
RWxlbWVudCk7CiAgICAgICAgIGlmICghdmlkZW9FbGVtZW50LmlzRnVsbHNjcmVlbigpICYmIG1l
ZGlhRWxlbWVudC0+c3VwcG9ydHNGdWxsc2NyZWVuKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkgewotICAgICAgICAgICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsICZtZWRpYUVs
ZW1lbnQtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgJm1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSk7
CiAgICAgICAgICAgICB2aWRlb0VsZW1lbnQuZW50ZXJGdWxsc2NyZWVuKCk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC04MTQsNyArODE0LDcgQEAgdm9pZCBIaXRUZXN0UmVzdWx0Ojp0b2dnbGVFbmhh
bmNlZEZ1bGxzYwogICAgICAgICByZXR1cm47CiAKICAgICBIVE1MVmlkZW9FbGVtZW50JiB2aWRl
b0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PigqbWVkaWFFbGVtZW50KTsKLSAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSwgJm1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgJm1lZGlhRWxlbWVudC0+ZG9j
dW1lbnQoKSk7CiAgICAgaWYgKHZpZGVvRWxlbWVudC5mdWxsc2NyZWVuTW9kZSgpID09IEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCiAg
ICAgICAgIHZpZGVvRWxlbWVudC5leGl0RnVsbHNjcmVlbigpOwogICAgIGVsc2UKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwMzMyNykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDE2LTA3LTE2ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYktpdCBBUEldIEFkZCBTUEkgdG8gdHJhY2sgbXVs
dGlwbGUgbmF2aWdhdGlvbnMgY2F1c2VkIGJ5IGEgc2luZ2xlIHVzZXIgZ2VzdHVyZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5ODU2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQ
SU9iamVjdC5oOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9BUElPYmplY3QubW06CisgICAgICAg
IChBUEk6Ok9iamVjdDo6bmV3T2JqZWN0KToKKyAgICAgICAgKiBTaGFyZWQvTmF2aWdhdGlvbkFj
dGlvbkRhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YTo6ZW5j
b2RlKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGE6OmRlY29kZSk6Cisg
ICAgICAgICogU2hhcmVkL05hdmlnYXRpb25BY3Rpb25EYXRhLmg6CisgICAgICAgICogU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElO
YXZpZ2F0aW9uQWN0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VySW5pdGlh
dGVkQWN0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3Bw
OgorICAgICAgICAoV0tQYWdlU2V0UGFnZVVJQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLTmF2aWdhdGlvbkFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tOYXZpZ2F0aW9u
QWN0aW9uIF9zaG91bGRPcGVuRXh0ZXJuYWxVUkxzXSk6CisgICAgICAgICgtW1dLTmF2aWdhdGlv
bkFjdGlvbiBfdXNlckluaXRpYXRlZEFjdGlvbl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tOYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlckluaXRpYXRlZEFjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0ZWRBY3Rpb24ubW06IEFkZGVkLgorICAgICAg
ICAoLVtfV0tVc2VySW5pdGlhdGVkQWN0aW9uIGRlYWxsb2NdKToKKyAgICAgICAgKC1bX1dLVXNl
ckluaXRpYXRlZEFjdGlvbiBkZXNjcmlwdGlvbl0pOgorICAgICAgICAoLVtfV0tVc2VySW5pdGlh
dGVkQWN0aW9uIGNvbnN1bWVdKToKKyAgICAgICAgKC1bX1dLVXNlckluaXRpYXRlZEFjdGlvbiBp
c0NvbnN1bWVkXSk6CisgICAgICAgICgtW19XS1VzZXJJbml0aWF0ZWRBY3Rpb24gX2FwaU9iamVj
dF0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckluaXRpYXRlZEFjdGlv
bkludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAoQVBJOjp3cmFwcGVyKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0
ZTo6VUlDbGllbnQ6OmNyZWF0ZU5ld1BhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lk
ZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6c2h1dERvd24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmZyYW1lQ291bnRJblBhZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnVzZXJJbml0aWF0ZWRBY3Rpdml0eVRv
a2VuKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpkaWREZXN0cm95VXNlckdl
c3R1cmVUb2tlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6Y2FuVGVybWlu
YXRlQ2hpbGRQcm9jZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cmVzcG9uc2l2ZW5lc3NUaW1lcik6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpkaWRDbGlja05vdGlmaWNhdGlvbik6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpQbHVnaW5WaWV3OjpwZXJmb3JtRnJhbWVMb2FkVVJMUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OlBsdWdpblZpZXc6OmV2YWx1YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9t
ZUNsaWVudDo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNvbnRleHRNZW51Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4
dE1lbnVDbGllbnQ6OnNlYXJjaFdpdGhHb29nbGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp3ZWJQYWdlR3JvdXApOgor
ICAgICAgICAoV2ViS2l0OjpuZXh0VXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp1c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnVzZXJHZXN0dXJlVG9rZW5EZXN0cm95ZWQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpjbGVhclJlc291cmNlQ2FjaGVzKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
cHJlc2VudGVyQXBwbGljYXRpb25QaWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6cGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFzdFNlZWspOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjYW5uaW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0QXVkaW9N
ZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6CisKIDIwMTYtMDctMTYgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVuYW1lIGZhc3RHZXRBdHRyaWJ1dGUgdG8g
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbgpJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL05hdmlnYXRpb25BY3Rpb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAyMDMzMjcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKICNpbmNs
dWRlICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKQEAgLTQwLDcgKzQxLDcgQEAgdm9pZCBOYXZpZ2F0aW9uQWN0aW9uRGF0YTo6ZW5jb2Rl
KElQQzo6QQogICAgIGVuY29kZXIuZW5jb2RlRW51bShtb2RpZmllcnMpOwogICAgIGVuY29kZXIu
ZW5jb2RlRW51bShtb3VzZUJ1dHRvbik7CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHN5bnRoZXRp
Y0NsaWNrVHlwZSk7Ci0gICAgZW5jb2RlciA8PCBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZTsKKyAg
ICBlbmNvZGVyIDw8IHVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwg
Y2FuSGFuZGxlUmVxdWVzdDsKICAgICBlbmNvZGVyLmVuY29kZUVudW0oc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeSk7CiAgICAgZW5jb2RlciA8PCBkb3dubG9hZEF0dHJpYnV0ZTsKQEAgLTU2
LDcgKzU3LDcgQEAgYm9vbCBOYXZpZ2F0aW9uQWN0aW9uRGF0YTo6ZGVjb2RlKElQQzo6QQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LnN5
bnRoZXRpY0NsaWNrVHlwZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5pc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQudXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2FuSGFuZGxlUmVx
dWVzdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5oCShyZXZpc2lvbiAyMDMzMjcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lTG9hZGVyVHlwZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNh
dG9yLmg+CiAKIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgQXJndW1lbnREZWNvZGVyOwpAQCAtNDQs
NyArNDUsNyBAQCBzdHJ1Y3QgTmF2aWdhdGlvbkFjdGlvbkRhdGEgewogICAgIFdlYkV2ZW50OjpN
b2RpZmllcnMgbW9kaWZpZXJzIHsgfTsKICAgICBXZWJNb3VzZUV2ZW50OjpCdXR0b24gbW91c2VC
dXR0b24geyBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbiB9OwogICAgIFdlYk1vdXNlRXZlbnQ6OlN5
bnRoZXRpY0NsaWNrVHlwZSBzeW50aGV0aWNDbGlja1R5cGUgeyBXZWJNb3VzZUV2ZW50OjpOb1Rh
cCB9OwotICAgIGJvb2wgaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgeyBmYWxzZSB9OworICAgIHVp
bnQ2NF90IHVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyOwogICAgIGJvb2wgY2FuSGFuZGxlUmVx
dWVzdCB7IGZhbHNlIH07CiAgICAgV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGlj
eSBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHsgV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cgfTsKICAgICBXVEY6OlN0cmluZyBkb3dubG9h
ZEF0dHJpYnV0ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyMDMzMjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvVGltaW5nRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Vc2VyU2NyaXB0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyU3R5bGVTaGVldC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvVmlld3BvcnRBcmd1bWVudHMuaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvQVBJT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL0FQSS9BUElPYmplY3QuaAkocmV2aXNpb24gMjAzMzI3KQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL0FQSS9BUElPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgVXNlckNvbnRlbnRFeHRlbnNpb24sCiAgICAgICAgIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUsCiAgICAgICAgIFVzZXJDb250ZW50V29ybGQsCisgICAgICAgIFVz
ZXJJbml0aWF0ZWRBY3Rpb24sCiAgICAgICAgIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVjaywKICAg
ICAgICAgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QsCiAgICAgICAgIFZpYnJhdGlvbiwKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQkocmV2aXNpb24gMjAz
MzI3KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQAogI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFs
LmgiCiAjaW1wb3J0ICJfV0tVc2VyQ29udGVudFdvcmxkSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9X
S1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVXNlclN0eWxlU2hl
ZXRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVmlzaXRlZExpbmtTdG9yZUludGVybmFsLmgiCiAK
QEAgLTIzMSw2ICsyMzIsMTAgQEAgdm9pZCogT2JqZWN0OjpuZXdPYmplY3Qoc2l6ZV90IHNpemUs
IFR5cAogICAgICAgICB3cmFwcGVyID0gW19XS1VzZXJDb250ZW50V29ybGQgYWxsb2NdOwogICAg
ICAgICBicmVhazsKIAorICAgIGNhc2UgVHlwZTo6VXNlckluaXRpYXRlZEFjdGlvbjoKKyAgICAg
ICAgd3JhcHBlciA9IFtfV0tVc2VySW5pdGlhdGVkQWN0aW9uIGFsbG9jXTsKKyAgICAgICAgYnJl
YWs7CisKICAgICBjYXNlIFR5cGU6OlVzZXJTY3JpcHQ6CiAgICAgICAgIHdyYXBwZXIgPSBbV0tV
c2VyU2NyaXB0IGFsbG9jXTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjAzMzI3KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1ODgs
OSArMzU4OCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhCiAg
ICAgICAgIGVsc2UgaWYgKG9yaWdpbmF0aW5nRnJhbWUpCiAgICAgICAgICAgICBzb3VyY2VGcmFt
ZUluZm8gPSBBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKCpvcmlnaW5hdGluZ0ZyYW1lLCBvcmlnaW5h
dGluZ0ZyYW1lU2VjdXJpdHlPcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSk7CiAKKyAgICAgICAgYXV0
byB1c2VySW5pdGlhdGVkQWN0aXZpdHkgPSBtX3Byb2Nlc3MtPnVzZXJJbml0aWF0ZWRBY3Rpdml0
eShuYXZpZ2F0aW9uQWN0aW9uRGF0YS51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcik7CiAgICAg
ICAgIGJvb2wgc2hvdWxkT3BlbkFwcExpbmtzID0gIW1fc2hvdWxkU3VwcHJlc3NBcHBMaW5rc0lu
TmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiAmJiAoIWRlc3RpbmF0aW9uRnJhbWVJbmZvIHx8
IGRlc3RpbmF0aW9uRnJhbWVJbmZvLT5pc01haW5GcmFtZSgpKSAmJiAhaG9zdHNBcmVFcXVhbChV
UkwoUGFyc2VkVVJMU3RyaW5nLCBtX21haW5GcmFtZS0+dXJsKCkpLCByZXF1ZXN0LnVybCgpKTsK
IAotICAgICAgICBhdXRvIG5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246
OmNyZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLmdldCgpLCBkZXN0
aW5hdGlvbkZyYW1lSW5mby5nZXQoKSwgcmVxdWVzdCwgb3JpZ2luYWxSZXF1ZXN0LnVybCgpLCBz
aG91bGRPcGVuQXBwTGlua3MpOworICAgICAgICBhdXRvIG5hdmlnYXRpb25BY3Rpb24gPSBBUEk6
Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJh
bWVJbmZvLmdldCgpLCBkZXN0aW5hdGlvbkZyYW1lSW5mby5nZXQoKSwgcmVxdWVzdCwgb3JpZ2lu
YWxSZXF1ZXN0LnVybCgpLCBzaG91bGRPcGVuQXBwTGlua3MsIFdURk1vdmUodXNlckluaXRpYXRl
ZEFjdGl2aXR5KSk7CiAKICAgICAgICAgbV9uYXZpZ2F0aW9uQ2xpZW50LT5kZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKCp0aGlzLCBuYXZpZ2F0aW9uQWN0aW9uLmdldCgpLCBXVEZNb3Zl
KGxpc3RlbmVyKSwgbV9wcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRh
Lm9iamVjdCgpKS5nZXQoKSk7CiAgICAgfSBlbHNlCkBAIC0zNjIyLDggKzM2MjMsOSBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmV3V2luCiAgICAgICAgIGlmIChmcmFtZSkK
ICAgICAgICAgICAgIHNvdXJjZUZyYW1lSW5mbyA9IEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoKmZy
YW1lLCBmcmFtZVNlY3VyaXR5T3JpZ2luLnNlY3VyaXR5T3JpZ2luKCkpOwogCisgICAgICAgIGF1
dG8gdXNlckluaXRpYXRlZEFjdGl2aXR5ID0gbV9wcm9jZXNzLT51c2VySW5pdGlhdGVkQWN0aXZp
dHkobmF2aWdhdGlvbkFjdGlvbkRhdGEudXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIpOwogICAg
ICAgICBib29sIHNob3VsZE9wZW5BcHBMaW5rcyA9ICFob3N0c0FyZUVxdWFsKFVSTChQYXJzZWRV
UkxTdHJpbmcsIG1fbWFpbkZyYW1lLT51cmwoKSksIHJlcXVlc3QudXJsKCkpOwotICAgICAgICBh
dXRvIG5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShuYXZp
Z2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLmdldCgpLCBudWxscHRyLCByZXF1ZXN0
LCByZXF1ZXN0LnVybCgpLCBzaG91bGRPcGVuQXBwTGlua3MpOworICAgICAgICBhdXRvIG5hdmln
YXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShuYXZpZ2F0aW9uQWN0
aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLmdldCgpLCBudWxscHRyLCByZXF1ZXN0LCByZXF1ZXN0
LnVybCgpLCBzaG91bGRPcGVuQXBwTGlua3MsIFdURk1vdmUodXNlckluaXRpYXRlZEFjdGl2aXR5
KSk7CiAKICAgICAgICAgbV9uYXZpZ2F0aW9uQ2xpZW50LT5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uKCp0aGlzLCBuYXZpZ2F0aW9uQWN0aW9uLmdldCgpLCBXVEZNb3ZlKGxpc3RlbmVy
KSwgbV9wcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgp
KS5nZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuY3BwCShyZXZpc2lvbiAyMDMzMjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSw4IEBAIHZv
aWQgV2ViUHJvY2Vzc1Byb3h5OjpzaHV0RG93bigpCiAgICAgICAgIHdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5LT5yZW1vdmVQcm9jZXNzKCp0aGlzKTsKICAgICBtX3dlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3hpZXMuY2xlYXIoKTsKIAorICAgIG1fdXNlckluaXRpYXRlZEFjdGlvbk1h
cC5jbGVhcigpOworCiAgICAgbV9wcm9jZXNzUG9vbC0+ZGlzY29ubmVjdFByb2Nlc3ModGhpcyk7
CiB9CiAKQEAgLTY2NSw2ICs2NjcsMjEgQEAgc2l6ZV90IFdlYlByb2Nlc3NQcm94eTo6ZnJhbWVD
b3VudEluUGFnZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1JlZlB0cjxBUEk6OlVzZXJJbml0
aWF0ZWRBY3Rpb24+IFdlYlByb2Nlc3NQcm94eTo6dXNlckluaXRpYXRlZEFjdGl2aXR5KHVpbnQ2
NF90IGlkZW50aWZpZXIpCit7CisgICAgaWYgKCFVc2VySW5pdGlhdGVkQWN0aW9uTWFwOjppc1Zh
bGlkS2V5KGlkZW50aWZpZXIpIHx8ICFpZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGF1dG8gcmVzdWx0ID0gbV91c2VySW5pdGlhdGVkQWN0aW9uTWFwLmVuc3VyZShp
ZGVudGlmaWVyLCBbaWRlbnRpZmllcl0geyByZXR1cm4gQVBJOjpVc2VySW5pdGlhdGVkQWN0aW9u
OjpjcmVhdGUoaWRlbnRpZmllcik7IH0pOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlOworfQorCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVVzZXJHZXN0dXJlVG9r
ZW4odWludDY0X3QgaWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoVXNlckluaXRpYXRlZEFjdGlv
bk1hcDo6aXNWYWxpZEtleShpZGVudGlmaWVyKSk7CisgICAgbV91c2VySW5pdGlhdGVkQWN0aW9u
TWFwLnJlbW92ZShpZGVudGlmaWVyKTsKK30KKwogYm9vbCBXZWJQcm9jZXNzUHJveHk6OmNhblRl
cm1pbmF0ZUNoaWxkUHJvY2VzcygpCiB7CiAgICAgaWYgKCFtX3BhZ2VNYXAuaXNFbXB0eSgpKQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkocmV2aXNp
b24gMjAzMzI3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkFQSVNlc3Npb24uaCIKKyNpbmNsdWRlICJBUElVc2VySW5pdGlhdGVkQWN0aW9uLmgiCiAj
aW5jbHVkZSAiQ2hpbGRQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgpAQCAtNjcsNiAr
NjgsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2Vi
QmFja0ZvcndhcmRMaXN0SXRlbT4+IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1NYXA7CiAgICAgdHlw
ZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViRnJhbWVQcm94eT4+IFdlYkZyYW1lUHJv
eHlNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBXZWJQYWdlUHJveHkqPiBXZWJQ
YWdlUHJveHlNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8QVBJOjpV
c2VySW5pdGlhdGVkQWN0aW9uPj4gVXNlckluaXRpYXRlZEFjdGlvbk1hcDsKIAogICAgIHN0YXRp
YyBSZWY8V2ViUHJvY2Vzc1Byb3h5PiBjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wmKTsKICAgICB+V2Vi
UHJvY2Vzc1Byb3h5KCk7CkBAIC05NCw2ICs5Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZERl
c3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eSYpOwogCiAgICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogd2ViQmFja0ZvcndhcmRJ
dGVtKHVpbnQ2NF90IGl0ZW1JRCkgY29uc3Q7CisgICAgUmVmUHRyPEFQSTo6VXNlckluaXRpYXRl
ZEFjdGlvbj4gdXNlckluaXRpYXRlZEFjdGl2aXR5KHVpbnQ2NF90KTsKIAogICAgIFJlc3BvbnNp
dmVuZXNzVGltZXImIHJlc3BvbnNpdmVuZXNzVGltZXIoKSB7IHJldHVybiBtX3Jlc3BvbnNpdmVu
ZXNzVGltZXI7IH0KIApAQCAtMTY3LDcgKzE3MCw4IEBAIHByaXZhdGU6CiAgICAgLy8gSVBDIG1l
c3NhZ2UgaGFuZGxlcnMuCiAgICAgdm9pZCBhZGRCYWNrRm9yd2FyZEl0ZW0odWludDY0X3QgaXRl
bUlELCB1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFBhZ2VTdGF0ZSYpOwogICAgIHZvaWQgZGlkRGVz
dHJveUZyYW1lKHVpbnQ2NF90KTsKLSAgICAKKyAgICB2b2lkIGRpZERlc3Ryb3lVc2VyR2VzdHVy
ZVRva2VuKHVpbnQ2NF90KTsKKwogICAgIHZvaWQgc2hvdWxkVGVybWluYXRlKGJvb2wmIHNob3Vs
ZFRlcm1pbmF0ZSk7CiAKICAgICB2b2lkIGRpZEZldGNoV2Vic2l0ZURhdGEodWludDY0X3QgY2Fs
bGJhY2tJRCwgY29uc3QgV2Vic2l0ZURhdGEmKTsKQEAgLTIzNCw2ICsyMzgsNyBAQCBwcml2YXRl
OgogICAgIFdlYlBhZ2VQcm94eU1hcCBtX3BhZ2VNYXA7CiAgICAgV2ViRnJhbWVQcm94eU1hcCBt
X2ZyYW1lTWFwOwogICAgIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1NYXAgbV9iYWNrRm9yd2FyZExp
c3RJdGVtTWFwOworICAgIFVzZXJJbml0aWF0ZWRBY3Rpb25NYXAgbV91c2VySW5pdGlhdGVkQWN0
aW9uTWFwOwogCiAgICAgSGFzaFNldDxWaXNpdGVkTGlua1N0b3JlKj4gbV92aXNpdGVkTGlua1N0
b3JlczsKICAgICBIYXNoU2V0PFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Kj4gbV93ZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94aWVzOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMDMz
MjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lm1lc3NhZ2Vz
LmluCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw4IEBAIG1lc3NhZ2VzIC0+IFdlYlByb2Nl
c3NQcm94eSBMZWdhY3lSZWNlaXYKICAgICBBZGRCYWNrRm9yd2FyZEl0ZW0odWludDY0X3QgaXRl
bUlELCB1aW50NjRfdCBwYWdlSUQsIHN0cnVjdCBXZWJLaXQ6OlBhZ2VTdGF0ZSBwYWdlU3RhdGUp
CiAgICAgRGlkRGVzdHJveUZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpIAogCisgICAgRGlkRGVzdHJv
eVVzZXJHZXN0dXJlVG9rZW4odWludDY0X3QgdXNlckdlc3R1cmVUb2tlbklEKSAKKwogICAgIFNo
b3VsZFRlcm1pbmF0ZSgpIC0+IChib29sIHNob3VsZFRlcm1pbmF0ZSkKIAogICAgIEVuYWJsZVN1
ZGRlblRlcm1pbmF0aW9uKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
TmF2aWdhdGlvbkFjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5oCShyZXZpc2lvbiAyMDMzMjcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25BY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsMjcgKzI4LDI3IEBACiAKICNpbmNsdWRlICJBUElGcmFtZUluZm8uaCIKICNpbmNs
dWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJBUElVc2VySW5pdGlhdGVkQWN0aW9uLmgiCiAj
aW5jbHVkZSAiTmF2aWdhdGlvbkFjdGlvbkRhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAKIG5hbWVzcGFjZSBBUEkg
ewogCi1jbGFzcyBGcmFtZUluZm87Ci0KIGNsYXNzIE5hdmlnYXRpb25BY3Rpb24gZmluYWwgOiBw
dWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6Ok5hdmlnYXRpb25BY3Rpb24+IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPE5hdmlnYXRpb25BY3Rpb24+IGNyZWF0ZShjb25zdCBXZWJLaXQ6
Ok5hdmlnYXRpb25BY3Rpb25EYXRhJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgQVBJOjpGcmFtZUlu
Zm8qIHNvdXJjZUZyYW1lLCBBUEk6OkZyYW1lSW5mbyogdGFyZ2V0RnJhbWUsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6VVJMJiBvcmlnaW5h
bFVSTCwgYm9vbCBzaG91bGRPcGVuQXBwTGlua3MpCisgICAgc3RhdGljIFJlZjxOYXZpZ2F0aW9u
QWN0aW9uPiBjcmVhdGUoY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2aWdh
dGlvbkFjdGlvbkRhdGEsIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VGcmFtZSwgQVBJOjpGcmFtZUlu
Zm8qIHRhcmdldEZyYW1lLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFdlYkNvcmU6OlVSTCYgb3JpZ2luYWxVUkwsIGJvb2wgc2hvdWxkT3BlbkFwcExpbmtz
LCBSZWZQdHI8VXNlckluaXRpYXRlZEFjdGlvbj4gdXNlckluaXRpYXRlZEFjdGlvbikKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5hdmlnYXRpb25BY3Rpb24obmF2aWdhdGlv
bkFjdGlvbkRhdGEsIHNvdXJjZUZyYW1lLCB0YXJnZXRGcmFtZSwgcmVxdWVzdCwgb3JpZ2luYWxV
UkwsIHNob3VsZE9wZW5BcHBMaW5rcykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBO
YXZpZ2F0aW9uQWN0aW9uKG5hdmlnYXRpb25BY3Rpb25EYXRhLCBzb3VyY2VGcmFtZSwgdGFyZ2V0
RnJhbWUsIHJlcXVlc3QsIG9yaWdpbmFsVVJMLCBzaG91bGRPcGVuQXBwTGlua3MsIFdURk1vdmUo
dXNlckluaXRpYXRlZEFjdGlvbikpKTsKICAgICB9CiAKLSAgICBOYXZpZ2F0aW9uQWN0aW9uKGNv
bnN0IFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGEmIG5hdmlnYXRpb25BY3Rpb25EYXRhLCBB
UEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUsIEFQSTo6RnJhbWVJbmZvKiB0YXJnZXRGcmFtZSwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpV
UkwmIG9yaWdpbmFsVVJMLCBib29sIHNob3VsZE9wZW5BcHBMaW5rcykKKyAgICBOYXZpZ2F0aW9u
QWN0aW9uKGNvbnN0IFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGEmIG5hdmlnYXRpb25BY3Rp
b25EYXRhLCBBUEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUsIEFQSTo6RnJhbWVJbmZvKiB0YXJn
ZXRGcmFtZSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBX
ZWJDb3JlOjpVUkwmIG9yaWdpbmFsVVJMLCBib29sIHNob3VsZE9wZW5BcHBMaW5rcywgUmVmUHRy
PFVzZXJJbml0aWF0ZWRBY3Rpb24+IHVzZXJJbml0aWF0ZWRBY3Rpb24pCiAgICAgICAgIDogbV9z
b3VyY2VGcmFtZShzb3VyY2VGcmFtZSkKICAgICAgICAgLCBtX3RhcmdldEZyYW1lKHRhcmdldEZy
YW1lKQogICAgICAgICAsIG1fcmVxdWVzdChyZXF1ZXN0KQogICAgICAgICAsIG1fb3JpZ2luYWxV
Ukwob3JpZ2luYWxVUkwpCiAgICAgICAgICwgbV9zaG91bGRPcGVuQXBwTGlua3Moc2hvdWxkT3Bl
bkFwcExpbmtzKQorICAgICAgICAsIG1fdXNlckluaXRpYXRlZEFjdGlvbihXVEZNb3ZlKHVzZXJJ
bml0aWF0ZWRBY3Rpb24pKQogICAgICAgICAsIG1fbmF2aWdhdGlvbkFjdGlvbkRhdGEobmF2aWdh
dGlvbkFjdGlvbkRhdGEpCiAgICAgewogICAgIH0KQEAgLTYzLDEyICs2MywxNCBAQCBwdWJsaWM6
CiAgICAgV2ViS2l0OjpXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycygpIGNvbnN0IHsgcmV0
dXJuIG1fbmF2aWdhdGlvbkFjdGlvbkRhdGEubW9kaWZpZXJzOyB9CiAgICAgV2ViS2l0OjpXZWJN
b3VzZUV2ZW50OjpCdXR0b24gbW91c2VCdXR0b24oKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRp
b25BY3Rpb25EYXRhLm1vdXNlQnV0dG9uOyB9CiAgICAgV2ViS2l0OjpXZWJNb3VzZUV2ZW50OjpT
eW50aGV0aWNDbGlja1R5cGUgc3ludGhldGljQ2xpY2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9u
YXZpZ2F0aW9uQWN0aW9uRGF0YS5zeW50aGV0aWNDbGlja1R5cGU7IH0KLSAgICBib29sIGlzUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9uYXZpZ2F0aW9uQWN0aW9uRGF0
YS5pc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZTsgfQogICAgIGJvb2wgY2FuSGFuZGxlUmVxdWVzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbmF2aWdhdGlvbkFjdGlvbkRhdGEuY2FuSGFuZGxlUmVxdWVzdDsg
fQogICAgIGJvb2wgc2hvdWxkT3BlbkV4dGVybmFsU2NoZW1lcygpIGNvbnN0IHsgcmV0dXJuIG1f
bmF2aWdhdGlvbkFjdGlvbkRhdGEuc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSA9PSBXZWJD
b3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxvdyB8fCBtX25hdmln
YXRpb25BY3Rpb25EYXRhLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPT0gV2ViQ29yZTo6
U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3dFeHRlcm5hbFNjaGVtZXM7
IH0KICAgICBib29sIHNob3VsZE9wZW5BcHBMaW5rcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxk
T3BlbkFwcExpbmtzICYmIG1fbmF2aWdhdGlvbkFjdGlvbkRhdGEuc2hvdWxkT3BlbkV4dGVybmFs
VVJMc1BvbGljeSA9PSBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91
bGRBbGxvdzsgfQogICAgIGJvb2wgc2hvdWxkUGVyZm9ybURvd25sb2FkKCkgY29uc3QgeyByZXR1
cm4gIW1fbmF2aWdhdGlvbkFjdGlvbkRhdGEuZG93bmxvYWRBdHRyaWJ1dGUuaXNOdWxsKCk7IH0K
IAorICAgIGJvb2wgaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdCB7IHJldHVybiAhIW1f
dXNlckluaXRpYXRlZEFjdGlvbjsgfQorICAgIFVzZXJJbml0aWF0ZWRBY3Rpb24qIHVzZXJJbml0
aWF0ZWRBY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3VzZXJJbml0aWF0ZWRBY3Rpb24uZ2V0KCk7
IH0KKwogcHJpdmF0ZToKICAgICBSZWZQdHI8RnJhbWVJbmZvPiBtX3NvdXJjZUZyYW1lOwogICAg
IFJlZlB0cjxGcmFtZUluZm8+IG1fdGFyZ2V0RnJhbWU7CkBAIC03OCw2ICs4MCw4IEBAIHByaXZh
dGU6CiAKICAgICBib29sIG1fc2hvdWxkT3BlbkFwcExpbmtzOwogCisgICAgUmVmUHRyPFVzZXJJ
bml0aWF0ZWRBY3Rpb24+IG1fdXNlckluaXRpYXRlZEFjdGlvbjsKKwogICAgIFdlYktpdDo6TmF2
aWdhdGlvbkFjdGlvbkRhdGEgbV9uYXZpZ2F0aW9uQWN0aW9uRGF0YTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckluaXRpYXRlZEFjdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckluaXRpYXRlZEFj
dGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
VXNlckluaXRpYXRlZEFjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorCituYW1l
c3BhY2UgQVBJIHsKKworY2xhc3MgVXNlckluaXRpYXRlZEFjdGlvbiBmaW5hbCA6IHB1YmxpYyBB
UEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlVzZXJJbml0aWF0ZWRBY3Rpb24+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFVzZXJJbml0aWF0ZWRBY3Rpb24+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVc2VySW5pdGlhdGVkQWN0aW9uKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIH5Vc2VySW5pdGlhdGVkQWN0aW9uKCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHZvaWQgc2V0Q29uc3VtZWQoKSB7IG1fY29uc3VtZWQgPSB0cnVlOyB9Cisg
ICAgYm9vbCBjb25zdW1lZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3VtZWQ7IH0KKworcHJpdmF0
ZToKKyAgICBVc2VySW5pdGlhdGVkQWN0aW9uKHVpbnQ2NF90IGlkZW50aWZpZXIpCisgICAgICAg
IDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgbV9j
b25zdW1lZCA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgQVBJCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24gMjAzMzI3KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2OTgsNyArMTY5OCw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KFdLUGFnZVJl
ZiBwYWcKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZUZyYW1lSW5mbyA9IEFQSTo6RnJhbWVJ
bmZvOjpjcmVhdGUoKmluaXRpYXRpbmdGcmFtZSwgc2VjdXJpdHlPcmlnaW5EYXRhLnNlY3VyaXR5
T3JpZ2luKCkpOwogCiAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRPcGVuQXBwTGlua3MgPSAh
aG9zdHNBcmVFcXVhbChXZWJDb3JlOjpVUkwoV2ViQ29yZTo6UGFyc2VkVVJMU3RyaW5nLCBpbml0
aWF0aW5nRnJhbWUtPnVybCgpKSwgcmVzb3VyY2VSZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgICAg
ICAgICBhdXRvIGFwaU5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNy
ZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLnB0cigpLCBudWxscHRy
LCByZXNvdXJjZVJlcXVlc3QsIFdlYkNvcmU6OlVSTCgpLCBzaG91bGRPcGVuQXBwTGlua3MpOwor
ICAgICAgICAgICAgICAgIGF1dG8gYXBpTmF2aWdhdGlvbkFjdGlvbiA9IEFQSTo6TmF2aWdhdGlv
bkFjdGlvbjo6Y3JlYXRlKG5hdmlnYXRpb25BY3Rpb25EYXRhLCBzb3VyY2VGcmFtZUluZm8ucHRy
KCksIG51bGxwdHIsIHJlc291cmNlUmVxdWVzdCwgV2ViQ29yZTo6VVJMKCksIHNob3VsZE9wZW5B
cHBMaW5rcywgbnVsbHB0ciAvKkZJWE1FICovKTsKIAogICAgICAgICAgICAgICAgIGF1dG8gYXBp
V2luZG93RmVhdHVyZXMgPSBBUEk6OldpbmRvd0ZlYXR1cmVzOjpjcmVhdGUod2luZG93RmVhdHVy
ZXMpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdh
dGlvbkFjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLTmF2aWdhdGlvbkFjdGlvbi5tbQkocmV2aXNpb24gMjAzMzI3KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25BY3Rpb24ubW0JKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2ltcG9ydCAiTmF2aWdhdGlvbkFjdGlvbkRh
dGEuaCIKICNpbXBvcnQgIldLRnJhbWVJbmZvSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS1VzZXJJ
bml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBA
aW1wbGVtZW50YXRpb24gV0tOYXZpZ2F0aW9uQWN0aW9uCkBAIC0yMTgsNiArMjE5LDE0IEBAIC0g
KEJPT0wpX3Nob3VsZE9wZW5FeHRlcm5hbFVSTHMKICAgICByZXR1cm4gW3NlbGYgX3Nob3VsZE9w
ZW5FeHRlcm5hbFNjaGVtZXNdOwogfQogCistIChfV0tVc2VySW5pdGlhdGVkQWN0aW9uICopX3Vz
ZXJJbml0aWF0ZWRBY3Rpb24KK3sKKyAgICBhdXRvIHVzZXJJbml0aWF0ZWRBY3Rpb24gPSBfbmF2
aWdhdGlvbkFjdGlvbi0+dXNlckluaXRpYXRlZEFjdGlvbigpOworICAgIGlmICh1c2VySW5pdGlh
dGVkQWN0aW9uKQorICAgICAgICByZXR1cm4gd3JhcHBlcigqdXNlckluaXRpYXRlZEFjdGlvbik7
CisgICAgcmV0dXJuIG5pbDsKK30KKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZpZ2F0aW9u
QWN0aW9uUHJpdmF0ZS5oCShyZXZpc2lvbiAyMDMzMjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkFjdGlvblByaXZhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAorQGNsYXNzIF9XS1Vz
ZXJJbml0aWF0ZWRBY3Rpb247CisKICNpZiBUQVJHRVRfT1NfSVBIT05FCiB0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBXS1N5bnRoZXRpY0NsaWNrVHlwZSkgewogICAgIFdLU3ludGhldGljQ2xp
Y2tUeXBlTm9UYXAsCkBAIC00NSw2ICs0Nyw4IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFdLU3ludGhldGljQ2wKIAogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9z
aG91bGRPcGVuRXh0ZXJuYWxVUkxzIFdLX0FQSV9ERVBSRUNBVEVEKCJ1c2UgX3Nob3VsZE9wZW5F
eHRlcm5hbFNjaGVtZXMgYW5kIF9zaG91bGRPcGVuQXBwTGlua3MiLCBtYWNvc3goMTAuMTEsIDEw
LjExKSwgaW9zKDkuMCwgOS4wKSk7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
X1dLVXNlckluaXRpYXRlZEFjdGlvbiAqX3VzZXJJbml0aWF0ZWRBY3Rpb247CisKICNpZiBUQVJH
RVRfT1NfSVBIT05FCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLU3ludGhldGlj
Q2xpY2tUeXBlIF9zeW50aGV0aWNDbGlja1R5cGUgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkp
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Vz
ZXJJbml0aWF0ZWRBY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0ZWRBY3Rpb24uaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0ZWRBY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8
V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK1dL
X0NMQVNTX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgX1dLVXNlckluaXRpYXRlZEFjdGlvbiA6IE5TT2JqZWN0CisKKy0gKHZvaWQpY29u
c3VtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyPWlzQ29uc3VtZWQp
IEJPT0wgY29uc3VtZWQ7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VySW5pdGlh
dGVkQWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckluaXRpYXRlZEFjdGlvbi5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0ZWRBY3Rpb24ubW0JKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFsLmgiCisKKyNpZiBX
S19BUElfRU5BQkxFRAorCitAaW1wbGVtZW50YXRpb24gX1dLVXNlckluaXRpYXRlZEFjdGlvbgor
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBfdXNlckluaXRpYXRlZEFjdGlvbi0+flVzZXJJbml0
aWF0ZWRBY3Rpb24oKTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoTlNTdHJpbmcg
KilkZXNjcmlwdGlvbgoreworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IjwlQDogJXA7IGNvbnN1bWVkID0gJXM+IiwgTlNTdHJpbmdGcm9tQ2xhc3Moc2VsZi5jbGFzcyks
IHNlbGYsIHNlbGYuY29uc3VtZWQgPyAiWUVTIiA6ICJOTyJdOworfQorCistICh2b2lkKWNvbnN1
bWUKK3sKKyAgICBfdXNlckluaXRpYXRlZEFjdGlvbi0+c2V0Q29uc3VtZWQoKTsKK30KKworLSAo
Qk9PTClpc0NvbnN1bWVkCit7CisgICAgcmV0dXJuIF91c2VySW5pdGlhdGVkQWN0aW9uLT5jb25z
dW1lZCgpOworfQorCisjcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRp
b24KKworLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK3sKKyAgICByZXR1cm4gKl91c2VySW5p
dGlhdGVkQWN0aW9uOworfQorCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0
aWF0ZWRBY3Rpb25JbnRlcm5hbC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIl9XS1VzZXJJ
bml0aWF0ZWRBY3Rpb24uaCIKKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSVVz
ZXJJbml0aWF0ZWRBY3Rpb24uaCIKKyNpbXBvcnQgIldLT2JqZWN0LmgiCisjaW1wb3J0IDx3dGYv
VmVjdG9yLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEFQ
SSB7CisKK2lubGluZSBfV0tVc2VySW5pdGlhdGVkQWN0aW9uICp3cmFwcGVyKFVzZXJJbml0aWF0
ZWRBY3Rpb24mIHVzZXJJbml0aWF0ZWRBY3Rpb24pCit7CisgICAgQVNTRVJUKFtVc2VySW5pdGlh
dGVkQWN0aW9uLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tVc2VySW5pdGlhdGVkQWN0aW9u
IGNsYXNzXV0pOworICAgIHJldHVybiAoX1dLVXNlckluaXRpYXRlZEFjdGlvbiAqKXVzZXJJbml0
aWF0ZWRBY3Rpb24ud3JhcHBlcigpOworfQorCit9CisKK0BpbnRlcmZhY2UgX1dLVXNlckluaXRp
YXRlZEFjdGlvbiAoKSA8V0tPYmplY3Q+IHsKK0BwYWNrYWdlCisgICAgQVBJOjpPYmplY3RTdG9y
YWdlPEFQSTo6VXNlckluaXRpYXRlZEFjdGlvbj4gX3VzZXJJbml0aWF0ZWRBY3Rpb247Cit9CitA
ZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1VJRGVs
ZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1VJ
RGVsZWdhdGUubW0JKHJldmlzaW9uIDIwMzMyNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db2NvYS9VSURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAg
UGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gVUlEZWxlZwogICAgIGF1dG8gc291cmNl
RnJhbWVJbmZvID0gQVBJOjpGcmFtZUluZm86OmNyZWF0ZSgqaW5pdGlhdGluZ0ZyYW1lLCBzZWN1
cml0eU9yaWdpbkRhdGEuc2VjdXJpdHlPcmlnaW4oKSk7CiAKICAgICBib29sIHNob3VsZE9wZW5B
cHBMaW5rcyA9ICFob3N0c0FyZUVxdWFsKFdlYkNvcmU6OlVSTChXZWJDb3JlOjpQYXJzZWRVUkxT
dHJpbmcsIGluaXRpYXRpbmdGcmFtZS0+dXJsKCkpLCByZXF1ZXN0LnVybCgpKTsKLSAgICBhdXRv
IGFwaU5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShuYXZp
Z2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLnB0cigpLCBudWxscHRyLCByZXF1ZXN0
LCBXZWJDb3JlOjpVUkwoKSwgc2hvdWxkT3BlbkFwcExpbmtzKTsKKyAgICBhdXRvIGFwaU5hdmln
YXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShuYXZpZ2F0aW9uQWN0
aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLnB0cigpLCBudWxscHRyLCByZXF1ZXN0LCBXZWJDb3Jl
OjpVUkwoKSwgc2hvdWxkT3BlbkFwcExpbmtzLCBudWxscHRyIC8qRklYTUUgKi8pOwogCiAgICAg
YXV0byBhcGlXaW5kb3dGZWF0dXJlcyA9IEFQSTo6V2luZG93RmVhdHVyZXM6OmNyZWF0ZSh3aW5k
b3dGZWF0dXJlcyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwMzMyNykKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTEz
Nyw2ICsxMTM3LDEwIEBACiAJCTdDQjE2RkYyMTcyNEJBMjgwMDdBMEE5NSAvKiBjb20ubWFjcm9t
ZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2Zp
bGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjE2RkU1MTcyNEI5QjUw
MDdBMEE5NSAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luLnNiICovOyB9Owog
CQk3Q0IxNkZGMzE3MjRCQTJGMDA3QTBBOTUgLyogY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBs
dWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxNkZFNjE3MjRCOUI1MDA3QTBBOTUgLyogY29tLm1pY3Jv
c29mdC5TaWx2ZXJsaWdodFBsdWdpbi5zYiAqLzsgfTsKIAkJN0NCMTZGRjQxNzI0QkEzMDAwN0Ew
QTk1IC8qIGNvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiIGluIENvcHkgUGx1Zy1p
biBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
QjE2RkU3MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ub3JhY2xlLmphdmEuSmF2YUFwcGxldFBsdWdp
bi5zYiAqLzsgfTsKKwkJN0NCMzY1QUExRDMxREI3MDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0
ZWRBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDQjM2NUE4MUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0NCMzY1QUIx
RDMxREI3MDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb24ubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IzNjVBOTFEMzFEQjcwMDA3MTU4
Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbi5tbSAqLzsgfTsKKwkJN0NCMzY1QUQxRDMxREMx
MDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMzY1QUMxRDMxREMxMDAwNzE1
OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oICovOyB9OworCQk3Q0IzNjVC
MTFEMzFERDFFMDA3MTU4Q0EgLyogQVBJVXNlckluaXRpYXRlZEFjdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMzY1QUYxRDMxREQxRTAwNzE1
OENBIC8qIEFQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaCAqLzsgfTsKIAkJN0NCQjgxMUMxQUEwRjhC
MTAwNkIxOTQyIC8qIEluamVjdGVkQnVuZGxlRmlsZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0JCODExQTFBQTBGOEIxMDA2QjE5NDIg
LyogSW5qZWN0ZWRCdW5kbGVGaWxlSGFuZGxlLmNwcCAqLzsgfTsKIAkJN0NCQjgxMUQxQUEwRjhC
MTAwNkIxOTQyIC8qIEluamVjdGVkQnVuZGxlRmlsZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCQjgxMUIxQUEwRjhCMTAwNkIxOTQyIC8q
IEluamVjdGVkQnVuZGxlRmlsZUhhbmRsZS5oICovOyB9OwogCQk3Q0JCODEyMDFBQTBGOTcwMDA2
QjE5NDIgLyogV0tCdW5kbGVGaWxlSGFuZGxlUmVmLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQkI4MTFFMUFBMEY5NzAwMDZCMTk0MiAvKiBXS0J1
bmRsZUZpbGVIYW5kbGVSZWYuY3BwICovOyB9OwpAQCAtMzIwMCw2ICszMjA0LDEwIEBACiAJCTdD
QjE2RkU1MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1
Z2luLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5
ZXIucGx1Z2luLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCMTZGRTYxNzI0
QjlCNTAwN0EwQTk1IC8qIGNvbS5taWNyb3NvZnQuU2lsdmVybGlnaHRQbHVnaW4uc2IgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBsdWdpbi5zYjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCMTZGRTcxNzI0QjlCNTAwN0EwQTk1IC8qIGNv
bS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IGNvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3Q0IzNjVBODFEMzFEQjcwMDA3MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFj
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tVc2VySW5pdGlhdGVk
QWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDQjM2NUE5MUQzMURCNzAw
MDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVXNlckluaXRpYXRlZEFjdGlvbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NCMzY1QUMxRDMxREMxMDAwNzE1OENBIC8qIF9XS1VzZXJJ
bml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBfV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0NCMzY1QUYxRDMxREQxRTAwNzE1OENBIC8qIEFQSVVzZXJJbml0aWF0ZWRBY3Rp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJVXNlckluaXRpYXRlZEFj
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0JCODExQTFBQTBGOEIxMDA2
QjE5NDIgLyogSW5qZWN0ZWRCdW5kbGVGaWxlSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlRmlsZUhhbmRsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQkI4MTFCMUFBMEY4QjEwMDZCMTk0MiAvKiBJbmplY3Rl
ZEJ1bmRsZUZpbGVIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5q
ZWN0ZWRCdW5kbGVGaWxlSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
QkI4MTFFMUFBMEY5NzAwMDZCMTk0MiAvKiBXS0J1bmRsZUZpbGVIYW5kbGVSZWYuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tCdW5kbGVGaWxlSGFuZGxlUmVmLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUxMzQsNiArNTE0Miw5IEBACiAJCQkJ
N0M4ODJERjMxQzdFOTk1RTAwNkJGNzMxIC8qIF9XS1VzZXJDb250ZW50V29ybGQuaCAqLywKIAkJ
CQk3Qzg4MkRGNDFDN0U5OTVFMDA2QkY3MzEgLyogX1dLVXNlckNvbnRlbnRXb3JsZC5tbSAqLywK
IAkJCQk3Qzg4MkRGNTFDN0U5OTVFMDA2QkY3MzEgLyogX1dLVXNlckNvbnRlbnRXb3JsZEludGVy
bmFsLmggKi8sCisJCQkJN0NCMzY1QTgxRDMxREI3MDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0
ZWRBY3Rpb24uaCAqLywKKwkJCQk3Q0IzNjVBOTFEMzFEQjcwMDA3MTU4Q0EgLyogX1dLVXNlcklu
aXRpYXRlZEFjdGlvbi5tbSAqLywKKwkJCQk3Q0IzNjVBQzFEMzFEQzEwMDA3MTU4Q0EgLyogX1dL
VXNlckluaXRpYXRlZEFjdGlvbkludGVybmFsLmggKi8sCiAJCQkJMkQ4Nzg2MUIxQkRCNTRCRjAw
RDAyQUJCIC8qIF9XS1VzZXJTdHlsZVNoZWV0LmggKi8sCiAJCQkJMkQ4Nzg2MUMxQkRCNTRCRjAw
RDAyQUJCIC8qIF9XS1VzZXJTdHlsZVNoZWV0Lm1tICovLAogCQkJCTJEODc4NjFGMUJEQjU3RjUw
MEQwMkFCQiAvKiBfV0tVc2VyU3R5bGVTaGVldEludGVybmFsLmggKi8sCkBAIC02MTI5LDYgKzYx
NDAsNyBAQAogCQkJCTdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAvKiBBUElVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLmggKi8sCiAJCQkJN0M4ODJERkIxQzdFOTlBNjAwNkJGNzMxIC8qIEFQSVVz
ZXJDb250ZW50V29ybGQuY3BwICovLAogCQkJCTdDODgyREZDMUM3RTk5QTYwMDZCRjczMSAvKiBB
UElVc2VyQ29udGVudFdvcmxkLmggKi8sCisJCQkJN0NCMzY1QUYxRDMxREQxRTAwNzE1OENBIC8q
IEFQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaCAqLywKIAkJCQk3Qzg5RDJBNTFBNjc4OUVBMDAzQTVG
REUgLyogQVBJVXNlclNjcmlwdC5jcHAgKi8sCiAJCQkJN0M4OUQyOTIxQTY3MTIyRjAwM0E1RkRF
IC8qIEFQSVVzZXJTY3JpcHQuaCAqLywKIAkJCQkyRDg3ODYyMTFCREI1OEZGMDBEMDJBQkIgLyog
QVBJVXNlclN0eWxlU2hlZXQuY3BwICovLApAQCAtNzY0Myw2ICs3NjU1LDcgQEAKIAkJCQkxQTBF
Qzc1RTEyNEJDN0IyMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTA0M0I1RTEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMDQzREMxMTI0RkY4NzUwMEZGQkZCNSAvKiBQ
bHVnaW5Qcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0NCMzY1QUQxRDMxREMxMDAwNzE1OENB
IC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUE4RUZBNzExMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBNEE5RjMzMTJCODQ0RTIwMDhGRTk4NCAvKiBQbHVnaW5RdWlya3MuaCBp
biBIZWFkZXJzICovLAogCQkJCTdDRDYyMjc4MTczOUQ4NjMwMDVCRDdGRiAvKiBQbHVnaW5TYW5k
Ym94UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03Nzg1LDYgKzc3OTgsNyBAQAogCQkJCUJD
RTQ2OTc3MTIxNEYyN0IwMDBCOThFQiAvKiBXZWJGcmFtZUxpc3RlbmVyUHJveHkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMDMyRDdGMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJGcmFtZUxvYWRlckNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MUYyQ0IxMjFCNjdBRDAwRUJGN0U4IC8qIFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDQjM2NUFBMUQz
MURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0I5RjZBMDExMjNBODRCMDBBMTM3RTAgLyogV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzlCMzhBMTEwRjUzOEJFMDA0NDNBMTUgLyogV2Vi
RnJhbWVQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCMUY3OTkxRDFCMzYxMzAwN0M5QkQx
IC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApA
QCAtODIxNSw2ICs4MjI5LDcgQEAKIAkJCQkxQTQ4MzJDQzFBOUJDNDY1MDA4QjRERkUgLyogV0tX
ZWJzaXRlRGF0YVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0ODMyQ0UxQTlCQzQ4NDAw
OEI0REZFIC8qIFdLV2Vic2l0ZURhdGFSZWNvcmRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFBNjU0RDExQjE0RjcxNDAwQkYxRDNFIC8qIFdLV2Vic2l0ZURhdGFSZWNvcmRQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3Q0IzNjVCMTFEMzFERDFFMDA3MTU4Q0EgLyogQVBJVXNl
ckluaXRpYXRlZEFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzVBOEQyQzgxODdDQ0ZBQjAw
QzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzVBOEQy
RDYxODdEMUMwRTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUUyODY3QTFDN0Y3QkE2MDA2OUFDNEYgLyogV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MzQ2LDYgKzkzNjEsNyBAQAogCQkJCTFB
QjFGNzk4MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdCNjIwNzEyOUEwQTY3MDBEMTc0
QTQgLyogV2ViUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0I2MjUzMTJBNDND
OTYwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdD
QjM2NUFCMUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM3QjYyMTYxMkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cFBy
b3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOUVBMzExMUE5NkQ5RUIwMDJEMjgwNyAvKiBX
ZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRBOTQ0
QkExODg0RUEzQzAwRUQ4NkRCIC8qIFdlYlBhZ2VJT1MubW0gaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMjAzMzI3
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTcsNiArOTcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2NoZW1lUmVnaXN0cnku
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVXNlckdlc3R1cmVJbmRpY2F0b3IuaD4K
ICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KQEAgLTcxOSw2ICs3MjAsMzUgQEAgV2ViUGFnZUdy
b3VwUHJveHkqIFdlYlByb2Nlc3M6OndlYlBhZ2VHcgogICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmdldCgpOwogfQogCitzdGF0aWMgdWludDY0X3QgbmV4dFVzZXJHZXN0dXJlVG9r
ZW5JZGVudGlmaWVyKCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgaWRlbnRpZmllciA9IDE7Cisg
ICAgcmV0dXJuIGlkZW50aWZpZXIrKzsKK30KKwordWludDY0X3QgV2ViUHJvY2Vzczo6dXNlckdl
c3R1cmVUb2tlbklkZW50aWZpZXIoUmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+IHRva2VuKQorewor
ICAgIFdURkxvZ0Fsd2F5cygiV2ViUHJvY2Vzczo6dXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIg
JXAiLCB0b2tlbi5nZXQoKSk7CisKKyAgICBpZiAoIXRva2VuIHx8ICF0b2tlbi0+cHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXV0byByZXN1bHQgPSBt
X2FjdGl2ZVVzZXJHZXN0dXJlVG9rZW5zLmVuc3VyZSh0b2tlbi5nZXQoKSwgW10geyByZXR1cm4g
bmV4dFVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKCk7IH0pOworICAgIGlmIChyZXN1bHQuaXNO
ZXdFbnRyeSkgeworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPmtleS0+YWRkRGVzdHJ1Y3Rpb25P
YnNlcnZlcihbXSAoVXNlckdlc3R1cmVUb2tlbiYgdG9rZW5CZWluZ0Rlc3Ryb3llZCkgeworICAg
ICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlckdlc3R1cmVUb2tlbkRlc3Ryb3ll
ZCh0b2tlbkJlaW5nRGVzdHJveWVkKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCit2b2lkIFdlYlByb2Nlc3M6OnVzZXJH
ZXN0dXJlVG9rZW5EZXN0cm95ZWQoVXNlckdlc3R1cmVUb2tlbiYgdG9rZW4pCit7CisgICAgYXV0
byBpZGVudGlmaWVyID0gbV9hY3RpdmVVc2VyR2VzdHVyZVRva2Vucy50YWtlKCZ0b2tlbik7Cisg
ICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzc1By
b3h5OjpEaWREZXN0cm95VXNlckdlc3R1cmVUb2tlbihpZGVudGlmaWVyKSwgMCk7Cit9CisKIHZv
aWQgV2ViUHJvY2Vzczo6Y2xlYXJSZXNvdXJjZUNhY2hlcyhSZXNvdXJjZUNhY2hlc1RvQ2xlYXIg
cmVzb3VyY2VDYWNoZXNUb0NsZWFyKQogewogICAgIHBsYXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hl
cyhyZXNvdXJjZUNhY2hlc1RvQ2xlYXIpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmgJKHJldmlzaW9uIDIwMzMyNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIGNsYXNzIENl
cnRpZmljYXRlSW5mbzsKIGNsYXNzIFBhZ2VHcm91cDsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsK
IGNsYXNzIFNlc3Npb25JRDsKK2NsYXNzIFVzZXJHZXN0dXJlVG9rZW47CiBzdHJ1Y3QgUGx1Z2lu
SW5mbzsKIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7CiB9CkBAIC0xNDAsNiArMTQxLDkgQEAg
cHVibGljOgogICAgIFdlYlBhZ2VHcm91cFByb3h5KiB3ZWJQYWdlR3JvdXAodWludDY0X3QgcGFn
ZUdyb3VwSUQpOwogICAgIFdlYlBhZ2VHcm91cFByb3h5KiB3ZWJQYWdlR3JvdXAoY29uc3QgV2Vi
UGFnZUdyb3VwRGF0YSYpOwogCisgICAgdWludDY0X3QgdXNlckdlc3R1cmVUb2tlbklkZW50aWZp
ZXIoUmVmUHRyPFdlYkNvcmU6OlVzZXJHZXN0dXJlVG9rZW4+KTsKKyAgICB2b2lkIHVzZXJHZXN0
dXJlVG9rZW5EZXN0cm95ZWQoV2ViQ29yZTo6VXNlckdlc3R1cmVUb2tlbiYpOworCiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgcGlkX3QgcHJlc2VudGVyQXBwbGljYXRpb25QaWQoKSBjb25zdCB7
IHJldHVybiBtX3ByZXNlbnRlckFwcGxpY2F0aW9uUGlkOyB9CiAjZW5kaWYKQEAgLTM5Myw2ICsz
OTcsOCBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgbV9wYWdlc01hcmtpbmdMYXllcnNBc1Zv
bGF0aWxlIHsgMCB9OwogICAgIGJvb2wgbV9zdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciB7
IGZhbHNlIH07CisKKyAgICBIYXNoTWFwPFdlYkNvcmU6OlVzZXJHZXN0dXJlVG9rZW4gKiwgdWlu
dDY0X3Q+IG1fYWN0aXZlVXNlckdlc3R1cmVUb2tlbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJO
b3RpZmljYXRpb25NYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHAJKHJldmlzaW9u
IDIwMzMyNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJO
b3RpZmljYXRpb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDcgKzI0OSw3IEBA
IHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6ZGlkQ2xpY2tOb3QKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGlzIGV2ZW50IGlzIGJlaW5nIGRpc3BhdGNoZWQg
aW4gcmVhY3Rpb24gdG8gYSB1c2VyJ3MgaW50ZXJhY3Rpb24gd2l0aCBhIHBsYXRmb3JtIG5vdGlm
aWNhdGlvbi4KLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9y
KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgbm90aWZpY2F0aW9uLT5kaXNwYXRjaENsaWNr
RXZlbnQoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbklEKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJ
KHJldmlzaW9uIDIwMzMyNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxOCw3ICsxMjE4LDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpwZXJmb3JtRnJhbWVMb2FkVVJMUmVxdQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihyZXF1ZXN0LT5h
bGxvd1BvcHVwcygpID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJl
SW5kaWNhdG9yKHJlcXVlc3QtPmFsbG93UG9wdXBzKCkgPyBPcHRpb25hbDxQcm9jZXNzaW5nVXNl
ckdlc3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQpOwogCiAgICAg
Ly8gRmlyc3QsIHRyeSB0byBmaW5kIGEgdGFyZ2V0IGZyYW1lLgogICAgIEZyYW1lKiB0YXJnZXRG
cmFtZSA9IGZyYW1lLT5sb2FkZXIoKS5maW5kRnJhbWVGb3JOYXZpZ2F0aW9uKHJlcXVlc3QtPnRh
cmdldCgpKTsKQEAgLTE1MTMsNyArMTUxMyw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZXZhbHVhdGUo
TlBPYmplY3QqIG5wT2IKICAgICAvLyBwcm90ZWN0IHRoZSBwbHVnLWluIHZpZXcgZnJvbSBkZXN0
cnVjdGlvbi4KICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwbHVnaW5Q
cm90ZWN0b3IoJm1fbnBSdW50aW1lT2JqZWN0TWFwKTsKIAotICAgIFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGdlc3R1cmVJbmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBPcHRpb25hbDxQcm9j
ZXNzaW5nVXNlckdlc3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQp
OwogICAgIHJldHVybiBtX25wUnVudGltZU9iamVjdE1hcC5ldmFsdWF0ZShucE9iamVjdCwgc2Ny
aXB0U3RyaW5nLCByZXN1bHQpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCShy
ZXZpc2lvbiAyMDMzMjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw2ICsyMjQsOCBA
QCBQYWdlKiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyhGcmFtCiAgICAgICAgIGZyYW1l
LT5kb2N1bWVudCgpLT53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7CiAjZW5kaWYKIAorICAgIGF1
dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKKwogICAgIFdlYkZyYW1l
KiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCpmcmFtZSk7CiAKICAgICBOYXZp
Z2F0aW9uQWN0aW9uRGF0YSBuYXZpZ2F0aW9uQWN0aW9uRGF0YTsKQEAgLTIzMSwxNCArMjMzLDEz
IEBAIFBhZ2UqIFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlV2luZG93KEZyYW0KICAgICBuYXZpZ2F0
aW9uQWN0aW9uRGF0YS5tb2RpZmllcnMgPSBJbmplY3RlZEJ1bmRsZU5hdmlnYXRpb25BY3Rpb246
Om1vZGlmaWVyc0Zvck5hdmlnYXRpb25BY3Rpb24obmF2aWdhdGlvbkFjdGlvbik7CiAgICAgbmF2
aWdhdGlvbkFjdGlvbkRhdGEubW91c2VCdXR0b24gPSBJbmplY3RlZEJ1bmRsZU5hdmlnYXRpb25B
Y3Rpb246Om1vdXNlQnV0dG9uRm9yTmF2aWdhdGlvbkFjdGlvbihuYXZpZ2F0aW9uQWN0aW9uKTsK
ICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5zeW50aGV0aWNDbGlja1R5cGUgPSBJbmplY3RlZEJ1
bmRsZU5hdmlnYXRpb25BY3Rpb246OnN5bnRoZXRpY0NsaWNrVHlwZUZvck5hdmlnYXRpb25BY3Rp
b24obmF2aWdhdGlvbkFjdGlvbik7Ci0gICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuaXNQcm9jZXNz
aW5nVXNlckdlc3R1cmUgPSBuYXZpZ2F0aW9uQWN0aW9uLnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
OworICAgIG5hdmlnYXRpb25BY3Rpb25EYXRhLnVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyID0g
d2ViUHJvY2Vzcy51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcihuYXZpZ2F0aW9uQWN0aW9uLnVz
ZXJHZXN0dXJlVG9rZW4oKSk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuY2FuSGFuZGxlUmVx
dWVzdCA9IG1fcGFnZS0+Y2FuSGFuZGxlUmVxdWVzdChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgp
KTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5
ID0gbmF2aWdhdGlvbkFjdGlvbi5zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KCk7CiAgICAg
bmF2aWdhdGlvbkFjdGlvbkRhdGEuZG93bmxvYWRBdHRyaWJ1dGUgPSBuYXZpZ2F0aW9uQWN0aW9u
LmRvd25sb2FkQXR0cmlidXRlKCk7CiAKICAgICB1aW50NjRfdCBuZXdQYWdlSUQgPSAwOwogICAg
IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgICBhdXRvJiB3ZWJQcm9j
ZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7CiAgICAgaWYgKCF3ZWJQcm9jZXNzLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNy
ZWF0ZU5ld1BhZ2Uod2ViRnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9t
RnJhbWUoZnJhbWUpLCByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCB3aW5kb3dGZWF0dXJlcywg
bmF2aWdhdGlvbkFjdGlvbkRhdGEpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQ
YWdlOjpSZXBseShuZXdQYWdlSUQsIHBhcmFtZXRlcnMpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGll
bnQuY3BwCShyZXZpc2lvbiAyMDMzMjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNyArNjYsNyBAQCB2b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50OjpzZWFyY2hXaXRoR29vCiAg
ICAgU3RyaW5nIHVybCA9ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9IiArIGVuY29k
ZWQgKyAiJmllPVVURi04Jm9lPVVURi04IjsKIAogICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUt
PnBhZ2UoKSkgewotICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5p
dGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgICAgICBwYWdlLT5tYWluRnJh
bWUoKS5sb2FkZXIoKS51cmxTZWxlY3RlZChVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBTdHJp
bmcoKSwgMCwgTG9ja0hpc3Rvcnk6Ok5vLCBMb2NrQmFja0ZvcndhcmRMaXN0OjpObywgTWF5YmVT
ZW5kUmVmZXJyZXIsIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93
KTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2
aXNpb24gMjAzMzI3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyNyw3ICs3Mjcs
NyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkCiAgICAgbmF2aWdh
dGlvbkFjdGlvbkRhdGEubW9kaWZpZXJzID0gYWN0aW9uLT5tb2RpZmllcnMoKTsKICAgICBuYXZp
Z2F0aW9uQWN0aW9uRGF0YS5tb3VzZUJ1dHRvbiA9IGFjdGlvbi0+bW91c2VCdXR0b24oKTsKICAg
ICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5zeW50aGV0aWNDbGlja1R5cGUgPSBhY3Rpb24tPnN5bnRo
ZXRpY0NsaWNrVHlwZSgpOwotICAgIG5hdmlnYXRpb25BY3Rpb25EYXRhLmlzUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlID0gbmF2aWdhdGlvbkFjdGlvbi5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAg
ICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllciA9IFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKG5hdmlnYXRpb25B
Y3Rpb24udXNlckdlc3R1cmVUb2tlbigpKTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5jYW5I
YW5kbGVSZXF1ZXN0ID0gd2ViUGFnZS0+Y2FuSGFuZGxlUmVxdWVzdChyZXF1ZXN0KTsKICAgICBu
YXZpZ2F0aW9uQWN0aW9uRGF0YS5zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0gbmF2aWdh
dGlvbkFjdGlvbi5zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KCk7CiAgICAgbmF2aWdhdGlv
bkFjdGlvbkRhdGEuZG93bmxvYWRBdHRyaWJ1dGUgPSBuYXZpZ2F0aW9uQWN0aW9uLmRvd25sb2Fk
QXR0cmlidXRlKCk7CkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEZWNpZAogICAgIG5hdmlnYXRpb25BY3Rpb25EYXRhLm1vZGlmaWVycyA9IGFj
dGlvbi0+bW9kaWZpZXJzKCk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEubW91c2VCdXR0b24g
PSBhY3Rpb24tPm1vdXNlQnV0dG9uKCk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuc3ludGhl
dGljQ2xpY2tUeXBlID0gYWN0aW9uLT5zeW50aGV0aWNDbGlja1R5cGUoKTsKLSAgICBuYXZpZ2F0
aW9uQWN0aW9uRGF0YS5pc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSA9IG5hdmlnYXRpb25BY3Rpb24u
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CisgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEudXNlckdl
c3R1cmVUb2tlbklkZW50aWZpZXIgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VyR2VzdHVy
ZVRva2VuSWRlbnRpZmllcihuYXZpZ2F0aW9uQWN0aW9uLnVzZXJHZXN0dXJlVG9rZW4oKSk7CiAg
ICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuY2FuSGFuZGxlUmVxdWVzdCA9IHdlYlBhZ2UtPmNhbkhh
bmRsZVJlcXVlc3QocmVxdWVzdCk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuc2hvdWxkT3Bl
bkV4dGVybmFsVVJMc1BvbGljeSA9IG5hdmlnYXRpb25BY3Rpb24uc2hvdWxkT3BlbkV4dGVybmFs
VVJMc1BvbGljeSgpOwogICAgIG5hdmlnYXRpb25BY3Rpb25EYXRhLmRvd25sb2FkQXR0cmlidXRl
ID0gbmF2aWdhdGlvbkFjdGlvbi5kb3dubG9hZEF0dHJpYnV0ZSgpOwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5tbQkocmV2aXNpb24gMjAzMzI3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDcsNzMgKzM0Nyw3MyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldFdp
cmVsCiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheSh1aW50NjRfdCBjb250
ZXh0SWQpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQ
cm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRv
cihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGxh
eSgpOwogfQogCiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBhdXNlKHVpbnQ2NF90
IGNvbnRleHRJZCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5p
dGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElk
KS5wYXVzZSgpOwogfQogCiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZVBs
YXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkudG9nZ2xlUGxheVN0YXRlKCk7CiB9CiAKIHZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQogewot
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2NydWJiaW5n
KCk7CiB9CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2NydWJiaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3Io
RGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0
b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS5lbmRTY3J1YmJpbmcoKTsKIH0KIAogdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyOjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCiB7Ci0gICAg
VXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdl
c3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNl
ckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2Vla1RvVGltZSh0aW1lKTsK
IH0KIAogdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpmYXN0U2Vlayh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSB0aW1lKQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGlj
YXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUlu
ZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2Rl
bChjb250ZXh0SWQpLmZhc3RTZWVrKHRpbWUpOwogfQogCiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nRm9y
d2FyZCgpOwogfQogCiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5p
bmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0
b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7CiB9CiAKIHZvaWQg
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElk
KQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNjYW5u
aW5nKCk7CiB9CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0QXVkaW9N
ZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQogewotICAgIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdEF1ZGlvTWVkaWFPcHRp
b24oaW5kZXgpOwogfQogCiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdExl
Z2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQogewot
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdExlZ2libGVN
ZWRpYU9wdGlvbihpbmRleCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIw
MzMyNykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE2IEBACisyMDE2LTA3LTE2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgW1dlYktpdCBBUEldIEFkZCBTUEkgdG8gdHJhY2sgbXVsdGlwbGUgbmF2aWdhdGlv
bnMgY2F1c2VkIGJ5IGEgc2luZ2xlIHVzZXIgZ2VzdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5ODU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5W
aWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc2VuZEV2ZW50OmlzRHJh
d1JlY3Q6XSk6XAorICAgICAgICBVcGRhdGUgZm9yIG5ldyBzaWduYXR1cmUgb2YgVXNlckdlc3R1
cmVJbmRpY2F0b3IuCisKIDIwMTYtMDctMTYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmVuYW1lIGZhc3RHZXRBdHRyaWJ1dGUgdG8gYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRz
Y2FwZVBsdWdpblZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHJldmlzaW9uIDIwMzMyNykKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC02NjQsNyArNjY0LDcgQEAgLSAoQk9PTClzZW5kRXZlbnQ6KHZvaWQqKWV2ZW50IGlzRHJh
d1JlYwogICAgIEFTU0VSVChfZXZlbnRIYW5kbGVyKTsKICAgICB7CiAgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoX2V2ZW50
SGFuZGxlci0+Y3VycmVudEV2ZW50SXNVc2VyR2VzdHVyZSgpID8gRGVmaW5pdGVseVByb2Nlc3Np
bmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICAgICAg
VXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihfZXZlbnRIYW5kbGVyLT5jdXJy
ZW50RXZlbnRJc1VzZXJHZXN0dXJlKCkgPyBPcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVT
dGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQpOwogICAgICAgICBhY2NlcHRl
ZEV2ZW50ID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+ZXZlbnQocGx1Z2lu
LCBldmVudCk7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQv
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCShyZXZpc2lvbiAyMDMzMjcpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHku
bW0JKHdvcmtpbmcgY29weSkKQEAgLTg4OSw3ICs4ODksNyBAQCBib29sIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6ZXZhbHVhCiAgICAgU3Ryb25nPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxP
YmplY3QocGx1Z2luV29ybGQoKS52bSgpLCBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBs
dWdpbldvcmxkKCkpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKIAotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoYWxs
b3dQb3B1cHMgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogUG9zc2libHlQcm9j
ZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRp
Y2F0b3IoYWxsb3dQb3B1cHMgPyBPcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZT4o
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQpOwogICAgIAogICAgIEpTVmFsdWUgcmVz
dWx0ID0gSlNDOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKHNjcmlwdCkpOwogICAgIApJbmRl
eDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNp
b24gMjAzMzI3KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTggQEAKKzIwMTYtMDctMTYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBbV2ViS2l0IEFQSV0gQWRkIFNQSSB0byB0cmFjayBtdWx0aXBsZSBuYXZpZ2F0aW9ucyBjYXVz
ZWQgYnkgYSBzaW5nbGUgdXNlciBnZXN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE1pbmlCcm93c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29u
dHJvbGxlci5tOgorICAgICAgICAoLVtXSzJCcm93c2VyV2luZG93Q29udHJvbGxlciB3ZWJWaWV3
OmNyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlvbjpmb3JOYXZpZ2F0aW9uQWN0aW9uOndpbmRv
d0ZlYXR1cmVzOl0pOgorICAgICAgICBBZGQgYmFzaWMgd2luZG93Lm9wZW4gaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgKC1bV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIgd2ViVmlldzpkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOmRlY2lzaW9uSGFuZGxlcjpdKToKKyAgICAgICAg
QWRkIGJhc2ljIG5hdmlnYXRpb24gcG9saWN5IGltcGxlbWVudGF0aW9uIHdoaWNoIGltcGxlbWVu
dHMgYSBydWxlIHdoZXJlIGEgdXNlciBnZXN0dXJlIGlzIG9ubHkgYWxsb3dlZAorICAgICAgICB0
byBvcGVuIGEgc2luZ2xlIG5vbi13ZWIgVVJMLCBhbGwgb3RoZXJzIGFyZSBkcm9wcGVkLgorCiAy
MDE2LTA3LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQWRk
IG1vdmUgY29uc3RydWN0b3IgLyBhc3NpZ25tZW50IG9wZXJhdG9yIHRvIExpc3RIYXNoU2V0Cklu
ZGV4OiBUb29scy9NaW5pQnJvd3Nlci9tYWMvV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nlci9tYWMvV0syQnJvd3NlcldpbmRvd0NvbnRy
b2xsZXIubQkocmV2aXNpb24gMjAzMzI3KQorKysgVG9vbHMvTWluaUJyb3dzZXIvbWFjL1dLMkJy
b3dzZXJXaW5kb3dDb250cm9sbGVyLm0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbXBvcnQgIkFwcERlbGVnYXRlLmgiCiAjaW1wb3J0ICJTZXR0aW5nc0NvbnRyb2xsZXIuaCIK
ICNpbXBvcnQgPFdlYktpdC9XS0ZyYW1lSW5mby5oPgorI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdh
dGlvbkFjdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS05hdmlnYXRpb25EZWxlZ2F0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tVSURlbGVnYXRlLmg+CkBAIC0zNyw2ICszOCw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJOU1VSTEV4dHJhcy5oPgorI2ltcG9ydCA8V2Vi
S2l0L19XS1VzZXJJbml0aWF0ZWRBY3Rpb24uaD4KIAogc3RhdGljIHZvaWQqIGtleVZhbHVlT2Jz
ZXJ2aW5nQ29udGV4dCA9ICZrZXlWYWx1ZU9ic2VydmluZ0NvbnRleHQ7CiAKQEAgLTM4OCw3ICsz
OTAsNyBAQCAtICh2b2lkKXVwZGF0ZVRpdGxlOihOU1N0cmluZyAqKXRpdGxlCiAgICAgaWYgKCF0
aXRsZSkKICAgICAgICAgdGl0bGUgPSBfd2ViVmlldy5VUkwubGFzdFBhdGhDb21wb25lbnQ7CiAg
ICAgCi0gICAgc2VsZi53aW5kb3cudGl0bGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IiVAJUAgW1dLMiAlZF0iLCBfaXNQcml2YXRlQnJvd3NpbmdXaW5kb3cgPyBAIvCfmYggIiA6IEAi
IiwgdGl0bGUsIF93ZWJWaWV3Ll93ZWJQcm9jZXNzSWRlbnRpZmllcl07CisgICAgc2VsZi53aW5k
b3cudGl0bGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAJUAgW1dLMiAlZF0iLCBf
aXNQcml2YXRlQnJvd3NpbmdXaW5kb3cgPyBAIu+ZiCAiIDogQCIiLCB0aXRsZSwgX3dlYlZpZXcu
X3dlYlByb2Nlc3NJZGVudGlmaWVyXTsKIH0KIAogLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQ
YXRoOihOU1N0cmluZyAqKWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGlj
dGlvbmFyeSAqKWNoYW5nZSBjb250ZXh0Oih2b2lkICopY29udGV4dApAQCAtNDAyLDYgKzQwNCwx
NSBAQCAtICh2b2lkKW9ic2VydmVWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nCiAgICAgICAgIFtz
ZWxmIHVwZGF0ZVRleHRGaWVsZEZyb21VUkw6X3dlYlZpZXcuVVJMXTsKIH0KIAorLSAobnVsbGFi
bGUgV0tXZWJWaWV3ICopd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBjcmVhdGVXZWJWaWV3
V2l0aENvbmZpZ3VyYXRpb246KFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9u
IGZvck5hdmlnYXRpb25BY3Rpb246KFdLTmF2aWdhdGlvbkFjdGlvbiAqKW5hdmlnYXRpb25BY3Rp
b24gd2luZG93RmVhdHVyZXM6KFdLV2luZG93RmVhdHVyZXMgKil3aW5kb3dGZWF0dXJlcworewor
ICAgIFdLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyICpjb250cm9sbGVyID0gW1tXSzJCcm93c2Vy
V2luZG93Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b25dOworICAgIFtjb250cm9sbGVyIGF3YWtlRnJvbU5pYl07CisgICAgW2NvbnRyb2xsZXIud2lu
ZG93IG1ha2VLZXlBbmRPcmRlckZyb250OnNlbGZdOworCisgICAgcmV0dXJuIGNvbnRyb2xsZXIt
Pl93ZWJWaWV3OworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVu
SmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRp
YXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgTlNBbGVydCogYWxlcnQgPSBbW05T
QWxlcnQgYWxsb2NdIGluaXRdOwpAQCAtNTM1LDYgKzU0NiwyMyBAQCAtIChJQkFjdGlvbilwcmlu
dFdlYlZpZXc6KGlkKXNlbmRlcgogCiAjcHJhZ21hIG1hcmsgV0tOYXZpZ2F0aW9uRGVsZWdhdGUK
IAorLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb246KFdLTmF2aWdhdGlvbkFjdGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gZGVj
aXNpb25IYW5kbGVyOih2b2lkICheKShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kpKWRlY2lzaW9u
SGFuZGxlcgoreworICAgIExPRyhAImRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24iKTsK
KworICAgIGlmIChuYXZpZ2F0aW9uQWN0aW9uLl9jYW5IYW5kbGVSZXF1ZXN0KSB7CisgICAgICAg
IGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobmF2aWdhdGlvbkFjdGlvbi5fdXNlckluaXRpYXRl
ZEFjdGlvbiAmJiAhbmF2aWdhdGlvbkFjdGlvbi5fdXNlckluaXRpYXRlZEFjdGlvbi5pc0NvbnN1
bWVkKSB7CisgICAgICAgIFtuYXZpZ2F0aW9uQWN0aW9uLl91c2VySW5pdGlhdGVkQWN0aW9uIGNv
bnN1bWVdOworICAgICAgICBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gb3BlblVSTDpu
YXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QuVVJMXTsKKyAgICB9CisKKyAgICBkZWNpc2lvbkhhbmRs
ZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5Q2FuY2VsKTsKK30KKwogLSAodm9pZCl3ZWJWaWV3
OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZToo
V0tOYXZpZ2F0aW9uUmVzcG9uc2UgKiluYXZpZ2F0aW9uUmVzcG9uc2UgZGVjaXNpb25IYW5kbGVy
Oih2b2lkICheKShXS05hdmlnYXRpb25SZXNwb25zZVBvbGljeSkpZGVjaXNpb25IYW5kbGVyCiB7
CiAgICAgTE9HKEAiZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283858</attachid>
            <date>2016-07-16 21:29:37 -0700</date>
            <delta_ts>2016-07-17 11:27:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159856-20160716212845.patch</filename>
            <type>text/plain</type>
            <size>92604</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDE2LTA3LTE2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYktpdCBBUEldIEFkZCBTUEkgdG8g
dHJhY2sgbXVsdGlwbGUgbmF2aWdhdGlvbnMgY2F1c2VkIGJ5IGEgc2luZ2xlIHVzZXIgZ2VzdHVy
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5ODU2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTkVFRFMg
VEVTVFMgQU5EIENIQU5HRUxPRy4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OmluY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6ZGVjcmVtZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJlc3Mp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0ZVNjcmlwdEluV29ybGQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgICog
ZG9tL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmN1cnJlbnRU
b2tlbik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZVRva2VuOjp+VXNlckdlc3R1cmVU
b2tlbik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZUluZGljYXRvcjo6VXNlckdlc3R1
cmVJbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckdlc3R1cmVJbmRpY2F0b3I6On5V
c2VyR2VzdHVyZUluZGljYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZUluZGlj
YXRvcjo6Y3VycmVudFVzZXJHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJHZXN0dXJl
SW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VXNl
ckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzRGVmaW5pdGUpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Vc2VyR2Vz
dHVyZUluZGljYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6VXNlckdlc3R1cmVUb2tlbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJHZXN0dXJlVG9rZW46OnN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJHZXN0dXJlVG9rZW46OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZVRva2VuOjpwcm9jZXNzaW5nVXNlckdlc3R1cmVG
b3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZVRva2VuOjphZGREZXN0cnVj
dGlvbk9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJHZXN0dXJlVG9rZW46OlVzZXJH
ZXN0dXJlVG9rZW4pOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpkaWRSZWNlaXZlUmVtb3RlQ29udHJvbENv
bW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6Om9w
ZW5Jbk5ld1RhYik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5j
cHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRlKToKKyAgICAgICAgKiBsb2Fk
ZXIvTmF2aWdhdGlvbkFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0
aW9uOjpOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKiBsb2FkZXIvTmF2aWdhdGlvbkFjdGlv
bi5oOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbjo6dHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uOjpldmVudCk6CisgICAgICAgIChXZWJDb3JlOjpO
YXZpZ2F0aW9uQWN0aW9uOjp1c2VyR2VzdHVyZVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6Ok5h
dmlnYXRpb25BY3Rpb246OnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBsb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY2hlZHVsZWROYXZpZ2F0aW9uOjpTY2hlZHVsZWROYXZpZ2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjaGVkdWxlZE5hdmlnYXRpb246On5TY2hlZHVsZWROYXZpZ2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZE5hdmlnYXRpb246OmxvY2tCYWNrRm9yd2FyZExp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkTmF2aWdhdGlvbjo6d2FzRHVyaW5nTG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWROYXZpZ2F0aW9uOjppc0xvY2F0aW9uQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZE5hdmlnYXRpb246OnVzZXJHZXN0dXJl
VG9Gb3J3YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZE5hdmlnYXRpb246OmNsZWFy
VXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdGlvblNjaGVkdWxlcjo6bXVz
dExvY2tCYWNrRm9yd2FyZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdGlvblNjaGVk
dWxlcjo6c2NoZWR1bGVGb3JtU3VibWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVs
ZWROYXZpZ2F0aW9uOjp3YXNVc2VyR2VzdHVyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9E
T01UaW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRGb3J3YXJkVXNlckdlc3R1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6dXNlckdlc3R1cmVUb2tlblRvRm9yd2FyZCk6CisgICAgICAg
IChXZWJDb3JlOjpET01UaW1lcjo6RE9NVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGlt
ZXI6OmZpcmVkKToKKyAgICAgICAgKiBwYWdlL0RPTVRpbWVyLmg6CisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zdE1lc3NhZ2VUaW1lcjo6UG9zdE1l
c3NhZ2VUaW1lcik6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZURvdWJsZUNsaWNrRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmtleUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6dG9n
Z2xlTWVkaWFGdWxsc2NyZWVuU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dDo6ZW50ZXJGdWxsc2NyZWVuRm9yVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdDo6dG9nZ2xlRW5oYW5jZWRGdWxsc2NyZWVuRm9yVmlkZW8pOgorCiAyMDE2LTA3LTE2ICBC
cmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgU1ZHRXhj
ZXB0aW9uIHRvIHVzZSB0aGUgZGVzY3JpcHRpb24gaW4gdG9TdHJpbmcoKS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCShyZXZpc2lvbiAyMDMzMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3MCwx
MyArMTA3MCwxMyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphbHRlclNsaWRlCiAg
ICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbmNyZW1lbnQoKQogewotICAgIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdV
c2VyR2VzdHVyZSwgZG9jdW1lbnQoKSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVy
ZUluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUsIGRvY3VtZW50KCkpOwogICAgIGFsdGVy
U2xpZGVyVmFsdWUodHJ1ZSk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRl
Y3JlbWVudCgpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihE
ZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBkb2N1bWVudCgpKTsKKyAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgZG9j
dW1lbnQoKSk7CiAgICAgYWx0ZXJTbGlkZXJWYWx1ZShmYWxzZSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAkocmV2aXNpb24gMjAzMzI5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIwLDcgKzkyMCw3IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6cHJlc3MoKQogICAgIGlmIChoaXRUZXN0RWxlbWVudCAm
JiBoaXRUZXN0RWxlbWVudC0+aXNEZXNjZW5kYW50T2YocHJlc3NFbGVtZW50KSkKICAgICAgICAg
cHJlc3NFbGVtZW50ID0gaGl0VGVzdEVsZW1lbnQ7CiAgICAgCi0gICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBk
b2N1bWVudCk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihQcm9j
ZXNzaW5nVXNlckdlc3R1cmUsIGRvY3VtZW50KTsKICAgICAKICAgICBib29sIGRpc3BhdGNoZWRU
b3VjaEV2ZW50ID0gZGlzcGF0Y2hUb3VjaEV2ZW50KCk7CiAgICAgaWYgKCFkaXNwYXRjaGVkVG91
Y2hFdmVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMDMzMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk3LDcgKzQ5Nyw3
IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3QKIAogSlNWYWx1ZSBT
Y3JpcHRDb250cm9sbGVyOjpleGVjdXRlU2NyaXB0SW5Xb3JsZChET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJlKQogewotICAg
IFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoZm9yY2VVc2VyR2VzdHVyZSA/
IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihmb3Jj
ZVVzZXJHZXN0dXJlID8gT3B0aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGU+KFByb2Nl
c3NpbmdVc2VyR2VzdHVyZSkgOiBOdWxsb3B0KTsKICAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJj
ZUNvZGUoc2NyaXB0LCBtX2ZyYW1lLmRvY3VtZW50KCktPnVybCgpKTsKIAogICAgIGlmICghY2Fu
RXhlY3V0ZVNjcmlwdHMoQWJvdXRUb0V4ZWN1dGVTY3JpcHQpIHx8IGlzUGF1c2VkKCkpCkBAIC01
MjMsNyArNTIzLDcgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpjYW5FeGVjdXRlU2NyaXB0cwog
CiBKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVTY3JpcHQoY29uc3QgU3RyaW5nJiBz
Y3JpcHQsIGJvb2wgZm9yY2VVc2VyR2VzdHVyZSwgRXhjZXB0aW9uRGV0YWlscyogZXhjZXB0aW9u
RGV0YWlscykKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKGZv
cmNlVXNlckdlc3R1cmUgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogUG9zc2li
bHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1
cmVJbmRpY2F0b3IoZm9yY2VVc2VyR2VzdHVyZSA/IE9wdGlvbmFsPFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZVN0YXRlPihQcm9jZXNzaW5nVXNlckdlc3R1cmUpIDogTnVsbG9wdCk7CiAgICAgcmV0dXJu
IGV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHQsIG1fZnJhbWUuZG9jdW1lbnQo
KS0+dXJsKCkpLCBleGNlcHRpb25EZXRhaWxzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwCShyZXZpc2lvbiAyMDMzMjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw0MiArMjgsNjggQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBpc0RlZmluaXRlKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZVN0YXRlIHN0YXRlKQorc3RhdGljIFJlZlB0cjxVc2VyR2VzdHVyZVRva2VuPiYgY3VycmVu
dFRva2VuKCkKIHsKLSAgICByZXR1cm4gc3RhdGUgPT0gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSB8fCBzdGF0ZSA9PSBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIHx8
IHN0YXRlID09IERlZmluaXRlbHlQcm9jZXNzaW5nUG90ZW50aWFsVXNlckdlc3R1cmU7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxVc2VyR2VzdHVyZVRva2VuPj4gdG9rZW47Cisg
ICAgcmV0dXJuIHRva2VuOwogfQogCi1Qcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZSBVc2VyR2Vz
dHVyZUluZGljYXRvcjo6c19zdGF0ZSA9IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1
cmU7CitVc2VyR2VzdHVyZVRva2VuOjp+VXNlckdlc3R1cmVUb2tlbigpCit7CisgICAgZm9yIChh
dXRvJiBvYnNlcnZlciA6IG1fZGVzdHJ1Y3Rpb25PYnNlcnZlcnMpCisgICAgICAgIG9ic2VydmVy
KCp0aGlzKTsKK30KIAotVXNlckdlc3R1cmVJbmRpY2F0b3I6OlVzZXJHZXN0dXJlSW5kaWNhdG9y
KFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlIHN0YXRlLCBEb2N1bWVudCogZG9jdW1lbnQpCi0g
ICAgOiBtX3ByZXZpb3VzU3RhdGUoc19zdGF0ZSkKK1VzZXJHZXN0dXJlSW5kaWNhdG9yOjpVc2Vy
R2VzdHVyZUluZGljYXRvcihPcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZT4gc3Rh
dGUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IG1fcHJldmlvdXNUb2tlbihjdXJyZW50VG9r
ZW4oKSkKIHsKICAgICAvLyBTaWxlbnRseSBpZ25vcmUgVXNlckdlc3R1cmVJbmRpY2F0b3JzIG9u
IG5vbiBtYWluIHRocmVhZHMuCiAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIC8vIFdlIG92ZXJ3cml0ZSBzX3N0YXRlIG9ubHkgaWYgdGhlIGNhbGxlciBpcyBk
ZWZpbml0ZSBhYm91dCB0aGUgZ2VzdHVyZSBzdGF0ZS4KLSAgICBpZiAoaXNEZWZpbml0ZShzdGF0
ZSkpCi0gICAgICAgIHNfc3RhdGUgPSBzdGF0ZTsKLSAgICBBU1NFUlQoaXNEZWZpbml0ZShzX3N0
YXRlKSk7CiAKLSAgICBpZiAoZG9jdW1lbnQgJiYgc19zdGF0ZSA9PSBEZWZpbml0ZWx5UHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKQorICAgIGlmIChzdGF0ZSkKKyAgICAgICAgY3VycmVudFRva2VuKCkg
PSBVc2VyR2VzdHVyZVRva2VuOjpjcmVhdGUoc3RhdGUudmFsdWUoKSk7CisKKyAgICBpZiAoZG9j
dW1lbnQgJiYgY3VycmVudFRva2VuKCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQogICAgICAg
ICBkb2N1bWVudC0+dG9wRG9jdW1lbnQoKS51cGRhdGVMYXN0SGFuZGxlZFVzZXJHZXN0dXJlVGlt
ZXN0YW1wKCk7CiB9CiAKK1VzZXJHZXN0dXJlSW5kaWNhdG9yOjpVc2VyR2VzdHVyZUluZGljYXRv
cihSZWZQdHI8VXNlckdlc3R1cmVUb2tlbj4gdG9rZW4pCisgICAgOiBtX3ByZXZpb3VzVG9rZW4o
Y3VycmVudFRva2VuKCkpCit7CisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKHRva2VuKQorICAgICAgICBjdXJyZW50VG9rZW4oKSA9IHRva2VuOwor
fQorCiBVc2VyR2VzdHVyZUluZGljYXRvcjo6flVzZXJHZXN0dXJlSW5kaWNhdG9yKCkKIHsKICAg
ICBpZiAoIWlzTWFpblRocmVhZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgc19zdGF0ZSA9IG1f
cHJldmlvdXNTdGF0ZTsKLSAgICBBU1NFUlQoaXNEZWZpbml0ZShzX3N0YXRlKSk7CisgICAgCisg
ICAgY3VycmVudFRva2VuKCkgPSBtX3ByZXZpb3VzVG9rZW47Cit9CisKK1JlZlB0cjxVc2VyR2Vz
dHVyZVRva2VuPiBVc2VyR2VzdHVyZUluZGljYXRvcjo6Y3VycmVudFVzZXJHZXN0dXJlKCkKK3sK
KyAgICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBjdXJyZW50VG9rZW4oKTsKIH0KIAogYm9vbCBVc2VyR2VzdHVyZUluZGljYXRvcjo6
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkKIHsKLSAgICByZXR1cm4gaXNNYWluVGhyZWFkKCkgPyBz
X3N0YXRlID09IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBmYWxzZTsKKyAgICBp
ZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
Y3VycmVudFRva2VuKCkgPyBjdXJyZW50VG9rZW4oKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkg
OiBmYWxzZTsKIH0KIAogYm9vbCBVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlRm9yTWVkaWEoKQpAQCAtNzEsNyArOTcsNyBAQCBib29sIFVzZXJHZXN0dXJlSW5kaWNh
dG9yOjpwcm9jZXNzaW5nVXNlCiAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHNfc3RhdGUgPT0gRGVmaW5pdGVseVByb2Nlc3NpbmdV
c2VyR2VzdHVyZSB8fCBzX3N0YXRlID09IERlZmluaXRlbHlQcm9jZXNzaW5nUG90ZW50aWFsVXNl
ckdlc3R1cmU7CisgICAgcmV0dXJuIGN1cnJlbnRUb2tlbigpID8gY3VycmVudFRva2VuKCktPnBy
b2Nlc3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCkgOiBmYWxzZTsKIH0KIAogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmgJKHJldmlzaW9uIDIwMzMyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2VzdHVyZUluZGljYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMywzNyArMjMsNjggQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWZuZGVmIFVzZXJHZXN0dXJlSW5kaWNhdG9yX2gKLSNkZWZpbmUgVXNlckdl
c3R1cmVJbmRpY2F0b3JfaAorI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24u
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RG9jdW1lbnQ7CiAKIGVudW0gUHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGUgewotICAgIERlZmlu
aXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsCi0gICAgRGVmaW5pdGVseVByb2Nlc3NpbmdQb3Rl
bnRpYWxVc2VyR2VzdHVyZSwKLSAgICBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSwKLSAg
ICBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlCisgICAgUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlLAorICAgIFByb2Nlc3NpbmdQb3RlbnRpYWxVc2VyR2VzdHVyZSwKKyAgICBOb3RQcm9j
ZXNzaW5nVXNlckdlc3R1cmUKK307CisKK2NsYXNzIFVzZXJHZXN0dXJlVG9rZW4gOiBwdWJsaWMg
UmVmQ291bnRlZDxVc2VyR2VzdHVyZVRva2VuPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0
cjxVc2VyR2VzdHVyZVRva2VuPiBjcmVhdGUoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGUgc3Rh
dGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVzZXJHZXN0dXJlVG9rZW4o
c3RhdGUpKTsKKyAgICB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB+VXNlckdlc3R1cmVUb2tlbigp
OworCisgICAgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlOyB9CisgICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlID09IFByb2Nlc3NpbmdVc2VyR2VzdHVyZTsgfQorICAgIGJvb2wgcHJvY2Vz
c2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFByb2Nl
c3NpbmdVc2VyR2VzdHVyZSB8fCBtX3N0YXRlID09IFByb2Nlc3NpbmdQb3RlbnRpYWxVc2VyR2Vz
dHVyZTsgfQorCisgICAgdm9pZCBhZGREZXN0cnVjdGlvbk9ic2VydmVyKEZ1bmN0aW9uPHZvaWQg
KFVzZXJHZXN0dXJlVG9rZW4mKT4mJiBvYnNlcnZlcikKKyAgICB7CisgICAgICAgIG1fZGVzdHJ1
Y3Rpb25PYnNlcnZlcnMuYXBwZW5kKFdURk1vdmUob2JzZXJ2ZXIpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgVXNlckdlc3R1cmVUb2tlbihQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZSBzdGF0
ZSkKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgIHsKKyAgICB9CisKKyAgICBQcm9jZXNz
aW5nVXNlckdlc3R1cmVTdGF0ZSBtX3N0YXRlID0gTm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlOwor
ICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkIChVc2VyR2VzdHVyZVRva2VuJik+PiBtX2Rlc3RydWN0
aW9uT2JzZXJ2ZXJzOwogfTsKIAogY2xhc3MgVXNlckdlc3R1cmVJbmRpY2F0b3IgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFVzZXJHZXN0dXJlSW5kaWNhdG9yKTsKIHB1YmxpYzoKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+IGN1cnJlbnRVc2Vy
R2VzdHVyZSgpOworCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgcHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKCk7Ci0gICAgc3RhdGljIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVk
aWEoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1
cmVGb3JNZWRpYSgpOwogCiAgICAgLy8gSWYgYSBkb2N1bWVudCBpcyBwcm92aWRlZCwgaXRzIGxh
c3Qga25vd24gdXNlciBnZXN0dXJlIHRpbWVzdGFtcCBpcyB1cGRhdGVkLgotICAgIFdFQkNPUkVf
RVhQT1JUIGV4cGxpY2l0IFVzZXJHZXN0dXJlSW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVy
ZVN0YXRlLCBEb2N1bWVudCogPSBudWxscHRyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNp
dCBVc2VyR2VzdHVyZUluZGljYXRvcihPcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0
ZT4sIERvY3VtZW50KiA9IG51bGxwdHIpOworICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IFVz
ZXJHZXN0dXJlSW5kaWNhdG9yKFJlZlB0cjxVc2VyR2VzdHVyZVRva2VuPik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgflVzZXJHZXN0dXJlSW5kaWNhdG9yKCk7CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlIHNfc3RhdGU7Ci0gICAg
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGUgbV9wcmV2aW91c1N0YXRlOworICAgIFJlZlB0cjxV
c2VyR2VzdHVyZVRva2VuPiBtX3ByZXZpb3VzVG9rZW47CiB9OwogCiB9Ci0KLSNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMz
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02ODMxLDcgKzY4MzEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZFJl
Y2VpdmVSZW1vdGVDCiB7CiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6ZGlkUmVj
ZWl2ZVJlbW90ZUNvbnRyb2xDb21tYW5kKCVwKSAtICVpIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50
Pihjb21tYW5kKSk7CiAKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciByZW1vdGVDb250cm9sVXNl
ckdlc3R1cmUoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgJmRvY3VtZW50KCkpOwor
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIHJlbW90ZUNvbnRyb2xVc2VyR2VzdHVyZShQcm9jZXNz
aW5nVXNlckdlc3R1cmUsICZkb2N1bWVudCgpKTsKICAgICBzd2l0Y2ggKGNvbW1hbmQpIHsKICAg
ICBjYXNlIFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpQbGF5Q29tbWFuZDoKICAgICAgICAgcGxheSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAkocmV2aXNpb24gMjAzMzI5KQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjpjaGFuZwogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6Om9wZW5Jbk5l
d1RhYihjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRp
Y2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgRnJhbWUmIG1h
aW5GcmFtZSA9IG1faW5zcGVjdGVkUGFnZUNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS5tYWlu
RnJhbWUoKTsKICAgICBGcmFtZUxvYWRSZXF1ZXN0IHJlcXVlc3QobWFpbkZyYW1lLmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCksIFJlc291cmNlUmVxdWVzdCgpLCAiX2JsYW5rIiwgTG9ja0hp
c3Rvcnk6Ok5vLCBMb2NrQmFja0ZvcndhcmRMaXN0OjpObywgTWF5YmVTZW5kUmVmZXJyZXIsIEFs
bG93TmF2aWdhdGlvblRvSW52YWxpZFVSTDo6WWVzLCBOZXdGcmFtZU9wZW5lclBvbGljeTo6QWxs
b3csIFJlcGxhY2VEb2N1bWVudElmSmF2YVNjcmlwdFVSTCwgU2hvdWxkT3BlbkV4dGVybmFsVVJM
c1BvbGljeTo6U2hvdWxkTm90QWxsb3cpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkocmV2aXNpb24gMjAzMzI5KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbnRleHRN
ZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY29uc3QgU3RyaW5nJikg
b3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChtX2Zyb250ZW5kSG9zdCkgewotICAgICAgICAg
ICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKTsKKyAgICAgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1
cmVJbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICAgICAgICAgIGludCBpdGVt
TnVtYmVyID0gYWN0aW9uIC0gQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzsKIAogICAgICAg
ICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fZnJvbnRlbmRB
cGlPYmplY3QsICJjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCIsIFdlYkNvcmU6OmZ1bmN0aW9uQ2Fs
bEhhbmRsZXJGcm9tQW55VGhyZWFkKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAyMDMzMjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDI1LDcgKzQyNSw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpyZWxvYWQoRXJyb3JT
dHIKIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRlKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERl
ZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIEZyYW1lJiBmcmFtZSA9IG1f
cGFnZS5tYWluRnJhbWUoKTsKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXNvdXJjZVJlcXVlc3Qo
ZnJhbWUuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvTmF2aWdhdGlvbkFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL05hdmlnYXRpb25BY3Rpb24uY3BwCShyZXZpc2lvbiAyMDMzMjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvbkFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDcgKzUyLDcgQEAgTmF2aWdhdGlvbkFjdGlvbjo6TmF2aWdhdGlvbkFjdGlvbihjb25zdAog
ICAgIDogbV9yZXNvdXJjZVJlcXVlc3QocmVzb3VyY2VSZXF1ZXN0KQogICAgICwgbV90eXBlKHR5
cGUpCiAgICAgLCBtX2V2ZW50KGV2ZW50KQotICAgICwgbV9wcm9jZXNzaW5nVXNlckdlc3R1cmUo
U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCisgICAgLCBtX3VzZXJH
ZXN0dXJlVG9rZW4oVXNlckdlc3R1cmVJbmRpY2F0b3I6OmN1cnJlbnRVc2VyR2VzdHVyZSgpKQog
ICAgICwgbV9zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KHNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3kpCiAgICAgLCBtX2Rvd25sb2FkQXR0cmlidXRlKGRvd25sb2FkQXR0cmlidXRlKQog
ewpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL05hdmlnYXRpb25BY3Rpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvbkFjdGlvbi5oCShyZXZpc2lv
biAyMDMzMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvbkFjdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBl
cy5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjMsNyArNjQsOCBAQCBwdWJsaWM6CiAgICAgTmF2
aWdhdGlvblR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGNvbnN0IEV2
ZW50KiBldmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnQuZ2V0KCk7IH0KIAotICAgIGJvb2wg
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzaW5nVXNlckdl
c3R1cmU7IH0KKyAgICBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlckdlc3R1cmVUb2tlbiA/IG1fdXNlckdlc3R1cmVUb2tlbi0+cHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkgOiBmYWxzZTsgfQorICAgIFJlZlB0cjxVc2VyR2VzdHVyZVRva2VuPiB1c2VyR2Vz
dHVyZVRva2VuKCkgY29uc3QgeyByZXR1cm4gbV91c2VyR2VzdHVyZVRva2VuOyB9CiAKICAgICBT
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3ko
KSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k7IH0KIApAQCAt
NzMsNyArNzUsNyBAQCBwcml2YXRlOgogICAgIFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVx
dWVzdDsKICAgICBOYXZpZ2F0aW9uVHlwZSBtX3R5cGUgeyBOYXZpZ2F0aW9uVHlwZTo6T3RoZXIg
fTsKICAgICBSZWZQdHI8RXZlbnQ+IG1fZXZlbnQ7Ci0gICAgYm9vbCBtX3Byb2Nlc3NpbmdVc2Vy
R2VzdHVyZTsKKyAgICBSZWZQdHI8VXNlckdlc3R1cmVUb2tlbj4gbV91c2VyR2VzdHVyZVRva2Vu
OwogICAgIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgbV9zaG91bGRPcGVuRXh0ZXJuYWxV
UkxzUG9saWN5IHsgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cg
fTsKICAgICBBdG9taWNTdHJpbmcgbV9kb3dubG9hZEF0dHJpYnV0ZTsKIH07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL05hdmlnYXRpb25TY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAy
MDMzMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fbG9j
a0JhY2tGb3J3YXJkTGlzdChsb2NrQmFja0ZvcndhcmRMaXN0KQogICAgICAgICAsIG1fd2FzRHVy
aW5nTG9hZCh3YXNEdXJpbmdMb2FkKQogICAgICAgICAsIG1faXNMb2NhdGlvbkNoYW5nZShpc0xv
Y2F0aW9uQ2hhbmdlKQotICAgICAgICAsIG1fd2FzVXNlckdlc3R1cmUoU2NyaXB0Q29udHJvbGxl
cjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCisgICAgICAgICwgbV91c2VyR2VzdHVyZVRvRm9y
d2FyZChVc2VyR2VzdHVyZUluZGljYXRvcjo6Y3VycmVudFVzZXJHZXN0dXJlKCkpCiAgICAgewog
ICAgIH0KICAgICB2aXJ0dWFsIH5TY2hlZHVsZWROYXZpZ2F0aW9uKCkgeyB9CkBAIC04MiwxMCAr
ODIsMTAgQEAgcHVibGljOgogICAgIExvY2tCYWNrRm9yd2FyZExpc3QgbG9ja0JhY2tGb3J3YXJk
TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9ja0JhY2tGb3J3YXJkTGlzdDsgfQogICAgIGJvb2wg
d2FzRHVyaW5nTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzRHVyaW5nTG9hZDsgfQogICAgIGJv
b2wgaXNMb2NhdGlvbkNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2NhdGlvbkNoYW5nZTsg
fQotICAgIGJvb2wgd2FzVXNlckdlc3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3dhc1VzZXJHZXN0
dXJlOyB9CisgICAgUmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+IHVzZXJHZXN0dXJlVG9Gb3J3YXJk
KCkgY29uc3QgeyByZXR1cm4gbV91c2VyR2VzdHVyZVRvRm9yd2FyZDsgfQogCiBwcm90ZWN0ZWQ6
Ci0gICAgdm9pZCBjbGVhclVzZXJHZXN0dXJlKCkgeyBtX3dhc1VzZXJHZXN0dXJlID0gZmFsc2U7
IH0KKyAgICB2b2lkIGNsZWFyVXNlckdlc3R1cmUoKSB7IG1fdXNlckdlc3R1cmVUb0ZvcndhcmQg
PSBudWxscHRyOyB9IC8vIEZJWE1FOiBOZWVkIGFub3RoZXIgdmFsdWUKIAogICAgIFNob3VsZE9w
ZW5FeHRlcm5hbFVSTHNQb2xpY3kgbV9zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHsgU2hv
dWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cgfTsKIApAQCAtOTUsNyAr
OTUsNyBAQCBwcml2YXRlOgogICAgIExvY2tCYWNrRm9yd2FyZExpc3QgbV9sb2NrQmFja0Zvcndh
cmRMaXN0OwogICAgIGJvb2wgbV93YXNEdXJpbmdMb2FkOwogICAgIGJvb2wgbV9pc0xvY2F0aW9u
Q2hhbmdlOwotICAgIGJvb2wgbV93YXNVc2VyR2VzdHVyZTsKKyAgICBSZWZQdHI8VXNlckdlc3R1
cmVUb2tlbj4gbV91c2VyR2VzdHVyZVRvRm9yd2FyZDsKIH07CiAKIGNsYXNzIFNjaGVkdWxlZFVS
TE5hdmlnYXRpb24gOiBwdWJsaWMgU2NoZWR1bGVkTmF2aWdhdGlvbiB7CkBAIC0xMTMsNyArMTEz
LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBmaXJlKEZyYW1lJiBmcmFtZSkgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Iod2Fz
VXNlckdlc3R1cmUoKSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBEZWZpbml0
ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0
b3IgZ2VzdHVyZUluZGljYXRvcih1c2VyR2VzdHVyZVRvRm9yd2FyZCgpKTsKIAogICAgICAgICBS
ZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KG1fdXJsLCBtX3JlZmVycmVyLCBVc2VQcm90
b2NvbENhY2hlUG9saWN5KTsKICAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3Qo
bV9zZWN1cml0eU9yaWdpbi5nZXQoKSwgcmVzb3VyY2VSZXF1ZXN0LCAiX3NlbGYiLCBsb2NrSGlz
dG9yeSgpLCBsb2NrQmFja0ZvcndhcmRMaXN0KCksIE1heWJlU2VuZFJlZmVycmVyLCBBbGxvd05h
dmlnYXRpb25Ub0ludmFsaWRVUkw6OlllcywgTmV3RnJhbWVPcGVuZXJQb2xpY3k6OkFsbG93LCBt
X3Nob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpOwpAQCAtMTI3LDcgKzEyNyw3IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9oYXZlVG9sZENsaWVudCA9IHRy
dWU7CiAKLSAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih3YXNV
c2VyR2VzdHVyZSgpID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IERlZmluaXRl
bHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBnZXN0dXJlSW5kaWNhdG9yKHVzZXJHZXN0dXJlVG9Gb3J3YXJkKCkpOwogICAgICAgICBmcmFt
ZS5sb2FkZXIoKS5jbGllbnRSZWRpcmVjdGVkKG1fdXJsLCBkZWxheSgpLCBjdXJyZW50VGltZSgp
ICsgdGltZXIubmV4dEZpcmVJbnRlcnZhbCgpLCBsb2NrQmFja0ZvcndhcmRMaXN0KCkpOwogICAg
IH0KIApAQCAtMTcxLDcgKzE3MSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmlyZShGcmFtZSYg
ZnJhbWUpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0
dXJlSW5kaWNhdG9yKHdhc1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlIDogRGVmaW5pdGVseU5vdFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgICAgIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IodXNlckdlc3R1cmVUb0ZvcndhcmQo
KSk7CiAgICAgICAgIGJvb2wgcmVmcmVzaCA9IGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZp
ZXIoZnJhbWUuZG9jdW1lbnQoKS0+dXJsKCksIHVybCgpKTsKICAgICAgICAgUmVzb3VyY2VSZXF1
ZXN0IHJlc291cmNlUmVxdWVzdCh1cmwoKSwgcmVmZXJyZXIoKSwgcmVmcmVzaCA/IFJlbG9hZEln
bm9yaW5nQ2FjaGVEYXRhIDogVXNlUHJvdG9jb2xDYWNoZVBvbGljeSk7CiAgICAgICAgIEZyYW1l
TG9hZFJlcXVlc3QgZnJhbWVSZXF1ZXN0KHNlY3VyaXR5T3JpZ2luKCksIHJlc291cmNlUmVxdWVz
dCwgIl9zZWxmIiwgbG9ja0hpc3RvcnkoKSwgbG9ja0JhY2tGb3J3YXJkTGlzdCgpLCBNYXliZVNl
bmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpObywgTmV3RnJhbWVPcGVu
ZXJQb2xpY3k6OkFsbG93LCBtX3Nob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpOwpAQCAtMTg3
LDcgKzE4Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmlyZShGcmFtZSYgZnJhbWUpIG92ZXJy
aWRlCiAgICAgewotICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9y
KHdhc1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogRGVm
aW5pdGVseU5vdFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IodXNlckdlc3R1cmVUb0ZvcndhcmQoKSk7CiAKICAgICAg
ICAgUmVzb3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdCh1cmwoKSwgcmVmZXJyZXIoKSwgVXNl
UHJvdG9jb2xDYWNoZVBvbGljeSk7CiAgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVSZXF1
ZXN0KHNlY3VyaXR5T3JpZ2luKCksIHJlc291cmNlUmVxdWVzdCwgIl9zZWxmIiwgbG9ja0hpc3Rv
cnkoKSwgbG9ja0JhY2tGb3J3YXJkTGlzdCgpLCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dOYXZp
Z2F0aW9uVG9JbnZhbGlkVVJMOjpObywgTmV3RnJhbWVPcGVuZXJQb2xpY3k6OkFsbG93LCBtX3No
b3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpOwpAQCAtMjA0LDcgKzIwNCw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZmlyZShGcmFtZSYgZnJhbWUpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHdhc1VzZXJHZXN0dXJlKCkgPyBE
ZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogRGVmaW5pdGVseU5vdFByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7CisgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0
b3IodXNlckdlc3R1cmVUb0ZvcndhcmQoKSk7CiAKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJl
c291cmNlUmVxdWVzdCh1cmwoKSwgcmVmZXJyZXIoKSwgUmVsb2FkSWdub3JpbmdDYWNoZURhdGEp
OwogICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lUmVxdWVzdChzZWN1cml0eU9yaWdpbigp
LCByZXNvdXJjZVJlcXVlc3QsICJfc2VsZiIsIGxvY2tIaXN0b3J5KCksIGxvY2tCYWNrRm9yd2Fy
ZExpc3QoKSwgTWF5YmVTZW5kUmVmZXJyZXIsIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTDo6
WWVzLCBOZXdGcmFtZU9wZW5lclBvbGljeTo6QWxsb3csIG1fc2hvdWxkT3BlbkV4dGVybmFsVVJM
c1BvbGljeSk7CkBAIC0yMjIsNyArMjIyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaXJlKEZy
YW1lJiBmcmFtZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGdlc3R1cmVJbmRpY2F0b3Iod2FzVXNlckdlc3R1cmUoKSA/IERlZmluaXRlbHlQcm9jZXNzaW5n
VXNlckdlc3R1cmUgOiBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICAg
ICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih1c2VyR2VzdHVyZVRvRm9y
d2FyZCgpKTsKIAogICAgICAgICBpZiAoIW1faGlzdG9yeVN0ZXBzKSB7CiAgICAgICAgICAgICAv
LyBTcGVjaWFsIGNhc2UgZm9yIGdvKDApIGZyb20gYSBmcmFtZSAtPiByZWxvYWQgb25seSB0aGUg
ZnJhbWUKQEAgLTI1NSw3ICsyNTUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpcmUoRnJhbWUm
IGZyYW1lKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2Vz
dHVyZUluZGljYXRvcih3YXNVc2VyR2VzdHVyZSgpID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSA6IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHVzZXJHZXN0dXJlVG9Gb3J3YXJk
KCkpOwogCiAgICAgICAgIC8vIFRoZSBzdWJtaXRGb3JtIGZ1bmN0aW9uIHdpbGwgZmluZCBhIHRh
cmdldCBmcmFtZSBiZWZvcmUgdXNpbmcgdGhlIHJlZGlyZWN0aW9uIHRpbWVyLgogICAgICAgICAv
LyBOb3cgdGhhdCB0aGUgdGltZXIgaGFzIGZpcmVkLCB3ZSBuZWVkIHRvIHJlcGVhdCB0aGUgc2Vj
dXJpdHkgY2hlY2sgd2hpY2ggbm9ybWFsbHkgaXMgZG9uZSB3aGVuCkBAIC0yNzUsNyArMjc1LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2hhdmVUb2xkQ2xpZW50
ID0gdHJ1ZTsKIAotICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9y
KHdhc1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogRGVm
aW5pdGVseU5vdFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IodXNlckdlc3R1cmVUb0ZvcndhcmQoKSk7CiAgICAgICAg
IGZyYW1lLmxvYWRlcigpLmNsaWVudFJlZGlyZWN0ZWQobV9zdWJtaXNzaW9uLT5yZXF1ZXN0VVJM
KCksIGRlbGF5KCksIGN1cnJlbnRUaW1lKCkgKyB0aW1lci5uZXh0RmlyZUludGVydmFsKCksIGxv
Y2tCYWNrRm9yd2FyZExpc3QoKSk7CiAgICAgfQogCkBAIC0zMDgsNyArMzA4LDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBmaXJlKEZyYW1lJiBmcmFtZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAg
IFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Iod2FzVXNlckdlc3R1cmUoKSA/
IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBEZWZpbml0ZWx5Tm90UHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKTsKKyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGlj
YXRvcih1c2VyR2VzdHVyZVRvRm9yd2FyZCgpKTsKIAogICAgICAgICBSZXNvdXJjZVJlc3BvbnNl
IHJlcGxhY2VtZW50UmVzcG9uc2UobV9vcmlnaW5Eb2N1bWVudC51cmwoKSwgQVNDSUlMaXRlcmFs
KCJ0ZXh0L3BsYWluIiksIDAsIEFTQ0lJTGl0ZXJhbCgiVVRGLTgiKSk7CiAgICAgICAgIFN1YnN0
aXR1dGVEYXRhIHJlcGxhY2VtZW50RGF0YShTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpLCBtX29yaWdp
bkRvY3VtZW50LnVybCgpLCByZXBsYWNlbWVudFJlc3BvbnNlLCBTdWJzdGl0dXRlRGF0YTo6U2Vz
c2lvbkhpc3RvcnlWaXNpYmlsaXR5OjpIaWRkZW4pOwpAQCAtMzg1LDcgKzM4NSw3IEBAIExvY2tC
YWNrRm9yd2FyZExpc3QgTmF2aWdhdGlvblNjaGVkdWxlcjoKIHsKICAgICAvLyBOb24tdXNlciBu
YXZpZ2F0aW9uIGJlZm9yZSB0aGUgcGFnZSBoYXMgZmluaXNoZWQgZmlyaW5nIG9ubG9hZCBzaG91
bGQgbm90IGNyZWF0ZSBhIG5ldyBiYWNrL2ZvcndhcmQgaXRlbS4KICAgICAvLyBTZWUgaHR0cHM6
Ly93ZWJraXQub3JnL2IvNDI4NjEgZm9yIHRoZSBvcmlnaW5hbCBtb3RpdmF0aW9uIGZvciB0aGlz
LiAgICAKLSAgICBpZiAoIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
ICYmIHRhcmdldEZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkgJiYgIXRhcmdldEZyYW1l
LmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPndhc09ubG9hZERpc3BhdGNoZWQoKSkKKyAgICBp
ZiAoIVVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSAmJiB0YXJn
ZXRGcmFtZS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpICYmICF0YXJnZXRGcmFtZS5sb2FkZXIo
KS5kb2N1bWVudExvYWRlcigpLT53YXNPbmxvYWREaXNwYXRjaGVkKCkpCiAgICAgICAgIHJldHVy
biBMb2NrQmFja0ZvcndhcmRMaXN0OjpZZXM7CiAgICAgCiAgICAgLy8gTmF2aWdhdGlvbiBvZiBh
IHN1YmZyYW1lIGR1cmluZyBsb2FkaW5nIG9mIGFuIGFuY2VzdG9yIGZyYW1lIGRvZXMgbm90IGNy
ZWF0ZSBhIG5ldyBiYWNrL2ZvcndhcmQgaXRlbS4KQEAgLTQ0NCw3ICs0NDQsNyBAQCB2b2lkIE5h
dmlnYXRpb25TY2hlZHVsZXI6OnNjaGVkdWxlRm9ybVN1CiAgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM4MyBmb3IgdGhlIG9yaWdpbmFsIG1vdGl2
YXRpb24gZm9yIHRoaXMuCiAgICAgTG9ja0JhY2tGb3J3YXJkTGlzdCBsb2NrQmFja0ZvcndhcmRM
aXN0ID0gbXVzdExvY2tCYWNrRm9yd2FyZExpc3QobV9mcmFtZSk7CiAgICAgaWYgKGxvY2tCYWNr
Rm9yd2FyZExpc3QgPT0gTG9ja0JhY2tGb3J3YXJkTGlzdDo6Tm8KLSAgICAgICAgJiYgKHN1Ym1p
c3Npb24tPnN0YXRlKCktPmZvcm1TdWJtaXNzaW9uVHJpZ2dlcigpID09IFN1Ym1pdHRlZEJ5SmF2
YVNjcmlwdCAmJiBtX2ZyYW1lLnRyZWUoKS5wYXJlbnQoKSAmJiAhU2NyaXB0Q29udHJvbGxlcjo6
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpKSB7CisgICAgICAgICYmIChzdWJtaXNzaW9uLT5zdGF0
ZSgpLT5mb3JtU3VibWlzc2lvblRyaWdnZXIoKSA9PSBTdWJtaXR0ZWRCeUphdmFTY3JpcHQgJiYg
bV9mcmFtZS50cmVlKCkucGFyZW50KCkgJiYgIVVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNz
aW5nVXNlckdlc3R1cmUoKSkpIHsKICAgICAgICAgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IExvY2tC
YWNrRm9yd2FyZExpc3Q6OlllczsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVRpbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRp
bWVyLmNwcAkocmV2aXNpb24gMjAzMzI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01UaW1l
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJTY2hlZHVs
ZWRBY3Rpb24uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgogI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTE2OCw2ICsxNjcsMTQgQEAgc3RhdGljIGlubGluZSBi
b29sIHNob3VsZEZvcndhcmRVc2VyR2VzdAogICAgICAgICAmJiAhbmVzdGluZ0xldmVsOyAvLyBH
ZXN0dXJlcyBzaG91bGQgbm90IGJlIGZvcndhcmRlZCB0byBuZXN0ZWQgdGltZXJzLgogfQogCitz
dGF0aWMgaW5saW5lIFJlZlB0cjxVc2VyR2VzdHVyZVRva2VuPiB1c2VyR2VzdHVyZVRva2VuVG9G
b3J3YXJkKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgaW50ZXJ2YWwsIGludCBuZXN0aW5nTGV2
ZWwpCit7CisgICAgaWYgKCFzaG91bGRGb3J3YXJkVXNlckdlc3R1cmUoaW50ZXJ2YWwsIG5lc3Rp
bmdMZXZlbCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFVzZXJHZXN0
dXJlSW5kaWNhdG9yOjpjdXJyZW50VXNlckdlc3R1cmUoKTsKK30KKwogRE9NVGltZXI6OkRPTVRp
bWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIHN0ZDo6dW5pcXVlX3B0cjxTY2hl
ZHVsZWRBY3Rpb24+IGFjdGlvbiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBpbnRlcnZhbCwg
Ym9vbCBzaW5nbGVTaG90KQogICAgIDogU3VzcGVuZGFibGVUaW1lcihjb250ZXh0KQogICAgICwg
bV9uZXN0aW5nTGV2ZWwoY29udGV4dC50aW1lck5lc3RpbmdMZXZlbCgpKQpAQCAtMTc1LDcgKzE4
Miw3IEBAIERPTVRpbWVyOjpET01UaW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXgKICAgICAsIG1f
b3JpZ2luYWxJbnRlcnZhbChpbnRlcnZhbCkKICAgICAsIG1fdGhyb3R0bGVTdGF0ZShVbmRldGVy
bWluZWQpCiAgICAgLCBtX2N1cnJlbnRUaW1lckludGVydmFsKGludGVydmFsQ2xhbXBlZFRvTWlu
aW11bSgpKQotICAgICwgbV9zaG91bGRGb3J3YXJkVXNlckdlc3R1cmUoc2hvdWxkRm9yd2FyZFVz
ZXJHZXN0dXJlKGludGVydmFsLCBtX25lc3RpbmdMZXZlbCkpCisgICAgLCBtX3VzZXJHZXN0dXJl
VG9rZW5Ub0ZvcndhcmQodXNlckdlc3R1cmVUb2tlblRvRm9yd2FyZChpbnRlcnZhbCwgbV9uZXN0
aW5nTGV2ZWwpKQogewogICAgIFJlZlB0cjxET01UaW1lcj4gcmVmZXJlbmNlID0gYWRvcHRSZWYo
dGhpcyk7CiAKQEAgLTMwMCw5ICszMDcsOSBAQCB2b2lkIERPTVRpbWVyOjpmaXJlZCgpCiAKICAg
ICBBU1NFUlQoIWlzU3VzcGVuZGVkKCkpOwogICAgIEFTU0VSVCghY29udGV4dC5hY3RpdmVET01P
YmplY3RzQXJlU3VzcGVuZGVkKCkpOwotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJ
bmRpY2F0b3IobV9zaG91bGRGb3J3YXJkVXNlckdlc3R1cmUgPyBEZWZpbml0ZWx5UHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IobV91c2VyR2VzdHVyZVRva2VuVG9Gb3J3
YXJkKTsKICAgICAvLyBPbmx5IHRoZSBmaXJzdCBleGVjdXRpb24gb2YgYSBtdWx0aS1zaG90IHRp
bWVyIHNob3VsZCBnZXQgYW4gYWZmaXJtYXRpdmUgdXNlciBnZXN0dXJlIGluZGljYXRvci4KLSAg
ICBtX3Nob3VsZEZvcndhcmRVc2VyR2VzdHVyZSA9IGZhbHNlOworICAgIG1fdXNlckdlc3R1cmVU
b2tlblRvRm9yd2FyZCA9IG51bGxwdHI7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRmlyZVRpbWVyKCZj
b250ZXh0LCBtX3RpbWVvdXRJZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NVGlt
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmgJKHJldmlz
aW9uIDIwMzMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NVGltZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBET01UaW1lcl9oCiAKICNpbmNsdWRlICJT
dXNwZW5kYWJsZVRpbWVyLmgiCisjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNp
bmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtOTAsNyAr
OTEsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgbV9vcmlnaW5h
bEludGVydmFsOwogICAgIFRpbWVyVGhyb3R0bGVTdGF0ZSBtX3Rocm90dGxlU3RhdGU7CiAgICAg
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBtX2N1cnJlbnRUaW1lckludGVydmFsOwotICAgIGJv
b2wgbV9zaG91bGRGb3J3YXJkVXNlckdlc3R1cmU7CisgICAgUmVmUHRyPFVzZXJHZXN0dXJlVG9r
ZW4+IG1fdXNlckdlc3R1cmVUb2tlblRvRm9yd2FyZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDIwMzMyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUwLDcgKzE1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NoYW5uZWxzKFdURk1vdmUoY2hh
bm5lbHMpKQogICAgICAgICAsIG1fdGFyZ2V0T3JpZ2luKFdURk1vdmUodGFyZ2V0T3JpZ2luKSkK
ICAgICAgICAgLCBtX3N0YWNrVHJhY2Uoc3RhY2tUcmFjZSkKLSAgICAgICAgLCBtX3dhc1Byb2Nl
c3NpbmdVc2VyR2VzdHVyZShVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKCkpCisgICAgICAgICwgbV91c2VyR2VzdHVyZVRvRm9yd2FyZChVc2VyR2VzdHVyZUluZGlj
YXRvcjo6Y3VycmVudFVzZXJHZXN0dXJlKCkpCiAgICAgewogICAgIH0KIApAQCAtMTY4LDcgKzE2
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFRoaXMgb2JqZWN0IGdldHMgZGVsZXRlZCB3aGVu
IHN0ZDo6dW5pcXVlX3B0ciBmYWxscyBvdXQgb2Ygc2NvcGUuLgogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UG9zdE1lc3NhZ2VUaW1lcj4gdGltZXIodGhpcyk7CiAgICAgICAgIAotICAgICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciB1c2VyR2VzdHVyZUluZGljYXRvcihtX3dhc1Byb2Nlc3NpbmdV
c2VyR2VzdHVyZSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBEZWZpbml0ZWx5
Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
dXNlckdlc3R1cmVJbmRpY2F0b3IobV91c2VyR2VzdHVyZVRvRm9yd2FyZCk7CiAgICAgICAgIG1f
d2luZG93LT5wb3N0TWVzc2FnZVRpbWVyRmlyZWQoKnRpbWVyKTsKICAgICB9CiAKQEAgLTE3OSw3
ICsxNzksNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheT4gbV9jaGFubmVsczsKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fdGFyZ2V0
T3JpZ2luOwogICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IG1fc3RhY2tUcmFjZTsKLSAgICBi
b29sIG1fd2FzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlOworICAgIFJlZlB0cjxVc2VyR2VzdHVyZVRv
a2VuPiBtX3VzZXJHZXN0dXJlVG9Gb3J3YXJkOwogfTsKIAogdHlwZWRlZiBIYXNoQ291bnRlZFNl
dDxET01XaW5kb3cqPiBET01XaW5kb3dTZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCShyZXZpc2lvbiAyMDMzMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MTgsNyArMTYxOCw3IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQKICAgICAgICAgcmV0dXJuIHRydWU7CiAj
ZW5kaWYKIAotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoRGVmaW5p
dGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgbV9mcmFtZS5kb2N1bWVudCgpKTsKKyAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwg
bV9mcmFtZS5kb2N1bWVudCgpKTsKIAogICAgIC8vIEZJWE1FIChidWcgNjgxODUpOiB0aGlzIGNh
bGwgc2hvdWxkIGJlIG1hZGUgYXQgYW5vdGhlciBhYnN0cmFjdGlvbiBsYXllcgogICAgIG1fZnJh
bWUubG9hZGVyKCkucmVzZXRNdWx0aXBsZUZvcm1TdWJtaXNzaW9uUHJvdGVjdGlvbigpOwpAQCAt
MTc0Niw3ICsxNzQ2LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlRG91YmxlQ2xp
YwogCiAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJldEJsaW5raW5nU3VzcGVuZGVkKGZh
bHNlKTsKIAotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoRGVmaW5p
dGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgbV9mcmFtZS5kb2N1bWVudCgpKTsKKyAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwg
bV9mcmFtZS5kb2N1bWVudCgpKTsKIAogICAgIC8vIFdlIGdldCB0aGlzIGluc3RlYWQgb2YgYSBz
ZWNvbmQgbW91c2UtdXAgCiAgICAgbV9tb3VzZVByZXNzZWQgPSBmYWxzZTsKQEAgLTE5ODcsNyAr
MTk4Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmUKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIAotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1
cmVJbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgbV9mcmFtZS5kb2N1
bWVudCgpKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKFByb2Nl
c3NpbmdVc2VyR2VzdHVyZSwgbV9mcmFtZS5kb2N1bWVudCgpKTsKIAogI2lmIEVOQUJMRShQQU5f
U0NST0xMSU5HKQogICAgIG1fYXV0b3Njcm9sbENvbnRyb2xsZXItPmhhbmRsZU1vdXNlUmVsZWFz
ZUV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCk7CkBAIC0zMDQ3LDcgKzMwNDcsNyBAQCBib29sIEV2
ZW50SGFuZGxlcjo6a2V5RXZlbnQoY29uc3QgUGxhdGZvCiAgICAgaWYgKCFlbGVtZW50KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5k
aWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsIG1fZnJhbWUuZG9jdW1lbnQo
KSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihQcm9jZXNzaW5n
VXNlckdlc3R1cmUsIG1fZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAgVXNlclR5cGluZ0dlc3R1cmVJ
bmRpY2F0b3IgdHlwaW5nR2VzdHVyZUluZGljYXRvcihtX2ZyYW1lKTsKIAogICAgIGlmIChGcmFt
ZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKSkKQEAgLTM4MDAsNyArMzgwMCw3IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnMKIAogICAgIGNvbnN0IFZlY3RvcjxQ
bGF0Zm9ybVRvdWNoUG9pbnQ+JiBwb2ludHMgPSBldmVudC50b3VjaFBvaW50cygpOwogCi0gICAg
VXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50KCkpOworICAgIFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGdlc3R1cmVJbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3Vt
ZW50KCkpOwogCiAgICAgYm9vbCBmcmVzaFRvdWNoRXZlbnRzID0gdHJ1ZTsKICAgICBib29sIGFs
bFRvdWNoUmVsZWFzZWQgPSB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gMjAzMzI5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzAsNyArNDcwLDcg
QEAgdm9pZCBIaXRUZXN0UmVzdWx0Ojp0b2dnbGVNZWRpYUZ1bGxzY3JlZQogI2lmIEVOQUJMRShW
SURFTykKICAgICBpZiAoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdGhpcy0+bWVk
aWFFbGVtZW50KCkpIHsKICAgICAgICAgaWYgKG1lZGlhRWxlbWVudC0+aXNWaWRlbygpICYmIG1l
ZGlhRWxlbWVudC0+c3VwcG9ydHNGdWxsc2NyZWVuKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkgewotICAgICAgICAgICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsICZtZWRpYUVs
ZW1lbnQtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgJm1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSk7
CiAgICAgICAgICAgICBtZWRpYUVsZW1lbnQtPnRvZ2dsZVN0YW5kYXJkRnVsbHNjcmVlblN0YXRl
KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC00ODQsNyArNDg0LDcgQEAgdm9pZCBIaXRUZXN0UmVz
dWx0OjplbnRlckZ1bGxzY3JlZW5Gb3JWaQogICAgIGlmIChpczxIVE1MVmlkZW9FbGVtZW50Piht
ZWRpYUVsZW1lbnQpKSB7CiAgICAgICAgIEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCA9
IGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCptZWRpYUVsZW1lbnQpOwogICAgICAgICBpZiAo
IXZpZGVvRWxlbWVudC5pc0Z1bGxzY3JlZW4oKSAmJiBtZWRpYUVsZW1lbnQtPnN1cHBvcnRzRnVs
bHNjcmVlbihIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFy
ZCkpIHsKLSAgICAgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0
ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCAmbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpKTsKKyAg
ICAgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdl
c3R1cmUsICZtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgICAgICAgICAgdmlkZW9FbGVt
ZW50LmVudGVyRnVsbHNjcmVlbigpOwogICAgICAgICB9CiAgICAgfQpAQCAtODE0LDcgKzgxNCw3
IEBAIHZvaWQgSGl0VGVzdFJlc3VsdDo6dG9nZ2xlRW5oYW5jZWRGdWxsc2MKICAgICAgICAgcmV0
dXJuOwogCiAgICAgSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50ID0gZG93bmNhc3Q8SFRN
TFZpZGVvRWxlbWVudD4oKm1lZGlhRWxlbWVudCk7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsICZtZWRpYUVsZW1lbnQt
PmRvY3VtZW50KCkpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNz
aW5nVXNlckdlc3R1cmUsICZtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIGlmICh2aWRl
b0VsZW1lbnQuZnVsbHNjcmVlbk1vZGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKQogICAgICAgICB2aWRlb0VsZW1lbnQuZXhp
dEZ1bGxzY3JlZW4oKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDMzMjkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4
NCBAQAorMjAxNi0wNy0xNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAg
IFtXZWJLaXQgQVBJXSBBZGQgU1BJIHRvIHRyYWNrIG11bHRpcGxlIG5hdmlnYXRpb25zIGNhdXNl
ZCBieSBhIHNpbmdsZSB1c2VyIGdlc3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1OTg1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogU2hhcmVkL0FQSS9BUElPYmplY3QuaDoKKyAgICAgICAgKiBT
aGFyZWQvQ29jb2EvQVBJT2JqZWN0Lm1tOgorICAgICAgICAoQVBJOjpPYmplY3Q6Om5ld09iamVj
dCk6CisgICAgICAgICogU2hhcmVkL05hdmlnYXRpb25BY3Rpb25EYXRhLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGE6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5hdmlnYXRpb25BY3Rpb25EYXRhOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9OYXZpZ2F0
aW9uQWN0aW9uRGF0YS5oOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckluaXRpYXRlZEFjdGlvbi5oOiBBZGRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVNldFBh
Z2VVSUNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25B
Y3Rpb24ubW06CisgICAgICAgICgtW1dLTmF2aWdhdGlvbkFjdGlvbiBfc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc10pOgorICAgICAgICAoLVtXS05hdmlnYXRpb25BY3Rpb24gX3VzZXJJbml0aWF0ZWRB
Y3Rpb25dKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkFjdGlv
blByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0
ZWRBY3Rpb24uaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
SW5pdGlhdGVkQWN0aW9uLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bX1dLVXNlckluaXRpYXRlZEFj
dGlvbiBkZWFsbG9jXSk6CisgICAgICAgICgtW19XS1VzZXJJbml0aWF0ZWRBY3Rpb24gZGVzY3Jp
cHRpb25dKToKKyAgICAgICAgKC1bX1dLVXNlckluaXRpYXRlZEFjdGlvbiBjb25zdW1lXSk6Cisg
ICAgICAgICgtW19XS1VzZXJJbml0aWF0ZWRBY3Rpb24gaXNDb25zdW1lZF0pOgorICAgICAgICAo
LVtfV0tVc2VySW5pdGlhdGVkQWN0aW9uIF9hcGlPYmplY3RdKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oOiBBZGRlZC4KKyAg
ICAgICAgKEFQSTo6d3JhcHBlcik6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdh
dGUubW06CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjcmVhdGVOZXdQ
YWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rp
b24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnNodXREb3duKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Byb3h5OjpmcmFtZUNvdW50SW5QYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Byb3h5Ojp1c2VySW5pdGlhdGVkQWN0aXZpdHlUb2tlbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVVzZXJHZXN0dXJlVG9rZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmNhblRlcm1pbmF0ZUNoaWxkUHJvY2Vzcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUHJveHk6OnJlc3BvbnNpdmVuZXNzVGltZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJO
b3RpZmljYXRpb25NYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTm90aWZpY2F0aW9u
TWFuYWdlcjo6ZGlkQ2xpY2tOb3RpZmljYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6cGVyZm9y
bUZyYW1lTG9hZFVSTFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpldmFs
dWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVu
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51Q2xpZW50OjpzZWFyY2hXaXRo
R29vZ2xlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6d2ViUGFnZUdyb3VwKToKKyAgICAgICAgKFdlYktpdDo6bmV4dFVz
ZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
dXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
Ojp1c2VyR2VzdHVyZVRva2VuRGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6Y2xlYXJSZXNvdXJjZUNhY2hlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnByZXNlbnRlckFwcGxpY2F0aW9uUGlk
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwYXVzZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZVBsYXlTdGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2NydWJi
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2Ny
dWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2Vl
a1RvVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmZh
c3RTZWVrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVn
aW5TY2FubmluZ0ZvcndhcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyOjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY2FubmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRp
b24pOgorCiAyMDE2LTA3LTE2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJlbmFtZSBmYXN0R2V0QXR0cmlidXRlIHRvIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05hdmlnYXRpb25BY3Rp
b25EYXRhLmNwcAkocmV2aXNpb24gMjAzMzI5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL05h
dmlnYXRpb25BY3Rpb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgi
CiAjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00MCw3ICs0MSw3IEBA
IHZvaWQgTmF2aWdhdGlvbkFjdGlvbkRhdGE6OmVuY29kZShJUEM6OkEKICAgICBlbmNvZGVyLmVu
Y29kZUVudW0obW9kaWZpZXJzKTsKICAgICBlbmNvZGVyLmVuY29kZUVudW0obW91c2VCdXR0b24p
OwogICAgIGVuY29kZXIuZW5jb2RlRW51bShzeW50aGV0aWNDbGlja1R5cGUpOwotICAgIGVuY29k
ZXIgPDwgaXNQcm9jZXNzaW5nVXNlckdlc3R1cmU7CisgICAgZW5jb2RlciA8PCB1c2VyR2VzdHVy
ZVRva2VuSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNhbkhhbmRsZVJlcXVlc3Q7CiAgICAg
ZW5jb2Rlci5lbmNvZGVFbnVtKHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpOwogICAgIGVu
Y29kZXIgPDwgZG93bmxvYWRBdHRyaWJ1dGU7CkBAIC01Niw3ICs1Nyw3IEBAIGJvb2wgTmF2aWdh
dGlvbkFjdGlvbkRhdGE6OmRlY29kZShJUEM6OkEKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHJlc3VsdC5zeW50aGV0aWNDbGlja1R5cGUpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNQcm9j
ZXNzaW5nVXNlckdlc3R1cmUpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVzZXJH
ZXN0dXJlVG9rZW5JZGVudGlmaWVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNhbkhhbmRsZVJlcXVlc3QpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRh
dGEuaAkocmV2aXNpb24gMjAzMzI5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL05hdmlnYXRp
b25BY3Rpb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1
ZGUgIldlYkV2ZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9Vc2VyR2VzdHVyZUluZGljYXRvci5oPgogCiBuYW1lc3BhY2UgSVBD
IHsKIGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKQEAgLTQ0LDcgKzQ1LDcgQEAgc3RydWN0IE5hdmln
YXRpb25BY3Rpb25EYXRhIHsKICAgICBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycyB7IH07
CiAgICAgV2ViTW91c2VFdmVudDo6QnV0dG9uIG1vdXNlQnV0dG9uIHsgV2ViTW91c2VFdmVudDo6
Tm9CdXR0b24gfTsKICAgICBXZWJNb3VzZUV2ZW50OjpTeW50aGV0aWNDbGlja1R5cGUgc3ludGhl
dGljQ2xpY2tUeXBlIHsgV2ViTW91c2VFdmVudDo6Tm9UYXAgfTsKLSAgICBib29sIGlzUHJvY2Vz
c2luZ1VzZXJHZXN0dXJlIHsgZmFsc2UgfTsKKyAgICB1aW50NjRfdCB1c2VyR2VzdHVyZVRva2Vu
SWRlbnRpZmllcjsKICAgICBib29sIGNhbkhhbmRsZVJlcXVlc3QgeyBmYWxzZSB9OwogICAgIFdl
YkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgc2hvdWxkT3BlbkV4dGVybmFsVVJM
c1BvbGljeSB7IFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5v
dEFsbG93IH07CiAgICAgV1RGOjpTdHJpbmcgZG93bmxvYWRBdHRyaWJ1dGU7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNp
b24gMjAzMzI5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L1RpbWluZ0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyR2Vz
dHVyZUluZGljYXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlclNjcmlwdC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvVXNlclN0eWxlU2hlZXQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1ZpZXdwb3J0
QXJndW1lbnRzLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJT2JqZWN0LmgJKHJl
dmlzaW9uIDIwMzMyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIFVzZXJD
b250ZW50RXh0ZW5zaW9uLAogICAgICAgICBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLAogICAg
ICAgICBVc2VyQ29udGVudFdvcmxkLAorICAgICAgICBVc2VySW5pdGlhdGVkQWN0aW9uLAogICAg
ICAgICBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2ssCiAgICAgICAgIFVzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0LAogICAgICAgICBWaWJyYXRpb24sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29jb2EvQVBJT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db2NvYS9BUElPYmplY3QubW0JKHJldmlzaW9uIDIwMzMyOSkKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcg
QEAKICNpbXBvcnQgIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIgogI2lt
cG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVXNlckNv
bnRlbnRXb3JsZEludGVybmFsLmgiCisjaW1wb3J0ICJfV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50
ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1VzZXJTdHlsZVNoZWV0SW50ZXJuYWwuaCIKICNpbXBvcnQg
Il9XS1Zpc2l0ZWRMaW5rU3RvcmVJbnRlcm5hbC5oIgogCkBAIC0yMzEsNiArMjMyLDEwIEBAIHZv
aWQqIE9iamVjdDo6bmV3T2JqZWN0KHNpemVfdCBzaXplLCBUeXAKICAgICAgICAgd3JhcHBlciA9
IFtfV0tVc2VyQ29udGVudFdvcmxkIGFsbG9jXTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNl
IFR5cGU6OlVzZXJJbml0aWF0ZWRBY3Rpb246CisgICAgICAgIHdyYXBwZXIgPSBbX1dLVXNlcklu
aXRpYXRlZEFjdGlvbiBhbGxvY107CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBUeXBlOjpV
c2VyU2NyaXB0OgogICAgICAgICB3cmFwcGVyID0gW1dLVXNlclNjcmlwdCBhbGxvY107CiAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAJKHJldmlzaW9uIDIwMzMyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTg4LDkgKzM1ODgsMTAgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYQogICAgICAgICBlbHNlIGlmIChvcmlnaW5h
dGluZ0ZyYW1lKQogICAgICAgICAgICAgc291cmNlRnJhbWVJbmZvID0gQVBJOjpGcmFtZUluZm86
OmNyZWF0ZSgqb3JpZ2luYXRpbmdGcmFtZSwgb3JpZ2luYXRpbmdGcmFtZVNlY3VyaXR5T3JpZ2lu
LnNlY3VyaXR5T3JpZ2luKCkpOwogCisgICAgICAgIGF1dG8gdXNlckluaXRpYXRlZEFjdGl2aXR5
ID0gbV9wcm9jZXNzLT51c2VySW5pdGlhdGVkQWN0aXZpdHkobmF2aWdhdGlvbkFjdGlvbkRhdGEu
dXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIpOwogICAgICAgICBib29sIHNob3VsZE9wZW5BcHBM
aW5rcyA9ICFtX3Nob3VsZFN1cHByZXNzQXBwTGlua3NJbk5leHROYXZpZ2F0aW9uUG9saWN5RGVj
aXNpb24gJiYgKCFkZXN0aW5hdGlvbkZyYW1lSW5mbyB8fCBkZXN0aW5hdGlvbkZyYW1lSW5mby0+
aXNNYWluRnJhbWUoKSkgJiYgIWhvc3RzQXJlRXF1YWwoVVJMKFBhcnNlZFVSTFN0cmluZywgbV9t
YWluRnJhbWUtPnVybCgpKSwgcmVxdWVzdC51cmwoKSk7CiAKLSAgICAgICAgYXV0byBuYXZpZ2F0
aW9uQWN0aW9uID0gQVBJOjpOYXZpZ2F0aW9uQWN0aW9uOjpjcmVhdGUobmF2aWdhdGlvbkFjdGlv
bkRhdGEsIHNvdXJjZUZyYW1lSW5mby5nZXQoKSwgZGVzdGluYXRpb25GcmFtZUluZm8uZ2V0KCks
IHJlcXVlc3QsIG9yaWdpbmFsUmVxdWVzdC51cmwoKSwgc2hvdWxkT3BlbkFwcExpbmtzKTsKKyAg
ICAgICAgYXV0byBuYXZpZ2F0aW9uQWN0aW9uID0gQVBJOjpOYXZpZ2F0aW9uQWN0aW9uOjpjcmVh
dGUobmF2aWdhdGlvbkFjdGlvbkRhdGEsIHNvdXJjZUZyYW1lSW5mby5nZXQoKSwgZGVzdGluYXRp
b25GcmFtZUluZm8uZ2V0KCksIHJlcXVlc3QsIG9yaWdpbmFsUmVxdWVzdC51cmwoKSwgc2hvdWxk
T3BlbkFwcExpbmtzLCBXVEZNb3ZlKHVzZXJJbml0aWF0ZWRBY3Rpdml0eSkpOwogCiAgICAgICAg
IG1fbmF2aWdhdGlvbkNsaWVudC0+ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbigqdGhp
cywgbmF2aWdhdGlvbkFjdGlvbi5nZXQoKSwgV1RGTW92ZShsaXN0ZW5lciksIG1fcHJvY2Vzcy0+
dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOwogICAg
IH0gZWxzZQpAQCAtMzYyMiw4ICszNjIzLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBv
bGljeUZvck5ld1dpbgogICAgICAgICBpZiAoZnJhbWUpCiAgICAgICAgICAgICBzb3VyY2VGcmFt
ZUluZm8gPSBBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKCpmcmFtZSwgZnJhbWVTZWN1cml0eU9yaWdp
bi5zZWN1cml0eU9yaWdpbigpKTsKIAorICAgICAgICBhdXRvIHVzZXJJbml0aWF0ZWRBY3Rpdml0
eSA9IG1fcHJvY2Vzcy0+dXNlckluaXRpYXRlZEFjdGl2aXR5KG5hdmlnYXRpb25BY3Rpb25EYXRh
LnVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKTsKICAgICAgICAgYm9vbCBzaG91bGRPcGVuQXBw
TGlua3MgPSAhaG9zdHNBcmVFcXVhbChVUkwoUGFyc2VkVVJMU3RyaW5nLCBtX21haW5GcmFtZS0+
dXJsKCkpLCByZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgYXV0byBuYXZpZ2F0aW9uQWN0aW9uID0g
QVBJOjpOYXZpZ2F0aW9uQWN0aW9uOjpjcmVhdGUobmF2aWdhdGlvbkFjdGlvbkRhdGEsIHNvdXJj
ZUZyYW1lSW5mby5nZXQoKSwgbnVsbHB0ciwgcmVxdWVzdCwgcmVxdWVzdC51cmwoKSwgc2hvdWxk
T3BlbkFwcExpbmtzKTsKKyAgICAgICAgYXV0byBuYXZpZ2F0aW9uQWN0aW9uID0gQVBJOjpOYXZp
Z2F0aW9uQWN0aW9uOjpjcmVhdGUobmF2aWdhdGlvbkFjdGlvbkRhdGEsIHNvdXJjZUZyYW1lSW5m
by5nZXQoKSwgbnVsbHB0ciwgcmVxdWVzdCwgcmVxdWVzdC51cmwoKSwgc2hvdWxkT3BlbkFwcExp
bmtzLCBXVEZNb3ZlKHVzZXJJbml0aWF0ZWRBY3Rpdml0eSkpOwogCiAgICAgICAgIG1fbmF2aWdh
dGlvbkNsaWVudC0+ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbigqdGhpcywgbmF2aWdh
dGlvbkFjdGlvbi5nZXQoKSwgV1RGTW92ZShsaXN0ZW5lciksIG1fcHJvY2Vzcy0+dHJhbnNmb3Jt
SGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjAz
MzI5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDksOCBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2h1
dERvd24oKQogICAgICAgICB3ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlUHJv
Y2VzcygqdGhpcyk7CiAgICAgbV93ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94aWVzLmNsZWFy
KCk7CiAKKyAgICBtX3VzZXJJbml0aWF0ZWRBY3Rpb25NYXAuY2xlYXIoKTsKKwogICAgIG1fcHJv
Y2Vzc1Bvb2wtPmRpc2Nvbm5lY3RQcm9jZXNzKHRoaXMpOwogfQogCkBAIC02NjUsNiArNjY3LDIx
IEBAIHNpemVfdCBXZWJQcm9jZXNzUHJveHk6OmZyYW1lQ291bnRJblBhZ2UKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCitSZWZQdHI8QVBJOjpVc2VySW5pdGlhdGVkQWN0aW9uPiBXZWJQcm9jZXNz
UHJveHk6OnVzZXJJbml0aWF0ZWRBY3Rpdml0eSh1aW50NjRfdCBpZGVudGlmaWVyKQoreworICAg
IGlmICghVXNlckluaXRpYXRlZEFjdGlvbk1hcDo6aXNWYWxpZEtleShpZGVudGlmaWVyKSB8fCAh
aWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHJlc3VsdCA9
IG1fdXNlckluaXRpYXRlZEFjdGlvbk1hcC5lbnN1cmUoaWRlbnRpZmllciwgW10geyByZXR1cm4g
QVBJOjpVc2VySW5pdGlhdGVkQWN0aW9uOjpjcmVhdGUoKTsgfSk7CisgICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWREZXN0cm95
VXNlckdlc3R1cmVUb2tlbih1aW50NjRfdCBpZGVudGlmaWVyKQoreworICAgIEFTU0VSVChVc2Vy
SW5pdGlhdGVkQWN0aW9uTWFwOjppc1ZhbGlkS2V5KGlkZW50aWZpZXIpKTsKKyAgICBtX3VzZXJJ
bml0aWF0ZWRBY3Rpb25NYXAucmVtb3ZlKGlkZW50aWZpZXIpOworfQorCiBib29sIFdlYlByb2Nl
c3NQcm94eTo6Y2FuVGVybWluYXRlQ2hpbGRQcm9jZXNzKCkKIHsKICAgICBpZiAoIW1fcGFnZU1h
cC5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5oCShyZXZpc2lvbiAyMDMzMjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQVBJU2Vzc2lvbi5oIgorI2luY2x1ZGUgIkFQSVVzZXJJbml0aWF0
ZWRBY3Rpb24uaCIKICNpbmNsdWRlICJDaGlsZFByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIkN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFw
LmgiCkBAIC02Nyw2ICs2OCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gV2ViQmFja0ZvcndhcmRMaXN0SXRl
bU1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJGcmFtZVByb3h5
Pj4gV2ViRnJhbWVQcm94eU1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFdlYlBh
Z2VQcm94eSo+IFdlYlBhZ2VQcm94eU1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3Qs
IFJlZlB0cjxBUEk6OlVzZXJJbml0aWF0ZWRBY3Rpb24+PiBVc2VySW5pdGlhdGVkQWN0aW9uTWFw
OwogCiAgICAgc3RhdGljIFJlZjxXZWJQcm9jZXNzUHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9v
bCYpOwogICAgIH5XZWJQcm9jZXNzUHJveHkoKTsKQEAgLTk0LDYgKzk2LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5Jik7CiAKICAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB3
ZWJCYWNrRm9yd2FyZEl0ZW0odWludDY0X3QgaXRlbUlEKSBjb25zdDsKKyAgICBSZWZQdHI8QVBJ
OjpVc2VySW5pdGlhdGVkQWN0aW9uPiB1c2VySW5pdGlhdGVkQWN0aXZpdHkodWludDY0X3QpOwog
CiAgICAgUmVzcG9uc2l2ZW5lc3NUaW1lciYgcmVzcG9uc2l2ZW5lc3NUaW1lcigpIHsgcmV0dXJu
IG1fcmVzcG9uc2l2ZW5lc3NUaW1lcjsgfQogCkBAIC0xNjcsNyArMTcwLDggQEAgcHJpdmF0ZToK
ICAgICAvLyBJUEMgbWVzc2FnZSBoYW5kbGVycy4KICAgICB2b2lkIGFkZEJhY2tGb3J3YXJkSXRl
bSh1aW50NjRfdCBpdGVtSUQsIHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgUGFnZVN0YXRlJik7CiAg
ICAgdm9pZCBkaWREZXN0cm95RnJhbWUodWludDY0X3QpOwotICAgIAorICAgIHZvaWQgZGlkRGVz
dHJveVVzZXJHZXN0dXJlVG9rZW4odWludDY0X3QpOworCiAgICAgdm9pZCBzaG91bGRUZXJtaW5h
dGUoYm9vbCYgc2hvdWxkVGVybWluYXRlKTsKIAogICAgIHZvaWQgZGlkRmV0Y2hXZWJzaXRlRGF0
YSh1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBXZWJzaXRlRGF0YSYpOwpAQCAtMjM0LDYgKzIz
OCw3IEBAIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5TWFwIG1fcGFnZU1hcDsKICAgICBXZWJG
cmFtZVByb3h5TWFwIG1fZnJhbWVNYXA7CiAgICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbU1hcCBt
X2JhY2tGb3J3YXJkTGlzdEl0ZW1NYXA7CisgICAgVXNlckluaXRpYXRlZEFjdGlvbk1hcCBtX3Vz
ZXJJbml0aWF0ZWRBY3Rpb25NYXA7CiAKICAgICBIYXNoU2V0PFZpc2l0ZWRMaW5rU3RvcmUqPiBt
X3Zpc2l0ZWRMaW5rU3RvcmVzOwogICAgIEhhc2hTZXQ8V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHkqPiBtX3dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3hpZXM7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4J
KHJldmlzaW9uIDIwMzMyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDggQEAgbWVzc2Fn
ZXMgLT4gV2ViUHJvY2Vzc1Byb3h5IExlZ2FjeVJlY2VpdgogICAgIEFkZEJhY2tGb3J3YXJkSXRl
bSh1aW50NjRfdCBpdGVtSUQsIHVpbnQ2NF90IHBhZ2VJRCwgc3RydWN0IFdlYktpdDo6UGFnZVN0
YXRlIHBhZ2VTdGF0ZSkKICAgICBEaWREZXN0cm95RnJhbWUodWludDY0X3QgZnJhbWVJRCkgCiAK
KyAgICBEaWREZXN0cm95VXNlckdlc3R1cmVUb2tlbih1aW50NjRfdCB1c2VyR2VzdHVyZVRva2Vu
SUQpIAorCiAgICAgU2hvdWxkVGVybWluYXRlKCkgLT4gKGJvb2wgc2hvdWxkVGVybWluYXRlKQog
CiAgICAgRW5hYmxlU3VkZGVuVGVybWluYXRpb24oKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQWN0aW9uLmgJKHJldmlzaW9uIDIwMzMy
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyNyArMjgsMjcgQEAKIAogI2luY2x1ZGUgIkFQSUZyYW1l
SW5mby5oIgogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIkFQSVVzZXJJbml0aWF0
ZWRBY3Rpb24uaCIKICNpbmNsdWRlICJOYXZpZ2F0aW9uQWN0aW9uRGF0YS5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KIAog
bmFtZXNwYWNlIEFQSSB7CiAKLWNsYXNzIEZyYW1lSW5mbzsKLQogY2xhc3MgTmF2aWdhdGlvbkFj
dGlvbiBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlwZTo6TmF2aWdhdGlvbkFj
dGlvbj4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmF2aWdhdGlvbkFjdGlvbj4gY3JlYXRl
KGNvbnN0IFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGEmIG5hdmlnYXRpb25BY3Rpb25EYXRh
LCBBUEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUsIEFQSTo6RnJhbWVJbmZvKiB0YXJnZXRGcmFt
ZSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3Jl
OjpVUkwmIG9yaWdpbmFsVVJMLCBib29sIHNob3VsZE9wZW5BcHBMaW5rcykKKyAgICBzdGF0aWMg
UmVmPE5hdmlnYXRpb25BY3Rpb24+IGNyZWF0ZShjb25zdCBXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rp
b25EYXRhJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZyYW1l
LCBBUEk6OkZyYW1lSW5mbyogdGFyZ2V0RnJhbWUsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6VVJMJiBvcmlnaW5hbFVSTCwgYm9vbCBzaG91
bGRPcGVuQXBwTGlua3MsIFJlZlB0cjxVc2VySW5pdGlhdGVkQWN0aW9uPiB1c2VySW5pdGlhdGVk
QWN0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmF2aWdhdGlvbkFj
dGlvbihuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWUsIHRhcmdldEZyYW1lLCByZXF1
ZXN0LCBvcmlnaW5hbFVSTCwgc2hvdWxkT3BlbkFwcExpbmtzKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IE5hdmlnYXRpb25BY3Rpb24obmF2aWdhdGlvbkFjdGlvbkRhdGEsIHNvdXJj
ZUZyYW1lLCB0YXJnZXRGcmFtZSwgcmVxdWVzdCwgb3JpZ2luYWxVUkwsIHNob3VsZE9wZW5BcHBM
aW5rcywgV1RGTW92ZSh1c2VySW5pdGlhdGVkQWN0aW9uKSkpOwogICAgIH0KIAotICAgIE5hdmln
YXRpb25BY3Rpb24oY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2aWdhdGlv
bkFjdGlvbkRhdGEsIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VGcmFtZSwgQVBJOjpGcmFtZUluZm8q
IHRhcmdldEZyYW1lLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFdlYkNvcmU6OlVSTCYgb3JpZ2luYWxVUkwsIGJvb2wgc2hvdWxkT3BlbkFwcExpbmtzKQor
ICAgIE5hdmlnYXRpb25BY3Rpb24oY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYg
bmF2aWdhdGlvbkFjdGlvbkRhdGEsIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VGcmFtZSwgQVBJOjpG
cmFtZUluZm8qIHRhcmdldEZyYW1lLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFdlYkNvcmU6OlVSTCYgb3JpZ2luYWxVUkwsIGJvb2wgc2hvdWxkT3BlbkFw
cExpbmtzLCBSZWZQdHI8VXNlckluaXRpYXRlZEFjdGlvbj4gdXNlckluaXRpYXRlZEFjdGlvbikK
ICAgICAgICAgOiBtX3NvdXJjZUZyYW1lKHNvdXJjZUZyYW1lKQogICAgICAgICAsIG1fdGFyZ2V0
RnJhbWUodGFyZ2V0RnJhbWUpCiAgICAgICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QpCiAgICAgICAg
ICwgbV9vcmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKICAgICAgICAgLCBtX3Nob3VsZE9wZW5BcHBM
aW5rcyhzaG91bGRPcGVuQXBwTGlua3MpCisgICAgICAgICwgbV91c2VySW5pdGlhdGVkQWN0aW9u
KFdURk1vdmUodXNlckluaXRpYXRlZEFjdGlvbikpCiAgICAgICAgICwgbV9uYXZpZ2F0aW9uQWN0
aW9uRGF0YShuYXZpZ2F0aW9uQWN0aW9uRGF0YSkKICAgICB7CiAgICAgfQpAQCAtNjMsMTIgKzYz
LDE0IEBAIHB1YmxpYzoKICAgICBXZWJLaXQ6OldlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9uYXZpZ2F0aW9uQWN0aW9uRGF0YS5tb2RpZmllcnM7IH0KICAg
ICBXZWJLaXQ6OldlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBtb3VzZUJ1dHRvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbmF2aWdhdGlvbkFjdGlvbkRhdGEubW91c2VCdXR0b247IH0KICAgICBXZWJLaXQ6Oldl
Yk1vdXNlRXZlbnQ6OlN5bnRoZXRpY0NsaWNrVHlwZSBzeW50aGV0aWNDbGlja1R5cGUoKSBjb25z
dCB7IHJldHVybiBtX25hdmlnYXRpb25BY3Rpb25EYXRhLnN5bnRoZXRpY0NsaWNrVHlwZTsgfQot
ICAgIGJvb2wgaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdCB7IHJldHVybiBtX25hdmln
YXRpb25BY3Rpb25EYXRhLmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlOyB9CiAgICAgYm9vbCBjYW5I
YW5kbGVSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9uYXZpZ2F0aW9uQWN0aW9uRGF0YS5jYW5I
YW5kbGVSZXF1ZXN0OyB9CiAgICAgYm9vbCBzaG91bGRPcGVuRXh0ZXJuYWxTY2hlbWVzKCkgY29u
c3QgeyByZXR1cm4gbV9uYXZpZ2F0aW9uQWN0aW9uRGF0YS5zaG91bGRPcGVuRXh0ZXJuYWxVUkxz
UG9saWN5ID09IFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZEFs
bG93IHx8IG1fbmF2aWdhdGlvbkFjdGlvbkRhdGEuc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGlj
eSA9PSBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxvd0V4
dGVybmFsU2NoZW1lczsgfQogICAgIGJvb2wgc2hvdWxkT3BlbkFwcExpbmtzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaG91bGRPcGVuQXBwTGlua3MgJiYgbV9uYXZpZ2F0aW9uQWN0aW9uRGF0YS5zaG91
bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID09IFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3k6OlNob3VsZEFsbG93OyB9CiAgICAgYm9vbCBzaG91bGRQZXJmb3JtRG93bmxvYWQo
KSBjb25zdCB7IHJldHVybiAhbV9uYXZpZ2F0aW9uQWN0aW9uRGF0YS5kb3dubG9hZEF0dHJpYnV0
ZS5pc051bGwoKTsgfQogCisgICAgYm9vbCBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIGNvbnN0
IHsgcmV0dXJuICEhbV91c2VySW5pdGlhdGVkQWN0aW9uOyB9CisgICAgVXNlckluaXRpYXRlZEFj
dGlvbiogdXNlckluaXRpYXRlZEFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckluaXRpYXRl
ZEFjdGlvbi5nZXQoKTsgfQorCiBwcml2YXRlOgogICAgIFJlZlB0cjxGcmFtZUluZm8+IG1fc291
cmNlRnJhbWU7CiAgICAgUmVmUHRyPEZyYW1lSW5mbz4gbV90YXJnZXRGcmFtZTsKQEAgLTc4LDYg
KzgwLDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9zaG91bGRPcGVuQXBwTGlua3M7CiAKKyAg
ICBSZWZQdHI8VXNlckluaXRpYXRlZEFjdGlvbj4gbV91c2VySW5pdGlhdGVkQWN0aW9uOworCiAg
ICAgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSBtX25hdmlnYXRpb25BY3Rpb25EYXRhOwog
fTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VySW5pdGlhdGVk
QWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElV
c2VySW5pdGlhdGVkQWN0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9BUElVc2VySW5pdGlhdGVkQWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJT2Jq
ZWN0LmgiCisKK25hbWVzcGFjZSBBUEkgeworCitjbGFzcyBVc2VySW5pdGlhdGVkQWN0aW9uIGZp
bmFsIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6VXNlckluaXRp
YXRlZEFjdGlvbj4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VXNlckluaXRpYXRlZEFjdGlv
bj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVzZXJJbml0
aWF0ZWRBY3Rpb24pOworICAgIH0KKworICAgIHZpcnR1YWwgflVzZXJJbml0aWF0ZWRBY3Rpb24o
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldENvbnN1bWVkKCkgeyBtX2NvbnN1bWVkID0g
dHJ1ZTsgfQorICAgIGJvb2wgY29uc3VtZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnN1bWVkOyB9
CisKK3ByaXZhdGU6CisgICAgVXNlckluaXRpYXRlZEFjdGlvbigpCisgICAgeworICAgIH0KKwor
ICAgIGJvb2wgbV9jb25zdW1lZCA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgQVBJCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24g
MjAzMzI5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2OTgsNyArMTY5OCw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZVVJQ2xp
ZW50KFdLUGFnZVJlZiBwYWcKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZUZyYW1lSW5mbyA9
IEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoKmluaXRpYXRpbmdGcmFtZSwgc2VjdXJpdHlPcmlnaW5E
YXRhLnNlY3VyaXR5T3JpZ2luKCkpOwogCiAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRPcGVu
QXBwTGlua3MgPSAhaG9zdHNBcmVFcXVhbChXZWJDb3JlOjpVUkwoV2ViQ29yZTo6UGFyc2VkVVJM
U3RyaW5nLCBpbml0aWF0aW5nRnJhbWUtPnVybCgpKSwgcmVzb3VyY2VSZXF1ZXN0LnVybCgpKTsK
LSAgICAgICAgICAgICAgICBhdXRvIGFwaU5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRp
b25BY3Rpb246OmNyZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLnB0
cigpLCBudWxscHRyLCByZXNvdXJjZVJlcXVlc3QsIFdlYkNvcmU6OlVSTCgpLCBzaG91bGRPcGVu
QXBwTGlua3MpOworICAgICAgICAgICAgICAgIGF1dG8gYXBpTmF2aWdhdGlvbkFjdGlvbiA9IEFQ
STo6TmF2aWdhdGlvbkFjdGlvbjo6Y3JlYXRlKG5hdmlnYXRpb25BY3Rpb25EYXRhLCBzb3VyY2VG
cmFtZUluZm8ucHRyKCksIG51bGxwdHIsIHJlc291cmNlUmVxdWVzdCwgV2ViQ29yZTo6VVJMKCks
IHNob3VsZE9wZW5BcHBMaW5rcywgbnVsbHB0ciAvKkZJWE1FICovKTsKIAogICAgICAgICAgICAg
ICAgIGF1dG8gYXBpV2luZG93RmVhdHVyZXMgPSBBUEk6OldpbmRvd0ZlYXR1cmVzOjpjcmVhdGUo
d2luZG93RmVhdHVyZXMpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLTmF2aWdhdGlvbkFjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkFjdGlvbi5tbQkocmV2aXNpb24gMjAzMzI5
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25BY3Rp
b24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2ltcG9ydCAiTmF2aWdh
dGlvbkFjdGlvbkRhdGEuaCIKICNpbXBvcnQgIldLRnJhbWVJbmZvSW50ZXJuYWwuaCIKKyNpbXBv
cnQgIl9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oIgogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogCiBAaW1wbGVtZW50YXRpb24gV0tOYXZpZ2F0aW9uQWN0aW9uCkBAIC0yMTgsNiAr
MjE5LDE0IEBAIC0gKEJPT0wpX3Nob3VsZE9wZW5FeHRlcm5hbFVSTHMKICAgICByZXR1cm4gW3Nl
bGYgX3Nob3VsZE9wZW5FeHRlcm5hbFNjaGVtZXNdOwogfQogCistIChfV0tVc2VySW5pdGlhdGVk
QWN0aW9uICopX3VzZXJJbml0aWF0ZWRBY3Rpb24KK3sKKyAgICBhdXRvIHVzZXJJbml0aWF0ZWRB
Y3Rpb24gPSBfbmF2aWdhdGlvbkFjdGlvbi0+dXNlckluaXRpYXRlZEFjdGlvbigpOworICAgIGlm
ICh1c2VySW5pdGlhdGVkQWN0aW9uKQorICAgICAgICByZXR1cm4gd3JhcHBlcigqdXNlckluaXRp
YXRlZEFjdGlvbik7CisgICAgcmV0dXJuIG5pbDsKK30KKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZpZ2F0aW9uQWN0aW9uUHJp
dmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tOYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oCShyZXZpc2lvbiAyMDMzMjkpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkFjdGlvblByaXZhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAor
QGNsYXNzIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb247CisKICNpZiBUQVJHRVRfT1NfSVBIT05FCiB0
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBXS1N5bnRoZXRpY0NsaWNrVHlwZSkgewogICAgIFdL
U3ludGhldGljQ2xpY2tUeXBlTm9UYXAsCkBAIC00NSw2ICs0Nyw4IEBAIHR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFdLU3ludGhldGljQ2wKIAogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBCT09MIF9zaG91bGRPcGVuRXh0ZXJuYWxVUkxzIFdLX0FQSV9ERVBSRUNBVEVEKCJ1c2Ug
X3Nob3VsZE9wZW5FeHRlcm5hbFNjaGVtZXMgYW5kIF9zaG91bGRPcGVuQXBwTGlua3MiLCBtYWNv
c3goMTAuMTEsIDEwLjExKSwgaW9zKDkuMCwgOS4wKSk7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgX1dLVXNlckluaXRpYXRlZEFjdGlvbiAqX3VzZXJJbml0aWF0ZWRBY3Rpb247
CisKICNpZiBUQVJHRVRfT1NfSVBIT05FCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IFdLU3ludGhldGljQ2xpY2tUeXBlIF9zeW50aGV0aWNDbGlja1R5cGUgV0tfQVBJX0FWQUlMQUJM
RShpb3MoMTAuMCkpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1VzZXJJbml0aWF0ZWRBY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0ZWRBY3Rpb24uaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0
aWF0ZWRBY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQK
KworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK05TX0FTU1VNRV9OT05OVUxM
X0JFR0lOCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLVXNlckluaXRpYXRlZEFjdGlvbiA6IE5TT2JqZWN0CisK
Ky0gKHZvaWQpY29uc3VtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVy
PWlzQ29uc3VtZWQpIEJPT0wgY29uc3VtZWQ7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExf
RU5ECisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tVc2VySW5pdGlhdGVkQWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckluaXRpYXRlZEFjdGlvbi5tbQkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0ZWRB
Y3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFs
LmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCitAaW1wbGVtZW50YXRpb24gX1dLVXNlckluaXRp
YXRlZEFjdGlvbgorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBfdXNlckluaXRpYXRlZEFjdGlv
bi0+flVzZXJJbml0aWF0ZWRBY3Rpb24oKTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKwor
LSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbgoreworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIjwlQDogJXA7IGNvbnN1bWVkID0gJXM+IiwgTlNTdHJpbmdGcm9tQ2xhc3Mo
c2VsZi5jbGFzcyksIHNlbGYsIHNlbGYuY29uc3VtZWQgPyAiWUVTIiA6ICJOTyJdOworfQorCist
ICh2b2lkKWNvbnN1bWUKK3sKKyAgICBfdXNlckluaXRpYXRlZEFjdGlvbi0+c2V0Q29uc3VtZWQo
KTsKK30KKworLSAoQk9PTClpc0NvbnN1bWVkCit7CisgICAgcmV0dXJuIF91c2VySW5pdGlhdGVk
QWN0aW9uLT5jb25zdW1lZCgpOworfQorCisjcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wg
aW1wbGVtZW50YXRpb24KKworLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK3sKKyAgICByZXR1
cm4gKl91c2VySW5pdGlhdGVkQWN0aW9uOworfQorCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50
ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVy
bmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgIl9XS1VzZXJJbml0aWF0ZWRBY3Rpb24uaCIKKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNp
bXBvcnQgIkFQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaCIKKyNpbXBvcnQgIldLT2JqZWN0LmgiCisj
aW1wb3J0IDx3dGYvVmVjdG9yLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEFQSSB7CisKK2lubGluZSBfV0tVc2VySW5pdGlhdGVkQWN0aW9uICp3cmFwcGVy
KFVzZXJJbml0aWF0ZWRBY3Rpb24mIHVzZXJJbml0aWF0ZWRBY3Rpb24pCit7CisgICAgQVNTRVJU
KFt1c2VySW5pdGlhdGVkQWN0aW9uLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tVc2VySW5p
dGlhdGVkQWN0aW9uIGNsYXNzXV0pOworICAgIHJldHVybiAoX1dLVXNlckluaXRpYXRlZEFjdGlv
biAqKXVzZXJJbml0aWF0ZWRBY3Rpb24ud3JhcHBlcigpOworfQorCit9CisKK0BpbnRlcmZhY2Ug
X1dLVXNlckluaXRpYXRlZEFjdGlvbiAoKSA8V0tPYmplY3Q+IHsKK0BwYWNrYWdlCisgICAgQVBJ
OjpPYmplY3RTdG9yYWdlPEFQSTo6VXNlckluaXRpYXRlZEFjdGlvbj4gX3VzZXJJbml0aWF0ZWRB
Y3Rpb247Cit9CitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0NvY29hL1VJRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NvY29hL1VJRGVsZWdhdGUubW0JKHJldmlzaW9uIDIwMzMyOSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIs
NyArMTYyLDcgQEAgUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gVUlEZWxlZwogICAg
IGF1dG8gc291cmNlRnJhbWVJbmZvID0gQVBJOjpGcmFtZUluZm86OmNyZWF0ZSgqaW5pdGlhdGlu
Z0ZyYW1lLCBzZWN1cml0eU9yaWdpbkRhdGEuc2VjdXJpdHlPcmlnaW4oKSk7CiAKICAgICBib29s
IHNob3VsZE9wZW5BcHBMaW5rcyA9ICFob3N0c0FyZUVxdWFsKFdlYkNvcmU6OlVSTChXZWJDb3Jl
OjpQYXJzZWRVUkxTdHJpbmcsIGluaXRpYXRpbmdGcmFtZS0+dXJsKCkpLCByZXF1ZXN0LnVybCgp
KTsKLSAgICBhdXRvIGFwaU5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246
OmNyZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLnB0cigpLCBudWxs
cHRyLCByZXF1ZXN0LCBXZWJDb3JlOjpVUkwoKSwgc2hvdWxkT3BlbkFwcExpbmtzKTsKKyAgICBh
dXRvIGFwaU5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShu
YXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLnB0cigpLCBudWxscHRyLCByZXF1
ZXN0LCBXZWJDb3JlOjpVUkwoKSwgc2hvdWxkT3BlbkFwcExpbmtzLCBudWxscHRyIC8qRklYTUUg
Ki8pOwogCiAgICAgYXV0byBhcGlXaW5kb3dGZWF0dXJlcyA9IEFQSTo6V2luZG93RmVhdHVyZXM6
OmNyZWF0ZSh3aW5kb3dGZWF0dXJlcyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwMzMyOSkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTEzNyw2ICsxMTM3LDEwIEBACiAJCTdDQjE2RkYyMTcyNEJBMjgwMDdBMEE5NSAv
KiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBT
YW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjE2
RkU1MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2lu
LnNiICovOyB9OwogCQk3Q0IxNkZGMzE3MjRCQTJGMDA3QTBBOTUgLyogY29tLm1pY3Jvc29mdC5T
aWx2ZXJsaWdodFBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxNkZFNjE3MjRCOUI1MDA3QTBBOTUg
LyogY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBsdWdpbi5zYiAqLzsgfTsKIAkJN0NCMTZGRjQx
NzI0QkEzMDAwN0EwQTk1IC8qIGNvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiIGlu
IENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDQjE2RkU3MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ub3JhY2xlLmphdmEuSmF2
YUFwcGxldFBsdWdpbi5zYiAqLzsgfTsKKwkJN0NCMzY1QUExRDMxREI3MDAwNzE1OENBIC8qIF9X
S1VzZXJJbml0aWF0ZWRBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDQjM2NUE4MUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVk
QWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJN0NCMzY1QUIxRDMxREI3MDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb24ubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IzNjVBOTFE
MzFEQjcwMDA3MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbi5tbSAqLzsgfTsKKwkJN0NC
MzY1QUQxRDMxREMxMDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMzY1QUMx
RDMxREMxMDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oICovOyB9
OworCQk3Q0IzNjVCMTFEMzFERDFFMDA3MTU4Q0EgLyogQVBJVXNlckluaXRpYXRlZEFjdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMzY1QUYx
RDMxREQxRTAwNzE1OENBIC8qIEFQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaCAqLzsgfTsKIAkJN0NC
QjgxMUMxQUEwRjhCMTAwNkIxOTQyIC8qIEluamVjdGVkQnVuZGxlRmlsZUhhbmRsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0JCODExQTFBQTBG
OEIxMDA2QjE5NDIgLyogSW5qZWN0ZWRCdW5kbGVGaWxlSGFuZGxlLmNwcCAqLzsgfTsKIAkJN0NC
QjgxMUQxQUEwRjhCMTAwNkIxOTQyIC8qIEluamVjdGVkQnVuZGxlRmlsZUhhbmRsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCQjgxMUIxQUEwRjhC
MTAwNkIxOTQyIC8qIEluamVjdGVkQnVuZGxlRmlsZUhhbmRsZS5oICovOyB9OwogCQk3Q0JCODEy
MDFBQTBGOTcwMDA2QjE5NDIgLyogV0tCdW5kbGVGaWxlSGFuZGxlUmVmLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQkI4MTFFMUFBMEY5NzAwMDZC
MTk0MiAvKiBXS0J1bmRsZUZpbGVIYW5kbGVSZWYuY3BwICovOyB9OwpAQCAtMzIwMCw2ICszMjA0
LDEwIEBACiAJCTdDQjE2RkU1MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ubWFjcm9tZWRpYS5GbGFz
aCBQbGF5ZXIucGx1Z2luLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJjb20ubWFjcm9tZWRp
YS5GbGFzaCBQbGF5ZXIucGx1Z2luLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0NCMTZGRTYxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5taWNyb3NvZnQuU2lsdmVybGlnaHRQbHVn
aW4uc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBs
dWdpbi5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCMTZGRTcxNzI0QjlCNTAw
N0EwQTk1IC8qIGNvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IGNvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3Q0IzNjVBODFEMzFEQjcwMDA3MTU4Q0EgLyogX1dLVXNl
ckluaXRpYXRlZEFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tV
c2VySW5pdGlhdGVkQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDQjM2
NUE5MUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVXNlckluaXRpYXRlZEFjdGlvbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NCMzY1QUMxRDMxREMxMDAwNzE1OENB
IC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBfV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NCMzY1QUYxRDMxREQxRTAwNzE1OENBIC8qIEFQSVVzZXJJ
bml0aWF0ZWRBY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJVXNl
ckluaXRpYXRlZEFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0JCODEx
QTFBQTBGOEIxMDA2QjE5NDIgLyogSW5qZWN0ZWRCdW5kbGVGaWxlSGFuZGxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlRmlsZUhhbmRsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQkI4MTFCMUFBMEY4QjEwMDZCMTk0
MiAvKiBJbmplY3RlZEJ1bmRsZUZpbGVIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVGaWxlSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDQkI4MTFFMUFBMEY5NzAwMDZCMTk0MiAvKiBXS0J1bmRsZUZpbGVIYW5kbGVS
ZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tCdW5kbGVGaWxl
SGFuZGxlUmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUxMzQsNiArNTE0
Miw5IEBACiAJCQkJN0M4ODJERjMxQzdFOTk1RTAwNkJGNzMxIC8qIF9XS1VzZXJDb250ZW50V29y
bGQuaCAqLywKIAkJCQk3Qzg4MkRGNDFDN0U5OTVFMDA2QkY3MzEgLyogX1dLVXNlckNvbnRlbnRX
b3JsZC5tbSAqLywKIAkJCQk3Qzg4MkRGNTFDN0U5OTVFMDA2QkY3MzEgLyogX1dLVXNlckNvbnRl
bnRXb3JsZEludGVybmFsLmggKi8sCisJCQkJN0NCMzY1QTgxRDMxREI3MDAwNzE1OENBIC8qIF9X
S1VzZXJJbml0aWF0ZWRBY3Rpb24uaCAqLywKKwkJCQk3Q0IzNjVBOTFEMzFEQjcwMDA3MTU4Q0Eg
LyogX1dLVXNlckluaXRpYXRlZEFjdGlvbi5tbSAqLywKKwkJCQk3Q0IzNjVBQzFEMzFEQzEwMDA3
MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFsLmggKi8sCiAJCQkJMkQ4Nzg2
MUIxQkRCNTRCRjAwRDAyQUJCIC8qIF9XS1VzZXJTdHlsZVNoZWV0LmggKi8sCiAJCQkJMkQ4Nzg2
MUMxQkRCNTRCRjAwRDAyQUJCIC8qIF9XS1VzZXJTdHlsZVNoZWV0Lm1tICovLAogCQkJCTJEODc4
NjFGMUJEQjU3RjUwMEQwMkFCQiAvKiBfV0tVc2VyU3R5bGVTaGVldEludGVybmFsLmggKi8sCkBA
IC02MTI5LDYgKzYxNDAsNyBAQAogCQkJCTdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAvKiBBUElV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmggKi8sCiAJCQkJN0M4ODJERkIxQzdFOTlBNjAwNkJG
NzMxIC8qIEFQSVVzZXJDb250ZW50V29ybGQuY3BwICovLAogCQkJCTdDODgyREZDMUM3RTk5QTYw
MDZCRjczMSAvKiBBUElVc2VyQ29udGVudFdvcmxkLmggKi8sCisJCQkJN0NCMzY1QUYxRDMxREQx
RTAwNzE1OENBIC8qIEFQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaCAqLywKIAkJCQk3Qzg5RDJBNTFB
Njc4OUVBMDAzQTVGREUgLyogQVBJVXNlclNjcmlwdC5jcHAgKi8sCiAJCQkJN0M4OUQyOTIxQTY3
MTIyRjAwM0E1RkRFIC8qIEFQSVVzZXJTY3JpcHQuaCAqLywKIAkJCQkyRDg3ODYyMTFCREI1OEZG
MDBEMDJBQkIgLyogQVBJVXNlclN0eWxlU2hlZXQuY3BwICovLApAQCAtNzY0Myw2ICs3NjU1LDcg
QEAKIAkJCQkxQTBFQzc1RTEyNEJDN0IyMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTA0M0I1RTEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJv
Y2Vzc1Byb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMDQzREMxMTI0RkY4NzUw
MEZGQkZCNSAvKiBQbHVnaW5Qcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0NCMzY1QUQxRDMx
REMxMDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE4RUZBNzExMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5RjMzMTJCODQ0RTIwMDhGRTk4NCAvKiBQbHVn
aW5RdWlya3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRDYyMjc4MTczOUQ4NjMwMDVCRDdGRiAv
KiBQbHVnaW5TYW5kYm94UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03Nzg1LDYgKzc3OTgs
NyBAQAogCQkJCUJDRTQ2OTc3MTIxNEYyN0IwMDBCOThFQiAvKiBXZWJGcmFtZUxpc3RlbmVyUHJv
eHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDMyRDdGMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJG
cmFtZUxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MUYyQ0IxMjFCNjdBRDAw
RUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTdDQjM2NUFBMUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0I5RjZBMDExMjNBODRCMDBBMTM3RTAgLyogV2ViRnJhbWVQb2xp
Y3lMaXN0ZW5lclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzlCMzhBMTEwRjUzOEJFMDA0
NDNBMTUgLyogV2ViRnJhbWVQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCMUY3OTkxRDFC
MzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtODIxNSw2ICs4MjI5LDcgQEAKIAkJCQkxQTQ4MzJDQzFBOUJDNDY1MDA4
QjRERkUgLyogV0tXZWJzaXRlRGF0YVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0ODMy
Q0UxQTlCQzQ4NDAwOEI0REZFIC8qIFdLV2Vic2l0ZURhdGFSZWNvcmRJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFBNjU0RDExQjE0RjcxNDAwQkYxRDNFIC8qIFdLV2Vic2l0ZURhdGFS
ZWNvcmRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Q0IzNjVCMTFEMzFERDFFMDA3MTU4
Q0EgLyogQVBJVXNlckluaXRpYXRlZEFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzVBOEQy
QzgxODdDQ0ZBQjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzVBOEQyRDYxODdEMUMwRTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyODY3QTFDN0Y3QkE2MDA2OUFDNEYgLyogV0tX
ZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MzQ2LDYgKzkzNjEs
NyBAQAogCQkJCTFBQjFGNzk4MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0
b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdCNjIwNzEy
OUEwQTY3MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
N0I2MjUzMTJBNDNDOTYwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBEYXRhLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTdDQjM2NUFCMUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0
aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3QjYyMTYxMkE0MjE5QTAwRDE3NEE0IC8qIFdl
YlBhZ2VHcm91cFByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOUVBMzExMUE5NkQ5RUIw
MDJEMjgwNyAvKiBXZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkRBOTQ0QkExODg0RUEzQzAwRUQ4NkRCIC8qIFdlYlBhZ2VJT1MubW0gaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2
aXNpb24gMjAzMzI5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2No
ZW1lUmVnaXN0cnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVXNlckdlc3R1cmVJ
bmRpY2F0b3IuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KQEAgLTcxOSw2ICs3MjAsMzUg
QEAgV2ViUGFnZUdyb3VwUHJveHkqIFdlYlByb2Nlc3M6OndlYlBhZ2VHcgogICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCitzdGF0aWMgdWludDY0X3QgbmV4dFVz
ZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgaWRlbnRp
ZmllciA9IDE7CisgICAgcmV0dXJuIGlkZW50aWZpZXIrKzsKK30KKwordWludDY0X3QgV2ViUHJv
Y2Vzczo6dXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIoUmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+
IHRva2VuKQoreworICAgIFdURkxvZ0Fsd2F5cygiV2ViUHJvY2Vzczo6dXNlckdlc3R1cmVUb2tl
bklkZW50aWZpZXIgJXAiLCB0b2tlbi5nZXQoKSk7CisKKyAgICBpZiAoIXRva2VuIHx8ICF0b2tl
bi0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXV0
byByZXN1bHQgPSBtX2FjdGl2ZVVzZXJHZXN0dXJlVG9rZW5zLmVuc3VyZSh0b2tlbi5nZXQoKSwg
W10geyByZXR1cm4gbmV4dFVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKCk7IH0pOworICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPmtleS0+YWRk
RGVzdHJ1Y3Rpb25PYnNlcnZlcihbXSAoVXNlckdlc3R1cmVUb2tlbiYgdG9rZW5CZWluZ0Rlc3Ry
b3llZCkgeworICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlckdlc3R1cmVU
b2tlbkRlc3Ryb3llZCh0b2tlbkJlaW5nRGVzdHJveWVkKTsKKyAgICAgICAgfSk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCit2b2lkIFdlYlBy
b2Nlc3M6OnVzZXJHZXN0dXJlVG9rZW5EZXN0cm95ZWQoVXNlckdlc3R1cmVUb2tlbiYgdG9rZW4p
Cit7CisgICAgYXV0byBpZGVudGlmaWVyID0gbV9hY3RpdmVVc2VyR2VzdHVyZVRva2Vucy50YWtl
KCZ0b2tlbik7CisgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViUHJvY2Vzc1Byb3h5OjpEaWREZXN0cm95VXNlckdlc3R1cmVUb2tlbihpZGVudGlmaWVyKSwg
MCk7Cit9CisKIHZvaWQgV2ViUHJvY2Vzczo6Y2xlYXJSZXNvdXJjZUNhY2hlcyhSZXNvdXJjZUNh
Y2hlc1RvQ2xlYXIgcmVzb3VyY2VDYWNoZXNUb0NsZWFyKQogewogICAgIHBsYXRmb3JtQ2xlYXJS
ZXNvdXJjZUNhY2hlcyhyZXNvdXJjZUNhY2hlc1RvQ2xlYXIpOwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDIwMzMyOSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3
IEBAIGNsYXNzIENlcnRpZmljYXRlSW5mbzsKIGNsYXNzIFBhZ2VHcm91cDsKIGNsYXNzIFJlc291
cmNlUmVxdWVzdDsKIGNsYXNzIFNlc3Npb25JRDsKK2NsYXNzIFVzZXJHZXN0dXJlVG9rZW47CiBz
dHJ1Y3QgUGx1Z2luSW5mbzsKIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7CiB9CkBAIC0xNDAs
NiArMTQxLDkgQEAgcHVibGljOgogICAgIFdlYlBhZ2VHcm91cFByb3h5KiB3ZWJQYWdlR3JvdXAo
dWludDY0X3QgcGFnZUdyb3VwSUQpOwogICAgIFdlYlBhZ2VHcm91cFByb3h5KiB3ZWJQYWdlR3Jv
dXAoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYpOwogCisgICAgdWludDY0X3QgdXNlckdlc3R1cmVU
b2tlbklkZW50aWZpZXIoUmVmUHRyPFdlYkNvcmU6OlVzZXJHZXN0dXJlVG9rZW4+KTsKKyAgICB2
b2lkIHVzZXJHZXN0dXJlVG9rZW5EZXN0cm95ZWQoV2ViQ29yZTo6VXNlckdlc3R1cmVUb2tlbiYp
OworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgcGlkX3QgcHJlc2VudGVyQXBwbGljYXRpb25Q
aWQoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlbnRlckFwcGxpY2F0aW9uUGlkOyB9CiAjZW5kaWYK
QEAgLTM5Myw2ICszOTcsOCBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgbV9wYWdlc01hcmtp
bmdMYXllcnNBc1ZvbGF0aWxlIHsgMCB9OwogICAgIGJvb2wgbV9zdXBwcmVzc01lbW9yeVByZXNz
dXJlSGFuZGxlciB7IGZhbHNlIH07CisKKyAgICBIYXNoTWFwPFdlYkNvcmU6OlVzZXJHZXN0dXJl
VG9rZW4gKiwgdWludDY0X3Q+IG1fYWN0aXZlVXNlckdlc3R1cmVUb2tlbnM7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZp
Y2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5j
cHAJKHJldmlzaW9uIDIwMzMyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZp
Y2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5
LDcgKzI0OSw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6ZGlkQ2xpY2tOb3QKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGlzIGV2ZW50IGlzIGJlaW5n
IGRpc3BhdGNoZWQgaW4gcmVhY3Rpb24gdG8gYSB1c2VyJ3MgaW50ZXJhY3Rpb24gd2l0aCBhIHBs
YXRmb3JtIG5vdGlmaWNhdGlvbi4KLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3Io
RGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0
b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgbm90aWZpY2F0aW9uLT5k
aXNwYXRjaENsaWNrRXZlbnQoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlv
bklEKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luVmlldy5jcHAJKHJldmlzaW9uIDIwMzMyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxOCw3ICsxMjE4
LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwZXJmb3JtRnJhbWVMb2FkVVJMUmVxdQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRv
cihyZXF1ZXN0LT5hbGxvd1BvcHVwcygpID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGlj
YXRvciBnZXN0dXJlSW5kaWNhdG9yKHJlcXVlc3QtPmFsbG93UG9wdXBzKCkgPyBPcHRpb25hbDxQ
cm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxv
cHQpOwogCiAgICAgLy8gRmlyc3QsIHRyeSB0byBmaW5kIGEgdGFyZ2V0IGZyYW1lLgogICAgIEZy
YW1lKiB0YXJnZXRGcmFtZSA9IGZyYW1lLT5sb2FkZXIoKS5maW5kRnJhbWVGb3JOYXZpZ2F0aW9u
KHJlcXVlc3QtPnRhcmdldCgpKTsKQEAgLTE1MTMsNyArMTUxMyw3IEBAIGJvb2wgUGx1Z2luVmll
dzo6ZXZhbHVhdGUoTlBPYmplY3QqIG5wT2IKICAgICAvLyBwcm90ZWN0IHRoZSBwbHVnLWluIHZp
ZXcgZnJvbSBkZXN0cnVjdGlvbi4KICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3Rl
Y3RvciBwbHVnaW5Qcm90ZWN0b3IoJm1fbnBSdW50aW1lT2JqZWN0TWFwKTsKIAotICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBEZWZpbml0ZWx5
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwor
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBP
cHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KSA6IE51bGxvcHQpOwogICAgIHJldHVybiBtX25wUnVudGltZU9iamVjdE1hcC5ldmFsdWF0ZShu
cE9iamVjdCwgc2NyaXB0U3RyaW5nLCByZXN1bHQpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwCShyZXZpc2lvbiAyMDMzMjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
NCw2ICsyMjQsOCBAQCBQYWdlKiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyhGcmFtCiAg
ICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7CiAjZW5k
aWYKIAorICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKKwog
ICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCpmcmFtZSk7
CiAKICAgICBOYXZpZ2F0aW9uQWN0aW9uRGF0YSBuYXZpZ2F0aW9uQWN0aW9uRGF0YTsKQEAgLTIz
MSwxNCArMjMzLDEzIEBAIFBhZ2UqIFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlV2luZG93KEZyYW0K
ICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5tb2RpZmllcnMgPSBJbmplY3RlZEJ1bmRsZU5hdmln
YXRpb25BY3Rpb246Om1vZGlmaWVyc0Zvck5hdmlnYXRpb25BY3Rpb24obmF2aWdhdGlvbkFjdGlv
bik7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEubW91c2VCdXR0b24gPSBJbmplY3RlZEJ1bmRs
ZU5hdmlnYXRpb25BY3Rpb246Om1vdXNlQnV0dG9uRm9yTmF2aWdhdGlvbkFjdGlvbihuYXZpZ2F0
aW9uQWN0aW9uKTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5zeW50aGV0aWNDbGlja1R5cGUg
PSBJbmplY3RlZEJ1bmRsZU5hdmlnYXRpb25BY3Rpb246OnN5bnRoZXRpY0NsaWNrVHlwZUZvck5h
dmlnYXRpb25BY3Rpb24obmF2aWdhdGlvbkFjdGlvbik7Ci0gICAgbmF2aWdhdGlvbkFjdGlvbkRh
dGEuaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgPSBuYXZpZ2F0aW9uQWN0aW9uLnByb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpOworICAgIG5hdmlnYXRpb25BY3Rpb25EYXRhLnVzZXJHZXN0dXJlVG9rZW5J
ZGVudGlmaWVyID0gd2ViUHJvY2Vzcy51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcihuYXZpZ2F0
aW9uQWN0aW9uLnVzZXJHZXN0dXJlVG9rZW4oKSk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEu
Y2FuSGFuZGxlUmVxdWVzdCA9IG1fcGFnZS0+Y2FuSGFuZGxlUmVxdWVzdChyZXF1ZXN0LnJlc291
cmNlUmVxdWVzdCgpKTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5zaG91bGRPcGVuRXh0ZXJu
YWxVUkxzUG9saWN5ID0gbmF2aWdhdGlvbkFjdGlvbi5zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9s
aWN5KCk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuZG93bmxvYWRBdHRyaWJ1dGUgPSBuYXZp
Z2F0aW9uQWN0aW9uLmRvd25sb2FkQXR0cmlidXRlKCk7CiAKICAgICB1aW50NjRfdCBuZXdQYWdl
SUQgPSAwOwogICAgIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgICBh
dXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7CiAgICAgaWYgKCF3ZWJQ
cm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkNyZWF0ZU5ld1BhZ2Uod2ViRnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlPcmln
aW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCB3aW5k
b3dGZWF0dXJlcywgbmF2aWdhdGlvbkFjdGlvbkRhdGEpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpDcmVhdGVOZXdQYWdlOjpSZXBseShuZXdQYWdlSUQsIHBhcmFtZXRlcnMpLCBtX3BhZ2UtPnBh
Z2VJRCgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ29u
dGV4dE1lbnVDbGllbnQuY3BwCShyZXZpc2lvbiAyMDMzMjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50OjpzZWFy
Y2hXaXRoR29vCiAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNo
P3E9IiArIGVuY29kZWQgKyAiJmllPVVURi04Jm9lPVVURi04IjsKIAogICAgIGlmIChQYWdlKiBw
YWdlID0gZnJhbWUtPnBhZ2UoKSkgewotICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRp
Y2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgICAgICBw
YWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS51cmxTZWxlY3RlZChVUkwoUGFyc2VkVVJMU3RyaW5n
LCB1cmwpLCBTdHJpbmcoKSwgMCwgTG9ja0hpc3Rvcnk6Ok5vLCBMb2NrQmFja0ZvcndhcmRMaXN0
OjpObywgTWF5YmVTZW5kUmVmZXJyZXIsIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNo
b3VsZE5vdEFsbG93KTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmNwcAkocmV2aXNpb24gMjAzMzI5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcyNyw3ICs3MjcsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lk
CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEubW9kaWZpZXJzID0gYWN0aW9uLT5tb2RpZmllcnMo
KTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5tb3VzZUJ1dHRvbiA9IGFjdGlvbi0+bW91c2VC
dXR0b24oKTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5zeW50aGV0aWNDbGlja1R5cGUgPSBh
Y3Rpb24tPnN5bnRoZXRpY0NsaWNrVHlwZSgpOwotICAgIG5hdmlnYXRpb25BY3Rpb25EYXRhLmlz
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlID0gbmF2aWdhdGlvbkFjdGlvbi5wcm9jZXNzaW5nVXNlckdl
c3R1cmUoKTsKKyAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS51c2VyR2VzdHVyZVRva2VuSWRlbnRp
ZmllciA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVy
KG5hdmlnYXRpb25BY3Rpb24udXNlckdlc3R1cmVUb2tlbigpKTsKICAgICBuYXZpZ2F0aW9uQWN0
aW9uRGF0YS5jYW5IYW5kbGVSZXF1ZXN0ID0gd2ViUGFnZS0+Y2FuSGFuZGxlUmVxdWVzdChyZXF1
ZXN0KTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9s
aWN5ID0gbmF2aWdhdGlvbkFjdGlvbi5zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KCk7CiAg
ICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuZG93bmxvYWRBdHRyaWJ1dGUgPSBuYXZpZ2F0aW9uQWN0
aW9uLmRvd25sb2FkQXR0cmlidXRlKCk7CkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZAogICAgIG5hdmlnYXRpb25BY3Rpb25EYXRhLm1v
ZGlmaWVycyA9IGFjdGlvbi0+bW9kaWZpZXJzKCk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEu
bW91c2VCdXR0b24gPSBhY3Rpb24tPm1vdXNlQnV0dG9uKCk7CiAgICAgbmF2aWdhdGlvbkFjdGlv
bkRhdGEuc3ludGhldGljQ2xpY2tUeXBlID0gYWN0aW9uLT5zeW50aGV0aWNDbGlja1R5cGUoKTsK
LSAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5pc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSA9IG5hdmln
YXRpb25BY3Rpb24ucHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CisgICAgbmF2aWdhdGlvbkFjdGlv
bkRhdGEudXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcihuYXZpZ2F0aW9uQWN0aW9uLnVzZXJHZXN0dXJl
VG9rZW4oKSk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuY2FuSGFuZGxlUmVxdWVzdCA9IHdl
YlBhZ2UtPmNhbkhhbmRsZVJlcXVlc3QocmVxdWVzdCk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRh
dGEuc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSA9IG5hdmlnYXRpb25BY3Rpb24uc2hvdWxk
T3BlbkV4dGVybmFsVVJMc1BvbGljeSgpOwogICAgIG5hdmlnYXRpb25BY3Rpb25EYXRhLmRvd25s
b2FkQXR0cmlidXRlID0gbmF2aWdhdGlvbkFjdGlvbi5kb3dubG9hZEF0dHJpYnV0ZSgpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQkocmV2aXNpb24gMjAzMzI5KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDcsNzMgKzM0Nyw3MyBAQCB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1h
bmFnZXI6OnNldFdpcmVsCiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGxheSh1
aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9y
KERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNv
bnRleHRJZCkucGxheSgpOwogfQogCiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBh
dXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRp
Y2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5wYXVzZSgpOwogfQogCiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwor
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUp
OwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkudG9nZ2xlUGxheVN0YXRlKCk7CiB9CiAKIHZv
aWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29u
dGV4dElkKQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0
b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJl
Z2luU2NydWJiaW5nKCk7CiB9CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5k
U2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5lbmRTY3J1YmJpbmcoKTsKIH0KIAogdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRp
bWUpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9j
ZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQ
cm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2Vla1Rv
VGltZSh0aW1lKTsKIH0KIAogdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpmYXN0U2Vl
ayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQogewotICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmZhc3RTZWVrKHRpbWUpOwogfQogCiB2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRl
eHRJZCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9y
KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdp
blNjYW5uaW5nRm9yd2FyZCgpOwogfQogCiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUp
OworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1
cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7
CiB9CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2Nhbm5pbmcodWludDY0
X3QgY29udGV4dElkKQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZp
bml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBp
bmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLmVuZFNjYW5uaW5nKCk7CiB9CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4
KQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdEF1
ZGlvTWVkaWFPcHRpb24oaW5kZXgpOwogfQogCiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXI6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90
IGluZGV4KQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0
b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNl
bGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIwMzMyOSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE2LTA3LTE2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgW1dlYktpdCBBUEldIEFkZCBTUEkgdG8gdHJhY2sgbXVsdGlw
bGUgbmF2aWdhdGlvbnMgY2F1c2VkIGJ5IGEgc2luZ2xlIHVzZXIgZ2VzdHVyZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5ODU2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0
c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc2Vu
ZEV2ZW50OmlzRHJhd1JlY3Q6XSk6XAorICAgICAgICBVcGRhdGUgZm9yIG5ldyBzaWduYXR1cmUg
b2YgVXNlckdlc3R1cmVJbmRpY2F0b3IuCisKIDIwMTYtMDctMTYgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVuYW1lIGZhc3RHZXRBdHRyaWJ1dGUgdG8gYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHJldmlzaW9uIDIwMzMyOSkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC02NjQsNyArNjY0LDcgQEAgLSAoQk9PTClzZW5kRXZlbnQ6KHZvaWQq
KWV2ZW50IGlzRHJhd1JlYwogICAgIEFTU0VSVChfZXZlbnRIYW5kbGVyKTsKICAgICB7CiAgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRp
Y2F0b3IoX2V2ZW50SGFuZGxlci0+Y3VycmVudEV2ZW50SXNVc2VyR2VzdHVyZSgpID8gRGVmaW5p
dGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKKyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihfZXZlbnRI
YW5kbGVyLT5jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlKCkgPyBPcHRpb25hbDxQcm9jZXNzaW5n
VXNlckdlc3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQpOwogICAg
ICAgICBhY2NlcHRlZEV2ZW50ID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+
ZXZlbnQocGx1Z2luLCBldmVudCk7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5j
dGlvbl07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCShyZXZpc2lvbiAyMDMz
MjkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTg4OSw3ICs4ODksNyBAQCBib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhCiAgICAgU3Ryb25nPEpTR2xvYmFsT2Jq
ZWN0PiBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKS52bSgpLCBmcmFtZS0+c2NyaXB0KCkuZ2xv
YmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJ
bmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDog
UG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGdlc3R1cmVJbmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBPcHRpb25hbDxQcm9jZXNzaW5nVXNlckdl
c3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQpOwogICAgIAogICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKHNjcmlwdCkp
OwogICAgIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjAzMzI5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTggQEAKKzIwMTYtMDctMTYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KKworICAgICAgICBbV2ViS2l0IEFQSV0gQWRkIFNQSSB0byB0cmFjayBtdWx0aXBsZSBuYXZp
Z2F0aW9ucyBjYXVzZWQgYnkgYSBzaW5nbGUgdXNlciBnZXN0dXJlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4NTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1pbmlCcm93c2VyL21hYy9XSzJCcm93
c2VyV2luZG93Q29udHJvbGxlci5tOgorICAgICAgICAoLVtXSzJCcm93c2VyV2luZG93Q29udHJv
bGxlciB3ZWJWaWV3OmNyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlvbjpmb3JOYXZpZ2F0aW9u
QWN0aW9uOndpbmRvd0ZlYXR1cmVzOl0pOgorICAgICAgICBBZGQgYmFzaWMgd2luZG93Lm9wZW4g
aW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKC1bV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIg
d2ViVmlldzpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOmRlY2lzaW9uSGFuZGxlcjpd
KToKKyAgICAgICAgQWRkIGJhc2ljIG5hdmlnYXRpb24gcG9saWN5IGltcGxlbWVudGF0aW9uIHdo
aWNoIGltcGxlbWVudHMgYSBydWxlIHdoZXJlIGEgdXNlciBnZXN0dXJlIGlzIG9ubHkgYWxsb3dl
ZAorICAgICAgICB0byBvcGVuIGEgc2luZ2xlIG5vbi13ZWIgVVJMLCBhbGwgb3RoZXJzIGFyZSBk
cm9wcGVkLgorCiAyMDE2LTA3LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwMzMxOC4KSW5kZXg6IFRvb2xzL01p
bmlCcm93c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL01pbmlCcm93c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tCShyZXZp
c2lvbiAyMDMzMjkpCisrKyBUb29scy9NaW5pQnJvd3Nlci9tYWMvV0syQnJvd3NlcldpbmRvd0Nv
bnRyb2xsZXIubQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiQXBw
RGVsZWdhdGUuaCIKICNpbXBvcnQgIlNldHRpbmdzQ29udHJvbGxlci5oIgogI2ltcG9ydCA8V2Vi
S2l0L1dLRnJhbWVJbmZvLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9uQWN0aW9uUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvbkRlbGVnYXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VJRGVs
ZWdhdGUuaD4KQEAgLTM3LDYgKzM4LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dlYk5TVVJMRXh0cmFzLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLVXNlcklu
aXRpYXRlZEFjdGlvbi5oPgogCiBzdGF0aWMgdm9pZCoga2V5VmFsdWVPYnNlcnZpbmdDb250ZXh0
ID0gJmtleVZhbHVlT2JzZXJ2aW5nQ29udGV4dDsKIApAQCAtMzg4LDcgKzM5MCw3IEBAIC0gKHZv
aWQpdXBkYXRlVGl0bGU6KE5TU3RyaW5nICopdGl0bGUKICAgICBpZiAoIXRpdGxlKQogICAgICAg
ICB0aXRsZSA9IF93ZWJWaWV3LlVSTC5sYXN0UGF0aENvbXBvbmVudDsKICAgICAKLSAgICBzZWxm
LndpbmRvdy50aXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQCBbV0syICVk
XSIsIF9pc1ByaXZhdGVCcm93c2luZ1dpbmRvdyA/IEAi8J+ZiCAiIDogQCIiLCB0aXRsZSwgX3dl
YlZpZXcuX3dlYlByb2Nlc3NJZGVudGlmaWVyXTsKKyAgICBzZWxmLndpbmRvdy50aXRsZSA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQCBbV0syICVkXSIsIF9pc1ByaXZhdGVCcm93
c2luZ1dpbmRvdyA/IEAi75mIICIgOiBAIiIsIHRpdGxlLCBfd2ViVmlldy5fd2ViUHJvY2Vzc0lk
ZW50aWZpZXJdOwogfQogCiAtICh2b2lkKW9ic2VydmVWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5n
ICopa2V5UGF0aCBvZk9iamVjdDooaWQpb2JqZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5ICopY2hh
bmdlIGNvbnRleHQ6KHZvaWQgKiljb250ZXh0CkBAIC00MDIsNiArNDA0LDE1IEBAIC0gKHZvaWQp
b2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDooTlNTdHJpbmcKICAgICAgICAgW3NlbGYgdXBkYXRlVGV4
dEZpZWxkRnJvbVVSTDpfd2ViVmlldy5VUkxdOwogfQogCistIChudWxsYWJsZSBXS1dlYlZpZXcg
Kil3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGNyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJh
dGlvbjooV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24gZm9yTmF2aWdhdGlv
bkFjdGlvbjooV0tOYXZpZ2F0aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlvbiB3aW5kb3dGZWF0
dXJlczooV0tXaW5kb3dGZWF0dXJlcyAqKXdpbmRvd0ZlYXR1cmVzCit7CisgICAgV0syQnJvd3Nl
cldpbmRvd0NvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBbW1dLMkJyb3dzZXJXaW5kb3dDb250cm9s
bGVyIGFsbG9jXSBpbml0V2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl07CisgICAgW2Nv
bnRyb2xsZXIgYXdha2VGcm9tTmliXTsKKyAgICBbY29udHJvbGxlci53aW5kb3cgbWFrZUtleUFu
ZE9yZGVyRnJvbnQ6c2VsZl07CisKKyAgICByZXR1cm4gY29udHJvbGxlci0+X3dlYlZpZXc7Cit9
CisKIC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxl
cnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZToo
V0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29t
cGxldGlvbkhhbmRsZXIKIHsKICAgICBOU0FsZXJ0KiBhbGVydCA9IFtbTlNBbGVydCBhbGxvY10g
aW5pdF07CkBAIC01MzUsNiArNTQ2LDIzIEBAIC0gKElCQWN0aW9uKXByaW50V2ViVmlldzooaWQp
c2VuZGVyCiAKICNwcmFnbWEgbWFyayBXS05hdmlnYXRpb25EZWxlZ2F0ZQogCistICh2b2lkKXdl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bjooV0tOYXZpZ2F0aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlvbiBkZWNpc2lvbkhhbmRsZXI6
KHZvaWQgKF4pKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSkpZGVjaXNpb25IYW5kbGVyCit7Cisg
ICAgTE9HKEAiZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiIpOworCisgICAgaWYgKG5h
dmlnYXRpb25BY3Rpb24uX2NhbkhhbmRsZVJlcXVlc3QpIHsKKyAgICAgICAgZGVjaXNpb25IYW5k
bGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChuYXZpZ2F0aW9uQWN0aW9uLl91c2VySW5pdGlhdGVkQWN0aW9uICYmICFu
YXZpZ2F0aW9uQWN0aW9uLl91c2VySW5pdGlhdGVkQWN0aW9uLmlzQ29uc3VtZWQpIHsKKyAgICAg
ICAgW25hdmlnYXRpb25BY3Rpb24uX3VzZXJJbml0aWF0ZWRBY3Rpb24gY29uc3VtZV07CisgICAg
ICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuVVJMOm5hdmlnYXRpb25BY3Rp
b24ucmVxdWVzdC5VUkxdOworICAgIH0KKworICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRp
b25BY3Rpb25Qb2xpY3lDYW5jZWwpOworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAq
KXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlOihXS05hdmlnYXRpb25S
ZXNwb25zZSAqKW5hdmlnYXRpb25SZXNwb25zZSBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKFdL
TmF2aWdhdGlvblJlc3BvbnNlUG9saWN5KSlkZWNpc2lvbkhhbmRsZXIKIHsKICAgICBMT0coQCJk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283869</attachid>
            <date>2016-07-17 11:27:09 -0700</date>
            <delta_ts>2016-07-17 13:18:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159856-20160717112616.patch</filename>
            <type>text/plain</type>
            <size>113395</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBACisyMDE2LTA3LTE2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYktpdCBBUEldIEFkZCBTUEkgdG8g
dHJhY2sgbXVsdGlwbGUgbmF2aWdhdGlvbnMgY2F1c2VkIGJ5IGEgc2luZ2xlIHVzZXIgZ2VzdHVy
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5ODU2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRlY3JlbWVudCk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OnByZXNzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVTY3Jp
cHRJbldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVT
Y3JpcHQpOgorICAgICAgICAqIGRvbS9Vc2VyR2VzdHVyZUluZGljYXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjdXJyZW50VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6VXNlckdlc3R1cmVU
b2tlbjo6flVzZXJHZXN0dXJlVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6VXNlckdlc3R1cmVJ
bmRpY2F0b3I6OlVzZXJHZXN0dXJlSW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJH
ZXN0dXJlSW5kaWNhdG9yOjp+VXNlckdlc3R1cmVJbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6VXNlckdlc3R1cmVJbmRpY2F0b3I6OmN1cnJlbnRVc2VyR2VzdHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1
cmVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjppc0RlZmluaXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBkb20vVXNlckdlc3R1cmVJbmRpY2F0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlVz
ZXJHZXN0dXJlVG9rZW46OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZVRv
a2VuOjpzdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZVRva2VuOjpwcm9jZXNz
aW5nVXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckdlc3R1cmVUb2tlbjo6cHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckdlc3R1
cmVUb2tlbjo6YWRkRGVzdHJ1Y3Rpb25PYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
R2VzdHVyZVRva2VuOjpVc2VyR2VzdHVyZVRva2VuKToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZGlkUmVj
ZWl2ZVJlbW90ZUNvbnRyb2xDb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjpvcGVuSW5OZXdUYWIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdl
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpuYXZpZ2F0
ZSk6CisgICAgICAgICogbG9hZGVyL05hdmlnYXRpb25BY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TmF2aWdhdGlvbkFjdGlvbjo6TmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgICogbG9h
ZGVyL05hdmlnYXRpb25BY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rp
b246OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbjo6ZXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbjo6dXNlckdlc3R1cmVUb2tlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uOjpzaG91bGRPcGVuRXh0ZXJuYWxVUkxz
UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb246OnByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk6IERlbGV0ZWQuCisgICAgICAgICogbG9hZGVyL05hdmlnYXRpb25TY2hlZHVs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkTmF2aWdhdGlvbjo6U2NoZWR1bGVk
TmF2aWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWROYXZpZ2F0aW9uOjp+U2No
ZWR1bGVkTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWROYXZpZ2F0aW9u
Ojpsb2NrQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZE5hdmln
YXRpb246Ondhc0R1cmluZ0xvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkTmF2aWdh
dGlvbjo6aXNMb2NhdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWROYXZp
Z2F0aW9uOjp1c2VyR2VzdHVyZVRvRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVs
ZWROYXZpZ2F0aW9uOjpjbGVhclVzZXJHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmln
YXRpb25TY2hlZHVsZXI6Om11c3RMb2NrQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok5hdmlnYXRpb25TY2hlZHVsZXI6OnNjaGVkdWxlRm9ybVN1Ym1pc3Npb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U2NoZWR1bGVkTmF2aWdhdGlvbjo6d2FzVXNlckdlc3R1cmUpOiBEZWxldGVk
LgorICAgICAgICAqIHBhZ2UvRE9NVGltZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxk
Rm9yd2FyZFVzZXJHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OnVzZXJHZXN0dXJlVG9rZW5U
b0ZvcndhcmQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6OkRPTVRpbWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVRpbWVyOjpmaXJlZCk6CisgICAgICAgICogcGFnZS9ET01UaW1lci5o
OgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc3RN
ZXNzYWdlVGltZXI6OlBvc3RNZXNzYWdlVGltZXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVz
c0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEb3Vi
bGVDbGlja0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjprZXlFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhpdFRlc3RSZXN1bHQ6OnRvZ2dsZU1lZGlhRnVsbHNjcmVlblN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmVudGVyRnVsbHNjcmVlbkZvclZpZGVvKToKKyAgICAgICAg
KFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OnRvZ2dsZUVuaGFuY2VkRnVsbHNjcmVlbkZvclZpZGVv
KToKKwogMjAxNi0wNy0xNyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgVXBkYXRlIERPTUNvcmVFeGNlcHRpb24gdG8gdXNlIHRoZSBkZXNjcmlwdGlvbiBpbiB0
b1N0cmluZygpLgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDIwMzMzMykKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDcwLDEzICsxMDcwLDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmFsdGVyU2xpZGUKICAgICAKIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmluY3JlbWVudCgpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRv
cihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBkb2N1bWVudCgpKTsKKyAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwg
ZG9jdW1lbnQoKSk7CiAgICAgYWx0ZXJTbGlkZXJWYWx1ZSh0cnVlKTsKIH0KIAogdm9pZCBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGVjcmVtZW50KCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGlj
YXRvciBnZXN0dXJlSW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsIGRv
Y3VtZW50KCkpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlLCBkb2N1bWVudCgpKTsKICAgICBhbHRlclNsaWRlclZhbHVlKGZh
bHNlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MjAsNyArOTIwLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmVzcygpCiAg
ICAgaWYgKGhpdFRlc3RFbGVtZW50ICYmIGhpdFRlc3RFbGVtZW50LT5pc0Rlc2NlbmRhbnRPZihw
cmVzc0VsZW1lbnQpKQogICAgICAgICBwcmVzc0VsZW1lbnQgPSBoaXRUZXN0RWxlbWVudDsKICAg
ICAKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKERlZmluaXRlbHlQ
cm9jZXNzaW5nVXNlckdlc3R1cmUsIGRvY3VtZW50KTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBnZXN0dXJlSW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgZG9jdW1lbnQpOwogICAg
IAogICAgIGJvb2wgZGlzcGF0Y2hlZFRvdWNoRXZlbnQgPSBkaXNwYXRjaFRvdWNoRXZlbnQoKTsK
ICAgICBpZiAoIWRpc3BhdGNoZWRUb3VjaEV2ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwMzMzMykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OTcsNyArNDk3LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNj
cmlwdE9iamVjdAogCiBKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVTY3JpcHRJbldv
cmxkKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IFN0cmluZyYgc2NyaXB0LCBib29sIGZv
cmNlVXNlckdlc3R1cmUpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGlj
YXRvcihmb3JjZVVzZXJHZXN0dXJlID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6
IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBnZXN0dXJlSW5kaWNhdG9yKGZvcmNlVXNlckdlc3R1cmUgPyBPcHRpb25hbDxQcm9jZXNzaW5n
VXNlckdlc3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQpOwogICAg
IFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShzY3JpcHQsIG1fZnJhbWUuZG9jdW1lbnQoKS0+
dXJsKCkpOwogCiAgICAgaWYgKCFjYW5FeGVjdXRlU2NyaXB0cyhBYm91dFRvRXhlY3V0ZVNjcmlw
dCkgfHwgaXNQYXVzZWQoKSkKQEAgLTUyMyw3ICs1MjMsNyBAQCBib29sIFNjcmlwdENvbnRyb2xs
ZXI6OmNhbkV4ZWN1dGVTY3JpcHRzCiAKIEpTVmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0
ZVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJlLCBFeGNl
cHRpb25EZXRhaWxzKiBleGNlcHRpb25EZXRhaWxzKQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGdlc3R1cmVJbmRpY2F0b3IoZm9yY2VVc2VyR2VzdHVyZSA/IERlZmluaXRlbHlQcm9jZXNz
aW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNl
ckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihmb3JjZVVzZXJHZXN0dXJlID8gT3B0
aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGU+KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSkg
OiBOdWxsb3B0KTsKICAgICByZXR1cm4gZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNj
cmlwdCwgbV9mcmFtZS5kb2N1bWVudCgpLT51cmwoKSksIGV4Y2VwdGlvbkRldGFpbHMpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2VzdHVyZUluZGljYXRvci5jcHAJKHJl
dmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2VzdHVyZUluZGljYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDQyICsyOCw2OCBAQAogCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIGlzRGVm
aW5pdGUoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGUgc3RhdGUpCitzdGF0aWMgUmVmUHRyPFVz
ZXJHZXN0dXJlVG9rZW4+JiBjdXJyZW50VG9rZW4oKQogewotICAgIHJldHVybiBzdGF0ZSA9PSBE
ZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIHx8IHN0YXRlID09IERlZmluaXRlbHlOb3RQ
cm9jZXNzaW5nVXNlckdlc3R1cmUgfHwgc3RhdGUgPT0gRGVmaW5pdGVseVByb2Nlc3NpbmdQb3Rl
bnRpYWxVc2VyR2VzdHVyZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPFVzZXJH
ZXN0dXJlVG9rZW4+PiB0b2tlbjsKKyAgICByZXR1cm4gdG9rZW47CiB9CiAKLVByb2Nlc3NpbmdV
c2VyR2VzdHVyZVN0YXRlIFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpzX3N0YXRlID0gRGVmaW5pdGVs
eU5vdFByb2Nlc3NpbmdVc2VyR2VzdHVyZTsKK1VzZXJHZXN0dXJlVG9rZW46On5Vc2VyR2VzdHVy
ZVRva2VuKCkKK3sKKyAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9kZXN0cnVjdGlvbk9ic2Vy
dmVycykKKyAgICAgICAgb2JzZXJ2ZXIoKnRoaXMpOworfQogCi1Vc2VyR2VzdHVyZUluZGljYXRv
cjo6VXNlckdlc3R1cmVJbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGUgc3RhdGUs
IERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IG1fcHJldmlvdXNTdGF0ZShzX3N0YXRlKQorVXNl
ckdlc3R1cmVJbmRpY2F0b3I6OlVzZXJHZXN0dXJlSW5kaWNhdG9yKE9wdGlvbmFsPFByb2Nlc3Np
bmdVc2VyR2VzdHVyZVN0YXRlPiBzdGF0ZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogbV9w
cmV2aW91c1Rva2VuKGN1cnJlbnRUb2tlbigpKQogewogICAgIC8vIFNpbGVudGx5IGlnbm9yZSBV
c2VyR2VzdHVyZUluZGljYXRvcnMgb24gbm9uIG1haW4gdGhyZWFkcy4KICAgICBpZiAoIWlzTWFp
blRocmVhZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgLy8gV2Ugb3ZlcndyaXRlIHNfc3RhdGUg
b25seSBpZiB0aGUgY2FsbGVyIGlzIGRlZmluaXRlIGFib3V0IHRoZSBnZXN0dXJlIHN0YXRlLgot
ICAgIGlmIChpc0RlZmluaXRlKHN0YXRlKSkKLSAgICAgICAgc19zdGF0ZSA9IHN0YXRlOwotICAg
IEFTU0VSVChpc0RlZmluaXRlKHNfc3RhdGUpKTsKIAotICAgIGlmIChkb2N1bWVudCAmJiBzX3N0
YXRlID09IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpCisgICAgaWYgKHN0YXRlKQor
ICAgICAgICBjdXJyZW50VG9rZW4oKSA9IFVzZXJHZXN0dXJlVG9rZW46OmNyZWF0ZShzdGF0ZS52
YWx1ZSgpKTsKKworICAgIGlmIChkb2N1bWVudCAmJiBjdXJyZW50VG9rZW4oKS0+cHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCkpCiAgICAgICAgIGRvY3VtZW50LT50b3BEb2N1bWVudCgpLnVwZGF0ZUxh
c3RIYW5kbGVkVXNlckdlc3R1cmVUaW1lc3RhbXAoKTsKIH0KIAorVXNlckdlc3R1cmVJbmRpY2F0
b3I6OlVzZXJHZXN0dXJlSW5kaWNhdG9yKFJlZlB0cjxVc2VyR2VzdHVyZVRva2VuPiB0b2tlbikK
KyAgICA6IG1fcHJldmlvdXNUb2tlbihjdXJyZW50VG9rZW4oKSkKK3sKKyAgICBpZiAoIWlzTWFp
blRocmVhZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodG9rZW4pCisgICAgICAgIGN1
cnJlbnRUb2tlbigpID0gdG9rZW47Cit9CisKIFVzZXJHZXN0dXJlSW5kaWNhdG9yOjp+VXNlckdl
c3R1cmVJbmRpY2F0b3IoKQogewogICAgIGlmICghaXNNYWluVGhyZWFkKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBzX3N0YXRlID0gbV9wcmV2aW91c1N0YXRlOwotICAgIEFTU0VSVChpc0RlZmlu
aXRlKHNfc3RhdGUpKTsKKyAgICAKKyAgICBjdXJyZW50VG9rZW4oKSA9IG1fcHJldmlvdXNUb2tl
bjsKK30KKworUmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+IFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpj
dXJyZW50VXNlckdlc3R1cmUoKQoreworICAgIGlmICghaXNNYWluVGhyZWFkKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGN1cnJlbnRUb2tlbigpOwogfQogCiBib29s
IFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKQogewotICAgIHJl
dHVybiBpc01haW5UaHJlYWQoKSA/IHNfc3RhdGUgPT0gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSA6IGZhbHNlOworICAgIGlmICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBjdXJyZW50VG9rZW4oKSA/IGN1cnJlbnRUb2tlbigpLT5w
cm9jZXNzaW5nVXNlckdlc3R1cmUoKSA6IGZhbHNlOwogfQogCiBib29sIFVzZXJHZXN0dXJlSW5k
aWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1cmVGb3JNZWRpYSgpCkBAIC03MSw3ICs5Nyw3IEBA
IGJvb2wgVXNlckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2UKICAgICBpZiAoIWlzTWFp
blRocmVhZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc19zdGF0ZSA9
PSBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIHx8IHNfc3RhdGUgPT0gRGVmaW5pdGVs
eVByb2Nlc3NpbmdQb3RlbnRpYWxVc2VyR2VzdHVyZTsKKyAgICByZXR1cm4gY3VycmVudFRva2Vu
KCkgPyBjdXJyZW50VG9rZW4oKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSA6IGZh
bHNlOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVXNlckdlc3R1cmVJbmRpY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVXNlckdlc3R1cmVJbmRpY2F0
b3IuaAkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1VzZXJHZXN0dXJl
SW5kaWNhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDM3ICsyMyw2OCBAQAogICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgVXNlckdlc3R1cmVJbmRp
Y2F0b3JfaAotI2RlZmluZSBVc2VyR2VzdHVyZUluZGljYXRvcl9oCisjcHJhZ21hIG9uY2UKIAor
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKIAogZW51bSBQcm9jZXNzaW5nVXNlckdl
c3R1cmVTdGF0ZSB7Ci0gICAgRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSwKLSAgICBE
ZWZpbml0ZWx5UHJvY2Vzc2luZ1BvdGVudGlhbFVzZXJHZXN0dXJlLAotICAgIFBvc3NpYmx5UHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlLAotICAgIERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1
cmUKKyAgICBQcm9jZXNzaW5nVXNlckdlc3R1cmUsCisgICAgUHJvY2Vzc2luZ1BvdGVudGlhbFVz
ZXJHZXN0dXJlLAorICAgIE5vdFByb2Nlc3NpbmdVc2VyR2VzdHVyZQorfTsKKworY2xhc3MgVXNl
ckdlc3R1cmVUb2tlbiA6IHB1YmxpYyBSZWZDb3VudGVkPFVzZXJHZXN0dXJlVG9rZW4+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+IGNyZWF0ZShQcm9jZXNz
aW5nVXNlckdlc3R1cmVTdGF0ZSBzdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVXNlckdlc3R1cmVUb2tlbihzdGF0ZSkpOworICAgIH0KKworICAgIFdFQkNPUkVfRVhQ
T1JUIH5Vc2VyR2VzdHVyZVRva2VuKCk7CisKKyAgICBQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0
ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBib29sIHByb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gUHJvY2Vzc2luZ1VzZXJHZXN0
dXJlOyB9CisgICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmVGb3JNZWRpYSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gUHJvY2Vzc2luZ1VzZXJHZXN0dXJlIHx8IG1fc3RhdGUgPT0gUHJv
Y2Vzc2luZ1BvdGVudGlhbFVzZXJHZXN0dXJlOyB9CisKKyAgICB2b2lkIGFkZERlc3RydWN0aW9u
T2JzZXJ2ZXIoRnVuY3Rpb248dm9pZCAoVXNlckdlc3R1cmVUb2tlbiYpPiYmIG9ic2VydmVyKQor
ICAgIHsKKyAgICAgICAgbV9kZXN0cnVjdGlvbk9ic2VydmVycy5hcHBlbmQoV1RGTW92ZShvYnNl
cnZlcikpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBVc2VyR2VzdHVyZVRva2VuKFByb2Nlc3Np
bmdVc2VyR2VzdHVyZVN0YXRlIHN0YXRlKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAg
eworICAgIH0KKworICAgIFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlIG1fc3RhdGUgPSBOb3RQ
cm9jZXNzaW5nVXNlckdlc3R1cmU7CisgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQgKFVzZXJHZXN0
dXJlVG9rZW4mKT4+IG1fZGVzdHJ1Y3Rpb25PYnNlcnZlcnM7CiB9OwogCiBjbGFzcyBVc2VyR2Vz
dHVyZUluZGljYXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXNlckdlc3R1cmVJbmRp
Y2F0b3IpOwogcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8VXNlckdl
c3R1cmVUb2tlbj4gY3VycmVudFVzZXJHZXN0dXJlKCk7CisKICAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLSAgICBzdGF0aWMgYm9vbCBwcm9j
ZXNzaW5nVXNlckdlc3R1cmVGb3JNZWRpYSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBi
b29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCk7CiAKICAgICAvLyBJZiBhIGRvY3Vt
ZW50IGlzIHByb3ZpZGVkLCBpdHMgbGFzdCBrbm93biB1c2VyIGdlc3R1cmUgdGltZXN0YW1wIGlz
IHVwZGF0ZWQuCi0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgVXNlckdlc3R1cmVJbmRpY2F0
b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGUsIERvY3VtZW50KiA9IG51bGxwdHIpOworICAg
IFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IFVzZXJHZXN0dXJlSW5kaWNhdG9yKE9wdGlvbmFsPFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlPiwgRG9jdW1lbnQqID0gbnVsbHB0cik7CisgICAgV0VC
Q09SRV9FWFBPUlQgZXhwbGljaXQgVXNlckdlc3R1cmVJbmRpY2F0b3IoUmVmUHRyPFVzZXJHZXN0
dXJlVG9rZW4+KTsKICAgICBXRUJDT1JFX0VYUE9SVCB+VXNlckdlc3R1cmVJbmRpY2F0b3IoKTsK
IAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUHJvY2Vzc2luZ1VzZXJHZXN0
dXJlU3RhdGUgc19zdGF0ZTsKLSAgICBQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZSBtX3ByZXZp
b3VzU3RhdGU7CisgICAgUmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+IG1fcHJldmlvdXNUb2tlbjsK
IH07CiAKIH0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4MzEsNyArNjgzMSw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6ZGlkUmVjZWl2ZVJlbW90ZUMKIHsKICAgICBMT0coTWVkaWEsICJI
VE1MTWVkaWFFbGVtZW50OjpkaWRSZWNlaXZlUmVtb3RlQ29udHJvbENvbW1hbmQoJXApIC0gJWki
LCB0aGlzLCBzdGF0aWNfY2FzdDxpbnQ+KGNvbW1hbmQpKTsKIAotICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIHJlbW90ZUNvbnRyb2xVc2VyR2VzdHVyZShEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlLCAmZG9jdW1lbnQoKSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgcmVtb3RlQ29u
dHJvbFVzZXJHZXN0dXJlKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgJmRvY3VtZW50KCkpOwogICAg
IHN3aXRjaCAoY29tbWFuZCkgewogICAgIGNhc2UgUGxhdGZvcm1NZWRpYVNlc3Npb246OlBsYXlD
b21tYW5kOgogICAgICAgICBwbGF5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCShyZXZpc2lv
biAyMDMzMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsNyBAQCB2b2lkIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKICAgICBGcmFtZSYgbWFpbkZyYW1lID0gbV9pbnNwZWN0ZWRQYWdlQ29udHJvbGxl
ci0+aW5zcGVjdGVkUGFnZSgpLm1haW5GcmFtZSgpOwogICAgIEZyYW1lTG9hZFJlcXVlc3QgcmVx
dWVzdChtYWluRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgUmVzb3VyY2VSZXF1
ZXN0KCksICJfYmxhbmsiLCBMb2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5v
LCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpZZXMsIE5l
d0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxvdywgUmVwbGFjZURvY3VtZW50SWZKYXZhU2NyaXB0VVJM
LCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdyk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
Y3BwCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24g
YWN0aW9uLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKG1fZnJv
bnRlbmRIb3N0KSB7Ci0gICAgICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5k
aWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgICAgICAgICAgVXNl
ckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUp
OwogICAgICAgICAgICAgaW50IGl0ZW1OdW1iZXIgPSBhY3Rpb24gLSBDb250ZXh0TWVudUl0ZW1C
YXNlQ3VzdG9tVGFnOwogCiAgICAgICAgICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNh
bGwgZnVuY3Rpb24obV9mcm9udGVuZEFwaU9iamVjdCwgImNvbnRleHRNZW51SXRlbVNlbGVjdGVk
IiwgV2ViQ29yZTo6ZnVuY3Rpb25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlz
aW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsNyArNDI1LDcgQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnJlbG9hZChFcnJvclN0cgogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6bmF2
aWdhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Cisg
ICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7
CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLm1haW5GcmFtZSgpOwogCiAgICAgUmVzb3VyY2VS
ZXF1ZXN0IHJlc291cmNlUmVxdWVzdChmcmFtZS5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvbkFjdGlvbi5jcHAJKHJl
dmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uQWN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBOYXZpZ2F0aW9uQWN0aW9uOjpO
YXZpZ2F0aW9uQWN0aW9uKGNvbnN0CiAgICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJl
cXVlc3QpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fZXZlbnQoZXZlbnQpCi0gICAgLCBt
X3Byb2Nlc3NpbmdVc2VyR2VzdHVyZShTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdl
c3R1cmUoKSkKKyAgICAsIG1fdXNlckdlc3R1cmVUb2tlbihVc2VyR2VzdHVyZUluZGljYXRvcjo6
Y3VycmVudFVzZXJHZXN0dXJlKCkpCiAgICAgLCBtX3Nob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xp
Y3koc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSkKICAgICAsIG1fZG93bmxvYWRBdHRyaWJ1
dGUoZG93bmxvYWRBdHRyaWJ1dGUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2
aWdhdGlvbkFjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZp
Z2F0aW9uQWN0aW9uLmgJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9OYXZpZ2F0aW9uQWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Myw3ICs2
NCw4IEBAIHB1YmxpYzoKICAgICBOYXZpZ2F0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CiAgICAgY29uc3QgRXZlbnQqIGV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmVu
dC5nZXQoKTsgfQogCi0gICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3Byb2Nlc3NpbmdVc2VyR2VzdHVyZTsgfQorICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV91c2VyR2VzdHVyZVRva2VuID8gbV91c2VyR2VzdHVy
ZVRva2VuLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKSA6IGZhbHNlOyB9CisgICAgUmVmUHRyPFVz
ZXJHZXN0dXJlVG9rZW4+IHVzZXJHZXN0dXJlVG9rZW4oKSBjb25zdCB7IHJldHVybiBtX3VzZXJH
ZXN0dXJlVG9rZW47IH0KIAogICAgIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgc2hvdWxk
T3BlbkV4dGVybmFsVVJMc1BvbGljeSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeTsgfQogCkBAIC03Myw3ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgUmVzb3Vy
Y2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0OwogICAgIE5hdmlnYXRpb25UeXBlIG1fdHlwZSB7
IE5hdmlnYXRpb25UeXBlOjpPdGhlciB9OwogICAgIFJlZlB0cjxFdmVudD4gbV9ldmVudDsKLSAg
ICBib29sIG1fcHJvY2Vzc2luZ1VzZXJHZXN0dXJlOworICAgIFJlZlB0cjxVc2VyR2VzdHVyZVRv
a2VuPiBtX3VzZXJHZXN0dXJlVG9rZW47CiAgICAgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGlj
eSBtX3Nob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgeyBTaG91bGRPcGVuRXh0ZXJuYWxVUkxz
UG9saWN5OjpTaG91bGROb3RBbGxvdyB9OwogICAgIEF0b21pY1N0cmluZyBtX2Rvd25sb2FkQXR0
cmlidXRlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNj
aGVkdWxlci5jcHAJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9O
YXZpZ2F0aW9uU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9sb2NrQmFja0ZvcndhcmRMaXN0KGxvY2tCYWNrRm9yd2FyZExp
c3QpCiAgICAgICAgICwgbV93YXNEdXJpbmdMb2FkKHdhc0R1cmluZ0xvYWQpCiAgICAgICAgICwg
bV9pc0xvY2F0aW9uQ2hhbmdlKGlzTG9jYXRpb25DaGFuZ2UpCi0gICAgICAgICwgbV93YXNVc2Vy
R2VzdHVyZShTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAgICAg
ICAgLCBtX3VzZXJHZXN0dXJlVG9Gb3J3YXJkKFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpjdXJyZW50
VXNlckdlc3R1cmUoKSkKICAgICB7CiAgICAgfQogICAgIHZpcnR1YWwgflNjaGVkdWxlZE5hdmln
YXRpb24oKSB7IH0KQEAgLTgyLDEwICs4MiwxMCBAQCBwdWJsaWM6CiAgICAgTG9ja0JhY2tGb3J3
YXJkTGlzdCBsb2NrQmFja0ZvcndhcmRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9sb2NrQmFja0Zv
cndhcmRMaXN0OyB9CiAgICAgYm9vbCB3YXNEdXJpbmdMb2FkKCkgY29uc3QgeyByZXR1cm4gbV93
YXNEdXJpbmdMb2FkOyB9CiAgICAgYm9vbCBpc0xvY2F0aW9uQ2hhbmdlKCkgY29uc3QgeyByZXR1
cm4gbV9pc0xvY2F0aW9uQ2hhbmdlOyB9Ci0gICAgYm9vbCB3YXNVc2VyR2VzdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fd2FzVXNlckdlc3R1cmU7IH0KKyAgICBSZWZQdHI8VXNlckdlc3R1cmVUb2tl
bj4gdXNlckdlc3R1cmVUb0ZvcndhcmQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJHZXN0dXJlVG9G
b3J3YXJkOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGNsZWFyVXNlckdlc3R1cmUoKSB7IG1f
d2FzVXNlckdlc3R1cmUgPSBmYWxzZTsgfQorICAgIHZvaWQgY2xlYXJVc2VyR2VzdHVyZSgpIHsg
bV91c2VyR2VzdHVyZVRvRm9yd2FyZCA9IG51bGxwdHI7IH0gLy8gRklYTUU6IE5lZWQgYW5vdGhl
ciB2YWx1ZQogCiAgICAgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBtX3Nob3VsZE9wZW5F
eHRlcm5hbFVSTHNQb2xpY3kgeyBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRO
b3RBbGxvdyB9OwogCkBAIC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgTG9ja0JhY2tGb3J3
YXJkTGlzdCBtX2xvY2tCYWNrRm9yd2FyZExpc3Q7CiAgICAgYm9vbCBtX3dhc0R1cmluZ0xvYWQ7
CiAgICAgYm9vbCBtX2lzTG9jYXRpb25DaGFuZ2U7Ci0gICAgYm9vbCBtX3dhc1VzZXJHZXN0dXJl
OworICAgIFJlZlB0cjxVc2VyR2VzdHVyZVRva2VuPiBtX3VzZXJHZXN0dXJlVG9Gb3J3YXJkOwog
fTsKIAogY2xhc3MgU2NoZWR1bGVkVVJMTmF2aWdhdGlvbiA6IHB1YmxpYyBTY2hlZHVsZWROYXZp
Z2F0aW9uIHsKQEAgLTExMyw3ICsxMTMsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGZpcmUo
RnJhbWUmIGZyYW1lKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0
b3IgZ2VzdHVyZUluZGljYXRvcih3YXNVc2VyR2VzdHVyZSgpID8gRGVmaW5pdGVseVByb2Nlc3Np
bmdVc2VyR2VzdHVyZSA6IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAg
ICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHVzZXJHZXN0dXJlVG9G
b3J3YXJkKCkpOwogCiAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXNvdXJjZVJlcXVlc3QobV91
cmwsIG1fcmVmZXJyZXIsIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpOwogICAgICAgICBGcmFtZUxv
YWRSZXF1ZXN0IGZyYW1lUmVxdWVzdChtX3NlY3VyaXR5T3JpZ2luLmdldCgpLCByZXNvdXJjZVJl
cXVlc3QsICJfc2VsZiIsIGxvY2tIaXN0b3J5KCksIGxvY2tCYWNrRm9yd2FyZExpc3QoKSwgTWF5
YmVTZW5kUmVmZXJyZXIsIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTDo6WWVzLCBOZXdGcmFt
ZU9wZW5lclBvbGljeTo6QWxsb3csIG1fc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSk7CkBA
IC0xMjcsNyArMTI3LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBtX2hhdmVUb2xkQ2xpZW50ID0gdHJ1ZTsKIAotICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBnZXN0dXJlSW5kaWNhdG9yKHdhc1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlIDogRGVmaW5pdGVseU5vdFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAg
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IodXNlckdlc3R1cmVUb0Zv
cndhcmQoKSk7CiAgICAgICAgIGZyYW1lLmxvYWRlcigpLmNsaWVudFJlZGlyZWN0ZWQobV91cmws
IGRlbGF5KCksIGN1cnJlbnRUaW1lKCkgKyB0aW1lci5uZXh0RmlyZUludGVydmFsKCksIGxvY2tC
YWNrRm9yd2FyZExpc3QoKSk7CiAgICAgfQogCkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBmaXJlKEZyYW1lJiBmcmFtZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Iod2FzVXNlckdlc3R1cmUoKSA/IERl
ZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKTsKKyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRv
cih1c2VyR2VzdHVyZVRvRm9yd2FyZCgpKTsKICAgICAgICAgYm9vbCByZWZyZXNoID0gZXF1YWxJ
Z25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihmcmFtZS5kb2N1bWVudCgpLT51cmwoKSwgdXJsKCkp
OwogICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KHVybCgpLCByZWZlcnJl
cigpLCByZWZyZXNoID8gUmVsb2FkSWdub3JpbmdDYWNoZURhdGEgOiBVc2VQcm90b2NvbENhY2hl
UG9saWN5KTsKICAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3Qoc2VjdXJpdHlP
cmlnaW4oKSwgcmVzb3VyY2VSZXF1ZXN0LCAiX3NlbGYiLCBsb2NrSGlzdG9yeSgpLCBsb2NrQmFj
a0ZvcndhcmRMaXN0KCksIE1heWJlU2VuZFJlZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFs
aWRVUkw6Ok5vLCBOZXdGcmFtZU9wZW5lclBvbGljeTo6QWxsb3csIG1fc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeSk7CkBAIC0xODcsNyArMTg3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBm
aXJlKEZyYW1lJiBmcmFtZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Iod2FzVXNlckdlc3R1cmUoKSA/IERlZmluaXRlbHlQcm9j
ZXNzaW5nVXNlckdlc3R1cmUgOiBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
KyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih1c2VyR2VzdHVy
ZVRvRm9yd2FyZCgpKTsKIAogICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0
KHVybCgpLCByZWZlcnJlcigpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KTsKICAgICAgICAgRnJh
bWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3Qoc2VjdXJpdHlPcmlnaW4oKSwgcmVzb3VyY2VSZXF1
ZXN0LCAiX3NlbGYiLCBsb2NrSGlzdG9yeSgpLCBsb2NrQmFja0ZvcndhcmRMaXN0KCksIE1heWJl
U2VuZFJlZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6Ok5vLCBOZXdGcmFtZU9w
ZW5lclBvbGljeTo6QWxsb3csIG1fc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSk7CkBAIC0y
MDQsNyArMjA0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaXJlKEZyYW1lJiBmcmFtZSkgb3Zl
cnJpZGUKICAgICB7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0
b3Iod2FzVXNlckdlc3R1cmUoKSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBE
ZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICAgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih1c2VyR2VzdHVyZVRvRm9yd2FyZCgpKTsKIAogICAg
ICAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KHVybCgpLCByZWZlcnJlcigpLCBS
ZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSk7CiAgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVS
ZXF1ZXN0KHNlY3VyaXR5T3JpZ2luKCksIHJlc291cmNlUmVxdWVzdCwgIl9zZWxmIiwgbG9ja0hp
c3RvcnkoKSwgbG9ja0JhY2tGb3J3YXJkTGlzdCgpLCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dO
YXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpZZXMsIE5ld0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxvdywg
bV9zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KTsKQEAgLTIyMiw3ICsyMjIsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGZpcmUoRnJhbWUmIGZyYW1lKSBvdmVycmlkZQogICAgIHsKLSAgICAg
ICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih3YXNVc2VyR2VzdHVyZSgp
ID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IERlZmluaXRlbHlOb3RQcm9jZXNz
aW5nVXNlckdlc3R1cmUpOworICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5k
aWNhdG9yKHVzZXJHZXN0dXJlVG9Gb3J3YXJkKCkpOwogCiAgICAgICAgIGlmICghbV9oaXN0b3J5
U3RlcHMpIHsKICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZ28oMCkgZnJvbSBhIGZy
YW1lIC0+IHJlbG9hZCBvbmx5IHRoZSBmcmFtZQpAQCAtMjU1LDcgKzI1NSw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZmlyZShGcmFtZSYgZnJhbWUpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHdhc1VzZXJHZXN0dXJlKCkgPyBE
ZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogRGVmaW5pdGVseU5vdFByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7CisgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0
b3IodXNlckdlc3R1cmVUb0ZvcndhcmQoKSk7CiAKICAgICAgICAgLy8gVGhlIHN1Ym1pdEZvcm0g
ZnVuY3Rpb24gd2lsbCBmaW5kIGEgdGFyZ2V0IGZyYW1lIGJlZm9yZSB1c2luZyB0aGUgcmVkaXJl
Y3Rpb24gdGltZXIuCiAgICAgICAgIC8vIE5vdyB0aGF0IHRoZSB0aW1lciBoYXMgZmlyZWQsIHdl
IG5lZWQgdG8gcmVwZWF0IHRoZSBzZWN1cml0eSBjaGVjayB3aGljaCBub3JtYWxseSBpcyBkb25l
IHdoZW4KQEAgLTI3NSw3ICsyNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIG1faGF2ZVRvbGRDbGllbnQgPSB0cnVlOwogCi0gICAgICAgIFVzZXJHZXN0dXJlSW5k
aWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Iod2FzVXNlckdlc3R1cmUoKSA/IERlZmluaXRlbHlQcm9j
ZXNzaW5nVXNlckdlc3R1cmUgOiBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
KyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih1c2VyR2VzdHVy
ZVRvRm9yd2FyZCgpKTsKICAgICAgICAgZnJhbWUubG9hZGVyKCkuY2xpZW50UmVkaXJlY3RlZCht
X3N1Ym1pc3Npb24tPnJlcXVlc3RVUkwoKSwgZGVsYXkoKSwgY3VycmVudFRpbWUoKSArIHRpbWVy
Lm5leHRGaXJlSW50ZXJ2YWwoKSwgbG9ja0JhY2tGb3J3YXJkTGlzdCgpKTsKICAgICB9CiAKQEAg
LTMwOCw3ICszMDgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpcmUoRnJhbWUmIGZyYW1lKSBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGlj
YXRvcih3YXNVc2VyR2VzdHVyZSgpID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6
IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgICAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHVzZXJHZXN0dXJlVG9Gb3J3YXJkKCkpOwogCiAg
ICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVwbGFjZW1lbnRSZXNwb25zZShtX29yaWdpbkRvY3Vt
ZW50LnVybCgpLCBBU0NJSUxpdGVyYWwoInRleHQvcGxhaW4iKSwgMCwgQVNDSUlMaXRlcmFsKCJV
VEYtOCIpKTsKICAgICAgICAgU3Vic3RpdHV0ZURhdGEgcmVwbGFjZW1lbnREYXRhKFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKCksIG1fb3JpZ2luRG9jdW1lbnQudXJsKCksIHJlcGxhY2VtZW50UmVzcG9u
c2UsIFN1YnN0aXR1dGVEYXRhOjpTZXNzaW9uSGlzdG9yeVZpc2liaWxpdHk6OkhpZGRlbik7CkBA
IC0zODUsNyArMzg1LDcgQEAgTG9ja0JhY2tGb3J3YXJkTGlzdCBOYXZpZ2F0aW9uU2NoZWR1bGVy
OgogewogICAgIC8vIE5vbi11c2VyIG5hdmlnYXRpb24gYmVmb3JlIHRoZSBwYWdlIGhhcyBmaW5p
c2hlZCBmaXJpbmcgb25sb2FkIHNob3VsZCBub3QgY3JlYXRlIGEgbmV3IGJhY2svZm9yd2FyZCBp
dGVtLgogICAgIC8vIFNlZSBodHRwczovL3dlYmtpdC5vcmcvYi80Mjg2MSBmb3IgdGhlIG9yaWdp
bmFsIG1vdGl2YXRpb24gZm9yIHRoaXMuICAgIAotICAgIGlmICghU2NyaXB0Q29udHJvbGxlcjo6
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgJiYgdGFyZ2V0RnJhbWUubG9hZGVyKCkuZG9jdW1lbnRM
b2FkZXIoKSAmJiAhdGFyZ2V0RnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+d2FzT25s
b2FkRGlzcGF0Y2hlZCgpKQorICAgIGlmICghVXNlckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3Np
bmdVc2VyR2VzdHVyZSgpICYmIHRhcmdldEZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkg
JiYgIXRhcmdldEZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPndhc09ubG9hZERpc3Bh
dGNoZWQoKSkKICAgICAgICAgcmV0dXJuIExvY2tCYWNrRm9yd2FyZExpc3Q6OlllczsKICAgICAK
ICAgICAvLyBOYXZpZ2F0aW9uIG9mIGEgc3ViZnJhbWUgZHVyaW5nIGxvYWRpbmcgb2YgYW4gYW5j
ZXN0b3IgZnJhbWUgZG9lcyBub3QgY3JlYXRlIGEgbmV3IGJhY2svZm9yd2FyZCBpdGVtLgpAQCAt
NDQ0LDcgKzQ0NCw3IEBAIHZvaWQgTmF2aWdhdGlvblNjaGVkdWxlcjo6c2NoZWR1bGVGb3JtU3UK
ICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzgz
IGZvciB0aGUgb3JpZ2luYWwgbW90aXZhdGlvbiBmb3IgdGhpcy4KICAgICBMb2NrQmFja0Zvcndh
cmRMaXN0IGxvY2tCYWNrRm9yd2FyZExpc3QgPSBtdXN0TG9ja0JhY2tGb3J3YXJkTGlzdChtX2Zy
YW1lKTsKICAgICBpZiAobG9ja0JhY2tGb3J3YXJkTGlzdCA9PSBMb2NrQmFja0ZvcndhcmRMaXN0
OjpObwotICAgICAgICAmJiAoc3VibWlzc2lvbi0+c3RhdGUoKS0+Zm9ybVN1Ym1pc3Npb25Ucmln
Z2VyKCkgPT0gU3VibWl0dGVkQnlKYXZhU2NyaXB0ICYmIG1fZnJhbWUudHJlZSgpLnBhcmVudCgp
ICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkpIHsKKyAgICAg
ICAgJiYgKHN1Ym1pc3Npb24tPnN0YXRlKCktPmZvcm1TdWJtaXNzaW9uVHJpZ2dlcigpID09IFN1
Ym1pdHRlZEJ5SmF2YVNjcmlwdCAmJiBtX2ZyYW1lLnRyZWUoKS5wYXJlbnQoKSAmJiAhVXNlckdl
c3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKSkgewogICAgICAgICBsb2Nr
QmFja0ZvcndhcmRMaXN0ID0gTG9ja0JhY2tGb3J3YXJkTGlzdDo6WWVzOwogICAgIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NVGltZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NVGltZXIuY3BwCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
NiBAQAogI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlVzZXJHZXN0
dXJlSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTY4LDYgKzE2
NywxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkRm9yd2FyZFVzZXJHZXN0CiAgICAgICAg
ICYmICFuZXN0aW5nTGV2ZWw7IC8vIEdlc3R1cmVzIHNob3VsZCBub3QgYmUgZm9yd2FyZGVkIHRv
IG5lc3RlZCB0aW1lcnMuCiB9CiAKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPFVzZXJHZXN0dXJlVG9r
ZW4+IHVzZXJHZXN0dXJlVG9rZW5Ub0ZvcndhcmQoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBp
bnRlcnZhbCwgaW50IG5lc3RpbmdMZXZlbCkKK3sKKyAgICBpZiAoIXNob3VsZEZvcndhcmRVc2Vy
R2VzdHVyZShpbnRlcnZhbCwgbmVzdGluZ0xldmVsKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gVXNlckdlc3R1cmVJbmRpY2F0b3I6OmN1cnJlbnRVc2VyR2VzdHVyZSgp
OworfQorCiBET01UaW1lcjo6RE9NVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uLCBzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzIGludGVydmFsLCBib29sIHNpbmdsZVNob3QpCiAgICAgOiBTdXNwZW5kYWJs
ZVRpbWVyKGNvbnRleHQpCiAgICAgLCBtX25lc3RpbmdMZXZlbChjb250ZXh0LnRpbWVyTmVzdGlu
Z0xldmVsKCkpCkBAIC0xNzUsNyArMTgyLDcgQEAgRE9NVGltZXI6OkRPTVRpbWVyKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleAogICAgICwgbV9vcmlnaW5hbEludGVydmFsKGludGVydmFsKQogICAgICwg
bV90aHJvdHRsZVN0YXRlKFVuZGV0ZXJtaW5lZCkKICAgICAsIG1fY3VycmVudFRpbWVySW50ZXJ2
YWwoaW50ZXJ2YWxDbGFtcGVkVG9NaW5pbXVtKCkpCi0gICAgLCBtX3Nob3VsZEZvcndhcmRVc2Vy
R2VzdHVyZShzaG91bGRGb3J3YXJkVXNlckdlc3R1cmUoaW50ZXJ2YWwsIG1fbmVzdGluZ0xldmVs
KSkKKyAgICAsIG1fdXNlckdlc3R1cmVUb2tlblRvRm9yd2FyZCh1c2VyR2VzdHVyZVRva2VuVG9G
b3J3YXJkKGludGVydmFsLCBtX25lc3RpbmdMZXZlbCkpCiB7CiAgICAgUmVmUHRyPERPTVRpbWVy
PiByZWZlcmVuY2UgPSBhZG9wdFJlZih0aGlzKTsKIApAQCAtMzAwLDkgKzMwNyw5IEBAIHZvaWQg
RE9NVGltZXI6OmZpcmVkKCkKIAogICAgIEFTU0VSVCghaXNTdXNwZW5kZWQoKSk7CiAgICAgQVNT
RVJUKCFjb250ZXh0LmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSk7Ci0gICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihtX3Nob3VsZEZvcndhcmRVc2VyR2VzdHVy
ZSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvciht
X3VzZXJHZXN0dXJlVG9rZW5Ub0ZvcndhcmQpOwogICAgIC8vIE9ubHkgdGhlIGZpcnN0IGV4ZWN1
dGlvbiBvZiBhIG11bHRpLXNob3QgdGltZXIgc2hvdWxkIGdldCBhbiBhZmZpcm1hdGl2ZSB1c2Vy
IGdlc3R1cmUgaW5kaWNhdG9yLgotICAgIG1fc2hvdWxkRm9yd2FyZFVzZXJHZXN0dXJlID0gZmFs
c2U7CisgICAgbV91c2VyR2VzdHVyZVRva2VuVG9Gb3J3YXJkID0gbnVsbHB0cjsKIAogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxGaXJlVGltZXIoJmNvbnRleHQsIG1fdGltZW91dElkKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9ET01UaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NVGltZXIuaAkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01UaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIERP
TVRpbWVyX2gKIAogI2luY2x1ZGUgIlN1c3BlbmRhYmxlVGltZXIuaCIKKyNpbmNsdWRlICJVc2Vy
R2VzdHVyZUluZGljYXRvci5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCkBAIC05MCw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcyBtX29yaWdpbmFsSW50ZXJ2YWw7CiAgICAgVGltZXJUaHJvdHRsZVN0YXRl
IG1fdGhyb3R0bGVTdGF0ZTsKICAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1fY3VycmVu
dFRpbWVySW50ZXJ2YWw7Ci0gICAgYm9vbCBtX3Nob3VsZEZvcndhcmRVc2VyR2VzdHVyZTsKKyAg
ICBSZWZQdHI8VXNlckdlc3R1cmVUb2tlbj4gbV91c2VyR2VzdHVyZVRva2VuVG9Gb3J3YXJkOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgICAgICAs
IG1fY2hhbm5lbHMoV1RGTW92ZShjaGFubmVscykpCiAgICAgICAgICwgbV90YXJnZXRPcmlnaW4o
V1RGTW92ZSh0YXJnZXRPcmlnaW4pKQogICAgICAgICAsIG1fc3RhY2tUcmFjZShzdGFja1RyYWNl
KQotICAgICAgICAsIG1fd2FzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKFVzZXJHZXN0dXJlSW5kaWNh
dG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAgICAgICAgLCBtX3VzZXJHZXN0dXJlVG9G
b3J3YXJkKFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpjdXJyZW50VXNlckdlc3R1cmUoKSkKICAgICB7
CiAgICAgfQogCkBAIC0xNjgsNyArMTY4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gVGhpcyBv
YmplY3QgZ2V0cyBkZWxldGVkIHdoZW4gc3RkOjp1bmlxdWVfcHRyIGZhbGxzIG91dCBvZiBzY29w
ZS4uCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQb3N0TWVzc2FnZVRpbWVyPiB0aW1lcih0aGlz
KTsKICAgICAgICAgCi0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIHVzZXJHZXN0dXJlSW5k
aWNhdG9yKG1fd2FzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlID8gRGVmaW5pdGVseVByb2Nlc3NpbmdV
c2VyR2VzdHVyZSA6IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgICAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciB1c2VyR2VzdHVyZUluZGljYXRvcihtX3VzZXJHZXN0dXJl
VG9Gb3J3YXJkKTsKICAgICAgICAgbV93aW5kb3ctPnBvc3RNZXNzYWdlVGltZXJGaXJlZCgqdGlt
ZXIpOwogICAgIH0KIApAQCAtMTc5LDcgKzE3OSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBtX2NoYW5uZWxzOwogICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gbV90YXJnZXRPcmlnaW47CiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4gbV9zdGFja1RyYWNlOwotICAgIGJvb2wgbV93YXNQcm9jZXNzaW5nVXNlckdlc3R1cmU7Cisg
ICAgUmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+IG1fdXNlckdlc3R1cmVUb0ZvcndhcmQ7CiB9Owog
CiB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PERPTVdpbmRvdyo+IERPTVdpbmRvd1NldDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDIwMzMzMykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYx
OCw3ICsxNjE4LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
Z2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1l
LmRvY3VtZW50KCkpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Io
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50KCkpOwogCiAgICAgLy8gRklY
TUUgKGJ1ZyA2ODE4NSk6IHRoaXMgY2FsbCBzaG91bGQgYmUgbWFkZSBhdCBhbm90aGVyIGFic3Ry
YWN0aW9uIGxheWVyCiAgICAgbV9mcmFtZS5sb2FkZXIoKS5yZXNldE11bHRpcGxlRm9ybVN1Ym1p
c3Npb25Qcm90ZWN0aW9uKCk7CkBAIC0xNzQ2LDcgKzE3NDYsNyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VEb3VibGVDbGljCiAKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENh
cmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpOwogCi0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
Z2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1l
LmRvY3VtZW50KCkpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Io
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50KCkpOwogCiAgICAgLy8gV2Ug
Z2V0IHRoaXMgaW5zdGVhZCBvZiBhIHNlY29uZCBtb3VzZS11cCAKICAgICBtX21vdXNlUHJlc3Nl
ZCA9IGZhbHNlOwpAQCAtMTk4Nyw3ICsxOTg3LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZU1vdXNlUmVsZWFzZUV2ZQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgVXNl
ckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50KCkpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGdlc3R1cmVJbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50
KCkpOwogCiAjaWYgRU5BQkxFKFBBTl9TQ1JPTExJTkcpCiAgICAgbV9hdXRvc2Nyb2xsQ29udHJv
bGxlci0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50KTsKQEAgLTMw
NDcsNyArMzA0Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChjb25zdCBQbGF0Zm8K
ICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSwgbV9mcmFtZS5kb2N1bWVudCgpKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0
dXJlSW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgbV9mcmFtZS5kb2N1bWVudCgpKTsK
ICAgICBVc2VyVHlwaW5nR2VzdHVyZUluZGljYXRvciB0eXBpbmdHZXN0dXJlSW5kaWNhdG9yKG1f
ZnJhbWUpOwogCiAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUudmlldygpKQpAQCAt
MzgwMCw3ICszODAwLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29u
cwogCiAgICAgY29uc3QgVmVjdG9yPFBsYXRmb3JtVG91Y2hQb2ludD4mIHBvaW50cyA9IGV2ZW50
LnRvdWNoUG9pbnRzKCk7CiAKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNh
dG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsIG1fZnJhbWUuZG9jdW1lbnQoKSk7
CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihQcm9jZXNzaW5nVXNl
ckdlc3R1cmUsIG1fZnJhbWUuZG9jdW1lbnQoKSk7CiAKICAgICBib29sIGZyZXNoVG91Y2hFdmVu
dHMgPSB0cnVlOwogICAgIGJvb2wgYWxsVG91Y2hSZWxlYXNlZCA9IHRydWU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiAyMDMzMzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3MCw3ICs0NzAsNyBAQCB2b2lkIEhpdFRlc3RSZXN1bHQ6OnRvZ2dsZU1lZGlh
RnVsbHNjcmVlCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQgPSB0aGlzLT5tZWRpYUVsZW1lbnQoKSkgewogICAgICAgICBpZiAobWVkaWFF
bGVtZW50LT5pc1ZpZGVvKCkgJiYgbWVkaWFFbGVtZW50LT5zdXBwb3J0c0Z1bGxzY3JlZW4oSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7Ci0gICAg
ICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3Np
bmdVc2VyR2VzdHVyZSwgJm1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCAmbWVk
aWFFbGVtZW50LT5kb2N1bWVudCgpKTsKICAgICAgICAgICAgIG1lZGlhRWxlbWVudC0+dG9nZ2xl
U3RhbmRhcmRGdWxsc2NyZWVuU3RhdGUoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ4NCw3ICs0
ODQsNyBAQCB2b2lkIEhpdFRlc3RSZXN1bHQ6OmVudGVyRnVsbHNjcmVlbkZvclZpCiAgICAgaWYg
KGlzPEhUTUxWaWRlb0VsZW1lbnQ+KG1lZGlhRWxlbWVudCkpIHsKICAgICAgICAgSFRNTFZpZGVv
RWxlbWVudCYgdmlkZW9FbGVtZW50ID0gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oKm1lZGlh
RWxlbWVudCk7CiAgICAgICAgIGlmICghdmlkZW9FbGVtZW50LmlzRnVsbHNjcmVlbigpICYmIG1l
ZGlhRWxlbWVudC0+c3VwcG9ydHNGdWxsc2NyZWVuKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkgewotICAgICAgICAgICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsICZtZWRpYUVs
ZW1lbnQtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgJm1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSk7
CiAgICAgICAgICAgICB2aWRlb0VsZW1lbnQuZW50ZXJGdWxsc2NyZWVuKCk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC04MTQsNyArODE0LDcgQEAgdm9pZCBIaXRUZXN0UmVzdWx0Ojp0b2dnbGVFbmhh
bmNlZEZ1bGxzYwogICAgICAgICByZXR1cm47CiAKICAgICBIVE1MVmlkZW9FbGVtZW50JiB2aWRl
b0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PigqbWVkaWFFbGVtZW50KTsKLSAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSwgJm1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgJm1lZGlhRWxlbWVudC0+ZG9j
dW1lbnQoKSk7CiAgICAgaWYgKHZpZGVvRWxlbWVudC5mdWxsc2NyZWVuTW9kZSgpID09IEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCiAg
ICAgICAgIHZpZGVvRWxlbWVudC5leGl0RnVsbHNjcmVlbigpOwogICAgIGVsc2UKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDE2LTA3LTE2ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYktpdCBBUEldIEFkZCBTUEkgdG8gdHJhY2sgbXVs
dGlwbGUgbmF2aWdhdGlvbnMgY2F1c2VkIGJ5IGEgc2luZ2xlIHVzZXIgZ2VzdHVyZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5ODU2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQ
SU9iamVjdC5oOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9BUElPYmplY3QubW06CisgICAgICAg
IChBUEk6Ok9iamVjdDo6bmV3T2JqZWN0KToKKyAgICAgICAgKiBTaGFyZWQvTmF2aWdhdGlvbkFj
dGlvbkRhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YTo6ZW5j
b2RlKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGE6OmRlY29kZSk6Cisg
ICAgICAgICogU2hhcmVkL05hdmlnYXRpb25BY3Rpb25EYXRhLmg6CisgICAgICAgICogU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElO
YXZpZ2F0aW9uQWN0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VySW5pdGlh
dGVkQWN0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3Bw
OgorICAgICAgICAoV0tQYWdlU2V0UGFnZVVJQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLTmF2aWdhdGlvbkFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tOYXZpZ2F0aW9u
QWN0aW9uIF9zaG91bGRPcGVuRXh0ZXJuYWxVUkxzXSk6CisgICAgICAgICgtW1dLTmF2aWdhdGlv
bkFjdGlvbiBfdXNlckluaXRpYXRlZEFjdGlvbl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tOYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlckluaXRpYXRlZEFjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0ZWRBY3Rpb24ubW06IEFkZGVkLgorICAgICAg
ICAoLVtfV0tVc2VySW5pdGlhdGVkQWN0aW9uIGRlYWxsb2NdKToKKyAgICAgICAgKC1bX1dLVXNl
ckluaXRpYXRlZEFjdGlvbiBkZXNjcmlwdGlvbl0pOgorICAgICAgICAoLVtfV0tVc2VySW5pdGlh
dGVkQWN0aW9uIGNvbnN1bWVdKToKKyAgICAgICAgKC1bX1dLVXNlckluaXRpYXRlZEFjdGlvbiBp
c0NvbnN1bWVkXSk6CisgICAgICAgICgtW19XS1VzZXJJbml0aWF0ZWRBY3Rpb24gX2FwaU9iamVj
dF0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckluaXRpYXRlZEFjdGlv
bkludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAoQVBJOjp3cmFwcGVyKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0
ZTo6VUlDbGllbnQ6OmNyZWF0ZU5ld1BhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lk
ZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6c2h1dERvd24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmZyYW1lQ291bnRJblBhZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnVzZXJJbml0aWF0ZWRBY3Rpdml0eVRv
a2VuKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpkaWREZXN0cm95VXNlckdl
c3R1cmVUb2tlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6Y2FuVGVybWlu
YXRlQ2hpbGRQcm9jZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cmVzcG9uc2l2ZW5lc3NUaW1lcik6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpkaWRDbGlja05vdGlmaWNhdGlvbik6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpQbHVnaW5WaWV3OjpwZXJmb3JtRnJhbWVMb2FkVVJMUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OlBsdWdpblZpZXc6OmV2YWx1YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9t
ZUNsaWVudDo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNvbnRleHRNZW51Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4
dE1lbnVDbGllbnQ6OnNlYXJjaFdpdGhHb29nbGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp3ZWJQYWdlR3JvdXApOgor
ICAgICAgICAoV2ViS2l0OjpuZXh0VXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp1c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnVzZXJHZXN0dXJlVG9rZW5EZXN0cm95ZWQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpjbGVhclJlc291cmNlQ2FjaGVzKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
cHJlc2VudGVyQXBwbGljYXRpb25QaWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxheWJhY2tT
ZXNzaW9uTWFuYWdlcjo6cGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXliYWNrU2Vzc2lv
bk1hbmFnZXI6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6ZmFzdFNlZWspOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjYW5uaW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0QXVkaW9N
ZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6CisKIDIwMTYtMDctMTYgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVuYW1lIGZhc3RHZXRBdHRyaWJ1dGUgdG8g
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbgpJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL05hdmlnYXRpb25BY3Rpb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAyMDMzMzMpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKICNpbmNs
dWRlICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKQEAgLTQwLDcgKzQxLDcgQEAgdm9pZCBOYXZpZ2F0aW9uQWN0aW9uRGF0YTo6ZW5jb2Rl
KElQQzo6QQogICAgIGVuY29kZXIuZW5jb2RlRW51bShtb2RpZmllcnMpOwogICAgIGVuY29kZXIu
ZW5jb2RlRW51bShtb3VzZUJ1dHRvbik7CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHN5bnRoZXRp
Y0NsaWNrVHlwZSk7Ci0gICAgZW5jb2RlciA8PCBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZTsKKyAg
ICBlbmNvZGVyIDw8IHVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwg
Y2FuSGFuZGxlUmVxdWVzdDsKICAgICBlbmNvZGVyLmVuY29kZUVudW0oc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeSk7CiAgICAgZW5jb2RlciA8PCBkb3dubG9hZEF0dHJpYnV0ZTsKQEAgLTU2
LDcgKzU3LDcgQEAgYm9vbCBOYXZpZ2F0aW9uQWN0aW9uRGF0YTo6ZGVjb2RlKElQQzo6QQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LnN5
bnRoZXRpY0NsaWNrVHlwZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5pc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQudXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2FuSGFuZGxlUmVx
dWVzdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5oCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lTG9hZGVyVHlwZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNh
dG9yLmg+CiAKIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgQXJndW1lbnREZWNvZGVyOwpAQCAtNDQs
NyArNDUsNyBAQCBzdHJ1Y3QgTmF2aWdhdGlvbkFjdGlvbkRhdGEgewogICAgIFdlYkV2ZW50OjpN
b2RpZmllcnMgbW9kaWZpZXJzIHsgfTsKICAgICBXZWJNb3VzZUV2ZW50OjpCdXR0b24gbW91c2VC
dXR0b24geyBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbiB9OwogICAgIFdlYk1vdXNlRXZlbnQ6OlN5
bnRoZXRpY0NsaWNrVHlwZSBzeW50aGV0aWNDbGlja1R5cGUgeyBXZWJNb3VzZUV2ZW50OjpOb1Rh
cCB9OwotICAgIGJvb2wgaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgeyBmYWxzZSB9OworICAgIHVp
bnQ2NF90IHVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyOwogICAgIGJvb2wgY2FuSGFuZGxlUmVx
dWVzdCB7IGZhbHNlIH07CiAgICAgV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGlj
eSBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHsgV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cgfTsKICAgICBXVEY6OlN0cmluZyBkb3dubG9h
ZEF0dHJpYnV0ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvVGltaW5nRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Vc2VyU2NyaXB0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyU3R5bGVTaGVldC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvVmlld3BvcnRBcmd1bWVudHMuaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvQVBJT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL0FQSS9BUElPYmplY3QuaAkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL0FQSS9BUElPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgVXNlckNvbnRlbnRFeHRlbnNpb24sCiAgICAgICAgIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUsCiAgICAgICAgIFVzZXJDb250ZW50V29ybGQsCisgICAgICAgIFVz
ZXJJbml0aWF0ZWRBY3Rpb24sCiAgICAgICAgIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVjaywKICAg
ICAgICAgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QsCiAgICAgICAgIFZpYnJhdGlvbiwKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQkocmV2aXNpb24gMjAz
MzMzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQAogI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFs
LmgiCiAjaW1wb3J0ICJfV0tVc2VyQ29udGVudFdvcmxkSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9X
S1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVXNlclN0eWxlU2hl
ZXRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVmlzaXRlZExpbmtTdG9yZUludGVybmFsLmgiCiAK
QEAgLTIzMSw2ICsyMzIsMTAgQEAgdm9pZCogT2JqZWN0OjpuZXdPYmplY3Qoc2l6ZV90IHNpemUs
IFR5cAogICAgICAgICB3cmFwcGVyID0gW19XS1VzZXJDb250ZW50V29ybGQgYWxsb2NdOwogICAg
ICAgICBicmVhazsKIAorICAgIGNhc2UgVHlwZTo6VXNlckluaXRpYXRlZEFjdGlvbjoKKyAgICAg
ICAgd3JhcHBlciA9IFtfV0tVc2VySW5pdGlhdGVkQWN0aW9uIGFsbG9jXTsKKyAgICAgICAgYnJl
YWs7CisKICAgICBjYXNlIFR5cGU6OlVzZXJTY3JpcHQ6CiAgICAgICAgIHdyYXBwZXIgPSBbV0tV
c2VyU2NyaXB0IGFsbG9jXTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1ODgs
OSArMzU4OCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhCiAg
ICAgICAgIGVsc2UgaWYgKG9yaWdpbmF0aW5nRnJhbWUpCiAgICAgICAgICAgICBzb3VyY2VGcmFt
ZUluZm8gPSBBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKCpvcmlnaW5hdGluZ0ZyYW1lLCBvcmlnaW5h
dGluZ0ZyYW1lU2VjdXJpdHlPcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSk7CiAKKyAgICAgICAgYXV0
byB1c2VySW5pdGlhdGVkQWN0aXZpdHkgPSBtX3Byb2Nlc3MtPnVzZXJJbml0aWF0ZWRBY3Rpdml0
eShuYXZpZ2F0aW9uQWN0aW9uRGF0YS51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcik7CiAgICAg
ICAgIGJvb2wgc2hvdWxkT3BlbkFwcExpbmtzID0gIW1fc2hvdWxkU3VwcHJlc3NBcHBMaW5rc0lu
TmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiAmJiAoIWRlc3RpbmF0aW9uRnJhbWVJbmZvIHx8
IGRlc3RpbmF0aW9uRnJhbWVJbmZvLT5pc01haW5GcmFtZSgpKSAmJiAhaG9zdHNBcmVFcXVhbChV
UkwoUGFyc2VkVVJMU3RyaW5nLCBtX21haW5GcmFtZS0+dXJsKCkpLCByZXF1ZXN0LnVybCgpKTsK
IAotICAgICAgICBhdXRvIG5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246
OmNyZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLmdldCgpLCBkZXN0
aW5hdGlvbkZyYW1lSW5mby5nZXQoKSwgcmVxdWVzdCwgb3JpZ2luYWxSZXF1ZXN0LnVybCgpLCBz
aG91bGRPcGVuQXBwTGlua3MpOworICAgICAgICBhdXRvIG5hdmlnYXRpb25BY3Rpb24gPSBBUEk6
Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJh
bWVJbmZvLmdldCgpLCBkZXN0aW5hdGlvbkZyYW1lSW5mby5nZXQoKSwgcmVxdWVzdCwgb3JpZ2lu
YWxSZXF1ZXN0LnVybCgpLCBzaG91bGRPcGVuQXBwTGlua3MsIFdURk1vdmUodXNlckluaXRpYXRl
ZEFjdGl2aXR5KSk7CiAKICAgICAgICAgbV9uYXZpZ2F0aW9uQ2xpZW50LT5kZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKCp0aGlzLCBuYXZpZ2F0aW9uQWN0aW9uLmdldCgpLCBXVEZNb3Zl
KGxpc3RlbmVyKSwgbV9wcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRh
Lm9iamVjdCgpKS5nZXQoKSk7CiAgICAgfSBlbHNlCkBAIC0zNjIyLDggKzM2MjMsOSBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmV3V2luCiAgICAgICAgIGlmIChmcmFtZSkK
ICAgICAgICAgICAgIHNvdXJjZUZyYW1lSW5mbyA9IEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoKmZy
YW1lLCBmcmFtZVNlY3VyaXR5T3JpZ2luLnNlY3VyaXR5T3JpZ2luKCkpOwogCisgICAgICAgIGF1
dG8gdXNlckluaXRpYXRlZEFjdGl2aXR5ID0gbV9wcm9jZXNzLT51c2VySW5pdGlhdGVkQWN0aXZp
dHkobmF2aWdhdGlvbkFjdGlvbkRhdGEudXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIpOwogICAg
ICAgICBib29sIHNob3VsZE9wZW5BcHBMaW5rcyA9ICFob3N0c0FyZUVxdWFsKFVSTChQYXJzZWRV
UkxTdHJpbmcsIG1fbWFpbkZyYW1lLT51cmwoKSksIHJlcXVlc3QudXJsKCkpOwotICAgICAgICBh
dXRvIG5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShuYXZp
Z2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLmdldCgpLCBudWxscHRyLCByZXF1ZXN0
LCByZXF1ZXN0LnVybCgpLCBzaG91bGRPcGVuQXBwTGlua3MpOworICAgICAgICBhdXRvIG5hdmln
YXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShuYXZpZ2F0aW9uQWN0
aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLmdldCgpLCBudWxscHRyLCByZXF1ZXN0LCByZXF1ZXN0
LnVybCgpLCBzaG91bGRPcGVuQXBwTGlua3MsIFdURk1vdmUodXNlckluaXRpYXRlZEFjdGl2aXR5
KSk7CiAKICAgICAgICAgbV9uYXZpZ2F0aW9uQ2xpZW50LT5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uKCp0aGlzLCBuYXZpZ2F0aW9uQWN0aW9uLmdldCgpLCBXVEZNb3ZlKGxpc3RlbmVy
KSwgbV9wcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgp
KS5nZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuY3BwCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSw4IEBAIHZv
aWQgV2ViUHJvY2Vzc1Byb3h5OjpzaHV0RG93bigpCiAgICAgICAgIHdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5LT5yZW1vdmVQcm9jZXNzKCp0aGlzKTsKICAgICBtX3dlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3hpZXMuY2xlYXIoKTsKIAorICAgIG1fdXNlckluaXRpYXRlZEFjdGlvbk1h
cC5jbGVhcigpOworCiAgICAgbV9wcm9jZXNzUG9vbC0+ZGlzY29ubmVjdFByb2Nlc3ModGhpcyk7
CiB9CiAKQEAgLTY2NSw2ICs2NjcsMjEgQEAgc2l6ZV90IFdlYlByb2Nlc3NQcm94eTo6ZnJhbWVD
b3VudEluUGFnZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1JlZlB0cjxBUEk6OlVzZXJJbml0
aWF0ZWRBY3Rpb24+IFdlYlByb2Nlc3NQcm94eTo6dXNlckluaXRpYXRlZEFjdGl2aXR5KHVpbnQ2
NF90IGlkZW50aWZpZXIpCit7CisgICAgaWYgKCFVc2VySW5pdGlhdGVkQWN0aW9uTWFwOjppc1Zh
bGlkS2V5KGlkZW50aWZpZXIpIHx8ICFpZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGF1dG8gcmVzdWx0ID0gbV91c2VySW5pdGlhdGVkQWN0aW9uTWFwLmVuc3VyZShp
ZGVudGlmaWVyLCBbXSB7IHJldHVybiBBUEk6OlVzZXJJbml0aWF0ZWRBY3Rpb246OmNyZWF0ZSgp
OyB9KTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKwordm9pZCBXZWJQ
cm9jZXNzUHJveHk6OmRpZERlc3Ryb3lVc2VyR2VzdHVyZVRva2VuKHVpbnQ2NF90IGlkZW50aWZp
ZXIpCit7CisgICAgQVNTRVJUKFVzZXJJbml0aWF0ZWRBY3Rpb25NYXA6OmlzVmFsaWRLZXkoaWRl
bnRpZmllcikpOworICAgIG1fdXNlckluaXRpYXRlZEFjdGlvbk1hcC5yZW1vdmUoaWRlbnRpZmll
cik7Cit9CisKIGJvb2wgV2ViUHJvY2Vzc1Byb3h5OjpjYW5UZXJtaW5hdGVDaGlsZFByb2Nlc3Mo
KQogewogICAgIGlmICghbV9wYWdlTWFwLmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElTZXNzaW9uLmgiCisj
aW5jbHVkZSAiQVBJVXNlckluaXRpYXRlZEFjdGlvbi5oIgogI2luY2x1ZGUgIkNoaWxkUHJvY2Vz
c1Byb3h5LmgiCiAjaW5jbHVkZSAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuaCIKICNpbmNs
dWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKQEAgLTY3LDYgKzY4LDcgQEAgcHVibGljOgogICAg
IHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+
PiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPFdlYkZyYW1lUHJveHk+PiBXZWJGcmFtZVByb3h5TWFwOwogICAgIHR5cGVkZWYg
SGFzaE1hcDx1aW50NjRfdCwgV2ViUGFnZVByb3h5Kj4gV2ViUGFnZVByb3h5TWFwOworICAgIHR5
cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEFQSTo6VXNlckluaXRpYXRlZEFjdGlvbj4+
IFVzZXJJbml0aWF0ZWRBY3Rpb25NYXA7CiAKICAgICBzdGF0aWMgUmVmPFdlYlByb2Nlc3NQcm94
eT4gY3JlYXRlKFdlYlByb2Nlc3NQb29sJik7CiAgICAgfldlYlByb2Nlc3NQcm94eSgpOwpAQCAt
OTQsNiArOTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKIAogICAgIFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYkJhY2tGb3J3YXJkSXRlbSh1aW50NjRfdCBpdGVtSUQp
IGNvbnN0OworICAgIFJlZlB0cjxBUEk6OlVzZXJJbml0aWF0ZWRBY3Rpb24+IHVzZXJJbml0aWF0
ZWRBY3Rpdml0eSh1aW50NjRfdCk7CiAKICAgICBSZXNwb25zaXZlbmVzc1RpbWVyJiByZXNwb25z
aXZlbmVzc1RpbWVyKCkgeyByZXR1cm4gbV9yZXNwb25zaXZlbmVzc1RpbWVyOyB9CiAKQEAgLTE2
Nyw3ICsxNzAsOCBAQCBwcml2YXRlOgogICAgIC8vIElQQyBtZXNzYWdlIGhhbmRsZXJzLgogICAg
IHZvaWQgYWRkQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IGl0ZW1JRCwgdWludDY0X3QgcGFnZUlE
LCBjb25zdCBQYWdlU3RhdGUmKTsKICAgICB2b2lkIGRpZERlc3Ryb3lGcmFtZSh1aW50NjRfdCk7
Ci0gICAgCisgICAgdm9pZCBkaWREZXN0cm95VXNlckdlc3R1cmVUb2tlbih1aW50NjRfdCk7CisK
ICAgICB2b2lkIHNob3VsZFRlcm1pbmF0ZShib29sJiBzaG91bGRUZXJtaW5hdGUpOwogCiAgICAg
dm9pZCBkaWRGZXRjaFdlYnNpdGVEYXRhKHVpbnQ2NF90IGNhbGxiYWNrSUQsIGNvbnN0IFdlYnNp
dGVEYXRhJik7CkBAIC0yMzQsNiArMjM4LDcgQEAgcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHlN
YXAgbV9wYWdlTWFwOwogICAgIFdlYkZyYW1lUHJveHlNYXAgbV9mcmFtZU1hcDsKICAgICBXZWJC
YWNrRm9yd2FyZExpc3RJdGVtTWFwIG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcDsKKyAgICBVc2Vy
SW5pdGlhdGVkQWN0aW9uTWFwIG1fdXNlckluaXRpYXRlZEFjdGlvbk1hcDsKIAogICAgIEhhc2hT
ZXQ8VmlzaXRlZExpbmtTdG9yZSo+IG1fdmlzaXRlZExpbmtTdG9yZXM7CiAgICAgSGFzaFNldDxX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSo+IG1fd2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveGllczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHku
bWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpA
QCAtMjQsNiArMjQsOCBAQCBtZXNzYWdlcyAtPiBXZWJQcm9jZXNzUHJveHkgTGVnYWN5UmVjZWl2
CiAgICAgQWRkQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IGl0ZW1JRCwgdWludDY0X3QgcGFnZUlE
LCBzdHJ1Y3QgV2ViS2l0OjpQYWdlU3RhdGUgcGFnZVN0YXRlKQogICAgIERpZERlc3Ryb3lGcmFt
ZSh1aW50NjRfdCBmcmFtZUlEKSAKIAorICAgIERpZERlc3Ryb3lVc2VyR2VzdHVyZVRva2VuKHVp
bnQ2NF90IHVzZXJHZXN0dXJlVG9rZW5JRCkgCisKICAgICBTaG91bGRUZXJtaW5hdGUoKSAtPiAo
Ym9vbCBzaG91bGRUZXJtaW5hdGUpCiAKICAgICBFbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25BY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25B
Y3Rpb24uaAkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9BUElOYXZpZ2F0aW9uQWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDI3ICsyOCwyNyBA
QAogCiAjaW5jbHVkZSAiQVBJRnJhbWVJbmZvLmgiCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisj
aW5jbHVkZSAiQVBJVXNlckluaXRpYXRlZEFjdGlvbi5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25B
Y3Rpb25EYXRhLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1VSTC5oPgogCiBuYW1lc3BhY2UgQVBJIHsKIAotY2xhc3MgRnJhbWVJbmZv
OwotCiBjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2Jq
ZWN0OjpUeXBlOjpOYXZpZ2F0aW9uQWN0aW9uPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxO
YXZpZ2F0aW9uQWN0aW9uPiBjcmVhdGUoY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0
YSYgbmF2aWdhdGlvbkFjdGlvbkRhdGEsIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VGcmFtZSwgQVBJ
OjpGcmFtZUluZm8qIHRhcmdldEZyYW1lLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlVSTCYgb3JpZ2luYWxVUkwsIGJvb2wgc2hvdWxkT3Bl
bkFwcExpbmtzKQorICAgIHN0YXRpYyBSZWY8TmF2aWdhdGlvbkFjdGlvbj4gY3JlYXRlKGNvbnN0
IFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGEmIG5hdmlnYXRpb25BY3Rpb25EYXRhLCBBUEk6
OkZyYW1lSW5mbyogc291cmNlRnJhbWUsIEFQSTo6RnJhbWVJbmZvKiB0YXJnZXRGcmFtZSwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpVUkwm
IG9yaWdpbmFsVVJMLCBib29sIHNob3VsZE9wZW5BcHBMaW5rcywgUmVmUHRyPFVzZXJJbml0aWF0
ZWRBY3Rpb24+IHVzZXJJbml0aWF0ZWRBY3Rpb24pCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBOYXZpZ2F0aW9uQWN0aW9uKG5hdmlnYXRpb25BY3Rpb25EYXRhLCBzb3VyY2VG
cmFtZSwgdGFyZ2V0RnJhbWUsIHJlcXVlc3QsIG9yaWdpbmFsVVJMLCBzaG91bGRPcGVuQXBwTGlu
a3MpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmF2aWdhdGlvbkFjdGlvbihuYXZp
Z2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWUsIHRhcmdldEZyYW1lLCByZXF1ZXN0LCBvcmln
aW5hbFVSTCwgc2hvdWxkT3BlbkFwcExpbmtzLCBXVEZNb3ZlKHVzZXJJbml0aWF0ZWRBY3Rpb24p
KSk7CiAgICAgfQogCi0gICAgTmF2aWdhdGlvbkFjdGlvbihjb25zdCBXZWJLaXQ6Ok5hdmlnYXRp
b25BY3Rpb25EYXRhJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgQVBJOjpGcmFtZUluZm8qIHNvdXJj
ZUZyYW1lLCBBUEk6OkZyYW1lSW5mbyogdGFyZ2V0RnJhbWUsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6VVJMJiBvcmlnaW5hbFVSTCwgYm9v
bCBzaG91bGRPcGVuQXBwTGlua3MpCisgICAgTmF2aWdhdGlvbkFjdGlvbihjb25zdCBXZWJLaXQ6
Ok5hdmlnYXRpb25BY3Rpb25EYXRhJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgQVBJOjpGcmFtZUlu
Zm8qIHNvdXJjZUZyYW1lLCBBUEk6OkZyYW1lSW5mbyogdGFyZ2V0RnJhbWUsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6VVJMJiBvcmlnaW5h
bFVSTCwgYm9vbCBzaG91bGRPcGVuQXBwTGlua3MsIFJlZlB0cjxVc2VySW5pdGlhdGVkQWN0aW9u
PiB1c2VySW5pdGlhdGVkQWN0aW9uKQogICAgICAgICA6IG1fc291cmNlRnJhbWUoc291cmNlRnJh
bWUpCiAgICAgICAgICwgbV90YXJnZXRGcmFtZSh0YXJnZXRGcmFtZSkKICAgICAgICAgLCBtX3Jl
cXVlc3QocmVxdWVzdCkKICAgICAgICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQogICAg
ICAgICAsIG1fc2hvdWxkT3BlbkFwcExpbmtzKHNob3VsZE9wZW5BcHBMaW5rcykKKyAgICAgICAg
LCBtX3VzZXJJbml0aWF0ZWRBY3Rpb24oV1RGTW92ZSh1c2VySW5pdGlhdGVkQWN0aW9uKSkKICAg
ICAgICAgLCBtX25hdmlnYXRpb25BY3Rpb25EYXRhKG5hdmlnYXRpb25BY3Rpb25EYXRhKQogICAg
IHsKICAgICB9CkBAIC02MywxMiArNjMsMTQgQEAgcHVibGljOgogICAgIFdlYktpdDo6V2ViRXZl
bnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRpb25BY3Rp
b25EYXRhLm1vZGlmaWVyczsgfQogICAgIFdlYktpdDo6V2ViTW91c2VFdmVudDo6QnV0dG9uIG1v
dXNlQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gbV9uYXZpZ2F0aW9uQWN0aW9uRGF0YS5tb3VzZUJ1
dHRvbjsgfQogICAgIFdlYktpdDo6V2ViTW91c2VFdmVudDo6U3ludGhldGljQ2xpY2tUeXBlIHN5
bnRoZXRpY0NsaWNrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmF2aWdhdGlvbkFjdGlvbkRhdGEu
c3ludGhldGljQ2xpY2tUeXBlOyB9Ci0gICAgYm9vbCBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmF2aWdhdGlvbkFjdGlvbkRhdGEuaXNQcm9jZXNzaW5nVXNlckdl
c3R1cmU7IH0KICAgICBib29sIGNhbkhhbmRsZVJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX25h
dmlnYXRpb25BY3Rpb25EYXRhLmNhbkhhbmRsZVJlcXVlc3Q7IH0KICAgICBib29sIHNob3VsZE9w
ZW5FeHRlcm5hbFNjaGVtZXMoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRpb25BY3Rpb25EYXRh
LnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPT0gV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3cgfHwgbV9uYXZpZ2F0aW9uQWN0aW9uRGF0YS5zaG91
bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID09IFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3k6OlNob3VsZEFsbG93RXh0ZXJuYWxTY2hlbWVzOyB9CiAgICAgYm9vbCBzaG91bGRP
cGVuQXBwTGlua3MoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE9wZW5BcHBMaW5rcyAmJiBtX25h
dmlnYXRpb25BY3Rpb25EYXRhLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPT0gV2ViQ29y
ZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3c7IH0KICAgICBib29s
IHNob3VsZFBlcmZvcm1Eb3dubG9hZCgpIGNvbnN0IHsgcmV0dXJuICFtX25hdmlnYXRpb25BY3Rp
b25EYXRhLmRvd25sb2FkQXR0cmlidXRlLmlzTnVsbCgpOyB9CiAKKyAgICBib29sIGlzUHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCkgY29uc3QgeyByZXR1cm4gISFtX3VzZXJJbml0aWF0ZWRBY3Rpb247
IH0KKyAgICBVc2VySW5pdGlhdGVkQWN0aW9uKiB1c2VySW5pdGlhdGVkQWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VySW5pdGlhdGVkQWN0aW9uLmdldCgpOyB9CisKIHByaXZhdGU6CiAgICAg
UmVmUHRyPEZyYW1lSW5mbz4gbV9zb3VyY2VGcmFtZTsKICAgICBSZWZQdHI8RnJhbWVJbmZvPiBt
X3RhcmdldEZyYW1lOwpAQCAtNzgsNiArODAsOCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3No
b3VsZE9wZW5BcHBMaW5rczsKIAorICAgIFJlZlB0cjxVc2VySW5pdGlhdGVkQWN0aW9uPiBtX3Vz
ZXJJbml0aWF0ZWRBY3Rpb247CisKICAgICBXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rpb25EYXRhIG1f
bmF2aWdhdGlvbkFjdGlvbkRhdGE7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0FQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJJbml0aWF0ZWRBY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKworbmFtZXNwYWNlIEFQSSB7CisKK2NsYXNz
IFVzZXJJbml0aWF0ZWRBY3Rpb24gZmluYWwgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6
T2JqZWN0OjpUeXBlOjpVc2VySW5pdGlhdGVkQWN0aW9uPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxVc2VySW5pdGlhdGVkQWN0aW9uPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgVXNlckluaXRpYXRlZEFjdGlvbik7CisgICAgfQorCisgICAgdmlydHVh
bCB+VXNlckluaXRpYXRlZEFjdGlvbigpCisgICAgeworICAgIH0KKworICAgIHZvaWQgc2V0Q29u
c3VtZWQoKSB7IG1fY29uc3VtZWQgPSB0cnVlOyB9CisgICAgYm9vbCBjb25zdW1lZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29uc3VtZWQ7IH0KKworcHJpdmF0ZToKKyAgICBVc2VySW5pdGlhdGVkQWN0
aW9uKCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBtX2NvbnN1bWVkID0gZmFsc2U7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBBUEkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5OCw3ICsxNjk4LDcgQEAg
dm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdlUmVmIHBhZwogICAgICAgICAgICAgICAg
IGF1dG8gc291cmNlRnJhbWVJbmZvID0gQVBJOjpGcmFtZUluZm86OmNyZWF0ZSgqaW5pdGlhdGlu
Z0ZyYW1lLCBzZWN1cml0eU9yaWdpbkRhdGEuc2VjdXJpdHlPcmlnaW4oKSk7CiAKICAgICAgICAg
ICAgICAgICBib29sIHNob3VsZE9wZW5BcHBMaW5rcyA9ICFob3N0c0FyZUVxdWFsKFdlYkNvcmU6
OlVSTChXZWJDb3JlOjpQYXJzZWRVUkxTdHJpbmcsIGluaXRpYXRpbmdGcmFtZS0+dXJsKCkpLCBy
ZXNvdXJjZVJlcXVlc3QudXJsKCkpOwotICAgICAgICAgICAgICAgIGF1dG8gYXBpTmF2aWdhdGlv
bkFjdGlvbiA9IEFQSTo6TmF2aWdhdGlvbkFjdGlvbjo6Y3JlYXRlKG5hdmlnYXRpb25BY3Rpb25E
YXRhLCBzb3VyY2VGcmFtZUluZm8ucHRyKCksIG51bGxwdHIsIHJlc291cmNlUmVxdWVzdCwgV2Vi
Q29yZTo6VVJMKCksIHNob3VsZE9wZW5BcHBMaW5rcyk7CisgICAgICAgICAgICAgICAgYXV0byBh
cGlOYXZpZ2F0aW9uQWN0aW9uID0gQVBJOjpOYXZpZ2F0aW9uQWN0aW9uOjpjcmVhdGUobmF2aWdh
dGlvbkFjdGlvbkRhdGEsIHNvdXJjZUZyYW1lSW5mby5wdHIoKSwgbnVsbHB0ciwgcmVzb3VyY2VS
ZXF1ZXN0LCBXZWJDb3JlOjpVUkwoKSwgc2hvdWxkT3BlbkFwcExpbmtzLCBudWxscHRyIC8qRklY
TUUgKi8pOwogCiAgICAgICAgICAgICAgICAgYXV0byBhcGlXaW5kb3dGZWF0dXJlcyA9IEFQSTo6
V2luZG93RmVhdHVyZXM6OmNyZWF0ZSh3aW5kb3dGZWF0dXJlcyk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZpZ2F0aW9uQWN0aW9uLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZpZ2F0aW9uQWN0
aW9uLm1tCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLTmF2aWdhdGlvbkFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW1wb3J0ICJOYXZpZ2F0aW9uQWN0aW9uRGF0YS5oIgogI2ltcG9ydCAiV0tGcmFt
ZUluZm9JbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFs
LmgiCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBXS05hdmln
YXRpb25BY3Rpb24KQEAgLTIxOCw2ICsyMTksMTQgQEAgLSAoQk9PTClfc2hvdWxkT3BlbkV4dGVy
bmFsVVJMcwogICAgIHJldHVybiBbc2VsZiBfc2hvdWxkT3BlbkV4dGVybmFsU2NoZW1lc107CiB9
CiAKKy0gKF9XS1VzZXJJbml0aWF0ZWRBY3Rpb24gKilfdXNlckluaXRpYXRlZEFjdGlvbgorewor
ICAgIGF1dG8gdXNlckluaXRpYXRlZEFjdGlvbiA9IF9uYXZpZ2F0aW9uQWN0aW9uLT51c2VySW5p
dGlhdGVkQWN0aW9uKCk7CisgICAgaWYgKHVzZXJJbml0aWF0ZWRBY3Rpb24pCisgICAgICAgIHJl
dHVybiB3cmFwcGVyKCp1c2VySW5pdGlhdGVkQWN0aW9uKTsKKyAgICByZXR1cm4gbmlsOworfQor
CiBAZW5kCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS05hdmlnYXRpb25BY3Rpb25Qcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25BY3Rpb25Qcml2YXRlLmgJKHJldmlz
aW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZp
Z2F0aW9uQWN0aW9uUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAK
ICNpZiBXS19BUElfRU5BQkxFRAogCitAY2xhc3MgX1dLVXNlckluaXRpYXRlZEFjdGlvbjsKKwog
I2lmIFRBUkdFVF9PU19JUEhPTkUKIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFdLU3ludGhl
dGljQ2xpY2tUeXBlKSB7CiAgICAgV0tTeW50aGV0aWNDbGlja1R5cGVOb1RhcCwKQEAgLTQ1LDYg
KzQ3LDggQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgV0tTeW50aGV0aWNDbAogCiBAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX3Nob3VsZE9wZW5FeHRlcm5hbFVSTHMg
V0tfQVBJX0RFUFJFQ0FURUQoInVzZSBfc2hvdWxkT3BlbkV4dGVybmFsU2NoZW1lcyBhbmQgX3No
b3VsZE9wZW5BcHBMaW5rcyIsIG1hY29zeCgxMC4xMSwgMTAuMTEpLCBpb3MoOS4wLCA5LjApKTsK
IAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tVc2VySW5pdGlhdGVkQWN0aW9u
ICpfdXNlckluaXRpYXRlZEFjdGlvbjsKKwogI2lmIFRBUkdFVF9PU19JUEhPTkUKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tTeW50aGV0aWNDbGlja1R5cGUgX3N5bnRoZXRpY0Ns
aWNrVHlwZSBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckluaXRpYXRlZEFjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlcklu
aXRpYXRlZEFjdGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVXNlckluaXRpYXRlZEFjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+
CisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29z
eChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tVc2VySW5pdGlh
dGVkQWN0aW9uIDogTlNPYmplY3QKKworLSAodm9pZCljb25zdW1lOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9aXNDb25zdW1lZCkgQk9PTCBjb25zdW1lZDsKKworQGVu
ZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0ZWRBY3Rpb24ubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VySW5pdGlhdGVk
QWN0aW9uLm1tCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckluaXRpYXRlZEFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJfV0tVc2Vy
SW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaCIKKworI2lmIFdLX0FQSV9FTkFCTEVECisKK0BpbXBs
ZW1lbnRhdGlvbiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uCisKKy0gKHZvaWQpZGVhbGxvYworewor
ICAgIF91c2VySW5pdGlhdGVkQWN0aW9uLT5+VXNlckluaXRpYXRlZEFjdGlvbigpOworCisgICAg
W3N1cGVyIGRlYWxsb2NdOworfQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCit7CisgICAg
cmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPCVAOiAlcDsgY29uc3VtZWQgPSAl
cz4iLCBOU1N0cmluZ0Zyb21DbGFzcyhzZWxmLmNsYXNzKSwgc2VsZiwgc2VsZi5jb25zdW1lZCA/
ICJZRVMiIDogIk5PIl07Cit9CisKKy0gKHZvaWQpY29uc3VtZQoreworICAgIF91c2VySW5pdGlh
dGVkQWN0aW9uLT5zZXRDb25zdW1lZCgpOworfQorCistIChCT09MKWlzQ29uc3VtZWQKK3sKKyAg
ICByZXR1cm4gX3VzZXJJbml0aWF0ZWRBY3Rpb24tPmNvbnN1bWVkKCk7Cit9CisKKyNwcmFnbWEg
bWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgorCistIChBUEk6Ok9iamVjdCYp
X2FwaU9iamVjdAoreworICAgIHJldHVybiAqX3VzZXJJbml0aWF0ZWRBY3Rpb247Cit9CisKK0Bl
bmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFsLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tV
c2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiX1dLVXNlckluaXRpYXRlZEFjdGlvbi5oIgorCisj
aWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiQVBJVXNlckluaXRpYXRlZEFjdGlvbi5oIgor
I2ltcG9ydCAiV0tPYmplY3QuaCIKKyNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KKyNpbXBvcnQgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgQVBJIHsKKworaW5saW5lIF9XS1VzZXJJ
bml0aWF0ZWRBY3Rpb24gKndyYXBwZXIoVXNlckluaXRpYXRlZEFjdGlvbiYgdXNlckluaXRpYXRl
ZEFjdGlvbikKK3sKKyAgICBBU1NFUlQoW3VzZXJJbml0aWF0ZWRBY3Rpb24ud3JhcHBlcigpIGlz
S2luZE9mQ2xhc3M6W19XS1VzZXJJbml0aWF0ZWRBY3Rpb24gY2xhc3NdXSk7CisgICAgcmV0dXJu
IChfV0tVc2VySW5pdGlhdGVkQWN0aW9uICopdXNlckluaXRpYXRlZEFjdGlvbi53cmFwcGVyKCk7
Cit9CisKK30KKworQGludGVyZmFjZSBfV0tVc2VySW5pdGlhdGVkQWN0aW9uICgpIDxXS09iamVj
dD4geworQHBhY2thZ2UKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpVc2VySW5pdGlhdGVk
QWN0aW9uPiBfdXNlckluaXRpYXRlZEFjdGlvbjsKK30KK0BlbmQKKworI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJp
dmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdE5hdmlnYXRpb25BY3Rpb25Qcml2YXRlLmgJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25BY3Rpb25Qcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgc3RydWN0IF9XZWJLaXROYXZpZ2F0
aW9uQWN0aW9uIHsKICAgICAgICAgOiB0eXBlKHRvV2ViS2l0TmF2aWdhdGlvblR5cGUobmF2aWdh
dGlvbkFjdGlvbkRhdGEubmF2aWdhdGlvblR5cGUpKQogICAgICAgICAsIG1vdXNlQnV0dG9uKHRv
V2ViS2l0TW91c2VCdXR0b24obmF2aWdhdGlvbkFjdGlvbkRhdGEubW91c2VCdXR0b24pKQogICAg
ICAgICAsIG1vZGlmaWVycyh0b0dka01vZGlmaWVycyhuYXZpZ2F0aW9uQWN0aW9uRGF0YS5tb2Rp
ZmllcnMpKQotICAgICAgICAsIGlzVXNlckdlc3R1cmUobmF2aWdhdGlvbkFjdGlvbkRhdGEuaXNQ
cm9jZXNzaW5nVXNlckdlc3R1cmUpCisgICAgICAgICwgaXNVc2VyR2VzdHVyZShuYXZpZ2F0aW9u
QWN0aW9uRGF0YS51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllciAhPSAwKQogICAgICAgICAsIHJl
cXVlc3QodXJpUmVxdWVzdCkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0JKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjIsNyArMTYyLDcgQEAgUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gVUlEZWxl
ZwogICAgIGF1dG8gc291cmNlRnJhbWVJbmZvID0gQVBJOjpGcmFtZUluZm86OmNyZWF0ZSgqaW5p
dGlhdGluZ0ZyYW1lLCBzZWN1cml0eU9yaWdpbkRhdGEuc2VjdXJpdHlPcmlnaW4oKSk7CiAKICAg
ICBib29sIHNob3VsZE9wZW5BcHBMaW5rcyA9ICFob3N0c0FyZUVxdWFsKFdlYkNvcmU6OlVSTChX
ZWJDb3JlOjpQYXJzZWRVUkxTdHJpbmcsIGluaXRpYXRpbmdGcmFtZS0+dXJsKCkpLCByZXF1ZXN0
LnVybCgpKTsKLSAgICBhdXRvIGFwaU5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25B
Y3Rpb246OmNyZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLnB0cigp
LCBudWxscHRyLCByZXF1ZXN0LCBXZWJDb3JlOjpVUkwoKSwgc2hvdWxkT3BlbkFwcExpbmtzKTsK
KyAgICBhdXRvIGFwaU5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNy
ZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLnB0cigpLCBudWxscHRy
LCByZXF1ZXN0LCBXZWJDb3JlOjpVUkwoKSwgc2hvdWxkT3BlbkFwcExpbmtzLCBudWxscHRyIC8q
RklYTUUgKi8pOwogCiAgICAgYXV0byBhcGlXaW5kb3dGZWF0dXJlcyA9IEFQSTo6V2luZG93RmVh
dHVyZXM6OmNyZWF0ZSh3aW5kb3dGZWF0dXJlcyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwMzMzMykK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTEzNyw2ICsxMTM3LDEwIEBACiAJCTdDQjE2RkYyMTcyNEJBMjgwMDdB
MEE5NSAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luLnNiIGluIENvcHkgUGx1
Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDQjE2RkU1MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIu
cGx1Z2luLnNiICovOyB9OwogCQk3Q0IxNkZGMzE3MjRCQTJGMDA3QTBBOTUgLyogY29tLm1pY3Jv
c29mdC5TaWx2ZXJsaWdodFBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxNkZFNjE3MjRCOUI1MDA3
QTBBOTUgLyogY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBsdWdpbi5zYiAqLzsgfTsKIAkJN0NC
MTZGRjQxNzI0QkEzMDAwN0EwQTk1IC8qIGNvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2lu
LnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDQjE2RkU3MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ub3JhY2xlLmph
dmEuSmF2YUFwcGxldFBsdWdpbi5zYiAqLzsgfTsKKwkJN0NCMzY1QUExRDMxREI3MDAwNzE1OENB
IC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjM2NUE4MUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5p
dGlhdGVkQWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJN0NCMzY1QUIxRDMxREI3MDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rp
b24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Iz
NjVBOTFEMzFEQjcwMDA3MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbi5tbSAqLzsgfTsK
KwkJN0NCMzY1QUQxRDMxREMxMDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NC
MzY1QUMxRDMxREMxMDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5o
ICovOyB9OworCQk3Q0IzNjVCMTFEMzFERDFFMDA3MTU4Q0EgLyogQVBJVXNlckluaXRpYXRlZEFj
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NC
MzY1QUYxRDMxREQxRTAwNzE1OENBIC8qIEFQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaCAqLzsgfTsK
IAkJN0NCQjgxMUMxQUEwRjhCMTAwNkIxOTQyIC8qIEluamVjdGVkQnVuZGxlRmlsZUhhbmRsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0JCODEx
QTFBQTBGOEIxMDA2QjE5NDIgLyogSW5qZWN0ZWRCdW5kbGVGaWxlSGFuZGxlLmNwcCAqLzsgfTsK
IAkJN0NCQjgxMUQxQUEwRjhCMTAwNkIxOTQyIC8qIEluamVjdGVkQnVuZGxlRmlsZUhhbmRsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCQjgxMUIx
QUEwRjhCMTAwNkIxOTQyIC8qIEluamVjdGVkQnVuZGxlRmlsZUhhbmRsZS5oICovOyB9OwogCQk3
Q0JCODEyMDFBQTBGOTcwMDA2QjE5NDIgLyogV0tCdW5kbGVGaWxlSGFuZGxlUmVmLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQkI4MTFFMUFBMEY5
NzAwMDZCMTk0MiAvKiBXS0J1bmRsZUZpbGVIYW5kbGVSZWYuY3BwICovOyB9OwpAQCAtMzIwMCw2
ICszMjA0LDEwIEBACiAJCTdDQjE2RkU1MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ubWFjcm9tZWRp
YS5GbGFzaCBQbGF5ZXIucGx1Z2luLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJjb20ubWFj
cm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0NCMTZGRTYxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5taWNyb3NvZnQuU2lsdmVybGln
aHRQbHVnaW4uc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLm1pY3Jvc29mdC5TaWx2ZXJs
aWdodFBsdWdpbi5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCMTZGRTcxNzI0
QjlCNTAwN0EwQTk1IC8qIGNvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IGNvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0IzNjVBODFEMzFEQjcwMDA3MTU4Q0EgLyog
X1dLVXNlckluaXRpYXRlZEFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBfV0tVc2VySW5pdGlhdGVkQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTdDQjM2NUE5MUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVXNlckluaXRpYXRlZEFj
dGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NCMzY1QUMxRDMxREMxMDAw
NzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBfV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NCMzY1QUYxRDMxREQxRTAwNzE1OENBIC8qIEFQ
SVVzZXJJbml0aWF0ZWRBY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QVBJVXNlckluaXRpYXRlZEFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Q0JCODExQTFBQTBGOEIxMDA2QjE5NDIgLyogSW5qZWN0ZWRCdW5kbGVGaWxlSGFuZGxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlRmlsZUhh
bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQkI4MTFCMUFBMEY4QjEw
MDZCMTk0MiAvKiBJbmplY3RlZEJ1bmRsZUZpbGVIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVGaWxlSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDQkI4MTFFMUFBMEY5NzAwMDZCMTk0MiAvKiBXS0J1bmRsZUZpbGVI
YW5kbGVSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tCdW5k
bGVGaWxlSGFuZGxlUmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUxMzQs
NiArNTE0Miw5IEBACiAJCQkJN0M4ODJERjMxQzdFOTk1RTAwNkJGNzMxIC8qIF9XS1VzZXJDb250
ZW50V29ybGQuaCAqLywKIAkJCQk3Qzg4MkRGNDFDN0U5OTVFMDA2QkY3MzEgLyogX1dLVXNlckNv
bnRlbnRXb3JsZC5tbSAqLywKIAkJCQk3Qzg4MkRGNTFDN0U5OTVFMDA2QkY3MzEgLyogX1dLVXNl
ckNvbnRlbnRXb3JsZEludGVybmFsLmggKi8sCisJCQkJN0NCMzY1QTgxRDMxREI3MDAwNzE1OENB
IC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb24uaCAqLywKKwkJCQk3Q0IzNjVBOTFEMzFEQjcwMDA3
MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbi5tbSAqLywKKwkJCQk3Q0IzNjVBQzFEMzFE
QzEwMDA3MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFsLmggKi8sCiAJCQkJ
MkQ4Nzg2MUIxQkRCNTRCRjAwRDAyQUJCIC8qIF9XS1VzZXJTdHlsZVNoZWV0LmggKi8sCiAJCQkJ
MkQ4Nzg2MUMxQkRCNTRCRjAwRDAyQUJCIC8qIF9XS1VzZXJTdHlsZVNoZWV0Lm1tICovLAogCQkJ
CTJEODc4NjFGMUJEQjU3RjUwMEQwMkFCQiAvKiBfV0tVc2VyU3R5bGVTaGVldEludGVybmFsLmgg
Ki8sCkBAIC02MTI5LDYgKzYxNDAsNyBAQAogCQkJCTdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAv
KiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmggKi8sCiAJCQkJN0M4ODJERkIxQzdFOTlB
NjAwNkJGNzMxIC8qIEFQSVVzZXJDb250ZW50V29ybGQuY3BwICovLAogCQkJCTdDODgyREZDMUM3
RTk5QTYwMDZCRjczMSAvKiBBUElVc2VyQ29udGVudFdvcmxkLmggKi8sCisJCQkJN0NCMzY1QUYx
RDMxREQxRTAwNzE1OENBIC8qIEFQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaCAqLywKIAkJCQk3Qzg5
RDJBNTFBNjc4OUVBMDAzQTVGREUgLyogQVBJVXNlclNjcmlwdC5jcHAgKi8sCiAJCQkJN0M4OUQy
OTIxQTY3MTIyRjAwM0E1RkRFIC8qIEFQSVVzZXJTY3JpcHQuaCAqLywKIAkJCQkyRDg3ODYyMTFC
REI1OEZGMDBEMDJBQkIgLyogQVBJVXNlclN0eWxlU2hlZXQuY3BwICovLApAQCAtNzY0Myw2ICs3
NjU1LDcgQEAKIAkJCQkxQTBFQzc1RTEyNEJDN0IyMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc1By
b3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA0M0I1RTEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1
Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMDQzREMxMTI0
RkY4NzUwMEZGQkZCNSAvKiBQbHVnaW5Qcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0NCMzY1
QUQxRDMxREMxMDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE4RUZBNzExMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5
TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5RjMzMTJCODQ0RTIwMDhGRTk4NCAv
KiBQbHVnaW5RdWlya3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRDYyMjc4MTczOUQ4NjMwMDVC
RDdGRiAvKiBQbHVnaW5TYW5kYm94UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03Nzg1LDYg
Kzc3OTgsNyBAQAogCQkJCUJDRTQ2OTc3MTIxNEYyN0IwMDBCOThFQiAvKiBXZWJGcmFtZUxpc3Rl
bmVyUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDMyRDdGMTBGNDM3OEQwMDU4QzE1QSAv
KiBXZWJGcmFtZUxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MUYyQ0IxMjFC
NjdBRDAwRUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTdDQjM2NUFBMUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0I5RjZBMDExMjNBODRCMDBBMTM3RTAgLyogV2ViRnJh
bWVQb2xpY3lMaXN0ZW5lclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzlCMzhBMTEwRjUz
OEJFMDA0NDNBMTUgLyogV2ViRnJhbWVQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCMUY3
OTkxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLApAQCAtODIxNSw2ICs4MjI5LDcgQEAKIAkJCQkxQTQ4MzJDQzFBOUJD
NDY1MDA4QjRERkUgLyogV0tXZWJzaXRlRGF0YVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUE0ODMyQ0UxQTlCQzQ4NDAwOEI0REZFIC8qIFdLV2Vic2l0ZURhdGFSZWNvcmRJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBNjU0RDExQjE0RjcxNDAwQkYxRDNFIC8qIFdLV2Vic2l0
ZURhdGFSZWNvcmRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Q0IzNjVCMTFEMzFERDFF
MDA3MTU4Q0EgLyogQVBJVXNlckluaXRpYXRlZEFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NzVBOEQyQzgxODdDQ0ZBQjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzVBOEQyRDYxODdEMUMwRTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9y
ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyODY3QTFDN0Y3QkE2MDA2OUFDNEYg
LyogV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MzQ2LDYg
KzkzNjEsNyBAQAogCQkJCTFBQjFGNzk4MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29v
cmRpbmF0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdC
NjIwNzEyOUEwQTY3MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDN0I2MjUzMTJBNDNDOTYwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBEYXRhLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTdDQjM2NUFCMUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlh
dGVkQWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3QjYyMTYxMkE0MjE5QTAwRDE3NEE0
IC8qIFdlYlBhZ2VHcm91cFByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOUVBMzExMUE5
NkQ5RUIwMDJEMjgwNyAvKiBXZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkRBOTQ0QkExODg0RUEzQzAwRUQ4NkRCIC8qIFdlYlBhZ2VJT1MubW0gaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNw
cAkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvU2NoZW1lUmVnaXN0cnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVXNlckdl
c3R1cmVJbmRpY2F0b3IuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KQEAgLTcxOSw2ICs3
MjAsMzMgQEAgV2ViUGFnZUdyb3VwUHJveHkqIFdlYlByb2Nlc3M6OndlYlBhZ2VHcgogICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCitzdGF0aWMgdWludDY0X3Qg
bmV4dFVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3Qg
aWRlbnRpZmllciA9IDE7CisgICAgcmV0dXJuIGlkZW50aWZpZXIrKzsKK30KKwordWludDY0X3Qg
V2ViUHJvY2Vzczo6dXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIoUmVmUHRyPFVzZXJHZXN0dXJl
VG9rZW4+IHRva2VuKQoreworICAgIGlmICghdG9rZW4gfHwgIXRva2VuLT5wcm9jZXNzaW5nVXNl
ckdlc3R1cmUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWN0
aXZlVXNlckdlc3R1cmVUb2tlbnMuZW5zdXJlKHRva2VuLmdldCgpLCBbXSB7IHJldHVybiBuZXh0
VXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIoKTsgfSk7CisgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KSB7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+a2V5LT5hZGREZXN0cnVjdGlvbk9ic2Vy
dmVyKFtdIChVc2VyR2VzdHVyZVRva2VuJiB0b2tlbkJlaW5nRGVzdHJveWVkKSB7CisgICAgICAg
ICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VyR2VzdHVyZVRva2VuRGVzdHJveWVkKHRv
a2VuQmVpbmdEZXN0cm95ZWQpOworICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6dXNlckdlc3R1
cmVUb2tlbkRlc3Ryb3llZChVc2VyR2VzdHVyZVRva2VuJiB0b2tlbikKK3sKKyAgICBhdXRvIGlk
ZW50aWZpZXIgPSBtX2FjdGl2ZVVzZXJHZXN0dXJlVG9rZW5zLnRha2UoJnRva2VuKTsKKyAgICBw
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6
OkRpZERlc3Ryb3lVc2VyR2VzdHVyZVRva2VuKGlkZW50aWZpZXIpLCAwKTsKK30KKwogdm9pZCBX
ZWJQcm9jZXNzOjpjbGVhclJlc291cmNlQ2FjaGVzKFJlc291cmNlQ2FjaGVzVG9DbGVhciByZXNv
dXJjZUNhY2hlc1RvQ2xlYXIpCiB7CiAgICAgcGxhdGZvcm1DbGVhclJlc291cmNlQ2FjaGVzKHJl
c291cmNlQ2FjaGVzVG9DbGVhcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuaAkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgY2xhc3MgQ2VydGlm
aWNhdGVJbmZvOwogY2xhc3MgUGFnZUdyb3VwOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xh
c3MgU2Vzc2lvbklEOworY2xhc3MgVXNlckdlc3R1cmVUb2tlbjsKIHN0cnVjdCBQbHVnaW5JbmZv
Owogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKIH0KQEAgLTE0MCw2ICsxNDEsOSBAQCBwdWJs
aWM6CiAgICAgV2ViUGFnZUdyb3VwUHJveHkqIHdlYlBhZ2VHcm91cCh1aW50NjRfdCBwYWdlR3Jv
dXBJRCk7CiAgICAgV2ViUGFnZUdyb3VwUHJveHkqIHdlYlBhZ2VHcm91cChjb25zdCBXZWJQYWdl
R3JvdXBEYXRhJik7CiAKKyAgICB1aW50NjRfdCB1c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcihS
ZWZQdHI8V2ViQ29yZTo6VXNlckdlc3R1cmVUb2tlbj4pOworICAgIHZvaWQgdXNlckdlc3R1cmVU
b2tlbkRlc3Ryb3llZChXZWJDb3JlOjpVc2VyR2VzdHVyZVRva2VuJik7CisKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICBwaWRfdCBwcmVzZW50ZXJBcHBsaWNhdGlvblBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlc2VudGVyQXBwbGljYXRpb25QaWQ7IH0KICNlbmRpZgpAQCAtMzkzLDYgKzM5Nyw4
IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX3BhZ2VzTWFya2luZ0xheWVyc0FzVm9sYXRp
bGUgeyAwIH07CiAgICAgYm9vbCBtX3N1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyIHsgZmFs
c2UgfTsKKworICAgIEhhc2hNYXA8V2ViQ29yZTo6VXNlckdlc3R1cmVUb2tlbiAqLCB1aW50NjRf
dD4gbV9hY3RpdmVVc2VyR2VzdHVyZVRva2VuczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlm
aWNhdGlvbk1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAkocmV2aXNpb24gMjAz
MzMzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlm
aWNhdGlvbk1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9p
ZCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpkaWRDbGlja05vdAogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoaXMgZXZlbnQgaXMgYmVpbmcgZGlzcGF0Y2hlZCBpbiBy
ZWFjdGlvbiB0byBhIHVzZXIncyBpbnRlcmFjdGlvbiB3aXRoIGEgcGxhdGZvcm0gbm90aWZpY2F0
aW9uLgotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBub3RpZmljYXRpb24tPmRpc3BhdGNoQ2xpY2tFdmVu
dCgpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obm90aWZpY2F0aW9uSUQpOwpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2
aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjE4LDcgKzEyMTgsNyBAQCB2b2lkIFBsdWdp
blZpZXc6OnBlcmZvcm1GcmFtZUxvYWRVUkxSZXF1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHJlcXVlc3QtPmFsbG93
UG9wdXBzKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogUG9zc2libHlQcm9j
ZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRp
Y2F0b3IocmVxdWVzdC0+YWxsb3dQb3B1cHMoKSA/IE9wdGlvbmFsPFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZVN0YXRlPihQcm9jZXNzaW5nVXNlckdlc3R1cmUpIDogTnVsbG9wdCk7CiAKICAgICAvLyBG
aXJzdCwgdHJ5IHRvIGZpbmQgYSB0YXJnZXQgZnJhbWUuCiAgICAgRnJhbWUqIHRhcmdldEZyYW1l
ID0gZnJhbWUtPmxvYWRlcigpLmZpbmRGcmFtZUZvck5hdmlnYXRpb24ocmVxdWVzdC0+dGFyZ2V0
KCkpOwpAQCAtMTUxMyw3ICsxNTEzLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpldmFsdWF0ZShOUE9i
amVjdCogbnBPYgogICAgIC8vIHByb3RlY3QgdGhlIHBsdWctaW4gdmlldyBmcm9tIGRlc3RydWN0
aW9uLgogICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yIHBsdWdpblByb3Rl
Y3RvcigmbV9ucFJ1bnRpbWVPYmplY3RNYXApOwogCi0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
Z2VzdHVyZUluZGljYXRvcihhbGxvd1BvcHVwcyA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdl
c3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihhbGxvd1BvcHVwcyA/IE9wdGlvbmFsPFByb2Nlc3Np
bmdVc2VyR2VzdHVyZVN0YXRlPihQcm9jZXNzaW5nVXNlckdlc3R1cmUpIDogTnVsbG9wdCk7CiAg
ICAgcmV0dXJuIG1fbnBSdW50aW1lT2JqZWN0TWFwLmV2YWx1YXRlKG5wT2JqZWN0LCBzY3JpcHRT
dHJpbmcsIHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlz
aW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDYgKzIyNCw4IEBAIFBh
Z2UqIFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlV2luZG93KEZyYW0KICAgICAgICAgZnJhbWUtPmRv
Y3VtZW50KCktPndlYmtpdENhbmNlbEZ1bGxTY3JlZW4oKTsKICNlbmRpZgogCisgICAgYXV0byYg
d2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOworCiAgICAgV2ViRnJhbWUqIHdl
YkZyYW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmZyYW1lKTsKIAogICAgIE5hdmlnYXRp
b25BY3Rpb25EYXRhIG5hdmlnYXRpb25BY3Rpb25EYXRhOwpAQCAtMjMxLDE0ICsyMzMsMTMgQEAg
UGFnZSogV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVXaW5kb3coRnJhbQogICAgIG5hdmlnYXRpb25B
Y3Rpb25EYXRhLm1vZGlmaWVycyA9IEluamVjdGVkQnVuZGxlTmF2aWdhdGlvbkFjdGlvbjo6bW9k
aWZpZXJzRm9yTmF2aWdhdGlvbkFjdGlvbihuYXZpZ2F0aW9uQWN0aW9uKTsKICAgICBuYXZpZ2F0
aW9uQWN0aW9uRGF0YS5tb3VzZUJ1dHRvbiA9IEluamVjdGVkQnVuZGxlTmF2aWdhdGlvbkFjdGlv
bjo6bW91c2VCdXR0b25Gb3JOYXZpZ2F0aW9uQWN0aW9uKG5hdmlnYXRpb25BY3Rpb24pOwogICAg
IG5hdmlnYXRpb25BY3Rpb25EYXRhLnN5bnRoZXRpY0NsaWNrVHlwZSA9IEluamVjdGVkQnVuZGxl
TmF2aWdhdGlvbkFjdGlvbjo6c3ludGhldGljQ2xpY2tUeXBlRm9yTmF2aWdhdGlvbkFjdGlvbihu
YXZpZ2F0aW9uQWN0aW9uKTsKLSAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5pc1Byb2Nlc3NpbmdV
c2VyR2VzdHVyZSA9IG5hdmlnYXRpb25BY3Rpb24ucHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7Cisg
ICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEudXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIgPSB3ZWJQ
cm9jZXNzLnVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKG5hdmlnYXRpb25BY3Rpb24udXNlckdl
c3R1cmVUb2tlbigpKTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5jYW5IYW5kbGVSZXF1ZXN0
ID0gbV9wYWdlLT5jYW5IYW5kbGVSZXF1ZXN0KHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkpOwog
ICAgIG5hdmlnYXRpb25BY3Rpb25EYXRhLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSBu
YXZpZ2F0aW9uQWN0aW9uLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3koKTsKICAgICBuYXZp
Z2F0aW9uQWN0aW9uRGF0YS5kb3dubG9hZEF0dHJpYnV0ZSA9IG5hdmlnYXRpb25BY3Rpb24uZG93
bmxvYWRBdHRyaWJ1dGUoKTsKIAogICAgIHVpbnQ2NF90IG5ld1BhZ2VJRCA9IDA7CiAgICAgV2Vi
UGFnZUNyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICAgIGF1dG8mIHdlYlByb2Nlc3Mg
PSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKICAgICBpZiAoIXdlYlByb2Nlc3MucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRl
TmV3UGFnZSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21GcmFt
ZShmcmFtZSksIHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHdpbmRvd0ZlYXR1cmVzLCBuYXZp
Z2F0aW9uQWN0aW9uRGF0YSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZU5ld1BhZ2U6
OlJlcGx5KG5ld1BhZ2VJRCwgcGFyYW1ldGVycyksIG1fcGFnZS0+cGFnZUlEKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5j
cHAJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3
ICs2Niw3IEBAIHZvaWQgV2ViQ29udGV4dE1lbnVDbGllbnQ6OnNlYXJjaFdpdGhHb28KICAgICBT
dHJpbmcgdXJsID0gImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT0iICsgZW5jb2RlZCAr
ICImaWU9VVRGLTgmb2U9VVRGLTgiOwogCiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFn
ZSgpKSB7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgp
LmxvYWRlcigpLnVybFNlbGVjdGVkKFVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIFN0cmluZygp
LCAwLCBMb2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5vLCBNYXliZVNlbmRS
ZWZlcnJlciwgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cpOwog
ICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lv
biAyMDMzMzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI3LDcgKzcyNyw3IEBA
IHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWQKICAgICBuYXZpZ2F0aW9u
QWN0aW9uRGF0YS5tb2RpZmllcnMgPSBhY3Rpb24tPm1vZGlmaWVycygpOwogICAgIG5hdmlnYXRp
b25BY3Rpb25EYXRhLm1vdXNlQnV0dG9uID0gYWN0aW9uLT5tb3VzZUJ1dHRvbigpOwogICAgIG5h
dmlnYXRpb25BY3Rpb25EYXRhLnN5bnRoZXRpY0NsaWNrVHlwZSA9IGFjdGlvbi0+c3ludGhldGlj
Q2xpY2tUeXBlKCk7Ci0gICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuaXNQcm9jZXNzaW5nVXNlckdl
c3R1cmUgPSBuYXZpZ2F0aW9uQWN0aW9uLnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAgIG5h
dmlnYXRpb25BY3Rpb25EYXRhLnVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyID0gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkudXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIobmF2aWdhdGlvbkFjdGlv
bi51c2VyR2VzdHVyZVRva2VuKCkpOwogICAgIG5hdmlnYXRpb25BY3Rpb25EYXRhLmNhbkhhbmRs
ZVJlcXVlc3QgPSB3ZWJQYWdlLT5jYW5IYW5kbGVSZXF1ZXN0KHJlcXVlc3QpOwogICAgIG5hdmln
YXRpb25BY3Rpb25EYXRhLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSBuYXZpZ2F0aW9u
QWN0aW9uLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3koKTsKICAgICBuYXZpZ2F0aW9uQWN0
aW9uRGF0YS5kb3dubG9hZEF0dHJpYnV0ZSA9IG5hdmlnYXRpb25BY3Rpb24uZG93bmxvYWRBdHRy
aWJ1dGUoKTsKQEAgLTc5NCw3ICs3OTQsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERlY2lkCiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEubW9kaWZpZXJzID0gYWN0aW9u
LT5tb2RpZmllcnMoKTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5tb3VzZUJ1dHRvbiA9IGFj
dGlvbi0+bW91c2VCdXR0b24oKTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5zeW50aGV0aWND
bGlja1R5cGUgPSBhY3Rpb24tPnN5bnRoZXRpY0NsaWNrVHlwZSgpOwotICAgIG5hdmlnYXRpb25B
Y3Rpb25EYXRhLmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlID0gbmF2aWdhdGlvbkFjdGlvbi5wcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS51c2VyR2VzdHVy
ZVRva2VuSWRlbnRpZmllciA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXJHZXN0dXJlVG9r
ZW5JZGVudGlmaWVyKG5hdmlnYXRpb25BY3Rpb24udXNlckdlc3R1cmVUb2tlbigpKTsKICAgICBu
YXZpZ2F0aW9uQWN0aW9uRGF0YS5jYW5IYW5kbGVSZXF1ZXN0ID0gd2ViUGFnZS0+Y2FuSGFuZGxl
UmVxdWVzdChyZXF1ZXN0KTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5zaG91bGRPcGVuRXh0
ZXJuYWxVUkxzUG9saWN5ID0gbmF2aWdhdGlvbkFjdGlvbi5zaG91bGRPcGVuRXh0ZXJuYWxVUkxz
UG9saWN5KCk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuZG93bmxvYWRBdHRyaWJ1dGUgPSBu
YXZpZ2F0aW9uQWN0aW9uLmRvd25sb2FkQXR0cmlidXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyLm1tCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0
Nyw3MyArMzQ3LDczIEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2V0V2lyZWwK
IAogdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJ
ZCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nl
c3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wbGF5KCk7
CiB9CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGF1c2UodWludDY0X3QgY29u
dGV4dElkKQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0
b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBh
dXNlKCk7CiB9CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6dG9nZ2xlUGxheVN0
YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRp
Y2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS50b2dnbGVQbGF5U3RhdGUoKTsKIH0KIAogdm9pZCBXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAg
VXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdl
c3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNl
ckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY3J1YmJpbmcoKTsK
IH0KIAogdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY3J1YmJpbmcodWludDY0
X3QgY29udGV4dElkKQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZp
bml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBp
bmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0
SWQpLmVuZFNjcnViYmluZygpOwogfQogCiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6
OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKIHsKLSAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWVrVG9UaW1lKHRpbWUpOwogfQog
CiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmZhc3RTZWVrKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIHRpbWUpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9y
KERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNv
bnRleHRJZCkuZmFzdFNlZWsodGltZSk7CiB9CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKQogewotICAgIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdGb3J3YXJk
KCk7CiB9CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVnaW5TY2FubmluZ0Jh
Y2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBp
bmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJl
TW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nQmFja3dhcmQoKTsKIH0KIAogdm9pZCBXZWJQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyOjplbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCiB7
Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5n
VXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNz
aW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZW5kU2Nhbm5pbmco
KTsKIH0KIAogdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWxlY3RBdWRpb01lZGlh
T3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCiB7Ci0gICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUp
OworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1
cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0QXVkaW9NZWRpYU9wdGlvbihp
bmRleCk7CiB9CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0TGVnaWJs
ZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCiB7Ci0gICAg
VXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdl
c3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNl
ckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0TGVnaWJsZU1lZGlh
T3B0aW9uKGluZGV4KTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzMzMz
KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTYtMDctMTYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBbV2ViS2l0IEFQSV0gQWRkIFNQSSB0byB0cmFjayBtdWx0aXBsZSBuYXZpZ2F0aW9ucyBj
YXVzZWQgYnkgYSBzaW5nbGUgdXNlciBnZXN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpldmFsdWF0ZSk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcu
bW06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzZW5kRXZlbnQ6aXNEcmF3UmVj
dDpdKTpcCisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IHNpZ25hdHVyZSBvZiBVc2VyR2VzdHVyZUlu
ZGljYXRvci4KKwogMjAxNi0wNy0xNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBSZW5hbWUgZmFzdEdldEF0dHJpYnV0ZSB0byBhdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBl
UGx1Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luVmlldy5tbQkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAg
LTY2NCw3ICs2NjQsNyBAQCAtIChCT09MKXNlbmRFdmVudDoodm9pZCopZXZlbnQgaXNEcmF3UmVj
CiAgICAgQVNTRVJUKF9ldmVudEhhbmRsZXIpOwogICAgIHsKICAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
LSAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihfZXZlbnRIYW5k
bGVyLT5jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgICAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKF9ldmVudEhhbmRsZXItPmN1cnJlbnRF
dmVudElzVXNlckdlc3R1cmUoKSA/IE9wdGlvbmFsPFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRl
PihQcm9jZXNzaW5nVXNlckdlc3R1cmUpIDogTnVsbG9wdCk7CiAgICAgICAgIGFjY2VwdGVkRXZl
bnQgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5ldmVudChwbHVnaW4sIGV2
ZW50KTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQko
d29ya2luZyBjb3B5KQpAQCAtODg5LDcgKzg4OSw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpldmFsdWEKICAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVj
dChwbHVnaW5Xb3JsZCgpLnZtKCksIGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2lu
V29ybGQoKSkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwogCi0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihhbGxvd1Bv
cHVwcyA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3Np
bmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRv
cihhbGxvd1BvcHVwcyA/IE9wdGlvbmFsPFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlPihQcm9j
ZXNzaW5nVXNlckdlc3R1cmUpIDogTnVsbG9wdCk7CiAgICAgCiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBKU0M6OmV2YWx1YXRlKGV4ZWMsIG1ha2VTb3VyY2Uoc2NyaXB0KSk7CiAgICAgCkluZGV4OiBU
b29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MDMzMzMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBA
QAorMjAxNi0wNy0xNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFtX
ZWJLaXQgQVBJXSBBZGQgU1BJIHRvIHRyYWNrIG11bHRpcGxlIG5hdmlnYXRpb25zIGNhdXNlZCBi
eSBhIHNpbmdsZSB1c2VyIGdlc3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1OTg1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9s
bGVyLm06CisgICAgICAgICgtW1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyIHdlYlZpZXc6Y3Jl
YXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uOmZvck5hdmlnYXRpb25BY3Rpb246d2luZG93RmVh
dHVyZXM6XSk6CisgICAgICAgIEFkZCBiYXNpYyB3aW5kb3cub3BlbiBpbXBsZW1lbnRhdGlvbi4K
KworICAgICAgICAoLVtXSzJCcm93c2VyV2luZG93Q29udHJvbGxlciB3ZWJWaWV3OmRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb246ZGVjaXNpb25IYW5kbGVyOl0pOgorICAgICAgICBBZGQg
YmFzaWMgbmF2aWdhdGlvbiBwb2xpY3kgaW1wbGVtZW50YXRpb24gd2hpY2ggaW1wbGVtZW50cyBh
IHJ1bGUgd2hlcmUgYSB1c2VyIGdlc3R1cmUgaXMgb25seSBhbGxvd2VkCisgICAgICAgIHRvIG9w
ZW4gYSBzaW5nbGUgbm9uLXdlYiBVUkwsIGFsbCBvdGhlcnMgYXJlIGRyb3BwZWQuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9Vc2VySW5pdGlh
dGVkQWN0aW9uSW5OYXZpZ2F0aW9uQWN0aW9uLm1tOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9vcGVuLW11bHRpcGxlLWV4dGVybmFsLXVybC5odG1s
OiBBZGRlZC4KKyAgICAgICAgQWRkIEFQSSBmb3IgdGhlIG5ldyBTUEkuCisKIDIwMTYtMDctMTcg
IFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10g
RW5hYmxlIHRlc3QyNjIgbW9kdWxlIHRlc3RzCkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9tYWMv
V0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJv
d3Nlci9tYWMvV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQkocmV2aXNpb24gMjAzMzMzKQor
KysgVG9vbHMvTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0JKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIkFwcERlbGVnYXRlLmgiCiAj
aW1wb3J0ICJTZXR0aW5nc0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgPFdlYktpdC9XS0ZyYW1lSW5m
by5oPgorI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvbkFjdGlvblByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS05hdmlnYXRpb25EZWxlZ2F0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJl
ZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlLmg+CkBAIC0z
Nyw2ICszOCw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJOU1VSTEV4dHJhcy5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJJbml0aWF0ZWRBY3Rpb24u
aD4KIAogc3RhdGljIHZvaWQqIGtleVZhbHVlT2JzZXJ2aW5nQ29udGV4dCA9ICZrZXlWYWx1ZU9i
c2VydmluZ0NvbnRleHQ7CiAKQEAgLTM4OCw3ICszOTAsNyBAQCAtICh2b2lkKXVwZGF0ZVRpdGxl
OihOU1N0cmluZyAqKXRpdGxlCiAgICAgaWYgKCF0aXRsZSkKICAgICAgICAgdGl0bGUgPSBfd2Vi
Vmlldy5VUkwubGFzdFBhdGhDb21wb25lbnQ7CiAgICAgCi0gICAgc2VsZi53aW5kb3cudGl0bGUg
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAJUAgW1dLMiAlZF0iLCBfaXNQcml2YXRl
QnJvd3NpbmdXaW5kb3cgPyBAIvCfmYggIiA6IEAiIiwgdGl0bGUsIF93ZWJWaWV3Ll93ZWJQcm9j
ZXNzSWRlbnRpZmllcl07CisgICAgc2VsZi53aW5kb3cudGl0bGUgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIiVAJUAgW1dLMiAlZF0iLCBfaXNQcml2YXRlQnJvd3NpbmdXaW5kb3cgPyBA
Iu+ZiCAiIDogQCIiLCB0aXRsZSwgX3dlYlZpZXcuX3dlYlByb2Nlc3NJZGVudGlmaWVyXTsKIH0K
IAogLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGggb2ZP
YmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5nZSBjb250ZXh0Oih2
b2lkICopY29udGV4dApAQCAtNDAyLDYgKzQwNCwxNSBAQCAtICh2b2lkKW9ic2VydmVWYWx1ZUZv
cktleVBhdGg6KE5TU3RyaW5nCiAgICAgICAgIFtzZWxmIHVwZGF0ZVRleHRGaWVsZEZyb21VUkw6
X3dlYlZpZXcuVVJMXTsKIH0KIAorLSAobnVsbGFibGUgV0tXZWJWaWV3ICopd2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBjcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRpb246KFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uIGZvck5hdmlnYXRpb25BY3Rpb246KFdLTmF2
aWdhdGlvbkFjdGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gd2luZG93RmVhdHVyZXM6KFdLV2luZG93
RmVhdHVyZXMgKil3aW5kb3dGZWF0dXJlcworeworICAgIFdLMkJyb3dzZXJXaW5kb3dDb250cm9s
bGVyICpjb250cm9sbGVyID0gW1tXSzJCcm93c2VyV2luZG93Q29udHJvbGxlciBhbGxvY10gaW5p
dFdpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dOworICAgIFtjb250cm9sbGVyIGF3YWtl
RnJvbU5pYl07CisgICAgW2NvbnRyb2xsZXIud2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250OnNl
bGZdOworCisgICAgcmV0dXJuIGNvbnRyb2xsZXItPl93ZWJWaWV3OworfQorCiAtICh2b2lkKXdl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVz
c2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICop
ZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVy
CiB7CiAgICAgTlNBbGVydCogYWxlcnQgPSBbW05TQWxlcnQgYWxsb2NdIGluaXRdOwpAQCAtNTM1
LDYgKzU0NiwyMyBAQCAtIChJQkFjdGlvbilwcmludFdlYlZpZXc6KGlkKXNlbmRlcgogCiAjcHJh
Z21hIG1hcmsgV0tOYXZpZ2F0aW9uRGVsZWdhdGUKIAorLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZp
ZXcgKil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246KFdLTmF2aWdhdGlv
bkFjdGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gZGVjaXNpb25IYW5kbGVyOih2b2lkICheKShXS05h
dmlnYXRpb25BY3Rpb25Qb2xpY3kpKWRlY2lzaW9uSGFuZGxlcgoreworICAgIExPRyhAImRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24iKTsKKworICAgIGlmIChuYXZpZ2F0aW9uQWN0aW9u
Ll9jYW5IYW5kbGVSZXF1ZXN0KSB7CisgICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRp
b25BY3Rpb25Qb2xpY3lBbGxvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bmF2aWdhdGlvbkFjdGlvbi5fdXNlckluaXRpYXRlZEFjdGlvbiAmJiAhbmF2aWdhdGlvbkFjdGlv
bi5fdXNlckluaXRpYXRlZEFjdGlvbi5pc0NvbnN1bWVkKSB7CisgICAgICAgIFtuYXZpZ2F0aW9u
QWN0aW9uLl91c2VySW5pdGlhdGVkQWN0aW9uIGNvbnN1bWVdOworICAgICAgICBbW05TV29ya3Nw
YWNlIHNoYXJlZFdvcmtzcGFjZV0gb3BlblVSTDpuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QuVVJM
XTsKKyAgICB9CisKKyAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5
Q2FuY2VsKTsKK30KKwogLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZTooV0tOYXZpZ2F0aW9uUmVzcG9uc2UgKiluYXZp
Z2F0aW9uUmVzcG9uc2UgZGVjaXNpb25IYW5kbGVyOih2b2lkICheKShXS05hdmlnYXRpb25SZXNw
b25zZVBvbGljeSkpZGVjaXNpb25IYW5kbGVyCiB7CiAgICAgTE9HKEAiZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvblJlc3BvbnNlIik7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjAzMzMzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw2ICsyMDEsOCBAQAogCQk3
QzlFRDk4QjE3QTE5RjRCMDBFNERDMzMgLyogYXR0cmlidXRlZFN0cmluZ1N0cmlrZXRocm91Z2gu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzlFRDk4QTE3QTE5RDA2MDBFNERDMzMgLyogYXR0cmlidXRlZFN0cmluZ1N0cmlrZXRocm91
Z2guaHRtbCAqLzsgfTsKIAkJN0NCMTg0QzYxQUEzRjIxMDAwNjZFREZEIC8qIENvbnRlbnRFeHRl
bnNpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDQjE4NEM0MUFBM0YyMTAwMDY2RURGRCAvKiBDb250ZW50RXh0ZW5zaW9ucy5jcHAgKi87IH07
CiAJCTdDQ0I0REE5MUM4M0FFNzMwMENDNjkxOCAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NDQjREQTcxQzgzQUU3MzAwQ0M2
OTE4IC8qIFBhZ2VHcm91cC5jcHAgKi87IH07CisJCTdDQ0I5OTIxMUQzQjQxRjYwMDM5MjJGNiAv
KiBVc2VySW5pdGlhdGVkQWN0aW9uSW5OYXZpZ2F0aW9uQWN0aW9uLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NDQjk5MjAxRDNCNDFGNjAwMzkyMkY2
IC8qIFVzZXJJbml0aWF0ZWRBY3Rpb25Jbk5hdmlnYXRpb25BY3Rpb24ubW0gKi87IH07CisJCTdD
Q0I5OTIzMUQzQjRBNDYwMDM5MjJGNiAvKiBvcGVuLW11bHRpcGxlLWV4dGVybmFsLXVybC5odG1s
IGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
Q0I5OTIyMUQzQjQ0RTcwMDM5MjJGNiAvKiBvcGVuLW11bHRpcGxlLWV4dGVybmFsLXVybC5odG1s
ICovOyB9OwogCQk3Q0NFN0VBNDFBNDExOUYzMDA0NDdDNEMgLyogSW5zdGFuY2VNZXRob2RTd2l6
emxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMw
ODU4N0ZGMTNGRUMzQTYwMDFFRjRFNSAvKiBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLm1tICovOyB9
OwogCQk3Q0NFN0VBNTFBNDExQTA4MDA0NDdDNEMgLyogSmF2YVNjcmlwdFRlc3RNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMDgxMjI0MDEzRkMx
NzI0MDBEQzM5QUUgLyogSmF2YVNjcmlwdFRlc3RNYWMubW0gKi87IH07CiAJCTdDQ0U3RUE2MUE0
MTFBMEYwMDQ0N0M0QyAvKiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTMxODg0MTE3MTE0QjYwMEI2OTcyNyAv
KiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSAqLzsgfTsKQEAgLTQ4Niw2ICs0ODgsNyBAQAogCQkJ
ZHN0UGF0aCA9IFRlc3RXZWJLaXRBUEkucmVzb3VyY2VzOwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9
IDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk3Q0NCOTkyMzFEM0I0QTQ2MDAzOTIyRjYgLyogb3Blbi1t
dWx0aXBsZS1leHRlcm5hbC11cmwuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk5MzJB
RTUzRDFEMzcxMDQ3MDA1REZGQUYgLyogZm9jdXMtaW5wdXRzLmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8sCiAJCQkJNDZDNTE5RTYxRDM1NjNGRDAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51bGxF
bnRyaWVzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNDZDNTE5RTcxRDM1NjNGRDAw
REFBNTFBIC8qIExvY2FsU3RvcmFnZU51bGxFbnRyaWVzLmxvY2Fsc3RvcmFnZSBpbiBDb3B5IFJl
c291cmNlcyAqLywKQEAgLTgyMiw2ICs4MjUsOCBAQAogCQk3Q0JCQTA3NjE5QkI4QTkxMDBCQkYw
MjUgLyogT1NPYmplY3RQdHIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gT1NPYmplY3RQdHIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0MzRTFG
QTE5N0UyMzQxMDBCRTYyNTIgLyogVXNlckNvbnRlbnRDb250cm9sbGVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVXNlckNvbnRlbnRDb250cm9sbGVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0NCNERBNzFDODNBRTczMDBDQzY5MTggLyog
UGFnZUdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VH
cm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDQ0I5OTIwMUQzQjQxRjYw
MDM5MjJGNiAvKiBVc2VySW5pdGlhdGVkQWN0aW9uSW5OYXZpZ2F0aW9uQWN0aW9uLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVXNlckluaXRpYXRlZEFjdGlvbklu
TmF2aWdhdGlvbkFjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NDQjk5
MjIxRDNCNDRFNzAwMzkyMkY2IC8qIG9wZW4tbXVsdGlwbGUtZXh0ZXJuYWwtdXJsLmh0bWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAib3Blbi1tdWx0aXBsZS1leHRlcm5hbC11cmwuaHRt
bCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQ0U3RThDMUE0MTE0NEUwMDQ0N0M0
QyAvKiBsaWJUZXN0V2ViS2l0QVBJLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxp
YlRlc3RXZWJLaXRBUEkuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJ
N0NDRTdFQTMxQTQxMTVDQjAwNDQ3QzRDIC8qIFRlc3RXZWJLaXRBUElMaWJyYXJ5LnhjY29uZmln
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54
Y2NvbmZpZzsgcGF0aCA9IFRlc3RXZWJLaXRBUElMaWJyYXJ5LnhjY29uZmlnOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3Q0VGQTk2NDFBQzBCOUUyMDBCOTEwRkQgLyogX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMjE4LDYgKzEyMjMsNyBAQAogCQkJCTdDODgyRTAzMUM4MEM2MjQwMDZC
RjczMSAvKiBVc2VyQ29udGVudFdvcmxkLm1tICovLAogCQkJCTdDODgyRTA0MUM4MEM2MjQwMDZC
RjczMSAvKiBVc2VyQ29udGVudFdvcmxkUGx1Z0luLm1tICovLAogCQkJCTdDODgyRTA1MUM4MEM2
MjQwMDZCRjczMSAvKiBVc2VyQ29udGVudFdvcmxkUHJvdG9jb2wuaCAqLywKKwkJCQk3Q0NCOTky
MDFEM0I0MUY2MDAzOTIyRjYgLyogVXNlckluaXRpYXRlZEFjdGlvbkluTmF2aWdhdGlvbkFjdGlv
bi5tbSAqLywKIAkJCQk5M0U5NDNGMTFDRDNFODdFMDBBQzA4QzIgLyogVmlkZW9Db250cm9sc01h
bmFnZXIubW0gKi8sCiAJCQkJMkQwMDA2NUQxQzFGNTg5NDAwODhFNkE3IC8qIFdLUERGVmlld1Jl
c2l6ZUNyYXNoLm1tICovLAogCQkJCTdDNDE3RjMxMUQxOUUxNDgwMEI4RUY1MyAvKiBXS1dlYlZp
ZXdEZWZhdWx0TmF2aWdhdGlvbkRlbGVnYXRlLm1tICovLApAQCAtMTI5OCwzMyArMTMwNCwzNCBA
QAogCQlBMTZGNjZCODFDNDBFOUUxMDBCRDREMjQgLyogUmVzb3VyY2VzICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk5MzU3NUM1NTFEMzAzNjZFMDAwRDYw
NEQgLyogZm9jdXMtaW5wdXRzLmh0bWwgKi8sCiAJCQkJOTNDRkE4NjYxQ0VCOURFMTAwMDU2NUE4
IC8qIGF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCAqLywKLQkJCQk5OTg0RkFDRDFDRkZCMDM4
MDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1sICovLAotCQkJCUNERTE5NUIyMUNGRTBBREUw
MDUzRDI1NiAvKiBGdWxsc2NyZWVuVG9wQ29udGVudEluc2V0Lmh0bWwgKi8sCiAJCQkJQTE2RjY2
QjkxQzQwRUEyMDAwQkQ0RDI0IC8qIENvbnRlbnRGaWx0ZXJpbmcuaHRtbCAqLywKIAkJCQk1NzE0
RUNCODFDQThCNTg4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbCAq
LywKIAkJCQk1NzE0RUNCQzFDQThDMjE4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2lu
YWxVUkwyLmh0bWwgKi8sCiAJCQkJNTcxNEVDQkExQ0E4QkZEMTAwMDUxQUM4IC8qIERvd25sb2Fk
UmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbCAqLywKLQkJCQk1MUE1ODc4MjFEMjcyRUI1MDA0
QkE5QUYgLyogSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC0xLmh0bWwgKi8sCisJCQkJOTk4
NEZBQ0QxQ0ZGQjAzODAwOEQxOThDIC8qIGVkaXRhYmxlLWJvZHkuaHRtbCAqLywKKwkJCQk5MzU3
NUM1NTFEMzAzNjZFMDAwRDYwNEQgLyogZm9jdXMtaW5wdXRzLmh0bWwgKi8sCisJCQkJQ0RFMTk1
QjIxQ0ZFMEFERTAwNTNEMjU2IC8qIEZ1bGxzY3JlZW5Ub3BDb250ZW50SW5zZXQuaHRtbCAqLywK
IAkJCQk1MTA0Nzc3NjFEMjk4RTU3MDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3ZlcnkuaHRtbCAq
LywKIAkJCQk1MTA0Nzc2RjFEMjk4RDg1MDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3Zlcnkuc3Fs
aXRlMyAqLywKIAkJCQk1MTA0Nzc3MDFEMjk4RDg1MDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3Zl
cnkuc3FsaXRlMy1zaG0gKi8sCiAJCQkJNTEwNDc3NzExRDI5OEQ4NTAwOTc0N0VCIC8qIElEQkRl
bGV0ZVJlY292ZXJ5LnNxbGl0ZTMtd2FsICovLAorCQkJCTUxQTU4NzgyMUQyNzJFQjUwMDRCQTlB
RiAvKiBJbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLTEuaHRtbCAqLywKIAkJCQk1MUJDRUU0
QzFDODRGNTJDMDA0MkM4MkUgLyogSW5kZXhlZERCTXVsdGlQcm9jZXNzLTEuaHRtbCAqLywKIAkJ
CQk1MUJDRUU0RDFDODRGNTJDMDA0MkM4MkUgLyogSW5kZXhlZERCTXVsdGlQcm9jZXNzLTIuaHRt
bCAqLywKIAkJCQk1MUE1ODc3QzFEMUIzRDhEMDA0QkE5QUYgLyogSW5kZXhlZERCTXVsdGlQcm9j
ZXNzLTMuaHRtbCAqLywKIAkJCQk1MUIxRUU5NDFDODBGQUREMDA2NEZCOTggLyogSW5kZXhlZERC
UGVyc2lzdGVuY2UtMS5odG1sICovLAogCQkJCTUxQjFFRTk1MUM4MEZBREQwMDY0RkI5OCAvKiBJ
bmRleGVkREJQZXJzaXN0ZW5jZS0yLmh0bWwgKi8sCisJCQkJOTM2RjcyN0UxQ0Q3RDlEMDAwNjhB
MEZCIC8qIGxhcmdlLXZpZGVvLXdpdGgtYXVkaW8uaHRtbCAqLywKKwkJCQk5MzZGNzI3RjFDRDdE
OUQwMDA2OEEwRkIgLyogbGFyZ2UtdmlkZW8td2l0aC1hdWRpby5tcDQgKi8sCisJCQkJOTM2MjVE
MjYxQ0Q5NzNBRjAwNkRDMUYxIC8qIGxhcmdlLXZpZGVvLXdpdGhvdXQtYXVkaW8uaHRtbCAqLywK
IAkJCQk1MUU2QTg5NTFEMkYxQzc3MDBDMDA0QjYgLyogTG9jYWxTdG9yYWdlQ2xlYXIuaHRtbCAq
LywKIAkJCQk0NkM1MTlFMjFEMzU2Mjk2MDBEQUE1MUEgLyogTG9jYWxTdG9yYWdlTnVsbEVudHJp
ZXMuaHRtbCAqLywKIAkJCQk0NkM1MTlFMzFEMzU2Mjk2MDBEQUE1MUEgLyogTG9jYWxTdG9yYWdl
TnVsbEVudHJpZXMubG9jYWxzdG9yYWdlICovLAogCQkJCTQ2QzUxOUU0MUQzNTYyOTYwMERBQTUx
QSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50cmllcy5sb2NhbHN0b3JhZ2Utc2htICovLAorCQkJCTdD
Q0I5OTIyMUQzQjQ0RTcwMDM5MjJGNiAvKiBvcGVuLW11bHRpcGxlLWV4dGVybmFsLXVybC5odG1s
ICovLAogCQkJCTUxNzE0RUIyMUNGOEM3NjEwMDQ3MjNDNCAvKiBXZWJQcm9jZXNzS2lsbElEQkNs
ZWFudXAtMS5odG1sICovLAogCQkJCTUxNzE0RUIzMUNGOEM3NjEwMDQ3MjNDNCAvKiBXZWJQcm9j
ZXNzS2lsbElEQkNsZWFudXAtMi5odG1sICovLAotCQkJCTkzNkY3MjdFMUNEN0Q5RDAwMDY4QTBG
QiAvKiBsYXJnZS12aWRlby13aXRoLWF1ZGlvLmh0bWwgKi8sCi0JCQkJOTM2RjcyN0YxQ0Q3RDlE
MDAwNjhBMEZCIC8qIGxhcmdlLXZpZGVvLXdpdGgtYXVkaW8ubXA0ICovLAotCQkJCTkzNjI1RDI2
MUNEOTczQUYwMDZEQzFGMSAvKiBsYXJnZS12aWRlby13aXRob3V0LWF1ZGlvLmh0bWwgKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IFJlc291cmNlczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC0xOTcxLDEwICsxOTc4LDEwIEBACiAJCQlwcm9qZWN0Um9vdCA9ICIiOwogCQkJdGFyZ2V0cyA9
ICgKIAkJCQk3QzgzRTAyQjFEMEE1RTEwMDBGRUJDRjMgLyogQWxsICovLAotCQkJCThERDc2Rjk2
MDQ4NkFBNzYwMEQ5NkI1RSAvKiBUZXN0V2ViS2l0QVBJICovLAogCQkJCTdDQ0U3RThCMUE0MTE0
NEUwMDQ0N0M0QyAvKiBUZXN0V2ViS2l0QVBJTGlicmFyeSAqLywKLQkJCQk3QzgzREY5NTFEMEE1
QUU0MDBGRUJDRjMgLyogVGVzdFdURiAqLywKIAkJCQk3QzgzREU5NTFEMEE1OTBDMDBGRUJDRjMg
LyogVGVzdFdURkxpYnJhcnkgKi8sCisJCQkJOERENzZGOTYwNDg2QUE3NjAwRDk2QjVFIC8qIFRl
c3RXZWJLaXRBUEkgKi8sCisJCQkJN0M4M0RGOTUxRDBBNUFFNDAwRkVCQ0YzIC8qIFRlc3RXVEYg
Ki8sCiAJCQkJQkM1NzU5N0YxMjZFNzRBRjAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlVGVzdFdl
YktpdEFQSSAqLywKIAkJCQlBMTNFQkI0ODFCODczMzlFMDAwOTcxMTAgLyogV2ViUHJvY2Vzc1Bs
dWdJbiAqLywKIAkJCSk7CkBAIC0yMjMyLDYgKzIyMzksNyBAQAogCQkJCTdDQ0U3RjJEMUE0MTFC
MTAwMDQ0N0M0QyAvKiBVc2VyQ29udGVudFRlc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NF
N0YxNzFBNDExQUU2MDA0NDdDNEMgLyogVXNlck1lZGlhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdDODNFMEM0MUQwQTY1NDIwMEZFQkNGMyAvKiBSZXF1aXJlc1VzZXJBY3Rpb25Gb3JQbGF5YmFj
ay5tbSBpbiBTb3VyY2VzICovLAorCQkJCTdDQ0I5OTIxMUQzQjQxRjYwMDM5MjJGNiAvKiBVc2Vy
SW5pdGlhdGVkQWN0aW9uSW5OYXZpZ2F0aW9uQWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0NDRTdGMTgxQTQxMUFFNjAwNDQ3QzRDIC8qIFVzZXJNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMTM5RTc3MUE0MjNBNUIwMEY1OTBGNSAvKiBXZWFrT2JqQ1B0ci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDQ0U3RjE5MUE0MTFBRTYwMDQ0N0M0QyAvKiBXZWJBcmNoaXZlLmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29j
b2EvVXNlckluaXRpYXRlZEFjdGlvbkluTmF2aWdhdGlvbkFjdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9Vc2VySW5pdGlhdGVkQWN0
aW9uSW5OYXZpZ2F0aW9uQWN0aW9uLm1tCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1VzZXJJbml0aWF0ZWRBY3Rpb25Jbk5hdmlnYXRpb25B
Y3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIlBsYXRm
b3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXN0LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tOYXZp
Z2F0aW9uQWN0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9fV0tVc2VySW5pdGlhdGVkQWN0aW9uLmg+CisjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAorCitzdGF0aWMgYm9vbCBmaW5p
c2hlZE5hdmlnYXRpb247CisKK0BpbnRlcmZhY2UgVXNlckluaXRpYXRlZEFjdGlvbkluTmF2aWdh
dGlvbkFjdGlvbkRlbGVnYXRlIDogTlNPYmplY3QgPFdLTmF2aWdhdGlvbkRlbGVnYXRlPgorQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHksIG51bGxhYmxlKSB2b2lkIChecG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbikoV0tOYXZpZ2F0aW9uQWN0aW9uICosIHZvaWQgKF4pKFdLTmF2aWdhdGlvbkFj
dGlvblBvbGljeSkpOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVXNlckluaXRpYXRlZEFjdGlv
bkluTmF2aWdhdGlvbkFjdGlvbkRlbGVnYXRlCisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3
ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOihXS05hdmlnYXRpb25B
Y3Rpb24gKiluYXZpZ2F0aW9uQWN0aW9uIGRlY2lzaW9uSGFuZGxlcjoodm9pZCAoXikoV0tOYXZp
Z2F0aW9uQWN0aW9uUG9saWN5KSlkZWNpc2lvbkhhbmRsZXIKK3sKKyAgICBpZiAoX3BvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24pIHsKKyAgICAgICAgX3BvbGljeUZvck5hdmlnYXRpb25BY3Rpb24o
bmF2aWdhdGlvbkFjdGlvbiwgZGVjaXNpb25IYW5kbGVyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7
Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRGaW5pc2hOYXZp
Z2F0aW9uOihXS05hdmlnYXRpb24gKiluYXZpZ2F0aW9uCit7CisgICAgZmluaXNoZWROYXZpZ2F0
aW9uID0gdHJ1ZTsKK30KKworQGVuZAorCitjbGFzcyBVc2VySW5pdGlhdGVkQWN0aW9uVGVzdCA6
IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3
PiB3ZWJWaWV3OworICAgIFJldGFpblB0cjxOU1dpbmRvdz4gd2luZG93OworICAgIFJldGFpblB0
cjxVc2VySW5pdGlhdGVkQWN0aW9uSW5OYXZpZ2F0aW9uQWN0aW9uRGVsZWdhdGU+IGRlbGVnYXRl
OworICAgIFJldGFpblB0cjxOU1VSTD4gVVJMOworCisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkK
KyAgICB7CisgICAgICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisKKyAgICAgICAgd2luZG93
ID0gYWRvcHROUyhbW05TV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Olt3ZWJWaWV3
IGZyYW1lXSBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5TQmFja2lu
Z1N0b3JlQnVmZmVyZWQgZGVmZXI6WUVTXSk7CisgICAgICAgIFtbd2luZG93IGNvbnRlbnRWaWV3
XSBhZGRTdWJ2aWV3OndlYlZpZXcuZ2V0KCldOworCisgICAgICAgIGRlbGVnYXRlID0gYWRvcHRO
UyhbW1VzZXJJbml0aWF0ZWRBY3Rpb25Jbk5hdmlnYXRpb25BY3Rpb25EZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pOworICAgICAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUu
Z2V0KCldOworCisgICAgICAgIFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVz
b3VyY2U6QCJvcGVuLW11bHRpcGxlLWV4dGVybmFsLXVybCIgd2l0aEV4dGVuc2lvbjpAImh0bWwi
IHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgfQorCisgICAg
TlNVUkwgKlVSTFdpdGhGcmFnbWVudChOU1N0cmluZyAqZnJhZ21lbnQpCisgICAgeworICAgICAg
ICBOU1VSTENvbXBvbmVudHMgKlVSTENvbXBvbmVudHMgPSBbW05TVVJMQ29tcG9uZW50cyBhbGxv
Y10gaW5pdFdpdGhVUkw6VVJMLmdldCgpIHJlc29sdmluZ0FnYWluc3RCYXNlVVJMOk5PXTsKKyAg
ICAgICAgVVJMQ29tcG9uZW50cy5mcmFnbWVudCA9IGZyYWdtZW50OworICAgICAgICByZXR1cm4g
VVJMQ29tcG9uZW50cy5VUkw7CisgICAgfQorCisgICAgdm9pZCBsb2FkVGVzdChOU1N0cmluZyAq
dGVzdCkKKyAgICB7CisgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3Qg
cmVxdWVzdFdpdGhVUkw6VVJMV2l0aEZyYWdtZW50KHRlc3QpXV07CisgICAgICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWROYXZpZ2F0aW9uKTsKKyAgICAgICAgZmluaXNoZWRO
YXZpZ2F0aW9uID0gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBjbGljaygpCisgICAgeworICAg
ICAgICBOU1BvaW50IGNsaWNrUG9pbnQgPSBOU01ha2VQb2ludCgxMDAsIDEwMCk7CisKKyAgICAg
ICAgW1t3ZWJWaWV3IGhpdFRlc3Q6Y2xpY2tQb2ludF0gbW91c2VEb3duOltOU0V2ZW50IG1vdXNl
RXZlbnRXaXRoVHlwZTpOU0xlZnRNb3VzZURvd24gbG9jYXRpb246Y2xpY2tQb2ludCBtb2RpZmll
ckZsYWdzOjAgdGltZXN0YW1wOjAgd2luZG93TnVtYmVyOlt3aW5kb3cgd2luZG93TnVtYmVyXSBj
b250ZXh0Om5pbCBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MSBwcmVzc3VyZToxXV07CisgICAg
ICAgIFtbd2ViVmlldyBoaXRUZXN0OmNsaWNrUG9pbnRdIG1vdXNlVXA6W05TRXZlbnQgbW91c2VF
dmVudFdpdGhUeXBlOk5TTGVmdE1vdXNlVXAgbG9jYXRpb246Y2xpY2tQb2ludCBtb2RpZmllckZs
YWdzOjAgdGltZXN0YW1wOjAgd2luZG93TnVtYmVyOlt3aW5kb3cgd2luZG93TnVtYmVyXSBjb250
ZXh0Om5pbCBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MSBwcmVzc3VyZToxXV07CisgICAgfQor
fTsKKworVEVTVF9GKFVzZXJJbml0aWF0ZWRBY3Rpb25UZXN0LCBNYWlsdG9Jbk5vcm1hbExvb3Ap
Cit7CisgICAgbG9hZFRlc3QoQCJub3JtYWxMb29wIik7CisKKyAgICBfX2Jsb2NrIHVuc2lnbmVk
IGNvdW50ID0gMDsKKyAgICBfX2Jsb2NrIGJvb2wgZmluaXNoZWRQb2xpY3kgPSBmYWxzZTsKKyAg
ICBkZWxlZ2F0ZS5nZXQoKS5wb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uID0gXihXS05hdmlnYXRp
b25BY3Rpb24gKm5hdmlnYXRpb25BY3Rpb24sIHZvaWQgKF5kZWNpc2lvbkhhbmRsZXIpKFdLTmF2
aWdhdGlvbkFjdGlvblBvbGljeSkpIHsKKyAgICAgICAgaWYgKFtuYXZpZ2F0aW9uQWN0aW9uLnJl
cXVlc3QuVVJMLnNjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJhYm91dCJdKSB7CisgICAgICAgICAg
ICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfV0tfU1RS
RVEoQCJtYWlsdG8iLCBuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QuVVJMLnNjaGVtZSk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRShuYXZpZ2F0aW9uQWN0aW9uLl9jYW5IYW5kbGVSZXF1ZXN0KTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJV
RShuYXZpZ2F0aW9uQWN0aW9uLl9pc1VzZXJJbml0aWF0ZWQpOworICAgICAgICAgICAgRVhQRUNU
X05PVF9OVUxMKG5hdmlnYXRpb25BY3Rpb24uX3VzZXJJbml0aWF0ZWRBY3Rpb24pOworICAgICAg
ICAgICAgRVhQRUNUX0ZBTFNFKG5hdmlnYXRpb25BY3Rpb24uX3VzZXJJbml0aWF0ZWRBY3Rpb24u
Y29uc3VtZWQpOworICAgICAgICAKKyAgICAgICAgICAgIFtuYXZpZ2F0aW9uQWN0aW9uLl91c2Vy
SW5pdGlhdGVkQWN0aW9uIGNvbnN1bWVdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
RVhQRUNUX1RSVUUobmF2aWdhdGlvbkFjdGlvbi5faXNVc2VySW5pdGlhdGVkKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9OT1RfTlVMTChuYXZpZ2F0aW9uQWN0aW9uLl91c2VySW5pdGlhdGVkQWN0aW9u
KTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKG5hdmlnYXRpb25BY3Rpb24uX3VzZXJJbml0aWF0
ZWRBY3Rpb24uY29uc3VtZWQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCsrY291bnQgPT0g
MykKKyAgICAgICAgICAgIGZpbmlzaGVkUG9saWN5ID0gdHJ1ZTsKKyAgICAKKyAgICAgICAgZGVj
aXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUNhbmNlbCk7CisgICAgfTsKKwor
ICAgIGNsaWNrKCk7CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkUG9s
aWN5KTsKK30KKworVEVTVF9GKFVzZXJJbml0aWF0ZWRBY3Rpb25UZXN0LCBNYWlsdG9Jbkxvb3BB
ZnRlclRpbWVyKQoreworICAgIGxvYWRUZXN0KEAibG9vcEFmdGVyVGltZXIiKTsKKworICAgIF9f
YmxvY2sgdW5zaWduZWQgY291bnQgPSAwOworICAgIF9fYmxvY2sgYm9vbCBmaW5pc2hlZFBvbGlj
eSA9IGZhbHNlOworICAgIGRlbGVnYXRlLmdldCgpLnBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24g
PSBeKFdLTmF2aWdhdGlvbkFjdGlvbiAqbmF2aWdhdGlvbkFjdGlvbiwgdm9pZCAoXmRlY2lzaW9u
SGFuZGxlcikoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5KSkgeworICAgICAgICBpZiAoW25hdmln
YXRpb25BY3Rpb24ucmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1YWxUb1N0cmluZzpAImFib3V0Il0p
IHsKKyAgICAgICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lB
bGxvdyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBFWFBFQ1Rf
V0tfU1RSRVEoQCJtYWlsdG8iLCBuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QuVVJMLnNjaGVtZSk7
CisgICAgICAgIEVYUEVDVF9GQUxTRShuYXZpZ2F0aW9uQWN0aW9uLl9jYW5IYW5kbGVSZXF1ZXN0
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgICAgICAgICBFWFBF
Q1RfVFJVRShuYXZpZ2F0aW9uQWN0aW9uLl9pc1VzZXJJbml0aWF0ZWQpOworICAgICAgICAgICAg
RVhQRUNUX05PVF9OVUxMKG5hdmlnYXRpb25BY3Rpb24uX3VzZXJJbml0aWF0ZWRBY3Rpb24pOwor
ICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKG5hdmlnYXRpb25BY3Rpb24uX3VzZXJJbml0aWF0ZWRB
Y3Rpb24uY29uc3VtZWQpOworICAgICAgICAKKyAgICAgICAgICAgIFtuYXZpZ2F0aW9uQWN0aW9u
Ll91c2VySW5pdGlhdGVkQWN0aW9uIGNvbnN1bWVdOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgRVhQRUNUX1RSVUUobmF2aWdhdGlvbkFjdGlvbi5faXNVc2VySW5pdGlhdGVkKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChuYXZpZ2F0aW9uQWN0aW9uLl91c2VySW5pdGlhdGVk
QWN0aW9uKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKG5hdmlnYXRpb25BY3Rpb24uX3VzZXJJ
bml0aWF0ZWRBY3Rpb24uY29uc3VtZWQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCsrY291
bnQgPT0gMykKKyAgICAgICAgICAgIGZpbmlzaGVkUG9saWN5ID0gdHJ1ZTsKKyAgICAKKyAgICAg
ICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUNhbmNlbCk7CisgICAg
fTsKKworICAgIGNsaWNrKCk7CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlz
aGVkUG9saWN5KTsKK30KKworVEVTVF9GKFVzZXJJbml0aWF0ZWRBY3Rpb25UZXN0LCBNYWlsdG9J
bkxvb3BBZnRlclBvc3RNZXNzYWdlKQoreworICAgIGxvYWRUZXN0KEAibG9vcEFmdGVyUG9zdE1l
c3NhZ2UiKTsKKworICAgIF9fYmxvY2sgdW5zaWduZWQgY291bnQgPSAwOworICAgIF9fYmxvY2sg
Ym9vbCBmaW5pc2hlZFBvbGljeSA9IGZhbHNlOworICAgIGRlbGVnYXRlLmdldCgpLnBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24gPSBeKFdLTmF2aWdhdGlvbkFjdGlvbiAqbmF2aWdhdGlvbkFjdGlv
biwgdm9pZCAoXmRlY2lzaW9uSGFuZGxlcikoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5KSkgewor
ICAgICAgICBpZiAoW25hdmlnYXRpb25BY3Rpb24ucmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1YWxU
b1N0cmluZzpAImFib3V0Il0pIHsKKyAgICAgICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmln
YXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJtYWlsdG8iLCBuYXZpZ2F0aW9uQWN0aW9uLnJl
cXVlc3QuVVJMLnNjaGVtZSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShuYXZpZ2F0aW9uQWN0aW9u
Ll9jYW5IYW5kbGVSZXF1ZXN0KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb3VudCA9PSAwKSB7
CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShuYXZpZ2F0aW9uQWN0aW9uLl9pc1VzZXJJbml0aWF0
ZWQpOworICAgICAgICAgICAgRVhQRUNUX05PVF9OVUxMKG5hdmlnYXRpb25BY3Rpb24uX3VzZXJJ
bml0aWF0ZWRBY3Rpb24pOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKG5hdmlnYXRpb25BY3Rp
b24uX3VzZXJJbml0aWF0ZWRBY3Rpb24uY29uc3VtZWQpOworICAgICAgICAKKyAgICAgICAgICAg
IFtuYXZpZ2F0aW9uQWN0aW9uLl91c2VySW5pdGlhdGVkQWN0aW9uIGNvbnN1bWVdOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUobmF2aWdhdGlvbkFjdGlvbi5faXNV
c2VySW5pdGlhdGVkKTsKKyAgICAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChuYXZpZ2F0aW9uQWN0
aW9uLl91c2VySW5pdGlhdGVkQWN0aW9uKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKG5hdmln
YXRpb25BY3Rpb24uX3VzZXJJbml0aWF0ZWRBY3Rpb24uY29uc3VtZWQpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCsrY291bnQgPT0gMykKKyAgICAgICAgICAgIGZpbmlzaGVkUG9saWN5ID0g
dHJ1ZTsKKyAgICAKKyAgICAgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBv
bGljeUNhbmNlbCk7CisgICAgfTsKKworICAgIGNsaWNrKCk7CisKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmZpbmlzaGVkUG9saWN5KTsKK30KKworVEVTVF9GKFVzZXJJbml0aWF0ZWRB
Y3Rpb25UZXN0LCBNYWlsdG9Jbkxvb3BBZnRlckxvbmdUaW1lcikKK3sKKyAgICBsb2FkVGVzdChA
Imxvb3BBZnRlckxvbmdUaW1lciIpOworCisgICAgX19ibG9jayB1bnNpZ25lZCBjb3VudCA9IDA7
CisgICAgX19ibG9jayBib29sIGZpbmlzaGVkUG9saWN5ID0gZmFsc2U7CisgICAgZGVsZWdhdGUu
Z2V0KCkucG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiA9IF4oV0tOYXZpZ2F0aW9uQWN0aW9uICpu
YXZpZ2F0aW9uQWN0aW9uLCB2b2lkICheZGVjaXNpb25IYW5kbGVyKShXS05hdmlnYXRpb25BY3Rp
b25Qb2xpY3kpKSB7CisgICAgICAgIGlmIChbbmF2aWdhdGlvbkFjdGlvbi5yZXF1ZXN0LlVSTC5z
Y2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiYWJvdXQiXSkgeworICAgICAgICAgICAgZGVjaXNpb25I
YW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAIm1haWx0byIsIG5hdmln
YXRpb25BY3Rpb24ucmVxdWVzdC5VUkwuc2NoZW1lKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKG5h
dmlnYXRpb25BY3Rpb24uX2NhbkhhbmRsZVJlcXVlc3QpOworICAgICAgICAKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKG5hdmlnYXRpb25BY3Rpb24uX2lzVXNlckluaXRpYXRlZCk7CisgICAgICAgIEVY
UEVDVF9OVUxMKG5hdmlnYXRpb25BY3Rpb24uX3VzZXJJbml0aWF0ZWRBY3Rpb24pOworCisgICAg
ICAgIGlmICgrK2NvdW50ID09IDMpCisgICAgICAgICAgICBmaW5pc2hlZFBvbGljeSA9IHRydWU7
CisgICAgCisgICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lD
YW5jZWwpOworICAgIH07CisKKyAgICBjbGljaygpOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZmaW5pc2hlZFBvbGljeSk7Cit9CisKKyNlbmRpZgorCisjZW5kaWYKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL29wZW4tbXVsdGlwbGUtZXh0ZXJu
YWwtdXJsLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyQ29jb2Evb3Blbi1tdWx0aXBsZS1leHRlcm5hbC11cmwuaHRtbAkobm9uZXhpc3RlbnQpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9vcGVuLW11bHRpcGxlLWV4
dGVybmFsLXVybC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKzxzdHlsZT4K
KyAgICBpZnJhbWUgeyB3aWR0aDogMDsgaGVpZ2h0OiAwOyB2aXNpYmlsaXR5OiBoaWRkZW47IH0K
Kzwvc3R5bGU+CisKKzxib2R5PgorCis8c2NyaXB0Pgord2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgZnVuY3Rpb24oKSB7CisgICAgbGV0IGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFz
aDsKKyAgICBzd2l0Y2ggKGhhc2gpIHsKKyAgICBjYXNlICIjbm9ybWFsTG9vcCI6CisgICAgICAg
IG5vcm1hbExvb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAiI2xvb3BBZnRlclRpbWVy
IjoKKyAgICAgICAgbG9vcEFmdGVyVGltZXIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAi
I2xvb3BBZnRlclBvc3RNZXNzYWdlIjoKKyAgICAgICAgbG9vcEFmdGVyUG9zdE1lc3NhZ2UoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAiI2xvb3BBZnRlckxvbmdUaW1lciI6CisgICAgICAg
IGxvb3BBZnRlckxvbmdUaW1lcigpOworICAgICAgICBicmVhazsKKyAgICB9Cit9LCBmYWxzZSk7
CisKK2Z1bmN0aW9uIG5vcm1hbExvb3AoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyAr
K2kpIHsKKyAgICAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFt
ZScpOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgICAgICAg
IGlmcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uID0gIm1haWx0bzpzb21lb25lQGV4YW1wbGUu
Y29tP1N1YmplY3Q9SGVsbG8lMjBhZ2FpbiI7CisgICAgfQorfQorCitmdW5jdGlvbiBsb29wQWZ0
ZXJUaW1lcigpIHsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChpZnJhbWUpOworICAgICAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRp
b24gPSAibWFpbHRvOnNvbWVvbmVAZXhhbXBsZS5jb20/U3ViamVjdD1IZWxsbyUyMGFnYWluIjsK
KyAgICAgICAgfQorICAgIH0sIDUwMCk7Cit9CisKK2Z1bmN0aW9uIGxvb3BBZnRlclBvc3RNZXNz
YWdlKCkgeworICAgIHdpbmRvdy5vbm1lc3NhZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBpZnJhbWUgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgICAgICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93Lmxv
Y2F0aW9uID0gIm1haWx0bzpzb21lb25lQGV4YW1wbGUuY29tP1N1YmplY3Q9SGVsbG8lMjBhZ2Fp
biI7CisgICAgICAgIH0KKyAgICB9CisgICAgd2luZG93LnBvc3RNZXNzYWdlKCJmb28iLCAiKiIp
OworfQorCitmdW5jdGlvbiBsb29wQWZ0ZXJMb25nVGltZXIoKSB7CisgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAg
ICAgICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAg
ICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgICAgICAgICAg
IGlmcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uID0gIm1haWx0bzpzb21lb25lQGV4YW1wbGUu
Y29tP1N1YmplY3Q9SGVsbG8lMjBhZ2FpbiI7CisgICAgICAgIH0KKyAgICB9LCAyMDAwKTsKK30K
KworPC9zY3JpcHQ+Cis8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283871</attachid>
            <date>2016-07-17 13:18:18 -0700</date>
            <delta_ts>2016-07-17 13:56:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159856-20160717131726.patch</filename>
            <type>text/plain</type>
            <size>119031</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDE2LTA3LTE2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYktpdCBBUEldIEFkZCBTUEkgdG8g
dHJhY2sgbXVsdGlwbGUgbmF2aWdhdGlvbnMgY2F1c2VkIGJ5IGEgc2luZ2xlIHVzZXIgZ2VzdHVy
ZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjY1NTQxMzc+CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4NTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZHMgYSBuZXcgUmVmQ291bnRlZCBvYmpl
Y3QgdG8gcmVwcmVzZW50IGEgdW5pcXVlIHVzZXIgZ2VzdHVyZSwgY2FsbGVkIFVzZXJHZXN0dXJl
VG9rZW4uCisgICAgICAgIC0gTWFrZXMgVXNlckdlc3R1cmVJbmRpY2F0b3IgdHJhY2sgVXNlckdl
c3R1cmVUb2tlbi4KKyAgICAgICAgLSBSZWZpbmVzIFVzZXJHZXN0dXJlSW5kaWNhdG9yJ3MgaW50
ZXJmYWNlIHRvIHVzZSBPcHRpb25hbCBhbmQgYSBzbWFsbGVyIGVudW0gc2V0CisgICAgICAgICAg
dG8gcmVwcmVzZW50IHRoZSBkaWZmZXJlbnQgaW5pdGlhbCBzdGF0ZXMuCisgICAgICAgIC0gU3Rv
cmVzIFVzZXJHZXN0dXJlVG9rZW5zIG9uIG9iamVjdHMgdGhhdCB3YW50IHRvIGZvcndhcmQgdXNl
ciBnZXN0dXJlIHN0YXRlIChET01UaW1lciwgCisgICAgICAgICAgcG9zdE1lc3NhZ2UsIGFuZCBT
Y2hlZHVsZWROYXZpZ2F0aW9uKSByYXRoZXIgdGhhbiBqdXN0IGEgYm9vbGVhbi4KKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmluY3JlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGVjcmVtZW50KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJlc3MpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhl
Y3V0ZVNjcmlwdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGludGVyZmFjZS4KKworICAgICAgICAqIGRvbS9Vc2VyR2VzdHVyZUluZGljYXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6VXNl
ckdlc3R1cmVUb2tlbjo6flVzZXJHZXN0dXJlVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6VXNl
ckdlc3R1cmVJbmRpY2F0b3I6OlVzZXJHZXN0dXJlSW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlVzZXJHZXN0dXJlSW5kaWNhdG9yOjp+VXNlckdlc3R1cmVJbmRpY2F0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6VXNlckdlc3R1cmVJbmRpY2F0b3I6OmN1cnJlbnRVc2VyR2VzdHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5n
VXNlckdlc3R1cmVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjppc0RlZmluaXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkb20vVXNlckdlc3R1cmVJbmRpY2F0b3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJHZXN0dXJlVG9rZW46OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
R2VzdHVyZVRva2VuOjpzdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyR2VzdHVyZVRva2Vu
Ojpwcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckdlc3R1cmVU
b2tlbjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6
VXNlckdlc3R1cmVUb2tlbjo6YWRkRGVzdHJ1Y3Rpb25PYnNlcnZlcik6CisgICAgICAgIChXZWJD
b3JlOjpVc2VyR2VzdHVyZVRva2VuOjpVc2VyR2VzdHVyZVRva2VuKToKKyAgICAgICAgQWRkIFVz
ZXJHZXN0dXJlVG9rZW4gYW5kIHRyYWNrIHRoZSBjdXJyZW50IG9uZSBleHBsaWNpdGx5LgorCisg
ICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OmRpZFJlY2VpdmVSZW1vdGVDb250cm9sQ29tbWFuZCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6b3BlbkluTmV3VGFiKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclBhZ2VBZ2VudDo6bmF2aWdhdGUpOgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBVc2VyR2Vz
dHVyZUluZGljYXRvciBpbnRlcmZhY2UuCisKKyAgICAgICAgKiBsb2FkZXIvTmF2aWdhdGlvbkFj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uOjpOYXZpZ2F0aW9u
QWN0aW9uKToKKyAgICAgICAgKiBsb2FkZXIvTmF2aWdhdGlvbkFjdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbjo6dXNlckdlc3R1cmVUb2tlbik6CisgICAgICAgIChX
ZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUpOiBEZWxldGVk
LgorICAgICAgICAqIGxvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjaGVkdWxlZE5hdmlnYXRpb246OlNjaGVkdWxlZE5hdmlnYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U2NoZWR1bGVkTmF2aWdhdGlvbjo6flNjaGVkdWxlZE5hdmlnYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkTmF2aWdhdGlvbjo6bG9ja0JhY2tGb3J3YXJkTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWROYXZpZ2F0aW9uOjp3YXNEdXJpbmdMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZE5hdmlnYXRpb246OmlzTG9jYXRpb25DaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkTmF2aWdhdGlvbjo6dXNlckdlc3R1cmVU
b0ZvcndhcmQpOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkTmF2aWdhdGlvbjo6Y2xlYXJV
c2VyR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uU2NoZWR1bGVyOjptdXN0
TG9ja0JhY2tGb3J3YXJkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uU2NoZWR1
bGVyOjpzY2hlZHVsZUZvcm1TdWJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxl
ZE5hdmlnYXRpb246Ondhc1VzZXJHZXN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL0RP
TVRpbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEZvcndhcmRVc2VyR2VzdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjp1c2VyR2VzdHVyZVRva2VuVG9Gb3J3YXJkKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVRpbWVyOjpET01UaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1l
cjo6ZmlyZWQpOgorICAgICAgICAqIHBhZ2UvRE9NVGltZXIuaDoKKyAgICAgICAgKiBwYWdlL0RP
TVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3N0TWVzc2FnZVRpbWVyOjpQb3N0TWVz
c2FnZVRpbWVyKToKKyAgICAgICAgU3RvcmUgdGhlIGFjdGl2ZSBVc2VyR2VzdHVyZVRva2VuIHJh
dGhlciB0aGFuIGp1c3QgYSBiaXQuCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlRG91YmxlQ2xpY2tF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFz
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6a2V5RXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0
UmVzdWx0Ojp0b2dnbGVNZWRpYUZ1bGxzY3JlZW5TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0OjplbnRlckZ1bGxzY3JlZW5Gb3JWaWRlbyk6CisgICAgICAgIChXZWJDb3Jl
OjpIaXRUZXN0UmVzdWx0Ojp0b2dnbGVFbmhhbmNlZEZ1bGxzY3JlZW5Gb3JWaWRlbyk6CisgICAg
ICAgIFVwZGF0ZSBmb3IgbmV3IFVzZXJHZXN0dXJlSW5kaWNhdG9yIGludGVyZmFjZS4KKwogMjAx
Ni0wNy0xNyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBk
YXRlIERPTUNvcmVFeGNlcHRpb24gdG8gdXNlIHRoZSBkZXNjcmlwdGlvbiBpbiB0b1N0cmluZygp
LgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDcwLDEzICsxMDcwLDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmFsdGVyU2xpZGUKICAgICAKIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmluY3JlbWVu
dCgpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZpbml0
ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBkb2N1bWVudCgpKTsKKyAgICBVc2VyR2VzdHVyZUlu
ZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgZG9jdW1lbnQo
KSk7CiAgICAgYWx0ZXJTbGlkZXJWYWx1ZSh0cnVlKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6ZGVjcmVtZW50KCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0
dXJlSW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsIGRvY3VtZW50KCkp
OworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlLCBkb2N1bWVudCgpKTsKICAgICBhbHRlclNsaWRlclZhbHVlKGZhbHNlKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjAs
NyArOTIwLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmVzcygpCiAgICAgaWYgKGhp
dFRlc3RFbGVtZW50ICYmIGhpdFRlc3RFbGVtZW50LT5pc0Rlc2NlbmRhbnRPZihwcmVzc0VsZW1l
bnQpKQogICAgICAgICBwcmVzc0VsZW1lbnQgPSBoaXRUZXN0RWxlbWVudDsKICAgICAKLSAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5n
VXNlckdlc3R1cmUsIGRvY3VtZW50KTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJl
SW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgZG9jdW1lbnQpOwogICAgIAogICAgIGJv
b2wgZGlzcGF0Y2hlZFRvdWNoRXZlbnQgPSBkaXNwYXRjaFRvdWNoRXZlbnQoKTsKICAgICBpZiAo
IWRpc3BhdGNoZWRUb3VjaEV2ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OTcsNyArNDk3LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVj
dAogCiBKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVTY3JpcHRJbldvcmxkKERPTVdy
YXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IFN0cmluZyYgc2NyaXB0LCBib29sIGZvcmNlVXNlckdl
c3R1cmUpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihmb3Jj
ZVVzZXJHZXN0dXJlID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJl
SW5kaWNhdG9yKGZvcmNlVXNlckdlc3R1cmUgPyBPcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1
cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQpOwogICAgIFNjcmlwdFNv
dXJjZUNvZGUgc291cmNlQ29kZShzY3JpcHQsIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXJsKCkpOwog
CiAgICAgaWYgKCFjYW5FeGVjdXRlU2NyaXB0cyhBYm91dFRvRXhlY3V0ZVNjcmlwdCkgfHwgaXNQ
YXVzZWQoKSkKQEAgLTUyMyw3ICs1MjMsNyBAQCBib29sIFNjcmlwdENvbnRyb2xsZXI6OmNhbkV4
ZWN1dGVTY3JpcHRzCiAKIEpTVmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0ZVNjcmlwdChj
b25zdCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJlLCBFeGNlcHRpb25EZXRh
aWxzKiBleGNlcHRpb25EZXRhaWxzKQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1
cmVJbmRpY2F0b3IoZm9yY2VVc2VyR2VzdHVyZSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdl
c3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihmb3JjZVVzZXJHZXN0dXJlID8gT3B0aW9uYWw8UHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGU+KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSkgOiBOdWxsb3B0
KTsKICAgICByZXR1cm4gZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdCwgbV9m
cmFtZS5kb2N1bWVudCgpLT51cmwoKSksIGV4Y2VwdGlvbkRldGFpbHMpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2VzdHVyZUluZGljYXRvci5jcHAJKHJldmlzaW9uIDIw
MzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2VzdHVyZUluZGljYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDQyICsyOCw2OCBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIGlzRGVmaW5pdGUoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGUgc3RhdGUpCitzdGF0aWMgUmVmUHRyPFVzZXJHZXN0dXJl
VG9rZW4+JiBjdXJyZW50VG9rZW4oKQogewotICAgIHJldHVybiBzdGF0ZSA9PSBEZWZpbml0ZWx5
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIHx8IHN0YXRlID09IERlZmluaXRlbHlOb3RQcm9jZXNzaW5n
VXNlckdlc3R1cmUgfHwgc3RhdGUgPT0gRGVmaW5pdGVseVByb2Nlc3NpbmdQb3RlbnRpYWxVc2Vy
R2VzdHVyZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPFVzZXJHZXN0dXJlVG9r
ZW4+PiB0b2tlbjsKKyAgICByZXR1cm4gdG9rZW47CiB9CiAKLVByb2Nlc3NpbmdVc2VyR2VzdHVy
ZVN0YXRlIFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpzX3N0YXRlID0gRGVmaW5pdGVseU5vdFByb2Nl
c3NpbmdVc2VyR2VzdHVyZTsKK1VzZXJHZXN0dXJlVG9rZW46On5Vc2VyR2VzdHVyZVRva2VuKCkK
K3sKKyAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9kZXN0cnVjdGlvbk9ic2VydmVycykKKyAg
ICAgICAgb2JzZXJ2ZXIoKnRoaXMpOworfQogCi1Vc2VyR2VzdHVyZUluZGljYXRvcjo6VXNlckdl
c3R1cmVJbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGUgc3RhdGUsIERvY3VtZW50
KiBkb2N1bWVudCkKLSAgICA6IG1fcHJldmlvdXNTdGF0ZShzX3N0YXRlKQorVXNlckdlc3R1cmVJ
bmRpY2F0b3I6OlVzZXJHZXN0dXJlSW5kaWNhdG9yKE9wdGlvbmFsPFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZVN0YXRlPiBzdGF0ZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogbV9wcmV2aW91c1Rv
a2VuKGN1cnJlbnRUb2tlbigpKQogewogICAgIC8vIFNpbGVudGx5IGlnbm9yZSBVc2VyR2VzdHVy
ZUluZGljYXRvcnMgb24gbm9uIG1haW4gdGhyZWFkcy4KICAgICBpZiAoIWlzTWFpblRocmVhZCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgLy8gV2Ugb3ZlcndyaXRlIHNfc3RhdGUgb25seSBpZiB0
aGUgY2FsbGVyIGlzIGRlZmluaXRlIGFib3V0IHRoZSBnZXN0dXJlIHN0YXRlLgotICAgIGlmIChp
c0RlZmluaXRlKHN0YXRlKSkKLSAgICAgICAgc19zdGF0ZSA9IHN0YXRlOwotICAgIEFTU0VSVChp
c0RlZmluaXRlKHNfc3RhdGUpKTsKIAotICAgIGlmIChkb2N1bWVudCAmJiBzX3N0YXRlID09IERl
ZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpCisgICAgaWYgKHN0YXRlKQorICAgICAgICBj
dXJyZW50VG9rZW4oKSA9IFVzZXJHZXN0dXJlVG9rZW46OmNyZWF0ZShzdGF0ZS52YWx1ZSgpKTsK
KworICAgIGlmIChkb2N1bWVudCAmJiBjdXJyZW50VG9rZW4oKS0+cHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKCkpCiAgICAgICAgIGRvY3VtZW50LT50b3BEb2N1bWVudCgpLnVwZGF0ZUxhc3RIYW5kbGVk
VXNlckdlc3R1cmVUaW1lc3RhbXAoKTsKIH0KIAorVXNlckdlc3R1cmVJbmRpY2F0b3I6OlVzZXJH
ZXN0dXJlSW5kaWNhdG9yKFJlZlB0cjxVc2VyR2VzdHVyZVRva2VuPiB0b2tlbikKKyAgICA6IG1f
cHJldmlvdXNUb2tlbihjdXJyZW50VG9rZW4oKSkKK3sKKyAgICBpZiAoIWlzTWFpblRocmVhZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodG9rZW4pCisgICAgICAgIGN1cnJlbnRUb2tl
bigpID0gdG9rZW47Cit9CisKIFVzZXJHZXN0dXJlSW5kaWNhdG9yOjp+VXNlckdlc3R1cmVJbmRp
Y2F0b3IoKQogewogICAgIGlmICghaXNNYWluVGhyZWFkKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBzX3N0YXRlID0gbV9wcmV2aW91c1N0YXRlOwotICAgIEFTU0VSVChpc0RlZmluaXRlKHNfc3Rh
dGUpKTsKKyAgICAKKyAgICBjdXJyZW50VG9rZW4oKSA9IG1fcHJldmlvdXNUb2tlbjsKK30KKwor
UmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+IFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpjdXJyZW50VXNl
ckdlc3R1cmUoKQoreworICAgIGlmICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgcmV0dXJuIGN1cnJlbnRUb2tlbigpOwogfQogCiBib29sIFVzZXJHZXN0
dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKQogewotICAgIHJldHVybiBpc01h
aW5UaHJlYWQoKSA/IHNfc3RhdGUgPT0gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6
IGZhbHNlOworICAgIGlmICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBjdXJyZW50VG9rZW4oKSA/IGN1cnJlbnRUb2tlbigpLT5wcm9jZXNzaW5n
VXNlckdlc3R1cmUoKSA6IGZhbHNlOwogfQogCiBib29sIFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpw
cm9jZXNzaW5nVXNlckdlc3R1cmVGb3JNZWRpYSgpCkBAIC03MSw3ICs5Nyw3IEBAIGJvb2wgVXNl
ckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2UKICAgICBpZiAoIWlzTWFpblRocmVhZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc19zdGF0ZSA9PSBEZWZpbml0
ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIHx8IHNfc3RhdGUgPT0gRGVmaW5pdGVseVByb2Nlc3Np
bmdQb3RlbnRpYWxVc2VyR2VzdHVyZTsKKyAgICByZXR1cm4gY3VycmVudFRva2VuKCkgPyBjdXJy
ZW50VG9rZW4oKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSA6IGZhbHNlOwogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVXNlckdlc3R1cmVJbmRpY2F0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVXNlckdlc3R1cmVJbmRpY2F0b3IuaAkocmV2
aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1VzZXJHZXN0dXJlSW5kaWNhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDM3ICsyMyw2OCBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgVXNlckdlc3R1cmVJbmRpY2F0b3JfaAot
I2RlZmluZSBVc2VyR2VzdHVyZUluZGljYXRvcl9oCisjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
PHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBEb2N1bWVudDsKIAogZW51bSBQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0
ZSB7Ci0gICAgRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSwKLSAgICBEZWZpbml0ZWx5
UHJvY2Vzc2luZ1BvdGVudGlhbFVzZXJHZXN0dXJlLAotICAgIFBvc3NpYmx5UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlLAotICAgIERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmUKKyAgICBQ
cm9jZXNzaW5nVXNlckdlc3R1cmUsCisgICAgUHJvY2Vzc2luZ1BvdGVudGlhbFVzZXJHZXN0dXJl
LAorICAgIE5vdFByb2Nlc3NpbmdVc2VyR2VzdHVyZQorfTsKKworY2xhc3MgVXNlckdlc3R1cmVU
b2tlbiA6IHB1YmxpYyBSZWZDb3VudGVkPFVzZXJHZXN0dXJlVG9rZW4+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+IGNyZWF0ZShQcm9jZXNzaW5nVXNlckdl
c3R1cmVTdGF0ZSBzdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVXNl
ckdlc3R1cmVUb2tlbihzdGF0ZSkpOworICAgIH0KKworICAgIFdFQkNPUkVfRVhQT1JUIH5Vc2Vy
R2VzdHVyZVRva2VuKCk7CisKKyAgICBQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZSBzdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gUHJvY2Vzc2luZ1VzZXJHZXN0dXJlOyB9Cisg
ICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmVGb3JNZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUgPT0gUHJvY2Vzc2luZ1VzZXJHZXN0dXJlIHx8IG1fc3RhdGUgPT0gUHJvY2Vzc2luZ1Bv
dGVudGlhbFVzZXJHZXN0dXJlOyB9CisKKyAgICB2b2lkIGFkZERlc3RydWN0aW9uT2JzZXJ2ZXIo
RnVuY3Rpb248dm9pZCAoVXNlckdlc3R1cmVUb2tlbiYpPiYmIG9ic2VydmVyKQorICAgIHsKKyAg
ICAgICAgbV9kZXN0cnVjdGlvbk9ic2VydmVycy5hcHBlbmQoV1RGTW92ZShvYnNlcnZlcikpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBVc2VyR2VzdHVyZVRva2VuKFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZVN0YXRlIHN0YXRlKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAgeworICAgIH0K
KworICAgIFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlIG1fc3RhdGUgPSBOb3RQcm9jZXNzaW5n
VXNlckdlc3R1cmU7CisgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQgKFVzZXJHZXN0dXJlVG9rZW4m
KT4+IG1fZGVzdHJ1Y3Rpb25PYnNlcnZlcnM7CiB9OwogCiBjbGFzcyBVc2VyR2VzdHVyZUluZGlj
YXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXNlckdlc3R1cmVJbmRpY2F0b3IpOwog
cHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8VXNlckdlc3R1cmVUb2tl
bj4gY3VycmVudFVzZXJHZXN0dXJlKCk7CisKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9v
bCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLSAgICBzdGF0aWMgYm9vbCBwcm9jZXNzaW5nVXNl
ckdlc3R1cmVGb3JNZWRpYSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIHByb2Nl
c3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCk7CiAKICAgICAvLyBJZiBhIGRvY3VtZW50IGlzIHBy
b3ZpZGVkLCBpdHMgbGFzdCBrbm93biB1c2VyIGdlc3R1cmUgdGltZXN0YW1wIGlzIHVwZGF0ZWQu
Ci0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgVXNlckdlc3R1cmVJbmRpY2F0b3IoUHJvY2Vz
c2luZ1VzZXJHZXN0dXJlU3RhdGUsIERvY3VtZW50KiA9IG51bGxwdHIpOworICAgIFdFQkNPUkVf
RVhQT1JUIGV4cGxpY2l0IFVzZXJHZXN0dXJlSW5kaWNhdG9yKE9wdGlvbmFsPFByb2Nlc3NpbmdV
c2VyR2VzdHVyZVN0YXRlPiwgRG9jdW1lbnQqID0gbnVsbHB0cik7CisgICAgV0VCQ09SRV9FWFBP
UlQgZXhwbGljaXQgVXNlckdlc3R1cmVJbmRpY2F0b3IoUmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB+VXNlckdlc3R1cmVJbmRpY2F0b3IoKTsKIAogcHJpdmF0
ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGUg
c19zdGF0ZTsKLSAgICBQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZSBtX3ByZXZpb3VzU3RhdGU7
CisgICAgUmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+IG1fcHJldmlvdXNUb2tlbjsKIH07CiAKIH0K
LQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4MzEsNyArNjgzMSw3IEBAIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6ZGlkUmVjZWl2ZVJlbW90ZUMKIHsKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFF
bGVtZW50OjpkaWRSZWNlaXZlUmVtb3RlQ29udHJvbENvbW1hbmQoJXApIC0gJWkiLCB0aGlzLCBz
dGF0aWNfY2FzdDxpbnQ+KGNvbW1hbmQpKTsKIAotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIHJl
bW90ZUNvbnRyb2xVc2VyR2VzdHVyZShEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCAm
ZG9jdW1lbnQoKSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgcmVtb3RlQ29udHJvbFVzZXJH
ZXN0dXJlKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgJmRvY3VtZW50KCkpOwogICAgIHN3aXRjaCAo
Y29tbWFuZCkgewogICAgIGNhc2UgUGxhdGZvcm1NZWRpYVNlc3Npb246OlBsYXlDb21tYW5kOgog
ICAgICAgICBwbGF5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCShyZXZpc2lvbiAyMDMzMzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsNyBAQCB2b2lkIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIFVzZXJHZXN0dXJl
SW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
ICAgICBGcmFtZSYgbWFpbkZyYW1lID0gbV9pbnNwZWN0ZWRQYWdlQ29udHJvbGxlci0+aW5zcGVj
dGVkUGFnZSgpLm1haW5GcmFtZSgpOwogICAgIEZyYW1lTG9hZFJlcXVlc3QgcmVxdWVzdChtYWlu
RnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgUmVzb3VyY2VSZXF1ZXN0KCksICJf
YmxhbmsiLCBMb2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5vLCBNYXliZVNl
bmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpZZXMsIE5ld0ZyYW1lT3Bl
bmVyUG9saWN5OjpBbGxvdywgUmVwbGFjZURvY3VtZW50SWZKYXZhU2NyaXB0VVJMLCBTaG91bGRP
cGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdyk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCShyZXZp
c2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBj
b25zdCBTdHJpbmcmKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKG1fZnJvbnRlbmRIb3N0
KSB7Ci0gICAgICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKERl
ZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgICAgICAgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgICAg
ICAgICAgaW50IGl0ZW1OdW1iZXIgPSBhY3Rpb24gLSBDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9t
VGFnOwogCiAgICAgICAgICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24obV9mcm9udGVuZEFwaU9iamVjdCwgImNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwgV2ViQ29y
ZTo6ZnVuY3Rpb25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDIwMzMz
MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MjUsNyArNDI1LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OnJlbG9hZChFcnJvclN0cgogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6bmF2aWdhdGUoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgRnJh
bWUmIGZyYW1lID0gbV9wYWdlLm1haW5GcmFtZSgpOwogCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJl
c291cmNlUmVxdWVzdChmcmFtZS5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvbkFjdGlvbi5jcHAJKHJldmlzaW9uIDIw
MzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBOYXZpZ2F0aW9uQWN0aW9uOjpOYXZpZ2F0aW9u
QWN0aW9uKGNvbnN0CiAgICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QpCiAg
ICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fZXZlbnQoZXZlbnQpCi0gICAgLCBtX3Byb2Nlc3Np
bmdVc2VyR2VzdHVyZShTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkK
KyAgICAsIG1fdXNlckdlc3R1cmVUb2tlbihVc2VyR2VzdHVyZUluZGljYXRvcjo6Y3VycmVudFVz
ZXJHZXN0dXJlKCkpCiAgICAgLCBtX3Nob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3koc2hvdWxk
T3BlbkV4dGVybmFsVVJMc1BvbGljeSkKICAgICAsIG1fZG93bmxvYWRBdHRyaWJ1dGUoZG93bmxv
YWRBdHRyaWJ1dGUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvbkFj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uQWN0
aW9uLmgJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0
aW9uQWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJG
cmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXF1ZXN0LmgiCisjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Myw3ICs2NCw4IEBAIHB1
YmxpYzoKICAgICBOYXZpZ2F0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CiAgICAgY29uc3QgRXZlbnQqIGV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmVudC5nZXQoKTsg
fQogCi0gICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3By
b2Nlc3NpbmdVc2VyR2VzdHVyZTsgfQorICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VyR2VzdHVyZVRva2VuID8gbV91c2VyR2VzdHVyZVRva2VuLT5w
cm9jZXNzaW5nVXNlckdlc3R1cmUoKSA6IGZhbHNlOyB9CisgICAgUmVmUHRyPFVzZXJHZXN0dXJl
VG9rZW4+IHVzZXJHZXN0dXJlVG9rZW4oKSBjb25zdCB7IHJldHVybiBtX3VzZXJHZXN0dXJlVG9r
ZW47IH0KIAogICAgIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkT3BlbkV4dGVybmFsVVJMc1Bv
bGljeTsgfQogCkBAIC03Myw3ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgUmVzb3VyY2VSZXF1ZXN0
IG1fcmVzb3VyY2VSZXF1ZXN0OwogICAgIE5hdmlnYXRpb25UeXBlIG1fdHlwZSB7IE5hdmlnYXRp
b25UeXBlOjpPdGhlciB9OwogICAgIFJlZlB0cjxFdmVudD4gbV9ldmVudDsKLSAgICBib29sIG1f
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlOworICAgIFJlZlB0cjxVc2VyR2VzdHVyZVRva2VuPiBtX3Vz
ZXJHZXN0dXJlVG9rZW47CiAgICAgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBtX3Nob3Vs
ZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgeyBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpT
aG91bGROb3RBbGxvdyB9OwogICAgIEF0b21pY1N0cmluZyBtX2Rvd25sb2FkQXR0cmlidXRlOwog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5j
cHAJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9u
U2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICwgbV9sb2NrQmFja0ZvcndhcmRMaXN0KGxvY2tCYWNrRm9yd2FyZExpc3QpCiAgICAg
ICAgICwgbV93YXNEdXJpbmdMb2FkKHdhc0R1cmluZ0xvYWQpCiAgICAgICAgICwgbV9pc0xvY2F0
aW9uQ2hhbmdlKGlzTG9jYXRpb25DaGFuZ2UpCi0gICAgICAgICwgbV93YXNVc2VyR2VzdHVyZShT
Y3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAgICAgICAgLCBtX3Vz
ZXJHZXN0dXJlVG9Gb3J3YXJkKFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpjdXJyZW50VXNlckdlc3R1
cmUoKSkKICAgICB7CiAgICAgfQogICAgIHZpcnR1YWwgflNjaGVkdWxlZE5hdmlnYXRpb24oKSB7
IH0KQEAgLTgyLDEwICs4MiwxMCBAQCBwdWJsaWM6CiAgICAgTG9ja0JhY2tGb3J3YXJkTGlzdCBs
b2NrQmFja0ZvcndhcmRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9sb2NrQmFja0ZvcndhcmRMaXN0
OyB9CiAgICAgYm9vbCB3YXNEdXJpbmdMb2FkKCkgY29uc3QgeyByZXR1cm4gbV93YXNEdXJpbmdM
b2FkOyB9CiAgICAgYm9vbCBpc0xvY2F0aW9uQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0xv
Y2F0aW9uQ2hhbmdlOyB9Ci0gICAgYm9vbCB3YXNVc2VyR2VzdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fd2FzVXNlckdlc3R1cmU7IH0KKyAgICBSZWZQdHI8VXNlckdlc3R1cmVUb2tlbj4gdXNlckdl
c3R1cmVUb0ZvcndhcmQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJHZXN0dXJlVG9Gb3J3YXJkOyB9
CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGNsZWFyVXNlckdlc3R1cmUoKSB7IG1fd2FzVXNlckdl
c3R1cmUgPSBmYWxzZTsgfQorICAgIHZvaWQgY2xlYXJVc2VyR2VzdHVyZSgpIHsgbV91c2VyR2Vz
dHVyZVRvRm9yd2FyZCA9IG51bGxwdHI7IH0gLy8gRklYTUU6IE5lZWQgYW5vdGhlciB2YWx1ZQog
CiAgICAgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBtX3Nob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3kgeyBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdyB9
OwogCkBAIC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgTG9ja0JhY2tGb3J3YXJkTGlzdCBt
X2xvY2tCYWNrRm9yd2FyZExpc3Q7CiAgICAgYm9vbCBtX3dhc0R1cmluZ0xvYWQ7CiAgICAgYm9v
bCBtX2lzTG9jYXRpb25DaGFuZ2U7Ci0gICAgYm9vbCBtX3dhc1VzZXJHZXN0dXJlOworICAgIFJl
ZlB0cjxVc2VyR2VzdHVyZVRva2VuPiBtX3VzZXJHZXN0dXJlVG9Gb3J3YXJkOwogfTsKIAogY2xh
c3MgU2NoZWR1bGVkVVJMTmF2aWdhdGlvbiA6IHB1YmxpYyBTY2hlZHVsZWROYXZpZ2F0aW9uIHsK
QEAgLTExMyw3ICsxMTMsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGZpcmUoRnJhbWUmIGZy
YW1lKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVy
ZUluZGljYXRvcih3YXNVc2VyR2VzdHVyZSgpID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSA6IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgICAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHVzZXJHZXN0dXJlVG9Gb3J3YXJkKCkp
OwogCiAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXNvdXJjZVJlcXVlc3QobV91cmwsIG1fcmVm
ZXJyZXIsIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpOwogICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0
IGZyYW1lUmVxdWVzdChtX3NlY3VyaXR5T3JpZ2luLmdldCgpLCByZXNvdXJjZVJlcXVlc3QsICJf
c2VsZiIsIGxvY2tIaXN0b3J5KCksIGxvY2tCYWNrRm9yd2FyZExpc3QoKSwgTWF5YmVTZW5kUmVm
ZXJyZXIsIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTDo6WWVzLCBOZXdGcmFtZU9wZW5lclBv
bGljeTo6QWxsb3csIG1fc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSk7CkBAIC0xMjcsNyAr
MTI3LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2hhdmVU
b2xkQ2xpZW50ID0gdHJ1ZTsKIAotICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJl
SW5kaWNhdG9yKHdhc1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0
dXJlIDogRGVmaW5pdGVseU5vdFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgICAgIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IodXNlckdlc3R1cmVUb0ZvcndhcmQoKSk7
CiAgICAgICAgIGZyYW1lLmxvYWRlcigpLmNsaWVudFJlZGlyZWN0ZWQobV91cmwsIGRlbGF5KCks
IGN1cnJlbnRUaW1lKCkgKyB0aW1lci5uZXh0RmlyZUludGVydmFsKCksIGxvY2tCYWNrRm9yd2Fy
ZExpc3QoKSk7CiAgICAgfQogCkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBmaXJlKEZyYW1lJiBmcmFtZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIFVzZXJHZXN0dXJl
SW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Iod2FzVXNlckdlc3R1cmUoKSA/IERlZmluaXRlbHlQ
cm9jZXNzaW5nVXNlckdlc3R1cmUgOiBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKKyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih1c2VyR2Vz
dHVyZVRvRm9yd2FyZCgpKTsKICAgICAgICAgYm9vbCByZWZyZXNoID0gZXF1YWxJZ25vcmluZ0Zy
YWdtZW50SWRlbnRpZmllcihmcmFtZS5kb2N1bWVudCgpLT51cmwoKSwgdXJsKCkpOwogICAgICAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KHVybCgpLCByZWZlcnJlcigpLCByZWZy
ZXNoID8gUmVsb2FkSWdub3JpbmdDYWNoZURhdGEgOiBVc2VQcm90b2NvbENhY2hlUG9saWN5KTsK
ICAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3Qoc2VjdXJpdHlPcmlnaW4oKSwg
cmVzb3VyY2VSZXF1ZXN0LCAiX3NlbGYiLCBsb2NrSGlzdG9yeSgpLCBsb2NrQmFja0ZvcndhcmRM
aXN0KCksIE1heWJlU2VuZFJlZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6Ok5v
LCBOZXdGcmFtZU9wZW5lclBvbGljeTo6QWxsb3csIG1fc2hvdWxkT3BlbkV4dGVybmFsVVJMc1Bv
bGljeSk7CkBAIC0xODcsNyArMTg3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaXJlKEZyYW1l
JiBmcmFtZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdl
c3R1cmVJbmRpY2F0b3Iod2FzVXNlckdlc3R1cmUoKSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNl
ckdlc3R1cmUgOiBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICAgICAg
VXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih1c2VyR2VzdHVyZVRvRm9yd2Fy
ZCgpKTsKIAogICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KHVybCgpLCBy
ZWZlcnJlcigpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KTsKICAgICAgICAgRnJhbWVMb2FkUmVx
dWVzdCBmcmFtZVJlcXVlc3Qoc2VjdXJpdHlPcmlnaW4oKSwgcmVzb3VyY2VSZXF1ZXN0LCAiX3Nl
bGYiLCBsb2NrSGlzdG9yeSgpLCBsb2NrQmFja0ZvcndhcmRMaXN0KCksIE1heWJlU2VuZFJlZmVy
cmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6Ok5vLCBOZXdGcmFtZU9wZW5lclBvbGlj
eTo6QWxsb3csIG1fc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSk7CkBAIC0yMDQsNyArMjA0
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaXJlKEZyYW1lJiBmcmFtZSkgb3ZlcnJpZGUKICAg
ICB7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Iod2FzVXNl
ckdlc3R1cmUoKSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBEZWZpbml0ZWx5
Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
Z2VzdHVyZUluZGljYXRvcih1c2VyR2VzdHVyZVRvRm9yd2FyZCgpKTsKIAogICAgICAgICBSZXNv
dXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KHVybCgpLCByZWZlcnJlcigpLCBSZWxvYWRJZ25v
cmluZ0NhY2hlRGF0YSk7CiAgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVSZXF1ZXN0KHNl
Y3VyaXR5T3JpZ2luKCksIHJlc291cmNlUmVxdWVzdCwgIl9zZWxmIiwgbG9ja0hpc3RvcnkoKSwg
bG9ja0JhY2tGb3J3YXJkTGlzdCgpLCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9u
VG9JbnZhbGlkVVJMOjpZZXMsIE5ld0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxvdywgbV9zaG91bGRP
cGVuRXh0ZXJuYWxVUkxzUG9saWN5KTsKQEAgLTIyMiw3ICsyMjIsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGZpcmUoRnJhbWUmIGZyYW1lKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih3YXNVc2VyR2VzdHVyZSgpID8gRGVmaW5p
dGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdl
c3R1cmUpOworICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHVz
ZXJHZXN0dXJlVG9Gb3J3YXJkKCkpOwogCiAgICAgICAgIGlmICghbV9oaXN0b3J5U3RlcHMpIHsK
ICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZ28oMCkgZnJvbSBhIGZyYW1lIC0+IHJl
bG9hZCBvbmx5IHRoZSBmcmFtZQpAQCAtMjU1LDcgKzI1NSw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZmlyZShGcmFtZSYgZnJhbWUpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHdhc1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogRGVmaW5pdGVseU5vdFByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSk7CisgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IodXNlckdl
c3R1cmVUb0ZvcndhcmQoKSk7CiAKICAgICAgICAgLy8gVGhlIHN1Ym1pdEZvcm0gZnVuY3Rpb24g
d2lsbCBmaW5kIGEgdGFyZ2V0IGZyYW1lIGJlZm9yZSB1c2luZyB0aGUgcmVkaXJlY3Rpb24gdGlt
ZXIuCiAgICAgICAgIC8vIE5vdyB0aGF0IHRoZSB0aW1lciBoYXMgZmlyZWQsIHdlIG5lZWQgdG8g
cmVwZWF0IHRoZSBzZWN1cml0eSBjaGVjayB3aGljaCBub3JtYWxseSBpcyBkb25lIHdoZW4KQEAg
LTI3NSw3ICsyNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1f
aGF2ZVRvbGRDbGllbnQgPSB0cnVlOwogCi0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdl
c3R1cmVJbmRpY2F0b3Iod2FzVXNlckdlc3R1cmUoKSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNl
ckdlc3R1cmUgOiBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICAgICAg
VXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih1c2VyR2VzdHVyZVRvRm9yd2Fy
ZCgpKTsKICAgICAgICAgZnJhbWUubG9hZGVyKCkuY2xpZW50UmVkaXJlY3RlZChtX3N1Ym1pc3Np
b24tPnJlcXVlc3RVUkwoKSwgZGVsYXkoKSwgY3VycmVudFRpbWUoKSArIHRpbWVyLm5leHRGaXJl
SW50ZXJ2YWwoKSwgbG9ja0JhY2tGb3J3YXJkTGlzdCgpKTsKICAgICB9CiAKQEAgLTMwOCw3ICsz
MDgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpcmUoRnJhbWUmIGZyYW1lKSBvdmVycmlkZQog
ICAgIHsKLSAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcih3YXNV
c2VyR2VzdHVyZSgpID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IERlZmluaXRl
bHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBnZXN0dXJlSW5kaWNhdG9yKHVzZXJHZXN0dXJlVG9Gb3J3YXJkKCkpOwogCiAgICAgICAgIFJl
c291cmNlUmVzcG9uc2UgcmVwbGFjZW1lbnRSZXNwb25zZShtX29yaWdpbkRvY3VtZW50LnVybCgp
LCBBU0NJSUxpdGVyYWwoInRleHQvcGxhaW4iKSwgMCwgQVNDSUlMaXRlcmFsKCJVVEYtOCIpKTsK
ICAgICAgICAgU3Vic3RpdHV0ZURhdGEgcmVwbGFjZW1lbnREYXRhKFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKCksIG1fb3JpZ2luRG9jdW1lbnQudXJsKCksIHJlcGxhY2VtZW50UmVzcG9uc2UsIFN1YnN0
aXR1dGVEYXRhOjpTZXNzaW9uSGlzdG9yeVZpc2liaWxpdHk6OkhpZGRlbik7CkBAIC0zODUsNyAr
Mzg1LDcgQEAgTG9ja0JhY2tGb3J3YXJkTGlzdCBOYXZpZ2F0aW9uU2NoZWR1bGVyOgogewogICAg
IC8vIE5vbi11c2VyIG5hdmlnYXRpb24gYmVmb3JlIHRoZSBwYWdlIGhhcyBmaW5pc2hlZCBmaXJp
bmcgb25sb2FkIHNob3VsZCBub3QgY3JlYXRlIGEgbmV3IGJhY2svZm9yd2FyZCBpdGVtLgogICAg
IC8vIFNlZSBodHRwczovL3dlYmtpdC5vcmcvYi80Mjg2MSBmb3IgdGhlIG9yaWdpbmFsIG1vdGl2
YXRpb24gZm9yIHRoaXMuICAgIAotICAgIGlmICghU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCkgJiYgdGFyZ2V0RnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSAm
JiAhdGFyZ2V0RnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+d2FzT25sb2FkRGlzcGF0
Y2hlZCgpKQorICAgIGlmICghVXNlckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpICYmIHRhcmdldEZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkgJiYgIXRhcmdl
dEZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPndhc09ubG9hZERpc3BhdGNoZWQoKSkK
ICAgICAgICAgcmV0dXJuIExvY2tCYWNrRm9yd2FyZExpc3Q6OlllczsKICAgICAKICAgICAvLyBO
YXZpZ2F0aW9uIG9mIGEgc3ViZnJhbWUgZHVyaW5nIGxvYWRpbmcgb2YgYW4gYW5jZXN0b3IgZnJh
bWUgZG9lcyBub3QgY3JlYXRlIGEgbmV3IGJhY2svZm9yd2FyZCBpdGVtLgpAQCAtNDQ0LDcgKzQ0
NCw3IEBAIHZvaWQgTmF2aWdhdGlvblNjaGVkdWxlcjo6c2NoZWR1bGVGb3JtU3UKICAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzgzIGZvciB0aGUg
b3JpZ2luYWwgbW90aXZhdGlvbiBmb3IgdGhpcy4KICAgICBMb2NrQmFja0ZvcndhcmRMaXN0IGxv
Y2tCYWNrRm9yd2FyZExpc3QgPSBtdXN0TG9ja0JhY2tGb3J3YXJkTGlzdChtX2ZyYW1lKTsKICAg
ICBpZiAobG9ja0JhY2tGb3J3YXJkTGlzdCA9PSBMb2NrQmFja0ZvcndhcmRMaXN0OjpObwotICAg
ICAgICAmJiAoc3VibWlzc2lvbi0+c3RhdGUoKS0+Zm9ybVN1Ym1pc3Npb25UcmlnZ2VyKCkgPT0g
U3VibWl0dGVkQnlKYXZhU2NyaXB0ICYmIG1fZnJhbWUudHJlZSgpLnBhcmVudCgpICYmICFTY3Jp
cHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkpIHsKKyAgICAgICAgJiYgKHN1
Ym1pc3Npb24tPnN0YXRlKCktPmZvcm1TdWJtaXNzaW9uVHJpZ2dlcigpID09IFN1Ym1pdHRlZEJ5
SmF2YVNjcmlwdCAmJiBtX2ZyYW1lLnRyZWUoKS5wYXJlbnQoKSAmJiAhVXNlckdlc3R1cmVJbmRp
Y2F0b3I6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKSkgewogICAgICAgICBsb2NrQmFja0Zvcndh
cmRMaXN0ID0gTG9ja0JhY2tGb3J3YXJkTGlzdDo6WWVzOwogICAgIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NVGltZXIuY3BwCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVRpbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2lu
Y2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNh
dG9yLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTY4LDYgKzE2NywxNCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkRm9yd2FyZFVzZXJHZXN0CiAgICAgICAgICYmICFuZXN0
aW5nTGV2ZWw7IC8vIEdlc3R1cmVzIHNob3VsZCBub3QgYmUgZm9yd2FyZGVkIHRvIG5lc3RlZCB0
aW1lcnMuCiB9CiAKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPFVzZXJHZXN0dXJlVG9rZW4+IHVzZXJH
ZXN0dXJlVG9rZW5Ub0ZvcndhcmQoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBpbnRlcnZhbCwg
aW50IG5lc3RpbmdMZXZlbCkKK3sKKyAgICBpZiAoIXNob3VsZEZvcndhcmRVc2VyR2VzdHVyZShp
bnRlcnZhbCwgbmVzdGluZ0xldmVsKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gVXNlckdlc3R1cmVJbmRpY2F0b3I6OmN1cnJlbnRVc2VyR2VzdHVyZSgpOworfQorCiBE
T01UaW1lcjo6RE9NVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgc3RkOjp1
bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzIGludGVydmFsLCBib29sIHNpbmdsZVNob3QpCiAgICAgOiBTdXNwZW5kYWJsZVRpbWVyKGNv
bnRleHQpCiAgICAgLCBtX25lc3RpbmdMZXZlbChjb250ZXh0LnRpbWVyTmVzdGluZ0xldmVsKCkp
CkBAIC0xNzUsNyArMTgyLDcgQEAgRE9NVGltZXI6OkRPTVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleAogICAgICwgbV9vcmlnaW5hbEludGVydmFsKGludGVydmFsKQogICAgICwgbV90aHJvdHRs
ZVN0YXRlKFVuZGV0ZXJtaW5lZCkKICAgICAsIG1fY3VycmVudFRpbWVySW50ZXJ2YWwoaW50ZXJ2
YWxDbGFtcGVkVG9NaW5pbXVtKCkpCi0gICAgLCBtX3Nob3VsZEZvcndhcmRVc2VyR2VzdHVyZShz
aG91bGRGb3J3YXJkVXNlckdlc3R1cmUoaW50ZXJ2YWwsIG1fbmVzdGluZ0xldmVsKSkKKyAgICAs
IG1fdXNlckdlc3R1cmVUb2tlblRvRm9yd2FyZCh1c2VyR2VzdHVyZVRva2VuVG9Gb3J3YXJkKGlu
dGVydmFsLCBtX25lc3RpbmdMZXZlbCkpCiB7CiAgICAgUmVmUHRyPERPTVRpbWVyPiByZWZlcmVu
Y2UgPSBhZG9wdFJlZih0aGlzKTsKIApAQCAtMzAwLDkgKzMwNyw5IEBAIHZvaWQgRE9NVGltZXI6
OmZpcmVkKCkKIAogICAgIEFTU0VSVCghaXNTdXNwZW5kZWQoKSk7CiAgICAgQVNTRVJUKCFjb250
ZXh0LmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSk7Ci0gICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgZ2VzdHVyZUluZGljYXRvcihtX3Nob3VsZEZvcndhcmRVc2VyR2VzdHVyZSA/IERlZmlu
aXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihtX3VzZXJHZXN0
dXJlVG9rZW5Ub0ZvcndhcmQpOwogICAgIC8vIE9ubHkgdGhlIGZpcnN0IGV4ZWN1dGlvbiBvZiBh
IG11bHRpLXNob3QgdGltZXIgc2hvdWxkIGdldCBhbiBhZmZpcm1hdGl2ZSB1c2VyIGdlc3R1cmUg
aW5kaWNhdG9yLgotICAgIG1fc2hvdWxkRm9yd2FyZFVzZXJHZXN0dXJlID0gZmFsc2U7CisgICAg
bV91c2VyR2VzdHVyZVRva2VuVG9Gb3J3YXJkID0gbnVsbHB0cjsKIAogICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxGaXJlVGltZXIoJmNvbnRleHQsIG1fdGltZW91dElkKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9ET01UaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
VGltZXIuaAkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01UaW1l
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIERPTVRpbWVyX2gK
IAogI2luY2x1ZGUgIlN1c3BlbmRhYmxlVGltZXIuaCIKKyNpbmNsdWRlICJVc2VyR2VzdHVyZUlu
ZGljYXRvci5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogCkBAIC05MCw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyBtX29yaWdpbmFsSW50ZXJ2YWw7CiAgICAgVGltZXJUaHJvdHRsZVN0YXRlIG1fdGhyb3R0
bGVTdGF0ZTsKICAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1fY3VycmVudFRpbWVySW50
ZXJ2YWw7Ci0gICAgYm9vbCBtX3Nob3VsZEZvcndhcmRVc2VyR2VzdHVyZTsKKyAgICBSZWZQdHI8
VXNlckdlc3R1cmVUb2tlbj4gbV91c2VyR2VzdHVyZVRva2VuVG9Gb3J3YXJkOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2
aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgICAgICAsIG1fY2hhbm5l
bHMoV1RGTW92ZShjaGFubmVscykpCiAgICAgICAgICwgbV90YXJnZXRPcmlnaW4oV1RGTW92ZSh0
YXJnZXRPcmlnaW4pKQogICAgICAgICAsIG1fc3RhY2tUcmFjZShzdGFja1RyYWNlKQotICAgICAg
ICAsIG1fd2FzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAgICAgICAgLCBtX3VzZXJHZXN0dXJlVG9Gb3J3YXJkKFVz
ZXJHZXN0dXJlSW5kaWNhdG9yOjpjdXJyZW50VXNlckdlc3R1cmUoKSkKICAgICB7CiAgICAgfQog
CkBAIC0xNjgsNyArMTY4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gVGhpcyBvYmplY3QgZ2V0
cyBkZWxldGVkIHdoZW4gc3RkOjp1bmlxdWVfcHRyIGZhbGxzIG91dCBvZiBzY29wZS4uCiAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQb3N0TWVzc2FnZVRpbWVyPiB0aW1lcih0aGlzKTsKICAgICAg
ICAgCi0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIHVzZXJHZXN0dXJlSW5kaWNhdG9yKG1f
d2FzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSA6IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgICAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciB1c2VyR2VzdHVyZUluZGljYXRvcihtX3VzZXJHZXN0dXJlVG9Gb3J3YXJk
KTsKICAgICAgICAgbV93aW5kb3ctPnBvc3RNZXNzYWdlVGltZXJGaXJlZCgqdGltZXIpOwogICAg
IH0KIApAQCAtMTc5LDcgKzE3OSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1l
c3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBtX2NoYW5uZWxzOwogICAgIFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4gbV90YXJnZXRPcmlnaW47CiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gbV9zdGFj
a1RyYWNlOwotICAgIGJvb2wgbV93YXNQcm9jZXNzaW5nVXNlckdlc3R1cmU7CisgICAgUmVmUHRy
PFVzZXJHZXN0dXJlVG9rZW4+IG1fdXNlckdlc3R1cmVUb0ZvcndhcmQ7CiB9OwogCiB0eXBlZGVm
IEhhc2hDb3VudGVkU2V0PERPTVdpbmRvdyo+IERPTVdpbmRvd1NldDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxOCw3ICsxNjE4
LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUlu
ZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50
KCkpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50KCkpOwogCiAgICAgLy8gRklYTUUgKGJ1ZyA2
ODE4NSk6IHRoaXMgY2FsbCBzaG91bGQgYmUgbWFkZSBhdCBhbm90aGVyIGFic3RyYWN0aW9uIGxh
eWVyCiAgICAgbV9mcmFtZS5sb2FkZXIoKS5yZXNldE11bHRpcGxlRm9ybVN1Ym1pc3Npb25Qcm90
ZWN0aW9uKCk7CkBAIC0xNzQ2LDcgKzE3NDYsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
TW91c2VEb3VibGVDbGljCiAKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0Qmxpbmtp
bmdTdXNwZW5kZWQoZmFsc2UpOwogCi0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUlu
ZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50
KCkpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50KCkpOwogCiAgICAgLy8gV2UgZ2V0IHRoaXMg
aW5zdGVhZCBvZiBhIHNlY29uZCBtb3VzZS11cCAKICAgICBtX21vdXNlUHJlc3NlZCA9IGZhbHNl
OwpAQCAtMTk4Nyw3ICsxOTg3LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVs
ZWFzZUV2ZQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJl
LCBtX2ZyYW1lLmRvY3VtZW50KCkpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJ
bmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50KCkpOwogCiAj
aWYgRU5BQkxFKFBBTl9TQ1JPTExJTkcpCiAgICAgbV9hdXRvc2Nyb2xsQ29udHJvbGxlci0+aGFu
ZGxlTW91c2VSZWxlYXNlRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50KTsKQEAgLTMwNDcsNyArMzA0
Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChjb25zdCBQbGF0Zm8KICAgICBpZiAo
IWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGdlc3R1cmVJbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgbV9m
cmFtZS5kb2N1bWVudCgpKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNh
dG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgbV9mcmFtZS5kb2N1bWVudCgpKTsKICAgICBVc2Vy
VHlwaW5nR2VzdHVyZUluZGljYXRvciB0eXBpbmdHZXN0dXJlSW5kaWNhdG9yKG1fZnJhbWUpOwog
CiAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUudmlldygpKQpAQCAtMzgwMCw3ICsz
ODAwLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29ucwogCiAgICAg
Y29uc3QgVmVjdG9yPFBsYXRmb3JtVG91Y2hQb2ludD4mIHBvaW50cyA9IGV2ZW50LnRvdWNoUG9p
bnRzKCk7CiAKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKERlZmlu
aXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsIG1fZnJhbWUuZG9jdW1lbnQoKSk7CisgICAgVXNl
ckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUs
IG1fZnJhbWUuZG9jdW1lbnQoKSk7CiAKICAgICBib29sIGZyZXNoVG91Y2hFdmVudHMgPSB0cnVl
OwogICAgIGJvb2wgYWxsVG91Y2hSZWxlYXNlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3MCw3ICs0NzAsNyBAQCB2b2lkIEhpdFRlc3RSZXN1bHQ6OnRvZ2dsZU1lZGlhRnVsbHNjcmVl
CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSB0aGlzLT5tZWRpYUVsZW1lbnQoKSkgewogICAgICAgICBpZiAobWVkaWFFbGVtZW50LT5p
c1ZpZGVvKCkgJiYgbWVkaWFFbGVtZW50LT5zdXBwb3J0c0Z1bGxzY3JlZW4oSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7Ci0gICAgICAgICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSwgJm1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCAmbWVkaWFFbGVtZW50
LT5kb2N1bWVudCgpKTsKICAgICAgICAgICAgIG1lZGlhRWxlbWVudC0+dG9nZ2xlU3RhbmRhcmRG
dWxsc2NyZWVuU3RhdGUoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ4NCw3ICs0ODQsNyBAQCB2
b2lkIEhpdFRlc3RSZXN1bHQ6OmVudGVyRnVsbHNjcmVlbkZvclZpCiAgICAgaWYgKGlzPEhUTUxW
aWRlb0VsZW1lbnQ+KG1lZGlhRWxlbWVudCkpIHsKICAgICAgICAgSFRNTFZpZGVvRWxlbWVudCYg
dmlkZW9FbGVtZW50ID0gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oKm1lZGlhRWxlbWVudCk7
CiAgICAgICAgIGlmICghdmlkZW9FbGVtZW50LmlzRnVsbHNjcmVlbigpICYmIG1lZGlhRWxlbWVu
dC0+c3VwcG9ydHNGdWxsc2NyZWVuKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZVN0YW5kYXJkKSkgewotICAgICAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUsICZtZWRpYUVsZW1lbnQtPmRv
Y3VtZW50KCkpOworICAgICAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSwgJm1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSk7CiAgICAgICAg
ICAgICB2aWRlb0VsZW1lbnQuZW50ZXJGdWxsc2NyZWVuKCk7CiAgICAgICAgIH0KICAgICB9CkBA
IC04MTQsNyArODE0LDcgQEAgdm9pZCBIaXRUZXN0UmVzdWx0Ojp0b2dnbGVFbmhhbmNlZEZ1bGxz
YwogICAgICAgICByZXR1cm47CiAKICAgICBIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQg
PSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PigqbWVkaWFFbGVtZW50KTsKLSAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSwg
Jm1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgJm1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSk7
CiAgICAgaWYgKHZpZGVvRWxlbWVudC5mdWxsc2NyZWVuTW9kZSgpID09IEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpCiAgICAgICAgIHZp
ZGVvRWxlbWVudC5leGl0RnVsbHNjcmVlbigpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEwMSBAQAorMjAxNi0wNy0xNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgorCisgICAgICAgIFtXZWJLaXQgQVBJXSBBZGQgU1BJIHRvIHRyYWNrIG11bHRpcGxlIG5h
dmlnYXRpb25zIGNhdXNlZCBieSBhIHNpbmdsZSB1c2VyIGdlc3R1cmUKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzI2NTU0MTM3PgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU5ODU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQSU9iamVjdC5oOgorICAgICAgICAqIFNoYXJlZC9D
b2NvYS9BUElPYmplY3QubW06CisgICAgICAgIChBUEk6Ok9iamVjdDo6bmV3T2JqZWN0KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaDogQWRkZWQuCisg
ICAgICAgIEFkZCBuZXcgQVBJT2JqZWN0IHR5cGUsIFVzZXJJbml0aWF0ZWRBY3Rpb24uCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkFjdGlvbi5tbToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkFjdGlvblByaXZhdGUuaDoKKyAg
ICAgICAgRXhwb3NlIGEgX1dLVXNlckluaXRpYXRlZEFjdGlvbiBvbiB0aGUgV0tOYXZpZ2F0aW9u
QWN0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VySW5pdGlhdGVk
QWN0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlcklu
aXRpYXRlZEFjdGlvbi5tbTogQWRkZWQuCisgICAgICAgICgtW19XS1VzZXJJbml0aWF0ZWRBY3Rp
b24gY29uc3VtZV0pOgorICAgICAgICAoLVtfV0tVc2VySW5pdGlhdGVkQWN0aW9uIGlzQ29uc3Vt
ZWRdKToKKyAgICAgICAgKC1bX1dLVXNlckluaXRpYXRlZEFjdGlvbiBfYXBpT2JqZWN0XSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJu
YWwuaDogQWRkZWQuCisgICAgICAgIEFkZCBuZXcgX1dLVXNlckluaXRpYXRlZEFjdGlvbiB0eXBl
IHdyYXBwaW5nIEFQSTo6VXNlckluaXRpYXRlZEFjdGlvbi4KKworICAgICAgICAqIFNoYXJlZC9O
YXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rp
b25EYXRhOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YTo6
ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRhdGEuaDoKKyAgICAg
ICAgU3RvcmUgdGhlIHVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyIChhcyBkZXRlcm1pbmVkIGZy
b20gdGhlIFdlYlByb2Nlc3MncyBtYXApIHJhdGhlcgorICAgICAgICB0aGFuIGp1c3QgYSBzaW5n
bGUgYml0LiBUaGlzIGFsbG93cyB1cyB0byB0cmFjayBpZiBhIHVzZXIgZ2VzdHVyZSBpcyB1c2Vk
IGZvciBtdWx0aXBsZSBuYXZpZ2F0aW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJ
TmF2aWdhdGlvbkFjdGlvbi5oOgorICAgICAgICBBZGQgVXNlckluaXRpYXRlZEFjdGlvbiBtZW1i
ZXIgYW5kIHJlLWltcGxlbWVudCBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSBpbiB0ZXJtcyBvZiBp
dC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQ
YWdlU2V0UGFnZVVJQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0
ZS5tbToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNyZWF0ZU5ld1Bh
Z2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlv
bik6CisgICAgICAgIEdldCB0aGUgQVBJOjpVc2VySW5pdGlhdGVkQWN0aW9uIGZyb20gdGhlIFdl
YlByb2Nlc3NQcm94eSAoaWYgaXQgZXhpc3RzKSwgYW5kIHBhc3MKKyAgICAgICAgaXQgYWxvbmcg
dG8gdGhlIEFQSTo6TmF2aWdhdGlvbkFjdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnNodXRE
b3duKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5Ojp1c2VySW5pdGlhdGVkQWN0
aXZpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmRpZERlc3Ryb3lVc2Vy
R2VzdHVyZVRva2VuKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6Cisg
ICAgICAgIEtlZXAgYSBtYXAgb2YgYWN0aXZlIHVzZXJJbml0aWF0ZWRBY3Rpdml0eSBvYmplY3Rz
LgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgQWRkIERpZERlc3Ryb3lVc2VyR2VzdHVyZVRva2VuIG1lc3NhZ2UgdG8gbWFuYWdlciBB
UEk6OlVzZXJJbml0aWF0ZWRBY3Rpdml0eSBsaWZldGltZXMuCisKKyAgICAgICAgKiBXZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OmRpZENsaWNrTm90
aWZpY2F0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBlcmZvcm1GcmFtZUxvYWRVUkxSZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6ZXZhbHVhdGUpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudUNsaWVudDo6c2VhcmNoV2l0aEdvb2dsZSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpwbGF5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6cGF1c2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpiZWdpblNjcnViYmluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmVuZFNjcnViYmluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlZWtUb1RpbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpmYXN0U2Vlayk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5p
bmdGb3J3YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6
YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxheWJhY2tTZXNz
aW9uTWFuYWdlcjo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF5YmFja1Nl
c3Npb25NYW5hZ2VyOjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAg
ICAgICAgVXBkYXRlIGZvciBuZXcgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW50ZXJmYWNlLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGlj
eUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICBH
ZXQgYW4gaWRlbnRpZmllciBmb3IgdGhlIFVzZXJHZXN0dXJlVG9rZW4gZnJvbSB0aGUgV2ViUHJv
Y2VzcyBzaW5nbGV0b24KKyAgICAgICAgdG8gcGFzcyB0byB0aGUgV2ViUHJvY2Vzcy4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Om5leHRV
c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OnVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6dXNlckdlc3R1cmVUb2tlbkRlc3Ryb3llZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmg6CisgICAgICAgIFRyYWNrIFVzZXJHZXN0dXJlVG9rZW4gbGlmZXRpbWVzIHV0aWxp
emluZyB0aGUgZGVzdHJ1Y3Rpb25PYnNlcnZlciBtZWNoYW5pc20KKyAgICAgICAgb2ZmIHRoZSB0
b2tlbnMgdG8gaW5kaWNhdGUgZGVzdHJ1Y3Rpb24uIFdoZW4gZGVzdHJveWVkLCBub3RpZnkgdGhl
IFVJUHJvY2VzcworICAgICAgICB0byBhdm9pZCBsZWFrcy4KKwogMjAxNi0wNy0xNiAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW5hbWUgZmFzdEdldEF0dHJp
YnV0ZSB0byBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHAJKHJldmlzaW9uIDIwMzMz
MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdm9pZCBOYXZpZ2F0aW9uQWN0aW9uRGF0YTo6
ZW5jb2RlKElQQzo6QQogICAgIGVuY29kZXIuZW5jb2RlRW51bShtb2RpZmllcnMpOwogICAgIGVu
Y29kZXIuZW5jb2RlRW51bShtb3VzZUJ1dHRvbik7CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHN5
bnRoZXRpY0NsaWNrVHlwZSk7Ci0gICAgZW5jb2RlciA8PCBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVy
ZTsKKyAgICBlbmNvZGVyIDw8IHVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyOwogICAgIGVuY29k
ZXIgPDwgY2FuSGFuZGxlUmVxdWVzdDsKICAgICBlbmNvZGVyLmVuY29kZUVudW0oc2hvdWxkT3Bl
bkV4dGVybmFsVVJMc1BvbGljeSk7CiAgICAgZW5jb2RlciA8PCBkb3dubG9hZEF0dHJpYnV0ZTsK
QEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBOYXZpZ2F0aW9uQWN0aW9uRGF0YTo6ZGVjb2RlKElQQzo6
QQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVz
dWx0LnN5bnRoZXRpY0NsaWNrVHlwZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSkpCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2FuSGFu
ZGxlUmVxdWVzdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5oCShyZXZpc2lvbiAyMDMzMzMpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgTmF2aWdhdGlvbkFjdGlvbkRhdGEgewogICAgIFdl
YkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzIHsgfTsKICAgICBXZWJNb3VzZUV2ZW50OjpCdXR0
b24gbW91c2VCdXR0b24geyBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbiB9OwogICAgIFdlYk1vdXNl
RXZlbnQ6OlN5bnRoZXRpY0NsaWNrVHlwZSBzeW50aGV0aWNDbGlja1R5cGUgeyBXZWJNb3VzZUV2
ZW50OjpOb1RhcCB9OwotICAgIGJvb2wgaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgeyBmYWxzZSB9
OworICAgIHVpbnQ2NF90IHVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyOwogICAgIGJvb2wgY2Fu
SGFuZGxlUmVxdWVzdCB7IGZhbHNlIH07CiAgICAgV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFs
VVJMc1BvbGljeSBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHsgV2ViQ29yZTo6U2hvdWxk
T3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cgfTsKICAgICBXVEY6OlN0cmlu
ZyBkb3dubG9hZEF0dHJpYnV0ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJ
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElPYmpl
Y3QuaAkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgVXNlckNvbnRlbnRFeHRlbnNpb24sCiAgICAgICAgIFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUsCiAgICAgICAgIFVzZXJDb250ZW50V29ybGQsCisgICAgICAgIFVzZXJJbml0aWF0ZWRBY3Rp
b24sCiAgICAgICAgIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVjaywKICAgICAgICAgVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3QsCiAgICAgICAgIFZpYnJhdGlvbiwKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNzEs
NiArNzEsNyBAQAogI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFs
LmgiCiAjaW1wb3J0ICJfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgiCiAjaW1wb3J0ICJf
V0tVc2VyQ29udGVudFdvcmxkSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS1VzZXJJbml0aWF0ZWRB
Y3Rpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVXNlclN0eWxlU2hlZXRJbnRlcm5hbC5oIgog
I2ltcG9ydCAiX1dLVmlzaXRlZExpbmtTdG9yZUludGVybmFsLmgiCiAKQEAgLTIzMSw2ICsyMzIs
MTAgQEAgdm9pZCogT2JqZWN0OjpuZXdPYmplY3Qoc2l6ZV90IHNpemUsIFR5cAogICAgICAgICB3
cmFwcGVyID0gW19XS1VzZXJDb250ZW50V29ybGQgYWxsb2NdOwogICAgICAgICBicmVhazsKIAor
ICAgIGNhc2UgVHlwZTo6VXNlckluaXRpYXRlZEFjdGlvbjoKKyAgICAgICAgd3JhcHBlciA9IFtf
V0tVc2VySW5pdGlhdGVkQWN0aW9uIGFsbG9jXTsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNl
IFR5cGU6OlVzZXJTY3JpcHQ6CiAgICAgICAgIHdyYXBwZXIgPSBbV0tVc2VyU2NyaXB0IGFsbG9j
XTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1ODgsOSArMzU4OCwxMCBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhCiAgICAgICAgIGVsc2UgaWYg
KG9yaWdpbmF0aW5nRnJhbWUpCiAgICAgICAgICAgICBzb3VyY2VGcmFtZUluZm8gPSBBUEk6OkZy
YW1lSW5mbzo6Y3JlYXRlKCpvcmlnaW5hdGluZ0ZyYW1lLCBvcmlnaW5hdGluZ0ZyYW1lU2VjdXJp
dHlPcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSk7CiAKKyAgICAgICAgYXV0byB1c2VySW5pdGlhdGVk
QWN0aXZpdHkgPSBtX3Byb2Nlc3MtPnVzZXJJbml0aWF0ZWRBY3Rpdml0eShuYXZpZ2F0aW9uQWN0
aW9uRGF0YS51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcik7CiAgICAgICAgIGJvb2wgc2hvdWxk
T3BlbkFwcExpbmtzID0gIW1fc2hvdWxkU3VwcHJlc3NBcHBMaW5rc0luTmV4dE5hdmlnYXRpb25Q
b2xpY3lEZWNpc2lvbiAmJiAoIWRlc3RpbmF0aW9uRnJhbWVJbmZvIHx8IGRlc3RpbmF0aW9uRnJh
bWVJbmZvLT5pc01haW5GcmFtZSgpKSAmJiAhaG9zdHNBcmVFcXVhbChVUkwoUGFyc2VkVVJMU3Ry
aW5nLCBtX21haW5GcmFtZS0+dXJsKCkpLCByZXF1ZXN0LnVybCgpKTsKIAotICAgICAgICBhdXRv
IG5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShuYXZpZ2F0
aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLmdldCgpLCBkZXN0aW5hdGlvbkZyYW1lSW5m
by5nZXQoKSwgcmVxdWVzdCwgb3JpZ2luYWxSZXF1ZXN0LnVybCgpLCBzaG91bGRPcGVuQXBwTGlu
a3MpOworICAgICAgICBhdXRvIG5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rp
b246OmNyZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLmdldCgpLCBk
ZXN0aW5hdGlvbkZyYW1lSW5mby5nZXQoKSwgcmVxdWVzdCwgb3JpZ2luYWxSZXF1ZXN0LnVybCgp
LCBzaG91bGRPcGVuQXBwTGlua3MsIFdURk1vdmUodXNlckluaXRpYXRlZEFjdGl2aXR5KSk7CiAK
ICAgICAgICAgbV9uYXZpZ2F0aW9uQ2xpZW50LT5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uKCp0aGlzLCBuYXZpZ2F0aW9uQWN0aW9uLmdldCgpLCBXVEZNb3ZlKGxpc3RlbmVyKSwgbV9w
cm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQo
KSk7CiAgICAgfSBlbHNlCkBAIC0zNjIyLDggKzM2MjMsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGVjaWRlUG9saWN5Rm9yTmV3V2luCiAgICAgICAgIGlmIChmcmFtZSkKICAgICAgICAgICAgIHNv
dXJjZUZyYW1lSW5mbyA9IEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoKmZyYW1lLCBmcmFtZVNlY3Vy
aXR5T3JpZ2luLnNlY3VyaXR5T3JpZ2luKCkpOwogCisgICAgICAgIGF1dG8gdXNlckluaXRpYXRl
ZEFjdGl2aXR5ID0gbV9wcm9jZXNzLT51c2VySW5pdGlhdGVkQWN0aXZpdHkobmF2aWdhdGlvbkFj
dGlvbkRhdGEudXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIpOwogICAgICAgICBib29sIHNob3Vs
ZE9wZW5BcHBMaW5rcyA9ICFob3N0c0FyZUVxdWFsKFVSTChQYXJzZWRVUkxTdHJpbmcsIG1fbWFp
bkZyYW1lLT51cmwoKSksIHJlcXVlc3QudXJsKCkpOwotICAgICAgICBhdXRvIG5hdmlnYXRpb25B
Y3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0
YSwgc291cmNlRnJhbWVJbmZvLmdldCgpLCBudWxscHRyLCByZXF1ZXN0LCByZXF1ZXN0LnVybCgp
LCBzaG91bGRPcGVuQXBwTGlua3MpOworICAgICAgICBhdXRvIG5hdmlnYXRpb25BY3Rpb24gPSBB
UEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNl
RnJhbWVJbmZvLmdldCgpLCBudWxscHRyLCByZXF1ZXN0LCByZXF1ZXN0LnVybCgpLCBzaG91bGRP
cGVuQXBwTGlua3MsIFdURk1vdmUodXNlckluaXRpYXRlZEFjdGl2aXR5KSk7CiAKICAgICAgICAg
bV9uYXZpZ2F0aW9uQ2xpZW50LT5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKCp0aGlz
LCBuYXZpZ2F0aW9uQWN0aW9uLmdldCgpLCBXVEZNb3ZlKGxpc3RlbmVyKSwgbV9wcm9jZXNzLT50
cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCShyZXZp
c2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1By
b3h5OjpzaHV0RG93bigpCiAgICAgICAgIHdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5y
ZW1vdmVQcm9jZXNzKCp0aGlzKTsKICAgICBtX3dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3hp
ZXMuY2xlYXIoKTsKIAorICAgIG1fdXNlckluaXRpYXRlZEFjdGlvbk1hcC5jbGVhcigpOworCiAg
ICAgbV9wcm9jZXNzUG9vbC0+ZGlzY29ubmVjdFByb2Nlc3ModGhpcyk7CiB9CiAKQEAgLTY2NSw2
ICs2NjcsMjEgQEAgc2l6ZV90IFdlYlByb2Nlc3NQcm94eTo6ZnJhbWVDb3VudEluUGFnZQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKK1JlZlB0cjxBUEk6OlVzZXJJbml0aWF0ZWRBY3Rpb24+IFdl
YlByb2Nlc3NQcm94eTo6dXNlckluaXRpYXRlZEFjdGl2aXR5KHVpbnQ2NF90IGlkZW50aWZpZXIp
Cit7CisgICAgaWYgKCFVc2VySW5pdGlhdGVkQWN0aW9uTWFwOjppc1ZhbGlkS2V5KGlkZW50aWZp
ZXIpIHx8ICFpZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8g
cmVzdWx0ID0gbV91c2VySW5pdGlhdGVkQWN0aW9uTWFwLmVuc3VyZShpZGVudGlmaWVyLCBbXSB7
IHJldHVybiBBUEk6OlVzZXJJbml0aWF0ZWRBY3Rpb246OmNyZWF0ZSgpOyB9KTsKKyAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKwordm9pZCBXZWJQcm9jZXNzUHJveHk6OmRp
ZERlc3Ryb3lVc2VyR2VzdHVyZVRva2VuKHVpbnQ2NF90IGlkZW50aWZpZXIpCit7CisgICAgQVNT
RVJUKFVzZXJJbml0aWF0ZWRBY3Rpb25NYXA6OmlzVmFsaWRLZXkoaWRlbnRpZmllcikpOworICAg
IG1fdXNlckluaXRpYXRlZEFjdGlvbk1hcC5yZW1vdmUoaWRlbnRpZmllcik7Cit9CisKIGJvb2wg
V2ViUHJvY2Vzc1Byb3h5OjpjYW5UZXJtaW5hdGVDaGlsZFByb2Nlc3MoKQogewogICAgIGlmICgh
bV9wYWdlTWFwLmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElTZXNzaW9uLmgiCisjaW5jbHVkZSAiQVBJVXNl
ckluaXRpYXRlZEFjdGlvbi5oIgogI2luY2x1ZGUgIkNoaWxkUHJvY2Vzc1Byb3h5LmgiCiAjaW5j
bHVkZSAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJNZXNzYWdlUmVj
ZWl2ZXJNYXAuaCIKQEAgLTY3LDYgKzY4LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSGFzaE1h
cDx1aW50NjRfdCwgUmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYkZy
YW1lUHJveHk+PiBXZWJGcmFtZVByb3h5TWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRf
dCwgV2ViUGFnZVByb3h5Kj4gV2ViUGFnZVByb3h5TWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDx1
aW50NjRfdCwgUmVmUHRyPEFQSTo6VXNlckluaXRpYXRlZEFjdGlvbj4+IFVzZXJJbml0aWF0ZWRB
Y3Rpb25NYXA7CiAKICAgICBzdGF0aWMgUmVmPFdlYlByb2Nlc3NQcm94eT4gY3JlYXRlKFdlYlBy
b2Nlc3NQb29sJik7CiAgICAgfldlYlByb2Nlc3NQcm94eSgpOwpAQCAtOTQsNiArOTYsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHko
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKIAogICAgIFdlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0qIHdlYkJhY2tGb3J3YXJkSXRlbSh1aW50NjRfdCBpdGVtSUQpIGNvbnN0OworICAgIFJl
ZlB0cjxBUEk6OlVzZXJJbml0aWF0ZWRBY3Rpb24+IHVzZXJJbml0aWF0ZWRBY3Rpdml0eSh1aW50
NjRfdCk7CiAKICAgICBSZXNwb25zaXZlbmVzc1RpbWVyJiByZXNwb25zaXZlbmVzc1RpbWVyKCkg
eyByZXR1cm4gbV9yZXNwb25zaXZlbmVzc1RpbWVyOyB9CiAKQEAgLTE2Nyw3ICsxNzAsOCBAQCBw
cml2YXRlOgogICAgIC8vIElQQyBtZXNzYWdlIGhhbmRsZXJzLgogICAgIHZvaWQgYWRkQmFja0Zv
cndhcmRJdGVtKHVpbnQ2NF90IGl0ZW1JRCwgdWludDY0X3QgcGFnZUlELCBjb25zdCBQYWdlU3Rh
dGUmKTsKICAgICB2b2lkIGRpZERlc3Ryb3lGcmFtZSh1aW50NjRfdCk7Ci0gICAgCisgICAgdm9p
ZCBkaWREZXN0cm95VXNlckdlc3R1cmVUb2tlbih1aW50NjRfdCk7CisKICAgICB2b2lkIHNob3Vs
ZFRlcm1pbmF0ZShib29sJiBzaG91bGRUZXJtaW5hdGUpOwogCiAgICAgdm9pZCBkaWRGZXRjaFdl
YnNpdGVEYXRhKHVpbnQ2NF90IGNhbGxiYWNrSUQsIGNvbnN0IFdlYnNpdGVEYXRhJik7CkBAIC0y
MzQsNiArMjM4LDcgQEAgcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHlNYXAgbV9wYWdlTWFwOwog
ICAgIFdlYkZyYW1lUHJveHlNYXAgbV9mcmFtZU1hcDsKICAgICBXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtTWFwIG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcDsKKyAgICBVc2VySW5pdGlhdGVkQWN0aW9u
TWFwIG1fdXNlckluaXRpYXRlZEFjdGlvbk1hcDsKIAogICAgIEhhc2hTZXQ8VmlzaXRlZExpbmtT
dG9yZSo+IG1fdmlzaXRlZExpbmtTdG9yZXM7CiAgICAgSGFzaFNldDxXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eSo+IG1fd2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveGllczsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNz
YWdlcy5pbgkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsOCBA
QCBtZXNzYWdlcyAtPiBXZWJQcm9jZXNzUHJveHkgTGVnYWN5UmVjZWl2CiAgICAgQWRkQmFja0Zv
cndhcmRJdGVtKHVpbnQ2NF90IGl0ZW1JRCwgdWludDY0X3QgcGFnZUlELCBzdHJ1Y3QgV2ViS2l0
OjpQYWdlU3RhdGUgcGFnZVN0YXRlKQogICAgIERpZERlc3Ryb3lGcmFtZSh1aW50NjRfdCBmcmFt
ZUlEKSAKIAorICAgIERpZERlc3Ryb3lVc2VyR2VzdHVyZVRva2VuKHVpbnQ2NF90IHVzZXJHZXN0
dXJlVG9rZW5JRCkgCisKICAgICBTaG91bGRUZXJtaW5hdGUoKSAtPiAoYm9vbCBzaG91bGRUZXJt
aW5hdGUpCiAKICAgICBFbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25BY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25BY3Rpb24uaAkocmV2aXNp
b24gMjAzMzMzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9u
QWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDI3ICsyOCwyNyBAQAogCiAjaW5jbHVkZSAi
QVBJRnJhbWVJbmZvLmgiCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiQVBJVXNl
ckluaXRpYXRlZEFjdGlvbi5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb25EYXRhLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VS
TC5oPgogCiBuYW1lc3BhY2UgQVBJIHsKIAotY2xhc3MgRnJhbWVJbmZvOwotCiBjbGFzcyBOYXZp
Z2F0aW9uQWN0aW9uIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpOYXZp
Z2F0aW9uQWN0aW9uPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOYXZpZ2F0aW9uQWN0aW9u
PiBjcmVhdGUoY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2aWdhdGlvbkFj
dGlvbkRhdGEsIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VGcmFtZSwgQVBJOjpGcmFtZUluZm8qIHRh
cmdldEZyYW1lLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFdlYkNvcmU6OlVSTCYgb3JpZ2luYWxVUkwsIGJvb2wgc2hvdWxkT3BlbkFwcExpbmtzKQorICAg
IHN0YXRpYyBSZWY8TmF2aWdhdGlvbkFjdGlvbj4gY3JlYXRlKGNvbnN0IFdlYktpdDo6TmF2aWdh
dGlvbkFjdGlvbkRhdGEmIG5hdmlnYXRpb25BY3Rpb25EYXRhLCBBUEk6OkZyYW1lSW5mbyogc291
cmNlRnJhbWUsIEFQSTo6RnJhbWVJbmZvKiB0YXJnZXRGcmFtZSwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpVUkwmIG9yaWdpbmFsVVJMLCBi
b29sIHNob3VsZE9wZW5BcHBMaW5rcywgUmVmUHRyPFVzZXJJbml0aWF0ZWRBY3Rpb24+IHVzZXJJ
bml0aWF0ZWRBY3Rpb24pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOYXZp
Z2F0aW9uQWN0aW9uKG5hdmlnYXRpb25BY3Rpb25EYXRhLCBzb3VyY2VGcmFtZSwgdGFyZ2V0RnJh
bWUsIHJlcXVlc3QsIG9yaWdpbmFsVVJMLCBzaG91bGRPcGVuQXBwTGlua3MpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgTmF2aWdhdGlvbkFjdGlvbihuYXZpZ2F0aW9uQWN0aW9uRGF0
YSwgc291cmNlRnJhbWUsIHRhcmdldEZyYW1lLCByZXF1ZXN0LCBvcmlnaW5hbFVSTCwgc2hvdWxk
T3BlbkFwcExpbmtzLCBXVEZNb3ZlKHVzZXJJbml0aWF0ZWRBY3Rpb24pKSk7CiAgICAgfQogCi0g
ICAgTmF2aWdhdGlvbkFjdGlvbihjb25zdCBXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rpb25EYXRhJiBu
YXZpZ2F0aW9uQWN0aW9uRGF0YSwgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZyYW1lLCBBUEk6OkZy
YW1lSW5mbyogdGFyZ2V0RnJhbWUsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgV2ViQ29yZTo6VVJMJiBvcmlnaW5hbFVSTCwgYm9vbCBzaG91bGRPcGVuQXBw
TGlua3MpCisgICAgTmF2aWdhdGlvbkFjdGlvbihjb25zdCBXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rp
b25EYXRhJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZyYW1l
LCBBUEk6OkZyYW1lSW5mbyogdGFyZ2V0RnJhbWUsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6VVJMJiBvcmlnaW5hbFVSTCwgYm9vbCBzaG91
bGRPcGVuQXBwTGlua3MsIFJlZlB0cjxVc2VySW5pdGlhdGVkQWN0aW9uPiB1c2VySW5pdGlhdGVk
QWN0aW9uKQogICAgICAgICA6IG1fc291cmNlRnJhbWUoc291cmNlRnJhbWUpCiAgICAgICAgICwg
bV90YXJnZXRGcmFtZSh0YXJnZXRGcmFtZSkKICAgICAgICAgLCBtX3JlcXVlc3QocmVxdWVzdCkK
ICAgICAgICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQogICAgICAgICAsIG1fc2hvdWxk
T3BlbkFwcExpbmtzKHNob3VsZE9wZW5BcHBMaW5rcykKKyAgICAgICAgLCBtX3VzZXJJbml0aWF0
ZWRBY3Rpb24oV1RGTW92ZSh1c2VySW5pdGlhdGVkQWN0aW9uKSkKICAgICAgICAgLCBtX25hdmln
YXRpb25BY3Rpb25EYXRhKG5hdmlnYXRpb25BY3Rpb25EYXRhKQogICAgIHsKICAgICB9CkBAIC02
MywxMiArNjMsMTQgQEAgcHVibGljOgogICAgIFdlYktpdDo6V2ViRXZlbnQ6Ok1vZGlmaWVycyBt
b2RpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRpb25BY3Rpb25EYXRhLm1vZGlmaWVy
czsgfQogICAgIFdlYktpdDo6V2ViTW91c2VFdmVudDo6QnV0dG9uIG1vdXNlQnV0dG9uKCkgY29u
c3QgeyByZXR1cm4gbV9uYXZpZ2F0aW9uQWN0aW9uRGF0YS5tb3VzZUJ1dHRvbjsgfQogICAgIFdl
YktpdDo6V2ViTW91c2VFdmVudDo6U3ludGhldGljQ2xpY2tUeXBlIHN5bnRoZXRpY0NsaWNrVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmF2aWdhdGlvbkFjdGlvbkRhdGEuc3ludGhldGljQ2xpY2tU
eXBlOyB9Ci0gICAgYm9vbCBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmF2aWdhdGlvbkFjdGlvbkRhdGEuaXNQcm9jZXNzaW5nVXNlckdlc3R1cmU7IH0KICAgICBi
b29sIGNhbkhhbmRsZVJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRpb25BY3Rpb25E
YXRhLmNhbkhhbmRsZVJlcXVlc3Q7IH0KICAgICBib29sIHNob3VsZE9wZW5FeHRlcm5hbFNjaGVt
ZXMoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRpb25BY3Rpb25EYXRhLnNob3VsZE9wZW5FeHRl
cm5hbFVSTHNQb2xpY3kgPT0gV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6
U2hvdWxkQWxsb3cgfHwgbV9uYXZpZ2F0aW9uQWN0aW9uRGF0YS5zaG91bGRPcGVuRXh0ZXJuYWxV
UkxzUG9saWN5ID09IFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3Vs
ZEFsbG93RXh0ZXJuYWxTY2hlbWVzOyB9CiAgICAgYm9vbCBzaG91bGRPcGVuQXBwTGlua3MoKSBj
b25zdCB7IHJldHVybiBtX3Nob3VsZE9wZW5BcHBMaW5rcyAmJiBtX25hdmlnYXRpb25BY3Rpb25E
YXRhLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPT0gV2ViQ29yZTo6U2hvdWxkT3BlbkV4
dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3c7IH0KICAgICBib29sIHNob3VsZFBlcmZvcm1E
b3dubG9hZCgpIGNvbnN0IHsgcmV0dXJuICFtX25hdmlnYXRpb25BY3Rpb25EYXRhLmRvd25sb2Fk
QXR0cmlidXRlLmlzTnVsbCgpOyB9CiAKKyAgICBib29sIGlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCkgY29uc3QgeyByZXR1cm4gISFtX3VzZXJJbml0aWF0ZWRBY3Rpb247IH0KKyAgICBVc2VySW5p
dGlhdGVkQWN0aW9uKiB1c2VySW5pdGlhdGVkQWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91c2Vy
SW5pdGlhdGVkQWN0aW9uLmdldCgpOyB9CisKIHByaXZhdGU6CiAgICAgUmVmUHRyPEZyYW1lSW5m
bz4gbV9zb3VyY2VGcmFtZTsKICAgICBSZWZQdHI8RnJhbWVJbmZvPiBtX3RhcmdldEZyYW1lOwpA
QCAtNzgsNiArODAsOCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Nob3VsZE9wZW5BcHBMaW5r
czsKIAorICAgIFJlZlB0cjxVc2VySW5pdGlhdGVkQWN0aW9uPiBtX3VzZXJJbml0aWF0ZWRBY3Rp
b247CisKICAgICBXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rpb25EYXRhIG1fbmF2aWdhdGlvbkFjdGlv
bkRhdGE7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJJ
bml0aWF0ZWRBY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0FQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJBUElPYmplY3QuaCIKKworbmFtZXNwYWNlIEFQSSB7CisKK2NsYXNzIFVzZXJJbml0aWF0ZWRB
Y3Rpb24gZmluYWwgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpV
c2VySW5pdGlhdGVkQWN0aW9uPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxVc2VySW5pdGlh
dGVkQWN0aW9uPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
VXNlckluaXRpYXRlZEFjdGlvbik7CisgICAgfQorCisgICAgdmlydHVhbCB+VXNlckluaXRpYXRl
ZEFjdGlvbigpCisgICAgeworICAgIH0KKworICAgIHZvaWQgc2V0Q29uc3VtZWQoKSB7IG1fY29u
c3VtZWQgPSB0cnVlOyB9CisgICAgYm9vbCBjb25zdW1lZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3VtZWQ7IH0KKworcHJpdmF0ZToKKyAgICBVc2VySW5pdGlhdGVkQWN0aW9uKCkKKyAgICB7Cisg
ICAgfQorCisgICAgYm9vbCBtX2NvbnN1bWVkID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBBUEkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShy
ZXZpc2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5Nyw4ICsxNjk3LDkgQEAgdm9pZCBXS1BhZ2VTZXRQ
YWdlVUlDbGllbnQoV0tQYWdlUmVmIHBhZwogCiAgICAgICAgICAgICAgICAgYXV0byBzb3VyY2VG
cmFtZUluZm8gPSBBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKCppbml0aWF0aW5nRnJhbWUsIHNlY3Vy
aXR5T3JpZ2luRGF0YS5zZWN1cml0eU9yaWdpbigpKTsKIAorICAgICAgICAgICAgICAgIGF1dG8g
dXNlckluaXRpYXRlZEFjdGl2aXR5ID0gcGFnZS0+cHJvY2VzcygpLnVzZXJJbml0aWF0ZWRBY3Rp
dml0eShuYXZpZ2F0aW9uQWN0aW9uRGF0YS51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcik7CiAg
ICAgICAgICAgICAgICAgYm9vbCBzaG91bGRPcGVuQXBwTGlua3MgPSAhaG9zdHNBcmVFcXVhbChX
ZWJDb3JlOjpVUkwoV2ViQ29yZTo6UGFyc2VkVVJMU3RyaW5nLCBpbml0aWF0aW5nRnJhbWUtPnVy
bCgpKSwgcmVzb3VyY2VSZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgICAgICAgICBhdXRvIGFwaU5h
dmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShuYXZpZ2F0aW9u
QWN0aW9uRGF0YSwgc291cmNlRnJhbWVJbmZvLnB0cigpLCBudWxscHRyLCByZXNvdXJjZVJlcXVl
c3QsIFdlYkNvcmU6OlVSTCgpLCBzaG91bGRPcGVuQXBwTGlua3MpOworICAgICAgICAgICAgICAg
IGF1dG8gYXBpTmF2aWdhdGlvbkFjdGlvbiA9IEFQSTo6TmF2aWdhdGlvbkFjdGlvbjo6Y3JlYXRl
KG5hdmlnYXRpb25BY3Rpb25EYXRhLCBzb3VyY2VGcmFtZUluZm8ucHRyKCksIG51bGxwdHIsIHJl
c291cmNlUmVxdWVzdCwgV2ViQ29yZTo6VVJMKCksIHNob3VsZE9wZW5BcHBMaW5rcywgdXNlcklu
aXRpYXRlZEFjdGl2aXR5KTsKIAogICAgICAgICAgICAgICAgIGF1dG8gYXBpV2luZG93RmVhdHVy
ZXMgPSBBUEk6OldpbmRvd0ZlYXR1cmVzOjpjcmVhdGUod2luZG93RmVhdHVyZXMpOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkFjdGlvbi5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2
aWdhdGlvbkFjdGlvbi5tbQkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25BY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2ltcG9ydCAiTmF2aWdhdGlvbkFjdGlvbkRhdGEuaCIKICNpbXBv
cnQgIldLRnJhbWVJbmZvSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS1VzZXJJbml0aWF0ZWRBY3Rp
b25JbnRlcm5hbC5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBAaW1wbGVtZW50YXRp
b24gV0tOYXZpZ2F0aW9uQWN0aW9uCkBAIC0yMTgsNiArMjE5LDE0IEBAIC0gKEJPT0wpX3Nob3Vs
ZE9wZW5FeHRlcm5hbFVSTHMKICAgICByZXR1cm4gW3NlbGYgX3Nob3VsZE9wZW5FeHRlcm5hbFNj
aGVtZXNdOwogfQogCistIChfV0tVc2VySW5pdGlhdGVkQWN0aW9uICopX3VzZXJJbml0aWF0ZWRB
Y3Rpb24KK3sKKyAgICBhdXRvIHVzZXJJbml0aWF0ZWRBY3Rpb24gPSBfbmF2aWdhdGlvbkFjdGlv
bi0+dXNlckluaXRpYXRlZEFjdGlvbigpOworICAgIGlmICh1c2VySW5pdGlhdGVkQWN0aW9uKQor
ICAgICAgICByZXR1cm4gd3JhcHBlcigqdXNlckluaXRpYXRlZEFjdGlvbik7CisgICAgcmV0dXJu
IG5pbDsKK30KKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tOYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZpZ2F0aW9uQWN0aW9uUHJpdmF0
ZS5oCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLTmF2aWdhdGlvbkFjdGlvblByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsOCBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAorQGNsYXNzIF9XS1VzZXJJbml0aWF0ZWRB
Y3Rpb247CisKICNpZiBUQVJHRVRfT1NfSVBIT05FCiB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBXS1N5bnRoZXRpY0NsaWNrVHlwZSkgewogICAgIFdLU3ludGhldGljQ2xpY2tUeXBlTm9UYXAs
CkBAIC00NSw2ICs0Nyw4IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFdLU3ludGhldGlj
Q2wKIAogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9zaG91bGRPcGVuRXh0
ZXJuYWxVUkxzIFdLX0FQSV9ERVBSRUNBVEVEKCJ1c2UgX3Nob3VsZE9wZW5FeHRlcm5hbFNjaGVt
ZXMgYW5kIF9zaG91bGRPcGVuQXBwTGlua3MiLCBtYWNvc3goMTAuMTEsIDEwLjExKSwgaW9zKDku
MCwgOS4wKSk7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLVXNlckluaXRp
YXRlZEFjdGlvbiAqX3VzZXJJbml0aWF0ZWRBY3Rpb247CisKICNpZiBUQVJHRVRfT1NfSVBIT05F
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLU3ludGhldGljQ2xpY2tUeXBlIF9z
eW50aGV0aWNDbGlja1R5cGUgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0ZWRB
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJJbml0aWF0ZWRBY3Rpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0ZWRBY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dLRm91
bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK1dLX0NMQVNTX0FWQUlM
QUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dL
VXNlckluaXRpYXRlZEFjdGlvbiA6IE5TT2JqZWN0CisKKy0gKHZvaWQpY29uc3VtZTsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyPWlzQ29uc3VtZWQpIEJPT0wgY29uc3Vt
ZWQ7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZgpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VySW5pdGlhdGVkQWN0aW9uLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNl
ckluaXRpYXRlZEFjdGlvbi5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0ZWRBY3Rpb24ubW0JKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFsLmgiCisKKyNpZiBXS19BUElfRU5BQkxF
RAorCitAaW1wbGVtZW50YXRpb24gX1dLVXNlckluaXRpYXRlZEFjdGlvbgorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBfdXNlckluaXRpYXRlZEFjdGlvbi0+flVzZXJJbml0aWF0ZWRBY3Rpb24o
KTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlv
bgoreworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQDogJXA7IGNv
bnN1bWVkID0gJXM+IiwgTlNTdHJpbmdGcm9tQ2xhc3Moc2VsZi5jbGFzcyksIHNlbGYsIHNlbGYu
Y29uc3VtZWQgPyAiWUVTIiA6ICJOTyJdOworfQorCistICh2b2lkKWNvbnN1bWUKK3sKKyAgICBf
dXNlckluaXRpYXRlZEFjdGlvbi0+c2V0Q29uc3VtZWQoKTsKK30KKworLSAoQk9PTClpc0NvbnN1
bWVkCit7CisgICAgcmV0dXJuIF91c2VySW5pdGlhdGVkQWN0aW9uLT5jb25zdW1lZCgpOworfQor
CisjcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KKworLSAoQVBJ
OjpPYmplY3QmKV9hcGlPYmplY3QKK3sKKyAgICByZXR1cm4gKl91c2VySW5pdGlhdGVkQWN0aW9u
OworfQorCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJJbml0aWF0ZWRBY3Rpb25J
bnRlcm5hbC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIl9XS1VzZXJJbml0aWF0ZWRBY3Rp
b24uaCIKKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSVVzZXJJbml0aWF0ZWRB
Y3Rpb24uaCIKKyNpbXBvcnQgIldLT2JqZWN0LmgiCisjaW1wb3J0IDx3dGYvVmVjdG9yLmg+Cisj
aW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEFQSSB7CisKK2lubGlu
ZSBfV0tVc2VySW5pdGlhdGVkQWN0aW9uICp3cmFwcGVyKFVzZXJJbml0aWF0ZWRBY3Rpb24mIHVz
ZXJJbml0aWF0ZWRBY3Rpb24pCit7CisgICAgQVNTRVJUKFt1c2VySW5pdGlhdGVkQWN0aW9uLndy
YXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tVc2VySW5pdGlhdGVkQWN0aW9uIGNsYXNzXV0pOwor
ICAgIHJldHVybiAoX1dLVXNlckluaXRpYXRlZEFjdGlvbiAqKXVzZXJJbml0aWF0ZWRBY3Rpb24u
d3JhcHBlcigpOworfQorCit9CisKK0BpbnRlcmZhY2UgX1dLVXNlckluaXRpYXRlZEFjdGlvbiAo
KSA8V0tPYmplY3Q+IHsKK0BwYWNrYWdlCisgICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6VXNl
ckluaXRpYXRlZEFjdGlvbj4gX3VzZXJJbml0aWF0ZWRBY3Rpb247Cit9CitAZW5kCisKKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlv
bkFjdGlvblByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oCShyZXZpc2lvbiAyMDMzMzMp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0
aW9uUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBAIHN0cnVjdCBfV2Vi
S2l0TmF2aWdhdGlvbkFjdGlvbiB7CiAgICAgICAgIDogdHlwZSh0b1dlYktpdE5hdmlnYXRpb25U
eXBlKG5hdmlnYXRpb25BY3Rpb25EYXRhLm5hdmlnYXRpb25UeXBlKSkKICAgICAgICAgLCBtb3Vz
ZUJ1dHRvbih0b1dlYktpdE1vdXNlQnV0dG9uKG5hdmlnYXRpb25BY3Rpb25EYXRhLm1vdXNlQnV0
dG9uKSkKICAgICAgICAgLCBtb2RpZmllcnModG9HZGtNb2RpZmllcnMobmF2aWdhdGlvbkFjdGlv
bkRhdGEubW9kaWZpZXJzKSkKLSAgICAgICAgLCBpc1VzZXJHZXN0dXJlKG5hdmlnYXRpb25BY3Rp
b25EYXRhLmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKQorICAgICAgICAsIGlzVXNlckdlc3R1cmUo
bmF2aWdhdGlvbkFjdGlvbkRhdGEudXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIgIT0gMCkKICAg
ICAgICAgLCByZXF1ZXN0KHVyaVJlcXVlc3QpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCShyZXZpc2lvbiAyMDMzMzMp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDEyIEBACiAjaW1wb3J0ICJXS05hdmlnYXRpb25BY3Rpb25J
bnRlcm5hbC5oIgogI2ltcG9ydCAiV0tPcGVuUGFuZWxQYXJhbWV0ZXJzSW50ZXJuYWwuaCIKICNp
bXBvcnQgIldLU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tVSURlbGVnYXRl
UHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkludGVybmFsLmgiCiAj
aW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXaW5kb3dGZWF0dXJlc0lu
dGVybmFsLmgiCi0jaW1wb3J0ICJXS1VJRGVsZWdhdGVQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHku
aCIKICNpbXBvcnQgIl9XS0NvbnRleHRNZW51RWxlbWVudEluZm8uaCIKICNpbXBvcnQgIl9XS0Zy
YW1lSGFuZGxlSW50ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRh
Lmg+CkBAIC0xNDcsNyArMTQ4LDcgQEAgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6On5VSUNsaWVudCgp
CiB7CiB9CiAKLVBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IFVJRGVsZWdhdGU6OlVJ
Q2xpZW50OjpjcmVhdGVOZXdQYWdlKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgV2ViS2l0OjpXZWJG
cmFtZVByb3h5KiBpbml0aWF0aW5nRnJhbWUsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YSYgc2VjdXJpdHlPcmlnaW5EYXRhLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJlcywg
Y29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2aWdhdGlvbkFjdGlvbkRhdGEp
CitQYXNzUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBVSURlbGVnYXRlOjpVSUNsaWVudDo6
Y3JlYXRlTmV3UGFnZShXZWJLaXQ6OldlYlBhZ2VQcm94eSogcGFnZSwgV2ViS2l0OjpXZWJGcmFt
ZVByb3h5KiBpbml0aWF0aW5nRnJhbWUsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYgc2VjdXJpdHlPcmlnaW5EYXRhLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJlcywgY29u
c3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2aWdhdGlvbkFjdGlvbkRhdGEpCiB7
CiAgICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NyZWF0ZVdl
YlZpZXdXaXRoQ29uZmlndXJhdGlvbkZvck5hdmlnYXRpb25BY3Rpb25XaW5kb3dGZWF0dXJlcykK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNjEsOCArMTYyLDkgQEAgUGFzc1JlZlB0cjxX
ZWJLaXQ6OldlYlBhZ2VQcm94eT4gVUlEZWxlZwogCiAgICAgYXV0byBzb3VyY2VGcmFtZUluZm8g
PSBBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKCppbml0aWF0aW5nRnJhbWUsIHNlY3VyaXR5T3JpZ2lu
RGF0YS5zZWN1cml0eU9yaWdpbigpKTsKIAorICAgIGF1dG8gdXNlckluaXRpYXRlZEFjdGl2aXR5
ID0gcGFnZS0+cHJvY2VzcygpLnVzZXJJbml0aWF0ZWRBY3Rpdml0eShuYXZpZ2F0aW9uQWN0aW9u
RGF0YS51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcik7CiAgICAgYm9vbCBzaG91bGRPcGVuQXBw
TGlua3MgPSAhaG9zdHNBcmVFcXVhbChXZWJDb3JlOjpVUkwoV2ViQ29yZTo6UGFyc2VkVVJMU3Ry
aW5nLCBpbml0aWF0aW5nRnJhbWUtPnVybCgpKSwgcmVxdWVzdC51cmwoKSk7Ci0gICAgYXV0byBh
cGlOYXZpZ2F0aW9uQWN0aW9uID0gQVBJOjpOYXZpZ2F0aW9uQWN0aW9uOjpjcmVhdGUobmF2aWdh
dGlvbkFjdGlvbkRhdGEsIHNvdXJjZUZyYW1lSW5mby5wdHIoKSwgbnVsbHB0ciwgcmVxdWVzdCwg
V2ViQ29yZTo6VVJMKCksIHNob3VsZE9wZW5BcHBMaW5rcyk7CisgICAgYXV0byBhcGlOYXZpZ2F0
aW9uQWN0aW9uID0gQVBJOjpOYXZpZ2F0aW9uQWN0aW9uOjpjcmVhdGUobmF2aWdhdGlvbkFjdGlv
bkRhdGEsIHNvdXJjZUZyYW1lSW5mby5wdHIoKSwgbnVsbHB0ciwgcmVxdWVzdCwgV2ViQ29yZTo6
VVJMKCksIHNob3VsZE9wZW5BcHBMaW5rcywgdXNlckluaXRpYXRlZEFjdGl2aXR5KTsKIAogICAg
IGF1dG8gYXBpV2luZG93RmVhdHVyZXMgPSBBUEk6OldpbmRvd0ZlYXR1cmVzOjpjcmVhdGUod2lu
ZG93RmVhdHVyZXMpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDMzMzMpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEx
MzcsNiArMTEzNywxMCBAQAogCQk3Q0IxNkZGMjE3MjRCQTI4MDA3QTBBOTUgLyogY29tLm1hY3Jv
bWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9m
aWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxNkZFNTE3MjRCOUI1
MDA3QTBBOTUgLyogY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbi5zYiAqLzsgfTsK
IAkJN0NCMTZGRjMxNzI0QkEyRjAwN0EwQTk1IC8qIGNvbS5taWNyb3NvZnQuU2lsdmVybGlnaHRQ
bHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMTZGRTYxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5taWNy
b3NvZnQuU2lsdmVybGlnaHRQbHVnaW4uc2IgKi87IH07CiAJCTdDQjE2RkY0MTcyNEJBMzAwMDdB
MEE5NSAvKiBjb20ub3JhY2xlLmphdmEuSmF2YUFwcGxldFBsdWdpbi5zYiBpbiBDb3B5IFBsdWct
aW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Q0IxNkZFNzE3MjRCOUI1MDA3QTBBOTUgLyogY29tLm9yYWNsZS5qYXZhLkphdmFBcHBsZXRQbHVn
aW4uc2IgKi87IH07CisJCTdDQjM2NUFBMUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlh
dGVkQWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Q0IzNjVBODFEMzFEQjcwMDA3MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdDQjM2NUFC
MUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMzY1QTkxRDMxREI3MDAwNzE1
OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb24ubW0gKi87IH07CisJCTdDQjM2NUFEMUQzMURD
MTAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjM2NUFDMUQzMURDMTAwMDcx
NThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaCAqLzsgfTsKKwkJN0NCMzY1
QjExRDMxREQxRTAwNzE1OENBIC8qIEFQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjM2NUFGMUQzMUREMUUwMDcx
NThDQSAvKiBBUElVc2VySW5pdGlhdGVkQWN0aW9uLmggKi87IH07CiAJCTdDQkI4MTFDMUFBMEY4
QjEwMDZCMTk0MiAvKiBJbmplY3RlZEJ1bmRsZUZpbGVIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCQjgxMUExQUEwRjhCMTAwNkIxOTQy
IC8qIEluamVjdGVkQnVuZGxlRmlsZUhhbmRsZS5jcHAgKi87IH07CiAJCTdDQkI4MTFEMUFBMEY4
QjEwMDZCMTk0MiAvKiBJbmplY3RlZEJ1bmRsZUZpbGVIYW5kbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQkI4MTFCMUFBMEY4QjEwMDZCMTk0MiAv
KiBJbmplY3RlZEJ1bmRsZUZpbGVIYW5kbGUuaCAqLzsgfTsKIAkJN0NCQjgxMjAxQUEwRjk3MDAw
NkIxOTQyIC8qIFdLQnVuZGxlRmlsZUhhbmRsZVJlZi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0JCODExRTFBQTBGOTcwMDA2QjE5NDIgLyogV0tC
dW5kbGVGaWxlSGFuZGxlUmVmLmNwcCAqLzsgfTsKQEAgLTMyMDAsNiArMzIwNCwxMCBAQAogCQk3
Q0IxNkZFNTE3MjRCOUI1MDA3QTBBOTUgLyogY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBs
dWdpbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxh
eWVyLnBsdWdpbi5zYiI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQjE2RkU2MTcy
NEI5QjUwMDdBMEE5NSAvKiBjb20ubWljcm9zb2Z0LlNpbHZlcmxpZ2h0UGx1Z2luLnNiICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IGNvbS5taWNyb3NvZnQuU2lsdmVybGlnaHRQbHVnaW4uc2I7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQjE2RkU3MTcyNEI5QjUwMDdBMEE5NSAvKiBj
b20ub3JhY2xlLmphdmEuSmF2YUFwcGxldFBsdWdpbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBjb20ub3JhY2xlLmphdmEuSmF2YUFwcGxldFBsdWdpbi5zYjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0NCMzY1QTgxRDMxREI3MDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRB
Y3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVXNlckluaXRpYXRl
ZEFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0IzNjVBOTFEMzFEQjcw
MDA3MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1VzZXJJbml0aWF0ZWRBY3Rpb24ubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDQjM2NUFDMUQzMURDMTAwMDcxNThDQSAvKiBfV0tVc2Vy
SW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDQjM2NUFGMUQzMUREMUUwMDcxNThDQSAvKiBBUElVc2VySW5pdGlhdGVkQWN0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSVVzZXJJbml0aWF0ZWRB
Y3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCQjgxMUExQUEwRjhCMTAw
NkIxOTQyIC8qIEluamVjdGVkQnVuZGxlRmlsZUhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUZpbGVIYW5kbGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0JCODExQjFBQTBGOEIxMDA2QjE5NDIgLyogSW5qZWN0
ZWRCdW5kbGVGaWxlSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
amVjdGVkQnVuZGxlRmlsZUhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Q0JCODExRTFBQTBGOTcwMDA2QjE5NDIgLyogV0tCdW5kbGVGaWxlSGFuZGxlUmVmLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLQnVuZGxlRmlsZUhhbmRsZVJlZi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MTM0LDYgKzUxNDIsOSBAQAogCQkJ
CTdDODgyREYzMUM3RTk5NUUwMDZCRjczMSAvKiBfV0tVc2VyQ29udGVudFdvcmxkLmggKi8sCiAJ
CQkJN0M4ODJERjQxQzdFOTk1RTAwNkJGNzMxIC8qIF9XS1VzZXJDb250ZW50V29ybGQubW0gKi8s
CiAJCQkJN0M4ODJERjUxQzdFOTk1RTAwNkJGNzMxIC8qIF9XS1VzZXJDb250ZW50V29ybGRJbnRl
cm5hbC5oICovLAorCQkJCTdDQjM2NUE4MUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlh
dGVkQWN0aW9uLmggKi8sCisJCQkJN0NCMzY1QTkxRDMxREI3MDAwNzE1OENBIC8qIF9XS1VzZXJJ
bml0aWF0ZWRBY3Rpb24ubW0gKi8sCisJCQkJN0NCMzY1QUMxRDMxREMxMDAwNzE1OENBIC8qIF9X
S1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oICovLAogCQkJCTJEODc4NjFCMUJEQjU0QkYw
MEQwMkFCQiAvKiBfV0tVc2VyU3R5bGVTaGVldC5oICovLAogCQkJCTJEODc4NjFDMUJEQjU0QkYw
MEQwMkFCQiAvKiBfV0tVc2VyU3R5bGVTaGVldC5tbSAqLywKIAkJCQkyRDg3ODYxRjFCREI1N0Y1
MDBEMDJBQkIgLyogX1dLVXNlclN0eWxlU2hlZXRJbnRlcm5hbC5oICovLApAQCAtNjEyOSw2ICs2
MTQwLDcgQEAKIAkJCQk3QzNBMDZBNjFBQUI5MDNFMDA5RDc0QkEgLyogQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5oICovLAogCQkJCTdDODgyREZCMUM3RTk5QTYwMDZCRjczMSAvKiBBUElV
c2VyQ29udGVudFdvcmxkLmNwcCAqLywKIAkJCQk3Qzg4MkRGQzFDN0U5OUE2MDA2QkY3MzEgLyog
QVBJVXNlckNvbnRlbnRXb3JsZC5oICovLAorCQkJCTdDQjM2NUFGMUQzMUREMUUwMDcxNThDQSAv
KiBBUElVc2VySW5pdGlhdGVkQWN0aW9uLmggKi8sCiAJCQkJN0M4OUQyQTUxQTY3ODlFQTAwM0E1
RkRFIC8qIEFQSVVzZXJTY3JpcHQuY3BwICovLAogCQkJCTdDODlEMjkyMUE2NzEyMkYwMDNBNUZE
RSAvKiBBUElVc2VyU2NyaXB0LmggKi8sCiAJCQkJMkQ4Nzg2MjExQkRCNThGRjAwRDAyQUJCIC8q
IEFQSVVzZXJTdHlsZVNoZWV0LmNwcCAqLywKQEAgLTc2NDMsNiArNzY1NSw3IEBACiAJCQkJMUEw
RUM3NUUxMjRCQzdCMjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NQcm94eS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEwNDNCNUUxMjRENUU5RDAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3NQcm94eU1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA0M0RDMTEyNEZGODc1MDBGRkJGQjUgLyog
UGx1Z2luUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDQjM2NUFEMUQzMURDMTAwMDcxNThD
QSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBOEVGQTcxMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQTRBOUYzMzEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVpcmtzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3Q0Q2MjI3ODE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2luU2Fu
ZGJveFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtNzc4NSw2ICs3Nzk4LDcgQEAKIAkJCQlC
Q0U0Njk3NzEyMTRGMjdCMDAwQjk4RUIgLyogV2ViRnJhbWVMaXN0ZW5lclByb3h5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzAzMkQ3RjEwRjQzNzhEMDA1OEMxNUEgLyogV2ViRnJhbWVMb2FkZXJD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTFGMkNCMTIxQjY3QUQwMEVCRjdFOCAvKiBX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3Q0IzNjVBQTFE
MzFEQjcwMDA3MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNCOUY2QTAxMTIzQTg0QjAwQTEzN0UwIC8qIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQ
cm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5QjM4QTExMEY1MzhCRTAwNDQzQTE1IC8qIFdl
YkZyYW1lUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjFGNzk5MUQxQjM2MTMwMDdDOUJE
MSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
QEAgLTgyMTUsNiArODIyOSw3IEBACiAJCQkJMUE0ODMyQ0MxQTlCQzQ2NTAwOEI0REZFIC8qIFdL
V2Vic2l0ZURhdGFSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNDgzMkNFMUE5QkM0ODQw
MDhCNERGRSAvKiBXS1dlYnNpdGVEYXRhUmVjb3JkSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBQTY1NEQxMUIxNEY3MTQwMEJGMUQzRSAvKiBXS1dlYnNpdGVEYXRhUmVjb3JkUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0NCMzY1QjExRDMxREQxRTAwNzE1OENBIC8qIEFQSVVz
ZXJJbml0aWF0ZWRBY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTc1QThEMkM4MTg3Q0NGQUIw
MEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1QThE
MkQ2MTg3RDFDMEUwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFFMjg2N0ExQzdGN0JBNjAwNjlBQzRGIC8qIFdLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTM0Niw2ICs5MzYxLDcgQEAKIAkJCQkx
QUIxRjc5ODFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3QjYyMDcxMjlBMEE2NzAwRDE3
NEE0IC8qIFdlYlBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdCNjI1MzEyQTQz
Qzk2MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3
Q0IzNjVBQjFEMzFEQjcwMDA3MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUJDN0I2MjE2MTJBNDIxOUEwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBQ
cm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDlFQTMxMTFBOTZEOUVCMDAyRDI4MDcgLyog
V2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEQTk0
NEJBMTg4NEVBM0MwMEVEODZEQiAvKiBXZWJQYWdlSU9TLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIwMzMz
MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk3LDYgKzk3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NjaGVtZVJlZ2lzdHJ5
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU2V0dGluZ3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+
CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CkBAIC03MTksNiArNzIwLDMzIEBAIFdlYlBhZ2VH
cm91cFByb3h5KiBXZWJQcm9jZXNzOjp3ZWJQYWdlR3IKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5nZXQoKTsKIH0KIAorc3RhdGljIHVpbnQ2NF90IG5leHRVc2VyR2VzdHVyZVRv
a2VuSWRlbnRpZmllcigpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IGlkZW50aWZpZXIgPSAxOwor
ICAgIHJldHVybiBpZGVudGlmaWVyKys7Cit9CisKK3VpbnQ2NF90IFdlYlByb2Nlc3M6OnVzZXJH
ZXN0dXJlVG9rZW5JZGVudGlmaWVyKFJlZlB0cjxVc2VyR2VzdHVyZVRva2VuPiB0b2tlbikKK3sK
KyAgICBpZiAoIXRva2VuIHx8ICF0b2tlbi0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgYXV0byByZXN1bHQgPSBtX2FjdGl2ZVVzZXJHZXN0dXJlVG9r
ZW5zLmVuc3VyZSh0b2tlbi5nZXQoKSwgW10geyByZXR1cm4gbmV4dFVzZXJHZXN0dXJlVG9rZW5J
ZGVudGlmaWVyKCk7IH0pOworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPmtleS0+YWRkRGVzdHJ1Y3Rpb25PYnNlcnZlcihbXSAoVXNlckdlc3R1
cmVUb2tlbiYgdG9rZW5CZWluZ0Rlc3Ryb3llZCkgeworICAgICAgICAgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkudXNlckdlc3R1cmVUb2tlbkRlc3Ryb3llZCh0b2tlbkJlaW5nRGVzdHJveWVk
KTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnZhbHVlOworfQorCit2b2lkIFdlYlByb2Nlc3M6OnVzZXJHZXN0dXJlVG9rZW5EZXN0cm95ZWQo
VXNlckdlc3R1cmVUb2tlbiYgdG9rZW4pCit7CisgICAgYXV0byBpZGVudGlmaWVyID0gbV9hY3Rp
dmVVc2VyR2VzdHVyZVRva2Vucy50YWtlKCZ0b2tlbik7CisgICAgcGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpEaWREZXN0cm95VXNlckdl
c3R1cmVUb2tlbihpZGVudGlmaWVyKSwgMCk7Cit9CisKIHZvaWQgV2ViUHJvY2Vzczo6Y2xlYXJS
ZXNvdXJjZUNhY2hlcyhSZXNvdXJjZUNhY2hlc1RvQ2xlYXIgcmVzb3VyY2VDYWNoZXNUb0NsZWFy
KQogewogICAgIHBsYXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hlcyhyZXNvdXJjZUNhY2hlc1RvQ2xl
YXIpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9u
IDIwMzMzMykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIGNsYXNzIENlcnRpZmljYXRlSW5mbzsKIGNsYXNz
IFBhZ2VHcm91cDsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIFNlc3Npb25JRDsKK2Ns
YXNzIFVzZXJHZXN0dXJlVG9rZW47CiBzdHJ1Y3QgUGx1Z2luSW5mbzsKIHN0cnVjdCBTZWN1cml0
eU9yaWdpbkRhdGE7CiB9CkBAIC0xNDAsNiArMTQxLDkgQEAgcHVibGljOgogICAgIFdlYlBhZ2VH
cm91cFByb3h5KiB3ZWJQYWdlR3JvdXAodWludDY0X3QgcGFnZUdyb3VwSUQpOwogICAgIFdlYlBh
Z2VHcm91cFByb3h5KiB3ZWJQYWdlR3JvdXAoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYpOwogCisg
ICAgdWludDY0X3QgdXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIoUmVmUHRyPFdlYkNvcmU6OlVz
ZXJHZXN0dXJlVG9rZW4+KTsKKyAgICB2b2lkIHVzZXJHZXN0dXJlVG9rZW5EZXN0cm95ZWQoV2Vi
Q29yZTo6VXNlckdlc3R1cmVUb2tlbiYpOworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgcGlk
X3QgcHJlc2VudGVyQXBwbGljYXRpb25QaWQoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlbnRlckFw
cGxpY2F0aW9uUGlkOyB9CiAjZW5kaWYKQEAgLTM5Myw2ICszOTcsOCBAQCBwcml2YXRlOgogCiAg
ICAgdW5zaWduZWQgbV9wYWdlc01hcmtpbmdMYXllcnNBc1ZvbGF0aWxlIHsgMCB9OwogICAgIGJv
b2wgbV9zdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciB7IGZhbHNlIH07CisKKyAgICBIYXNo
TWFwPFdlYkNvcmU6OlVzZXJHZXN0dXJlVG9rZW4gKiwgdWludDY0X3Q+IG1fYWN0aXZlVXNlckdl
c3R1cmVUb2tlbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMv
V2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHAJKHJldmlzaW9uIDIwMzMzMykKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9u
TWFuYWdlcjo6ZGlkQ2xpY2tOb3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSW5kaWNhdGUg
dGhhdCB0aGlzIGV2ZW50IGlzIGJlaW5nIGRpc3BhdGNoZWQgaW4gcmVhY3Rpb24gdG8gYSB1c2Vy
J3MgaW50ZXJhY3Rpb24gd2l0aCBhIHBsYXRmb3JtIG5vdGlmaWNhdGlvbi4KLSAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7
CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSk7CiAgICAgbm90aWZpY2F0aW9uLT5kaXNwYXRjaENsaWNrRXZlbnQoKTsKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbklEKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDIwMzMzMykKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIxOCw3ICsxMjE4LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwZXJmb3JtRnJh
bWVMb2FkVVJMUmVxdQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihyZXF1ZXN0LT5hbGxvd1BvcHVwcygpID8gRGVmaW5p
dGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHJlcXVlc3QtPmFs
bG93UG9wdXBzKCkgPyBPcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZT4oUHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQpOwogCiAgICAgLy8gRmlyc3QsIHRyeSB0byBmaW5k
IGEgdGFyZ2V0IGZyYW1lLgogICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IGZyYW1lLT5sb2FkZXIo
KS5maW5kRnJhbWVGb3JOYXZpZ2F0aW9uKHJlcXVlc3QtPnRhcmdldCgpKTsKQEAgLTE1MTMsNyAr
MTUxMyw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZXZhbHVhdGUoTlBPYmplY3QqIG5wT2IKICAgICAv
LyBwcm90ZWN0IHRoZSBwbHVnLWluIHZpZXcgZnJvbSBkZXN0cnVjdGlvbi4KICAgICBOUFJ1bnRp
bWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwbHVnaW5Qcm90ZWN0b3IoJm1fbnBSdW50aW1l
T2JqZWN0TWFwKTsKIAotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Io
YWxsb3dQb3B1cHMgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogUG9zc2libHlQ
cm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJ
bmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBPcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0
ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQpOwogICAgIHJldHVybiBtX25wUnVu
dGltZU9iamVjdE1hcC5ldmFsdWF0ZShucE9iamVjdCwgc2NyaXB0U3RyaW5nLCByZXN1bHQpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiAyMDMzMzMpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw2ICsyMjQsOCBAQCBQYWdlKiBXZWJDaHJvbWVDbGll
bnQ6OmNyZWF0ZVdpbmRvdyhGcmFtCiAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT53ZWJraXRD
YW5jZWxGdWxsU2NyZWVuKCk7CiAjZW5kaWYKIAorICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKTsKKwogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1l
Ojpmcm9tQ29yZUZyYW1lKCpmcmFtZSk7CiAKICAgICBOYXZpZ2F0aW9uQWN0aW9uRGF0YSBuYXZp
Z2F0aW9uQWN0aW9uRGF0YTsKQEAgLTIzMSwxNCArMjMzLDEzIEBAIFBhZ2UqIFdlYkNocm9tZUNs
aWVudDo6Y3JlYXRlV2luZG93KEZyYW0KICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5tb2RpZmll
cnMgPSBJbmplY3RlZEJ1bmRsZU5hdmlnYXRpb25BY3Rpb246Om1vZGlmaWVyc0Zvck5hdmlnYXRp
b25BY3Rpb24obmF2aWdhdGlvbkFjdGlvbik7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEubW91
c2VCdXR0b24gPSBJbmplY3RlZEJ1bmRsZU5hdmlnYXRpb25BY3Rpb246Om1vdXNlQnV0dG9uRm9y
TmF2aWdhdGlvbkFjdGlvbihuYXZpZ2F0aW9uQWN0aW9uKTsKICAgICBuYXZpZ2F0aW9uQWN0aW9u
RGF0YS5zeW50aGV0aWNDbGlja1R5cGUgPSBJbmplY3RlZEJ1bmRsZU5hdmlnYXRpb25BY3Rpb246
OnN5bnRoZXRpY0NsaWNrVHlwZUZvck5hdmlnYXRpb25BY3Rpb24obmF2aWdhdGlvbkFjdGlvbik7
Ci0gICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgPSBuYXZp
Z2F0aW9uQWN0aW9uLnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAgIG5hdmlnYXRpb25BY3Rp
b25EYXRhLnVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyID0gd2ViUHJvY2Vzcy51c2VyR2VzdHVy
ZVRva2VuSWRlbnRpZmllcihuYXZpZ2F0aW9uQWN0aW9uLnVzZXJHZXN0dXJlVG9rZW4oKSk7CiAg
ICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuY2FuSGFuZGxlUmVxdWVzdCA9IG1fcGFnZS0+Y2FuSGFu
ZGxlUmVxdWVzdChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpKTsKICAgICBuYXZpZ2F0aW9uQWN0
aW9uRGF0YS5zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0gbmF2aWdhdGlvbkFjdGlvbi5z
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KCk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEu
ZG93bmxvYWRBdHRyaWJ1dGUgPSBuYXZpZ2F0aW9uQWN0aW9uLmRvd25sb2FkQXR0cmlidXRlKCk7
CiAKICAgICB1aW50NjRfdCBuZXdQYWdlSUQgPSAwOwogICAgIFdlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnMgcGFyYW1ldGVyczsKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCk7CiAgICAgaWYgKCF3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZU5ld1BhZ2Uod2ViRnJhbWUt
PmZyYW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCByZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLCB3aW5kb3dGZWF0dXJlcywgbmF2aWdhdGlvbkFjdGlvbkRhdGEp
LCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQYWdlOjpSZXBseShuZXdQYWdlSUQs
IHBhcmFtZXRlcnMpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ29u
dGV4dE1lbnVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCShyZXZpc2lvbiAyMDMz
MzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRl
eHRNZW51Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFdl
YkNvbnRleHRNZW51Q2xpZW50OjpzZWFyY2hXaXRoR29vCiAgICAgU3RyaW5nIHVybCA9ICJodHRw
Oi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9IiArIGVuY29kZWQgKyAiJmllPVVURi04Jm9lPVVU
Ri04IjsKIAogICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkgewotICAgICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7CisgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5n
VXNlckdlc3R1cmUpOwogICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS51cmxTZWxl
Y3RlZChVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBTdHJpbmcoKSwgMCwgTG9ja0hpc3Rvcnk6
Ok5vLCBMb2NrQmFja0ZvcndhcmRMaXN0OjpObywgTWF5YmVTZW5kUmVmZXJyZXIsIFNob3VsZE9w
ZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93KTsKICAgICB9CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMjAzMzMzKQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyNyw3ICs3MjcsNyBAQCB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkCiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEubW9kaWZp
ZXJzID0gYWN0aW9uLT5tb2RpZmllcnMoKTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5tb3Vz
ZUJ1dHRvbiA9IGFjdGlvbi0+bW91c2VCdXR0b24oKTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0
YS5zeW50aGV0aWNDbGlja1R5cGUgPSBhY3Rpb24tPnN5bnRoZXRpY0NsaWNrVHlwZSgpOwotICAg
IG5hdmlnYXRpb25BY3Rpb25EYXRhLmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlID0gbmF2aWdhdGlv
bkFjdGlvbi5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0
YS51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllciA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVz
ZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKG5hdmlnYXRpb25BY3Rpb24udXNlckdlc3R1cmVUb2tl
bigpKTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5jYW5IYW5kbGVSZXF1ZXN0ID0gd2ViUGFn
ZS0+Y2FuSGFuZGxlUmVxdWVzdChyZXF1ZXN0KTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5z
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0gbmF2aWdhdGlvbkFjdGlvbi5zaG91bGRPcGVu
RXh0ZXJuYWxVUkxzUG9saWN5KCk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuZG93bmxvYWRB
dHRyaWJ1dGUgPSBuYXZpZ2F0aW9uQWN0aW9uLmRvd25sb2FkQXR0cmlidXRlKCk7CkBAIC03OTQs
NyArNzk0LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZAogICAg
IG5hdmlnYXRpb25BY3Rpb25EYXRhLm1vZGlmaWVycyA9IGFjdGlvbi0+bW9kaWZpZXJzKCk7CiAg
ICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEubW91c2VCdXR0b24gPSBhY3Rpb24tPm1vdXNlQnV0dG9u
KCk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuc3ludGhldGljQ2xpY2tUeXBlID0gYWN0aW9u
LT5zeW50aGV0aWNDbGlja1R5cGUoKTsKLSAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5pc1Byb2Nl
c3NpbmdVc2VyR2VzdHVyZSA9IG5hdmlnYXRpb25BY3Rpb24ucHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCk7CisgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEudXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIg
PSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcihuYXZp
Z2F0aW9uQWN0aW9uLnVzZXJHZXN0dXJlVG9rZW4oKSk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRh
dGEuY2FuSGFuZGxlUmVxdWVzdCA9IHdlYlBhZ2UtPmNhbkhhbmRsZVJlcXVlc3QocmVxdWVzdCk7
CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSA9
IG5hdmlnYXRpb25BY3Rpb24uc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSgpOwogICAgIG5h
dmlnYXRpb25BY3Rpb25EYXRhLmRvd25sb2FkQXR0cmlidXRlID0gbmF2aWdhdGlvbkFjdGlvbi5k
b3dubG9hZEF0dHJpYnV0ZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQkocmV2aXNp
b24gMjAzMzMzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsNzMgKzM0Nyw3MyBAQCB2
b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNldFdpcmVsCiAKIHZvaWQgV2ViUGxheWJh
Y2tTZXNzaW9uTWFuYWdlcjo6cGxheSh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUp
OworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1
cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGxheSgpOwogfQogCiB2b2lkIFdlYlBs
YXliYWNrU2Vzc2lvbk1hbmFnZXI6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wYXVzZSgpOwogfQogCiB2b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250
ZXh0SWQpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQ
cm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRv
cihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkudG9n
Z2xlUGxheVN0YXRlKCk7CiB9CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6YmVn
aW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2NydWJiaW5nKCk7CiB9CiAKIHZvaWQgV2ViUGxh
eWJhY2tTZXNzaW9uTWFuYWdlcjo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsK
LSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3Np
bmdVc2VyR2VzdHVyZSk7CiAgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5lbmRTY3J1YmJpbmco
KTsKIH0KIAogdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyOjpzZWVrVG9UaW1lKHVpbnQ2
NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkuc2Vla1RvVGltZSh0aW1lKTsKIH0KIAogdm9pZCBXZWJQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyOjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1l
KQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmZhc3RTZWVr
KHRpbWUpOwogfQogCiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5p
bmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRv
ciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKFByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nRm9yd2FyZCgpOwogfQogCiB2b2lkIFdl
YlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBj
b250ZXh0SWQpCiB7Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRl
bHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGlj
YXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCku
YmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7CiB9CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uTWFu
YWdlcjo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQogewotICAgIFVzZXJHZXN0dXJl
SW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsK
ICAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNjYW5uaW5nKCk7CiB9CiAKIHZvaWQgV2Vi
UGxheWJhY2tTZXNzaW9uTWFuYWdlcjo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBj
b250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBlbnN1cmVN
b2RlbChjb250ZXh0SWQpLnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgpOwogfQogCiB2b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXI6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50
NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQogewotICAgIFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBl
bnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzMzNCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE2LTA3
LTE3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYktpdCBBUEld
IEFkZCBTUEkgdG8gdHJhY2sgbXVsdGlwbGUgbmF2aWdhdGlvbnMgY2F1c2VkIGJ5IGEgc2luZ2xl
IHVzZXIgZ2VzdHVyZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjY1NTQxMzc+CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4NTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdpbnMvSG9zdGVk
L05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpldmFsdWF0ZSk6CisgICAgICAgICogUGx1Z2lucy9XZWJO
ZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBz
ZW5kRXZlbnQ6aXNEcmF3UmVjdDpdKToKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgVXNlckdlc3R1
cmVJbmRpY2F0b3IgaW50ZXJmYWNlLgorCisyMDE2LTA3LTE2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgW1dlYktpdCBBUEldIEFkZCBTUEkgdG8gdHJhY2sgbXVsdGlw
bGUgbmF2aWdhdGlvbnMgY2F1c2VkIGJ5IGEgc2luZ2xlIHVzZXIgZ2VzdHVyZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5ODU2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0
c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc2Vu
ZEV2ZW50OmlzRHJhd1JlY3Q6XSk6XAorICAgICAgICBVcGRhdGUgZm9yIG5ldyBzaWduYXR1cmUg
b2YgVXNlckdlc3R1cmVJbmRpY2F0b3IuCisKIDIwMTYtMDctMTYgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVuYW1lIGZhc3RHZXRBdHRyaWJ1dGUgdG8gYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHJldmlzaW9uIDIwMzMzMykK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC02NjQsNyArNjY0LDcgQEAgLSAoQk9PTClzZW5kRXZlbnQ6KHZvaWQq
KWV2ZW50IGlzRHJhd1JlYwogICAgIEFTU0VSVChfZXZlbnRIYW5kbGVyKTsKICAgICB7CiAgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRp
Y2F0b3IoX2V2ZW50SGFuZGxlci0+Y3VycmVudEV2ZW50SXNVc2VyR2VzdHVyZSgpID8gRGVmaW5p
dGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKKyAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihfZXZlbnRI
YW5kbGVyLT5jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlKCkgPyBPcHRpb25hbDxQcm9jZXNzaW5n
VXNlckdlc3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQpOwogICAg
ICAgICBhY2NlcHRlZEV2ZW50ID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+
ZXZlbnQocGx1Z2luLCBldmVudCk7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5j
dGlvbl07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCShyZXZpc2lvbiAyMDMz
MzMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTg4OSw3ICs4ODksNyBAQCBib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhCiAgICAgU3Ryb25nPEpTR2xvYmFsT2Jq
ZWN0PiBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKS52bSgpLCBmcmFtZS0+c2NyaXB0KCkuZ2xv
YmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJ
bmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDog
UG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGdlc3R1cmVJbmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBPcHRpb25hbDxQcm9jZXNzaW5nVXNlckdl
c3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQpOwogICAgIAogICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKHNjcmlwdCkp
OwogICAgIApJbmRleDogU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNl
L1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MTYtMDctMTcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBbV2ViS2l0
IEFQSV0gQWRkIFNQSSB0byB0cmFjayBtdWx0aXBsZSBuYXZpZ2F0aW9ucyBjYXVzZWQgYnkgYSBz
aW5nbGUgdXNlciBnZXN0dXJlCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNjU1NDEzNz4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTg1NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1
ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHA6
CisgICAgICAgIChXZWJDb250ZXh0TWVudUNsaWVudDo6c2VhcmNoV2l0aEdvb2dsZSk6CisgICAg
ICAgIFVwZGF0ZSBmb3IgbmV3IFVzZXJHZXN0dXJlSW5kaWNhdG9yIGludGVyZmFjZS4KKwogMjAx
Ni0wNy0xNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW5h
bWUgZmFzdEdldEF0dHJpYnV0ZSB0byBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDIw
MzMzMykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwMiw3ICs0MDIsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1
ZXN0KFBsdWdpblJlCiAgICAgVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1
ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CiAgICAgU3RyaW5nIGpzU3RyaW5nID0gc2Ny
aXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHJlcXVlc3RVUkwpOwogCi0gICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihyZXF1ZXN0LT5zaG91bGRBbGxvd1BvcHVwcygpID8g
RGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHJlcXVl
c3QtPnNob3VsZEFsbG93UG9wdXBzKCkgPyBPcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVT
dGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQpOwogCiAgICAgaWYgKGpzU3Ry
aW5nLmlzTnVsbCgpKSB7CiAgICAgICAgIC8vIGlmIHRoaXMgaXMgbm90IGEgdGFyZ2V0ZWQgcmVx
dWVzdCwgY3JlYXRlIGEgc3RyZWFtIGZvciBpdC4gb3RoZXJ3aXNlLApJbmRleDogU291cmNlL1dl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xp
ZW50LmNwcAkocmV2aXNpb24gMjAzMzMzKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2
OSw3IEBAIHZvaWQgV2ViQ29udGV4dE1lbnVDbGllbnQ6OnNlYXJjaFdpdGhHb28KICAgICB1cmwu
YXBwZW5kKCImaWU9VVRGLTgmb2U9VVRGLTgiKTsKIAogICAgIGlmIChQYWdlKiBwYWdlID0gZnJh
bWUtPnBhZ2UoKSkgewotICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVm
aW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGluZGljYXRvcihQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgICAgICBwYWdlLT5tYWlu
RnJhbWUoKS5sb2FkZXIoKS51cmxTZWxlY3RlZChVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBT
dHJpbmcoKSwgMCwgTG9ja0hpc3Rvcnk6Ok5vLCBMb2NrQmFja0ZvcndhcmRMaXN0OjpObywgTWF5
YmVTZW5kUmVmZXJyZXIsIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5vdEFs
bG93KTsKICAgICB9CiB9CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDMzMzMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxNi0wNy0xNyAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgorCisgICAgICAgIFtXZWJLaXQgQVBJXSBBZGQgU1BJIHRvIHRyYWNrIG11bHRp
cGxlIG5hdmlnYXRpb25zIGNhdXNlZCBieSBhIHNpbmdsZSB1c2VyIGdlc3R1cmUKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI2NTU0MTM3PgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU5ODU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9tYWMvV0syQnJvd3NlcldpbmRvd0NvbnRy
b2xsZXIubToKKyAgICAgICAgKC1bV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIgd2ViVmlldzpj
cmVhdGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRpb246Zm9yTmF2aWdhdGlvbkFjdGlvbjp3aW5kb3dG
ZWF0dXJlczpdKToKKyAgICAgICAgQWRkIGJhc2ljIHdpbmRvdy5vcGVuIGltcGxlbWVudGF0aW9u
LgorCisgICAgICAgICgtW1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyIHdlYlZpZXc6ZGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpkZWNpc2lvbkhhbmRsZXI6XSk6CisgICAgICAgIEFk
ZCBiYXNpYyBuYXZpZ2F0aW9uIHBvbGljeSBpbXBsZW1lbnRhdGlvbiB3aGljaCBpbXBsZW1lbnRz
IGEgcnVsZSB3aGVyZSBhIHVzZXIgZ2VzdHVyZSBpcyBvbmx5IGFsbG93ZWQKKyAgICAgICAgdG8g
b3BlbiBhIHNpbmdsZSBub24td2ViIFVSTCwgYWxsIG90aGVycyBhcmUgZHJvcHBlZC4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1VzZXJJbml0
aWF0ZWRBY3Rpb25Jbk5hdmlnYXRpb25BY3Rpb24ubW06IEFkZGVkLgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL29wZW4tbXVsdGlwbGUtZXh0ZXJuYWwtdXJsLmh0
bWw6IEFkZGVkLgorICAgICAgICBBZGQgQVBJIGZvciB0aGUgbmV3IFNQSS4KKwogMjAxNi0wNy0x
NyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlND
XSBFbmFibGUgdGVzdDI2MiBtb2R1bGUgdGVzdHMKSW5kZXg6IFRvb2xzL01pbmlCcm93c2VyL21h
Yy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL01pbmlC
cm93c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tCShyZXZpc2lvbiAyMDMzMzMp
CisrKyBUb29scy9NaW5pQnJvd3Nlci9tYWMvV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiQXBwRGVsZWdhdGUuaCIK
ICNpbXBvcnQgIlNldHRpbmdzQ29udHJvbGxlci5oIgogI2ltcG9ydCA8V2ViS2l0L1dLRnJhbWVJ
bmZvLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvbkRlbGVnYXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQ
cmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGUuaD4KQEAg
LTM3LDYgKzM4LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dlYk5TVVJMRXh0cmFzLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLVXNlckluaXRpYXRlZEFjdGlv
bi5oPgogCiBzdGF0aWMgdm9pZCoga2V5VmFsdWVPYnNlcnZpbmdDb250ZXh0ID0gJmtleVZhbHVl
T2JzZXJ2aW5nQ29udGV4dDsKIApAQCAtMzg4LDcgKzM5MCw3IEBAIC0gKHZvaWQpdXBkYXRlVGl0
bGU6KE5TU3RyaW5nICopdGl0bGUKICAgICBpZiAoIXRpdGxlKQogICAgICAgICB0aXRsZSA9IF93
ZWJWaWV3LlVSTC5sYXN0UGF0aENvbXBvbmVudDsKICAgICAKLSAgICBzZWxmLndpbmRvdy50aXRs
ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQCBbV0syICVkXSIsIF9pc1ByaXZh
dGVCcm93c2luZ1dpbmRvdyA/IEAi8J+ZiCAiIDogQCIiLCB0aXRsZSwgX3dlYlZpZXcuX3dlYlBy
b2Nlc3NJZGVudGlmaWVyXTsKKyAgICBzZWxmLndpbmRvdy50aXRsZSA9IFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiJUAlQCBbV0syICVkXSIsIF9pc1ByaXZhdGVCcm93c2luZ1dpbmRvdyA/
IEAi75mIICIgOiBAIiIsIHRpdGxlLCBfd2ViVmlldy5fd2ViUHJvY2Vzc0lkZW50aWZpZXJdOwog
fQogCiAtICh2b2lkKW9ic2VydmVWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aCBv
Zk9iamVjdDooaWQpb2JqZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5ICopY2hhbmdlIGNvbnRleHQ6
KHZvaWQgKiljb250ZXh0CkBAIC00MDIsNiArNDA0LDE1IEBAIC0gKHZvaWQpb2JzZXJ2ZVZhbHVl
Rm9yS2V5UGF0aDooTlNTdHJpbmcKICAgICAgICAgW3NlbGYgdXBkYXRlVGV4dEZpZWxkRnJvbVVS
TDpfd2ViVmlldy5VUkxdOwogfQogCistIChudWxsYWJsZSBXS1dlYlZpZXcgKil3ZWJWaWV3OihX
S1dlYlZpZXcgKil3ZWJWaWV3IGNyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlvbjooV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24gZm9yTmF2aWdhdGlvbkFjdGlvbjooV0tO
YXZpZ2F0aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlvbiB3aW5kb3dGZWF0dXJlczooV0tXaW5k
b3dGZWF0dXJlcyAqKXdpbmRvd0ZlYXR1cmVzCit7CisgICAgV0syQnJvd3NlcldpbmRvd0NvbnRy
b2xsZXIgKmNvbnRyb2xsZXIgPSBbW1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBp
bml0V2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl07CisgICAgW2NvbnRyb2xsZXIgYXdh
a2VGcm9tTmliXTsKKyAgICBbY29udHJvbGxlci53aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6
c2VsZl07CisKKyAgICByZXR1cm4gY29udHJvbGxlci0+X3dlYlZpZXc7Cit9CisKIC0gKHZvaWQp
d2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8g
KilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRs
ZXIKIHsKICAgICBOU0FsZXJ0KiBhbGVydCA9IFtbTlNBbGVydCBhbGxvY10gaW5pdF07CkBAIC01
MzUsNiArNTQ2LDIzIEBAIC0gKElCQWN0aW9uKXByaW50V2ViVmlldzooaWQpc2VuZGVyCiAKICNw
cmFnbWEgbWFyayBXS05hdmlnYXRpb25EZWxlZ2F0ZQogCistICh2b2lkKXdlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjooV0tOYXZpZ2F0
aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlvbiBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKFdL
TmF2aWdhdGlvbkFjdGlvblBvbGljeSkpZGVjaXNpb25IYW5kbGVyCit7CisgICAgTE9HKEAiZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiIpOworCisgICAgaWYgKG5hdmlnYXRpb25BY3Rp
b24uX2NhbkhhbmRsZVJlcXVlc3QpIHsKKyAgICAgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdh
dGlvbkFjdGlvblBvbGljeUFsbG93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChuYXZpZ2F0aW9uQWN0aW9uLl91c2VySW5pdGlhdGVkQWN0aW9uICYmICFuYXZpZ2F0aW9uQWN0
aW9uLl91c2VySW5pdGlhdGVkQWN0aW9uLmlzQ29uc3VtZWQpIHsKKyAgICAgICAgW25hdmlnYXRp
b25BY3Rpb24uX3VzZXJJbml0aWF0ZWRBY3Rpb24gY29uc3VtZV07CisgICAgICAgIFtbTlNXb3Jr
c3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuVVJMOm5hdmlnYXRpb25BY3Rpb24ucmVxdWVzdC5V
UkxdOworICAgIH0KKworICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xp
Y3lDYW5jZWwpOworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlOihXS05hdmlnYXRpb25SZXNwb25zZSAqKW5h
dmlnYXRpb25SZXNwb25zZSBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKFdLTmF2aWdhdGlvblJl
c3BvbnNlUG9saWN5KSlkZWNpc2lvbkhhbmRsZXIKIHsKICAgICBMT0coQCJkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uUmVzcG9uc2UiKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMDMzMzMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjAxLDYgKzIwMSw4IEBACiAJ
CTdDOUVEOThCMTdBMTlGNEIwMEU0REMzMyAvKiBhdHRyaWJ1dGVkU3RyaW5nU3RyaWtldGhyb3Vn
aC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDOUVEOThBMTdBMTlEMDYwMEU0REMzMyAvKiBhdHRyaWJ1dGVkU3RyaW5nU3RyaWtldGhy
b3VnaC5odG1sICovOyB9OwogCQk3Q0IxODRDNjFBQTNGMjEwMDA2NkVERkQgLyogQ29udGVudEV4
dGVuc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0NCMTg0QzQxQUEzRjIxMDAwNjZFREZEIC8qIENvbnRlbnRFeHRlbnNpb25zLmNwcCAqLzsg
fTsKIAkJN0NDQjREQTkxQzgzQUU3MzAwQ0M2OTE4IC8qIFBhZ2VHcm91cC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0NCNERBNzFDODNBRTczMDBD
QzY5MTggLyogUGFnZUdyb3VwLmNwcCAqLzsgfTsKKwkJN0NDQjk5MjExRDNCNDFGNjAwMzkyMkY2
IC8qIFVzZXJJbml0aWF0ZWRBY3Rpb25Jbk5hdmlnYXRpb25BY3Rpb24ubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0NCOTkyMDFEM0I0MUY2MDAzOTIy
RjYgLyogVXNlckluaXRpYXRlZEFjdGlvbkluTmF2aWdhdGlvbkFjdGlvbi5tbSAqLzsgfTsKKwkJ
N0NDQjk5MjMxRDNCNEE0NjAwMzkyMkY2IC8qIG9wZW4tbXVsdGlwbGUtZXh0ZXJuYWwtdXJsLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NDQjk5MjIxRDNCNDRFNzAwMzkyMkY2IC8qIG9wZW4tbXVsdGlwbGUtZXh0ZXJuYWwtdXJsLmh0
bWwgKi87IH07CiAJCTdDQ0U3RUE0MUE0MTE5RjMwMDQ0N0M0QyAvKiBJbnN0YW5jZU1ldGhvZFN3
aXp6bGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzA4NTg3RkYxM0ZFQzNBNjAwMUVGNEU1IC8qIEluc3RhbmNlTWV0aG9kU3dpenpsZXIubW0gKi87
IH07CiAJCTdDQ0U3RUE1MUE0MTFBMDgwMDQ0N0M0QyAvKiBKYXZhU2NyaXB0VGVzdE1hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwODEyMjQwMTNG
QzE3MjQwMERDMzlBRSAvKiBKYXZhU2NyaXB0VGVzdE1hYy5tbSAqLzsgfTsKIAkJN0NDRTdFQTYx
QTQxMUEwRjAwNDQ3QzRDIC8qIFBsYXRmb3JtVXRpbGl0aWVzTWFjLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMzE4ODQxMTcxMTRCNjAwQjY5NzI3
IC8qIFBsYXRmb3JtVXRpbGl0aWVzTWFjLm1tICovOyB9OwpAQCAtNDg2LDYgKzQ4OCw3IEBACiAJ
CQlkc3RQYXRoID0gVGVzdFdlYktpdEFQSS5yZXNvdXJjZXM7CiAJCQlkc3RTdWJmb2xkZXJTcGVj
ID0gNzsKIAkJCWZpbGVzID0gKAorCQkJCTdDQ0I5OTIzMUQzQjRBNDYwMDM5MjJGNiAvKiBvcGVu
LW11bHRpcGxlLWV4dGVybmFsLXVybC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTkz
MkFFNTNEMUQzNzEwNDcwMDVERkZBRiAvKiBmb2N1cy1pbnB1dHMuaHRtbCBpbiBDb3B5IFJlc291
cmNlcyAqLywKIAkJCQk0NkM1MTlFNjFEMzU2M0ZEMDBEQUE1MUEgLyogTG9jYWxTdG9yYWdlTnVs
bEVudHJpZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk0NkM1MTlFNzFEMzU2M0ZE
MDBEQUE1MUEgLyogTG9jYWxTdG9yYWdlTnVsbEVudHJpZXMubG9jYWxzdG9yYWdlIGluIENvcHkg
UmVzb3VyY2VzICovLApAQCAtODIyLDYgKzgyNSw4IEBACiAJCTdDQkJBMDc2MTlCQjhBOTEwMEJC
RjAyNSAvKiBPU09iamVjdFB0ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPU09iamVjdFB0ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQzNF
MUZBMTk3RTIzNDEwMEJFNjI1MiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVc2VyQ29udGVudENvbnRyb2xsZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQ0I0REE3MUM4M0FFNzMwMENDNjkxOCAv
KiBQYWdlR3JvdXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFn
ZUdyb3VwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NDQjk5MjAxRDNCNDFG
NjAwMzkyMkY2IC8qIFVzZXJJbml0aWF0ZWRBY3Rpb25Jbk5hdmlnYXRpb25BY3Rpb24ubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVc2VySW5pdGlhdGVkQWN0aW9u
SW5OYXZpZ2F0aW9uQWN0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0NC
OTkyMjFEM0I0NEU3MDAzOTIyRjYgLyogb3Blbi1tdWx0aXBsZS1leHRlcm5hbC11cmwuaHRtbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJvcGVuLW11bHRpcGxlLWV4dGVybmFsLXVybC5o
dG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NDRTdFOEMxQTQxMTQ0RTAwNDQ3
QzRDIC8qIGxpYlRlc3RXZWJLaXRBUEkuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBl
eHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0g
bGliVGVzdFdlYktpdEFQSS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQk3Q0NFN0VBMzFBNDExNUNCMDA0NDdDNEMgLyogVGVzdFdlYktpdEFQSUxpYnJhcnkueGNjb25m
aWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBwYXRoID0gVGVzdFdlYktpdEFQSUxpYnJhcnkueGNjb25maWc7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRUZBOTY0MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEyMTgsNiArMTIyMyw3IEBACiAJCQkJN0M4ODJFMDMxQzgwQzYyNDAw
NkJGNzMxIC8qIFVzZXJDb250ZW50V29ybGQubW0gKi8sCiAJCQkJN0M4ODJFMDQxQzgwQzYyNDAw
NkJGNzMxIC8qIFVzZXJDb250ZW50V29ybGRQbHVnSW4ubW0gKi8sCiAJCQkJN0M4ODJFMDUxQzgw
QzYyNDAwNkJGNzMxIC8qIFVzZXJDb250ZW50V29ybGRQcm90b2NvbC5oICovLAorCQkJCTdDQ0I5
OTIwMUQzQjQxRjYwMDM5MjJGNiAvKiBVc2VySW5pdGlhdGVkQWN0aW9uSW5OYXZpZ2F0aW9uQWN0
aW9uLm1tICovLAogCQkJCTkzRTk0M0YxMUNEM0U4N0UwMEFDMDhDMiAvKiBWaWRlb0NvbnRyb2xz
TWFuYWdlci5tbSAqLywKIAkJCQkyRDAwMDY1RDFDMUY1ODk0MDA4OEU2QTcgLyogV0tQREZWaWV3
UmVzaXplQ3Jhc2gubW0gKi8sCiAJCQkJN0M0MTdGMzExRDE5RTE0ODAwQjhFRjUzIC8qIFdLV2Vi
Vmlld0RlZmF1bHROYXZpZ2F0aW9uRGVsZWdhdGUubW0gKi8sCkBAIC0xMjk4LDMzICsxMzA0LDM0
IEBACiAJCUExNkY2NkI4MUM0MEU5RTEwMEJENEQyNCAvKiBSZXNvdXJjZXMgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTkzNTc1QzU1MUQzMDM2NkUwMDBE
NjA0RCAvKiBmb2N1cy1pbnB1dHMuaHRtbCAqLywKIAkJCQk5M0NGQTg2NjFDRUI5REUxMDAwNTY1
QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sICovLAotCQkJCTk5ODRGQUNEMUNGRkIw
MzgwMDhEMTk4QyAvKiBlZGl0YWJsZS1ib2R5Lmh0bWwgKi8sCi0JCQkJQ0RFMTk1QjIxQ0ZFMEFE
RTAwNTNEMjU2IC8qIEZ1bGxzY3JlZW5Ub3BDb250ZW50SW5zZXQuaHRtbCAqLywKIAkJCQlBMTZG
NjZCOTFDNDBFQTIwMDBCRDREMjQgLyogQ29udGVudEZpbHRlcmluZy5odG1sICovLAogCQkJCTU3
MTRFQ0I4MUNBOEI1ODgwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1s
ICovLAogCQkJCTU3MTRFQ0JDMUNBOEMyMTgwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmln
aW5hbFVSTDIuaHRtbCAqLywKIAkJCQk1NzE0RUNCQTFDQThCRkQxMDAwNTFBQzggLyogRG93bmxv
YWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sICovLAotCQkJCTUxQTU4NzgyMUQyNzJFQjUw
MDRCQTlBRiAvKiBJbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLTEuaHRtbCAqLywKKwkJCQk5
OTg0RkFDRDFDRkZCMDM4MDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1sICovLAorCQkJCTkz
NTc1QzU1MUQzMDM2NkUwMDBENjA0RCAvKiBmb2N1cy1pbnB1dHMuaHRtbCAqLywKKwkJCQlDREUx
OTVCMjFDRkUwQURFMDA1M0QyNTYgLyogRnVsbHNjcmVlblRvcENvbnRlbnRJbnNldC5odG1sICov
LAogCQkJCTUxMDQ3Nzc2MUQyOThFNTcwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5odG1s
ICovLAogCQkJCTUxMDQ3NzZGMUQyOThEODUwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5z
cWxpdGUzICovLAogCQkJCTUxMDQ3NzcwMUQyOThEODUwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNv
dmVyeS5zcWxpdGUzLXNobSAqLywKIAkJCQk1MTA0Nzc3MTFEMjk4RDg1MDA5NzQ3RUIgLyogSURC
RGVsZXRlUmVjb3Zlcnkuc3FsaXRlMy13YWwgKi8sCisJCQkJNTFBNTg3ODIxRDI3MkVCNTAwNEJB
OUFGIC8qIEluZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwtMS5odG1sICovLAogCQkJCTUxQkNF
RTRDMUM4NEY1MkMwMDQyQzgyRSAvKiBJbmRleGVkREJNdWx0aVByb2Nlc3MtMS5odG1sICovLAog
CQkJCTUxQkNFRTREMUM4NEY1MkMwMDQyQzgyRSAvKiBJbmRleGVkREJNdWx0aVByb2Nlc3MtMi5o
dG1sICovLAogCQkJCTUxQTU4NzdDMUQxQjNEOEQwMDRCQTlBRiAvKiBJbmRleGVkREJNdWx0aVBy
b2Nlc3MtMy5odG1sICovLAogCQkJCTUxQjFFRTk0MUM4MEZBREQwMDY0RkI5OCAvKiBJbmRleGVk
REJQZXJzaXN0ZW5jZS0xLmh0bWwgKi8sCiAJCQkJNTFCMUVFOTUxQzgwRkFERDAwNjRGQjk4IC8q
IEluZGV4ZWREQlBlcnNpc3RlbmNlLTIuaHRtbCAqLywKKwkJCQk5MzZGNzI3RTFDRDdEOUQwMDA2
OEEwRkIgLyogbGFyZ2UtdmlkZW8td2l0aC1hdWRpby5odG1sICovLAorCQkJCTkzNkY3MjdGMUNE
N0Q5RDAwMDY4QTBGQiAvKiBsYXJnZS12aWRlby13aXRoLWF1ZGlvLm1wNCAqLywKKwkJCQk5MzYy
NUQyNjFDRDk3M0FGMDA2REMxRjEgLyogbGFyZ2UtdmlkZW8td2l0aG91dC1hdWRpby5odG1sICov
LAogCQkJCTUxRTZBODk1MUQyRjFDNzcwMEMwMDRCNiAvKiBMb2NhbFN0b3JhZ2VDbGVhci5odG1s
ICovLAogCQkJCTQ2QzUxOUUyMUQzNTYyOTYwMERBQTUxQSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50
cmllcy5odG1sICovLAogCQkJCTQ2QzUxOUUzMUQzNTYyOTYwMERBQTUxQSAvKiBMb2NhbFN0b3Jh
Z2VOdWxsRW50cmllcy5sb2NhbHN0b3JhZ2UgKi8sCiAJCQkJNDZDNTE5RTQxRDM1NjI5NjAwREFB
NTFBIC8qIExvY2FsU3RvcmFnZU51bGxFbnRyaWVzLmxvY2Fsc3RvcmFnZS1zaG0gKi8sCisJCQkJ
N0NDQjk5MjIxRDNCNDRFNzAwMzkyMkY2IC8qIG9wZW4tbXVsdGlwbGUtZXh0ZXJuYWwtdXJsLmh0
bWwgKi8sCiAJCQkJNTE3MTRFQjIxQ0Y4Qzc2MTAwNDcyM0M0IC8qIFdlYlByb2Nlc3NLaWxsSURC
Q2xlYW51cC0xLmh0bWwgKi8sCiAJCQkJNTE3MTRFQjMxQ0Y4Qzc2MTAwNDcyM0M0IC8qIFdlYlBy
b2Nlc3NLaWxsSURCQ2xlYW51cC0yLmh0bWwgKi8sCi0JCQkJOTM2RjcyN0UxQ0Q3RDlEMDAwNjhB
MEZCIC8qIGxhcmdlLXZpZGVvLXdpdGgtYXVkaW8uaHRtbCAqLywKLQkJCQk5MzZGNzI3RjFDRDdE
OUQwMDA2OEEwRkIgLyogbGFyZ2UtdmlkZW8td2l0aC1hdWRpby5tcDQgKi8sCi0JCQkJOTM2MjVE
MjYxQ0Q5NzNBRjAwNkRDMUYxIC8qIGxhcmdlLXZpZGVvLXdpdGhvdXQtYXVkaW8uaHRtbCAqLywK
IAkJCSk7CiAJCQluYW1lID0gUmVzb3VyY2VzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTE5NzEsMTAgKzE5NzgsMTAgQEAKIAkJCXByb2plY3RSb290ID0gIiI7CiAJCQl0YXJnZXRz
ID0gKAogCQkJCTdDODNFMDJCMUQwQTVFMTAwMEZFQkNGMyAvKiBBbGwgKi8sCi0JCQkJOERENzZG
OTYwNDg2QUE3NjAwRDk2QjVFIC8qIFRlc3RXZWJLaXRBUEkgKi8sCiAJCQkJN0NDRTdFOEIxQTQx
MTQ0RTAwNDQ3QzRDIC8qIFRlc3RXZWJLaXRBUElMaWJyYXJ5ICovLAotCQkJCTdDODNERjk1MUQw
QTVBRTQwMEZFQkNGMyAvKiBUZXN0V1RGICovLAogCQkJCTdDODNERTk1MUQwQTU5MEMwMEZFQkNG
MyAvKiBUZXN0V1RGTGlicmFyeSAqLywKKwkJCQk4REQ3NkY5NjA0ODZBQTc2MDBEOTZCNUUgLyog
VGVzdFdlYktpdEFQSSAqLywKKwkJCQk3QzgzREY5NTFEMEE1QUU0MDBGRUJDRjMgLyogVGVzdFdU
RiAqLywKIAkJCQlCQzU3NTk3RjEyNkU3NEFGMDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGVUZXN0
V2ViS2l0QVBJICovLAogCQkJCUExM0VCQjQ4MUI4NzMzOUUwMDA5NzExMCAvKiBXZWJQcm9jZXNz
UGx1Z0luICovLAogCQkJKTsKQEAgLTIyMzIsNiArMjIzOSw3IEBACiAJCQkJN0NDRTdGMkQxQTQx
MUIxMDAwNDQ3QzRDIC8qIFVzZXJDb250ZW50VGVzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdD
Q0U3RjE3MUE0MTFBRTYwMDQ0N0M0QyAvKiBVc2VyTWVkaWEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0M4M0UwQzQxRDBBNjU0MjAwRkVCQ0YzIC8qIFJlcXVpcmVzVXNlckFjdGlvbkZvclBsYXli
YWNrLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJN0NDQjk5MjExRDNCNDFGNjAwMzkyMkY2IC8qIFVz
ZXJJbml0aWF0ZWRBY3Rpb25Jbk5hdmlnYXRpb25BY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk3Q0NFN0YxODFBNDExQUU2MDA0NDdDNEMgLyogVXNlck1lc3NhZ2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYxMzlFNzcxQTQyM0E1QjAwRjU5MEY1IC8qIFdlYWtPYmpDUHRyLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0NDRTdGMTkxQTQxMUFFNjAwNDQ3QzRDIC8qIFdlYkFyY2hpdmUuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJD
b2NvYS9Vc2VySW5pdGlhdGVkQWN0aW9uSW5OYXZpZ2F0aW9uQWN0aW9uLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1VzZXJJbml0aWF0ZWRB
Y3Rpb25Jbk5hdmlnYXRpb25BY3Rpb24ubW0JKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvVXNlckluaXRpYXRlZEFjdGlvbkluTmF2aWdhdGlv
bkFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAiUGxh
dGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3QuaCIKKyNpbXBvcnQgPFdlYktpdC9XS05h
dmlnYXRpb25BY3Rpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJJbml0aWF0ZWRBY3Rpb24uaD4KKyNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKK3N0YXRpYyBib29sIGZp
bmlzaGVkTmF2aWdhdGlvbjsKKworQGludGVyZmFjZSBVc2VySW5pdGlhdGVkQWN0aW9uSW5OYXZp
Z2F0aW9uQWN0aW9uRGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGU+CitA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgbnVsbGFibGUpIHZvaWQgKF5wb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uKShXS05hdmlnYXRpb25BY3Rpb24gKiwgdm9pZCAoXikoV0tOYXZpZ2F0aW9u
QWN0aW9uUG9saWN5KSk7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBVc2VySW5pdGlhdGVkQWN0
aW9uSW5OYXZpZ2F0aW9uQWN0aW9uRGVsZWdhdGUKKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZp
ZXcgKil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246KFdLTmF2aWdhdGlv
bkFjdGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gZGVjaXNpb25IYW5kbGVyOih2b2lkICheKShXS05h
dmlnYXRpb25BY3Rpb25Qb2xpY3kpKWRlY2lzaW9uSGFuZGxlcgoreworICAgIGlmIChfcG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbikgeworICAgICAgICBfcG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bihuYXZpZ2F0aW9uQWN0aW9uLCBkZWNpc2lvbkhhbmRsZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93
KTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmlzaE5h
dmlnYXRpb246KFdLTmF2aWdhdGlvbiAqKW5hdmlnYXRpb24KK3sKKyAgICBmaW5pc2hlZE5hdmln
YXRpb24gPSB0cnVlOworfQorCitAZW5kCisKK2NsYXNzIFVzZXJJbml0aWF0ZWRBY3Rpb25UZXN0
IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIFJldGFpblB0cjxXS1dlYlZp
ZXc+IHdlYlZpZXc7CisgICAgUmV0YWluUHRyPE5TV2luZG93PiB3aW5kb3c7CisgICAgUmV0YWlu
UHRyPFVzZXJJbml0aWF0ZWRBY3Rpb25Jbk5hdmlnYXRpb25BY3Rpb25EZWxlZ2F0ZT4gZGVsZWdh
dGU7CisgICAgUmV0YWluUHRyPE5TVVJMPiBVUkw7CisKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAo
KQorICAgIHsKKyAgICAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKworICAgICAgICB3aW5k
b3cgPSBhZG9wdE5TKFtbTlNXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6W3dlYlZp
ZXcgZnJhbWVdIHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNr
aW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpZRVNdKTsKKyAgICAgICAgW1t3aW5kb3cgY29udGVudFZp
ZXddIGFkZFN1YnZpZXc6d2ViVmlldy5nZXQoKV07CisKKyAgICAgICAgZGVsZWdhdGUgPSBhZG9w
dE5TKFtbVXNlckluaXRpYXRlZEFjdGlvbkluTmF2aWdhdGlvbkFjdGlvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7CisgICAgICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0
ZS5nZXQoKV07CisKKyAgICAgICAgVVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JS
ZXNvdXJjZTpAIm9wZW4tbXVsdGlwbGUtZXh0ZXJuYWwtdXJsIiB3aXRoRXh0ZW5zaW9uOkAiaHRt
bCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICB9CisKKyAg
ICBOU1VSTCAqVVJMV2l0aEZyYWdtZW50KE5TU3RyaW5nICpmcmFnbWVudCkKKyAgICB7CisgICAg
ICAgIE5TVVJMQ29tcG9uZW50cyAqVVJMQ29tcG9uZW50cyA9IFtbTlNVUkxDb21wb25lbnRzIGFs
bG9jXSBpbml0V2l0aFVSTDpVUkwuZ2V0KCkgcmVzb2x2aW5nQWdhaW5zdEJhc2VVUkw6Tk9dOwor
ICAgICAgICBVUkxDb21wb25lbnRzLmZyYWdtZW50ID0gZnJhZ21lbnQ7CisgICAgICAgIHJldHVy
biBVUkxDb21wb25lbnRzLlVSTDsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRUZXN0KE5TU3RyaW5n
ICp0ZXN0KQorICAgIHsKKyAgICAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDpVUkxXaXRoRnJhZ21lbnQodGVzdCldXTsKKyAgICAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZE5hdmlnYXRpb24pOworICAgICAgICBmaW5pc2hl
ZE5hdmlnYXRpb24gPSBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lkIGNsaWNrKCkKKyAgICB7Cisg
ICAgICAgIE5TUG9pbnQgY2xpY2tQb2ludCA9IE5TTWFrZVBvaW50KDEwMCwgMTAwKTsKKworICAg
ICAgICBbW3dlYlZpZXcgaGl0VGVzdDpjbGlja1BvaW50XSBtb3VzZURvd246W05TRXZlbnQgbW91
c2VFdmVudFdpdGhUeXBlOk5TTGVmdE1vdXNlRG93biBsb2NhdGlvbjpjbGlja1BvaW50IG1vZGlm
aWVyRmxhZ3M6MCB0aW1lc3RhbXA6MCB3aW5kb3dOdW1iZXI6W3dpbmRvdyB3aW5kb3dOdW1iZXJd
IGNvbnRleHQ6bmlsIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDoxIHByZXNzdXJlOjFdXTsKKyAg
ICAgICAgW1t3ZWJWaWV3IGhpdFRlc3Q6Y2xpY2tQb2ludF0gbW91c2VVcDpbTlNFdmVudCBtb3Vz
ZUV2ZW50V2l0aFR5cGU6TlNMZWZ0TW91c2VVcCBsb2NhdGlvbjpjbGlja1BvaW50IG1vZGlmaWVy
RmxhZ3M6MCB0aW1lc3RhbXA6MCB3aW5kb3dOdW1iZXI6W3dpbmRvdyB3aW5kb3dOdW1iZXJdIGNv
bnRleHQ6bmlsIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDoxIHByZXNzdXJlOjFdXTsKKyAgICB9
Cit9OworCitURVNUX0YoVXNlckluaXRpYXRlZEFjdGlvblRlc3QsIE1haWx0b0luTm9ybWFsTG9v
cCkKK3sKKyAgICBsb2FkVGVzdChAIm5vcm1hbExvb3AiKTsKKworICAgIF9fYmxvY2sgX1dLVXNl
ckluaXRpYXRlZEFjdGlvbiAqaW5pdGlhbFVzZXJJbml0aWF0ZWRBY3Rpb24gPSBuaWw7CisgICAg
X19ibG9jayB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgX19ibG9jayBib29sIGZpbmlzaGVkUG9s
aWN5ID0gZmFsc2U7CisgICAgZGVsZWdhdGUuZ2V0KCkucG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
biA9IF4oV0tOYXZpZ2F0aW9uQWN0aW9uICpuYXZpZ2F0aW9uQWN0aW9uLCB2b2lkICheZGVjaXNp
b25IYW5kbGVyKShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kpKSB7CisgICAgICAgIGlmIChbbmF2
aWdhdGlvbkFjdGlvbi5yZXF1ZXN0LlVSTC5zY2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiYWJvdXQi
XSkgeworICAgICAgICAgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGlj
eUFsbG93KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgRVhQRUNUX1dLX1NUUkVRKEAibWFpbHRvIiwgbmF2aWdhdGlvbkFjdGlvbi5yZXF1ZXN0LlVS
TC5zY2hlbWUpOworICAgICAgICBFWFBFQ1RfRkFMU0UobmF2aWdhdGlvbkFjdGlvbi5fY2FuSGFu
ZGxlUmVxdWVzdCk7CisgICAgICAgIAorICAgICAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAg
ICAgICAgRVhQRUNUX1RSVUUobmF2aWdhdGlvbkFjdGlvbi5faXNVc2VySW5pdGlhdGVkKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChuYXZpZ2F0aW9uQWN0aW9uLl91c2VySW5pdGlhdGVk
QWN0aW9uKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShuYXZpZ2F0aW9uQWN0aW9uLl91c2Vy
SW5pdGlhdGVkQWN0aW9uLmNvbnN1bWVkKTsKKworICAgICAgICAgICAgaW5pdGlhbFVzZXJJbml0
aWF0ZWRBY3Rpb24gPSBuYXZpZ2F0aW9uQWN0aW9uLl91c2VySW5pdGlhdGVkQWN0aW9uOworCisg
ICAgICAgICAgICBbbmF2aWdhdGlvbkFjdGlvbi5fdXNlckluaXRpYXRlZEFjdGlvbiBjb25zdW1l
XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKG5hdmlnYXRpb25B
Y3Rpb24uX2lzVXNlckluaXRpYXRlZCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW5pdGlhbFVz
ZXJJbml0aWF0ZWRBY3Rpb24sIG5hdmlnYXRpb25BY3Rpb24uX3VzZXJJbml0aWF0ZWRBY3Rpb24p
OworICAgICAgICAgICAgRVhQRUNUX1RSVUUobmF2aWdhdGlvbkFjdGlvbi5fdXNlckluaXRpYXRl
ZEFjdGlvbi5jb25zdW1lZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKytjb3VudCA9PSAz
KQorICAgICAgICAgICAgZmluaXNoZWRQb2xpY3kgPSB0cnVlOworICAgIAorICAgICAgICBkZWNp
c2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5Q2FuY2VsKTsKKyAgICB9OworCisg
ICAgY2xpY2soKTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWRQb2xp
Y3kpOworfQorCitURVNUX0YoVXNlckluaXRpYXRlZEFjdGlvblRlc3QsIE1haWx0b0luTG9vcEFm
dGVyVGltZXIpCit7CisgICAgbG9hZFRlc3QoQCJsb29wQWZ0ZXJUaW1lciIpOworCisgICAgX19i
bG9jayBfV0tVc2VySW5pdGlhdGVkQWN0aW9uICppbml0aWFsVXNlckluaXRpYXRlZEFjdGlvbiA9
IG5pbDsKKyAgICBfX2Jsb2NrIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBfX2Jsb2NrIGJvb2wg
ZmluaXNoZWRQb2xpY3kgPSBmYWxzZTsKKyAgICBkZWxlZ2F0ZS5nZXQoKS5wb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uID0gXihXS05hdmlnYXRpb25BY3Rpb24gKm5hdmlnYXRpb25BY3Rpb24sIHZv
aWQgKF5kZWNpc2lvbkhhbmRsZXIpKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSkpIHsKKyAgICAg
ICAgaWYgKFtuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QuVVJMLnNjaGVtZSBpc0VxdWFsVG9TdHJp
bmc6QCJhYm91dCJdKSB7CisgICAgICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9u
QWN0aW9uUG9saWN5QWxsb3cpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgRVhQRUNUX1dLX1NUUkVRKEAibWFpbHRvIiwgbmF2aWdhdGlvbkFjdGlvbi5yZXF1ZXN0
LlVSTC5zY2hlbWUpOworICAgICAgICBFWFBFQ1RfRkFMU0UobmF2aWdhdGlvbkFjdGlvbi5fY2Fu
SGFuZGxlUmVxdWVzdCk7CisgICAgICAgIAorICAgICAgICBpZiAoY291bnQgPT0gMCkgeworICAg
ICAgICAgICAgRVhQRUNUX1RSVUUobmF2aWdhdGlvbkFjdGlvbi5faXNVc2VySW5pdGlhdGVkKTsK
KyAgICAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChuYXZpZ2F0aW9uQWN0aW9uLl91c2VySW5pdGlh
dGVkQWN0aW9uKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShuYXZpZ2F0aW9uQWN0aW9uLl91
c2VySW5pdGlhdGVkQWN0aW9uLmNvbnN1bWVkKTsKKworICAgICAgICAgICAgaW5pdGlhbFVzZXJJ
bml0aWF0ZWRBY3Rpb24gPSBuYXZpZ2F0aW9uQWN0aW9uLl91c2VySW5pdGlhdGVkQWN0aW9uOwor
CisgICAgICAgICAgICBbbmF2aWdhdGlvbkFjdGlvbi5fdXNlckluaXRpYXRlZEFjdGlvbiBjb25z
dW1lXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKG5hdmlnYXRp
b25BY3Rpb24uX2lzVXNlckluaXRpYXRlZCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW5pdGlh
bFVzZXJJbml0aWF0ZWRBY3Rpb24sIG5hdmlnYXRpb25BY3Rpb24uX3VzZXJJbml0aWF0ZWRBY3Rp
b24pOworICAgICAgICAgICAgRVhQRUNUX1RSVUUobmF2aWdhdGlvbkFjdGlvbi5fdXNlckluaXRp
YXRlZEFjdGlvbi5jb25zdW1lZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKytjb3VudCA9
PSAzKQorICAgICAgICAgICAgZmluaXNoZWRQb2xpY3kgPSB0cnVlOworICAgIAorICAgICAgICBk
ZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5Q2FuY2VsKTsKKyAgICB9Owor
CisgICAgY2xpY2soKTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWRQ
b2xpY3kpOworfQorCitURVNUX0YoVXNlckluaXRpYXRlZEFjdGlvblRlc3QsIE1haWx0b0luTG9v
cEFmdGVyUG9zdE1lc3NhZ2UpCit7CisgICAgbG9hZFRlc3QoQCJsb29wQWZ0ZXJQb3N0TWVzc2Fn
ZSIpOworCisgICAgX19ibG9jayBfV0tVc2VySW5pdGlhdGVkQWN0aW9uICppbml0aWFsVXNlcklu
aXRpYXRlZEFjdGlvbiA9IG5pbDsKKyAgICBfX2Jsb2NrIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAg
ICBfX2Jsb2NrIGJvb2wgZmluaXNoZWRQb2xpY3kgPSBmYWxzZTsKKyAgICBkZWxlZ2F0ZS5nZXQo
KS5wb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uID0gXihXS05hdmlnYXRpb25BY3Rpb24gKm5hdmln
YXRpb25BY3Rpb24sIHZvaWQgKF5kZWNpc2lvbkhhbmRsZXIpKFdLTmF2aWdhdGlvbkFjdGlvblBv
bGljeSkpIHsKKyAgICAgICAgaWYgKFtuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QuVVJMLnNjaGVt
ZSBpc0VxdWFsVG9TdHJpbmc6QCJhYm91dCJdKSB7CisgICAgICAgICAgICBkZWNpc2lvbkhhbmRs
ZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAibWFpbHRvIiwgbmF2aWdhdGlv
bkFjdGlvbi5yZXF1ZXN0LlVSTC5zY2hlbWUpOworICAgICAgICBFWFBFQ1RfRkFMU0UobmF2aWdh
dGlvbkFjdGlvbi5fY2FuSGFuZGxlUmVxdWVzdCk7CisgICAgICAgIAorICAgICAgICBpZiAoY291
bnQgPT0gMCkgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUobmF2aWdhdGlvbkFjdGlvbi5faXNV
c2VySW5pdGlhdGVkKTsKKyAgICAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChuYXZpZ2F0aW9uQWN0
aW9uLl91c2VySW5pdGlhdGVkQWN0aW9uKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShuYXZp
Z2F0aW9uQWN0aW9uLl91c2VySW5pdGlhdGVkQWN0aW9uLmNvbnN1bWVkKTsKKworICAgICAgICAg
ICAgaW5pdGlhbFVzZXJJbml0aWF0ZWRBY3Rpb24gPSBuYXZpZ2F0aW9uQWN0aW9uLl91c2VySW5p
dGlhdGVkQWN0aW9uOworCisgICAgICAgICAgICBbbmF2aWdhdGlvbkFjdGlvbi5fdXNlckluaXRp
YXRlZEFjdGlvbiBjb25zdW1lXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVYUEVD
VF9UUlVFKG5hdmlnYXRpb25BY3Rpb24uX2lzVXNlckluaXRpYXRlZCk7CisgICAgICAgICAgICBF
WFBFQ1RfRVEoaW5pdGlhbFVzZXJJbml0aWF0ZWRBY3Rpb24sIG5hdmlnYXRpb25BY3Rpb24uX3Vz
ZXJJbml0aWF0ZWRBY3Rpb24pOworICAgICAgICAgICAgRVhQRUNUX1RSVUUobmF2aWdhdGlvbkFj
dGlvbi5fdXNlckluaXRpYXRlZEFjdGlvbi5jb25zdW1lZCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoKytjb3VudCA9PSAzKQorICAgICAgICAgICAgZmluaXNoZWRQb2xpY3kgPSB0cnVlOwor
ICAgIAorICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5Q2Fu
Y2VsKTsKKyAgICB9OworCisgICAgY2xpY2soKTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZmluaXNoZWRQb2xpY3kpOworfQorCitURVNUX0YoVXNlckluaXRpYXRlZEFjdGlvblRl
c3QsIE1haWx0b0luTG9vcEFmdGVyTG9uZ1RpbWVyKQoreworICAgIGxvYWRUZXN0KEAibG9vcEFm
dGVyTG9uZ1RpbWVyIik7CisKKyAgICBfX2Jsb2NrIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBf
X2Jsb2NrIGJvb2wgZmluaXNoZWRQb2xpY3kgPSBmYWxzZTsKKyAgICBkZWxlZ2F0ZS5nZXQoKS5w
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uID0gXihXS05hdmlnYXRpb25BY3Rpb24gKm5hdmlnYXRp
b25BY3Rpb24sIHZvaWQgKF5kZWNpc2lvbkhhbmRsZXIpKFdLTmF2aWdhdGlvbkFjdGlvblBvbGlj
eSkpIHsKKyAgICAgICAgaWYgKFtuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QuVVJMLnNjaGVtZSBp
c0VxdWFsVG9TdHJpbmc6QCJhYm91dCJdKSB7CisgICAgICAgICAgICBkZWNpc2lvbkhhbmRsZXIo
V0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAibWFpbHRvIiwgbmF2aWdhdGlvbkFj
dGlvbi5yZXF1ZXN0LlVSTC5zY2hlbWUpOworICAgICAgICBFWFBFQ1RfRkFMU0UobmF2aWdhdGlv
bkFjdGlvbi5fY2FuSGFuZGxlUmVxdWVzdCk7CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfRkFM
U0UobmF2aWdhdGlvbkFjdGlvbi5faXNVc2VySW5pdGlhdGVkKTsKKyAgICAgICAgRVhQRUNUX05V
TEwobmF2aWdhdGlvbkFjdGlvbi5fdXNlckluaXRpYXRlZEFjdGlvbik7CisKKyAgICAgICAgaWYg
KCsrY291bnQgPT0gMykKKyAgICAgICAgICAgIGZpbmlzaGVkUG9saWN5ID0gdHJ1ZTsKKyAgICAK
KyAgICAgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUNhbmNlbCk7
CisgICAgfTsKKworICAgIGNsaWNrKCk7CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmZpbmlzaGVkUG9saWN5KTsKK30KKworI2VuZGlmCisKKyNlbmRpZgpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2Evb3Blbi1tdWx0aXBsZS1leHRlcm5hbC11cmwu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2Nv
YS9vcGVuLW11bHRpcGxlLWV4dGVybmFsLXVybC5odG1sCShub25leGlzdGVudCkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL29wZW4tbXVsdGlwbGUtZXh0ZXJuYWwt
dXJsLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorPHN0eWxlPgorICAgIGlm
cmFtZSB7IHdpZHRoOiAwOyBoZWlnaHQ6IDA7IHZpc2liaWxpdHk6IGhpZGRlbjsgfQorPC9zdHls
ZT4KKworPGJvZHk+CisKKzxzY3JpcHQ+Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCBmdW5jdGlvbigpIHsKKyAgICBsZXQgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAg
IHN3aXRjaCAoaGFzaCkgeworICAgIGNhc2UgIiNub3JtYWxMb29wIjoKKyAgICAgICAgbm9ybWFs
TG9vcCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICIjbG9vcEFmdGVyVGltZXIiOgorICAg
ICAgICBsb29wQWZ0ZXJUaW1lcigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICIjbG9vcEFm
dGVyUG9zdE1lc3NhZ2UiOgorICAgICAgICBsb29wQWZ0ZXJQb3N0TWVzc2FnZSgpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlICIjbG9vcEFmdGVyTG9uZ1RpbWVyIjoKKyAgICAgICAgbG9vcEFm
dGVyTG9uZ1RpbWVyKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30sIGZhbHNlKTsKKworZnVu
Y3Rpb24gbm9ybWFsTG9vcCgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsraSkgewor
ICAgICAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7Cisg
ICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgICAgICAgaWZyYW1l
LmNvbnRlbnRXaW5kb3cubG9jYXRpb24gPSAibWFpbHRvOnNvbWVvbmVAZXhhbXBsZS5jb20/U3Vi
amVjdD1IZWxsbyUyMGFnYWluIjsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGxvb3BBZnRlclRpbWVy
KCkgeworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGlmcmFtZSk7CisgICAgICAgICAgICBpZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbiA9ICJt
YWlsdG86c29tZW9uZUBleGFtcGxlLmNvbT9TdWJqZWN0PUhlbGxvJTIwYWdhaW4iOworICAgICAg
ICB9CisgICAgfSwgNTAwKTsKK30KKworZnVuY3Rpb24gbG9vcEFmdGVyUG9zdE1lc3NhZ2UoKSB7
CisgICAgd2luZG93Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChpZnJhbWUpOworICAgICAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24g
PSAibWFpbHRvOnNvbWVvbmVAZXhhbXBsZS5jb20/U3ViamVjdD1IZWxsbyUyMGFnYWluIjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB3aW5kb3cucG9zdE1lc3NhZ2UoImZvbyIsICIqIik7Cit9CisK
K2Z1bmN0aW9uIGxvb3BBZnRlckxvbmdUaW1lcigpIHsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAg
dmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworICAgICAgICAg
ICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICAgICAgICAgICAgaWZyYW1l
LmNvbnRlbnRXaW5kb3cubG9jYXRpb24gPSAibWFpbHRvOnNvbWVvbmVAZXhhbXBsZS5jb20/U3Vi
amVjdD1IZWxsbyUyMGFnYWluIjsKKyAgICAgICAgfQorICAgIH0sIDIwMDApOworfQorCis8L3Nj
cmlwdD4KKzwvYm9keT4K
</data>
<flag name="review"
          id="307535"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>