<?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>226803</bug_id>
          
          <creation_ts>2021-06-08 20:00:03 -0700</creation_ts>
          <short_desc>Avoid some calls to StringView::toString() / StringView::toStringWithoutCopying()</short_desc>
          <delta_ts>2021-06-09 13:47:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>achristensen</cc>
    
    <cc>apinheiro</cc>
    
    <cc>benjamin</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1768031</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-08 20:00:03 -0700</bug_when>
    <thetext>Avoid some calls to StringView::toString() / StringView::toStringWithoutCopying().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768033</commentid>
    <comment_count>1</comment_count>
      <attachid>430936</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-08 20:02:48 -0700</bug_when>
    <thetext>Created attachment 430936
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768190</commentid>
    <comment_count>2</comment_count>
      <attachid>430936</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-09 08:45:15 -0700</bug_when>
    <thetext>Comment on attachment 430936
Patch

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

&gt; Source/WTF/wtf/URL.cpp:559
&gt; +    if constexpr (std::is_same_v&lt;StringType, StringView&gt;)
&gt; +        return input.toString();
&gt; +    else
&gt; +        return input;

Another way to write this is:

    return makeString(input);

We would have to make sure it’s optimized well enough for the single argument StringView and String cases, but I think it’s better than writing the if statement.

&gt; Source/WTF/wtf/text/TextStream.h:71
&gt;      WTF_EXPORT_PRIVATE TextStream&amp; operator&lt;&lt;(const char*);

If we remove the const char* and String overloads rather than adding an AtomString one, will the StringView overload just be used instead? If so, would be nice to remove them.

Also would be good at some point to find a way to support everything that StringConcatenate does without having to write separate functions for each.

&gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:539
&gt; +    auto stringView = range.consumeIncludingWhitespace().value();

Do we really need to change the variable name?

&gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:3337
&gt; +    for (unsigned i = 0; i &lt; gridRowNames.length(); ++i) {

This should use a loop more like this:

    for (auto character : gridRowNames.codeUnits()) {

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:3566
&gt; +    return isPredefinedCounterStyle(nameToken.id()) ? AtomString { name.convertToASCIILowercase() } : name.toAtomString();

If this is hot enough, should consider a StringView::convertToASCIILowercaseAtom that optimizes the case for short strings at least, and goes directly to an AtomString rather than allocating and destroying a StringImpl if it happens to match an existing AtomString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768191</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-09 08:47:47 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 430936 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430936&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/URL.cpp:559
&gt; &gt; +    if constexpr (std::is_same_v&lt;StringType, StringView&gt;)
&gt; &gt; +        return input.toString();
&gt; &gt; +    else
&gt; &gt; +        return input;
&gt; 
&gt; Another way to write this is:
&gt; 
&gt;     return makeString(input);
&gt; 
&gt; We would have to make sure it’s optimized well enough for the single
&gt; argument StringView and String cases, but I think it’s better than writing
&gt; the if statement.

Will check.

&gt; 
&gt; &gt; Source/WTF/wtf/text/TextStream.h:71
&gt; &gt;      WTF_EXPORT_PRIVATE TextStream&amp; operator&lt;&lt;(const char*);
&gt; 
&gt; If we remove the const char* and String overloads rather than adding an
&gt; AtomString one, will the StringView overload just be used instead? If so,
&gt; would be nice to remove them.

I think I tried that. If I remember correctly, the compiler complained that it was ambiguous for String because it could use the overload taking a StringView or the one taking a bool :/

&gt; Also would be good at some point to find a way to support everything that
&gt; StringConcatenate does without having to write separate functions for each.
&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:539
&gt; &gt; +    auto stringView = range.consumeIncludingWhitespace().value();
&gt; 
&gt; Do we really need to change the variable name?

Probably not.

&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:3337
&gt; &gt; +    for (unsigned i = 0; i &lt; gridRowNames.length(); ++i) {
&gt; 
&gt; This should use a loop more like this:
&gt; 
&gt;     for (auto character : gridRowNames.codeUnits()) {

OK.
&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:3566
&gt; &gt; +    return isPredefinedCounterStyle(nameToken.id()) ? AtomString { name.convertToASCIILowercase() } : name.toAtomString();
&gt; 
&gt; If this is hot enough, should consider a
&gt; StringView::convertToASCIILowercaseAtom that optimizes the case for short
&gt; strings at least, and goes directly to an AtomString rather than allocating
&gt; and destroying a StringImpl if it happens to match an existing AtomString.

I&apos;ll check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768194</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-09 08:57:27 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 430936 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430936&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/URL.cpp:559
&gt; &gt; +    if constexpr (std::is_same_v&lt;StringType, StringView&gt;)
&gt; &gt; +        return input.toString();
&gt; &gt; +    else
&gt; &gt; +        return input;
&gt; 
&gt; Another way to write this is:
&gt; 
&gt;     return makeString(input);
&gt; 
&gt; We would have to make sure it’s optimized well enough for the single
&gt; argument StringView and String cases, but I think it’s better than writing
&gt; the if statement.

It doesn&apos;t seem like makeString() would currently work with a StringView parameter as I don&apos;t see a StringTypeAdapter for StringView. For String, the code is a little hard to follow but it really doesn&apos;t look like it is as efficient as ref&apos;ing the StringImpl. It looks to me that the implementation creates a new StringImpl and then asks the StringTypeAdapter to copy the characters into it.

&gt; 
&gt; &gt; Source/WTF/wtf/text/TextStream.h:71
&gt; &gt;      WTF_EXPORT_PRIVATE TextStream&amp; operator&lt;&lt;(const char*);
&gt; 
&gt; If we remove the const char* and String overloads rather than adding an
&gt; AtomString one, will the StringView overload just be used instead? If so,
&gt; would be nice to remove them.
&gt; 
&gt; Also would be good at some point to find a way to support everything that
&gt; StringConcatenate does without having to write separate functions for each.
&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:539
&gt; &gt; +    auto stringView = range.consumeIncludingWhitespace().value();
&gt; 
&gt; Do we really need to change the variable name?
&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:3337
&gt; &gt; +    for (unsigned i = 0; i &lt; gridRowNames.length(); ++i) {
&gt; 
&gt; This should use a loop more like this:
&gt; 
&gt;     for (auto character : gridRowNames.codeUnits()) {
&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:3566
&gt; &gt; +    return isPredefinedCounterStyle(nameToken.id()) ? AtomString { name.convertToASCIILowercase() } : name.toAtomString();
&gt; 
&gt; If this is hot enough, should consider a
&gt; StringView::convertToASCIILowercaseAtom that optimizes the case for short
&gt; strings at least, and goes directly to an AtomString rather than allocating
&gt; and destroying a StringImpl if it happens to match an existing AtomString.

(In reply to Chris Dumez from comment #3)
&gt; (In reply to Darin Adler from comment #2)
&gt; &gt; Comment on attachment 430936 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=430936&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/URL.cpp:559
&gt; &gt; &gt; +    if constexpr (std::is_same_v&lt;StringType, StringView&gt;)
&gt; &gt; &gt; +        return input.toString();
&gt; &gt; &gt; +    else
&gt; &gt; &gt; +        return input;
&gt; &gt; 
&gt; &gt; Another way to write this is:
&gt; &gt; 
&gt; &gt;     return makeString(input);
&gt; &gt; 
&gt; &gt; We would have to make sure it’s optimized well enough for the single
&gt; &gt; argument StringView and String cases, but I think it’s better than writing
&gt; &gt; the if statement.
&gt; 
&gt; Will check.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/text/TextStream.h:71
&gt; &gt; &gt;      WTF_EXPORT_PRIVATE TextStream&amp; operator&lt;&lt;(const char*);
&gt; &gt; 
&gt; &gt; If we remove the const char* and String overloads rather than adding an
&gt; &gt; AtomString one, will the StringView overload just be used instead? If so,
&gt; &gt; would be nice to remove them.
&gt; 
&gt; I think I tried that. If I remember correctly, the compiler complained that
&gt; it was ambiguous for String because it could use the overload taking a
&gt; StringView or the one taking a bool :/
&gt; 
&gt; &gt; Also would be good at some point to find a way to support everything that
&gt; &gt; StringConcatenate does without having to write separate functions for each.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:539
&gt; &gt; &gt; +    auto stringView = range.consumeIncludingWhitespace().value();
&gt; &gt; 
&gt; &gt; Do we really need to change the variable name?
&gt; 
&gt; Probably not.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:3337
&gt; &gt; &gt; +    for (unsigned i = 0; i &lt; gridRowNames.length(); ++i) {
&gt; &gt; 
&gt; &gt; This should use a loop more like this:
&gt; &gt; 
&gt; &gt;     for (auto character : gridRowNames.codeUnits()) {
&gt; 
&gt; OK.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:3566
&gt; &gt; &gt; +    return isPredefinedCounterStyle(nameToken.id()) ? AtomString { name.convertToASCIILowercase() } : name.toAtomString();
&gt; &gt; 
&gt; &gt; If this is hot enough, should consider a
&gt; &gt; StringView::convertToASCIILowercaseAtom that optimizes the case for short
&gt; &gt; strings at least, and goes directly to an AtomString rather than allocating
&gt; &gt; and destroying a StringImpl if it happens to match an existing AtomString.
&gt; 
&gt; I&apos;ll check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768195</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-09 09:00:59 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 430936 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430936&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/URL.cpp:559
&gt; &gt; +    if constexpr (std::is_same_v&lt;StringType, StringView&gt;)
&gt; &gt; +        return input.toString();
&gt; &gt; +    else
&gt; &gt; +        return input;
&gt; 
&gt; Another way to write this is:
&gt; 
&gt;     return makeString(input);
&gt; 
&gt; We would have to make sure it’s optimized well enough for the single
&gt; argument StringView and String cases, but I think it’s better than writing
&gt; the if statement.
&gt; 
&gt; &gt; Source/WTF/wtf/text/TextStream.h:71
&gt; &gt;      WTF_EXPORT_PRIVATE TextStream&amp; operator&lt;&lt;(const char*);
&gt; 
&gt; If we remove the const char* and String overloads rather than adding an
&gt; AtomString one, will the StringView overload just be used instead? If so,
&gt; would be nice to remove them.
&gt; 
&gt; Also would be good at some point to find a way to support everything that
&gt; StringConcatenate does without having to write separate functions for each.
&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:539
&gt; &gt; +    auto stringView = range.consumeIncludingWhitespace().value();
&gt; 
&gt; Do we really need to change the variable name?
&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:3337
&gt; &gt; +    for (unsigned i = 0; i &lt; gridRowNames.length(); ++i) {
&gt; 
&gt; This should use a loop more like this:
&gt; 
&gt;     for (auto character : gridRowNames.codeUnits()) {
&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:3566
&gt; &gt; +    return isPredefinedCounterStyle(nameToken.id()) ? AtomString { name.convertToASCIILowercase() } : name.toAtomString();
&gt; 
&gt; If this is hot enough, should consider a
&gt; StringView::convertToASCIILowercaseAtom that optimizes the case for short
&gt; strings at least, and goes directly to an AtomString rather than allocating
&gt; and destroying a StringImpl if it happens to match an existing AtomString.

Do you mean that for strings that are short enough, we&apos;d iterate through it and optimize the case where the input StringView is already all lowercase?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768198</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-09 09:04:17 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #5)
&gt; (In reply to Darin Adler from comment #2)
&gt; &gt; Comment on attachment 430936 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=430936&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/URL.cpp:559
&gt; &gt; &gt; +    if constexpr (std::is_same_v&lt;StringType, StringView&gt;)
&gt; &gt; &gt; +        return input.toString();
&gt; &gt; &gt; +    else
&gt; &gt; &gt; +        return input;
&gt; &gt; 
&gt; &gt; Another way to write this is:
&gt; &gt; 
&gt; &gt;     return makeString(input);
&gt; &gt; 
&gt; &gt; We would have to make sure it’s optimized well enough for the single
&gt; &gt; argument StringView and String cases, but I think it’s better than writing
&gt; &gt; the if statement.
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/text/TextStream.h:71
&gt; &gt; &gt;      WTF_EXPORT_PRIVATE TextStream&amp; operator&lt;&lt;(const char*);
&gt; &gt; 
&gt; &gt; If we remove the const char* and String overloads rather than adding an
&gt; &gt; AtomString one, will the StringView overload just be used instead? If so,
&gt; &gt; would be nice to remove them.
&gt; &gt; 
&gt; &gt; Also would be good at some point to find a way to support everything that
&gt; &gt; StringConcatenate does without having to write separate functions for each.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:539
&gt; &gt; &gt; +    auto stringView = range.consumeIncludingWhitespace().value();
&gt; &gt; 
&gt; &gt; Do we really need to change the variable name?
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:3337
&gt; &gt; &gt; +    for (unsigned i = 0; i &lt; gridRowNames.length(); ++i) {
&gt; &gt; 
&gt; &gt; This should use a loop more like this:
&gt; &gt; 
&gt; &gt;     for (auto character : gridRowNames.codeUnits()) {
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:3566
&gt; &gt; &gt; +    return isPredefinedCounterStyle(nameToken.id()) ? AtomString { name.convertToASCIILowercase() } : name.toAtomString();
&gt; &gt; 
&gt; &gt; If this is hot enough, should consider a
&gt; &gt; StringView::convertToASCIILowercaseAtom that optimizes the case for short
&gt; &gt; strings at least, and goes directly to an AtomString rather than allocating
&gt; &gt; and destroying a StringImpl if it happens to match an existing AtomString.
&gt; 
&gt; Do you mean that for strings that are short enough, we&apos;d iterate through it
&gt; and optimize the case where the input StringView is already all lowercase?

Looks like the version in StringImpl has a similar optimization (without length restriction):
```
template&lt;StringImpl::CaseConvertType type, typename CharacterType&gt;
ALWAYS_INLINE Ref&lt;StringImpl&gt; StringImpl::convertASCIICase(StringImpl&amp; impl, const CharacterType* data, unsigned length)
{
    unsigned failingIndex;
    for (unsigned i = 0; i &lt; length; ++i) {
        CharacterType character = data[i];
        if (type == CaseConvertType::Lower ? UNLIKELY(isASCIIUpper(character)) : LIKELY(isASCIILower(character))) {
            failingIndex = i;
            goto SlowPath;
        }
    }
    return impl;

SlowPath:
    CharacterType* newData;
    auto newImpl = createUninitializedInternalNonEmpty(length, newData);
    copyCharacters(newData, data, failingIndex);
    for (unsigned i = failingIndex; i &lt; length; ++i)
        newData[i] = type == CaseConvertType::Lower ? toASCIILower(data[i]) : toASCIIUpper(data[i]);
    return newImpl;
}
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768207</commentid>
    <comment_count>7</comment_count>
      <attachid>430971</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-09 09:37:08 -0700</bug_when>
    <thetext>Created attachment 430971
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768243</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-09 11:12:10 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #4)
&gt; It doesn&apos;t seem like makeString() would currently work with a StringView
&gt; parameter as I don&apos;t see a StringTypeAdapter for StringView.

It definitely works. StringTypeAdapter&lt;StringView&gt; is in StringView.h, not StringConcatenate.h.

&gt; For String, the
&gt; code is a little hard to follow but it really doesn&apos;t look like it is as
&gt; efficient as ref&apos;ing the StringImpl. It looks to me that the implementation
&gt; creates a new StringImpl and then asks the StringTypeAdapter to copy the
&gt; characters into it.

Yes, I was talking about optimizing that case, not expecting that it was already optimized. We could and should optimize makeString when called with a single String or single StringView, to make it more useful for generic programming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768244</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-09 11:15:14 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #5)
&gt; Do you mean that for strings that are short enough, we&apos;d iterate through it
&gt; and optimize the case where the input StringView is already all lowercase?

The point here is to avoid allocating a new StringImpl when there is already an AtomStringImpl with the correct characters. Presumably the reason we are using AtomString is that such duplication happens and we want to save memory when it does, but it’s also nice to save the extra work from allocating/deallocating in that case.

Yes, when the characters already don’t contain any uppercase ASCII, we can just look up the AtomString without even copying characters. That’s what you are talking about above.

But there is another case we could optimize: when the string is short enough, we could copy the lowercased characters into a fixed size buffer without allocating anything on the heap, and then look up the AtomString without allocating/destroying memory on the heap if the string happens to already exist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768326</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-09 13:46:31 -0700</bug_when>
    <thetext>Committed r278669 (238651@main): &lt;https://commits.webkit.org/238651@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430971.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768327</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-09 13:47:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/79096267&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430936</attachid>
            <date>2021-06-08 20:02:48 -0700</date>
            <delta_ts>2021-06-09 09:37:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226803-20210608200247.patch</filename>
            <type>text/plain</type>
            <size>37728</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NjM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI1OWMxNmU4MjkxMGZkNmE3YTEyYjlj
OTljMGExMDU5ODlkYWI3ZjcuLmMzY2NkOGZjZmI4MTJiYThkMTE4N2EyOWY3YzJhY2QwZmJmZDNi
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDYtMDggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBBdm9pZCBzb21lIGNhbGxzIHRvIFN0cmluZ1ZpZXc6OnRv
U3RyaW5nKCkgLyBTdHJpbmdWaWV3Ojp0b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjgwMworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IHRvIFRl
eHRTdHJlYW0gZm9yIHByaW50aW5nIGEgU3RyaW5nVmlldyBkaXJlY3RseSwgd2l0aG91dCBoYXZp
bmcgdG8gY29udmVydAorICAgICAgICBpdCB0byBhIFN0cmluZyBmaXJzdC4KKworICAgICAgICAq
IHd0Zi90ZXh0L1RleHRTdHJlYW0uY3BwOgorICAgICAgICAoV1RGOjpUZXh0U3RyZWFtOjpvcGVy
YXRvcjw8KToKKyAgICAgICAgKiB3dGYvdGV4dC9UZXh0U3RyZWFtLmg6CisKIDIwMjEtMDYtMDgg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFtQYXltZW50IFJl
cXVlc3RdIHVwc3RyZWFtIG5ldyBmZWF0dXJlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGVmYTY4MWNkYjE5MTlk
ZjQyODE5YWRlYWUzZWVmOWZlMTQ4MDcxMWEuLjdjMzY2M2UwZWYyNmRjOTBjYzM5OGU2YTk1OGFl
YjgxNWYzNDg3OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAyMS0wNi0wOCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEF2b2lkIHNvbWUgY2FsbHMg
dG8gU3RyaW5nVmlldzo6dG9TdHJpbmcoKSAvIFN0cmluZ1ZpZXc6OnRvU3RyaW5nV2l0aG91dENv
cHlpbmcoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI2ODAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN1bWVGb250VmFyaWF0aW9uVGFnKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFRvRnJhZ21lbnRJbnRlcm5hbCk6Cisg
ICAgICAgICogcGxhdGZvcm0vdGV4dC9oeXBoZW4vSHlwaGVuYXRpb25MaWJIeXBoZW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bGFzdEh5cGhlbkxvY2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZURlYnVnSW5m
byk6CisKIDIwMjEtMDYtMDggIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTVNFXSBBc3NlcnRpb24gaWYgYXR0ZW1wdGluZyB0byBwZXJmb3JtIGV2aWN0aW9u
IGJlZm9yZSBwbGF5YmFjayBzdGFydHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9VUkwu
Y3BwIGIvU291cmNlL1dURi93dGYvVVJMLmNwcAppbmRleCBlMmU5Y2JmNjVjMDkxY2U4MWVjMmJm
MjA5N2Q0MjUxNjI5NDczNzQ0Li4yOTExZjUxODFiYTQzNTBhODEzYjI0ODY4Yjc4NWNiYmIwMWM2
ZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9VUkwuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1VSTC5jcHAKQEAgLTM3OCw3ICszNzgsNyBAQCBib29sIFVSTDo6c2V0UHJvdG9jb2woU3Ry
aW5nVmlldyBuZXdQcm90b2NvbCkKIHsKICAgICAvLyBGaXJlZm94IGFuZCBJRSByZW1vdmUgZXZl
cnl0aGluZyBhZnRlciB0aGUgZmlyc3QgJzonLgogICAgIGF1dG8gbmV3UHJvdG9jb2xQcmVmaXgg
PSBuZXdQcm90b2NvbC5zdWJzdHJpbmcoMCwgbmV3UHJvdG9jb2wuZmluZCgnOicpKTsKLSAgICBh
dXRvIG5ld1Byb3RvY29sQ2Fub25pY2FsaXplZCA9IFVSTFBhcnNlcjo6bWF5YmVDYW5vbmljYWxp
emVTY2hlbWUobmV3UHJvdG9jb2xQcmVmaXgudG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKKyAg
ICBhdXRvIG5ld1Byb3RvY29sQ2Fub25pY2FsaXplZCA9IFVSTFBhcnNlcjo6bWF5YmVDYW5vbmlj
YWxpemVTY2hlbWUobmV3UHJvdG9jb2xQcmVmaXgpOwogICAgIGlmICghbmV3UHJvdG9jb2xDYW5v
bmljYWxpemVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUyOSw5ICs1MjksMTAgQEAg
dm9pZCBVUkw6OnNldEhvc3RBbmRQb3J0KFN0cmluZ1ZpZXcgaG9zdEFuZFBvcnQpCiAgICAgKSk7
CiB9CiAKLXN0YXRpYyBTdHJpbmcgcGVyY2VudEVuY29kZUNoYXJhY3RlcnMoY29uc3QgU3RyaW5n
JiBpbnB1dCwgYm9vbCgqc2hvdWxkRW5jb2RlKShVQ2hhcikpCit0ZW1wbGF0ZTx0eXBlbmFtZSBT
dHJpbmdUeXBlPgorc3RhdGljIFN0cmluZyBwZXJjZW50RW5jb2RlQ2hhcmFjdGVycyhjb25zdCBT
dHJpbmdUeXBlJiBpbnB1dCwgYm9vbCgqc2hvdWxkRW5jb2RlKShVQ2hhcikpCiB7Ci0gICAgYXV0
byBlbmNvZGUgPSBbc2hvdWxkRW5jb2RlXSAoY29uc3QgU3RyaW5nJiBpbnB1dCkgeworICAgIGF1
dG8gZW5jb2RlID0gW3Nob3VsZEVuY29kZV0gKGNvbnN0IFN0cmluZ1R5cGUmIGlucHV0KSB7CiAg
ICAgICAgIENTdHJpbmcgdXRmOCA9IGlucHV0LnV0ZjgoKTsKICAgICAgICAgYXV0byogZGF0YSA9
IHV0ZjguZGF0YSgpOwogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CkBAIC01NTIsNyAr
NTUzLDEwIEBAIHN0YXRpYyBTdHJpbmcgcGVyY2VudEVuY29kZUNoYXJhY3RlcnMoY29uc3QgU3Ry
aW5nJiBpbnB1dCwgYm9vbCgqc2hvdWxkRW5jb2RlKShVCiAgICAgICAgIGlmIChVTkxJS0VMWShz
aG91bGRFbmNvZGUoaW5wdXRbaV0pKSkKICAgICAgICAgICAgIHJldHVybiBlbmNvZGUoaW5wdXQp
OwogICAgIH0KLSAgICByZXR1cm4gaW5wdXQ7CisgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3Nh
bWVfdjxTdHJpbmdUeXBlLCBTdHJpbmdWaWV3PikKKyAgICAgICAgcmV0dXJuIGlucHV0LnRvU3Ry
aW5nKCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gaW5wdXQ7CiB9CiAKIHZvaWQgVVJMOjpw
YXJzZShjb25zdCBTdHJpbmcmIHN0cmluZykKQEAgLTU4NCw3ICs1ODgsNyBAQCB2b2lkIFVSTDo6
c2V0VXNlcihTdHJpbmdWaWV3IG5ld1VzZXIpCiAgICAgICAgIHBhcnNlKG1ha2VTdHJpbmcoCiAg
ICAgICAgICAgICBTdHJpbmdWaWV3KG1fc3RyaW5nKS5sZWZ0KG1fdXNlclN0YXJ0KSwKICAgICAg
ICAgICAgIHNsYXNoU2xhc2hOZWVkZWQgPyAiLy8iIDogIiIsCi0gICAgICAgICAgICBwZXJjZW50
RW5jb2RlQ2hhcmFjdGVycyhuZXdVc2VyLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgVVJMUGFy
c2VyOjppc0luVXNlckluZm9FbmNvZGVTZXQpLAorICAgICAgICAgICAgcGVyY2VudEVuY29kZUNo
YXJhY3RlcnMobmV3VXNlciwgVVJMUGFyc2VyOjppc0luVXNlckluZm9FbmNvZGVTZXQpLAogICAg
ICAgICAgICAgbmVlZFNlcGFyYXRvciA/ICJAIiA6ICIiLAogICAgICAgICAgICAgU3RyaW5nVmll
dyhtX3N0cmluZykuc3Vic3RyaW5nKGVuZCkKICAgICAgICAgKSk7CkBAIC02MDYsNyArNjEwLDcg
QEAgdm9pZCBVUkw6OnNldFBhc3N3b3JkKFN0cmluZ1ZpZXcgbmV3UGFzc3dvcmQpCiAgICAgICAg
IHBhcnNlKG1ha2VTdHJpbmcoCiAgICAgICAgICAgICBTdHJpbmdWaWV3KG1fc3RyaW5nKS5sZWZ0
KG1fdXNlckVuZCksCiAgICAgICAgICAgICBuZWVkTGVhZGluZ1NsYXNoZXMgPyAiLy86IiA6ICI6
IiwKLSAgICAgICAgICAgIHBlcmNlbnRFbmNvZGVDaGFyYWN0ZXJzKG5ld1Bhc3N3b3JkLnRvU3Ry
aW5nV2l0aG91dENvcHlpbmcoKSwgVVJMUGFyc2VyOjppc0luVXNlckluZm9FbmNvZGVTZXQpLAor
ICAgICAgICAgICAgcGVyY2VudEVuY29kZUNoYXJhY3RlcnMobmV3UGFzc3dvcmQsIFVSTFBhcnNl
cjo6aXNJblVzZXJJbmZvRW5jb2RlU2V0KSwKICAgICAgICAgICAgICdAJywKICAgICAgICAgICAg
IFN0cmluZ1ZpZXcobV9zdHJpbmcpLnN1YnN0cmluZyhjcmVkZW50aWFsc0VuZCgpKQogICAgICAg
ICApKTsKQEAgLTY3MCw3ICs2NzQsNyBAQCBzdGF0aWMgU3RyaW5nIGVzY2FwZVBhdGhXaXRob3V0
Q29weWluZyhTdHJpbmdWaWV3IHBhdGgpCiAgICAgYXV0byBxdWVzdGlvbk1hcmtPck51bWJlclNp
Z25Pck5vbkFTQ0lJID0gW10gKFVDaGFyIGNoYXJhY3RlcikgewogICAgICAgICByZXR1cm4gY2hh
cmFjdGVyID09ICc/JyB8fCBjaGFyYWN0ZXIgPT0gJyMnIHx8ICFpc0FTQ0lJKGNoYXJhY3Rlcik7
CiAgICAgfTsKLSAgICByZXR1cm4gcGVyY2VudEVuY29kZUNoYXJhY3RlcnMocGF0aC50b1N0cmlu
Z1dpdGhvdXRDb3B5aW5nKCksIHF1ZXN0aW9uTWFya09yTnVtYmVyU2lnbk9yTm9uQVNDSUkpOwor
ICAgIHJldHVybiBwZXJjZW50RW5jb2RlQ2hhcmFjdGVycyhwYXRoLCBxdWVzdGlvbk1hcmtPck51
bWJlclNpZ25Pck5vbkFTQ0lJKTsKIH0KIAogdm9pZCBVUkw6OnNldFBhdGgoU3RyaW5nVmlldyBw
YXRoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVVJMUGFyc2VyLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL1VSTFBhcnNlci5jcHAKaW5kZXggMDA2NzlhZTQ5Y2U1OGI5ZTRjNjQwZDhjMzU4ODI1
YzllZTkxZTAxOS4uZTRiOWMzNDQ0NjZiZjQyZmNlY2VkZjU4ZmVjMTMwNjEyMTI4NzhkOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvVVJMUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9VUkxQYXJzZXIuY3BwCkBAIC02OTgsNyArNjk4LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMg
U2NoZW1lIHNjaGVtZShTdHJpbmdWaWV3IHNjaGVtZSkKICAgICB9CiB9CiAKLXN0ZDo6b3B0aW9u
YWw8U3RyaW5nPiBVUkxQYXJzZXI6Om1heWJlQ2Fub25pY2FsaXplU2NoZW1lKGNvbnN0IFN0cmlu
ZyYgc2NoZW1lKQorc3RkOjpvcHRpb25hbDxTdHJpbmc+IFVSTFBhcnNlcjo6bWF5YmVDYW5vbmlj
YWxpemVTY2hlbWUoU3RyaW5nVmlldyBzY2hlbWUpCiB7CiAgICAgaWYgKHNjaGVtZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9VUkxQYXJzZXIuaCBiL1NvdXJjZS9XVEYvd3RmL1VSTFBhcnNlci5oCmluZGV4IDA4YzMx
NTgyYzFjZWY5NWRkZDE0M2UyNzZkNDk1MjI1NDI2MjQwOGIuLjU5ZTg3MmVmZWQ4NjMxNGUxOTBi
ZDk2ZjAzMDJiOTRkMjhhOThiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1VSTFBhcnNl
ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1VSTFBhcnNlci5oCkBAIC00Niw3ICs0Niw3IEBAIHB1
YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBzZXJpYWxpemUoY29u
c3QgVVJMRW5jb2RlZEZvcm0mKTsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBpc1NwZWNpYWxTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpOwotICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG1heWJlQ2Fub25pY2FsaXplU2No
ZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBtYXliZUNhbm9uaWNhbGl6ZVNjaGVtZShTdHJpbmdWaWV3
IHNjaGVtZSk7CiAKICAgICBzdGF0aWMgY29uc3QgVUlETkEmIGludGVybmF0aW9uYWxEb21haW5O
YW1lVHJhbnNjb2RlcigpOwogICAgIHN0YXRpYyBib29sIGlzSW5Vc2VySW5mb0VuY29kZVNldChV
Q2hhcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRTdHJlYW0uY3BwIGIv
U291cmNlL1dURi93dGYvdGV4dC9UZXh0U3RyZWFtLmNwcAppbmRleCA5MGRhOTYzMzBiYzU2OGI0
NDE0ZTU1MzUwMmUwZDljMzBmMTY2YTFlLi41YWQzN2RmMDQ3NzE3Y2E1YTRhOGNmYTY0NTdhNjUw
YzE1MmMwZTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRTdHJlYW0uY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvVGV4dFN0cmVhbS5jcHAKQEAgLTExOCwxMiArMTE4
LDI0IEBAIFRleHRTdHJlYW0mIFRleHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3Qgdm9pZCogcCkK
ICAgICByZXR1cm4gKnRoaXMgPDwgYnVmZmVyOwogfQogCitUZXh0U3RyZWFtJiBUZXh0U3RyZWFt
OjpvcGVyYXRvcjw8KGNvbnN0IEF0b21TdHJpbmcmIHN0cmluZykKK3sKKyAgICBtX3RleHQuYXBw
ZW5kKHN0cmluZyk7CisgICAgcmV0dXJuICp0aGlzOworfQorCiBUZXh0U3RyZWFtJiBUZXh0U3Ry
ZWFtOjpvcGVyYXRvcjw8KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIG1fdGV4dC5hcHBl
bmQoc3RyaW5nKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKK1RleHRTdHJlYW0mIFRleHRTdHJl
YW06Om9wZXJhdG9yPDwoU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgbV90ZXh0LmFwcGVuZChz
dHJpbmcpOworICAgIHJldHVybiAqdGhpczsKK30KKwogVGV4dFN0cmVhbSYgVGV4dFN0cmVhbTo6
b3BlcmF0b3I8PChjb25zdCBGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMmIG51bWJlclRv
Rm9ybWF0KQogewogICAgIGlmIChoYXNGcmFjdGlvbnMobnVtYmVyVG9Gb3JtYXQudmFsdWUpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRTdHJlYW0uaCBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvVGV4dFN0cmVhbS5oCmluZGV4IDE5YTQ4ZDRkOGQ0ZDQ2NGU2YjA2YWM4MTZk
ZTdmMzEyOTg1ODkzMzQuLjQwZmQ1YWI1NTAxZjMwYWFhOWFmODUwODI5MzBhMzhjZjUyZjE5MWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvVGV4dFN0cmVhbS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvVGV4dFN0cmVhbS5oCkBAIC03MCw3ICs3MCw5IEBAIHB1YmxpYzoKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChkb3VibGUpOwogICAg
IFdURl9FWFBPUlRfUFJJVkFURSBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIqKTsK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB2b2lk
Kik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qg
QXRvbVN0cmluZyYpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KGNvbnN0IFN0cmluZyYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFN0cmluZ1ZpZXcpOwogICAgIC8vIERlcHJlY2F0ZWQuIFVzZSB0aGUgTnVtYmVy
UmVzcGVjdGluZ0ludGVnZXJzIEZvcm1hdHRpbmdGbGFnIGluc3RlYWQuCiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgRm9ybWF0TnVtYmVyUmVzcGVj
dGluZ0ludGVnZXJzJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2Fj
aGUvRE9NQ2FjaGVFbmdpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01D
YWNoZUVuZ2luZS5jcHAKaW5kZXggNzgyYjI2MmY0ODc0MTkzODJhNzQ1MDEwMzIzZTMzNTIyYTc1
NjU1OC4uYzQ2ZDY0MDk1NTU1ODRlNTg4ODA3MzgyZDQ1N2ZkNzk5YzYyZDM5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZUVuZ2luZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZUVuZ2luZS5jcHAKQEAgLTk5LDcg
Kzk5LDcgQEAgYm9vbCBxdWVyeUNhY2hlTWF0Y2goY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGNhY2gKICAgICAgICAgICAgIGlzVmFyeWluZyA9
IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgYXV0byBuYW1l
ID0gbmFtZVZpZXcudG9TdHJpbmcoKTsKKyAgICAgICAgYXV0byBuYW1lID0gbmFtZVZpZXcudG9T
dHJpbmdXaXRob3V0Q29weWluZygpOwogICAgICAgICBpc1ZhcnlpbmcgPSBjYWNoZWRSZXF1ZXN0
Lmh0dHBIZWFkZXJGaWVsZChuYW1lKSAhPSByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZChuYW1lKTsK
ICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRj
aEJvZHlDb25zdW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9k
eUNvbnN1bWVyLmNwcAppbmRleCA2MDY0NGJmOTk0MTlmYjM3NzYwZDBmY2JiYzZhMDg2ZTc3NTA5
OTk0Li4wNjkwODExNThmZTI1NWVmYTg2MzI0ZTIzMWZhMjEzYjYyMWYwZDcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keUNvbnN1bWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keUNvbnN1bWVyLmNwcApAQCAt
OTgsOSArOTgsNyBAQCBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyc2VQYXJhbWV0
ZXJzKFN0cmluZ1ZpZXcgaW5wdXQsIHNpemVfdCBwb3NpdGlvbgogICAgICAgICBpZiAocGFyYW1l
dGVyTmFtZS5sZW5ndGgoKQogICAgICAgICAgICAgJiYgaXNWYWxpZEhUVFBUb2tlbihwYXJhbWV0
ZXJOYW1lKQogICAgICAgICAgICAgJiYgcGFyYW1ldGVyVmFsdWUuaXNBbGxTcGVjaWFsQ2hhcmFj
dGVyczxpc0hUVFBRdW90ZWRTdHJpbmdUb2tlbkNvZGVQb2ludD4oKSkgewotICAgICAgICAgICAg
U3RyaW5nIG5hbWVTdHJpbmcgPSBwYXJhbWV0ZXJOYW1lLnRvU3RyaW5nKCk7Ci0gICAgICAgICAg
ICBpZiAoIXBhcmFtZXRlcnMuY29udGFpbnMobmFtZVN0cmluZykpCi0gICAgICAgICAgICAgICAg
cGFyYW1ldGVycy5zZXQobmFtZVN0cmluZywgcGFyYW1ldGVyVmFsdWUudG9TdHJpbmcoKSk7Cisg
ICAgICAgICAgICBwYXJhbWV0ZXJzLmVuc3VyZShwYXJhbWV0ZXJOYW1lLnRvU3RyaW5nKCksIFsm
XSB7IHJldHVybiBwYXJhbWV0ZXJWYWx1ZS50b1N0cmluZygpOyB9KTsKICAgICAgICAgfQogICAg
IH0KICAgICByZXR1cm4gcGFyYW1ldGVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IGRkNTA0
NTI4N2NiMTMyYmM0MzJhZTJlOTZmMzkxODZhOWE4YmY2YTUuLjQxM2EyNDdkOGJjYTgzZTkxNjcy
ODliMmNiZTlhZjVkMWYyZThkNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMTAwNCw3ICsx
MDA0LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
aW50ZXJuYWxMaW5rRWxlbWVudCgpIGNvbnN0CiAgICAgaWYgKCFlcXVhbElnbm9yaW5nRnJhZ21l
bnRJZGVudGlmaWVyKGRvY3VtZW50VVJMLCBsaW5rVVJMKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBhdXRvIGxpbmtlZE5vZGUgPSBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLmZpbmRB
bmNob3IoZnJhZ21lbnRJZGVudGlmaWVyLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7CisgICAg
YXV0byBsaW5rZWROb2RlID0gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKS5maW5kQW5jaG9yKGZyYWdt
ZW50SWRlbnRpZmllcik7CiAgICAgaWYgKCFsaW5rZWROb2RlKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
LmNwcAppbmRleCA2ODQ1MjM3ODY5MzI2MDg2Y2JjYWUwZWQ5NGRiYzNhNTZkZWI1MmY1Li41YWRm
ODQ5MDgxM2ZkNTBiOTkwN2YyOTkwNGYzODYwMTlkODRlMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcApAQCAtNTM2LDE0ICs1MzYsMTQg
QEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYXRpb25UYWcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gU3Ry
aW5nVG9rZW4pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIGF1dG8gc3RyaW5n
ID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgpLnRvU3RyaW5nKCk7
CisgICAgYXV0byBzdHJpbmdWaWV3ID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2Uo
KS52YWx1ZSgpOwogICAgIAogICAgIEZvbnRUYWcgdGFnOwotICAgIGlmIChzdHJpbmcubGVuZ3Ro
KCkgIT0gdGFnLnNpemUoKSkKKyAgICBpZiAoc3RyaW5nVmlldy5sZW5ndGgoKSAhPSB0YWcuc2l6
ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdGFnLnNpemUoKTsgKytpKSB7CiAgICAgICAgIC8vIExpbWl0cyB0aGUgcmFuZ2Ugb2YgY2hh
cmFjdGVycyB0byAweDIwLTB4N0UsIGZvbGxvd2luZyB0aGUgdGFnIG5hbWUgcnVsZXMgZGVmaWVu
ZCBpbiB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbi4KLSAgICAgICAgVUNoYXIgY2hhcmFjdGVy
ID0gc3RyaW5nW2ldOworICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBzdHJpbmdWaWV3W2ldOwog
ICAgICAgICBpZiAoY2hhcmFjdGVyIDwgMHgyMCB8fCBjaGFyYWN0ZXIgPiAweDdFKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHRhZ1tpXSA9IGNoYXJhY3RlcjsKQEAgLTMz
MjksMjMgKzMzMjksMjAgQEAgc3RhdGljIGJvb2wgaXNHcmlkVHJhY2tGaXhlZFNpemVkKGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4gaXNHcmlkVHJhY2tGaXhlZFNpemVkKCptaW5Q
cmltaXRpdmVWYWx1ZSkgfHwgaXNHcmlkVHJhY2tGaXhlZFNpemVkKCptYXhQcmltaXRpdmVWYWx1
ZSk7CiB9CiAKLXN0YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXJzZUdyaWRUZW1wbGF0ZUFyZWFzQ29s
dW1uTmFtZXMoY29uc3QgU3RyaW5nJiBncmlkUm93TmFtZXMpCitzdGF0aWMgVmVjdG9yPFN0cmlu
Zz4gcGFyc2VHcmlkVGVtcGxhdGVBcmVhc0NvbHVtbk5hbWVzKFN0cmluZ1ZpZXcgZ3JpZFJvd05h
bWVzKQogewogICAgIEFTU0VSVCghZ3JpZFJvd05hbWVzLmlzRW1wdHkoKSk7CiAgICAgVmVjdG9y
PFN0cmluZz4gY29sdW1uTmFtZXM7Ci0gICAgLy8gVXNpbmcgU3RyaW5nSW1wbCB0byBhdm9pZCBj
aGVja3MgYW5kIGluZGlyZWN0aW9uIGluIGV2ZXJ5IGNhbGwgdG8gU3RyaW5nOjpvcGVyYXRvcltd
LgotICAgIFN0cmluZ0ltcGwmIHRleHQgPSAqZ3JpZFJvd05hbWVzLmltcGwoKTsKLQogICAgIFN0
cmluZ0J1aWxkZXIgYXJlYU5hbWU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHQu
bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAoaXNDU1NTcGFjZSh0ZXh0W2ldKSkgeworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBncmlkUm93TmFtZXMubGVuZ3RoKCk7ICsraSkgewor
ICAgICAgICBpZiAoaXNDU1NTcGFjZShncmlkUm93TmFtZXNbaV0pKSB7CiAgICAgICAgICAgICBp
ZiAoIWFyZWFOYW1lLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVzLmFw
cGVuZChhcmVhTmFtZS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBhcmVhTmFtZS5jbGVh
cigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKHRleHRbaV0gPT0gJy4nKSB7CisgICAgICAgIGlmIChncmlkUm93TmFtZXNbaV0g
PT0gJy4nKSB7CiAgICAgICAgICAgICBpZiAoYXJlYU5hbWUgPT0gIi4iKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFhcmVhTmFtZS5pc0VtcHR5KCkpIHsKQEAg
LTMzNTMsNyArMzM1MCw3IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXJzZUdyaWRUZW1wbGF0
ZUFyZWFzQ29sdW1uTmFtZXMoY29uc3QgU3RyaW5nJiBncmlkUm93TmFtCiAgICAgICAgICAgICAg
ICAgYXJlYU5hbWUuY2xlYXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGlmICghaXNOYW1lQ29kZVBvaW50KHRleHRbaV0pKQorICAgICAgICAgICAgaWYg
KCFpc05hbWVDb2RlUG9pbnQoZ3JpZFJvd05hbWVzW2ldKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gVmVjdG9yPFN0cmluZz4oKTsKICAgICAgICAgICAgIGlmIChhcmVhTmFtZSA9PSAiLiIpIHsK
ICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcy5hcHBlbmQoYXJlYU5hbWUudG9TdHJpbmcoKSk7
CkBAIC0zMzYxLDcgKzMzNTgsNyBAQCBzdGF0aWMgVmVjdG9yPFN0cmluZz4gcGFyc2VHcmlkVGVt
cGxhdGVBcmVhc0NvbHVtbk5hbWVzKGNvbnN0IFN0cmluZyYgZ3JpZFJvd05hbQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKLSAgICAgICAgYXJlYU5hbWUuYXBwZW5kKHRleHRbaV0pOworICAg
ICAgICBhcmVhTmFtZS5hcHBlbmQoZ3JpZFJvd05hbWVzW2ldKTsKICAgICB9CiAKICAgICBpZiAo
IWFyZWFOYW1lLmlzRW1wdHkoKSkKQEAgLTMzNzAsNyArMzM2Nyw3IEBAIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBwYXJzZUdyaWRUZW1wbGF0ZUFyZWFzQ29sdW1uTmFtZXMoY29uc3QgU3RyaW5nJiBn
cmlkUm93TmFtCiAgICAgcmV0dXJuIGNvbHVtbk5hbWVzOwogfQogCi1zdGF0aWMgYm9vbCBwYXJz
ZUdyaWRUZW1wbGF0ZUFyZWFzUm93KGNvbnN0IFN0cmluZyYgZ3JpZFJvd05hbWVzLCBOYW1lZEdy
aWRBcmVhTWFwJiBncmlkQXJlYU1hcCwgY29uc3Qgc2l6ZV90IHJvd0NvdW50LCBzaXplX3QmIGNv
bHVtbkNvdW50KQorc3RhdGljIGJvb2wgcGFyc2VHcmlkVGVtcGxhdGVBcmVhc1JvdyhTdHJpbmdW
aWV3IGdyaWRSb3dOYW1lcywgTmFtZWRHcmlkQXJlYU1hcCYgZ3JpZEFyZWFNYXAsIGNvbnN0IHNp
emVfdCByb3dDb3VudCwgc2l6ZV90JiBjb2x1bW5Db3VudCkKIHsKICAgICBpZiAoZ3JpZFJvd05h
bWVzLmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNDU1NTcGFjZT4oKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMzU5NSw3ICszNTkyLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUdyaWRUZW1wbGF0ZUFyZWFzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogICAgIHNp
emVfdCBjb2x1bW5Db3VudCA9IDA7CiAKICAgICB3aGlsZSAocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBTdHJpbmdUb2tlbikgewotICAgICAgICBpZiAoIXBhcnNlR3JpZFRlbXBsYXRlQXJlYXNSb3co
cmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgpLnRvU3RyaW5nKCksIGdy
aWRBcmVhTWFwLCByb3dDb3VudCwgY29sdW1uQ291bnQpKQorICAgICAgICBpZiAoIXBhcnNlR3Jp
ZFRlbXBsYXRlQXJlYXNSb3cocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1
ZSgpLCBncmlkQXJlYU1hcCwgcm93Q291bnQsIGNvbHVtbkNvdW50KSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICArK3Jvd0NvdW50OwogICAgIH0KQEAgLTU2MTEsNyArNTYw
OCw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVHcmlkVGVtcGxhdGVSb3dzQW5k
QXJlYXNBbmRDb2x1bW5zKENTU1Byb3BlcnR5SUQKICAgICAgICAgICAgIHRlbXBsYXRlUm93cy0+
YXBwZW5kKGxpbmVOYW1lcy5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICAvLyBIYW5kbGUg
YSB0ZW1wbGF0ZS1hcmVhJ3Mgcm93LgotICAgICAgICBpZiAobV9yYW5nZS5wZWVrKCkudHlwZSgp
ICE9IFN0cmluZ1Rva2VuIHx8ICFwYXJzZUdyaWRUZW1wbGF0ZUFyZWFzUm93KG1fcmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgpLnRvU3RyaW5nKCksIGdyaWRBcmVhTWFw
LCByb3dDb3VudCwgY29sdW1uQ291bnQpKQorICAgICAgICBpZiAobV9yYW5nZS5wZWVrKCkudHlw
ZSgpICE9IFN0cmluZ1Rva2VuIHx8ICFwYXJzZUdyaWRUZW1wbGF0ZUFyZWFzUm93KG1fcmFuZ2Uu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgpLCBncmlkQXJlYU1hcCwgcm93Q291
bnQsIGNvbHVtbkNvdW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgKyty
b3dDb3VudDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuY3BwCmluZGV4IDg2MDdiMDg0YTg0MjYwMGE0MjhmYTE1MjU5ZjBj
ZTI3NTNmZTA0MTIuLmZhNTk1NzIwMjFiZTA2Mzk3ZmE3Njc4ZTFmMjEzMWYwNTA1MDVhNjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHAKQEAgLTI0NDIsOSArMjQ0MiwxMSBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxT
UkdCQTx1aW50OF90Pj4gcGFyc2VIZXhDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
YgogICAgIGVsc2UgewogICAgICAgICBpZiAoIWFjY2VwdFF1aXJreUNvbG9ycykKICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gSWRl
bnRUb2tlbikKLSAgICAgICAgICAgIHN0cmluZyA9IHRva2VuLnZhbHVlKCkudG9TdHJpbmcoKTsg
Ly8gZS5nLiBGRjAwMDAKLSAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSgpID09IE51bWJlclRv
a2VuIHx8IHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbikgeworICAgICAgICBpZiAodG9r
ZW4udHlwZSgpID09IElkZW50VG9rZW4pIHsKKyAgICAgICAgICAgIHZpZXcgPSB0b2tlbi52YWx1
ZSgpOyAvLyBlLmcuIEZGMDAwMAorICAgICAgICAgICAgaWYgKHZpZXcubGVuZ3RoKCkgIT0gMyAm
JiB2aWV3Lmxlbmd0aCgpICE9IDYpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4gfHwgdG9r
ZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSB7CiAgICAgICAgICAgICBpZiAodG9rZW4ubnVt
ZXJpY1ZhbHVlVHlwZSgpICE9IEludGVnZXJWYWx1ZVR5cGUpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgICAgIGF1dG8gbnVtZXJpY1ZhbHVlID0gdG9rZW4u
bnVtZXJpY1ZhbHVlKCk7CkBAIC0yNDU3LDEwICsyNDU5LDEyIEBAIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZUhleENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBiCiAgICAgICAgICAgICAgICAgc3RyaW5nID0gbWFrZVN0cmluZyhpbnRlZ2VyVmFsdWUs
IHRva2VuLnZhbHVlKCkpOyAvLyBlLmcuIDAwMDFGRgogICAgICAgICAgICAgaWYgKHN0cmluZy5s
ZW5ndGgoKSA8IDYpCiAgICAgICAgICAgICAgICAgc3RyaW5nID0gbWFrZVN0cmluZygmIjAwMDAw
MCJbc3RyaW5nLmxlbmd0aCgpXSwgc3RyaW5nKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3Ry
aW5nLmxlbmd0aCgpICE9IDMgJiYgc3RyaW5nLmxlbmd0aCgpICE9IDYpCisKKyAgICAgICAgICAg
IGlmIChzdHJpbmcubGVuZ3RoKCkgIT0gMyAmJiBzdHJpbmcubGVuZ3RoKCkgIT0gNikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgdmlldyA9IHN0cmlu
ZzsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
ICAgICB2aWV3ID0gc3RyaW5nOwogICAgIH0KICAgICBhdXRvIHJlc3VsdCA9IENTU1BhcnNlcjo6
cGFyc2VIZXhDb2xvcih2aWV3KTsKICAgICBpZiAoIXJlc3VsdCkKQEAgLTM1NTksNyArMzU2Myw3
IEBAIEF0b21TdHJpbmcgY29uc3VtZUNvdW50ZXJTdHlsZU5hbWVJblByZWx1ZGUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcHJlbHVkZSkKICAgICBpZiAoaWRlbnRNYXRjaGVzPENTU1ZhbHVlRGVjaW1h
bCwgQ1NTVmFsdWVEaXNjLCBDU1NWYWx1ZU5vbmU+KG5hbWVUb2tlbi5pZCgpKSkKICAgICAgICAg
cmV0dXJuIEF0b21TdHJpbmcoKTsKICAgICBhdXRvIG5hbWUgPSBuYW1lVG9rZW4udmFsdWUoKTsK
LSAgICByZXR1cm4gaXNQcmVkZWZpbmVkQ291bnRlclN0eWxlKG5hbWVUb2tlbi5pZCgpKSA/IG5h
bWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IG5hbWUudG9TdHJpbmcoKTsKKyAgICByZXR1
cm4gaXNQcmVkZWZpbmVkQ291bnRlclN0eWxlKG5hbWVUb2tlbi5pZCgpKSA/IEF0b21TdHJpbmcg
eyBuYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgfSA6IG5hbWUudG9BdG9tU3RyaW5nKCk7
CiB9CiAKIHN0ZDo6b3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjFS
YXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVu
dC5jcHAKaW5kZXggOWZjZWU4NDYzOGU0OTllZjdmMTA5ZWM1MDY3MzQzNDkyMGEyMmI3NS4uN2Nl
MTM3ZDlhNjkwYTBjNjUyMGYyNWQwNThlNzM5MDU5OGJiMWJkZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFbGVtZW50LmNwcApAQCAtMzY4LDcgKzM2OCw3IEBAIGJvb2wgU2NyaXB0RWxlbWVudDo6
cmVxdWVzdE1vZHVsZVNjcmlwdChjb25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRp
b24pCiAgICAgQVNTRVJUKG1fZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGlj
eSgpKTsKICAgICBjb25zdCBhdXRvJiBjb250ZW50U2VjdXJpdHlQb2xpY3kgPSAqbV9lbGVtZW50
LmRvY3VtZW50KCkuY29udGVudFNlY3VyaXR5UG9saWN5KCk7CiAgICAgYm9vbCBoYXNLbm93bk5v
bmNlID0gY29udGVudFNlY3VyaXR5UG9saWN5LmFsbG93U2NyaXB0V2l0aE5vbmNlKG5vbmNlLCBt
X2VsZW1lbnQuaXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSk7Ci0gICAgaWYgKCFjb250ZW50U2Vj
dXJpdHlQb2xpY3kuYWxsb3dJbmxpbmVTY3JpcHQobV9lbGVtZW50LmRvY3VtZW50KCkudXJsKCku
c3RyaW5nKCksIG1fc3RhcnRMaW5lTnVtYmVyLCBzb3VyY2VDb2RlLnNvdXJjZSgpLnRvU3RyaW5n
V2l0aG91dENvcHlpbmcoKSwgaGFzS25vd25Ob25jZSkpCisgICAgaWYgKCFjb250ZW50U2VjdXJp
dHlQb2xpY3kuYWxsb3dJbmxpbmVTY3JpcHQobV9lbGVtZW50LmRvY3VtZW50KCkudXJsKCkuc3Ry
aW5nKCksIG1fc3RhcnRMaW5lTnVtYmVyLCBzb3VyY2VDb2RlLnNvdXJjZSgpLCBoYXNLbm93bk5v
bmNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9sb2FkYWJsZVNjcmlwdCA9IFdU
Rk1vdmUoc2NyaXB0KTsKQEAgLTM4OSw3ICszODksNyBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6OmV4
ZWN1dGVDbGFzc2ljU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiAg
ICAgICAgIEFTU0VSVChtX2VsZW1lbnQuZG9jdW1lbnQoKS5jb250ZW50U2VjdXJpdHlQb2xpY3ko
KSk7CiAgICAgICAgIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgY29udGVudFNlY3VyaXR5
UG9saWN5ID0gKm1fZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpOwog
ICAgICAgICBib29sIGhhc0tub3duTm9uY2UgPSBjb250ZW50U2VjdXJpdHlQb2xpY3kuYWxsb3dT
Y3JpcHRXaXRoTm9uY2UobV9lbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
SFRNTE5hbWVzOjpub25jZUF0dHIpLCBtX2VsZW1lbnQuaXNJblVzZXJBZ2VudFNoYWRvd1RyZWUo
KSk7Ci0gICAgICAgIGlmICghY29udGVudFNlY3VyaXR5UG9saWN5LmFsbG93SW5saW5lU2NyaXB0
KG1fZWxlbWVudC5kb2N1bWVudCgpLnVybCgpLnN0cmluZygpLCBtX3N0YXJ0TGluZU51bWJlciwg
c291cmNlQ29kZS5zb3VyY2UoKS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIGhhc0tub3duTm9u
Y2UpKQorICAgICAgICBpZiAoIWNvbnRlbnRTZWN1cml0eVBvbGljeS5hbGxvd0lubGluZVNjcmlw
dChtX2VsZW1lbnQuZG9jdW1lbnQoKS51cmwoKS5zdHJpbmcoKSwgbV9zdGFydExpbmVOdW1iZXIs
IHNvdXJjZUNvZGUuc291cmNlKCksIGhhc0tub3duTm9uY2UpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCmluZGV4IDMyZjI3ZmRk
ODYzY2YzOTU4NjdhZjM4M2MzYmVlODc2NGJlNDYzNTIuLjM5NGEwYTdjZjIwNjZmODg5NWI3YWE1
OTY3Nzg1NGJhNTc5MTU2NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKQEAg
LTE5Niw3ICsxOTYsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnN0eWxlQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBBdG9tU3RyaW5nJiBuZXdTdHlsZVN0cmluZywgQXR0cgogICAgIGlmIChkb2N1bWVu
dCgpLnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpICYmICFkb2N1bWVudCgpLmlzSW5Eb2N1bWVu
dFdyaXRlKCkpCiAgICAgICAgIHN0YXJ0TGluZU51bWJlciA9IGRvY3VtZW50KCkuc2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyKCktPnRleHRQb3NpdGlvbigpLm1fbGluZTsKIAotICAgIGlmIChyZWFz
b24gPT0gTW9kaWZpZWRCeUNsb25pbmcgfHwgZG9jdW1lbnQoKS5jb250ZW50U2VjdXJpdHlQb2xp
Y3koKS0+YWxsb3dJbmxpbmVTdHlsZShkb2N1bWVudCgpLnVybCgpLnN0cmluZygpLCBzdGFydExp
bmVOdW1iZXIsIFN0cmluZygpLCBpc0luVXNlckFnZW50U2hhZG93VHJlZSgpKSkKKyAgICBpZiAo
cmVhc29uID09IE1vZGlmaWVkQnlDbG9uaW5nIHx8IGRvY3VtZW50KCkuY29udGVudFNlY3VyaXR5
UG9saWN5KCktPmFsbG93SW5saW5lU3R5bGUoZG9jdW1lbnQoKS51cmwoKS5zdHJpbmcoKSwgc3Rh
cnRMaW5lTnVtYmVyLCB7IH0sIGlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpKQogICAgICAgICBz
ZXRJbmxpbmVTdHlsZUZyb21TdHJpbmcobmV3U3R5bGVTdHJpbmcpOwogCiAgICAgZWxlbWVudERh
dGEoKS0+c2V0U3R5bGVBdHRyaWJ1dGVJc0RpcnR5KGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29w
ZS5jcHAKaW5kZXggMWVjYjM2ZTg4MDcxZWIxYzhiOTNjZjBkODcxNDhhNTEwZTVmY2M2My4uOGY2
YzQ3ZjhjZDY4ZWZmYTA5OTI0NmMwMDEwNTI2NTkyYWI0ZWI2MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVT
Y29wZS5jcHAKQEAgLTQ0Myw3ICs0NDMsNyBAQCBWZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiBUcmVl
U2NvcGU6OmVsZW1lbnRzRnJvbVBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCiAKIC8vIEZJWE1F
OiBXb3VsZCBiZSBuaWNlIHRvIGNoYW5nZSB0aGlzIHRvIHRha2UgYSBTdHJpbmdWaWV3LCBzaW5j
ZSB0aGF0J3Mgd2hhdCBjYWxsZXJzIGhhdmUKIC8vIGFuZCB0aGVyZSBpcyBubyBwYXJ0aWN1bGFy
IGFkdmFudGFnZSB0byBhbHJlYWR5IGhhdmluZyBhIFN0cmluZy4KLUVsZW1lbnQqIFRyZWVTY29w
ZTo6ZmluZEFuY2hvcihjb25zdCBTdHJpbmcmIG5hbWUpCitFbGVtZW50KiBUcmVlU2NvcGU6OmZp
bmRBbmNob3IoU3RyaW5nVmlldyBuYW1lKQogewogICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKaW5kZXggOTJiMmM0ODZk
OWFjY2UyNTM2ZGNiYWZhNGNkZjUwMDEwZjQ3MTM2ZS4uZDg0Njk5NGIzYWY5M2QzODU1ZTdiOTJl
NmFkYjhmODk1ZmJjOTBhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29w
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaApAQCAtMTA0LDcgKzEwNCw3
IEBAIHB1YmxpYzoKICAgICAvLyBmb3IgYW4gYW5jaG9yIHdpdGggdGhlIGdpdmVuIG5hbWUuIElE
IG1hdGNoaW5nIGlzIGFsd2F5cyBjYXNlIHNlbnNpdGl2ZSwgYnV0CiAgICAgLy8gQW5jaG9yIG5h
bWUgbWF0Y2hpbmcgaXMgY2FzZSBzZW5zaXRpdmUgaW4gc3RyaWN0IG1vZGUgYW5kIG5vdCBjYXNl
IHNlbnNpdGl2ZSBpbgogICAgIC8vIHF1aXJrcyBtb2RlIGZvciBoaXN0b3JpY2FsIGNvbXBhdGli
aWxpdHkgcmVhc29ucy4KLSAgICBFbGVtZW50KiBmaW5kQW5jaG9yKGNvbnN0IFN0cmluZyYgbmFt
ZSk7CisgICAgRWxlbWVudCogZmluZEFuY2hvcihTdHJpbmdWaWV3IG5hbWUpOwogCiAgICAgQ29u
dGFpbmVyTm9kZSYgcm9vdE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3ROb2RlOyB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCA0ZjY3MDczNmI3ODQxYTkzZTAwZTU0YTk4ODll
N2U4MjNiMDdiODQ0Li5jMWQzZDdmOGFhN2JhMWMwMjRjM2U4MzgyMWM0M2YxN2QwZTUzODAxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0yMjA5LDcgKzIyMDksNyBAQCB2b2lkIEZy
YW1lVmlldzo6cmVzdG9yZVNjcm9sbGJhcigpCiBib29sIEZyYW1lVmlldzo6c2Nyb2xsVG9GcmFn
bWVudChjb25zdCBVUkwmIHVybCkKIHsKICAgICBhdXRvIGZyYWdtZW50SWRlbnRpZmllciA9IHVy
bC5mcmFnbWVudElkZW50aWZpZXIoKTsKLSAgICBpZiAoc2Nyb2xsVG9GcmFnbWVudEludGVybmFs
KGZyYWdtZW50SWRlbnRpZmllci50b1N0cmluZygpKSkKKyAgICBpZiAoc2Nyb2xsVG9GcmFnbWVu
dEludGVybmFsKGZyYWdtZW50SWRlbnRpZmllcikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgaWYgKHNjcm9sbFRvRnJhZ21lbnRJbnRlcm5hbChkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMo
ZnJhZ21lbnRJZGVudGlmaWVyKSkpCkBAIC0yMjE5LDcgKzIyMTksNyBAQCBib29sIEZyYW1lVmll
dzo6c2Nyb2xsVG9GcmFnbWVudChjb25zdCBVUkwmIHVybCkKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgRnJhbWVWaWV3OjpzY3JvbGxUb0ZyYWdtZW50SW50ZXJuYWwoY29uc3QgU3RyaW5n
JiBmcmFnbWVudElkZW50aWZpZXIpCitib29sIEZyYW1lVmlldzo6c2Nyb2xsVG9GcmFnbWVudElu
dGVybmFsKFN0cmluZ1ZpZXcgZnJhZ21lbnRJZGVudGlmaWVyKQogewogICAgIC8vIElmIG91ciBV
UkwgaGFzIG5vIHJlZiwgdGhlbiB3ZSBoYXZlIG5vIHBsYWNlIHdlIG5lZWQgdG8ganVtcCB0by4K
ICAgICBpZiAoZnJhZ21lbnRJZGVudGlmaWVyLmlzTnVsbCgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgKaW5kZXggNTlhYzA4ZDVlNTc0Njc3YTU2OTE0YTMyZjM5NTNhNzk0ZjhhMjMyMi4uNTkwZTgz
MmRkY2I0N2M0M2I1MGI0NWQ2MTIzNzRlMmNmODc0MjNjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCkBAIC04MDksNyArODA5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlV2lkZ2V0
UG9zaXRpb25zVGltZXJGaXJlZCgpOwogCi0gICAgYm9vbCBzY3JvbGxUb0ZyYWdtZW50SW50ZXJu
YWwoY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBzY3JvbGxUb0ZyYWdtZW50SW50ZXJuYWwoU3Ry
aW5nVmlldyk7CiAgICAgdm9pZCBzY3JvbGxUb0FuY2hvcigpOwogICAgIHZvaWQgc2Nyb2xsUG9z
aXRpb25DaGFuZ2VkKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBvbGRQb3NpdGlvbiwgY29uc3QgU2Ny
b2xsUG9zaXRpb24mIG5ld1Bvc2l0aW9uKTsKICAgICB2b2lkIHNjcm9sbGFibGVBcmVhU2V0Q2hh
bmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAppbmRleCAzMzQ5ZDFh
YTg2OTQ5Y2M2MjgwNDllYWYzYmRlYjI5ZWNiNjNlM2Q0Li4zOGEyNDRkYjJjYzhjMjE2MDAxZmFk
Mjg2YjJhYTE1MDQ5OWIzZWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3Vy
aXR5T3JpZ2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNw
cApAQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyBib29sIGlzTG9vcGJhY2tJUEFkZHJlc3MoU3Ry
aW5nVmlldyBob3N0KQogfQogCiAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXNl
Y3VyZS1jb250ZXh0cy8jaXMtb3JpZ2luLXRydXN0d29ydGh5IChFZGl0b3IncyBEcmFmdCwgMTcg
Tm92ZW1iZXIgMjAxNikKLXN0YXRpYyBib29sIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0
d29ydGh5KGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmluZyYgaG9zdCkKK3N0YXRp
YyBib29sIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29ydGh5KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2wsIFN0cmluZ1ZpZXcgaG9zdCkKIHsKICAgICBpZiAoTGVnYWN5U2NoZW1lUmVnaXN0
cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNTZWN1cmUocHJvdG9jb2wpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuY3BwCmluZGV4IDZhZDZiMjM3NzdlYTYyZmFlMDc4ZjRmOGE4MzVkMmM5NmNlNjRmNzAu
LmZjODVmZmZhOWIyMGNmNWQzYTJjZmY4OWI3ZDM4ZWNmODRhYTBmZjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcApAQCAtMzIyLDcg
KzMyMiw3IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxQb2xpY2llc0FsbG93KFZp
b2xhdGVkRGlyZWN0aXZlQ2FsbGJhY2smJiBjYWxsYmFjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFByZWRpY2F0ZT4KLUNvbnRlbnRTZWN1cml0eVBvbGljeTo6SGFzaEluRW5mb3JjZWRBbmRSZXBv
cnRPbmx5UG9saWNpZXNQYWlyIENvbnRlbnRTZWN1cml0eVBvbGljeTo6ZmluZEhhc2hPZkNvbnRl
bnRJblBvbGljaWVzKFByZWRpY2F0ZSYmIHByZWRpY2F0ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50
LCBPcHRpb25TZXQ8Q29udGVudFNlY3VyaXR5UG9saWN5SGFzaEFsZ29yaXRobT4gYWxnb3JpdGht
cykgY29uc3QKK0NvbnRlbnRTZWN1cml0eVBvbGljeTo6SGFzaEluRW5mb3JjZWRBbmRSZXBvcnRP
bmx5UG9saWNpZXNQYWlyIENvbnRlbnRTZWN1cml0eVBvbGljeTo6ZmluZEhhc2hPZkNvbnRlbnRJ
blBvbGljaWVzKFByZWRpY2F0ZSYmIHByZWRpY2F0ZSwgU3RyaW5nVmlldyBjb250ZW50LCBPcHRp
b25TZXQ8Q29udGVudFNlY3VyaXR5UG9saWN5SGFzaEFsZ29yaXRobT4gYWxnb3JpdGhtcykgY29u
c3QKIHsKICAgICBpZiAoYWxnb3JpdGhtcy5pc0VtcHR5KCkgfHwgY29udGVudC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiB7IGZhbHNlLCBmYWxzZSB9OwpAQCAtNDA0LDcgKzQwNCw3IEBAIGJv
b2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd1N0eWxlV2l0aE5vbmNlKGNvbnN0IFN0cmlu
ZyYgbm9uY2UsIGJvb2wgb3ZlcnJpCiAgICAgcmV0dXJuIGFsbFBvbGljaWVzV2l0aERpc3Bvc2l0
aW9uQWxsb3coQ29udGVudFNlY3VyaXR5UG9saWN5OjpEaXNwb3NpdGlvbjo6RW5mb3JjZSwgJkNv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnZpb2xhdGVkRGlyZWN0aXZlRm9yU3R5
bGVOb25jZSwgc3RyaXBwZWROb25jZSk7CiB9CiAKLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5
OjphbGxvd0lubGluZVNjcmlwdChjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6
T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIGNvbnN0IFN0cmluZyYgc2NyaXB0Q29udGVudCwg
Ym9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSkgY29uc3QKK2Jvb2wgQ29udGVudFNl
Y3VyaXR5UG9saWN5OjphbGxvd0lubGluZVNjcmlwdChjb25zdCBTdHJpbmcmIGNvbnRleHRVUkws
IGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIFN0cmluZ1ZpZXcgc2NyaXB0
Q29udGVudCwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSkgY29uc3QKIHsKICAg
ICBpZiAob3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpCiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtNDI3LDcgKzQyNyw3IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0lu
bGluZVNjcmlwdChjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdUCiAgICAgcmV0dXJu
IGZvdW5kSGFzaEluRW5mb3JjZWRQb2xpY2llcyB8fCBhbGxQb2xpY2llc1dpdGhEaXNwb3NpdGlv
bkFsbG93KENvbnRlbnRTZWN1cml0eVBvbGljeTo6RGlzcG9zaXRpb246OkVuZm9yY2UsIGhhbmRs
ZVZpb2xhdGVkRGlyZWN0aXZlLCAmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6
dmlvbGF0ZWREaXJlY3RpdmVGb3JVbnNhZmVJbmxpbmVTY3JpcHQpOwogfQogCi1ib29sIENvbnRl
bnRTZWN1cml0eVBvbGljeTo6YWxsb3dJbmxpbmVTdHlsZShjb25zdCBTdHJpbmcmIGNvbnRleHRV
UkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIGNvbnN0IFN0cmluZyYg
c3R5bGVDb250ZW50LCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KSBjb25zdAor
Ym9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93SW5saW5lU3R5bGUoY29uc3QgU3RyaW5n
JiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBTdHJp
bmdWaWV3IHN0eWxlQ29udGVudCwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSkg
Y29uc3QKIHsKICAgICBpZiAob3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpCiAgICAgICAg
IHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVu
dFNlY3VyaXR5UG9saWN5LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3kuaAppbmRleCBiZjZhMjgxM2U0ZDYwNjI1MzE5MmRjMjBjYWI2OTJmYjZhZTAwZjE4
Li4xZWFhODVkMzcwYzU1ZmMxZDA1NWU1YzIzZDFiMGY4NjYwOGM2NzYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuaApAQCAtOTEsOCArOTEs
OCBAQCBwdWJsaWM6CiAKICAgICBib29sIGFsbG93SmF2YVNjcmlwdFVSTHMoY29uc3QgU3RyaW5n
JiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBib29s
IG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UpIGNvbnN0OwogICAgIGJvb2wg
YWxsb3dJbmxpbmVFdmVudEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3Qg
V1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1
cml0eVBvbGljeSA9IGZhbHNlKSBjb25zdDsKLSAgICBib29sIGFsbG93SW5saW5lU2NyaXB0KGNv
bnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0
TGluZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRDb250ZW50LCBib29sIG92ZXJyaWRlQ29udGVudFNl
Y3VyaXR5UG9saWN5ID0gZmFsc2UpIGNvbnN0OwotICAgIGJvb2wgYWxsb3dJbmxpbmVTdHlsZShj
b25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4
dExpbmUsIGNvbnN0IFN0cmluZyYgc3R5bGVDb250ZW50LCBib29sIG92ZXJyaWRlQ29udGVudFNl
Y3VyaXR5UG9saWN5ID0gZmFsc2UpIGNvbnN0OworICAgIGJvb2wgYWxsb3dJbmxpbmVTY3JpcHQo
Y29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRl
eHRMaW5lLCBTdHJpbmdWaWV3IHNjcmlwdENvbnRlbnQsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2Vj
dXJpdHlQb2xpY3kgPSBmYWxzZSkgY29uc3Q7CisgICAgYm9vbCBhbGxvd0lubGluZVN0eWxlKGNv
bnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0
TGluZSwgU3RyaW5nVmlldyBzdHlsZUNvbnRlbnQsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJp
dHlQb2xpY3kgPSBmYWxzZSkgY29uc3Q7CiAKICAgICBib29sIGFsbG93RXZhbChKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlKSBj
b25zdDsKIApAQCAtMjA2LDcgKzIwNiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBhbGxvd1Jlc291
cmNlRnJvbVNvdXJjZShjb25zdCBVUkwmLCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQsIGNvbnN0
IGNoYXIqLCBSZXNvdXJjZVByZWRpY2F0ZSkgY29uc3Q7CiAKICAgICB1c2luZyBIYXNoSW5FbmZv
cmNlZEFuZFJlcG9ydE9ubHlQb2xpY2llc1BhaXIgPSBzdGQ6OnBhaXI8Ym9vbCwgYm9vbD47Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPiBIYXNoSW5FbmZvcmNlZEFuZFJlcG9ydE9u
bHlQb2xpY2llc1BhaXIgZmluZEhhc2hPZkNvbnRlbnRJblBvbGljaWVzKFByZWRpY2F0ZSYmLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQsIE9wdGlvblNldDxDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNo
QWxnb3JpdGhtPikgY29uc3QgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFByZWRpY2F0ZT4gSGFzaEluRW5mb3JjZWRBbmRSZXBvcnRPbmx5UG9saWNpZXNQYWlyIGZp
bmRIYXNoT2ZDb250ZW50SW5Qb2xpY2llcyhQcmVkaWNhdGUmJiwgU3RyaW5nVmlldyBjb250ZW50
LCBPcHRpb25TZXQ8Q29udGVudFNlY3VyaXR5UG9saWN5SGFzaEFsZ29yaXRobT4pIGNvbnN0IFdB
Uk5fVU5VU0VEX1JFVFVSTjsKIAogICAgIHZvaWQgcmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0cmlu
ZyYgZWZmZWN0aXZlVmlvbGF0ZWREaXJlY3RpdmUsIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZSYgdmlvbGF0ZWREaXJlY3RpdmUsIGNvbnN0IFVSTCYgYmxvY2tlZFVSTCwgY29u
c3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgSlNDOjpKU0dsb2JhbE9iamVjdCopIGNvbnN0Owog
ICAgIHZvaWQgcmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYgZWZmZWN0aXZlVmlvbGF0ZWRE
aXJlY3RpdmUsIGNvbnN0IFN0cmluZyYgdmlvbGF0ZWREaXJlY3RpdmUsIGNvbnN0IENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QmLCBjb25zdCBVUkwmIGJsb2NrZWRVUkwsIGNvbnN0
IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIEpTQzo6SlNHbG9iYWxPYmplY3QqID0gbnVsbHB0cikg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZWdhY3lTY2hlbWVS
ZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZWdhY3lTY2hlbWVSZWdpc3Ry
eS5jcHAKaW5kZXggMWNiNzlhNjM5NDQ0M2Y1M2ViOWU0YTVhNDcwYjE4NmE3YmQyZjBkYS4uZDE1
NjE3ODU2NDI5MTMwOWZmYTY5YjQ4YWZiMjM0OGUxYTZhMDk3MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTGVnYWN5U2NoZW1lUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xlZ2FjeVNjaGVtZVJlZ2lzdHJ5LmNwcApAQCAtMjUzLDcgKzI1Myw3
IEBAIHZvaWQgTGVnYWN5U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNIYW5kbGVk
QnlTY2hlbWVIYW5kbGVyKGNvbnN0IFN0cmluCiBib29sIExlZ2FjeVNjaGVtZVJlZ2lzdHJ5Ojpz
Y2hlbWVJc0hhbmRsZWRCeVNjaGVtZUhhbmRsZXIoU3RyaW5nVmlldyBzY2hlbWUpCiB7CiAgICAg
TG9ja2VyIGxvY2tlciB7IHNjaGVtZVJlZ2lzdHJ5TG9jayB9OwotICAgIHJldHVybiBzY2hlbWVz
SGFuZGxlZEJ5U2NoZW1lSGFuZGxlcigpLmNvbnRhaW5zKHNjaGVtZS50b1N0cmluZygpKTsKKyAg
ICByZXR1cm4gc2NoZW1lc0hhbmRsZWRCeVNjaGVtZUhhbmRsZXIoKS5jb250YWlucyhzY2hlbWUu
dG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKIH0KIAogc3RhdGljIFVSTFNjaGVtZXNNYXAmIHNj
aGVtZXNBbGxvd2luZ0RhdGFiYXNlQWNjZXNzSW5Qcml2YXRlQnJvd3NpbmcoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250ZW50VHlwZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZENvbnRlbnRUeXBlLmNwcApp
bmRleCA0ZWU2MjcyNDQwMDJiN2RjNDY3N2YzOWU5NGEyOGE2OTIzNDRiNzIzLi45ZWYyYTE3MjBk
NTcxMjZmYmU3MTJjZDlhMmExZDIyMjFhMWM0ZTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZENvbnRlbnRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZENvbnRlbnRUeXBlLmNwcApAQCAtMTIyLDcgKzEy
Miw3IEBAIHN0YXRpYyBTdHJpbmcgY29sbGVjdEhUVFBRdW90ZWRTdHJpbmcoU3RyaW5nVmlldyBp
bnB1dCwgdW5zaWduZWQmIHN0YXJ0SW5kZXgpCiBzdGF0aWMgYm9vbCBjb250YWluc05vblRva2Vu
Q2hhcmFjdGVycyhTdHJpbmdWaWV3IGlucHV0LCBNb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUg
PT0gTW9kZTo6TWltZVNuaWZmKQotICAgICAgICByZXR1cm4gIWlzVmFsaWRIVFRQVG9rZW4oaW5w
dXQudG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKKyAgICAgICAgcmV0dXJuICFpc1ZhbGlkSFRU
UFRva2VuKGlucHV0KTsKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbnB1
dC5sZW5ndGgoKTsgKytpbmRleCkgewogICAgICAgICBpZiAoIWlzVG9rZW5DaGFyYWN0ZXIoaW5w
dXRbaW5kZXhdKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9oeXBoZW4vSHlwaGVuYXRpb25MaWJIeXBoZW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9oeXBoZW4vSHlwaGVuYXRpb25MaWJIeXBoZW4u
Y3BwCmluZGV4IDhiOWNmZjJlZDlkZWQyY2IzYzI1N2VjN2VkMTBmMzUxNzZlYTYxOWUuLmZhMDU4
YTgzY2Y2OTNkM2EyMDdkMWJkOWFjYWU4N2Y0MDUwODNlMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvaHlwaGVuL0h5cGhlbmF0aW9uTGliSHlwaGVuLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2h5cGhlbi9IeXBoZW5hdGlvbkxpYkh5cGhl
bi5jcHAKQEAgLTI3OCw3ICsyNzgsNyBAQCBzaXplX3QgbGFzdEh5cGhlbkxvY2F0aW9uKFN0cmlu
Z1ZpZXcgc3RyaW5nLCBzaXplX3QgYmVmb3JlSW5kZXgsIGNvbnN0IEF0b21TdHJpbgogICAgIC8v
IHdoaWNoIHN0b3JlcyBlaXRoZXIgVVRGLTE2IG9yIExhdGluMSBkYXRhLiBUaGlzIGlzIHVuZm9y
dHVuYXRlIGZvciBwZXJmb3JtYW5jZQogICAgIC8vIHJlYXNvbnMgYW5kIHdlIHNob3VsZCBjb25z
aWRlciBzd2l0Y2hpbmcgdG8gYSBtb3JlIGZsZXhpYmxlIGh5cGhlbmF0aW9uIGxpYnJhcnkKICAg
ICAvLyBpZiBpdCBpcyBhdmFpbGFibGUuCi0gICAgQ1N0cmluZyB1dGY4U3RyaW5nQ29weSA9IHN0
cmluZy50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkudXRmOCgpOworICAgIENTdHJpbmcgdXRmOFN0
cmluZ0NvcHkgPSBzdHJpbmcudXRmOCgpOwogCiAgICAgLy8gV2ViQ29yZSBvZnRlbiBwYXNzZXMg
c3RyaW5ncyBsaWtlICIgd29yZHRvaHlwaGVuYXRlIiB0byB0aGUgcGxhdGZvcm0gbGF5ZXIuIFNp
bmNlCiAgICAgLy8gbGliaHlwaGVuIGlzbid0IGFkdmFuY2VkIGVub3VnaCB0byBkZWFsIHdpdGgg
bGVhZGluZyBzcGFjZXMgKHByZXN1bWFibHkgQ29yZUZvdW5kYXRpb24KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCAzMDE3MmE5YzgyYTU5NDcw
ZjZkMmYxOTllNjBkYWUzMTQ0NzA4NmIwLi44MmZmMDg1ZDQwY2NmMzA2MjFhODQ1YjgxYmNiNzli
MWZlMzQ4OTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCkBAIC00NzEsNyArNDcxLDcgQEAgdm9pZCB3cml0ZURlYnVnSW5mbyhUZXh0U3RyZWFt
JiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIE9wdGlvblNldDxSZW5kZXIKICAgICBp
ZiAoYmVoYXZpb3IuY29udGFpbnMoUmVuZGVyQXNUZXh0RmxhZzo6U2hvd0lEQW5kQ2xhc3MpKSB7
CiAgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gaXM8RWxlbWVudD4ob2JqZWN0Lm5vZGUo
KSkgPyBkb3duY2FzdDxFbGVtZW50PihvYmplY3Qubm9kZSgpKSA6IG51bGxwdHIpIHsKICAgICAg
ICAgICAgIGlmIChlbGVtZW50LT5oYXNJRCgpKQotICAgICAgICAgICAgICAgIHRzIDw8ICIgaWQ9
XCIiICsgZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSArICJcIiI7CisgICAgICAgICAgICAgICAg
dHMgPDwgIiBpZD1cIiIgPDwgZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSA8PCAiXCIiOwogCiAg
ICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSkgewogICAgICAgICAgICAgICAgIHRz
IDw8ICIgY2xhc3M9XCIiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCmluZGV4IGVk
NTY2ZGU1YmJkMjIzZjU5YzQ5OGY1MjE2MmRiNTUwNmI4YTRlYWMuLjk1MzVmYTlhYjBkY2JjMWJm
YmM1ZmE2Nzk2NjY3YzVmZjlhN2RkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5j
cHAKQEAgLTU0Niw3ICs1NDYsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHU1ZHRWxlbWVudDo6dmll
d0JveFRvVmlld1RyYW5zZm9ybShmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZQogICAgIHJldHVy
biB0cmFuc2Zvcm07CiB9CiAKLVNWR1ZpZXdFbGVtZW50KiBTVkdTVkdFbGVtZW50OjpmaW5kVmll
d0FuY2hvcihjb25zdCBTdHJpbmcmIGZyYWdtZW50SWRlbnRpZmllcikgY29uc3QKK1NWR1ZpZXdF
bGVtZW50KiBTVkdTVkdFbGVtZW50OjpmaW5kVmlld0FuY2hvcihTdHJpbmdWaWV3IGZyYWdtZW50
SWRlbnRpZmllcikgY29uc3QKIHsKICAgICBhdXRvKiBhbmNob3JFbGVtZW50ID0gZG9jdW1lbnQo
KS5maW5kQW5jaG9yKGZyYWdtZW50SWRlbnRpZmllcik7CiAgICAgcmV0dXJuIGlzPFNWR1ZpZXdF
bGVtZW50PihhbmNob3JFbGVtZW50KSA/IGRvd25jYXN0PFNWR1ZpZXdFbGVtZW50PihhbmNob3JF
bGVtZW50KTogbnVsbHB0cjsKQEAgLTU1OCwxNCArNTU4LDE0IEBAIFNWR1NWR0VsZW1lbnQqIFNW
R1NWR0VsZW1lbnQ6OmZpbmRSb290QW5jaG9yKGNvbnN0IFNWR1ZpZXdFbGVtZW50KiB2aWV3RWxl
bWVudCkKICAgICByZXR1cm4gaXM8U1ZHU1ZHRWxlbWVudD4odmlld3BvcnRFbGVtZW50KSA/IGRv
d25jYXN0PFNWR1NWR0VsZW1lbnQ+KHZpZXdwb3J0RWxlbWVudCkgOiBudWxscHRyOwogfQogCi1T
VkdTVkdFbGVtZW50KiBTVkdTVkdFbGVtZW50OjpmaW5kUm9vdEFuY2hvcihjb25zdCBTdHJpbmcm
IGZyYWdtZW50SWRlbnRpZmllcikgY29uc3QKK1NWR1NWR0VsZW1lbnQqIFNWR1NWR0VsZW1lbnQ6
OmZpbmRSb290QW5jaG9yKFN0cmluZ1ZpZXcgZnJhZ21lbnRJZGVudGlmaWVyKSBjb25zdAogewog
ICAgIGlmIChhdXRvKiB2aWV3RWxlbWVudCA9IGZpbmRWaWV3QW5jaG9yKGZyYWdtZW50SWRlbnRp
ZmllcikpCiAgICAgICAgIHJldHVybiBmaW5kUm9vdEFuY2hvcih2aWV3RWxlbWVudCk7CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLWJvb2wgU1ZHU1ZHRWxlbWVudDo6c2Nyb2xsVG9GcmFnbWVu
dChjb25zdCBTdHJpbmcmIGZyYWdtZW50SWRlbnRpZmllcikKK2Jvb2wgU1ZHU1ZHRWxlbWVudDo6
c2Nyb2xsVG9GcmFnbWVudChTdHJpbmdWaWV3IGZyYWdtZW50SWRlbnRpZmllcikKIHsKICAgICBh
dXRvIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBhdXRvIHZpZXcgPSBtX3ZpZXdT
cGVjOwpAQCAtNjE2LDcgKzYxNiw3IEBAIGJvb2wgU1ZHU1ZHRWxlbWVudDo6c2Nyb2xsVG9GcmFn
bWVudChjb25zdCBTdHJpbmcmIGZyYWdtZW50SWRlbnRpZmllcikKICAgICAgICAgICAgIHJvb3RF
bGVtZW50LT5pbmhlcml0Vmlld0F0dHJpYnV0ZXMoKnZpZXdFbGVtZW50KTsKICAgICAgICAgICAg
IGlmIChhdXRvKiByZW5kZXJlciA9IHJvb3RFbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICAg
ICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJ
bnZhbGlkYXRpb24oKnJlbmRlcmVyKTsKLSAgICAgICAgICAgIG1fY3VycmVudFZpZXdGcmFnbWVu
dElkZW50aWZpZXIgPSBmcmFnbWVudElkZW50aWZpZXI7CisgICAgICAgICAgICBtX2N1cnJlbnRW
aWV3RnJhZ21lbnRJZGVudGlmaWVyID0gZnJhZ21lbnRJZGVudGlmaWVyLnRvU3RyaW5nKCk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U1ZHRWxlbWVudC5oCmluZGV4IDgyN2VmYTYzYjA1NGMwM2YyYzhiNzg4MjI2ZjJiNzBkYzdhZGZj
ZTIuLjk0MjhhOTUzZGQwMWVjODg3YTUzMzM1ZjczMmE5MWJhODhkMDY0OTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1NWR0VsZW1lbnQuaApAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6IC8vIERPTQogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8U1ZHU1ZHRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCYpOwogICAgIHN0YXRpYyBSZWY8U1ZHU1ZHRWxlbWVudD4gY3JlYXRl
KERvY3VtZW50Jik7Ci0gICAgYm9vbCBzY3JvbGxUb0ZyYWdtZW50KGNvbnN0IFN0cmluZyYgZnJh
Z21lbnRJZGVudGlmaWVyKTsKKyAgICBib29sIHNjcm9sbFRvRnJhZ21lbnQoU3RyaW5nVmlldyBm
cmFnbWVudElkZW50aWZpZXIpOwogICAgIHZvaWQgcmVzZXRTY3JvbGxBbmNob3IoKTsKIAogICAg
IHVzaW5nIFNWR0dyYXBoaWNzRWxlbWVudDo6cmVmOwpAQCAtMTQxLDkgKzE0MSw5IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPEZyYW1lPiBmcmFtZUZvckN1cnJlbnRTY2FsZSgpIGNvbnN0OwogICAg
IFJlZjxOb2RlTGlzdD4gY29sbGVjdEludGVyc2VjdGlvbk9yRW5jbG9zdXJlTGlzdChTVkdSZWN0
JiwgU1ZHRWxlbWVudCosIGJvb2wgKCpjaGVja0Z1bmN0aW9uKShTVkdFbGVtZW50JiwgU1ZHUmVj
dCYpKTsKIAotICAgIFNWR1ZpZXdFbGVtZW50KiBmaW5kVmlld0FuY2hvcihjb25zdCBTdHJpbmcm
IGZyYWdtZW50SWRlbnRpZmllcikgY29uc3Q7CisgICAgU1ZHVmlld0VsZW1lbnQqIGZpbmRWaWV3
QW5jaG9yKFN0cmluZ1ZpZXcgZnJhZ21lbnRJZGVudGlmaWVyKSBjb25zdDsKICAgICBTVkdTVkdF
bGVtZW50KiBmaW5kUm9vdEFuY2hvcihjb25zdCBTVkdWaWV3RWxlbWVudCopIGNvbnN0OwotICAg
IFNWR1NWR0VsZW1lbnQqIGZpbmRSb290QW5jaG9yKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAg
IFNWR1NWR0VsZW1lbnQqIGZpbmRSb290QW5jaG9yKFN0cmluZ1ZpZXcpIGNvbnN0OwogCiAgICAg
Ym9vbCBtX3VzZUN1cnJlbnRWaWV3IHsgZmFsc2UgfTsKICAgICBSZWY8U01JTFRpbWVDb250YWlu
ZXI+IG1fdGltZUNvbnRhaW5lcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdW
aWV3U3BlYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCmluZGV4IDkx
ZDg5ZmVkZTRiMDE2MTJjNmFkNTZiZDQyNzZhZTA4MDA2ZTc2ZGIuLjFhYzY5MzcxOGQ2ZTFlYjll
NDk2MGI1NTE4OTAxNzJhMTI0NDljNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdWaWV3U3BlYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcApA
QCAtNjgsNyArNjgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMg
Y29uc3RleHByIENoYXJhY3RlclR5cGUgdHJhbnNmb3JtU3BlY1tdCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgY29uc3RleHByIENoYXJhY3RlclR5cGUgem9vbUFuZFBh
blNwZWNbXSA9IHsneicsICdvJywgJ28nLCAnbScsICdBJywgJ24nLCAnZCcsICdQJywgJ2EnLCAn
bid9OwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGNvbnN0ZXhwciBD
aGFyYWN0ZXJUeXBlIHZpZXdUYXJnZXRTcGVjW10gPSAgeyd2JywgJ2knLCAnZScsICd3JywgJ1Qn
LCAnYScsICdyJywgJ2cnLCAnZScsICd0J307CiAKLWJvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmll
d1NwZWMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQorYm9vbCBTVkdWaWV3U3BlYzo6cGFyc2VW
aWV3U3BlYyhTdHJpbmdWaWV3IHN0cmluZykKIHsKICAgICByZXR1cm4gcmVhZENoYXJhY3RlcnNG
b3JQYXJzaW5nKHN0cmluZywgWyZdKGF1dG8gYnVmZmVyKSAtPiBib29sIHsKICAgICAgICAgdXNp
bmcgQ2hhcmFjdGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0eXBlKGJ1ZmZlcik6OkNoYXJhY3RlclR5
cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5oCmluZGV4IGQxNTE4ZmY1NWEyNjgxYTA3NGYxYjZl
Y2QxNTJiYTcyYzQ0ZTBhOTguLjU0MzliMzEzODBmOWMyYTMwZWU2NjcwNDE4NmFmZjMwZWZiNDQw
MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5oCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHVmlld1NwZWMoY29udGV4dEVsZW1lbnQp
KTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nVmlldyYpOwor
ICAgIGJvb2wgcGFyc2VWaWV3U3BlYyhTdHJpbmdWaWV3KTsKICAgICB2b2lkIHJlc2V0KCk7CiAg
ICAgdm9pZCByZXNldENvbnRleHRFbGVtZW50KCkgeyBtX2NvbnRleHRFbGVtZW50ID0gbnVsbHB0
cjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1tCmluZGV4IGQwYzdlOWExZjU4YmUyNGI4YjBmYTQ1
YzIyYmZiNWFlYjNiZWE0NWMuLjgyNDRlMTI0MjEyNTU0YjJlYzY0Zjg0NDRmNTUzMmVmMmEzNTVm
ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdDb25maWd1cmF0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1tCkBAIC01NjUsNyArNTY1LDcgQEAgLSAodm9pZClz
ZXRVUkxTY2hlbWVIYW5kbGVyOihpZCA8V0tVUkxTY2hlbWVIYW5kbGVyPil1cmxTY2hlbWVIYW5k
bGVyIGZvclVSTFNjaGUKICAgICBpZiAoW1dLV2ViVmlldyBoYW5kbGVzVVJMU2NoZW1lOnVybFNj
aGVtZV0pCiAgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2Vw
dGlvbiBmb3JtYXQ6QCInJUAnIGlzIGEgVVJMIHNjaGVtZSB0aGF0IFdLV2ViVmlldyBoYW5kbGVz
IG5hdGl2ZWx5IiwgdXJsU2NoZW1lXTsKIAotICAgIGF1dG8gY2Fub25pY2FsU2NoZW1lID0gV1RG
OjpVUkxQYXJzZXI6Om1heWJlQ2Fub25pY2FsaXplU2NoZW1lKHVybFNjaGVtZSk7CisgICAgYXV0
byBjYW5vbmljYWxTY2hlbWUgPSBXVEY6OlVSTFBhcnNlcjo6bWF5YmVDYW5vbmljYWxpemVTY2hl
bWUoU3RyaW5nKHVybFNjaGVtZSkpOwogICAgIGlmICghY2Fub25pY2FsU2NoZW1lKQogICAgICAg
ICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAi
JyVAJyBpcyBub3QgYSB2YWxpZCBVUkwgc2NoZW1lIiwgdXJsU2NoZW1lXTsKIApAQCAtNTc3LDcg
KzU3Nyw3IEBAIC0gKHZvaWQpc2V0VVJMU2NoZW1lSGFuZGxlcjooaWQgPFdLVVJMU2NoZW1lSGFu
ZGxlcj4pdXJsU2NoZW1lSGFuZGxlciBmb3JVUkxTY2hlCiAKIC0gKGlkIDxXS1VSTFNjaGVtZUhh
bmRsZXI+KXVybFNjaGVtZUhhbmRsZXJGb3JVUkxTY2hlbWU6KE5TU3RyaW5nICopdXJsU2NoZW1l
CiB7Ci0gICAgYXV0byBjYW5vbmljYWxTY2hlbWUgPSBXVEY6OlVSTFBhcnNlcjo6bWF5YmVDYW5v
bmljYWxpemVTY2hlbWUodXJsU2NoZW1lKTsKKyAgICBhdXRvIGNhbm9uaWNhbFNjaGVtZSA9IFdU
Rjo6VVJMUGFyc2VyOjptYXliZUNhbm9uaWNhbGl6ZVNjaGVtZShTdHJpbmcodXJsU2NoZW1lKSk7
CiAgICAgaWYgKCFjYW5vbmljYWxTY2hlbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430971</attachid>
            <date>2021-06-09 09:37:08 -0700</date>
            <delta_ts>2021-06-09 13:46:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226803-20210609093704.patch</filename>
            <type>text/plain</type>
            <size>41638</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDZkM2Y3NWUxNDNhYzJjN2UyNTMyYmFl
MzBjNjdjODZjZWMzNTczN2MuLjMzYjQ2YjY5NjBjNzJmZjRmMWFjMzc4NzY1ZTQyY2M5Y2JlM2Qz
NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDYtMDkgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBBdm9pZCBzb21lIGNhbGxzIHRvIFN0cmluZ1ZpZXc6OnRv
U3RyaW5nKCkgLyBTdHJpbmdWaWV3Ojp0b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjgwMworCisgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEFkZCBzdXBwb3J0IHRvIFRleHRT
dHJlYW0gZm9yIHByaW50aW5nIGEgU3RyaW5nVmlldyBkaXJlY3RseSwgd2l0aG91dCBoYXZpbmcg
dG8gY29udmVydAorICAgICAgICBpdCB0byBhIFN0cmluZyBmaXJzdC4KKworICAgICAgICAqIHd0
Zi90ZXh0L1RleHRTdHJlYW0uY3BwOgorICAgICAgICAoV1RGOjpUZXh0U3RyZWFtOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKiB3dGYvdGV4dC9UZXh0U3RyZWFtLmg6CisKIDIwMjEtMDYtMDkgIEFs
aWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXVEZdW0dT
dHJlYW1lcl0gQWRkIFJBSUkgbG9ja2VycyBmb3IgM3JkIHBhcnR5IGxvY2tzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMzFiOWI4MzQ5ODM2ZDlkNDc4NDY3ZDlmNzM3YTYzNTdlZTZiZjdiZC4uMmY4NGViZjQ4MWIy
Y2UyYjQ2NDBhNWM3OTM1ZDFiMzViYzdkOWY1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBA
CisyMDIxLTA2LTA5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAg
QXZvaWQgc29tZSBjYWxscyB0byBTdHJpbmdWaWV3Ojp0b1N0cmluZygpIC8gU3RyaW5nVmlldzo6
dG9TdHJpbmdXaXRob3V0Q29weWluZygpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY4MDMKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y29uc3VtZUZvbnRWYXJpYXRpb25UYWcpOgorICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsVG9GcmFnbWVu
dEludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2h5cGhlbi9IeXBoZW5hdGlvbkxp
Ykh5cGhlbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsYXN0SHlwaGVuTG9jYXRpb24pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OndyaXRlRGVidWdJbmZvKToKKwogMjAyMS0wNi0wOSAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0ZsZXhib3hdIEZsZXhJdGVtIHN0YXlzIGludmlzaWJsZSBhZnRl
ciBpbml0aWFsIGxheW91dApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVVJMLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL1VSTC5jcHAKaW5kZXggZTJlOWNiZjY1YzA5MWNlODFlYzJiZjIwOTdkNDI1
MTYyOTQ3Mzc0NC4uMjkxMWY1MTgxYmE0MzUwYTgxM2IyNDg2OGI3ODVjYmJiMDFjNmZmMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvVVJMLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9VUkwu
Y3BwCkBAIC0zNzgsNyArMzc4LDcgQEAgYm9vbCBVUkw6OnNldFByb3RvY29sKFN0cmluZ1ZpZXcg
bmV3UHJvdG9jb2wpCiB7CiAgICAgLy8gRmlyZWZveCBhbmQgSUUgcmVtb3ZlIGV2ZXJ5dGhpbmcg
YWZ0ZXIgdGhlIGZpcnN0ICc6Jy4KICAgICBhdXRvIG5ld1Byb3RvY29sUHJlZml4ID0gbmV3UHJv
dG9jb2wuc3Vic3RyaW5nKDAsIG5ld1Byb3RvY29sLmZpbmQoJzonKSk7Ci0gICAgYXV0byBuZXdQ
cm90b2NvbENhbm9uaWNhbGl6ZWQgPSBVUkxQYXJzZXI6Om1heWJlQ2Fub25pY2FsaXplU2NoZW1l
KG5ld1Byb3RvY29sUHJlZml4LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7CisgICAgYXV0byBu
ZXdQcm90b2NvbENhbm9uaWNhbGl6ZWQgPSBVUkxQYXJzZXI6Om1heWJlQ2Fub25pY2FsaXplU2No
ZW1lKG5ld1Byb3RvY29sUHJlZml4KTsKICAgICBpZiAoIW5ld1Byb3RvY29sQ2Fub25pY2FsaXpl
ZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01MjksOSArNTI5LDEwIEBAIHZvaWQgVVJM
OjpzZXRIb3N0QW5kUG9ydChTdHJpbmdWaWV3IGhvc3RBbmRQb3J0KQogICAgICkpOwogfQogCi1z
dGF0aWMgU3RyaW5nIHBlcmNlbnRFbmNvZGVDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZyYgaW5wdXQs
IGJvb2woKnNob3VsZEVuY29kZSkoVUNoYXIpKQordGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlw
ZT4KK3N0YXRpYyBTdHJpbmcgcGVyY2VudEVuY29kZUNoYXJhY3RlcnMoY29uc3QgU3RyaW5nVHlw
ZSYgaW5wdXQsIGJvb2woKnNob3VsZEVuY29kZSkoVUNoYXIpKQogewotICAgIGF1dG8gZW5jb2Rl
ID0gW3Nob3VsZEVuY29kZV0gKGNvbnN0IFN0cmluZyYgaW5wdXQpIHsKKyAgICBhdXRvIGVuY29k
ZSA9IFtzaG91bGRFbmNvZGVdIChjb25zdCBTdHJpbmdUeXBlJiBpbnB1dCkgewogICAgICAgICBD
U3RyaW5nIHV0ZjggPSBpbnB1dC51dGY4KCk7CiAgICAgICAgIGF1dG8qIGRhdGEgPSB1dGY4LmRh
dGEoKTsKICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwpAQCAtNTUyLDcgKzU1MywxMCBA
QCBzdGF0aWMgU3RyaW5nIHBlcmNlbnRFbmNvZGVDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZyYgaW5w
dXQsIGJvb2woKnNob3VsZEVuY29kZSkoVQogICAgICAgICBpZiAoVU5MSUtFTFkoc2hvdWxkRW5j
b2RlKGlucHV0W2ldKSkpCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlKGlucHV0KTsKICAgICB9
Ci0gICAgcmV0dXJuIGlucHV0OworICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8U3Ry
aW5nVHlwZSwgU3RyaW5nVmlldz4pCisgICAgICAgIHJldHVybiBpbnB1dC50b1N0cmluZygpOwor
ICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGlucHV0OwogfQogCiB2b2lkIFVSTDo6cGFyc2UoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCkBAIC01ODQsNyArNTg4LDcgQEAgdm9pZCBVUkw6OnNldFVzZXIo
U3RyaW5nVmlldyBuZXdVc2VyKQogICAgICAgICBwYXJzZShtYWtlU3RyaW5nKAogICAgICAgICAg
ICAgU3RyaW5nVmlldyhtX3N0cmluZykubGVmdChtX3VzZXJTdGFydCksCiAgICAgICAgICAgICBz
bGFzaFNsYXNoTmVlZGVkID8gIi8vIiA6ICIiLAotICAgICAgICAgICAgcGVyY2VudEVuY29kZUNo
YXJhY3RlcnMobmV3VXNlci50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIFVSTFBhcnNlcjo6aXNJ
blVzZXJJbmZvRW5jb2RlU2V0KSwKKyAgICAgICAgICAgIHBlcmNlbnRFbmNvZGVDaGFyYWN0ZXJz
KG5ld1VzZXIsIFVSTFBhcnNlcjo6aXNJblVzZXJJbmZvRW5jb2RlU2V0KSwKICAgICAgICAgICAg
IG5lZWRTZXBhcmF0b3IgPyAiQCIgOiAiIiwKICAgICAgICAgICAgIFN0cmluZ1ZpZXcobV9zdHJp
bmcpLnN1YnN0cmluZyhlbmQpCiAgICAgICAgICkpOwpAQCAtNjA2LDcgKzYxMCw3IEBAIHZvaWQg
VVJMOjpzZXRQYXNzd29yZChTdHJpbmdWaWV3IG5ld1Bhc3N3b3JkKQogICAgICAgICBwYXJzZSht
YWtlU3RyaW5nKAogICAgICAgICAgICAgU3RyaW5nVmlldyhtX3N0cmluZykubGVmdChtX3VzZXJF
bmQpLAogICAgICAgICAgICAgbmVlZExlYWRpbmdTbGFzaGVzID8gIi8vOiIgOiAiOiIsCi0gICAg
ICAgICAgICBwZXJjZW50RW5jb2RlQ2hhcmFjdGVycyhuZXdQYXNzd29yZC50b1N0cmluZ1dpdGhv
dXRDb3B5aW5nKCksIFVSTFBhcnNlcjo6aXNJblVzZXJJbmZvRW5jb2RlU2V0KSwKKyAgICAgICAg
ICAgIHBlcmNlbnRFbmNvZGVDaGFyYWN0ZXJzKG5ld1Bhc3N3b3JkLCBVUkxQYXJzZXI6OmlzSW5V
c2VySW5mb0VuY29kZVNldCksCiAgICAgICAgICAgICAnQCcsCiAgICAgICAgICAgICBTdHJpbmdW
aWV3KG1fc3RyaW5nKS5zdWJzdHJpbmcoY3JlZGVudGlhbHNFbmQoKSkKICAgICAgICAgKSk7CkBA
IC02NzAsNyArNjc0LDcgQEAgc3RhdGljIFN0cmluZyBlc2NhcGVQYXRoV2l0aG91dENvcHlpbmco
U3RyaW5nVmlldyBwYXRoKQogICAgIGF1dG8gcXVlc3Rpb25NYXJrT3JOdW1iZXJTaWduT3JOb25B
U0NJSSA9IFtdIChVQ2hhciBjaGFyYWN0ZXIpIHsKICAgICAgICAgcmV0dXJuIGNoYXJhY3RlciA9
PSAnPycgfHwgY2hhcmFjdGVyID09ICcjJyB8fCAhaXNBU0NJSShjaGFyYWN0ZXIpOwogICAgIH07
Ci0gICAgcmV0dXJuIHBlcmNlbnRFbmNvZGVDaGFyYWN0ZXJzKHBhdGgudG9TdHJpbmdXaXRob3V0
Q29weWluZygpLCBxdWVzdGlvbk1hcmtPck51bWJlclNpZ25Pck5vbkFTQ0lJKTsKKyAgICByZXR1
cm4gcGVyY2VudEVuY29kZUNoYXJhY3RlcnMocGF0aCwgcXVlc3Rpb25NYXJrT3JOdW1iZXJTaWdu
T3JOb25BU0NJSSk7CiB9CiAKIHZvaWQgVVJMOjpzZXRQYXRoKFN0cmluZ1ZpZXcgcGF0aCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1VSTFBhcnNlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9V
UkxQYXJzZXIuY3BwCmluZGV4IDAwNjc5YWU0OWNlNThiOWU0YzY0MGQ4YzM1ODgyNWM5ZWU5MWUw
MTkuLmU0YjljMzQ0NDY2YmY0MmZjZWNlZGY1OGZlYzEzMDYxMjEyODc4ZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1VSTFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVVJMUGFy
c2VyLmNwcApAQCAtNjk4LDcgKzY5OCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIFNjaGVtZSBz
Y2hlbWUoU3RyaW5nVmlldyBzY2hlbWUpCiAgICAgfQogfQogCi1zdGQ6Om9wdGlvbmFsPFN0cmlu
Zz4gVVJMUGFyc2VyOjptYXliZUNhbm9uaWNhbGl6ZVNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVt
ZSkKK3N0ZDo6b3B0aW9uYWw8U3RyaW5nPiBVUkxQYXJzZXI6Om1heWJlQ2Fub25pY2FsaXplU2No
ZW1lKFN0cmluZ1ZpZXcgc2NoZW1lKQogewogICAgIGlmIChzY2hlbWUuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVVJM
UGFyc2VyLmggYi9Tb3VyY2UvV1RGL3d0Zi9VUkxQYXJzZXIuaAppbmRleCAwOGMzMTU4MmMxY2Vm
OTVkZGQxNDNlMjc2ZDQ5NTIyNTQyNjI0MDhiLi41OWU4NzJlZmVkODYzMTRlMTkwYmQ5NmYwMzAy
Yjk0ZDI4YTk4YmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9VUkxQYXJzZXIuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9VUkxQYXJzZXIuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXplKGNvbnN0IFVSTEVu
Y29kZWRGb3JtJik7CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaXNTcGVj
aWFsU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBtYXliZUNhbm9uaWNhbGl6ZVNjaGVtZShjb25z
dCBTdHJpbmcmIHNjaGVtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4gbWF5YmVDYW5vbmljYWxpemVTY2hlbWUoU3RyaW5nVmlldyBzY2hlbWUp
OwogCiAgICAgc3RhdGljIGNvbnN0IFVJRE5BJiBpbnRlcm5hdGlvbmFsRG9tYWluTmFtZVRyYW5z
Y29kZXIoKTsKICAgICBzdGF0aWMgYm9vbCBpc0luVXNlckluZm9FbmNvZGVTZXQoVUNoYXIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmNwcCBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nVmlldy5jcHAKaW5kZXggMzU5ZWY2ZDA4NGQ0NjE0ZjgxMDY4M2U2
ZjE2YTU5YjMzN2NkMTYzNC4uYjg1ZDMwYzc2YTlhMDMzMDUzYmE1NzAwYmVlMmYwYzE2YjQ2Y2Ji
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwCkBAIC0yNDcsNiArMjQ3LDMwIEBAIFN0
cmluZyBTdHJpbmdWaWV3Ojpjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIGNvbnN0CiAgICAgcmV0
dXJuIGNvbnZlcnRBU0NJSUNhc2U8QVNDSUlDYXNlOjpVcHBlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
VUNoYXIqPihtX2NoYXJhY3RlcnMpLCBtX2xlbmd0aCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+CitzdGF0aWMgQXRvbVN0cmluZyBjb252ZXJ0QVNDSUlMb3dlcmNhc2VB
dG9tKGNvbnN0IENoYXJhY3RlclR5cGUqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChVTkxJ
S0VMWShpc0FTQ0lJVXBwZXIoaW5wdXRbaV0pKSkgeworICAgICAgICAgICAgQ2hhcmFjdGVyVHlw
ZSogY2hhcmFjdGVyczsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3RyaW5nOjpjcmVhdGVV
bmluaXRpYWxpemVkKGxlbmd0aCwgY2hhcmFjdGVycyk7CisgICAgICAgICAgICBTdHJpbmdJbXBs
Ojpjb3B5Q2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBpbnB1dCwgaSk7CisgICAgICAgICAgICBmb3Ig
KDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGNoYXJhY3RlcnNbaV0gPSB0b0FT
Q0lJTG93ZXIoaW5wdXRbaV0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorICAgIH0KKyAgICAvLyBGYXN0IHBhdGggd2hlbiB0aGUgU3RyaW5nVmlldyBpcyBhbHJlYWR5
IGFsbCBsb3dlcmNhc2UuCisgICAgcmV0dXJuIEF0b21TdHJpbmcoaW5wdXQsIGxlbmd0aCk7Cit9
CisKK0F0b21TdHJpbmcgU3RyaW5nVmlldzo6Y29udmVydFRvQVNDSUlMb3dlcmNhc2VBdG9tKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9pczhCaXQpCisgICAgICAgIHJldHVybiBjb252ZXJ0QVNDSUlM
b3dlcmNhc2VBdG9tKGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoKTsKKyAgICByZXR1cm4gY29udmVy
dEFTQ0lJTG93ZXJjYXNlQXRvbShjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgpOworfQorCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBEZXN0aW5hdGlvbkNoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFNvdXJjZUNo
YXJhY3RlclR5cGU+CiB2b2lkIGdldENoYXJhY3RlcnNXaXRoQVNDSUlDYXNlSW50ZXJuYWwoU3Ry
aW5nVmlldzo6Q2FzZUNvbnZlcnRUeXBlIHR5cGUsIERlc3RpbmF0aW9uQ2hhcmFjdGVyVHlwZSog
ZGVzdGluYXRpb24sIGNvbnN0IFNvdXJjZUNoYXJhY3RlclR5cGUqIHNvdXJjZSwgdW5zaWduZWQg
bGVuZ3RoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3Lmgg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCBlYTdhMmJiYTNjYjg0NDcy
NGM3MzM1N2IyMWJiODA2ZmYxNmZmNTZhLi5lZGVmZTE1OWQyZDcxOGViNmNlMTM5NGQ5NmIzMjBh
NDQ0OGI4OTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAtMTQ4LDYgKzE0OCw3IEBA
IHB1YmxpYzoKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgY29udmVydFRvQVNDSUlM
b3dlcmNhc2UoKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGNvbnZlcnRU
b0FTQ0lJVXBwZXJjYXNlKCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEF0b21TdHJp
bmcgY29udmVydFRvQVNDSUlMb3dlcmNhc2VBdG9tKCkgY29uc3Q7CiAKICAgICBib29sIGNvbnRh
aW5zKFVDaGFyKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zKENvZGVVbml0TWF0Y2hGdW5jdGlv
bikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRTdHJlYW0uY3Bw
IGIvU291cmNlL1dURi93dGYvdGV4dC9UZXh0U3RyZWFtLmNwcAppbmRleCA5MGRhOTYzMzBiYzU2
OGI0NDE0ZTU1MzUwMmUwZDljMzBmMTY2YTFlLi41YWQzN2RmMDQ3NzE3Y2E1YTRhOGNmYTY0NTdh
NjUwYzE1MmMwZTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRTdHJlYW0u
Y3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvVGV4dFN0cmVhbS5jcHAKQEAgLTExOCwxMiAr
MTE4LDI0IEBAIFRleHRTdHJlYW0mIFRleHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3Qgdm9pZCog
cCkKICAgICByZXR1cm4gKnRoaXMgPDwgYnVmZmVyOwogfQogCitUZXh0U3RyZWFtJiBUZXh0U3Ry
ZWFtOjpvcGVyYXRvcjw8KGNvbnN0IEF0b21TdHJpbmcmIHN0cmluZykKK3sKKyAgICBtX3RleHQu
YXBwZW5kKHN0cmluZyk7CisgICAgcmV0dXJuICp0aGlzOworfQorCiBUZXh0U3RyZWFtJiBUZXh0
U3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIG1fdGV4dC5h
cHBlbmQoc3RyaW5nKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKK1RleHRTdHJlYW0mIFRleHRT
dHJlYW06Om9wZXJhdG9yPDwoU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgbV90ZXh0LmFwcGVu
ZChzdHJpbmcpOworICAgIHJldHVybiAqdGhpczsKK30KKwogVGV4dFN0cmVhbSYgVGV4dFN0cmVh
bTo6b3BlcmF0b3I8PChjb25zdCBGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMmIG51bWJl
clRvRm9ybWF0KQogewogICAgIGlmIChoYXNGcmFjdGlvbnMobnVtYmVyVG9Gb3JtYXQudmFsdWUp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRTdHJlYW0uaCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvVGV4dFN0cmVhbS5oCmluZGV4IDE5YTQ4ZDRkOGQ0ZDQ2NGU2YjA2YWM4
MTZkZTdmMzEyOTg1ODkzMzQuLjQwZmQ1YWI1NTAxZjMwYWFhOWFmODUwODI5MzBhMzhjZjUyZjE5
MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvVGV4dFN0cmVhbS5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvVGV4dFN0cmVhbS5oCkBAIC03MCw3ICs3MCw5IEBAIHB1YmxpYzoK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChkb3VibGUpOwog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIq
KTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB2
b2lkKik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoY29u
c3QgQXRvbVN0cmluZyYpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KGNvbnN0IFN0cmluZyYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFN0cmluZ1ZpZXcpOwogICAgIC8vIERlcHJlY2F0ZWQuIFVzZSB0aGUgTnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzIEZvcm1hdHRpbmdGbGFnIGluc3RlYWQuCiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgRm9ybWF0TnVtYmVyUmVz
cGVjdGluZ0ludGVnZXJzJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Y2FjaGUvRE9NQ2FjaGVFbmdpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9E
T01DYWNoZUVuZ2luZS5jcHAKaW5kZXggNzgyYjI2MmY0ODc0MTkzODJhNzQ1MDEwMzIzZTMzNTIy
YTc1NjU1OC4uYzQ2ZDY0MDk1NTU1ODRlNTg4ODA3MzgyZDQ1N2ZkNzk5YzYyZDM5ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZUVuZ2luZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZUVuZ2luZS5jcHAKQEAgLTk5
LDcgKzk5LDcgQEAgYm9vbCBxdWVyeUNhY2hlTWF0Y2goY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGNhY2gKICAgICAgICAgICAgIGlzVmFyeWlu
ZyA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgYXV0byBu
YW1lID0gbmFtZVZpZXcudG9TdHJpbmcoKTsKKyAgICAgICAgYXV0byBuYW1lID0gbmFtZVZpZXcu
dG9TdHJpbmdXaXRob3V0Q29weWluZygpOwogICAgICAgICBpc1ZhcnlpbmcgPSBjYWNoZWRSZXF1
ZXN0Lmh0dHBIZWFkZXJGaWVsZChuYW1lKSAhPSByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZChuYW1l
KTsKICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9G
ZXRjaEJvZHlDb25zdW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNo
Qm9keUNvbnN1bWVyLmNwcAppbmRleCA2MDY0NGJmOTk0MTlmYjM3NzYwZDBmY2JiYzZhMDg2ZTc3
NTA5OTk0Li4wNjkwODExNThmZTI1NWVmYTg2MzI0ZTIzMWZhMjEzYjYyMWYwZDcxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keUNvbnN1bWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keUNvbnN1bWVyLmNwcApA
QCAtOTgsOSArOTgsNyBAQCBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyc2VQYXJh
bWV0ZXJzKFN0cmluZ1ZpZXcgaW5wdXQsIHNpemVfdCBwb3NpdGlvbgogICAgICAgICBpZiAocGFy
YW1ldGVyTmFtZS5sZW5ndGgoKQogICAgICAgICAgICAgJiYgaXNWYWxpZEhUVFBUb2tlbihwYXJh
bWV0ZXJOYW1lKQogICAgICAgICAgICAgJiYgcGFyYW1ldGVyVmFsdWUuaXNBbGxTcGVjaWFsQ2hh
cmFjdGVyczxpc0hUVFBRdW90ZWRTdHJpbmdUb2tlbkNvZGVQb2ludD4oKSkgewotICAgICAgICAg
ICAgU3RyaW5nIG5hbWVTdHJpbmcgPSBwYXJhbWV0ZXJOYW1lLnRvU3RyaW5nKCk7Ci0gICAgICAg
ICAgICBpZiAoIXBhcmFtZXRlcnMuY29udGFpbnMobmFtZVN0cmluZykpCi0gICAgICAgICAgICAg
ICAgcGFyYW1ldGVycy5zZXQobmFtZVN0cmluZywgcGFyYW1ldGVyVmFsdWUudG9TdHJpbmcoKSk7
CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmVuc3VyZShwYXJhbWV0ZXJOYW1lLnRvU3RyaW5nKCks
IFsmXSB7IHJldHVybiBwYXJhbWV0ZXJWYWx1ZS50b1N0cmluZygpOyB9KTsKICAgICAgICAgfQog
ICAgIH0KICAgICByZXR1cm4gcGFyYW1ldGVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IGRk
NTA0NTI4N2NiMTMyYmM0MzJhZTJlOTZmMzkxODZhOWE4YmY2YTUuLjQxM2EyNDdkOGJjYTgzZTkx
NjcyODliMmNiZTlhZjVkMWYyZThkNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMTAwNCw3
ICsxMDA0LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6aW50ZXJuYWxMaW5rRWxlbWVudCgpIGNvbnN0CiAgICAgaWYgKCFlcXVhbElnbm9yaW5nRnJh
Z21lbnRJZGVudGlmaWVyKGRvY3VtZW50VVJMLCBsaW5rVVJMKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBhdXRvIGxpbmtlZE5vZGUgPSBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLmZp
bmRBbmNob3IoZnJhZ21lbnRJZGVudGlmaWVyLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7Cisg
ICAgYXV0byBsaW5rZWROb2RlID0gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKS5maW5kQW5jaG9yKGZy
YWdtZW50SWRlbnRpZmllcik7CiAgICAgaWYgKCFsaW5rZWROb2RlKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFy
c2VyLmNwcAppbmRleCA2ODQ1MjM3ODY5MzI2MDg2Y2JjYWUwZWQ5NGRiYzNhNTZkZWI1MmY1Li44
ODRmMDQxODg2YWQzNjExMmY3NTkzODM1MjkxMWQ5MzE1OWMwODZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcApAQCAtNTM2LDcgKzUzNiw3
IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGb250VmFyaWF0aW9uVGFnKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQogICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IFN0
cmluZ1Rva2VuKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBhdXRvIHN0cmlu
ZyA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50b1N0cmluZygp
OworICAgIGF1dG8gc3RyaW5nID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52
YWx1ZSgpOwogICAgIAogICAgIEZvbnRUYWcgdGFnOwogICAgIGlmIChzdHJpbmcubGVuZ3RoKCkg
IT0gdGFnLnNpemUoKSkKQEAgLTIzMDMsOSArMjMwMywxMSBAQCBzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lQXR0cihDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MsIENTU1BhcnNlckNvbnRl
eHQgYwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBDU1NQYXJzZXJUb2tlbiB0
b2tlbiA9IGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICBhdXRvIGF0dHJO
YW1lID0gdG9rZW4udmFsdWUoKS50b0F0b21TdHJpbmcoKTsKKyAgICBBdG9tU3RyaW5nIGF0dHJO
YW1lOwogICAgIGlmIChjb250ZXh0LmlzSFRNTERvY3VtZW50KQotICAgICAgICBhdHRyTmFtZSA9
IGF0dHJOYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CisgICAgICAgIGF0dHJOYW1lID0g
dG9rZW4udmFsdWUoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUF0b20oKTsKKyAgICBlbHNlCisg
ICAgICAgIGF0dHJOYW1lID0gdG9rZW4udmFsdWUoKS50b0F0b21TdHJpbmcoKTsKIAogICAgIGlm
ICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTMzMjksMjMgKzMz
MzEsMjAgQEAgc3RhdGljIGJvb2wgaXNHcmlkVHJhY2tGaXhlZFNpemVkKGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKICAgICByZXR1cm4gaXNHcmlkVHJhY2tGaXhlZFNpemVkKCptaW5QcmltaXRpdmVW
YWx1ZSkgfHwgaXNHcmlkVHJhY2tGaXhlZFNpemVkKCptYXhQcmltaXRpdmVWYWx1ZSk7CiB9CiAK
LXN0YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXJzZUdyaWRUZW1wbGF0ZUFyZWFzQ29sdW1uTmFtZXMo
Y29uc3QgU3RyaW5nJiBncmlkUm93TmFtZXMpCitzdGF0aWMgVmVjdG9yPFN0cmluZz4gcGFyc2VH
cmlkVGVtcGxhdGVBcmVhc0NvbHVtbk5hbWVzKFN0cmluZ1ZpZXcgZ3JpZFJvd05hbWVzKQogewog
ICAgIEFTU0VSVCghZ3JpZFJvd05hbWVzLmlzRW1wdHkoKSk7CiAgICAgVmVjdG9yPFN0cmluZz4g
Y29sdW1uTmFtZXM7Ci0gICAgLy8gVXNpbmcgU3RyaW5nSW1wbCB0byBhdm9pZCBjaGVja3MgYW5k
IGluZGlyZWN0aW9uIGluIGV2ZXJ5IGNhbGwgdG8gU3RyaW5nOjpvcGVyYXRvcltdLgotICAgIFN0
cmluZ0ltcGwmIHRleHQgPSAqZ3JpZFJvd05hbWVzLmltcGwoKTsKLQogICAgIFN0cmluZ0J1aWxk
ZXIgYXJlYU5hbWU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7
ICsraSkgewotICAgICAgICBpZiAoaXNDU1NTcGFjZSh0ZXh0W2ldKSkgeworICAgIGZvciAoYXV0
byBjaGFyYWN0ZXIgOiBncmlkUm93TmFtZXMuY29kZVVuaXRzKCkpIHsKKyAgICAgICAgaWYgKGlz
Q1NTU3BhY2UoY2hhcmFjdGVyKSkgewogICAgICAgICAgICAgaWYgKCFhcmVhTmFtZS5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcy5hcHBlbmQoYXJlYU5hbWUudG9TdHJp
bmcoKSk7CiAgICAgICAgICAgICAgICAgYXJlYU5hbWUuY2xlYXIoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0ZXh0W2ldID09
ICcuJykgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09ICcuJykgewogICAgICAgICAgICAgaWYg
KGFyZWFOYW1lID09ICIuIikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IGlmICghYXJlYU5hbWUuaXNFbXB0eSgpKSB7CkBAIC0zMzUzLDcgKzMzNTIsNyBAQCBzdGF0aWMg
VmVjdG9yPFN0cmluZz4gcGFyc2VHcmlkVGVtcGxhdGVBcmVhc0NvbHVtbk5hbWVzKGNvbnN0IFN0
cmluZyYgZ3JpZFJvd05hbQogICAgICAgICAgICAgICAgIGFyZWFOYW1lLmNsZWFyKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWlzTmFtZUNvZGVQ
b2ludCh0ZXh0W2ldKSkKKyAgICAgICAgICAgIGlmICghaXNOYW1lQ29kZVBvaW50KGNoYXJhY3Rl
cikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAgICAgICAgICAg
ICBpZiAoYXJlYU5hbWUgPT0gIi4iKSB7CiAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXMuYXBw
ZW5kKGFyZWFOYW1lLnRvU3RyaW5nKCkpOwpAQCAtMzM2MSw3ICszMzYwLDcgQEAgc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IHBhcnNlR3JpZFRlbXBsYXRlQXJlYXNDb2x1bW5OYW1lcyhjb25zdCBTdHJp
bmcmIGdyaWRSb3dOYW0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGFyZWFO
YW1lLmFwcGVuZCh0ZXh0W2ldKTsKKyAgICAgICAgYXJlYU5hbWUuYXBwZW5kKGNoYXJhY3Rlcik7
CiAgICAgfQogCiAgICAgaWYgKCFhcmVhTmFtZS5pc0VtcHR5KCkpCkBAIC0zMzcwLDcgKzMzNjks
NyBAQCBzdGF0aWMgVmVjdG9yPFN0cmluZz4gcGFyc2VHcmlkVGVtcGxhdGVBcmVhc0NvbHVtbk5h
bWVzKGNvbnN0IFN0cmluZyYgZ3JpZFJvd05hbQogICAgIHJldHVybiBjb2x1bW5OYW1lczsKIH0K
IAotc3RhdGljIGJvb2wgcGFyc2VHcmlkVGVtcGxhdGVBcmVhc1Jvdyhjb25zdCBTdHJpbmcmIGdy
aWRSb3dOYW1lcywgTmFtZWRHcmlkQXJlYU1hcCYgZ3JpZEFyZWFNYXAsIGNvbnN0IHNpemVfdCBy
b3dDb3VudCwgc2l6ZV90JiBjb2x1bW5Db3VudCkKK3N0YXRpYyBib29sIHBhcnNlR3JpZFRlbXBs
YXRlQXJlYXNSb3coU3RyaW5nVmlldyBncmlkUm93TmFtZXMsIE5hbWVkR3JpZEFyZWFNYXAmIGdy
aWRBcmVhTWFwLCBjb25zdCBzaXplX3Qgcm93Q291bnQsIHNpemVfdCYgY29sdW1uQ291bnQpCiB7
CiAgICAgaWYgKGdyaWRSb3dOYW1lcy5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQ1NTU3BhY2U+
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM1OTUsNyArMzU5NCw3IEBAIHN0YXRpYyBS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVHcmlkVGVtcGxhdGVBcmVhcyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSkKICAgICBzaXplX3QgY29sdW1uQ291bnQgPSAwOwogCiAgICAgd2hpbGUgKHJh
bmdlLnBlZWsoKS50eXBlKCkgPT0gU3RyaW5nVG9rZW4pIHsKLSAgICAgICAgaWYgKCFwYXJzZUdy
aWRUZW1wbGF0ZUFyZWFzUm93KHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFs
dWUoKS50b1N0cmluZygpLCBncmlkQXJlYU1hcCwgcm93Q291bnQsIGNvbHVtbkNvdW50KSkKKyAg
ICAgICAgaWYgKCFwYXJzZUdyaWRUZW1wbGF0ZUFyZWFzUm93KHJhbmdlLmNvbnN1bWVJbmNsdWRp
bmdXaGl0ZXNwYWNlKCkudmFsdWUoKSwgZ3JpZEFyZWFNYXAsIHJvd0NvdW50LCBjb2x1bW5Db3Vu
dCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgKytyb3dDb3VudDsKICAg
ICB9CkBAIC01NjExLDcgKzU2MTAsNyBAQCBib29sIENTU1Byb3BlcnR5UGFyc2VyOjpjb25zdW1l
R3JpZFRlbXBsYXRlUm93c0FuZEFyZWFzQW5kQ29sdW1ucyhDU1NQcm9wZXJ0eUlECiAgICAgICAg
ICAgICB0ZW1wbGF0ZVJvd3MtPmFwcGVuZChsaW5lTmFtZXMucmVsZWFzZU5vbk51bGwoKSk7CiAK
ICAgICAgICAgLy8gSGFuZGxlIGEgdGVtcGxhdGUtYXJlYSdzIHJvdy4KLSAgICAgICAgaWYgKG1f
cmFuZ2UucGVlaygpLnR5cGUoKSAhPSBTdHJpbmdUb2tlbiB8fCAhcGFyc2VHcmlkVGVtcGxhdGVB
cmVhc1JvdyhtX3JhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50b1N0
cmluZygpLCBncmlkQXJlYU1hcCwgcm93Q291bnQsIGNvbHVtbkNvdW50KSkKKyAgICAgICAgaWYg
KG1fcmFuZ2UucGVlaygpLnR5cGUoKSAhPSBTdHJpbmdUb2tlbiB8fCAhcGFyc2VHcmlkVGVtcGxh
dGVBcmVhc1JvdyhtX3JhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKSwg
Z3JpZEFyZWFNYXAsIHJvd0NvdW50LCBjb2x1bW5Db3VudCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICsrcm93Q291bnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAppbmRleCA4NjA3YjA4NGE4
NDI2MDBhNDI4ZmExNTI1OWYwY2UyNzUzZmUwNDEyLi45Njg4YTY3NjE4OTgwYTkzNjMwYzQ5Mzg0
Y2I1ZWI1NDE2NTU1MDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCkBAIC0yNDQyLDkgKzI0NDIsMTEgQEAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGIKICAgICBlbHNlIHsKICAgICAgICAgaWYgKCFhY2NlcHRRdWly
a3lDb2xvcnMpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBpZiAo
dG9rZW4udHlwZSgpID09IElkZW50VG9rZW4pCi0gICAgICAgICAgICBzdHJpbmcgPSB0b2tlbi52
YWx1ZSgpLnRvU3RyaW5nKCk7IC8vIGUuZy4gRkYwMDAwCi0gICAgICAgIGVsc2UgaWYgKHRva2Vu
LnR5cGUoKSA9PSBOdW1iZXJUb2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4p
IHsKKyAgICAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CisgICAgICAgICAg
ICB2aWV3ID0gdG9rZW4udmFsdWUoKTsgLy8gZS5nLiBGRjAwMDAKKyAgICAgICAgICAgIGlmICh2
aWV3Lmxlbmd0aCgpICE9IDMgJiYgdmlldy5sZW5ndGgoKSAhPSA2KQorICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSgpID09
IE51bWJlclRva2VuIHx8IHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbikgewogICAgICAg
ICAgICAgaWYgKHRva2VuLm51bWVyaWNWYWx1ZVR5cGUoKSAhPSBJbnRlZ2VyVmFsdWVUeXBlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgICAgICBhdXRvIG51
bWVyaWNWYWx1ZSA9IHRva2VuLm51bWVyaWNWYWx1ZSgpOwpAQCAtMjQ1NywxMCArMjQ1OSwxMiBA
QCBzdGF0aWMgc3RkOjpvcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gcGFyc2VIZXhDb2xvcihDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgYgogICAgICAgICAgICAgICAgIHN0cmluZyA9IG1ha2VT
dHJpbmcoaW50ZWdlclZhbHVlLCB0b2tlbi52YWx1ZSgpKTsgLy8gZS5nLiAwMDAxRkYKICAgICAg
ICAgICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPCA2KQogICAgICAgICAgICAgICAgIHN0cmluZyA9
IG1ha2VTdHJpbmcoJiIwMDAwMDAiW3N0cmluZy5sZW5ndGgoKV0sIHN0cmluZyk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHN0cmluZy5sZW5ndGgoKSAhPSAzICYmIHN0cmluZy5sZW5ndGgoKSAh
PSA2KQorCisgICAgICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpICE9IDMgJiYgc3RyaW5nLmxl
bmd0aCgpICE9IDYpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAg
ICAgICAgIHZpZXcgPSBzdHJpbmc7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgdmlldyA9IHN0cmluZzsKICAgICB9CiAgICAgYXV0byBy
ZXN1bHQgPSBDU1NQYXJzZXI6OnBhcnNlSGV4Q29sb3Iodmlldyk7CiAgICAgaWYgKCFyZXN1bHQp
CkBAIC0zNTU5LDcgKzM1NjMsNyBAQCBBdG9tU3RyaW5nIGNvbnN1bWVDb3VudGVyU3R5bGVOYW1l
SW5QcmVsdWRlKENTU1BhcnNlclRva2VuUmFuZ2UmIHByZWx1ZGUpCiAgICAgaWYgKGlkZW50TWF0
Y2hlczxDU1NWYWx1ZURlY2ltYWwsIENTU1ZhbHVlRGlzYywgQ1NTVmFsdWVOb25lPihuYW1lVG9r
ZW4uaWQoKSkpCiAgICAgICAgIHJldHVybiBBdG9tU3RyaW5nKCk7CiAgICAgYXV0byBuYW1lID0g
bmFtZVRva2VuLnZhbHVlKCk7Ci0gICAgcmV0dXJuIGlzUHJlZGVmaW5lZENvdW50ZXJTdHlsZShu
YW1lVG9rZW4uaWQoKSkgPyBuYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgOiBuYW1lLnRv
U3RyaW5nKCk7CisgICAgcmV0dXJuIGlzUHJlZGVmaW5lZENvdW50ZXJTdHlsZShuYW1lVG9rZW4u
aWQoKSkgPyBuYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlQXRvbSgpIDogbmFtZS50b0F0b21T
dHJpbmcoKTsKIH0KIAogc3RkOjpvcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFZhcmlh
bnRDU1MyMVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFbGVtZW50LmNwcAppbmRleCA5ZmNlZTg0NjM4ZTQ5OWVmN2YxMDllYzUwNjczNDM0OTIwYTIy
Yjc1Li43Y2UxMzdkOWE2OTBhMGM2NTIwZjI1ZDA1OGU3MzkwNTk4YmIxYmRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCkBAIC0zNjgsNyArMzY4LDcgQEAgYm9vbCBTY3JpcHRF
bGVtZW50OjpyZXF1ZXN0TW9kdWxlU2NyaXB0KGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3Rh
cnRQb3NpdGlvbikKICAgICBBU1NFUlQobV9lbGVtZW50LmRvY3VtZW50KCkuY29udGVudFNlY3Vy
aXR5UG9saWN5KCkpOwogICAgIGNvbnN0IGF1dG8mIGNvbnRlbnRTZWN1cml0eVBvbGljeSA9ICpt
X2VsZW1lbnQuZG9jdW1lbnQoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKTsKICAgICBib29sIGhh
c0tub3duTm9uY2UgPSBjb250ZW50U2VjdXJpdHlQb2xpY3kuYWxsb3dTY3JpcHRXaXRoTm9uY2Uo
bm9uY2UsIG1fZWxlbWVudC5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpKTsKLSAgICBpZiAoIWNv
bnRlbnRTZWN1cml0eVBvbGljeS5hbGxvd0lubGluZVNjcmlwdChtX2VsZW1lbnQuZG9jdW1lbnQo
KS51cmwoKS5zdHJpbmcoKSwgbV9zdGFydExpbmVOdW1iZXIsIHNvdXJjZUNvZGUuc291cmNlKCku
dG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBoYXNLbm93bk5vbmNlKSkKKyAgICBpZiAoIWNvbnRl
bnRTZWN1cml0eVBvbGljeS5hbGxvd0lubGluZVNjcmlwdChtX2VsZW1lbnQuZG9jdW1lbnQoKS51
cmwoKS5zdHJpbmcoKSwgbV9zdGFydExpbmVOdW1iZXIsIHNvdXJjZUNvZGUuc291cmNlKCksIGhh
c0tub3duTm9uY2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2xvYWRhYmxlU2Ny
aXB0ID0gV1RGTW92ZShzY3JpcHQpOwpAQCAtMzg5LDcgKzM4OSw3IEBAIHZvaWQgU2NyaXB0RWxl
bWVudDo6ZXhlY3V0ZUNsYXNzaWNTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNl
Q29kZSkKICAgICAgICAgQVNTRVJUKG1fZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0
eVBvbGljeSgpKTsKICAgICAgICAgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5JiBjb250ZW50
U2VjdXJpdHlQb2xpY3kgPSAqbV9lbGVtZW50LmRvY3VtZW50KCkuY29udGVudFNlY3VyaXR5UG9s
aWN5KCk7CiAgICAgICAgIGJvb2wgaGFzS25vd25Ob25jZSA9IGNvbnRlbnRTZWN1cml0eVBvbGlj
eS5hbGxvd1NjcmlwdFdpdGhOb25jZShtX2VsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihIVE1MTmFtZXM6Om5vbmNlQXR0ciksIG1fZWxlbWVudC5pc0luVXNlckFnZW50U2hh
ZG93VHJlZSgpKTsKLSAgICAgICAgaWYgKCFjb250ZW50U2VjdXJpdHlQb2xpY3kuYWxsb3dJbmxp
bmVTY3JpcHQobV9lbGVtZW50LmRvY3VtZW50KCkudXJsKCkuc3RyaW5nKCksIG1fc3RhcnRMaW5l
TnVtYmVyLCBzb3VyY2VDb2RlLnNvdXJjZSgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgaGFz
S25vd25Ob25jZSkpCisgICAgICAgIGlmICghY29udGVudFNlY3VyaXR5UG9saWN5LmFsbG93SW5s
aW5lU2NyaXB0KG1fZWxlbWVudC5kb2N1bWVudCgpLnVybCgpLnN0cmluZygpLCBtX3N0YXJ0TGlu
ZU51bWJlciwgc291cmNlQ29kZS5zb3VyY2UoKSwgaGFzS25vd25Ob25jZSkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVk
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKaW5kZXgg
MzJmMjdmZGQ4NjNjZjM5NTg2N2FmMzgzYzNiZWU4NzY0YmU0NjM1Mi4uMzk0YTBhN2NmMjA2NmY4
ODk1YjdhYTU5Njc3ODU0YmE1NzkxNTY2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1N0eWxlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50
LmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6c3R5bGVBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IEF0b21TdHJpbmcmIG5ld1N0eWxlU3RyaW5nLCBBdHRyCiAgICAgaWYg
KGRvY3VtZW50KCkuc2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCkgJiYgIWRvY3VtZW50KCkuaXNJ
bkRvY3VtZW50V3JpdGUoKSkKICAgICAgICAgc3RhcnRMaW5lTnVtYmVyID0gZG9jdW1lbnQoKS5z
Y3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKS0+dGV4dFBvc2l0aW9uKCkubV9saW5lOwogCi0gICAg
aWYgKHJlYXNvbiA9PSBNb2RpZmllZEJ5Q2xvbmluZyB8fCBkb2N1bWVudCgpLmNvbnRlbnRTZWN1
cml0eVBvbGljeSgpLT5hbGxvd0lubGluZVN0eWxlKGRvY3VtZW50KCkudXJsKCkuc3RyaW5nKCks
IHN0YXJ0TGluZU51bWJlciwgU3RyaW5nKCksIGlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpKQor
ICAgIGlmIChyZWFzb24gPT0gTW9kaWZpZWRCeUNsb25pbmcgfHwgZG9jdW1lbnQoKS5jb250ZW50
U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dJbmxpbmVTdHlsZShkb2N1bWVudCgpLnVybCgpLnN0cmlu
ZygpLCBzdGFydExpbmVOdW1iZXIsIHsgfSwgaXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSkpCiAg
ICAgICAgIHNldElubGluZVN0eWxlRnJvbVN0cmluZyhuZXdTdHlsZVN0cmluZyk7CiAKICAgICBl
bGVtZW50RGF0YSgpLT5zZXRTdHlsZUF0dHJpYnV0ZUlzRGlydHkoZmFsc2UpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
VHJlZVNjb3BlLmNwcAppbmRleCAxZWNiMzZlODgwNzFlYjFjOGI5M2NmMGQ4NzE0OGE1MTBlNWZj
YzYzLi44ZjZjNDdmOGNkNjhlZmZhMDk5MjQ2YzAwMTA1MjY1OTJhYjRlYjYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vVHJlZVNjb3BlLmNwcApAQCAtNDQzLDcgKzQ0Myw3IEBAIFZlY3RvcjxSZWZQdHI8RWxlbWVu
dD4+IFRyZWVTY29wZTo6ZWxlbWVudHNGcm9tUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKIAog
Ly8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gY2hhbmdlIHRoaXMgdG8gdGFrZSBhIFN0cmluZ1Zp
ZXcsIHNpbmNlIHRoYXQncyB3aGF0IGNhbGxlcnMgaGF2ZQogLy8gYW5kIHRoZXJlIGlzIG5vIHBh
cnRpY3VsYXIgYWR2YW50YWdlIHRvIGFscmVhZHkgaGF2aW5nIGEgU3RyaW5nLgotRWxlbWVudCog
VHJlZVNjb3BlOjpmaW5kQW5jaG9yKGNvbnN0IFN0cmluZyYgbmFtZSkKK0VsZW1lbnQqIFRyZWVT
Y29wZTo6ZmluZEFuY2hvcihTdHJpbmdWaWV3IG5hbWUpCiB7CiAgICAgaWYgKG5hbWUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAppbmRleCA5
MmIyYzQ4NmQ5YWNjZTI1MzZkY2JhZmE0Y2RmNTAwMTBmNDcxMzZlLi5kODQ2OTk0YjNhZjkzZDM4
NTVlN2I5MmU2YWRiOGY4OTVmYmM5MGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
VHJlZVNjb3BlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCkBAIC0xMDQs
NyArMTA0LDcgQEAgcHVibGljOgogICAgIC8vIGZvciBhbiBhbmNob3Igd2l0aCB0aGUgZ2l2ZW4g
bmFtZS4gSUQgbWF0Y2hpbmcgaXMgYWx3YXlzIGNhc2Ugc2Vuc2l0aXZlLCBidXQKICAgICAvLyBB
bmNob3IgbmFtZSBtYXRjaGluZyBpcyBjYXNlIHNlbnNpdGl2ZSBpbiBzdHJpY3QgbW9kZSBhbmQg
bm90IGNhc2Ugc2Vuc2l0aXZlIGluCiAgICAgLy8gcXVpcmtzIG1vZGUgZm9yIGhpc3RvcmljYWwg
Y29tcGF0aWJpbGl0eSByZWFzb25zLgotICAgIEVsZW1lbnQqIGZpbmRBbmNob3IoY29uc3QgU3Ry
aW5nJiBuYW1lKTsKKyAgICBFbGVtZW50KiBmaW5kQW5jaG9yKFN0cmluZ1ZpZXcgbmFtZSk7CiAK
ICAgICBDb250YWluZXJOb2RlJiByb290Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE5vZGU7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCmlu
ZGV4IDJiMTk5M2U3MzJhYTdiMTJiMDU2NGY4ZDJlYTViYTFlNTY1OGI1NDkuLjBiMGJiNmM2MDMw
NTc3NzQ2NjU4YjhkOThmY2VkNmVkZTg1OWFhMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAgLTE2OCw3ICsxNjgsNyBAQCBzdGQ6Om9wdGlv
bmFsPERldGVjdGVkSXRlbT4gRGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RS
ZXN1bHQoY29uc3QgSAogCiBib29sIERhdGFEZXRlY3Rpb246OmNhbkJlUHJlc2VudGVkQnlEYXRh
RGV0ZWN0b3JzKGNvbnN0IFVSTCYgdXJsKQogewotICAgIHJldHVybiBbUEFMOjpzb2Z0TGlua19E
YXRhRGV0ZWN0b3JzQ29yZV9ERFVSTFRhcEFuZEhvbGRTY2hlbWVzKCkgY29udGFpbnNPYmplY3Q6
KE5TU3RyaW5nICopdXJsLnByb3RvY29sKCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCldOworICAgIHJldHVybiBbUEFMOjpzb2Z0TGlua19EYXRhRGV0
ZWN0b3JzQ29yZV9ERFVSTFRhcEFuZEhvbGRTY2hlbWVzKCkgY29udGFpbnNPYmplY3Q6KE5TU3Ry
aW5nICopdXJsLnByb3RvY29sKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKV07CiB9CiAKIGJv
b2wgRGF0YURldGVjdGlvbjo6aXNEYXRhRGV0ZWN0b3JMaW5rKEVsZW1lbnQmIGVsZW1lbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggNGY2NzA3MzZiNzg0MWE5M2UwMGU1NGE5ODg5
ZTdlODIzYjA3Yjg0NC4uYzFkM2Q3ZjhhYTdiYTFjMDI0YzNlODM4MjFjNDNmMTdkMGU1MzgwMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMjIwOSw3ICsyMjA5LDcgQEAgdm9pZCBG
cmFtZVZpZXc6OnJlc3RvcmVTY3JvbGxiYXIoKQogYm9vbCBGcmFtZVZpZXc6OnNjcm9sbFRvRnJh
Z21lbnQoY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgYXV0byBmcmFnbWVudElkZW50aWZpZXIgPSB1
cmwuZnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0gICAgaWYgKHNjcm9sbFRvRnJhZ21lbnRJbnRlcm5h
bChmcmFnbWVudElkZW50aWZpZXIudG9TdHJpbmcoKSkpCisgICAgaWYgKHNjcm9sbFRvRnJhZ21l
bnRJbnRlcm5hbChmcmFnbWVudElkZW50aWZpZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIGlmIChzY3JvbGxUb0ZyYWdtZW50SW50ZXJuYWwoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2Vz
KGZyYWdtZW50SWRlbnRpZmllcikpKQpAQCAtMjIxOSw3ICsyMjE5LDcgQEAgYm9vbCBGcmFtZVZp
ZXc6OnNjcm9sbFRvRnJhZ21lbnQoY29uc3QgVVJMJiB1cmwpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIEZyYW1lVmlldzo6c2Nyb2xsVG9GcmFnbWVudEludGVybmFsKGNvbnN0IFN0cmlu
ZyYgZnJhZ21lbnRJZGVudGlmaWVyKQorYm9vbCBGcmFtZVZpZXc6OnNjcm9sbFRvRnJhZ21lbnRJ
bnRlcm5hbChTdHJpbmdWaWV3IGZyYWdtZW50SWRlbnRpZmllcikKIHsKICAgICAvLyBJZiBvdXIg
VVJMIGhhcyBubyByZWYsIHRoZW4gd2UgaGF2ZSBubyBwbGFjZSB3ZSBuZWVkIHRvIGp1bXAgdG8u
CiAgICAgaWYgKGZyYWdtZW50SWRlbnRpZmllci5pc051bGwoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCmluZGV4IDU5YWMwOGQ1ZTU3NDY3N2E1NjkxNGEzMmYzOTUzYTc5NGY4YTIzMjIuLjU5MGU4
MzJkZGNiNDdjNDNiNTBiNDVkNjEyMzc0ZTJjZjg3NDIzYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuaApAQCAtODA5LDcgKzgwOSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZVdpZGdl
dFBvc2l0aW9uc1RpbWVyRmlyZWQoKTsKIAotICAgIGJvb2wgc2Nyb2xsVG9GcmFnbWVudEludGVy
bmFsKGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgc2Nyb2xsVG9GcmFnbWVudEludGVybmFsKFN0
cmluZ1ZpZXcpOwogICAgIHZvaWQgc2Nyb2xsVG9BbmNob3IoKTsKICAgICB2b2lkIHNjcm9sbFBv
c2l0aW9uQ2hhbmdlZChjb25zdCBTY3JvbGxQb3NpdGlvbiYgb2xkUG9zaXRpb24sIGNvbnN0IFNj
cm9sbFBvc2l0aW9uJiBuZXdQb3NpdGlvbik7CiAgICAgdm9pZCBzY3JvbGxhYmxlQXJlYVNldENo
YW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAKaW5kZXggMzM0OWQx
YWE4Njk0OWNjNjI4MDQ5ZWFmM2JkZWIyOWVjYjYzZTNkNC4uMzhhMjQ0ZGIyY2M4YzIxNjAwMWZh
ZDI4NmIyYWExNTA0OTliM2VhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1
cml0eU9yaWdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5j
cHAKQEAgLTE1Myw3ICsxNTMsNyBAQCBzdGF0aWMgYm9vbCBpc0xvb3BiYWNrSVBBZGRyZXNzKFN0
cmluZ1ZpZXcgaG9zdCkKIH0KIAogLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1z
ZWN1cmUtY29udGV4dHMvI2lzLW9yaWdpbi10cnVzdHdvcnRoeSAoRWRpdG9yJ3MgRHJhZnQsIDE3
IE5vdmVtYmVyIDIwMTYpCi1zdGF0aWMgYm9vbCBzaG91bGRUcmVhdEFzUG90ZW50aWFsbHlUcnVz
dHdvcnRoeShjb25zdCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBTdHJpbmcmIGhvc3QpCitzdGF0
aWMgYm9vbCBzaG91bGRUcmVhdEFzUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjb25zdCBTdHJpbmcm
IHByb3RvY29sLCBTdHJpbmdWaWV3IGhvc3QpCiB7CiAgICAgaWYgKExlZ2FjeVNjaGVtZVJlZ2lz
dHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzU2VjdXJlKHByb3RvY29sKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5LmNwcAppbmRleCA2YWQ2YjIzNzc3ZWE2MmZhZTA3OGY0ZjhhODM1ZDJjOTZjZTY0Zjcw
Li5mYzg1ZmZmYTliMjBjZjVkM2EyY2ZmODliN2QzOGVjZjg0YWEwZmY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKQEAgLTMyMiw3
ICszMjIsNyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsUG9saWNpZXNBbGxvdyhW
aW9sYXRlZERpcmVjdGl2ZUNhbGxiYWNrJiYgY2FsbGJhYwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBQcmVkaWNhdGU+Ci1Db250ZW50U2VjdXJpdHlQb2xpY3k6Okhhc2hJbkVuZm9yY2VkQW5kUmVw
b3J0T25seVBvbGljaWVzUGFpciBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmZpbmRIYXNoT2ZDb250
ZW50SW5Qb2xpY2llcyhQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIGNvbnN0IFN0cmluZyYgY29udGVu
dCwgT3B0aW9uU2V0PENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2hBbGdvcml0aG0+IGFsZ29yaXRo
bXMpIGNvbnN0CitDb250ZW50U2VjdXJpdHlQb2xpY3k6Okhhc2hJbkVuZm9yY2VkQW5kUmVwb3J0
T25seVBvbGljaWVzUGFpciBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmZpbmRIYXNoT2ZDb250ZW50
SW5Qb2xpY2llcyhQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIFN0cmluZ1ZpZXcgY29udGVudCwgT3B0
aW9uU2V0PENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2hBbGdvcml0aG0+IGFsZ29yaXRobXMpIGNv
bnN0CiB7CiAgICAgaWYgKGFsZ29yaXRobXMuaXNFbXB0eSgpIHx8IGNvbnRlbnQuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4geyBmYWxzZSwgZmFsc2UgfTsKQEAgLTQwNCw3ICs0MDQsNyBAQCBi
b29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dTdHlsZVdpdGhOb25jZShjb25zdCBTdHJp
bmcmIG5vbmNlLCBib29sIG92ZXJyaQogICAgIHJldHVybiBhbGxQb2xpY2llc1dpdGhEaXNwb3Np
dGlvbkFsbG93KENvbnRlbnRTZWN1cml0eVBvbGljeTo6RGlzcG9zaXRpb246OkVuZm9yY2UsICZD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojp2aW9sYXRlZERpcmVjdGl2ZUZvclN0
eWxlTm9uY2UsIHN0cmlwcGVkTm9uY2UpOwogfQogCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6YWxsb3dJbmxpbmVTY3JpcHQoY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6
Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBjb25zdCBTdHJpbmcmIHNjcmlwdENvbnRlbnQs
IGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpIGNvbnN0Citib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6YWxsb3dJbmxpbmVTY3JpcHQoY29uc3QgU3RyaW5nJiBjb250ZXh0VVJM
LCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBTdHJpbmdWaWV3IHNjcmlw
dENvbnRlbnQsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpIGNvbnN0CiB7CiAg
ICAgaWYgKG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KQogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTQyNyw3ICs0MjcsNyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dJ
bmxpbmVTY3JpcHQoY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVAogICAgIHJldHVy
biBmb3VuZEhhc2hJbkVuZm9yY2VkUG9saWNpZXMgfHwgYWxsUG9saWNpZXNXaXRoRGlzcG9zaXRp
b25BbGxvdyhDb250ZW50U2VjdXJpdHlQb2xpY3k6OkRpc3Bvc2l0aW9uOjpFbmZvcmNlLCBoYW5k
bGVWaW9sYXRlZERpcmVjdGl2ZSwgJkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6
OnZpb2xhdGVkRGlyZWN0aXZlRm9yVW5zYWZlSW5saW5lU2NyaXB0KTsKIH0KIAotYm9vbCBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93SW5saW5lU3R5bGUoY29uc3QgU3RyaW5nJiBjb250ZXh0
VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBjb25zdCBTdHJpbmcm
IHN0eWxlQ29udGVudCwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSkgY29uc3QK
K2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0lubGluZVN0eWxlKGNvbnN0IFN0cmlu
ZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgU3Ry
aW5nVmlldyBzdHlsZUNvbnRlbnQsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kp
IGNvbnN0CiB7CiAgICAgaWYgKG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRl
bnRTZWN1cml0eVBvbGljeS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmgKaW5kZXggYmY2YTI4MTNlNGQ2MDYyNTMxOTJkYzIwY2FiNjkyZmI2YWUwMGYx
OC4uMWVhYTg1ZDM3MGM1NWZjMWQwNTVlNWMyM2QxYjBmODY2MDhjNjc2MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmgKQEAgLTkxLDggKzkx
LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBhbGxvd0phdmFTY3JpcHRVUkxzKGNvbnN0IFN0cmlu
ZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgYm9v
bCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlKSBjb25zdDsKICAgICBib29s
IGFsbG93SW5saW5lRXZlbnRIYW5kbGVycyhjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0
IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2Vj
dXJpdHlQb2xpY3kgPSBmYWxzZSkgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd0lubGluZVNjcmlwdChj
b25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4
dExpbmUsIGNvbnN0IFN0cmluZyYgc2NyaXB0Q29udGVudCwgYm9vbCBvdmVycmlkZUNvbnRlbnRT
ZWN1cml0eVBvbGljeSA9IGZhbHNlKSBjb25zdDsKLSAgICBib29sIGFsbG93SW5saW5lU3R5bGUo
Y29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRl
eHRMaW5lLCBjb25zdCBTdHJpbmcmIHN0eWxlQ29udGVudCwgYm9vbCBvdmVycmlkZUNvbnRlbnRT
ZWN1cml0eVBvbGljeSA9IGZhbHNlKSBjb25zdDsKKyAgICBib29sIGFsbG93SW5saW5lU2NyaXB0
KGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250
ZXh0TGluZSwgU3RyaW5nVmlldyBzY3JpcHRDb250ZW50LCBib29sIG92ZXJyaWRlQ29udGVudFNl
Y3VyaXR5UG9saWN5ID0gZmFsc2UpIGNvbnN0OworICAgIGJvb2wgYWxsb3dJbmxpbmVTdHlsZShj
b25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4
dExpbmUsIFN0cmluZ1ZpZXcgc3R5bGVDb250ZW50LCBib29sIG92ZXJyaWRlQ29udGVudFNlY3Vy
aXR5UG9saWN5ID0gZmFsc2UpIGNvbnN0OwogCiAgICAgYm9vbCBhbGxvd0V2YWwoSlNDOjpKU0ds
b2JhbE9iamVjdCosIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSkg
Y29uc3Q7CiAKQEAgLTIwNiw3ICsyMDYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgYWxsb3dSZXNv
dXJjZUZyb21Tb3VyY2UoY29uc3QgVVJMJiwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkLCBjb25z
dCBjaGFyKiwgUmVzb3VyY2VQcmVkaWNhdGUpIGNvbnN0OwogCiAgICAgdXNpbmcgSGFzaEluRW5m
b3JjZWRBbmRSZXBvcnRPbmx5UG9saWNpZXNQYWlyID0gc3RkOjpwYWlyPGJvb2wsIGJvb2w+Owot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWRpY2F0ZT4gSGFzaEluRW5mb3JjZWRBbmRSZXBvcnRP
bmx5UG9saWNpZXNQYWlyIGZpbmRIYXNoT2ZDb250ZW50SW5Qb2xpY2llcyhQcmVkaWNhdGUmJiwg
Y29uc3QgU3RyaW5nJiBjb250ZW50LCBPcHRpb25TZXQ8Q29udGVudFNlY3VyaXR5UG9saWN5SGFz
aEFsZ29yaXRobT4pIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBQcmVkaWNhdGU+IEhhc2hJbkVuZm9yY2VkQW5kUmVwb3J0T25seVBvbGljaWVzUGFpciBm
aW5kSGFzaE9mQ29udGVudEluUG9saWNpZXMoUHJlZGljYXRlJiYsIFN0cmluZ1ZpZXcgY29udGVu
dCwgT3B0aW9uU2V0PENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2hBbGdvcml0aG0+KSBjb25zdCBX
QVJOX1VOVVNFRF9SRVRVUk47CiAKICAgICB2b2lkIHJlcG9ydFZpb2xhdGlvbihjb25zdCBTdHJp
bmcmIGVmZmVjdGl2ZVZpb2xhdGVkRGlyZWN0aXZlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmUmIHZpb2xhdGVkRGlyZWN0aXZlLCBjb25zdCBVUkwmIGJsb2NrZWRVUkwsIGNv
bnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIEpTQzo6SlNHbG9iYWxPYmplY3QqKSBjb25zdDsK
ICAgICB2b2lkIHJlcG9ydFZpb2xhdGlvbihjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZVZpb2xhdGVk
RGlyZWN0aXZlLCBjb25zdCBTdHJpbmcmIHZpb2xhdGVkRGlyZWN0aXZlLCBjb25zdCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0JiwgY29uc3QgVVJMJiBibG9ja2VkVVJMLCBjb25z
dCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiA9IG51bGxwdHIp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVnYWN5U2NoZW1l
UmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVnYWN5U2NoZW1lUmVnaXN0
cnkuY3BwCmluZGV4IDFjYjc5YTYzOTQ0NDNmNTNlYjllNGE1YTQ3MGIxODZhN2JkMmYwZGEuLmQx
NTYxNzg1NjQyOTEzMDlmZmE2OWI0OGFmYjIzNDhlMWE2YTA5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xlZ2FjeVNjaGVtZVJlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9MZWdhY3lTY2hlbWVSZWdpc3RyeS5jcHAKQEAgLTI1Myw3ICsyNTMs
NyBAQCB2b2lkIExlZ2FjeVNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzSGFuZGxl
ZEJ5U2NoZW1lSGFuZGxlcihjb25zdCBTdHJpbgogYm9vbCBMZWdhY3lTY2hlbWVSZWdpc3RyeTo6
c2NoZW1lSXNIYW5kbGVkQnlTY2hlbWVIYW5kbGVyKFN0cmluZ1ZpZXcgc2NoZW1lKQogewogICAg
IExvY2tlciBsb2NrZXIgeyBzY2hlbWVSZWdpc3RyeUxvY2sgfTsKLSAgICByZXR1cm4gc2NoZW1l
c0hhbmRsZWRCeVNjaGVtZUhhbmRsZXIoKS5jb250YWlucyhzY2hlbWUudG9TdHJpbmcoKSk7Cisg
ICAgcmV0dXJuIHNjaGVtZXNIYW5kbGVkQnlTY2hlbWVIYW5kbGVyKCkuY29udGFpbnMoc2NoZW1l
LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7CiB9CiAKIHN0YXRpYyBVUkxTY2hlbWVzTWFwJiBz
Y2hlbWVzQWxsb3dpbmdEYXRhYmFzZUFjY2Vzc0luUHJpdmF0ZUJyb3dzaW5nKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBh
cnNlcldlYk0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKaW5kZXggMzMzYTVmMTAxNzU3OWI1ZDhkNWI4ZjhjZmZh
ZmUwNWQxNjczOGY0MS4uZTZkZmNiMzQ5NmY5MmQyYWEyMWY4NzY4NDY0ODA4YjE2MWQ1Nzc2YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNl
QnVmZmVyUGFyc2VyV2ViTS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBw
dWJsaWM6CiAKICAgICAgICAgYXV0byBzbGFzaExvY2F0aW9uID0gY29kZWNJRC5maW5kKCcvJyk7
CiAgICAgICAgIGF1dG8gbGVuZ3RoID0gc2xhc2hMb2NhdGlvbiA9PSBub3RGb3VuZCA/IGNvZGVj
SUQubGVuZ3RoKCkgLSAyIDogc2xhc2hMb2NhdGlvbiAtIDI7Ci0gICAgICAgIG1fY29kZWMgPSBB
dG9tU3RyaW5nIHsgY29kZWNJRC5zdWJzdHJpbmcoMiwgbGVuZ3RoKS5jb252ZXJ0VG9BU0NJSUxv
d2VyY2FzZSgpIH07CisgICAgICAgIG1fY29kZWMgPSBjb2RlY0lELnN1YnN0cmluZygyLCBsZW5n
dGgpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlQXRvbSgpOwogICAgICAgICByZXR1cm4gKm1fY29k
ZWM7CiAgICAgfQogICAgIGJvb2wgaXNWaWRlbygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdHJh
Y2sudHJhY2tfdHlwZS5pc19wcmVzZW50KCkgJiYgbV90cmFjay50cmFja190eXBlLnZhbHVlKCkg
PT0gVHJhY2tUeXBlOjprVmlkZW87IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUGFyc2VkQ29udGVudFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9QYXJzZWRDb250ZW50VHlwZS5jcHAKaW5kZXggNGVlNjI3MjQ0MDAyYjdkYzQ2
NzdmMzllOTRhMjhhNjkyMzQ0YjcyMy4uOWVmMmExNzIwZDU3MTI2ZmJlNzEyY2Q5YTJhMWQyMjIx
YTFjNGU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJz
ZWRDb250ZW50VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Q
YXJzZWRDb250ZW50VHlwZS5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCBzdGF0aWMgU3RyaW5nIGNv
bGxlY3RIVFRQUXVvdGVkU3RyaW5nKFN0cmluZ1ZpZXcgaW5wdXQsIHVuc2lnbmVkJiBzdGFydElu
ZGV4KQogc3RhdGljIGJvb2wgY29udGFpbnNOb25Ub2tlbkNoYXJhY3RlcnMoU3RyaW5nVmlldyBp
bnB1dCwgTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IE1vZGU6Ok1pbWVTbmlmZikKLSAg
ICAgICAgcmV0dXJuICFpc1ZhbGlkSFRUUFRva2VuKGlucHV0LnRvU3RyaW5nV2l0aG91dENvcHlp
bmcoKSk7CisgICAgICAgIHJldHVybiAhaXNWYWxpZEhUVFBUb2tlbihpbnB1dCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaW5wdXQubGVuZ3RoKCk7ICsraW5kZXgpIHsK
ICAgICAgICAgaWYgKCFpc1Rva2VuQ2hhcmFjdGVyKGlucHV0W2luZGV4XSkpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
aHlwaGVuL0h5cGhlbmF0aW9uTGliSHlwaGVuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvaHlwaGVuL0h5cGhlbmF0aW9uTGliSHlwaGVuLmNwcAppbmRleCA4YjljZmYyZWQ5ZGVk
MmNiM2MyNTdlYzdlZDEwZjM1MTc2ZWE2MTllLi5mYTA1OGE4M2NmNjkzZDNhMjA3ZDFiZDlhY2Fl
ODdmNDA1MDgzZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2h5
cGhlbi9IeXBoZW5hdGlvbkxpYkh5cGhlbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9oeXBoZW4vSHlwaGVuYXRpb25MaWJIeXBoZW4uY3BwCkBAIC0yNzgsNyArMjc4LDcg
QEAgc2l6ZV90IGxhc3RIeXBoZW5Mb2NhdGlvbihTdHJpbmdWaWV3IHN0cmluZywgc2l6ZV90IGJl
Zm9yZUluZGV4LCBjb25zdCBBdG9tU3RyaW4KICAgICAvLyB3aGljaCBzdG9yZXMgZWl0aGVyIFVU
Ri0xNiBvciBMYXRpbjEgZGF0YS4gVGhpcyBpcyB1bmZvcnR1bmF0ZSBmb3IgcGVyZm9ybWFuY2UK
ICAgICAvLyByZWFzb25zIGFuZCB3ZSBzaG91bGQgY29uc2lkZXIgc3dpdGNoaW5nIHRvIGEgbW9y
ZSBmbGV4aWJsZSBoeXBoZW5hdGlvbiBsaWJyYXJ5CiAgICAgLy8gaWYgaXQgaXMgYXZhaWxhYmxl
LgotICAgIENTdHJpbmcgdXRmOFN0cmluZ0NvcHkgPSBzdHJpbmcudG9TdHJpbmdXaXRob3V0Q29w
eWluZygpLnV0ZjgoKTsKKyAgICBDU3RyaW5nIHV0ZjhTdHJpbmdDb3B5ID0gc3RyaW5nLnV0Zjgo
KTsKIAogICAgIC8vIFdlYkNvcmUgb2Z0ZW4gcGFzc2VzIHN0cmluZ3MgbGlrZSAiIHdvcmR0b2h5
cGhlbmF0ZSIgdG8gdGhlIHBsYXRmb3JtIGxheWVyLiBTaW5jZQogICAgIC8vIGxpYmh5cGhlbiBp
c24ndCBhZHZhbmNlZCBlbm91Z2ggdG8gZGVhbCB3aXRoIGxlYWRpbmcgc3BhY2VzIChwcmVzdW1h
Ymx5IENvcmVGb3VuZGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKaW5kZXggMzAxNzJhOWM4MmE1OTQ3MGY2ZDJmMTk5ZTYwZGFlMzE0NDcwODZi
MC4uODJmZjA4NWQ0MGNjZjMwNjIxYTg0NWI4MWJjYjc5YjFmZTM0ODkzMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDcxLDcgKzQ3MSw3
IEBAIHZvaWQgd3JpdGVEZWJ1Z0luZm8oVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVj
dCYgb2JqZWN0LCBPcHRpb25TZXQ8UmVuZGVyCiAgICAgaWYgKGJlaGF2aW9yLmNvbnRhaW5zKFJl
bmRlckFzVGV4dEZsYWc6OlNob3dJREFuZENsYXNzKSkgewogICAgICAgICBpZiAoRWxlbWVudCog
ZWxlbWVudCA9IGlzPEVsZW1lbnQ+KG9iamVjdC5ub2RlKCkpID8gZG93bmNhc3Q8RWxlbWVudD4o
b2JqZWN0Lm5vZGUoKSkgOiBudWxscHRyKSB7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFz
SUQoKSkKLSAgICAgICAgICAgICAgICB0cyA8PCAiIGlkPVwiIiArIGVsZW1lbnQtPmdldElkQXR0
cmlidXRlKCkgKyAiXCIiOworICAgICAgICAgICAgICAgIHRzIDw8ICIgaWQ9XCIiIDw8IGVsZW1l
bnQtPmdldElkQXR0cmlidXRlKCkgPDwgIlwiIjsKIAogICAgICAgICAgICAgaWYgKGVsZW1lbnQt
Pmhhc0NsYXNzKCkpIHsKICAgICAgICAgICAgICAgICB0cyA8PCAiIGNsYXNzPVwiIjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAppbmRleCBlZDU2NmRlNWJiZDIyM2Y1OWM0OThmNTIx
NjJkYjU1MDZiOGE0ZWFjLi45NTM1ZmE5YWIwZGNiYzFiZmJjNWZhNjc5NjY2N2M1ZmY5YTdkZDBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCkBAIC01NDYsNyArNTQ2LDcgQEAg
QWZmaW5lVHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxv
YXQgdmlld1dpZHRoLCBmbG9hdCB2aWUKICAgICByZXR1cm4gdHJhbnNmb3JtOwogfQogCi1TVkdW
aWV3RWxlbWVudCogU1ZHU1ZHRWxlbWVudDo6ZmluZFZpZXdBbmNob3IoY29uc3QgU3RyaW5nJiBm
cmFnbWVudElkZW50aWZpZXIpIGNvbnN0CitTVkdWaWV3RWxlbWVudCogU1ZHU1ZHRWxlbWVudDo6
ZmluZFZpZXdBbmNob3IoU3RyaW5nVmlldyBmcmFnbWVudElkZW50aWZpZXIpIGNvbnN0CiB7CiAg
ICAgYXV0byogYW5jaG9yRWxlbWVudCA9IGRvY3VtZW50KCkuZmluZEFuY2hvcihmcmFnbWVudElk
ZW50aWZpZXIpOwogICAgIHJldHVybiBpczxTVkdWaWV3RWxlbWVudD4oYW5jaG9yRWxlbWVudCkg
PyBkb3duY2FzdDxTVkdWaWV3RWxlbWVudD4oYW5jaG9yRWxlbWVudCk6IG51bGxwdHI7CkBAIC01
NTgsMTQgKzU1OCwxNCBAQCBTVkdTVkdFbGVtZW50KiBTVkdTVkdFbGVtZW50OjpmaW5kUm9vdEFu
Y2hvcihjb25zdCBTVkdWaWV3RWxlbWVudCogdmlld0VsZW1lbnQpCiAgICAgcmV0dXJuIGlzPFNW
R1NWR0VsZW1lbnQ+KHZpZXdwb3J0RWxlbWVudCkgPyBkb3duY2FzdDxTVkdTVkdFbGVtZW50Pih2
aWV3cG9ydEVsZW1lbnQpIDogbnVsbHB0cjsKIH0KIAotU1ZHU1ZHRWxlbWVudCogU1ZHU1ZHRWxl
bWVudDo6ZmluZFJvb3RBbmNob3IoY29uc3QgU3RyaW5nJiBmcmFnbWVudElkZW50aWZpZXIpIGNv
bnN0CitTVkdTVkdFbGVtZW50KiBTVkdTVkdFbGVtZW50OjpmaW5kUm9vdEFuY2hvcihTdHJpbmdW
aWV3IGZyYWdtZW50SWRlbnRpZmllcikgY29uc3QKIHsKICAgICBpZiAoYXV0byogdmlld0VsZW1l
bnQgPSBmaW5kVmlld0FuY2hvcihmcmFnbWVudElkZW50aWZpZXIpKQogICAgICAgICByZXR1cm4g
ZmluZFJvb3RBbmNob3Iodmlld0VsZW1lbnQpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1i
b29sIFNWR1NWR0VsZW1lbnQ6OnNjcm9sbFRvRnJhZ21lbnQoY29uc3QgU3RyaW5nJiBmcmFnbWVu
dElkZW50aWZpZXIpCitib29sIFNWR1NWR0VsZW1lbnQ6OnNjcm9sbFRvRnJhZ21lbnQoU3RyaW5n
VmlldyBmcmFnbWVudElkZW50aWZpZXIpCiB7CiAgICAgYXV0byByZW5kZXJlciA9IHRoaXMtPnJl
bmRlcmVyKCk7CiAgICAgYXV0byB2aWV3ID0gbV92aWV3U3BlYzsKQEAgLTYxNiw3ICs2MTYsNyBA
QCBib29sIFNWR1NWR0VsZW1lbnQ6OnNjcm9sbFRvRnJhZ21lbnQoY29uc3QgU3RyaW5nJiBmcmFn
bWVudElkZW50aWZpZXIpCiAgICAgICAgICAgICByb290RWxlbWVudC0+aW5oZXJpdFZpZXdBdHRy
aWJ1dGVzKCp2aWV3RWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBy
b290RWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpyZW5kZXJlcik7
Ci0gICAgICAgICAgICBtX2N1cnJlbnRWaWV3RnJhZ21lbnRJZGVudGlmaWVyID0gZnJhZ21lbnRJ
ZGVudGlmaWVyOworICAgICAgICAgICAgbV9jdXJyZW50Vmlld0ZyYWdtZW50SWRlbnRpZmllciA9
IGZyYWdtZW50SWRlbnRpZmllci50b1N0cmluZygpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZH
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAppbmRleCA4Mjdl
ZmE2M2IwNTRjMDNmMmM4Yjc4ODIyNmYyYjcwZGM3YWRmY2UyLi45NDI4YTk1M2RkMDFlYzg4N2E1
MzMzNWY3MzJhOTFiYTg4ZDA2NDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U1ZHRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgKQEAg
LTg0LDcgKzg0LDcgQEAgcHVibGljOiAvLyBET00KIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNW
R1NWR0VsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKICAg
ICBzdGF0aWMgUmVmPFNWR1NWR0VsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotICAgIGJvb2wg
c2Nyb2xsVG9GcmFnbWVudChjb25zdCBTdHJpbmcmIGZyYWdtZW50SWRlbnRpZmllcik7CisgICAg
Ym9vbCBzY3JvbGxUb0ZyYWdtZW50KFN0cmluZ1ZpZXcgZnJhZ21lbnRJZGVudGlmaWVyKTsKICAg
ICB2b2lkIHJlc2V0U2Nyb2xsQW5jaG9yKCk7CiAKICAgICB1c2luZyBTVkdHcmFwaGljc0VsZW1l
bnQ6OnJlZjsKQEAgLTE0MSw5ICsxNDEsOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxGcmFtZT4g
ZnJhbWVGb3JDdXJyZW50U2NhbGUoKSBjb25zdDsKICAgICBSZWY8Tm9kZUxpc3Q+IGNvbGxlY3RJ
bnRlcnNlY3Rpb25PckVuY2xvc3VyZUxpc3QoU1ZHUmVjdCYsIFNWR0VsZW1lbnQqLCBib29sICgq
Y2hlY2tGdW5jdGlvbikoU1ZHRWxlbWVudCYsIFNWR1JlY3QmKSk7CiAKLSAgICBTVkdWaWV3RWxl
bWVudCogZmluZFZpZXdBbmNob3IoY29uc3QgU3RyaW5nJiBmcmFnbWVudElkZW50aWZpZXIpIGNv
bnN0OworICAgIFNWR1ZpZXdFbGVtZW50KiBmaW5kVmlld0FuY2hvcihTdHJpbmdWaWV3IGZyYWdt
ZW50SWRlbnRpZmllcikgY29uc3Q7CiAgICAgU1ZHU1ZHRWxlbWVudCogZmluZFJvb3RBbmNob3Io
Y29uc3QgU1ZHVmlld0VsZW1lbnQqKSBjb25zdDsKLSAgICBTVkdTVkdFbGVtZW50KiBmaW5kUm9v
dEFuY2hvcihjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBTVkdTVkdFbGVtZW50KiBmaW5kUm9v
dEFuY2hvcihTdHJpbmdWaWV3KSBjb25zdDsKIAogICAgIGJvb2wgbV91c2VDdXJyZW50VmlldyB7
IGZhbHNlIH07CiAgICAgUmVmPFNNSUxUaW1lQ29udGFpbmVyPiBtX3RpbWVDb250YWluZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAppbmRleCA5MWQ4OWZlZGU0YjAxNjEyYzZhZDU2YmQ0
Mjc2YWUwODAwNmU3NmRiLi4xYWM2OTM3MThkNmUxZWI5ZTQ5NjBiNTUxODkwMTcyYTEyNDQ5Yzcy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBl
IHRyYW5zZm9ybVNwZWNbXQogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGlj
IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHpvb21BbmRQYW5TcGVjW10gPSB7J3onLCAnbycsICdv
JywgJ20nLCAnQScsICduJywgJ2QnLCAnUCcsICdhJywgJ24nfTsKIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IHN0YXRpYyBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSB2aWV3VGFyZ2V0
U3BlY1tdID0gIHsndicsICdpJywgJ2UnLCAndycsICdUJywgJ2EnLCAncicsICdnJywgJ2UnLCAn
dCd9OwogCi1ib29sIFNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZ1ZpZXcm
IHN0cmluZykKK2Jvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoU3RyaW5nVmlldyBzdHJp
bmcpCiB7CiAgICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFsmXShh
dXRvIGJ1ZmZlcikgLT4gYm9vbCB7CiAgICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSB0eXBl
bmFtZSBkZWNsdHlwZShidWZmZXIpOjpDaGFyYWN0ZXJUeXBlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1Nw
ZWMuaAppbmRleCBkMTUxOGZmNTVhMjY4MWEwNzRmMWI2ZWNkMTUyYmE3MmM0NGUwYTk4Li41NDM5
YjMxMzgwZjljMmEzMGVlNjY3MDQxODZhZmYzMGVmYjQ0MDAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmll
d1NwZWMuaApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNWR1ZpZXdTcGVjKGNvbnRleHRFbGVtZW50KSk7CiAgICAgfQogCi0gICAgYm9vbCBw
YXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBib29sIHBhcnNlVmlld1NwZWMo
U3RyaW5nVmlldyk7CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgcmVzZXRDb250ZXh0RWxl
bWVudCgpIHsgbV9jb250ZXh0RWxlbWVudCA9IG51bGxwdHI7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24ubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlv
bi5tbQppbmRleCBkMGM3ZTlhMWY1OGJlMjRiOGIwZmE0NWMyMmJmYjVhZWIzYmVhNDVjLi44MjQ0
ZTEyNDIxMjU1NGIyZWM2NGY4NDQ0ZjU1MzJlZjJhMzU1Zjg3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlv
bi5tbQpAQCAtNTY1LDcgKzU2NSw3IEBAIC0gKHZvaWQpc2V0VVJMU2NoZW1lSGFuZGxlcjooaWQg
PFdLVVJMU2NoZW1lSGFuZGxlcj4pdXJsU2NoZW1lSGFuZGxlciBmb3JVUkxTY2hlCiAgICAgaWYg
KFtXS1dlYlZpZXcgaGFuZGxlc1VSTFNjaGVtZTp1cmxTY2hlbWVdKQogICAgICAgICBbTlNFeGNl
cHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiJyVAJyBpcyBh
IFVSTCBzY2hlbWUgdGhhdCBXS1dlYlZpZXcgaGFuZGxlcyBuYXRpdmVseSIsIHVybFNjaGVtZV07
CiAKLSAgICBhdXRvIGNhbm9uaWNhbFNjaGVtZSA9IFdURjo6VVJMUGFyc2VyOjptYXliZUNhbm9u
aWNhbGl6ZVNjaGVtZSh1cmxTY2hlbWUpOworICAgIGF1dG8gY2Fub25pY2FsU2NoZW1lID0gV1RG
OjpVUkxQYXJzZXI6Om1heWJlQ2Fub25pY2FsaXplU2NoZW1lKFN0cmluZyh1cmxTY2hlbWUpKTsK
ICAgICBpZiAoIWNhbm9uaWNhbFNjaGVtZSkKICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5T
SW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIiclQCcgaXMgbm90IGEgdmFsaWQgVVJM
IHNjaGVtZSIsIHVybFNjaGVtZV07CiAKQEAgLTU3Nyw3ICs1NzcsNyBAQCAtICh2b2lkKXNldFVS
TFNjaGVtZUhhbmRsZXI6KGlkIDxXS1VSTFNjaGVtZUhhbmRsZXI+KXVybFNjaGVtZUhhbmRsZXIg
Zm9yVVJMU2NoZQogCiAtIChpZCA8V0tVUkxTY2hlbWVIYW5kbGVyPil1cmxTY2hlbWVIYW5kbGVy
Rm9yVVJMU2NoZW1lOihOU1N0cmluZyAqKXVybFNjaGVtZQogewotICAgIGF1dG8gY2Fub25pY2Fs
U2NoZW1lID0gV1RGOjpVUkxQYXJzZXI6Om1heWJlQ2Fub25pY2FsaXplU2NoZW1lKHVybFNjaGVt
ZSk7CisgICAgYXV0byBjYW5vbmljYWxTY2hlbWUgPSBXVEY6OlVSTFBhcnNlcjo6bWF5YmVDYW5v
bmljYWxpemVTY2hlbWUoU3RyaW5nKHVybFNjaGVtZSkpOwogICAgIGlmICghY2Fub25pY2FsU2No
ZW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>