<?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>193916</bug_id>
          
          <creation_ts>2019-01-28 11:12:55 -0800</creation_ts>
          <short_desc>Add data abstraction and validation for Ad Click Attribution</short_desc>
          <delta_ts>2019-01-29 11:54:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="John Wilander">wilander</reporter>
          <assigned_to name="John Wilander">wilander</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1499095</commentid>
    <comment_count>0</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-01-28 11:12:55 -0800</bug_when>
    <thetext>We need a class to represent and validate Ad Click Attribution requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499096</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-28 11:13:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/47603481&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499115</commentid>
    <comment_count>2</comment_count>
      <attachid>360361</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-01-28 11:41:00 -0800</bug_when>
    <thetext>Created attachment 360361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499134</commentid>
    <comment_count>3</comment_count>
      <attachid>360361</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-01-28 12:12:13 -0800</bug_when>
    <thetext>Comment on attachment 360361
Patch

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

More use of uniform initializer syntax, please?

&gt; Source/WebCore/loader/AdClickAttribution.cpp:35
&gt; +using namespace WTF;    

Why?

&gt; Source/WebCore/loader/AdClickAttribution.cpp:37
&gt; +static inline bool isMaxSixBits(unsigned short data)

Name feels weird and not flexible to change because it hardcodes policy in the name. One day if we want 7 bits then we have to rename...hopefully such a person will do the rename.

&gt; Source/WebCore/loader/AdClickAttribution.cpp:52
&gt; +void AdClickAttribution::setCampaign(Campaign campaign)

Why out-of-line? Will this be API one day? If not, just inline in header as binary compatibility is not a concern.

&gt; Source/WebCore/loader/AdClickAttribution.h:41
&gt; +    typedef unsigned short CampaignId;

Old style. New hotness is “using”.

&gt; Source/WebCore/loader/AdClickAttribution.h:42
&gt; +    typedef unsigned short ConversionData;

Ditto.

&gt; Source/WebCore/loader/AdClickAttribution.h:43
&gt; +    typedef unsigned short PriorityValue;

Ditto.

&gt; Source/WebCore/loader/AdClickAttribution.h:45
&gt; +struct Campaign {

Why a struct and a typeset for id? Where’s the type-safety issue? Prefer to defer this struct until a campaign is more than an id z

&gt; Source/WebCore/loader/AdClickAttribution.h:51
&gt; +};

Indent of struct is weird.

&gt; Source/WebCore/loader/AdClickAttribution.h:63
&gt; +};

Weird indent

&gt; Source/WebCore/loader/AdClickAttribution.h:75
&gt; +};

Weird indent.

&gt; Source/WebCore/loader/AdClickAttribution.h:77
&gt; +struct Conversion {

Ok... I can see why you made a Campaign struct

&gt; Source/WebCore/loader/AdClickAttribution.h:101
&gt; +    AdClickAttribution() = delete;

Unnecessary.

&gt; Source/WebCore/loader/AdClickAttribution.h:102
&gt; +    AdClickAttribution(const AdClickAttribution&amp;) = delete;

Use Noncopyable instead of doing this.

&gt; Source/WebCore/loader/AdClickAttribution.h:104
&gt; +    AdClickAttribution(AdClickAttribution&amp;&amp;) = default;

I think this is unnecessary...

&gt; Source/WebCore/loader/AdClickAttribution.h:105
&gt; +    AdClickAttribution&amp; operator=(AdClickAttribution&amp;&amp;) = default;

Ditto.

&gt; Source/WebCore/loader/AdClickAttribution.h:107
&gt; +    WEBCORE_EXPORT void setCampaign(Campaign);

Two ways to set campaign. Is this necessary?

&gt; Source/WebCore/loader/AdClickAttribution.h:109
&gt; +

(Reviewing on iOS is wack) Below method should be const. if not, why?

&gt; Source/WebCore/loader/AdClickAttribution.h:110
&gt; +    WEBCORE_EXPORT URL attributionUrl();

Name of this is wrong. Read style guide for methods with acronyms.

&gt; Source/WebCore/loader/AdClickAttribution.h:111
&gt; +    WEBCORE_EXPORT URL attributionReferrer();

Const? Also is the “attribution” prefix needed in this method and the one above as the class is called attribution. Avoid duplications

&gt; Source/WebCore/loader/AdClickAttribution.h:112
&gt; +    Optional&lt;WallTime&gt; earliestTimeToSendAttribution() { return m_earliestTimeToSend; };

Why optional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499139</commentid>
    <comment_count>4</comment_count>
      <attachid>360361</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-01-28 12:17:18 -0800</bug_when>
    <thetext>Comment on attachment 360361
Patch

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

&gt; Source/WebCore/loader/AdClickAttribution.cpp:37
&gt; +static inline bool isMaxSixBits(unsigned short data)

I wonder if we should encode these as &quot;isAllowableConversionBits&quot; and &quot;isAllowableCampaignBits&quot;, since they might be different?

Or better yet, make them const members of the Conversion and Campaign structs.

I think these also need &quot;isValid&quot; members so we can generate DOM errors if one is created in script outside of allowable bounds.

&gt; Source/WebCore/loader/AdClickAttribution.cpp:61
&gt; +        return;

This should generate a DOM error.

&gt; Source/WebCore/loader/AdClickAttribution.cpp:76
&gt; +    builder.append(m_source.topPrivatelyControlledDomain);

Why don&apos;t we call this member &quot;m_attributionDomain&quot; or something, rather than m_source?

&gt; Source/WebCore/loader/AdClickAttribution.cpp:80
&gt; +    builder.appendNumber(m_campaign.id);

Seems like we could build this at construction, rather than every time you asked for the Url. Then this could be const (and efficient).

Or at the very least, we should lazily build it and remember it for later.

&gt; Source/WebCore/loader/AdClickAttribution.cpp:89
&gt; +URL AdClickAttribution::attributionReferrer()

Ditto.

&gt; Source/WebCore/loader/AdClickAttribution.cpp:96
&gt; +    builder.append(m_destination.topPrivatelyControlledDomain);

Why don&apos;t we call this &quot;m_referrer&quot; rather than &quot;m_destination&quot;?

&gt; Source/WebCore/loader/AdClickAttribution.h:54
&gt; +    explicit Source(const String&amp; host)

What is the benefit of a struct containing a String, versus just storing a String? Do you plan on incorporating more state about the Source/Destination in a later patch?

&gt; Source/WebCore/loader/AdClickAttribution.h:56
&gt; +        : topPrivatelyControlledDomain(WebCore::topPrivatelyControlledDomain(host))

If the domain is only every the top privately controlled domain, we might be better off using &quot;topDomain&quot; or &quot;sourceDomain&quot;.

&gt; Source/WebCore/loader/AdClickAttribution.h:85
&gt; +struct Priority {

This seems like it would be better as a &quot;plain-old-type&quot; in the class, rather than this wrapping struct. Why is Priority an object?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499145</commentid>
    <comment_count>5</comment_count>
      <attachid>360361</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-01-28 12:53:05 -0800</bug_when>
    <thetext>Comment on attachment 360361
Patch

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

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:1999
&gt; +		6B0A07F321FA4B5C00D57391 /* AdClickAttribution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B0A07F121FA4B5C00D57391 /* AdClickAttribution.cpp */; };

This should be added to Sources.txt instead of included in the WebCore target.  We should also add a runtime switch, but probably in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499149</commentid>
    <comment_count>6</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-01-28 13:17:51 -0800</bug_when>
    <thetext>(In reply to Daniel Bates from comment #3)
&gt; Comment on attachment 360361 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=360361&amp;action=review
&gt; 
&gt; More use of uniform initializer syntax, please?

Do you have a specific example so that I know I&apos;m addressing the issue?

&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:35
&gt; &gt; +using namespace WTF;    
&gt; 
&gt; Why?

For WallTime, String, and Optional. Maybe it&apos;s not needed?

&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:37
&gt; &gt; +static inline bool isMaxSixBits(unsigned short data)
&gt; 
&gt; Name feels weird and not flexible to change because it hardcodes policy in
&gt; the name. One day if we want 7 bits then we have to rename...hopefully such
&gt; a person will do the rename.

The reason I hardcoded it is to make the code readable, especially for people who care about the bits of entropy here. Brent had a suggested new name. I can try that.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:52
&gt; &gt; +void AdClickAttribution::setCampaign(Campaign campaign)
&gt; 
&gt; Why out-of-line? Will this be API one day? If not, just inline in header as
&gt; binary compatibility is not a concern.

I can make it in-line.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:41
&gt; &gt; +    typedef unsigned short CampaignId;
&gt; 
&gt; Old style. New hotness is “using”.

Ah. Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:42
&gt; &gt; +    typedef unsigned short ConversionData;
&gt; 
&gt; Ditto.

Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:43
&gt; &gt; +    typedef unsigned short PriorityValue;
&gt; 
&gt; Ditto.

Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:45
&gt; &gt; +struct Campaign {
&gt; 
&gt; Why a struct and a typeset for id? Where’s the type-safety issue? Prefer to
&gt; defer this struct until a campaign is more than an id z

I don&apos;t want the function call to use plain strings where the caller can make a mistake on which is the source and which is the destination. After implementing that abstraction it looked more consistent to me to have all three arguments be typed. On top of that, the code handles three pieces of data that are unsigned shorts and I want to avoid mistakes where they get mixed up.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:51
&gt; &gt; +};
&gt; 
&gt; Indent of struct is weird.

Can you be more specific, please? Are the curly braces wrong, or the body of the structs, or what?

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:63
&gt; &gt; +};
&gt; 
&gt; Weird indent
&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:75
&gt; &gt; +};
&gt; 
&gt; Weird indent.
&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:77
&gt; &gt; +struct Conversion {
&gt; 
&gt; Ok... I can see why you made a Campaign struct
&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:101
&gt; &gt; +    AdClickAttribution() = delete;
&gt; 
&gt; Unnecessary.
&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:102
&gt; &gt; +    AdClickAttribution(const AdClickAttribution&amp;) = delete;
&gt; 
&gt; Use Noncopyable instead of doing this.
&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:104
&gt; &gt; +    AdClickAttribution(AdClickAttribution&amp;&amp;) = default;
&gt; 
&gt; I think this is unnecessary...
&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:105
&gt; &gt; +    AdClickAttribution&amp; operator=(AdClickAttribution&amp;&amp;) = default;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:107
&gt; &gt; +    WEBCORE_EXPORT void setCampaign(Campaign);
&gt; 
&gt; Two ways to set campaign. Is this necessary?

You mean constructor + this setter? I had thoughts on users clicking multiple ad campaigns but you&apos;re right. I don&apos;t need this setter now so it&apos;s better to add it if/when there really is a need.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:109
&gt; &gt; +
&gt; 
&gt; (Reviewing on iOS is wack) Below method should be const. if not, why?

You&apos;re right. I&apos;ll make it const.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:110
&gt; &gt; +    WEBCORE_EXPORT URL attributionUrl();
&gt; 
&gt; Name of this is wrong. Read style guide for methods with acronyms.

OK. I assume URL should be URL and not Url.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:111
&gt; &gt; +    WEBCORE_EXPORT URL attributionReferrer();
&gt; 
&gt; Const? Also is the “attribution” prefix needed in this method and the one
&gt; above as the class is called attribution. Avoid duplications

I went back and forth on the prefix, thinking about the caller and what they may have named the local object/parameter they&apos;re working on. But you&apos;re probably right. I&apos;ll remove the prefix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:112
&gt; &gt; +    Optional&lt;WallTime&gt; earliestTimeToSendAttribution() { return m_earliestTimeToSend; };
&gt; 
&gt; Why optional?

Since the object may not yet have received a call to requestAttribution(), m_earliestTimeToSend may not be set.

Thanks for all the comments!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499159</commentid>
    <comment_count>7</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-01-28 13:29:44 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #5)
&gt; Comment on attachment 360361 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=360361&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:1999
&gt; &gt; +		6B0A07F321FA4B5C00D57391 /* AdClickAttribution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B0A07F121FA4B5C00D57391 /* AdClickAttribution.cpp */; };
&gt; 
&gt; This should be added to Sources.txt instead of included in the WebCore
&gt; target.

To be sure, that will still work with API tests? Because I had to make it WebCore private for that.

&gt; We should also add a runtime switch, but probably in another patch.

Beyond what landed in https://bugs.webkit.org/show_bug.cgi?id=193685 ? Or would you like this class to make use of the runtime flag? I started out that way but decided that this class is merely a data abstraction and it&apos;ll be its users that check whether the feature is on or off.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499172</commentid>
    <comment_count>8</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-01-28 13:40:57 -0800</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #4)
&gt; Comment on attachment 360361 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=360361&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:37
&gt; &gt; +static inline bool isMaxSixBits(unsigned short data)
&gt; 
&gt; I wonder if we should encode these as &quot;isAllowableConversionBits&quot; and
&gt; &quot;isAllowableCampaignBits&quot;, since they might be different?

Dan commented on this too. I just wanted it to be explicit and readable for the people who care about entropy. But your abstract name works too.

&gt; Or better yet, make them const members of the Conversion and Campaign
&gt; structs.
&gt; 
&gt; I think these also need &quot;isValid&quot; members so we can generate DOM errors if
&gt; one is created in script outside of allowable bounds.

So that would mean the two structs have constants and one isValid() each that&apos;s used by the class-level isValid()?

&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:61
&gt; &gt; +        return;
&gt; 
&gt; This should generate a DOM error.

Shouldn&apos;t that be done outside this data abstraction, i.e. where the class is used? This class has no notion of a DOM or such.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:76
&gt; &gt; +    builder.append(m_source.topPrivatelyControlledDomain);
&gt; 
&gt; Why don&apos;t we call this member &quot;m_attributionDomain&quot; or something, rather
&gt; than m_source?

I&apos;m trying to mirror the language we&apos;ve used discussing this, i.e. ad click source and ad click destination. Do you think attributionDomain is more clear?

&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:80
&gt; &gt; +    builder.appendNumber(m_campaign.id);
&gt; 
&gt; Seems like we could build this at construction, rather than every time you
&gt; asked for the Url. Then this could be const (and efficient).

That is now a possibility, given that I&apos;m removing the campaign ID setter (Dan&apos;s comment). But that also means holding duplicate data in memory. Normally, this function should only be called once — when the time has come to send the attribution request. After that, the object should be destructed.

What I&apos;m trying to do is to hold minimal data in memory and construct the URL on-demand for the single call when it&apos;s needed.

&gt; Or at the very least, we should lazily build it and remember it for later.
&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:89
&gt; &gt; +URL AdClickAttribution::attributionReferrer()
&gt; 
&gt; Ditto.

See my reasoning above.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:96
&gt; &gt; +    builder.append(m_destination.topPrivatelyControlledDomain);
&gt; 
&gt; Why don&apos;t we call this &quot;m_referrer&quot; rather than &quot;m_destination&quot;?

Not a bad idea. I&apos;m a little reluctant since referrer has a specific meaning in HTTP requests. The getter is named this way because it really should be the referrer (unless we redesign it to be for instance the Origin header).

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:54
&gt; &gt; +    explicit Source(const String&amp; host)
&gt; 
&gt; What is the benefit of a struct containing a String, versus just storing a
&gt; String? Do you plan on incorporating more state about the Source/Destination
&gt; in a later patch?

The purpose is to avoid mistakes where source and destination get confused. By maintaining this type abstraction I can make any future internal functionality be explicit about which of the two strings it expects.

&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:56
&gt; &gt; +        : topPrivatelyControlledDomain(WebCore::topPrivatelyControlledDomain(host))
&gt; 
&gt; If the domain is only every the top privately controlled domain, we might be
&gt; better off using &quot;topDomain&quot; or &quot;sourceDomain&quot;.
&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:85
&gt; &gt; +struct Priority {
&gt; 
&gt; This seems like it would be better as a &quot;plain-old-type&quot; in the class,
&gt; rather than this wrapping struct. Why is Priority an object?

Again, to avoid confusion and bugs when juggling the three pieces of data that are unsigned shorts.

Thanks for all the comments!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499243</commentid>
    <comment_count>9</comment_count>
      <attachid>360391</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-01-28 15:45:06 -0800</bug_when>
    <thetext>Created attachment 360391
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499297</commentid>
    <comment_count>10</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-01-28 17:20:00 -0800</bug_when>
    <thetext>Mac-wk2 test failures are unrelated. Win tree seems red.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499333</commentid>
    <comment_count>11</comment_count>
      <attachid>360391</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-01-28 18:08:39 -0800</bug_when>
    <thetext>Comment on attachment 360391
Patch

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

&gt; Source/WebCore/loader/AdClickAttribution.cpp:52
&gt; +    m_priority = priority;

Move priority into the ivar

&gt; Source/WebCore/loader/AdClickAttribution.h:51
&gt; +            : id(id)

Uniform initializer syntax (UIS)?

&gt; Source/WebCore/loader/AdClickAttribution.h:66
&gt; +            : topPrivatelyControlledDomain(WebCore::topPrivatelyControlledDomain(host))

Ditto.

&gt; Source/WebCore/loader/AdClickAttribution.h:72
&gt; +        String topPrivatelyControlledDomain;

Ok as-is, but I don&apos;t like this terminology. The world seems to standardize on &quot;registrable domain&quot;, which is also shorter. Maybe the &quot;top&quot; should be encoded in the name of this class? Or someone may just pass the registrable domain of a subframe&apos;s document.

&gt; Source/WebCore/loader/AdClickAttribution.h:78
&gt; +            : topPrivatelyControlledDomain(WebCore::topPrivatelyControlledDomain(host))

Why is the WebCore function prefixed with &quot;Top&quot;? What does &quot;top&quot; mean? Now, I am confused.

&gt; Source/WebCore/loader/AdClickAttribution.h:84
&gt; +        String topPrivatelyControlledDomain;

Registrable doman?

&gt; Source/WebCore/loader/AdClickAttribution.h:89
&gt; +            : data(data)

UIS?

&gt; Source/WebCore/loader/AdClickAttribution.h:103
&gt; +            : value(value)

UIS?

&gt; Source/WebCore/loader/AdClickAttribution.h:115
&gt; +    AdClickAttribution(const Campaign&amp; campaign, const Source&amp; source, const Destination&amp; destination)

Pass campaign by value because it&apos;s small.

&gt; Source/WebCore/loader/AdClickAttribution.h:116
&gt; +        : m_campaign(campaign)

UIS here and the lines below.

&gt; Source/WebCore/loader/AdClickAttribution.h:123
&gt; +    WEBCORE_EXPORT void setConversion(const Conversion&amp;, const Optional&lt;Priority&gt;&amp;);

Pass conversion by value. Pass optional by rvalue reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499395</commentid>
    <comment_count>12</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-01-28 21:05:51 -0800</bug_when>
    <thetext>(In reply to Daniel Bates from comment #11)
&gt; Comment on attachment 360391 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=360391&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:52
&gt; &gt; +    m_priority = priority;
&gt; 
&gt; Move priority into the ivar

Yeah, that&apos;s better. Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:51
&gt; &gt; +            : id(id)
&gt; 
&gt; Uniform initializer syntax (UIS)?

Sorry, missed UIS. Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:66
&gt; &gt; +            : topPrivatelyControlledDomain(WebCore::topPrivatelyControlledDomain(host))
&gt; 
&gt; Ditto.

Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:72
&gt; &gt; +        String topPrivatelyControlledDomain;
&gt; 
&gt; Ok as-is, but I don&apos;t like this terminology. The world seems to standardize
&gt; on &quot;registrable domain&quot;, which is also shorter. Maybe the &quot;top&quot; should be
&gt; encoded in the name of this class? Or someone may just pass the registrable
&gt; domain of a subframe&apos;s document.

I recall you introducing registrable domain as part of your SameSite cookies work but then I couldn&apos;t find it. I&apos;m fine using that term though. Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:78
&gt; &gt; +            : topPrivatelyControlledDomain(WebCore::topPrivatelyControlledDomain(host))
&gt; 
&gt; Why is the WebCore function prefixed with &quot;Top&quot;? What does &quot;top&quot; mean? Now,
&gt; I am confused.

It&apos;s top in the domain hierarchy, as in the highest domain you can control privately.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:84
&gt; &gt; +        String topPrivatelyControlledDomain;
&gt; 
&gt; Registrable doman?

Yup. Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:89
&gt; &gt; +            : data(data)
&gt; 
&gt; UIS?

Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:103
&gt; &gt; +            : value(value)
&gt; 
&gt; UIS?

Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:115
&gt; &gt; +    AdClickAttribution(const Campaign&amp; campaign, const Source&amp; source, const Destination&amp; destination)
&gt; 
&gt; Pass campaign by value because it&apos;s small.

OK. Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:116
&gt; &gt; +        : m_campaign(campaign)
&gt; 
&gt; UIS here and the lines below.

Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:123
&gt; &gt; +    WEBCORE_EXPORT void setConversion(const Conversion&amp;, const Optional&lt;Priority&gt;&amp;);
&gt; 
&gt; Pass conversion by value. Pass optional by rvalue reference.

Since Conversion now holds both a ConversionID and a PriorityValue, I assume you&apos;ll want it as an rvalue reference.

Thanks for all these detailed review comments, Dan! New patch coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499396</commentid>
    <comment_count>13</comment_count>
      <attachid>360432</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-01-28 21:10:33 -0800</bug_when>
    <thetext>Created attachment 360432
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499594</commentid>
    <comment_count>14</comment_count>
      <attachid>360432</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-01-29 10:49:06 -0800</bug_when>
    <thetext>Comment on attachment 360432
Patch

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

&gt; Source/WebCore/loader/AdClickAttribution.h:51
&gt; +            : id {id}

Thanks for switching to UIS, but if I had known you were just going to just replace (/) with {/} and add a space before the { then I wouldn&apos;t have said anything. There should be spaces inside the curly braces on both sides as well just like how you wrote line 85 in the .cpp. Where is the description in the ChangeLog? Where is the why or how comment on the 24-48 duration? Why do I still see &quot;Url&quot; references in this patch? It&apos;s the little things like this that give me pause when reviewing this patch (maybe for someone else they are just noise?). I am done reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499599</commentid>
    <comment_count>15</comment_count>
      <attachid>360432</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-01-29 10:50:52 -0800</bug_when>
    <thetext>Comment on attachment 360432
Patch

Oops! Didn&apos;t meant to r+ the patch because I actually stopped reviewed it after my last comment. Oh well, consider my r+ equivalent to a rubber-stamp, rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499615</commentid>
    <comment_count>16</comment_count>
      <attachid>360480</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-01-29 11:19:48 -0800</bug_when>
    <thetext>Created attachment 360480
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499617</commentid>
    <comment_count>17</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-01-29 11:22:00 -0800</bug_when>
    <thetext>Thanks, Dan! I fixed the remaining issues.

The WebKit Style Guide says the following on names (https://webkit.org/code-style-guidelines/#names):

&quot;Use CamelCase. Capitalize the first letter, including all letters in an acronym, in a class, struct, protocol, or namespace name. Lower-case the first letter, including all letters in an acronym, in a variable or function name.&quot;

I guess URL is an exception to this rule.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499631</commentid>
    <comment_count>18</comment_count>
      <attachid>360480</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-29 11:54:38 -0800</bug_when>
    <thetext>Comment on attachment 360480
Patch for landing

Clearing flags on attachment: 360480

Committed r240667: &lt;https://trac.webkit.org/changeset/240667&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499632</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-29 11:54:40 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360361</attachid>
            <date>2019-01-28 11:41:00 -0800</date>
            <delta_ts>2019-01-28 15:45:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193916-20190128114059.patch</filename>
            <type>text/plain</type>
            <size>26730</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc0MzBiZGJhODMyYTE4
NjBlMWVjZTcyMDkzNWJlZjMzNDNkNWI0MC4uMDIxZjZlZWNlMDJlMDFmZTliZGM0ZGU3YjU0MzY4
NGE2ZWI5Nzc0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE5LTAxLTI4ICBKb2hu
IFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBkYXRhIGFic3Ry
YWN0aW9uIGFuZCB2YWxpZGF0aW9uIGZvciBBZCBDbGljayBBdHRyaWJ1dGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzOTE2CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS80NzYwMzQ4MT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBOZXcgQVBJIHRlc3RzIGFkZGVkLgorCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRlci9BZENsaWNrQXR0
cmlidXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzTWF4U2l4Qml0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OmlzVmFsaWQpOgorICAgICAgICAo
V2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpzZXRDYW1wYWlnbik6CisgICAgICAgIChXZWJD
b3JlOjpBZENsaWNrQXR0cmlidXRpb246OnJlcXVlc3RBdHRyaWJ1dGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OmF0dHJpYnV0aW9uVXJsKToKKyAgICAgICAgKFdl
YkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6YXR0cmlidXRpb25SZWZlcnJlcik6CisgICAgICAg
ICogbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q2FtcGFpZ246OkNhbXBhaWduKToKKyAgICAgICAgKFdlYkNv
cmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6U291cmNlOjpTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpEZXN0aW5hdGlvbjo6RGVzdGluYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uOjpDb252ZXJzaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHk6OlByaW9yaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6QWRDbGlja0F0dHJpYnV0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6ZWFybGllc3RUaW1l
VG9TZW5kQXR0cmlidXRpb24pOgorCiAyMDE5LTAxLTI0ICBKb2huIFdpbGFuZGVyICA8d2lsYW5k
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBBZCBDbGljayBBdHRyaWJ1dGlvbiBhcyBhbiBp
bnRlcm5hbC9leHBlcmltZW50YWwgZmVhdHVyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMzZDhmZGIwNDU2MzQwYzljY2YwNGEw
MmY3YWYxNDM5ODg2NDJjNjQuLjY0Y2Q4NWE4ZmE2MmE2MWIzMjA4YjdlNGM2ZDgzZDBhMGIyMWEx
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTE5OTUsNiArMTk5NSw4IEBACiAJCTY5QTZDQkFEMUM2QkU0MkMwMEI4MzZFOSAv
KiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjk3MTAxMDgxQzZCRTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxp
dHlTVkdFbGVtZW50LmggKi87IH07CiAJCTZBMjJFODcwMUYxMDQxODYwMEY1NDZDMyAvKiBJbnNw
ZWN0b3JDYW52YXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZBMjJFODZGMUYxMDQxODYwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuaCAqLzsgfTsK
IAkJNkE3Mjc5OEIxRjE2QzI5QzAwM0YzOUI4IC8qIEluc3BlY3RvclNoYWRlclByb2dyYW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZBNzI3OTg4MUYx
NkMyOUIwMDNGMzlCOCAvKiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmggKi87IH07CisJCTZCMEEw
N0YyMjFGQTRCNUMwMEQ1NzM5MSAvKiBBZENsaWNrQXR0cmlidXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCMEEwN0YwMjFGQTRCNUMwMEQ1NzM5
MSAvKiBBZENsaWNrQXR0cmlidXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk2QjBBMDdGMzIxRkE0QjVDMDBENTczOTEgLyogQWRDbGlja0F0
dHJpYnV0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZCMEEwN0YxMjFGQTRCNUMwMEQ1NzM5MSAvKiBBZENsaWNrQXR0cmlidXRpb24uY3BwICov
OyB9OwogCQk2QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCMzQ4MDkyMEVFRjUwRDQw
MEFDMUI0MSAvKiBOYXRpdmVJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTZCNjkzQTJFMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxv
YWRPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkI2OTNBMkQxQzUxQTgyRTAwQjAzQkVGIC8qIFJlc291cmNlTG9hZE9ic2VydmVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkM0Qzk2REYx
QUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgz
NTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5oICovOyB9OwpAQCAt
OTEwNyw2ICs5MTA5LDggQEAKIAkJNkEyMkU4NzIxRjEwNDJDNDAwRjU0NkMzIC8qIEluc3BlY3Rv
ckNhbnZhcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDYW52YXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QTcyNzk4ODFGMTZDMjlCMDAzRjM5QjggLyogSW5z
cGVjdG9yU2hhZGVyUHJvZ3JhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bnNwZWN0b3JTaGFkZXJQcm9ncmFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZB
NzI3OTg5MUYxNkMyOUIwMDNGMzlCOCAvKiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvclNoYWRlclByb2dyYW0u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QjBBMDdGMDIxRkE0QjVDMDBENTcz
OTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFkQ2xpY2tBdHRyaWJ1
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QjBBMDdGMTIxRkE0QjVDMDBE
NTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFkQ2xp
Y2tBdHRyaWJ1dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCMzQ4MDky
MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTmF0aXZlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkI2OTNBMkQxQzUxQTgyRTAwQjAzQkVGIC8qIFJlc291cmNlTG9hZE9ic2VydmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTG9hZE9ic2VydmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCNjkzQTMzMUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yNTIwOCw2ICsyNTIxMiw4IEBACiAJCQkJNTEyNkU2QjYwQTJFM0FFRjAwNUMyOUZBIC8qIGlj
b24gKi8sCiAJCQkJQTE1RTMxRjAxRTBDQjA3NTAwNEIzNzFDIC8qIGlvcyAqLywKIAkJCQk5M0Ex
RUFBMjBBNTYzNEQ4MDA2OTYwQTAgLyogbWFjICovLAorCQkJCTZCMEEwN0YxMjFGQTRCNUMwMEQ1
NzM5MSAvKiBBZENsaWNrQXR0cmlidXRpb24uY3BwICovLAorCQkJCTZCMEEwN0YwMjFGQTRCNUMw
MEQ1NzM5MSAvKiBBZENsaWNrQXR0cmlidXRpb24uaCAqLywKIAkJCQk2MzE1MkQxODFGOTUzMUVF
MDA3QTVFNEIgLyogQXBwbGljYXRpb25NYW5pZmVzdExvYWRlci5jcHAgKi8sCiAJCQkJNjMxNTJE
MTcxRjk1MzFFRTAwN0E1RTRCIC8qIEFwcGxpY2F0aW9uTWFuaWZlc3RMb2FkZXIuaCAqLywKIAkJ
CQlFRkI3Mjg3QjIxMjRDNzNEMDA1QzI1NTggLyogQ2FudmFzQWN0aXZpdHlSZWNvcmQuY3BwICov
LApAQCAtMjgyNDYsNiArMjgyNTIsNyBAQAogCQkJCUUxQzRERTY5MEVBNzVDMUUwMDIzQ0NENiAv
KiBBY3RpdmVET01PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyNEVFNTUwMURDODBEN0Yw
MEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MjRFRTU1MTFE
QzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk2QjBBMDdGMjIxRkE0QjVDMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTY3N0UwRTIxM0UwMkEwMDBBMDhDMzQgLyogQWRkcmVz
c0Vycm9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3IC8q
IEFkanVzdFZpZXdTaXplT3JOb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0RDBDNDA2MTExNUYx
RUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLApAQCAtMzI3MTMs
NiArMzI3MjAsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVz
ID0gKAogCQkJCUE5Nzg3Q0I0MUY1RjVDNjYwMEM1NTFDNiAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkIwQTA3RjMyMUZBNEI1QzAwRDU3MzkxIC8q
IEFkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUE3OTVDODE4ODhC
Q0I1MDAzODJGOTAgLyogQU5HTEVJbnN0YW5jZWRBcnJheXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDkwNzA3RTYxMjE5QzA0MzAwRDkwRTUxIC8qIEFOR0xFV2ViS2l0QnJpZGdlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUNEMEVFRTBFMTQ3NDNGMzkwMDNFQUZBMiAvKiBBdWRpb0Rlc3RpbmF0
aW9uSU9TLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQWRDbGlj
a0F0dHJpYnV0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzZmMjY2ZWQxM2Y1MGJiNjUzMzAyNjQ5ZjAz
N2EwZDM2OTMyN2UwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Fk
Q2xpY2tBdHRyaWJ1dGlvbi5jcHAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWRDbGlja0F0dHJpYnV0aW9uLmgiCisKKyNpbmNs
dWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2lu
ZyBuYW1lc3BhY2UgV1RGOyAgICAKKworc3RhdGljIGlubGluZSBib29sIGlzTWF4U2l4Qml0cyh1
bnNpZ25lZCBzaG9ydCBkYXRhKQoreworICAgIHJldHVybiBkYXRhIDwgNjQ7Cit9CisKK2Jvb2wg
QWRDbGlja0F0dHJpYnV0aW9uOjppc1ZhbGlkKCkKK3sKKyAgICByZXR1cm4gbV9jb252ZXJzaW9u
CisgICAgICAgICYmIGlzTWF4U2l4Qml0cyhtX2NvbnZlcnNpb24udmFsdWUoKS5kYXRhKQorICAg
ICAgICAmJiBpc01heFNpeEJpdHMobV9jYW1wYWlnbi5pZCkKKyAgICAgICAgJiYgIW1fc291cmNl
LnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4uaXNFbXB0eSgpCisgICAgICAgICYmICFtX2Rl
c3RpbmF0aW9uLnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4uaXNFbXB0eSgpCisgICAgICAg
ICYmIG1fZWFybGllc3RUaW1lVG9TZW5kOworfQorCit2b2lkIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6
c2V0Q2FtcGFpZ24oQ2FtcGFpZ24gY2FtcGFpZ24pCit7CisgICAgbV9jYW1wYWlnbiA9IGNhbXBh
aWduOworfQorCit2b2lkIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6cmVxdWVzdEF0dHJpYnV0aW9uKENv
bnZlcnNpb24gY29udmVyc2lvbiwgT3B0aW9uYWw8UHJpb3JpdHk+IHByaW9yaXR5KQoreworICAg
IGlmICgocHJpb3JpdHkgJiYgIWlzTWF4U2l4Qml0cyhwcmlvcml0eS52YWx1ZSgpLnZhbHVlKSkK
KyAgICAgICAgfHwgKG1fcHJpb3JpdHkgJiYgcHJpb3JpdHkgJiYgbV9wcmlvcml0eS52YWx1ZSgp
LnZhbHVlID4gcHJpb3JpdHkudmFsdWUoKS52YWx1ZSkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY29udmVyc2lvbiA9IGNvbnZlcnNpb247CisgICAgbV9wcmlvcml0eSA9IHByaW9yaXR5Owor
ICAgIC8vIDI0LTQ4IGhvdXIgZGVsYXkgYmVmb3JlIHNlbmRpbmcuCisgICAgbV9lYXJsaWVzdFRp
bWVUb1NlbmQgPSBtX3RpbWVPZkFkQ2xpY2sgKyAyNF9oICsgU2Vjb25kcyhyYW5kb21OdW1iZXIo
KSAqICgyNF9oKS52YWx1ZSgpKTsKK30KKworVVJMIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6YXR0cmli
dXRpb25VcmwoKQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gVVJMKCk7
CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJodHRwczovLyIpOworICAgIGJ1aWxkZXIuYXBwZW5kKG1fc291cmNlLnRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW4pOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLy53ZWxsLWtub3du
L2FkLWNsaWNrLWF0dHJpYnV0aW9uLyIpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKG1fY29u
dmVyc2lvbi52YWx1ZSgpLmRhdGEpOworICAgIGJ1aWxkZXIuYXBwZW5kKCcvJyk7CisgICAgYnVp
bGRlci5hcHBlbmROdW1iZXIobV9jYW1wYWlnbi5pZCk7CisKKyAgICBVUkwgdXJsIHsgVVJMKCks
IGJ1aWxkZXIudG9TdHJpbmcoKSB9OworICAgIGlmICh1cmwuaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gdXJsOworCisgICAgcmV0dXJuIFVSTCgpOworfQorCitVUkwgQWRDbGlja0F0dHJpYnV0
aW9uOjphdHRyaWJ1dGlvblJlZmVycmVyKCkKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIFVSTCgpOworCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiaHR0cHM6Ly8iKTsKKyAgICBidWlsZGVyLmFwcGVuZChtX2Rlc3Rp
bmF0aW9uLnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4pOworICAgIGJ1aWxkZXIuYXBwZW5k
KCcvJyk7CisKKyAgICBVUkwgdXJsIHsgVVJMKCksIGJ1aWxkZXIudG9TdHJpbmcoKSB9OworICAg
IGlmICh1cmwuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdXJsOworICAgIAorICAgIHJldHVy
biBVUkwoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0FkQ2xp
Y2tBdHRyaWJ1dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlv
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmVlZjg5YzY2ZjMyMTIwMzlhZjEwZjk0OTg5NTA5YTEyZWY2NWU3ZWUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQWRDbGlja0F0dHJpYnV0
aW9uLmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlB1YmxpY1N1ZmZpeC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi9XYWxsVGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV1RGIHsKK2NsYXNzIFVSTDsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBBZENsaWNrQXR0cmlidXRpb24geworcHVibGljOgorICAgIHR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgQ2FtcGFpZ25JZDsKKyAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IENvbnZlcnNpb25E
YXRhOworICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgUHJpb3JpdHlWYWx1ZTsKKyAgICAKK3N0
cnVjdCBDYW1wYWlnbiB7CisgICAgZXhwbGljaXQgQ2FtcGFpZ24oQ2FtcGFpZ25JZCBpZCkKKyAg
ICAgICAgOiBpZChpZCkKKyAgICB7CisgICAgfQorICAgIENhbXBhaWduSWQgaWQ7Cit9OworCitz
dHJ1Y3QgU291cmNlIHsKKyAgICBleHBsaWNpdCBTb3VyY2UoY29uc3QgU3RyaW5nJiBob3N0KQor
I2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCisgICAgICAgIDogdG9wUHJpdmF0ZWx5Q29u
dHJvbGxlZERvbWFpbihXZWJDb3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKGhvc3Qp
KQorI2Vsc2UKKyAgICAgICAgOiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKGVtcHR5U3Ry
aW5nKCkpCisjZW5kaWYKKyAgICB7CisgICAgfQorICAgIFN0cmluZyB0b3BQcml2YXRlbHlDb250
cm9sbGVkRG9tYWluOworfTsKKworc3RydWN0IERlc3RpbmF0aW9uIHsKKyAgICBleHBsaWNpdCBE
ZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIGhvc3QpCisjaWYgRU5BQkxFKFBVQkxJQ19TVUZGSVhf
TElTVCkKKyAgICAgICAgOiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKFdlYkNvcmU6OnRv
cFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oaG9zdCkpCisjZWxzZQorICAgICAgICA6IHRvcFBy
aXZhdGVseUNvbnRyb2xsZWREb21haW4oZW1wdHlTdHJpbmcoKSkKKyNlbmRpZgorICAgIHsKKyAg
ICB9CisgICAgU3RyaW5nIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW47Cit9OworCitzdHJ1
Y3QgQ29udmVyc2lvbiB7CisgICAgZXhwbGljaXQgQ29udmVyc2lvbihDb252ZXJzaW9uRGF0YSBk
YXRhKQorICAgICAgICA6IGRhdGEoZGF0YSkKKyAgICB7CisgICAgfQorICAgIENvbnZlcnNpb25E
YXRhIGRhdGE7Cit9OworCitzdHJ1Y3QgUHJpb3JpdHkgeworICAgIGV4cGxpY2l0IFByaW9yaXR5
KFByaW9yaXR5VmFsdWUgdmFsdWUpCisgICAgICAgIDogdmFsdWUodmFsdWUpCisgICAgeworICAg
IH0KKyAgICBQcmlvcml0eVZhbHVlIHZhbHVlOworfTsKKyAgICAKKyAgICBleHBsaWNpdCBBZENs
aWNrQXR0cmlidXRpb24oQ2FtcGFpZ24gY2FtcGFpZ24sIFNvdXJjZSBzb3VyY2UsIERlc3RpbmF0
aW9uIGRlc3RpbmF0aW9uKQorICAgICAgICA6IG1fY2FtcGFpZ24oY2FtcGFpZ24pCisgICAgICAg
ICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24p
CisgICAgICAgICwgbV90aW1lT2ZBZENsaWNrKFdhbGxUaW1lOjpub3coKSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIEFkQ2xpY2tBdHRyaWJ1dGlvbigpID0gZGVsZXRlOworICAgIEFkQ2xpY2tB
dHRyaWJ1dGlvbihjb25zdCBBZENsaWNrQXR0cmlidXRpb24mKSA9IGRlbGV0ZTsKKyAgICBBZENs
aWNrQXR0cmlidXRpb24mIG9wZXJhdG9yPShjb25zdCBBZENsaWNrQXR0cmlidXRpb24mKSA9IGRl
bGV0ZTsKKyAgICBBZENsaWNrQXR0cmlidXRpb24oQWRDbGlja0F0dHJpYnV0aW9uJiYpID0gZGVm
YXVsdDsKKyAgICBBZENsaWNrQXR0cmlidXRpb24mIG9wZXJhdG9yPShBZENsaWNrQXR0cmlidXRp
b24mJikgPSBkZWZhdWx0OworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDYW1wYWlnbihD
YW1wYWlnbik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXF1ZXN0QXR0cmlidXRpb24oQ29u
dmVyc2lvbiwgT3B0aW9uYWw8UHJpb3JpdHk+KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIFVSTCBh
dHRyaWJ1dGlvblVybCgpOworICAgIFdFQkNPUkVfRVhQT1JUIFVSTCBhdHRyaWJ1dGlvblJlZmVy
cmVyKCk7CisgICAgT3B0aW9uYWw8V2FsbFRpbWU+IGVhcmxpZXN0VGltZVRvU2VuZEF0dHJpYnV0
aW9uKCkgeyByZXR1cm4gbV9lYXJsaWVzdFRpbWVUb1NlbmQ7IH07CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBpc1ZhbGlkKCk7CisKKyAgICBDYW1wYWlnbiBtX2NhbXBhaWduOworICAgIFNvdXJjZSBt
X3NvdXJjZTsKKyAgICBEZXN0aW5hdGlvbiBtX2Rlc3RpbmF0aW9uOworICAgIFdhbGxUaW1lIG1f
dGltZU9mQWRDbGljazsKKworICAgIE9wdGlvbmFsPENvbnZlcnNpb24+IG1fY29udmVyc2lvbjsK
KyAgICBPcHRpb25hbDxQcmlvcml0eT4gbV9wcmlvcml0eTsKKyAgICBPcHRpb25hbDxXYWxsVGlt
ZT4gbV9lYXJsaWVzdFRpbWVUb1NlbmQ7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDUy
ODM5OWYyZjZiYzUwZGNjOTE0NTEzYTliZDE5MDMxYzAxMzdiZGEuLjVjNWNhYzAwZDZjNjc5YzRl
OGY5YWEzZGI4MTk0YWJjZmUyY2ZiYjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOS0wMS0yOCAgSm9obiBXaWxh
bmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgZGF0YSBhYnN0cmFjdGlv
biBhbmQgdmFsaWRhdGlvbiBmb3IgQWQgQ2xpY2sgQXR0cmlidXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzkxNgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNDc2MDM0ODE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQWRDbGlj
a0F0dHJpYnV0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KwogMjAxOS0wMS0yNCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgQWQgQ2xpY2sgQXR0cmlidXRpb24gYXMgYW4gaW50ZXJuYWwvZXhwZXJpbWVudGFs
IGZlYXR1cmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjMwNjhlM2E4MTYzNGUwZTNhNzNi
NjNjMDExMTMxYzA1OGEwMjYwZS4uOWRjMWMxNmM1OWIwM2QxNmZmNTg2NTkzODI5ODlkYzI1Y2E0
NTQzOSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMzNCw2ICszMzQsNyBAQAogCQk2Mzcy
ODFBNzIxQUUxMzg2MDA5RTBERTYgLyogRG93bmxvYWRQcm9ncmVzcy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzNzI4MUE2MjFBRTEzODYwMDlFMERF
NiAvKiBEb3dubG9hZFByb2dyZXNzLm1tICovOyB9OwogCQk2M0E2MUI4QjFGQUQyNTExMDBGMDY4
ODUgLyogZGlzcGxheS1tb2RlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjNBNjFCOEExRkFEMjA0RDAwRjA2ODg1IC8qIGRpc3BsYXkt
bW9kZS5odG1sICovOyB9OwogCQk2M0Y2NjgyMjFGOTdGN0Y5MDAzMkVFNTEgLyogQXBwbGljYXRp
b25NYW5pZmVzdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDYzRjY2ODIwMUY5N0MzQUEwMDMyRUU1MSAvKiBBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tICov
OyB9OworCQk2QjBBMDdGNzIxRkE5QzJCMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCMEEwN0Y2
MjFGQTlDMkIwMEQ1NzM5MSAvKiBBZENsaWNrQXR0cmlidXRpb24uY3BwICovOyB9OwogCQk2QjMw
NjEwNjIxOEEzNzI5MDBGNUE4MDIgLyogQ2xvc2luZ1dlYlZpZXcubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjMwNjEwNTIxOEEzNzI5MDBGNUE4MDIg
LyogQ2xvc2luZ1dlYlZpZXcubW0gKi87IH07CiAJCTZCOUFCRTEyMjA4Njk1MkYwMEQ3NURFNiAv
KiBIVFRQUGFyc2Vycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2QjlBQkUxMTIwODY5NTJGMDBENzVERTYgLyogSFRUUFBhcnNlcnMuY3BwICovOyB9
OwogCQk2QkZEMjk0QzFENUU2QzFEMDA4RUM5NjggLyogSGFzaENvdW50ZWRTZXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0EzOEQ3RTUxQzc1MkQ1
RjAwNEYxNTdEIC8qIEhhc2hDb3VudGVkU2V0LmNwcCAqLzsgfTsKQEAgLTE3MDQsNiArMTcwNSw3
IEBACiAJCTYzNzI4MUE2MjFBRTEzODYwMDlFMERFNiAvKiBEb3dubG9hZFByb2dyZXNzLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRG93bmxvYWRQcm9ncmVzcy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNjNBNjFCOEExRkFEMjA0RDAwRjA2ODg1IC8qIGRpc3BsYXktbW9kZS5o
dG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5odG1sOyBwYXRoID0gImRpc3BsYXktbW9kZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNjNGNjY4MjAxRjk3QzNBQTAwMzJFRTUxIC8qIEFwcGxpY2F0aW9uTWFuaWZlc3Qu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk2QjBBMDdGNjIxRkE5QzJCMDBENTczOTEgLyogQWRDbGlj
a0F0dHJpYnV0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFkQ2xpY2tBdHRyaWJ1dGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCMzA2MTA1MjE4QTM3MjkwMEY1QTgw
MiAvKiBDbG9zaW5nV2ViVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENsb3NpbmdXZWJW
aWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QjlBQkUxMTIwODY5NTJGMDBE
NzVERTYgLyogSFRUUFBhcnNlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRUUFBhcnNlcnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NTFCMDVENTFGOEVBQzFBMDAyOEEw
OUUgLyogRGF0YWJhc2VUcmFja2VyVGVzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERhdGFi
YXNlVHJhY2tlclRlc3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjU4LDYg
KzI2NjAsNyBAQAogCQkJCUExRUMxMTg1MUY0MjUzRDkwMEQwMTQ2RSAvKiBpb3MgKi8sCiAJCQkJ
MzE2MkFFOUExRTZGMkY4RjAwMEU0REJDIC8qIG1hYyAqLywKIAkJCQlBQkY1MTA2MzJBMTlCOEFD
N0VDNDBFMTcgLyogQWJvcnRhYmxlVGFza1F1ZXVlLmNwcCAqLywKKwkJCQk2QjBBMDdGNjIxRkE5
QzJCMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmNwcCAqLywKIAkJCQk3QTkwOUE2RjFE
ODc3NDc1MDA3RTEwRjggLyogQWZmaW5lVHJhbnNmb3JtLmNwcCAqLywKIAkJCQk1NzE1MkI1RDIx
Q0MyMDQ1MDAwQzM3Q0EgLyogQXBkdVRlc3QuY3BwICovLAogCQkJCTYzNTRGNEQwMUY3QzNBQjUw
MEQ4OURGMyAvKiBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCAqLywKQEAgLTM4OTEsNiAr
Mzg5NCw3IEBACiAJCQkJMkUyMDVCQTQxRjUyNzc0NjAwNTk1MkREIC8qIEFjY2Vzc2liaWxpdHlU
ZXN0c0lPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTlCRDUxMTFDMUZFOEUxMTYwMEQyQjYzMCAv
KiBBY2Nlc3NpbmdQYXN0ZWRJbWFnZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0NUI2M0ZFMUYx
OUQ0MTAwMDlEMzhCOSAvKiBBY3Rpb25TaGVldFRlc3RzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
NkIwQTA3RjcyMUZBOUMyQjAwRDU3MzkxIC8qIEFkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzN0U3REQ2NDFFQTA2RkYyMDA5QjM5NkQgLyogQWRkaXRpb25hbFJlYWRB
Y2Nlc3NBbGxvd2VkVVJMcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTU1QTgxN0ZDMjE4MTAwRTAw
MDA0QTM5QSAvKiBBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTdBOTA5QTdEMUQ4Nzc0ODAwMDdFMTBGOCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQWRDbGlja0F0dHJpYnV0aW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9BZENsaWNrQXR0cmlidXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhMTM5MDA5ZDcxMzZlNTFh
ZmM1NTliMmFlYjM0NWYzMTQyYThmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQWRDbGlja0F0dHJpYnV0aW9uLmNwcApAQCAtMCwwICsxLDE2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPFdlYkNv
cmUvQWRDbGlja0F0dHJpYnV0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUg
PHd0Zi9XYWxsVGltZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgeworCitjb25zdGV4cHIgdW5zaWduZWQgc2hvcnQgbWluNkJpdFZhbHVl
IHsgMCB9OworY29uc3RleHByIHVuc2lnbmVkIHNob3J0IG1heDZCaXRWYWx1ZSB7IDYzIH07CisK
Ky8vIFBvc2l0aXZlIHRlc3QgY2FzZXMuCisKK1RFU1QoQWRDbGlja0F0dHJpYnV0aW9uLCBWYWxp
ZE1pblZhbHVlcykKK3sKKyAgICBhdXRvIGF0dHJpYnV0aW9uID0gQWRDbGlja0F0dHJpYnV0aW9u
KEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q2FtcGFpZ24obWluNkJpdFZhbHVlKSwgQWRDbGlja0F0dHJp
YnV0aW9uOjpTb3VyY2UoIndlYmtpdC5vcmciKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpEZXN0aW5h
dGlvbigiZXhhbXBsZS5jb20iKSk7CisgICAgYXR0cmlidXRpb24ucmVxdWVzdEF0dHJpYnV0aW9u
KEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihtaW42Qml0VmFsdWUpLCBBZENsaWNrQXR0
cmlidXRpb246OlByaW9yaXR5KG1pbjZCaXRWYWx1ZSkpOworCisgICAgYXV0byBhdHRyaWJ1dGlv
blVybCA9IGF0dHJpYnV0aW9uLmF0dHJpYnV0aW9uVXJsKCk7CisgICAgYXV0byByZWZlcnJlclVy
bCA9IGF0dHJpYnV0aW9uLmF0dHJpYnV0aW9uUmVmZXJyZXIoKTsKKyAgICAKKyAgICBBU1NFUlRf
RVEoYXR0cmlidXRpb25Vcmwuc3RyaW5nKCksICJodHRwczovL3dlYmtpdC5vcmcvLndlbGwta25v
d24vYWQtY2xpY2stYXR0cmlidXRpb24vMC8wIik7CisgICAgQVNTRVJUX0VRKHJlZmVycmVyVXJs
LnN0cmluZygpLCAiaHR0cHM6Ly9leGFtcGxlLmNvbS8iKTsKK30KKworVEVTVChBZENsaWNrQXR0
cmlidXRpb24sIFZhbGlkTWlkVmFsdWVzKQoreworICAgIGF1dG8gYXR0cmlidXRpb24gPSBBZENs
aWNrQXR0cmlidXRpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDYW1wYWlnbigodW5zaWduZWQgc2hv
cnQpMTIpLCBBZENsaWNrQXR0cmlidXRpb246OlNvdXJjZSgid2Via2l0Lm9yZyIpLCBBZENsaWNr
QXR0cmlidXRpb246OkRlc3RpbmF0aW9uKCJleGFtcGxlLmNvbSIpKTsKKyAgICBhdHRyaWJ1dGlv
bi5yZXF1ZXN0QXR0cmlidXRpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uKCh1bnNp
Z25lZCBzaG9ydCk0NCksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHkoKHVuc2lnbmVkIHNo
b3J0KTIyKSk7CisgICAgCisgICAgYXV0byBhdHRyaWJ1dGlvblVybCA9IGF0dHJpYnV0aW9uLmF0
dHJpYnV0aW9uVXJsKCk7CisgICAgYXV0byByZWZlcnJlclVybCA9IGF0dHJpYnV0aW9uLmF0dHJp
YnV0aW9uUmVmZXJyZXIoKTsKKyAgICAKKyAgICBBU1NFUlRfRVEoYXR0cmlidXRpb25Vcmwuc3Ry
aW5nKCksICJodHRwczovL3dlYmtpdC5vcmcvLndlbGwta25vd24vYWQtY2xpY2stYXR0cmlidXRp
b24vNDQvMTIiKTsKKyAgICBBU1NFUlRfRVEocmVmZXJyZXJVcmwuc3RyaW5nKCksICJodHRwczov
L2V4YW1wbGUuY29tLyIpOworfQorCitURVNUKEFkQ2xpY2tBdHRyaWJ1dGlvbiwgVmFsaWRNYXhW
YWx1ZXMpCit7CisgICAgYXV0byBhdHRyaWJ1dGlvbiA9IEFkQ2xpY2tBdHRyaWJ1dGlvbihBZENs
aWNrQXR0cmlidXRpb246OkNhbXBhaWduKG1heDZCaXRWYWx1ZSksIEFkQ2xpY2tBdHRyaWJ1dGlv
bjo6U291cmNlKCJ3ZWJraXQub3JnIiksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6RGVzdGluYXRpb24o
ImV4YW1wbGUuY29tIikpOworICAgIGF0dHJpYnV0aW9uLnJlcXVlc3RBdHRyaWJ1dGlvbihBZENs
aWNrQXR0cmlidXRpb246OkNvbnZlcnNpb24obWF4NkJpdFZhbHVlKSwgQWRDbGlja0F0dHJpYnV0
aW9uOjpQcmlvcml0eShtYXg2Qml0VmFsdWUpKTsKKworICAgIGF1dG8gYXR0cmlidXRpb25Vcmwg
PSBhdHRyaWJ1dGlvbi5hdHRyaWJ1dGlvblVybCgpOworICAgIGF1dG8gcmVmZXJyZXJVcmwgPSBh
dHRyaWJ1dGlvbi5hdHRyaWJ1dGlvblJlZmVycmVyKCk7CisgICAgCisgICAgQVNTRVJUX0VRKGF0
dHJpYnV0aW9uVXJsLnN0cmluZygpLCAiaHR0cHM6Ly93ZWJraXQub3JnLy53ZWxsLWtub3duL2Fk
LWNsaWNrLWF0dHJpYnV0aW9uLzYzLzYzIik7CisgICAgQVNTRVJUX0VRKHJlZmVycmVyVXJsLnN0
cmluZygpLCAiaHR0cHM6Ly9leGFtcGxlLmNvbS8iKTsKK30KKworVEVTVChBZENsaWNrQXR0cmli
dXRpb24sIEVhcmxpZXN0VGltZVRvU2VuZEF0dHJpYnV0aW9uTWluaW11bURlbGF5KQoreworICAg
IGF1dG8gYXR0cmlidXRpb24gPSBBZENsaWNrQXR0cmlidXRpb24oQWRDbGlja0F0dHJpYnV0aW9u
OjpDYW1wYWlnbihtYXg2Qml0VmFsdWUpLCBBZENsaWNrQXR0cmlidXRpb246OlNvdXJjZSgid2Vi
a2l0Lm9yZyIpLCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uKCJleGFtcGxlLmNvbSIp
KTsKKyAgICBhdXRvIG5vdyA9IFdhbGxUaW1lOjpub3coKTsKKyAgICBhdHRyaWJ1dGlvbi5yZXF1
ZXN0QXR0cmlidXRpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uKG1heDZCaXRWYWx1
ZSksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHkobWF4NkJpdFZhbHVlKSk7CisgICAgYXV0
byBlYXJsaWVzdFRpbWVUb1NlbmQgPSBhdHRyaWJ1dGlvbi5lYXJsaWVzdFRpbWVUb1NlbmRBdHRy
aWJ1dGlvbigpOworICAgIEFTU0VSVF9UUlVFKGVhcmxpZXN0VGltZVRvU2VuZCk7CisgICAgQVNT
RVJUX1RSVUUoZWFybGllc3RUaW1lVG9TZW5kLnZhbHVlKCkuc2Vjb25kc1NpbmNlRXBvY2goKSAt
IDI0X2ggPj0gbm93LnNlY29uZHNTaW5jZUVwb2NoKCkpOworfQorCisvLyBOZWdhdGl2ZSB0ZXN0
IGNhc2VzLgorCitURVNUKEFkQ2xpY2tBdHRyaWJ1dGlvbiwgSW52YWxpZENhbXBhaWduSWQpCit7
CisgICAgYXV0byBhdHRyaWJ1dGlvbiA9IEFkQ2xpY2tBdHRyaWJ1dGlvbihBZENsaWNrQXR0cmli
dXRpb246OkNhbXBhaWduKG1heDZCaXRWYWx1ZSArIDEpLCBBZENsaWNrQXR0cmlidXRpb246OlNv
dXJjZSgid2Via2l0Lm9yZyIpLCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uKCJleGFt
cGxlLmNvbSIpKTsKKyAgICBhdHRyaWJ1dGlvbi5yZXF1ZXN0QXR0cmlidXRpb24oQWRDbGlja0F0
dHJpYnV0aW9uOjpDb252ZXJzaW9uKG1heDZCaXRWYWx1ZSksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6
UHJpb3JpdHkobWF4NkJpdFZhbHVlKSk7CisKKyAgICBhdXRvIGF0dHJpYnV0aW9uVXJsID0gYXR0
cmlidXRpb24uYXR0cmlidXRpb25VcmwoKTsKKyAgICBhdXRvIHJlZmVycmVyVXJsID0gYXR0cmli
dXRpb24uYXR0cmlidXRpb25SZWZlcnJlcigpOworICAgIAorICAgIEFTU0VSVF9UUlVFKGF0dHJp
YnV0aW9uVXJsLnN0cmluZygpLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJyZXJV
cmwuc3RyaW5nKCkuaXNFbXB0eSgpKTsKK30KKworVEVTVChBZENsaWNrQXR0cmlidXRpb24sIElu
dmFsaWRTb3VyY2VIb3N0KQoreworICAgIGF1dG8gYXR0cmlidXRpb24gPSBBZENsaWNrQXR0cmli
dXRpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDYW1wYWlnbihtYXg2Qml0VmFsdWUpLCBBZENsaWNr
QXR0cmlidXRpb246OlNvdXJjZSgid2Via2l0b3JnIiksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6RGVz
dGluYXRpb24oImV4YW1wbGUuY29tIikpOworICAgIGF0dHJpYnV0aW9uLnJlcXVlc3RBdHRyaWJ1
dGlvbihBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb24obWF4NkJpdFZhbHVlKSwgQWRDbGlj
a0F0dHJpYnV0aW9uOjpQcmlvcml0eShtYXg2Qml0VmFsdWUpKTsKKyAgICAKKyAgICBhdXRvIGF0
dHJpYnV0aW9uVXJsID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25VcmwoKTsKKyAgICBhdXRvIHJl
ZmVycmVyVXJsID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25SZWZlcnJlcigpOworICAgIAorICAg
IEFTU0VSVF9UUlVFKGF0dHJpYnV0aW9uVXJsLnN0cmluZygpLmlzRW1wdHkoKSk7CisgICAgQVNT
RVJUX1RSVUUocmVmZXJyZXJVcmwuc3RyaW5nKCkuaXNFbXB0eSgpKTsKK30KKworVEVTVChBZENs
aWNrQXR0cmlidXRpb24sIEludmFsaWREZXN0aW5hdGlvbkhvc3QpCit7CisgICAgYXV0byBhdHRy
aWJ1dGlvbiA9IEFkQ2xpY2tBdHRyaWJ1dGlvbihBZENsaWNrQXR0cmlidXRpb246OkNhbXBhaWdu
KG1heDZCaXRWYWx1ZSArIDEpLCBBZENsaWNrQXR0cmlidXRpb246OlNvdXJjZSgid2Via2l0Lm9y
ZyIpLCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uKCJleGFtcGxlY29tIikpOworICAg
IGF0dHJpYnV0aW9uLnJlcXVlc3RBdHRyaWJ1dGlvbihBZENsaWNrQXR0cmlidXRpb246OkNvbnZl
cnNpb24obWF4NkJpdFZhbHVlKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpQcmlvcml0eShtYXg2Qml0
VmFsdWUpKTsKKyAgICAKKyAgICBhdXRvIGF0dHJpYnV0aW9uVXJsID0gYXR0cmlidXRpb24uYXR0
cmlidXRpb25VcmwoKTsKKyAgICBhdXRvIHJlZmVycmVyVXJsID0gYXR0cmlidXRpb24uYXR0cmli
dXRpb25SZWZlcnJlcigpOworICAgIAorICAgIEFTU0VSVF9UUlVFKGF0dHJpYnV0aW9uVXJsLnN0
cmluZygpLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJyZXJVcmwuc3RyaW5nKCku
aXNFbXB0eSgpKTsKK30KKworVEVTVChBZENsaWNrQXR0cmlidXRpb24sIEludmFsaWRDb252ZXJz
aW9uRGF0YSkKK3sKKyAgICBhdXRvIGF0dHJpYnV0aW9uID0gQWRDbGlja0F0dHJpYnV0aW9uKEFk
Q2xpY2tBdHRyaWJ1dGlvbjo6Q2FtcGFpZ24obWF4NkJpdFZhbHVlKSwgQWRDbGlja0F0dHJpYnV0
aW9uOjpTb3VyY2UoIndlYmtpdC5vcmciKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpEZXN0aW5hdGlv
bigiZXhhbXBsZS5jb20iKSk7CisgICAgYXR0cmlidXRpb24ucmVxdWVzdEF0dHJpYnV0aW9uKEFk
Q2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihtYXg2Qml0VmFsdWUgKyAxKSwgQWRDbGlja0F0
dHJpYnV0aW9uOjpQcmlvcml0eShtYXg2Qml0VmFsdWUpKTsKKyAgICAKKyAgICBhdXRvIGF0dHJp
YnV0aW9uVXJsID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25VcmwoKTsKKyAgICBhdXRvIHJlZmVy
cmVyVXJsID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25SZWZlcnJlcigpOworICAgIAorICAgIEFT
U0VSVF9UUlVFKGF0dHJpYnV0aW9uVXJsLnN0cmluZygpLmlzRW1wdHkoKSk7CisgICAgQVNTRVJU
X1RSVUUocmVmZXJyZXJVcmwuc3RyaW5nKCkuaXNFbXB0eSgpKTsKK30KKworVEVTVChBZENsaWNr
QXR0cmlidXRpb24sIEludmFsaWRQcmlvcml0eSkKK3sKKyAgICBhdXRvIGF0dHJpYnV0aW9uID0g
QWRDbGlja0F0dHJpYnV0aW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q2FtcGFpZ24obWF4NkJpdFZh
bHVlKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpTb3VyY2UoIndlYmtpdC5vcmciKSwgQWRDbGlja0F0
dHJpYnV0aW9uOjpEZXN0aW5hdGlvbigiZXhhbXBsZS5jb20iKSk7CisgICAgYXR0cmlidXRpb24u
cmVxdWVzdEF0dHJpYnV0aW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihtYXg2Qml0
VmFsdWUpLCBBZENsaWNrQXR0cmlidXRpb246OlByaW9yaXR5KG1heDZCaXRWYWx1ZSArIDEpKTsK
KyAgICAKKyAgICBhdXRvIGF0dHJpYnV0aW9uVXJsID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25V
cmwoKTsKKyAgICBhdXRvIHJlZmVycmVyVXJsID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25SZWZl
cnJlcigpOworICAgIAorICAgIEFTU0VSVF9UUlVFKGF0dHJpYnV0aW9uVXJsLnN0cmluZygpLmlz
RW1wdHkoKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJyZXJVcmwuc3RyaW5nKCkuaXNFbXB0eSgp
KTsKK30KKworVEVTVChBZENsaWNrQXR0cmlidXRpb24sIEludmFsaWRNaXNzaW5nQ29udmVyc2lv
bikKK3sKKyAgICBhdXRvIGF0dHJpYnV0aW9uID0gQWRDbGlja0F0dHJpYnV0aW9uKEFkQ2xpY2tB
dHRyaWJ1dGlvbjo6Q2FtcGFpZ24obWF4NkJpdFZhbHVlKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpT
b3VyY2UoIndlYmtpdC5vcmciKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpEZXN0aW5hdGlvbigiZXhh
bXBsZS5jb20iKSk7CisKKyAgICBhdXRvIGF0dHJpYnV0aW9uVXJsID0gYXR0cmlidXRpb24uYXR0
cmlidXRpb25VcmwoKTsKKyAgICBhdXRvIHJlZmVycmVyVXJsID0gYXR0cmlidXRpb24uYXR0cmli
dXRpb25SZWZlcnJlcigpOworICAgIAorICAgIEFTU0VSVF9UUlVFKGF0dHJpYnV0aW9uVXJsLnN0
cmluZygpLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJyZXJVcmwuc3RyaW5nKCku
aXNFbXB0eSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoYXR0cmlidXRpb24uZWFybGllc3RUaW1lVG9T
ZW5kQXR0cmlidXRpb24oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360391</attachid>
            <date>2019-01-28 15:45:06 -0800</date>
            <delta_ts>2019-01-28 21:10:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193916-20190128154505.patch</filename>
            <type>text/plain</type>
            <size>27492</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc0MzBiZGJhODMyYTE4
NjBlMWVjZTcyMDkzNWJlZjMzNDNkNWI0MC4uZmU2OWZkM2ZhNzg0Mjc1ZmE2ODdkNGEzOWZlOWEw
OTQ5OGM5NmU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE5LTAxLTI4ICBKb2hu
IFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBkYXRhIGFic3Ry
YWN0aW9uIGFuZCB2YWxpZGF0aW9uIGZvciBBZCBDbGljayBBdHRyaWJ1dGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzOTE2CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS80NzYwMzQ4MT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBOZXcgQVBJIHRlc3RzIGFkZGVkLgorCisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICAgICBBZGRlZCBsb2FkZXIvQWRDbGlja0F0dHJpYnV0aW9uLmNwcC4K
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
bG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
QWRDbGlja0F0dHJpYnV0aW9uOjppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFk
Q2xpY2tBdHRyaWJ1dGlvbjo6c2V0Q29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBZENs
aWNrQXR0cmlidXRpb246OnVybCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBZENsaWNrQXR0
cmlidXRpb246OnJlZmVycmVyIGNvbnN0KToKKyAgICAgICAgKiBsb2FkZXIvQWRDbGlja0F0dHJp
YnV0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpD
YW1wYWlnbjo6Q2FtcGFpZ24pOgorICAgICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9u
OjpDYW1wYWlnbjo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBZENsaWNrQXR0
cmlidXRpb246OlNvdXJjZTo6U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFkQ2xpY2tBdHRy
aWJ1dGlvbjo6RGVzdGluYXRpb246OkRlc3RpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFk
Q2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbjo6Q29udmVyc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb246OmlzVmFsaWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpQcmlvcml0eTo6UHJpb3JpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpQcmlvcml0eTo6aXNWYWxpZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OkFkQ2xpY2tBdHRy
aWJ1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OmVhcmxpZXN0
VGltZVRvU2VuZCBjb25zdCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoK
KyAgICAgICAgICAgIEFkZGVkIG1pc3NpbmcgI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCIuCisKIDIwMTktMDEtMjQgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+
CiAKICAgICAgICAgQWRkIEFkIENsaWNrIEF0dHJpYnV0aW9uIGFzIGFuIGludGVybmFsL2V4cGVy
aW1lbnRhbCBmZWF0dXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDQwZmE0NzRhNDRlYjhkMmVhYjgwYjA5
ODZjNWVlYmJmMGQ1MDUxMWIuLmZjODc1ZjZhYjk2MTg3MjcxM2JlY2E0MDk0MjU5YTkzYTZmOTM5
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xMzUxLDYgKzEzNTEsNyBAQCBsYXlvdXQvbGF5b3V0dHJl
ZS9MYXlvdXRMaW5lQnJlYWtCb3guY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRSZXBsYWNl
ZC5jcHAKIGxheW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNwcAogCitsb2FkZXIv
QWRDbGlja0F0dHJpYnV0aW9uLmNwcAogbG9hZGVyL0NhbnZhc0FjdGl2aXR5UmVjb3JkLmNwcAog
bG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwCiBsb2FkZXIvQ29va2llSmFyLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMzZDhm
ZGIwNDU2MzQwYzljY2YwNGEwMmY3YWYxNDM5ODg2NDJjNjQuLjZhMDJmNjJmMDRkZjk1MDU0YmMx
OWVlODQ0MjgwNWMzMmI3NjZlYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE5OTUsNiArMTk5NSw3IEBACiAJCTY5QTZDQkFE
MUM2QkU0MkMwMEI4MzZFOSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjk3MTAxMDgxQzZCRTE1NTAwMThD
N0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmggKi87IH07CiAJCTZBMjJFODcwMUYxMDQx
ODYwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZBMjJFODZGMUYxMDQxODYwMEY1NDZDMyAvKiBJbnNwZWN0
b3JDYW52YXMuaCAqLzsgfTsKIAkJNkE3Mjc5OEIxRjE2QzI5QzAwM0YzOUI4IC8qIEluc3BlY3Rv
clNoYWRlclByb2dyYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZBNzI3OTg4MUYxNkMyOUIwMDNGMzlCOCAvKiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFt
LmggKi87IH07CisJCTZCMEEwN0YyMjFGQTRCNUMwMEQ1NzM5MSAvKiBBZENsaWNrQXR0cmlidXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCMEEw
N0YwMjFGQTRCNUMwMEQ1NzM5MSAvKiBBZENsaWNrQXR0cmlidXRpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QjM0ODA5NDBFRUY1MEQ0MDBB
QzFCNDEgLyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZCNjkzQTJF
MUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkI2OTNBMkQxQzUxQTgyRTAwQjAzQkVG
IC8qIFJlc291cmNlTG9hZE9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkM0Qzk2REYxQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRl
U3RyZWFtQ29udHJvbGxlci5oICovOyB9OwpAQCAtOTEwNyw2ICs5MTA4LDggQEAKIAkJNkEyMkU4
NzIxRjEwNDJDNDAwRjU0NkMzIC8qIEluc3BlY3RvckNhbnZhcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnNwZWN0b3JDYW52YXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
QTcyNzk4ODFGMTZDMjlCMDAzRjM5QjggLyogSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBNzI3OTg5MUYxNkMyOUIwMDNGMzlCOCAvKiBJ
bnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluc3BlY3RvclNoYWRlclByb2dyYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2QjBBMDdGMDIxRkE0QjVDMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFkQ2xpY2tBdHRyaWJ1dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk2QjBBMDdGMTIxRkE0QjVDMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFkQ2xpY2tBdHRyaWJ1dGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJ
bWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlSW1hZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkI2OTNBMkQxQzUxQTgyRTAwQjAzQkVGIC8q
IFJlc291cmNlTG9hZE9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlc291cmNlTG9hZE9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZC
NjkzQTMzMUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTIwOCw2ICsyNTIxMSw4IEBACiAJCQkJ
NTEyNkU2QjYwQTJFM0FFRjAwNUMyOUZBIC8qIGljb24gKi8sCiAJCQkJQTE1RTMxRjAxRTBDQjA3
NTAwNEIzNzFDIC8qIGlvcyAqLywKIAkJCQk5M0ExRUFBMjBBNTYzNEQ4MDA2OTYwQTAgLyogbWFj
ICovLAorCQkJCTZCMEEwN0YxMjFGQTRCNUMwMEQ1NzM5MSAvKiBBZENsaWNrQXR0cmlidXRpb24u
Y3BwICovLAorCQkJCTZCMEEwN0YwMjFGQTRCNUMwMEQ1NzM5MSAvKiBBZENsaWNrQXR0cmlidXRp
b24uaCAqLywKIAkJCQk2MzE1MkQxODFGOTUzMUVFMDA3QTVFNEIgLyogQXBwbGljYXRpb25NYW5p
ZmVzdExvYWRlci5jcHAgKi8sCiAJCQkJNjMxNTJEMTcxRjk1MzFFRTAwN0E1RTRCIC8qIEFwcGxp
Y2F0aW9uTWFuaWZlc3RMb2FkZXIuaCAqLywKIAkJCQlFRkI3Mjg3QjIxMjRDNzNEMDA1QzI1NTgg
LyogQ2FudmFzQWN0aXZpdHlSZWNvcmQuY3BwICovLApAQCAtMjgyNDYsNiArMjgyNTEsNyBAQAog
CQkJCUUxQzRERTY5MEVBNzVDMUUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MjRFRTU1MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlT
dGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2QjBBMDdGMjIxRkE0QjVD
MDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTY3
N0UwRTIxM0UwMkEwMDBBMDhDMzQgLyogQWRkcmVzc0Vycm9ycy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zv
cm0uaCBpbiBIZWFkZXJzICovLApAQCAtMzI3MTMsNiArMzI3MTksNyBAQAogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCUE5Nzg3Q0I0MUY1RjVDNjYw
MEM1NTFDNiAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNkIwQTA3RjMyMUZBNEI1QzAwRDU3MzkxIC8qIEFkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMUE3OTVDODE4ODhCQ0I1MDAzODJGOTAgLyogQU5HTEVJbnN0YW5j
ZWRBcnJheXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDkwNzA3RTYxMjE5QzA0MzAwRDkwRTUx
IC8qIEFOR0xFV2ViS2l0QnJpZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEMEVFRTBFMTQ3
NDNGMzkwMDNFQUZBMiAvKiBBdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcCBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQWRDbGlja0F0dHJpYnV0aW9uLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wODM5OTkzN2RlMDM4OTdmOGZmYjJlMmRlMGZhZTdiMjVjNGM1MWEzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAKQEAgLTAs
MCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
ZENsaWNrQXR0cmlidXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KKyNp
bmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgQWRDbGlja0F0dHJpYnV0aW9uOjppc1ZhbGlk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb252ZXJzaW9uCisgICAgICAgICYmIG1fY29udmVy
c2lvbi52YWx1ZSgpLmlzVmFsaWQoKQorICAgICAgICAmJiBtX2NhbXBhaWduLmlzVmFsaWQoKQor
ICAgICAgICAmJiAhbV9zb3VyY2UudG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbi5pc0VtcHR5
KCkKKyAgICAgICAgJiYgIW1fZGVzdGluYXRpb24udG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFp
bi5pc0VtcHR5KCkKKyAgICAgICAgJiYgbV9lYXJsaWVzdFRpbWVUb1NlbmQ7Cit9CisKK3ZvaWQg
QWRDbGlja0F0dHJpYnV0aW9uOjpzZXRDb252ZXJzaW9uKGNvbnN0IENvbnZlcnNpb24mIGNvbnZl
cnNpb24sIGNvbnN0IE9wdGlvbmFsPFByaW9yaXR5PiYgcHJpb3JpdHkpCit7CisgICAgaWYgKChw
cmlvcml0eSAmJiAhcHJpb3JpdHkudmFsdWUoKS5pc1ZhbGlkKCkpCisgICAgICAgIHx8IChtX3By
aW9yaXR5ICYmIHByaW9yaXR5ICYmIG1fcHJpb3JpdHkudmFsdWUoKS52YWx1ZSA+IHByaW9yaXR5
LnZhbHVlKCkudmFsdWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnZlcnNpb24gPSBj
b252ZXJzaW9uOworICAgIG1fcHJpb3JpdHkgPSBwcmlvcml0eTsKKyAgICAvLyAyNC00OCBob3Vy
IGRlbGF5IGJlZm9yZSBzZW5kaW5nLgorICAgIG1fZWFybGllc3RUaW1lVG9TZW5kID0gbV90aW1l
T2ZBZENsaWNrICsgMjRfaCArIFNlY29uZHMocmFuZG9tTnVtYmVyKCkgKiAoMjRfaCkudmFsdWUo
KSk7Cit9CisKK1VSTCBBZENsaWNrQXR0cmlidXRpb246OnVybCgpIGNvbnN0Cit7CisgICAgaWYg
KCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBVUkwoKTsKKworICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImh0dHBzOi8vIik7CisgICAgYnVp
bGRlci5hcHBlbmQobV9zb3VyY2UudG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbik7CisgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCIvLndlbGwta25vd24vYWQtY2xpY2stYXR0cmlidXRpb24v
Iik7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobV9jb252ZXJzaW9uLnZhbHVlKCkuZGF0YSk7
CisgICAgYnVpbGRlci5hcHBlbmQoJy8nKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihtX2Nh
bXBhaWduLmlkKTsKKworICAgIFVSTCB1cmwgeyBVUkwoKSwgYnVpbGRlci50b1N0cmluZygpIH07
CisgICAgaWYgKHVybC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB1cmw7CisKKyAgICByZXR1
cm4gVVJMKCk7Cit9CisKK1VSTCBBZENsaWNrQXR0cmlidXRpb246OnJlZmVycmVyKCkgY29uc3QK
K3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIFVSTCgpOworCisgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiaHR0cHM6Ly8i
KTsKKyAgICBidWlsZGVyLmFwcGVuZChtX2Rlc3RpbmF0aW9uLnRvcFByaXZhdGVseUNvbnRyb2xs
ZWREb21haW4pOworICAgIGJ1aWxkZXIuYXBwZW5kKCcvJyk7CisKKyAgICBVUkwgdXJsIHsgVVJM
KCksIGJ1aWxkZXIudG9TdHJpbmcoKSB9OworICAgIGlmICh1cmwuaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm4gdXJsOworICAgIAorICAgIHJldHVybiBVUkwoKTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwYzM5MGQwOGI3
YTRiNzg5N2Q5MDBlMmY0OGI4MDliZGRlYWZjNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvQWRDbGlja0F0dHJpYnV0aW9uLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlB1YmxpY1N1ZmZpeC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFVSTDsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citjb25zdGV4cHIgdW5zaWduZWQgc2hvcnQgbWF4RW50cm9weSA9IDY0OworCitjbGFzcyBBZENs
aWNrQXR0cmlidXRpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFkQ2xpY2tBdHRyaWJ1
dGlvbik7CitwdWJsaWM6CisgICAgdXNpbmcgQ2FtcGFpZ25JZCA9IHVuc2lnbmVkIHNob3J0Owor
ICAgIHVzaW5nIENvbnZlcnNpb25EYXRhID0gdW5zaWduZWQgc2hvcnQ7CisgICAgdXNpbmcgUHJp
b3JpdHlWYWx1ZSA9IHVuc2lnbmVkIHNob3J0OworCisgICAgc3RydWN0IENhbXBhaWduIHsKKyAg
ICAgICAgZXhwbGljaXQgQ2FtcGFpZ24oQ2FtcGFpZ25JZCBpZCkKKyAgICAgICAgICAgIDogaWQo
aWQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpc1ZhbGlk
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkIDwgbWF4RW50cm9weTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ2FtcGFpZ25JZCBpZDsKKyAgICB9OworCisg
ICAgc3RydWN0IFNvdXJjZSB7CisgICAgICAgIGV4cGxpY2l0IFNvdXJjZShjb25zdCBTdHJpbmcm
IGhvc3QpCisjaWYgRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkKKyAgICAgICAgICAgIDogdG9w
UHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihXZWJDb3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVk
RG9tYWluKGhvc3QpKQorI2Vsc2UKKyAgICAgICAgICAgIDogdG9wUHJpdmF0ZWx5Q29udHJvbGxl
ZERvbWFpbihlbXB0eVN0cmluZygpKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICBTdHJpbmcgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbjsKKyAgICB9OworCisgICAg
c3RydWN0IERlc3RpbmF0aW9uIHsKKyAgICAgICAgZXhwbGljaXQgRGVzdGluYXRpb24oY29uc3Qg
U3RyaW5nJiBob3N0KQorI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCisgICAgICAgICAg
ICA6IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oV2ViQ29yZTo6dG9wUHJpdmF0ZWx5Q29u
dHJvbGxlZERvbWFpbihob3N0KSkKKyNlbHNlCisgICAgICAgICAgICA6IHRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW4oZW1wdHlTdHJpbmcoKSkKKyNlbmRpZgorICAgICAgICB7CisgICAgICAg
IH0KKyAgICAgICAgU3RyaW5nIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW47CisgICAgfTsK
KworICAgIHN0cnVjdCBDb252ZXJzaW9uIHsKKyAgICAgICAgZXhwbGljaXQgQ29udmVyc2lvbihD
b252ZXJzaW9uRGF0YSBkYXRhKQorICAgICAgICAgICAgOiBkYXRhKGRhdGEpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBkYXRhIDwgbWF4RW50cm9weTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgQ29udmVyc2lvbkRhdGEgZGF0YTsKKyAgICB9OworCisgICAgc3RydWN0IFByaW9y
aXR5IHsKKyAgICAgICAgZXhwbGljaXQgUHJpb3JpdHkoUHJpb3JpdHlWYWx1ZSB2YWx1ZSkKKyAg
ICAgICAgICAgIDogdmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1
ZSA8IG1heEVudHJvcHk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFByaW9yaXR5VmFs
dWUgdmFsdWU7CisgICAgfTsKKworICAgIEFkQ2xpY2tBdHRyaWJ1dGlvbihjb25zdCBDYW1wYWln
biYgY2FtcGFpZ24sIGNvbnN0IFNvdXJjZSYgc291cmNlLCBjb25zdCBEZXN0aW5hdGlvbiYgZGVz
dGluYXRpb24pCisgICAgICAgIDogbV9jYW1wYWlnbihjYW1wYWlnbikKKyAgICAgICAgLCBtX3Nv
dXJjZShzb3VyY2UpCisgICAgICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAg
ICAgLCBtX3RpbWVPZkFkQ2xpY2soV2FsbFRpbWU6Om5vdygpKQorICAgIHsKKyAgICB9CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvbnZlcnNpb24oY29uc3QgQ29udmVyc2lvbiYsIGNv
bnN0IE9wdGlvbmFsPFByaW9yaXR5PiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFVSTCB1cmwoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBVUkwgcmVmZXJyZXIoKSBjb25zdDsKKyAgICBPcHRp
b25hbDxXYWxsVGltZT4gZWFybGllc3RUaW1lVG9TZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lYXJs
aWVzdFRpbWVUb1NlbmQ7IH07CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7
CisKKyAgICBDYW1wYWlnbiBtX2NhbXBhaWduOworICAgIFNvdXJjZSBtX3NvdXJjZTsKKyAgICBE
ZXN0aW5hdGlvbiBtX2Rlc3RpbmF0aW9uOworICAgIFdhbGxUaW1lIG1fdGltZU9mQWRDbGljazsK
KworICAgIE9wdGlvbmFsPENvbnZlcnNpb24+IG1fY29udmVyc2lvbjsKKyAgICBPcHRpb25hbDxQ
cmlvcml0eT4gbV9wcmlvcml0eTsKKyAgICBPcHRpb25hbDxXYWxsVGltZT4gbV9lYXJsaWVzdFRp
bWVUb1NlbmQ7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKaW5kZXggNDc1NGJlYWI3YWE5NWE2ZjFlM2Y5MjUz
MjJiOTFlOWYxNjljNTZmNi4uYzhiYmQ5M2M2NmZlOGNlYmQ1MWViNGI1MmI2MzIwMjFkYmJiZmJl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCkBAIC03MSw2ICs3
MSw3IEBACiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTV0NsaWVudENvbm5lY3Rpb24uaCIK
ICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVu
dFBhcnNlci5oIgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDUyODM5OWYyZjZiYzUwZGNjOTE0NTEzYTliZDE5MDMxYzAxMzdiZGEuLjVjNWNhYzAw
ZDZjNjc5YzRlOGY5YWEzZGI4MTk0YWJjZmUyY2ZiYjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOS0wMS0yOCAg
Sm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgZGF0YSBh
YnN0cmFjdGlvbiBhbmQgdmFsaWRhdGlvbiBmb3IgQWQgQ2xpY2sgQXR0cmlidXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzkxNgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNDc2MDM0ODE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQWRDbGlja0F0dHJpYnV0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKwogMjAxOS0wMS0yNCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgQWQgQ2xpY2sgQXR0cmlidXRpb24gYXMgYW4gaW50ZXJuYWwvZXhw
ZXJpbWVudGFsIGZlYXR1cmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjMwNjhlM2E4MTYz
NGUwZTNhNzNiNjNjMDExMTMxYzA1OGEwMjYwZS4uOWRjMWMxNmM1OWIwM2QxNmZmNTg2NTkzODI5
ODlkYzI1Y2E0NTQzOSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMzNCw2ICszMzQsNyBA
QAogCQk2MzcyODFBNzIxQUUxMzg2MDA5RTBERTYgLyogRG93bmxvYWRQcm9ncmVzcy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzNzI4MUE2MjFBRTEz
ODYwMDlFMERFNiAvKiBEb3dubG9hZFByb2dyZXNzLm1tICovOyB9OwogCQk2M0E2MUI4QjFGQUQy
NTExMDBGMDY4ODUgLyogZGlzcGxheS1tb2RlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjNBNjFCOEExRkFEMjA0RDAwRjA2ODg1IC8q
IGRpc3BsYXktbW9kZS5odG1sICovOyB9OwogCQk2M0Y2NjgyMjFGOTdGN0Y5MDAzMkVFNTEgLyog
QXBwbGljYXRpb25NYW5pZmVzdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDYzRjY2ODIwMUY5N0MzQUEwMDMyRUU1MSAvKiBBcHBsaWNhdGlvbk1hbmlm
ZXN0Lm1tICovOyB9OworCQk2QjBBMDdGNzIxRkE5QzJCMDBENTczOTEgLyogQWRDbGlja0F0dHJp
YnV0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZCMEEwN0Y2MjFGQTlDMkIwMEQ1NzM5MSAvKiBBZENsaWNrQXR0cmlidXRpb24uY3BwICovOyB9
OwogCQk2QjMwNjEwNjIxOEEzNzI5MDBGNUE4MDIgLyogQ2xvc2luZ1dlYlZpZXcubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjMwNjEwNTIxOEEzNzI5
MDBGNUE4MDIgLyogQ2xvc2luZ1dlYlZpZXcubW0gKi87IH07CiAJCTZCOUFCRTEyMjA4Njk1MkYw
MEQ3NURFNiAvKiBIVFRQUGFyc2Vycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2QjlBQkUxMTIwODY5NTJGMDBENzVERTYgLyogSFRUUFBhcnNlcnMu
Y3BwICovOyB9OwogCQk2QkZEMjk0QzFENUU2QzFEMDA4RUM5NjggLyogSGFzaENvdW50ZWRTZXQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0EzOEQ3
RTUxQzc1MkQ1RjAwNEYxNTdEIC8qIEhhc2hDb3VudGVkU2V0LmNwcCAqLzsgfTsKQEAgLTE3MDQs
NiArMTcwNSw3IEBACiAJCTYzNzI4MUE2MjFBRTEzODYwMDlFMERFNiAvKiBEb3dubG9hZFByb2dy
ZXNzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRG93bmxvYWRQcm9ncmVzcy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjNBNjFCOEExRkFEMjA0RDAwRjA2ODg1IC8qIGRpc3Bs
YXktbW9kZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5odG1sOyBwYXRoID0gImRpc3BsYXktbW9kZS5odG1sIjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNjNGNjY4MjAxRjk3QzNBQTAwMzJFRTUxIC8qIEFwcGxpY2F0aW9u
TWFuaWZlc3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBcHBsaWNhdGlvbk1hbmlmZXN0Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QjBBMDdGNjIxRkE5QzJCMDBENTczOTEg
LyogQWRDbGlja0F0dHJpYnV0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFkQ2xpY2tBdHRy
aWJ1dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCMzA2MTA1MjE4QTM3
MjkwMEY1QTgwMiAvKiBDbG9zaW5nV2ViVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENs
b3NpbmdXZWJWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QjlBQkUxMTIw
ODY5NTJGMDBENzVERTYgLyogSFRUUFBhcnNlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRU
UFBhcnNlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NTFCMDVENTFGOEVB
QzFBMDAyOEEwOUUgLyogRGF0YWJhc2VUcmFja2VyVGVzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IERhdGFiYXNlVHJhY2tlclRlc3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yNjU4LDYgKzI2NjAsNyBAQAogCQkJCUExRUMxMTg1MUY0MjUzRDkwMEQwMTQ2RSAvKiBpb3Mg
Ki8sCiAJCQkJMzE2MkFFOUExRTZGMkY4RjAwMEU0REJDIC8qIG1hYyAqLywKIAkJCQlBQkY1MTA2
MzJBMTlCOEFDN0VDNDBFMTcgLyogQWJvcnRhYmxlVGFza1F1ZXVlLmNwcCAqLywKKwkJCQk2QjBB
MDdGNjIxRkE5QzJCMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmNwcCAqLywKIAkJCQk3
QTkwOUE2RjFEODc3NDc1MDA3RTEwRjggLyogQWZmaW5lVHJhbnNmb3JtLmNwcCAqLywKIAkJCQk1
NzE1MkI1RDIxQ0MyMDQ1MDAwQzM3Q0EgLyogQXBkdVRlc3QuY3BwICovLAogCQkJCTYzNTRGNEQw
MUY3QzNBQjUwMEQ4OURGMyAvKiBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCAqLywKQEAg
LTM4OTEsNiArMzg5NCw3IEBACiAJCQkJMkUyMDVCQTQxRjUyNzc0NjAwNTk1MkREIC8qIEFjY2Vz
c2liaWxpdHlUZXN0c0lPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTlCRDUxMTFDMUZFOEUxMTYw
MEQyQjYzMCAvKiBBY2Nlc3NpbmdQYXN0ZWRJbWFnZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0
NUI2M0ZFMUYxOUQ0MTAwMDlEMzhCOSAvKiBBY3Rpb25TaGVldFRlc3RzLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJNkIwQTA3RjcyMUZBOUMyQjAwRDU3MzkxIC8qIEFkQ2xpY2tBdHRyaWJ1dGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0U3REQ2NDFFQTA2RkYyMDA5QjM5NkQgLyogQWRkaXRp
b25hbFJlYWRBY2Nlc3NBbGxvd2VkVVJMcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTU1QTgxN0ZD
MjE4MTAwRTAwMDA0QTM5QSAvKiBBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTdBOTA5QTdEMUQ4Nzc0ODAwMDdFMTBGOCAvKiBBZmZpbmVUcmFuc2Zv
cm0uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQWRDbGlja0F0dHJpYnV0aW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9BZENsaWNrQXR0cmlidXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxNDViOGIz
YjRlMzRiMzlkYTA1MDQyMTAzNzMwOWJjMzkxMWQyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQWRDbGlja0F0dHJpYnV0aW9uLmNwcApAQCAt
MCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgPFdlYkNvcmUvQWRDbGlja0F0dHJpYnV0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgor
I2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjb25zdGV4cHIgdW5zaWduZWQgc2hvcnQgbWlu
NkJpdFZhbHVlIHsgMCB9OworY29uc3RleHByIHVuc2lnbmVkIHNob3J0IG1heDZCaXRWYWx1ZSB7
IDYzIH07CisKKy8vIFBvc2l0aXZlIHRlc3QgY2FzZXMuCisKK1RFU1QoQWRDbGlja0F0dHJpYnV0
aW9uLCBWYWxpZE1pblZhbHVlcykKK3sKKyAgICBBZENsaWNrQXR0cmlidXRpb24gYXR0cmlidXRp
b24oQWRDbGlja0F0dHJpYnV0aW9uOjpDYW1wYWlnbihtaW42Qml0VmFsdWUpLCBBZENsaWNrQXR0
cmlidXRpb246OlNvdXJjZSgid2Via2l0Lm9yZyIpLCBBZENsaWNrQXR0cmlidXRpb246OkRlc3Rp
bmF0aW9uKCJleGFtcGxlLmNvbSIpKTsKKyAgICBhdHRyaWJ1dGlvbi5zZXRDb252ZXJzaW9uKEFk
Q2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihtaW42Qml0VmFsdWUpLCBBZENsaWNrQXR0cmli
dXRpb246OlByaW9yaXR5KG1pbjZCaXRWYWx1ZSkpOworCisgICAgYXV0byBhdHRyaWJ1dGlvblVy
bCA9IGF0dHJpYnV0aW9uLnVybCgpOworICAgIGF1dG8gcmVmZXJyZXJVcmwgPSBhdHRyaWJ1dGlv
bi5yZWZlcnJlcigpOworICAgIAorICAgIEFTU0VSVF9FUShhdHRyaWJ1dGlvblVybC5zdHJpbmco
KSwgImh0dHBzOi8vd2Via2l0Lm9yZy8ud2VsbC1rbm93bi9hZC1jbGljay1hdHRyaWJ1dGlvbi8w
LzAiKTsKKyAgICBBU1NFUlRfRVEocmVmZXJyZXJVcmwuc3RyaW5nKCksICJodHRwczovL2V4YW1w
bGUuY29tLyIpOworfQorCitURVNUKEFkQ2xpY2tBdHRyaWJ1dGlvbiwgVmFsaWRNaWRWYWx1ZXMp
Cit7CisgICAgQWRDbGlja0F0dHJpYnV0aW9uIGF0dHJpYnV0aW9uKEFkQ2xpY2tBdHRyaWJ1dGlv
bjo6Q2FtcGFpZ24oKHVuc2lnbmVkIHNob3J0KTEyKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpTb3Vy
Y2UoIndlYmtpdC5vcmciKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpEZXN0aW5hdGlvbigiZXhhbXBs
ZS5jb20iKSk7CisgICAgYXR0cmlidXRpb24uc2V0Q29udmVyc2lvbihBZENsaWNrQXR0cmlidXRp
b246OkNvbnZlcnNpb24oKHVuc2lnbmVkIHNob3J0KTQ0KSwgQWRDbGlja0F0dHJpYnV0aW9uOjpQ
cmlvcml0eSgodW5zaWduZWQgc2hvcnQpMjIpKTsKKworICAgIGF1dG8gYXR0cmlidXRpb25Vcmwg
PSBhdHRyaWJ1dGlvbi51cmwoKTsKKyAgICBhdXRvIHJlZmVycmVyVXJsID0gYXR0cmlidXRpb24u
cmVmZXJyZXIoKTsKKworICAgIEFTU0VSVF9FUShhdHRyaWJ1dGlvblVybC5zdHJpbmcoKSwgImh0
dHBzOi8vd2Via2l0Lm9yZy8ud2VsbC1rbm93bi9hZC1jbGljay1hdHRyaWJ1dGlvbi80NC8xMiIp
OworICAgIEFTU0VSVF9FUShyZWZlcnJlclVybC5zdHJpbmcoKSwgImh0dHBzOi8vZXhhbXBsZS5j
b20vIik7Cit9CisKK1RFU1QoQWRDbGlja0F0dHJpYnV0aW9uLCBWYWxpZE1heFZhbHVlcykKK3sK
KyAgICBBZENsaWNrQXR0cmlidXRpb24gYXR0cmlidXRpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpD
YW1wYWlnbihtYXg2Qml0VmFsdWUpLCBBZENsaWNrQXR0cmlidXRpb246OlNvdXJjZSgid2Via2l0
Lm9yZyIpLCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uKCJleGFtcGxlLmNvbSIpKTsK
KyAgICBhdHRyaWJ1dGlvbi5zZXRDb252ZXJzaW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVy
c2lvbihtYXg2Qml0VmFsdWUpLCBBZENsaWNrQXR0cmlidXRpb246OlByaW9yaXR5KG1heDZCaXRW
YWx1ZSkpOworCisgICAgYXV0byBhdHRyaWJ1dGlvblVybCA9IGF0dHJpYnV0aW9uLnVybCgpOwor
ICAgIGF1dG8gcmVmZXJyZXJVcmwgPSBhdHRyaWJ1dGlvbi5yZWZlcnJlcigpOworCisgICAgQVNT
RVJUX0VRKGF0dHJpYnV0aW9uVXJsLnN0cmluZygpLCAiaHR0cHM6Ly93ZWJraXQub3JnLy53ZWxs
LWtub3duL2FkLWNsaWNrLWF0dHJpYnV0aW9uLzYzLzYzIik7CisgICAgQVNTRVJUX0VRKHJlZmVy
cmVyVXJsLnN0cmluZygpLCAiaHR0cHM6Ly9leGFtcGxlLmNvbS8iKTsKK30KKworVEVTVChBZENs
aWNrQXR0cmlidXRpb24sIEVhcmxpZXN0VGltZVRvU2VuZEF0dHJpYnV0aW9uTWluaW11bURlbGF5
KQoreworICAgIEFkQ2xpY2tBdHRyaWJ1dGlvbiBhdHRyaWJ1dGlvbihBZENsaWNrQXR0cmlidXRp
b246OkNhbXBhaWduKG1heDZCaXRWYWx1ZSksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6U291cmNlKCJ3
ZWJraXQub3JnIiksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6RGVzdGluYXRpb24oImV4YW1wbGUuY29t
IikpOworICAgIGF1dG8gbm93ID0gV2FsbFRpbWU6Om5vdygpOworICAgIGF0dHJpYnV0aW9uLnNl
dENvbnZlcnNpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uKG1heDZCaXRWYWx1ZSks
IEFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHkobWF4NkJpdFZhbHVlKSk7CisgICAgYXV0byBl
YXJsaWVzdFRpbWVUb1NlbmQgPSBhdHRyaWJ1dGlvbi5lYXJsaWVzdFRpbWVUb1NlbmQoKTsKKyAg
ICBBU1NFUlRfVFJVRShlYXJsaWVzdFRpbWVUb1NlbmQpOworICAgIEFTU0VSVF9UUlVFKGVhcmxp
ZXN0VGltZVRvU2VuZC52YWx1ZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkgLSAyNF9oID49IG5vdy5z
ZWNvbmRzU2luY2VFcG9jaCgpKTsKK30KKworLy8gTmVnYXRpdmUgdGVzdCBjYXNlcy4KKworVEVT
VChBZENsaWNrQXR0cmlidXRpb24sIEludmFsaWRDYW1wYWlnbklkKQoreworICAgIEFkQ2xpY2tB
dHRyaWJ1dGlvbiBhdHRyaWJ1dGlvbihBZENsaWNrQXR0cmlidXRpb246OkNhbXBhaWduKG1heDZC
aXRWYWx1ZSArIDEpLCBBZENsaWNrQXR0cmlidXRpb246OlNvdXJjZSgid2Via2l0Lm9yZyIpLCBB
ZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uKCJleGFtcGxlLmNvbSIpKTsKKyAgICBhdHRy
aWJ1dGlvbi5zZXRDb252ZXJzaW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihtYXg2
Qml0VmFsdWUpLCBBZENsaWNrQXR0cmlidXRpb246OlByaW9yaXR5KG1heDZCaXRWYWx1ZSkpOwor
CisgICAgYXV0byBhdHRyaWJ1dGlvblVybCA9IGF0dHJpYnV0aW9uLnVybCgpOworICAgIGF1dG8g
cmVmZXJyZXJVcmwgPSBhdHRyaWJ1dGlvbi5yZWZlcnJlcigpOworCisgICAgQVNTRVJUX1RSVUUo
YXR0cmlidXRpb25Vcmwuc3RyaW5nKCkuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZl
cnJlclVybC5zdHJpbmcoKS5pc0VtcHR5KCkpOworfQorCitURVNUKEFkQ2xpY2tBdHRyaWJ1dGlv
biwgSW52YWxpZFNvdXJjZUhvc3QpCit7CisgICAgQWRDbGlja0F0dHJpYnV0aW9uIGF0dHJpYnV0
aW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q2FtcGFpZ24obWF4NkJpdFZhbHVlKSwgQWRDbGlja0F0
dHJpYnV0aW9uOjpTb3VyY2UoIndlYmtpdG9yZyIpLCBBZENsaWNrQXR0cmlidXRpb246OkRlc3Rp
bmF0aW9uKCJleGFtcGxlLmNvbSIpKTsKKyAgICBhdHRyaWJ1dGlvbi5zZXRDb252ZXJzaW9uKEFk
Q2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihtYXg2Qml0VmFsdWUpLCBBZENsaWNrQXR0cmli
dXRpb246OlByaW9yaXR5KG1heDZCaXRWYWx1ZSkpOworCisgICAgYXV0byBhdHRyaWJ1dGlvblVy
bCA9IGF0dHJpYnV0aW9uLnVybCgpOworICAgIGF1dG8gcmVmZXJyZXJVcmwgPSBhdHRyaWJ1dGlv
bi5yZWZlcnJlcigpOworCisgICAgQVNTRVJUX1RSVUUoYXR0cmlidXRpb25Vcmwuc3RyaW5nKCku
aXNFbXB0eSgpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcnJlclVybC5zdHJpbmcoKS5pc0VtcHR5
KCkpOworfQorCitURVNUKEFkQ2xpY2tBdHRyaWJ1dGlvbiwgSW52YWxpZERlc3RpbmF0aW9uSG9z
dCkKK3sKKyAgICBBZENsaWNrQXR0cmlidXRpb24gYXR0cmlidXRpb24oQWRDbGlja0F0dHJpYnV0
aW9uOjpDYW1wYWlnbihtYXg2Qml0VmFsdWUgKyAxKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpTb3Vy
Y2UoIndlYmtpdC5vcmciKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpEZXN0aW5hdGlvbigiZXhhbXBs
ZWNvbSIpKTsKKyAgICBhdHRyaWJ1dGlvbi5zZXRDb252ZXJzaW9uKEFkQ2xpY2tBdHRyaWJ1dGlv
bjo6Q29udmVyc2lvbihtYXg2Qml0VmFsdWUpLCBBZENsaWNrQXR0cmlidXRpb246OlByaW9yaXR5
KG1heDZCaXRWYWx1ZSkpOworCisgICAgYXV0byBhdHRyaWJ1dGlvblVybCA9IGF0dHJpYnV0aW9u
LnVybCgpOworICAgIGF1dG8gcmVmZXJyZXJVcmwgPSBhdHRyaWJ1dGlvbi5yZWZlcnJlcigpOwor
CisgICAgQVNTRVJUX1RSVUUoYXR0cmlidXRpb25Vcmwuc3RyaW5nKCkuaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlRfVFJVRShyZWZlcnJlclVybC5zdHJpbmcoKS5pc0VtcHR5KCkpOworfQorCitURVNU
KEFkQ2xpY2tBdHRyaWJ1dGlvbiwgSW52YWxpZENvbnZlcnNpb25EYXRhKQoreworICAgIEFkQ2xp
Y2tBdHRyaWJ1dGlvbiBhdHRyaWJ1dGlvbihBZENsaWNrQXR0cmlidXRpb246OkNhbXBhaWduKG1h
eDZCaXRWYWx1ZSksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6U291cmNlKCJ3ZWJraXQub3JnIiksIEFk
Q2xpY2tBdHRyaWJ1dGlvbjo6RGVzdGluYXRpb24oImV4YW1wbGUuY29tIikpOworICAgIGF0dHJp
YnV0aW9uLnNldENvbnZlcnNpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uKG1heDZC
aXRWYWx1ZSArIDEpLCBBZENsaWNrQXR0cmlidXRpb246OlByaW9yaXR5KG1heDZCaXRWYWx1ZSkp
OworCisgICAgYXV0byBhdHRyaWJ1dGlvblVybCA9IGF0dHJpYnV0aW9uLnVybCgpOworICAgIGF1
dG8gcmVmZXJyZXJVcmwgPSBhdHRyaWJ1dGlvbi5yZWZlcnJlcigpOworCisgICAgQVNTRVJUX1RS
VUUoYXR0cmlidXRpb25Vcmwuc3RyaW5nKCkuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlRfVFJVRShy
ZWZlcnJlclVybC5zdHJpbmcoKS5pc0VtcHR5KCkpOworfQorCitURVNUKEFkQ2xpY2tBdHRyaWJ1
dGlvbiwgSW52YWxpZFByaW9yaXR5KQoreworICAgIEFkQ2xpY2tBdHRyaWJ1dGlvbiBhdHRyaWJ1
dGlvbihBZENsaWNrQXR0cmlidXRpb246OkNhbXBhaWduKG1heDZCaXRWYWx1ZSksIEFkQ2xpY2tB
dHRyaWJ1dGlvbjo6U291cmNlKCJ3ZWJraXQub3JnIiksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6RGVz
dGluYXRpb24oImV4YW1wbGUuY29tIikpOworICAgIGF0dHJpYnV0aW9uLnNldENvbnZlcnNpb24o
QWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uKG1heDZCaXRWYWx1ZSksIEFkQ2xpY2tBdHRy
aWJ1dGlvbjo6UHJpb3JpdHkobWF4NkJpdFZhbHVlICsgMSkpOworCisgICAgYXV0byBhdHRyaWJ1
dGlvblVybCA9IGF0dHJpYnV0aW9uLnVybCgpOworICAgIGF1dG8gcmVmZXJyZXJVcmwgPSBhdHRy
aWJ1dGlvbi5yZWZlcnJlcigpOworCisgICAgQVNTRVJUX1RSVUUoYXR0cmlidXRpb25Vcmwuc3Ry
aW5nKCkuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcnJlclVybC5zdHJpbmcoKS5p
c0VtcHR5KCkpOworfQorCitURVNUKEFkQ2xpY2tBdHRyaWJ1dGlvbiwgSW52YWxpZE1pc3NpbmdD
b252ZXJzaW9uKQoreworICAgIEFkQ2xpY2tBdHRyaWJ1dGlvbiBhdHRyaWJ1dGlvbihBZENsaWNr
QXR0cmlidXRpb246OkNhbXBhaWduKG1heDZCaXRWYWx1ZSksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6
U291cmNlKCJ3ZWJraXQub3JnIiksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6RGVzdGluYXRpb24oImV4
YW1wbGUuY29tIikpOworCisgICAgYXV0byBhdHRyaWJ1dGlvblVybCA9IGF0dHJpYnV0aW9uLnVy
bCgpOworICAgIGF1dG8gcmVmZXJyZXJVcmwgPSBhdHRyaWJ1dGlvbi5yZWZlcnJlcigpOworCisg
ICAgQVNTRVJUX1RSVUUoYXR0cmlidXRpb25Vcmwuc3RyaW5nKCkuaXNFbXB0eSgpKTsKKyAgICBB
U1NFUlRfVFJVRShyZWZlcnJlclVybC5zdHJpbmcoKS5pc0VtcHR5KCkpOworICAgIEFTU0VSVF9G
QUxTRShhdHRyaWJ1dGlvbi5lYXJsaWVzdFRpbWVUb1NlbmQoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360432</attachid>
            <date>2019-01-28 21:10:33 -0800</date>
            <delta_ts>2019-01-29 11:19:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193916-20190128211033.patch</filename>
            <type>text/plain</type>
            <size>27179</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc0MzBiZGJhODMyYTE4
NjBlMWVjZTcyMDkzNWJlZjMzNDNkNWI0MC4uNmJiMmZiNWFiZmY0ODBlODFjNmVmODdmOTM4NDEz
MGYyNTg4MGQ1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE5LTAxLTI4ICBKb2hu
IFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBkYXRhIGFic3Ry
YWN0aW9uIGFuZCB2YWxpZGF0aW9uIGZvciBBZCBDbGljayBBdHRyaWJ1dGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzOTE2CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS80NzYwMzQ4MT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBOZXcgQVBJIHRlc3RzIGFkZGVkLgorCisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICAgICBBZGRlZCBsb2FkZXIvQWRDbGlja0F0dHJpYnV0aW9uLmNwcC4K
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
bG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
QWRDbGlja0F0dHJpYnV0aW9uOjppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFk
Q2xpY2tBdHRyaWJ1dGlvbjo6c2V0Q29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBZENs
aWNrQXR0cmlidXRpb246OnVybCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBZENsaWNrQXR0
cmlidXRpb246OnJlZmVycmVyIGNvbnN0KToKKyAgICAgICAgKiBsb2FkZXIvQWRDbGlja0F0dHJp
YnV0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpD
YW1wYWlnbjo6Q2FtcGFpZ24pOgorICAgICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9u
OjpDYW1wYWlnbjo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBZENsaWNrQXR0
cmlidXRpb246OlNvdXJjZTo6U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFkQ2xpY2tBdHRy
aWJ1dGlvbjo6RGVzdGluYXRpb246OkRlc3RpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFk
Q2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHk6OlByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbjo6Q29udmVyc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb246OmlzVmFsaWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpBZENsaWNrQXR0cmlidXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjplYXJsaWVzdFRpbWVUb1Nl
bmQgY29uc3QpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAg
ICAgICBBZGRlZCBtaXNzaW5nICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiLgor
CiAyMDE5LTAxLTI0ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZCBBZCBDbGljayBBdHRyaWJ1dGlvbiBhcyBhbiBpbnRlcm5hbC9leHBlcmltZW50YWwg
ZmVhdHVyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA0MGZhNDc0YTQ0ZWI4ZDJlYWI4MGIwOTg2YzVlZWJi
ZjBkNTA1MTFiLi5mYzg3NWY2YWI5NjE4NzI3MTNiZWNhNDA5NDI1OWE5M2E2ZjkzOTE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dApAQCAtMTM1MSw2ICsxMzUxLDcgQEAgbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0
TGluZUJyZWFrQm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFjZWQuY3BwCiBs
YXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVpbGRlci5jcHAKIAorbG9hZGVyL0FkQ2xpY2tB
dHRyaWJ1dGlvbi5jcHAKIGxvYWRlci9DYW52YXNBY3Rpdml0eVJlY29yZC5jcHAKIGxvYWRlci9D
b250ZW50RmlsdGVyLmNwcAogbG9hZGVyL0Nvb2tpZUphci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjM2Q4ZmRiMDQ1NjM0
MGM5Y2NmMDRhMDJmN2FmMTQzOTg4NjQyYzY0Li42YTAyZjYyZjA0ZGY5NTA1NGJjMTllZTg0NDI4
MDVjMzJiNzY2ZWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xOTk1LDYgKzE5OTUsNyBAQAogCQk2OUE2Q0JBRDFDNkJFNDJD
MDBCODM2RTkgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY5NzEwMTA4MUM2QkUxNTUwMDE4QzdGMSAvKiBB
Y2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oICovOyB9OwogCQk2QTIyRTg3MDFGMTA0MTg2MDBGNTQ2
QzMgLyogSW5zcGVjdG9yQ2FudmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2QTIyRTg2RjFGMTA0MTg2MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFz
LmggKi87IH07CiAJCTZBNzI3OThCMUYxNkMyOUMwMDNGMzlCOCAvKiBJbnNwZWN0b3JTaGFkZXJQ
cm9ncmFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
QTcyNzk4ODFGMTZDMjlCMDAzRjM5QjggLyogSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5oICovOyB9
OworCQk2QjBBMDdGMjIxRkE0QjVDMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjBBMDdGMDIxRkE0
QjVDMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkIzNDgwOTQwRUVGNTBENDAwQUMxQjQxIC8q
IE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QjY5M0EyRTFDNTFBODJF
MDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNv
dXJjZUxvYWRPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTZDNEM5NkRGMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0
cmVhbUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZDNEM5NkRCMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNv
bnRyb2xsZXIuaCAqLzsgfTsKQEAgLTkxMDcsNiArOTEwOCw4IEBACiAJCTZBMjJFODcyMUYxMDQy
QzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5z
cGVjdG9yQ2FudmFzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkE3Mjc5ODgx
RjE2QzI5QjAwM0YzOUI4IC8qIEluc3BlY3RvclNoYWRlclByb2dyYW0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2QTcyNzk4OTFGMTZDMjlCMDAzRjM5QjggLyogSW5zcGVjdG9y
U2hhZGVyUHJvZ3JhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NkIwQTA3RjAyMUZBNEI1QzAwRDU3MzkxIC8qIEFkQ2xpY2tBdHRyaWJ1dGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBZENsaWNrQXR0cmlidXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNkIwQTA3RjEyMUZBNEI1QzAwRDU3MzkxIC8qIEFkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBZENsaWNrQXR0cmlidXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUltYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCNjkzQTJEMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJj
ZUxvYWRPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJj
ZUxvYWRPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QjY5M0EzMzFD
NTFBOTVEMDBCMDNCRUYgLyogUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUyMDgsNiArMjUyMTEsOCBAQAogCQkJCTUxMjZFNkI2
MEEyRTNBRUYwMDVDMjlGQSAvKiBpY29uICovLAogCQkJCUExNUUzMUYwMUUwQ0IwNzUwMDRCMzcx
QyAvKiBpb3MgKi8sCiAJCQkJOTNBMUVBQTIwQTU2MzREODAwNjk2MEEwIC8qIG1hYyAqLywKKwkJ
CQk2QjBBMDdGMTIxRkE0QjVDMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmNwcCAqLywK
KwkJCQk2QjBBMDdGMDIxRkE0QjVDMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmggKi8s
CiAJCQkJNjMxNTJEMTgxRjk1MzFFRTAwN0E1RTRCIC8qIEFwcGxpY2F0aW9uTWFuaWZlc3RMb2Fk
ZXIuY3BwICovLAogCQkJCTYzMTUyRDE3MUY5NTMxRUUwMDdBNUU0QiAvKiBBcHBsaWNhdGlvbk1h
bmlmZXN0TG9hZGVyLmggKi8sCiAJCQkJRUZCNzI4N0IyMTI0QzczRDAwNUMyNTU4IC8qIENhbnZh
c0FjdGl2aXR5UmVjb3JkLmNwcCAqLywKQEAgLTI4MjQ2LDYgKzI4MjUxLDcgQEAKIAkJCQlFMUM0
REU2OTBFQTc1QzFFMDAyM0NDRDYgLyogQWN0aXZlRE9NT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFu
Z2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkIwQTA3RjIyMUZBNEI1QzAwRDU3Mzkx
IC8qIEFkQ2xpY2tBdHRyaWJ1dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE2NzdFMEUyMTNF
MDJBMDAwQTA4QzM0IC8qIEFkZHJlc3NFcnJvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRjdF
NDkxMTM3Q0Q3QzcwMDFEREFFNyAvKiBBZGp1c3RWaWV3U2l6ZU9yTm90LmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NEQwQzQwNjExMTVGMUVBMDAxOEFBMzQgLyogQWZmaW5lVHJhbnNmb3JtLmggaW4g
SGVhZGVycyAqLywKQEAgLTMyNzEzLDYgKzMyNzE5LDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQlBOTc4N0NCNDFGNUY1QzY2MDBDNTUxQzYg
LyogQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZCMEEw
N0YzMjFGQTRCNUMwMEQ1NzM5MSAvKiBBZENsaWNrQXR0cmlidXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzFBNzk1QzgxODg4QkNCNTAwMzgyRjkwIC8qIEFOR0xFSW5zdGFuY2VkQXJyYXlz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5MDcwN0U2MTIxOUMwNDMwMEQ5MEU1MSAvKiBBTkdM
RVdlYktpdEJyaWRnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDBFRUUwRTE0NzQzRjM5MDAz
RUFGQTIgLyogQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9BZENsaWNrQXR0cmlidXRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODM2ZWQ5
OTkzMDU4ZGVmZjMzMmM1Yjc5ZmE0Y2Q3MzA3YzUwMjA0MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9BZENsaWNrQXR0cmlidXRpb24uY3BwCkBAIC0wLDAgKzEsOTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWRDbGlja0F0
dHJpYnV0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CisjaW5jbHVkZSA8
d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitib29sIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6aXNWYWxpZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY29udmVyc2lvbgorICAgICAgICAmJiBtX2NvbnZlcnNpb24udmFs
dWUoKS5pc1ZhbGlkKCkKKyAgICAgICAgJiYgbV9jYW1wYWlnbi5pc1ZhbGlkKCkKKyAgICAgICAg
JiYgIW1fc291cmNlLnJlZ2lzdHJhYmxlRG9tYWluLmlzRW1wdHkoKQorICAgICAgICAmJiAhbV9k
ZXN0aW5hdGlvbi5yZWdpc3RyYWJsZURvbWFpbi5pc0VtcHR5KCkKKyAgICAgICAgJiYgbV9lYXJs
aWVzdFRpbWVUb1NlbmQ7Cit9CisKK3ZvaWQgQWRDbGlja0F0dHJpYnV0aW9uOjpzZXRDb252ZXJz
aW9uKENvbnZlcnNpb24mJiBjb252ZXJzaW9uKQoreworICAgIGlmICghY29udmVyc2lvbi5pc1Zh
bGlkKCkgfHwgKG1fY29udmVyc2lvbiAmJiBtX2NvbnZlcnNpb24tPnByaW9yaXR5ID4gY29udmVy
c2lvbi5wcmlvcml0eSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udmVyc2lvbiA9IFdU
Rk1vdmUoY29udmVyc2lvbik7CisgICAgLy8gMjQtNDggaG91ciBkZWxheSBiZWZvcmUgc2VuZGlu
Zy4KKyAgICBtX2VhcmxpZXN0VGltZVRvU2VuZCA9IG1fdGltZU9mQWRDbGljayArIDI0X2ggKyBT
ZWNvbmRzKHJhbmRvbU51bWJlcigpICogKDI0X2gpLnZhbHVlKCkpOworfQorCitVUkwgQWRDbGlj
a0F0dHJpYnV0aW9uOjp1cmwoKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm4gVVJMKCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJodHRwczovLyIpOworICAgIGJ1aWxkZXIuYXBwZW5kKG1fc291cmNl
LnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIi8ud2VsbC1r
bm93bi9hZC1jbGljay1hdHRyaWJ1dGlvbi8iKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlciht
X2NvbnZlcnNpb24udmFsdWUoKS5kYXRhKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnLycpOworICAg
IGJ1aWxkZXIuYXBwZW5kTnVtYmVyKG1fY2FtcGFpZ24uaWQpOworCisgICAgVVJMIHVybCB7IFVS
TCgpLCBidWlsZGVyLnRvU3RyaW5nKCkgfTsKKyAgICBpZiAodXJsLmlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIHVybDsKKworICAgIHJldHVybiBVUkwoKTsKK30KKworVVJMIEFkQ2xpY2tBdHRy
aWJ1dGlvbjo6cmVmZXJyZXIoKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm4gVVJMKCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJodHRwczovLyIpOworICAgIGJ1aWxkZXIuYXBwZW5kKG1fZGVzdGlu
YXRpb24ucmVnaXN0cmFibGVEb21haW4pOworICAgIGJ1aWxkZXIuYXBwZW5kKCcvJyk7CisKKyAg
ICBVUkwgdXJsIHsgVVJMKCksIGJ1aWxkZXIudG9TdHJpbmcoKSB9OworICAgIGlmICh1cmwuaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm4gdXJsOworICAgIAorICAgIHJldHVybiBVUkwoKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjdjMzZmZDg5NGNkZDYxMGFjNzI3OWU4MjRkYjVlNWQwMGU0YTM2ZjcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQWRDbGlja0F0dHJpYnV0aW9uLmgKQEAgLTAs
MCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlB1Ymxp
Y1N1ZmZpeC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFVSTDsKK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjb25zdGV4cHIgdW5zaWduZWQgc2hvcnQgbWF4RW50cm9weSA9IDY0
OworCitjbGFzcyBBZENsaWNrQXR0cmlidXRpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEFkQ2xpY2tBdHRyaWJ1dGlvbik7CitwdWJsaWM6CisgICAgdXNpbmcgQ2FtcGFpZ25JZCA9IHVu
c2lnbmVkIHNob3J0OworICAgIHVzaW5nIENvbnZlcnNpb25EYXRhID0gdW5zaWduZWQgc2hvcnQ7
CisgICAgdXNpbmcgUHJpb3JpdHlWYWx1ZSA9IHVuc2lnbmVkIHNob3J0OworCisgICAgc3RydWN0
IENhbXBhaWduIHsKKyAgICAgICAgZXhwbGljaXQgQ2FtcGFpZ24oQ2FtcGFpZ25JZCBpZCkKKyAg
ICAgICAgICAgIDogaWQge2lkfQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
ZCA8IG1heEVudHJvcHk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENhbXBhaWduSWQg
aWQ7CisgICAgfTsKKworICAgIHN0cnVjdCBTb3VyY2UgeworICAgICAgICBleHBsaWNpdCBTb3Vy
Y2UoY29uc3QgU3RyaW5nJiBob3N0KQorI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCisg
ICAgICAgICAgICA6IHJlZ2lzdHJhYmxlRG9tYWluIHtXZWJDb3JlOjp0b3BQcml2YXRlbHlDb250
cm9sbGVkRG9tYWluKGhvc3QpfQorI2Vsc2UKKyAgICAgICAgICAgIDogcmVnaXN0cmFibGVEb21h
aW4ge2VtcHR5U3RyaW5nKCl9CisjZW5kaWYKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgU3RyaW5nIHJlZ2lzdHJhYmxlRG9tYWluOworICAgIH07CisKKyAgICBzdHJ1Y3QgRGVzdGlu
YXRpb24geworICAgICAgICBleHBsaWNpdCBEZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIGhvc3Qp
CisjaWYgRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkKKyAgICAgICAgICAgIDogcmVnaXN0cmFi
bGVEb21haW4ge1dlYkNvcmU6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oaG9zdCl9Cisj
ZWxzZQorICAgICAgICAgICAgOiByZWdpc3RyYWJsZURvbWFpbiB7ZW1wdHlTdHJpbmcoKX0KKyNl
bmRpZgorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgcmVnaXN0cmFibGVE
b21haW47CisgICAgfTsKKworICAgIHN0cnVjdCBQcmlvcml0eSB7CisgICAgICAgIGV4cGxpY2l0
IFByaW9yaXR5KFByaW9yaXR5VmFsdWUgdmFsdWUpCisgICAgICAgIDogdmFsdWUge3ZhbHVlfQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFByaW9yaXR5VmFsdWUgdmFs
dWU7CisgICAgfTsKKyAgICAKKyAgICBzdHJ1Y3QgQ29udmVyc2lvbiB7CisgICAgICAgIGV4cGxp
Y2l0IENvbnZlcnNpb24oQ29udmVyc2lvbkRhdGEgZGF0YSwgUHJpb3JpdHkgcHJpb3JpdHkpCisg
ICAgICAgICAgICA6IGRhdGEge2RhdGF9CisgICAgICAgICAgICAsIHByaW9yaXR5IHtwcmlvcml0
eS52YWx1ZX0KKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEgPCBtYXhFbnRyb3B5ICYm
IHByaW9yaXR5IDwgbWF4RW50cm9weTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ29u
dmVyc2lvbkRhdGEgZGF0YTsKKyAgICAgICAgUHJpb3JpdHlWYWx1ZSBwcmlvcml0eTsKKyAgICB9
OworCisgICAgQWRDbGlja0F0dHJpYnV0aW9uKENhbXBhaWduIGNhbXBhaWduLCBjb25zdCBTb3Vy
Y2UmIHNvdXJjZSwgY29uc3QgRGVzdGluYXRpb24mIGRlc3RpbmF0aW9uKQorICAgICAgICA6IG1f
Y2FtcGFpZ24ge2NhbXBhaWdufQorICAgICAgICAsIG1fc291cmNlIHtzb3VyY2V9CisgICAgICAg
ICwgbV9kZXN0aW5hdGlvbiB7ZGVzdGluYXRpb259CisgICAgICAgICwgbV90aW1lT2ZBZENsaWNr
IHtXYWxsVGltZTo6bm93KCl9CisgICAgeworICAgIH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0Q29udmVyc2lvbihDb252ZXJzaW9uJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFVSTCB1
cmwoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBVUkwgcmVmZXJyZXIoKSBjb25zdDsKKyAg
ICBPcHRpb25hbDxXYWxsVGltZT4gZWFybGllc3RUaW1lVG9TZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9lYXJsaWVzdFRpbWVUb1NlbmQ7IH07CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3Q7CisKKyAgICBDYW1wYWlnbiBtX2NhbXBhaWduOworICAgIFNvdXJjZSBtX3NvdXJjZTsK
KyAgICBEZXN0aW5hdGlvbiBtX2Rlc3RpbmF0aW9uOworICAgIFdhbGxUaW1lIG1fdGltZU9mQWRD
bGljazsKKworICAgIE9wdGlvbmFsPENvbnZlcnNpb24+IG1fY29udmVyc2lvbjsKKyAgICBPcHRp
b25hbDxXYWxsVGltZT4gbV9lYXJsaWVzdFRpbWVUb1NlbmQ7Cit9OworICAgIAorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKaW5k
ZXggNDc1NGJlYWI3YWE5NWE2ZjFlM2Y5MjUzMjJiOTFlOWYxNjljNTZmNi4uYzhiYmQ5M2M2NmZl
OGNlYmQ1MWViNGI1MmI2MzIwMjFkYmJiZmJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRMb2FkZXIuY3BwCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFj
a2VyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxv
YWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJTV0NsaWVudENvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgog
I2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDUyODM5OWYyZjZiYzUwZGNjOTE0NTEz
YTliZDE5MDMxYzAxMzdiZGEuLjVjNWNhYzAwZDZjNjc5YzRlOGY5YWEzZGI4MTk0YWJjZmUyY2Zi
YjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNSBAQAorMjAxOS0wMS0yOCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgZGF0YSBhYnN0cmFjdGlvbiBhbmQgdmFsaWRhdGlvbiBmb3Ig
QWQgQ2xpY2sgQXR0cmlidXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5MzkxNgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc2MDM0ODE+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQWRDbGlja0F0dHJpYnV0aW9uLmNwcDogQWRk
ZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxOS0wMS0yNCAgSm9obiBX
aWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgQWQgQ2xpY2sgQXR0
cmlidXRpb24gYXMgYW4gaW50ZXJuYWwvZXhwZXJpbWVudGFsIGZlYXR1cmUKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggNjMwNjhlM2E4MTYzNGUwZTNhNzNiNjNjMDExMTMxYzA1OGEwMjYwZS4u
OWRjMWMxNmM1OWIwM2QxNmZmNTg2NTkzODI5ODlkYzI1Y2E0NTQzOSAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTMzNCw2ICszMzQsNyBAQAogCQk2MzcyODFBNzIxQUUxMzg2MDA5RTBERTYg
LyogRG93bmxvYWRQcm9ncmVzcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDYzNzI4MUE2MjFBRTEzODYwMDlFMERFNiAvKiBEb3dubG9hZFByb2dyZXNz
Lm1tICovOyB9OwogCQk2M0E2MUI4QjFGQUQyNTExMDBGMDY4ODUgLyogZGlzcGxheS1tb2RlLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjNBNjFCOEExRkFEMjA0RDAwRjA2ODg1IC8qIGRpc3BsYXktbW9kZS5odG1sICovOyB9OwogCQk2
M0Y2NjgyMjFGOTdGN0Y5MDAzMkVFNTEgLyogQXBwbGljYXRpb25NYW5pZmVzdC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzRjY2ODIwMUY5N0MzQUEw
MDMyRUU1MSAvKiBBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tICovOyB9OworCQk2QjBBMDdGNzIxRkE5
QzJCMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCMEEwN0Y2MjFGQTlDMkIwMEQ1NzM5MSAvKiBB
ZENsaWNrQXR0cmlidXRpb24uY3BwICovOyB9OwogCQk2QjMwNjEwNjIxOEEzNzI5MDBGNUE4MDIg
LyogQ2xvc2luZ1dlYlZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2QjMwNjEwNTIxOEEzNzI5MDBGNUE4MDIgLyogQ2xvc2luZ1dlYlZpZXcubW0g
Ki87IH07CiAJCTZCOUFCRTEyMjA4Njk1MkYwMEQ3NURFNiAvKiBIVFRQUGFyc2Vycy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjlBQkUxMTIwODY5
NTJGMDBENzVERTYgLyogSFRUUFBhcnNlcnMuY3BwICovOyB9OwogCQk2QkZEMjk0QzFENUU2QzFE
MDA4RUM5NjggLyogSGFzaENvdW50ZWRTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0EzOEQ3RTUxQzc1MkQ1RjAwNEYxNTdEIC8qIEhhc2hDb3Vu
dGVkU2V0LmNwcCAqLzsgfTsKQEAgLTE3MDQsNiArMTcwNSw3IEBACiAJCTYzNzI4MUE2MjFBRTEz
ODYwMDlFMERFNiAvKiBEb3dubG9hZFByb2dyZXNzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RG93bmxvYWRQcm9ncmVzcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjNBNjFC
OEExRkFEMjA0RDAwRjA2ODg1IC8qIGRpc3BsYXktbW9kZS5odG1sICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImRpc3Bs
YXktbW9kZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjNGNjY4MjAxRjk3
QzNBQTAwMzJFRTUxIC8qIEFwcGxpY2F0aW9uTWFuaWZlc3QubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk2QjBBMDdGNjIxRkE5QzJCMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEFkQ2xpY2tBdHRyaWJ1dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZCMzA2MTA1MjE4QTM3MjkwMEY1QTgwMiAvKiBDbG9zaW5nV2ViVmlldy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENsb3NpbmdXZWJWaWV3Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2QjlBQkUxMTIwODY5NTJGMDBENzVERTYgLyogSFRUUFBhcnNlcnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRUUFBhcnNlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3NTFCMDVENTFGOEVBQzFBMDAyOEEwOUUgLyogRGF0YWJhc2VUcmFja2Vy
VGVzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERhdGFiYXNlVHJhY2tlclRlc3QubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjU4LDYgKzI2NjAsNyBAQAogCQkJCUExRUMx
MTg1MUY0MjUzRDkwMEQwMTQ2RSAvKiBpb3MgKi8sCiAJCQkJMzE2MkFFOUExRTZGMkY4RjAwMEU0
REJDIC8qIG1hYyAqLywKIAkJCQlBQkY1MTA2MzJBMTlCOEFDN0VDNDBFMTcgLyogQWJvcnRhYmxl
VGFza1F1ZXVlLmNwcCAqLywKKwkJCQk2QjBBMDdGNjIxRkE5QzJCMDBENTczOTEgLyogQWRDbGlj
a0F0dHJpYnV0aW9uLmNwcCAqLywKIAkJCQk3QTkwOUE2RjFEODc3NDc1MDA3RTEwRjggLyogQWZm
aW5lVHJhbnNmb3JtLmNwcCAqLywKIAkJCQk1NzE1MkI1RDIxQ0MyMDQ1MDAwQzM3Q0EgLyogQXBk
dVRlc3QuY3BwICovLAogCQkJCTYzNTRGNEQwMUY3QzNBQjUwMEQ4OURGMyAvKiBBcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyLmNwcCAqLywKQEAgLTM4OTEsNiArMzg5NCw3IEBACiAJCQkJMkUyMDVC
QTQxRjUyNzc0NjAwNTk1MkREIC8qIEFjY2Vzc2liaWxpdHlUZXN0c0lPUy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTlCRDUxMTFDMUZFOEUxMTYwMEQyQjYzMCAvKiBBY2Nlc3NpbmdQYXN0ZWRJbWFn
ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0NUI2M0ZFMUYxOUQ0MTAwMDlEMzhCOSAvKiBBY3Rp
b25TaGVldFRlc3RzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNkIwQTA3RjcyMUZBOUMyQjAwRDU3
MzkxIC8qIEFkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0U3REQ2
NDFFQTA2RkYyMDA5QjM5NkQgLyogQWRkaXRpb25hbFJlYWRBY2Nlc3NBbGxvd2VkVVJMcy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTU1QTgxN0ZDMjE4MTAwRTAwMDA0QTM5QSAvKiBBZGRpdGlvbmFs
U3VwcG9ydGVkSW1hZ2VUeXBlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdBOTA5QTdEMUQ4Nzc0
ODAwMDdFMTBGOCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQWRDbGlja0F0dHJpYnV0aW9u
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BZENsaWNrQXR0cmlidXRp
b24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjMyMmNkOWFiM2ZjYmRhYzZiMmY2Y2E1YTIxYTk5N2RlZTFkOGRl
NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
QWRDbGlja0F0dHJpYnV0aW9uLmNwcApAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQWRDbGlja0F0dHJpYnV0aW9u
Lmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitj
b25zdGV4cHIgdW5zaWduZWQgc2hvcnQgbWluNkJpdFZhbHVlIHsgMCB9OworY29uc3RleHByIHVu
c2lnbmVkIHNob3J0IG1heDZCaXRWYWx1ZSB7IDYzIH07CisKKy8vIFBvc2l0aXZlIHRlc3QgY2Fz
ZXMuCisKK1RFU1QoQWRDbGlja0F0dHJpYnV0aW9uLCBWYWxpZE1pblZhbHVlcykKK3sKKyAgICBB
ZENsaWNrQXR0cmlidXRpb24gYXR0cmlidXRpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDYW1wYWln
bihtaW42Qml0VmFsdWUpLCBBZENsaWNrQXR0cmlidXRpb246OlNvdXJjZSgid2Via2l0Lm9yZyIp
LCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uKCJleGFtcGxlLmNvbSIpKTsKKyAgICBh
dHRyaWJ1dGlvbi5zZXRDb252ZXJzaW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbiht
aW42Qml0VmFsdWUsIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHkobWluNkJpdFZhbHVlKSkp
OworCisgICAgYXV0byBhdHRyaWJ1dGlvblVybCA9IGF0dHJpYnV0aW9uLnVybCgpOworICAgIGF1
dG8gcmVmZXJyZXJVcmwgPSBhdHRyaWJ1dGlvbi5yZWZlcnJlcigpOworICAgIAorICAgIEFTU0VS
VF9FUShhdHRyaWJ1dGlvblVybC5zdHJpbmcoKSwgImh0dHBzOi8vd2Via2l0Lm9yZy8ud2VsbC1r
bm93bi9hZC1jbGljay1hdHRyaWJ1dGlvbi8wLzAiKTsKKyAgICBBU1NFUlRfRVEocmVmZXJyZXJV
cmwuc3RyaW5nKCksICJodHRwczovL2V4YW1wbGUuY29tLyIpOworfQorCitURVNUKEFkQ2xpY2tB
dHRyaWJ1dGlvbiwgVmFsaWRNaWRWYWx1ZXMpCit7CisgICAgQWRDbGlja0F0dHJpYnV0aW9uIGF0
dHJpYnV0aW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q2FtcGFpZ24oKHVuc2lnbmVkIHNob3J0KTEy
KSwgQWRDbGlja0F0dHJpYnV0aW9uOjpTb3VyY2UoIndlYmtpdC5vcmciKSwgQWRDbGlja0F0dHJp
YnV0aW9uOjpEZXN0aW5hdGlvbigiZXhhbXBsZS5jb20iKSk7CisgICAgYXR0cmlidXRpb24uc2V0
Q29udmVyc2lvbihBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb24oKHVuc2lnbmVkIHNob3J0
KTQ0LCBBZENsaWNrQXR0cmlidXRpb246OlByaW9yaXR5KCh1bnNpZ25lZCBzaG9ydCkyMikpKTsK
KworICAgIGF1dG8gYXR0cmlidXRpb25VcmwgPSBhdHRyaWJ1dGlvbi51cmwoKTsKKyAgICBhdXRv
IHJlZmVycmVyVXJsID0gYXR0cmlidXRpb24ucmVmZXJyZXIoKTsKKworICAgIEFTU0VSVF9FUShh
dHRyaWJ1dGlvblVybC5zdHJpbmcoKSwgImh0dHBzOi8vd2Via2l0Lm9yZy8ud2VsbC1rbm93bi9h
ZC1jbGljay1hdHRyaWJ1dGlvbi80NC8xMiIpOworICAgIEFTU0VSVF9FUShyZWZlcnJlclVybC5z
dHJpbmcoKSwgImh0dHBzOi8vZXhhbXBsZS5jb20vIik7Cit9CisKK1RFU1QoQWRDbGlja0F0dHJp
YnV0aW9uLCBWYWxpZE1heFZhbHVlcykKK3sKKyAgICBBZENsaWNrQXR0cmlidXRpb24gYXR0cmli
dXRpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDYW1wYWlnbihtYXg2Qml0VmFsdWUpLCBBZENsaWNr
QXR0cmlidXRpb246OlNvdXJjZSgid2Via2l0Lm9yZyIpLCBBZENsaWNrQXR0cmlidXRpb246OkRl
c3RpbmF0aW9uKCJleGFtcGxlLmNvbSIpKTsKKyAgICBhdHRyaWJ1dGlvbi5zZXRDb252ZXJzaW9u
KEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihtYXg2Qml0VmFsdWUsIEFkQ2xpY2tBdHRy
aWJ1dGlvbjo6UHJpb3JpdHkobWF4NkJpdFZhbHVlKSkpOworCisgICAgYXV0byBhdHRyaWJ1dGlv
blVybCA9IGF0dHJpYnV0aW9uLnVybCgpOworICAgIGF1dG8gcmVmZXJyZXJVcmwgPSBhdHRyaWJ1
dGlvbi5yZWZlcnJlcigpOworCisgICAgQVNTRVJUX0VRKGF0dHJpYnV0aW9uVXJsLnN0cmluZygp
LCAiaHR0cHM6Ly93ZWJraXQub3JnLy53ZWxsLWtub3duL2FkLWNsaWNrLWF0dHJpYnV0aW9uLzYz
LzYzIik7CisgICAgQVNTRVJUX0VRKHJlZmVycmVyVXJsLnN0cmluZygpLCAiaHR0cHM6Ly9leGFt
cGxlLmNvbS8iKTsKK30KKworVEVTVChBZENsaWNrQXR0cmlidXRpb24sIEVhcmxpZXN0VGltZVRv
U2VuZEF0dHJpYnV0aW9uTWluaW11bURlbGF5KQoreworICAgIEFkQ2xpY2tBdHRyaWJ1dGlvbiBh
dHRyaWJ1dGlvbihBZENsaWNrQXR0cmlidXRpb246OkNhbXBhaWduKG1heDZCaXRWYWx1ZSksIEFk
Q2xpY2tBdHRyaWJ1dGlvbjo6U291cmNlKCJ3ZWJraXQub3JnIiksIEFkQ2xpY2tBdHRyaWJ1dGlv
bjo6RGVzdGluYXRpb24oImV4YW1wbGUuY29tIikpOworICAgIGF1dG8gbm93ID0gV2FsbFRpbWU6
Om5vdygpOworICAgIGF0dHJpYnV0aW9uLnNldENvbnZlcnNpb24oQWRDbGlja0F0dHJpYnV0aW9u
OjpDb252ZXJzaW9uKG1heDZCaXRWYWx1ZSwgQWRDbGlja0F0dHJpYnV0aW9uOjpQcmlvcml0eSht
YXg2Qml0VmFsdWUpKSk7CisgICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmQgPSBhdHRyaWJ1dGlv
bi5lYXJsaWVzdFRpbWVUb1NlbmQoKTsKKyAgICBBU1NFUlRfVFJVRShlYXJsaWVzdFRpbWVUb1Nl
bmQpOworICAgIEFTU0VSVF9UUlVFKGVhcmxpZXN0VGltZVRvU2VuZC52YWx1ZSgpLnNlY29uZHNT
aW5jZUVwb2NoKCkgLSAyNF9oID49IG5vdy5zZWNvbmRzU2luY2VFcG9jaCgpKTsKK30KKworLy8g
TmVnYXRpdmUgdGVzdCBjYXNlcy4KKworVEVTVChBZENsaWNrQXR0cmlidXRpb24sIEludmFsaWRD
YW1wYWlnbklkKQoreworICAgIEFkQ2xpY2tBdHRyaWJ1dGlvbiBhdHRyaWJ1dGlvbihBZENsaWNr
QXR0cmlidXRpb246OkNhbXBhaWduKG1heDZCaXRWYWx1ZSArIDEpLCBBZENsaWNrQXR0cmlidXRp
b246OlNvdXJjZSgid2Via2l0Lm9yZyIpLCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9u
KCJleGFtcGxlLmNvbSIpKTsKKyAgICBhdHRyaWJ1dGlvbi5zZXRDb252ZXJzaW9uKEFkQ2xpY2tB
dHRyaWJ1dGlvbjo6Q29udmVyc2lvbihtYXg2Qml0VmFsdWUsIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6
UHJpb3JpdHkobWF4NkJpdFZhbHVlKSkpOworCisgICAgYXV0byBhdHRyaWJ1dGlvblVybCA9IGF0
dHJpYnV0aW9uLnVybCgpOworICAgIGF1dG8gcmVmZXJyZXJVcmwgPSBhdHRyaWJ1dGlvbi5yZWZl
cnJlcigpOworCisgICAgQVNTRVJUX1RSVUUoYXR0cmlidXRpb25Vcmwuc3RyaW5nKCkuaXNFbXB0
eSgpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcnJlclVybC5zdHJpbmcoKS5pc0VtcHR5KCkpOwor
fQorCitURVNUKEFkQ2xpY2tBdHRyaWJ1dGlvbiwgSW52YWxpZFNvdXJjZUhvc3QpCit7CisgICAg
QWRDbGlja0F0dHJpYnV0aW9uIGF0dHJpYnV0aW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q2FtcGFp
Z24obWF4NkJpdFZhbHVlKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpTb3VyY2UoIndlYmtpdG9yZyIp
LCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uKCJleGFtcGxlLmNvbSIpKTsKKyAgICBh
dHRyaWJ1dGlvbi5zZXRDb252ZXJzaW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbiht
YXg2Qml0VmFsdWUsIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHkobWF4NkJpdFZhbHVlKSkp
OworCisgICAgYXV0byBhdHRyaWJ1dGlvblVybCA9IGF0dHJpYnV0aW9uLnVybCgpOworICAgIGF1
dG8gcmVmZXJyZXJVcmwgPSBhdHRyaWJ1dGlvbi5yZWZlcnJlcigpOworCisgICAgQVNTRVJUX1RS
VUUoYXR0cmlidXRpb25Vcmwuc3RyaW5nKCkuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlRfVFJVRShy
ZWZlcnJlclVybC5zdHJpbmcoKS5pc0VtcHR5KCkpOworfQorCitURVNUKEFkQ2xpY2tBdHRyaWJ1
dGlvbiwgSW52YWxpZERlc3RpbmF0aW9uSG9zdCkKK3sKKyAgICBBZENsaWNrQXR0cmlidXRpb24g
YXR0cmlidXRpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDYW1wYWlnbihtYXg2Qml0VmFsdWUgKyAx
KSwgQWRDbGlja0F0dHJpYnV0aW9uOjpTb3VyY2UoIndlYmtpdC5vcmciKSwgQWRDbGlja0F0dHJp
YnV0aW9uOjpEZXN0aW5hdGlvbigiZXhhbXBsZWNvbSIpKTsKKyAgICBhdHRyaWJ1dGlvbi5zZXRD
b252ZXJzaW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihtYXg2Qml0VmFsdWUsIEFk
Q2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHkobWF4NkJpdFZhbHVlKSkpOworCisgICAgYXV0byBh
dHRyaWJ1dGlvblVybCA9IGF0dHJpYnV0aW9uLnVybCgpOworICAgIGF1dG8gcmVmZXJyZXJVcmwg
PSBhdHRyaWJ1dGlvbi5yZWZlcnJlcigpOworCisgICAgQVNTRVJUX1RSVUUoYXR0cmlidXRpb25V
cmwuc3RyaW5nKCkuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcnJlclVybC5zdHJp
bmcoKS5pc0VtcHR5KCkpOworfQorCitURVNUKEFkQ2xpY2tBdHRyaWJ1dGlvbiwgSW52YWxpZENv
bnZlcnNpb25EYXRhKQoreworICAgIEFkQ2xpY2tBdHRyaWJ1dGlvbiBhdHRyaWJ1dGlvbihBZENs
aWNrQXR0cmlidXRpb246OkNhbXBhaWduKG1heDZCaXRWYWx1ZSksIEFkQ2xpY2tBdHRyaWJ1dGlv
bjo6U291cmNlKCJ3ZWJraXQub3JnIiksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6RGVzdGluYXRpb24o
ImV4YW1wbGUuY29tIikpOworICAgIGF0dHJpYnV0aW9uLnNldENvbnZlcnNpb24oQWRDbGlja0F0
dHJpYnV0aW9uOjpDb252ZXJzaW9uKChtYXg2Qml0VmFsdWUgKyAxKSwgQWRDbGlja0F0dHJpYnV0
aW9uOjpQcmlvcml0eShtYXg2Qml0VmFsdWUpKSk7CisKKyAgICBhdXRvIGF0dHJpYnV0aW9uVXJs
ID0gYXR0cmlidXRpb24udXJsKCk7CisgICAgYXV0byByZWZlcnJlclVybCA9IGF0dHJpYnV0aW9u
LnJlZmVycmVyKCk7CisKKyAgICBBU1NFUlRfVFJVRShhdHRyaWJ1dGlvblVybC5zdHJpbmcoKS5p
c0VtcHR5KCkpOworICAgIEFTU0VSVF9UUlVFKHJlZmVycmVyVXJsLnN0cmluZygpLmlzRW1wdHko
KSk7Cit9CisKK1RFU1QoQWRDbGlja0F0dHJpYnV0aW9uLCBJbnZhbGlkUHJpb3JpdHkpCit7Cisg
ICAgQWRDbGlja0F0dHJpYnV0aW9uIGF0dHJpYnV0aW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q2Ft
cGFpZ24obWF4NkJpdFZhbHVlKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpTb3VyY2UoIndlYmtpdC5v
cmciKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpEZXN0aW5hdGlvbigiZXhhbXBsZS5jb20iKSk7Cisg
ICAgYXR0cmlidXRpb24uc2V0Q29udmVyc2lvbihBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNp
b24obWF4NkJpdFZhbHVlLCBBZENsaWNrQXR0cmlidXRpb246OlByaW9yaXR5KG1heDZCaXRWYWx1
ZSArIDEpKSk7CisKKyAgICBhdXRvIGF0dHJpYnV0aW9uVXJsID0gYXR0cmlidXRpb24udXJsKCk7
CisgICAgYXV0byByZWZlcnJlclVybCA9IGF0dHJpYnV0aW9uLnJlZmVycmVyKCk7CisKKyAgICBB
U1NFUlRfVFJVRShhdHRyaWJ1dGlvblVybC5zdHJpbmcoKS5pc0VtcHR5KCkpOworICAgIEFTU0VS
VF9UUlVFKHJlZmVycmVyVXJsLnN0cmluZygpLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoQWRDbGlj
a0F0dHJpYnV0aW9uLCBJbnZhbGlkTWlzc2luZ0NvbnZlcnNpb24pCit7CisgICAgQWRDbGlja0F0
dHJpYnV0aW9uIGF0dHJpYnV0aW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q2FtcGFpZ24obWF4NkJp
dFZhbHVlKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpTb3VyY2UoIndlYmtpdC5vcmciKSwgQWRDbGlj
a0F0dHJpYnV0aW9uOjpEZXN0aW5hdGlvbigiZXhhbXBsZS5jb20iKSk7CisKKyAgICBhdXRvIGF0
dHJpYnV0aW9uVXJsID0gYXR0cmlidXRpb24udXJsKCk7CisgICAgYXV0byByZWZlcnJlclVybCA9
IGF0dHJpYnV0aW9uLnJlZmVycmVyKCk7CisKKyAgICBBU1NFUlRfVFJVRShhdHRyaWJ1dGlvblVy
bC5zdHJpbmcoKS5pc0VtcHR5KCkpOworICAgIEFTU0VSVF9UUlVFKHJlZmVycmVyVXJsLnN0cmlu
ZygpLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGF0dHJpYnV0aW9uLmVhcmxpZXN0VGlt
ZVRvU2VuZCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360480</attachid>
            <date>2019-01-29 11:19:48 -0800</date>
            <delta_ts>2019-01-29 11:54:38 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-193916-20190129111947.patch</filename>
            <type>text/plain</type>
            <size>28399</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc0MzBiZGJhODMyYTE4
NjBlMWVjZTcyMDkzNWJlZjMzNDNkNWI0MC4uYTlhN2Q0NmVmNjVhNzIzZmQxNTFkMzUyYWIyNjMz
YzNhMjUwZmNlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE5LTAxLTI5ICBKb2hu
IFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBkYXRhIGFic3Ry
YWN0aW9uIGFuZCB2YWxpZGF0aW9uIGZvciBBZCBDbGljayBBdHRyaWJ1dGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzOTE2CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS80NzYwMzQ4MT4KKworICAgICAgICBSZXZpZXdlZCBieSBEYW5pZWwgQmF0
ZXMsIEJyZW50IEZ1bGdoYW0sIGFuZCBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIE5ldyBB
UEkgdGVzdHMgYWRkZWQuCisKKyAgICAgICAgQWQgY2xpY2sgYXR0cmlidXRpb24gaGFzIHR3byBz
dGVwcy4gRmlyc3QsIHRoZSBzdG9yYWdlIG9mIGFuIGFkCisgICAgICAgIGNhbXBhaWduIElEIGZv
ciBhIGNsaWNrIHRoYXQgdGFrZXMgdGhlIHVzZXIgdG8gYSBkZXN0aW5hdGlvbgorICAgICAgICBz
aXRlLiBTZWNvbmQsIGEgY29udmVyc2lvbiBvbiB0aGUgZGVzdGluYXRpb24gc2l0ZSB0aGF0IGNh
biBiZQorICAgICAgICBhdHRyaWJ1dGVkIHRvIHRoZSBhZCBjbGljay4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgYSBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYSByZXF1ZXN0IGZvciBhZCBjbGlj
aworICAgICAgICBhdHRyaWJ1dGlvbi4gVmFsaWRhdGlvbiBtYWtlcyBzdXJlIHRoYXQgdGhlIGJp
dHMgb2YgZW50cm9weQorICAgICAgICByZXBvcnRlZCB0aHJvdWdoIHRoaXMgbWVjaGFuaXNtIGlz
IGxpbWl0ZWQuCisKKyAgICAgICAgVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1lbnRhbCBhbmQgb2Zm
IGJ5IGRlZmF1bHQuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgICAgIEFkZGVk
IGxvYWRlci9BZENsaWNrQXR0cmlidXRpb24uY3BwLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIvQWRDbGlja0F0dHJpYnV0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OmlzVmFs
aWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpzZXRDb252
ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6dXJsIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6cmVmZXJyZXIgY29uc3Qp
OgorICAgICAgICAqIGxvYWRlci9BZENsaWNrQXR0cmlidXRpb24uaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OkNhbXBhaWduOjpDYW1wYWlnbik6CisgICAg
ICAgIChXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OkNhbXBhaWduOjppc1ZhbGlkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6U291cmNlOjpTb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpEZXN0aW5hdGlvbjo6RGVz
dGluYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpQcmlvcml0
eTo6UHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpDb252
ZXJzaW9uOjpDb252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlv
bjo6Q29udmVyc2lvbjo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBZENsaWNr
QXR0cmlidXRpb246OkFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBZENs
aWNrQXR0cmlidXRpb246OmVhcmxpZXN0VGltZVRvU2VuZCBjb25zdCk6CisgICAgICAgICogbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgICAgIEFkZGVkIG1pc3NpbmcgI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIuCisKIDIwMTktMDEtMjQgIEpvaG4gV2lsYW5k
ZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEFkIENsaWNrIEF0dHJpYnV0
aW9uIGFzIGFuIGludGVybmFsL2V4cGVyaW1lbnRhbCBmZWF0dXJlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4
IDQwZmE0NzRhNDRlYjhkMmVhYjgwYjA5ODZjNWVlYmJmMGQ1MDUxMWIuLmZjODc1ZjZhYjk2MTg3
MjcxM2JlY2E0MDk0MjU5YTkzYTZmOTM5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xMzUxLDYgKzEz
NTEsNyBAQCBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRMaW5lQnJlYWtCb3guY3BwCiBsYXlvdXQv
bGF5b3V0dHJlZS9MYXlvdXRSZXBsYWNlZC5jcHAKIGxheW91dC9sYXlvdXR0cmVlL0xheW91dFRy
ZWVCdWlsZGVyLmNwcAogCitsb2FkZXIvQWRDbGlja0F0dHJpYnV0aW9uLmNwcAogbG9hZGVyL0Nh
bnZhc0FjdGl2aXR5UmVjb3JkLmNwcAogbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwCiBsb2FkZXIv
Q29va2llSmFyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGMzZDhmZGIwNDU2MzQwYzljY2YwNGEwMmY3YWYxNDM5ODg2NDJj
NjQuLjZhMDJmNjJmMDRkZjk1MDU0YmMxOWVlODQ0MjgwNWMzMmI3NjZlYTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE5OTUs
NiArMTk5NSw3IEBACiAJCTY5QTZDQkFEMUM2QkU0MkMwMEI4MzZFOSAvKiBBY2Nlc3NpYmlsaXR5
U1ZHRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjk3MTAxMDgxQzZCRTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50Lmgg
Ki87IH07CiAJCTZBMjJFODcwMUYxMDQxODYwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZBMjJFODZGMUYx
MDQxODYwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuaCAqLzsgfTsKIAkJNkE3Mjc5OEIxRjE2
QzI5QzAwM0YzOUI4IC8qIEluc3BlY3RvclNoYWRlclByb2dyYW0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZBNzI3OTg4MUYxNkMyOUIwMDNGMzlCOCAv
KiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmggKi87IH07CisJCTZCMEEwN0YyMjFGQTRCNUMwMEQ1
NzM5MSAvKiBBZENsaWNrQXR0cmlidXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCMEEwN0YwMjFGQTRCNUMwMEQ1NzM5MSAvKiBBZENsaWNrQXR0
cmlidXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk2QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCMzQ4MDkyMEVFRjUwRDQwMEFD
MUI0MSAvKiBOYXRpdmVJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTZCNjkzQTJFMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRP
YnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkI2OTNBMkQxQzUxQTgyRTAwQjAzQkVGIC8qIFJlc291cmNlTG9hZE9ic2VydmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkM0Qzk2REYxQUQ0
NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgzNTAw
MzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5oICovOyB9OwpAQCAtOTEw
Nyw2ICs5MTA4LDggQEAKIAkJNkEyMkU4NzIxRjEwNDJDNDAwRjU0NkMzIC8qIEluc3BlY3RvckNh
bnZhcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDYW52YXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2QTcyNzk4ODFGMTZDMjlCMDAzRjM5QjggLyogSW5zcGVj
dG9yU2hhZGVyUHJvZ3JhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNw
ZWN0b3JTaGFkZXJQcm9ncmFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBNzI3
OTg5MUYxNkMyOUIwMDNGMzlCOCAvKiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvclNoYWRlclByb2dyYW0uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QjBBMDdGMDIxRkE0QjVDMDBENTczOTEg
LyogQWRDbGlja0F0dHJpYnV0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFkQ2xpY2tBdHRyaWJ1dGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QjBBMDdGMTIxRkE0QjVDMDBENTcz
OTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFkQ2xpY2tB
dHRyaWJ1dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCMzQ4MDkyMEVF
RjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTmF0aXZlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkI2
OTNBMkQxQzUxQTgyRTAwQjAzQkVGIC8qIFJlc291cmNlTG9hZE9ic2VydmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTG9hZE9ic2VydmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCNjkzQTMzMUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJj
ZUxvYWRPYnNlcnZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZXNvdXJjZUxvYWRPYnNlcnZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NTIwOCw2ICsyNTIxMSw4IEBACiAJCQkJNTEyNkU2QjYwQTJFM0FFRjAwNUMyOUZBIC8qIGljb24g
Ki8sCiAJCQkJQTE1RTMxRjAxRTBDQjA3NTAwNEIzNzFDIC8qIGlvcyAqLywKIAkJCQk5M0ExRUFB
MjBBNTYzNEQ4MDA2OTYwQTAgLyogbWFjICovLAorCQkJCTZCMEEwN0YxMjFGQTRCNUMwMEQ1NzM5
MSAvKiBBZENsaWNrQXR0cmlidXRpb24uY3BwICovLAorCQkJCTZCMEEwN0YwMjFGQTRCNUMwMEQ1
NzM5MSAvKiBBZENsaWNrQXR0cmlidXRpb24uaCAqLywKIAkJCQk2MzE1MkQxODFGOTUzMUVFMDA3
QTVFNEIgLyogQXBwbGljYXRpb25NYW5pZmVzdExvYWRlci5jcHAgKi8sCiAJCQkJNjMxNTJEMTcx
Rjk1MzFFRTAwN0E1RTRCIC8qIEFwcGxpY2F0aW9uTWFuaWZlc3RMb2FkZXIuaCAqLywKIAkJCQlF
RkI3Mjg3QjIxMjRDNzNEMDA1QzI1NTggLyogQ2FudmFzQWN0aXZpdHlSZWNvcmQuY3BwICovLApA
QCAtMjgyNDYsNiArMjgyNTEsNyBAQAogCQkJCUUxQzRERTY5MEVBNzVDMUUwMDIzQ0NENiAvKiBB
Y3RpdmVET01PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyNEVFNTUwMURDODBEN0YwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MjRFRTU1MTFEQzgw
RDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQk2QjBBMDdGMjIxRkE0QjVDMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMTY3N0UwRTIxM0UwMkEwMDBBMDhDMzQgLyogQWRkcmVzc0Vy
cm9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3IC8qIEFk
anVzdFZpZXdTaXplT3JOb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0RDBDNDA2MTExNUYxRUEw
MDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLApAQCAtMzI3MTMsNiAr
MzI3MTksNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0g
KAogCQkJCUE5Nzg3Q0I0MUY1RjVDNjYwMEM1NTFDNiAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkIwQTA3RjMyMUZBNEI1QzAwRDU3MzkxIC8qIEFk
Q2xpY2tBdHRyaWJ1dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUE3OTVDODE4ODhCQ0I1
MDAzODJGOTAgLyogQU5HTEVJbnN0YW5jZWRBcnJheXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDkwNzA3RTYxMjE5QzA0MzAwRDkwRTUxIC8qIEFOR0xFV2ViS2l0QnJpZGdlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUNEMEVFRTBFMTQ3NDNGMzkwMDNFQUZBMiAvKiBBdWRpb0Rlc3RpbmF0aW9u
SU9TLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQWRDbGlja0F0
dHJpYnV0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZGMwNjM5MzcyZTNkZDNlNDRiYTg1NjdiMzAzZmRj
YjNjNjY1MzU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0FkQ2xp
Y2tBdHRyaWJ1dGlvbi5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBZENsaWNrQXR0cmlidXRpb24uaCIKKworI2luY2x1ZGUg
PHd0Zi9SYW5kb21OdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgQWRD
bGlja0F0dHJpYnV0aW9uOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb252ZXJz
aW9uCisgICAgICAgICYmIG1fY29udmVyc2lvbi52YWx1ZSgpLmlzVmFsaWQoKQorICAgICAgICAm
JiBtX2NhbXBhaWduLmlzVmFsaWQoKQorICAgICAgICAmJiAhbV9zb3VyY2UucmVnaXN0cmFibGVE
b21haW4uaXNFbXB0eSgpCisgICAgICAgICYmICFtX2Rlc3RpbmF0aW9uLnJlZ2lzdHJhYmxlRG9t
YWluLmlzRW1wdHkoKQorICAgICAgICAmJiBtX2VhcmxpZXN0VGltZVRvU2VuZDsKK30KKwordm9p
ZCBBZENsaWNrQXR0cmlidXRpb246OnNldENvbnZlcnNpb24oQ29udmVyc2lvbiYmIGNvbnZlcnNp
b24pCit7CisgICAgaWYgKCFjb252ZXJzaW9uLmlzVmFsaWQoKSB8fCAobV9jb252ZXJzaW9uICYm
IG1fY29udmVyc2lvbi0+cHJpb3JpdHkgPiBjb252ZXJzaW9uLnByaW9yaXR5KSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9jb252ZXJzaW9uID0gV1RGTW92ZShjb252ZXJzaW9uKTsKKyAgICAv
LyAyNC00OCBob3VyIGRlbGF5IGJlZm9yZSBzZW5kaW5nLiBUaGlzIGhlbHBzIHByaXZhY3kgc2lu
Y2UgdGhlIGNvbnZlcnNpb24gYW5kIHRoZSBhdHRyaWJ1dGlvbgorICAgIC8vIHJlcXVlc3RzIGFy
ZSBkZXRhY2hlZCBhbmQgdGhlIHRpbWUgb2YgdGhlIGF0dHJpYnV0aW9uIGRvZXMgbm90IHJldmVh
bCB0aGUgdGltZSBvZiB0aGUgY29udmVyc2lvbi4KKyAgICBtX2VhcmxpZXN0VGltZVRvU2VuZCA9
IG1fdGltZU9mQWRDbGljayArIDI0X2ggKyBTZWNvbmRzKHJhbmRvbU51bWJlcigpICogKDI0X2gp
LnZhbHVlKCkpOworfQorCitVUkwgQWRDbGlja0F0dHJpYnV0aW9uOjp1cmwoKSBjb25zdAorewor
ICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gVVJMKCk7CisKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJodHRwczovLyIpOwor
ICAgIGJ1aWxkZXIuYXBwZW5kKG1fc291cmNlLnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIi8ud2VsbC1rbm93bi9hZC1jbGljay1hdHRyaWJ1dGlvbi8iKTsK
KyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihtX2NvbnZlcnNpb24udmFsdWUoKS5kYXRhKTsKKyAg
ICBidWlsZGVyLmFwcGVuZCgnLycpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKG1fY2FtcGFp
Z24uaWQpOworCisgICAgVVJMIHVybCB7IFVSTCgpLCBidWlsZGVyLnRvU3RyaW5nKCkgfTsKKyAg
ICBpZiAodXJsLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHVybDsKKworICAgIHJldHVybiBV
UkwoKTsKK30KKworVVJMIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6cmVmZXJyZXIoKSBjb25zdAorewor
ICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gVVJMKCk7CisKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJodHRwczovLyIpOwor
ICAgIGJ1aWxkZXIuYXBwZW5kKG1fZGVzdGluYXRpb24ucmVnaXN0cmFibGVEb21haW4pOworICAg
IGJ1aWxkZXIuYXBwZW5kKCcvJyk7CisKKyAgICBVUkwgdXJsIHsgVVJMKCksIGJ1aWxkZXIudG9T
dHJpbmcoKSB9OworICAgIGlmICh1cmwuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdXJsOwor
ICAgIAorICAgIHJldHVybiBVUkwoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Fk
Q2xpY2tBdHRyaWJ1dGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkZjA1ZWU1ZWIzZWE4N2Y5ZjlhMjY0MDUz
ODE5NmU2MTBkNTQ3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
QWRDbGlja0F0dHJpYnV0aW9uLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlB1YmxpY1N1ZmZpeC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9XYWxs
VGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV1RG
IHsKK2NsYXNzIFVSTDsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdGV4cHIgdW5z
aWduZWQgc2hvcnQgbWF4RW50cm9weSA9IDY0OworCitjbGFzcyBBZENsaWNrQXR0cmlidXRpb24g
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFkQ2xpY2tBdHRyaWJ1dGlvbik7CitwdWJsaWM6
CisgICAgdXNpbmcgQ2FtcGFpZ25JZCA9IHVuc2lnbmVkIHNob3J0OworICAgIHVzaW5nIENvbnZl
cnNpb25EYXRhID0gdW5zaWduZWQgc2hvcnQ7CisgICAgdXNpbmcgUHJpb3JpdHlWYWx1ZSA9IHVu
c2lnbmVkIHNob3J0OworCisgICAgc3RydWN0IENhbXBhaWduIHsKKyAgICAgICAgZXhwbGljaXQg
Q2FtcGFpZ24oQ2FtcGFpZ25JZCBpZCkKKyAgICAgICAgICAgIDogaWQgeyBpZCB9CisgICAgICAg
IHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkIDwgbWF4RW50cm9weTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgQ2FtcGFpZ25JZCBpZDsKKyAgICB9OworCisgICAgc3RydWN0IFNv
dXJjZSB7CisgICAgICAgIGV4cGxpY2l0IFNvdXJjZShjb25zdCBTdHJpbmcmIGhvc3QpCisjaWYg
RU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkKKyAgICAgICAgICAgIDogcmVnaXN0cmFibGVEb21h
aW4geyBXZWJDb3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKGhvc3QpIH0KKyNlbHNl
CisgICAgICAgICAgICA6IHJlZ2lzdHJhYmxlRG9tYWluIHsgZW1wdHlTdHJpbmcoKSB9CisjZW5k
aWYKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHJlZ2lzdHJhYmxlRG9t
YWluOworICAgIH07CisKKyAgICBzdHJ1Y3QgRGVzdGluYXRpb24geworICAgICAgICBleHBsaWNp
dCBEZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIGhvc3QpCisjaWYgRU5BQkxFKFBVQkxJQ19TVUZG
SVhfTElTVCkKKyAgICAgICAgICAgIDogcmVnaXN0cmFibGVEb21haW4geyBXZWJDb3JlOjp0b3BQ
cml2YXRlbHlDb250cm9sbGVkRG9tYWluKGhvc3QpIH0KKyNlbHNlCisgICAgICAgICAgICA6IHJl
Z2lzdHJhYmxlRG9tYWluIHsgZW1wdHlTdHJpbmcoKSB9CisjZW5kaWYKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgU3RyaW5nIHJlZ2lzdHJhYmxlRG9tYWluOworICAgIH07CisKKyAg
ICBzdHJ1Y3QgUHJpb3JpdHkgeworICAgICAgICBleHBsaWNpdCBQcmlvcml0eShQcmlvcml0eVZh
bHVlIHZhbHVlKQorICAgICAgICA6IHZhbHVlIHsgdmFsdWUgfQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFByaW9yaXR5VmFsdWUgdmFsdWU7CisgICAgfTsKKyAgICAK
KyAgICBzdHJ1Y3QgQ29udmVyc2lvbiB7CisgICAgICAgIGV4cGxpY2l0IENvbnZlcnNpb24oQ29u
dmVyc2lvbkRhdGEgZGF0YSwgUHJpb3JpdHkgcHJpb3JpdHkpCisgICAgICAgICAgICA6IGRhdGEg
eyBkYXRhIH0KKyAgICAgICAgICAgICwgcHJpb3JpdHkgeyBwcmlvcml0eS52YWx1ZSB9CisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhIDwgbWF4RW50cm9weSAmJiBwcmlvcml0eSA8IG1h
eEVudHJvcHk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENvbnZlcnNpb25EYXRhIGRh
dGE7CisgICAgICAgIFByaW9yaXR5VmFsdWUgcHJpb3JpdHk7CisgICAgfTsKKworICAgIEFkQ2xp
Y2tBdHRyaWJ1dGlvbihDYW1wYWlnbiBjYW1wYWlnbiwgY29uc3QgU291cmNlJiBzb3VyY2UsIGNv
bnN0IERlc3RpbmF0aW9uJiBkZXN0aW5hdGlvbikKKyAgICAgICAgOiBtX2NhbXBhaWduIHsgY2Ft
cGFpZ24gfQorICAgICAgICAsIG1fc291cmNlIHsgc291cmNlIH0KKyAgICAgICAgLCBtX2Rlc3Rp
bmF0aW9uIHsgZGVzdGluYXRpb24gfQorICAgICAgICAsIG1fdGltZU9mQWRDbGljayB7IFdhbGxU
aW1lOjpub3coKSB9CisgICAgeworICAgIH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
Q29udmVyc2lvbihDb252ZXJzaW9uJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFVSTCB1cmwoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBVUkwgcmVmZXJyZXIoKSBjb25zdDsKKyAgICBPcHRp
b25hbDxXYWxsVGltZT4gZWFybGllc3RUaW1lVG9TZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lYXJs
aWVzdFRpbWVUb1NlbmQ7IH07CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7
CisKKyAgICBDYW1wYWlnbiBtX2NhbXBhaWduOworICAgIFNvdXJjZSBtX3NvdXJjZTsKKyAgICBE
ZXN0aW5hdGlvbiBtX2Rlc3RpbmF0aW9uOworICAgIFdhbGxUaW1lIG1fdGltZU9mQWRDbGljazsK
KworICAgIE9wdGlvbmFsPENvbnZlcnNpb24+IG1fY29udmVyc2lvbjsKKyAgICBPcHRpb25hbDxX
YWxsVGltZT4gbV9lYXJsaWVzdFRpbWVUb1NlbmQ7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKaW5kZXggNDc1
NGJlYWI3YWE5NWE2ZjFlM2Y5MjUzMjJiOTFlOWYxNjljNTZmNi4uYzhiYmQ5M2M2NmZlOGNlYmQ1
MWViNGI1MmI2MzIwMjFkYmJiZmJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgi
CiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNl
cnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJT
V0NsaWVudENvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1
ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDUyODM5OWYyZjZiYzUwZGNjOTE0NTEzYTliZDE5
MDMxYzAxMzdiZGEuLmVhMGQ3MWUxZDIxMzZhZDYzZDlhODE1NzE1NzE2YTQ5MzJlNTI2ZGUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNCBAQAorMjAxOS0wMS0yOSAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgZGF0YSBhYnN0cmFjdGlvbiBhbmQgdmFsaWRhdGlvbiBmb3IgQWQgQ2xp
Y2sgQXR0cmlidXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5MzkxNgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc2MDM0ODE+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFuaWVsIEJhdGVzLCBCcmVudCBGdWxnaGFtLCBhbmQgQWxleCBDaHJp
c3RlbnNlbi4KKworICAgICAgICBBZCBjbGljayBhdHRyaWJ1dGlvbiBoYXMgdHdvIHN0ZXBzLiBG
aXJzdCwgdGhlIHN0b3JhZ2Ugb2YgYW4gYWQKKyAgICAgICAgY2FtcGFpZ24gSUQgZm9yIGEgY2xp
Y2sgdGhhdCB0YWtlcyB0aGUgdXNlciB0byBhIGRlc3RpbmF0aW9uCisgICAgICAgIHNpdGUuIFNl
Y29uZCwgYSBjb252ZXJzaW9uIG9uIHRoZSBkZXN0aW5hdGlvbiBzaXRlIHRoYXQgY2FuIGJlCisg
ICAgICAgIGF0dHJpYnV0ZWQgdG8gdGhlIGFkIGNsaWNrLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWRkcyBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIHJlcXVlc3QgZm9yIGFkIGNsaWNrCisgICAg
ICAgIGF0dHJpYnV0aW9uLiBWYWxpZGF0aW9uIG1ha2VzIHN1cmUgdGhhdCB0aGUgYml0cyBvZiBl
bnRyb3B5CisgICAgICAgIHJlcG9ydGVkIHRocm91Z2ggdGhpcyBtZWNoYW5pc20gaXMgbGltaXRl
ZC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BZENs
aWNrQXR0cmlidXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1Qp
OgorCiAyMDE5LTAxLTI0ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBBZCBDbGljayBBdHRyaWJ1dGlvbiBhcyBhbiBpbnRlcm5hbC9leHBlcmltZW50
YWwgZmVhdHVyZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MzA2OGUzYTgxNjM0ZTBlM2E3
M2I2M2MwMTExMzFjMDU4YTAyNjBlLi45ZGMxYzE2YzU5YjAzZDE2ZmY1ODY1OTM4Mjk4OWRjMjVj
YTQ1NDM5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzM0LDYgKzMzNCw3IEBACiAJCTYz
NzI4MUE3MjFBRTEzODYwMDlFMERFNiAvKiBEb3dubG9hZFByb2dyZXNzLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjM3MjgxQTYyMUFFMTM4NjAwOUUw
REU2IC8qIERvd25sb2FkUHJvZ3Jlc3MubW0gKi87IH07CiAJCTYzQTYxQjhCMUZBRDI1MTEwMEYw
Njg4NSAvKiBkaXNwbGF5LW1vZGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2M0E2MUI4QTFGQUQyMDREMDBGMDY4ODUgLyogZGlzcGxh
eS1tb2RlLmh0bWwgKi87IH07CiAJCTYzRjY2ODIyMUY5N0Y3RjkwMDMyRUU1MSAvKiBBcHBsaWNh
dGlvbk1hbmlmZXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjNGNjY4MjAxRjk3QzNBQTAwMzJFRTUxIC8qIEFwcGxpY2F0aW9uTWFuaWZlc3QubW0g
Ki87IH07CisJCTZCMEEwN0Y3MjFGQTlDMkIwMEQ1NzM5MSAvKiBBZENsaWNrQXR0cmlidXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkIwQTA3
RjYyMUZBOUMyQjAwRDU3MzkxIC8qIEFkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAgKi87IH07CiAJCTZC
MzA2MTA2MjE4QTM3MjkwMEY1QTgwMiAvKiBDbG9zaW5nV2ViVmlldy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCMzA2MTA1MjE4QTM3MjkwMEY1QTgw
MiAvKiBDbG9zaW5nV2ViVmlldy5tbSAqLzsgfTsKIAkJNkI5QUJFMTIyMDg2OTUyRjAwRDc1REU2
IC8qIEhUVFBQYXJzZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZCOUFCRTExMjA4Njk1MkYwMEQ3NURFNiAvKiBIVFRQUGFyc2Vycy5jcHAgKi87
IH07CiAJCTZCRkQyOTRDMUQ1RTZDMUQwMDhFQzk2OCAvKiBIYXNoQ291bnRlZFNldC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTM4RDdFNTFDNzUy
RDVGMDA0RjE1N0QgLyogSGFzaENvdW50ZWRTZXQuY3BwICovOyB9OwpAQCAtMTcwNCw2ICsxNzA1
LDcgQEAKIAkJNjM3MjgxQTYyMUFFMTM4NjAwOUUwREU2IC8qIERvd25sb2FkUHJvZ3Jlc3MubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEb3dubG9hZFByb2dyZXNzLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2M0E2MUI4QTFGQUQyMDREMDBGMDY4ODUgLyogZGlzcGxheS1tb2Rl
Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0Lmh0bWw7IHBhdGggPSAiZGlzcGxheS1tb2RlLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2M0Y2NjgyMDFGOTdDM0FBMDAzMkVFNTEgLyogQXBwbGljYXRpb25NYW5pZmVz
dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFwcGxpY2F0aW9uTWFuaWZlc3QubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCMEEwN0Y2MjFGQTlDMkIwMEQ1NzM5MSAvKiBBZENs
aWNrQXR0cmlidXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWRDbGlja0F0dHJpYnV0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkIzMDYxMDUyMThBMzcyOTAwRjVB
ODAyIC8qIENsb3NpbmdXZWJWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2xvc2luZ1dl
YlZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCOUFCRTExMjA4Njk1MkYw
MEQ3NURFNiAvKiBIVFRQUGFyc2Vycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVFRQUGFyc2Vy
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1MUIwNUQ1MUY4RUFDMUEwMDI4
QTA5RSAvKiBEYXRhYmFzZVRyYWNrZXJUZXN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0
YWJhc2VUcmFja2VyVGVzdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2NTgs
NiArMjY2MCw3IEBACiAJCQkJQTFFQzExODUxRjQyNTNEOTAwRDAxNDZFIC8qIGlvcyAqLywKIAkJ
CQkzMTYyQUU5QTFFNkYyRjhGMDAwRTREQkMgLyogbWFjICovLAogCQkJCUFCRjUxMDYzMkExOUI4
QUM3RUM0MEUxNyAvKiBBYm9ydGFibGVUYXNrUXVldWUuY3BwICovLAorCQkJCTZCMEEwN0Y2MjFG
QTlDMkIwMEQ1NzM5MSAvKiBBZENsaWNrQXR0cmlidXRpb24uY3BwICovLAogCQkJCTdBOTA5QTZG
MUQ4Nzc0NzUwMDdFMTBGOCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwICovLAogCQkJCTU3MTUyQjVE
MjFDQzIwNDUwMDBDMzdDQSAvKiBBcGR1VGVzdC5jcHAgKi8sCiAJCQkJNjM1NEY0RDAxRjdDM0FC
NTAwRDg5REYzIC8qIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwICovLApAQCAtMzg5MSw2
ICszODk0LDcgQEAKIAkJCQkyRTIwNUJBNDFGNTI3NzQ2MDA1OTUyREQgLyogQWNjZXNzaWJpbGl0
eVRlc3RzSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOUJENTExMUMxRkU4RTExNjAwRDJCNjMw
IC8qIEFjY2Vzc2luZ1Bhc3RlZEltYWdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjQ1QjYzRkUx
RjE5RDQxMDAwOUQzOEI5IC8qIEFjdGlvblNoZWV0VGVzdHMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk2QjBBMDdGNzIxRkE5QzJCMDBENTczOTEgLyogQWRDbGlja0F0dHJpYnV0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTM3RTdERDY0MUVBMDZGRjIwMDlCMzk2RCAvKiBBZGRpdGlvbmFsUmVh
ZEFjY2Vzc0FsbG93ZWRVUkxzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTVBODE3RkMyMTgxMDBF
MDAwMDRBMzlBIC8qIEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0E5MDlBN0QxRDg3NzQ4MDAwN0UxMEY4IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9BZENsaWNrQXR0cmlidXRpb24uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdjZTI4MTcwZjU2NmZk
OTM5YWY4YzM2M2Q3YzM4NjA0MDcyOTU0MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BZENsaWNrQXR0cmlidXRpb24uY3BwCkBAIC0wLDAgKzEs
MTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9BZENsaWNrQXR0cmlidXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVk
ZSA8d3RmL1dhbGxUaW1lLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CisKK2NvbnN0ZXhwciB1bnNpZ25lZCBzaG9ydCBtaW42Qml0VmFs
dWUgeyAwIH07Citjb25zdGV4cHIgdW5zaWduZWQgc2hvcnQgbWF4NkJpdFZhbHVlIHsgNjMgfTsK
KworLy8gUG9zaXRpdmUgdGVzdCBjYXNlcy4KKworVEVTVChBZENsaWNrQXR0cmlidXRpb24sIFZh
bGlkTWluVmFsdWVzKQoreworICAgIEFkQ2xpY2tBdHRyaWJ1dGlvbiBhdHRyaWJ1dGlvbihBZENs
aWNrQXR0cmlidXRpb246OkNhbXBhaWduKG1pbjZCaXRWYWx1ZSksIEFkQ2xpY2tBdHRyaWJ1dGlv
bjo6U291cmNlKCJ3ZWJraXQub3JnIiksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6RGVzdGluYXRpb24o
ImV4YW1wbGUuY29tIikpOworICAgIGF0dHJpYnV0aW9uLnNldENvbnZlcnNpb24oQWRDbGlja0F0
dHJpYnV0aW9uOjpDb252ZXJzaW9uKG1pbjZCaXRWYWx1ZSwgQWRDbGlja0F0dHJpYnV0aW9uOjpQ
cmlvcml0eShtaW42Qml0VmFsdWUpKSk7CisKKyAgICBhdXRvIGF0dHJpYnV0aW9uVVJMID0gYXR0
cmlidXRpb24udXJsKCk7CisgICAgYXV0byByZWZlcnJlclVSTCA9IGF0dHJpYnV0aW9uLnJlZmVy
cmVyKCk7CisgICAgCisgICAgQVNTRVJUX0VRKGF0dHJpYnV0aW9uVVJMLnN0cmluZygpLCAiaHR0
cHM6Ly93ZWJraXQub3JnLy53ZWxsLWtub3duL2FkLWNsaWNrLWF0dHJpYnV0aW9uLzAvMCIpOwor
ICAgIEFTU0VSVF9FUShyZWZlcnJlclVSTC5zdHJpbmcoKSwgImh0dHBzOi8vZXhhbXBsZS5jb20v
Iik7Cit9CisKK1RFU1QoQWRDbGlja0F0dHJpYnV0aW9uLCBWYWxpZE1pZFZhbHVlcykKK3sKKyAg
ICBBZENsaWNrQXR0cmlidXRpb24gYXR0cmlidXRpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDYW1w
YWlnbigodW5zaWduZWQgc2hvcnQpMTIpLCBBZENsaWNrQXR0cmlidXRpb246OlNvdXJjZSgid2Vi
a2l0Lm9yZyIpLCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uKCJleGFtcGxlLmNvbSIp
KTsKKyAgICBhdHRyaWJ1dGlvbi5zZXRDb252ZXJzaW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29u
dmVyc2lvbigodW5zaWduZWQgc2hvcnQpNDQsIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHko
KHVuc2lnbmVkIHNob3J0KTIyKSkpOworCisgICAgYXV0byBhdHRyaWJ1dGlvblVSTCA9IGF0dHJp
YnV0aW9uLnVybCgpOworICAgIGF1dG8gcmVmZXJyZXJVUkwgPSBhdHRyaWJ1dGlvbi5yZWZlcnJl
cigpOworCisgICAgQVNTRVJUX0VRKGF0dHJpYnV0aW9uVVJMLnN0cmluZygpLCAiaHR0cHM6Ly93
ZWJraXQub3JnLy53ZWxsLWtub3duL2FkLWNsaWNrLWF0dHJpYnV0aW9uLzQ0LzEyIik7CisgICAg
QVNTRVJUX0VRKHJlZmVycmVyVVJMLnN0cmluZygpLCAiaHR0cHM6Ly9leGFtcGxlLmNvbS8iKTsK
K30KKworVEVTVChBZENsaWNrQXR0cmlidXRpb24sIFZhbGlkTWF4VmFsdWVzKQoreworICAgIEFk
Q2xpY2tBdHRyaWJ1dGlvbiBhdHRyaWJ1dGlvbihBZENsaWNrQXR0cmlidXRpb246OkNhbXBhaWdu
KG1heDZCaXRWYWx1ZSksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6U291cmNlKCJ3ZWJraXQub3JnIiks
IEFkQ2xpY2tBdHRyaWJ1dGlvbjo6RGVzdGluYXRpb24oImV4YW1wbGUuY29tIikpOworICAgIGF0
dHJpYnV0aW9uLnNldENvbnZlcnNpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uKG1h
eDZCaXRWYWx1ZSwgQWRDbGlja0F0dHJpYnV0aW9uOjpQcmlvcml0eShtYXg2Qml0VmFsdWUpKSk7
CisKKyAgICBhdXRvIGF0dHJpYnV0aW9uVVJMID0gYXR0cmlidXRpb24udXJsKCk7CisgICAgYXV0
byByZWZlcnJlclVSTCA9IGF0dHJpYnV0aW9uLnJlZmVycmVyKCk7CisKKyAgICBBU1NFUlRfRVEo
YXR0cmlidXRpb25VUkwuc3RyaW5nKCksICJodHRwczovL3dlYmtpdC5vcmcvLndlbGwta25vd24v
YWQtY2xpY2stYXR0cmlidXRpb24vNjMvNjMiKTsKKyAgICBBU1NFUlRfRVEocmVmZXJyZXJVUkwu
c3RyaW5nKCksICJodHRwczovL2V4YW1wbGUuY29tLyIpOworfQorCitURVNUKEFkQ2xpY2tBdHRy
aWJ1dGlvbiwgRWFybGllc3RUaW1lVG9TZW5kQXR0cmlidXRpb25NaW5pbXVtRGVsYXkpCit7Cisg
ICAgQWRDbGlja0F0dHJpYnV0aW9uIGF0dHJpYnV0aW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q2Ft
cGFpZ24obWF4NkJpdFZhbHVlKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpTb3VyY2UoIndlYmtpdC5v
cmciKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpEZXN0aW5hdGlvbigiZXhhbXBsZS5jb20iKSk7Cisg
ICAgYXV0byBub3cgPSBXYWxsVGltZTo6bm93KCk7CisgICAgYXR0cmlidXRpb24uc2V0Q29udmVy
c2lvbihBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb24obWF4NkJpdFZhbHVlLCBBZENsaWNr
QXR0cmlidXRpb246OlByaW9yaXR5KG1heDZCaXRWYWx1ZSkpKTsKKyAgICBhdXRvIGVhcmxpZXN0
VGltZVRvU2VuZCA9IGF0dHJpYnV0aW9uLmVhcmxpZXN0VGltZVRvU2VuZCgpOworICAgIEFTU0VS
VF9UUlVFKGVhcmxpZXN0VGltZVRvU2VuZCk7CisgICAgQVNTRVJUX1RSVUUoZWFybGllc3RUaW1l
VG9TZW5kLnZhbHVlKCkuc2Vjb25kc1NpbmNlRXBvY2goKSAtIDI0X2ggPj0gbm93LnNlY29uZHNT
aW5jZUVwb2NoKCkpOworfQorCisvLyBOZWdhdGl2ZSB0ZXN0IGNhc2VzLgorCitURVNUKEFkQ2xp
Y2tBdHRyaWJ1dGlvbiwgSW52YWxpZENhbXBhaWduSWQpCit7CisgICAgQWRDbGlja0F0dHJpYnV0
aW9uIGF0dHJpYnV0aW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q2FtcGFpZ24obWF4NkJpdFZhbHVl
ICsgMSksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6U291cmNlKCJ3ZWJraXQub3JnIiksIEFkQ2xpY2tB
dHRyaWJ1dGlvbjo6RGVzdGluYXRpb24oImV4YW1wbGUuY29tIikpOworICAgIGF0dHJpYnV0aW9u
LnNldENvbnZlcnNpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uKG1heDZCaXRWYWx1
ZSwgQWRDbGlja0F0dHJpYnV0aW9uOjpQcmlvcml0eShtYXg2Qml0VmFsdWUpKSk7CisKKyAgICBh
dXRvIGF0dHJpYnV0aW9uVVJMID0gYXR0cmlidXRpb24udXJsKCk7CisgICAgYXV0byByZWZlcnJl
clVSTCA9IGF0dHJpYnV0aW9uLnJlZmVycmVyKCk7CisKKyAgICBBU1NFUlRfVFJVRShhdHRyaWJ1
dGlvblVSTC5zdHJpbmcoKS5pc0VtcHR5KCkpOworICAgIEFTU0VSVF9UUlVFKHJlZmVycmVyVVJM
LnN0cmluZygpLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoQWRDbGlja0F0dHJpYnV0aW9uLCBJbnZh
bGlkU291cmNlSG9zdCkKK3sKKyAgICBBZENsaWNrQXR0cmlidXRpb24gYXR0cmlidXRpb24oQWRD
bGlja0F0dHJpYnV0aW9uOjpDYW1wYWlnbihtYXg2Qml0VmFsdWUpLCBBZENsaWNrQXR0cmlidXRp
b246OlNvdXJjZSgid2Via2l0b3JnIiksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6RGVzdGluYXRpb24o
ImV4YW1wbGUuY29tIikpOworICAgIGF0dHJpYnV0aW9uLnNldENvbnZlcnNpb24oQWRDbGlja0F0
dHJpYnV0aW9uOjpDb252ZXJzaW9uKG1heDZCaXRWYWx1ZSwgQWRDbGlja0F0dHJpYnV0aW9uOjpQ
cmlvcml0eShtYXg2Qml0VmFsdWUpKSk7CisKKyAgICBhdXRvIGF0dHJpYnV0aW9uVVJMID0gYXR0
cmlidXRpb24udXJsKCk7CisgICAgYXV0byByZWZlcnJlclVSTCA9IGF0dHJpYnV0aW9uLnJlZmVy
cmVyKCk7CisKKyAgICBBU1NFUlRfVFJVRShhdHRyaWJ1dGlvblVSTC5zdHJpbmcoKS5pc0VtcHR5
KCkpOworICAgIEFTU0VSVF9UUlVFKHJlZmVycmVyVVJMLnN0cmluZygpLmlzRW1wdHkoKSk7Cit9
CisKK1RFU1QoQWRDbGlja0F0dHJpYnV0aW9uLCBJbnZhbGlkRGVzdGluYXRpb25Ib3N0KQorewor
ICAgIEFkQ2xpY2tBdHRyaWJ1dGlvbiBhdHRyaWJ1dGlvbihBZENsaWNrQXR0cmlidXRpb246OkNh
bXBhaWduKG1heDZCaXRWYWx1ZSArIDEpLCBBZENsaWNrQXR0cmlidXRpb246OlNvdXJjZSgid2Vi
a2l0Lm9yZyIpLCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uKCJleGFtcGxlY29tIikp
OworICAgIGF0dHJpYnV0aW9uLnNldENvbnZlcnNpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDb252
ZXJzaW9uKG1heDZCaXRWYWx1ZSwgQWRDbGlja0F0dHJpYnV0aW9uOjpQcmlvcml0eShtYXg2Qml0
VmFsdWUpKSk7CisKKyAgICBhdXRvIGF0dHJpYnV0aW9uVVJMID0gYXR0cmlidXRpb24udXJsKCk7
CisgICAgYXV0byByZWZlcnJlclVSTCA9IGF0dHJpYnV0aW9uLnJlZmVycmVyKCk7CisKKyAgICBB
U1NFUlRfVFJVRShhdHRyaWJ1dGlvblVSTC5zdHJpbmcoKS5pc0VtcHR5KCkpOworICAgIEFTU0VS
VF9UUlVFKHJlZmVycmVyVVJMLnN0cmluZygpLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoQWRDbGlj
a0F0dHJpYnV0aW9uLCBJbnZhbGlkQ29udmVyc2lvbkRhdGEpCit7CisgICAgQWRDbGlja0F0dHJp
YnV0aW9uIGF0dHJpYnV0aW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q2FtcGFpZ24obWF4NkJpdFZh
bHVlKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpTb3VyY2UoIndlYmtpdC5vcmciKSwgQWRDbGlja0F0
dHJpYnV0aW9uOjpEZXN0aW5hdGlvbigiZXhhbXBsZS5jb20iKSk7CisgICAgYXR0cmlidXRpb24u
c2V0Q29udmVyc2lvbihBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb24oKG1heDZCaXRWYWx1
ZSArIDEpLCBBZENsaWNrQXR0cmlidXRpb246OlByaW9yaXR5KG1heDZCaXRWYWx1ZSkpKTsKKwor
ICAgIGF1dG8gYXR0cmlidXRpb25VUkwgPSBhdHRyaWJ1dGlvbi51cmwoKTsKKyAgICBhdXRvIHJl
ZmVycmVyVVJMID0gYXR0cmlidXRpb24ucmVmZXJyZXIoKTsKKworICAgIEFTU0VSVF9UUlVFKGF0
dHJpYnV0aW9uVVJMLnN0cmluZygpLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJy
ZXJVUkwuc3RyaW5nKCkuaXNFbXB0eSgpKTsKK30KKworVEVTVChBZENsaWNrQXR0cmlidXRpb24s
IEludmFsaWRQcmlvcml0eSkKK3sKKyAgICBBZENsaWNrQXR0cmlidXRpb24gYXR0cmlidXRpb24o
QWRDbGlja0F0dHJpYnV0aW9uOjpDYW1wYWlnbihtYXg2Qml0VmFsdWUpLCBBZENsaWNrQXR0cmli
dXRpb246OlNvdXJjZSgid2Via2l0Lm9yZyIpLCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0
aW9uKCJleGFtcGxlLmNvbSIpKTsKKyAgICBhdHRyaWJ1dGlvbi5zZXRDb252ZXJzaW9uKEFkQ2xp
Y2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihtYXg2Qml0VmFsdWUsIEFkQ2xpY2tBdHRyaWJ1dGlv
bjo6UHJpb3JpdHkobWF4NkJpdFZhbHVlICsgMSkpKTsKKworICAgIGF1dG8gYXR0cmlidXRpb25V
UkwgPSBhdHRyaWJ1dGlvbi51cmwoKTsKKyAgICBhdXRvIHJlZmVycmVyVVJMID0gYXR0cmlidXRp
b24ucmVmZXJyZXIoKTsKKworICAgIEFTU0VSVF9UUlVFKGF0dHJpYnV0aW9uVVJMLnN0cmluZygp
LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJyZXJVUkwuc3RyaW5nKCkuaXNFbXB0
eSgpKTsKK30KKworVEVTVChBZENsaWNrQXR0cmlidXRpb24sIEludmFsaWRNaXNzaW5nQ29udmVy
c2lvbikKK3sKKyAgICBBZENsaWNrQXR0cmlidXRpb24gYXR0cmlidXRpb24oQWRDbGlja0F0dHJp
YnV0aW9uOjpDYW1wYWlnbihtYXg2Qml0VmFsdWUpLCBBZENsaWNrQXR0cmlidXRpb246OlNvdXJj
ZSgid2Via2l0Lm9yZyIpLCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uKCJleGFtcGxl
LmNvbSIpKTsKKworICAgIGF1dG8gYXR0cmlidXRpb25VUkwgPSBhdHRyaWJ1dGlvbi51cmwoKTsK
KyAgICBhdXRvIHJlZmVycmVyVVJMID0gYXR0cmlidXRpb24ucmVmZXJyZXIoKTsKKworICAgIEFT
U0VSVF9UUlVFKGF0dHJpYnV0aW9uVVJMLnN0cmluZygpLmlzRW1wdHkoKSk7CisgICAgQVNTRVJU
X1RSVUUocmVmZXJyZXJVUkwuc3RyaW5nKCkuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlRfRkFMU0Uo
YXR0cmlidXRpb24uZWFybGllc3RUaW1lVG9TZW5kKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>