<?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>107364</bug_id>
          
          <creation_ts>2013-01-19 00:08:51 -0800</creation_ts>
          <short_desc>Improve PageVisibility API with enums</short_desc>
          <delta_ts>2013-01-28 14:45:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>jesus</cc>
    
    <cc>joepeck</cc>
    
    <cc>kenneth</cc>
    
    <cc>sam</cc>
    
    <cc>tonyg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>811333</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-01-19 00:08:51 -0800</bug_when>
    <thetext>The API should have enum values instead of taking in ints which it then casts. This if for WebKit1/mac and WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812490</commentid>
    <comment_count>1</comment_count>
      <attachid>183858</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-01-21 17:27:28 -0800</bug_when>
    <thetext>Created attachment 183858
[PATCH] Use enums in the PageVisibility WK1 and WK2 APIs

This is my first WK2 work, so be gentle if I&apos;m doing something wrong or incorrect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814775</commentid>
    <comment_count>2</comment_count>
      <attachid>183858</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-01-23 16:09:03 -0800</bug_when>
    <thetext>Comment on attachment 183858
[PATCH] Use enums in the PageVisibility WK1 and WK2 APIs

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

This looks good from an overall perspective, but I&apos;d like a WebKit2 engineer to take a look to make sure some assumptions aren&apos;t being violated.

&gt; Tools/TestWebKitAPI/Tests/WebKit2/PageVisibilityState.cpp:41
&gt; +static void didRunJavaScript1(WKSerializedScriptValueRef, WKErrorRef, void*);
&gt; +static void didRunJavaScript2(WKSerializedScriptValueRef, WKErrorRef, void*);
&gt; +static void didRunJavaScript3(WKSerializedScriptValueRef, WKErrorRef, void*);
&gt; +static void didRunJavaScript4(WKSerializedScriptValueRef, WKErrorRef, void*);

Can we come up with a better name for these methods that are more descriptive?  Maybe:

didRunStep1StateChangeVisibleToHidden
didRunStep2StateChangeHiddenToPrerender
didRunStep3StateChangePrerenderToPreview
didRunStep4InStatePreview</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814778</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-01-23 16:11:41 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 183858 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183858&amp;action=review
&gt; 
&gt; This looks good from an overall perspective, but I&apos;d like a WebKit2 engineer to take a look to make sure some assumptions aren&apos;t being violated.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKit2/PageVisibilityState.cpp:41
&gt; &gt; +static void didRunJavaScript1(WKSerializedScriptValueRef, WKErrorRef, void*);
&gt; &gt; +static void didRunJavaScript2(WKSerializedScriptValueRef, WKErrorRef, void*);
&gt; &gt; +static void didRunJavaScript3(WKSerializedScriptValueRef, WKErrorRef, void*);
&gt; &gt; +static void didRunJavaScript4(WKSerializedScriptValueRef, WKErrorRef, void*);
&gt; 
&gt; Can we come up with a better name for these methods that are more descriptive?  Maybe:
&gt; 
&gt; didRunStep1StateChangeVisibleToHidden
&gt; didRunStep2StateChangeHiddenToPrerender
&gt; didRunStep3StateChangePrerenderToPreview
&gt; didRunStep4InStatePreview

Sounds good. I had originally considered 1 didRunJavaScript function and an array of input strings and expected values to reduce the clutter, but I never ended up doing that. I can make these changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814886</commentid>
    <comment_count>4</comment_count>
      <attachid>183858</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-23 17:41:30 -0800</bug_when>
    <thetext>Comment on attachment 183858
[PATCH] Use enums in the PageVisibility WK1 and WK2 APIs

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

Great overall, but you also need to look into updating the way WebKitTestRunner works.

Also some concern about the naming (about collapsing WKPage and PageVisibility together).

&gt; Source/WebKit/mac/WebView/WebViewPrivate.h:118
&gt; +// This needs to be in sync with WebCore::PageVisibilityState.

Since you cast between two type, a good way to enforce correctness is to have one COMPILE_ASSERT() per enum value in your .mm file.

&gt; Source/WebKit2/Shared/API/c/WKPageLoadTypes.h:65
&gt; +enum {
&gt; +    kWKPageVisibilityStateVisible,
&gt; +    kWKPageVisibilityStateHidden,
&gt; +    kWKPageVisibilityStatePrerender,
&gt; +    kWKPageVisibilityStatePreview
&gt; +};
&gt; +typedef uint32_t WKPageVisibilityState;
&gt; +

I am unconvinced this is the right header for this. Maybe WKPage.h is better?

Why typedef it to uint32_t instead of:
typedef WKPageVisibilityState WKPageVisibilityState?

As weird as it sounds, I think WKPageDocumentVisibilityState or WKPagePageVisibilityState may be better names.
Rationale: WKPage is the C prefix for WKPage APIs. &quot;PageVisibility&quot; is the name of the spec, &quot;DocumentVisibility&quot; is the name of the API as exposed to JavaScript.

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:101
&gt; -WK_EXPORT void WKBundleSetPageVisibilityState(WKBundleRef bundle, WKBundlePageRef page, int state, bool isInitialState);
&gt; +WK_EXPORT void WKBundleSetPageVisibilityState(WKBundleRef bundle, WKBundlePageRef page, WKPageVisibilityState visibilityState, bool isInitialState);

Now that you expose a public API for PageVisibility, WKBundleSetPageVisibilityState should go away.

The right way to do the testing is to got from TestRunnerBundle-&gt;TestRunner-&gt;Public API-&gt;Back to WebProcess.
WKBundleSetPageVisibilityState exists as a hack for testing.

(All of this is assuming the tests are well written and do not rely on the state updating instantaneously. Sometime we need to update the tests, or hacks are needed).

&gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:587
&gt; -void InjectedBundle::setPageVisibilityState(WebPage* page, int state, bool isInitialState)
&gt; +void InjectedBundle::setPageVisibilityState(WebPage* page, WebCore::PageVisibilityState visibilityState, bool isInitialState)
&gt;  {
&gt;  #if ENABLE(PAGE_VISIBILITY_API) || ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
&gt; -    page-&gt;corePage()-&gt;setVisibilityState(static_cast&lt;PageVisibilityState&gt;(state), isInitialState);
&gt; +    page-&gt;corePage()-&gt;setVisibilityState(visibilityState, isInitialState);
&gt;  #endif
&gt;  }

This should probably go away.

&gt; Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:1068
&gt;  				265AF55015D1E48A00B0CB4A /* WTFString.cpp in Sources */,
&gt;  				C51AFB99169F49FF009CCF66 /* FindMatches.mm in Sources */,
&gt; +				A51B650916ADF9B1007AA5D9 /* PageVisibilityState.cpp in Sources */,

Keep the build section sorted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814933</commentid>
    <comment_count>5</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-01-23 18:26:33 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 183858 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183858&amp;action=review
&gt; 
&gt; Great overall, but you also need to look into updating the way WebKitTestRunner works.
&gt; 
&gt; Also some concern about the naming (about collapsing WKPage and PageVisibility together).
&gt; 
&gt; &gt; Source/WebKit/mac/WebView/WebViewPrivate.h:118
&gt; &gt; +// This needs to be in sync with WebCore::PageVisibilityState.
&gt; 
&gt; Since you cast between two type, a good way to enforce correctness is to have one COMPILE_ASSERT() per enum value in your .mm file.

Will fix. Good point.

&gt; &gt; Source/WebKit2/Shared/API/c/WKPageLoadTypes.h:65
&gt; &gt; +enum {
&gt; &gt; +    kWKPageVisibilityStateVisible,
&gt; &gt; +    kWKPageVisibilityStateHidden,
&gt; &gt; +    kWKPageVisibilityStatePrerender,
&gt; &gt; +    kWKPageVisibilityStatePreview
&gt; &gt; +};
&gt; &gt; +typedef uint32_t WKPageVisibilityState;
&gt; &gt; +
&gt; 
&gt; I am unconvinced this is the right header for this. Maybe WKPage.h is better?

I&apos;ll make a new file. I was just riding the wave, since WKPageLoadTypes.h had WKLayoutMilestones which also doesn&apos;t sound like it belongs there. But that is no excuse.

&gt; Why typedef it to uint32_t instead of:
&gt; typedef WKPageVisibilityState WKPageVisibilityState?

We discussed this on IRC. Sticking with uint, as that is the convention and might be better for bin compatibility.

&gt; As weird as it sounds, I think WKPageDocumentVisibilityState or WKPagePageVisibilityState may be better names.
&gt; Rationale: WKPage is the C prefix for WKPage APIs. &quot;PageVisibility&quot; is the name of the spec, &quot;DocumentVisibility&quot; is the name of the API as exposed to JavaScript.

I looked around before coming to this name, and other enums didn&apos;t follow that kind of naming:

    Source/WebKit2/Shared/API/c/WKPageLoadTypes.h
    typedef uint32_t WKFrameNavigationType;
    typedef uint32_t WKSameDocumentNavigationType;
    typedef uint32_t WKLayoutMilestones;

    Source/WebKit2/UIProcess/API/C/WKPage.h
    WK_EXPORT void WKPageListenForLayoutMilestones(WKPageRef page, WKLayoutMilestones milestones);

    Source/WebKit2/UIProcess/API/C/WKPagePrivate.h:
    typedef uint32_t WKPaginationMode;
    WK_EXPORT void WKPageSetPaginationMode(WKPageRef page, WKPaginationMode paginationMode);

That being said, I don&apos;t mind going with WKPagePageVisibilityState.


&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:101
&gt; &gt; -WK_EXPORT void WKBundleSetPageVisibilityState(WKBundleRef bundle, WKBundlePageRef page, int state, bool isInitialState);
&gt; &gt; +WK_EXPORT void WKBundleSetPageVisibilityState(WKBundleRef bundle, WKBundlePageRef page, WKPageVisibilityState visibilityState, bool isInitialState);
&gt; 
&gt; Now that you expose a public API for PageVisibility, WKBundleSetPageVisibilityState should go away.
&gt; 
&gt; The right way to do the testing is to got from TestRunnerBundle-&gt;TestRunner-&gt;Public API-&gt;Back to WebProcess.
&gt; WKBundleSetPageVisibilityState exists as a hack for testing.
&gt; 
&gt; (All of this is assuming the tests are well written and do not rely on the state updating instantaneously. Sometime we need to update the tests, or hacks are needed).

Sounds good, I&apos;ll look into this.

&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:587
&gt; &gt; -void InjectedBundle::setPageVisibilityState(WebPage* page, int state, bool isInitialState)
&gt; &gt; +void InjectedBundle::setPageVisibilityState(WebPage* page, WebCore::PageVisibilityState visibilityState, bool isInitialState)
&gt; &gt;  {
&gt; &gt;  #if ENABLE(PAGE_VISIBILITY_API) || ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
&gt; &gt; -    page-&gt;corePage()-&gt;setVisibilityState(static_cast&lt;PageVisibilityState&gt;(state), isInitialState);
&gt; &gt; +    page-&gt;corePage()-&gt;setVisibilityState(visibilityState, isInitialState);
&gt; &gt;  #endif
&gt; &gt;  }
&gt; 
&gt; This should probably go away.

Will do.

&gt; &gt; Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:1068
&gt; &gt;  				265AF55015D1E48A00B0CB4A /* WTFString.cpp in Sources */,
&gt; &gt;  				C51AFB99169F49FF009CCF66 /* FindMatches.mm in Sources */,
&gt; &gt; +				A51B650916ADF9B1007AA5D9 /* PageVisibilityState.cpp in Sources */,
&gt; 
&gt; Keep the build section sorted?

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816076</commentid>
    <comment_count>6</comment_count>
      <attachid>184635</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-01-24 18:49:16 -0800</bug_when>
    <thetext>Created attachment 184635
[PATCH] Addressed Review Comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816079</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-01-24 18:51:12 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 183858 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183858&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/mac/WebView/WebViewPrivate.h:118
&gt; &gt; +// This needs to be in sync with WebCore::PageVisibilityState.
&gt; 
&gt; Since you cast between two type, a good way to enforce correctness is to have one COMPILE_ASSERT() per enum value in your .mm file.

Since I didn&apos;t see any other examples of WebKit API casting types to WebCore types, but I did find examples of core() and kit() functions converting between the two, I went with a core() approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817211</commentid>
    <comment_count>8</comment_count>
      <attachid>184635</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-01-26 09:58:03 -0800</bug_when>
    <thetext>Comment on attachment 184635
[PATCH] Addressed Review Comments

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

No COMPILE_ASSERT() statements?

&gt; Source/WebKit/mac/WebView/WebView.mm:412
&gt; +static PageVisibilityState corePageVisibilityState(WebPageVisibilityState visibilityState)

I think it would be best to name this &quot;core(WebPageVisibilityState visibilityState)&quot; since C++ will disambiguate based on the argument type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817212</commentid>
    <comment_count>9</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-01-26 10:00:14 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 184635 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184635&amp;action=review
&gt; 
&gt; No COMPILE_ASSERT() statements?

Although one could argue that if you have switch statements for conversions in both directions, any change in the enum list would fail if a case statement were missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817225</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-26 11:28:24 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 184635 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184635&amp;action=review
&gt; &gt; 
&gt; &gt; No COMPILE_ASSERT() statements?
&gt; 
&gt; Although one could argue that if you have switch statements for conversions in both directions, any change in the enum list would fail if a case statement were missing.

In general, we have tried to no rely on WebCore&apos;s types where possible by using explicit conversion, so no static assertions should be needed or wanted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817226</commentid>
    <comment_count>11</comment_count>
      <attachid>184635</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-26 11:30:18 -0800</bug_when>
    <thetext>Comment on attachment 184635
[PATCH] Addressed Review Comments

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

&gt; Source/WebKit/mac/WebView/WebViewPrivate.h:118
&gt; +// Mirroring WebCore::PageVisibilityState.

I don&apos;t think this comments adds anything useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818125</commentid>
    <comment_count>12</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-01-28 14:45:16 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 184635 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184635&amp;action=review
&gt; 
&gt; No COMPILE_ASSERT() statements?

Went with the switch statement handing all cases.

&gt; &gt; Source/WebKit/mac/WebView/WebView.mm:412
&gt; &gt; +static PageVisibilityState corePageVisibilityState(WebPageVisibilityState visibilityState)
&gt; 
&gt; I think it would be best to name this &quot;core(WebPageVisibilityState visibilityState)&quot; since C++ will disambiguate based on the argument type.

Renamed to core.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818127</commentid>
    <comment_count>13</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-01-28 14:45:39 -0800</bug_when>
    <thetext>Landed r141010: &lt;http://trac.webkit.org/changeset/141010&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183858</attachid>
            <date>2013-01-21 17:27:28 -0800</date>
            <delta_ts>2013-01-24 18:49:16 -0800</delta_ts>
            <desc>[PATCH] Use enums in the PageVisibility WK1 and WK2 APIs</desc>
            <filename>enum-1.patch</filename>
            <type>text/plain</type>
            <size>31623</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwppbmRleCAxMmQ1YjhhLi41ODhlOTI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMjEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFw
cGxlLmNvbT4KKworICAgICAgICBJbXByb3ZlIFBhZ2VWaXNpYmlsaXR5IEFQSSB3aXRoIGVudW1z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDczNjQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZp
ZXcvV2ViVmlldy5tbToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdQcml2YXRlLmg6CisgICAg
ICAgICgtW1dlYlZpZXcgX3NldFZpc2liaWxpdHlTdGF0ZTppc0luaXRpYWxTdGF0ZTpdKToKKyAg
ICAgICAgU3dpdGNoIHRoZSBwcml2YXRlIEFQSSBmb3JtIGludCB0byBhIFdlYlBhZ2VWaXNpYmls
aXR5U3RhdGUgZW51bS4KKwogMjAxMy0wMS0xNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9A
YXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIEVuYWJsZSBQYWdlIFZpc2liaWxpdHkgKFBBR0Vf
VklTSUJJTElUWV9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggYjVl
YTQyMC4uODFiMGU1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMjkx
OSw2ICsyOTE5LDE0IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB0b1N0cmluZ1ZlY3RvcihOU0Fy
cmF5KiBwYXR0ZXJucykKICAgICByZXR1cm4ga2l0TGF5b3V0TWlsZXN0b25lcyhwYWdlLT5sYXlv
dXRNaWxlc3RvbmVzKCkpOwogfQogCistICh2b2lkKV9zZXRWaXNpYmlsaXR5U3RhdGU6KFdlYlBh
Z2VWaXNpYmlsaXR5U3RhdGUpdmlzaWJpbGl0eVN0YXRlIGlzSW5pdGlhbFN0YXRlOihCT09MKWlz
SW5pdGlhbFN0YXRlCit7CisjaWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9BUEkpIHx8IEVOQUJM
RShISURERU5fUEFHRV9ET01fVElNRVJfVEhST1RUTElORykKKyAgICBpZiAoX3ByaXZhdGUtPnBh
Z2UpCisgICAgICAgIF9wcml2YXRlLT5wYWdlLT5zZXRWaXNpYmlsaXR5U3RhdGUoc3RhdGljX2Nh
c3Q8UGFnZVZpc2liaWxpdHlTdGF0ZT4odmlzaWJpbGl0eVN0YXRlKSwgaXNJbml0aWFsU3RhdGUp
OworI2VuZGlmCit9CisKIC0gKHZvaWQpX3NldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnM6
KEJPT0wpYmVoYXZlc0xpa2VDb2x1bW5zCiB7CiAgICAgUGFnZSogcGFnZSA9IGNvcmUoc2VsZik7
CkBAIC0zMDQ3LDE1ICszMDU1LDYgQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHRvU3RyaW5nVmVj
dG9yKE5TQXJyYXkqIHBhdHRlcm5zKQogICAgIFJlc291cmNlUmVxdWVzdDo6c2V0SFRUUFBpcGVs
aW5pbmdFbmFibGVkKGVuYWJsZWQpOwogfQogCi0tICh2b2lkKV9zZXRWaXNpYmlsaXR5U3RhdGU6
KGludCl2aXNpYmlsaXR5U3RhdGUgaXNJbml0aWFsU3RhdGU6KEJPT0wpaXNJbml0aWFsU3RhdGUK
LXsKLSNpZiBFTkFCTEUoUEFHRV9WSVNJQklMSVRZX0FQSSkgfHwgRU5BQkxFKEhJRERFTl9QQUdF
X0RPTV9USU1FUl9USFJPVFRMSU5HKQotICAgIGlmIChfcHJpdmF0ZS0+cGFnZSkgewotICAgICAg
ICBfcHJpdmF0ZS0+cGFnZS0+c2V0VmlzaWJpbGl0eVN0YXRlKHN0YXRpY19jYXN0PFBhZ2VWaXNp
YmlsaXR5U3RhdGU+KHZpc2liaWxpdHlTdGF0ZSksIGlzSW5pdGlhbFN0YXRlKTsKLSAgICB9Ci0j
ZW5kaWYKLX0KLQogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gX1dlYlNhZmVGb3J3YXJkZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld1ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld1ByaXZhdGUuaAppbmRleCBmZDViOWIwLi4w
NjI4NTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2
YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oCkBA
IC0xMTUsNyArMTE1LDE1IEBAIGVudW0gewogfTsKIHR5cGVkZWYgTlNVSW50ZWdlciBXZWJMYXlv
dXRNaWxlc3RvbmVzOwogCi0vLyBUaGlzIG5lZWRzIHRvIGJlIGluIHN5bmMgd2l0aCBXZWJDb3Jl
OjpOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb24KKy8vIFRoaXMgbmVlZHMgdG8gYmUgaW4g
c3luYyB3aXRoIFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGUuCit0eXBlZGVmIGVudW0gewor
ICAgIFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlLAorICAgIFdlYlBhZ2VWaXNpYmlsaXR5
U3RhdGVIaWRkZW4sCisgICAgV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVByZXJlbmRlciwKKyAgICBX
ZWJQYWdlVmlzaWJpbGl0eVN0YXRlUHJldmlldworfSBXZWJQYWdlVmlzaWJpbGl0eVN0YXRlOwor
CisvLyBUaGlzIG5lZWRzIHRvIGJlIGluIHN5bmMgd2l0aCBXZWJDb3JlOjpOb3RpZmljYXRpb25D
bGllbnQ6OlBlcm1pc3Npb24uCiB0eXBlZGVmIGVudW0gewogICAgIFdlYk5vdGlmaWNhdGlvblBl
cm1pc3Npb25BbGxvd2VkLAogICAgIFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25Ob3RBbGxvd2Vk
LApAQCAtNTc0LDYgKzU4Miw4IEBAIENvdWxkIGJlIHdvcnRoIGFkZGluZyB0byB0aGUgQVBJLgog
LSAodm9pZClfbGlzdGVuRm9yTGF5b3V0TWlsZXN0b25lczooV2ViTGF5b3V0TWlsZXN0b25lcyls
YXlvdXRNaWxlc3RvbmVzOwogLSAoV2ViTGF5b3V0TWlsZXN0b25lcylfbGF5b3V0TWlsZXN0b25l
czsKIAorLSAodm9pZClfc2V0VmlzaWJpbGl0eVN0YXRlOihXZWJQYWdlVmlzaWJpbGl0eVN0YXRl
KXZpc2liaWxpdHlTdGF0ZSBpc0luaXRpYWxTdGF0ZTooQk9PTClpc0luaXRpYWxTdGF0ZTsKKwog
Ly8gV2hldGhlciB0aGUgY29sdW1uLWJyZWFrLXtiZWZvcmUsYWZ0ZXJ9IHByb3BlcnRpZXMgYXJl
IHJlc3BlY3RlZCBpbnN0ZWFkIG9mIHRoZQogLy8gcGFnZS1icmVhay17YmVmb3JlLGFmdGVyfSBw
cm9wZXJ0aWVzLgogLSAodm9pZClfc2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1uczooQk9P
TCliZWhhdmVzTGlrZUNvbHVtbnM7CkBAIC02NDAsOSArNjUwLDYgQEAgQ291bGQgYmUgd29ydGgg
YWRkaW5nIHRvIHRoZSBBUEkuCiAgKi8KICsgKHZvaWQpX3NldEhUVFBQaXBlbGluaW5nRW5hYmxl
ZDooQk9PTCllbmFibGVkOwogCi0vLyBTUEkgZm9yIER1bXBSZW5kZXJUcmVlCi0tICh2b2lkKV9z
ZXRWaXNpYmlsaXR5U3RhdGU6KGludCl2aXNpYmlsaXR5U3RhdGUgaXNJbml0aWFsU3RhdGU6KEJP
T0wpaXNJbml0aWFsU3RhdGU7Ci0KIEBlbmQKIAogQGludGVyZmFjZSBXZWJWaWV3IChXZWJWaWV3
UHJpbnRpbmdQcml2YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDYxM2E1ZDguLjg4ZWUzZGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMy0wMS0yMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgorCisgICAgICAgIEltcHJvdmUgUGFnZVZpc2liaWxpdHkgQVBJIHdpdGgg
ZW51bXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NzM2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
U2hhcmVkL0FQSS9jL1dLUGFnZUxvYWRUeXBlcy5oOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9X
S1NoYXJlZEFQSUNhc3QuaDoKKyAgICAgICAgKFdlYktpdDo6dG9QYWdlVmlzaWJpbGl0eVN0YXRl
KToKKyAgICAgICAgQ3JlYXRlIGFuIGVudW0gZm9yIHBhZ2UgdmlzaWJpbGl0eSBBUElzIGFuZCBh
IGNvbnZlcnNpb24gZnVuY3Rpb24KKyAgICAgICAgZm9yIHRoZSBXSzIgdmFsdWVzIHRvIFdlYkNv
cmUgdmFsdWVzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdlU2V0VmlzaWJp
bGl0eVN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c2V0VmlzaWJpbGl0eVN0YXRlKToKKyAgICAgICAgVUlQcm9jZXNzIEFQSSB0byBzZXQg
dmlzaWJpbGl0eSBzdGF0ZS4gV2ViUGFnZVByb3h5IGFscmVhZHkKKyAgICAgICAgaGFkIG1fdmlz
aWJpbGl0eVN0YXRlLCBzbyB1cGRhdGUgdGhhdCB3aGVuIHNldHRlciBpcyB1c2VkLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5jcHA6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVByaXZhdGUuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmg6Cisg
ICAgICAgIChXS0J1bmRsZVBhZ2VTZXRQYWdlVmlzaWJpbGl0eVN0YXRlKToKKyAgICAgICAgVXBk
YXRlIHRoZSB0ZXN0IGJ1bmRsZSBBUEkgdG8gdXNlIHRoZSBlbnVtcy4gVGhpcyBieXBhc3Nlcwor
ICAgICAgICB0aGUgV2ViUGFnZSBBUEkgYW5kIGZvcmNlcyBjYWxscyBpbnRvIFdlYkNvcmUgZXZl
biBpZiB0aGUKKyAgICAgICAgdmlzaWJpbGl0eSBzdGF0ZSBkaWQgbm90IGNoYW5nZS4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRWaXNp
YmlsaXR5U3RhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluOgorICAgICAgICBVcGRhdGUgdGhlIGV4aXN0aW5nIFdlYlBhZ2UgQVBJIHRvIHVzZSB1
aW50MzJfdCwgd2hpY2ggbWF0Y2hlcworICAgICAgICBvdGhlciBlbnVtIG1lc3NhZ2UgdHlwZXMu
CisKIDIwMTMtMDEtMTggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW1vdmUgZW1wdHkgZmlsZSBXZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLUGFnZUxvYWRUeXBlcy5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLUGFnZUxvYWRUeXBlcy5oCmluZGV4IDY3NTAw
YjQuLjRlOTIyNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1Bh
Z2VMb2FkVHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tQYWdlTG9h
ZFR5cGVzLmgKQEAgLTU1LDYgKzU1LDE0IEBAIGVudW0gewogfTsKIHR5cGVkZWYgdWludDMyX3Qg
V0tMYXlvdXRNaWxlc3RvbmVzOwogCitlbnVtIHsKKyAgICBrV0tQYWdlVmlzaWJpbGl0eVN0YXRl
VmlzaWJsZSwKKyAgICBrV0tQYWdlVmlzaWJpbGl0eVN0YXRlSGlkZGVuLAorICAgIGtXS1BhZ2VW
aXNpYmlsaXR5U3RhdGVQcmVyZW5kZXIsCisgICAga1dLUGFnZVZpc2liaWxpdHlTdGF0ZVByZXZp
ZXcKK307Cit0eXBlZGVmIHVpbnQzMl90IFdLUGFnZVZpc2liaWxpdHlTdGF0ZTsKKwogI2lmZGVm
IF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9X
S1NoYXJlZEFQSUNhc3QuaAppbmRleCAzODBjZDI1Li4yYWRkNmY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCkBAIC00OSw2ICs0OSw3IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9J
bnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9MYXlvdXRNaWxlc3RvbmVzLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlVmlzaWJpbGl0eVN0YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1
cml0eU9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRUeXBlcy5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvVXNlclNjcmlwdFR5cGVzLmg+CkBAIC03ODgsNiArNzg5LDIzIEBAIGlu
bGluZSBXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmVzIHRvTGF5b3V0TWlsZXN0b25lcyhXS0xheW91
dE1pbGVzdG9uZXMgd2tNaWxlc3RvCiAgICAgcmV0dXJuIG1pbGVzdG9uZXM7CiB9CiAKK2lubGlu
ZSBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlIHRvUGFnZVZpc2liaWxpdHlTdGF0ZShXS1Bh
Z2VWaXNpYmlsaXR5U3RhdGUgd2tQYWdlVmlzaWJpbGl0eVN0YXRlKQoreworICAgIHN3aXRjaCAo
d2tQYWdlVmlzaWJpbGl0eVN0YXRlKSB7CisgICAgY2FzZSBrV0tQYWdlVmlzaWJpbGl0eVN0YXRl
VmlzaWJsZToKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNp
YmxlOworICAgIGNhc2Uga1dLUGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRlbjoKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGVIaWRkZW47CisgICAgY2FzZSBrV0tQYWdl
VmlzaWJpbGl0eVN0YXRlUHJlcmVuZGVyOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGFnZVZp
c2liaWxpdHlTdGF0ZVByZXJlbmRlcjsKKyAgICBjYXNlIGtXS1BhZ2VWaXNpYmlsaXR5U3RhdGVQ
cmV2aWV3OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZVByZXZp
ZXc7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFdlYkNv
cmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlOworfQorCiBpbmxpbmUgSW1hZ2VPcHRpb25z
IHRvSW1hZ2VPcHRpb25zKFdLSW1hZ2VPcHRpb25zIHdrSW1hZ2VPcHRpb25zKQogewogICAgIHVu
c2lnbmVkIGltYWdlT3B0aW9ucyA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S1BhZ2UuY3BwCmluZGV4IDQ2ZjA5OGMuLjQ5MWYzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCkBAIC0zNDksNiArMzQ5LDExIEBAIHZvaWQgV0tQYWdlTGlz
dGVuRm9yTGF5b3V0TWlsZXN0b25lcyhXS1BhZ2VSZWYgcGFnZVJlZiwgV0tMYXlvdXRNaWxlc3Rv
bmVzIG1pbGVzCiAgICAgdG9JbXBsKHBhZ2VSZWYpLT5saXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVz
KHRvTGF5b3V0TWlsZXN0b25lcyhtaWxlc3RvbmVzKSk7CiB9CiAKK3ZvaWQgV0tQYWdlU2V0Vmlz
aWJpbGl0eVN0YXRlKFdLUGFnZVJlZiBwYWdlUmVmLCBXS1BhZ2VWaXNpYmlsaXR5U3RhdGUgc3Rh
dGUsIGJvb2wgaXNJbml0aWFsU3RhdGUpCit7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRWaXNp
YmlsaXR5U3RhdGUodG9QYWdlVmlzaWJpbGl0eVN0YXRlKHN0YXRlKSwgaXNJbml0aWFsU3RhdGUp
OworfQorCiBib29sIFdLUGFnZUhhc0hvcml6b250YWxTY3JvbGxiYXIoV0tQYWdlUmVmIHBhZ2VS
ZWYpCiB7CiAgICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+aGFzSG9yaXpvbnRhbFNjcm9sbGJh
cigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCmluZGV4IGQyYTZjYWQu
LjA0ODViOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Bh
Z2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKQEAgLTQ0
NSw2ICs0NDUsOCBAQCBXS19FWFBPUlQgV0tTaXplIFdLUGFnZUZpeGVkTGF5b3V0U2l6ZShXS1Bh
Z2VSZWYgcGFnZSk7CiAKIFdLX0VYUE9SVCB2b2lkIFdLUGFnZUxpc3RlbkZvckxheW91dE1pbGVz
dG9uZXMoV0tQYWdlUmVmIHBhZ2UsIFdLTGF5b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVzKTsKIAor
V0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0VmlzaWJpbGl0eVN0YXRlKFdLUGFnZVJlZiBwYWdlLCBX
S1BhZ2VWaXNpYmlsaXR5U3RhdGUgc3RhdGUsIGJvb2wgaXNJbml0aWFsU3RhdGUpOworCiBXS19F
WFBPUlQgYm9vbCBXS1BhZ2VIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKFdLUGFnZVJlZiBwYWdlKTsK
IFdLX0VYUE9SVCBib29sIFdLUGFnZUhhc1ZlcnRpY2FsU2Nyb2xsYmFyKFdLUGFnZVJlZiBwYWdl
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA2ZDk4
NWMxLi45MjEyM2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cApAQCAtMTYwNiw2ICsxNjA2LDE5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpsaXN0ZW5Gb3JMYXlv
dXRNaWxlc3RvbmVzKFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZXMgbWlsZXN0b25lCiAgICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVz
KG1pbGVzdG9uZXMpLCBtX3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRWaXNp
YmlsaXR5U3RhdGUoV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUs
IGJvb2wgaXNJbml0aWFsU3RhdGUpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJl
dHVybjsKKworI2lmIEVOQUJMRShQQUdFX1ZJU0lCSUxJVFlfQVBJKQorICAgIGlmICh2aXNpYmls
aXR5U3RhdGUgIT0gbV92aXNpYmlsaXR5U3RhdGUgfHwgaXNJbml0aWFsU3RhdGUpIHsKKyAgICAg
ICAgbV92aXNpYmlsaXR5U3RhdGUgPSB2aXNpYmlsaXR5U3RhdGU7CisgICAgICAgIG1fcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VmlzaWJpbGl0eVN0YXRlKHZpc2liaWxpdHlT
dGF0ZSwgaXNJbml0aWFsU3RhdGUpLCBtX3BhZ2VJRCk7CisgICAgfQorI2VuZGlmCit9CisKIHZv
aWQgV2ViUGFnZVByb3h5OjpzZXRTdXBwcmVzc1Njcm9sbGJhckFuaW1hdGlvbnMoYm9vbCBzdXBw
cmVzc0FuaW1hdGlvbnMpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggMThlNTE5ZC4uNjZjZDcwNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNDk2LDYgKzQ5Niw4IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgbGlzdGVuRm9yTGF5b3V0TWlsZXN0b25lcyhXZWJDb3JlOjpMYXlvdXRNaWxl
c3RvbmVzKTsKIAorICAgIHZvaWQgc2V0VmlzaWJpbGl0eVN0YXRlKFdlYkNvcmU6OlBhZ2VWaXNp
YmlsaXR5U3RhdGUsIGJvb2wgaXNJbml0aWFsU3RhdGUpOworCiAgICAgYm9vbCBoYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9tYWluRnJhbWVIYXNIb3Jpem9udGFsU2Ny
b2xsYmFyOyB9CiAgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJu
IG1fbWFpbkZyYW1lSGFzVmVydGljYWxTY3JvbGxiYXI7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlLmNw
cAppbmRleCAyNDQ3ZTIwLi5kYWIyMDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlLmNwcApAQCAtMzAw
LDkgKzMwMCw5IEBAIGJvb2wgV0tCdW5kbGVJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZShXS0J1bmRs
ZVJlZikKICAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCk7CiB9CiAKLXZvaWQgV0tCdW5kbGVTZXRQYWdlVmlzaWJpbGl0eVN0YXRlKFdLQnVuZGxlUmVm
IGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIGludCBzdGF0ZSwgYm9vbCBpc0lu
aXRpYWxTdGF0ZSkKK3ZvaWQgV0tCdW5kbGVTZXRQYWdlVmlzaWJpbGl0eVN0YXRlKFdLQnVuZGxl
UmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLUGFnZVZpc2liaWxpdHlT
dGF0ZSB2aXNpYmlsaXR5U3RhdGUsIGJvb2wgaXNJbml0aWFsU3RhdGUpCiB7Ci0gICAgdG9JbXBs
KGJ1bmRsZVJlZiktPnNldFBhZ2VWaXNpYmlsaXR5U3RhdGUodG9JbXBsKHBhZ2VSZWYpLCBzdGF0
ZSwgaXNJbml0aWFsU3RhdGUpOworICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRQYWdlVmlzaWJp
bGl0eVN0YXRlKHRvSW1wbChwYWdlUmVmKSwgdG9QYWdlVmlzaWJpbGl0eVN0YXRlKHZpc2liaWxp
dHlTdGF0ZSksIGlzSW5pdGlhbFN0YXRlKTsKIH0KIAogc2l6ZV90IFdLQnVuZGxlR2V0V29ya2Vy
VGhyZWFkQ291bnQoV0tCdW5kbGVSZWYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVByaXZhdGUuaApp
bmRleCBiYjVmNWJhLi44MWQ2MTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQcml2YXRlLmgK
QEAgLTk4LDcgKzk4LDcgQEAgV0tfRVhQT1JUIHNpemVfdCBXS0J1bmRsZUdldEphdmFTY3JpcHRP
YmplY3RzQ291bnQoV0tCdW5kbGVSZWYgYnVuZGxlKTsKIAogV0tfRVhQT1JUIGJvb2wgV0tCdW5k
bGVJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZShXS0J1bmRsZVJlZiBidW5kbGUpOwogCi1XS19FWFBP
UlQgdm9pZCBXS0J1bmRsZVNldFBhZ2VWaXNpYmlsaXR5U3RhdGUoV0tCdW5kbGVSZWYgYnVuZGxl
LCBXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgaW50IHN0YXRlLCBib29sIGlzSW5pdGlhbFN0YXRlKTsK
K1dLX0VYUE9SVCB2b2lkIFdLQnVuZGxlU2V0UGFnZVZpc2liaWxpdHlTdGF0ZShXS0J1bmRsZVJl
ZiBidW5kbGUsIFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1BhZ2VWaXNpYmlsaXR5U3RhdGUgdmlz
aWJpbGl0eVN0YXRlLCBib29sIGlzSW5pdGlhbFN0YXRlKTsKIAogV0tfRVhQT1JUIHNpemVfdCBX
S0J1bmRsZUdldFdvcmtlclRocmVhZENvdW50KFdLQnVuZGxlUmVmIGJ1bmRsZSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5jcHAKaW5kZXggODk1NjBiNy4uMmU1YWZhMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5jcHAKQEAgLTYxLDcgKzYxLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0pTVWludDhBcnJheS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUdyb3Vw
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlVmlzaWJpbGl0eVN0YXRlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9QcmludENvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaD4KQEAgLTU4MCwx
MCArNTc5LDEwIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdl
KFdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFN0cmluZyYgbWVzc2FnCiAgICAgbV9jbGllbnQuZGlkUmVj
ZWl2ZU1lc3NhZ2VUb1BhZ2UodGhpcywgcGFnZSwgbWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5KTsK
IH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0UGFnZVZpc2liaWxpdHlTdGF0ZShXZWJQYWdl
KiBwYWdlLCBpbnQgc3RhdGUsIGJvb2wgaXNJbml0aWFsU3RhdGUpCit2b2lkIEluamVjdGVkQnVu
ZGxlOjpzZXRQYWdlVmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2UqIHBhZ2UsIFdlYkNvcmU6OlBhZ2VW
aXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlLCBib29sIGlzSW5pdGlhbFN0YXRlKQogewog
I2lmIEVOQUJMRShQQUdFX1ZJU0lCSUxJVFlfQVBJKSB8fCBFTkFCTEUoSElEREVOX1BBR0VfRE9N
X1RJTUVSX1RIUk9UVExJTkcpCi0gICAgcGFnZS0+Y29yZVBhZ2UoKS0+c2V0VmlzaWJpbGl0eVN0
YXRlKHN0YXRpY19jYXN0PFBhZ2VWaXNpYmlsaXR5U3RhdGU+KHN0YXRlKSwgaXNJbml0aWFsU3Rh
dGUpOworICAgIHBhZ2UtPmNvcmVQYWdlKCktPnNldFZpc2liaWxpdHlTdGF0ZSh2aXNpYmlsaXR5
U3RhdGUsIGlzSW5pdGlhbFN0YXRlKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKaW5k
ZXggOTg1OTExNS4uMjQyZGRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaApAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4
dGVuc2lvbi5oIgogI2luY2x1ZGUgIldLQnVuZGxlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QYWdl
VmlzaWJpbGl0eVN0YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQ29udGVudFR5cGVzLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyU2NyaXB0VHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgpAQCAtMTY5LDcgKzE3MCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29s
IGlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiAKLSAgICB2b2lkIHNldFBhZ2VWaXNpYmlsaXR5
U3RhdGUoV2ViUGFnZSosIGludCBzdGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSk7CisgICAgdm9p
ZCBzZXRQYWdlVmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2UqLCBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0
eVN0YXRlLCBib29sIGlzSW5pdGlhbFN0YXRlKTsKIAogICAgIHN0YXRpYyBzaXplX3Qgd29ya2Vy
VGhyZWFkQ291bnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCmluZGV4IDYwYjFmYjYuLjE0ZTNlOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTM2MjIsNyArMzYyMiw3IEBAIEZyYW1l
VmlldyogV2ViUGFnZTo6bWFpbkZyYW1lVmlldygpIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoUEFH
RV9WSVNJQklMSVRZX0FQSSkgfHwgRU5BQkxFKEhJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRM
SU5HKQotdm9pZCBXZWJQYWdlOjpzZXRWaXNpYmlsaXR5U3RhdGUoaW50IHZpc2liaWxpdHlTdGF0
ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSkKK3ZvaWQgV2ViUGFnZTo6c2V0VmlzaWJpbGl0eVN0YXRl
KHVpbnQzMl90IHZpc2liaWxpdHlTdGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSkKIHsKICAgICBp
ZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggN2I1YjkzZi4uN2RhZmI1OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC01Niw5ICs1Niw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaWYgRU5BQkxFKFBBR0VfVklTSUJJ
TElUWV9BUEkpCiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlVmlzaWJpbGl0eVN0YXRlLmg+Ci0jZW5k
aWYKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9TY3JvbGxUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUtleWJvYXJkVUlNb2Rl
Lmg+CkBAIC01NjksNyArNTY3LDcgQEAgcHVibGljOgogICAgIGJvb2wgd2lsbEdvVG9CYWNrRm9y
d2FyZEl0ZW1DYWxsYmFja0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3dpbGxHb1RvQmFja0Zv
cndhcmRJdGVtQ2FsbGJhY2tFbmFibGVkOyB9CiAKICNpZiBFTkFCTEUoUEFHRV9WSVNJQklMSVRZ
X0FQSSkgfHwgRU5BQkxFKEhJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKQotICAgIHZv
aWQgc2V0VmlzaWJpbGl0eVN0YXRlKGludCB2aXNpYmlsaXR5U3RhdGUsIGJvb2wgaXNJbml0aWFs
U3RhdGUpOworICAgIHZvaWQgc2V0VmlzaWJpbGl0eVN0YXRlKHVpbnQzMl90IC8qIFdlYkNvcmU6
OlBhZ2VWaXNpYmlsaXR5U3RhdGUgKi8sIGJvb2wgaXNJbml0aWFsU3RhdGUpOwogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5k
ZXggZTMyODkyYy4uYzU4N2VkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTMwMSw3ICszMDEsNyBAQCBtZXNz
YWdlcyAtPiBXZWJQYWdlIHsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9B
UEkpIHx8IEVOQUJMRShISURERU5fUEFHRV9ET01fVElNRVJfVEhST1RUTElORykKLSAgICBTZXRW
aXNpYmlsaXR5U3RhdGUoaW50IHZpc2liaWxpdHlTdGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSkK
KyAgICBTZXRWaXNpYmlsaXR5U3RhdGUodWludDMyX3QgdmlzaWJpbGl0eVN0YXRlLCBib29sIGlz
SW5pdGlhbFN0YXRlKQogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBkZTI2NGRjLi5mNTkxMjU3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTMtMDEtMjEgIEpvc2VwaCBQ
ZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBJbXByb3ZlIFBhZ2VWaXNp
YmlsaXR5IEFQSSB3aXRoIGVudW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDczNjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tOgorICAg
ICAgICAoVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAgIChUZXN0UnVu
bmVyOjpzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0
UGFnZVZpc2liaWxpdHkpOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNp
YmlsaXR5KToKKyAgICAgICAgVXBkYXRlIHRlc3QgY29kZSB0byB1c2UgdGhlIFdLMSBvciBXSzIg
ZW51bXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIv
UGFnZVZpc2liaWxpdHlTdGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSSk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzZXRQYWdlVmlzaWJpbGl0eVN0YXRlV2l0aEV2YWxD
b250aW51YXRpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6YXNzZXJ0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSXNTdHJpbmdWYWx1ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkaWRSdW5K
YXZhU2NyaXB0MSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkaWRSdW5KYXZhU2NyaXB0Mik6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkaWRSdW5KYXZhU2NyaXB0Myk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpkaWRSdW5KYXZhU2NyaXB0NCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKyAgICAgICAgQWRkIGEgV2ViS2l0MiBBUEkgdGVzdCBmb3IgdGhlIG5ldyBXS1Bh
Z2VTZXRWaXNpYmlsaXR5U3RhdGUgQVBJLgorICAgICAgICBUZXN0IHRoYXQgYWZ0ZXIgc2V0dGlu
ZyB0aGUgdmlzaWJpbGl0eSBzdGF0ZSB3aXRoIHRoZSBBUEkgYW5kIGVudW0KKyAgICAgICAgdmFs
dWUgdGhhdCB0aGUgcGFnZSdzIHdlYmtpdFZpc2liaWxpdHlTdGF0ZSBpcyB1cGRhdGVkLgorCiAy
MDEzLTAxLTE3ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgW01hY10gRW5hYmxlIFBhZ2UgVmlzaWJpbGl0eSAoUEFHRV9WSVNJQklMSVRZX0FQSSkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggNWVhMTAwYi4uYTll
NTAxMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMu
bW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KQEAgLTQz
LDcgKzQzLDYgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CiAjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dl
b2xvY2F0aW9uUG9zaXRpb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGFnZVZpc2liaWxpdHlTdGF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L0RPTURvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9N
RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkFwcGxpY2F0aW9uQ2FjaGUuaD4KQEAgLTEx
NTYsOSArMTE1NSw4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRv
dWJsZSBiYWNraW5nU2NhbGVGYWN0b3IpCiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0UGFnZVZpc2li
aWxpdHkoKQogewogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbbWFpbkZyYW1lIHdlYlZpZXddOwot
ICAgIGlmIChbd2ViVmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9zZXRWaXNpYmls
aXR5U3RhdGU6aXNJbml0aWFsU3RhdGU6KV0pIHsKLSAgICAgICAgW3dlYlZpZXcgX3NldFZpc2li
aWxpdHlTdGF0ZTpXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZSBpc0luaXRpYWxT
dGF0ZTpZRVNdOwotICAgIH0KKyAgICBpZiAoW3dlYlZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihfc2V0VmlzaWJpbGl0eVN0YXRlOmlzSW5pdGlhbFN0YXRlOildKQorICAgICAgICBb
d2ViVmlldyBfc2V0VmlzaWJpbGl0eVN0YXRlOldlYlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxl
IGlzSW5pdGlhbFN0YXRlOllFU107CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2li
aWxpdHkoY29uc3QgY2hhciogbmV3VmlzaWJpbGl0eSkKQEAgLTExNjgsMTMgKzExNjYsMTMgQEAg
dm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKiBuZXdWaXNpYmls
aXR5KQogCiAgICAgV2ViVmlldyAqd2ViVmlldyA9IFttYWluRnJhbWUgd2ViVmlld107CiAgICAg
aWYgKCFzdHJjbXAobmV3VmlzaWJpbGl0eSwgInZpc2libGUiKSkKLSAgICAgICAgW3dlYlZpZXcg
X3NldFZpc2liaWxpdHlTdGF0ZTpXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZSBp
c0luaXRpYWxTdGF0ZTpOT107CisgICAgICAgIFt3ZWJWaWV3IF9zZXRWaXNpYmlsaXR5U3RhdGU6
V2ViUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUgaXNJbml0aWFsU3RhdGU6Tk9dOwogICAgIGVs
c2UgaWYgKCFzdHJjbXAobmV3VmlzaWJpbGl0eSwgImhpZGRlbiIpKQotICAgICAgICBbd2ViVmll
dyBfc2V0VmlzaWJpbGl0eVN0YXRlOldlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGVIaWRkZW4g
aXNJbml0aWFsU3RhdGU6Tk9dOworICAgICAgICBbd2ViVmlldyBfc2V0VmlzaWJpbGl0eVN0YXRl
OldlYlBhZ2VWaXNpYmlsaXR5U3RhdGVIaWRkZW4gaXNJbml0aWFsU3RhdGU6Tk9dOwogICAgIGVs
c2UgaWYgKCFzdHJjbXAobmV3VmlzaWJpbGl0eSwgInByZXJlbmRlciIpKQotICAgICAgICBbd2Vi
VmlldyBfc2V0VmlzaWJpbGl0eVN0YXRlOldlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmVy
ZW5kZXIgaXNJbml0aWFsU3RhdGU6Tk9dOworICAgICAgICBbd2ViVmlldyBfc2V0VmlzaWJpbGl0
eVN0YXRlOldlYlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmVyZW5kZXIgaXNJbml0aWFsU3RhdGU6Tk9d
OwogICAgIGVsc2UgaWYgKCFzdHJjbXAobmV3VmlzaWJpbGl0eSwgInByZXZpZXciKSkKLSAgICAg
ICAgW3dlYlZpZXcgX3NldFZpc2liaWxpdHlTdGF0ZTpXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0
YXRlUHJldmlldyBpc0luaXRpYWxTdGF0ZTpOT107CisgICAgICAgIFt3ZWJWaWV3IF9zZXRWaXNp
YmlsaXR5U3RhdGU6V2ViUGFnZVZpc2liaWxpdHlTdGF0ZVByZXZpZXcgaXNJbml0aWFsU3RhdGU6
Tk9dOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShKU1N0cmlu
Z1JlZikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2Y2MDc4Ny4uNTgxNzY2YSAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMyw2ICsxMDMsNyBAQAogCQk5QjI2RkNDQTE1OUQxNkRF
MDBDQzM3NjUgLyogSFRNTEZvcm1Db2xsZWN0aW9uTmFtZWRJdGVtLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyNkZDQjQxNTlEMTVF
NzAwQ0MzNzY1IC8qIEhUTUxGb3JtQ29sbGVjdGlvbk5hbWVkSXRlbS5odG1sICovOyB9OwogCQk5
QjRGOEZBNDE1OUQ1MkIxMDAyRDlGOTQgLyogSFRNTENvbGxlY3Rpb25OYW1lZEl0ZW0ubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjRGOEZBMzE1OUQ1
MkIxMDAyRDlGOTQgLyogSFRNTENvbGxlY3Rpb25OYW1lZEl0ZW0ubW0gKi87IH07CiAJCTlCNEY4
RkE3MTU5RDUyREQwMDJEOUY5NCAvKiBIVE1MQ29sbGVjdGlvbk5hbWVkSXRlbS5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNEY4RkE2
MTU5RDUyQ0EwMDJEOUY5NCAvKiBIVE1MQ29sbGVjdGlvbk5hbWVkSXRlbS5odG1sICovOyB9Owor
CQlBNTFCNjUwOTE2QURGOUIxMDA3QUE1RDkgLyogUGFnZVZpc2liaWxpdHlTdGF0ZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTFCNjUwODE2QURG
OUIxMDA3QUE1RDkgLyogUGFnZVZpc2liaWxpdHlTdGF0ZS5jcHAgKi87IH07CiAJCUE1RTIwMjcz
MTVCMjE4MTkwMEMxM0UxNCAvKiBXaW5kb3dsZXNzV2ViVmlld1dpdGhNZWRpYS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RTIwMjcyMTVCMjE4MTkw
MEMxM0UxNCAvKiBXaW5kb3dsZXNzV2ViVmlld1dpdGhNZWRpYS5tbSAqLzsgfTsKIAkJQTVFMjAy
NzUxNUIyMUY2RTAwQzEzRTE0IC8qIFdpbmRvd2xlc3NXZWJWaWV3V2l0aE1lZGlhLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFMjAy
NzAxNUIyMTgwNjAwQzEzRTE0IC8qIFdpbmRvd2xlc3NXZWJWaWV3V2l0aE1lZGlhLmh0bWwgKi87
IH07CiAJCUE3QTk2NkRCMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJh
dGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5j
cHAgKi87IH07CkBAIC0zNTksNiArMzYwLDcgQEAKIAkJOUIyNkZDQjQxNTlEMTVFNzAwQ0MzNzY1
IC8qIEhUTUxGb3JtQ29sbGVjdGlvbk5hbWVkSXRlbS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1s
OyBwYXRoID0gSFRNTEZvcm1Db2xsZWN0aW9uTmFtZWRJdGVtLmh0bWw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTlCNEY4RkEzMTU5RDUyQjEwMDJEOUY5NCAvKiBIVE1MQ29sbGVjdGlv
bk5hbWVkSXRlbS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEhU
TUxDb2xsZWN0aW9uTmFtZWRJdGVtLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
QjRGOEZBNjE1OUQ1MkNBMDAyRDlGOTQgLyogSFRNTENvbGxlY3Rpb25OYW1lZEl0ZW0uaHRtbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IEhUTUxDb2xsZWN0aW9uTmFtZWRJdGVtLmh0bWw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1MUI2NTA4MTZBREY5QjEwMDdBQTVEOSAv
KiBQYWdlVmlzaWJpbGl0eVN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBhZ2VWaXNpYmlsaXR5U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNUUyMDI3MDE1QjIxODA2MDBDMTNFMTQgLyogV2luZG93bGVzc1dlYlZpZXdXaXRoTWVk
aWEuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IFdpbmRvd2xlc3NXZWJWaWV3V2l0
aE1lZGlhLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1RTIwMjcyMTVCMjE4
MTkwMEMxM0UxNCAvKiBXaW5kb3dsZXNzV2ViVmlld1dpdGhNZWRpYS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdpbmRvd2xlc3NXZWJWaWV3V2l0aE1lZGlhLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E5NjZEQTE0MEVDQ0M4MDA1RUY5QjQg
LyogQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHA7IHBhdGggPSBX
VEYvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTY0NSw2ICs2NDcsNyBAQAogCQkJCTkzRjdFODZFMTREQzhFNUIwMEM4NEE5OSAv
KiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGcmFtZXNfQnVuZGxlLmNwcCAqLywKIAkJ
CQlCQzkwOTc3OTEyNTU3MUFCMDAwODM3NTYgLyogUGFnZUxvYWRCYXNpYy5jcHAgKi8sCiAJCQkJ
QkMyRDAwNDgxMkE5RkRGQTAwRTczMkEzIC8qIFBhZ2VMb2FkRGlkQ2hhbmdlTG9jYXRpb25XaXRo
aW5QYWdlRm9yRnJhbWUuY3BwICovLAorCQkJCUE1MUI2NTA4MTZBREY5QjEwMDdBQTVEOSAvKiBQ
YWdlVmlzaWJpbGl0eVN0YXRlLmNwcCAqLywKIAkJCQk1MkU1Q0U0NTE0RDIxRTlEMDAzQjJCRDgg
LyogUGFyZW50RnJhbWUuY3BwICovLAogCQkJCTUyRTVDRTQ4MTREMjFFQUIwMDNCMkJEOCAvKiBQ
YXJlbnRGcmFtZV9CdW5kbGUuY3BwICovLAogCQkJCTMzM0I5Q0UxMTI3N0YyMzEwMEZFRkNFMyAv
KiBQcmV2ZW50RW1wdHlVc2VyQWdlbnQuY3BwICovLApAQCAtMTA2Miw2ICsxMDY1LDcgQEAKIAkJ
CQlCQzkwOTk5NDEyNTZBQ0YxMDAwODM3NTYgLyogV0tTdHJpbmdKU1N0cmluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyNjVBRjU1MDE1RDFFNDhBMDBCMENCNEEgLyogV1RGU3RyaW5nLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUM1MUFGQjk5MTY5RjQ5RkYwMDlDQ0Y2NiAvKiBGaW5kTWF0Y2hl
cy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUE1MUI2NTA5MTZBREY5QjEwMDdBQTVEOSAvKiBQYWdl
VmlzaWJpbGl0eVN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1BhZ2VWaXNpYmlsaXR5U3RhdGUuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1BhZ2VWaXNpYmlsaXR5U3RhdGUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZTgzY2EKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvUGFnZVZpc2liaWxpdHlTdGF0ZS5j
cHAKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcu
aCIKKyNpbmNsdWRlICJUZXN0LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0
UmVmLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorI2luY2x1ZGUgPFdlYktp
dDIvV0tTZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
eworCitzdGF0aWMgYm9vbCB0ZXN0RG9uZTsKKworc3RhdGljIHZvaWQgZGlkUnVuSmF2YVNjcmlw
dDEoV0tTZXJpYWxpemVkU2NyaXB0VmFsdWVSZWYsIFdLRXJyb3JSZWYsIHZvaWQqKTsKK3N0YXRp
YyB2b2lkIGRpZFJ1bkphdmFTY3JpcHQyKFdLU2VyaWFsaXplZFNjcmlwdFZhbHVlUmVmLCBXS0Vy
cm9yUmVmLCB2b2lkKik7CitzdGF0aWMgdm9pZCBkaWRSdW5KYXZhU2NyaXB0MyhXS1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZVJlZiwgV0tFcnJvclJlZiwgdm9pZCopOworc3RhdGljIHZvaWQgZGlkUnVu
SmF2YVNjcmlwdDQoV0tTZXJpYWxpemVkU2NyaXB0VmFsdWVSZWYsIFdLRXJyb3JSZWYsIHZvaWQq
KTsKKworc3RhdGljIHZvaWQgc2V0UGFnZVZpc2liaWxpdHlTdGF0ZVdpdGhFdmFsQ29udGludWF0
aW9uKFBsYXRmb3JtV2ViVmlldyogd2ViVmlldywgV0tQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2li
aWxpdHlTdGF0ZSwgV0tQYWdlUnVuSmF2YVNjcmlwdEZ1bmN0aW9uIGNhbGxiYWNrKQoreworICAg
IFdLUGFnZVNldFZpc2liaWxpdHlTdGF0ZSh3ZWJWaWV3LT5wYWdlKCksIHZpc2liaWxpdHlTdGF0
ZSwgZmFsc2UpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBqYXZhU2NyaXB0U3RyaW5n
KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJkb2N1bWVudC53ZWJraXRW
aXNpYmlsaXR5U3RhdGUiKSk7CisgICAgV0tQYWdlUnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKHdl
YlZpZXctPnBhZ2UoKSwgamF2YVNjcmlwdFN0cmluZy5nZXQoKSwgc3RhdGljX2Nhc3Q8dm9pZCo+
KHdlYlZpZXcpLCBjYWxsYmFjayk7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUlzU3RyaW5nVmFsdWUoV0tTZXJpYWxpemVkU2NyaXB0VmFsdWVSZWYgc2VyaWFs
aXplZFZhbHVlLCBXS0Vycm9yUmVmIGVycm9yLCBjb25zdCBjaGFyICpleHBlY3RlZCkKK3sKKyAg
ICBFWFBFQ1RfTlVMTChlcnJvcik7CisgICAgRVhQRUNUX05PVF9OVUxMKHNlcmlhbGl6ZWRWYWx1
ZSk7CisgICAgaWYgKGVycm9yIHx8ICFzZXJpYWxpemVkVmFsdWUpCisgICAgICAgIHJldHVybjsK
KworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBzY3JpcHRDb250ZXh0ID0gSlNHbG9iYWxDb250ZXh0
Q3JlYXRlKDApOworICAgIEpTVmFsdWVSZWYgc2NyaXB0VmFsdWUgPSBXS1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZURlc2VyaWFsaXplKHNlcmlhbGl6ZWRWYWx1ZSwgc2NyaXB0Q29udGV4dCwgMCk7Cisg
ICAgRVhQRUNUX1RSVUUoSlNWYWx1ZUlzU3RyaW5nKHNjcmlwdENvbnRleHQsIHNjcmlwdFZhbHVl
KSk7CisgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoc2NyaXB0Q29udGV4dCwgc2NyaXB0VmFsdWUp
KSB7CisgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2Uoc2NyaXB0Q29udGV4dCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1N0cmluZ1JlZiBleHBlY3RlZFN0cmluZyA9IEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGV4cGVjdGVkKTsKKyAgICBKU1N0cmluZ1JlZiBz
Y3JpcHRTdHJpbmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KHNjcmlwdENvbnRleHQsIHNjcmlwdFZh
bHVlLCAwKTsKKyAgICBFWFBFQ1RfVFJVRShKU1N0cmluZ0lzRXF1YWwoc2NyaXB0U3RyaW5nLCBl
eHBlY3RlZFN0cmluZykpOworCisgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdFN0cmluZyk7Cisg
ICAgSlNTdHJpbmdSZWxlYXNlKGV4cGVjdGVkU3RyaW5nKTsKKyAgICBKU0dsb2JhbENvbnRleHRS
ZWxlYXNlKHNjcmlwdENvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCBkaWRSdW5KYXZhU2NyaXB0
MShXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZVJlZiByZXN1bHRTZXJpYWxpemVkU2NyaXB0VmFsdWUs
IFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXNzZXJ0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSXNTdHJpbmdWYWx1ZShyZXN1bHRTZXJpYWxpemVkU2NyaXB0VmFsdWUsIGVy
cm9yLCAidmlzaWJsZSIpOworICAgIHNldFBhZ2VWaXNpYmlsaXR5U3RhdGVXaXRoRXZhbENvbnRp
bnVhdGlvbihzdGF0aWNfY2FzdDxQbGF0Zm9ybVdlYlZpZXcqPihjb250ZXh0KSwga1dLUGFnZVZp
c2liaWxpdHlTdGF0ZUhpZGRlbiwgZGlkUnVuSmF2YVNjcmlwdDIpOworfQorCitzdGF0aWMgdm9p
ZCBkaWRSdW5KYXZhU2NyaXB0MihXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZVJlZiByZXN1bHRTZXJp
YWxpemVkU2NyaXB0VmFsdWUsIFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIGNvbnRleHQpCit7Cisg
ICAgYXNzZXJ0U2VyaWFsaXplZFNjcmlwdFZhbHVlSXNTdHJpbmdWYWx1ZShyZXN1bHRTZXJpYWxp
emVkU2NyaXB0VmFsdWUsIGVycm9yLCAiaGlkZGVuIik7CisgICAgc2V0UGFnZVZpc2liaWxpdHlT
dGF0ZVdpdGhFdmFsQ29udGludWF0aW9uKHN0YXRpY19jYXN0PFBsYXRmb3JtV2ViVmlldyo+KGNv
bnRleHQpLCBrV0tQYWdlVmlzaWJpbGl0eVN0YXRlUHJlcmVuZGVyLCBkaWRSdW5KYXZhU2NyaXB0
Myk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFJ1bkphdmFTY3JpcHQzKFdLU2VyaWFsaXplZFNjcmlw
dFZhbHVlUmVmIHJlc3VsdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwgV0tFcnJvclJlZiBlcnJvciwg
dm9pZCogY29udGV4dCkKK3sKKyAgICBhc3NlcnRTZXJpYWxpemVkU2NyaXB0VmFsdWVJc1N0cmlu
Z1ZhbHVlKHJlc3VsdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwgZXJyb3IsICJwcmVyZW5kZXIiKTsK
KyAgICBzZXRQYWdlVmlzaWJpbGl0eVN0YXRlV2l0aEV2YWxDb250aW51YXRpb24oc3RhdGljX2Nh
c3Q8UGxhdGZvcm1XZWJWaWV3Kj4oY29udGV4dCksIGtXS1BhZ2VWaXNpYmlsaXR5U3RhdGVQcmV2
aWV3LCBkaWRSdW5KYXZhU2NyaXB0NCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFJ1bkphdmFTY3Jp
cHQ0KFdLU2VyaWFsaXplZFNjcmlwdFZhbHVlUmVmIHJlc3VsdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSwgV0tFcnJvclJlZiBlcnJvciwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhc3NlcnRTZXJpYWxp
emVkU2NyaXB0VmFsdWVJc1N0cmluZ1ZhbHVlKHJlc3VsdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwg
ZXJyb3IsICJwcmV2aWV3Iik7CisgICAgdGVzdERvbmUgPSB0cnVlOworfQorCitURVNUKFdlYktp
dDIsIFBhZ2VWaXNpYmlsaXR5U3RhdGUpCit7CisgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVm
PiBjb250ZXh0KEFkb3B0V0ssIFdLQ29udGV4dENyZWF0ZSgpKTsKKworICAgIC8vIFBhc3MgdGhl
IFBsYXRmb3JtV2ViVmlldyB3ZWJWaWV3IG9uIGFzIHRoZSBjb250ZXh0IG9mIHRoZSBldmFscywg
c28gd2UgY2FuIGNvbnRpbnVlIHRvIGV2YWwgb24gaXQuCisgICAgUGxhdGZvcm1XZWJWaWV3IHdl
YlZpZXcoY29udGV4dC5nZXQoKSk7ICAgIAorICAgIHNldFBhZ2VWaXNpYmlsaXR5U3RhdGVXaXRo
RXZhbENvbnRpbnVhdGlvbigmd2ViVmlldywga1dLUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUs
IGRpZFJ1bkphdmFTY3JpcHQxKTsKKworICAgIFV0aWw6OnJ1bigmdGVzdERvbmUpOworfQorCit9
IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRleCBiMjhkNjU3Li41N2FmODhj
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RS
dW5uZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVz
dFJ1bm5lci5jcHAKQEAgLTMyLDEzICszMiwxMyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmll
dy5oIgogI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RDb250cm9s
bGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlVmlzaWJpbGl0eVN0YXRlLmg+CiAjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0J1bmRsZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVCYWNrRm9y
d2FyZExpc3QuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlRnJhbWUuaD4KICNpbmNsdWRl
IDxXZWJLaXQyL1dLQnVuZGxlRnJhbWVQcml2YXRlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0J1
bmRsZUluc3BlY3Rvci5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVOb2RlSGFuZGxlUHJp
dmF0ZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVQYWdlLmg+CiAjaW5jbHVkZSA8V2Vi
S2l0Mi9XS0J1bmRsZVBhZ2VQcml2YXRlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0J1bmRsZVBy
aXZhdGUuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlU2NyaXB0V29ybGQuaD4KQEAgLTU1
MSwyMSArNTUxLDIxIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIHNo
b3VsZERlZmVyTG9hZGluZykKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShK
U1N0cmluZ1JlZiBzdGF0ZSkKIHsKLSAgICBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlIHZp
c2liaWxpdHlTdGF0ZSA9IFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlOworICAg
IFdLUGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUgPSBrV0tQYWdlVmlzaWJpbGl0
eVN0YXRlVmlzaWJsZTsKIAogICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN0
YXRlLCAiaGlkZGVuIikpCi0gICAgICAgIHZpc2liaWxpdHlTdGF0ZSA9IFdlYkNvcmU6OlBhZ2VW
aXNpYmlsaXR5U3RhdGVIaWRkZW47CisgICAgICAgIHZpc2liaWxpdHlTdGF0ZSA9IGtXS1BhZ2VW
aXNpYmlsaXR5U3RhdGVIaWRkZW47CiAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhzdGF0ZSwgInByZXJlbmRlciIpKQotICAgICAgICB2aXNpYmlsaXR5U3RhdGUgPSBX
ZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlUHJlcmVuZGVyOworICAgICAgICB2aXNpYmlsaXR5
U3RhdGUgPSBrV0tQYWdlVmlzaWJpbGl0eVN0YXRlUHJlcmVuZGVyOwogICAgIGVsc2UgaWYgKEpT
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3RhdGUsICJwcmV2aWV3IikpCi0gICAgICAgIHZp
c2liaWxpdHlTdGF0ZSA9IFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmV2aWV3OworICAg
ICAgICB2aXNpYmlsaXR5U3RhdGUgPSBrV0tQYWdlVmlzaWJpbGl0eVN0YXRlUHJldmlldzsKIAog
ICAgIFdLQnVuZGxlU2V0UGFnZVZpc2liaWxpdHlTdGF0ZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgdmlz
aWJpbGl0eVN0YXRlLCAvKiBpc0luaXRpYWxTdGF0ZSAqLyBmYWxzZSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCiB7Ci0gICAgV0tCdW5kbGVTZXRQYWdlVmlz
aWJpbGl0eVN0YXRlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0
YXRlVmlzaWJsZSwgLyogaXNJbml0aWFsU3RhdGUgKi8gdHJ1ZSk7CisgICAgV0tCdW5kbGVTZXRQ
YWdlVmlzaWJpbGl0eVN0YXRlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCBrV0tQYWdlVmlzaWJpbGl0eVN0
YXRlVmlzaWJsZSwgLyogaXNJbml0aWFsU3RhdGUgKi8gdHJ1ZSk7CiB9CiAKIHR5cGVkZWYgV1RG
OjpIYXNoTWFwPHVuc2lnbmVkLCBKU1ZhbHVlUmVmPiBDYWxsYmFja01hcDsK
</data>
<flag name="review"
          id="202389"
          type_id="1"
          status="-"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="202390"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184635</attachid>
            <date>2013-01-24 18:49:16 -0800</date>
            <delta_ts>2013-01-26 11:30:18 -0800</delta_ts>
            <desc>[PATCH] Addressed Review Comments</desc>
            <filename>enum-2.patch</filename>
            <type>text/plain</type>
            <size>45415</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwppbmRleCA1YmZiNWZhLi40NzY3NWIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTMtMDEtMjQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFw
cGxlLmNvbT4KKworICAgICAgICBJbXByb3ZlIFBhZ2VWaXNpYmlsaXR5IEFQSSB3aXRoIGVudW1z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDczNjQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZp
ZXcvV2ViVmlldy5tbToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdQcml2YXRlLmg6CisgICAg
ICAgIChjb3JlUGFnZVZpc2liaWxpdHlTdGF0ZSk6CisgICAgICAgICgtW1dlYlZpZXcgX3NldFZp
c2liaWxpdHlTdGF0ZTppc0luaXRpYWxTdGF0ZTpdKToKKyAgICAgICAgU3dpdGNoIHRoZSBwcml2
YXRlIEFQSSBmb3JtIGludCB0byBhIFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGUgZW51bS4KKwogMjAx
My0wMS0yNCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAg
ICAgIE9iamVjdGl2ZS1DIEFQSTogUmVuYW1lIEpTVmFsdWUuaC9BUElKU1ZhbHVlLmggdG8gSlND
SlNWYWx1ZS5oL0pTVmFsdWUuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4
IDYyNmY0YjMuLmYxM2U1YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAg
LTQwOSw2ICs0MDksMjMgQEAgV2ViTGF5b3V0TWlsZXN0b25lcyBraXRMYXlvdXRNaWxlc3RvbmVz
KExheW91dE1pbGVzdG9uZXMgbWlsZXN0b25lcykKICAgICAgICAgfCAobWlsZXN0b25lcyAmIERp
ZEhpdFJlbGV2YW50UmVwYWludGVkT2JqZWN0c0FyZWFUaHJlc2hvbGQgPyBXZWJEaWRIaXRSZWxl
dmFudFJlcGFpbnRlZE9iamVjdHNBcmVhVGhyZXNob2xkIDogMCk7CiB9CiAKK3N0YXRpYyBQYWdl
VmlzaWJpbGl0eVN0YXRlIGNvcmVQYWdlVmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5
U3RhdGUgdmlzaWJpbGl0eVN0YXRlKQoreworICAgIHN3aXRjaCAodmlzaWJpbGl0eVN0YXRlKSB7
CisgICAgY2FzZSBXZWJQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZToKKyAgICAgICAgcmV0dXJu
IFBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlOworICAgIGNhc2UgV2ViUGFnZVZpc2liaWxpdHlT
dGF0ZUhpZGRlbjoKKyAgICAgICAgcmV0dXJuIFBhZ2VWaXNpYmlsaXR5U3RhdGVIaWRkZW47Cisg
ICAgY2FzZSBXZWJQYWdlVmlzaWJpbGl0eVN0YXRlUHJlcmVuZGVyOgorICAgICAgICByZXR1cm4g
UGFnZVZpc2liaWxpdHlTdGF0ZVByZXJlbmRlcjsKKyAgICBjYXNlIFdlYlBhZ2VWaXNpYmlsaXR5
U3RhdGVQcmV2aWV3OgorICAgICAgICByZXR1cm4gUGFnZVZpc2liaWxpdHlTdGF0ZVByZXZpZXc7
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFBhZ2VWaXNp
YmlsaXR5U3RhdGVWaXNpYmxlOworfQorCiBAaW50ZXJmYWNlIFdlYlZpZXcgKFdlYkZpbGVJbnRl
cm5hbCkKIC0gKGZsb2F0KV9kZXZpY2VTY2FsZUZhY3RvcjsKIC0gKEJPT0wpX2lzTG9hZGluZzsK
QEAgLTI5MTksNiArMjkzNiwxNCBAQCBzdGF0aWMgVmVjdG9yPFN0cmluZz4gdG9TdHJpbmdWZWN0
b3IoTlNBcnJheSogcGF0dGVybnMpCiAgICAgcmV0dXJuIGtpdExheW91dE1pbGVzdG9uZXMocGFn
ZS0+bGF5b3V0TWlsZXN0b25lcygpKTsKIH0KIAorLSAodm9pZClfc2V0VmlzaWJpbGl0eVN0YXRl
OihXZWJQYWdlVmlzaWJpbGl0eVN0YXRlKXZpc2liaWxpdHlTdGF0ZSBpc0luaXRpYWxTdGF0ZToo
Qk9PTClpc0luaXRpYWxTdGF0ZQoreworI2lmIEVOQUJMRShQQUdFX1ZJU0lCSUxJVFlfQVBJKSB8
fCBFTkFCTEUoSElEREVOX1BBR0VfRE9NX1RJTUVSX1RIUk9UVExJTkcpCisgICAgaWYgKF9wcml2
YXRlLT5wYWdlKQorICAgICAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0VmlzaWJpbGl0eVN0YXRlKGNv
cmVQYWdlVmlzaWJpbGl0eVN0YXRlKHZpc2liaWxpdHlTdGF0ZSksIGlzSW5pdGlhbFN0YXRlKTsK
KyNlbmRpZgorfQorCiAtICh2b2lkKV9zZXRQYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zOihC
T09MKWJlaGF2ZXNMaWtlQ29sdW1ucwogewogICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKHNlbGYpOwpA
QCAtMzA0NywxNSArMzA3Miw2IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB0b1N0cmluZ1ZlY3Rv
cihOU0FycmF5KiBwYXR0ZXJucykKICAgICBSZXNvdXJjZVJlcXVlc3Q6OnNldEhUVFBQaXBlbGlu
aW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAotLSAodm9pZClfc2V0VmlzaWJpbGl0eVN0YXRlOihp
bnQpdmlzaWJpbGl0eVN0YXRlIGlzSW5pdGlhbFN0YXRlOihCT09MKWlzSW5pdGlhbFN0YXRlCi17
Ci0jaWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9BUEkpIHx8IEVOQUJMRShISURERU5fUEFHRV9E
T01fVElNRVJfVEhST1RUTElORykKLSAgICBpZiAoX3ByaXZhdGUtPnBhZ2UpIHsKLSAgICAgICAg
X3ByaXZhdGUtPnBhZ2UtPnNldFZpc2liaWxpdHlTdGF0ZShzdGF0aWNfY2FzdDxQYWdlVmlzaWJp
bGl0eVN0YXRlPih2aXNpYmlsaXR5U3RhdGUpLCBpc0luaXRpYWxTdGF0ZSk7Ci0gICAgfQotI2Vu
ZGlmCi19Ci0KIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIF9XZWJTYWZlRm9yd2FyZGVyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgKaW5kZXggZmQ1YjliMC4uMjFi
YWY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3UHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld1ByaXZhdGUuaApAQCAt
MTE1LDcgKzExNSwxNSBAQCBlbnVtIHsKIH07CiB0eXBlZGVmIE5TVUludGVnZXIgV2ViTGF5b3V0
TWlsZXN0b25lczsKIAotLy8gVGhpcyBuZWVkcyB0byBiZSBpbiBzeW5jIHdpdGggV2ViQ29yZTo6
Tm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uCisvLyBNaXJyb3JpbmcgV2ViQ29yZTo6UGFn
ZVZpc2liaWxpdHlTdGF0ZS4KK3R5cGVkZWYgZW51bSB7CisgICAgV2ViUGFnZVZpc2liaWxpdHlT
dGF0ZVZpc2libGUsCisgICAgV2ViUGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRlbiwKKyAgICBXZWJQ
YWdlVmlzaWJpbGl0eVN0YXRlUHJlcmVuZGVyLAorICAgIFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVQ
cmV2aWV3Cit9IFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGU7CisKKy8vIE1pcnJvcmluZyBXZWJDb3Jl
OjpOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb24uCiB0eXBlZGVmIGVudW0gewogICAgIFdl
Yk5vdGlmaWNhdGlvblBlcm1pc3Npb25BbGxvd2VkLAogICAgIFdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb25Ob3RBbGxvd2VkLApAQCAtNTc0LDYgKzU4Miw4IEBAIENvdWxkIGJlIHdvcnRoIGFkZGlu
ZyB0byB0aGUgQVBJLgogLSAodm9pZClfbGlzdGVuRm9yTGF5b3V0TWlsZXN0b25lczooV2ViTGF5
b3V0TWlsZXN0b25lcylsYXlvdXRNaWxlc3RvbmVzOwogLSAoV2ViTGF5b3V0TWlsZXN0b25lcylf
bGF5b3V0TWlsZXN0b25lczsKIAorLSAodm9pZClfc2V0VmlzaWJpbGl0eVN0YXRlOihXZWJQYWdl
VmlzaWJpbGl0eVN0YXRlKXZpc2liaWxpdHlTdGF0ZSBpc0luaXRpYWxTdGF0ZTooQk9PTClpc0lu
aXRpYWxTdGF0ZTsKKwogLy8gV2hldGhlciB0aGUgY29sdW1uLWJyZWFrLXtiZWZvcmUsYWZ0ZXJ9
IHByb3BlcnRpZXMgYXJlIHJlc3BlY3RlZCBpbnN0ZWFkIG9mIHRoZQogLy8gcGFnZS1icmVhay17
YmVmb3JlLGFmdGVyfSBwcm9wZXJ0aWVzLgogLSAodm9pZClfc2V0UGFnaW5hdGlvbkJlaGF2ZXNM
aWtlQ29sdW1uczooQk9PTCliZWhhdmVzTGlrZUNvbHVtbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjZjN2Yy
MS4uMDYxYTcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEzLTAxLTI0ICBKb3Nl
cGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSBQYWdl
VmlzaWJpbGl0eSBBUEkgd2l0aCBlbnVtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MzY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL2MvV0tQYWdlVmlzaWJpbGl0eVR5cGVzLmg6
IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaDoKKyAgICAg
ICAgKFdlYktpdDo6dG9QYWdlVmlzaWJpbGl0eVN0YXRlKToKKyAgICAgICAgQ3JlYXRlIGFuIGVu
dW0gZm9yIHBhZ2UgdmlzaWJpbGl0eSBBUElzIGFuZCBhIGNvbnZlcnNpb24gZnVuY3Rpb24KKyAg
ICAgICAgZm9yIHRoZSBXSzIgdmFsdWVzIHRvIFdlYkNvcmUgdmFsdWVzLgorCisgICAgICAgICog
VGFyZ2V0LnByaToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIFdLUGFnZVZpc2li
aWxpdHlUeXBlcy5oIHRvIHRoZSBidWlsZCBhcyBhIHByaXZhdGUgZXhwb3J0LgorCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9X
S1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdlU2V0VmlzaWJpbGl0eVN0YXRlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0VmlzaWJpbGl0eVN0
YXRlKToKKyAgICAgICAgVUlQcm9jZXNzIEFQSSB0byBzZXQgdmlzaWJpbGl0eSBzdGF0ZS4gV2Vi
UGFnZVByb3h5IGFscmVhZHkKKyAgICAgICAgaGFkIG1fdmlzaWJpbGl0eVN0YXRlLCBzbyB1cGRh
dGUgdGhhdCB3aGVuIHNldHRlciBpcyB1c2VkLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmg6CisgICAgICAgIFJlbW92ZSB0aGUgb2xk
IFNQSSBmb3IgV2ViS2l0VGVzdFJ1bm5lci4gVGVzdHMgbm93IHVzZSB0aGUgQyBBUEkuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0Vmlz
aWJpbGl0eVN0YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbjoKKyAgICAgICAgVXBkYXRlIHRoZSBleGlzdGluZyBXZWJQYWdlIEFQSSB0byB1c2Ug
dWludDMyX3QsIHdoaWNoIG1hdGNoZXMKKyAgICAgICAgb3RoZXIgZW51bSBtZXNzYWdlIHR5cGVz
LgorCiAyMDEzLTAxLTI0ICBKYWUgSHl1biBQYXJrICA8amFlLnBhcmtAY29tcGFueTEwMC5uZXQ+
CiAKICAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IHJlbW92ZSBTdXJmYWNlVXBkYXRlSW5m
bzo6ZW5jb2RlL2RlY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZDVkZDQ3
Yi4uZDcwMzE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5h
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yMCw2ICsyMCw3
IEBAIHdlYmtpdDJfaF9hcGkgKz0gXAogCSQoV2ViS2l0MikvU2hhcmVkL0FQSS9jL1dLTXV0YWJs
ZURpY3Rpb25hcnkuaCBcCiAJJChXZWJLaXQyKS9TaGFyZWQvQVBJL2MvV0tOdW1iZXIuaCBcCiAJ
JChXZWJLaXQyKS9TaGFyZWQvQVBJL2MvV0tQYWdlTG9hZFR5cGVzLmggXAorCSQoV2ViS2l0Mikv
U2hhcmVkL0FQSS9jL1dLUGFnZVZpc2liaWxpdHlUeXBlcy5oIFwKIAkkKFdlYktpdDIpL1NoYXJl
ZC9BUEkvYy9XS1JlbmRlckxheWVyLmggXAogCSQoV2ViS2l0MikvU2hhcmVkL0FQSS9jL1dLUmVu
ZGVyT2JqZWN0LmggXAogCSQoV2ViS2l0MikvU2hhcmVkL0FQSS9jL1dLU2VjdXJpdHlPcmlnaW4u
aCBcCkBAIC0zNDQsNiArMzQ1LDcgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQVBJL2MvV0tOdW1iZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
QVBJL2MvV0tOdW1iZXIuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLUGFnZUxv
YWRUeXBlcy5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tQYWdlVmlzaWJpbGl0
eVR5cGVzLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1JlbmRlckxheWVyLmNw
cCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLUmVuZGVyTGF5ZXIuaCBcCiAJU291
cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLUmVuZGVyT2JqZWN0LmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tQYWdlVmlzaWJpbGl0eVR5cGVzLmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tQYWdlVmlzaWJpbGl0eVR5cGVzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJjNGNlZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1BhZ2VWaXNpYmlsaXR5VHlwZXMuaApAQCAt
MCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXS1BhZ2VWaXNpYmlsaXR5VHlwZXNf
aAorI2RlZmluZSBXS1BhZ2VWaXNpYmlsaXR5VHlwZXNfaAorCisjaWZkZWYgX19jcGx1c3BsdXMK
K2V4dGVybiAiQyIgeworI2VuZGlmCisKK2VudW0geworICAgIGtXS1BhZ2VWaXNpYmlsaXR5U3Rh
dGVWaXNpYmxlLAorICAgIGtXS1BhZ2VWaXNpYmlsaXR5U3RhdGVIaWRkZW4sCisgICAga1dLUGFn
ZVZpc2liaWxpdHlTdGF0ZVByZXJlbmRlciwKKyAgICBrV0tQYWdlVmlzaWJpbGl0eVN0YXRlUHJl
dmlldworfTsKK3R5cGVkZWYgdWludDMyX3QgV0tQYWdlVmlzaWJpbGl0eVN0YXRlOworCisjaWZk
ZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogV0tQYWdlVmlzaWJpbGl0eVR5
cGVzX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1NoYXJl
ZEFQSUNhc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3Qu
aAppbmRleCAzODBjZDI1Li5mN2I0MGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQ
SS9jL1dLU2hhcmVkQVBJQ2FzdC5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiV0tHZW9t
ZXRyeS5oIgogI2luY2x1ZGUgIldLSW1hZ2UuaCIKICNpbmNsdWRlICJXS1BhZ2VMb2FkVHlwZXMu
aCIKKyNpbmNsdWRlICJXS1BhZ2VWaXNpYmlsaXR5VHlwZXMuaCIKICNpbmNsdWRlICJXZWJFcnJv
ci5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIK
QEAgLTQ5LDYgKzUwLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xheW91dE1p
bGVzdG9uZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VWaXNpYmlsaXR5U3RhdGUuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2Vy
Q29udGVudFR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyU2NyaXB0VHlwZXMuaD4KQEAg
LTc4OCw2ICs3OTAsMjMgQEAgaW5saW5lIFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZXMgdG9MYXlv
dXRNaWxlc3RvbmVzKFdLTGF5b3V0TWlsZXN0b25lcyB3a01pbGVzdG8KICAgICByZXR1cm4gbWls
ZXN0b25lczsKIH0KIAoraW5saW5lIFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGUgdG9QYWdl
VmlzaWJpbGl0eVN0YXRlKFdLUGFnZVZpc2liaWxpdHlTdGF0ZSB3a1BhZ2VWaXNpYmlsaXR5U3Rh
dGUpCit7CisgICAgc3dpdGNoICh3a1BhZ2VWaXNpYmlsaXR5U3RhdGUpIHsKKyAgICBjYXNlIGtX
S1BhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGFn
ZVZpc2liaWxpdHlTdGF0ZVZpc2libGU7CisgICAgY2FzZSBrV0tQYWdlVmlzaWJpbGl0eVN0YXRl
SGlkZGVuOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRl
bjsKKyAgICBjYXNlIGtXS1BhZ2VWaXNpYmlsaXR5U3RhdGVQcmVyZW5kZXI6CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlUHJlcmVuZGVyOworICAgIGNhc2Uga1dL
UGFnZVZpc2liaWxpdHlTdGF0ZVByZXZpZXc6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpQYWdl
VmlzaWJpbGl0eVN0YXRlUHJldmlldzsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGU7Cit9CisK
IGlubGluZSBJbWFnZU9wdGlvbnMgdG9JbWFnZU9wdGlvbnMoV0tJbWFnZU9wdGlvbnMgd2tJbWFn
ZU9wdGlvbnMpCiB7CiAgICAgdW5zaWduZWQgaW1hZ2VPcHRpb25zID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmlu
ZGV4IDBmNDBhYzMuLmQ2YjY4ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtNTYsNiArNTYsNyBAQCBIRUFE
RVJTICs9IFwKICAgICBTaGFyZWQvQVBJL2MvV0tNdXRhYmxlRGljdGlvbmFyeS5oIFwKICAgICBT
aGFyZWQvQVBJL2MvV0tOdW1iZXIuaCBcCiAgICAgU2hhcmVkL0FQSS9jL1dLUGFnZUxvYWRUeXBl
cy5oIFwKKyAgICBTaGFyZWQvQVBJL2MvV0tQYWdlVmlzaWJpbGl0eVR5cGVzLmggXAogICAgIFNo
YXJlZC9BUEkvYy9XS1JlbmRlckxheWVyLmggXAogICAgIFNoYXJlZC9BUEkvYy9XS1JlbmRlck9i
amVjdC5oIFwKICAgICBTaGFyZWQvQVBJL2MvV0tTZWN1cml0eU9yaWdpbi5oIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKaW5kZXggY2Q1NzUzYS4uZGY0YWY2OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKQEAgLTM0OSw2ICsz
NDksMTEgQEAgdm9pZCBXS1BhZ2VMaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKFdLUGFnZVJlZiBw
YWdlUmVmLCBXS0xheW91dE1pbGVzdG9uZXMgbWlsZXMKICAgICB0b0ltcGwocGFnZVJlZiktPmxp
c3RlbkZvckxheW91dE1pbGVzdG9uZXModG9MYXlvdXRNaWxlc3RvbmVzKG1pbGVzdG9uZXMpKTsK
IH0KIAordm9pZCBXS1BhZ2VTZXRWaXNpYmlsaXR5U3RhdGUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdL
UGFnZVZpc2liaWxpdHlTdGF0ZSBzdGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSkKK3sKKyAgICB0
b0ltcGwocGFnZVJlZiktPnNldFZpc2liaWxpdHlTdGF0ZSh0b1BhZ2VWaXNpYmlsaXR5U3RhdGUo
c3RhdGUpLCBpc0luaXRpYWxTdGF0ZSk7Cit9CisKIGJvb2wgV0tQYWdlSGFzSG9yaXpvbnRhbFNj
cm9sbGJhcihXS1BhZ2VSZWYgcGFnZVJlZikKIHsKICAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYp
LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tQYWdlLmgKaW5kZXggNjY1YzI3Zi4uZGVhMmMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tH
ZW9tZXRyeS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tOYXRpdmVFdmVudC5oPgogI2luY2x1ZGUg
PFdlYktpdDIvV0tQYWdlTG9hZFR5cGVzLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2VWaXNp
YmlsaXR5VHlwZXMuaD4KIAogI2lmbmRlZiBfX2NwbHVzcGx1cwogI2luY2x1ZGUgPHN0ZGJvb2wu
aD4KQEAgLTQyMyw2ICs0MjQsOCBAQCBXS19FWFBPUlQgV0tTaXplIFdLUGFnZUZpeGVkTGF5b3V0
U2l6ZShXS1BhZ2VSZWYgcGFnZSk7CiAKIFdLX0VYUE9SVCB2b2lkIFdLUGFnZUxpc3RlbkZvckxh
eW91dE1pbGVzdG9uZXMoV0tQYWdlUmVmIHBhZ2UsIFdLTGF5b3V0TWlsZXN0b25lcyBtaWxlc3Rv
bmVzKTsKIAorV0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0VmlzaWJpbGl0eVN0YXRlKFdLUGFnZVJl
ZiBwYWdlLCBXS1BhZ2VWaXNpYmlsaXR5U3RhdGUgc3RhdGUsIGJvb2wgaXNJbml0aWFsU3RhdGUp
OworCiBXS19FWFBPUlQgYm9vbCBXS1BhZ2VIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKFdLUGFnZVJl
ZiBwYWdlKTsKIFdLX0VYUE9SVCBib29sIFdLUGFnZUhhc1ZlcnRpY2FsU2Nyb2xsYmFyKFdLUGFn
ZVJlZiBwYWdlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApp
bmRleCBkYjBlOTEyLi4wYWQwOWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcApAQCAtMTYwMiw2ICsxNjAyLDE5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpsaXN0
ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZXMgbWlsZXN0b25l
CiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMaXN0ZW5Gb3JMYXlvdXRN
aWxlc3RvbmVzKG1pbGVzdG9uZXMpLCBtX3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5
OjpzZXRWaXNpYmlsaXR5U3RhdGUoV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmls
aXR5U3RhdGUsIGJvb2wgaXNJbml0aWFsU3RhdGUpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShQQUdFX1ZJU0lCSUxJVFlfQVBJKQorICAgIGlm
ICh2aXNpYmlsaXR5U3RhdGUgIT0gbV92aXNpYmlsaXR5U3RhdGUgfHwgaXNJbml0aWFsU3RhdGUp
IHsKKyAgICAgICAgbV92aXNpYmlsaXR5U3RhdGUgPSB2aXNpYmlsaXR5U3RhdGU7CisgICAgICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VmlzaWJpbGl0eVN0YXRlKHZp
c2liaWxpdHlTdGF0ZSwgaXNJbml0aWFsU3RhdGUpLCBtX3BhZ2VJRCk7CisgICAgfQorI2VuZGlm
Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRTdXBwcmVzc1Njcm9sbGJhckFuaW1hdGlvbnMo
Ym9vbCBzdXBwcmVzc0FuaW1hdGlvbnMpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggZDg4OGM3MC4uMTkxMTk3YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNDk0LDYgKzQ5NCw4IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgbGlzdGVuRm9yTGF5b3V0TWlsZXN0b25lcyhXZWJDb3JlOjpM
YXlvdXRNaWxlc3RvbmVzKTsKIAorICAgIHZvaWQgc2V0VmlzaWJpbGl0eVN0YXRlKFdlYkNvcmU6
OlBhZ2VWaXNpYmlsaXR5U3RhdGUsIGJvb2wgaXNJbml0aWFsU3RhdGUpOworCiAgICAgYm9vbCBo
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9tYWluRnJhbWVIYXNIb3Jp
em9udGFsU2Nyb2xsYmFyOyB9CiAgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0
IHsgcmV0dXJuIG1fbWFpbkZyYW1lSGFzVmVydGljYWxTY3JvbGxiYXI7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDVhN2Iy
YTYuLmQ3NDM3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTU3Nyw2ICs1NzcsNyBAQAogCQk5RjU0Rjg5NTE2NDhBRTBGMDA3
REY4MUEgLyogUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjU0Rjg5NDE2NDhBRTBFMDA3REY4MUEgLyogUGx1
Z2luUHJvY2Vzc01hbmFnZXJNYWMubW0gKi87IH07CiAJCTlGQjVGMzk0MTY5RTZBODAwMDJDMjVC
RiAvKiBXS0NvbnRleHRQcml2YXRlTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlGQjVGMzkyMTY5RTZBODAwMDJDMjVCRiAvKiBXS0NvbnRleHRQ
cml2YXRlTWFjLmNwcCAqLzsgfTsKIAkJOUZCNUYzOTUxNjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29u
dGV4dFByaXZhdGVNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlGQjVGMzkzMTY5RTZBODAwMDJDMjVCRiAvKiBXS0NvbnRleHRQcml2YXRlTWFjLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFRkQz
OEMxNkIwRTg4QzAwQjJGMEU4IC8qIFdLUGFnZVZpc2liaWxpdHlUeXBlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFRkQzOEIxNkIwRTg4QzAwQjJG
MEU4IC8qIFdLUGFnZVZpc2liaWxpdHlUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUI2MkU3MzEwMTQzMDQ3QTYwMDY5RUMzNSAvKiBXS0hp
dFRlc3RSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjYyRTczMEYxNDMwNDdBNjAwNjlFQzM1IC8qIFdLSGl0VGVzdFJlc3VsdC5jcHAgKi87
IH07CiAJCUI2MkU3MzEyMTQzMDQ3QjAwMDY5RUMzNSAvKiBXS0hpdFRlc3RSZXN1bHQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2MkU3MzExMTQzMDQ3
QjAwMDY5RUMzNSAvKiBXS0hpdFRlc3RSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCNjM0MDNGOTE0OTEwRDU3MDAxMDcwQjUgLyogQVBJ
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI2MzQwM0Y4MTQ5MTBENTcwMDEwNzBCNSAvKiBBUElPYmplY3QuY3BwICovOyB9OwpAQCAtMTg2
Myw2ICsxODY0LDcgQEAKIAkJOUY1NEY4OTQxNjQ4QUUwRTAwN0RGODFBIC8qIFBsdWdpblByb2Nl
c3NNYW5hZ2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
UGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlGQjVGMzkyMTY5RTZBODAwMDJDMjVCRiAvKiBXS0NvbnRleHRQcml2YXRlTWFjLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdLQ29udGV4dFByaXZhdGVNYWMuY3Bw
OyBwYXRoID0gbWFjL1dLQ29udGV4dFByaXZhdGVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5RkI1RjM5MzE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1h
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0NvbnRleHRQcml2YXRlTWFj
Lmg7IHBhdGggPSBtYWMvV0tDb250ZXh0UHJpdmF0ZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBNUVGRDM4QjE2QjBFODhDMDBCMkYwRTggLyogV0tQYWdlVmlzaWJpbGl0eVR5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUGFnZVZpc2liaWxpdHlU
eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzJENUQ3RjEyMzZDQkE4MDBB
ODhCMTUgLyogV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMzk2RUE1NTEyRTBFRDJEMDBGNEZFQjcgLyogY29uZmlnLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCNjJFNzMwRjE0MzA0N0E2MDA2OUVDMzUgLyogV0tIaXRUZXN0UmVzdWx0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLSGl0VGVzdFJlc3VsdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MjYyLDYgKzQyNjQsNyBAQAogCQkJ
CUJDNDA3NUU1MTI0RkYwMjcwMDY4RjIwQSAvKiBXS051bWJlci5jcHAgKi8sCiAJCQkJQkM0MDc1
RTYxMjRGRjAyNzAwNjhGMjBBIC8qIFdLTnVtYmVyLmggKi8sCiAJCQkJQkMyRDAyMTgxMkFDNDI2
QzAwRTczMkEzIC8qIFdLUGFnZUxvYWRUeXBlcy5oICovLAorCQkJCUE1RUZEMzhCMTZCMEU4OEMw
MEIyRjBFOCAvKiBXS1BhZ2VWaXNpYmlsaXR5VHlwZXMuaCAqLywKIAkJCQkzNzk0ODQwNjE1MEM0
Qjk2MDBFNTJDRTkgLyogV0tSZW5kZXJMYXllci5jcHAgKi8sCiAJCQkJMzc5NDg0MDcxNTBDNEI5
NjAwRTUyQ0U5IC8qIFdLUmVuZGVyTGF5ZXIuaCAqLywKIAkJCQkzNzYwODgyMDE1MDQxNEY3MDBG
QzgyQzcgLyogV0tSZW5kZXJPYmplY3QuY3BwICovLApAQCAtNTA3Miw2ICs1MDc1LDcgQEAKIAkJ
CQlFMUU1NTJDNTE2QUUwNjVGMDA0RUQ2NTMgLyogU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1l
dGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBQzRERTcxNkIxQ0JGNjAwOTQyNUUzIC8qIFdl
YktleVZhbHVlU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRDMzMDZGMTZC
MUQ5OTEwMDRGNjBFNyAvKiBTdG9yYWdlQXJlYVByb3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQlB
NUVGRDM4QzE2QjBFODhDMDBCMkYwRTggLyogV0tQYWdlVmlzaWJpbGl0eVR5cGVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2MvV0tCdW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5jcHAKaW5kZXggMjQ0N2UyMC4uMWNhZGRlMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvYy9XS0J1bmRsZS5jcHAKQEAgLTMwMCwxMSArMzAwLDYgQEAgYm9vbCBXS0J1bmRsZUlz
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKFdLQnVuZGxlUmVmKQogICAgIHJldHVybiBJbmplY3RlZEJ1
bmRsZTo6aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAotdm9pZCBXS0J1bmRsZVNldFBh
Z2VWaXNpYmlsaXR5U3RhdGUoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYg
cGFnZVJlZiwgaW50IHN0YXRlLCBib29sIGlzSW5pdGlhbFN0YXRlKQotewotICAgIHRvSW1wbChi
dW5kbGVSZWYpLT5zZXRQYWdlVmlzaWJpbGl0eVN0YXRlKHRvSW1wbChwYWdlUmVmKSwgc3RhdGUs
IGlzSW5pdGlhbFN0YXRlKTsKLX0KLQogc2l6ZV90IFdLQnVuZGxlR2V0V29ya2VyVGhyZWFkQ291
bnQoV0tCdW5kbGVSZWYpCiB7CiAgICAgLy8gQWN0dWFsbHkgZG8gbm90IG5lZWQgYXJndW1lbnQg
aGVyZSwga2VlcGluZyBpdCBob3dldmVyIGZvciBjb25zaXN0ZW5jeS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUHJpdmF0ZS5oCmluZGV4IGJiNWY1YmEuLjkyZWY0ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZVByaXZhdGUuaApAQCAtOTgsOCArOTgsNiBAQCBXS19FWFBPUlQgc2l6ZV90IFdLQnVu
ZGxlR2V0SmF2YVNjcmlwdE9iamVjdHNDb3VudChXS0J1bmRsZVJlZiBidW5kbGUpOwogCiBXS19F
WFBPUlQgYm9vbCBXS0J1bmRsZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKFdLQnVuZGxlUmVmIGJ1
bmRsZSk7CiAKLVdLX0VYUE9SVCB2b2lkIFdLQnVuZGxlU2V0UGFnZVZpc2liaWxpdHlTdGF0ZShX
S0J1bmRsZVJlZiBidW5kbGUsIFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBpbnQgc3RhdGUsIGJvb2wg
aXNJbml0aWFsU3RhdGUpOwotCiBXS19FWFBPUlQgc2l6ZV90IFdLQnVuZGxlR2V0V29ya2VyVGhy
ZWFkQ291bnQoV0tCdW5kbGVSZWYgYnVuZGxlKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVT
ZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSwgYm9vbCBlbmFibGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXgg
ODk1NjBiNy4uNTdjNWIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTYxLDcgKzYxLDYg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0pTVWludDhBcnJheS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUdyb3VwLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlVmlzaWJpbGl0eVN0YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QcmludENvbnRleHQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaD4KQEAgLTU4MCwxMyArNTc5LDYgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV2ViUGFnZSogcGFnZSwgY29uc3Qg
U3RyaW5nJiBtZXNzYWcKICAgICBtX2NsaWVudC5kaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSh0aGlz
LCBwYWdlLCBtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkpOwogfQogCi12b2lkIEluamVjdGVkQnVu
ZGxlOjpzZXRQYWdlVmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2UqIHBhZ2UsIGludCBzdGF0ZSwgYm9v
bCBpc0luaXRpYWxTdGF0ZSkKLXsKLSNpZiBFTkFCTEUoUEFHRV9WSVNJQklMSVRZX0FQSSkgfHwg
RU5BQkxFKEhJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKQotICAgIHBhZ2UtPmNvcmVQ
YWdlKCktPnNldFZpc2liaWxpdHlTdGF0ZShzdGF0aWNfY2FzdDxQYWdlVmlzaWJpbGl0eVN0YXRl
PihzdGF0ZSksIGlzSW5pdGlhbFN0YXRlKTsKLSNlbmRpZgotfQotCiBzaXplX3QgSW5qZWN0ZWRC
dW5kbGU6OndvcmtlclRocmVhZENvdW50KCkKIHsKICNpZiBFTkFCTEUoV09SS0VSUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuaAppbmRleCA5ODU5MTE1Li5kM2M2ZmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCkBA
IC0xNjksOCArMTY5LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgaXNQcm9jZXNzaW5n
VXNlckdlc3R1cmUoKTsKIAotICAgIHZvaWQgc2V0UGFnZVZpc2liaWxpdHlTdGF0ZShXZWJQYWdl
KiwgaW50IHN0YXRlLCBib29sIGlzSW5pdGlhbFN0YXRlKTsKLQogICAgIHN0YXRpYyBzaXplX3Qg
d29ya2VyVGhyZWFkQ291bnQoKTsKIAogICAgIHZvaWQgc2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzKFdlYlBhZ2UqLCBib29sIGVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDk4ZTM3YzUuLmMxMDBhZjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTM2MjIsNyAr
MzYyMiw3IEBAIEZyYW1lVmlldyogV2ViUGFnZTo6bWFpbkZyYW1lVmlldygpIGNvbnN0CiB9CiAK
ICNpZiBFTkFCTEUoUEFHRV9WSVNJQklMSVRZX0FQSSkgfHwgRU5BQkxFKEhJRERFTl9QQUdFX0RP
TV9USU1FUl9USFJPVFRMSU5HKQotdm9pZCBXZWJQYWdlOjpzZXRWaXNpYmlsaXR5U3RhdGUoaW50
IHZpc2liaWxpdHlTdGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSkKK3ZvaWQgV2ViUGFnZTo6c2V0
VmlzaWJpbGl0eVN0YXRlKHVpbnQzMl90IHZpc2liaWxpdHlTdGF0ZSwgYm9vbCBpc0luaXRpYWxT
dGF0ZSkKIHsKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggM2JkYjY1MC4uMzI2YTI2YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC01Niw5
ICs1Niw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaWYgRU5B
QkxFKFBBR0VfVklTSUJJTElUWV9BUEkpCiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlVmlzaWJpbGl0
eVN0YXRlLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29y
ZUtleWJvYXJkVUlNb2RlLmg+CkBAIC01NzYsNyArNTc0LDcgQEAgcHVibGljOgogICAgIGJvb2wg
d2lsbEdvVG9CYWNrRm9yd2FyZEl0ZW1DYWxsYmFja0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBt
X3dpbGxHb1RvQmFja0ZvcndhcmRJdGVtQ2FsbGJhY2tFbmFibGVkOyB9CiAKICNpZiBFTkFCTEUo
UEFHRV9WSVNJQklMSVRZX0FQSSkgfHwgRU5BQkxFKEhJRERFTl9QQUdFX0RPTV9USU1FUl9USFJP
VFRMSU5HKQotICAgIHZvaWQgc2V0VmlzaWJpbGl0eVN0YXRlKGludCB2aXNpYmlsaXR5U3RhdGUs
IGJvb2wgaXNJbml0aWFsU3RhdGUpOworICAgIHZvaWQgc2V0VmlzaWJpbGl0eVN0YXRlKHVpbnQz
Ml90IC8qIFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGUgKi8sIGJvb2wgaXNJbml0aWFsU3Rh
dGUpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUl9H
TCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4KaW5kZXggMTdhZDVlNC4uODEwYjgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTMwMSw3
ICszMDEsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIExlZ2FjeVJlY2Vp
dmVyIHsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9BUEkpIHx8IEVOQUJM
RShISURERU5fUEFHRV9ET01fVElNRVJfVEhST1RUTElORykKLSAgICBTZXRWaXNpYmlsaXR5U3Rh
dGUoaW50IHZpc2liaWxpdHlTdGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSkKKyAgICBTZXRWaXNp
YmlsaXR5U3RhdGUodWludDMyX3QgdmlzaWJpbGl0eVN0YXRlLCBib29sIGlzSW5pdGlhbFN0YXRl
KQogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlZDBh
ZGM4Li5lNDEyZDczZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEzLTAxLTI0ICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSBQYWdlVmlzaWJpbGl0eSBBUEkg
d2l0aCBlbnVtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA3MzY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbToKKyAgICAgICAgKFRlc3RS
dW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0UGFn
ZVZpc2liaWxpdHkpOgorICAgICAgICBVcGRhdGUgdGhlIFdLMSB0ZXN0IGNvZGUgdG8gdXNlIHRo
ZSBuZXcgV0sxIGVudW1zLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpz
ZXRWaXNpYmlsaXR5U3RhdGUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuaDoKKyAgICAgICAgKEluamVjdGVkQnVuZGxlKToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkpOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
c2V0VmlzaWJpbGl0eVN0YXRlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmg6CisgICAgICAgIChUZXN0Q29udHJvbGxlcik6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9u
OjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisgICAgICAgIFVwZGF0ZSB0
aGUgV0syIHRlc3QgY29kZSB0byB1c2UgdGhlIG5ldyBXSzIgQVBJIGFuZCBlbnVtcy4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9QYWdlVmlzaWJpbGl0
eVN0YXRlLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OnNldFBhZ2VWaXNpYmlsaXR5U3RhdGVXaXRoRXZhbENvbnRpbnVhdGlvbik6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjphc3NlcnRTZXJpYWxpemVkU2NyaXB0VmFsdWVJc1N0
cmluZ1ZhbHVlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRpZFJ1blN0ZXAxU3RhdGVDaGFu
Z2VWaXNpYmxlVG9IaWRkZW4pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZGlkUnVuU3RlcDJT
dGF0ZUNoYW5nZUhpZGRlblRvUHJlcmVuZGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRp
ZFJ1blN0ZXAzU3RhdGVDaGFuZ2VQcmVyZW5kZXJUb1ByZXZpZXcpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6ZGlkUnVuU3RlcDRJblN0YXRlUHJldmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpURVNUKToKKyAgICAgICAgVGVzdCB0aGUgbmV3IFdLMiBBUEkgd2l0aCBhbGwgZW51bSB0
eXBlcy4KKwogMjAxMy0wMS0yNCAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIEFkZCB3YXRjaGxpc3QgZm9yIEluZGV4ZWREQiBkZXZlbG9wbWVudCwgYW5kIGFk
ZCBteXNlbGYgYW5kIG90aGVycy4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJN
YWMubW0KaW5kZXggNWVhMTAwYi4uYTllNTAxMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L1Rlc3RSdW5uZXJNYWMubW0KQEAgLTQzLDcgKzQzLDYgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0pTU3RyaW5nUmVmLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNG
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dlb2xvY2F0aW9uUG9zaXRpb24uaD4KLSNpbXBvcnQgPFdl
YkNvcmUvUGFnZVZpc2liaWxpdHlTdGF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L0RPTURvY3VtZW50
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9NRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkFw
cGxpY2F0aW9uQ2FjaGUuaD4KQEAgLTExNTYsOSArMTE1NSw4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJsZSBiYWNraW5nU2NhbGVGYWN0b3IpCiB2b2lkIFRl
c3RSdW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQogewogICAgIFdlYlZpZXcgKndlYlZpZXcg
PSBbbWFpbkZyYW1lIHdlYlZpZXddOwotICAgIGlmIChbd2ViVmlldyByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKF9zZXRWaXNpYmlsaXR5U3RhdGU6aXNJbml0aWFsU3RhdGU6KV0pIHsKLSAg
ICAgICAgW3dlYlZpZXcgX3NldFZpc2liaWxpdHlTdGF0ZTpXZWJDb3JlOjpQYWdlVmlzaWJpbGl0
eVN0YXRlVmlzaWJsZSBpc0luaXRpYWxTdGF0ZTpZRVNdOwotICAgIH0KKyAgICBpZiAoW3dlYlZp
ZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfc2V0VmlzaWJpbGl0eVN0YXRlOmlzSW5p
dGlhbFN0YXRlOildKQorICAgICAgICBbd2ViVmlldyBfc2V0VmlzaWJpbGl0eVN0YXRlOldlYlBh
Z2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlIGlzSW5pdGlhbFN0YXRlOllFU107CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciogbmV3VmlzaWJpbGl0eSkK
QEAgLTExNjgsMTMgKzExNjYsMTMgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0
eShjb25zdCBjaGFyKiBuZXdWaXNpYmlsaXR5KQogCiAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtt
YWluRnJhbWUgd2ViVmlld107CiAgICAgaWYgKCFzdHJjbXAobmV3VmlzaWJpbGl0eSwgInZpc2li
bGUiKSkKLSAgICAgICAgW3dlYlZpZXcgX3NldFZpc2liaWxpdHlTdGF0ZTpXZWJDb3JlOjpQYWdl
VmlzaWJpbGl0eVN0YXRlVmlzaWJsZSBpc0luaXRpYWxTdGF0ZTpOT107CisgICAgICAgIFt3ZWJW
aWV3IF9zZXRWaXNpYmlsaXR5U3RhdGU6V2ViUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUgaXNJ
bml0aWFsU3RhdGU6Tk9dOwogICAgIGVsc2UgaWYgKCFzdHJjbXAobmV3VmlzaWJpbGl0eSwgImhp
ZGRlbiIpKQotICAgICAgICBbd2ViVmlldyBfc2V0VmlzaWJpbGl0eVN0YXRlOldlYkNvcmU6OlBh
Z2VWaXNpYmlsaXR5U3RhdGVIaWRkZW4gaXNJbml0aWFsU3RhdGU6Tk9dOworICAgICAgICBbd2Vi
VmlldyBfc2V0VmlzaWJpbGl0eVN0YXRlOldlYlBhZ2VWaXNpYmlsaXR5U3RhdGVIaWRkZW4gaXNJ
bml0aWFsU3RhdGU6Tk9dOwogICAgIGVsc2UgaWYgKCFzdHJjbXAobmV3VmlzaWJpbGl0eSwgInBy
ZXJlbmRlciIpKQotICAgICAgICBbd2ViVmlldyBfc2V0VmlzaWJpbGl0eVN0YXRlOldlYkNvcmU6
OlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmVyZW5kZXIgaXNJbml0aWFsU3RhdGU6Tk9dOworICAgICAg
ICBbd2ViVmlldyBfc2V0VmlzaWJpbGl0eVN0YXRlOldlYlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmVy
ZW5kZXIgaXNJbml0aWFsU3RhdGU6Tk9dOwogICAgIGVsc2UgaWYgKCFzdHJjbXAobmV3VmlzaWJp
bGl0eSwgInByZXZpZXciKSkKLSAgICAgICAgW3dlYlZpZXcgX3NldFZpc2liaWxpdHlTdGF0ZTpX
ZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlUHJldmlldyBpc0luaXRpYWxTdGF0ZTpOT107Cisg
ICAgICAgIFt3ZWJWaWV3IF9zZXRWaXNpYmlsaXR5U3RhdGU6V2ViUGFnZVZpc2liaWxpdHlTdGF0
ZVByZXZpZXcgaXNJbml0aWFsU3RhdGU6Tk9dOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNlbmRX
ZWJJbnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
N2Y2MDc4Ny4uNjM5MzFhYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMyw2ICsxMDMs
NyBAQAogCQk5QjI2RkNDQTE1OUQxNkRFMDBDQzM3NjUgLyogSFRNTEZvcm1Db2xsZWN0aW9uTmFt
ZWRJdGVtLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIyNkZDQjQxNTlEMTVFNzAwQ0MzNzY1IC8qIEhUTUxGb3JtQ29sbGVjdGlvbk5h
bWVkSXRlbS5odG1sICovOyB9OwogCQk5QjRGOEZBNDE1OUQ1MkIxMDAyRDlGOTQgLyogSFRNTENv
bGxlY3Rpb25OYW1lZEl0ZW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjRGOEZBMzE1OUQ1MkIxMDAyRDlGOTQgLyogSFRNTENvbGxlY3Rpb25OYW1l
ZEl0ZW0ubW0gKi87IH07CiAJCTlCNEY4RkE3MTU5RDUyREQwMDJEOUY5NCAvKiBIVE1MQ29sbGVj
dGlvbk5hbWVkSXRlbS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDlCNEY4RkE2MTU5RDUyQ0EwMDJEOUY5NCAvKiBIVE1MQ29sbGVjdGlv
bk5hbWVkSXRlbS5odG1sICovOyB9OworCQlBNTFCNjUwOTE2QURGOUIxMDA3QUE1RDkgLyogUGFn
ZVZpc2liaWxpdHlTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNTFCNjUwODE2QURGOUIxMDA3QUE1RDkgLyogUGFnZVZpc2liaWxpdHlTdGF0
ZS5jcHAgKi87IH07CiAJCUE1RTIwMjczMTVCMjE4MTkwMEMxM0UxNCAvKiBXaW5kb3dsZXNzV2Vi
Vmlld1dpdGhNZWRpYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1RTIwMjcyMTVCMjE4MTkwMEMxM0UxNCAvKiBXaW5kb3dsZXNzV2ViVmlld1dpdGhN
ZWRpYS5tbSAqLzsgfTsKIAkJQTVFMjAyNzUxNUIyMUY2RTAwQzEzRTE0IC8qIFdpbmRvd2xlc3NX
ZWJWaWV3V2l0aE1lZGlhLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTVFMjAyNzAxNUIyMTgwNjAwQzEzRTE0IC8qIFdpbmRvd2xlc3NX
ZWJWaWV3V2l0aE1lZGlhLmh0bWwgKi87IH07CiAJCUE3QTk2NkRCMTQwRUNDQzgwMDVFRjlCNCAv
KiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNr
ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi87IH07CkBAIC0zNTksNiArMzYwLDcgQEAKIAkJ
OUIyNkZDQjQxNTlEMTVFNzAwQ0MzNzY1IC8qIEhUTUxGb3JtQ29sbGVjdGlvbk5hbWVkSXRlbS5o
dG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gSFRNTEZvcm1Db2xsZWN0aW9uTmFtZWRJ
dGVtLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNEY4RkEzMTU5RDUyQjEw
MDJEOUY5NCAvKiBIVE1MQ29sbGVjdGlvbk5hbWVkSXRlbS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEhUTUxDb2xsZWN0aW9uTmFtZWRJdGVtLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5QjRGOEZBNjE1OUQ1MkNBMDAyRDlGOTQgLyogSFRNTENv
bGxlY3Rpb25OYW1lZEl0ZW0uaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IEhUTUxD
b2xsZWN0aW9uTmFtZWRJdGVtLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1
MUI2NTA4MTZBREY5QjEwMDdBQTVEOSAvKiBQYWdlVmlzaWJpbGl0eVN0YXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VWaXNpYmlsaXR5U3RhdGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUUyMDI3MDE1QjIxODA2MDBDMTNFMTQgLyog
V2luZG93bGVzc1dlYlZpZXdXaXRoTWVkaWEuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0
aCA9IFdpbmRvd2xlc3NXZWJWaWV3V2l0aE1lZGlhLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE1RTIwMjcyMTVCMjE4MTkwMEMxM0UxNCAvKiBXaW5kb3dsZXNzV2ViVmlld1dp
dGhNZWRpYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdpbmRv
d2xlc3NXZWJWaWV3V2l0aE1lZGlhLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
N0E5NjZEQTE0MEVDQ0M4MDA1RUY5QjQgLyogQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENoZWNrZWRBcml0aG1ldGlj
T3BlcmF0aW9ucy5jcHA7IHBhdGggPSBXVEYvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0NSw2ICs2NDcsNyBAQAogCQkJCTkz
RjdFODZFMTREQzhFNUIwMEM4NEE5OSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRG
cmFtZXNfQnVuZGxlLmNwcCAqLywKIAkJCQlCQzkwOTc3OTEyNTU3MUFCMDAwODM3NTYgLyogUGFn
ZUxvYWRCYXNpYy5jcHAgKi8sCiAJCQkJQkMyRDAwNDgxMkE5RkRGQTAwRTczMkEzIC8qIFBhZ2VM
b2FkRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUuY3BwICovLAorCQkJCUE1MUI2
NTA4MTZBREY5QjEwMDdBQTVEOSAvKiBQYWdlVmlzaWJpbGl0eVN0YXRlLmNwcCAqLywKIAkJCQk1
MkU1Q0U0NTE0RDIxRTlEMDAzQjJCRDggLyogUGFyZW50RnJhbWUuY3BwICovLAogCQkJCTUyRTVD
RTQ4MTREMjFFQUIwMDNCMkJEOCAvKiBQYXJlbnRGcmFtZV9CdW5kbGUuY3BwICovLAogCQkJCTMz
M0I5Q0UxMTI3N0YyMzEwMEZFRkNFMyAvKiBQcmV2ZW50RW1wdHlVc2VyQWdlbnQuY3BwICovLApA
QCAtOTcxLDYgKzk3NCw3IEBACiAJCQkJMUE1RkVGREQxMjcwRTJBMzAwMEUyOTIxIC8qIEV2YWx1
YXRlSmF2YVNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0M4Qjk1QjEyNjExRjQ3MDBE
RTQ2QTQgLyogRmFpbGVkTG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTAyQzg0RjEyNUQ0
QTg0MDBFM0Y0QkQgLyogRmluZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDNTFBRkI5OTE2OUY0
OUZGMDA5Q0NGNjYgLyogRmluZE1hdGNoZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQURCRUZB
RTEzMEM2ODlDMDBENjFEMTkgLyogRm9yY2VSZXBhaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDQkQzNzEwMTI1QUEyRUIwMEQyQzI5RiAvKiBGcmFtZU1JTUVUeXBlSFRNTC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0JEMzc2MTEyNUFCQ0ZFMDBEMkMyOUYgLyogRnJhbWVNSU1FVHlwZVBO
Ry5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTEsNiArMTAxNSw3IEBACiAJCQkJOTNGN0U4NkMx
NERDOEU0RDAwQzg0QTk5IC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZyYW1lcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzkwOTc3QTEyNTU3MUFCMDAwODM3NTYgLyogUGFnZUxv
YWRCYXNpYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzJEMDA0OTEyQTlGREZBMDBFNzMyQTMg
LyogUGFnZUxvYWREaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2VGb3JGcmFtZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBNTFCNjUwOTE2QURGOUIxMDA3QUE1RDkgLyogUGFnZVZpc2liaWxpdHlT
dGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MkU1Q0U0NjE0RDIxRTlEMDAzQjJCRDggLyog
UGFyZW50RnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NzVCQzAxMjZGNTc1MjAwNkYw
RjEyIC8qIFBsYXRmb3JtVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTMxODg1
MTE3MTE0QjYwMEI2OTcyNyAvKiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSBpbiBTb3VyY2VzICov
LApAQCAtMTA2MSw3ICsxMDY2LDYgQEAKIAkJCQlCQzkwOTk1RTEyNTY3QkMxMDAwODM3NTYgLyog
V0tTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5MDk5OTQxMjU2QUNGMTAwMDgzNzU2
IC8qIFdLU3RyaW5nSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjY1QUY1NTAxNUQx
RTQ4QTAwQjBDQjRBIC8qIFdURlN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDNTFBRkI5
OTE2OUY0OUZGMDA5Q0NGNjYgLyogRmluZE1hdGNoZXMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9QYWdlVmlzaWJpbGl0eVN0
YXRlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9QYWdlVmlzaWJpbGl0
eVN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGM3OWNlCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1BhZ2VW
aXNpYmlsaXR5U3RhdGUuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1XZWJWaWV3LmgiCisjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTQ29udGV4dFJlZi5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4K
KyNpbmNsdWRlIDxXZWJLaXQyL1dLU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg+CisKK25hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIGJvb2wgdGVzdERvbmU7CisKK3N0YXRpYyB2b2lk
IGRpZFJ1blN0ZXAxU3RhdGVDaGFuZ2VWaXNpYmxlVG9IaWRkZW4oV0tTZXJpYWxpemVkU2NyaXB0
VmFsdWVSZWYsIFdLRXJyb3JSZWYsIHZvaWQqKTsKK3N0YXRpYyB2b2lkIGRpZFJ1blN0ZXAyU3Rh
dGVDaGFuZ2VIaWRkZW5Ub1ByZXJlbmRlcihXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZVJlZiwgV0tF
cnJvclJlZiwgdm9pZCopOworc3RhdGljIHZvaWQgZGlkUnVuU3RlcDNTdGF0ZUNoYW5nZVByZXJl
bmRlclRvUHJldmlldyhXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZVJlZiwgV0tFcnJvclJlZiwgdm9p
ZCopOworc3RhdGljIHZvaWQgZGlkUnVuU3RlcDRJblN0YXRlUHJldmlldyhXS1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZVJlZiwgV0tFcnJvclJlZiwgdm9pZCopOworCitzdGF0aWMgdm9pZCBzZXRQYWdl
VmlzaWJpbGl0eVN0YXRlV2l0aEV2YWxDb250aW51YXRpb24oUGxhdGZvcm1XZWJWaWV3KiB3ZWJW
aWV3LCBXS1BhZ2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlLCBXS1BhZ2VSdW5KYXZh
U2NyaXB0RnVuY3Rpb24gY2FsbGJhY2spCit7CisgICAgV0tQYWdlU2V0VmlzaWJpbGl0eVN0YXRl
KHdlYlZpZXctPnBhZ2UoKSwgdmlzaWJpbGl0eVN0YXRlLCBmYWxzZSk7CisgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGphdmFTY3JpcHRTdHJpbmcoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImRvY3VtZW50LndlYmtpdFZpc2liaWxpdHlTdGF0ZSIpKTsKKyAgICBX
S1BhZ2VSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUod2ViVmlldy0+cGFnZSgpLCBqYXZhU2NyaXB0
U3RyaW5nLmdldCgpLCBzdGF0aWNfY2FzdDx2b2lkKj4od2ViVmlldyksIGNhbGxiYWNrKTsKK30K
Kworc3RhdGljIHZvaWQgYXNzZXJ0U2VyaWFsaXplZFNjcmlwdFZhbHVlSXNTdHJpbmdWYWx1ZShX
S1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZVJlZiBzZXJpYWxpemVkVmFsdWUsIFdLRXJyb3JSZWYgZXJy
b3IsIGNvbnN0IGNoYXIgKmV4cGVjdGVkKQoreworICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKyAg
ICBFWFBFQ1RfTk9UX05VTEwoc2VyaWFsaXplZFZhbHVlKTsKKyAgICBpZiAoZXJyb3IgfHwgIXNl
cmlhbGl6ZWRWYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNHbG9iYWxDb250ZXh0UmVm
IHNjcmlwdENvbnRleHQgPSBKU0dsb2JhbENvbnRleHRDcmVhdGUoMCk7CisgICAgSlNWYWx1ZVJl
ZiBzY3JpcHRWYWx1ZSA9IFdLU2VyaWFsaXplZFNjcmlwdFZhbHVlRGVzZXJpYWxpemUoc2VyaWFs
aXplZFZhbHVlLCBzY3JpcHRDb250ZXh0LCAwKTsKKyAgICBFWFBFQ1RfVFJVRShKU1ZhbHVlSXNT
dHJpbmcoc2NyaXB0Q29udGV4dCwgc2NyaXB0VmFsdWUpKTsKKyAgICBpZiAoIUpTVmFsdWVJc1N0
cmluZyhzY3JpcHRDb250ZXh0LCBzY3JpcHRWYWx1ZSkpIHsKKyAgICAgICAgSlNHbG9iYWxDb250
ZXh0UmVsZWFzZShzY3JpcHRDb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEpTU3RyaW5nUmVmIGV4cGVjdGVkU3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoZXhwZWN0ZWQpOworICAgIEpTU3RyaW5nUmVmIHNjcmlwdFN0cmluZyA9IEpTVmFsdWVUb1N0
cmluZ0NvcHkoc2NyaXB0Q29udGV4dCwgc2NyaXB0VmFsdWUsIDApOworICAgIEVYUEVDVF9UUlVF
KEpTU3RyaW5nSXNFcXVhbChzY3JpcHRTdHJpbmcsIGV4cGVjdGVkU3RyaW5nKSk7CisKKyAgICBK
U1N0cmluZ1JlbGVhc2Uoc2NyaXB0U3RyaW5nKTsKKyAgICBKU1N0cmluZ1JlbGVhc2UoZXhwZWN0
ZWRTdHJpbmcpOworICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2Uoc2NyaXB0Q29udGV4dCk7Cit9
CisKK3N0YXRpYyB2b2lkIGRpZFJ1blN0ZXAxU3RhdGVDaGFuZ2VWaXNpYmxlVG9IaWRkZW4oV0tT
ZXJpYWxpemVkU2NyaXB0VmFsdWVSZWYgcmVzdWx0U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBXS0Vy
cm9yUmVmIGVycm9yLCB2b2lkKiBjb250ZXh0KQoreworICAgIGFzc2VydFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUlzU3RyaW5nVmFsdWUocmVzdWx0U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBlcnJvciwg
InZpc2libGUiKTsKKyAgICBzZXRQYWdlVmlzaWJpbGl0eVN0YXRlV2l0aEV2YWxDb250aW51YXRp
b24oc3RhdGljX2Nhc3Q8UGxhdGZvcm1XZWJWaWV3Kj4oY29udGV4dCksIGtXS1BhZ2VWaXNpYmls
aXR5U3RhdGVIaWRkZW4sIGRpZFJ1blN0ZXAyU3RhdGVDaGFuZ2VIaWRkZW5Ub1ByZXJlbmRlcik7
Cit9CisKK3N0YXRpYyB2b2lkIGRpZFJ1blN0ZXAyU3RhdGVDaGFuZ2VIaWRkZW5Ub1ByZXJlbmRl
cihXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZVJlZiByZXN1bHRTZXJpYWxpemVkU2NyaXB0VmFsdWUs
IFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXNzZXJ0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSXNTdHJpbmdWYWx1ZShyZXN1bHRTZXJpYWxpemVkU2NyaXB0VmFsdWUsIGVy
cm9yLCAiaGlkZGVuIik7CisgICAgc2V0UGFnZVZpc2liaWxpdHlTdGF0ZVdpdGhFdmFsQ29udGlu
dWF0aW9uKHN0YXRpY19jYXN0PFBsYXRmb3JtV2ViVmlldyo+KGNvbnRleHQpLCBrV0tQYWdlVmlz
aWJpbGl0eVN0YXRlUHJlcmVuZGVyLCBkaWRSdW5TdGVwM1N0YXRlQ2hhbmdlUHJlcmVuZGVyVG9Q
cmV2aWV3KTsKK30KKworc3RhdGljIHZvaWQgZGlkUnVuU3RlcDNTdGF0ZUNoYW5nZVByZXJlbmRl
clRvUHJldmlldyhXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZVJlZiByZXN1bHRTZXJpYWxpemVkU2Ny
aXB0VmFsdWUsIFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXNzZXJ0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSXNTdHJpbmdWYWx1ZShyZXN1bHRTZXJpYWxpemVkU2NyaXB0
VmFsdWUsIGVycm9yLCAicHJlcmVuZGVyIik7CisgICAgc2V0UGFnZVZpc2liaWxpdHlTdGF0ZVdp
dGhFdmFsQ29udGludWF0aW9uKHN0YXRpY19jYXN0PFBsYXRmb3JtV2ViVmlldyo+KGNvbnRleHQp
LCBrV0tQYWdlVmlzaWJpbGl0eVN0YXRlUHJldmlldywgZGlkUnVuU3RlcDRJblN0YXRlUHJldmll
dyk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFJ1blN0ZXA0SW5TdGF0ZVByZXZpZXcoV0tTZXJpYWxp
emVkU2NyaXB0VmFsdWVSZWYgcmVzdWx0U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBXS0Vycm9yUmVm
IGVycm9yLCB2b2lkKiBjb250ZXh0KQoreworICAgIGFzc2VydFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUlzU3RyaW5nVmFsdWUocmVzdWx0U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBlcnJvciwgInByZXZp
ZXciKTsKKyAgICB0ZXN0RG9uZSA9IHRydWU7Cit9CisKK1RFU1QoV2ViS2l0MiwgUGFnZVZpc2li
aWxpdHlTdGF0ZSkKK3sKKyAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQoQWRv
cHRXSywgV0tDb250ZXh0Q3JlYXRlKCkpOworCisgICAgLy8gUGFzcyB0aGUgUGxhdGZvcm1XZWJW
aWV3IHdlYlZpZXcgb24gYXMgdGhlIGNvbnRleHQgb2YgdGhlIGV2YWxzLCBzbyB3ZSBjYW4gY29u
dGludWUgdG8gZXZhbCBvbiBpdC4KKyAgICBQbGF0Zm9ybVdlYlZpZXcgd2ViVmlldyhjb250ZXh0
LmdldCgpKTsgICAgCisgICAgc2V0UGFnZVZpc2liaWxpdHlTdGF0ZVdpdGhFdmFsQ29udGludWF0
aW9uKCZ3ZWJWaWV3LCBrV0tQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZSwgZGlkUnVuU3RlcDFT
dGF0ZUNoYW5nZVZpc2libGVUb0hpZGRlbik7CisKKyAgICBVdGlsOjpydW4oJnRlc3REb25lKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCBl
OWViNTg1Li5iYWRjYTNmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcApAQCAtNDcxLDYgKzQ3MSwyMiBAQCB2
b2lkIEluamVjdGVkQnVuZGxlOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQs
IGJvb2wgcGVybWlzc2l2ZSkKICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKG1fYnVuZGxlLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCit2b2lkIEluamVjdGVkQnVu
ZGxlOjpzZXRWaXNpYmlsaXR5U3RhdGUoV0tQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlT
dGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFZpc2liaWxpdHlTdGF0ZSIpKTsKKyAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5
UmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwor
CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZpc2liaWxpdHlTdGF0ZUtleVdLKEFkb3B0
V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ2aXNpYmlsaXR5U3RhdGUiKSk7Cisg
ICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHZpc2liaWxpdHlTdGF0ZVdLKEFkb3B0V0ssIFdL
VUludDY0Q3JlYXRlKHZpc2liaWxpdHlTdGF0ZSkpOworICAgIFdLRGljdGlvbmFyeUFkZEl0ZW0o
bWVzc2FnZUJvZHkuZ2V0KCksIHZpc2liaWxpdHlTdGF0ZUtleVdLLmdldCgpLCB2aXNpYmlsaXR5
U3RhdGVXSy5nZXQoKSk7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNJbml0aWFs
S2V5V0soQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImlzSW5pdGlhbFN0
YXRlIikpOworICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gaXNJbml0aWFsV0soQWRvcHRX
SywgV0tCb29sZWFuQ3JlYXRlKGlzSW5pdGlhbFN0YXRlKSk7CisgICAgV0tEaWN0aW9uYXJ5QWRk
SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgaXNJbml0aWFsS2V5V0suZ2V0KCksIGlzSW5pdGlhbFdL
LmdldCgpKTsKKworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UobV9idW5kbGUsIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cit9CisKIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OnNo
b3VsZFByb2Nlc3NXb3JrUXVldWUoKSBjb25zdAogewogICAgIGlmICghbV91c2VXb3JrUXVldWUp
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmgKaW5kZXggYTcyMGZhOC4uMTcwYzhhYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaApAQCAtOTUs
NiArOTUsOSBAQCBwdWJsaWM6CiAgICAgLy8gUG9saWN5IGRlbGVnYXRlLgogICAgIHZvaWQgc2V0
Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBlbmFibGVkLCBib29sIHBlcm1pc3NpdmUpOwogCisg
ICAgLy8gUGFnZSBWaXNpYmlsaXR5LgorICAgIHZvaWQgc2V0VmlzaWJpbGl0eVN0YXRlKFdLUGFn
ZVZpc2liaWxpdHlTdGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSk7CisKICAgICAvLyBXb3JrIHF1
ZXVlLgogICAgIGJvb2wgc2hvdWxkUHJvY2Vzc1dvcmtRdWV1ZSgpIGNvbnN0OwogICAgIHZvaWQg
cHJvY2Vzc1dvcmtRdWV1ZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggYjI4ZDY1Ny4uNDY0N2E5YyAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
Y3BwCkBAIC0zMiwxMyArMzIsMTMgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKICNp
bmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZVZpc2liaWxpdHlTdGF0ZS5oPgogI2luY2x1ZGUgPFdlYktp
dDIvV0tCdW5kbGUuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0J1bmRsZUZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViS2l0
Mi9XS0J1bmRsZUZyYW1lUHJpdmF0ZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVJbnNw
ZWN0b3IuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlTm9kZUhhbmRsZVByaXZhdGUuaD4K
KyNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlUGFnZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tC
dW5kbGVQYWdlUHJpdmF0ZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVQcml2YXRlLmg+
CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0J1bmRsZVNjcmlwdFdvcmxkLmg+CkBAIC01NTEsMjEgKzU1
MSwyMSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBzaG91bGREZWZl
ckxvYWRpbmcpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoSlNTdHJpbmdS
ZWYgc3RhdGUpCiB7Ci0gICAgV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5
U3RhdGUgPSBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZTsKKyAgICBXS1BhZ2VW
aXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlID0ga1dLUGFnZVZpc2liaWxpdHlTdGF0ZVZp
c2libGU7CiAKICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdGF0ZSwgImhp
ZGRlbiIpKQotICAgICAgICB2aXNpYmlsaXR5U3RhdGUgPSBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0
eVN0YXRlSGlkZGVuOworICAgICAgICB2aXNpYmlsaXR5U3RhdGUgPSBrV0tQYWdlVmlzaWJpbGl0
eVN0YXRlSGlkZGVuOwogICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
c3RhdGUsICJwcmVyZW5kZXIiKSkKLSAgICAgICAgdmlzaWJpbGl0eVN0YXRlID0gV2ViQ29yZTo6
UGFnZVZpc2liaWxpdHlTdGF0ZVByZXJlbmRlcjsKKyAgICAgICAgdmlzaWJpbGl0eVN0YXRlID0g
a1dLUGFnZVZpc2liaWxpdHlTdGF0ZVByZXJlbmRlcjsKICAgICBlbHNlIGlmIChKU1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKHN0YXRlLCAicHJldmlldyIpKQotICAgICAgICB2aXNpYmlsaXR5
U3RhdGUgPSBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlUHJldmlldzsKKyAgICAgICAgdmlz
aWJpbGl0eVN0YXRlID0ga1dLUGFnZVZpc2liaWxpdHlTdGF0ZVByZXZpZXc7CiAKLSAgICBXS0J1
bmRsZVNldFBhZ2VWaXNpYmlsaXR5U3RhdGUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRs
ZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIHZpc2liaWxpdHlT
dGF0ZSwgLyogaXNJbml0aWFsU3RhdGUgKi8gZmFsc2UpOworICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zZXRWaXNpYmlsaXR5U3RhdGUodmlzaWJpbGl0eVN0YXRlLCBmYWxzZSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCiB7Ci0gICAgV0tCdW5kbGVT
ZXRQYWdlVmlzaWJpbGl0eVN0YXRlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCBXZWJDb3JlOjpQYWdlVmlz
aWJpbGl0eVN0YXRlVmlzaWJsZSwgLyogaXNJbml0aWFsU3RhdGUgKi8gdHJ1ZSk7CisgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldFZpc2liaWxpdHlTdGF0ZShrV0tQYWdlVmlzaWJpbGl0
eVN0YXRlVmlzaWJsZSwgdHJ1ZSk7CiB9CiAKIHR5cGVkZWYgV1RGOjpIYXNoTWFwPHVuc2lnbmVk
LCBKU1ZhbHVlUmVmPiBDYWxsYmFja01hcDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHAKaW5kZXggN2Q4ODM1OC4uZWNiNGY3MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTExNDcsNiArMTE0NywxMSBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQsIGJvb2wgcGVy
bWlzc2l2ZSkKICAgICBtX3BvbGljeURlbGVnYXRlUGVybWlzc2l2ZSA9IHBlcm1pc3NpdmU7CiB9
CiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFZpc2liaWxpdHlTdGF0ZShXS1BhZ2VWaXNpYmls
aXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlLCBib29sIGlzSW5pdGlhbFN0YXRlKQoreworICAgIFdL
UGFnZVNldFZpc2liaWxpdHlTdGF0ZShtX21haW5XZWJWaWV3LT5wYWdlKCksIHZpc2liaWxpdHlT
dGF0ZSwgaXNJbml0aWFsU3RhdGUpOworfQorCiB2b2lkIFRlc3RDb250cm9sbGVyOjpkZWNpZGVQ
b2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJsZSgpCiB7CiAgICAg
aWYgKCFtX2lzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oCmluZGV4IDU2ODVhZmQuLjVhZTdmMjMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTgxLDYgKzgxLDkgQEAgcHVibGljOgogICAgIC8v
IFBvbGljeSBkZWxlZ2F0ZS4KICAgICB2b2lkIHNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wg
ZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKTsKIAorICAgIC8vIFBhZ2UgVmlzaWJpbGl0eS4KKyAg
ICB2b2lkIHNldFZpc2liaWxpdHlTdGF0ZShXS1BhZ2VWaXNpYmlsaXR5U3RhdGUsIGJvb2wgaXNJ
bml0aWFsU3RhdGUpOworCiAgICAgYm9vbCByZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKCk7
CiAKICAgICBXb3JrUXVldWVNYW5hZ2VyJiB3b3JrUXVldWVNYW5hZ2VyKCkgeyByZXR1cm4gbV93
b3JrUXVldWVNYW5hZ2VyOyB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RJbnZvY2F0aW9uLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwCmluZGV4IDhhNWFiNzUuLmM1ZWQxNzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdEludm9jYXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dEludm9jYXRpb24uY3BwCkBAIC01NDAsNiArNTQwLDIyIEBAIHZvaWQgVGVzdEludm9jYXRpb246
OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VO
YW1lCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFZpc2liaWxpdHlTdGF0ZSIpKSB7CisgICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOworICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7CisKKyAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHZpc2liaWxpdHlTdGF0ZUtleVdLKEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ2aXNpYmlsaXR5U3RhdGUiKSk7CisgICAgICAgIFdLVUlu
dDY0UmVmIHZpc2liaWxpdHlTdGF0ZVdLID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2aXNpYmlsaXR5U3Rh
dGVLZXlXSy5nZXQoKSkpOworICAgICAgICBXS1BhZ2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0
eVN0YXRlID0gc3RhdGljX2Nhc3Q8V0tQYWdlVmlzaWJpbGl0eVN0YXRlPihXS1VJbnQ2NEdldFZh
bHVlKHZpc2liaWxpdHlTdGF0ZVdLKSk7CisKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGlzSW5pdGlhbEtleVdLKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJpc0luaXRpYWxTdGF0ZSIpKTsKKyAgICAgICAgV0tCb29sZWFuUmVmIGlzSW5pdGlhbFdLID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgaXNJbml0aWFsS2V5V0suZ2V0KCkpKTsKKyAgICAgICAgYm9vbCBp
c0luaXRpYWxTdGF0ZSA9IFdLQm9vbGVhbkdldFZhbHVlKGlzSW5pdGlhbFdLKTsKKworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0VmlzaWJpbGl0eVN0YXRlKHZpc2liaWxpdHlT
dGF0ZSwgaXNJbml0aWFsU3RhdGUpOworICAgICAgICByZXR1cm47CisgICAgfSAgICAKKwogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUHJvY2Vzc1dv
cmtRdWV1ZSIpKSB7CiAgICAgICAgIGlmIChUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkud29ya1F1
ZXVlTWFuYWdlcigpLnByb2Nlc3NXb3JrUXVldWUoKSkgewogICAgICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiV29ya1F1ZXVlUHJvY2Vzc2VkQ2FsbGJhY2siKSk7Cg==
</data>
<flag name="review"
          id="203421"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>