<?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>152989</bug_id>
          
          <creation_ts>2016-01-11 14:54:39 -0800</creation_ts>
          <short_desc>Add support for DataDetectors in WK (iOS)</short_desc>
          <delta_ts>2019-08-26 12:38:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>iOS 9.0</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=201144</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>153244</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ossy</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1154505</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-11 14:54:39 -0800</bug_when>
    <thetext>This tracks the work required to support data detectors in WK2 on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154506</commentid>
    <comment_count>1</comment_count>
      <attachid>268717</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-11 15:12:09 -0800</bug_when>
    <thetext>Created attachment 268717
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154507</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-11 15:14:29 -0800</bug_when>
    <thetext>Attachment 268717 did not pass style-queue:


ERROR: Source/WebCore/editing/cocoa/DataDetection.h:55:  The parameter name &quot;types&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154558</commentid>
    <comment_count>3</comment_count>
      <attachid>268732</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-11 17:05:37 -0800</bug_when>
    <thetext>Created attachment 268732
Patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154560</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-11 17:06:39 -0800</bug_when>
    <thetext>Attachment 268732 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154562</commentid>
    <comment_count>5</comment_count>
      <attachid>268732</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-01-11 17:09:07 -0800</bug_when>
    <thetext>Comment on attachment 268732
Patch2

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

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:60
&gt; +typedef NS_OPTIONS(NSUInteger, WKDataDetectorTypes) {
&gt; +    WKDataDetectorTypeNone = 0,
&gt; +    WKDataDetectorTypePhoneNumber = 1 &lt;&lt; 0,
&gt; +    WKDataDetectorTypeLink = 1 &lt;&lt; 1,
&gt; +    WKDataDetectorTypeAddress = 1 &lt;&lt; 2,
&gt; +    WKDataDetectorTypeCalendarEvent = 1 &lt;&lt; 3,
&gt; +    WKDataDetectorTypeAll = 0xFFFF
&gt; +} WK_ENUM_AVAILABLE_IOS(9_3);

Are we sure we want to expose these as API under 9.3? If so, they need to be documented.

I also think that WKDataDetectorTypeAll should be NSUIntegerMax.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:135
&gt; +@property (nonatomic) WKDataDetectorTypes dataDetectorTypes;

This needs availability annotations. Also, do we want to expose this as API?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154566</commentid>
    <comment_count>6</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-11 17:17:14 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 268732 [details]
&gt; Patch2
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=268732&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:60
&gt; &gt; +typedef NS_OPTIONS(NSUInteger, WKDataDetectorTypes) {
&gt; &gt; +    WKDataDetectorTypeNone = 0,
&gt; &gt; +    WKDataDetectorTypePhoneNumber = 1 &lt;&lt; 0,
&gt; &gt; +    WKDataDetectorTypeLink = 1 &lt;&lt; 1,
&gt; &gt; +    WKDataDetectorTypeAddress = 1 &lt;&lt; 2,
&gt; &gt; +    WKDataDetectorTypeCalendarEvent = 1 &lt;&lt; 3,
&gt; &gt; +    WKDataDetectorTypeAll = 0xFFFF
&gt; &gt; +} WK_ENUM_AVAILABLE_IOS(9_3);
&gt; 
Actually is should be 10_0.
&gt; Are we sure we want to expose these as API under 9.3? If so, they need to be
&gt; documented.
&gt; 
&gt; I also think that WKDataDetectorTypeAll should be NSUIntegerMax.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:135
&gt; &gt; +@property (nonatomic) WKDataDetectorTypes dataDetectorTypes;
&gt; 
&gt; This needs availability annotations. Also, do we want to expose this as API?
I&apos;ll add the availability annotations. I believe we do, since we have them as API in UIWebView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154715</commentid>
    <comment_count>7</comment_count>
      <attachid>268774</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-12 09:19:06 -0800</bug_when>
    <thetext>Created attachment 268774
Patch3

Fixes build issues and addresses feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154718</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-12 09:21:00 -0800</bug_when>
    <thetext>Attachment 268774 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:66:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154768</commentid>
    <comment_count>9</comment_count>
      <attachid>268782</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-12 10:58:53 -0800</bug_when>
    <thetext>Created attachment 268782
Patch4

One more attempt to fix the build on all the platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154772</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-12 11:01:11 -0800</bug_when>
    <thetext>Attachment 268782 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:66:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155818</commentid>
    <comment_count>11</comment_count>
      <attachid>268782</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-01-15 10:20:40 -0800</bug_when>
    <thetext>Comment on attachment 268782
Patch4

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

&gt; Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig:114
&gt; +ENABLE_IOS_DATADETECTION[sdk=iphone*] = ENABLE_IOS_DATADETECTION;

Feels like there should be another underscore: ENABLE_IOS_DATA_DETECTION. Surely in camel-case it would be DataDetection not Datadetection.

&gt; Source/WebCore/ChangeLog:12
&gt; +        have been moved under cocoa, since they are no longer OSX specific.

space between OS X

&gt; Source/WebCore/loader/FrameLoader.cpp:49
&gt; +#if PLATFORM(COCOA)

This goes in its own block, not in the middle of these others.

&gt; Source/WebCore/page/Settings.h:30
&gt; +#if PLATFORM(COCOA)

This goes in its own block below, not here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155820</commentid>
    <comment_count>12</comment_count>
      <attachid>268782</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-01-15 10:23:24 -0800</bug_when>
    <thetext>Comment on attachment 268782
Patch4

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

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2936
&gt; +    settings.setDataDetectorTypes(static_cast&lt;DataDetectorTypes&gt;(store.getUInt32ValueForKey(WebPreferencesKey::dataDetectorTypesKey())));

I don&apos;t think you can do this. The values aren&apos;t the same (they probably should be, though!!), and we usually use explicit functions that cast between them using the names instead of just praying that the values are the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155850</commentid>
    <comment_count>13</comment_count>
      <attachid>268782</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-01-15 11:30:34 -0800</bug_when>
    <thetext>Comment on attachment 268782
Patch4

Broad question here. Why is this iOS only? Can this form of data detection not work on Mac? I would much rather see this as cross platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156018</commentid>
    <comment_count>14</comment_count>
      <attachid>269118</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-15 16:26:55 -0800</bug_when>
    <thetext>Created attachment 269118
Patch5

The new property is now available on OS X and iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156024</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-15 16:30:17 -0800</bug_when>
    <thetext>Attachment 269118 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:67:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156618</commentid>
    <comment_count>16</comment_count>
      <attachid>269118</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-01-19 10:09:41 -0800</bug_when>
    <thetext>Comment on attachment 269118
Patch5

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

&gt; Source/WTF/wtf/FeatureDefines.h:110
&gt; +#define ENABLE_DATA_DETECTION 1

This is now sitting in a PLATFORM(IOS) only place. But isn&apos;t it now PLATFORM(COCOA)?

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:144
&gt; +void DataDetection::detectContentInRange(RefPtr&lt;Range&gt;&amp;, DataDetectorTypes)
&gt; +{
&gt; +}

This doesn&apos;t have a return value; is that because it&apos;s going to do linkification? In that case, it should probably have a different name. Also possible that detection and linkification should be in different functions.

&gt; Source/WebCore/loader/FrameLoader.cpp:128
&gt; +#if PLATFORM(DATA_DETECTION)

I don&apos;t think PLATFORM(DATA_DETECTION) is a thing

&gt; Source/WebCore/page/Settings.h:46
&gt; +#include &quot;DataDetection.h&quot;

Really? This file is included a lot of places, I think. We should see if there&apos;s any way to avoid this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156619</commentid>
    <comment_count>17</comment_count>
      <attachid>269118</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-01-19 10:11:07 -0800</bug_when>
    <thetext>Comment on attachment 269118
Patch5

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

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:66
&gt; + @discussion An example of how this property may affect the content loaded in the WKWebView is that content like
&gt; + &apos;Visit apple.com on July 4th or call 1 800 555-5545&apos; will be transformed to add links around &apos;apple.com&apos;, &apos;July 4th&apos; and &apos;1 800 555-5545&apos;
&gt; + if the dataDetectorTypes property is set to WKDataDetectorTypePhoneNumber | WKDataDetectorTypeLink | WKDataDetectorTypeCalendarEvent.
&gt; + */

Maybe this should be mentioned in the documentation about the dataDetectorTypes property instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156620</commentid>
    <comment_count>18</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-19 10:14:15 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Comment on attachment 269118 [details]
&gt; Patch5
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=269118&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/FeatureDefines.h:110
&gt; &gt; +#define ENABLE_DATA_DETECTION 1
&gt; 
&gt; This is now sitting in a PLATFORM(IOS) only place. But isn&apos;t it now
&gt; PLATFORM(COCOA)?
For now this is enabled only for iOS. The API is defined for COCOA.
&gt; 
&gt; &gt; Source/WebCore/editing/cocoa/DataDetection.mm:144
&gt; &gt; +void DataDetection::detectContentInRange(RefPtr&lt;Range&gt;&amp;, DataDetectorTypes)
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; This doesn&apos;t have a return value; is that because it&apos;s going to do
&gt; linkification? In that case, it should probably have a different name. Also
&gt; possible that detection and linkification should be in different functions.
&gt; 
It will have a return value in the next patch. This is just a placeholder now.

&gt; &gt; Source/WebCore/loader/FrameLoader.cpp:128
&gt; &gt; +#if PLATFORM(DATA_DETECTION)
&gt; 
&gt; I don&apos;t think PLATFORM(DATA_DETECTION) is a thing
&gt; 
My bad.
&gt; &gt; Source/WebCore/page/Settings.h:46
&gt; &gt; +#include &quot;DataDetection.h&quot;
&gt; 
&gt; Really? This file is included a lot of places, I think. We should see if
&gt; there&apos;s any way to avoid this.
I don&apos;t know how.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156623</commentid>
    <comment_count>19</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-19 10:14:52 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Comment on attachment 269118 [details]
&gt; Patch5
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=269118&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:66
&gt; &gt; + @discussion An example of how this property may affect the content loaded in the WKWebView is that content like
&gt; &gt; + &apos;Visit apple.com on July 4th or call 1 800 555-5545&apos; will be transformed to add links around &apos;apple.com&apos;, &apos;July 4th&apos; and &apos;1 800 555-5545&apos;
&gt; &gt; + if the dataDetectorTypes property is set to WKDataDetectorTypePhoneNumber | WKDataDetectorTypeLink | WKDataDetectorTypeCalendarEvent.
&gt; &gt; + */
&gt; 
&gt; Maybe this should be mentioned in the documentation about the
&gt; dataDetectorTypes property instead.

will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156626</commentid>
    <comment_count>20</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-01-19 10:18:51 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #16)
&gt; &gt; Comment on attachment 269118 [details]
&gt; &gt; Patch5
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=269118&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/FeatureDefines.h:110
&gt; &gt; &gt; +#define ENABLE_DATA_DETECTION 1
&gt; &gt; 
&gt; &gt; This is now sitting in a PLATFORM(IOS) only place. But isn&apos;t it now
&gt; &gt; PLATFORM(COCOA)?
&gt; For now this is enabled only for iOS. The API is defined for COCOA.

That&apos;s not true in the xcconfig...

&gt; &gt; &gt; Source/WebCore/editing/cocoa/DataDetection.mm:144
&gt; &gt; &gt; +void DataDetection::detectContentInRange(RefPtr&lt;Range&gt;&amp;, DataDetectorTypes)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; This doesn&apos;t have a return value; is that because it&apos;s going to do
&gt; &gt; linkification? In that case, it should probably have a different name. Also
&gt; &gt; possible that detection and linkification should be in different functions.
&gt; &gt; 
&gt; It will have a return value in the next patch. This is just a placeholder
&gt; now.

Okay.

&gt; &gt; &gt; Source/WebCore/page/Settings.h:46
&gt; &gt; &gt; +#include &quot;DataDetection.h&quot;
&gt; &gt; 
&gt; &gt; Really? This file is included a lot of places, I think. We should see if
&gt; &gt; there&apos;s any way to avoid this.
&gt; I don&apos;t know how.

Yeah, I guess not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156644</commentid>
    <comment_count>21</comment_count>
      <attachid>269272</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-19 10:45:44 -0800</bug_when>
    <thetext>Created attachment 269272
Patch6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156647</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-19 10:48:23 -0800</bug_when>
    <thetext>Attachment 269272 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:64:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156656</commentid>
    <comment_count>23</comment_count>
      <attachid>269272</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-01-19 11:17:02 -0800</bug_when>
    <thetext>Comment on attachment 269272
Patch6

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

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:55
&gt; + @abstract The type of data we want to detect.

I don&apos;t think the &quot;we&quot; is right here. But again, I don&apos;t really know how these are supposed to sound.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:60
&gt; + @constant WKDataDetectorTypeCalendarEvent Dates and time that are in the future are detected and turned into links.

&quot;Time&quot; -&gt; &quot;Times&quot;

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:61
&gt; + @constant WKDataDetectorTypeAll All of the above data types are turned into links when detected. Chosing this value will

&quot;Chosing&quot; -&gt; &quot;Choosing&quot;

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:117
&gt; + An example of how this property may affect the content loaded in the WKWebView is that content like

Not sure about the &quot;an example of how&quot; wording for this, but I don&apos;t really know how these comments are supposed to sound.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156663</commentid>
    <comment_count>24</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-19 11:34:50 -0800</bug_when>
    <thetext>Committed revision 195300.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156671</commentid>
    <comment_count>25</comment_count>
      <attachid>269118</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-01-19 11:53:20 -0800</bug_when>
    <thetext>Comment on attachment 269118
Patch5

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

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:387
&gt; +    pageConfiguration-&gt;preferenceValues().set(WebKit::WebPreferencesKey::dataDetectorTypesKey(), WebKit::WebPreferencesStore::Value(static_cast&lt;uint32_t&gt;([_configuration dataDetectorTypes])));

Move fromWKDataDetectorTypes here (and set the pref to the WebCore value)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156741</commentid>
    <comment_count>26</comment_count>
      <attachid>269295</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-19 14:22:29 -0800</bug_when>
    <thetext>Created attachment 269295
Patch7

Fixes the 32 bit build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156742</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-19 14:23:35 -0800</bug_when>
    <thetext>Attachment 269295 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h:64:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/editing/cocoa/DataDetection.h:46:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/DataDetection.h:47:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 3 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156755</commentid>
    <comment_count>28</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-19 14:59:28 -0800</bug_when>
    <thetext>Build fixed before landing.
Committed revision 195317</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156919</commentid>
    <comment_count>29</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-01-19 23:34:34 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; Build fixed before landing.
&gt; Committed revision 195317

It broke the Apple Mac cmae build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156920</commentid>
    <comment_count>30</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-01-19 23:35:48 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; Build fixed before landing.
&gt; &gt; Committed revision 195317
&gt; 
&gt; It broke the Apple Mac cmae build.

cmae -&gt; cmake</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156935</commentid>
    <comment_count>31</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-01-20 02:59:56 -0800</bug_when>
    <thetext>cmake fix landed in https://trac.webkit.org/changeset/195348</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156938</commentid>
    <comment_count>32</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-01-20 04:57:28 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; cmake fix landed in https://trac.webkit.org/changeset/195348

still broken: 

/Volumes/Data/slave/elcapitan-cmake-debug/build/Source/WebCore/page/Settings.h:46:10: fatal error: &apos;DataDetection.h&apos; file not found
#include &quot;DataDetection.h&quot;
         ^
1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156987</commentid>
    <comment_count>33</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-01-20 11:28:35 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/195358 should fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157124</commentid>
    <comment_count>34</comment_count>
      <attachid>269407</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-20 17:02:25 -0800</bug_when>
    <thetext>Created attachment 269407
Patch including detection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157125</commentid>
    <comment_count>35</comment_count>
      <attachid>269407</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-01-20 17:06:07 -0800</bug_when>
    <thetext>Comment on attachment 269407
Patch including detection.

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

This is getting to the point where it really needs tests (and should be easy to add tests).

There&apos;s a lot here, I&apos;ll look at it in a bit later.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:51
&gt; +#import &lt;DataDetectorsCore/DDBinderKeys_Private.h&gt;
&gt; +#import &lt;DataDetectorsCore/DDScannerResult.h&gt;
&gt; +#import &lt;DataDetectorsCore/DDURLifier.h&gt;
&gt; +#import &lt;DataDetectorsUI/DDUIBase.h&gt;

You&apos;re going to need some SPI headers.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:63
&gt; +- (NSString *) dataDetectorStringValue

No space after the )

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:65
&gt; +    NSUInteger length = [self length];

Dot notation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157166</commentid>
    <comment_count>36</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-20 19:06:48 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; Comment on attachment 269407 [details]
&gt; Patch including detection.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=269407&amp;action=review
&gt; 
&gt; This is getting to the point where it really needs tests (and should be easy
&gt; to add tests).
&gt; 
&gt; There&apos;s a lot here, I&apos;ll look at it in a bit later.
&gt; 
&gt; &gt; Source/WebCore/editing/cocoa/DataDetection.mm:51
&gt; &gt; +#import &lt;DataDetectorsCore/DDBinderKeys_Private.h&gt;
&gt; &gt; +#import &lt;DataDetectorsCore/DDScannerResult.h&gt;
&gt; &gt; +#import &lt;DataDetectorsCore/DDURLifier.h&gt;
&gt; &gt; +#import &lt;DataDetectorsUI/DDUIBase.h&gt;
&gt; 
&gt; You&apos;re going to need some SPI headers.
&gt; 
Yes, I&apos;m fixing those since the build fails on non internal SDK.
&gt; &gt; Source/WebCore/editing/cocoa/DataDetection.mm:63
&gt; &gt; +- (NSString *) dataDetectorStringValue
&gt; 
&gt; No space after the )
&gt; 
&gt; &gt; Source/WebCore/editing/cocoa/DataDetection.mm:65
&gt; &gt; +    NSUInteger length = [self length];
&gt; 
&gt; Dot notation
OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157173</commentid>
    <comment_count>37</comment_count>
      <attachid>269415</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-20 19:25:25 -0800</bug_when>
    <thetext>Created attachment 269415
Patch with detection and build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157174</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-20 19:27:15 -0800</bug_when>
    <thetext>Attachment 269415 did not pass style-queue:


ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157306</commentid>
    <comment_count>39</comment_count>
      <attachid>269457</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-21 09:21:57 -0800</bug_when>
    <thetext>Created attachment 269457
Patch with detection and build fixes for iOS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157308</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-21 09:24:58 -0800</bug_when>
    <thetext>Attachment 269457 did not pass style-queue:


ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:104:  The parameter name &quot;result&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:105:  The parameter name &quot;result&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:106:  The parameter name &quot;result&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:107:  The parameter name &quot;scanQuery&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:107:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:107:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:107:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:107:  The parameter name &quot;coalescing&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:108:  The parameter name &quot;scanQuery&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:108:  The parameter name &quot;coalescing&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:109:  The parameter name &quot;scanQuery&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:110:  The parameter name &quot;query&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 12 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157321</commentid>
    <comment_count>41</comment_count>
      <attachid>269460</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-21 09:51:00 -0800</bug_when>
    <thetext>Created attachment 269460
More build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157325</commentid>
    <comment_count>42</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-21 09:53:59 -0800</bug_when>
    <thetext>Attachment 269460 did not pass style-queue:


ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:108:  Extra space between CFIndex and queryIndex  [whitespace/declaration] [3]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:109:  Extra space between CFIndex and offset  [whitespace/declaration] [3]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:113:  Extra space between DDQueryOffset and start  [whitespace/declaration] [3]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:114:  Extra space between DDQueryOffset and end  [whitespace/declaration] [3]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:130:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:135:  The parameter name &quot;result&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:136:  The parameter name &quot;result&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:137:  The parameter name &quot;result&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:138:  The parameter name &quot;scanQuery&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:138:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:138:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:138:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:138:  The parameter name &quot;coalescing&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:139:  The parameter name &quot;scanQuery&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:139:  The parameter name &quot;coalescing&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:140:  The parameter name &quot;scanQuery&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:141:  The parameter name &quot;query&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:142:  The parameter name &quot;result&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:143:  The parameter name &quot;result&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:144:  The parameter name &quot;result&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 21 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157326</commentid>
    <comment_count>43</comment_count>
      <attachid>269462</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-21 09:56:21 -0800</bug_when>
    <thetext>Created attachment 269462
More build fixes and style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157331</commentid>
    <comment_count>44</comment_count>
      <attachid>269465</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-21 10:15:15 -0800</bug_when>
    <thetext>Created attachment 269465
More build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157334</commentid>
    <comment_count>45</comment_count>
      <attachid>269465</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-01-21 10:28:25 -0800</bug_when>
    <thetext>Comment on attachment 269465
More build fixes

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

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:50
&gt; +const NSString *kDataDetectorsURLScheme = @&quot;x-apple-data-detectors&quot;;
&gt; +const NSString *kDataDetectorsAttributeTypeKey = @&quot;x-apple-data-detectors-type&quot;;
&gt; +const NSString *kDataDetectorsAttributeResultKey = @&quot;x-apple-data-detectors-result&quot;;

Not sure our constants should have this prefix.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:400
&gt; +    RetainPtr&lt;NSMutableArray&gt; allResults = adoptNS([[NSMutableArray alloc] init]);

Why is this NSMutableArray instead of Vector&lt;RetainPtr&lt;&gt;&gt;? It never gets handed to anything that expects a Foundation type, and we&apos;re building it up here ourselves.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:401
&gt; +    RetainPtr&lt;NSMutableArray&gt; indexPaths = adoptNS([[NSMutableArray alloc] init]);

Ditto.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:414
&gt; +            CFArrayRef subresults = DDResultGetSubResults(result);
&gt; +            [allResults addObjectsFromArray:(NSArray *)subresults];
&gt; +            
&gt; +            for (NSUInteger i = 0 ; i &lt; [(NSArray *)subresults count] ; i++)
&gt; +                [indexPaths addObject:[indexPath indexPathByAddingIndex:i]];

Any reason not to do the cast in the assignment instead of twice later?

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:438
&gt; +        while (iteratorCount &lt; iteratorTargetAdvanceCount) {
&gt; +            iterator.advance();
&gt; +            iteratorCount++;
&gt; +        }

Maybe we should consider adding an advanceBy, like you said?

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:473
&gt; +        NSString *identifier = [[indexPaths objectAtIndex:resultIndex] dataDetectorStringValue];
&gt; +        NSString *correspondingURL = constructURLStringForResult(coreResult, identifier, referenceDate, (NSTimeZone *)tz, types);

It&apos;s fairly surprising to me that in WebCore we&apos;re building strings and URLs with Foundation instead of WebCore types. dataDetectorStringValue, too.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:518
&gt; +            anchorElement-&gt;setDir(&quot;ltr&quot;);

!?!? that seems rather presumptuous

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:528
&gt; +            anchorElement-&gt;setAttribute(QualifiedName(nullAtom, (NSString *)kDataDetectorsURLScheme, nullAtom), &quot;true&quot;);
&gt; +            anchorElement-&gt;setAttribute(QualifiedName(nullAtom, (NSString *)kDataDetectorsAttributeTypeKey, nullAtom), dataDetectorTypeForCategory(DDResultGetCategory(coreResult)));
&gt; +            anchorElement-&gt;setAttribute(QualifiedName(nullAtom, (NSString *)kDataDetectorsAttributeResultKey, nullAtom), identifier);

If we are defining these constants, why are we making them NSString instead of String, if they&apos;re just going to something that wants a String (presumably)?

&gt; Source/WebCore/page/Frame.h:193
&gt; +        void setDataDetectionResults(NSArray *results) { m_dataDetectionResults = results; }

Who calls this? I can&apos;t find a caller, but maybe that&apos;s just find-in-page being broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157336</commentid>
    <comment_count>46</comment_count>
      <attachid>269466</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-21 10:30:54 -0800</bug_when>
    <thetext>Created attachment 269466
Keep trying to build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157406</commentid>
    <comment_count>47</comment_count>
      <attachid>269465</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-21 13:36:03 -0800</bug_when>
    <thetext>Comment on attachment 269465
More build fixes

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

&gt;&gt; Source/WebCore/editing/cocoa/DataDetection.mm:400
&gt;&gt; +    RetainPtr&lt;NSMutableArray&gt; allResults = adoptNS([[NSMutableArray alloc] init]);
&gt; 
&gt; Why is this NSMutableArray instead of Vector&lt;RetainPtr&lt;&gt;&gt;? It never gets handed to anything that expects a Foundation type, and we&apos;re building it up here ourselves.

Just because I was lazy  and wanted to be able to add all the sub results with one call :-). I can change it though .

&gt;&gt; Source/WebCore/editing/cocoa/DataDetection.mm:414
&gt;&gt; +                [indexPaths addObject:[indexPath indexPathByAddingIndex:i]];
&gt; 
&gt; Any reason not to do the cast in the assignment instead of twice later?

No reason, just copy/paste. I&apos;ll fix it.

&gt;&gt; Source/WebCore/editing/cocoa/DataDetection.mm:438
&gt;&gt; +        }
&gt; 
&gt; Maybe we should consider adding an advanceBy, like you said?

I&apos;ll do it later.

&gt;&gt; Source/WebCore/editing/cocoa/DataDetection.mm:473
&gt;&gt; +        NSString *correspondingURL = constructURLStringForResult(coreResult, identifier, referenceDate, (NSTimeZone *)tz, types);
&gt; 
&gt; It&apos;s fairly surprising to me that in WebCore we&apos;re building strings and URLs with Foundation instead of WebCore types. dataDetectorStringValue, too.

constructURLStringForResult uses some DD functions to build the URL and we are just returning the value returned by them.
dataDetectorStringValue is and extension of NSIndexPath and I think it makes sense to use NSString as return value.

&gt;&gt; Source/WebCore/editing/cocoa/DataDetection.mm:518
&gt;&gt; +            anchorElement-&gt;setDir(&quot;ltr&quot;);
&gt; 
&gt; !?!? that seems rather presumptuous

Discussed in person.

&gt;&gt; Source/WebCore/editing/cocoa/DataDetection.mm:528
&gt;&gt; +            anchorElement-&gt;setAttribute(QualifiedName(nullAtom, (NSString *)kDataDetectorsAttributeResultKey, nullAtom), identifier);
&gt; 
&gt; If we are defining these constants, why are we making them NSString instead of String, if they&apos;re just going to something that wants a String (presumably)?

Done.

&gt;&gt; Source/WebCore/page/Frame.h:193
&gt;&gt; +        void setDataDetectionResults(NSArray *results) { m_dataDetectionResults = results; }
&gt; 
&gt; Who calls this? I can&apos;t find a caller, but maybe that&apos;s just find-in-page being broken.

It was missing the call in FrameLoader.cpp. I&apos;ve fixed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157407</commentid>
    <comment_count>48</comment_count>
      <attachid>269486</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-21 13:37:57 -0800</bug_when>
    <thetext>Created attachment 269486
Patch addressing comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157416</commentid>
    <comment_count>49</comment_count>
      <attachid>269486</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-01-21 13:53:05 -0800</bug_when>
    <thetext>Comment on attachment 269486
Patch addressing comments

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

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:191
&gt; +static NSString *constructURLStringForResult(DDResultRef currentResult, NSString *resultIdentifier, NSDate * referenceDate, NSTimeZone * referenceTimeZone, DataDetectorTypes detectionTypes)

Some of these stars got detached from the right place.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:252
&gt; +        

Weird extra newline

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:263
&gt; +            node = startNode-&gt;parentNode();
&gt; +            while (node) {

This should use the ancestor iterators that I believe we have (you can find them around, or I think Antti or Andreas added them).

Might have to adopt them in a few places.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:339
&gt; +        BOOL containsOnlyWhiteSpace = YES;

Pretty surprising to use BOOL instead of bool in WebCore.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:407
&gt; +    for (CFIndex i = 0; i &lt; resultCount; i++) {
&gt; +        DDResultRef result = (DDResultRef)CFArrayGetValueAtIndex(scannerResults.get(), i);

I wonder if this could use for (..in..) (with a cast to NSArray)

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:412
&gt; +            for (NSUInteger i = 0 ; i &lt; [subresults count] ; i++) {

Very much do not like the shadowed variable names. Please call one or both of them something better.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:434
&gt; +    for (CFIndex i = 0; i &lt; resultCount; i++) {
&gt; +        DDResultRef result = allResults[i].get();

It doesn&apos;t look like we use the index for anything except retrieving the result so this should use modern iteration over allResults.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157521</commentid>
    <comment_count>50</comment_count>
      <attachid>269526</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-21 18:06:29 -0800</bug_when>
    <thetext>Created attachment 269526
Patch revisited

Addressed your latest comments and fixed some bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157525</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-21 18:09:39 -0800</bug_when>
    <thetext>Attachment 269526 did not pass style-queue:


ERROR: Source/WebCore/editing/cocoa/DataDetection.mm:405:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157584</commentid>
    <comment_count>52</comment_count>
      <attachid>269526</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-01-21 21:32:45 -0800</bug_when>
    <thetext>Comment on attachment 269526
Patch revisited

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

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:58
&gt; +- (NSString *)dataDetectorStringValue

You could make this not a category but instead a static function that takes a NSIndexPath and and returns an NSString then you could use WebCore mechanisms instead of NSString and NSArray and stuff :D

It would make me happier. But it&apos;s fine as is too :)

&gt; Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:91
&gt; ++ (NSArray *) resultsFromCoreResults:(CFArrayRef)coreResults;

no space after )

&gt; Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:106
&gt; +inline CFComparisonResult DDQueryOffsetCompare(DDQueryOffset o1, DDQueryOffset o2)

Seems like this could cause trouble if DD ever made this non-inline. Please rename. Or something.

&gt; Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:152
&gt; +SOFT_LINK_PRIVATE_FRAMEWORK_OPTIONAL(DataDetectorsCore)
&gt; +SOFT_LINK_CLASS(DataDetectorsCore, DDScannerResult)

For some reason I thought you said that it was safe to link DDCore directly. Is it not? Or are we avoiding it for some performance-y reason? I think we prefer not soft-linking in most cases where we don&apos;t absolutely have to, and I think we have more performant alternatives (Darin at least has mentioned some in the past, but I don&apos;t remember the details).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157652</commentid>
    <comment_count>53</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-01-22 04:12:52 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; http://trac.webkit.org/changeset/195358 should fix that.

No, the build is still broken, see
https://build.webkit.org/builders/Apple%20El%20Capitan%20CMake%20Debug%20%28Build%29/builds/1814</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157805</commentid>
    <comment_count>54</comment_count>
      <attachid>269603</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-22 13:52:02 -0800</bug_when>
    <thetext>Created attachment 269603
New patch revisited

I&apos;ve addressed the latest comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157807</commentid>
    <comment_count>55</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-22 13:53:46 -0800</bug_when>
    <thetext>Attachment 269603 did not pass style-queue:


ERROR: Source/WebCore/editing/cocoa/DataDetection.mm:413:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157809</commentid>
    <comment_count>56</comment_count>
      <attachid>269603</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-22 13:55:38 -0800</bug_when>
    <thetext>Comment on attachment 269603
New patch revisited

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

&gt; Source/WebCore/platform/spi/cocoa/DataDetectorsCoreSPI.h:133
&gt; +DDQueryRange DDResultGetQueryRangeForURLification(DDResultRef);

Now that we are soft linking I probably don&apos;t need these here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157890</commentid>
    <comment_count>57</comment_count>
      <attachid>269603</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-01-22 16:02:28 -0800</bug_when>
    <thetext>Comment on attachment 269603
New patch revisited

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        the dom by adding data detector links as appropriate.

DOM

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:183
&gt; +static void removeResultLinksFromAnchor(Node *node, Node *nodeParent)

Stars are on the wrong side.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:209
&gt; +            Node *child = children-&gt;item(0); // children change due to insertion, always use idx 0

This comment could use some love (at the very least capitalization and punctuation, maybe rewording).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157894</commentid>
    <comment_count>58</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-22 16:24:43 -0800</bug_when>
    <thetext>Committed revision 195494.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157931</commentid>
    <comment_count>59</comment_count>
      <attachid>269629</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-22 18:15:13 -0800</bug_when>
    <thetext>Created attachment 269629
Part 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157932</commentid>
    <comment_count>60</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-22 18:17:18 -0800</bug_when>
    <thetext>Attachment 269629 did not pass style-queue:


ERROR: Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:139:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:139:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157934</commentid>
    <comment_count>61</comment_count>
      <attachid>269630</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-22 18:34:02 -0800</bug_when>
    <thetext>Created attachment 269630
Part 3 with build fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157935</commentid>
    <comment_count>62</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-22 18:36:19 -0800</bug_when>
    <thetext>Attachment 269630 did not pass style-queue:


ERROR: Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:139:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:139:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158052</commentid>
    <comment_count>63</comment_count>
      <attachid>269674</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-23 10:54:35 -0800</bug_when>
    <thetext>Created attachment 269674
Part 3 with more build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158054</commentid>
    <comment_count>64</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-23 10:57:29 -0800</bug_when>
    <thetext>Attachment 269674 did not pass style-queue:


ERROR: Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:139:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:139:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158142</commentid>
    <comment_count>65</comment_count>
      <attachid>269674</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-01-24 12:24:55 -0800</bug_when>
    <thetext>Comment on attachment 269674
Part 3 with more build fixes

WebPageProxy.h includes &quot;InteractionInformationAtPosition.h&quot; unconditionally, it seems, but it’s now an iOS-only header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158486</commentid>
    <comment_count>66</comment_count>
      <attachid>269789</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-25 13:59:52 -0800</bug_when>
    <thetext>Created attachment 269789
Patch for final work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158488</commentid>
    <comment_count>67</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-25 14:02:09 -0800</bug_when>
    <thetext>Attachment 269789 did not pass style-queue:


ERROR: Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:139:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:139:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158560</commentid>
    <comment_count>68</comment_count>
      <attachid>269807</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-25 15:38:07 -0800</bug_when>
    <thetext>Created attachment 269807
Final work with build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158562</commentid>
    <comment_count>69</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-25 15:39:08 -0800</bug_when>
    <thetext>Attachment 269807 did not pass style-queue:


ERROR: Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:139:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:139:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158574</commentid>
    <comment_count>70</comment_count>
      <attachid>269807</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-01-25 15:48:49 -0800</bug_when>
    <thetext>Comment on attachment 269807
Final work with build fixes

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

&gt; Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:138
&gt; +            result.dataDetectorResults = [unarchiver decodeObjectOfClasses:[NSSet setWithArray:@[ [NSArray class], getDDScannerResultClass()]] forKey:@&quot;dataDetectorResults&quot;];

Add a space before the ].

&gt; Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:140
&gt; +            LOG_ERROR(&quot;Failed to decode NSArry of DDScanResult: %@&quot;, exception);

Array.

&gt; Source/WebKit2/UIProcess/ios/WKActionSheetAssistant.mm:422
&gt; +    NSURL *targetURL = [NSURL URLWithString:positionInformation.url];

I think this should use our category method _web_URLWithString or whatever it&apos;s called.

&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:3481
&gt; +    NSDictionary* context = nil;

Star&apos;s on the wrong side :D

&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:3581
&gt; +            NSDictionary* context = nil;

Ditto

&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:3590
&gt; +                if (dataForPreview)

I think you&apos;re meaning to check ddResult here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158634</commentid>
    <comment_count>71</comment_count>
      <attachid>269828</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-25 17:40:20 -0800</bug_when>
    <thetext>Created attachment 269828
Testing the build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158635</commentid>
    <comment_count>72</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-25 17:42:25 -0800</bug_when>
    <thetext>Attachment 269828 did not pass style-queue:


ERROR: Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:144:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm:144:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158643</commentid>
    <comment_count>73</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2016-01-25 18:18:32 -0800</bug_when>
    <thetext>Committed revision 195574.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170063</commentid>
    <comment_count>74</comment_count>
      <attachid>269603</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-02 19:15:45 -0800</bug_when>
    <thetext>Comment on attachment 269603
New patch revisited

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

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:194
&gt; +    RefPtr&lt;NodeList&gt; children = node-&gt;childNodes();

Note that this returns a &quot;live&quot; NodeList so it gets updated as the DOM gets modified.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:195
&gt; +    unsigned childCount = children-&gt;length();

Note that this traverses all the children and caches them in a Vector. However, that vector/cache gets invalidated as you traverse due to the DOM tree mutations.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:199
&gt; +            removeResultLinksFromAnchor(child, node);

I may be misunderstanding but this loop seems wrong:
1. if child is a DDAnchor, removeResultLinksFromAnchor() will replace &apos;child&apos; with the children of &apos;child&apos;. Therefore, the list of children you are iterating on will change and your for loop will iterate over the children you have just moved up.
2. Also, since you have cached childCount, you will actually not loop over ALL the children.
3. Note that since removeResultLinksFromAnchor() causes DOM tree mutations and fires synchronous JS events. Nothing prevents JavaScript code from altering the DOM either and messing with the children you are iterating on AFAIK.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:204
&gt; +        childCount = children-&gt;length();

This is very inefficient. childNodes() returns a &quot;live&quot; NodeList. When you call length(), we have to traverse all the children to compute the length. Also, we cache the children during traversal into a Vector as we assume you are going to want to iterate over them next. However, as you keep modifying the DOM tree below, we keep invalidating the NodeList cache (e.g. the initial Vector has to be cleared).

Since you always access the first child, this should probably be written like so:
while(node-&gt;firstChild())
    nodeParent-&gt;insertBefore(node-&gt;firstChild(), node, ASSERT_NO_EXCEPTION);

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:210
&gt; +            nodeParent-&gt;insertBefore(child, node, ASSERT_NO_EXCEPTION);

Also note that insertBefore() causes synchronous JS events to be fired (because the DOM tree is modified). Therefore, JavaScript code can be executed and mess with the children. If the JS were to remove children, you&apos;d be in trouble because you cached childCount. This means that at some point, item(0) would return null.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268717</attachid>
            <date>2016-01-11 15:12:09 -0800</date>
            <delta_ts>2016-01-11 17:05:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>ddwk2-part1.txt</filename>
            <type>text/plain</type>
            <size>37600</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NDg2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAxLTExICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlz
IHRoZSBmaXJzdCBzdGVwIHRvd2FyZCBpbXBsZW1lbnRpbmcgRGF0YSBEZXRlY3RvcnMgc3VwcG9y
dAorICAgICAgICBpbiBXSzIgb24gaU9TLiBUaGUgcGF0Y2ggYWRkcyBhIG5ldyBtZW1lYmVyIHRv
IHRoZSBTZXR0aW5ncyBvYmplY3QKKyAgICAgICAgdG8gcmV0cmlldmUgdGhlIHR5cGUgb2YgZGV0
ZWN0aW9uIGRlc2lyZWQuIFRoZSBEYXRhRGV0ZWN0aW9uIGZpbGVzCisgICAgICAgIGhhdmUgYmVl
biBtb3ZlZCB1bmRlciBjb2NvYSwgc2luY2UgdGhleSBhcmUgbm8gbG9uZ2VyIE9TWCBzcGVjaWZp
Yy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29h
L0RhdGFEZXRlY3Rpb24uaDogQ29waWVkIGZyb20gV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0
ZWN0aW9uLmguCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOiBDb3Bp
ZWQgZnJvbSBXZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24ubW0uCisgICAgICAgIChX
ZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6CisgICAgICAg
ICogZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5oOiBSZW1vdmVkLgorICAgICAgICAqIGVkaXRp
bmcvbWFjL0RhdGFEZXRlY3Rpb24ubW06IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21w
bGV0ZUZvclRoaXNGcmFtZSk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAq
IHBhZ2UvU2V0dGluZ3MuaW46CisgICAgICAgICogcGxhdGZvcm0vc3BpL21hYy9EYXRhRGV0ZWN0
b3JzU1BJLmg6CisKIDIwMTYtMDEtMTEgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxOTQ4NjYuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxOTQ1OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExMjksOCArMTEyOSw2IEBACiAJCTJE
NTAwMkZDMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcg
LyogUGF0aFV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTJENTAzNjY4MUJDREREQzQwMEUyMEJCMyAvKiBHZXN0dXJlRXZlbnRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENTAzNjY3
MUJDREREQzQwMEUyMEJCMyAvKiBHZXN0dXJlRXZlbnRzLmNwcCAqLzsgfTsKIAkJMkQ1NjQ2QjAx
QjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENTY0NkFGMUI4Rjg0OTMwMDNDNDk5NCAv
KiBEaWN0aW9uYXJ5UG9wdXBJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMkQ1OEQ4NTUxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENThE
ODUzMUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMkQ1OEQ4NTYxQTE1RjY1RjAwQTVGNzI2
IC8qIERhdGFEZXRlY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRDU4RDg1NDFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5tbSAq
LzsgfTsKIAkJMkQ1OUYxQkYxQTAwNDRDNjAwMUYzRDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENTlGMUJFMUEw
MDQ0QzYwMDFGM0QyOSAvKiBEYXRhRGV0ZWN0b3JzU1BJLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ1QTU5MkYxNTI1MjUyMzAwMzZFRTUxIC8q
IEltYWdlT3JpZW50YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTg3NDhENzQxMkNDM0Y4OTAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24u
Y3BwICovOyB9OwogCQkyRDVBNTkzMTE1MjUyNUQwMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NDhE
NjYxMkNDMzc2MzAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTg2Niw2ICs1ODY0LDggQEAKIAkJ
QzUwRDBFODMwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MEQwRTgxMEZGNDI3MjkwMEFD
MjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzUxMzdDRjIxMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3Ry
aW5nTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNTEzN0NGMDExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmNwcCAqLzsgfTsK
IAkJQzUxMzdDRjMxMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMzdDRjExMUE1ODM3ODAw
NEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5oICovOyB9OworCQlDNTIyN0RGMTFDM0M2REYxMDBG
NUVENTQgLyogRGF0YURldGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzUyMjdERUYxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNTIy
N0RGMjFDM0M2REY5MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MjI3REYwMUMzQzZERDcwMEY1RUQ1NCAv
KiBEYXRhRGV0ZWN0aW9uLm1tICovOyB9OwogCQlDNTI3OEIwQzE3RjIxMkVBMDAzQTI5OTggLyog
UGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzUyNzhCMEIxN0YyMTJFQTAwM0EyOTk4IC8qIFBsYXRmb3JtUGFzdGVi
b2FyZElPUy5tbSAqLzsgfTsKIAkJQzU0NDI3NEIxMUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmlu
Z0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1
NDQyNzQ5MTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzU1NjEwRjExMUE3MDRFQjAwQjgy
RDI3IC8qIERPTVN0cmluZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzU1NjEwRjAxMUE3MDRFQjAwQjgyRDI3IC8qIERPTVN0cmluZ0xpc3Qu
Y3BwICovOyB9OwpAQCAtODQ4OCw4ICs4NDg4LDYgQEAKIAkJMkQ1MDAyRkExQjU2RDc5OTAwMjBB
QUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGF0aFV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDUwMzY2NzFC
Q0REREM0MDBFMjBCQjMgLyogR2VzdHVyZUV2ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBHZXN0dXJlRXZlbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkQ1NjQ2QUYxQjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGlvbmFyeVBvcHVwSW5mby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDU4RDg1MzFBMTVGNjVGMDBBNUY3MjYg
LyogRGF0YURldGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRh
RGV0ZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJENThEODU0MUExNUY2
NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gRGF0YURldGVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkQ1OUYxQkUxQTAwNDRDNjAwMUYzRDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YURldGVjdG9yc1NQSS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDVCQzQyNTE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJp
dHlQb2xpY3lWaW9sYXRpb25FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJENUJDNDI2MTZGODgyQkUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlv
bkV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTZWN1cml0eVBvbGljeVZpb2xhdGlv
bkV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNjc5LDYgKzEzNjc3
LDggQEAKIAkJQzUwRDBFODEwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZU5hbWVzcGFjZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTEzN0NGMDExQTU4Mzc4MDA0QURCOTkgLyogSlNE
T01TdHJpbmdMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
RE9NU3RyaW5nTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MTM3Q0Yx
MTFBNTgzNzgwMDRBREI5OSAvKiBKU0RPTVN0cmluZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNET01TdHJpbmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUM1MjI3REVGMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFEZXRlY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzUyMjdERjAxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rp
b24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEYXRhRGV0ZWN0
aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTI3OEIwQjE3RjIxMkVBMDAz
QTI5OTggLyogUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDNTQ0Mjc0OTExQTU3RTdBMDA2M0E3NDkgLyogRE9NU3RyaW5nTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TdHJpbmdMaXN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NDQyNzRBMTFBNTdFN0EwMDYzQTc0OSAvKiBE
T01TdHJpbmdMaXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01TdHJpbmdMaXN0Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3ODMyLDYgKzE3ODMyLDggQEAKIAkJ
N0MzRTUxMDcxOERGOEYxMjAwQzExMkY3IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDNTIyN0RFRjFDM0M2REQ3MDBGNUVENTQgLyogRGF0
YURldGVjdGlvbi5oICovLAorCQkJCUM1MjI3REYwMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0
ZWN0aW9uLm1tICovLAogCQkJCTlCNTVFRUVBMUIzRjNGRUYwMDUzNDJCQyAvKiBFZGl0b3JDb2Nv
YS5oICovLAogCQkJCTlCNTVFRUU4MUIzRTg4OTgwMDUzNDJCQyAvKiBFZGl0b3JDb2NvYS5tbSAq
LywKIAkJCQk3QzNFNTEwODE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5oICovLApA
QCAtMjMxMzEsOCArMjMxMzMsNiBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQ0U3QjJEQUYxNTg2
QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oICovLAogCQkJCUNF
N0IyREIwMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0g
Ki8sCi0JCQkJMkQ1OEQ4NTMxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24uaCAqLywK
LQkJCQkyRDU4RDg1NDFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5tbSAqLywKIAkJ
CQk5MzdGRjNENDFBMTAxMkQ2MDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5oICovLAogCQkJ
CTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJ
CUVENTAxREM1MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gKi8sCkBAIC0yNTAwMiw3
ICsyNTAwMiw2IEBACiAJCQkJOTdCQzZBMzAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhy
ZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkEzMjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0
YWJhc2VUcmFja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRTIzNDgwRDE4QTk4NzE0MDBFNEI2
RTggLyogRGF0YUN1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkQ1OEQ4NTUxQTE1RjY1RjAwQTVG
NzI2IC8qIERhdGFEZXRlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUUyQjRFMUFGRjA2
Q0EwMDk3NkY5RiAvKiBEYXRhRGV0ZWN0b3JzQ29yZVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MkQ1OUYxQkYxQTAwNDRDNjAwMUYzRDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMjI3NDZGMEU4MzY2NDUwMEU3Rjk3NSAvKiBEYXRhUmVmLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI1OTc1LDYgKzI1OTc0LDcgQEAKIAkJCQlCMjc1MzU3NTBCMDUzODE0MDAyQ0U2
NEYgLyogSW50U2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NzYwQjA1MzgxNDAwMkNF
NjRGIC8qIEludFNpemVIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTEyNTI0RDFBMUE3N0RF
MDA4NjQ0ODAgLyogSU9QTUxpYlNQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzUyMjdERjExQzND
NkRGMTAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0REVG
NjQzMUE2RkY5MjcwMEQ0NUVFQyAvKiBJT1JldHVyblNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MkQwQjRBQUIxOERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUMyMUU1N0QxODNFRDFGRjAwMUMyODlEIC8qIElPU3VyZmFjZVBvb2wuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjg2NzQsNiArMjg2NzQsNyBAQAogCQkJCTg1MDMxQjNGMEE0NEVGQzcwMEY5OTJF
MCAvKiBDbGlwYm9hcmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1ODAzNzE2MTFBNjZG
MDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFQTc2MzUx
NDYwQjcxQTAwOEIzMUYxIC8qIENsb2NrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUM1MjI3REYy
MUMzQzZERjkwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Q0RFQTc2MzQxNDYwQjU2RjAwOEIzMUYxIC8qIENsb2NrR2VuZXJpYy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5QkQ4QTk1QTE4QkVGQzc2MDA5ODdFOUEgLyogQ29sbGVjdGlvbkluZGV4Q2FjaGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjYwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9y
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg4NTIsNyArMjg4NTMsNiBAQAogCQkJCTk3QkM2QTJG
MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5N0JDNkEzMTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJFMjM0ODBDMThBOTg3MEIwMEU0QjZFOCAvKiBEYXRhQ3VlLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTJENThEODU2MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9u
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2NDY0MUQxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFz
ZXRET01TdHJpbmdNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4NDk0MUIwQjVGRTUwNzAw
MUUyMzdBIC8qIERhdGFUcmFuc2Zlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFGRjA4
MjQ1RTU5MDAxRTlBQkMgLyogRGF0YVRyYW5zZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAkocmV2aXNp
b24gMTk0NTkxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9u
Lmg6MTk0NTkxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RGF0YURldGVjdGlvbl9oCisjZGVmaW5lIERhdGFEZXRlY3Rpb25faAorCisjaWYgUExBVEZPUk0o
TUFDKQorCisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CisKK09CSkNfQ0xBU1MgRERBY3Rpb25Db250ZXh0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEhpdFRlc3RSZXN1bHQ7CitjbGFzcyBSYW5nZTsKKwor
Y2xhc3MgRGF0YURldGVjdGlvbiB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0
KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94
LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSk7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKyNlbmRpZiAvLyBEYXRhRGV0
ZWN0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2lmbmRlZiBE
YXRhRGV0ZWN0aW9uX2gKICNkZWZpbmUgRGF0YURldGVjdGlvbl9oCiAKLSNpZiBQTEFURk9STShN
QUMpCi0KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
IApAQCAtMzksMTMgKzM3LDI1IEBAIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEhpdFRlc3RSZXN1
bHQ7CiBjbGFzcyBSYW5nZTsKIAorZW51bSBEYXRhRGV0ZWN0b3JUeXBlcyB7CisgICAgRGF0YURl
dGVjdG9yVHlwZU5vbmUgPSAwLAorICAgIERhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlciA9IDEg
PDwgMCwKKyAgICBEYXRhRGV0ZWN0b3JUeXBlTGluayA9IDEgPDwgMSwKKyAgICBEYXRhRGV0ZWN0
b3JUeXBlQWRkcmVzcyA9IDEgPDwgMiwKKyAgICBEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVu
dCA9IDEgPDwgMywKKyAgICBEYXRhRGV0ZWN0b3JUeXBlQWxsID0gMHhGRkZGCit9OworCiBjbGFz
cyBEYXRhRGV0ZWN0aW9uIHsKIHB1YmxpYzoKKyNpZiBQTEFURk9STShNQUMpCiAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1Bcm91
bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBGbG9hdFJlY3QmIGRldGVjdGVk
RGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSk7CisjZW5k
aWYKKyNpZiBQTEFURk9STShJT1MpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgZGV0
ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGV0ZWN0
b3JUeXBlcyB0eXBlcyk7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQogI2VuZGlmIC8vIERhdGFEZXRlY3Rpb25faApJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2
aXNpb24gMTk0NTkxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0
aW9uLm1tOjE5NDU5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVj
dGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJEYXRhRGV0ZWN0aW9uLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIkRh
dGFEZXRlY3RvcnNTUEkuaCIKKyNpbXBvcnQgIkZyYW1lVmlldy5oIgorI2ltcG9ydCAiSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKKyNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbXBv
cnQgIk5vZGUuaCIKKyNpbXBvcnQgIlJhbmdlLmgiCisjaW1wb3J0ICJSZW5kZXJPYmplY3QuaCIK
KyNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgorI2ltcG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgiCisj
aW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKKyNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVj
dEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiwgUmVmUHRy
PFJhbmdlPiBjb250ZXh0UmFuZ2UsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gs
IFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQoreworICAgIFN0cmluZyBmdWxsUGxh
aW5UZXh0U3RyaW5nID0gcGxhaW5UZXh0KGNvbnRleHRSYW5nZS5nZXQoKSk7CisgICAgaW50IGhp
dExvY2F0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoY29udGV4dFJh
bmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7CisKKyAgICBSZXRhaW5QdHI8
RERTY2FubmVyUmVmPiBzY2FubmVyID0gYWRvcHRDRihERFNjYW5uZXJDcmVhdGUoRERTY2FubmVy
VHlwZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7CisgICAgUmV0YWluUHRyPEREU2NhblF1ZXJ5UmVm
PiBzY2FuUXVlcnkgPSBhZG9wdENGKEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBmdWxsUGxhaW5UZXh0U3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCks
IENGUmFuZ2VNYWtlKDAsIGZ1bGxQbGFpblRleHRTdHJpbmcubGVuZ3RoKCkpKSk7CisKKyAgICBp
ZiAoIUREU2Nhbm5lclNjYW5RdWVyeShzY2FubmVyLmdldCgpLCBzY2FuUXVlcnkuZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiByZXN1
bHRzID0gYWRvcHRDRihERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0
KCksIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc05vT3ZlcmxhcCkpOworCisgICAgLy8gRmlu
ZCB0aGUgRERSZXN1bHRSZWYgdGhhdCBpbnRlcnNlY3RzIHRoZSBoaXRUZXN0UmVzdWx0J3MgVmlz
aWJsZVBvc2l0aW9uLgorICAgIEREUmVzdWx0UmVmIG1haW5SZXN1bHQgPSBudWxscHRyOworICAg
IFJlZlB0cjxSYW5nZT4gbWFpblJlc3VsdFJhbmdlOworICAgIENGSW5kZXggcmVzdWx0Q291bnQg
PSBDRkFycmF5R2V0Q291bnQocmVzdWx0cy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAw
OyBpIDwgcmVzdWx0Q291bnQ7IGkrKykgeworICAgICAgICBERFJlc3VsdFJlZiByZXN1bHQgPSAo
RERSZXN1bHRSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChyZXN1bHRzLmdldCgpLCBpKTsKKyAg
ICAgICAgQ0ZSYW5nZSByZXN1bHRSYW5nZUluQ29udGV4dCA9IEREUmVzdWx0R2V0UmFuZ2UocmVz
dWx0KTsKKyAgICAgICAgaWYgKGhpdExvY2F0aW9uID49IHJlc3VsdFJhbmdlSW5Db250ZXh0Lmxv
Y2F0aW9uICYmIChoaXRMb2NhdGlvbiAtIHJlc3VsdFJhbmdlSW5Db250ZXh0LmxvY2F0aW9uKSA8
IHJlc3VsdFJhbmdlSW5Db250ZXh0Lmxlbmd0aCkgeworICAgICAgICAgICAgbWFpblJlc3VsdCA9
IHJlc3VsdDsKKyAgICAgICAgICAgIG1haW5SZXN1bHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3Vi
cmFuZ2UoY29udGV4dFJhbmdlLmdldCgpLCByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbiwg
cmVzdWx0UmFuZ2VJbkNvbnRleHQubGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCFtYWluUmVzdWx0KQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHQgPSBhZG9w
dE5TKFthbGxvY0REQWN0aW9uQ29udGV4dEluc3RhbmNlKCkgaW5pdF0pOworICAgIFthY3Rpb25D
b250ZXh0IHNldEFsbFJlc3VsdHM6QFsgKGlkKW1haW5SZXN1bHQgXV07CisgICAgW2FjdGlvbkNv
bnRleHQgc2V0TWFpblJlc3VsdDptYWluUmVzdWx0XTsKKworICAgIFZlY3RvcjxGbG9hdFF1YWQ+
IHF1YWRzOworICAgIG1haW5SZXN1bHRSYW5nZS0+YWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOwor
ICAgIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBtYWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCisgICAgICAgIGRldGVjdGVkRGF0YUJv
dW5kaW5nQm94LnVuaXRlKGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhxdWFkLmVuY2xvc2lu
Z0JvdW5kaW5nQm94KCkpKTsKKyAgICAKKyAgICBkZXRlY3RlZERhdGFSYW5nZSA9IG1haW5SZXN1
bHRSYW5nZTsKKyAgICAKKyAgICByZXR1cm4gYWN0aW9uQ29udGV4dDsKK30KKworUmV0YWluUHRy
PEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RS
ZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwgRmxvYXRSZWN0JiBkZXRl
Y3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCit7
CisgICAgaWYgKCFEYXRhRGV0ZWN0b3JzTGlicmFyeSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgp
OworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byByZW5k
ZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb247CisgICAgUmVmUHRy
PFJhbmdlPiBjb250ZXh0UmFuZ2U7CisKKyAgICBpZiAoIWlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50Pigqbm9kZSkpIHsKKyAgICAgICAgcG9zaXRpb24gPSByZW5kZXJlci0+cG9zaXRpb25G
b3JQb2ludChoaXRUZXN0UmVzdWx0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7CisgICAgICAgIGlm
IChwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlv
bkluT3JCZWZvcmVOb2RlKG5vZGUpOworCisgICAgICAgIGNvbnRleHRSYW5nZSA9IHJhbmdlRXhw
YW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKKyAgICAgICAg
aWYgKCFjb250ZXh0UmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9IGVs
c2UgeworICAgICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7Cisg
ICAgICAgIGlmICghZnJhbWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBJbnRQb2ludCBmcmFtZVBvaW50ID0gaGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVy
Tm9kZUZyYW1lKCk7CisgICAgICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2lu
dCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7
CisgICAgICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgICAgIGNvbnRleHRSYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxh
cml0eShwb3NpdGlvbiwgTGluZUdyYW51bGFyaXR5LCBEaXJlY3Rpb25Gb3J3YXJkKTsKKyAgICAg
ICAgaWYgKCFjb250ZXh0UmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICByZXR1cm4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UocG9zaXRpb24sIGNv
bnRleHRSYW5nZSwgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIGRldGVjdGVkRGF0YVJhbmdlKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQko
d29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaW1wb3J0ICJjb25maWcu
aCIKICNpbXBvcnQgIkRhdGFEZXRlY3Rpb24uaCIKIAotI2lmIFBMQVRGT1JNKE1BQykKLQogI2lt
cG9ydCAiRGF0YURldGVjdG9yc1NQSS5oIgogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAjaW1wb3J0
ICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgpAQCAtNDIsNiArNDAsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShNQUMpCisKIHN0YXRpYyBSZXRhaW5QdHI8
RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb24sIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlLCBGbG9hdFJlY3QmIGRl
dGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkK
IHsKICAgICBTdHJpbmcgZnVsbFBsYWluVGV4dFN0cmluZyA9IHBsYWluVGV4dChjb250ZXh0UmFu
Z2UuZ2V0KCkpOwpAQCAtMTMxLDcgKzEzMSwxMSBAQCBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0
PiBEYXRhRGV0ZWN0aW9uCiAKICAgICByZXR1cm4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFu
Z2UocG9zaXRpb24sIGNvbnRleHRSYW5nZSwgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIGRldGVj
dGVkRGF0YVJhbmdlKTsKIH0KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKKyNpZiBQTEFURk9S
TShJT1MpCit2b2lkIERhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxS
YW5nZT4mLCBEYXRhRGV0ZWN0b3JUeXBlcykKK3sKK30KKyNlbmRpZgogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24uaAkocmV2aXNpb24gMTk0NTkxKQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERhdGFEZXRlY3Rpb25faAotI2RlZmlu
ZSBEYXRhRGV0ZWN0aW9uX2gKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotI2ltcG9ydCA8d3RmL1Jl
ZlB0ci5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotCi1PQkpDX0NMQVNTIEREQWN0aW9u
Q29udGV4dDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFz
cyBIaXRUZXN0UmVzdWx0OwotY2xhc3MgUmFuZ2U7Ci0KLWNsYXNzIERhdGFEZXRlY3Rpb24gewot
cHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250
ZXh0PiBkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0Jiwg
RmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0
ZWREYXRhUmFuZ2UpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQotCi0jZW5kaWYgLy8gRGF0YURldGVjdGlvbl9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDE5NDU5MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRGF0YURldGVjdGlv
bi5oIgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi0jaW1wb3J0ICJEYXRhRGV0ZWN0b3JzU1BJLmgi
Ci0jaW1wb3J0ICJGcmFtZVZpZXcuaCIKLSNpbXBvcnQgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmgiCi0jaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCi0jaW1wb3J0ICJOb2RlLmgiCi0jaW1w
b3J0ICJSYW5nZS5oIgotI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCi0jaW1wb3J0ICJUZXh0SXRl
cmF0b3IuaCIKLSNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgotI2ltcG9ydCAiVmlzaWJsZVVu
aXRzLmgiCi0jaW1wb3J0ICJodG1sZWRpdGluZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldp
dGhSYW5nZShWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24sIFJlZlB0cjxSYW5nZT4gY29udGV4dFJh
bmdlLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBk
ZXRlY3RlZERhdGFSYW5nZSkKLXsKLSAgICBTdHJpbmcgZnVsbFBsYWluVGV4dFN0cmluZyA9IHBs
YWluVGV4dChjb250ZXh0UmFuZ2UuZ2V0KCkpOwotICAgIGludCBoaXRMb2NhdGlvbiA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGNvbnRleHRSYW5nZS0+c3RhcnRQb3NpdGlv
bigpLCBwb3NpdGlvbikuZ2V0KCkpOwotCi0gICAgUmV0YWluUHRyPEREU2Nhbm5lclJlZj4gc2Nh
bm5lciA9IGFkb3B0Q0YoRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwgMCwg
bnVsbHB0cikpOwotICAgIFJldGFpblB0cjxERFNjYW5RdWVyeVJlZj4gc2NhblF1ZXJ5ID0gYWRv
cHRDRihERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnVs
bFBsYWluVGV4dFN0cmluZy5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBm
dWxsUGxhaW5UZXh0U3RyaW5nLmxlbmd0aCgpKSkpOwotCi0gICAgaWYgKCFERFNjYW5uZXJTY2Fu
UXVlcnkoc2Nhbm5lci5nZXQoKSwgc2NhblF1ZXJ5LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gcmVzdWx0cyA9IGFkb3B0Q0YoRERT
Y2FubmVyQ29weVJlc3VsdHNXaXRoT3B0aW9ucyhzY2FubmVyLmdldCgpLCBERFNjYW5uZXJDb3B5
UmVzdWx0c09wdGlvbnNOb092ZXJsYXApKTsKLQotICAgIC8vIEZpbmQgdGhlIEREUmVzdWx0UmVm
IHRoYXQgaW50ZXJzZWN0cyB0aGUgaGl0VGVzdFJlc3VsdCdzIFZpc2libGVQb3NpdGlvbi4KLSAg
ICBERFJlc3VsdFJlZiBtYWluUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBSZWZQdHI8UmFuZ2U+IG1h
aW5SZXN1bHRSYW5nZTsKLSAgICBDRkluZGV4IHJlc3VsdENvdW50ID0gQ0ZBcnJheUdldENvdW50
KHJlc3VsdHMuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHJlc3VsdENvdW50
OyBpKyspIHsKLSAgICAgICAgRERSZXN1bHRSZWYgcmVzdWx0ID0gKEREUmVzdWx0UmVmKUNGQXJy
YXlHZXRWYWx1ZUF0SW5kZXgocmVzdWx0cy5nZXQoKSwgaSk7Ci0gICAgICAgIENGUmFuZ2UgcmVz
dWx0UmFuZ2VJbkNvbnRleHQgPSBERFJlc3VsdEdldFJhbmdlKHJlc3VsdCk7Ci0gICAgICAgIGlm
IChoaXRMb2NhdGlvbiA+PSByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbiAmJiAoaGl0TG9j
YXRpb24gLSByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbikgPCByZXN1bHRSYW5nZUluQ29u
dGV4dC5sZW5ndGgpIHsKLSAgICAgICAgICAgIG1haW5SZXN1bHQgPSByZXN1bHQ7Ci0gICAgICAg
ICAgICBtYWluUmVzdWx0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGNvbnRleHRSYW5n
ZS5nZXQoKSwgcmVzdWx0UmFuZ2VJbkNvbnRleHQubG9jYXRpb24sIHJlc3VsdFJhbmdlSW5Db250
ZXh0Lmxlbmd0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmICghbWFpblJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5Q
dHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0ID0gYWRvcHROUyhbYWxsb2NEREFjdGlv
bkNvbnRleHRJbnN0YW5jZSgpIGluaXRdKTsKLSAgICBbYWN0aW9uQ29udGV4dCBzZXRBbGxSZXN1
bHRzOkBbIChpZCltYWluUmVzdWx0IF1dOwotICAgIFthY3Rpb25Db250ZXh0IHNldE1haW5SZXN1
bHQ6bWFpblJlc3VsdF07Ci0KLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICBtYWlu
UmVzdWx0UmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKLSAgICBkZXRlY3RlZERhdGFC
b3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbWFp
blJlc3VsdFJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOwotICAgIGZvciAoY29uc3QgYXV0
byYgcXVhZCA6IHF1YWRzKQotICAgICAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveC51bml0ZShm
cmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cocXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKSk7
Ci0gICAgCi0gICAgZGV0ZWN0ZWREYXRhUmFuZ2UgPSBtYWluUmVzdWx0UmFuZ2U7Ci0gICAgCi0g
ICAgcmV0dXJuIGFjdGlvbkNvbnRleHQ7Ci19Ci0KLVJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+
IERhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRl
c3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdC
b3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQotewotICAgIGlmICghRGF0YURl
dGVjdG9yc0xpYnJhcnkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBOb2RlKiBu
b2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5k
ZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uOwotICAgIFJlZlB0cjxSYW5nZT4gY29udGV4dFJh
bmdlOwotCi0gICAgaWYgKCFpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKm5vZGUpKSB7
Ci0gICAgICAgIHBvc2l0aW9uID0gcmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVzdFJl
c3VsdC5sb2NhbFBvaW50KCksIG51bGxwdHIpOwotICAgICAgICBpZiAocG9zaXRpb24uaXNOdWxs
KCkpCi0gICAgICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShu
b2RlKTsKLQotICAgICAgICBjb250ZXh0UmFuZ2UgPSByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRp
b25CeUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7Ci0gICAgICAgIGlmICghY29udGV4dFJhbmdl
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRnJh
bWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgICAgICBpZiAoIWZyYW1l
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgSW50UG9pbnQgZnJhbWVQ
b2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpOwotICAg
ICAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJh
bWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOwotICAgICAgICBpZiAocG9z
aXRpb24uaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBj
b250ZXh0UmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIExp
bmVHcmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7Ci0gICAgICAgIGlmICghY29udGV4dFJh
bmdlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRl
dGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKHBvc2l0aW9uLCBjb250ZXh0UmFuZ2UsIGRldGVj
dGVkRGF0YUJvdW5kaW5nQm94LCBkZXRlY3RlZERhdGFSYW5nZSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMTk0NTkxKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBA
QAogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkRPTUltcGxl
bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRGF0YURldGVj
dGlvbi5oIgogI2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5oIgogI2luY2x1ZGUgIkRpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LmgiCiAjaW5jbHVkZSAiRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmgiCkBA
IC0yMjU0LDYgKzIyNTUsMTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2hlY2tMb2FkQ29tcGxldGVG
b3JUaAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2NsaWVudC5kaXNw
YXRjaERpZEZpbmlzaExvYWQoKTsKICAgICAgICAgICAgICAgICBsb2FkaW5nRXZlbnQgPSBBWE9i
amVjdENhY2hlOjpBWExvYWRpbmdGaW5pc2hlZDsKKyAgICAgICAgICAgICAgICBpZiAobV9mcmFt
ZS5zZXR0aW5ncygpLmRhdGFEZXRlY3RvclR5cGVzKCkgIT0gRGF0YURldGVjdG9yVHlwZU5vbmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBkb2N1bWVudFJhbmdlID0gbWFr
ZVJhbmdlKGZpcnN0UG9zaXRpb25Jbk5vZGUobV9mcmFtZS5kb2N1bWVudCgpLT5kb2N1bWVudEVs
ZW1lbnQoKSksIGxhc3RQb3NpdGlvbkluTm9kZShtX2ZyYW1lLmRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpKSk7CisgICAgICAgICAgICAgICAgICAgIERhdGFEZXRlY3Rpb246OmRldGVjdENv
bnRlbnRJblJhbmdlKGRvY3VtZW50UmFuZ2UsIG1fZnJhbWUuc2V0dGluZ3MoKS5kYXRhRGV0ZWN0
b3JUeXBlcygpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIC8vIE5vdGlmeSBhY2Nlc3NpYmlsaXR5LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAko
cmV2aXNpb24gMTk0NTkxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIFNldHRpbmdzX2gKICNkZWZpbmUg
U2V0dGluZ3NfaAogCisjaW5jbHVkZSAiRGF0YURldGVjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRp
bmdCZWhhdmlvclR5cGVzLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlVSTC5o
IgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCShyZXZpc2lvbiAxOTQ1OTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNiArMjI3
LDcgQEAgYWdncmVzc2l2ZVRpbGVSZXRlbnRpb25FbmFibGVkIGluaXRpYWw9ZgogdGVtcG9yYXJ5
VGlsZUNvaG9ydFJldGVudGlvbkVuYWJsZWQgaW5pdGlhbD10cnVlCiAKIHVzZUltYWdlRG9jdW1l
bnRGb3JTdWJmcmFtZVBERiBpbml0aWFsPWZhbHNlCitkYXRhRGV0ZWN0b3JUeXBlcyB0eXBlPURh
dGFEZXRlY3RvclR5cGVzLCBpbml0aWFsPURhdGFEZXRlY3RvclR5cGVOb25lCiAKICMgQWxsb3cg
U291cmNlQnVmZmVycyB0byBzdG9yZSB1cCB0byAzMDRNQiBlYWNoLCBlbm91Z2ggZm9yIGFwcHJv
eGltYXRlbHkgZml2ZSBtaW51dGVzCiAjIG9mIDEwODBwIHZpZGVvIGFuZCBzdGVyZW8gYXVkaW8u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL0RhdGFEZXRlY3RvcnNTUEku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL0RhdGFEZXRl
Y3RvcnNTUEkuaAkocmV2aXNpb24gMTk0NTkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL21hYy9EYXRhRGV0ZWN0b3JzU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDExICsyNSwx
MiBAQAogCiAjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKIAog
I2ltcG9ydCA8V2ViQ29yZS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9Tb2Z0TGlua2luZy5oPgogCisjaWYgUExBVEZPUk0oTUFDKQorCiAjaWYgVVNFKEFQUExFX0lO
VEVSTkFMX1NESykKIAogLy8gQ2FuJ3QgaW5jbHVkZSBEREFjdGlvbi5oIGJlY2F1c2UgYXMgb2Yg
dGhpcyB3cml0aW5nIGl0IGlzIGEgcHJpdmF0ZSBoZWFkZXIgdGhhdCBpbmNsdWRlcyBhIG5vbi1w
cml2YXRlIGhlYWRlciB3aXRoIGFuICIiIGluY2x1ZGUuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biAxOTQ1OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyNSBAQAorMjAxNi0wMS0xMSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBEYXRhRGV0ZWN0b3JzIGluIFdLIChpT1Mp
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyOTg5
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIyODU1OTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQg
aW1wbGVtZW50aW5nIERhdGEgRGV0ZWN0b3JzIHN1cHBvcnQKKyAgICAgICAgaW4gV0syIG9uIGlP
Uy4gVGhlIHBhdGNoIGFkZHMgYSBuZXcgcHJvcGVydHkgdG8gdGhlIGNvbmZpZ3VyYXRpb24KKyAg
ICAgICAgb2JqZWN0IHRvIGluZGljYXRlIHRoZSB0eXBlIG9mIGRldGVjdGlvbiBkZXNpcmVkIGFu
ZCBwcm9wYWdhdGVzCisgICAgICAgIHRvIHRoZSBXZWJQcm9jZXNzLgorCisgICAgICAgICogU2hh
cmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGluaXRXaXRoRnJhbWU6
Y29uZmlndXJhdGlvbjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24ubW06CisgICAgICAgICgtW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gY29w
eVdpdGhab25lOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMpOgorCiAyMDE2LTAx
LTA0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBBbGxvdyB0byBzYXZlIGFuZCByZXN0b3JlIHNlc3Npb24KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaAkocmV2aXNp
b24gMTk0NTkxKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5p
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSw3IEBACiAgICAgbWFjcm8oSW5z
cGVjdG9yQXR0YWNobWVudFNpZGUsIGluc3BlY3RvckF0dGFjaG1lbnRTaWRlLCBVSW50MzIsIHVp
bnQzMl90LCAwKSBcCiAgICAgbWFjcm8oU3RvcmFnZUJsb2NraW5nUG9saWN5LCBzdG9yYWdlQmxv
Y2tpbmdQb2xpY3ksIFVJbnQzMiwgdWludDMyX3QsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpC
bG9ja1RoaXJkUGFydHlTdG9yYWdlKSBcCiAgICAgbWFjcm8oSmF2YVNjcmlwdFJ1bnRpbWVGbGFn
cywgamF2YVNjcmlwdFJ1bnRpbWVGbGFncywgVUludDMyLCB1aW50MzJfdCwgMCkgXAorICAgIG1h
Y3JvKERhdGFEZXRlY3RvclR5cGVzLCBkYXRhRGV0ZWN0b3JUeXBlcywgVUludDMyLCB1aW50MzJf
dCwgMCkgXAogICAgIFwKIAogI2RlZmluZSBGT1JfRUFDSF9XRUJLSVRfREVCVUdfQk9PTF9QUkVG
RVJFTkNFKG1hY3JvKSBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNpb24gMTk0NTkxKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2NSw2
ICszNjUsNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyCiAgICAg
cGFnZUNvbmZpZ3VyYXRpb24tPnByZWZlcmVuY2VWYWx1ZXMoKS5zZXQoV2ViS2l0OjpXZWJQcmVm
ZXJlbmNlc0tleTo6cmVxdWlyZXNVc2VyR2VzdHVyZUZvckF1ZGlvUGxheWJhY2tLZXkoKSwgV2Vi
S2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpWYWx1ZSghIVtfY29uZmlndXJhdGlvbiBfcmVxdWly
ZXNVc2VyQWN0aW9uRm9yQXVkaW9QbGF5YmFja10pKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+
cHJlZmVyZW5jZVZhbHVlcygpLnNldChXZWJLaXQ6OldlYlByZWZlcmVuY2VzS2V5OjppbnZpc2li
bGVBdXRvcGxheU5vdFBlcm1pdHRlZEtleSgpLCBXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmU6
OlZhbHVlKCEhW19jb25maWd1cmF0aW9uIF9pbnZpc2libGVBdXRvcGxheU5vdFBlcm1pdHRlZF0p
KTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5jZVZhbHVlcygpLnNldChXZWJLaXQ6
OldlYlByZWZlcmVuY2VzS2V5OjptZWRpYURhdGFMb2Fkc0F1dG9tYXRpY2FsbHlLZXkoKSwgV2Vi
S2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpWYWx1ZSghIVtfY29uZmlndXJhdGlvbiBfbWVkaWFE
YXRhTG9hZHNBdXRvbWF0aWNhbGx5XSkpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5wcmVmZXJl
bmNlVmFsdWVzKCkuc2V0KFdlYktpdDo6V2ViUHJlZmVyZW5jZXNLZXk6OmRhdGFEZXRlY3RvclR5
cGVzS2V5KCksIFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZTo6VmFsdWUoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KFtfY29uZmlndXJhdGlvbiBkYXRhRGV0ZWN0b3JUeXBlc10pKSk7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgIHBhZ2VDb25maWd1cmF0
aW9uLT5wcmVmZXJlbmNlVmFsdWVzKCkuc2V0KFdlYktpdDo6V2ViUHJlZmVyZW5jZXNLZXk6OmFs
bG93c0FpclBsYXlGb3JNZWRpYVBsYXliYWNrS2V5KCksIFdlYktpdDo6V2ViUHJlZmVyZW5jZXNT
dG9yZTo6VmFsdWUoISFbX2NvbmZpZ3VyYXRpb24gYWxsb3dzQWlyUGxheUZvck1lZGlhUGxheWJh
Y2tdKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaAkocmV2aXNpb24gMTk0NTkxKQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDE2IEBAIHR5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIFdLU2VsZWN0aW9uR3IKICAgICBXS1NlbGVjdGlvbkdyYW51bGFyaXR5RHluYW1pYywK
ICAgICBXS1NlbGVjdGlvbkdyYW51bGFyaXR5Q2hhcmFjdGVyLAogfSBXS19FTlVNX0FWQUlMQUJM
RV9JT1MoOF8wKTsKKwordHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIFdLRGF0YURldGVj
dG9yVHlwZXMpIHsKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVOb25lID0gMCwKKyAgICBXS0RhdGFE
ZXRlY3RvclR5cGVQaG9uZU51bWJlciA9IDEgPDwgMCwKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVM
aW5rID0gMSA8PCAxLAorICAgIFdLRGF0YURldGVjdG9yVHlwZUFkZHJlc3MgPSAxIDw8IDIsCisg
ICAgV0tEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCA9IDEgPDwgMywKKyAgICBXS0RhdGFE
ZXRlY3RvclR5cGVBbGwgPSAweEZGRkYKK30gV0tfRU5VTV9BVkFJTEFCTEVfSU9TKDlfMyk7CisK
ICNlbmRpZgogCiAvKiEgQSBXS1dlYlZpZXdDb25maWd1cmF0aW9uIG9iamVjdCBpcyBhIGNvbGxl
Y3Rpb24gb2YgcHJvcGVydGllcyB3aXRoCkBAIC0xMTksNiArMTI5LDExIEBAIFdLX0NMQVNTX0FW
QUlMQUJMRSgxMF8xMCwgOF8wKQogICovCiBAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBhbGxv
d3NQaWN0dXJlSW5QaWN0dXJlTWVkaWFQbGF5YmFjayBXS19BVkFJTEFCTEUoTkEsIDlfMCk7CiAK
Ky8qISBAYWJzdHJhY3QgQW4gZW51bSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIGRhdGEg
ZGV0ZWN0aW9uIGRlc2lyZWQuCisgQGRpc2N1c3Npb24gVGhlIGRlZmF1bHQgdmFsdWUgaXMgV0tE
YXRhRGV0ZWN0b3JUeXBlTm9uZS4KKyAqLworQHByb3BlcnR5IChub25hdG9taWMpIFdLRGF0YURl
dGVjdG9yVHlwZXMgZGF0YURldGVjdG9yVHlwZXM7CisKICNlbmRpZgogCiBAZW5kCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24u
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdDb25maWd1cmF0aW9uLm1tCShyZXZpc2lvbiAxOTQ1OTEpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24ubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE5Miw2ICsxOTIsNyBAQCAtIChpZCljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpv
bmUKICAgICBjb25maWd1cmF0aW9uLT5fcmVxdWlyZXNVc2VyQWN0aW9uRm9yTWVkaWFQbGF5YmFj
ayA9IHNlbGYtPl9yZXF1aXJlc1VzZXJBY3Rpb25Gb3JNZWRpYVBsYXliYWNrOwogICAgIGNvbmZp
Z3VyYXRpb24tPl9yZXF1aXJlc1VzZXJBY3Rpb25Gb3JBdWRpb1BsYXliYWNrID0gc2VsZi0+X3Jl
cXVpcmVzVXNlckFjdGlvbkZvckF1ZGlvUGxheWJhY2s7CiAgICAgY29uZmlndXJhdGlvbi0+X3Nl
bGVjdGlvbkdyYW51bGFyaXR5ID0gc2VsZi0+X3NlbGVjdGlvbkdyYW51bGFyaXR5OworICAgIGNv
bmZpZ3VyYXRpb24tPl9kYXRhRGV0ZWN0b3JUeXBlcyA9IHNlbGYtPl9kYXRhRGV0ZWN0b3JUeXBl
czsKICNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBjb25maWd1cmF0aW9uLT5fc2hvd3NV
UkxzSW5Ub29sVGlwcyA9IHNlbGYtPl9zaG93c1VSTHNJblRvb2xUaXBzOwpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTk0
NTkxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTMyLDYgKzI5MzIsNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVBy
ZWZlcmVuY2VzKGNvbnN0IFdlCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgc2V0dGluZ3Muc2V0
VXNlSW1hZ2VEb2N1bWVudEZvclN1YmZyYW1lUERGKHRydWUpOworICAgIHNldHRpbmdzLnNldERh
dGFEZXRlY3RvclR5cGVzKHN0YXRpY19jYXN0PERhdGFEZXRlY3RvclR5cGVzPihzdG9yZS5nZXRV
SW50MzJWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6ZGF0YURldGVjdG9yVHlwZXNLZXko
KSkpKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268732</attachid>
            <date>2016-01-11 17:05:37 -0800</date>
            <delta_ts>2016-01-12 09:19:06 -0800</delta_ts>
            <desc>Patch2</desc>
            <filename>ddwk2-part1.txt</filename>
            <type>text/plain</type>
            <size>37621</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NDg2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAxLTExICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlz
IHRoZSBmaXJzdCBzdGVwIHRvd2FyZCBpbXBsZW1lbnRpbmcgRGF0YSBEZXRlY3RvcnMgc3VwcG9y
dAorICAgICAgICBpbiBXSzIgb24gaU9TLiBUaGUgcGF0Y2ggYWRkcyBhIG5ldyBtZW1lYmVyIHRv
IHRoZSBTZXR0aW5ncyBvYmplY3QKKyAgICAgICAgdG8gcmV0cmlldmUgdGhlIHR5cGUgb2YgZGV0
ZWN0aW9uIGRlc2lyZWQuIFRoZSBEYXRhRGV0ZWN0aW9uIGZpbGVzCisgICAgICAgIGhhdmUgYmVl
biBtb3ZlZCB1bmRlciBjb2NvYSwgc2luY2UgdGhleSBhcmUgbm8gbG9uZ2VyIE9TWCBzcGVjaWZp
Yy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29h
L0RhdGFEZXRlY3Rpb24uaDogQ29waWVkIGZyb20gV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0
ZWN0aW9uLmguCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOiBDb3Bp
ZWQgZnJvbSBXZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24ubW0uCisgICAgICAgIChX
ZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6CisgICAgICAg
ICogZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5oOiBSZW1vdmVkLgorICAgICAgICAqIGVkaXRp
bmcvbWFjL0RhdGFEZXRlY3Rpb24ubW06IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21w
bGV0ZUZvclRoaXNGcmFtZSk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAq
IHBhZ2UvU2V0dGluZ3MuaW46CisgICAgICAgICogcGxhdGZvcm0vc3BpL21hYy9EYXRhRGV0ZWN0
b3JzU1BJLmg6CisKIDIwMTYtMDEtMTEgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxOTQ4NjYuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxOTQ1OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExMjksOCArMTEyOSw2IEBACiAJCTJE
NTAwMkZDMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcg
LyogUGF0aFV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTJENTAzNjY4MUJDREREQzQwMEUyMEJCMyAvKiBHZXN0dXJlRXZlbnRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENTAzNjY3
MUJDREREQzQwMEUyMEJCMyAvKiBHZXN0dXJlRXZlbnRzLmNwcCAqLzsgfTsKIAkJMkQ1NjQ2QjAx
QjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENTY0NkFGMUI4Rjg0OTMwMDNDNDk5NCAv
KiBEaWN0aW9uYXJ5UG9wdXBJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMkQ1OEQ4NTUxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENThE
ODUzMUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMkQ1OEQ4NTYxQTE1RjY1RjAwQTVGNzI2
IC8qIERhdGFEZXRlY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRDU4RDg1NDFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5tbSAq
LzsgfTsKIAkJMkQ1OUYxQkYxQTAwNDRDNjAwMUYzRDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENTlGMUJFMUEw
MDQ0QzYwMDFGM0QyOSAvKiBEYXRhRGV0ZWN0b3JzU1BJLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ1QTU5MkYxNTI1MjUyMzAwMzZFRTUxIC8q
IEltYWdlT3JpZW50YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTg3NDhENzQxMkNDM0Y4OTAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24u
Y3BwICovOyB9OwogCQkyRDVBNTkzMTE1MjUyNUQwMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NDhE
NjYxMkNDMzc2MzAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTg2Niw2ICs1ODY0LDggQEAKIAkJ
QzUwRDBFODMwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MEQwRTgxMEZGNDI3MjkwMEFD
MjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzUxMzdDRjIxMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3Ry
aW5nTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNTEzN0NGMDExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmNwcCAqLzsgfTsK
IAkJQzUxMzdDRjMxMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMzdDRjExMUE1ODM3ODAw
NEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5oICovOyB9OworCQlDNTIyN0RGMTFDM0M2REYxMDBG
NUVENTQgLyogRGF0YURldGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzUyMjdERUYxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNTIy
N0RGMjFDM0M2REY5MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MjI3REYwMUMzQzZERDcwMEY1RUQ1NCAv
KiBEYXRhRGV0ZWN0aW9uLm1tICovOyB9OwogCQlDNTI3OEIwQzE3RjIxMkVBMDAzQTI5OTggLyog
UGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzUyNzhCMEIxN0YyMTJFQTAwM0EyOTk4IC8qIFBsYXRmb3JtUGFzdGVi
b2FyZElPUy5tbSAqLzsgfTsKIAkJQzU0NDI3NEIxMUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmlu
Z0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1
NDQyNzQ5MTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzU1NjEwRjExMUE3MDRFQjAwQjgy
RDI3IC8qIERPTVN0cmluZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzU1NjEwRjAxMUE3MDRFQjAwQjgyRDI3IC8qIERPTVN0cmluZ0xpc3Qu
Y3BwICovOyB9OwpAQCAtODQ4OCw4ICs4NDg4LDYgQEAKIAkJMkQ1MDAyRkExQjU2RDc5OTAwMjBB
QUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGF0aFV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDUwMzY2NzFC
Q0REREM0MDBFMjBCQjMgLyogR2VzdHVyZUV2ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBHZXN0dXJlRXZlbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkQ1NjQ2QUYxQjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGlvbmFyeVBvcHVwSW5mby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDU4RDg1MzFBMTVGNjVGMDBBNUY3MjYg
LyogRGF0YURldGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRh
RGV0ZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJENThEODU0MUExNUY2
NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gRGF0YURldGVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkQ1OUYxQkUxQTAwNDRDNjAwMUYzRDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YURldGVjdG9yc1NQSS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDVCQzQyNTE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJp
dHlQb2xpY3lWaW9sYXRpb25FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJENUJDNDI2MTZGODgyQkUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlv
bkV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTZWN1cml0eVBvbGljeVZpb2xhdGlv
bkV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNjc5LDYgKzEzNjc3
LDggQEAKIAkJQzUwRDBFODEwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZU5hbWVzcGFjZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTEzN0NGMDExQTU4Mzc4MDA0QURCOTkgLyogSlNE
T01TdHJpbmdMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
RE9NU3RyaW5nTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MTM3Q0Yx
MTFBNTgzNzgwMDRBREI5OSAvKiBKU0RPTVN0cmluZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNET01TdHJpbmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUM1MjI3REVGMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFEZXRlY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzUyMjdERjAxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rp
b24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEYXRhRGV0ZWN0
aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTI3OEIwQjE3RjIxMkVBMDAz
QTI5OTggLyogUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDNTQ0Mjc0OTExQTU3RTdBMDA2M0E3NDkgLyogRE9NU3RyaW5nTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TdHJpbmdMaXN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NDQyNzRBMTFBNTdFN0EwMDYzQTc0OSAvKiBE
T01TdHJpbmdMaXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01TdHJpbmdMaXN0Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3ODMyLDYgKzE3ODMyLDggQEAKIAkJ
N0MzRTUxMDcxOERGOEYxMjAwQzExMkY3IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDNTIyN0RFRjFDM0M2REQ3MDBGNUVENTQgLyogRGF0
YURldGVjdGlvbi5oICovLAorCQkJCUM1MjI3REYwMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0
ZWN0aW9uLm1tICovLAogCQkJCTlCNTVFRUVBMUIzRjNGRUYwMDUzNDJCQyAvKiBFZGl0b3JDb2Nv
YS5oICovLAogCQkJCTlCNTVFRUU4MUIzRTg4OTgwMDUzNDJCQyAvKiBFZGl0b3JDb2NvYS5tbSAq
LywKIAkJCQk3QzNFNTEwODE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5oICovLApA
QCAtMjMxMzEsOCArMjMxMzMsNiBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQ0U3QjJEQUYxNTg2
QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oICovLAogCQkJCUNF
N0IyREIwMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0g
Ki8sCi0JCQkJMkQ1OEQ4NTMxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24uaCAqLywK
LQkJCQkyRDU4RDg1NDFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5tbSAqLywKIAkJ
CQk5MzdGRjNENDFBMTAxMkQ2MDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5oICovLAogCQkJ
CTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJ
CUVENTAxREM1MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gKi8sCkBAIC0yNTAwMiw3
ICsyNTAwMiw2IEBACiAJCQkJOTdCQzZBMzAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhy
ZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkEzMjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0
YWJhc2VUcmFja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRTIzNDgwRDE4QTk4NzE0MDBFNEI2
RTggLyogRGF0YUN1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkQ1OEQ4NTUxQTE1RjY1RjAwQTVG
NzI2IC8qIERhdGFEZXRlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUUyQjRFMUFGRjA2
Q0EwMDk3NkY5RiAvKiBEYXRhRGV0ZWN0b3JzQ29yZVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MkQ1OUYxQkYxQTAwNDRDNjAwMUYzRDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMjI3NDZGMEU4MzY2NDUwMEU3Rjk3NSAvKiBEYXRhUmVmLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI1OTc1LDYgKzI1OTc0LDcgQEAKIAkJCQlCMjc1MzU3NTBCMDUzODE0MDAyQ0U2
NEYgLyogSW50U2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NzYwQjA1MzgxNDAwMkNF
NjRGIC8qIEludFNpemVIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTEyNTI0RDFBMUE3N0RF
MDA4NjQ0ODAgLyogSU9QTUxpYlNQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzUyMjdERjExQzND
NkRGMTAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0REVG
NjQzMUE2RkY5MjcwMEQ0NUVFQyAvKiBJT1JldHVyblNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MkQwQjRBQUIxOERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUMyMUU1N0QxODNFRDFGRjAwMUMyODlEIC8qIElPU3VyZmFjZVBvb2wuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjg2NzQsNiArMjg2NzQsNyBAQAogCQkJCTg1MDMxQjNGMEE0NEVGQzcwMEY5OTJF
MCAvKiBDbGlwYm9hcmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1ODAzNzE2MTFBNjZG
MDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFQTc2MzUx
NDYwQjcxQTAwOEIzMUYxIC8qIENsb2NrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUM1MjI3REYy
MUMzQzZERjkwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Q0RFQTc2MzQxNDYwQjU2RjAwOEIzMUYxIC8qIENsb2NrR2VuZXJpYy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5QkQ4QTk1QTE4QkVGQzc2MDA5ODdFOUEgLyogQ29sbGVjdGlvbkluZGV4Q2FjaGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjYwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9y
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg4NTIsNyArMjg4NTMsNiBAQAogCQkJCTk3QkM2QTJG
MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5N0JDNkEzMTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJFMjM0ODBDMThBOTg3MEIwMEU0QjZFOCAvKiBEYXRhQ3VlLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTJENThEODU2MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9u
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2NDY0MUQxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFz
ZXRET01TdHJpbmdNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4NDk0MUIwQjVGRTUwNzAw
MUUyMzdBIC8qIERhdGFUcmFuc2Zlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFGRjA4
MjQ1RTU5MDAxRTlBQkMgLyogRGF0YVRyYW5zZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAkocmV2aXNp
b24gMTk0NTkxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9u
Lmg6MTk0NTkxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RGF0YURldGVjdGlvbl9oCisjZGVmaW5lIERhdGFEZXRlY3Rpb25faAorCisjaWYgUExBVEZPUk0o
TUFDKQorCisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CisKK09CSkNfQ0xBU1MgRERBY3Rpb25Db250ZXh0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEhpdFRlc3RSZXN1bHQ7CitjbGFzcyBSYW5nZTsKKwor
Y2xhc3MgRGF0YURldGVjdGlvbiB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0
KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94
LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSk7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKyNlbmRpZiAvLyBEYXRhRGV0
ZWN0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2lmbmRlZiBE
YXRhRGV0ZWN0aW9uX2gKICNkZWZpbmUgRGF0YURldGVjdGlvbl9oCiAKLSNpZiBQTEFURk9STShN
QUMpCi0KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
IApAQCAtMzksMTMgKzM3LDI1IEBAIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEhpdFRlc3RSZXN1
bHQ7CiBjbGFzcyBSYW5nZTsKIAorZW51bSBEYXRhRGV0ZWN0b3JUeXBlcyB7CisgICAgRGF0YURl
dGVjdG9yVHlwZU5vbmUgPSAwLAorICAgIERhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlciA9IDEg
PDwgMCwKKyAgICBEYXRhRGV0ZWN0b3JUeXBlTGluayA9IDEgPDwgMSwKKyAgICBEYXRhRGV0ZWN0
b3JUeXBlQWRkcmVzcyA9IDEgPDwgMiwKKyAgICBEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVu
dCA9IDEgPDwgMywKKyAgICBEYXRhRGV0ZWN0b3JUeXBlQWxsID0gMHhGRkZGCit9OworCiBjbGFz
cyBEYXRhRGV0ZWN0aW9uIHsKIHB1YmxpYzoKKyNpZiBQTEFURk9STShNQUMpCiAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1Bcm91
bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBGbG9hdFJlY3QmIGRldGVjdGVk
RGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSk7CisjZW5k
aWYKKyNpZiBQTEFURk9STShJT1MpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgZGV0
ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGV0ZWN0
b3JUeXBlcyk7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKLQogI2VuZGlmIC8vIERhdGFEZXRlY3Rpb25faApJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24g
MTk0NTkxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLm1t
OjE5NDU5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJE
YXRhRGV0ZWN0aW9uLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIkRhdGFEZXRl
Y3RvcnNTUEkuaCIKKyNpbXBvcnQgIkZyYW1lVmlldy5oIgorI2ltcG9ydCAiSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuaCIKKyNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbXBvcnQgIk5v
ZGUuaCIKKyNpbXBvcnQgIlJhbmdlLmgiCisjaW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKKyNpbXBv
cnQgIlRleHRJdGVyYXRvci5oIgorI2ltcG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgiCisjaW1wb3J0
ICJWaXNpYmxlVW5pdHMuaCIKKyNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1B
dFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiwgUmVmUHRyPFJhbmdl
PiBjb250ZXh0UmFuZ2UsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0
cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQoreworICAgIFN0cmluZyBmdWxsUGxhaW5UZXh0
U3RyaW5nID0gcGxhaW5UZXh0KGNvbnRleHRSYW5nZS5nZXQoKSk7CisgICAgaW50IGhpdExvY2F0
aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoY29udGV4dFJhbmdlLT5z
dGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7CisKKyAgICBSZXRhaW5QdHI8RERTY2Fu
bmVyUmVmPiBzY2FubmVyID0gYWRvcHRDRihERFNjYW5uZXJDcmVhdGUoRERTY2FubmVyVHlwZVN0
YW5kYXJkLCAwLCBudWxscHRyKSk7CisgICAgUmV0YWluUHRyPEREU2NhblF1ZXJ5UmVmPiBzY2Fu
UXVlcnkgPSBhZG9wdENGKEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZyhrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBmdWxsUGxhaW5UZXh0U3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIENGUmFu
Z2VNYWtlKDAsIGZ1bGxQbGFpblRleHRTdHJpbmcubGVuZ3RoKCkpKSk7CisKKyAgICBpZiAoIURE
U2Nhbm5lclNjYW5RdWVyeShzY2FubmVyLmdldCgpLCBzY2FuUXVlcnkuZ2V0KCkpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiByZXN1bHRzID0g
YWRvcHRDRihERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCksIERE
U2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc05vT3ZlcmxhcCkpOworCisgICAgLy8gRmluZCB0aGUg
RERSZXN1bHRSZWYgdGhhdCBpbnRlcnNlY3RzIHRoZSBoaXRUZXN0UmVzdWx0J3MgVmlzaWJsZVBv
c2l0aW9uLgorICAgIEREUmVzdWx0UmVmIG1haW5SZXN1bHQgPSBudWxscHRyOworICAgIFJlZlB0
cjxSYW5nZT4gbWFpblJlc3VsdFJhbmdlOworICAgIENGSW5kZXggcmVzdWx0Q291bnQgPSBDRkFy
cmF5R2V0Q291bnQocmVzdWx0cy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwg
cmVzdWx0Q291bnQ7IGkrKykgeworICAgICAgICBERFJlc3VsdFJlZiByZXN1bHQgPSAoRERSZXN1
bHRSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChyZXN1bHRzLmdldCgpLCBpKTsKKyAgICAgICAg
Q0ZSYW5nZSByZXN1bHRSYW5nZUluQ29udGV4dCA9IEREUmVzdWx0R2V0UmFuZ2UocmVzdWx0KTsK
KyAgICAgICAgaWYgKGhpdExvY2F0aW9uID49IHJlc3VsdFJhbmdlSW5Db250ZXh0LmxvY2F0aW9u
ICYmIChoaXRMb2NhdGlvbiAtIHJlc3VsdFJhbmdlSW5Db250ZXh0LmxvY2F0aW9uKSA8IHJlc3Vs
dFJhbmdlSW5Db250ZXh0Lmxlbmd0aCkgeworICAgICAgICAgICAgbWFpblJlc3VsdCA9IHJlc3Vs
dDsKKyAgICAgICAgICAgIG1haW5SZXN1bHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2Uo
Y29udGV4dFJhbmdlLmdldCgpLCByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbiwgcmVzdWx0
UmFuZ2VJbkNvbnRleHQubGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKCFtYWluUmVzdWx0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHQgPSBhZG9wdE5TKFth
bGxvY0REQWN0aW9uQ29udGV4dEluc3RhbmNlKCkgaW5pdF0pOworICAgIFthY3Rpb25Db250ZXh0
IHNldEFsbFJlc3VsdHM6QFsgKGlkKW1haW5SZXN1bHQgXV07CisgICAgW2FjdGlvbkNvbnRleHQg
c2V0TWFpblJlc3VsdDptYWluUmVzdWx0XTsKKworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRz
OworICAgIG1haW5SZXN1bHRSYW5nZS0+YWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOworICAgIGRl
dGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBtYWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgZm9y
IChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCisgICAgICAgIGRldGVjdGVkRGF0YUJvdW5kaW5n
Qm94LnVuaXRlKGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhxdWFkLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCkpKTsKKyAgICAKKyAgICBkZXRlY3RlZERhdGFSYW5nZSA9IG1haW5SZXN1bHRSYW5n
ZTsKKyAgICAKKyAgICByZXR1cm4gYWN0aW9uQ29udGV4dDsKK30KKworUmV0YWluUHRyPEREQWN0
aW9uQ29udGV4dD4gRGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQo
Y29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwgRmxvYXRSZWN0JiBkZXRlY3RlZERh
dGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCit7CisgICAg
aWYgKCFEYXRhRGV0ZWN0b3JzTGlicmFyeSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byByZW5kZXJlciA9
IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb247CisgICAgUmVmUHRyPFJhbmdl
PiBjb250ZXh0UmFuZ2U7CisKKyAgICBpZiAoIWlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
Pigqbm9kZSkpIHsKKyAgICAgICAgcG9zaXRpb24gPSByZW5kZXJlci0+cG9zaXRpb25Gb3JQb2lu
dChoaXRUZXN0UmVzdWx0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7CisgICAgICAgIGlmIChwb3Np
dGlvbi5pc051bGwoKSkKKyAgICAgICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JC
ZWZvcmVOb2RlKG5vZGUpOworCisgICAgICAgIGNvbnRleHRSYW5nZSA9IHJhbmdlRXhwYW5kZWRB
cm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKKyAgICAgICAgaWYgKCFj
b250ZXh0UmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgICAg
IGlmICghZnJhbWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBJbnRQ
b2ludCBmcmFtZVBvaW50ID0gaGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZy
YW1lKCk7CisgICAgICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2ludCkpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9z
aXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7CisgICAg
ICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIGNvbnRleHRSYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShw
b3NpdGlvbiwgTGluZUdyYW51bGFyaXR5LCBEaXJlY3Rpb25Gb3J3YXJkKTsKKyAgICAgICAgaWYg
KCFjb250ZXh0UmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICByZXR1cm4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UocG9zaXRpb24sIGNvbnRleHRS
YW5nZSwgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIGRldGVjdGVkRGF0YVJhbmdlKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2lu
ZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNp
bXBvcnQgIkRhdGFEZXRlY3Rpb24uaCIKIAotI2lmIFBMQVRGT1JNKE1BQykKLQogI2ltcG9ydCAi
RGF0YURldGVjdG9yc1NQSS5oIgogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgpAQCAtNDIsNiArNDAsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShNQUMpCisKIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rp
b25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24g
cG9zaXRpb24sIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlLCBGbG9hdFJlY3QmIGRldGVjdGVk
RGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKIHsKICAg
ICBTdHJpbmcgZnVsbFBsYWluVGV4dFN0cmluZyA9IHBsYWluVGV4dChjb250ZXh0UmFuZ2UuZ2V0
KCkpOwpAQCAtMTMxLDcgKzEzMSwxMSBAQCBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBEYXRh
RGV0ZWN0aW9uCiAKICAgICByZXR1cm4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UocG9z
aXRpb24sIGNvbnRleHRSYW5nZSwgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIGRldGVjdGVkRGF0
YVJhbmdlKTsKIH0KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKKyNpZiBQTEFURk9STShJT1Mp
Cit2b2lkIERhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4m
LCBEYXRhRGV0ZWN0b3JUeXBlcykKK3sKK30KKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYWMvRGF0YURldGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFjL0RhdGFEZXRlY3Rpb24uaAkocmV2aXNpb24gMTk0NTkxKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERhdGFEZXRlY3Rpb25faAotI2RlZmluZSBEYXRh
RGV0ZWN0aW9uX2gKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotI2ltcG9ydCA8d3RmL1JlZlB0ci5o
PgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotCi1PQkpDX0NMQVNTIEREQWN0aW9uQ29udGV4
dDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBIaXRU
ZXN0UmVzdWx0OwotY2xhc3MgUmFuZ2U7Ci0KLWNsYXNzIERhdGFEZXRlY3Rpb24gewotcHVibGlj
OgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBk
ZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiwgRmxvYXRS
ZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRh
UmFuZ2UpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQotCi0jZW5kaWYgLy8gRGF0YURldGVjdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDE5NDU5MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEsMTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRGF0YURldGVjdGlvbi5oIgot
Ci0jaWYgUExBVEZPUk0oTUFDKQotCi0jaW1wb3J0ICJEYXRhRGV0ZWN0b3JzU1BJLmgiCi0jaW1w
b3J0ICJGcmFtZVZpZXcuaCIKLSNpbXBvcnQgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Lmgi
Ci0jaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCi0jaW1wb3J0ICJOb2RlLmgiCi0jaW1wb3J0ICJS
YW5nZS5oIgotI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCi0jaW1wb3J0ICJUZXh0SXRlcmF0b3Iu
aCIKLSNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgotI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgi
Ci0jaW1wb3J0ICJodG1sZWRpdGluZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRp
YyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5n
ZShWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24sIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlLCBG
bG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3Rl
ZERhdGFSYW5nZSkKLXsKLSAgICBTdHJpbmcgZnVsbFBsYWluVGV4dFN0cmluZyA9IHBsYWluVGV4
dChjb250ZXh0UmFuZ2UuZ2V0KCkpOwotICAgIGludCBoaXRMb2NhdGlvbiA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGNvbnRleHRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBw
b3NpdGlvbikuZ2V0KCkpOwotCi0gICAgUmV0YWluUHRyPEREU2Nhbm5lclJlZj4gc2Nhbm5lciA9
IGFkb3B0Q0YoRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwgMCwgbnVsbHB0
cikpOwotICAgIFJldGFpblB0cjxERFNjYW5RdWVyeVJlZj4gc2NhblF1ZXJ5ID0gYWRvcHRDRihE
RFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnVsbFBsYWlu
VGV4dFN0cmluZy5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBmdWxsUGxh
aW5UZXh0U3RyaW5nLmxlbmd0aCgpKSkpOwotCi0gICAgaWYgKCFERFNjYW5uZXJTY2FuUXVlcnko
c2Nhbm5lci5nZXQoKSwgc2NhblF1ZXJ5LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gcmVzdWx0cyA9IGFkb3B0Q0YoRERTY2FubmVy
Q29weVJlc3VsdHNXaXRoT3B0aW9ucyhzY2FubmVyLmdldCgpLCBERFNjYW5uZXJDb3B5UmVzdWx0
c09wdGlvbnNOb092ZXJsYXApKTsKLQotICAgIC8vIEZpbmQgdGhlIEREUmVzdWx0UmVmIHRoYXQg
aW50ZXJzZWN0cyB0aGUgaGl0VGVzdFJlc3VsdCdzIFZpc2libGVQb3NpdGlvbi4KLSAgICBERFJl
c3VsdFJlZiBtYWluUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBSZWZQdHI8UmFuZ2U+IG1haW5SZXN1
bHRSYW5nZTsKLSAgICBDRkluZGV4IHJlc3VsdENvdW50ID0gQ0ZBcnJheUdldENvdW50KHJlc3Vs
dHMuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHJlc3VsdENvdW50OyBpKysp
IHsKLSAgICAgICAgRERSZXN1bHRSZWYgcmVzdWx0ID0gKEREUmVzdWx0UmVmKUNGQXJyYXlHZXRW
YWx1ZUF0SW5kZXgocmVzdWx0cy5nZXQoKSwgaSk7Ci0gICAgICAgIENGUmFuZ2UgcmVzdWx0UmFu
Z2VJbkNvbnRleHQgPSBERFJlc3VsdEdldFJhbmdlKHJlc3VsdCk7Ci0gICAgICAgIGlmIChoaXRM
b2NhdGlvbiA+PSByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbiAmJiAoaGl0TG9jYXRpb24g
LSByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbikgPCByZXN1bHRSYW5nZUluQ29udGV4dC5s
ZW5ndGgpIHsKLSAgICAgICAgICAgIG1haW5SZXN1bHQgPSByZXN1bHQ7Ci0gICAgICAgICAgICBt
YWluUmVzdWx0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGNvbnRleHRSYW5nZS5nZXQo
KSwgcmVzdWx0UmFuZ2VJbkNvbnRleHQubG9jYXRpb24sIHJlc3VsdFJhbmdlSW5Db250ZXh0Lmxl
bmd0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
bWFpblJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8RERB
Y3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0ID0gYWRvcHROUyhbYWxsb2NEREFjdGlvbkNvbnRl
eHRJbnN0YW5jZSgpIGluaXRdKTsKLSAgICBbYWN0aW9uQ29udGV4dCBzZXRBbGxSZXN1bHRzOkBb
IChpZCltYWluUmVzdWx0IF1dOwotICAgIFthY3Rpb25Db250ZXh0IHNldE1haW5SZXN1bHQ6bWFp
blJlc3VsdF07Ci0KLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICBtYWluUmVzdWx0
UmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKLSAgICBkZXRlY3RlZERhdGFCb3VuZGlu
Z0JveCA9IEZsb2F0UmVjdCgpOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbWFpblJlc3Vs
dFJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOwotICAgIGZvciAoY29uc3QgYXV0byYgcXVh
ZCA6IHF1YWRzKQotICAgICAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveC51bml0ZShmcmFtZVZp
ZXctPmNvbnRlbnRzVG9XaW5kb3cocXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKSk7Ci0gICAg
Ci0gICAgZGV0ZWN0ZWREYXRhUmFuZ2UgPSBtYWluUmVzdWx0UmFuZ2U7Ci0gICAgCi0gICAgcmV0
dXJuIGFjdGlvbkNvbnRleHQ7Ci19Ci0KLVJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IERhdGFE
ZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1
bHQmIGhpdFRlc3RSZXN1bHQsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIFJl
ZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQotewotICAgIGlmICghRGF0YURldGVjdG9y
c0xpYnJhcnkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBOb2RlKiBub2RlID0g
aGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigp
OwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmlz
aWJsZVBvc2l0aW9uIHBvc2l0aW9uOwotICAgIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlOwot
Ci0gICAgaWYgKCFpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKm5vZGUpKSB7Ci0gICAg
ICAgIHBvc2l0aW9uID0gcmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVzdFJlc3VsdC5s
b2NhbFBvaW50KCksIG51bGxwdHIpOwotICAgICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCi0g
ICAgICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsK
LQotICAgICAgICBjb250ZXh0UmFuZ2UgPSByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNo
YXJhY3RlcnMocG9zaXRpb24sIDI1MCk7Ci0gICAgICAgIGlmICghY29udGV4dFJhbmdlKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRnJhbWUqIGZy
YW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgICAgICBpZiAoIWZyYW1lKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgSW50UG9pbnQgZnJhbWVQb2ludCA9
IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpOwotICAgICAgICBp
ZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUtPnZp
c2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOwotICAgICAgICBpZiAocG9zaXRpb24u
aXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBjb250ZXh0
UmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIExpbmVHcmFu
dWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7Ci0gICAgICAgIGlmICghY29udGV4dFJhbmdlKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRldGVjdEl0
ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKHBvc2l0aW9uLCBjb250ZXh0UmFuZ2UsIGRldGVjdGVkRGF0
YUJvdW5kaW5nQm94LCBkZXRlY3RlZERhdGFSYW5nZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMTk0NTkxKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2lu
Y2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0
aW9uLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRGF0YURldGVjdGlvbi5o
IgogI2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5oIgogI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dn
aW5nQ2xpZW50LmgiCiAjaW5jbHVkZSAiRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmgiCkBAIC0yMjU0
LDYgKzIyNTUsMTIgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2hlY2tMb2FkQ29tcGxldGVGb3JUaAog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2NsaWVudC5kaXNwYXRjaERp
ZEZpbmlzaExvYWQoKTsKICAgICAgICAgICAgICAgICBsb2FkaW5nRXZlbnQgPSBBWE9iamVjdENh
Y2hlOjpBWExvYWRpbmdGaW5pc2hlZDsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICAg
ICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5kYXRhRGV0ZWN0b3JUeXBlcygpICE9IERhdGFEZXRl
Y3RvclR5cGVOb25lKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gZG9jdW1l
bnRSYW5nZSA9IG1ha2VSYW5nZShmaXJzdFBvc2l0aW9uSW5Ob2RlKG1fZnJhbWUuZG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCkpLCBsYXN0UG9zaXRpb25Jbk5vZGUobV9mcmFtZS5kb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKSkpOworICAgICAgICAgICAgICAgICAgICBEYXRhRGV0ZWN0
aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShkb2N1bWVudFJhbmdlLCBtX2ZyYW1lLnNldHRpbmdz
KCkuZGF0YURldGVjdG9yVHlwZXMoKSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIE5vdGlmeSBhY2Nlc3NpYmlsaXR5LgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuaAkocmV2aXNpb24gMTk0NTkxKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVm
IFNldHRpbmdzX2gKICNkZWZpbmUgU2V0dGluZ3NfaAogCisjaW5jbHVkZSAiRGF0YURldGVjdGlv
bi5oIgogI2luY2x1ZGUgIkVkaXRpbmdCZWhhdmlvclR5cGVzLmgiCiAjaW5jbHVkZSAiSW50U2l6
ZS5oIgogI2luY2x1ZGUgIlVSTC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCShyZXZp
c2lvbiAxOTQ1OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjcsNiArMjI3LDcgQEAgYWdncmVzc2l2ZVRpbGVSZXRlbnRpb25FbmFibGVk
IGluaXRpYWw9ZgogdGVtcG9yYXJ5VGlsZUNvaG9ydFJldGVudGlvbkVuYWJsZWQgaW5pdGlhbD10
cnVlCiAKIHVzZUltYWdlRG9jdW1lbnRGb3JTdWJmcmFtZVBERiBpbml0aWFsPWZhbHNlCitkYXRh
RGV0ZWN0b3JUeXBlcyB0eXBlPURhdGFEZXRlY3RvclR5cGVzLCBpbml0aWFsPURhdGFEZXRlY3Rv
clR5cGVOb25lCiAKICMgQWxsb3cgU291cmNlQnVmZmVycyB0byBzdG9yZSB1cCB0byAzMDRNQiBl
YWNoLCBlbm91Z2ggZm9yIGFwcHJveGltYXRlbHkgZml2ZSBtaW51dGVzCiAjIG9mIDEwODBwIHZp
ZGVvIGFuZCBzdGVyZW8gYXVkaW8uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkv
bWFjL0RhdGFEZXRlY3RvcnNTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcGkvbWFjL0RhdGFEZXRlY3RvcnNTUEkuaAkocmV2aXNpb24gMTk0NTkxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL21hYy9EYXRhRGV0ZWN0b3JzU1BJLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDExICsyNSwxMiBAQAogCiAjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KIAot
I2lmIFBMQVRGT1JNKE1BQykKIAogI2ltcG9ydCA8V2ViQ29yZS9EYXRhRGV0ZWN0b3JzQ29yZVNQ
SS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgogCisjaWYgUExBVEZPUk0oTUFD
KQorCiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIAogLy8gQ2FuJ3QgaW5jbHVkZSBEREFj
dGlvbi5oIGJlY2F1c2UgYXMgb2YgdGhpcyB3cml0aW5nIGl0IGlzIGEgcHJpdmF0ZSBoZWFkZXIg
dGhhdCBpbmNsdWRlcyBhIG5vbi1wcml2YXRlIGhlYWRlciB3aXRoIGFuICIiIGluY2x1ZGUuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTQ1OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxNi0wMS0xMSAgRW5yaWNhIENh
c3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBEYXRh
RGV0ZWN0b3JzIGluIFdLIChpT1MpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyOTg5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIyODU1OTYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyB0
aGUgZmlyc3Qgc3RlcCB0b3dhcmQgaW1wbGVtZW50aW5nIERhdGEgRGV0ZWN0b3JzIHN1cHBvcnQK
KyAgICAgICAgaW4gV0syIG9uIGlPUy4gVGhlIHBhdGNoIGFkZHMgYSBuZXcgcHJvcGVydHkgdG8g
dGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgb2JqZWN0IHRvIGluZGljYXRlIHRoZSB0eXBlIG9m
IGRldGVjdGlvbiBkZXNpcmVkIGFuZCBwcm9wYWdhdGVzCisgICAgICAgIHRvIHRoZSBXZWJQcm9j
ZXNzLgorCisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IGluaXRXaXRoRnJhbWU6Y29uZmlndXJhdGlvbjpdKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24ubW06CisgICAgICAgICgtW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gY29weVdpdGhab25lOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJl
ZmVyZW5jZXMpOgorCiAyMDE2LTAxLTA0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBbGxvdyB0byBzYXZlIGFuZCByZXN0b3JlIHNl
c3Npb24KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2Vz
RGVmaW5pdGlvbnMuaAkocmV2aXNpb24gMTk0NTkxKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIz
OSw3IEBACiAgICAgbWFjcm8oSW5zcGVjdG9yQXR0YWNobWVudFNpZGUsIGluc3BlY3RvckF0dGFj
aG1lbnRTaWRlLCBVSW50MzIsIHVpbnQzMl90LCAwKSBcCiAgICAgbWFjcm8oU3RvcmFnZUJsb2Nr
aW5nUG9saWN5LCBzdG9yYWdlQmxvY2tpbmdQb2xpY3ksIFVJbnQzMiwgdWludDMyX3QsIFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luOjpCbG9ja1RoaXJkUGFydHlTdG9yYWdlKSBcCiAgICAgbWFjcm8o
SmF2YVNjcmlwdFJ1bnRpbWVGbGFncywgamF2YVNjcmlwdFJ1bnRpbWVGbGFncywgVUludDMyLCB1
aW50MzJfdCwgMCkgXAorICAgIG1hY3JvKERhdGFEZXRlY3RvclR5cGVzLCBkYXRhRGV0ZWN0b3JU
eXBlcywgVUludDMyLCB1aW50MzJfdCwgMCkgXAogICAgIFwKIAogI2RlZmluZSBGT1JfRUFDSF9X
RUJLSVRfREVCVUdfQk9PTF9QUkVGRVJFTkNFKG1hY3JvKSBcCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNpb24gMTk0NTkx
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM2NSw2ICszNjUsNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhG
cmFtZTooQ0dSZWN0KWZyCiAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnByZWZlcmVuY2VWYWx1ZXMo
KS5zZXQoV2ViS2l0OjpXZWJQcmVmZXJlbmNlc0tleTo6cmVxdWlyZXNVc2VyR2VzdHVyZUZvckF1
ZGlvUGxheWJhY2tLZXkoKSwgV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpWYWx1ZSghIVtf
Y29uZmlndXJhdGlvbiBfcmVxdWlyZXNVc2VyQWN0aW9uRm9yQXVkaW9QbGF5YmFja10pKTsKICAg
ICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5jZVZhbHVlcygpLnNldChXZWJLaXQ6OldlYlBy
ZWZlcmVuY2VzS2V5OjppbnZpc2libGVBdXRvcGxheU5vdFBlcm1pdHRlZEtleSgpLCBXZWJLaXQ6
OldlYlByZWZlcmVuY2VzU3RvcmU6OlZhbHVlKCEhW19jb25maWd1cmF0aW9uIF9pbnZpc2libGVB
dXRvcGxheU5vdFBlcm1pdHRlZF0pKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5j
ZVZhbHVlcygpLnNldChXZWJLaXQ6OldlYlByZWZlcmVuY2VzS2V5OjptZWRpYURhdGFMb2Fkc0F1
dG9tYXRpY2FsbHlLZXkoKSwgV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpWYWx1ZSghIVtf
Y29uZmlndXJhdGlvbiBfbWVkaWFEYXRhTG9hZHNBdXRvbWF0aWNhbGx5XSkpOworICAgIHBhZ2VD
b25maWd1cmF0aW9uLT5wcmVmZXJlbmNlVmFsdWVzKCkuc2V0KFdlYktpdDo6V2ViUHJlZmVyZW5j
ZXNLZXk6OmRhdGFEZXRlY3RvclR5cGVzS2V5KCksIFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9y
ZTo6VmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFtfY29uZmlndXJhdGlvbiBkYXRhRGV0ZWN0
b3JUeXBlc10pKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KQogICAgIHBhZ2VDb25maWd1cmF0aW9uLT5wcmVmZXJlbmNlVmFsdWVzKCkuc2V0KFdlYktpdDo6
V2ViUHJlZmVyZW5jZXNLZXk6OmFsbG93c0FpclBsYXlGb3JNZWRpYVBsYXliYWNrS2V5KCksIFdl
YktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZTo6VmFsdWUoISFbX2NvbmZpZ3VyYXRpb24gYWxsb3dz
QWlyUGxheUZvck1lZGlhUGxheWJhY2tdKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaAko
cmV2aXNpb24gMTk0NTkxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdDb25maWd1cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDE2IEBA
IHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFdLU2VsZWN0aW9uR3IKICAgICBXS1NlbGVjdGlv
bkdyYW51bGFyaXR5RHluYW1pYywKICAgICBXS1NlbGVjdGlvbkdyYW51bGFyaXR5Q2hhcmFjdGVy
LAogfSBXS19FTlVNX0FWQUlMQUJMRV9JT1MoOF8wKTsKKwordHlwZWRlZiBOU19PUFRJT05TKE5T
VUludGVnZXIsIFdLRGF0YURldGVjdG9yVHlwZXMpIHsKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVO
b25lID0gMCwKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlciA9IDEgPDwgMCwKKyAg
ICBXS0RhdGFEZXRlY3RvclR5cGVMaW5rID0gMSA8PCAxLAorICAgIFdLRGF0YURldGVjdG9yVHlw
ZUFkZHJlc3MgPSAxIDw8IDIsCisgICAgV0tEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCA9
IDEgPDwgMywKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVBbGwgPSAweEZGRkYKK30gV0tfRU5VTV9B
VkFJTEFCTEVfSU9TKDlfMyk7CisKICNlbmRpZgogCiAvKiEgQSBXS1dlYlZpZXdDb25maWd1cmF0
aW9uIG9iamVjdCBpcyBhIGNvbGxlY3Rpb24gb2YgcHJvcGVydGllcyB3aXRoCkBAIC0xMTksNiAr
MTI5LDExIEBAIFdLX0NMQVNTX0FWQUlMQUJMRSgxMF8xMCwgOF8wKQogICovCiBAcHJvcGVydHkg
KG5vbmF0b21pYykgQk9PTCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJlTWVkaWFQbGF5YmFjayBXS19B
VkFJTEFCTEUoTkEsIDlfMCk7CiAKKy8qISBAYWJzdHJhY3QgQW4gZW51bSB2YWx1ZSBpbmRpY2F0
aW5nIHRoZSB0eXBlIG9mIGRhdGEgZGV0ZWN0aW9uIGRlc2lyZWQuCisgQGRpc2N1c3Npb24gVGhl
IGRlZmF1bHQgdmFsdWUgaXMgV0tEYXRhRGV0ZWN0b3JUeXBlTm9uZS4KKyAqLworQHByb3BlcnR5
IChub25hdG9taWMpIFdLRGF0YURldGVjdG9yVHlwZXMgZGF0YURldGVjdG9yVHlwZXM7CisKICNl
bmRpZgogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlld0NvbmZpZ3VyYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1tCShyZXZpc2lvbiAxOTQ1
OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5Miw2ICsxOTIsNyBAQCAtIChpZCljb3B5
V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUKICAgICBjb25maWd1cmF0aW9uLT5fcmVxdWlyZXNVc2Vy
QWN0aW9uRm9yTWVkaWFQbGF5YmFjayA9IHNlbGYtPl9yZXF1aXJlc1VzZXJBY3Rpb25Gb3JNZWRp
YVBsYXliYWNrOwogICAgIGNvbmZpZ3VyYXRpb24tPl9yZXF1aXJlc1VzZXJBY3Rpb25Gb3JBdWRp
b1BsYXliYWNrID0gc2VsZi0+X3JlcXVpcmVzVXNlckFjdGlvbkZvckF1ZGlvUGxheWJhY2s7CiAg
ICAgY29uZmlndXJhdGlvbi0+X3NlbGVjdGlvbkdyYW51bGFyaXR5ID0gc2VsZi0+X3NlbGVjdGlv
bkdyYW51bGFyaXR5OworICAgIGNvbmZpZ3VyYXRpb24tPl9kYXRhRGV0ZWN0b3JUeXBlcyA9IHNl
bGYtPl9kYXRhRGV0ZWN0b3JUeXBlczsKICNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBj
b25maWd1cmF0aW9uLT5fc2hvd3NVUkxzSW5Ub29sVGlwcyA9IHNlbGYtPl9zaG93c1VSTHNJblRv
b2xUaXBzOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAkocmV2aXNpb24gMTk0NTkxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMyLDYgKzI5MzIsNyBAQCB2
b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlCiAKICNpZiBQTEFURk9STShJ
T1MpCiAgICAgc2V0dGluZ3Muc2V0VXNlSW1hZ2VEb2N1bWVudEZvclN1YmZyYW1lUERGKHRydWUp
OworICAgIHNldHRpbmdzLnNldERhdGFEZXRlY3RvclR5cGVzKHN0YXRpY19jYXN0PERhdGFEZXRl
Y3RvclR5cGVzPihzdG9yZS5nZXRVSW50MzJWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6
ZGF0YURldGVjdG9yVHlwZXNLZXkoKSkpKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEdBTUVQQUQp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268774</attachid>
            <date>2016-01-12 09:19:06 -0800</date>
            <delta_ts>2016-01-12 10:58:53 -0800</delta_ts>
            <desc>Patch3</desc>
            <filename>ddwk2-part1.txt</filename>
            <type>text/plain</type>
            <size>38863</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NDg3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAxLTExICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlz
IHRoZSBmaXJzdCBzdGVwIHRvd2FyZCBpbXBsZW1lbnRpbmcgRGF0YSBEZXRlY3RvcnMgc3VwcG9y
dAorICAgICAgICBpbiBXSzIgb24gaU9TLiBUaGUgcGF0Y2ggYWRkcyBhIG5ldyBtZW1lYmVyIHRv
IHRoZSBTZXR0aW5ncyBvYmplY3QKKyAgICAgICAgdG8gcmV0cmlldmUgdGhlIHR5cGUgb2YgZGV0
ZWN0aW9uIGRlc2lyZWQuIFRoZSBEYXRhRGV0ZWN0aW9uIGZpbGVzCisgICAgICAgIGhhdmUgYmVl
biBtb3ZlZCB1bmRlciBjb2NvYSwgc2luY2UgdGhleSBhcmUgbm8gbG9uZ2VyIE9TWCBzcGVjaWZp
Yy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29h
L0RhdGFEZXRlY3Rpb24uaDogQ29waWVkIGZyb20gV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0
ZWN0aW9uLmguCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOiBDb3Bp
ZWQgZnJvbSBXZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24ubW0uCisgICAgICAgIChX
ZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6CisgICAgICAg
ICogZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5oOiBSZW1vdmVkLgorICAgICAgICAqIGVkaXRp
bmcvbWFjL0RhdGFEZXRlY3Rpb24ubW06IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21w
bGV0ZUZvclRoaXNGcmFtZSk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAq
IHBhZ2UvU2V0dGluZ3MuaW46CisgICAgICAgICogcGxhdGZvcm0vc3BpL21hYy9EYXRhRGV0ZWN0
b3JzU1BJLmg6CisKIDIwMTYtMDEtMTEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29t
PgogCiAgICAgICAgIE1vZGVybiBJREI6IHN0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LW11bHRpZW50
cnkuaHRtbCBmYWlscyB1bmRlciBHdWFyZE1hbGxvYy9BU0FOLgpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk0
ODc0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTM3LDggKzExMzcsNiBAQAogCQkyRDUwMDJGQzFCNTZENzk5
MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRp
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQky
RDUwMzY2ODFCQ0REREM0MDBFMjBCQjMgLyogR2VzdHVyZUV2ZW50cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDUwMzY2NzFCQ0REREM0MDBFMjBC
QjMgLyogR2VzdHVyZUV2ZW50cy5jcHAgKi87IH07CiAJCTJENTY0NkIwMUI4Rjg0OTMwMDNDNDk5
NCAvKiBEaWN0aW9uYXJ5UG9wdXBJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDU2NDZBRjFCOEY4NDkzMDAzQzQ5OTQgLyogRGljdGlvbmFyeVBv
cHVwSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTJENThEODU1MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDU4RDg1MzFBMTVGNjVGMDBB
NUY3MjYgLyogRGF0YURldGVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTJENThEODU2MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0
aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ1
OEQ4NTQxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24ubW0gKi87IH07CiAJCTJENTlG
MUJGMUEwMDQ0QzYwMDFGM0QyOSAvKiBEYXRhRGV0ZWN0b3JzU1BJLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDU5RjFCRTFBMDA0NEM2MDAxRjNEMjkg
LyogRGF0YURldGVjdG9yc1NQSS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTJENUE1OTJGMTUyNTI1MjMwMDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
NzQ4RDc0MTJDQzNGODkwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNwcCAqLzsgfTsKIAkJ
MkQ1QTU5MzExNTI1MjVEMDAwMzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzQ4RDY2MTJDQzM3NjMwMDFG
QkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU4NzQsNiArNTg3Miw4IEBACiAJCUM1MEQwRTgzMEZGNDI3
MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTBEMEU4MTBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFn
ZU5hbWVzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUM1MTM3Q0YyMTFBNTgzNzgwMDRBREI5OSAvKiBKU0RPTVN0cmluZ0xpc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMzdDRjAxMUE1
ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5jcHAgKi87IH07CiAJCUM1MTM3Q0YzMTFB
NTgzNzgwMDRBREI5OSAvKiBKU0RPTVN0cmluZ0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTM3Q0YxMTFBNTgzNzgwMDRBREI5OSAvKiBKU0RP
TVN0cmluZ0xpc3QuaCAqLzsgfTsKKwkJQzUyMjdERjExQzNDNkRGMTAwRjVFRDU0IC8qIERhdGFE
ZXRlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1MjI3REVGMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzUyMjdERjIxQzNDNkRGOTAw
RjVFRDU0IC8qIERhdGFEZXRlY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNTIyN0RGMDFDM0M2REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlv
bi5tbSAqLzsgfTsKIAkJQzUyNzhCMEMxN0YyMTJFQTAwM0EyOTk4IC8qIFBsYXRmb3JtUGFzdGVi
b2FyZElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1Mjc4QjBCMTdGMjEyRUEwMDNBMjk5OCAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gKi87
IH07CiAJCUM1NDQyNzRCMTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTQ0Mjc0OTExQTU3RTdB
MDA2M0E3NDkgLyogRE9NU3RyaW5nTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUM1NTYxMEYxMTFBNzA0RUIwMEI4MkQyNyAvKiBET01TdHJp
bmdMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1NTYxMEYwMTFBNzA0RUIwMEI4MkQyNyAvKiBET01TdHJpbmdMaXN0LmNwcCAqLzsgfTsKQEAg
LTg1MDQsOCArODUwNCw2IEBACiAJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRp
bGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhdGhVdGlsaXRpZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1MDM2NjcxQkNERERDNDAwRTIwQkIz
IC8qIEdlc3R1cmVFdmVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gR2VzdHVyZUV2ZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENTY0
NkFGMUI4Rjg0OTMwMDNDNDk5NCAvKiBEaWN0aW9uYXJ5UG9wdXBJbmZvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3Rpb25hcnlQb3B1cEluZm8uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMkQ1OEQ4NTMxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YURldGVjdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDU4RDg1NDFBMTVGNjVGMDBBNUY3MjYgLyog
RGF0YURldGVjdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IERhdGFEZXRlY3Rpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENTlGMUJF
MUEwMDQ0QzYwMDFGM0QyOSAvKiBEYXRhRGV0ZWN0b3JzU1BJLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERhdGFEZXRlY3RvcnNTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkQ1QkM0MjUxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0
aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJpdHlQb2xp
Y3lWaW9sYXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDVCQzQy
NjE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzY5NSw2ICsxMzY5Myw4IEBACiAJCUM1MEQw
RTgxMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VOYW1lc3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzUxMzdDRjAxMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVN0cmluZ0xpc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTEzN0NGMTExQTU4Mzc4MDA0QURC
OTkgLyogSlNET01TdHJpbmdMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTRE9NU3RyaW5nTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTIyN0RF
RjFDM0M2REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEYXRhRGV0ZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUM1MjI3REYwMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0YURldGVjdGlvbi5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUyNzhCMEIxN0YyMTJFQTAwM0EyOTk4IC8qIFBsYXRm
b3JtUGFzdGVib2FyZElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFBsYXRmb3JtUGFzdGVib2FyZElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzU0NDI3NDkxMUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xpc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU3RyaW5nTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDNTQ0Mjc0QTExQTU3RTdBMDA2M0E3NDkgLyogRE9NU3RyaW5nTGlzdC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRE9NU3RyaW5nTGlzdC5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNzg2Myw2ICsxNzg2Myw4IEBACiAJCTdDM0U1MTA3MThERjhG
MTIwMEMxMTJGNyAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJQzUyMjdERUYxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCAq
LywKKwkJCQlDNTIyN0RGMDFDM0M2REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5tbSAqLywK
IAkJCQk5QjU1RUVFQTFCM0YzRkVGMDA1MzQyQkMgLyogRWRpdG9yQ29jb2EuaCAqLywKIAkJCQk5
QjU1RUVFODFCM0U4ODk4MDA1MzQyQkMgLyogRWRpdG9yQ29jb2EubW0gKi8sCiAJCQkJN0MzRTUx
MDgxOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCAqLywKQEAgLTIzMTYzLDggKzIz
MTY1LDYgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUNFN0IyREFGMTU4NkFCQUQwMDk4QjNGQSAv
KiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCAqLywKIAkJCQlDRTdCMkRCMDE1ODZBQkFE
MDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tICovLAotCQkJCTJENThE
ODUzMUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLmggKi8sCi0JCQkJMkQ1OEQ4NTQx
QTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24ubW0gKi8sCiAJCQkJOTM3RkYzRDQxQTEw
MTJENjAwOEVCQTMxIC8qIERpY3Rpb25hcnlMb29rdXAuaCAqLywKIAkJCQk5MzdGRjNENjFBMTAx
MzFCMDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5tbSAqLywKIAkJCQlFRDUwMURDNTBCMjQ5
RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovLApAQCAtMjUwMzgsNyArMjUwMzgsNiBAQAog
CQkJCTk3QkM2QTMwMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRocmVhZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTdCQzZBMzIxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJhY2tlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkUyMzQ4MEQxOEE5ODcxNDAwRTRCNkU4IC8qIERhdGFDdWUu
aCBpbiBIZWFkZXJzICovLAotCQkJCTJENThEODU1MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVFMkI0RTFBRkYwNkNBMDA5NzZGOUYgLyog
RGF0YURldGVjdG9yc0NvcmVTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENTlGMUJGMUEwMDQ0
QzYwMDFGM0QyOSAvKiBEYXRhRGV0ZWN0b3JzU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzIy
NzQ2RjBFODM2NjQ1MDBFN0Y5NzUgLyogRGF0YVJlZi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjAw
OSw2ICsyNjAwOCw3IEBACiAJCQkJQjI3NTM1NzUwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTc2MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXpl
SGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UxMjUyNEQxQTFBNzdERTAwODY0NDgwIC8qIElP
UE1MaWJTUEkuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1MjI3REYxMUMzQzZERjEwMEY1RUQ1NCAv
KiBEYXRhRGV0ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NERFRjY0MzFBNkZGOTI3MDBE
NDVFRUMgLyogSU9SZXR1cm5TUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMEI0QUFCMThEQTFD
Q0QwMDQzNERFMSAvKiBJT1N1cmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMjFFNTdEMTgz
RUQxRkYwMDFDMjg5RCAvKiBJT1N1cmZhY2VQb29sLmggaW4gSGVhZGVycyAqLywKQEAgLTI4NzEz
LDYgKzI4NzEzLDcgQEAKIAkJCQk4NTAzMUIzRjBBNDRFRkM3MDBGOTkyRTAgLyogQ2xpcGJvYXJk
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTgwMzcxNjExQTY2RjAwQTAwQkFGNTE5IC8q
IENsaXBSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNERUE3NjM1MTQ2MEI3MUEwMDhCMzFG
MSAvKiBDbG9jay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDNTIyN0RGMjFDM0M2REY5MDBGNUVE
NTQgLyogRGF0YURldGVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNERUE3NjM0MTQ2MEI1
NkYwMDhCMzFGMSAvKiBDbG9ja0dlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUJEOEE5
NUExOEJFRkM3NjAwOTg3RTlBIC8qIENvbGxlY3Rpb25JbmRleENhY2hlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyNzUzNTY2MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI4ODkxLDcgKzI4ODkyLDYgQEAKIAkJCQk5N0JDNkEyRjE1MDVGMDgxMDAxQjc0
QUMgLyogRGF0YWJhc2VUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBMzExNTA1
RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
RTIzNDgwQzE4QTk4NzBCMDBFNEI2RTggLyogRGF0YUN1ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQkyRDU4RDg1NjFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDNjQ2NDFEMTFEN0Y0MTYwMDY0NTVCMCAvKiBEYXRhc2V0RE9NU3RyaW5nTWFw
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3ODQ5NDFCMEI1RkU1MDcwMDFFMjM3QSAvKiBEYXRh
VHJhbnNmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBRkYwODI0NUU1OTAwMUU5QUJD
IC8qIERhdGFUcmFuc2Zlck1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHJldmlzaW9uIDE5NDU5MSkJKGZy
b20gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5oOjE5NDU5MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGFEZXRlY3Rpb25f
aAorI2RlZmluZSBEYXRhRGV0ZWN0aW9uX2gKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9y
dCA8d3RmL1JlZlB0ci5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNT
IEREQWN0aW9uQ29udGV4dDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFJl
Y3Q7CitjbGFzcyBIaXRUZXN0UmVzdWx0OworY2xhc3MgUmFuZ2U7CisKK2NsYXNzIERhdGFEZXRl
Y3Rpb24geworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXRhaW5QdHI8RERB
Y3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0
UmVzdWx0JiwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdl
PiYgZGV0ZWN0ZWREYXRhUmFuZ2UpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisjZW5kaWYgLy8gRGF0YURldGVjdGlvbl9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDYgQEAKICNpZm5kZWYgRGF0YURldGVjdGlvbl9o
CiAjZGVmaW5lIERhdGFEZXRlY3Rpb25faAogCi0jaWYgUExBVEZPUk0oTUFDKQotCiAjaW1wb3J0
IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTM5LDEzICsz
NywyNSBAQCBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgUmFu
Z2U7CiAKK2VudW0gRGF0YURldGVjdG9yVHlwZXMgeworICAgIERhdGFEZXRlY3RvclR5cGVOb25l
ID0gMCwKKyAgICBEYXRhRGV0ZWN0b3JUeXBlUGhvbmVOdW1iZXIgPSAxIDw8IDAsCisgICAgRGF0
YURldGVjdG9yVHlwZUxpbmsgPSAxIDw8IDEsCisgICAgRGF0YURldGVjdG9yVHlwZUFkZHJlc3Mg
PSAxIDw8IDIsCisgICAgRGF0YURldGVjdG9yVHlwZUNhbGVuZGFyRXZlbnQgPSAxIDw8IDMsCisg
ICAgRGF0YURldGVjdG9yVHlwZUFsbCA9IDB4RkZGRgorfTsKKwogY2xhc3MgRGF0YURldGVjdGlv
biB7CiBwdWJsaWM6CisjaWYgUExBVEZPUk0oTUFDKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3Vs
dChjb25zdCBIaXRUZXN0UmVzdWx0JiwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0Jv
eCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpOworI2VuZGlmCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRldGVjdENvbnRlbnRJblJh
bmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMpOworI2Vu
ZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBQTEFURk9STShN
QUMpCi0KICNlbmRpZiAvLyBEYXRhRGV0ZWN0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDE5NDU5MSkJKGZyb20g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5tbToxOTQ1OTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRGF0YURldGVjdGlvbi5o
IgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJEYXRhRGV0ZWN0b3JzU1BJLmgiCisj
aW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmgiCisjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCisjaW1wb3J0ICJOb2RlLmgiCisjaW1wb3J0
ICJSYW5nZS5oIgorI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCisjaW1wb3J0ICJUZXh0SXRlcmF0
b3IuaCIKKyNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgorI2ltcG9ydCAiVmlzaWJsZVVuaXRz
LmgiCisjaW1wb3J0ICJodG1sZWRpdGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhS
YW5nZShWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24sIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdl
LCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRl
Y3RlZERhdGFSYW5nZSkKK3sKKyAgICBTdHJpbmcgZnVsbFBsYWluVGV4dFN0cmluZyA9IHBsYWlu
VGV4dChjb250ZXh0UmFuZ2UuZ2V0KCkpOworICAgIGludCBoaXRMb2NhdGlvbiA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGNvbnRleHRSYW5nZS0+c3RhcnRQb3NpdGlvbigp
LCBwb3NpdGlvbikuZ2V0KCkpOworCisgICAgUmV0YWluUHRyPEREU2Nhbm5lclJlZj4gc2Nhbm5l
ciA9IGFkb3B0Q0YoRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwgMCwgbnVs
bHB0cikpOworICAgIFJldGFpblB0cjxERFNjYW5RdWVyeVJlZj4gc2NhblF1ZXJ5ID0gYWRvcHRD
RihERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnVsbFBs
YWluVGV4dFN0cmluZy5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBmdWxs
UGxhaW5UZXh0U3RyaW5nLmxlbmd0aCgpKSkpOworCisgICAgaWYgKCFERFNjYW5uZXJTY2FuUXVl
cnkoc2Nhbm5lci5nZXQoKSwgc2NhblF1ZXJ5LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gcmVzdWx0cyA9IGFkb3B0Q0YoRERTY2Fu
bmVyQ29weVJlc3VsdHNXaXRoT3B0aW9ucyhzY2FubmVyLmdldCgpLCBERFNjYW5uZXJDb3B5UmVz
dWx0c09wdGlvbnNOb092ZXJsYXApKTsKKworICAgIC8vIEZpbmQgdGhlIEREUmVzdWx0UmVmIHRo
YXQgaW50ZXJzZWN0cyB0aGUgaGl0VGVzdFJlc3VsdCdzIFZpc2libGVQb3NpdGlvbi4KKyAgICBE
RFJlc3VsdFJlZiBtYWluUmVzdWx0ID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8UmFuZ2U+IG1haW5S
ZXN1bHRSYW5nZTsKKyAgICBDRkluZGV4IHJlc3VsdENvdW50ID0gQ0ZBcnJheUdldENvdW50KHJl
c3VsdHMuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHJlc3VsdENvdW50OyBp
KyspIHsKKyAgICAgICAgRERSZXN1bHRSZWYgcmVzdWx0ID0gKEREUmVzdWx0UmVmKUNGQXJyYXlH
ZXRWYWx1ZUF0SW5kZXgocmVzdWx0cy5nZXQoKSwgaSk7CisgICAgICAgIENGUmFuZ2UgcmVzdWx0
UmFuZ2VJbkNvbnRleHQgPSBERFJlc3VsdEdldFJhbmdlKHJlc3VsdCk7CisgICAgICAgIGlmICho
aXRMb2NhdGlvbiA+PSByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbiAmJiAoaGl0TG9jYXRp
b24gLSByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbikgPCByZXN1bHRSYW5nZUluQ29udGV4
dC5sZW5ndGgpIHsKKyAgICAgICAgICAgIG1haW5SZXN1bHQgPSByZXN1bHQ7CisgICAgICAgICAg
ICBtYWluUmVzdWx0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGNvbnRleHRSYW5nZS5n
ZXQoKSwgcmVzdWx0UmFuZ2VJbkNvbnRleHQubG9jYXRpb24sIHJlc3VsdFJhbmdlSW5Db250ZXh0
Lmxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICghbWFpblJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8
RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0ID0gYWRvcHROUyhbYWxsb2NEREFjdGlvbkNv
bnRleHRJbnN0YW5jZSgpIGluaXRdKTsKKyAgICBbYWN0aW9uQ29udGV4dCBzZXRBbGxSZXN1bHRz
OkBbIChpZCltYWluUmVzdWx0IF1dOworICAgIFthY3Rpb25Db250ZXh0IHNldE1haW5SZXN1bHQ6
bWFpblJlc3VsdF07CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICBtYWluUmVz
dWx0UmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKKyAgICBkZXRlY3RlZERhdGFCb3Vu
ZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbWFpblJl
c3VsdFJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOworICAgIGZvciAoY29uc3QgYXV0byYg
cXVhZCA6IHF1YWRzKQorICAgICAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveC51bml0ZShmcmFt
ZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cocXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKSk7Cisg
ICAgCisgICAgZGV0ZWN0ZWREYXRhUmFuZ2UgPSBtYWluUmVzdWx0UmFuZ2U7CisgICAgCisgICAg
cmV0dXJuIGFjdGlvbkNvbnRleHQ7Cit9CisKK1JldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IERh
dGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmIGhpdFRlc3RSZXN1bHQsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gs
IFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQoreworICAgIGlmICghRGF0YURldGVj
dG9yc0xpYnJhcnkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBOb2RlKiBub2Rl
ID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJl
cigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uOworICAgIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdl
OworCisgICAgaWYgKCFpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKm5vZGUpKSB7Cisg
ICAgICAgIHBvc2l0aW9uID0gcmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVzdFJlc3Vs
dC5sb2NhbFBvaW50KCksIG51bGxwdHIpOworICAgICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkp
CisgICAgICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2Rl
KTsKKworICAgICAgICBjb250ZXh0UmFuZ2UgPSByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25C
eUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7CisgICAgICAgIGlmICghY29udGV4dFJhbmdlKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRnJhbWUq
IGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgICAgICBpZiAoIWZyYW1lKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgSW50UG9pbnQgZnJhbWVQb2lu
dCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpOworICAgICAg
ICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUt
PnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOworICAgICAgICBpZiAocG9zaXRp
b24uaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBjb250
ZXh0UmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIExpbmVH
cmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7CisgICAgICAgIGlmICghY29udGV4dFJhbmdl
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGRldGVj
dEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKHBvc2l0aW9uLCBjb250ZXh0UmFuZ2UsIGRldGVjdGVk
RGF0YUJvdW5kaW5nQm94LCBkZXRlY3RlZERhdGFSYW5nZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjYsOCArMjYsNiBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJEYXRhRGV0
ZWN0aW9uLmgiCiAKLSNpZiBQTEFURk9STShNQUMpCi0KICNpbXBvcnQgIkRhdGFEZXRlY3RvcnNT
UEkuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9ydCAiSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuaCIKQEAgLTQyLDYgKzQwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisj
aWYgUExBVEZPUk0oTUFDKQorCiBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0
ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uLCBSZWZQ
dHI8UmFuZ2U+IGNvbnRleHRSYW5nZSwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0Jv
eCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCiB7CiAgICAgU3RyaW5nIGZ1bGxQ
bGFpblRleHRTdHJpbmcgPSBwbGFpblRleHQoY29udGV4dFJhbmdlLmdldCgpKTsKQEAgLTEzMSw3
ICsxMzEsMTEgQEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVjdGlvbgogCiAg
ICAgcmV0dXJuIGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKHBvc2l0aW9uLCBjb250ZXh0
UmFuZ2UsIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBkZXRlY3RlZERhdGFSYW5nZSk7CiB9Cisj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBEYXRhRGV0
ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiwgRGF0YURldGVjdG9y
VHlwZXMpCit7Cit9CisjZW5kaWYKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRl
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0
ZWN0aW9uLmgJKHJldmlzaW9uIDE5NDg3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0RhdGFEZXRlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBEYXRhRGV0ZWN0aW9uX2gKLSNkZWZpbmUgRGF0YURldGVjdGlvbl9oCi0K
LSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KLSNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KLQotT0JKQ19DTEFTUyBEREFjdGlvbkNvbnRleHQ7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgSGl0VGVzdFJlc3VsdDsKLWNs
YXNzIFJhbmdlOwotCi1jbGFzcyBEYXRhRGV0ZWN0aW9uIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUFyb3Vu
ZEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIEZsb2F0UmVjdCYgZGV0ZWN0ZWRE
YXRhQm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQotI2Vu
ZGlmIC8vIERhdGFEZXRlY3Rpb25faApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9EYXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lvbiAxOTQ4NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzNyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkRhdGFEZXRlY3Rpb24uaCIKLQotI2lmIFBMQVRGT1JN
KE1BQykKLQotI2ltcG9ydCAiRGF0YURldGVjdG9yc1NQSS5oIgotI2ltcG9ydCAiRnJhbWVWaWV3
LmgiCi0jaW1wb3J0ICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgotI2ltcG9ydCAiSGl0
VGVzdFJlc3VsdC5oIgotI2ltcG9ydCAiTm9kZS5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKLSNpbXBv
cnQgIlJlbmRlck9iamVjdC5oIgotI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCi0jaW1wb3J0ICJW
aXNpYmxlUG9zaXRpb24uaCIKLSNpbXBvcnQgIlZpc2libGVVbml0cy5oIgotI2ltcG9ydCAiaHRt
bGVkaXRpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgUmV0YWluUHRyPERE
QWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uLCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZSwgRmxvYXRSZWN0JiBkZXRl
Y3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCi17
Ci0gICAgU3RyaW5nIGZ1bGxQbGFpblRleHRTdHJpbmcgPSBwbGFpblRleHQoY29udGV4dFJhbmdl
LmdldCgpKTsKLSAgICBpbnQgaGl0TG9jYXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KG1ha2VSYW5nZShjb250ZXh0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdldCgp
KTsKLQotICAgIFJldGFpblB0cjxERFNjYW5uZXJSZWY+IHNjYW5uZXIgPSBhZG9wdENGKEREU2Nh
bm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIpKTsKLSAgICBSZXRh
aW5QdHI8RERTY2FuUXVlcnlSZWY+IHNjYW5RdWVyeSA9IGFkb3B0Q0YoRERTY2FuUXVlcnlDcmVh
dGVGcm9tU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZ1bGxQbGFpblRleHRTdHJpbmcuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgZnVsbFBsYWluVGV4dFN0cmluZy5s
ZW5ndGgoKSkpKTsKLQotICAgIGlmICghRERTY2FubmVyU2NhblF1ZXJ5KHNjYW5uZXIuZ2V0KCks
IHNjYW5RdWVyeS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWlu
UHRyPENGQXJyYXlSZWY+IHJlc3VsdHMgPSBhZG9wdENGKEREU2Nhbm5lckNvcHlSZXN1bHRzV2l0
aE9wdGlvbnMoc2Nhbm5lci5nZXQoKSwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zTm9PdmVy
bGFwKSk7Ci0KLSAgICAvLyBGaW5kIHRoZSBERFJlc3VsdFJlZiB0aGF0IGludGVyc2VjdHMgdGhl
IGhpdFRlc3RSZXN1bHQncyBWaXNpYmxlUG9zaXRpb24uCi0gICAgRERSZXN1bHRSZWYgbWFpblJl
c3VsdCA9IG51bGxwdHI7Ci0gICAgUmVmUHRyPFJhbmdlPiBtYWluUmVzdWx0UmFuZ2U7Ci0gICAg
Q0ZJbmRleCByZXN1bHRDb3VudCA9IENGQXJyYXlHZXRDb3VudChyZXN1bHRzLmdldCgpKTsKLSAg
ICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCByZXN1bHRDb3VudDsgaSsrKSB7Ci0gICAgICAgIERE
UmVzdWx0UmVmIHJlc3VsdCA9IChERFJlc3VsdFJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KHJl
c3VsdHMuZ2V0KCksIGkpOwotICAgICAgICBDRlJhbmdlIHJlc3VsdFJhbmdlSW5Db250ZXh0ID0g
RERSZXN1bHRHZXRSYW5nZShyZXN1bHQpOwotICAgICAgICBpZiAoaGl0TG9jYXRpb24gPj0gcmVz
dWx0UmFuZ2VJbkNvbnRleHQubG9jYXRpb24gJiYgKGhpdExvY2F0aW9uIC0gcmVzdWx0UmFuZ2VJ
bkNvbnRleHQubG9jYXRpb24pIDwgcmVzdWx0UmFuZ2VJbkNvbnRleHQubGVuZ3RoKSB7Ci0gICAg
ICAgICAgICBtYWluUmVzdWx0ID0gcmVzdWx0OwotICAgICAgICAgICAgbWFpblJlc3VsdFJhbmdl
ID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShjb250ZXh0UmFuZ2UuZ2V0KCksIHJlc3VsdFJhbmdl
SW5Db250ZXh0LmxvY2F0aW9uLCByZXN1bHRSYW5nZUluQ29udGV4dC5sZW5ndGgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1haW5SZXN1bHQpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4g
YWN0aW9uQ29udGV4dCA9IGFkb3B0TlMoW2FsbG9jRERBY3Rpb25Db250ZXh0SW5zdGFuY2UoKSBp
bml0XSk7Ci0gICAgW2FjdGlvbkNvbnRleHQgc2V0QWxsUmVzdWx0czpAWyAoaWQpbWFpblJlc3Vs
dCBdXTsKLSAgICBbYWN0aW9uQ29udGV4dCBzZXRNYWluUmVzdWx0Om1haW5SZXN1bHRdOwotCi0g
ICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgbWFpblJlc3VsdFJhbmdlLT5hYnNvbHV0
ZVRleHRRdWFkcyhxdWFkcyk7Ci0gICAgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3ggPSBGbG9hdFJl
Y3QoKTsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJE
b2N1bWVudCgpLnZpZXcoKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHF1YWQgOiBxdWFkcykKLSAg
ICAgICAgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gudW5pdGUoZnJhbWVWaWV3LT5jb250ZW50c1Rv
V2luZG93KHF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKSkpOwotICAgIAotICAgIGRldGVjdGVk
RGF0YVJhbmdlID0gbWFpblJlc3VsdFJhbmdlOwotICAgIAotICAgIHJldHVybiBhY3Rpb25Db250
ZXh0OwotfQotCi1SZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBEYXRhRGV0ZWN0aW9uOjpkZXRl
Y3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVz
dWx0LCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBk
ZXRlY3RlZERhdGFSYW5nZSkKLXsKLSAgICBpZiAoIURhdGFEZXRlY3RvcnNMaWJyYXJ5KCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQu
aW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJl
bmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbjsKLSAgICBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZTsKLQotICAgIGlmICghaXM8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKSkgewotICAgICAgICBwb3NpdGlvbiA9
IHJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50KGhpdFRlc3RSZXN1bHQubG9jYWxQb2ludCgpLCBu
dWxscHRyKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICAgICAgcG9z
aXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7Ci0KLSAgICAgICAgY29u
dGV4dFJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0
aW9uLCAyNTApOwotICAgICAgICBpZiAoIWNvbnRleHRSYW5nZSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRv
Y3VtZW50KCkuZnJhbWUoKTsKLSAgICAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgICAgIEludFBvaW50IGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0
LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKTsKLSAgICAgICAgaWYgKCFmcmFtZS0+cmFu
Z2VGb3JQb2ludChmcmFtZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25G
b3JQb2ludChmcmFtZVBvaW50KTsKLSAgICAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgY29udGV4dFJhbmdlID0gZW5jbG9z
aW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBMaW5lR3JhbnVsYXJpdHksIERpcmVj
dGlvbkZvcndhcmQpOwotICAgICAgICBpZiAoIWNvbnRleHRSYW5nZSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBkZXRlY3RJdGVtQXRQb3NpdGlvbldp
dGhSYW5nZShwb3NpdGlvbiwgY29udGV4dFJhbmdlLCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwg
ZGV0ZWN0ZWREYXRhUmFuZ2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAJKHJldmlzaW9uIDE5NDg3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDkgQEAKICNpbmNsdWRlICJDb250ZW50
U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1
ZGUgIkRPTVdpbmRvdy5oIgorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkRhdGFEZXRl
Y3Rpb24uaCIKKyNlbmRpZgogI2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5oIgogI2luY2x1ZGUg
IkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmgiCiAjaW5jbHVkZSAiRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzLmgiCkBAIC0yMjYzLDYgKzIyNjYsMTIgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2hlY2tMb2Fk
Q29tcGxldGVGb3JUaAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2Ns
aWVudC5kaXNwYXRjaERpZEZpbmlzaExvYWQoKTsKICAgICAgICAgICAgICAgICBsb2FkaW5nRXZl
bnQgPSBBWE9iamVjdENhY2hlOjpBWExvYWRpbmdGaW5pc2hlZDsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5kYXRhRGV0ZWN0b3JUeXBl
cygpICE9IERhdGFEZXRlY3RvclR5cGVOb25lKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0
cjxSYW5nZT4gZG9jdW1lbnRSYW5nZSA9IG1ha2VSYW5nZShmaXJzdFBvc2l0aW9uSW5Ob2RlKG1f
ZnJhbWUuZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpLCBsYXN0UG9zaXRpb25Jbk5vZGUo
bV9mcmFtZS5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkpOworICAgICAgICAgICAgICAg
ICAgICBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShkb2N1bWVudFJhbmdlLCBt
X2ZyYW1lLnNldHRpbmdzKCkuZGF0YURldGVjdG9yVHlwZXMoKSk7CisgICAgICAgICAgICAgICAg
fQorI2VuZGlmCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIE5vdGlmeSBhY2Nlc3Np
YmlsaXR5LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkocmV2aXNpb24gMTk0ODc0KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw5IEBACiAjaWZuZGVmIFNldHRpbmdzX2gKICNkZWZpbmUgU2V0dGluZ3NfaAogCisjaWYgUExB
VEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiRGF0YURldGVjdGlvbi5oIgorI2VuZGlmCiAjaW5jbHVk
ZSAiRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVk
ZSAiVVJMLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4JKHJldmlzaW9uIDE5NDg3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIy
OCw2ICsyMjgsNyBAQCBhZ2dyZXNzaXZlVGlsZVJldGVudGlvbkVuYWJsZWQgaW5pdGlhbD1mCiB0
ZW1wb3JhcnlUaWxlQ29ob3J0UmV0ZW50aW9uRW5hYmxlZCBpbml0aWFsPXRydWUKIAogdXNlSW1h
Z2VEb2N1bWVudEZvclN1YmZyYW1lUERGIGluaXRpYWw9ZmFsc2UKK2RhdGFEZXRlY3RvclR5cGVz
IHR5cGU9RGF0YURldGVjdG9yVHlwZXMsIGluaXRpYWw9RGF0YURldGVjdG9yVHlwZU5vbmUKIAog
IyBBbGxvdyBTb3VyY2VCdWZmZXJzIHRvIHN0b3JlIHVwIHRvIDMwNE1CIGVhY2gsIGVub3VnaCBm
b3IgYXBwcm94aW1hdGVseSBmaXZlIG1pbnV0ZXMKICMgb2YgMTA4MHAgdmlkZW8gYW5kIHN0ZXJl
byBhdWRpby4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9tYWMvRGF0YURldGVj
dG9yc1NQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9tYWMv
RGF0YURldGVjdG9yc1NQSS5oCShyZXZpc2lvbiAxOTQ4NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcGkvbWFjL0RhdGFEZXRlY3RvcnNTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTEgKzI1LDEyIEBACiAKICNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgogCi0jaWYgUExBVEZPUk0o
TUFDKQogCiAjaW1wb3J0IDxXZWJDb3JlL0RhdGFEZXRlY3RvcnNDb3JlU1BJLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAKKyNpZiBQTEFURk9STShNQUMpCisKICNpZiBVU0Uo
QVBQTEVfSU5URVJOQUxfU0RLKQogCiAvLyBDYW4ndCBpbmNsdWRlIEREQWN0aW9uLmggYmVjYXVz
ZSBhcyBvZiB0aGlzIHdyaXRpbmcgaXQgaXMgYSBwcml2YXRlIGhlYWRlciB0aGF0IGluY2x1ZGVz
IGEgbm9uLXByaXZhdGUgaGVhZGVyIHdpdGggYW4gIiIgaW5jbHVkZS4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE5NDg3NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE2LTAxLTExICBFbnJpY2EgQ2FzdWNjaSAgPGVucmlj
YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERhdGFEZXRlY3RvcnMgaW4g
V0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBzdGVw
IHRvd2FyZCBpbXBsZW1lbnRpbmcgRGF0YSBEZXRlY3RvcnMgc3VwcG9ydAorICAgICAgICBpbiBX
SzIgb24gaU9TLiBUaGUgcGF0Y2ggYWRkcyBhIG5ldyBwcm9wZXJ0eSB0byB0aGUgY29uZmlndXJh
dGlvbgorICAgICAgICBvYmplY3QgdG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgZGV0ZWN0aW9uIGRl
c2lyZWQgYW5kIHByb3BhZ2F0ZXMKKyAgICAgICAgdG8gdGhlIFdlYlByb2Nlc3MuCisKKyAgICAg
ICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgaW5pdFdp
dGhGcmFtZTpjb25maWd1cmF0aW9uOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Q29uZmlndXJhdGlvbi5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBjb3B5V2l0aFpvbmU6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyk6CisK
IDIwMTYtMDEtMTEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBHZXQgcmlkIG9mIENGTWFrZUNvbGxlY3RhYmxlLCBpdCBpcyBhIG5vLW9wCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgJ
KHJldmlzaW9uIDE5NDg3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNl
c0RlZmluaXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw2ICsyMzksNyBAQAogICAgIG1h
Y3JvKEluc3BlY3RvckF0dGFjaG1lbnRTaWRlLCBpbnNwZWN0b3JBdHRhY2htZW50U2lkZSwgVUlu
dDMyLCB1aW50MzJfdCwgMCkgXAogICAgIG1hY3JvKFN0b3JhZ2VCbG9ja2luZ1BvbGljeSwgc3Rv
cmFnZUJsb2NraW5nUG9saWN5LCBVSW50MzIsIHVpbnQzMl90LCBXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbjo6QmxvY2tUaGlyZFBhcnR5U3RvcmFnZSkgXAogICAgIG1hY3JvKEphdmFTY3JpcHRSdW50
aW1lRmxhZ3MsIGphdmFTY3JpcHRSdW50aW1lRmxhZ3MsIFVJbnQzMiwgdWludDMyX3QsIDApIFwK
KyAgICBtYWNybyhEYXRhRGV0ZWN0b3JUeXBlcywgZGF0YURldGVjdG9yVHlwZXMsIFVJbnQzMiwg
dWludDMyX3QsIDApIFwKICAgICBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfV0VCS0lUX0RFQlVHX0JP
T0xfUFJFRkVSRU5DRShtYWNybykgXApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDE5NDg3NCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zODIsNiArMzgyLDcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClm
cgogICAgIHBhZ2VDb25maWd1cmF0aW9uLT5wcmVmZXJlbmNlVmFsdWVzKCkuc2V0KFdlYktpdDo6
V2ViUHJlZmVyZW5jZXNLZXk6OnJlcXVpcmVzVXNlckdlc3R1cmVGb3JBdWRpb1BsYXliYWNrS2V5
KCksIFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZTo6VmFsdWUoISFbX2NvbmZpZ3VyYXRpb24g
X3JlcXVpcmVzVXNlckFjdGlvbkZvckF1ZGlvUGxheWJhY2tdKSk7CiAgICAgcGFnZUNvbmZpZ3Vy
YXRpb24tPnByZWZlcmVuY2VWYWx1ZXMoKS5zZXQoV2ViS2l0OjpXZWJQcmVmZXJlbmNlc0tleTo6
aW52aXNpYmxlQXV0b3BsYXlOb3RQZXJtaXR0ZWRLZXkoKSwgV2ViS2l0OjpXZWJQcmVmZXJlbmNl
c1N0b3JlOjpWYWx1ZSghIVtfY29uZmlndXJhdGlvbiBfaW52aXNpYmxlQXV0b3BsYXlOb3RQZXJt
aXR0ZWRdKSk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnByZWZlcmVuY2VWYWx1ZXMoKS5zZXQo
V2ViS2l0OjpXZWJQcmVmZXJlbmNlc0tleTo6bWVkaWFEYXRhTG9hZHNBdXRvbWF0aWNhbGx5S2V5
KCksIFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZTo6VmFsdWUoISFbX2NvbmZpZ3VyYXRpb24g
X21lZGlhRGF0YUxvYWRzQXV0b21hdGljYWxseV0pKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+
cHJlZmVyZW5jZVZhbHVlcygpLnNldChXZWJLaXQ6OldlYlByZWZlcmVuY2VzS2V5OjpkYXRhRGV0
ZWN0b3JUeXBlc0tleSgpLCBXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmU6OlZhbHVlKHN0YXRp
Y19jYXN0PHVpbnQzMl90PihbX2NvbmZpZ3VyYXRpb24gZGF0YURldGVjdG9yVHlwZXNdKSkpOwog
I2VuZGlmCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBwYWdlQ29u
ZmlndXJhdGlvbi0+cHJlZmVyZW5jZVZhbHVlcygpLnNldChXZWJLaXQ6OldlYlByZWZlcmVuY2Vz
S2V5OjphbGxvd3NBaXJQbGF5Rm9yTWVkaWFQbGF5YmFja0tleSgpLCBXZWJLaXQ6OldlYlByZWZl
cmVuY2VzU3RvcmU6OlZhbHVlKCEhW19jb25maWd1cmF0aW9uIGFsbG93c0FpclBsYXlGb3JNZWRp
YVBsYXliYWNrXSkpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdDb25maWd1cmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLmgJKHJldmlzaW9uIDE5NDg3
NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmln
dXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwyOSBAQCB0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBXS1NlbGVjdGlvbkdyCiAgICAgV0tTZWxlY3Rpb25HcmFudWxhcml0eUR5
bmFtaWMsCiAgICAgV0tTZWxlY3Rpb25HcmFudWxhcml0eUNoYXJhY3RlciwKIH0gV0tfRU5VTV9B
VkFJTEFCTEVfSU9TKDhfMCk7CisKKy8qISBAZW51bSBXS0RhdGFEZXRlY3RvclR5cGVzCisgQGFi
c3RyYWN0IFRoZSB0eXBlIG9mIGRhdGEgd2Ugd2FudCB0byBkZXRlY3QuCisgQGNvbnN0YW50IFdL
RGF0YURldGVjdG9yVHlwZU5vbmUgTm8gZGV0ZWN0aW9uIGlzIHBlcmZvcm1lZC4KKyBAY29uc3Rh
bnQgV0tEYXRhRGV0ZWN0b3JUeXBlUGhvbmVOdW1iZXIgUGhvbmUgbnVtYmVycyBhcmUgZGV0ZWN0
ZWQgYW5kIHR1cm5lZCBpbnRvIGxpbmtzLgorIEBjb25zdGFudCBXS0RhdGFEZXRlY3RvclR5cGVM
aW5rIFVSTHMgaW4gdGV4dCBhcmUgZGV0ZWN0ZWQgYW5kIHR1cm5lZCBpbnRvIGxpbmtzLgorIEBj
b25zdGFudCBXS0RhdGFEZXRlY3RvclR5cGVBZGRyZXNzIEFkZHJlc3NlcyBhcmUgZGV0ZWN0ZWQg
YW5kIHR1cm5lZCBpbnRvIGxpbmtzLgorIEBjb25zdGFudCBXS0RhdGFEZXRlY3RvclR5cGVDYWxl
bmRhckV2ZW50IERhdGVzIGFuZCB0aW1lIHRoYXQgYXJlIGluIHRoZSBmdXR1cmUgYXJlIGRldGVj
dGVkIGFuZCB0dXJuZWQgaW50byBsaW5rcy4KKyBAY29uc3RhbnQgV0tEYXRhRGV0ZWN0b3JUeXBl
QWxsIEFsbCBvZiB0aGUgYWJvdmUgZGF0YSB0eXBlcyBhcmUgdHVybmVkIGludG8gbGlua3Mgd2hl
biBkZXRlY3RlZC4gQ2hvc2luZyB0aGlzIHZhbHVlIHdpbGwKKyBhdXRvbWF0aWNhbGx5IGluY2x1
ZGUgYW55IG5ldyBkZXRlY3Rpb24gdHlwZSB0aGF0IGlzIGFkZGVkLgorIEBkaXNjdXNzaW9uIEFu
IGV4YW1wbGUgb2YgaG93IHRoaXMgcHJvcGVydHkgbWF5IGFmZmVjdCB0aGUgY29udGVudCBsb2Fk
ZWQgaW4gdGhlIFdLV2ViVmlldyBpcyB0aGF0IGNvbnRlbnQgbGlrZQorICdWaXNpdCBhcHBsZS5j
b20gb24gSnVseSA0dGggb3IgY2FsbCAxIDgwMCA1NTUtNTU0NScgd2lsbCBiZSB0cmFuc2Zvcm1l
ZCB0byBhZGQgbGlua3MgYXJvdW5kICdhcHBsZS5jb20nLCAnSnVseSA0dGgnIGFuZCAnMSA4MDAg
NTU1LTU1NDUnCisgaWYgdGhlIGRhdGFEZXRlY3RvclR5cGVzIHByb3BlcnR5IGlzIHNldCB0byBX
S0RhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlciB8IFdLRGF0YURldGVjdG9yVHlwZUxpbmsgfCBX
S0RhdGFEZXRlY3RvclR5cGVDYWxlbmRhckV2ZW50LgorICovCit0eXBlZGVmIE5TX09QVElPTlMo
TlNVSW50ZWdlciwgV0tEYXRhRGV0ZWN0b3JUeXBlcykgeworICAgIFdLRGF0YURldGVjdG9yVHlw
ZU5vbmUgPSAwLAorICAgIFdLRGF0YURldGVjdG9yVHlwZVBob25lTnVtYmVyID0gMSA8PCAwLAor
ICAgIFdLRGF0YURldGVjdG9yVHlwZUxpbmsgPSAxIDw8IDEsCisgICAgV0tEYXRhRGV0ZWN0b3JU
eXBlQWRkcmVzcyA9IDEgPDwgMiwKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVDYWxlbmRhckV2ZW50
ID0gMSA8PCAzLAorICAgIFdLRGF0YURldGVjdG9yVHlwZUFsbCA9IE5TVUludGVnZXJNYXgKK30g
V0tfRU5VTV9BVkFJTEFCTEVfSU9TKFdLX0lPU19UQkEpOworCiAjZW5kaWYKIAogLyohIEEgV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBvYmplY3QgaXMgYSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXMg
d2l0aApAQCAtMTE5LDYgKzE0MiwxMSBAQCBXS19DTEFTU19BVkFJTEFCTEUoMTBfMTAsIDhfMCkK
ICAqLwogQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgYWxsb3dzUGljdHVyZUluUGljdHVyZU1l
ZGlhUGxheWJhY2sgV0tfQVZBSUxBQkxFKE5BLCA5XzApOwogCisvKiEgQGFic3RyYWN0IEFuIGVu
dW0gdmFsdWUgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBkYXRhIGRldGVjdGlvbiBkZXNpcmVkLgor
IEBkaXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFdLRGF0YURldGVjdG9yVHlwZU5vbmUu
CisgKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBXS0RhdGFEZXRlY3RvclR5cGVzIGRhdGFEZXRl
Y3RvclR5cGVzIFdLX0FWQUlMQUJMRShOQSwgV0tfSU9TX1RCQSk7CisKICNlbmRpZgogCiBAZW5k
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1tCShyZXZpc2lvbiAxOTQ4NzQpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24ubW0J
KHdvcmtpbmcgY29weSkKQEAgLTE5Miw2ICsxOTIsNyBAQCAtIChpZCljb3B5V2l0aFpvbmU6KE5T
Wm9uZSAqKXpvbmUKICAgICBjb25maWd1cmF0aW9uLT5fcmVxdWlyZXNVc2VyQWN0aW9uRm9yTWVk
aWFQbGF5YmFjayA9IHNlbGYtPl9yZXF1aXJlc1VzZXJBY3Rpb25Gb3JNZWRpYVBsYXliYWNrOwog
ICAgIGNvbmZpZ3VyYXRpb24tPl9yZXF1aXJlc1VzZXJBY3Rpb25Gb3JBdWRpb1BsYXliYWNrID0g
c2VsZi0+X3JlcXVpcmVzVXNlckFjdGlvbkZvckF1ZGlvUGxheWJhY2s7CiAgICAgY29uZmlndXJh
dGlvbi0+X3NlbGVjdGlvbkdyYW51bGFyaXR5ID0gc2VsZi0+X3NlbGVjdGlvbkdyYW51bGFyaXR5
OworICAgIGNvbmZpZ3VyYXRpb24tPl9kYXRhRGV0ZWN0b3JUeXBlcyA9IHNlbGYtPl9kYXRhRGV0
ZWN0b3JUeXBlczsKICNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBjb25maWd1cmF0aW9u
LT5fc2hvd3NVUkxzSW5Ub29sVGlwcyA9IHNlbGYtPl9zaG93c1VSTHNJblRvb2xUaXBzOwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2
aXNpb24gMTk0ODc0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMzLDYgKzI5MzMsNyBAQCB2b2lkIFdlYlBhZ2U6
OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgc2V0
dGluZ3Muc2V0VXNlSW1hZ2VEb2N1bWVudEZvclN1YmZyYW1lUERGKHRydWUpOworICAgIHNldHRp
bmdzLnNldERhdGFEZXRlY3RvclR5cGVzKHN0YXRpY19jYXN0PERhdGFEZXRlY3RvclR5cGVzPihz
dG9yZS5nZXRVSW50MzJWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6ZGF0YURldGVjdG9y
VHlwZXNLZXkoKSkpKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268782</attachid>
            <date>2016-01-12 10:58:53 -0800</date>
            <delta_ts>2016-01-15 16:26:55 -0800</delta_ts>
            <desc>Patch4</desc>
            <filename>ddwk2-part1.txt</filename>
            <type>text/plain</type>
            <size>45983</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0OTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE2LTAxLTEyICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAg
ICAgQWRkIHN1cHBvcnQgZm9yIERhdGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRh
cjovL3Byb2JsZW0vMjI4NTU5NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgZmVhdHVyZSBkZWZpbml0aW9uLgorCisgICAgICAgICogQ29u
ZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisKIDIwMTYtMDEtMTIgIEJlbmph
bWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gSlNDIGRv
ZXMgbm90IGJ1aWxkIHdpdGggRlRMX1VTRVNfQjMgb24gQVJNNjQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmlu
ZXMueGNjb25maWcJKHJldmlzaW9uIDE5NDg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
b25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwkod29ya2luZyBjb3B5KQpAQCAt
MTExLDYgKzExMSw3IEBAIEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFNbc2RrPW1hY29zeCpdID0K
IEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFNfbWFjb3N4X1dJVEhfSU5URVJOQUxfU0RLX1lFUyA9
IEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFM7CiAKIEVOQUJMRV9JT1NfVEVYVF9BVVRPU0laSU5H
W3Nkaz1pcGhvbmUqXSA9IEVOQUJMRV9JT1NfVEVYVF9BVVRPU0laSU5HOworRU5BQkxFX0lPU19E
QVRBREVURUNUSU9OW3Nkaz1pcGhvbmUqXSA9IEVOQUJMRV9JT1NfREFUQURFVEVDVElPTjsKIAog
RU5BQkxFX0lPU19UT1VDSF9FVkVOVFNbc2RrPWlwaG9uZSpdID0gJChFTkFCTEVfSU9TX1RPVUNI
X0VWRU5UU19pb3NfV0lUSF9JTlRFUk5BTF9TREtfJChVU0VfSU5URVJOQUxfU0RLKSk7CiBFTkFC
TEVfSU9TX1RPVUNIX0VWRU5UU19pb3NfV0lUSF9JTlRFUk5BTF9TREtfWUVTID0gRU5BQkxFX0lP
U19UT1VDSF9FVkVOVFM7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0ODc0KQorKysgU291cmNlL1dURi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNi0wMS0xMiAgRW5y
aWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciBEYXRhRGV0ZWN0b3JzIGluIFdLIChpT1MpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyOTg5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIyODU1
OTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
aW5nIGZlYXR1cmUgZGVmaW5pdGlvbiBmb3IgZGF0YSBkZXRlY3Rpb24uCisKKyAgICAgICAgKiB3
dGYvRmVhdHVyZURlZmluZXMuaDoKKwogMjAxNi0wMS0xMSAgQW5kcmVhcyBLbGluZyAgPGFrbGlu
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgTmV2ZXJEZXN0cm95ZWQgc2hvdWxkIHJlbGF4IGFkb3B0
aW9uIHJlcXVpcmVtZW50cyBvbiBhbGwgUmVmQ291bnRlZEJhc2Ugc3ViY2xhc3Nlcy4KSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvRmVhdHVyZURlZmluZXMuaAkocmV2aXNpb24gMTk0ODc0KQorKysgU291cmNlL1dURi93
dGYvRmVhdHVyZURlZmluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiwxMCBAQAog
I2RlZmluZSBFTkFCTEVfSU9TX1RFWFRfQVVUT1NJWklORyAxCiAjZW5kaWYKIAorI2lmICFkZWZp
bmVkKEVOQUJMRV9JT1NfREFUQURFVEVDVElPTikKKyNkZWZpbmUgRU5BQkxFX0lPU19EQVRBREVU
RUNUSU9OIDEKKyNlbmRpZgorCiAjaWYgIWRlZmluZWQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFMp
ICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAjZGVmaW5lIEVOQUJMRV9JT1NfVE9VQ0hfRVZF
TlRTIDEKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0ODc0KQorKysgU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTYt
MDEtMTIgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQg
c3VwcG9ydCBmb3IgRGF0YURldGVjdG9ycyBpbiBXSyAoaU9TKS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjk4OQorICAgICAgICByZGFyOi8vcHJv
YmxlbS8yMjg1NTk2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGltcGxlbWVudGluZyBEYXRhIERl
dGVjdG9ycyBzdXBwb3J0CisgICAgICAgIGluIFdLMiBvbiBpT1MuIFRoZSBwYXRjaCBhZGRzIGEg
bmV3IG1lbWViZXIgdG8gdGhlIFNldHRpbmdzIG9iamVjdAorICAgICAgICB0byByZXRyaWV2ZSB0
aGUgdHlwZSBvZiBkZXRlY3Rpb24gZGVzaXJlZC4gVGhlIERhdGFEZXRlY3Rpb24gZmlsZXMKKyAg
ICAgICAgaGF2ZSBiZWVuIG1vdmVkIHVuZGVyIGNvY29hLCBzaW5jZSB0aGV5IGFyZSBubyBsb25n
ZXIgT1NYIHNwZWNpZmljLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmlu
ZXMueGNjb25maWc6CisgICAgICAgICogQ29uZmlndXJhdGlvbnMvV2ViQ29yZS54Y2NvbmZpZzoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24uaC4KKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Rh
dGFEZXRlY3Rpb24ubW0uCisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3NpdGlvbldp
dGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJv
dW5kSGl0VGVzdFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRl
Y3RDb250ZW50SW5SYW5nZSk6CisgICAgICAgICogZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5o
OiBSZW1vdmVkLgorICAgICAgICAqIGVkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24ubW06IFJlbW92
ZWQuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZUZvclRoaXNGcmFtZSk6CisgICAgICAgICog
cGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaW46CisgICAgICAgICog
cGxhdGZvcm0vc3BpL21hYy9EYXRhRGV0ZWN0b3JzU1BJLmg6CisKIDIwMTYtMDEtMTEgIEJyYWR5
IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE1vZGVybiBJREI6IHN0b3Jh
Z2UvaW5kZXhlZGRiL2luZGV4LW11bHRpZW50cnkuaHRtbCBmYWlscyB1bmRlciBHdWFyZE1hbGxv
Yy9BU0FOLgpJbmRleDogU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmlu
ZXMueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMv
RmVhdHVyZURlZmluZXMueGNjb25maWcJKHJldmlzaW9uIDE5NDg3NCkKKysrIFNvdXJjZS9XZWJD
b3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTEsNiArMTExLDcgQEAgRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UU1tzZGs9bWFjb3N4
Kl0gPQogRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UU19tYWNvc3hfV0lUSF9JTlRFUk5BTF9TREtf
WUVTID0gRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UUzsKIAogRU5BQkxFX0lPU19URVhUX0FVVE9T
SVpJTkdbc2RrPWlwaG9uZSpdID0gRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkc7CitFTkFCTEVf
SU9TX0RBVEFERVRFQ1RJT05bc2RrPWlwaG9uZSpdID0gRU5BQkxFX0lPU19EQVRBREVURUNUSU9O
OwogCiBFTkFCTEVfSU9TX1RPVUNIX0VWRU5UU1tzZGs9aXBob25lKl0gPSAkKEVOQUJMRV9JT1Nf
VE9VQ0hfRVZFTlRTX2lvc19XSVRIX0lOVEVSTkFMX1NES18kKFVTRV9JTlRFUk5BTF9TREspKTsK
IEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTX2lvc19XSVRIX0lOVEVSTkFMX1NES19ZRVMgPSBFTkFC
TEVfSU9TX1RPVUNIX0VWRU5UUzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NvbmZpZ3VyYXRpb25z
L1dlYkNvcmUueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ29uZmlndXJh
dGlvbnMvV2ViQ29yZS54Y2NvbmZpZwkocmV2aXNpb24gMTk0ODc0KQorKysgU291cmNlL1dlYkNv
cmUvQ29uZmlndXJhdGlvbnMvV2ViQ29yZS54Y2NvbmZpZwkod29ya2luZyBjb3B5KQpAQCAtNTAs
NyArNTAsNyBAQCBQUk9EVUNUX05BTUUgPSBXZWJDb3JlOwogVU5FWFBPUlRFRF9TWU1CT0xTX0ZJ
TEUgPSBDb25maWd1cmF0aW9ucy9XZWJDb3JlLnVuZXhwOwogT1RIRVJfTERGTEFHUyA9ICQoaW5o
ZXJpdGVkKSAkKE9USEVSX0xERkxBR1NfUExBVEZPUk0pOwogT1RIRVJfTERGTEFHU19CQVNFID0g
LWxzcWxpdGUzIC1sb2JqYyAtbEFOR0xFOwotT1RIRVJfTERGTEFHU19CQVNFX2lvcyA9ICQoT1RI
RVJfTERGTEFHU19CQVNFKSAtZnJhbWV3b3JrIENGTmV0d29yayAtZnJhbWV3b3JrIENvcmVHcmFw
aGljcyAtZnJhbWV3b3JrIENvcmVUZXh0IC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJhbWV3b3Jr
IEdyYXBoaWNzU2VydmljZXMgLWZyYW1ld29yayBJbWFnZUlPIC1mcmFtZXdvcmsgT3BlbkdMRVMg
LWxNb2JpbGVHZXN0YWx0OworT1RIRVJfTERGTEFHU19CQVNFX2lvcyA9ICQoT1RIRVJfTERGTEFH
U19CQVNFKSAtZnJhbWV3b3JrIENGTmV0d29yayAtZnJhbWV3b3JrIENvcmVHcmFwaGljcyAtZnJh
bWV3b3JrIENvcmVUZXh0IC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJhbWV3b3JrIEdyYXBoaWNz
U2VydmljZXMgLWZyYW1ld29yayBJbWFnZUlPIC1mcmFtZXdvcmsgT3BlbkdMRVMgLWxNb2JpbGVH
ZXN0YWx0IC1mcmFtZXdvcmsgRGF0YURldGVjdG9yc0NvcmU7CiBPVEhFUl9MREZMQUdTX1BMQVRG
T1JNW3Nkaz1pcGhvbmVvcypdID0gJChPVEhFUl9MREZMQUdTX0JBU0VfaW9zKSAtZnJhbWV3b3Jr
IElPU3VyZmFjZTsKIE9USEVSX0xERkxBR1NfUExBVEZPUk1bc2RrPWlwaG9uZXNpbXVsYXRvcipd
ID0gJChPVEhFUl9MREZMQUdTX0JBU0VfaW9zKTsKIE9USEVSX0xERkxBR1NfUExBVEZPUk1bc2Rr
PW1hY29zeCpdID0gJChPVEhFUl9MREZMQUdTX0JBU0UpIC1zdWJfbGlicmFyeSBsaWJvYmpjIC11
bWJyZWxsYSBXZWJLaXQgLWFsbG93YWJsZV9jbGllbnQgV2ViQ29yZVRlc3RTdXBwb3J0IC1hbGxv
d2FibGVfY2xpZW50IFdlYktpdDIgLWFsbG93YWJsZV9jbGllbnQgV2ViS2l0TGVnYWN5IC1mcmFt
ZXdvcmsgQXBwbGljYXRpb25TZXJ2aWNlcyAtZnJhbWV3b3JrIEF1ZGlvVW5pdCAtZnJhbWV3b3Jr
IENhcmJvbiAtZnJhbWV3b3JrIENvY29hIC1mcmFtZXdvcmsgRGF0YURldGVjdG9yc0NvcmUgLWZy
YW1ld29yayBJT1N1cmZhY2UgLWZyYW1ld29yayBPcGVuR0w7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTQ4
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTExMzcsOCArMTEzNyw2IEBACiAJCTJENTAwMkZDMUI1NkQ3OTkw
MDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGll
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJE
NTAzNjY4MUJDREREQzQwMEUyMEJCMyAvKiBHZXN0dXJlRXZlbnRzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENTAzNjY3MUJDREREQzQwMEUyMEJC
MyAvKiBHZXN0dXJlRXZlbnRzLmNwcCAqLzsgfTsKIAkJMkQ1NjQ2QjAxQjhGODQ5MzAwM0M0OTk0
IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJENTY0NkFGMUI4Rjg0OTMwMDNDNDk5NCAvKiBEaWN0aW9uYXJ5UG9w
dXBJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMkQ1OEQ4NTUxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENThEODUzMUExNUY2NUYwMEE1
RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMkQ1OEQ4NTYxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rp
b24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDU4
RDg1NDFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5tbSAqLzsgfTsKIAkJMkQ1OUYx
QkYxQTAwNDRDNjAwMUYzRDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENTlGMUJFMUEwMDQ0QzYwMDFGM0QyOSAv
KiBEYXRhRGV0ZWN0b3JzU1BJLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMkQ1QTU5MkYxNTI1MjUyMzAwMzZFRTUxIC8qIEltYWdlT3JpZW50YXRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3
NDhENzQxMkNDM0Y4OTAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uY3BwICovOyB9OwogCQky
RDVBNTkzMTE1MjUyNUQwMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NDhENjYxMkNDMzc2MzAwMUZC
QTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtNTg3NCw2ICs1ODcyLDggQEAKIAkJQzUwRDBFODMwRkY0Mjcy
OTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MEQwRTgxMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdl
TmFtZXNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQzUxMzdDRjIxMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTEzN0NGMDExQTU4
Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmNwcCAqLzsgfTsKIAkJQzUxMzdDRjMxMUE1
ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMzdDRjExMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9N
U3RyaW5nTGlzdC5oICovOyB9OworCQlDNTIyN0RGMTFDM0M2REYxMDBGNUVENTQgLyogRGF0YURl
dGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzUyMjdERUYxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNTIyN0RGMjFDM0M2REY5MDBG
NUVENTQgLyogRGF0YURldGVjdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM1MjI3REYwMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9u
Lm1tICovOyB9OwogCQlDNTI3OEIwQzE3RjIxMkVBMDAzQTI5OTggLyogUGxhdGZvcm1QYXN0ZWJv
YXJkSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzUyNzhCMEIxN0YyMTJFQTAwM0EyOTk4IC8qIFBsYXRmb3JtUGFzdGVib2FyZElPUy5tbSAqLzsg
fTsKIAkJQzU0NDI3NEIxMUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xpc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NDQyNzQ5MTFBNTdFN0Ew
MDYzQTc0OSAvKiBET01TdHJpbmdMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzU1NjEwRjExMUE3MDRFQjAwQjgyRDI3IC8qIERPTVN0cmlu
Z0xpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzU1NjEwRjAxMUE3MDRFQjAwQjgyRDI3IC8qIERPTVN0cmluZ0xpc3QuY3BwICovOyB9OwpAQCAt
ODUwNCw4ICs4NTA0LDYgQEAKIAkJMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGls
aXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGF0aFV0aWxpdGllcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDUwMzY2NzFCQ0REREM0MDBFMjBCQjMg
LyogR2VzdHVyZUV2ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHZXN0dXJlRXZlbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1NjQ2
QUYxQjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGlvbmFyeVBvcHVwSW5mby5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyRDU4RDg1MzFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRGV0ZWN0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJENThEODU0MUExNUY2NUYwMEE1RjcyNiAvKiBE
YXRhRGV0ZWN0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RGF0YURldGVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1OUYxQkUx
QTAwNDRDNjAwMUYzRDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGF0YURldGVjdG9yc1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyRDVCQzQyNTE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRp
b25FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWN1cml0eVBvbGlj
eVZpb2xhdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENUJDNDI2
MTZGODgyQkUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNjk1LDYgKzEzNjkzLDggQEAKIAkJQzUwRDBF
ODEwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZU5hbWVzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDNTEzN0NGMDExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NU3RyaW5nTGlzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MTM3Q0YxMTFBNTgzNzgwMDRBREI5
OSAvKiBKU0RPTVN0cmluZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNET01TdHJpbmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MjI3REVG
MUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERhdGFEZXRlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzUyMjdERjAxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24ubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEYXRhRGV0ZWN0aW9uLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDNTI3OEIwQjE3RjIxMkVBMDAzQTI5OTggLyogUGxhdGZv
cm1QYXN0ZWJvYXJkSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDNTQ0Mjc0OTExQTU3RTdBMDA2M0E3NDkgLyogRE9NU3RyaW5nTGlzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01TdHJpbmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUM1NDQyNzRBMTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01TdHJpbmdMaXN0LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE3ODYzLDYgKzE3ODYzLDggQEAKIAkJN0MzRTUxMDcxOERGOEYx
MjAwQzExMkY3IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQlDNTIyN0RFRjFDM0M2REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5oICov
LAorCQkJCUM1MjI3REYwMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1tICovLAog
CQkJCTlCNTVFRUVBMUIzRjNGRUYwMDUzNDJCQyAvKiBFZGl0b3JDb2NvYS5oICovLAogCQkJCTlC
NTVFRUU4MUIzRTg4OTgwMDUzNDJCQyAvKiBFZGl0b3JDb2NvYS5tbSAqLywKIAkJCQk3QzNFNTEw
ODE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5oICovLApAQCAtMjMxNjMsOCArMjMx
NjUsNiBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQ0U3QjJEQUYxNTg2QUJBRDAwOThCM0ZBIC8q
IEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oICovLAogCQkJCUNFN0IyREIwMTU4NkFCQUQw
MDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0gKi8sCi0JCQkJMkQ1OEQ4
NTMxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24uaCAqLywKLQkJCQkyRDU4RDg1NDFB
MTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5tbSAqLywKIAkJCQk5MzdGRjNENDFBMTAx
MkQ2MDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5oICovLAogCQkJCTkzN0ZGM0Q2MUExMDEz
MUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCUVENTAxREM1MEIyNDlG
MjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gKi8sCkBAIC0yNTAzOCw3ICsyNTAzOCw2IEBACiAJ
CQkJOTdCQzZBMzAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhyZWFkLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5N0JDNkEzMjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCRTIzNDgwRDE4QTk4NzE0MDBFNEI2RTggLyogRGF0YUN1ZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkQ1OEQ4NTUxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRl
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUUyQjRFMUFGRjA2Q0EwMDk3NkY5RiAvKiBE
YXRhRGV0ZWN0b3JzQ29yZVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ1OUYxQkYxQTAwNDRD
NjAwMUYzRDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjI3
NDZGMEU4MzY2NDUwMEU3Rjk3NSAvKiBEYXRhUmVmLmggaW4gSGVhZGVycyAqLywKQEAgLTI2MDA5
LDYgKzI2MDA4LDcgQEAKIAkJCQlCMjc1MzU3NTBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NzYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemVI
YXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTEyNTI0RDFBMUE3N0RFMDA4NjQ0ODAgLyogSU9Q
TUxpYlNQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzUyMjdERjExQzNDNkRGMTAwRjVFRDU0IC8q
IERhdGFEZXRlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0REVGNjQzMUE2RkY5MjcwMEQ0
NUVFQyAvKiBJT1JldHVyblNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQwQjRBQUIxOERBMUND
RDAwNDM0REUxIC8qIElPU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUMyMUU1N0QxODNF
RDFGRjAwMUMyODlEIC8qIElPU3VyZmFjZVBvb2wuaCBpbiBIZWFkZXJzICovLApAQCAtMjg3MTMs
NiArMjg3MTMsNyBAQAogCQkJCTg1MDMxQjNGMEE0NEVGQzcwMEY5OTJFMCAvKiBDbGlwYm9hcmRF
dmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1ODAzNzE2MTFBNjZGMDBBMDBCQUY1MTkgLyog
Q2xpcFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFQTc2MzUxNDYwQjcxQTAwOEIzMUYx
IC8qIENsb2NrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUM1MjI3REYyMUMzQzZERjkwMEY1RUQ1
NCAvKiBEYXRhRGV0ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFQTc2MzQxNDYwQjU2
RjAwOEIzMUYxIC8qIENsb2NrR2VuZXJpYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5QkQ4QTk1
QTE4QkVGQzc2MDA5ODdFOUEgLyogQ29sbGVjdGlvbkluZGV4Q2FjaGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjI3NTM1NjYwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjg4OTEsNyArMjg4OTIsNiBAQAogCQkJCTk3QkM2QTJGMTUwNUYwODEwMDFCNzRB
QyAvKiBEYXRhYmFzZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNkEzMTE1MDVG
MDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJF
MjM0ODBDMThBOTg3MEIwMEU0QjZFOCAvKiBEYXRhQ3VlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTJENThEODU2MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM2NDY0MUQxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFzZXRET01TdHJpbmdNYXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4NDk0MUIwQjVGRTUwNzAwMUUyMzdBIC8qIERhdGFU
cmFuc2Zlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFGRjA4MjQ1RTU5MDAxRTlBQkMg
LyogRGF0YVRyYW5zZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAkocmV2aXNpb24gMTk0NTkxKQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLmg6MTk0NTkxKQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YURldGVjdGlvbl9o
CisjZGVmaW5lIERhdGFEZXRlY3Rpb25faAorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0
IDx3dGYvUmVmUHRyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1Mg
RERBY3Rpb25Db250ZXh0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UmVj
dDsKK2NsYXNzIEhpdFRlc3RSZXN1bHQ7CitjbGFzcyBSYW5nZTsKKworY2xhc3MgRGF0YURldGVj
dGlvbiB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJldGFpblB0cjxEREFj
dGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+
JiBkZXRlY3RlZERhdGFSYW5nZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCisKKyNlbmRpZiAvLyBEYXRhRGV0ZWN0aW9uX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2lmbmRlZiBEYXRhRGV0ZWN0aW9uX2gK
ICNkZWZpbmUgRGF0YURldGVjdGlvbl9oCiAKLSNpZiBQTEFURk9STShNQUMpCi0KICNpbXBvcnQg
PHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtMzksMTMgKzM3
LDI1IEBAIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBSYW5n
ZTsKIAorZW51bSBEYXRhRGV0ZWN0b3JUeXBlcyB7CisgICAgRGF0YURldGVjdG9yVHlwZU5vbmUg
PSAwLAorICAgIERhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlciA9IDEgPDwgMCwKKyAgICBEYXRh
RGV0ZWN0b3JUeXBlTGluayA9IDEgPDwgMSwKKyAgICBEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcyA9
IDEgPDwgMiwKKyAgICBEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCA9IDEgPDwgMywKKyAg
ICBEYXRhRGV0ZWN0b3JUeXBlQWxsID0gMHhGRkZGCit9OworCiBjbGFzcyBEYXRhRGV0ZWN0aW9u
IHsKIHB1YmxpYzoKKyNpZiBQTEFURk9STShNQUMpCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0
KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94
LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSk7CisjZW5kaWYKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgZGV0ZWN0Q29udGVudEluUmFu
Z2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGV0ZWN0b3JUeXBlcyk7CisjZW5k
aWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKLQogI2VuZGlmIC8vIERhdGFEZXRlY3Rpb25faApJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24gMTk0NTkxKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLm1tOjE5NDU5MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJEYXRhRGV0ZWN0aW9uLmgi
CisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIkRhdGFEZXRlY3RvcnNTUEkuaCIKKyNp
bXBvcnQgIkZyYW1lVmlldy5oIgorI2ltcG9ydCAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
aCIKKyNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbXBvcnQgIk5vZGUuaCIKKyNpbXBvcnQg
IlJhbmdlLmgiCisjaW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKKyNpbXBvcnQgIlRleHRJdGVyYXRv
ci5oIgorI2ltcG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgiCisjaW1wb3J0ICJWaXNpYmxlVW5pdHMu
aCIKKyNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJh
bmdlKFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiwgUmVmUHRyPFJhbmdlPiBjb250ZXh0UmFuZ2Us
IEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVj
dGVkRGF0YVJhbmdlKQoreworICAgIFN0cmluZyBmdWxsUGxhaW5UZXh0U3RyaW5nID0gcGxhaW5U
ZXh0KGNvbnRleHRSYW5nZS5nZXQoKSk7CisgICAgaW50IGhpdExvY2F0aW9uID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoY29udGV4dFJhbmdlLT5zdGFydFBvc2l0aW9uKCks
IHBvc2l0aW9uKS5nZXQoKSk7CisKKyAgICBSZXRhaW5QdHI8RERTY2FubmVyUmVmPiBzY2FubmVy
ID0gYWRvcHRDRihERFNjYW5uZXJDcmVhdGUoRERTY2FubmVyVHlwZVN0YW5kYXJkLCAwLCBudWxs
cHRyKSk7CisgICAgUmV0YWluUHRyPEREU2NhblF1ZXJ5UmVmPiBzY2FuUXVlcnkgPSBhZG9wdENG
KEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmdWxsUGxh
aW5UZXh0U3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIGZ1bGxQ
bGFpblRleHRTdHJpbmcubGVuZ3RoKCkpKSk7CisKKyAgICBpZiAoIUREU2Nhbm5lclNjYW5RdWVy
eShzY2FubmVyLmdldCgpLCBzY2FuUXVlcnkuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiByZXN1bHRzID0gYWRvcHRDRihERFNjYW5u
ZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCksIEREU2Nhbm5lckNvcHlSZXN1
bHRzT3B0aW9uc05vT3ZlcmxhcCkpOworCisgICAgLy8gRmluZCB0aGUgRERSZXN1bHRSZWYgdGhh
dCBpbnRlcnNlY3RzIHRoZSBoaXRUZXN0UmVzdWx0J3MgVmlzaWJsZVBvc2l0aW9uLgorICAgIERE
UmVzdWx0UmVmIG1haW5SZXN1bHQgPSBudWxscHRyOworICAgIFJlZlB0cjxSYW5nZT4gbWFpblJl
c3VsdFJhbmdlOworICAgIENGSW5kZXggcmVzdWx0Q291bnQgPSBDRkFycmF5R2V0Q291bnQocmVz
dWx0cy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgcmVzdWx0Q291bnQ7IGkr
KykgeworICAgICAgICBERFJlc3VsdFJlZiByZXN1bHQgPSAoRERSZXN1bHRSZWYpQ0ZBcnJheUdl
dFZhbHVlQXRJbmRleChyZXN1bHRzLmdldCgpLCBpKTsKKyAgICAgICAgQ0ZSYW5nZSByZXN1bHRS
YW5nZUluQ29udGV4dCA9IEREUmVzdWx0R2V0UmFuZ2UocmVzdWx0KTsKKyAgICAgICAgaWYgKGhp
dExvY2F0aW9uID49IHJlc3VsdFJhbmdlSW5Db250ZXh0LmxvY2F0aW9uICYmIChoaXRMb2NhdGlv
biAtIHJlc3VsdFJhbmdlSW5Db250ZXh0LmxvY2F0aW9uKSA8IHJlc3VsdFJhbmdlSW5Db250ZXh0
Lmxlbmd0aCkgeworICAgICAgICAgICAgbWFpblJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgICAg
IG1haW5SZXN1bHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoY29udGV4dFJhbmdlLmdl
dCgpLCByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbiwgcmVzdWx0UmFuZ2VJbkNvbnRleHQu
bGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFtYWluUmVzdWx0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxE
REFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHQgPSBhZG9wdE5TKFthbGxvY0REQWN0aW9uQ29u
dGV4dEluc3RhbmNlKCkgaW5pdF0pOworICAgIFthY3Rpb25Db250ZXh0IHNldEFsbFJlc3VsdHM6
QFsgKGlkKW1haW5SZXN1bHQgXV07CisgICAgW2FjdGlvbkNvbnRleHQgc2V0TWFpblJlc3VsdDpt
YWluUmVzdWx0XTsKKworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIG1haW5SZXN1
bHRSYW5nZS0+YWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOworICAgIGRldGVjdGVkRGF0YUJvdW5k
aW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtYWluUmVz
dWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBx
dWFkIDogcXVhZHMpCisgICAgICAgIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LnVuaXRlKGZyYW1l
Vmlldy0+Y29udGVudHNUb1dpbmRvdyhxdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpKTsKKyAg
ICAKKyAgICBkZXRlY3RlZERhdGFSYW5nZSA9IG1haW5SZXN1bHRSYW5nZTsKKyAgICAKKyAgICBy
ZXR1cm4gYWN0aW9uQ29udGV4dDsKK30KKworUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0
YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJl
c3VsdCYgaGl0VGVzdFJlc3VsdCwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwg
UmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCit7CisgICAgaWYgKCFEYXRhRGV0ZWN0
b3JzTGlicmFyeSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE5vZGUqIG5vZGUg
PSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVy
KCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb247CisgICAgUmVmUHRyPFJhbmdlPiBjb250ZXh0UmFuZ2U7
CisKKyAgICBpZiAoIWlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigqbm9kZSkpIHsKKyAg
ICAgICAgcG9zaXRpb24gPSByZW5kZXJlci0+cG9zaXRpb25Gb3JQb2ludChoaXRUZXN0UmVzdWx0
LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7CisgICAgICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkK
KyAgICAgICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUp
OworCisgICAgICAgIGNvbnRleHRSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5
Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKKyAgICAgICAgaWYgKCFjb250ZXh0UmFuZ2UpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9IGVsc2UgeworICAgICAgICBGcmFtZSog
ZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgICAgIGlmICghZnJhbWUpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBJbnRQb2ludCBmcmFtZVBvaW50
ID0gaGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCk7CisgICAgICAg
IGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2ludCkpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBmcmFtZS0+
dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7CisgICAgICAgIGlmIChwb3NpdGlv
bi5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGNvbnRl
eHRSYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgTGluZUdy
YW51bGFyaXR5LCBEaXJlY3Rpb25Gb3J3YXJkKTsKKyAgICAgICAgaWYgKCFjb250ZXh0UmFuZ2Up
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gZGV0ZWN0
SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UocG9zaXRpb24sIGNvbnRleHRSYW5nZSwgZGV0ZWN0ZWRE
YXRhQm91bmRpbmdCb3gsIGRldGVjdGVkRGF0YVJhbmdlKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw4ICsyNiw2IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkRhdGFEZXRl
Y3Rpb24uaCIKIAotI2lmIFBMQVRGT1JNKE1BQykKLQogI2ltcG9ydCAiRGF0YURldGVjdG9yc1NQ
SS5oIgogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudC5oIgpAQCAtNDIsNiArNDAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNp
ZiBQTEFURk9STShNQUMpCisKIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRl
Y3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24sIFJlZlB0
cjxSYW5nZT4gY29udGV4dFJhbmdlLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94
LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKIHsKICAgICBTdHJpbmcgZnVsbFBs
YWluVGV4dFN0cmluZyA9IHBsYWluVGV4dChjb250ZXh0UmFuZ2UuZ2V0KCkpOwpAQCAtMTMxLDcg
KzEzMSwxMSBAQCBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBEYXRhRGV0ZWN0aW9uCiAKICAg
ICByZXR1cm4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UocG9zaXRpb24sIGNvbnRleHRS
YW5nZSwgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIGRldGVjdGVkRGF0YVJhbmdlKTsKIH0KKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIERhdGFEZXRl
Y3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mLCBEYXRhRGV0ZWN0b3JU
eXBlcykKK3sKK30KKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGF0YURldGVj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRl
Y3Rpb24uaAkocmV2aXNpb24gMTk0ODc0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIERhdGFEZXRlY3Rpb25faAotI2RlZmluZSBEYXRhRGV0ZWN0aW9uX2gKLQot
I2lmIFBMQVRGT1JNKE1BQykKLQotI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgotI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgotCi1PQkpDX0NMQVNTIEREQWN0aW9uQ29udGV4dDsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBIaXRUZXN0UmVzdWx0OwotY2xh
c3MgUmFuZ2U7Ci0KLWNsYXNzIERhdGFEZXRlY3Rpb24gewotcHVibGljOgotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXJvdW5k
SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiwgRmxvYXRSZWN0JiBkZXRlY3RlZERh
dGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCi0jZW5k
aWYgLy8gRGF0YURldGVjdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9E
YXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDE5NDg3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMTM3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRGF0YURldGVjdGlvbi5oIgotCi0jaWYgUExBVEZPUk0o
TUFDKQotCi0jaW1wb3J0ICJEYXRhRGV0ZWN0b3JzU1BJLmgiCi0jaW1wb3J0ICJGcmFtZVZpZXcu
aCIKLSNpbXBvcnQgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCi0jaW1wb3J0ICJIaXRU
ZXN0UmVzdWx0LmgiCi0jaW1wb3J0ICJOb2RlLmgiCi0jaW1wb3J0ICJSYW5nZS5oIgotI2ltcG9y
dCAiUmVuZGVyT2JqZWN0LmgiCi0jaW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIKLSNpbXBvcnQgIlZp
c2libGVQb3NpdGlvbi5oIgotI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCi0jaW1wb3J0ICJodG1s
ZWRpdGluZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBSZXRhaW5QdHI8RERB
Y3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb24sIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlLCBGbG9hdFJlY3QmIGRldGVj
dGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKLXsK
LSAgICBTdHJpbmcgZnVsbFBsYWluVGV4dFN0cmluZyA9IHBsYWluVGV4dChjb250ZXh0UmFuZ2Uu
Z2V0KCkpOwotICAgIGludCBoaXRMb2NhdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bWFrZVJhbmdlKGNvbnRleHRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkp
OwotCi0gICAgUmV0YWluUHRyPEREU2Nhbm5lclJlZj4gc2Nhbm5lciA9IGFkb3B0Q0YoRERTY2Fu
bmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwgMCwgbnVsbHB0cikpOwotICAgIFJldGFp
blB0cjxERFNjYW5RdWVyeVJlZj4gc2NhblF1ZXJ5ID0gYWRvcHRDRihERFNjYW5RdWVyeUNyZWF0
ZUZyb21TdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnVsbFBsYWluVGV4dFN0cmluZy5jcmVh
dGVDRlN0cmluZygpLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBmdWxsUGxhaW5UZXh0U3RyaW5nLmxl
bmd0aCgpKSkpOwotCi0gICAgaWYgKCFERFNjYW5uZXJTY2FuUXVlcnkoc2Nhbm5lci5nZXQoKSwg
c2NhblF1ZXJ5LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5Q
dHI8Q0ZBcnJheVJlZj4gcmVzdWx0cyA9IGFkb3B0Q0YoRERTY2FubmVyQ29weVJlc3VsdHNXaXRo
T3B0aW9ucyhzY2FubmVyLmdldCgpLCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNOb092ZXJs
YXApKTsKLQotICAgIC8vIEZpbmQgdGhlIEREUmVzdWx0UmVmIHRoYXQgaW50ZXJzZWN0cyB0aGUg
aGl0VGVzdFJlc3VsdCdzIFZpc2libGVQb3NpdGlvbi4KLSAgICBERFJlc3VsdFJlZiBtYWluUmVz
dWx0ID0gbnVsbHB0cjsKLSAgICBSZWZQdHI8UmFuZ2U+IG1haW5SZXN1bHRSYW5nZTsKLSAgICBD
RkluZGV4IHJlc3VsdENvdW50ID0gQ0ZBcnJheUdldENvdW50KHJlc3VsdHMuZ2V0KCkpOwotICAg
IGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHJlc3VsdENvdW50OyBpKyspIHsKLSAgICAgICAgRERS
ZXN1bHRSZWYgcmVzdWx0ID0gKEREUmVzdWx0UmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocmVz
dWx0cy5nZXQoKSwgaSk7Ci0gICAgICAgIENGUmFuZ2UgcmVzdWx0UmFuZ2VJbkNvbnRleHQgPSBE
RFJlc3VsdEdldFJhbmdlKHJlc3VsdCk7Ci0gICAgICAgIGlmIChoaXRMb2NhdGlvbiA+PSByZXN1
bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbiAmJiAoaGl0TG9jYXRpb24gLSByZXN1bHRSYW5nZUlu
Q29udGV4dC5sb2NhdGlvbikgPCByZXN1bHRSYW5nZUluQ29udGV4dC5sZW5ndGgpIHsKLSAgICAg
ICAgICAgIG1haW5SZXN1bHQgPSByZXN1bHQ7Ci0gICAgICAgICAgICBtYWluUmVzdWx0UmFuZ2Ug
PSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGNvbnRleHRSYW5nZS5nZXQoKSwgcmVzdWx0UmFuZ2VJ
bkNvbnRleHQubG9jYXRpb24sIHJlc3VsdFJhbmdlSW5Db250ZXh0Lmxlbmd0aCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbWFpblJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBh
Y3Rpb25Db250ZXh0ID0gYWRvcHROUyhbYWxsb2NEREFjdGlvbkNvbnRleHRJbnN0YW5jZSgpIGlu
aXRdKTsKLSAgICBbYWN0aW9uQ29udGV4dCBzZXRBbGxSZXN1bHRzOkBbIChpZCltYWluUmVzdWx0
IF1dOwotICAgIFthY3Rpb25Db250ZXh0IHNldE1haW5SZXN1bHQ6bWFpblJlc3VsdF07Ci0KLSAg
ICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICBtYWluUmVzdWx0UmFuZ2UtPmFic29sdXRl
VGV4dFF1YWRzKHF1YWRzKTsKLSAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IEZsb2F0UmVj
dCgpOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbWFpblJlc3VsdFJhbmdlLT5vd25lckRv
Y3VtZW50KCkudmlldygpOwotICAgIGZvciAoY29uc3QgYXV0byYgcXVhZCA6IHF1YWRzKQotICAg
ICAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveC51bml0ZShmcmFtZVZpZXctPmNvbnRlbnRzVG9X
aW5kb3cocXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKSk7Ci0gICAgCi0gICAgZGV0ZWN0ZWRE
YXRhUmFuZ2UgPSBtYWluUmVzdWx0UmFuZ2U7Ci0gICAgCi0gICAgcmV0dXJuIGFjdGlvbkNvbnRl
eHQ7Ci19Ci0KLVJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IERhdGFEZXRlY3Rpb246OmRldGVj
dEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1
bHQsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRl
dGVjdGVkRGF0YVJhbmdlKQotewotICAgIGlmICghRGF0YURldGVjdG9yc0xpYnJhcnkoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVu
ZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBv
c2l0aW9uOwotICAgIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlOwotCi0gICAgaWYgKCFpczxI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKm5vZGUpKSB7Ci0gICAgICAgIHBvc2l0aW9uID0g
cmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVzdFJlc3VsdC5sb2NhbFBvaW50KCksIG51
bGxwdHIpOwotICAgICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgICAgICBwb3Np
dGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKLQotICAgICAgICBjb250
ZXh0UmFuZ2UgPSByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRp
b24sIDI1MCk7Ci0gICAgICAgIGlmICghY29udGV4dFJhbmdlKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9j
dW1lbnQoKS5mcmFtZSgpOwotICAgICAgICBpZiAoIWZyYW1lKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICAgICAgSW50UG9pbnQgZnJhbWVQb2ludCA9IGhpdFRlc3RSZXN1bHQu
cm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpOwotICAgICAgICBpZiAoIWZyYW1lLT5yYW5n
ZUZvclBvaW50KGZyYW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZv
clBvaW50KGZyYW1lUG9pbnQpOwotICAgICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBjb250ZXh0UmFuZ2UgPSBlbmNsb3Np
bmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIExpbmVHcmFudWxhcml0eSwgRGlyZWN0
aW9uRm9yd2FyZCk7Ci0gICAgICAgIGlmICghY29udGV4dFJhbmdlKQotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0
aFJhbmdlKHBvc2l0aW9uLCBjb250ZXh0UmFuZ2UsIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBk
ZXRlY3RlZERhdGFSYW5nZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAkocmV2aXNpb24gMTk0ODc0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOSBAQAogI2luY2x1ZGUgIkNvbnRlbnRT
ZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiRE9NV2luZG93LmgiCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiRGF0YURldGVj
dGlvbi5oIgorI2VuZGlmCiAjaW5jbHVkZSAiRGF0YWJhc2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAi
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCIKICNpbmNsdWRlICJEaWFnbm9zdGljTG9nZ2luZ0tl
eXMuaCIKQEAgLTIyNjMsNiArMjI2NiwxMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja0xvYWRD
b21wbGV0ZUZvclRoCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1fY2xp
ZW50LmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpOwogICAgICAgICAgICAgICAgIGxvYWRpbmdFdmVu
dCA9IEFYT2JqZWN0Q2FjaGU6OkFYTG9hZGluZ0ZpbmlzaGVkOworI2lmIEVOQUJMRShJT1NfREFU
QURFVEVDVElPTikKKyAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS5zZXR0aW5ncygpLmRhdGFE
ZXRlY3RvclR5cGVzKCkgIT0gRGF0YURldGVjdG9yVHlwZU5vbmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgUmVmUHRyPFJhbmdlPiBkb2N1bWVudFJhbmdlID0gbWFrZVJhbmdlKGZpcnN0UG9zaXRp
b25Jbk5vZGUobV9mcmFtZS5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSksIGxhc3RQb3Np
dGlvbkluTm9kZShtX2ZyYW1lLmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgIERhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKGRvY3Vt
ZW50UmFuZ2UsIG1fZnJhbWUuc2V0dGluZ3MoKS5kYXRhRGV0ZWN0b3JUeXBlcygpKTsKKyAgICAg
ICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gTm90
aWZ5IGFjY2Vzc2liaWxpdHkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCShyZXZpc2lvbiAx
OTQ4NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDkgQEAKICNpZm5kZWYgU2V0dGluZ3NfaAogI2RlZmluZSBTZXR0aW5nc19o
CiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEYXRhRGV0ZWN0aW9uLmgiCisjZW5k
aWYKICNpbmNsdWRlICJFZGl0aW5nQmVoYXZpb3JUeXBlcy5oIgogI2luY2x1ZGUgIkludFNpemUu
aCIKICNpbmNsdWRlICJVUkwuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgkocmV2aXNp
b24gMTk0ODc0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgkod29ya2luZyBj
b3B5KQpAQCAtMjI4LDYgKzIyOCw3IEBAIGFnZ3Jlc3NpdmVUaWxlUmV0ZW50aW9uRW5hYmxlZCBp
bml0aWFsPWYKIHRlbXBvcmFyeVRpbGVDb2hvcnRSZXRlbnRpb25FbmFibGVkIGluaXRpYWw9dHJ1
ZQogCiB1c2VJbWFnZURvY3VtZW50Rm9yU3ViZnJhbWVQREYgaW5pdGlhbD1mYWxzZQorZGF0YURl
dGVjdG9yVHlwZXMgdHlwZT1EYXRhRGV0ZWN0b3JUeXBlcywgaW5pdGlhbD1EYXRhRGV0ZWN0b3JU
eXBlTm9uZSwgY29uZGl0aW9uYWw9SU9TX0RBVEFERVRFQ1RJT04KIAogIyBBbGxvdyBTb3VyY2VC
dWZmZXJzIHRvIHN0b3JlIHVwIHRvIDMwNE1CIGVhY2gsIGVub3VnaCBmb3IgYXBwcm94aW1hdGVs
eSBmaXZlIG1pbnV0ZXMKICMgb2YgMTA4MHAgdmlkZW8gYW5kIHN0ZXJlbyBhdWRpby4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9tYWMvRGF0YURldGVjdG9yc1NQSS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9tYWMvRGF0YURldGVjdG9yc1NQ
SS5oCShyZXZpc2lvbiAxOTQ4NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFj
L0RhdGFEZXRlY3RvcnNTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDEyIEBACiAK
ICNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQogCiAjaW1wb3J0
IDxXZWJDb3JlL0RhdGFEZXRlY3RvcnNDb3JlU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRM
aW5raW5nLmg+CiAKKyNpZiBQTEFURk9STShNQUMpCisKICNpZiBVU0UoQVBQTEVfSU5URVJOQUxf
U0RLKQogCiAvLyBDYW4ndCBpbmNsdWRlIEREQWN0aW9uLmggYmVjYXVzZSBhcyBvZiB0aGlzIHdy
aXRpbmcgaXQgaXMgYSBwcml2YXRlIGhlYWRlciB0aGF0IGluY2x1ZGVzIGEgbm9uLXByaXZhdGUg
aGVhZGVyIHdpdGggYW4gIiIgaW5jbHVkZS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NDg3
NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI2IEBACisyMDE2LTAxLTEyICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERhdGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAg
ICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZCBpbXBsZW1l
bnRpbmcgRGF0YSBEZXRlY3RvcnMgc3VwcG9ydAorICAgICAgICBpbiBXSzIgb24gaU9TLiBUaGUg
cGF0Y2ggYWRkcyBhIG5ldyBwcm9wZXJ0eSB0byB0aGUgY29uZmlndXJhdGlvbgorICAgICAgICBv
YmplY3QgdG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgZGV0ZWN0aW9uIGRlc2lyZWQgYW5kIHByb3Bh
Z2F0ZXMKKyAgICAgICAgdG8gdGhlIFdlYlByb2Nlc3MuCisKKyAgICAgICAgKiBDb25maWd1cmF0
aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzoKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVy
ZW5jZXNEZWZpbml0aW9ucy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgaW5pdFdpdGhGcmFtZTpjb25maWd1cmF0aW9u
Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlv
bi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlv
bi5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBjb3B5V2l0aFpvbmU6XSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyk6CisKIDIwMTYtMDEtMTEgIEFuZGVycyBD
YXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIENGTWFr
ZUNvbGxlY3RhYmxlLCBpdCBpcyBhIG5vLW9wCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9Db25maWd1
cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwkocmV2aXNpb24gMTk0
ODc0KQorKysgU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNj
b25maWcJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEsNyBAQCBFTkFCTEVfTUFDX0dFU1RV
UkVfRVZFTlRTW3Nkaz1tYWNvc3gqXSA9CiBFTkFCTEVfTUFDX0dFU1RVUkVfRVZFTlRTX21hY29z
eF9XSVRIX0lOVEVSTkFMX1NES19ZRVMgPSBFTkFCTEVfTUFDX0dFU1RVUkVfRVZFTlRTOwogCiBF
TkFCTEVfSU9TX1RFWFRfQVVUT1NJWklOR1tzZGs9aXBob25lKl0gPSBFTkFCTEVfSU9TX1RFWFRf
QVVUT1NJWklORzsKK0VOQUJMRV9JT1NfREFUQURFVEVDVElPTltzZGs9aXBob25lKl0gPSBFTkFC
TEVfSU9TX0RBVEFERVRFQ1RJT047CiAKIEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTW3Nkaz1pcGhv
bmUqXSA9ICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9zX1dJVEhfSU5URVJOQUxfU0RLXyQo
VVNFX0lOVEVSTkFMX1NESykpOwogRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9zX1dJVEhfSU5U
RVJOQUxfU0RLX1lFUyA9IEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTOwpJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oCShyZXZpc2lv
biAxOTQ4NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDcgQEAKICAgICBtYWNybyhJbnNw
ZWN0b3JBdHRhY2htZW50U2lkZSwgaW5zcGVjdG9yQXR0YWNobWVudFNpZGUsIFVJbnQzMiwgdWlu
dDMyX3QsIDApIFwKICAgICBtYWNybyhTdG9yYWdlQmxvY2tpbmdQb2xpY3ksIHN0b3JhZ2VCbG9j
a2luZ1BvbGljeSwgVUludDMyLCB1aW50MzJfdCwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OkJs
b2NrVGhpcmRQYXJ0eVN0b3JhZ2UpIFwKICAgICBtYWNybyhKYXZhU2NyaXB0UnVudGltZUZsYWdz
LCBqYXZhU2NyaXB0UnVudGltZUZsYWdzLCBVSW50MzIsIHVpbnQzMl90LCAwKSBcCisgICAgbWFj
cm8oRGF0YURldGVjdG9yVHlwZXMsIGRhdGFEZXRlY3RvclR5cGVzLCBVSW50MzIsIHVpbnQzMl90
LCAwKSBcCiAgICAgXAogCiAjZGVmaW5lIEZPUl9FQUNIX1dFQktJVF9ERUJVR19CT09MX1BSRUZF
UkVOQ0UobWFjcm8pIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAxOTQ4NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzgyLDYg
KzM4Miw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnIKICAgICBw
YWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5jZVZhbHVlcygpLnNldChXZWJLaXQ6OldlYlByZWZl
cmVuY2VzS2V5OjpyZXF1aXJlc1VzZXJHZXN0dXJlRm9yQXVkaW9QbGF5YmFja0tleSgpLCBXZWJL
aXQ6OldlYlByZWZlcmVuY2VzU3RvcmU6OlZhbHVlKCEhW19jb25maWd1cmF0aW9uIF9yZXF1aXJl
c1VzZXJBY3Rpb25Gb3JBdWRpb1BsYXliYWNrXSkpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLT5w
cmVmZXJlbmNlVmFsdWVzKCkuc2V0KFdlYktpdDo6V2ViUHJlZmVyZW5jZXNLZXk6OmludmlzaWJs
ZUF1dG9wbGF5Tm90UGVybWl0dGVkS2V5KCksIFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZTo6
VmFsdWUoISFbX2NvbmZpZ3VyYXRpb24gX2ludmlzaWJsZUF1dG9wbGF5Tm90UGVybWl0dGVkXSkp
OwogICAgIHBhZ2VDb25maWd1cmF0aW9uLT5wcmVmZXJlbmNlVmFsdWVzKCkuc2V0KFdlYktpdDo6
V2ViUHJlZmVyZW5jZXNLZXk6Om1lZGlhRGF0YUxvYWRzQXV0b21hdGljYWxseUtleSgpLCBXZWJL
aXQ6OldlYlByZWZlcmVuY2VzU3RvcmU6OlZhbHVlKCEhW19jb25maWd1cmF0aW9uIF9tZWRpYURh
dGFMb2Fkc0F1dG9tYXRpY2FsbHldKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnByZWZlcmVu
Y2VWYWx1ZXMoKS5zZXQoV2ViS2l0OjpXZWJQcmVmZXJlbmNlc0tleTo6ZGF0YURldGVjdG9yVHlw
ZXNLZXkoKSwgV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpWYWx1ZShzdGF0aWNfY2FzdDx1
aW50MzJfdD4oW19jb25maWd1cmF0aW9uIGRhdGFEZXRlY3RvclR5cGVzXSkpKTsKICNlbmRpZgog
I2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgcGFnZUNvbmZpZ3VyYXRp
b24tPnByZWZlcmVuY2VWYWx1ZXMoKS5zZXQoV2ViS2l0OjpXZWJQcmVmZXJlbmNlc0tleTo6YWxs
b3dzQWlyUGxheUZvck1lZGlhUGxheWJhY2tLZXkoKSwgV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0
b3JlOjpWYWx1ZSghIVtfY29uZmlndXJhdGlvbiBhbGxvd3NBaXJQbGF5Rm9yTWVkaWFQbGF5YmFj
a10pKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Q29uZmlndXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oCShyZXZpc2lvbiAxOTQ4NzQpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMjkgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgV0tTZWxlY3Rpb25HcgogICAgIFdLU2VsZWN0aW9uR3JhbnVsYXJpdHlEeW5hbWljLAog
ICAgIFdLU2VsZWN0aW9uR3JhbnVsYXJpdHlDaGFyYWN0ZXIsCiB9IFdLX0VOVU1fQVZBSUxBQkxF
X0lPUyg4XzApOworCisvKiEgQGVudW0gV0tEYXRhRGV0ZWN0b3JUeXBlcworIEBhYnN0cmFjdCBU
aGUgdHlwZSBvZiBkYXRhIHdlIHdhbnQgdG8gZGV0ZWN0LgorIEBjb25zdGFudCBXS0RhdGFEZXRl
Y3RvclR5cGVOb25lIE5vIGRldGVjdGlvbiBpcyBwZXJmb3JtZWQuCisgQGNvbnN0YW50IFdLRGF0
YURldGVjdG9yVHlwZVBob25lTnVtYmVyIFBob25lIG51bWJlcnMgYXJlIGRldGVjdGVkIGFuZCB0
dXJuZWQgaW50byBsaW5rcy4KKyBAY29uc3RhbnQgV0tEYXRhRGV0ZWN0b3JUeXBlTGluayBVUkxz
IGluIHRleHQgYXJlIGRldGVjdGVkIGFuZCB0dXJuZWQgaW50byBsaW5rcy4KKyBAY29uc3RhbnQg
V0tEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcyBBZGRyZXNzZXMgYXJlIGRldGVjdGVkIGFuZCB0dXJu
ZWQgaW50byBsaW5rcy4KKyBAY29uc3RhbnQgV0tEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVu
dCBEYXRlcyBhbmQgdGltZSB0aGF0IGFyZSBpbiB0aGUgZnV0dXJlIGFyZSBkZXRlY3RlZCBhbmQg
dHVybmVkIGludG8gbGlua3MuCisgQGNvbnN0YW50IFdLRGF0YURldGVjdG9yVHlwZUFsbCBBbGwg
b2YgdGhlIGFib3ZlIGRhdGEgdHlwZXMgYXJlIHR1cm5lZCBpbnRvIGxpbmtzIHdoZW4gZGV0ZWN0
ZWQuIENob3NpbmcgdGhpcyB2YWx1ZSB3aWxsCisgYXV0b21hdGljYWxseSBpbmNsdWRlIGFueSBu
ZXcgZGV0ZWN0aW9uIHR5cGUgdGhhdCBpcyBhZGRlZC4KKyBAZGlzY3Vzc2lvbiBBbiBleGFtcGxl
IG9mIGhvdyB0aGlzIHByb3BlcnR5IG1heSBhZmZlY3QgdGhlIGNvbnRlbnQgbG9hZGVkIGluIHRo
ZSBXS1dlYlZpZXcgaXMgdGhhdCBjb250ZW50IGxpa2UKKyAnVmlzaXQgYXBwbGUuY29tIG9uIEp1
bHkgNHRoIG9yIGNhbGwgMSA4MDAgNTU1LTU1NDUnIHdpbGwgYmUgdHJhbnNmb3JtZWQgdG8gYWRk
IGxpbmtzIGFyb3VuZCAnYXBwbGUuY29tJywgJ0p1bHkgNHRoJyBhbmQgJzEgODAwIDU1NS01NTQ1
JworIGlmIHRoZSBkYXRhRGV0ZWN0b3JUeXBlcyBwcm9wZXJ0eSBpcyBzZXQgdG8gV0tEYXRhRGV0
ZWN0b3JUeXBlUGhvbmVOdW1iZXIgfCBXS0RhdGFEZXRlY3RvclR5cGVMaW5rIHwgV0tEYXRhRGV0
ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudC4KKyAqLwordHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVn
ZXIsIFdLRGF0YURldGVjdG9yVHlwZXMpIHsKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVOb25lID0g
MCwKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlciA9IDEgPDwgMCwKKyAgICBXS0Rh
dGFEZXRlY3RvclR5cGVMaW5rID0gMSA8PCAxLAorICAgIFdLRGF0YURldGVjdG9yVHlwZUFkZHJl
c3MgPSAxIDw8IDIsCisgICAgV0tEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCA9IDEgPDwg
MywKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVBbGwgPSBOU1VJbnRlZ2VyTWF4Cit9IFdLX0VOVU1f
QVZBSUxBQkxFX0lPUyhXS19JT1NfVEJBKTsKKwogI2VuZGlmCiAKIC8qISBBIFdLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gb2JqZWN0IGlzIGEgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzIHdpdGgKQEAg
LTExOSw2ICsxNDIsMTEgQEAgV0tfQ0xBU1NfQVZBSUxBQkxFKDEwXzEwLCA4XzApCiAgKi8KIEBw
cm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGFsbG93c1BpY3R1cmVJblBpY3R1cmVNZWRpYVBsYXli
YWNrIFdLX0FWQUlMQUJMRShOQSwgOV8wKTsKIAorLyohIEBhYnN0cmFjdCBBbiBlbnVtIHZhbHVl
IGluZGljYXRpbmcgdGhlIHR5cGUgb2YgZGF0YSBkZXRlY3Rpb24gZGVzaXJlZC4KKyBAZGlzY3Vz
c2lvbiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBXS0RhdGFEZXRlY3RvclR5cGVOb25lLgorICovCitA
cHJvcGVydHkgKG5vbmF0b21pYykgV0tEYXRhRGV0ZWN0b3JUeXBlcyBkYXRhRGV0ZWN0b3JUeXBl
cyBXS19BVkFJTEFCTEUoTkEsIFdLX0lPU19UQkEpOworCiAjZW5kaWYKIAogQGVuZApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9u
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbi5tbQkocmV2aXNpb24gMTk0ODc0KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTIsNiArMTkyLDcgQEAgLSAoaWQpY29weVdpdGhab25lOihOU1pvbmUgKil6
b25lCiAgICAgY29uZmlndXJhdGlvbi0+X3JlcXVpcmVzVXNlckFjdGlvbkZvck1lZGlhUGxheWJh
Y2sgPSBzZWxmLT5fcmVxdWlyZXNVc2VyQWN0aW9uRm9yTWVkaWFQbGF5YmFjazsKICAgICBjb25m
aWd1cmF0aW9uLT5fcmVxdWlyZXNVc2VyQWN0aW9uRm9yQXVkaW9QbGF5YmFjayA9IHNlbGYtPl9y
ZXF1aXJlc1VzZXJBY3Rpb25Gb3JBdWRpb1BsYXliYWNrOwogICAgIGNvbmZpZ3VyYXRpb24tPl9z
ZWxlY3Rpb25HcmFudWxhcml0eSA9IHNlbGYtPl9zZWxlY3Rpb25HcmFudWxhcml0eTsKKyAgICBj
b25maWd1cmF0aW9uLT5fZGF0YURldGVjdG9yVHlwZXMgPSBzZWxmLT5fZGF0YURldGVjdG9yVHlw
ZXM7CiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCiAgICAgY29uZmlndXJhdGlvbi0+X3Nob3dz
VVJMc0luVG9vbFRpcHMgPSBzZWxmLT5fc2hvd3NVUkxzSW5Ub29sVGlwczsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDE5
NDg3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjkzMyw2ICsyOTMzLDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQ
cmVmZXJlbmNlcyhjb25zdCBXZQogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHNldHRpbmdzLnNl
dFVzZUltYWdlRG9jdW1lbnRGb3JTdWJmcmFtZVBERih0cnVlKTsKKyAgICBzZXR0aW5ncy5zZXRE
YXRhRGV0ZWN0b3JUeXBlcyhzdGF0aWNfY2FzdDxEYXRhRGV0ZWN0b3JUeXBlcz4oc3RvcmUuZ2V0
VUludDMyVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmRhdGFEZXRlY3RvclR5cGVzS2V5
KCkpKSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShHQU1FUEFEKQpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTk0ODc0KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDEtMTIgIEVucmljYSBDYXN1Y2NpICA8
ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgRGF0YURldGVjdG9y
cyBpbiBXSyAoaU9TKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1Mjk4OQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yMjg1NTk2MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBmZWF0dXJlIGRl
ZmluaXRpb24gZm9yIGRhdGEgZGV0ZWN0aW9uLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMv
RmVhdHVyZURlZmluZXMueGNjb25maWc6CisKIDIwMTYtMDEtMTEgIEFuZGVycyBDYXJsc3NvbiAg
PGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIENGTWFrZUNvbGxlY3Rh
YmxlLCBpdCBpcyBhIG5vLW9wCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9Db25maWd1cmF0aW9u
cy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwkocmV2aXNpb24gMTk0ODc0
KQorKysgU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNj
b25maWcJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEsNyBAQCBFTkFCTEVfTUFDX0dFU1RV
UkVfRVZFTlRTW3Nkaz1tYWNvc3gqXSA9CiBFTkFCTEVfTUFDX0dFU1RVUkVfRVZFTlRTX21hY29z
eF9XSVRIX0lOVEVSTkFMX1NES19ZRVMgPSBFTkFCTEVfTUFDX0dFU1RVUkVfRVZFTlRTOwogCiBF
TkFCTEVfSU9TX1RFWFRfQVVUT1NJWklOR1tzZGs9aXBob25lKl0gPSBFTkFCTEVfSU9TX1RFWFRf
QVVUT1NJWklORzsKK0VOQUJMRV9JT1NfREFUQURFVEVDVElPTltzZGs9aXBob25lKl0gPSBFTkFC
TEVfSU9TX0RBVEFERVRFQ1RJT047CiAKIEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTW3Nkaz1pcGhv
bmUqXSA9ICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9zX1dJVEhfSU5URVJOQUxfU0RLXyQo
VVNFX0lOVEVSTkFMX1NESykpOwogRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9zX1dJVEhfSU5U
RVJOQUxfU0RLX1lFUyA9IEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTOwo=
</data>
<flag name="review"
          id="293761"
          type_id="1"
          status="-"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269118</attachid>
            <date>2016-01-15 16:26:55 -0800</date>
            <delta_ts>2016-01-19 10:45:44 -0800</delta_ts>
            <desc>Patch5</desc>
            <filename>ddwk2-part1.txt</filename>
            <type>text/plain</type>
            <size>53972</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MTU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE2LTAxLTE1ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAg
ICAgQWRkIHN1cHBvcnQgZm9yIERhdGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRh
cjovL3Byb2JsZW0vMjI4NTU5NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgZmVhdHVyZSBkZWZpbml0aW9uLgorCisgICAgICAgICogQ29u
ZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisKIDIwMTYtMDEtMTUgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggaW50
ZXJuYWwgV2luZG93cyBidWlsZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3Vy
YXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwkocmV2aXNp
b24gMTk1MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1
cmVEZWZpbmVzLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNiArMTExLDcgQEAgRU5B
QkxFX01BQ19HRVNUVVJFX0VWRU5UU1tzZGs9bWFjb3N4Kl0gPQogRU5BQkxFX01BQ19HRVNUVVJF
X0VWRU5UU19tYWNvc3hfV0lUSF9JTlRFUk5BTF9TREtfWUVTID0gRU5BQkxFX01BQ19HRVNUVVJF
X0VWRU5UUzsKIAogRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkdbc2RrPWlwaG9uZSpdID0gRU5B
QkxFX0lPU19URVhUX0FVVE9TSVpJTkc7CitFTkFCTEVfREFUQV9ERVRFQ1RJT04gPSBFTkFCTEVf
REFUQV9ERVRFQ1RJT047CiAKIEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTW3Nkaz1pcGhvbmUqXSA9
ICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9zX1dJVEhfSU5URVJOQUxfU0RLXyQoVVNFX0lO
VEVSTkFMX1NESykpOwogRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9zX1dJVEhfSU5URVJOQUxf
U0RLX1lFUyA9IEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTOwpJbmRleDogU291cmNlL1dURi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTE1
OCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTYtMDEtMTUgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgc3VwcG9ydCBmb3IgRGF0YURldGVjdG9ycyBpbiBXSyAoaU9TKS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjk4OQorICAgICAgICBy
ZGFyOi8vcHJvYmxlbS8yMjg1NTk2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGluZyBmZWF0dXJlIGRlZmluaXRpb24gZm9yIGRhdGEgZGV0ZWN0
aW9uLgorCisgICAgICAgICogd3RmL0ZlYXR1cmVEZWZpbmVzLmg6CisKIDIwMTYtMDEtMTUgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGtkZWJ1
Z190cmFjZSBzaWducG9zdHMgZm9yIGEgZmV3IFdlYkNvcmUgb3BlcmF0aW9ucwpJbmRleDogU291
cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9GZWF0dXJlRGVmaW5lcy5oCShyZXZpc2lvbiAxOTUxNTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9G
ZWF0dXJlRGVmaW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDEwIEBACiAjZGVm
aW5lIEVOQUJMRV9JT1NfVEVYVF9BVVRPU0laSU5HIDEKICNlbmRpZgogCisjaWYgIWRlZmluZWQo
RU5BQkxFX0RBVEFfREVURUNUSU9OKQorI2RlZmluZSBFTkFCTEVfREFUQV9ERVRFQ1RJT04gMQor
I2VuZGlmCisKICNpZiAhZGVmaW5lZChFTkFCTEVfSU9TX1RPVUNIX0VWRU5UUykgJiYgVVNFKEFQ
UExFX0lOVEVSTkFMX1NESykKICNkZWZpbmUgRU5BQkxFX0lPU19UT1VDSF9FVkVOVFMgMQogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTUxNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAxNi0wMS0xNSAgRW5y
aWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciBEYXRhRGV0ZWN0b3JzIGluIFdLIChpT1MpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyOTg5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIyODU1
OTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgaW1wbGVtZW50aW5nIERhdGEgRGV0ZWN0b3JzIHN1
cHBvcnQKKyAgICAgICAgaW4gV0syLiBUaGUgcGF0Y2ggYWRkcyBhIG5ldyBtZW1lYmVyIHRvIHRo
ZSBTZXR0aW5ncyBvYmplY3QKKyAgICAgICAgdG8gcmV0cmlldmUgdGhlIHR5cGUgb2YgZGV0ZWN0
aW9uIGRlc2lyZWQuIFRoZSBEYXRhRGV0ZWN0aW9uIGZpbGVzCisgICAgICAgIGhhdmUgYmVlbiBt
b3ZlZCB1bmRlciBjb2NvYSwgc2luY2UgdGhleSBhcmUgbm8gbG9uZ2VyIE9TIFggc3BlY2lmaWMu
CisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzoKKyAg
ICAgICAgKiBDb25maWd1cmF0aW9ucy9XZWJDb3JlLnhjY29uZmlnOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGF0
YURldGVjdGlvbi5oLgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbTog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5tbS4K
KyAgICAgICAgKFdlYkNvcmU6OmRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdl
KToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLmg6IFJlbW92ZWQuCisgICAg
ICAgICogZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNo
ZWNrTG9hZENvbXBsZXRlRm9yVGhpc0ZyYW1lKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6
CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5pbjoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFj
L0RhdGFEZXRlY3RvcnNTUEkuaDoKKwogMjAxNi0wMS0xNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIERyb3Agb2Jzb2xldGUgRG9jdW1lbnRUeXBlLmVudGl0aWVz
IC8gbm90YXRpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJl
RGVmaW5lcy54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0
aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwkocmV2aXNpb24gMTk1MTU4KQorKysgU291cmNl
L1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcJKHdvcmtpbmcg
Y29weSkKQEAgLTExMSw2ICsxMTEsNyBAQCBFTkFCTEVfTUFDX0dFU1RVUkVfRVZFTlRTW3Nkaz1t
YWNvc3gqXSA9CiBFTkFCTEVfTUFDX0dFU1RVUkVfRVZFTlRTX21hY29zeF9XSVRIX0lOVEVSTkFM
X1NES19ZRVMgPSBFTkFCTEVfTUFDX0dFU1RVUkVfRVZFTlRTOwogCiBFTkFCTEVfSU9TX1RFWFRf
QVVUT1NJWklOR1tzZGs9aXBob25lKl0gPSBFTkFCTEVfSU9TX1RFWFRfQVVUT1NJWklORzsKK0VO
QUJMRV9EQVRBX0RFVEVDVElPTiA9IEVOQUJMRV9EQVRBX0RFVEVDVElPTjsKIAogRU5BQkxFX0lP
U19UT1VDSF9FVkVOVFNbc2RrPWlwaG9uZSpdID0gJChFTkFCTEVfSU9TX1RPVUNIX0VWRU5UU19p
b3NfV0lUSF9JTlRFUk5BTF9TREtfJChVU0VfSU5URVJOQUxfU0RLKSk7CiBFTkFCTEVfSU9TX1RP
VUNIX0VWRU5UU19pb3NfV0lUSF9JTlRFUk5BTF9TREtfWUVTID0gRU5BQkxFX0lPU19UT1VDSF9F
VkVOVFM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9XZWJDb3JlLnhjY29u
ZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NvbmZpZ3VyYXRpb25zL1dlYkNvcmUu
eGNjb25maWcJKHJldmlzaW9uIDE5NTE1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NvbmZpZ3VyYXRp
b25zL1dlYkNvcmUueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgUFJP
RFVDVF9OQU1FID0gV2ViQ29yZTsKIFVORVhQT1JURURfU1lNQk9MU19GSUxFID0gQ29uZmlndXJh
dGlvbnMvV2ViQ29yZS51bmV4cDsKIE9USEVSX0xERkxBR1MgPSAkKGluaGVyaXRlZCkgJChPVEhF
Ul9MREZMQUdTX1BMQVRGT1JNKTsKIE9USEVSX0xERkxBR1NfQkFTRSA9IC1sc3FsaXRlMyAtbG9i
amMgLWxBTkdMRTsKLU9USEVSX0xERkxBR1NfQkFTRV9pb3MgPSAkKE9USEVSX0xERkxBR1NfQkFT
RSkgLWZyYW1ld29yayBDRk5ldHdvcmsgLWZyYW1ld29yayBDb3JlR3JhcGhpY3MgLWZyYW1ld29y
ayBDb3JlVGV4dCAtZnJhbWV3b3JrIEZvdW5kYXRpb24gLWZyYW1ld29yayBHcmFwaGljc1NlcnZp
Y2VzIC1mcmFtZXdvcmsgSW1hZ2VJTyAtZnJhbWV3b3JrIE9wZW5HTEVTIC1sTW9iaWxlR2VzdGFs
dDsKK09USEVSX0xERkxBR1NfQkFTRV9pb3MgPSAkKE9USEVSX0xERkxBR1NfQkFTRSkgLWZyYW1l
d29yayBDRk5ldHdvcmsgLWZyYW1ld29yayBDb3JlR3JhcGhpY3MgLWZyYW1ld29yayBDb3JlVGV4
dCAtZnJhbWV3b3JrIEZvdW5kYXRpb24gLWZyYW1ld29yayBHcmFwaGljc1NlcnZpY2VzIC1mcmFt
ZXdvcmsgSW1hZ2VJTyAtZnJhbWV3b3JrIE9wZW5HTEVTIC1sTW9iaWxlR2VzdGFsdCAtZnJhbWV3
b3JrIERhdGFEZXRlY3RvcnNDb3JlOwogT1RIRVJfTERGTEFHU19QTEFURk9STVtzZGs9aXBob25l
b3MqXSA9ICQoT1RIRVJfTERGTEFHU19CQVNFX2lvcykgLWZyYW1ld29yayBJT1N1cmZhY2U7CiBP
VEhFUl9MREZMQUdTX1BMQVRGT1JNW3Nkaz1pcGhvbmVzaW11bGF0b3IqXSA9ICQoT1RIRVJfTERG
TEFHU19CQVNFX2lvcyk7CiBPVEhFUl9MREZMQUdTX1BMQVRGT1JNW3Nkaz1tYWNvc3gqXSA9ICQo
T1RIRVJfTERGTEFHU19CQVNFKSAtc3ViX2xpYnJhcnkgbGlib2JqYyAtdW1icmVsbGEgV2ViS2l0
IC1hbGxvd2FibGVfY2xpZW50IFdlYkNvcmVUZXN0U3VwcG9ydCAtYWxsb3dhYmxlX2NsaWVudCBX
ZWJLaXQyIC1hbGxvd2FibGVfY2xpZW50IFdlYktpdExlZ2FjeSAtZnJhbWV3b3JrIEFwcGxpY2F0
aW9uU2VydmljZXMgLWZyYW1ld29yayBBdWRpb1VuaXQgLWZyYW1ld29yayBDYXJib24gLWZyYW1l
d29yayBDb2NvYSAtZnJhbWV3b3JrIERhdGFEZXRlY3RvcnNDb3JlIC1mcmFtZXdvcmsgSU9TdXJm
YWNlIC1mcmFtZXdvcmsgT3BlbkdMOwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk1MTU4KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTM3LDggKzExMzcsNiBAQAogCQkyRDUwMDJGQzFCNTZENzk5MDAyMEFBRjcgLyogUGF0
aFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDUwMzY2ODFCQ0REREM0
MDBFMjBCQjMgLyogR2VzdHVyZUV2ZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDUwMzY2NzFCQ0REREM0MDBFMjBCQjMgLyogR2VzdHVyZUV2
ZW50cy5jcHAgKi87IH07CiAJCTJENTY0NkIwMUI4Rjg0OTMwMDNDNDk5NCAvKiBEaWN0aW9uYXJ5
UG9wdXBJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRDU2NDZBRjFCOEY4NDkzMDAzQzQ5OTQgLyogRGljdGlvbmFyeVBvcHVwSW5mby5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTJENThEODU1MUEx
NUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDU4RDg1MzFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURl
dGVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTJENThEODU2MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ1OEQ4NTQxQTE1RjY1RjAw
QTVGNzI2IC8qIERhdGFEZXRlY3Rpb24ubW0gKi87IH07CiAJCTJENTlGMUJGMUEwMDQ0QzYwMDFG
M0QyOSAvKiBEYXRhRGV0ZWN0b3JzU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDU5RjFCRTFBMDA0NEM2MDAxRjNEMjkgLyogRGF0YURldGVjdG9y
c1NQSS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTJENUE1OTJGMTUyNTI1MjMwMDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzQ4RDc0MTJDQzNGODkw
MDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNwcCAqLzsgfTsKIAkJMkQ1QTU5MzExNTI1MjVE
MDAwMzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzQ4RDY2MTJDQzM3NjMwMDFGQkE0MSAvKiBJbWFnZU9y
aWVudGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTU4ODIsNiArNTg4MCw4IEBACiAJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBT
dG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDNTBEMEU4MTBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUM1MTM3Q0Yy
MTFBNTgzNzgwMDRBREI5OSAvKiBKU0RPTVN0cmluZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMzdDRjAxMUE1ODM3ODAwNEFEQjk5IC8q
IEpTRE9NU3RyaW5nTGlzdC5jcHAgKi87IH07CiAJCUM1MTM3Q0YzMTFBNTgzNzgwMDRBREI5OSAv
KiBKU0RPTVN0cmluZ0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1MTM3Q0YxMTFBNTgzNzgwMDRBREI5OSAvKiBKU0RPTVN0cmluZ0xpc3QuaCAq
LzsgfTsKKwkJQzUyMjdERjExQzNDNkRGMTAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MjI3REVGMUMzQzZE
RDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzUyMjdERjIxQzNDNkRGOTAwRjVFRDU0IC8qIERhdGFE
ZXRlY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNTIyN0RGMDFDM0M2REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5tbSAqLzsgfTsKIAkJ
QzUyNzhCMEMxN0YyMTJFQTAwM0EyOTk4IC8qIFBsYXRmb3JtUGFzdGVib2FyZElPUy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1Mjc4QjBCMTdGMjEy
RUEwMDNBMjk5OCAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gKi87IH07CiAJCUM1NDQyNzRC
MTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTQ0Mjc0OTExQTU3RTdBMDA2M0E3NDkgLyogRE9N
U3RyaW5nTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUM1NTYxMEYxMTFBNzA0RUIwMEI4MkQyNyAvKiBET01TdHJpbmdMaXN0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NTYxMEYwMTFBNzA0
RUIwMEI4MkQyNyAvKiBET01TdHJpbmdMaXN0LmNwcCAqLzsgfTsKQEAgLTg1MTIsOCArODUxMiw2
IEBACiAJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhdGhVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1MDM2NjcxQkNERERDNDAwRTIwQkIzIC8qIEdlc3R1cmVFdmVu
dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2VzdHVyZUV2ZW50
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENTY0NkFGMUI4Rjg0OTMwMDND
NDk5NCAvKiBEaWN0aW9uYXJ5UG9wdXBJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpY3Rpb25hcnlQb3B1cEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMkQ1OEQ4NTMxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YURldGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkyRDU4RDg1NDFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERhdGFEZXRlY3Rpb24u
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENTlGMUJFMUEwMDQ0QzYwMDFGM0Qy
OSAvKiBEYXRhRGV0ZWN0b3JzU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERhdGFEZXRlY3RvcnNTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1QkM0
MjUxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDVCQzQyNjE2Rjg4MkJFMDA3MDQ4
RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMzcxMSw2ICsxMzcwOSw4IEBACiAJCUM1MEQwRTgxMEZGNDI3MjkwMEFD
MjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0b3JhZ2VOYW1lc3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUx
MzdDRjAxMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVN0cmluZ0xpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDNTEzN0NGMTExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJp
bmdMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NU3RyaW5nTGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTIyN0RFRjFDM0M2REQ3MDBGNUVE
NTQgLyogRGF0YURldGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
YXRhRGV0ZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MjI3REYwMUMz
QzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gRGF0YURldGVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzUyNzhCMEIxN0YyMTJFQTAwM0EyOTk4IC8qIFBsYXRmb3JtUGFzdGVib2FyZElP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtUGFz
dGVib2FyZElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU0NDI3NDkxMUE1
N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRE9NU3RyaW5nTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
NTQ0Mjc0QTExQTU3RTdBMDA2M0E3NDkgLyogRE9NU3RyaW5nTGlzdC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gRE9NU3RyaW5nTGlzdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xNzg4MSw2ICsxNzg4MSw4IEBACiAJCTdDM0U1MTA3MThERjhGMTIwMEMxMTJGNyAvKiBj
b2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQzUy
MjdERUYxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCAqLywKKwkJCQlDNTIyN0RG
MDFDM0M2REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5tbSAqLywKIAkJCQk5QjU1RUVFQTFC
M0YzRkVGMDA1MzQyQkMgLyogRWRpdG9yQ29jb2EuaCAqLywKIAkJCQk5QjU1RUVFODFCM0U4ODk4
MDA1MzQyQkMgLyogRWRpdG9yQ29jb2EubW0gKi8sCiAJCQkJN0MzRTUxMDgxOERGOEYzNTAwQzEx
MkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCAqLywKQEAgLTIzMTg1LDggKzIzMTg3LDYgQEAKIAkJCWNo
aWxkcmVuID0gKAogCQkJCUNFN0IyREFGMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRl
eHRVSUNvbnRyb2xsZXIuaCAqLywKIAkJCQlDRTdCMkRCMDE1ODZBQkFEMDA5OEIzRkEgLyogQWx0
ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tICovLAotCQkJCTJENThEODUzMUExNUY2NUYwMEE1
RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLmggKi8sCi0JCQkJMkQ1OEQ4NTQxQTE1RjY1RjAwQTVGNzI2
IC8qIERhdGFEZXRlY3Rpb24ubW0gKi8sCiAJCQkJOTM3RkYzRDQxQTEwMTJENjAwOEVCQTMxIC8q
IERpY3Rpb25hcnlMb29rdXAuaCAqLywKIAkJCQk5MzdGRjNENjFBMTAxMzFCMDA4RUJBMzEgLyog
RGljdGlvbmFyeUxvb2t1cC5tbSAqLywKIAkJCQlFRDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyog
RWRpdG9yTWFjLm1tICovLApAQCAtMjUwNjIsNyArMjUwNjIsNiBAQAogCQkJCTk3QkM2QTMwMTUw
NUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdC
QzZBMzIxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkUyMzQ4MEQxOEE5ODcxNDAwRTRCNkU4IC8qIERhdGFDdWUuaCBpbiBIZWFkZXJzICov
LAotCQkJCTJENThEODU1MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzVFMkI0RTFBRkYwNkNBMDA5NzZGOUYgLyogRGF0YURldGVjdG9yc0Nv
cmVTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENTlGMUJGMUEwMDQ0QzYwMDFGM0QyOSAvKiBE
YXRhRGV0ZWN0b3JzU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzIyNzQ2RjBFODM2NjQ1MDBF
N0Y5NzUgLyogRGF0YVJlZi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjAzNCw2ICsyNjAzMyw3IEBA
CiAJCQkJQjI3NTM1NzUwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyNzUzNTc2MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplSGFzaC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0UxMjUyNEQxQTFBNzdERTAwODY0NDgwIC8qIElPUE1MaWJTUEkuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUM1MjI3REYxMUMzQzZERjEwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NERFRjY0MzFBNkZGOTI3MDBENDVFRUMgLyogSU9SZXR1
cm5TUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMEI0QUFCMThEQTFDQ0QwMDQzNERFMSAvKiBJ
T1N1cmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMjFFNTdEMTgzRUQxRkYwMDFDMjg5RCAv
KiBJT1N1cmZhY2VQb29sLmggaW4gSGVhZGVycyAqLywKQEAgLTI4NzQwLDYgKzI4NzQwLDcgQEAK
IAkJCQk4NTAzMUIzRjBBNDRFRkM3MDBGOTkyRTAgLyogQ2xpcGJvYXJkRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTgwMzcxNjExQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUNERUE3NjM1MTQ2MEI3MUEwMDhCMzFGMSAvKiBDbG9jay5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlDNTIyN0RGMjFDM0M2REY5MDBGNUVENTQgLyogRGF0YURldGVj
dGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNERUE3NjM0MTQ2MEI1NkYwMDhCMzFGMSAvKiBD
bG9ja0dlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUJEOEE5NUExOEJFRkM3NjAwOTg3
RTlBIC8qIENvbGxlY3Rpb25JbmRleENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUz
NTY2MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4OTE4
LDcgKzI4OTE5LDYgQEAKIAkJCQk5N0JDNkEyRjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VU
aHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBMzExNTA1RjA4MTAwMUI3NEFDIC8q
IERhdGFiYXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRTIzNDgwQzE4QTk4NzBC
MDBFNEI2RTggLyogRGF0YUN1ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDU4RDg1NjFBMTVG
NjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDNjQ2
NDFEMTFEN0Y0MTYwMDY0NTVCMCAvKiBEYXRhc2V0RE9NU3RyaW5nTWFwLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3ODQ5NDFCMEI1RkU1MDcwMDFFMjM3QSAvKiBEYXRhVHJhbnNmZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBRkYwODI0NUU1OTAwMUU5QUJDIC8qIERhdGFUcmFuc2Zl
ck1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHJldmlzaW9uIDE5NDU5MSkJKGZyb20gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5oOjE5NDU5MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGFEZXRlY3Rpb25faAorI2RlZmluZSBEYXRh
RGV0ZWN0aW9uX2gKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCA8d3RmL1JlZlB0ci5o
PgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIEREQWN0aW9uQ29udGV4
dDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBIaXRU
ZXN0UmVzdWx0OworY2xhc3MgUmFuZ2U7CisKK2NsYXNzIERhdGFEZXRlY3Rpb24geworcHVibGlj
OgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBk
ZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiwgRmxvYXRS
ZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRh
UmFuZ2UpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQorCisjZW5kaWYgLy8gRGF0YURldGVjdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAkod29ya2luZyBjb3B5KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDggKzI2LDYgQEAKICNpZm5kZWYgRGF0YURldGVjdGlvbl9oCiAjZGVmaW5lIERhdGFE
ZXRlY3Rpb25faAogCi0jaWYgUExBVEZPUk0oTUFDKQotCiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTM5LDEzICszNywyMyBAQCBjbGFzcyBG
bG9hdFJlY3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgUmFuZ2U7CiAKK2VudW0gRGF0
YURldGVjdG9yVHlwZXMgeworICAgIERhdGFEZXRlY3RvclR5cGVOb25lID0gMCwKKyAgICBEYXRh
RGV0ZWN0b3JUeXBlUGhvbmVOdW1iZXIgPSAxIDw8IDAsCisgICAgRGF0YURldGVjdG9yVHlwZUxp
bmsgPSAxIDw8IDEsCisgICAgRGF0YURldGVjdG9yVHlwZUFkZHJlc3MgPSAxIDw8IDIsCisgICAg
RGF0YURldGVjdG9yVHlwZUNhbGVuZGFyRXZlbnQgPSAxIDw8IDMsCisgICAgRGF0YURldGVjdG9y
VHlwZUFsbCA9IFVMT05HX01BWAorfTsKKwogY2xhc3MgRGF0YURldGVjdGlvbiB7CiBwdWJsaWM6
CisjaWYgUExBVEZPUk0oTUFDKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXRhaW5QdHI8
RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRU
ZXN0UmVzdWx0JiwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJh
bmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpOworI2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHZvaWQgZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdl
LCBEYXRhRGV0ZWN0b3JUeXBlcyk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNl
bmRpZiAvLyBQTEFURk9STShNQUMpCi0KICNlbmRpZiAvLyBEYXRhRGV0ZWN0aW9uX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlz
aW9uIDE5NDU5MSkJKGZyb20gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGF0YURldGVjdGlv
bi5tbToxOTQ1OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rp
b24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiRGF0YURldGVjdGlvbi5oIgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJEYXRh
RGV0ZWN0b3JzU1BJLmgiCisjaW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIkhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCisjaW1wb3J0
ICJOb2RlLmgiCisjaW1wb3J0ICJSYW5nZS5oIgorI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCisj
aW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIKKyNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgorI2lt
cG9ydCAiVmlzaWJsZVVuaXRzLmgiCisjaW1wb3J0ICJodG1sZWRpdGluZy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJ
dGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24sIFJlZlB0cjxS
YW5nZT4gY29udGV4dFJhbmdlLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBS
ZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKK3sKKyAgICBTdHJpbmcgZnVsbFBsYWlu
VGV4dFN0cmluZyA9IHBsYWluVGV4dChjb250ZXh0UmFuZ2UuZ2V0KCkpOworICAgIGludCBoaXRM
b2NhdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGNvbnRleHRSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOworCisgICAgUmV0YWluUHRyPERE
U2Nhbm5lclJlZj4gc2Nhbm5lciA9IGFkb3B0Q0YoRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5
cGVTdGFuZGFyZCwgMCwgbnVsbHB0cikpOworICAgIFJldGFpblB0cjxERFNjYW5RdWVyeVJlZj4g
c2NhblF1ZXJ5ID0gYWRvcHRDRihERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgZnVsbFBsYWluVGV4dFN0cmluZy5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBD
RlJhbmdlTWFrZSgwLCBmdWxsUGxhaW5UZXh0U3RyaW5nLmxlbmd0aCgpKSkpOworCisgICAgaWYg
KCFERFNjYW5uZXJTY2FuUXVlcnkoc2Nhbm5lci5nZXQoKSwgc2NhblF1ZXJ5LmdldCgpKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gcmVzdWx0
cyA9IGFkb3B0Q0YoRERTY2FubmVyQ29weVJlc3VsdHNXaXRoT3B0aW9ucyhzY2FubmVyLmdldCgp
LCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNOb092ZXJsYXApKTsKKworICAgIC8vIEZpbmQg
dGhlIEREUmVzdWx0UmVmIHRoYXQgaW50ZXJzZWN0cyB0aGUgaGl0VGVzdFJlc3VsdCdzIFZpc2li
bGVQb3NpdGlvbi4KKyAgICBERFJlc3VsdFJlZiBtYWluUmVzdWx0ID0gbnVsbHB0cjsKKyAgICBS
ZWZQdHI8UmFuZ2U+IG1haW5SZXN1bHRSYW5nZTsKKyAgICBDRkluZGV4IHJlc3VsdENvdW50ID0g
Q0ZBcnJheUdldENvdW50KHJlc3VsdHMuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsg
aSA8IHJlc3VsdENvdW50OyBpKyspIHsKKyAgICAgICAgRERSZXN1bHRSZWYgcmVzdWx0ID0gKERE
UmVzdWx0UmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocmVzdWx0cy5nZXQoKSwgaSk7CisgICAg
ICAgIENGUmFuZ2UgcmVzdWx0UmFuZ2VJbkNvbnRleHQgPSBERFJlc3VsdEdldFJhbmdlKHJlc3Vs
dCk7CisgICAgICAgIGlmIChoaXRMb2NhdGlvbiA+PSByZXN1bHRSYW5nZUluQ29udGV4dC5sb2Nh
dGlvbiAmJiAoaGl0TG9jYXRpb24gLSByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbikgPCBy
ZXN1bHRSYW5nZUluQ29udGV4dC5sZW5ndGgpIHsKKyAgICAgICAgICAgIG1haW5SZXN1bHQgPSBy
ZXN1bHQ7CisgICAgICAgICAgICBtYWluUmVzdWx0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJh
bmdlKGNvbnRleHRSYW5nZS5nZXQoKSwgcmVzdWx0UmFuZ2VJbkNvbnRleHQubG9jYXRpb24sIHJl
c3VsdFJhbmdlSW5Db250ZXh0Lmxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICghbWFpblJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0ID0gYWRvcHRO
UyhbYWxsb2NEREFjdGlvbkNvbnRleHRJbnN0YW5jZSgpIGluaXRdKTsKKyAgICBbYWN0aW9uQ29u
dGV4dCBzZXRBbGxSZXN1bHRzOkBbIChpZCltYWluUmVzdWx0IF1dOworICAgIFthY3Rpb25Db250
ZXh0IHNldE1haW5SZXN1bHQ6bWFpblJlc3VsdF07CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBx
dWFkczsKKyAgICBtYWluUmVzdWx0UmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKKyAg
ICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gbWFpblJlc3VsdFJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOworICAg
IGZvciAoY29uc3QgYXV0byYgcXVhZCA6IHF1YWRzKQorICAgICAgICBkZXRlY3RlZERhdGFCb3Vu
ZGluZ0JveC51bml0ZShmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cocXVhZC5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpKSk7CisgICAgCisgICAgZGV0ZWN0ZWREYXRhUmFuZ2UgPSBtYWluUmVzdWx0
UmFuZ2U7CisgICAgCisgICAgcmV0dXJuIGFjdGlvbkNvbnRleHQ7Cit9CisKK1JldGFpblB0cjxE
REFjdGlvbkNvbnRleHQ+IERhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVz
dWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIEZsb2F0UmVjdCYgZGV0ZWN0
ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQorewor
ICAgIGlmICghRGF0YURldGVjdG9yc0xpYnJhcnkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcmVuZGVy
ZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uOworICAgIFJlZlB0cjxS
YW5nZT4gY29udGV4dFJhbmdlOworCisgICAgaWYgKCFpczxIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudD4oKm5vZGUpKSB7CisgICAgICAgIHBvc2l0aW9uID0gcmVuZGVyZXItPnBvc2l0aW9uRm9y
UG9pbnQoaGl0VGVzdFJlc3VsdC5sb2NhbFBvaW50KCksIG51bGxwdHIpOworICAgICAgICBpZiAo
cG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShub2RlKTsKKworICAgICAgICBjb250ZXh0UmFuZ2UgPSByYW5nZUV4cGFu
ZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7CisgICAgICAgIGlm
ICghY29udGV4dFJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAg
ICAgICBpZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
SW50UG9pbnQgZnJhbWVQb2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5v
ZGVGcmFtZSgpOworICAgICAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOwor
ICAgICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBjb250ZXh0UmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJp
dHkocG9zaXRpb24sIExpbmVHcmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7CisgICAgICAg
IGlmICghY29udGV4dFJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgcmV0dXJuIGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKHBvc2l0aW9uLCBjb250
ZXh0UmFuZ2UsIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBkZXRlY3RlZERhdGFSYW5nZSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdv
cmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDE5IEBACiAjaW1wb3J0ICJjb25maWcu
aCIKICNpbXBvcnQgIkRhdGFEZXRlY3Rpb24uaCIKIAotI2lmIFBMQVRGT1JNKE1BQykKLQorI2lt
cG9ydCAiQXR0ci5oIgorI2ltcG9ydCAiQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIgogI2ltcG9ydCAi
RGF0YURldGVjdG9yc1NQSS5oIgogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCisjaW1wb3J0ICJIVE1M
QW5jaG9yRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIK
ICNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKICNpbXBvcnQgIk5vZGUuaCIKKyNpbXBvcnQgIk5v
ZGVMaXN0LmgiCisjaW1wb3J0ICJOb2RlVHJhdmVyc2FsLmgiCiAjaW1wb3J0ICJSYW5nZS5oIgog
I2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCisjaW1wb3J0ICJUZXh0LmgiCiAjaW1wb3J0ICJUZXh0
SXRlcmF0b3IuaCIKICNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgogI2ltcG9ydCAiVmlzaWJs
ZVVuaXRzLmgiCkBAIC00Miw2ICs0Niw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lm
IFBMQVRGT1JNKE1BQykKKwogc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVj
dEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiwgUmVmUHRy
PFJhbmdlPiBjb250ZXh0UmFuZ2UsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gs
IFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQogewogICAgIFN0cmluZyBmdWxsUGxh
aW5UZXh0U3RyaW5nID0gcGxhaW5UZXh0KGNvbnRleHRSYW5nZS5nZXQoKSk7CkBAIC0xMzEsNyAr
MTM3LDEwIEBAIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IERhdGFEZXRlY3Rpb24KIAogICAg
IHJldHVybiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwgY29udGV4dFJh
bmdlLCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2UpOwogfQorI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKKwordm9pZCBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50
SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiwgRGF0YURldGVjdG9yVHlwZXMpCit7Cit9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLmgJKHJldmlzaW9uIDE5NTE1OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEYXRhRGV0ZWN0aW9u
X2gKLSNkZWZpbmUgRGF0YURldGVjdGlvbl9oCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBv
cnQgPHd0Zi9SZWZQdHIuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotT0JKQ19DTEFT
UyBEREFjdGlvbkNvbnRleHQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRS
ZWN0OwotY2xhc3MgSGl0VGVzdFJlc3VsdDsKLWNsYXNzIFJhbmdlOwotCi1jbGFzcyBEYXRhRGV0
ZWN0aW9uIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmV0YWluUHRyPERE
QWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVz
dFJlc3VsdCYsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0cjxSYW5n
ZT4mIGRldGVjdGVkRGF0YVJhbmdlKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQotI2VuZGlmIC8vIERhdGFEZXRlY3Rpb25faApJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lv
biAxOTUxNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkRh
dGFEZXRlY3Rpb24uaCIKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotI2ltcG9ydCAiRGF0YURldGVj
dG9yc1NQSS5oIgotI2ltcG9ydCAiRnJhbWVWaWV3LmgiCi0jaW1wb3J0ICJIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudC5oIgotI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgotI2ltcG9ydCAiTm9k
ZS5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKLSNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgotI2ltcG9y
dCAiVGV4dEl0ZXJhdG9yLmgiCi0jaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIKLSNpbXBvcnQg
IlZpc2libGVVbml0cy5oIgotI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0
UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uLCBSZWZQdHI8UmFuZ2U+
IGNvbnRleHRSYW5nZSwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRy
PFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCi17Ci0gICAgU3RyaW5nIGZ1bGxQbGFpblRleHRT
dHJpbmcgPSBwbGFpblRleHQoY29udGV4dFJhbmdlLmdldCgpKTsKLSAgICBpbnQgaGl0TG9jYXRp
b24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShjb250ZXh0UmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdldCgpKTsKLQotICAgIFJldGFpblB0cjxERFNjYW5u
ZXJSZWY+IHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3Rh
bmRhcmQsIDAsIG51bGxwdHIpKTsKLSAgICBSZXRhaW5QdHI8RERTY2FuUXVlcnlSZWY+IHNjYW5R
dWVyeSA9IGFkb3B0Q0YoRERTY2FuUXVlcnlDcmVhdGVGcm9tU3RyaW5nKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGZ1bGxQbGFpblRleHRTdHJpbmcuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgQ0ZSYW5n
ZU1ha2UoMCwgZnVsbFBsYWluVGV4dFN0cmluZy5sZW5ndGgoKSkpKTsKLQotICAgIGlmICghRERT
Y2FubmVyU2NhblF1ZXJ5KHNjYW5uZXIuZ2V0KCksIHNjYW5RdWVyeS5nZXQoKSkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHJlc3VsdHMgPSBh
ZG9wdENGKEREU2Nhbm5lckNvcHlSZXN1bHRzV2l0aE9wdGlvbnMoc2Nhbm5lci5nZXQoKSwgRERT
Y2FubmVyQ29weVJlc3VsdHNPcHRpb25zTm9PdmVybGFwKSk7Ci0KLSAgICAvLyBGaW5kIHRoZSBE
RFJlc3VsdFJlZiB0aGF0IGludGVyc2VjdHMgdGhlIGhpdFRlc3RSZXN1bHQncyBWaXNpYmxlUG9z
aXRpb24uCi0gICAgRERSZXN1bHRSZWYgbWFpblJlc3VsdCA9IG51bGxwdHI7Ci0gICAgUmVmUHRy
PFJhbmdlPiBtYWluUmVzdWx0UmFuZ2U7Ci0gICAgQ0ZJbmRleCByZXN1bHRDb3VudCA9IENGQXJy
YXlHZXRDb3VudChyZXN1bHRzLmdldCgpKTsKLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBy
ZXN1bHRDb3VudDsgaSsrKSB7Ci0gICAgICAgIEREUmVzdWx0UmVmIHJlc3VsdCA9IChERFJlc3Vs
dFJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KHJlc3VsdHMuZ2V0KCksIGkpOwotICAgICAgICBD
RlJhbmdlIHJlc3VsdFJhbmdlSW5Db250ZXh0ID0gRERSZXN1bHRHZXRSYW5nZShyZXN1bHQpOwot
ICAgICAgICBpZiAoaGl0TG9jYXRpb24gPj0gcmVzdWx0UmFuZ2VJbkNvbnRleHQubG9jYXRpb24g
JiYgKGhpdExvY2F0aW9uIC0gcmVzdWx0UmFuZ2VJbkNvbnRleHQubG9jYXRpb24pIDwgcmVzdWx0
UmFuZ2VJbkNvbnRleHQubGVuZ3RoKSB7Ci0gICAgICAgICAgICBtYWluUmVzdWx0ID0gcmVzdWx0
OwotICAgICAgICAgICAgbWFpblJlc3VsdFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShj
b250ZXh0UmFuZ2UuZ2V0KCksIHJlc3VsdFJhbmdlSW5Db250ZXh0LmxvY2F0aW9uLCByZXN1bHRS
YW5nZUluQ29udGV4dC5sZW5ndGgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoIW1haW5SZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gYWN0aW9uQ29udGV4dCA9IGFkb3B0TlMoW2Fs
bG9jRERBY3Rpb25Db250ZXh0SW5zdGFuY2UoKSBpbml0XSk7Ci0gICAgW2FjdGlvbkNvbnRleHQg
c2V0QWxsUmVzdWx0czpAWyAoaWQpbWFpblJlc3VsdCBdXTsKLSAgICBbYWN0aW9uQ29udGV4dCBz
ZXRNYWluUmVzdWx0Om1haW5SZXN1bHRdOwotCi0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7
Ci0gICAgbWFpblJlc3VsdFJhbmdlLT5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7Ci0gICAgZGV0
ZWN0ZWREYXRhQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIHF1YWQgOiBxdWFkcykKLSAgICAgICAgZGV0ZWN0ZWREYXRhQm91bmRpbmdC
b3gudW5pdGUoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KHF1YWQuZW5jbG9zaW5nQm91bmRp
bmdCb3goKSkpOwotICAgIAotICAgIGRldGVjdGVkRGF0YVJhbmdlID0gbWFpblJlc3VsdFJhbmdl
OwotICAgIAotICAgIHJldHVybiBhY3Rpb25Db250ZXh0OwotfQotCi1SZXRhaW5QdHI8RERBY3Rp
b25Db250ZXh0PiBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChj
b25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0
YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKLXsKLSAgICBp
ZiAoIURhdGFEZXRlY3RvcnNMaWJyYXJ5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAg
aWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHJlbmRlcmVyID0g
bm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbjsKLSAgICBSZWZQdHI8UmFuZ2U+
IGNvbnRleHRSYW5nZTsKLQotICAgIGlmICghaXM8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+
KCpub2RlKSkgewotICAgICAgICBwb3NpdGlvbiA9IHJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50
KGhpdFRlc3RSZXN1bHQubG9jYWxQb2ludCgpLCBudWxscHRyKTsKLSAgICAgICAgaWYgKHBvc2l0
aW9uLmlzTnVsbCgpKQotICAgICAgICAgICAgcG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUobm9kZSk7Ci0KLSAgICAgICAgY29udGV4dFJhbmdlID0gcmFuZ2VFeHBhbmRlZEFy
b3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgICAgICBpZiAoIWNv
bnRleHRSYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICAgICAg
aWYgKCFmcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIEludFBv
aW50IGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJh
bWUoKTsKLSAgICAgICAgaWYgKCFmcmFtZS0+cmFuZ2VGb3JQb2ludChmcmFtZVBvaW50KSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3Np
dGlvbiA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKLSAgICAg
ICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgY29udGV4dFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBv
c2l0aW9uLCBMaW5lR3JhbnVsYXJpdHksIERpcmVjdGlvbkZvcndhcmQpOwotICAgICAgICBpZiAo
IWNvbnRleHRSYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAg
IHJldHVybiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwgY29udGV4dFJh
bmdlLCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2UpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDE5NTE1OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NSw2ICsxMjUsMTAgQEAKICNpbmNsdWRlICJBcmNoaXZlLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKERBVEFfREVURUNUSU9OKQorI2luY2x1ZGUgIkRhdGFEZXRlY3Rpb24uaCIKKyNlbmRpZgor
CiAjaWYgUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgogI2luY2x1ZGUg
Ik1lbW9yeVByZXNzdXJlSGFuZGxlci5oIgpAQCAtMjI3Nyw2ICsyMjgxLDEyIEBAIHZvaWQgRnJh
bWVMb2FkZXI6OmNoZWNrTG9hZENvbXBsZXRlRm9yVGgKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgbV9jbGllbnQuZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCk7CiAgICAgICAg
ICAgICAgICAgbG9hZGluZ0V2ZW50ID0gQVhPYmplY3RDYWNoZTo6QVhMb2FkaW5nRmluaXNoZWQ7
CisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1l
LnNldHRpbmdzKCkuZGF0YURldGVjdG9yVHlwZXMoKSAhPSBEYXRhRGV0ZWN0b3JUeXBlTm9uZSkg
eworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGRvY3VtZW50UmFuZ2UgPSBtYWtl
UmFuZ2UoZmlyc3RQb3NpdGlvbkluTm9kZShtX2ZyYW1lLmRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpKSwgbGFzdFBvc2l0aW9uSW5Ob2RlKG1fZnJhbWUuZG9jdW1lbnQoKS0+ZG9jdW1lbnRF
bGVtZW50KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29u
dGVudEluUmFuZ2UoZG9jdW1lbnRSYW5nZSwgbV9mcmFtZS5zZXR0aW5ncygpLmRhdGFEZXRlY3Rv
clR5cGVzKCkpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAvLyBOb3RpZnkgYWNjZXNzaWJpbGl0eS4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmgJKHJldmlzaW9uIDE5NTE1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTAgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAK
KyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisjaW5jbHVkZSAiRGF0YURldGVjdGlvbi5oIgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udEdlbmVyaWNGYW1pbGll
czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgkocmV2aXNpb24gMTk1MTU4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjI4LDYgKzIy
OCw3IEBAIGFnZ3Jlc3NpdmVUaWxlUmV0ZW50aW9uRW5hYmxlZCBpbml0aWFsPWYKIHRlbXBvcmFy
eVRpbGVDb2hvcnRSZXRlbnRpb25FbmFibGVkIGluaXRpYWw9dHJ1ZQogCiB1c2VJbWFnZURvY3Vt
ZW50Rm9yU3ViZnJhbWVQREYgaW5pdGlhbD1mYWxzZQorZGF0YURldGVjdG9yVHlwZXMgdHlwZT1E
YXRhRGV0ZWN0b3JUeXBlcywgaW5pdGlhbD1EYXRhRGV0ZWN0b3JUeXBlTm9uZSwgY29uZGl0aW9u
YWw9REFUQV9ERVRFQ1RJT04KIAogIyBBbGxvdyBTb3VyY2VCdWZmZXJzIHRvIHN0b3JlIHVwIHRv
IDMwNE1CIGVhY2gsIGVub3VnaCBmb3IgYXBwcm94aW1hdGVseSBmaXZlIG1pbnV0ZXMKICMgb2Yg
MTA4MHAgdmlkZW8gYW5kIHN0ZXJlbyBhdWRpby4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NwaS9tYWMvRGF0YURldGVjdG9yc1NQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9tYWMvRGF0YURldGVjdG9yc1NQSS5oCShyZXZpc2lvbiAxOTUxNTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL0RhdGFEZXRlY3RvcnNTUEkuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDEyIEBACiAKICNpbXBvcnQgPHd0Zi9QbGF0Zm9y
bS5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQogCiAjaW1wb3J0IDxXZWJDb3JlL0RhdGFEZXRlY3Rv
cnNDb3JlU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAKKyNpZiBQTEFU
Rk9STShNQUMpCisKICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiAvLyBDYW4ndCBpbmNs
dWRlIEREQWN0aW9uLmggYmVjYXVzZSBhcyBvZiB0aGlzIHdyaXRpbmcgaXQgaXMgYSBwcml2YXRl
IGhlYWRlciB0aGF0IGluY2x1ZGVzIGEgbm9uLXByaXZhdGUgaGVhZGVyIHdpdGggYW4gIiIgaW5j
bHVkZS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTE1OCkKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAxLTE1ICBF
bnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQg
Zm9yIERhdGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4
NTU5NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZCBpbXBsZW1lbnRpbmcgRGF0YSBEZXRlY3RvcnMg
c3VwcG9ydAorICAgICAgICBpbiBXSzIuIFRoZSBwYXRjaCBhZGRzIGEgbmV3IHByb3BlcnR5IHRv
IHRoZSBjb25maWd1cmF0aW9uCisgICAgICAgIG9iamVjdCB0byBpbmRpY2F0ZSB0aGUgdHlwZSBv
ZiBkZXRlY3Rpb24gZGVzaXJlZCBhbmQgcHJvcGFnYXRlcworICAgICAgICB0byB0aGUgV2ViUHJv
Y2Vzcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgorICAgICAgICAqIFNoYXJl
ZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBpbml0V2l0aEZyYW1lOmNv
bmZpZ3VyYXRpb246XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdD
b25maWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdD
b25maWd1cmF0aW9uLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXdDb25maWd1cmF0aW9uIGNvcHlX
aXRoWm9uZTpdKToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbTogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZyb21XS0RhdGFEZXRlY3RvclR5cGVzKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oOgorCiAyMDE2LTAxLTE1ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRh
bnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBGaXggaW50ZXJuYWwgV2luZG93cyBidWlsZApJ
bmRleDogU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25m
aWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURl
ZmluZXMueGNjb25maWcJKHJldmlzaW9uIDE5NTE1OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NvbmZp
Z3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEs
NiArMTExLDcgQEAgRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UU1tzZGs9bWFjb3N4Kl0gPQogRU5B
QkxFX01BQ19HRVNUVVJFX0VWRU5UU19tYWNvc3hfV0lUSF9JTlRFUk5BTF9TREtfWUVTID0gRU5B
QkxFX01BQ19HRVNUVVJFX0VWRU5UUzsKIAogRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkdbc2Rr
PWlwaG9uZSpdID0gRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkc7CitFTkFCTEVfREFUQV9ERVRF
Q1RJT04gPSBFTkFCTEVfREFUQV9ERVRFQ1RJT047CiAKIEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRT
W3Nkaz1pcGhvbmUqXSA9ICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9zX1dJVEhfSU5URVJO
QUxfU0RLXyQoVVNFX0lOVEVSTkFMX1NESykpOwogRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9z
X1dJVEhfSU5URVJOQUxfU0RLX1lFUyA9IEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTOwpJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5o
CShyZXZpc2lvbiAxOTUxNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5j
ZXNEZWZpbml0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDcgQEAKICAgICBt
YWNybyhJbnNwZWN0b3JBdHRhY2htZW50U2lkZSwgaW5zcGVjdG9yQXR0YWNobWVudFNpZGUsIFVJ
bnQzMiwgdWludDMyX3QsIDApIFwKICAgICBtYWNybyhTdG9yYWdlQmxvY2tpbmdQb2xpY3ksIHN0
b3JhZ2VCbG9ja2luZ1BvbGljeSwgVUludDMyLCB1aW50MzJfdCwgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW46OkJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2UpIFwKICAgICBtYWNybyhKYXZhU2NyaXB0UnVu
dGltZUZsYWdzLCBqYXZhU2NyaXB0UnVudGltZUZsYWdzLCBVSW50MzIsIHVpbnQzMl90LCAwKSBc
CisgICAgbWFjcm8oRGF0YURldGVjdG9yVHlwZXMsIGRhdGFEZXRlY3RvclR5cGVzLCBVSW50MzIs
IHVpbnQzMl90LCAwKSBcCiAgICAgXAogCiAjZGVmaW5lIEZPUl9FQUNIX1dFQktJVF9ERUJVR19C
T09MX1BSRUZFUkVOQ0UobWFjcm8pIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAxOTUxNTgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzgzLDYgKzM4Myw5IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3Qp
ZnIKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5jZVZhbHVlcygpLnNldChXZWJLaXQ6
OldlYlByZWZlcmVuY2VzS2V5OjppbnZpc2libGVBdXRvcGxheU5vdFBlcm1pdHRlZEtleSgpLCBX
ZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmU6OlZhbHVlKCEhW19jb25maWd1cmF0aW9uIF9pbnZp
c2libGVBdXRvcGxheU5vdFBlcm1pdHRlZF0pKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJl
ZmVyZW5jZVZhbHVlcygpLnNldChXZWJLaXQ6OldlYlByZWZlcmVuY2VzS2V5OjptZWRpYURhdGFM
b2Fkc0F1dG9tYXRpY2FsbHlLZXkoKSwgV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpWYWx1
ZSghIVtfY29uZmlndXJhdGlvbiBfbWVkaWFEYXRhTG9hZHNBdXRvbWF0aWNhbGx5XSkpOwogI2Vu
ZGlmCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgIHBhZ2VDb25maWd1cmF0aW9uLT5w
cmVmZXJlbmNlVmFsdWVzKCkuc2V0KFdlYktpdDo6V2ViUHJlZmVyZW5jZXNLZXk6OmRhdGFEZXRl
Y3RvclR5cGVzS2V5KCksIFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZTo6VmFsdWUoc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KFtfY29uZmlndXJhdGlvbiBkYXRhRGV0ZWN0b3JUeXBlc10pKSk7Cisj
ZW5kaWYKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5wcmVmZXJlbmNlVmFsdWVzKCkuc2V0KFdlYktpdDo6V2ViUHJlZmVyZW5jZXNL
ZXk6OmFsbG93c0FpclBsYXlGb3JNZWRpYVBsYXliYWNrS2V5KCksIFdlYktpdDo6V2ViUHJlZmVy
ZW5jZXNTdG9yZTo6VmFsdWUoISFbX2NvbmZpZ3VyYXRpb24gYWxsb3dzQWlyUGxheUZvck1lZGlh
UGxheWJhY2tdKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oCShyZXZpc2lv
biAxOTUxNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMjggQEAgdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgV0tTZWxlY3Rpb25HcgogfSBXS19FTlVNX0FWQUlMQUJMRV9J
T1MoOF8wKTsKICNlbmRpZgogCisvKiEgQGVudW0gV0tEYXRhRGV0ZWN0b3JUeXBlcworIEBhYnN0
cmFjdCBUaGUgdHlwZSBvZiBkYXRhIHdlIHdhbnQgdG8gZGV0ZWN0LgorIEBjb25zdGFudCBXS0Rh
dGFEZXRlY3RvclR5cGVOb25lIE5vIGRldGVjdGlvbiBpcyBwZXJmb3JtZWQuCisgQGNvbnN0YW50
IFdLRGF0YURldGVjdG9yVHlwZVBob25lTnVtYmVyIFBob25lIG51bWJlcnMgYXJlIGRldGVjdGVk
IGFuZCB0dXJuZWQgaW50byBsaW5rcy4KKyBAY29uc3RhbnQgV0tEYXRhRGV0ZWN0b3JUeXBlTGlu
ayBVUkxzIGluIHRleHQgYXJlIGRldGVjdGVkIGFuZCB0dXJuZWQgaW50byBsaW5rcy4KKyBAY29u
c3RhbnQgV0tEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcyBBZGRyZXNzZXMgYXJlIGRldGVjdGVkIGFu
ZCB0dXJuZWQgaW50byBsaW5rcy4KKyBAY29uc3RhbnQgV0tEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5k
YXJFdmVudCBEYXRlcyBhbmQgdGltZSB0aGF0IGFyZSBpbiB0aGUgZnV0dXJlIGFyZSBkZXRlY3Rl
ZCBhbmQgdHVybmVkIGludG8gbGlua3MuCisgQGNvbnN0YW50IFdLRGF0YURldGVjdG9yVHlwZUFs
bCBBbGwgb2YgdGhlIGFib3ZlIGRhdGEgdHlwZXMgYXJlIHR1cm5lZCBpbnRvIGxpbmtzIHdoZW4g
ZGV0ZWN0ZWQuIENob3NpbmcgdGhpcyB2YWx1ZSB3aWxsCisgYXV0b21hdGljYWxseSBpbmNsdWRl
IGFueSBuZXcgZGV0ZWN0aW9uIHR5cGUgdGhhdCBpcyBhZGRlZC4KKyBAZGlzY3Vzc2lvbiBBbiBl
eGFtcGxlIG9mIGhvdyB0aGlzIHByb3BlcnR5IG1heSBhZmZlY3QgdGhlIGNvbnRlbnQgbG9hZGVk
IGluIHRoZSBXS1dlYlZpZXcgaXMgdGhhdCBjb250ZW50IGxpa2UKKyAnVmlzaXQgYXBwbGUuY29t
IG9uIEp1bHkgNHRoIG9yIGNhbGwgMSA4MDAgNTU1LTU1NDUnIHdpbGwgYmUgdHJhbnNmb3JtZWQg
dG8gYWRkIGxpbmtzIGFyb3VuZCAnYXBwbGUuY29tJywgJ0p1bHkgNHRoJyBhbmQgJzEgODAwIDU1
NS01NTQ1JworIGlmIHRoZSBkYXRhRGV0ZWN0b3JUeXBlcyBwcm9wZXJ0eSBpcyBzZXQgdG8gV0tE
YXRhRGV0ZWN0b3JUeXBlUGhvbmVOdW1iZXIgfCBXS0RhdGFEZXRlY3RvclR5cGVMaW5rIHwgV0tE
YXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudC4KKyAqLwordHlwZWRlZiBOU19PUFRJT05TKE5T
VUludGVnZXIsIFdLRGF0YURldGVjdG9yVHlwZXMpIHsKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVO
b25lID0gMCwKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlciA9IDEgPDwgMCwKKyAg
ICBXS0RhdGFEZXRlY3RvclR5cGVMaW5rID0gMSA8PCAxLAorICAgIFdLRGF0YURldGVjdG9yVHlw
ZUFkZHJlc3MgPSAxIDw8IDIsCisgICAgV0tEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCA9
IDEgPDwgMywKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVBbGwgPSBOU1VJbnRlZ2VyTWF4Cit9IFdL
X0VOVU1fQVZBSUxBQkxFKFdLX01BQ19UQkEsIFdLX0lPU19UQkEpOworCiAvKiEgQSBXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIG9iamVjdCBpcyBhIGNvbGxlY3Rpb24gb2YgcHJvcGVydGllcyB3aXRo
CiAgd2hpY2ggdG8gaW5pdGlhbGl6ZSBhIHdlYiB2aWV3LgogIEBoZWxwcyBDb250YWlucyBwcm9w
ZXJ0aWVzIHVzZWQgdG8gY29uZmlndXJlIGEgQGxpbmsgV0tXZWJWaWV3IEAvbGluay4KQEAgLTkz
LDYgKzExNSwxMSBAQCBXS19DTEFTU19BVkFJTEFCTEUoMTBfMTAsIDhfMCkKICAqLwogQHByb3Bl
cnR5IChub25hdG9taWMpIEJPT0wgYWxsb3dzQWlyUGxheUZvck1lZGlhUGxheWJhY2sgV0tfQVZB
SUxBQkxFKDEwXzExLCA5XzApOwogCisvKiEgQGFic3RyYWN0IEFuIGVudW0gdmFsdWUgaW5kaWNh
dGluZyB0aGUgdHlwZSBvZiBkYXRhIGRldGVjdGlvbiBkZXNpcmVkLgorIEBkaXNjdXNzaW9uIFRo
ZSBkZWZhdWx0IHZhbHVlIGlzIFdLRGF0YURldGVjdG9yVHlwZU5vbmUuCisgKi8KK0Bwcm9wZXJ0
eSAobm9uYXRvbWljKSBXS0RhdGFEZXRlY3RvclR5cGVzIGRhdGFEZXRlY3RvclR5cGVzIFdLX0FW
QUlMQUJMRShXS19NQUNfVEJBLCBXS19JT1NfVEJBKTsKKwogI2lmIFRBUkdFVF9PU19JUEhPTkUK
IC8qISBAYWJzdHJhY3QgQSBCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciBIVE1MNSB2
aWRlb3MgcGxheSBpbmxpbmUKICAoWUVTKSBvciB1c2UgdGhlIG5hdGl2ZSBmdWxsLXNjcmVlbiBj
b250cm9sbGVyIChOTykuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld0NvbmZpZ3VyYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1tCShyZXZpc2lvbiAx
OTUxNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5OCw2ICsxOTgsOSBAQCAtIChpZClj
b3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUKICAgICBjb25maWd1cmF0aW9uLT5fc2VydmljZUNv
bnRyb2xzRW5hYmxlZCA9IHNlbGYtPl9zZXJ2aWNlQ29udHJvbHNFbmFibGVkOwogICAgIGNvbmZp
Z3VyYXRpb24tPl9pbWFnZUNvbnRyb2xzRW5hYmxlZCA9IHNlbGYtPl9pbWFnZUNvbnRyb2xzRW5h
YmxlZDsKICNlbmRpZgorI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBjb25maWd1cmF0
aW9uLT5fZGF0YURldGVjdG9yVHlwZXMgPSBzZWxmLT5fZGF0YURldGVjdG9yVHlwZXM7CisjZW5k
aWYKICNpZiBFTkFCTEUoV0lSRUxFU1NfVEFSR0VUX1BMQVlCQUNLKQogICAgIGNvbmZpZ3VyYXRp
b24tPl9hbGxvd3NBaXJQbGF5Rm9yTWVkaWFQbGF5YmFjayA9IHNlbGYtPl9hbGxvd3NBaXJQbGF5
Rm9yTWVkaWFQbGF5YmFjazsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk1MTU4KQorKysgU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjg5LDYgKzE2ODksNyBAQAogCQlDNTQyNTZCODE4QkVDMThDMDBERTQxNzkgLyog
V0tGb3JtUG9wb3Zlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzU0MjU2QjIxOEJFQzE4QjAwREU0MTc5IC8qIFdLRm9ybVBvcG92ZXIuaCAqLzsgfTsK
IAkJQzU0MjU2QjkxOEJFQzE4QzAwREU0MTc5IC8qIFdLRm9ybVBvcG92ZXIubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTQyNTZCMzE4QkVDMThCMDBE
RTQxNzkgLyogV0tGb3JtUG9wb3Zlci5tbSAqLzsgfTsKIAkJQzU0MjU2QkExOEJFQzE4QzAwREU0
MTc5IC8qIFdLRm9ybVNlbGVjdENvbnRyb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM1NDI1NkI0MThCRUMxOEMwMERFNDE3OSAvKiBXS0Zvcm1TZWxl
Y3RDb250cm9sLmggKi87IH07CisJCUM1NTRBMzEzMUM0OUMzNjQwMEEzODhGRSAvKiBXZWJQYWdl
Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTU0QTMxMTFDNDlCQ0NCMDBBMzg4RkUgLyogV2ViUGFnZUNvY29hLm1tICovOyB9OwogCQlDNTVD
QjVCNzE4QzI2OUNGMDBDQTgxRTEgLyogV0tGb3JtU2VsZWN0UG9wb3Zlci5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NzE5M0JBMThDMTQ5RDAwMDJE
MEYxMiAvKiBXS0Zvcm1TZWxlY3RQb3BvdmVyLm1tICovOyB9OwogCQlDNTVDQjVCODE4QzJBNUQ2
MDBDQTgxRTEgLyogV0tGb3JtU2VsZWN0UGlja2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3MTkzQjkxOEMxNDlEMDAwMkQwRjEyIC8qIFdLRm9y
bVNlbGVjdFBpY2tlci5tbSAqLzsgfTsKIAkJQzU3MTkzQkUxOEMxNEE0NDAwMkQwRjEyIC8qIFdL
Rm9ybVNlbGVjdENvbnRyb2wubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTcxOTNCRDE4QzE0QTQzMDAyRDBGMTIgLyogV0tGb3JtU2VsZWN0Q29udHJv
bC5tbSAqLzsgfTsKQEAgLTM5MzIsNiArMzkzMyw3IEBACiAJCUM1NDI1NkIyMThCRUMxOEIwMERF
NDE3OSAvKiBXS0Zvcm1Qb3BvdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdLRm9ybVBvcG92ZXIuaDsgcGF0aCA9IGlvcy9mb3Jtcy9XS0Zvcm1Qb3BvdmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NDI1NkIzMThCRUMxOEIwMERFNDE3OSAvKiBXS0Zv
cm1Qb3BvdmVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tG
b3JtUG9wb3Zlci5tbTsgcGF0aCA9IGlvcy9mb3Jtcy9XS0Zvcm1Qb3BvdmVyLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDNTQyNTZCNDE4QkVDMThDMDBERTQxNzkgLyogV0tGb3Jt
U2VsZWN0Q29udHJvbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0Zvcm1T
ZWxlY3RDb250cm9sLmg7IHBhdGggPSBpb3MvZm9ybXMvV0tGb3JtU2VsZWN0Q29udHJvbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTU0QTMxMTFDNDlCQ0NCMDBBMzg4RkUgLyog
V2ViUGFnZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViUGFnZUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTU0RkZBMjEy
RTRFOEVBMDAyRjIyQzAgLyogV2ViRHJhZ0NsaWVudE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkRyYWdDbGllbnRNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUM1NzE5M0I5MThDMTQ5RDAwMDJEMEYxMiAvKiBXS0Zvcm1TZWxlY3RQ
aWNrZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0Zvcm1T
ZWxlY3RQaWNrZXIubW07IHBhdGggPSBpb3MvZm9ybXMvV0tGb3JtU2VsZWN0UGlja2VyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTcxOTNCQTE4QzE0OUQwMDAyRDBGMTIgLyog
V0tGb3JtU2VsZWN0UG9wb3Zlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFdLRm9ybVNlbGVjdFBvcG92ZXIubW07IHBhdGggPSBpb3MvZm9ybXMvV0tGb3JtU2Vs
ZWN0UG9wb3Zlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwODgsNiArNTA5
MCw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkyRDI5RUNDRTE5MkYyQzJFMDA5ODRCNzggLyog
UmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yLmggKi8sCiAJCQkJMkQyOUVDQ0Yx
OTJGMkMyRTAwOTg0Qjc4IC8qIFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvci5t
bSAqLywKKwkJCQlDNTU0QTMxMTFDNDlCQ0NCMDBBMzg4RkUgLyogV2ViUGFnZUNvY29hLm1tICov
LAogCQkJKTsKIAkJCXBhdGggPSBDb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC05MzkyLDYgKzkzOTUsNyBAQAogCQkJCTJEODc4NjIzMUJEQjU4RkYwMEQwMkFCQiAvKiBBUElV
c2VyU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNUUxQUZFQzE2QjIxMDEyMDA2
Q0MxRjIgLyogQVBJV2ViQXJjaGl2ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUM1RTFBRkVFMTZC
MjEwMjUwMDZDQzFGMiAvKiBBUElXZWJBcmNoaXZlUmVzb3VyY2UubW0gaW4gU291cmNlcyAqLywK
KwkJCQlDNTU0QTMxMzFDNDlDMzY0MDBBMzg4RkUgLyogV2ViUGFnZUNvY29hLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUE0ODMyQzcxQTlCQzEzQzAwOEI0REZFIC8qIEFQSVdlYnNpdGVEYXRhUmVj
b3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMzYzNUE5MUEzMTQ0QTMwMEVENjE5NyAvKiBB
UElXZWJzaXRlRGF0YVN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMzYzNUFEMUEzMTQ1
RTUwMEVENjE5NyAvKiBBUElXZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJ
KHJldmlzaW9uIDE5NTE1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDYgKzIxOSwxMCBAQAogI2luY2x1ZGUg
IkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJM
RShEQVRBX0RFVEVDVElPTikKKyNpbmNsdWRlIDxXZWJDb3JlL0RhdGFEZXRlY3Rpb24uaD4KKyNl
bmRpZgorCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogI2luY2x1ZGUgPFdl
YkNvcmUvTWVkaWFQbGF5ZXJSZXF1ZXN0SW5zdGFsbE1pc3NpbmdQbHVnaW5zQ2FsbGJhY2suaD4K
ICNlbmRpZgpAQCAtMjkzNSw2ICsyOTM5LDkgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJl
bmNlcyhjb25zdCBXZQogICAgIHNldHRpbmdzLnNldFVzZUltYWdlRG9jdW1lbnRGb3JTdWJmcmFt
ZVBERih0cnVlKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgIHNl
dHRpbmdzLnNldERhdGFEZXRlY3RvclR5cGVzKGZyb21XS0RhdGFEZXRlY3RvclR5cGVzKHN0b3Jl
LmdldFVJbnQzMlZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpkYXRhRGV0ZWN0b3JUeXBl
c0tleSgpKSkpOworI2VuZGlmCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRHYW1lcGFkc0VuYWJsZWQoc3RvcmUuZ2V0
Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpnYW1lcGFkc0VuYWJsZWRLZXkoKSkp
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgJKHJldmlzaW9uIDE5NTE1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDEwIEBACiAjaW1wb3J0
ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9O
KQorI2luY2x1ZGUgPFdlYkNvcmUvRGF0YURldGVjdGlvbi5oPgorI2VuZGlmCisKICNpZiBFTkFC
TEUoSU9TX1RPVUNIX0VWRU5UUykKICNpbmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvUGxhdGZvcm1U
b3VjaEV2ZW50SU9TLmg+CiAjZWxpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMTA2Miw2ICsx
MDY2LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdQREZEb2N1bWVudChDR0NvbnRleHRSZWYs
IFBERkRvY3VtZW50ICosIGNvbnN0IFByaW50SW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKICAgICB2b2lkIGRyYXdQYWdlc1RvUERGRnJvbVBERkRvY3VtZW50KENHQ29udGV4dFJlZiwg
UERGRG9jdW1lbnQgKiwgY29uc3QgUHJpbnRJbmZvJiwgdWludDMyX3QgZmlyc3QsIHVpbnQzMl90
IGNvdW50KTsKICNlbmRpZgorI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBXZWJDb3Jl
OjpEYXRhRGV0ZWN0b3JUeXBlcyBmcm9tV0tEYXRhRGV0ZWN0b3JUeXBlcyh1aW50MzJfdCB0eXBl
cyk7CisjZW5kaWYKIAogICAgIHZvaWQgc2V0TWFpbkZyYW1lSXNTY3JvbGxhYmxlKGJvb2wpOwog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b2NvYS9XZWJQYWdlQ29jb2EubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIldlYlBhZ2UuaCIKKworI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJh
dGlvbi5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCitEYXRhRGV0ZWN0b3JUeXBlcyBXZWJQYWdl
Ojpmcm9tV0tEYXRhRGV0ZWN0b3JUeXBlcyh1aW50MzJfdCB0eXBlcykKK3sKKyAgICBpZiAoc3Rh
dGljX2Nhc3Q8V0tEYXRhRGV0ZWN0b3JUeXBlcz4odHlwZXMpID09IFdLRGF0YURldGVjdG9yVHlw
ZU5vbmUpCisgICAgICAgIHJldHVybiBEYXRhRGV0ZWN0b3JUeXBlTm9uZTsKKyAgICBpZiAoc3Rh
dGljX2Nhc3Q8V0tEYXRhRGV0ZWN0b3JUeXBlcz4odHlwZXMpID09IFdLRGF0YURldGVjdG9yVHlw
ZUFsbCkKKyAgICAgICAgcmV0dXJuIERhdGFEZXRlY3RvclR5cGVBbGw7CisgICAgCisgICAgdWlu
dDMyX3QgdmFsdWUgPSBEYXRhRGV0ZWN0b3JUeXBlTm9uZTsKKyAgICBpZiAodHlwZXMgJiBXS0Rh
dGFEZXRlY3RvclR5cGVQaG9uZU51bWJlcikKKyAgICAgICAgdmFsdWUgfD0gRGF0YURldGVjdG9y
VHlwZVBob25lTnVtYmVyOworICAgIGlmICh0eXBlcyAmIFdLRGF0YURldGVjdG9yVHlwZUxpbmsp
CisgICAgICAgIHZhbHVlIHw9IERhdGFEZXRlY3RvclR5cGVMaW5rOworICAgIGlmICh0eXBlcyAm
IFdLRGF0YURldGVjdG9yVHlwZUFkZHJlc3MpCisgICAgICAgIHZhbHVlIHw9IERhdGFEZXRlY3Rv
clR5cGVBZGRyZXNzOworICAgIGlmICh0eXBlcyAmIFdLRGF0YURldGVjdG9yVHlwZUNhbGVuZGFy
RXZlbnQpCisgICAgICAgIHZhbHVlIHw9IERhdGFEZXRlY3RvclR5cGVDYWxlbmRhckV2ZW50Owor
ICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRhRGV0ZWN0b3JUeXBlcz4odmFsdWUpOwor
fQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwko
cmV2aXNpb24gMTk1MTU4KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDEtMTUgIEVucmljYSBDYXN1Y2NpICA8ZW5y
aWNhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgRGF0YURldGVjdG9ycyBp
biBXSyAoaU9TKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1Mjk4OQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yMjg1NTk2MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBmZWF0dXJlIGRlZmlu
aXRpb24gZm9yIGRhdGEgZGV0ZWN0aW9uLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvRmVh
dHVyZURlZmluZXMueGNjb25maWc6CisKIDIwMTYtMDEtMTUgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRGF0YSBkZXRlY3RvciB5ZWxsb3cgaGlnaGxp
Z2h0IGxvY2F0aW9uIGlzIHZlcnRpY2FsbHkgbWlycm9yZWQgaW4gV2ViS2l0MQpJbmRleDogU291
cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmlu
ZXMueGNjb25maWcJKHJldmlzaW9uIDE5NTE1OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NvbmZp
Z3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEs
NiArMTExLDcgQEAgRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UU1tzZGs9bWFjb3N4Kl0gPQogRU5B
QkxFX01BQ19HRVNUVVJFX0VWRU5UU19tYWNvc3hfV0lUSF9JTlRFUk5BTF9TREtfWUVTID0gRU5B
QkxFX01BQ19HRVNUVVJFX0VWRU5UUzsKIAogRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkdbc2Rr
PWlwaG9uZSpdID0gRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkc7CitFTkFCTEVfREFUQV9ERVRF
Q1RJT04gPSBFTkFCTEVfREFUQV9ERVRFQ1RJT047CiAKIEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRT
W3Nkaz1pcGhvbmUqXSA9ICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9zX1dJVEhfSU5URVJO
QUxfU0RLXyQoVVNFX0lOVEVSTkFMX1NESykpOwogRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9z
X1dJVEhfSU5URVJOQUxfU0RLX1lFUyA9IEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269272</attachid>
            <date>2016-01-19 10:45:44 -0800</date>
            <delta_ts>2016-01-19 14:22:29 -0800</delta_ts>
            <desc>Patch6</desc>
            <filename>ddwk2-part1.txt</filename>
            <type>text/plain</type>
            <size>54022</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MTU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE2LTAxLTE1ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAg
ICAgQWRkIHN1cHBvcnQgZm9yIERhdGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRh
cjovL3Byb2JsZW0vMjI4NTU5NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgZmVhdHVyZSBkZWZpbml0aW9uLgorCisgICAgICAgICogQ29u
ZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisKIDIwMTYtMDEtMTUgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggaW50
ZXJuYWwgV2luZG93cyBidWlsZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3Vy
YXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwkocmV2aXNp
b24gMTk1MTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1
cmVEZWZpbmVzLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNiArMTExLDcgQEAgRU5B
QkxFX01BQ19HRVNUVVJFX0VWRU5UU1tzZGs9bWFjb3N4Kl0gPQogRU5BQkxFX01BQ19HRVNUVVJF
X0VWRU5UU19tYWNvc3hfV0lUSF9JTlRFUk5BTF9TREtfWUVTID0gRU5BQkxFX01BQ19HRVNUVVJF
X0VWRU5UUzsKIAogRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkdbc2RrPWlwaG9uZSpdID0gRU5B
QkxFX0lPU19URVhUX0FVVE9TSVpJTkc7CitFTkFCTEVfREFUQV9ERVRFQ1RJT04gPSBFTkFCTEVf
REFUQV9ERVRFQ1RJT047CiAKIEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTW3Nkaz1pcGhvbmUqXSA9
ICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9zX1dJVEhfSU5URVJOQUxfU0RLXyQoVVNFX0lO
VEVSTkFMX1NESykpOwogRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9zX1dJVEhfSU5URVJOQUxf
U0RLX1lFUyA9IEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTOwpJbmRleDogU291cmNlL1dURi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTE1
OCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTYtMDEtMTUgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgc3VwcG9ydCBmb3IgRGF0YURldGVjdG9ycyBpbiBXSyAoaU9TKS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjk4OQorICAgICAgICBy
ZGFyOi8vcHJvYmxlbS8yMjg1NTk2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGluZyBmZWF0dXJlIGRlZmluaXRpb24gZm9yIGRhdGEgZGV0ZWN0
aW9uLgorCisgICAgICAgICogd3RmL0ZlYXR1cmVEZWZpbmVzLmg6CisKIDIwMTYtMDEtMTUgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGtkZWJ1
Z190cmFjZSBzaWducG9zdHMgZm9yIGEgZmV3IFdlYkNvcmUgb3BlcmF0aW9ucwpJbmRleDogU291
cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9GZWF0dXJlRGVmaW5lcy5oCShyZXZpc2lvbiAxOTUxNTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9G
ZWF0dXJlRGVmaW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNiArMjcyLDE0IEBAIHRoZSBw
dWJsaWMgaU9TIFNESy4gV2Ugd2lsbCBhbHNvIG5lZWQgdG8KIAogI2VuZGlmIC8qIFBMQVRGT1JN
KE1BQykgKi8KIAorI2lmIFBMQVRGT1JNKENPQ09BKQorCisjaWYgIWRlZmluZWQoRU5BQkxFX0RB
VEFfREVURUNUSU9OKQorI2RlZmluZSBFTkFCTEVfREFUQV9ERVRFQ1RJT04gMQorI2VuZGlmCisK
KyNlbmRpZiAvKiBQTEFURk9STShDT0NPQSkgKi8KKwogLyogLS0tLS0tLS0tIEFwcGxlIFdpbmRv
d3MgcG9ydCAtLS0tLS0tLS0gKi8KICNpZiBQTEFURk9STShXSU4pICYmICFQTEFURk9STShXSU5f
Q0FJUk8pCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTE1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAxLTE1
ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBv
cnQgZm9yIERhdGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
MjI4NTU5NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZCBpbXBsZW1lbnRpbmcgRGF0YSBEZXRlY3Rv
cnMgc3VwcG9ydAorICAgICAgICBpbiBXSzIuIFRoZSBwYXRjaCBhZGRzIGEgbmV3IG1lbWViZXIg
dG8gdGhlIFNldHRpbmdzIG9iamVjdAorICAgICAgICB0byByZXRyaWV2ZSB0aGUgdHlwZSBvZiBk
ZXRlY3Rpb24gZGVzaXJlZC4gVGhlIERhdGFEZXRlY3Rpb24gZmlsZXMKKyAgICAgICAgaGF2ZSBi
ZWVuIG1vdmVkIHVuZGVyIGNvY29hLCBzaW5jZSB0aGV5IGFyZSBubyBsb25nZXIgT1MgWCBzcGVj
aWZpYy4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmln
OgorICAgICAgICAqIENvbmZpZ3VyYXRpb25zL1dlYkNvcmUueGNjb25maWc6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9EYXRhRGV0ZWN0aW9uLmguCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9u
Lm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9u
Lm1tLgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudElu
UmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24uaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBlZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLm1tOiBSZW1vdmVkLgorICAgICAg
ICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6Y2hlY2tMb2FkQ29tcGxldGVGb3JUaGlzRnJhbWUpOgorICAgICAgICAqIHBhZ2UvU2V0dGlu
Z3MuaDoKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmluOgorICAgICAgICAqIHBsYXRmb3JtL3Nw
aS9tYWMvRGF0YURldGVjdG9yc1NQSS5oOgorCiAyMDE2LTAxLTE1ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRHJvcCBvYnNvbGV0ZSBEb2N1bWVudFR5cGUuZW50
aXRpZXMgLyBub3RhdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NvbmZpZ3VyYXRpb25zL0Zl
YXR1cmVEZWZpbmVzLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NvbmZp
Z3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCShyZXZpc2lvbiAxOTUxNTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwkod29y
a2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSw3IEBAIEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFNb
c2RrPW1hY29zeCpdID0KIEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFNfbWFjb3N4X1dJVEhfSU5U
RVJOQUxfU0RLX1lFUyA9IEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFM7CiAKIEVOQUJMRV9JT1Nf
VEVYVF9BVVRPU0laSU5HW3Nkaz1pcGhvbmUqXSA9IEVOQUJMRV9JT1NfVEVYVF9BVVRPU0laSU5H
OworRU5BQkxFX0RBVEFfREVURUNUSU9OID0gRU5BQkxFX0RBVEFfREVURUNUSU9OOwogCiBFTkFC
TEVfSU9TX1RPVUNIX0VWRU5UU1tzZGs9aXBob25lKl0gPSAkKEVOQUJMRV9JT1NfVE9VQ0hfRVZF
TlRTX2lvc19XSVRIX0lOVEVSTkFMX1NES18kKFVTRV9JTlRFUk5BTF9TREspKTsKIEVOQUJMRV9J
T1NfVE9VQ0hfRVZFTlRTX2lvc19XSVRIX0lOVEVSTkFMX1NES19ZRVMgPSBFTkFCTEVfSU9TX1RP
VUNIX0VWRU5UUzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NvbmZpZ3VyYXRpb25zL1dlYkNvcmUu
eGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvV2Vi
Q29yZS54Y2NvbmZpZwkocmV2aXNpb24gMTk1MTU4KQorKysgU291cmNlL1dlYkNvcmUvQ29uZmln
dXJhdGlvbnMvV2ViQ29yZS54Y2NvbmZpZwkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBA
QCBQUk9EVUNUX05BTUUgPSBXZWJDb3JlOwogVU5FWFBPUlRFRF9TWU1CT0xTX0ZJTEUgPSBDb25m
aWd1cmF0aW9ucy9XZWJDb3JlLnVuZXhwOwogT1RIRVJfTERGTEFHUyA9ICQoaW5oZXJpdGVkKSAk
KE9USEVSX0xERkxBR1NfUExBVEZPUk0pOwogT1RIRVJfTERGTEFHU19CQVNFID0gLWxzcWxpdGUz
IC1sb2JqYyAtbEFOR0xFOwotT1RIRVJfTERGTEFHU19CQVNFX2lvcyA9ICQoT1RIRVJfTERGTEFH
U19CQVNFKSAtZnJhbWV3b3JrIENGTmV0d29yayAtZnJhbWV3b3JrIENvcmVHcmFwaGljcyAtZnJh
bWV3b3JrIENvcmVUZXh0IC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJhbWV3b3JrIEdyYXBoaWNz
U2VydmljZXMgLWZyYW1ld29yayBJbWFnZUlPIC1mcmFtZXdvcmsgT3BlbkdMRVMgLWxNb2JpbGVH
ZXN0YWx0OworT1RIRVJfTERGTEFHU19CQVNFX2lvcyA9ICQoT1RIRVJfTERGTEFHU19CQVNFKSAt
ZnJhbWV3b3JrIENGTmV0d29yayAtZnJhbWV3b3JrIENvcmVHcmFwaGljcyAtZnJhbWV3b3JrIENv
cmVUZXh0IC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJhbWV3b3JrIEdyYXBoaWNzU2VydmljZXMg
LWZyYW1ld29yayBJbWFnZUlPIC1mcmFtZXdvcmsgT3BlbkdMRVMgLWxNb2JpbGVHZXN0YWx0IC1m
cmFtZXdvcmsgRGF0YURldGVjdG9yc0NvcmU7CiBPVEhFUl9MREZMQUdTX1BMQVRGT1JNW3Nkaz1p
cGhvbmVvcypdID0gJChPVEhFUl9MREZMQUdTX0JBU0VfaW9zKSAtZnJhbWV3b3JrIElPU3VyZmFj
ZTsKIE9USEVSX0xERkxBR1NfUExBVEZPUk1bc2RrPWlwaG9uZXNpbXVsYXRvcipdID0gJChPVEhF
Ul9MREZMQUdTX0JBU0VfaW9zKTsKIE9USEVSX0xERkxBR1NfUExBVEZPUk1bc2RrPW1hY29zeCpd
ID0gJChPVEhFUl9MREZMQUdTX0JBU0UpIC1zdWJfbGlicmFyeSBsaWJvYmpjIC11bWJyZWxsYSBX
ZWJLaXQgLWFsbG93YWJsZV9jbGllbnQgV2ViQ29yZVRlc3RTdXBwb3J0IC1hbGxvd2FibGVfY2xp
ZW50IFdlYktpdDIgLWFsbG93YWJsZV9jbGllbnQgV2ViS2l0TGVnYWN5IC1mcmFtZXdvcmsgQXBw
bGljYXRpb25TZXJ2aWNlcyAtZnJhbWV3b3JrIEF1ZGlvVW5pdCAtZnJhbWV3b3JrIENhcmJvbiAt
ZnJhbWV3b3JrIENvY29hIC1mcmFtZXdvcmsgRGF0YURldGVjdG9yc0NvcmUgLWZyYW1ld29yayBJ
T1N1cmZhY2UgLWZyYW1ld29yayBPcGVuR0w7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUxNTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTExMzcsOCArMTEzNyw2IEBACiAJCTJENTAwMkZDMUI1NkQ3OTkwMDIwQUFGNyAv
KiBQYXRoVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJENTAzNjY4MUJD
REREQzQwMEUyMEJCMyAvKiBHZXN0dXJlRXZlbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENTAzNjY3MUJDREREQzQwMEUyMEJCMyAvKiBHZXN0
dXJlRXZlbnRzLmNwcCAqLzsgfTsKIAkJMkQ1NjQ2QjAxQjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rp
b25hcnlQb3B1cEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJENTY0NkFGMUI4Rjg0OTMwMDNDNDk5NCAvKiBEaWN0aW9uYXJ5UG9wdXBJbmZvLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMkQ1OEQ4
NTUxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENThEODUzMUExNUY2NUYwMEE1RjcyNiAvKiBE
YXRhRGV0ZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMkQ1OEQ4NTYxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24ubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDU4RDg1NDFBMTVG
NjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5tbSAqLzsgfTsKIAkJMkQ1OUYxQkYxQTAwNDRD
NjAwMUYzRDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENTlGMUJFMUEwMDQ0QzYwMDFGM0QyOSAvKiBEYXRhRGV0
ZWN0b3JzU1BJLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMkQ1QTU5MkYxNTI1MjUyMzAwMzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NDhENzQxMkND
M0Y4OTAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uY3BwICovOyB9OwogCQkyRDVBNTkzMTE1
MjUyNUQwMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NDhENjYxMkNDMzc2MzAwMUZCQTQxIC8qIElt
YWdlT3JpZW50YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNTg4Miw2ICs1ODgwLDggQEAKIAkJQzUwRDBFODMwRkY0MjcyOTAwQUMyNjQ0
IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM1MEQwRTgxMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzUx
MzdDRjIxMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTEzN0NGMDExQTU4Mzc4MDA0QURC
OTkgLyogSlNET01TdHJpbmdMaXN0LmNwcCAqLzsgfTsKIAkJQzUxMzdDRjMxMUE1ODM3ODAwNEFE
Qjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzUxMzdDRjExMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlz
dC5oICovOyB9OworCQlDNTIyN0RGMTFDM0M2REYxMDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUyMjdERUYx
QzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNTIyN0RGMjFDM0M2REY5MDBGNUVENTQgLyog
RGF0YURldGVjdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1MjI3REYwMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1tICovOyB9
OwogCQlDNTI3OEIwQzE3RjIxMkVBMDAzQTI5OTggLyogUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUyNzhCMEIx
N0YyMTJFQTAwM0EyOTk4IC8qIFBsYXRmb3JtUGFzdGVib2FyZElPUy5tbSAqLzsgfTsKIAkJQzU0
NDI3NEIxMUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xpc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NDQyNzQ5MTFBNTdFN0EwMDYzQTc0OSAv
KiBET01TdHJpbmdMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQzU1NjEwRjExMUE3MDRFQjAwQjgyRDI3IC8qIERPTVN0cmluZ0xpc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU1NjEwRjAx
MUE3MDRFQjAwQjgyRDI3IC8qIERPTVN0cmluZ0xpc3QuY3BwICovOyB9OwpAQCAtODUxMiw4ICs4
NTEyLDYgQEAKIAkJMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGF0aFV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDUwMzY2NzFCQ0REREM0MDBFMjBCQjMgLyogR2VzdHVy
ZUV2ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXN0dXJl
RXZlbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1NjQ2QUYxQjhGODQ5
MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGljdGlvbmFyeVBvcHVwSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkyRDU4RDg1MzFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRGV0ZWN0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTJENThEODU0MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0
aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0YURldGVj
dGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1OUYxQkUxQTAwNDRDNjAw
MUYzRDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGF0YURldGVjdG9yc1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDVCQzQyNTE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWN1cml0eVBvbGljeVZpb2xhdGlv
bkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENUJDNDI2MTZGODgyQkUw
MDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNzExLDYgKzEzNzA5LDggQEAKIAkJQzUwRDBFODEwRkY0Mjcy
OTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RvcmFnZU5hbWVzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDNTEzN0NGMDExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NU3RyaW5nTGlzdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MTM3Q0YxMTFBNTgzNzgwMDRBREI5OSAvKiBKU0RP
TVN0cmluZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01TdHJp
bmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MjI3REVGMUMzQzZERDcw
MEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERhdGFEZXRlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzUyMjdE
RjAxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEYXRhRGV0ZWN0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDNTI3OEIwQjE3RjIxMkVBMDAzQTI5OTggLyogUGxhdGZvcm1QYXN0ZWJv
YXJkSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxhdGZv
cm1QYXN0ZWJvYXJkSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTQ0Mjc0
OTExQTU3RTdBMDA2M0E3NDkgLyogRE9NU3RyaW5nTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01TdHJpbmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUM1NDQyNzRBMTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0LmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBET01TdHJpbmdMaXN0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE3ODgxLDYgKzE3ODgxLDggQEAKIAkJN0MzRTUxMDcxOERGOEYxMjAwQzExMkY3
IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQlDNTIyN0RFRjFDM0M2REQ3MDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5oICovLAorCQkJCUM1
MjI3REYwMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1tICovLAogCQkJCTlCNTVF
RUVBMUIzRjNGRUYwMDUzNDJCQyAvKiBFZGl0b3JDb2NvYS5oICovLAogCQkJCTlCNTVFRUU4MUIz
RTg4OTgwMDUzNDJCQyAvKiBFZGl0b3JDb2NvYS5tbSAqLywKIAkJCQk3QzNFNTEwODE4REY4RjM1
MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5oICovLApAQCAtMjMxODUsOCArMjMxODcsNiBAQAog
CQkJY2hpbGRyZW4gPSAoCiAJCQkJQ0U3QjJEQUYxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0
aXZlVGV4dFVJQ29udHJvbGxlci5oICovLAogCQkJCUNFN0IyREIwMTU4NkFCQUQwMDk4QjNGQSAv
KiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0gKi8sCi0JCQkJMkQ1OEQ4NTMxQTE1RjY1
RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24uaCAqLywKLQkJCQkyRDU4RDg1NDFBMTVGNjVGMDBB
NUY3MjYgLyogRGF0YURldGVjdGlvbi5tbSAqLywKIAkJCQk5MzdGRjNENDFBMTAxMkQ2MDA4RUJB
MzEgLyogRGljdGlvbmFyeUxvb2t1cC5oICovLAogCQkJCTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEz
MSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tICovLAogCQkJCUVENTAxREM1MEIyNDlGMjkwMEFFMThE
OSAvKiBFZGl0b3JNYWMubW0gKi8sCkBAIC0yNTA2Miw3ICsyNTA2Miw2IEBACiAJCQkJOTdCQzZB
MzAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5N0JDNkEzMjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCRTIzNDgwRDE4QTk4NzE0MDBFNEI2RTggLyogRGF0YUN1ZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMkQ1OEQ4NTUxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTkzNUUyQjRFMUFGRjA2Q0EwMDk3NkY5RiAvKiBEYXRhRGV0ZWN0
b3JzQ29yZVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ1OUYxQkYxQTAwNDRDNjAwMUYzRDI5
IC8qIERhdGFEZXRlY3RvcnNTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjI3NDZGMEU4MzY2
NDUwMEU3Rjk3NSAvKiBEYXRhUmVmLmggaW4gSGVhZGVycyAqLywKQEAgLTI2MDM0LDYgKzI2MDMz
LDcgQEAKIAkJCQlCMjc1MzU3NTBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjI3NTM1NzYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemVIYXNoLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDRTEyNTI0RDFBMUE3N0RFMDA4NjQ0ODAgLyogSU9QTUxpYlNQSS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQzUyMjdERjExQzNDNkRGMTAwRjVFRDU0IC8qIERhdGFEZXRl
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0REVGNjQzMUE2RkY5MjcwMEQ0NUVFQyAvKiBJ
T1JldHVyblNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQwQjRBQUIxOERBMUNDRDAwNDM0REUx
IC8qIElPU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUMyMUU1N0QxODNFRDFGRjAwMUMy
ODlEIC8qIElPU3VyZmFjZVBvb2wuaCBpbiBIZWFkZXJzICovLApAQCAtMjg3NDAsNiArMjg3NDAs
NyBAQAogCQkJCTg1MDMxQjNGMEE0NEVGQzcwMEY5OTJFMCAvKiBDbGlwYm9hcmRFdmVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1ODAzNzE2MTFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFQTc2MzUxNDYwQjcxQTAwOEIzMUYxIC8qIENsb2Nr
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUM1MjI3REYyMUMzQzZERjkwMEY1RUQ1NCAvKiBEYXRh
RGV0ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFQTc2MzQxNDYwQjU2RjAwOEIzMUYx
IC8qIENsb2NrR2VuZXJpYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5QkQ4QTk1QTE4QkVGQzc2
MDA5ODdFOUEgLyogQ29sbGVjdGlvbkluZGV4Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjI3NTM1NjYwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
Mjg5MTgsNyArMjg5MTksNiBAQAogCQkJCTk3QkM2QTJGMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNkEzMTE1MDVGMDgxMDAxQjc0
QUMgLyogRGF0YWJhc2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJFMjM0ODBDMThB
OTg3MEIwMEU0QjZFOCAvKiBEYXRhQ3VlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJENThEODU2
MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM2NDY0MUQxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFzZXRET01TdHJpbmdNYXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTc4NDk0MUIwQjVGRTUwNzAwMUUyMzdBIC8qIERhdGFUcmFuc2Zlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFGRjA4MjQ1RTU5MDAxRTlBQkMgLyogRGF0YVRy
YW5zZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL0RhdGFEZXRlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAkocmV2aXNpb24gMTk0NTkxKQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLmg6MTk0NTkxKQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YURldGVjdGlvbl9oCisjZGVmaW5l
IERhdGFEZXRlY3Rpb25faAorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0IDx3dGYvUmVm
UHRyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1MgRERBY3Rpb25D
b250ZXh0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNz
IEhpdFRlc3RSZXN1bHQ7CitjbGFzcyBSYW5nZTsKKworY2xhc3MgRGF0YURldGVjdGlvbiB7Citw
dWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRl
eHQ+IGRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBG
bG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3Rl
ZERhdGFSYW5nZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisKKyNlbmRpZiAvLyBEYXRhRGV0ZWN0aW9uX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2lmbmRlZiBEYXRhRGV0ZWN0aW9uX2gKICNkZWZpbmUg
RGF0YURldGVjdGlvbl9oCiAKLSNpZiBQTEFURk9STShNQUMpCi0KICNpbXBvcnQgPHd0Zi9SZWZQ
dHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtMzksMTMgKzM3LDIzIEBAIGNs
YXNzIEZsb2F0UmVjdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBSYW5nZTsKIAorZW51
bSBEYXRhRGV0ZWN0b3JUeXBlcyB7CisgICAgRGF0YURldGVjdG9yVHlwZU5vbmUgPSAwLAorICAg
IERhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlciA9IDEgPDwgMCwKKyAgICBEYXRhRGV0ZWN0b3JU
eXBlTGluayA9IDEgPDwgMSwKKyAgICBEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcyA9IDEgPDwgMiwK
KyAgICBEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCA9IDEgPDwgMywKKyAgICBEYXRhRGV0
ZWN0b3JUeXBlQWxsID0gVUxPTkdfTUFYCit9OworCiBjbGFzcyBEYXRhRGV0ZWN0aW9uIHsKIHB1
YmxpYzoKKyNpZiBQTEFURk9STShNQUMpCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJldGFp
blB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0
IEhpdFRlc3RSZXN1bHQmLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQ
dHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSk7CisjZW5kaWYKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0
UmFuZ2UsIERhdGFEZXRlY3RvclR5cGVzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQogI2VuZGlmIC8vIERhdGFEZXRlY3Rpb25faApJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQko
cmV2aXNpb24gMTk0NTkxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0
ZWN0aW9uLm1tOjE5NDU5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURl
dGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJEYXRhRGV0ZWN0aW9uLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQg
IkRhdGFEZXRlY3RvcnNTUEkuaCIKKyNpbXBvcnQgIkZyYW1lVmlldy5oIgorI2ltcG9ydCAiSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKKyNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKKyNp
bXBvcnQgIk5vZGUuaCIKKyNpbXBvcnQgIlJhbmdlLmgiCisjaW1wb3J0ICJSZW5kZXJPYmplY3Qu
aCIKKyNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgorI2ltcG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgi
CisjaW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKKyNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRl
dGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiwgUmVm
UHRyPFJhbmdlPiBjb250ZXh0UmFuZ2UsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdC
b3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQoreworICAgIFN0cmluZyBmdWxs
UGxhaW5UZXh0U3RyaW5nID0gcGxhaW5UZXh0KGNvbnRleHRSYW5nZS5nZXQoKSk7CisgICAgaW50
IGhpdExvY2F0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoY29udGV4
dFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7CisKKyAgICBSZXRhaW5Q
dHI8RERTY2FubmVyUmVmPiBzY2FubmVyID0gYWRvcHRDRihERFNjYW5uZXJDcmVhdGUoRERTY2Fu
bmVyVHlwZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7CisgICAgUmV0YWluUHRyPEREU2NhblF1ZXJ5
UmVmPiBzY2FuUXVlcnkgPSBhZG9wdENGKEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBmdWxsUGxhaW5UZXh0U3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCksIENGUmFuZ2VNYWtlKDAsIGZ1bGxQbGFpblRleHRTdHJpbmcubGVuZ3RoKCkpKSk7CisKKyAg
ICBpZiAoIUREU2Nhbm5lclNjYW5RdWVyeShzY2FubmVyLmdldCgpLCBzY2FuUXVlcnkuZ2V0KCkp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBy
ZXN1bHRzID0gYWRvcHRDRihERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIu
Z2V0KCksIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc05vT3ZlcmxhcCkpOworCisgICAgLy8g
RmluZCB0aGUgRERSZXN1bHRSZWYgdGhhdCBpbnRlcnNlY3RzIHRoZSBoaXRUZXN0UmVzdWx0J3Mg
VmlzaWJsZVBvc2l0aW9uLgorICAgIEREUmVzdWx0UmVmIG1haW5SZXN1bHQgPSBudWxscHRyOwor
ICAgIFJlZlB0cjxSYW5nZT4gbWFpblJlc3VsdFJhbmdlOworICAgIENGSW5kZXggcmVzdWx0Q291
bnQgPSBDRkFycmF5R2V0Q291bnQocmVzdWx0cy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGkg
PSAwOyBpIDwgcmVzdWx0Q291bnQ7IGkrKykgeworICAgICAgICBERFJlc3VsdFJlZiByZXN1bHQg
PSAoRERSZXN1bHRSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChyZXN1bHRzLmdldCgpLCBpKTsK
KyAgICAgICAgQ0ZSYW5nZSByZXN1bHRSYW5nZUluQ29udGV4dCA9IEREUmVzdWx0R2V0UmFuZ2Uo
cmVzdWx0KTsKKyAgICAgICAgaWYgKGhpdExvY2F0aW9uID49IHJlc3VsdFJhbmdlSW5Db250ZXh0
LmxvY2F0aW9uICYmIChoaXRMb2NhdGlvbiAtIHJlc3VsdFJhbmdlSW5Db250ZXh0LmxvY2F0aW9u
KSA8IHJlc3VsdFJhbmdlSW5Db250ZXh0Lmxlbmd0aCkgeworICAgICAgICAgICAgbWFpblJlc3Vs
dCA9IHJlc3VsdDsKKyAgICAgICAgICAgIG1haW5SZXN1bHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6
c3VicmFuZ2UoY29udGV4dFJhbmdlLmdldCgpLCByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlv
biwgcmVzdWx0UmFuZ2VJbkNvbnRleHQubGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFtYWluUmVzdWx0KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHQgPSBh
ZG9wdE5TKFthbGxvY0REQWN0aW9uQ29udGV4dEluc3RhbmNlKCkgaW5pdF0pOworICAgIFthY3Rp
b25Db250ZXh0IHNldEFsbFJlc3VsdHM6QFsgKGlkKW1haW5SZXN1bHQgXV07CisgICAgW2FjdGlv
bkNvbnRleHQgc2V0TWFpblJlc3VsdDptYWluUmVzdWx0XTsKKworICAgIFZlY3RvcjxGbG9hdFF1
YWQ+IHF1YWRzOworICAgIG1haW5SZXN1bHRSYW5nZS0+YWJzb2x1dGVUZXh0UXVhZHMocXVhZHMp
OworICAgIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBtYWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7
CisgICAgZm9yIChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCisgICAgICAgIGRldGVjdGVkRGF0
YUJvdW5kaW5nQm94LnVuaXRlKGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhxdWFkLmVuY2xv
c2luZ0JvdW5kaW5nQm94KCkpKTsKKyAgICAKKyAgICBkZXRlY3RlZERhdGFSYW5nZSA9IG1haW5S
ZXN1bHRSYW5nZTsKKyAgICAKKyAgICByZXR1cm4gYWN0aW9uQ29udGV4dDsKK30KKworUmV0YWlu
UHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRl
c3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwgRmxvYXRSZWN0JiBk
ZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2Up
Cit7CisgICAgaWYgKCFEYXRhRGV0ZWN0b3JzTGlicmFyeSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9k
ZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byBy
ZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb247CisgICAgUmVm
UHRyPFJhbmdlPiBjb250ZXh0UmFuZ2U7CisKKyAgICBpZiAoIWlzPEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50Pigqbm9kZSkpIHsKKyAgICAgICAgcG9zaXRpb24gPSByZW5kZXJlci0+cG9zaXRp
b25Gb3JQb2ludChoaXRUZXN0UmVzdWx0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7CisgICAgICAg
IGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOworCisgICAgICAgIGNvbnRleHRSYW5nZSA9IHJhbmdl
RXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKKyAgICAg
ICAgaWYgKCFjb250ZXh0UmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
IGVsc2UgeworICAgICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7
CisgICAgICAgIGlmICghZnJhbWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
ICAgICBJbnRQb2ludCBmcmFtZVBvaW50ID0gaGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklu
bmVyTm9kZUZyYW1lKCk7CisgICAgICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQ
b2ludCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2lu
dCk7CisgICAgICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIGNvbnRleHRSYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFu
dWxhcml0eShwb3NpdGlvbiwgTGluZUdyYW51bGFyaXR5LCBEaXJlY3Rpb25Gb3J3YXJkKTsKKyAg
ICAgICAgaWYgKCFjb250ZXh0UmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICByZXR1cm4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UocG9zaXRpb24s
IGNvbnRleHRSYW5nZSwgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIGRldGVjdGVkRGF0YVJhbmdl
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0
ZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNSArMjYsMTkgQEAKICNpbXBvcnQgImNv
bmZpZy5oIgogI2ltcG9ydCAiRGF0YURldGVjdGlvbi5oIgogCi0jaWYgUExBVEZPUk0oTUFDKQot
CisjaW1wb3J0ICJBdHRyLmgiCisjaW1wb3J0ICJDU1NTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW1w
b3J0ICJEYXRhRGV0ZWN0b3JzU1BJLmgiCiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQg
IkhUTUxBbmNob3JFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5oIgogI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgogI2ltcG9ydCAiTm9kZS5oIgorI2ltcG9y
dCAiTm9kZUxpc3QuaCIKKyNpbXBvcnQgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbXBvcnQgIlJhbmdl
LmgiCiAjaW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKKyNpbXBvcnQgIlRleHQuaCIKICNpbXBvcnQg
IlRleHRJdGVyYXRvci5oIgogI2ltcG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW1wb3J0ICJW
aXNpYmxlVW5pdHMuaCIKQEAgLTQyLDYgKzQ2LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CisjaWYgUExBVEZPUk0oTUFDKQorCiBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4g
ZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uLCBS
ZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZSwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGlu
Z0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCiB7CiAgICAgU3RyaW5nIGZ1
bGxQbGFpblRleHRTdHJpbmcgPSBwbGFpblRleHQoY29udGV4dFJhbmdlLmdldCgpKTsKQEAgLTEz
MSw3ICsxMzcsMTAgQEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVjdGlvbgog
CiAgICAgcmV0dXJuIGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKHBvc2l0aW9uLCBjb250
ZXh0UmFuZ2UsIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBkZXRlY3RlZERhdGFSYW5nZSk7CiB9
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCit2b2lkIERhdGFEZXRlY3Rpb246OmRldGVjdENv
bnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mLCBEYXRhRGV0ZWN0b3JUeXBlcykKK3sKK30KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24uaAkocmV2aXNpb24gMTk1
MTU4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERhdGFEZXRl
Y3Rpb25faAotI2RlZmluZSBEYXRhRGV0ZWN0aW9uX2gKLQotI2lmIFBMQVRGT1JNKE1BQykKLQot
I2ltcG9ydCA8d3RmL1JlZlB0ci5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotCi1PQkpD
X0NMQVNTIEREQWN0aW9uQ29udGV4dDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBG
bG9hdFJlY3Q7Ci1jbGFzcyBIaXRUZXN0UmVzdWx0OwotY2xhc3MgUmFuZ2U7Ci0KLWNsYXNzIERh
dGFEZXRlY3Rpb24gewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXRhaW5Q
dHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBI
aXRUZXN0UmVzdWx0JiwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRy
PFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCi0jZW5kaWYgLy8gRGF0YURldGVjdGlvbl9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24ubW0JKHJl
dmlzaW9uIDE5NTE1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rp
b24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiRGF0YURldGVjdGlvbi5oIgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi0jaW1wb3J0ICJEYXRh
RGV0ZWN0b3JzU1BJLmgiCi0jaW1wb3J0ICJGcmFtZVZpZXcuaCIKLSNpbXBvcnQgIkhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50LmgiCi0jaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCi0jaW1wb3J0
ICJOb2RlLmgiCi0jaW1wb3J0ICJSYW5nZS5oIgotI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCi0j
aW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIKLSNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5oIgotI2lt
cG9ydCAiVmlzaWJsZVVuaXRzLmgiCi0jaW1wb3J0ICJodG1sZWRpdGluZy5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJ
dGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24sIFJlZlB0cjxS
YW5nZT4gY29udGV4dFJhbmdlLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBS
ZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKLXsKLSAgICBTdHJpbmcgZnVsbFBsYWlu
VGV4dFN0cmluZyA9IHBsYWluVGV4dChjb250ZXh0UmFuZ2UuZ2V0KCkpOwotICAgIGludCBoaXRM
b2NhdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGNvbnRleHRSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOwotCi0gICAgUmV0YWluUHRyPERE
U2Nhbm5lclJlZj4gc2Nhbm5lciA9IGFkb3B0Q0YoRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5
cGVTdGFuZGFyZCwgMCwgbnVsbHB0cikpOwotICAgIFJldGFpblB0cjxERFNjYW5RdWVyeVJlZj4g
c2NhblF1ZXJ5ID0gYWRvcHRDRihERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgZnVsbFBsYWluVGV4dFN0cmluZy5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBD
RlJhbmdlTWFrZSgwLCBmdWxsUGxhaW5UZXh0U3RyaW5nLmxlbmd0aCgpKSkpOwotCi0gICAgaWYg
KCFERFNjYW5uZXJTY2FuUXVlcnkoc2Nhbm5lci5nZXQoKSwgc2NhblF1ZXJ5LmdldCgpKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gcmVzdWx0
cyA9IGFkb3B0Q0YoRERTY2FubmVyQ29weVJlc3VsdHNXaXRoT3B0aW9ucyhzY2FubmVyLmdldCgp
LCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNOb092ZXJsYXApKTsKLQotICAgIC8vIEZpbmQg
dGhlIEREUmVzdWx0UmVmIHRoYXQgaW50ZXJzZWN0cyB0aGUgaGl0VGVzdFJlc3VsdCdzIFZpc2li
bGVQb3NpdGlvbi4KLSAgICBERFJlc3VsdFJlZiBtYWluUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBS
ZWZQdHI8UmFuZ2U+IG1haW5SZXN1bHRSYW5nZTsKLSAgICBDRkluZGV4IHJlc3VsdENvdW50ID0g
Q0ZBcnJheUdldENvdW50KHJlc3VsdHMuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsg
aSA8IHJlc3VsdENvdW50OyBpKyspIHsKLSAgICAgICAgRERSZXN1bHRSZWYgcmVzdWx0ID0gKERE
UmVzdWx0UmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocmVzdWx0cy5nZXQoKSwgaSk7Ci0gICAg
ICAgIENGUmFuZ2UgcmVzdWx0UmFuZ2VJbkNvbnRleHQgPSBERFJlc3VsdEdldFJhbmdlKHJlc3Vs
dCk7Ci0gICAgICAgIGlmIChoaXRMb2NhdGlvbiA+PSByZXN1bHRSYW5nZUluQ29udGV4dC5sb2Nh
dGlvbiAmJiAoaGl0TG9jYXRpb24gLSByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbikgPCBy
ZXN1bHRSYW5nZUluQ29udGV4dC5sZW5ndGgpIHsKLSAgICAgICAgICAgIG1haW5SZXN1bHQgPSBy
ZXN1bHQ7Ci0gICAgICAgICAgICBtYWluUmVzdWx0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJh
bmdlKGNvbnRleHRSYW5nZS5nZXQoKSwgcmVzdWx0UmFuZ2VJbkNvbnRleHQubG9jYXRpb24sIHJl
c3VsdFJhbmdlSW5Db250ZXh0Lmxlbmd0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmICghbWFpblJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0ID0gYWRvcHRO
UyhbYWxsb2NEREFjdGlvbkNvbnRleHRJbnN0YW5jZSgpIGluaXRdKTsKLSAgICBbYWN0aW9uQ29u
dGV4dCBzZXRBbGxSZXN1bHRzOkBbIChpZCltYWluUmVzdWx0IF1dOwotICAgIFthY3Rpb25Db250
ZXh0IHNldE1haW5SZXN1bHQ6bWFpblJlc3VsdF07Ci0KLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBx
dWFkczsKLSAgICBtYWluUmVzdWx0UmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKLSAg
ICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gbWFpblJlc3VsdFJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOwotICAg
IGZvciAoY29uc3QgYXV0byYgcXVhZCA6IHF1YWRzKQotICAgICAgICBkZXRlY3RlZERhdGFCb3Vu
ZGluZ0JveC51bml0ZShmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cocXVhZC5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpKSk7Ci0gICAgCi0gICAgZGV0ZWN0ZWREYXRhUmFuZ2UgPSBtYWluUmVzdWx0
UmFuZ2U7Ci0gICAgCi0gICAgcmV0dXJuIGFjdGlvbkNvbnRleHQ7Ci19Ci0KLVJldGFpblB0cjxE
REFjdGlvbkNvbnRleHQ+IERhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVz
dWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIEZsb2F0UmVjdCYgZGV0ZWN0
ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQotewot
ICAgIGlmICghRGF0YURldGVjdG9yc0xpYnJhcnkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsK
LSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gcmVuZGVy
ZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uOwotICAgIFJlZlB0cjxS
YW5nZT4gY29udGV4dFJhbmdlOwotCi0gICAgaWYgKCFpczxIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudD4oKm5vZGUpKSB7Ci0gICAgICAgIHBvc2l0aW9uID0gcmVuZGVyZXItPnBvc2l0aW9uRm9y
UG9pbnQoaGl0VGVzdFJlc3VsdC5sb2NhbFBvaW50KCksIG51bGxwdHIpOwotICAgICAgICBpZiAo
cG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShub2RlKTsKLQotICAgICAgICBjb250ZXh0UmFuZ2UgPSByYW5nZUV4cGFu
ZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7Ci0gICAgICAgIGlm
ICghY29udGV4dFJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAg
ICAgICBpZiAoIWZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAg
SW50UG9pbnQgZnJhbWVQb2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5v
ZGVGcmFtZSgpOwotICAgICAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQp
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOwot
ICAgICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICBjb250ZXh0UmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJp
dHkocG9zaXRpb24sIExpbmVHcmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7Ci0gICAgICAg
IGlmICghY29udGV4dFJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKHBvc2l0aW9uLCBjb250
ZXh0UmFuZ2UsIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBkZXRlY3RlZERhdGFSYW5nZSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMTk1MTU4KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI1LDYgKzEyNSwxMCBAQAogI2luY2x1ZGUgIkFyY2hpdmUuaCIKICNlbmRpZgogCisjaWYg
RU5BQkxFKERBVEFfREVURUNUSU9OKQorI2luY2x1ZGUgIkRhdGFEZXRlY3Rpb24uaCIKKyNlbmRp
ZgorCiAjaWYgUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgogI2luY2x1
ZGUgIk1lbW9yeVByZXNzdXJlSGFuZGxlci5oIgpAQCAtMjI3Nyw2ICsyMjgxLDEyIEBAIHZvaWQg
RnJhbWVMb2FkZXI6OmNoZWNrTG9hZENvbXBsZXRlRm9yVGgKICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgbV9jbGllbnQuZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCk7CiAgICAg
ICAgICAgICAgICAgbG9hZGluZ0V2ZW50ID0gQVhPYmplY3RDYWNoZTo6QVhMb2FkaW5nRmluaXNo
ZWQ7CisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICAgICAgICAgIGlmIChtX2Zy
YW1lLnNldHRpbmdzKCkuZGF0YURldGVjdG9yVHlwZXMoKSAhPSBEYXRhRGV0ZWN0b3JUeXBlTm9u
ZSkgeworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGRvY3VtZW50UmFuZ2UgPSBt
YWtlUmFuZ2UoZmlyc3RQb3NpdGlvbkluTm9kZShtX2ZyYW1lLmRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpKSwgbGFzdFBvc2l0aW9uSW5Ob2RlKG1fZnJhbWUuZG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgRGF0YURldGVjdGlvbjo6ZGV0ZWN0
Q29udGVudEluUmFuZ2UoZG9jdW1lbnRSYW5nZSwgbV9mcmFtZS5zZXR0aW5ncygpLmRhdGFEZXRl
Y3RvclR5cGVzKCkpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAvLyBOb3RpZnkgYWNjZXNzaWJpbGl0eS4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmgJKHJldmlzaW9uIDE5NTE1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTAgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+
CiAKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisjaW5jbHVkZSAiRGF0YURldGVjdGlvbi5o
IgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udEdlbmVyaWNGYW1p
bGllczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgkocmV2aXNpb24gMTk1MTU4KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjI4LDYg
KzIyOCw3IEBAIGFnZ3Jlc3NpdmVUaWxlUmV0ZW50aW9uRW5hYmxlZCBpbml0aWFsPWYKIHRlbXBv
cmFyeVRpbGVDb2hvcnRSZXRlbnRpb25FbmFibGVkIGluaXRpYWw9dHJ1ZQogCiB1c2VJbWFnZURv
Y3VtZW50Rm9yU3ViZnJhbWVQREYgaW5pdGlhbD1mYWxzZQorZGF0YURldGVjdG9yVHlwZXMgdHlw
ZT1EYXRhRGV0ZWN0b3JUeXBlcywgaW5pdGlhbD1EYXRhRGV0ZWN0b3JUeXBlTm9uZSwgY29uZGl0
aW9uYWw9REFUQV9ERVRFQ1RJT04KIAogIyBBbGxvdyBTb3VyY2VCdWZmZXJzIHRvIHN0b3JlIHVw
IHRvIDMwNE1CIGVhY2gsIGVub3VnaCBmb3IgYXBwcm94aW1hdGVseSBmaXZlIG1pbnV0ZXMKICMg
b2YgMTA4MHAgdmlkZW8gYW5kIHN0ZXJlbyBhdWRpby4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NwaS9tYWMvRGF0YURldGVjdG9yc1NQSS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NwaS9tYWMvRGF0YURldGVjdG9yc1NQSS5oCShyZXZpc2lvbiAxOTUx
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL0RhdGFEZXRlY3RvcnNTUEku
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDEyIEBACiAKICNpbXBvcnQgPHd0Zi9QbGF0
Zm9ybS5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQogCiAjaW1wb3J0IDxXZWJDb3JlL0RhdGFEZXRl
Y3RvcnNDb3JlU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAKKyNpZiBQ
TEFURk9STShNQUMpCisKICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiAvLyBDYW4ndCBp
bmNsdWRlIEREQWN0aW9uLmggYmVjYXVzZSBhcyBvZiB0aGlzIHdyaXRpbmcgaXQgaXMgYSBwcml2
YXRlIGhlYWRlciB0aGF0IGluY2x1ZGVzIGEgbm9uLXByaXZhdGUgaGVhZGVyIHdpdGggYW4gIiIg
aW5jbHVkZS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTE1OCkKKysrIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAxLTE1
ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBv
cnQgZm9yIERhdGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
MjI4NTU5NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZCBpbXBsZW1lbnRpbmcgRGF0YSBEZXRlY3Rv
cnMgc3VwcG9ydAorICAgICAgICBpbiBXSzIuIFRoZSBwYXRjaCBhZGRzIGEgbmV3IHByb3BlcnR5
IHRvIHRoZSBjb25maWd1cmF0aW9uCisgICAgICAgIG9iamVjdCB0byBpbmRpY2F0ZSB0aGUgdHlw
ZSBvZiBkZXRlY3Rpb24gZGVzaXJlZCBhbmQgcHJvcGFnYXRlcworICAgICAgICB0byB0aGUgV2Vi
UHJvY2Vzcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgorICAgICAgICAqIFNo
YXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBpbml0V2l0aEZyYW1l
OmNvbmZpZ3VyYXRpb246XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdDb25maWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdDb25maWd1cmF0aW9uLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXdDb25maWd1cmF0aW9uIGNv
cHlXaXRoWm9uZTpdKToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbTog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZyb21XS0RhdGFEZXRlY3RvclR5cGVz
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oOgorCiAyMDE2LTAxLTE1ICBNaWNoYWVsIENhdGFuemFybyAgPG1j
YXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBGaXggaW50ZXJuYWwgV2luZG93cyBidWls
ZApJbmRleDogU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNj
b25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVy
ZURlZmluZXMueGNjb25maWcJKHJldmlzaW9uIDE5NTE1OCkKKysrIFNvdXJjZS9XZWJLaXQyL0Nv
bmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTEsNiArMTExLDcgQEAgRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UU1tzZGs9bWFjb3N4Kl0gPQog
RU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UU19tYWNvc3hfV0lUSF9JTlRFUk5BTF9TREtfWUVTID0g
RU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UUzsKIAogRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkdb
c2RrPWlwaG9uZSpdID0gRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkc7CitFTkFCTEVfREFUQV9E
RVRFQ1RJT04gPSBFTkFCTEVfREFUQV9ERVRFQ1RJT047CiAKIEVOQUJMRV9JT1NfVE9VQ0hfRVZF
TlRTW3Nkaz1pcGhvbmUqXSA9ICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9zX1dJVEhfSU5U
RVJOQUxfU0RLXyQoVVNFX0lOVEVSTkFMX1NESykpOwogRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNf
aW9zX1dJVEhfSU5URVJOQUxfU0RLX1lFUyA9IEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTOwpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9u
cy5oCShyZXZpc2lvbiAxOTUxNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVy
ZW5jZXNEZWZpbml0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDcgQEAKICAg
ICBtYWNybyhJbnNwZWN0b3JBdHRhY2htZW50U2lkZSwgaW5zcGVjdG9yQXR0YWNobWVudFNpZGUs
IFVJbnQzMiwgdWludDMyX3QsIDApIFwKICAgICBtYWNybyhTdG9yYWdlQmxvY2tpbmdQb2xpY3ks
IHN0b3JhZ2VCbG9ja2luZ1BvbGljeSwgVUludDMyLCB1aW50MzJfdCwgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW46OkJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2UpIFwKICAgICBtYWNybyhKYXZhU2NyaXB0
UnVudGltZUZsYWdzLCBqYXZhU2NyaXB0UnVudGltZUZsYWdzLCBVSW50MzIsIHVpbnQzMl90LCAw
KSBcCisgICAgbWFjcm8oRGF0YURldGVjdG9yVHlwZXMsIGRhdGFEZXRlY3RvclR5cGVzLCBVSW50
MzIsIHVpbnQzMl90LCAwKSBcCiAgICAgXAogCiAjZGVmaW5lIEZPUl9FQUNIX1dFQktJVF9ERUJV
R19CT09MX1BSRUZFUkVOQ0UobWFjcm8pIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAxOTUxNTgpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzgzLDYgKzM4Myw5IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1Jl
Y3QpZnIKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5jZVZhbHVlcygpLnNldChXZWJL
aXQ6OldlYlByZWZlcmVuY2VzS2V5OjppbnZpc2libGVBdXRvcGxheU5vdFBlcm1pdHRlZEtleSgp
LCBXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmU6OlZhbHVlKCEhW19jb25maWd1cmF0aW9uIF9p
bnZpc2libGVBdXRvcGxheU5vdFBlcm1pdHRlZF0pKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+
cHJlZmVyZW5jZVZhbHVlcygpLnNldChXZWJLaXQ6OldlYlByZWZlcmVuY2VzS2V5OjptZWRpYURh
dGFMb2Fkc0F1dG9tYXRpY2FsbHlLZXkoKSwgV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpW
YWx1ZSghIVtfY29uZmlndXJhdGlvbiBfbWVkaWFEYXRhTG9hZHNBdXRvbWF0aWNhbGx5XSkpOwog
I2VuZGlmCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5wcmVmZXJlbmNlVmFsdWVzKCkuc2V0KFdlYktpdDo6V2ViUHJlZmVyZW5jZXNLZXk6OmRhdGFE
ZXRlY3RvclR5cGVzS2V5KCksIFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZTo6VmFsdWUoc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KFtfY29uZmlndXJhdGlvbiBkYXRhRGV0ZWN0b3JUeXBlc10pKSk7
CisjZW5kaWYKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgIHBhZ2VD
b25maWd1cmF0aW9uLT5wcmVmZXJlbmNlVmFsdWVzKCkuc2V0KFdlYktpdDo6V2ViUHJlZmVyZW5j
ZXNLZXk6OmFsbG93c0FpclBsYXlGb3JNZWRpYVBsYXliYWNrS2V5KCksIFdlYktpdDo6V2ViUHJl
ZmVyZW5jZXNTdG9yZTo6VmFsdWUoISFbX2NvbmZpZ3VyYXRpb24gYWxsb3dzQWlyUGxheUZvck1l
ZGlhUGxheWJhY2tdKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oCShyZXZp
c2lvbiAxOTUxNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMjUgQEAgdHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgV0tTZWxlY3Rpb25HcgogfSBXS19FTlVNX0FWQUlMQUJM
RV9JT1MoOF8wKTsKICNlbmRpZgogCisvKiEgQGVudW0gV0tEYXRhRGV0ZWN0b3JUeXBlcworIEBh
YnN0cmFjdCBUaGUgdHlwZSBvZiBkYXRhIHdlIHdhbnQgdG8gZGV0ZWN0LgorIEBjb25zdGFudCBX
S0RhdGFEZXRlY3RvclR5cGVOb25lIE5vIGRldGVjdGlvbiBpcyBwZXJmb3JtZWQuCisgQGNvbnN0
YW50IFdLRGF0YURldGVjdG9yVHlwZVBob25lTnVtYmVyIFBob25lIG51bWJlcnMgYXJlIGRldGVj
dGVkIGFuZCB0dXJuZWQgaW50byBsaW5rcy4KKyBAY29uc3RhbnQgV0tEYXRhRGV0ZWN0b3JUeXBl
TGluayBVUkxzIGluIHRleHQgYXJlIGRldGVjdGVkIGFuZCB0dXJuZWQgaW50byBsaW5rcy4KKyBA
Y29uc3RhbnQgV0tEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcyBBZGRyZXNzZXMgYXJlIGRldGVjdGVk
IGFuZCB0dXJuZWQgaW50byBsaW5rcy4KKyBAY29uc3RhbnQgV0tEYXRhRGV0ZWN0b3JUeXBlQ2Fs
ZW5kYXJFdmVudCBEYXRlcyBhbmQgdGltZSB0aGF0IGFyZSBpbiB0aGUgZnV0dXJlIGFyZSBkZXRl
Y3RlZCBhbmQgdHVybmVkIGludG8gbGlua3MuCisgQGNvbnN0YW50IFdLRGF0YURldGVjdG9yVHlw
ZUFsbCBBbGwgb2YgdGhlIGFib3ZlIGRhdGEgdHlwZXMgYXJlIHR1cm5lZCBpbnRvIGxpbmtzIHdo
ZW4gZGV0ZWN0ZWQuIENob3NpbmcgdGhpcyB2YWx1ZSB3aWxsCisgYXV0b21hdGljYWxseSBpbmNs
dWRlIGFueSBuZXcgZGV0ZWN0aW9uIHR5cGUgdGhhdCBpcyBhZGRlZC4KKyAqLwordHlwZWRlZiBO
U19PUFRJT05TKE5TVUludGVnZXIsIFdLRGF0YURldGVjdG9yVHlwZXMpIHsKKyAgICBXS0RhdGFE
ZXRlY3RvclR5cGVOb25lID0gMCwKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlciA9
IDEgPDwgMCwKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVMaW5rID0gMSA8PCAxLAorICAgIFdLRGF0
YURldGVjdG9yVHlwZUFkZHJlc3MgPSAxIDw8IDIsCisgICAgV0tEYXRhRGV0ZWN0b3JUeXBlQ2Fs
ZW5kYXJFdmVudCA9IDEgPDwgMywKKyAgICBXS0RhdGFEZXRlY3RvclR5cGVBbGwgPSBOU1VJbnRl
Z2VyTWF4Cit9IFdLX0VOVU1fQVZBSUxBQkxFKFdLX01BQ19UQkEsIFdLX0lPU19UQkEpOworCiAv
KiEgQSBXS1dlYlZpZXdDb25maWd1cmF0aW9uIG9iamVjdCBpcyBhIGNvbGxlY3Rpb24gb2YgcHJv
cGVydGllcyB3aXRoCiAgd2hpY2ggdG8gaW5pdGlhbGl6ZSBhIHdlYiB2aWV3LgogIEBoZWxwcyBD
b250YWlucyBwcm9wZXJ0aWVzIHVzZWQgdG8gY29uZmlndXJlIGEgQGxpbmsgV0tXZWJWaWV3IEAv
bGluay4KQEAgLTkzLDYgKzExMiwxNSBAQCBXS19DTEFTU19BVkFJTEFCTEUoMTBfMTAsIDhfMCkK
ICAqLwogQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgYWxsb3dzQWlyUGxheUZvck1lZGlhUGxh
eWJhY2sgV0tfQVZBSUxBQkxFKDEwXzExLCA5XzApOwogCisvKiEgQGFic3RyYWN0IEFuIGVudW0g
dmFsdWUgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBkYXRhIGRldGVjdGlvbiBkZXNpcmVkLgorIEBk
aXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFdLRGF0YURldGVjdG9yVHlwZU5vbmUuCisg
QW4gZXhhbXBsZSBvZiBob3cgdGhpcyBwcm9wZXJ0eSBtYXkgYWZmZWN0IHRoZSBjb250ZW50IGxv
YWRlZCBpbiB0aGUgV0tXZWJWaWV3IGlzIHRoYXQgY29udGVudCBsaWtlCisgJ1Zpc2l0IGFwcGxl
LmNvbSBvbiBKdWx5IDR0aCBvciBjYWxsIDEgODAwIDU1NS01NTQ1JyB3aWxsIGJlIHRyYW5zZm9y
bWVkIHRvIGFkZCBsaW5rcyBhcm91bmQgJ2FwcGxlLmNvbScsICdKdWx5IDR0aCcgYW5kICcxIDgw
MCA1NTUtNTU0NScKKyBpZiB0aGUgZGF0YURldGVjdG9yVHlwZXMgcHJvcGVydHkgaXMgc2V0IHRv
IFdLRGF0YURldGVjdG9yVHlwZVBob25lTnVtYmVyIHwgV0tEYXRhRGV0ZWN0b3JUeXBlTGluayB8
IFdLRGF0YURldGVjdG9yVHlwZUNhbGVuZGFyRXZlbnQuCisKKyAqLworQHByb3BlcnR5IChub25h
dG9taWMpIFdLRGF0YURldGVjdG9yVHlwZXMgZGF0YURldGVjdG9yVHlwZXMgV0tfQVZBSUxBQkxF
KFdLX01BQ19UQkEsIFdLX0lPU19UQkEpOworCiAjaWYgVEFSR0VUX09TX0lQSE9ORQogLyohIEBh
YnN0cmFjdCBBIEJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIEhUTUw1IHZpZGVvcyBw
bGF5IGlubGluZQogIChZRVMpIG9yIHVzZSB0aGUgbmF0aXZlIGZ1bGwtc2NyZWVuIGNvbnRyb2xs
ZXIgKE5PKS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Q29uZmlndXJhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24ubW0JKHJldmlzaW9uIDE5NTE1OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJh
dGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMTk4LDYgKzE5OCw5IEBAIC0gKGlkKWNvcHlXaXRo
Wm9uZTooTlNab25lICopem9uZQogICAgIGNvbmZpZ3VyYXRpb24tPl9zZXJ2aWNlQ29udHJvbHNF
bmFibGVkID0gc2VsZi0+X3NlcnZpY2VDb250cm9sc0VuYWJsZWQ7CiAgICAgY29uZmlndXJhdGlv
bi0+X2ltYWdlQ29udHJvbHNFbmFibGVkID0gc2VsZi0+X2ltYWdlQ29udHJvbHNFbmFibGVkOwog
I2VuZGlmCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgIGNvbmZpZ3VyYXRpb24tPl9k
YXRhRGV0ZWN0b3JUeXBlcyA9IHNlbGYtPl9kYXRhRGV0ZWN0b3JUeXBlczsKKyNlbmRpZgogI2lm
IEVOQUJMRShXSVJFTEVTU19UQVJHRVRfUExBWUJBQ0spCiAgICAgY29uZmlndXJhdGlvbi0+X2Fs
bG93c0FpclBsYXlGb3JNZWRpYVBsYXliYWNrID0gc2VsZi0+X2FsbG93c0FpclBsYXlGb3JNZWRp
YVBsYXliYWNrOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUxNTgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE2ODksNiArMTY4OSw3IEBACiAJCUM1NDI1NkI4MThCRUMxOEMwMERFNDE3OSAvKiBXS0Zvcm1Q
b3BvdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTQyNTZCMjE4QkVDMThCMDBERTQxNzkgLyogV0tGb3JtUG9wb3Zlci5oICovOyB9OwogCQlDNTQy
NTZCOTE4QkVDMThDMDBERTQxNzkgLyogV0tGb3JtUG9wb3Zlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NDI1NkIzMThCRUMxOEIwMERFNDE3OSAv
KiBXS0Zvcm1Qb3BvdmVyLm1tICovOyB9OwogCQlDNTQyNTZCQTE4QkVDMThDMDBERTQxNzkgLyog
V0tGb3JtU2VsZWN0Q29udHJvbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzU0MjU2QjQxOEJFQzE4QzAwREU0MTc5IC8qIFdLRm9ybVNlbGVjdENvbnRy
b2wuaCAqLzsgfTsKKwkJQzU1NEEzMTMxQzQ5QzM2NDAwQTM4OEZFIC8qIFdlYlBhZ2VDb2NvYS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NTRBMzEx
MUM0OUJDQ0IwMEEzODhGRSAvKiBXZWJQYWdlQ29jb2EubW0gKi87IH07CiAJCUM1NUNCNUI3MThD
MjY5Q0YwMENBODFFMSAvKiBXS0Zvcm1TZWxlY3RQb3BvdmVyLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3MTkzQkExOEMxNDlEMDAwMkQwRjEyIC8q
IFdLRm9ybVNlbGVjdFBvcG92ZXIubW0gKi87IH07CiAJCUM1NUNCNUI4MThDMkE1RDYwMENBODFF
MSAvKiBXS0Zvcm1TZWxlY3RQaWNrZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNTcxOTNCOTE4QzE0OUQwMDAyRDBGMTIgLyogV0tGb3JtU2VsZWN0
UGlja2VyLm1tICovOyB9OwogCQlDNTcxOTNCRTE4QzE0QTQ0MDAyRDBGMTIgLyogV0tGb3JtU2Vs
ZWN0Q29udHJvbC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM1NzE5M0JEMThDMTRBNDMwMDJEMEYxMiAvKiBXS0Zvcm1TZWxlY3RDb250cm9sLm1tICov
OyB9OwpAQCAtMzkzMiw2ICszOTMzLDcgQEAKIAkJQzU0MjU2QjIxOEJFQzE4QjAwREU0MTc5IC8q
IFdLRm9ybVBvcG92ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tGb3Jt
UG9wb3Zlci5oOyBwYXRoID0gaW9zL2Zvcm1zL1dLRm9ybVBvcG92ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzU0MjU2QjMxOEJFQzE4QjAwREU0MTc5IC8qIFdLRm9ybVBvcG92
ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0Zvcm1Qb3Bv
dmVyLm1tOyBwYXRoID0gaW9zL2Zvcm1zL1dLRm9ybVBvcG92ZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUM1NDI1NkI0MThCRUMxOEMwMERFNDE3OSAvKiBXS0Zvcm1TZWxlY3RD
b250cm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLRm9ybVNlbGVjdENv
bnRyb2wuaDsgcGF0aCA9IGlvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RDb250cm9sLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1NTRBMzExMUM0OUJDQ0IwMEEzODhGRSAvKiBXZWJQYWdl
Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQYWdl
Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NTRGRkEyMTJFNEU4RUEw
MDJGMjJDMCAvKiBXZWJEcmFnQ2xpZW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViRHJhZ0NsaWVudE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzU3MTkzQjkxOEMxNDlEMDAwMkQwRjEyIC8qIFdLRm9ybVNlbGVjdFBpY2tlci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLRm9ybVNlbGVjdFBp
Y2tlci5tbTsgcGF0aCA9IGlvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RQaWNrZXIubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NzE5M0JBMThDMTQ5RDAwMDJEMEYxMiAvKiBXS0Zvcm1T
ZWxlY3RQb3BvdmVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
V0tGb3JtU2VsZWN0UG9wb3Zlci5tbTsgcGF0aCA9IGlvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RQb3Bv
dmVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTA4OCw2ICs1MDkwLDcgQEAK
IAkJCWNoaWxkcmVuID0gKAogCQkJCTJEMjlFQ0NFMTkyRjJDMkUwMDk4NEI3OCAvKiBSZW1vdGVM
YXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQkyRDI5RUNDRjE5MkYyQzJF
MDA5ODRCNzggLyogUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yLm1tICovLAor
CQkJCUM1NTRBMzExMUM0OUJDQ0IwMEEzODhGRSAvKiBXZWJQYWdlQ29jb2EubW0gKi8sCiAJCQkp
OwogCQkJcGF0aCA9IENvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTkzOTIs
NiArOTM5NSw3IEBACiAJCQkJMkQ4Nzg2MjMxQkRCNThGRjAwRDAyQUJCIC8qIEFQSVVzZXJTdHls
ZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1RTFBRkVDMTZCMjEwMTIwMDZDQzFGMiAv
KiBBUElXZWJBcmNoaXZlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzVFMUFGRUUxNkIyMTAyNTAw
NkNDMUYyIC8qIEFQSVdlYkFyY2hpdmVSZXNvdXJjZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUM1
NTRBMzEzMUM0OUMzNjQwMEEzODhGRSAvKiBXZWJQYWdlQ29jb2EubW0gaW4gU291cmNlcyAqLywK
IAkJCQkxQTQ4MzJDNzFBOUJDMTNDMDA4QjRERkUgLyogQVBJV2Vic2l0ZURhdGFSZWNvcmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzNjM1QTkxQTMxNDRBMzAwRUQ2MTk3IC8qIEFQSVdlYnNp
dGVEYXRhU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzNjM1QUQxQTMxNDVFNTAwRUQ2
MTk3IC8qIEFQSVdlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbSBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNp
b24gMTk1MTU4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNiArMjE5LDEwIEBACiAjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZXMuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKERBVEFf
REVURUNUSU9OKQorI2luY2x1ZGUgPFdlYkNvcmUvRGF0YURldGVjdGlvbi5oPgorI2VuZGlmCisK
ICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSA8V2ViQ29yZS9N
ZWRpYVBsYXllclJlcXVlc3RJbnN0YWxsTWlzc2luZ1BsdWdpbnNDYWxsYmFjay5oPgogI2VuZGlm
CkBAIC0yOTM1LDYgKzI5MzksOSBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNv
bnN0IFdlCiAgICAgc2V0dGluZ3Muc2V0VXNlSW1hZ2VEb2N1bWVudEZvclN1YmZyYW1lUERGKHRy
dWUpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgc2V0dGluZ3Mu
c2V0RGF0YURldGVjdG9yVHlwZXMoZnJvbVdLRGF0YURldGVjdG9yVHlwZXMoc3RvcmUuZ2V0VUlu
dDMyVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmRhdGFEZXRlY3RvclR5cGVzS2V5KCkp
KSk7CisjZW5kaWYKICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEdhbWVwYWRzRW5hYmxlZChzdG9yZS5nZXRCb29sVmFs
dWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmdhbWVwYWRzRW5hYmxlZEtleSgpKSk7CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAko
cmV2aXNpb24gMTk1MTU4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMTAgQEAKICNpbXBvcnQgIldlYlBh
Z2VNZXNzYWdlcy5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisjaW5j
bHVkZSA8V2ViQ29yZS9EYXRhRGV0ZWN0aW9uLmg+CisjZW5kaWYKKwogI2lmIEVOQUJMRShJT1Nf
VE9VQ0hfRVZFTlRTKQogI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9QbGF0Zm9ybVRvdWNoRXZl
bnRJT1MuaD4KICNlbGlmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkBAIC0xMDYyLDYgKzEwNjYsOSBA
QCBwcml2YXRlOgogICAgIHZvaWQgZHJhd1BERkRvY3VtZW50KENHQ29udGV4dFJlZiwgUERGRG9j
dW1lbnQgKiwgY29uc3QgUHJpbnRJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAg
IHZvaWQgZHJhd1BhZ2VzVG9QREZGcm9tUERGRG9jdW1lbnQoQ0dDb250ZXh0UmVmLCBQREZEb2N1
bWVudCAqLCBjb25zdCBQcmludEluZm8mLCB1aW50MzJfdCBmaXJzdCwgdWludDMyX3QgY291bnQp
OwogI2VuZGlmCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgIFdlYkNvcmU6OkRhdGFE
ZXRlY3RvclR5cGVzIGZyb21XS0RhdGFEZXRlY3RvclR5cGVzKHVpbnQzMl90IHR5cGVzKTsKKyNl
bmRpZgogCiAgICAgdm9pZCBzZXRNYWluRnJhbWVJc1Njcm9sbGFibGUoYm9vbCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dl
YlBhZ2VDb2NvYS5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiV2ViUGFnZS5oIgorCisjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2lm
IEVOQUJMRShEQVRBX0RFVEVDVElPTikKK0RhdGFEZXRlY3RvclR5cGVzIFdlYlBhZ2U6OmZyb21X
S0RhdGFEZXRlY3RvclR5cGVzKHVpbnQzMl90IHR5cGVzKQoreworICAgIGlmIChzdGF0aWNfY2Fz
dDxXS0RhdGFEZXRlY3RvclR5cGVzPih0eXBlcykgPT0gV0tEYXRhRGV0ZWN0b3JUeXBlTm9uZSkK
KyAgICAgICAgcmV0dXJuIERhdGFEZXRlY3RvclR5cGVOb25lOworICAgIGlmIChzdGF0aWNfY2Fz
dDxXS0RhdGFEZXRlY3RvclR5cGVzPih0eXBlcykgPT0gV0tEYXRhRGV0ZWN0b3JUeXBlQWxsKQor
ICAgICAgICByZXR1cm4gRGF0YURldGVjdG9yVHlwZUFsbDsKKyAgICAKKyAgICB1aW50MzJfdCB2
YWx1ZSA9IERhdGFEZXRlY3RvclR5cGVOb25lOworICAgIGlmICh0eXBlcyAmIFdLRGF0YURldGVj
dG9yVHlwZVBob25lTnVtYmVyKQorICAgICAgICB2YWx1ZSB8PSBEYXRhRGV0ZWN0b3JUeXBlUGhv
bmVOdW1iZXI7CisgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlTGluaykKKyAgICAg
ICAgdmFsdWUgfD0gRGF0YURldGVjdG9yVHlwZUxpbms7CisgICAgaWYgKHR5cGVzICYgV0tEYXRh
RGV0ZWN0b3JUeXBlQWRkcmVzcykKKyAgICAgICAgdmFsdWUgfD0gRGF0YURldGVjdG9yVHlwZUFk
ZHJlc3M7CisgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCkK
KyAgICAgICAgdmFsdWUgfD0gRGF0YURldGVjdG9yVHlwZUNhbGVuZGFyRXZlbnQ7CisgICAgCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGFEZXRlY3RvclR5cGVzPih2YWx1ZSk7Cit9CisjZW5k
aWYKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lv
biAxOTUxNTgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNSBAQAorMjAxNi0wMS0xNSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBw
bGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBEYXRhRGV0ZWN0b3JzIGluIFdLIChp
T1MpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUy
OTg5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIyODU1OTYwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGZlYXR1cmUgZGVmaW5pdGlvbiBm
b3IgZGF0YSBkZXRlY3Rpb24uCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9GZWF0dXJlRGVm
aW5lcy54Y2NvbmZpZzoKKwogMjAxNi0wMS0xNSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9u
QGFwcGxlLmNvbT4KIAogICAgICAgICBEYXRhIGRldGVjdG9yIHllbGxvdyBoaWdobGlnaHQgbG9j
YXRpb24gaXMgdmVydGljYWxseSBtaXJyb3JlZCBpbiBXZWJLaXQxCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2Nv
bmZpZwkocmV2aXNpb24gMTk1MTU4KQorKysgU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEs
NyBAQCBFTkFCTEVfTUFDX0dFU1RVUkVfRVZFTlRTW3Nkaz1tYWNvc3gqXSA9CiBFTkFCTEVfTUFD
X0dFU1RVUkVfRVZFTlRTX21hY29zeF9XSVRIX0lOVEVSTkFMX1NES19ZRVMgPSBFTkFCTEVfTUFD
X0dFU1RVUkVfRVZFTlRTOwogCiBFTkFCTEVfSU9TX1RFWFRfQVVUT1NJWklOR1tzZGs9aXBob25l
Kl0gPSBFTkFCTEVfSU9TX1RFWFRfQVVUT1NJWklORzsKK0VOQUJMRV9EQVRBX0RFVEVDVElPTiA9
IEVOQUJMRV9EQVRBX0RFVEVDVElPTjsKIAogRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNbc2RrPWlw
aG9uZSpdID0gJChFTkFCTEVfSU9TX1RPVUNIX0VWRU5UU19pb3NfV0lUSF9JTlRFUk5BTF9TREtf
JChVU0VfSU5URVJOQUxfU0RLKSk7CiBFTkFCTEVfSU9TX1RPVUNIX0VWRU5UU19pb3NfV0lUSF9J
TlRFUk5BTF9TREtfWUVTID0gRU5BQkxFX0lPU19UT1VDSF9FVkVOVFM7Cg==
</data>
<flag name="review"
          id="294215"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269295</attachid>
            <date>2016-01-19 14:22:29 -0800</date>
            <delta_ts>2016-01-20 17:02:25 -0800</delta_ts>
            <desc>Patch7</desc>
            <filename>ddwk2-part1.txt</filename>
            <type>text/plain</type>
            <size>47727</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE2LTAxLTE5ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAg
ICAgQWRkIHN1cHBvcnQgZm9yIERhdGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRh
cjovL3Byb2JsZW0vMjI4NTU5NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgZmVhdHVyZSBkZWZpbml0aW9uIGZvciBkYXRhIGRldGVjdGlv
bi4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgor
CiAyMDE2LTAxLTE5ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTk1MzAwLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVm
aW5lcy54Y2NvbmZpZwkocmV2aXNpb24gMTk1MzEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTEsNiArMTExLDcgQEAgRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UU1tzZGs9bWFjb3N4Kl0g
PQogRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UU19tYWNvc3hfV0lUSF9JTlRFUk5BTF9TREtfWUVT
ID0gRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UUzsKIAogRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJ
Tkdbc2RrPWlwaG9uZSpdID0gRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkc7CitFTkFCTEVfREFU
QV9ERVRFQ1RJT04gPSBFTkFCTEVfREFUQV9ERVRFQ1RJT047CiAKIEVOQUJMRV9JT1NfVE9VQ0hf
RVZFTlRTW3Nkaz1pcGhvbmUqXSA9ICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9zX1dJVEhf
SU5URVJOQUxfU0RLXyQoVVNFX0lOVEVSTkFMX1NESykpOwogRU5BQkxFX0lPU19UT1VDSF9FVkVO
VFNfaW9zX1dJVEhfSU5URVJOQUxfU0RLX1lFUyA9IEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTOwpJ
bmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE5NTMxMCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDEtMTkgIEVucmljYSBDYXN1Y2NpICA8ZW5y
aWNhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgRGF0YURldGVjdG9ycyBp
biBXSyAoaU9TKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1Mjk4OQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yMjg1NTk2MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBmZWF0dXJlIGRlZmlu
aXRpb24gZm9yIGRhdGEgZGV0ZWN0aW9uLgorCisgICAgICAgICogd3RmL0ZlYXR1cmVEZWZpbmVz
Lmg6CisKIDIwMTYtMDEtMTkgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxOTUzMDAuCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0ZlYXR1cmVEZWZpbmVzLmgJKHJldmlzaW9uIDE5NTMxMCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zl
YXR1cmVEZWZpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw2ICsyNzIsMTQgQEAgdGhlIHB1
YmxpYyBpT1MgU0RLLiBXZSB3aWxsIGFsc28gbmVlZCB0bwogCiAjZW5kaWYgLyogUExBVEZPUk0o
TUFDKSAqLwogCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfREFU
QV9ERVRFQ1RJT04pCisjZGVmaW5lIEVOQUJMRV9EQVRBX0RFVEVDVElPTiAxCisjZW5kaWYKKwor
I2VuZGlmIC8qIFBMQVRGT1JNKENPQ09BKSAqLworCiAvKiAtLS0tLS0tLS0gQXBwbGUgV2luZG93
cyBwb3J0IC0tLS0tLS0tLSAqLwogI2lmIFBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKFdJTl9D
QUlSTykKIApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MzEwKQorKysgU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTYtMDEtMTkg
IEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgRGF0YURldGVjdG9ycyBpbiBXSyAoaU9TKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjk4OQorICAgICAgICByZGFyOi8vcHJvYmxlbS8y
Mjg1NTk2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGltcGxlbWVudGluZyBEYXRhIERldGVjdG9y
cyBzdXBwb3J0CisgICAgICAgIGluIFdLMi4gVGhlIHBhdGNoIGFkZHMgYSBuZXcgbWVtZWJlciB0
byB0aGUgU2V0dGluZ3Mgb2JqZWN0CisgICAgICAgIHRvIHJldHJpZXZlIHRoZSB0eXBlIG9mIGRl
dGVjdGlvbiBkZXNpcmVkLiBUaGUgRGF0YURldGVjdGlvbiBmaWxlcworICAgICAgICBoYXZlIGJl
ZW4gbW92ZWQgdW5kZXIgY29jb2EsIHNpbmNlIHRoZXkgYXJlIG5vIGxvbmdlciBPUyBYIHNwZWNp
ZmljLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6
CisgICAgICAgICogQ29uZmlndXJhdGlvbnMvV2ViQ29yZS54Y2NvbmZpZzoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0RhdGFEZXRlY3Rpb24uaC4KKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24u
bW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24u
bW0uCisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5S
YW5nZSk6CisgICAgICAgICogZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGVkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24ubW06IFJlbW92ZWQuCisgICAgICAg
ICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
OjpjaGVja0xvYWRDb21wbGV0ZUZvclRoaXNGcmFtZSk6CisgICAgICAgICogcGFnZS9TZXR0aW5n
cy5oOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaW46CisgICAgICAgICogcGxhdGZvcm0vc3Bp
L21hYy9EYXRhRGV0ZWN0b3JzU1BJLmg6CisKIDIwMTYtMDEtMTkgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTk1MTc5
LgpJbmRleDogU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNj
b25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVy
ZURlZmluZXMueGNjb25maWcJKHJldmlzaW9uIDE5NTMxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0Nv
bmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTEsNiArMTExLDcgQEAgRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UU1tzZGs9bWFjb3N4Kl0gPQog
RU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UU19tYWNvc3hfV0lUSF9JTlRFUk5BTF9TREtfWUVTID0g
RU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UUzsKIAogRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkdb
c2RrPWlwaG9uZSpdID0gRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkc7CitFTkFCTEVfREFUQV9E
RVRFQ1RJT04gPSBFTkFCTEVfREFUQV9ERVRFQ1RJT047CiAKIEVOQUJMRV9JT1NfVE9VQ0hfRVZF
TlRTW3Nkaz1pcGhvbmUqXSA9ICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9zX1dJVEhfSU5U
RVJOQUxfU0RLXyQoVVNFX0lOVEVSTkFMX1NESykpOwogRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNf
aW9zX1dJVEhfSU5URVJOQUxfU0RLX1lFUyA9IEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvV2ViQ29yZS54Y2NvbmZpZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9XZWJDb3JlLnhjY29uZmlnCShy
ZXZpc2lvbiAxOTUzMTApCisrKyBTb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9XZWJDb3Jl
LnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIFBST0RVQ1RfTkFNRSA9
IFdlYkNvcmU7CiBVTkVYUE9SVEVEX1NZTUJPTFNfRklMRSA9IENvbmZpZ3VyYXRpb25zL1dlYkNv
cmUudW5leHA7CiBPVEhFUl9MREZMQUdTID0gJChpbmhlcml0ZWQpICQoT1RIRVJfTERGTEFHU19Q
TEFURk9STSk7CiBPVEhFUl9MREZMQUdTX0JBU0UgPSAtbHNxbGl0ZTMgLWxvYmpjIC1sQU5HTEU7
Ci1PVEhFUl9MREZMQUdTX0JBU0VfaW9zID0gJChPVEhFUl9MREZMQUdTX0JBU0UpIC1mcmFtZXdv
cmsgQ0ZOZXR3b3JrIC1mcmFtZXdvcmsgQ29yZUdyYXBoaWNzIC1mcmFtZXdvcmsgQ29yZVRleHQg
LWZyYW1ld29yayBGb3VuZGF0aW9uIC1mcmFtZXdvcmsgR3JhcGhpY3NTZXJ2aWNlcyAtZnJhbWV3
b3JrIEltYWdlSU8gLWZyYW1ld29yayBPcGVuR0xFUyAtbE1vYmlsZUdlc3RhbHQ7CitPVEhFUl9M
REZMQUdTX0JBU0VfaW9zID0gJChPVEhFUl9MREZMQUdTX0JBU0UpIC1mcmFtZXdvcmsgQ0ZOZXR3
b3JrIC1mcmFtZXdvcmsgQ29yZUdyYXBoaWNzIC1mcmFtZXdvcmsgQ29yZVRleHQgLWZyYW1ld29y
ayBGb3VuZGF0aW9uIC1mcmFtZXdvcmsgR3JhcGhpY3NTZXJ2aWNlcyAtZnJhbWV3b3JrIEltYWdl
SU8gLWZyYW1ld29yayBPcGVuR0xFUyAtbE1vYmlsZUdlc3RhbHQgLWZyYW1ld29yayBEYXRhRGV0
ZWN0b3JzQ29yZTsKIE9USEVSX0xERkxBR1NfUExBVEZPUk1bc2RrPWlwaG9uZW9zKl0gPSAkKE9U
SEVSX0xERkxBR1NfQkFTRV9pb3MpIC1mcmFtZXdvcmsgSU9TdXJmYWNlOwogT1RIRVJfTERGTEFH
U19QTEFURk9STVtzZGs9aXBob25lc2ltdWxhdG9yKl0gPSAkKE9USEVSX0xERkxBR1NfQkFTRV9p
b3MpOwogT1RIRVJfTERGTEFHU19QTEFURk9STVtzZGs9bWFjb3N4Kl0gPSAkKE9USEVSX0xERkxB
R1NfQkFTRSkgLXN1Yl9saWJyYXJ5IGxpYm9iamMgLXVtYnJlbGxhIFdlYktpdCAtYWxsb3dhYmxl
X2NsaWVudCBXZWJDb3JlVGVzdFN1cHBvcnQgLWFsbG93YWJsZV9jbGllbnQgV2ViS2l0MiAtYWxs
b3dhYmxlX2NsaWVudCBXZWJLaXRMZWdhY3kgLWZyYW1ld29yayBBcHBsaWNhdGlvblNlcnZpY2Vz
IC1mcmFtZXdvcmsgQXVkaW9Vbml0IC1mcmFtZXdvcmsgQ2FyYm9uIC1mcmFtZXdvcmsgQ29jb2Eg
LWZyYW1ld29yayBEYXRhRGV0ZWN0b3JzQ29yZSAtZnJhbWV3b3JrIElPU3VyZmFjZSAtZnJhbWV3
b3JrIE9wZW5HTDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NTMxMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTEzNyw4
ICsxMTM3LDYgQEAKIAkJMkQ1MDAyRkMxQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENTAwMkZB
MUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ1MDM2NjgxQkNERERDNDAwRTIwQkIzIC8q
IEdlc3R1cmVFdmVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQ1MDM2NjcxQkNERERDNDAwRTIwQkIzIC8qIEdlc3R1cmVFdmVudHMuY3BwICov
OyB9OwogCQkyRDU2NDZCMDFCOEY4NDkzMDAzQzQ5OTQgLyogRGljdGlvbmFyeVBvcHVwSW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ1NjQ2QUYx
QjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyRDU4RDg1NTFBMTVGNjVGMDBBNUY3
MjYgLyogRGF0YURldGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQ1OEQ4NTMxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyRDU4RDg1
NjFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENThEODU0MUExNUY2NUYwMEE1RjcyNiAvKiBE
YXRhRGV0ZWN0aW9uLm1tICovOyB9OwogCQkyRDU5RjFCRjFBMDA0NEM2MDAxRjNEMjkgLyogRGF0
YURldGVjdG9yc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkQ1OUYxQkUxQTAwNDRDNjAwMUYzRDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDVBNTkyRjE1
MjUyNTIzMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc0OEQ3NDEyQ0MzRjg5MDAxRkJBNDEgLyog
SW1hZ2VPcmllbnRhdGlvbi5jcHAgKi87IH07CiAJCTJENUE1OTMxMTUyNTI1RDAwMDM2RUU1MSAv
KiBJbWFnZU9yaWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODc0OEQ2NjEyQ0MzNzYzMDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01ODgy
LDYgKzU4ODAsOCBAQAogCQlDNTBEMEU4MzBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVz
cGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUw
RDBFODEwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDNTEzN0NGMjExQTU4Mzc4MDA0
QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTM3Q0YwMTFBNTgzNzgwMDRBREI5OSAvKiBKU0RPTVN0cmlu
Z0xpc3QuY3BwICovOyB9OwogCQlDNTEzN0NGMzExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJp
bmdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTEzN0NGMTExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmggKi87IH07CisJCUM1
MjI3REYxMUMzQzZERjEwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTIyN0RFRjFDM0M2REQ3MDBGNUVENTQg
LyogRGF0YURldGVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUM1MjI3REYyMUMzQzZERjkwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUyMjdERjAx
QzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24ubW0gKi87IH07CiAJCUM1Mjc4QjBDMTdG
MjEyRUEwMDNBMjk5OCAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTI3OEIwQjE3RjIxMkVBMDAzQTI5OTgg
LyogUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tICovOyB9OwogCQlDNTQ0Mjc0QjExQTU3RTdBMDA2
M0E3NDkgLyogRE9NU3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzU0NDI3NDkxMUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xpc3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDNTU2
MTBGMTExQTcwNEVCMDBCODJEMjcgLyogRE9NU3RyaW5nTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTU2MTBGMDExQTcwNEVCMDBCODJEMjcg
LyogRE9NU3RyaW5nTGlzdC5jcHAgKi87IH07CkBAIC04NTE0LDggKzg1MTQsNiBAQAogCQkyRDUw
MDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQYXRoVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJENTAzNjY3MUJDREREQzQwMEUyMEJCMyAvKiBHZXN0dXJlRXZlbnRzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdlc3R1cmVFdmVudHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDU2NDZBRjFCOEY4NDkzMDAzQzQ5OTQgLyogRGlj
dGlvbmFyeVBvcHVwSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0
aW9uYXJ5UG9wdXBJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJENThEODUz
MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERhdGFEZXRlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMkQ1OEQ4NTQxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24ubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEYXRhRGV0ZWN0aW9uLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDU5RjFCRTFBMDA0NEM2MDAxRjNEMjkgLyogRGF0YURl
dGVjdG9yc1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRGV0ZWN0
b3JzU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENUJDNDI1MTZGODgyQkUw
MDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1QkM0MjYxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3Vy
aXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNlY3Vy
aXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTM3MTMsNiArMTM3MTEsOCBAQAogCQlDNTBEMEU4MTBGRjQyNzI5MDBBQzI2NDQgLyogU3Rv
cmFnZU5hbWVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdl
TmFtZXNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MTM3Q0YwMTFBNTgz
NzgwMDRBREI5OSAvKiBKU0RPTVN0cmluZ0xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNET01TdHJpbmdMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzUxMzdDRjExMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTVN0cmluZ0xpc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzUyMjdERUYxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFE
ZXRlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YURldGVjdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTIyN0RGMDFDM0M2REQ3MDBGNUVE
NTQgLyogRGF0YURldGVjdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IERhdGFEZXRlY3Rpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1
Mjc4QjBCMTdGMjEyRUEwMDNBMjk5OCAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0Zm9ybVBhc3RlYm9hcmRJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NDQyNzQ5MTFBNTdFN0EwMDYzQTc0
OSAvKiBET01TdHJpbmdMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERP
TVN0cmluZ0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU0NDI3NEExMUE1
N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xpc3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IERPTVN0cmluZ0xpc3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4ODUs
NiArMTc4ODUsOCBAQAogCQk3QzNFNTEwNzE4REY4RjEyMDBDMTEyRjcgLyogY29jb2EgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUM1MjI3REVGMUMzQzZE
RDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLmggKi8sCisJCQkJQzUyMjdERjAxQzNDNkRENzAw
RjVFRDU0IC8qIERhdGFEZXRlY3Rpb24ubW0gKi8sCiAJCQkJOUI1NUVFRUExQjNGM0ZFRjAwNTM0
MkJDIC8qIEVkaXRvckNvY29hLmggKi8sCiAJCQkJOUI1NUVFRTgxQjNFODg5ODAwNTM0MkJDIC8q
IEVkaXRvckNvY29hLm1tICovLAogCQkJCTdDM0U1MTA4MThERjhGMzUwMEMxMTJGNyAvKiBIVE1M
Q29udmVydGVyLmggKi8sCkBAIC0yMzE5MSw4ICsyMzE5Myw2IEBACiAJCQljaGlsZHJlbiA9ICgK
IAkJCQlDRTdCMkRBRjE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9s
bGVyLmggKi8sCiAJCQkJQ0U3QjJEQjAxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4
dFVJQ29udHJvbGxlci5tbSAqLywKLQkJCQkyRDU4RDg1MzFBMTVGNjVGMDBBNUY3MjYgLyogRGF0
YURldGVjdGlvbi5oICovLAotCQkJCTJENThEODU0MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0
ZWN0aW9uLm1tICovLAogCQkJCTkzN0ZGM0Q0MUExMDEyRDYwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5
TG9va3VwLmggKi8sCiAJCQkJOTM3RkYzRDYxQTEwMTMxQjAwOEVCQTMxIC8qIERpY3Rpb25hcnlM
b29rdXAubW0gKi8sCiAJCQkJRUQ1MDFEQzUwQjI0OUYyOTAwQUUxOEQ5IC8qIEVkaXRvck1hYy5t
bSAqLywKQEAgLTI1MDY4LDcgKzI1MDY4LDYgQEAKIAkJCQk5N0JDNkEzMDE1MDVGMDgxMDAxQjc0
QUMgLyogRGF0YWJhc2VUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTMyMTUwNUYw
ODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJFMjM0
ODBEMThBOTg3MTQwMEU0QjZFOCAvKiBEYXRhQ3VlLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRDU4
RDg1NTFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTM1RTJCNEUxQUZGMDZDQTAwOTc2RjlGIC8qIERhdGFEZXRlY3RvcnNDb3JlU1BJLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRDU5RjFCRjFBMDA0NEM2MDAxRjNEMjkgLyogRGF0YURldGVjdG9y
c1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyMjc0NkYwRTgzNjY0NTAwRTdGOTc1IC8qIERh
dGFSZWYuaCBpbiBIZWFkZXJzICovLApAQCAtMjYwNDAsNiArMjYwMzksNyBAQAogCQkJCUIyNzUz
NTc1MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjc1
MzU3NjBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZUhhc2guaCBpbiBIZWFkZXJzICovLAogCQkJ
CUNFMTI1MjREMUExQTc3REUwMDg2NDQ4MCAvKiBJT1BNTGliU1BJLmggaW4gSGVhZGVycyAqLywK
KwkJCQlDNTIyN0RGMTFDM0M2REYxMDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDRERUY2NDMxQTZGRjkyNzAwRDQ1RUVDIC8qIElPUmV0dXJuU1BJLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRDBCNEFBQjE4REExQ0NEMDA0MzRERTEgLyogSU9TdXJmYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQzIxRTU3RDE4M0VEMUZGMDAxQzI4OUQgLyogSU9TdXJmYWNl
UG9vbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODc0Nyw2ICsyODc0Nyw3IEBACiAJCQkJODUwMzFC
M0YwQTQ0RUZDNzAwRjk5MkUwIC8qIENsaXBib2FyZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTU4MDM3MTYxMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDREVBNzYzNTE0NjBCNzFBMDA4QjMxRjEgLyogQ2xvY2suY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQzUyMjdERjIxQzNDNkRGOTAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24ubW0gaW4g
U291cmNlcyAqLywKIAkJCQlDREVBNzYzNDE0NjBCNTZGMDA4QjMxRjEgLyogQ2xvY2tHZW5lcmlj
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlCRDhBOTVBMThCRUZDNzYwMDk4N0U5QSAvKiBDb2xs
ZWN0aW9uSW5kZXhDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU2NjBCMDUzODE0
MDAyQ0U2NEYgLyogQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODkyNiw3ICsyODkyNyw2
IEBACiAJCQkJOTdCQzZBMkYxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk3QkM2QTMxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRy
YWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkUyMzQ4MEMxOEE5ODcwQjAwRTRCNkU4IC8q
IERhdGFDdWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ1OEQ4NTYxQTE1RjY1RjAwQTVGNzI2
IC8qIERhdGFEZXRlY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzY0NjQxRDExRDdGNDE2
MDA2NDU1QjAgLyogRGF0YXNldERPTVN0cmluZ01hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
Nzg0OTQxQjBCNUZFNTA3MDAxRTIzN0EgLyogRGF0YVRyYW5zZmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzRjE5QUZGMDgyNDVFNTkwMDFFOUFCQyAvKiBEYXRhVHJhbnNmZXJNYWMubW0gaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURl
dGVjdGlvbi5oCShyZXZpc2lvbiAxOTUzMTApCShmcm9tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0RhdGFEZXRlY3Rpb24uaDoxOTUzMTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBEYXRhRGV0ZWN0aW9uX2gKKyNkZWZpbmUgRGF0YURldGVjdGlvbl9o
CisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKyNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KKworT0JKQ19DTEFTUyBEREFjdGlvbkNvbnRleHQ7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgSGl0VGVzdFJlc3VsdDsK
K2NsYXNzIFJhbmdlOworCitjbGFzcyBEYXRhRGV0ZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUFy
b3VuZEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIEZsb2F0UmVjdCYgZGV0ZWN0
ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKwor
I2VuZGlmIC8vIERhdGFEZXRlY3Rpb25faApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsy
Niw2IEBACiAjaWZuZGVmIERhdGFEZXRlY3Rpb25faAogI2RlZmluZSBEYXRhRGV0ZWN0aW9uX2gK
IAotI2lmIFBMQVRGT1JNKE1BQykKLQogI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgogCkBAIC0zOSwxMyArMzcsMjUgQEAgY2xhc3MgRmxvYXRSZWN0Owog
Y2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIFJhbmdlOwogCitlbnVtIERhdGFEZXRlY3RvclR5
cGVzIHsKKyAgICBEYXRhRGV0ZWN0b3JUeXBlTm9uZSA9IDAsCisgICAgRGF0YURldGVjdG9yVHlw
ZVBob25lTnVtYmVyID0gMSA8PCAwLAorICAgIERhdGFEZXRlY3RvclR5cGVMaW5rID0gMSA8PCAx
LAorICAgIERhdGFEZXRlY3RvclR5cGVBZGRyZXNzID0gMSA8PCAyLAorICAgIERhdGFEZXRlY3Rv
clR5cGVDYWxlbmRhckV2ZW50ID0gMSA8PCAzLAorICAgIERhdGFEZXRlY3RvclR5cGVUcmFja2lu
Z051bWJlciA9IDEgPDwgNCwgICAgLy8gTm90IGluZGl2aWR1YWxseSBzZWxlY3RhYmxlIHdpdGgg
dGhlIEFQSQorICAgIERhdGFEZXRlY3RvclR5cGVGbGlnaHQgPSAxIDw8IDUsICAgICAgICAgICAg
Ly8gTm90IGluZGl2aWR1YWxseSBzZWxlY3RhYmxlIHdpdGggdGhlIEFQSQorICAgIERhdGFEZXRl
Y3RvclR5cGVBbGwgPSBVTE9OR19NQVgKK307CisKIGNsYXNzIERhdGFEZXRlY3Rpb24gewogcHVi
bGljOgorI2lmIFBMQVRGT1JNKE1BQykKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmV0YWlu
UHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQoY29uc3Qg
SGl0VGVzdFJlc3VsdCYsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0
cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKTsKKyNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIGRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRS
YW5nZSwgRGF0YURldGVjdG9yVHlwZXMpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
Ci0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiAjZW5kaWYgLy8gRGF0YURldGVjdGlvbl9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCShy
ZXZpc2lvbiAxOTUzMTApCShmcm9tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRl
Y3Rpb24ubW06MTk1MzEwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0
ZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIkRhdGFEZXRlY3Rpb24uaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAi
RGF0YURldGVjdG9yc1NQSS5oIgorI2ltcG9ydCAiRnJhbWVWaWV3LmgiCisjaW1wb3J0ICJIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgorI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgorI2lt
cG9ydCAiTm9kZS5oIgorI2ltcG9ydCAiUmFuZ2UuaCIKKyNpbXBvcnQgIlJlbmRlck9iamVjdC5o
IgorI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCisjaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIK
KyNpbXBvcnQgIlZpc2libGVVbml0cy5oIgorI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0
ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uLCBSZWZQ
dHI8UmFuZ2U+IGNvbnRleHRSYW5nZSwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0Jv
eCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCit7CisgICAgU3RyaW5nIGZ1bGxQ
bGFpblRleHRTdHJpbmcgPSBwbGFpblRleHQoY29udGV4dFJhbmdlLmdldCgpKTsKKyAgICBpbnQg
aGl0TG9jYXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShjb250ZXh0
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdldCgpKTsKKworICAgIFJldGFpblB0
cjxERFNjYW5uZXJSZWY+IHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5u
ZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIpKTsKKyAgICBSZXRhaW5QdHI8RERTY2FuUXVlcnlS
ZWY+IHNjYW5RdWVyeSA9IGFkb3B0Q0YoRERTY2FuUXVlcnlDcmVhdGVGcm9tU3RyaW5nKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGZ1bGxQbGFpblRleHRTdHJpbmcuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KSwgQ0ZSYW5nZU1ha2UoMCwgZnVsbFBsYWluVGV4dFN0cmluZy5sZW5ndGgoKSkpKTsKKworICAg
IGlmICghRERTY2FubmVyU2NhblF1ZXJ5KHNjYW5uZXIuZ2V0KCksIHNjYW5RdWVyeS5nZXQoKSkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHJl
c3VsdHMgPSBhZG9wdENGKEREU2Nhbm5lckNvcHlSZXN1bHRzV2l0aE9wdGlvbnMoc2Nhbm5lci5n
ZXQoKSwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zTm9PdmVybGFwKSk7CisKKyAgICAvLyBG
aW5kIHRoZSBERFJlc3VsdFJlZiB0aGF0IGludGVyc2VjdHMgdGhlIGhpdFRlc3RSZXN1bHQncyBW
aXNpYmxlUG9zaXRpb24uCisgICAgRERSZXN1bHRSZWYgbWFpblJlc3VsdCA9IG51bGxwdHI7Cisg
ICAgUmVmUHRyPFJhbmdlPiBtYWluUmVzdWx0UmFuZ2U7CisgICAgQ0ZJbmRleCByZXN1bHRDb3Vu
dCA9IENGQXJyYXlHZXRDb3VudChyZXN1bHRzLmdldCgpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9
IDA7IGkgPCByZXN1bHRDb3VudDsgaSsrKSB7CisgICAgICAgIEREUmVzdWx0UmVmIHJlc3VsdCA9
IChERFJlc3VsdFJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KHJlc3VsdHMuZ2V0KCksIGkpOwor
ICAgICAgICBDRlJhbmdlIHJlc3VsdFJhbmdlSW5Db250ZXh0ID0gRERSZXN1bHRHZXRSYW5nZShy
ZXN1bHQpOworICAgICAgICBpZiAoaGl0TG9jYXRpb24gPj0gcmVzdWx0UmFuZ2VJbkNvbnRleHQu
bG9jYXRpb24gJiYgKGhpdExvY2F0aW9uIC0gcmVzdWx0UmFuZ2VJbkNvbnRleHQubG9jYXRpb24p
IDwgcmVzdWx0UmFuZ2VJbkNvbnRleHQubGVuZ3RoKSB7CisgICAgICAgICAgICBtYWluUmVzdWx0
ID0gcmVzdWx0OworICAgICAgICAgICAgbWFpblJlc3VsdFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpz
dWJyYW5nZShjb250ZXh0UmFuZ2UuZ2V0KCksIHJlc3VsdFJhbmdlSW5Db250ZXh0LmxvY2F0aW9u
LCByZXN1bHRSYW5nZUluQ29udGV4dC5sZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1haW5SZXN1bHQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gYWN0aW9uQ29udGV4dCA9IGFk
b3B0TlMoW2FsbG9jRERBY3Rpb25Db250ZXh0SW5zdGFuY2UoKSBpbml0XSk7CisgICAgW2FjdGlv
bkNvbnRleHQgc2V0QWxsUmVzdWx0czpAWyAoaWQpbWFpblJlc3VsdCBdXTsKKyAgICBbYWN0aW9u
Q29udGV4dCBzZXRNYWluUmVzdWx0Om1haW5SZXN1bHRdOworCisgICAgVmVjdG9yPEZsb2F0UXVh
ZD4gcXVhZHM7CisgICAgbWFpblJlc3VsdFJhbmdlLT5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7
CisgICAgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIHF1YWQgOiBxdWFkcykKKyAgICAgICAgZGV0ZWN0ZWREYXRh
Qm91bmRpbmdCb3gudW5pdGUoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KHF1YWQuZW5jbG9z
aW5nQm91bmRpbmdCb3goKSkpOworICAgIAorICAgIGRldGVjdGVkRGF0YVJhbmdlID0gbWFpblJl
c3VsdFJhbmdlOworICAgIAorICAgIHJldHVybiBhY3Rpb25Db250ZXh0OworfQorCitSZXRhaW5Q
dHI8RERBY3Rpb25Db250ZXh0PiBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVz
dFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBGbG9hdFJlY3QmIGRl
dGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkK
K3sKKyAgICBpZiAoIURhdGFEZXRlY3RvcnNMaWJyYXJ5KCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHJl
bmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbjsKKyAgICBSZWZQ
dHI8UmFuZ2U+IGNvbnRleHRSYW5nZTsKKworICAgIGlmICghaXM8SFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ+KCpub2RlKSkgeworICAgICAgICBwb3NpdGlvbiA9IHJlbmRlcmVyLT5wb3NpdGlv
bkZvclBvaW50KGhpdFRlc3RSZXN1bHQubG9jYWxQb2ludCgpLCBudWxscHRyKTsKKyAgICAgICAg
aWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICAgICAgcG9zaXRpb24gPSBmaXJzdFBvc2l0
aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7CisKKyAgICAgICAgY29udGV4dFJhbmdlID0gcmFuZ2VF
eHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOworICAgICAg
ICBpZiAoIWNvbnRleHRSYW5nZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsK
KyAgICAgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIEludFBvaW50IGZyYW1lUG9pbnQgPSBoaXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludEluSW5u
ZXJOb2RlRnJhbWUoKTsKKyAgICAgICAgaWYgKCFmcmFtZS0+cmFuZ2VGb3JQb2ludChmcmFtZVBv
aW50KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50
KTsKKyAgICAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAgICAgY29udGV4dFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51
bGFyaXR5KHBvc2l0aW9uLCBMaW5lR3JhbnVsYXJpdHksIERpcmVjdGlvbkZvcndhcmQpOworICAg
ICAgICBpZiAoIWNvbnRleHRSYW5nZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIHJldHVybiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwg
Y29udGV4dFJhbmdlLCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2Up
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1t
CSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwxOSBAQAogI2ltcG9ydCAiY29u
ZmlnLmgiCiAjaW1wb3J0ICJEYXRhRGV0ZWN0aW9uLmgiCiAKLSNpZiBQTEFURk9STShNQUMpCi0K
KyNpbXBvcnQgIkF0dHIuaCIKKyNpbXBvcnQgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbXBv
cnQgIkRhdGFEZXRlY3RvcnNTUEkuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgorI2ltcG9ydCAi
SFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmgiCiAjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJOb2RlLmgiCisjaW1wb3J0
ICJOb2RlTGlzdC5oIgorI2ltcG9ydCAiTm9kZVRyYXZlcnNhbC5oIgogI2ltcG9ydCAiUmFuZ2Uu
aCIKICNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgorI2ltcG9ydCAiVGV4dC5oIgogI2ltcG9ydCAi
VGV4dEl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbXBvcnQgIlZp
c2libGVVbml0cy5oIgpAQCAtNDIsNiArNDYsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
KyNpZiBQTEFURk9STShNQUMpCisKIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBk
ZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24sIFJl
ZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5n
Qm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKIHsKICAgICBTdHJpbmcgZnVs
bFBsYWluVGV4dFN0cmluZyA9IHBsYWluVGV4dChjb250ZXh0UmFuZ2UuZ2V0KCkpOwpAQCAtMTMx
LDcgKzEzNywxMCBAQCBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBEYXRhRGV0ZWN0aW9uCiAK
ICAgICByZXR1cm4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UocG9zaXRpb24sIGNvbnRl
eHRSYW5nZSwgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIGRldGVjdGVkRGF0YVJhbmdlKTsKIH0K
KyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK3ZvaWQgRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29u
dGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYsIERhdGFEZXRlY3RvclR5cGVzKQoreworfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5oCShyZXZpc2lvbiAxOTUz
MTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EYXRhRGV0ZWN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRGF0YURldGVj
dGlvbl9oCi0jZGVmaW5lIERhdGFEZXRlY3Rpb25faAotCi0jaWYgUExBVEZPUk0oTUFDKQotCi0j
aW1wb3J0IDx3dGYvUmVmUHRyLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0KLU9CSkNf
Q0xBU1MgRERBY3Rpb25Db250ZXh0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZs
b2F0UmVjdDsKLWNsYXNzIEhpdFRlc3RSZXN1bHQ7Ci1jbGFzcyBSYW5nZTsKLQotY2xhc3MgRGF0
YURldGVjdGlvbiB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJldGFpblB0
cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhp
dFRlc3RSZXN1bHQmLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8
UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KLSNlbmRpZiAvLyBEYXRhRGV0ZWN0aW9uX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RhdGFEZXRlY3Rpb24ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGF0YURldGVjdGlvbi5tbQkocmV2
aXNpb24gMTk1MzEwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGF0YURldGVjdGlv
bi5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwxMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJEYXRhRGV0ZWN0aW9uLmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIkRhdGFE
ZXRlY3RvcnNTUEkuaCIKLSNpbXBvcnQgIkZyYW1lVmlldy5oIgotI2ltcG9ydCAiSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQuaCIKLSNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbXBvcnQg
Ik5vZGUuaCIKLSNpbXBvcnQgIlJhbmdlLmgiCi0jaW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKLSNp
bXBvcnQgIlRleHRJdGVyYXRvci5oIgotI2ltcG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgiCi0jaW1w
b3J0ICJWaXNpYmxlVW5pdHMuaCIKLSNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0
ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiwgUmVmUHRyPFJh
bmdlPiBjb250ZXh0UmFuZ2UsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIFJl
ZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQotewotICAgIFN0cmluZyBmdWxsUGxhaW5U
ZXh0U3RyaW5nID0gcGxhaW5UZXh0KGNvbnRleHRSYW5nZS5nZXQoKSk7Ci0gICAgaW50IGhpdExv
Y2F0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoY29udGV4dFJhbmdl
LT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7Ci0KLSAgICBSZXRhaW5QdHI8RERT
Y2FubmVyUmVmPiBzY2FubmVyID0gYWRvcHRDRihERFNjYW5uZXJDcmVhdGUoRERTY2FubmVyVHlw
ZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7Ci0gICAgUmV0YWluUHRyPEREU2NhblF1ZXJ5UmVmPiBz
Y2FuUXVlcnkgPSBhZG9wdENGKEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZyhrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBmdWxsUGxhaW5UZXh0U3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIENG
UmFuZ2VNYWtlKDAsIGZ1bGxQbGFpblRleHRTdHJpbmcubGVuZ3RoKCkpKSk7Ci0KLSAgICBpZiAo
IUREU2Nhbm5lclNjYW5RdWVyeShzY2FubmVyLmdldCgpLCBzY2FuUXVlcnkuZ2V0KCkpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiByZXN1bHRz
ID0gYWRvcHRDRihERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCks
IEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc05vT3ZlcmxhcCkpOwotCi0gICAgLy8gRmluZCB0
aGUgRERSZXN1bHRSZWYgdGhhdCBpbnRlcnNlY3RzIHRoZSBoaXRUZXN0UmVzdWx0J3MgVmlzaWJs
ZVBvc2l0aW9uLgotICAgIEREUmVzdWx0UmVmIG1haW5SZXN1bHQgPSBudWxscHRyOwotICAgIFJl
ZlB0cjxSYW5nZT4gbWFpblJlc3VsdFJhbmdlOwotICAgIENGSW5kZXggcmVzdWx0Q291bnQgPSBD
RkFycmF5R2V0Q291bnQocmVzdWx0cy5nZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBp
IDwgcmVzdWx0Q291bnQ7IGkrKykgewotICAgICAgICBERFJlc3VsdFJlZiByZXN1bHQgPSAoRERS
ZXN1bHRSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChyZXN1bHRzLmdldCgpLCBpKTsKLSAgICAg
ICAgQ0ZSYW5nZSByZXN1bHRSYW5nZUluQ29udGV4dCA9IEREUmVzdWx0R2V0UmFuZ2UocmVzdWx0
KTsKLSAgICAgICAgaWYgKGhpdExvY2F0aW9uID49IHJlc3VsdFJhbmdlSW5Db250ZXh0LmxvY2F0
aW9uICYmIChoaXRMb2NhdGlvbiAtIHJlc3VsdFJhbmdlSW5Db250ZXh0LmxvY2F0aW9uKSA8IHJl
c3VsdFJhbmdlSW5Db250ZXh0Lmxlbmd0aCkgewotICAgICAgICAgICAgbWFpblJlc3VsdCA9IHJl
c3VsdDsKLSAgICAgICAgICAgIG1haW5SZXN1bHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFu
Z2UoY29udGV4dFJhbmdlLmdldCgpLCByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbiwgcmVz
dWx0UmFuZ2VJbkNvbnRleHQubGVuZ3RoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKCFtYWluUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHQgPSBhZG9wdE5T
KFthbGxvY0REQWN0aW9uQ29udGV4dEluc3RhbmNlKCkgaW5pdF0pOwotICAgIFthY3Rpb25Db250
ZXh0IHNldEFsbFJlc3VsdHM6QFsgKGlkKW1haW5SZXN1bHQgXV07Ci0gICAgW2FjdGlvbkNvbnRl
eHQgc2V0TWFpblJlc3VsdDptYWluUmVzdWx0XTsKLQotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1
YWRzOwotICAgIG1haW5SZXN1bHRSYW5nZS0+YWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOwotICAg
IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBtYWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCi0gICAgICAgIGRldGVjdGVkRGF0YUJvdW5k
aW5nQm94LnVuaXRlKGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhxdWFkLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCkpKTsKLSAgICAKLSAgICBkZXRlY3RlZERhdGFSYW5nZSA9IG1haW5SZXN1bHRS
YW5nZTsKLSAgICAKLSAgICByZXR1cm4gYWN0aW9uQ29udGV4dDsKLX0KLQotUmV0YWluUHRyPERE
QWN0aW9uQ29udGV4dD4gRGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1
bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwgRmxvYXRSZWN0JiBkZXRlY3Rl
ZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCi17Ci0g
ICAgaWYgKCFEYXRhRGV0ZWN0b3JzTGlicmFyeSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwot
ICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byByZW5kZXJl
ciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb247Ci0gICAgUmVmUHRyPFJh
bmdlPiBjb250ZXh0UmFuZ2U7Ci0KLSAgICBpZiAoIWlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50Pigqbm9kZSkpIHsKLSAgICAgICAgcG9zaXRpb24gPSByZW5kZXJlci0+cG9zaXRpb25Gb3JQ
b2ludChoaXRUZXN0UmVzdWx0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChw
b3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbklu
T3JCZWZvcmVOb2RlKG5vZGUpOwotCi0gICAgICAgIGNvbnRleHRSYW5nZSA9IHJhbmdlRXhwYW5k
ZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKLSAgICAgICAgaWYg
KCFjb250ZXh0UmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAg
ICAgIGlmICghZnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBJ
bnRQb2ludCBmcmFtZVBvaW50ID0gaGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9k
ZUZyYW1lKCk7Ci0gICAgICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2ludCkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBWaXNpYmxlUG9zaXRpb24g
cG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7Ci0g
ICAgICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgICAgIGNvbnRleHRSYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0
eShwb3NpdGlvbiwgTGluZUdyYW51bGFyaXR5LCBEaXJlY3Rpb25Gb3J3YXJkKTsKLSAgICAgICAg
aWYgKCFjb250ZXh0UmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UocG9zaXRpb24sIGNvbnRl
eHRSYW5nZSwgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIGRldGVjdGVkRGF0YVJhbmdlKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAxOTUzMTApCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjUsNiArMTI1LDEwIEBACiAjaW5jbHVkZSAiQXJjaGl2ZS5oIgogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoREFUQV9ERVRFQ1RJT04pCisjaW5jbHVkZSAiRGF0YURldGVjdGlvbi5oIgorI2VuZGlm
CisKICNpZiBQTEFURk9STShJT1MpCiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCiAjaW5jbHVk
ZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCkBAIC0yMjc3LDYgKzIyODEsMTIgQEAgdm9pZCBG
cmFtZUxvYWRlcjo6Y2hlY2tMb2FkQ29tcGxldGVGb3JUaAogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICBtX2NsaWVudC5kaXNwYXRjaERpZEZpbmlzaExvYWQoKTsKICAgICAg
ICAgICAgICAgICBsb2FkaW5nRXZlbnQgPSBBWE9iamVjdENhY2hlOjpBWExvYWRpbmdGaW5pc2hl
ZDsKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgICAgICAgICAgICAgaWYgKG1fZnJh
bWUuc2V0dGluZ3MoKS5kYXRhRGV0ZWN0b3JUeXBlcygpICE9IERhdGFEZXRlY3RvclR5cGVOb25l
KSB7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gZG9jdW1lbnRSYW5nZSA9IG1h
a2VSYW5nZShmaXJzdFBvc2l0aW9uSW5Ob2RlKG1fZnJhbWUuZG9jdW1lbnQoKS0+ZG9jdW1lbnRF
bGVtZW50KCkpLCBsYXN0UG9zaXRpb25Jbk5vZGUobV9mcmFtZS5kb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKSkpOworICAgICAgICAgICAgICAgICAgICBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RD
b250ZW50SW5SYW5nZShkb2N1bWVudFJhbmdlLCBtX2ZyYW1lLnNldHRpbmdzKCkuZGF0YURldGVj
dG9yVHlwZXMoKSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIC8vIE5vdGlmeSBhY2Nlc3NpYmlsaXR5LgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9TZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuaAkocmV2aXNpb24gMTk1MzEwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4K
IAorI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyNpbmNsdWRlICJEYXRhRGV0ZWN0aW9uLmgi
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250R2VuZXJpY0ZhbWls
aWVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCShyZXZpc2lvbiAxOTUzMTApCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiAr
MjI4LDcgQEAgYWdncmVzc2l2ZVRpbGVSZXRlbnRpb25FbmFibGVkIGluaXRpYWw9ZgogdGVtcG9y
YXJ5VGlsZUNvaG9ydFJldGVudGlvbkVuYWJsZWQgaW5pdGlhbD10cnVlCiAKIHVzZUltYWdlRG9j
dW1lbnRGb3JTdWJmcmFtZVBERiBpbml0aWFsPWZhbHNlCitkYXRhRGV0ZWN0b3JUeXBlcyB0eXBl
PURhdGFEZXRlY3RvclR5cGVzLCBpbml0aWFsPURhdGFEZXRlY3RvclR5cGVOb25lLCBjb25kaXRp
b25hbD1EQVRBX0RFVEVDVElPTgogCiAjIEFsbG93IFNvdXJjZUJ1ZmZlcnMgdG8gc3RvcmUgdXAg
dG8gMzA0TUIgZWFjaCwgZW5vdWdoIGZvciBhcHByb3hpbWF0ZWx5IGZpdmUgbWludXRlcwogIyBv
ZiAxMDgwcCB2aWRlbyBhbmQgc3RlcmVvIGF1ZGlvLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3BpL21hYy9EYXRhRGV0ZWN0b3JzU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3BpL21hYy9EYXRhRGV0ZWN0b3JzU1BJLmgJKHJldmlzaW9uIDE5NTMx
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9tYWMvRGF0YURldGVjdG9yc1NQSS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTIgQEAKIAogI2ltcG9ydCA8d3RmL1BsYXRm
b3JtLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCiAKICNpbXBvcnQgPFdlYkNvcmUvRGF0YURldGVj
dG9yc0NvcmVTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KIAorI2lmIFBM
QVRGT1JNKE1BQykKKwogI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAKIC8vIENhbid0IGlu
Y2x1ZGUgRERBY3Rpb24uaCBiZWNhdXNlIGFzIG9mIHRoaXMgd3JpdGluZyBpdCBpcyBhIHByaXZh
dGUgaGVhZGVyIHRoYXQgaW5jbHVkZXMgYSBub24tcHJpdmF0ZSBoZWFkZXIgd2l0aCBhbiAiIiBp
bmNsdWRlLgpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MzEwKQorKysgU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTYtMDEtMTkg
IEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgRGF0YURldGVjdG9ycyBpbiBXSyAoaU9TKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjk4OQorICAgICAgICByZGFyOi8vcHJvYmxlbS8y
Mjg1NTk2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGltcGxlbWVudGluZyBEYXRhIERldGVjdG9y
cyBzdXBwb3J0CisgICAgICAgIGluIFdLMi4gVGhlIHBhdGNoIGFkZHMgYSBuZXcgcHJvcGVydHkg
dG8gdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgb2JqZWN0IHRvIGluZGljYXRlIHRoZSB0eXBl
IG9mIGRldGVjdGlvbiBkZXNpcmVkIGFuZCBwcm9wYWdhdGVzCisgICAgICAgIHRvIHRoZSBXZWJQ
cm9jZXNzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisgICAgICAgICogU2hh
cmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKGZyb21XS0RhdGFEZXRlY3RvclR5cGVzKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IGluaXRXaXRoRnJhbWU6Y29uZmlndXJhdGlvbjpdKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24ubW06Cisg
ICAgICAgICgtW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gY29weVdpdGhab25lOl0pOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMpOgorCiAyMDE2LTAxLTE5ICBDb21taXQgUXVldWUgIDxj
b21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMTk1MzAwLgpJbmRleDogU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURl
ZmluZXMueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcJKHJldmlzaW9uIDE5NTMxMCkKKysrIFNvdXJjZS9X
ZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTEsNiArMTExLDcgQEAgRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UU1tzZGs9bWFj
b3N4Kl0gPQogRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UU19tYWNvc3hfV0lUSF9JTlRFUk5BTF9T
REtfWUVTID0gRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UUzsKIAogRU5BQkxFX0lPU19URVhUX0FV
VE9TSVpJTkdbc2RrPWlwaG9uZSpdID0gRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkc7CitFTkFC
TEVfREFUQV9ERVRFQ1RJT04gPSBFTkFCTEVfREFUQV9ERVRFQ1RJT047CiAKIEVOQUJMRV9JT1Nf
VE9VQ0hfRVZFTlRTW3Nkaz1pcGhvbmUqXSA9ICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFNfaW9z
X1dJVEhfSU5URVJOQUxfU0RLXyQoVVNFX0lOVEVSTkFMX1NESykpOwogRU5BQkxFX0lPU19UT1VD
SF9FVkVOVFNfaW9zX1dJVEhfSU5URVJOQUxfU0RLX1lFUyA9IEVOQUJMRV9JT1NfVE9VQ0hfRVZF
TlRTOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNE
ZWZpbml0aW9ucy5oCShyZXZpc2lvbiAxOTUzMTApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5
LDcgQEAKICAgICBtYWNybyhJbnNwZWN0b3JBdHRhY2htZW50U2lkZSwgaW5zcGVjdG9yQXR0YWNo
bWVudFNpZGUsIFVJbnQzMiwgdWludDMyX3QsIDApIFwKICAgICBtYWNybyhTdG9yYWdlQmxvY2tp
bmdQb2xpY3ksIHN0b3JhZ2VCbG9ja2luZ1BvbGljeSwgVUludDMyLCB1aW50MzJfdCwgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW46OkJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2UpIFwKICAgICBtYWNybyhK
YXZhU2NyaXB0UnVudGltZUZsYWdzLCBqYXZhU2NyaXB0UnVudGltZUZsYWdzLCBVSW50MzIsIHVp
bnQzMl90LCAwKSBcCisgICAgbWFjcm8oRGF0YURldGVjdG9yVHlwZXMsIGRhdGFEZXRlY3RvclR5
cGVzLCBVSW50MzIsIHVpbnQzMl90LCAwKSBcCiAgICAgXAogCiAjZGVmaW5lIEZPUl9FQUNIX1dF
QktJVF9ERUJVR19CT09MX1BSRUZFUkVOQ0UobWFjcm8pIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAxOTUzMTAp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzE0LDYgKzMxNCwyOCBAQCBzdGF0aWMgYm9vbCBzaG91bGRBbGxvd1Bp
Y3R1cmVJblBpY3R1cmVNCiAKICNlbmRpZgogCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQor
c3RhdGljIERhdGFEZXRlY3RvclR5cGVzIGZyb21XS0RhdGFEZXRlY3RvclR5cGVzKHVpbnQzMl90
IHR5cGVzKQoreworICAgIGlmIChzdGF0aWNfY2FzdDxXS0RhdGFEZXRlY3RvclR5cGVzPih0eXBl
cykgPT0gV0tEYXRhRGV0ZWN0b3JUeXBlTm9uZSkKKyAgICAgICAgcmV0dXJuIERhdGFEZXRlY3Rv
clR5cGVOb25lOworICAgIGlmIChzdGF0aWNfY2FzdDxXS0RhdGFEZXRlY3RvclR5cGVzPih0eXBl
cykgPT0gV0tEYXRhRGV0ZWN0b3JUeXBlQWxsKQorICAgICAgICByZXR1cm4gRGF0YURldGVjdG9y
VHlwZUFsbDsKKyAgICAKKyAgICB1aW50MzJfdCB2YWx1ZSA9IERhdGFEZXRlY3RvclR5cGVOb25l
OworICAgIGlmICh0eXBlcyAmIFdLRGF0YURldGVjdG9yVHlwZVBob25lTnVtYmVyKQorICAgICAg
ICB2YWx1ZSB8PSBEYXRhRGV0ZWN0b3JUeXBlUGhvbmVOdW1iZXI7CisgICAgaWYgKHR5cGVzICYg
V0tEYXRhRGV0ZWN0b3JUeXBlTGluaykKKyAgICAgICAgdmFsdWUgfD0gRGF0YURldGVjdG9yVHlw
ZUxpbms7CisgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcykKKyAgICAg
ICAgdmFsdWUgfD0gRGF0YURldGVjdG9yVHlwZUFkZHJlc3M7CisgICAgaWYgKHR5cGVzICYgV0tE
YXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCkKKyAgICAgICAgdmFsdWUgfD0gRGF0YURldGVj
dG9yVHlwZUNhbGVuZGFyRXZlbnQ7CisgICAgCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGFE
ZXRlY3RvclR5cGVzPih2YWx1ZSk7Cit9CisjZW5kaWYKKwogLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoRnJhbWU6KENHUmVjdClmcmFtZSBjb25maWd1cmF0aW9uOihXS1dlYlZpZXdDb25maWd1cmF0
aW9uICopY29uZmlndXJhdGlvbgogewogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhG
cmFtZTpmcmFtZV0pKQpAQCAtMzgzLDYgKzQwNSw5IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0
aEZyYW1lOihDR1JlY3QpZnIKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5jZVZhbHVl
cygpLnNldChXZWJLaXQ6OldlYlByZWZlcmVuY2VzS2V5OjppbnZpc2libGVBdXRvcGxheU5vdFBl
cm1pdHRlZEtleSgpLCBXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmU6OlZhbHVlKCEhW19jb25m
aWd1cmF0aW9uIF9pbnZpc2libGVBdXRvcGxheU5vdFBlcm1pdHRlZF0pKTsKICAgICBwYWdlQ29u
ZmlndXJhdGlvbi0+cHJlZmVyZW5jZVZhbHVlcygpLnNldChXZWJLaXQ6OldlYlByZWZlcmVuY2Vz
S2V5OjptZWRpYURhdGFMb2Fkc0F1dG9tYXRpY2FsbHlLZXkoKSwgV2ViS2l0OjpXZWJQcmVmZXJl
bmNlc1N0b3JlOjpWYWx1ZSghIVtfY29uZmlndXJhdGlvbiBfbWVkaWFEYXRhTG9hZHNBdXRvbWF0
aWNhbGx5XSkpOwogI2VuZGlmCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgIHBhZ2VD
b25maWd1cmF0aW9uLT5wcmVmZXJlbmNlVmFsdWVzKCkuc2V0KFdlYktpdDo6V2ViUHJlZmVyZW5j
ZXNLZXk6OmRhdGFEZXRlY3RvclR5cGVzS2V5KCksIFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9y
ZTo6VmFsdWUoZnJvbVdLRGF0YURldGVjdG9yVHlwZXMoW19jb25maWd1cmF0aW9uIGRhdGFEZXRl
Y3RvclR5cGVzXSkpKTsKKyNlbmRpZgogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpCiAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnByZWZlcmVuY2VWYWx1ZXMoKS5zZXQoV2ViS2l0
OjpXZWJQcmVmZXJlbmNlc0tleTo6YWxsb3dzQWlyUGxheUZvck1lZGlhUGxheWJhY2tLZXkoKSwg
V2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpWYWx1ZSghIVtfY29uZmlndXJhdGlvbiBhbGxv
d3NBaXJQbGF5Rm9yTWVkaWFQbGF5YmFja10pKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1
cmF0aW9uLmgJKHJldmlzaW9uIDE5NTMxMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2
ICs1MSwyNSBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBXS1NlbGVjdGlvbkdyCiB9IFdL
X0VOVU1fQVZBSUxBQkxFX0lPUyg4XzApOwogI2VuZGlmCiAKKy8qISBAZW51bSBXS0RhdGFEZXRl
Y3RvclR5cGVzCisgQGFic3RyYWN0IFRoZSB0eXBlIG9mIGRhdGEgZGV0ZWN0ZWQuCisgQGNvbnN0
YW50IFdLRGF0YURldGVjdG9yVHlwZU5vbmUgTm8gZGV0ZWN0aW9uIGlzIHBlcmZvcm1lZC4KKyBA
Y29uc3RhbnQgV0tEYXRhRGV0ZWN0b3JUeXBlUGhvbmVOdW1iZXIgUGhvbmUgbnVtYmVycyBhcmUg
ZGV0ZWN0ZWQgYW5kIHR1cm5lZCBpbnRvIGxpbmtzLgorIEBjb25zdGFudCBXS0RhdGFEZXRlY3Rv
clR5cGVMaW5rIFVSTHMgaW4gdGV4dCBhcmUgZGV0ZWN0ZWQgYW5kIHR1cm5lZCBpbnRvIGxpbmtz
LgorIEBjb25zdGFudCBXS0RhdGFEZXRlY3RvclR5cGVBZGRyZXNzIEFkZHJlc3NlcyBhcmUgZGV0
ZWN0ZWQgYW5kIHR1cm5lZCBpbnRvIGxpbmtzLgorIEBjb25zdGFudCBXS0RhdGFEZXRlY3RvclR5
cGVDYWxlbmRhckV2ZW50IERhdGVzIGFuZCB0aW1lcyB0aGF0IGFyZSBpbiB0aGUgZnV0dXJlIGFy
ZSBkZXRlY3RlZCBhbmQgdHVybmVkIGludG8gbGlua3MuCisgQGNvbnN0YW50IFdLRGF0YURldGVj
dG9yVHlwZUFsbCBBbGwgb2YgdGhlIGFib3ZlIGRhdGEgdHlwZXMgYXJlIHR1cm5lZCBpbnRvIGxp
bmtzIHdoZW4gZGV0ZWN0ZWQuIENob29zaW5nIHRoaXMgdmFsdWUgd2lsbAorIGF1dG9tYXRpY2Fs
bHkgaW5jbHVkZSBhbnkgbmV3IGRldGVjdGlvbiB0eXBlIHRoYXQgaXMgYWRkZWQuCisgKi8KK3R5
cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBXS0RhdGFEZXRlY3RvclR5cGVzKSB7CisgICAg
V0tEYXRhRGV0ZWN0b3JUeXBlTm9uZSA9IDAsCisgICAgV0tEYXRhRGV0ZWN0b3JUeXBlUGhvbmVO
dW1iZXIgPSAxIDw8IDAsCisgICAgV0tEYXRhRGV0ZWN0b3JUeXBlTGluayA9IDEgPDwgMSwKKyAg
ICBXS0RhdGFEZXRlY3RvclR5cGVBZGRyZXNzID0gMSA8PCAyLAorICAgIFdLRGF0YURldGVjdG9y
VHlwZUNhbGVuZGFyRXZlbnQgPSAxIDw8IDMsCisgICAgV0tEYXRhRGV0ZWN0b3JUeXBlQWxsID0g
TlNVSW50ZWdlck1heAorfSBXS19FTlVNX0FWQUlMQUJMRShXS19NQUNfVEJBLCBXS19JT1NfVEJB
KTsKKwogLyohIEEgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBvYmplY3QgaXMgYSBjb2xsZWN0aW9u
IG9mIHByb3BlcnRpZXMgd2l0aAogIHdoaWNoIHRvIGluaXRpYWxpemUgYSB3ZWIgdmlldy4KICBA
aGVscHMgQ29udGFpbnMgcHJvcGVydGllcyB1c2VkIHRvIGNvbmZpZ3VyZSBhIEBsaW5rIFdLV2Vi
VmlldyBAL2xpbmsuCkBAIC05Myw2ICsxMTIsMTUgQEAgV0tfQ0xBU1NfQVZBSUxBQkxFKDEwXzEw
LCA4XzApCiAgKi8KIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGFsbG93c0FpclBsYXlGb3JN
ZWRpYVBsYXliYWNrIFdLX0FWQUlMQUJMRSgxMF8xMSwgOV8wKTsKIAorLyohIEBhYnN0cmFjdCBB
biBlbnVtIHZhbHVlIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgZGF0YSBkZXRlY3Rpb24gZGVzaXJl
ZC4KKyBAZGlzY3Vzc2lvbiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBXS0RhdGFEZXRlY3RvclR5cGVO
b25lLgorIEFuIGV4YW1wbGUgb2YgaG93IHRoaXMgcHJvcGVydHkgbWF5IGFmZmVjdCB0aGUgY29u
dGVudCBsb2FkZWQgaW4gdGhlIFdLV2ViVmlldyBpcyB0aGF0IGNvbnRlbnQgbGlrZQorICdWaXNp
dCBhcHBsZS5jb20gb24gSnVseSA0dGggb3IgY2FsbCAxIDgwMCA1NTUtNTU0NScgd2lsbCBiZSB0
cmFuc2Zvcm1lZCB0byBhZGQgbGlua3MgYXJvdW5kICdhcHBsZS5jb20nLCAnSnVseSA0dGgnIGFu
ZCAnMSA4MDAgNTU1LTU1NDUnCisgaWYgdGhlIGRhdGFEZXRlY3RvclR5cGVzIHByb3BlcnR5IGlz
IHNldCB0byBXS0RhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlciB8IFdLRGF0YURldGVjdG9yVHlw
ZUxpbmsgfCBXS0RhdGFEZXRlY3RvclR5cGVDYWxlbmRhckV2ZW50LgorCisgKi8KK0Bwcm9wZXJ0
eSAobm9uYXRvbWljKSBXS0RhdGFEZXRlY3RvclR5cGVzIGRhdGFEZXRlY3RvclR5cGVzIFdLX0FW
QUlMQUJMRShXS19NQUNfVEJBLCBXS19JT1NfVEJBKTsKKwogI2lmIFRBUkdFVF9PU19JUEhPTkUK
IC8qISBAYWJzdHJhY3QgQSBCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciBIVE1MNSB2
aWRlb3MgcGxheSBpbmxpbmUKICAoWUVTKSBvciB1c2UgdGhlIG5hdGl2ZSBmdWxsLXNjcmVlbiBj
b250cm9sbGVyIChOTykuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld0NvbmZpZ3VyYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1tCShyZXZpc2lvbiAx
OTUzMTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5OCw2ICsxOTgsOSBAQCAtIChpZClj
b3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUKICAgICBjb25maWd1cmF0aW9uLT5fc2VydmljZUNv
bnRyb2xzRW5hYmxlZCA9IHNlbGYtPl9zZXJ2aWNlQ29udHJvbHNFbmFibGVkOwogICAgIGNvbmZp
Z3VyYXRpb24tPl9pbWFnZUNvbnRyb2xzRW5hYmxlZCA9IHNlbGYtPl9pbWFnZUNvbnRyb2xzRW5h
YmxlZDsKICNlbmRpZgorI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBjb25maWd1cmF0
aW9uLT5fZGF0YURldGVjdG9yVHlwZXMgPSBzZWxmLT5fZGF0YURldGVjdG9yVHlwZXM7CisjZW5k
aWYKICNpZiBFTkFCTEUoV0lSRUxFU1NfVEFSR0VUX1BMQVlCQUNLKQogICAgIGNvbmZpZ3VyYXRp
b24tPl9hbGxvd3NBaXJQbGF5Rm9yTWVkaWFQbGF5YmFjayA9IHNlbGYtPl9hbGxvd3NBaXJQbGF5
Rm9yTWVkaWFQbGF5YmFjazsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTk1MzEwKQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTksNiArMjE5LDEwIEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2Fn
ZXMuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorI2luY2x1ZGUgPFdl
YkNvcmUvRGF0YURldGVjdGlvbi5oPgorI2VuZGlmCisKICNpZiBFTkFCTEUoVklERU8pICYmIFVT
RShHU1RSRUFNRVIpCiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVBsYXllclJlcXVlc3RJbnN0YWxs
TWlzc2luZ1BsdWdpbnNDYWxsYmFjay5oPgogI2VuZGlmCkBAIC0yOTM1LDYgKzI5MzksOSBAQCB2
b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlCiAgICAgc2V0dGluZ3Muc2V0
VXNlSW1hZ2VEb2N1bWVudEZvclN1YmZyYW1lUERGKHRydWUpOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoREFUQV9ERVRFQ1RJT04pCisgICAgc2V0dGluZ3Muc2V0RGF0YURldGVjdG9yVHlwZXMoc3Rh
dGljX2Nhc3Q8RGF0YURldGVjdG9yVHlwZXM+KHN0b3JlLmdldFVJbnQzMlZhbHVlRm9yS2V5KFdl
YlByZWZlcmVuY2VzS2V5OjpkYXRhRGV0ZWN0b3JUeXBlc0tleSgpKSkpOworI2VuZGlmCiAjaWYg
RU5BQkxFKEdBTUVQQUQpCiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5zZXRHYW1lcGFkc0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZl
cmVuY2VzS2V5OjpnYW1lcGFkc0VuYWJsZWRLZXkoKSkpOwogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxOTUzMTApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNi0wMS0xOSAgRW5yaWNhIENhc3Vj
Y2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBEYXRhRGV0
ZWN0b3JzIGluIFdLIChpT1MpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUyOTg5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIyODU1OTYwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGZlYXR1
cmUgZGVmaW5pdGlvbiBmb3IgZGF0YSBkZXRlY3Rpb24uCisKKyAgICAgICAgKiBDb25maWd1cmF0
aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzoKKwogMjAxNi0wMS0xOSAgQ29tbWl0IFF1ZXVl
ICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjE5NTMwMC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25zL0Zl
YXR1cmVEZWZpbmVzLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0Nv
bmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCShyZXZpc2lvbiAxOTUzMTApCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZp
Zwkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSw3IEBAIEVOQUJMRV9NQUNfR0VTVFVSRV9F
VkVOVFNbc2RrPW1hY29zeCpdID0KIEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFNfbWFjb3N4X1dJ
VEhfSU5URVJOQUxfU0RLX1lFUyA9IEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFM7CiAKIEVOQUJM
RV9JT1NfVEVYVF9BVVRPU0laSU5HW3Nkaz1pcGhvbmUqXSA9IEVOQUJMRV9JT1NfVEVYVF9BVVRP
U0laSU5HOworRU5BQkxFX0RBVEFfREVURUNUSU9OID0gRU5BQkxFX0RBVEFfREVURUNUSU9OOwog
CiBFTkFCTEVfSU9TX1RPVUNIX0VWRU5UU1tzZGs9aXBob25lKl0gPSAkKEVOQUJMRV9JT1NfVE9V
Q0hfRVZFTlRTX2lvc19XSVRIX0lOVEVSTkFMX1NES18kKFVTRV9JTlRFUk5BTF9TREspKTsKIEVO
QUJMRV9JT1NfVE9VQ0hfRVZFTlRTX2lvc19XSVRIX0lOVEVSTkFMX1NES19ZRVMgPSBFTkFCTEVf
SU9TX1RPVUNIX0VWRU5UUzsK
</data>
<flag name="review"
          id="294241"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269407</attachid>
            <date>2016-01-20 17:02:25 -0800</date>
            <delta_ts>2016-01-20 19:25:25 -0800</delta_ts>
            <desc>Patch including detection.</desc>
            <filename>ddwk2-part2.txt</filename>
            <type>text/plain</type>
            <size>24478</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE2LTAxLTIwICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgdGhlIGxvZ2ljIHRvIHBlcmZvcm0gZGF0YSBkZXRlY3Rpb24gYW5kIG1vZGlmeQor
ICAgICAgICB0aGUgZG9tIGJ5IGFkZGluZyBkYXRhIGRldGVjdG9yIGxpbmtzIGFzIGFwcHJvcHJp
YXRlLgorICAgICAgICBUaGUgZGF0YSBkZXRlY3RvciByZXN1bHRzIHJldHVybmVkIGJ5IGRldGVj
dENvbnRlbnRJblJhbmdlIGFyZQorICAgICAgICBzdG9yZWQgaW4gdGhlIEZyYW1lIG9iamVjdC4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oOgorICAgICAgICAqIGVk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKC1bTlNJbmRleFBhdGggZGF0
YURldGVjdG9yU3RyaW5nVmFsdWVdKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3VsdElzVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IpOgorICAgICAgICAoV2ViQ29y
ZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKToKKyAgICAgICAgKFdlYkNv
cmU6OmRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeSk6CisgICAgICAgIChXZWJDb3JlOjpidWls
ZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJ
blJhbmdlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6c2V0RGF0YURldGVjdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRh
dGFEZXRlY3Rpb25SZXN1bHRzKToKKwogMjAxNi0wMS0xOSAgRW5yaWNhIENhc3VjY2kgIDxlbnJp
Y2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBEYXRhRGV0ZWN0b3JzIGlu
IFdLIChpT1MpLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0
ZWN0aW9uLmgJKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgRERBY3Rpb25Db250ZXh0OworT0JK
Q19DTEFTUyBOU0FycmF5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDcgKzU0LDcg
QEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQo
Y29uc3QgSGl0VGVzdFJlc3VsdCYsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gs
IFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKTsKICNlbmRpZgotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIGRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNv
bnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBOU0FycmF5ICpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFu
Z2UsIERhdGFEZXRlY3RvclR5cGVzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJl
dmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVj
dGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNDkgQEAKICNpbXBvcnQgIlZpc2li
bGVVbml0cy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKIAorI2lmIFBMQVRGT1JNKElPUykK
KyNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3JlL0REQmluZGVyS2V5c19Qcml2YXRlLmg+CisjaW1w
b3J0IDxEYXRhRGV0ZWN0b3JzQ29yZS9ERFNjYW5uZXJSZXN1bHQuaD4KKyNpbXBvcnQgPERhdGFE
ZXRlY3RvcnNDb3JlL0REVVJMaWZpZXIuaD4KKyNpbXBvcnQgPERhdGFEZXRlY3RvcnNVSS9ERFVJ
QmFzZS5oPgorCitXVEZfRVhURVJOX0NfQkVHSU4KK05TU3RyaW5nICogRERVUkxTdHJpbmdGb3JS
ZXN1bHQoRERSZXN1bHRSZWYgY3VycmVudFJlc3VsdCwgTlNTdHJpbmcgKiByZXN1bHRJZGVudGlm
aWVyLCBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25UeXBlcyBpbmNsdWRpbmdUZWxHcm91
cHMsIE5TRGF0ZSAqIHJlZmVyZW5jZURhdGUsIE5TVGltZVpvbmUgKiByZWZlcmVuY2VUaW1lWm9u
ZSk7CitXVEZfRVhURVJOX0NfRU5ECisKK0BpbnRlcmZhY2UgTlNJbmRleFBhdGggKERERXh0ZW5z
aW9ucykKKy0gKE5TU3RyaW5nICopIGRhdGFEZXRlY3RvclN0cmluZ1ZhbHVlOworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gTlNJbmRleFBhdGggKERERXh0ZW5zaW9ucykKKworLSAoTlNTdHJpbmcg
KikgZGF0YURldGVjdG9yU3RyaW5nVmFsdWUKK3sKKyAgICBOU1VJbnRlZ2VyIGxlbmd0aCA9IFtz
ZWxmIGxlbmd0aF07CisgICAgCisgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICBjYXNlIDA6Cisg
ICAgICAgIHJldHVybiBAIiI7CisgICAgICAgIAorICAgIGNhc2UgMToKKyAgICAgICAgcmV0dXJu
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWx1IiwgW3NlbGYgaW5kZXhBdFBvc2l0aW9u
OjBdXTsKKworICAgIGNhc2UgMjoKKyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiJWx1LyVsdSIsICh1bnNpZ25lZCBsb25nKVtzZWxmIGluZGV4QXRQb3NpdGlvbjow
XSwgKHVuc2lnbmVkIGxvbmcpW3NlbGYgaW5kZXhBdFBvc2l0aW9uOjFdXTsKKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFy
cmF5PiBjb21wb25lbnRzID0gYWRvcHROUyhbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNp
dHk6bGVuZ3RoXSk7CisgICAgICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDAgOyBpIDwgbGVu
Z3RoIDsgaSsrKQorICAgICAgICAgICAgICAgIFtjb21wb25lbnRzIGFkZE9iamVjdDpbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVsdSIsICh1bnNpZ25lZCBsb25nKVtzZWxmIGluZGV4QXRQ
b3NpdGlvbjppXV1dOworICAgICAgICAgICAgcmV0dXJuIFtjb21wb25lbnRzIGNvbXBvbmVudHNK
b2luZWRCeVN0cmluZzpAIi8iXTsKKyAgICAgICAgfQorICAgIH0KK30KKworQGVuZAorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTEzOCw5ICsx
ODEsMzcyIEBAIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IERhdGFEZXRlY3Rpb24KICAgICBy
ZXR1cm4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UocG9zaXRpb24sIGNvbnRleHRSYW5n
ZSwgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIGRldGVjdGVkRGF0YVJhbmdlKTsKIH0KICNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCisgICAgCisjaWYgUExBVEZPUk0oSU9TKQorICAgIAorc3RhdGlj
IEJPT0wgcmVzdWx0SXNVUkwoRERSZXN1bHRSZWYgcmVzdWx0KQoreworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gTk87CisgICAgCisgICAgc3RhdGljIE5TU2V0ICp1cmxUeXBlcyA9
IFtbTlNTZXQgc2V0V2l0aE9iamVjdHM6IChOU1N0cmluZyAqKUREQmluZGVySHR0cFVSTEtleSwg
KE5TU3RyaW5nICopRERCaW5kZXJXZWJVUkxLZXksIChOU1N0cmluZyAqKUREQmluZGVyTWFpbFVS
TEtleSwgKE5TU3RyaW5nICopRERCaW5kZXJHZW5lcmljVVJMS2V5LCAoTlNTdHJpbmcgKilEREJp
bmRlckVtYWlsS2V5LCBuaWxdIHJldGFpbl07CisgICAgcmV0dXJuIFt1cmxUeXBlcyBjb250YWlu
c09iamVjdDooTlNTdHJpbmcgKilERFJlc3VsdEdldFR5cGUocmVzdWx0KV07Cit9CisKK3N0YXRp
YyBOU1N0cmluZyAqY29uc3RydWN0VVJMU3RyaW5nRm9yUmVzdWx0KEREUmVzdWx0UmVmIGN1cnJl
bnRSZXN1bHQsIE5TU3RyaW5nICpyZXN1bHRJZGVudGlmaWVyLCBOU0RhdGUgKiByZWZlcmVuY2VE
YXRlLCBOU1RpbWVab25lICogcmVmZXJlbmNlVGltZVpvbmUsIERhdGFEZXRlY3RvclR5cGVzIGRl
dGVjdGlvblR5cGVzKQoreworICAgIGlmICghRERSZXN1bHRIYXNQcm9wZXJ0aWVzKGN1cnJlbnRS
ZXN1bHQsIEREUmVzdWx0UHJvcGVydHlQYXNzaXZlRGlzcGxheSkpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgCisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uVHlwZXMgcGhvbmVU
eXBlcyA9IChkZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlcikgPyBE
RFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25SZWd1bGFyIDogRERVUkxpZmllclBob25lTnVt
YmVyRGV0ZWN0aW9uTm9uZTsKKyAgICBERFJlc3VsdENhdGVnb3J5IGNhdGVnb3J5ID0gRERSZXN1
bHRHZXRDYXRlZ29yeShjdXJyZW50UmVzdWx0KTsKKyAgICBDRlN0cmluZ1JlZiB0eXBlID0gRERS
ZXN1bHRHZXRUeXBlKGN1cnJlbnRSZXN1bHQpOworICAgIAorICAgIGlmICgoKGRldGVjdGlvblR5
cGVzICYgRGF0YURldGVjdG9yVHlwZUFkZHJlc3MpICYmIChERFJlc3VsdENhdGVnb3J5QWRkcmVz
cyA9PSBjYXRlZ29yeSkpCisgICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0
b3JUeXBlVHJhY2tpbmdOdW1iZXIpICYmIChDRlN0cmluZ0NvbXBhcmUoRERCaW5kZXJUcmFja2lu
Z051bWJlcktleSwgdHlwZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pKQorICAgICAgICB8fCAo
KGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZUZsaWdodCkgJiYgKENGU3RyaW5nQ29t
cGFyZShEREJpbmRlckZsaWdodEluZm9ybWF0aW9uS2V5LCB0eXBlLCAwKSA9PSBrQ0ZDb21wYXJl
RXF1YWxUbykpCisgICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBl
UGhvbmVOdW1iZXIpICYmIChERFJlc3VsdENhdGVnb3J5UGhvbmVOdW1iZXIgPT0gY2F0ZWdvcnkp
KQorICAgICAgICB8fCAoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZUxpbmspICYm
IHJlc3VsdElzVVJMKGN1cnJlbnRSZXN1bHQpKSkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IEREVVJMU3RyaW5nRm9yUmVzdWx0KGN1cnJlbnRSZXN1bHQsIHJlc3VsdElkZW50aWZpZXIsIHBo
b25lVHlwZXMsIHJlZmVyZW5jZURhdGUsIHJlZmVyZW5jZVRpbWVab25lKTsKKyAgICB9CisgICAg
aWYgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5cGVDYWxlbmRhckV2ZW50KSAmJiAo
RERSZXN1bHRDYXRlZ29yeUNhbGVuZGFyRXZlbnQgPT0gY2F0ZWdvcnkpKSB7CisgICAgICAgIGlm
ICghRERSZXN1bHRJc1Bhc3REYXRlKGN1cnJlbnRSZXN1bHQsIChDRkRhdGVSZWYpcmVmZXJlbmNl
RGF0ZSwgKENGVGltZVpvbmVSZWYpcmVmZXJlbmNlVGltZVpvbmUpKQorICAgICAgICAgICAgcmV0
dXJuIEREVVJMU3RyaW5nRm9yUmVzdWx0KGN1cnJlbnRSZXN1bHQsIHJlc3VsdElkZW50aWZpZXIs
IHBob25lVHlwZXMsIHJlZmVyZW5jZURhdGUsIHJlZmVyZW5jZVRpbWVab25lKTsKKyAgICB9Cisg
ICAgcmV0dXJuIG5pbDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5j
aG9yKE5vZGUgKm5vZGUsIE5vZGUgKm5vZGVQYXJlbnQpCit7CisgICAgLy8gUGVyZm9ybSBhIGRl
cHRoLWZpcnN0IHNlYXJjaCBmb3IgYW5jaG9yIG5vZGVzLCB3aGljaCBoYXZlIHRoZSBERFVSTFNj
aGVtZSBhdHRyaWJ1dGUgc2V0IHRvIHRydWUsCisgICAgLy8gdGFrZSB0aGVpciBjaGlsZHJlbiBh
bmQgaW5zZXJ0IHRoZW0gYmVmb3JlIHRoZSBhbmNob3IsCisgICAgLy8gYW5kIHRoZW4gcmVtb3Zl
IHRoZSBhbmNob3IuCisgICAgCisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgQk9PTCBub2RlSXNEREFuY2hvciA9IGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkg
JiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShERFVSTFNjaGVtZSkgPT0g
InRydWUiOworICAgIAorICAgIFJlZlB0cjxOb2RlTGlzdD4gY2hpbGRyZW4gPSBub2RlLT5jaGls
ZE5vZGVzKCk7CisgICAgdW5zaWduZWQgY2hpbGRDb3VudCA9IGNoaWxkcmVuLT5sZW5ndGgoKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgeworICAgICAgICBO
b2RlICpjaGlsZCA9IGNoaWxkcmVuLT5pdGVtKGkpOworICAgICAgICBpZiAoaXM8RWxlbWVudD4o
KmNoaWxkKSkKKyAgICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihjaGlsZCwg
bm9kZSk7CisgICAgfQorICAgIAorICAgIGlmIChub2RlSXNEREFuY2hvciAmJiBub2RlUGFyZW50
KSB7CisgICAgICAgIGNoaWxkcmVuID0gbm9kZS0+Y2hpbGROb2RlcygpOworICAgICAgICBjaGls
ZENvdW50ID0gY2hpbGRyZW4tPmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgLy8gSXRlcmF0
ZSBvdmVyIHRoZSBjaGlsZHJlbiBhbmQgbW92ZSB0aGVtIGFsbCBvbnRvIHRoZSBzYW1lIGxldmVs
IGFzIHRoaXMgYW5jaG9yLgorICAgICAgICAvLyBSZW1vdmUgdGhlIGFuY2hvciBhZnRlcndhcmRz
LgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgeworICAg
ICAgICAgICAgTm9kZSAqY2hpbGQgPSBjaGlsZHJlbi0+aXRlbSgwKTsgLy8gY2hpbGRyZW4gY2hh
bmdlIGR1ZSB0byBpbnNlcnRpb24sIGFsd2F5cyB1c2UgaWR4IDAKKyAgICAgICAgICAgIG5vZGVQ
YXJlbnQtPmluc2VydEJlZm9yZShjaGlsZCwgbm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7Cisg
ICAgICAgIH0KKyAgICAgICAgbm9kZVBhcmVudC0+cmVtb3ZlQ2hpbGQobm9kZSwgQVNTRVJUX05P
X0VYQ0VQVElPTik7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBzZWFyY2hGb3JMaW5rUmVtb3Zp
bmdFeGlzdGluZ0RETGlua3MoTm9kZSogc3RhcnROb2RlLCBOb2RlKiBlbmROb2RlKQoreworICAg
IE5vZGUgKm5vZGUgPSBzdGFydE5vZGU7CisgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgCisg
ICAgICAgIGlmIChpczxIVE1MQW5jaG9yRWxlbWVudD4oKm5vZGUpKSB7CisgICAgICAgICAgICBp
ZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShERFVSTFNjaGVtZSkgIT0g
InRydWUiKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmVtb3Zl
UmVzdWx0TGlua3NGcm9tQW5jaG9yKG5vZGUsIG5vZGUtPnBhcmVudEVsZW1lbnQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChub2RlID09IGVuZE5vZGUpIHsKKyAgICAgICAg
ICAgIC8vIElmIHdlIGZvdW5kIHRoZSBlbmQgbm9kZSBhbmQgbm8gbGluaywgcmV0dXJuIGZhbHNl
IHVubGVzcyBhbiBhbmNlc3RvciBub2RlIGlzIGEgbGluay4KKyAgICAgICAgICAgIC8vIFRoZSBv
bmx5IGFuY2VzdG9ycyBub3QgdGVzdGVkIGF0IHRoaXMgcG9pbnQgYXJlIGluIHRoZSBkaXJlY3Qg
bGluZSBmcm9tIHNlbGYncyBwYXJlbnQgdG8gdGhlIHRvcC4KKyAgICAgICAgICAgIG5vZGUgPSBz
dGFydE5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIHdoaWxlIChub2RlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5nZXRBdHRyaWJ1dGUoRERV
UkxTY2hlbWUpICE9ICJ0cnVlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3Iobm9kZSwg
bm9kZS0+cGFyZW50RWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVmUHRyPE5vZGVM
aXN0PiBjaGlsZE5vZGVzID0gbm9kZS0+Y2hpbGROb2RlcygpOworICAgICAgICBpZiAoY2hpbGRO
b2Rlcy0+bGVuZ3RoKCkpCisgICAgICAgICAgICBub2RlID0gY2hpbGROb2Rlcy0+aXRlbSgwKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBOb2RlICpuZXdOb2RlID0gbm9kZS0+bmV4dFNp
YmxpbmcoKTsKKyAgICAgICAgICAgIE5vZGUgKnBhcmVudE5vZGUgPSBub2RlOworICAgICAgICAg
ICAgd2hpbGUgKCFuZXdOb2RlKSB7CisgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVu
dE5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcmVudE5vZGUpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBuZXdOb2Rl
ID0gcGFyZW50Tm9kZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG5vZGUgPSBuZXdOb2RlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
IAotdm9pZCBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+
JiwgRGF0YURldGVjdG9yVHlwZXMpCitzdGF0aWMgTlNTdHJpbmcgKmRhdGFEZXRlY3RvclR5cGVG
b3JDYXRlZ29yeShERFJlc3VsdENhdGVnb3J5IGNhdGVnb3J5KQogeworICAgIHN3aXRjaCAoY2F0
ZWdvcnkpIHsKKyAgICBjYXNlIEREUmVzdWx0Q2F0ZWdvcnlQaG9uZU51bWJlcjoKKyAgICAgICAg
cmV0dXJuIEAidGVsZXBob25lIjsKKyAgICBjYXNlIEREUmVzdWx0Q2F0ZWdvcnlMaW5rOgorICAg
ICAgICByZXR1cm4gQCJsaW5rIjsKKyAgICBjYXNlIEREUmVzdWx0Q2F0ZWdvcnlBZGRyZXNzOgor
ICAgICAgICByZXR1cm4gQCJhZGRyZXNzIjsKKyAgICBjYXNlIEREUmVzdWx0Q2F0ZWdvcnlDYWxl
bmRhckV2ZW50OgorICAgICAgICByZXR1cm4gQCJjYWxlbmRhci1ldmVudCI7CisgICAgY2FzZSBE
RFJlc3VsdENhdGVnb3J5TWlzYzoKKyAgICAgICAgcmV0dXJuIEAibWlzYyI7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIEAiIjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGJ1aWxkUXVl
cnkoRERTY2FuUXVlcnlSZWYgc2NhblF1ZXJ5LCBSYW5nZSogY29udGV4dFJhbmdlKQoreworICAg
IC8vIE9uY2Ugd2UncmUgb3ZlciB0aGlzIG51bWJlciBvZiBmcmFnbWVudHMsIHN0b3AgYXQgdGhl
IGZpcnN0IGhhcmQgYnJlYWsuCisgICAgY29uc3QgQ0ZJbmRleCBtYXhGcmFnbWVudFdpdGhIYXJk
QnJlYWsgPSAxMDAwOworICAgIC8vIE9uY2Ugd2UncmUgb3ZlciB0aGlzIG51bWJlciBvZiBmcmFn
bWVudHMsIHdlIHN0b3AgYXQgdGhlIGxpbmUuCisgICAgY29uc3QgQ0ZJbmRleCBtYXhGcmFnbWVu
dFdpdGhMaW5lYnJlYWsgPSA1MDAwOworICAgIC8vIE9uY2Ugd2UncmUgb3ZlciB0aGlzIG51bWJl
ciBvZiBmcmFnbWVudHMsIHdlIHN0b3AgYXQgdGhlIHNwYWNlLgorICAgIGNvbnN0IENGSW5kZXgg
bWF4RnJhZ21lbnRTcGFjZSA9IDEwMDAwOworCisgICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgd2hpdGVT
cGFjZXNTZXQgPSBDRkNoYXJhY3RlclNldEdldFByZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0V2hp
dGVzcGFjZUFuZE5ld2xpbmUpOworICAgIENGQ2hhcmFjdGVyU2V0UmVmIG5ld0xpbmVzU2V0ID0g
Q0ZDaGFyYWN0ZXJTZXRHZXRQcmVkZWZpbmVkKGtDRkNoYXJhY3RlclNldE5ld2xpbmUpOworICAg
IAorICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2U7CisgICAgQ0ZJbmRleCBpdGVyYXRvckNvdW50
ID0gMDsKKyAgICBDRkluZGV4IGZyYWdtZW50Q291bnQgPSAwOworICAgIAorICAgIC8vIEJ1aWxk
IHRoZSBzY2FuIHF1ZXJ5IGFkZGluZyBzZXBhcmF0b3JzLgorICAgIC8vIEZvciBlYWNoIGZyYWdt
ZW50IHRoZSBpdGVyYXRvciBpbmNyZW1lbnQgaXMgc3RvcmVkIGFzIG1ldGFkYXRhLgorICAgIGZv
ciAoVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKGNvbnRleHRSYW5nZSk7ICFpdGVyYXRvci5hdEVuZCgp
OyBpdGVyYXRvci5hZHZhbmNlKCksIGl0ZXJhdG9yQ291bnQrKykgeworICAgICAgICBzaXplX3Qg
Y3VycmVudFRleHRMZW5ndGggPSBpdGVyYXRvci50ZXh0KCkubGVuZ3RoKCk7CisgICAgICAgIGlm
ICghY3VycmVudFRleHRMZW5ndGgpIHsKKyAgICAgICAgICAgIEREU2NhblF1ZXJ5QWRkU2VwYXJh
dG9yKHNjYW5RdWVyeSwgRERUZXh0Q29hbGVzY2luZ1R5cGVIYXJkQnJlYWspOworICAgICAgICAg
ICAgaWYgKGl0ZXJhdG9yQ291bnQgPiBtYXhGcmFnbWVudFdpdGhIYXJkQnJlYWspCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBUZXN0IGZvciB3aGl0ZSBzcGFjZSBub2Rlcywgd2UncmUgY29hbGVzY2luZyB0aGVtLgor
ICAgICAgICBjb25zdCBVbmlDaGFyICpjdXJyZW50Q2hhclB0ciA9IGl0ZXJhdG9yLnRleHQoKS51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICAgICAgCisgICAgICAgIEJPT0wgY29udGFpbnNP
bmx5V2hpdGVTcGFjZSA9IFlFUzsKKyAgICAgICAgQk9PTCBoYXNUYWIgPSBOTzsKKyAgICAgICAg
Qk9PTCBoYXNOZXdsaW5lID0gTk87CisgICAgICAgIGludCBuYnNwQ291bnQgPSAwOworICAgICAg
ICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjdXJyZW50VGV4dExlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICBpZiAoIUNGQ2hhcmFjdGVyU2V0SXNDaGFyYWN0ZXJNZW1iZXIod2hpdGVTcGFj
ZXNTZXQsICpjdXJyZW50Q2hhclB0cikpIHsKKyAgICAgICAgICAgICAgICBjb250YWluc09ubHlX
aGl0ZVNwYWNlID0gTk87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChDRkNoYXJhY3RlclNldElzQ2hhcmFjdGVyTWVt
YmVyKG5ld0xpbmVzU2V0LCAqY3VycmVudENoYXJQdHIpKQorICAgICAgICAgICAgICAgIGhhc05l
d2xpbmUgPSBZRVM7CisgICAgICAgICAgICBlbHNlIGlmICgqY3VycmVudENoYXJQdHIgPT0gJ1x0
JykKKyAgICAgICAgICAgICAgICBoYXNUYWIgPSBZRVM7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIE11bHRpcGxlIGNvbnNlY3V0aXZlIG5vbiBicmVha2FibGUgc3BhY2VzIGFyZSBtb3N0
IGxpa2VseSBzaW11bGF0ZWQgdGFicy4KKyAgICAgICAgICAgIGlmICgqY3VycmVudENoYXJQdHIg
PT0gMHhhMCkgeworICAgICAgICAgICAgICAgIGlmICgrK25ic3BDb3VudCA+IDIpCisgICAgICAg
ICAgICAgICAgICAgIGhhc1RhYiA9IFlFUzsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIG5ic3BDb3VudCA9IDA7CisKKyAgICAgICAgICAgIGN1cnJlbnRDaGFyUHRyKys7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNvbnRhaW5zT25seVdoaXRlU3BhY2UpIHsKKyAgICAgICAg
ICAgIGlmIChoYXNOZXdsaW5lKSB7CisgICAgICAgICAgICAgICAgRERTY2FuUXVlcnlBZGRMaW5l
QnJlYWsoc2NhblF1ZXJ5KTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3JDb3VudCA+IG1h
eEZyYWdtZW50V2l0aExpbmVicmVhaykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEREU2NhblF1ZXJ5QWRkU2VwYXJhdG9y
KHNjYW5RdWVyeSwgaGFzVGFiID8gRERUZXh0Q29hbGVzY2luZ1R5cGVUYWIgOiBERFRleHRDb2Fs
ZXNjaW5nVHlwZVNwYWNlKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3JDb3VudCA+IG1h
eEZyYWdtZW50U3BhY2UpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gY3VycmVudFRleHQgPSBhZG9wdENGKENGU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgaXRlcmF0b3IudGV4dCgpLnVwY29u
dmVydGVkQ2hhcmFjdGVycygpLCBpdGVyYXRvci50ZXh0KCkubGVuZ3RoKCkpKTsKKyAgICAgICAg
RERTY2FuUXVlcnlBZGRUZXh0RnJhZ21lbnQoc2NhblF1ZXJ5LCBjdXJyZW50VGV4dC5nZXQoKSwg
Q0ZSYW5nZU1ha2UoMCwgY3VycmVudFRleHRMZW5ndGgpLCAodm9pZCAqKWl0ZXJhdG9yQ291bnQs
IChERFRleHRGcmFnbWVudE1vZGUpMCwgRERUZXh0Q29hbGVzY2luZ1R5cGVOb25lKTsKKyAgICAg
ICAgZnJhZ21lbnRDb3VudCsrOworICAgIH0KIH0KIAorTlNBcnJheSAqRGF0YURldGVjdGlvbjo6
ZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGV0
ZWN0b3JUeXBlcyB0eXBlcykKK3sKKyAgICBSZXRhaW5QdHI8RERTY2FubmVyUmVmPiBzY2FubmVy
ID0gYWRvcHRDRihERFNjYW5uZXJDcmVhdGUoRERTY2FubmVyVHlwZVN0YW5kYXJkLCAwLCBudWxs
cHRyKSk7CisgICAgUmV0YWluUHRyPEREU2NhblF1ZXJ5UmVmPiBzY2FuUXVlcnkgPSBhZG9wdENG
KEREU2NhblF1ZXJ5Q3JlYXRlKE5VTEwpKTsKKyAgICBidWlsZFF1ZXJ5KHNjYW5RdWVyeS5nZXQo
KSwgY29udGV4dFJhbmdlLmdldCgpKTsKKyAgICAKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFk
ZCBhIHRpbWVvdXQgdG8gdGhpcyBjYWxsIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IHRha2UgdG9v
IG11Y2ggdGltZS4KKyAgICBpZiAoIUREU2Nhbm5lclNjYW5RdWVyeShzY2FubmVyLmdldCgpLCBz
Y2FuUXVlcnkuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFJldGFpblB0
cjxDRkFycmF5UmVmPiBzY2FubmVyUmVzdWx0cyA9IGFkb3B0Q0YoRERTY2FubmVyQ29weVJlc3Vs
dHNXaXRoT3B0aW9ucyhzY2FubmVyLmdldCgpLCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNG
b3JQYXNzaXZlVXNlIHwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zQ29hbGVzY2VTaWduYXR1
cmVzKSk7CisgICAgaWYgKCFzY2FubmVyUmVzdWx0cykKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAKKyAgICBDRkluZGV4IHJlc3VsdENvdW50ID0gQ0ZBcnJheUdldENvdW50KHNjYW5uZXJSZXN1
bHRzLmdldCgpKTsKKyAgICBpZiAoIXJlc3VsdENvdW50KQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIAorICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYWxsUmVzdWx0cyA9IGFkb3B0TlMo
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gaW5kZXhQYXRocyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0p
OworICAgIE5TSW50ZWdlciBjdXJyZW50VG9wTGV2ZWxJbmRleCA9IDA7CisKKyAgICAvLyBJdGVy
YXRlIHRocm91Z2ggdGhlIHNjYW5uZXIgcmVzdWx0cyB0byBmaW5kIHNpZ25hdHVyZXMgYW5kIGV4
dHJhY3QgYWxsIHRoZSBzdWJyZXN1bHRzIHdoaWxlCisgICAgLy8gcG9wdWxhdGluZyB0aGUgYXJy
YXkgb2YgaW5kZXggcGF0aHMgdG8gdXNlIGluIHRoZSBocmVmIG9mIHRoZSBhbmNob3JzIGJlaW5n
IGNyZWF0ZWQuCisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgcmVzdWx0Q291bnQ7IGkrKykg
eworICAgICAgICBERFJlc3VsdFJlZiByZXN1bHQgPSAoRERSZXN1bHRSZWYpQ0ZBcnJheUdldFZh
bHVlQXRJbmRleChzY2FubmVyUmVzdWx0cy5nZXQoKSwgaSk7CisgICAgICAgIE5TSW5kZXhQYXRo
ICppbmRleFBhdGggPSBbTlNJbmRleFBhdGggaW5kZXhQYXRoV2l0aEluZGV4OmN1cnJlbnRUb3BM
ZXZlbEluZGV4XTsKKyAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZShERFJlc3VsdEdldFR5cGUo
cmVzdWx0KSwgRERCaW5kZXJTaWduYXR1cmVCbG9ja0tleSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFs
VG8pIHsKKyAgICAgICAgICAgIENGQXJyYXlSZWYgc3VicmVzdWx0cyA9IEREUmVzdWx0R2V0U3Vi
UmVzdWx0cyhyZXN1bHQpOworICAgICAgICAgICAgW2FsbFJlc3VsdHMgYWRkT2JqZWN0c0Zyb21B
cnJheTooTlNBcnJheSAqKXN1YnJlc3VsdHNdOworICAgICAgICAgICAgCisgICAgICAgICAgICBm
b3IgKE5TVUludGVnZXIgaSA9IDAgOyBpIDwgWyhOU0FycmF5ICopc3VicmVzdWx0cyBjb3VudF0g
OyBpKyspCisgICAgICAgICAgICAgICAgW2luZGV4UGF0aHMgYWRkT2JqZWN0OltpbmRleFBhdGgg
aW5kZXhQYXRoQnlBZGRpbmdJbmRleDppXV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBbYWxsUmVzdWx0cyBhZGRPYmplY3Q6KGlkKXJlc3VsdF07CisgICAgICAgICAgICBbaW5kZXhQ
YXRocyBhZGRPYmplY3Q6aW5kZXhQYXRoXTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50VG9w
TGV2ZWxJbmRleCsrOworICAgIH0KKworICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiByZXN1bHRS
YW5nZXM7CisgICAgVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKGNvbnRleHRSYW5nZS5nZXQoKSk7Cisg
ICAgQ0ZJbmRleCBpdGVyYXRvckNvdW50ID0gMDsKKworICAgIHJlc3VsdENvdW50ID0gW2FsbFJl
c3VsdHMgY291bnRdOworICAgIAorICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkgb2Yg
dGhlIGV4cGFuZGVkIHJlc3VsdHMgdG8gY3JlYXRlIGEgdmVjdG9yIG9mIFJhbmdlIG9iamVjdHMg
dGhhdCBpbmRpY2F0ZQorICAgIC8vIHdoZXJlIHRoZSBET00gbmVlZHMgdG8gYmUgbW9kaWZpZWQu
CisgICAgLy8gRWFjaCByZXN1bHQgY2FuIGJlIGNvbnRhaW5lZCBhbGwgaW4gb25lIHRleHQgbm9k
ZSBvciBjYW4gc3BhbiBtdWx0aXBsZSB0ZXh0IG5vZGVzLgorICAgIGZvciAoQ0ZJbmRleCBpID0g
MDsgaSA8IHJlc3VsdENvdW50OyBpKyspIHsKKyAgICAgICAgRERSZXN1bHRSZWYgcmVzdWx0ID0g
KEREUmVzdWx0UmVmKVthbGxSZXN1bHRzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIEREUXVl
cnlSYW5nZSBxdWVyeVJhbmdlID0gRERSZXN1bHRHZXRRdWVyeVJhbmdlRm9yVVJMaWZpY2F0aW9u
KHJlc3VsdCk7CisgICAgICAgIENGSW5kZXggaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQgPSAo
Q0ZJbmRleClERFNjYW5RdWVyeUdldEZyYWdtZW50TWV0YURhdGEoc2NhblF1ZXJ5LmdldCgpLCBx
dWVyeVJhbmdlLnN0YXJ0LnF1ZXJ5SW5kZXgpOworICAgICAgICB3aGlsZSAoaXRlcmF0b3JDb3Vu
dCA8IGl0ZXJhdG9yVGFyZ2V0QWR2YW5jZUNvdW50KSB7CisgICAgICAgICAgICBpdGVyYXRvci5h
ZHZhbmNlKCk7CisgICAgICAgICAgICBpdGVyYXRvckNvdW50Kys7CisgICAgICAgIH0KKworICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOworICAgICAg
ICBSZWZQdHI8UmFuZ2U+IGVuZFJhbmdlID0gc3RhcnRSYW5nZTsKKyAgICAgICAgQ0ZJbmRleCBm
cmFnbWVudEluZGV4ID0gcXVlcnlSYW5nZS5zdGFydC5xdWVyeUluZGV4OworICAgICAgICB3aGls
ZSAoZnJhZ21lbnRJbmRleCA8IHF1ZXJ5UmFuZ2UuZW5kLnF1ZXJ5SW5kZXgpIHsKKyAgICAgICAg
ICAgIGZyYWdtZW50SW5kZXgrKzsKKyAgICAgICAgICAgIGl0ZXJhdG9yVGFyZ2V0QWR2YW5jZUNv
dW50ID0gKENGSW5kZXgpRERTY2FuUXVlcnlHZXRGcmFnbWVudE1ldGFEYXRhKHNjYW5RdWVyeS5n
ZXQoKSwgZnJhZ21lbnRJbmRleCk7CisgICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3JDb3VudCA8
IGl0ZXJhdG9yVGFyZ2V0QWR2YW5jZUNvdW50KSB7CisgICAgICAgICAgICAgICAgaXRlcmF0b3Iu
YWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGl0ZXJhdG9yQ291bnQrKzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVuZFJhbmdlID0gaXRlcmF0b3IucmFuZ2UoKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoc3RhcnRSYW5nZSA9PSBlbmRSYW5nZSkKKyAgICAgICAgICAgIHJlc3VsdFJh
bmdlcy5hcHBlbmQoVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShzdGFydFJhbmdlLmdldCgpLCBxdWVy
eVJhbmdlLnN0YXJ0Lm9mZnNldCwgcXVlcnlSYW5nZS5lbmQub2Zmc2V0IC0gcXVlcnlSYW5nZS5z
dGFydC5vZmZzZXQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0UmFuZ2VzLmFw
cGVuZChSYW5nZTo6Y3JlYXRlKHN0YXJ0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKSwgJnN0YXJ0UmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCksIGZtYXgoc3RhcnRSYW5nZS0+c3RhcnRPZmZzZXQoKSwgcXVl
cnlSYW5nZS5zdGFydC5vZmZzZXQpLCAmZW5kUmFuZ2UtPmVuZENvbnRhaW5lcigpLCBmbWF4KGVu
ZFJhbmdlLT5lbmRPZmZzZXQoKSwgcXVlcnlSYW5nZS5lbmQub2Zmc2V0KSkpOworICAgIH0KKyAg
ICAKKyAgICBDRlRpbWVab25lUmVmIHR6ID0gQ0ZUaW1lWm9uZUNvcHlEZWZhdWx0KCk7CisgICAg
TlNEYXRlICpyZWZlcmVuY2VEYXRlID0gW05TRGF0ZSBkYXRlXTsKKyAgICBUZXh0KiBsYXN0VGV4
dE5vZGVUb1VwZGF0ZSA9IG51bGxwdHI7CisgICAgU3RyaW5nIGxhc3ROb2RlQ29udGVudDsKKyAg
ICBzaXplX3QgY29udGVudE9mZnNldCA9IDA7CisgICAgRERRdWVyeU9mZnNldCBsYXN0TW9kaWZp
ZWRRdWVyeU9mZnNldCA9IEREUXVlcnlPZmZzZXRNYWtlRHVtbXkoKTsKKyAgICAKKyAgICAvLyBG
b3IgZWFjaCByZXN1bHQgYWRkIHRoZSBsaW5rLgorICAgIC8vIFNpbmNlIHRoZXJlIGNvdWxkIGJl
IG11bHRpcGxlIHJlc3VsdHMgaW4gdGhlIHNhbWUgdGV4dCBub2RlLCB0aGUgbm9kZSBpcyBvbmx5
IG1vZGlmaWVkIHdoZW4KKyAgICAvLyB3ZSBhcmUgYWJvdXQgdG8gcHJvY2VzcyBhIGRpZmZlcmVu
dCB0ZXh0IG5vZGUuCisgICAgZm9yIChDRkluZGV4IHJlc3VsdEluZGV4ID0gMDsgcmVzdWx0SW5k
ZXggPCByZXN1bHRDb3VudDsgcmVzdWx0SW5kZXgrKykgeworICAgICAgICBERFJlc3VsdFJlZiBj
b3JlUmVzdWx0ID0gKEREUmVzdWx0UmVmKVthbGxSZXN1bHRzIG9iamVjdEF0SW5kZXg6cmVzdWx0
SW5kZXhdOworICAgICAgICBERFF1ZXJ5UmFuZ2UgcXVlcnlSYW5nZSA9IEREUmVzdWx0R2V0UXVl
cnlSYW5nZUZvclVSTGlmaWNhdGlvbihjb3JlUmVzdWx0KTsKKyAgICAgICAgUmVmUHRyPFJhbmdl
PiByZXN1bHRSYW5nZSA9IHJlc3VsdFJhbmdlc1tyZXN1bHRJbmRleF07CisgICAgICAgIE5TU3Ry
aW5nICppZGVudGlmaWVyID0gW1tpbmRleFBhdGhzIG9iamVjdEF0SW5kZXg6cmVzdWx0SW5kZXhd
IGRhdGFEZXRlY3RvclN0cmluZ1ZhbHVlXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvcnJlc3BvbmRp
bmdVUkwgPSBjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoY29yZVJlc3VsdCwgaWRlbnRpZmll
ciwgcmVmZXJlbmNlRGF0ZSwgKE5TVGltZVpvbmUgKil0eiwgdHlwZXMpOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFjb3JyZXNwb25kaW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0
aW5nRERMaW5rcygmcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksICZyZXN1bHRSYW5nZS0+
ZW5kQ29udGFpbmVyKCkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAg
ICAvLyBDb21wYXJlIHRoZSBxdWVyeSBvZmZzZXRzIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnbyBi
YWNrd2FyZHMKKyAgICAgICAgaWYgKEREUXVlcnlPZmZzZXRDb21wYXJlKGxhc3RNb2RpZmllZFF1
ZXJ5T2Zmc2V0LCBxdWVyeVJhbmdlLnN0YXJ0KSA+PSAwKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgbGFzdE1vZGlmaWVkUXVlcnlPZmZzZXQgPSBxdWVyeVJhbmdlLmVuZDsKKwor
ICAgICAgICBmb3IgKFRleHRJdGVyYXRvciBpdChyZXN1bHRSYW5nZS5nZXQoKSk7ICFpdC5hdEVu
ZCgpOyBpdC5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIGlmICghaXQudGV4dCgpLmxlbmd0aCgp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gaXQucmFuZ2UoKTsKKyAgICAgICAgICAgIGlmICghaXM8VGV4
dD4ocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgTm9kZSogcGFyZW50Tm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpLnBh
cmVudE5vZGUoKTsKKyAgICAgICAgICAgIFRleHQmIGN1cnJlbnRUZXh0Tm9kZSA9IGRvd25jYXN0
PFRleHQ+KHJhbmdlLT5zdGFydENvbnRhaW5lcigpKTsKKyAgICAgICAgICAgIERvY3VtZW50JiBk
b2N1bWVudCA9IGN1cnJlbnRUZXh0Tm9kZS5kb2N1bWVudCgpOworICAgICAgICAgICAgU3RyaW5n
IHRleHROb2RlRGF0YTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGxhc3RUZXh0Tm9k
ZVRvVXBkYXRlICE9ICZjdXJyZW50VGV4dE5vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFz
dFRleHROb2RlVG9VcGRhdGUpCisgICAgICAgICAgICAgICAgICAgIGxhc3RUZXh0Tm9kZVRvVXBk
YXRlLT5zZXREYXRhKGxhc3ROb2RlQ29udGVudCk7CisgICAgICAgICAgICAgICAgY29udGVudE9m
ZnNldCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLT5zdGFydE9mZnNldCgpID4gMCkK
KyAgICAgICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLnN1YnN0
cmluZ0RhdGEoMCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIEFTU0VSVF9OT19FWENFUFRJT04pOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVu
dFRleHROb2RlLnN1YnN0cmluZ0RhdGEoY29udGVudE9mZnNldCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0
KCkgLSBjb250ZW50T2Zmc2V0LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKCF0ZXh0Tm9kZURhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAg
ICAgUmVmUHRyPE5vZGU+IG5ld05vZGUgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIHRleHROb2Rl
RGF0YSk7CisgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKG5ld05vZGUs
ICZjdXJyZW50VGV4dE5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgICAg
IGNvbnRlbnRPZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhY3R1YWwgYW5jaG9yIG5vZGUg
YW5kIGluc2VydCBpdCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgICAgICAgIHRleHRO
b2RlRGF0YSA9IGN1cnJlbnRUZXh0Tm9kZS5zdWJzdHJpbmdEYXRhKHJhbmdlLT5zdGFydE9mZnNl
dCgpLCByYW5nZS0+ZW5kT2Zmc2V0KCkgLSByYW5nZS0+c3RhcnRPZmZzZXQoKSwgQVNTRVJUX05P
X0VYQ0VQVElPTik7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IFRleHQ6OmNy
ZWF0ZShkb2N1bWVudCwgdGV4dE5vZGVEYXRhKTsKKyAgICAgICAgICAgIHBhcmVudE5vZGUtPmlu
c2VydEJlZm9yZShuZXdOb2RlLCAmY3VycmVudFRleHROb2RlLCBBU1NFUlRfTk9fRVhDRVBUSU9O
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUmVmUHRyPEhUTUxBbmNob3JFbGVtZW50PiBh
bmNob3JFbGVtZW50ID0gSFRNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAg
ICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRIcmVmKGNvcnJlc3BvbmRpbmdVUkwpOworICAgICAg
ICAgICAgYW5jaG9yRWxlbWVudC0+c2V0RGlyKCJsdHIiKTsKKyAgICAgICAgICAgIFJlZlB0cjxB
dHRyPiBjb2xvciA9IGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudE5vZGUpLT5nZXRBdHRyaWJ1dGVO
b2RlKCJjb2xvciIpOworICAgICAgICAgICAgaWYgKGNvbG9yKQorICAgICAgICAgICAgICAgIGFu
Y2hvckVsZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0ciwgY29sb3ItPnN0
eWxlKCktPmNzc1RleHQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFuY2hvckVsZW1l
bnQtPk5vZGU6OmFwcGVuZENoaWxkKG5ld05vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAg
ICAgICAgICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKGFuY2hvckVsZW1lbnQsICZjdXJyZW50
VGV4dE5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgLy8gQWRkIGEgc3Bl
Y2lhbCBhdHRyaWJ1dGUgdG8gbWFyayB0aGlzIFVSTGlmaWNhdGlvbiBhcyB0aGUgcmVzdWx0IG9m
IGRhdGEgZGV0ZWN0b3JzLgorICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRl
KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGtEYXRhRGV0ZWN0b3JzVVJMU2NoZW1lLCBudWxsQXRv
bSksICJ0cnVlIik7CisgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1dGUoUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwga0RhdGFEZXRlY3RvcnNBdHRyaWJ1dGVUeXBlS2V5LCBudWxs
QXRvbSksIGRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeShERFJlc3VsdEdldENhdGVnb3J5KGNv
cmVSZXN1bHQpKSk7CisgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1dGUoUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwga0RhdGFEZXRlY3RvcnNBdHRyaWJ1dGVSZXN1bHRLZXksIG51
bGxBdG9tKSwgaWRlbnRpZmllcik7CisgICAgICAgICAgICBjb250ZW50T2Zmc2V0ID0gcmFuZ2Ut
PmVuZE9mZnNldCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsYXN0Tm9kZUNvbnRlbnQg
PSBjdXJyZW50VGV4dE5vZGUuc3Vic3RyaW5nRGF0YShyYW5nZS0+ZW5kT2Zmc2V0KCksIGN1cnJl
bnRUZXh0Tm9kZS5sZW5ndGgoKSAtIHJhbmdlLT5lbmRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisgICAgICAgICAgICBsYXN0VGV4dE5vZGVUb1VwZGF0ZSA9ICZjdXJyZW50VGV4dE5v
ZGU7CisgICAgICAgIH0gICAgICAgIAorICAgIH0KKyAgICBpZiAobGFzdFRleHROb2RlVG9VcGRh
dGUpCisgICAgICAgIGxhc3RUZXh0Tm9kZVRvVXBkYXRlLT5zZXREYXRhKGxhc3ROb2RlQ29udGVu
dCk7CisgICAgCisgICAgcmV0dXJuIFtERFNjYW5uZXJSZXN1bHQgcmVzdWx0c0Zyb21Db3JlUmVz
dWx0czpzY2FubmVyUmVzdWx0cy5nZXQoKV07Cit9CisKKyNlbHNlCitOU0FycmF5ICpEYXRhRGV0
ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiwgRGF0YURldGVjdG9y
VHlwZXMpCit7CisgICAgcmV0dXJuIG5pbDsKK30KKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAkocmV2aXNpb24gMTk1MzE2KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNiArMTg1LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZnJhbWVTY2Fs
ZUZhY3RvcigpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JD
aGFuZ2VkKCk7CisgICAgICAgIAorI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICAgICAg
dm9pZCBzZXREYXRhRGV0ZWN0aW9uUmVzdWx0cyhOU0FycmF5ICpyZXN1bHRzKSB7IG1fZGF0YURl
dGVjdGlvblJlc3VsdHMgPSByZXN1bHRzOyB9CisgICAgICAgIE5TQXJyYXkgKmRhdGFEZXRlY3Rp
b25SZXN1bHRzKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhRGV0ZWN0aW9uUmVzdWx0cy5nZXQoKTsg
fQorI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgIGNvbnN0IFZpZXdwb3J0QXJn
dW1lbnRzJiB2aWV3cG9ydEFyZ3VtZW50cygpIGNvbnN0OwpAQCAtMjkyLDYgKzI5Nyw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEV2ZW50SGFu
ZGxlcj4gbV9ldmVudEhhbmRsZXI7CiAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxBbmlt
YXRpb25Db250cm9sbGVyPiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7CiAKKyNpZiBFTkFCTEUoREFU
QV9ERVRFQ1RJT04pCisgICAgICAgIFJldGFpblB0cjxOU0FycmF5PiBtX2RhdGFEZXRlY3Rpb25S
ZXN1bHRzOworI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICB2b2lkIGJldHRlckFw
cHJveGltYXRlTm9kZShjb25zdCBJbnRQb2ludCYgdGVzdFBvaW50LCBOb2RlUXVhbGlmaWVyLCBO
b2RlKiYgYmVzdCwgTm9kZSogZmFpbGVkTm9kZSwgSW50UG9pbnQmIGJlc3RQb2ludCwgSW50UmVj
dCYgYmVzdFJlY3QsIGNvbnN0IEludFJlY3QmIHRlc3RSZWN0KTsKICAgICAgICAgYm9vbCBoaXRU
ZXN0UmVzdWx0QXRWaWV3cG9ydExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHZpZXdwb3J0TG9j
YXRpb24sIEhpdFRlc3RSZXN1bHQmLCBJbnRQb2ludCYgY2VudGVyKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE5NTM5MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTAxLTIwICBFbnJpY2EgQ2FzdWNjaSAgPGVucmlj
YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERhdGFEZXRlY3RvcnMgaW4g
V0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tOgorICAgICAgICAoZnJvbVdLRGF0YURldGVjdG9yVHlwZXMpOiBDaGFuZ2Vk
IHBhcmFtZXRlciB0byB1aW50NjRfdCB0bworICAgICAgICBzdWNjZXNzZnVsbHkgY29tcGFyZSBh
Z2FpbnN0IFdLRGF0YURldGVjdG9yVHlwZUFsbC4KKwogMjAxNi0wMS0yMCAgQWxleCBDaHJpc3Rl
bnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBDTWFrZSBidWls
ZCBhZnRlciByMTk1MzAwLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUs
NyArMzE1LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkQWxsb3dQaWN0dXJlSW5QaWN0dXJlTQogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCi1zdGF0aWMgV2ViQ29yZTo6RGF0YURl
dGVjdG9yVHlwZXMgZnJvbVdLRGF0YURldGVjdG9yVHlwZXModWludDMyX3QgdHlwZXMpCitzdGF0
aWMgV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXMgZnJvbVdLRGF0YURldGVjdG9yVHlwZXModWlu
dDY0X3QgdHlwZXMpCiB7CiAgICAgaWYgKHN0YXRpY19jYXN0PFdLRGF0YURldGVjdG9yVHlwZXM+
KHR5cGVzKSA9PSBXS0RhdGFEZXRlY3RvclR5cGVOb25lKQogICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6RGF0YURldGVjdG9yVHlwZU5vbmU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269415</attachid>
            <date>2016-01-20 19:25:25 -0800</date>
            <delta_ts>2016-01-21 09:21:57 -0800</delta_ts>
            <desc>Patch with detection and build fixes</desc>
            <filename>ddwk2-part2.txt</filename>
            <type>text/plain</type>
            <size>27040</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTM5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAxLTIwICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgdGhlIGxvZ2ljIHRvIHBlcmZvcm0gZGF0YSBkZXRlY3Rpb24gYW5kIG1vZGlmeQor
ICAgICAgICB0aGUgZG9tIGJ5IGFkZGluZyBkYXRhIGRldGVjdG9yIGxpbmtzIGFzIGFwcHJvcHJp
YXRlLgorICAgICAgICBUaGUgZGF0YSBkZXRlY3RvciByZXN1bHRzIHJldHVybmVkIGJ5IGRldGVj
dENvbnRlbnRJblJhbmdlIGFyZQorICAgICAgICBzdG9yZWQgaW4gdGhlIEZyYW1lIG9iamVjdC4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oOgorICAgICAgICAqIGVk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKC1bTlNJbmRleFBhdGggZGF0
YURldGVjdG9yU3RyaW5nVmFsdWVdKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246
OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3Vs
dElzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IpOgorICAgICAg
ICAoV2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeSk6CisgICAgICAgIChXZWJD
b3JlOjpidWlsZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVj
dENvbnRlbnRJblJhbmdlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6c2V0RGF0YURldGVjdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OmRhdGFEZXRlY3Rpb25SZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29j
b2EvRGF0YURldGVjdG9yc0NvcmVTUEkuaDoKKwogMjAxNi0wMS0yMCAgRGF2aWQgS2lsemVyICA8
ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUgZGVsZWdhdGUgbWV0aG9kcyBkb24ndCBOVUxM
LWNoZWNrIG1faGFuZGxlLT5jbGllbnQoKQpAQCAtMjg2LDcgKzMxNSw2IEBACiAgICAgICAgIChX
ZWJDb3JlOjptYXRjaGVzRnV0dXJlQ3VlUHNldWRvQ2xhc3MpOgogICAgICAgICAoV2ViQ29yZTo6
bWF0Y2hlc1Bhc3RDdWVQc2V1ZG9DbGFzcyk6CiAKLT4+Pj4+Pj4gLnIxOTUzMTYKIDIwMTYtMDEt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTk1MTc5LgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgRERBY3Rpb25D
b250ZXh0OworT0JKQ19DTEFTUyBOU0FycmF5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUzLDcgKzU0LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUFyb3VuZEhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRh
Qm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKTsKICNlbmRpZgot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0
cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBOU0FycmF5ICpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+
JiBjb250ZXh0UmFuZ2UsIERhdGFEZXRlY3RvclR5cGVzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNDQgQEAKICNp
bXBvcnQgIlZpc2libGVVbml0cy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKIAorI2lmIFBM
QVRGT1JNKElPUykKK2NvbnN0IE5TU3RyaW5nICprRGF0YURldGVjdG9yc1VSTFNjaGVtZSA9IEAi
eC1hcHBsZS1kYXRhLWRldGVjdG9ycyI7Citjb25zdCBOU1N0cmluZyAqa0RhdGFEZXRlY3RvcnNB
dHRyaWJ1dGVUeXBlS2V5ID0gQCJ4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzLXR5cGUiOworY29uc3Qg
TlNTdHJpbmcgKmtEYXRhRGV0ZWN0b3JzQXR0cmlidXRlUmVzdWx0S2V5ID0gQCJ4LWFwcGxlLWRh
dGEtZGV0ZWN0b3JzLXJlc3VsdCI7CisKK0BpbnRlcmZhY2UgTlNJbmRleFBhdGggKERERXh0ZW5z
aW9ucykKKy0gKE5TU3RyaW5nICopZGF0YURldGVjdG9yU3RyaW5nVmFsdWU7CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBOU0luZGV4UGF0aCAoRERFeHRlbnNpb25zKQorCistIChOU1N0cmluZyAq
KWRhdGFEZXRlY3RvclN0cmluZ1ZhbHVlCit7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBzZWxm
Lmxlbmd0aDsKKyAgICAKKyAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMDoKKyAgICAg
ICAgcmV0dXJuIEAiIjsKKyAgICAgICAgCisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlbHUiLCBbc2VsZiBpbmRleEF0UG9zaXRpb246MF1d
OworCisgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlbHUvJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3NlbGYgaW5kZXhBdFBvc2l0aW9uOjBdLCAo
dW5zaWduZWQgbG9uZylbc2VsZiBpbmRleEF0UG9zaXRpb246MV1dOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+
IGNvbXBvbmVudHMgPSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTps
ZW5ndGhdKTsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMCA7IGkgPCBsZW5ndGgg
OyBpKyspCisgICAgICAgICAgICAgICAgW2NvbXBvbmVudHMgYWRkT2JqZWN0OltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3NlbGYgaW5kZXhBdFBvc2l0
aW9uOmldXV07CisgICAgICAgICAgICByZXR1cm4gW2NvbXBvbmVudHMgY29tcG9uZW50c0pvaW5l
ZEJ5U3RyaW5nOkAiLyJdOworICAgICAgICB9CisgICAgfQorfQorCitAZW5kCisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTM4LDkgKzE3Niwz
NzIgQEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVjdGlvbgogICAgIHJldHVy
biBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwgY29udGV4dFJhbmdlLCBk
ZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2UpOwogfQogI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgCitzdGF0aWMgQk9P
TCByZXN1bHRJc1VSTChERFJlc3VsdFJlZiByZXN1bHQpCit7CisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBzdGF0aWMgTlNTZXQgKnVybFR5cGVzID0gW1tO
U1NldCBzZXRXaXRoT2JqZWN0czogKE5TU3RyaW5nICopRERCaW5kZXJIdHRwVVJMS2V5LCAoTlNT
dHJpbmcgKilEREJpbmRlcldlYlVSTEtleSwgKE5TU3RyaW5nICopRERCaW5kZXJNYWlsVVJMS2V5
LCAoTlNTdHJpbmcgKilEREJpbmRlckdlbmVyaWNVUkxLZXksIChOU1N0cmluZyAqKUREQmluZGVy
RW1haWxLZXksIG5pbF0gcmV0YWluXTsKKyAgICByZXR1cm4gW3VybFR5cGVzIGNvbnRhaW5zT2Jq
ZWN0OihOU1N0cmluZyAqKUREUmVzdWx0R2V0VHlwZShyZXN1bHQpXTsKK30KKworc3RhdGljIE5T
U3RyaW5nICpjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoRERSZXN1bHRSZWYgY3VycmVudFJl
c3VsdCwgTlNTdHJpbmcgKnJlc3VsdElkZW50aWZpZXIsIE5TRGF0ZSAqIHJlZmVyZW5jZURhdGUs
IE5TVGltZVpvbmUgKiByZWZlcmVuY2VUaW1lWm9uZSwgRGF0YURldGVjdG9yVHlwZXMgZGV0ZWN0
aW9uVHlwZXMpCit7CisgICAgaWYgKCFERFJlc3VsdEhhc1Byb3BlcnRpZXMoY3VycmVudFJlc3Vs
dCwgRERSZXN1bHRQcm9wZXJ0eVBhc3NpdmVEaXNwbGF5KSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25UeXBlcyBwaG9uZVR5cGVz
ID0gKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZVBob25lTnVtYmVyKSA/IEREVVJM
aWZpZXJQaG9uZU51bWJlckRldGVjdGlvblJlZ3VsYXIgOiBERFVSTGlmaWVyUGhvbmVOdW1iZXJE
ZXRlY3Rpb25Ob25lOworICAgIEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdvcnkgPSBERFJlc3VsdEdl
dENhdGVnb3J5KGN1cnJlbnRSZXN1bHQpOworICAgIENGU3RyaW5nUmVmIHR5cGUgPSBERFJlc3Vs
dEdldFR5cGUoY3VycmVudFJlc3VsdCk7CisgICAgCisgICAgaWYgKCgoZGV0ZWN0aW9uVHlwZXMg
JiBEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcykgJiYgKEREUmVzdWx0Q2F0ZWdvcnlBZGRyZXNzID09
IGNhdGVnb3J5KSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5
cGVUcmFja2luZ051bWJlcikgJiYgKENGU3RyaW5nQ29tcGFyZShEREJpbmRlclRyYWNraW5nTnVt
YmVyS2V5LCB0eXBlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpCisgICAgICAgIHx8ICgoZGV0
ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlRmxpZ2h0KSAmJiAoQ0ZTdHJpbmdDb21wYXJl
KEREQmluZGVyRmxpZ2h0SW5mb3JtYXRpb25LZXksIHR5cGUsIDApID09IGtDRkNvbXBhcmVFcXVh
bFRvKSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5cGVQaG9u
ZU51bWJlcikgJiYgKEREUmVzdWx0Q2F0ZWdvcnlQaG9uZU51bWJlciA9PSBjYXRlZ29yeSkpCisg
ICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlTGluaykgJiYgcmVz
dWx0SXNVUkwoY3VycmVudFJlc3VsdCkpKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gRERV
UkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0SWRlbnRpZmllciwgcGhvbmVU
eXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUpOworICAgIH0KKyAgICBpZiAo
KGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZUNhbGVuZGFyRXZlbnQpICYmIChERFJl
c3VsdENhdGVnb3J5Q2FsZW5kYXJFdmVudCA9PSBjYXRlZ29yeSkpIHsKKyAgICAgICAgaWYgKCFE
RFJlc3VsdElzUGFzdERhdGUoY3VycmVudFJlc3VsdCwgKENGRGF0ZVJlZilyZWZlcmVuY2VEYXRl
LCAoQ0ZUaW1lWm9uZVJlZilyZWZlcmVuY2VUaW1lWm9uZSkpCisgICAgICAgICAgICByZXR1cm4g
RERVUkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0SWRlbnRpZmllciwgcGhv
bmVUeXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUpOworICAgIH0KKyAgICBy
ZXR1cm4gbmlsOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3Io
Tm9kZSAqbm9kZSwgTm9kZSAqbm9kZVBhcmVudCkKK3sKKyAgICAvLyBQZXJmb3JtIGEgZGVwdGgt
Zmlyc3Qgc2VhcmNoIGZvciBhbmNob3Igbm9kZXMsIHdoaWNoIGhhdmUgdGhlIEREVVJMU2NoZW1l
IGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZSwKKyAgICAvLyB0YWtlIHRoZWlyIGNoaWxkcmVuIGFuZCBp
bnNlcnQgdGhlbSBiZWZvcmUgdGhlIGFuY2hvciwKKyAgICAvLyBhbmQgdGhlbiByZW1vdmUgdGhl
IGFuY2hvci4KKyAgICAKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBCT09MIG5vZGVJc0REQW5jaG9yID0gaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSAmJiBk
b3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJMU2NoZW1lKSA9PSAidHJ1
ZSI7CisgICAgCisgICAgUmVmUHRyPE5vZGVMaXN0PiBjaGlsZHJlbiA9IG5vZGUtPmNoaWxkTm9k
ZXMoKTsKKyAgICB1bnNpZ25lZCBjaGlsZENvdW50ID0gY2hpbGRyZW4tPmxlbmd0aCgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgIE5vZGUg
KmNoaWxkID0gY2hpbGRyZW4tPml0ZW0oaSk7CisgICAgICAgIGlmIChpczxFbGVtZW50PigqY2hp
bGQpKQorICAgICAgICAgICAgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5jaG9yKGNoaWxkLCBub2Rl
KTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vZGVJc0REQW5jaG9yICYmIG5vZGVQYXJlbnQpIHsK
KyAgICAgICAgY2hpbGRyZW4gPSBub2RlLT5jaGlsZE5vZGVzKCk7CisgICAgICAgIGNoaWxkQ291
bnQgPSBjaGlsZHJlbi0+bGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICAvLyBJdGVyYXRlIG92
ZXIgdGhlIGNoaWxkcmVuIGFuZCBtb3ZlIHRoZW0gYWxsIG9udG8gdGhlIHNhbWUgbGV2ZWwgYXMg
dGhpcyBhbmNob3IuCisgICAgICAgIC8vIFJlbW92ZSB0aGUgYW5jaG9yIGFmdGVyd2FyZHMuCisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAg
ICAgICBOb2RlICpjaGlsZCA9IGNoaWxkcmVuLT5pdGVtKDApOyAvLyBjaGlsZHJlbiBjaGFuZ2Ug
ZHVlIHRvIGluc2VydGlvbiwgYWx3YXlzIHVzZSBpZHggMAorICAgICAgICAgICAgbm9kZVBhcmVu
dC0+aW5zZXJ0QmVmb3JlKGNoaWxkLCBub2RlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAg
ICAgfQorICAgICAgICBub2RlUGFyZW50LT5yZW1vdmVDaGlsZChub2RlLCBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4
aXN0aW5nRERMaW5rcyhOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGVuZE5vZGUpCit7CisgICAgTm9k
ZSAqbm9kZSA9IHN0YXJ0Tm9kZTsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICAKKyAgICAg
ICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChk
b3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJMU2NoZW1lKSAhPSAidHJ1
ZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZW1vdmVSZXN1
bHRMaW5rc0Zyb21BbmNob3Iobm9kZSwgbm9kZS0+cGFyZW50RWxlbWVudCgpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUgPT0gZW5kTm9kZSkgeworICAgICAgICAgICAg
Ly8gSWYgd2UgZm91bmQgdGhlIGVuZCBub2RlIGFuZCBubyBsaW5rLCByZXR1cm4gZmFsc2UgdW5s
ZXNzIGFuIGFuY2VzdG9yIG5vZGUgaXMgYSBsaW5rLgorICAgICAgICAgICAgLy8gVGhlIG9ubHkg
YW5jZXN0b3JzIG5vdCB0ZXN0ZWQgYXQgdGhpcyBwb2ludCBhcmUgaW4gdGhlIGRpcmVjdCBsaW5l
IGZyb20gc2VsZidzIHBhcmVudCB0byB0aGUgdG9wLgorICAgICAgICAgICAgbm9kZSA9IHN0YXJ0
Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShERFVSTFNj
aGVtZSkgIT0gInRydWUiKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihub2RlLCBub2Rl
LT5wYXJlbnRFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSZWZQdHI8Tm9kZUxpc3Q+
IGNoaWxkTm9kZXMgPSBub2RlLT5jaGlsZE5vZGVzKCk7CisgICAgICAgIGlmIChjaGlsZE5vZGVz
LT5sZW5ndGgoKSkKKyAgICAgICAgICAgIG5vZGUgPSBjaGlsZE5vZGVzLT5pdGVtKDApOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUgKm5ld05vZGUgPSBub2RlLT5uZXh0U2libGlu
ZygpOworICAgICAgICAgICAgTm9kZSAqcGFyZW50Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICB3
aGlsZSAoIW5ld05vZGUpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9k
ZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghcGFyZW50Tm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG5ld05vZGUgPSBw
YXJlbnROb2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9k
ZSA9IG5ld05vZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQogCi12
b2lkIERhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mLCBE
YXRhRGV0ZWN0b3JUeXBlcykKK3N0YXRpYyBOU1N0cmluZyAqZGF0YURldGVjdG9yVHlwZUZvckNh
dGVnb3J5KEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdvcnkpCiB7CisgICAgc3dpdGNoIChjYXRlZ29y
eSkgeworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeVBob25lTnVtYmVyOgorICAgICAgICByZXR1
cm4gQCJ0ZWxlcGhvbmUiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeUxpbms6CisgICAgICAg
IHJldHVybiBAImxpbmsiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeUFkZHJlc3M6CisgICAg
ICAgIHJldHVybiBAImFkZHJlc3MiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeUNhbGVuZGFy
RXZlbnQ6CisgICAgICAgIHJldHVybiBAImNhbGVuZGFyLWV2ZW50IjsKKyAgICBjYXNlIEREUmVz
dWx0Q2F0ZWdvcnlNaXNjOgorICAgICAgICByZXR1cm4gQCJtaXNjIjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gQCIiOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYnVpbGRRdWVyeShE
RFNjYW5RdWVyeVJlZiBzY2FuUXVlcnksIFJhbmdlKiBjb250ZXh0UmFuZ2UpCit7CisgICAgLy8g
T25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywgc3RvcCBhdCB0aGUgZmly
c3QgaGFyZCBicmVhay4KKyAgICBjb25zdCBDRkluZGV4IG1heEZyYWdtZW50V2l0aEhhcmRCcmVh
ayA9IDEwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50
cywgd2Ugc3RvcCBhdCB0aGUgbGluZS4KKyAgICBjb25zdCBDRkluZGV4IG1heEZyYWdtZW50V2l0
aExpbmVicmVhayA9IDUwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVtYmVyIG9m
IGZyYWdtZW50cywgd2Ugc3RvcCBhdCB0aGUgc3BhY2UuCisgICAgY29uc3QgQ0ZJbmRleCBtYXhG
cmFnbWVudFNwYWNlID0gMTAwMDA7CisKKyAgICBDRkNoYXJhY3RlclNldFJlZiB3aGl0ZVNwYWNl
c1NldCA9IENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFyYWN0ZXJTZXRXaGl0ZXNw
YWNlQW5kTmV3bGluZSk7CisgICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgbmV3TGluZXNTZXQgPSBDRkNo
YXJhY3RlclNldEdldFByZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0TmV3bGluZSk7CisgICAgCisg
ICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZTsKKyAgICBDRkluZGV4IGl0ZXJhdG9yQ291bnQgPSAw
OworICAgIENGSW5kZXggZnJhZ21lbnRDb3VudCA9IDA7CisgICAgCisgICAgLy8gQnVpbGQgdGhl
IHNjYW4gcXVlcnkgYWRkaW5nIHNlcGFyYXRvcnMuCisgICAgLy8gRm9yIGVhY2ggZnJhZ21lbnQg
dGhlIGl0ZXJhdG9yIGluY3JlbWVudCBpcyBzdG9yZWQgYXMgbWV0YWRhdGEuCisgICAgZm9yIChU
ZXh0SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdlKTsgIWl0ZXJhdG9yLmF0RW5kKCk7IGl0
ZXJhdG9yLmFkdmFuY2UoKSwgaXRlcmF0b3JDb3VudCsrKSB7CisgICAgICAgIHNpemVfdCBjdXJy
ZW50VGV4dExlbmd0aCA9IGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCFj
dXJyZW50VGV4dExlbmd0aCkgeworICAgICAgICAgICAgRERTY2FuUXVlcnlBZGRTZXBhcmF0b3Io
c2NhblF1ZXJ5LCBERFRleHRDb2FsZXNjaW5nVHlwZUhhcmRCcmVhayk7CisgICAgICAgICAgICBp
ZiAoaXRlcmF0b3JDb3VudCA+IG1heEZyYWdtZW50V2l0aEhhcmRCcmVhaykKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8v
IFRlc3QgZm9yIHdoaXRlIHNwYWNlIG5vZGVzLCB3ZSdyZSBjb2FsZXNjaW5nIHRoZW0uCisgICAg
ICAgIGNvbnN0IFVuaUNoYXIgKmN1cnJlbnRDaGFyUHRyID0gaXRlcmF0b3IudGV4dCgpLnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOworICAgICAgICAKKyAgICAgICAgQk9PTCBjb250YWluc09ubHlX
aGl0ZVNwYWNlID0gWUVTOworICAgICAgICBCT09MIGhhc1RhYiA9IE5POworICAgICAgICBCT09M
IGhhc05ld2xpbmUgPSBOTzsKKyAgICAgICAgaW50IG5ic3BDb3VudCA9IDA7CisgICAgICAgIGZv
ciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGN1cnJlbnRUZXh0TGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgIGlmICghQ0ZDaGFyYWN0ZXJTZXRJc0NoYXJhY3Rlck1lbWJlcih3aGl0ZVNwYWNlc1Nl
dCwgKmN1cnJlbnRDaGFyUHRyKSkgeworICAgICAgICAgICAgICAgIGNvbnRhaW5zT25seVdoaXRl
U3BhY2UgPSBOTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKENGQ2hhcmFjdGVyU2V0SXNDaGFyYWN0ZXJNZW1iZXIo
bmV3TGluZXNTZXQsICpjdXJyZW50Q2hhclB0cikpCisgICAgICAgICAgICAgICAgaGFzTmV3bGlu
ZSA9IFlFUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKCpjdXJyZW50Q2hhclB0ciA9PSAnXHQnKQor
ICAgICAgICAgICAgICAgIGhhc1RhYiA9IFlFUzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gTXVsdGlwbGUgY29uc2VjdXRpdmUgbm9uIGJyZWFrYWJsZSBzcGFjZXMgYXJlIG1vc3QgbGlr
ZWx5IHNpbXVsYXRlZCB0YWJzLgorICAgICAgICAgICAgaWYgKCpjdXJyZW50Q2hhclB0ciA9PSAw
eGEwKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrbmJzcENvdW50ID4gMikKKyAgICAgICAgICAg
ICAgICAgICAgaGFzVGFiID0gWUVTOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgbmJzcENvdW50ID0gMDsKKworICAgICAgICAgICAgY3VycmVudENoYXJQdHIrKzsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoY29udGFpbnNPbmx5V2hpdGVTcGFjZSkgeworICAgICAgICAgICAg
aWYgKGhhc05ld2xpbmUpIHsKKyAgICAgICAgICAgICAgICBERFNjYW5RdWVyeUFkZExpbmVCcmVh
ayhzY2FuUXVlcnkpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvckNvdW50ID4gbWF4RnJh
Z21lbnRXaXRoTGluZWJyZWFrKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRERTY2FuUXVlcnlBZGRTZXBhcmF0b3Ioc2Nh
blF1ZXJ5LCBoYXNUYWIgPyBERFRleHRDb2FsZXNjaW5nVHlwZVRhYiA6IEREVGV4dENvYWxlc2Np
bmdUeXBlU3BhY2UpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvckNvdW50ID4gbWF4RnJh
Z21lbnRTcGFjZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBjdXJyZW50VGV4dCA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBpdGVyYXRvci50ZXh0KCkudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCksIGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKSkpOworICAgICAgICBERFNj
YW5RdWVyeUFkZFRleHRGcmFnbWVudChzY2FuUXVlcnksIGN1cnJlbnRUZXh0LmdldCgpLCBDRlJh
bmdlTWFrZSgwLCBjdXJyZW50VGV4dExlbmd0aCksICh2b2lkICopaXRlcmF0b3JDb3VudCwgKERE
VGV4dEZyYWdtZW50TW9kZSkwLCBERFRleHRDb2FsZXNjaW5nVHlwZU5vbmUpOworICAgICAgICBm
cmFnbWVudENvdW50Kys7CisgICAgfQogfQogCitOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRl
Y3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFuZ2UsIERhdGFEZXRlY3Rv
clR5cGVzIHR5cGVzKQoreworICAgIFJldGFpblB0cjxERFNjYW5uZXJSZWY+IHNjYW5uZXIgPSBh
ZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIp
KTsKKyAgICBSZXRhaW5QdHI8RERTY2FuUXVlcnlSZWY+IHNjYW5RdWVyeSA9IGFkb3B0Q0YoRERT
Y2FuUXVlcnlDcmVhdGUoTlVMTCkpOworICAgIGJ1aWxkUXVlcnkoc2NhblF1ZXJ5LmdldCgpLCBj
b250ZXh0UmFuZ2UuZ2V0KCkpOworICAgIAorICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgYWRkIGEg
dGltZW91dCB0byB0aGlzIGNhbGwgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QgdGFrZSB0b28gbXVj
aCB0aW1lLgorICAgIGlmICghRERTY2FubmVyU2NhblF1ZXJ5KHNjYW5uZXIuZ2V0KCksIHNjYW5R
dWVyeS5nZXQoKSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgUmV0YWluUHRyPENG
QXJyYXlSZWY+IHNjYW5uZXJSZXN1bHRzID0gYWRvcHRDRihERFNjYW5uZXJDb3B5UmVzdWx0c1dp
dGhPcHRpb25zKHNjYW5uZXIuZ2V0KCksIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc0ZvclBh
c3NpdmVVc2UgfCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNDb2FsZXNjZVNpZ25hdHVyZXMp
KTsKKyAgICBpZiAoIXNjYW5uZXJSZXN1bHRzKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAor
ICAgIENGSW5kZXggcmVzdWx0Q291bnQgPSBDRkFycmF5R2V0Q291bnQoc2Nhbm5lclJlc3VsdHMu
Z2V0KCkpOworICAgIGlmICghcmVzdWx0Q291bnQpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhbGxSZXN1bHRzID0gYWRvcHROUyhbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiBpbmRleFBhdGhzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Cisg
ICAgTlNJbnRlZ2VyIGN1cnJlbnRUb3BMZXZlbEluZGV4ID0gMDsKKworICAgIC8vIEl0ZXJhdGUg
dGhyb3VnaCB0aGUgc2Nhbm5lciByZXN1bHRzIHRvIGZpbmQgc2lnbmF0dXJlcyBhbmQgZXh0cmFj
dCBhbGwgdGhlIHN1YnJlc3VsdHMgd2hpbGUKKyAgICAvLyBwb3B1bGF0aW5nIHRoZSBhcnJheSBv
ZiBpbmRleCBwYXRocyB0byB1c2UgaW4gdGhlIGhyZWYgb2YgdGhlIGFuY2hvcnMgYmVpbmcgY3Jl
YXRlZC4KKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCByZXN1bHRDb3VudDsgaSsrKSB7Cisg
ICAgICAgIEREUmVzdWx0UmVmIHJlc3VsdCA9IChERFJlc3VsdFJlZilDRkFycmF5R2V0VmFsdWVB
dEluZGV4KHNjYW5uZXJSZXN1bHRzLmdldCgpLCBpKTsKKyAgICAgICAgTlNJbmRleFBhdGggKmlu
ZGV4UGF0aCA9IFtOU0luZGV4UGF0aCBpbmRleFBhdGhXaXRoSW5kZXg6Y3VycmVudFRvcExldmVs
SW5kZXhdOworICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKEREUmVzdWx0R2V0VHlwZShyZXN1
bHQpLCBEREJpbmRlclNpZ25hdHVyZUJsb2NrS2V5LCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykg
eworICAgICAgICAgICAgQ0ZBcnJheVJlZiBzdWJyZXN1bHRzID0gRERSZXN1bHRHZXRTdWJSZXN1
bHRzKHJlc3VsdCk7CisgICAgICAgICAgICBbYWxsUmVzdWx0cyBhZGRPYmplY3RzRnJvbUFycmF5
OihOU0FycmF5ICopc3VicmVzdWx0c107CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
TlNVSW50ZWdlciBpID0gMCA7IGkgPCBbKE5TQXJyYXkgKilzdWJyZXN1bHRzIGNvdW50XSA7IGkr
KykKKyAgICAgICAgICAgICAgICBbaW5kZXhQYXRocyBhZGRPYmplY3Q6W2luZGV4UGF0aCBpbmRl
eFBhdGhCeUFkZGluZ0luZGV4OmldXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFth
bGxSZXN1bHRzIGFkZE9iamVjdDooaWQpcmVzdWx0XTsKKyAgICAgICAgICAgIFtpbmRleFBhdGhz
IGFkZE9iamVjdDppbmRleFBhdGhdOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRUb3BMZXZl
bEluZGV4Kys7CisgICAgfQorCisgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IHJlc3VsdFJhbmdl
czsKKyAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdlLmdldCgpKTsKKyAgICBD
RkluZGV4IGl0ZXJhdG9yQ291bnQgPSAwOworCisgICAgcmVzdWx0Q291bnQgPSBbYWxsUmVzdWx0
cyBjb3VudF07CisgICAgCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheSBvZiB0aGUg
ZXhwYW5kZWQgcmVzdWx0cyB0byBjcmVhdGUgYSB2ZWN0b3Igb2YgUmFuZ2Ugb2JqZWN0cyB0aGF0
IGluZGljYXRlCisgICAgLy8gd2hlcmUgdGhlIERPTSBuZWVkcyB0byBiZSBtb2RpZmllZC4KKyAg
ICAvLyBFYWNoIHJlc3VsdCBjYW4gYmUgY29udGFpbmVkIGFsbCBpbiBvbmUgdGV4dCBub2RlIG9y
IGNhbiBzcGFuIG11bHRpcGxlIHRleHQgbm9kZXMuCisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBp
IDwgcmVzdWx0Q291bnQ7IGkrKykgeworICAgICAgICBERFJlc3VsdFJlZiByZXN1bHQgPSAoRERS
ZXN1bHRSZWYpW2FsbFJlc3VsdHMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgRERRdWVyeVJh
bmdlIHF1ZXJ5UmFuZ2UgPSBERFJlc3VsdEdldFF1ZXJ5UmFuZ2VGb3JVUkxpZmljYXRpb24ocmVz
dWx0KTsKKyAgICAgICAgQ0ZJbmRleCBpdGVyYXRvclRhcmdldEFkdmFuY2VDb3VudCA9IChDRklu
ZGV4KUREU2NhblF1ZXJ5R2V0RnJhZ21lbnRNZXRhRGF0YShzY2FuUXVlcnkuZ2V0KCksIHF1ZXJ5
UmFuZ2Uuc3RhcnQucXVlcnlJbmRleCk7CisgICAgICAgIHdoaWxlIChpdGVyYXRvckNvdW50IDwg
aXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFu
Y2UoKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yQ291bnQrKzsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IGl0ZXJhdG9yLnJhbmdlKCk7CisgICAgICAgIFJl
ZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBzdGFydFJhbmdlOworICAgICAgICBDRkluZGV4IGZyYWdt
ZW50SW5kZXggPSBxdWVyeVJhbmdlLnN0YXJ0LnF1ZXJ5SW5kZXg7CisgICAgICAgIHdoaWxlIChm
cmFnbWVudEluZGV4IDwgcXVlcnlSYW5nZS5lbmQucXVlcnlJbmRleCkgeworICAgICAgICAgICAg
ZnJhZ21lbnRJbmRleCsrOworICAgICAgICAgICAgaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQg
PSAoQ0ZJbmRleClERFNjYW5RdWVyeUdldEZyYWdtZW50TWV0YURhdGEoc2NhblF1ZXJ5LmdldCgp
LCBmcmFnbWVudEluZGV4KTsKKyAgICAgICAgICAgIHdoaWxlIChpdGVyYXRvckNvdW50IDwgaXRl
cmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsKKyAgICAgICAgICAgICAgICBpdGVyYXRvci5hZHZh
bmNlKCk7CisgICAgICAgICAgICAgICAgaXRlcmF0b3JDb3VudCsrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZW5kUmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOworICAgICAgICB9CisgICAg
ICAgIGlmIChzdGFydFJhbmdlID09IGVuZFJhbmdlKQorICAgICAgICAgICAgcmVzdWx0UmFuZ2Vz
LmFwcGVuZChUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHN0YXJ0UmFuZ2UuZ2V0KCksIHF1ZXJ5UmFu
Z2Uuc3RhcnQub2Zmc2V0LCBxdWVyeVJhbmdlLmVuZC5vZmZzZXQgLSBxdWVyeVJhbmdlLnN0YXJ0
Lm9mZnNldCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHRSYW5nZXMuYXBwZW5k
KFJhbmdlOjpjcmVhdGUoc3RhcnRSYW5nZS0+b3duZXJEb2N1bWVudCgpLCAmc3RhcnRSYW5nZS0+
c3RhcnRDb250YWluZXIoKSwgZm1heChzdGFydFJhbmdlLT5zdGFydE9mZnNldCgpLCBxdWVyeVJh
bmdlLnN0YXJ0Lm9mZnNldCksICZlbmRSYW5nZS0+ZW5kQ29udGFpbmVyKCksIGZtYXgoZW5kUmFu
Z2UtPmVuZE9mZnNldCgpLCBxdWVyeVJhbmdlLmVuZC5vZmZzZXQpKSk7CisgICAgfQorICAgIAor
ICAgIENGVGltZVpvbmVSZWYgdHogPSBDRlRpbWVab25lQ29weURlZmF1bHQoKTsKKyAgICBOU0Rh
dGUgKnJlZmVyZW5jZURhdGUgPSBbTlNEYXRlIGRhdGVdOworICAgIFRleHQqIGxhc3RUZXh0Tm9k
ZVRvVXBkYXRlID0gbnVsbHB0cjsKKyAgICBTdHJpbmcgbGFzdE5vZGVDb250ZW50OworICAgIHNp
emVfdCBjb250ZW50T2Zmc2V0ID0gMDsKKyAgICBERFF1ZXJ5T2Zmc2V0IGxhc3RNb2RpZmllZFF1
ZXJ5T2Zmc2V0ID0gRERRdWVyeU9mZnNldE1ha2VEdW1teSgpOworICAgIAorICAgIC8vIEZvciBl
YWNoIHJlc3VsdCBhZGQgdGhlIGxpbmsuCisgICAgLy8gU2luY2UgdGhlcmUgY291bGQgYmUgbXVs
dGlwbGUgcmVzdWx0cyBpbiB0aGUgc2FtZSB0ZXh0IG5vZGUsIHRoZSBub2RlIGlzIG9ubHkgbW9k
aWZpZWQgd2hlbgorICAgIC8vIHdlIGFyZSBhYm91dCB0byBwcm9jZXNzIGEgZGlmZmVyZW50IHRl
eHQgbm9kZS4KKyAgICBmb3IgKENGSW5kZXggcmVzdWx0SW5kZXggPSAwOyByZXN1bHRJbmRleCA8
IHJlc3VsdENvdW50OyByZXN1bHRJbmRleCsrKSB7CisgICAgICAgIEREUmVzdWx0UmVmIGNvcmVS
ZXN1bHQgPSAoRERSZXN1bHRSZWYpW2FsbFJlc3VsdHMgb2JqZWN0QXRJbmRleDpyZXN1bHRJbmRl
eF07CisgICAgICAgIEREUXVlcnlSYW5nZSBxdWVyeVJhbmdlID0gRERSZXN1bHRHZXRRdWVyeVJh
bmdlRm9yVVJMaWZpY2F0aW9uKGNvcmVSZXN1bHQpOworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJl
c3VsdFJhbmdlID0gcmVzdWx0UmFuZ2VzW3Jlc3VsdEluZGV4XTsKKyAgICAgICAgTlNTdHJpbmcg
KmlkZW50aWZpZXIgPSBbW2luZGV4UGF0aHMgb2JqZWN0QXRJbmRleDpyZXN1bHRJbmRleF0gZGF0
YURldGVjdG9yU3RyaW5nVmFsdWVdOworICAgICAgICBOU1N0cmluZyAqY29ycmVzcG9uZGluZ1VS
TCA9IGNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdChjb3JlUmVzdWx0LCBpZGVudGlmaWVyLCBy
ZWZlcmVuY2VEYXRlLCAoTlNUaW1lWm9uZSAqKXR6LCB0eXBlcyk7CisgICAgICAgIAorICAgICAg
ICBpZiAoIWNvcnJlc3BvbmRpbmdVUkwgfHwgc2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdE
RExpbmtzKCZyZXN1bHRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgJnJlc3VsdFJhbmdlLT5lbmRD
b250YWluZXIoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIC8v
IENvbXBhcmUgdGhlIHF1ZXJ5IG9mZnNldHMgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdvIGJhY2t3
YXJkcworICAgICAgICBpZiAoRERRdWVyeU9mZnNldENvbXBhcmUobGFzdE1vZGlmaWVkUXVlcnlP
ZmZzZXQsIHF1ZXJ5UmFuZ2Uuc3RhcnQpID49IDApCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBsYXN0TW9kaWZpZWRRdWVyeU9mZnNldCA9IHF1ZXJ5UmFuZ2UuZW5kOworCisgICAg
ICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHJlc3VsdFJhbmdlLmdldCgpKTsgIWl0LmF0RW5kKCk7
IGl0LmFkdmFuY2UoKSkgeworICAgICAgICAgICAgaWYgKCFpdC50ZXh0KCkubGVuZ3RoKCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBpdC5yYW5nZSgpOworICAgICAgICAgICAgaWYgKCFpczxUZXh0Pihy
YW5nZS0+c3RhcnRDb250YWluZXIoKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBOb2RlKiBwYXJlbnROb2RlID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkucGFyZW50
Tm9kZSgpOworICAgICAgICAgICAgVGV4dCYgY3VycmVudFRleHROb2RlID0gZG93bmNhc3Q8VGV4
dD4ocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpOworICAgICAgICAgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gY3VycmVudFRleHROb2RlLmRvY3VtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgdGV4
dE5vZGVEYXRhOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobGFzdFRleHROb2RlVG9V
cGRhdGUgIT0gJmN1cnJlbnRUZXh0Tm9kZSkgeworICAgICAgICAgICAgICAgIGlmIChsYXN0VGV4
dE5vZGVUb1VwZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgbGFzdFRleHROb2RlVG9VcGRhdGUt
PnNldERhdGEobGFzdE5vZGVDb250ZW50KTsKKyAgICAgICAgICAgICAgICBjb250ZW50T2Zmc2V0
ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgPiAwKQorICAg
ICAgICAgICAgICAgICAgICB0ZXh0Tm9kZURhdGEgPSBjdXJyZW50VGV4dE5vZGUuc3Vic3RyaW5n
RGF0YSgwLCByYW5nZS0+c3RhcnRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB0ZXh0Tm9kZURhdGEgPSBjdXJyZW50VGV4
dE5vZGUuc3Vic3RyaW5nRGF0YShjb250ZW50T2Zmc2V0LCByYW5nZS0+c3RhcnRPZmZzZXQoKSAt
IGNvbnRlbnRPZmZzZXQsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIXRleHROb2RlRGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBS
ZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCwgdGV4dE5vZGVEYXRh
KTsKKyAgICAgICAgICAgICAgICBwYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgJmN1
cnJlbnRUZXh0Tm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICAgICAgY29u
dGVudE9mZnNldCA9IHJhbmdlLT5zdGFydE9mZnNldCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGFjdHVhbCBhbmNob3Igbm9kZSBhbmQg
aW5zZXJ0IGl0IGJlZm9yZSB0aGUgY3VycmVudCBub2RlLgorICAgICAgICAgICAgdGV4dE5vZGVE
YXRhID0gY3VycmVudFRleHROb2RlLnN1YnN0cmluZ0RhdGEocmFuZ2UtPnN0YXJ0T2Zmc2V0KCks
IHJhbmdlLT5lbmRPZmZzZXQoKSAtIHJhbmdlLT5zdGFydE9mZnNldCgpLCBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXdOb2RlID0gVGV4dDo6Y3JlYXRl
KGRvY3VtZW50LCB0ZXh0Tm9kZURhdGEpOworICAgICAgICAgICAgcGFyZW50Tm9kZS0+aW5zZXJ0
QmVmb3JlKG5ld05vZGUsICZjdXJyZW50VGV4dE5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBSZWZQdHI8SFRNTEFuY2hvckVsZW1lbnQ+IGFuY2hv
ckVsZW1lbnQgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICAgICAg
ICAgIGFuY2hvckVsZW1lbnQtPnNldEhyZWYoY29ycmVzcG9uZGluZ1VSTCk7CisgICAgICAgICAg
ICBhbmNob3JFbGVtZW50LT5zZXREaXIoImx0ciIpOworICAgICAgICAgICAgUmVmUHRyPEF0dHI+
IGNvbG9yID0gZG93bmNhc3Q8RWxlbWVudD4ocGFyZW50Tm9kZSktPmdldEF0dHJpYnV0ZU5vZGUo
ImNvbG9yIik7CisgICAgICAgICAgICBpZiAoY29sb3IpCisgICAgICAgICAgICAgICAgYW5jaG9y
RWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRyLCBjb2xvci0+c3R5bGUo
KS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+
Tm9kZTo6YXBwZW5kQ2hpbGQobmV3Tm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAg
ICAgICBwYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUoYW5jaG9yRWxlbWVudCwgJmN1cnJlbnRUZXh0
Tm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICAvLyBBZGQgYSBzcGVjaWFs
IGF0dHJpYnV0ZSB0byBtYXJrIHRoaXMgVVJMaWZpY2F0aW9uIGFzIHRoZSByZXN1bHQgb2YgZGF0
YSBkZXRlY3RvcnMuCisgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1dGUoUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgKE5TU3RyaW5nICopa0RhdGFEZXRlY3RvcnNVUkxTY2hlbWUs
IG51bGxBdG9tKSwgInRydWUiKTsKKyAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldEF0dHJp
YnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAoTlNTdHJpbmcgKilrRGF0YURldGVjdG9yc0F0
dHJpYnV0ZVR5cGVLZXksIG51bGxBdG9tKSwgZGF0YURldGVjdG9yVHlwZUZvckNhdGVnb3J5KERE
UmVzdWx0R2V0Q2F0ZWdvcnkoY29yZVJlc3VsdCkpKTsKKyAgICAgICAgICAgIGFuY2hvckVsZW1l
bnQtPnNldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAoTlNTdHJpbmcgKilrRGF0
YURldGVjdG9yc0F0dHJpYnV0ZVJlc3VsdEtleSwgbnVsbEF0b20pLCBpZGVudGlmaWVyKTsKKyAg
ICAgICAgICAgIGNvbnRlbnRPZmZzZXQgPSByYW5nZS0+ZW5kT2Zmc2V0KCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGxhc3ROb2RlQ29udGVudCA9IGN1cnJlbnRUZXh0Tm9kZS5zdWJzdHJp
bmdEYXRhKHJhbmdlLT5lbmRPZmZzZXQoKSwgY3VycmVudFRleHROb2RlLmxlbmd0aCgpIC0gcmFu
Z2UtPmVuZE9mZnNldCgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIGxhc3RU
ZXh0Tm9kZVRvVXBkYXRlID0gJmN1cnJlbnRUZXh0Tm9kZTsKKyAgICAgICAgfSAgICAgICAgCisg
ICAgfQorICAgIGlmIChsYXN0VGV4dE5vZGVUb1VwZGF0ZSkKKyAgICAgICAgbGFzdFRleHROb2Rl
VG9VcGRhdGUtPnNldERhdGEobGFzdE5vZGVDb250ZW50KTsKKyAgICAKKyAgICByZXR1cm4gW0RE
U2Nhbm5lclJlc3VsdCByZXN1bHRzRnJvbUNvcmVSZXN1bHRzOnNjYW5uZXJSZXN1bHRzLmdldCgp
XTsKK30KKworI2Vsc2UKK05TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJh
bmdlKFJlZlB0cjxSYW5nZT4mLCBEYXRhRGV0ZWN0b3JUeXBlcykKK3sKKyAgICByZXR1cm4gbmls
OworfQorI2VuZGlmCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5o
CShyZXZpc2lvbiAxOTUzMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDEwICs0NywxMyBAQAogI2luY2x1ZGUgIkZyYW1lV2luLmgiCiAjZW5k
aWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorT0JKQ19DTEFTUyBOU0FycmF5OworI2VuZGlmCisK
ICNpZiBQTEFURk9STShJT1MpCiBPQkpDX0NMQVNTIERPTUNTU1N0eWxlRGVjbGFyYXRpb247CiBP
QkpDX0NMQVNTIERPTU5vZGU7Ci1PQkpDX0NMQVNTIE5TQXJyYXk7CiBPQkpDX0NMQVNTIE5TU3Ry
aW5nOwogI2VuZGlmCiAKQEAgLTE4NSw2ICsxODgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBmcmFtZVNjYWxlRmFjdG9yKCkgY29uc3Q7CiAK
ICAgICAgICAgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKyAgICAgICAg
CisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICB2b2lkIHNldERhdGFEZXRlY3Rp
b25SZXN1bHRzKE5TQXJyYXkgKnJlc3VsdHMpIHsgbV9kYXRhRGV0ZWN0aW9uUmVzdWx0cyA9IHJl
c3VsdHM7IH0KKyAgICAgICAgTlNBcnJheSAqZGF0YURldGVjdGlvblJlc3VsdHMoKSBjb25zdCB7
IHJldHVybiBtX2RhdGFEZXRlY3Rpb25SZXN1bHRzLmdldCgpOyB9CisjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKElPUykKICAgICAgICAgY29uc3QgVmlld3BvcnRBcmd1bWVudHMmIHZpZXdwb3J0QXJn
dW1lbnRzKCkgY29uc3Q7CkBAIC0yOTIsNiArMzAwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRIYW5kbGVyPiBtX2V2ZW50SGFuZGxl
cjsKICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvbkNvbnRyb2xsZXI+IG1f
YW5pbWF0aW9uQ29udHJvbGxlcjsKIAorI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICAg
ICAgUmV0YWluUHRyPE5TQXJyYXk+IG1fZGF0YURldGVjdGlvblJlc3VsdHM7CisjZW5kaWYKICNp
ZiBQTEFURk9STShJT1MpCiAgICAgICAgIHZvaWQgYmV0dGVyQXBwcm94aW1hdGVOb2RlKGNvbnN0
IEludFBvaW50JiB0ZXN0UG9pbnQsIE5vZGVRdWFsaWZpZXIsIE5vZGUqJiBiZXN0LCBOb2RlKiBm
YWlsZWROb2RlLCBJbnRQb2ludCYgYmVzdFBvaW50LCBJbnRSZWN0JiBiZXN0UmVjdCwgY29uc3Qg
SW50UmVjdCYgdGVzdFJlY3QpOwogICAgICAgICBib29sIGhpdFRlc3RSZXN1bHRBdFZpZXdwb3J0
TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgdmlld3BvcnRMb2NhdGlvbiwgSGl0VGVzdFJlc3Vs
dCYsIEludFBvaW50JiBjZW50ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Bp
L2NvY29hL0RhdGFEZXRlY3RvcnNDb3JlU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3BpL2NvY29hL0RhdGFEZXRlY3RvcnNDb3JlU1BJLmgJKHJldmlzaW9uIDE5
NTMxNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9EYXRhRGV0ZWN0b3Jz
Q29yZVNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiwxMSBAQAogI2lmIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspCiAKICNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3JlL0RhdGFEZXRlY3Rv
cnNDb3JlLmg+Ci0KKyNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3JlL0REQmluZGVyS2V5c19Qcml2
YXRlLmg+CisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzQ29yZS9ERFNjYW5uZXJSZXN1bHQuaD4KKyNp
ZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzQ29yZS9ERFVSTGlmaWVyLmg+
CisjZW5kaWYKICNlbHNlIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiB0eXBlZGVmIGVu
dW0gewpAQCAtNDAsNiArNDQsMjcgQEAgZW51bSB7CiAgICAgRERTY2FubmVyQ29weVJlc3VsdHNP
cHRpb25zTm9PdmVybGFwID0gMSA8PCAwLAogfTsKIAorZW51bSB7CisgICAgRERVUkxpZmllclBo
b25lTnVtYmVyRGV0ZWN0aW9uTm9uZSA9IDAsCisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0
ZWN0aW9uUmVndWxhciA9IDEgPDwgMSwKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rp
b25RdW90ZWRTaG9ydHMgPSAxIDw8IDIsCisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0
aW9uVW5xdW90ZWRTaG9ydHMgPSAxIDw8IDMKK307Cit0eXBlZGVmIE5TVUludGVnZXIgRERVUkxp
ZmllclBob25lTnVtYmVyRGV0ZWN0aW9uVHlwZXM7CisKK2V4dGVybiBDRlN0cmluZ1JlZiBjb25z
dCBEREJpbmRlckh0dHBVUkxLZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3QgRERCaW5kZXJX
ZWJVUkxLZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3QgRERCaW5kZXJNYWlsVVJMS2V5Owor
ZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVyR2VuZXJpY1VSTEtleTsKK2V4dGVybiBD
RlN0cmluZ1JlZiBjb25zdCBEREJpbmRlckVtYWlsS2V5OworZXh0ZXJuIENGU3RyaW5nUmVmIGNv
bnN0IEREQmluZGVyVHJhY2tpbmdOdW1iZXJLZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3Qg
RERCaW5kZXJGbGlnaHRJbmZvcm1hdGlvbktleTsKK2V4dGVybiBDRlN0cmluZ1JlZiBjb25zdCBE
REJpbmRlclNpZ25hdHVyZUJsb2NrS2V5OworCitAaW50ZXJmYWNlIEREU2Nhbm5lclJlc3VsdCA6
IE5TT2JqZWN0IDxOU0NvZGluZywgTlNTZWN1cmVDb2Rpbmc+CisrIChOU0FycmF5ICopIHJlc3Vs
dHNGcm9tQ29yZVJlc3VsdHM6KENGQXJyYXlSZWYpY29yZVJlc3VsdHM7CitAZW5kCisKICNlbmRp
ZiAvLyAhVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIAogdHlwZWRlZiBzdHJ1Y3QgX19ERFJlc3Vs
dCAqRERSZXN1bHRSZWY7CkBAIC01Niw1ICs4MSw4IEBAIEREU2NhblF1ZXJ5UmVmIEREU2NhblF1
ZXJ5Q3JlYXRlRnJvbVN0cmkKIEJvb2xlYW4gRERTY2FubmVyU2NhblF1ZXJ5KEREU2Nhbm5lclJl
ZiwgRERTY2FuUXVlcnlSZWYpOwogQ0ZBcnJheVJlZiBERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhP
cHRpb25zKEREU2Nhbm5lclJlZiwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zKTsKIENGUmFu
Z2UgRERSZXN1bHRHZXRSYW5nZShERFJlc3VsdFJlZik7CisjaWYgUExBVEZPUk0oSU9TKQorTlNT
dHJpbmcgKkREVVJMU3RyaW5nRm9yUmVzdWx0KEREUmVzdWx0UmVmIGN1cnJlbnRSZXN1bHQsIE5T
U3RyaW5nICogcmVzdWx0SWRlbnRpZmllciwgRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9u
VHlwZXMgaW5jbHVkaW5nVGVsR3JvdXBzLCBOU0RhdGUgKiByZWZlcmVuY2VEYXRlLCBOU1RpbWVa
b25lICogcmVmZXJlbmNlVGltZVpvbmUpOworI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE5NTM5MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTAxLTIwICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERhdGFEZXRlY3RvcnMgaW4gV0sg
KGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3Lm1tOgorICAgICAgICAoZnJvbVdLRGF0YURldGVjdG9yVHlwZXMpOiBDaGFuZ2VkIHBh
cmFtZXRlciB0byB1aW50NjRfdCB0bworICAgICAgICBzdWNjZXNzZnVsbHkgY29tcGFyZSBhZ2Fp
bnN0IFdLRGF0YURldGVjdG9yVHlwZUFsbC4KKwogMjAxNi0wMS0yMCAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBDTWFrZSBidWlsZCBh
ZnRlciByMTk1MzAwLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNyAr
MzE1LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkQWxsb3dQaWN0dXJlSW5QaWN0dXJlTQogI2VuZGlm
CiAKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCi1zdGF0aWMgV2ViQ29yZTo6RGF0YURldGVj
dG9yVHlwZXMgZnJvbVdLRGF0YURldGVjdG9yVHlwZXModWludDMyX3QgdHlwZXMpCitzdGF0aWMg
V2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXMgZnJvbVdLRGF0YURldGVjdG9yVHlwZXModWludDY0
X3QgdHlwZXMpCiB7CiAgICAgaWYgKHN0YXRpY19jYXN0PFdLRGF0YURldGVjdG9yVHlwZXM+KHR5
cGVzKSA9PSBXS0RhdGFEZXRlY3RvclR5cGVOb25lKQogICAgICAgICByZXR1cm4gV2ViQ29yZTo6
RGF0YURldGVjdG9yVHlwZU5vbmU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269457</attachid>
            <date>2016-01-21 09:21:57 -0800</date>
            <delta_ts>2016-01-21 09:51:00 -0800</delta_ts>
            <desc>Patch with detection and build fixes for iOS</desc>
            <filename>ddwk2-part2.txt</filename>
            <type>text/plain</type>
            <size>28270</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTM5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAxLTIwICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgdGhlIGxvZ2ljIHRvIHBlcmZvcm0gZGF0YSBkZXRlY3Rpb24gYW5kIG1vZGlmeQor
ICAgICAgICB0aGUgZG9tIGJ5IGFkZGluZyBkYXRhIGRldGVjdG9yIGxpbmtzIGFzIGFwcHJvcHJp
YXRlLgorICAgICAgICBUaGUgZGF0YSBkZXRlY3RvciByZXN1bHRzIHJldHVybmVkIGJ5IGRldGVj
dENvbnRlbnRJblJhbmdlIGFyZQorICAgICAgICBzdG9yZWQgaW4gdGhlIEZyYW1lIG9iamVjdC4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oOgorICAgICAgICAqIGVk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKC1bTlNJbmRleFBhdGggZGF0
YURldGVjdG9yU3RyaW5nVmFsdWVdKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246
OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3Vs
dElzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IpOgorICAgICAg
ICAoV2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeSk6CisgICAgICAgIChXZWJD
b3JlOjpidWlsZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVj
dENvbnRlbnRJblJhbmdlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6c2V0RGF0YURldGVjdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OmRhdGFEZXRlY3Rpb25SZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29j
b2EvRGF0YURldGVjdG9yc0NvcmVTUEkuaDoKKwogMjAxNi0wMS0yMCAgRGF2aWQgS2lsemVyICA8
ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUgZGVsZWdhdGUgbWV0aG9kcyBkb24ndCBOVUxM
LWNoZWNrIG1faGFuZGxlLT5jbGllbnQoKQpAQCAtMjg2LDcgKzMxNSw2IEBACiAgICAgICAgIChX
ZWJDb3JlOjptYXRjaGVzRnV0dXJlQ3VlUHNldWRvQ2xhc3MpOgogICAgICAgICAoV2ViQ29yZTo6
bWF0Y2hlc1Bhc3RDdWVQc2V1ZG9DbGFzcyk6CiAKLT4+Pj4+Pj4gLnIxOTUzMTYKIDIwMTYtMDEt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTk1MTc5LgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgRERBY3Rpb25D
b250ZXh0OworT0JKQ19DTEFTUyBOU0FycmF5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUzLDcgKzU0LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUFyb3VuZEhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRh
Qm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKTsKICNlbmRpZgot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0
cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBOU0FycmF5ICpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+
JiBjb250ZXh0UmFuZ2UsIERhdGFEZXRlY3RvclR5cGVzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNDQgQEAKICNp
bXBvcnQgIlZpc2libGVVbml0cy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKIAorI2lmIFBM
QVRGT1JNKElPUykKK2NvbnN0IE5TU3RyaW5nICprRGF0YURldGVjdG9yc1VSTFNjaGVtZSA9IEAi
eC1hcHBsZS1kYXRhLWRldGVjdG9ycyI7Citjb25zdCBOU1N0cmluZyAqa0RhdGFEZXRlY3RvcnNB
dHRyaWJ1dGVUeXBlS2V5ID0gQCJ4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzLXR5cGUiOworY29uc3Qg
TlNTdHJpbmcgKmtEYXRhRGV0ZWN0b3JzQXR0cmlidXRlUmVzdWx0S2V5ID0gQCJ4LWFwcGxlLWRh
dGEtZGV0ZWN0b3JzLXJlc3VsdCI7CisKK0BpbnRlcmZhY2UgTlNJbmRleFBhdGggKERERXh0ZW5z
aW9ucykKKy0gKE5TU3RyaW5nICopZGF0YURldGVjdG9yU3RyaW5nVmFsdWU7CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBOU0luZGV4UGF0aCAoRERFeHRlbnNpb25zKQorCistIChOU1N0cmluZyAq
KWRhdGFEZXRlY3RvclN0cmluZ1ZhbHVlCit7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBzZWxm
Lmxlbmd0aDsKKyAgICAKKyAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMDoKKyAgICAg
ICAgcmV0dXJuIEAiIjsKKyAgICAgICAgCisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlbHUiLCAodW5zaWduZWQgbG9uZylbc2VsZiBpbmRl
eEF0UG9zaXRpb246MF1dOworCisgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIlbHUvJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3NlbGYgaW5kZXhB
dFBvc2l0aW9uOjBdLCAodW5zaWduZWQgbG9uZylbc2VsZiBpbmRleEF0UG9zaXRpb246MV1dOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+IGNvbXBvbmVudHMgPSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTpsZW5ndGhdKTsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0g
MCA7IGkgPCBsZW5ndGggOyBpKyspCisgICAgICAgICAgICAgICAgW2NvbXBvbmVudHMgYWRkT2Jq
ZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3Nl
bGYgaW5kZXhBdFBvc2l0aW9uOmldXV07CisgICAgICAgICAgICByZXR1cm4gW2NvbXBvbmVudHMg
Y29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiLyJdOworICAgICAgICB9CisgICAgfQorfQorCitA
ZW5kCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oTUFDKQpA
QCAtMTM4LDkgKzE3NiwzNzIgQEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVj
dGlvbgogICAgIHJldHVybiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwg
Y29udGV4dFJhbmdlLCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2Up
OwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgCitzdGF0aWMgQk9PTCByZXN1bHRJc1VSTChERFJlc3VsdFJlZiByZXN1bHQpCit7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBzdGF0aWMgTlNTZXQg
KnVybFR5cGVzID0gW1tOU1NldCBzZXRXaXRoT2JqZWN0czogKE5TU3RyaW5nICopRERCaW5kZXJI
dHRwVVJMS2V5LCAoTlNTdHJpbmcgKilEREJpbmRlcldlYlVSTEtleSwgKE5TU3RyaW5nICopRERC
aW5kZXJNYWlsVVJMS2V5LCAoTlNTdHJpbmcgKilEREJpbmRlckdlbmVyaWNVUkxLZXksIChOU1N0
cmluZyAqKUREQmluZGVyRW1haWxLZXksIG5pbF0gcmV0YWluXTsKKyAgICByZXR1cm4gW3VybFR5
cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKUREUmVzdWx0R2V0VHlwZShyZXN1bHQpXTsK
K30KKworc3RhdGljIE5TU3RyaW5nICpjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoRERSZXN1
bHRSZWYgY3VycmVudFJlc3VsdCwgTlNTdHJpbmcgKnJlc3VsdElkZW50aWZpZXIsIE5TRGF0ZSAq
IHJlZmVyZW5jZURhdGUsIE5TVGltZVpvbmUgKiByZWZlcmVuY2VUaW1lWm9uZSwgRGF0YURldGVj
dG9yVHlwZXMgZGV0ZWN0aW9uVHlwZXMpCit7CisgICAgaWYgKCFERFJlc3VsdEhhc1Byb3BlcnRp
ZXMoY3VycmVudFJlc3VsdCwgRERSZXN1bHRQcm9wZXJ0eVBhc3NpdmVEaXNwbGF5KSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25U
eXBlcyBwaG9uZVR5cGVzID0gKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZVBob25l
TnVtYmVyKSA/IEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvblJlZ3VsYXIgOiBERFVSTGlm
aWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25Ob25lOworICAgIEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdv
cnkgPSBERFJlc3VsdEdldENhdGVnb3J5KGN1cnJlbnRSZXN1bHQpOworICAgIENGU3RyaW5nUmVm
IHR5cGUgPSBERFJlc3VsdEdldFR5cGUoY3VycmVudFJlc3VsdCk7CisgICAgCisgICAgaWYgKCgo
ZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcykgJiYgKEREUmVzdWx0Q2F0
ZWdvcnlBZGRyZXNzID09IGNhdGVnb3J5KSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAm
IERhdGFEZXRlY3RvclR5cGVUcmFja2luZ051bWJlcikgJiYgKENGU3RyaW5nQ29tcGFyZShEREJp
bmRlclRyYWNraW5nTnVtYmVyS2V5LCB0eXBlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpCisg
ICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlRmxpZ2h0KSAmJiAo
Q0ZTdHJpbmdDb21wYXJlKEREQmluZGVyRmxpZ2h0SW5mb3JtYXRpb25LZXksIHR5cGUsIDApID09
IGtDRkNvbXBhcmVFcXVhbFRvKSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFE
ZXRlY3RvclR5cGVQaG9uZU51bWJlcikgJiYgKEREUmVzdWx0Q2F0ZWdvcnlQaG9uZU51bWJlciA9
PSBjYXRlZ29yeSkpCisgICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JU
eXBlTGluaykgJiYgcmVzdWx0SXNVUkwoY3VycmVudFJlc3VsdCkpKSB7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gRERVUkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0SWRl
bnRpZmllciwgcGhvbmVUeXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUpOwor
ICAgIH0KKyAgICBpZiAoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZUNhbGVuZGFy
RXZlbnQpICYmIChERFJlc3VsdENhdGVnb3J5Q2FsZW5kYXJFdmVudCA9PSBjYXRlZ29yeSkpIHsK
KyAgICAgICAgaWYgKCFERFJlc3VsdElzUGFzdERhdGUoY3VycmVudFJlc3VsdCwgKENGRGF0ZVJl
ZilyZWZlcmVuY2VEYXRlLCAoQ0ZUaW1lWm9uZVJlZilyZWZlcmVuY2VUaW1lWm9uZSkpCisgICAg
ICAgICAgICByZXR1cm4gRERVUkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0
SWRlbnRpZmllciwgcGhvbmVUeXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUp
OworICAgIH0KKyAgICByZXR1cm4gbmlsOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVSZXN1bHRM
aW5rc0Zyb21BbmNob3IoTm9kZSAqbm9kZSwgTm9kZSAqbm9kZVBhcmVudCkKK3sKKyAgICAvLyBQ
ZXJmb3JtIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIGZvciBhbmNob3Igbm9kZXMsIHdoaWNoIGhhdmUg
dGhlIEREVVJMU2NoZW1lIGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZSwKKyAgICAvLyB0YWtlIHRoZWly
IGNoaWxkcmVuIGFuZCBpbnNlcnQgdGhlbSBiZWZvcmUgdGhlIGFuY2hvciwKKyAgICAvLyBhbmQg
dGhlbiByZW1vdmUgdGhlIGFuY2hvci4KKyAgICAKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBCT09MIG5vZGVJc0REQW5jaG9yID0gaXM8SFRNTEFuY2hvckVsZW1l
bnQ+KCpub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJM
U2NoZW1lKSA9PSAidHJ1ZSI7CisgICAgCisgICAgUmVmUHRyPE5vZGVMaXN0PiBjaGlsZHJlbiA9
IG5vZGUtPmNoaWxkTm9kZXMoKTsKKyAgICB1bnNpZ25lZCBjaGlsZENvdW50ID0gY2hpbGRyZW4t
Pmxlbmd0aCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7
CisgICAgICAgIE5vZGUgKmNoaWxkID0gY2hpbGRyZW4tPml0ZW0oaSk7CisgICAgICAgIGlmIChp
czxFbGVtZW50PigqY2hpbGQpKQorICAgICAgICAgICAgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5j
aG9yKGNoaWxkLCBub2RlKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vZGVJc0REQW5jaG9yICYm
IG5vZGVQYXJlbnQpIHsKKyAgICAgICAgY2hpbGRyZW4gPSBub2RlLT5jaGlsZE5vZGVzKCk7Cisg
ICAgICAgIGNoaWxkQ291bnQgPSBjaGlsZHJlbi0+bGVuZ3RoKCk7CisgICAgICAgIAorICAgICAg
ICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNoaWxkcmVuIGFuZCBtb3ZlIHRoZW0gYWxsIG9udG8gdGhl
IHNhbWUgbGV2ZWwgYXMgdGhpcyBhbmNob3IuCisgICAgICAgIC8vIFJlbW92ZSB0aGUgYW5jaG9y
IGFmdGVyd2FyZHMuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsg
aSsrKSB7CisgICAgICAgICAgICBOb2RlICpjaGlsZCA9IGNoaWxkcmVuLT5pdGVtKDApOyAvLyBj
aGlsZHJlbiBjaGFuZ2UgZHVlIHRvIGluc2VydGlvbiwgYWx3YXlzIHVzZSBpZHggMAorICAgICAg
ICAgICAgbm9kZVBhcmVudC0+aW5zZXJ0QmVmb3JlKGNoaWxkLCBub2RlLCBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKKyAgICAgICAgfQorICAgICAgICBub2RlUGFyZW50LT5yZW1vdmVDaGlsZChub2Rl
LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHNlYXJjaEZv
ckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyhOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGVuZE5v
ZGUpCit7CisgICAgTm9kZSAqbm9kZSA9IHN0YXJ0Tm9kZTsKKyAgICB3aGlsZSAobm9kZSkgewor
ICAgICAgICAKKyAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKKyAg
ICAgICAgICAgIGlmIChkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJM
U2NoZW1lKSAhPSAidHJ1ZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3Iobm9kZSwgbm9kZS0+cGFyZW50RWxlbWVu
dCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUgPT0gZW5kTm9kZSkg
eworICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgdGhlIGVuZCBub2RlIGFuZCBubyBsaW5rLCBy
ZXR1cm4gZmFsc2UgdW5sZXNzIGFuIGFuY2VzdG9yIG5vZGUgaXMgYSBsaW5rLgorICAgICAgICAg
ICAgLy8gVGhlIG9ubHkgYW5jZXN0b3JzIG5vdCB0ZXN0ZWQgYXQgdGhpcyBwb2ludCBhcmUgaW4g
dGhlIGRpcmVjdCBsaW5lIGZyb20gc2VsZidzIHBhcmVudCB0byB0aGUgdG9wLgorICAgICAgICAg
ICAgbm9kZSA9IHN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgd2hpbGUgKG5v
ZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0
dHJpYnV0ZShERFVSTFNjaGVtZSkgIT0gInRydWUiKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFu
Y2hvcihub2RlLCBub2RlLT5wYXJlbnRFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBS
ZWZQdHI8Tm9kZUxpc3Q+IGNoaWxkTm9kZXMgPSBub2RlLT5jaGlsZE5vZGVzKCk7CisgICAgICAg
IGlmIChjaGlsZE5vZGVzLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIG5vZGUgPSBjaGlsZE5vZGVz
LT5pdGVtKDApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUgKm5ld05vZGUgPSBu
b2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgTm9kZSAqcGFyZW50Tm9kZSA9IG5vZGU7
CisgICAgICAgICAgICB3aGlsZSAoIW5ld05vZGUpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnRO
b2RlID0gcGFyZW50Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghcGFy
ZW50Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIG5ld05vZGUgPSBwYXJlbnROb2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbm9kZSA9IG5ld05vZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQogCi12b2lkIERhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJl
ZlB0cjxSYW5nZT4mLCBEYXRhRGV0ZWN0b3JUeXBlcykKK3N0YXRpYyBOU1N0cmluZyAqZGF0YURl
dGVjdG9yVHlwZUZvckNhdGVnb3J5KEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdvcnkpCiB7CisgICAg
c3dpdGNoIChjYXRlZ29yeSkgeworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeVBob25lTnVtYmVy
OgorICAgICAgICByZXR1cm4gQCJ0ZWxlcGhvbmUiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29y
eUxpbms6CisgICAgICAgIHJldHVybiBAImxpbmsiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29y
eUFkZHJlc3M6CisgICAgICAgIHJldHVybiBAImFkZHJlc3MiOworICAgIGNhc2UgRERSZXN1bHRD
YXRlZ29yeUNhbGVuZGFyRXZlbnQ6CisgICAgICAgIHJldHVybiBAImNhbGVuZGFyLWV2ZW50IjsK
KyAgICBjYXNlIEREUmVzdWx0Q2F0ZWdvcnlNaXNjOgorICAgICAgICByZXR1cm4gQCJtaXNjIjsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQCIiOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgYnVpbGRRdWVyeShERFNjYW5RdWVyeVJlZiBzY2FuUXVlcnksIFJhbmdlKiBjb250ZXh0UmFu
Z2UpCit7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywg
c3RvcCBhdCB0aGUgZmlyc3QgaGFyZCBicmVhay4KKyAgICBjb25zdCBDRkluZGV4IG1heEZyYWdt
ZW50V2l0aEhhcmRCcmVhayA9IDEwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVt
YmVyIG9mIGZyYWdtZW50cywgd2Ugc3RvcCBhdCB0aGUgbGluZS4KKyAgICBjb25zdCBDRkluZGV4
IG1heEZyYWdtZW50V2l0aExpbmVicmVhayA9IDUwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVy
IHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywgd2Ugc3RvcCBhdCB0aGUgc3BhY2UuCisgICAgY29u
c3QgQ0ZJbmRleCBtYXhGcmFnbWVudFNwYWNlID0gMTAwMDA7CisKKyAgICBDRkNoYXJhY3RlclNl
dFJlZiB3aGl0ZVNwYWNlc1NldCA9IENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFy
YWN0ZXJTZXRXaGl0ZXNwYWNlQW5kTmV3bGluZSk7CisgICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgbmV3
TGluZXNTZXQgPSBDRkNoYXJhY3RlclNldEdldFByZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0TmV3
bGluZSk7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZTsKKyAgICBDRkluZGV4IGl0
ZXJhdG9yQ291bnQgPSAwOworICAgIENGSW5kZXggZnJhZ21lbnRDb3VudCA9IDA7CisgICAgCisg
ICAgLy8gQnVpbGQgdGhlIHNjYW4gcXVlcnkgYWRkaW5nIHNlcGFyYXRvcnMuCisgICAgLy8gRm9y
IGVhY2ggZnJhZ21lbnQgdGhlIGl0ZXJhdG9yIGluY3JlbWVudCBpcyBzdG9yZWQgYXMgbWV0YWRh
dGEuCisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdlKTsgIWl0ZXJh
dG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSwgaXRlcmF0b3JDb3VudCsrKSB7CisgICAg
ICAgIHNpemVfdCBjdXJyZW50VGV4dExlbmd0aCA9IGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKTsK
KyAgICAgICAgaWYgKCFjdXJyZW50VGV4dExlbmd0aCkgeworICAgICAgICAgICAgRERTY2FuUXVl
cnlBZGRTZXBhcmF0b3Ioc2NhblF1ZXJ5LCBERFRleHRDb2FsZXNjaW5nVHlwZUhhcmRCcmVhayk7
CisgICAgICAgICAgICBpZiAoaXRlcmF0b3JDb3VudCA+IG1heEZyYWdtZW50V2l0aEhhcmRCcmVh
aykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIC8vIFRlc3QgZm9yIHdoaXRlIHNwYWNlIG5vZGVzLCB3ZSdyZSBjb2FsZXNj
aW5nIHRoZW0uCisgICAgICAgIGNvbnN0IFVuaUNoYXIgKmN1cnJlbnRDaGFyUHRyID0gaXRlcmF0
b3IudGV4dCgpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOworICAgICAgICAKKyAgICAgICAgQk9P
TCBjb250YWluc09ubHlXaGl0ZVNwYWNlID0gWUVTOworICAgICAgICBCT09MIGhhc1RhYiA9IE5P
OworICAgICAgICBCT09MIGhhc05ld2xpbmUgPSBOTzsKKyAgICAgICAgaW50IG5ic3BDb3VudCA9
IDA7CisgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGN1cnJlbnRUZXh0TGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIGlmICghQ0ZDaGFyYWN0ZXJTZXRJc0NoYXJhY3Rlck1lbWJl
cih3aGl0ZVNwYWNlc1NldCwgKmN1cnJlbnRDaGFyUHRyKSkgeworICAgICAgICAgICAgICAgIGNv
bnRhaW5zT25seVdoaXRlU3BhY2UgPSBOTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKENGQ2hhcmFjdGVyU2V0SXND
aGFyYWN0ZXJNZW1iZXIobmV3TGluZXNTZXQsICpjdXJyZW50Q2hhclB0cikpCisgICAgICAgICAg
ICAgICAgaGFzTmV3bGluZSA9IFlFUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKCpjdXJyZW50Q2hh
clB0ciA9PSAnXHQnKQorICAgICAgICAgICAgICAgIGhhc1RhYiA9IFlFUzsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29uc2VjdXRpdmUgbm9uIGJyZWFrYWJsZSBzcGFj
ZXMgYXJlIG1vc3QgbGlrZWx5IHNpbXVsYXRlZCB0YWJzLgorICAgICAgICAgICAgaWYgKCpjdXJy
ZW50Q2hhclB0ciA9PSAweGEwKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrbmJzcENvdW50ID4g
MikKKyAgICAgICAgICAgICAgICAgICAgaGFzVGFiID0gWUVTOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgbmJzcENvdW50ID0gMDsKKworICAgICAgICAgICAgY3VycmVudENo
YXJQdHIrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29udGFpbnNPbmx5V2hpdGVTcGFjZSkg
eworICAgICAgICAgICAgaWYgKGhhc05ld2xpbmUpIHsKKyAgICAgICAgICAgICAgICBERFNjYW5R
dWVyeUFkZExpbmVCcmVhayhzY2FuUXVlcnkpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRv
ckNvdW50ID4gbWF4RnJhZ21lbnRXaXRoTGluZWJyZWFrKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRERTY2FuUXVlcnlB
ZGRTZXBhcmF0b3Ioc2NhblF1ZXJ5LCBoYXNUYWIgPyBERFRleHRDb2FsZXNjaW5nVHlwZVRhYiA6
IEREVGV4dENvYWxlc2NpbmdUeXBlU3BhY2UpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRv
ckNvdW50ID4gbWF4RnJhZ21lbnRTcGFjZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjdXJyZW50VGV4dCA9IGFkb3B0Q0YoQ0ZT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBpdGVyYXRvci50
ZXh0KCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCksIGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKSkp
OworICAgICAgICBERFNjYW5RdWVyeUFkZFRleHRGcmFnbWVudChzY2FuUXVlcnksIGN1cnJlbnRU
ZXh0LmdldCgpLCBDRlJhbmdlTWFrZSgwLCBjdXJyZW50VGV4dExlbmd0aCksICh2b2lkICopaXRl
cmF0b3JDb3VudCwgKEREVGV4dEZyYWdtZW50TW9kZSkwLCBERFRleHRDb2FsZXNjaW5nVHlwZU5v
bmUpOworICAgICAgICBmcmFnbWVudENvdW50Kys7CisgICAgfQogfQogCitOU0FycmF5ICpEYXRh
RGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFu
Z2UsIERhdGFEZXRlY3RvclR5cGVzIHR5cGVzKQoreworICAgIFJldGFpblB0cjxERFNjYW5uZXJS
ZWY+IHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRh
cmQsIDAsIG51bGxwdHIpKTsKKyAgICBSZXRhaW5QdHI8RERTY2FuUXVlcnlSZWY+IHNjYW5RdWVy
eSA9IGFkb3B0Q0YoRERTY2FuUXVlcnlDcmVhdGUoTlVMTCkpOworICAgIGJ1aWxkUXVlcnkoc2Nh
blF1ZXJ5LmdldCgpLCBjb250ZXh0UmFuZ2UuZ2V0KCkpOworICAgIAorICAgIC8vIEZJWE1FOiB3
ZSBzaG91bGQgYWRkIGEgdGltZW91dCB0byB0aGlzIGNhbGwgdG8gbWFrZSBzdXJlIGl0IGRvZXNu
J3QgdGFrZSB0b28gbXVjaCB0aW1lLgorICAgIGlmICghRERTY2FubmVyU2NhblF1ZXJ5KHNjYW5u
ZXIuZ2V0KCksIHNjYW5RdWVyeS5nZXQoKSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHNjYW5uZXJSZXN1bHRzID0gYWRvcHRDRihERFNjYW5u
ZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCksIEREU2Nhbm5lckNvcHlSZXN1
bHRzT3B0aW9uc0ZvclBhc3NpdmVVc2UgfCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNDb2Fs
ZXNjZVNpZ25hdHVyZXMpKTsKKyAgICBpZiAoIXNjYW5uZXJSZXN1bHRzKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIAorICAgIENGSW5kZXggcmVzdWx0Q291bnQgPSBDRkFycmF5R2V0Q291bnQo
c2Nhbm5lclJlc3VsdHMuZ2V0KCkpOworICAgIGlmICghcmVzdWx0Q291bnQpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhbGxSZXN1bHRz
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiBpbmRleFBhdGhzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XSk7CisgICAgTlNJbnRlZ2VyIGN1cnJlbnRUb3BMZXZlbEluZGV4ID0gMDsKKwor
ICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2Nhbm5lciByZXN1bHRzIHRvIGZpbmQgc2lnbmF0
dXJlcyBhbmQgZXh0cmFjdCBhbGwgdGhlIHN1YnJlc3VsdHMgd2hpbGUKKyAgICAvLyBwb3B1bGF0
aW5nIHRoZSBhcnJheSBvZiBpbmRleCBwYXRocyB0byB1c2UgaW4gdGhlIGhyZWYgb2YgdGhlIGFu
Y2hvcnMgYmVpbmcgY3JlYXRlZC4KKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCByZXN1bHRD
b3VudDsgaSsrKSB7CisgICAgICAgIEREUmVzdWx0UmVmIHJlc3VsdCA9IChERFJlc3VsdFJlZilD
RkFycmF5R2V0VmFsdWVBdEluZGV4KHNjYW5uZXJSZXN1bHRzLmdldCgpLCBpKTsKKyAgICAgICAg
TlNJbmRleFBhdGggKmluZGV4UGF0aCA9IFtOU0luZGV4UGF0aCBpbmRleFBhdGhXaXRoSW5kZXg6
Y3VycmVudFRvcExldmVsSW5kZXhdOworICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKEREUmVz
dWx0R2V0VHlwZShyZXN1bHQpLCBEREJpbmRlclNpZ25hdHVyZUJsb2NrS2V5LCAwKSA9PSBrQ0ZD
b21wYXJlRXF1YWxUbykgeworICAgICAgICAgICAgQ0ZBcnJheVJlZiBzdWJyZXN1bHRzID0gRERS
ZXN1bHRHZXRTdWJSZXN1bHRzKHJlc3VsdCk7CisgICAgICAgICAgICBbYWxsUmVzdWx0cyBhZGRP
YmplY3RzRnJvbUFycmF5OihOU0FycmF5ICopc3VicmVzdWx0c107CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMCA7IGkgPCBbKE5TQXJyYXkgKilzdWJyZXN1
bHRzIGNvdW50XSA7IGkrKykKKyAgICAgICAgICAgICAgICBbaW5kZXhQYXRocyBhZGRPYmplY3Q6
W2luZGV4UGF0aCBpbmRleFBhdGhCeUFkZGluZ0luZGV4OmldXTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFthbGxSZXN1bHRzIGFkZE9iamVjdDooaWQpcmVzdWx0XTsKKyAgICAgICAg
ICAgIFtpbmRleFBhdGhzIGFkZE9iamVjdDppbmRleFBhdGhdOworICAgICAgICB9CisgICAgICAg
IGN1cnJlbnRUb3BMZXZlbEluZGV4Kys7CisgICAgfQorCisgICAgVmVjdG9yPFJlZlB0cjxSYW5n
ZT4+IHJlc3VsdFJhbmdlczsKKyAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdl
LmdldCgpKTsKKyAgICBDRkluZGV4IGl0ZXJhdG9yQ291bnQgPSAwOworCisgICAgcmVzdWx0Q291
bnQgPSBbYWxsUmVzdWx0cyBjb3VudF07CisgICAgCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRo
ZSBhcnJheSBvZiB0aGUgZXhwYW5kZWQgcmVzdWx0cyB0byBjcmVhdGUgYSB2ZWN0b3Igb2YgUmFu
Z2Ugb2JqZWN0cyB0aGF0IGluZGljYXRlCisgICAgLy8gd2hlcmUgdGhlIERPTSBuZWVkcyB0byBi
ZSBtb2RpZmllZC4KKyAgICAvLyBFYWNoIHJlc3VsdCBjYW4gYmUgY29udGFpbmVkIGFsbCBpbiBv
bmUgdGV4dCBub2RlIG9yIGNhbiBzcGFuIG11bHRpcGxlIHRleHQgbm9kZXMuCisgICAgZm9yIChD
RkluZGV4IGkgPSAwOyBpIDwgcmVzdWx0Q291bnQ7IGkrKykgeworICAgICAgICBERFJlc3VsdFJl
ZiByZXN1bHQgPSAoRERSZXN1bHRSZWYpW2FsbFJlc3VsdHMgb2JqZWN0QXRJbmRleDppXTsKKyAg
ICAgICAgRERRdWVyeVJhbmdlIHF1ZXJ5UmFuZ2UgPSBERFJlc3VsdEdldFF1ZXJ5UmFuZ2VGb3JV
UkxpZmljYXRpb24ocmVzdWx0KTsKKyAgICAgICAgQ0ZJbmRleCBpdGVyYXRvclRhcmdldEFkdmFu
Y2VDb3VudCA9IChDRkluZGV4KUREU2NhblF1ZXJ5R2V0RnJhZ21lbnRNZXRhRGF0YShzY2FuUXVl
cnkuZ2V0KCksIHF1ZXJ5UmFuZ2Uuc3RhcnQucXVlcnlJbmRleCk7CisgICAgICAgIHdoaWxlIChp
dGVyYXRvckNvdW50IDwgaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsKKyAgICAgICAgICAg
IGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yQ291bnQrKzsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IGl0ZXJhdG9yLnJhbmdl
KCk7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBzdGFydFJhbmdlOworICAgICAg
ICBDRkluZGV4IGZyYWdtZW50SW5kZXggPSBxdWVyeVJhbmdlLnN0YXJ0LnF1ZXJ5SW5kZXg7Cisg
ICAgICAgIHdoaWxlIChmcmFnbWVudEluZGV4IDwgcXVlcnlSYW5nZS5lbmQucXVlcnlJbmRleCkg
eworICAgICAgICAgICAgZnJhZ21lbnRJbmRleCsrOworICAgICAgICAgICAgaXRlcmF0b3JUYXJn
ZXRBZHZhbmNlQ291bnQgPSAoQ0ZJbmRleClERFNjYW5RdWVyeUdldEZyYWdtZW50TWV0YURhdGEo
c2NhblF1ZXJ5LmdldCgpLCBmcmFnbWVudEluZGV4KTsKKyAgICAgICAgICAgIHdoaWxlIChpdGVy
YXRvckNvdW50IDwgaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsKKyAgICAgICAgICAgICAg
ICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaXRlcmF0b3JDb3VudCsrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kUmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChzdGFydFJhbmdlID09IGVuZFJhbmdlKQorICAgICAgICAg
ICAgcmVzdWx0UmFuZ2VzLmFwcGVuZChUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHN0YXJ0UmFuZ2Uu
Z2V0KCksIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0LCBxdWVyeVJhbmdlLmVuZC5vZmZzZXQgLSBx
dWVyeVJhbmdlLnN0YXJ0Lm9mZnNldCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1
bHRSYW5nZXMuYXBwZW5kKFJhbmdlOjpjcmVhdGUoc3RhcnRSYW5nZS0+b3duZXJEb2N1bWVudCgp
LCAmc3RhcnRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgZm1heChzdGFydFJhbmdlLT5zdGFydE9m
ZnNldCgpLCBxdWVyeVJhbmdlLnN0YXJ0Lm9mZnNldCksICZlbmRSYW5nZS0+ZW5kQ29udGFpbmVy
KCksIGZtYXgoZW5kUmFuZ2UtPmVuZE9mZnNldCgpLCBxdWVyeVJhbmdlLmVuZC5vZmZzZXQpKSk7
CisgICAgfQorICAgIAorICAgIENGVGltZVpvbmVSZWYgdHogPSBDRlRpbWVab25lQ29weURlZmF1
bHQoKTsKKyAgICBOU0RhdGUgKnJlZmVyZW5jZURhdGUgPSBbTlNEYXRlIGRhdGVdOworICAgIFRl
eHQqIGxhc3RUZXh0Tm9kZVRvVXBkYXRlID0gbnVsbHB0cjsKKyAgICBTdHJpbmcgbGFzdE5vZGVD
b250ZW50OworICAgIHNpemVfdCBjb250ZW50T2Zmc2V0ID0gMDsKKyAgICBERFF1ZXJ5T2Zmc2V0
IGxhc3RNb2RpZmllZFF1ZXJ5T2Zmc2V0ID0gRERRdWVyeU9mZnNldE1ha2VEdW1teSgpOworICAg
IAorICAgIC8vIEZvciBlYWNoIHJlc3VsdCBhZGQgdGhlIGxpbmsuCisgICAgLy8gU2luY2UgdGhl
cmUgY291bGQgYmUgbXVsdGlwbGUgcmVzdWx0cyBpbiB0aGUgc2FtZSB0ZXh0IG5vZGUsIHRoZSBu
b2RlIGlzIG9ubHkgbW9kaWZpZWQgd2hlbgorICAgIC8vIHdlIGFyZSBhYm91dCB0byBwcm9jZXNz
IGEgZGlmZmVyZW50IHRleHQgbm9kZS4KKyAgICBmb3IgKENGSW5kZXggcmVzdWx0SW5kZXggPSAw
OyByZXN1bHRJbmRleCA8IHJlc3VsdENvdW50OyByZXN1bHRJbmRleCsrKSB7CisgICAgICAgIERE
UmVzdWx0UmVmIGNvcmVSZXN1bHQgPSAoRERSZXN1bHRSZWYpW2FsbFJlc3VsdHMgb2JqZWN0QXRJ
bmRleDpyZXN1bHRJbmRleF07CisgICAgICAgIEREUXVlcnlSYW5nZSBxdWVyeVJhbmdlID0gRERS
ZXN1bHRHZXRRdWVyeVJhbmdlRm9yVVJMaWZpY2F0aW9uKGNvcmVSZXN1bHQpOworICAgICAgICBS
ZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gcmVzdWx0UmFuZ2VzW3Jlc3VsdEluZGV4XTsKKyAg
ICAgICAgTlNTdHJpbmcgKmlkZW50aWZpZXIgPSBbW2luZGV4UGF0aHMgb2JqZWN0QXRJbmRleDpy
ZXN1bHRJbmRleF0gZGF0YURldGVjdG9yU3RyaW5nVmFsdWVdOworICAgICAgICBOU1N0cmluZyAq
Y29ycmVzcG9uZGluZ1VSTCA9IGNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdChjb3JlUmVzdWx0
LCBpZGVudGlmaWVyLCByZWZlcmVuY2VEYXRlLCAoTlNUaW1lWm9uZSAqKXR6LCB0eXBlcyk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWNvcnJlc3BvbmRpbmdVUkwgfHwgc2VhcmNoRm9yTGlua1Jl
bW92aW5nRXhpc3RpbmdERExpbmtzKCZyZXN1bHRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgJnJl
c3VsdFJhbmdlLT5lbmRDb250YWluZXIoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIC8vIENvbXBhcmUgdGhlIHF1ZXJ5IG9mZnNldHMgdG8gbWFrZSBzdXJlIHdl
IGRvbid0IGdvIGJhY2t3YXJkcworICAgICAgICBpZiAoRERRdWVyeU9mZnNldENvbXBhcmUobGFz
dE1vZGlmaWVkUXVlcnlPZmZzZXQsIHF1ZXJ5UmFuZ2Uuc3RhcnQpID49IDApCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBsYXN0TW9kaWZpZWRRdWVyeU9mZnNldCA9IHF1ZXJ5UmFu
Z2UuZW5kOworCisgICAgICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHJlc3VsdFJhbmdlLmdldCgp
KTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAgICAgICAgICAgaWYgKCFpdC50ZXh0
KCkubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBpdC5yYW5nZSgpOworICAgICAgICAgICAg
aWYgKCFpczxUZXh0PihyYW5nZS0+c3RhcnRDb250YWluZXIoKSkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBOb2RlKiBwYXJlbnROb2RlID0gcmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCkucGFyZW50Tm9kZSgpOworICAgICAgICAgICAgVGV4dCYgY3VycmVudFRleHROb2Rl
ID0gZG93bmNhc3Q8VGV4dD4ocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpOworICAgICAgICAgICAg
RG9jdW1lbnQmIGRvY3VtZW50ID0gY3VycmVudFRleHROb2RlLmRvY3VtZW50KCk7CisgICAgICAg
ICAgICBTdHJpbmcgdGV4dE5vZGVEYXRhOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
bGFzdFRleHROb2RlVG9VcGRhdGUgIT0gJmN1cnJlbnRUZXh0Tm9kZSkgeworICAgICAgICAgICAg
ICAgIGlmIChsYXN0VGV4dE5vZGVUb1VwZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgbGFzdFRl
eHROb2RlVG9VcGRhdGUtPnNldERhdGEobGFzdE5vZGVDb250ZW50KTsKKyAgICAgICAgICAgICAg
ICBjb250ZW50T2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UtPnN0YXJ0T2Zm
c2V0KCkgPiAwKQorICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZURhdGEgPSBjdXJyZW50VGV4
dE5vZGUuc3Vic3RyaW5nRGF0YSgwLCByYW5nZS0+c3RhcnRPZmZzZXQoKSwgQVNTRVJUX05PX0VY
Q0VQVElPTik7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB0ZXh0Tm9kZURh
dGEgPSBjdXJyZW50VGV4dE5vZGUuc3Vic3RyaW5nRGF0YShjb250ZW50T2Zmc2V0LCByYW5nZS0+
c3RhcnRPZmZzZXQoKSAtIGNvbnRlbnRPZmZzZXQsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXRleHROb2RlRGF0YS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1bWVu
dCwgdGV4dE5vZGVEYXRhKTsKKyAgICAgICAgICAgICAgICBwYXJlbnROb2RlLT5pbnNlcnRCZWZv
cmUobmV3Tm9kZSwgJmN1cnJlbnRUZXh0Tm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAg
ICAgICAgICAgICAgY29udGVudE9mZnNldCA9IHJhbmdlLT5zdGFydE9mZnNldCgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGFjdHVhbCBh
bmNob3Igbm9kZSBhbmQgaW5zZXJ0IGl0IGJlZm9yZSB0aGUgY3VycmVudCBub2RlLgorICAgICAg
ICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLnN1YnN0cmluZ0RhdGEocmFuZ2Ut
PnN0YXJ0T2Zmc2V0KCksIHJhbmdlLT5lbmRPZmZzZXQoKSAtIHJhbmdlLT5zdGFydE9mZnNldCgp
LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXdOb2Rl
ID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50LCB0ZXh0Tm9kZURhdGEpOworICAgICAgICAgICAgcGFy
ZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsICZjdXJyZW50VGV4dE5vZGUsIEFTU0VSVF9O
T19FWENFUFRJT04pOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZWZQdHI8SFRNTEFuY2hv
ckVsZW1lbnQ+IGFuY2hvckVsZW1lbnQgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50KTsKKyAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldEhyZWYoY29ycmVzcG9uZGluZ1VS
TCk7CisgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXREaXIoImx0ciIpOworICAgICAgICAg
ICAgUmVmUHRyPEF0dHI+IGNvbG9yID0gZG93bmNhc3Q8RWxlbWVudD4ocGFyZW50Tm9kZSktPmdl
dEF0dHJpYnV0ZU5vZGUoImNvbG9yIik7CisgICAgICAgICAgICBpZiAoY29sb3IpCisgICAgICAg
ICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRy
LCBjb2xvci0+c3R5bGUoKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
YW5jaG9yRWxlbWVudC0+Tm9kZTo6YXBwZW5kQ2hpbGQobmV3Tm9kZSwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisgICAgICAgICAgICBwYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUoYW5jaG9yRWxlbWVu
dCwgJmN1cnJlbnRUZXh0Tm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICAv
LyBBZGQgYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIHRoaXMgVVJMaWZpY2F0aW9uIGFzIHRo
ZSByZXN1bHQgb2YgZGF0YSBkZXRlY3RvcnMuCisgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5z
ZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgKE5TU3RyaW5nICopa0RhdGFEZXRl
Y3RvcnNVUkxTY2hlbWUsIG51bGxBdG9tKSwgInRydWUiKTsKKyAgICAgICAgICAgIGFuY2hvckVs
ZW1lbnQtPnNldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAoTlNTdHJpbmcgKilr
RGF0YURldGVjdG9yc0F0dHJpYnV0ZVR5cGVLZXksIG51bGxBdG9tKSwgZGF0YURldGVjdG9yVHlw
ZUZvckNhdGVnb3J5KEREUmVzdWx0R2V0Q2F0ZWdvcnkoY29yZVJlc3VsdCkpKTsKKyAgICAgICAg
ICAgIGFuY2hvckVsZW1lbnQtPnNldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAo
TlNTdHJpbmcgKilrRGF0YURldGVjdG9yc0F0dHJpYnV0ZVJlc3VsdEtleSwgbnVsbEF0b20pLCBp
ZGVudGlmaWVyKTsKKyAgICAgICAgICAgIGNvbnRlbnRPZmZzZXQgPSByYW5nZS0+ZW5kT2Zmc2V0
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxhc3ROb2RlQ29udGVudCA9IGN1cnJlbnRU
ZXh0Tm9kZS5zdWJzdHJpbmdEYXRhKHJhbmdlLT5lbmRPZmZzZXQoKSwgY3VycmVudFRleHROb2Rl
Lmxlbmd0aCgpIC0gcmFuZ2UtPmVuZE9mZnNldCgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAg
ICAgICAgICAgIGxhc3RUZXh0Tm9kZVRvVXBkYXRlID0gJmN1cnJlbnRUZXh0Tm9kZTsKKyAgICAg
ICAgfSAgICAgICAgCisgICAgfQorICAgIGlmIChsYXN0VGV4dE5vZGVUb1VwZGF0ZSkKKyAgICAg
ICAgbGFzdFRleHROb2RlVG9VcGRhdGUtPnNldERhdGEobGFzdE5vZGVDb250ZW50KTsKKyAgICAK
KyAgICByZXR1cm4gW0REU2Nhbm5lclJlc3VsdCByZXN1bHRzRnJvbUNvcmVSZXN1bHRzOnNjYW5u
ZXJSZXN1bHRzLmdldCgpXTsKK30KKworI2Vsc2UKK05TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRl
dGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mLCBEYXRhRGV0ZWN0b3JUeXBlcykKK3sK
KyAgICByZXR1cm4gbmlsOworfQorI2VuZGlmCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiAxOTUzMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMyBAQAogI2luY2x1ZGUgIkZy
YW1lV2luLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorT0JKQ19DTEFTUyBOU0Fy
cmF5OworI2VuZGlmCisKICNpZiBQTEFURk9STShJT1MpCiBPQkpDX0NMQVNTIERPTUNTU1N0eWxl
RGVjbGFyYXRpb247CiBPQkpDX0NMQVNTIERPTU5vZGU7Ci1PQkpDX0NMQVNTIE5TQXJyYXk7CiBP
QkpDX0NMQVNTIE5TU3RyaW5nOwogI2VuZGlmCiAKQEAgLTE4NSw2ICsxODgsMTEgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBmcmFtZVNjYWxlRmFj
dG9yKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5n
ZWQoKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICB2b2lk
IHNldERhdGFEZXRlY3Rpb25SZXN1bHRzKE5TQXJyYXkgKnJlc3VsdHMpIHsgbV9kYXRhRGV0ZWN0
aW9uUmVzdWx0cyA9IHJlc3VsdHM7IH0KKyAgICAgICAgTlNBcnJheSAqZGF0YURldGVjdGlvblJl
c3VsdHMoKSBjb25zdCB7IHJldHVybiBtX2RhdGFEZXRlY3Rpb25SZXN1bHRzLmdldCgpOyB9Cisj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgY29uc3QgVmlld3BvcnRBcmd1bWVu
dHMmIHZpZXdwb3J0QXJndW1lbnRzKCkgY29uc3Q7CkBAIC0yOTIsNiArMzAwLDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRIYW5kbGVy
PiBtX2V2ZW50SGFuZGxlcjsKICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlv
bkNvbnRyb2xsZXI+IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKIAorI2lmIEVOQUJMRShEQVRBX0RF
VEVDVElPTikKKyAgICAgICAgUmV0YWluUHRyPE5TQXJyYXk+IG1fZGF0YURldGVjdGlvblJlc3Vs
dHM7CisjZW5kaWYKICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgIHZvaWQgYmV0dGVyQXBwcm94
aW1hdGVOb2RlKGNvbnN0IEludFBvaW50JiB0ZXN0UG9pbnQsIE5vZGVRdWFsaWZpZXIsIE5vZGUq
JiBiZXN0LCBOb2RlKiBmYWlsZWROb2RlLCBJbnRQb2ludCYgYmVzdFBvaW50LCBJbnRSZWN0JiBi
ZXN0UmVjdCwgY29uc3QgSW50UmVjdCYgdGVzdFJlY3QpOwogICAgICAgICBib29sIGhpdFRlc3RS
ZXN1bHRBdFZpZXdwb3J0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgdmlld3BvcnRMb2NhdGlv
biwgSGl0VGVzdFJlc3VsdCYsIEludFBvaW50JiBjZW50ZXIpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3BpL2NvY29hL0RhdGFEZXRlY3RvcnNDb3JlU1BJLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL0RhdGFEZXRlY3RvcnNDb3JlU1BJ
LmgJKHJldmlzaW9uIDE5NTMxNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2Nv
YS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwxMiBA
QAogCiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIAorI2ltcG9ydCA8RGF0YURldGVjdG9y
c0NvcmUvRERCaW5kZXJLZXlzX1ByaXZhdGUuaD4KKyNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3Jl
L0REU2Nhbm5lclJlc3VsdC5oPgogI2ltcG9ydCA8RGF0YURldGVjdG9yc0NvcmUvRGF0YURldGVj
dG9yc0NvcmUuaD4KLQorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPERhdGFEZXRlY3RvcnND
b3JlL0REVVJMaWZpZXIuaD4KKyNlbmRpZgogI2Vsc2UgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9T
REspCiAKIHR5cGVkZWYgZW51bSB7CkBAIC00MCw2ICs0NCw0NyBAQCBlbnVtIHsKICAgICBERFNj
YW5uZXJDb3B5UmVzdWx0c09wdGlvbnNOb092ZXJsYXAgPSAxIDw8IDAsCiB9OwogCitlbnVtIHsK
KyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25Ob25lID0gMCwKKyAgICBERFVSTGlm
aWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25SZWd1bGFyID0gMSA8PCAxLAorICAgIEREVVJMaWZpZXJQ
aG9uZU51bWJlckRldGVjdGlvblF1b3RlZFNob3J0cyA9IDEgPDwgMiwKKyAgICBERFVSTGlmaWVy
UGhvbmVOdW1iZXJEZXRlY3Rpb25VbnF1b3RlZFNob3J0cyA9IDEgPDwgMworfTsKK3R5cGVkZWYg
TlNVSW50ZWdlciBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25UeXBlczsKKwordHlwZWRl
ZiBlbnVtIF9fRERUZXh0Q29hbGVzY2luZ1R5cGUgeworICAgIEREVGV4dENvYWxlc2NpbmdUeXBl
Tm9uZSA9IDAsCisgICAgRERUZXh0Q29hbGVzY2luZ1R5cGVTcGFjZSA9IDEsCisgICAgRERUZXh0
Q29hbGVzY2luZ1R5cGVUYWIgPSAyLAorICAgIEREVGV4dENvYWxlc2NpbmdUeXBlTGluZUJyZWFr
ID0gMywKKyAgICBERFRleHRDb2FsZXNjaW5nVHlwZUhhcmRCcmVhayA9IDQsCit9IEREVGV4dENv
YWxlc2NpbmdUeXBlOworCit0eXBlZGVmIGVudW0geworICAgIEREUmVzdWx0Q2F0ZWdvcnlVbmtu
b3duID0gMCwKKyAgICBERFJlc3VsdENhdGVnb3J5TGluayA9IDEsCisgICAgRERSZXN1bHRDYXRl
Z29yeVBob25lTnVtYmVyID0gMiwKKyAgICBERFJlc3VsdENhdGVnb3J5QWRkcmVzcyA9IDMsCisg
ICAgRERSZXN1bHRDYXRlZ29yeUNhbGVuZGFyRXZlbnQgPSA0LAorICAgIEREUmVzdWx0Q2F0ZWdv
cnlNaXNjID0gNSwKK30gRERSZXN1bHRDYXRlZ29yeTsKKworZXh0ZXJuIENGU3RyaW5nUmVmIGNv
bnN0IEREQmluZGVySHR0cFVSTEtleTsKK2V4dGVybiBDRlN0cmluZ1JlZiBjb25zdCBEREJpbmRl
cldlYlVSTEtleTsKK2V4dGVybiBDRlN0cmluZ1JlZiBjb25zdCBEREJpbmRlck1haWxVUkxLZXk7
CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3QgRERCaW5kZXJHZW5lcmljVVJMS2V5OworZXh0ZXJu
IENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVyRW1haWxLZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYg
Y29uc3QgRERCaW5kZXJUcmFja2luZ051bWJlcktleTsKK2V4dGVybiBDRlN0cmluZ1JlZiBjb25z
dCBEREJpbmRlckZsaWdodEluZm9ybWF0aW9uS2V5OworZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0
IEREQmluZGVyU2lnbmF0dXJlQmxvY2tLZXk7CitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBERFVS
TFNjaGVtZTsKKworQGludGVyZmFjZSBERFNjYW5uZXJSZXN1bHQgOiBOU09iamVjdCA8TlNDb2Rp
bmcsIE5TU2VjdXJlQ29kaW5nPgorKyAoTlNBcnJheSAqKSByZXN1bHRzRnJvbUNvcmVSZXN1bHRz
OihDRkFycmF5UmVmKWNvcmVSZXN1bHRzOworQGVuZAorCisjZGVmaW5lIEREUmVzdWx0UHJvcGVy
dHlQYXNzaXZlRGlzcGxheSAgICgxIDw8IDApCisKICNlbmRpZiAvLyAhVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKIAogdHlwZWRlZiBzdHJ1Y3QgX19ERFJlc3VsdCAqRERSZXN1bHRSZWY7CkBAIC01
Niw1ICsxMDEsMTYgQEAgRERTY2FuUXVlcnlSZWYgRERTY2FuUXVlcnlDcmVhdGVGcm9tU3RyaQog
Qm9vbGVhbiBERFNjYW5uZXJTY2FuUXVlcnkoRERTY2FubmVyUmVmLCBERFNjYW5RdWVyeVJlZik7
CiBDRkFycmF5UmVmIEREU2Nhbm5lckNvcHlSZXN1bHRzV2l0aE9wdGlvbnMoRERTY2FubmVyUmVm
LCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnMpOwogQ0ZSYW5nZSBERFJlc3VsdEdldFJhbmdl
KEREUmVzdWx0UmVmKTsKK0NGU3RyaW5nUmVmIEREUmVzdWx0R2V0VHlwZShERFJlc3VsdFJlZiBy
ZXN1bHQpOworRERSZXN1bHRDYXRlZ29yeSBERFJlc3VsdEdldENhdGVnb3J5KEREUmVzdWx0UmVm
IHJlc3VsdCk7ICAgIAorQm9vbGVhbiBERFJlc3VsdElzUGFzdERhdGUoRERSZXN1bHRSZWYgcmVz
dWx0LCBDRkRhdGVSZWYgcmVmZXJlbmNlRGF0ZSwgQ0ZUaW1lWm9uZVJlZiByZWZlcmVuY2VUaW1l
Wm9uZSk7Cit2b2lkIEREU2NhblF1ZXJ5QWRkVGV4dEZyYWdtZW50KEREU2NhblF1ZXJ5UmVmIHNj
YW5RdWVyeSwgQ0ZTdHJpbmdSZWYgc3RyaW5nLCBDRlJhbmdlIHJhbmdlLCB2b2lkICogaWRlbnRp
ZmllciwgRERUZXh0RnJhZ21lbnRNb2RlIG1vZGUsIEREVGV4dENvYWxlc2NpbmdUeXBlIGNvYWxl
c2NpbmcpOwordm9pZCBERFNjYW5RdWVyeUFkZFNlcGFyYXRvcihERFNjYW5RdWVyeVJlZiBzY2Fu
UXVlcnksIEREVGV4dENvYWxlc2NpbmdUeXBlIGNvYWxlc2NpbmcpOwordm9pZCBERFNjYW5RdWVy
eUFkZExpbmVCcmVhayhERFNjYW5RdWVyeVJlZiBzY2FuUXVlcnkpOwordm9pZCAqRERTY2FuUXVl
cnlHZXRGcmFnbWVudE1ldGFEYXRhKEREU2NhblF1ZXJ5UmVmIHF1ZXJ5LCBDRkluZGV4IHF1ZXJ5
SW5kZXgpOworCisjaWYgUExBVEZPUk0oSU9TKQorTlNTdHJpbmcgKkREVVJMU3RyaW5nRm9yUmVz
dWx0KEREUmVzdWx0UmVmIGN1cnJlbnRSZXN1bHQsIE5TU3RyaW5nICogcmVzdWx0SWRlbnRpZmll
ciwgRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uVHlwZXMgaW5jbHVkaW5nVGVsR3JvdXBz
LCBOU0RhdGUgKiByZWZlcmVuY2VEYXRlLCBOU1RpbWVab25lICogcmVmZXJlbmNlVGltZVpvbmUp
OworI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTM5MikKKysrIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE2
LTAxLTIwICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IHN1cHBvcnQgZm9yIERhdGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3By
b2JsZW0vMjI4NTU5NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoZnJv
bVdLRGF0YURldGVjdG9yVHlwZXMpOiBDaGFuZ2VkIHBhcmFtZXRlciB0byB1aW50NjRfdCB0bwor
ICAgICAgICBzdWNjZXNzZnVsbHkgY29tcGFyZSBhZ2FpbnN0IFdLRGF0YURldGVjdG9yVHlwZUFs
bC4KKwogMjAxNi0wMS0yMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgogCiAgICAgICAgIEZpeCBDTWFrZSBidWlsZCBhZnRlciByMTk1MzAwLgpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlz
aW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDcgQEAgc3RhdGljIGJvb2wgc2hv
dWxkQWxsb3dQaWN0dXJlSW5QaWN0dXJlTQogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQV9ERVRF
Q1RJT04pCi1zdGF0aWMgV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXMgZnJvbVdLRGF0YURldGVj
dG9yVHlwZXModWludDMyX3QgdHlwZXMpCitzdGF0aWMgV2ViQ29yZTo6RGF0YURldGVjdG9yVHlw
ZXMgZnJvbVdLRGF0YURldGVjdG9yVHlwZXModWludDY0X3QgdHlwZXMpCiB7CiAgICAgaWYgKHN0
YXRpY19jYXN0PFdLRGF0YURldGVjdG9yVHlwZXM+KHR5cGVzKSA9PSBXS0RhdGFEZXRlY3RvclR5
cGVOb25lKQogICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZU5vbmU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269460</attachid>
            <date>2016-01-21 09:51:00 -0800</date>
            <delta_ts>2016-01-21 09:56:21 -0800</delta_ts>
            <desc>More build fixes</desc>
            <filename>ddwk2-part2.txt</filename>
            <type>text/plain</type>
            <size>29981</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTM5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAxLTIwICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgdGhlIGxvZ2ljIHRvIHBlcmZvcm0gZGF0YSBkZXRlY3Rpb24gYW5kIG1vZGlmeQor
ICAgICAgICB0aGUgZG9tIGJ5IGFkZGluZyBkYXRhIGRldGVjdG9yIGxpbmtzIGFzIGFwcHJvcHJp
YXRlLgorICAgICAgICBUaGUgZGF0YSBkZXRlY3RvciByZXN1bHRzIHJldHVybmVkIGJ5IGRldGVj
dENvbnRlbnRJblJhbmdlIGFyZQorICAgICAgICBzdG9yZWQgaW4gdGhlIEZyYW1lIG9iamVjdC4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oOgorICAgICAgICAqIGVk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKC1bTlNJbmRleFBhdGggZGF0
YURldGVjdG9yU3RyaW5nVmFsdWVdKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246
OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3Vs
dElzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IpOgorICAgICAg
ICAoV2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeSk6CisgICAgICAgIChXZWJD
b3JlOjpidWlsZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVj
dENvbnRlbnRJblJhbmdlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6c2V0RGF0YURldGVjdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OmRhdGFEZXRlY3Rpb25SZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29j
b2EvRGF0YURldGVjdG9yc0NvcmVTUEkuaDoKKwogMjAxNi0wMS0yMCAgRGF2aWQgS2lsemVyICA8
ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUgZGVsZWdhdGUgbWV0aG9kcyBkb24ndCBOVUxM
LWNoZWNrIG1faGFuZGxlLT5jbGllbnQoKQpAQCAtMjg2LDcgKzMxNSw2IEBACiAgICAgICAgIChX
ZWJDb3JlOjptYXRjaGVzRnV0dXJlQ3VlUHNldWRvQ2xhc3MpOgogICAgICAgICAoV2ViQ29yZTo6
bWF0Y2hlc1Bhc3RDdWVQc2V1ZG9DbGFzcyk6CiAKLT4+Pj4+Pj4gLnIxOTUzMTYKIDIwMTYtMDEt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTk1MTc5LgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgRERBY3Rpb25D
b250ZXh0OworT0JKQ19DTEFTUyBOU0FycmF5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUzLDcgKzU0LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUFyb3VuZEhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRh
Qm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKTsKICNlbmRpZgot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0
cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBOU0FycmF5ICpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+
JiBjb250ZXh0UmFuZ2UsIERhdGFEZXRlY3RvclR5cGVzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNDQgQEAKICNp
bXBvcnQgIlZpc2libGVVbml0cy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKIAorI2lmIFBM
QVRGT1JNKElPUykKK2NvbnN0IE5TU3RyaW5nICprRGF0YURldGVjdG9yc1VSTFNjaGVtZSA9IEAi
eC1hcHBsZS1kYXRhLWRldGVjdG9ycyI7Citjb25zdCBOU1N0cmluZyAqa0RhdGFEZXRlY3RvcnNB
dHRyaWJ1dGVUeXBlS2V5ID0gQCJ4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzLXR5cGUiOworY29uc3Qg
TlNTdHJpbmcgKmtEYXRhRGV0ZWN0b3JzQXR0cmlidXRlUmVzdWx0S2V5ID0gQCJ4LWFwcGxlLWRh
dGEtZGV0ZWN0b3JzLXJlc3VsdCI7CisKK0BpbnRlcmZhY2UgTlNJbmRleFBhdGggKERERXh0ZW5z
aW9ucykKKy0gKE5TU3RyaW5nICopZGF0YURldGVjdG9yU3RyaW5nVmFsdWU7CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBOU0luZGV4UGF0aCAoRERFeHRlbnNpb25zKQorCistIChOU1N0cmluZyAq
KWRhdGFEZXRlY3RvclN0cmluZ1ZhbHVlCit7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBzZWxm
Lmxlbmd0aDsKKyAgICAKKyAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMDoKKyAgICAg
ICAgcmV0dXJuIEAiIjsKKyAgICAgICAgCisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlbHUiLCAodW5zaWduZWQgbG9uZylbc2VsZiBpbmRl
eEF0UG9zaXRpb246MF1dOworCisgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIlbHUvJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3NlbGYgaW5kZXhB
dFBvc2l0aW9uOjBdLCAodW5zaWduZWQgbG9uZylbc2VsZiBpbmRleEF0UG9zaXRpb246MV1dOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+IGNvbXBvbmVudHMgPSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTpsZW5ndGhdKTsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0g
MCA7IGkgPCBsZW5ndGggOyBpKyspCisgICAgICAgICAgICAgICAgW2NvbXBvbmVudHMgYWRkT2Jq
ZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3Nl
bGYgaW5kZXhBdFBvc2l0aW9uOmldXV07CisgICAgICAgICAgICByZXR1cm4gW2NvbXBvbmVudHMg
Y29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiLyJdOworICAgICAgICB9CisgICAgfQorfQorCitA
ZW5kCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oTUFDKQpA
QCAtMTM4LDkgKzE3NiwzNzIgQEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVj
dGlvbgogICAgIHJldHVybiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwg
Y29udGV4dFJhbmdlLCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2Up
OwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgCitzdGF0aWMgQk9PTCByZXN1bHRJc1VSTChERFJlc3VsdFJlZiByZXN1bHQpCit7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBzdGF0aWMgTlNTZXQg
KnVybFR5cGVzID0gW1tOU1NldCBzZXRXaXRoT2JqZWN0czogKE5TU3RyaW5nICopRERCaW5kZXJI
dHRwVVJMS2V5LCAoTlNTdHJpbmcgKilEREJpbmRlcldlYlVSTEtleSwgKE5TU3RyaW5nICopRERC
aW5kZXJNYWlsVVJMS2V5LCAoTlNTdHJpbmcgKilEREJpbmRlckdlbmVyaWNVUkxLZXksIChOU1N0
cmluZyAqKUREQmluZGVyRW1haWxLZXksIG5pbF0gcmV0YWluXTsKKyAgICByZXR1cm4gW3VybFR5
cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKUREUmVzdWx0R2V0VHlwZShyZXN1bHQpXTsK
K30KKworc3RhdGljIE5TU3RyaW5nICpjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoRERSZXN1
bHRSZWYgY3VycmVudFJlc3VsdCwgTlNTdHJpbmcgKnJlc3VsdElkZW50aWZpZXIsIE5TRGF0ZSAq
IHJlZmVyZW5jZURhdGUsIE5TVGltZVpvbmUgKiByZWZlcmVuY2VUaW1lWm9uZSwgRGF0YURldGVj
dG9yVHlwZXMgZGV0ZWN0aW9uVHlwZXMpCit7CisgICAgaWYgKCFERFJlc3VsdEhhc1Byb3BlcnRp
ZXMoY3VycmVudFJlc3VsdCwgRERSZXN1bHRQcm9wZXJ0eVBhc3NpdmVEaXNwbGF5KSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25U
eXBlcyBwaG9uZVR5cGVzID0gKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZVBob25l
TnVtYmVyKSA/IEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvblJlZ3VsYXIgOiBERFVSTGlm
aWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25Ob25lOworICAgIEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdv
cnkgPSBERFJlc3VsdEdldENhdGVnb3J5KGN1cnJlbnRSZXN1bHQpOworICAgIENGU3RyaW5nUmVm
IHR5cGUgPSBERFJlc3VsdEdldFR5cGUoY3VycmVudFJlc3VsdCk7CisgICAgCisgICAgaWYgKCgo
ZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcykgJiYgKEREUmVzdWx0Q2F0
ZWdvcnlBZGRyZXNzID09IGNhdGVnb3J5KSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAm
IERhdGFEZXRlY3RvclR5cGVUcmFja2luZ051bWJlcikgJiYgKENGU3RyaW5nQ29tcGFyZShEREJp
bmRlclRyYWNraW5nTnVtYmVyS2V5LCB0eXBlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpCisg
ICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlRmxpZ2h0KSAmJiAo
Q0ZTdHJpbmdDb21wYXJlKEREQmluZGVyRmxpZ2h0SW5mb3JtYXRpb25LZXksIHR5cGUsIDApID09
IGtDRkNvbXBhcmVFcXVhbFRvKSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFE
ZXRlY3RvclR5cGVQaG9uZU51bWJlcikgJiYgKEREUmVzdWx0Q2F0ZWdvcnlQaG9uZU51bWJlciA9
PSBjYXRlZ29yeSkpCisgICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JU
eXBlTGluaykgJiYgcmVzdWx0SXNVUkwoY3VycmVudFJlc3VsdCkpKSB7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gRERVUkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0SWRl
bnRpZmllciwgcGhvbmVUeXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUpOwor
ICAgIH0KKyAgICBpZiAoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZUNhbGVuZGFy
RXZlbnQpICYmIChERFJlc3VsdENhdGVnb3J5Q2FsZW5kYXJFdmVudCA9PSBjYXRlZ29yeSkpIHsK
KyAgICAgICAgaWYgKCFERFJlc3VsdElzUGFzdERhdGUoY3VycmVudFJlc3VsdCwgKENGRGF0ZVJl
ZilyZWZlcmVuY2VEYXRlLCAoQ0ZUaW1lWm9uZVJlZilyZWZlcmVuY2VUaW1lWm9uZSkpCisgICAg
ICAgICAgICByZXR1cm4gRERVUkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0
SWRlbnRpZmllciwgcGhvbmVUeXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUp
OworICAgIH0KKyAgICByZXR1cm4gbmlsOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVSZXN1bHRM
aW5rc0Zyb21BbmNob3IoTm9kZSAqbm9kZSwgTm9kZSAqbm9kZVBhcmVudCkKK3sKKyAgICAvLyBQ
ZXJmb3JtIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIGZvciBhbmNob3Igbm9kZXMsIHdoaWNoIGhhdmUg
dGhlIEREVVJMU2NoZW1lIGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZSwKKyAgICAvLyB0YWtlIHRoZWly
IGNoaWxkcmVuIGFuZCBpbnNlcnQgdGhlbSBiZWZvcmUgdGhlIGFuY2hvciwKKyAgICAvLyBhbmQg
dGhlbiByZW1vdmUgdGhlIGFuY2hvci4KKyAgICAKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBCT09MIG5vZGVJc0REQW5jaG9yID0gaXM8SFRNTEFuY2hvckVsZW1l
bnQ+KCpub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJM
U2NoZW1lKSA9PSAidHJ1ZSI7CisgICAgCisgICAgUmVmUHRyPE5vZGVMaXN0PiBjaGlsZHJlbiA9
IG5vZGUtPmNoaWxkTm9kZXMoKTsKKyAgICB1bnNpZ25lZCBjaGlsZENvdW50ID0gY2hpbGRyZW4t
Pmxlbmd0aCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7
CisgICAgICAgIE5vZGUgKmNoaWxkID0gY2hpbGRyZW4tPml0ZW0oaSk7CisgICAgICAgIGlmIChp
czxFbGVtZW50PigqY2hpbGQpKQorICAgICAgICAgICAgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5j
aG9yKGNoaWxkLCBub2RlKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vZGVJc0REQW5jaG9yICYm
IG5vZGVQYXJlbnQpIHsKKyAgICAgICAgY2hpbGRyZW4gPSBub2RlLT5jaGlsZE5vZGVzKCk7Cisg
ICAgICAgIGNoaWxkQ291bnQgPSBjaGlsZHJlbi0+bGVuZ3RoKCk7CisgICAgICAgIAorICAgICAg
ICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNoaWxkcmVuIGFuZCBtb3ZlIHRoZW0gYWxsIG9udG8gdGhl
IHNhbWUgbGV2ZWwgYXMgdGhpcyBhbmNob3IuCisgICAgICAgIC8vIFJlbW92ZSB0aGUgYW5jaG9y
IGFmdGVyd2FyZHMuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsg
aSsrKSB7CisgICAgICAgICAgICBOb2RlICpjaGlsZCA9IGNoaWxkcmVuLT5pdGVtKDApOyAvLyBj
aGlsZHJlbiBjaGFuZ2UgZHVlIHRvIGluc2VydGlvbiwgYWx3YXlzIHVzZSBpZHggMAorICAgICAg
ICAgICAgbm9kZVBhcmVudC0+aW5zZXJ0QmVmb3JlKGNoaWxkLCBub2RlLCBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKKyAgICAgICAgfQorICAgICAgICBub2RlUGFyZW50LT5yZW1vdmVDaGlsZChub2Rl
LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHNlYXJjaEZv
ckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyhOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGVuZE5v
ZGUpCit7CisgICAgTm9kZSAqbm9kZSA9IHN0YXJ0Tm9kZTsKKyAgICB3aGlsZSAobm9kZSkgewor
ICAgICAgICAKKyAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKKyAg
ICAgICAgICAgIGlmIChkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJM
U2NoZW1lKSAhPSAidHJ1ZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3Iobm9kZSwgbm9kZS0+cGFyZW50RWxlbWVu
dCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUgPT0gZW5kTm9kZSkg
eworICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgdGhlIGVuZCBub2RlIGFuZCBubyBsaW5rLCBy
ZXR1cm4gZmFsc2UgdW5sZXNzIGFuIGFuY2VzdG9yIG5vZGUgaXMgYSBsaW5rLgorICAgICAgICAg
ICAgLy8gVGhlIG9ubHkgYW5jZXN0b3JzIG5vdCB0ZXN0ZWQgYXQgdGhpcyBwb2ludCBhcmUgaW4g
dGhlIGRpcmVjdCBsaW5lIGZyb20gc2VsZidzIHBhcmVudCB0byB0aGUgdG9wLgorICAgICAgICAg
ICAgbm9kZSA9IHN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgd2hpbGUgKG5v
ZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0
dHJpYnV0ZShERFVSTFNjaGVtZSkgIT0gInRydWUiKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFu
Y2hvcihub2RlLCBub2RlLT5wYXJlbnRFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBS
ZWZQdHI8Tm9kZUxpc3Q+IGNoaWxkTm9kZXMgPSBub2RlLT5jaGlsZE5vZGVzKCk7CisgICAgICAg
IGlmIChjaGlsZE5vZGVzLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIG5vZGUgPSBjaGlsZE5vZGVz
LT5pdGVtKDApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUgKm5ld05vZGUgPSBu
b2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgTm9kZSAqcGFyZW50Tm9kZSA9IG5vZGU7
CisgICAgICAgICAgICB3aGlsZSAoIW5ld05vZGUpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnRO
b2RlID0gcGFyZW50Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghcGFy
ZW50Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIG5ld05vZGUgPSBwYXJlbnROb2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbm9kZSA9IG5ld05vZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQogCi12b2lkIERhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJl
ZlB0cjxSYW5nZT4mLCBEYXRhRGV0ZWN0b3JUeXBlcykKK3N0YXRpYyBOU1N0cmluZyAqZGF0YURl
dGVjdG9yVHlwZUZvckNhdGVnb3J5KEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdvcnkpCiB7CisgICAg
c3dpdGNoIChjYXRlZ29yeSkgeworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeVBob25lTnVtYmVy
OgorICAgICAgICByZXR1cm4gQCJ0ZWxlcGhvbmUiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29y
eUxpbms6CisgICAgICAgIHJldHVybiBAImxpbmsiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29y
eUFkZHJlc3M6CisgICAgICAgIHJldHVybiBAImFkZHJlc3MiOworICAgIGNhc2UgRERSZXN1bHRD
YXRlZ29yeUNhbGVuZGFyRXZlbnQ6CisgICAgICAgIHJldHVybiBAImNhbGVuZGFyLWV2ZW50IjsK
KyAgICBjYXNlIEREUmVzdWx0Q2F0ZWdvcnlNaXNjOgorICAgICAgICByZXR1cm4gQCJtaXNjIjsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQCIiOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgYnVpbGRRdWVyeShERFNjYW5RdWVyeVJlZiBzY2FuUXVlcnksIFJhbmdlKiBjb250ZXh0UmFu
Z2UpCit7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywg
c3RvcCBhdCB0aGUgZmlyc3QgaGFyZCBicmVhay4KKyAgICBjb25zdCBDRkluZGV4IG1heEZyYWdt
ZW50V2l0aEhhcmRCcmVhayA9IDEwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVt
YmVyIG9mIGZyYWdtZW50cywgd2Ugc3RvcCBhdCB0aGUgbGluZS4KKyAgICBjb25zdCBDRkluZGV4
IG1heEZyYWdtZW50V2l0aExpbmVicmVhayA9IDUwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVy
IHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywgd2Ugc3RvcCBhdCB0aGUgc3BhY2UuCisgICAgY29u
c3QgQ0ZJbmRleCBtYXhGcmFnbWVudFNwYWNlID0gMTAwMDA7CisKKyAgICBDRkNoYXJhY3RlclNl
dFJlZiB3aGl0ZVNwYWNlc1NldCA9IENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFy
YWN0ZXJTZXRXaGl0ZXNwYWNlQW5kTmV3bGluZSk7CisgICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgbmV3
TGluZXNTZXQgPSBDRkNoYXJhY3RlclNldEdldFByZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0TmV3
bGluZSk7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZTsKKyAgICBDRkluZGV4IGl0
ZXJhdG9yQ291bnQgPSAwOworICAgIENGSW5kZXggZnJhZ21lbnRDb3VudCA9IDA7CisgICAgCisg
ICAgLy8gQnVpbGQgdGhlIHNjYW4gcXVlcnkgYWRkaW5nIHNlcGFyYXRvcnMuCisgICAgLy8gRm9y
IGVhY2ggZnJhZ21lbnQgdGhlIGl0ZXJhdG9yIGluY3JlbWVudCBpcyBzdG9yZWQgYXMgbWV0YWRh
dGEuCisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdlKTsgIWl0ZXJh
dG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSwgaXRlcmF0b3JDb3VudCsrKSB7CisgICAg
ICAgIHNpemVfdCBjdXJyZW50VGV4dExlbmd0aCA9IGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKTsK
KyAgICAgICAgaWYgKCFjdXJyZW50VGV4dExlbmd0aCkgeworICAgICAgICAgICAgRERTY2FuUXVl
cnlBZGRTZXBhcmF0b3Ioc2NhblF1ZXJ5LCBERFRleHRDb2FsZXNjaW5nVHlwZUhhcmRCcmVhayk7
CisgICAgICAgICAgICBpZiAoaXRlcmF0b3JDb3VudCA+IG1heEZyYWdtZW50V2l0aEhhcmRCcmVh
aykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIC8vIFRlc3QgZm9yIHdoaXRlIHNwYWNlIG5vZGVzLCB3ZSdyZSBjb2FsZXNj
aW5nIHRoZW0uCisgICAgICAgIGNvbnN0IFVuaUNoYXIgKmN1cnJlbnRDaGFyUHRyID0gaXRlcmF0
b3IudGV4dCgpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOworICAgICAgICAKKyAgICAgICAgQk9P
TCBjb250YWluc09ubHlXaGl0ZVNwYWNlID0gWUVTOworICAgICAgICBCT09MIGhhc1RhYiA9IE5P
OworICAgICAgICBCT09MIGhhc05ld2xpbmUgPSBOTzsKKyAgICAgICAgaW50IG5ic3BDb3VudCA9
IDA7CisgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGN1cnJlbnRUZXh0TGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIGlmICghQ0ZDaGFyYWN0ZXJTZXRJc0NoYXJhY3Rlck1lbWJl
cih3aGl0ZVNwYWNlc1NldCwgKmN1cnJlbnRDaGFyUHRyKSkgeworICAgICAgICAgICAgICAgIGNv
bnRhaW5zT25seVdoaXRlU3BhY2UgPSBOTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKENGQ2hhcmFjdGVyU2V0SXND
aGFyYWN0ZXJNZW1iZXIobmV3TGluZXNTZXQsICpjdXJyZW50Q2hhclB0cikpCisgICAgICAgICAg
ICAgICAgaGFzTmV3bGluZSA9IFlFUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKCpjdXJyZW50Q2hh
clB0ciA9PSAnXHQnKQorICAgICAgICAgICAgICAgIGhhc1RhYiA9IFlFUzsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29uc2VjdXRpdmUgbm9uIGJyZWFrYWJsZSBzcGFj
ZXMgYXJlIG1vc3QgbGlrZWx5IHNpbXVsYXRlZCB0YWJzLgorICAgICAgICAgICAgaWYgKCpjdXJy
ZW50Q2hhclB0ciA9PSAweGEwKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrbmJzcENvdW50ID4g
MikKKyAgICAgICAgICAgICAgICAgICAgaGFzVGFiID0gWUVTOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgbmJzcENvdW50ID0gMDsKKworICAgICAgICAgICAgY3VycmVudENo
YXJQdHIrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29udGFpbnNPbmx5V2hpdGVTcGFjZSkg
eworICAgICAgICAgICAgaWYgKGhhc05ld2xpbmUpIHsKKyAgICAgICAgICAgICAgICBERFNjYW5R
dWVyeUFkZExpbmVCcmVhayhzY2FuUXVlcnkpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRv
ckNvdW50ID4gbWF4RnJhZ21lbnRXaXRoTGluZWJyZWFrKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRERTY2FuUXVlcnlB
ZGRTZXBhcmF0b3Ioc2NhblF1ZXJ5LCBoYXNUYWIgPyBERFRleHRDb2FsZXNjaW5nVHlwZVRhYiA6
IEREVGV4dENvYWxlc2NpbmdUeXBlU3BhY2UpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRv
ckNvdW50ID4gbWF4RnJhZ21lbnRTcGFjZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjdXJyZW50VGV4dCA9IGFkb3B0Q0YoQ0ZT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBpdGVyYXRvci50
ZXh0KCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCksIGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKSkp
OworICAgICAgICBERFNjYW5RdWVyeUFkZFRleHRGcmFnbWVudChzY2FuUXVlcnksIGN1cnJlbnRU
ZXh0LmdldCgpLCBDRlJhbmdlTWFrZSgwLCBjdXJyZW50VGV4dExlbmd0aCksICh2b2lkICopaXRl
cmF0b3JDb3VudCwgKEREVGV4dEZyYWdtZW50TW9kZSkwLCBERFRleHRDb2FsZXNjaW5nVHlwZU5v
bmUpOworICAgICAgICBmcmFnbWVudENvdW50Kys7CisgICAgfQogfQogCitOU0FycmF5ICpEYXRh
RGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFu
Z2UsIERhdGFEZXRlY3RvclR5cGVzIHR5cGVzKQoreworICAgIFJldGFpblB0cjxERFNjYW5uZXJS
ZWY+IHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRh
cmQsIDAsIG51bGxwdHIpKTsKKyAgICBSZXRhaW5QdHI8RERTY2FuUXVlcnlSZWY+IHNjYW5RdWVy
eSA9IGFkb3B0Q0YoRERTY2FuUXVlcnlDcmVhdGUoTlVMTCkpOworICAgIGJ1aWxkUXVlcnkoc2Nh
blF1ZXJ5LmdldCgpLCBjb250ZXh0UmFuZ2UuZ2V0KCkpOworICAgIAorICAgIC8vIEZJWE1FOiB3
ZSBzaG91bGQgYWRkIGEgdGltZW91dCB0byB0aGlzIGNhbGwgdG8gbWFrZSBzdXJlIGl0IGRvZXNu
J3QgdGFrZSB0b28gbXVjaCB0aW1lLgorICAgIGlmICghRERTY2FubmVyU2NhblF1ZXJ5KHNjYW5u
ZXIuZ2V0KCksIHNjYW5RdWVyeS5nZXQoKSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHNjYW5uZXJSZXN1bHRzID0gYWRvcHRDRihERFNjYW5u
ZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCksIEREU2Nhbm5lckNvcHlSZXN1
bHRzT3B0aW9uc0ZvclBhc3NpdmVVc2UgfCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNDb2Fs
ZXNjZVNpZ25hdHVyZXMpKTsKKyAgICBpZiAoIXNjYW5uZXJSZXN1bHRzKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIAorICAgIENGSW5kZXggcmVzdWx0Q291bnQgPSBDRkFycmF5R2V0Q291bnQo
c2Nhbm5lclJlc3VsdHMuZ2V0KCkpOworICAgIGlmICghcmVzdWx0Q291bnQpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhbGxSZXN1bHRz
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiBpbmRleFBhdGhzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XSk7CisgICAgTlNJbnRlZ2VyIGN1cnJlbnRUb3BMZXZlbEluZGV4ID0gMDsKKwor
ICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2Nhbm5lciByZXN1bHRzIHRvIGZpbmQgc2lnbmF0
dXJlcyBhbmQgZXh0cmFjdCBhbGwgdGhlIHN1YnJlc3VsdHMgd2hpbGUKKyAgICAvLyBwb3B1bGF0
aW5nIHRoZSBhcnJheSBvZiBpbmRleCBwYXRocyB0byB1c2UgaW4gdGhlIGhyZWYgb2YgdGhlIGFu
Y2hvcnMgYmVpbmcgY3JlYXRlZC4KKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCByZXN1bHRD
b3VudDsgaSsrKSB7CisgICAgICAgIEREUmVzdWx0UmVmIHJlc3VsdCA9IChERFJlc3VsdFJlZilD
RkFycmF5R2V0VmFsdWVBdEluZGV4KHNjYW5uZXJSZXN1bHRzLmdldCgpLCBpKTsKKyAgICAgICAg
TlNJbmRleFBhdGggKmluZGV4UGF0aCA9IFtOU0luZGV4UGF0aCBpbmRleFBhdGhXaXRoSW5kZXg6
Y3VycmVudFRvcExldmVsSW5kZXhdOworICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKEREUmVz
dWx0R2V0VHlwZShyZXN1bHQpLCBEREJpbmRlclNpZ25hdHVyZUJsb2NrS2V5LCAwKSA9PSBrQ0ZD
b21wYXJlRXF1YWxUbykgeworICAgICAgICAgICAgQ0ZBcnJheVJlZiBzdWJyZXN1bHRzID0gRERS
ZXN1bHRHZXRTdWJSZXN1bHRzKHJlc3VsdCk7CisgICAgICAgICAgICBbYWxsUmVzdWx0cyBhZGRP
YmplY3RzRnJvbUFycmF5OihOU0FycmF5ICopc3VicmVzdWx0c107CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMCA7IGkgPCBbKE5TQXJyYXkgKilzdWJyZXN1
bHRzIGNvdW50XSA7IGkrKykKKyAgICAgICAgICAgICAgICBbaW5kZXhQYXRocyBhZGRPYmplY3Q6
W2luZGV4UGF0aCBpbmRleFBhdGhCeUFkZGluZ0luZGV4OmldXTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFthbGxSZXN1bHRzIGFkZE9iamVjdDooaWQpcmVzdWx0XTsKKyAgICAgICAg
ICAgIFtpbmRleFBhdGhzIGFkZE9iamVjdDppbmRleFBhdGhdOworICAgICAgICB9CisgICAgICAg
IGN1cnJlbnRUb3BMZXZlbEluZGV4Kys7CisgICAgfQorCisgICAgVmVjdG9yPFJlZlB0cjxSYW5n
ZT4+IHJlc3VsdFJhbmdlczsKKyAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdl
LmdldCgpKTsKKyAgICBDRkluZGV4IGl0ZXJhdG9yQ291bnQgPSAwOworCisgICAgcmVzdWx0Q291
bnQgPSBbYWxsUmVzdWx0cyBjb3VudF07CisgICAgCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRo
ZSBhcnJheSBvZiB0aGUgZXhwYW5kZWQgcmVzdWx0cyB0byBjcmVhdGUgYSB2ZWN0b3Igb2YgUmFu
Z2Ugb2JqZWN0cyB0aGF0IGluZGljYXRlCisgICAgLy8gd2hlcmUgdGhlIERPTSBuZWVkcyB0byBi
ZSBtb2RpZmllZC4KKyAgICAvLyBFYWNoIHJlc3VsdCBjYW4gYmUgY29udGFpbmVkIGFsbCBpbiBv
bmUgdGV4dCBub2RlIG9yIGNhbiBzcGFuIG11bHRpcGxlIHRleHQgbm9kZXMuCisgICAgZm9yIChD
RkluZGV4IGkgPSAwOyBpIDwgcmVzdWx0Q291bnQ7IGkrKykgeworICAgICAgICBERFJlc3VsdFJl
ZiByZXN1bHQgPSAoRERSZXN1bHRSZWYpW2FsbFJlc3VsdHMgb2JqZWN0QXRJbmRleDppXTsKKyAg
ICAgICAgRERRdWVyeVJhbmdlIHF1ZXJ5UmFuZ2UgPSBERFJlc3VsdEdldFF1ZXJ5UmFuZ2VGb3JV
UkxpZmljYXRpb24ocmVzdWx0KTsKKyAgICAgICAgQ0ZJbmRleCBpdGVyYXRvclRhcmdldEFkdmFu
Y2VDb3VudCA9IChDRkluZGV4KUREU2NhblF1ZXJ5R2V0RnJhZ21lbnRNZXRhRGF0YShzY2FuUXVl
cnkuZ2V0KCksIHF1ZXJ5UmFuZ2Uuc3RhcnQucXVlcnlJbmRleCk7CisgICAgICAgIHdoaWxlIChp
dGVyYXRvckNvdW50IDwgaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsKKyAgICAgICAgICAg
IGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yQ291bnQrKzsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IGl0ZXJhdG9yLnJhbmdl
KCk7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBzdGFydFJhbmdlOworICAgICAg
ICBDRkluZGV4IGZyYWdtZW50SW5kZXggPSBxdWVyeVJhbmdlLnN0YXJ0LnF1ZXJ5SW5kZXg7Cisg
ICAgICAgIHdoaWxlIChmcmFnbWVudEluZGV4IDwgcXVlcnlSYW5nZS5lbmQucXVlcnlJbmRleCkg
eworICAgICAgICAgICAgZnJhZ21lbnRJbmRleCsrOworICAgICAgICAgICAgaXRlcmF0b3JUYXJn
ZXRBZHZhbmNlQ291bnQgPSAoQ0ZJbmRleClERFNjYW5RdWVyeUdldEZyYWdtZW50TWV0YURhdGEo
c2NhblF1ZXJ5LmdldCgpLCBmcmFnbWVudEluZGV4KTsKKyAgICAgICAgICAgIHdoaWxlIChpdGVy
YXRvckNvdW50IDwgaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsKKyAgICAgICAgICAgICAg
ICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaXRlcmF0b3JDb3VudCsrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kUmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChzdGFydFJhbmdlID09IGVuZFJhbmdlKQorICAgICAgICAg
ICAgcmVzdWx0UmFuZ2VzLmFwcGVuZChUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHN0YXJ0UmFuZ2Uu
Z2V0KCksIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0LCBxdWVyeVJhbmdlLmVuZC5vZmZzZXQgLSBx
dWVyeVJhbmdlLnN0YXJ0Lm9mZnNldCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1
bHRSYW5nZXMuYXBwZW5kKFJhbmdlOjpjcmVhdGUoc3RhcnRSYW5nZS0+b3duZXJEb2N1bWVudCgp
LCAmc3RhcnRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgZm1heChzdGFydFJhbmdlLT5zdGFydE9m
ZnNldCgpLCBxdWVyeVJhbmdlLnN0YXJ0Lm9mZnNldCksICZlbmRSYW5nZS0+ZW5kQ29udGFpbmVy
KCksIGZtYXgoZW5kUmFuZ2UtPmVuZE9mZnNldCgpLCBxdWVyeVJhbmdlLmVuZC5vZmZzZXQpKSk7
CisgICAgfQorICAgIAorICAgIENGVGltZVpvbmVSZWYgdHogPSBDRlRpbWVab25lQ29weURlZmF1
bHQoKTsKKyAgICBOU0RhdGUgKnJlZmVyZW5jZURhdGUgPSBbTlNEYXRlIGRhdGVdOworICAgIFRl
eHQqIGxhc3RUZXh0Tm9kZVRvVXBkYXRlID0gbnVsbHB0cjsKKyAgICBTdHJpbmcgbGFzdE5vZGVD
b250ZW50OworICAgIHNpemVfdCBjb250ZW50T2Zmc2V0ID0gMDsKKyAgICBERFF1ZXJ5T2Zmc2V0
IGxhc3RNb2RpZmllZFF1ZXJ5T2Zmc2V0ID0gey0xLCAwfTsKKyAgICAKKyAgICAvLyBGb3IgZWFj
aCByZXN1bHQgYWRkIHRoZSBsaW5rLgorICAgIC8vIFNpbmNlIHRoZXJlIGNvdWxkIGJlIG11bHRp
cGxlIHJlc3VsdHMgaW4gdGhlIHNhbWUgdGV4dCBub2RlLCB0aGUgbm9kZSBpcyBvbmx5IG1vZGlm
aWVkIHdoZW4KKyAgICAvLyB3ZSBhcmUgYWJvdXQgdG8gcHJvY2VzcyBhIGRpZmZlcmVudCB0ZXh0
IG5vZGUuCisgICAgZm9yIChDRkluZGV4IHJlc3VsdEluZGV4ID0gMDsgcmVzdWx0SW5kZXggPCBy
ZXN1bHRDb3VudDsgcmVzdWx0SW5kZXgrKykgeworICAgICAgICBERFJlc3VsdFJlZiBjb3JlUmVz
dWx0ID0gKEREUmVzdWx0UmVmKVthbGxSZXN1bHRzIG9iamVjdEF0SW5kZXg6cmVzdWx0SW5kZXhd
OworICAgICAgICBERFF1ZXJ5UmFuZ2UgcXVlcnlSYW5nZSA9IEREUmVzdWx0R2V0UXVlcnlSYW5n
ZUZvclVSTGlmaWNhdGlvbihjb3JlUmVzdWx0KTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByZXN1
bHRSYW5nZSA9IHJlc3VsdFJhbmdlc1tyZXN1bHRJbmRleF07CisgICAgICAgIE5TU3RyaW5nICpp
ZGVudGlmaWVyID0gW1tpbmRleFBhdGhzIG9iamVjdEF0SW5kZXg6cmVzdWx0SW5kZXhdIGRhdGFE
ZXRlY3RvclN0cmluZ1ZhbHVlXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvcnJlc3BvbmRpbmdVUkwg
PSBjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoY29yZVJlc3VsdCwgaWRlbnRpZmllciwgcmVm
ZXJlbmNlRGF0ZSwgKE5TVGltZVpvbmUgKil0eiwgdHlwZXMpOworICAgICAgICAKKyAgICAgICAg
aWYgKCFjb3JyZXNwb25kaW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERM
aW5rcygmcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksICZyZXN1bHRSYW5nZS0+ZW5kQ29u
dGFpbmVyKCkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAvLyBD
b21wYXJlIHRoZSBxdWVyeSBvZmZzZXRzIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnbyBiYWNrd2Fy
ZHMKKyAgICAgICAgaWYgKEREUXVlcnlPZmZzZXRDb21wYXJlKGxhc3RNb2RpZmllZFF1ZXJ5T2Zm
c2V0LCBxdWVyeVJhbmdlLnN0YXJ0KSA+PSAwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgbGFzdE1vZGlmaWVkUXVlcnlPZmZzZXQgPSBxdWVyeVJhbmdlLmVuZDsKKworICAgICAg
ICBmb3IgKFRleHRJdGVyYXRvciBpdChyZXN1bHRSYW5nZS5nZXQoKSk7ICFpdC5hdEVuZCgpOyBp
dC5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIGlmICghaXQudGV4dCgpLmxlbmd0aCgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gaXQucmFuZ2UoKTsKKyAgICAgICAgICAgIGlmICghaXM8VGV4dD4ocmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgTm9kZSogcGFyZW50Tm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpLnBhcmVudE5v
ZGUoKTsKKyAgICAgICAgICAgIFRleHQmIGN1cnJlbnRUZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+
KHJhbmdlLT5zdGFydENvbnRhaW5lcigpKTsKKyAgICAgICAgICAgIERvY3VtZW50JiBkb2N1bWVu
dCA9IGN1cnJlbnRUZXh0Tm9kZS5kb2N1bWVudCgpOworICAgICAgICAgICAgU3RyaW5nIHRleHRO
b2RlRGF0YTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGxhc3RUZXh0Tm9kZVRvVXBk
YXRlICE9ICZjdXJyZW50VGV4dE5vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdFRleHRO
b2RlVG9VcGRhdGUpCisgICAgICAgICAgICAgICAgICAgIGxhc3RUZXh0Tm9kZVRvVXBkYXRlLT5z
ZXREYXRhKGxhc3ROb2RlQ29udGVudCk7CisgICAgICAgICAgICAgICAgY29udGVudE9mZnNldCA9
IDA7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLT5zdGFydE9mZnNldCgpID4gMCkKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLnN1YnN0cmluZ0Rh
dGEoMCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHRO
b2RlLnN1YnN0cmluZ0RhdGEoY29udGVudE9mZnNldCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgLSBj
b250ZW50T2Zmc2V0LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCF0ZXh0Tm9kZURhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgUmVm
UHRyPE5vZGU+IG5ld05vZGUgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIHRleHROb2RlRGF0YSk7
CisgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsICZjdXJy
ZW50VGV4dE5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgICAgIGNvbnRl
bnRPZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhY3R1YWwgYW5jaG9yIG5vZGUgYW5kIGlu
c2VydCBpdCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgICAgICAgIHRleHROb2RlRGF0
YSA9IGN1cnJlbnRUZXh0Tm9kZS5zdWJzdHJpbmdEYXRhKHJhbmdlLT5zdGFydE9mZnNldCgpLCBy
YW5nZS0+ZW5kT2Zmc2V0KCkgLSByYW5nZS0+c3RhcnRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IFRleHQ6OmNyZWF0ZShk
b2N1bWVudCwgdGV4dE5vZGVEYXRhKTsKKyAgICAgICAgICAgIHBhcmVudE5vZGUtPmluc2VydEJl
Zm9yZShuZXdOb2RlLCAmY3VycmVudFRleHROb2RlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgUmVmUHRyPEhUTUxBbmNob3JFbGVtZW50PiBhbmNob3JF
bGVtZW50ID0gSFRNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgICAgICAg
ICBhbmNob3JFbGVtZW50LT5zZXRIcmVmKGNvcnJlc3BvbmRpbmdVUkwpOworICAgICAgICAgICAg
YW5jaG9yRWxlbWVudC0+c2V0RGlyKCJsdHIiKTsKKyAgICAgICAgICAgIFJlZlB0cjxBdHRyPiBj
b2xvciA9IGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudE5vZGUpLT5nZXRBdHRyaWJ1dGVOb2RlKCJj
b2xvciIpOworICAgICAgICAgICAgaWYgKGNvbG9yKQorICAgICAgICAgICAgICAgIGFuY2hvckVs
ZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0ciwgY29sb3ItPnN0eWxlKCkt
PmNzc1RleHQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPk5v
ZGU6OmFwcGVuZENoaWxkKG5ld05vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAg
ICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKGFuY2hvckVsZW1lbnQsICZjdXJyZW50VGV4dE5v
ZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgLy8gQWRkIGEgc3BlY2lhbCBh
dHRyaWJ1dGUgdG8gbWFyayB0aGlzIFVSTGlmaWNhdGlvbiBhcyB0aGUgcmVzdWx0IG9mIGRhdGEg
ZGV0ZWN0b3JzLgorICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRlKFF1YWxp
ZmllZE5hbWUobnVsbEF0b20sIChOU1N0cmluZyAqKWtEYXRhRGV0ZWN0b3JzVVJMU2NoZW1lLCBu
dWxsQXRvbSksICJ0cnVlIik7CisgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1
dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgKE5TU3RyaW5nICopa0RhdGFEZXRlY3RvcnNBdHRy
aWJ1dGVUeXBlS2V5LCBudWxsQXRvbSksIGRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeShERFJl
c3VsdEdldENhdGVnb3J5KGNvcmVSZXN1bHQpKSk7CisgICAgICAgICAgICBhbmNob3JFbGVtZW50
LT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgKE5TU3RyaW5nICopa0RhdGFE
ZXRlY3RvcnNBdHRyaWJ1dGVSZXN1bHRLZXksIG51bGxBdG9tKSwgaWRlbnRpZmllcik7CisgICAg
ICAgICAgICBjb250ZW50T2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBsYXN0Tm9kZUNvbnRlbnQgPSBjdXJyZW50VGV4dE5vZGUuc3Vic3RyaW5n
RGF0YShyYW5nZS0+ZW5kT2Zmc2V0KCksIGN1cnJlbnRUZXh0Tm9kZS5sZW5ndGgoKSAtIHJhbmdl
LT5lbmRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICBsYXN0VGV4
dE5vZGVUb1VwZGF0ZSA9ICZjdXJyZW50VGV4dE5vZGU7CisgICAgICAgIH0gICAgICAgIAorICAg
IH0KKyAgICBpZiAobGFzdFRleHROb2RlVG9VcGRhdGUpCisgICAgICAgIGxhc3RUZXh0Tm9kZVRv
VXBkYXRlLT5zZXREYXRhKGxhc3ROb2RlQ29udGVudCk7CisgICAgCisgICAgcmV0dXJuIFtERFNj
YW5uZXJSZXN1bHQgcmVzdWx0c0Zyb21Db3JlUmVzdWx0czpzY2FubmVyUmVzdWx0cy5nZXQoKV07
Cit9CisKKyNlbHNlCitOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5n
ZShSZWZQdHI8UmFuZ2U+JiwgRGF0YURldGVjdG9yVHlwZXMpCit7CisgICAgcmV0dXJuIG5pbDsK
K30KKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAko
cmV2aXNpb24gMTk1MzE2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NywxMCArNDcsMTMgQEAKICNpbmNsdWRlICJGcmFtZVdpbi5oIgogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShDT0NPQSkKK09CSkNfQ0xBU1MgTlNBcnJheTsKKyNlbmRpZgorCiAj
aWYgUExBVEZPUk0oSU9TKQogT0JKQ19DTEFTUyBET01DU1NTdHlsZURlY2xhcmF0aW9uOwogT0JK
Q19DTEFTUyBET01Ob2RlOwotT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU1N0cmlu
ZzsKICNlbmRpZgogCkBAIC0xODUsNiArMTg4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZnJhbWVTY2FsZUZhY3RvcigpIGNvbnN0OwogCiAg
ICAgICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CisgICAgICAgIAor
I2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICAgICAgdm9pZCBzZXREYXRhRGV0ZWN0aW9u
UmVzdWx0cyhOU0FycmF5ICpyZXN1bHRzKSB7IG1fZGF0YURldGVjdGlvblJlc3VsdHMgPSByZXN1
bHRzOyB9CisgICAgICAgIE5TQXJyYXkgKmRhdGFEZXRlY3Rpb25SZXN1bHRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhRGV0ZWN0aW9uUmVzdWx0cy5nZXQoKTsgfQorI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgICAgIGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJiB2aWV3cG9ydEFyZ3Vt
ZW50cygpIGNvbnN0OwpAQCAtMjkyLDYgKzMwMCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEV2ZW50SGFuZGxlcj4gbV9ldmVudEhhbmRsZXI7
CiAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Db250cm9sbGVyPiBtX2Fu
aW1hdGlvbkNvbnRyb2xsZXI7CiAKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgICAg
IFJldGFpblB0cjxOU0FycmF5PiBtX2RhdGFEZXRlY3Rpb25SZXN1bHRzOworI2VuZGlmCiAjaWYg
UExBVEZPUk0oSU9TKQogICAgICAgICB2b2lkIGJldHRlckFwcHJveGltYXRlTm9kZShjb25zdCBJ
bnRQb2ludCYgdGVzdFBvaW50LCBOb2RlUXVhbGlmaWVyLCBOb2RlKiYgYmVzdCwgTm9kZSogZmFp
bGVkTm9kZSwgSW50UG9pbnQmIGJlc3RQb2ludCwgSW50UmVjdCYgYmVzdFJlY3QsIGNvbnN0IElu
dFJlY3QmIHRlc3RSZWN0KTsKICAgICAgICAgYm9vbCBoaXRUZXN0UmVzdWx0QXRWaWV3cG9ydExv
Y2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHZpZXdwb3J0TG9jYXRpb24sIEhpdFRlc3RSZXN1bHQm
LCBJbnRQb2ludCYgY2VudGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9j
b2NvYS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NwaS9jb2NvYS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oCShyZXZpc2lvbiAxOTUz
MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvRGF0YURldGVjdG9yc0Nv
cmVTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTIgQEAKIAogI2lmIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspCiAKKyNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3JlL0REQmluZGVyS2V5
c19Qcml2YXRlLmg+CisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzQ29yZS9ERFNjYW5uZXJSZXN1bHQu
aD4KICNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3JlL0RhdGFEZXRlY3RvcnNDb3JlLmg+Ci0KKyNp
ZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzQ29yZS9ERFVSTGlmaWVyLmg+
CisjZW5kaWYKICNlbHNlIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiB0eXBlZGVmIGVu
dW0gewpAQCAtNDAsNiArNDQsNzYgQEAgZW51bSB7CiAgICAgRERTY2FubmVyQ29weVJlc3VsdHNP
cHRpb25zTm9PdmVybGFwID0gMSA8PCAwLAogfTsKIAorZW51bSB7CisgICAgRERVUkxpZmllclBo
b25lTnVtYmVyRGV0ZWN0aW9uTm9uZSA9IDAsCisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0
ZWN0aW9uUmVndWxhciA9IDEgPDwgMSwKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rp
b25RdW90ZWRTaG9ydHMgPSAxIDw8IDIsCisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0
aW9uVW5xdW90ZWRTaG9ydHMgPSAxIDw8IDMKK307Cit0eXBlZGVmIE5TVUludGVnZXIgRERVUkxp
ZmllclBob25lTnVtYmVyRGV0ZWN0aW9uVHlwZXM7CisKK3R5cGVkZWYgZW51bSBfX0REVGV4dENv
YWxlc2NpbmdUeXBlIHsKKyAgICBERFRleHRDb2FsZXNjaW5nVHlwZU5vbmUgPSAwLAorICAgIERE
VGV4dENvYWxlc2NpbmdUeXBlU3BhY2UgPSAxLAorICAgIEREVGV4dENvYWxlc2NpbmdUeXBlVGFi
ID0gMiwKKyAgICBERFRleHRDb2FsZXNjaW5nVHlwZUxpbmVCcmVhayA9IDMsCisgICAgRERUZXh0
Q29hbGVzY2luZ1R5cGVIYXJkQnJlYWsgPSA0LAorfSBERFRleHRDb2FsZXNjaW5nVHlwZTsKKwor
dHlwZWRlZiBlbnVtIHsKKyAgICBERFJlc3VsdENhdGVnb3J5VW5rbm93biA9IDAsCisgICAgRERS
ZXN1bHRDYXRlZ29yeUxpbmsgPSAxLAorICAgIEREUmVzdWx0Q2F0ZWdvcnlQaG9uZU51bWJlciA9
IDIsCisgICAgRERSZXN1bHRDYXRlZ29yeUFkZHJlc3MgPSAzLAorICAgIEREUmVzdWx0Q2F0ZWdv
cnlDYWxlbmRhckV2ZW50ID0gNCwKKyAgICBERFJlc3VsdENhdGVnb3J5TWlzYyA9IDUsCit9IERE
UmVzdWx0Q2F0ZWdvcnk7CisKK3R5cGVkZWYgQ0ZfT1BUSU9OUyhDRkluZGV4LCBERFNjYW5uZXJD
b3B5UmVzdWx0c09wdGlvbnMpIHsKKyAgICBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNOb25l
ID0gMCwKKyAgICBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNOb092ZXJsYXAgPSAxIDw8IDAs
CisgICAgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zQ29hbGVzY2VTaWduYXR1cmVzID0gMSA8
PCAxLAorICAgIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc1JlbW92ZUxvbmVseUFkZHJlc3Nl
cyA9IDEgPDwgMiwKKyAgICBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNLZWVwT25seVNob3J0
UGhvbmVOdW1iZXJzID0gMSA8PCAzLAorICAgIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc0tl
ZXBPbmx5UXVvdGVkU2hvcnRQaG9uZU51bWJlcnMgPSAxIDw8IDQsCisgICAgRERTY2FubmVyQ29w
eVJlc3VsdHNPcHRpb25zTWVyZ2VSZXN1bHRzID0gMSA8PCA1LAorICAgIEREU2Nhbm5lckNvcHlS
ZXN1bHRzT3B0aW9uc1JlbW92ZUFtYmlndW91c0RhdGVzID0gMSA8PCA2LAorICAgIEREU2Nhbm5l
ckNvcHlSZXN1bHRzT3B0aW9uc1JlbW92ZVVuc3VwcG9ydGVkVVJMU2NoZW1lcyA9IDEgPDwgNywK
KyAgICBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNNYXJrSW5zdGVhZE9mUmVtb3ZlID0gMSA8
PCA4LAorICAgIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc1JlbW92ZUFtYmlndW91c0Zvckxv
Y2FsZSA9IDEgPDwgOSwKK307CisKK3R5cGVkZWYgZW51bSBfX0REVGV4dEZyYWdtZW50VHlwZSB7
CisgICAgRERUZXh0RnJhZ21lbnRUeXBlVHJpbVdoaXRlU3BhY2UgPSAgMHgxLAorICAgIEREVGV4
dEZyYWdtZW50VHlwZUlnbm9yZUNSTEYgPSAgMHgyLAorfSBERFRleHRGcmFnbWVudE1vZGU7CisK
K2V4dGVybiBDRlN0cmluZ1JlZiBjb25zdCBEREJpbmRlckh0dHBVUkxLZXk7CitleHRlcm4gQ0ZT
dHJpbmdSZWYgY29uc3QgRERCaW5kZXJXZWJVUkxLZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29u
c3QgRERCaW5kZXJNYWlsVVJMS2V5OworZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVy
R2VuZXJpY1VSTEtleTsKK2V4dGVybiBDRlN0cmluZ1JlZiBjb25zdCBEREJpbmRlckVtYWlsS2V5
OworZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVyVHJhY2tpbmdOdW1iZXJLZXk7Citl
eHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3QgRERCaW5kZXJGbGlnaHRJbmZvcm1hdGlvbktleTsKK2V4
dGVybiBDRlN0cmluZ1JlZiBjb25zdCBEREJpbmRlclNpZ25hdHVyZUJsb2NrS2V5OworZXh0ZXJu
IE5TU3RyaW5nICogY29uc3QgRERVUkxTY2hlbWU7CisKK0BpbnRlcmZhY2UgRERTY2FubmVyUmVz
dWx0IDogTlNPYmplY3QgPE5TQ29kaW5nLCBOU1NlY3VyZUNvZGluZz4KKysgKE5TQXJyYXkgKikg
cmVzdWx0c0Zyb21Db3JlUmVzdWx0czooQ0ZBcnJheVJlZiljb3JlUmVzdWx0czsKK0BlbmQKKwor
I2RlZmluZSBERFJlc3VsdFByb3BlcnR5UGFzc2l2ZURpc3BsYXkgICAoMSA8PCAwKQorCit0eXBl
ZGVmIHN0cnVjdCBfX0REUXVlcnlPZmZzZXQgeworICAgIENGSW5kZXggICAgICAgICBxdWVyeUlu
ZGV4OworICAgIENGSW5kZXggICAgICAgICBvZmZzZXQ7Cit9IEREUXVlcnlPZmZzZXQ7CisKK3R5
cGVkZWYgc3RydWN0IF9fRERRdWVyeVJhbmdlIHsKKyAgICBERFF1ZXJ5T2Zmc2V0ICAgICBzdGFy
dDsKKyAgICBERFF1ZXJ5T2Zmc2V0ICAgICBlbmQ7Cit9IEREUXVlcnlSYW5nZTsKKwogI2VuZGlm
IC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiB0eXBlZGVmIHN0cnVjdCBfX0REUmVzdWx0
ICpERFJlc3VsdFJlZjsKQEAgLTQ4LDEzICsxMjIsMjkgQEAgdHlwZWRlZiBzdHJ1Y3QgX19ERFNj
YW5uZXIgKkREU2Nhbm5lclJlZgogCiB0eXBlZGVmIENGSW5kZXggRERTY2FubmVyQ29weVJlc3Vs
dHNPcHRpb25zOwogdHlwZWRlZiBDRkluZGV4IEREU2Nhbm5lck9wdGlvbnM7CitleHRlcm4gY29u
c3QgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9u
c0ZvclBhc3NpdmVVc2U7CiAKIGV4dGVybiAiQyIgewogCiBERFNjYW5uZXJSZWYgRERTY2FubmVy
Q3JlYXRlKEREU2Nhbm5lclR5cGUsIEREU2Nhbm5lck9wdGlvbnMsIENGRXJyb3JSZWYqKTsKK0RE
U2NhblF1ZXJ5UmVmIEREU2NhblF1ZXJ5Q3JlYXRlKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvcik7
CiBERFNjYW5RdWVyeVJlZiBERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoQ0ZBbGxvY2F0b3JS
ZWYsIENGU3RyaW5nUmVmLCBDRlJhbmdlKTsKIEJvb2xlYW4gRERTY2FubmVyU2NhblF1ZXJ5KERE
U2Nhbm5lclJlZiwgRERTY2FuUXVlcnlSZWYpOwogQ0ZBcnJheVJlZiBERFNjYW5uZXJDb3B5UmVz
dWx0c1dpdGhPcHRpb25zKEREU2Nhbm5lclJlZiwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25z
KTsKIENGUmFuZ2UgRERSZXN1bHRHZXRSYW5nZShERFJlc3VsdFJlZik7CitDRlN0cmluZ1JlZiBE
RFJlc3VsdEdldFR5cGUoRERSZXN1bHRSZWYgcmVzdWx0KTsKK0REUmVzdWx0Q2F0ZWdvcnkgRERS
ZXN1bHRHZXRDYXRlZ29yeShERFJlc3VsdFJlZiByZXN1bHQpOyAgICAKK0Jvb2xlYW4gRERSZXN1
bHRJc1Bhc3REYXRlKEREUmVzdWx0UmVmIHJlc3VsdCwgQ0ZEYXRlUmVmIHJlZmVyZW5jZURhdGUs
IENGVGltZVpvbmVSZWYgcmVmZXJlbmNlVGltZVpvbmUpOwordm9pZCBERFNjYW5RdWVyeUFkZFRl
eHRGcmFnbWVudChERFNjYW5RdWVyeVJlZiBzY2FuUXVlcnksIENGU3RyaW5nUmVmIHN0cmluZywg
Q0ZSYW5nZSByYW5nZSwgdm9pZCAqIGlkZW50aWZpZXIsIEREVGV4dEZyYWdtZW50TW9kZSBtb2Rl
LCBERFRleHRDb2FsZXNjaW5nVHlwZSBjb2FsZXNjaW5nKTsKK3ZvaWQgRERTY2FuUXVlcnlBZGRT
ZXBhcmF0b3IoRERTY2FuUXVlcnlSZWYgc2NhblF1ZXJ5LCBERFRleHRDb2FsZXNjaW5nVHlwZSBj
b2FsZXNjaW5nKTsKK3ZvaWQgRERTY2FuUXVlcnlBZGRMaW5lQnJlYWsoRERTY2FuUXVlcnlSZWYg
c2NhblF1ZXJ5KTsKK3ZvaWQgKkREU2NhblF1ZXJ5R2V0RnJhZ21lbnRNZXRhRGF0YShERFNjYW5R
dWVyeVJlZiBxdWVyeSwgQ0ZJbmRleCBxdWVyeUluZGV4KTsKK2Jvb2wgRERSZXN1bHRIYXNQcm9w
ZXJ0aWVzKEREUmVzdWx0UmVmIHJlc3VsdCwgQ0ZJbmRleCBwcm9wZXJ0eVNldCk7CitDRkFycmF5
UmVmIEREUmVzdWx0R2V0U3ViUmVzdWx0cyhERFJlc3VsdFJlZiByZXN1bHQpOworRERRdWVyeVJh
bmdlIEREUmVzdWx0R2V0UXVlcnlSYW5nZUZvclVSTGlmaWNhdGlvbihERFJlc3VsdFJlZiByZXN1
bHQpOworICAgIAorI2lmIFBMQVRGT1JNKElPUykKK05TU3RyaW5nICpERFVSTFN0cmluZ0ZvclJl
c3VsdChERFJlc3VsdFJlZiBjdXJyZW50UmVzdWx0LCBOU1N0cmluZyAqIHJlc3VsdElkZW50aWZp
ZXIsIEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvblR5cGVzIGluY2x1ZGluZ1RlbEdyb3Vw
cywgTlNEYXRlICogcmVmZXJlbmNlRGF0ZSwgTlNUaW1lWm9uZSAqIHJlZmVyZW5jZVRpbWVab25l
KTsKKyNlbmRpZgogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTUzOTIpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAx
Ni0wMS0yMCAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciBEYXRhRGV0ZWN0b3JzIGluIFdLIChpT1MpLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyOTg5CisgICAgICAgIHJkYXI6Ly9w
cm9ibGVtLzIyODU1OTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKGZy
b21XS0RhdGFEZXRlY3RvclR5cGVzKTogQ2hhbmdlZCBwYXJhbWV0ZXIgdG8gdWludDY0X3QgdG8K
KyAgICAgICAgc3VjY2Vzc2Z1bGx5IGNvbXBhcmUgYWdhaW5zdCBXS0RhdGFEZXRlY3RvclR5cGVB
bGwuCisKIDIwMTYtMDEtMjAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBGaXggQ01ha2UgYnVpbGQgYWZ0ZXIgcjE5NTMwMC4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZp
c2lvbiAxOTUzMTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw3IEBAIHN0YXRpYyBib29sIHNo
b3VsZEFsbG93UGljdHVyZUluUGljdHVyZU0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFfREVU
RUNUSU9OKQotc3RhdGljIFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVzIGZyb21XS0RhdGFEZXRl
Y3RvclR5cGVzKHVpbnQzMl90IHR5cGVzKQorc3RhdGljIFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5
cGVzIGZyb21XS0RhdGFEZXRlY3RvclR5cGVzKHVpbnQ2NF90IHR5cGVzKQogewogICAgIGlmIChz
dGF0aWNfY2FzdDxXS0RhdGFEZXRlY3RvclR5cGVzPih0eXBlcykgPT0gV0tEYXRhRGV0ZWN0b3JU
eXBlTm9uZSkKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVOb25lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269462</attachid>
            <date>2016-01-21 09:56:21 -0800</date>
            <delta_ts>2016-01-21 10:15:15 -0800</delta_ts>
            <desc>More build fixes and style</desc>
            <filename>ddwk2-part2.txt</filename>
            <type>text/plain</type>
            <size>29803</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTM5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAxLTIwICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgdGhlIGxvZ2ljIHRvIHBlcmZvcm0gZGF0YSBkZXRlY3Rpb24gYW5kIG1vZGlmeQor
ICAgICAgICB0aGUgZG9tIGJ5IGFkZGluZyBkYXRhIGRldGVjdG9yIGxpbmtzIGFzIGFwcHJvcHJp
YXRlLgorICAgICAgICBUaGUgZGF0YSBkZXRlY3RvciByZXN1bHRzIHJldHVybmVkIGJ5IGRldGVj
dENvbnRlbnRJblJhbmdlIGFyZQorICAgICAgICBzdG9yZWQgaW4gdGhlIEZyYW1lIG9iamVjdC4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oOgorICAgICAgICAqIGVk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKC1bTlNJbmRleFBhdGggZGF0
YURldGVjdG9yU3RyaW5nVmFsdWVdKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246
OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3Vs
dElzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IpOgorICAgICAg
ICAoV2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeSk6CisgICAgICAgIChXZWJD
b3JlOjpidWlsZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVj
dENvbnRlbnRJblJhbmdlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6c2V0RGF0YURldGVjdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OmRhdGFEZXRlY3Rpb25SZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29j
b2EvRGF0YURldGVjdG9yc0NvcmVTUEkuaDoKKwogMjAxNi0wMS0yMCAgRGF2aWQgS2lsemVyICA8
ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUgZGVsZWdhdGUgbWV0aG9kcyBkb24ndCBOVUxM
LWNoZWNrIG1faGFuZGxlLT5jbGllbnQoKQpAQCAtMjg2LDcgKzMxNSw2IEBACiAgICAgICAgIChX
ZWJDb3JlOjptYXRjaGVzRnV0dXJlQ3VlUHNldWRvQ2xhc3MpOgogICAgICAgICAoV2ViQ29yZTo6
bWF0Y2hlc1Bhc3RDdWVQc2V1ZG9DbGFzcyk6CiAKLT4+Pj4+Pj4gLnIxOTUzMTYKIDIwMTYtMDEt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTk1MTc5LgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgRERBY3Rpb25D
b250ZXh0OworT0JKQ19DTEFTUyBOU0FycmF5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUzLDcgKzU0LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUFyb3VuZEhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRh
Qm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKTsKICNlbmRpZgot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0
cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBOU0FycmF5ICpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+
JiBjb250ZXh0UmFuZ2UsIERhdGFEZXRlY3RvclR5cGVzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNDQgQEAKICNp
bXBvcnQgIlZpc2libGVVbml0cy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKIAorI2lmIFBM
QVRGT1JNKElPUykKK2NvbnN0IE5TU3RyaW5nICprRGF0YURldGVjdG9yc1VSTFNjaGVtZSA9IEAi
eC1hcHBsZS1kYXRhLWRldGVjdG9ycyI7Citjb25zdCBOU1N0cmluZyAqa0RhdGFEZXRlY3RvcnNB
dHRyaWJ1dGVUeXBlS2V5ID0gQCJ4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzLXR5cGUiOworY29uc3Qg
TlNTdHJpbmcgKmtEYXRhRGV0ZWN0b3JzQXR0cmlidXRlUmVzdWx0S2V5ID0gQCJ4LWFwcGxlLWRh
dGEtZGV0ZWN0b3JzLXJlc3VsdCI7CisKK0BpbnRlcmZhY2UgTlNJbmRleFBhdGggKERERXh0ZW5z
aW9ucykKKy0gKE5TU3RyaW5nICopZGF0YURldGVjdG9yU3RyaW5nVmFsdWU7CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBOU0luZGV4UGF0aCAoRERFeHRlbnNpb25zKQorCistIChOU1N0cmluZyAq
KWRhdGFEZXRlY3RvclN0cmluZ1ZhbHVlCit7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBzZWxm
Lmxlbmd0aDsKKyAgICAKKyAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMDoKKyAgICAg
ICAgcmV0dXJuIEAiIjsKKyAgICAgICAgCisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlbHUiLCAodW5zaWduZWQgbG9uZylbc2VsZiBpbmRl
eEF0UG9zaXRpb246MF1dOworCisgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIlbHUvJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3NlbGYgaW5kZXhB
dFBvc2l0aW9uOjBdLCAodW5zaWduZWQgbG9uZylbc2VsZiBpbmRleEF0UG9zaXRpb246MV1dOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+IGNvbXBvbmVudHMgPSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTpsZW5ndGhdKTsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0g
MCA7IGkgPCBsZW5ndGggOyBpKyspCisgICAgICAgICAgICAgICAgW2NvbXBvbmVudHMgYWRkT2Jq
ZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3Nl
bGYgaW5kZXhBdFBvc2l0aW9uOmldXV07CisgICAgICAgICAgICByZXR1cm4gW2NvbXBvbmVudHMg
Y29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiLyJdOworICAgICAgICB9CisgICAgfQorfQorCitA
ZW5kCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oTUFDKQpA
QCAtMTM4LDkgKzE3NiwzNzIgQEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVj
dGlvbgogICAgIHJldHVybiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwg
Y29udGV4dFJhbmdlLCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2Up
OwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgCitzdGF0aWMgQk9PTCByZXN1bHRJc1VSTChERFJlc3VsdFJlZiByZXN1bHQpCit7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBzdGF0aWMgTlNTZXQg
KnVybFR5cGVzID0gW1tOU1NldCBzZXRXaXRoT2JqZWN0czogKE5TU3RyaW5nICopRERCaW5kZXJI
dHRwVVJMS2V5LCAoTlNTdHJpbmcgKilEREJpbmRlcldlYlVSTEtleSwgKE5TU3RyaW5nICopRERC
aW5kZXJNYWlsVVJMS2V5LCAoTlNTdHJpbmcgKilEREJpbmRlckdlbmVyaWNVUkxLZXksIChOU1N0
cmluZyAqKUREQmluZGVyRW1haWxLZXksIG5pbF0gcmV0YWluXTsKKyAgICByZXR1cm4gW3VybFR5
cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKUREUmVzdWx0R2V0VHlwZShyZXN1bHQpXTsK
K30KKworc3RhdGljIE5TU3RyaW5nICpjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoRERSZXN1
bHRSZWYgY3VycmVudFJlc3VsdCwgTlNTdHJpbmcgKnJlc3VsdElkZW50aWZpZXIsIE5TRGF0ZSAq
IHJlZmVyZW5jZURhdGUsIE5TVGltZVpvbmUgKiByZWZlcmVuY2VUaW1lWm9uZSwgRGF0YURldGVj
dG9yVHlwZXMgZGV0ZWN0aW9uVHlwZXMpCit7CisgICAgaWYgKCFERFJlc3VsdEhhc1Byb3BlcnRp
ZXMoY3VycmVudFJlc3VsdCwgRERSZXN1bHRQcm9wZXJ0eVBhc3NpdmVEaXNwbGF5KSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25U
eXBlcyBwaG9uZVR5cGVzID0gKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZVBob25l
TnVtYmVyKSA/IEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvblJlZ3VsYXIgOiBERFVSTGlm
aWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25Ob25lOworICAgIEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdv
cnkgPSBERFJlc3VsdEdldENhdGVnb3J5KGN1cnJlbnRSZXN1bHQpOworICAgIENGU3RyaW5nUmVm
IHR5cGUgPSBERFJlc3VsdEdldFR5cGUoY3VycmVudFJlc3VsdCk7CisgICAgCisgICAgaWYgKCgo
ZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcykgJiYgKEREUmVzdWx0Q2F0
ZWdvcnlBZGRyZXNzID09IGNhdGVnb3J5KSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAm
IERhdGFEZXRlY3RvclR5cGVUcmFja2luZ051bWJlcikgJiYgKENGU3RyaW5nQ29tcGFyZShEREJp
bmRlclRyYWNraW5nTnVtYmVyS2V5LCB0eXBlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpCisg
ICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlRmxpZ2h0KSAmJiAo
Q0ZTdHJpbmdDb21wYXJlKEREQmluZGVyRmxpZ2h0SW5mb3JtYXRpb25LZXksIHR5cGUsIDApID09
IGtDRkNvbXBhcmVFcXVhbFRvKSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFE
ZXRlY3RvclR5cGVQaG9uZU51bWJlcikgJiYgKEREUmVzdWx0Q2F0ZWdvcnlQaG9uZU51bWJlciA9
PSBjYXRlZ29yeSkpCisgICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JU
eXBlTGluaykgJiYgcmVzdWx0SXNVUkwoY3VycmVudFJlc3VsdCkpKSB7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gRERVUkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0SWRl
bnRpZmllciwgcGhvbmVUeXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUpOwor
ICAgIH0KKyAgICBpZiAoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZUNhbGVuZGFy
RXZlbnQpICYmIChERFJlc3VsdENhdGVnb3J5Q2FsZW5kYXJFdmVudCA9PSBjYXRlZ29yeSkpIHsK
KyAgICAgICAgaWYgKCFERFJlc3VsdElzUGFzdERhdGUoY3VycmVudFJlc3VsdCwgKENGRGF0ZVJl
ZilyZWZlcmVuY2VEYXRlLCAoQ0ZUaW1lWm9uZVJlZilyZWZlcmVuY2VUaW1lWm9uZSkpCisgICAg
ICAgICAgICByZXR1cm4gRERVUkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0
SWRlbnRpZmllciwgcGhvbmVUeXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUp
OworICAgIH0KKyAgICByZXR1cm4gbmlsOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVSZXN1bHRM
aW5rc0Zyb21BbmNob3IoTm9kZSAqbm9kZSwgTm9kZSAqbm9kZVBhcmVudCkKK3sKKyAgICAvLyBQ
ZXJmb3JtIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIGZvciBhbmNob3Igbm9kZXMsIHdoaWNoIGhhdmUg
dGhlIEREVVJMU2NoZW1lIGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZSwKKyAgICAvLyB0YWtlIHRoZWly
IGNoaWxkcmVuIGFuZCBpbnNlcnQgdGhlbSBiZWZvcmUgdGhlIGFuY2hvciwKKyAgICAvLyBhbmQg
dGhlbiByZW1vdmUgdGhlIGFuY2hvci4KKyAgICAKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBCT09MIG5vZGVJc0REQW5jaG9yID0gaXM8SFRNTEFuY2hvckVsZW1l
bnQ+KCpub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJM
U2NoZW1lKSA9PSAidHJ1ZSI7CisgICAgCisgICAgUmVmUHRyPE5vZGVMaXN0PiBjaGlsZHJlbiA9
IG5vZGUtPmNoaWxkTm9kZXMoKTsKKyAgICB1bnNpZ25lZCBjaGlsZENvdW50ID0gY2hpbGRyZW4t
Pmxlbmd0aCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7
CisgICAgICAgIE5vZGUgKmNoaWxkID0gY2hpbGRyZW4tPml0ZW0oaSk7CisgICAgICAgIGlmIChp
czxFbGVtZW50PigqY2hpbGQpKQorICAgICAgICAgICAgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5j
aG9yKGNoaWxkLCBub2RlKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vZGVJc0REQW5jaG9yICYm
IG5vZGVQYXJlbnQpIHsKKyAgICAgICAgY2hpbGRyZW4gPSBub2RlLT5jaGlsZE5vZGVzKCk7Cisg
ICAgICAgIGNoaWxkQ291bnQgPSBjaGlsZHJlbi0+bGVuZ3RoKCk7CisgICAgICAgIAorICAgICAg
ICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNoaWxkcmVuIGFuZCBtb3ZlIHRoZW0gYWxsIG9udG8gdGhl
IHNhbWUgbGV2ZWwgYXMgdGhpcyBhbmNob3IuCisgICAgICAgIC8vIFJlbW92ZSB0aGUgYW5jaG9y
IGFmdGVyd2FyZHMuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsg
aSsrKSB7CisgICAgICAgICAgICBOb2RlICpjaGlsZCA9IGNoaWxkcmVuLT5pdGVtKDApOyAvLyBj
aGlsZHJlbiBjaGFuZ2UgZHVlIHRvIGluc2VydGlvbiwgYWx3YXlzIHVzZSBpZHggMAorICAgICAg
ICAgICAgbm9kZVBhcmVudC0+aW5zZXJ0QmVmb3JlKGNoaWxkLCBub2RlLCBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKKyAgICAgICAgfQorICAgICAgICBub2RlUGFyZW50LT5yZW1vdmVDaGlsZChub2Rl
LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHNlYXJjaEZv
ckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyhOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGVuZE5v
ZGUpCit7CisgICAgTm9kZSAqbm9kZSA9IHN0YXJ0Tm9kZTsKKyAgICB3aGlsZSAobm9kZSkgewor
ICAgICAgICAKKyAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKKyAg
ICAgICAgICAgIGlmIChkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJM
U2NoZW1lKSAhPSAidHJ1ZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3Iobm9kZSwgbm9kZS0+cGFyZW50RWxlbWVu
dCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUgPT0gZW5kTm9kZSkg
eworICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgdGhlIGVuZCBub2RlIGFuZCBubyBsaW5rLCBy
ZXR1cm4gZmFsc2UgdW5sZXNzIGFuIGFuY2VzdG9yIG5vZGUgaXMgYSBsaW5rLgorICAgICAgICAg
ICAgLy8gVGhlIG9ubHkgYW5jZXN0b3JzIG5vdCB0ZXN0ZWQgYXQgdGhpcyBwb2ludCBhcmUgaW4g
dGhlIGRpcmVjdCBsaW5lIGZyb20gc2VsZidzIHBhcmVudCB0byB0aGUgdG9wLgorICAgICAgICAg
ICAgbm9kZSA9IHN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgd2hpbGUgKG5v
ZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0
dHJpYnV0ZShERFVSTFNjaGVtZSkgIT0gInRydWUiKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFu
Y2hvcihub2RlLCBub2RlLT5wYXJlbnRFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBS
ZWZQdHI8Tm9kZUxpc3Q+IGNoaWxkTm9kZXMgPSBub2RlLT5jaGlsZE5vZGVzKCk7CisgICAgICAg
IGlmIChjaGlsZE5vZGVzLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIG5vZGUgPSBjaGlsZE5vZGVz
LT5pdGVtKDApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUgKm5ld05vZGUgPSBu
b2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgTm9kZSAqcGFyZW50Tm9kZSA9IG5vZGU7
CisgICAgICAgICAgICB3aGlsZSAoIW5ld05vZGUpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnRO
b2RlID0gcGFyZW50Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghcGFy
ZW50Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIG5ld05vZGUgPSBwYXJlbnROb2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbm9kZSA9IG5ld05vZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQogCi12b2lkIERhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJl
ZlB0cjxSYW5nZT4mLCBEYXRhRGV0ZWN0b3JUeXBlcykKK3N0YXRpYyBOU1N0cmluZyAqZGF0YURl
dGVjdG9yVHlwZUZvckNhdGVnb3J5KEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdvcnkpCiB7CisgICAg
c3dpdGNoIChjYXRlZ29yeSkgeworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeVBob25lTnVtYmVy
OgorICAgICAgICByZXR1cm4gQCJ0ZWxlcGhvbmUiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29y
eUxpbms6CisgICAgICAgIHJldHVybiBAImxpbmsiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29y
eUFkZHJlc3M6CisgICAgICAgIHJldHVybiBAImFkZHJlc3MiOworICAgIGNhc2UgRERSZXN1bHRD
YXRlZ29yeUNhbGVuZGFyRXZlbnQ6CisgICAgICAgIHJldHVybiBAImNhbGVuZGFyLWV2ZW50IjsK
KyAgICBjYXNlIEREUmVzdWx0Q2F0ZWdvcnlNaXNjOgorICAgICAgICByZXR1cm4gQCJtaXNjIjsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQCIiOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgYnVpbGRRdWVyeShERFNjYW5RdWVyeVJlZiBzY2FuUXVlcnksIFJhbmdlKiBjb250ZXh0UmFu
Z2UpCit7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywg
c3RvcCBhdCB0aGUgZmlyc3QgaGFyZCBicmVhay4KKyAgICBjb25zdCBDRkluZGV4IG1heEZyYWdt
ZW50V2l0aEhhcmRCcmVhayA9IDEwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVt
YmVyIG9mIGZyYWdtZW50cywgd2Ugc3RvcCBhdCB0aGUgbGluZS4KKyAgICBjb25zdCBDRkluZGV4
IG1heEZyYWdtZW50V2l0aExpbmVicmVhayA9IDUwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVy
IHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywgd2Ugc3RvcCBhdCB0aGUgc3BhY2UuCisgICAgY29u
c3QgQ0ZJbmRleCBtYXhGcmFnbWVudFNwYWNlID0gMTAwMDA7CisKKyAgICBDRkNoYXJhY3RlclNl
dFJlZiB3aGl0ZVNwYWNlc1NldCA9IENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFy
YWN0ZXJTZXRXaGl0ZXNwYWNlQW5kTmV3bGluZSk7CisgICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgbmV3
TGluZXNTZXQgPSBDRkNoYXJhY3RlclNldEdldFByZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0TmV3
bGluZSk7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZTsKKyAgICBDRkluZGV4IGl0
ZXJhdG9yQ291bnQgPSAwOworICAgIENGSW5kZXggZnJhZ21lbnRDb3VudCA9IDA7CisgICAgCisg
ICAgLy8gQnVpbGQgdGhlIHNjYW4gcXVlcnkgYWRkaW5nIHNlcGFyYXRvcnMuCisgICAgLy8gRm9y
IGVhY2ggZnJhZ21lbnQgdGhlIGl0ZXJhdG9yIGluY3JlbWVudCBpcyBzdG9yZWQgYXMgbWV0YWRh
dGEuCisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdlKTsgIWl0ZXJh
dG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSwgaXRlcmF0b3JDb3VudCsrKSB7CisgICAg
ICAgIHNpemVfdCBjdXJyZW50VGV4dExlbmd0aCA9IGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKTsK
KyAgICAgICAgaWYgKCFjdXJyZW50VGV4dExlbmd0aCkgeworICAgICAgICAgICAgRERTY2FuUXVl
cnlBZGRTZXBhcmF0b3Ioc2NhblF1ZXJ5LCBERFRleHRDb2FsZXNjaW5nVHlwZUhhcmRCcmVhayk7
CisgICAgICAgICAgICBpZiAoaXRlcmF0b3JDb3VudCA+IG1heEZyYWdtZW50V2l0aEhhcmRCcmVh
aykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIC8vIFRlc3QgZm9yIHdoaXRlIHNwYWNlIG5vZGVzLCB3ZSdyZSBjb2FsZXNj
aW5nIHRoZW0uCisgICAgICAgIGNvbnN0IFVuaUNoYXIgKmN1cnJlbnRDaGFyUHRyID0gaXRlcmF0
b3IudGV4dCgpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOworICAgICAgICAKKyAgICAgICAgQk9P
TCBjb250YWluc09ubHlXaGl0ZVNwYWNlID0gWUVTOworICAgICAgICBCT09MIGhhc1RhYiA9IE5P
OworICAgICAgICBCT09MIGhhc05ld2xpbmUgPSBOTzsKKyAgICAgICAgaW50IG5ic3BDb3VudCA9
IDA7CisgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGN1cnJlbnRUZXh0TGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIGlmICghQ0ZDaGFyYWN0ZXJTZXRJc0NoYXJhY3Rlck1lbWJl
cih3aGl0ZVNwYWNlc1NldCwgKmN1cnJlbnRDaGFyUHRyKSkgeworICAgICAgICAgICAgICAgIGNv
bnRhaW5zT25seVdoaXRlU3BhY2UgPSBOTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKENGQ2hhcmFjdGVyU2V0SXND
aGFyYWN0ZXJNZW1iZXIobmV3TGluZXNTZXQsICpjdXJyZW50Q2hhclB0cikpCisgICAgICAgICAg
ICAgICAgaGFzTmV3bGluZSA9IFlFUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKCpjdXJyZW50Q2hh
clB0ciA9PSAnXHQnKQorICAgICAgICAgICAgICAgIGhhc1RhYiA9IFlFUzsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29uc2VjdXRpdmUgbm9uIGJyZWFrYWJsZSBzcGFj
ZXMgYXJlIG1vc3QgbGlrZWx5IHNpbXVsYXRlZCB0YWJzLgorICAgICAgICAgICAgaWYgKCpjdXJy
ZW50Q2hhclB0ciA9PSAweGEwKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrbmJzcENvdW50ID4g
MikKKyAgICAgICAgICAgICAgICAgICAgaGFzVGFiID0gWUVTOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgbmJzcENvdW50ID0gMDsKKworICAgICAgICAgICAgY3VycmVudENo
YXJQdHIrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29udGFpbnNPbmx5V2hpdGVTcGFjZSkg
eworICAgICAgICAgICAgaWYgKGhhc05ld2xpbmUpIHsKKyAgICAgICAgICAgICAgICBERFNjYW5R
dWVyeUFkZExpbmVCcmVhayhzY2FuUXVlcnkpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRv
ckNvdW50ID4gbWF4RnJhZ21lbnRXaXRoTGluZWJyZWFrKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRERTY2FuUXVlcnlB
ZGRTZXBhcmF0b3Ioc2NhblF1ZXJ5LCBoYXNUYWIgPyBERFRleHRDb2FsZXNjaW5nVHlwZVRhYiA6
IEREVGV4dENvYWxlc2NpbmdUeXBlU3BhY2UpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRv
ckNvdW50ID4gbWF4RnJhZ21lbnRTcGFjZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjdXJyZW50VGV4dCA9IGFkb3B0Q0YoQ0ZT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBpdGVyYXRvci50
ZXh0KCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCksIGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKSkp
OworICAgICAgICBERFNjYW5RdWVyeUFkZFRleHRGcmFnbWVudChzY2FuUXVlcnksIGN1cnJlbnRU
ZXh0LmdldCgpLCBDRlJhbmdlTWFrZSgwLCBjdXJyZW50VGV4dExlbmd0aCksICh2b2lkICopaXRl
cmF0b3JDb3VudCwgKEREVGV4dEZyYWdtZW50TW9kZSkwLCBERFRleHRDb2FsZXNjaW5nVHlwZU5v
bmUpOworICAgICAgICBmcmFnbWVudENvdW50Kys7CisgICAgfQogfQogCitOU0FycmF5ICpEYXRh
RGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFu
Z2UsIERhdGFEZXRlY3RvclR5cGVzIHR5cGVzKQoreworICAgIFJldGFpblB0cjxERFNjYW5uZXJS
ZWY+IHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRh
cmQsIDAsIG51bGxwdHIpKTsKKyAgICBSZXRhaW5QdHI8RERTY2FuUXVlcnlSZWY+IHNjYW5RdWVy
eSA9IGFkb3B0Q0YoRERTY2FuUXVlcnlDcmVhdGUoTlVMTCkpOworICAgIGJ1aWxkUXVlcnkoc2Nh
blF1ZXJ5LmdldCgpLCBjb250ZXh0UmFuZ2UuZ2V0KCkpOworICAgIAorICAgIC8vIEZJWE1FOiB3
ZSBzaG91bGQgYWRkIGEgdGltZW91dCB0byB0aGlzIGNhbGwgdG8gbWFrZSBzdXJlIGl0IGRvZXNu
J3QgdGFrZSB0b28gbXVjaCB0aW1lLgorICAgIGlmICghRERTY2FubmVyU2NhblF1ZXJ5KHNjYW5u
ZXIuZ2V0KCksIHNjYW5RdWVyeS5nZXQoKSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHNjYW5uZXJSZXN1bHRzID0gYWRvcHRDRihERFNjYW5u
ZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCksIEREU2Nhbm5lckNvcHlSZXN1
bHRzT3B0aW9uc0ZvclBhc3NpdmVVc2UgfCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNDb2Fs
ZXNjZVNpZ25hdHVyZXMpKTsKKyAgICBpZiAoIXNjYW5uZXJSZXN1bHRzKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIAorICAgIENGSW5kZXggcmVzdWx0Q291bnQgPSBDRkFycmF5R2V0Q291bnQo
c2Nhbm5lclJlc3VsdHMuZ2V0KCkpOworICAgIGlmICghcmVzdWx0Q291bnQpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhbGxSZXN1bHRz
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiBpbmRleFBhdGhzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XSk7CisgICAgTlNJbnRlZ2VyIGN1cnJlbnRUb3BMZXZlbEluZGV4ID0gMDsKKwor
ICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2Nhbm5lciByZXN1bHRzIHRvIGZpbmQgc2lnbmF0
dXJlcyBhbmQgZXh0cmFjdCBhbGwgdGhlIHN1YnJlc3VsdHMgd2hpbGUKKyAgICAvLyBwb3B1bGF0
aW5nIHRoZSBhcnJheSBvZiBpbmRleCBwYXRocyB0byB1c2UgaW4gdGhlIGhyZWYgb2YgdGhlIGFu
Y2hvcnMgYmVpbmcgY3JlYXRlZC4KKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCByZXN1bHRD
b3VudDsgaSsrKSB7CisgICAgICAgIEREUmVzdWx0UmVmIHJlc3VsdCA9IChERFJlc3VsdFJlZilD
RkFycmF5R2V0VmFsdWVBdEluZGV4KHNjYW5uZXJSZXN1bHRzLmdldCgpLCBpKTsKKyAgICAgICAg
TlNJbmRleFBhdGggKmluZGV4UGF0aCA9IFtOU0luZGV4UGF0aCBpbmRleFBhdGhXaXRoSW5kZXg6
Y3VycmVudFRvcExldmVsSW5kZXhdOworICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKEREUmVz
dWx0R2V0VHlwZShyZXN1bHQpLCBEREJpbmRlclNpZ25hdHVyZUJsb2NrS2V5LCAwKSA9PSBrQ0ZD
b21wYXJlRXF1YWxUbykgeworICAgICAgICAgICAgQ0ZBcnJheVJlZiBzdWJyZXN1bHRzID0gRERS
ZXN1bHRHZXRTdWJSZXN1bHRzKHJlc3VsdCk7CisgICAgICAgICAgICBbYWxsUmVzdWx0cyBhZGRP
YmplY3RzRnJvbUFycmF5OihOU0FycmF5ICopc3VicmVzdWx0c107CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMCA7IGkgPCBbKE5TQXJyYXkgKilzdWJyZXN1
bHRzIGNvdW50XSA7IGkrKykKKyAgICAgICAgICAgICAgICBbaW5kZXhQYXRocyBhZGRPYmplY3Q6
W2luZGV4UGF0aCBpbmRleFBhdGhCeUFkZGluZ0luZGV4OmldXTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFthbGxSZXN1bHRzIGFkZE9iamVjdDooaWQpcmVzdWx0XTsKKyAgICAgICAg
ICAgIFtpbmRleFBhdGhzIGFkZE9iamVjdDppbmRleFBhdGhdOworICAgICAgICB9CisgICAgICAg
IGN1cnJlbnRUb3BMZXZlbEluZGV4Kys7CisgICAgfQorCisgICAgVmVjdG9yPFJlZlB0cjxSYW5n
ZT4+IHJlc3VsdFJhbmdlczsKKyAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdl
LmdldCgpKTsKKyAgICBDRkluZGV4IGl0ZXJhdG9yQ291bnQgPSAwOworCisgICAgcmVzdWx0Q291
bnQgPSBbYWxsUmVzdWx0cyBjb3VudF07CisgICAgCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRo
ZSBhcnJheSBvZiB0aGUgZXhwYW5kZWQgcmVzdWx0cyB0byBjcmVhdGUgYSB2ZWN0b3Igb2YgUmFu
Z2Ugb2JqZWN0cyB0aGF0IGluZGljYXRlCisgICAgLy8gd2hlcmUgdGhlIERPTSBuZWVkcyB0byBi
ZSBtb2RpZmllZC4KKyAgICAvLyBFYWNoIHJlc3VsdCBjYW4gYmUgY29udGFpbmVkIGFsbCBpbiBv
bmUgdGV4dCBub2RlIG9yIGNhbiBzcGFuIG11bHRpcGxlIHRleHQgbm9kZXMuCisgICAgZm9yIChD
RkluZGV4IGkgPSAwOyBpIDwgcmVzdWx0Q291bnQ7IGkrKykgeworICAgICAgICBERFJlc3VsdFJl
ZiByZXN1bHQgPSAoRERSZXN1bHRSZWYpW2FsbFJlc3VsdHMgb2JqZWN0QXRJbmRleDppXTsKKyAg
ICAgICAgRERRdWVyeVJhbmdlIHF1ZXJ5UmFuZ2UgPSBERFJlc3VsdEdldFF1ZXJ5UmFuZ2VGb3JV
UkxpZmljYXRpb24ocmVzdWx0KTsKKyAgICAgICAgQ0ZJbmRleCBpdGVyYXRvclRhcmdldEFkdmFu
Y2VDb3VudCA9IChDRkluZGV4KUREU2NhblF1ZXJ5R2V0RnJhZ21lbnRNZXRhRGF0YShzY2FuUXVl
cnkuZ2V0KCksIHF1ZXJ5UmFuZ2Uuc3RhcnQucXVlcnlJbmRleCk7CisgICAgICAgIHdoaWxlIChp
dGVyYXRvckNvdW50IDwgaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsKKyAgICAgICAgICAg
IGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yQ291bnQrKzsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IGl0ZXJhdG9yLnJhbmdl
KCk7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBzdGFydFJhbmdlOworICAgICAg
ICBDRkluZGV4IGZyYWdtZW50SW5kZXggPSBxdWVyeVJhbmdlLnN0YXJ0LnF1ZXJ5SW5kZXg7Cisg
ICAgICAgIHdoaWxlIChmcmFnbWVudEluZGV4IDwgcXVlcnlSYW5nZS5lbmQucXVlcnlJbmRleCkg
eworICAgICAgICAgICAgZnJhZ21lbnRJbmRleCsrOworICAgICAgICAgICAgaXRlcmF0b3JUYXJn
ZXRBZHZhbmNlQ291bnQgPSAoQ0ZJbmRleClERFNjYW5RdWVyeUdldEZyYWdtZW50TWV0YURhdGEo
c2NhblF1ZXJ5LmdldCgpLCBmcmFnbWVudEluZGV4KTsKKyAgICAgICAgICAgIHdoaWxlIChpdGVy
YXRvckNvdW50IDwgaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsKKyAgICAgICAgICAgICAg
ICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaXRlcmF0b3JDb3VudCsrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kUmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChzdGFydFJhbmdlID09IGVuZFJhbmdlKQorICAgICAgICAg
ICAgcmVzdWx0UmFuZ2VzLmFwcGVuZChUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHN0YXJ0UmFuZ2Uu
Z2V0KCksIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0LCBxdWVyeVJhbmdlLmVuZC5vZmZzZXQgLSBx
dWVyeVJhbmdlLnN0YXJ0Lm9mZnNldCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1
bHRSYW5nZXMuYXBwZW5kKFJhbmdlOjpjcmVhdGUoc3RhcnRSYW5nZS0+b3duZXJEb2N1bWVudCgp
LCAmc3RhcnRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgZm1heChzdGFydFJhbmdlLT5zdGFydE9m
ZnNldCgpLCBxdWVyeVJhbmdlLnN0YXJ0Lm9mZnNldCksICZlbmRSYW5nZS0+ZW5kQ29udGFpbmVy
KCksIGZtYXgoZW5kUmFuZ2UtPmVuZE9mZnNldCgpLCBxdWVyeVJhbmdlLmVuZC5vZmZzZXQpKSk7
CisgICAgfQorICAgIAorICAgIENGVGltZVpvbmVSZWYgdHogPSBDRlRpbWVab25lQ29weURlZmF1
bHQoKTsKKyAgICBOU0RhdGUgKnJlZmVyZW5jZURhdGUgPSBbTlNEYXRlIGRhdGVdOworICAgIFRl
eHQqIGxhc3RUZXh0Tm9kZVRvVXBkYXRlID0gbnVsbHB0cjsKKyAgICBTdHJpbmcgbGFzdE5vZGVD
b250ZW50OworICAgIHNpemVfdCBjb250ZW50T2Zmc2V0ID0gMDsKKyAgICBERFF1ZXJ5T2Zmc2V0
IGxhc3RNb2RpZmllZFF1ZXJ5T2Zmc2V0ID0gey0xLCAwfTsKKyAgICAKKyAgICAvLyBGb3IgZWFj
aCByZXN1bHQgYWRkIHRoZSBsaW5rLgorICAgIC8vIFNpbmNlIHRoZXJlIGNvdWxkIGJlIG11bHRp
cGxlIHJlc3VsdHMgaW4gdGhlIHNhbWUgdGV4dCBub2RlLCB0aGUgbm9kZSBpcyBvbmx5IG1vZGlm
aWVkIHdoZW4KKyAgICAvLyB3ZSBhcmUgYWJvdXQgdG8gcHJvY2VzcyBhIGRpZmZlcmVudCB0ZXh0
IG5vZGUuCisgICAgZm9yIChDRkluZGV4IHJlc3VsdEluZGV4ID0gMDsgcmVzdWx0SW5kZXggPCBy
ZXN1bHRDb3VudDsgcmVzdWx0SW5kZXgrKykgeworICAgICAgICBERFJlc3VsdFJlZiBjb3JlUmVz
dWx0ID0gKEREUmVzdWx0UmVmKVthbGxSZXN1bHRzIG9iamVjdEF0SW5kZXg6cmVzdWx0SW5kZXhd
OworICAgICAgICBERFF1ZXJ5UmFuZ2UgcXVlcnlSYW5nZSA9IEREUmVzdWx0R2V0UXVlcnlSYW5n
ZUZvclVSTGlmaWNhdGlvbihjb3JlUmVzdWx0KTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByZXN1
bHRSYW5nZSA9IHJlc3VsdFJhbmdlc1tyZXN1bHRJbmRleF07CisgICAgICAgIE5TU3RyaW5nICpp
ZGVudGlmaWVyID0gW1tpbmRleFBhdGhzIG9iamVjdEF0SW5kZXg6cmVzdWx0SW5kZXhdIGRhdGFE
ZXRlY3RvclN0cmluZ1ZhbHVlXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvcnJlc3BvbmRpbmdVUkwg
PSBjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoY29yZVJlc3VsdCwgaWRlbnRpZmllciwgcmVm
ZXJlbmNlRGF0ZSwgKE5TVGltZVpvbmUgKil0eiwgdHlwZXMpOworICAgICAgICAKKyAgICAgICAg
aWYgKCFjb3JyZXNwb25kaW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERM
aW5rcygmcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksICZyZXN1bHRSYW5nZS0+ZW5kQ29u
dGFpbmVyKCkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAvLyBD
b21wYXJlIHRoZSBxdWVyeSBvZmZzZXRzIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnbyBiYWNrd2Fy
ZHMKKyAgICAgICAgaWYgKEREUXVlcnlPZmZzZXRDb21wYXJlKGxhc3RNb2RpZmllZFF1ZXJ5T2Zm
c2V0LCBxdWVyeVJhbmdlLnN0YXJ0KSA+PSAwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgbGFzdE1vZGlmaWVkUXVlcnlPZmZzZXQgPSBxdWVyeVJhbmdlLmVuZDsKKworICAgICAg
ICBmb3IgKFRleHRJdGVyYXRvciBpdChyZXN1bHRSYW5nZS5nZXQoKSk7ICFpdC5hdEVuZCgpOyBp
dC5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIGlmICghaXQudGV4dCgpLmxlbmd0aCgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gaXQucmFuZ2UoKTsKKyAgICAgICAgICAgIGlmICghaXM8VGV4dD4ocmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgTm9kZSogcGFyZW50Tm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpLnBhcmVudE5v
ZGUoKTsKKyAgICAgICAgICAgIFRleHQmIGN1cnJlbnRUZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+
KHJhbmdlLT5zdGFydENvbnRhaW5lcigpKTsKKyAgICAgICAgICAgIERvY3VtZW50JiBkb2N1bWVu
dCA9IGN1cnJlbnRUZXh0Tm9kZS5kb2N1bWVudCgpOworICAgICAgICAgICAgU3RyaW5nIHRleHRO
b2RlRGF0YTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGxhc3RUZXh0Tm9kZVRvVXBk
YXRlICE9ICZjdXJyZW50VGV4dE5vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdFRleHRO
b2RlVG9VcGRhdGUpCisgICAgICAgICAgICAgICAgICAgIGxhc3RUZXh0Tm9kZVRvVXBkYXRlLT5z
ZXREYXRhKGxhc3ROb2RlQ29udGVudCk7CisgICAgICAgICAgICAgICAgY29udGVudE9mZnNldCA9
IDA7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLT5zdGFydE9mZnNldCgpID4gMCkKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLnN1YnN0cmluZ0Rh
dGEoMCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHRO
b2RlLnN1YnN0cmluZ0RhdGEoY29udGVudE9mZnNldCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgLSBj
b250ZW50T2Zmc2V0LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCF0ZXh0Tm9kZURhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgUmVm
UHRyPE5vZGU+IG5ld05vZGUgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIHRleHROb2RlRGF0YSk7
CisgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsICZjdXJy
ZW50VGV4dE5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgICAgIGNvbnRl
bnRPZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhY3R1YWwgYW5jaG9yIG5vZGUgYW5kIGlu
c2VydCBpdCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgICAgICAgIHRleHROb2RlRGF0
YSA9IGN1cnJlbnRUZXh0Tm9kZS5zdWJzdHJpbmdEYXRhKHJhbmdlLT5zdGFydE9mZnNldCgpLCBy
YW5nZS0+ZW5kT2Zmc2V0KCkgLSByYW5nZS0+c3RhcnRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IFRleHQ6OmNyZWF0ZShk
b2N1bWVudCwgdGV4dE5vZGVEYXRhKTsKKyAgICAgICAgICAgIHBhcmVudE5vZGUtPmluc2VydEJl
Zm9yZShuZXdOb2RlLCAmY3VycmVudFRleHROb2RlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgUmVmUHRyPEhUTUxBbmNob3JFbGVtZW50PiBhbmNob3JF
bGVtZW50ID0gSFRNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgICAgICAg
ICBhbmNob3JFbGVtZW50LT5zZXRIcmVmKGNvcnJlc3BvbmRpbmdVUkwpOworICAgICAgICAgICAg
YW5jaG9yRWxlbWVudC0+c2V0RGlyKCJsdHIiKTsKKyAgICAgICAgICAgIFJlZlB0cjxBdHRyPiBj
b2xvciA9IGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudE5vZGUpLT5nZXRBdHRyaWJ1dGVOb2RlKCJj
b2xvciIpOworICAgICAgICAgICAgaWYgKGNvbG9yKQorICAgICAgICAgICAgICAgIGFuY2hvckVs
ZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0ciwgY29sb3ItPnN0eWxlKCkt
PmNzc1RleHQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPk5v
ZGU6OmFwcGVuZENoaWxkKG5ld05vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAg
ICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKGFuY2hvckVsZW1lbnQsICZjdXJyZW50VGV4dE5v
ZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgLy8gQWRkIGEgc3BlY2lhbCBh
dHRyaWJ1dGUgdG8gbWFyayB0aGlzIFVSTGlmaWNhdGlvbiBhcyB0aGUgcmVzdWx0IG9mIGRhdGEg
ZGV0ZWN0b3JzLgorICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRlKFF1YWxp
ZmllZE5hbWUobnVsbEF0b20sIChOU1N0cmluZyAqKWtEYXRhRGV0ZWN0b3JzVVJMU2NoZW1lLCBu
dWxsQXRvbSksICJ0cnVlIik7CisgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1
dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgKE5TU3RyaW5nICopa0RhdGFEZXRlY3RvcnNBdHRy
aWJ1dGVUeXBlS2V5LCBudWxsQXRvbSksIGRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeShERFJl
c3VsdEdldENhdGVnb3J5KGNvcmVSZXN1bHQpKSk7CisgICAgICAgICAgICBhbmNob3JFbGVtZW50
LT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgKE5TU3RyaW5nICopa0RhdGFE
ZXRlY3RvcnNBdHRyaWJ1dGVSZXN1bHRLZXksIG51bGxBdG9tKSwgaWRlbnRpZmllcik7CisgICAg
ICAgICAgICBjb250ZW50T2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBsYXN0Tm9kZUNvbnRlbnQgPSBjdXJyZW50VGV4dE5vZGUuc3Vic3RyaW5n
RGF0YShyYW5nZS0+ZW5kT2Zmc2V0KCksIGN1cnJlbnRUZXh0Tm9kZS5sZW5ndGgoKSAtIHJhbmdl
LT5lbmRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICBsYXN0VGV4
dE5vZGVUb1VwZGF0ZSA9ICZjdXJyZW50VGV4dE5vZGU7CisgICAgICAgIH0gICAgICAgIAorICAg
IH0KKyAgICBpZiAobGFzdFRleHROb2RlVG9VcGRhdGUpCisgICAgICAgIGxhc3RUZXh0Tm9kZVRv
VXBkYXRlLT5zZXREYXRhKGxhc3ROb2RlQ29udGVudCk7CisgICAgCisgICAgcmV0dXJuIFtERFNj
YW5uZXJSZXN1bHQgcmVzdWx0c0Zyb21Db3JlUmVzdWx0czpzY2FubmVyUmVzdWx0cy5nZXQoKV07
Cit9CisKKyNlbHNlCitOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5n
ZShSZWZQdHI8UmFuZ2U+JiwgRGF0YURldGVjdG9yVHlwZXMpCit7CisgICAgcmV0dXJuIG5pbDsK
K30KKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAko
cmV2aXNpb24gMTk1MzE2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NywxMCArNDcsMTMgQEAKICNpbmNsdWRlICJGcmFtZVdpbi5oIgogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShDT0NPQSkKK09CSkNfQ0xBU1MgTlNBcnJheTsKKyNlbmRpZgorCiAj
aWYgUExBVEZPUk0oSU9TKQogT0JKQ19DTEFTUyBET01DU1NTdHlsZURlY2xhcmF0aW9uOwogT0JK
Q19DTEFTUyBET01Ob2RlOwotT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU1N0cmlu
ZzsKICNlbmRpZgogCkBAIC0xODUsNiArMTg4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZnJhbWVTY2FsZUZhY3RvcigpIGNvbnN0OwogCiAg
ICAgICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CisgICAgICAgIAor
I2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICAgICAgdm9pZCBzZXREYXRhRGV0ZWN0aW9u
UmVzdWx0cyhOU0FycmF5ICpyZXN1bHRzKSB7IG1fZGF0YURldGVjdGlvblJlc3VsdHMgPSByZXN1
bHRzOyB9CisgICAgICAgIE5TQXJyYXkgKmRhdGFEZXRlY3Rpb25SZXN1bHRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhRGV0ZWN0aW9uUmVzdWx0cy5nZXQoKTsgfQorI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgICAgIGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJiB2aWV3cG9ydEFyZ3Vt
ZW50cygpIGNvbnN0OwpAQCAtMjkyLDYgKzMwMCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEV2ZW50SGFuZGxlcj4gbV9ldmVudEhhbmRsZXI7
CiAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Db250cm9sbGVyPiBtX2Fu
aW1hdGlvbkNvbnRyb2xsZXI7CiAKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgICAg
IFJldGFpblB0cjxOU0FycmF5PiBtX2RhdGFEZXRlY3Rpb25SZXN1bHRzOworI2VuZGlmCiAjaWYg
UExBVEZPUk0oSU9TKQogICAgICAgICB2b2lkIGJldHRlckFwcHJveGltYXRlTm9kZShjb25zdCBJ
bnRQb2ludCYgdGVzdFBvaW50LCBOb2RlUXVhbGlmaWVyLCBOb2RlKiYgYmVzdCwgTm9kZSogZmFp
bGVkTm9kZSwgSW50UG9pbnQmIGJlc3RQb2ludCwgSW50UmVjdCYgYmVzdFJlY3QsIGNvbnN0IElu
dFJlY3QmIHRlc3RSZWN0KTsKICAgICAgICAgYm9vbCBoaXRUZXN0UmVzdWx0QXRWaWV3cG9ydExv
Y2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHZpZXdwb3J0TG9jYXRpb24sIEhpdFRlc3RSZXN1bHQm
LCBJbnRQb2ludCYgY2VudGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9j
b2NvYS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NwaS9jb2NvYS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oCShyZXZpc2lvbiAxOTUz
MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvRGF0YURldGVjdG9yc0Nv
cmVTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTIgQEAKIAogI2lmIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspCiAKKyNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3JlL0REQmluZGVyS2V5
c19Qcml2YXRlLmg+CisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzQ29yZS9ERFNjYW5uZXJSZXN1bHQu
aD4KICNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3JlL0RhdGFEZXRlY3RvcnNDb3JlLmg+Ci0KKyNp
ZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzQ29yZS9ERFVSTGlmaWVyLmg+
CisjZW5kaWYKICNlbHNlIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiB0eXBlZGVmIGVu
dW0gewpAQCAtNDAsNiArNDQsNzYgQEAgZW51bSB7CiAgICAgRERTY2FubmVyQ29weVJlc3VsdHNP
cHRpb25zTm9PdmVybGFwID0gMSA8PCAwLAogfTsKIAorZW51bSB7CisgICAgRERVUkxpZmllclBo
b25lTnVtYmVyRGV0ZWN0aW9uTm9uZSA9IDAsCisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0
ZWN0aW9uUmVndWxhciA9IDEgPDwgMSwKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rp
b25RdW90ZWRTaG9ydHMgPSAxIDw8IDIsCisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0
aW9uVW5xdW90ZWRTaG9ydHMgPSAxIDw8IDMKK307Cit0eXBlZGVmIE5TVUludGVnZXIgRERVUkxp
ZmllclBob25lTnVtYmVyRGV0ZWN0aW9uVHlwZXM7CisKK3R5cGVkZWYgZW51bSBfX0REVGV4dENv
YWxlc2NpbmdUeXBlIHsKKyAgICBERFRleHRDb2FsZXNjaW5nVHlwZU5vbmUgPSAwLAorICAgIERE
VGV4dENvYWxlc2NpbmdUeXBlU3BhY2UgPSAxLAorICAgIEREVGV4dENvYWxlc2NpbmdUeXBlVGFi
ID0gMiwKKyAgICBERFRleHRDb2FsZXNjaW5nVHlwZUxpbmVCcmVhayA9IDMsCisgICAgRERUZXh0
Q29hbGVzY2luZ1R5cGVIYXJkQnJlYWsgPSA0LAorfSBERFRleHRDb2FsZXNjaW5nVHlwZTsKKwor
dHlwZWRlZiBlbnVtIHsKKyAgICBERFJlc3VsdENhdGVnb3J5VW5rbm93biA9IDAsCisgICAgRERS
ZXN1bHRDYXRlZ29yeUxpbmsgPSAxLAorICAgIEREUmVzdWx0Q2F0ZWdvcnlQaG9uZU51bWJlciA9
IDIsCisgICAgRERSZXN1bHRDYXRlZ29yeUFkZHJlc3MgPSAzLAorICAgIEREUmVzdWx0Q2F0ZWdv
cnlDYWxlbmRhckV2ZW50ID0gNCwKKyAgICBERFJlc3VsdENhdGVnb3J5TWlzYyA9IDUsCit9IERE
UmVzdWx0Q2F0ZWdvcnk7CisKK3R5cGVkZWYgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zIHsK
KyAgICBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNOb25lID0gMCwKKyAgICBERFNjYW5uZXJD
b3B5UmVzdWx0c09wdGlvbnNOb092ZXJsYXAgPSAxIDw8IDAsCisgICAgRERTY2FubmVyQ29weVJl
c3VsdHNPcHRpb25zQ29hbGVzY2VTaWduYXR1cmVzID0gMSA8PCAxLAorICAgIEREU2Nhbm5lckNv
cHlSZXN1bHRzT3B0aW9uc1JlbW92ZUxvbmVseUFkZHJlc3NlcyA9IDEgPDwgMiwKKyAgICBERFNj
YW5uZXJDb3B5UmVzdWx0c09wdGlvbnNLZWVwT25seVNob3J0UGhvbmVOdW1iZXJzID0gMSA8PCAz
LAorICAgIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc0tlZXBPbmx5UXVvdGVkU2hvcnRQaG9u
ZU51bWJlcnMgPSAxIDw8IDQsCisgICAgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zTWVyZ2VS
ZXN1bHRzID0gMSA8PCA1LAorICAgIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc1JlbW92ZUFt
YmlndW91c0RhdGVzID0gMSA8PCA2LAorICAgIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc1Jl
bW92ZVVuc3VwcG9ydGVkVVJMU2NoZW1lcyA9IDEgPDwgNywKKyAgICBERFNjYW5uZXJDb3B5UmVz
dWx0c09wdGlvbnNNYXJrSW5zdGVhZE9mUmVtb3ZlID0gMSA8PCA4LAorICAgIEREU2Nhbm5lckNv
cHlSZXN1bHRzT3B0aW9uc1JlbW92ZUFtYmlndW91c0ZvckxvY2FsZSA9IDEgPDwgOSwKK307CisK
K3R5cGVkZWYgZW51bSBfX0REVGV4dEZyYWdtZW50VHlwZSB7CisgICAgRERUZXh0RnJhZ21lbnRU
eXBlVHJpbVdoaXRlU3BhY2UgPSAgMHgxLAorICAgIEREVGV4dEZyYWdtZW50VHlwZUlnbm9yZUNS
TEYgPSAgMHgyLAorfSBERFRleHRGcmFnbWVudE1vZGU7CisKK2V4dGVybiBDRlN0cmluZ1JlZiBj
b25zdCBEREJpbmRlckh0dHBVUkxLZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3QgRERCaW5k
ZXJXZWJVUkxLZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3QgRERCaW5kZXJNYWlsVVJMS2V5
OworZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVyR2VuZXJpY1VSTEtleTsKK2V4dGVy
biBDRlN0cmluZ1JlZiBjb25zdCBEREJpbmRlckVtYWlsS2V5OworZXh0ZXJuIENGU3RyaW5nUmVm
IGNvbnN0IEREQmluZGVyVHJhY2tpbmdOdW1iZXJLZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29u
c3QgRERCaW5kZXJGbGlnaHRJbmZvcm1hdGlvbktleTsKK2V4dGVybiBDRlN0cmluZ1JlZiBjb25z
dCBEREJpbmRlclNpZ25hdHVyZUJsb2NrS2V5OworZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgRERV
UkxTY2hlbWU7CisKK0BpbnRlcmZhY2UgRERTY2FubmVyUmVzdWx0IDogTlNPYmplY3QgPE5TQ29k
aW5nLCBOU1NlY3VyZUNvZGluZz4KKysgKE5TQXJyYXkgKikgcmVzdWx0c0Zyb21Db3JlUmVzdWx0
czooQ0ZBcnJheVJlZiljb3JlUmVzdWx0czsKK0BlbmQKKworI2RlZmluZSBERFJlc3VsdFByb3Bl
cnR5UGFzc2l2ZURpc3BsYXkgICAoMSA8PCAwKQorCit0eXBlZGVmIHN0cnVjdCBfX0REUXVlcnlP
ZmZzZXQgeworICAgIENGSW5kZXggcXVlcnlJbmRleDsKKyAgICBDRkluZGV4IG9mZnNldDsKK30g
RERRdWVyeU9mZnNldDsKKwordHlwZWRlZiBzdHJ1Y3QgX19ERFF1ZXJ5UmFuZ2UgeworICAgIERE
UXVlcnlPZmZzZXQgc3RhcnQ7CisgICAgRERRdWVyeU9mZnNldCBlbmQ7Cit9IEREUXVlcnlSYW5n
ZTsKKwogI2VuZGlmIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiB0eXBlZGVmIHN0cnVj
dCBfX0REUmVzdWx0ICpERFJlc3VsdFJlZjsKQEAgLTQ4LDEzICsxMjIsMjkgQEAgdHlwZWRlZiBz
dHJ1Y3QgX19ERFNjYW5uZXIgKkREU2Nhbm5lclJlZgogCiB0eXBlZGVmIENGSW5kZXggRERTY2Fu
bmVyQ29weVJlc3VsdHNPcHRpb25zOwogdHlwZWRlZiBDRkluZGV4IEREU2Nhbm5lck9wdGlvbnM7
CitleHRlcm4gY29uc3QgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zIEREU2Nhbm5lckNvcHlS
ZXN1bHRzT3B0aW9uc0ZvclBhc3NpdmVVc2U7CiAKIGV4dGVybiAiQyIgewogCiBERFNjYW5uZXJS
ZWYgRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGUsIEREU2Nhbm5lck9wdGlvbnMsIENGRXJy
b3JSZWYqKTsKK0REU2NhblF1ZXJ5UmVmIEREU2NhblF1ZXJ5Q3JlYXRlKENGQWxsb2NhdG9yUmVm
KTsKIEREU2NhblF1ZXJ5UmVmIEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZyhDRkFsbG9jYXRv
clJlZiwgQ0ZTdHJpbmdSZWYsIENGUmFuZ2UpOwogQm9vbGVhbiBERFNjYW5uZXJTY2FuUXVlcnko
RERTY2FubmVyUmVmLCBERFNjYW5RdWVyeVJlZik7CiBDRkFycmF5UmVmIEREU2Nhbm5lckNvcHlS
ZXN1bHRzV2l0aE9wdGlvbnMoRERTY2FubmVyUmVmLCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlv
bnMpOwogQ0ZSYW5nZSBERFJlc3VsdEdldFJhbmdlKEREUmVzdWx0UmVmKTsKK0NGU3RyaW5nUmVm
IEREUmVzdWx0R2V0VHlwZShERFJlc3VsdFJlZik7CitERFJlc3VsdENhdGVnb3J5IEREUmVzdWx0
R2V0Q2F0ZWdvcnkoRERSZXN1bHRSZWYpOworQm9vbGVhbiBERFJlc3VsdElzUGFzdERhdGUoRERS
ZXN1bHRSZWYsIENGRGF0ZVJlZiByZWZlcmVuY2VEYXRlLCBDRlRpbWVab25lUmVmIHJlZmVyZW5j
ZVRpbWVab25lKTsKK3ZvaWQgRERTY2FuUXVlcnlBZGRUZXh0RnJhZ21lbnQoRERTY2FuUXVlcnlS
ZWYsIENGU3RyaW5nUmVmLCBDRlJhbmdlLCB2b2lkICppZGVudGlmaWVyLCBERFRleHRGcmFnbWVu
dE1vZGUsIEREVGV4dENvYWxlc2NpbmdUeXBlKTsKK3ZvaWQgRERTY2FuUXVlcnlBZGRTZXBhcmF0
b3IoRERTY2FuUXVlcnlSZWYsIEREVGV4dENvYWxlc2NpbmdUeXBlKTsKK3ZvaWQgRERTY2FuUXVl
cnlBZGRMaW5lQnJlYWsoRERTY2FuUXVlcnlSZWYpOwordm9pZCAqRERTY2FuUXVlcnlHZXRGcmFn
bWVudE1ldGFEYXRhKEREU2NhblF1ZXJ5UmVmLCBDRkluZGV4IHF1ZXJ5SW5kZXgpOworYm9vbCBE
RFJlc3VsdEhhc1Byb3BlcnRpZXMoRERSZXN1bHRSZWYsIENGSW5kZXggcHJvcGVydHlTZXQpOwor
Q0ZBcnJheVJlZiBERFJlc3VsdEdldFN1YlJlc3VsdHMoRERSZXN1bHRSZWYpOworRERRdWVyeVJh
bmdlIEREUmVzdWx0R2V0UXVlcnlSYW5nZUZvclVSTGlmaWNhdGlvbihERFJlc3VsdFJlZik7Cisg
ICAgCisjaWYgUExBVEZPUk0oSU9TKQorTlNTdHJpbmcgKkREVVJMU3RyaW5nRm9yUmVzdWx0KERE
UmVzdWx0UmVmIGN1cnJlbnRSZXN1bHQsIE5TU3RyaW5nICogcmVzdWx0SWRlbnRpZmllciwgRERV
UkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uVHlwZXMgaW5jbHVkaW5nVGVsR3JvdXBzLCBOU0Rh
dGUgKiByZWZlcmVuY2VEYXRlLCBOU1RpbWVab25lICogcmVmZXJlbmNlVGltZVpvbmUpOworI2Vu
ZGlmCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTM5MikKKysrIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTAxLTIw
ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBv
cnQgZm9yIERhdGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
MjI4NTU5NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoZnJvbVdLRGF0
YURldGVjdG9yVHlwZXMpOiBDaGFuZ2VkIHBhcmFtZXRlciB0byB1aW50NjRfdCB0bworICAgICAg
ICBzdWNjZXNzZnVsbHkgY29tcGFyZSBhZ2FpbnN0IFdLRGF0YURldGVjdG9yVHlwZUFsbC4KKwog
MjAxNi0wMS0yMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEZpeCBDTWFrZSBidWlsZCBhZnRlciByMTk1MzAwLgpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDE5
NTMxNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkQWxs
b3dQaWN0dXJlSW5QaWN0dXJlTQogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04p
Ci1zdGF0aWMgV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXMgZnJvbVdLRGF0YURldGVjdG9yVHlw
ZXModWludDMyX3QgdHlwZXMpCitzdGF0aWMgV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXMgZnJv
bVdLRGF0YURldGVjdG9yVHlwZXModWludDY0X3QgdHlwZXMpCiB7CiAgICAgaWYgKHN0YXRpY19j
YXN0PFdLRGF0YURldGVjdG9yVHlwZXM+KHR5cGVzKSA9PSBXS0RhdGFEZXRlY3RvclR5cGVOb25l
KQogICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZU5vbmU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269465</attachid>
            <date>2016-01-21 10:15:15 -0800</date>
            <delta_ts>2016-01-21 10:30:54 -0800</delta_ts>
            <desc>More build fixes</desc>
            <filename>ddwk2-part2.txt</filename>
            <type>text/plain</type>
            <size>29808</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTM5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAxLTIwICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgdGhlIGxvZ2ljIHRvIHBlcmZvcm0gZGF0YSBkZXRlY3Rpb24gYW5kIG1vZGlmeQor
ICAgICAgICB0aGUgZG9tIGJ5IGFkZGluZyBkYXRhIGRldGVjdG9yIGxpbmtzIGFzIGFwcHJvcHJp
YXRlLgorICAgICAgICBUaGUgZGF0YSBkZXRlY3RvciByZXN1bHRzIHJldHVybmVkIGJ5IGRldGVj
dENvbnRlbnRJblJhbmdlIGFyZQorICAgICAgICBzdG9yZWQgaW4gdGhlIEZyYW1lIG9iamVjdC4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oOgorICAgICAgICAqIGVk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKC1bTlNJbmRleFBhdGggZGF0
YURldGVjdG9yU3RyaW5nVmFsdWVdKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246
OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3Vs
dElzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IpOgorICAgICAg
ICAoV2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeSk6CisgICAgICAgIChXZWJD
b3JlOjpidWlsZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVj
dENvbnRlbnRJblJhbmdlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6c2V0RGF0YURldGVjdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OmRhdGFEZXRlY3Rpb25SZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29j
b2EvRGF0YURldGVjdG9yc0NvcmVTUEkuaDoKKwogMjAxNi0wMS0yMCAgRGF2aWQgS2lsemVyICA8
ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUgZGVsZWdhdGUgbWV0aG9kcyBkb24ndCBOVUxM
LWNoZWNrIG1faGFuZGxlLT5jbGllbnQoKQpAQCAtMjg2LDcgKzMxNSw2IEBACiAgICAgICAgIChX
ZWJDb3JlOjptYXRjaGVzRnV0dXJlQ3VlUHNldWRvQ2xhc3MpOgogICAgICAgICAoV2ViQ29yZTo6
bWF0Y2hlc1Bhc3RDdWVQc2V1ZG9DbGFzcyk6CiAKLT4+Pj4+Pj4gLnIxOTUzMTYKIDIwMTYtMDEt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTk1MTc5LgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgRERBY3Rpb25D
b250ZXh0OworT0JKQ19DTEFTUyBOU0FycmF5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUzLDcgKzU0LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUFyb3VuZEhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRh
Qm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKTsKICNlbmRpZgot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0
cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBOU0FycmF5ICpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+
JiBjb250ZXh0UmFuZ2UsIERhdGFEZXRlY3RvclR5cGVzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNDQgQEAKICNp
bXBvcnQgIlZpc2libGVVbml0cy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKIAorI2lmIFBM
QVRGT1JNKElPUykKK2NvbnN0IE5TU3RyaW5nICprRGF0YURldGVjdG9yc1VSTFNjaGVtZSA9IEAi
eC1hcHBsZS1kYXRhLWRldGVjdG9ycyI7Citjb25zdCBOU1N0cmluZyAqa0RhdGFEZXRlY3RvcnNB
dHRyaWJ1dGVUeXBlS2V5ID0gQCJ4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzLXR5cGUiOworY29uc3Qg
TlNTdHJpbmcgKmtEYXRhRGV0ZWN0b3JzQXR0cmlidXRlUmVzdWx0S2V5ID0gQCJ4LWFwcGxlLWRh
dGEtZGV0ZWN0b3JzLXJlc3VsdCI7CisKK0BpbnRlcmZhY2UgTlNJbmRleFBhdGggKERERXh0ZW5z
aW9ucykKKy0gKE5TU3RyaW5nICopZGF0YURldGVjdG9yU3RyaW5nVmFsdWU7CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBOU0luZGV4UGF0aCAoRERFeHRlbnNpb25zKQorCistIChOU1N0cmluZyAq
KWRhdGFEZXRlY3RvclN0cmluZ1ZhbHVlCit7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBzZWxm
Lmxlbmd0aDsKKyAgICAKKyAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMDoKKyAgICAg
ICAgcmV0dXJuIEAiIjsKKyAgICAgICAgCisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlbHUiLCAodW5zaWduZWQgbG9uZylbc2VsZiBpbmRl
eEF0UG9zaXRpb246MF1dOworCisgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIlbHUvJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3NlbGYgaW5kZXhB
dFBvc2l0aW9uOjBdLCAodW5zaWduZWQgbG9uZylbc2VsZiBpbmRleEF0UG9zaXRpb246MV1dOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+IGNvbXBvbmVudHMgPSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTpsZW5ndGhdKTsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0g
MCA7IGkgPCBsZW5ndGggOyBpKyspCisgICAgICAgICAgICAgICAgW2NvbXBvbmVudHMgYWRkT2Jq
ZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3Nl
bGYgaW5kZXhBdFBvc2l0aW9uOmldXV07CisgICAgICAgICAgICByZXR1cm4gW2NvbXBvbmVudHMg
Y29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiLyJdOworICAgICAgICB9CisgICAgfQorfQorCitA
ZW5kCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oTUFDKQpA
QCAtMTM4LDkgKzE3NiwzNzIgQEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVj
dGlvbgogICAgIHJldHVybiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwg
Y29udGV4dFJhbmdlLCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2Up
OwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgCitzdGF0aWMgQk9PTCByZXN1bHRJc1VSTChERFJlc3VsdFJlZiByZXN1bHQpCit7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBzdGF0aWMgTlNTZXQg
KnVybFR5cGVzID0gW1tOU1NldCBzZXRXaXRoT2JqZWN0czogKE5TU3RyaW5nICopRERCaW5kZXJI
dHRwVVJMS2V5LCAoTlNTdHJpbmcgKilEREJpbmRlcldlYlVSTEtleSwgKE5TU3RyaW5nICopRERC
aW5kZXJNYWlsVVJMS2V5LCAoTlNTdHJpbmcgKilEREJpbmRlckdlbmVyaWNVUkxLZXksIChOU1N0
cmluZyAqKUREQmluZGVyRW1haWxLZXksIG5pbF0gcmV0YWluXTsKKyAgICByZXR1cm4gW3VybFR5
cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKUREUmVzdWx0R2V0VHlwZShyZXN1bHQpXTsK
K30KKworc3RhdGljIE5TU3RyaW5nICpjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoRERSZXN1
bHRSZWYgY3VycmVudFJlc3VsdCwgTlNTdHJpbmcgKnJlc3VsdElkZW50aWZpZXIsIE5TRGF0ZSAq
IHJlZmVyZW5jZURhdGUsIE5TVGltZVpvbmUgKiByZWZlcmVuY2VUaW1lWm9uZSwgRGF0YURldGVj
dG9yVHlwZXMgZGV0ZWN0aW9uVHlwZXMpCit7CisgICAgaWYgKCFERFJlc3VsdEhhc1Byb3BlcnRp
ZXMoY3VycmVudFJlc3VsdCwgRERSZXN1bHRQcm9wZXJ0eVBhc3NpdmVEaXNwbGF5KSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25U
eXBlcyBwaG9uZVR5cGVzID0gKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZVBob25l
TnVtYmVyKSA/IEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvblJlZ3VsYXIgOiBERFVSTGlm
aWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25Ob25lOworICAgIEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdv
cnkgPSBERFJlc3VsdEdldENhdGVnb3J5KGN1cnJlbnRSZXN1bHQpOworICAgIENGU3RyaW5nUmVm
IHR5cGUgPSBERFJlc3VsdEdldFR5cGUoY3VycmVudFJlc3VsdCk7CisgICAgCisgICAgaWYgKCgo
ZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcykgJiYgKEREUmVzdWx0Q2F0
ZWdvcnlBZGRyZXNzID09IGNhdGVnb3J5KSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAm
IERhdGFEZXRlY3RvclR5cGVUcmFja2luZ051bWJlcikgJiYgKENGU3RyaW5nQ29tcGFyZShEREJp
bmRlclRyYWNraW5nTnVtYmVyS2V5LCB0eXBlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpCisg
ICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlRmxpZ2h0KSAmJiAo
Q0ZTdHJpbmdDb21wYXJlKEREQmluZGVyRmxpZ2h0SW5mb3JtYXRpb25LZXksIHR5cGUsIDApID09
IGtDRkNvbXBhcmVFcXVhbFRvKSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFE
ZXRlY3RvclR5cGVQaG9uZU51bWJlcikgJiYgKEREUmVzdWx0Q2F0ZWdvcnlQaG9uZU51bWJlciA9
PSBjYXRlZ29yeSkpCisgICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JU
eXBlTGluaykgJiYgcmVzdWx0SXNVUkwoY3VycmVudFJlc3VsdCkpKSB7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gRERVUkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0SWRl
bnRpZmllciwgcGhvbmVUeXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUpOwor
ICAgIH0KKyAgICBpZiAoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZUNhbGVuZGFy
RXZlbnQpICYmIChERFJlc3VsdENhdGVnb3J5Q2FsZW5kYXJFdmVudCA9PSBjYXRlZ29yeSkpIHsK
KyAgICAgICAgaWYgKCFERFJlc3VsdElzUGFzdERhdGUoY3VycmVudFJlc3VsdCwgKENGRGF0ZVJl
ZilyZWZlcmVuY2VEYXRlLCAoQ0ZUaW1lWm9uZVJlZilyZWZlcmVuY2VUaW1lWm9uZSkpCisgICAg
ICAgICAgICByZXR1cm4gRERVUkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0
SWRlbnRpZmllciwgcGhvbmVUeXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUp
OworICAgIH0KKyAgICByZXR1cm4gbmlsOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVSZXN1bHRM
aW5rc0Zyb21BbmNob3IoTm9kZSAqbm9kZSwgTm9kZSAqbm9kZVBhcmVudCkKK3sKKyAgICAvLyBQ
ZXJmb3JtIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIGZvciBhbmNob3Igbm9kZXMsIHdoaWNoIGhhdmUg
dGhlIEREVVJMU2NoZW1lIGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZSwKKyAgICAvLyB0YWtlIHRoZWly
IGNoaWxkcmVuIGFuZCBpbnNlcnQgdGhlbSBiZWZvcmUgdGhlIGFuY2hvciwKKyAgICAvLyBhbmQg
dGhlbiByZW1vdmUgdGhlIGFuY2hvci4KKyAgICAKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBCT09MIG5vZGVJc0REQW5jaG9yID0gaXM8SFRNTEFuY2hvckVsZW1l
bnQ+KCpub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJM
U2NoZW1lKSA9PSAidHJ1ZSI7CisgICAgCisgICAgUmVmUHRyPE5vZGVMaXN0PiBjaGlsZHJlbiA9
IG5vZGUtPmNoaWxkTm9kZXMoKTsKKyAgICB1bnNpZ25lZCBjaGlsZENvdW50ID0gY2hpbGRyZW4t
Pmxlbmd0aCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7
CisgICAgICAgIE5vZGUgKmNoaWxkID0gY2hpbGRyZW4tPml0ZW0oaSk7CisgICAgICAgIGlmIChp
czxFbGVtZW50PigqY2hpbGQpKQorICAgICAgICAgICAgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5j
aG9yKGNoaWxkLCBub2RlKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vZGVJc0REQW5jaG9yICYm
IG5vZGVQYXJlbnQpIHsKKyAgICAgICAgY2hpbGRyZW4gPSBub2RlLT5jaGlsZE5vZGVzKCk7Cisg
ICAgICAgIGNoaWxkQ291bnQgPSBjaGlsZHJlbi0+bGVuZ3RoKCk7CisgICAgICAgIAorICAgICAg
ICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNoaWxkcmVuIGFuZCBtb3ZlIHRoZW0gYWxsIG9udG8gdGhl
IHNhbWUgbGV2ZWwgYXMgdGhpcyBhbmNob3IuCisgICAgICAgIC8vIFJlbW92ZSB0aGUgYW5jaG9y
IGFmdGVyd2FyZHMuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsg
aSsrKSB7CisgICAgICAgICAgICBOb2RlICpjaGlsZCA9IGNoaWxkcmVuLT5pdGVtKDApOyAvLyBj
aGlsZHJlbiBjaGFuZ2UgZHVlIHRvIGluc2VydGlvbiwgYWx3YXlzIHVzZSBpZHggMAorICAgICAg
ICAgICAgbm9kZVBhcmVudC0+aW5zZXJ0QmVmb3JlKGNoaWxkLCBub2RlLCBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKKyAgICAgICAgfQorICAgICAgICBub2RlUGFyZW50LT5yZW1vdmVDaGlsZChub2Rl
LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHNlYXJjaEZv
ckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyhOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGVuZE5v
ZGUpCit7CisgICAgTm9kZSAqbm9kZSA9IHN0YXJ0Tm9kZTsKKyAgICB3aGlsZSAobm9kZSkgewor
ICAgICAgICAKKyAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKKyAg
ICAgICAgICAgIGlmIChkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJM
U2NoZW1lKSAhPSAidHJ1ZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3Iobm9kZSwgbm9kZS0+cGFyZW50RWxlbWVu
dCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUgPT0gZW5kTm9kZSkg
eworICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgdGhlIGVuZCBub2RlIGFuZCBubyBsaW5rLCBy
ZXR1cm4gZmFsc2UgdW5sZXNzIGFuIGFuY2VzdG9yIG5vZGUgaXMgYSBsaW5rLgorICAgICAgICAg
ICAgLy8gVGhlIG9ubHkgYW5jZXN0b3JzIG5vdCB0ZXN0ZWQgYXQgdGhpcyBwb2ludCBhcmUgaW4g
dGhlIGRpcmVjdCBsaW5lIGZyb20gc2VsZidzIHBhcmVudCB0byB0aGUgdG9wLgorICAgICAgICAg
ICAgbm9kZSA9IHN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgd2hpbGUgKG5v
ZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0
dHJpYnV0ZShERFVSTFNjaGVtZSkgIT0gInRydWUiKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFu
Y2hvcihub2RlLCBub2RlLT5wYXJlbnRFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBS
ZWZQdHI8Tm9kZUxpc3Q+IGNoaWxkTm9kZXMgPSBub2RlLT5jaGlsZE5vZGVzKCk7CisgICAgICAg
IGlmIChjaGlsZE5vZGVzLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIG5vZGUgPSBjaGlsZE5vZGVz
LT5pdGVtKDApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUgKm5ld05vZGUgPSBu
b2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgTm9kZSAqcGFyZW50Tm9kZSA9IG5vZGU7
CisgICAgICAgICAgICB3aGlsZSAoIW5ld05vZGUpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnRO
b2RlID0gcGFyZW50Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghcGFy
ZW50Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIG5ld05vZGUgPSBwYXJlbnROb2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbm9kZSA9IG5ld05vZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQogCi12b2lkIERhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJl
ZlB0cjxSYW5nZT4mLCBEYXRhRGV0ZWN0b3JUeXBlcykKK3N0YXRpYyBOU1N0cmluZyAqZGF0YURl
dGVjdG9yVHlwZUZvckNhdGVnb3J5KEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdvcnkpCiB7CisgICAg
c3dpdGNoIChjYXRlZ29yeSkgeworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeVBob25lTnVtYmVy
OgorICAgICAgICByZXR1cm4gQCJ0ZWxlcGhvbmUiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29y
eUxpbms6CisgICAgICAgIHJldHVybiBAImxpbmsiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29y
eUFkZHJlc3M6CisgICAgICAgIHJldHVybiBAImFkZHJlc3MiOworICAgIGNhc2UgRERSZXN1bHRD
YXRlZ29yeUNhbGVuZGFyRXZlbnQ6CisgICAgICAgIHJldHVybiBAImNhbGVuZGFyLWV2ZW50IjsK
KyAgICBjYXNlIEREUmVzdWx0Q2F0ZWdvcnlNaXNjOgorICAgICAgICByZXR1cm4gQCJtaXNjIjsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQCIiOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgYnVpbGRRdWVyeShERFNjYW5RdWVyeVJlZiBzY2FuUXVlcnksIFJhbmdlKiBjb250ZXh0UmFu
Z2UpCit7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywg
c3RvcCBhdCB0aGUgZmlyc3QgaGFyZCBicmVhay4KKyAgICBjb25zdCBDRkluZGV4IG1heEZyYWdt
ZW50V2l0aEhhcmRCcmVhayA9IDEwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVt
YmVyIG9mIGZyYWdtZW50cywgd2Ugc3RvcCBhdCB0aGUgbGluZS4KKyAgICBjb25zdCBDRkluZGV4
IG1heEZyYWdtZW50V2l0aExpbmVicmVhayA9IDUwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVy
IHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywgd2Ugc3RvcCBhdCB0aGUgc3BhY2UuCisgICAgY29u
c3QgQ0ZJbmRleCBtYXhGcmFnbWVudFNwYWNlID0gMTAwMDA7CisKKyAgICBDRkNoYXJhY3RlclNl
dFJlZiB3aGl0ZVNwYWNlc1NldCA9IENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFy
YWN0ZXJTZXRXaGl0ZXNwYWNlQW5kTmV3bGluZSk7CisgICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgbmV3
TGluZXNTZXQgPSBDRkNoYXJhY3RlclNldEdldFByZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0TmV3
bGluZSk7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZTsKKyAgICBDRkluZGV4IGl0
ZXJhdG9yQ291bnQgPSAwOworICAgIENGSW5kZXggZnJhZ21lbnRDb3VudCA9IDA7CisgICAgCisg
ICAgLy8gQnVpbGQgdGhlIHNjYW4gcXVlcnkgYWRkaW5nIHNlcGFyYXRvcnMuCisgICAgLy8gRm9y
IGVhY2ggZnJhZ21lbnQgdGhlIGl0ZXJhdG9yIGluY3JlbWVudCBpcyBzdG9yZWQgYXMgbWV0YWRh
dGEuCisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdlKTsgIWl0ZXJh
dG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSwgaXRlcmF0b3JDb3VudCsrKSB7CisgICAg
ICAgIHNpemVfdCBjdXJyZW50VGV4dExlbmd0aCA9IGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKTsK
KyAgICAgICAgaWYgKCFjdXJyZW50VGV4dExlbmd0aCkgeworICAgICAgICAgICAgRERTY2FuUXVl
cnlBZGRTZXBhcmF0b3Ioc2NhblF1ZXJ5LCBERFRleHRDb2FsZXNjaW5nVHlwZUhhcmRCcmVhayk7
CisgICAgICAgICAgICBpZiAoaXRlcmF0b3JDb3VudCA+IG1heEZyYWdtZW50V2l0aEhhcmRCcmVh
aykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIC8vIFRlc3QgZm9yIHdoaXRlIHNwYWNlIG5vZGVzLCB3ZSdyZSBjb2FsZXNj
aW5nIHRoZW0uCisgICAgICAgIGNvbnN0IFVuaUNoYXIgKmN1cnJlbnRDaGFyUHRyID0gaXRlcmF0
b3IudGV4dCgpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOworICAgICAgICAKKyAgICAgICAgQk9P
TCBjb250YWluc09ubHlXaGl0ZVNwYWNlID0gWUVTOworICAgICAgICBCT09MIGhhc1RhYiA9IE5P
OworICAgICAgICBCT09MIGhhc05ld2xpbmUgPSBOTzsKKyAgICAgICAgaW50IG5ic3BDb3VudCA9
IDA7CisgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGN1cnJlbnRUZXh0TGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIGlmICghQ0ZDaGFyYWN0ZXJTZXRJc0NoYXJhY3Rlck1lbWJl
cih3aGl0ZVNwYWNlc1NldCwgKmN1cnJlbnRDaGFyUHRyKSkgeworICAgICAgICAgICAgICAgIGNv
bnRhaW5zT25seVdoaXRlU3BhY2UgPSBOTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKENGQ2hhcmFjdGVyU2V0SXND
aGFyYWN0ZXJNZW1iZXIobmV3TGluZXNTZXQsICpjdXJyZW50Q2hhclB0cikpCisgICAgICAgICAg
ICAgICAgaGFzTmV3bGluZSA9IFlFUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKCpjdXJyZW50Q2hh
clB0ciA9PSAnXHQnKQorICAgICAgICAgICAgICAgIGhhc1RhYiA9IFlFUzsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29uc2VjdXRpdmUgbm9uIGJyZWFrYWJsZSBzcGFj
ZXMgYXJlIG1vc3QgbGlrZWx5IHNpbXVsYXRlZCB0YWJzLgorICAgICAgICAgICAgaWYgKCpjdXJy
ZW50Q2hhclB0ciA9PSAweGEwKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrbmJzcENvdW50ID4g
MikKKyAgICAgICAgICAgICAgICAgICAgaGFzVGFiID0gWUVTOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgbmJzcENvdW50ID0gMDsKKworICAgICAgICAgICAgY3VycmVudENo
YXJQdHIrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29udGFpbnNPbmx5V2hpdGVTcGFjZSkg
eworICAgICAgICAgICAgaWYgKGhhc05ld2xpbmUpIHsKKyAgICAgICAgICAgICAgICBERFNjYW5R
dWVyeUFkZExpbmVCcmVhayhzY2FuUXVlcnkpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRv
ckNvdW50ID4gbWF4RnJhZ21lbnRXaXRoTGluZWJyZWFrKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRERTY2FuUXVlcnlB
ZGRTZXBhcmF0b3Ioc2NhblF1ZXJ5LCBoYXNUYWIgPyBERFRleHRDb2FsZXNjaW5nVHlwZVRhYiA6
IEREVGV4dENvYWxlc2NpbmdUeXBlU3BhY2UpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRv
ckNvdW50ID4gbWF4RnJhZ21lbnRTcGFjZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjdXJyZW50VGV4dCA9IGFkb3B0Q0YoQ0ZT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBpdGVyYXRvci50
ZXh0KCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCksIGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKSkp
OworICAgICAgICBERFNjYW5RdWVyeUFkZFRleHRGcmFnbWVudChzY2FuUXVlcnksIGN1cnJlbnRU
ZXh0LmdldCgpLCBDRlJhbmdlTWFrZSgwLCBjdXJyZW50VGV4dExlbmd0aCksICh2b2lkICopaXRl
cmF0b3JDb3VudCwgKEREVGV4dEZyYWdtZW50TW9kZSkwLCBERFRleHRDb2FsZXNjaW5nVHlwZU5v
bmUpOworICAgICAgICBmcmFnbWVudENvdW50Kys7CisgICAgfQogfQogCitOU0FycmF5ICpEYXRh
RGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFu
Z2UsIERhdGFEZXRlY3RvclR5cGVzIHR5cGVzKQoreworICAgIFJldGFpblB0cjxERFNjYW5uZXJS
ZWY+IHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRh
cmQsIDAsIG51bGxwdHIpKTsKKyAgICBSZXRhaW5QdHI8RERTY2FuUXVlcnlSZWY+IHNjYW5RdWVy
eSA9IGFkb3B0Q0YoRERTY2FuUXVlcnlDcmVhdGUoTlVMTCkpOworICAgIGJ1aWxkUXVlcnkoc2Nh
blF1ZXJ5LmdldCgpLCBjb250ZXh0UmFuZ2UuZ2V0KCkpOworICAgIAorICAgIC8vIEZJWE1FOiB3
ZSBzaG91bGQgYWRkIGEgdGltZW91dCB0byB0aGlzIGNhbGwgdG8gbWFrZSBzdXJlIGl0IGRvZXNu
J3QgdGFrZSB0b28gbXVjaCB0aW1lLgorICAgIGlmICghRERTY2FubmVyU2NhblF1ZXJ5KHNjYW5u
ZXIuZ2V0KCksIHNjYW5RdWVyeS5nZXQoKSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHNjYW5uZXJSZXN1bHRzID0gYWRvcHRDRihERFNjYW5u
ZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCksIEREU2Nhbm5lckNvcHlSZXN1
bHRzT3B0aW9uc0ZvclBhc3NpdmVVc2UgfCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNDb2Fs
ZXNjZVNpZ25hdHVyZXMpKTsKKyAgICBpZiAoIXNjYW5uZXJSZXN1bHRzKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIAorICAgIENGSW5kZXggcmVzdWx0Q291bnQgPSBDRkFycmF5R2V0Q291bnQo
c2Nhbm5lclJlc3VsdHMuZ2V0KCkpOworICAgIGlmICghcmVzdWx0Q291bnQpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhbGxSZXN1bHRz
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiBpbmRleFBhdGhzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XSk7CisgICAgTlNJbnRlZ2VyIGN1cnJlbnRUb3BMZXZlbEluZGV4ID0gMDsKKwor
ICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2Nhbm5lciByZXN1bHRzIHRvIGZpbmQgc2lnbmF0
dXJlcyBhbmQgZXh0cmFjdCBhbGwgdGhlIHN1YnJlc3VsdHMgd2hpbGUKKyAgICAvLyBwb3B1bGF0
aW5nIHRoZSBhcnJheSBvZiBpbmRleCBwYXRocyB0byB1c2UgaW4gdGhlIGhyZWYgb2YgdGhlIGFu
Y2hvcnMgYmVpbmcgY3JlYXRlZC4KKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCByZXN1bHRD
b3VudDsgaSsrKSB7CisgICAgICAgIEREUmVzdWx0UmVmIHJlc3VsdCA9IChERFJlc3VsdFJlZilD
RkFycmF5R2V0VmFsdWVBdEluZGV4KHNjYW5uZXJSZXN1bHRzLmdldCgpLCBpKTsKKyAgICAgICAg
TlNJbmRleFBhdGggKmluZGV4UGF0aCA9IFtOU0luZGV4UGF0aCBpbmRleFBhdGhXaXRoSW5kZXg6
Y3VycmVudFRvcExldmVsSW5kZXhdOworICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKEREUmVz
dWx0R2V0VHlwZShyZXN1bHQpLCBEREJpbmRlclNpZ25hdHVyZUJsb2NrS2V5LCAwKSA9PSBrQ0ZD
b21wYXJlRXF1YWxUbykgeworICAgICAgICAgICAgQ0ZBcnJheVJlZiBzdWJyZXN1bHRzID0gRERS
ZXN1bHRHZXRTdWJSZXN1bHRzKHJlc3VsdCk7CisgICAgICAgICAgICBbYWxsUmVzdWx0cyBhZGRP
YmplY3RzRnJvbUFycmF5OihOU0FycmF5ICopc3VicmVzdWx0c107CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMCA7IGkgPCBbKE5TQXJyYXkgKilzdWJyZXN1
bHRzIGNvdW50XSA7IGkrKykKKyAgICAgICAgICAgICAgICBbaW5kZXhQYXRocyBhZGRPYmplY3Q6
W2luZGV4UGF0aCBpbmRleFBhdGhCeUFkZGluZ0luZGV4OmldXTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFthbGxSZXN1bHRzIGFkZE9iamVjdDooaWQpcmVzdWx0XTsKKyAgICAgICAg
ICAgIFtpbmRleFBhdGhzIGFkZE9iamVjdDppbmRleFBhdGhdOworICAgICAgICB9CisgICAgICAg
IGN1cnJlbnRUb3BMZXZlbEluZGV4Kys7CisgICAgfQorCisgICAgVmVjdG9yPFJlZlB0cjxSYW5n
ZT4+IHJlc3VsdFJhbmdlczsKKyAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdl
LmdldCgpKTsKKyAgICBDRkluZGV4IGl0ZXJhdG9yQ291bnQgPSAwOworCisgICAgcmVzdWx0Q291
bnQgPSBbYWxsUmVzdWx0cyBjb3VudF07CisgICAgCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRo
ZSBhcnJheSBvZiB0aGUgZXhwYW5kZWQgcmVzdWx0cyB0byBjcmVhdGUgYSB2ZWN0b3Igb2YgUmFu
Z2Ugb2JqZWN0cyB0aGF0IGluZGljYXRlCisgICAgLy8gd2hlcmUgdGhlIERPTSBuZWVkcyB0byBi
ZSBtb2RpZmllZC4KKyAgICAvLyBFYWNoIHJlc3VsdCBjYW4gYmUgY29udGFpbmVkIGFsbCBpbiBv
bmUgdGV4dCBub2RlIG9yIGNhbiBzcGFuIG11bHRpcGxlIHRleHQgbm9kZXMuCisgICAgZm9yIChD
RkluZGV4IGkgPSAwOyBpIDwgcmVzdWx0Q291bnQ7IGkrKykgeworICAgICAgICBERFJlc3VsdFJl
ZiByZXN1bHQgPSAoRERSZXN1bHRSZWYpW2FsbFJlc3VsdHMgb2JqZWN0QXRJbmRleDppXTsKKyAg
ICAgICAgRERRdWVyeVJhbmdlIHF1ZXJ5UmFuZ2UgPSBERFJlc3VsdEdldFF1ZXJ5UmFuZ2VGb3JV
UkxpZmljYXRpb24ocmVzdWx0KTsKKyAgICAgICAgQ0ZJbmRleCBpdGVyYXRvclRhcmdldEFkdmFu
Y2VDb3VudCA9IChDRkluZGV4KUREU2NhblF1ZXJ5R2V0RnJhZ21lbnRNZXRhRGF0YShzY2FuUXVl
cnkuZ2V0KCksIHF1ZXJ5UmFuZ2Uuc3RhcnQucXVlcnlJbmRleCk7CisgICAgICAgIHdoaWxlIChp
dGVyYXRvckNvdW50IDwgaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsKKyAgICAgICAgICAg
IGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yQ291bnQrKzsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IGl0ZXJhdG9yLnJhbmdl
KCk7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBzdGFydFJhbmdlOworICAgICAg
ICBDRkluZGV4IGZyYWdtZW50SW5kZXggPSBxdWVyeVJhbmdlLnN0YXJ0LnF1ZXJ5SW5kZXg7Cisg
ICAgICAgIHdoaWxlIChmcmFnbWVudEluZGV4IDwgcXVlcnlSYW5nZS5lbmQucXVlcnlJbmRleCkg
eworICAgICAgICAgICAgZnJhZ21lbnRJbmRleCsrOworICAgICAgICAgICAgaXRlcmF0b3JUYXJn
ZXRBZHZhbmNlQ291bnQgPSAoQ0ZJbmRleClERFNjYW5RdWVyeUdldEZyYWdtZW50TWV0YURhdGEo
c2NhblF1ZXJ5LmdldCgpLCBmcmFnbWVudEluZGV4KTsKKyAgICAgICAgICAgIHdoaWxlIChpdGVy
YXRvckNvdW50IDwgaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsKKyAgICAgICAgICAgICAg
ICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaXRlcmF0b3JDb3VudCsrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kUmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChzdGFydFJhbmdlID09IGVuZFJhbmdlKQorICAgICAgICAg
ICAgcmVzdWx0UmFuZ2VzLmFwcGVuZChUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHN0YXJ0UmFuZ2Uu
Z2V0KCksIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0LCBxdWVyeVJhbmdlLmVuZC5vZmZzZXQgLSBx
dWVyeVJhbmdlLnN0YXJ0Lm9mZnNldCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1
bHRSYW5nZXMuYXBwZW5kKFJhbmdlOjpjcmVhdGUoc3RhcnRSYW5nZS0+b3duZXJEb2N1bWVudCgp
LCAmc3RhcnRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgZm1heChzdGFydFJhbmdlLT5zdGFydE9m
ZnNldCgpLCBxdWVyeVJhbmdlLnN0YXJ0Lm9mZnNldCksICZlbmRSYW5nZS0+ZW5kQ29udGFpbmVy
KCksIGZtYXgoZW5kUmFuZ2UtPmVuZE9mZnNldCgpLCBxdWVyeVJhbmdlLmVuZC5vZmZzZXQpKSk7
CisgICAgfQorICAgIAorICAgIENGVGltZVpvbmVSZWYgdHogPSBDRlRpbWVab25lQ29weURlZmF1
bHQoKTsKKyAgICBOU0RhdGUgKnJlZmVyZW5jZURhdGUgPSBbTlNEYXRlIGRhdGVdOworICAgIFRl
eHQqIGxhc3RUZXh0Tm9kZVRvVXBkYXRlID0gbnVsbHB0cjsKKyAgICBTdHJpbmcgbGFzdE5vZGVD
b250ZW50OworICAgIHNpemVfdCBjb250ZW50T2Zmc2V0ID0gMDsKKyAgICBERFF1ZXJ5T2Zmc2V0
IGxhc3RNb2RpZmllZFF1ZXJ5T2Zmc2V0ID0gey0xLCAwfTsKKyAgICAKKyAgICAvLyBGb3IgZWFj
aCByZXN1bHQgYWRkIHRoZSBsaW5rLgorICAgIC8vIFNpbmNlIHRoZXJlIGNvdWxkIGJlIG11bHRp
cGxlIHJlc3VsdHMgaW4gdGhlIHNhbWUgdGV4dCBub2RlLCB0aGUgbm9kZSBpcyBvbmx5IG1vZGlm
aWVkIHdoZW4KKyAgICAvLyB3ZSBhcmUgYWJvdXQgdG8gcHJvY2VzcyBhIGRpZmZlcmVudCB0ZXh0
IG5vZGUuCisgICAgZm9yIChDRkluZGV4IHJlc3VsdEluZGV4ID0gMDsgcmVzdWx0SW5kZXggPCBy
ZXN1bHRDb3VudDsgcmVzdWx0SW5kZXgrKykgeworICAgICAgICBERFJlc3VsdFJlZiBjb3JlUmVz
dWx0ID0gKEREUmVzdWx0UmVmKVthbGxSZXN1bHRzIG9iamVjdEF0SW5kZXg6cmVzdWx0SW5kZXhd
OworICAgICAgICBERFF1ZXJ5UmFuZ2UgcXVlcnlSYW5nZSA9IEREUmVzdWx0R2V0UXVlcnlSYW5n
ZUZvclVSTGlmaWNhdGlvbihjb3JlUmVzdWx0KTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByZXN1
bHRSYW5nZSA9IHJlc3VsdFJhbmdlc1tyZXN1bHRJbmRleF07CisgICAgICAgIE5TU3RyaW5nICpp
ZGVudGlmaWVyID0gW1tpbmRleFBhdGhzIG9iamVjdEF0SW5kZXg6cmVzdWx0SW5kZXhdIGRhdGFE
ZXRlY3RvclN0cmluZ1ZhbHVlXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvcnJlc3BvbmRpbmdVUkwg
PSBjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoY29yZVJlc3VsdCwgaWRlbnRpZmllciwgcmVm
ZXJlbmNlRGF0ZSwgKE5TVGltZVpvbmUgKil0eiwgdHlwZXMpOworICAgICAgICAKKyAgICAgICAg
aWYgKCFjb3JyZXNwb25kaW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERM
aW5rcygmcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksICZyZXN1bHRSYW5nZS0+ZW5kQ29u
dGFpbmVyKCkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAvLyBD
b21wYXJlIHRoZSBxdWVyeSBvZmZzZXRzIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnbyBiYWNrd2Fy
ZHMKKyAgICAgICAgaWYgKEREUXVlcnlPZmZzZXRDb21wYXJlKGxhc3RNb2RpZmllZFF1ZXJ5T2Zm
c2V0LCBxdWVyeVJhbmdlLnN0YXJ0KSA+PSAwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgbGFzdE1vZGlmaWVkUXVlcnlPZmZzZXQgPSBxdWVyeVJhbmdlLmVuZDsKKworICAgICAg
ICBmb3IgKFRleHRJdGVyYXRvciBpdChyZXN1bHRSYW5nZS5nZXQoKSk7ICFpdC5hdEVuZCgpOyBp
dC5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIGlmICghaXQudGV4dCgpLmxlbmd0aCgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gaXQucmFuZ2UoKTsKKyAgICAgICAgICAgIGlmICghaXM8VGV4dD4ocmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgTm9kZSogcGFyZW50Tm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpLnBhcmVudE5v
ZGUoKTsKKyAgICAgICAgICAgIFRleHQmIGN1cnJlbnRUZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+
KHJhbmdlLT5zdGFydENvbnRhaW5lcigpKTsKKyAgICAgICAgICAgIERvY3VtZW50JiBkb2N1bWVu
dCA9IGN1cnJlbnRUZXh0Tm9kZS5kb2N1bWVudCgpOworICAgICAgICAgICAgU3RyaW5nIHRleHRO
b2RlRGF0YTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGxhc3RUZXh0Tm9kZVRvVXBk
YXRlICE9ICZjdXJyZW50VGV4dE5vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdFRleHRO
b2RlVG9VcGRhdGUpCisgICAgICAgICAgICAgICAgICAgIGxhc3RUZXh0Tm9kZVRvVXBkYXRlLT5z
ZXREYXRhKGxhc3ROb2RlQ29udGVudCk7CisgICAgICAgICAgICAgICAgY29udGVudE9mZnNldCA9
IDA7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLT5zdGFydE9mZnNldCgpID4gMCkKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLnN1YnN0cmluZ0Rh
dGEoMCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHRO
b2RlLnN1YnN0cmluZ0RhdGEoY29udGVudE9mZnNldCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgLSBj
b250ZW50T2Zmc2V0LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCF0ZXh0Tm9kZURhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgUmVm
UHRyPE5vZGU+IG5ld05vZGUgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIHRleHROb2RlRGF0YSk7
CisgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsICZjdXJy
ZW50VGV4dE5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgICAgIGNvbnRl
bnRPZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhY3R1YWwgYW5jaG9yIG5vZGUgYW5kIGlu
c2VydCBpdCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgICAgICAgIHRleHROb2RlRGF0
YSA9IGN1cnJlbnRUZXh0Tm9kZS5zdWJzdHJpbmdEYXRhKHJhbmdlLT5zdGFydE9mZnNldCgpLCBy
YW5nZS0+ZW5kT2Zmc2V0KCkgLSByYW5nZS0+c3RhcnRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IFRleHQ6OmNyZWF0ZShk
b2N1bWVudCwgdGV4dE5vZGVEYXRhKTsKKyAgICAgICAgICAgIHBhcmVudE5vZGUtPmluc2VydEJl
Zm9yZShuZXdOb2RlLCAmY3VycmVudFRleHROb2RlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgUmVmUHRyPEhUTUxBbmNob3JFbGVtZW50PiBhbmNob3JF
bGVtZW50ID0gSFRNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgICAgICAg
ICBhbmNob3JFbGVtZW50LT5zZXRIcmVmKGNvcnJlc3BvbmRpbmdVUkwpOworICAgICAgICAgICAg
YW5jaG9yRWxlbWVudC0+c2V0RGlyKCJsdHIiKTsKKyAgICAgICAgICAgIFJlZlB0cjxBdHRyPiBj
b2xvciA9IGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudE5vZGUpLT5nZXRBdHRyaWJ1dGVOb2RlKCJj
b2xvciIpOworICAgICAgICAgICAgaWYgKGNvbG9yKQorICAgICAgICAgICAgICAgIGFuY2hvckVs
ZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0ciwgY29sb3ItPnN0eWxlKCkt
PmNzc1RleHQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPk5v
ZGU6OmFwcGVuZENoaWxkKG5ld05vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAg
ICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKGFuY2hvckVsZW1lbnQsICZjdXJyZW50VGV4dE5v
ZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgLy8gQWRkIGEgc3BlY2lhbCBh
dHRyaWJ1dGUgdG8gbWFyayB0aGlzIFVSTGlmaWNhdGlvbiBhcyB0aGUgcmVzdWx0IG9mIGRhdGEg
ZGV0ZWN0b3JzLgorICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRlKFF1YWxp
ZmllZE5hbWUobnVsbEF0b20sIChOU1N0cmluZyAqKWtEYXRhRGV0ZWN0b3JzVVJMU2NoZW1lLCBu
dWxsQXRvbSksICJ0cnVlIik7CisgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1
dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgKE5TU3RyaW5nICopa0RhdGFEZXRlY3RvcnNBdHRy
aWJ1dGVUeXBlS2V5LCBudWxsQXRvbSksIGRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeShERFJl
c3VsdEdldENhdGVnb3J5KGNvcmVSZXN1bHQpKSk7CisgICAgICAgICAgICBhbmNob3JFbGVtZW50
LT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgKE5TU3RyaW5nICopa0RhdGFE
ZXRlY3RvcnNBdHRyaWJ1dGVSZXN1bHRLZXksIG51bGxBdG9tKSwgaWRlbnRpZmllcik7CisgICAg
ICAgICAgICBjb250ZW50T2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBsYXN0Tm9kZUNvbnRlbnQgPSBjdXJyZW50VGV4dE5vZGUuc3Vic3RyaW5n
RGF0YShyYW5nZS0+ZW5kT2Zmc2V0KCksIGN1cnJlbnRUZXh0Tm9kZS5sZW5ndGgoKSAtIHJhbmdl
LT5lbmRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICBsYXN0VGV4
dE5vZGVUb1VwZGF0ZSA9ICZjdXJyZW50VGV4dE5vZGU7CisgICAgICAgIH0gICAgICAgIAorICAg
IH0KKyAgICBpZiAobGFzdFRleHROb2RlVG9VcGRhdGUpCisgICAgICAgIGxhc3RUZXh0Tm9kZVRv
VXBkYXRlLT5zZXREYXRhKGxhc3ROb2RlQ29udGVudCk7CisgICAgCisgICAgcmV0dXJuIFtERFNj
YW5uZXJSZXN1bHQgcmVzdWx0c0Zyb21Db3JlUmVzdWx0czpzY2FubmVyUmVzdWx0cy5nZXQoKV07
Cit9CisKKyNlbHNlCitOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5n
ZShSZWZQdHI8UmFuZ2U+JiwgRGF0YURldGVjdG9yVHlwZXMpCit7CisgICAgcmV0dXJuIG5pbDsK
K30KKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAko
cmV2aXNpb24gMTk1MzE2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NywxMCArNDcsMTMgQEAKICNpbmNsdWRlICJGcmFtZVdpbi5oIgogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShDT0NPQSkKK09CSkNfQ0xBU1MgTlNBcnJheTsKKyNlbmRpZgorCiAj
aWYgUExBVEZPUk0oSU9TKQogT0JKQ19DTEFTUyBET01DU1NTdHlsZURlY2xhcmF0aW9uOwogT0JK
Q19DTEFTUyBET01Ob2RlOwotT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU1N0cmlu
ZzsKICNlbmRpZgogCkBAIC0xODUsNiArMTg4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZnJhbWVTY2FsZUZhY3RvcigpIGNvbnN0OwogCiAg
ICAgICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CisgICAgICAgIAor
I2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICAgICAgdm9pZCBzZXREYXRhRGV0ZWN0aW9u
UmVzdWx0cyhOU0FycmF5ICpyZXN1bHRzKSB7IG1fZGF0YURldGVjdGlvblJlc3VsdHMgPSByZXN1
bHRzOyB9CisgICAgICAgIE5TQXJyYXkgKmRhdGFEZXRlY3Rpb25SZXN1bHRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhRGV0ZWN0aW9uUmVzdWx0cy5nZXQoKTsgfQorI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgICAgIGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJiB2aWV3cG9ydEFyZ3Vt
ZW50cygpIGNvbnN0OwpAQCAtMjkyLDYgKzMwMCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEV2ZW50SGFuZGxlcj4gbV9ldmVudEhhbmRsZXI7
CiAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Db250cm9sbGVyPiBtX2Fu
aW1hdGlvbkNvbnRyb2xsZXI7CiAKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgICAg
IFJldGFpblB0cjxOU0FycmF5PiBtX2RhdGFEZXRlY3Rpb25SZXN1bHRzOworI2VuZGlmCiAjaWYg
UExBVEZPUk0oSU9TKQogICAgICAgICB2b2lkIGJldHRlckFwcHJveGltYXRlTm9kZShjb25zdCBJ
bnRQb2ludCYgdGVzdFBvaW50LCBOb2RlUXVhbGlmaWVyLCBOb2RlKiYgYmVzdCwgTm9kZSogZmFp
bGVkTm9kZSwgSW50UG9pbnQmIGJlc3RQb2ludCwgSW50UmVjdCYgYmVzdFJlY3QsIGNvbnN0IElu
dFJlY3QmIHRlc3RSZWN0KTsKICAgICAgICAgYm9vbCBoaXRUZXN0UmVzdWx0QXRWaWV3cG9ydExv
Y2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHZpZXdwb3J0TG9jYXRpb24sIEhpdFRlc3RSZXN1bHQm
LCBJbnRQb2ludCYgY2VudGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9j
b2NvYS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NwaS9jb2NvYS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oCShyZXZpc2lvbiAxOTUz
MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvRGF0YURldGVjdG9yc0Nv
cmVTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTIgQEAKIAogI2lmIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspCiAKKyNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3JlL0REQmluZGVyS2V5
c19Qcml2YXRlLmg+CisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzQ29yZS9ERFNjYW5uZXJSZXN1bHQu
aD4KICNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3JlL0RhdGFEZXRlY3RvcnNDb3JlLmg+Ci0KKyNp
ZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzQ29yZS9ERFVSTGlmaWVyLmg+
CisjZW5kaWYKICNlbHNlIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiB0eXBlZGVmIGVu
dW0gewpAQCAtNDAsNiArNDQsNzYgQEAgZW51bSB7CiAgICAgRERTY2FubmVyQ29weVJlc3VsdHNP
cHRpb25zTm9PdmVybGFwID0gMSA8PCAwLAogfTsKIAorZW51bSB7CisgICAgRERVUkxpZmllclBo
b25lTnVtYmVyRGV0ZWN0aW9uTm9uZSA9IDAsCisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0
ZWN0aW9uUmVndWxhciA9IDEgPDwgMSwKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rp
b25RdW90ZWRTaG9ydHMgPSAxIDw8IDIsCisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0
aW9uVW5xdW90ZWRTaG9ydHMgPSAxIDw8IDMKK307Cit0eXBlZGVmIE5TVUludGVnZXIgRERVUkxp
ZmllclBob25lTnVtYmVyRGV0ZWN0aW9uVHlwZXM7CisKK3R5cGVkZWYgZW51bSBfX0REVGV4dENv
YWxlc2NpbmdUeXBlIHsKKyAgICBERFRleHRDb2FsZXNjaW5nVHlwZU5vbmUgPSAwLAorICAgIERE
VGV4dENvYWxlc2NpbmdUeXBlU3BhY2UgPSAxLAorICAgIEREVGV4dENvYWxlc2NpbmdUeXBlVGFi
ID0gMiwKKyAgICBERFRleHRDb2FsZXNjaW5nVHlwZUxpbmVCcmVhayA9IDMsCisgICAgRERUZXh0
Q29hbGVzY2luZ1R5cGVIYXJkQnJlYWsgPSA0LAorfSBERFRleHRDb2FsZXNjaW5nVHlwZTsKKwor
dHlwZWRlZiBlbnVtIHsKKyAgICBERFJlc3VsdENhdGVnb3J5VW5rbm93biA9IDAsCisgICAgRERS
ZXN1bHRDYXRlZ29yeUxpbmsgPSAxLAorICAgIEREUmVzdWx0Q2F0ZWdvcnlQaG9uZU51bWJlciA9
IDIsCisgICAgRERSZXN1bHRDYXRlZ29yeUFkZHJlc3MgPSAzLAorICAgIEREUmVzdWx0Q2F0ZWdv
cnlDYWxlbmRhckV2ZW50ID0gNCwKKyAgICBERFJlc3VsdENhdGVnb3J5TWlzYyA9IDUsCit9IERE
UmVzdWx0Q2F0ZWdvcnk7CisKK3R5cGVkZWYgZW51bSBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlv
bnMgeworICAgIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc05vbmUgPSAwLAorICAgIEREU2Nh
bm5lckNvcHlSZXN1bHRzT3B0aW9uc05vT3ZlcmxhcCA9IDEgPDwgMCwKKyAgICBERFNjYW5uZXJD
b3B5UmVzdWx0c09wdGlvbnNDb2FsZXNjZVNpZ25hdHVyZXMgPSAxIDw8IDEsCisgICAgRERTY2Fu
bmVyQ29weVJlc3VsdHNPcHRpb25zUmVtb3ZlTG9uZWx5QWRkcmVzc2VzID0gMSA8PCAyLAorICAg
IEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc0tlZXBPbmx5U2hvcnRQaG9uZU51bWJlcnMgPSAx
IDw8IDMsCisgICAgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zS2VlcE9ubHlRdW90ZWRTaG9y
dFBob25lTnVtYmVycyA9IDEgPDwgNCwKKyAgICBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNN
ZXJnZVJlc3VsdHMgPSAxIDw8IDUsCisgICAgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zUmVt
b3ZlQW1iaWd1b3VzRGF0ZXMgPSAxIDw8IDYsCisgICAgRERTY2FubmVyQ29weVJlc3VsdHNPcHRp
b25zUmVtb3ZlVW5zdXBwb3J0ZWRVUkxTY2hlbWVzID0gMSA8PCA3LAorICAgIEREU2Nhbm5lckNv
cHlSZXN1bHRzT3B0aW9uc01hcmtJbnN0ZWFkT2ZSZW1vdmUgPSAxIDw8IDgsCisgICAgRERTY2Fu
bmVyQ29weVJlc3VsdHNPcHRpb25zUmVtb3ZlQW1iaWd1b3VzRm9yTG9jYWxlID0gMSA8PCA5LAor
fTsKKwordHlwZWRlZiBlbnVtIF9fRERUZXh0RnJhZ21lbnRUeXBlIHsKKyAgICBERFRleHRGcmFn
bWVudFR5cGVUcmltV2hpdGVTcGFjZSA9ICAweDEsCisgICAgRERUZXh0RnJhZ21lbnRUeXBlSWdu
b3JlQ1JMRiA9ICAweDIsCit9IEREVGV4dEZyYWdtZW50TW9kZTsKKworZXh0ZXJuIENGU3RyaW5n
UmVmIGNvbnN0IEREQmluZGVySHR0cFVSTEtleTsKK2V4dGVybiBDRlN0cmluZ1JlZiBjb25zdCBE
REJpbmRlcldlYlVSTEtleTsKK2V4dGVybiBDRlN0cmluZ1JlZiBjb25zdCBEREJpbmRlck1haWxV
UkxLZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3QgRERCaW5kZXJHZW5lcmljVVJMS2V5Owor
ZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVyRW1haWxLZXk7CitleHRlcm4gQ0ZTdHJp
bmdSZWYgY29uc3QgRERCaW5kZXJUcmFja2luZ051bWJlcktleTsKK2V4dGVybiBDRlN0cmluZ1Jl
ZiBjb25zdCBEREJpbmRlckZsaWdodEluZm9ybWF0aW9uS2V5OworZXh0ZXJuIENGU3RyaW5nUmVm
IGNvbnN0IEREQmluZGVyU2lnbmF0dXJlQmxvY2tLZXk7CitleHRlcm4gTlNTdHJpbmcgKiBjb25z
dCBERFVSTFNjaGVtZTsKKworQGludGVyZmFjZSBERFNjYW5uZXJSZXN1bHQgOiBOU09iamVjdCA8
TlNDb2RpbmcsIE5TU2VjdXJlQ29kaW5nPgorKyAoTlNBcnJheSAqKSByZXN1bHRzRnJvbUNvcmVS
ZXN1bHRzOihDRkFycmF5UmVmKWNvcmVSZXN1bHRzOworQGVuZAorCisjZGVmaW5lIEREUmVzdWx0
UHJvcGVydHlQYXNzaXZlRGlzcGxheSAgICgxIDw8IDApCisKK3R5cGVkZWYgc3RydWN0IF9fRERR
dWVyeU9mZnNldCB7CisgICAgQ0ZJbmRleCBxdWVyeUluZGV4OworICAgIENGSW5kZXggb2Zmc2V0
OworfSBERFF1ZXJ5T2Zmc2V0OworCit0eXBlZGVmIHN0cnVjdCBfX0REUXVlcnlSYW5nZSB7Cisg
ICAgRERRdWVyeU9mZnNldCBzdGFydDsKKyAgICBERFF1ZXJ5T2Zmc2V0IGVuZDsKK30gRERRdWVy
eVJhbmdlOworCiAjZW5kaWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAKIHR5cGVkZWYg
c3RydWN0IF9fRERSZXN1bHQgKkREUmVzdWx0UmVmOwpAQCAtNDgsMTMgKzEyMiwyOSBAQCB0eXBl
ZGVmIHN0cnVjdCBfX0REU2Nhbm5lciAqRERTY2FubmVyUmVmCiAKIHR5cGVkZWYgQ0ZJbmRleCBE
RFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnM7CiB0eXBlZGVmIENGSW5kZXggRERTY2FubmVyT3B0
aW9uczsKK2V4dGVybiBjb25zdCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnMgRERTY2FubmVy
Q29weVJlc3VsdHNPcHRpb25zRm9yUGFzc2l2ZVVzZTsKIAogZXh0ZXJuICJDIiB7CiAKIEREU2Nh
bm5lclJlZiBERFNjYW5uZXJDcmVhdGUoRERTY2FubmVyVHlwZSwgRERTY2FubmVyT3B0aW9ucywg
Q0ZFcnJvclJlZiopOworRERTY2FuUXVlcnlSZWYgRERTY2FuUXVlcnlDcmVhdGUoQ0ZBbGxvY2F0
b3JSZWYpOwogRERTY2FuUXVlcnlSZWYgRERTY2FuUXVlcnlDcmVhdGVGcm9tU3RyaW5nKENGQWxs
b2NhdG9yUmVmLCBDRlN0cmluZ1JlZiwgQ0ZSYW5nZSk7CiBCb29sZWFuIEREU2Nhbm5lclNjYW5R
dWVyeShERFNjYW5uZXJSZWYsIEREU2NhblF1ZXJ5UmVmKTsKIENGQXJyYXlSZWYgRERTY2FubmVy
Q29weVJlc3VsdHNXaXRoT3B0aW9ucyhERFNjYW5uZXJSZWYsIEREU2Nhbm5lckNvcHlSZXN1bHRz
T3B0aW9ucyk7CiBDRlJhbmdlIEREUmVzdWx0R2V0UmFuZ2UoRERSZXN1bHRSZWYpOworQ0ZTdHJp
bmdSZWYgRERSZXN1bHRHZXRUeXBlKEREUmVzdWx0UmVmKTsKK0REUmVzdWx0Q2F0ZWdvcnkgRERS
ZXN1bHRHZXRDYXRlZ29yeShERFJlc3VsdFJlZik7CitCb29sZWFuIEREUmVzdWx0SXNQYXN0RGF0
ZShERFJlc3VsdFJlZiwgQ0ZEYXRlUmVmIHJlZmVyZW5jZURhdGUsIENGVGltZVpvbmVSZWYgcmVm
ZXJlbmNlVGltZVpvbmUpOwordm9pZCBERFNjYW5RdWVyeUFkZFRleHRGcmFnbWVudChERFNjYW5R
dWVyeVJlZiwgQ0ZTdHJpbmdSZWYsIENGUmFuZ2UsIHZvaWQgKmlkZW50aWZpZXIsIEREVGV4dEZy
YWdtZW50TW9kZSwgRERUZXh0Q29hbGVzY2luZ1R5cGUpOwordm9pZCBERFNjYW5RdWVyeUFkZFNl
cGFyYXRvcihERFNjYW5RdWVyeVJlZiwgRERUZXh0Q29hbGVzY2luZ1R5cGUpOwordm9pZCBERFNj
YW5RdWVyeUFkZExpbmVCcmVhayhERFNjYW5RdWVyeVJlZik7Cit2b2lkICpERFNjYW5RdWVyeUdl
dEZyYWdtZW50TWV0YURhdGEoRERTY2FuUXVlcnlSZWYsIENGSW5kZXggcXVlcnlJbmRleCk7Citi
b29sIEREUmVzdWx0SGFzUHJvcGVydGllcyhERFJlc3VsdFJlZiwgQ0ZJbmRleCBwcm9wZXJ0eVNl
dCk7CitDRkFycmF5UmVmIEREUmVzdWx0R2V0U3ViUmVzdWx0cyhERFJlc3VsdFJlZik7CitERFF1
ZXJ5UmFuZ2UgRERSZXN1bHRHZXRRdWVyeVJhbmdlRm9yVVJMaWZpY2F0aW9uKEREUmVzdWx0UmVm
KTsKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCitOU1N0cmluZyAqRERVUkxTdHJpbmdGb3JSZXN1
bHQoRERSZXN1bHRSZWYgY3VycmVudFJlc3VsdCwgTlNTdHJpbmcgKiByZXN1bHRJZGVudGlmaWVy
LCBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25UeXBlcyBpbmNsdWRpbmdUZWxHcm91cHMs
IE5TRGF0ZSAqIHJlZmVyZW5jZURhdGUsIE5TVGltZVpvbmUgKiByZWZlcmVuY2VUaW1lWm9uZSk7
CisjZW5kaWYKIAogfQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MzkyKQorKysgU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYt
MDEtMjAgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQg
c3VwcG9ydCBmb3IgRGF0YURldGVjdG9ycyBpbiBXSyAoaU9TKS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjk4OQorICAgICAgICByZGFyOi8vcHJv
YmxlbS8yMjg1NTk2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgIChmcm9t
V0tEYXRhRGV0ZWN0b3JUeXBlcyk6IENoYW5nZWQgcGFyYW1ldGVyIHRvIHVpbnQ2NF90IHRvCisg
ICAgICAgIHN1Y2Nlc3NmdWxseSBjb21wYXJlIGFnYWluc3QgV0tEYXRhRGV0ZWN0b3JUeXBlQWxs
LgorCiAyMDE2LTAxLTIwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgRml4IENNYWtlIGJ1aWxkIGFmdGVyIHIxOTUzMDAuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNp
b24gMTk1MzE3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxNSw3ICszMTUsNyBAQCBzdGF0aWMgYm9vbCBzaG91
bGRBbGxvd1BpY3R1cmVJblBpY3R1cmVNCiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBX0RFVEVD
VElPTikKLXN0YXRpYyBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlcyBmcm9tV0tEYXRhRGV0ZWN0
b3JUeXBlcyh1aW50MzJfdCB0eXBlcykKK3N0YXRpYyBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBl
cyBmcm9tV0tEYXRhRGV0ZWN0b3JUeXBlcyh1aW50NjRfdCB0eXBlcykKIHsKICAgICBpZiAoc3Rh
dGljX2Nhc3Q8V0tEYXRhRGV0ZWN0b3JUeXBlcz4odHlwZXMpID09IFdLRGF0YURldGVjdG9yVHlw
ZU5vbmUpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlTm9uZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269466</attachid>
            <date>2016-01-21 10:30:54 -0800</date>
            <delta_ts>2016-01-21 13:37:57 -0800</delta_ts>
            <desc>Keep trying to build</desc>
            <filename>ddwk2-part2.txt</filename>
            <type>text/plain</type>
            <size>29571</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTM5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAxLTIwICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgdGhlIGxvZ2ljIHRvIHBlcmZvcm0gZGF0YSBkZXRlY3Rpb24gYW5kIG1vZGlmeQor
ICAgICAgICB0aGUgZG9tIGJ5IGFkZGluZyBkYXRhIGRldGVjdG9yIGxpbmtzIGFzIGFwcHJvcHJp
YXRlLgorICAgICAgICBUaGUgZGF0YSBkZXRlY3RvciByZXN1bHRzIHJldHVybmVkIGJ5IGRldGVj
dENvbnRlbnRJblJhbmdlIGFyZQorICAgICAgICBzdG9yZWQgaW4gdGhlIEZyYW1lIG9iamVjdC4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oOgorICAgICAgICAqIGVk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKC1bTlNJbmRleFBhdGggZGF0
YURldGVjdG9yU3RyaW5nVmFsdWVdKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246
OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3Vs
dElzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IpOgorICAgICAg
ICAoV2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeSk6CisgICAgICAgIChXZWJD
b3JlOjpidWlsZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVj
dENvbnRlbnRJblJhbmdlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6c2V0RGF0YURldGVjdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OmRhdGFEZXRlY3Rpb25SZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29j
b2EvRGF0YURldGVjdG9yc0NvcmVTUEkuaDoKKwogMjAxNi0wMS0yMCAgRGF2aWQgS2lsemVyICA8
ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUgZGVsZWdhdGUgbWV0aG9kcyBkb24ndCBOVUxM
LWNoZWNrIG1faGFuZGxlLT5jbGllbnQoKQpAQCAtMjg2LDcgKzMxNSw2IEBACiAgICAgICAgIChX
ZWJDb3JlOjptYXRjaGVzRnV0dXJlQ3VlUHNldWRvQ2xhc3MpOgogICAgICAgICAoV2ViQ29yZTo6
bWF0Y2hlc1Bhc3RDdWVQc2V1ZG9DbGFzcyk6CiAKLT4+Pj4+Pj4gLnIxOTUzMTYKIDIwMTYtMDEt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTk1MTc5LgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgRERBY3Rpb25D
b250ZXh0OworT0JKQ19DTEFTUyBOU0FycmF5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUzLDcgKzU0LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUFyb3VuZEhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRh
Qm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKTsKICNlbmRpZgot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0
cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBOU0FycmF5ICpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+
JiBjb250ZXh0UmFuZ2UsIERhdGFEZXRlY3RvclR5cGVzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNDQgQEAKICNp
bXBvcnQgIlZpc2libGVVbml0cy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKIAorI2lmIFBM
QVRGT1JNKElPUykKK2NvbnN0IE5TU3RyaW5nICprRGF0YURldGVjdG9yc1VSTFNjaGVtZSA9IEAi
eC1hcHBsZS1kYXRhLWRldGVjdG9ycyI7Citjb25zdCBOU1N0cmluZyAqa0RhdGFEZXRlY3RvcnNB
dHRyaWJ1dGVUeXBlS2V5ID0gQCJ4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzLXR5cGUiOworY29uc3Qg
TlNTdHJpbmcgKmtEYXRhRGV0ZWN0b3JzQXR0cmlidXRlUmVzdWx0S2V5ID0gQCJ4LWFwcGxlLWRh
dGEtZGV0ZWN0b3JzLXJlc3VsdCI7CisKK0BpbnRlcmZhY2UgTlNJbmRleFBhdGggKERERXh0ZW5z
aW9ucykKKy0gKE5TU3RyaW5nICopZGF0YURldGVjdG9yU3RyaW5nVmFsdWU7CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBOU0luZGV4UGF0aCAoRERFeHRlbnNpb25zKQorCistIChOU1N0cmluZyAq
KWRhdGFEZXRlY3RvclN0cmluZ1ZhbHVlCit7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBzZWxm
Lmxlbmd0aDsKKyAgICAKKyAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMDoKKyAgICAg
ICAgcmV0dXJuIEAiIjsKKyAgICAgICAgCisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlbHUiLCAodW5zaWduZWQgbG9uZylbc2VsZiBpbmRl
eEF0UG9zaXRpb246MF1dOworCisgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIlbHUvJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3NlbGYgaW5kZXhB
dFBvc2l0aW9uOjBdLCAodW5zaWduZWQgbG9uZylbc2VsZiBpbmRleEF0UG9zaXRpb246MV1dOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+IGNvbXBvbmVudHMgPSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTpsZW5ndGhdKTsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0g
MCA7IGkgPCBsZW5ndGggOyBpKyspCisgICAgICAgICAgICAgICAgW2NvbXBvbmVudHMgYWRkT2Jq
ZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3Nl
bGYgaW5kZXhBdFBvc2l0aW9uOmldXV07CisgICAgICAgICAgICByZXR1cm4gW2NvbXBvbmVudHMg
Y29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiLyJdOworICAgICAgICB9CisgICAgfQorfQorCitA
ZW5kCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oTUFDKQpA
QCAtMTM4LDkgKzE3NiwzNzIgQEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVj
dGlvbgogICAgIHJldHVybiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwg
Y29udGV4dFJhbmdlLCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2Up
OwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgCitzdGF0aWMgQk9PTCByZXN1bHRJc1VSTChERFJlc3VsdFJlZiByZXN1bHQpCit7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBzdGF0aWMgTlNTZXQg
KnVybFR5cGVzID0gW1tOU1NldCBzZXRXaXRoT2JqZWN0czogKE5TU3RyaW5nICopRERCaW5kZXJI
dHRwVVJMS2V5LCAoTlNTdHJpbmcgKilEREJpbmRlcldlYlVSTEtleSwgKE5TU3RyaW5nICopRERC
aW5kZXJNYWlsVVJMS2V5LCAoTlNTdHJpbmcgKilEREJpbmRlckdlbmVyaWNVUkxLZXksIChOU1N0
cmluZyAqKUREQmluZGVyRW1haWxLZXksIG5pbF0gcmV0YWluXTsKKyAgICByZXR1cm4gW3VybFR5
cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKUREUmVzdWx0R2V0VHlwZShyZXN1bHQpXTsK
K30KKworc3RhdGljIE5TU3RyaW5nICpjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoRERSZXN1
bHRSZWYgY3VycmVudFJlc3VsdCwgTlNTdHJpbmcgKnJlc3VsdElkZW50aWZpZXIsIE5TRGF0ZSAq
IHJlZmVyZW5jZURhdGUsIE5TVGltZVpvbmUgKiByZWZlcmVuY2VUaW1lWm9uZSwgRGF0YURldGVj
dG9yVHlwZXMgZGV0ZWN0aW9uVHlwZXMpCit7CisgICAgaWYgKCFERFJlc3VsdEhhc1Byb3BlcnRp
ZXMoY3VycmVudFJlc3VsdCwgRERSZXN1bHRQcm9wZXJ0eVBhc3NpdmVEaXNwbGF5KSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25U
eXBlcyBwaG9uZVR5cGVzID0gKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZVBob25l
TnVtYmVyKSA/IEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvblJlZ3VsYXIgOiBERFVSTGlm
aWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25Ob25lOworICAgIEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdv
cnkgPSBERFJlc3VsdEdldENhdGVnb3J5KGN1cnJlbnRSZXN1bHQpOworICAgIENGU3RyaW5nUmVm
IHR5cGUgPSBERFJlc3VsdEdldFR5cGUoY3VycmVudFJlc3VsdCk7CisgICAgCisgICAgaWYgKCgo
ZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcykgJiYgKEREUmVzdWx0Q2F0
ZWdvcnlBZGRyZXNzID09IGNhdGVnb3J5KSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAm
IERhdGFEZXRlY3RvclR5cGVUcmFja2luZ051bWJlcikgJiYgKENGU3RyaW5nQ29tcGFyZShEREJp
bmRlclRyYWNraW5nTnVtYmVyS2V5LCB0eXBlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpCisg
ICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlRmxpZ2h0KSAmJiAo
Q0ZTdHJpbmdDb21wYXJlKEREQmluZGVyRmxpZ2h0SW5mb3JtYXRpb25LZXksIHR5cGUsIDApID09
IGtDRkNvbXBhcmVFcXVhbFRvKSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFE
ZXRlY3RvclR5cGVQaG9uZU51bWJlcikgJiYgKEREUmVzdWx0Q2F0ZWdvcnlQaG9uZU51bWJlciA9
PSBjYXRlZ29yeSkpCisgICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JU
eXBlTGluaykgJiYgcmVzdWx0SXNVUkwoY3VycmVudFJlc3VsdCkpKSB7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gRERVUkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0SWRl
bnRpZmllciwgcGhvbmVUeXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUpOwor
ICAgIH0KKyAgICBpZiAoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZUNhbGVuZGFy
RXZlbnQpICYmIChERFJlc3VsdENhdGVnb3J5Q2FsZW5kYXJFdmVudCA9PSBjYXRlZ29yeSkpIHsK
KyAgICAgICAgaWYgKCFERFJlc3VsdElzUGFzdERhdGUoY3VycmVudFJlc3VsdCwgKENGRGF0ZVJl
ZilyZWZlcmVuY2VEYXRlLCAoQ0ZUaW1lWm9uZVJlZilyZWZlcmVuY2VUaW1lWm9uZSkpCisgICAg
ICAgICAgICByZXR1cm4gRERVUkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0
SWRlbnRpZmllciwgcGhvbmVUeXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUp
OworICAgIH0KKyAgICByZXR1cm4gbmlsOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVSZXN1bHRM
aW5rc0Zyb21BbmNob3IoTm9kZSAqbm9kZSwgTm9kZSAqbm9kZVBhcmVudCkKK3sKKyAgICAvLyBQ
ZXJmb3JtIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIGZvciBhbmNob3Igbm9kZXMsIHdoaWNoIGhhdmUg
dGhlIEREVVJMU2NoZW1lIGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZSwKKyAgICAvLyB0YWtlIHRoZWly
IGNoaWxkcmVuIGFuZCBpbnNlcnQgdGhlbSBiZWZvcmUgdGhlIGFuY2hvciwKKyAgICAvLyBhbmQg
dGhlbiByZW1vdmUgdGhlIGFuY2hvci4KKyAgICAKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBCT09MIG5vZGVJc0REQW5jaG9yID0gaXM8SFRNTEFuY2hvckVsZW1l
bnQ+KCpub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJM
U2NoZW1lKSA9PSAidHJ1ZSI7CisgICAgCisgICAgUmVmUHRyPE5vZGVMaXN0PiBjaGlsZHJlbiA9
IG5vZGUtPmNoaWxkTm9kZXMoKTsKKyAgICB1bnNpZ25lZCBjaGlsZENvdW50ID0gY2hpbGRyZW4t
Pmxlbmd0aCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7
CisgICAgICAgIE5vZGUgKmNoaWxkID0gY2hpbGRyZW4tPml0ZW0oaSk7CisgICAgICAgIGlmIChp
czxFbGVtZW50PigqY2hpbGQpKQorICAgICAgICAgICAgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5j
aG9yKGNoaWxkLCBub2RlKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vZGVJc0REQW5jaG9yICYm
IG5vZGVQYXJlbnQpIHsKKyAgICAgICAgY2hpbGRyZW4gPSBub2RlLT5jaGlsZE5vZGVzKCk7Cisg
ICAgICAgIGNoaWxkQ291bnQgPSBjaGlsZHJlbi0+bGVuZ3RoKCk7CisgICAgICAgIAorICAgICAg
ICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNoaWxkcmVuIGFuZCBtb3ZlIHRoZW0gYWxsIG9udG8gdGhl
IHNhbWUgbGV2ZWwgYXMgdGhpcyBhbmNob3IuCisgICAgICAgIC8vIFJlbW92ZSB0aGUgYW5jaG9y
IGFmdGVyd2FyZHMuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsg
aSsrKSB7CisgICAgICAgICAgICBOb2RlICpjaGlsZCA9IGNoaWxkcmVuLT5pdGVtKDApOyAvLyBj
aGlsZHJlbiBjaGFuZ2UgZHVlIHRvIGluc2VydGlvbiwgYWx3YXlzIHVzZSBpZHggMAorICAgICAg
ICAgICAgbm9kZVBhcmVudC0+aW5zZXJ0QmVmb3JlKGNoaWxkLCBub2RlLCBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKKyAgICAgICAgfQorICAgICAgICBub2RlUGFyZW50LT5yZW1vdmVDaGlsZChub2Rl
LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHNlYXJjaEZv
ckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyhOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGVuZE5v
ZGUpCit7CisgICAgTm9kZSAqbm9kZSA9IHN0YXJ0Tm9kZTsKKyAgICB3aGlsZSAobm9kZSkgewor
ICAgICAgICAKKyAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKKyAg
ICAgICAgICAgIGlmIChkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJM
U2NoZW1lKSAhPSAidHJ1ZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3Iobm9kZSwgbm9kZS0+cGFyZW50RWxlbWVu
dCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUgPT0gZW5kTm9kZSkg
eworICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgdGhlIGVuZCBub2RlIGFuZCBubyBsaW5rLCBy
ZXR1cm4gZmFsc2UgdW5sZXNzIGFuIGFuY2VzdG9yIG5vZGUgaXMgYSBsaW5rLgorICAgICAgICAg
ICAgLy8gVGhlIG9ubHkgYW5jZXN0b3JzIG5vdCB0ZXN0ZWQgYXQgdGhpcyBwb2ludCBhcmUgaW4g
dGhlIGRpcmVjdCBsaW5lIGZyb20gc2VsZidzIHBhcmVudCB0byB0aGUgdG9wLgorICAgICAgICAg
ICAgbm9kZSA9IHN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgd2hpbGUgKG5v
ZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0
dHJpYnV0ZShERFVSTFNjaGVtZSkgIT0gInRydWUiKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFu
Y2hvcihub2RlLCBub2RlLT5wYXJlbnRFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBS
ZWZQdHI8Tm9kZUxpc3Q+IGNoaWxkTm9kZXMgPSBub2RlLT5jaGlsZE5vZGVzKCk7CisgICAgICAg
IGlmIChjaGlsZE5vZGVzLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIG5vZGUgPSBjaGlsZE5vZGVz
LT5pdGVtKDApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUgKm5ld05vZGUgPSBu
b2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgTm9kZSAqcGFyZW50Tm9kZSA9IG5vZGU7
CisgICAgICAgICAgICB3aGlsZSAoIW5ld05vZGUpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnRO
b2RlID0gcGFyZW50Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghcGFy
ZW50Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIG5ld05vZGUgPSBwYXJlbnROb2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbm9kZSA9IG5ld05vZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQogCi12b2lkIERhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJl
ZlB0cjxSYW5nZT4mLCBEYXRhRGV0ZWN0b3JUeXBlcykKK3N0YXRpYyBOU1N0cmluZyAqZGF0YURl
dGVjdG9yVHlwZUZvckNhdGVnb3J5KEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdvcnkpCiB7CisgICAg
c3dpdGNoIChjYXRlZ29yeSkgeworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeVBob25lTnVtYmVy
OgorICAgICAgICByZXR1cm4gQCJ0ZWxlcGhvbmUiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29y
eUxpbms6CisgICAgICAgIHJldHVybiBAImxpbmsiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29y
eUFkZHJlc3M6CisgICAgICAgIHJldHVybiBAImFkZHJlc3MiOworICAgIGNhc2UgRERSZXN1bHRD
YXRlZ29yeUNhbGVuZGFyRXZlbnQ6CisgICAgICAgIHJldHVybiBAImNhbGVuZGFyLWV2ZW50IjsK
KyAgICBjYXNlIEREUmVzdWx0Q2F0ZWdvcnlNaXNjOgorICAgICAgICByZXR1cm4gQCJtaXNjIjsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQCIiOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgYnVpbGRRdWVyeShERFNjYW5RdWVyeVJlZiBzY2FuUXVlcnksIFJhbmdlKiBjb250ZXh0UmFu
Z2UpCit7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywg
c3RvcCBhdCB0aGUgZmlyc3QgaGFyZCBicmVhay4KKyAgICBjb25zdCBDRkluZGV4IG1heEZyYWdt
ZW50V2l0aEhhcmRCcmVhayA9IDEwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVt
YmVyIG9mIGZyYWdtZW50cywgd2Ugc3RvcCBhdCB0aGUgbGluZS4KKyAgICBjb25zdCBDRkluZGV4
IG1heEZyYWdtZW50V2l0aExpbmVicmVhayA9IDUwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVy
IHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywgd2Ugc3RvcCBhdCB0aGUgc3BhY2UuCisgICAgY29u
c3QgQ0ZJbmRleCBtYXhGcmFnbWVudFNwYWNlID0gMTAwMDA7CisKKyAgICBDRkNoYXJhY3RlclNl
dFJlZiB3aGl0ZVNwYWNlc1NldCA9IENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFy
YWN0ZXJTZXRXaGl0ZXNwYWNlQW5kTmV3bGluZSk7CisgICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgbmV3
TGluZXNTZXQgPSBDRkNoYXJhY3RlclNldEdldFByZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0TmV3
bGluZSk7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZTsKKyAgICBDRkluZGV4IGl0
ZXJhdG9yQ291bnQgPSAwOworICAgIENGSW5kZXggZnJhZ21lbnRDb3VudCA9IDA7CisgICAgCisg
ICAgLy8gQnVpbGQgdGhlIHNjYW4gcXVlcnkgYWRkaW5nIHNlcGFyYXRvcnMuCisgICAgLy8gRm9y
IGVhY2ggZnJhZ21lbnQgdGhlIGl0ZXJhdG9yIGluY3JlbWVudCBpcyBzdG9yZWQgYXMgbWV0YWRh
dGEuCisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdlKTsgIWl0ZXJh
dG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSwgaXRlcmF0b3JDb3VudCsrKSB7CisgICAg
ICAgIHNpemVfdCBjdXJyZW50VGV4dExlbmd0aCA9IGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKTsK
KyAgICAgICAgaWYgKCFjdXJyZW50VGV4dExlbmd0aCkgeworICAgICAgICAgICAgRERTY2FuUXVl
cnlBZGRTZXBhcmF0b3Ioc2NhblF1ZXJ5LCBERFRleHRDb2FsZXNjaW5nVHlwZUhhcmRCcmVhayk7
CisgICAgICAgICAgICBpZiAoaXRlcmF0b3JDb3VudCA+IG1heEZyYWdtZW50V2l0aEhhcmRCcmVh
aykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIC8vIFRlc3QgZm9yIHdoaXRlIHNwYWNlIG5vZGVzLCB3ZSdyZSBjb2FsZXNj
aW5nIHRoZW0uCisgICAgICAgIGNvbnN0IFVuaUNoYXIgKmN1cnJlbnRDaGFyUHRyID0gaXRlcmF0
b3IudGV4dCgpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOworICAgICAgICAKKyAgICAgICAgQk9P
TCBjb250YWluc09ubHlXaGl0ZVNwYWNlID0gWUVTOworICAgICAgICBCT09MIGhhc1RhYiA9IE5P
OworICAgICAgICBCT09MIGhhc05ld2xpbmUgPSBOTzsKKyAgICAgICAgaW50IG5ic3BDb3VudCA9
IDA7CisgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGN1cnJlbnRUZXh0TGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIGlmICghQ0ZDaGFyYWN0ZXJTZXRJc0NoYXJhY3Rlck1lbWJl
cih3aGl0ZVNwYWNlc1NldCwgKmN1cnJlbnRDaGFyUHRyKSkgeworICAgICAgICAgICAgICAgIGNv
bnRhaW5zT25seVdoaXRlU3BhY2UgPSBOTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKENGQ2hhcmFjdGVyU2V0SXND
aGFyYWN0ZXJNZW1iZXIobmV3TGluZXNTZXQsICpjdXJyZW50Q2hhclB0cikpCisgICAgICAgICAg
ICAgICAgaGFzTmV3bGluZSA9IFlFUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKCpjdXJyZW50Q2hh
clB0ciA9PSAnXHQnKQorICAgICAgICAgICAgICAgIGhhc1RhYiA9IFlFUzsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29uc2VjdXRpdmUgbm9uIGJyZWFrYWJsZSBzcGFj
ZXMgYXJlIG1vc3QgbGlrZWx5IHNpbXVsYXRlZCB0YWJzLgorICAgICAgICAgICAgaWYgKCpjdXJy
ZW50Q2hhclB0ciA9PSAweGEwKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrbmJzcENvdW50ID4g
MikKKyAgICAgICAgICAgICAgICAgICAgaGFzVGFiID0gWUVTOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgbmJzcENvdW50ID0gMDsKKworICAgICAgICAgICAgY3VycmVudENo
YXJQdHIrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29udGFpbnNPbmx5V2hpdGVTcGFjZSkg
eworICAgICAgICAgICAgaWYgKGhhc05ld2xpbmUpIHsKKyAgICAgICAgICAgICAgICBERFNjYW5R
dWVyeUFkZExpbmVCcmVhayhzY2FuUXVlcnkpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRv
ckNvdW50ID4gbWF4RnJhZ21lbnRXaXRoTGluZWJyZWFrKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRERTY2FuUXVlcnlB
ZGRTZXBhcmF0b3Ioc2NhblF1ZXJ5LCBoYXNUYWIgPyBERFRleHRDb2FsZXNjaW5nVHlwZVRhYiA6
IEREVGV4dENvYWxlc2NpbmdUeXBlU3BhY2UpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRv
ckNvdW50ID4gbWF4RnJhZ21lbnRTcGFjZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjdXJyZW50VGV4dCA9IGFkb3B0Q0YoQ0ZT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBpdGVyYXRvci50
ZXh0KCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCksIGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKSkp
OworICAgICAgICBERFNjYW5RdWVyeUFkZFRleHRGcmFnbWVudChzY2FuUXVlcnksIGN1cnJlbnRU
ZXh0LmdldCgpLCBDRlJhbmdlTWFrZSgwLCBjdXJyZW50VGV4dExlbmd0aCksICh2b2lkICopaXRl
cmF0b3JDb3VudCwgKEREVGV4dEZyYWdtZW50TW9kZSkwLCBERFRleHRDb2FsZXNjaW5nVHlwZU5v
bmUpOworICAgICAgICBmcmFnbWVudENvdW50Kys7CisgICAgfQogfQogCitOU0FycmF5ICpEYXRh
RGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFu
Z2UsIERhdGFEZXRlY3RvclR5cGVzIHR5cGVzKQoreworICAgIFJldGFpblB0cjxERFNjYW5uZXJS
ZWY+IHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRh
cmQsIDAsIG51bGxwdHIpKTsKKyAgICBSZXRhaW5QdHI8RERTY2FuUXVlcnlSZWY+IHNjYW5RdWVy
eSA9IGFkb3B0Q0YoRERTY2FuUXVlcnlDcmVhdGUoTlVMTCkpOworICAgIGJ1aWxkUXVlcnkoc2Nh
blF1ZXJ5LmdldCgpLCBjb250ZXh0UmFuZ2UuZ2V0KCkpOworICAgIAorICAgIC8vIEZJWE1FOiB3
ZSBzaG91bGQgYWRkIGEgdGltZW91dCB0byB0aGlzIGNhbGwgdG8gbWFrZSBzdXJlIGl0IGRvZXNu
J3QgdGFrZSB0b28gbXVjaCB0aW1lLgorICAgIGlmICghRERTY2FubmVyU2NhblF1ZXJ5KHNjYW5u
ZXIuZ2V0KCksIHNjYW5RdWVyeS5nZXQoKSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHNjYW5uZXJSZXN1bHRzID0gYWRvcHRDRihERFNjYW5u
ZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCksIEREU2Nhbm5lckNvcHlSZXN1
bHRzT3B0aW9uc0ZvclBhc3NpdmVVc2UgfCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNDb2Fs
ZXNjZVNpZ25hdHVyZXMpKTsKKyAgICBpZiAoIXNjYW5uZXJSZXN1bHRzKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIAorICAgIENGSW5kZXggcmVzdWx0Q291bnQgPSBDRkFycmF5R2V0Q291bnQo
c2Nhbm5lclJlc3VsdHMuZ2V0KCkpOworICAgIGlmICghcmVzdWx0Q291bnQpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhbGxSZXN1bHRz
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiBpbmRleFBhdGhzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XSk7CisgICAgTlNJbnRlZ2VyIGN1cnJlbnRUb3BMZXZlbEluZGV4ID0gMDsKKwor
ICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2Nhbm5lciByZXN1bHRzIHRvIGZpbmQgc2lnbmF0
dXJlcyBhbmQgZXh0cmFjdCBhbGwgdGhlIHN1YnJlc3VsdHMgd2hpbGUKKyAgICAvLyBwb3B1bGF0
aW5nIHRoZSBhcnJheSBvZiBpbmRleCBwYXRocyB0byB1c2UgaW4gdGhlIGhyZWYgb2YgdGhlIGFu
Y2hvcnMgYmVpbmcgY3JlYXRlZC4KKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCByZXN1bHRD
b3VudDsgaSsrKSB7CisgICAgICAgIEREUmVzdWx0UmVmIHJlc3VsdCA9IChERFJlc3VsdFJlZilD
RkFycmF5R2V0VmFsdWVBdEluZGV4KHNjYW5uZXJSZXN1bHRzLmdldCgpLCBpKTsKKyAgICAgICAg
TlNJbmRleFBhdGggKmluZGV4UGF0aCA9IFtOU0luZGV4UGF0aCBpbmRleFBhdGhXaXRoSW5kZXg6
Y3VycmVudFRvcExldmVsSW5kZXhdOworICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKEREUmVz
dWx0R2V0VHlwZShyZXN1bHQpLCBEREJpbmRlclNpZ25hdHVyZUJsb2NrS2V5LCAwKSA9PSBrQ0ZD
b21wYXJlRXF1YWxUbykgeworICAgICAgICAgICAgQ0ZBcnJheVJlZiBzdWJyZXN1bHRzID0gRERS
ZXN1bHRHZXRTdWJSZXN1bHRzKHJlc3VsdCk7CisgICAgICAgICAgICBbYWxsUmVzdWx0cyBhZGRP
YmplY3RzRnJvbUFycmF5OihOU0FycmF5ICopc3VicmVzdWx0c107CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMCA7IGkgPCBbKE5TQXJyYXkgKilzdWJyZXN1
bHRzIGNvdW50XSA7IGkrKykKKyAgICAgICAgICAgICAgICBbaW5kZXhQYXRocyBhZGRPYmplY3Q6
W2luZGV4UGF0aCBpbmRleFBhdGhCeUFkZGluZ0luZGV4OmldXTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFthbGxSZXN1bHRzIGFkZE9iamVjdDooaWQpcmVzdWx0XTsKKyAgICAgICAg
ICAgIFtpbmRleFBhdGhzIGFkZE9iamVjdDppbmRleFBhdGhdOworICAgICAgICB9CisgICAgICAg
IGN1cnJlbnRUb3BMZXZlbEluZGV4Kys7CisgICAgfQorCisgICAgVmVjdG9yPFJlZlB0cjxSYW5n
ZT4+IHJlc3VsdFJhbmdlczsKKyAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdl
LmdldCgpKTsKKyAgICBDRkluZGV4IGl0ZXJhdG9yQ291bnQgPSAwOworCisgICAgcmVzdWx0Q291
bnQgPSBbYWxsUmVzdWx0cyBjb3VudF07CisgICAgCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRo
ZSBhcnJheSBvZiB0aGUgZXhwYW5kZWQgcmVzdWx0cyB0byBjcmVhdGUgYSB2ZWN0b3Igb2YgUmFu
Z2Ugb2JqZWN0cyB0aGF0IGluZGljYXRlCisgICAgLy8gd2hlcmUgdGhlIERPTSBuZWVkcyB0byBi
ZSBtb2RpZmllZC4KKyAgICAvLyBFYWNoIHJlc3VsdCBjYW4gYmUgY29udGFpbmVkIGFsbCBpbiBv
bmUgdGV4dCBub2RlIG9yIGNhbiBzcGFuIG11bHRpcGxlIHRleHQgbm9kZXMuCisgICAgZm9yIChD
RkluZGV4IGkgPSAwOyBpIDwgcmVzdWx0Q291bnQ7IGkrKykgeworICAgICAgICBERFJlc3VsdFJl
ZiByZXN1bHQgPSAoRERSZXN1bHRSZWYpW2FsbFJlc3VsdHMgb2JqZWN0QXRJbmRleDppXTsKKyAg
ICAgICAgRERRdWVyeVJhbmdlIHF1ZXJ5UmFuZ2UgPSBERFJlc3VsdEdldFF1ZXJ5UmFuZ2VGb3JV
UkxpZmljYXRpb24ocmVzdWx0KTsKKyAgICAgICAgQ0ZJbmRleCBpdGVyYXRvclRhcmdldEFkdmFu
Y2VDb3VudCA9IChDRkluZGV4KUREU2NhblF1ZXJ5R2V0RnJhZ21lbnRNZXRhRGF0YShzY2FuUXVl
cnkuZ2V0KCksIHF1ZXJ5UmFuZ2Uuc3RhcnQucXVlcnlJbmRleCk7CisgICAgICAgIHdoaWxlIChp
dGVyYXRvckNvdW50IDwgaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsKKyAgICAgICAgICAg
IGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yQ291bnQrKzsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IGl0ZXJhdG9yLnJhbmdl
KCk7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBzdGFydFJhbmdlOworICAgICAg
ICBDRkluZGV4IGZyYWdtZW50SW5kZXggPSBxdWVyeVJhbmdlLnN0YXJ0LnF1ZXJ5SW5kZXg7Cisg
ICAgICAgIHdoaWxlIChmcmFnbWVudEluZGV4IDwgcXVlcnlSYW5nZS5lbmQucXVlcnlJbmRleCkg
eworICAgICAgICAgICAgZnJhZ21lbnRJbmRleCsrOworICAgICAgICAgICAgaXRlcmF0b3JUYXJn
ZXRBZHZhbmNlQ291bnQgPSAoQ0ZJbmRleClERFNjYW5RdWVyeUdldEZyYWdtZW50TWV0YURhdGEo
c2NhblF1ZXJ5LmdldCgpLCBmcmFnbWVudEluZGV4KTsKKyAgICAgICAgICAgIHdoaWxlIChpdGVy
YXRvckNvdW50IDwgaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsKKyAgICAgICAgICAgICAg
ICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaXRlcmF0b3JDb3VudCsrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kUmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChzdGFydFJhbmdlID09IGVuZFJhbmdlKQorICAgICAgICAg
ICAgcmVzdWx0UmFuZ2VzLmFwcGVuZChUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHN0YXJ0UmFuZ2Uu
Z2V0KCksIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0LCBxdWVyeVJhbmdlLmVuZC5vZmZzZXQgLSBx
dWVyeVJhbmdlLnN0YXJ0Lm9mZnNldCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1
bHRSYW5nZXMuYXBwZW5kKFJhbmdlOjpjcmVhdGUoc3RhcnRSYW5nZS0+b3duZXJEb2N1bWVudCgp
LCAmc3RhcnRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgZm1heChzdGFydFJhbmdlLT5zdGFydE9m
ZnNldCgpLCBxdWVyeVJhbmdlLnN0YXJ0Lm9mZnNldCksICZlbmRSYW5nZS0+ZW5kQ29udGFpbmVy
KCksIGZtYXgoZW5kUmFuZ2UtPmVuZE9mZnNldCgpLCBxdWVyeVJhbmdlLmVuZC5vZmZzZXQpKSk7
CisgICAgfQorICAgIAorICAgIENGVGltZVpvbmVSZWYgdHogPSBDRlRpbWVab25lQ29weURlZmF1
bHQoKTsKKyAgICBOU0RhdGUgKnJlZmVyZW5jZURhdGUgPSBbTlNEYXRlIGRhdGVdOworICAgIFRl
eHQqIGxhc3RUZXh0Tm9kZVRvVXBkYXRlID0gbnVsbHB0cjsKKyAgICBTdHJpbmcgbGFzdE5vZGVD
b250ZW50OworICAgIHNpemVfdCBjb250ZW50T2Zmc2V0ID0gMDsKKyAgICBERFF1ZXJ5T2Zmc2V0
IGxhc3RNb2RpZmllZFF1ZXJ5T2Zmc2V0ID0gey0xLCAwfTsKKyAgICAKKyAgICAvLyBGb3IgZWFj
aCByZXN1bHQgYWRkIHRoZSBsaW5rLgorICAgIC8vIFNpbmNlIHRoZXJlIGNvdWxkIGJlIG11bHRp
cGxlIHJlc3VsdHMgaW4gdGhlIHNhbWUgdGV4dCBub2RlLCB0aGUgbm9kZSBpcyBvbmx5IG1vZGlm
aWVkIHdoZW4KKyAgICAvLyB3ZSBhcmUgYWJvdXQgdG8gcHJvY2VzcyBhIGRpZmZlcmVudCB0ZXh0
IG5vZGUuCisgICAgZm9yIChDRkluZGV4IHJlc3VsdEluZGV4ID0gMDsgcmVzdWx0SW5kZXggPCBy
ZXN1bHRDb3VudDsgcmVzdWx0SW5kZXgrKykgeworICAgICAgICBERFJlc3VsdFJlZiBjb3JlUmVz
dWx0ID0gKEREUmVzdWx0UmVmKVthbGxSZXN1bHRzIG9iamVjdEF0SW5kZXg6cmVzdWx0SW5kZXhd
OworICAgICAgICBERFF1ZXJ5UmFuZ2UgcXVlcnlSYW5nZSA9IEREUmVzdWx0R2V0UXVlcnlSYW5n
ZUZvclVSTGlmaWNhdGlvbihjb3JlUmVzdWx0KTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByZXN1
bHRSYW5nZSA9IHJlc3VsdFJhbmdlc1tyZXN1bHRJbmRleF07CisgICAgICAgIE5TU3RyaW5nICpp
ZGVudGlmaWVyID0gW1tpbmRleFBhdGhzIG9iamVjdEF0SW5kZXg6cmVzdWx0SW5kZXhdIGRhdGFE
ZXRlY3RvclN0cmluZ1ZhbHVlXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvcnJlc3BvbmRpbmdVUkwg
PSBjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoY29yZVJlc3VsdCwgaWRlbnRpZmllciwgcmVm
ZXJlbmNlRGF0ZSwgKE5TVGltZVpvbmUgKil0eiwgdHlwZXMpOworICAgICAgICAKKyAgICAgICAg
aWYgKCFjb3JyZXNwb25kaW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERM
aW5rcygmcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksICZyZXN1bHRSYW5nZS0+ZW5kQ29u
dGFpbmVyKCkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAvLyBD
b21wYXJlIHRoZSBxdWVyeSBvZmZzZXRzIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnbyBiYWNrd2Fy
ZHMKKyAgICAgICAgaWYgKEREUXVlcnlPZmZzZXRDb21wYXJlKGxhc3RNb2RpZmllZFF1ZXJ5T2Zm
c2V0LCBxdWVyeVJhbmdlLnN0YXJ0KSA+PSAwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgbGFzdE1vZGlmaWVkUXVlcnlPZmZzZXQgPSBxdWVyeVJhbmdlLmVuZDsKKworICAgICAg
ICBmb3IgKFRleHRJdGVyYXRvciBpdChyZXN1bHRSYW5nZS5nZXQoKSk7ICFpdC5hdEVuZCgpOyBp
dC5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIGlmICghaXQudGV4dCgpLmxlbmd0aCgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gaXQucmFuZ2UoKTsKKyAgICAgICAgICAgIGlmICghaXM8VGV4dD4ocmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgTm9kZSogcGFyZW50Tm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpLnBhcmVudE5v
ZGUoKTsKKyAgICAgICAgICAgIFRleHQmIGN1cnJlbnRUZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+
KHJhbmdlLT5zdGFydENvbnRhaW5lcigpKTsKKyAgICAgICAgICAgIERvY3VtZW50JiBkb2N1bWVu
dCA9IGN1cnJlbnRUZXh0Tm9kZS5kb2N1bWVudCgpOworICAgICAgICAgICAgU3RyaW5nIHRleHRO
b2RlRGF0YTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGxhc3RUZXh0Tm9kZVRvVXBk
YXRlICE9ICZjdXJyZW50VGV4dE5vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdFRleHRO
b2RlVG9VcGRhdGUpCisgICAgICAgICAgICAgICAgICAgIGxhc3RUZXh0Tm9kZVRvVXBkYXRlLT5z
ZXREYXRhKGxhc3ROb2RlQ29udGVudCk7CisgICAgICAgICAgICAgICAgY29udGVudE9mZnNldCA9
IDA7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLT5zdGFydE9mZnNldCgpID4gMCkKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLnN1YnN0cmluZ0Rh
dGEoMCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHRO
b2RlLnN1YnN0cmluZ0RhdGEoY29udGVudE9mZnNldCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgLSBj
b250ZW50T2Zmc2V0LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCF0ZXh0Tm9kZURhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgUmVm
UHRyPE5vZGU+IG5ld05vZGUgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIHRleHROb2RlRGF0YSk7
CisgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsICZjdXJy
ZW50VGV4dE5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgICAgIGNvbnRl
bnRPZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhY3R1YWwgYW5jaG9yIG5vZGUgYW5kIGlu
c2VydCBpdCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgICAgICAgIHRleHROb2RlRGF0
YSA9IGN1cnJlbnRUZXh0Tm9kZS5zdWJzdHJpbmdEYXRhKHJhbmdlLT5zdGFydE9mZnNldCgpLCBy
YW5nZS0+ZW5kT2Zmc2V0KCkgLSByYW5nZS0+c3RhcnRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IFRleHQ6OmNyZWF0ZShk
b2N1bWVudCwgdGV4dE5vZGVEYXRhKTsKKyAgICAgICAgICAgIHBhcmVudE5vZGUtPmluc2VydEJl
Zm9yZShuZXdOb2RlLCAmY3VycmVudFRleHROb2RlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgUmVmUHRyPEhUTUxBbmNob3JFbGVtZW50PiBhbmNob3JF
bGVtZW50ID0gSFRNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgICAgICAg
ICBhbmNob3JFbGVtZW50LT5zZXRIcmVmKGNvcnJlc3BvbmRpbmdVUkwpOworICAgICAgICAgICAg
YW5jaG9yRWxlbWVudC0+c2V0RGlyKCJsdHIiKTsKKyAgICAgICAgICAgIFJlZlB0cjxBdHRyPiBj
b2xvciA9IGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudE5vZGUpLT5nZXRBdHRyaWJ1dGVOb2RlKCJj
b2xvciIpOworICAgICAgICAgICAgaWYgKGNvbG9yKQorICAgICAgICAgICAgICAgIGFuY2hvckVs
ZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0ciwgY29sb3ItPnN0eWxlKCkt
PmNzc1RleHQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPk5v
ZGU6OmFwcGVuZENoaWxkKG5ld05vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAg
ICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKGFuY2hvckVsZW1lbnQsICZjdXJyZW50VGV4dE5v
ZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgLy8gQWRkIGEgc3BlY2lhbCBh
dHRyaWJ1dGUgdG8gbWFyayB0aGlzIFVSTGlmaWNhdGlvbiBhcyB0aGUgcmVzdWx0IG9mIGRhdGEg
ZGV0ZWN0b3JzLgorICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRlKFF1YWxp
ZmllZE5hbWUobnVsbEF0b20sIChOU1N0cmluZyAqKWtEYXRhRGV0ZWN0b3JzVVJMU2NoZW1lLCBu
dWxsQXRvbSksICJ0cnVlIik7CisgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1
dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgKE5TU3RyaW5nICopa0RhdGFEZXRlY3RvcnNBdHRy
aWJ1dGVUeXBlS2V5LCBudWxsQXRvbSksIGRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeShERFJl
c3VsdEdldENhdGVnb3J5KGNvcmVSZXN1bHQpKSk7CisgICAgICAgICAgICBhbmNob3JFbGVtZW50
LT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgKE5TU3RyaW5nICopa0RhdGFE
ZXRlY3RvcnNBdHRyaWJ1dGVSZXN1bHRLZXksIG51bGxBdG9tKSwgaWRlbnRpZmllcik7CisgICAg
ICAgICAgICBjb250ZW50T2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBsYXN0Tm9kZUNvbnRlbnQgPSBjdXJyZW50VGV4dE5vZGUuc3Vic3RyaW5n
RGF0YShyYW5nZS0+ZW5kT2Zmc2V0KCksIGN1cnJlbnRUZXh0Tm9kZS5sZW5ndGgoKSAtIHJhbmdl
LT5lbmRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICBsYXN0VGV4
dE5vZGVUb1VwZGF0ZSA9ICZjdXJyZW50VGV4dE5vZGU7CisgICAgICAgIH0gICAgICAgIAorICAg
IH0KKyAgICBpZiAobGFzdFRleHROb2RlVG9VcGRhdGUpCisgICAgICAgIGxhc3RUZXh0Tm9kZVRv
VXBkYXRlLT5zZXREYXRhKGxhc3ROb2RlQ29udGVudCk7CisgICAgCisgICAgcmV0dXJuIFtERFNj
YW5uZXJSZXN1bHQgcmVzdWx0c0Zyb21Db3JlUmVzdWx0czpzY2FubmVyUmVzdWx0cy5nZXQoKV07
Cit9CisKKyNlbHNlCitOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5n
ZShSZWZQdHI8UmFuZ2U+JiwgRGF0YURldGVjdG9yVHlwZXMpCit7CisgICAgcmV0dXJuIG5pbDsK
K30KKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAko
cmV2aXNpb24gMTk1MzE2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NywxMCArNDcsMTMgQEAKICNpbmNsdWRlICJGcmFtZVdpbi5oIgogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShDT0NPQSkKK09CSkNfQ0xBU1MgTlNBcnJheTsKKyNlbmRpZgorCiAj
aWYgUExBVEZPUk0oSU9TKQogT0JKQ19DTEFTUyBET01DU1NTdHlsZURlY2xhcmF0aW9uOwogT0JK
Q19DTEFTUyBET01Ob2RlOwotT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU1N0cmlu
ZzsKICNlbmRpZgogCkBAIC0xODUsNiArMTg4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZnJhbWVTY2FsZUZhY3RvcigpIGNvbnN0OwogCiAg
ICAgICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CisgICAgICAgIAor
I2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICAgICAgdm9pZCBzZXREYXRhRGV0ZWN0aW9u
UmVzdWx0cyhOU0FycmF5ICpyZXN1bHRzKSB7IG1fZGF0YURldGVjdGlvblJlc3VsdHMgPSByZXN1
bHRzOyB9CisgICAgICAgIE5TQXJyYXkgKmRhdGFEZXRlY3Rpb25SZXN1bHRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhRGV0ZWN0aW9uUmVzdWx0cy5nZXQoKTsgfQorI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgICAgIGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJiB2aWV3cG9ydEFyZ3Vt
ZW50cygpIGNvbnN0OwpAQCAtMjkyLDYgKzMwMCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEV2ZW50SGFuZGxlcj4gbV9ldmVudEhhbmRsZXI7
CiAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Db250cm9sbGVyPiBtX2Fu
aW1hdGlvbkNvbnRyb2xsZXI7CiAKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgICAg
IFJldGFpblB0cjxOU0FycmF5PiBtX2RhdGFEZXRlY3Rpb25SZXN1bHRzOworI2VuZGlmCiAjaWYg
UExBVEZPUk0oSU9TKQogICAgICAgICB2b2lkIGJldHRlckFwcHJveGltYXRlTm9kZShjb25zdCBJ
bnRQb2ludCYgdGVzdFBvaW50LCBOb2RlUXVhbGlmaWVyLCBOb2RlKiYgYmVzdCwgTm9kZSogZmFp
bGVkTm9kZSwgSW50UG9pbnQmIGJlc3RQb2ludCwgSW50UmVjdCYgYmVzdFJlY3QsIGNvbnN0IElu
dFJlY3QmIHRlc3RSZWN0KTsKICAgICAgICAgYm9vbCBoaXRUZXN0UmVzdWx0QXRWaWV3cG9ydExv
Y2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHZpZXdwb3J0TG9jYXRpb24sIEhpdFRlc3RSZXN1bHQm
LCBJbnRQb2ludCYgY2VudGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9j
b2NvYS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NwaS9jb2NvYS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oCShyZXZpc2lvbiAxOTUz
MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvRGF0YURldGVjdG9yc0Nv
cmVTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTIgQEAKIAogI2lmIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspCiAKKyNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3JlL0REQmluZGVyS2V5
c19Qcml2YXRlLmg+CisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzQ29yZS9ERFNjYW5uZXJSZXN1bHQu
aD4KICNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3JlL0RhdGFEZXRlY3RvcnNDb3JlLmg+Ci0KKyNp
ZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzQ29yZS9ERFVSTGlmaWVyLmg+
CisjZW5kaWYKICNlbHNlIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiB0eXBlZGVmIGVu
dW0gewpAQCAtMzgsNyArNDIsNzcgQEAgdHlwZWRlZiBlbnVtIHsKIGVudW0gewogICAgIEREU2Nh
bm5lckNvcHlSZXN1bHRzT3B0aW9uc05vbmUgPSAwLAogICAgIEREU2Nhbm5lckNvcHlSZXN1bHRz
T3B0aW9uc05vT3ZlcmxhcCA9IDEgPDwgMCwKKyAgICBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlv
bnNDb2FsZXNjZVNpZ25hdHVyZXMgPSAxIDw8IDEsCit9OworCitlbnVtIHsKKyAgICBERFVSTGlm
aWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25Ob25lID0gMCwKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1i
ZXJEZXRlY3Rpb25SZWd1bGFyID0gMSA8PCAxLAorICAgIEREVVJMaWZpZXJQaG9uZU51bWJlckRl
dGVjdGlvblF1b3RlZFNob3J0cyA9IDEgPDwgMiwKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJE
ZXRlY3Rpb25VbnF1b3RlZFNob3J0cyA9IDEgPDwgMwogfTsKK3R5cGVkZWYgTlNVSW50ZWdlciBE
RFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25UeXBlczsKKwordHlwZWRlZiBlbnVtIF9fRERU
ZXh0Q29hbGVzY2luZ1R5cGUgeworICAgIEREVGV4dENvYWxlc2NpbmdUeXBlTm9uZSA9IDAsCisg
ICAgRERUZXh0Q29hbGVzY2luZ1R5cGVTcGFjZSA9IDEsCisgICAgRERUZXh0Q29hbGVzY2luZ1R5
cGVUYWIgPSAyLAorICAgIEREVGV4dENvYWxlc2NpbmdUeXBlTGluZUJyZWFrID0gMywKKyAgICBE
RFRleHRDb2FsZXNjaW5nVHlwZUhhcmRCcmVhayA9IDQsCit9IEREVGV4dENvYWxlc2NpbmdUeXBl
OworCit0eXBlZGVmIGVudW0geworICAgIEREUmVzdWx0Q2F0ZWdvcnlVbmtub3duID0gMCwKKyAg
ICBERFJlc3VsdENhdGVnb3J5TGluayA9IDEsCisgICAgRERSZXN1bHRDYXRlZ29yeVBob25lTnVt
YmVyID0gMiwKKyAgICBERFJlc3VsdENhdGVnb3J5QWRkcmVzcyA9IDMsCisgICAgRERSZXN1bHRD
YXRlZ29yeUNhbGVuZGFyRXZlbnQgPSA0LAorICAgIEREUmVzdWx0Q2F0ZWdvcnlNaXNjID0gNSwK
K30gRERSZXN1bHRDYXRlZ29yeTsKKwordHlwZWRlZiBlbnVtIF9fRERUZXh0RnJhZ21lbnRUeXBl
IHsKKyAgICBERFRleHRGcmFnbWVudFR5cGVUcmltV2hpdGVTcGFjZSA9ICAweDEsCisgICAgRERU
ZXh0RnJhZ21lbnRUeXBlSWdub3JlQ1JMRiA9ICAweDIsCit9IEREVGV4dEZyYWdtZW50TW9kZTsK
KworZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVySHR0cFVSTEtleTsKK2V4dGVybiBD
RlN0cmluZ1JlZiBjb25zdCBEREJpbmRlcldlYlVSTEtleTsKK2V4dGVybiBDRlN0cmluZ1JlZiBj
b25zdCBEREJpbmRlck1haWxVUkxLZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3QgRERCaW5k
ZXJHZW5lcmljVVJMS2V5OworZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVyRW1haWxL
ZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3QgRERCaW5kZXJUcmFja2luZ051bWJlcktleTsK
K2V4dGVybiBDRlN0cmluZ1JlZiBjb25zdCBEREJpbmRlckZsaWdodEluZm9ybWF0aW9uS2V5Owor
ZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVyU2lnbmF0dXJlQmxvY2tLZXk7CitleHRl
cm4gTlNTdHJpbmcgKiBjb25zdCBERFVSTFNjaGVtZTsKKworQGludGVyZmFjZSBERFNjYW5uZXJS
ZXN1bHQgOiBOU09iamVjdCA8TlNDb2RpbmcsIE5TU2VjdXJlQ29kaW5nPgorKyAoTlNBcnJheSAq
KSByZXN1bHRzRnJvbUNvcmVSZXN1bHRzOihDRkFycmF5UmVmKWNvcmVSZXN1bHRzOworQGVuZAor
CisjZGVmaW5lIEREUmVzdWx0UHJvcGVydHlQYXNzaXZlRGlzcGxheSAgICgxIDw8IDApCisKK3R5
cGVkZWYgc3RydWN0IF9fRERRdWVyeU9mZnNldCB7CisgICAgQ0ZJbmRleCBxdWVyeUluZGV4Owor
ICAgIENGSW5kZXggb2Zmc2V0OworfSBERFF1ZXJ5T2Zmc2V0OworCit0eXBlZGVmIHN0cnVjdCBf
X0REUXVlcnlSYW5nZSB7CisgICAgRERRdWVyeU9mZnNldCBzdGFydDsKKyAgICBERFF1ZXJ5T2Zm
c2V0IGVuZDsKK30gRERRdWVyeVJhbmdlOworCitpbmxpbmUgQ0ZDb21wYXJpc29uUmVzdWx0IERE
UXVlcnlPZmZzZXRDb21wYXJlKEREUXVlcnlPZmZzZXQgbzEsIEREUXVlcnlPZmZzZXQgbzIpCit7
CisgICAgaWYgKG8xLnF1ZXJ5SW5kZXggPCBvMi5xdWVyeUluZGV4KQorICAgICAgICByZXR1cm4g
a0NGQ29tcGFyZUxlc3NUaGFuOworICAgIGlmIChvMS5xdWVyeUluZGV4ID4gbzIucXVlcnlJbmRl
eCkKKyAgICAgICAgcmV0dXJuIGtDRkNvbXBhcmVHcmVhdGVyVGhhbjsKKyAgICBpZiAobzEub2Zm
c2V0IDwgbzIub2Zmc2V0KQorICAgICAgICByZXR1cm4ga0NGQ29tcGFyZUxlc3NUaGFuOworICAg
IGlmIChvMS5vZmZzZXQgPiBvMi5vZmZzZXQpCisgICAgICAgIHJldHVybiBrQ0ZDb21wYXJlR3Jl
YXRlclRoYW47CisgICAgcmV0dXJuIGtDRkNvbXBhcmVFcXVhbFRvOworfQogCiAjZW5kaWYgLy8g
IVVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAKQEAgLTQ4LDEzICsxMjIsMjkgQEAgdHlwZWRlZiBz
dHJ1Y3QgX19ERFNjYW5uZXIgKkREU2Nhbm5lclJlZgogCiB0eXBlZGVmIENGSW5kZXggRERTY2Fu
bmVyQ29weVJlc3VsdHNPcHRpb25zOwogdHlwZWRlZiBDRkluZGV4IEREU2Nhbm5lck9wdGlvbnM7
CitleHRlcm4gY29uc3QgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zIEREU2Nhbm5lckNvcHlS
ZXN1bHRzT3B0aW9uc0ZvclBhc3NpdmVVc2U7CiAKIGV4dGVybiAiQyIgewogCiBERFNjYW5uZXJS
ZWYgRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGUsIEREU2Nhbm5lck9wdGlvbnMsIENGRXJy
b3JSZWYqKTsKK0REU2NhblF1ZXJ5UmVmIEREU2NhblF1ZXJ5Q3JlYXRlKENGQWxsb2NhdG9yUmVm
KTsKIEREU2NhblF1ZXJ5UmVmIEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZyhDRkFsbG9jYXRv
clJlZiwgQ0ZTdHJpbmdSZWYsIENGUmFuZ2UpOwogQm9vbGVhbiBERFNjYW5uZXJTY2FuUXVlcnko
RERTY2FubmVyUmVmLCBERFNjYW5RdWVyeVJlZik7CiBDRkFycmF5UmVmIEREU2Nhbm5lckNvcHlS
ZXN1bHRzV2l0aE9wdGlvbnMoRERTY2FubmVyUmVmLCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlv
bnMpOwogQ0ZSYW5nZSBERFJlc3VsdEdldFJhbmdlKEREUmVzdWx0UmVmKTsKK0NGU3RyaW5nUmVm
IEREUmVzdWx0R2V0VHlwZShERFJlc3VsdFJlZik7CitERFJlc3VsdENhdGVnb3J5IEREUmVzdWx0
R2V0Q2F0ZWdvcnkoRERSZXN1bHRSZWYpOworQm9vbGVhbiBERFJlc3VsdElzUGFzdERhdGUoRERS
ZXN1bHRSZWYsIENGRGF0ZVJlZiByZWZlcmVuY2VEYXRlLCBDRlRpbWVab25lUmVmIHJlZmVyZW5j
ZVRpbWVab25lKTsKK3ZvaWQgRERTY2FuUXVlcnlBZGRUZXh0RnJhZ21lbnQoRERTY2FuUXVlcnlS
ZWYsIENGU3RyaW5nUmVmLCBDRlJhbmdlLCB2b2lkICppZGVudGlmaWVyLCBERFRleHRGcmFnbWVu
dE1vZGUsIEREVGV4dENvYWxlc2NpbmdUeXBlKTsKK3ZvaWQgRERTY2FuUXVlcnlBZGRTZXBhcmF0
b3IoRERTY2FuUXVlcnlSZWYsIEREVGV4dENvYWxlc2NpbmdUeXBlKTsKK3ZvaWQgRERTY2FuUXVl
cnlBZGRMaW5lQnJlYWsoRERTY2FuUXVlcnlSZWYpOwordm9pZCAqRERTY2FuUXVlcnlHZXRGcmFn
bWVudE1ldGFEYXRhKEREU2NhblF1ZXJ5UmVmLCBDRkluZGV4IHF1ZXJ5SW5kZXgpOworYm9vbCBE
RFJlc3VsdEhhc1Byb3BlcnRpZXMoRERSZXN1bHRSZWYsIENGSW5kZXggcHJvcGVydHlTZXQpOwor
Q0ZBcnJheVJlZiBERFJlc3VsdEdldFN1YlJlc3VsdHMoRERSZXN1bHRSZWYpOworRERRdWVyeVJh
bmdlIEREUmVzdWx0R2V0UXVlcnlSYW5nZUZvclVSTGlmaWNhdGlvbihERFJlc3VsdFJlZik7CisK
KyNpZiBQTEFURk9STShJT1MpCitOU1N0cmluZyAqRERVUkxTdHJpbmdGb3JSZXN1bHQoRERSZXN1
bHRSZWYgY3VycmVudFJlc3VsdCwgTlNTdHJpbmcgKiByZXN1bHRJZGVudGlmaWVyLCBERFVSTGlm
aWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25UeXBlcyBpbmNsdWRpbmdUZWxHcm91cHMsIE5TRGF0ZSAq
IHJlZmVyZW5jZURhdGUsIE5TVGltZVpvbmUgKiByZWZlcmVuY2VUaW1lWm9uZSk7CisjZW5kaWYK
IAogfQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MzkyKQorKysgU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDEtMjAgIEVu
cmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBm
b3IgRGF0YURldGVjdG9ycyBpbiBXSyAoaU9TKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjk4OQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yMjg1
NTk2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgIChmcm9tV0tEYXRhRGV0
ZWN0b3JUeXBlcyk6IENoYW5nZWQgcGFyYW1ldGVyIHRvIHVpbnQ2NF90IHRvCisgICAgICAgIHN1
Y2Nlc3NmdWxseSBjb21wYXJlIGFnYWluc3QgV0tEYXRhRGV0ZWN0b3JUeXBlQWxsLgorCiAyMDE2
LTAxLTIwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgRml4IENNYWtlIGJ1aWxkIGFmdGVyIHIxOTUzMDAuCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNpb24gMTk1MzE3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMxNSw3ICszMTUsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRBbGxvd1Bp
Y3R1cmVJblBpY3R1cmVNCiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKLXN0
YXRpYyBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlcyBmcm9tV0tEYXRhRGV0ZWN0b3JUeXBlcyh1
aW50MzJfdCB0eXBlcykKK3N0YXRpYyBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlcyBmcm9tV0tE
YXRhRGV0ZWN0b3JUeXBlcyh1aW50NjRfdCB0eXBlcykKIHsKICAgICBpZiAoc3RhdGljX2Nhc3Q8
V0tEYXRhRGV0ZWN0b3JUeXBlcz4odHlwZXMpID09IFdLRGF0YURldGVjdG9yVHlwZU5vbmUpCiAg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlTm9uZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269486</attachid>
            <date>2016-01-21 13:37:57 -0800</date>
            <delta_ts>2016-01-21 18:06:29 -0800</delta_ts>
            <desc>Patch addressing comments</desc>
            <filename>ddwk2-part2.txt</filename>
            <type>text/plain</type>
            <size>30580</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE2LTAxLTIxICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgdGhlIGxvZ2ljIHRvIHBlcmZvcm0gZGF0YSBkZXRlY3Rpb24gYW5kIG1vZGlmeQor
ICAgICAgICB0aGUgZG9tIGJ5IGFkZGluZyBkYXRhIGRldGVjdG9yIGxpbmtzIGFzIGFwcHJvcHJp
YXRlLgorICAgICAgICBUaGUgZGF0YSBkZXRlY3RvciByZXN1bHRzIHJldHVybmVkIGJ5IGRldGVj
dENvbnRlbnRJblJhbmdlIGFyZQorICAgICAgICBzdG9yZWQgaW4gdGhlIEZyYW1lIG9iamVjdC4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oOgorICAgICAgICAqIGVk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKC1bTlNJbmRleFBhdGggZGF0
YURldGVjdG9yU3RyaW5nVmFsdWVdKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246
OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3Vs
dElzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IpOgorICAgICAg
ICAoV2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeSk6CisgICAgICAgIChXZWJD
b3JlOjpidWlsZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVj
dENvbnRlbnRJblJhbmdlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNoZWNrTG9hZENvbXBsZXRlRm9yVGhpc0ZyYW1l
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0
RGF0YURldGVjdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRhdGFEZXRl
Y3Rpb25SZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvRGF0YURldGVjdG9y
c0NvcmVTUEkuaDoKKyAgICAgICAgKEREUXVlcnlPZmZzZXRDb21wYXJlKToKKwogMjAxNi0wMS0y
MSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBHcmFw
aGljc0NvbnRleHQ6IGxvdyBxdWFsaXR5IGRyYXdJbWFnZSBhbmQgZHJhd0ltYWdlQnVmZmVyIHNo
b3VsZCB1c2UgSW50ZXJwb2xhdGlvbkxvdwpAQCAtNTQ2LDcgKzU3OCw2IEBACiAgICAgICAgIChX
ZWJDb3JlOjptYXRjaGVzRnV0dXJlQ3VlUHNldWRvQ2xhc3MpOgogICAgICAgICAoV2ViQ29yZTo6
bWF0Y2hlc1Bhc3RDdWVQc2V1ZG9DbGFzcyk6CiAKLT4+Pj4+Pj4gLnIxOTUzMTYKIDIwMTYtMDEt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTk1MTc5LgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgRERBY3Rpb25D
b250ZXh0OworT0JKQ19DTEFTUyBOU0FycmF5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUzLDcgKzU0LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUFyb3VuZEhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRh
Qm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKTsKICNlbmRpZgot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0
cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBOU0FycmF5ICpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+
JiBjb250ZXh0UmFuZ2UsIERhdGFEZXRlY3RvclR5cGVzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNDQgQEAKICNp
bXBvcnQgIlZpc2libGVVbml0cy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKIAorI2lmIFBM
QVRGT1JNKElPUykKK2NvbnN0IGNoYXIgKmRhdGFEZXRlY3RvcnNVUkxTY2hlbWUgPSAieC1hcHBs
ZS1kYXRhLWRldGVjdG9ycyI7Citjb25zdCBjaGFyICpkYXRhRGV0ZWN0b3JzQXR0cmlidXRlVHlw
ZUtleSA9ICJ4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzLXR5cGUiOworY29uc3QgY2hhciAqZGF0YURl
dGVjdG9yc0F0dHJpYnV0ZVJlc3VsdEtleSA9ICJ4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzLXJlc3Vs
dCI7CisKK0BpbnRlcmZhY2UgTlNJbmRleFBhdGggKERERXh0ZW5zaW9ucykKKy0gKE5TU3RyaW5n
ICopZGF0YURldGVjdG9yU3RyaW5nVmFsdWU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOU0lu
ZGV4UGF0aCAoRERFeHRlbnNpb25zKQorCistIChOU1N0cmluZyAqKWRhdGFEZXRlY3RvclN0cmlu
Z1ZhbHVlCit7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBzZWxmLmxlbmd0aDsKKyAgICAKKyAg
ICBzd2l0Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMDoKKyAgICAgICAgcmV0dXJuIEAiIjsKKyAg
ICAgICAgCisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCIlbHUiLCAodW5zaWduZWQgbG9uZylbc2VsZiBpbmRleEF0UG9zaXRpb246MF1dOwor
CisgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCIlbHUvJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3NlbGYgaW5kZXhBdFBvc2l0aW9uOjBdLCAodW5z
aWduZWQgbG9uZylbc2VsZiBpbmRleEF0UG9zaXRpb246MV1dOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICB7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGNv
bXBvbmVudHMgPSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpsZW5n
dGhdKTsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMCA7IGkgPCBsZW5ndGggOyBp
KyspCisgICAgICAgICAgICAgICAgW2NvbXBvbmVudHMgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3NlbGYgaW5kZXhBdFBvc2l0aW9u
OmldXV07CisgICAgICAgICAgICByZXR1cm4gW2NvbXBvbmVudHMgY29tcG9uZW50c0pvaW5lZEJ5
U3RyaW5nOkAiLyJdOworICAgICAgICB9CisgICAgfQorfQorCitAZW5kCisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTM4LDkgKzE3NiwzNzQg
QEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVjdGlvbgogICAgIHJldHVybiBk
ZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwgY29udGV4dFJhbmdlLCBkZXRl
Y3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2UpOwogfQogI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgCitzdGF0aWMgQk9PTCBy
ZXN1bHRJc1VSTChERFJlc3VsdFJlZiByZXN1bHQpCit7CisgICAgaWYgKCFyZXN1bHQpCisgICAg
ICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBzdGF0aWMgTlNTZXQgKnVybFR5cGVzID0gW1tOU1Nl
dCBzZXRXaXRoT2JqZWN0czogKE5TU3RyaW5nICopRERCaW5kZXJIdHRwVVJMS2V5LCAoTlNTdHJp
bmcgKilEREJpbmRlcldlYlVSTEtleSwgKE5TU3RyaW5nICopRERCaW5kZXJNYWlsVVJMS2V5LCAo
TlNTdHJpbmcgKilEREJpbmRlckdlbmVyaWNVUkxLZXksIChOU1N0cmluZyAqKUREQmluZGVyRW1h
aWxLZXksIG5pbF0gcmV0YWluXTsKKyAgICByZXR1cm4gW3VybFR5cGVzIGNvbnRhaW5zT2JqZWN0
OihOU1N0cmluZyAqKUREUmVzdWx0R2V0VHlwZShyZXN1bHQpXTsKK30KKworc3RhdGljIE5TU3Ry
aW5nICpjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoRERSZXN1bHRSZWYgY3VycmVudFJlc3Vs
dCwgTlNTdHJpbmcgKnJlc3VsdElkZW50aWZpZXIsIE5TRGF0ZSAqIHJlZmVyZW5jZURhdGUsIE5T
VGltZVpvbmUgKiByZWZlcmVuY2VUaW1lWm9uZSwgRGF0YURldGVjdG9yVHlwZXMgZGV0ZWN0aW9u
VHlwZXMpCit7CisgICAgaWYgKCFERFJlc3VsdEhhc1Byb3BlcnRpZXMoY3VycmVudFJlc3VsdCwg
RERSZXN1bHRQcm9wZXJ0eVBhc3NpdmVEaXNwbGF5KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25UeXBlcyBwaG9uZVR5cGVzID0g
KGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZVBob25lTnVtYmVyKSA/IEREVVJMaWZp
ZXJQaG9uZU51bWJlckRldGVjdGlvblJlZ3VsYXIgOiBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRl
Y3Rpb25Ob25lOworICAgIEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdvcnkgPSBERFJlc3VsdEdldENh
dGVnb3J5KGN1cnJlbnRSZXN1bHQpOworICAgIENGU3RyaW5nUmVmIHR5cGUgPSBERFJlc3VsdEdl
dFR5cGUoY3VycmVudFJlc3VsdCk7CisgICAgCisgICAgaWYgKCgoZGV0ZWN0aW9uVHlwZXMgJiBE
YXRhRGV0ZWN0b3JUeXBlQWRkcmVzcykgJiYgKEREUmVzdWx0Q2F0ZWdvcnlBZGRyZXNzID09IGNh
dGVnb3J5KSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5cGVU
cmFja2luZ051bWJlcikgJiYgKENGU3RyaW5nQ29tcGFyZShEREJpbmRlclRyYWNraW5nTnVtYmVy
S2V5LCB0eXBlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpCisgICAgICAgIHx8ICgoZGV0ZWN0
aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlRmxpZ2h0KSAmJiAoQ0ZTdHJpbmdDb21wYXJlKERE
QmluZGVyRmxpZ2h0SW5mb3JtYXRpb25LZXksIHR5cGUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRv
KSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5cGVQaG9uZU51
bWJlcikgJiYgKEREUmVzdWx0Q2F0ZWdvcnlQaG9uZU51bWJlciA9PSBjYXRlZ29yeSkpCisgICAg
ICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlTGluaykgJiYgcmVzdWx0
SXNVUkwoY3VycmVudFJlc3VsdCkpKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gRERVUkxT
dHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0SWRlbnRpZmllciwgcGhvbmVUeXBl
cywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUpOworICAgIH0KKyAgICBpZiAoKGRl
dGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZUNhbGVuZGFyRXZlbnQpICYmIChERFJlc3Vs
dENhdGVnb3J5Q2FsZW5kYXJFdmVudCA9PSBjYXRlZ29yeSkpIHsKKyAgICAgICAgaWYgKCFERFJl
c3VsdElzUGFzdERhdGUoY3VycmVudFJlc3VsdCwgKENGRGF0ZVJlZilyZWZlcmVuY2VEYXRlLCAo
Q0ZUaW1lWm9uZVJlZilyZWZlcmVuY2VUaW1lWm9uZSkpCisgICAgICAgICAgICByZXR1cm4gRERV
UkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0SWRlbnRpZmllciwgcGhvbmVU
eXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUpOworICAgIH0KKyAgICByZXR1
cm4gbmlsOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IoTm9k
ZSAqbm9kZSwgTm9kZSAqbm9kZVBhcmVudCkKK3sKKyAgICAvLyBQZXJmb3JtIGEgZGVwdGgtZmly
c3Qgc2VhcmNoIGZvciBhbmNob3Igbm9kZXMsIHdoaWNoIGhhdmUgdGhlIEREVVJMU2NoZW1lIGF0
dHJpYnV0ZSBzZXQgdG8gdHJ1ZSwKKyAgICAvLyB0YWtlIHRoZWlyIGNoaWxkcmVuIGFuZCBpbnNl
cnQgdGhlbSBiZWZvcmUgdGhlIGFuY2hvciwKKyAgICAvLyBhbmQgdGhlbiByZW1vdmUgdGhlIGFu
Y2hvci4KKyAgICAKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBC
T09MIG5vZGVJc0REQW5jaG9yID0gaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSAmJiBkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJMU2NoZW1lKSA9PSAidHJ1ZSI7
CisgICAgCisgICAgUmVmUHRyPE5vZGVMaXN0PiBjaGlsZHJlbiA9IG5vZGUtPmNoaWxkTm9kZXMo
KTsKKyAgICB1bnNpZ25lZCBjaGlsZENvdW50ID0gY2hpbGRyZW4tPmxlbmd0aCgpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgIE5vZGUgKmNo
aWxkID0gY2hpbGRyZW4tPml0ZW0oaSk7CisgICAgICAgIGlmIChpczxFbGVtZW50PigqY2hpbGQp
KQorICAgICAgICAgICAgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5jaG9yKGNoaWxkLCBub2RlKTsK
KyAgICB9CisgICAgCisgICAgaWYgKG5vZGVJc0REQW5jaG9yICYmIG5vZGVQYXJlbnQpIHsKKyAg
ICAgICAgY2hpbGRyZW4gPSBub2RlLT5jaGlsZE5vZGVzKCk7CisgICAgICAgIGNoaWxkQ291bnQg
PSBjaGlsZHJlbi0+bGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICAvLyBJdGVyYXRlIG92ZXIg
dGhlIGNoaWxkcmVuIGFuZCBtb3ZlIHRoZW0gYWxsIG9udG8gdGhlIHNhbWUgbGV2ZWwgYXMgdGhp
cyBhbmNob3IuCisgICAgICAgIC8vIFJlbW92ZSB0aGUgYW5jaG9yIGFmdGVyd2FyZHMuCisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgICAg
ICBOb2RlICpjaGlsZCA9IGNoaWxkcmVuLT5pdGVtKDApOyAvLyBjaGlsZHJlbiBjaGFuZ2UgZHVl
IHRvIGluc2VydGlvbiwgYWx3YXlzIHVzZSBpZHggMAorICAgICAgICAgICAgbm9kZVBhcmVudC0+
aW5zZXJ0QmVmb3JlKGNoaWxkLCBub2RlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAg
fQorICAgICAgICBub2RlUGFyZW50LT5yZW1vdmVDaGlsZChub2RlLCBBU1NFUlRfTk9fRVhDRVBU
SU9OKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0
aW5nRERMaW5rcyhOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGVuZE5vZGUpCit7CisgICAgTm9kZSAq
bm9kZSA9IHN0YXJ0Tm9kZTsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICAKKyAgICAgICAg
aWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJMU2NoZW1lKSAhPSAidHJ1ZSIp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZW1vdmVSZXN1bHRM
aW5rc0Zyb21BbmNob3Iobm9kZSwgbm9kZS0+cGFyZW50RWxlbWVudCgpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUgPT0gZW5kTm9kZSkgeworICAgICAgICAgICAgLy8g
SWYgd2UgZm91bmQgdGhlIGVuZCBub2RlIGFuZCBubyBsaW5rLCByZXR1cm4gZmFsc2UgdW5sZXNz
IGFuIGFuY2VzdG9yIG5vZGUgaXMgYSBsaW5rLgorICAgICAgICAgICAgLy8gVGhlIG9ubHkgYW5j
ZXN0b3JzIG5vdCB0ZXN0ZWQgYXQgdGhpcyBwb2ludCBhcmUgaW4gdGhlIGRpcmVjdCBsaW5lIGZy
b20gc2VsZidzIHBhcmVudCB0byB0aGUgdG9wLgorICAgICAgICAgICAgbm9kZSA9IHN0YXJ0Tm9k
ZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShERFVSTFNjaGVt
ZSkgIT0gInRydWUiKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihub2RlLCBub2RlLT5w
YXJlbnRFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub2Rl
ID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSZWZQdHI8Tm9kZUxpc3Q+IGNo
aWxkTm9kZXMgPSBub2RlLT5jaGlsZE5vZGVzKCk7CisgICAgICAgIGlmIChjaGlsZE5vZGVzLT5s
ZW5ndGgoKSkKKyAgICAgICAgICAgIG5vZGUgPSBjaGlsZE5vZGVzLT5pdGVtKDApOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUgKm5ld05vZGUgPSBub2RlLT5uZXh0U2libGluZygp
OworICAgICAgICAgICAgTm9kZSAqcGFyZW50Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICB3aGls
ZSAoIW5ld05vZGUpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS0+
cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghcGFyZW50Tm9kZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG5ld05vZGUgPSBwYXJl
bnROb2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9kZSA9
IG5ld05vZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQogCi12b2lk
IERhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mLCBEYXRh
RGV0ZWN0b3JUeXBlcykKK3N0YXRpYyBOU1N0cmluZyAqZGF0YURldGVjdG9yVHlwZUZvckNhdGVn
b3J5KEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdvcnkpCiB7CisgICAgc3dpdGNoIChjYXRlZ29yeSkg
eworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeVBob25lTnVtYmVyOgorICAgICAgICByZXR1cm4g
QCJ0ZWxlcGhvbmUiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeUxpbms6CisgICAgICAgIHJl
dHVybiBAImxpbmsiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeUFkZHJlc3M6CisgICAgICAg
IHJldHVybiBAImFkZHJlc3MiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeUNhbGVuZGFyRXZl
bnQ6CisgICAgICAgIHJldHVybiBAImNhbGVuZGFyLWV2ZW50IjsKKyAgICBjYXNlIEREUmVzdWx0
Q2F0ZWdvcnlNaXNjOgorICAgICAgICByZXR1cm4gQCJtaXNjIjsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gQCIiOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYnVpbGRRdWVyeShERFNj
YW5RdWVyeVJlZiBzY2FuUXVlcnksIFJhbmdlKiBjb250ZXh0UmFuZ2UpCit7CisgICAgLy8gT25j
ZSB3ZSdyZSBvdmVyIHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywgc3RvcCBhdCB0aGUgZmlyc3Qg
aGFyZCBicmVhay4KKyAgICBjb25zdCBDRkluZGV4IG1heEZyYWdtZW50V2l0aEhhcmRCcmVhayA9
IDEwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywg
d2Ugc3RvcCBhdCB0aGUgbGluZS4KKyAgICBjb25zdCBDRkluZGV4IG1heEZyYWdtZW50V2l0aExp
bmVicmVhayA9IDUwMDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVtYmVyIG9mIGZy
YWdtZW50cywgd2Ugc3RvcCBhdCB0aGUgc3BhY2UuCisgICAgY29uc3QgQ0ZJbmRleCBtYXhGcmFn
bWVudFNwYWNlID0gMTAwMDA7CisKKyAgICBDRkNoYXJhY3RlclNldFJlZiB3aGl0ZVNwYWNlc1Nl
dCA9IENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFyYWN0ZXJTZXRXaGl0ZXNwYWNl
QW5kTmV3bGluZSk7CisgICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgbmV3TGluZXNTZXQgPSBDRkNoYXJh
Y3RlclNldEdldFByZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0TmV3bGluZSk7CisgICAgCisgICAg
UmVmUHRyPFJhbmdlPiBlbmRSYW5nZTsKKyAgICBDRkluZGV4IGl0ZXJhdG9yQ291bnQgPSAwOwor
ICAgIENGSW5kZXggZnJhZ21lbnRDb3VudCA9IDA7CisgICAgCisgICAgLy8gQnVpbGQgdGhlIHNj
YW4gcXVlcnkgYWRkaW5nIHNlcGFyYXRvcnMuCisgICAgLy8gRm9yIGVhY2ggZnJhZ21lbnQgdGhl
IGl0ZXJhdG9yIGluY3JlbWVudCBpcyBzdG9yZWQgYXMgbWV0YWRhdGEuCisgICAgZm9yIChUZXh0
SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdlKTsgIWl0ZXJhdG9yLmF0RW5kKCk7IGl0ZXJh
dG9yLmFkdmFuY2UoKSwgaXRlcmF0b3JDb3VudCsrKSB7CisgICAgICAgIHNpemVfdCBjdXJyZW50
VGV4dExlbmd0aCA9IGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCFjdXJy
ZW50VGV4dExlbmd0aCkgeworICAgICAgICAgICAgRERTY2FuUXVlcnlBZGRTZXBhcmF0b3Ioc2Nh
blF1ZXJ5LCBERFRleHRDb2FsZXNjaW5nVHlwZUhhcmRCcmVhayk7CisgICAgICAgICAgICBpZiAo
aXRlcmF0b3JDb3VudCA+IG1heEZyYWdtZW50V2l0aEhhcmRCcmVhaykKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8vIFRl
c3QgZm9yIHdoaXRlIHNwYWNlIG5vZGVzLCB3ZSdyZSBjb2FsZXNjaW5nIHRoZW0uCisgICAgICAg
IGNvbnN0IFVuaUNoYXIgKmN1cnJlbnRDaGFyUHRyID0gaXRlcmF0b3IudGV4dCgpLnVwY29udmVy
dGVkQ2hhcmFjdGVycygpOworICAgICAgICAKKyAgICAgICAgQk9PTCBjb250YWluc09ubHlXaGl0
ZVNwYWNlID0gWUVTOworICAgICAgICBCT09MIGhhc1RhYiA9IE5POworICAgICAgICBCT09MIGhh
c05ld2xpbmUgPSBOTzsKKyAgICAgICAgaW50IG5ic3BDb3VudCA9IDA7CisgICAgICAgIGZvciAo
TlNVSW50ZWdlciBpID0gMDsgaSA8IGN1cnJlbnRUZXh0TGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIGlmICghQ0ZDaGFyYWN0ZXJTZXRJc0NoYXJhY3Rlck1lbWJlcih3aGl0ZVNwYWNlc1NldCwg
KmN1cnJlbnRDaGFyUHRyKSkgeworICAgICAgICAgICAgICAgIGNvbnRhaW5zT25seVdoaXRlU3Bh
Y2UgPSBOTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKENGQ2hhcmFjdGVyU2V0SXNDaGFyYWN0ZXJNZW1iZXIobmV3
TGluZXNTZXQsICpjdXJyZW50Q2hhclB0cikpCisgICAgICAgICAgICAgICAgaGFzTmV3bGluZSA9
IFlFUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKCpjdXJyZW50Q2hhclB0ciA9PSAnXHQnKQorICAg
ICAgICAgICAgICAgIGhhc1RhYiA9IFlFUzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
TXVsdGlwbGUgY29uc2VjdXRpdmUgbm9uIGJyZWFrYWJsZSBzcGFjZXMgYXJlIG1vc3QgbGlrZWx5
IHNpbXVsYXRlZCB0YWJzLgorICAgICAgICAgICAgaWYgKCpjdXJyZW50Q2hhclB0ciA9PSAweGEw
KSB7CisgICAgICAgICAgICAgICAgaWYgKCsrbmJzcENvdW50ID4gMikKKyAgICAgICAgICAgICAg
ICAgICAgaGFzVGFiID0gWUVTOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
bmJzcENvdW50ID0gMDsKKworICAgICAgICAgICAgY3VycmVudENoYXJQdHIrKzsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY29udGFpbnNPbmx5V2hpdGVTcGFjZSkgeworICAgICAgICAgICAgaWYg
KGhhc05ld2xpbmUpIHsKKyAgICAgICAgICAgICAgICBERFNjYW5RdWVyeUFkZExpbmVCcmVhayhz
Y2FuUXVlcnkpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvckNvdW50ID4gbWF4RnJhZ21l
bnRXaXRoTGluZWJyZWFrKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRERTY2FuUXVlcnlBZGRTZXBhcmF0b3Ioc2NhblF1
ZXJ5LCBoYXNUYWIgPyBERFRleHRDb2FsZXNjaW5nVHlwZVRhYiA6IEREVGV4dENvYWxlc2NpbmdU
eXBlU3BhY2UpOworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvckNvdW50ID4gbWF4RnJhZ21l
bnRTcGFjZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiBjdXJyZW50VGV4dCA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBpdGVyYXRvci50ZXh0KCkudXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCksIGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKSkpOworICAgICAgICBERFNjYW5R
dWVyeUFkZFRleHRGcmFnbWVudChzY2FuUXVlcnksIGN1cnJlbnRUZXh0LmdldCgpLCBDRlJhbmdl
TWFrZSgwLCBjdXJyZW50VGV4dExlbmd0aCksICh2b2lkICopaXRlcmF0b3JDb3VudCwgKEREVGV4
dEZyYWdtZW50TW9kZSkwLCBERFRleHRDb2FsZXNjaW5nVHlwZU5vbmUpOworICAgICAgICBmcmFn
bWVudENvdW50Kys7CisgICAgfQogfQogCitOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RD
b250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFuZ2UsIERhdGFEZXRlY3RvclR5
cGVzIHR5cGVzKQoreworICAgIFJldGFpblB0cjxERFNjYW5uZXJSZWY+IHNjYW5uZXIgPSBhZG9w
dENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIpKTsK
KyAgICBSZXRhaW5QdHI8RERTY2FuUXVlcnlSZWY+IHNjYW5RdWVyeSA9IGFkb3B0Q0YoRERTY2Fu
UXVlcnlDcmVhdGUoTlVMTCkpOworICAgIGJ1aWxkUXVlcnkoc2NhblF1ZXJ5LmdldCgpLCBjb250
ZXh0UmFuZ2UuZ2V0KCkpOworICAgIAorICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgYWRkIGEgdGlt
ZW91dCB0byB0aGlzIGNhbGwgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QgdGFrZSB0b28gbXVjaCB0
aW1lLgorICAgIGlmICghRERTY2FubmVyU2NhblF1ZXJ5KHNjYW5uZXIuZ2V0KCksIHNjYW5RdWVy
eS5nZXQoKSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgUmV0YWluUHRyPENGQXJy
YXlSZWY+IHNjYW5uZXJSZXN1bHRzID0gYWRvcHRDRihERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhP
cHRpb25zKHNjYW5uZXIuZ2V0KCksIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc0ZvclBhc3Np
dmVVc2UgfCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNDb2FsZXNjZVNpZ25hdHVyZXMpKTsK
KyAgICBpZiAoIXNjYW5uZXJSZXN1bHRzKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAg
IENGSW5kZXggcmVzdWx0Q291bnQgPSBDRkFycmF5R2V0Q291bnQoc2Nhbm5lclJlc3VsdHMuZ2V0
KCkpOworICAgIGlmICghcmVzdWx0Q291bnQpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgVmVjdG9yPFJldGFpblB0cjxERFJlc3VsdFJlZj4+IGFsbFJlc3VsdHM7CisgICAgVmVjdG9y
PFJldGFpblB0cjxOU0luZGV4UGF0aD4+IGluZGV4UGF0aHM7CisgICAgTlNJbnRlZ2VyIGN1cnJl
bnRUb3BMZXZlbEluZGV4ID0gMDsKKworICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2Nhbm5l
ciByZXN1bHRzIHRvIGZpbmQgc2lnbmF0dXJlcyBhbmQgZXh0cmFjdCBhbGwgdGhlIHN1YnJlc3Vs
dHMgd2hpbGUKKyAgICAvLyBwb3B1bGF0aW5nIHRoZSBhcnJheSBvZiBpbmRleCBwYXRocyB0byB1
c2UgaW4gdGhlIGhyZWYgb2YgdGhlIGFuY2hvcnMgYmVpbmcgY3JlYXRlZC4KKyAgICBmb3IgKENG
SW5kZXggaSA9IDA7IGkgPCByZXN1bHRDb3VudDsgaSsrKSB7CisgICAgICAgIEREUmVzdWx0UmVm
IHJlc3VsdCA9IChERFJlc3VsdFJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KHNjYW5uZXJSZXN1
bHRzLmdldCgpLCBpKTsKKyAgICAgICAgTlNJbmRleFBhdGggKmluZGV4UGF0aCA9IFtOU0luZGV4
UGF0aCBpbmRleFBhdGhXaXRoSW5kZXg6Y3VycmVudFRvcExldmVsSW5kZXhdOworICAgICAgICBp
ZiAoQ0ZTdHJpbmdDb21wYXJlKEREUmVzdWx0R2V0VHlwZShyZXN1bHQpLCBEREJpbmRlclNpZ25h
dHVyZUJsb2NrS2V5LCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgeworICAgICAgICAgICAgTlNB
cnJheSAqc3VicmVzdWx0cyA9IChOU0FycmF5ICopRERSZXN1bHRHZXRTdWJSZXN1bHRzKHJlc3Vs
dCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMCA7IGkg
PCBbc3VicmVzdWx0cyBjb3VudF0gOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpbmRleFBhdGhz
LmFwcGVuZChbaW5kZXhQYXRoIGluZGV4UGF0aEJ5QWRkaW5nSW5kZXg6aV0pOworICAgICAgICAg
ICAgICAgIGFsbFJlc3VsdHMuYXBwZW5kKChERFJlc3VsdFJlZilbc3VicmVzdWx0cyBvYmplY3RB
dEluZGV4OmldKTsKKworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgYWxsUmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIGluZGV4UGF0aHMuYXBw
ZW5kKGluZGV4UGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudFRvcExldmVsSW5kZXgr
KzsKKyAgICB9CisKKyAgICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gcmVzdWx0UmFuZ2VzOworICAg
IFRleHRJdGVyYXRvciBpdGVyYXRvcihjb250ZXh0UmFuZ2UuZ2V0KCkpOworICAgIENGSW5kZXgg
aXRlcmF0b3JDb3VudCA9IDA7CisKKyAgICByZXN1bHRDb3VudCA9IGFsbFJlc3VsdHMuc2l6ZSgp
OworICAgIAorICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkgb2YgdGhlIGV4cGFuZGVk
IHJlc3VsdHMgdG8gY3JlYXRlIGEgdmVjdG9yIG9mIFJhbmdlIG9iamVjdHMgdGhhdCBpbmRpY2F0
ZQorICAgIC8vIHdoZXJlIHRoZSBET00gbmVlZHMgdG8gYmUgbW9kaWZpZWQuCisgICAgLy8gRWFj
aCByZXN1bHQgY2FuIGJlIGNvbnRhaW5lZCBhbGwgaW4gb25lIHRleHQgbm9kZSBvciBjYW4gc3Bh
biBtdWx0aXBsZSB0ZXh0IG5vZGVzLgorICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHJlc3Vs
dENvdW50OyBpKyspIHsKKyAgICAgICAgRERSZXN1bHRSZWYgcmVzdWx0ID0gYWxsUmVzdWx0c1tp
XS5nZXQoKTsKKyAgICAgICAgRERRdWVyeVJhbmdlIHF1ZXJ5UmFuZ2UgPSBERFJlc3VsdEdldFF1
ZXJ5UmFuZ2VGb3JVUkxpZmljYXRpb24ocmVzdWx0KTsKKyAgICAgICAgQ0ZJbmRleCBpdGVyYXRv
clRhcmdldEFkdmFuY2VDb3VudCA9IChDRkluZGV4KUREU2NhblF1ZXJ5R2V0RnJhZ21lbnRNZXRh
RGF0YShzY2FuUXVlcnkuZ2V0KCksIHF1ZXJ5UmFuZ2Uuc3RhcnQucXVlcnlJbmRleCk7CisgICAg
ICAgIHdoaWxlIChpdGVyYXRvckNvdW50IDwgaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsK
KyAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yQ291
bnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IGl0
ZXJhdG9yLnJhbmdlKCk7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBzdGFydFJh
bmdlOworICAgICAgICBDRkluZGV4IGZyYWdtZW50SW5kZXggPSBxdWVyeVJhbmdlLnN0YXJ0LnF1
ZXJ5SW5kZXg7CisgICAgICAgIHdoaWxlIChmcmFnbWVudEluZGV4IDwgcXVlcnlSYW5nZS5lbmQu
cXVlcnlJbmRleCkgeworICAgICAgICAgICAgZnJhZ21lbnRJbmRleCsrOworICAgICAgICAgICAg
aXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQgPSAoQ0ZJbmRleClERFNjYW5RdWVyeUdldEZyYWdt
ZW50TWV0YURhdGEoc2NhblF1ZXJ5LmdldCgpLCBmcmFnbWVudEluZGV4KTsKKyAgICAgICAgICAg
IHdoaWxlIChpdGVyYXRvckNvdW50IDwgaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQpIHsKKyAg
ICAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaXRlcmF0
b3JDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kUmFuZ2UgPSBpdGVyYXRv
ci5yYW5nZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChzdGFydFJhbmdlID09IGVuZFJhbmdl
KQorICAgICAgICAgICAgcmVzdWx0UmFuZ2VzLmFwcGVuZChUZXh0SXRlcmF0b3I6OnN1YnJhbmdl
KHN0YXJ0UmFuZ2UuZ2V0KCksIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0LCBxdWVyeVJhbmdlLmVu
ZC5vZmZzZXQgLSBxdWVyeVJhbmdlLnN0YXJ0Lm9mZnNldCkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByZXN1bHRSYW5nZXMuYXBwZW5kKFJhbmdlOjpjcmVhdGUoc3RhcnRSYW5nZS0+b3du
ZXJEb2N1bWVudCgpLCAmc3RhcnRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgZm1heChzdGFydFJh
bmdlLT5zdGFydE9mZnNldCgpLCBxdWVyeVJhbmdlLnN0YXJ0Lm9mZnNldCksICZlbmRSYW5nZS0+
ZW5kQ29udGFpbmVyKCksIGZtYXgoZW5kUmFuZ2UtPmVuZE9mZnNldCgpLCBxdWVyeVJhbmdlLmVu
ZC5vZmZzZXQpKSk7CisgICAgfQorICAgIAorICAgIENGVGltZVpvbmVSZWYgdHogPSBDRlRpbWVa
b25lQ29weURlZmF1bHQoKTsKKyAgICBOU0RhdGUgKnJlZmVyZW5jZURhdGUgPSBbTlNEYXRlIGRh
dGVdOworICAgIFRleHQqIGxhc3RUZXh0Tm9kZVRvVXBkYXRlID0gbnVsbHB0cjsKKyAgICBTdHJp
bmcgbGFzdE5vZGVDb250ZW50OworICAgIHNpemVfdCBjb250ZW50T2Zmc2V0ID0gMDsKKyAgICBE
RFF1ZXJ5T2Zmc2V0IGxhc3RNb2RpZmllZFF1ZXJ5T2Zmc2V0ID0gey0xLCAwfTsKKyAgICAKKyAg
ICAvLyBGb3IgZWFjaCByZXN1bHQgYWRkIHRoZSBsaW5rLgorICAgIC8vIFNpbmNlIHRoZXJlIGNv
dWxkIGJlIG11bHRpcGxlIHJlc3VsdHMgaW4gdGhlIHNhbWUgdGV4dCBub2RlLCB0aGUgbm9kZSBp
cyBvbmx5IG1vZGlmaWVkIHdoZW4KKyAgICAvLyB3ZSBhcmUgYWJvdXQgdG8gcHJvY2VzcyBhIGRp
ZmZlcmVudCB0ZXh0IG5vZGUuCisgICAgZm9yIChDRkluZGV4IHJlc3VsdEluZGV4ID0gMDsgcmVz
dWx0SW5kZXggPCByZXN1bHRDb3VudDsgcmVzdWx0SW5kZXgrKykgeworICAgICAgICBERFJlc3Vs
dFJlZiBjb3JlUmVzdWx0ID0gYWxsUmVzdWx0c1tyZXN1bHRJbmRleF0uZ2V0KCk7CisgICAgICAg
IEREUXVlcnlSYW5nZSBxdWVyeVJhbmdlID0gRERSZXN1bHRHZXRRdWVyeVJhbmdlRm9yVVJMaWZp
Y2F0aW9uKGNvcmVSZXN1bHQpOworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0g
cmVzdWx0UmFuZ2VzW3Jlc3VsdEluZGV4XTsKKyAgICAgICAgTlNTdHJpbmcgKmlkZW50aWZpZXIg
PSBbaW5kZXhQYXRoc1tyZXN1bHRJbmRleF0gZGF0YURldGVjdG9yU3RyaW5nVmFsdWVdOworICAg
ICAgICBOU1N0cmluZyAqY29ycmVzcG9uZGluZ1VSTCA9IGNvbnN0cnVjdFVSTFN0cmluZ0ZvclJl
c3VsdChjb3JlUmVzdWx0LCBpZGVudGlmaWVyLCByZWZlcmVuY2VEYXRlLCAoTlNUaW1lWm9uZSAq
KXR6LCB0eXBlcyk7CisgICAgICAgIAorICAgICAgICBpZiAoIWNvcnJlc3BvbmRpbmdVUkwgfHwg
c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKCZyZXN1bHRSYW5nZS0+c3RhcnRD
b250YWluZXIoKSwgJnJlc3VsdFJhbmdlLT5lbmRDb250YWluZXIoKSkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgCisgICAgICAgIC8vIENvbXBhcmUgdGhlIHF1ZXJ5IG9mZnNldHMg
dG8gbWFrZSBzdXJlIHdlIGRvbid0IGdvIGJhY2t3YXJkcworICAgICAgICBpZiAoRERRdWVyeU9m
ZnNldENvbXBhcmUobGFzdE1vZGlmaWVkUXVlcnlPZmZzZXQsIHF1ZXJ5UmFuZ2Uuc3RhcnQpID49
IDApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBsYXN0TW9kaWZpZWRRdWVyeU9m
ZnNldCA9IHF1ZXJ5UmFuZ2UuZW5kOworCisgICAgICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHJl
c3VsdFJhbmdlLmdldCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAgICAgICAg
ICAgaWYgKCFpdC50ZXh0KCkubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBpdC5yYW5nZSgp
OworICAgICAgICAgICAgaWYgKCFpczxUZXh0PihyYW5nZS0+c3RhcnRDb250YWluZXIoKSkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBOb2RlKiBwYXJlbnROb2RlID0g
cmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkucGFyZW50Tm9kZSgpOworICAgICAgICAgICAgVGV4dCYg
Y3VycmVudFRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4ocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkp
OworICAgICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY3VycmVudFRleHROb2RlLmRvY3Vt
ZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgdGV4dE5vZGVEYXRhOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobGFzdFRleHROb2RlVG9VcGRhdGUgIT0gJmN1cnJlbnRUZXh0Tm9kZSkg
eworICAgICAgICAgICAgICAgIGlmIChsYXN0VGV4dE5vZGVUb1VwZGF0ZSkKKyAgICAgICAgICAg
ICAgICAgICAgbGFzdFRleHROb2RlVG9VcGRhdGUtPnNldERhdGEobGFzdE5vZGVDb250ZW50KTsK
KyAgICAgICAgICAgICAgICBjb250ZW50T2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAo
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgPiAwKQorICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZURh
dGEgPSBjdXJyZW50VGV4dE5vZGUuc3Vic3RyaW5nRGF0YSgwLCByYW5nZS0+c3RhcnRPZmZzZXQo
KSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICB0ZXh0Tm9kZURhdGEgPSBjdXJyZW50VGV4dE5vZGUuc3Vic3RyaW5nRGF0YShjb250ZW50
T2Zmc2V0LCByYW5nZS0+c3RhcnRPZmZzZXQoKSAtIGNvbnRlbnRPZmZzZXQsIEFTU0VSVF9OT19F
WENFUFRJT04pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXRleHROb2RlRGF0YS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IFRleHQ6
OmNyZWF0ZShkb2N1bWVudCwgdGV4dE5vZGVEYXRhKTsKKyAgICAgICAgICAgICAgICBwYXJlbnRO
b2RlLT5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgJmN1cnJlbnRUZXh0Tm9kZSwgQVNTRVJUX05PX0VY
Q0VQVElPTik7CisgICAgICAgICAgICAgICAgY29udGVudE9mZnNldCA9IHJhbmdlLT5zdGFydE9m
ZnNldCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBDcmVh
dGUgdGhlIGFjdHVhbCBhbmNob3Igbm9kZSBhbmQgaW5zZXJ0IGl0IGJlZm9yZSB0aGUgY3VycmVu
dCBub2RlLgorICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLnN1YnN0
cmluZ0RhdGEocmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIHJhbmdlLT5lbmRPZmZzZXQoKSAtIHJhbmdl
LT5zdGFydE9mZnNldCgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIFJlZlB0
cjxOb2RlPiBuZXdOb2RlID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50LCB0ZXh0Tm9kZURhdGEpOwor
ICAgICAgICAgICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsICZjdXJyZW50VGV4
dE5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgCisgICAgICAgICAgICBS
ZWZQdHI8SFRNTEFuY2hvckVsZW1lbnQ+IGFuY2hvckVsZW1lbnQgPSBIVE1MQW5jaG9yRWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldEhyZWYo
Y29ycmVzcG9uZGluZ1VSTCk7CisgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXREaXIoImx0
ciIpOworICAgICAgICAgICAgUmVmUHRyPEF0dHI+IGNvbG9yID0gZG93bmNhc3Q8RWxlbWVudD4o
cGFyZW50Tm9kZSktPmdldEF0dHJpYnV0ZU5vZGUoImNvbG9yIik7CisgICAgICAgICAgICBpZiAo
Y29sb3IpCisgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxO
YW1lczo6c3R5bGVBdHRyLCBjb2xvci0+c3R5bGUoKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+Tm9kZTo6YXBwZW5kQ2hpbGQobmV3Tm9kZSwg
QVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICBwYXJlbnROb2RlLT5pbnNlcnRCZWZv
cmUoYW5jaG9yRWxlbWVudCwgJmN1cnJlbnRUZXh0Tm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7
CisgICAgICAgICAgICAvLyBBZGQgYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIHRoaXMgVVJM
aWZpY2F0aW9uIGFzIHRoZSByZXN1bHQgb2YgZGF0YSBkZXRlY3RvcnMuCisgICAgICAgICAgICBh
bmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgZGF0YURl
dGVjdG9yc1VSTFNjaGVtZSwgbnVsbEF0b20pLCAidHJ1ZSIpOworICAgICAgICAgICAgYW5jaG9y
RWxlbWVudC0+c2V0QXR0cmlidXRlKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGRhdGFEZXRlY3Rv
cnNBdHRyaWJ1dGVUeXBlS2V5LCBudWxsQXRvbSksIGRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29y
eShERFJlc3VsdEdldENhdGVnb3J5KGNvcmVSZXN1bHQpKSk7CisgICAgICAgICAgICBhbmNob3JF
bGVtZW50LT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgZGF0YURldGVjdG9y
c0F0dHJpYnV0ZVJlc3VsdEtleSwgbnVsbEF0b20pLCBpZGVudGlmaWVyKTsKKyAgICAgICAgICAg
IGNvbnRlbnRPZmZzZXQgPSByYW5nZS0+ZW5kT2Zmc2V0KCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGxhc3ROb2RlQ29udGVudCA9IGN1cnJlbnRUZXh0Tm9kZS5zdWJzdHJpbmdEYXRhKHJh
bmdlLT5lbmRPZmZzZXQoKSwgY3VycmVudFRleHROb2RlLmxlbmd0aCgpIC0gcmFuZ2UtPmVuZE9m
ZnNldCgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIGxhc3RUZXh0Tm9kZVRv
VXBkYXRlID0gJmN1cnJlbnRUZXh0Tm9kZTsKKyAgICAgICAgfSAgICAgICAgCisgICAgfQorICAg
IGlmIChsYXN0VGV4dE5vZGVUb1VwZGF0ZSkKKyAgICAgICAgbGFzdFRleHROb2RlVG9VcGRhdGUt
PnNldERhdGEobGFzdE5vZGVDb250ZW50KTsKKyAgICAKKyAgICByZXR1cm4gW0REU2Nhbm5lclJl
c3VsdCByZXN1bHRzRnJvbUNvcmVSZXN1bHRzOnNjYW5uZXJSZXN1bHRzLmdldCgpXTsKK30KKwor
I2Vsc2UKK05TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0
cjxSYW5nZT4mLCBEYXRhRGV0ZWN0b3JUeXBlcykKK3sKKyAgICByZXR1cm4gbmlsOworfQorI2Vu
ZGlmCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAJKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyODQsNyArMjI4NCw3IEBAIHZvaWQg
RnJhbWVMb2FkZXI6OmNoZWNrTG9hZENvbXBsZXRlRm9yVGgKICNpZiBFTkFCTEUoREFUQV9ERVRF
Q1RJT04pCiAgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5kYXRhRGV0ZWN0
b3JUeXBlcygpICE9IERhdGFEZXRlY3RvclR5cGVOb25lKSB7CiAgICAgICAgICAgICAgICAgICAg
IFJlZlB0cjxSYW5nZT4gZG9jdW1lbnRSYW5nZSA9IG1ha2VSYW5nZShmaXJzdFBvc2l0aW9uSW5O
b2RlKG1fZnJhbWUuZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpLCBsYXN0UG9zaXRpb25J
bk5vZGUobV9mcmFtZS5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkpOwotICAgICAgICAg
ICAgICAgICAgICBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShkb2N1bWVudFJh
bmdlLCBtX2ZyYW1lLnNldHRpbmdzKCkuZGF0YURldGVjdG9yVHlwZXMoKSk7CisgICAgICAgICAg
ICAgICAgICAgIG1fZnJhbWUuc2V0RGF0YURldGVjdGlvblJlc3VsdHMoRGF0YURldGVjdGlvbjo6
ZGV0ZWN0Q29udGVudEluUmFuZ2UoZG9jdW1lbnRSYW5nZSwgbV9mcmFtZS5zZXR0aW5ncygpLmRh
dGFEZXRlY3RvclR5cGVzKCkpKTsKICAgICAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDE5NTMxNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTAgKzQ3LDEzIEBACiAj
aW5jbHVkZSAiRnJhbWVXaW4uaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCitPQkpD
X0NMQVNTIE5TQXJyYXk7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKElPUykKIE9CSkNfQ0xBU1Mg
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIE9CSkNfQ0xBU1MgRE9NTm9kZTsKLU9CSkNfQ0xBU1Mg
TlNBcnJheTsKIE9CSkNfQ0xBU1MgTlNTdHJpbmc7CiAjZW5kaWYKIApAQCAtMTg1LDYgKzE4OCwx
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGZy
YW1lU2NhbGVGYWN0b3IoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZCgpOworICAgICAgICAKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisg
ICAgICAgIHZvaWQgc2V0RGF0YURldGVjdGlvblJlc3VsdHMoTlNBcnJheSAqcmVzdWx0cykgeyBt
X2RhdGFEZXRlY3Rpb25SZXN1bHRzID0gcmVzdWx0czsgfQorICAgICAgICBOU0FycmF5ICpkYXRh
RGV0ZWN0aW9uUmVzdWx0cygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YURldGVjdGlvblJlc3VsdHMu
Z2V0KCk7IH0KKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICBjb25zdCBWaWV3
cG9ydEFyZ3VtZW50cyYgdmlld3BvcnRBcmd1bWVudHMoKSBjb25zdDsKQEAgLTI5Miw2ICszMDAs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxF
dmVudEhhbmRsZXI+IG1fZXZlbnRIYW5kbGVyOwogICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9w
dHI8QW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCisjaWYgRU5B
QkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICBSZXRhaW5QdHI8TlNBcnJheT4gbV9kYXRhRGV0
ZWN0aW9uUmVzdWx0czsKKyNlbmRpZgogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgdm9pZCBi
ZXR0ZXJBcHByb3hpbWF0ZU5vZGUoY29uc3QgSW50UG9pbnQmIHRlc3RQb2ludCwgTm9kZVF1YWxp
ZmllciwgTm9kZSomIGJlc3QsIE5vZGUqIGZhaWxlZE5vZGUsIEludFBvaW50JiBiZXN0UG9pbnQs
IEludFJlY3QmIGJlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiB0ZXN0UmVjdCk7CiAgICAgICAgIGJv
b2wgaGl0VGVzdFJlc3VsdEF0Vmlld3BvcnRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiB2aWV3
cG9ydExvY2F0aW9uLCBIaXRUZXN0UmVzdWx0JiwgSW50UG9pbnQmIGNlbnRlcik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvRGF0YURldGVjdG9yc0NvcmVTUEkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvRGF0YURldGVj
dG9yc0NvcmVTUEkuaAkocmV2aXNpb24gMTk1MzE2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL0RhdGFEZXRlY3RvcnNDb3JlU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDEwICsyMywxNiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
KyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisKICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQog
CisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzQ29yZS9EREJpbmRlcktleXNfUHJpdmF0ZS5oPgorI2lt
cG9ydCA8RGF0YURldGVjdG9yc0NvcmUvRERTY2FubmVyUmVzdWx0Lmg+CiAjaW1wb3J0IDxEYXRh
RGV0ZWN0b3JzQ29yZS9EYXRhRGV0ZWN0b3JzQ29yZS5oPgotCisjaWYgUExBVEZPUk0oSU9TKQor
I2ltcG9ydCA8RGF0YURldGVjdG9yc0NvcmUvRERVUkxpZmllci5oPgorI2VuZGlmCiAjZWxzZSAv
LyAhVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTM4LDcgKzQ0
LDc3IEBAIHR5cGVkZWYgZW51bSB7CiBlbnVtIHsKICAgICBERFNjYW5uZXJDb3B5UmVzdWx0c09w
dGlvbnNOb25lID0gMCwKICAgICBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNOb092ZXJsYXAg
PSAxIDw8IDAsCisgICAgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zQ29hbGVzY2VTaWduYXR1
cmVzID0gMSA8PCAxLAorfTsKKworZW51bSB7CisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0
ZWN0aW9uTm9uZSA9IDAsCisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uUmVndWxh
ciA9IDEgPDwgMSwKKyAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25RdW90ZWRTaG9y
dHMgPSAxIDw8IDIsCisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uVW5xdW90ZWRT
aG9ydHMgPSAxIDw8IDMKIH07Cit0eXBlZGVmIE5TVUludGVnZXIgRERVUkxpZmllclBob25lTnVt
YmVyRGV0ZWN0aW9uVHlwZXM7CisKK3R5cGVkZWYgZW51bSBfX0REVGV4dENvYWxlc2NpbmdUeXBl
IHsKKyAgICBERFRleHRDb2FsZXNjaW5nVHlwZU5vbmUgPSAwLAorICAgIEREVGV4dENvYWxlc2Np
bmdUeXBlU3BhY2UgPSAxLAorICAgIEREVGV4dENvYWxlc2NpbmdUeXBlVGFiID0gMiwKKyAgICBE
RFRleHRDb2FsZXNjaW5nVHlwZUxpbmVCcmVhayA9IDMsCisgICAgRERUZXh0Q29hbGVzY2luZ1R5
cGVIYXJkQnJlYWsgPSA0LAorfSBERFRleHRDb2FsZXNjaW5nVHlwZTsKKwordHlwZWRlZiBlbnVt
IHsKKyAgICBERFJlc3VsdENhdGVnb3J5VW5rbm93biA9IDAsCisgICAgRERSZXN1bHRDYXRlZ29y
eUxpbmsgPSAxLAorICAgIEREUmVzdWx0Q2F0ZWdvcnlQaG9uZU51bWJlciA9IDIsCisgICAgRERS
ZXN1bHRDYXRlZ29yeUFkZHJlc3MgPSAzLAorICAgIEREUmVzdWx0Q2F0ZWdvcnlDYWxlbmRhckV2
ZW50ID0gNCwKKyAgICBERFJlc3VsdENhdGVnb3J5TWlzYyA9IDUsCit9IEREUmVzdWx0Q2F0ZWdv
cnk7CisKK3R5cGVkZWYgZW51bSBfX0REVGV4dEZyYWdtZW50VHlwZSB7CisgICAgRERUZXh0RnJh
Z21lbnRUeXBlVHJpbVdoaXRlU3BhY2UgPSAgMHgxLAorICAgIEREVGV4dEZyYWdtZW50VHlwZUln
bm9yZUNSTEYgPSAgMHgyLAorfSBERFRleHRGcmFnbWVudE1vZGU7CisKK2V4dGVybiBDRlN0cmlu
Z1JlZiBjb25zdCBEREJpbmRlckh0dHBVUkxLZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3Qg
RERCaW5kZXJXZWJVUkxLZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3QgRERCaW5kZXJNYWls
VVJMS2V5OworZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVyR2VuZXJpY1VSTEtleTsK
K2V4dGVybiBDRlN0cmluZ1JlZiBjb25zdCBEREJpbmRlckVtYWlsS2V5OworZXh0ZXJuIENGU3Ry
aW5nUmVmIGNvbnN0IEREQmluZGVyVHJhY2tpbmdOdW1iZXJLZXk7CitleHRlcm4gQ0ZTdHJpbmdS
ZWYgY29uc3QgRERCaW5kZXJGbGlnaHRJbmZvcm1hdGlvbktleTsKK2V4dGVybiBDRlN0cmluZ1Jl
ZiBjb25zdCBEREJpbmRlclNpZ25hdHVyZUJsb2NrS2V5OworZXh0ZXJuIE5TU3RyaW5nICogY29u
c3QgRERVUkxTY2hlbWU7CisKK0BpbnRlcmZhY2UgRERTY2FubmVyUmVzdWx0IDogTlNPYmplY3Qg
PE5TQ29kaW5nLCBOU1NlY3VyZUNvZGluZz4KKysgKE5TQXJyYXkgKikgcmVzdWx0c0Zyb21Db3Jl
UmVzdWx0czooQ0ZBcnJheVJlZiljb3JlUmVzdWx0czsKK0BlbmQKKworI2RlZmluZSBERFJlc3Vs
dFByb3BlcnR5UGFzc2l2ZURpc3BsYXkgICAoMSA8PCAwKQorCit0eXBlZGVmIHN0cnVjdCBfX0RE
UXVlcnlPZmZzZXQgeworICAgIENGSW5kZXggcXVlcnlJbmRleDsKKyAgICBDRkluZGV4IG9mZnNl
dDsKK30gRERRdWVyeU9mZnNldDsKKwordHlwZWRlZiBzdHJ1Y3QgX19ERFF1ZXJ5UmFuZ2Ugewor
ICAgIEREUXVlcnlPZmZzZXQgc3RhcnQ7CisgICAgRERRdWVyeU9mZnNldCBlbmQ7Cit9IEREUXVl
cnlSYW5nZTsKKworaW5saW5lIENGQ29tcGFyaXNvblJlc3VsdCBERFF1ZXJ5T2Zmc2V0Q29tcGFy
ZShERFF1ZXJ5T2Zmc2V0IG8xLCBERFF1ZXJ5T2Zmc2V0IG8yKQoreworICAgIGlmIChvMS5xdWVy
eUluZGV4IDwgbzIucXVlcnlJbmRleCkKKyAgICAgICAgcmV0dXJuIGtDRkNvbXBhcmVMZXNzVGhh
bjsKKyAgICBpZiAobzEucXVlcnlJbmRleCA+IG8yLnF1ZXJ5SW5kZXgpCisgICAgICAgIHJldHVy
biBrQ0ZDb21wYXJlR3JlYXRlclRoYW47CisgICAgaWYgKG8xLm9mZnNldCA8IG8yLm9mZnNldCkK
KyAgICAgICAgcmV0dXJuIGtDRkNvbXBhcmVMZXNzVGhhbjsKKyAgICBpZiAobzEub2Zmc2V0ID4g
bzIub2Zmc2V0KQorICAgICAgICByZXR1cm4ga0NGQ29tcGFyZUdyZWF0ZXJUaGFuOworICAgIHJl
dHVybiBrQ0ZDb21wYXJlRXF1YWxUbzsKK30KIAogI2VuZGlmIC8vICFVU0UoQVBQTEVfSU5URVJO
QUxfU0RLKQogCkBAIC00OCwxMyArMTI0LDMzIEBAIHR5cGVkZWYgc3RydWN0IF9fRERTY2FubmVy
ICpERFNjYW5uZXJSZWYKIAogdHlwZWRlZiBDRkluZGV4IEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0
aW9uczsKIHR5cGVkZWYgQ0ZJbmRleCBERFNjYW5uZXJPcHRpb25zOworZXh0ZXJuIGNvbnN0IERE
U2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9ucyBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNGb3JQ
YXNzaXZlVXNlOwogCiBleHRlcm4gIkMiIHsKIAogRERTY2FubmVyUmVmIEREU2Nhbm5lckNyZWF0
ZShERFNjYW5uZXJUeXBlLCBERFNjYW5uZXJPcHRpb25zLCBDRkVycm9yUmVmKik7CitERFNjYW5R
dWVyeVJlZiBERFNjYW5RdWVyeUNyZWF0ZShDRkFsbG9jYXRvclJlZik7CiBERFNjYW5RdWVyeVJl
ZiBERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoQ0ZBbGxvY2F0b3JSZWYsIENGU3RyaW5nUmVm
LCBDRlJhbmdlKTsKIEJvb2xlYW4gRERTY2FubmVyU2NhblF1ZXJ5KEREU2Nhbm5lclJlZiwgRERT
Y2FuUXVlcnlSZWYpOwogQ0ZBcnJheVJlZiBERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25z
KEREU2Nhbm5lclJlZiwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zKTsKIENGUmFuZ2UgRERS
ZXN1bHRHZXRSYW5nZShERFJlc3VsdFJlZik7CitDRlN0cmluZ1JlZiBERFJlc3VsdEdldFR5cGUo
RERSZXN1bHRSZWYpOworRERSZXN1bHRDYXRlZ29yeSBERFJlc3VsdEdldENhdGVnb3J5KEREUmVz
dWx0UmVmKTsKK0Jvb2xlYW4gRERSZXN1bHRJc1Bhc3REYXRlKEREUmVzdWx0UmVmLCBDRkRhdGVS
ZWYgcmVmZXJlbmNlRGF0ZSwgQ0ZUaW1lWm9uZVJlZiByZWZlcmVuY2VUaW1lWm9uZSk7Cit2b2lk
IEREU2NhblF1ZXJ5QWRkVGV4dEZyYWdtZW50KEREU2NhblF1ZXJ5UmVmLCBDRlN0cmluZ1JlZiwg
Q0ZSYW5nZSwgdm9pZCAqaWRlbnRpZmllciwgRERUZXh0RnJhZ21lbnRNb2RlLCBERFRleHRDb2Fs
ZXNjaW5nVHlwZSk7Cit2b2lkIEREU2NhblF1ZXJ5QWRkU2VwYXJhdG9yKEREU2NhblF1ZXJ5UmVm
LCBERFRleHRDb2FsZXNjaW5nVHlwZSk7Cit2b2lkIEREU2NhblF1ZXJ5QWRkTGluZUJyZWFrKERE
U2NhblF1ZXJ5UmVmKTsKK3ZvaWQgKkREU2NhblF1ZXJ5R2V0RnJhZ21lbnRNZXRhRGF0YShERFNj
YW5RdWVyeVJlZiwgQ0ZJbmRleCBxdWVyeUluZGV4KTsKK2Jvb2wgRERSZXN1bHRIYXNQcm9wZXJ0
aWVzKEREUmVzdWx0UmVmLCBDRkluZGV4IHByb3BlcnR5U2V0KTsKK0NGQXJyYXlSZWYgRERSZXN1
bHRHZXRTdWJSZXN1bHRzKEREUmVzdWx0UmVmKTsKK0REUXVlcnlSYW5nZSBERFJlc3VsdEdldFF1
ZXJ5UmFuZ2VGb3JVUkxpZmljYXRpb24oRERSZXN1bHRSZWYpOworCisjaWYgUExBVEZPUk0oSU9T
KQorTlNTdHJpbmcgKkREVVJMU3RyaW5nRm9yUmVzdWx0KEREUmVzdWx0UmVmIGN1cnJlbnRSZXN1
bHQsIE5TU3RyaW5nICogcmVzdWx0SWRlbnRpZmllciwgRERVUkxpZmllclBob25lTnVtYmVyRGV0
ZWN0aW9uVHlwZXMgaW5jbHVkaW5nVGVsR3JvdXBzLCBOU0RhdGUgKiByZWZlcmVuY2VEYXRlLCBO
U1RpbWVab25lICogcmVmZXJlbmNlVGltZVpvbmUpOworCitTT0ZUX0xJTktfUFJJVkFURV9GUkFN
RVdPUktfT1BUSU9OQUwoRGF0YURldGVjdG9yc0NvcmUpCitTT0ZUX0xJTktfQ0xBU1MoRGF0YURl
dGVjdG9yc0NvcmUsIEREU2Nhbm5lclJlc3VsdCkKKworI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE5NTM5MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTAxLTIxICBFbnJpY2EgQ2FzdWNjaSAgPGVu
cmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERhdGFEZXRlY3RvcnMg
aW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoZnJvbVdLRGF0YURldGVjdG9yVHlwZXMpOiBDaGFu
Z2VkIHBhcmFtZXRlciB0byB1aW50NjRfdCB0bworICAgICAgICBzdWNjZXNzZnVsbHkgY29tcGFy
ZSBhZ2FpbnN0IFdLRGF0YURldGVjdG9yVHlwZUFsbC4KKwogMjAxNi0wMS0yMCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBDTWFrZSBi
dWlsZCBhZnRlciByMTk1MzAwLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTUsNyArMzE1LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkQWxsb3dQaWN0dXJlSW5QaWN0dXJlTQog
I2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCi1zdGF0aWMgV2ViQ29yZTo6RGF0
YURldGVjdG9yVHlwZXMgZnJvbVdLRGF0YURldGVjdG9yVHlwZXModWludDMyX3QgdHlwZXMpCitz
dGF0aWMgV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXMgZnJvbVdLRGF0YURldGVjdG9yVHlwZXMo
dWludDY0X3QgdHlwZXMpCiB7CiAgICAgaWYgKHN0YXRpY19jYXN0PFdLRGF0YURldGVjdG9yVHlw
ZXM+KHR5cGVzKSA9PSBXS0RhdGFEZXRlY3RvclR5cGVOb25lKQogICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6RGF0YURldGVjdG9yVHlwZU5vbmU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269526</attachid>
            <date>2016-01-21 18:06:29 -0800</date>
            <delta_ts>2016-01-22 13:52:02 -0800</delta_ts>
            <desc>Patch revisited</desc>
            <filename>ddwk2-part2-revisited.txt</filename>
            <type>text/plain</type>
            <size>30374</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE2LTAxLTIxICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgdGhlIGxvZ2ljIHRvIHBlcmZvcm0gZGF0YSBkZXRlY3Rpb24gYW5kIG1vZGlmeQor
ICAgICAgICB0aGUgZG9tIGJ5IGFkZGluZyBkYXRhIGRldGVjdG9yIGxpbmtzIGFzIGFwcHJvcHJp
YXRlLgorICAgICAgICBUaGUgZGF0YSBkZXRlY3RvciByZXN1bHRzIHJldHVybmVkIGJ5IGRldGVj
dENvbnRlbnRJblJhbmdlIGFyZQorICAgICAgICBzdG9yZWQgaW4gdGhlIEZyYW1lIG9iamVjdC4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oOgorICAgICAgICAqIGVk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKC1bTlNJbmRleFBhdGggZGF0
YURldGVjdG9yU3RyaW5nVmFsdWVdKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246
OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3Vs
dElzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IpOgorICAgICAg
ICAoV2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeSk6CisgICAgICAgIChXZWJD
b3JlOjpidWlsZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVj
dENvbnRlbnRJblJhbmdlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNoZWNrTG9hZENvbXBsZXRlRm9yVGhpc0ZyYW1l
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0
RGF0YURldGVjdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRhdGFEZXRl
Y3Rpb25SZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvRGF0YURldGVjdG9y
c0NvcmVTUEkuaDoKKyAgICAgICAgKEREUXVlcnlPZmZzZXRDb21wYXJlKToKKwogMjAxNi0wMS0y
MSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBHcmFw
aGljc0NvbnRleHQ6IGxvdyBxdWFsaXR5IGRyYXdJbWFnZSBhbmQgZHJhd0ltYWdlQnVmZmVyIHNo
b3VsZCB1c2UgSW50ZXJwb2xhdGlvbkxvdwpAQCAtNTQ2LDcgKzU3OCw2IEBACiAgICAgICAgIChX
ZWJDb3JlOjptYXRjaGVzRnV0dXJlQ3VlUHNldWRvQ2xhc3MpOgogICAgICAgICAoV2ViQ29yZTo6
bWF0Y2hlc1Bhc3RDdWVQc2V1ZG9DbGFzcyk6CiAKLT4+Pj4+Pj4gLnIxOTUzMTYKIDIwMTYtMDEt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTk1MTc5LgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgRERBY3Rpb25D
b250ZXh0OworT0JKQ19DTEFTUyBOU0FycmF5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUzLDcgKzU0LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUFyb3VuZEhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRh
Qm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKTsKICNlbmRpZgot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0
cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBOU0FycmF5ICpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+
JiBjb250ZXh0UmFuZ2UsIERhdGFEZXRlY3RvclR5cGVzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHJldmlzaW9uIDE5NTMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNDQgQEAKICNp
bXBvcnQgIlZpc2libGVVbml0cy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKIAorI2lmIFBM
QVRGT1JNKElPUykKK2NvbnN0IGNoYXIgKmRhdGFEZXRlY3RvcnNVUkxTY2hlbWUgPSAieC1hcHBs
ZS1kYXRhLWRldGVjdG9ycyI7Citjb25zdCBjaGFyICpkYXRhRGV0ZWN0b3JzQXR0cmlidXRlVHlw
ZUtleSA9ICJ4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzLXR5cGUiOworY29uc3QgY2hhciAqZGF0YURl
dGVjdG9yc0F0dHJpYnV0ZVJlc3VsdEtleSA9ICJ4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzLXJlc3Vs
dCI7CisKK0BpbnRlcmZhY2UgTlNJbmRleFBhdGggKERERXh0ZW5zaW9ucykKKy0gKE5TU3RyaW5n
ICopZGF0YURldGVjdG9yU3RyaW5nVmFsdWU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOU0lu
ZGV4UGF0aCAoRERFeHRlbnNpb25zKQorCistIChOU1N0cmluZyAqKWRhdGFEZXRlY3RvclN0cmlu
Z1ZhbHVlCit7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBzZWxmLmxlbmd0aDsKKyAgICAKKyAg
ICBzd2l0Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMDoKKyAgICAgICAgcmV0dXJuIEAiIjsKKyAg
ICAgICAgCisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCIlbHUiLCAodW5zaWduZWQgbG9uZylbc2VsZiBpbmRleEF0UG9zaXRpb246MF1dOwor
CisgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCIlbHUvJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3NlbGYgaW5kZXhBdFBvc2l0aW9uOjBdLCAodW5z
aWduZWQgbG9uZylbc2VsZiBpbmRleEF0UG9zaXRpb246MV1dOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICB7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGNv
bXBvbmVudHMgPSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpsZW5n
dGhdKTsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMCA7IGkgPCBsZW5ndGggOyBp
KyspCisgICAgICAgICAgICAgICAgW2NvbXBvbmVudHMgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3NlbGYgaW5kZXhBdFBvc2l0aW9u
OmldXV07CisgICAgICAgICAgICByZXR1cm4gW2NvbXBvbmVudHMgY29tcG9uZW50c0pvaW5lZEJ5
U3RyaW5nOkAiLyJdOworICAgICAgICB9CisgICAgfQorfQorCitAZW5kCisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTM4LDkgKzE3NiwzNzIg
QEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVjdGlvbgogICAgIHJldHVybiBk
ZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwgY29udGV4dFJhbmdlLCBkZXRl
Y3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2UpOwogfQogI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgCitzdGF0aWMgQk9PTCBy
ZXN1bHRJc1VSTChERFJlc3VsdFJlZiByZXN1bHQpCit7CisgICAgaWYgKCFyZXN1bHQpCisgICAg
ICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBzdGF0aWMgTlNTZXQgKnVybFR5cGVzID0gW1tOU1Nl
dCBzZXRXaXRoT2JqZWN0czogKE5TU3RyaW5nICopRERCaW5kZXJIdHRwVVJMS2V5LCAoTlNTdHJp
bmcgKilEREJpbmRlcldlYlVSTEtleSwgKE5TU3RyaW5nICopRERCaW5kZXJNYWlsVVJMS2V5LCAo
TlNTdHJpbmcgKilEREJpbmRlckdlbmVyaWNVUkxLZXksIChOU1N0cmluZyAqKUREQmluZGVyRW1h
aWxLZXksIG5pbF0gcmV0YWluXTsKKyAgICByZXR1cm4gW3VybFR5cGVzIGNvbnRhaW5zT2JqZWN0
OihOU1N0cmluZyAqKUREUmVzdWx0R2V0VHlwZShyZXN1bHQpXTsKK30KKworc3RhdGljIE5TU3Ry
aW5nICpjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoRERSZXN1bHRSZWYgY3VycmVudFJlc3Vs
dCwgTlNTdHJpbmcgKnJlc3VsdElkZW50aWZpZXIsIE5TRGF0ZSAqcmVmZXJlbmNlRGF0ZSwgTlNU
aW1lWm9uZSAqcmVmZXJlbmNlVGltZVpvbmUsIERhdGFEZXRlY3RvclR5cGVzIGRldGVjdGlvblR5
cGVzKQoreworICAgIGlmICghRERSZXN1bHRIYXNQcm9wZXJ0aWVzKGN1cnJlbnRSZXN1bHQsIERE
UmVzdWx0UHJvcGVydHlQYXNzaXZlRGlzcGxheSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
CisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uVHlwZXMgcGhvbmVUeXBlcyA9IChk
ZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlcikgPyBERFVSTGlmaWVy
UGhvbmVOdW1iZXJEZXRlY3Rpb25SZWd1bGFyIDogRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0
aW9uTm9uZTsKKyAgICBERFJlc3VsdENhdGVnb3J5IGNhdGVnb3J5ID0gRERSZXN1bHRHZXRDYXRl
Z29yeShjdXJyZW50UmVzdWx0KTsKKyAgICBDRlN0cmluZ1JlZiB0eXBlID0gRERSZXN1bHRHZXRU
eXBlKGN1cnJlbnRSZXN1bHQpOworICAgIAorICAgIGlmICgoKGRldGVjdGlvblR5cGVzICYgRGF0
YURldGVjdG9yVHlwZUFkZHJlc3MpICYmIChERFJlc3VsdENhdGVnb3J5QWRkcmVzcyA9PSBjYXRl
Z29yeSkpCisgICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlVHJh
Y2tpbmdOdW1iZXIpICYmIChDRlN0cmluZ0NvbXBhcmUoRERCaW5kZXJUcmFja2luZ051bWJlcktl
eSwgdHlwZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pKQorICAgICAgICB8fCAoKGRldGVjdGlv
blR5cGVzICYgRGF0YURldGVjdG9yVHlwZUZsaWdodCkgJiYgKENGU3RyaW5nQ29tcGFyZShEREJp
bmRlckZsaWdodEluZm9ybWF0aW9uS2V5LCB0eXBlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykp
CisgICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlUGhvbmVOdW1i
ZXIpICYmIChERFJlc3VsdENhdGVnb3J5UGhvbmVOdW1iZXIgPT0gY2F0ZWdvcnkpKQorICAgICAg
ICB8fCAoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZUxpbmspICYmIHJlc3VsdElz
VVJMKGN1cnJlbnRSZXN1bHQpKSkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIEREVVJMU3Ry
aW5nRm9yUmVzdWx0KGN1cnJlbnRSZXN1bHQsIHJlc3VsdElkZW50aWZpZXIsIHBob25lVHlwZXMs
IHJlZmVyZW5jZURhdGUsIHJlZmVyZW5jZVRpbWVab25lKTsKKyAgICB9CisgICAgaWYgKChkZXRl
Y3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5cGVDYWxlbmRhckV2ZW50KSAmJiAoRERSZXN1bHRD
YXRlZ29yeUNhbGVuZGFyRXZlbnQgPT0gY2F0ZWdvcnkpKSB7CisgICAgICAgIGlmICghRERSZXN1
bHRJc1Bhc3REYXRlKGN1cnJlbnRSZXN1bHQsIChDRkRhdGVSZWYpcmVmZXJlbmNlRGF0ZSwgKENG
VGltZVpvbmVSZWYpcmVmZXJlbmNlVGltZVpvbmUpKQorICAgICAgICAgICAgcmV0dXJuIEREVVJM
U3RyaW5nRm9yUmVzdWx0KGN1cnJlbnRSZXN1bHQsIHJlc3VsdElkZW50aWZpZXIsIHBob25lVHlw
ZXMsIHJlZmVyZW5jZURhdGUsIHJlZmVyZW5jZVRpbWVab25lKTsKKyAgICB9CisgICAgcmV0dXJu
IG5pbDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5jaG9yKE5vZGUg
Km5vZGUsIE5vZGUgKm5vZGVQYXJlbnQpCit7CisgICAgLy8gUGVyZm9ybSBhIGRlcHRoLWZpcnN0
IHNlYXJjaCBmb3IgYW5jaG9yIG5vZGVzLCB3aGljaCBoYXZlIHRoZSBERFVSTFNjaGVtZSBhdHRy
aWJ1dGUgc2V0IHRvIHRydWUsCisgICAgLy8gdGFrZSB0aGVpciBjaGlsZHJlbiBhbmQgaW5zZXJ0
IHRoZW0gYmVmb3JlIHRoZSBhbmNob3IsCisgICAgLy8gYW5kIHRoZW4gcmVtb3ZlIHRoZSBhbmNo
b3IuCisgICAgCisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQk9P
TCBub2RlSXNEREFuY2hvciA9IGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkgJiYgZG93bmNh
c3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShERFVSTFNjaGVtZSkgPT0gInRydWUiOwor
ICAgIAorICAgIFJlZlB0cjxOb2RlTGlzdD4gY2hpbGRyZW4gPSBub2RlLT5jaGlsZE5vZGVzKCk7
CisgICAgdW5zaWduZWQgY2hpbGRDb3VudCA9IGNoaWxkcmVuLT5sZW5ndGgoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgeworICAgICAgICBOb2RlICpjaGls
ZCA9IGNoaWxkcmVuLT5pdGVtKGkpOworICAgICAgICBpZiAoaXM8RWxlbWVudD4oKmNoaWxkKSkK
KyAgICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihjaGlsZCwgbm9kZSk7Cisg
ICAgfQorICAgIAorICAgIGlmIChub2RlSXNEREFuY2hvciAmJiBub2RlUGFyZW50KSB7CisgICAg
ICAgIGNoaWxkcmVuID0gbm9kZS0+Y2hpbGROb2RlcygpOworICAgICAgICBjaGlsZENvdW50ID0g
Y2hpbGRyZW4tPmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRo
ZSBjaGlsZHJlbiBhbmQgbW92ZSB0aGVtIGFsbCBvbnRvIHRoZSBzYW1lIGxldmVsIGFzIHRoaXMg
YW5jaG9yLgorICAgICAgICAvLyBSZW1vdmUgdGhlIGFuY2hvciBhZnRlcndhcmRzLgorICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgeworICAgICAgICAgICAg
Tm9kZSAqY2hpbGQgPSBjaGlsZHJlbi0+aXRlbSgwKTsgLy8gY2hpbGRyZW4gY2hhbmdlIGR1ZSB0
byBpbnNlcnRpb24sIGFsd2F5cyB1c2UgaWR4IDAKKyAgICAgICAgICAgIG5vZGVQYXJlbnQtPmlu
c2VydEJlZm9yZShjaGlsZCwgbm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIH0K
KyAgICAgICAgbm9kZVBhcmVudC0+cmVtb3ZlQ2hpbGQobm9kZSwgQVNTRVJUX05PX0VYQ0VQVElP
Tik7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBzZWFyY2hGb3JMaW5rUmVtb3ZpbmdFeGlzdGlu
Z0RETGlua3MoTm9kZSogc3RhcnROb2RlLCBOb2RlKiBlbmROb2RlKQoreworICAgIE5vZGUgKm5v
ZGUgPSBzdGFydE5vZGU7CisgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxB
bmNob3JFbGVtZW50Pigqbm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChkb3duY2FzdDxFbGVtZW50
Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJMU2NoZW1lKSAhPSAidHJ1ZSIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNo
b3Iobm9kZSwgbm9kZS0+cGFyZW50RWxlbWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKG5vZGUgPT0gZW5kTm9kZSkgeworICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQg
dGhlIGVuZCBub2RlIGFuZCBubyBsaW5rLCByZXR1cm4gZmFsc2UgdW5sZXNzIGFuIGFuY2VzdG9y
IG5vZGUgaXMgYSBsaW5rLgorICAgICAgICAgICAgLy8gVGhlIG9ubHkgYW5jZXN0b3JzIG5vdCB0
ZXN0ZWQgYXQgdGhpcyBwb2ludCBhcmUgaW4gdGhlIGRpcmVjdCBsaW5lIGZyb20gc2VsZidzIHBh
cmVudCB0byB0aGUgdG9wLgorICAgICAgICAgICAgbm9kZSA9IHN0YXJ0Tm9kZS0+cGFyZW50Tm9k
ZSgpOworICAgICAgICAgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8
SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZG93
bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShERFVSTFNjaGVtZSkgIT0gInRydWUi
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihub2RlLCBub2RlLT5wYXJlbnRFbGVtZW50
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBSZWZQdHI8Tm9kZUxpc3Q+IGNoaWxkTm9kZXMgPSBu
b2RlLT5jaGlsZE5vZGVzKCk7CisgICAgICAgIGlmIChjaGlsZE5vZGVzLT5sZW5ndGgoKSkKKyAg
ICAgICAgICAgIG5vZGUgPSBjaGlsZE5vZGVzLT5pdGVtKDApOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIE5vZGUgKm5ld05vZGUgPSBub2RlLT5uZXh0U2libGluZygpOworICAgICAgICAg
ICAgTm9kZSAqcGFyZW50Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICB3aGlsZSAoIW5ld05vZGUp
IHsKKyAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS0+cGFyZW50Tm9kZSgp
OworICAgICAgICAgICAgICAgIGlmICghcGFyZW50Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG5ld05vZGUgPSBwYXJlbnROb2RlLT5uZXh0
U2libGluZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9kZSA9IG5ld05vZGU7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQogCi12b2lkIERhdGFEZXRlY3Rp
b246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mLCBEYXRhRGV0ZWN0b3JUeXBl
cykKK3N0YXRpYyBOU1N0cmluZyAqZGF0YURldGVjdG9yVHlwZUZvckNhdGVnb3J5KEREUmVzdWx0
Q2F0ZWdvcnkgY2F0ZWdvcnkpCiB7CisgICAgc3dpdGNoIChjYXRlZ29yeSkgeworICAgIGNhc2Ug
RERSZXN1bHRDYXRlZ29yeVBob25lTnVtYmVyOgorICAgICAgICByZXR1cm4gQCJ0ZWxlcGhvbmUi
OworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeUxpbms6CisgICAgICAgIHJldHVybiBAImxpbmsi
OworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeUFkZHJlc3M6CisgICAgICAgIHJldHVybiBAImFk
ZHJlc3MiOworICAgIGNhc2UgRERSZXN1bHRDYXRlZ29yeUNhbGVuZGFyRXZlbnQ6CisgICAgICAg
IHJldHVybiBAImNhbGVuZGFyLWV2ZW50IjsKKyAgICBjYXNlIEREUmVzdWx0Q2F0ZWdvcnlNaXNj
OgorICAgICAgICByZXR1cm4gQCJtaXNjIjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
QCIiOworICAgIH0KIH0KIAorc3RhdGljIHZvaWQgYnVpbGRRdWVyeShERFNjYW5RdWVyeVJlZiBz
Y2FuUXVlcnksIFJhbmdlKiBjb250ZXh0UmFuZ2UpCit7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVy
IHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywgc3RvcCBhdCB0aGUgZmlyc3QgaGFyZCBicmVhay4K
KyAgICBjb25zdCBDRkluZGV4IG1heEZyYWdtZW50V2l0aEhhcmRCcmVhayA9IDEwMDA7CisgICAg
Ly8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywgd2Ugc3RvcCBhdCB0
aGUgbGluZS4KKyAgICBjb25zdCBDRkluZGV4IG1heEZyYWdtZW50V2l0aExpbmVicmVhayA9IDUw
MDA7CisgICAgLy8gT25jZSB3ZSdyZSBvdmVyIHRoaXMgbnVtYmVyIG9mIGZyYWdtZW50cywgd2Ug
c3RvcCBhdCB0aGUgc3BhY2UuCisgICAgY29uc3QgQ0ZJbmRleCBtYXhGcmFnbWVudFNwYWNlID0g
MTAwMDA7CisKKyAgICBDRkNoYXJhY3RlclNldFJlZiB3aGl0ZVNwYWNlc1NldCA9IENGQ2hhcmFj
dGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFyYWN0ZXJTZXRXaGl0ZXNwYWNlQW5kTmV3bGluZSk7
CisgICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgbmV3TGluZXNTZXQgPSBDRkNoYXJhY3RlclNldEdldFBy
ZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0TmV3bGluZSk7CisgICAgCisgICAgUmVmUHRyPFJhbmdl
PiBlbmRSYW5nZTsKKyAgICBDRkluZGV4IGl0ZXJhdG9yQ291bnQgPSAwOworICAgIENGSW5kZXgg
ZnJhZ21lbnRDb3VudCA9IDA7CisgICAgCisgICAgLy8gQnVpbGQgdGhlIHNjYW4gcXVlcnkgYWRk
aW5nIHNlcGFyYXRvcnMuCisgICAgLy8gRm9yIGVhY2ggZnJhZ21lbnQgdGhlIGl0ZXJhdG9yIGlu
Y3JlbWVudCBpcyBzdG9yZWQgYXMgbWV0YWRhdGEuCisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXRl
cmF0b3IoY29udGV4dFJhbmdlKTsgIWl0ZXJhdG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2Uo
KSwgaXRlcmF0b3JDb3VudCsrKSB7CisgICAgICAgIHNpemVfdCBjdXJyZW50VGV4dExlbmd0aCA9
IGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCFjdXJyZW50VGV4dExlbmd0
aCkgeworICAgICAgICAgICAgRERTY2FuUXVlcnlBZGRTZXBhcmF0b3Ioc2NhblF1ZXJ5LCBERFRl
eHRDb2FsZXNjaW5nVHlwZUhhcmRCcmVhayk7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3JDb3Vu
dCA+IG1heEZyYWdtZW50V2l0aEhhcmRCcmVhaykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8vIFRlc3QgZm9yIHdoaXRl
IHNwYWNlIG5vZGVzLCB3ZSdyZSBjb2FsZXNjaW5nIHRoZW0uCisgICAgICAgIGNvbnN0IFVuaUNo
YXIgKmN1cnJlbnRDaGFyUHRyID0gaXRlcmF0b3IudGV4dCgpLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOworICAgICAgICAKKyAgICAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZVNwYWNlID0gdHJ1
ZTsKKyAgICAgICAgYm9vbCBoYXNUYWIgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBoYXNOZXdsaW5l
ID0gZmFsc2U7CisgICAgICAgIGludCBuYnNwQ291bnQgPSAwOworICAgICAgICBmb3IgKE5TVUlu
dGVnZXIgaSA9IDA7IGkgPCBjdXJyZW50VGV4dExlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBp
ZiAoIUNGQ2hhcmFjdGVyU2V0SXNDaGFyYWN0ZXJNZW1iZXIod2hpdGVTcGFjZXNTZXQsICpjdXJy
ZW50Q2hhclB0cikpIHsKKyAgICAgICAgICAgICAgICBjb250YWluc09ubHlXaGl0ZVNwYWNlID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChDRkNoYXJhY3RlclNldElzQ2hhcmFjdGVyTWVtYmVyKG5ld0xp
bmVzU2V0LCAqY3VycmVudENoYXJQdHIpKQorICAgICAgICAgICAgICAgIGhhc05ld2xpbmUgPSB0
cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoKmN1cnJlbnRDaGFyUHRyID09ICdcdCcpCisgICAg
ICAgICAgICAgICAgaGFzVGFiID0gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
TXVsdGlwbGUgY29uc2VjdXRpdmUgbm9uIGJyZWFrYWJsZSBzcGFjZXMgYXJlIG1vc3QgbGlrZWx5
IHNpbXVsYXRlZCB0YWJzLgorICAgICAgICAgICAgaWYgKCpjdXJyZW50Q2hhclB0ciA9PSAweGEw
KSB7CisgICAgICAgICAgICAgICAgaWYgKCsrbmJzcENvdW50ID4gMikKKyAgICAgICAgICAgICAg
ICAgICAgaGFzVGFiID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IG5ic3BDb3VudCA9IDA7CisKKyAgICAgICAgICAgIGN1cnJlbnRDaGFyUHRyKys7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNvbnRhaW5zT25seVdoaXRlU3BhY2UpIHsKKyAgICAgICAgICAgIGlm
IChoYXNOZXdsaW5lKSB7CisgICAgICAgICAgICAgICAgRERTY2FuUXVlcnlBZGRMaW5lQnJlYWso
c2NhblF1ZXJ5KTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3JDb3VudCA+IG1heEZyYWdt
ZW50V2l0aExpbmVicmVhaykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEREU2NhblF1ZXJ5QWRkU2VwYXJhdG9yKHNjYW5R
dWVyeSwgaGFzVGFiID8gRERUZXh0Q29hbGVzY2luZ1R5cGVUYWIgOiBERFRleHRDb2FsZXNjaW5n
VHlwZVNwYWNlKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3JDb3VudCA+IG1heEZyYWdt
ZW50U3BhY2UpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gY3VycmVudFRleHQgPSBhZG9wdENGKENGU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgaXRlcmF0b3IudGV4dCgpLnVwY29udmVydGVk
Q2hhcmFjdGVycygpLCBpdGVyYXRvci50ZXh0KCkubGVuZ3RoKCkpKTsKKyAgICAgICAgRERTY2Fu
UXVlcnlBZGRUZXh0RnJhZ21lbnQoc2NhblF1ZXJ5LCBjdXJyZW50VGV4dC5nZXQoKSwgQ0ZSYW5n
ZU1ha2UoMCwgY3VycmVudFRleHRMZW5ndGgpLCAodm9pZCAqKWl0ZXJhdG9yQ291bnQsIChERFRl
eHRGcmFnbWVudE1vZGUpMCwgRERUZXh0Q29hbGVzY2luZ1R5cGVOb25lKTsKKyAgICAgICAgZnJh
Z21lbnRDb3VudCsrOworICAgIH0KK30KKworTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0
Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGV0ZWN0b3JU
eXBlcyB0eXBlcykKK3sKKyAgICBSZXRhaW5QdHI8RERTY2FubmVyUmVmPiBzY2FubmVyID0gYWRv
cHRDRihERFNjYW5uZXJDcmVhdGUoRERTY2FubmVyVHlwZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7
CisgICAgUmV0YWluUHRyPEREU2NhblF1ZXJ5UmVmPiBzY2FuUXVlcnkgPSBhZG9wdENGKEREU2Nh
blF1ZXJ5Q3JlYXRlKE5VTEwpKTsKKyAgICBidWlsZFF1ZXJ5KHNjYW5RdWVyeS5nZXQoKSwgY29u
dGV4dFJhbmdlLmdldCgpKTsKKyAgICAKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFkZCBhIHRp
bWVvdXQgdG8gdGhpcyBjYWxsIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IHRha2UgdG9vIG11Y2gg
dGltZS4KKyAgICBpZiAoIUREU2Nhbm5lclNjYW5RdWVyeShzY2FubmVyLmdldCgpLCBzY2FuUXVl
cnkuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFJldGFpblB0cjxDRkFy
cmF5UmVmPiBzY2FubmVyUmVzdWx0cyA9IGFkb3B0Q0YoRERTY2FubmVyQ29weVJlc3VsdHNXaXRo
T3B0aW9ucyhzY2FubmVyLmdldCgpLCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNGb3JQYXNz
aXZlVXNlIHwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zQ29hbGVzY2VTaWduYXR1cmVzKSk7
CisgICAgaWYgKCFzY2FubmVyUmVzdWx0cykKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAg
ICBDRkluZGV4IHJlc3VsdENvdW50ID0gQ0ZBcnJheUdldENvdW50KHNjYW5uZXJSZXN1bHRzLmdl
dCgpKTsKKyAgICBpZiAoIXJlc3VsdENvdW50KQorICAgICAgICByZXR1cm4gbmlsOworICAgIAor
ICAgIFZlY3RvcjxSZXRhaW5QdHI8RERSZXN1bHRSZWY+PiBhbGxSZXN1bHRzOworICAgIFZlY3Rv
cjxSZXRhaW5QdHI8TlNJbmRleFBhdGg+PiBpbmRleFBhdGhzOworICAgIE5TSW50ZWdlciBjdXJy
ZW50VG9wTGV2ZWxJbmRleCA9IDA7CisKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjYW5u
ZXIgcmVzdWx0cyB0byBmaW5kIHNpZ25hdHVyZXMgYW5kIGV4dHJhY3QgYWxsIHRoZSBzdWJyZXN1
bHRzIHdoaWxlCisgICAgLy8gcG9wdWxhdGluZyB0aGUgYXJyYXkgb2YgaW5kZXggcGF0aHMgdG8g
dXNlIGluIHRoZSBocmVmIG9mIHRoZSBhbmNob3JzIGJlaW5nIGNyZWF0ZWQuCisgICAgZm9yIChp
ZCByZXN1bHRPYmplY3QgaW4gKE5TQXJyYXkgKilzY2FubmVyUmVzdWx0cy5nZXQoKSkgeworICAg
ICAgICBERFJlc3VsdFJlZiByZXN1bHQgPSAoRERSZXN1bHRSZWYpcmVzdWx0T2JqZWN0OworICAg
ICAgICBOU0luZGV4UGF0aCAqaW5kZXhQYXRoID0gW05TSW5kZXhQYXRoIGluZGV4UGF0aFdpdGhJ
bmRleDpjdXJyZW50VG9wTGV2ZWxJbmRleF07CisgICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUo
RERSZXN1bHRHZXRUeXBlKHJlc3VsdCksIEREQmluZGVyU2lnbmF0dXJlQmxvY2tLZXksIDApID09
IGtDRkNvbXBhcmVFcXVhbFRvKSB7CisgICAgICAgICAgICBOU0FycmF5ICpzdWJyZXN1bHRzID0g
KE5TQXJyYXkgKilERFJlc3VsdEdldFN1YlJlc3VsdHMocmVzdWx0KTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZm9yIChOU1VJbnRlZ2VyIHN1YlJlc3VsdEluZGV4ID0gMCA7IHN1YlJlc3Vs
dEluZGV4IDwgW3N1YnJlc3VsdHMgY291bnRdIDsgc3ViUmVzdWx0SW5kZXgrKykgeworICAgICAg
ICAgICAgICAgIGluZGV4UGF0aHMuYXBwZW5kKFtpbmRleFBhdGggaW5kZXhQYXRoQnlBZGRpbmdJ
bmRleDpzdWJSZXN1bHRJbmRleF0pOworICAgICAgICAgICAgICAgIGFsbFJlc3VsdHMuYXBwZW5k
KChERFJlc3VsdFJlZilbc3VicmVzdWx0cyBvYmplY3RBdEluZGV4OnN1YlJlc3VsdEluZGV4XSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbGxSZXN1bHRz
LmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgaW5kZXhQYXRocy5hcHBlbmQoaW5kZXhQYXRo
KTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50VG9wTGV2ZWxJbmRleCsrOworICAgIH0KKwor
ICAgIFZlY3RvcjxWZWN0b3I8UmVmUHRyPFJhbmdlPj4+IGFsbFJlc3VsdFJhbmdlczsKKyAgICBU
ZXh0SXRlcmF0b3IgaXRlcmF0b3IoY29udGV4dFJhbmdlLmdldCgpKTsKKyAgICBDRkluZGV4IGl0
ZXJhdG9yQ291bnQgPSAwOworCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheSBvZiB0
aGUgZXhwYW5kZWQgcmVzdWx0cyB0byBjcmVhdGUgYSB2ZWN0b3Igb2YgUmFuZ2Ugb2JqZWN0cyB0
aGF0IGluZGljYXRlCisgICAgLy8gd2hlcmUgdGhlIERPTSBuZWVkcyB0byBiZSBtb2RpZmllZC4K
KyAgICAvLyBFYWNoIHJlc3VsdCBjYW4gYmUgY29udGFpbmVkIGFsbCBpbiBvbmUgdGV4dCBub2Rl
IG9yIGNhbiBzcGFuIG11bHRpcGxlIHRleHQgbm9kZXMuCisgICAgZm9yIChhdXRvJiByZXN1bHQg
OiBhbGxSZXN1bHRzKSB7CisgICAgICAgIEREUXVlcnlSYW5nZSBxdWVyeVJhbmdlID0gRERSZXN1
bHRHZXRRdWVyeVJhbmdlRm9yVVJMaWZpY2F0aW9uKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIENG
SW5kZXggaXRlcmF0b3JUYXJnZXRBZHZhbmNlQ291bnQgPSAoQ0ZJbmRleClERFNjYW5RdWVyeUdl
dEZyYWdtZW50TWV0YURhdGEoc2NhblF1ZXJ5LmdldCgpLCBxdWVyeVJhbmdlLnN0YXJ0LnF1ZXJ5
SW5kZXgpOworICAgICAgICB3aGlsZSAoaXRlcmF0b3JDb3VudCA8IGl0ZXJhdG9yVGFyZ2V0QWR2
YW5jZUNvdW50KSB7CisgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAg
ICBpdGVyYXRvckNvdW50Kys7CisgICAgICAgIH0KKworICAgICAgICBWZWN0b3I8UmVmUHRyPFJh
bmdlPj4gZnJhZ21lbnRSYW5nZXM7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFJhbmdl
ID0gaXRlcmF0b3IucmFuZ2UoKTsKKyAgICAgICAgQ0ZJbmRleCBmcmFnbWVudEluZGV4ID0gcXVl
cnlSYW5nZS5zdGFydC5xdWVyeUluZGV4OworICAgICAgICBpZiAoZnJhZ21lbnRJbmRleCA9PSBx
dWVyeVJhbmdlLmVuZC5xdWVyeUluZGV4KQorICAgICAgICAgICAgZnJhZ21lbnRSYW5nZXMuYXBw
ZW5kKFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoY3VycmVudFJhbmdlLmdldCgpLCBxdWVyeVJhbmdl
LnN0YXJ0Lm9mZnNldCwgcXVlcnlSYW5nZS5lbmQub2Zmc2V0IC0gcXVlcnlSYW5nZS5zdGFydC5v
ZmZzZXQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZnJhZ21lbnRSYW5nZXMuYXBwZW5k
KGN1cnJlbnRSYW5nZSk7CisgICAgICAgIAorICAgICAgICB3aGlsZSAoZnJhZ21lbnRJbmRleCA8
IHF1ZXJ5UmFuZ2UuZW5kLnF1ZXJ5SW5kZXgpIHsKKyAgICAgICAgICAgIGZyYWdtZW50SW5kZXgr
KzsKKyAgICAgICAgICAgIGl0ZXJhdG9yVGFyZ2V0QWR2YW5jZUNvdW50ID0gKENGSW5kZXgpRERT
Y2FuUXVlcnlHZXRGcmFnbWVudE1ldGFEYXRhKHNjYW5RdWVyeS5nZXQoKSwgZnJhZ21lbnRJbmRl
eCk7CisgICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3JDb3VudCA8IGl0ZXJhdG9yVGFyZ2V0QWR2
YW5jZUNvdW50KSB7CisgICAgICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAg
ICAgICAgICAgIGl0ZXJhdG9yQ291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1
cnJlbnRSYW5nZSA9IGl0ZXJhdG9yLnJhbmdlKCk7CisgICAgICAgICAgICBmcmFnbWVudFJhbmdl
cy5hcHBlbmQoY3VycmVudFJhbmdlKTsKKyAgICAgICAgfQorICAgICAgICBhbGxSZXN1bHRSYW5n
ZXMuYXBwZW5kKGZyYWdtZW50UmFuZ2VzKTsKKyAgICB9CisgICAgCisgICAgQ0ZUaW1lWm9uZVJl
ZiB0eiA9IENGVGltZVpvbmVDb3B5RGVmYXVsdCgpOworICAgIE5TRGF0ZSAqcmVmZXJlbmNlRGF0
ZSA9IFtOU0RhdGUgZGF0ZV07CisgICAgVGV4dCogbGFzdFRleHROb2RlVG9VcGRhdGUgPSBudWxs
cHRyOworICAgIFN0cmluZyBsYXN0Tm9kZUNvbnRlbnQ7CisgICAgc2l6ZV90IGNvbnRlbnRPZmZz
ZXQgPSAwOworICAgIEREUXVlcnlPZmZzZXQgbGFzdE1vZGlmaWVkUXVlcnlPZmZzZXQgPSB7LTEs
IDB9OworICAgIAorICAgIC8vIEZvciBlYWNoIHJlc3VsdCBhZGQgdGhlIGxpbmsuCisgICAgLy8g
U2luY2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgcmVzdWx0cyBpbiB0aGUgc2FtZSB0ZXh0IG5v
ZGUsIHRoZSBub2RlIGlzIG9ubHkgbW9kaWZpZWQgd2hlbgorICAgIC8vIHdlIGFyZSBhYm91dCB0
byBwcm9jZXNzIGEgZGlmZmVyZW50IHRleHQgbm9kZS4KKyAgICByZXN1bHRDb3VudCA9IGFsbFJl
c3VsdHMuc2l6ZSgpOworICAgIAorICAgIGZvciAoQ0ZJbmRleCByZXN1bHRJbmRleCA9IDA7IHJl
c3VsdEluZGV4IDwgcmVzdWx0Q291bnQ7IHJlc3VsdEluZGV4KyspIHsKKyAgICAgICAgRERSZXN1
bHRSZWYgY29yZVJlc3VsdCA9IGFsbFJlc3VsdHNbcmVzdWx0SW5kZXhdLmdldCgpOworICAgICAg
ICBERFF1ZXJ5UmFuZ2UgcXVlcnlSYW5nZSA9IEREUmVzdWx0R2V0UXVlcnlSYW5nZUZvclVSTGlm
aWNhdGlvbihjb3JlUmVzdWx0KTsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IHJlc3Vs
dFJhbmdlcyA9IGFsbFJlc3VsdFJhbmdlc1tyZXN1bHRJbmRleF07CisKKyAgICAgICAgLy8gQ29t
cGFyZSB0aGUgcXVlcnkgb2Zmc2V0cyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ28gYmFja3dhcmRz
CisgICAgICAgIGlmIChERFF1ZXJ5T2Zmc2V0Q29tcGFyZShsYXN0TW9kaWZpZWRRdWVyeU9mZnNl
dCwgcXVlcnlSYW5nZS5zdGFydCkgPj0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGlmICghcmVzdWx0UmFuZ2VzLnNpemUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIE5TU3RyaW5nICppZGVudGlmaWVyID0gW2luZGV4UGF0aHNbcmVzdWx0SW5kZXhdIGRh
dGFEZXRlY3RvclN0cmluZ1ZhbHVlXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvcnJlc3BvbmRpbmdV
UkwgPSBjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoY29yZVJlc3VsdCwgaWRlbnRpZmllciwg
cmVmZXJlbmNlRGF0ZSwgKE5TVGltZVpvbmUgKil0eiwgdHlwZXMpOworICAgICAgICAKKyAgICAg
ICAgaWYgKCFjb3JyZXNwb25kaW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5n
RERMaW5rcygmcmVzdWx0UmFuZ2VzLmZpcnN0KCktPnN0YXJ0Q29udGFpbmVyKCksICZyZXN1bHRS
YW5nZXMubGFzdCgpLT5lbmRDb250YWluZXIoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisgICAgICAgIGxhc3RNb2RpZmllZFF1ZXJ5T2Zmc2V0ID0gcXVlcnlSYW5nZS5lbmQ7
CisKKyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IHJlc3VsdFJhbmdlcykgeworICAgICAgICAg
ICAgTm9kZSogcGFyZW50Tm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpLnBhcmVudE5vZGUo
KTsKKyAgICAgICAgICAgIFRleHQmIGN1cnJlbnRUZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KHJh
bmdlLT5zdGFydENvbnRhaW5lcigpKTsKKyAgICAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9
IGN1cnJlbnRUZXh0Tm9kZS5kb2N1bWVudCgpOworICAgICAgICAgICAgU3RyaW5nIHRleHROb2Rl
RGF0YTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGxhc3RUZXh0Tm9kZVRvVXBkYXRl
ICE9ICZjdXJyZW50VGV4dE5vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdFRleHROb2Rl
VG9VcGRhdGUpCisgICAgICAgICAgICAgICAgICAgIGxhc3RUZXh0Tm9kZVRvVXBkYXRlLT5zZXRE
YXRhKGxhc3ROb2RlQ29udGVudCk7CisgICAgICAgICAgICAgICAgY29udGVudE9mZnNldCA9IDA7
CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLT5zdGFydE9mZnNldCgpID4gMCkKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLnN1YnN0cmluZ0RhdGEo
MCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2Rl
LnN1YnN0cmluZ0RhdGEoY29udGVudE9mZnNldCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgLSBjb250
ZW50T2Zmc2V0LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCF0ZXh0Tm9kZURhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgUmVmUHRy
PE5vZGU+IG5ld05vZGUgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIHRleHROb2RlRGF0YSk7Cisg
ICAgICAgICAgICAgICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsICZjdXJyZW50
VGV4dE5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgICAgIGNvbnRlbnRP
ZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhY3R1YWwgYW5jaG9yIG5vZGUgYW5kIGluc2Vy
dCBpdCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgICAgICAgIHRleHROb2RlRGF0YSA9
IGN1cnJlbnRUZXh0Tm9kZS5zdWJzdHJpbmdEYXRhKHJhbmdlLT5zdGFydE9mZnNldCgpLCByYW5n
ZS0+ZW5kT2Zmc2V0KCkgLSByYW5nZS0+c3RhcnRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElP
Tik7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1
bWVudCwgdGV4dE5vZGVEYXRhKTsKKyAgICAgICAgICAgIHBhcmVudE5vZGUtPmluc2VydEJlZm9y
ZShuZXdOb2RlLCAmY3VycmVudFRleHROb2RlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgUmVmUHRyPEhUTUxBbmNob3JFbGVtZW50PiBhbmNob3JFbGVt
ZW50ID0gSFRNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgICAgICAgICBh
bmNob3JFbGVtZW50LT5zZXRIcmVmKGNvcnJlc3BvbmRpbmdVUkwpOworICAgICAgICAgICAgYW5j
aG9yRWxlbWVudC0+c2V0RGlyKCJsdHIiKTsKKyAgICAgICAgICAgIFJlZlB0cjxBdHRyPiBjb2xv
ciA9IGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudE5vZGUpLT5nZXRBdHRyaWJ1dGVOb2RlKCJjb2xv
ciIpOworICAgICAgICAgICAgaWYgKGNvbG9yKQorICAgICAgICAgICAgICAgIGFuY2hvckVsZW1l
bnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0ciwgY29sb3ItPnN0eWxlKCktPmNz
c1RleHQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPk5vZGU6
OmFwcGVuZENoaWxkKG5ld05vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAg
cGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKGFuY2hvckVsZW1lbnQsICZjdXJyZW50VGV4dE5vZGUs
IEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgLy8gQWRkIGEgc3BlY2lhbCBhdHRy
aWJ1dGUgdG8gbWFyayB0aGlzIFVSTGlmaWNhdGlvbiBhcyB0aGUgcmVzdWx0IG9mIGRhdGEgZGV0
ZWN0b3JzLgorICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRlKFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sIGRhdGFEZXRlY3RvcnNVUkxTY2hlbWUsIG51bGxBdG9tKSwgInRydWUi
KTsKKyAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCBkYXRhRGV0ZWN0b3JzQXR0cmlidXRlVHlwZUtleSwgbnVsbEF0b20pLCBkYXRh
RGV0ZWN0b3JUeXBlRm9yQ2F0ZWdvcnkoRERSZXN1bHRHZXRDYXRlZ29yeShjb3JlUmVzdWx0KSkp
OworICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRlKFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sIGRhdGFEZXRlY3RvcnNBdHRyaWJ1dGVSZXN1bHRLZXksIG51bGxBdG9tKSwgaWRl
bnRpZmllcik7CisgICAgICAgICAgICBjb250ZW50T2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBsYXN0Tm9kZUNvbnRlbnQgPSBjdXJyZW50VGV4
dE5vZGUuc3Vic3RyaW5nRGF0YShyYW5nZS0+ZW5kT2Zmc2V0KCksIGN1cnJlbnRUZXh0Tm9kZS5s
ZW5ndGgoKSAtIHJhbmdlLT5lbmRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAg
ICAgICAgICBsYXN0VGV4dE5vZGVUb1VwZGF0ZSA9ICZjdXJyZW50VGV4dE5vZGU7CisgICAgICAg
IH0gICAgICAgIAorICAgIH0KKyAgICBpZiAobGFzdFRleHROb2RlVG9VcGRhdGUpCisgICAgICAg
IGxhc3RUZXh0Tm9kZVRvVXBkYXRlLT5zZXREYXRhKGxhc3ROb2RlQ29udGVudCk7CisgICAgCisg
ICAgcmV0dXJuIFtERFNjYW5uZXJSZXN1bHQgcmVzdWx0c0Zyb21Db3JlUmVzdWx0czpzY2FubmVy
UmVzdWx0cy5nZXQoKV07Cit9CisKKyNlbHNlCitOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRl
Y3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiwgRGF0YURldGVjdG9yVHlwZXMpCit7Cisg
ICAgcmV0dXJuIG5pbDsKK30KKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAxOTUzMTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Mjg0LDcgKzIyODQsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZUZvclRo
CiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQogICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1l
LnNldHRpbmdzKCkuZGF0YURldGVjdG9yVHlwZXMoKSAhPSBEYXRhRGV0ZWN0b3JUeXBlTm9uZSkg
ewogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGRvY3VtZW50UmFuZ2UgPSBtYWtl
UmFuZ2UoZmlyc3RQb3NpdGlvbkluTm9kZShtX2ZyYW1lLmRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpKSwgbGFzdFBvc2l0aW9uSW5Ob2RlKG1fZnJhbWUuZG9jdW1lbnQoKS0+ZG9jdW1lbnRF
bGVtZW50KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29u
dGVudEluUmFuZ2UoZG9jdW1lbnRSYW5nZSwgbV9mcmFtZS5zZXR0aW5ncygpLmRhdGFEZXRlY3Rv
clR5cGVzKCkpOworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLnNldERhdGFEZXRlY3Rpb25S
ZXN1bHRzKERhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKGRvY3VtZW50UmFuZ2Us
IG1fZnJhbWUuc2V0dGluZ3MoKS5kYXRhRGV0ZWN0b3JUeXBlcygpKSk7CiAgICAgICAgICAgICAg
ICAgfQogI2VuZGlmCiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lv
biAxOTUzMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDEwICs0NywxMyBAQAogI2luY2x1ZGUgIkZyYW1lV2luLmgiCiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKENPQ09BKQorT0JKQ19DTEFTUyBOU0FycmF5OworI2VuZGlmCisKICNpZiBQTEFU
Rk9STShJT1MpCiBPQkpDX0NMQVNTIERPTUNTU1N0eWxlRGVjbGFyYXRpb247CiBPQkpDX0NMQVNT
IERPTU5vZGU7Ci1PQkpDX0NMQVNTIE5TQXJyYXk7CiBPQkpDX0NMQVNTIE5TU3RyaW5nOwogI2Vu
ZGlmCiAKQEAgLTE4NSw2ICsxODgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBX
RUJDT1JFX0VYUE9SVCBmbG9hdCBmcmFtZVNjYWxlRmFjdG9yKCkgY29uc3Q7CiAKICAgICAgICAg
dm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKyAgICAgICAgCisjaWYgRU5B
QkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICB2b2lkIHNldERhdGFEZXRlY3Rpb25SZXN1bHRz
KE5TQXJyYXkgKnJlc3VsdHMpIHsgbV9kYXRhRGV0ZWN0aW9uUmVzdWx0cyA9IHJlc3VsdHM7IH0K
KyAgICAgICAgTlNBcnJheSAqZGF0YURldGVjdGlvblJlc3VsdHMoKSBjb25zdCB7IHJldHVybiBt
X2RhdGFEZXRlY3Rpb25SZXN1bHRzLmdldCgpOyB9CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElP
UykKICAgICAgICAgY29uc3QgVmlld3BvcnRBcmd1bWVudHMmIHZpZXdwb3J0QXJndW1lbnRzKCkg
Y29uc3Q7CkBAIC0yOTIsNiArMzAwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBj
b25zdCBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRIYW5kbGVyPiBtX2V2ZW50SGFuZGxlcjsKICAgICAg
ICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvbkNvbnRyb2xsZXI+IG1fYW5pbWF0aW9u
Q29udHJvbGxlcjsKIAorI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICAgICAgUmV0YWlu
UHRyPE5TQXJyYXk+IG1fZGF0YURldGVjdGlvblJlc3VsdHM7CisjZW5kaWYKICNpZiBQTEFURk9S
TShJT1MpCiAgICAgICAgIHZvaWQgYmV0dGVyQXBwcm94aW1hdGVOb2RlKGNvbnN0IEludFBvaW50
JiB0ZXN0UG9pbnQsIE5vZGVRdWFsaWZpZXIsIE5vZGUqJiBiZXN0LCBOb2RlKiBmYWlsZWROb2Rl
LCBJbnRQb2ludCYgYmVzdFBvaW50LCBJbnRSZWN0JiBiZXN0UmVjdCwgY29uc3QgSW50UmVjdCYg
dGVzdFJlY3QpOwogICAgICAgICBib29sIGhpdFRlc3RSZXN1bHRBdFZpZXdwb3J0TG9jYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgdmlld3BvcnRMb2NhdGlvbiwgSGl0VGVzdFJlc3VsdCYsIEludFBv
aW50JiBjZW50ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL0Rh
dGFEZXRlY3RvcnNDb3JlU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3BpL2NvY29hL0RhdGFEZXRlY3RvcnNDb3JlU1BJLmgJKHJldmlzaW9uIDE5NTMxNikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMCArMjMsMTYgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorCiAjaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKIAorI2ltcG9ydCA8RGF0YURldGVjdG9yc0NvcmUvRERCaW5k
ZXJLZXlzX1ByaXZhdGUuaD4KKyNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3JlL0REU2Nhbm5lclJl
c3VsdC5oPgogI2ltcG9ydCA8RGF0YURldGVjdG9yc0NvcmUvRGF0YURldGVjdG9yc0NvcmUuaD4K
LQorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPERhdGFEZXRlY3RvcnNDb3JlL0REVVJMaWZp
ZXIuaD4KKyNlbmRpZgogI2Vsc2UgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAKIHR5cGVk
ZWYgZW51bSB7CkBAIC0zOCw3ICs0NCw3NyBAQCB0eXBlZGVmIGVudW0gewogZW51bSB7CiAgICAg
RERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zTm9uZSA9IDAsCiAgICAgRERTY2FubmVyQ29weVJl
c3VsdHNPcHRpb25zTm9PdmVybGFwID0gMSA8PCAwLAorICAgIEREU2Nhbm5lckNvcHlSZXN1bHRz
T3B0aW9uc0NvYWxlc2NlU2lnbmF0dXJlcyA9IDEgPDwgMSwKK307CisKK2VudW0geworICAgIERE
VVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvbk5vbmUgPSAwLAorICAgIEREVVJMaWZpZXJQaG9u
ZU51bWJlckRldGVjdGlvblJlZ3VsYXIgPSAxIDw8IDEsCisgICAgRERVUkxpZmllclBob25lTnVt
YmVyRGV0ZWN0aW9uUXVvdGVkU2hvcnRzID0gMSA8PCAyLAorICAgIEREVVJMaWZpZXJQaG9uZU51
bWJlckRldGVjdGlvblVucXVvdGVkU2hvcnRzID0gMSA8PCAzCiB9OwordHlwZWRlZiBOU1VJbnRl
Z2VyIEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvblR5cGVzOworCit0eXBlZGVmIGVudW0g
X19ERFRleHRDb2FsZXNjaW5nVHlwZSB7CisgICAgRERUZXh0Q29hbGVzY2luZ1R5cGVOb25lID0g
MCwKKyAgICBERFRleHRDb2FsZXNjaW5nVHlwZVNwYWNlID0gMSwKKyAgICBERFRleHRDb2FsZXNj
aW5nVHlwZVRhYiA9IDIsCisgICAgRERUZXh0Q29hbGVzY2luZ1R5cGVMaW5lQnJlYWsgPSAzLAor
ICAgIEREVGV4dENvYWxlc2NpbmdUeXBlSGFyZEJyZWFrID0gNCwKK30gRERUZXh0Q29hbGVzY2lu
Z1R5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgICAgRERSZXN1bHRDYXRlZ29yeVVua25vd24gPSAw
LAorICAgIEREUmVzdWx0Q2F0ZWdvcnlMaW5rID0gMSwKKyAgICBERFJlc3VsdENhdGVnb3J5UGhv
bmVOdW1iZXIgPSAyLAorICAgIEREUmVzdWx0Q2F0ZWdvcnlBZGRyZXNzID0gMywKKyAgICBERFJl
c3VsdENhdGVnb3J5Q2FsZW5kYXJFdmVudCA9IDQsCisgICAgRERSZXN1bHRDYXRlZ29yeU1pc2Mg
PSA1LAorfSBERFJlc3VsdENhdGVnb3J5OworCit0eXBlZGVmIGVudW0gX19ERFRleHRGcmFnbWVu
dFR5cGUgeworICAgIEREVGV4dEZyYWdtZW50VHlwZVRyaW1XaGl0ZVNwYWNlID0gIDB4MSwKKyAg
ICBERFRleHRGcmFnbWVudFR5cGVJZ25vcmVDUkxGID0gIDB4MiwKK30gRERUZXh0RnJhZ21lbnRN
b2RlOworCitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3QgRERCaW5kZXJIdHRwVVJMS2V5OworZXh0
ZXJuIENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVyV2ViVVJMS2V5OworZXh0ZXJuIENGU3RyaW5n
UmVmIGNvbnN0IEREQmluZGVyTWFpbFVSTEtleTsKK2V4dGVybiBDRlN0cmluZ1JlZiBjb25zdCBE
REJpbmRlckdlbmVyaWNVUkxLZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3QgRERCaW5kZXJF
bWFpbEtleTsKK2V4dGVybiBDRlN0cmluZ1JlZiBjb25zdCBEREJpbmRlclRyYWNraW5nTnVtYmVy
S2V5OworZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVyRmxpZ2h0SW5mb3JtYXRpb25L
ZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3QgRERCaW5kZXJTaWduYXR1cmVCbG9ja0tleTsK
K2V4dGVybiBOU1N0cmluZyAqIGNvbnN0IEREVVJMU2NoZW1lOworCitAaW50ZXJmYWNlIEREU2Nh
bm5lclJlc3VsdCA6IE5TT2JqZWN0IDxOU0NvZGluZywgTlNTZWN1cmVDb2Rpbmc+CisrIChOU0Fy
cmF5ICopIHJlc3VsdHNGcm9tQ29yZVJlc3VsdHM6KENGQXJyYXlSZWYpY29yZVJlc3VsdHM7CitA
ZW5kCisKKyNkZWZpbmUgRERSZXN1bHRQcm9wZXJ0eVBhc3NpdmVEaXNwbGF5ICAgKDEgPDwgMCkK
KwordHlwZWRlZiBzdHJ1Y3QgX19ERFF1ZXJ5T2Zmc2V0IHsKKyAgICBDRkluZGV4IHF1ZXJ5SW5k
ZXg7CisgICAgQ0ZJbmRleCBvZmZzZXQ7Cit9IEREUXVlcnlPZmZzZXQ7CisKK3R5cGVkZWYgc3Ry
dWN0IF9fRERRdWVyeVJhbmdlIHsKKyAgICBERFF1ZXJ5T2Zmc2V0IHN0YXJ0OworICAgIEREUXVl
cnlPZmZzZXQgZW5kOworfSBERFF1ZXJ5UmFuZ2U7CisKK2lubGluZSBDRkNvbXBhcmlzb25SZXN1
bHQgRERRdWVyeU9mZnNldENvbXBhcmUoRERRdWVyeU9mZnNldCBvMSwgRERRdWVyeU9mZnNldCBv
MikKK3sKKyAgICBpZiAobzEucXVlcnlJbmRleCA8IG8yLnF1ZXJ5SW5kZXgpCisgICAgICAgIHJl
dHVybiBrQ0ZDb21wYXJlTGVzc1RoYW47CisgICAgaWYgKG8xLnF1ZXJ5SW5kZXggPiBvMi5xdWVy
eUluZGV4KQorICAgICAgICByZXR1cm4ga0NGQ29tcGFyZUdyZWF0ZXJUaGFuOworICAgIGlmIChv
MS5vZmZzZXQgPCBvMi5vZmZzZXQpCisgICAgICAgIHJldHVybiBrQ0ZDb21wYXJlTGVzc1RoYW47
CisgICAgaWYgKG8xLm9mZnNldCA+IG8yLm9mZnNldCkKKyAgICAgICAgcmV0dXJuIGtDRkNvbXBh
cmVHcmVhdGVyVGhhbjsKKyAgICByZXR1cm4ga0NGQ29tcGFyZUVxdWFsVG87Cit9CiAKICNlbmRp
ZiAvLyAhVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIApAQCAtNDgsMTMgKzEyNCwzMyBAQCB0eXBl
ZGVmIHN0cnVjdCBfX0REU2Nhbm5lciAqRERTY2FubmVyUmVmCiAKIHR5cGVkZWYgQ0ZJbmRleCBE
RFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnM7CiB0eXBlZGVmIENGSW5kZXggRERTY2FubmVyT3B0
aW9uczsKK2V4dGVybiBjb25zdCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnMgRERTY2FubmVy
Q29weVJlc3VsdHNPcHRpb25zRm9yUGFzc2l2ZVVzZTsKIAogZXh0ZXJuICJDIiB7CiAKIEREU2Nh
bm5lclJlZiBERFNjYW5uZXJDcmVhdGUoRERTY2FubmVyVHlwZSwgRERTY2FubmVyT3B0aW9ucywg
Q0ZFcnJvclJlZiopOworRERTY2FuUXVlcnlSZWYgRERTY2FuUXVlcnlDcmVhdGUoQ0ZBbGxvY2F0
b3JSZWYpOwogRERTY2FuUXVlcnlSZWYgRERTY2FuUXVlcnlDcmVhdGVGcm9tU3RyaW5nKENGQWxs
b2NhdG9yUmVmLCBDRlN0cmluZ1JlZiwgQ0ZSYW5nZSk7CiBCb29sZWFuIEREU2Nhbm5lclNjYW5R
dWVyeShERFNjYW5uZXJSZWYsIEREU2NhblF1ZXJ5UmVmKTsKIENGQXJyYXlSZWYgRERTY2FubmVy
Q29weVJlc3VsdHNXaXRoT3B0aW9ucyhERFNjYW5uZXJSZWYsIEREU2Nhbm5lckNvcHlSZXN1bHRz
T3B0aW9ucyk7CiBDRlJhbmdlIEREUmVzdWx0R2V0UmFuZ2UoRERSZXN1bHRSZWYpOworQ0ZTdHJp
bmdSZWYgRERSZXN1bHRHZXRUeXBlKEREUmVzdWx0UmVmKTsKK0REUmVzdWx0Q2F0ZWdvcnkgRERS
ZXN1bHRHZXRDYXRlZ29yeShERFJlc3VsdFJlZik7CitCb29sZWFuIEREUmVzdWx0SXNQYXN0RGF0
ZShERFJlc3VsdFJlZiwgQ0ZEYXRlUmVmIHJlZmVyZW5jZURhdGUsIENGVGltZVpvbmVSZWYgcmVm
ZXJlbmNlVGltZVpvbmUpOwordm9pZCBERFNjYW5RdWVyeUFkZFRleHRGcmFnbWVudChERFNjYW5R
dWVyeVJlZiwgQ0ZTdHJpbmdSZWYsIENGUmFuZ2UsIHZvaWQgKmlkZW50aWZpZXIsIEREVGV4dEZy
YWdtZW50TW9kZSwgRERUZXh0Q29hbGVzY2luZ1R5cGUpOwordm9pZCBERFNjYW5RdWVyeUFkZFNl
cGFyYXRvcihERFNjYW5RdWVyeVJlZiwgRERUZXh0Q29hbGVzY2luZ1R5cGUpOwordm9pZCBERFNj
YW5RdWVyeUFkZExpbmVCcmVhayhERFNjYW5RdWVyeVJlZik7Cit2b2lkICpERFNjYW5RdWVyeUdl
dEZyYWdtZW50TWV0YURhdGEoRERTY2FuUXVlcnlSZWYsIENGSW5kZXggcXVlcnlJbmRleCk7Citi
b29sIEREUmVzdWx0SGFzUHJvcGVydGllcyhERFJlc3VsdFJlZiwgQ0ZJbmRleCBwcm9wZXJ0eVNl
dCk7CitDRkFycmF5UmVmIEREUmVzdWx0R2V0U3ViUmVzdWx0cyhERFJlc3VsdFJlZik7CitERFF1
ZXJ5UmFuZ2UgRERSZXN1bHRHZXRRdWVyeVJhbmdlRm9yVVJMaWZpY2F0aW9uKEREUmVzdWx0UmVm
KTsKKworI2lmIFBMQVRGT1JNKElPUykKK05TU3RyaW5nICpERFVSTFN0cmluZ0ZvclJlc3VsdChE
RFJlc3VsdFJlZiBjdXJyZW50UmVzdWx0LCBOU1N0cmluZyAqIHJlc3VsdElkZW50aWZpZXIsIERE
VVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvblR5cGVzIGluY2x1ZGluZ1RlbEdyb3VwcywgTlNE
YXRlICogcmVmZXJlbmNlRGF0ZSwgTlNUaW1lWm9uZSAqIHJlZmVyZW5jZVRpbWVab25lKTsKKwor
U09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLX09QVElPTkFMKERhdGFEZXRlY3RvcnNDb3JlKQor
U09GVF9MSU5LX0NMQVNTKERhdGFEZXRlY3RvcnNDb3JlLCBERFNjYW5uZXJSZXN1bHQpCisKKyNl
bmRpZgogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTUzOTIpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNi0wMS0y
MSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBw
b3J0IGZvciBEYXRhRGV0ZWN0b3JzIGluIFdLIChpT1MpLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyOTg5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVt
LzIyODU1OTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKGZyb21XS0Rh
dGFEZXRlY3RvclR5cGVzKTogQ2hhbmdlZCBwYXJhbWV0ZXIgdG8gdWludDY0X3QgdG8KKyAgICAg
ICAgc3VjY2Vzc2Z1bGx5IGNvbXBhcmUgYWdhaW5zdCBXS0RhdGFEZXRlY3RvclR5cGVBbGwuCisK
IDIwMTYtMDEtMjAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBGaXggQ01ha2UgYnVpbGQgYWZ0ZXIgcjE5NTMwMC4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAx
OTUzMTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw3IEBAIHN0YXRpYyBib29sIHNob3VsZEFs
bG93UGljdHVyZUluUGljdHVyZU0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9O
KQotc3RhdGljIFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVzIGZyb21XS0RhdGFEZXRlY3RvclR5
cGVzKHVpbnQzMl90IHR5cGVzKQorc3RhdGljIFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVzIGZy
b21XS0RhdGFEZXRlY3RvclR5cGVzKHVpbnQ2NF90IHR5cGVzKQogewogICAgIGlmIChzdGF0aWNf
Y2FzdDxXS0RhdGFEZXRlY3RvclR5cGVzPih0eXBlcykgPT0gV0tEYXRhRGV0ZWN0b3JUeXBlTm9u
ZSkKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVOb25lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269603</attachid>
            <date>2016-01-22 13:52:02 -0800</date>
            <delta_ts>2016-01-22 18:15:13 -0800</delta_ts>
            <desc>New patch revisited</desc>
            <filename>ddwk2-part2-revisited.txt</filename>
            <type>text/plain</type>
            <size>33567</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE2LTAxLTIyICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgdGhlIGxvZ2ljIHRvIHBlcmZvcm0gZGF0YSBkZXRlY3Rpb24gYW5kIG1vZGlmeQor
ICAgICAgICB0aGUgZG9tIGJ5IGFkZGluZyBkYXRhIGRldGVjdG9yIGxpbmtzIGFzIGFwcHJvcHJp
YXRlLgorICAgICAgICBUaGUgZGF0YSBkZXRlY3RvciByZXN1bHRzIHJldHVybmVkIGJ5IGRldGVj
dENvbnRlbnRJblJhbmdlIGFyZQorICAgICAgICBzdG9yZWQgaW4gdGhlIEZyYW1lIG9iamVjdC4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oOgorICAgICAgICAqIGVk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKC1bTlNJbmRleFBhdGggZGF0
YURldGVjdG9yU3RyaW5nVmFsdWVdKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246
OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3Vs
dElzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IpOgorICAgICAg
ICAoV2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFEZXRlY3RvclR5cGVGb3JDYXRlZ29yeSk6CisgICAgICAgIChXZWJD
b3JlOjpidWlsZFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVj
dENvbnRlbnRJblJhbmdlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNoZWNrTG9hZENvbXBsZXRlRm9yVGhpc0ZyYW1l
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0
RGF0YURldGVjdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRhdGFEZXRl
Y3Rpb25SZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvRGF0YURldGVjdG9y
c0NvcmVTUEkuaDoKKyAgICAgICAgKEREUXVlcnlPZmZzZXRDb21wYXJlKToKKwogMjAxNi0wMS0y
MiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBk
ZXBlbmRlbmN5IGZyb20gRGF0YURldGVjdG9yc0NvcmUgb24gaU9TLgpAQCAtMTM4OCw3ICsxNDIw
LDYgQEAKICAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNGdXR1cmVDdWVQc2V1ZG9DbGFzcyk6CiAg
ICAgICAgIChXZWJDb3JlOjptYXRjaGVzUGFzdEN1ZVBzZXVkb0NsYXNzKToKIAotPj4+Pj4+PiAu
cjE5NTMxNgogMjAxNi0wMS0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxOTUxNzkuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAkocmV2aXNpb24gMTk1NDYxKQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogT0JK
Q19DTEFTUyBEREFjdGlvbkNvbnRleHQ7CitPQkpDX0NMQVNTIE5TQXJyYXk7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNTMsNyArNTQsNyBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBk
ZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiwgRmxvYXRS
ZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRh
UmFuZ2UpOwogI2VuZGlmCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgZGV0ZWN0Q29u
dGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGV0ZWN0b3JUeXBl
cyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE5TQXJyYXkgKmRldGVjdENvbnRlbnRJblJh
bmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMpOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24gMTk1NDYxKQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw2ICs0NCwxMiBAQAogI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCiAjaW1wb3J0ICJodG1sZWRp
dGluZy5oIgogCisjaWYgUExBVEZPUk0oSU9TKQorY29uc3QgY2hhciAqZGF0YURldGVjdG9yc1VS
TFNjaGVtZSA9ICJ4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzIjsKK2NvbnN0IGNoYXIgKmRhdGFEZXRl
Y3RvcnNBdHRyaWJ1dGVUeXBlS2V5ID0gIngtYXBwbGUtZGF0YS1kZXRlY3RvcnMtdHlwZSI7Citj
b25zdCBjaGFyICpkYXRhRGV0ZWN0b3JzQXR0cmlidXRlUmVzdWx0S2V5ID0gIngtYXBwbGUtZGF0
YS1kZXRlY3RvcnMtcmVzdWx0IjsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNp
ZiBQTEFURk9STShNQUMpCkBAIC0xMzgsOSArMTQ0LDQxMiBAQCBSZXRhaW5QdHI8RERBY3Rpb25D
b250ZXh0PiBEYXRhRGV0ZWN0aW9uCiAgICAgcmV0dXJuIGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0
aFJhbmdlKHBvc2l0aW9uLCBjb250ZXh0UmFuZ2UsIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBk
ZXRlY3RlZERhdGFSYW5nZSk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAgIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICAKK3N0YXRpYyBCT09MIHJlc3VsdElzVVJMKEREUmVzdWx0UmVm
IHJlc3VsdCkKK3sKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIE5POworICAgIAor
ICAgIHN0YXRpYyBOU1NldCAqdXJsVHlwZXMgPSBbW05TU2V0IHNldFdpdGhPYmplY3RzOiAoTlNT
dHJpbmcgKilnZXREREJpbmRlckh0dHBVUkxLZXkoKSwgKE5TU3RyaW5nICopZ2V0RERCaW5kZXJX
ZWJVUkxLZXkoKSwgKE5TU3RyaW5nICopZ2V0RERCaW5kZXJNYWlsVVJMS2V5KCksIChOU1N0cmlu
ZyAqKWdldEREQmluZGVyR2VuZXJpY1VSTEtleSgpLCAoTlNTdHJpbmcgKilnZXREREJpbmRlckVt
YWlsS2V5KCksIG5pbF0gcmV0YWluXTsKKyAgICByZXR1cm4gW3VybFR5cGVzIGNvbnRhaW5zT2Jq
ZWN0OihOU1N0cmluZyAqKUREUmVzdWx0R2V0VHlwZShyZXN1bHQpXTsKK30KKworc3RhdGljIE5T
U3RyaW5nICpjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoRERSZXN1bHRSZWYgY3VycmVudFJl
c3VsdCwgTlNTdHJpbmcgKnJlc3VsdElkZW50aWZpZXIsIE5TRGF0ZSAqcmVmZXJlbmNlRGF0ZSwg
TlNUaW1lWm9uZSAqcmVmZXJlbmNlVGltZVpvbmUsIERhdGFEZXRlY3RvclR5cGVzIGRldGVjdGlv
blR5cGVzKQoreworICAgIGlmICghRERSZXN1bHRIYXNQcm9wZXJ0aWVzKGN1cnJlbnRSZXN1bHQs
IEREUmVzdWx0UHJvcGVydHlQYXNzaXZlRGlzcGxheSkpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgCisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uVHlwZXMgcGhvbmVUeXBlcyA9
IChkZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlcikgPyBERFVSTGlm
aWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25SZWd1bGFyIDogRERVUkxpZmllclBob25lTnVtYmVyRGV0
ZWN0aW9uTm9uZTsKKyAgICBERFJlc3VsdENhdGVnb3J5IGNhdGVnb3J5ID0gRERSZXN1bHRHZXRD
YXRlZ29yeShjdXJyZW50UmVzdWx0KTsKKyAgICBDRlN0cmluZ1JlZiB0eXBlID0gRERSZXN1bHRH
ZXRUeXBlKGN1cnJlbnRSZXN1bHQpOworICAgIAorICAgIGlmICgoKGRldGVjdGlvblR5cGVzICYg
RGF0YURldGVjdG9yVHlwZUFkZHJlc3MpICYmIChERFJlc3VsdENhdGVnb3J5QWRkcmVzcyA9PSBj
YXRlZ29yeSkpCisgICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBl
VHJhY2tpbmdOdW1iZXIpICYmIChDRlN0cmluZ0NvbXBhcmUoZ2V0RERCaW5kZXJUcmFja2luZ051
bWJlcktleSgpLCB0eXBlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpCisgICAgICAgIHx8ICgo
ZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlRmxpZ2h0KSAmJiAoQ0ZTdHJpbmdDb21w
YXJlKGdldEREQmluZGVyRmxpZ2h0SW5mb3JtYXRpb25LZXkoKSwgdHlwZSwgMCkgPT0ga0NGQ29t
cGFyZUVxdWFsVG8pKQorICAgICAgICB8fCAoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9y
VHlwZVBob25lTnVtYmVyKSAmJiAoRERSZXN1bHRDYXRlZ29yeVBob25lTnVtYmVyID09IGNhdGVn
b3J5KSkKKyAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5cGVMaW5r
KSAmJiByZXN1bHRJc1VSTChjdXJyZW50UmVzdWx0KSkpIHsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiBERFVSTFN0cmluZ0ZvclJlc3VsdChjdXJyZW50UmVzdWx0LCByZXN1bHRJZGVudGlmaWVy
LCBwaG9uZVR5cGVzLCByZWZlcmVuY2VEYXRlLCByZWZlcmVuY2VUaW1lWm9uZSk7CisgICAgfQor
ICAgIGlmICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCkg
JiYgKEREUmVzdWx0Q2F0ZWdvcnlDYWxlbmRhckV2ZW50ID09IGNhdGVnb3J5KSkgeworICAgICAg
ICBpZiAoIUREUmVzdWx0SXNQYXN0RGF0ZShjdXJyZW50UmVzdWx0LCAoQ0ZEYXRlUmVmKXJlZmVy
ZW5jZURhdGUsIChDRlRpbWVab25lUmVmKXJlZmVyZW5jZVRpbWVab25lKSkKKyAgICAgICAgICAg
IHJldHVybiBERFVSTFN0cmluZ0ZvclJlc3VsdChjdXJyZW50UmVzdWx0LCByZXN1bHRJZGVudGlm
aWVyLCBwaG9uZVR5cGVzLCByZWZlcmVuY2VEYXRlLCByZWZlcmVuY2VUaW1lWm9uZSk7CisgICAg
fQorICAgIHJldHVybiBuaWw7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZVJlc3VsdExpbmtzRnJv
bUFuY2hvcihOb2RlICpub2RlLCBOb2RlICpub2RlUGFyZW50KQoreworICAgIC8vIFBlcmZvcm0g
YSBkZXB0aC1maXJzdCBzZWFyY2ggZm9yIGFuY2hvciBub2Rlcywgd2hpY2ggaGF2ZSB0aGUgRERV
UkxTY2hlbWUgYXR0cmlidXRlIHNldCB0byB0cnVlLAorICAgIC8vIHRha2UgdGhlaXIgY2hpbGRy
ZW4gYW5kIGluc2VydCB0aGVtIGJlZm9yZSB0aGUgYW5jaG9yLAorICAgIC8vIGFuZCB0aGVuIHJl
bW92ZSB0aGUgYW5jaG9yLgorICAgIAorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIEJPT0wgbm9kZUlzRERBbmNob3IgPSBpczxIVE1MQW5jaG9yRWxlbWVudD4oKm5v
ZGUpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5nZXRBdHRyaWJ1dGUoZ2V0RERVUkxTY2hl
bWUoKSkgPT0gInRydWUiOworICAgIAorICAgIFJlZlB0cjxOb2RlTGlzdD4gY2hpbGRyZW4gPSBu
b2RlLT5jaGlsZE5vZGVzKCk7CisgICAgdW5zaWduZWQgY2hpbGRDb3VudCA9IGNoaWxkcmVuLT5s
ZW5ndGgoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewor
ICAgICAgICBOb2RlICpjaGlsZCA9IGNoaWxkcmVuLT5pdGVtKGkpOworICAgICAgICBpZiAoaXM8
RWxlbWVudD4oKmNoaWxkKSkKKyAgICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hv
cihjaGlsZCwgbm9kZSk7CisgICAgfQorICAgIAorICAgIGlmIChub2RlSXNEREFuY2hvciAmJiBu
b2RlUGFyZW50KSB7CisgICAgICAgIGNoaWxkcmVuID0gbm9kZS0+Y2hpbGROb2RlcygpOworICAg
ICAgICBjaGlsZENvdW50ID0gY2hpbGRyZW4tPmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAg
Ly8gSXRlcmF0ZSBvdmVyIHRoZSBjaGlsZHJlbiBhbmQgbW92ZSB0aGVtIGFsbCBvbnRvIHRoZSBz
YW1lIGxldmVsIGFzIHRoaXMgYW5jaG9yLgorICAgICAgICAvLyBSZW1vdmUgdGhlIGFuY2hvciBh
ZnRlcndhcmRzLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkr
KykgeworICAgICAgICAgICAgTm9kZSAqY2hpbGQgPSBjaGlsZHJlbi0+aXRlbSgwKTsgLy8gY2hp
bGRyZW4gY2hhbmdlIGR1ZSB0byBpbnNlcnRpb24sIGFsd2F5cyB1c2UgaWR4IDAKKyAgICAgICAg
ICAgIG5vZGVQYXJlbnQtPmluc2VydEJlZm9yZShjaGlsZCwgbm9kZSwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisgICAgICAgIH0KKyAgICAgICAgbm9kZVBhcmVudC0+cmVtb3ZlQ2hpbGQobm9kZSwg
QVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBzZWFyY2hGb3JM
aW5rUmVtb3ZpbmdFeGlzdGluZ0RETGlua3MoTm9kZSogc3RhcnROb2RlLCBOb2RlKiBlbmROb2Rl
KQoreworICAgIE5vZGUgKm5vZGUgPSBzdGFydE5vZGU7CisgICAgd2hpbGUgKG5vZGUpIHsKKyAg
ICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKKyAgICAgICAgICAgIGlm
IChkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKGdldEREVVJMU2NoZW1lKCkp
ICE9ICJ0cnVlIikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJl
bW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihub2RlLCBub2RlLT5wYXJlbnRFbGVtZW50KCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobm9kZSA9PSBlbmROb2RlKSB7CisgICAg
ICAgICAgICAvLyBJZiB3ZSBmb3VuZCB0aGUgZW5kIG5vZGUgYW5kIG5vIGxpbmssIHJldHVybiBm
YWxzZSB1bmxlc3MgYW4gYW5jZXN0b3Igbm9kZSBpcyBhIGxpbmsuCisgICAgICAgICAgICAvLyBU
aGUgb25seSBhbmNlc3RvcnMgbm90IHRlc3RlZCBhdCB0aGlzIHBvaW50IGFyZSBpbiB0aGUgZGly
ZWN0IGxpbmUgZnJvbSBzZWxmJ3MgcGFyZW50IHRvIHRoZSB0b3AuCisgICAgICAgICAgICBub2Rl
ID0gc3RhcnROb2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICB3aGlsZSAobm9kZSkgewor
ICAgICAgICAgICAgICAgIGlmIChpczxIVE1MQW5jaG9yRWxlbWVudD4oKm5vZGUpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRl
KGdldEREVVJMU2NoZW1lKCkpICE9ICJ0cnVlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNo
b3Iobm9kZSwgbm9kZS0+cGFyZW50RWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVm
UHRyPE5vZGVMaXN0PiBjaGlsZE5vZGVzID0gbm9kZS0+Y2hpbGROb2RlcygpOworICAgICAgICBp
ZiAoY2hpbGROb2Rlcy0+bGVuZ3RoKCkpCisgICAgICAgICAgICBub2RlID0gY2hpbGROb2Rlcy0+
aXRlbSgwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBOb2RlICpuZXdOb2RlID0gbm9k
ZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIE5vZGUgKnBhcmVudE5vZGUgPSBub2RlOwor
ICAgICAgICAgICAgd2hpbGUgKCFuZXdOb2RlKSB7CisgICAgICAgICAgICAgICAgcGFyZW50Tm9k
ZSA9IHBhcmVudE5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcmVu
dE5vZGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBuZXdOb2RlID0gcGFyZW50Tm9kZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG5vZGUgPSBuZXdOb2RlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworc3RhdGljIE5TU3RyaW5nICpkYXRhRGV0ZWN0b3JUeXBlRm9yQ2F0ZWdvcnko
RERSZXN1bHRDYXRlZ29yeSBjYXRlZ29yeSkKK3sKKyAgICBzd2l0Y2ggKGNhdGVnb3J5KSB7Cisg
ICAgY2FzZSBERFJlc3VsdENhdGVnb3J5UGhvbmVOdW1iZXI6CisgICAgICAgIHJldHVybiBAInRl
bGVwaG9uZSI7CisgICAgY2FzZSBERFJlc3VsdENhdGVnb3J5TGluazoKKyAgICAgICAgcmV0dXJu
IEAibGluayI7CisgICAgY2FzZSBERFJlc3VsdENhdGVnb3J5QWRkcmVzczoKKyAgICAgICAgcmV0
dXJuIEAiYWRkcmVzcyI7CisgICAgY2FzZSBERFJlc3VsdENhdGVnb3J5Q2FsZW5kYXJFdmVudDoK
KyAgICAgICAgcmV0dXJuIEAiY2FsZW5kYXItZXZlbnQiOworICAgIGNhc2UgRERSZXN1bHRDYXRl
Z29yeU1pc2M6CisgICAgICAgIHJldHVybiBAIm1pc2MiOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBAIiI7CisgICAgfQorfQorCitzdGF0aWMgU3RyaW5nIGRhdGFEZXRlY3RvclN0cmlu
Z0ZvclBhdGgoTlNJbmRleFBhdGgqIHBhdGgpCit7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBw
YXRoLmxlbmd0aDsKKyAgICAKKyAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMDoKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICAKKyAgICBjYXNlIDE6CisgICAgICAgIHJl
dHVybiBTdHJpbmc6OmZvcm1hdCgiJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3BhdGggaW5kZXhBdFBv
c2l0aW9uOjBdKTsKKyAgICAgICAgCisgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmb3JtYXQoIiVsdS8lbHUiLCAodW5zaWduZWQgbG9uZylbcGF0aCBpbmRleEF0UG9zaXRpb246
MF0sICh1bnNpZ25lZCBsb25nKVtwYXRoIGluZGV4QXRQb3NpdGlvbjoxXSk7CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyBjb21wb25lbnRzU3Ry
aW5nID0gU3RyaW5nOjpmb3JtYXQoIiVsdSIsICh1bnNpZ25lZCBsb25nKVtwYXRoIGluZGV4QXRQ
b3NpdGlvbjowXSk7CisgICAgICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDEgOyBpIDwgbGVu
Z3RoIDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29tcG9uZW50c1N0cmluZy5hcHBlbmQoIi8i
KTsKKyAgICAgICAgICAgICAgICBjb21wb25lbnRzU3RyaW5nLmFwcGVuZChTdHJpbmc6OmZvcm1h
dCgiJWx1IiwgKHVuc2lnbmVkIGxvbmcpW3BhdGggaW5kZXhBdFBvc2l0aW9uOmldKSk7CisgICAg
ICAgICAgICB9CiAKLXZvaWQgRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVm
UHRyPFJhbmdlPiYsIERhdGFEZXRlY3RvclR5cGVzKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBv
bmVudHNTdHJpbmc7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGJ1aWxkUXVl
cnkoRERTY2FuUXVlcnlSZWYgc2NhblF1ZXJ5LCBSYW5nZSogY29udGV4dFJhbmdlKQogeworICAg
IC8vIE9uY2Ugd2UncmUgb3ZlciB0aGlzIG51bWJlciBvZiBmcmFnbWVudHMsIHN0b3AgYXQgdGhl
IGZpcnN0IGhhcmQgYnJlYWsuCisgICAgY29uc3QgQ0ZJbmRleCBtYXhGcmFnbWVudFdpdGhIYXJk
QnJlYWsgPSAxMDAwOworICAgIC8vIE9uY2Ugd2UncmUgb3ZlciB0aGlzIG51bWJlciBvZiBmcmFn
bWVudHMsIHdlIHN0b3AgYXQgdGhlIGxpbmUuCisgICAgY29uc3QgQ0ZJbmRleCBtYXhGcmFnbWVu
dFdpdGhMaW5lYnJlYWsgPSA1MDAwOworICAgIC8vIE9uY2Ugd2UncmUgb3ZlciB0aGlzIG51bWJl
ciBvZiBmcmFnbWVudHMsIHdlIHN0b3AgYXQgdGhlIHNwYWNlLgorICAgIGNvbnN0IENGSW5kZXgg
bWF4RnJhZ21lbnRTcGFjZSA9IDEwMDAwOworCisgICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgd2hpdGVT
cGFjZXNTZXQgPSBDRkNoYXJhY3RlclNldEdldFByZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0V2hp
dGVzcGFjZUFuZE5ld2xpbmUpOworICAgIENGQ2hhcmFjdGVyU2V0UmVmIG5ld0xpbmVzU2V0ID0g
Q0ZDaGFyYWN0ZXJTZXRHZXRQcmVkZWZpbmVkKGtDRkNoYXJhY3RlclNldE5ld2xpbmUpOworICAg
IAorICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2U7CisgICAgQ0ZJbmRleCBpdGVyYXRvckNvdW50
ID0gMDsKKyAgICBDRkluZGV4IGZyYWdtZW50Q291bnQgPSAwOworICAgIAorICAgIC8vIEJ1aWxk
IHRoZSBzY2FuIHF1ZXJ5IGFkZGluZyBzZXBhcmF0b3JzLgorICAgIC8vIEZvciBlYWNoIGZyYWdt
ZW50IHRoZSBpdGVyYXRvciBpbmNyZW1lbnQgaXMgc3RvcmVkIGFzIG1ldGFkYXRhLgorICAgIGZv
ciAoVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKGNvbnRleHRSYW5nZSk7ICFpdGVyYXRvci5hdEVuZCgp
OyBpdGVyYXRvci5hZHZhbmNlKCksIGl0ZXJhdG9yQ291bnQrKykgeworICAgICAgICBzaXplX3Qg
Y3VycmVudFRleHRMZW5ndGggPSBpdGVyYXRvci50ZXh0KCkubGVuZ3RoKCk7CisgICAgICAgIGlm
ICghY3VycmVudFRleHRMZW5ndGgpIHsKKyAgICAgICAgICAgIEREU2NhblF1ZXJ5QWRkU2VwYXJh
dG9yKHNjYW5RdWVyeSwgRERUZXh0Q29hbGVzY2luZ1R5cGVIYXJkQnJlYWspOworICAgICAgICAg
ICAgaWYgKGl0ZXJhdG9yQ291bnQgPiBtYXhGcmFnbWVudFdpdGhIYXJkQnJlYWspCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBUZXN0IGZvciB3aGl0ZSBzcGFjZSBub2Rlcywgd2UncmUgY29hbGVzY2luZyB0aGVtLgor
ICAgICAgICBjb25zdCBVbmlDaGFyICpjdXJyZW50Q2hhclB0ciA9IGl0ZXJhdG9yLnRleHQoKS51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgY29udGFpbnNP
bmx5V2hpdGVTcGFjZSA9IHRydWU7CisgICAgICAgIGJvb2wgaGFzVGFiID0gZmFsc2U7CisgICAg
ICAgIGJvb2wgaGFzTmV3bGluZSA9IGZhbHNlOworICAgICAgICBpbnQgbmJzcENvdW50ID0gMDsK
KyAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY3VycmVudFRleHRMZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgaWYgKCFDRkNoYXJhY3RlclNldElzQ2hhcmFjdGVyTWVtYmVyKHdo
aXRlU3BhY2VzU2V0LCAqY3VycmVudENoYXJQdHIpKSB7CisgICAgICAgICAgICAgICAgY29udGFp
bnNPbmx5V2hpdGVTcGFjZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoQ0ZDaGFyYWN0ZXJTZXRJc0No
YXJhY3Rlck1lbWJlcihuZXdMaW5lc1NldCwgKmN1cnJlbnRDaGFyUHRyKSkKKyAgICAgICAgICAg
ICAgICBoYXNOZXdsaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCpjdXJyZW50Q2hh
clB0ciA9PSAnXHQnKQorICAgICAgICAgICAgICAgIGhhc1RhYiA9IHRydWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIE11bHRpcGxlIGNvbnNlY3V0aXZlIG5vbiBicmVha2FibGUgc3Bh
Y2VzIGFyZSBtb3N0IGxpa2VseSBzaW11bGF0ZWQgdGFicy4KKyAgICAgICAgICAgIGlmICgqY3Vy
cmVudENoYXJQdHIgPT0gMHhhMCkgeworICAgICAgICAgICAgICAgIGlmICgrK25ic3BDb3VudCA+
IDIpCisgICAgICAgICAgICAgICAgICAgIGhhc1RhYiA9IHRydWU7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBuYnNwQ291bnQgPSAwOworCisgICAgICAgICAgICBjdXJyZW50
Q2hhclB0cisrOworICAgICAgICB9CisgICAgICAgIGlmIChjb250YWluc09ubHlXaGl0ZVNwYWNl
KSB7CisgICAgICAgICAgICBpZiAoaGFzTmV3bGluZSkgeworICAgICAgICAgICAgICAgIEREU2Nh
blF1ZXJ5QWRkTGluZUJyZWFrKHNjYW5RdWVyeSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXJh
dG9yQ291bnQgPiBtYXhGcmFnbWVudFdpdGhMaW5lYnJlYWspCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBERFNjYW5RdWVy
eUFkZFNlcGFyYXRvcihzY2FuUXVlcnksIGhhc1RhYiA/IEREVGV4dENvYWxlc2NpbmdUeXBlVGFi
IDogRERUZXh0Q29hbGVzY2luZ1R5cGVTcGFjZSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXJh
dG9yQ291bnQgPiBtYXhGcmFnbWVudFNwYWNlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGN1cnJlbnRUZXh0ID0gYWRvcHRDRihD
RlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKGtDRkFsbG9jYXRvckRlZmF1bHQsIGl0ZXJhdG9y
LnRleHQoKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKSwgaXRlcmF0b3IudGV4dCgpLmxlbmd0aCgp
KSk7CisgICAgICAgIEREU2NhblF1ZXJ5QWRkVGV4dEZyYWdtZW50KHNjYW5RdWVyeSwgY3VycmVu
dFRleHQuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIGN1cnJlbnRUZXh0TGVuZ3RoKSwgKHZvaWQgKilp
dGVyYXRvckNvdW50LCAoRERUZXh0RnJhZ21lbnRNb2RlKTAsIEREVGV4dENvYWxlc2NpbmdUeXBl
Tm9uZSk7CisgICAgICAgIGZyYWdtZW50Q291bnQrKzsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxp
bmUgQ0ZDb21wYXJpc29uUmVzdWx0IHF1ZXJ5T2Zmc2V0Q29tcGFyZShERFF1ZXJ5T2Zmc2V0IG8x
LCBERFF1ZXJ5T2Zmc2V0IG8yKQoreworICAgIGlmIChvMS5xdWVyeUluZGV4IDwgbzIucXVlcnlJ
bmRleCkKKyAgICAgICAgcmV0dXJuIGtDRkNvbXBhcmVMZXNzVGhhbjsKKyAgICBpZiAobzEucXVl
cnlJbmRleCA+IG8yLnF1ZXJ5SW5kZXgpCisgICAgICAgIHJldHVybiBrQ0ZDb21wYXJlR3JlYXRl
clRoYW47CisgICAgaWYgKG8xLm9mZnNldCA8IG8yLm9mZnNldCkKKyAgICAgICAgcmV0dXJuIGtD
RkNvbXBhcmVMZXNzVGhhbjsKKyAgICBpZiAobzEub2Zmc2V0ID4gbzIub2Zmc2V0KQorICAgICAg
ICByZXR1cm4ga0NGQ29tcGFyZUdyZWF0ZXJUaGFuOworICAgIHJldHVybiBrQ0ZDb21wYXJlRXF1
YWxUbzsKK30KKworTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2Uo
UmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGV0ZWN0b3JUeXBlcyB0eXBlcykKK3sK
KyAgICBSZXRhaW5QdHI8RERTY2FubmVyUmVmPiBzY2FubmVyID0gYWRvcHRDRihERFNjYW5uZXJD
cmVhdGUoRERTY2FubmVyVHlwZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7CisgICAgUmV0YWluUHRy
PEREU2NhblF1ZXJ5UmVmPiBzY2FuUXVlcnkgPSBhZG9wdENGKEREU2NhblF1ZXJ5Q3JlYXRlKE5V
TEwpKTsKKyAgICBidWlsZFF1ZXJ5KHNjYW5RdWVyeS5nZXQoKSwgY29udGV4dFJhbmdlLmdldCgp
KTsKKyAgICAKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFkZCBhIHRpbWVvdXQgdG8gdGhpcyBj
YWxsIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IHRha2UgdG9vIG11Y2ggdGltZS4KKyAgICBpZiAo
IUREU2Nhbm5lclNjYW5RdWVyeShzY2FubmVyLmdldCgpLCBzY2FuUXVlcnkuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBzY2FubmVy
UmVzdWx0cyA9IGFkb3B0Q0YoRERTY2FubmVyQ29weVJlc3VsdHNXaXRoT3B0aW9ucyhzY2FubmVy
LmdldCgpLCBnZXRERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNGb3JQYXNzaXZlVXNlKCkgfCBE
RFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNDb2FsZXNjZVNpZ25hdHVyZXMpKTsKKyAgICBpZiAo
IXNjYW5uZXJSZXN1bHRzKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIENGSW5kZXgg
cmVzdWx0Q291bnQgPSBDRkFycmF5R2V0Q291bnQoc2Nhbm5lclJlc3VsdHMuZ2V0KCkpOworICAg
IGlmICghcmVzdWx0Q291bnQpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgVmVjdG9y
PFJldGFpblB0cjxERFJlc3VsdFJlZj4+IGFsbFJlc3VsdHM7CisgICAgVmVjdG9yPFJldGFpblB0
cjxOU0luZGV4UGF0aD4+IGluZGV4UGF0aHM7CisgICAgTlNJbnRlZ2VyIGN1cnJlbnRUb3BMZXZl
bEluZGV4ID0gMDsKKworICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2Nhbm5lciByZXN1bHRz
IHRvIGZpbmQgc2lnbmF0dXJlcyBhbmQgZXh0cmFjdCBhbGwgdGhlIHN1YnJlc3VsdHMgd2hpbGUK
KyAgICAvLyBwb3B1bGF0aW5nIHRoZSBhcnJheSBvZiBpbmRleCBwYXRocyB0byB1c2UgaW4gdGhl
IGhyZWYgb2YgdGhlIGFuY2hvcnMgYmVpbmcgY3JlYXRlZC4KKyAgICBmb3IgKGlkIHJlc3VsdE9i
amVjdCBpbiAoTlNBcnJheSAqKXNjYW5uZXJSZXN1bHRzLmdldCgpKSB7CisgICAgICAgIEREUmVz
dWx0UmVmIHJlc3VsdCA9IChERFJlc3VsdFJlZilyZXN1bHRPYmplY3Q7CisgICAgICAgIE5TSW5k
ZXhQYXRoICppbmRleFBhdGggPSBbTlNJbmRleFBhdGggaW5kZXhQYXRoV2l0aEluZGV4OmN1cnJl
bnRUb3BMZXZlbEluZGV4XTsKKyAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZShERFJlc3VsdEdl
dFR5cGUocmVzdWx0KSwgZ2V0RERCaW5kZXJTaWduYXR1cmVCbG9ja0tleSgpLCAwKSA9PSBrQ0ZD
b21wYXJlRXF1YWxUbykgeworICAgICAgICAgICAgTlNBcnJheSAqc3VicmVzdWx0cyA9IChOU0Fy
cmF5ICopRERSZXN1bHRHZXRTdWJSZXN1bHRzKHJlc3VsdCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAoTlNVSW50ZWdlciBzdWJSZXN1bHRJbmRleCA9IDAgOyBzdWJSZXN1bHRJbmRl
eCA8IFtzdWJyZXN1bHRzIGNvdW50XSA7IHN1YlJlc3VsdEluZGV4KyspIHsKKyAgICAgICAgICAg
ICAgICBpbmRleFBhdGhzLmFwcGVuZChbaW5kZXhQYXRoIGluZGV4UGF0aEJ5QWRkaW5nSW5kZXg6
c3ViUmVzdWx0SW5kZXhdKTsKKyAgICAgICAgICAgICAgICBhbGxSZXN1bHRzLmFwcGVuZCgoRERS
ZXN1bHRSZWYpW3N1YnJlc3VsdHMgb2JqZWN0QXRJbmRleDpzdWJSZXN1bHRJbmRleF0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWxsUmVzdWx0cy5hcHBl
bmQocmVzdWx0KTsKKyAgICAgICAgICAgIGluZGV4UGF0aHMuYXBwZW5kKGluZGV4UGF0aCk7Cisg
ICAgICAgIH0KKyAgICAgICAgY3VycmVudFRvcExldmVsSW5kZXgrKzsKKyAgICB9CisKKyAgICBW
ZWN0b3I8VmVjdG9yPFJlZlB0cjxSYW5nZT4+PiBhbGxSZXN1bHRSYW5nZXM7CisgICAgVGV4dEl0
ZXJhdG9yIGl0ZXJhdG9yKGNvbnRleHRSYW5nZS5nZXQoKSk7CisgICAgQ0ZJbmRleCBpdGVyYXRv
ckNvdW50ID0gMDsKKworICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkgb2YgdGhlIGV4
cGFuZGVkIHJlc3VsdHMgdG8gY3JlYXRlIGEgdmVjdG9yIG9mIFJhbmdlIG9iamVjdHMgdGhhdCBp
bmRpY2F0ZQorICAgIC8vIHdoZXJlIHRoZSBET00gbmVlZHMgdG8gYmUgbW9kaWZpZWQuCisgICAg
Ly8gRWFjaCByZXN1bHQgY2FuIGJlIGNvbnRhaW5lZCBhbGwgaW4gb25lIHRleHQgbm9kZSBvciBj
YW4gc3BhbiBtdWx0aXBsZSB0ZXh0IG5vZGVzLgorICAgIGZvciAoYXV0byYgcmVzdWx0IDogYWxs
UmVzdWx0cykgeworICAgICAgICBERFF1ZXJ5UmFuZ2UgcXVlcnlSYW5nZSA9IEREUmVzdWx0R2V0
UXVlcnlSYW5nZUZvclVSTGlmaWNhdGlvbihyZXN1bHQuZ2V0KCkpOworICAgICAgICBDRkluZGV4
IGl0ZXJhdG9yVGFyZ2V0QWR2YW5jZUNvdW50ID0gKENGSW5kZXgpRERTY2FuUXVlcnlHZXRGcmFn
bWVudE1ldGFEYXRhKHNjYW5RdWVyeS5nZXQoKSwgcXVlcnlSYW5nZS5zdGFydC5xdWVyeUluZGV4
KTsKKyAgICAgICAgd2hpbGUgKGl0ZXJhdG9yQ291bnQgPCBpdGVyYXRvclRhcmdldEFkdmFuY2VD
b3VudCkgeworICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAgICAgICAgaXRl
cmF0b3JDb3VudCsrOworICAgICAgICB9CisKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+
IGZyYWdtZW50UmFuZ2VzOworICAgICAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRSYW5nZSA9IGl0
ZXJhdG9yLnJhbmdlKCk7CisgICAgICAgIENGSW5kZXggZnJhZ21lbnRJbmRleCA9IHF1ZXJ5UmFu
Z2Uuc3RhcnQucXVlcnlJbmRleDsKKyAgICAgICAgaWYgKGZyYWdtZW50SW5kZXggPT0gcXVlcnlS
YW5nZS5lbmQucXVlcnlJbmRleCkKKyAgICAgICAgICAgIGZyYWdtZW50UmFuZ2VzLmFwcGVuZChU
ZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGN1cnJlbnRSYW5nZS5nZXQoKSwgcXVlcnlSYW5nZS5zdGFy
dC5vZmZzZXQsIHF1ZXJ5UmFuZ2UuZW5kLm9mZnNldCAtIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZyYWdtZW50UmFuZ2VzLmFwcGVuZChjdXJy
ZW50UmFuZ2UpOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKGZyYWdtZW50SW5kZXggPCBxdWVy
eVJhbmdlLmVuZC5xdWVyeUluZGV4KSB7CisgICAgICAgICAgICBmcmFnbWVudEluZGV4Kys7Cisg
ICAgICAgICAgICBpdGVyYXRvclRhcmdldEFkdmFuY2VDb3VudCA9IChDRkluZGV4KUREU2NhblF1
ZXJ5R2V0RnJhZ21lbnRNZXRhRGF0YShzY2FuUXVlcnkuZ2V0KCksIGZyYWdtZW50SW5kZXgpOwor
ICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdG9yQ291bnQgPCBpdGVyYXRvclRhcmdldEFkdmFuY2VD
b3VudCkgeworICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgICAg
ICAgICBpdGVyYXRvckNvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50
UmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOworICAgICAgICAgICAgZnJhZ21lbnRSYW5nZXMuYXBw
ZW5kKGN1cnJlbnRSYW5nZSk7CisgICAgICAgIH0KKyAgICAgICAgYWxsUmVzdWx0UmFuZ2VzLmFw
cGVuZChmcmFnbWVudFJhbmdlcyk7CisgICAgfQorICAgIAorICAgIENGVGltZVpvbmVSZWYgdHog
PSBDRlRpbWVab25lQ29weURlZmF1bHQoKTsKKyAgICBOU0RhdGUgKnJlZmVyZW5jZURhdGUgPSBb
TlNEYXRlIGRhdGVdOworICAgIFRleHQqIGxhc3RUZXh0Tm9kZVRvVXBkYXRlID0gbnVsbHB0cjsK
KyAgICBTdHJpbmcgbGFzdE5vZGVDb250ZW50OworICAgIHNpemVfdCBjb250ZW50T2Zmc2V0ID0g
MDsKKyAgICBERFF1ZXJ5T2Zmc2V0IGxhc3RNb2RpZmllZFF1ZXJ5T2Zmc2V0ID0gey0xLCAwfTsK
KyAgICAKKyAgICAvLyBGb3IgZWFjaCByZXN1bHQgYWRkIHRoZSBsaW5rLgorICAgIC8vIFNpbmNl
IHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIHJlc3VsdHMgaW4gdGhlIHNhbWUgdGV4dCBub2RlLCB0
aGUgbm9kZSBpcyBvbmx5IG1vZGlmaWVkIHdoZW4KKyAgICAvLyB3ZSBhcmUgYWJvdXQgdG8gcHJv
Y2VzcyBhIGRpZmZlcmVudCB0ZXh0IG5vZGUuCisgICAgcmVzdWx0Q291bnQgPSBhbGxSZXN1bHRz
LnNpemUoKTsKKyAgICAKKyAgICBmb3IgKENGSW5kZXggcmVzdWx0SW5kZXggPSAwOyByZXN1bHRJ
bmRleCA8IHJlc3VsdENvdW50OyByZXN1bHRJbmRleCsrKSB7CisgICAgICAgIEREUmVzdWx0UmVm
IGNvcmVSZXN1bHQgPSBhbGxSZXN1bHRzW3Jlc3VsdEluZGV4XS5nZXQoKTsKKyAgICAgICAgRERR
dWVyeVJhbmdlIHF1ZXJ5UmFuZ2UgPSBERFJlc3VsdEdldFF1ZXJ5UmFuZ2VGb3JVUkxpZmljYXRp
b24oY29yZVJlc3VsdCk7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiByZXN1bHRSYW5n
ZXMgPSBhbGxSZXN1bHRSYW5nZXNbcmVzdWx0SW5kZXhdOworCisgICAgICAgIC8vIENvbXBhcmUg
dGhlIHF1ZXJ5IG9mZnNldHMgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdvIGJhY2t3YXJkcworICAg
ICAgICBpZiAocXVlcnlPZmZzZXRDb21wYXJlKGxhc3RNb2RpZmllZFF1ZXJ5T2Zmc2V0LCBxdWVy
eVJhbmdlLnN0YXJ0KSA+PSAwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg
KCFyZXN1bHRSYW5nZXMuc2l6ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
TlNTdHJpbmcgKmlkZW50aWZpZXIgPSBkYXRhRGV0ZWN0b3JTdHJpbmdGb3JQYXRoKGluZGV4UGF0
aHNbcmVzdWx0SW5kZXhdLmdldCgpKTsKKyAgICAgICAgTlNTdHJpbmcgKmNvcnJlc3BvbmRpbmdV
UkwgPSBjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoY29yZVJlc3VsdCwgaWRlbnRpZmllciwg
cmVmZXJlbmNlRGF0ZSwgKE5TVGltZVpvbmUgKil0eiwgdHlwZXMpOworICAgICAgICAKKyAgICAg
ICAgaWYgKCFjb3JyZXNwb25kaW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5n
RERMaW5rcygmcmVzdWx0UmFuZ2VzLmZpcnN0KCktPnN0YXJ0Q29udGFpbmVyKCksICZyZXN1bHRS
YW5nZXMubGFzdCgpLT5lbmRDb250YWluZXIoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisgICAgICAgIGxhc3RNb2RpZmllZFF1ZXJ5T2Zmc2V0ID0gcXVlcnlSYW5nZS5lbmQ7
CisKKyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IHJlc3VsdFJhbmdlcykgeworICAgICAgICAg
ICAgTm9kZSogcGFyZW50Tm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpLnBhcmVudE5vZGUo
KTsKKyAgICAgICAgICAgIFRleHQmIGN1cnJlbnRUZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KHJh
bmdlLT5zdGFydENvbnRhaW5lcigpKTsKKyAgICAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9
IGN1cnJlbnRUZXh0Tm9kZS5kb2N1bWVudCgpOworICAgICAgICAgICAgU3RyaW5nIHRleHROb2Rl
RGF0YTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGxhc3RUZXh0Tm9kZVRvVXBkYXRl
ICE9ICZjdXJyZW50VGV4dE5vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdFRleHROb2Rl
VG9VcGRhdGUpCisgICAgICAgICAgICAgICAgICAgIGxhc3RUZXh0Tm9kZVRvVXBkYXRlLT5zZXRE
YXRhKGxhc3ROb2RlQ29udGVudCk7CisgICAgICAgICAgICAgICAgY29udGVudE9mZnNldCA9IDA7
CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLT5zdGFydE9mZnNldCgpID4gMCkKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLnN1YnN0cmluZ0RhdGEo
MCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2Rl
LnN1YnN0cmluZ0RhdGEoY29udGVudE9mZnNldCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgLSBjb250
ZW50T2Zmc2V0LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCF0ZXh0Tm9kZURhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgUmVmUHRy
PE5vZGU+IG5ld05vZGUgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIHRleHROb2RlRGF0YSk7Cisg
ICAgICAgICAgICAgICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsICZjdXJyZW50
VGV4dE5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgICAgIGNvbnRlbnRP
ZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhY3R1YWwgYW5jaG9yIG5vZGUgYW5kIGluc2Vy
dCBpdCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgICAgICAgIHRleHROb2RlRGF0YSA9
IGN1cnJlbnRUZXh0Tm9kZS5zdWJzdHJpbmdEYXRhKHJhbmdlLT5zdGFydE9mZnNldCgpLCByYW5n
ZS0+ZW5kT2Zmc2V0KCkgLSByYW5nZS0+c3RhcnRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElP
Tik7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1
bWVudCwgdGV4dE5vZGVEYXRhKTsKKyAgICAgICAgICAgIHBhcmVudE5vZGUtPmluc2VydEJlZm9y
ZShuZXdOb2RlLCAmY3VycmVudFRleHROb2RlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgUmVmUHRyPEhUTUxBbmNob3JFbGVtZW50PiBhbmNob3JFbGVt
ZW50ID0gSFRNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgICAgICAgICBh
bmNob3JFbGVtZW50LT5zZXRIcmVmKGNvcnJlc3BvbmRpbmdVUkwpOworICAgICAgICAgICAgYW5j
aG9yRWxlbWVudC0+c2V0RGlyKCJsdHIiKTsKKyAgICAgICAgICAgIFJlZlB0cjxBdHRyPiBjb2xv
ciA9IGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudE5vZGUpLT5nZXRBdHRyaWJ1dGVOb2RlKCJjb2xv
ciIpOworICAgICAgICAgICAgaWYgKGNvbG9yKQorICAgICAgICAgICAgICAgIGFuY2hvckVsZW1l
bnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0ciwgY29sb3ItPnN0eWxlKCktPmNz
c1RleHQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPk5vZGU6
OmFwcGVuZENoaWxkKG5ld05vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAg
cGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKGFuY2hvckVsZW1lbnQsICZjdXJyZW50VGV4dE5vZGUs
IEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgLy8gQWRkIGEgc3BlY2lhbCBhdHRy
aWJ1dGUgdG8gbWFyayB0aGlzIFVSTGlmaWNhdGlvbiBhcyB0aGUgcmVzdWx0IG9mIGRhdGEgZGV0
ZWN0b3JzLgorICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRlKFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sIGRhdGFEZXRlY3RvcnNVUkxTY2hlbWUsIG51bGxBdG9tKSwgInRydWUi
KTsKKyAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCBkYXRhRGV0ZWN0b3JzQXR0cmlidXRlVHlwZUtleSwgbnVsbEF0b20pLCBkYXRh
RGV0ZWN0b3JUeXBlRm9yQ2F0ZWdvcnkoRERSZXN1bHRHZXRDYXRlZ29yeShjb3JlUmVzdWx0KSkp
OworICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRlKFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sIGRhdGFEZXRlY3RvcnNBdHRyaWJ1dGVSZXN1bHRLZXksIG51bGxBdG9tKSwgaWRl
bnRpZmllcik7CisgICAgICAgICAgICBjb250ZW50T2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBsYXN0Tm9kZUNvbnRlbnQgPSBjdXJyZW50VGV4
dE5vZGUuc3Vic3RyaW5nRGF0YShyYW5nZS0+ZW5kT2Zmc2V0KCksIGN1cnJlbnRUZXh0Tm9kZS5s
ZW5ndGgoKSAtIHJhbmdlLT5lbmRPZmZzZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAg
ICAgICAgICBsYXN0VGV4dE5vZGVUb1VwZGF0ZSA9ICZjdXJyZW50VGV4dE5vZGU7CisgICAgICAg
IH0gICAgICAgIAorICAgIH0KKyAgICBpZiAobGFzdFRleHROb2RlVG9VcGRhdGUpCisgICAgICAg
IGxhc3RUZXh0Tm9kZVRvVXBkYXRlLT5zZXREYXRhKGxhc3ROb2RlQ29udGVudCk7CisgICAgCisg
ICAgcmV0dXJuIFtnZXRERFNjYW5uZXJSZXN1bHRDbGFzcygpIHJlc3VsdHNGcm9tQ29yZVJlc3Vs
dHM6c2Nhbm5lclJlc3VsdHMuZ2V0KCldOwogfQogCisjZWxzZQorTlNBcnJheSAqRGF0YURldGVj
dGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYsIERhdGFEZXRlY3RvclR5
cGVzKQoreworICAgIHJldHVybiBuaWw7Cit9CisjZW5kaWYKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMTk1
NDYxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjI3OSwxNCArMjI3OSwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja0xvYWRD
b21wbGV0ZUZvclRoCiAgICAgICAgICAgICAgICAgbV9jbGllbnQuZGlzcGF0Y2hEaWRGYWlsTG9h
ZChlcnJvcik7CiAgICAgICAgICAgICAgICAgbG9hZGluZ0V2ZW50ID0gQVhPYmplY3RDYWNoZTo6
QVhMb2FkaW5nRmFpbGVkOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBt
X2NsaWVudC5kaXNwYXRjaERpZEZpbmlzaExvYWQoKTsKLSAgICAgICAgICAgICAgICBsb2FkaW5n
RXZlbnQgPSBBWE9iamVjdENhY2hlOjpBWExvYWRpbmdGaW5pc2hlZDsKICNpZiBFTkFCTEUoREFU
QV9ERVRFQ1RJT04pCiAgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5kYXRh
RGV0ZWN0b3JUeXBlcygpICE9IERhdGFEZXRlY3RvclR5cGVOb25lKSB7CiAgICAgICAgICAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gZG9jdW1lbnRSYW5nZSA9IG1ha2VSYW5nZShmaXJzdFBvc2l0
aW9uSW5Ob2RlKG1fZnJhbWUuZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpLCBsYXN0UG9z
aXRpb25Jbk5vZGUobV9mcmFtZS5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkpOwotICAg
ICAgICAgICAgICAgICAgICBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShkb2N1
bWVudFJhbmdlLCBtX2ZyYW1lLnNldHRpbmdzKCkuZGF0YURldGVjdG9yVHlwZXMoKSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWUuc2V0RGF0YURldGVjdGlvblJlc3VsdHMoRGF0YURldGVj
dGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoZG9jdW1lbnRSYW5nZSwgbV9mcmFtZS5zZXR0aW5n
cygpLmRhdGFEZXRlY3RvclR5cGVzKCkpKTsKICAgICAgICAgICAgICAgICB9CiAjZW5kaWYKKyAg
ICAgICAgICAgICAgICBtX2NsaWVudC5kaXNwYXRjaERpZEZpbmlzaExvYWQoKTsKKyAgICAgICAg
ICAgICAgICBsb2FkaW5nRXZlbnQgPSBBWE9iamVjdENhY2hlOjpBWExvYWRpbmdGaW5pc2hlZDsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gTm90aWZ5IGFjY2Vzc2liaWxpdHkuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiAxOTU0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMyBAQAogI2luY2x1ZGUg
IkZyYW1lV2luLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorT0JKQ19DTEFTUyBO
U0FycmF5OworI2VuZGlmCisKICNpZiBQTEFURk9STShJT1MpCiBPQkpDX0NMQVNTIERPTUNTU1N0
eWxlRGVjbGFyYXRpb247CiBPQkpDX0NMQVNTIERPTU5vZGU7Ci1PQkpDX0NMQVNTIE5TQXJyYXk7
CiBPQkpDX0NMQVNTIE5TU3RyaW5nOwogI2VuZGlmCiAKQEAgLTE4NSw2ICsxODgsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBmcmFtZVNjYWxl
RmFjdG9yKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNo
YW5nZWQoKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICB2
b2lkIHNldERhdGFEZXRlY3Rpb25SZXN1bHRzKE5TQXJyYXkgKnJlc3VsdHMpIHsgbV9kYXRhRGV0
ZWN0aW9uUmVzdWx0cyA9IHJlc3VsdHM7IH0KKyAgICAgICAgTlNBcnJheSAqZGF0YURldGVjdGlv
blJlc3VsdHMoKSBjb25zdCB7IHJldHVybiBtX2RhdGFEZXRlY3Rpb25SZXN1bHRzLmdldCgpOyB9
CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgY29uc3QgVmlld3BvcnRBcmd1
bWVudHMmIHZpZXdwb3J0QXJndW1lbnRzKCkgY29uc3Q7CkBAIC0yOTIsNiArMzAwLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRIYW5k
bGVyPiBtX2V2ZW50SGFuZGxlcjsKICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEFuaW1h
dGlvbkNvbnRyb2xsZXI+IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKIAorI2lmIEVOQUJMRShEQVRB
X0RFVEVDVElPTikKKyAgICAgICAgUmV0YWluUHRyPE5TQXJyYXk+IG1fZGF0YURldGVjdGlvblJl
c3VsdHM7CisjZW5kaWYKICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgIHZvaWQgYmV0dGVyQXBw
cm94aW1hdGVOb2RlKGNvbnN0IEludFBvaW50JiB0ZXN0UG9pbnQsIE5vZGVRdWFsaWZpZXIsIE5v
ZGUqJiBiZXN0LCBOb2RlKiBmYWlsZWROb2RlLCBJbnRQb2ludCYgYmVzdFBvaW50LCBJbnRSZWN0
JiBiZXN0UmVjdCwgY29uc3QgSW50UmVjdCYgdGVzdFJlY3QpOwogICAgICAgICBib29sIGhpdFRl
c3RSZXN1bHRBdFZpZXdwb3J0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgdmlld3BvcnRMb2Nh
dGlvbiwgSGl0VGVzdFJlc3VsdCYsIEludFBvaW50JiBjZW50ZXIpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL0RhdGFEZXRlY3RvcnNDb3JlU1BJLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL0RhdGFEZXRlY3RvcnNDb3Jl
U1BJLmgJKHJldmlzaW9uIDE5NTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9j
b2NvYS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMCArMjMs
MTYgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW1wb3J0
ICJTb2Z0TGlua2luZy5oIgorCiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIAorI2ltcG9y
dCA8RGF0YURldGVjdG9yc0NvcmUvRERCaW5kZXJLZXlzX1ByaXZhdGUuaD4KKyNpbXBvcnQgPERh
dGFEZXRlY3RvcnNDb3JlL0REU2Nhbm5lclJlc3VsdC5oPgogI2ltcG9ydCA8RGF0YURldGVjdG9y
c0NvcmUvRGF0YURldGVjdG9yc0NvcmUuaD4KLQorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQg
PERhdGFEZXRlY3RvcnNDb3JlL0REVVJMaWZpZXIuaD4KKyNlbmRpZgogI2Vsc2UgLy8gIVVTRShB
UFBMRV9JTlRFUk5BTF9TREspCiAKIHR5cGVkZWYgZW51bSB7CkBAIC0zOCw3ICs0NCw2NCBAQCB0
eXBlZGVmIGVudW0gewogZW51bSB7CiAgICAgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zTm9u
ZSA9IDAsCiAgICAgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zTm9PdmVybGFwID0gMSA8PCAw
LAorICAgIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc0NvYWxlc2NlU2lnbmF0dXJlcyA9IDEg
PDwgMSwKK307CisKK2VudW0geworICAgIEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvbk5v
bmUgPSAwLAorICAgIEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvblJlZ3VsYXIgPSAxIDw8
IDEsCisgICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uUXVvdGVkU2hvcnRzID0gMSA8
PCAyLAorICAgIEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvblVucXVvdGVkU2hvcnRzID0g
MSA8PCAzCiB9OwordHlwZWRlZiBOU1VJbnRlZ2VyIEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVj
dGlvblR5cGVzOworCit0eXBlZGVmIGVudW0gX19ERFRleHRDb2FsZXNjaW5nVHlwZSB7CisgICAg
RERUZXh0Q29hbGVzY2luZ1R5cGVOb25lID0gMCwKKyAgICBERFRleHRDb2FsZXNjaW5nVHlwZVNw
YWNlID0gMSwKKyAgICBERFRleHRDb2FsZXNjaW5nVHlwZVRhYiA9IDIsCisgICAgRERUZXh0Q29h
bGVzY2luZ1R5cGVMaW5lQnJlYWsgPSAzLAorICAgIEREVGV4dENvYWxlc2NpbmdUeXBlSGFyZEJy
ZWFrID0gNCwKK30gRERUZXh0Q29hbGVzY2luZ1R5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgICAg
RERSZXN1bHRDYXRlZ29yeVVua25vd24gPSAwLAorICAgIEREUmVzdWx0Q2F0ZWdvcnlMaW5rID0g
MSwKKyAgICBERFJlc3VsdENhdGVnb3J5UGhvbmVOdW1iZXIgPSAyLAorICAgIEREUmVzdWx0Q2F0
ZWdvcnlBZGRyZXNzID0gMywKKyAgICBERFJlc3VsdENhdGVnb3J5Q2FsZW5kYXJFdmVudCA9IDQs
CisgICAgRERSZXN1bHRDYXRlZ29yeU1pc2MgPSA1LAorfSBERFJlc3VsdENhdGVnb3J5OworCit0
eXBlZGVmIGVudW0gX19ERFRleHRGcmFnbWVudFR5cGUgeworICAgIEREVGV4dEZyYWdtZW50VHlw
ZVRyaW1XaGl0ZVNwYWNlID0gIDB4MSwKKyAgICBERFRleHRGcmFnbWVudFR5cGVJZ25vcmVDUkxG
ID0gIDB4MiwKK30gRERUZXh0RnJhZ21lbnRNb2RlOworCitleHRlcm4gQ0ZTdHJpbmdSZWYgY29u
c3QgRERCaW5kZXJIdHRwVVJMS2V5OworZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVy
V2ViVVJMS2V5OworZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0IEREQmluZGVyTWFpbFVSTEtleTsK
K2V4dGVybiBDRlN0cmluZ1JlZiBjb25zdCBEREJpbmRlckdlbmVyaWNVUkxLZXk7CitleHRlcm4g
Q0ZTdHJpbmdSZWYgY29uc3QgRERCaW5kZXJFbWFpbEtleTsKK2V4dGVybiBDRlN0cmluZ1JlZiBj
b25zdCBEREJpbmRlclRyYWNraW5nTnVtYmVyS2V5OworZXh0ZXJuIENGU3RyaW5nUmVmIGNvbnN0
IEREQmluZGVyRmxpZ2h0SW5mb3JtYXRpb25LZXk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgY29uc3Qg
RERCaW5kZXJTaWduYXR1cmVCbG9ja0tleTsKK2V4dGVybiBOU1N0cmluZyAqIGNvbnN0IEREVVJM
U2NoZW1lOworCitAaW50ZXJmYWNlIEREU2Nhbm5lclJlc3VsdCA6IE5TT2JqZWN0IDxOU0NvZGlu
ZywgTlNTZWN1cmVDb2Rpbmc+CisrIChOU0FycmF5ICopcmVzdWx0c0Zyb21Db3JlUmVzdWx0czoo
Q0ZBcnJheVJlZiljb3JlUmVzdWx0czsKK0BlbmQKKworI2RlZmluZSBERFJlc3VsdFByb3BlcnR5
UGFzc2l2ZURpc3BsYXkgICAoMSA8PCAwKQorCit0eXBlZGVmIHN0cnVjdCBfX0REUXVlcnlPZmZz
ZXQgeworICAgIENGSW5kZXggcXVlcnlJbmRleDsKKyAgICBDRkluZGV4IG9mZnNldDsKK30gRERR
dWVyeU9mZnNldDsKKwordHlwZWRlZiBzdHJ1Y3QgX19ERFF1ZXJ5UmFuZ2UgeworICAgIEREUXVl
cnlPZmZzZXQgc3RhcnQ7CisgICAgRERRdWVyeU9mZnNldCBlbmQ7Cit9IEREUXVlcnlSYW5nZTsK
IAogI2VuZGlmIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCkBAIC00OCwxMyArMTExLDU2
IEBAIHR5cGVkZWYgc3RydWN0IF9fRERTY2FubmVyICpERFNjYW5uZXJSZWYKIAogdHlwZWRlZiBD
RkluZGV4IEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uczsKIHR5cGVkZWYgQ0ZJbmRleCBERFNj
YW5uZXJPcHRpb25zOworZXh0ZXJuIGNvbnN0IEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9ucyBE
RFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNGb3JQYXNzaXZlVXNlOwogCiBleHRlcm4gIkMiIHsK
IAogRERTY2FubmVyUmVmIEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlLCBERFNjYW5uZXJP
cHRpb25zLCBDRkVycm9yUmVmKik7CitERFNjYW5RdWVyeVJlZiBERFNjYW5RdWVyeUNyZWF0ZShD
RkFsbG9jYXRvclJlZik7CiBERFNjYW5RdWVyeVJlZiBERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJp
bmcoQ0ZBbGxvY2F0b3JSZWYsIENGU3RyaW5nUmVmLCBDRlJhbmdlKTsKIEJvb2xlYW4gRERTY2Fu
bmVyU2NhblF1ZXJ5KEREU2Nhbm5lclJlZiwgRERTY2FuUXVlcnlSZWYpOwogQ0ZBcnJheVJlZiBE
RFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKEREU2Nhbm5lclJlZiwgRERTY2FubmVyQ29w
eVJlc3VsdHNPcHRpb25zKTsKIENGUmFuZ2UgRERSZXN1bHRHZXRSYW5nZShERFJlc3VsdFJlZik7
CitDRlN0cmluZ1JlZiBERFJlc3VsdEdldFR5cGUoRERSZXN1bHRSZWYpOworRERSZXN1bHRDYXRl
Z29yeSBERFJlc3VsdEdldENhdGVnb3J5KEREUmVzdWx0UmVmKTsKK0Jvb2xlYW4gRERSZXN1bHRJ
c1Bhc3REYXRlKEREUmVzdWx0UmVmLCBDRkRhdGVSZWYgcmVmZXJlbmNlRGF0ZSwgQ0ZUaW1lWm9u
ZVJlZiByZWZlcmVuY2VUaW1lWm9uZSk7Cit2b2lkIEREU2NhblF1ZXJ5QWRkVGV4dEZyYWdtZW50
KEREU2NhblF1ZXJ5UmVmLCBDRlN0cmluZ1JlZiwgQ0ZSYW5nZSwgdm9pZCAqaWRlbnRpZmllciwg
RERUZXh0RnJhZ21lbnRNb2RlLCBERFRleHRDb2FsZXNjaW5nVHlwZSk7Cit2b2lkIEREU2NhblF1
ZXJ5QWRkU2VwYXJhdG9yKEREU2NhblF1ZXJ5UmVmLCBERFRleHRDb2FsZXNjaW5nVHlwZSk7Cit2
b2lkIEREU2NhblF1ZXJ5QWRkTGluZUJyZWFrKEREU2NhblF1ZXJ5UmVmKTsKK3ZvaWQgKkREU2Nh
blF1ZXJ5R2V0RnJhZ21lbnRNZXRhRGF0YShERFNjYW5RdWVyeVJlZiwgQ0ZJbmRleCBxdWVyeUlu
ZGV4KTsKK2Jvb2wgRERSZXN1bHRIYXNQcm9wZXJ0aWVzKEREUmVzdWx0UmVmLCBDRkluZGV4IHBy
b3BlcnR5U2V0KTsKK0NGQXJyYXlSZWYgRERSZXN1bHRHZXRTdWJSZXN1bHRzKEREUmVzdWx0UmVm
KTsKK0REUXVlcnlSYW5nZSBERFJlc3VsdEdldFF1ZXJ5UmFuZ2VGb3JVUkxpZmljYXRpb24oRERS
ZXN1bHRSZWYpOworCisjaWYgUExBVEZPUk0oSU9TKQorU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVX
T1JLX09QVElPTkFMKERhdGFEZXRlY3RvcnNDb3JlKQorU09GVF9MSU5LX0NMQVNTKERhdGFEZXRl
Y3RvcnNDb3JlLCBERFNjYW5uZXJSZXN1bHQpCitTT0ZUX0xJTksoRGF0YURldGVjdG9yc0NvcmUs
IEREU2Nhbm5lckNyZWF0ZSwgRERTY2FubmVyUmVmLCAoRERTY2FubmVyVHlwZSB0eXBlLCBERFNj
YW5uZXJPcHRpb25zIG9wdGlvbnMsIENGRXJyb3JSZWYgKiBlcnJvclJlZiksICh0eXBlLCBvcHRp
b25zLCBlcnJvclJlZikpCitTT0ZUX0xJTksoRGF0YURldGVjdG9yc0NvcmUsIEREU2Nhbm5lclNj
YW5RdWVyeSwgQm9vbGVhbiwgKEREU2Nhbm5lclJlZiBzY2FubmVyLCBERFNjYW5RdWVyeVJlZiBx
dWVyeSksIChzY2FubmVyLCBxdWVyeSkpCitTT0ZUX0xJTksoRGF0YURldGVjdG9yc0NvcmUsIERE
U2NhblF1ZXJ5Q3JlYXRlLCBERFNjYW5RdWVyeVJlZiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRv
ciksIChhbGxvY2F0b3IpKQorU09GVF9MSU5LKERhdGFEZXRlY3RvcnNDb3JlLCBERFNjYW5uZXJD
b3B5UmVzdWx0c1dpdGhPcHRpb25zLCBDRkFycmF5UmVmLCAoRERTY2FubmVyUmVmIHNjYW5uZXIs
IEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9ucyBvcHRpb25zKSwgKHNjYW5uZXIsIG9wdGlvbnMp
KQorU09GVF9MSU5LKERhdGFEZXRlY3RvcnNDb3JlLCBERFJlc3VsdEdldFJhbmdlLCBDRlJhbmdl
LCAoRERSZXN1bHRSZWYgcmVzdWx0KSwgKHJlc3VsdCkpCitTT0ZUX0xJTksoRGF0YURldGVjdG9y
c0NvcmUsIEREUmVzdWx0R2V0VHlwZSwgQ0ZTdHJpbmdSZWYsIChERFJlc3VsdFJlZiByZXN1bHQp
LCAocmVzdWx0KSkKK1NPRlRfTElOSyhEYXRhRGV0ZWN0b3JzQ29yZSwgRERSZXN1bHRHZXRDYXRl
Z29yeSwgRERSZXN1bHRDYXRlZ29yeSwgKEREUmVzdWx0UmVmIHJlc3VsdCksIChyZXN1bHQpKQor
U09GVF9MSU5LKERhdGFEZXRlY3RvcnNDb3JlLCBERFJlc3VsdElzUGFzdERhdGUsIEJvb2xlYW4s
IChERFJlc3VsdFJlZiByZXN1bHQsIENGRGF0ZVJlZiByZWZlcmVuY2VEYXRlLCBDRlRpbWVab25l
UmVmIHJlZmVyZW5jZVRpbWVab25lKSwgKHJlc3VsdCwgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNl
VGltZVpvbmUpKQorU09GVF9MSU5LKERhdGFEZXRlY3RvcnNDb3JlLCBERFNjYW5RdWVyeUFkZFRl
eHRGcmFnbWVudCwgdm9pZCwgKEREU2NhblF1ZXJ5UmVmIHF1ZXJ5LCBDRlN0cmluZ1JlZiBmcmFn
bWVudCwgQ0ZSYW5nZSByYW5nZSwgdm9pZCAqaWRlbnRpZmllciwgRERUZXh0RnJhZ21lbnRNb2Rl
IG1vZGUsIEREVGV4dENvYWxlc2NpbmdUeXBlIHR5cGUpLCAocXVlcnksIGZyYWdtZW50LCByYW5n
ZSwgaWRlbnRpZmllciwgbW9kZSwgdHlwZSkpCitTT0ZUX0xJTksoRGF0YURldGVjdG9yc0NvcmUs
IEREU2NhblF1ZXJ5QWRkU2VwYXJhdG9yLCB2b2lkLCAoRERTY2FuUXVlcnlSZWYgcXVlcnksIERE
VGV4dENvYWxlc2NpbmdUeXBlIHR5cGUpLCAocXVlcnksIHR5cGUpKQorU09GVF9MSU5LKERhdGFE
ZXRlY3RvcnNDb3JlLCBERFNjYW5RdWVyeUFkZExpbmVCcmVhaywgdm9pZCwgKEREU2NhblF1ZXJ5
UmVmIHF1ZXJ5KSwgKHF1ZXJ5KSkKK1NPRlRfTElOSyhEYXRhRGV0ZWN0b3JzQ29yZSwgRERTY2Fu
UXVlcnlHZXRGcmFnbWVudE1ldGFEYXRhLCB2b2lkICosIChERFNjYW5RdWVyeVJlZiBxdWVyeSwg
Q0ZJbmRleCBxdWVyeUluZGV4KSwgKHF1ZXJ5LCBxdWVyeUluZGV4KSkKK1NPRlRfTElOSyhEYXRh
RGV0ZWN0b3JzQ29yZSwgRERSZXN1bHRIYXNQcm9wZXJ0aWVzLCBib29sLCAoRERSZXN1bHRSZWYg
cmVzdWx0LCBDRkluZGV4IHByb3BlcnR5U2V0KSwgKHJlc3VsdCwgcHJvcGVydHlTZXQpKQorU09G
VF9MSU5LKERhdGFEZXRlY3RvcnNDb3JlLCBERFJlc3VsdEdldFN1YlJlc3VsdHMsIENGQXJyYXlS
ZWYsIChERFJlc3VsdFJlZiByZXN1bHQpLCAocmVzdWx0KSkKK1NPRlRfTElOSyhEYXRhRGV0ZWN0
b3JzQ29yZSwgRERSZXN1bHRHZXRRdWVyeVJhbmdlRm9yVVJMaWZpY2F0aW9uLCBERFF1ZXJ5UmFu
Z2UsIChERFJlc3VsdFJlZiByZXN1bHQpLCAocmVzdWx0KSkKK1NPRlRfTElOSyhEYXRhRGV0ZWN0
b3JzQ29yZSwgRERVUkxTdHJpbmdGb3JSZXN1bHQsIE5TU3RyaW5nICosIChERFJlc3VsdFJlZiBj
dXJyZW50UmVzdWx0LCBOU1N0cmluZyAqIHJlc3VsdElkZW50aWZpZXIsIEREVVJMaWZpZXJQaG9u
ZU51bWJlckRldGVjdGlvblR5cGVzIGluY2x1ZGluZ1RlbEdyb3VwcywgTlNEYXRlICogcmVmZXJl
bmNlRGF0ZSwgTlNUaW1lWm9uZSAqIHJlZmVyZW5jZVRpbWVab25lKSwgKGN1cnJlbnRSZXN1bHQs
IHJlc3VsdElkZW50aWZpZXIsIGluY2x1ZGluZ1RlbEdyb3VwcywgcmVmZXJlbmNlRGF0ZSwgcmVm
ZXJlbmNlVGltZVpvbmUpKQorU09GVF9MSU5LX1BPSU5URVIoRGF0YURldGVjdG9yc0NvcmUsIERE
QmluZGVySHR0cFVSTEtleSwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfUE9JTlRFUihEYXRhRGV0
ZWN0b3JzQ29yZSwgRERCaW5kZXJXZWJVUkxLZXksIENGU3RyaW5nUmVmKQorU09GVF9MSU5LX1BP
SU5URVIoRGF0YURldGVjdG9yc0NvcmUsIEREQmluZGVyTWFpbFVSTEtleSwgQ0ZTdHJpbmdSZWYp
CitTT0ZUX0xJTktfUE9JTlRFUihEYXRhRGV0ZWN0b3JzQ29yZSwgRERCaW5kZXJHZW5lcmljVVJM
S2V5LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19QT0lOVEVSKERhdGFEZXRlY3RvcnNDb3JlLCBE
REJpbmRlckVtYWlsS2V5LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19QT0lOVEVSKERhdGFEZXRl
Y3RvcnNDb3JlLCBEREJpbmRlclRyYWNraW5nTnVtYmVyS2V5LCBDRlN0cmluZ1JlZikKK1NPRlRf
TElOS19QT0lOVEVSKERhdGFEZXRlY3RvcnNDb3JlLCBEREJpbmRlckZsaWdodEluZm9ybWF0aW9u
S2V5LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19QT0lOVEVSKERhdGFEZXRlY3RvcnNDb3JlLCBE
REJpbmRlclNpZ25hdHVyZUJsb2NrS2V5LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19QT0lOVEVS
KERhdGFEZXRlY3RvcnNDb3JlLCBERFVSTFNjaGVtZSwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19D
T05TVEFOVChEYXRhRGV0ZWN0b3JzQ29yZSwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zRm9y
UGFzc2l2ZVVzZSwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zKQorI2VuZGlmCiAKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTQ2MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTAxLTIyICBFbnJpY2EgQ2Fz
dWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERhdGFE
ZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoZnJvbVdLRGF0YURldGVjdG9yVHlw
ZXMpOiBDaGFuZ2VkIHBhcmFtZXRlciB0byB1aW50NjRfdCB0bworICAgICAgICBzdWNjZXNzZnVs
bHkgY29tcGFyZSBhZ2FpbnN0IFdLRGF0YURldGVjdG9yVHlwZUFsbC4KKwogMjAxNi0wMS0yMiAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVkdWNlIHVzZSBvZiBl
cXVhbElnbm9yaW5nQ2FzZSB0byBqdXN0IGlnbm9yZSBBU0NJSSBjYXNlCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNpb24g
MTk1NDYxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTMxNSw3ICszMTUsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRB
bGxvd1BpY3R1cmVJblBpY3R1cmVNCiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElP
TikKLXN0YXRpYyBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlcyBmcm9tV0tEYXRhRGV0ZWN0b3JU
eXBlcyh1aW50MzJfdCB0eXBlcykKK3N0YXRpYyBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlcyBm
cm9tV0tEYXRhRGV0ZWN0b3JUeXBlcyh1aW50NjRfdCB0eXBlcykKIHsKICAgICBpZiAoc3RhdGlj
X2Nhc3Q8V0tEYXRhRGV0ZWN0b3JUeXBlcz4odHlwZXMpID09IFdLRGF0YURldGVjdG9yVHlwZU5v
bmUpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlTm9uZTsK
</data>
<flag name="review"
          id="294513"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269629</attachid>
            <date>2016-01-22 18:15:13 -0800</date>
            <delta_ts>2016-01-22 18:34:02 -0800</delta_ts>
            <desc>Part 3</desc>
            <filename>ddwk2-part3.txt</filename>
            <type>text/plain</type>
            <size>35237</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTQ5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE2LTAxLTIyICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcg
bmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGRhdGEgZGV0ZWN0aW9uIHJlbGF0ZWQgdGFza3MuCisK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaDoKKyAgICAgICAgKiBlZGl0
aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0
aW9uOjppc0RhdGFEZXRlY3RvckxpbmspOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlv
bjo6ZGF0YURldGVjdG9ySWRlbnRpZmllcik6CisKIDIwMTYtMDEtMjIgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE1vZGVybiBJREI6IEltcGxlbWVudCBwdXQs
IGdldCwgYW5kIGRlbGV0ZSByZWNvcmRzIGZvciB0aGUgU1FMaXRlIGJhY2tlbmQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAkocmV2aXNpb24g
MTk1NDk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxNCBAQAogCiAjaW1wb3J0IDx3dGYvUmVmUHRy
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogT0JKQ19DTEFTUyBEREFjdGlvbkNvbnRleHQ7CiBPQkpDX0NMQVNTIE5TQXJyYXk7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZsb2F0UmVj
dDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBSYW5nZTsKQEAgLTU1LDYgKzU3LDggQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250
ZXh0PiBkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0Jiwg
RmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0
ZWREYXRhUmFuZ2UpOwogI2VuZGlmCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE5TQXJyYXkg
KmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURl
dGVjdG9yVHlwZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGlzRGF0YURldGVj
dG9yTGluayhFbGVtZW50Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBkYXRh
RGV0ZWN0b3JJZGVudGlmaWVyKEVsZW1lbnQqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24u
bW0JKHJldmlzaW9uIDE5NTQ5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0
YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsMTQgKzQ0LDIyIEBACiAjaW1wb3J0
ICJWaXNpYmxlVW5pdHMuaCIKICNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCiAKLSNpZiBQTEFURk9S
TShJT1MpCiBjb25zdCBjaGFyICpkYXRhRGV0ZWN0b3JzVVJMU2NoZW1lID0gIngtYXBwbGUtZGF0
YS1kZXRlY3RvcnMiOwogY29uc3QgY2hhciAqZGF0YURldGVjdG9yc0F0dHJpYnV0ZVR5cGVLZXkg
PSAieC1hcHBsZS1kYXRhLWRldGVjdG9ycy10eXBlIjsKIGNvbnN0IGNoYXIgKmRhdGFEZXRlY3Rv
cnNBdHRyaWJ1dGVSZXN1bHRLZXkgPSAieC1hcHBsZS1kYXRhLWRldGVjdG9ycy1yZXN1bHQiOwot
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorYm9vbCBEYXRhRGV0ZWN0aW9uOjppc0Rh
dGFEZXRlY3RvckxpbmsoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+
Z2V0QXR0cmlidXRlKGdldEREVVJMU2NoZW1lKCkpID09ICJ0cnVlIjsKK30KKworU3RyaW5nIERh
dGFEZXRlY3Rpb246OmRhdGFEZXRlY3RvcklkZW50aWZpZXIoRWxlbWVudCogZWxlbWVudCkKK3sK
KyAgICByZXR1cm4gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGRhdGFEZXRlY3RvcnNBdHRyaWJ1dGVS
ZXN1bHRLZXkpOworfQorCiAjaWYgUExBVEZPUk0oTUFDKQogCiBzdGF0aWMgUmV0YWluUHRyPERE
QWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uLCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZSwgRmxvYXRSZWN0JiBkZXRl
Y3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCkBA
IC0xNDQsNyArMTUyLDcgQEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVjdGlv
bgogICAgIHJldHVybiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwgY29u
dGV4dFJhbmdlLCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2UpOwog
fQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLSAgICAKKwogI2lmIFBMQVRGT1JNKElPUykKICAg
ICAKIHN0YXRpYyBCT09MIHJlc3VsdElzVVJMKEREUmVzdWx0UmVmIHJlc3VsdCkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE5NTQ5OSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE2LTAxLTIyICBFbnJpY2EgQ2FzdWNjaSAg
PGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERhdGFEZXRlY3Rv
cnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZpbmcgSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb24gZmlsZXMgdG8gcGxhdGZvcm0gZm9sZGVyLAorICAgICAg
ICBzaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCBvbiBpT1MgYW5kIGNoYW5naW5nIGZyb20gLmNwcCB0
byAubW0uCisgICAgICAgIFRoZSBzdHJ1Y3R1cmUgaXMgZXh0ZW5kZWQgdG8gaW5jbHVkZSBkYXRh
IGRldGVjdGlvbiBzcGVjaWZpYyBmaWVsZHMKKyAgICAgICAgYW5kIHRoZSByZWxldmFudCBlbmNv
ZGUvZGVjb2RlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gdXBkYXRlZCB0bworICAgICAgICBoYW5kbGUg
dGhlIG5ldyBmaWVsZHMuCisgICAgICAgIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBuZXcgV0tVSURl
bGVnYXRlUHJpdmF0ZSBtZXRob2QgdG8gYWxsb3cKKyAgICAgICAgdGhlIGNsaWVudCB0byBwcm92
aWRlIGFkZGl0aW9uYWwgY29udGV4dCBmb3IgZGF0YSBkZXRlY3Rpb24gYWN0aW9ucy4KKworICAg
ICAgICAqIFNoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmg6
IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24uaC4KKyAgICAgICAgKiBTaGFyZWQvaW9zL0ludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwLgorICAgICAgICAoV2ViS2l0
OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZW5jb2RlKToKKyAgICAgICAgKFdl
YktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmRlY29kZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tOgorICAgICAgICAoLVtXS0FjdGlvblNo
ZWV0QXNzaXN0YW50IHNob3dMaW5rU2hlZXRdKToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFz
c2lzdGFudCBzaG93RGF0YURldGVjdG9yc1NoZWV0Ol0pOgorICAgICAgICAoLVtXS0FjdGlvblNo
ZWV0QXNzaXN0YW50IHNob3dEYXRhRGV0ZWN0b3JzU2hlZXRdKTogRGVsZXRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBfc2hvd0RhdGFEZXRlY3RvcnNTaGVldF0pOgorICAgICAgICAoLVtXS0Nv
bnRlbnRWaWV3IF9hY3Rpb25Gb3JMb25nUHJlc3NdKToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9y
bWF0aW9uKToKKwogMjAxNi0wMS0yMiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBEYXRhRGV0ZWN0b3JzIGluIFdLIChpT1MpLgpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwCShyZXZpc2lvbiAxOTU0OTUpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgiCi0KLSNpbmNs
dWRlICJBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLSNpZiBQTEFURk9STShJT1MpCi12b2lkIEludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBwb2ludDsKLSAgICBlbmNvZGVyIDw8IG5vZGVB
dFBvc2l0aW9uSXNBc3Npc3RlZE5vZGU7Ci0gICAgZW5jb2RlciA8PCBpc1NlbGVjdGFibGU7Ci0g
ICAgZW5jb2RlciA8PCBpc05lYXJNYXJrZWRUZXh0OwotICAgIGVuY29kZXIgPDwgdG91Y2hDYWxs
b3V0RW5hYmxlZDsKLSAgICBlbmNvZGVyIDw8IGlzTGluazsKLSAgICBlbmNvZGVyIDw8IGlzSW1h
Z2U7Ci0gICAgZW5jb2RlciA8PCBpc0FuaW1hdGVkSW1hZ2U7Ci0gICAgZW5jb2RlciA8PCBpc0Ns
aWNrYWJsZUVsZW1lbnQ7Ci0gICAgZW5jb2RlciA8PCB1cmw7Ci0gICAgZW5jb2RlciA8PCBpbWFn
ZVVSTDsKLSAgICBlbmNvZGVyIDw8IHRpdGxlOwotICAgIGVuY29kZXIgPDwgYm91bmRzOwotICAg
IGVuY29kZXIgPDwgbGlua0luZGljYXRvcjsKLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
IGhhbmRsZTsKLSAgICBpZiAoaW1hZ2UpCi0gICAgICAgIGltYWdlLT5jcmVhdGVIYW5kbGUoaGFu
ZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLSAgICBlbmNvZGVyIDw8
IGhhbmRsZTsKLX0KLQotYm9vbCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZGVj
b2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbiYgcmVzdWx0KQotewotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnBv
aW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQubm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzU2VsZWN0YWJsZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzTmVh
ck1hcmtlZFRleHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC50b3VjaENhbGxvdXRFbmFibGVkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNMaW5rKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNJbWFnZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmlz
QW5pbWF0ZWRJbWFnZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5pc0NsaWNrYWJsZUVsZW1lbnQpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51cmwpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pbWFnZVVSTCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LnRpdGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuYm91bmRzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQubGlua0luZGljYXRvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghaGFuZGxl
LmlzTnVsbCgpKQotICAgICAgICByZXN1bHQuaW1hZ2UgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQotfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0lu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgJKHJldmlzaW9u
IDE5NTQ5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uX2gKLSNkZWZpbmUgSW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb25faAotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0j
aW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZWxlY3Rp
b25SZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdHJ1Y3QgSW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gewotICAgIFdlYkNvcmU6OkludFBvaW50IHBv
aW50OwotICAgIGJvb2wgbm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBpc1NlbGVjdGFibGUgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNOZWFyTWFya2VkVGV4
dCB7IGZhbHNlIH07Ci0gICAgYm9vbCB0b3VjaENhbGxvdXRFbmFibGVkIHsgdHJ1ZSB9OwotICAg
IGJvb2wgaXNMaW5rIHsgZmFsc2UgfTsKLSAgICBib29sIGlzSW1hZ2UgeyBmYWxzZSB9OwotICAg
IGJvb2wgaXNBbmltYXRlZEltYWdlIHsgZmFsc2UgfTsKLSAgICBib29sIGlzQ2xpY2thYmxlRWxl
bWVudCB7IGZhbHNlIH07Ci0gICAgU3RyaW5nIHVybDsKLSAgICBTdHJpbmcgaW1hZ2VVUkw7Ci0g
ICAgU3RyaW5nIHRpdGxlOwotICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRzOwotICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IGltYWdlOwotCi0gICAgV2ViQ29yZTo6VGV4dEluZGljYXRvckRh
dGEgbGlua0luZGljYXRvcjsKLQotICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVy
JikgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwg
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKLX07Ci0KLX0KLQotI2VuZGlmIC8v
IFBMQVRGT1JNKElPUykKLQotI2VuZGlmIC8vIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1h
dGlvbkF0UG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9z
L0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgJKHJldmlzaW9uIDE5NTMxNikJKGZy
b20gU291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
Lmg6MTk1MzE2KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9y
bWF0aW9uQXRQb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uX2gKKyNkZWZp
bmUgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb25faAorCisjaWYgUExBVEZPUk0oSU9T
KQorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRt
YXAuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
ZWxlY3Rpb25SZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1
Y3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24geworICAgIFdlYkNvcmU6OkludFBv
aW50IHBvaW50OworICAgIGJvb2wgbm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSB7IGZhbHNl
IH07CisgICAgYm9vbCBpc1NlbGVjdGFibGUgeyBmYWxzZSB9OworICAgIGJvb2wgaXNOZWFyTWFy
a2VkVGV4dCB7IGZhbHNlIH07CisgICAgYm9vbCB0b3VjaENhbGxvdXRFbmFibGVkIHsgdHJ1ZSB9
OworICAgIGJvb2wgaXNMaW5rIHsgZmFsc2UgfTsKKyAgICBib29sIGlzSW1hZ2UgeyBmYWxzZSB9
OworICAgIGJvb2wgaXNBbmltYXRlZEltYWdlIHsgZmFsc2UgfTsKKyAgICBib29sIGlzQ2xpY2th
YmxlRWxlbWVudCB7IGZhbHNlIH07CisgICAgU3RyaW5nIHVybDsKKyAgICBTdHJpbmcgaW1hZ2VV
Ukw7CisgICAgU3RyaW5nIHRpdGxlOworICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRzOworICAg
IFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGltYWdlOworCisgICAgV2ViQ29yZTo6VGV4dEluZGlj
YXRvckRhdGEgbGlua0luZGljYXRvcjsKKworICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRF
bmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNv
ZGVyJiwgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKK307CisKK30KKworI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIEludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsOSBAQCBzdHJ1Y3QgSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb24gCiAgICAgYm9vbCBpc0ltYWdlIHsgZmFsc2UgfTsKICAg
ICBib29sIGlzQW5pbWF0ZWRJbWFnZSB7IGZhbHNlIH07CiAgICAgYm9vbCBpc0NsaWNrYWJsZUVs
ZW1lbnQgeyBmYWxzZSB9OworI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBib29sIGlz
RGF0YURldGVjdG9yTGluayB7IGZhbHNlIH07CisjZW5kaWYKICAgICBTdHJpbmcgdXJsOwogICAg
IFN0cmluZyBpbWFnZVVSTDsKICAgICBTdHJpbmcgdGl0bGU7CkBAIC01NCw2ICs1NywxMCBAQCBz
dHJ1Y3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gCiAgICAgUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4gaW1hZ2U7CiAKICAgICBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBsaW5r
SW5kaWNhdG9yOworI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBTdHJpbmcgZGF0YURl
dGVjdG9ySWRlbnRpZmllcjsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZGF0YURldGVjdG9yUmVz
dWx0czsKKyNlbmRpZgogCiAgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBj
b25zdDsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBJbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uLm1tCShyZXZpc2lvbiAxOTUzMTYpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHA6MTk1MzE2KQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIgorCisjaW5j
bHVkZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBJbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgcG9pbnQ7CisgICAgZW5jb2RlciA8PCBub2Rl
QXRQb3NpdGlvbklzQXNzaXN0ZWROb2RlOworICAgIGVuY29kZXIgPDwgaXNTZWxlY3RhYmxlOwor
ICAgIGVuY29kZXIgPDwgaXNOZWFyTWFya2VkVGV4dDsKKyAgICBlbmNvZGVyIDw8IHRvdWNoQ2Fs
bG91dEVuYWJsZWQ7CisgICAgZW5jb2RlciA8PCBpc0xpbms7CisgICAgZW5jb2RlciA8PCBpc0lt
YWdlOworICAgIGVuY29kZXIgPDwgaXNBbmltYXRlZEltYWdlOworICAgIGVuY29kZXIgPDwgaXND
bGlja2FibGVFbGVtZW50OworICAgIGVuY29kZXIgPDwgdXJsOworICAgIGVuY29kZXIgPDwgaW1h
Z2VVUkw7CisgICAgZW5jb2RlciA8PCB0aXRsZTsKKyAgICBlbmNvZGVyIDw8IGJvdW5kczsKKyAg
ICBlbmNvZGVyIDw8IGxpbmtJbmRpY2F0b3I7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSBoYW5kbGU7CisgICAgaWYgKGltYWdlKQorICAgICAgICBpbWFnZS0+Y3JlYXRlSGFuZGxlKGhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgZW5jb2RlciA8
PCBoYW5kbGU7Cit9CisKK2Jvb2wgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmRl
Y29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24mIHJlc3VsdCkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5w
b2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0Lm5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5vZGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc1NlbGVjdGFibGUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc05l
YXJNYXJrZWRUZXh0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQudG91Y2hDYWxsb3V0RW5hYmxlZCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzTGluaykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzSW1hZ2UpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5p
c0FuaW1hdGVkSW1hZ2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQuaXNDbGlja2FibGVFbGVtZW50KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaW1hZ2VVUkwp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC50aXRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LmJvdW5kcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LmxpbmtJbmRpY2F0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShoYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWhhbmRs
ZS5pc051bGwoKSkKKyAgICAgICAgcmVzdWx0LmltYWdlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKworICAgIHJl
dHVybiB0cnVlOworfQorI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9p
b3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5t
bQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDEz
IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgi
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uLmgiCiAKLSNpbmNsdWRlICJBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKKyNpbXBvcnQgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKKyNpbXBvcnQgIkFy
Z3VtZW50cy5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0IDxX
ZWJDb3JlL0RhdGFEZXRlY3RvcnNDb3JlU1BJLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBA
IC01Myw2ICs1NSwxOSBAQCB2b2lkIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOjpl
CiAgICAgaWYgKGltYWdlKQogICAgICAgICBpbWFnZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hh
cmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CiAgICAgZW5jb2RlciA8PCBoYW5kbGU7
CisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgIGVuY29kZXIgPDwgaXNEYXRhRGV0ZWN0
b3JMaW5rOworICAgIGlmIChpc0RhdGFEZXRlY3RvckxpbmspIHsKKyAgICAgICAgZW5jb2RlciA8
PCBkYXRhRGV0ZWN0b3JJZGVudGlmaWVyOworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGF0
YT4gZGF0YSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0XSk7CisgICAgICAg
IFJldGFpblB0cjxOU0tleWVkQXJjaGl2ZXI+IGFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRB
cmNoaXZlciBhbGxvY10gaW5pdEZvcldyaXRpbmdXaXRoTXV0YWJsZURhdGE6ZGF0YS5nZXQoKV0p
OworICAgICAgICBbYXJjaGl2ZXIgc2V0UmVxdWlyZXNTZWN1cmVDb2Rpbmc6WUVTXTsKKyAgICAg
ICAgW2FyY2hpdmVyIGVuY29kZU9iamVjdDpkYXRhRGV0ZWN0b3JSZXN1bHRzLmdldCgpIGZvcktl
eTpAImRhdGFEZXRlY3RvclJlc3VsdHMiXTsKKyAgICAgICAgW2FyY2hpdmVyIGZpbmlzaEVuY29k
aW5nXTsKKyAgICAgICAgCisgICAgICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIHJlaW50ZXJwcmV0
X2Nhc3Q8Q0ZEYXRhUmVmPihkYXRhLmdldCgpKSk7ICAgICAgICAKKyAgICB9CisjZW5kaWYKIH0K
IAogYm9vbCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZGVjb2RlKElQQzo6QXJn
dW1lbnREZWNvZGVyJiBkZWNvZGVyLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYg
cmVzdWx0KQpAQCAtMTA2LDYgKzEyMSwzMCBAQCBib29sIEludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uOjpkCiAgICAgaWYgKCFoYW5kbGUuaXNOdWxsKCkpCiAgICAgICAgIHJlc3VsdC5p
bWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90
ZWN0aW9uOjpSZWFkT25seSk7CiAKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNEYXRhRGV0ZWN0b3JMaW5rKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZXN1bHQuaXNEYXRhRGV0ZWN0b3JMaW5rKSB7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRhdGFEZXRlY3RvcklkZW50aWZpZXIp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBkYXRhOworICAgICAgICBpZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIsIGRhdGEpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgUmV0YWluUHRyPE5TS2V5ZWRV
bmFyY2hpdmVyPiB1bmFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRVbmFyY2hpdmVyIGFsbG9j
XSBpbml0Rm9yUmVhZGluZ1dpdGhEYXRhOihOU0RhdGEgKilkYXRhLmdldCgpXSk7CisgICAgICAg
IFt1bmFyY2hpdmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5nOllFU107CisgICAgICAgIEB0cnkg
eworICAgICAgICAgICAgcmVzdWx0LmRhdGFEZXRlY3RvclJlc3VsdHMgPSBbdW5hcmNoaXZlciBk
ZWNvZGVPYmplY3RPZkNsYXNzZXM6W05TU2V0IHNldFdpdGhBcnJheTpAWyBbTlNBcnJheSBjbGFz
c10sIGdldEREU2Nhbm5lclJlc3VsdENsYXNzKCldXSBmb3JLZXk6QCJkYXRhRGV0ZWN0b3JSZXN1
bHRzIl07CisgICAgICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWNvZGUgTlNBcnJ5IG9mIEREU2NhblJlc3Vs
dDogJUAiLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBbdW5hcmNoaXZlciBmaW5pc2hEZWNvZGluZ107CisgICAgfQor
I2VuZGlmCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRl
LmgJKHJldmlzaW9uIDE5NTQ5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IHN0cnVjdCBVSUVkZ2VJbnNldHM7CiAtICh2b2lkKV93ZWJWaWV3RGlkRXhpdEZ1bGxzY3JlZW46
KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVZBSUxBQkxFKDEwXzExLCA4XzMpOwogCiAtICh2b2lk
KV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNo
YW5nZWQ6KENHU2l6ZSlzaXplIFdLX0FWQUlMQUJMRShXS19NQUNfVEJBLCBXS19JT1NfVEJBKTsK
LQorLSAoTlNEaWN0aW9uYXJ5ICopX2RhdGFEZXRlY3Rpb25Db250ZXh0Rm9yV2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBXS19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9TX1RCQSk7CiAj
aWYgVEFSR0VUX09TX0lQSE9ORQogLSAoQk9PTClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmll
dyBzaG91bGRJbmNsdWRlQXBwTGlua0FjdGlvbnNGb3JFbGVtZW50OihfV0tBY3RpdmF0ZWRFbGVt
ZW50SW5mbyAqKWVsZW1lbnQgV0tfQVZBSUxBQkxFKE5BLCA5XzApOwogLSAoTlNBcnJheSAqKV93
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGFjdGlvbnNGb3JFbGVtZW50OihfV0tBY3RpdmF0
ZWRFbGVtZW50SW5mbyAqKWVsZW1lbnQgZGVmYXVsdEFjdGlvbnM6KFdLX0FSUkFZKF9XS0VsZW1l
bnRBY3Rpb24gKikgKilkZWZhdWx0QWN0aW9uczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oCShyZXZpc2lvbiAx
OTU0OTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Np
c3RhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBzdHJ1Y3QgSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb247CiAtIChpZClpbml0V2l0aFZpZXc6KFVJVmlldyAqKXZp
ZXc7CiAtICh2b2lkKXNob3dMaW5rU2hlZXQ7CiAtICh2b2lkKXNob3dJbWFnZVNoZWV0OwotLSAo
dm9pZClzaG93RGF0YURldGVjdG9yc1NoZWV0OworLSAodm9pZClzaG93RGF0YURldGVjdG9yc1No
ZWV0OihOU0RpY3Rpb25hcnkgKiljb250ZXh0OwogLSAodm9pZCljbGVhbnVwU2hlZXQ7CiAtICh2
b2lkKXVwZGF0ZVNoZWV0UG9zaXRpb247CiAtIChSZXRhaW5QdHI8TlNBcnJheT4pZGVmYXVsdEFj
dGlvbnNGb3JMaW5rU2hlZXQ6KF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICopZWxlbWVudEluZm87
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3Rh
bnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0FjdGlv
blNoZWV0QXNzaXN0YW50Lm1tCShyZXZpc2lvbiAxOTU0OTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0JKHdvcmtpbmcgY29weSkKQEAg
LTQwOCw4ICs0MDgsOSBAQCAtICh2b2lkKXNob3dMaW5rU2hlZXQKICAgICAgICAgW3NlbGYgY2xl
YW51cFNoZWV0XTsKIH0KIAotLSAodm9pZClzaG93RGF0YURldGVjdG9yc1NoZWV0CistICh2b2lk
KXNob3dEYXRhRGV0ZWN0b3JzU2hlZXQ6KE5TRGljdGlvbmFyeSAqKWNvbnRleHQKIHsKKyAgICAv
LyBGSVhNRTogY29udGV4dCBpcyBzdGlsbCB1bnVzZWQgdW50aWwgd2UgYWRvcHQgdGhlIG5ldyBE
RCBjb250cm9sbGVyIGZ1bmN0aW9uLgogICAgIGF1dG8gZGVsZWdhdGUgPSBfZGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW0JKHJldmlzaW9uIDE5NTQ5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU2LDcgKzEw
NTYsMTEgQEAgLSAodm9pZClfc2hvd0xpbmtTaGVldAogCiAtICh2b2lkKV9zaG93RGF0YURldGVj
dG9yc1NoZWV0CiB7Ci0gICAgW19hY3Rpb25TaGVldEFzc2lzdGFudCBzaG93RGF0YURldGVjdG9y
c1NoZWV0XTsKKyAgICBOU0RpY3Rpb25hcnkqIGNvbnRleHQgPSBuaWw7CisgICAgaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+IHVpRGVsZWdhdGUgPSBzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRl
UHJpdmF0ZT4+KFtfd2ViVmlldyBVSURlbGVnYXRlXSk7CisgICAgaWYgKFt1aURlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2RhdGFEZXRlY3Rpb25Db250ZXh0Rm9yV2ViVmll
dzopXSkKKyAgICAgICAgY29udGV4dCA9IFt1aURlbGVnYXRlIF9kYXRhRGV0ZWN0aW9uQ29udGV4
dEZvcldlYlZpZXc6X3dlYlZpZXddOworICAgIFtfYWN0aW9uU2hlZXRBc3Npc3RhbnQgc2hvd0Rh
dGFEZXRlY3RvcnNTaGVldDpjb250ZXh0XTsKIH0KIAogLSAoU0VMKV9hY3Rpb25Gb3JMb25nUHJl
c3MKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE5NTQ5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY5NiwxMCArMTY5Niwx
MCBAQAogCQlDNTc0QTU4MTEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0QTU3RjEyRTY2
NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggKi87IH07CiAJCUM1NzRBNTgyMTJFNjY2
ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVi
b2FyZFR5cGVzLm1tICovOyB9OwogCQlDNThDREYyQTE4ODc1NDhCMDA4NzE1MzYgLyogSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM1OENERjI4MTg4NzU0OEIwMDg3MTUzNiAvKiBJbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oICovOyB9OwotCQlDNThDREYyRDE4ODc2MDlGMDA4NzE1
MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4Q0RGMkIxODg3NjA5RjAwODcxNTM2
IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcCAqLzsgfTsKLQkJQzU4Q0RG
MkUxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNThDREYyQzE4
ODc2MDlGMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCAqLzsg
fTsKIAkJQzU5QzRBNTgxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1OUM0
QTU2MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgKi87IH07
CiAJCUM1OUM0QTU5MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU5QzRBNTcx
OEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmggKi87IH07CisJCUM1
QkNFNURFMUM1MDc2NjMwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlv
bi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1QkNF
NURCMUM1MDc2MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5t
bSAqLzsgfTsKKwkJQzVCQ0U1REYxQzUwNzY2QTAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDNUJDRTVEQTFDNTA3NjFEMDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24uaCAqLzsgfTsKIAkJQzVFMUFGRTgxNkIyMEI2NzAwNkNDMUYyIC8qIFdLV2Vi
QXJjaGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzMyOURBNTE2QUNFNUE5MDAzMTZERTIgLyogV0tXZWJBcmNoaXZlLmNwcCAqLzsgfTsKIAkJ
QzVFMUFGRTkxNkIyMEI3NTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMjlEQTYxNkFDRTVBOTAwMzE2REUy
IC8qIFdLV2ViQXJjaGl2ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUM1RTFBRkVBMTZCMjBCN0IwMDZDQzFGMiAvKiBXS1dlYkFyY2hpdmVSZXNv
dXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzMyOURBOTE2QUNFNUJGMDAzMTZERTIgLyogV0tXZWJBcmNoaXZlUmVzb3VyY2UuY3BwICovOyB9
OwpAQCAtMzkzOSwxMCArMzkzOSwxMCBAQAogCQlDNTc0QTU3RjEyRTY2NjgxMDAyREZFOTggLyog
UGFzdGVib2FyZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3Rl
Ym9hcmRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTc0QTU4MDEyRTY2
NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gUGFzdGVib2FyZFR5cGVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDNThDREYyODE4ODc1NDhCMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1h
dGlvbkF0UG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQzU4Q0RGMkIxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQzU4Q0RGMkMxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1OUM0
QTU2MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1OUM0QTU3MThCODExNzQwMDdCRENC
NiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDNUJDRTVEQTFDNTA3NjFEMDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaDsgcGF0aCA9IGlvcy9JbnRlcmFjdGlvbkluZm9ybWF0
aW9uQXRQb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNUJDRTVEQjFD
NTA3NjFEMDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBJbnRlcmFjdGlvbkluZm9ybWF0
aW9uQXRQb3NpdGlvbi5tbTsgcGF0aCA9IGlvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzVGQTFFRDExOEUxMDYyMjAw
QjNGNDAyIC8qIFdLQWlyUGxheVJvdXRlUGlja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdLQWlyUGxheVJvdXRlUGlja2VyLmg7IHBhdGggPSBpb3MvZm9ybXMvV0tBaXJQ
bGF5Um91dGVQaWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzVGQTFFRDIx
OEUxMDYyMjAwQjNGNDAyIC8qIFdLQWlyUGxheVJvdXRlUGlja2VyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tBaXJQbGF5Um91dGVQaWNrZXIubW07IHBhdGgg
PSBpb3MvZm9ybXMvV0tBaXJQbGF5Um91dGVQaWNrZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUM5OEM0OEEzMUI2RkQ0QzMwMDE0NTEwMyAvKiBXZWJNZWRpYVNlc3Npb25Gb2N1
c01hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViTWVk
aWFTZXNzaW9uRm9jdXNNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQ3MzQsOCArNDczNCw2IEBACiAJCQkJMUFDNzVBMUExQjMzNjgyNzAwNTY3NDVCIC8qIEhhbmdE
ZXRlY3Rpb25EaXNhYmxlci5oICovLAogCQkJCUY2Mzg5NTRGMTMzQkVGMzgwMDg5NDFENSAvKiBI
VFRQQ29va2llQWNjZXB0UG9saWN5LmggKi8sCiAJCQkJQkNDRjZCMjMxMkM5M0U3QTAwOEY5QzM1
IC8qIEltYWdlT3B0aW9ucy5oICovLAotCQkJCUM1OENERjJCMTg4NzYwOUYwMDg3MTUzNiAvKiBJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHAgKi8sCi0JCQkJQzU4Q0RGMkMxODg3
NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggKi8sCiAJ
CQkJMUE5MkRDMTIxMkY4QkFCOTAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuY3BwICovLAog
CQkJCTFBOTJEQzEwMTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggKi8sCiAJ
CQkJMkQ1MDM2NkExQkNERTE3OTAwRTIwQkIzIC8qIE5hdGl2ZVdlYkdlc3R1cmVFdmVudC5oICov
LApAQCAtNTA5Nyw2ICs1MDk1LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUE3RTkzQ0VCMTky
NTMxQUEwMEExREM0OCAvKiBDaGlsZFByb2Nlc3NJT1MubW0gKi8sCiAJCQkJMkRBOTQ0OUQxODg0
RTRGMDAwRUQ4NkRCIC8qIEdlc3R1cmVUeXBlcy5oICovLAorCQkJCUM1QkNFNURBMUM1MDc2MUQw
MENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oICovLAorCQkJCUM1
QkNFNURCMUM1MDc2MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlv
bi5tbSAqLywKIAkJCQkyREE5NDQ5NzE4ODRFNEYwMDBFRDg2REIgLyogTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudElPUy5tbSAqLywKIAkJCQkyREE5NDQ5ODE4ODRFNEYwMDBFRDg2REIgLyogTmF0aXZl
V2ViVG91Y2hFdmVudElPUy5tbSAqLywKIAkJCQlBMTE4QTlFQzE5MDdBRDZGMDBGN0M5MkIgLyog
UXVpY2tMb29rRG9jdW1lbnREYXRhLmNwcCAqLywKQEAgLTc2NjQsNiArNzY2NCw3IEBACiAJCQkJ
QzVFMUFGRUQxNkIyMTAxNzAwNkNDMUYyIC8qIEFQSVdlYkFyY2hpdmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUM1RTFBRkVGMTZCMjEwMjkwMDZDQzFGMiAvKiBBUElXZWJBcmNoaXZlUmVzb3VyY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBNDgzMkM4MUE5QkMxM0MwMDhCNERGRSAvKiBBUElXZWJz
aXRlRGF0YVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzVCQ0U1REYxQzUwNzY2QTAwQ0RF
M0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQTM2MzVBQTFBMzE0NEEzMDBFRDYxOTcgLyogQVBJV2Vic2l0ZURhdGFTdG9yZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE2NTYzRTUxQjdBOEM1MDAwOUNGNzg3IC8qIEFQSVdpbmRvd0Zl
YXR1cmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUQ0QzE5MzFCMzlGMzMyMDBBQkMyOEUgLyog
QXBwbGljYXRpb25TdGF0ZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzc2OSw3ICs3Nzcw
LDYgQEAKIAkJCQlCQ0E4QzZCMDExRTNDMDg3MDA4MTJGQjcgLyogSW5qZWN0ZWRCdW5kbGVQYWdl
VUlDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzNFMEQxMTI0MDhFODYwMDM2MEYzRiAv
KiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE0REY3
NzEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQzU4Q0RGMkUxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNThDREYyQTE4ODc1NDhCMDA4
NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBRTQ5QTQ5MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUU0OTg3ODExRkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCkBAIC05NDk4LDcgKzk0OTgsNiBAQAogCQkJCUJDQThDNkFGMTFFM0MwODcwMDgx
MkZCNyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzMzRTBEMjEyNDA4RTg2MDAzNjBGM0YgLyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzE0REY3ODEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0
ZWRCdW5kbGVTY3JpcHRXb3JsZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDNThDREYyRDE4ODc2
MDlGMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFFNDlBNEExMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFNDk4NzkxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMDkzNzcxNEZCMTI4QzAwMTEzOEQ5IC8qIExh
eWVySG9zdGluZ0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKQEAgLTk5OTEsNiArOTk5MCw3IEBA
CiAJCQkJNTEyRjU4RjkxMkE4OEE1NDAwNjI5NTMwIC8qIFdLQ3JlZGVudGlhbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzQwNzVGNzEyNEZGMDI3MDA2OEYyMEEgLyogV0tEYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBRkY0OTAwMTgzM0RFNzgwMDlBQjE1QSAvKiBXS0RlcHJlY2F0ZWRG
dW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzVCQ0U1REUxQzUwNzY2MzAwQ0RFM0ZB
IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM0MDc1RjkxMjRGRjAyNzAwNjhGMjBBIC8qIFdLRGljdGlvbmFyeS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzAxN0QwODE2MjYwRkY0MDA3MDU0RjUgLyogV0tET01Eb2N1bWVudC5tbSBp
biBTb3VyY2VzICovLAogCQkJCUJDMDE3RDBBMTYyNjBGRjQwMDcwNTRGNSAvKiBXS0RPTUVsZW1l
bnQubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDE5NTQ5NSkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgogI2ltcG9y
dCA8Q29yZVRleHQvQ1RGb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgorI2ltcG9y
dCA8V2ViQ29yZS9EYXRhRGV0ZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RpYWdub3N0aWNM
b2dnaW5nQ2xpZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Lmg+CkBAIC0yMjAyLDYgKzIyMDMsMTMgQEAgdm9p
ZCBXZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbgogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRleHRJbmRpY2F0b3IpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5m
by5saW5rSW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwogICAgICAgICAgICAgICAg
ICAgICB9CisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICAgICAgICAgICAgICBp
bmZvLmlzRGF0YURldGVjdG9yTGluayA9IERhdGFEZXRlY3Rpb246OmlzRGF0YURldGVjdG9yTGlu
ayhlbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uaXNEYXRhRGV0ZWN0b3JM
aW5rKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmRhdGFEZXRlY3RvcklkZW50aWZp
ZXIgPSBEYXRhRGV0ZWN0aW9uOjpkYXRhRGV0ZWN0b3JJZGVudGlmaWVyKGVsZW1lbnQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaW5mby5kYXRhRGV0ZWN0b3JSZXN1bHRzID0gZWxlbWVudC0+
ZG9jdW1lbnQoKS5mcmFtZSgpLT5kYXRhRGV0ZWN0aW9uUmVzdWx0cygpOworICAgICAgICAgICAg
ICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPnJl
bmRlcmVyKCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbWFnZSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGluZm8uaXNJbWFnZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IGF1dG8mIHJlbmRlckltYWdlID0gZG93bmNhc3Q8UmVuZGVySW1hZ2U+KCooZWxlbWVudC0+cmVu
ZGVyZXIoKSkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269630</attachid>
            <date>2016-01-22 18:34:02 -0800</date>
            <delta_ts>2016-01-23 10:54:35 -0800</delta_ts>
            <desc>Part 3 with build fixes.</desc>
            <filename>ddwk2-part3.txt</filename>
            <type>text/plain</type>
            <size>37503</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTUwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE2LTAxLTIyICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcg
bmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGRhdGEgZGV0ZWN0aW9uIHJlbGF0ZWQgdGFza3MuCisK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaDoKKyAgICAgICAgKiBlZGl0
aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0
aW9uOjppc0RhdGFEZXRlY3RvckxpbmspOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlv
bjo6ZGF0YURldGVjdG9ySWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVt
QXRQb3NpdGlvbldpdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXN1bHRJc1VSTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IpOgorICAgICAgICAo
V2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9zcGkvY29jb2EvRGF0YURldGVjdG9yc0NvcmVTUEkuaDoKKwogMjAxNi0wMS0y
MCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBIVE1MRWxlbWVu
dDo6bm9kZU5hbWUgc2hvdWxkIG5vdCB1cHBlciBjYXNlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAkocmV2
aXNpb24gMTk1NDk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxNCBAQAogCiAjaW1wb3J0IDx3dGYv
UmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogT0JKQ19DTEFTUyBEREFjdGlvbkNvbnRleHQ7CiBPQkpDX0NMQVNTIE5T
QXJyYXk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZs
b2F0UmVjdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBSYW5nZTsKQEAgLTU1LDYgKzU3
LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rp
b25Db250ZXh0PiBkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVz
dWx0JiwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYg
ZGV0ZWN0ZWREYXRhUmFuZ2UpOwogI2VuZGlmCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE5T
QXJyYXkgKmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwg
RGF0YURldGVjdG9yVHlwZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGlzRGF0
YURldGVjdG9yTGluayhFbGVtZW50Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmlu
ZyBkYXRhRGV0ZWN0b3JJZGVudGlmaWVyKEVsZW1lbnQqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHJldmlzaW9uIDE5NTQ5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsMTQgKzQ0LDIyIEBACiAj
aW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKICNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCiAKLSNpZiBQ
TEFURk9STShJT1MpCiBjb25zdCBjaGFyICpkYXRhRGV0ZWN0b3JzVVJMU2NoZW1lID0gIngtYXBw
bGUtZGF0YS1kZXRlY3RvcnMiOwogY29uc3QgY2hhciAqZGF0YURldGVjdG9yc0F0dHJpYnV0ZVR5
cGVLZXkgPSAieC1hcHBsZS1kYXRhLWRldGVjdG9ycy10eXBlIjsKIGNvbnN0IGNoYXIgKmRhdGFE
ZXRlY3RvcnNBdHRyaWJ1dGVSZXN1bHRLZXkgPSAieC1hcHBsZS1kYXRhLWRldGVjdG9ycy1yZXN1
bHQiOwotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorYm9vbCBEYXRhRGV0ZWN0aW9u
Ojppc0RhdGFEZXRlY3RvckxpbmsoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxl
bWVudC0+Z2V0QXR0cmlidXRlKEREVVJMU2NoZW1lKSA9PSAidHJ1ZSI7Cit9CisKK1N0cmluZyBE
YXRhRGV0ZWN0aW9uOjpkYXRhRGV0ZWN0b3JJZGVudGlmaWVyKEVsZW1lbnQqIGVsZW1lbnQpCit7
CisgICAgcmV0dXJuIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShkYXRhRGV0ZWN0b3JzQXR0cmlidXRl
UmVzdWx0S2V5KTsKK30KKwogI2lmIFBMQVRGT1JNKE1BQykKIAogc3RhdGljIFJldGFpblB0cjxE
REFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbiwgUmVmUHRyPFJhbmdlPiBjb250ZXh0UmFuZ2UsIEZsb2F0UmVjdCYgZGV0
ZWN0ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQpA
QCAtMTQ0LDcgKzE1Miw3IEBAIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IERhdGFEZXRlY3Rp
b24KICAgICByZXR1cm4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UocG9zaXRpb24sIGNv
bnRleHRSYW5nZSwgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIGRldGVjdGVkRGF0YVJhbmdlKTsK
IH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0gICAgCisKICNpZiBQTEFURk9STShJT1MpCiAg
ICAgCiBzdGF0aWMgQk9PTCByZXN1bHRJc1VSTChERFJlc3VsdFJlZiByZXN1bHQpCkBAIC0xODks
NyArMTk3LDcgQEAgc3RhdGljIHZvaWQgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5jaG9yKAogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEJPT0wgbm9kZUlzRERBbmNo
b3IgPSBpczxIVE1MQW5jaG9yRWxlbWVudD4oKm5vZGUpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpu
b2RlKS5nZXRBdHRyaWJ1dGUoZ2V0RERVUkxTY2hlbWUoKSkgPT0gInRydWUiOworICAgIEJPT0wg
bm9kZUlzRERBbmNob3IgPSBpczxIVE1MQW5jaG9yRWxlbWVudD4oKm5vZGUpICYmIGRvd25jYXN0
PEVsZW1lbnQ+KCpub2RlKS5nZXRBdHRyaWJ1dGUoRERVUkxTY2hlbWUpID09ICJ0cnVlIjsKICAg
ICAKICAgICBSZWZQdHI8Tm9kZUxpc3Q+IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGROb2RlcygpOwog
ICAgIHVuc2lnbmVkIGNoaWxkQ291bnQgPSBjaGlsZHJlbi0+bGVuZ3RoKCk7CkBAIC0yMTgsNyAr
MjI2LDcgQEAgc3RhdGljIGJvb2wgc2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbgogICAgIE5v
ZGUgKm5vZGUgPSBzdGFydE5vZGU7CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgaWYgKGlz
PEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKLSAgICAgICAgICAgIGlmIChkb3duY2FzdDxF
bGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKGdldEREVVJMU2NoZW1lKCkpICE9ICJ0cnVlIikK
KyAgICAgICAgICAgIGlmIChkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKERE
VVJMU2NoZW1lKSAhPSAidHJ1ZSIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3Iobm9kZSwgbm9kZS0+cGFyZW50RWxl
bWVudCgpKTsKICAgICAgICAgfQpAQCAtMjI5LDcgKzIzNyw3IEBAIHN0YXRpYyBib29sIHNlYXJj
aEZvckxpbmtSZW1vdmluZ0V4aXN0aW4KICAgICAgICAgICAgIG5vZGUgPSBzdGFydE5vZGUtPnBh
cmVudE5vZGUoKTsKICAgICAgICAgICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5nZXRBdHRyaWJ1dGUoZ2V0RERVUkxTY2hlbWUo
KSkgIT0gInRydWUiKQorICAgICAgICAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4o
Km5vZGUpLmdldEF0dHJpYnV0ZShERFVSTFNjaGVtZSkgIT0gInRydWUiKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlc3Vs
dExpbmtzRnJvbUFuY2hvcihub2RlLCBub2RlLT5wYXJlbnRFbGVtZW50KCkpOwogICAgICAgICAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9EYXRhRGV0
ZWN0b3JzQ29yZVNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nw
aS9jb2NvYS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oCShyZXZpc2lvbiAxOTU0OTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvRGF0YURldGVjdG9yc0NvcmVTUEkuaAkod29y
a2luZyBjb3B5KQpAQCAtMTYxLDYgKzE2MSw4IEBAIFNPRlRfTElOS19QT0lOVEVSKERhdGFEZXRl
Y3RvcnNDb3JlLCBEREIKIFNPRlRfTElOS19QT0lOVEVSKERhdGFEZXRlY3RvcnNDb3JlLCBEREJp
bmRlclNpZ25hdHVyZUJsb2NrS2V5LCBDRlN0cmluZ1JlZikKIFNPRlRfTElOS19QT0lOVEVSKERh
dGFEZXRlY3RvcnNDb3JlLCBERFVSTFNjaGVtZSwgTlNTdHJpbmcgKikKIFNPRlRfTElOS19DT05T
VEFOVChEYXRhRGV0ZWN0b3JzQ29yZSwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zRm9yUGFz
c2l2ZVVzZSwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zKQorCisjZGVmaW5lIEREVVJMU2No
ZW1lIGdldEREVVJMU2NoZW1lKCkKICNlbmRpZgogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biAxOTU0OTkpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwzOCBAQAorMjAxNi0wMS0yMiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBEYXRhRGV0ZWN0b3JzIGluIFdLIChpT1Mp
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyOTg5
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIyODU1OTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIEludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uIGZpbGVzIHRvIHBsYXRmb3JtIGZvbGRlciwKKyAgICAgICAgc2luY2UgdGhpcyBp
cyBvbmx5IHVzZWQgb24gaU9TIGFuZCBjaGFuZ2luZyBmcm9tIC5jcHAgdG8gLm1tLgorICAgICAg
ICBUaGUgc3RydWN0dXJlIGlzIGV4dGVuZGVkIHRvIGluY2x1ZGUgZGF0YSBkZXRlY3Rpb24gc3Bl
Y2lmaWMgZmllbGRzCisgICAgICAgIGFuZCB0aGUgcmVsZXZhbnQgZW5jb2RlL2RlY29kZSBmdW5j
dGlvbnMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8KKyAgICAgICAgaGFuZGxlIHRoZSBuZXcgZmllbGRz
LgorICAgICAgICBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgbmV3IFdLVUlEZWxlZ2F0ZVByaXZhdGUg
bWV0aG9kIHRvIGFsbG93CisgICAgICAgIHRoZSBjbGllbnQgdG8gcHJvdmlkZSBhZGRpdGlvbmFs
IGNvbnRleHQgZm9yIGRhdGEgZGV0ZWN0aW9uIGFjdGlvbnMuCisKKyAgICAgICAgKiBTaGFyZWQv
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IFNoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIFNoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uLmguCisgICAgICAgICogU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbi5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcC4KKyAgICAgICAgKFdlYktpdDo6SW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb246OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OkludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOjpkZWNvZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3Mv
V0tBY3Rpb25TaGVldEFzc2lzdGFudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tBY3Rp
b25TaGVldEFzc2lzdGFudC5tbToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFzc2lzdGFudCBz
aG93TGlua1NoZWV0XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgc2hvd0Rh
dGFEZXRlY3RvcnNTaGVldDpdKToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFzc2lzdGFudCBz
aG93RGF0YURldGVjdG9yc1NoZWV0XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcg
X3Nob3dEYXRhRGV0ZWN0b3JzU2hlZXRdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfYWN0
aW9uRm9yTG9uZ1ByZXNzXSk6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UG9zaXRpb25JbmZvcm1hdGlvbik6CisKIDIw
MTYtMDEtMjIgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgRGF0YURldGVjdG9ycyBpbiBXSyAoaU9TKS4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uLmNwcAkocmV2aXNpb24gMTk1NDk1KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0lu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIgotCi0jaW5jbHVkZSAiQXJndW1lbnRz
LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi0jaWYgUExBVEZPUk0oSU9TKQotdm9pZCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbjo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewot
ICAgIGVuY29kZXIgPDwgcG9pbnQ7Ci0gICAgZW5jb2RlciA8PCBub2RlQXRQb3NpdGlvbklzQXNz
aXN0ZWROb2RlOwotICAgIGVuY29kZXIgPDwgaXNTZWxlY3RhYmxlOwotICAgIGVuY29kZXIgPDwg
aXNOZWFyTWFya2VkVGV4dDsKLSAgICBlbmNvZGVyIDw8IHRvdWNoQ2FsbG91dEVuYWJsZWQ7Ci0g
ICAgZW5jb2RlciA8PCBpc0xpbms7Ci0gICAgZW5jb2RlciA8PCBpc0ltYWdlOwotICAgIGVuY29k
ZXIgPDwgaXNBbmltYXRlZEltYWdlOwotICAgIGVuY29kZXIgPDwgaXNDbGlja2FibGVFbGVtZW50
OwotICAgIGVuY29kZXIgPDwgdXJsOwotICAgIGVuY29kZXIgPDwgaW1hZ2VVUkw7Ci0gICAgZW5j
b2RlciA8PCB0aXRsZTsKLSAgICBlbmNvZGVyIDw8IGJvdW5kczsKLSAgICBlbmNvZGVyIDw8IGxp
bmtJbmRpY2F0b3I7Ci0KLSAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAg
aWYgKGltYWdlKQotICAgICAgICBpbWFnZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVt
b3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0gICAgZW5jb2RlciA8PCBoYW5kbGU7Ci19Ci0K
LWJvb2wgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmRlY29kZShJUEM6OkFyZ3Vt
ZW50RGVjb2RlciYgZGVjb2RlciwgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mIHJl
c3VsdCkKLXsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wb2ludCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm5vZGVBdFBv
c2l0aW9uSXNBc3Npc3RlZE5vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc1NlbGVjdGFibGUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc05lYXJNYXJrZWRUZXh0KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
dG91Y2hDYWxsb3V0RW5hYmxlZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzTGluaykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzSW1hZ2UpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0FuaW1hdGVkSW1hZ2Up
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuaXNDbGlja2FibGVFbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaW1hZ2VVUkwpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50aXRsZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJvdW5k
cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LmxpbmtJbmRpY2F0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWhhbmRsZS5pc051bGwoKSkKLSAg
ICAgICAgcmVzdWx0LmltYWdlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlLCBTaGFy
ZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
I2VuZGlmCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9y
bWF0aW9uQXRQb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9J
bnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oCShyZXZpc2lvbiAxOTU0OTUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbl9oCi0jZGVmaW5lIEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uX2gKLQotI2lmIFBMQVRGT1JNKElPUykKLQotI2luY2x1ZGUgIkFyZ3Vt
ZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9JbnRQb2ludC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VsZWN0aW9uUmVjdC5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RydWN0IEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uIHsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludDsKLSAgICBib29s
IG5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5vZGUgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNTZWxl
Y3RhYmxlIHsgZmFsc2UgfTsKLSAgICBib29sIGlzTmVhck1hcmtlZFRleHQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgdG91Y2hDYWxsb3V0RW5hYmxlZCB7IHRydWUgfTsKLSAgICBib29sIGlzTGluayB7
IGZhbHNlIH07Ci0gICAgYm9vbCBpc0ltYWdlIHsgZmFsc2UgfTsKLSAgICBib29sIGlzQW5pbWF0
ZWRJbWFnZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc0NsaWNrYWJsZUVsZW1lbnQgeyBmYWxzZSB9
OwotICAgIFN0cmluZyB1cmw7Ci0gICAgU3RyaW5nIGltYWdlVVJMOwotICAgIFN0cmluZyB0aXRs
ZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kczsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBpbWFnZTsKLQotICAgIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JEYXRhIGxpbmtJbmRpY2F0
b3I7Ci0KLSAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwotICAg
IHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIEludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uJik7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1Mp
Ci0KLSNlbmRpZiAvLyBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbl9oCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbi5oCShyZXZpc2lvbiAxOTUzMTYpCShmcm9tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oOjE5NTMxNikKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbl9oCisjZGVmaW5lIEludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uX2gKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUg
IkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9JbnRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2VsZWN0aW9uUmVjdC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IEludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uIHsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludDsKKyAg
ICBib29sIG5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5vZGUgeyBmYWxzZSB9OworICAgIGJvb2wg
aXNTZWxlY3RhYmxlIHsgZmFsc2UgfTsKKyAgICBib29sIGlzTmVhck1hcmtlZFRleHQgeyBmYWxz
ZSB9OworICAgIGJvb2wgdG91Y2hDYWxsb3V0RW5hYmxlZCB7IHRydWUgfTsKKyAgICBib29sIGlz
TGluayB7IGZhbHNlIH07CisgICAgYm9vbCBpc0ltYWdlIHsgZmFsc2UgfTsKKyAgICBib29sIGlz
QW5pbWF0ZWRJbWFnZSB7IGZhbHNlIH07CisgICAgYm9vbCBpc0NsaWNrYWJsZUVsZW1lbnQgeyBm
YWxzZSB9OworICAgIFN0cmluZyB1cmw7CisgICAgU3RyaW5nIGltYWdlVVJMOworICAgIFN0cmlu
ZyB0aXRsZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kczsKKyAgICBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBpbWFnZTsKKworICAgIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JEYXRhIGxpbmtJ
bmRpY2F0b3I7CisKKyAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0
OworICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIEludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJik7Cit9OworCit9CisKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCisKKyNlbmRpZiAvLyBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbl9oCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFj
dGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDkgQEAgc3RydWN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uIAogICAgIGJvb2wgaXNJbWFnZSB7IGZhbHNlIH07CiAgICAgYm9vbCBpc0FuaW1h
dGVkSW1hZ2UgeyBmYWxzZSB9OwogICAgIGJvb2wgaXNDbGlja2FibGVFbGVtZW50IHsgZmFsc2Ug
fTsKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgYm9vbCBpc0RhdGFEZXRlY3Rvckxp
bmsgeyBmYWxzZSB9OworI2VuZGlmCiAgICAgU3RyaW5nIHVybDsKICAgICBTdHJpbmcgaW1hZ2VV
Ukw7CiAgICAgU3RyaW5nIHRpdGxlOwpAQCAtNTQsNiArNTcsMTAgQEAgc3RydWN0IEludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIAogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGlt
YWdlOwogCiAgICAgV2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEgbGlua0luZGljYXRvcjsKKyNp
ZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgU3RyaW5nIGRhdGFEZXRlY3RvcklkZW50aWZp
ZXI7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IGRhdGFEZXRlY3RvclJlc3VsdHM7CisjZW5kaWYK
IAogICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CiAgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgSW50ZXJhY3Rpb25JbmZvcm1h
dGlvbkF0UG9zaXRpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbQkocmV2aXNp
b24gMTk1MzE2KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZvcm1h
dGlvbkF0UG9zaXRpb24uY3BwOjE5NTMxNikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3Mv
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50
cy5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb246OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sK
KyAgICBlbmNvZGVyIDw8IHBvaW50OworICAgIGVuY29kZXIgPDwgbm9kZUF0UG9zaXRpb25Jc0Fz
c2lzdGVkTm9kZTsKKyAgICBlbmNvZGVyIDw8IGlzU2VsZWN0YWJsZTsKKyAgICBlbmNvZGVyIDw8
IGlzTmVhck1hcmtlZFRleHQ7CisgICAgZW5jb2RlciA8PCB0b3VjaENhbGxvdXRFbmFibGVkOwor
ICAgIGVuY29kZXIgPDwgaXNMaW5rOworICAgIGVuY29kZXIgPDwgaXNJbWFnZTsKKyAgICBlbmNv
ZGVyIDw8IGlzQW5pbWF0ZWRJbWFnZTsKKyAgICBlbmNvZGVyIDw8IGlzQ2xpY2thYmxlRWxlbWVu
dDsKKyAgICBlbmNvZGVyIDw8IHVybDsKKyAgICBlbmNvZGVyIDw8IGltYWdlVVJMOworICAgIGVu
Y29kZXIgPDwgdGl0bGU7CisgICAgZW5jb2RlciA8PCBib3VuZHM7CisgICAgZW5jb2RlciA8PCBs
aW5rSW5kaWNhdG9yOworCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAg
IGlmIChpbWFnZSkKKyAgICAgICAgaW1hZ2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1l
bW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgIGVuY29kZXIgPDwgaGFuZGxlOworfQor
Citib29sIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOjpkZWNvZGUoSVBDOjpBcmd1
bWVudERlY29kZXImIGRlY29kZXIsIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJiBy
ZXN1bHQpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucG9pbnQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ub2RlQXRQ
b3NpdGlvbklzQXNzaXN0ZWROb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNTZWxlY3RhYmxlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNOZWFyTWFya2VkVGV4dCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LnRvdWNoQ2FsbG91dEVuYWJsZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0xpbmspKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0ltYWdlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNBbmltYXRlZEltYWdl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LmlzQ2xpY2thYmxlRWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmltYWdlVVJMKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudGl0bGUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ib3Vu
ZHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5saW5rSW5kaWNhdG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFuZGxl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFoYW5kbGUuaXNOdWxsKCkpCisg
ICAgICAgIHJlc3VsdC5pbWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSwgU2hh
cmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KyNlbmRpZgorCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0ludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0JKHdvcmtpbmcgY29w
eSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywxMyBAQAogICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIgorI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIgogCi0j
aW5jbHVkZSAiQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgi
CisjaW1wb3J0ICJBcmd1bWVudENvZGVyc0NGLmgiCisjaW1wb3J0ICJBcmd1bWVudHMuaCIKKyNp
bXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2ltcG9ydCA8V2ViQ29yZS9EYXRhRGV0
ZWN0b3JzQ29yZVNQSS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNTMsNiArNTUsMTkg
QEAgdm9pZCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZQogICAgIGlmIChpbWFn
ZSkKICAgICAgICAgaW1hZ2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJv
dGVjdGlvbjo6UmVhZE9ubHkpOwogICAgIGVuY29kZXIgPDwgaGFuZGxlOworI2lmIEVOQUJMRShE
QVRBX0RFVEVDVElPTikKKyAgICBlbmNvZGVyIDw8IGlzRGF0YURldGVjdG9yTGluazsKKyAgICBp
ZiAoaXNEYXRhRGV0ZWN0b3JMaW5rKSB7CisgICAgICAgIGVuY29kZXIgPDwgZGF0YURldGVjdG9y
SWRlbnRpZmllcjsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURhdGE+IGRhdGEgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdF0pOworICAgICAgICBSZXRhaW5QdHI8TlNL
ZXllZEFyY2hpdmVyPiBhcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVkQXJjaGl2ZXIgYWxsb2Nd
IGluaXRGb3JXcml0aW5nV2l0aE11dGFibGVEYXRhOmRhdGEuZ2V0KCldKTsKKyAgICAgICAgW2Fy
Y2hpdmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5nOllFU107CisgICAgICAgIFthcmNoaXZlciBl
bmNvZGVPYmplY3Q6ZGF0YURldGVjdG9yUmVzdWx0cy5nZXQoKSBmb3JLZXk6QCJkYXRhRGV0ZWN0
b3JSZXN1bHRzIl07CisgICAgICAgIFthcmNoaXZlciBmaW5pc2hFbmNvZGluZ107CisgICAgICAg
IAorICAgICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCByZWludGVycHJldF9jYXN0PENGRGF0YVJl
Zj4oZGF0YS5nZXQoKSkpOyAgICAgICAgCisgICAgfQorI2VuZGlmCiB9CiAKIGJvb2wgSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYg
ZGVjb2RlciwgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mIHJlc3VsdCkKQEAgLTEw
Niw2ICsxMjEsMzAgQEAgYm9vbCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZAog
ICAgIGlmICghaGFuZGxlLmlzTnVsbCgpKQogICAgICAgICByZXN1bHQuaW1hZ2UgPSBTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9u
bHkpOwogCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LmlzRGF0YURldGVjdG9yTGluaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBpZiAocmVzdWx0LmlzRGF0YURldGVjdG9yTGluaykgeworICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5kYXRhRGV0ZWN0b3JJZGVudGlmaWVyKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKKyAgICAg
ICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBkYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIFJldGFpblB0cjxOU0tleWVkVW5hcmNoaXZlcj4gdW5h
cmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVkVW5hcmNoaXZlciBhbGxvY10gaW5pdEZvclJlYWRp
bmdXaXRoRGF0YTooTlNEYXRhICopZGF0YS5nZXQoKV0pOworICAgICAgICBbdW5hcmNoaXZlciBz
ZXRSZXF1aXJlc1NlY3VyZUNvZGluZzpZRVNdOworICAgICAgICBAdHJ5IHsKKyAgICAgICAgICAg
IHJlc3VsdC5kYXRhRGV0ZWN0b3JSZXN1bHRzID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZD
bGFzc2VzOltOU1NldCBzZXRXaXRoQXJyYXk6QFsgW05TQXJyYXkgY2xhc3NdLCBnZXRERFNjYW5u
ZXJSZXN1bHRDbGFzcygpXV0gZm9yS2V5OkAiZGF0YURldGVjdG9yUmVzdWx0cyJdOworICAgICAg
ICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gZGVjb2RlIE5TQXJyeSBvZiBERFNjYW5SZXN1bHQ6ICVAIiwgZXhjZXB0
aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgW3VuYXJjaGl2ZXIgZmluaXNoRGVjb2RpbmddOworICAgIH0KKyNlbmRpZgorCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oCShyZXZpc2lvbiAx
OTU0OTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0
ZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBzdHJ1Y3QgVUlFZGdl
SW5zZXRzOwogLSAodm9pZClfd2ViVmlld0RpZEV4aXRGdWxsc2NyZWVuOihXS1dlYlZpZXcgKil3
ZWJWaWV3IFdLX0FWQUlMQUJMRSgxMF8xMSwgOF8zKTsKIAogLSAodm9pZClfd2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBpbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkOihDR1NpemUp
c2l6ZSBXS19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9TX1RCQSk7Ci0KKy0gKE5TRGljdGlv
bmFyeSAqKV9kYXRhRGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgV0tfQVZBSUxBQkxFKFdLX01BQ19UQkEsIFdLX0lPU19UQkEpOwogI2lmIFRBUkdFVF9PU19J
UEhPTkUKIC0gKEJPT0wpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkSW5jbHVk
ZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVudDooX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKillbGVt
ZW50IFdLX0FWQUlMQUJMRShOQSwgOV8wKTsKIC0gKE5TQXJyYXkgKilfd2ViVmlldzooV0tXZWJW
aWV3ICopd2ViVmlldyBhY3Rpb25zRm9yRWxlbWVudDooX1dLQWN0aXZhdGVkRWxlbWVudEluZm8g
KillbGVtZW50IGRlZmF1bHRBY3Rpb25zOihXS19BUlJBWShfV0tFbGVtZW50QWN0aW9uICopICop
ZGVmYXVsdEFjdGlvbnM7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0
aW9uU2hlZXRBc3Npc3RhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaAkocmV2aXNpb24gMTk1NDk1KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgc3RydWN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uOwogLSAoaWQpaW5pdFdpdGhWaWV3OihVSVZpZXcgKil2aWV3OwogLSAodm9pZClz
aG93TGlua1NoZWV0OwogLSAodm9pZClzaG93SW1hZ2VTaGVldDsKLS0gKHZvaWQpc2hvd0RhdGFE
ZXRlY3RvcnNTaGVldDsKKy0gKHZvaWQpc2hvd0RhdGFEZXRlY3RvcnNTaGVldDooTlNEaWN0aW9u
YXJ5ICopY29udGV4dDsKIC0gKHZvaWQpY2xlYW51cFNoZWV0OwogLSAodm9pZCl1cGRhdGVTaGVl
dFBvc2l0aW9uOwogLSAoUmV0YWluUHRyPE5TQXJyYXk+KWRlZmF1bHRBY3Rpb25zRm9yTGlua1No
ZWV0OihfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKWVsZW1lbnRJbmZvOwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFu
dC5tbQkocmV2aXNpb24gMTk1NDk1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
S0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MDgsOCArNDA4LDkg
QEAgLSAodm9pZClzaG93TGlua1NoZWV0CiAgICAgICAgIFtzZWxmIGNsZWFudXBTaGVldF07CiB9
CiAKLS0gKHZvaWQpc2hvd0RhdGFEZXRlY3RvcnNTaGVldAorLSAodm9pZClzaG93RGF0YURldGVj
dG9yc1NoZWV0OihOU0RpY3Rpb25hcnkgKiljb250ZXh0CiB7CisgICAgLy8gRklYTUU6IGNvbnRl
eHQgaXMgc3RpbGwgdW51c2VkIHVudGlsIHdlIGFkb3B0IHRoZSBuZXcgREQgY29udHJvbGxlciBm
dW5jdGlvbi4KICAgICBhdXRvIGRlbGVnYXRlID0gX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICgh
ZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCShyZXZpc2lv
biAxOTU0OTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA1Niw3ICsxMDU2LDExIEBAIC0gKHZv
aWQpX3Nob3dMaW5rU2hlZXQKIAogLSAodm9pZClfc2hvd0RhdGFEZXRlY3RvcnNTaGVldAogewot
ICAgIFtfYWN0aW9uU2hlZXRBc3Npc3RhbnQgc2hvd0RhdGFEZXRlY3RvcnNTaGVldF07CisgICAg
TlNEaWN0aW9uYXJ5KiBjb250ZXh0ID0gbmlsOworICAgIGlkIDxXS1VJRGVsZWdhdGVQcml2YXRl
PiB1aURlbGVnYXRlID0gc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihbX3dl
YlZpZXcgVUlEZWxlZ2F0ZV0pOworICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKF9kYXRhRGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXc6KV0pCisgICAgICAg
IGNvbnRleHQgPSBbdWlEZWxlZ2F0ZSBfZGF0YURldGVjdGlvbkNvbnRleHRGb3JXZWJWaWV3Ol93
ZWJWaWV3XTsKKyAgICBbX2FjdGlvblNoZWV0QXNzaXN0YW50IHNob3dEYXRhRGV0ZWN0b3JzU2hl
ZXQ6Y29udGV4dF07CiB9CiAKIC0gKFNFTClfYWN0aW9uRm9yTG9uZ1ByZXNzCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxOTU0OTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE2OTYsMTAgKzE2OTYsMTAgQEAKIAkJQzU3NEE1
ODExMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3NEE1N0YxMkU2NjY4MTAwMkRGRTk4IC8q
IFBhc3RlYm9hcmRUeXBlcy5oICovOyB9OwogCQlDNTc0QTU4MjEyRTY2NjgxMDAyREZFOTggLyog
UGFzdGVib2FyZFR5cGVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzU3NEE1ODAxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSAq
LzsgfTsKIAkJQzU4Q0RGMkExODg3NTQ4QjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRp
b25BdFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDNThDREYyODE4ODc1NDhCMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24uaCAqLzsgfTsKLQkJQzU4Q0RGMkQxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM1OENERjJCMTg4NzYwOUYwMDg3MTUzNiAvKiBJbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHAgKi87IH07Ci0JCUM1OENERjJFMTg4NzYwOUYwMDg3
MTUzNiAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4Q0RGMkMxODg3NjA5RjAwODcxNTM2
IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggKi87IH07CiAJCUM1OUM0QTU4
MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTlDNEE1NjE4QjgxMTc0MDA3
QkRDQjYgLyogQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwICovOyB9OwogCQlDNTlDNEE1OTE4
QjgxMTc0MDA3QkRDQjYgLyogQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1OUM0QTU3MThCODExNzQwMDdCRENC
NiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oICovOyB9OworCQlDNUJDRTVERTFDNTA3NjYz
MDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNUJDRTVEQjFDNTA3NjFEMDBD
REUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0gKi87IH07CisJCUM1
QkNFNURGMUM1MDc2NkEwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzVCQ0U1
REExQzUwNzYxRDAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgg
Ki87IH07CiAJCUM1RTFBRkU4MTZCMjBCNjcwMDZDQzFGMiAvKiBXS1dlYkFyY2hpdmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMjlEQTUxNkFD
RTVBOTAwMzE2REUyIC8qIFdLV2ViQXJjaGl2ZS5jcHAgKi87IH07CiAJCUM1RTFBRkU5MTZCMjBC
NzUwMDZDQzFGMiAvKiBXS1dlYkFyY2hpdmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzI5REE2MTZBQ0U1QTkwMDMxNkRFMiAvKiBXS1dlYkFyY2hp
dmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlD
NUUxQUZFQTE2QjIwQjdCMDA2Q0MxRjIgLyogV0tXZWJBcmNoaXZlUmVzb3VyY2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMjlEQTkxNkFDRTVC
RjAwMzE2REUyIC8qIFdLV2ViQXJjaGl2ZVJlc291cmNlLmNwcCAqLzsgfTsKQEAgLTM5MzksMTAg
KzM5MzksMTAgQEAKIAkJQzU3NEE1N0YxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXN0ZWJvYXJkVHlwZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU3NEE1ODAxMkU2NjY4MTAwMkRGRTk4IC8q
IFBhc3RlYm9hcmRUeXBlcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFBhc3RlYm9hcmRUeXBlcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU4
Q0RGMjgxODg3NTQ4QjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVyYWN0aW9uSW5mb3JtYXRp
b25BdFBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1OENERjJCMTg4
NzYwOUYwMDg3MTUzNiAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1OENERjJDMTg4
NzYwOUYwMDg3MTUzNiAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTlDNEE1NjE4QjgxMTc0MDA3
QkRDQjYgLyogQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDNTlDNEE1NzE4QjgxMTc0MDA3QkRDQjYgLyogQXNzaXN0ZWRO
b2RlSW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzVCQ0U1
REExQzUwNzYxRDAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uLmg7IHBhdGggPSBpb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzVCQ0U1REIxQzUwNzYxRDAwQ0RFM0ZB
IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24u
bW07IHBhdGggPSBpb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1RkExRUQxMThFMTA2MjIwMEIzRjQwMiAvKiBXS0Fp
clBsYXlSb3V0ZVBpY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0Fp
clBsYXlSb3V0ZVBpY2tlci5oOyBwYXRoID0gaW9zL2Zvcm1zL1dLQWlyUGxheVJvdXRlUGlja2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1RkExRUQyMThFMTA2MjIwMEIzRjQw
MiAvKiBXS0FpclBsYXlSb3V0ZVBpY2tlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFdLQWlyUGxheVJvdXRlUGlja2VyLm1tOyBwYXRoID0gaW9zL2Zvcm1zL1dL
QWlyUGxheVJvdXRlUGlja2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDOThD
NDhBMzFCNkZENEMzMDAxNDUxMDMgLyogV2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYk1lZGlhU2Vzc2lvbkZvY3Vz
TWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NzM0LDggKzQ3MzQs
NiBAQAogCQkJCTFBQzc1QTFBMUIzMzY4MjcwMDU2NzQ1QiAvKiBIYW5nRGV0ZWN0aW9uRGlzYWJs
ZXIuaCAqLywKIAkJCQlGNjM4OTU0RjEzM0JFRjM4MDA4OTQxRDUgLyogSFRUUENvb2tpZUFjY2Vw
dFBvbGljeS5oICovLAogCQkJCUJDQ0Y2QjIzMTJDOTNFN0EwMDhGOUMzNSAvKiBJbWFnZU9wdGlv
bnMuaCAqLywKLQkJCQlDNThDREYyQjE4ODc2MDlGMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb24uY3BwICovLAotCQkJCUM1OENERjJDMTg4NzYwOUYwMDg3MTUzNiAv
KiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oICovLAogCQkJCTFBOTJEQzEyMTJG
OEJBQjkwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmNwcCAqLywKIAkJCQkxQTkyREMxMDEy
RjhCQTQ2MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5oICovLAogCQkJCTJENTAzNjZBMUJD
REUxNzkwMEUyMEJCMyAvKiBOYXRpdmVXZWJHZXN0dXJlRXZlbnQuaCAqLywKQEAgLTUwOTcsNiAr
NTA5NSw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlBN0U5M0NFQjE5MjUzMUFBMDBBMURDNDgg
LyogQ2hpbGRQcm9jZXNzSU9TLm1tICovLAogCQkJCTJEQTk0NDlEMTg4NEU0RjAwMEVEODZEQiAv
KiBHZXN0dXJlVHlwZXMuaCAqLywKKwkJCQlDNUJDRTVEQTFDNTA3NjFEMDBDREUzRkEgLyogSW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCAqLywKKwkJCQlDNUJDRTVEQjFDNTA3NjFE
MDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0gKi8sCiAJCQkJ
MkRBOTQ0OTcxODg0RTRGMDAwRUQ4NkRCIC8qIE5hdGl2ZVdlYktleWJvYXJkRXZlbnRJT1MubW0g
Ki8sCiAJCQkJMkRBOTQ0OTgxODg0RTRGMDAwRUQ4NkRCIC8qIE5hdGl2ZVdlYlRvdWNoRXZlbnRJ
T1MubW0gKi8sCiAJCQkJQTExOEE5RUMxOTA3QUQ2RjAwRjdDOTJCIC8qIFF1aWNrTG9va0RvY3Vt
ZW50RGF0YS5jcHAgKi8sCkBAIC03NjY0LDYgKzc2NjQsNyBAQAogCQkJCUM1RTFBRkVEMTZCMjEw
MTcwMDZDQzFGMiAvKiBBUElXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUUxQUZF
RjE2QjIxMDI5MDA2Q0MxRjIgLyogQVBJV2ViQXJjaGl2ZVJlc291cmNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTQ4MzJDODFBOUJDMTNDMDA4QjRERkUgLyogQVBJV2Vic2l0ZURhdGFSZWNvcmQu
aCBpbiBIZWFkZXJzICovLAorCQkJCUM1QkNFNURGMUM1MDc2NkEwMENERTNGQSAvKiBJbnRlcmFj
dGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzNjM1QUEx
QTMxNDRBMzAwRUQ2MTk3IC8qIEFQSVdlYnNpdGVEYXRhU3RvcmUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBNjU2M0U1MUI3QThDNTAwMDlDRjc4NyAvKiBBUElXaW5kb3dGZWF0dXJlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFENEMxOTMxQjM5RjMzMjAwQUJDMjhFIC8qIEFwcGxpY2F0aW9uU3Rh
dGVUcmFja2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTc3NjksNyArNzc3MCw2IEBACiAJCQkJQkNB
OEM2QjAxMUUzQzA4NzAwODEyRkI3IC8qIEluamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzMzRTBEMTEyNDA4RTg2MDAzNjBGM0YgLyogSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNERGNzcxMjBCNUI3OTAwODI2
QzBDIC8qIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1
OENERjJFMTg4NzYwOUYwMDg3MTUzNiAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU4Q0RGMkExODg3NTQ4QjAwODcxNTM2IC8qIEludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUU0OUE0
OTExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFF
NDk4NzgxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAt
OTQ5OCw3ICs5NDk4LDYgQEAKIAkJCQlCQ0E4QzZBRjExRTNDMDg3MDA4MTJGQjcgLyogSW5qZWN0
ZWRCdW5kbGVQYWdlVUlDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzM0UwRDIxMjQw
OEU4NjAwMzYwRjNGIC8qIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMxNERGNzgxMjBCNUI3OTAwODI2QzBDIC8qIEluamVjdGVkQnVuZGxlU2NyaXB0
V29ybGQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4Q0RGMkQxODg3NjA5RjAwODcxNTM2IC8q
IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTFBRTQ5QTRBMTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBRTQ5ODc5MTFGRjdGQUEwMDQ4QjQ2NCAvKiBKU05QT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDRTA5Mzc3MTRGQjEyOEMwMDExMzhEOSAvKiBMYXllckhvc3RpbmdDb250
ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC05OTkxLDYgKzk5OTAsNyBAQAogCQkJCTUxMkY1OEY5
MTJBODhBNTQwMDYyOTUzMCAvKiBXS0NyZWRlbnRpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM0MDc1RjcxMjRGRjAyNzAwNjhGMjBBIC8qIFdLRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQUZGNDkwMDE4MzNERTc4MDA5QUIxNUEgLyogV0tEZXByZWNhdGVkRnVuY3Rpb25zLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUM1QkNFNURFMUM1MDc2NjMwMENERTNGQSAvKiBJbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NUY5MTI0
RkYwMjcwMDY4RjIwQSAvKiBXS0RpY3Rpb25hcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMw
MTdEMDgxNjI2MEZGNDAwNzA1NEY1IC8qIFdLRE9NRG9jdW1lbnQubW0gaW4gU291cmNlcyAqLywK
IAkJCQlCQzAxN0QwQTE2MjYwRkY0MDA3MDU0RjUgLyogV0tET01FbGVtZW50Lm1tIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAxOTU0OTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTUw
LDYgKzUwLDcgQEAKICNpbXBvcnQgIldlYlByb2Nlc3MuaCIKICNpbXBvcnQgPENvcmVUZXh0L0NU
Rm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRGF0
YURldGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRWxlbWVudC5oPgpAQCAtMjIwMiw2ICsyMjAzLDEzIEBAIHZvaWQgV2ViUGFnZTo6Z2V0
UG9zaXRpb25JbmZvcm1hdGlvbihjb24KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0
SW5kaWNhdG9yKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubGlua0luZGljYXRv
ciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgfQorI2lmIEVO
QUJMRShEQVRBX0RFVEVDVElPTikKKyAgICAgICAgICAgICAgICAgICAgaW5mby5pc0RhdGFEZXRl
Y3RvckxpbmsgPSBEYXRhRGV0ZWN0aW9uOjppc0RhdGFEZXRlY3RvckxpbmsoZWxlbWVudCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmlzRGF0YURldGVjdG9yTGluaykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5mby5kYXRhRGV0ZWN0b3JJZGVudGlmaWVyID0gRGF0YURldGVj
dGlvbjo6ZGF0YURldGVjdG9ySWRlbnRpZmllcihlbGVtZW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm8uZGF0YURldGVjdG9yUmVzdWx0cyA9IGVsZW1lbnQtPmRvY3VtZW50KCkuZnJh
bWUoKS0+ZGF0YURldGVjdGlvblJlc3VsdHMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorI2Vu
ZGlmCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5yZW5kZXJlcigpICYmIGVs
ZW1lbnQtPnJlbmRlcmVyKCktPmlzUmVuZGVySW1hZ2UoKSkgewogICAgICAgICAgICAgICAgICAg
ICBpbmZvLmlzSW1hZ2UgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBhdXRvJiByZW5kZXJJ
bWFnZSA9IGRvd25jYXN0PFJlbmRlckltYWdlPigqKGVsZW1lbnQtPnJlbmRlcmVyKCkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269674</attachid>
            <date>2016-01-23 10:54:35 -0800</date>
            <delta_ts>2016-01-25 13:59:52 -0800</delta_ts>
            <desc>Part 3 with more build fixes</desc>
            <filename>ddwk2-part3.txt</filename>
            <type>text/plain</type>
            <size>37514</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTUwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE2LTAxLTIyICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcg
bmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGRhdGEgZGV0ZWN0aW9uIHJlbGF0ZWQgdGFza3MuCisK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaDoKKyAgICAgICAgKiBlZGl0
aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0
aW9uOjppc0RhdGFEZXRlY3RvckxpbmspOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlv
bjo6ZGF0YURldGVjdG9ySWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVt
QXRQb3NpdGlvbldpdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXN1bHRJc1VSTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IpOgorICAgICAgICAo
V2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9zcGkvY29jb2EvRGF0YURldGVjdG9yc0NvcmVTUEkuaDoKKwogMjAxNi0wMS0y
MCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBIVE1MRWxlbWVu
dDo6bm9kZU5hbWUgc2hvdWxkIG5vdCB1cHBlciBjYXNlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAkocmV2
aXNpb24gMTk1NTAyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxNCBAQAogCiAjaW1wb3J0IDx3dGYv
UmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogT0JKQ19DTEFTUyBEREFjdGlvbkNvbnRleHQ7CiBPQkpDX0NMQVNTIE5T
QXJyYXk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZs
b2F0UmVjdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBSYW5nZTsKQEAgLTU1LDYgKzU3
LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rp
b25Db250ZXh0PiBkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVz
dWx0JiwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYg
ZGV0ZWN0ZWREYXRhUmFuZ2UpOwogI2VuZGlmCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE5T
QXJyYXkgKmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwg
RGF0YURldGVjdG9yVHlwZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGlzRGF0
YURldGVjdG9yTGluayhFbGVtZW50Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmlu
ZyBkYXRhRGV0ZWN0b3JJZGVudGlmaWVyKEVsZW1lbnQqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHJldmlzaW9uIDE5NTUwMikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsMTQgKzQ0LDIyIEBACiAj
aW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKICNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCiAKLSNpZiBQ
TEFURk9STShJT1MpCiBjb25zdCBjaGFyICpkYXRhRGV0ZWN0b3JzVVJMU2NoZW1lID0gIngtYXBw
bGUtZGF0YS1kZXRlY3RvcnMiOwogY29uc3QgY2hhciAqZGF0YURldGVjdG9yc0F0dHJpYnV0ZVR5
cGVLZXkgPSAieC1hcHBsZS1kYXRhLWRldGVjdG9ycy10eXBlIjsKIGNvbnN0IGNoYXIgKmRhdGFE
ZXRlY3RvcnNBdHRyaWJ1dGVSZXN1bHRLZXkgPSAieC1hcHBsZS1kYXRhLWRldGVjdG9ycy1yZXN1
bHQiOwotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorYm9vbCBEYXRhRGV0ZWN0aW9u
Ojppc0RhdGFEZXRlY3RvckxpbmsoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxl
bWVudC0+Z2V0QXR0cmlidXRlKGRhdGFEZXRlY3RvcnNVUkxTY2hlbWUpID09ICJ0cnVlIjsKK30K
KworU3RyaW5nIERhdGFEZXRlY3Rpb246OmRhdGFEZXRlY3RvcklkZW50aWZpZXIoRWxlbWVudCog
ZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGRhdGFEZXRlY3Rv
cnNBdHRyaWJ1dGVSZXN1bHRLZXkpOworfQorCiAjaWYgUExBVEZPUk0oTUFDKQogCiBzdGF0aWMg
UmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2Uo
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uLCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZSwgRmxv
YXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWRE
YXRhUmFuZ2UpCkBAIC0xNDQsNyArMTUyLDcgQEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4g
RGF0YURldGVjdGlvbgogICAgIHJldHVybiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShw
b3NpdGlvbiwgY29udGV4dFJhbmdlLCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWRE
YXRhUmFuZ2UpOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLSAgICAKKwogI2lmIFBMQVRG
T1JNKElPUykKICAgICAKIHN0YXRpYyBCT09MIHJlc3VsdElzVVJMKEREUmVzdWx0UmVmIHJlc3Vs
dCkKQEAgLTE4OSw3ICsxOTcsNyBAQCBzdGF0aWMgdm9pZCByZW1vdmVSZXN1bHRMaW5rc0Zyb21B
bmNob3IoCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgQk9PTCBu
b2RlSXNEREFuY2hvciA9IGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkgJiYgZG93bmNhc3Q8
RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShnZXRERFVSTFNjaGVtZSgpKSA9PSAidHJ1ZSI7
CisgICAgQk9PTCBub2RlSXNEREFuY2hvciA9IGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkg
JiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShERFVSTFNjaGVtZSkgPT0g
InRydWUiOwogICAgIAogICAgIFJlZlB0cjxOb2RlTGlzdD4gY2hpbGRyZW4gPSBub2RlLT5jaGls
ZE5vZGVzKCk7CiAgICAgdW5zaWduZWQgY2hpbGRDb3VudCA9IGNoaWxkcmVuLT5sZW5ndGgoKTsK
QEAgLTIxOCw3ICsyMjYsNyBAQCBzdGF0aWMgYm9vbCBzZWFyY2hGb3JMaW5rUmVtb3ZpbmdFeGlz
dGluCiAgICAgTm9kZSAqbm9kZSA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAobm9kZSkgewogICAg
ICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSkgewotICAgICAgICAgICAgaWYg
KGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5nZXRBdHRyaWJ1dGUoZ2V0RERVUkxTY2hlbWUoKSkg
IT0gInRydWUiKQorICAgICAgICAgICAgaWYgKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5nZXRB
dHRyaWJ1dGUoRERVUkxTY2hlbWUpICE9ICJ0cnVlIikKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihub2RlLCBub2Rl
LT5wYXJlbnRFbGVtZW50KCkpOwogICAgICAgICB9CkBAIC0yMjksNyArMjM3LDcgQEAgc3RhdGlj
IGJvb2wgc2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbgogICAgICAgICAgICAgbm9kZSA9IHN0
YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShnZXRE
RFVSTFNjaGVtZSgpKSAhPSAidHJ1ZSIpCisgICAgICAgICAgICAgICAgICAgIGlmIChkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEREVVJMU2NoZW1lKSAhPSAidHJ1ZSIpCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
cmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5jaG9yKG5vZGUsIG5vZGUtPnBhcmVudEVsZW1lbnQoKSk7
CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2Nv
Y29hL0RhdGFEZXRlY3RvcnNDb3JlU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3BpL2NvY29hL0RhdGFEZXRlY3RvcnNDb3JlU1BJLmgJKHJldmlzaW9uIDE5NTUw
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9EYXRhRGV0ZWN0b3JzQ29y
ZVNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDggQEAgU09GVF9MSU5LX1BPSU5U
RVIoRGF0YURldGVjdG9yc0NvcmUsIEREQgogU09GVF9MSU5LX1BPSU5URVIoRGF0YURldGVjdG9y
c0NvcmUsIEREQmluZGVyU2lnbmF0dXJlQmxvY2tLZXksIENGU3RyaW5nUmVmKQogU09GVF9MSU5L
X1BPSU5URVIoRGF0YURldGVjdG9yc0NvcmUsIEREVVJMU2NoZW1lLCBOU1N0cmluZyAqKQogU09G
VF9MSU5LX0NPTlNUQU5UKERhdGFEZXRlY3RvcnNDb3JlLCBERFNjYW5uZXJDb3B5UmVzdWx0c09w
dGlvbnNGb3JQYXNzaXZlVXNlLCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnMpCisKKyNkZWZp
bmUgRERVUkxTY2hlbWUgZ2V0RERVUkxTY2hlbWUoKQogI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE5NTUwMikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE2LTAxLTIyICBFbnJpY2EgQ2FzdWNjaSAgPGVu
cmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERhdGFEZXRlY3RvcnMg
aW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZpbmcgSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24gZmlsZXMgdG8gcGxhdGZvcm0gZm9sZGVyLAorICAgICAgICBz
aW5jZSB0aGlzIGlzIG9ubHkgdXNlZCBvbiBpT1MgYW5kIGNoYW5naW5nIGZyb20gLmNwcCB0byAu
bW0uCisgICAgICAgIFRoZSBzdHJ1Y3R1cmUgaXMgZXh0ZW5kZWQgdG8gaW5jbHVkZSBkYXRhIGRl
dGVjdGlvbiBzcGVjaWZpYyBmaWVsZHMKKyAgICAgICAgYW5kIHRoZSByZWxldmFudCBlbmNvZGUv
ZGVjb2RlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gdXBkYXRlZCB0bworICAgICAgICBoYW5kbGUgdGhl
IG5ldyBmaWVsZHMuCisgICAgICAgIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBuZXcgV0tVSURlbGVn
YXRlUHJpdmF0ZSBtZXRob2QgdG8gYWxsb3cKKyAgICAgICAgdGhlIGNsaWVudCB0byBwcm92aWRl
IGFkZGl0aW9uYWwgY29udGV4dCBmb3IgZGF0YSBkZXRlY3Rpb24gYWN0aW9ucy4KKworICAgICAg
ICAqIFNoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmg6IFJl
bW92ZWQuCisgICAgICAgICogU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb24uaC4KKyAgICAgICAgKiBTaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwLgorICAgICAgICAoV2ViS2l0OjpJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktp
dDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmRlY29kZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0
QXNzaXN0YW50IHNob3dMaW5rU2hlZXRdKToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFzc2lz
dGFudCBzaG93RGF0YURldGVjdG9yc1NoZWV0Ol0pOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0
QXNzaXN0YW50IHNob3dEYXRhRGV0ZWN0b3JzU2hlZXRdKTogRGVsZXRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyBfc2hvd0RhdGFEZXRlY3RvcnNTaGVldF0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IF9hY3Rpb25Gb3JMb25nUHJlc3NdKToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0
aW9uKToKKwogMjAxNi0wMS0yMiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBEYXRhRGV0ZWN0b3JzIGluIFdLIChpT1MpLgpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb24uY3BwCShyZXZpc2lvbiAxOTU1MDIpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgiCi0KLSNpbmNsdWRl
ICJBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLSNpZiBQTEFURk9STShJT1MpCi12b2lkIEludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBwb2ludDsKLSAgICBlbmNvZGVyIDw8IG5vZGVBdFBv
c2l0aW9uSXNBc3Npc3RlZE5vZGU7Ci0gICAgZW5jb2RlciA8PCBpc1NlbGVjdGFibGU7Ci0gICAg
ZW5jb2RlciA8PCBpc05lYXJNYXJrZWRUZXh0OwotICAgIGVuY29kZXIgPDwgdG91Y2hDYWxsb3V0
RW5hYmxlZDsKLSAgICBlbmNvZGVyIDw8IGlzTGluazsKLSAgICBlbmNvZGVyIDw8IGlzSW1hZ2U7
Ci0gICAgZW5jb2RlciA8PCBpc0FuaW1hdGVkSW1hZ2U7Ci0gICAgZW5jb2RlciA8PCBpc0NsaWNr
YWJsZUVsZW1lbnQ7Ci0gICAgZW5jb2RlciA8PCB1cmw7Ci0gICAgZW5jb2RlciA8PCBpbWFnZVVS
TDsKLSAgICBlbmNvZGVyIDw8IHRpdGxlOwotICAgIGVuY29kZXIgPDwgYm91bmRzOwotICAgIGVu
Y29kZXIgPDwgbGlua0luZGljYXRvcjsKLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhh
bmRsZTsKLSAgICBpZiAoaW1hZ2UpCi0gICAgICAgIGltYWdlLT5jcmVhdGVIYW5kbGUoaGFuZGxl
LCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLSAgICBlbmNvZGVyIDw8IGhh
bmRsZTsKLX0KLQotYm9vbCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZGVjb2Rl
KElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbiYgcmVzdWx0KQotewotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnBvaW50
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQubm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzU2VsZWN0YWJsZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzTmVhck1h
cmtlZFRleHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC50b3VjaENhbGxvdXRFbmFibGVkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNMaW5rKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNJbWFnZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzQW5p
bWF0ZWRJbWFnZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5pc0NsaWNrYWJsZUVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51cmwpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pbWFnZVVSTCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRp
dGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuYm91bmRzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQubGlua0luZGljYXRvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghaGFuZGxlLmlz
TnVsbCgpKQotICAgICAgICByZXN1bHQuaW1hZ2UgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSho
YW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0jZW5kaWYKLQotfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgJKHJldmlzaW9uIDE5
NTUwMikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uX2gKLSNkZWZpbmUgSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb25faAotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW5j
bHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZWxlY3Rpb25S
ZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdHJ1Y3QgSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gewotICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50
OwotICAgIGJvb2wgbm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBpc1NlbGVjdGFibGUgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNOZWFyTWFya2VkVGV4dCB7
IGZhbHNlIH07Ci0gICAgYm9vbCB0b3VjaENhbGxvdXRFbmFibGVkIHsgdHJ1ZSB9OwotICAgIGJv
b2wgaXNMaW5rIHsgZmFsc2UgfTsKLSAgICBib29sIGlzSW1hZ2UgeyBmYWxzZSB9OwotICAgIGJv
b2wgaXNBbmltYXRlZEltYWdlIHsgZmFsc2UgfTsKLSAgICBib29sIGlzQ2xpY2thYmxlRWxlbWVu
dCB7IGZhbHNlIH07Ci0gICAgU3RyaW5nIHVybDsKLSAgICBTdHJpbmcgaW1hZ2VVUkw7Ci0gICAg
U3RyaW5nIHRpdGxlOwotICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRzOwotICAgIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGltYWdlOwotCi0gICAgV2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEg
bGlua0luZGljYXRvcjsKLQotICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgSW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKLQotI2VuZGlmIC8vIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0lu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgJKHJldmlzaW9uIDE5NTUwMikJKGZyb20g
U291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmg6
MTk1NTAyKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0
aW9uQXRQb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uX2gKKyNkZWZpbmUg
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb25faAorCisjaWYgUExBVEZPUk0oSU9TKQor
CisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWxl
Y3Rpb25SZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3Qg
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24geworICAgIFdlYkNvcmU6OkludFBvaW50
IHBvaW50OworICAgIGJvb2wgbm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSB7IGZhbHNlIH07
CisgICAgYm9vbCBpc1NlbGVjdGFibGUgeyBmYWxzZSB9OworICAgIGJvb2wgaXNOZWFyTWFya2Vk
VGV4dCB7IGZhbHNlIH07CisgICAgYm9vbCB0b3VjaENhbGxvdXRFbmFibGVkIHsgdHJ1ZSB9Owor
ICAgIGJvb2wgaXNMaW5rIHsgZmFsc2UgfTsKKyAgICBib29sIGlzSW1hZ2UgeyBmYWxzZSB9Owor
ICAgIGJvb2wgaXNBbmltYXRlZEltYWdlIHsgZmFsc2UgfTsKKyAgICBib29sIGlzQ2xpY2thYmxl
RWxlbWVudCB7IGZhbHNlIH07CisgICAgU3RyaW5nIHVybDsKKyAgICBTdHJpbmcgaW1hZ2VVUkw7
CisgICAgU3RyaW5nIHRpdGxlOworICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRzOworICAgIFJl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGltYWdlOworCisgICAgV2ViQ29yZTo6VGV4dEluZGljYXRv
ckRhdGEgbGlua0luZGljYXRvcjsKKworICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNv
ZGVyJikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVy
JiwgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKK307CisKK30KKworI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
aW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsOSBAQCBzdHJ1Y3QgSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24gCiAgICAgYm9vbCBpc0ltYWdlIHsgZmFsc2UgfTsKICAgICBi
b29sIGlzQW5pbWF0ZWRJbWFnZSB7IGZhbHNlIH07CiAgICAgYm9vbCBpc0NsaWNrYWJsZUVsZW1l
bnQgeyBmYWxzZSB9OworI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBib29sIGlzRGF0
YURldGVjdG9yTGluayB7IGZhbHNlIH07CisjZW5kaWYKICAgICBTdHJpbmcgdXJsOwogICAgIFN0
cmluZyBpbWFnZVVSTDsKICAgICBTdHJpbmcgdGl0bGU7CkBAIC01NCw2ICs1NywxMCBAQCBzdHJ1
Y3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gCiAgICAgUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gaW1hZ2U7CiAKICAgICBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBsaW5rSW5k
aWNhdG9yOworI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBTdHJpbmcgZGF0YURldGVj
dG9ySWRlbnRpZmllcjsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZGF0YURldGVjdG9yUmVzdWx0
czsKKyNlbmRpZgogCiAgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25z
dDsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBJbnRlcmFj
dGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVk
L2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
Lm1tCShyZXZpc2lvbiAxOTU1MDIpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRlcmFj
dGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHA6MTk1NTAyKQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbQkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIgorCisjaW5jbHVk
ZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbjo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAoreworICAgIGVuY29kZXIgPDwgcG9pbnQ7CisgICAgZW5jb2RlciA8PCBub2RlQXRQ
b3NpdGlvbklzQXNzaXN0ZWROb2RlOworICAgIGVuY29kZXIgPDwgaXNTZWxlY3RhYmxlOworICAg
IGVuY29kZXIgPDwgaXNOZWFyTWFya2VkVGV4dDsKKyAgICBlbmNvZGVyIDw8IHRvdWNoQ2FsbG91
dEVuYWJsZWQ7CisgICAgZW5jb2RlciA8PCBpc0xpbms7CisgICAgZW5jb2RlciA8PCBpc0ltYWdl
OworICAgIGVuY29kZXIgPDwgaXNBbmltYXRlZEltYWdlOworICAgIGVuY29kZXIgPDwgaXNDbGlj
a2FibGVFbGVtZW50OworICAgIGVuY29kZXIgPDwgdXJsOworICAgIGVuY29kZXIgPDwgaW1hZ2VV
Ukw7CisgICAgZW5jb2RlciA8PCB0aXRsZTsKKyAgICBlbmNvZGVyIDw8IGJvdW5kczsKKyAgICBl
bmNvZGVyIDw8IGxpbmtJbmRpY2F0b3I7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBo
YW5kbGU7CisgICAgaWYgKGltYWdlKQorICAgICAgICBpbWFnZS0+Y3JlYXRlSGFuZGxlKGhhbmRs
ZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgZW5jb2RlciA8PCBo
YW5kbGU7Cit9CisKK2Jvb2wgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmRlY29k
ZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24mIHJlc3VsdCkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wb2lu
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0Lm5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc1NlbGVjdGFibGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc05lYXJN
YXJrZWRUZXh0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQudG91Y2hDYWxsb3V0RW5hYmxlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzTGluaykpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzSW1hZ2UpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0Fu
aW1hdGVkSW1hZ2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuaXNDbGlja2FibGVFbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaW1hZ2VVUkwpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50
aXRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LmJvdW5kcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LmxpbmtJbmRpY2F0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShoYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWhhbmRsZS5p
c051bGwoKSkKKyAgICAgICAgcmVzdWx0LmltYWdlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUo
aGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKworICAgIHJldHVy
biB0cnVlOworfQorI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3Mv
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbQko
d29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDEzIEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgiCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uLmgiCiAKLSNpbmNsdWRlICJBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKKyNpbXBvcnQgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKKyNpbXBvcnQgIkFyZ3Vt
ZW50cy5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0IDxXZWJD
b3JlL0RhdGFEZXRlY3RvcnNDb3JlU1BJLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC01
Myw2ICs1NSwxOSBAQCB2b2lkIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOjplCiAg
ICAgaWYgKGltYWdlKQogICAgICAgICBpbWFnZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVk
TWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CiAgICAgZW5jb2RlciA8PCBoYW5kbGU7Cisj
aWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgIGVuY29kZXIgPDwgaXNEYXRhRGV0ZWN0b3JM
aW5rOworICAgIGlmIChpc0RhdGFEZXRlY3RvckxpbmspIHsKKyAgICAgICAgZW5jb2RlciA8PCBk
YXRhRGV0ZWN0b3JJZGVudGlmaWVyOworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGF0YT4g
ZGF0YSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFJl
dGFpblB0cjxOU0tleWVkQXJjaGl2ZXI+IGFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRBcmNo
aXZlciBhbGxvY10gaW5pdEZvcldyaXRpbmdXaXRoTXV0YWJsZURhdGE6ZGF0YS5nZXQoKV0pOwor
ICAgICAgICBbYXJjaGl2ZXIgc2V0UmVxdWlyZXNTZWN1cmVDb2Rpbmc6WUVTXTsKKyAgICAgICAg
W2FyY2hpdmVyIGVuY29kZU9iamVjdDpkYXRhRGV0ZWN0b3JSZXN1bHRzLmdldCgpIGZvcktleTpA
ImRhdGFEZXRlY3RvclJlc3VsdHMiXTsKKyAgICAgICAgW2FyY2hpdmVyIGZpbmlzaEVuY29kaW5n
XTsKKyAgICAgICAgCisgICAgICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIHJlaW50ZXJwcmV0X2Nh
c3Q8Q0ZEYXRhUmVmPihkYXRhLmdldCgpKSk7ICAgICAgICAKKyAgICB9CisjZW5kaWYKIH0KIAog
Ym9vbCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZGVjb2RlKElQQzo6QXJndW1l
bnREZWNvZGVyJiBkZWNvZGVyLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYgcmVz
dWx0KQpAQCAtMTA2LDYgKzEyMSwzMCBAQCBib29sIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uOjpkCiAgICAgaWYgKCFoYW5kbGUuaXNOdWxsKCkpCiAgICAgICAgIHJlc3VsdC5pbWFn
ZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0
aW9uOjpSZWFkT25seSk7CiAKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQuaXNEYXRhRGV0ZWN0b3JMaW5rKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGlmIChyZXN1bHQuaXNEYXRhRGV0ZWN0b3JMaW5rKSB7CisgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRhdGFEZXRlY3RvcklkZW50aWZpZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBk
YXRhOworICAgICAgICBpZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIsIGRhdGEpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgUmV0YWluUHRyPE5TS2V5ZWRVbmFy
Y2hpdmVyPiB1bmFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRVbmFyY2hpdmVyIGFsbG9jXSBp
bml0Rm9yUmVhZGluZ1dpdGhEYXRhOihOU0RhdGEgKilkYXRhLmdldCgpXSk7CisgICAgICAgIFt1
bmFyY2hpdmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5nOllFU107CisgICAgICAgIEB0cnkgewor
ICAgICAgICAgICAgcmVzdWx0LmRhdGFEZXRlY3RvclJlc3VsdHMgPSBbdW5hcmNoaXZlciBkZWNv
ZGVPYmplY3RPZkNsYXNzZXM6W05TU2V0IHNldFdpdGhBcnJheTpAWyBbTlNBcnJheSBjbGFzc10s
IGdldEREU2Nhbm5lclJlc3VsdENsYXNzKCldXSBmb3JLZXk6QCJkYXRhRGV0ZWN0b3JSZXN1bHRz
Il07CisgICAgICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7CisgICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWNvZGUgTlNBcnJ5IG9mIEREU2NhblJlc3VsdDog
JUAiLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBbdW5hcmNoaXZlciBmaW5pc2hEZWNvZGluZ107CisgICAgfQorI2Vu
ZGlmCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmgJ
KHJldmlzaW9uIDE5NTUwMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tVSURlbGVnYXRlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHN0
cnVjdCBVSUVkZ2VJbnNldHM7CiAtICh2b2lkKV93ZWJWaWV3RGlkRXhpdEZ1bGxzY3JlZW46KFdL
V2ViVmlldyAqKXdlYlZpZXcgV0tfQVZBSUxBQkxFKDEwXzExLCA4XzMpOwogCiAtICh2b2lkKV93
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNoYW5n
ZWQ6KENHU2l6ZSlzaXplIFdLX0FWQUlMQUJMRShXS19NQUNfVEJBLCBXS19JT1NfVEJBKTsKLQor
LSAoTlNEaWN0aW9uYXJ5ICopX2RhdGFEZXRlY3Rpb25Db250ZXh0Rm9yV2ViVmlldzooV0tXZWJW
aWV3ICopd2ViVmlldyBXS19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9TX1RCQSk7CiAjaWYg
VEFSR0VUX09TX0lQSE9ORQogLSAoQk9PTClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBz
aG91bGRJbmNsdWRlQXBwTGlua0FjdGlvbnNGb3JFbGVtZW50OihfV0tBY3RpdmF0ZWRFbGVtZW50
SW5mbyAqKWVsZW1lbnQgV0tfQVZBSUxBQkxFKE5BLCA5XzApOwogLSAoTlNBcnJheSAqKV93ZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGFjdGlvbnNGb3JFbGVtZW50OihfV0tBY3RpdmF0ZWRF
bGVtZW50SW5mbyAqKWVsZW1lbnQgZGVmYXVsdEFjdGlvbnM6KFdLX0FSUkFZKF9XS0VsZW1lbnRB
Y3Rpb24gKikgKilkZWZhdWx0QWN0aW9uczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oCShyZXZpc2lvbiAxOTU1
MDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3Rh
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBzdHJ1Y3QgSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb247CiAtIChpZClpbml0V2l0aFZpZXc6KFVJVmlldyAqKXZpZXc7
CiAtICh2b2lkKXNob3dMaW5rU2hlZXQ7CiAtICh2b2lkKXNob3dJbWFnZVNoZWV0OwotLSAodm9p
ZClzaG93RGF0YURldGVjdG9yc1NoZWV0OworLSAodm9pZClzaG93RGF0YURldGVjdG9yc1NoZWV0
OihOU0RpY3Rpb25hcnkgKiljb250ZXh0OwogLSAodm9pZCljbGVhbnVwU2hlZXQ7CiAtICh2b2lk
KXVwZGF0ZVNoZWV0UG9zaXRpb247CiAtIChSZXRhaW5QdHI8TlNBcnJheT4pZGVmYXVsdEFjdGlv
bnNGb3JMaW5rU2hlZXQ6KF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICopZWxlbWVudEluZm87Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNo
ZWV0QXNzaXN0YW50Lm1tCShyZXZpc2lvbiAxOTU1MDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTQw
OCw4ICs0MDgsOSBAQCAtICh2b2lkKXNob3dMaW5rU2hlZXQKICAgICAgICAgW3NlbGYgY2xlYW51
cFNoZWV0XTsKIH0KIAotLSAodm9pZClzaG93RGF0YURldGVjdG9yc1NoZWV0CistICh2b2lkKXNo
b3dEYXRhRGV0ZWN0b3JzU2hlZXQ6KE5TRGljdGlvbmFyeSAqKWNvbnRleHQKIHsKKyAgICAvLyBG
SVhNRTogY29udGV4dCBpcyBzdGlsbCB1bnVzZWQgdW50aWwgd2UgYWRvcHQgdGhlIG5ldyBERCBj
b250cm9sbGVyIGZ1bmN0aW9uLgogICAgIGF1dG8gZGVsZWdhdGUgPSBfZGVsZWdhdGUuZ2V0KCk7
CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW0JKHJldmlzaW9uIDE5NTUwMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU2LDcgKzEwNTYs
MTEgQEAgLSAodm9pZClfc2hvd0xpbmtTaGVldAogCiAtICh2b2lkKV9zaG93RGF0YURldGVjdG9y
c1NoZWV0CiB7Ci0gICAgW19hY3Rpb25TaGVldEFzc2lzdGFudCBzaG93RGF0YURldGVjdG9yc1No
ZWV0XTsKKyAgICBOU0RpY3Rpb25hcnkqIGNvbnRleHQgPSBuaWw7CisgICAgaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+IHVpRGVsZWdhdGUgPSBzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4+KFtfd2ViVmlldyBVSURlbGVnYXRlXSk7CisgICAgaWYgKFt1aURlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2RhdGFEZXRlY3Rpb25Db250ZXh0Rm9yV2ViVmlldzop
XSkKKyAgICAgICAgY29udGV4dCA9IFt1aURlbGVnYXRlIF9kYXRhRGV0ZWN0aW9uQ29udGV4dEZv
cldlYlZpZXc6X3dlYlZpZXddOworICAgIFtfYWN0aW9uU2hlZXRBc3Npc3RhbnQgc2hvd0RhdGFE
ZXRlY3RvcnNTaGVldDpjb250ZXh0XTsKIH0KIAogLSAoU0VMKV9hY3Rpb25Gb3JMb25nUHJlc3MK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE5NTUwMikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY5NiwxMCArMTY5NiwxMCBA
QAogCQlDNTc0QTU4MTEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0QTU3RjEyRTY2Njgx
MDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggKi87IH07CiAJCUM1NzRBNTgyMTJFNjY2ODEw
MDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2Fy
ZFR5cGVzLm1tICovOyB9OwogCQlDNThDREYyQTE4ODc1NDhCMDA4NzE1MzYgLyogSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM1OENERjI4MTg4NzU0OEIwMDg3MTUzNiAvKiBJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbi5oICovOyB9OwotCQlDNThDREYyRDE4ODc2MDlGMDA4NzE1MzYg
LyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4Q0RGMkIxODg3NjA5RjAwODcxNTM2IC8q
IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcCAqLzsgfTsKLQkJQzU4Q0RGMkUx
ODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNThDREYyQzE4ODc2
MDlGMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCAqLzsgfTsK
IAkJQzU5QzRBNTgxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1OUM0QTU2
MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgKi87IH07CiAJ
CUM1OUM0QTU5MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU5QzRBNTcxOEI4
MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmggKi87IH07CisJCUM1QkNF
NURFMUM1MDc2NjMwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1QkNFNURC
MUM1MDc2MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbSAq
LzsgfTsKKwkJQzVCQ0U1REYxQzUwNzY2QTAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRp
b25BdFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDNUJDRTVEQTFDNTA3NjFEMDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24uaCAqLzsgfTsKIAkJQzVFMUFGRTgxNkIyMEI2NzAwNkNDMUYyIC8qIFdLV2ViQXJj
aGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzMyOURBNTE2QUNFNUE5MDAzMTZERTIgLyogV0tXZWJBcmNoaXZlLmNwcCAqLzsgfTsKIAkJQzVF
MUFGRTkxNkIyMEI3NTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMjlEQTYxNkFDRTVBOTAwMzE2REUyIC8q
IFdLV2ViQXJjaGl2ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUM1RTFBRkVBMTZCMjBCN0IwMDZDQzFGMiAvKiBXS1dlYkFyY2hpdmVSZXNvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMy
OURBOTE2QUNFNUJGMDAzMTZERTIgLyogV0tXZWJBcmNoaXZlUmVzb3VyY2UuY3BwICovOyB9OwpA
QCAtMzkzOSwxMCArMzkzOSwxMCBAQAogCQlDNTc0QTU3RjEyRTY2NjgxMDAyREZFOTggLyogUGFz
dGVib2FyZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9h
cmRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTc0QTU4MDEyRTY2Njgx
MDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gUGFzdGVib2FyZFR5cGVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDNThDREYyODE4ODc1NDhCMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QzU4Q0RGMkIxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QzU4Q0RGMkMxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1OUM0QTU2
MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1OUM0QTU3MThCODExNzQwMDdCRENCNiAv
KiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDNUJDRTVEQTFDNTA3NjFEMDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24uaDsgcGF0aCA9IGlvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNUJDRTVEQjFDNTA3
NjFEMDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbi5tbTsgcGF0aCA9IGlvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlv
bi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzVGQTFFRDExOEUxMDYyMjAwQjNG
NDAyIC8qIFdLQWlyUGxheVJvdXRlUGlja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFdLQWlyUGxheVJvdXRlUGlja2VyLmg7IHBhdGggPSBpb3MvZm9ybXMvV0tBaXJQbGF5
Um91dGVQaWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzVGQTFFRDIxOEUx
MDYyMjAwQjNGNDAyIC8qIFdLQWlyUGxheVJvdXRlUGlja2VyLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tBaXJQbGF5Um91dGVQaWNrZXIubW07IHBhdGggPSBp
b3MvZm9ybXMvV0tBaXJQbGF5Um91dGVQaWNrZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUM5OEM0OEEzMUI2RkQ0QzMwMDE0NTEwMyAvKiBXZWJNZWRpYVNlc3Npb25Gb2N1c01h
bmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViTWVkaWFT
ZXNzaW9uRm9jdXNNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3
MzQsOCArNDczNCw2IEBACiAJCQkJMUFDNzVBMUExQjMzNjgyNzAwNTY3NDVCIC8qIEhhbmdEZXRl
Y3Rpb25EaXNhYmxlci5oICovLAogCQkJCUY2Mzg5NTRGMTMzQkVGMzgwMDg5NDFENSAvKiBIVFRQ
Q29va2llQWNjZXB0UG9saWN5LmggKi8sCiAJCQkJQkNDRjZCMjMxMkM5M0U3QTAwOEY5QzM1IC8q
IEltYWdlT3B0aW9ucy5oICovLAotCQkJCUM1OENERjJCMTg4NzYwOUYwMDg3MTUzNiAvKiBJbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHAgKi8sCi0JCQkJQzU4Q0RGMkMxODg3NjA5
RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggKi8sCiAJCQkJ
MUE5MkRDMTIxMkY4QkFCOTAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuY3BwICovLAogCQkJ
CTFBOTJEQzEwMTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggKi8sCiAJCQkJ
MkQ1MDM2NkExQkNERTE3OTAwRTIwQkIzIC8qIE5hdGl2ZVdlYkdlc3R1cmVFdmVudC5oICovLApA
QCAtNTA5Nyw2ICs1MDk1LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUE3RTkzQ0VCMTkyNTMx
QUEwMEExREM0OCAvKiBDaGlsZFByb2Nlc3NJT1MubW0gKi8sCiAJCQkJMkRBOTQ0OUQxODg0RTRG
MDAwRUQ4NkRCIC8qIEdlc3R1cmVUeXBlcy5oICovLAorCQkJCUM1QkNFNURBMUM1MDc2MUQwMENE
RTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oICovLAorCQkJCUM1QkNF
NURCMUM1MDc2MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5t
bSAqLywKIAkJCQkyREE5NDQ5NzE4ODRFNEYwMDBFRDg2REIgLyogTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudElPUy5tbSAqLywKIAkJCQkyREE5NDQ5ODE4ODRFNEYwMDBFRDg2REIgLyogTmF0aXZlV2Vi
VG91Y2hFdmVudElPUy5tbSAqLywKIAkJCQlBMTE4QTlFQzE5MDdBRDZGMDBGN0M5MkIgLyogUXVp
Y2tMb29rRG9jdW1lbnREYXRhLmNwcCAqLywKQEAgLTc2NjQsNiArNzY2NCw3IEBACiAJCQkJQzVF
MUFGRUQxNkIyMTAxNzAwNkNDMUYyIC8qIEFQSVdlYkFyY2hpdmUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUM1RTFBRkVGMTZCMjEwMjkwMDZDQzFGMiAvKiBBUElXZWJBcmNoaXZlUmVzb3VyY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBNDgzMkM4MUE5QkMxM0MwMDhCNERGRSAvKiBBUElXZWJzaXRl
RGF0YVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzVCQ0U1REYxQzUwNzY2QTAwQ0RFM0ZB
IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTM2MzVBQTFBMzE0NEEzMDBFRDYxOTcgLyogQVBJV2Vic2l0ZURhdGFTdG9yZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE2NTYzRTUxQjdBOEM1MDAwOUNGNzg3IC8qIEFQSVdpbmRvd0ZlYXR1
cmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUQ0QzE5MzFCMzlGMzMyMDBBQkMyOEUgLyogQXBw
bGljYXRpb25TdGF0ZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzc2OSw3ICs3NzcwLDYg
QEAKIAkJCQlCQ0E4QzZCMDExRTNDMDg3MDA4MTJGQjcgLyogSW5qZWN0ZWRCdW5kbGVQYWdlVUlD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzNFMEQxMTI0MDhFODYwMDM2MEYzRiAvKiBJ
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE0REY3NzEy
MEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQzU4Q0RGMkUxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRp
b25BdFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNThDREYyQTE4ODc1NDhCMDA4NzE1
MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBRTQ5QTQ5MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUU0OTg3ODExRkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCkBAIC05NDk4LDcgKzk0OTgsNiBAQAogCQkJCUJDQThDNkFGMTFFM0MwODcwMDgxMkZC
NyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzMzRTBEMjEyNDA4RTg2MDAzNjBGM0YgLyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzE0REY3ODEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRC
dW5kbGVTY3JpcHRXb3JsZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDNThDREYyRDE4ODc2MDlG
MDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFFNDlBNEExMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFFNDk4NzkxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMDkzNzcxNEZCMTI4QzAwMTEzOEQ5IC8qIExheWVy
SG9zdGluZ0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKQEAgLTk5OTEsNiArOTk5MCw3IEBACiAJ
CQkJNTEyRjU4RjkxMkE4OEE1NDAwNjI5NTMwIC8qIFdLQ3JlZGVudGlhbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzQwNzVGNzEyNEZGMDI3MDA2OEYyMEEgLyogV0tEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBRkY0OTAwMTgzM0RFNzgwMDlBQjE1QSAvKiBXS0RlcHJlY2F0ZWRGdW5j
dGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzVCQ0U1REUxQzUwNzY2MzAwQ0RFM0ZBIC8q
IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM0MDc1RjkxMjRGRjAyNzAwNjhGMjBBIC8qIFdLRGljdGlvbmFyeS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzAxN0QwODE2MjYwRkY0MDA3MDU0RjUgLyogV0tET01Eb2N1bWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUJDMDE3RDBBMTYyNjBGRjQwMDcwNTRGNSAvKiBXS0RPTUVsZW1lbnQu
bW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDE5NTUwMikKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgogI2ltcG9ydCA8
Q29yZVRleHQvQ1RGb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgorI2ltcG9ydCA8
V2ViQ29yZS9EYXRhRGV0ZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RpYWdub3N0aWNMb2dn
aW5nQ2xpZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Lmg+CkBAIC0yMjAyLDYgKzIyMDMsMTMgQEAgdm9pZCBX
ZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbgogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRleHRJbmRpY2F0b3IpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5s
aW5rSW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwogICAgICAgICAgICAgICAgICAg
ICB9CisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICAgICAgICAgICAgICBpbmZv
LmlzRGF0YURldGVjdG9yTGluayA9IERhdGFEZXRlY3Rpb246OmlzRGF0YURldGVjdG9yTGluayhl
bGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uaXNEYXRhRGV0ZWN0b3JMaW5r
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmRhdGFEZXRlY3RvcklkZW50aWZpZXIg
PSBEYXRhRGV0ZWN0aW9uOjpkYXRhRGV0ZWN0b3JJZGVudGlmaWVyKGVsZW1lbnQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5mby5kYXRhRGV0ZWN0b3JSZXN1bHRzID0gZWxlbWVudC0+ZG9j
dW1lbnQoKS5mcmFtZSgpLT5kYXRhRGV0ZWN0aW9uUmVzdWx0cygpOworICAgICAgICAgICAgICAg
ICAgICB9CisjZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPnJlbmRl
cmVyKCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbWFnZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGluZm8uaXNJbWFnZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGF1
dG8mIHJlbmRlckltYWdlID0gZG93bmNhc3Q8UmVuZGVySW1hZ2U+KCooZWxlbWVudC0+cmVuZGVy
ZXIoKSkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269789</attachid>
            <date>2016-01-25 13:59:52 -0800</date>
            <delta_ts>2016-01-25 15:38:07 -0800</delta_ts>
            <desc>Patch for final work</desc>
            <filename>ddwk2-part3.txt</filename>
            <type>text/plain</type>
            <size>44480</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTUwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTAxLTI1ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcg
bmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGRhdGEgZGV0ZWN0aW9uIHJlbGF0ZWQgdGFza3MuCisg
ICAgICAgIFRoZSBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIHdoZW4gY3JlYXRpbmcgRE9NIHJhbmdl
cyBmcm9tIEREUXVlcnlSYW5nZQorICAgICAgICBzcGFubmluZyBtdWx0aXBsZSBmcmFnbWVudHMu
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaDoKKyAgICAgICAgKiBl
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0
ZWN0aW9uOjppc0RhdGFEZXRlY3RvckxpbmspOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVj
dGlvbjo6ZGF0YURldGVjdG9ySWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJ
dGVtQXRQb3NpdGlvbldpdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9u
OjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpyZXN1
bHRJc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtz
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdl
KToKKwogMjAxNi0wMS0yMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBIVE1MRWxlbWVudDo6bm9kZU5hbWUgc2hvdWxkIG5vdCB1cHBlciBjYXNlIG5vbi1BU0NJ
SSBjaGFyYWN0ZXJzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFE
ZXRlY3Rpb24uaAkocmV2aXNpb24gMTk1NDk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxNCBAQAog
CiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1w
b3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogT0JKQ19DTEFTUyBEREFjdGlvbkNvbnRleHQ7
CiBPQkpDX0NMQVNTIE5TQXJyYXk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRWxl
bWVudDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBSYW5n
ZTsKQEAgLTU1LDYgKzU3LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChj
b25zdCBIaXRUZXN0UmVzdWx0JiwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwg
UmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpOwogI2VuZGlmCiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIE5TQXJyYXkgKmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4m
IGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBib29sIGlzRGF0YURldGVjdG9yTGluayhFbGVtZW50Kik7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFN0cmluZyBkYXRhRGV0ZWN0b3JJZGVudGlmaWVyKEVsZW1lbnQqKTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDE5NTQ5NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQs
MTQgKzQ0LDIyIEBACiAjaW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKICNpbXBvcnQgImh0bWxlZGl0
aW5nLmgiCiAKLSNpZiBQTEFURk9STShJT1MpCiBjb25zdCBjaGFyICpkYXRhRGV0ZWN0b3JzVVJM
U2NoZW1lID0gIngtYXBwbGUtZGF0YS1kZXRlY3RvcnMiOwogY29uc3QgY2hhciAqZGF0YURldGVj
dG9yc0F0dHJpYnV0ZVR5cGVLZXkgPSAieC1hcHBsZS1kYXRhLWRldGVjdG9ycy10eXBlIjsKIGNv
bnN0IGNoYXIgKmRhdGFEZXRlY3RvcnNBdHRyaWJ1dGVSZXN1bHRLZXkgPSAieC1hcHBsZS1kYXRh
LWRldGVjdG9ycy1yZXN1bHQiOwotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorYm9v
bCBEYXRhRGV0ZWN0aW9uOjppc0RhdGFEZXRlY3RvckxpbmsoRWxlbWVudCogZWxlbWVudCkKK3sK
KyAgICByZXR1cm4gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGRhdGFEZXRlY3RvcnNVUkxTY2hlbWUp
ID09ICJ0cnVlIjsKK30KKworU3RyaW5nIERhdGFEZXRlY3Rpb246OmRhdGFEZXRlY3RvcklkZW50
aWZpZXIoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+Z2V0QXR0cmli
dXRlKGRhdGFEZXRlY3RvcnNBdHRyaWJ1dGVSZXN1bHRLZXkpOworfQorCiAjaWYgUExBVEZPUk0o
TUFDKQogCiBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0UG9z
aXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uLCBSZWZQdHI8UmFuZ2U+IGNv
bnRleHRSYW5nZSwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJh
bmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCkBAIC0xNDQsNyArMTUyLDcgQEAgUmV0YWluUHRyPERE
QWN0aW9uQ29udGV4dD4gRGF0YURldGVjdGlvbgogICAgIHJldHVybiBkZXRlY3RJdGVtQXRQb3Np
dGlvbldpdGhSYW5nZShwb3NpdGlvbiwgY29udGV4dFJhbmdlLCBkZXRlY3RlZERhdGFCb3VuZGlu
Z0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2UpOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLSAg
ICAKKwogI2lmIFBMQVRGT1JNKElPUykKICAgICAKIHN0YXRpYyBCT09MIHJlc3VsdElzVVJMKERE
UmVzdWx0UmVmIHJlc3VsdCkKQEAgLTE4OSw3ICsxOTcsNyBAQCBzdGF0aWMgdm9pZCByZW1vdmVS
ZXN1bHRMaW5rc0Zyb21BbmNob3IoCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgQk9PTCBub2RlSXNEREFuY2hvciA9IGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9k
ZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShnZXRERFVSTFNjaGVt
ZSgpKSA9PSAidHJ1ZSI7CisgICAgQk9PTCBub2RlSXNEREFuY2hvciA9IGlzPEhUTUxBbmNob3JF
bGVtZW50Pigqbm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShk
YXRhRGV0ZWN0b3JzVVJMU2NoZW1lKSA9PSAidHJ1ZSI7CiAgICAgCiAgICAgUmVmUHRyPE5vZGVM
aXN0PiBjaGlsZHJlbiA9IG5vZGUtPmNoaWxkTm9kZXMoKTsKICAgICB1bnNpZ25lZCBjaGlsZENv
dW50ID0gY2hpbGRyZW4tPmxlbmd0aCgpOwpAQCAtMjE4LDcgKzIyNiw3IEBAIHN0YXRpYyBib29s
IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW4KICAgICBOb2RlICpub2RlID0gc3RhcnROb2Rl
OwogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIGlmIChpczxIVE1MQW5jaG9yRWxlbWVudD4o
Km5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0
dHJpYnV0ZShnZXRERFVSTFNjaGVtZSgpKSAhPSAidHJ1ZSIpCisgICAgICAgICAgICBpZiAoZG93
bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShkYXRhRGV0ZWN0b3JzVVJMU2NoZW1l
KSAhPSAidHJ1ZSIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBy
ZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3Iobm9kZSwgbm9kZS0+cGFyZW50RWxlbWVudCgpKTsK
ICAgICAgICAgfQpAQCAtMjI5LDcgKzIzNyw3IEBAIHN0YXRpYyBib29sIHNlYXJjaEZvckxpbmtS
ZW1vdmluZ0V4aXN0aW4KICAgICAgICAgICAgIG5vZGUgPSBzdGFydE5vZGUtPnBhcmVudE5vZGUo
KTsKICAgICAgICAgICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzPEhU
TUxBbmNob3JFbGVtZW50Pigqbm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRvd25j
YXN0PEVsZW1lbnQ+KCpub2RlKS5nZXRBdHRyaWJ1dGUoZ2V0RERVUkxTY2hlbWUoKSkgIT0gInRy
dWUiKQorICAgICAgICAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdl
dEF0dHJpYnV0ZShkYXRhRGV0ZWN0b3JzVVJMU2NoZW1lKSAhPSAidHJ1ZSIpCiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVz
dWx0TGlua3NGcm9tQW5jaG9yKG5vZGUsIG5vZGUtPnBhcmVudEVsZW1lbnQoKSk7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtNDQ3LDggKzQ1NSwxMiBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpk
ZXRlY3RDb250ZW50SW5SCiAgICAgICAgIENGSW5kZXggZnJhZ21lbnRJbmRleCA9IHF1ZXJ5UmFu
Z2Uuc3RhcnQucXVlcnlJbmRleDsKICAgICAgICAgaWYgKGZyYWdtZW50SW5kZXggPT0gcXVlcnlS
YW5nZS5lbmQucXVlcnlJbmRleCkKICAgICAgICAgICAgIGZyYWdtZW50UmFuZ2VzLmFwcGVuZChU
ZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGN1cnJlbnRSYW5nZS5nZXQoKSwgcXVlcnlSYW5nZS5zdGFy
dC5vZmZzZXQsIHF1ZXJ5UmFuZ2UuZW5kLm9mZnNldCAtIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZyYWdtZW50UmFuZ2VzLmFwcGVuZChjdXJy
ZW50UmFuZ2UpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICghcXVlcnlSYW5nZS5z
dGFydC5vZmZzZXQpCisgICAgICAgICAgICAgICAgZnJhZ21lbnRSYW5nZXMuYXBwZW5kKGN1cnJl
bnRSYW5nZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnJhZ21lbnRSYW5n
ZXMuYXBwZW5kKFJhbmdlOjpjcmVhdGUoY3VycmVudFJhbmdlLT5vd25lckRvY3VtZW50KCksICZj
dXJyZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIGN1cnJlbnRSYW5nZS0+c3RhcnRPZmZzZXQo
KSArIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0LCAmY3VycmVudFJhbmdlLT5lbmRDb250YWluZXIo
KSwgY3VycmVudFJhbmdlLT5lbmRPZmZzZXQoKSkpOworICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICB3aGlsZSAoZnJhZ21lbnRJbmRleCA8IHF1ZXJ5UmFuZ2UuZW5kLnF1ZXJ5SW5kZXgpIHsK
ICAgICAgICAgICAgIGZyYWdtZW50SW5kZXgrKzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5
NTU1MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQxIEBACisyMDE2LTAxLTI1ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+
CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERhdGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZpbmcgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24gZmlsZXMgdG8gcGxhdGZvcm0gZm9sZGVyLAorICAgICAgICBzaW5jZSB0aGlzIGlzIG9u
bHkgdXNlZCBvbiBpT1MgYW5kIGNoYW5naW5nIGZyb20gLmNwcCB0byAubW0uCisgICAgICAgIFRo
ZSBzdHJ1Y3R1cmUgaXMgZXh0ZW5kZWQgdG8gaW5jbHVkZSBkYXRhIGRldGVjdGlvbiBzcGVjaWZp
YyBmaWVsZHMKKyAgICAgICAgYW5kIHRoZSByZWxldmFudCBlbmNvZGUvZGVjb2RlIGZ1bmN0aW9u
cyBoYXZlIGJlZW4gdXBkYXRlZCB0bworICAgICAgICBoYW5kbGUgdGhlIG5ldyBmaWVsZHMuCisg
ICAgICAgIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBuZXcgV0tVSURlbGVnYXRlUHJpdmF0ZSBtZXRo
b2QgdG8gYWxsb3cKKyAgICAgICAgdGhlIGNsaWVudCB0byBwcm92aWRlIGFkZGl0aW9uYWwgY29u
dGV4dCBmb3IgZGF0YSBkZXRlY3Rpb24gYWN0aW9ucy4KKworICAgICAgICAqIFNoYXJlZC9JbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hh
cmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmg6IFJlbW92ZWQuCisgICAgICAg
ICogU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24uaC4KKyAgICAgICAgKiBTaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb24uY3BwLgorICAgICAgICAoV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9y
bWF0aW9uQXRQb3NpdGlvbjo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6SW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb246OmRlY29kZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmg6IEFkZGluZyBuZXcgbWV0aG9kIHRvIHJldHJpZXZl
IGRhdGEgZGV0YWN0aW9uIGNvbnRleHQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oOiBSZW1vdmluZyBpbmNsdWRlIG9mIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
LmgKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW06CisgICAgICAg
ICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgc2hvd0RhdGFEZXRlY3RvcnNTaGVldF0pOiBBZGRp
bmcgc3VwcG9ydCBmb3IgdGhlIG5ldyBBUEkgaW4KKyAgICAgICAgRGF0YURldGVjdG9yc1VJIGZv
ciBXSzIuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgYWN0aW9uU2hlZXRBc3Npc3RhbnREaWRTdG9w
SW50ZXJhY3Rpb246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZGF0YURldGVjdGlvbkNv
bnRleHRGb3JBY3Rpb25TaGVldEFzc2lzdGFudDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyBzZWxlY3RlZFRleHRGb3JBY3Rpb25TaGVldEFzc2lzdGFudDpdKToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyBfZGF0YUZvclByZXZpZXdJdGVtQ29udHJvbGxlcjphdFBvc2l0aW9uOnR5cGU6
XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06IEFkZGluZyBp
bmNsdWRlIG9mIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgKKyAgICAgICAgKiBX
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRQ
b3NpdGlvbkluZm9ybWF0aW9uKToKKwogMjAxNi0wMS0yNSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgSGFuZGxlIHNvZnQgc3BhY2VzIGFmdGVyIGFjY2VwdGVkIGNh
bmRpZGF0ZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0
aW9uQXRQb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0lu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcAkocmV2aXNpb24gMTk1NDk1KQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5o
IgotCi0jaW5jbHVkZSAiQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0jaWYgUExBVEZPUk0oSU9TKQotdm9pZCBJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgcG9pbnQ7Ci0gICAgZW5jb2Rl
ciA8PCBub2RlQXRQb3NpdGlvbklzQXNzaXN0ZWROb2RlOwotICAgIGVuY29kZXIgPDwgaXNTZWxl
Y3RhYmxlOwotICAgIGVuY29kZXIgPDwgaXNOZWFyTWFya2VkVGV4dDsKLSAgICBlbmNvZGVyIDw8
IHRvdWNoQ2FsbG91dEVuYWJsZWQ7Ci0gICAgZW5jb2RlciA8PCBpc0xpbms7Ci0gICAgZW5jb2Rl
ciA8PCBpc0ltYWdlOwotICAgIGVuY29kZXIgPDwgaXNBbmltYXRlZEltYWdlOwotICAgIGVuY29k
ZXIgPDwgaXNDbGlja2FibGVFbGVtZW50OwotICAgIGVuY29kZXIgPDwgdXJsOwotICAgIGVuY29k
ZXIgPDwgaW1hZ2VVUkw7Ci0gICAgZW5jb2RlciA8PCB0aXRsZTsKLSAgICBlbmNvZGVyIDw8IGJv
dW5kczsKLSAgICBlbmNvZGVyIDw8IGxpbmtJbmRpY2F0b3I7Ci0KLSAgICBTaGFyZWFibGVCaXRt
YXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAgaWYgKGltYWdlKQotICAgICAgICBpbWFnZS0+Y3JlYXRl
SGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0gICAg
ZW5jb2RlciA8PCBoYW5kbGU7Ci19Ci0KLWJvb2wgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb246OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24mIHJlc3VsdCkKLXsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5wb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0Lm5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5vZGUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc1NlbGVjdGFi
bGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5pc05lYXJNYXJrZWRUZXh0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQudG91Y2hDYWxsb3V0RW5hYmxlZCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzTGluaykpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmlz
SW1hZ2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5pc0FuaW1hdGVkSW1hZ2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNDbGlja2FibGVFbGVtZW50KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
aW1hZ2VVUkwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC50aXRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LmJvdW5kcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmxpbmtJbmRpY2F0b3IpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShoYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIWhhbmRsZS5pc051bGwoKSkKLSAgICAgICAgcmVzdWx0LmltYWdlID0gU2hhcmVhYmxlQml0
bWFwOjpjcmVhdGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5o
CShyZXZpc2lvbiAxOTU0OTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbl9oCi0j
ZGVmaW5lIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uX2gKLQotI2lmIFBMQVRGT1JN
KElPUykKLQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxl
Qml0bWFwLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvU2VsZWN0aW9uUmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
c3RydWN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIHsKLSAgICBXZWJDb3JlOjpJ
bnRQb2ludCBwb2ludDsKLSAgICBib29sIG5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5vZGUgeyBm
YWxzZSB9OwotICAgIGJvb2wgaXNTZWxlY3RhYmxlIHsgZmFsc2UgfTsKLSAgICBib29sIGlzTmVh
ck1hcmtlZFRleHQgeyBmYWxzZSB9OwotICAgIGJvb2wgdG91Y2hDYWxsb3V0RW5hYmxlZCB7IHRy
dWUgfTsKLSAgICBib29sIGlzTGluayB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc0ltYWdlIHsgZmFs
c2UgfTsKLSAgICBib29sIGlzQW5pbWF0ZWRJbWFnZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc0Ns
aWNrYWJsZUVsZW1lbnQgeyBmYWxzZSB9OwotICAgIFN0cmluZyB1cmw7Ci0gICAgU3RyaW5nIGlt
YWdlVVJMOwotICAgIFN0cmluZyB0aXRsZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kczsK
LSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBpbWFnZTsKLQotICAgIFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3JEYXRhIGxpbmtJbmRpY2F0b3I7Ci0KLSAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3Vt
ZW50RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50
RGVjb2RlciYsIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJik7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBQTEFURk9STShJT1MpCi0KLSNlbmRpZiAvLyBJbnRlcmFjdGlvbkluZm9ybWF0
aW9uQXRQb3NpdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0ludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oCShyZXZpc2lvbiAx
OTUzMTYpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbi5oOjE5NTMxNikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlv
bl9oCisjZGVmaW5lIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uX2gKKworI2lmIFBM
QVRGT1JNKElPUykKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiU2hh
cmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvU2VsZWN0aW9uUmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRv
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworc3RydWN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIHsKKyAgICBXZWJD
b3JlOjpJbnRQb2ludCBwb2ludDsKKyAgICBib29sIG5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5v
ZGUgeyBmYWxzZSB9OworICAgIGJvb2wgaXNTZWxlY3RhYmxlIHsgZmFsc2UgfTsKKyAgICBib29s
IGlzTmVhck1hcmtlZFRleHQgeyBmYWxzZSB9OworICAgIGJvb2wgdG91Y2hDYWxsb3V0RW5hYmxl
ZCB7IHRydWUgfTsKKyAgICBib29sIGlzTGluayB7IGZhbHNlIH07CisgICAgYm9vbCBpc0ltYWdl
IHsgZmFsc2UgfTsKKyAgICBib29sIGlzQW5pbWF0ZWRJbWFnZSB7IGZhbHNlIH07CisgICAgYm9v
bCBpc0NsaWNrYWJsZUVsZW1lbnQgeyBmYWxzZSB9OworICAgIFN0cmluZyB1cmw7CisgICAgU3Ry
aW5nIGltYWdlVVJMOworICAgIFN0cmluZyB0aXRsZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGJv
dW5kczsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBpbWFnZTsKKworICAgIFdlYkNvcmU6
OlRleHRJbmRpY2F0b3JEYXRhIGxpbmtJbmRpY2F0b3I7CisKKyAgICB2b2lkIGVuY29kZShJUEM6
OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFy
Z3VtZW50RGVjb2RlciYsIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJik7Cit9Owor
Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKKyNlbmRpZiAvLyBJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0lu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDkgQEAgc3RydWN0
IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIAogICAgIGJvb2wgaXNJbWFnZSB7IGZh
bHNlIH07CiAgICAgYm9vbCBpc0FuaW1hdGVkSW1hZ2UgeyBmYWxzZSB9OwogICAgIGJvb2wgaXND
bGlja2FibGVFbGVtZW50IHsgZmFsc2UgfTsKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisg
ICAgYm9vbCBpc0RhdGFEZXRlY3RvckxpbmsgeyBmYWxzZSB9OworI2VuZGlmCiAgICAgU3RyaW5n
IHVybDsKICAgICBTdHJpbmcgaW1hZ2VVUkw7CiAgICAgU3RyaW5nIHRpdGxlOwpAQCAtNTQsNiAr
NTcsMTAgQEAgc3RydWN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIAogICAgIFJl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGltYWdlOwogCiAgICAgV2ViQ29yZTo6VGV4dEluZGljYXRv
ckRhdGEgbGlua0luZGljYXRvcjsKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgU3Ry
aW5nIGRhdGFEZXRlY3RvcklkZW50aWZpZXI7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IGRhdGFE
ZXRlY3RvclJlc3VsdHM7CisjZW5kaWYKIAogICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRF
bmNvZGVyJikgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNv
ZGVyJiwgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0
aW9uQXRQb3NpdGlvbi5tbQkocmV2aXNpb24gMTk1MzE2KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwOjE5NTMxNikKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24u
bW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24u
aCIKKworI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQg
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmVuY29kZShJUEM6OkFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHBvaW50OworICAgIGVuY29k
ZXIgPDwgbm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZTsKKyAgICBlbmNvZGVyIDw8IGlzU2Vs
ZWN0YWJsZTsKKyAgICBlbmNvZGVyIDw8IGlzTmVhck1hcmtlZFRleHQ7CisgICAgZW5jb2RlciA8
PCB0b3VjaENhbGxvdXRFbmFibGVkOworICAgIGVuY29kZXIgPDwgaXNMaW5rOworICAgIGVuY29k
ZXIgPDwgaXNJbWFnZTsKKyAgICBlbmNvZGVyIDw8IGlzQW5pbWF0ZWRJbWFnZTsKKyAgICBlbmNv
ZGVyIDw8IGlzQ2xpY2thYmxlRWxlbWVudDsKKyAgICBlbmNvZGVyIDw8IHVybDsKKyAgICBlbmNv
ZGVyIDw8IGltYWdlVVJMOworICAgIGVuY29kZXIgPDwgdGl0bGU7CisgICAgZW5jb2RlciA8PCBi
b3VuZHM7CisgICAgZW5jb2RlciA8PCBsaW5rSW5kaWNhdG9yOworCisgICAgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGlmIChpbWFnZSkKKyAgICAgICAgaW1hZ2UtPmNyZWF0
ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAg
IGVuY29kZXIgPDwgaGFuZGxlOworfQorCitib29sIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uJiByZXN1bHQpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQucG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5ub2RlQXRQb3NpdGlvbklzQXNzaXN0ZWROb2RlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNTZWxlY3Rh
YmxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuaXNOZWFyTWFya2VkVGV4dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRvdWNoQ2FsbG91dEVuYWJsZWQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0xpbmspKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5p
c0ltYWdlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuaXNBbmltYXRlZEltYWdlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzQ2xpY2thYmxlRWxlbWVudCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmltYWdlVVJMKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQudGl0bGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5ib3VuZHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5saW5rSW5kaWNhdG9yKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFoYW5kbGUuaXNOdWxsKCkpCisgICAgICAgIHJlc3VsdC5pbWFnZSA9IFNoYXJlYWJsZUJp
dG1hcDo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24ubW0JKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3Mv
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTIz
LDExICsyMywxMyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbi5oIgorI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJJbnRlcmFjdGlvbkluZm9y
bWF0aW9uQXRQb3NpdGlvbi5oIgogCi0jaW5jbHVkZSAiQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAi
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0ICJBcmd1bWVudENvZGVyc0NGLmgiCisj
aW1wb3J0ICJBcmd1bWVudHMuaCIKKyNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgor
I2ltcG9ydCA8V2ViQ29yZS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIApAQCAtNTMsNiArNTUsMTkgQEAgdm9pZCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbjo6ZQogICAgIGlmIChpbWFnZSkKICAgICAgICAgaW1hZ2UtPmNyZWF0ZUhhbmRsZSho
YW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwogICAgIGVuY29kZXIg
PDwgaGFuZGxlOworI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBlbmNvZGVyIDw8IGlz
RGF0YURldGVjdG9yTGluazsKKyAgICBpZiAoaXNEYXRhRGV0ZWN0b3JMaW5rKSB7CisgICAgICAg
IGVuY29kZXIgPDwgZGF0YURldGVjdG9ySWRlbnRpZmllcjsKKyAgICAgICAgUmV0YWluUHRyPE5T
TXV0YWJsZURhdGE+IGRhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdF0p
OworICAgICAgICBSZXRhaW5QdHI8TlNLZXllZEFyY2hpdmVyPiBhcmNoaXZlciA9IGFkb3B0TlMo
W1tOU0tleWVkQXJjaGl2ZXIgYWxsb2NdIGluaXRGb3JXcml0aW5nV2l0aE11dGFibGVEYXRhOmRh
dGEuZ2V0KCldKTsKKyAgICAgICAgW2FyY2hpdmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5nOllF
U107CisgICAgICAgIFthcmNoaXZlciBlbmNvZGVPYmplY3Q6ZGF0YURldGVjdG9yUmVzdWx0cy5n
ZXQoKSBmb3JLZXk6QCJkYXRhRGV0ZWN0b3JSZXN1bHRzIl07CisgICAgICAgIFthcmNoaXZlciBm
aW5pc2hFbmNvZGluZ107CisgICAgICAgIAorICAgICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBy
ZWludGVycHJldF9jYXN0PENGRGF0YVJlZj4oZGF0YS5nZXQoKSkpOyAgICAgICAgCisgICAgfQor
I2VuZGlmCiB9CiAKIGJvb2wgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmRlY29k
ZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24mIHJlc3VsdCkKQEAgLTEwNiw2ICsxMjEsMzAgQEAgYm9vbCBJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbjo6ZAogICAgIGlmICghaGFuZGxlLmlzTnVsbCgpKQogICAgICAg
ICByZXN1bHQuaW1hZ2UgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1l
bW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwogCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9O
KQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzRGF0YURldGVjdG9yTGluaykpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVzdWx0LmlzRGF0YURldGVjdG9y
TGluaykgeworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5kYXRhRGV0ZWN0b3JJ
ZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUmV0YWluUHRy
PENGRGF0YVJlZj4gZGF0YTsKKyAgICAgICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBkYXRh
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIFJldGFpblB0
cjxOU0tleWVkVW5hcmNoaXZlcj4gdW5hcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVkVW5hcmNo
aXZlciBhbGxvY10gaW5pdEZvclJlYWRpbmdXaXRoRGF0YTooTlNEYXRhICopZGF0YS5nZXQoKV0p
OworICAgICAgICBbdW5hcmNoaXZlciBzZXRSZXF1aXJlc1NlY3VyZUNvZGluZzpZRVNdOworICAg
ICAgICBAdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdC5kYXRhRGV0ZWN0b3JSZXN1bHRzID0gW3Vu
YXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzc2VzOltOU1NldCBzZXRXaXRoQXJyYXk6QFsgW05T
QXJyYXkgY2xhc3NdLCBnZXRERFNjYW5uZXJSZXN1bHRDbGFzcygpXV0gZm9yS2V5OkAiZGF0YURl
dGVjdG9yUmVzdWx0cyJdOworICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlv
bikgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVjb2RlIE5TQXJyeSBvZiBE
RFNjYW5SZXN1bHQ6ICVAIiwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW3VuYXJjaGl2ZXIgZmluaXNoRGVjb2Rpbmdd
OworICAgIH0KKyNlbmRpZgorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDE5NTQ5NSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIkVkaXRpbmdSYW5nZS5oIgogI2luY2x1ZGUgIkVk
aXRvclN0YXRlLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXJQcm94eS5oIgotI2luY2x1ZGUgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgi
CiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIu
aCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5o
IgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1VJRGVsZWdhdGVQcml2YXRlLmgJKHJldmlzaW9uIDE5NTQ5NSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw3ICs1OSw3IEBAIHN0cnVjdCBVSUVkZ2VJbnNldHM7CiAtICh2b2lkKV93ZWJW
aWV3RGlkRXhpdEZ1bGxzY3JlZW46KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVZBSUxBQkxFKDEw
XzExLCA4XzMpOwogCiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGltYWdl
T3JNZWRpYURvY3VtZW50U2l6ZUNoYW5nZWQ6KENHU2l6ZSlzaXplIFdLX0FWQUlMQUJMRShXS19N
QUNfVEJBLCBXS19JT1NfVEJBKTsKLQorLSAoTlNEaWN0aW9uYXJ5ICopX2RhdGFEZXRlY3Rpb25D
b250ZXh0Rm9yV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BVkFJTEFCTEUoV0tfTUFD
X1RCQSwgV0tfSU9TX1RCQSk7CiAjaWYgVEFSR0VUX09TX0lQSE9ORQogLSAoQk9PTClfd2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldyBzaG91bGRJbmNsdWRlQXBwTGlua0FjdGlvbnNGb3JFbGVt
ZW50OihfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKWVsZW1lbnQgV0tfQVZBSUxBQkxFKE5BLCA5
XzApOwogLSAoTlNBcnJheSAqKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGFjdGlvbnNG
b3JFbGVtZW50OihfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKWVsZW1lbnQgZGVmYXVsdEFjdGlv
bnM6KFdLX0FSUkFZKF9XS0VsZW1lbnRBY3Rpb24gKikgKilkZWZhdWx0QWN0aW9uczsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFz
c2lzdGFudC5oCShyZXZpc2lvbiAxOTU0OTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUs
OCBAQCBzdHJ1Y3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb247CiAtICh2b2lkKXVw
ZGF0ZVBvc2l0aW9uSW5mb3JtYXRpb25Gb3JBY3Rpb25TaGVldEFzc2lzdGFudDooV0tBY3Rpb25T
aGVldEFzc2lzdGFudCAqKWFzc2lzdGFudDsKIC0gKHZvaWQpYWN0aW9uU2hlZXRBc3Npc3RhbnQ6
KFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQgKilhc3Npc3RhbnQgd2lsbFN0YXJ0SW50ZXJhY3Rpb25X
aXRoRWxlbWVudDooX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKillbGVtZW50OwogLSAodm9pZClh
Y3Rpb25TaGVldEFzc2lzdGFudERpZFN0b3BJbnRlcmFjdGlvbjooV0tBY3Rpb25TaGVldEFzc2lz
dGFudCAqKWFzc2lzdGFudDsKKy0gKE5TRGljdGlvbmFyeSAqKWRhdGFEZXRlY3Rpb25Db250ZXh0
Rm9yQWN0aW9uU2hlZXRBc3Npc3RhbnQ6KFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQgKilhc3Npc3Rh
bnQ7CistIChOU1N0cmluZyAqKXNlbGVjdGVkVGV4dEZvckFjdGlvblNoZWV0QXNzaXN0YW50OihX
S0FjdGlvblNoZWV0QXNzaXN0YW50ICopYXNzaXN0YW50OwogCiBAZW5kCiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3Rh
bnQubW0JKHJldmlzaW9uIDE5NTQ5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
V0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksMTAg
QEAgU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFRDQykKIFNPRlRfTElOSyhUQ0MsIFRDQ0Fj
Y2Vzc1ByZWZsaWdodCwgVENDQWNjZXNzUHJlZmxpZ2h0UmVzdWx0LCAoQ0ZTdHJpbmdSZWYgc2Vy
dmljZSwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpLCAoc2VydmljZSwgb3B0aW9ucykpCiBTT0ZU
X0xJTktfQ09OU1RBTlQoVENDLCBrVENDU2VydmljZVBob3RvcywgQ0ZTdHJpbmdSZWYpCiAKK0Bp
bnRlcmZhY2UgREREZXRlY3Rpb25Db250cm9sbGVyIChTdGFnaW5nVG9SZW1vdmUpCistIChOU0Fy
cmF5ICopYWN0aW9uc0ZvclVSTDooTlNVUkwgKil1cmwgaWRlbnRpZmllcjooTlNTdHJpbmcgKilp
ZGVudGlmaWVyIHNlbGVjdGVkVGV4dDooTlNTdHJpbmcgKilzZWxlY3RlZFRleHQgcmVzdWx0czoo
TlNBcnJheSAqKXJlc3VsdHMgY29udGV4dDooTlNEaWN0aW9uYXJ5ICopY29udGV4dDsKK0BlbmQK
KwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogI2lmIEhBVkUoQVBQX0xJTktTKQpAQCAtNDE0
LDE0ICs0MTgsMjcgQEAgLSAodm9pZClzaG93RGF0YURldGVjdG9yc1NoZWV0CiAgICAgaWYgKCFk
ZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlNVUkwgKnRhcmdldFVSTCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOltkZWxlZ2F0ZSBwb3NpdGlvbkluZm9ybWF0aW9uRm9yQWN0aW9uU2hl
ZXRBc3Npc3RhbnQ6c2VsZl0udXJsXTsKKyAgICBjb25zdCBXZWJLaXQ6OkludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uJiBwb3NpdGlvbkluZm9ybWF0aW9uID0gW2RlbGVnYXRlIHBvc2l0
aW9uSW5mb3JtYXRpb25Gb3JBY3Rpb25TaGVldEFzc2lzdGFudDpzZWxmXTsKKyAgICBOU1VSTCAq
dGFyZ2V0VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6cG9zaXRpb25JbmZvcm1hdGlvbi51cmxd
OwogICAgIGlmICghdGFyZ2V0VVJMKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIVtbZ2V0
REREZXRlY3Rpb25Db250cm9sbGVyQ2xhc3MoKSB0YXBBbmRIb2xkU2NoZW1lc10gY29udGFpbnNP
YmplY3Q6W3RhcmdldFVSTCBzY2hlbWVdXSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlNBcnJh
eSAqZGF0YURldGVjdG9yc0FjdGlvbnMgPSBbW2dldERERGV0ZWN0aW9uQ29udHJvbGxlckNsYXNz
KCkgc2hhcmVkQ29udHJvbGxlcl0gYWN0aW9uc0ZvckFuY2hvcjpuaWwgdXJsOnRhcmdldFVSTCBm
b3JGcmFtZTpuaWxdOworICAgIERERGV0ZWN0aW9uQ29udHJvbGxlciAqY29udHJvbGxlciA9IFtn
ZXRERERldGVjdGlvbkNvbnRyb2xsZXJDbGFzcygpIHNoYXJlZENvbnRyb2xsZXJdOworICAgIE5T
QXJyYXkgKmRhdGFEZXRlY3RvcnNBY3Rpb25zID0gbmlsOworICAgIGlmIChbY29udHJvbGxlciBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGFjdGlvbnNGb3JVUkw6aWRlbnRpZmllcjpzZWxl
Y3RlZFRleHQ6cmVzdWx0czpjb250ZXh0OildKSB7CisgICAgICAgIE5TRGljdGlvbmFyeSAqY29u
dGV4dCA9IG5pbDsKKyAgICAgICAgTlNTdHJpbmcgKnRleHRBdFNlbGVjdGlvbiA9IG5pbDsKKwor
ICAgICAgICBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZGF0YURl
dGVjdGlvbkNvbnRleHRGb3JBY3Rpb25TaGVldEFzc2lzdGFudDopXSkKKyAgICAgICAgICAgIGNv
bnRleHQgPSBbZGVsZWdhdGUgZGF0YURldGVjdGlvbkNvbnRleHRGb3JBY3Rpb25TaGVldEFzc2lz
dGFudDpzZWxmXTsKKyAgICAgICAgaWYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHNlbGVjdGVkVGV4dEZvckFjdGlvblNoZWV0QXNzaXN0YW50OildKQorICAgICAgICAg
ICAgdGV4dEF0U2VsZWN0aW9uID0gW2RlbGVnYXRlIHNlbGVjdGVkVGV4dEZvckFjdGlvblNoZWV0
QXNzaXN0YW50OnNlbGZdOworICAgICAgICBkYXRhRGV0ZWN0b3JzQWN0aW9ucyA9IFtjb250cm9s
bGVyIGFjdGlvbnNGb3JVUkw6dGFyZ2V0VVJMIGlkZW50aWZpZXI6cG9zaXRpb25JbmZvcm1hdGlv
bi5kYXRhRGV0ZWN0b3JJZGVudGlmaWVyIHNlbGVjdGVkVGV4dDp0ZXh0QXRTZWxlY3Rpb24gcmVz
dWx0czpwb3NpdGlvbkluZm9ybWF0aW9uLmRhdGFEZXRlY3RvclJlc3VsdHMuZ2V0KCkgY29udGV4
dDpjb250ZXh0XTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGF0YURldGVjdG9yc0FjdGlvbnMgPSBb
Y29udHJvbGxlciBhY3Rpb25zRm9yQW5jaG9yOm5pbCB1cmw6dGFyZ2V0VVJMIGZvckZyYW1lOm5p
bF07CiAgICAgaWYgKFtkYXRhRGV0ZWN0b3JzQWN0aW9ucyBjb3VudF0gPT0gMCkKICAgICAgICAg
cmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkocmV2aXNpb24gMTk1NDk1KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHdv
cmtpbmcgY29weSkKQEAgLTIzNyw2ICsyMzcsMTAgQEAgQGludGVyZmFjZSBVSVByZXZpZXdJdGVt
Q29udHJvbGxlciAoU3RhZwogQGVuZAogI2VuZGlmCiAKK0BpbnRlcmZhY2UgREREZXRlY3Rpb25D
b250cm9sbGVyIChTdGFnaW5nVG9SZW1vdmUpCistIChERFJlc3VsdFJlZilyZXN1bHRGb3JVUkw6
KE5TVVJMICopdXJsIGlkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBzZWxlY3RlZFRl
eHQ6KE5TU3RyaW5nICopc2VsZWN0ZWRUZXh0IHJlc3VsdHM6KE5TQXJyYXkgKilyZXN1bHRzIGNv
bnRleHQ6KE5TRGljdGlvbmFyeSAqKWNvbnRleHQgZXh0ZW5kZWRDb250ZXh0OihOU0RpY3Rpb25h
cnkgKiopZXh0ZW5kZWRDb250ZXh0OworQGVuZAorCiBAaW50ZXJmYWNlIFdLRm9jdXNlZEVsZW1l
bnRJbmZvIDogTlNPYmplY3QgPF9XS0ZvY3VzZWRFbGVtZW50SW5mbz4KIC0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOihjb25zdCBBc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbiYpaW5mb3JtYXRpb24gaXNVc2VySW5pdGlhdGVkOihCT09MKWlzVXNlckluaXRpYXRl
ZDsKIEBlbmQKQEAgLTM0NzEsNiArMzQ3NSwyMCBAQCAtICh2b2lkKWFjdGlvblNoZWV0QXNzaXN0
YW50RGlkU3RvcEludGVyCiAgICAgX3BhZ2UtPnN0b3BJbnRlcmFjdGlvbigpOwogfQogCistIChO
U0RpY3Rpb25hcnkgKilkYXRhRGV0ZWN0aW9uQ29udGV4dEZvckFjdGlvblNoZWV0QXNzaXN0YW50
OihXS0FjdGlvblNoZWV0QXNzaXN0YW50ICopYXNzaXN0YW50Cit7CisgICAgTlNEaWN0aW9uYXJ5
KiBjb250ZXh0ID0gbmlsOworICAgIGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVnYXRl
ID0gc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihbX3dlYlZpZXcgVUlEZWxl
Z2F0ZV0pOworICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KF9kYXRhRGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXc6KV0pCisgICAgICAgIGNvbnRleHQgPSBb
dWlEZWxlZ2F0ZSBfZGF0YURldGVjdGlvbkNvbnRleHRGb3JXZWJWaWV3Ol93ZWJWaWV3XTsKKyAg
ICByZXR1cm4gY29udGV4dDsKK30KKworLSAoTlNTdHJpbmcgKilzZWxlY3RlZFRleHRGb3JBY3Rp
b25TaGVldEFzc2lzdGFudDooV0tBY3Rpb25TaGVldEFzc2lzdGFudCAqKWFzc2lzdGFudAorewor
ICAgIHJldHVybiBbc2VsZiBzZWxlY3RlZFRleHRdOworfQorCiBAZW5kCiAKICNpZiBIQVZFKExJ
TktfUFJFVklFVykKQEAgLTM1NDUsNyArMzU2Myw3IEBAIC0gKE5TRGljdGlvbmFyeSAqKV9kYXRh
Rm9yUHJldmlld0l0ZW1Db24KICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIFN0cmluZyBhYnNv
bHV0ZUxpbmtVUkwgPSBfcG9zaXRpb25JbmZvcm1hdGlvbi51cmw7Ci0gICAgaWYgKCF1c2VJbWFn
ZVVSTEZvckxpbmsgJiYgKGFic29sdXRlTGlua1VSTC5pc0VtcHR5KCkgfHwgIVdlYkNvcmU6OnBy
b3RvY29sSXNJbkhUVFBGYW1pbHkoYWJzb2x1dGVMaW5rVVJMKSkpIHsKKyAgICBpZiAoIXVzZUlt
YWdlVVJMRm9yTGluayAmJiAoYWJzb2x1dGVMaW5rVVJMLmlzRW1wdHkoKSB8fCAoIVdlYkNvcmU6
OnByb3RvY29sSXNJbkhUVFBGYW1pbHkoYWJzb2x1dGVMaW5rVVJMKSAmJiAhX3Bvc2l0aW9uSW5m
b3JtYXRpb24uaXNEYXRhRGV0ZWN0b3JMaW5rKSkpIHsKICAgICAgICAgaWYgKGNhblNob3dMaW5r
UHJldmlldyAmJiAhY2FuU2hvd0ltYWdlUHJldmlldykKICAgICAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgICAgIGNhblNob3dMaW5rUHJldmlldyA9IE5POwpAQCAtMzU1OCw2ICszNTc2LDIyIEBA
IC0gKE5TRGljdGlvbmFyeSAqKV9kYXRhRm9yUHJldmlld0l0ZW1Db24KICAgICAgICAgICAgIGRh
dGFGb3JQcmV2aWV3W1VJUHJldmlld0RhdGFMaW5rXSA9IFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZT
dHJpbmc6X3Bvc2l0aW9uSW5mb3JtYXRpb24uaW1hZ2VVUkxdOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBkYXRhRm9yUHJldmlld1tVSVByZXZpZXdEYXRhTGlua10gPSBbTlNVUkwgX3dlYl9V
UkxXaXRoV1RGU3RyaW5nOl9wb3NpdGlvbkluZm9ybWF0aW9uLnVybF07CisgICAgICAgIGlmIChf
cG9zaXRpb25JbmZvcm1hdGlvbi5pc0RhdGFEZXRlY3RvckxpbmspIHsKKyAgICAgICAgICAgIE5T
RGljdGlvbmFyeSogY29udGV4dCA9IG5pbDsKKyAgICAgICAgICAgIGlkIDxXS1VJRGVsZWdhdGVQ
cml2YXRlPiB1aURlbGVnYXRlID0gc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
PihbX3dlYlZpZXcgVUlEZWxlZ2F0ZV0pOworICAgICAgICAgICAgaWYgKFt1aURlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2RhdGFEZXRlY3Rpb25Db250ZXh0Rm9yV2ViVmll
dzopXSkKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gW3VpRGVsZWdhdGUgX2RhdGFEZXRlY3Rp
b25Db250ZXh0Rm9yV2ViVmlldzpfd2ViVmlld107CisKKyAgICAgICAgICAgIERERGV0ZWN0aW9u
Q29udHJvbGxlciAqY29udHJvbGxlciA9IFtnZXRERERldGVjdGlvbkNvbnRyb2xsZXJDbGFzcygp
IHNoYXJlZENvbnRyb2xsZXJdOworICAgICAgICAgICAgaWYgKFtjb250cm9sbGVyIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IocmVzdWx0Rm9yVVJMOmlkZW50aWZpZXI6c2VsZWN0ZWRUZXh0
OnJlc3VsdHM6Y29udGV4dDpleHRlbmRlZENvbnRleHQ6KV0pIHsKKyAgICAgICAgICAgICAgICBO
U0RpY3Rpb25hcnkgKm5ld0NvbnRleHQgPSBuaWw7CisgICAgICAgICAgICAgICAgRERSZXN1bHRS
ZWYgZGRSZXN1bHQgPSBbY29udHJvbGxlciByZXN1bHRGb3JVUkw6ZGF0YUZvclByZXZpZXdbVUlQ
cmV2aWV3RGF0YUxpbmtdIGlkZW50aWZpZXI6X3Bvc2l0aW9uSW5mb3JtYXRpb24uZGF0YURldGVj
dG9ySWRlbnRpZmllciBzZWxlY3RlZFRleHQ6W3NlbGYgc2VsZWN0ZWRUZXh0XSByZXN1bHRzOl9w
b3NpdGlvbkluZm9ybWF0aW9uLmRhdGFEZXRlY3RvclJlc3VsdHMuZ2V0KCkgY29udGV4dDpjb250
ZXh0IGV4dGVuZGVkQ29udGV4dDombmV3Q29udGV4dF07CisgICAgICAgICAgICAgICAgaWYgKGRh
dGFGb3JQcmV2aWV3KQorICAgICAgICAgICAgICAgICAgICBkYXRhRm9yUHJldmlld1tVSVByZXZp
ZXdEYXRhRERSZXN1bHRdID0gKF9fYnJpZGdlIGlkKWRkUmVzdWx0OworICAgICAgICAgICAgICAg
IGlmIChuZXdDb250ZXh0KQorICAgICAgICAgICAgICAgICAgICBkYXRhRm9yUHJldmlld1tVSVBy
ZXZpZXdEYXRhRERDb250ZXh0XSA9IG5ld0NvbnRleHQ7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KICAgICB9IGVsc2UgaWYgKGNhblNob3dJbWFnZVByZXZpZXcpIHsKICAgICAgICAgKnR5cGUg
PSBVSVByZXZpZXdJdGVtVHlwZUltYWdlOwogICAgICAgICBkYXRhRm9yUHJldmlld1tVSVByZXZp
ZXdEYXRhTGlua10gPSBbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl9wb3NpdGlvbkluZm9y
bWF0aW9uLmltYWdlVVJMXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2Vi
UGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAxOTU0OTUpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2ltcG9ydCAiQVBJVUlDbGllbnQuaCIKICNpbXBvcnQgIkRhdGFSZWZlcmVu
Y2UuaCIKICNpbXBvcnQgIkVkaXRpbmdSYW5nZS5oIgorI2ltcG9ydCAiSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb24uaCIKICNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIK
ICNpbXBvcnQgIlBhZ2VDbGllbnQuaCIKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHkuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NTQ5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY5Niwx
MCArMTY5NiwxMCBAQAogCQlDNTc0QTU4MTEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5
cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0
QTU3RjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggKi87IH07CiAJCUM1NzRB
NTgyMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0QTU4MDEyRTY2NjgxMDAyREZFOTgg
LyogUGFzdGVib2FyZFR5cGVzLm1tICovOyB9OwogCQlDNThDREYyQTE4ODc1NDhCMDA4NzE1MzYg
LyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1OENERjI4MTg4NzU0OEIwMDg3MTUzNiAvKiBJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oICovOyB9OwotCQlDNThDREYyRDE4ODc2
MDlGMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4Q0RGMkIxODg3NjA5
RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcCAqLzsgfTsK
LQkJQzU4Q0RGMkUxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NThDREYyQzE4ODc2MDlGMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24uaCAqLzsgfTsKIAkJQzU5QzRBNTgxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM1OUM0QTU2MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5j
cHAgKi87IH07CiAJCUM1OUM0QTU5MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzU5QzRBNTcxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmggKi87
IH07CisJCUM1QkNFNURFMUM1MDc2NjMwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM1QkNFNURCMUM1MDc2MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbi5tbSAqLzsgfTsKKwkJQzVCQ0U1REYxQzUwNzY2QTAwQ0RFM0ZBIC8qIEludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNUJDRTVEQTFDNTA3NjFEMDBDREUzRkEgLyogSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24uaCAqLzsgfTsKIAkJQzVFMUFGRTgxNkIyMEI2NzAwNkNDMUYy
IC8qIFdLV2ViQXJjaGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzMyOURBNTE2QUNFNUE5MDAzMTZERTIgLyogV0tXZWJBcmNoaXZlLmNwcCAq
LzsgfTsKIAkJQzVFMUFGRTkxNkIyMEI3NTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMjlEQTYxNkFDRTVB
OTAwMzE2REUyIC8qIFdLV2ViQXJjaGl2ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUM1RTFBRkVBMTZCMjBCN0IwMDZDQzFGMiAvKiBXS1dlYkFy
Y2hpdmVSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzMyOURBOTE2QUNFNUJGMDAzMTZERTIgLyogV0tXZWJBcmNoaXZlUmVzb3VyY2Uu
Y3BwICovOyB9OwpAQCAtMzkzOSwxMCArMzkzOSwxMCBAQAogCQlDNTc0QTU3RjEyRTY2NjgxMDAy
REZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhc3RlYm9hcmRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTc0
QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFzdGVib2FyZFR5cGVzLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDNThDREYyODE4ODc1NDhCMDA4NzE1MzYgLyogSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQzU4Q0RGMkIxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQzU4Q0RGMkMxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUM1OUM0QTU2MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1OUM0QTU3MThCODEx
NzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDNUJDRTVEQTFDNTA3NjFEMDBDREUzRkEgLyogSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaDsgcGF0aCA9IGlvcy9JbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
NUJDRTVEQjFDNTA3NjFEMDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBJbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbTsgcGF0aCA9IGlvcy9JbnRlcmFjdGlvbkluZm9ybWF0
aW9uQXRQb3NpdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzVGQTFFRDEx
OEUxMDYyMjAwQjNGNDAyIC8qIFdLQWlyUGxheVJvdXRlUGlja2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdLQWlyUGxheVJvdXRlUGlja2VyLmg7IHBhdGggPSBpb3MvZm9y
bXMvV0tBaXJQbGF5Um91dGVQaWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzVGQTFFRDIxOEUxMDYyMjAwQjNGNDAyIC8qIFdLQWlyUGxheVJvdXRlUGlja2VyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tBaXJQbGF5Um91dGVQaWNrZXIu
bW07IHBhdGggPSBpb3MvZm9ybXMvV0tBaXJQbGF5Um91dGVQaWNrZXIubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUM5OEM0OEEzMUI2RkQ0QzMwMDE0NTEwMyAvKiBXZWJNZWRpYVNl
c3Npb25Gb2N1c01hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQ3MzQsOCArNDczNCw2IEBACiAJCQkJMUFDNzVBMUExQjMzNjgyNzAwNTY3NDVC
IC8qIEhhbmdEZXRlY3Rpb25EaXNhYmxlci5oICovLAogCQkJCUY2Mzg5NTRGMTMzQkVGMzgwMDg5
NDFENSAvKiBIVFRQQ29va2llQWNjZXB0UG9saWN5LmggKi8sCiAJCQkJQkNDRjZCMjMxMkM5M0U3
QTAwOEY5QzM1IC8qIEltYWdlT3B0aW9ucy5oICovLAotCQkJCUM1OENERjJCMTg4NzYwOUYwMDg3
MTUzNiAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHAgKi8sCi0JCQkJQzU4
Q0RGMkMxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
LmggKi8sCiAJCQkJMUE5MkRDMTIxMkY4QkFCOTAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQu
Y3BwICovLAogCQkJCTFBOTJEQzEwMTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0
LmggKi8sCiAJCQkJMkQ1MDM2NkExQkNERTE3OTAwRTIwQkIzIC8qIE5hdGl2ZVdlYkdlc3R1cmVF
dmVudC5oICovLApAQCAtNTA5Nyw2ICs1MDk1LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUE3
RTkzQ0VCMTkyNTMxQUEwMEExREM0OCAvKiBDaGlsZFByb2Nlc3NJT1MubW0gKi8sCiAJCQkJMkRB
OTQ0OUQxODg0RTRGMDAwRUQ4NkRCIC8qIEdlc3R1cmVUeXBlcy5oICovLAorCQkJCUM1QkNFNURB
MUM1MDc2MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oICov
LAorCQkJCUM1QkNFNURCMUM1MDc2MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbi5tbSAqLywKIAkJCQkyREE5NDQ5NzE4ODRFNEYwMDBFRDg2REIgLyogTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudElPUy5tbSAqLywKIAkJCQkyREE5NDQ5ODE4ODRFNEYwMDBFRDg2REIg
LyogTmF0aXZlV2ViVG91Y2hFdmVudElPUy5tbSAqLywKIAkJCQlBMTE4QTlFQzE5MDdBRDZGMDBG
N0M5MkIgLyogUXVpY2tMb29rRG9jdW1lbnREYXRhLmNwcCAqLywKQEAgLTc2NjQsNiArNzY2NCw3
IEBACiAJCQkJQzVFMUFGRUQxNkIyMTAxNzAwNkNDMUYyIC8qIEFQSVdlYkFyY2hpdmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUM1RTFBRkVGMTZCMjEwMjkwMDZDQzFGMiAvKiBBUElXZWJBcmNoaXZl
UmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNDgzMkM4MUE5QkMxM0MwMDhCNERGRSAv
KiBBUElXZWJzaXRlRGF0YVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzVCQ0U1REYxQzUw
NzY2QTAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQTM2MzVBQTFBMzE0NEEzMDBFRDYxOTcgLyogQVBJV2Vic2l0ZURhdGFT
dG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2NTYzRTUxQjdBOEM1MDAwOUNGNzg3IC8qIEFQ
SVdpbmRvd0ZlYXR1cmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUQ0QzE5MzFCMzlGMzMyMDBB
QkMyOEUgLyogQXBwbGljYXRpb25TdGF0ZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzc2
OSw3ICs3NzcwLDYgQEAKIAkJCQlCQ0E4QzZCMDExRTNDMDg3MDA4MTJGQjcgLyogSW5qZWN0ZWRC
dW5kbGVQYWdlVUlDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzNFMEQxMTI0MDhFODYw
MDM2MEYzRiAvKiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE0REY3NzEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4Q0RGMkUxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNThDREYyQTE4
ODc1NDhCMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBRTQ5QTQ5MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUU0OTg3ODExRkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC05NDk4LDcgKzk0OTgsNiBAQAogCQkJCUJDQThDNkFGMTFF
M0MwODcwMDgxMkZCNyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzMzRTBEMjEyNDA4RTg2MDAzNjBGM0YgLyogSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzE0REY3ODEyMEI1Qjc5MDA4MjZDMEMg
LyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDNThD
REYyRDE4ODc2MDlGMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFNDlBNEExMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBN
ZXRob2QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFNDk4NzkxMUZGN0ZBQTAwNDhCNDY0IC8q
IEpTTlBPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMDkzNzcxNEZCMTI4QzAwMTEz
OEQ5IC8qIExheWVySG9zdGluZ0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKQEAgLTk5OTEsNiAr
OTk5MCw3IEBACiAJCQkJNTEyRjU4RjkxMkE4OEE1NDAwNjI5NTMwIC8qIFdLQ3JlZGVudGlhbC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzVGNzEyNEZGMDI3MDA2OEYyMEEgLyogV0tEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRkY0OTAwMTgzM0RFNzgwMDlBQjE1QSAvKiBXS0Rl
cHJlY2F0ZWRGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzVCQ0U1REUxQzUwNzY2
MzAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkM0MDc1RjkxMjRGRjAyNzAwNjhGMjBBIC8qIFdLRGljdGlvbmFyeS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzAxN0QwODE2MjYwRkY0MDA3MDU0RjUgLyogV0tET01Eb2N1
bWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMDE3RDBBMTYyNjBGRjQwMDcwNTRGNSAvKiBX
S0RPTUVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDE5NTQ5
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2ltcG9ydCAiV2ViUHJvY2Vzcy5o
IgogI2ltcG9ydCA8Q29yZVRleHQvQ1RGb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9EYXRhRGV0ZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Rp
YWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RpYWdub3N0aWNMb2dn
aW5nS2V5cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Lmg+CkBAIC0yMjAyLDYgKzIyMDMs
MTMgQEAgdm9pZCBXZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbgogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRleHRJbmRpY2F0b3IpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mby5saW5rSW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwogICAgICAg
ICAgICAgICAgICAgICB9CisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICAgICAg
ICAgICAgICBpbmZvLmlzRGF0YURldGVjdG9yTGluayA9IERhdGFEZXRlY3Rpb246OmlzRGF0YURl
dGVjdG9yTGluayhlbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uaXNEYXRh
RGV0ZWN0b3JMaW5rKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmRhdGFEZXRlY3Rv
cklkZW50aWZpZXIgPSBEYXRhRGV0ZWN0aW9uOjpkYXRhRGV0ZWN0b3JJZGVudGlmaWVyKGVsZW1l
bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5kYXRhRGV0ZWN0b3JSZXN1bHRzID0g
ZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5kYXRhRGV0ZWN0aW9uUmVzdWx0cygpOworICAg
ICAgICAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVs
ZW1lbnQtPnJlbmRlcmVyKCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbWFnZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGluZm8uaXNJbWFnZSA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHJlbmRlckltYWdlID0gZG93bmNhc3Q8UmVuZGVySW1hZ2U+KCooZWxl
bWVudC0+cmVuZGVyZXIoKSkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269807</attachid>
            <date>2016-01-25 15:38:07 -0800</date>
            <delta_ts>2016-01-25 15:48:49 -0800</delta_ts>
            <desc>Final work with build fixes</desc>
            <filename>ddwk2-part3.txt</filename>
            <type>text/plain</type>
            <size>45032</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTAxLTI1ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcg
bmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGRhdGEgZGV0ZWN0aW9uIHJlbGF0ZWQgdGFza3MuCisg
ICAgICAgIFRoZSBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIHdoZW4gY3JlYXRpbmcgRE9NIHJhbmdl
cyBmcm9tIEREUXVlcnlSYW5nZQorICAgICAgICBzcGFubmluZyBtdWx0aXBsZSBmcmFnbWVudHMu
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaDoKKyAgICAgICAgKiBl
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0
ZWN0aW9uOjppc0RhdGFEZXRlY3RvckxpbmspOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVj
dGlvbjo6ZGF0YURldGVjdG9ySWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJ
dGVtQXRQb3NpdGlvbldpdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9u
OjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpyZXN1
bHRJc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtz
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdl
KToKKwogMjAxNi0wMS0yNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAg
IEZpeCB0aGUgQVNBTiBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RGF0YURldGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5oCShyZXZpc2lvbiAxOTU1NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4
LDE0IEBACiAKICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBPQkpDX0NMQVNTIEREQWN0aW9u
Q29udGV4dDsKIE9CSkNfQ0xBU1MgTlNBcnJheTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBFbGVtZW50OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNs
YXNzIFJhbmdlOwpAQCAtNTUsNiArNTcsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0
UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5k
aW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSk7CiAjZW5kaWYKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgTlNBcnJheSAqZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRy
PFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGV0ZWN0b3JUeXBlcyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgaXNEYXRhRGV0ZWN0b3JMaW5rKEVsZW1lbnQqKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGRhdGFEZXRlY3RvcklkZW50aWZpZXIoRWxlbWVudCop
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24gMTk1NTU5KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00NSwxNCArNDUsMjIgQEAKICNpbXBvcnQgIlZpc2libGVVbml0cy5oIgogI2ltcG9ydCAi
aHRtbGVkaXRpbmcuaCIKIAotI2lmIFBMQVRGT1JNKElPUykKIGNvbnN0IGNoYXIgKmRhdGFEZXRl
Y3RvcnNVUkxTY2hlbWUgPSAieC1hcHBsZS1kYXRhLWRldGVjdG9ycyI7CiBjb25zdCBjaGFyICpk
YXRhRGV0ZWN0b3JzQXR0cmlidXRlVHlwZUtleSA9ICJ4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzLXR5
cGUiOwogY29uc3QgY2hhciAqZGF0YURldGVjdG9yc0F0dHJpYnV0ZVJlc3VsdEtleSA9ICJ4LWFw
cGxlLWRhdGEtZGV0ZWN0b3JzLXJlc3VsdCI7Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitib29sIERhdGFEZXRlY3Rpb246OmlzRGF0YURldGVjdG9yTGluayhFbGVtZW50KiBlbGVt
ZW50KQoreworICAgIHJldHVybiBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoZGF0YURldGVjdG9yc1VS
TFNjaGVtZSkgPT0gInRydWUiOworfQorCitTdHJpbmcgRGF0YURldGVjdGlvbjo6ZGF0YURldGVj
dG9ySWRlbnRpZmllcihFbGVtZW50KiBlbGVtZW50KQoreworICAgIHJldHVybiBlbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoZGF0YURldGVjdG9yc0F0dHJpYnV0ZVJlc3VsdEtleSk7Cit9CisKICNpZiBQ
TEFURk9STShNQUMpCiAKIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJ
dGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24sIFJlZlB0cjxS
YW5nZT4gY29udGV4dFJhbmdlLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBS
ZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKQEAgLTE0NSw3ICsxNTMsNyBAQCBSZXRh
aW5QdHI8RERBY3Rpb25Db250ZXh0PiBEYXRhRGV0ZWN0aW9uCiAgICAgcmV0dXJuIGRldGVjdEl0
ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKHBvc2l0aW9uLCBjb250ZXh0UmFuZ2UsIGRldGVjdGVkRGF0
YUJvdW5kaW5nQm94LCBkZXRlY3RlZERhdGFSYW5nZSk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQotICAgIAorCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIAogc3RhdGljIEJPT0wgcmVzdWx0
SXNVUkwoRERSZXN1bHRSZWYgcmVzdWx0KQpAQCAtMTkwLDcgKzE5OCw3IEBAIHN0YXRpYyB2b2lk
IHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcigKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBCT09MIG5vZGVJc0REQW5jaG9yID0gaXM8SFRNTEFuY2hvckVsZW1l
bnQ+KCpub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKGdldF9E
YXRhRGV0ZWN0b3JzQ29yZV9ERFVSTFNjaGVtZSgpKSA9PSAidHJ1ZSI7CisgICAgQk9PTCBub2Rl
SXNEREFuY2hvciA9IGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkgJiYgZG93bmNhc3Q8RWxl
bWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShkYXRhRGV0ZWN0b3JzVVJMU2NoZW1lKSA9PSAidHJ1
ZSI7CiAgICAgCiAgICAgUmVmUHRyPE5vZGVMaXN0PiBjaGlsZHJlbiA9IG5vZGUtPmNoaWxkTm9k
ZXMoKTsKICAgICB1bnNpZ25lZCBjaGlsZENvdW50ID0gY2hpbGRyZW4tPmxlbmd0aCgpOwpAQCAt
MjE5LDcgKzIyNyw3IEBAIHN0YXRpYyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW4K
ICAgICBOb2RlICpub2RlID0gc3RhcnROb2RlOwogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAg
IGlmIChpczxIVE1MQW5jaG9yRWxlbWVudD4oKm5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoZG93
bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShnZXRfRGF0YURldGVjdG9yc0NvcmVf
RERVUkxTY2hlbWUoKSkgIT0gInRydWUiKQorICAgICAgICAgICAgaWYgKGRvd25jYXN0PEVsZW1l
bnQ+KCpub2RlKS5nZXRBdHRyaWJ1dGUoZGF0YURldGVjdG9yc1VSTFNjaGVtZSkgIT0gInRydWUi
KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgcmVtb3ZlUmVzdWx0
TGlua3NGcm9tQW5jaG9yKG5vZGUsIG5vZGUtPnBhcmVudEVsZW1lbnQoKSk7CiAgICAgICAgIH0K
QEAgLTIzMCw3ICsyMzgsNyBAQCBzdGF0aWMgYm9vbCBzZWFyY2hGb3JMaW5rUmVtb3ZpbmdFeGlz
dGluCiAgICAgICAgICAgICBub2RlID0gc3RhcnROb2RlLT5wYXJlbnROb2RlKCk7CiAgICAgICAg
ICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICAgICAgICAgIGlmIChpczxIVE1MQW5jaG9yRWxl
bWVudD4oKm5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkb3duY2FzdDxFbGVtZW50
Pigqbm9kZSkuZ2V0QXR0cmlidXRlKGdldF9EYXRhRGV0ZWN0b3JzQ29yZV9ERFVSTFNjaGVtZSgp
KSAhPSAidHJ1ZSIpCisgICAgICAgICAgICAgICAgICAgIGlmIChkb3duY2FzdDxFbGVtZW50Pigq
bm9kZSkuZ2V0QXR0cmlidXRlKGRhdGFEZXRlY3RvcnNVUkxTY2hlbWUpICE9ICJ0cnVlIikKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICBy
ZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3Iobm9kZSwgbm9kZS0+cGFyZW50RWxlbWVudCgpKTsK
ICAgICAgICAgICAgICAgICB9CkBAIC00NDgsOCArNDU2LDEyIEBAIE5TQXJyYXkgKkRhdGFEZXRl
Y3Rpb246OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgQ0ZJbmRleCBmcmFnbWVudEluZGV4ID0g
cXVlcnlSYW5nZS5zdGFydC5xdWVyeUluZGV4OwogICAgICAgICBpZiAoZnJhZ21lbnRJbmRleCA9
PSBxdWVyeVJhbmdlLmVuZC5xdWVyeUluZGV4KQogICAgICAgICAgICAgZnJhZ21lbnRSYW5nZXMu
YXBwZW5kKFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoY3VycmVudFJhbmdlLmdldCgpLCBxdWVyeVJh
bmdlLnN0YXJ0Lm9mZnNldCwgcXVlcnlSYW5nZS5lbmQub2Zmc2V0IC0gcXVlcnlSYW5nZS5zdGFy
dC5vZmZzZXQpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnJhZ21lbnRSYW5nZXMuYXBw
ZW5kKGN1cnJlbnRSYW5nZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCFxdWVy
eVJhbmdlLnN0YXJ0Lm9mZnNldCkKKyAgICAgICAgICAgICAgICBmcmFnbWVudFJhbmdlcy5hcHBl
bmQoY3VycmVudFJhbmdlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmcmFn
bWVudFJhbmdlcy5hcHBlbmQoUmFuZ2U6OmNyZWF0ZShjdXJyZW50UmFuZ2UtPm93bmVyRG9jdW1l
bnQoKSwgJmN1cnJlbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgY3VycmVudFJhbmdlLT5zdGFy
dE9mZnNldCgpICsgcXVlcnlSYW5nZS5zdGFydC5vZmZzZXQsICZjdXJyZW50UmFuZ2UtPmVuZENv
bnRhaW5lcigpLCBjdXJyZW50UmFuZ2UtPmVuZE9mZnNldCgpKSk7CisgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIHdoaWxlIChmcmFnbWVudEluZGV4IDwgcXVlcnlSYW5nZS5lbmQucXVlcnlJ
bmRleCkgewogICAgICAgICAgICAgZnJhZ21lbnRJbmRleCsrOwpJbmRleDogU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2
aXNpb24gMTk1NTYwKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsNDEgQEAKKzIwMTYtMDEtMjUgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFw
cGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgRGF0YURldGVjdG9ycyBpbiBXSyAo
aU9TKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
Mjk4OQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yMjg1NTk2MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmluZyBJbnRlcmFjdGlvbkluZm9ybWF0
aW9uQXRQb3NpdGlvbiBmaWxlcyB0byBwbGF0Zm9ybSBmb2xkZXIsCisgICAgICAgIHNpbmNlIHRo
aXMgaXMgb25seSB1c2VkIG9uIGlPUyBhbmQgY2hhbmdpbmcgZnJvbSAuY3BwIHRvIC5tbS4KKyAg
ICAgICAgVGhlIHN0cnVjdHVyZSBpcyBleHRlbmRlZCB0byBpbmNsdWRlIGRhdGEgZGV0ZWN0aW9u
IHNwZWNpZmljIGZpZWxkcworICAgICAgICBhbmQgdGhlIHJlbGV2YW50IGVuY29kZS9kZWNvZGUg
ZnVuY3Rpb25zIGhhdmUgYmVlbiB1cGRhdGVkIHRvCisgICAgICAgIGhhbmRsZSB0aGUgbmV3IGZp
ZWxkcy4KKyAgICAgICAgVGhlIHBhdGNoIGFsc28gYWRkcyBhIG5ldyBXS1VJRGVsZWdhdGVQcml2
YXRlIG1ldGhvZCB0byBhbGxvdworICAgICAgICB0aGUgY2xpZW50IHRvIHByb3ZpZGUgYWRkaXRp
b25hbCBjb250ZXh0IGZvciBkYXRhIGRldGVjdGlvbiBhY3Rpb25zLgorCisgICAgICAgICogUGxh
dGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oOgorICAgICAgICAqIFNoYXJlZC9JbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL0ludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVk
L2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oOiBDb3BpZWQgZnJvbSBTaGFy
ZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaC4KKyAgICAgICAgKiBTaGFyZWQv
aW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tOiBDb3BpZWQgZnJvbSBTaGFy
ZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwLgorICAgICAgICAoV2ViS2l0
OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZW5jb2RlKToKKyAgICAgICAgKFdl
YktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmRlY29kZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tBY3Rp
b25TaGVldEFzc2lzdGFudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVl
dEFzc2lzdGFudC5tbToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFzc2lzdGFudCBzaG93RGF0
YURldGVjdG9yc1NoZWV0XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgYWN0aW9uU2hlZXRBc3Np
c3RhbnREaWRTdG9wSW50ZXJhY3Rpb246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZGF0
YURldGVjdGlvbkNvbnRleHRGb3JBY3Rpb25TaGVldEFzc2lzdGFudDpdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBzZWxlY3RlZFRleHRGb3JBY3Rpb25TaGVldEFzc2lzdGFudDpdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBfZGF0YUZvclByZXZpZXdJdGVtQ29udHJvbGxlcjphdFBv
c2l0aW9uOnR5cGU6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1Mu
bW06CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6Z2V0UG9zaXRpb25JbmZvcm1hdGlvbik6CisKIDIwMTYtMDEtMjUgIENvbW1p
dCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIxOTU1NDMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9zcGkv
aW9zL1VJS2l0U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vc3Bp
L2lvcy9VSUtpdFNQSS5oCShyZXZpc2lvbiAxOTU1NTkpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0Miw1ICs4NDIsNyBA
QCBleHRlcm4gTlNTdHJpbmcgKmNvbnN0IFVJS2V5SW5wdXRQYWdlVXA7CiBleHRlcm4gTlNTdHJp
bmcgKmNvbnN0IFVJS2V5SW5wdXRQYWdlRG93bjsKIAogZXh0ZXJuIGNvbnN0IE5TU3RyaW5nICpV
SVByZXZpZXdEYXRhTGluazsKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqVUlQcmV2aWV3RGF0YURE
UmVzdWx0OworZXh0ZXJuIGNvbnN0IE5TU3RyaW5nICpVSVByZXZpZXdEYXRhRERDb250ZXh0Owog
CiBXVEZfRVhURVJOX0NfRU5ECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHAJKHJldmlzaW9uIDE5
NTU1OSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24uaCIKLQotI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotI2lmIFBMQVRGT1JNKElP
UykKLXZvaWQgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmVuY29kZShJUEM6OkFy
Z3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IHBvaW50Owot
ICAgIGVuY29kZXIgPDwgbm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZTsKLSAgICBlbmNvZGVy
IDw8IGlzU2VsZWN0YWJsZTsKLSAgICBlbmNvZGVyIDw8IGlzTmVhck1hcmtlZFRleHQ7Ci0gICAg
ZW5jb2RlciA8PCB0b3VjaENhbGxvdXRFbmFibGVkOwotICAgIGVuY29kZXIgPDwgaXNMaW5rOwot
ICAgIGVuY29kZXIgPDwgaXNJbWFnZTsKLSAgICBlbmNvZGVyIDw8IGlzQW5pbWF0ZWRJbWFnZTsK
LSAgICBlbmNvZGVyIDw8IGlzQ2xpY2thYmxlRWxlbWVudDsKLSAgICBlbmNvZGVyIDw8IHVybDsK
LSAgICBlbmNvZGVyIDw8IGltYWdlVVJMOwotICAgIGVuY29kZXIgPDwgdGl0bGU7Ci0gICAgZW5j
b2RlciA8PCBib3VuZHM7Ci0gICAgZW5jb2RlciA8PCBsaW5rSW5kaWNhdG9yOwotCi0gICAgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwotICAgIGlmIChpbWFnZSkKLSAgICAgICAgaW1h
Z2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9u
bHkpOwotICAgIGVuY29kZXIgPDwgaGFuZGxlOwotfQotCi1ib29sIEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIElu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJiByZXN1bHQpCi17Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQucG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ub2RlQXRQb3NpdGlvbklzQXNzaXN0ZWROb2RlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
aXNTZWxlY3RhYmxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuaXNOZWFyTWFya2VkVGV4dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRvdWNoQ2FsbG91dEVuYWJsZWQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5p
c0xpbmspKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5pc0ltYWdlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuaXNBbmltYXRlZEltYWdlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzQ2xpY2thYmxlRWxlbWVu
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LnVybCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LmltYWdlVVJMKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQudGl0bGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ib3VuZHMpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5saW5rSW5kaWNhdG9yKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxl
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKCFoYW5kbGUuaXNOdWxsKCkpCi0gICAgICAgIHJlc3VsdC5pbWFnZSA9IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpS
ZWFkT25seSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi19CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24uaAkocmV2aXNpb24gMTk1NTU5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0lu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb25faAotI2RlZmluZSBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbl9oCi0KLSNp
ZiBQTEFURk9STShJT1MpCi0KLSNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1NlbGVjdGlvblJlY3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RleHRJbmRp
Y2F0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLXN0cnVjdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiB7Ci0gICAg
V2ViQ29yZTo6SW50UG9pbnQgcG9pbnQ7Ci0gICAgYm9vbCBub2RlQXRQb3NpdGlvbklzQXNzaXN0
ZWROb2RlIHsgZmFsc2UgfTsKLSAgICBib29sIGlzU2VsZWN0YWJsZSB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBpc05lYXJNYXJrZWRUZXh0IHsgZmFsc2UgfTsKLSAgICBib29sIHRvdWNoQ2FsbG91dEVu
YWJsZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBpc0xpbmsgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNJ
bWFnZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc0FuaW1hdGVkSW1hZ2UgeyBmYWxzZSB9OwotICAg
IGJvb2wgaXNDbGlja2FibGVFbGVtZW50IHsgZmFsc2UgfTsKLSAgICBTdHJpbmcgdXJsOwotICAg
IFN0cmluZyBpbWFnZVVSTDsKLSAgICBTdHJpbmcgdGl0bGU7Ci0gICAgV2ViQ29yZTo6SW50UmVj
dCBib3VuZHM7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gaW1hZ2U7Ci0KLSAgICBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBsaW5rSW5kaWNhdG9yOwotCi0gICAgdm9pZCBlbmNvZGUo
SVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBD
OjpBcmd1bWVudERlY29kZXImLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpOwot
fTsKLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQotCi0jZW5kaWYgLy8gSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb25faApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL2lv
cy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaAko
cmV2aXNpb24gMTk1MzE2KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24uaDoxOTUzMTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
aW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb25faAorI2RlZmluZSBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbl9o
CisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1NlbGVjdGlvblJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Rl
eHRJbmRpY2F0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3N0cnVjdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiB7
CisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQ7CisgICAgYm9vbCBub2RlQXRQb3NpdGlvbklz
QXNzaXN0ZWROb2RlIHsgZmFsc2UgfTsKKyAgICBib29sIGlzU2VsZWN0YWJsZSB7IGZhbHNlIH07
CisgICAgYm9vbCBpc05lYXJNYXJrZWRUZXh0IHsgZmFsc2UgfTsKKyAgICBib29sIHRvdWNoQ2Fs
bG91dEVuYWJsZWQgeyB0cnVlIH07CisgICAgYm9vbCBpc0xpbmsgeyBmYWxzZSB9OworICAgIGJv
b2wgaXNJbWFnZSB7IGZhbHNlIH07CisgICAgYm9vbCBpc0FuaW1hdGVkSW1hZ2UgeyBmYWxzZSB9
OworICAgIGJvb2wgaXNDbGlja2FibGVFbGVtZW50IHsgZmFsc2UgfTsKKyAgICBTdHJpbmcgdXJs
OworICAgIFN0cmluZyBpbWFnZVVSTDsKKyAgICBTdHJpbmcgdGl0bGU7CisgICAgV2ViQ29yZTo6
SW50UmVjdCBib3VuZHM7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gaW1hZ2U7CisKKyAg
ICBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBsaW5rSW5kaWNhdG9yOworCisgICAgdm9pZCBl
bmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlv
biYpOworfTsKKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gSW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb25faApJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24uaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFj
dGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw5
IEBAIHN0cnVjdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiAKICAgICBib29sIGlz
SW1hZ2UgeyBmYWxzZSB9OwogICAgIGJvb2wgaXNBbmltYXRlZEltYWdlIHsgZmFsc2UgfTsKICAg
ICBib29sIGlzQ2xpY2thYmxlRWxlbWVudCB7IGZhbHNlIH07CisjaWYgRU5BQkxFKERBVEFfREVU
RUNUSU9OKQorICAgIGJvb2wgaXNEYXRhRGV0ZWN0b3JMaW5rIHsgZmFsc2UgfTsKKyNlbmRpZgog
ICAgIFN0cmluZyB1cmw7CiAgICAgU3RyaW5nIGltYWdlVVJMOwogICAgIFN0cmluZyB0aXRsZTsK
QEAgLTU0LDYgKzU3LDEwIEBAIHN0cnVjdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlv
biAKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBpbWFnZTsKIAogICAgIFdlYkNvcmU6OlRl
eHRJbmRpY2F0b3JEYXRhIGxpbmtJbmRpY2F0b3I7CisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9O
KQorICAgIFN0cmluZyBkYXRhRGV0ZWN0b3JJZGVudGlmaWVyOworICAgIFJldGFpblB0cjxOU0Fy
cmF5PiBkYXRhRGV0ZWN0b3JSZXN1bHRzOworI2VuZGlmCiAKICAgICB2b2lkIGVuY29kZShJUEM6
OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwogICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFy
Z3VtZW50RGVjb2RlciYsIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJik7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0JKHJldmlzaW9uIDE5NTMxNikJKGZyb20gU291cmNl
L1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcDoxOTUz
MTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uLmgiCisKKyNpbmNsdWRlICJBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZiBQTEFURk9STShJ
T1MpCit2b2lkIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOjplbmNvZGUoSVBDOjpB
cmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBwb2ludDsK
KyAgICBlbmNvZGVyIDw8IG5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5vZGU7CisgICAgZW5jb2Rl
ciA8PCBpc1NlbGVjdGFibGU7CisgICAgZW5jb2RlciA8PCBpc05lYXJNYXJrZWRUZXh0OworICAg
IGVuY29kZXIgPDwgdG91Y2hDYWxsb3V0RW5hYmxlZDsKKyAgICBlbmNvZGVyIDw8IGlzTGluazsK
KyAgICBlbmNvZGVyIDw8IGlzSW1hZ2U7CisgICAgZW5jb2RlciA8PCBpc0FuaW1hdGVkSW1hZ2U7
CisgICAgZW5jb2RlciA8PCBpc0NsaWNrYWJsZUVsZW1lbnQ7CisgICAgZW5jb2RlciA8PCB1cmw7
CisgICAgZW5jb2RlciA8PCBpbWFnZVVSTDsKKyAgICBlbmNvZGVyIDw8IHRpdGxlOworICAgIGVu
Y29kZXIgPDwgYm91bmRzOworICAgIGVuY29kZXIgPDwgbGlua0luZGljYXRvcjsKKworICAgIFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBpZiAoaW1hZ2UpCisgICAgICAgIGlt
YWdlLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRP
bmx5KTsKKyAgICBlbmNvZGVyIDw8IGhhbmRsZTsKK30KKworYm9vbCBJbnRlcmFjdGlvbkluZm9y
bWF0aW9uQXRQb3NpdGlvbjo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYgcmVzdWx0KQoreworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LnBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmlzU2VsZWN0YWJsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LmlzTmVhck1hcmtlZFRleHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50b3VjaENhbGxvdXRFbmFibGVkKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
aXNMaW5rKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuaXNJbWFnZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LmlzQW5pbWF0ZWRJbWFnZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0NsaWNrYWJsZUVsZW1l
bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC51cmwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5pbWFnZVVSTCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRpdGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYm91bmRzKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubGlua0luZGljYXRvcikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRs
ZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXN1bHQuaW1hZ2UgPSBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6
UmVhZE9ubHkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworfQpJbmRleDogU291
cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uLm1tCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yMywxMSArMjMsMTMgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb24uaCIKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCIKIAotI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgot
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2ltcG9ydCAiQXJndW1lbnRDb2Rl
cnNDRi5oIgorI2ltcG9ydCAiQXJndW1lbnRzLmgiCisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRGF0YURldGVjdG9yc0NvcmVTUEkuaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKQEAgLTUzLDYgKzU1LDE5IEBAIHZvaWQgSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb246OmUKICAgICBpZiAoaW1hZ2UpCiAgICAgICAgIGltYWdlLT5jcmVh
dGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKICAg
ICBlbmNvZGVyIDw8IGhhbmRsZTsKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgZW5j
b2RlciA8PCBpc0RhdGFEZXRlY3Rvckxpbms7CisgICAgaWYgKGlzRGF0YURldGVjdG9yTGluaykg
eworICAgICAgICBlbmNvZGVyIDw8IGRhdGFEZXRlY3RvcklkZW50aWZpZXI7CisgICAgICAgIFJl
dGFpblB0cjxOU011dGFibGVEYXRhPiBkYXRhID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxs
b2NdIGluaXRdKTsKKyAgICAgICAgUmV0YWluUHRyPE5TS2V5ZWRBcmNoaXZlcj4gYXJjaGl2ZXIg
PSBhZG9wdE5TKFtbTlNLZXllZEFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yV3JpdGluZ1dpdGhNdXRh
YmxlRGF0YTpkYXRhLmdldCgpXSk7CisgICAgICAgIFthcmNoaXZlciBzZXRSZXF1aXJlc1NlY3Vy
ZUNvZGluZzpZRVNdOworICAgICAgICBbYXJjaGl2ZXIgZW5jb2RlT2JqZWN0OmRhdGFEZXRlY3Rv
clJlc3VsdHMuZ2V0KCkgZm9yS2V5OkAiZGF0YURldGVjdG9yUmVzdWx0cyJdOworICAgICAgICBb
YXJjaGl2ZXIgZmluaXNoRW5jb2RpbmddOworICAgICAgICAKKyAgICAgICAgSVBDOjplbmNvZGUo
ZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxDRkRhdGFSZWY+KGRhdGEuZ2V0KCkpKTsgICAgICAg
IAorICAgIH0KKyNlbmRpZgogfQogCiBib29sIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uJiByZXN1bHQpCkBAIC0xMDYsNiArMTIxLDMwIEBAIGJvb2wgSW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmQKICAgICBpZiAoIWhhbmRsZS5pc051bGwo
KSkKICAgICAgICAgcmVzdWx0LmltYWdlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxl
LCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKIAorI2lmIEVOQUJMRShEQVRB
X0RFVEVDVElPTikKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0RhdGFEZXRlY3Rv
ckxpbmspKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlc3VsdC5pc0Rh
dGFEZXRlY3RvckxpbmspIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZGF0
YURldGVjdG9ySWRlbnRpZmllcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7CisgICAgICAgIGlmICghSVBDOjpkZWNvZGUoZGVj
b2RlciwgZGF0YSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBSZXRhaW5QdHI8TlNLZXllZFVuYXJjaGl2ZXI+IHVuYXJjaGl2ZXIgPSBhZG9wdE5TKFtbTlNL
ZXllZFVuYXJjaGl2ZXIgYWxsb2NdIGluaXRGb3JSZWFkaW5nV2l0aERhdGE6KE5TRGF0YSAqKWRh
dGEuZ2V0KCldKTsKKyAgICAgICAgW3VuYXJjaGl2ZXIgc2V0UmVxdWlyZXNTZWN1cmVDb2Rpbmc6
WUVTXTsKKyAgICAgICAgQHRyeSB7CisgICAgICAgICAgICByZXN1bHQuZGF0YURldGVjdG9yUmVz
dWx0cyA9IFt1bmFyY2hpdmVyIGRlY29kZU9iamVjdE9mQ2xhc3NlczpbTlNTZXQgc2V0V2l0aEFy
cmF5OkBbIFtOU0FycmF5IGNsYXNzXSwgZ2V0RERTY2FubmVyUmVzdWx0Q2xhc3MoKV1dIGZvcktl
eTpAImRhdGFEZXRlY3RvclJlc3VsdHMiXTsKKyAgICAgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9u
ICpleGNlcHRpb24pIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlY29kZSBO
U0Fycnkgb2YgRERTY2FuUmVzdWx0OiAlQCIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFt1bmFyY2hpdmVyIGZpbmlz
aERlY29kaW5nXTsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAx
OTU1NTkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJFZGl0aW5nUmFuZ2UuaCIKICNp
bmNsdWRlICJFZGl0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbi5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJNZXNz
YWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyUHJveHkuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tV
SURlbGVnYXRlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oCShyZXZpc2lvbiAxOTU1NTkpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBzdHJ1Y3QgVUlFZGdlSW5zZXRzOwogLSAo
dm9pZClfd2ViVmlld0RpZEV4aXRGdWxsc2NyZWVuOihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FW
QUlMQUJMRSgxMF8xMSwgOF8zKTsKIAogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2Vi
VmlldyBpbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkOihDR1NpemUpc2l6ZSBXS19BVkFJ
TEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9TX1RCQSk7Ci0KKy0gKE5TRGljdGlvbmFyeSAqKV9kYXRh
RGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVZBSUxB
QkxFKFdLX01BQ19UQkEsIFdLX0lPU19UQkEpOwogI2lmIFRBUkdFVF9PU19JUEhPTkUKIC0gKEJP
T0wpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkSW5jbHVkZUFwcExpbmtBY3Rp
b25zRm9yRWxlbWVudDooX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKillbGVtZW50IFdLX0FWQUlM
QUJMRShOQSwgOV8wKTsKIC0gKE5TQXJyYXkgKilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmll
dyBhY3Rpb25zRm9yRWxlbWVudDooX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKillbGVtZW50IGRl
ZmF1bHRBY3Rpb25zOihXS19BUlJBWShfV0tFbGVtZW50QWN0aW9uICopICopZGVmYXVsdEFjdGlv
bnM7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Np
c3RhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0
aW9uU2hlZXRBc3Npc3RhbnQuaAkocmV2aXNpb24gMTk1NTU5KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDYgKzU1LDggQEAgc3RydWN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOwog
LSAodm9pZCl1cGRhdGVQb3NpdGlvbkluZm9ybWF0aW9uRm9yQWN0aW9uU2hlZXRBc3Npc3RhbnQ6
KFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQgKilhc3Npc3RhbnQ7CiAtICh2b2lkKWFjdGlvblNoZWV0
QXNzaXN0YW50OihXS0FjdGlvblNoZWV0QXNzaXN0YW50ICopYXNzaXN0YW50IHdpbGxTdGFydElu
dGVyYWN0aW9uV2l0aEVsZW1lbnQ6KF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICopZWxlbWVudDsK
IC0gKHZvaWQpYWN0aW9uU2hlZXRBc3Npc3RhbnREaWRTdG9wSW50ZXJhY3Rpb246KFdLQWN0aW9u
U2hlZXRBc3Npc3RhbnQgKilhc3Npc3RhbnQ7CistIChOU0RpY3Rpb25hcnkgKilkYXRhRGV0ZWN0
aW9uQ29udGV4dEZvckFjdGlvblNoZWV0QXNzaXN0YW50OihXS0FjdGlvblNoZWV0QXNzaXN0YW50
ICopYXNzaXN0YW50OworLSAoTlNTdHJpbmcgKilzZWxlY3RlZFRleHRGb3JBY3Rpb25TaGVldEFz
c2lzdGFudDooV0tBY3Rpb25TaGVldEFzc2lzdGFudCAqKWFzc2lzdGFudDsKIAogQGVuZAogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNo
ZWV0QXNzaXN0YW50Lm1tCShyZXZpc2lvbiAxOTU1NTkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTU5
LDYgKzU5LDEwIEBAIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhUQ0MpCiBTT0ZUX0xJTkso
VENDLCBUQ0NBY2Nlc3NQcmVmbGlnaHQsIFRDQ0FjY2Vzc1ByZWZsaWdodFJlc3VsdCwgKENGU3Ry
aW5nUmVmIHNlcnZpY2UsIENGRGljdGlvbmFyeVJlZiBvcHRpb25zKSwgKHNlcnZpY2UsIG9wdGlv
bnMpKQogU09GVF9MSU5LX0NPTlNUQU5UKFRDQywga1RDQ1NlcnZpY2VQaG90b3MsIENGU3RyaW5n
UmVmKQogCitAaW50ZXJmYWNlIERERGV0ZWN0aW9uQ29udHJvbGxlciAoU3RhZ2luZ1RvUmVtb3Zl
KQorLSAoTlNBcnJheSAqKWFjdGlvbnNGb3JVUkw6KE5TVVJMICopdXJsIGlkZW50aWZpZXI6KE5T
U3RyaW5nICopaWRlbnRpZmllciBzZWxlY3RlZFRleHQ6KE5TU3RyaW5nICopc2VsZWN0ZWRUZXh0
IHJlc3VsdHM6KE5TQXJyYXkgKilyZXN1bHRzIGNvbnRleHQ6KE5TRGljdGlvbmFyeSAqKWNvbnRl
eHQ7CitAZW5kCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKICNpZiBIQVZFKEFQUF9MSU5L
UykKQEAgLTQxNCwxNCArNDE4LDI3IEBAIC0gKHZvaWQpc2hvd0RhdGFEZXRlY3RvcnNTaGVldAog
ICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5TVVJMICp0YXJnZXRV
UkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbZGVsZWdhdGUgcG9zaXRpb25JbmZvcm1hdGlvbkZv
ckFjdGlvblNoZWV0QXNzaXN0YW50OnNlbGZdLnVybF07CisgICAgY29uc3QgV2ViS2l0OjpJbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYgcG9zaXRpb25JbmZvcm1hdGlvbiA9IFtkZWxl
Z2F0ZSBwb3NpdGlvbkluZm9ybWF0aW9uRm9yQWN0aW9uU2hlZXRBc3Npc3RhbnQ6c2VsZl07Cisg
ICAgTlNVUkwgKnRhcmdldFVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOnBvc2l0aW9uSW5mb3Jt
YXRpb24udXJsXTsKICAgICBpZiAoIXRhcmdldFVSTCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKCFbW2dldERERGV0ZWN0aW9uQ29udHJvbGxlckNsYXNzKCkgdGFwQW5kSG9sZFNjaGVtZXNd
IGNvbnRhaW5zT2JqZWN0Olt0YXJnZXRVUkwgc2NoZW1lXV0pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIE5TQXJyYXkgKmRhdGFEZXRlY3RvcnNBY3Rpb25zID0gW1tnZXRERERldGVjdGlvbkNvbnRy
b2xsZXJDbGFzcygpIHNoYXJlZENvbnRyb2xsZXJdIGFjdGlvbnNGb3JBbmNob3I6bmlsIHVybDp0
YXJnZXRVUkwgZm9yRnJhbWU6bmlsXTsKKyAgICBERERldGVjdGlvbkNvbnRyb2xsZXIgKmNvbnRy
b2xsZXIgPSBbZ2V0REREZXRlY3Rpb25Db250cm9sbGVyQ2xhc3MoKSBzaGFyZWRDb250cm9sbGVy
XTsKKyAgICBOU0FycmF5ICpkYXRhRGV0ZWN0b3JzQWN0aW9ucyA9IG5pbDsKKyAgICBpZiAoW2Nv
bnRyb2xsZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihhY3Rpb25zRm9yVVJMOmlkZW50
aWZpZXI6c2VsZWN0ZWRUZXh0OnJlc3VsdHM6Y29udGV4dDopXSkgeworICAgICAgICBOU0RpY3Rp
b25hcnkgKmNvbnRleHQgPSBuaWw7CisgICAgICAgIE5TU3RyaW5nICp0ZXh0QXRTZWxlY3Rpb24g
PSBuaWw7CisKKyAgICAgICAgaWYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKGRhdGFEZXRlY3Rpb25Db250ZXh0Rm9yQWN0aW9uU2hlZXRBc3Npc3RhbnQ6KV0pCisgICAg
ICAgICAgICBjb250ZXh0ID0gW2RlbGVnYXRlIGRhdGFEZXRlY3Rpb25Db250ZXh0Rm9yQWN0aW9u
U2hlZXRBc3Npc3RhbnQ6c2VsZl07CisgICAgICAgIGlmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihzZWxlY3RlZFRleHRGb3JBY3Rpb25TaGVldEFzc2lzdGFudDopXSkK
KyAgICAgICAgICAgIHRleHRBdFNlbGVjdGlvbiA9IFtkZWxlZ2F0ZSBzZWxlY3RlZFRleHRGb3JB
Y3Rpb25TaGVldEFzc2lzdGFudDpzZWxmXTsKKyAgICAgICAgZGF0YURldGVjdG9yc0FjdGlvbnMg
PSBbY29udHJvbGxlciBhY3Rpb25zRm9yVVJMOnRhcmdldFVSTCBpZGVudGlmaWVyOnBvc2l0aW9u
SW5mb3JtYXRpb24uZGF0YURldGVjdG9ySWRlbnRpZmllciBzZWxlY3RlZFRleHQ6dGV4dEF0U2Vs
ZWN0aW9uIHJlc3VsdHM6cG9zaXRpb25JbmZvcm1hdGlvbi5kYXRhRGV0ZWN0b3JSZXN1bHRzLmdl
dCgpIGNvbnRleHQ6Y29udGV4dF07CisgICAgfSBlbHNlCisgICAgICAgIGRhdGFEZXRlY3RvcnNB
Y3Rpb25zID0gW2NvbnRyb2xsZXIgYWN0aW9uc0ZvckFuY2hvcjpuaWwgdXJsOnRhcmdldFVSTCBm
b3JGcmFtZTpuaWxdOwogICAgIGlmIChbZGF0YURldGVjdG9yc0FjdGlvbnMgY291bnRdID09IDAp
CiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHJldmlzaW9uIDE5NTU1
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBACiAjaW1wb3J0IDxNb2JpbGVD
b3JlU2VydmljZXMvVVRDb3JlVHlwZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KICNp
bXBvcnQgPFdlYkNvcmUvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RhdGFE
ZXRlY3RvcnNDb3JlU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgogI2ltcG9y
dCA8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhdGguaD4KQEAgLTIz
Nyw2ICsyMzgsMTAgQEAgQGludGVyZmFjZSBVSVByZXZpZXdJdGVtQ29udHJvbGxlciAoU3RhZwog
QGVuZAogI2VuZGlmCiAKK0BpbnRlcmZhY2UgREREZXRlY3Rpb25Db250cm9sbGVyIChTdGFnaW5n
VG9SZW1vdmUpCistIChERFJlc3VsdFJlZilyZXN1bHRGb3JVUkw6KE5TVVJMICopdXJsIGlkZW50
aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBzZWxlY3RlZFRleHQ6KE5TU3RyaW5nICopc2Vs
ZWN0ZWRUZXh0IHJlc3VsdHM6KE5TQXJyYXkgKilyZXN1bHRzIGNvbnRleHQ6KE5TRGljdGlvbmFy
eSAqKWNvbnRleHQgZXh0ZW5kZWRDb250ZXh0OihOU0RpY3Rpb25hcnkgKiopZXh0ZW5kZWRDb250
ZXh0OworQGVuZAorCiBAaW50ZXJmYWNlIFdLRm9jdXNlZEVsZW1lbnRJbmZvIDogTlNPYmplY3Qg
PF9XS0ZvY3VzZWRFbGVtZW50SW5mbz4KIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uOihjb25zdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYpaW5mb3JtYXRp
b24gaXNVc2VySW5pdGlhdGVkOihCT09MKWlzVXNlckluaXRpYXRlZDsKIEBlbmQKQEAgLTM0NzEs
NiArMzQ3NiwyMCBAQCAtICh2b2lkKWFjdGlvblNoZWV0QXNzaXN0YW50RGlkU3RvcEludGVyCiAg
ICAgX3BhZ2UtPnN0b3BJbnRlcmFjdGlvbigpOwogfQogCistIChOU0RpY3Rpb25hcnkgKilkYXRh
RGV0ZWN0aW9uQ29udGV4dEZvckFjdGlvblNoZWV0QXNzaXN0YW50OihXS0FjdGlvblNoZWV0QXNz
aXN0YW50ICopYXNzaXN0YW50Cit7CisgICAgTlNEaWN0aW9uYXJ5KiBjb250ZXh0ID0gbmlsOwor
ICAgIGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVnYXRlID0gc3RhdGljX2Nhc3Q8aWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihbX3dlYlZpZXcgVUlEZWxlZ2F0ZV0pOworICAgIGlmIChb
dWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9kYXRhRGV0ZWN0aW9uQ29u
dGV4dEZvcldlYlZpZXc6KV0pCisgICAgICAgIGNvbnRleHQgPSBbdWlEZWxlZ2F0ZSBfZGF0YURl
dGVjdGlvbkNvbnRleHRGb3JXZWJWaWV3Ol93ZWJWaWV3XTsKKyAgICByZXR1cm4gY29udGV4dDsK
K30KKworLSAoTlNTdHJpbmcgKilzZWxlY3RlZFRleHRGb3JBY3Rpb25TaGVldEFzc2lzdGFudDoo
V0tBY3Rpb25TaGVldEFzc2lzdGFudCAqKWFzc2lzdGFudAoreworICAgIHJldHVybiBbc2VsZiBz
ZWxlY3RlZFRleHRdOworfQorCiBAZW5kCiAKICNpZiBIQVZFKExJTktfUFJFVklFVykKQEAgLTM1
NDUsNyArMzU2NCw3IEBAIC0gKE5TRGljdGlvbmFyeSAqKV9kYXRhRm9yUHJldmlld0l0ZW1Db24K
ICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIFN0cmluZyBhYnNvbHV0ZUxpbmtVUkwgPSBfcG9z
aXRpb25JbmZvcm1hdGlvbi51cmw7Ci0gICAgaWYgKCF1c2VJbWFnZVVSTEZvckxpbmsgJiYgKGFi
c29sdXRlTGlua1VSTC5pc0VtcHR5KCkgfHwgIVdlYkNvcmU6OnByb3RvY29sSXNJbkhUVFBGYW1p
bHkoYWJzb2x1dGVMaW5rVVJMKSkpIHsKKyAgICBpZiAoIXVzZUltYWdlVVJMRm9yTGluayAmJiAo
YWJzb2x1dGVMaW5rVVJMLmlzRW1wdHkoKSB8fCAoIVdlYkNvcmU6OnByb3RvY29sSXNJbkhUVFBG
YW1pbHkoYWJzb2x1dGVMaW5rVVJMKSAmJiAhX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNEYXRhRGV0
ZWN0b3JMaW5rKSkpIHsKICAgICAgICAgaWYgKGNhblNob3dMaW5rUHJldmlldyAmJiAhY2FuU2hv
d0ltYWdlUHJldmlldykKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIGNhblNob3dM
aW5rUHJldmlldyA9IE5POwpAQCAtMzU1OCw2ICszNTc3LDIyIEBAIC0gKE5TRGljdGlvbmFyeSAq
KV9kYXRhRm9yUHJldmlld0l0ZW1Db24KICAgICAgICAgICAgIGRhdGFGb3JQcmV2aWV3W1VJUHJl
dmlld0RhdGFMaW5rXSA9IFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6X3Bvc2l0aW9uSW5m
b3JtYXRpb24uaW1hZ2VVUkxdOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkYXRhRm9yUHJl
dmlld1tVSVByZXZpZXdEYXRhTGlua10gPSBbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl9w
b3NpdGlvbkluZm9ybWF0aW9uLnVybF07CisgICAgICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlv
bi5pc0RhdGFEZXRlY3RvckxpbmspIHsKKyAgICAgICAgICAgIE5TRGljdGlvbmFyeSogY29udGV4
dCA9IG5pbDsKKyAgICAgICAgICAgIGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVnYXRl
ID0gc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihbX3dlYlZpZXcgVUlEZWxl
Z2F0ZV0pOworICAgICAgICAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX2RhdGFEZXRlY3Rpb25Db250ZXh0Rm9yV2ViVmlldzopXSkKKyAgICAgICAgICAg
ICAgICBjb250ZXh0ID0gW3VpRGVsZWdhdGUgX2RhdGFEZXRlY3Rpb25Db250ZXh0Rm9yV2ViVmll
dzpfd2ViVmlld107CisKKyAgICAgICAgICAgIERERGV0ZWN0aW9uQ29udHJvbGxlciAqY29udHJv
bGxlciA9IFtnZXRERERldGVjdGlvbkNvbnRyb2xsZXJDbGFzcygpIHNoYXJlZENvbnRyb2xsZXJd
OworICAgICAgICAgICAgaWYgKFtjb250cm9sbGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IocmVzdWx0Rm9yVVJMOmlkZW50aWZpZXI6c2VsZWN0ZWRUZXh0OnJlc3VsdHM6Y29udGV4dDpl
eHRlbmRlZENvbnRleHQ6KV0pIHsKKyAgICAgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKm5ld0Nv
bnRleHQgPSBuaWw7CisgICAgICAgICAgICAgICAgRERSZXN1bHRSZWYgZGRSZXN1bHQgPSBbY29u
dHJvbGxlciByZXN1bHRGb3JVUkw6ZGF0YUZvclByZXZpZXdbVUlQcmV2aWV3RGF0YUxpbmtdIGlk
ZW50aWZpZXI6X3Bvc2l0aW9uSW5mb3JtYXRpb24uZGF0YURldGVjdG9ySWRlbnRpZmllciBzZWxl
Y3RlZFRleHQ6W3NlbGYgc2VsZWN0ZWRUZXh0XSByZXN1bHRzOl9wb3NpdGlvbkluZm9ybWF0aW9u
LmRhdGFEZXRlY3RvclJlc3VsdHMuZ2V0KCkgY29udGV4dDpjb250ZXh0IGV4dGVuZGVkQ29udGV4
dDombmV3Q29udGV4dF07CisgICAgICAgICAgICAgICAgaWYgKGRhdGFGb3JQcmV2aWV3KQorICAg
ICAgICAgICAgICAgICAgICBkYXRhRm9yUHJldmlld1tVSVByZXZpZXdEYXRhRERSZXN1bHRdID0g
KF9fYnJpZGdlIGlkKWRkUmVzdWx0OworICAgICAgICAgICAgICAgIGlmIChuZXdDb250ZXh0KQor
ICAgICAgICAgICAgICAgICAgICBkYXRhRm9yUHJldmlld1tVSVByZXZpZXdEYXRhRERDb250ZXh0
XSA9IG5ld0NvbnRleHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9IGVsc2UgaWYg
KGNhblNob3dJbWFnZVByZXZpZXcpIHsKICAgICAgICAgKnR5cGUgPSBVSVByZXZpZXdJdGVtVHlw
ZUltYWdlOwogICAgICAgICBkYXRhRm9yUHJldmlld1tVSVByZXZpZXdEYXRhTGlua10gPSBbTlNV
UkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl9wb3NpdGlvbkluZm9ybWF0aW9uLmltYWdlVVJMXTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9T
Lm1tCShyZXZpc2lvbiAxOTU1NTkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dl
YlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCAiQVBJVUlDbGllbnQuaCIKICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNpbXBvcnQgIkVk
aXRpbmdSYW5nZS5oIgorI2ltcG9ydCAiSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24u
aCIKICNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbXBvcnQgIlBhZ2VDbGll
bnQuaCIKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE5NTU1OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY5NiwxMCArMTY5NiwxMCBAQAogCQlD
NTc0QTU4MTEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0QTU3RjEyRTY2NjgxMDAyREZF
OTggLyogUGFzdGVib2FyZFR5cGVzLmggKi87IH07CiAJCUM1NzRBNTgyMTJFNjY2ODEwMDJERkU5
OCAvKiBQYXN0ZWJvYXJkVHlwZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNTc0QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVz
Lm1tICovOyB9OwogCQlDNThDREYyQTE4ODc1NDhCMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1OENERjI4MTg4NzU0OEIwMDg3MTUzNiAvKiBJbnRlcmFjdGlvbkluZm9ybWF0
aW9uQXRQb3NpdGlvbi5oICovOyB9OwotCQlDNThDREYyRDE4ODc2MDlGMDA4NzE1MzYgLyogSW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4Q0RGMkIxODg3NjA5RjAwODcxNTM2IC8qIEludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcCAqLzsgfTsKLQkJQzU4Q0RGMkUxODg3NjA5
RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNThDREYyQzE4ODc2MDlGMDA4
NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCAqLzsgfTsKIAkJQzU5
QzRBNTgxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1OUM0QTU2MThCODEx
NzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgKi87IH07CiAJCUM1OUM0
QTU5MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU5QzRBNTcxOEI4MTE3NDAw
N0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmggKi87IH07CisJCUM1QkNFNURFMUM1
MDc2NjMwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1QkNFNURCMUM1MDc2
MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbSAqLzsgfTsK
KwkJQzVCQ0U1REYxQzUwNzY2QTAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NUJDRTVEQTFDNTA3NjFEMDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24uaCAqLzsgfTsKIAkJQzVFMUFGRTgxNkIyMEI2NzAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMyOURB
NTE2QUNFNUE5MDAzMTZERTIgLyogV0tXZWJBcmNoaXZlLmNwcCAqLzsgfTsKIAkJQzVFMUFGRTkx
NkIyMEI3NTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMjlEQTYxNkFDRTVBOTAwMzE2REUyIC8qIFdLV2Vi
QXJjaGl2ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUM1RTFBRkVBMTZCMjBCN0IwMDZDQzFGMiAvKiBXS1dlYkFyY2hpdmVSZXNvdXJjZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMyOURBOTE2
QUNFNUJGMDAzMTZERTIgLyogV0tXZWJBcmNoaXZlUmVzb3VyY2UuY3BwICovOyB9OwpAQCAtMzkz
OSwxMCArMzkzOSwxMCBAQAogCQlDNTc0QTU3RjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2Fy
ZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRUeXBl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTc0QTU4MDEyRTY2NjgxMDAyREZF
OTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUGFzdGVib2FyZFR5cGVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDNThDREYyODE4ODc1NDhCMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4Q0RG
MkIxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4Q0RG
MkMxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1OUM0QTU2MThCODEx
NzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1OUM0QTU3MThCODExNzQwMDdCRENCNiAvKiBBc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
NUJDRTVEQTFDNTA3NjFEMDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSW50ZXJhY3Rpb25JbmZvcm1h
dGlvbkF0UG9zaXRpb24uaDsgcGF0aCA9IGlvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNUJDRTVEQjFDNTA3NjFEMDBD
REUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbi5tbTsgcGF0aCA9IGlvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzVGQTFFRDExOEUxMDYyMjAwQjNGNDAyIC8q
IFdLQWlyUGxheVJvdXRlUGlja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdLQWlyUGxheVJvdXRlUGlja2VyLmg7IHBhdGggPSBpb3MvZm9ybXMvV0tBaXJQbGF5Um91dGVQ
aWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzVGQTFFRDIxOEUxMDYyMjAw
QjNGNDAyIC8qIFdLQWlyUGxheVJvdXRlUGlja2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gV0tBaXJQbGF5Um91dGVQaWNrZXIubW07IHBhdGggPSBpb3MvZm9y
bXMvV0tBaXJQbGF5Um91dGVQaWNrZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUM5OEM0OEEzMUI2RkQ0QzMwMDE0NTEwMyAvKiBXZWJNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViTWVkaWFTZXNzaW9u
Rm9jdXNNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3MzQsOCAr
NDczNCw2IEBACiAJCQkJMUFDNzVBMUExQjMzNjgyNzAwNTY3NDVCIC8qIEhhbmdEZXRlY3Rpb25E
aXNhYmxlci5oICovLAogCQkJCUY2Mzg5NTRGMTMzQkVGMzgwMDg5NDFENSAvKiBIVFRQQ29va2ll
QWNjZXB0UG9saWN5LmggKi8sCiAJCQkJQkNDRjZCMjMxMkM5M0U3QTAwOEY5QzM1IC8qIEltYWdl
T3B0aW9ucy5oICovLAotCQkJCUM1OENERjJCMTg4NzYwOUYwMDg3MTUzNiAvKiBJbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHAgKi8sCi0JCQkJQzU4Q0RGMkMxODg3NjA5RjAwODcx
NTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggKi8sCiAJCQkJMUE5MkRD
MTIxMkY4QkFCOTAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuY3BwICovLAogCQkJCTFBOTJE
QzEwMTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggKi8sCiAJCQkJMkQ1MDM2
NkExQkNERTE3OTAwRTIwQkIzIC8qIE5hdGl2ZVdlYkdlc3R1cmVFdmVudC5oICovLApAQCAtNTA5
Nyw2ICs1MDk1LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUE3RTkzQ0VCMTkyNTMxQUEwMEEx
REM0OCAvKiBDaGlsZFByb2Nlc3NJT1MubW0gKi8sCiAJCQkJMkRBOTQ0OUQxODg0RTRGMDAwRUQ4
NkRCIC8qIEdlc3R1cmVUeXBlcy5oICovLAorCQkJCUM1QkNFNURBMUM1MDc2MUQwMENERTNGQSAv
KiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oICovLAorCQkJCUM1QkNFNURCMUM1
MDc2MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbSAqLywK
IAkJCQkyREE5NDQ5NzE4ODRFNEYwMDBFRDg2REIgLyogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudElP
Uy5tbSAqLywKIAkJCQkyREE5NDQ5ODE4ODRFNEYwMDBFRDg2REIgLyogTmF0aXZlV2ViVG91Y2hF
dmVudElPUy5tbSAqLywKIAkJCQlBMTE4QTlFQzE5MDdBRDZGMDBGN0M5MkIgLyogUXVpY2tMb29r
RG9jdW1lbnREYXRhLmNwcCAqLywKQEAgLTc2NjQsNiArNzY2NCw3IEBACiAJCQkJQzVFMUFGRUQx
NkIyMTAxNzAwNkNDMUYyIC8qIEFQSVdlYkFyY2hpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1
RTFBRkVGMTZCMjEwMjkwMDZDQzFGMiAvKiBBUElXZWJBcmNoaXZlUmVzb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBNDgzMkM4MUE5QkMxM0MwMDhCNERGRSAvKiBBUElXZWJzaXRlRGF0YVJl
Y29yZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzVCQ0U1REYxQzUwNzY2QTAwQ0RFM0ZBIC8qIElu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTM2
MzVBQTFBMzE0NEEzMDBFRDYxOTcgLyogQVBJV2Vic2l0ZURhdGFTdG9yZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUE2NTYzRTUxQjdBOEM1MDAwOUNGNzg3IC8qIEFQSVdpbmRvd0ZlYXR1cmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUQ0QzE5MzFCMzlGMzMyMDBBQkMyOEUgLyogQXBwbGljYXRp
b25TdGF0ZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzc2OSw3ICs3NzcwLDYgQEAKIAkJ
CQlCQ0E4QzZCMDExRTNDMDg3MDA4MTJGQjcgLyogSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGllbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzNFMEQxMTI0MDhFODYwMDM2MEYzRiAvKiBJbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE0REY3NzEyMEI1Qjc5
MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQzU4Q0RGMkUxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNThDREYyQTE4ODc1NDhCMDA4NzE1MzYgLyog
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
RTQ5QTQ5MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQUU0OTg3ODExRkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CkBAIC05NDk4LDcgKzk0OTgsNiBAQAogCQkJCUJDQThDNkFGMTFFM0MwODcwMDgxMkZCNyAvKiBJ
bmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzMzRTBE
MjEyNDA4RTg2MDAzNjBGM0YgLyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzE0REY3ODEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVT
Y3JpcHRXb3JsZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDNThDREYyRDE4ODc2MDlGMDA4NzE1
MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFFNDlBNEExMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFFNDk4NzkxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkNFMDkzNzcxNEZCMTI4QzAwMTEzOEQ5IC8qIExheWVySG9zdGlu
Z0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKQEAgLTk5OTEsNiArOTk5MCw3IEBACiAJCQkJNTEy
RjU4RjkxMkE4OEE1NDAwNjI5NTMwIC8qIFdLQ3JlZGVudGlhbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzQwNzVGNzEyNEZGMDI3MDA2OEYyMEEgLyogV0tEYXRhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBRkY0OTAwMTgzM0RFNzgwMDlBQjE1QSAvKiBXS0RlcHJlY2F0ZWRGdW5jdGlvbnMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzVCQ0U1REUxQzUwNzY2MzAwQ0RFM0ZBIC8qIEludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc1
RjkxMjRGRjAyNzAwNjhGMjBBIC8qIFdLRGljdGlvbmFyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzAxN0QwODE2MjYwRkY0MDA3MDU0RjUgLyogV0tET01Eb2N1bWVudC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDMDE3RDBBMTYyNjBGRjQwMDcwNTRGNSAvKiBXS0RPTUVsZW1lbnQubW0gaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
V2ViUGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDE5NTU1OSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNTAsNiArNTAsNyBAQAogI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgogI2ltcG9ydCA8Q29yZVRl
eHQvQ1RGb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9EYXRhRGV0ZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9FbGVtZW50Lmg+CkBAIC0yMjAyLDYgKzIyMDMsMTMgQEAgdm9pZCBXZWJQYWdl
OjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbgogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRleHRJbmRpY2F0b3IpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5saW5rSW5k
aWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICB9Cisj
aWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICAgICAgICAgICAgICBpbmZvLmlzRGF0
YURldGVjdG9yTGluayA9IERhdGFEZXRlY3Rpb246OmlzRGF0YURldGVjdG9yTGluayhlbGVtZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uaXNEYXRhRGV0ZWN0b3JMaW5rKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmRhdGFEZXRlY3RvcklkZW50aWZpZXIgPSBEYXRh
RGV0ZWN0aW9uOjpkYXRhRGV0ZWN0b3JJZGVudGlmaWVyKGVsZW1lbnQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mby5kYXRhRGV0ZWN0b3JSZXN1bHRzID0gZWxlbWVudC0+ZG9jdW1lbnQo
KS5mcmFtZSgpLT5kYXRhRGV0ZWN0aW9uUmVzdWx0cygpOworICAgICAgICAgICAgICAgICAgICB9
CisjZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkg
JiYgZWxlbWVudC0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbWFnZSgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGluZm8uaXNJbWFnZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJl
bmRlckltYWdlID0gZG93bmNhc3Q8UmVuZGVySW1hZ2U+KCooZWxlbWVudC0+cmVuZGVyZXIoKSkp
Owo=
</data>
<flag name="review"
          id="294695"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269828</attachid>
            <date>2016-01-25 17:40:20 -0800</date>
            <delta_ts>2016-01-25 17:40:20 -0800</delta_ts>
            <desc>Testing the build</desc>
            <filename>ddwk2-part3.txt</filename>
            <type>text/plain</type>
            <size>45322</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTAxLTI1ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcg
bmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGRhdGEgZGV0ZWN0aW9uIHJlbGF0ZWQgdGFza3MuCisg
ICAgICAgIFRoZSBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIHdoZW4gY3JlYXRpbmcgRE9NIHJhbmdl
cyBmcm9tIEREUXVlcnlSYW5nZQorICAgICAgICBzcGFubmluZyBtdWx0aXBsZSBmcmFnbWVudHMu
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaDoKKyAgICAgICAgKiBl
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0
ZWN0aW9uOjppc0RhdGFEZXRlY3RvckxpbmspOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVj
dGlvbjo6ZGF0YURldGVjdG9ySWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJ
dGVtQXRQb3NpdGlvbldpdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9u
OjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpyZXN1
bHRJc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtz
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdl
KToKKwogMjAxNi0wMS0yNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJvbGwgYmFjayBpbiByMTk1NTU5IHdpdGggYSBidWlsZCBmaXguCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAkocmV2aXNpb24gMTk1NTY0KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDEyICsyOCwxNCBAQAogCiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
T0JKQ19DTEFTUyBEREFjdGlvbkNvbnRleHQ7CiBPQkpDX0NMQVNTIE5TQXJyYXk7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNz
IEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBSYW5nZTsKQEAgLTU1LDYgKzU3LDggQEAgcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRl
Y3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiwgRmxvYXRSZWN0
JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFu
Z2UpOwogI2VuZGlmCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE5TQXJyYXkgKmRldGVjdENv
bnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlw
ZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGlzRGF0YURldGVjdG9yTGluayhF
bGVtZW50Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBkYXRhRGV0ZWN0b3JJ
ZGVudGlmaWVyKEVsZW1lbnQqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlz
aW9uIDE5NTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDUsMTQgKzQ1LDIyIEBACiAjaW1wb3J0ICJWaXNpYmxl
VW5pdHMuaCIKICNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCiAKLSNpZiBQTEFURk9STShJT1MpCiBj
b25zdCBjaGFyICpkYXRhRGV0ZWN0b3JzVVJMU2NoZW1lID0gIngtYXBwbGUtZGF0YS1kZXRlY3Rv
cnMiOwogY29uc3QgY2hhciAqZGF0YURldGVjdG9yc0F0dHJpYnV0ZVR5cGVLZXkgPSAieC1hcHBs
ZS1kYXRhLWRldGVjdG9ycy10eXBlIjsKIGNvbnN0IGNoYXIgKmRhdGFEZXRlY3RvcnNBdHRyaWJ1
dGVSZXN1bHRLZXkgPSAieC1hcHBsZS1kYXRhLWRldGVjdG9ycy1yZXN1bHQiOwotI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorYm9vbCBEYXRhRGV0ZWN0aW9uOjppc0RhdGFEZXRlY3Rv
ckxpbmsoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+Z2V0QXR0cmli
dXRlKGRhdGFEZXRlY3RvcnNVUkxTY2hlbWUpID09ICJ0cnVlIjsKK30KKworU3RyaW5nIERhdGFE
ZXRlY3Rpb246OmRhdGFEZXRlY3RvcklkZW50aWZpZXIoRWxlbWVudCogZWxlbWVudCkKK3sKKyAg
ICByZXR1cm4gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGRhdGFEZXRlY3RvcnNBdHRyaWJ1dGVSZXN1
bHRLZXkpOworfQorCiAjaWYgUExBVEZPUk0oTUFDKQogCiBzdGF0aWMgUmV0YWluUHRyPEREQWN0
aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0aW9u
IHBvc2l0aW9uLCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZSwgRmxvYXRSZWN0JiBkZXRlY3Rl
ZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCkBAIC0x
NDUsNyArMTUzLDcgQEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVjdGlvbgog
ICAgIHJldHVybiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwgY29udGV4
dFJhbmdlLCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2UpOwogfQog
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLSAgICAKKwogI2lmIFBMQVRGT1JNKElPUykKICAgICAK
IHN0YXRpYyBCT09MIHJlc3VsdElzVVJMKEREUmVzdWx0UmVmIHJlc3VsdCkKQEAgLTE5MCw3ICsx
OTgsNyBAQCBzdGF0aWMgdm9pZCByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IoCiAgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgQk9PTCBub2RlSXNEREFuY2hvciA9
IGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUp
LmdldEF0dHJpYnV0ZShnZXRfRGF0YURldGVjdG9yc0NvcmVfRERVUkxTY2hlbWUoKSkgPT0gInRy
dWUiOworICAgIEJPT0wgbm9kZUlzRERBbmNob3IgPSBpczxIVE1MQW5jaG9yRWxlbWVudD4oKm5v
ZGUpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5nZXRBdHRyaWJ1dGUoZGF0YURldGVjdG9y
c1VSTFNjaGVtZSkgPT0gInRydWUiOwogICAgIAogICAgIFJlZlB0cjxOb2RlTGlzdD4gY2hpbGRy
ZW4gPSBub2RlLT5jaGlsZE5vZGVzKCk7CiAgICAgdW5zaWduZWQgY2hpbGRDb3VudCA9IGNoaWxk
cmVuLT5sZW5ndGgoKTsKQEAgLTIxOSw3ICsyMjcsNyBAQCBzdGF0aWMgYm9vbCBzZWFyY2hGb3JM
aW5rUmVtb3ZpbmdFeGlzdGluCiAgICAgTm9kZSAqbm9kZSA9IHN0YXJ0Tm9kZTsKICAgICB3aGls
ZSAobm9kZSkgewogICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSkgewot
ICAgICAgICAgICAgaWYgKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5nZXRBdHRyaWJ1dGUoZ2V0
X0RhdGFEZXRlY3RvcnNDb3JlX0REVVJMU2NoZW1lKCkpICE9ICJ0cnVlIikKKyAgICAgICAgICAg
IGlmIChkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKGRhdGFEZXRlY3RvcnNV
UkxTY2hlbWUpICE9ICJ0cnVlIikKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihub2RlLCBub2RlLT5wYXJlbnRFbGVt
ZW50KCkpOwogICAgICAgICB9CkBAIC0yMzAsNyArMjM4LDcgQEAgc3RhdGljIGJvb2wgc2VhcmNo
Rm9yTGlua1JlbW92aW5nRXhpc3RpbgogICAgICAgICAgICAgbm9kZSA9IHN0YXJ0Tm9kZS0+cGFy
ZW50Tm9kZSgpOwogICAgICAgICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgICAgICAgICBp
ZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShnZXRfRGF0YURldGVjdG9y
c0NvcmVfRERVUkxTY2hlbWUoKSkgIT0gInRydWUiKQorICAgICAgICAgICAgICAgICAgICBpZiAo
ZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShkYXRhRGV0ZWN0b3JzVVJMU2No
ZW1lKSAhPSAidHJ1ZSIpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5jaG9yKG5vZGUsIG5vZGUt
PnBhcmVudEVsZW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQ4LDggKzQ1NiwxMiBA
QCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SCiAgICAgICAgIENGSW5k
ZXggZnJhZ21lbnRJbmRleCA9IHF1ZXJ5UmFuZ2Uuc3RhcnQucXVlcnlJbmRleDsKICAgICAgICAg
aWYgKGZyYWdtZW50SW5kZXggPT0gcXVlcnlSYW5nZS5lbmQucXVlcnlJbmRleCkKICAgICAgICAg
ICAgIGZyYWdtZW50UmFuZ2VzLmFwcGVuZChUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGN1cnJlbnRS
YW5nZS5nZXQoKSwgcXVlcnlSYW5nZS5zdGFydC5vZmZzZXQsIHF1ZXJ5UmFuZ2UuZW5kLm9mZnNl
dCAtIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGZyYWdtZW50UmFuZ2VzLmFwcGVuZChjdXJyZW50UmFuZ2UpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGlmICghcXVlcnlSYW5nZS5zdGFydC5vZmZzZXQpCisgICAgICAgICAgICAgICAg
ZnJhZ21lbnRSYW5nZXMuYXBwZW5kKGN1cnJlbnRSYW5nZSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgZnJhZ21lbnRSYW5nZXMuYXBwZW5kKFJhbmdlOjpjcmVhdGUoY3VycmVu
dFJhbmdlLT5vd25lckRvY3VtZW50KCksICZjdXJyZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCks
IGN1cnJlbnRSYW5nZS0+c3RhcnRPZmZzZXQoKSArIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0LCAm
Y3VycmVudFJhbmdlLT5lbmRDb250YWluZXIoKSwgY3VycmVudFJhbmdlLT5lbmRPZmZzZXQoKSkp
OworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB3aGlsZSAoZnJhZ21lbnRJbmRleCA8IHF1
ZXJ5UmFuZ2UuZW5kLnF1ZXJ5SW5kZXgpIHsKICAgICAgICAgICAgIGZyYWdtZW50SW5kZXgrKzsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTU2NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE2LTAxLTI1ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIERh
dGFEZXRlY3RvcnMgaW4gV0sgKGlPUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI5ODkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjI4NTU5NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zpbmcg
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gZmlsZXMgdG8gcGxhdGZvcm0gZm9sZGVy
LAorICAgICAgICBzaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCBvbiBpT1MgYW5kIGNoYW5naW5nIGZy
b20gLmNwcCB0byAubW0uCisgICAgICAgIFRoZSBzdHJ1Y3R1cmUgaXMgZXh0ZW5kZWQgdG8gaW5j
bHVkZSBkYXRhIGRldGVjdGlvbiBzcGVjaWZpYyBmaWVsZHMKKyAgICAgICAgYW5kIHRoZSByZWxl
dmFudCBlbmNvZGUvZGVjb2RlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gdXBkYXRlZCB0bworICAgICAg
ICBoYW5kbGUgdGhlIG5ldyBmaWVsZHMuCisgICAgICAgIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBu
ZXcgV0tVSURlbGVnYXRlUHJpdmF0ZSBtZXRob2QgdG8gYWxsb3cKKyAgICAgICAgdGhlIGNsaWVu
dCB0byBwcm92aWRlIGFkZGl0aW9uYWwgY29udGV4dCBmb3IgZGF0YSBkZXRlY3Rpb24gYWN0aW9u
cy4KKworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKyAgICAgICAgKiBT
aGFyZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIFNoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oOiBSZW1vdmVk
LgorICAgICAgICAqIFNoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24u
aDogQ29waWVkIGZyb20gU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgu
CisgICAgICAgICogU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5t
bTogQ29waWVkIGZyb20gU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNw
cC4KKyAgICAgICAgKFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmVu
Y29kZSk6CisgICAgICAgIChXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
OjpkZWNvZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJp
dmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW06CisgICAgICAgICgtW1dLQWN0aW9uU2hl
ZXRBc3Npc3RhbnQgc2hvd0RhdGFEZXRlY3RvcnNTaGVldF0pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IGFjdGlvblNoZWV0QXNzaXN0YW50RGlkU3RvcEludGVyYWN0aW9uOl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGRhdGFEZXRlY3Rpb25Db250ZXh0Rm9yQWN0aW9uU2hlZXRBc3Npc3Rh
bnQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2VsZWN0ZWRUZXh0Rm9yQWN0aW9uU2hl
ZXRBc3Npc3RhbnQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2RhdGFGb3JQcmV2aWV3
SXRlbUNvbnRyb2xsZXI6YXRQb3NpdGlvbjp0eXBlOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBvc2l0aW9uSW5mb3JtYXRpb24pOgor
CiAyMDE2LTAxLTI1ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTk1NTQzLgpJbmRleDogU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAkocmV2aXNpb24gMTk1NTY0KQorKysg
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NDIsNSArODQyLDcgQEAgZXh0ZXJuIE5TU3RyaW5nICpjb25zdCBVSUtleUlucHV0UGFn
ZVVwOwogZXh0ZXJuIE5TU3RyaW5nICpjb25zdCBVSUtleUlucHV0UGFnZURvd247CiAKIGV4dGVy
biBjb25zdCBOU1N0cmluZyAqVUlQcmV2aWV3RGF0YUxpbms7CitleHRlcm4gY29uc3QgTlNTdHJp
bmcgKlVJUHJldmlld0RhdGFERFJlc3VsdDsKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqVUlQcmV2
aWV3RGF0YUREQ29udGV4dDsKIAogV1RGX0VYVEVSTl9DX0VORApJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24uY3BwCShyZXZpc2lvbiAxOTU1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgiCi0KLSNpbmNsdWRlICJBcmd1bWVudHMuaCIK
LSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLSNpZiBQTEFURk9STShJT1MpCi12b2lkIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAg
ZW5jb2RlciA8PCBwb2ludDsKLSAgICBlbmNvZGVyIDw8IG5vZGVBdFBvc2l0aW9uSXNBc3Npc3Rl
ZE5vZGU7Ci0gICAgZW5jb2RlciA8PCBpc1NlbGVjdGFibGU7Ci0gICAgZW5jb2RlciA8PCBpc05l
YXJNYXJrZWRUZXh0OwotICAgIGVuY29kZXIgPDwgdG91Y2hDYWxsb3V0RW5hYmxlZDsKLSAgICBl
bmNvZGVyIDw8IGlzTGluazsKLSAgICBlbmNvZGVyIDw8IGlzSW1hZ2U7Ci0gICAgZW5jb2RlciA8
PCBpc0FuaW1hdGVkSW1hZ2U7Ci0gICAgZW5jb2RlciA8PCBpc0NsaWNrYWJsZUVsZW1lbnQ7Ci0g
ICAgZW5jb2RlciA8PCB1cmw7Ci0gICAgZW5jb2RlciA8PCBpbWFnZVVSTDsKLSAgICBlbmNvZGVy
IDw8IHRpdGxlOwotICAgIGVuY29kZXIgPDwgYm91bmRzOwotICAgIGVuY29kZXIgPDwgbGlua0lu
ZGljYXRvcjsKLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAo
aW1hZ2UpCi0gICAgICAgIGltYWdlLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6
OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLSAgICBlbmNvZGVyIDw8IGhhbmRsZTsKLX0KLQotYm9v
bCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZGVjb2RlKElQQzo6QXJndW1lbnRE
ZWNvZGVyJiBkZWNvZGVyLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYgcmVzdWx0
KQotewotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnBvaW50KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubm9kZUF0UG9zaXRp
b25Jc0Fzc2lzdGVkTm9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LmlzU2VsZWN0YWJsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzTmVhck1hcmtlZFRleHQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50b3Vj
aENhbGxvdXRFbmFibGVkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuaXNMaW5rKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNJbWFnZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzQW5pbWF0ZWRJbWFnZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5pc0NsaWNrYWJsZUVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC51cmwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pbWFnZVVSTCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRpdGxlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYm91bmRzKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
bGlua0luZGljYXRvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghaGFuZGxlLmlzTnVsbCgpKQotICAgICAg
ICByZXN1bHQuaW1hZ2UgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1l
bW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5k
aWYKLQotfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRp
b25BdFBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgJKHJldmlzaW9uIDE5NTU2NCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uX2gKLSNkZWZpbmUgSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb25faAotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW5jbHVkZSAiQXJndW1lbnRD
b2RlcnMuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0ludFBvaW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZWxlY3Rpb25SZWN0Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdHJ1Y3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24gewotICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50OwotICAgIGJvb2wgbm9k
ZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc1NlbGVjdGFi
bGUgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNOZWFyTWFya2VkVGV4dCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCB0b3VjaENhbGxvdXRFbmFibGVkIHsgdHJ1ZSB9OwotICAgIGJvb2wgaXNMaW5rIHsgZmFs
c2UgfTsKLSAgICBib29sIGlzSW1hZ2UgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNBbmltYXRlZElt
YWdlIHsgZmFsc2UgfTsKLSAgICBib29sIGlzQ2xpY2thYmxlRWxlbWVudCB7IGZhbHNlIH07Ci0g
ICAgU3RyaW5nIHVybDsKLSAgICBTdHJpbmcgaW1hZ2VVUkw7Ci0gICAgU3RyaW5nIHRpdGxlOwot
ICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRzOwotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IGltYWdlOwotCi0gICAgV2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEgbGlua0luZGljYXRvcjsK
LQotICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7Ci0gICAgc3Rh
dGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgSW50ZXJhY3Rpb25JbmZvcm1h
dGlvbkF0UG9zaXRpb24mKTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQot
I2VuZGlmIC8vIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uX2gKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmgJKHJldmlzaW9uIDE5NTMxNikJKGZyb20gU291cmNlL1dlYktpdDIv
U2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmg6MTk1MzE2KQorKysgU291
cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uX2gKKyNkZWZpbmUgSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb25faAorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiQXJn
dW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0ludFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWxlY3Rpb25SZWN0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb24geworICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50OworICAgIGJv
b2wgbm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSB7IGZhbHNlIH07CisgICAgYm9vbCBpc1Nl
bGVjdGFibGUgeyBmYWxzZSB9OworICAgIGJvb2wgaXNOZWFyTWFya2VkVGV4dCB7IGZhbHNlIH07
CisgICAgYm9vbCB0b3VjaENhbGxvdXRFbmFibGVkIHsgdHJ1ZSB9OworICAgIGJvb2wgaXNMaW5r
IHsgZmFsc2UgfTsKKyAgICBib29sIGlzSW1hZ2UgeyBmYWxzZSB9OworICAgIGJvb2wgaXNBbmlt
YXRlZEltYWdlIHsgZmFsc2UgfTsKKyAgICBib29sIGlzQ2xpY2thYmxlRWxlbWVudCB7IGZhbHNl
IH07CisgICAgU3RyaW5nIHVybDsKKyAgICBTdHJpbmcgaW1hZ2VVUkw7CisgICAgU3RyaW5nIHRp
dGxlOworICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRzOworICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGltYWdlOworCisgICAgV2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEgbGlua0luZGlj
YXRvcjsKKworICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7Cisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKK307CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKKworI2VuZGlmIC8vIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uX2gKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0ludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNiArNDcsOSBAQCBzdHJ1Y3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24gCiAgICAgYm9vbCBpc0ltYWdlIHsgZmFsc2UgfTsKICAgICBib29sIGlzQW5pbWF0ZWRJ
bWFnZSB7IGZhbHNlIH07CiAgICAgYm9vbCBpc0NsaWNrYWJsZUVsZW1lbnQgeyBmYWxzZSB9Owor
I2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBib29sIGlzRGF0YURldGVjdG9yTGluayB7
IGZhbHNlIH07CisjZW5kaWYKICAgICBTdHJpbmcgdXJsOwogICAgIFN0cmluZyBpbWFnZVVSTDsK
ICAgICBTdHJpbmcgdGl0bGU7CkBAIC01NCw2ICs1NywxMCBAQCBzdHJ1Y3QgSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24gCiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gaW1hZ2U7
CiAKICAgICBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBsaW5rSW5kaWNhdG9yOworI2lmIEVO
QUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBTdHJpbmcgZGF0YURldGVjdG9ySWRlbnRpZmllcjsK
KyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZGF0YURldGVjdG9yUmVzdWx0czsKKyNlbmRpZgogCiAg
ICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKICAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbiYpOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tCShyZXZpc2lvbiAx
OTUzMTYpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbi5jcHA6MTk1MzE2KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRzLmgi
CisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbjo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAg
IGVuY29kZXIgPDwgcG9pbnQ7CisgICAgZW5jb2RlciA8PCBub2RlQXRQb3NpdGlvbklzQXNzaXN0
ZWROb2RlOworICAgIGVuY29kZXIgPDwgaXNTZWxlY3RhYmxlOworICAgIGVuY29kZXIgPDwgaXNO
ZWFyTWFya2VkVGV4dDsKKyAgICBlbmNvZGVyIDw8IHRvdWNoQ2FsbG91dEVuYWJsZWQ7CisgICAg
ZW5jb2RlciA8PCBpc0xpbms7CisgICAgZW5jb2RlciA8PCBpc0ltYWdlOworICAgIGVuY29kZXIg
PDwgaXNBbmltYXRlZEltYWdlOworICAgIGVuY29kZXIgPDwgaXNDbGlja2FibGVFbGVtZW50Owor
ICAgIGVuY29kZXIgPDwgdXJsOworICAgIGVuY29kZXIgPDwgaW1hZ2VVUkw7CisgICAgZW5jb2Rl
ciA8PCB0aXRsZTsKKyAgICBlbmNvZGVyIDw8IGJvdW5kczsKKyAgICBlbmNvZGVyIDw8IGxpbmtJ
bmRpY2F0b3I7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYg
KGltYWdlKQorICAgICAgICBpbWFnZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5
OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgZW5jb2RlciA8PCBoYW5kbGU7Cit9CisKK2Jv
b2wgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmRlY29kZShJUEM6OkFyZ3VtZW50
RGVjb2RlciYgZGVjb2RlciwgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mIHJlc3Vs
dCkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wb2ludCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm5vZGVBdFBvc2l0
aW9uSXNBc3Npc3RlZE5vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5pc1NlbGVjdGFibGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc05lYXJNYXJrZWRUZXh0KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudG91
Y2hDYWxsb3V0RW5hYmxlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LmlzTGluaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzSW1hZ2UpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0FuaW1hdGVkSW1hZ2UpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuaXNDbGlja2FibGVFbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaW1hZ2VVUkwpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50aXRsZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJvdW5kcykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmxpbmtJbmRpY2F0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWhhbmRsZS5pc051bGwoKSkKKyAgICAg
ICAgcmVzdWx0LmltYWdlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlLCBTaGFyZWRN
ZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKworICAgIHJldHVybiB0cnVlOworfQorI2Vu
ZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbQkod29ya2luZyBjb3B5KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjMsMTUgKzIzLDIyIEBACiAgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgiCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgiCiAKLSNpbmNs
dWRlICJBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNp
bXBvcnQgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKKyNpbXBvcnQgIkFyZ3VtZW50cy5oIgorI2ltcG9y
dCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0IDxXZWJDb3JlL0RhdGFEZXRlY3Rv
cnNDb3JlU1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElO
S19QUklWQVRFX0ZSQU1FV09SSyhEYXRhRGV0ZWN0b3JzQ29yZSkKK1NPRlRfTElOS19DTEFTUyhE
YXRhRGV0ZWN0b3JzQ29yZSwgRERTY2FubmVyUmVzdWx0KQogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogI2lmIFBMQVRGT1JNKElPUykKKwogdm9pZCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbjo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAg
IGVuY29kZXIgPDwgcG9pbnQ7CkBAIC01Myw2ICs2MCwxOSBAQCB2b2lkIEludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uOjplCiAgICAgaWYgKGltYWdlKQogICAgICAgICBpbWFnZS0+Y3Jl
YXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CiAg
ICAgZW5jb2RlciA8PCBoYW5kbGU7CisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgIGVu
Y29kZXIgPDwgaXNEYXRhRGV0ZWN0b3JMaW5rOworICAgIGlmIChpc0RhdGFEZXRlY3Rvckxpbmsp
IHsKKyAgICAgICAgZW5jb2RlciA8PCBkYXRhRGV0ZWN0b3JJZGVudGlmaWVyOworICAgICAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlRGF0YT4gZGF0YSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFs
bG9jXSBpbml0XSk7CisgICAgICAgIFJldGFpblB0cjxOU0tleWVkQXJjaGl2ZXI+IGFyY2hpdmVy
ID0gYWRvcHROUyhbW05TS2V5ZWRBcmNoaXZlciBhbGxvY10gaW5pdEZvcldyaXRpbmdXaXRoTXV0
YWJsZURhdGE6ZGF0YS5nZXQoKV0pOworICAgICAgICBbYXJjaGl2ZXIgc2V0UmVxdWlyZXNTZWN1
cmVDb2Rpbmc6WUVTXTsKKyAgICAgICAgW2FyY2hpdmVyIGVuY29kZU9iamVjdDpkYXRhRGV0ZWN0
b3JSZXN1bHRzLmdldCgpIGZvcktleTpAImRhdGFEZXRlY3RvclJlc3VsdHMiXTsKKyAgICAgICAg
W2FyY2hpdmVyIGZpbmlzaEVuY29kaW5nXTsKKyAgICAgICAgCisgICAgICAgIElQQzo6ZW5jb2Rl
KGVuY29kZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPihkYXRhLmdldCgpKSk7ICAgICAg
ICAKKyAgICB9CisjZW5kaWYKIH0KIAogYm9vbCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbjo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbiYgcmVzdWx0KQpAQCAtMTA2LDYgKzEyNiwzMCBAQCBib29sIElu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOjpkCiAgICAgaWYgKCFoYW5kbGUuaXNOdWxs
KCkpCiAgICAgICAgIHJlc3VsdC5pbWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRs
ZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CiAKKyNpZiBFTkFCTEUoREFU
QV9ERVRFQ1RJT04pCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNEYXRhRGV0ZWN0
b3JMaW5rKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZXN1bHQuaXNE
YXRhRGV0ZWN0b3JMaW5rKSB7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRh
dGFEZXRlY3RvcklkZW50aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOworICAgICAgICBpZiAoIUlQQzo6ZGVjb2RlKGRl
Y29kZXIsIGRhdGEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgUmV0YWluUHRyPE5TS2V5ZWRVbmFyY2hpdmVyPiB1bmFyY2hpdmVyID0gYWRvcHROUyhbW05T
S2V5ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVhZGluZ1dpdGhEYXRhOihOU0RhdGEgKilk
YXRhLmdldCgpXSk7CisgICAgICAgIFt1bmFyY2hpdmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5n
OllFU107CisgICAgICAgIEB0cnkgeworICAgICAgICAgICAgcmVzdWx0LmRhdGFEZXRlY3RvclJl
c3VsdHMgPSBbdW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNzZXM6W05TU2V0IHNldFdpdGhB
cnJheTpAWyBbTlNBcnJheSBjbGFzc10sIGdldEREU2Nhbm5lclJlc3VsdENsYXNzKCldIF0gZm9y
S2V5OkAiZGF0YURldGVjdG9yUmVzdWx0cyJdOworICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRp
b24gKmV4Y2VwdGlvbikgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVjb2Rl
IE5TQXJyYXkgb2YgRERTY2FuUmVzdWx0OiAlQCIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFt1bmFyY2hpdmVyIGZp
bmlzaERlY29kaW5nXTsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiB0cnVlOwogfQogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lv
biAxOTU1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJFZGl0aW5nUmFuZ2UuaCIK
ICNpbmNsdWRlICJFZGl0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbi5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJN
ZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHJveHkuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tVSURlbGVnYXRlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oCShyZXZpc2lvbiAxOTU1NjQpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBzdHJ1Y3QgVUlFZGdlSW5zZXRzOwog
LSAodm9pZClfd2ViVmlld0RpZEV4aXRGdWxsc2NyZWVuOihXS1dlYlZpZXcgKil3ZWJWaWV3IFdL
X0FWQUlMQUJMRSgxMF8xMSwgOF8zKTsKIAogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBpbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkOihDR1NpemUpc2l6ZSBXS19B
VkFJTEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9TX1RCQSk7Ci0KKy0gKE5TRGljdGlvbmFyeSAqKV9k
YXRhRGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVZB
SUxBQkxFKFdLX01BQ19UQkEsIFdLX0lPU19UQkEpOwogI2lmIFRBUkdFVF9PU19JUEhPTkUKIC0g
KEJPT0wpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkSW5jbHVkZUFwcExpbmtB
Y3Rpb25zRm9yRWxlbWVudDooX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKillbGVtZW50IFdLX0FW
QUlMQUJMRShOQSwgOV8wKTsKIC0gKE5TQXJyYXkgKilfd2ViVmlldzooV0tXZWJWaWV3ICopd2Vi
VmlldyBhY3Rpb25zRm9yRWxlbWVudDooX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKillbGVtZW50
IGRlZmF1bHRBY3Rpb25zOihXS19BUlJBWShfV0tFbGVtZW50QWN0aW9uICopICopZGVmYXVsdEFj
dGlvbnM7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRB
c3Npc3RhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
QWN0aW9uU2hlZXRBc3Npc3RhbnQuaAkocmV2aXNpb24gMTk1NTY0KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDYgKzU1LDggQEAgc3RydWN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
OwogLSAodm9pZCl1cGRhdGVQb3NpdGlvbkluZm9ybWF0aW9uRm9yQWN0aW9uU2hlZXRBc3Npc3Rh
bnQ6KFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQgKilhc3Npc3RhbnQ7CiAtICh2b2lkKWFjdGlvblNo
ZWV0QXNzaXN0YW50OihXS0FjdGlvblNoZWV0QXNzaXN0YW50ICopYXNzaXN0YW50IHdpbGxTdGFy
dEludGVyYWN0aW9uV2l0aEVsZW1lbnQ6KF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICopZWxlbWVu
dDsKIC0gKHZvaWQpYWN0aW9uU2hlZXRBc3Npc3RhbnREaWRTdG9wSW50ZXJhY3Rpb246KFdLQWN0
aW9uU2hlZXRBc3Npc3RhbnQgKilhc3Npc3RhbnQ7CistIChOU0RpY3Rpb25hcnkgKilkYXRhRGV0
ZWN0aW9uQ29udGV4dEZvckFjdGlvblNoZWV0QXNzaXN0YW50OihXS0FjdGlvblNoZWV0QXNzaXN0
YW50ICopYXNzaXN0YW50OworLSAoTlNTdHJpbmcgKilzZWxlY3RlZFRleHRGb3JBY3Rpb25TaGVl
dEFzc2lzdGFudDooV0tBY3Rpb25TaGVldEFzc2lzdGFudCAqKWFzc2lzdGFudDsKIAogQGVuZAog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3Rh
bnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0FjdGlv
blNoZWV0QXNzaXN0YW50Lm1tCShyZXZpc2lvbiAxOTU1NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0JKHdvcmtpbmcgY29weSkKQEAg
LTU5LDYgKzU5LDEwIEBAIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhUQ0MpCiBTT0ZUX0xJ
TksoVENDLCBUQ0NBY2Nlc3NQcmVmbGlnaHQsIFRDQ0FjY2Vzc1ByZWZsaWdodFJlc3VsdCwgKENG
U3RyaW5nUmVmIHNlcnZpY2UsIENGRGljdGlvbmFyeVJlZiBvcHRpb25zKSwgKHNlcnZpY2UsIG9w
dGlvbnMpKQogU09GVF9MSU5LX0NPTlNUQU5UKFRDQywga1RDQ1NlcnZpY2VQaG90b3MsIENGU3Ry
aW5nUmVmKQogCitAaW50ZXJmYWNlIERERGV0ZWN0aW9uQ29udHJvbGxlciAoU3RhZ2luZ1RvUmVt
b3ZlKQorLSAoTlNBcnJheSAqKWFjdGlvbnNGb3JVUkw6KE5TVVJMICopdXJsIGlkZW50aWZpZXI6
KE5TU3RyaW5nICopaWRlbnRpZmllciBzZWxlY3RlZFRleHQ6KE5TU3RyaW5nICopc2VsZWN0ZWRU
ZXh0IHJlc3VsdHM6KE5TQXJyYXkgKilyZXN1bHRzIGNvbnRleHQ6KE5TRGljdGlvbmFyeSAqKWNv
bnRleHQ7CitAZW5kCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKICNpZiBIQVZFKEFQUF9M
SU5LUykKQEAgLTQxNCwxNCArNDE4LDI3IEBAIC0gKHZvaWQpc2hvd0RhdGFEZXRlY3RvcnNTaGVl
dAogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5TVVJMICp0YXJn
ZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbZGVsZWdhdGUgcG9zaXRpb25JbmZvcm1hdGlv
bkZvckFjdGlvblNoZWV0QXNzaXN0YW50OnNlbGZdLnVybF07CisgICAgY29uc3QgV2ViS2l0OjpJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYgcG9zaXRpb25JbmZvcm1hdGlvbiA9IFtk
ZWxlZ2F0ZSBwb3NpdGlvbkluZm9ybWF0aW9uRm9yQWN0aW9uU2hlZXRBc3Npc3RhbnQ6c2VsZl07
CisgICAgTlNVUkwgKnRhcmdldFVSTCA9IFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6cG9z
aXRpb25JbmZvcm1hdGlvbi51cmxdOwogICAgIGlmICghdGFyZ2V0VVJMKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoIVtbZ2V0REREZXRlY3Rpb25Db250cm9sbGVyQ2xhc3MoKSB0YXBBbmRI
b2xkU2NoZW1lc10gY29udGFpbnNPYmplY3Q6W3RhcmdldFVSTCBzY2hlbWVdXSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgTlNBcnJheSAqZGF0YURldGVjdG9yc0FjdGlvbnMgPSBbW2dldERERGV0
ZWN0aW9uQ29udHJvbGxlckNsYXNzKCkgc2hhcmVkQ29udHJvbGxlcl0gYWN0aW9uc0ZvckFuY2hv
cjpuaWwgdXJsOnRhcmdldFVSTCBmb3JGcmFtZTpuaWxdOworICAgIERERGV0ZWN0aW9uQ29udHJv
bGxlciAqY29udHJvbGxlciA9IFtnZXRERERldGVjdGlvbkNvbnRyb2xsZXJDbGFzcygpIHNoYXJl
ZENvbnRyb2xsZXJdOworICAgIE5TQXJyYXkgKmRhdGFEZXRlY3RvcnNBY3Rpb25zID0gbmlsOwor
ICAgIGlmIChbY29udHJvbGxlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGFjdGlvbnNG
b3JVUkw6aWRlbnRpZmllcjpzZWxlY3RlZFRleHQ6cmVzdWx0czpjb250ZXh0OildKSB7CisgICAg
ICAgIE5TRGljdGlvbmFyeSAqY29udGV4dCA9IG5pbDsKKyAgICAgICAgTlNTdHJpbmcgKnRleHRB
dFNlbGVjdGlvbiA9IG5pbDsKKworICAgICAgICBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoZGF0YURldGVjdGlvbkNvbnRleHRGb3JBY3Rpb25TaGVldEFzc2lzdGFu
dDopXSkKKyAgICAgICAgICAgIGNvbnRleHQgPSBbZGVsZWdhdGUgZGF0YURldGVjdGlvbkNvbnRl
eHRGb3JBY3Rpb25TaGVldEFzc2lzdGFudDpzZWxmXTsKKyAgICAgICAgaWYgKFtkZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNlbGVjdGVkVGV4dEZvckFjdGlvblNoZWV0QXNz
aXN0YW50OildKQorICAgICAgICAgICAgdGV4dEF0U2VsZWN0aW9uID0gW2RlbGVnYXRlIHNlbGVj
dGVkVGV4dEZvckFjdGlvblNoZWV0QXNzaXN0YW50OnNlbGZdOworICAgICAgICBkYXRhRGV0ZWN0
b3JzQWN0aW9ucyA9IFtjb250cm9sbGVyIGFjdGlvbnNGb3JVUkw6dGFyZ2V0VVJMIGlkZW50aWZp
ZXI6cG9zaXRpb25JbmZvcm1hdGlvbi5kYXRhRGV0ZWN0b3JJZGVudGlmaWVyIHNlbGVjdGVkVGV4
dDp0ZXh0QXRTZWxlY3Rpb24gcmVzdWx0czpwb3NpdGlvbkluZm9ybWF0aW9uLmRhdGFEZXRlY3Rv
clJlc3VsdHMuZ2V0KCkgY29udGV4dDpjb250ZXh0XTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGF0
YURldGVjdG9yc0FjdGlvbnMgPSBbY29udHJvbGxlciBhY3Rpb25zRm9yQW5jaG9yOm5pbCB1cmw6
dGFyZ2V0VVJMIGZvckZyYW1lOm5pbF07CiAgICAgaWYgKFtkYXRhRGV0ZWN0b3JzQWN0aW9ucyBj
b3VudF0gPT0gMCkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkocmV2
aXNpb24gMTk1NTY0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAKICNpbXBv
cnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9VVENvcmVUeXBlcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9D
b2xvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvRGF0YURldGVjdG9yc0NvcmVTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRRdWFk
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGF0
aC5oPgpAQCAtMjM3LDYgKzIzOCwxMCBAQCBAaW50ZXJmYWNlIFVJUHJldmlld0l0ZW1Db250cm9s
bGVyIChTdGFnCiBAZW5kCiAjZW5kaWYKIAorQGludGVyZmFjZSBERERldGVjdGlvbkNvbnRyb2xs
ZXIgKFN0YWdpbmdUb1JlbW92ZSkKKy0gKEREUmVzdWx0UmVmKXJlc3VsdEZvclVSTDooTlNVUkwg
Kil1cmwgaWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIHNlbGVjdGVkVGV4dDooTlNT
dHJpbmcgKilzZWxlY3RlZFRleHQgcmVzdWx0czooTlNBcnJheSAqKXJlc3VsdHMgY29udGV4dDoo
TlNEaWN0aW9uYXJ5ICopY29udGV4dCBleHRlbmRlZENvbnRleHQ6KE5TRGljdGlvbmFyeSAqKill
eHRlbmRlZENvbnRleHQ7CitAZW5kCisKIEBpbnRlcmZhY2UgV0tGb2N1c2VkRWxlbWVudEluZm8g
OiBOU09iamVjdCA8X1dLRm9jdXNlZEVsZW1lbnRJbmZvPgogLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQXNzaXN0ZWROb2RlSW5mb3JtYXRpb246KGNvbnN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9u
JilpbmZvcm1hdGlvbiBpc1VzZXJJbml0aWF0ZWQ6KEJPT0wpaXNVc2VySW5pdGlhdGVkOwogQGVu
ZApAQCAtMzQ3MSw2ICszNDc2LDIwIEBAIC0gKHZvaWQpYWN0aW9uU2hlZXRBc3Npc3RhbnREaWRT
dG9wSW50ZXIKICAgICBfcGFnZS0+c3RvcEludGVyYWN0aW9uKCk7CiB9CiAKKy0gKE5TRGljdGlv
bmFyeSAqKWRhdGFEZXRlY3Rpb25Db250ZXh0Rm9yQWN0aW9uU2hlZXRBc3Npc3RhbnQ6KFdLQWN0
aW9uU2hlZXRBc3Npc3RhbnQgKilhc3Npc3RhbnQKK3sKKyAgICBOU0RpY3Rpb25hcnkgKmNvbnRl
eHQgPSBuaWw7CisgICAgaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+IHVpRGVsZWdhdGUgPSBzdGF0
aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KFtfd2ViVmlldyBVSURlbGVnYXRlXSk7
CisgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2RhdGFE
ZXRlY3Rpb25Db250ZXh0Rm9yV2ViVmlldzopXSkKKyAgICAgICAgY29udGV4dCA9IFt1aURlbGVn
YXRlIF9kYXRhRGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXc6X3dlYlZpZXddOworICAgIHJldHVy
biBjb250ZXh0OworfQorCistIChOU1N0cmluZyAqKXNlbGVjdGVkVGV4dEZvckFjdGlvblNoZWV0
QXNzaXN0YW50OihXS0FjdGlvblNoZWV0QXNzaXN0YW50ICopYXNzaXN0YW50Cit7CisgICAgcmV0
dXJuIFtzZWxmIHNlbGVjdGVkVGV4dF07Cit9CisKIEBlbmQKIAogI2lmIEhBVkUoTElOS19QUkVW
SUVXKQpAQCAtMzU0NSw3ICszNTY0LDcgQEAgLSAoTlNEaWN0aW9uYXJ5ICopX2RhdGFGb3JQcmV2
aWV3SXRlbUNvbgogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgU3RyaW5nIGFic29sdXRlTGlu
a1VSTCA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLnVybDsKLSAgICBpZiAoIXVzZUltYWdlVVJMRm9y
TGluayAmJiAoYWJzb2x1dGVMaW5rVVJMLmlzRW1wdHkoKSB8fCAhV2ViQ29yZTo6cHJvdG9jb2xJ
c0luSFRUUEZhbWlseShhYnNvbHV0ZUxpbmtVUkwpKSkgeworICAgIGlmICghdXNlSW1hZ2VVUkxG
b3JMaW5rICYmIChhYnNvbHV0ZUxpbmtVUkwuaXNFbXB0eSgpIHx8ICghV2ViQ29yZTo6cHJvdG9j
b2xJc0luSFRUUEZhbWlseShhYnNvbHV0ZUxpbmtVUkwpICYmICFfcG9zaXRpb25JbmZvcm1hdGlv
bi5pc0RhdGFEZXRlY3RvckxpbmspKSkgewogICAgICAgICBpZiAoY2FuU2hvd0xpbmtQcmV2aWV3
ICYmICFjYW5TaG93SW1hZ2VQcmV2aWV3KQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAg
ICAgY2FuU2hvd0xpbmtQcmV2aWV3ID0gTk87CkBAIC0zNTU4LDYgKzM1NzcsMjIgQEAgLSAoTlNE
aWN0aW9uYXJ5ICopX2RhdGFGb3JQcmV2aWV3SXRlbUNvbgogICAgICAgICAgICAgZGF0YUZvclBy
ZXZpZXdbVUlQcmV2aWV3RGF0YUxpbmtdID0gW05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpf
cG9zaXRpb25JbmZvcm1hdGlvbi5pbWFnZVVSTF07CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGRhdGFGb3JQcmV2aWV3W1VJUHJldmlld0RhdGFMaW5rXSA9IFtOU1VSTCBfd2ViX1VSTFdpdGhX
VEZTdHJpbmc6X3Bvc2l0aW9uSW5mb3JtYXRpb24udXJsXTsKKyAgICAgICAgaWYgKF9wb3NpdGlv
bkluZm9ybWF0aW9uLmlzRGF0YURldGVjdG9yTGluaykgeworICAgICAgICAgICAgTlNEaWN0aW9u
YXJ5ICpjb250ZXh0ID0gbmlsOworICAgICAgICAgICAgaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
IHVpRGVsZWdhdGUgPSBzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KFtfd2Vi
VmlldyBVSURlbGVnYXRlXSk7CisgICAgICAgICAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihfZGF0YURldGVjdGlvbkNvbnRleHRGb3JXZWJWaWV3OildKQor
ICAgICAgICAgICAgICAgIGNvbnRleHQgPSBbdWlEZWxlZ2F0ZSBfZGF0YURldGVjdGlvbkNvbnRl
eHRGb3JXZWJWaWV3Ol93ZWJWaWV3XTsKKworICAgICAgICAgICAgREREZXRlY3Rpb25Db250cm9s
bGVyICpjb250cm9sbGVyID0gW2dldERERGV0ZWN0aW9uQ29udHJvbGxlckNsYXNzKCkgc2hhcmVk
Q29udHJvbGxlcl07CisgICAgICAgICAgICBpZiAoW2NvbnRyb2xsZXIgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihyZXN1bHRGb3JVUkw6aWRlbnRpZmllcjpzZWxlY3RlZFRleHQ6cmVzdWx0
czpjb250ZXh0OmV4dGVuZGVkQ29udGV4dDopXSkgeworICAgICAgICAgICAgICAgIE5TRGljdGlv
bmFyeSAqbmV3Q29udGV4dCA9IG5pbDsKKyAgICAgICAgICAgICAgICBERFJlc3VsdFJlZiBkZFJl
c3VsdCA9IFtjb250cm9sbGVyIHJlc3VsdEZvclVSTDpkYXRhRm9yUHJldmlld1tVSVByZXZpZXdE
YXRhTGlua10gaWRlbnRpZmllcjpfcG9zaXRpb25JbmZvcm1hdGlvbi5kYXRhRGV0ZWN0b3JJZGVu
dGlmaWVyIHNlbGVjdGVkVGV4dDpbc2VsZiBzZWxlY3RlZFRleHRdIHJlc3VsdHM6X3Bvc2l0aW9u
SW5mb3JtYXRpb24uZGF0YURldGVjdG9yUmVzdWx0cy5nZXQoKSBjb250ZXh0OmNvbnRleHQgZXh0
ZW5kZWRDb250ZXh0OiZuZXdDb250ZXh0XTsKKyAgICAgICAgICAgICAgICBpZiAoZGRSZXN1bHQp
CisgICAgICAgICAgICAgICAgICAgIGRhdGFGb3JQcmV2aWV3W1VJUHJldmlld0RhdGFERFJlc3Vs
dF0gPSAoX19icmlkZ2UgaWQpZGRSZXN1bHQ7CisgICAgICAgICAgICAgICAgaWYgKG5ld0NvbnRl
eHQpCisgICAgICAgICAgICAgICAgICAgIGRhdGFGb3JQcmV2aWV3W1VJUHJldmlld0RhdGFERENv
bnRleHRdID0gbmV3Q29udGV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0gZWxz
ZSBpZiAoY2FuU2hvd0ltYWdlUHJldmlldykgewogICAgICAgICAqdHlwZSA9IFVJUHJldmlld0l0
ZW1UeXBlSW1hZ2U7CiAgICAgICAgIGRhdGFGb3JQcmV2aWV3W1VJUHJldmlld0RhdGFMaW5rXSA9
IFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6X3Bvc2l0aW9uSW5mb3JtYXRpb24uaW1hZ2VV
UkxdOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJv
eHlJT1MubW0JKHJldmlzaW9uIDE5NTU2NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW1wb3J0ICJBUElVSUNsaWVudC5oIgogI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgogI2ltcG9y
dCAiRWRpdGluZ1JhbmdlLmgiCisjaW1wb3J0ICJJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbi5oIgogI2ltcG9ydCAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2ltcG9ydCAiUGFn
ZUNsaWVudC5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTk1NTY0KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk2LDEwICsxNjk2LDEwIEBA
CiAJCUM1NzRBNTgxMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NzRBNTdGMTJFNjY2ODEw
MDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCAqLzsgfTsKIAkJQzU3NEE1ODIxMkU2NjY4MTAw
MkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM1NzRBNTgwMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJk
VHlwZXMubW0gKi87IH07CiAJCUM1OENERjJBMTg4NzU0OEIwMDg3MTUzNiAvKiBJbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzU4Q0RGMjgxODg3NTQ4QjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uLmggKi87IH07Ci0JCUM1OENERjJEMTg4NzYwOUYwMDg3MTUzNiAv
KiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNThDREYyQjE4ODc2MDlGMDA4NzE1MzYgLyog
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwICovOyB9OwotCQlDNThDREYyRTE4
ODc2MDlGMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1OENERjJDMTg4NzYw
OUYwMDg3MTUzNiAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oICovOyB9Owog
CQlDNTlDNEE1ODE4QjgxMTc0MDA3QkRDQjYgLyogQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU5QzRBNTYx
OEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcCAqLzsgfTsKIAkJ
QzU5QzRBNTkxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTlDNEE1NzE4Qjgx
MTc0MDA3QkRDQjYgLyogQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaCAqLzsgfTsKKwkJQzVCQ0U1
REUxQzUwNzY2MzAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzVCQ0U1REIx
QzUwNzYxRDAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tICov
OyB9OworCQlDNUJDRTVERjFDNTA3NjZBMDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM1QkNFNURBMUM1MDc2MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbi5oICovOyB9OwogCQlDNUUxQUZFODE2QjIwQjY3MDA2Q0MxRjIgLyogV0tXZWJBcmNo
aXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MzI5REE1MTZBQ0U1QTkwMDMxNkRFMiAvKiBXS1dlYkFyY2hpdmUuY3BwICovOyB9OwogCQlDNUUx
QUZFOTE2QjIwQjc1MDA2Q0MxRjIgLyogV0tXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMyOURBNjE2QUNFNUE5MDAzMTZERTIgLyog
V0tXZWJBcmNoaXZlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQzVFMUFGRUExNkIyMEI3QjAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2ZVJlc291cmNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzI5
REE5MTZBQ0U1QkYwMDMxNkRFMiAvKiBXS1dlYkFyY2hpdmVSZXNvdXJjZS5jcHAgKi87IH07CkBA
IC0zOTM5LDEwICszOTM5LDEwIEBACiAJCUM1NzRBNTdGMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0
ZWJvYXJkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2Fy
ZFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NzRBNTgwMTJFNjY2ODEw
MDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBQYXN0ZWJvYXJkVHlwZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUM1OENERjI4MTg4NzU0OEIwMDg3MTUzNiAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
NThDREYyQjE4ODc2MDlGMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
NThDREYyQzE4ODc2MDlGMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJhY3Rpb25JbmZvcm1h
dGlvbkF0UG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU5QzRBNTYx
OEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU5QzRBNTcxOEI4MTE3NDAwN0JEQ0I2IC8q
IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUM1QkNFNURBMUM1MDc2MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbi5oOyBwYXRoID0gaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1QkNFNURCMUM1MDc2
MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uLm1tOyBwYXRoID0gaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNUZBMUVEMTE4RTEwNjIyMDBCM0Y0
MDIgLyogV0tBaXJQbGF5Um91dGVQaWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV0tBaXJQbGF5Um91dGVQaWNrZXIuaDsgcGF0aCA9IGlvcy9mb3Jtcy9XS0FpclBsYXlS
b3V0ZVBpY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNUZBMUVEMjE4RTEw
NjIyMDBCM0Y0MDIgLyogV0tBaXJQbGF5Um91dGVQaWNrZXIubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0FpclBsYXlSb3V0ZVBpY2tlci5tbTsgcGF0aCA9IGlv
cy9mb3Jtcy9XS0FpclBsYXlSb3V0ZVBpY2tlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzk4QzQ4QTMxQjZGRDRDMzAwMTQ1MTAzIC8qIFdlYk1lZGlhU2Vzc2lvbkZvY3VzTWFu
YWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJNZWRpYVNl
c3Npb25Gb2N1c01hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDcz
NCw4ICs0NzM0LDYgQEAKIAkJCQkxQUM3NUExQTFCMzM2ODI3MDA1Njc0NUIgLyogSGFuZ0RldGVj
dGlvbkRpc2FibGVyLmggKi8sCiAJCQkJRjYzODk1NEYxMzNCRUYzODAwODk0MUQ1IC8qIEhUVFBD
b29raWVBY2NlcHRQb2xpY3kuaCAqLywKIAkJCQlCQ0NGNkIyMzEyQzkzRTdBMDA4RjlDMzUgLyog
SW1hZ2VPcHRpb25zLmggKi8sCi0JCQkJQzU4Q0RGMkIxODg3NjA5RjAwODcxNTM2IC8qIEludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcCAqLywKLQkJCQlDNThDREYyQzE4ODc2MDlG
MDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCAqLywKIAkJCQkx
QTkyREMxMjEyRjhCQUI5MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5jcHAgKi8sCiAJCQkJ
MUE5MkRDMTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCAqLywKIAkJCQky
RDUwMzY2QTFCQ0RFMTc5MDBFMjBCQjMgLyogTmF0aXZlV2ViR2VzdHVyZUV2ZW50LmggKi8sCkBA
IC01MDk3LDYgKzUwOTUsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQTdFOTNDRUIxOTI1MzFB
QTAwQTFEQzQ4IC8qIENoaWxkUHJvY2Vzc0lPUy5tbSAqLywKIAkJCQkyREE5NDQ5RDE4ODRFNEYw
MDBFRDg2REIgLyogR2VzdHVyZVR5cGVzLmggKi8sCisJCQkJQzVCQ0U1REExQzUwNzYxRDAwQ0RF
M0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggKi8sCisJCQkJQzVCQ0U1
REIxQzUwNzYxRDAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1t
ICovLAogCQkJCTJEQTk0NDk3MTg4NEU0RjAwMEVEODZEQiAvKiBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50SU9TLm1tICovLAogCQkJCTJEQTk0NDk4MTg4NEU0RjAwMEVEODZEQiAvKiBOYXRpdmVXZWJU
b3VjaEV2ZW50SU9TLm1tICovLAogCQkJCUExMThBOUVDMTkwN0FENkYwMEY3QzkyQiAvKiBRdWlj
a0xvb2tEb2N1bWVudERhdGEuY3BwICovLApAQCAtNzY2NCw2ICs3NjY0LDcgQEAKIAkJCQlDNUUx
QUZFRDE2QjIxMDE3MDA2Q0MxRjIgLyogQVBJV2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzVFMUFGRUYxNkIyMTAyOTAwNkNDMUYyIC8qIEFQSVdlYkFyY2hpdmVSZXNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE0ODMyQzgxQTlCQzEzQzAwOEI0REZFIC8qIEFQSVdlYnNpdGVE
YXRhUmVjb3JkLmggaW4gSGVhZGVycyAqLywKKwkJCQlDNUJDRTVERjFDNTA3NjZBMDBDREUzRkEg
LyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBMzYzNUFBMUEzMTQ0QTMwMEVENjE5NyAvKiBBUElXZWJzaXRlRGF0YVN0b3JlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQTY1NjNFNTFCN0E4QzUwMDA5Q0Y3ODcgLyogQVBJV2luZG93RmVhdHVy
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRDRDMTkzMUIzOUYzMzIwMEFCQzI4RSAvKiBBcHBs
aWNhdGlvblN0YXRlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03NzY5LDcgKzc3NzAsNiBA
QAogCQkJCUJDQThDNkIwMTFFM0MwODcwMDgxMkZCNyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VVSUNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzM0UwRDExMjQwOEU4NjAwMzYwRjNGIC8qIElu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTRERjc3MTIw
QjVCNzkwMDgyNkMwQyAvKiBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmggaW4gSGVhZGVycyAq
LywKLQkJCQlDNThDREYyRTE4ODc2MDlGMDA4NzE1MzYgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUM1OENERjJBMTg4NzU0OEIwMDg3MTUz
NiAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFFNDlBNDkxMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBRTQ5ODc4MTFGRjdGQUEwMDQ4QjQ2NCAvKiBKU05QT2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTk0OTgsNyArOTQ5OCw2IEBACiAJCQkJQkNBOEM2QUYxMUUzQzA4NzAwODEyRkI3
IC8qIEluamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
MzNFMEQyMTI0MDhFODYwMDM2MEYzRiAvKiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDMTRERjc4MTIwQjVCNzkwMDgyNkMwQyAvKiBJbmplY3RlZEJ1
bmRsZVNjcmlwdFdvcmxkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1OENERjJEMTg4NzYwOUYw
MDg3MTUzNiAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUU0OUE0QTExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQUU0OTg3OTExRkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVjdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0UwOTM3NzE0RkIxMjhDMDAxMTM4RDkgLyogTGF5ZXJI
b3N0aW5nQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLApAQCAtOTk5MSw2ICs5OTkwLDcgQEAKIAkJ
CQk1MTJGNThGOTEyQTg4QTU0MDA2Mjk1MzAgLyogV0tDcmVkZW50aWFsLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDNDA3NUY3MTI0RkYwMjcwMDY4RjIwQSAvKiBXS0RhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFGRjQ5MDAxODMzREU3ODAwOUFCMTVBIC8qIFdLRGVwcmVjYXRlZEZ1bmN0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDNUJDRTVERTFDNTA3NjYzMDBDREUzRkEgLyog
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQlC
QzQwNzVGOTEyNEZGMDI3MDA2OEYyMEEgLyogV0tEaWN0aW9uYXJ5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDMDE3RDA4MTYyNjBGRjQwMDcwNTRGNSAvKiBXS0RPTURvY3VtZW50Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkMwMTdEMEExNjI2MEZGNDAwNzA1NEY1IC8qIFdLRE9NRWxlbWVudC5t
bSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNpb24gMTk1NTY0KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW1wb3J0ICJXZWJQcm9jZXNzLmgiCiAjaW1wb3J0IDxD
b3JlVGV4dC9DVEZvbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0RhdGFEZXRlY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0VsZW1lbnQuaD4KQEAgLTIyMDIsNiArMjIwMywxMyBAQCB2b2lkIFdl
YlBhZ2U6OmdldFBvc2l0aW9uSW5mb3JtYXRpb24oY29uCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodGV4dEluZGljYXRvcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmxp
bmtJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CiAgICAgICAgICAgICAgICAgICAg
IH0KKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgICAgICAgICAgICAgICAgIGluZm8u
aXNEYXRhRGV0ZWN0b3JMaW5rID0gRGF0YURldGVjdGlvbjo6aXNEYXRhRGV0ZWN0b3JMaW5rKGVs
ZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5pc0RhdGFEZXRlY3Rvckxpbmsp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZGF0YURldGVjdG9ySWRlbnRpZmllciA9
IERhdGFEZXRlY3Rpb246OmRhdGFEZXRlY3RvcklkZW50aWZpZXIoZWxlbWVudCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvLmRhdGFEZXRlY3RvclJlc3VsdHMgPSBlbGVtZW50LT5kb2N1
bWVudCgpLmZyYW1lKCktPmRhdGFEZXRlY3Rpb25SZXN1bHRzKCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+cmVuZGVy
ZXIoKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpLT5pc1JlbmRlckltYWdlKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgaW5mby5pc0ltYWdlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYXV0
byYgcmVuZGVySW1hZ2UgPSBkb3duY2FzdDxSZW5kZXJJbWFnZT4oKihlbGVtZW50LT5yZW5kZXJl
cigpKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>